[
  {
    "path": ".codecov.yml",
    "content": "ignore:\n  - '*/tests/*'\n"
  },
  {
    "path": ".coveragerc",
    "content": "# this file controls the execution of coverage.py\n[run]\nomit=\n    ./tests/*\n    ./docs/*\n    ./dev/*\n    ./scripts/*\n\n[report]\n# Regexes for lines to exclude from consideration\nexclude_lines =\n    # Have to re-enable the standard pragma\n    pragma: no cover\n\n    # Don't complain about missing debug-only code:\n    def __repr__\n    if self\\.debug\n\n    # Don't complain if tests don't hit defensive assertion code:\n    raise AssertionError\n    raise NotImplementedError\n\n    # Don't complain if non-runnable code isn't run:\n    if 0:\n    if __name__ == .__main__.:\n"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/bug_report.md",
    "content": "---\nname: Bug report\nabout: Create a report to help us improve\ntitle: ''\nlabels: potential bug\nassignees: ''\n\n---\n\n**Describe the bug**\nA clear and concise description of what the bug is.\n\n**To Reproduce**\nSteps to reproduce the behaviour.\n\nIf model related, please try and reproduce with one of the provided models (found in `/cases/`). Else, please provided the input files (a `.fem.h5`, `aero.h5` and `case.sharpy`).\n\n**Expected behavior**\nA clear and concise description of what you expected to happen.\n\n**Screenshots**\nIf applicable, add screenshots to help explain your problem.\n\n**System Info (please complete the following information):**\n - OS: [e.g. CentOS7/MacOS 13.1]\n - SHARPy Version [e.g. v1.2]\n\n**Additional context**\nAdd any other context about the problem here.\n"
  },
  {
    "path": ".github/workflows/docker_build.yaml",
    "content": "name: Create and publish Docker image\n\non:\n  push:\n    branches: \n      - develop\n      - main\n    tags:\n      - 'v*'\n\nenv:\n  REGISTRY: ghcr.io\n  IMAGE_NAME: ${{ github.repository }}\n\njobs:\n  build-and-push-image:\n    runs-on: ubuntu-latest\n    permissions:\n      contents: read\n      packages: write\n\n    steps:\n      - name: Checkout repository\n        uses: actions/checkout@v3\n\n      - name: Log in to the Container registry\n        uses: docker/login-action@v2\n        with:\n          registry: ${{ env.REGISTRY }}\n          username: ${{ github.actor }}\n          password: ${{ secrets.GITHUB_TOKEN }}\n\n      - name: Extract metadata (tags, labels) for Docker\n        id: meta\n        uses: docker/metadata-action@v4\n        with:\n          images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}\n\n      - name: Build and push Docker image\n        uses: docker/build-push-action@v3.2.0\n        with:\n          context: .\n          push: true\n          tags: ${{ steps.meta.outputs.tags }}\n          labels: ${{ steps.meta.outputs.labels }}\n"
  },
  {
    "path": ".github/workflows/docker_build_test.yaml",
    "content": "name: Test Docker image build\n\non:\n  pull_request:\n    branches:\n      - main\n      - develop\n      - 'rc*'\n  push:\n    paths:\n      - 'utils/*'\n      - 'Dockerfile'\n      - '.github/workflows/docker*'\n\nenv:\n  REGISTRY: ghcr.io\n  IMAGE_NAME: ${{ github.repository }}\n\njobs:\n  test_image_build:\n    runs-on: ubuntu-latest\n    name: Test Docker image build\n    permissions:\n      contents: read\n      packages: write\n    steps:\n      - name: Checkout repository\n        uses: actions/checkout@v3\n\n      - name: Log in to the Container registry\n        uses: docker/login-action@v2\n        with:\n          registry: ${{ env.REGISTRY }}\n          username: ${{ github.actor }}\n          password: ${{ secrets.GITHUB_TOKEN }}\n\n      - name: Extract metadata (tags, labels) for Docker\n        id: meta\n        uses: docker/metadata-action@v4\n        with:\n          images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}\n\n      - name: Build Docker image\n        uses: docker/build-push-action@v3.2.0\n        with:\n          context: .\n          push: false\n          tags: ${{ steps.meta.outputs.tags }}\n          labels: ${{ steps.meta.outputs.labels }}\n"
  },
  {
    "path": ".github/workflows/pypi_build.yaml",
    "content": "name: Create and publish pypi image\n\non:\n  # only runs when there is a new published release\n  # and for testing, pull requests to develop and main\n  # and if there are changes to the build process and github action\n  release:\n    types: [published]  \n  push:\n    branches: \n      - develop\n      - main\n    paths:\n      - 'setup.py'\n      - '.github/workflows/pypi*'  \n  pull_request:\n    branches:\n      - main\n      - develop\n      - 'rc*'\n\njobs:\n  create-pypi-image:\n    name: >-\n      Create .whl 🛞 from SHARPy distribution\n    runs-on: ubuntu-20.04\n    env:\n      python-version-chosen: \"3.10.8\"\n    permissions:\n      contents: read\n      packages: write\n\n    steps:\n      - uses: actions/checkout@v2\n      - name: Set up Python ${{ env.python-version-chosen }}\n        uses: actions/setup-python@v2\n        with:\n          python-version: ${{ env.python-version-chosen }}\n      - name: Set up GCC\n        uses: egor-tensin/setup-gcc@v1\n        with:\n          version: 7\n          platform: x64\n      - name: Pre-Install dependencies\n        run: |\n          export QT_QPA_PLATFORM='offscreen'\n          sudo apt install libeigen3-dev\n          git submodule init\n          git submodule update\n      - name: Install pypa/build\n        run: >-\n          python3 -m\n          pip install\n          build\n          --user    \n      - name: Install wheel\n        run: python3 -m pip install wheel --user\n      - name: Build a source tarball\n        run: python setup.py sdist\n      - name: Build a binary wheel\n        run: python3 setup.py bdist_wheel        \n      - name: Find the wheel created during pip install\n        run: \n          python3 -m pip cache dir\n      - name: Store the distribution packages\n        uses: actions/upload-artifact@v4\n        with:\n          name: python-package-distributions\n          path: dist/\n\n  publish-to-pypi:\n    name: >-\n      Publish Python 🐍 distribution 📦 to PyPI\n    if: github.event_name == 'release' && github.event.release.action == 'published'   # only publish to PyPI on tag pushes\n    needs:\n    - create-pypi-image\n    runs-on: ubuntu-latest\n    environment:\n      name: pypi\n      url: https://pypi.org/p/ic_sharpy  # Replace <package-name> with your PyPI project name\n    permissions:\n      id-token: write  # IMPORTANT: mandatory for trusted publishing\n    steps:\n    - name: Download all the dists\n      uses: actions/download-artifact@v4\n      with:\n        name: python-package-distributions\n        path: dist/\n    - name: Publish distribution 📦 to PyPI\n      uses: pypa/gh-action-pypi-publish@release/v1\n      # with:\n      #   path: dist/*\n"
  },
  {
    "path": ".github/workflows/readme.md",
    "content": "# SHARPy GitHub Workflows\r\n\r\nThere are 4(+1 experimental) automated workflows for SHARPy's CI/CD.\r\n\r\n## SHARPy Tests\r\n\r\nThe related to the SHARPy tests that run the `SHARPy Tests` job are:\r\n\r\n    * `sharpy_tests.yaml`: when Python or the submodules files are edited\r\n    * `sharpy_no_test_needed.yaml`: otherwise\r\n\r\nThis avoids running the full set of tests for changes in the documentation etc.\r\nSince the merge to `develop` and `main` is protected by the tests passing, the \r\nsecond workflow ensures a positive result for those PRs that did not change the \r\nPython code, hence allowing the merge.\r\n\r\n## Docker\r\n\r\nTwo nearly identical workflows, the only difference is that one pushes the Docker \r\nimage to the SHARPy packages. Therefore:\r\n\r\n    * `docker_build_test.yaml`: Builds the Docker image but does not push. Runs on changes to the `docker*` workflows, changes to the `utils/` directory (environments) and changes to the `Dockerfile`. Required test for PRs to merge to `develop` and `main`.\r\n    * `docker_build.yaml`: Builds and pushes the Docker image. Runs on pushes to `develop`, `main` and annotated tags.\r\n\r\n## Pypi (experimental!)\r\n\r\nOne workflow with two jobs, the first creates and the second pushes the wheel \r\nartifact to ic-sharpy @ pypi. Therefore:\r\n\r\n    * `pypi_build.yaml`: Builds and pushes the pypi wheel according to conditions. Runs on changes to the `pypi*` workflow, changes to the `setup.py`, and PRs and pushes to main and develop. Required test for PRs to merge to `develop` and `main`. Publishes on annotated tags.    \r\n"
  },
  {
    "path": ".github/workflows/sharpy_no_test_needed.yaml",
    "content": "name: SHARPy Tests\n\non:\n  pull_request:\n    branches:\n      - main\n      - develop\n      - 'rc*'\n    paths-ignore:\n      - '*.py'\n      - 'lib/**'\n      - '.github/workflows/**'\n\njobs:\n  build:\n    runs-on: ubuntu-latest\n    steps:\n      - run: 'echo \"No changes to python files, submodules or workflows, no run required\" '\n"
  },
  {
    "path": ".github/workflows/sharpy_tests.yaml",
    "content": "name: SHARPy Tests\n\non:\n  push:\n    paths:\n      - '*.py'\n      - 'lib/*'\n      - '.github/workflows/sharpy*'\n  pull_request:\n    branches:\n      - main\n      - develop\n      - 'rc*'\n\njobs:\n  build:\n\n    runs-on: ubuntu-latest\n    strategy:\n      matrix:\n        python-version: [3.10.8]\n\n    steps:\n      - uses: actions/checkout@v4\n        with:\n          submodules: \"recursive\"\n          fetch-tags: true\n      - name: Set up Python ${{ matrix.python-version }}\n        uses: actions/setup-python@v5\n        with:\n          python-version: ${{ matrix.python-version }}\n      - name: Set up GCC\n        uses: egor-tensin/setup-gcc@v1\n        with:\n          version: 10\n          platform: x64\n      - name: Check that gfortran works\n        run: gfortran --version\n      - name: Install build package dependencies\n        run: sudo apt install libblas-dev liblapack-dev libeigen3-dev\n      - name: Install sharpy and coverage using pip\n        run: |\n          export QT_QPA_PLATFORM='offscreen'\n          pip install .\n          pip install coverage\n      - name: Run coverage\n        run: |\n          coverage run -m unittest discover\n          coverage json\n      - name: Upload Coverage to Codecov\n        uses: codecov/codecov-action@v3\n        with:\n          verbose: true\n"
  },
  {
    "path": ".github_changelog_generator",
    "content": "since-tag=1.0.0"
  },
  {
    "path": ".gitignore",
    "content": "# Byte-compiled / optimized / DLL files\n__pycache__/\n*.py[cod]\n*$py.class\n\n# C extensions\n*.so\n\n# Distribution / packaging\n.Python\nenv/\nbuild/\ndevelop-eggs/\ndist/\ndownloads/\neggs/\n.eggs/\nparts/\nsdist/\nvar/\n*.egg-info/\n.installed.cfg\n*.egg\n\n# PyInstaller\n#  Usually these files are written by a python script from a template\n#  before PyInstaller builds the exe, so as to inject date/other infos into it.\n*.manifest\n*.spec\n\n# Installer logs\npip-log.txt\npip-delete-this-directory.txt\n\n# Unit test / coverage reports\nhtmlcov/\n.tox/\n.coverage\n.coverage.*\n.cache\nnosetests.xml\ncoverage.xml\n*.cover\n.hypothesis/\n\n# Translations\n*.mo\n*.pot\n\n# Django stuff:\n*.log\nlocal_settings.py\n\n# Flask stuff:\ninstance/\n.webassets-cache\n\n# Scrapy stuff:\n.scrapy\n\n# Sphinx documentation\ndocs/_build/\n\n# PyBuilder\ntarget/\n\n# IPython Notebook\n.ipynb_checkpoints\n\n# pyenv\n.python-version\n\n# celery beat schedule file\ncelerybeat-schedule\n\n# dotenv\n.env\n\n# virtualenv\nvenv/\nENV/\n\n# Spyder project settings\n.spyderproject\n\n# Rope project settings\n.ropeproject\n\n# Vim stuff\n*.*~\n*.swp\n*.h5\n\n# project dependent stuff\nlib/*.so\noutput/*\n.idea\n\n# figure folders\n*figs/*\n\n*.eps\n*.vtu\n\n\noutput*/\n\nsnapshots/\n\n# OSX files\n*.DS_Store\n\n# linear tools / tests cases\n*.prof\nfigs/*\n\n\\.spyproject/\n\n# sharpy extension\n*.sharpy\n\n# Exceptions\n# !tests/coupled/multibody/floating_wind_turbine/oc3_cs_v07.floating.h5 \n!tests/coupled/multibody/floating_wind_turbine/oc3_cs_v07.floating.h*\n"
  },
  {
    "path": ".gitmodules",
    "content": "[submodule \"lib/UVLM\"]\n\tpath = lib/UVLM\n\turl = http://github.com/imperialcollegelondon/UVLM\n[submodule \"lib/xbeam\"]\n\tpath = lib/xbeam\n\turl = http://github.com/imperialcollegelondon/xbeam\n"
  },
  {
    "path": ".readthedocs.yaml",
    "content": "# .readthedocs.yaml\n# Read the Docs configuration file\n# See https://docs.readthedocs.io/en/stable/config-file/v2.html for details\n\n# Required\nversion: 2\n\n# Set the version of Python and other tools you might need\nbuild:\n  os: ubuntu-22.04\n  tools:\n    python: \"3.10\"\n\npython:\n  install:\n    - requirements: docs/requirements_rtd\n\n# Build documentation in the docs/ directory with Sphinx\nsphinx:\n  configuration: docs/source/conf.py\n\n# We recommend specifying your dependencies to enable reproducible builds:\n# https://docs.readthedocs.io/en/stable/guides/reproducible-builds.html\n# python:\n#   install:\n#   - requirements: docs/requirements.txt\n"
  },
  {
    "path": ".version.json",
    "content": "{\n  \"schemaVersion\": 1,\n  \"label\": \"release version\",\n  \"message\": \"2.4\",\n  \"color\": \"green\"\n}\n"
  },
  {
    "path": ".zenodo.json",
    "content": "{\n    \"license\": \"other-open\", \n    \"title\": \"SHARPy: A dynamic aeroelastic simulation toolbox for very flexible aircraft and wind turbines\", \n    \"upload_type\": \"software\", \n    \"creators\": [\n        {\n            \"orcid\": \"0000-0002-8133-9481\", \n            \"affiliation\": \"Imperial College London\", \n            \"name\": \"Alfonso del Carre\"\n        },\n        {\n            \"orcid\": \"0000-0001-7445-5970\",\n            \"affiliation\": \"Imperial College London\",\n            \"name\": \"Norberto Goizueta\"\n        },\n        {\n            \"orcid\": \"0000-0003-4840-5392\", \n            \"affiliation\": \"Imperial College London\", \n            \"name\": \"Arturo Mu\\u00f1oz-Sim\\u00f3n\"\n        }, \n        {\n            \"orcid\": \"0000-0002-6706-3220\", \n            \"affiliation\": \"Imperial College London\",\n            \"name\": \"Rafael Palacios\"\n        }\n    ], \n    \"access_right\": \"open\"\n}\n"
  },
  {
    "path": "CHANGELOG.md",
    "content": "# Changelog\n\n## [2.4](https://github.com/imperialcollegelondon/sharpy/tree/2.4) (2025-03-20)\n\n[Full Changelog](https://github.com/imperialcollegelondon/sharpy/compare/2.3...2.4)\n\n**Implemented enhancements:**\n\n- Add the automatic differentiation multibody solver based on JAX [\\#305](https://github.com/ImperialCollegeLondon/sharpy/pull/305) ([ben-l-p](https://github.com/ben-l-p))\n- Non-perpendicular hinge axis possible for multibody solver [\\#299](https://github.com/ImperialCollegeLondon/sharpy/pull/299) ([kccwing](https://github.com/kccwing))\n- Add hosting of built wheel at PyPI - develop [\\#298](https://github.com/ImperialCollegeLondon/sharpy/pull/298) ([kccwing](https://github.com/kccwing))\n- Add hosting of built wheel at PyPI - main [\\#297](https://github.com/ImperialCollegeLondon/sharpy/pull/297) ([kccwing](https://github.com/kccwing))\n\n**Fixed bugs:**\n\n- Updated docs to address issue with conda install failing [\\#290](https://github.com/ImperialCollegeLondon/sharpy/pull/290) ([ben-l-p](https://github.com/ben-l-p))\n\n**Closed issues:**\n\n- TypeError: unhashable type: 'UnstructuredGrid' [\\#313](https://github.com/ImperialCollegeLondon/sharpy/issues/313)\n- Creating aileron control surfaces to induce roll [\\#304](https://github.com/ImperialCollegeLondon/sharpy/issues/304)\n- Static Trim Routine Fails with Dynamic-Type Control Surfaces [\\#300](https://github.com/ImperialCollegeLondon/sharpy/issues/300)\n- Not a Git Repository [\\#295](https://github.com/ImperialCollegeLondon/sharpy/issues/295)\n\n**Merged pull requests:**\n\n- Merge develop into main for new version release [\\#318](https://github.com/ImperialCollegeLondon/sharpy/pull/318) ([ben-l-p](https://github.com/ben-l-p))\n- Xhale thrust node typo [\\#317](https://github.com/ImperialCollegeLondon/sharpy/pull/317) ([kccwing](https://github.com/kccwing))\n- Mayavi github dependency restored for hotfix - develop [\\#316](https://github.com/ImperialCollegeLondon/sharpy/pull/316) ([kccwing](https://github.com/kccwing))\n- Mayavi github dependency restored for hotfix [\\#311](https://github.com/ImperialCollegeLondon/sharpy/pull/311) ([kccwing](https://github.com/kccwing))\n- Update body and wake FoR multiplication [\\#309](https://github.com/ImperialCollegeLondon/sharpy/pull/309) ([kccwing](https://github.com/kccwing))\n- Bug fix for generate\\_full\\_structure [\\#306](https://github.com/ImperialCollegeLondon/sharpy/pull/306) ([kccwing](https://github.com/kccwing))\n- Fix AeroForcesCalculator giving forces in wrong frame of reference [\\#301](https://github.com/ImperialCollegeLondon/sharpy/pull/301) ([ben-l-p](https://github.com/ben-l-p))\n- Temporary Fix for NumPy 2.0 Issues \\(Develop Branch\\) [\\#293](https://github.com/ImperialCollegeLondon/sharpy/pull/293) ([ben-l-p](https://github.com/ben-l-p))\n- Temporary Fix for NumPy 2.0 Issues \\(Main Branch\\) [\\#292](https://github.com/ImperialCollegeLondon/sharpy/pull/292) ([ben-l-p](https://github.com/ben-l-p))\n\n\n## [2.3](https://github.com/imperialcollegelondon/sharpy/tree/2.3) (2024-05-10)\n\n[Full Changelog](https://github.com/imperialcollegelondon/sharpy/compare/2.2...2.3)\n\n**Implemented enhancements:**\n\n- Version 2.3 update [\\#289](https://github.com/ImperialCollegeLondon/sharpy/pull/289) ([ben-l-p](https://github.com/ben-l-p))\n- Update develop branch with main [\\#284](https://github.com/ImperialCollegeLondon/sharpy/pull/284) ([ben-l-p](https://github.com/ben-l-p))\n- Added pip install \\(with docs\\) [\\#280](https://github.com/ImperialCollegeLondon/sharpy/pull/280) ([ben-l-p](https://github.com/ben-l-p))\n- Update beamplot.py to have stride option, consistent with aerogridplot.py [\\#279](https://github.com/ImperialCollegeLondon/sharpy/pull/279) ([kccwing](https://github.com/kccwing))\n\n**Fixed bugs:**\n\n- Fix Github Runner Docker build failing [\\#285](https://github.com/ImperialCollegeLondon/sharpy/pull/285) ([ben-l-p](https://github.com/ben-l-p))\n- Add scipy version info to env yml [\\#277](https://github.com/ImperialCollegeLondon/sharpy/pull/277) ([SJ-Innovation](https://github.com/SJ-Innovation))\n\n**Closed issues:**\n\n- Scipy 1.12.0 Incompatible [\\#276](https://github.com/ImperialCollegeLondon/sharpy/issues/276)\n- BeamLoader postprocessor squishing answers [\\#270](https://github.com/ImperialCollegeLondon/sharpy/issues/270)\n- Solving Environment gets killed. [\\#268](https://github.com/ImperialCollegeLondon/sharpy/issues/268)\n- Error when running sharpy unittest: module scipy.sparse.\\_sputils not found [\\#227](https://github.com/ImperialCollegeLondon/sharpy/issues/227)\n- Potential bug in /sharpy/structure/utils/modalutils.py [\\#208](https://github.com/ImperialCollegeLondon/sharpy/issues/208)\n\n**Merged pull requests:**\n\n- Added ability to turn aligned grid off [\\#288](https://github.com/ImperialCollegeLondon/sharpy/pull/288) ([ben-l-p](https://github.com/ben-l-p))\n- Update with main for mamba fixes [\\#286](https://github.com/ImperialCollegeLondon/sharpy/pull/286) ([ben-l-p](https://github.com/ben-l-p))\n- Correct typos caught by Divya Sanghi [\\#283](https://github.com/ImperialCollegeLondon/sharpy/pull/283) ([bbahiam](https://github.com/bbahiam))\n- Develop: Update environment.yml to fix scipy version issue [\\#282](https://github.com/ImperialCollegeLondon/sharpy/pull/282) ([kccwing](https://github.com/kccwing))\n- Update noaero.py for consistency in function input [\\#275](https://github.com/ImperialCollegeLondon/sharpy/pull/275) ([kccwing](https://github.com/kccwing))\n- A few minor bug fixes [\\#273](https://github.com/ImperialCollegeLondon/sharpy/pull/273) ([sduess](https://github.com/sduess))\n- Update XBeam version to include compiler optimisation [\\#272](https://github.com/ImperialCollegeLondon/sharpy/pull/272) ([ben-l-p](https://github.com/ben-l-p))\n- Update XBeam version to include compiler optimisation [\\#271](https://github.com/ImperialCollegeLondon/sharpy/pull/271) ([ben-l-p](https://github.com/ben-l-p))\n- Improve docs and code of newmark\\_ss [\\#267](https://github.com/ImperialCollegeLondon/sharpy/pull/267) ([bbahiam](https://github.com/bbahiam))\n- Changed Github runner from Conda to Mamba [\\#266](https://github.com/ImperialCollegeLondon/sharpy/pull/266) ([ben-l-p](https://github.com/ben-l-p))\n- Changed Github runner from Conda to Mamba [\\#265](https://github.com/ImperialCollegeLondon/sharpy/pull/265) ([ben-l-p](https://github.com/ben-l-p))\n- Hotfix for documentation search [\\#264](https://github.com/ImperialCollegeLondon/sharpy/pull/264) ([kccwing](https://github.com/kccwing))\n- Hotfix for documentation - develop [\\#263](https://github.com/ImperialCollegeLondon/sharpy/pull/263) ([kccwing](https://github.com/kccwing))\n- Hotfix for documentation - main [\\#262](https://github.com/ImperialCollegeLondon/sharpy/pull/262) ([kccwing](https://github.com/kccwing))\n- Merging v2.2 into develop [\\#261](https://github.com/ImperialCollegeLondon/sharpy/pull/261) ([kccwing](https://github.com/kccwing))\n\n\n## [2.2](https://github.com/imperialcollegelondon/sharpy/tree/2.2) (2023-10-18)\n\n[Full Changelog](https://github.com/imperialcollegelondon/sharpy/compare/2.1...2.2)\n\n**Implemented enhancements:**\n\n- Added environment for Apple Silicon \\(ARM64\\) [\\#254](https://github.com/ImperialCollegeLondon/sharpy/pull/254) ([ben-l-p](https://github.com/ben-l-p))\n- New Fuselage Model plus Minor Improvements [\\#249](https://github.com/ImperialCollegeLondon/sharpy/pull/249) ([sduess](https://github.com/sduess))\n\n**Fixed bugs:**\n\n- fix polars concatenation in assembly of aeroinformation - develop [\\#253](https://github.com/ImperialCollegeLondon/sharpy/pull/253) ([kccwing](https://github.com/kccwing))\n- fix polars concatenation in assembly of aeroinformation - main [\\#252](https://github.com/ImperialCollegeLondon/sharpy/pull/252) ([kccwing](https://github.com/kccwing))\n- Minor bug fixes in aero util functions and save data postprocessor [\\#247](https://github.com/ImperialCollegeLondon/sharpy/pull/247) ([sduess](https://github.com/sduess))\n\n**Closed issues:**\n\n- Automated tests failed : UnicodeEncodeError: 'ascii' codec can't encode character '\\xe9' in position 47: ordinal not in range\\(128\\) [\\#245](https://github.com/ImperialCollegeLondon/sharpy/issues/245)\n- Wrong key in settings for /cases/templates/flying\\_wings.py [\\#205](https://github.com/ImperialCollegeLondon/sharpy/issues/205)\n\n**Merged pull requests:**\n\n- merging develop into main for v2.2 [\\#259](https://github.com/ImperialCollegeLondon/sharpy/pull/259) ([kccwing](https://github.com/kccwing))\n- fix \\[docker\\] use correct environment name in docker bashrc [\\#257](https://github.com/ImperialCollegeLondon/sharpy/pull/257) ([sduess](https://github.com/sduess))\n- Update docker environment  [\\#255](https://github.com/ImperialCollegeLondon/sharpy/pull/255) ([sduess](https://github.com/sduess))\n- Update README.md [\\#246](https://github.com/ImperialCollegeLondon/sharpy/pull/246) ([rafapalacios](https://github.com/rafapalacios))\n- bringing commits to main into develop [\\#244](https://github.com/ImperialCollegeLondon/sharpy/pull/244) ([rafapalacios](https://github.com/rafapalacios))\n- Updates to plotutils.py and the cantilever\\_wing demo [\\#242](https://github.com/ImperialCollegeLondon/sharpy/pull/242) ([boltyboi](https://github.com/boltyboi))\n- Small additions to the installation guide. [\\#241](https://github.com/ImperialCollegeLondon/sharpy/pull/241) ([boltyboi](https://github.com/boltyboi))\n- Tutorial for closed-Loop Simulation with SHARPy as a hardware-in-the-loop system [\\#240](https://github.com/ImperialCollegeLondon/sharpy/pull/240) ([sduess](https://github.com/sduess))\n\n## [2.1](https://github.com/imperialcollegelondon/sharpy/tree/2.1) (2023-05-31)\n\n[Full Changelog](https://github.com/imperialcollegelondon/sharpy/compare/2.0...2.1)\n\n**Implemented enhancements:**\n\n- SHARPy Docker now releases to GitHub Packages  [\\#218](https://github.com/ImperialCollegeLondon/sharpy/pull/218) ([ngoiz](https://github.com/ngoiz))\n- Some Enhancements and Fixes for the Polar Correction, Wake Discretisation, and Gust Velocity Field Generator [\\#217](https://github.com/ImperialCollegeLondon/sharpy/pull/217) ([sduess](https://github.com/sduess))\n- Collective blade pitch PID control of wind turbines [\\#176](https://github.com/ImperialCollegeLondon/sharpy/pull/176) ([ArturoMS13](https://github.com/ArturoMS13))\n\n**Fixed bugs:**\n\n- Handle absolute tolerance for structural convergence tests as input settings and increase default value [\\#221](https://github.com/ImperialCollegeLondon/sharpy/pull/221) ([sduess](https://github.com/sduess))\n- Fix horseshoe wake handling in UVLM [\\#204](https://github.com/ImperialCollegeLondon/sharpy/pull/204) ([sduess](https://github.com/sduess))\n\n**Closed issues:**\n\n- No such file or directory during: source bin/sharpy\\_vars.sh [\\#233](https://github.com/ImperialCollegeLondon/sharpy/issues/233)\n- Twist direction inconsistent [\\#212](https://github.com/ImperialCollegeLondon/sharpy/issues/212)\n\n**Merged pull requests:**\n\n- Version number updates for 2.1 from develop [\\#237](https://github.com/ImperialCollegeLondon/sharpy/pull/237) ([kccwing](https://github.com/kccwing))\n- Merge to main for version 2.0.1 release [\\#236](https://github.com/ImperialCollegeLondon/sharpy/pull/236) ([kccwing](https://github.com/kccwing))\n- Updates to Goland wing example [\\#234](https://github.com/ImperialCollegeLondon/sharpy/pull/234) ([rafapalacios](https://github.com/rafapalacios))\n- A bit of clean-up of the readme file of the repo [\\#231](https://github.com/ImperialCollegeLondon/sharpy/pull/231) ([rafapalacios](https://github.com/rafapalacios))\n- Dev internals [\\#223](https://github.com/ImperialCollegeLondon/sharpy/pull/223) ([ACea15](https://github.com/ACea15))\n- updating from python 3.7 to 3.10 [\\#222](https://github.com/ImperialCollegeLondon/sharpy/pull/222) ([kccwing](https://github.com/kccwing))\n- Fix typo in setting [\\#206](https://github.com/ImperialCollegeLondon/sharpy/pull/206) ([sduess](https://github.com/sduess))\n\n## [2.0](https://github.com/imperialcollegelondon/sharpy/tree/2.0) (2022-07-04)\n\n[Full Changelog](https://github.com/imperialcollegelondon/sharpy/compare/1.3...2.0)\n\n**Implemented enhancements:**\n\n- Plot the aeroelastic mode shape to Paraview [\\#202](https://github.com/ImperialCollegeLondon/sharpy/pull/202) ([ngoiz](https://github.com/ngoiz))\n- Enhanced linear solver [\\#196](https://github.com/ImperialCollegeLondon/sharpy/pull/196) ([ngoiz](https://github.com/ngoiz))\n- Add pip support [\\#175](https://github.com/ImperialCollegeLondon/sharpy/pull/175) ([DavidAnderegg](https://github.com/DavidAnderegg))\n\n**Fixed bugs:**\n\n- Flap inputs in state-space model not working in certain wing configurations [\\#192](https://github.com/ImperialCollegeLondon/sharpy/issues/192)\n- Fix mass matrix generation for lumped masses in case of several masses per node [\\#194](https://github.com/ImperialCollegeLondon/sharpy/pull/194) ([sduess](https://github.com/sduess))\n- Fix the sparse matrix in balancing ROM [\\#186](https://github.com/ImperialCollegeLondon/sharpy/pull/186) ([AntonioWR](https://github.com/AntonioWR))\n\n**Closed issues:**\n\n- scipy used for direct balancing method [\\#184](https://github.com/ImperialCollegeLondon/sharpy/issues/184)\n- Potential Issue in the balancing direct method [\\#183](https://github.com/ImperialCollegeLondon/sharpy/issues/183)\n- Why no pip support? [\\#171](https://github.com/ImperialCollegeLondon/sharpy/issues/171)\n\n**Merged pull requests:**\n\n- Contain write operations within with statements [\\#195](https://github.com/ImperialCollegeLondon/sharpy/pull/195) ([ngoiz](https://github.com/ngoiz))\n- Support loading/saving state-spaces and gains to h5 files [\\#188](https://github.com/ImperialCollegeLondon/sharpy/pull/188) ([ngoiz](https://github.com/ngoiz))\n- Update installation docs [\\#187](https://github.com/ImperialCollegeLondon/sharpy/pull/187) ([nacho-carnicero](https://github.com/nacho-carnicero))\n- Unittest for nonlinear dynamic solver [\\#185](https://github.com/ImperialCollegeLondon/sharpy/pull/185) ([sduess](https://github.com/sduess))\n- Change in the io-Settings to add thrust. [\\#164](https://github.com/ImperialCollegeLondon/sharpy/pull/164) ([Eriklyy](https://github.com/Eriklyy))\n- UDP-Inout change for multiply cs\\_surface\\_deflections and loads/strain [\\#162](https://github.com/ImperialCollegeLondon/sharpy/pull/162) ([Eriklyy](https://github.com/Eriklyy))\n- Update AsymptoticStability and FrequencyResponse post-processors [\\#103](https://github.com/ImperialCollegeLondon/sharpy/pull/103) ([ngoiz](https://github.com/ngoiz))\n\n## [1.3](https://github.com/imperialcollegelondon/sharpy/tree/1.3) (2021-11-11)\n\n[Full Changelog](https://github.com/imperialcollegelondon/sharpy/compare/v1.2.1...1.3)\n\n**Implemented enhancements:**\n\n- Include gravity direction as input for structural solvers [\\#112](https://github.com/ImperialCollegeLondon/sharpy/issues/112)\n- Simulation settings check - Unrecognised settings raise Error [\\#148](https://github.com/ImperialCollegeLondon/sharpy/pull/148) ([ngoiz](https://github.com/ngoiz))\n- Aerodynamic forces correction enhancements [\\#140](https://github.com/ImperialCollegeLondon/sharpy/pull/140) ([ngoiz](https://github.com/ngoiz))\n- New feature: apply external forces to the system at runtime [\\#125](https://github.com/ImperialCollegeLondon/sharpy/pull/125) ([ArturoMS13](https://github.com/ArturoMS13))\n- Lift distribution post-processor [\\#121](https://github.com/ImperialCollegeLondon/sharpy/pull/121) ([sduess](https://github.com/sduess))\n\n**Fixed bugs:**\n\n- Fix bug in computing total moments in A frame [\\#177](https://github.com/ImperialCollegeLondon/sharpy/pull/177) ([ngoiz](https://github.com/ngoiz))\n\n**Closed issues:**\n\n- Unrecognised model in goland test case [\\#143](https://github.com/ImperialCollegeLondon/sharpy/issues/143)\n\n**Merged pull requests:**\n\n- Implement GitHub Actions as testing suite provider [\\#179](https://github.com/ImperialCollegeLondon/sharpy/pull/179) ([ngoiz](https://github.com/ngoiz))\n- Update submodules and conda environments [\\#161](https://github.com/ImperialCollegeLondon/sharpy/pull/161) ([sduess](https://github.com/sduess))\n- Support element variables in UDP output [\\#160](https://github.com/ImperialCollegeLondon/sharpy/pull/160) ([ngoiz](https://github.com/ngoiz))\n- Output directory in the location specified in settings\\[SHARPy\\]\\[log\\_folder\\] [\\#130](https://github.com/ImperialCollegeLondon/sharpy/pull/130) ([ngoiz](https://github.com/ngoiz))\n- Update and include features in multibody [\\#126](https://github.com/ImperialCollegeLondon/sharpy/pull/126) ([ArturoMS13](https://github.com/ArturoMS13))\n- Update linear UVLM to account for CFL not equal to one in the wake convection [\\#124](https://github.com/ImperialCollegeLondon/sharpy/pull/124) ([ArturoMS13](https://github.com/ArturoMS13))\n- Minor changes [\\#123](https://github.com/ImperialCollegeLondon/sharpy/pull/123) ([ArturoMS13](https://github.com/ArturoMS13))\n\n## [v1.2.1](https://github.com/imperialcollegelondon/sharpy/tree/v1.2.1) (2021-02-09)\n\n[Full Changelog](https://github.com/imperialcollegelondon/sharpy/compare/v1.2...v1.2.1)\n\n**Implemented enhancements:**\n\n- Allow CFL != 1in shedding step [\\#78](https://github.com/ImperialCollegeLondon/sharpy/issues/78)\n- Vortex wake managed by SHARPy [\\#77](https://github.com/ImperialCollegeLondon/sharpy/issues/77)\n- Recover vortex core in UVLM [\\#76](https://github.com/ImperialCollegeLondon/sharpy/issues/76)\n- Include viscous drag force from airfoil properties [\\#75](https://github.com/ImperialCollegeLondon/sharpy/issues/75)\n\n**Fixed bugs:**\n\n- Bug in beamstructure.py [\\#117](https://github.com/ImperialCollegeLondon/sharpy/issues/117)\n- Definition of control surfaces and impact of node ordering in mirrored wings [\\#43](https://github.com/ImperialCollegeLondon/sharpy/issues/43)\n\n**Closed issues:**\n\n- examples refer to non-existent solver SHWUvlm [\\#119](https://github.com/ImperialCollegeLondon/sharpy/issues/119)\n- Potential bug in xbeam and cbeam interfaces [\\#89](https://github.com/ImperialCollegeLondon/sharpy/issues/89)\n- Update packages producing deprecation warnings and tackle other warnings [\\#80](https://github.com/ImperialCollegeLondon/sharpy/issues/80)\n\n**Merged pull requests:**\n\n- Rigid coupled solver [\\#120](https://github.com/ImperialCollegeLondon/sharpy/pull/120) ([ArturoMS13](https://github.com/ArturoMS13))\n- Support to save ROM projector matrices [\\#118](https://github.com/ImperialCollegeLondon/sharpy/pull/118) ([ngoiz](https://github.com/ngoiz))\n\n## [v1.2](https://github.com/imperialcollegelondon/sharpy/tree/v1.2) (2020-12-03)\n\n[Full Changelog](https://github.com/imperialcollegelondon/sharpy/compare/v1.1.1...v1.2)\n\n**Implemented enhancements:**\n\n- Quasi-steady solver in stepuvlm [\\#114](https://github.com/ImperialCollegeLondon/sharpy/pull/114) ([ArturoMS13](https://github.com/ArturoMS13))\n- Generator to modify structural mass at runtime [\\#107](https://github.com/ImperialCollegeLondon/sharpy/pull/107) ([ngoiz](https://github.com/ngoiz))\n- Sends simulation info to xplane via udp [\\#104](https://github.com/ImperialCollegeLondon/sharpy/pull/104) ([wong-hl](https://github.com/wong-hl))\n- Major new aerodynamic features [\\#101](https://github.com/ImperialCollegeLondon/sharpy/pull/101) ([ArturoMS13](https://github.com/ArturoMS13))\n- Simple post-processor to save simulation parameters for batch runs [\\#91](https://github.com/ImperialCollegeLondon/sharpy/pull/91) ([ngoiz](https://github.com/ngoiz))\n- SHARPy support for external inputs via UDP network [\\#90](https://github.com/ImperialCollegeLondon/sharpy/pull/90) ([ngoiz](https://github.com/ngoiz))\n- Vortex radius as input parameter [\\#86](https://github.com/ImperialCollegeLondon/sharpy/pull/86) ([ArturoMS13](https://github.com/ArturoMS13))\n- Enhanced Frequency Response post-processor and linear system input/output options [\\#83](https://github.com/ImperialCollegeLondon/sharpy/pull/83) ([ngoiz](https://github.com/ngoiz))\n- Pazi wing added to flying\\_wing template [\\#82](https://github.com/ImperialCollegeLondon/sharpy/pull/82) ([outoforderdev](https://github.com/outoforderdev))\n- Several new aerodynamic enhancements [\\#79](https://github.com/ImperialCollegeLondon/sharpy/pull/79) ([ArturoMS13](https://github.com/ArturoMS13))\n\n**Fixed bugs:**\n\n- libss.py disc2cont doesn't accept SISO systems [\\#88](https://github.com/ImperialCollegeLondon/sharpy/issues/88)\n- Dimension mismatch when assembling linear UVLM with \"shortened\" wake [\\#71](https://github.com/ImperialCollegeLondon/sharpy/issues/71)\n- Fix bug wake shape generator StaticCoupled [\\#85](https://github.com/ImperialCollegeLondon/sharpy/pull/85) ([ArturoMS13](https://github.com/ArturoMS13))\n- Rework of direct balancing [\\#74](https://github.com/ImperialCollegeLondon/sharpy/pull/74) ([outoforderdev](https://github.com/outoforderdev))\n\n**Closed issues:**\n\n- \\[develop\\] Documentation for postprocs not rendering in RTD [\\#109](https://github.com/ImperialCollegeLondon/sharpy/issues/109)\n- Numerical error in the linear UVLM output matrices when vortex radius is too small [\\#105](https://github.com/ImperialCollegeLondon/sharpy/issues/105)\n- fatal error: mkl.h: No such file or directory [\\#70](https://github.com/ImperialCollegeLondon/sharpy/issues/70)\n- lingebm.py -\\> update\\_matrices\\_time\\_scale [\\#69](https://github.com/ImperialCollegeLondon/sharpy/issues/69)\n- Missing node connectivities figure in case files documentation [\\#68](https://github.com/ImperialCollegeLondon/sharpy/issues/68)\n\n**Merged pull requests:**\n\n- \\[fix\\] Fixed bug in Gridbox class [\\#111](https://github.com/ImperialCollegeLondon/sharpy/pull/111) ([sduess](https://github.com/sduess))\n- Include linear UVLM stiffening and damping terms in the UVLM D matrix [\\#108](https://github.com/ImperialCollegeLondon/sharpy/pull/108) ([ngoiz](https://github.com/ngoiz))\n- Fix accuracy problem in UVLMLin [\\#106](https://github.com/ImperialCollegeLondon/sharpy/pull/106) ([ArturoMS13](https://github.com/ArturoMS13))\n- Minor improvements [\\#102](https://github.com/ImperialCollegeLondon/sharpy/pull/102) ([ngoiz](https://github.com/ngoiz))\n- Linearisation of externally applied follower forces [\\#100](https://github.com/ImperialCollegeLondon/sharpy/pull/100) ([ngoiz](https://github.com/ngoiz))\n- Updated docs for DataStructures and Multibody [\\#99](https://github.com/ImperialCollegeLondon/sharpy/pull/99) ([ArturoMS13](https://github.com/ArturoMS13))\n- Support linearised all-moving control surfaces [\\#97](https://github.com/ImperialCollegeLondon/sharpy/pull/97) ([ngoiz](https://github.com/ngoiz))\n- Update Linux and minimal environments [\\#96](https://github.com/ImperialCollegeLondon/sharpy/pull/96) ([ngoiz](https://github.com/ngoiz))\n- New approach to multibody computations [\\#95](https://github.com/ImperialCollegeLondon/sharpy/pull/95) ([ArturoMS13](https://github.com/ArturoMS13))\n- New SHARPy examples in the documentation [\\#94](https://github.com/ImperialCollegeLondon/sharpy/pull/94) ([ArturoMS13](https://github.com/ArturoMS13))\n- Add support for offline use of UDPout postproc [\\#93](https://github.com/ImperialCollegeLondon/sharpy/pull/93) ([ngoiz](https://github.com/ngoiz))\n- Option to transform rigid modes given at A FoR to centre of gravity and aligned with principal axes of inertia [\\#92](https://github.com/ImperialCollegeLondon/sharpy/pull/92) ([ngoiz](https://github.com/ngoiz))\n- Pazy wing modified to include the tip weight [\\#87](https://github.com/ImperialCollegeLondon/sharpy/pull/87) ([outoforderdev](https://github.com/outoforderdev))\n- Minor output clean up [\\#81](https://github.com/ImperialCollegeLondon/sharpy/pull/81) ([ngoiz](https://github.com/ngoiz))\n- Fixes assembly of linUVLM after plotting wake with minus m\\_star  [\\#72](https://github.com/ImperialCollegeLondon/sharpy/pull/72) ([ngoiz](https://github.com/ngoiz))\n\n## [v1.1.1](https://github.com/imperialcollegelondon/sharpy/tree/v1.1.1) (2020-02-03)\n\n[Full Changelog](https://github.com/imperialcollegelondon/sharpy/compare/v1.1.0-2...v1.1.1)\n\n**Implemented enhancements:**\n\n- User-defined aerodynamic airfoil efficiency factor and constant force terms [\\#59](https://github.com/ImperialCollegeLondon/sharpy/pull/59) ([ngoiz](https://github.com/ngoiz))\n\n**Closed issues:**\n\n- Broken link on SHARPy Installation Guide [\\#67](https://github.com/ImperialCollegeLondon/sharpy/issues/67)\n- Update citation instructions [\\#62](https://github.com/ImperialCollegeLondon/sharpy/issues/62)\n- Incorrect version tag displayed when running SHARPy [\\#61](https://github.com/ImperialCollegeLondon/sharpy/issues/61)\n- Clean up SHARPy linear interface with UVLM [\\#48](https://github.com/ImperialCollegeLondon/sharpy/issues/48)\n\n**Merged pull requests:**\n\n- Documentation Improvements [\\#66](https://github.com/ImperialCollegeLondon/sharpy/pull/66) ([ngoiz](https://github.com/ngoiz))\n- Minor fixes and general code clean up of linear modules [\\#65](https://github.com/ImperialCollegeLondon/sharpy/pull/65) ([ngoiz](https://github.com/ngoiz))\n- Error log file created when program encounters exceptions [\\#64](https://github.com/ImperialCollegeLondon/sharpy/pull/64) ([ngoiz](https://github.com/ngoiz))\n- Update README.md [\\#63](https://github.com/ImperialCollegeLondon/sharpy/pull/63) ([rafapalacios](https://github.com/rafapalacios))\n- Clean up linear SHARPy's interface with UVLM [\\#60](https://github.com/ImperialCollegeLondon/sharpy/pull/60) ([ngoiz](https://github.com/ngoiz))\n\n## [v1.1.0-2](https://github.com/imperialcollegelondon/sharpy/tree/v1.1.0-2) (2019-12-12)\n\n[Full Changelog](https://github.com/imperialcollegelondon/sharpy/compare/v1.1.0...v1.1.0-2)\n\n## [v1.1.0](https://github.com/imperialcollegelondon/sharpy/tree/v1.1.0) (2019-12-12)\n\n[Full Changelog](https://github.com/imperialcollegelondon/sharpy/compare/v1.0.1...v1.1.0)\n\n**Implemented enhancements:**\n\n- Improvements to Model Reduction [\\#56](https://github.com/ImperialCollegeLondon/sharpy/pull/56) ([ngoiz](https://github.com/ngoiz))\n- Submodules and cmake build tools instead of Makefiles [\\#52](https://github.com/ImperialCollegeLondon/sharpy/pull/52) ([fonsocarre](https://github.com/fonsocarre))\n- New settings check against valid options [\\#39](https://github.com/ImperialCollegeLondon/sharpy/pull/39) ([ngoiz](https://github.com/ngoiz))\n- Default settings get type specified for the setting rather than their own type [\\#34](https://github.com/ImperialCollegeLondon/sharpy/pull/34) ([ngoiz](https://github.com/ngoiz))\n\n**Fixed bugs:**\n\n- Default value not correct in documentation when it is a numpy type. [\\#32](https://github.com/ImperialCollegeLondon/sharpy/issues/32)\n- Documentation for Postprocessors being skipped by Sphinx in RTD [\\#30](https://github.com/ImperialCollegeLondon/sharpy/issues/30)\n\n**Closed issues:**\n\n- Minor documentation issues [\\#53](https://github.com/ImperialCollegeLondon/sharpy/issues/53)\n- WindTurbine case generation script does not produce sharpy file [\\#50](https://github.com/ImperialCollegeLondon/sharpy/issues/50)\n- Considerations for building SHARPy [\\#47](https://github.com/ImperialCollegeLondon/sharpy/issues/47)\n- Installation fails on macOS with Intel compiler [\\#46](https://github.com/ImperialCollegeLondon/sharpy/issues/46)\n- run\\_theo\\_freq.py fails in Docker container [\\#37](https://github.com/ImperialCollegeLondon/sharpy/issues/37)\n- Compare to other competing software in JOSS paper [\\#36](https://github.com/ImperialCollegeLondon/sharpy/issues/36)\n\n**Merged pull requests:**\n\n- Example wind turbine [\\#58](https://github.com/ImperialCollegeLondon/sharpy/pull/58) ([ArturoMS13](https://github.com/ArturoMS13))\n- Small typo in README.md and updates to it [\\#57](https://github.com/ImperialCollegeLondon/sharpy/pull/57) ([fonsocarre](https://github.com/fonsocarre))\n- Restructuring of A Short Guide to SHARPy [\\#55](https://github.com/ImperialCollegeLondon/sharpy/pull/55) ([ngoiz](https://github.com/ngoiz))\n- JOSS Paper Minor typos fixed [\\#54](https://github.com/ImperialCollegeLondon/sharpy/pull/54) ([ngoiz](https://github.com/ngoiz))\n- Update .solver.txt extension to .sharpy [\\#51](https://github.com/ImperialCollegeLondon/sharpy/pull/51) ([ArturoMS13](https://github.com/ArturoMS13))\n- Fix typo in unittests using tearDowns instead of tearDown [\\#49](https://github.com/ImperialCollegeLondon/sharpy/pull/49) ([ngoiz](https://github.com/ngoiz))\n- Bug fixes in installation docs [\\#45](https://github.com/ImperialCollegeLondon/sharpy/pull/45) ([rafmudaf](https://github.com/rafmudaf))\n- Updated installation instructions [\\#44](https://github.com/ImperialCollegeLondon/sharpy/pull/44) ([ngoiz](https://github.com/ngoiz))\n- Travis CI now uses the minimal environment, the same as the Docker build [\\#42](https://github.com/ImperialCollegeLondon/sharpy/pull/42) ([fonsocarre](https://github.com/fonsocarre))\n- Remove calls to matplotlib \\(or wrap in try except\\) [\\#41](https://github.com/ImperialCollegeLondon/sharpy/pull/41) ([ngoiz](https://github.com/ngoiz))\n- Added information about competing software in JOSS paper [\\#40](https://github.com/ImperialCollegeLondon/sharpy/pull/40) ([fonsocarre](https://github.com/fonsocarre))\n- Removes deprecated case files from cases folder [\\#38](https://github.com/ImperialCollegeLondon/sharpy/pull/38) ([ngoiz](https://github.com/ngoiz))\n- Change position of --name argument in docs [\\#35](https://github.com/ImperialCollegeLondon/sharpy/pull/35) ([petebachant](https://github.com/petebachant))\n- Improvements in documentation  [\\#31](https://github.com/ImperialCollegeLondon/sharpy/pull/31) ([ngoiz](https://github.com/ngoiz))\n\n## [v1.0.1](https://github.com/imperialcollegelondon/sharpy/tree/v1.0.1) (2019-11-17)\n\n[Full Changelog](https://github.com/imperialcollegelondon/sharpy/compare/1.0.0...v1.0.1)\n\n**Implemented enhancements:**\n\n- New example of linearised flying wing [\\#28](https://github.com/ImperialCollegeLondon/sharpy/pull/28) ([ngoiz](https://github.com/ngoiz))\n- SHARPy can now be obtained from a Docker Hub container [\\#27](https://github.com/ImperialCollegeLondon/sharpy/pull/27) ([fonsocarre](https://github.com/fonsocarre))\n- Improved modal solver [\\#26](https://github.com/ImperialCollegeLondon/sharpy/pull/26) ([fonsocarre](https://github.com/fonsocarre))\n- Updated function calls for latest numpy 1.17 [\\#25](https://github.com/ImperialCollegeLondon/sharpy/pull/25) ([ngoiz](https://github.com/ngoiz))\n- Examples added to documentation [\\#24](https://github.com/ImperialCollegeLondon/sharpy/pull/24) ([fonsocarre](https://github.com/fonsocarre))\n- Improved linear solver documentation and minor Krylov ROM fixes [\\#23](https://github.com/ImperialCollegeLondon/sharpy/pull/23) ([ngoiz](https://github.com/ngoiz))\n- change log generator incorporated [\\#22](https://github.com/ImperialCollegeLondon/sharpy/pull/22) ([ngoiz](https://github.com/ngoiz))\n\n**Merged pull requests:**\n\n- Version v1.0.1 released [\\#29](https://github.com/ImperialCollegeLondon/sharpy/pull/29) ([fonsocarre](https://github.com/fonsocarre))\n\n## [1.0.0](https://github.com/imperialcollegelondon/sharpy/tree/1.0.0) (2019-11-07)\n\n[Full Changelog](https://github.com/imperialcollegelondon/sharpy/compare/v1.0.0-rc...1.0.0)\n\n**Implemented enhancements:**\n\n- WriteVariablesTime output global beam variables and consistent out dir [\\#19](https://github.com/ImperialCollegeLondon/sharpy/pull/19) ([ngoiz](https://github.com/ngoiz))\n- Autodocumenter [\\#16](https://github.com/ImperialCollegeLondon/sharpy/pull/16) ([ngoiz](https://github.com/ngoiz))\n\n**Closed issues:**\n\n- Tests not passing due to them being outdated + test refactoring. [\\#11](https://github.com/ImperialCollegeLondon/sharpy/issues/11)\n\n**Merged pull requests:**\n\n- Release of v1.0.0!!! [\\#20](https://github.com/ImperialCollegeLondon/sharpy/pull/20) ([fonsocarre](https://github.com/fonsocarre))\n- Documentation fixes/updates [\\#18](https://github.com/ImperialCollegeLondon/sharpy/pull/18) ([ngoiz](https://github.com/ngoiz))\n- Fix dynamic control surface and settings for aerogridloader [\\#15](https://github.com/ImperialCollegeLondon/sharpy/pull/15) ([ngoiz](https://github.com/ngoiz))\n\n## [v1.0.0-rc](https://github.com/imperialcollegelondon/sharpy/tree/v1.0.0-rc) (2019-08-22)\n\n[Full Changelog](https://github.com/imperialcollegelondon/sharpy/compare/V0.2.1...v1.0.0-rc)\n\n**Closed issues:**\n\n- Output table [\\#10](https://github.com/ImperialCollegeLondon/sharpy/issues/10)\n\n**Merged pull requests:**\n\n- Remove H5pyDeprecationWarning [\\#14](https://github.com/ImperialCollegeLondon/sharpy/pull/14) ([ArturoMS13](https://github.com/ArturoMS13))\n- Lagrange multipliers for Catapult Take Off works + clean tests [\\#13](https://github.com/ImperialCollegeLondon/sharpy/pull/13) ([fonsocarre](https://github.com/fonsocarre))\n\n## [V0.2.1](https://github.com/imperialcollegelondon/sharpy/tree/V0.2.1) (2019-03-14)\n\n[Full Changelog](https://github.com/imperialcollegelondon/sharpy/compare/v0.2...V0.2.1)\n\n## [v0.2](https://github.com/imperialcollegelondon/sharpy/tree/v0.2) (2019-03-14)\n\n[Full Changelog](https://github.com/imperialcollegelondon/sharpy/compare/v0.1...v0.2)\n\n**Closed issues:**\n\n- Add recovery options [\\#9](https://github.com/ImperialCollegeLondon/sharpy/issues/9)\n\n## [v0.1](https://github.com/imperialcollegelondon/sharpy/tree/v0.1) (2018-09-03)\n\n[Full Changelog](https://github.com/imperialcollegelondon/sharpy/compare/bd2b65974d57d2d6486ea90cdb68ef6324efbac8...v0.1)\n\n**Implemented enhancements:**\n\n- Hinge definition for control surface [\\#8](https://github.com/ImperialCollegeLondon/sharpy/issues/8)\n- sharpy\\_main.main does not return output [\\#5](https://github.com/ImperialCollegeLondon/sharpy/issues/5)\n\n**Fixed bugs:**\n\n- Aerofoil data associated to the nodes instead of the elements [\\#6](https://github.com/ImperialCollegeLondon/sharpy/issues/6)\n\n**Merged pull requests:**\n\n- Trimming routine working [\\#4](https://github.com/ImperialCollegeLondon/sharpy/pull/4) ([fonsocarre](https://github.com/fonsocarre))\n- Feature coupled dynamic [\\#3](https://github.com/ImperialCollegeLondon/sharpy/pull/3) ([fonsocarre](https://github.com/fonsocarre))\n- Refactored storage finished [\\#2](https://github.com/ImperialCollegeLondon/sharpy/pull/2) ([fonsocarre](https://github.com/fonsocarre))\n- Settings files are ConfigObjs now, not ConfigParser anymore [\\#1](https://github.com/ImperialCollegeLondon/sharpy/pull/1) ([fonsocarre](https://github.com/fonsocarre))\n\n\n\n\\* *This Changelog was automatically generated by [github_changelog_generator](https://github.com/github-changelog-generator/github-changelog-generator)*\n"
  },
  {
    "path": "CMakeLists.txt",
    "content": "cmake_minimum_required(VERSION 3.9)\nproject(sharpy)\n\nif(NOT CMAKE_BUILD_TYPE)\n  set(CMAKE_BUILD_TYPE Release)\nendif()\n\nadd_subdirectory(lib)\n"
  },
  {
    "path": "Dockerfile",
    "content": "FROM centos:8\n\nENV PYTHONDONTWRITEBYTECODE=true\nENV BASH_ENV ~/.bashrc\nSHELL [\"/bin/bash\", \"-c\"]\nENV PATH=${PATH}:/mamba/bin\n\n# CENTOS 8 has reached end of life - Not yet an updated Docker base for CentOS stream\n# Point to the CentOS 8 vault in order to download dependencies\nRUN cd /etc/yum.repos.d/ && \\\n    sed -i 's/mirrorlist/#mirrorlist/g' /etc/yum.repos.d/CentOS-* && \\\n    sed -i 's|#baseurl=http://mirror.centos.org|baseurl=http://vault.centos.org|g' /etc/yum.repos.d/CentOS-* && \\\n    cd /\n\n# Development tools including compilers\nRUN yum groupinstall \"Development Tools\" -y --nogpgcheck && \\\n    yum install dnf-plugins-core && \\\n    yum config-manager --set-enabled powertools && \\\n    yum install -y --nogpgcheck mesa-libGL libXt libXt-devel wget gcc-gfortran lapack vim tmux eigen3-devel && \\\n    yum clean all\n\n# Install Mamba - swapped from Conda to Mamba due to Github runner memory constraint\n# Mambaforge is deprecated in latest miniforge https://github.com/conda-forge/miniforge/pull/704\nRUN wget --no-check-certificate https://github.com/conda-forge/miniforge/releases/download/24.7.1-0/Mambaforge-Linux-x86_64.sh -O /mamba.sh && \\\n    chmod +x /mamba.sh && \\\n    /mamba.sh -b -p /mamba/ && \\\n    rm /mamba.sh && hash -r\n\nADD / /sharpy_dir/\n\n# Initialise mamba installation\nRUN mamba init bash && \\\n    mamba update -q conda && \\\n    mamba env create -f /sharpy_dir/utils/environment.yml && \\\n    find /mamba/ -follow -type f -name '*.a' -delete && \\\n    find /mamba/ -follow -type f -name '*.pyc' -delete && \\\n    find /mamba/ -follow -type f -name '*.js.map' -delete\n\nRUN ln -s /sharpy_dir/utils/docker/* /root/\n\nRUN cd sharpy_dir && \\\n    mamba activate sharpy && \\\n    git submodule update --init --recursive && \\\n    mkdir build && \\\n    cd build && \\\n    CXX=g++ FC=gfortran cmake .. && make install -j 4 && \\\n    cd .. && \\\n    pip install . && \\\n    rm -rf build\n    \nENTRYPOINT [\"/bin/bash\", \"--init-file\", \"/root/bashrc\"]\n"
  },
  {
    "path": "LICENSE",
    "content": "BSD 3-Clause License\n\nCopyright (c) 2019, Loads Control and Aeroelastics, Imperial College London\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are met:\n\n1. Redistributions of source code must retain the above copyright notice, this\n   list of conditions and the following disclaimer.\n\n2. Redistributions in binary form must reproduce the above copyright notice,\n   this list of conditions and the following disclaimer in the documentation\n   and/or other materials provided with the distribution.\n\n3. Neither the name of the copyright holder nor the names of its\n   contributors may be used to endorse or promote products derived from\n   this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\nAND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\nIMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\nDISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\nFOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\nDAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\nSERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\nCAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\nOR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\nOF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n"
  },
  {
    "path": "README.md",
    "content": "# Simulation of High Aspect Ratio aeroplanes in Python [SHARPy]\n\n![Version badge](https://img.shields.io/endpoint.svg?url=https%3A%2F%2Fraw.githubusercontent.com%2FImperialCollegeLondon%2Fsharpy%2Fmain%2F.version.json)\n![Build Status](https://github.com/ImperialCollegeLondon/sharpy/actions/workflows/sharpy_tests.yaml/badge.svg)\n[![Documentation Status](https://readthedocs.org/projects/ic-sharpy/badge/?version=main)](https://ic-sharpy.readthedocs.io/en/main/?badge=main)\n[![codecov](https://codecov.io/gh/ImperialCollegeLondon/sharpy/branch/main/graph/badge.svg)](https://codecov.io/gh/ImperialCollegeLondon/sharpy)\n[![License](https://img.shields.io/badge/License-BSD%203--Clause-blue.svg)](https://opensource.org/licenses/BSD-3-Clause)\n[![status](https://joss.theoj.org/papers/f7ccd562160f1a54f64a81e90f5d9af9/status.svg)](https://joss.theoj.org/papers/f7ccd562160f1a54f64a81e90f5d9af9)\n[![DOI](https://zenodo.org/badge/DOI/10.5281/zenodo.3531965.svg)](https://doi.org/10.5281/zenodo.3531965)\n\nSHARPy is a nonlinear aeroelastic analysis package originally developed at the Department of Aeronautics, Imperial\nCollege London. It can be used for the structural, aerodynamic and aeroelastic analysis of flexible wings, aircraft and wind turbines. It is shared here under a BSD 3-Clause permissive license.\n\n![XHALE](./docs/source/_static/XHALE-render.jpg)\n\n### Contact\n\nFor more information on the [research team](http://www.imperial.ac.uk/aeroelastics/software/) developing SHARPy or to get \nin touch, [visit our homepage](http://www.imperial.ac.uk/aeroelastics).\n\n## Physical Models\n\nSHARPy is a modular aeroelastic solver that currently uses two specific models for the structural and aerodynamic response of the system.\n\nFor the structural model, SHARPy employs a geometrically-exact displacement-based composite beam formulation,\naugmented with Lagrange multipliers for additional kinematic constraints.\nThis model has the advantage of providing the solution directly in the physical problem's degrees of freedom, making the \ncoupling with the aerodynamic solver simple and not requiring any post-processing. The 1D beam formulation used limits \nthe analyses that can be done by SHARPy to slender structures, such as high aspect ratio wings.\n\nThe aerodynamic model utilises the Unsteady Vortex Lattice Method (UVLM). The aerodynamic surfaces are modelled as a thin\nvortex ring lattice with the boundary conditions enforced at the collocation points in the middle of the vortex rings.\nThe Kutta condition is also enforced at the trailing edge. The wake can be simulated by either additional vortex rings\nor by infinitely long horseshoe vortices, which are ideally suited for steady simulations only.\n\nThe aerodynamic model has recently been extended by a linear source panel method (SPM) to model nonlifting bodies for example fuselages. The SPM and UVLM can be coupled to model fuselage-wing configuration and a junction handling approach, based on phantom panels and circulation interpolation, has been added.\n\nThe input problems can be structural, aerodynamic or coupled, yielding an aeroelastic system.\n\n## [Capabilities](http://ic-sharpy.readthedocs.io/en/latest/content/capabilities.html)\n\nThe base solver SHARPy is a nonlinear aeroelastic analysis package that can be used on free-flying flexible aircraft,\nwings and wind turbines. In addition, it supports linearisation of these nonlinear systems about\narbitrary conditions and includes various tools such as: model reduction or frequency analysis.\n\nIn short, SHARPy offers (amongst others) the following solutions to the user:\n* Static aerodynamic, structural and aeroelastic solutions including fuselage effects\n* Finding trim conditions for aeroelastic configurations\n* Nonlinear, dynamic time domain simulations under a large number of conditions such as:\n    + Prescribed trajectories.\n    + Free flight.\n    + Dynamic follower forces.\n    + Control inputs in thrust, control surface deflection...\n    + Arbitrary time-domain gusts, including non span-constant ones.\n    + Full 3D turbulent fields.\n* Multibody dynamics with hinges, articulations and prescribed nodal motions:\n    + Applicable to wind turbines.\n    + Hinged aircraft.\n    + Catapult assisted takeoffs.\n* Linear analysis:\n    + Linearisation around a nonlinear equilibrium.\n    + Frequency response analysis.\n    + Asymptotic stability analysis.\n* Model order reduction:\n    + Krylov-subspace reduction methods.\n    + Several balancing reduction methods.\n\n## Documentation\n\nThe documentation for SHARPy can be found [here](http://ic-sharpy.readthedocs.io).\n\n## Installing SHARPy\n\nFor the latest documentation, see the \n[installation docs](https://ic-sharpy.readthedocs.io/en/latest/content/installation.html).\n\nSHARPy can also be obtained from Docker Hub to avoid compilation\nand platform-dependant issues. If you are interested, make sure you check \nthe [SHARPy Docker distribution docs](https://ic-sharpy.readthedocs.io/en/latest/content/installation.html#using-sharpy-from-a-docker-container).\n\n## Contributing and Bug reports\n\nIf you think you can add a useful feature to SHARPy, want to write documentation or you encounter a bug, by all means, \ncheck out the [collaboration guide](https://ic-sharpy.readthedocs.io/en/latest/content/contributing.html).\n\n## Citing SHARPy\n\nSHARPy has been published in the Journal of Open Source Software (JOSS) and the relevant paper can be found\n[here](https://joss.theoj.org/papers/10.21105/joss.01885).\n\nIf you are using SHARPy for your work, please remember to cite it using the paper in JOSS as:\n\n`del Carre et al., (2019). SHARPy: A dynamic aeroelastic simulation toolbox for very flexible aircraft and wind\nturbines. Journal of Open Source Software, 4(44), 1885, https://doi.org/10.21105/joss.01885`\n\nThe bibtex entry for this citation is:\n\n```\n@Article{delCarre2019,\ndoi = {10.21105/joss.01885},\nurl = {https://doi.org/10.21105/joss.01885},\nyear = {2019},\nmonth = dec,\npublisher = {The Open Journal},\nvolume = {4},\nnumber = {44},\npages = {1885},\nauthor = {Alfonso del Carre and Arturo Mu{\\~{n}}oz-Sim\\'on and Norberto Goizueta and Rafael Palacios},\ntitle = {{SHARPy}: A dynamic aeroelastic simulation toolbox for very flexible aircraft and wind turbines},\njournal = {Journal of Open Source Software}\n}\n```\n\n\n## Continuous Integration Status\n\nSHARPy uses Continuous Integration to control the integrity of its code. The status in the release and develop branches\nis:\n\nMain\n![Build Status](https://github.com/ImperialCollegeLondon/sharpy/actions/workflows/sharpy_tests.yaml/badge.svg)\n![Docker Status](https://github.com/ImperialCollegeLondon/sharpy/actions/workflows/docker_build.yaml/badge.svg)\n\nDevelop\n![Build Status](https://github.com/ImperialCollegeLondon/sharpy/actions/workflows/sharpy_tests.yaml/badge.svg?branch=develop)\n"
  },
  {
    "path": "docs/.nojekyll",
    "content": ""
  },
  {
    "path": "docs/JOSS/codemeta.json",
    "content": "{\n  \"@context\": \"https://raw.githubusercontent.com/codemeta/codemeta/master/codemeta.jsonld\",\n  \"@type\": \"Code\",\n  \"author\": [\n    \"Alfonso del Carre\",\n    \"Arturo Muñoz-Simón\",\n    \"Norberto Goizueta\",\n    \"Rafael Palacios\"\n  ],\n  \"identifier\": \"\",\n  \"codeRepository\": \"https://github.com/imperialcollegelondon/sharpy\",\n  \"datePublished\": \"2019-11-04\",\n  \"dateModified\": \"2019-11-04\",\n  \"dateCreated\": \"2019-11-04\",\n  \"description\": \"A dynamic aeroelastic simulation toolbox for very flexible aircraft and wind turbines\",\n  \"keywords\": \"aeroelasticity, structural dynamics, aerodynamics, solar flight, perpetual flight, wing energy\",\n  \"license\": \"BSD-3\",\n  \"title\": \"SHARPy\",\n  \"version\": \"v1.0.0-rc1\"\n}\n"
  },
  {
    "path": "docs/JOSS/generate.rb",
    "content": "#!/usr/bin/ruby\n\n# For an OO language, this is distinctly procedural. Should probably fix that.\nrequire 'json'\n\ndetails = Hash.new({})\n\ncapture_params = [\n  { :name => \"title\", :message => \"Enter project name.\" },\n  { :name => \"url\", :message => \"Enter the URL of the project repository.\" },\n  { :name => \"description\", :message => \"Enter the (short) project description.\" },\n  { :name => \"license\", :message => \"Enter the license this software shared under. (hit enter to skip)\\nFor example MIT, BSD, GPL v3.0, Apache 2.0\" },\n  { :name => \"doi\", :message => \"Enter the DOI of the archived version of this code. (hit enter to skip)\\nFor example http://dx.doi.org/10.6084/m9.figshare.828487\" },\n  { :name => \"keywords\", :message => \"Enter keywords that should be associated with this project (hit enter to skip)\\nComma-separated, for example: turkey, chicken, pot pie\" },\n  { :name => \"version\", :message => \"Enter the version of your software (hit enter to skip)\\nSEMVER preferred: http://semver.org e.g. v1.0.0\" }\n]\n\nputs \"I'm going to try and help you prepare some things for your JOSS submission\"\nputs \"If all goes well then we'll have a nice codemeta.json file soon...\"\nputs \"\"\nputs \"************************************\"\nputs \"*    First, some basic details     *\"\nputs \"************************************\"\nputs \"\"\n\n# Loop through the desired captures and print out for clarity\ncapture_params.each do |param|\n  puts param[:message]\n  print \"> \"\n  input = gets\n\n  details[param[:name]] = input.chomp\n\n  puts \"\"\n  puts \"OK, your project has #{param[:name]}: #{input}\"\n  puts \"\"\nend\n\nputs \"\"\nputs \"************************************\"\nputs \"*        Experimental stuff        *\"\nputs \"************************************\"\nputs \"\"\n\nputs \"Would you like me to try and build a list of authors for you?\"\nputs \"(You need to be running this script in a git repository for this to work)\"\nprint \"> (Y/N)\"\nanswer = gets.chomp\n\ncase answer.downcase\nwhen \"y\", \"yes\"\n\n  # Use git shortlog to extract a list of author names and commit counts.\n  # Note we don't extract emails here as there's often different emails for\n  # each user. Instead we capture emails at the end.\n\n  git_log = `git shortlog --summary --numbered --no-merges`\n\n  # [\"252\\tMichael Jackson\", \"151\\tMC Hammer\"]\n  authors_and_counts = git_log.split(\"\\n\").map(&:strip)\n\n  authors_and_counts.each do |author_count|\n    count, author = author_count.split(\"\\t\").map(&:strip)\n\n    puts \"Looks like #{author} made #{count} commits\"\n    puts \"Add them to the output?\"\n    print \"> (Y/N)\"\n    answer = gets.chomp\n\n    # If a user chooses to add this author to the output then we ask for some\n    # additional information including their email, ORCID and affiliation.\n    case answer.downcase\n    when \"y\", \"yes\"\n      puts \"What is #{author}'s email address? (hit enter to skip)\"\n      print \"> \"\n      email = gets.chomp\n\n      puts \"What is #{author}'s ORCID? (hit enter to skip)\"\n      puts \"For example: http://orcid.org/0000-0000-0000-0000\"\n      print \"> \"\n      orcid = gets.chomp\n\n      puts \"What is #{author}'s affiliation? (hit enter to skip)\"\n      print \"> \"\n      affiliation = gets.chomp\n\n\n      details['authors'].merge!(author => { 'commits' => count,\n                                            'email' => email,\n                                            'orcid' => orcid,\n                                            'affiliation' => affiliation })\n\n    when \"n\", \"no\"\n      puts \"OK boss...\"\n      puts \"\"\n    end\n  end\nwhen \"n\", \"no\"\n  puts \"OK boss...\"\n  puts \"\"\nend\n\nputs \"Reticulating splines\"\n\n5.times do\n  print \".\"\n  sleep 0.5\nend\n\nputs \"\"\nputs \"Generating some JSON goodness...\"\n\n# TODO: work out how to use some kind of JSON template here.\n# Build the output list of authors from the inputs we've collected.\noutput_authors = []\n\ndetails['authors'].each do |author_name, values|\n  entry = {\n    \"@id\" => values['orcid'],\n    \"@type\" => \"Person\",\n    \"email\" => values['email'],\n    \"name\" => author_name,\n    \"affiliation\" => values['affiliation']\n  }\n  output_authors << entry\nend\n\n# TODO: this is currently a static template (written out here). It would be good\n# to do something smarter here.\noutput = {\n  \"@context\" => \"https://raw.githubusercontent.com/codemeta/codemeta/master/codemeta.jsonld\",\n  \"@type\" => \"Code\",\n  \"author\" => output_authors,\n  \"identifier\" => details['doi'],\n  \"codeRepository\" => details['url'],\n  \"datePublished\" => Time.now.strftime(\"%Y-%m-%d\"),\n  \"dateModified\" => Time.now.strftime(\"%Y-%m-%d\"),\n  \"dateCreated\" => Time.now.strftime(\"%Y-%m-%d\"),\n  \"description\" => details['description'],\n  \"keywords\" => details['keywords'],\n  \"license\" => details['license'],\n  \"title\" => details['title'],\n  \"version\" => details['version']\n}\n\nFile.open('codemeta.json', 'w') {|f| f.write(JSON.pretty_generate(output)) }\n"
  },
  {
    "path": "docs/JOSS/paper.bib",
    "content": "% Encoding: UTF-7\n@Article{Patil2001,\n  author    = {Mayuresh J. Patil and Dewey H. Hodges and Carlos E. S. Cesnik},\n  title     = {Nonlinear Aeroelasticity and Flight Dynamics of High-Altitude Long-Endurance Aircraft},\n  journal   = {Journal of Aircraft},\n  year      = {2001},\n  volume    = {38},\n  number    = {1},\n  pages     = {88--94},\n  month     = {jan},\n  doi       = {10.2514/2.2738},\n  groups    = {IFASD 2019},\n  publisher = {American Institute of Aeronautics and Astronautics ({AIAA})},\n}\n\n@InProceedings{Simpson2013,\n  author    = {Robert J. Simpson and Rafael Palacios},\n  title     = {Numerical aspects of nonlinear flexible aircraft flight dynamics modeling},\n  booktitle = {54th {AIAA}/{ASME}/{ASCE}/{AHS}/{ASC} Structures, Structural Dynamics, and Materials Conference},\n  year      = {2013},\n  month     = {apr},\n  publisher = {American Institute of Aeronautics and Astronautics},\n  doi       = {10.2514/6.2013-1634},\n  groups    = {IFASD 2019},\n}\n\n@Article{Jones2015,\n  author    = {J. R. Jones and C. E. S. Cesnik},\n  title     = {Preliminary flight test correlations of the {X-HALE} aeroelastic experiment},\n  journal   = {The Aeronautical Journal},\n  year      = {2015},\n  volume    = {119},\n  number    = {1217},\n  pages     = {855--870},\n  month     = {jul},\n  doi       = {10.1017/s0001924000010952},\n  groups    = {IFASD 2019},\n  publisher = {Cambridge University Press ({CUP})},\n}\n\n@PhdThesis{Jones2017,\n  author = {Jessica Renee Jones},\n  title  = {Development of a Very Flexible Testbed Aircraft for the Validation of Nonlinear Aeroelastic Codes},\n  school = {University of Michigan},\n  year   = {2017},\n  groups = {IFASD 2019},\n}\n\n@InProceedings{Cesnik2011,\n  author    = {Carlos Cesnik and Weihua Su},\n  title     = {Nonlinear Aeroelastic Simulation of X-{HALE}: a Very Flexible {UAV}},\n  booktitle = {49th {AIAA} Aerospace Sciences Meeting including the New Horizons Forum and Aerospace Exposition},\n  year      = {2011},\n  month     = {jan},\n  publisher = {American Institute of Aeronautics and Astronautics},\n  doi       = {10.2514/6.2011-1226},\n  groups    = {IFASD 2019},\n}\n\n@inproceedings{Drela1999,\n  doi = {10.2514/6.1999-1394},\n  url = {https://doi.org/10.2514/6.1999-1394},\n  year = {1999},\n  month = apr,\n  publisher = {American Institute of Aeronautics and Astronautics},\n  author = {Mark Drela},\n  title = {Integrated simulation model for preliminary aerodynamic,  structural,  and control-law design of aircraft},\n  booktitle = {{40th Structures,  Structural Dynamics,  and Materials Conference and Exhibit}}\n}\n\n@PhdThesis{Shearer2006,\n  author = {Christopher M. Shearer},\n  title  = {Coupled nonlinear flight dynamics, aeroelasticity, and control of very flexible aircraft},\n  school = {University of Michigan},\n  year   = {2006},\n  groups = {IFASD 2019},\n}\n\n@Article{Cesnik2012,\n  author    = {Carlos E. S. Cesnik and Patrick J. Senatore and Weihua Su and Ella M. Atkins and Christopher M. Shearer},\n  title     = {X-{HALE}: A Very Flexible Unmanned Aerial Vehicle for Nonlinear Aeroelastic Tests},\n  journal   = {{AIAA} Journal},\n  year      = {2012},\n  volume    = {50},\n  number    = {12},\n  pages     = {2820--2833},\n  month     = {dec},\n  doi       = {10.2514/1.j051392},\n  groups    = {IFASD 2019},\n  publisher = {American Institute of Aeronautics and Astronautics ({AIAA})},\n}\n\n@Article{Cesnik2014,\n  author    = {Carlos E. S. Cesnik and Rafael Palacios and Eric Y. Reichenbach},\n  title     = {Reexamined Structural Design Procedures for Very Flexible Aircraft},\n  journal   = {Journal of Aircraft},\n  year      = {2014},\n  volume    = {51},\n  number    = {5},\n  pages     = {1580--1591},\n  month     = {sep},\n  doi       = {10.2514/1.c032464},\n  groups    = {IFASD 2019},\n  publisher = {American Institute of Aeronautics and Astronautics ({AIAA})},\n}\n\n@Article{Su2011,\n  author    = {Weihua Su and Carlos E. S. Cesnik},\n  title     = {Dynamic Response of Highly Flexible Flying Wings},\n  journal   = {{AIAA} Journal},\n  year      = {2011},\n  volume    = {49},\n  number    = {2},\n  pages     = {324--339},\n  month     = {feb},\n  doi       = {10.2514/1.j050496},\n  groups    = {IFASD 2019},\n  publisher = {American Institute of Aeronautics and Astronautics ({AIAA})},\n}\n\n@InProceedings{Dillsaver2013,\n  author    = {Matthew Dillsaver and Carlos E. S. Cesnik and Ilya Kolmanovsky},\n  title     = {Trajectory Control of Very Flexible Aircraft with Gust Disturbance},\n  booktitle = {{AIAA} Atmospheric Flight Mechanics ({AFM}) Conference},\n  year      = {2013},\n  month     = {aug},\n  publisher = {American Institute of Aeronautics and Astronautics},\n  doi       = {10.2514/6.2013-4745},\n  groups    = {IFASD 2019},\n}\n\n@article{Murua2012a,\nauthor = {Murua, Joseba and Palacios, Rafael and Graham, J. Michael R.},\ndoi = {10.1016/j.paerosci.2012.06.001},\njournal = {Progress in Aerospace Sciences},\nmonth = {nov},\npages = {46--72},\ntitle = {{Applications of the unsteady vortex-lattice method in aircraft aeroelasticity and flight dynamics}},\nvolume = {55},\nyear = {2012}\n}\n\n@ARTICLE{deskos2019,\n       author = {{Deskos}, Georgios and {del Carre}, Alfonso and {Palacios}, Rafael},\n        title = \"{Assessment of low-altitude atmospheric turbulence models for aircraft aeroelasticity}\",\n      journal = {arXiv e-prints},\n     keywords = {Physics - Fluid Dynamics},\n         year = \"2019\",\n        month = \"Aug\",\n          eid = {arXiv:1908.00372},\n        pages = {arXiv:1908.00372},\narchivePrefix = {arXiv},\n       eprint = {1908.00372},\n primaryClass = {physics.flu-dyn},\n       adsurl = {https://ui.adsabs.harvard.edu/abs/2019arXiv190800372D},\n      adsnote = {Provided by the SAO/NASA Astrophysics Data System}\n}\n\n@Article{Palacios2010,\n  author    = {Rafael Palacios and Joseba Murua and Robert Cook},\n  title     = {Structural and Aerodynamic Models in Nonlinear Flight Dynamics of Very Flexible Aircraft},\n  journal   = {{AIAA} Journal},\n  year      = {2010},\n  volume    = {48},\n  number    = {11},\n  pages     = {2648--2659},\n  month     = {nov},\n  doi       = {10.2514/1.j050513},\n  groups    = {IFASD 2019},\n  publisher = {American Institute of Aeronautics and Astronautics ({AIAA})},\n}\n\n@InProceedings{Teixeira2018,\n  author    = {Patricia Teixeira and Carlos E. S. Cesnik},\n  title     = {Propeller Effects on the Dynamic Response of {HALE} Aircraft},\n  booktitle = {2018 {AIAA}/{ASCE}/{AHS}/{ASC} Structures, Structural Dynamics, and Materials Conference},\n  year      = {2018},\n  month     = {jan},\n  publisher = {American Institute of Aeronautics and Astronautics},\n  doi       = {10.2514/6.2018-1202},\n  groups    = {IFASD 2019},\n}\n\n@Article{Cook2013,\n  author    = {Robert G. Cook and Rafael Palacios and Paul Goulart},\n  title     = {Robust Gust Alleviation and Stabilization of Very Flexible Aircraft},\n  journal   = {{AIAA} Journal},\n  year      = {2013},\n  volume    = {51},\n  number    = {2},\n  pages     = {330--340},\n  month     = {feb},\n  doi       = {10.2514/1.j051697},\n  publisher = {American Institute of Aeronautics and Astronautics ({AIAA})},\n}\n\n@InProceedings{Patil2006,\n  author    = {Mayuresh Patil and Dana Taylor},\n  title     = {Gust Response of Highly Flexible Aircraft},\n  booktitle = {47th AIAA/ASME/ASCE/AHS/ASC Structures, Structural Dynamics, and Materials Conference Newport, Rhode Island},\n  year      = {2006},\n  month     = {may},\n  publisher = {American Institute of Aeronautics and Astronautics},\n  doi       = {10.2514/6.2002-1719},\n}\n\n@InProceedings{Cesnik2005,\n  author    = {Cesnik, Carlos E. S. and Brown, Eric L.},\n  title     = {Modelling of High Aspect Ratio Active Flexible Wings for Roll Control},\n  booktitle = {43rd Structures, Structural Dynamics, and Material Conference},\n  year      = {2002},\n  month     = {apr},\n  publisher = {American Institute of Aeronautics and Astronautics},\n  doi       = {10.2514/6.2006-1638},\n  address = {Denver, CO},\n}\n\n@article{Hesse2014a,\nabstract = {This paper investigates the linearization, using perturbation methods, of the structural deformations in the nonlinear flight dynamic response of aircraft with slender, flexible wings. The starting point is the coupling of a displacement-based geometrically nonlinear flexible-body dynamics formulation with a three-dimensional unsteady vortex lattice method. This is followed by a linearization of the structural degrees of freedom, which are assumed to be small in a body-fixed reference frame. The translations and rotations of that reference frame and their time derivatives, which describe the vehicle flight dynamics, can still be arbitrarily large. The resulting system preserves all couplings between rigid and elastic motions and can be projected onto a few vibration modes of the unconstrained aircraft with geometrically nonlinear static deflections at a trim condition. Equally, the unsteady aerodynamics can be approximated on a fixed lattice defined by the deformed static geometry. Numerical studies on a representative highaltitude long-endurance aircraft are presented to illustrate the approach. The results show an improvement compared to those obtained using the mean-axes approximation. {\\textcopyright} 2013 by Henrik Hesse, Rafael Palacios, and Joseba Murua.},\nauthor = {Hesse, Henrik and Palacios, Rafael and Murua, Joseba},\ndoi = {10.2514/1.J052316},\njournal = {AIAA Journal},\nmonth = {mar},\nnumber = {3},\npages = {528--538},\ntitle = {Consistent Structural Linearization in Flexible Aircraft Dynamics with Large Rigid-Body Motion},\nvolume = {52},\nyear = {2014}\n}\n\n@article{Su2011b,\nabstract = {},\nauthor = {Su, Weihua and Cesnik, Carlos E. S.},\ndoi = {10.1016/j.ijsolstr.2011.04.012},\njournal = {International Journal of Solids and Structures},\npages = {2349–-2360},\ntitle = {{Strain-based Geometrically Nonlinear Beam Formulation for Modeling Very Flexible Aircraft}},\nurl = {http://arc.aiaa.org/doi/10.2514/1.C032477},\nvolume = {48},\nyear = {2012}\n}\n\n@article{Su2012,\nabstract = {A strain-based geometrically nonlinear beam formulation for structural dynamic and aeroelastic analysis of slender beams and wings has been successfully applied to study the coupled nonlinear aeroelasticity and flight dynamics of different very flexible aircraft. As an extension to the solution technique based on the nonlinear finite element developed by the authors, a modal-based approach is discussed in this paper to solve the strain-based nonlinear beam equations. The modal approach is applied to study geometrically nonlinear static and transient problems of constrained and free slender beams, subject to external structural or aero-dynamic excitations. The efficiency of the modal solution is also compared to that of the finite-element approach.},\nauthor = {Su, Weihua and Cesnik, Carlos E. S.},\ndoi = {10.2514/1.C032477},\nisbn = {9781600869372 (ISBN)},\nissn = {0021-8669},\njournal = {Journal of Aircraft},\nnumber = {3},\npages = {890--903},\ntitle = {{Strain-Based Analysis for Geometrically Nonlinear Beams: A Modal Approach}},\nurl = {http://arc.aiaa.org/doi/10.2514/1.C032477},\nvolume = {51},\nyear = {2012}\n}\n@article{Su2010,\nabstract = {Blended-wing-body (BWB) aircraft with high-aspect-ratio wings is an important configu- ration for high-altitude long-endurance unmanned aerial vehicles (HALE UAV). Recently, Northrop Grumann created a wind tunnel model under the Air Force's High Lift over Drag Active (HiLDA) Wing program to study the aeroelastic characteristics of blended-wing-body for a potential Sensorcraft concept. This paper presents a study on the coupled aeroelastic / flight dynamics stability and response of a BWB aircraft that is modified from the HiLDA experimental model. An effective method is used to model very flexible BWB vehicles based on a low-order aeroelastic formulation that is capable of capturing the important structural nonlinear effects and couplings with the flight dynamics degrees of freedom. A nonlinear strain-based beam finite element formulation is used. Finite-state unsteady subsonic aerodynamic loads are incorporated to be coupled with all lifting surfaces, including the flexible body. Based on the proposed model, body-freedom flutter is studied, and is compared with the flutter results with all or partial rigid-body degrees of freedom constrained. The applicability of wind tunnel aeroelastic results (where the rigid-body motion is limited) is discussed in view of the free flight conditions (with all 6 rigid-body degrees of freedom). Furthermore, effects of structural and aerodynamic nonlinearities as well as wing bending/torsion rigidity coupling on the stability and gust response are also studied in this paper. I.},\nauthor = {Su, Weihua and Cesnik, Carlos E. S.},\ndoi = {10.2514/1.47317},\nisbn = {9781563479731},\nissn = {0021-8669},\njournal = {Journal of Aircraft},\nnumber = {5},\npages = {1539--1553},\ntitle = {{Nonlinear Aeroelasticity of a Very Flexible Blended-Wing-Body Aircraft}},\nurl = {http://arc.aiaa.org/doi/10.2514/1.47317},\nvolume = {47},\nyear = {2010}\n}\n@article{Shearer2007,\nauthor = {Shearer, Christopher M. and Cesnik, Carlos E.S.},\ndoi = {10.2514/1.27606},\nisbn = {0021-8669},\nissn = {0021-8669},\njournal = {Journal of Aircraft},\nnumber = {5},\npages = {1528--1545},\ntitle = {{Nonlinear Flight Dynamics of Very Flexible Aircraft}},\nurl = {http://arc.aiaa.org/doi/10.2514/1.27606},\nvolume = {44},\nyear = {2007}\n}\n@article{Teixeira2017,\nauthor = {Teixeira, Patr{\\'{i}}cia C and Cesnik, Carlos E S},\njournal = {International Forum on Aeroelasticity and Structural Dynamics (IFASD)},\nkeywords = {abstract,aerodynamic propeller effects,aerovironments helios,aircraft,although propeller propulsion is,coupled nonlinear,e,etc,g,long-endurance,of such vehicles for,of the propeller slipstream,on the aeroelastic behavior,particle vortex aerodynamics,present in many high-altitude,s x-hale uas,the effect,university of michigan,very flexible wing},\nnumber = {June},\npages = {1--18},\ntitle = {{Inclusion of Propeller Effects on Aeroelastic Behavior of Very Flexible Aircraft}},\nyear = {2017}\n}\n\n@article{Peters1994,\nauthor = {A. Peters, David and J. Johnson, Mark},\nyear = {1994},\nmonth = {01},\npages = {1-28},\ntitle = {Finite-state airloads for deformable airfoils on fixed and rotating wings},\nvolume = {44},\nbooktitle = {American Society of Mechanical Engineers, Aerospace Division (Publication) AD}\n}\n@phdthesis{Skujins2012,\naddress = {Ann Arbor, MI},\nauthor = {Skujins, Torstens},\nbooktitle = {Aerospace Engineering},\npublisher = {University of Michigan},\ntitle = {{Reduced-Order Modeling of Unsteady Aerodynamics Across Multiple Mach Regimes}},\nvolume = {Ph. D.},\nyear = {2012}\n}\n\n@book{geradin2001,\n  title={Flexible multibody dynamics: a finite element approach},\n  author={G{\\'e}radin, M. and Cardona, A.},\n  isbn={9780471489900},\n  lccn={00043685},\n  year={2001},\n  publisher={John Wiley}\n}\n\n@phdthesis{Murua2012,\n  title={Flexible aircraft dynamics with a geometrically-nonlinear description of the unsteady aerodynamics},\n  author={Murua, Joseba},\n  year={2012},\n  school={Imperial College London}\n}\n\n@MISC{eigenweb,\n  author = {Ga\\\"{e}l Guennebaud and Beno\\^{i}t Jacob and others},\n  title = {Eigen v3},\n  howpublished = {http://eigen.tuxfamily.org},\n  year = {2010}\n }\n @article{Hesse2016,\n  doi = {10.2514/1.g000715},\n  url = {https://doi.org/10.2514/1.g000715},\n  year = {2016},\n  month = apr,\n  publisher = {American Institute of Aeronautics and Astronautics ({AIAA})},\n  volume = {39},\n  number = {4},\n  pages = {801--813},\n  author = {Henrik Hesse and Rafael Palacios},\n  title = {Dynamic Load Alleviation in Wake Vortex Encounters},\n  journal = {Journal of Guidance,  Control,  and Dynamics}\n }\n\n@inproceedings{del2019efficient,\n  title={Low-Altitude Dynamics of Very Flexible Aircraft},\n  author={Del Carre, Alfonso and Palacios, Rafael},\n  address={San Diego, California},\n  year={2019},\n  publisher = {American Institute of Aeronautics and Astronautics},\n  doi={10.2514/6.2019-2038},\n  crossref={scitech19}\n}\n\n@proceedings{scitech19,\n  title={{AIAA SciTech 2019 Forum}},\n  publisher = {American Institute of Aeronautics and Astronautics},\n  venue={San Diego, California},\n  year={2019}\n}\n\n@article{melin2013tornado,\n  title={Tornado},\n  author={Melin, Tomas},\n  journal={KTH, Stockholm, Sweden, Masters Thesis and continued development. {http://www.flyg.kth.se/divisions/aero/software/tornado}},\n  year={2013}\n}\n\n@article{Murua2012-2,\nauthor = {Murua, Joseba and Palacios, Rafael and R. Graham, J. Michael},\ntitle = {Assessment of Wake-Tail Interference Effects on the Dynamics of Flexible Aircraft},\njournal = {AIAA Journal},\nvolume = {50},\nnumber = {7},\npages = {1575-1585},\nyear = {2012},\ndoi = {10.2514/1.J051543},\nURL = { \n        https://doi.org/10.2514/1.J051543\n},\neprint = { \n        https://doi.org/10.2514/1.J051543\n}\n}\n\n@article{Simpson2013-2,\nauthor = {Simpson, Robert J. S. and Palacios, Rafael and Murua, Joseba},\ntitle = {Induced-Drag Calculations in the Unsteady Vortex Lattice Method},\njournal = {AIAA Journal},\nvolume = {51},\nnumber = {7},\npages = {1775-1779},\nyear = {2013},\ndoi = {10.2514/1.J052136},\n\nURL = { \n        https://doi.org/10.2514/1.J052136\n    \n},\neprint = { \n        https://doi.org/10.2514/1.J052136\n    \n}\n}\n\n@book{Katz2001,\n  title={Low-Speed Aerodynamics},\n  author={Katz, J. and Plotkin, A.},\n  isbn={9781107717428},\n  series={{Cambridge Aerospace Series}},\n  year={2001},\n  publisher={Cambridge University Press}\n}\n\n@book{etkin1982dynamics,\n  title={Dynamics of flight: stability and control},\n  author={Etkin, B.},\n  isbn={9780471089360},\n  lccn={81013058},\n  url={https://books.google.co.uk/books?id=4n5TAAAAMAAJ},\n  year={1982},\n  publisher={John Wiley \\& Sons Australia, Limited}\n}\n\n@inbook{DeMarco2007,\nauthor = {Agostino De Marco and Eugene Duke and Jon Berndt},\ntitle = {A General Solution to the Aircraft Trim Problem},\nbooktitle = {AIAA Modeling and Simulation Technologies Conference and Exhibit},\nchapter = {},\nyear={2007},\npages = {},\ndoi = {10.2514/6.2007-6703},\nURL = {https://arc.aiaa.org/doi/abs/10.2514/6.2007-6703},\neprint = {https://arc.aiaa.org/doi/pdf/10.2514/6.2007-6703}\n}\n\n@book{wiener1950,\n  title={Extrapolation, interpolation, and smoothing of stationary time series: with engineering applications},\n  author={Wiener, Norbert and Mass.) Massachusetts Institute of Technology (Cambridge},\n  year={1950},\n  publisher={Technology Press}\n}\n\n@article{broyden1965class,\n  title={A class of methods for solving nonlinear simultaneous equations},\n  author={Broyden, Charles G},\n  journal={Mathematics of computation},\n  volume={19},\n  number={92},\n  pages={577--593},\n  year={1965},\n  publisher={JSTOR}\n}\n\n@Article{faa,\n  title   = {Dynamic Gust Loads - {AC 25.341-1}},\n  author={{FAA}},\n  journal = {{FAA} Advisory Circular},\n  year    = {2014}\n}\n\n @inproceedings{del2019ifasd,\n  title={Nonlinear response of a very flexible aircraft under lateal gust},\n  author={Del Carre, Alfonso and Teixeira, Patricia, and Cesnik, Carlos E. S. and Palacios, Rafael},\n  booktitle={{IFASD 2019 Forum}},\n  address={Savannah, Georgia},\n  year={2019},\n  publisher = {},\n  doi={}\n}\n\n\n@Article{vonKarman1948,\n  author  = {von K{\\'a}rm{\\'a}n, Theodore},\n  title   = {Progress in the Statistical Theory of Turbulence.},\n  journal = {Proceedings of the National Academy of Sciences of the United States of America},\n  year    = {1948},\n  volume  = {11},\n  number  = {34},\n  pages   = {530-539},\n  issn    = {0027-8424},\n}\n\n@article{KaimalEtAl1972,\nauthor = {Kaimal, J. C. and Wyngaard, J. C. and Izumi, Y. and Coté, O. R.},\ntitle = {Spectral characteristics of surface-layer turbulence},\njournal = {Quarterly Journal of the Royal Meteorological Society},\nvolume = {98},\nnumber = {417},\npages = {563-589},\ndoi = {10.1002/qj.49709841707},\nabstract = {Abstract The behaviour of spectra and cospectra of turbulence in the surface layer is described within the framework of similarity theory using wind and temperature fluctuation data obtained in the 1968 AFCRL Kansas experiments. With appropriate normalization, the spectra and cospectra are each reduced to a family of curves which spread out according to z/L at low frequencies but converge to a single universal curve in the inertial subrange. The paper compares these results with data obtained by other investigators over both land and water. Spectral constants for velocity and temperature are determined and the variability in the recent estimates of the constants is discussed. The high-frequency behaviour is consistent with local isotropy. In the inertial subrange, where the spectra fall as n−5/3, the cospectra fall faster: uω and ωθ as n−7/3, and uθ, on the average, as n−5/2. The 4/3 ratio between the transverse and longitudinal spectral levels is observed at wavelengths of the order of the height above ground under unstable conditions and at wavelengths of the order of L/10 under stable conditions. This lower isotropic limit is shown to be governed by the combined effects of shear and buoyancy on small-scale eddies.},\nyear = {1972}\n}\n\n@Article{GonzaleEtAl2018,\n  author   = {Jes\\'{u}s Gonzalo and Deibi L\\'{o}pez and Diego Dom\\'{i}nguez and Adri\\'{a}n Garc\\'{i}a and Alberto Escapa},\n  title    = {On the capabilities and limitations of high altitude pseudo-satellites},\n  journal  = {Progress in Aerospace Sciences},\n  year     = {2018},\n  volume   = {98},\n  pages    = {37 - 56},\n  issn     = {0376-0421},\n  doi      = {https://doi.org/10.1016/j.paerosci.2018.03.006},\n  abstract = {The idea of self-sustaining air vehicles that excited engineers in the seventies has nowadays become a reality as proved by several initiatives worldwide. High altitude platforms, or Pseudo-satellites (HAPS), are unmanned vehicles that take advantage of weak stratospheric winds and solar energy to operate without interfering with current commercial aviation and with enough endurance to provide long-term services as satellites do. Target applications are communications, Earth observation, positioning and science among others. This paper reviews the major characteristics of stratospheric flight, where airplanes and airships will compete for best performance. The careful analysis of involved technologies and their trends allow budget models to shed light on the capabilities and limitations of each solution. Aerodynamics and aerostatics, structures and materials, propulsion, energy management, thermal control, flight management and ground infrastructures are the critical elements revisited to assess current status and expected short-term evolutions. Stratospheric airplanes require very light wing loading, which has been demonstrated to be feasible but currently limits their payload mass to few tenths of kilograms. On the other hand, airships need to be large and operationally complex but their potential to hover carrying hundreds of kilograms with reasonable power supply make them true pseudo-satellites with enormous commercial interest. This paper provides useful information on the relative importance of the technology evolutions, as well as on the selection of the proper platform for each application or set of payload requirements. The authors envisage prompt availability of both types of HAPS, aerodynamic and aerostatic, providing unprecedented services.},\n  keywords = {High altitude platforms, Pseudo-satellite, HAPS, Stratospheric flight, Long endurance, Solar-powered},\n}\n\n@article{Maraniello2019,\n    title = {State-Space Realizations and Internal Balancing in Potential-Flow Aerodynamics with Arbitrary Kinematics},\n    year = {2019},\n    journal = {AIAA Journal},\n    author = {Maraniello, Salvatore and Palacios, Rafael},\n    number = {6},\n    pages = {1--14},\n    volume = {57},\n    url = {https://arc.aiaa.org/doi/10.2514/1.J058153},\n    doi = {10.2514/1.J058153},\n    issn = {0001-1452}\n}\n\n@misc{openfast,\n    title = {{NWTC Information Portal (OpenFAST)}},\n    author = {{National Wind Technology Center (NWTC)}},\n    url = {https://nwtc.nrel.gov/OpenFAST},\n    note = {Accessed: 2019-11-25}}\n"
  },
  {
    "path": "docs/JOSS/paper.md",
    "content": "---\ntitle: 'SHARPy: A dynamic aeroelastic simulation toolbox for very flexible aircraft and wind turbines'\ntags:\n    - aeroelasticity\n    - structural dynamics\n    - aerodynamics\n    - solar flight\n    - wind energy\nauthors:\n    - name: Alfonso del Carre\n      orcid: 0000-0002-8133-9481\n      affiliation: 1\n    - name: Arturo Muñoz-Simón\n      orcid: 0000-0003-4840-5392\n      affiliation: 1\n    - name: Norberto Goizueta\n      orcid: 0000-0001-7445-5970\n      affiliation: 1\n    - name: Rafael Palacios\n      orcid: 0000-0002-6706-3220\n      affiliation: 1\naffiliations:\n    - name: Department of Aeronautics, Imperial College London. London, UK.\n      index: 1\ndate: 13 August 2019\nbibliography: paper.bib\n---\n\n# Summary\n\nAeroelasticity is the study of the dynamic interaction between unsteady aerodynamics\nand structural dynamics on flexible streamlined bodies, which may include\nrigid-body dynamics.  Industry standard solutions in aeronautics and wind energy\nare built on the assumption of small structural displacements, which lead to linear\nor quasi-linear theories. However, advances in areas such as energy storage and generation,\nand composite material manufacturing have fostered a new kind of aeroelastic\nstructures that may undergo large displacements under aerodynamic forces.\n\nIn particular, solar-powered High-Altitude Long-Endurance (HALE) aircraft\nhave recently seen very significant progress. New configurations\nare now able\nto stay airborne for longer than three weeks at a time.\nExtreme efficiency is achieved by reducing the total weight of the aircraft while\nincreasing the lifting surfaces' aspect ratio.\nIn a similar quest for extreme efficiency, the wind energy industry\nis also trending towards longer and more slender blades, specially for off-shore\napplications, where the largest blades are now close to 100-m long.\n\n\nThese longer and more slender structures can present large deflections and have relatively low frequency structural\nmodes which, in the case of aircraft, can interact with the flight dynamics modes with potentially unstable couplings.\nIn the case of offshore wind turbines, platform movement may generate important rotor excursions that cause complex\naeroelastic phenomena which conventional quasi-linear methods may not accurately capture.\n\n\n``SHARPy`` (Simulation of High-Aspect Ratio aeroplanes in Python) is a dynamic aeroelasticity simulation toolbox for\naircraft and wind turbines. It features a versatile interface and core code written in Python 3, while computationally\nexpensive routines are included in libraries coded in C++ and Modern Fortran. SHARPy is easily extended through a\nmodular object-oriented design, and includes tools for linear and nonlinear analysis of the time-domain aeroelastic\nresponse of flexible bodies in a large number of cases, such as 3-D discrete gust [@del2019ifasd], turbulent field\ninput [@Hesse2016; @deskos2019], control surface deflection and prescribed motion [@del2019efficient]. In addition, linearised\nstate-space models can be obtained for frequency domain analysis, controller design and model reduction.\n\n\nFew open source options are available for nonlinear aeroelastic analysis. A well known code for wind\nenergy is OpenFAST [@openfast], developed at NREL and distributed under\nApache 2.0 license. OpenFAST features a Geometrically-Exact Composite Beam structural\nmodel and an actuator-line based aerodynamic solver. The wake is modelled using\nquasi-steady Blade Element Momentum theory. To the knowledge of the authors,\nno other nonlinear aeroelasticity framework for aircraft is available\nunder open-source terms. An example of a commonly-used aircraft-oriented software\nis ASWING [@Drela1999]. It is based on geometrically nonlinear beams with approximated\nrigid body dynamics. Aerodynamic loads are calculated using a lifting-line\ntheory solver with prescribed coefficients. Lastly, UM/NAST [@del2019ifasd] is a nonlinear\naeroelastic code with GECB and UVLM solvers. However, it is a research code\nwhich has not been released as open source.\n\n\n``SHARPy`` relies only on freely-available open-source dependencies\nsuch as [Paraview](https://paraview.org) for post-processing\nThe computationally\nexpensive routines written in C++ and Fortran have been designed with Fluid-Structure\nInteraction (FSI) problems in mind, resulting in minimal overhead between\nfunction calls.\n\n## Features\nThe [structural model](https://github.com/imperialcollegelondon/xbeam)\nincluded in ``SHARPy`` is a Geometrically-Exact Composite Beam (GECB) [@geradin2001; @Hesse2014a]\nsupports multibody features\nsuch as hinges, joints and absolute and relative nodal velocity constraints through Lagrange Multipliers.\nRigid body motion can be prescribed or simulated. The structural solver supports\ndistributed and lumped mass formulation (or a combination of both). Time-integration\nis carried out using a Newmark-$\\beta$ scheme.\n\nThe [aerodynamic solver](https://github.com/imperialcollegelondon/uvlm) is an Unsteady\nVortex Lattice Method (UVLM) [@Katz2001; @Simpson2013-2].\nIt can simulate an arbitrary number of surfaces together\nwith their interactions. A non conventional force evaluation scheme is used [@Simpson2013-2] in\norder to support large sideslip angles and obtain an induced drag estimation.\nIn addition to this, added mass effects can be obtained and introduced in the\nFSI problem. This can be especially important in the case of very light flexible\naircraft flying at low altitude.\n\nThe coupling algorithm included in the code is designed to allow fully coupled\nnonlinear simulations, although weakly coupled solutions can be obtained. Independent\nstructural or aerodynamic simulation are supported natively.\nThe nonlinear system can also be linearised taking an arbitrary reference condition. The linearised system can be used\nfor frequency domain analysis, linear model order reduction methods and controller design.\n\n![Aerodynamic grid and forces in the static aeroelastic equilibrium configuration on the XHALE aircraft [@del2019ifasd]](https://github.com/ImperialCollegeLondon/sharpy/raw/main/docs/source/_static/XHALE-render.jpg)\n\n\n# Acknowledgements\nA. Carre gratefully acknowledges the support provided by Airbus Defence and Space. Norberto Goizueta's acknowledges and\nthanks the Department of Aeronautics at Imperial College for sponsoring his research.\nArturo Muñoz-Simón's research has received funding from the EU's H2020 research and innovation programme\nunder the Marie Sklodowska-Curie grant agreement 765579.\n\n# References\n"
  },
  {
    "path": "docs/Makefile",
    "content": "# Makefile for Sphinx documentation\n#\n\n# You can set these variables from the command line.\nSPHINXOPTS    =\nSPHINXBUILD   = sphinx-build\nPAPER         =\nBUILDDIR      = build\n\n# Internal variables.\nPAPEROPT_a4     = -D latex_paper_size=a4\nPAPEROPT_letter = -D latex_paper_size=letter\nALLSPHINXOPTS   = -d $(BUILDDIR)/doctrees $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) source\n# the i18n builder cannot share the environment and doctrees with the others\nI18NSPHINXOPTS  = $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) source\n\n.PHONY: help\nhelp:\n\t@echo \"Please use \\`make <target>' where <target> is one of\"\n\t@echo \"  html       to make standalone HTML files\"\n\t@echo \"  dirhtml    to make HTML files named index.html in directories\"\n\t@echo \"  singlehtml to make a single large HTML file\"\n\t@echo \"  pickle     to make pickle files\"\n\t@echo \"  json       to make JSON files\"\n\t@echo \"  htmlhelp   to make HTML files and a HTML help project\"\n\t@echo \"  qthelp     to make HTML files and a qthelp project\"\n\t@echo \"  applehelp  to make an Apple Help Book\"\n\t@echo \"  devhelp    to make HTML files and a Devhelp project\"\n\t@echo \"  epub       to make an epub\"\n\t@echo \"  epub3      to make an epub3\"\n\t@echo \"  latex      to make LaTeX files, you can set PAPER=a4 or PAPER=letter\"\n\t@echo \"  latexpdf   to make LaTeX files and run them through pdflatex\"\n\t@echo \"  latexpdfja to make LaTeX files and run them through platex/dvipdfmx\"\n\t@echo \"  text       to make text files\"\n\t@echo \"  man        to make manual pages\"\n\t@echo \"  texinfo    to make Texinfo files\"\n\t@echo \"  info       to make Texinfo files and run them through makeinfo\"\n\t@echo \"  gettext    to make PO message catalogs\"\n\t@echo \"  changes    to make an overview of all changed/added/deprecated items\"\n\t@echo \"  xml        to make Docutils-native XML files\"\n\t@echo \"  pseudoxml  to make pseudoxml-XML files for display purposes\"\n\t@echo \"  linkcheck  to check all external links for integrity\"\n\t@echo \"  doctest    to run all doctests embedded in the documentation (if enabled)\"\n\t@echo \"  coverage   to run coverage check of the documentation (if enabled)\"\n\t@echo \"  dummy      to check syntax errors of document sources\"\n\n.PHONY: clean\nclean:\n\trm -rf $(BUILDDIR)/*\n\n.PHONY: html\nhtml:\n\t$(SPHINXBUILD) -b html $(ALLSPHINXOPTS) $(BUILDDIR)/html\n\t@echo\n\t@echo \"Build finished. The HTML pages are in $(BUILDDIR)/html.\"\n\n.PHONY: dirhtml\ndirhtml:\n\t$(SPHINXBUILD) -b dirhtml $(ALLSPHINXOPTS) $(BUILDDIR)/dirhtml\n\t@echo\n\t@echo \"Build finished. The HTML pages are in $(BUILDDIR)/dirhtml.\"\n\n.PHONY: singlehtml\nsinglehtml:\n\t$(SPHINXBUILD) -b singlehtml $(ALLSPHINXOPTS) $(BUILDDIR)/singlehtml\n\t@echo\n\t@echo \"Build finished. The HTML page is in $(BUILDDIR)/singlehtml.\"\n\n.PHONY: pickle\npickle:\n\t$(SPHINXBUILD) -b pickle $(ALLSPHINXOPTS) $(BUILDDIR)/pickle\n\t@echo\n\t@echo \"Build finished; now you can process the pickle files.\"\n\n.PHONY: json\njson:\n\t$(SPHINXBUILD) -b json $(ALLSPHINXOPTS) $(BUILDDIR)/json\n\t@echo\n\t@echo \"Build finished; now you can process the JSON files.\"\n\n.PHONY: htmlhelp\nhtmlhelp:\n\t$(SPHINXBUILD) -b htmlhelp $(ALLSPHINXOPTS) $(BUILDDIR)/htmlhelp\n\t@echo\n\t@echo \"Build finished; now you can run HTML Help Workshop with the\" \\\n\t      \".hhp project file in $(BUILDDIR)/htmlhelp.\"\n\n.PHONY: qthelp\nqthelp:\n\t$(SPHINXBUILD) -b qthelp $(ALLSPHINXOPTS) $(BUILDDIR)/qthelp\n\t@echo\n\t@echo \"Build finished; now you can run \"qcollectiongenerator\" with the\" \\\n\t      \".qhcp project file in $(BUILDDIR)/qthelp, like this:\"\n\t@echo \"# qcollectiongenerator $(BUILDDIR)/qthelp/SHARPy.qhcp\"\n\t@echo \"To view the help file:\"\n\t@echo \"# assistant -collectionFile $(BUILDDIR)/qthelp/SHARPy.qhc\"\n\n.PHONY: applehelp\napplehelp:\n\t$(SPHINXBUILD) -b applehelp $(ALLSPHINXOPTS) $(BUILDDIR)/applehelp\n\t@echo\n\t@echo \"Build finished. The help book is in $(BUILDDIR)/applehelp.\"\n\t@echo \"N.B. You won't be able to view it unless you put it in\" \\\n\t      \"~/Library/Documentation/Help or install it in your application\" \\\n\t      \"bundle.\"\n\n.PHONY: devhelp\ndevhelp:\n\t$(SPHINXBUILD) -b devhelp $(ALLSPHINXOPTS) $(BUILDDIR)/devhelp\n\t@echo\n\t@echo \"Build finished.\"\n\t@echo \"To view the help file:\"\n\t@echo \"# mkdir -p $$HOME/.local/share/devhelp/SHARPy\"\n\t@echo \"# ln -s $(BUILDDIR)/devhelp $$HOME/.local/share/devhelp/SHARPy\"\n\t@echo \"# devhelp\"\n\n.PHONY: epub\nepub:\n\t$(SPHINXBUILD) -b epub $(ALLSPHINXOPTS) $(BUILDDIR)/epub\n\t@echo\n\t@echo \"Build finished. The epub file is in $(BUILDDIR)/epub.\"\n\n.PHONY: epub3\nepub3:\n\t$(SPHINXBUILD) -b epub3 $(ALLSPHINXOPTS) $(BUILDDIR)/epub3\n\t@echo\n\t@echo \"Build finished. The epub3 file is in $(BUILDDIR)/epub3.\"\n\n.PHONY: latex\nlatex:\n\t$(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex\n\t@echo\n\t@echo \"Build finished; the LaTeX files are in $(BUILDDIR)/latex.\"\n\t@echo \"Run \\`make' in that directory to run these through (pdf)latex\" \\\n\t      \"(use \\`make latexpdf' here to do that automatically).\"\n\n.PHONY: latexpdf\nlatexpdf:\n\t$(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex\n\t@echo \"Running LaTeX files through pdflatex...\"\n\t$(MAKE) -C $(BUILDDIR)/latex all-pdf\n\t@echo \"pdflatex finished; the PDF files are in $(BUILDDIR)/latex.\"\n\n.PHONY: latexpdfja\nlatexpdfja:\n\t$(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex\n\t@echo \"Running LaTeX files through platex and dvipdfmx...\"\n\t$(MAKE) -C $(BUILDDIR)/latex all-pdf-ja\n\t@echo \"pdflatex finished; the PDF files are in $(BUILDDIR)/latex.\"\n\n.PHONY: text\ntext:\n\t$(SPHINXBUILD) -b text $(ALLSPHINXOPTS) $(BUILDDIR)/text\n\t@echo\n\t@echo \"Build finished. The text files are in $(BUILDDIR)/text.\"\n\n.PHONY: man\nman:\n\t$(SPHINXBUILD) -b man $(ALLSPHINXOPTS) $(BUILDDIR)/man\n\t@echo\n\t@echo \"Build finished. The manual pages are in $(BUILDDIR)/man.\"\n\n.PHONY: texinfo\ntexinfo:\n\t$(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo\n\t@echo\n\t@echo \"Build finished. The Texinfo files are in $(BUILDDIR)/texinfo.\"\n\t@echo \"Run \\`make' in that directory to run these through makeinfo\" \\\n\t      \"(use \\`make info' here to do that automatically).\"\n\n.PHONY: info\ninfo:\n\t$(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo\n\t@echo \"Running Texinfo files through makeinfo...\"\n\tmake -C $(BUILDDIR)/texinfo info\n\t@echo \"makeinfo finished; the Info files are in $(BUILDDIR)/texinfo.\"\n\n.PHONY: gettext\ngettext:\n\t$(SPHINXBUILD) -b gettext $(I18NSPHINXOPTS) $(BUILDDIR)/locale\n\t@echo\n\t@echo \"Build finished. The message catalogs are in $(BUILDDIR)/locale.\"\n\n.PHONY: changes\nchanges:\n\t$(SPHINXBUILD) -b changes $(ALLSPHINXOPTS) $(BUILDDIR)/changes\n\t@echo\n\t@echo \"The overview file is in $(BUILDDIR)/changes.\"\n\n.PHONY: linkcheck\nlinkcheck:\n\t$(SPHINXBUILD) -b linkcheck $(ALLSPHINXOPTS) $(BUILDDIR)/linkcheck\n\t@echo\n\t@echo \"Link check complete; look for any errors in the above output \" \\\n\t      \"or in $(BUILDDIR)/linkcheck/output.txt.\"\n\n.PHONY: doctest\ndoctest:\n\t$(SPHINXBUILD) -b doctest $(ALLSPHINXOPTS) $(BUILDDIR)/doctest\n\t@echo \"Testing of doctests in the sources finished, look at the \" \\\n\t      \"results in $(BUILDDIR)/doctest/output.txt.\"\n\n.PHONY: coverage\ncoverage:\n\t$(SPHINXBUILD) -b coverage $(ALLSPHINXOPTS) $(BUILDDIR)/coverage\n\t@echo \"Testing of coverage in the sources finished, look at the \" \\\n\t      \"results in $(BUILDDIR)/coverage/python.txt.\"\n\n.PHONY: xml\nxml:\n\t$(SPHINXBUILD) -b xml $(ALLSPHINXOPTS) $(BUILDDIR)/xml\n\t@echo\n\t@echo \"Build finished. The XML files are in $(BUILDDIR)/xml.\"\n\n.PHONY: pseudoxml\npseudoxml:\n\t$(SPHINXBUILD) -b pseudoxml $(ALLSPHINXOPTS) $(BUILDDIR)/pseudoxml\n\t@echo\n\t@echo \"Build finished. The pseudo-XML files are in $(BUILDDIR)/pseudoxml.\"\n\n.PHONY: dummy\ndummy:\n\t$(SPHINXBUILD) -b dummy $(ALLSPHINXOPTS) $(BUILDDIR)/dummy\n\t@echo\n\t@echo \"Build finished. Dummy builder generates no files.\"\n"
  },
  {
    "path": "docs/docignore.yml",
    "content": "# Docs to build list\n# once this is fully implemented this will become the file that specifies which packages are to be ignored for the\n# purposes of building documentation\npackages:\n  - folder: 'sharpy/controllers'\n    docs_folder: 'controllers'\n  - folder: 'sharpy/rom'\n    docs_folder: 'rom'\n\nmodules:\n  - 'sharpy/postproc'\n  - 'sharpy/solvers'\n  - 'sharpy/linear/dev'\n  - 'sharpy/linear/src/uvlmutils.py'\n  - 'sharpy/aero/utils/uvlmlib.py'\n  - 'sharpy/aero/utils/utils.py'\n  - 'sharpy/utils/plot_utils.py'\n  - 'sharpy/utils/solver_interface.py'\n  - 'sharpy/linear/test'\n  - 'sharpy/linear/utils'\n#  - 'sharpy/generators'\n  - 'sharpy/presharpy'\n  - 'sharpy/lib'\n  - 'sharpy/__pycache__'\n"
  },
  {
    "path": "docs/requirements_rtd",
    "content": "sphinx>=3.0,<7\nipykernel\nnbsphinx\nsphinx-rtd-theme>=1.2.2\nrecommonmark\n"
  },
  {
    "path": "docs/source/_static/.placeholder",
    "content": ""
  },
  {
    "path": "docs/source/_static/sharpy_guide/sharpy_intro.html",
    "content": "<!DOCTYPE html>\r\n<html>\r\n<head><meta charset=\"utf-8\" />\r\n<title>sharpy_intro</title><script src=\"https://cdnjs.cloudflare.com/ajax/libs/require.js/2.1.10/require.min.js\"></script>\r\n<script src=\"https://cdnjs.cloudflare.com/ajax/libs/jquery/2.0.3/jquery.min.js\"></script>\r\n\r\n<style type=\"text/css\">\r\n    /*!\r\n*\r\n* Twitter Bootstrap\r\n*\r\n*/\r\n/*!\r\n * Bootstrap v3.3.7 (http://getbootstrap.com)\r\n * Copyright 2011-2016 Twitter, Inc.\r\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\r\n */\r\n/*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */\r\nhtml {\r\n  font-family: sans-serif;\r\n  -ms-text-size-adjust: 100%;\r\n  -webkit-text-size-adjust: 100%;\r\n}\r\nbody {\r\n  margin: 0;\r\n}\r\narticle,\r\naside,\r\ndetails,\r\nfigcaption,\r\nfigure,\r\nfooter,\r\nheader,\r\nhgroup,\r\nmain,\r\nmenu,\r\nnav,\r\nsection,\r\nsummary {\r\n  display: block;\r\n}\r\naudio,\r\ncanvas,\r\nprogress,\r\nvideo {\r\n  display: inline-block;\r\n  vertical-align: baseline;\r\n}\r\naudio:not([controls]) {\r\n  display: none;\r\n  height: 0;\r\n}\r\n[hidden],\r\ntemplate {\r\n  display: none;\r\n}\r\na {\r\n  background-color: transparent;\r\n}\r\na:active,\r\na:hover {\r\n  outline: 0;\r\n}\r\nabbr[title] {\r\n  border-bottom: 1px dotted;\r\n}\r\nb,\r\nstrong {\r\n  font-weight: bold;\r\n}\r\ndfn {\r\n  font-style: italic;\r\n}\r\nh1 {\r\n  font-size: 2em;\r\n  margin: 0.67em 0;\r\n}\r\nmark {\r\n  background: #ff0;\r\n  color: #000;\r\n}\r\nsmall {\r\n  font-size: 80%;\r\n}\r\nsub,\r\nsup {\r\n  font-size: 75%;\r\n  line-height: 0;\r\n  position: relative;\r\n  vertical-align: baseline;\r\n}\r\nsup {\r\n  top: -0.5em;\r\n}\r\nsub {\r\n  bottom: -0.25em;\r\n}\r\nimg {\r\n  border: 0;\r\n}\r\nsvg:not(:root) {\r\n  overflow: hidden;\r\n}\r\nfigure {\r\n  margin: 1em 40px;\r\n}\r\nhr {\r\n  box-sizing: content-box;\r\n  height: 0;\r\n}\r\npre {\r\n  overflow: auto;\r\n}\r\ncode,\r\nkbd,\r\npre,\r\nsamp {\r\n  font-family: monospace, monospace;\r\n  font-size: 1em;\r\n}\r\nbutton,\r\ninput,\r\noptgroup,\r\nselect,\r\ntextarea {\r\n  color: inherit;\r\n  font: inherit;\r\n  margin: 0;\r\n}\r\nbutton {\r\n  overflow: visible;\r\n}\r\nbutton,\r\nselect {\r\n  text-transform: none;\r\n}\r\nbutton,\r\nhtml input[type=\"button\"],\r\ninput[type=\"reset\"],\r\ninput[type=\"submit\"] {\r\n  -webkit-appearance: button;\r\n  cursor: pointer;\r\n}\r\nbutton[disabled],\r\nhtml input[disabled] {\r\n  cursor: default;\r\n}\r\nbutton::-moz-focus-inner,\r\ninput::-moz-focus-inner {\r\n  border: 0;\r\n  padding: 0;\r\n}\r\ninput {\r\n  line-height: normal;\r\n}\r\ninput[type=\"checkbox\"],\r\ninput[type=\"radio\"] {\r\n  box-sizing: border-box;\r\n  padding: 0;\r\n}\r\ninput[type=\"number\"]::-webkit-inner-spin-button,\r\ninput[type=\"number\"]::-webkit-outer-spin-button {\r\n  height: auto;\r\n}\r\ninput[type=\"search\"] {\r\n  -webkit-appearance: textfield;\r\n  box-sizing: content-box;\r\n}\r\ninput[type=\"search\"]::-webkit-search-cancel-button,\r\ninput[type=\"search\"]::-webkit-search-decoration {\r\n  -webkit-appearance: none;\r\n}\r\nfieldset {\r\n  border: 1px solid #c0c0c0;\r\n  margin: 0 2px;\r\n  padding: 0.35em 0.625em 0.75em;\r\n}\r\nlegend {\r\n  border: 0;\r\n  padding: 0;\r\n}\r\ntextarea {\r\n  overflow: auto;\r\n}\r\noptgroup {\r\n  font-weight: bold;\r\n}\r\ntable {\r\n  border-collapse: collapse;\r\n  border-spacing: 0;\r\n}\r\ntd,\r\nth {\r\n  padding: 0;\r\n}\r\n/*! Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css */\r\n@media print {\r\n  *,\r\n  *:before,\r\n  *:after {\r\n    background: transparent !important;\r\n    color: #000 !important;\r\n    box-shadow: none !important;\r\n    text-shadow: none !important;\r\n  }\r\n  a,\r\n  a:visited {\r\n    text-decoration: underline;\r\n  }\r\n  a[href]:after {\r\n    content: \" (\" attr(href) \")\";\r\n  }\r\n  abbr[title]:after {\r\n    content: \" (\" attr(title) \")\";\r\n  }\r\n  a[href^=\"#\"]:after,\r\n  a[href^=\"javascript:\"]:after {\r\n    content: \"\";\r\n  }\r\n  pre,\r\n  blockquote {\r\n    border: 1px solid #999;\r\n    page-break-inside: avoid;\r\n  }\r\n  thead {\r\n    display: table-header-group;\r\n  }\r\n  tr,\r\n  img {\r\n    page-break-inside: avoid;\r\n  }\r\n  img {\r\n    max-width: 100% !important;\r\n  }\r\n  p,\r\n  h2,\r\n  h3 {\r\n    orphans: 3;\r\n    widows: 3;\r\n  }\r\n  h2,\r\n  h3 {\r\n    page-break-after: avoid;\r\n  }\r\n  .navbar {\r\n    display: none;\r\n  }\r\n  .btn > .caret,\r\n  .dropup > .btn > .caret {\r\n    border-top-color: #000 !important;\r\n  }\r\n  .label {\r\n    border: 1px solid #000;\r\n  }\r\n  .table {\r\n    border-collapse: collapse !important;\r\n  }\r\n  .table td,\r\n  .table th {\r\n    background-color: #fff !important;\r\n  }\r\n  .table-bordered th,\r\n  .table-bordered td {\r\n    border: 1px solid #ddd !important;\r\n  }\r\n}\r\n@font-face {\r\n  font-family: 'Glyphicons Halflings';\r\n  src: url('../components/bootstrap/fonts/glyphicons-halflings-regular.eot');\r\n  src: url('../components/bootstrap/fonts/glyphicons-halflings-regular.eot?#iefix') format('embedded-opentype'), url('../components/bootstrap/fonts/glyphicons-halflings-regular.woff2') format('woff2'), url('../components/bootstrap/fonts/glyphicons-halflings-regular.woff') format('woff'), url('../components/bootstrap/fonts/glyphicons-halflings-regular.ttf') format('truetype'), url('../components/bootstrap/fonts/glyphicons-halflings-regular.svg#glyphicons_halflingsregular') format('svg');\r\n}\r\n.glyphicon {\r\n  position: relative;\r\n  top: 1px;\r\n  display: inline-block;\r\n  font-family: 'Glyphicons Halflings';\r\n  font-style: normal;\r\n  font-weight: normal;\r\n  line-height: 1;\r\n  -webkit-font-smoothing: antialiased;\r\n  -moz-osx-font-smoothing: grayscale;\r\n}\r\n.glyphicon-asterisk:before {\r\n  content: \"\\002a\";\r\n}\r\n.glyphicon-plus:before {\r\n  content: \"\\002b\";\r\n}\r\n.glyphicon-euro:before,\r\n.glyphicon-eur:before {\r\n  content: \"\\20ac\";\r\n}\r\n.glyphicon-minus:before {\r\n  content: \"\\2212\";\r\n}\r\n.glyphicon-cloud:before {\r\n  content: \"\\2601\";\r\n}\r\n.glyphicon-envelope:before {\r\n  content: \"\\2709\";\r\n}\r\n.glyphicon-pencil:before {\r\n  content: \"\\270f\";\r\n}\r\n.glyphicon-glass:before {\r\n  content: \"\\e001\";\r\n}\r\n.glyphicon-music:before {\r\n  content: \"\\e002\";\r\n}\r\n.glyphicon-search:before {\r\n  content: \"\\e003\";\r\n}\r\n.glyphicon-heart:before {\r\n  content: \"\\e005\";\r\n}\r\n.glyphicon-star:before {\r\n  content: \"\\e006\";\r\n}\r\n.glyphicon-star-empty:before {\r\n  content: \"\\e007\";\r\n}\r\n.glyphicon-user:before {\r\n  content: \"\\e008\";\r\n}\r\n.glyphicon-film:before {\r\n  content: \"\\e009\";\r\n}\r\n.glyphicon-th-large:before {\r\n  content: \"\\e010\";\r\n}\r\n.glyphicon-th:before {\r\n  content: \"\\e011\";\r\n}\r\n.glyphicon-th-list:before {\r\n  content: \"\\e012\";\r\n}\r\n.glyphicon-ok:before {\r\n  content: \"\\e013\";\r\n}\r\n.glyphicon-remove:before {\r\n  content: \"\\e014\";\r\n}\r\n.glyphicon-zoom-in:before {\r\n  content: \"\\e015\";\r\n}\r\n.glyphicon-zoom-out:before {\r\n  content: \"\\e016\";\r\n}\r\n.glyphicon-off:before {\r\n  content: \"\\e017\";\r\n}\r\n.glyphicon-signal:before {\r\n  content: \"\\e018\";\r\n}\r\n.glyphicon-cog:before {\r\n  content: \"\\e019\";\r\n}\r\n.glyphicon-trash:before {\r\n  content: \"\\e020\";\r\n}\r\n.glyphicon-home:before {\r\n  content: \"\\e021\";\r\n}\r\n.glyphicon-file:before {\r\n  content: \"\\e022\";\r\n}\r\n.glyphicon-time:before {\r\n  content: \"\\e023\";\r\n}\r\n.glyphicon-road:before {\r\n  content: \"\\e024\";\r\n}\r\n.glyphicon-download-alt:before {\r\n  content: \"\\e025\";\r\n}\r\n.glyphicon-download:before {\r\n  content: \"\\e026\";\r\n}\r\n.glyphicon-upload:before {\r\n  content: \"\\e027\";\r\n}\r\n.glyphicon-inbox:before {\r\n  content: \"\\e028\";\r\n}\r\n.glyphicon-play-circle:before {\r\n  content: \"\\e029\";\r\n}\r\n.glyphicon-repeat:before {\r\n  content: \"\\e030\";\r\n}\r\n.glyphicon-refresh:before {\r\n  content: \"\\e031\";\r\n}\r\n.glyphicon-list-alt:before {\r\n  content: \"\\e032\";\r\n}\r\n.glyphicon-lock:before {\r\n  content: \"\\e033\";\r\n}\r\n.glyphicon-flag:before {\r\n  content: \"\\e034\";\r\n}\r\n.glyphicon-headphones:before {\r\n  content: \"\\e035\";\r\n}\r\n.glyphicon-volume-off:before {\r\n  content: \"\\e036\";\r\n}\r\n.glyphicon-volume-down:before {\r\n  content: \"\\e037\";\r\n}\r\n.glyphicon-volume-up:before {\r\n  content: \"\\e038\";\r\n}\r\n.glyphicon-qrcode:before {\r\n  content: \"\\e039\";\r\n}\r\n.glyphicon-barcode:before {\r\n  content: \"\\e040\";\r\n}\r\n.glyphicon-tag:before {\r\n  content: \"\\e041\";\r\n}\r\n.glyphicon-tags:before {\r\n  content: \"\\e042\";\r\n}\r\n.glyphicon-book:before {\r\n  content: \"\\e043\";\r\n}\r\n.glyphicon-bookmark:before {\r\n  content: \"\\e044\";\r\n}\r\n.glyphicon-print:before {\r\n  content: \"\\e045\";\r\n}\r\n.glyphicon-camera:before {\r\n  content: \"\\e046\";\r\n}\r\n.glyphicon-font:before {\r\n  content: \"\\e047\";\r\n}\r\n.glyphicon-bold:before {\r\n  content: \"\\e048\";\r\n}\r\n.glyphicon-italic:before {\r\n  content: \"\\e049\";\r\n}\r\n.glyphicon-text-height:before {\r\n  content: \"\\e050\";\r\n}\r\n.glyphicon-text-width:before {\r\n  content: \"\\e051\";\r\n}\r\n.glyphicon-align-left:before {\r\n  content: \"\\e052\";\r\n}\r\n.glyphicon-align-center:before {\r\n  content: \"\\e053\";\r\n}\r\n.glyphicon-align-right:before {\r\n  content: \"\\e054\";\r\n}\r\n.glyphicon-align-justify:before {\r\n  content: \"\\e055\";\r\n}\r\n.glyphicon-list:before {\r\n  content: \"\\e056\";\r\n}\r\n.glyphicon-indent-left:before {\r\n  content: \"\\e057\";\r\n}\r\n.glyphicon-indent-right:before {\r\n  content: \"\\e058\";\r\n}\r\n.glyphicon-facetime-video:before {\r\n  content: \"\\e059\";\r\n}\r\n.glyphicon-picture:before {\r\n  content: \"\\e060\";\r\n}\r\n.glyphicon-map-marker:before {\r\n  content: \"\\e062\";\r\n}\r\n.glyphicon-adjust:before {\r\n  content: \"\\e063\";\r\n}\r\n.glyphicon-tint:before {\r\n  content: \"\\e064\";\r\n}\r\n.glyphicon-edit:before {\r\n  content: \"\\e065\";\r\n}\r\n.glyphicon-share:before {\r\n  content: \"\\e066\";\r\n}\r\n.glyphicon-check:before {\r\n  content: \"\\e067\";\r\n}\r\n.glyphicon-move:before {\r\n  content: \"\\e068\";\r\n}\r\n.glyphicon-step-backward:before {\r\n  content: \"\\e069\";\r\n}\r\n.glyphicon-fast-backward:before {\r\n  content: \"\\e070\";\r\n}\r\n.glyphicon-backward:before {\r\n  content: \"\\e071\";\r\n}\r\n.glyphicon-play:before {\r\n  content: \"\\e072\";\r\n}\r\n.glyphicon-pause:before {\r\n  content: \"\\e073\";\r\n}\r\n.glyphicon-stop:before {\r\n  content: \"\\e074\";\r\n}\r\n.glyphicon-forward:before {\r\n  content: \"\\e075\";\r\n}\r\n.glyphicon-fast-forward:before {\r\n  content: \"\\e076\";\r\n}\r\n.glyphicon-step-forward:before {\r\n  content: \"\\e077\";\r\n}\r\n.glyphicon-eject:before {\r\n  content: \"\\e078\";\r\n}\r\n.glyphicon-chevron-left:before {\r\n  content: \"\\e079\";\r\n}\r\n.glyphicon-chevron-right:before {\r\n  content: \"\\e080\";\r\n}\r\n.glyphicon-plus-sign:before {\r\n  content: \"\\e081\";\r\n}\r\n.glyphicon-minus-sign:before {\r\n  content: \"\\e082\";\r\n}\r\n.glyphicon-remove-sign:before {\r\n  content: \"\\e083\";\r\n}\r\n.glyphicon-ok-sign:before {\r\n  content: \"\\e084\";\r\n}\r\n.glyphicon-question-sign:before {\r\n  content: \"\\e085\";\r\n}\r\n.glyphicon-info-sign:before {\r\n  content: \"\\e086\";\r\n}\r\n.glyphicon-screenshot:before {\r\n  content: \"\\e087\";\r\n}\r\n.glyphicon-remove-circle:before {\r\n  content: \"\\e088\";\r\n}\r\n.glyphicon-ok-circle:before {\r\n  content: \"\\e089\";\r\n}\r\n.glyphicon-ban-circle:before {\r\n  content: \"\\e090\";\r\n}\r\n.glyphicon-arrow-left:before {\r\n  content: \"\\e091\";\r\n}\r\n.glyphicon-arrow-right:before {\r\n  content: \"\\e092\";\r\n}\r\n.glyphicon-arrow-up:before {\r\n  content: \"\\e093\";\r\n}\r\n.glyphicon-arrow-down:before {\r\n  content: \"\\e094\";\r\n}\r\n.glyphicon-share-alt:before {\r\n  content: \"\\e095\";\r\n}\r\n.glyphicon-resize-full:before {\r\n  content: \"\\e096\";\r\n}\r\n.glyphicon-resize-small:before {\r\n  content: \"\\e097\";\r\n}\r\n.glyphicon-exclamation-sign:before {\r\n  content: \"\\e101\";\r\n}\r\n.glyphicon-gift:before {\r\n  content: \"\\e102\";\r\n}\r\n.glyphicon-leaf:before {\r\n  content: \"\\e103\";\r\n}\r\n.glyphicon-fire:before {\r\n  content: \"\\e104\";\r\n}\r\n.glyphicon-eye-open:before {\r\n  content: \"\\e105\";\r\n}\r\n.glyphicon-eye-close:before {\r\n  content: \"\\e106\";\r\n}\r\n.glyphicon-warning-sign:before {\r\n  content: \"\\e107\";\r\n}\r\n.glyphicon-plane:before {\r\n  content: \"\\e108\";\r\n}\r\n.glyphicon-calendar:before {\r\n  content: \"\\e109\";\r\n}\r\n.glyphicon-random:before {\r\n  content: \"\\e110\";\r\n}\r\n.glyphicon-comment:before {\r\n  content: \"\\e111\";\r\n}\r\n.glyphicon-magnet:before {\r\n  content: \"\\e112\";\r\n}\r\n.glyphicon-chevron-up:before {\r\n  content: \"\\e113\";\r\n}\r\n.glyphicon-chevron-down:before {\r\n  content: \"\\e114\";\r\n}\r\n.glyphicon-retweet:before {\r\n  content: \"\\e115\";\r\n}\r\n.glyphicon-shopping-cart:before {\r\n  content: \"\\e116\";\r\n}\r\n.glyphicon-folder-close:before {\r\n  content: \"\\e117\";\r\n}\r\n.glyphicon-folder-open:before {\r\n  content: \"\\e118\";\r\n}\r\n.glyphicon-resize-vertical:before {\r\n  content: \"\\e119\";\r\n}\r\n.glyphicon-resize-horizontal:before {\r\n  content: \"\\e120\";\r\n}\r\n.glyphicon-hdd:before {\r\n  content: \"\\e121\";\r\n}\r\n.glyphicon-bullhorn:before {\r\n  content: \"\\e122\";\r\n}\r\n.glyphicon-bell:before {\r\n  content: \"\\e123\";\r\n}\r\n.glyphicon-certificate:before {\r\n  content: \"\\e124\";\r\n}\r\n.glyphicon-thumbs-up:before {\r\n  content: \"\\e125\";\r\n}\r\n.glyphicon-thumbs-down:before {\r\n  content: \"\\e126\";\r\n}\r\n.glyphicon-hand-right:before {\r\n  content: \"\\e127\";\r\n}\r\n.glyphicon-hand-left:before {\r\n  content: \"\\e128\";\r\n}\r\n.glyphicon-hand-up:before {\r\n  content: \"\\e129\";\r\n}\r\n.glyphicon-hand-down:before {\r\n  content: \"\\e130\";\r\n}\r\n.glyphicon-circle-arrow-right:before {\r\n  content: \"\\e131\";\r\n}\r\n.glyphicon-circle-arrow-left:before {\r\n  content: \"\\e132\";\r\n}\r\n.glyphicon-circle-arrow-up:before {\r\n  content: \"\\e133\";\r\n}\r\n.glyphicon-circle-arrow-down:before {\r\n  content: \"\\e134\";\r\n}\r\n.glyphicon-globe:before {\r\n  content: \"\\e135\";\r\n}\r\n.glyphicon-wrench:before {\r\n  content: \"\\e136\";\r\n}\r\n.glyphicon-tasks:before {\r\n  content: \"\\e137\";\r\n}\r\n.glyphicon-filter:before {\r\n  content: \"\\e138\";\r\n}\r\n.glyphicon-briefcase:before {\r\n  content: \"\\e139\";\r\n}\r\n.glyphicon-fullscreen:before {\r\n  content: \"\\e140\";\r\n}\r\n.glyphicon-dashboard:before {\r\n  content: \"\\e141\";\r\n}\r\n.glyphicon-paperclip:before {\r\n  content: \"\\e142\";\r\n}\r\n.glyphicon-heart-empty:before {\r\n  content: \"\\e143\";\r\n}\r\n.glyphicon-link:before {\r\n  content: \"\\e144\";\r\n}\r\n.glyphicon-phone:before {\r\n  content: \"\\e145\";\r\n}\r\n.glyphicon-pushpin:before {\r\n  content: \"\\e146\";\r\n}\r\n.glyphicon-usd:before {\r\n  content: \"\\e148\";\r\n}\r\n.glyphicon-gbp:before {\r\n  content: \"\\e149\";\r\n}\r\n.glyphicon-sort:before {\r\n  content: \"\\e150\";\r\n}\r\n.glyphicon-sort-by-alphabet:before {\r\n  content: \"\\e151\";\r\n}\r\n.glyphicon-sort-by-alphabet-alt:before {\r\n  content: \"\\e152\";\r\n}\r\n.glyphicon-sort-by-order:before {\r\n  content: \"\\e153\";\r\n}\r\n.glyphicon-sort-by-order-alt:before {\r\n  content: \"\\e154\";\r\n}\r\n.glyphicon-sort-by-attributes:before {\r\n  content: \"\\e155\";\r\n}\r\n.glyphicon-sort-by-attributes-alt:before {\r\n  content: \"\\e156\";\r\n}\r\n.glyphicon-unchecked:before {\r\n  content: \"\\e157\";\r\n}\r\n.glyphicon-expand:before {\r\n  content: \"\\e158\";\r\n}\r\n.glyphicon-collapse-down:before {\r\n  content: \"\\e159\";\r\n}\r\n.glyphicon-collapse-up:before {\r\n  content: \"\\e160\";\r\n}\r\n.glyphicon-log-in:before {\r\n  content: \"\\e161\";\r\n}\r\n.glyphicon-flash:before {\r\n  content: \"\\e162\";\r\n}\r\n.glyphicon-log-out:before {\r\n  content: \"\\e163\";\r\n}\r\n.glyphicon-new-window:before {\r\n  content: \"\\e164\";\r\n}\r\n.glyphicon-record:before {\r\n  content: \"\\e165\";\r\n}\r\n.glyphicon-save:before {\r\n  content: \"\\e166\";\r\n}\r\n.glyphicon-open:before {\r\n  content: \"\\e167\";\r\n}\r\n.glyphicon-saved:before {\r\n  content: \"\\e168\";\r\n}\r\n.glyphicon-import:before {\r\n  content: \"\\e169\";\r\n}\r\n.glyphicon-export:before {\r\n  content: \"\\e170\";\r\n}\r\n.glyphicon-send:before {\r\n  content: \"\\e171\";\r\n}\r\n.glyphicon-floppy-disk:before {\r\n  content: \"\\e172\";\r\n}\r\n.glyphicon-floppy-saved:before {\r\n  content: \"\\e173\";\r\n}\r\n.glyphicon-floppy-remove:before {\r\n  content: \"\\e174\";\r\n}\r\n.glyphicon-floppy-save:before {\r\n  content: \"\\e175\";\r\n}\r\n.glyphicon-floppy-open:before {\r\n  content: \"\\e176\";\r\n}\r\n.glyphicon-credit-card:before {\r\n  content: \"\\e177\";\r\n}\r\n.glyphicon-transfer:before {\r\n  content: \"\\e178\";\r\n}\r\n.glyphicon-cutlery:before {\r\n  content: \"\\e179\";\r\n}\r\n.glyphicon-header:before {\r\n  content: \"\\e180\";\r\n}\r\n.glyphicon-compressed:before {\r\n  content: \"\\e181\";\r\n}\r\n.glyphicon-earphone:before {\r\n  content: \"\\e182\";\r\n}\r\n.glyphicon-phone-alt:before {\r\n  content: \"\\e183\";\r\n}\r\n.glyphicon-tower:before {\r\n  content: \"\\e184\";\r\n}\r\n.glyphicon-stats:before {\r\n  content: \"\\e185\";\r\n}\r\n.glyphicon-sd-video:before {\r\n  content: \"\\e186\";\r\n}\r\n.glyphicon-hd-video:before {\r\n  content: \"\\e187\";\r\n}\r\n.glyphicon-subtitles:before {\r\n  content: \"\\e188\";\r\n}\r\n.glyphicon-sound-stereo:before {\r\n  content: \"\\e189\";\r\n}\r\n.glyphicon-sound-dolby:before {\r\n  content: \"\\e190\";\r\n}\r\n.glyphicon-sound-5-1:before {\r\n  content: \"\\e191\";\r\n}\r\n.glyphicon-sound-6-1:before {\r\n  content: \"\\e192\";\r\n}\r\n.glyphicon-sound-7-1:before {\r\n  content: \"\\e193\";\r\n}\r\n.glyphicon-copyright-mark:before {\r\n  content: \"\\e194\";\r\n}\r\n.glyphicon-registration-mark:before {\r\n  content: \"\\e195\";\r\n}\r\n.glyphicon-cloud-download:before {\r\n  content: \"\\e197\";\r\n}\r\n.glyphicon-cloud-upload:before {\r\n  content: \"\\e198\";\r\n}\r\n.glyphicon-tree-conifer:before {\r\n  content: \"\\e199\";\r\n}\r\n.glyphicon-tree-deciduous:before {\r\n  content: \"\\e200\";\r\n}\r\n.glyphicon-cd:before {\r\n  content: \"\\e201\";\r\n}\r\n.glyphicon-save-file:before {\r\n  content: \"\\e202\";\r\n}\r\n.glyphicon-open-file:before {\r\n  content: \"\\e203\";\r\n}\r\n.glyphicon-level-up:before {\r\n  content: \"\\e204\";\r\n}\r\n.glyphicon-copy:before {\r\n  content: \"\\e205\";\r\n}\r\n.glyphicon-paste:before {\r\n  content: \"\\e206\";\r\n}\r\n.glyphicon-alert:before {\r\n  content: \"\\e209\";\r\n}\r\n.glyphicon-equalizer:before {\r\n  content: \"\\e210\";\r\n}\r\n.glyphicon-king:before {\r\n  content: \"\\e211\";\r\n}\r\n.glyphicon-queen:before {\r\n  content: \"\\e212\";\r\n}\r\n.glyphicon-pawn:before {\r\n  content: \"\\e213\";\r\n}\r\n.glyphicon-bishop:before {\r\n  content: \"\\e214\";\r\n}\r\n.glyphicon-knight:before {\r\n  content: \"\\e215\";\r\n}\r\n.glyphicon-baby-formula:before {\r\n  content: \"\\e216\";\r\n}\r\n.glyphicon-tent:before {\r\n  content: \"\\26fa\";\r\n}\r\n.glyphicon-blackboard:before {\r\n  content: \"\\e218\";\r\n}\r\n.glyphicon-bed:before {\r\n  content: \"\\e219\";\r\n}\r\n.glyphicon-apple:before {\r\n  content: \"\\f8ff\";\r\n}\r\n.glyphicon-erase:before {\r\n  content: \"\\e221\";\r\n}\r\n.glyphicon-hourglass:before {\r\n  content: \"\\231b\";\r\n}\r\n.glyphicon-lamp:before {\r\n  content: \"\\e223\";\r\n}\r\n.glyphicon-duplicate:before {\r\n  content: \"\\e224\";\r\n}\r\n.glyphicon-piggy-bank:before {\r\n  content: \"\\e225\";\r\n}\r\n.glyphicon-scissors:before {\r\n  content: \"\\e226\";\r\n}\r\n.glyphicon-bitcoin:before {\r\n  content: \"\\e227\";\r\n}\r\n.glyphicon-btc:before {\r\n  content: \"\\e227\";\r\n}\r\n.glyphicon-xbt:before {\r\n  content: \"\\e227\";\r\n}\r\n.glyphicon-yen:before {\r\n  content: \"\\00a5\";\r\n}\r\n.glyphicon-jpy:before {\r\n  content: \"\\00a5\";\r\n}\r\n.glyphicon-ruble:before {\r\n  content: \"\\20bd\";\r\n}\r\n.glyphicon-rub:before {\r\n  content: \"\\20bd\";\r\n}\r\n.glyphicon-scale:before {\r\n  content: \"\\e230\";\r\n}\r\n.glyphicon-ice-lolly:before {\r\n  content: \"\\e231\";\r\n}\r\n.glyphicon-ice-lolly-tasted:before {\r\n  content: \"\\e232\";\r\n}\r\n.glyphicon-education:before {\r\n  content: \"\\e233\";\r\n}\r\n.glyphicon-option-horizontal:before {\r\n  content: \"\\e234\";\r\n}\r\n.glyphicon-option-vertical:before {\r\n  content: \"\\e235\";\r\n}\r\n.glyphicon-menu-hamburger:before {\r\n  content: \"\\e236\";\r\n}\r\n.glyphicon-modal-window:before {\r\n  content: \"\\e237\";\r\n}\r\n.glyphicon-oil:before {\r\n  content: \"\\e238\";\r\n}\r\n.glyphicon-grain:before {\r\n  content: \"\\e239\";\r\n}\r\n.glyphicon-sunglasses:before {\r\n  content: \"\\e240\";\r\n}\r\n.glyphicon-text-size:before {\r\n  content: \"\\e241\";\r\n}\r\n.glyphicon-text-color:before {\r\n  content: \"\\e242\";\r\n}\r\n.glyphicon-text-background:before {\r\n  content: \"\\e243\";\r\n}\r\n.glyphicon-object-align-top:before {\r\n  content: \"\\e244\";\r\n}\r\n.glyphicon-object-align-bottom:before {\r\n  content: \"\\e245\";\r\n}\r\n.glyphicon-object-align-horizontal:before {\r\n  content: \"\\e246\";\r\n}\r\n.glyphicon-object-align-left:before {\r\n  content: \"\\e247\";\r\n}\r\n.glyphicon-object-align-vertical:before {\r\n  content: \"\\e248\";\r\n}\r\n.glyphicon-object-align-right:before {\r\n  content: \"\\e249\";\r\n}\r\n.glyphicon-triangle-right:before {\r\n  content: \"\\e250\";\r\n}\r\n.glyphicon-triangle-left:before {\r\n  content: \"\\e251\";\r\n}\r\n.glyphicon-triangle-bottom:before {\r\n  content: \"\\e252\";\r\n}\r\n.glyphicon-triangle-top:before {\r\n  content: \"\\e253\";\r\n}\r\n.glyphicon-console:before {\r\n  content: \"\\e254\";\r\n}\r\n.glyphicon-superscript:before {\r\n  content: \"\\e255\";\r\n}\r\n.glyphicon-subscript:before {\r\n  content: \"\\e256\";\r\n}\r\n.glyphicon-menu-left:before {\r\n  content: \"\\e257\";\r\n}\r\n.glyphicon-menu-right:before {\r\n  content: \"\\e258\";\r\n}\r\n.glyphicon-menu-down:before {\r\n  content: \"\\e259\";\r\n}\r\n.glyphicon-menu-up:before {\r\n  content: \"\\e260\";\r\n}\r\n* {\r\n  -webkit-box-sizing: border-box;\r\n  -moz-box-sizing: border-box;\r\n  box-sizing: border-box;\r\n}\r\n*:before,\r\n*:after {\r\n  -webkit-box-sizing: border-box;\r\n  -moz-box-sizing: border-box;\r\n  box-sizing: border-box;\r\n}\r\nhtml {\r\n  font-size: 10px;\r\n  -webkit-tap-highlight-color: rgba(0, 0, 0, 0);\r\n}\r\nbody {\r\n  font-family: \"Helvetica Neue\", Helvetica, Arial, sans-serif;\r\n  font-size: 13px;\r\n  line-height: 1.42857143;\r\n  color: #000;\r\n  background-color: #fff;\r\n}\r\ninput,\r\nbutton,\r\nselect,\r\ntextarea {\r\n  font-family: inherit;\r\n  font-size: inherit;\r\n  line-height: inherit;\r\n}\r\na {\r\n  color: #337ab7;\r\n  text-decoration: none;\r\n}\r\na:hover,\r\na:focus {\r\n  color: #23527c;\r\n  text-decoration: underline;\r\n}\r\na:focus {\r\n  outline: 5px auto -webkit-focus-ring-color;\r\n  outline-offset: -2px;\r\n}\r\nfigure {\r\n  margin: 0;\r\n}\r\nimg {\r\n  vertical-align: middle;\r\n}\r\n.img-responsive,\r\n.thumbnail > img,\r\n.thumbnail a > img,\r\n.carousel-inner > .item > img,\r\n.carousel-inner > .item > a > img {\r\n  display: block;\r\n  max-width: 100%;\r\n  height: auto;\r\n}\r\n.img-rounded {\r\n  border-radius: 3px;\r\n}\r\n.img-thumbnail {\r\n  padding: 4px;\r\n  line-height: 1.42857143;\r\n  background-color: #fff;\r\n  border: 1px solid #ddd;\r\n  border-radius: 2px;\r\n  -webkit-transition: all 0.2s ease-in-out;\r\n  -o-transition: all 0.2s ease-in-out;\r\n  transition: all 0.2s ease-in-out;\r\n  display: inline-block;\r\n  max-width: 100%;\r\n  height: auto;\r\n}\r\n.img-circle {\r\n  border-radius: 50%;\r\n}\r\nhr {\r\n  margin-top: 18px;\r\n  margin-bottom: 18px;\r\n  border: 0;\r\n  border-top: 1px solid #eeeeee;\r\n}\r\n.sr-only {\r\n  position: absolute;\r\n  width: 1px;\r\n  height: 1px;\r\n  margin: -1px;\r\n  padding: 0;\r\n  overflow: hidden;\r\n  clip: rect(0, 0, 0, 0);\r\n  border: 0;\r\n}\r\n.sr-only-focusable:active,\r\n.sr-only-focusable:focus {\r\n  position: static;\r\n  width: auto;\r\n  height: auto;\r\n  margin: 0;\r\n  overflow: visible;\r\n  clip: auto;\r\n}\r\n[role=\"button\"] {\r\n  cursor: pointer;\r\n}\r\nh1,\r\nh2,\r\nh3,\r\nh4,\r\nh5,\r\nh6,\r\n.h1,\r\n.h2,\r\n.h3,\r\n.h4,\r\n.h5,\r\n.h6 {\r\n  font-family: inherit;\r\n  font-weight: 500;\r\n  line-height: 1.1;\r\n  color: inherit;\r\n}\r\nh1 small,\r\nh2 small,\r\nh3 small,\r\nh4 small,\r\nh5 small,\r\nh6 small,\r\n.h1 small,\r\n.h2 small,\r\n.h3 small,\r\n.h4 small,\r\n.h5 small,\r\n.h6 small,\r\nh1 .small,\r\nh2 .small,\r\nh3 .small,\r\nh4 .small,\r\nh5 .small,\r\nh6 .small,\r\n.h1 .small,\r\n.h2 .small,\r\n.h3 .small,\r\n.h4 .small,\r\n.h5 .small,\r\n.h6 .small {\r\n  font-weight: normal;\r\n  line-height: 1;\r\n  color: #777777;\r\n}\r\nh1,\r\n.h1,\r\nh2,\r\n.h2,\r\nh3,\r\n.h3 {\r\n  margin-top: 18px;\r\n  margin-bottom: 9px;\r\n}\r\nh1 small,\r\n.h1 small,\r\nh2 small,\r\n.h2 small,\r\nh3 small,\r\n.h3 small,\r\nh1 .small,\r\n.h1 .small,\r\nh2 .small,\r\n.h2 .small,\r\nh3 .small,\r\n.h3 .small {\r\n  font-size: 65%;\r\n}\r\nh4,\r\n.h4,\r\nh5,\r\n.h5,\r\nh6,\r\n.h6 {\r\n  margin-top: 9px;\r\n  margin-bottom: 9px;\r\n}\r\nh4 small,\r\n.h4 small,\r\nh5 small,\r\n.h5 small,\r\nh6 small,\r\n.h6 small,\r\nh4 .small,\r\n.h4 .small,\r\nh5 .small,\r\n.h5 .small,\r\nh6 .small,\r\n.h6 .small {\r\n  font-size: 75%;\r\n}\r\nh1,\r\n.h1 {\r\n  font-size: 33px;\r\n}\r\nh2,\r\n.h2 {\r\n  font-size: 27px;\r\n}\r\nh3,\r\n.h3 {\r\n  font-size: 23px;\r\n}\r\nh4,\r\n.h4 {\r\n  font-size: 17px;\r\n}\r\nh5,\r\n.h5 {\r\n  font-size: 13px;\r\n}\r\nh6,\r\n.h6 {\r\n  font-size: 12px;\r\n}\r\np {\r\n  margin: 0 0 9px;\r\n}\r\n.lead {\r\n  margin-bottom: 18px;\r\n  font-size: 14px;\r\n  font-weight: 300;\r\n  line-height: 1.4;\r\n}\r\n@media (min-width: 768px) {\r\n  .lead {\r\n    font-size: 19.5px;\r\n  }\r\n}\r\nsmall,\r\n.small {\r\n  font-size: 92%;\r\n}\r\nmark,\r\n.mark {\r\n  background-color: #fcf8e3;\r\n  padding: .2em;\r\n}\r\n.text-left {\r\n  text-align: left;\r\n}\r\n.text-right {\r\n  text-align: right;\r\n}\r\n.text-center {\r\n  text-align: center;\r\n}\r\n.text-justify {\r\n  text-align: justify;\r\n}\r\n.text-nowrap {\r\n  white-space: nowrap;\r\n}\r\n.text-lowercase {\r\n  text-transform: lowercase;\r\n}\r\n.text-uppercase {\r\n  text-transform: uppercase;\r\n}\r\n.text-capitalize {\r\n  text-transform: capitalize;\r\n}\r\n.text-muted {\r\n  color: #777777;\r\n}\r\n.text-primary {\r\n  color: #337ab7;\r\n}\r\na.text-primary:hover,\r\na.text-primary:focus {\r\n  color: #286090;\r\n}\r\n.text-success {\r\n  color: #3c763d;\r\n}\r\na.text-success:hover,\r\na.text-success:focus {\r\n  color: #2b542c;\r\n}\r\n.text-info {\r\n  color: #31708f;\r\n}\r\na.text-info:hover,\r\na.text-info:focus {\r\n  color: #245269;\r\n}\r\n.text-warning {\r\n  color: #8a6d3b;\r\n}\r\na.text-warning:hover,\r\na.text-warning:focus {\r\n  color: #66512c;\r\n}\r\n.text-danger {\r\n  color: #a94442;\r\n}\r\na.text-danger:hover,\r\na.text-danger:focus {\r\n  color: #843534;\r\n}\r\n.bg-primary {\r\n  color: #fff;\r\n  background-color: #337ab7;\r\n}\r\na.bg-primary:hover,\r\na.bg-primary:focus {\r\n  background-color: #286090;\r\n}\r\n.bg-success {\r\n  background-color: #dff0d8;\r\n}\r\na.bg-success:hover,\r\na.bg-success:focus {\r\n  background-color: #c1e2b3;\r\n}\r\n.bg-info {\r\n  background-color: #d9edf7;\r\n}\r\na.bg-info:hover,\r\na.bg-info:focus {\r\n  background-color: #afd9ee;\r\n}\r\n.bg-warning {\r\n  background-color: #fcf8e3;\r\n}\r\na.bg-warning:hover,\r\na.bg-warning:focus {\r\n  background-color: #f7ecb5;\r\n}\r\n.bg-danger {\r\n  background-color: #f2dede;\r\n}\r\na.bg-danger:hover,\r\na.bg-danger:focus {\r\n  background-color: #e4b9b9;\r\n}\r\n.page-header {\r\n  padding-bottom: 8px;\r\n  margin: 36px 0 18px;\r\n  border-bottom: 1px solid #eeeeee;\r\n}\r\nul,\r\nol {\r\n  margin-top: 0;\r\n  margin-bottom: 9px;\r\n}\r\nul ul,\r\nol ul,\r\nul ol,\r\nol ol {\r\n  margin-bottom: 0;\r\n}\r\n.list-unstyled {\r\n  padding-left: 0;\r\n  list-style: none;\r\n}\r\n.list-inline {\r\n  padding-left: 0;\r\n  list-style: none;\r\n  margin-left: -5px;\r\n}\r\n.list-inline > li {\r\n  display: inline-block;\r\n  padding-left: 5px;\r\n  padding-right: 5px;\r\n}\r\ndl {\r\n  margin-top: 0;\r\n  margin-bottom: 18px;\r\n}\r\ndt,\r\ndd {\r\n  line-height: 1.42857143;\r\n}\r\ndt {\r\n  font-weight: bold;\r\n}\r\ndd {\r\n  margin-left: 0;\r\n}\r\n@media (min-width: 541px) {\r\n  .dl-horizontal dt {\r\n    float: left;\r\n    width: 160px;\r\n    clear: left;\r\n    text-align: right;\r\n    overflow: hidden;\r\n    text-overflow: ellipsis;\r\n    white-space: nowrap;\r\n  }\r\n  .dl-horizontal dd {\r\n    margin-left: 180px;\r\n  }\r\n}\r\nabbr[title],\r\nabbr[data-original-title] {\r\n  cursor: help;\r\n  border-bottom: 1px dotted #777777;\r\n}\r\n.initialism {\r\n  font-size: 90%;\r\n  text-transform: uppercase;\r\n}\r\nblockquote {\r\n  padding: 9px 18px;\r\n  margin: 0 0 18px;\r\n  font-size: inherit;\r\n  border-left: 5px solid #eeeeee;\r\n}\r\nblockquote p:last-child,\r\nblockquote ul:last-child,\r\nblockquote ol:last-child {\r\n  margin-bottom: 0;\r\n}\r\nblockquote footer,\r\nblockquote small,\r\nblockquote .small {\r\n  display: block;\r\n  font-size: 80%;\r\n  line-height: 1.42857143;\r\n  color: #777777;\r\n}\r\nblockquote footer:before,\r\nblockquote small:before,\r\nblockquote .small:before {\r\n  content: '\\2014 \\00A0';\r\n}\r\n.blockquote-reverse,\r\nblockquote.pull-right {\r\n  padding-right: 15px;\r\n  padding-left: 0;\r\n  border-right: 5px solid #eeeeee;\r\n  border-left: 0;\r\n  text-align: right;\r\n}\r\n.blockquote-reverse footer:before,\r\nblockquote.pull-right footer:before,\r\n.blockquote-reverse small:before,\r\nblockquote.pull-right small:before,\r\n.blockquote-reverse .small:before,\r\nblockquote.pull-right .small:before {\r\n  content: '';\r\n}\r\n.blockquote-reverse footer:after,\r\nblockquote.pull-right footer:after,\r\n.blockquote-reverse small:after,\r\nblockquote.pull-right small:after,\r\n.blockquote-reverse .small:after,\r\nblockquote.pull-right .small:after {\r\n  content: '\\00A0 \\2014';\r\n}\r\naddress {\r\n  margin-bottom: 18px;\r\n  font-style: normal;\r\n  line-height: 1.42857143;\r\n}\r\ncode,\r\nkbd,\r\npre,\r\nsamp {\r\n  font-family: monospace;\r\n}\r\ncode {\r\n  padding: 2px 4px;\r\n  font-size: 90%;\r\n  color: #c7254e;\r\n  background-color: #f9f2f4;\r\n  border-radius: 2px;\r\n}\r\nkbd {\r\n  padding: 2px 4px;\r\n  font-size: 90%;\r\n  color: #888;\r\n  background-color: transparent;\r\n  border-radius: 1px;\r\n  box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.25);\r\n}\r\nkbd kbd {\r\n  padding: 0;\r\n  font-size: 100%;\r\n  font-weight: bold;\r\n  box-shadow: none;\r\n}\r\npre {\r\n  display: block;\r\n  padding: 8.5px;\r\n  margin: 0 0 9px;\r\n  font-size: 12px;\r\n  line-height: 1.42857143;\r\n  word-break: break-all;\r\n  word-wrap: break-word;\r\n  color: #333333;\r\n  background-color: #f5f5f5;\r\n  border: 1px solid #ccc;\r\n  border-radius: 2px;\r\n}\r\npre code {\r\n  padding: 0;\r\n  font-size: inherit;\r\n  color: inherit;\r\n  white-space: pre-wrap;\r\n  background-color: transparent;\r\n  border-radius: 0;\r\n}\r\n.pre-scrollable {\r\n  max-height: 340px;\r\n  overflow-y: scroll;\r\n}\r\n.container {\r\n  margin-right: auto;\r\n  margin-left: auto;\r\n  padding-left: 0px;\r\n  padding-right: 0px;\r\n}\r\n@media (min-width: 768px) {\r\n  .container {\r\n    width: 768px;\r\n  }\r\n}\r\n@media (min-width: 992px) {\r\n  .container {\r\n    width: 940px;\r\n  }\r\n}\r\n@media (min-width: 1200px) {\r\n  .container {\r\n    width: 1140px;\r\n  }\r\n}\r\n.container-fluid {\r\n  margin-right: auto;\r\n  margin-left: auto;\r\n  padding-left: 0px;\r\n  padding-right: 0px;\r\n}\r\n.row {\r\n  margin-left: 0px;\r\n  margin-right: 0px;\r\n}\r\n.col-xs-1, .col-sm-1, .col-md-1, .col-lg-1, .col-xs-2, .col-sm-2, .col-md-2, .col-lg-2, .col-xs-3, .col-sm-3, .col-md-3, .col-lg-3, .col-xs-4, .col-sm-4, .col-md-4, .col-lg-4, .col-xs-5, .col-sm-5, .col-md-5, .col-lg-5, .col-xs-6, .col-sm-6, .col-md-6, .col-lg-6, .col-xs-7, .col-sm-7, .col-md-7, .col-lg-7, .col-xs-8, .col-sm-8, .col-md-8, .col-lg-8, .col-xs-9, .col-sm-9, .col-md-9, .col-lg-9, .col-xs-10, .col-sm-10, .col-md-10, .col-lg-10, .col-xs-11, .col-sm-11, .col-md-11, .col-lg-11, .col-xs-12, .col-sm-12, .col-md-12, .col-lg-12 {\r\n  position: relative;\r\n  min-height: 1px;\r\n  padding-left: 0px;\r\n  padding-right: 0px;\r\n}\r\n.col-xs-1, .col-xs-2, .col-xs-3, .col-xs-4, .col-xs-5, .col-xs-6, .col-xs-7, .col-xs-8, .col-xs-9, .col-xs-10, .col-xs-11, .col-xs-12 {\r\n  float: left;\r\n}\r\n.col-xs-12 {\r\n  width: 100%;\r\n}\r\n.col-xs-11 {\r\n  width: 91.66666667%;\r\n}\r\n.col-xs-10 {\r\n  width: 83.33333333%;\r\n}\r\n.col-xs-9 {\r\n  width: 75%;\r\n}\r\n.col-xs-8 {\r\n  width: 66.66666667%;\r\n}\r\n.col-xs-7 {\r\n  width: 58.33333333%;\r\n}\r\n.col-xs-6 {\r\n  width: 50%;\r\n}\r\n.col-xs-5 {\r\n  width: 41.66666667%;\r\n}\r\n.col-xs-4 {\r\n  width: 33.33333333%;\r\n}\r\n.col-xs-3 {\r\n  width: 25%;\r\n}\r\n.col-xs-2 {\r\n  width: 16.66666667%;\r\n}\r\n.col-xs-1 {\r\n  width: 8.33333333%;\r\n}\r\n.col-xs-pull-12 {\r\n  right: 100%;\r\n}\r\n.col-xs-pull-11 {\r\n  right: 91.66666667%;\r\n}\r\n.col-xs-pull-10 {\r\n  right: 83.33333333%;\r\n}\r\n.col-xs-pull-9 {\r\n  right: 75%;\r\n}\r\n.col-xs-pull-8 {\r\n  right: 66.66666667%;\r\n}\r\n.col-xs-pull-7 {\r\n  right: 58.33333333%;\r\n}\r\n.col-xs-pull-6 {\r\n  right: 50%;\r\n}\r\n.col-xs-pull-5 {\r\n  right: 41.66666667%;\r\n}\r\n.col-xs-pull-4 {\r\n  right: 33.33333333%;\r\n}\r\n.col-xs-pull-3 {\r\n  right: 25%;\r\n}\r\n.col-xs-pull-2 {\r\n  right: 16.66666667%;\r\n}\r\n.col-xs-pull-1 {\r\n  right: 8.33333333%;\r\n}\r\n.col-xs-pull-0 {\r\n  right: auto;\r\n}\r\n.col-xs-push-12 {\r\n  left: 100%;\r\n}\r\n.col-xs-push-11 {\r\n  left: 91.66666667%;\r\n}\r\n.col-xs-push-10 {\r\n  left: 83.33333333%;\r\n}\r\n.col-xs-push-9 {\r\n  left: 75%;\r\n}\r\n.col-xs-push-8 {\r\n  left: 66.66666667%;\r\n}\r\n.col-xs-push-7 {\r\n  left: 58.33333333%;\r\n}\r\n.col-xs-push-6 {\r\n  left: 50%;\r\n}\r\n.col-xs-push-5 {\r\n  left: 41.66666667%;\r\n}\r\n.col-xs-push-4 {\r\n  left: 33.33333333%;\r\n}\r\n.col-xs-push-3 {\r\n  left: 25%;\r\n}\r\n.col-xs-push-2 {\r\n  left: 16.66666667%;\r\n}\r\n.col-xs-push-1 {\r\n  left: 8.33333333%;\r\n}\r\n.col-xs-push-0 {\r\n  left: auto;\r\n}\r\n.col-xs-offset-12 {\r\n  margin-left: 100%;\r\n}\r\n.col-xs-offset-11 {\r\n  margin-left: 91.66666667%;\r\n}\r\n.col-xs-offset-10 {\r\n  margin-left: 83.33333333%;\r\n}\r\n.col-xs-offset-9 {\r\n  margin-left: 75%;\r\n}\r\n.col-xs-offset-8 {\r\n  margin-left: 66.66666667%;\r\n}\r\n.col-xs-offset-7 {\r\n  margin-left: 58.33333333%;\r\n}\r\n.col-xs-offset-6 {\r\n  margin-left: 50%;\r\n}\r\n.col-xs-offset-5 {\r\n  margin-left: 41.66666667%;\r\n}\r\n.col-xs-offset-4 {\r\n  margin-left: 33.33333333%;\r\n}\r\n.col-xs-offset-3 {\r\n  margin-left: 25%;\r\n}\r\n.col-xs-offset-2 {\r\n  margin-left: 16.66666667%;\r\n}\r\n.col-xs-offset-1 {\r\n  margin-left: 8.33333333%;\r\n}\r\n.col-xs-offset-0 {\r\n  margin-left: 0%;\r\n}\r\n@media (min-width: 768px) {\r\n  .col-sm-1, .col-sm-2, .col-sm-3, .col-sm-4, .col-sm-5, .col-sm-6, .col-sm-7, .col-sm-8, .col-sm-9, .col-sm-10, .col-sm-11, .col-sm-12 {\r\n    float: left;\r\n  }\r\n  .col-sm-12 {\r\n    width: 100%;\r\n  }\r\n  .col-sm-11 {\r\n    width: 91.66666667%;\r\n  }\r\n  .col-sm-10 {\r\n    width: 83.33333333%;\r\n  }\r\n  .col-sm-9 {\r\n    width: 75%;\r\n  }\r\n  .col-sm-8 {\r\n    width: 66.66666667%;\r\n  }\r\n  .col-sm-7 {\r\n    width: 58.33333333%;\r\n  }\r\n  .col-sm-6 {\r\n    width: 50%;\r\n  }\r\n  .col-sm-5 {\r\n    width: 41.66666667%;\r\n  }\r\n  .col-sm-4 {\r\n    width: 33.33333333%;\r\n  }\r\n  .col-sm-3 {\r\n    width: 25%;\r\n  }\r\n  .col-sm-2 {\r\n    width: 16.66666667%;\r\n  }\r\n  .col-sm-1 {\r\n    width: 8.33333333%;\r\n  }\r\n  .col-sm-pull-12 {\r\n    right: 100%;\r\n  }\r\n  .col-sm-pull-11 {\r\n    right: 91.66666667%;\r\n  }\r\n  .col-sm-pull-10 {\r\n    right: 83.33333333%;\r\n  }\r\n  .col-sm-pull-9 {\r\n    right: 75%;\r\n  }\r\n  .col-sm-pull-8 {\r\n    right: 66.66666667%;\r\n  }\r\n  .col-sm-pull-7 {\r\n    right: 58.33333333%;\r\n  }\r\n  .col-sm-pull-6 {\r\n    right: 50%;\r\n  }\r\n  .col-sm-pull-5 {\r\n    right: 41.66666667%;\r\n  }\r\n  .col-sm-pull-4 {\r\n    right: 33.33333333%;\r\n  }\r\n  .col-sm-pull-3 {\r\n    right: 25%;\r\n  }\r\n  .col-sm-pull-2 {\r\n    right: 16.66666667%;\r\n  }\r\n  .col-sm-pull-1 {\r\n    right: 8.33333333%;\r\n  }\r\n  .col-sm-pull-0 {\r\n    right: auto;\r\n  }\r\n  .col-sm-push-12 {\r\n    left: 100%;\r\n  }\r\n  .col-sm-push-11 {\r\n    left: 91.66666667%;\r\n  }\r\n  .col-sm-push-10 {\r\n    left: 83.33333333%;\r\n  }\r\n  .col-sm-push-9 {\r\n    left: 75%;\r\n  }\r\n  .col-sm-push-8 {\r\n    left: 66.66666667%;\r\n  }\r\n  .col-sm-push-7 {\r\n    left: 58.33333333%;\r\n  }\r\n  .col-sm-push-6 {\r\n    left: 50%;\r\n  }\r\n  .col-sm-push-5 {\r\n    left: 41.66666667%;\r\n  }\r\n  .col-sm-push-4 {\r\n    left: 33.33333333%;\r\n  }\r\n  .col-sm-push-3 {\r\n    left: 25%;\r\n  }\r\n  .col-sm-push-2 {\r\n    left: 16.66666667%;\r\n  }\r\n  .col-sm-push-1 {\r\n    left: 8.33333333%;\r\n  }\r\n  .col-sm-push-0 {\r\n    left: auto;\r\n  }\r\n  .col-sm-offset-12 {\r\n    margin-left: 100%;\r\n  }\r\n  .col-sm-offset-11 {\r\n    margin-left: 91.66666667%;\r\n  }\r\n  .col-sm-offset-10 {\r\n    margin-left: 83.33333333%;\r\n  }\r\n  .col-sm-offset-9 {\r\n    margin-left: 75%;\r\n  }\r\n  .col-sm-offset-8 {\r\n    margin-left: 66.66666667%;\r\n  }\r\n  .col-sm-offset-7 {\r\n    margin-left: 58.33333333%;\r\n  }\r\n  .col-sm-offset-6 {\r\n    margin-left: 50%;\r\n  }\r\n  .col-sm-offset-5 {\r\n    margin-left: 41.66666667%;\r\n  }\r\n  .col-sm-offset-4 {\r\n    margin-left: 33.33333333%;\r\n  }\r\n  .col-sm-offset-3 {\r\n    margin-left: 25%;\r\n  }\r\n  .col-sm-offset-2 {\r\n    margin-left: 16.66666667%;\r\n  }\r\n  .col-sm-offset-1 {\r\n    margin-left: 8.33333333%;\r\n  }\r\n  .col-sm-offset-0 {\r\n    margin-left: 0%;\r\n  }\r\n}\r\n@media (min-width: 992px) {\r\n  .col-md-1, .col-md-2, .col-md-3, .col-md-4, .col-md-5, .col-md-6, .col-md-7, .col-md-8, .col-md-9, .col-md-10, .col-md-11, .col-md-12 {\r\n    float: left;\r\n  }\r\n  .col-md-12 {\r\n    width: 100%;\r\n  }\r\n  .col-md-11 {\r\n    width: 91.66666667%;\r\n  }\r\n  .col-md-10 {\r\n    width: 83.33333333%;\r\n  }\r\n  .col-md-9 {\r\n    width: 75%;\r\n  }\r\n  .col-md-8 {\r\n    width: 66.66666667%;\r\n  }\r\n  .col-md-7 {\r\n    width: 58.33333333%;\r\n  }\r\n  .col-md-6 {\r\n    width: 50%;\r\n  }\r\n  .col-md-5 {\r\n    width: 41.66666667%;\r\n  }\r\n  .col-md-4 {\r\n    width: 33.33333333%;\r\n  }\r\n  .col-md-3 {\r\n    width: 25%;\r\n  }\r\n  .col-md-2 {\r\n    width: 16.66666667%;\r\n  }\r\n  .col-md-1 {\r\n    width: 8.33333333%;\r\n  }\r\n  .col-md-pull-12 {\r\n    right: 100%;\r\n  }\r\n  .col-md-pull-11 {\r\n    right: 91.66666667%;\r\n  }\r\n  .col-md-pull-10 {\r\n    right: 83.33333333%;\r\n  }\r\n  .col-md-pull-9 {\r\n    right: 75%;\r\n  }\r\n  .col-md-pull-8 {\r\n    right: 66.66666667%;\r\n  }\r\n  .col-md-pull-7 {\r\n    right: 58.33333333%;\r\n  }\r\n  .col-md-pull-6 {\r\n    right: 50%;\r\n  }\r\n  .col-md-pull-5 {\r\n    right: 41.66666667%;\r\n  }\r\n  .col-md-pull-4 {\r\n    right: 33.33333333%;\r\n  }\r\n  .col-md-pull-3 {\r\n    right: 25%;\r\n  }\r\n  .col-md-pull-2 {\r\n    right: 16.66666667%;\r\n  }\r\n  .col-md-pull-1 {\r\n    right: 8.33333333%;\r\n  }\r\n  .col-md-pull-0 {\r\n    right: auto;\r\n  }\r\n  .col-md-push-12 {\r\n    left: 100%;\r\n  }\r\n  .col-md-push-11 {\r\n    left: 91.66666667%;\r\n  }\r\n  .col-md-push-10 {\r\n    left: 83.33333333%;\r\n  }\r\n  .col-md-push-9 {\r\n    left: 75%;\r\n  }\r\n  .col-md-push-8 {\r\n    left: 66.66666667%;\r\n  }\r\n  .col-md-push-7 {\r\n    left: 58.33333333%;\r\n  }\r\n  .col-md-push-6 {\r\n    left: 50%;\r\n  }\r\n  .col-md-push-5 {\r\n    left: 41.66666667%;\r\n  }\r\n  .col-md-push-4 {\r\n    left: 33.33333333%;\r\n  }\r\n  .col-md-push-3 {\r\n    left: 25%;\r\n  }\r\n  .col-md-push-2 {\r\n    left: 16.66666667%;\r\n  }\r\n  .col-md-push-1 {\r\n    left: 8.33333333%;\r\n  }\r\n  .col-md-push-0 {\r\n    left: auto;\r\n  }\r\n  .col-md-offset-12 {\r\n    margin-left: 100%;\r\n  }\r\n  .col-md-offset-11 {\r\n    margin-left: 91.66666667%;\r\n  }\r\n  .col-md-offset-10 {\r\n    margin-left: 83.33333333%;\r\n  }\r\n  .col-md-offset-9 {\r\n    margin-left: 75%;\r\n  }\r\n  .col-md-offset-8 {\r\n    margin-left: 66.66666667%;\r\n  }\r\n  .col-md-offset-7 {\r\n    margin-left: 58.33333333%;\r\n  }\r\n  .col-md-offset-6 {\r\n    margin-left: 50%;\r\n  }\r\n  .col-md-offset-5 {\r\n    margin-left: 41.66666667%;\r\n  }\r\n  .col-md-offset-4 {\r\n    margin-left: 33.33333333%;\r\n  }\r\n  .col-md-offset-3 {\r\n    margin-left: 25%;\r\n  }\r\n  .col-md-offset-2 {\r\n    margin-left: 16.66666667%;\r\n  }\r\n  .col-md-offset-1 {\r\n    margin-left: 8.33333333%;\r\n  }\r\n  .col-md-offset-0 {\r\n    margin-left: 0%;\r\n  }\r\n}\r\n@media (min-width: 1200px) {\r\n  .col-lg-1, .col-lg-2, .col-lg-3, .col-lg-4, .col-lg-5, .col-lg-6, .col-lg-7, .col-lg-8, .col-lg-9, .col-lg-10, .col-lg-11, .col-lg-12 {\r\n    float: left;\r\n  }\r\n  .col-lg-12 {\r\n    width: 100%;\r\n  }\r\n  .col-lg-11 {\r\n    width: 91.66666667%;\r\n  }\r\n  .col-lg-10 {\r\n    width: 83.33333333%;\r\n  }\r\n  .col-lg-9 {\r\n    width: 75%;\r\n  }\r\n  .col-lg-8 {\r\n    width: 66.66666667%;\r\n  }\r\n  .col-lg-7 {\r\n    width: 58.33333333%;\r\n  }\r\n  .col-lg-6 {\r\n    width: 50%;\r\n  }\r\n  .col-lg-5 {\r\n    width: 41.66666667%;\r\n  }\r\n  .col-lg-4 {\r\n    width: 33.33333333%;\r\n  }\r\n  .col-lg-3 {\r\n    width: 25%;\r\n  }\r\n  .col-lg-2 {\r\n    width: 16.66666667%;\r\n  }\r\n  .col-lg-1 {\r\n    width: 8.33333333%;\r\n  }\r\n  .col-lg-pull-12 {\r\n    right: 100%;\r\n  }\r\n  .col-lg-pull-11 {\r\n    right: 91.66666667%;\r\n  }\r\n  .col-lg-pull-10 {\r\n    right: 83.33333333%;\r\n  }\r\n  .col-lg-pull-9 {\r\n    right: 75%;\r\n  }\r\n  .col-lg-pull-8 {\r\n    right: 66.66666667%;\r\n  }\r\n  .col-lg-pull-7 {\r\n    right: 58.33333333%;\r\n  }\r\n  .col-lg-pull-6 {\r\n    right: 50%;\r\n  }\r\n  .col-lg-pull-5 {\r\n    right: 41.66666667%;\r\n  }\r\n  .col-lg-pull-4 {\r\n    right: 33.33333333%;\r\n  }\r\n  .col-lg-pull-3 {\r\n    right: 25%;\r\n  }\r\n  .col-lg-pull-2 {\r\n    right: 16.66666667%;\r\n  }\r\n  .col-lg-pull-1 {\r\n    right: 8.33333333%;\r\n  }\r\n  .col-lg-pull-0 {\r\n    right: auto;\r\n  }\r\n  .col-lg-push-12 {\r\n    left: 100%;\r\n  }\r\n  .col-lg-push-11 {\r\n    left: 91.66666667%;\r\n  }\r\n  .col-lg-push-10 {\r\n    left: 83.33333333%;\r\n  }\r\n  .col-lg-push-9 {\r\n    left: 75%;\r\n  }\r\n  .col-lg-push-8 {\r\n    left: 66.66666667%;\r\n  }\r\n  .col-lg-push-7 {\r\n    left: 58.33333333%;\r\n  }\r\n  .col-lg-push-6 {\r\n    left: 50%;\r\n  }\r\n  .col-lg-push-5 {\r\n    left: 41.66666667%;\r\n  }\r\n  .col-lg-push-4 {\r\n    left: 33.33333333%;\r\n  }\r\n  .col-lg-push-3 {\r\n    left: 25%;\r\n  }\r\n  .col-lg-push-2 {\r\n    left: 16.66666667%;\r\n  }\r\n  .col-lg-push-1 {\r\n    left: 8.33333333%;\r\n  }\r\n  .col-lg-push-0 {\r\n    left: auto;\r\n  }\r\n  .col-lg-offset-12 {\r\n    margin-left: 100%;\r\n  }\r\n  .col-lg-offset-11 {\r\n    margin-left: 91.66666667%;\r\n  }\r\n  .col-lg-offset-10 {\r\n    margin-left: 83.33333333%;\r\n  }\r\n  .col-lg-offset-9 {\r\n    margin-left: 75%;\r\n  }\r\n  .col-lg-offset-8 {\r\n    margin-left: 66.66666667%;\r\n  }\r\n  .col-lg-offset-7 {\r\n    margin-left: 58.33333333%;\r\n  }\r\n  .col-lg-offset-6 {\r\n    margin-left: 50%;\r\n  }\r\n  .col-lg-offset-5 {\r\n    margin-left: 41.66666667%;\r\n  }\r\n  .col-lg-offset-4 {\r\n    margin-left: 33.33333333%;\r\n  }\r\n  .col-lg-offset-3 {\r\n    margin-left: 25%;\r\n  }\r\n  .col-lg-offset-2 {\r\n    margin-left: 16.66666667%;\r\n  }\r\n  .col-lg-offset-1 {\r\n    margin-left: 8.33333333%;\r\n  }\r\n  .col-lg-offset-0 {\r\n    margin-left: 0%;\r\n  }\r\n}\r\ntable {\r\n  background-color: transparent;\r\n}\r\ncaption {\r\n  padding-top: 8px;\r\n  padding-bottom: 8px;\r\n  color: #777777;\r\n  text-align: left;\r\n}\r\nth {\r\n  text-align: left;\r\n}\r\n.table {\r\n  width: 100%;\r\n  max-width: 100%;\r\n  margin-bottom: 18px;\r\n}\r\n.table > thead > tr > th,\r\n.table > tbody > tr > th,\r\n.table > tfoot > tr > th,\r\n.table > thead > tr > td,\r\n.table > tbody > tr > td,\r\n.table > tfoot > tr > td {\r\n  padding: 8px;\r\n  line-height: 1.42857143;\r\n  vertical-align: top;\r\n  border-top: 1px solid #ddd;\r\n}\r\n.table > thead > tr > th {\r\n  vertical-align: bottom;\r\n  border-bottom: 2px solid #ddd;\r\n}\r\n.table > caption + thead > tr:first-child > th,\r\n.table > colgroup + thead > tr:first-child > th,\r\n.table > thead:first-child > tr:first-child > th,\r\n.table > caption + thead > tr:first-child > td,\r\n.table > colgroup + thead > tr:first-child > td,\r\n.table > thead:first-child > tr:first-child > td {\r\n  border-top: 0;\r\n}\r\n.table > tbody + tbody {\r\n  border-top: 2px solid #ddd;\r\n}\r\n.table .table {\r\n  background-color: #fff;\r\n}\r\n.table-condensed > thead > tr > th,\r\n.table-condensed > tbody > tr > th,\r\n.table-condensed > tfoot > tr > th,\r\n.table-condensed > thead > tr > td,\r\n.table-condensed > tbody > tr > td,\r\n.table-condensed > tfoot > tr > td {\r\n  padding: 5px;\r\n}\r\n.table-bordered {\r\n  border: 1px solid #ddd;\r\n}\r\n.table-bordered > thead > tr > th,\r\n.table-bordered > tbody > tr > th,\r\n.table-bordered > tfoot > tr > th,\r\n.table-bordered > thead > tr > td,\r\n.table-bordered > tbody > tr > td,\r\n.table-bordered > tfoot > tr > td {\r\n  border: 1px solid #ddd;\r\n}\r\n.table-bordered > thead > tr > th,\r\n.table-bordered > thead > tr > td {\r\n  border-bottom-width: 2px;\r\n}\r\n.table-striped > tbody > tr:nth-of-type(odd) {\r\n  background-color: #f9f9f9;\r\n}\r\n.table-hover > tbody > tr:hover {\r\n  background-color: #f5f5f5;\r\n}\r\ntable col[class*=\"col-\"] {\r\n  position: static;\r\n  float: none;\r\n  display: table-column;\r\n}\r\ntable td[class*=\"col-\"],\r\ntable th[class*=\"col-\"] {\r\n  position: static;\r\n  float: none;\r\n  display: table-cell;\r\n}\r\n.table > thead > tr > td.active,\r\n.table > tbody > tr > td.active,\r\n.table > tfoot > tr > td.active,\r\n.table > thead > tr > th.active,\r\n.table > tbody > tr > th.active,\r\n.table > tfoot > tr > th.active,\r\n.table > thead > tr.active > td,\r\n.table > tbody > tr.active > td,\r\n.table > tfoot > tr.active > td,\r\n.table > thead > tr.active > th,\r\n.table > tbody > tr.active > th,\r\n.table > tfoot > tr.active > th {\r\n  background-color: #f5f5f5;\r\n}\r\n.table-hover > tbody > tr > td.active:hover,\r\n.table-hover > tbody > tr > th.active:hover,\r\n.table-hover > tbody > tr.active:hover > td,\r\n.table-hover > tbody > tr:hover > .active,\r\n.table-hover > tbody > tr.active:hover > th {\r\n  background-color: #e8e8e8;\r\n}\r\n.table > thead > tr > td.success,\r\n.table > tbody > tr > td.success,\r\n.table > tfoot > tr > td.success,\r\n.table > thead > tr > th.success,\r\n.table > tbody > tr > th.success,\r\n.table > tfoot > tr > th.success,\r\n.table > thead > tr.success > td,\r\n.table > tbody > tr.success > td,\r\n.table > tfoot > tr.success > td,\r\n.table > thead > tr.success > th,\r\n.table > tbody > tr.success > th,\r\n.table > tfoot > tr.success > th {\r\n  background-color: #dff0d8;\r\n}\r\n.table-hover > tbody > tr > td.success:hover,\r\n.table-hover > tbody > tr > th.success:hover,\r\n.table-hover > tbody > tr.success:hover > td,\r\n.table-hover > tbody > tr:hover > .success,\r\n.table-hover > tbody > tr.success:hover > th {\r\n  background-color: #d0e9c6;\r\n}\r\n.table > thead > tr > td.info,\r\n.table > tbody > tr > td.info,\r\n.table > tfoot > tr > td.info,\r\n.table > thead > tr > th.info,\r\n.table > tbody > tr > th.info,\r\n.table > tfoot > tr > th.info,\r\n.table > thead > tr.info > td,\r\n.table > tbody > tr.info > td,\r\n.table > tfoot > tr.info > td,\r\n.table > thead > tr.info > th,\r\n.table > tbody > tr.info > th,\r\n.table > tfoot > tr.info > th {\r\n  background-color: #d9edf7;\r\n}\r\n.table-hover > tbody > tr > td.info:hover,\r\n.table-hover > tbody > tr > th.info:hover,\r\n.table-hover > tbody > tr.info:hover > td,\r\n.table-hover > tbody > tr:hover > .info,\r\n.table-hover > tbody > tr.info:hover > th {\r\n  background-color: #c4e3f3;\r\n}\r\n.table > thead > tr > td.warning,\r\n.table > tbody > tr > td.warning,\r\n.table > tfoot > tr > td.warning,\r\n.table > thead > tr > th.warning,\r\n.table > tbody > tr > th.warning,\r\n.table > tfoot > tr > th.warning,\r\n.table > thead > tr.warning > td,\r\n.table > tbody > tr.warning > td,\r\n.table > tfoot > tr.warning > td,\r\n.table > thead > tr.warning > th,\r\n.table > tbody > tr.warning > th,\r\n.table > tfoot > tr.warning > th {\r\n  background-color: #fcf8e3;\r\n}\r\n.table-hover > tbody > tr > td.warning:hover,\r\n.table-hover > tbody > tr > th.warning:hover,\r\n.table-hover > tbody > tr.warning:hover > td,\r\n.table-hover > tbody > tr:hover > .warning,\r\n.table-hover > tbody > tr.warning:hover > th {\r\n  background-color: #faf2cc;\r\n}\r\n.table > thead > tr > td.danger,\r\n.table > tbody > tr > td.danger,\r\n.table > tfoot > tr > td.danger,\r\n.table > thead > tr > th.danger,\r\n.table > tbody > tr > th.danger,\r\n.table > tfoot > tr > th.danger,\r\n.table > thead > tr.danger > td,\r\n.table > tbody > tr.danger > td,\r\n.table > tfoot > tr.danger > td,\r\n.table > thead > tr.danger > th,\r\n.table > tbody > tr.danger > th,\r\n.table > tfoot > tr.danger > th {\r\n  background-color: #f2dede;\r\n}\r\n.table-hover > tbody > tr > td.danger:hover,\r\n.table-hover > tbody > tr > th.danger:hover,\r\n.table-hover > tbody > tr.danger:hover > td,\r\n.table-hover > tbody > tr:hover > .danger,\r\n.table-hover > tbody > tr.danger:hover > th {\r\n  background-color: #ebcccc;\r\n}\r\n.table-responsive {\r\n  overflow-x: auto;\r\n  min-height: 0.01%;\r\n}\r\n@media screen and (max-width: 767px) {\r\n  .table-responsive {\r\n    width: 100%;\r\n    margin-bottom: 13.5px;\r\n    overflow-y: hidden;\r\n    -ms-overflow-style: -ms-autohiding-scrollbar;\r\n    border: 1px solid #ddd;\r\n  }\r\n  .table-responsive > .table {\r\n    margin-bottom: 0;\r\n  }\r\n  .table-responsive > .table > thead > tr > th,\r\n  .table-responsive > .table > tbody > tr > th,\r\n  .table-responsive > .table > tfoot > tr > th,\r\n  .table-responsive > .table > thead > tr > td,\r\n  .table-responsive > .table > tbody > tr > td,\r\n  .table-responsive > .table > tfoot > tr > td {\r\n    white-space: nowrap;\r\n  }\r\n  .table-responsive > .table-bordered {\r\n    border: 0;\r\n  }\r\n  .table-responsive > .table-bordered > thead > tr > th:first-child,\r\n  .table-responsive > .table-bordered > tbody > tr > th:first-child,\r\n  .table-responsive > .table-bordered > tfoot > tr > th:first-child,\r\n  .table-responsive > .table-bordered > thead > tr > td:first-child,\r\n  .table-responsive > .table-bordered > tbody > tr > td:first-child,\r\n  .table-responsive > .table-bordered > tfoot > tr > td:first-child {\r\n    border-left: 0;\r\n  }\r\n  .table-responsive > .table-bordered > thead > tr > th:last-child,\r\n  .table-responsive > .table-bordered > tbody > tr > th:last-child,\r\n  .table-responsive > .table-bordered > tfoot > tr > th:last-child,\r\n  .table-responsive > .table-bordered > thead > tr > td:last-child,\r\n  .table-responsive > .table-bordered > tbody > tr > td:last-child,\r\n  .table-responsive > .table-bordered > tfoot > tr > td:last-child {\r\n    border-right: 0;\r\n  }\r\n  .table-responsive > .table-bordered > tbody > tr:last-child > th,\r\n  .table-responsive > .table-bordered > tfoot > tr:last-child > th,\r\n  .table-responsive > .table-bordered > tbody > tr:last-child > td,\r\n  .table-responsive > .table-bordered > tfoot > tr:last-child > td {\r\n    border-bottom: 0;\r\n  }\r\n}\r\nfieldset {\r\n  padding: 0;\r\n  margin: 0;\r\n  border: 0;\r\n  min-width: 0;\r\n}\r\nlegend {\r\n  display: block;\r\n  width: 100%;\r\n  padding: 0;\r\n  margin-bottom: 18px;\r\n  font-size: 19.5px;\r\n  line-height: inherit;\r\n  color: #333333;\r\n  border: 0;\r\n  border-bottom: 1px solid #e5e5e5;\r\n}\r\nlabel {\r\n  display: inline-block;\r\n  max-width: 100%;\r\n  margin-bottom: 5px;\r\n  font-weight: bold;\r\n}\r\ninput[type=\"search\"] {\r\n  -webkit-box-sizing: border-box;\r\n  -moz-box-sizing: border-box;\r\n  box-sizing: border-box;\r\n}\r\ninput[type=\"radio\"],\r\ninput[type=\"checkbox\"] {\r\n  margin: 4px 0 0;\r\n  margin-top: 1px \\9;\r\n  line-height: normal;\r\n}\r\ninput[type=\"file\"] {\r\n  display: block;\r\n}\r\ninput[type=\"range\"] {\r\n  display: block;\r\n  width: 100%;\r\n}\r\nselect[multiple],\r\nselect[size] {\r\n  height: auto;\r\n}\r\ninput[type=\"file\"]:focus,\r\ninput[type=\"radio\"]:focus,\r\ninput[type=\"checkbox\"]:focus {\r\n  outline: 5px auto -webkit-focus-ring-color;\r\n  outline-offset: -2px;\r\n}\r\noutput {\r\n  display: block;\r\n  padding-top: 7px;\r\n  font-size: 13px;\r\n  line-height: 1.42857143;\r\n  color: #555555;\r\n}\r\n.form-control {\r\n  display: block;\r\n  width: 100%;\r\n  height: 32px;\r\n  padding: 6px 12px;\r\n  font-size: 13px;\r\n  line-height: 1.42857143;\r\n  color: #555555;\r\n  background-color: #fff;\r\n  background-image: none;\r\n  border: 1px solid #ccc;\r\n  border-radius: 2px;\r\n  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\r\n  box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\r\n  -webkit-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;\r\n  -o-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;\r\n  transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;\r\n}\r\n.form-control:focus {\r\n  border-color: #66afe9;\r\n  outline: 0;\r\n  -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, 0.6);\r\n  box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, 0.6);\r\n}\r\n.form-control::-moz-placeholder {\r\n  color: #999;\r\n  opacity: 1;\r\n}\r\n.form-control:-ms-input-placeholder {\r\n  color: #999;\r\n}\r\n.form-control::-webkit-input-placeholder {\r\n  color: #999;\r\n}\r\n.form-control::-ms-expand {\r\n  border: 0;\r\n  background-color: transparent;\r\n}\r\n.form-control[disabled],\r\n.form-control[readonly],\r\nfieldset[disabled] .form-control {\r\n  background-color: #eeeeee;\r\n  opacity: 1;\r\n}\r\n.form-control[disabled],\r\nfieldset[disabled] .form-control {\r\n  cursor: not-allowed;\r\n}\r\ntextarea.form-control {\r\n  height: auto;\r\n}\r\ninput[type=\"search\"] {\r\n  -webkit-appearance: none;\r\n}\r\n@media screen and (-webkit-min-device-pixel-ratio: 0) {\r\n  input[type=\"date\"].form-control,\r\n  input[type=\"time\"].form-control,\r\n  input[type=\"datetime-local\"].form-control,\r\n  input[type=\"month\"].form-control {\r\n    line-height: 32px;\r\n  }\r\n  input[type=\"date\"].input-sm,\r\n  input[type=\"time\"].input-sm,\r\n  input[type=\"datetime-local\"].input-sm,\r\n  input[type=\"month\"].input-sm,\r\n  .input-group-sm input[type=\"date\"],\r\n  .input-group-sm input[type=\"time\"],\r\n  .input-group-sm input[type=\"datetime-local\"],\r\n  .input-group-sm input[type=\"month\"] {\r\n    line-height: 30px;\r\n  }\r\n  input[type=\"date\"].input-lg,\r\n  input[type=\"time\"].input-lg,\r\n  input[type=\"datetime-local\"].input-lg,\r\n  input[type=\"month\"].input-lg,\r\n  .input-group-lg input[type=\"date\"],\r\n  .input-group-lg input[type=\"time\"],\r\n  .input-group-lg input[type=\"datetime-local\"],\r\n  .input-group-lg input[type=\"month\"] {\r\n    line-height: 45px;\r\n  }\r\n}\r\n.form-group {\r\n  margin-bottom: 15px;\r\n}\r\n.radio,\r\n.checkbox {\r\n  position: relative;\r\n  display: block;\r\n  margin-top: 10px;\r\n  margin-bottom: 10px;\r\n}\r\n.radio label,\r\n.checkbox label {\r\n  min-height: 18px;\r\n  padding-left: 20px;\r\n  margin-bottom: 0;\r\n  font-weight: normal;\r\n  cursor: pointer;\r\n}\r\n.radio input[type=\"radio\"],\r\n.radio-inline input[type=\"radio\"],\r\n.checkbox input[type=\"checkbox\"],\r\n.checkbox-inline input[type=\"checkbox\"] {\r\n  position: absolute;\r\n  margin-left: -20px;\r\n  margin-top: 4px \\9;\r\n}\r\n.radio + .radio,\r\n.checkbox + .checkbox {\r\n  margin-top: -5px;\r\n}\r\n.radio-inline,\r\n.checkbox-inline {\r\n  position: relative;\r\n  display: inline-block;\r\n  padding-left: 20px;\r\n  margin-bottom: 0;\r\n  vertical-align: middle;\r\n  font-weight: normal;\r\n  cursor: pointer;\r\n}\r\n.radio-inline + .radio-inline,\r\n.checkbox-inline + .checkbox-inline {\r\n  margin-top: 0;\r\n  margin-left: 10px;\r\n}\r\ninput[type=\"radio\"][disabled],\r\ninput[type=\"checkbox\"][disabled],\r\ninput[type=\"radio\"].disabled,\r\ninput[type=\"checkbox\"].disabled,\r\nfieldset[disabled] input[type=\"radio\"],\r\nfieldset[disabled] input[type=\"checkbox\"] {\r\n  cursor: not-allowed;\r\n}\r\n.radio-inline.disabled,\r\n.checkbox-inline.disabled,\r\nfieldset[disabled] .radio-inline,\r\nfieldset[disabled] .checkbox-inline {\r\n  cursor: not-allowed;\r\n}\r\n.radio.disabled label,\r\n.checkbox.disabled label,\r\nfieldset[disabled] .radio label,\r\nfieldset[disabled] .checkbox label {\r\n  cursor: not-allowed;\r\n}\r\n.form-control-static {\r\n  padding-top: 7px;\r\n  padding-bottom: 7px;\r\n  margin-bottom: 0;\r\n  min-height: 31px;\r\n}\r\n.form-control-static.input-lg,\r\n.form-control-static.input-sm {\r\n  padding-left: 0;\r\n  padding-right: 0;\r\n}\r\n.input-sm {\r\n  height: 30px;\r\n  padding: 5px 10px;\r\n  font-size: 12px;\r\n  line-height: 1.5;\r\n  border-radius: 1px;\r\n}\r\nselect.input-sm {\r\n  height: 30px;\r\n  line-height: 30px;\r\n}\r\ntextarea.input-sm,\r\nselect[multiple].input-sm {\r\n  height: auto;\r\n}\r\n.form-group-sm .form-control {\r\n  height: 30px;\r\n  padding: 5px 10px;\r\n  font-size: 12px;\r\n  line-height: 1.5;\r\n  border-radius: 1px;\r\n}\r\n.form-group-sm select.form-control {\r\n  height: 30px;\r\n  line-height: 30px;\r\n}\r\n.form-group-sm textarea.form-control,\r\n.form-group-sm select[multiple].form-control {\r\n  height: auto;\r\n}\r\n.form-group-sm .form-control-static {\r\n  height: 30px;\r\n  min-height: 30px;\r\n  padding: 6px 10px;\r\n  font-size: 12px;\r\n  line-height: 1.5;\r\n}\r\n.input-lg {\r\n  height: 45px;\r\n  padding: 10px 16px;\r\n  font-size: 17px;\r\n  line-height: 1.3333333;\r\n  border-radius: 3px;\r\n}\r\nselect.input-lg {\r\n  height: 45px;\r\n  line-height: 45px;\r\n}\r\ntextarea.input-lg,\r\nselect[multiple].input-lg {\r\n  height: auto;\r\n}\r\n.form-group-lg .form-control {\r\n  height: 45px;\r\n  padding: 10px 16px;\r\n  font-size: 17px;\r\n  line-height: 1.3333333;\r\n  border-radius: 3px;\r\n}\r\n.form-group-lg select.form-control {\r\n  height: 45px;\r\n  line-height: 45px;\r\n}\r\n.form-group-lg textarea.form-control,\r\n.form-group-lg select[multiple].form-control {\r\n  height: auto;\r\n}\r\n.form-group-lg .form-control-static {\r\n  height: 45px;\r\n  min-height: 35px;\r\n  padding: 11px 16px;\r\n  font-size: 17px;\r\n  line-height: 1.3333333;\r\n}\r\n.has-feedback {\r\n  position: relative;\r\n}\r\n.has-feedback .form-control {\r\n  padding-right: 40px;\r\n}\r\n.form-control-feedback {\r\n  position: absolute;\r\n  top: 0;\r\n  right: 0;\r\n  z-index: 2;\r\n  display: block;\r\n  width: 32px;\r\n  height: 32px;\r\n  line-height: 32px;\r\n  text-align: center;\r\n  pointer-events: none;\r\n}\r\n.input-lg + .form-control-feedback,\r\n.input-group-lg + .form-control-feedback,\r\n.form-group-lg .form-control + .form-control-feedback {\r\n  width: 45px;\r\n  height: 45px;\r\n  line-height: 45px;\r\n}\r\n.input-sm + .form-control-feedback,\r\n.input-group-sm + .form-control-feedback,\r\n.form-group-sm .form-control + .form-control-feedback {\r\n  width: 30px;\r\n  height: 30px;\r\n  line-height: 30px;\r\n}\r\n.has-success .help-block,\r\n.has-success .control-label,\r\n.has-success .radio,\r\n.has-success .checkbox,\r\n.has-success .radio-inline,\r\n.has-success .checkbox-inline,\r\n.has-success.radio label,\r\n.has-success.checkbox label,\r\n.has-success.radio-inline label,\r\n.has-success.checkbox-inline label {\r\n  color: #3c763d;\r\n}\r\n.has-success .form-control {\r\n  border-color: #3c763d;\r\n  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\r\n  box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\r\n}\r\n.has-success .form-control:focus {\r\n  border-color: #2b542c;\r\n  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #67b168;\r\n  box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #67b168;\r\n}\r\n.has-success .input-group-addon {\r\n  color: #3c763d;\r\n  border-color: #3c763d;\r\n  background-color: #dff0d8;\r\n}\r\n.has-success .form-control-feedback {\r\n  color: #3c763d;\r\n}\r\n.has-warning .help-block,\r\n.has-warning .control-label,\r\n.has-warning .radio,\r\n.has-warning .checkbox,\r\n.has-warning .radio-inline,\r\n.has-warning .checkbox-inline,\r\n.has-warning.radio label,\r\n.has-warning.checkbox label,\r\n.has-warning.radio-inline label,\r\n.has-warning.checkbox-inline label {\r\n  color: #8a6d3b;\r\n}\r\n.has-warning .form-control {\r\n  border-color: #8a6d3b;\r\n  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\r\n  box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\r\n}\r\n.has-warning .form-control:focus {\r\n  border-color: #66512c;\r\n  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #c0a16b;\r\n  box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #c0a16b;\r\n}\r\n.has-warning .input-group-addon {\r\n  color: #8a6d3b;\r\n  border-color: #8a6d3b;\r\n  background-color: #fcf8e3;\r\n}\r\n.has-warning .form-control-feedback {\r\n  color: #8a6d3b;\r\n}\r\n.has-error .help-block,\r\n.has-error .control-label,\r\n.has-error .radio,\r\n.has-error .checkbox,\r\n.has-error .radio-inline,\r\n.has-error .checkbox-inline,\r\n.has-error.radio label,\r\n.has-error.checkbox label,\r\n.has-error.radio-inline label,\r\n.has-error.checkbox-inline label {\r\n  color: #a94442;\r\n}\r\n.has-error .form-control {\r\n  border-color: #a94442;\r\n  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\r\n  box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\r\n}\r\n.has-error .form-control:focus {\r\n  border-color: #843534;\r\n  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #ce8483;\r\n  box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #ce8483;\r\n}\r\n.has-error .input-group-addon {\r\n  color: #a94442;\r\n  border-color: #a94442;\r\n  background-color: #f2dede;\r\n}\r\n.has-error .form-control-feedback {\r\n  color: #a94442;\r\n}\r\n.has-feedback label ~ .form-control-feedback {\r\n  top: 23px;\r\n}\r\n.has-feedback label.sr-only ~ .form-control-feedback {\r\n  top: 0;\r\n}\r\n.help-block {\r\n  display: block;\r\n  margin-top: 5px;\r\n  margin-bottom: 10px;\r\n  color: #404040;\r\n}\r\n@media (min-width: 768px) {\r\n  .form-inline .form-group {\r\n    display: inline-block;\r\n    margin-bottom: 0;\r\n    vertical-align: middle;\r\n  }\r\n  .form-inline .form-control {\r\n    display: inline-block;\r\n    width: auto;\r\n    vertical-align: middle;\r\n  }\r\n  .form-inline .form-control-static {\r\n    display: inline-block;\r\n  }\r\n  .form-inline .input-group {\r\n    display: inline-table;\r\n    vertical-align: middle;\r\n  }\r\n  .form-inline .input-group .input-group-addon,\r\n  .form-inline .input-group .input-group-btn,\r\n  .form-inline .input-group .form-control {\r\n    width: auto;\r\n  }\r\n  .form-inline .input-group > .form-control {\r\n    width: 100%;\r\n  }\r\n  .form-inline .control-label {\r\n    margin-bottom: 0;\r\n    vertical-align: middle;\r\n  }\r\n  .form-inline .radio,\r\n  .form-inline .checkbox {\r\n    display: inline-block;\r\n    margin-top: 0;\r\n    margin-bottom: 0;\r\n    vertical-align: middle;\r\n  }\r\n  .form-inline .radio label,\r\n  .form-inline .checkbox label {\r\n    padding-left: 0;\r\n  }\r\n  .form-inline .radio input[type=\"radio\"],\r\n  .form-inline .checkbox input[type=\"checkbox\"] {\r\n    position: relative;\r\n    margin-left: 0;\r\n  }\r\n  .form-inline .has-feedback .form-control-feedback {\r\n    top: 0;\r\n  }\r\n}\r\n.form-horizontal .radio,\r\n.form-horizontal .checkbox,\r\n.form-horizontal .radio-inline,\r\n.form-horizontal .checkbox-inline {\r\n  margin-top: 0;\r\n  margin-bottom: 0;\r\n  padding-top: 7px;\r\n}\r\n.form-horizontal .radio,\r\n.form-horizontal .checkbox {\r\n  min-height: 25px;\r\n}\r\n.form-horizontal .form-group {\r\n  margin-left: 0px;\r\n  margin-right: 0px;\r\n}\r\n@media (min-width: 768px) {\r\n  .form-horizontal .control-label {\r\n    text-align: right;\r\n    margin-bottom: 0;\r\n    padding-top: 7px;\r\n  }\r\n}\r\n.form-horizontal .has-feedback .form-control-feedback {\r\n  right: 0px;\r\n}\r\n@media (min-width: 768px) {\r\n  .form-horizontal .form-group-lg .control-label {\r\n    padding-top: 11px;\r\n    font-size: 17px;\r\n  }\r\n}\r\n@media (min-width: 768px) {\r\n  .form-horizontal .form-group-sm .control-label {\r\n    padding-top: 6px;\r\n    font-size: 12px;\r\n  }\r\n}\r\n.btn {\r\n  display: inline-block;\r\n  margin-bottom: 0;\r\n  font-weight: normal;\r\n  text-align: center;\r\n  vertical-align: middle;\r\n  touch-action: manipulation;\r\n  cursor: pointer;\r\n  background-image: none;\r\n  border: 1px solid transparent;\r\n  white-space: nowrap;\r\n  padding: 6px 12px;\r\n  font-size: 13px;\r\n  line-height: 1.42857143;\r\n  border-radius: 2px;\r\n  -webkit-user-select: none;\r\n  -moz-user-select: none;\r\n  -ms-user-select: none;\r\n  user-select: none;\r\n}\r\n.btn:focus,\r\n.btn:active:focus,\r\n.btn.active:focus,\r\n.btn.focus,\r\n.btn:active.focus,\r\n.btn.active.focus {\r\n  outline: 5px auto -webkit-focus-ring-color;\r\n  outline-offset: -2px;\r\n}\r\n.btn:hover,\r\n.btn:focus,\r\n.btn.focus {\r\n  color: #333;\r\n  text-decoration: none;\r\n}\r\n.btn:active,\r\n.btn.active {\r\n  outline: 0;\r\n  background-image: none;\r\n  -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\r\n  box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\r\n}\r\n.btn.disabled,\r\n.btn[disabled],\r\nfieldset[disabled] .btn {\r\n  cursor: not-allowed;\r\n  opacity: 0.65;\r\n  filter: alpha(opacity=65);\r\n  -webkit-box-shadow: none;\r\n  box-shadow: none;\r\n}\r\na.btn.disabled,\r\nfieldset[disabled] a.btn {\r\n  pointer-events: none;\r\n}\r\n.btn-default {\r\n  color: #333;\r\n  background-color: #fff;\r\n  border-color: #ccc;\r\n}\r\n.btn-default:focus,\r\n.btn-default.focus {\r\n  color: #333;\r\n  background-color: #e6e6e6;\r\n  border-color: #8c8c8c;\r\n}\r\n.btn-default:hover {\r\n  color: #333;\r\n  background-color: #e6e6e6;\r\n  border-color: #adadad;\r\n}\r\n.btn-default:active,\r\n.btn-default.active,\r\n.open > .dropdown-toggle.btn-default {\r\n  color: #333;\r\n  background-color: #e6e6e6;\r\n  border-color: #adadad;\r\n}\r\n.btn-default:active:hover,\r\n.btn-default.active:hover,\r\n.open > .dropdown-toggle.btn-default:hover,\r\n.btn-default:active:focus,\r\n.btn-default.active:focus,\r\n.open > .dropdown-toggle.btn-default:focus,\r\n.btn-default:active.focus,\r\n.btn-default.active.focus,\r\n.open > .dropdown-toggle.btn-default.focus {\r\n  color: #333;\r\n  background-color: #d4d4d4;\r\n  border-color: #8c8c8c;\r\n}\r\n.btn-default:active,\r\n.btn-default.active,\r\n.open > .dropdown-toggle.btn-default {\r\n  background-image: none;\r\n}\r\n.btn-default.disabled:hover,\r\n.btn-default[disabled]:hover,\r\nfieldset[disabled] .btn-default:hover,\r\n.btn-default.disabled:focus,\r\n.btn-default[disabled]:focus,\r\nfieldset[disabled] .btn-default:focus,\r\n.btn-default.disabled.focus,\r\n.btn-default[disabled].focus,\r\nfieldset[disabled] .btn-default.focus {\r\n  background-color: #fff;\r\n  border-color: #ccc;\r\n}\r\n.btn-default .badge {\r\n  color: #fff;\r\n  background-color: #333;\r\n}\r\n.btn-primary {\r\n  color: #fff;\r\n  background-color: #337ab7;\r\n  border-color: #2e6da4;\r\n}\r\n.btn-primary:focus,\r\n.btn-primary.focus {\r\n  color: #fff;\r\n  background-color: #286090;\r\n  border-color: #122b40;\r\n}\r\n.btn-primary:hover {\r\n  color: #fff;\r\n  background-color: #286090;\r\n  border-color: #204d74;\r\n}\r\n.btn-primary:active,\r\n.btn-primary.active,\r\n.open > .dropdown-toggle.btn-primary {\r\n  color: #fff;\r\n  background-color: #286090;\r\n  border-color: #204d74;\r\n}\r\n.btn-primary:active:hover,\r\n.btn-primary.active:hover,\r\n.open > .dropdown-toggle.btn-primary:hover,\r\n.btn-primary:active:focus,\r\n.btn-primary.active:focus,\r\n.open > .dropdown-toggle.btn-primary:focus,\r\n.btn-primary:active.focus,\r\n.btn-primary.active.focus,\r\n.open > .dropdown-toggle.btn-primary.focus {\r\n  color: #fff;\r\n  background-color: #204d74;\r\n  border-color: #122b40;\r\n}\r\n.btn-primary:active,\r\n.btn-primary.active,\r\n.open > .dropdown-toggle.btn-primary {\r\n  background-image: none;\r\n}\r\n.btn-primary.disabled:hover,\r\n.btn-primary[disabled]:hover,\r\nfieldset[disabled] .btn-primary:hover,\r\n.btn-primary.disabled:focus,\r\n.btn-primary[disabled]:focus,\r\nfieldset[disabled] .btn-primary:focus,\r\n.btn-primary.disabled.focus,\r\n.btn-primary[disabled].focus,\r\nfieldset[disabled] .btn-primary.focus {\r\n  background-color: #337ab7;\r\n  border-color: #2e6da4;\r\n}\r\n.btn-primary .badge {\r\n  color: #337ab7;\r\n  background-color: #fff;\r\n}\r\n.btn-success {\r\n  color: #fff;\r\n  background-color: #5cb85c;\r\n  border-color: #4cae4c;\r\n}\r\n.btn-success:focus,\r\n.btn-success.focus {\r\n  color: #fff;\r\n  background-color: #449d44;\r\n  border-color: #255625;\r\n}\r\n.btn-success:hover {\r\n  color: #fff;\r\n  background-color: #449d44;\r\n  border-color: #398439;\r\n}\r\n.btn-success:active,\r\n.btn-success.active,\r\n.open > .dropdown-toggle.btn-success {\r\n  color: #fff;\r\n  background-color: #449d44;\r\n  border-color: #398439;\r\n}\r\n.btn-success:active:hover,\r\n.btn-success.active:hover,\r\n.open > .dropdown-toggle.btn-success:hover,\r\n.btn-success:active:focus,\r\n.btn-success.active:focus,\r\n.open > .dropdown-toggle.btn-success:focus,\r\n.btn-success:active.focus,\r\n.btn-success.active.focus,\r\n.open > .dropdown-toggle.btn-success.focus {\r\n  color: #fff;\r\n  background-color: #398439;\r\n  border-color: #255625;\r\n}\r\n.btn-success:active,\r\n.btn-success.active,\r\n.open > .dropdown-toggle.btn-success {\r\n  background-image: none;\r\n}\r\n.btn-success.disabled:hover,\r\n.btn-success[disabled]:hover,\r\nfieldset[disabled] .btn-success:hover,\r\n.btn-success.disabled:focus,\r\n.btn-success[disabled]:focus,\r\nfieldset[disabled] .btn-success:focus,\r\n.btn-success.disabled.focus,\r\n.btn-success[disabled].focus,\r\nfieldset[disabled] .btn-success.focus {\r\n  background-color: #5cb85c;\r\n  border-color: #4cae4c;\r\n}\r\n.btn-success .badge {\r\n  color: #5cb85c;\r\n  background-color: #fff;\r\n}\r\n.btn-info {\r\n  color: #fff;\r\n  background-color: #5bc0de;\r\n  border-color: #46b8da;\r\n}\r\n.btn-info:focus,\r\n.btn-info.focus {\r\n  color: #fff;\r\n  background-color: #31b0d5;\r\n  border-color: #1b6d85;\r\n}\r\n.btn-info:hover {\r\n  color: #fff;\r\n  background-color: #31b0d5;\r\n  border-color: #269abc;\r\n}\r\n.btn-info:active,\r\n.btn-info.active,\r\n.open > .dropdown-toggle.btn-info {\r\n  color: #fff;\r\n  background-color: #31b0d5;\r\n  border-color: #269abc;\r\n}\r\n.btn-info:active:hover,\r\n.btn-info.active:hover,\r\n.open > .dropdown-toggle.btn-info:hover,\r\n.btn-info:active:focus,\r\n.btn-info.active:focus,\r\n.open > .dropdown-toggle.btn-info:focus,\r\n.btn-info:active.focus,\r\n.btn-info.active.focus,\r\n.open > .dropdown-toggle.btn-info.focus {\r\n  color: #fff;\r\n  background-color: #269abc;\r\n  border-color: #1b6d85;\r\n}\r\n.btn-info:active,\r\n.btn-info.active,\r\n.open > .dropdown-toggle.btn-info {\r\n  background-image: none;\r\n}\r\n.btn-info.disabled:hover,\r\n.btn-info[disabled]:hover,\r\nfieldset[disabled] .btn-info:hover,\r\n.btn-info.disabled:focus,\r\n.btn-info[disabled]:focus,\r\nfieldset[disabled] .btn-info:focus,\r\n.btn-info.disabled.focus,\r\n.btn-info[disabled].focus,\r\nfieldset[disabled] .btn-info.focus {\r\n  background-color: #5bc0de;\r\n  border-color: #46b8da;\r\n}\r\n.btn-info .badge {\r\n  color: #5bc0de;\r\n  background-color: #fff;\r\n}\r\n.btn-warning {\r\n  color: #fff;\r\n  background-color: #f0ad4e;\r\n  border-color: #eea236;\r\n}\r\n.btn-warning:focus,\r\n.btn-warning.focus {\r\n  color: #fff;\r\n  background-color: #ec971f;\r\n  border-color: #985f0d;\r\n}\r\n.btn-warning:hover {\r\n  color: #fff;\r\n  background-color: #ec971f;\r\n  border-color: #d58512;\r\n}\r\n.btn-warning:active,\r\n.btn-warning.active,\r\n.open > .dropdown-toggle.btn-warning {\r\n  color: #fff;\r\n  background-color: #ec971f;\r\n  border-color: #d58512;\r\n}\r\n.btn-warning:active:hover,\r\n.btn-warning.active:hover,\r\n.open > .dropdown-toggle.btn-warning:hover,\r\n.btn-warning:active:focus,\r\n.btn-warning.active:focus,\r\n.open > .dropdown-toggle.btn-warning:focus,\r\n.btn-warning:active.focus,\r\n.btn-warning.active.focus,\r\n.open > .dropdown-toggle.btn-warning.focus {\r\n  color: #fff;\r\n  background-color: #d58512;\r\n  border-color: #985f0d;\r\n}\r\n.btn-warning:active,\r\n.btn-warning.active,\r\n.open > .dropdown-toggle.btn-warning {\r\n  background-image: none;\r\n}\r\n.btn-warning.disabled:hover,\r\n.btn-warning[disabled]:hover,\r\nfieldset[disabled] .btn-warning:hover,\r\n.btn-warning.disabled:focus,\r\n.btn-warning[disabled]:focus,\r\nfieldset[disabled] .btn-warning:focus,\r\n.btn-warning.disabled.focus,\r\n.btn-warning[disabled].focus,\r\nfieldset[disabled] .btn-warning.focus {\r\n  background-color: #f0ad4e;\r\n  border-color: #eea236;\r\n}\r\n.btn-warning .badge {\r\n  color: #f0ad4e;\r\n  background-color: #fff;\r\n}\r\n.btn-danger {\r\n  color: #fff;\r\n  background-color: #d9534f;\r\n  border-color: #d43f3a;\r\n}\r\n.btn-danger:focus,\r\n.btn-danger.focus {\r\n  color: #fff;\r\n  background-color: #c9302c;\r\n  border-color: #761c19;\r\n}\r\n.btn-danger:hover {\r\n  color: #fff;\r\n  background-color: #c9302c;\r\n  border-color: #ac2925;\r\n}\r\n.btn-danger:active,\r\n.btn-danger.active,\r\n.open > .dropdown-toggle.btn-danger {\r\n  color: #fff;\r\n  background-color: #c9302c;\r\n  border-color: #ac2925;\r\n}\r\n.btn-danger:active:hover,\r\n.btn-danger.active:hover,\r\n.open > .dropdown-toggle.btn-danger:hover,\r\n.btn-danger:active:focus,\r\n.btn-danger.active:focus,\r\n.open > .dropdown-toggle.btn-danger:focus,\r\n.btn-danger:active.focus,\r\n.btn-danger.active.focus,\r\n.open > .dropdown-toggle.btn-danger.focus {\r\n  color: #fff;\r\n  background-color: #ac2925;\r\n  border-color: #761c19;\r\n}\r\n.btn-danger:active,\r\n.btn-danger.active,\r\n.open > .dropdown-toggle.btn-danger {\r\n  background-image: none;\r\n}\r\n.btn-danger.disabled:hover,\r\n.btn-danger[disabled]:hover,\r\nfieldset[disabled] .btn-danger:hover,\r\n.btn-danger.disabled:focus,\r\n.btn-danger[disabled]:focus,\r\nfieldset[disabled] .btn-danger:focus,\r\n.btn-danger.disabled.focus,\r\n.btn-danger[disabled].focus,\r\nfieldset[disabled] .btn-danger.focus {\r\n  background-color: #d9534f;\r\n  border-color: #d43f3a;\r\n}\r\n.btn-danger .badge {\r\n  color: #d9534f;\r\n  background-color: #fff;\r\n}\r\n.btn-link {\r\n  color: #337ab7;\r\n  font-weight: normal;\r\n  border-radius: 0;\r\n}\r\n.btn-link,\r\n.btn-link:active,\r\n.btn-link.active,\r\n.btn-link[disabled],\r\nfieldset[disabled] .btn-link {\r\n  background-color: transparent;\r\n  -webkit-box-shadow: none;\r\n  box-shadow: none;\r\n}\r\n.btn-link,\r\n.btn-link:hover,\r\n.btn-link:focus,\r\n.btn-link:active {\r\n  border-color: transparent;\r\n}\r\n.btn-link:hover,\r\n.btn-link:focus {\r\n  color: #23527c;\r\n  text-decoration: underline;\r\n  background-color: transparent;\r\n}\r\n.btn-link[disabled]:hover,\r\nfieldset[disabled] .btn-link:hover,\r\n.btn-link[disabled]:focus,\r\nfieldset[disabled] .btn-link:focus {\r\n  color: #777777;\r\n  text-decoration: none;\r\n}\r\n.btn-lg,\r\n.btn-group-lg > .btn {\r\n  padding: 10px 16px;\r\n  font-size: 17px;\r\n  line-height: 1.3333333;\r\n  border-radius: 3px;\r\n}\r\n.btn-sm,\r\n.btn-group-sm > .btn {\r\n  padding: 5px 10px;\r\n  font-size: 12px;\r\n  line-height: 1.5;\r\n  border-radius: 1px;\r\n}\r\n.btn-xs,\r\n.btn-group-xs > .btn {\r\n  padding: 1px 5px;\r\n  font-size: 12px;\r\n  line-height: 1.5;\r\n  border-radius: 1px;\r\n}\r\n.btn-block {\r\n  display: block;\r\n  width: 100%;\r\n}\r\n.btn-block + .btn-block {\r\n  margin-top: 5px;\r\n}\r\ninput[type=\"submit\"].btn-block,\r\ninput[type=\"reset\"].btn-block,\r\ninput[type=\"button\"].btn-block {\r\n  width: 100%;\r\n}\r\n.fade {\r\n  opacity: 0;\r\n  -webkit-transition: opacity 0.15s linear;\r\n  -o-transition: opacity 0.15s linear;\r\n  transition: opacity 0.15s linear;\r\n}\r\n.fade.in {\r\n  opacity: 1;\r\n}\r\n.collapse {\r\n  display: none;\r\n}\r\n.collapse.in {\r\n  display: block;\r\n}\r\ntr.collapse.in {\r\n  display: table-row;\r\n}\r\ntbody.collapse.in {\r\n  display: table-row-group;\r\n}\r\n.collapsing {\r\n  position: relative;\r\n  height: 0;\r\n  overflow: hidden;\r\n  -webkit-transition-property: height, visibility;\r\n  transition-property: height, visibility;\r\n  -webkit-transition-duration: 0.35s;\r\n  transition-duration: 0.35s;\r\n  -webkit-transition-timing-function: ease;\r\n  transition-timing-function: ease;\r\n}\r\n.caret {\r\n  display: inline-block;\r\n  width: 0;\r\n  height: 0;\r\n  margin-left: 2px;\r\n  vertical-align: middle;\r\n  border-top: 4px dashed;\r\n  border-top: 4px solid \\9;\r\n  border-right: 4px solid transparent;\r\n  border-left: 4px solid transparent;\r\n}\r\n.dropup,\r\n.dropdown {\r\n  position: relative;\r\n}\r\n.dropdown-toggle:focus {\r\n  outline: 0;\r\n}\r\n.dropdown-menu {\r\n  position: absolute;\r\n  top: 100%;\r\n  left: 0;\r\n  z-index: 1000;\r\n  display: none;\r\n  float: left;\r\n  min-width: 160px;\r\n  padding: 5px 0;\r\n  margin: 2px 0 0;\r\n  list-style: none;\r\n  font-size: 13px;\r\n  text-align: left;\r\n  background-color: #fff;\r\n  border: 1px solid #ccc;\r\n  border: 1px solid rgba(0, 0, 0, 0.15);\r\n  border-radius: 2px;\r\n  -webkit-box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175);\r\n  box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175);\r\n  background-clip: padding-box;\r\n}\r\n.dropdown-menu.pull-right {\r\n  right: 0;\r\n  left: auto;\r\n}\r\n.dropdown-menu .divider {\r\n  height: 1px;\r\n  margin: 8px 0;\r\n  overflow: hidden;\r\n  background-color: #e5e5e5;\r\n}\r\n.dropdown-menu > li > a {\r\n  display: block;\r\n  padding: 3px 20px;\r\n  clear: both;\r\n  font-weight: normal;\r\n  line-height: 1.42857143;\r\n  color: #333333;\r\n  white-space: nowrap;\r\n}\r\n.dropdown-menu > li > a:hover,\r\n.dropdown-menu > li > a:focus {\r\n  text-decoration: none;\r\n  color: #262626;\r\n  background-color: #f5f5f5;\r\n}\r\n.dropdown-menu > .active > a,\r\n.dropdown-menu > .active > a:hover,\r\n.dropdown-menu > .active > a:focus {\r\n  color: #fff;\r\n  text-decoration: none;\r\n  outline: 0;\r\n  background-color: #337ab7;\r\n}\r\n.dropdown-menu > .disabled > a,\r\n.dropdown-menu > .disabled > a:hover,\r\n.dropdown-menu > .disabled > a:focus {\r\n  color: #777777;\r\n}\r\n.dropdown-menu > .disabled > a:hover,\r\n.dropdown-menu > .disabled > a:focus {\r\n  text-decoration: none;\r\n  background-color: transparent;\r\n  background-image: none;\r\n  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\r\n  cursor: not-allowed;\r\n}\r\n.open > .dropdown-menu {\r\n  display: block;\r\n}\r\n.open > a {\r\n  outline: 0;\r\n}\r\n.dropdown-menu-right {\r\n  left: auto;\r\n  right: 0;\r\n}\r\n.dropdown-menu-left {\r\n  left: 0;\r\n  right: auto;\r\n}\r\n.dropdown-header {\r\n  display: block;\r\n  padding: 3px 20px;\r\n  font-size: 12px;\r\n  line-height: 1.42857143;\r\n  color: #777777;\r\n  white-space: nowrap;\r\n}\r\n.dropdown-backdrop {\r\n  position: fixed;\r\n  left: 0;\r\n  right: 0;\r\n  bottom: 0;\r\n  top: 0;\r\n  z-index: 990;\r\n}\r\n.pull-right > .dropdown-menu {\r\n  right: 0;\r\n  left: auto;\r\n}\r\n.dropup .caret,\r\n.navbar-fixed-bottom .dropdown .caret {\r\n  border-top: 0;\r\n  border-bottom: 4px dashed;\r\n  border-bottom: 4px solid \\9;\r\n  content: \"\";\r\n}\r\n.dropup .dropdown-menu,\r\n.navbar-fixed-bottom .dropdown .dropdown-menu {\r\n  top: auto;\r\n  bottom: 100%;\r\n  margin-bottom: 2px;\r\n}\r\n@media (min-width: 541px) {\r\n  .navbar-right .dropdown-menu {\r\n    left: auto;\r\n    right: 0;\r\n  }\r\n  .navbar-right .dropdown-menu-left {\r\n    left: 0;\r\n    right: auto;\r\n  }\r\n}\r\n.btn-group,\r\n.btn-group-vertical {\r\n  position: relative;\r\n  display: inline-block;\r\n  vertical-align: middle;\r\n}\r\n.btn-group > .btn,\r\n.btn-group-vertical > .btn {\r\n  position: relative;\r\n  float: left;\r\n}\r\n.btn-group > .btn:hover,\r\n.btn-group-vertical > .btn:hover,\r\n.btn-group > .btn:focus,\r\n.btn-group-vertical > .btn:focus,\r\n.btn-group > .btn:active,\r\n.btn-group-vertical > .btn:active,\r\n.btn-group > .btn.active,\r\n.btn-group-vertical > .btn.active {\r\n  z-index: 2;\r\n}\r\n.btn-group .btn + .btn,\r\n.btn-group .btn + .btn-group,\r\n.btn-group .btn-group + .btn,\r\n.btn-group .btn-group + .btn-group {\r\n  margin-left: -1px;\r\n}\r\n.btn-toolbar {\r\n  margin-left: -5px;\r\n}\r\n.btn-toolbar .btn,\r\n.btn-toolbar .btn-group,\r\n.btn-toolbar .input-group {\r\n  float: left;\r\n}\r\n.btn-toolbar > .btn,\r\n.btn-toolbar > .btn-group,\r\n.btn-toolbar > .input-group {\r\n  margin-left: 5px;\r\n}\r\n.btn-group > .btn:not(:first-child):not(:last-child):not(.dropdown-toggle) {\r\n  border-radius: 0;\r\n}\r\n.btn-group > .btn:first-child {\r\n  margin-left: 0;\r\n}\r\n.btn-group > .btn:first-child:not(:last-child):not(.dropdown-toggle) {\r\n  border-bottom-right-radius: 0;\r\n  border-top-right-radius: 0;\r\n}\r\n.btn-group > .btn:last-child:not(:first-child),\r\n.btn-group > .dropdown-toggle:not(:first-child) {\r\n  border-bottom-left-radius: 0;\r\n  border-top-left-radius: 0;\r\n}\r\n.btn-group > .btn-group {\r\n  float: left;\r\n}\r\n.btn-group > .btn-group:not(:first-child):not(:last-child) > .btn {\r\n  border-radius: 0;\r\n}\r\n.btn-group > .btn-group:first-child:not(:last-child) > .btn:last-child,\r\n.btn-group > .btn-group:first-child:not(:last-child) > .dropdown-toggle {\r\n  border-bottom-right-radius: 0;\r\n  border-top-right-radius: 0;\r\n}\r\n.btn-group > .btn-group:last-child:not(:first-child) > .btn:first-child {\r\n  border-bottom-left-radius: 0;\r\n  border-top-left-radius: 0;\r\n}\r\n.btn-group .dropdown-toggle:active,\r\n.btn-group.open .dropdown-toggle {\r\n  outline: 0;\r\n}\r\n.btn-group > .btn + .dropdown-toggle {\r\n  padding-left: 8px;\r\n  padding-right: 8px;\r\n}\r\n.btn-group > .btn-lg + .dropdown-toggle {\r\n  padding-left: 12px;\r\n  padding-right: 12px;\r\n}\r\n.btn-group.open .dropdown-toggle {\r\n  -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\r\n  box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\r\n}\r\n.btn-group.open .dropdown-toggle.btn-link {\r\n  -webkit-box-shadow: none;\r\n  box-shadow: none;\r\n}\r\n.btn .caret {\r\n  margin-left: 0;\r\n}\r\n.btn-lg .caret {\r\n  border-width: 5px 5px 0;\r\n  border-bottom-width: 0;\r\n}\r\n.dropup .btn-lg .caret {\r\n  border-width: 0 5px 5px;\r\n}\r\n.btn-group-vertical > .btn,\r\n.btn-group-vertical > .btn-group,\r\n.btn-group-vertical > .btn-group > .btn {\r\n  display: block;\r\n  float: none;\r\n  width: 100%;\r\n  max-width: 100%;\r\n}\r\n.btn-group-vertical > .btn-group > .btn {\r\n  float: none;\r\n}\r\n.btn-group-vertical > .btn + .btn,\r\n.btn-group-vertical > .btn + .btn-group,\r\n.btn-group-vertical > .btn-group + .btn,\r\n.btn-group-vertical > .btn-group + .btn-group {\r\n  margin-top: -1px;\r\n  margin-left: 0;\r\n}\r\n.btn-group-vertical > .btn:not(:first-child):not(:last-child) {\r\n  border-radius: 0;\r\n}\r\n.btn-group-vertical > .btn:first-child:not(:last-child) {\r\n  border-top-right-radius: 2px;\r\n  border-top-left-radius: 2px;\r\n  border-bottom-right-radius: 0;\r\n  border-bottom-left-radius: 0;\r\n}\r\n.btn-group-vertical > .btn:last-child:not(:first-child) {\r\n  border-top-right-radius: 0;\r\n  border-top-left-radius: 0;\r\n  border-bottom-right-radius: 2px;\r\n  border-bottom-left-radius: 2px;\r\n}\r\n.btn-group-vertical > .btn-group:not(:first-child):not(:last-child) > .btn {\r\n  border-radius: 0;\r\n}\r\n.btn-group-vertical > .btn-group:first-child:not(:last-child) > .btn:last-child,\r\n.btn-group-vertical > .btn-group:first-child:not(:last-child) > .dropdown-toggle {\r\n  border-bottom-right-radius: 0;\r\n  border-bottom-left-radius: 0;\r\n}\r\n.btn-group-vertical > .btn-group:last-child:not(:first-child) > .btn:first-child {\r\n  border-top-right-radius: 0;\r\n  border-top-left-radius: 0;\r\n}\r\n.btn-group-justified {\r\n  display: table;\r\n  width: 100%;\r\n  table-layout: fixed;\r\n  border-collapse: separate;\r\n}\r\n.btn-group-justified > .btn,\r\n.btn-group-justified > .btn-group {\r\n  float: none;\r\n  display: table-cell;\r\n  width: 1%;\r\n}\r\n.btn-group-justified > .btn-group .btn {\r\n  width: 100%;\r\n}\r\n.btn-group-justified > .btn-group .dropdown-menu {\r\n  left: auto;\r\n}\r\n[data-toggle=\"buttons\"] > .btn input[type=\"radio\"],\r\n[data-toggle=\"buttons\"] > .btn-group > .btn input[type=\"radio\"],\r\n[data-toggle=\"buttons\"] > .btn input[type=\"checkbox\"],\r\n[data-toggle=\"buttons\"] > .btn-group > .btn input[type=\"checkbox\"] {\r\n  position: absolute;\r\n  clip: rect(0, 0, 0, 0);\r\n  pointer-events: none;\r\n}\r\n.input-group {\r\n  position: relative;\r\n  display: table;\r\n  border-collapse: separate;\r\n}\r\n.input-group[class*=\"col-\"] {\r\n  float: none;\r\n  padding-left: 0;\r\n  padding-right: 0;\r\n}\r\n.input-group .form-control {\r\n  position: relative;\r\n  z-index: 2;\r\n  float: left;\r\n  width: 100%;\r\n  margin-bottom: 0;\r\n}\r\n.input-group .form-control:focus {\r\n  z-index: 3;\r\n}\r\n.input-group-lg > .form-control,\r\n.input-group-lg > .input-group-addon,\r\n.input-group-lg > .input-group-btn > .btn {\r\n  height: 45px;\r\n  padding: 10px 16px;\r\n  font-size: 17px;\r\n  line-height: 1.3333333;\r\n  border-radius: 3px;\r\n}\r\nselect.input-group-lg > .form-control,\r\nselect.input-group-lg > .input-group-addon,\r\nselect.input-group-lg > .input-group-btn > .btn {\r\n  height: 45px;\r\n  line-height: 45px;\r\n}\r\ntextarea.input-group-lg > .form-control,\r\ntextarea.input-group-lg > .input-group-addon,\r\ntextarea.input-group-lg > .input-group-btn > .btn,\r\nselect[multiple].input-group-lg > .form-control,\r\nselect[multiple].input-group-lg > .input-group-addon,\r\nselect[multiple].input-group-lg > .input-group-btn > .btn {\r\n  height: auto;\r\n}\r\n.input-group-sm > .form-control,\r\n.input-group-sm > .input-group-addon,\r\n.input-group-sm > .input-group-btn > .btn {\r\n  height: 30px;\r\n  padding: 5px 10px;\r\n  font-size: 12px;\r\n  line-height: 1.5;\r\n  border-radius: 1px;\r\n}\r\nselect.input-group-sm > .form-control,\r\nselect.input-group-sm > .input-group-addon,\r\nselect.input-group-sm > .input-group-btn > .btn {\r\n  height: 30px;\r\n  line-height: 30px;\r\n}\r\ntextarea.input-group-sm > .form-control,\r\ntextarea.input-group-sm > .input-group-addon,\r\ntextarea.input-group-sm > .input-group-btn > .btn,\r\nselect[multiple].input-group-sm > .form-control,\r\nselect[multiple].input-group-sm > .input-group-addon,\r\nselect[multiple].input-group-sm > .input-group-btn > .btn {\r\n  height: auto;\r\n}\r\n.input-group-addon,\r\n.input-group-btn,\r\n.input-group .form-control {\r\n  display: table-cell;\r\n}\r\n.input-group-addon:not(:first-child):not(:last-child),\r\n.input-group-btn:not(:first-child):not(:last-child),\r\n.input-group .form-control:not(:first-child):not(:last-child) {\r\n  border-radius: 0;\r\n}\r\n.input-group-addon,\r\n.input-group-btn {\r\n  width: 1%;\r\n  white-space: nowrap;\r\n  vertical-align: middle;\r\n}\r\n.input-group-addon {\r\n  padding: 6px 12px;\r\n  font-size: 13px;\r\n  font-weight: normal;\r\n  line-height: 1;\r\n  color: #555555;\r\n  text-align: center;\r\n  background-color: #eeeeee;\r\n  border: 1px solid #ccc;\r\n  border-radius: 2px;\r\n}\r\n.input-group-addon.input-sm {\r\n  padding: 5px 10px;\r\n  font-size: 12px;\r\n  border-radius: 1px;\r\n}\r\n.input-group-addon.input-lg {\r\n  padding: 10px 16px;\r\n  font-size: 17px;\r\n  border-radius: 3px;\r\n}\r\n.input-group-addon input[type=\"radio\"],\r\n.input-group-addon input[type=\"checkbox\"] {\r\n  margin-top: 0;\r\n}\r\n.input-group .form-control:first-child,\r\n.input-group-addon:first-child,\r\n.input-group-btn:first-child > .btn,\r\n.input-group-btn:first-child > .btn-group > .btn,\r\n.input-group-btn:first-child > .dropdown-toggle,\r\n.input-group-btn:last-child > .btn:not(:last-child):not(.dropdown-toggle),\r\n.input-group-btn:last-child > .btn-group:not(:last-child) > .btn {\r\n  border-bottom-right-radius: 0;\r\n  border-top-right-radius: 0;\r\n}\r\n.input-group-addon:first-child {\r\n  border-right: 0;\r\n}\r\n.input-group .form-control:last-child,\r\n.input-group-addon:last-child,\r\n.input-group-btn:last-child > .btn,\r\n.input-group-btn:last-child > .btn-group > .btn,\r\n.input-group-btn:last-child > .dropdown-toggle,\r\n.input-group-btn:first-child > .btn:not(:first-child),\r\n.input-group-btn:first-child > .btn-group:not(:first-child) > .btn {\r\n  border-bottom-left-radius: 0;\r\n  border-top-left-radius: 0;\r\n}\r\n.input-group-addon:last-child {\r\n  border-left: 0;\r\n}\r\n.input-group-btn {\r\n  position: relative;\r\n  font-size: 0;\r\n  white-space: nowrap;\r\n}\r\n.input-group-btn > .btn {\r\n  position: relative;\r\n}\r\n.input-group-btn > .btn + .btn {\r\n  margin-left: -1px;\r\n}\r\n.input-group-btn > .btn:hover,\r\n.input-group-btn > .btn:focus,\r\n.input-group-btn > .btn:active {\r\n  z-index: 2;\r\n}\r\n.input-group-btn:first-child > .btn,\r\n.input-group-btn:first-child > .btn-group {\r\n  margin-right: -1px;\r\n}\r\n.input-group-btn:last-child > .btn,\r\n.input-group-btn:last-child > .btn-group {\r\n  z-index: 2;\r\n  margin-left: -1px;\r\n}\r\n.nav {\r\n  margin-bottom: 0;\r\n  padding-left: 0;\r\n  list-style: none;\r\n}\r\n.nav > li {\r\n  position: relative;\r\n  display: block;\r\n}\r\n.nav > li > a {\r\n  position: relative;\r\n  display: block;\r\n  padding: 10px 15px;\r\n}\r\n.nav > li > a:hover,\r\n.nav > li > a:focus {\r\n  text-decoration: none;\r\n  background-color: #eeeeee;\r\n}\r\n.nav > li.disabled > a {\r\n  color: #777777;\r\n}\r\n.nav > li.disabled > a:hover,\r\n.nav > li.disabled > a:focus {\r\n  color: #777777;\r\n  text-decoration: none;\r\n  background-color: transparent;\r\n  cursor: not-allowed;\r\n}\r\n.nav .open > a,\r\n.nav .open > a:hover,\r\n.nav .open > a:focus {\r\n  background-color: #eeeeee;\r\n  border-color: #337ab7;\r\n}\r\n.nav .nav-divider {\r\n  height: 1px;\r\n  margin: 8px 0;\r\n  overflow: hidden;\r\n  background-color: #e5e5e5;\r\n}\r\n.nav > li > a > img {\r\n  max-width: none;\r\n}\r\n.nav-tabs {\r\n  border-bottom: 1px solid #ddd;\r\n}\r\n.nav-tabs > li {\r\n  float: left;\r\n  margin-bottom: -1px;\r\n}\r\n.nav-tabs > li > a {\r\n  margin-right: 2px;\r\n  line-height: 1.42857143;\r\n  border: 1px solid transparent;\r\n  border-radius: 2px 2px 0 0;\r\n}\r\n.nav-tabs > li > a:hover {\r\n  border-color: #eeeeee #eeeeee #ddd;\r\n}\r\n.nav-tabs > li.active > a,\r\n.nav-tabs > li.active > a:hover,\r\n.nav-tabs > li.active > a:focus {\r\n  color: #555555;\r\n  background-color: #fff;\r\n  border: 1px solid #ddd;\r\n  border-bottom-color: transparent;\r\n  cursor: default;\r\n}\r\n.nav-tabs.nav-justified {\r\n  width: 100%;\r\n  border-bottom: 0;\r\n}\r\n.nav-tabs.nav-justified > li {\r\n  float: none;\r\n}\r\n.nav-tabs.nav-justified > li > a {\r\n  text-align: center;\r\n  margin-bottom: 5px;\r\n}\r\n.nav-tabs.nav-justified > .dropdown .dropdown-menu {\r\n  top: auto;\r\n  left: auto;\r\n}\r\n@media (min-width: 768px) {\r\n  .nav-tabs.nav-justified > li {\r\n    display: table-cell;\r\n    width: 1%;\r\n  }\r\n  .nav-tabs.nav-justified > li > a {\r\n    margin-bottom: 0;\r\n  }\r\n}\r\n.nav-tabs.nav-justified > li > a {\r\n  margin-right: 0;\r\n  border-radius: 2px;\r\n}\r\n.nav-tabs.nav-justified > .active > a,\r\n.nav-tabs.nav-justified > .active > a:hover,\r\n.nav-tabs.nav-justified > .active > a:focus {\r\n  border: 1px solid #ddd;\r\n}\r\n@media (min-width: 768px) {\r\n  .nav-tabs.nav-justified > li > a {\r\n    border-bottom: 1px solid #ddd;\r\n    border-radius: 2px 2px 0 0;\r\n  }\r\n  .nav-tabs.nav-justified > .active > a,\r\n  .nav-tabs.nav-justified > .active > a:hover,\r\n  .nav-tabs.nav-justified > .active > a:focus {\r\n    border-bottom-color: #fff;\r\n  }\r\n}\r\n.nav-pills > li {\r\n  float: left;\r\n}\r\n.nav-pills > li > a {\r\n  border-radius: 2px;\r\n}\r\n.nav-pills > li + li {\r\n  margin-left: 2px;\r\n}\r\n.nav-pills > li.active > a,\r\n.nav-pills > li.active > a:hover,\r\n.nav-pills > li.active > a:focus {\r\n  color: #fff;\r\n  background-color: #337ab7;\r\n}\r\n.nav-stacked > li {\r\n  float: none;\r\n}\r\n.nav-stacked > li + li {\r\n  margin-top: 2px;\r\n  margin-left: 0;\r\n}\r\n.nav-justified {\r\n  width: 100%;\r\n}\r\n.nav-justified > li {\r\n  float: none;\r\n}\r\n.nav-justified > li > a {\r\n  text-align: center;\r\n  margin-bottom: 5px;\r\n}\r\n.nav-justified > .dropdown .dropdown-menu {\r\n  top: auto;\r\n  left: auto;\r\n}\r\n@media (min-width: 768px) {\r\n  .nav-justified > li {\r\n    display: table-cell;\r\n    width: 1%;\r\n  }\r\n  .nav-justified > li > a {\r\n    margin-bottom: 0;\r\n  }\r\n}\r\n.nav-tabs-justified {\r\n  border-bottom: 0;\r\n}\r\n.nav-tabs-justified > li > a {\r\n  margin-right: 0;\r\n  border-radius: 2px;\r\n}\r\n.nav-tabs-justified > .active > a,\r\n.nav-tabs-justified > .active > a:hover,\r\n.nav-tabs-justified > .active > a:focus {\r\n  border: 1px solid #ddd;\r\n}\r\n@media (min-width: 768px) {\r\n  .nav-tabs-justified > li > a {\r\n    border-bottom: 1px solid #ddd;\r\n    border-radius: 2px 2px 0 0;\r\n  }\r\n  .nav-tabs-justified > .active > a,\r\n  .nav-tabs-justified > .active > a:hover,\r\n  .nav-tabs-justified > .active > a:focus {\r\n    border-bottom-color: #fff;\r\n  }\r\n}\r\n.tab-content > .tab-pane {\r\n  display: none;\r\n}\r\n.tab-content > .active {\r\n  display: block;\r\n}\r\n.nav-tabs .dropdown-menu {\r\n  margin-top: -1px;\r\n  border-top-right-radius: 0;\r\n  border-top-left-radius: 0;\r\n}\r\n.navbar {\r\n  position: relative;\r\n  min-height: 30px;\r\n  margin-bottom: 18px;\r\n  border: 1px solid transparent;\r\n}\r\n@media (min-width: 541px) {\r\n  .navbar {\r\n    border-radius: 2px;\r\n  }\r\n}\r\n@media (min-width: 541px) {\r\n  .navbar-header {\r\n    float: left;\r\n  }\r\n}\r\n.navbar-collapse {\r\n  overflow-x: visible;\r\n  padding-right: 0px;\r\n  padding-left: 0px;\r\n  border-top: 1px solid transparent;\r\n  box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1);\r\n  -webkit-overflow-scrolling: touch;\r\n}\r\n.navbar-collapse.in {\r\n  overflow-y: auto;\r\n}\r\n@media (min-width: 541px) {\r\n  .navbar-collapse {\r\n    width: auto;\r\n    border-top: 0;\r\n    box-shadow: none;\r\n  }\r\n  .navbar-collapse.collapse {\r\n    display: block !important;\r\n    height: auto !important;\r\n    padding-bottom: 0;\r\n    overflow: visible !important;\r\n  }\r\n  .navbar-collapse.in {\r\n    overflow-y: visible;\r\n  }\r\n  .navbar-fixed-top .navbar-collapse,\r\n  .navbar-static-top .navbar-collapse,\r\n  .navbar-fixed-bottom .navbar-collapse {\r\n    padding-left: 0;\r\n    padding-right: 0;\r\n  }\r\n}\r\n.navbar-fixed-top .navbar-collapse,\r\n.navbar-fixed-bottom .navbar-collapse {\r\n  max-height: 340px;\r\n}\r\n@media (max-device-width: 540px) and (orientation: landscape) {\r\n  .navbar-fixed-top .navbar-collapse,\r\n  .navbar-fixed-bottom .navbar-collapse {\r\n    max-height: 200px;\r\n  }\r\n}\r\n.container > .navbar-header,\r\n.container-fluid > .navbar-header,\r\n.container > .navbar-collapse,\r\n.container-fluid > .navbar-collapse {\r\n  margin-right: 0px;\r\n  margin-left: 0px;\r\n}\r\n@media (min-width: 541px) {\r\n  .container > .navbar-header,\r\n  .container-fluid > .navbar-header,\r\n  .container > .navbar-collapse,\r\n  .container-fluid > .navbar-collapse {\r\n    margin-right: 0;\r\n    margin-left: 0;\r\n  }\r\n}\r\n.navbar-static-top {\r\n  z-index: 1000;\r\n  border-width: 0 0 1px;\r\n}\r\n@media (min-width: 541px) {\r\n  .navbar-static-top {\r\n    border-radius: 0;\r\n  }\r\n}\r\n.navbar-fixed-top,\r\n.navbar-fixed-bottom {\r\n  position: fixed;\r\n  right: 0;\r\n  left: 0;\r\n  z-index: 1030;\r\n}\r\n@media (min-width: 541px) {\r\n  .navbar-fixed-top,\r\n  .navbar-fixed-bottom {\r\n    border-radius: 0;\r\n  }\r\n}\r\n.navbar-fixed-top {\r\n  top: 0;\r\n  border-width: 0 0 1px;\r\n}\r\n.navbar-fixed-bottom {\r\n  bottom: 0;\r\n  margin-bottom: 0;\r\n  border-width: 1px 0 0;\r\n}\r\n.navbar-brand {\r\n  float: left;\r\n  padding: 6px 0px;\r\n  font-size: 17px;\r\n  line-height: 18px;\r\n  height: 30px;\r\n}\r\n.navbar-brand:hover,\r\n.navbar-brand:focus {\r\n  text-decoration: none;\r\n}\r\n.navbar-brand > img {\r\n  display: block;\r\n}\r\n@media (min-width: 541px) {\r\n  .navbar > .container .navbar-brand,\r\n  .navbar > .container-fluid .navbar-brand {\r\n    margin-left: 0px;\r\n  }\r\n}\r\n.navbar-toggle {\r\n  position: relative;\r\n  float: right;\r\n  margin-right: 0px;\r\n  padding: 9px 10px;\r\n  margin-top: -2px;\r\n  margin-bottom: -2px;\r\n  background-color: transparent;\r\n  background-image: none;\r\n  border: 1px solid transparent;\r\n  border-radius: 2px;\r\n}\r\n.navbar-toggle:focus {\r\n  outline: 0;\r\n}\r\n.navbar-toggle .icon-bar {\r\n  display: block;\r\n  width: 22px;\r\n  height: 2px;\r\n  border-radius: 1px;\r\n}\r\n.navbar-toggle .icon-bar + .icon-bar {\r\n  margin-top: 4px;\r\n}\r\n@media (min-width: 541px) {\r\n  .navbar-toggle {\r\n    display: none;\r\n  }\r\n}\r\n.navbar-nav {\r\n  margin: 3px 0px;\r\n}\r\n.navbar-nav > li > a {\r\n  padding-top: 10px;\r\n  padding-bottom: 10px;\r\n  line-height: 18px;\r\n}\r\n@media (max-width: 540px) {\r\n  .navbar-nav .open .dropdown-menu {\r\n    position: static;\r\n    float: none;\r\n    width: auto;\r\n    margin-top: 0;\r\n    background-color: transparent;\r\n    border: 0;\r\n    box-shadow: none;\r\n  }\r\n  .navbar-nav .open .dropdown-menu > li > a,\r\n  .navbar-nav .open .dropdown-menu .dropdown-header {\r\n    padding: 5px 15px 5px 25px;\r\n  }\r\n  .navbar-nav .open .dropdown-menu > li > a {\r\n    line-height: 18px;\r\n  }\r\n  .navbar-nav .open .dropdown-menu > li > a:hover,\r\n  .navbar-nav .open .dropdown-menu > li > a:focus {\r\n    background-image: none;\r\n  }\r\n}\r\n@media (min-width: 541px) {\r\n  .navbar-nav {\r\n    float: left;\r\n    margin: 0;\r\n  }\r\n  .navbar-nav > li {\r\n    float: left;\r\n  }\r\n  .navbar-nav > li > a {\r\n    padding-top: 6px;\r\n    padding-bottom: 6px;\r\n  }\r\n}\r\n.navbar-form {\r\n  margin-left: 0px;\r\n  margin-right: 0px;\r\n  padding: 10px 0px;\r\n  border-top: 1px solid transparent;\r\n  border-bottom: 1px solid transparent;\r\n  -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1);\r\n  box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1);\r\n  margin-top: -1px;\r\n  margin-bottom: -1px;\r\n}\r\n@media (min-width: 768px) {\r\n  .navbar-form .form-group {\r\n    display: inline-block;\r\n    margin-bottom: 0;\r\n    vertical-align: middle;\r\n  }\r\n  .navbar-form .form-control {\r\n    display: inline-block;\r\n    width: auto;\r\n    vertical-align: middle;\r\n  }\r\n  .navbar-form .form-control-static {\r\n    display: inline-block;\r\n  }\r\n  .navbar-form .input-group {\r\n    display: inline-table;\r\n    vertical-align: middle;\r\n  }\r\n  .navbar-form .input-group .input-group-addon,\r\n  .navbar-form .input-group .input-group-btn,\r\n  .navbar-form .input-group .form-control {\r\n    width: auto;\r\n  }\r\n  .navbar-form .input-group > .form-control {\r\n    width: 100%;\r\n  }\r\n  .navbar-form .control-label {\r\n    margin-bottom: 0;\r\n    vertical-align: middle;\r\n  }\r\n  .navbar-form .radio,\r\n  .navbar-form .checkbox {\r\n    display: inline-block;\r\n    margin-top: 0;\r\n    margin-bottom: 0;\r\n    vertical-align: middle;\r\n  }\r\n  .navbar-form .radio label,\r\n  .navbar-form .checkbox label {\r\n    padding-left: 0;\r\n  }\r\n  .navbar-form .radio input[type=\"radio\"],\r\n  .navbar-form .checkbox input[type=\"checkbox\"] {\r\n    position: relative;\r\n    margin-left: 0;\r\n  }\r\n  .navbar-form .has-feedback .form-control-feedback {\r\n    top: 0;\r\n  }\r\n}\r\n@media (max-width: 540px) {\r\n  .navbar-form .form-group {\r\n    margin-bottom: 5px;\r\n  }\r\n  .navbar-form .form-group:last-child {\r\n    margin-bottom: 0;\r\n  }\r\n}\r\n@media (min-width: 541px) {\r\n  .navbar-form {\r\n    width: auto;\r\n    border: 0;\r\n    margin-left: 0;\r\n    margin-right: 0;\r\n    padding-top: 0;\r\n    padding-bottom: 0;\r\n    -webkit-box-shadow: none;\r\n    box-shadow: none;\r\n  }\r\n}\r\n.navbar-nav > li > .dropdown-menu {\r\n  margin-top: 0;\r\n  border-top-right-radius: 0;\r\n  border-top-left-radius: 0;\r\n}\r\n.navbar-fixed-bottom .navbar-nav > li > .dropdown-menu {\r\n  margin-bottom: 0;\r\n  border-top-right-radius: 2px;\r\n  border-top-left-radius: 2px;\r\n  border-bottom-right-radius: 0;\r\n  border-bottom-left-radius: 0;\r\n}\r\n.navbar-btn {\r\n  margin-top: -1px;\r\n  margin-bottom: -1px;\r\n}\r\n.navbar-btn.btn-sm {\r\n  margin-top: 0px;\r\n  margin-bottom: 0px;\r\n}\r\n.navbar-btn.btn-xs {\r\n  margin-top: 4px;\r\n  margin-bottom: 4px;\r\n}\r\n.navbar-text {\r\n  margin-top: 6px;\r\n  margin-bottom: 6px;\r\n}\r\n@media (min-width: 541px) {\r\n  .navbar-text {\r\n    float: left;\r\n    margin-left: 0px;\r\n    margin-right: 0px;\r\n  }\r\n}\r\n@media (min-width: 541px) {\r\n  .navbar-left {\r\n    float: left !important;\r\n    float: left;\r\n  }\r\n  .navbar-right {\r\n    float: right !important;\r\n    float: right;\r\n    margin-right: 0px;\r\n  }\r\n  .navbar-right ~ .navbar-right {\r\n    margin-right: 0;\r\n  }\r\n}\r\n.navbar-default {\r\n  background-color: #f8f8f8;\r\n  border-color: #e7e7e7;\r\n}\r\n.navbar-default .navbar-brand {\r\n  color: #777;\r\n}\r\n.navbar-default .navbar-brand:hover,\r\n.navbar-default .navbar-brand:focus {\r\n  color: #5e5e5e;\r\n  background-color: transparent;\r\n}\r\n.navbar-default .navbar-text {\r\n  color: #777;\r\n}\r\n.navbar-default .navbar-nav > li > a {\r\n  color: #777;\r\n}\r\n.navbar-default .navbar-nav > li > a:hover,\r\n.navbar-default .navbar-nav > li > a:focus {\r\n  color: #333;\r\n  background-color: transparent;\r\n}\r\n.navbar-default .navbar-nav > .active > a,\r\n.navbar-default .navbar-nav > .active > a:hover,\r\n.navbar-default .navbar-nav > .active > a:focus {\r\n  color: #555;\r\n  background-color: #e7e7e7;\r\n}\r\n.navbar-default .navbar-nav > .disabled > a,\r\n.navbar-default .navbar-nav > .disabled > a:hover,\r\n.navbar-default .navbar-nav > .disabled > a:focus {\r\n  color: #ccc;\r\n  background-color: transparent;\r\n}\r\n.navbar-default .navbar-toggle {\r\n  border-color: #ddd;\r\n}\r\n.navbar-default .navbar-toggle:hover,\r\n.navbar-default .navbar-toggle:focus {\r\n  background-color: #ddd;\r\n}\r\n.navbar-default .navbar-toggle .icon-bar {\r\n  background-color: #888;\r\n}\r\n.navbar-default .navbar-collapse,\r\n.navbar-default .navbar-form {\r\n  border-color: #e7e7e7;\r\n}\r\n.navbar-default .navbar-nav > .open > a,\r\n.navbar-default .navbar-nav > .open > a:hover,\r\n.navbar-default .navbar-nav > .open > a:focus {\r\n  background-color: #e7e7e7;\r\n  color: #555;\r\n}\r\n@media (max-width: 540px) {\r\n  .navbar-default .navbar-nav .open .dropdown-menu > li > a {\r\n    color: #777;\r\n  }\r\n  .navbar-default .navbar-nav .open .dropdown-menu > li > a:hover,\r\n  .navbar-default .navbar-nav .open .dropdown-menu > li > a:focus {\r\n    color: #333;\r\n    background-color: transparent;\r\n  }\r\n  .navbar-default .navbar-nav .open .dropdown-menu > .active > a,\r\n  .navbar-default .navbar-nav .open .dropdown-menu > .active > a:hover,\r\n  .navbar-default .navbar-nav .open .dropdown-menu > .active > a:focus {\r\n    color: #555;\r\n    background-color: #e7e7e7;\r\n  }\r\n  .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a,\r\n  .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:hover,\r\n  .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:focus {\r\n    color: #ccc;\r\n    background-color: transparent;\r\n  }\r\n}\r\n.navbar-default .navbar-link {\r\n  color: #777;\r\n}\r\n.navbar-default .navbar-link:hover {\r\n  color: #333;\r\n}\r\n.navbar-default .btn-link {\r\n  color: #777;\r\n}\r\n.navbar-default .btn-link:hover,\r\n.navbar-default .btn-link:focus {\r\n  color: #333;\r\n}\r\n.navbar-default .btn-link[disabled]:hover,\r\nfieldset[disabled] .navbar-default .btn-link:hover,\r\n.navbar-default .btn-link[disabled]:focus,\r\nfieldset[disabled] .navbar-default .btn-link:focus {\r\n  color: #ccc;\r\n}\r\n.navbar-inverse {\r\n  background-color: #222;\r\n  border-color: #080808;\r\n}\r\n.navbar-inverse .navbar-brand {\r\n  color: #9d9d9d;\r\n}\r\n.navbar-inverse .navbar-brand:hover,\r\n.navbar-inverse .navbar-brand:focus {\r\n  color: #fff;\r\n  background-color: transparent;\r\n}\r\n.navbar-inverse .navbar-text {\r\n  color: #9d9d9d;\r\n}\r\n.navbar-inverse .navbar-nav > li > a {\r\n  color: #9d9d9d;\r\n}\r\n.navbar-inverse .navbar-nav > li > a:hover,\r\n.navbar-inverse .navbar-nav > li > a:focus {\r\n  color: #fff;\r\n  background-color: transparent;\r\n}\r\n.navbar-inverse .navbar-nav > .active > a,\r\n.navbar-inverse .navbar-nav > .active > a:hover,\r\n.navbar-inverse .navbar-nav > .active > a:focus {\r\n  color: #fff;\r\n  background-color: #080808;\r\n}\r\n.navbar-inverse .navbar-nav > .disabled > a,\r\n.navbar-inverse .navbar-nav > .disabled > a:hover,\r\n.navbar-inverse .navbar-nav > .disabled > a:focus {\r\n  color: #444;\r\n  background-color: transparent;\r\n}\r\n.navbar-inverse .navbar-toggle {\r\n  border-color: #333;\r\n}\r\n.navbar-inverse .navbar-toggle:hover,\r\n.navbar-inverse .navbar-toggle:focus {\r\n  background-color: #333;\r\n}\r\n.navbar-inverse .navbar-toggle .icon-bar {\r\n  background-color: #fff;\r\n}\r\n.navbar-inverse .navbar-collapse,\r\n.navbar-inverse .navbar-form {\r\n  border-color: #101010;\r\n}\r\n.navbar-inverse .navbar-nav > .open > a,\r\n.navbar-inverse .navbar-nav > .open > a:hover,\r\n.navbar-inverse .navbar-nav > .open > a:focus {\r\n  background-color: #080808;\r\n  color: #fff;\r\n}\r\n@media (max-width: 540px) {\r\n  .navbar-inverse .navbar-nav .open .dropdown-menu > .dropdown-header {\r\n    border-color: #080808;\r\n  }\r\n  .navbar-inverse .navbar-nav .open .dropdown-menu .divider {\r\n    background-color: #080808;\r\n  }\r\n  .navbar-inverse .navbar-nav .open .dropdown-menu > li > a {\r\n    color: #9d9d9d;\r\n  }\r\n  .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:hover,\r\n  .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:focus {\r\n    color: #fff;\r\n    background-color: transparent;\r\n  }\r\n  .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a,\r\n  .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:hover,\r\n  .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:focus {\r\n    color: #fff;\r\n    background-color: #080808;\r\n  }\r\n  .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a,\r\n  .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:hover,\r\n  .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:focus {\r\n    color: #444;\r\n    background-color: transparent;\r\n  }\r\n}\r\n.navbar-inverse .navbar-link {\r\n  color: #9d9d9d;\r\n}\r\n.navbar-inverse .navbar-link:hover {\r\n  color: #fff;\r\n}\r\n.navbar-inverse .btn-link {\r\n  color: #9d9d9d;\r\n}\r\n.navbar-inverse .btn-link:hover,\r\n.navbar-inverse .btn-link:focus {\r\n  color: #fff;\r\n}\r\n.navbar-inverse .btn-link[disabled]:hover,\r\nfieldset[disabled] .navbar-inverse .btn-link:hover,\r\n.navbar-inverse .btn-link[disabled]:focus,\r\nfieldset[disabled] .navbar-inverse .btn-link:focus {\r\n  color: #444;\r\n}\r\n.breadcrumb {\r\n  padding: 8px 15px;\r\n  margin-bottom: 18px;\r\n  list-style: none;\r\n  background-color: #f5f5f5;\r\n  border-radius: 2px;\r\n}\r\n.breadcrumb > li {\r\n  display: inline-block;\r\n}\r\n.breadcrumb > li + li:before {\r\n  content: \"/\\00a0\";\r\n  padding: 0 5px;\r\n  color: #5e5e5e;\r\n}\r\n.breadcrumb > .active {\r\n  color: #777777;\r\n}\r\n.pagination {\r\n  display: inline-block;\r\n  padding-left: 0;\r\n  margin: 18px 0;\r\n  border-radius: 2px;\r\n}\r\n.pagination > li {\r\n  display: inline;\r\n}\r\n.pagination > li > a,\r\n.pagination > li > span {\r\n  position: relative;\r\n  float: left;\r\n  padding: 6px 12px;\r\n  line-height: 1.42857143;\r\n  text-decoration: none;\r\n  color: #337ab7;\r\n  background-color: #fff;\r\n  border: 1px solid #ddd;\r\n  margin-left: -1px;\r\n}\r\n.pagination > li:first-child > a,\r\n.pagination > li:first-child > span {\r\n  margin-left: 0;\r\n  border-bottom-left-radius: 2px;\r\n  border-top-left-radius: 2px;\r\n}\r\n.pagination > li:last-child > a,\r\n.pagination > li:last-child > span {\r\n  border-bottom-right-radius: 2px;\r\n  border-top-right-radius: 2px;\r\n}\r\n.pagination > li > a:hover,\r\n.pagination > li > span:hover,\r\n.pagination > li > a:focus,\r\n.pagination > li > span:focus {\r\n  z-index: 2;\r\n  color: #23527c;\r\n  background-color: #eeeeee;\r\n  border-color: #ddd;\r\n}\r\n.pagination > .active > a,\r\n.pagination > .active > span,\r\n.pagination > .active > a:hover,\r\n.pagination > .active > span:hover,\r\n.pagination > .active > a:focus,\r\n.pagination > .active > span:focus {\r\n  z-index: 3;\r\n  color: #fff;\r\n  background-color: #337ab7;\r\n  border-color: #337ab7;\r\n  cursor: default;\r\n}\r\n.pagination > .disabled > span,\r\n.pagination > .disabled > span:hover,\r\n.pagination > .disabled > span:focus,\r\n.pagination > .disabled > a,\r\n.pagination > .disabled > a:hover,\r\n.pagination > .disabled > a:focus {\r\n  color: #777777;\r\n  background-color: #fff;\r\n  border-color: #ddd;\r\n  cursor: not-allowed;\r\n}\r\n.pagination-lg > li > a,\r\n.pagination-lg > li > span {\r\n  padding: 10px 16px;\r\n  font-size: 17px;\r\n  line-height: 1.3333333;\r\n}\r\n.pagination-lg > li:first-child > a,\r\n.pagination-lg > li:first-child > span {\r\n  border-bottom-left-radius: 3px;\r\n  border-top-left-radius: 3px;\r\n}\r\n.pagination-lg > li:last-child > a,\r\n.pagination-lg > li:last-child > span {\r\n  border-bottom-right-radius: 3px;\r\n  border-top-right-radius: 3px;\r\n}\r\n.pagination-sm > li > a,\r\n.pagination-sm > li > span {\r\n  padding: 5px 10px;\r\n  font-size: 12px;\r\n  line-height: 1.5;\r\n}\r\n.pagination-sm > li:first-child > a,\r\n.pagination-sm > li:first-child > span {\r\n  border-bottom-left-radius: 1px;\r\n  border-top-left-radius: 1px;\r\n}\r\n.pagination-sm > li:last-child > a,\r\n.pagination-sm > li:last-child > span {\r\n  border-bottom-right-radius: 1px;\r\n  border-top-right-radius: 1px;\r\n}\r\n.pager {\r\n  padding-left: 0;\r\n  margin: 18px 0;\r\n  list-style: none;\r\n  text-align: center;\r\n}\r\n.pager li {\r\n  display: inline;\r\n}\r\n.pager li > a,\r\n.pager li > span {\r\n  display: inline-block;\r\n  padding: 5px 14px;\r\n  background-color: #fff;\r\n  border: 1px solid #ddd;\r\n  border-radius: 15px;\r\n}\r\n.pager li > a:hover,\r\n.pager li > a:focus {\r\n  text-decoration: none;\r\n  background-color: #eeeeee;\r\n}\r\n.pager .next > a,\r\n.pager .next > span {\r\n  float: right;\r\n}\r\n.pager .previous > a,\r\n.pager .previous > span {\r\n  float: left;\r\n}\r\n.pager .disabled > a,\r\n.pager .disabled > a:hover,\r\n.pager .disabled > a:focus,\r\n.pager .disabled > span {\r\n  color: #777777;\r\n  background-color: #fff;\r\n  cursor: not-allowed;\r\n}\r\n.label {\r\n  display: inline;\r\n  padding: .2em .6em .3em;\r\n  font-size: 75%;\r\n  font-weight: bold;\r\n  line-height: 1;\r\n  color: #fff;\r\n  text-align: center;\r\n  white-space: nowrap;\r\n  vertical-align: baseline;\r\n  border-radius: .25em;\r\n}\r\na.label:hover,\r\na.label:focus {\r\n  color: #fff;\r\n  text-decoration: none;\r\n  cursor: pointer;\r\n}\r\n.label:empty {\r\n  display: none;\r\n}\r\n.btn .label {\r\n  position: relative;\r\n  top: -1px;\r\n}\r\n.label-default {\r\n  background-color: #777777;\r\n}\r\n.label-default[href]:hover,\r\n.label-default[href]:focus {\r\n  background-color: #5e5e5e;\r\n}\r\n.label-primary {\r\n  background-color: #337ab7;\r\n}\r\n.label-primary[href]:hover,\r\n.label-primary[href]:focus {\r\n  background-color: #286090;\r\n}\r\n.label-success {\r\n  background-color: #5cb85c;\r\n}\r\n.label-success[href]:hover,\r\n.label-success[href]:focus {\r\n  background-color: #449d44;\r\n}\r\n.label-info {\r\n  background-color: #5bc0de;\r\n}\r\n.label-info[href]:hover,\r\n.label-info[href]:focus {\r\n  background-color: #31b0d5;\r\n}\r\n.label-warning {\r\n  background-color: #f0ad4e;\r\n}\r\n.label-warning[href]:hover,\r\n.label-warning[href]:focus {\r\n  background-color: #ec971f;\r\n}\r\n.label-danger {\r\n  background-color: #d9534f;\r\n}\r\n.label-danger[href]:hover,\r\n.label-danger[href]:focus {\r\n  background-color: #c9302c;\r\n}\r\n.badge {\r\n  display: inline-block;\r\n  min-width: 10px;\r\n  padding: 3px 7px;\r\n  font-size: 12px;\r\n  font-weight: bold;\r\n  color: #fff;\r\n  line-height: 1;\r\n  vertical-align: middle;\r\n  white-space: nowrap;\r\n  text-align: center;\r\n  background-color: #777777;\r\n  border-radius: 10px;\r\n}\r\n.badge:empty {\r\n  display: none;\r\n}\r\n.btn .badge {\r\n  position: relative;\r\n  top: -1px;\r\n}\r\n.btn-xs .badge,\r\n.btn-group-xs > .btn .badge {\r\n  top: 0;\r\n  padding: 1px 5px;\r\n}\r\na.badge:hover,\r\na.badge:focus {\r\n  color: #fff;\r\n  text-decoration: none;\r\n  cursor: pointer;\r\n}\r\n.list-group-item.active > .badge,\r\n.nav-pills > .active > a > .badge {\r\n  color: #337ab7;\r\n  background-color: #fff;\r\n}\r\n.list-group-item > .badge {\r\n  float: right;\r\n}\r\n.list-group-item > .badge + .badge {\r\n  margin-right: 5px;\r\n}\r\n.nav-pills > li > a > .badge {\r\n  margin-left: 3px;\r\n}\r\n.jumbotron {\r\n  padding-top: 30px;\r\n  padding-bottom: 30px;\r\n  margin-bottom: 30px;\r\n  color: inherit;\r\n  background-color: #eeeeee;\r\n}\r\n.jumbotron h1,\r\n.jumbotron .h1 {\r\n  color: inherit;\r\n}\r\n.jumbotron p {\r\n  margin-bottom: 15px;\r\n  font-size: 20px;\r\n  font-weight: 200;\r\n}\r\n.jumbotron > hr {\r\n  border-top-color: #d5d5d5;\r\n}\r\n.container .jumbotron,\r\n.container-fluid .jumbotron {\r\n  border-radius: 3px;\r\n  padding-left: 0px;\r\n  padding-right: 0px;\r\n}\r\n.jumbotron .container {\r\n  max-width: 100%;\r\n}\r\n@media screen and (min-width: 768px) {\r\n  .jumbotron {\r\n    padding-top: 48px;\r\n    padding-bottom: 48px;\r\n  }\r\n  .container .jumbotron,\r\n  .container-fluid .jumbotron {\r\n    padding-left: 60px;\r\n    padding-right: 60px;\r\n  }\r\n  .jumbotron h1,\r\n  .jumbotron .h1 {\r\n    font-size: 59px;\r\n  }\r\n}\r\n.thumbnail {\r\n  display: block;\r\n  padding: 4px;\r\n  margin-bottom: 18px;\r\n  line-height: 1.42857143;\r\n  background-color: #fff;\r\n  border: 1px solid #ddd;\r\n  border-radius: 2px;\r\n  -webkit-transition: border 0.2s ease-in-out;\r\n  -o-transition: border 0.2s ease-in-out;\r\n  transition: border 0.2s ease-in-out;\r\n}\r\n.thumbnail > img,\r\n.thumbnail a > img {\r\n  margin-left: auto;\r\n  margin-right: auto;\r\n}\r\na.thumbnail:hover,\r\na.thumbnail:focus,\r\na.thumbnail.active {\r\n  border-color: #337ab7;\r\n}\r\n.thumbnail .caption {\r\n  padding: 9px;\r\n  color: #000;\r\n}\r\n.alert {\r\n  padding: 15px;\r\n  margin-bottom: 18px;\r\n  border: 1px solid transparent;\r\n  border-radius: 2px;\r\n}\r\n.alert h4 {\r\n  margin-top: 0;\r\n  color: inherit;\r\n}\r\n.alert .alert-link {\r\n  font-weight: bold;\r\n}\r\n.alert > p,\r\n.alert > ul {\r\n  margin-bottom: 0;\r\n}\r\n.alert > p + p {\r\n  margin-top: 5px;\r\n}\r\n.alert-dismissable,\r\n.alert-dismissible {\r\n  padding-right: 35px;\r\n}\r\n.alert-dismissable .close,\r\n.alert-dismissible .close {\r\n  position: relative;\r\n  top: -2px;\r\n  right: -21px;\r\n  color: inherit;\r\n}\r\n.alert-success {\r\n  background-color: #dff0d8;\r\n  border-color: #d6e9c6;\r\n  color: #3c763d;\r\n}\r\n.alert-success hr {\r\n  border-top-color: #c9e2b3;\r\n}\r\n.alert-success .alert-link {\r\n  color: #2b542c;\r\n}\r\n.alert-info {\r\n  background-color: #d9edf7;\r\n  border-color: #bce8f1;\r\n  color: #31708f;\r\n}\r\n.alert-info hr {\r\n  border-top-color: #a6e1ec;\r\n}\r\n.alert-info .alert-link {\r\n  color: #245269;\r\n}\r\n.alert-warning {\r\n  background-color: #fcf8e3;\r\n  border-color: #faebcc;\r\n  color: #8a6d3b;\r\n}\r\n.alert-warning hr {\r\n  border-top-color: #f7e1b5;\r\n}\r\n.alert-warning .alert-link {\r\n  color: #66512c;\r\n}\r\n.alert-danger {\r\n  background-color: #f2dede;\r\n  border-color: #ebccd1;\r\n  color: #a94442;\r\n}\r\n.alert-danger hr {\r\n  border-top-color: #e4b9c0;\r\n}\r\n.alert-danger .alert-link {\r\n  color: #843534;\r\n}\r\n@-webkit-keyframes progress-bar-stripes {\r\n  from {\r\n    background-position: 40px 0;\r\n  }\r\n  to {\r\n    background-position: 0 0;\r\n  }\r\n}\r\n@keyframes progress-bar-stripes {\r\n  from {\r\n    background-position: 40px 0;\r\n  }\r\n  to {\r\n    background-position: 0 0;\r\n  }\r\n}\r\n.progress {\r\n  overflow: hidden;\r\n  height: 18px;\r\n  margin-bottom: 18px;\r\n  background-color: #f5f5f5;\r\n  border-radius: 2px;\r\n  -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1);\r\n  box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1);\r\n}\r\n.progress-bar {\r\n  float: left;\r\n  width: 0%;\r\n  height: 100%;\r\n  font-size: 12px;\r\n  line-height: 18px;\r\n  color: #fff;\r\n  text-align: center;\r\n  background-color: #337ab7;\r\n  -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15);\r\n  box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15);\r\n  -webkit-transition: width 0.6s ease;\r\n  -o-transition: width 0.6s ease;\r\n  transition: width 0.6s ease;\r\n}\r\n.progress-striped .progress-bar,\r\n.progress-bar-striped {\r\n  background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\r\n  background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\r\n  background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\r\n  background-size: 40px 40px;\r\n}\r\n.progress.active .progress-bar,\r\n.progress-bar.active {\r\n  -webkit-animation: progress-bar-stripes 2s linear infinite;\r\n  -o-animation: progress-bar-stripes 2s linear infinite;\r\n  animation: progress-bar-stripes 2s linear infinite;\r\n}\r\n.progress-bar-success {\r\n  background-color: #5cb85c;\r\n}\r\n.progress-striped .progress-bar-success {\r\n  background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\r\n  background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\r\n  background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\r\n}\r\n.progress-bar-info {\r\n  background-color: #5bc0de;\r\n}\r\n.progress-striped .progress-bar-info {\r\n  background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\r\n  background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\r\n  background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\r\n}\r\n.progress-bar-warning {\r\n  background-color: #f0ad4e;\r\n}\r\n.progress-striped .progress-bar-warning {\r\n  background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\r\n  background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\r\n  background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\r\n}\r\n.progress-bar-danger {\r\n  background-color: #d9534f;\r\n}\r\n.progress-striped .progress-bar-danger {\r\n  background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\r\n  background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\r\n  background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\r\n}\r\n.media {\r\n  margin-top: 15px;\r\n}\r\n.media:first-child {\r\n  margin-top: 0;\r\n}\r\n.media,\r\n.media-body {\r\n  zoom: 1;\r\n  overflow: hidden;\r\n}\r\n.media-body {\r\n  width: 10000px;\r\n}\r\n.media-object {\r\n  display: block;\r\n}\r\n.media-object.img-thumbnail {\r\n  max-width: none;\r\n}\r\n.media-right,\r\n.media > .pull-right {\r\n  padding-left: 10px;\r\n}\r\n.media-left,\r\n.media > .pull-left {\r\n  padding-right: 10px;\r\n}\r\n.media-left,\r\n.media-right,\r\n.media-body {\r\n  display: table-cell;\r\n  vertical-align: top;\r\n}\r\n.media-middle {\r\n  vertical-align: middle;\r\n}\r\n.media-bottom {\r\n  vertical-align: bottom;\r\n}\r\n.media-heading {\r\n  margin-top: 0;\r\n  margin-bottom: 5px;\r\n}\r\n.media-list {\r\n  padding-left: 0;\r\n  list-style: none;\r\n}\r\n.list-group {\r\n  margin-bottom: 20px;\r\n  padding-left: 0;\r\n}\r\n.list-group-item {\r\n  position: relative;\r\n  display: block;\r\n  padding: 10px 15px;\r\n  margin-bottom: -1px;\r\n  background-color: #fff;\r\n  border: 1px solid #ddd;\r\n}\r\n.list-group-item:first-child {\r\n  border-top-right-radius: 2px;\r\n  border-top-left-radius: 2px;\r\n}\r\n.list-group-item:last-child {\r\n  margin-bottom: 0;\r\n  border-bottom-right-radius: 2px;\r\n  border-bottom-left-radius: 2px;\r\n}\r\na.list-group-item,\r\nbutton.list-group-item {\r\n  color: #555;\r\n}\r\na.list-group-item .list-group-item-heading,\r\nbutton.list-group-item .list-group-item-heading {\r\n  color: #333;\r\n}\r\na.list-group-item:hover,\r\nbutton.list-group-item:hover,\r\na.list-group-item:focus,\r\nbutton.list-group-item:focus {\r\n  text-decoration: none;\r\n  color: #555;\r\n  background-color: #f5f5f5;\r\n}\r\nbutton.list-group-item {\r\n  width: 100%;\r\n  text-align: left;\r\n}\r\n.list-group-item.disabled,\r\n.list-group-item.disabled:hover,\r\n.list-group-item.disabled:focus {\r\n  background-color: #eeeeee;\r\n  color: #777777;\r\n  cursor: not-allowed;\r\n}\r\n.list-group-item.disabled .list-group-item-heading,\r\n.list-group-item.disabled:hover .list-group-item-heading,\r\n.list-group-item.disabled:focus .list-group-item-heading {\r\n  color: inherit;\r\n}\r\n.list-group-item.disabled .list-group-item-text,\r\n.list-group-item.disabled:hover .list-group-item-text,\r\n.list-group-item.disabled:focus .list-group-item-text {\r\n  color: #777777;\r\n}\r\n.list-group-item.active,\r\n.list-group-item.active:hover,\r\n.list-group-item.active:focus {\r\n  z-index: 2;\r\n  color: #fff;\r\n  background-color: #337ab7;\r\n  border-color: #337ab7;\r\n}\r\n.list-group-item.active .list-group-item-heading,\r\n.list-group-item.active:hover .list-group-item-heading,\r\n.list-group-item.active:focus .list-group-item-heading,\r\n.list-group-item.active .list-group-item-heading > small,\r\n.list-group-item.active:hover .list-group-item-heading > small,\r\n.list-group-item.active:focus .list-group-item-heading > small,\r\n.list-group-item.active .list-group-item-heading > .small,\r\n.list-group-item.active:hover .list-group-item-heading > .small,\r\n.list-group-item.active:focus .list-group-item-heading > .small {\r\n  color: inherit;\r\n}\r\n.list-group-item.active .list-group-item-text,\r\n.list-group-item.active:hover .list-group-item-text,\r\n.list-group-item.active:focus .list-group-item-text {\r\n  color: #c7ddef;\r\n}\r\n.list-group-item-success {\r\n  color: #3c763d;\r\n  background-color: #dff0d8;\r\n}\r\na.list-group-item-success,\r\nbutton.list-group-item-success {\r\n  color: #3c763d;\r\n}\r\na.list-group-item-success .list-group-item-heading,\r\nbutton.list-group-item-success .list-group-item-heading {\r\n  color: inherit;\r\n}\r\na.list-group-item-success:hover,\r\nbutton.list-group-item-success:hover,\r\na.list-group-item-success:focus,\r\nbutton.list-group-item-success:focus {\r\n  color: #3c763d;\r\n  background-color: #d0e9c6;\r\n}\r\na.list-group-item-success.active,\r\nbutton.list-group-item-success.active,\r\na.list-group-item-success.active:hover,\r\nbutton.list-group-item-success.active:hover,\r\na.list-group-item-success.active:focus,\r\nbutton.list-group-item-success.active:focus {\r\n  color: #fff;\r\n  background-color: #3c763d;\r\n  border-color: #3c763d;\r\n}\r\n.list-group-item-info {\r\n  color: #31708f;\r\n  background-color: #d9edf7;\r\n}\r\na.list-group-item-info,\r\nbutton.list-group-item-info {\r\n  color: #31708f;\r\n}\r\na.list-group-item-info .list-group-item-heading,\r\nbutton.list-group-item-info .list-group-item-heading {\r\n  color: inherit;\r\n}\r\na.list-group-item-info:hover,\r\nbutton.list-group-item-info:hover,\r\na.list-group-item-info:focus,\r\nbutton.list-group-item-info:focus {\r\n  color: #31708f;\r\n  background-color: #c4e3f3;\r\n}\r\na.list-group-item-info.active,\r\nbutton.list-group-item-info.active,\r\na.list-group-item-info.active:hover,\r\nbutton.list-group-item-info.active:hover,\r\na.list-group-item-info.active:focus,\r\nbutton.list-group-item-info.active:focus {\r\n  color: #fff;\r\n  background-color: #31708f;\r\n  border-color: #31708f;\r\n}\r\n.list-group-item-warning {\r\n  color: #8a6d3b;\r\n  background-color: #fcf8e3;\r\n}\r\na.list-group-item-warning,\r\nbutton.list-group-item-warning {\r\n  color: #8a6d3b;\r\n}\r\na.list-group-item-warning .list-group-item-heading,\r\nbutton.list-group-item-warning .list-group-item-heading {\r\n  color: inherit;\r\n}\r\na.list-group-item-warning:hover,\r\nbutton.list-group-item-warning:hover,\r\na.list-group-item-warning:focus,\r\nbutton.list-group-item-warning:focus {\r\n  color: #8a6d3b;\r\n  background-color: #faf2cc;\r\n}\r\na.list-group-item-warning.active,\r\nbutton.list-group-item-warning.active,\r\na.list-group-item-warning.active:hover,\r\nbutton.list-group-item-warning.active:hover,\r\na.list-group-item-warning.active:focus,\r\nbutton.list-group-item-warning.active:focus {\r\n  color: #fff;\r\n  background-color: #8a6d3b;\r\n  border-color: #8a6d3b;\r\n}\r\n.list-group-item-danger {\r\n  color: #a94442;\r\n  background-color: #f2dede;\r\n}\r\na.list-group-item-danger,\r\nbutton.list-group-item-danger {\r\n  color: #a94442;\r\n}\r\na.list-group-item-danger .list-group-item-heading,\r\nbutton.list-group-item-danger .list-group-item-heading {\r\n  color: inherit;\r\n}\r\na.list-group-item-danger:hover,\r\nbutton.list-group-item-danger:hover,\r\na.list-group-item-danger:focus,\r\nbutton.list-group-item-danger:focus {\r\n  color: #a94442;\r\n  background-color: #ebcccc;\r\n}\r\na.list-group-item-danger.active,\r\nbutton.list-group-item-danger.active,\r\na.list-group-item-danger.active:hover,\r\nbutton.list-group-item-danger.active:hover,\r\na.list-group-item-danger.active:focus,\r\nbutton.list-group-item-danger.active:focus {\r\n  color: #fff;\r\n  background-color: #a94442;\r\n  border-color: #a94442;\r\n}\r\n.list-group-item-heading {\r\n  margin-top: 0;\r\n  margin-bottom: 5px;\r\n}\r\n.list-group-item-text {\r\n  margin-bottom: 0;\r\n  line-height: 1.3;\r\n}\r\n.panel {\r\n  margin-bottom: 18px;\r\n  background-color: #fff;\r\n  border: 1px solid transparent;\r\n  border-radius: 2px;\r\n  -webkit-box-shadow: 0 1px 1px rgba(0, 0, 0, 0.05);\r\n  box-shadow: 0 1px 1px rgba(0, 0, 0, 0.05);\r\n}\r\n.panel-body {\r\n  padding: 15px;\r\n}\r\n.panel-heading {\r\n  padding: 10px 15px;\r\n  border-bottom: 1px solid transparent;\r\n  border-top-right-radius: 1px;\r\n  border-top-left-radius: 1px;\r\n}\r\n.panel-heading > .dropdown .dropdown-toggle {\r\n  color: inherit;\r\n}\r\n.panel-title {\r\n  margin-top: 0;\r\n  margin-bottom: 0;\r\n  font-size: 15px;\r\n  color: inherit;\r\n}\r\n.panel-title > a,\r\n.panel-title > small,\r\n.panel-title > .small,\r\n.panel-title > small > a,\r\n.panel-title > .small > a {\r\n  color: inherit;\r\n}\r\n.panel-footer {\r\n  padding: 10px 15px;\r\n  background-color: #f5f5f5;\r\n  border-top: 1px solid #ddd;\r\n  border-bottom-right-radius: 1px;\r\n  border-bottom-left-radius: 1px;\r\n}\r\n.panel > .list-group,\r\n.panel > .panel-collapse > .list-group {\r\n  margin-bottom: 0;\r\n}\r\n.panel > .list-group .list-group-item,\r\n.panel > .panel-collapse > .list-group .list-group-item {\r\n  border-width: 1px 0;\r\n  border-radius: 0;\r\n}\r\n.panel > .list-group:first-child .list-group-item:first-child,\r\n.panel > .panel-collapse > .list-group:first-child .list-group-item:first-child {\r\n  border-top: 0;\r\n  border-top-right-radius: 1px;\r\n  border-top-left-radius: 1px;\r\n}\r\n.panel > .list-group:last-child .list-group-item:last-child,\r\n.panel > .panel-collapse > .list-group:last-child .list-group-item:last-child {\r\n  border-bottom: 0;\r\n  border-bottom-right-radius: 1px;\r\n  border-bottom-left-radius: 1px;\r\n}\r\n.panel > .panel-heading + .panel-collapse > .list-group .list-group-item:first-child {\r\n  border-top-right-radius: 0;\r\n  border-top-left-radius: 0;\r\n}\r\n.panel-heading + .list-group .list-group-item:first-child {\r\n  border-top-width: 0;\r\n}\r\n.list-group + .panel-footer {\r\n  border-top-width: 0;\r\n}\r\n.panel > .table,\r\n.panel > .table-responsive > .table,\r\n.panel > .panel-collapse > .table {\r\n  margin-bottom: 0;\r\n}\r\n.panel > .table caption,\r\n.panel > .table-responsive > .table caption,\r\n.panel > .panel-collapse > .table caption {\r\n  padding-left: 15px;\r\n  padding-right: 15px;\r\n}\r\n.panel > .table:first-child,\r\n.panel > .table-responsive:first-child > .table:first-child {\r\n  border-top-right-radius: 1px;\r\n  border-top-left-radius: 1px;\r\n}\r\n.panel > .table:first-child > thead:first-child > tr:first-child,\r\n.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child,\r\n.panel > .table:first-child > tbody:first-child > tr:first-child,\r\n.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child {\r\n  border-top-left-radius: 1px;\r\n  border-top-right-radius: 1px;\r\n}\r\n.panel > .table:first-child > thead:first-child > tr:first-child td:first-child,\r\n.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:first-child,\r\n.panel > .table:first-child > tbody:first-child > tr:first-child td:first-child,\r\n.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:first-child,\r\n.panel > .table:first-child > thead:first-child > tr:first-child th:first-child,\r\n.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:first-child,\r\n.panel > .table:first-child > tbody:first-child > tr:first-child th:first-child,\r\n.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:first-child {\r\n  border-top-left-radius: 1px;\r\n}\r\n.panel > .table:first-child > thead:first-child > tr:first-child td:last-child,\r\n.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:last-child,\r\n.panel > .table:first-child > tbody:first-child > tr:first-child td:last-child,\r\n.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:last-child,\r\n.panel > .table:first-child > thead:first-child > tr:first-child th:last-child,\r\n.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:last-child,\r\n.panel > .table:first-child > tbody:first-child > tr:first-child th:last-child,\r\n.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:last-child {\r\n  border-top-right-radius: 1px;\r\n}\r\n.panel > .table:last-child,\r\n.panel > .table-responsive:last-child > .table:last-child {\r\n  border-bottom-right-radius: 1px;\r\n  border-bottom-left-radius: 1px;\r\n}\r\n.panel > .table:last-child > tbody:last-child > tr:last-child,\r\n.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child,\r\n.panel > .table:last-child > tfoot:last-child > tr:last-child,\r\n.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child {\r\n  border-bottom-left-radius: 1px;\r\n  border-bottom-right-radius: 1px;\r\n}\r\n.panel > .table:last-child > tbody:last-child > tr:last-child td:first-child,\r\n.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:first-child,\r\n.panel > .table:last-child > tfoot:last-child > tr:last-child td:first-child,\r\n.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:first-child,\r\n.panel > .table:last-child > tbody:last-child > tr:last-child th:first-child,\r\n.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:first-child,\r\n.panel > .table:last-child > tfoot:last-child > tr:last-child th:first-child,\r\n.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:first-child {\r\n  border-bottom-left-radius: 1px;\r\n}\r\n.panel > .table:last-child > tbody:last-child > tr:last-child td:last-child,\r\n.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:last-child,\r\n.panel > .table:last-child > tfoot:last-child > tr:last-child td:last-child,\r\n.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:last-child,\r\n.panel > .table:last-child > tbody:last-child > tr:last-child th:last-child,\r\n.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:last-child,\r\n.panel > .table:last-child > tfoot:last-child > tr:last-child th:last-child,\r\n.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:last-child {\r\n  border-bottom-right-radius: 1px;\r\n}\r\n.panel > .panel-body + .table,\r\n.panel > .panel-body + .table-responsive,\r\n.panel > .table + .panel-body,\r\n.panel > .table-responsive + .panel-body {\r\n  border-top: 1px solid #ddd;\r\n}\r\n.panel > .table > tbody:first-child > tr:first-child th,\r\n.panel > .table > tbody:first-child > tr:first-child td {\r\n  border-top: 0;\r\n}\r\n.panel > .table-bordered,\r\n.panel > .table-responsive > .table-bordered {\r\n  border: 0;\r\n}\r\n.panel > .table-bordered > thead > tr > th:first-child,\r\n.panel > .table-responsive > .table-bordered > thead > tr > th:first-child,\r\n.panel > .table-bordered > tbody > tr > th:first-child,\r\n.panel > .table-responsive > .table-bordered > tbody > tr > th:first-child,\r\n.panel > .table-bordered > tfoot > tr > th:first-child,\r\n.panel > .table-responsive > .table-bordered > tfoot > tr > th:first-child,\r\n.panel > .table-bordered > thead > tr > td:first-child,\r\n.panel > .table-responsive > .table-bordered > thead > tr > td:first-child,\r\n.panel > .table-bordered > tbody > tr > td:first-child,\r\n.panel > .table-responsive > .table-bordered > tbody > tr > td:first-child,\r\n.panel > .table-bordered > tfoot > tr > td:first-child,\r\n.panel > .table-responsive > .table-bordered > tfoot > tr > td:first-child {\r\n  border-left: 0;\r\n}\r\n.panel > .table-bordered > thead > tr > th:last-child,\r\n.panel > .table-responsive > .table-bordered > thead > tr > th:last-child,\r\n.panel > .table-bordered > tbody > tr > th:last-child,\r\n.panel > .table-responsive > .table-bordered > tbody > tr > th:last-child,\r\n.panel > .table-bordered > tfoot > tr > th:last-child,\r\n.panel > .table-responsive > .table-bordered > tfoot > tr > th:last-child,\r\n.panel > .table-bordered > thead > tr > td:last-child,\r\n.panel > .table-responsive > .table-bordered > thead > tr > td:last-child,\r\n.panel > .table-bordered > tbody > tr > td:last-child,\r\n.panel > .table-responsive > .table-bordered > tbody > tr > td:last-child,\r\n.panel > .table-bordered > tfoot > tr > td:last-child,\r\n.panel > .table-responsive > .table-bordered > tfoot > tr > td:last-child {\r\n  border-right: 0;\r\n}\r\n.panel > .table-bordered > thead > tr:first-child > td,\r\n.panel > .table-responsive > .table-bordered > thead > tr:first-child > td,\r\n.panel > .table-bordered > tbody > tr:first-child > td,\r\n.panel > .table-responsive > .table-bordered > tbody > tr:first-child > td,\r\n.panel > .table-bordered > thead > tr:first-child > th,\r\n.panel > .table-responsive > .table-bordered > thead > tr:first-child > th,\r\n.panel > .table-bordered > tbody > tr:first-child > th,\r\n.panel > .table-responsive > .table-bordered > tbody > tr:first-child > th {\r\n  border-bottom: 0;\r\n}\r\n.panel > .table-bordered > tbody > tr:last-child > td,\r\n.panel > .table-responsive > .table-bordered > tbody > tr:last-child > td,\r\n.panel > .table-bordered > tfoot > tr:last-child > td,\r\n.panel > .table-responsive > .table-bordered > tfoot > tr:last-child > td,\r\n.panel > .table-bordered > tbody > tr:last-child > th,\r\n.panel > .table-responsive > .table-bordered > tbody > tr:last-child > th,\r\n.panel > .table-bordered > tfoot > tr:last-child > th,\r\n.panel > .table-responsive > .table-bordered > tfoot > tr:last-child > th {\r\n  border-bottom: 0;\r\n}\r\n.panel > .table-responsive {\r\n  border: 0;\r\n  margin-bottom: 0;\r\n}\r\n.panel-group {\r\n  margin-bottom: 18px;\r\n}\r\n.panel-group .panel {\r\n  margin-bottom: 0;\r\n  border-radius: 2px;\r\n}\r\n.panel-group .panel + .panel {\r\n  margin-top: 5px;\r\n}\r\n.panel-group .panel-heading {\r\n  border-bottom: 0;\r\n}\r\n.panel-group .panel-heading + .panel-collapse > .panel-body,\r\n.panel-group .panel-heading + .panel-collapse > .list-group {\r\n  border-top: 1px solid #ddd;\r\n}\r\n.panel-group .panel-footer {\r\n  border-top: 0;\r\n}\r\n.panel-group .panel-footer + .panel-collapse .panel-body {\r\n  border-bottom: 1px solid #ddd;\r\n}\r\n.panel-default {\r\n  border-color: #ddd;\r\n}\r\n.panel-default > .panel-heading {\r\n  color: #333333;\r\n  background-color: #f5f5f5;\r\n  border-color: #ddd;\r\n}\r\n.panel-default > .panel-heading + .panel-collapse > .panel-body {\r\n  border-top-color: #ddd;\r\n}\r\n.panel-default > .panel-heading .badge {\r\n  color: #f5f5f5;\r\n  background-color: #333333;\r\n}\r\n.panel-default > .panel-footer + .panel-collapse > .panel-body {\r\n  border-bottom-color: #ddd;\r\n}\r\n.panel-primary {\r\n  border-color: #337ab7;\r\n}\r\n.panel-primary > .panel-heading {\r\n  color: #fff;\r\n  background-color: #337ab7;\r\n  border-color: #337ab7;\r\n}\r\n.panel-primary > .panel-heading + .panel-collapse > .panel-body {\r\n  border-top-color: #337ab7;\r\n}\r\n.panel-primary > .panel-heading .badge {\r\n  color: #337ab7;\r\n  background-color: #fff;\r\n}\r\n.panel-primary > .panel-footer + .panel-collapse > .panel-body {\r\n  border-bottom-color: #337ab7;\r\n}\r\n.panel-success {\r\n  border-color: #d6e9c6;\r\n}\r\n.panel-success > .panel-heading {\r\n  color: #3c763d;\r\n  background-color: #dff0d8;\r\n  border-color: #d6e9c6;\r\n}\r\n.panel-success > .panel-heading + .panel-collapse > .panel-body {\r\n  border-top-color: #d6e9c6;\r\n}\r\n.panel-success > .panel-heading .badge {\r\n  color: #dff0d8;\r\n  background-color: #3c763d;\r\n}\r\n.panel-success > .panel-footer + .panel-collapse > .panel-body {\r\n  border-bottom-color: #d6e9c6;\r\n}\r\n.panel-info {\r\n  border-color: #bce8f1;\r\n}\r\n.panel-info > .panel-heading {\r\n  color: #31708f;\r\n  background-color: #d9edf7;\r\n  border-color: #bce8f1;\r\n}\r\n.panel-info > .panel-heading + .panel-collapse > .panel-body {\r\n  border-top-color: #bce8f1;\r\n}\r\n.panel-info > .panel-heading .badge {\r\n  color: #d9edf7;\r\n  background-color: #31708f;\r\n}\r\n.panel-info > .panel-footer + .panel-collapse > .panel-body {\r\n  border-bottom-color: #bce8f1;\r\n}\r\n.panel-warning {\r\n  border-color: #faebcc;\r\n}\r\n.panel-warning > .panel-heading {\r\n  color: #8a6d3b;\r\n  background-color: #fcf8e3;\r\n  border-color: #faebcc;\r\n}\r\n.panel-warning > .panel-heading + .panel-collapse > .panel-body {\r\n  border-top-color: #faebcc;\r\n}\r\n.panel-warning > .panel-heading .badge {\r\n  color: #fcf8e3;\r\n  background-color: #8a6d3b;\r\n}\r\n.panel-warning > .panel-footer + .panel-collapse > .panel-body {\r\n  border-bottom-color: #faebcc;\r\n}\r\n.panel-danger {\r\n  border-color: #ebccd1;\r\n}\r\n.panel-danger > .panel-heading {\r\n  color: #a94442;\r\n  background-color: #f2dede;\r\n  border-color: #ebccd1;\r\n}\r\n.panel-danger > .panel-heading + .panel-collapse > .panel-body {\r\n  border-top-color: #ebccd1;\r\n}\r\n.panel-danger > .panel-heading .badge {\r\n  color: #f2dede;\r\n  background-color: #a94442;\r\n}\r\n.panel-danger > .panel-footer + .panel-collapse > .panel-body {\r\n  border-bottom-color: #ebccd1;\r\n}\r\n.embed-responsive {\r\n  position: relative;\r\n  display: block;\r\n  height: 0;\r\n  padding: 0;\r\n  overflow: hidden;\r\n}\r\n.embed-responsive .embed-responsive-item,\r\n.embed-responsive iframe,\r\n.embed-responsive embed,\r\n.embed-responsive object,\r\n.embed-responsive video {\r\n  position: absolute;\r\n  top: 0;\r\n  left: 0;\r\n  bottom: 0;\r\n  height: 100%;\r\n  width: 100%;\r\n  border: 0;\r\n}\r\n.embed-responsive-16by9 {\r\n  padding-bottom: 56.25%;\r\n}\r\n.embed-responsive-4by3 {\r\n  padding-bottom: 75%;\r\n}\r\n.well {\r\n  min-height: 20px;\r\n  padding: 19px;\r\n  margin-bottom: 20px;\r\n  background-color: #f5f5f5;\r\n  border: 1px solid #e3e3e3;\r\n  border-radius: 2px;\r\n  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05);\r\n  box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05);\r\n}\r\n.well blockquote {\r\n  border-color: #ddd;\r\n  border-color: rgba(0, 0, 0, 0.15);\r\n}\r\n.well-lg {\r\n  padding: 24px;\r\n  border-radius: 3px;\r\n}\r\n.well-sm {\r\n  padding: 9px;\r\n  border-radius: 1px;\r\n}\r\n.close {\r\n  float: right;\r\n  font-size: 19.5px;\r\n  font-weight: bold;\r\n  line-height: 1;\r\n  color: #000;\r\n  text-shadow: 0 1px 0 #fff;\r\n  opacity: 0.2;\r\n  filter: alpha(opacity=20);\r\n}\r\n.close:hover,\r\n.close:focus {\r\n  color: #000;\r\n  text-decoration: none;\r\n  cursor: pointer;\r\n  opacity: 0.5;\r\n  filter: alpha(opacity=50);\r\n}\r\nbutton.close {\r\n  padding: 0;\r\n  cursor: pointer;\r\n  background: transparent;\r\n  border: 0;\r\n  -webkit-appearance: none;\r\n}\r\n.modal-open {\r\n  overflow: hidden;\r\n}\r\n.modal {\r\n  display: none;\r\n  overflow: hidden;\r\n  position: fixed;\r\n  top: 0;\r\n  right: 0;\r\n  bottom: 0;\r\n  left: 0;\r\n  z-index: 1050;\r\n  -webkit-overflow-scrolling: touch;\r\n  outline: 0;\r\n}\r\n.modal.fade .modal-dialog {\r\n  -webkit-transform: translate(0, -25%);\r\n  -ms-transform: translate(0, -25%);\r\n  -o-transform: translate(0, -25%);\r\n  transform: translate(0, -25%);\r\n  -webkit-transition: -webkit-transform 0.3s ease-out;\r\n  -moz-transition: -moz-transform 0.3s ease-out;\r\n  -o-transition: -o-transform 0.3s ease-out;\r\n  transition: transform 0.3s ease-out;\r\n}\r\n.modal.in .modal-dialog {\r\n  -webkit-transform: translate(0, 0);\r\n  -ms-transform: translate(0, 0);\r\n  -o-transform: translate(0, 0);\r\n  transform: translate(0, 0);\r\n}\r\n.modal-open .modal {\r\n  overflow-x: hidden;\r\n  overflow-y: auto;\r\n}\r\n.modal-dialog {\r\n  position: relative;\r\n  width: auto;\r\n  margin: 10px;\r\n}\r\n.modal-content {\r\n  position: relative;\r\n  background-color: #fff;\r\n  border: 1px solid #999;\r\n  border: 1px solid rgba(0, 0, 0, 0.2);\r\n  border-radius: 3px;\r\n  -webkit-box-shadow: 0 3px 9px rgba(0, 0, 0, 0.5);\r\n  box-shadow: 0 3px 9px rgba(0, 0, 0, 0.5);\r\n  background-clip: padding-box;\r\n  outline: 0;\r\n}\r\n.modal-backdrop {\r\n  position: fixed;\r\n  top: 0;\r\n  right: 0;\r\n  bottom: 0;\r\n  left: 0;\r\n  z-index: 1040;\r\n  background-color: #000;\r\n}\r\n.modal-backdrop.fade {\r\n  opacity: 0;\r\n  filter: alpha(opacity=0);\r\n}\r\n.modal-backdrop.in {\r\n  opacity: 0.5;\r\n  filter: alpha(opacity=50);\r\n}\r\n.modal-header {\r\n  padding: 15px;\r\n  border-bottom: 1px solid #e5e5e5;\r\n}\r\n.modal-header .close {\r\n  margin-top: -2px;\r\n}\r\n.modal-title {\r\n  margin: 0;\r\n  line-height: 1.42857143;\r\n}\r\n.modal-body {\r\n  position: relative;\r\n  padding: 15px;\r\n}\r\n.modal-footer {\r\n  padding: 15px;\r\n  text-align: right;\r\n  border-top: 1px solid #e5e5e5;\r\n}\r\n.modal-footer .btn + .btn {\r\n  margin-left: 5px;\r\n  margin-bottom: 0;\r\n}\r\n.modal-footer .btn-group .btn + .btn {\r\n  margin-left: -1px;\r\n}\r\n.modal-footer .btn-block + .btn-block {\r\n  margin-left: 0;\r\n}\r\n.modal-scrollbar-measure {\r\n  position: absolute;\r\n  top: -9999px;\r\n  width: 50px;\r\n  height: 50px;\r\n  overflow: scroll;\r\n}\r\n@media (min-width: 768px) {\r\n  .modal-dialog {\r\n    width: 600px;\r\n    margin: 30px auto;\r\n  }\r\n  .modal-content {\r\n    -webkit-box-shadow: 0 5px 15px rgba(0, 0, 0, 0.5);\r\n    box-shadow: 0 5px 15px rgba(0, 0, 0, 0.5);\r\n  }\r\n  .modal-sm {\r\n    width: 300px;\r\n  }\r\n}\r\n@media (min-width: 992px) {\r\n  .modal-lg {\r\n    width: 900px;\r\n  }\r\n}\r\n.tooltip {\r\n  position: absolute;\r\n  z-index: 1070;\r\n  display: block;\r\n  font-family: \"Helvetica Neue\", Helvetica, Arial, sans-serif;\r\n  font-style: normal;\r\n  font-weight: normal;\r\n  letter-spacing: normal;\r\n  line-break: auto;\r\n  line-height: 1.42857143;\r\n  text-align: left;\r\n  text-align: start;\r\n  text-decoration: none;\r\n  text-shadow: none;\r\n  text-transform: none;\r\n  white-space: normal;\r\n  word-break: normal;\r\n  word-spacing: normal;\r\n  word-wrap: normal;\r\n  font-size: 12px;\r\n  opacity: 0;\r\n  filter: alpha(opacity=0);\r\n}\r\n.tooltip.in {\r\n  opacity: 0.9;\r\n  filter: alpha(opacity=90);\r\n}\r\n.tooltip.top {\r\n  margin-top: -3px;\r\n  padding: 5px 0;\r\n}\r\n.tooltip.right {\r\n  margin-left: 3px;\r\n  padding: 0 5px;\r\n}\r\n.tooltip.bottom {\r\n  margin-top: 3px;\r\n  padding: 5px 0;\r\n}\r\n.tooltip.left {\r\n  margin-left: -3px;\r\n  padding: 0 5px;\r\n}\r\n.tooltip-inner {\r\n  max-width: 200px;\r\n  padding: 3px 8px;\r\n  color: #fff;\r\n  text-align: center;\r\n  background-color: #000;\r\n  border-radius: 2px;\r\n}\r\n.tooltip-arrow {\r\n  position: absolute;\r\n  width: 0;\r\n  height: 0;\r\n  border-color: transparent;\r\n  border-style: solid;\r\n}\r\n.tooltip.top .tooltip-arrow {\r\n  bottom: 0;\r\n  left: 50%;\r\n  margin-left: -5px;\r\n  border-width: 5px 5px 0;\r\n  border-top-color: #000;\r\n}\r\n.tooltip.top-left .tooltip-arrow {\r\n  bottom: 0;\r\n  right: 5px;\r\n  margin-bottom: -5px;\r\n  border-width: 5px 5px 0;\r\n  border-top-color: #000;\r\n}\r\n.tooltip.top-right .tooltip-arrow {\r\n  bottom: 0;\r\n  left: 5px;\r\n  margin-bottom: -5px;\r\n  border-width: 5px 5px 0;\r\n  border-top-color: #000;\r\n}\r\n.tooltip.right .tooltip-arrow {\r\n  top: 50%;\r\n  left: 0;\r\n  margin-top: -5px;\r\n  border-width: 5px 5px 5px 0;\r\n  border-right-color: #000;\r\n}\r\n.tooltip.left .tooltip-arrow {\r\n  top: 50%;\r\n  right: 0;\r\n  margin-top: -5px;\r\n  border-width: 5px 0 5px 5px;\r\n  border-left-color: #000;\r\n}\r\n.tooltip.bottom .tooltip-arrow {\r\n  top: 0;\r\n  left: 50%;\r\n  margin-left: -5px;\r\n  border-width: 0 5px 5px;\r\n  border-bottom-color: #000;\r\n}\r\n.tooltip.bottom-left .tooltip-arrow {\r\n  top: 0;\r\n  right: 5px;\r\n  margin-top: -5px;\r\n  border-width: 0 5px 5px;\r\n  border-bottom-color: #000;\r\n}\r\n.tooltip.bottom-right .tooltip-arrow {\r\n  top: 0;\r\n  left: 5px;\r\n  margin-top: -5px;\r\n  border-width: 0 5px 5px;\r\n  border-bottom-color: #000;\r\n}\r\n.popover {\r\n  position: absolute;\r\n  top: 0;\r\n  left: 0;\r\n  z-index: 1060;\r\n  display: none;\r\n  max-width: 276px;\r\n  padding: 1px;\r\n  font-family: \"Helvetica Neue\", Helvetica, Arial, sans-serif;\r\n  font-style: normal;\r\n  font-weight: normal;\r\n  letter-spacing: normal;\r\n  line-break: auto;\r\n  line-height: 1.42857143;\r\n  text-align: left;\r\n  text-align: start;\r\n  text-decoration: none;\r\n  text-shadow: none;\r\n  text-transform: none;\r\n  white-space: normal;\r\n  word-break: normal;\r\n  word-spacing: normal;\r\n  word-wrap: normal;\r\n  font-size: 13px;\r\n  background-color: #fff;\r\n  background-clip: padding-box;\r\n  border: 1px solid #ccc;\r\n  border: 1px solid rgba(0, 0, 0, 0.2);\r\n  border-radius: 3px;\r\n  -webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);\r\n  box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);\r\n}\r\n.popover.top {\r\n  margin-top: -10px;\r\n}\r\n.popover.right {\r\n  margin-left: 10px;\r\n}\r\n.popover.bottom {\r\n  margin-top: 10px;\r\n}\r\n.popover.left {\r\n  margin-left: -10px;\r\n}\r\n.popover-title {\r\n  margin: 0;\r\n  padding: 8px 14px;\r\n  font-size: 13px;\r\n  background-color: #f7f7f7;\r\n  border-bottom: 1px solid #ebebeb;\r\n  border-radius: 2px 2px 0 0;\r\n}\r\n.popover-content {\r\n  padding: 9px 14px;\r\n}\r\n.popover > .arrow,\r\n.popover > .arrow:after {\r\n  position: absolute;\r\n  display: block;\r\n  width: 0;\r\n  height: 0;\r\n  border-color: transparent;\r\n  border-style: solid;\r\n}\r\n.popover > .arrow {\r\n  border-width: 11px;\r\n}\r\n.popover > .arrow:after {\r\n  border-width: 10px;\r\n  content: \"\";\r\n}\r\n.popover.top > .arrow {\r\n  left: 50%;\r\n  margin-left: -11px;\r\n  border-bottom-width: 0;\r\n  border-top-color: #999999;\r\n  border-top-color: rgba(0, 0, 0, 0.25);\r\n  bottom: -11px;\r\n}\r\n.popover.top > .arrow:after {\r\n  content: \" \";\r\n  bottom: 1px;\r\n  margin-left: -10px;\r\n  border-bottom-width: 0;\r\n  border-top-color: #fff;\r\n}\r\n.popover.right > .arrow {\r\n  top: 50%;\r\n  left: -11px;\r\n  margin-top: -11px;\r\n  border-left-width: 0;\r\n  border-right-color: #999999;\r\n  border-right-color: rgba(0, 0, 0, 0.25);\r\n}\r\n.popover.right > .arrow:after {\r\n  content: \" \";\r\n  left: 1px;\r\n  bottom: -10px;\r\n  border-left-width: 0;\r\n  border-right-color: #fff;\r\n}\r\n.popover.bottom > .arrow {\r\n  left: 50%;\r\n  margin-left: -11px;\r\n  border-top-width: 0;\r\n  border-bottom-color: #999999;\r\n  border-bottom-color: rgba(0, 0, 0, 0.25);\r\n  top: -11px;\r\n}\r\n.popover.bottom > .arrow:after {\r\n  content: \" \";\r\n  top: 1px;\r\n  margin-left: -10px;\r\n  border-top-width: 0;\r\n  border-bottom-color: #fff;\r\n}\r\n.popover.left > .arrow {\r\n  top: 50%;\r\n  right: -11px;\r\n  margin-top: -11px;\r\n  border-right-width: 0;\r\n  border-left-color: #999999;\r\n  border-left-color: rgba(0, 0, 0, 0.25);\r\n}\r\n.popover.left > .arrow:after {\r\n  content: \" \";\r\n  right: 1px;\r\n  border-right-width: 0;\r\n  border-left-color: #fff;\r\n  bottom: -10px;\r\n}\r\n.carousel {\r\n  position: relative;\r\n}\r\n.carousel-inner {\r\n  position: relative;\r\n  overflow: hidden;\r\n  width: 100%;\r\n}\r\n.carousel-inner > .item {\r\n  display: none;\r\n  position: relative;\r\n  -webkit-transition: 0.6s ease-in-out left;\r\n  -o-transition: 0.6s ease-in-out left;\r\n  transition: 0.6s ease-in-out left;\r\n}\r\n.carousel-inner > .item > img,\r\n.carousel-inner > .item > a > img {\r\n  line-height: 1;\r\n}\r\n@media all and (transform-3d), (-webkit-transform-3d) {\r\n  .carousel-inner > .item {\r\n    -webkit-transition: -webkit-transform 0.6s ease-in-out;\r\n    -moz-transition: -moz-transform 0.6s ease-in-out;\r\n    -o-transition: -o-transform 0.6s ease-in-out;\r\n    transition: transform 0.6s ease-in-out;\r\n    -webkit-backface-visibility: hidden;\r\n    -moz-backface-visibility: hidden;\r\n    backface-visibility: hidden;\r\n    -webkit-perspective: 1000px;\r\n    -moz-perspective: 1000px;\r\n    perspective: 1000px;\r\n  }\r\n  .carousel-inner > .item.next,\r\n  .carousel-inner > .item.active.right {\r\n    -webkit-transform: translate3d(100%, 0, 0);\r\n    transform: translate3d(100%, 0, 0);\r\n    left: 0;\r\n  }\r\n  .carousel-inner > .item.prev,\r\n  .carousel-inner > .item.active.left {\r\n    -webkit-transform: translate3d(-100%, 0, 0);\r\n    transform: translate3d(-100%, 0, 0);\r\n    left: 0;\r\n  }\r\n  .carousel-inner > .item.next.left,\r\n  .carousel-inner > .item.prev.right,\r\n  .carousel-inner > .item.active {\r\n    -webkit-transform: translate3d(0, 0, 0);\r\n    transform: translate3d(0, 0, 0);\r\n    left: 0;\r\n  }\r\n}\r\n.carousel-inner > .active,\r\n.carousel-inner > .next,\r\n.carousel-inner > .prev {\r\n  display: block;\r\n}\r\n.carousel-inner > .active {\r\n  left: 0;\r\n}\r\n.carousel-inner > .next,\r\n.carousel-inner > .prev {\r\n  position: absolute;\r\n  top: 0;\r\n  width: 100%;\r\n}\r\n.carousel-inner > .next {\r\n  left: 100%;\r\n}\r\n.carousel-inner > .prev {\r\n  left: -100%;\r\n}\r\n.carousel-inner > .next.left,\r\n.carousel-inner > .prev.right {\r\n  left: 0;\r\n}\r\n.carousel-inner > .active.left {\r\n  left: -100%;\r\n}\r\n.carousel-inner > .active.right {\r\n  left: 100%;\r\n}\r\n.carousel-control {\r\n  position: absolute;\r\n  top: 0;\r\n  left: 0;\r\n  bottom: 0;\r\n  width: 15%;\r\n  opacity: 0.5;\r\n  filter: alpha(opacity=50);\r\n  font-size: 20px;\r\n  color: #fff;\r\n  text-align: center;\r\n  text-shadow: 0 1px 2px rgba(0, 0, 0, 0.6);\r\n  background-color: rgba(0, 0, 0, 0);\r\n}\r\n.carousel-control.left {\r\n  background-image: -webkit-linear-gradient(left, rgba(0, 0, 0, 0.5) 0%, rgba(0, 0, 0, 0.0001) 100%);\r\n  background-image: -o-linear-gradient(left, rgba(0, 0, 0, 0.5) 0%, rgba(0, 0, 0, 0.0001) 100%);\r\n  background-image: linear-gradient(to right, rgba(0, 0, 0, 0.5) 0%, rgba(0, 0, 0, 0.0001) 100%);\r\n  background-repeat: repeat-x;\r\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1);\r\n}\r\n.carousel-control.right {\r\n  left: auto;\r\n  right: 0;\r\n  background-image: -webkit-linear-gradient(left, rgba(0, 0, 0, 0.0001) 0%, rgba(0, 0, 0, 0.5) 100%);\r\n  background-image: -o-linear-gradient(left, rgba(0, 0, 0, 0.0001) 0%, rgba(0, 0, 0, 0.5) 100%);\r\n  background-image: linear-gradient(to right, rgba(0, 0, 0, 0.0001) 0%, rgba(0, 0, 0, 0.5) 100%);\r\n  background-repeat: repeat-x;\r\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1);\r\n}\r\n.carousel-control:hover,\r\n.carousel-control:focus {\r\n  outline: 0;\r\n  color: #fff;\r\n  text-decoration: none;\r\n  opacity: 0.9;\r\n  filter: alpha(opacity=90);\r\n}\r\n.carousel-control .icon-prev,\r\n.carousel-control .icon-next,\r\n.carousel-control .glyphicon-chevron-left,\r\n.carousel-control .glyphicon-chevron-right {\r\n  position: absolute;\r\n  top: 50%;\r\n  margin-top: -10px;\r\n  z-index: 5;\r\n  display: inline-block;\r\n}\r\n.carousel-control .icon-prev,\r\n.carousel-control .glyphicon-chevron-left {\r\n  left: 50%;\r\n  margin-left: -10px;\r\n}\r\n.carousel-control .icon-next,\r\n.carousel-control .glyphicon-chevron-right {\r\n  right: 50%;\r\n  margin-right: -10px;\r\n}\r\n.carousel-control .icon-prev,\r\n.carousel-control .icon-next {\r\n  width: 20px;\r\n  height: 20px;\r\n  line-height: 1;\r\n  font-family: serif;\r\n}\r\n.carousel-control .icon-prev:before {\r\n  content: '\\2039';\r\n}\r\n.carousel-control .icon-next:before {\r\n  content: '\\203a';\r\n}\r\n.carousel-indicators {\r\n  position: absolute;\r\n  bottom: 10px;\r\n  left: 50%;\r\n  z-index: 15;\r\n  width: 60%;\r\n  margin-left: -30%;\r\n  padding-left: 0;\r\n  list-style: none;\r\n  text-align: center;\r\n}\r\n.carousel-indicators li {\r\n  display: inline-block;\r\n  width: 10px;\r\n  height: 10px;\r\n  margin: 1px;\r\n  text-indent: -999px;\r\n  border: 1px solid #fff;\r\n  border-radius: 10px;\r\n  cursor: pointer;\r\n  background-color: #000 \\9;\r\n  background-color: rgba(0, 0, 0, 0);\r\n}\r\n.carousel-indicators .active {\r\n  margin: 0;\r\n  width: 12px;\r\n  height: 12px;\r\n  background-color: #fff;\r\n}\r\n.carousel-caption {\r\n  position: absolute;\r\n  left: 15%;\r\n  right: 15%;\r\n  bottom: 20px;\r\n  z-index: 10;\r\n  padding-top: 20px;\r\n  padding-bottom: 20px;\r\n  color: #fff;\r\n  text-align: center;\r\n  text-shadow: 0 1px 2px rgba(0, 0, 0, 0.6);\r\n}\r\n.carousel-caption .btn {\r\n  text-shadow: none;\r\n}\r\n@media screen and (min-width: 768px) {\r\n  .carousel-control .glyphicon-chevron-left,\r\n  .carousel-control .glyphicon-chevron-right,\r\n  .carousel-control .icon-prev,\r\n  .carousel-control .icon-next {\r\n    width: 30px;\r\n    height: 30px;\r\n    margin-top: -10px;\r\n    font-size: 30px;\r\n  }\r\n  .carousel-control .glyphicon-chevron-left,\r\n  .carousel-control .icon-prev {\r\n    margin-left: -10px;\r\n  }\r\n  .carousel-control .glyphicon-chevron-right,\r\n  .carousel-control .icon-next {\r\n    margin-right: -10px;\r\n  }\r\n  .carousel-caption {\r\n    left: 20%;\r\n    right: 20%;\r\n    padding-bottom: 30px;\r\n  }\r\n  .carousel-indicators {\r\n    bottom: 20px;\r\n  }\r\n}\r\n.clearfix:before,\r\n.clearfix:after,\r\n.dl-horizontal dd:before,\r\n.dl-horizontal dd:after,\r\n.container:before,\r\n.container:after,\r\n.container-fluid:before,\r\n.container-fluid:after,\r\n.row:before,\r\n.row:after,\r\n.form-horizontal .form-group:before,\r\n.form-horizontal .form-group:after,\r\n.btn-toolbar:before,\r\n.btn-toolbar:after,\r\n.btn-group-vertical > .btn-group:before,\r\n.btn-group-vertical > .btn-group:after,\r\n.nav:before,\r\n.nav:after,\r\n.navbar:before,\r\n.navbar:after,\r\n.navbar-header:before,\r\n.navbar-header:after,\r\n.navbar-collapse:before,\r\n.navbar-collapse:after,\r\n.pager:before,\r\n.pager:after,\r\n.panel-body:before,\r\n.panel-body:after,\r\n.modal-header:before,\r\n.modal-header:after,\r\n.modal-footer:before,\r\n.modal-footer:after,\r\n.item_buttons:before,\r\n.item_buttons:after {\r\n  content: \" \";\r\n  display: table;\r\n}\r\n.clearfix:after,\r\n.dl-horizontal dd:after,\r\n.container:after,\r\n.container-fluid:after,\r\n.row:after,\r\n.form-horizontal .form-group:after,\r\n.btn-toolbar:after,\r\n.btn-group-vertical > .btn-group:after,\r\n.nav:after,\r\n.navbar:after,\r\n.navbar-header:after,\r\n.navbar-collapse:after,\r\n.pager:after,\r\n.panel-body:after,\r\n.modal-header:after,\r\n.modal-footer:after,\r\n.item_buttons:after {\r\n  clear: both;\r\n}\r\n.center-block {\r\n  display: block;\r\n  margin-left: auto;\r\n  margin-right: auto;\r\n}\r\n.pull-right {\r\n  float: right !important;\r\n}\r\n.pull-left {\r\n  float: left !important;\r\n}\r\n.hide {\r\n  display: none !important;\r\n}\r\n.show {\r\n  display: block !important;\r\n}\r\n.invisible {\r\n  visibility: hidden;\r\n}\r\n.text-hide {\r\n  font: 0/0 a;\r\n  color: transparent;\r\n  text-shadow: none;\r\n  background-color: transparent;\r\n  border: 0;\r\n}\r\n.hidden {\r\n  display: none !important;\r\n}\r\n.affix {\r\n  position: fixed;\r\n}\r\n@-ms-viewport {\r\n  width: device-width;\r\n}\r\n.visible-xs,\r\n.visible-sm,\r\n.visible-md,\r\n.visible-lg {\r\n  display: none !important;\r\n}\r\n.visible-xs-block,\r\n.visible-xs-inline,\r\n.visible-xs-inline-block,\r\n.visible-sm-block,\r\n.visible-sm-inline,\r\n.visible-sm-inline-block,\r\n.visible-md-block,\r\n.visible-md-inline,\r\n.visible-md-inline-block,\r\n.visible-lg-block,\r\n.visible-lg-inline,\r\n.visible-lg-inline-block {\r\n  display: none !important;\r\n}\r\n@media (max-width: 767px) {\r\n  .visible-xs {\r\n    display: block !important;\r\n  }\r\n  table.visible-xs {\r\n    display: table !important;\r\n  }\r\n  tr.visible-xs {\r\n    display: table-row !important;\r\n  }\r\n  th.visible-xs,\r\n  td.visible-xs {\r\n    display: table-cell !important;\r\n  }\r\n}\r\n@media (max-width: 767px) {\r\n  .visible-xs-block {\r\n    display: block !important;\r\n  }\r\n}\r\n@media (max-width: 767px) {\r\n  .visible-xs-inline {\r\n    display: inline !important;\r\n  }\r\n}\r\n@media (max-width: 767px) {\r\n  .visible-xs-inline-block {\r\n    display: inline-block !important;\r\n  }\r\n}\r\n@media (min-width: 768px) and (max-width: 991px) {\r\n  .visible-sm {\r\n    display: block !important;\r\n  }\r\n  table.visible-sm {\r\n    display: table !important;\r\n  }\r\n  tr.visible-sm {\r\n    display: table-row !important;\r\n  }\r\n  th.visible-sm,\r\n  td.visible-sm {\r\n    display: table-cell !important;\r\n  }\r\n}\r\n@media (min-width: 768px) and (max-width: 991px) {\r\n  .visible-sm-block {\r\n    display: block !important;\r\n  }\r\n}\r\n@media (min-width: 768px) and (max-width: 991px) {\r\n  .visible-sm-inline {\r\n    display: inline !important;\r\n  }\r\n}\r\n@media (min-width: 768px) and (max-width: 991px) {\r\n  .visible-sm-inline-block {\r\n    display: inline-block !important;\r\n  }\r\n}\r\n@media (min-width: 992px) and (max-width: 1199px) {\r\n  .visible-md {\r\n    display: block !important;\r\n  }\r\n  table.visible-md {\r\n    display: table !important;\r\n  }\r\n  tr.visible-md {\r\n    display: table-row !important;\r\n  }\r\n  th.visible-md,\r\n  td.visible-md {\r\n    display: table-cell !important;\r\n  }\r\n}\r\n@media (min-width: 992px) and (max-width: 1199px) {\r\n  .visible-md-block {\r\n    display: block !important;\r\n  }\r\n}\r\n@media (min-width: 992px) and (max-width: 1199px) {\r\n  .visible-md-inline {\r\n    display: inline !important;\r\n  }\r\n}\r\n@media (min-width: 992px) and (max-width: 1199px) {\r\n  .visible-md-inline-block {\r\n    display: inline-block !important;\r\n  }\r\n}\r\n@media (min-width: 1200px) {\r\n  .visible-lg {\r\n    display: block !important;\r\n  }\r\n  table.visible-lg {\r\n    display: table !important;\r\n  }\r\n  tr.visible-lg {\r\n    display: table-row !important;\r\n  }\r\n  th.visible-lg,\r\n  td.visible-lg {\r\n    display: table-cell !important;\r\n  }\r\n}\r\n@media (min-width: 1200px) {\r\n  .visible-lg-block {\r\n    display: block !important;\r\n  }\r\n}\r\n@media (min-width: 1200px) {\r\n  .visible-lg-inline {\r\n    display: inline !important;\r\n  }\r\n}\r\n@media (min-width: 1200px) {\r\n  .visible-lg-inline-block {\r\n    display: inline-block !important;\r\n  }\r\n}\r\n@media (max-width: 767px) {\r\n  .hidden-xs {\r\n    display: none !important;\r\n  }\r\n}\r\n@media (min-width: 768px) and (max-width: 991px) {\r\n  .hidden-sm {\r\n    display: none !important;\r\n  }\r\n}\r\n@media (min-width: 992px) and (max-width: 1199px) {\r\n  .hidden-md {\r\n    display: none !important;\r\n  }\r\n}\r\n@media (min-width: 1200px) {\r\n  .hidden-lg {\r\n    display: none !important;\r\n  }\r\n}\r\n.visible-print {\r\n  display: none !important;\r\n}\r\n@media print {\r\n  .visible-print {\r\n    display: block !important;\r\n  }\r\n  table.visible-print {\r\n    display: table !important;\r\n  }\r\n  tr.visible-print {\r\n    display: table-row !important;\r\n  }\r\n  th.visible-print,\r\n  td.visible-print {\r\n    display: table-cell !important;\r\n  }\r\n}\r\n.visible-print-block {\r\n  display: none !important;\r\n}\r\n@media print {\r\n  .visible-print-block {\r\n    display: block !important;\r\n  }\r\n}\r\n.visible-print-inline {\r\n  display: none !important;\r\n}\r\n@media print {\r\n  .visible-print-inline {\r\n    display: inline !important;\r\n  }\r\n}\r\n.visible-print-inline-block {\r\n  display: none !important;\r\n}\r\n@media print {\r\n  .visible-print-inline-block {\r\n    display: inline-block !important;\r\n  }\r\n}\r\n@media print {\r\n  .hidden-print {\r\n    display: none !important;\r\n  }\r\n}\r\n/*!\r\n*\r\n* Font Awesome\r\n*\r\n*/\r\n/*!\r\n *  Font Awesome 4.2.0 by @davegandy - http://fontawesome.io - @fontawesome\r\n *  License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License)\r\n */\r\n/* FONT PATH\r\n * -------------------------- */\r\n@font-face {\r\n  font-family: 'FontAwesome';\r\n  src: url('../components/font-awesome/fonts/fontawesome-webfont.eot?v=4.2.0');\r\n  src: url('../components/font-awesome/fonts/fontawesome-webfont.eot?#iefix&v=4.2.0') format('embedded-opentype'), url('../components/font-awesome/fonts/fontawesome-webfont.woff?v=4.2.0') format('woff'), url('../components/font-awesome/fonts/fontawesome-webfont.ttf?v=4.2.0') format('truetype'), url('../components/font-awesome/fonts/fontawesome-webfont.svg?v=4.2.0#fontawesomeregular') format('svg');\r\n  font-weight: normal;\r\n  font-style: normal;\r\n}\r\n.fa {\r\n  display: inline-block;\r\n  font: normal normal normal 14px/1 FontAwesome;\r\n  font-size: inherit;\r\n  text-rendering: auto;\r\n  -webkit-font-smoothing: antialiased;\r\n  -moz-osx-font-smoothing: grayscale;\r\n}\r\n/* makes the font 33% larger relative to the icon container */\r\n.fa-lg {\r\n  font-size: 1.33333333em;\r\n  line-height: 0.75em;\r\n  vertical-align: -15%;\r\n}\r\n.fa-2x {\r\n  font-size: 2em;\r\n}\r\n.fa-3x {\r\n  font-size: 3em;\r\n}\r\n.fa-4x {\r\n  font-size: 4em;\r\n}\r\n.fa-5x {\r\n  font-size: 5em;\r\n}\r\n.fa-fw {\r\n  width: 1.28571429em;\r\n  text-align: center;\r\n}\r\n.fa-ul {\r\n  padding-left: 0;\r\n  margin-left: 2.14285714em;\r\n  list-style-type: none;\r\n}\r\n.fa-ul > li {\r\n  position: relative;\r\n}\r\n.fa-li {\r\n  position: absolute;\r\n  left: -2.14285714em;\r\n  width: 2.14285714em;\r\n  top: 0.14285714em;\r\n  text-align: center;\r\n}\r\n.fa-li.fa-lg {\r\n  left: -1.85714286em;\r\n}\r\n.fa-border {\r\n  padding: .2em .25em .15em;\r\n  border: solid 0.08em #eee;\r\n  border-radius: .1em;\r\n}\r\n.pull-right {\r\n  float: right;\r\n}\r\n.pull-left {\r\n  float: left;\r\n}\r\n.fa.pull-left {\r\n  margin-right: .3em;\r\n}\r\n.fa.pull-right {\r\n  margin-left: .3em;\r\n}\r\n.fa-spin {\r\n  -webkit-animation: fa-spin 2s infinite linear;\r\n  animation: fa-spin 2s infinite linear;\r\n}\r\n@-webkit-keyframes fa-spin {\r\n  0% {\r\n    -webkit-transform: rotate(0deg);\r\n    transform: rotate(0deg);\r\n  }\r\n  100% {\r\n    -webkit-transform: rotate(359deg);\r\n    transform: rotate(359deg);\r\n  }\r\n}\r\n@keyframes fa-spin {\r\n  0% {\r\n    -webkit-transform: rotate(0deg);\r\n    transform: rotate(0deg);\r\n  }\r\n  100% {\r\n    -webkit-transform: rotate(359deg);\r\n    transform: rotate(359deg);\r\n  }\r\n}\r\n.fa-rotate-90 {\r\n  filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=1);\r\n  -webkit-transform: rotate(90deg);\r\n  -ms-transform: rotate(90deg);\r\n  transform: rotate(90deg);\r\n}\r\n.fa-rotate-180 {\r\n  filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=2);\r\n  -webkit-transform: rotate(180deg);\r\n  -ms-transform: rotate(180deg);\r\n  transform: rotate(180deg);\r\n}\r\n.fa-rotate-270 {\r\n  filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=3);\r\n  -webkit-transform: rotate(270deg);\r\n  -ms-transform: rotate(270deg);\r\n  transform: rotate(270deg);\r\n}\r\n.fa-flip-horizontal {\r\n  filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1);\r\n  -webkit-transform: scale(-1, 1);\r\n  -ms-transform: scale(-1, 1);\r\n  transform: scale(-1, 1);\r\n}\r\n.fa-flip-vertical {\r\n  filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1);\r\n  -webkit-transform: scale(1, -1);\r\n  -ms-transform: scale(1, -1);\r\n  transform: scale(1, -1);\r\n}\r\n:root .fa-rotate-90,\r\n:root .fa-rotate-180,\r\n:root .fa-rotate-270,\r\n:root .fa-flip-horizontal,\r\n:root .fa-flip-vertical {\r\n  filter: none;\r\n}\r\n.fa-stack {\r\n  position: relative;\r\n  display: inline-block;\r\n  width: 2em;\r\n  height: 2em;\r\n  line-height: 2em;\r\n  vertical-align: middle;\r\n}\r\n.fa-stack-1x,\r\n.fa-stack-2x {\r\n  position: absolute;\r\n  left: 0;\r\n  width: 100%;\r\n  text-align: center;\r\n}\r\n.fa-stack-1x {\r\n  line-height: inherit;\r\n}\r\n.fa-stack-2x {\r\n  font-size: 2em;\r\n}\r\n.fa-inverse {\r\n  color: #fff;\r\n}\r\n/* Font Awesome uses the Unicode Private Use Area (PUA) to ensure screen\r\n   readers do not read off random characters that represent icons */\r\n.fa-glass:before {\r\n  content: \"\\f000\";\r\n}\r\n.fa-music:before {\r\n  content: \"\\f001\";\r\n}\r\n.fa-search:before {\r\n  content: \"\\f002\";\r\n}\r\n.fa-envelope-o:before {\r\n  content: \"\\f003\";\r\n}\r\n.fa-heart:before {\r\n  content: \"\\f004\";\r\n}\r\n.fa-star:before {\r\n  content: \"\\f005\";\r\n}\r\n.fa-star-o:before {\r\n  content: \"\\f006\";\r\n}\r\n.fa-user:before {\r\n  content: \"\\f007\";\r\n}\r\n.fa-film:before {\r\n  content: \"\\f008\";\r\n}\r\n.fa-th-large:before {\r\n  content: \"\\f009\";\r\n}\r\n.fa-th:before {\r\n  content: \"\\f00a\";\r\n}\r\n.fa-th-list:before {\r\n  content: \"\\f00b\";\r\n}\r\n.fa-check:before {\r\n  content: \"\\f00c\";\r\n}\r\n.fa-remove:before,\r\n.fa-close:before,\r\n.fa-times:before {\r\n  content: \"\\f00d\";\r\n}\r\n.fa-search-plus:before {\r\n  content: \"\\f00e\";\r\n}\r\n.fa-search-minus:before {\r\n  content: \"\\f010\";\r\n}\r\n.fa-power-off:before {\r\n  content: \"\\f011\";\r\n}\r\n.fa-signal:before {\r\n  content: \"\\f012\";\r\n}\r\n.fa-gear:before,\r\n.fa-cog:before {\r\n  content: \"\\f013\";\r\n}\r\n.fa-trash-o:before {\r\n  content: \"\\f014\";\r\n}\r\n.fa-home:before {\r\n  content: \"\\f015\";\r\n}\r\n.fa-file-o:before {\r\n  content: \"\\f016\";\r\n}\r\n.fa-clock-o:before {\r\n  content: \"\\f017\";\r\n}\r\n.fa-road:before {\r\n  content: \"\\f018\";\r\n}\r\n.fa-download:before {\r\n  content: \"\\f019\";\r\n}\r\n.fa-arrow-circle-o-down:before {\r\n  content: \"\\f01a\";\r\n}\r\n.fa-arrow-circle-o-up:before {\r\n  content: \"\\f01b\";\r\n}\r\n.fa-inbox:before {\r\n  content: \"\\f01c\";\r\n}\r\n.fa-play-circle-o:before {\r\n  content: \"\\f01d\";\r\n}\r\n.fa-rotate-right:before,\r\n.fa-repeat:before {\r\n  content: \"\\f01e\";\r\n}\r\n.fa-refresh:before {\r\n  content: \"\\f021\";\r\n}\r\n.fa-list-alt:before {\r\n  content: \"\\f022\";\r\n}\r\n.fa-lock:before {\r\n  content: \"\\f023\";\r\n}\r\n.fa-flag:before {\r\n  content: \"\\f024\";\r\n}\r\n.fa-headphones:before {\r\n  content: \"\\f025\";\r\n}\r\n.fa-volume-off:before {\r\n  content: \"\\f026\";\r\n}\r\n.fa-volume-down:before {\r\n  content: \"\\f027\";\r\n}\r\n.fa-volume-up:before {\r\n  content: \"\\f028\";\r\n}\r\n.fa-qrcode:before {\r\n  content: \"\\f029\";\r\n}\r\n.fa-barcode:before {\r\n  content: \"\\f02a\";\r\n}\r\n.fa-tag:before {\r\n  content: \"\\f02b\";\r\n}\r\n.fa-tags:before {\r\n  content: \"\\f02c\";\r\n}\r\n.fa-book:before {\r\n  content: \"\\f02d\";\r\n}\r\n.fa-bookmark:before {\r\n  content: \"\\f02e\";\r\n}\r\n.fa-print:before {\r\n  content: \"\\f02f\";\r\n}\r\n.fa-camera:before {\r\n  content: \"\\f030\";\r\n}\r\n.fa-font:before {\r\n  content: \"\\f031\";\r\n}\r\n.fa-bold:before {\r\n  content: \"\\f032\";\r\n}\r\n.fa-italic:before {\r\n  content: \"\\f033\";\r\n}\r\n.fa-text-height:before {\r\n  content: \"\\f034\";\r\n}\r\n.fa-text-width:before {\r\n  content: \"\\f035\";\r\n}\r\n.fa-align-left:before {\r\n  content: \"\\f036\";\r\n}\r\n.fa-align-center:before {\r\n  content: \"\\f037\";\r\n}\r\n.fa-align-right:before {\r\n  content: \"\\f038\";\r\n}\r\n.fa-align-justify:before {\r\n  content: \"\\f039\";\r\n}\r\n.fa-list:before {\r\n  content: \"\\f03a\";\r\n}\r\n.fa-dedent:before,\r\n.fa-outdent:before {\r\n  content: \"\\f03b\";\r\n}\r\n.fa-indent:before {\r\n  content: \"\\f03c\";\r\n}\r\n.fa-video-camera:before {\r\n  content: \"\\f03d\";\r\n}\r\n.fa-photo:before,\r\n.fa-image:before,\r\n.fa-picture-o:before {\r\n  content: \"\\f03e\";\r\n}\r\n.fa-pencil:before {\r\n  content: \"\\f040\";\r\n}\r\n.fa-map-marker:before {\r\n  content: \"\\f041\";\r\n}\r\n.fa-adjust:before {\r\n  content: \"\\f042\";\r\n}\r\n.fa-tint:before {\r\n  content: \"\\f043\";\r\n}\r\n.fa-edit:before,\r\n.fa-pencil-square-o:before {\r\n  content: \"\\f044\";\r\n}\r\n.fa-share-square-o:before {\r\n  content: \"\\f045\";\r\n}\r\n.fa-check-square-o:before {\r\n  content: \"\\f046\";\r\n}\r\n.fa-arrows:before {\r\n  content: \"\\f047\";\r\n}\r\n.fa-step-backward:before {\r\n  content: \"\\f048\";\r\n}\r\n.fa-fast-backward:before {\r\n  content: \"\\f049\";\r\n}\r\n.fa-backward:before {\r\n  content: \"\\f04a\";\r\n}\r\n.fa-play:before {\r\n  content: \"\\f04b\";\r\n}\r\n.fa-pause:before {\r\n  content: \"\\f04c\";\r\n}\r\n.fa-stop:before {\r\n  content: \"\\f04d\";\r\n}\r\n.fa-forward:before {\r\n  content: \"\\f04e\";\r\n}\r\n.fa-fast-forward:before {\r\n  content: \"\\f050\";\r\n}\r\n.fa-step-forward:before {\r\n  content: \"\\f051\";\r\n}\r\n.fa-eject:before {\r\n  content: \"\\f052\";\r\n}\r\n.fa-chevron-left:before {\r\n  content: \"\\f053\";\r\n}\r\n.fa-chevron-right:before {\r\n  content: \"\\f054\";\r\n}\r\n.fa-plus-circle:before {\r\n  content: \"\\f055\";\r\n}\r\n.fa-minus-circle:before {\r\n  content: \"\\f056\";\r\n}\r\n.fa-times-circle:before {\r\n  content: \"\\f057\";\r\n}\r\n.fa-check-circle:before {\r\n  content: \"\\f058\";\r\n}\r\n.fa-question-circle:before {\r\n  content: \"\\f059\";\r\n}\r\n.fa-info-circle:before {\r\n  content: \"\\f05a\";\r\n}\r\n.fa-crosshairs:before {\r\n  content: \"\\f05b\";\r\n}\r\n.fa-times-circle-o:before {\r\n  content: \"\\f05c\";\r\n}\r\n.fa-check-circle-o:before {\r\n  content: \"\\f05d\";\r\n}\r\n.fa-ban:before {\r\n  content: \"\\f05e\";\r\n}\r\n.fa-arrow-left:before {\r\n  content: \"\\f060\";\r\n}\r\n.fa-arrow-right:before {\r\n  content: \"\\f061\";\r\n}\r\n.fa-arrow-up:before {\r\n  content: \"\\f062\";\r\n}\r\n.fa-arrow-down:before {\r\n  content: \"\\f063\";\r\n}\r\n.fa-mail-forward:before,\r\n.fa-share:before {\r\n  content: \"\\f064\";\r\n}\r\n.fa-expand:before {\r\n  content: \"\\f065\";\r\n}\r\n.fa-compress:before {\r\n  content: \"\\f066\";\r\n}\r\n.fa-plus:before {\r\n  content: \"\\f067\";\r\n}\r\n.fa-minus:before {\r\n  content: \"\\f068\";\r\n}\r\n.fa-asterisk:before {\r\n  content: \"\\f069\";\r\n}\r\n.fa-exclamation-circle:before {\r\n  content: \"\\f06a\";\r\n}\r\n.fa-gift:before {\r\n  content: \"\\f06b\";\r\n}\r\n.fa-leaf:before {\r\n  content: \"\\f06c\";\r\n}\r\n.fa-fire:before {\r\n  content: \"\\f06d\";\r\n}\r\n.fa-eye:before {\r\n  content: \"\\f06e\";\r\n}\r\n.fa-eye-slash:before {\r\n  content: \"\\f070\";\r\n}\r\n.fa-warning:before,\r\n.fa-exclamation-triangle:before {\r\n  content: \"\\f071\";\r\n}\r\n.fa-plane:before {\r\n  content: \"\\f072\";\r\n}\r\n.fa-calendar:before {\r\n  content: \"\\f073\";\r\n}\r\n.fa-random:before {\r\n  content: \"\\f074\";\r\n}\r\n.fa-comment:before {\r\n  content: \"\\f075\";\r\n}\r\n.fa-magnet:before {\r\n  content: \"\\f076\";\r\n}\r\n.fa-chevron-up:before {\r\n  content: \"\\f077\";\r\n}\r\n.fa-chevron-down:before {\r\n  content: \"\\f078\";\r\n}\r\n.fa-retweet:before {\r\n  content: \"\\f079\";\r\n}\r\n.fa-shopping-cart:before {\r\n  content: \"\\f07a\";\r\n}\r\n.fa-folder:before {\r\n  content: \"\\f07b\";\r\n}\r\n.fa-folder-open:before {\r\n  content: \"\\f07c\";\r\n}\r\n.fa-arrows-v:before {\r\n  content: \"\\f07d\";\r\n}\r\n.fa-arrows-h:before {\r\n  content: \"\\f07e\";\r\n}\r\n.fa-bar-chart-o:before,\r\n.fa-bar-chart:before {\r\n  content: \"\\f080\";\r\n}\r\n.fa-twitter-square:before {\r\n  content: \"\\f081\";\r\n}\r\n.fa-facebook-square:before {\r\n  content: \"\\f082\";\r\n}\r\n.fa-camera-retro:before {\r\n  content: \"\\f083\";\r\n}\r\n.fa-key:before {\r\n  content: \"\\f084\";\r\n}\r\n.fa-gears:before,\r\n.fa-cogs:before {\r\n  content: \"\\f085\";\r\n}\r\n.fa-comments:before {\r\n  content: \"\\f086\";\r\n}\r\n.fa-thumbs-o-up:before {\r\n  content: \"\\f087\";\r\n}\r\n.fa-thumbs-o-down:before {\r\n  content: \"\\f088\";\r\n}\r\n.fa-star-half:before {\r\n  content: \"\\f089\";\r\n}\r\n.fa-heart-o:before {\r\n  content: \"\\f08a\";\r\n}\r\n.fa-sign-out:before {\r\n  content: \"\\f08b\";\r\n}\r\n.fa-linkedin-square:before {\r\n  content: \"\\f08c\";\r\n}\r\n.fa-thumb-tack:before {\r\n  content: \"\\f08d\";\r\n}\r\n.fa-external-link:before {\r\n  content: \"\\f08e\";\r\n}\r\n.fa-sign-in:before {\r\n  content: \"\\f090\";\r\n}\r\n.fa-trophy:before {\r\n  content: \"\\f091\";\r\n}\r\n.fa-github-square:before {\r\n  content: \"\\f092\";\r\n}\r\n.fa-upload:before {\r\n  content: \"\\f093\";\r\n}\r\n.fa-lemon-o:before {\r\n  content: \"\\f094\";\r\n}\r\n.fa-phone:before {\r\n  content: \"\\f095\";\r\n}\r\n.fa-square-o:before {\r\n  content: \"\\f096\";\r\n}\r\n.fa-bookmark-o:before {\r\n  content: \"\\f097\";\r\n}\r\n.fa-phone-square:before {\r\n  content: \"\\f098\";\r\n}\r\n.fa-twitter:before {\r\n  content: \"\\f099\";\r\n}\r\n.fa-facebook:before {\r\n  content: \"\\f09a\";\r\n}\r\n.fa-github:before {\r\n  content: \"\\f09b\";\r\n}\r\n.fa-unlock:before {\r\n  content: \"\\f09c\";\r\n}\r\n.fa-credit-card:before {\r\n  content: \"\\f09d\";\r\n}\r\n.fa-rss:before {\r\n  content: \"\\f09e\";\r\n}\r\n.fa-hdd-o:before {\r\n  content: \"\\f0a0\";\r\n}\r\n.fa-bullhorn:before {\r\n  content: \"\\f0a1\";\r\n}\r\n.fa-bell:before {\r\n  content: \"\\f0f3\";\r\n}\r\n.fa-certificate:before {\r\n  content: \"\\f0a3\";\r\n}\r\n.fa-hand-o-right:before {\r\n  content: \"\\f0a4\";\r\n}\r\n.fa-hand-o-left:before {\r\n  content: \"\\f0a5\";\r\n}\r\n.fa-hand-o-up:before {\r\n  content: \"\\f0a6\";\r\n}\r\n.fa-hand-o-down:before {\r\n  content: \"\\f0a7\";\r\n}\r\n.fa-arrow-circle-left:before {\r\n  content: \"\\f0a8\";\r\n}\r\n.fa-arrow-circle-right:before {\r\n  content: \"\\f0a9\";\r\n}\r\n.fa-arrow-circle-up:before {\r\n  content: \"\\f0aa\";\r\n}\r\n.fa-arrow-circle-down:before {\r\n  content: \"\\f0ab\";\r\n}\r\n.fa-globe:before {\r\n  content: \"\\f0ac\";\r\n}\r\n.fa-wrench:before {\r\n  content: \"\\f0ad\";\r\n}\r\n.fa-tasks:before {\r\n  content: \"\\f0ae\";\r\n}\r\n.fa-filter:before {\r\n  content: \"\\f0b0\";\r\n}\r\n.fa-briefcase:before {\r\n  content: \"\\f0b1\";\r\n}\r\n.fa-arrows-alt:before {\r\n  content: \"\\f0b2\";\r\n}\r\n.fa-group:before,\r\n.fa-users:before {\r\n  content: \"\\f0c0\";\r\n}\r\n.fa-chain:before,\r\n.fa-link:before {\r\n  content: \"\\f0c1\";\r\n}\r\n.fa-cloud:before {\r\n  content: \"\\f0c2\";\r\n}\r\n.fa-flask:before {\r\n  content: \"\\f0c3\";\r\n}\r\n.fa-cut:before,\r\n.fa-scissors:before {\r\n  content: \"\\f0c4\";\r\n}\r\n.fa-copy:before,\r\n.fa-files-o:before {\r\n  content: \"\\f0c5\";\r\n}\r\n.fa-paperclip:before {\r\n  content: \"\\f0c6\";\r\n}\r\n.fa-save:before,\r\n.fa-floppy-o:before {\r\n  content: \"\\f0c7\";\r\n}\r\n.fa-square:before {\r\n  content: \"\\f0c8\";\r\n}\r\n.fa-navicon:before,\r\n.fa-reorder:before,\r\n.fa-bars:before {\r\n  content: \"\\f0c9\";\r\n}\r\n.fa-list-ul:before {\r\n  content: \"\\f0ca\";\r\n}\r\n.fa-list-ol:before {\r\n  content: \"\\f0cb\";\r\n}\r\n.fa-strikethrough:before {\r\n  content: \"\\f0cc\";\r\n}\r\n.fa-underline:before {\r\n  content: \"\\f0cd\";\r\n}\r\n.fa-table:before {\r\n  content: \"\\f0ce\";\r\n}\r\n.fa-magic:before {\r\n  content: \"\\f0d0\";\r\n}\r\n.fa-truck:before {\r\n  content: \"\\f0d1\";\r\n}\r\n.fa-pinterest:before {\r\n  content: \"\\f0d2\";\r\n}\r\n.fa-pinterest-square:before {\r\n  content: \"\\f0d3\";\r\n}\r\n.fa-google-plus-square:before {\r\n  content: \"\\f0d4\";\r\n}\r\n.fa-google-plus:before {\r\n  content: \"\\f0d5\";\r\n}\r\n.fa-money:before {\r\n  content: \"\\f0d6\";\r\n}\r\n.fa-caret-down:before {\r\n  content: \"\\f0d7\";\r\n}\r\n.fa-caret-up:before {\r\n  content: \"\\f0d8\";\r\n}\r\n.fa-caret-left:before {\r\n  content: \"\\f0d9\";\r\n}\r\n.fa-caret-right:before {\r\n  content: \"\\f0da\";\r\n}\r\n.fa-columns:before {\r\n  content: \"\\f0db\";\r\n}\r\n.fa-unsorted:before,\r\n.fa-sort:before {\r\n  content: \"\\f0dc\";\r\n}\r\n.fa-sort-down:before,\r\n.fa-sort-desc:before {\r\n  content: \"\\f0dd\";\r\n}\r\n.fa-sort-up:before,\r\n.fa-sort-asc:before {\r\n  content: \"\\f0de\";\r\n}\r\n.fa-envelope:before {\r\n  content: \"\\f0e0\";\r\n}\r\n.fa-linkedin:before {\r\n  content: \"\\f0e1\";\r\n}\r\n.fa-rotate-left:before,\r\n.fa-undo:before {\r\n  content: \"\\f0e2\";\r\n}\r\n.fa-legal:before,\r\n.fa-gavel:before {\r\n  content: \"\\f0e3\";\r\n}\r\n.fa-dashboard:before,\r\n.fa-tachometer:before {\r\n  content: \"\\f0e4\";\r\n}\r\n.fa-comment-o:before {\r\n  content: \"\\f0e5\";\r\n}\r\n.fa-comments-o:before {\r\n  content: \"\\f0e6\";\r\n}\r\n.fa-flash:before,\r\n.fa-bolt:before {\r\n  content: \"\\f0e7\";\r\n}\r\n.fa-sitemap:before {\r\n  content: \"\\f0e8\";\r\n}\r\n.fa-umbrella:before {\r\n  content: \"\\f0e9\";\r\n}\r\n.fa-paste:before,\r\n.fa-clipboard:before {\r\n  content: \"\\f0ea\";\r\n}\r\n.fa-lightbulb-o:before {\r\n  content: \"\\f0eb\";\r\n}\r\n.fa-exchange:before {\r\n  content: \"\\f0ec\";\r\n}\r\n.fa-cloud-download:before {\r\n  content: \"\\f0ed\";\r\n}\r\n.fa-cloud-upload:before {\r\n  content: \"\\f0ee\";\r\n}\r\n.fa-user-md:before {\r\n  content: \"\\f0f0\";\r\n}\r\n.fa-stethoscope:before {\r\n  content: \"\\f0f1\";\r\n}\r\n.fa-suitcase:before {\r\n  content: \"\\f0f2\";\r\n}\r\n.fa-bell-o:before {\r\n  content: \"\\f0a2\";\r\n}\r\n.fa-coffee:before {\r\n  content: \"\\f0f4\";\r\n}\r\n.fa-cutlery:before {\r\n  content: \"\\f0f5\";\r\n}\r\n.fa-file-text-o:before {\r\n  content: \"\\f0f6\";\r\n}\r\n.fa-building-o:before {\r\n  content: \"\\f0f7\";\r\n}\r\n.fa-hospital-o:before {\r\n  content: \"\\f0f8\";\r\n}\r\n.fa-ambulance:before {\r\n  content: \"\\f0f9\";\r\n}\r\n.fa-medkit:before {\r\n  content: \"\\f0fa\";\r\n}\r\n.fa-fighter-jet:before {\r\n  content: \"\\f0fb\";\r\n}\r\n.fa-beer:before {\r\n  content: \"\\f0fc\";\r\n}\r\n.fa-h-square:before {\r\n  content: \"\\f0fd\";\r\n}\r\n.fa-plus-square:before {\r\n  content: \"\\f0fe\";\r\n}\r\n.fa-angle-double-left:before {\r\n  content: \"\\f100\";\r\n}\r\n.fa-angle-double-right:before {\r\n  content: \"\\f101\";\r\n}\r\n.fa-angle-double-up:before {\r\n  content: \"\\f102\";\r\n}\r\n.fa-angle-double-down:before {\r\n  content: \"\\f103\";\r\n}\r\n.fa-angle-left:before {\r\n  content: \"\\f104\";\r\n}\r\n.fa-angle-right:before {\r\n  content: \"\\f105\";\r\n}\r\n.fa-angle-up:before {\r\n  content: \"\\f106\";\r\n}\r\n.fa-angle-down:before {\r\n  content: \"\\f107\";\r\n}\r\n.fa-desktop:before {\r\n  content: \"\\f108\";\r\n}\r\n.fa-laptop:before {\r\n  content: \"\\f109\";\r\n}\r\n.fa-tablet:before {\r\n  content: \"\\f10a\";\r\n}\r\n.fa-mobile-phone:before,\r\n.fa-mobile:before {\r\n  content: \"\\f10b\";\r\n}\r\n.fa-circle-o:before {\r\n  content: \"\\f10c\";\r\n}\r\n.fa-quote-left:before {\r\n  content: \"\\f10d\";\r\n}\r\n.fa-quote-right:before {\r\n  content: \"\\f10e\";\r\n}\r\n.fa-spinner:before {\r\n  content: \"\\f110\";\r\n}\r\n.fa-circle:before {\r\n  content: \"\\f111\";\r\n}\r\n.fa-mail-reply:before,\r\n.fa-reply:before {\r\n  content: \"\\f112\";\r\n}\r\n.fa-github-alt:before {\r\n  content: \"\\f113\";\r\n}\r\n.fa-folder-o:before {\r\n  content: \"\\f114\";\r\n}\r\n.fa-folder-open-o:before {\r\n  content: \"\\f115\";\r\n}\r\n.fa-smile-o:before {\r\n  content: \"\\f118\";\r\n}\r\n.fa-frown-o:before {\r\n  content: \"\\f119\";\r\n}\r\n.fa-meh-o:before {\r\n  content: \"\\f11a\";\r\n}\r\n.fa-gamepad:before {\r\n  content: \"\\f11b\";\r\n}\r\n.fa-keyboard-o:before {\r\n  content: \"\\f11c\";\r\n}\r\n.fa-flag-o:before {\r\n  content: \"\\f11d\";\r\n}\r\n.fa-flag-checkered:before {\r\n  content: \"\\f11e\";\r\n}\r\n.fa-terminal:before {\r\n  content: \"\\f120\";\r\n}\r\n.fa-code:before {\r\n  content: \"\\f121\";\r\n}\r\n.fa-mail-reply-all:before,\r\n.fa-reply-all:before {\r\n  content: \"\\f122\";\r\n}\r\n.fa-star-half-empty:before,\r\n.fa-star-half-full:before,\r\n.fa-star-half-o:before {\r\n  content: \"\\f123\";\r\n}\r\n.fa-location-arrow:before {\r\n  content: \"\\f124\";\r\n}\r\n.fa-crop:before {\r\n  content: \"\\f125\";\r\n}\r\n.fa-code-fork:before {\r\n  content: \"\\f126\";\r\n}\r\n.fa-unlink:before,\r\n.fa-chain-broken:before {\r\n  content: \"\\f127\";\r\n}\r\n.fa-question:before {\r\n  content: \"\\f128\";\r\n}\r\n.fa-info:before {\r\n  content: \"\\f129\";\r\n}\r\n.fa-exclamation:before {\r\n  content: \"\\f12a\";\r\n}\r\n.fa-superscript:before {\r\n  content: \"\\f12b\";\r\n}\r\n.fa-subscript:before {\r\n  content: \"\\f12c\";\r\n}\r\n.fa-eraser:before {\r\n  content: \"\\f12d\";\r\n}\r\n.fa-puzzle-piece:before {\r\n  content: \"\\f12e\";\r\n}\r\n.fa-microphone:before {\r\n  content: \"\\f130\";\r\n}\r\n.fa-microphone-slash:before {\r\n  content: \"\\f131\";\r\n}\r\n.fa-shield:before {\r\n  content: \"\\f132\";\r\n}\r\n.fa-calendar-o:before {\r\n  content: \"\\f133\";\r\n}\r\n.fa-fire-extinguisher:before {\r\n  content: \"\\f134\";\r\n}\r\n.fa-rocket:before {\r\n  content: \"\\f135\";\r\n}\r\n.fa-maxcdn:before {\r\n  content: \"\\f136\";\r\n}\r\n.fa-chevron-circle-left:before {\r\n  content: \"\\f137\";\r\n}\r\n.fa-chevron-circle-right:before {\r\n  content: \"\\f138\";\r\n}\r\n.fa-chevron-circle-up:before {\r\n  content: \"\\f139\";\r\n}\r\n.fa-chevron-circle-down:before {\r\n  content: \"\\f13a\";\r\n}\r\n.fa-html5:before {\r\n  content: \"\\f13b\";\r\n}\r\n.fa-css3:before {\r\n  content: \"\\f13c\";\r\n}\r\n.fa-anchor:before {\r\n  content: \"\\f13d\";\r\n}\r\n.fa-unlock-alt:before {\r\n  content: \"\\f13e\";\r\n}\r\n.fa-bullseye:before {\r\n  content: \"\\f140\";\r\n}\r\n.fa-ellipsis-h:before {\r\n  content: \"\\f141\";\r\n}\r\n.fa-ellipsis-v:before {\r\n  content: \"\\f142\";\r\n}\r\n.fa-rss-square:before {\r\n  content: \"\\f143\";\r\n}\r\n.fa-play-circle:before {\r\n  content: \"\\f144\";\r\n}\r\n.fa-ticket:before {\r\n  content: \"\\f145\";\r\n}\r\n.fa-minus-square:before {\r\n  content: \"\\f146\";\r\n}\r\n.fa-minus-square-o:before {\r\n  content: \"\\f147\";\r\n}\r\n.fa-level-up:before {\r\n  content: \"\\f148\";\r\n}\r\n.fa-level-down:before {\r\n  content: \"\\f149\";\r\n}\r\n.fa-check-square:before {\r\n  content: \"\\f14a\";\r\n}\r\n.fa-pencil-square:before {\r\n  content: \"\\f14b\";\r\n}\r\n.fa-external-link-square:before {\r\n  content: \"\\f14c\";\r\n}\r\n.fa-share-square:before {\r\n  content: \"\\f14d\";\r\n}\r\n.fa-compass:before {\r\n  content: \"\\f14e\";\r\n}\r\n.fa-toggle-down:before,\r\n.fa-caret-square-o-down:before {\r\n  content: \"\\f150\";\r\n}\r\n.fa-toggle-up:before,\r\n.fa-caret-square-o-up:before {\r\n  content: \"\\f151\";\r\n}\r\n.fa-toggle-right:before,\r\n.fa-caret-square-o-right:before {\r\n  content: \"\\f152\";\r\n}\r\n.fa-euro:before,\r\n.fa-eur:before {\r\n  content: \"\\f153\";\r\n}\r\n.fa-gbp:before {\r\n  content: \"\\f154\";\r\n}\r\n.fa-dollar:before,\r\n.fa-usd:before {\r\n  content: \"\\f155\";\r\n}\r\n.fa-rupee:before,\r\n.fa-inr:before {\r\n  content: \"\\f156\";\r\n}\r\n.fa-cny:before,\r\n.fa-rmb:before,\r\n.fa-yen:before,\r\n.fa-jpy:before {\r\n  content: \"\\f157\";\r\n}\r\n.fa-ruble:before,\r\n.fa-rouble:before,\r\n.fa-rub:before {\r\n  content: \"\\f158\";\r\n}\r\n.fa-won:before,\r\n.fa-krw:before {\r\n  content: \"\\f159\";\r\n}\r\n.fa-bitcoin:before,\r\n.fa-btc:before {\r\n  content: \"\\f15a\";\r\n}\r\n.fa-file:before {\r\n  content: \"\\f15b\";\r\n}\r\n.fa-file-text:before {\r\n  content: \"\\f15c\";\r\n}\r\n.fa-sort-alpha-asc:before {\r\n  content: \"\\f15d\";\r\n}\r\n.fa-sort-alpha-desc:before {\r\n  content: \"\\f15e\";\r\n}\r\n.fa-sort-amount-asc:before {\r\n  content: \"\\f160\";\r\n}\r\n.fa-sort-amount-desc:before {\r\n  content: \"\\f161\";\r\n}\r\n.fa-sort-numeric-asc:before {\r\n  content: \"\\f162\";\r\n}\r\n.fa-sort-numeric-desc:before {\r\n  content: \"\\f163\";\r\n}\r\n.fa-thumbs-up:before {\r\n  content: \"\\f164\";\r\n}\r\n.fa-thumbs-down:before {\r\n  content: \"\\f165\";\r\n}\r\n.fa-youtube-square:before {\r\n  content: \"\\f166\";\r\n}\r\n.fa-youtube:before {\r\n  content: \"\\f167\";\r\n}\r\n.fa-xing:before {\r\n  content: \"\\f168\";\r\n}\r\n.fa-xing-square:before {\r\n  content: \"\\f169\";\r\n}\r\n.fa-youtube-play:before {\r\n  content: \"\\f16a\";\r\n}\r\n.fa-dropbox:before {\r\n  content: \"\\f16b\";\r\n}\r\n.fa-stack-overflow:before {\r\n  content: \"\\f16c\";\r\n}\r\n.fa-instagram:before {\r\n  content: \"\\f16d\";\r\n}\r\n.fa-flickr:before {\r\n  content: \"\\f16e\";\r\n}\r\n.fa-adn:before {\r\n  content: \"\\f170\";\r\n}\r\n.fa-bitbucket:before {\r\n  content: \"\\f171\";\r\n}\r\n.fa-bitbucket-square:before {\r\n  content: \"\\f172\";\r\n}\r\n.fa-tumblr:before {\r\n  content: \"\\f173\";\r\n}\r\n.fa-tumblr-square:before {\r\n  content: \"\\f174\";\r\n}\r\n.fa-long-arrow-down:before {\r\n  content: \"\\f175\";\r\n}\r\n.fa-long-arrow-up:before {\r\n  content: \"\\f176\";\r\n}\r\n.fa-long-arrow-left:before {\r\n  content: \"\\f177\";\r\n}\r\n.fa-long-arrow-right:before {\r\n  content: \"\\f178\";\r\n}\r\n.fa-apple:before {\r\n  content: \"\\f179\";\r\n}\r\n.fa-windows:before {\r\n  content: \"\\f17a\";\r\n}\r\n.fa-android:before {\r\n  content: \"\\f17b\";\r\n}\r\n.fa-linux:before {\r\n  content: \"\\f17c\";\r\n}\r\n.fa-dribbble:before {\r\n  content: \"\\f17d\";\r\n}\r\n.fa-skype:before {\r\n  content: \"\\f17e\";\r\n}\r\n.fa-foursquare:before {\r\n  content: \"\\f180\";\r\n}\r\n.fa-trello:before {\r\n  content: \"\\f181\";\r\n}\r\n.fa-female:before {\r\n  content: \"\\f182\";\r\n}\r\n.fa-male:before {\r\n  content: \"\\f183\";\r\n}\r\n.fa-gittip:before {\r\n  content: \"\\f184\";\r\n}\r\n.fa-sun-o:before {\r\n  content: \"\\f185\";\r\n}\r\n.fa-moon-o:before {\r\n  content: \"\\f186\";\r\n}\r\n.fa-archive:before {\r\n  content: \"\\f187\";\r\n}\r\n.fa-bug:before {\r\n  content: \"\\f188\";\r\n}\r\n.fa-vk:before {\r\n  content: \"\\f189\";\r\n}\r\n.fa-weibo:before {\r\n  content: \"\\f18a\";\r\n}\r\n.fa-renren:before {\r\n  content: \"\\f18b\";\r\n}\r\n.fa-pagelines:before {\r\n  content: \"\\f18c\";\r\n}\r\n.fa-stack-exchange:before {\r\n  content: \"\\f18d\";\r\n}\r\n.fa-arrow-circle-o-right:before {\r\n  content: \"\\f18e\";\r\n}\r\n.fa-arrow-circle-o-left:before {\r\n  content: \"\\f190\";\r\n}\r\n.fa-toggle-left:before,\r\n.fa-caret-square-o-left:before {\r\n  content: \"\\f191\";\r\n}\r\n.fa-dot-circle-o:before {\r\n  content: \"\\f192\";\r\n}\r\n.fa-wheelchair:before {\r\n  content: \"\\f193\";\r\n}\r\n.fa-vimeo-square:before {\r\n  content: \"\\f194\";\r\n}\r\n.fa-turkish-lira:before,\r\n.fa-try:before {\r\n  content: \"\\f195\";\r\n}\r\n.fa-plus-square-o:before {\r\n  content: \"\\f196\";\r\n}\r\n.fa-space-shuttle:before {\r\n  content: \"\\f197\";\r\n}\r\n.fa-slack:before {\r\n  content: \"\\f198\";\r\n}\r\n.fa-envelope-square:before {\r\n  content: \"\\f199\";\r\n}\r\n.fa-wordpress:before {\r\n  content: \"\\f19a\";\r\n}\r\n.fa-openid:before {\r\n  content: \"\\f19b\";\r\n}\r\n.fa-institution:before,\r\n.fa-bank:before,\r\n.fa-university:before {\r\n  content: \"\\f19c\";\r\n}\r\n.fa-mortar-board:before,\r\n.fa-graduation-cap:before {\r\n  content: \"\\f19d\";\r\n}\r\n.fa-yahoo:before {\r\n  content: \"\\f19e\";\r\n}\r\n.fa-google:before {\r\n  content: \"\\f1a0\";\r\n}\r\n.fa-reddit:before {\r\n  content: \"\\f1a1\";\r\n}\r\n.fa-reddit-square:before {\r\n  content: \"\\f1a2\";\r\n}\r\n.fa-stumbleupon-circle:before {\r\n  content: \"\\f1a3\";\r\n}\r\n.fa-stumbleupon:before {\r\n  content: \"\\f1a4\";\r\n}\r\n.fa-delicious:before {\r\n  content: \"\\f1a5\";\r\n}\r\n.fa-digg:before {\r\n  content: \"\\f1a6\";\r\n}\r\n.fa-pied-piper:before {\r\n  content: \"\\f1a7\";\r\n}\r\n.fa-pied-piper-alt:before {\r\n  content: \"\\f1a8\";\r\n}\r\n.fa-drupal:before {\r\n  content: \"\\f1a9\";\r\n}\r\n.fa-joomla:before {\r\n  content: \"\\f1aa\";\r\n}\r\n.fa-language:before {\r\n  content: \"\\f1ab\";\r\n}\r\n.fa-fax:before {\r\n  content: \"\\f1ac\";\r\n}\r\n.fa-building:before {\r\n  content: \"\\f1ad\";\r\n}\r\n.fa-child:before {\r\n  content: \"\\f1ae\";\r\n}\r\n.fa-paw:before {\r\n  content: \"\\f1b0\";\r\n}\r\n.fa-spoon:before {\r\n  content: \"\\f1b1\";\r\n}\r\n.fa-cube:before {\r\n  content: \"\\f1b2\";\r\n}\r\n.fa-cubes:before {\r\n  content: \"\\f1b3\";\r\n}\r\n.fa-behance:before {\r\n  content: \"\\f1b4\";\r\n}\r\n.fa-behance-square:before {\r\n  content: \"\\f1b5\";\r\n}\r\n.fa-steam:before {\r\n  content: \"\\f1b6\";\r\n}\r\n.fa-steam-square:before {\r\n  content: \"\\f1b7\";\r\n}\r\n.fa-recycle:before {\r\n  content: \"\\f1b8\";\r\n}\r\n.fa-automobile:before,\r\n.fa-car:before {\r\n  content: \"\\f1b9\";\r\n}\r\n.fa-cab:before,\r\n.fa-taxi:before {\r\n  content: \"\\f1ba\";\r\n}\r\n.fa-tree:before {\r\n  content: \"\\f1bb\";\r\n}\r\n.fa-spotify:before {\r\n  content: \"\\f1bc\";\r\n}\r\n.fa-deviantart:before {\r\n  content: \"\\f1bd\";\r\n}\r\n.fa-soundcloud:before {\r\n  content: \"\\f1be\";\r\n}\r\n.fa-database:before {\r\n  content: \"\\f1c0\";\r\n}\r\n.fa-file-pdf-o:before {\r\n  content: \"\\f1c1\";\r\n}\r\n.fa-file-word-o:before {\r\n  content: \"\\f1c2\";\r\n}\r\n.fa-file-excel-o:before {\r\n  content: \"\\f1c3\";\r\n}\r\n.fa-file-powerpoint-o:before {\r\n  content: \"\\f1c4\";\r\n}\r\n.fa-file-photo-o:before,\r\n.fa-file-picture-o:before,\r\n.fa-file-image-o:before {\r\n  content: \"\\f1c5\";\r\n}\r\n.fa-file-zip-o:before,\r\n.fa-file-archive-o:before {\r\n  content: \"\\f1c6\";\r\n}\r\n.fa-file-sound-o:before,\r\n.fa-file-audio-o:before {\r\n  content: \"\\f1c7\";\r\n}\r\n.fa-file-movie-o:before,\r\n.fa-file-video-o:before {\r\n  content: \"\\f1c8\";\r\n}\r\n.fa-file-code-o:before {\r\n  content: \"\\f1c9\";\r\n}\r\n.fa-vine:before {\r\n  content: \"\\f1ca\";\r\n}\r\n.fa-codepen:before {\r\n  content: \"\\f1cb\";\r\n}\r\n.fa-jsfiddle:before {\r\n  content: \"\\f1cc\";\r\n}\r\n.fa-life-bouy:before,\r\n.fa-life-buoy:before,\r\n.fa-life-saver:before,\r\n.fa-support:before,\r\n.fa-life-ring:before {\r\n  content: \"\\f1cd\";\r\n}\r\n.fa-circle-o-notch:before {\r\n  content: \"\\f1ce\";\r\n}\r\n.fa-ra:before,\r\n.fa-rebel:before {\r\n  content: \"\\f1d0\";\r\n}\r\n.fa-ge:before,\r\n.fa-empire:before {\r\n  content: \"\\f1d1\";\r\n}\r\n.fa-git-square:before {\r\n  content: \"\\f1d2\";\r\n}\r\n.fa-git:before {\r\n  content: \"\\f1d3\";\r\n}\r\n.fa-hacker-news:before {\r\n  content: \"\\f1d4\";\r\n}\r\n.fa-tencent-weibo:before {\r\n  content: \"\\f1d5\";\r\n}\r\n.fa-qq:before {\r\n  content: \"\\f1d6\";\r\n}\r\n.fa-wechat:before,\r\n.fa-weixin:before {\r\n  content: \"\\f1d7\";\r\n}\r\n.fa-send:before,\r\n.fa-paper-plane:before {\r\n  content: \"\\f1d8\";\r\n}\r\n.fa-send-o:before,\r\n.fa-paper-plane-o:before {\r\n  content: \"\\f1d9\";\r\n}\r\n.fa-history:before {\r\n  content: \"\\f1da\";\r\n}\r\n.fa-circle-thin:before {\r\n  content: \"\\f1db\";\r\n}\r\n.fa-header:before {\r\n  content: \"\\f1dc\";\r\n}\r\n.fa-paragraph:before {\r\n  content: \"\\f1dd\";\r\n}\r\n.fa-sliders:before {\r\n  content: \"\\f1de\";\r\n}\r\n.fa-share-alt:before {\r\n  content: \"\\f1e0\";\r\n}\r\n.fa-share-alt-square:before {\r\n  content: \"\\f1e1\";\r\n}\r\n.fa-bomb:before {\r\n  content: \"\\f1e2\";\r\n}\r\n.fa-soccer-ball-o:before,\r\n.fa-futbol-o:before {\r\n  content: \"\\f1e3\";\r\n}\r\n.fa-tty:before {\r\n  content: \"\\f1e4\";\r\n}\r\n.fa-binoculars:before {\r\n  content: \"\\f1e5\";\r\n}\r\n.fa-plug:before {\r\n  content: \"\\f1e6\";\r\n}\r\n.fa-slideshare:before {\r\n  content: \"\\f1e7\";\r\n}\r\n.fa-twitch:before {\r\n  content: \"\\f1e8\";\r\n}\r\n.fa-yelp:before {\r\n  content: \"\\f1e9\";\r\n}\r\n.fa-newspaper-o:before {\r\n  content: \"\\f1ea\";\r\n}\r\n.fa-wifi:before {\r\n  content: \"\\f1eb\";\r\n}\r\n.fa-calculator:before {\r\n  content: \"\\f1ec\";\r\n}\r\n.fa-paypal:before {\r\n  content: \"\\f1ed\";\r\n}\r\n.fa-google-wallet:before {\r\n  content: \"\\f1ee\";\r\n}\r\n.fa-cc-visa:before {\r\n  content: \"\\f1f0\";\r\n}\r\n.fa-cc-mastercard:before {\r\n  content: \"\\f1f1\";\r\n}\r\n.fa-cc-discover:before {\r\n  content: \"\\f1f2\";\r\n}\r\n.fa-cc-amex:before {\r\n  content: \"\\f1f3\";\r\n}\r\n.fa-cc-paypal:before {\r\n  content: \"\\f1f4\";\r\n}\r\n.fa-cc-stripe:before {\r\n  content: \"\\f1f5\";\r\n}\r\n.fa-bell-slash:before {\r\n  content: \"\\f1f6\";\r\n}\r\n.fa-bell-slash-o:before {\r\n  content: \"\\f1f7\";\r\n}\r\n.fa-trash:before {\r\n  content: \"\\f1f8\";\r\n}\r\n.fa-copyright:before {\r\n  content: \"\\f1f9\";\r\n}\r\n.fa-at:before {\r\n  content: \"\\f1fa\";\r\n}\r\n.fa-eyedropper:before {\r\n  content: \"\\f1fb\";\r\n}\r\n.fa-paint-brush:before {\r\n  content: \"\\f1fc\";\r\n}\r\n.fa-birthday-cake:before {\r\n  content: \"\\f1fd\";\r\n}\r\n.fa-area-chart:before {\r\n  content: \"\\f1fe\";\r\n}\r\n.fa-pie-chart:before {\r\n  content: \"\\f200\";\r\n}\r\n.fa-line-chart:before {\r\n  content: \"\\f201\";\r\n}\r\n.fa-lastfm:before {\r\n  content: \"\\f202\";\r\n}\r\n.fa-lastfm-square:before {\r\n  content: \"\\f203\";\r\n}\r\n.fa-toggle-off:before {\r\n  content: \"\\f204\";\r\n}\r\n.fa-toggle-on:before {\r\n  content: \"\\f205\";\r\n}\r\n.fa-bicycle:before {\r\n  content: \"\\f206\";\r\n}\r\n.fa-bus:before {\r\n  content: \"\\f207\";\r\n}\r\n.fa-ioxhost:before {\r\n  content: \"\\f208\";\r\n}\r\n.fa-angellist:before {\r\n  content: \"\\f209\";\r\n}\r\n.fa-cc:before {\r\n  content: \"\\f20a\";\r\n}\r\n.fa-shekel:before,\r\n.fa-sheqel:before,\r\n.fa-ils:before {\r\n  content: \"\\f20b\";\r\n}\r\n.fa-meanpath:before {\r\n  content: \"\\f20c\";\r\n}\r\n/*!\r\n*\r\n* IPython base\r\n*\r\n*/\r\n.modal.fade .modal-dialog {\r\n  -webkit-transform: translate(0, 0);\r\n  -ms-transform: translate(0, 0);\r\n  -o-transform: translate(0, 0);\r\n  transform: translate(0, 0);\r\n}\r\ncode {\r\n  color: #000;\r\n}\r\npre {\r\n  font-size: inherit;\r\n  line-height: inherit;\r\n}\r\nlabel {\r\n  font-weight: normal;\r\n}\r\n/* Make the page background atleast 100% the height of the view port */\r\n/* Make the page itself atleast 70% the height of the view port */\r\n.border-box-sizing {\r\n  box-sizing: border-box;\r\n  -moz-box-sizing: border-box;\r\n  -webkit-box-sizing: border-box;\r\n}\r\n.corner-all {\r\n  border-radius: 2px;\r\n}\r\n.no-padding {\r\n  padding: 0px;\r\n}\r\n/* Flexible box model classes */\r\n/* Taken from Alex Russell http://infrequently.org/2009/08/css-3-progress/ */\r\n/* This file is a compatability layer.  It allows the usage of flexible box \r\nmodel layouts accross multiple browsers, including older browsers.  The newest,\r\nuniversal implementation of the flexible box model is used when available (see\r\n`Modern browsers` comments below).  Browsers that are known to implement this \r\nnew spec completely include:\r\n\r\n    Firefox 28.0+\r\n    Chrome 29.0+\r\n    Internet Explorer 11+ \r\n    Opera 17.0+\r\n\r\nBrowsers not listed, including Safari, are supported via the styling under the\r\n`Old browsers` comments below.\r\n*/\r\n.hbox {\r\n  /* Old browsers */\r\n  display: -webkit-box;\r\n  -webkit-box-orient: horizontal;\r\n  -webkit-box-align: stretch;\r\n  display: -moz-box;\r\n  -moz-box-orient: horizontal;\r\n  -moz-box-align: stretch;\r\n  display: box;\r\n  box-orient: horizontal;\r\n  box-align: stretch;\r\n  /* Modern browsers */\r\n  display: flex;\r\n  flex-direction: row;\r\n  align-items: stretch;\r\n}\r\n.hbox > * {\r\n  /* Old browsers */\r\n  -webkit-box-flex: 0;\r\n  -moz-box-flex: 0;\r\n  box-flex: 0;\r\n  /* Modern browsers */\r\n  flex: none;\r\n}\r\n.vbox {\r\n  /* Old browsers */\r\n  display: -webkit-box;\r\n  -webkit-box-orient: vertical;\r\n  -webkit-box-align: stretch;\r\n  display: -moz-box;\r\n  -moz-box-orient: vertical;\r\n  -moz-box-align: stretch;\r\n  display: box;\r\n  box-orient: vertical;\r\n  box-align: stretch;\r\n  /* Modern browsers */\r\n  display: flex;\r\n  flex-direction: column;\r\n  align-items: stretch;\r\n}\r\n.vbox > * {\r\n  /* Old browsers */\r\n  -webkit-box-flex: 0;\r\n  -moz-box-flex: 0;\r\n  box-flex: 0;\r\n  /* Modern browsers */\r\n  flex: none;\r\n}\r\n.hbox.reverse,\r\n.vbox.reverse,\r\n.reverse {\r\n  /* Old browsers */\r\n  -webkit-box-direction: reverse;\r\n  -moz-box-direction: reverse;\r\n  box-direction: reverse;\r\n  /* Modern browsers */\r\n  flex-direction: row-reverse;\r\n}\r\n.hbox.box-flex0,\r\n.vbox.box-flex0,\r\n.box-flex0 {\r\n  /* Old browsers */\r\n  -webkit-box-flex: 0;\r\n  -moz-box-flex: 0;\r\n  box-flex: 0;\r\n  /* Modern browsers */\r\n  flex: none;\r\n  width: auto;\r\n}\r\n.hbox.box-flex1,\r\n.vbox.box-flex1,\r\n.box-flex1 {\r\n  /* Old browsers */\r\n  -webkit-box-flex: 1;\r\n  -moz-box-flex: 1;\r\n  box-flex: 1;\r\n  /* Modern browsers */\r\n  flex: 1;\r\n}\r\n.hbox.box-flex,\r\n.vbox.box-flex,\r\n.box-flex {\r\n  /* Old browsers */\r\n  /* Old browsers */\r\n  -webkit-box-flex: 1;\r\n  -moz-box-flex: 1;\r\n  box-flex: 1;\r\n  /* Modern browsers */\r\n  flex: 1;\r\n}\r\n.hbox.box-flex2,\r\n.vbox.box-flex2,\r\n.box-flex2 {\r\n  /* Old browsers */\r\n  -webkit-box-flex: 2;\r\n  -moz-box-flex: 2;\r\n  box-flex: 2;\r\n  /* Modern browsers */\r\n  flex: 2;\r\n}\r\n.box-group1 {\r\n  /*  Deprecated */\r\n  -webkit-box-flex-group: 1;\r\n  -moz-box-flex-group: 1;\r\n  box-flex-group: 1;\r\n}\r\n.box-group2 {\r\n  /* Deprecated */\r\n  -webkit-box-flex-group: 2;\r\n  -moz-box-flex-group: 2;\r\n  box-flex-group: 2;\r\n}\r\n.hbox.start,\r\n.vbox.start,\r\n.start {\r\n  /* Old browsers */\r\n  -webkit-box-pack: start;\r\n  -moz-box-pack: start;\r\n  box-pack: start;\r\n  /* Modern browsers */\r\n  justify-content: flex-start;\r\n}\r\n.hbox.end,\r\n.vbox.end,\r\n.end {\r\n  /* Old browsers */\r\n  -webkit-box-pack: end;\r\n  -moz-box-pack: end;\r\n  box-pack: end;\r\n  /* Modern browsers */\r\n  justify-content: flex-end;\r\n}\r\n.hbox.center,\r\n.vbox.center,\r\n.center {\r\n  /* Old browsers */\r\n  -webkit-box-pack: center;\r\n  -moz-box-pack: center;\r\n  box-pack: center;\r\n  /* Modern browsers */\r\n  justify-content: center;\r\n}\r\n.hbox.baseline,\r\n.vbox.baseline,\r\n.baseline {\r\n  /* Old browsers */\r\n  -webkit-box-pack: baseline;\r\n  -moz-box-pack: baseline;\r\n  box-pack: baseline;\r\n  /* Modern browsers */\r\n  justify-content: baseline;\r\n}\r\n.hbox.stretch,\r\n.vbox.stretch,\r\n.stretch {\r\n  /* Old browsers */\r\n  -webkit-box-pack: stretch;\r\n  -moz-box-pack: stretch;\r\n  box-pack: stretch;\r\n  /* Modern browsers */\r\n  justify-content: stretch;\r\n}\r\n.hbox.align-start,\r\n.vbox.align-start,\r\n.align-start {\r\n  /* Old browsers */\r\n  -webkit-box-align: start;\r\n  -moz-box-align: start;\r\n  box-align: start;\r\n  /* Modern browsers */\r\n  align-items: flex-start;\r\n}\r\n.hbox.align-end,\r\n.vbox.align-end,\r\n.align-end {\r\n  /* Old browsers */\r\n  -webkit-box-align: end;\r\n  -moz-box-align: end;\r\n  box-align: end;\r\n  /* Modern browsers */\r\n  align-items: flex-end;\r\n}\r\n.hbox.align-center,\r\n.vbox.align-center,\r\n.align-center {\r\n  /* Old browsers */\r\n  -webkit-box-align: center;\r\n  -moz-box-align: center;\r\n  box-align: center;\r\n  /* Modern browsers */\r\n  align-items: center;\r\n}\r\n.hbox.align-baseline,\r\n.vbox.align-baseline,\r\n.align-baseline {\r\n  /* Old browsers */\r\n  -webkit-box-align: baseline;\r\n  -moz-box-align: baseline;\r\n  box-align: baseline;\r\n  /* Modern browsers */\r\n  align-items: baseline;\r\n}\r\n.hbox.align-stretch,\r\n.vbox.align-stretch,\r\n.align-stretch {\r\n  /* Old browsers */\r\n  -webkit-box-align: stretch;\r\n  -moz-box-align: stretch;\r\n  box-align: stretch;\r\n  /* Modern browsers */\r\n  align-items: stretch;\r\n}\r\ndiv.error {\r\n  margin: 2em;\r\n  text-align: center;\r\n}\r\ndiv.error > h1 {\r\n  font-size: 500%;\r\n  line-height: normal;\r\n}\r\ndiv.error > p {\r\n  font-size: 200%;\r\n  line-height: normal;\r\n}\r\ndiv.traceback-wrapper {\r\n  text-align: left;\r\n  max-width: 800px;\r\n  margin: auto;\r\n}\r\n/**\r\n * Primary styles\r\n *\r\n * Author: Jupyter Development Team\r\n */\r\nbody {\r\n  background-color: #fff;\r\n  /* This makes sure that the body covers the entire window and needs to\r\n       be in a different element than the display: box in wrapper below */\r\n  position: absolute;\r\n  left: 0px;\r\n  right: 0px;\r\n  top: 0px;\r\n  bottom: 0px;\r\n  overflow: visible;\r\n}\r\nbody > #header {\r\n  /* Initially hidden to prevent FLOUC */\r\n  display: none;\r\n  background-color: #fff;\r\n  /* Display over codemirror */\r\n  position: relative;\r\n  z-index: 100;\r\n}\r\nbody > #header #header-container {\r\n  padding-bottom: 5px;\r\n  padding-top: 5px;\r\n  box-sizing: border-box;\r\n  -moz-box-sizing: border-box;\r\n  -webkit-box-sizing: border-box;\r\n}\r\nbody > #header .header-bar {\r\n  width: 100%;\r\n  height: 1px;\r\n  background: #e7e7e7;\r\n  margin-bottom: -1px;\r\n}\r\n@media print {\r\n  body > #header {\r\n    display: none !important;\r\n  }\r\n}\r\n#header-spacer {\r\n  width: 100%;\r\n  visibility: hidden;\r\n}\r\n@media print {\r\n  #header-spacer {\r\n    display: none;\r\n  }\r\n}\r\n#ipython_notebook {\r\n  padding-left: 0px;\r\n  padding-top: 1px;\r\n  padding-bottom: 1px;\r\n}\r\n@media (max-width: 991px) {\r\n  #ipython_notebook {\r\n    margin-left: 10px;\r\n  }\r\n}\r\n[dir=\"rtl\"] #ipython_notebook {\r\n  float: right !important;\r\n}\r\n#noscript {\r\n  width: auto;\r\n  padding-top: 16px;\r\n  padding-bottom: 16px;\r\n  text-align: center;\r\n  font-size: 22px;\r\n  color: red;\r\n  font-weight: bold;\r\n}\r\n#ipython_notebook img {\r\n  height: 28px;\r\n}\r\n#site {\r\n  width: 100%;\r\n  display: none;\r\n  box-sizing: border-box;\r\n  -moz-box-sizing: border-box;\r\n  -webkit-box-sizing: border-box;\r\n  overflow: auto;\r\n}\r\n@media print {\r\n  #site {\r\n    height: auto !important;\r\n  }\r\n}\r\n/* Smaller buttons */\r\n.ui-button .ui-button-text {\r\n  padding: 0.2em 0.8em;\r\n  font-size: 77%;\r\n}\r\ninput.ui-button {\r\n  padding: 0.3em 0.9em;\r\n}\r\nspan#login_widget {\r\n  float: right;\r\n}\r\nspan#login_widget > .button,\r\n#logout {\r\n  color: #333;\r\n  background-color: #fff;\r\n  border-color: #ccc;\r\n}\r\nspan#login_widget > .button:focus,\r\n#logout:focus,\r\nspan#login_widget > .button.focus,\r\n#logout.focus {\r\n  color: #333;\r\n  background-color: #e6e6e6;\r\n  border-color: #8c8c8c;\r\n}\r\nspan#login_widget > .button:hover,\r\n#logout:hover {\r\n  color: #333;\r\n  background-color: #e6e6e6;\r\n  border-color: #adadad;\r\n}\r\nspan#login_widget > .button:active,\r\n#logout:active,\r\nspan#login_widget > .button.active,\r\n#logout.active,\r\n.open > .dropdown-togglespan#login_widget > .button,\r\n.open > .dropdown-toggle#logout {\r\n  color: #333;\r\n  background-color: #e6e6e6;\r\n  border-color: #adadad;\r\n}\r\nspan#login_widget > .button:active:hover,\r\n#logout:active:hover,\r\nspan#login_widget > .button.active:hover,\r\n#logout.active:hover,\r\n.open > .dropdown-togglespan#login_widget > .button:hover,\r\n.open > .dropdown-toggle#logout:hover,\r\nspan#login_widget > .button:active:focus,\r\n#logout:active:focus,\r\nspan#login_widget > .button.active:focus,\r\n#logout.active:focus,\r\n.open > .dropdown-togglespan#login_widget > .button:focus,\r\n.open > .dropdown-toggle#logout:focus,\r\nspan#login_widget > .button:active.focus,\r\n#logout:active.focus,\r\nspan#login_widget > .button.active.focus,\r\n#logout.active.focus,\r\n.open > .dropdown-togglespan#login_widget > .button.focus,\r\n.open > .dropdown-toggle#logout.focus {\r\n  color: #333;\r\n  background-color: #d4d4d4;\r\n  border-color: #8c8c8c;\r\n}\r\nspan#login_widget > .button:active,\r\n#logout:active,\r\nspan#login_widget > .button.active,\r\n#logout.active,\r\n.open > .dropdown-togglespan#login_widget > .button,\r\n.open > .dropdown-toggle#logout {\r\n  background-image: none;\r\n}\r\nspan#login_widget > .button.disabled:hover,\r\n#logout.disabled:hover,\r\nspan#login_widget > .button[disabled]:hover,\r\n#logout[disabled]:hover,\r\nfieldset[disabled] span#login_widget > .button:hover,\r\nfieldset[disabled] #logout:hover,\r\nspan#login_widget > .button.disabled:focus,\r\n#logout.disabled:focus,\r\nspan#login_widget > .button[disabled]:focus,\r\n#logout[disabled]:focus,\r\nfieldset[disabled] span#login_widget > .button:focus,\r\nfieldset[disabled] #logout:focus,\r\nspan#login_widget > .button.disabled.focus,\r\n#logout.disabled.focus,\r\nspan#login_widget > .button[disabled].focus,\r\n#logout[disabled].focus,\r\nfieldset[disabled] span#login_widget > .button.focus,\r\nfieldset[disabled] #logout.focus {\r\n  background-color: #fff;\r\n  border-color: #ccc;\r\n}\r\nspan#login_widget > .button .badge,\r\n#logout .badge {\r\n  color: #fff;\r\n  background-color: #333;\r\n}\r\n.nav-header {\r\n  text-transform: none;\r\n}\r\n#header > span {\r\n  margin-top: 10px;\r\n}\r\n.modal_stretch .modal-dialog {\r\n  /* Old browsers */\r\n  display: -webkit-box;\r\n  -webkit-box-orient: vertical;\r\n  -webkit-box-align: stretch;\r\n  display: -moz-box;\r\n  -moz-box-orient: vertical;\r\n  -moz-box-align: stretch;\r\n  display: box;\r\n  box-orient: vertical;\r\n  box-align: stretch;\r\n  /* Modern browsers */\r\n  display: flex;\r\n  flex-direction: column;\r\n  align-items: stretch;\r\n  min-height: 80vh;\r\n}\r\n.modal_stretch .modal-dialog .modal-body {\r\n  max-height: calc(100vh - 200px);\r\n  overflow: auto;\r\n  flex: 1;\r\n}\r\n@media (min-width: 768px) {\r\n  .modal .modal-dialog {\r\n    width: 700px;\r\n  }\r\n}\r\n@media (min-width: 768px) {\r\n  select.form-control {\r\n    margin-left: 12px;\r\n    margin-right: 12px;\r\n  }\r\n}\r\n/*!\r\n*\r\n* IPython auth\r\n*\r\n*/\r\n.center-nav {\r\n  display: inline-block;\r\n  margin-bottom: -4px;\r\n}\r\n/*!\r\n*\r\n* IPython tree view\r\n*\r\n*/\r\n/* We need an invisible input field on top of the sentense*/\r\n/* \"Drag file onto the list ...\" */\r\n.alternate_upload {\r\n  background-color: none;\r\n  display: inline;\r\n}\r\n.alternate_upload.form {\r\n  padding: 0;\r\n  margin: 0;\r\n}\r\n.alternate_upload input.fileinput {\r\n  text-align: center;\r\n  vertical-align: middle;\r\n  display: inline;\r\n  opacity: 0;\r\n  z-index: 2;\r\n  width: 12ex;\r\n  margin-right: -12ex;\r\n}\r\n.alternate_upload .btn-upload {\r\n  height: 22px;\r\n}\r\n/**\r\n * Primary styles\r\n *\r\n * Author: Jupyter Development Team\r\n */\r\n[dir=\"rtl\"] #tabs li {\r\n  float: right;\r\n}\r\nul#tabs {\r\n  margin-bottom: 4px;\r\n}\r\n[dir=\"rtl\"] ul#tabs {\r\n  margin-right: 0px;\r\n}\r\nul#tabs a {\r\n  padding-top: 6px;\r\n  padding-bottom: 4px;\r\n}\r\nul.breadcrumb a:focus,\r\nul.breadcrumb a:hover {\r\n  text-decoration: none;\r\n}\r\nul.breadcrumb i.icon-home {\r\n  font-size: 16px;\r\n  margin-right: 4px;\r\n}\r\nul.breadcrumb span {\r\n  color: #5e5e5e;\r\n}\r\n.list_toolbar {\r\n  padding: 4px 0 4px 0;\r\n  vertical-align: middle;\r\n}\r\n.list_toolbar .tree-buttons {\r\n  padding-top: 1px;\r\n}\r\n[dir=\"rtl\"] .list_toolbar .tree-buttons {\r\n  float: left !important;\r\n}\r\n[dir=\"rtl\"] .list_toolbar .pull-right {\r\n  padding-top: 1px;\r\n  float: left !important;\r\n}\r\n[dir=\"rtl\"] .list_toolbar .pull-left {\r\n  float: right !important;\r\n}\r\n.dynamic-buttons {\r\n  padding-top: 3px;\r\n  display: inline-block;\r\n}\r\n.list_toolbar [class*=\"span\"] {\r\n  min-height: 24px;\r\n}\r\n.list_header {\r\n  font-weight: bold;\r\n  background-color: #EEE;\r\n}\r\n.list_placeholder {\r\n  font-weight: bold;\r\n  padding-top: 4px;\r\n  padding-bottom: 4px;\r\n  padding-left: 7px;\r\n  padding-right: 7px;\r\n}\r\n.list_container {\r\n  margin-top: 4px;\r\n  margin-bottom: 20px;\r\n  border: 1px solid #ddd;\r\n  border-radius: 2px;\r\n}\r\n.list_container > div {\r\n  border-bottom: 1px solid #ddd;\r\n}\r\n.list_container > div:hover .list-item {\r\n  background-color: red;\r\n}\r\n.list_container > div:last-child {\r\n  border: none;\r\n}\r\n.list_item:hover .list_item {\r\n  background-color: #ddd;\r\n}\r\n.list_item a {\r\n  text-decoration: none;\r\n}\r\n.list_item:hover {\r\n  background-color: #fafafa;\r\n}\r\n.list_header > div,\r\n.list_item > div {\r\n  padding-top: 4px;\r\n  padding-bottom: 4px;\r\n  padding-left: 7px;\r\n  padding-right: 7px;\r\n  line-height: 22px;\r\n}\r\n.list_header > div input,\r\n.list_item > div input {\r\n  margin-right: 7px;\r\n  margin-left: 14px;\r\n  vertical-align: baseline;\r\n  line-height: 22px;\r\n  position: relative;\r\n  top: -1px;\r\n}\r\n.list_header > div .item_link,\r\n.list_item > div .item_link {\r\n  margin-left: -1px;\r\n  vertical-align: baseline;\r\n  line-height: 22px;\r\n}\r\n.new-file input[type=checkbox] {\r\n  visibility: hidden;\r\n}\r\n.item_name {\r\n  line-height: 22px;\r\n  height: 24px;\r\n}\r\n.item_icon {\r\n  font-size: 14px;\r\n  color: #5e5e5e;\r\n  margin-right: 7px;\r\n  margin-left: 7px;\r\n  line-height: 22px;\r\n  vertical-align: baseline;\r\n}\r\n.item_buttons {\r\n  line-height: 1em;\r\n  margin-left: -5px;\r\n}\r\n.item_buttons .btn,\r\n.item_buttons .btn-group,\r\n.item_buttons .input-group {\r\n  float: left;\r\n}\r\n.item_buttons > .btn,\r\n.item_buttons > .btn-group,\r\n.item_buttons > .input-group {\r\n  margin-left: 5px;\r\n}\r\n.item_buttons .btn {\r\n  min-width: 13ex;\r\n}\r\n.item_buttons .running-indicator {\r\n  padding-top: 4px;\r\n  color: #5cb85c;\r\n}\r\n.item_buttons .kernel-name {\r\n  padding-top: 4px;\r\n  color: #5bc0de;\r\n  margin-right: 7px;\r\n  float: left;\r\n}\r\n.toolbar_info {\r\n  height: 24px;\r\n  line-height: 24px;\r\n}\r\n.list_item input:not([type=checkbox]) {\r\n  padding-top: 3px;\r\n  padding-bottom: 3px;\r\n  height: 22px;\r\n  line-height: 14px;\r\n  margin: 0px;\r\n}\r\n.highlight_text {\r\n  color: blue;\r\n}\r\n#project_name {\r\n  display: inline-block;\r\n  padding-left: 7px;\r\n  margin-left: -2px;\r\n}\r\n#project_name > .breadcrumb {\r\n  padding: 0px;\r\n  margin-bottom: 0px;\r\n  background-color: transparent;\r\n  font-weight: bold;\r\n}\r\n#tree-selector {\r\n  padding-right: 0px;\r\n}\r\n[dir=\"rtl\"] #tree-selector a {\r\n  float: right;\r\n}\r\n#button-select-all {\r\n  min-width: 50px;\r\n}\r\n#select-all {\r\n  margin-left: 7px;\r\n  margin-right: 2px;\r\n}\r\n.menu_icon {\r\n  margin-right: 2px;\r\n}\r\n.tab-content .row {\r\n  margin-left: 0px;\r\n  margin-right: 0px;\r\n}\r\n.folder_icon:before {\r\n  display: inline-block;\r\n  font: normal normal normal 14px/1 FontAwesome;\r\n  font-size: inherit;\r\n  text-rendering: auto;\r\n  -webkit-font-smoothing: antialiased;\r\n  -moz-osx-font-smoothing: grayscale;\r\n  content: \"\\f114\";\r\n}\r\n.folder_icon:before.pull-left {\r\n  margin-right: .3em;\r\n}\r\n.folder_icon:before.pull-right {\r\n  margin-left: .3em;\r\n}\r\n.notebook_icon:before {\r\n  display: inline-block;\r\n  font: normal normal normal 14px/1 FontAwesome;\r\n  font-size: inherit;\r\n  text-rendering: auto;\r\n  -webkit-font-smoothing: antialiased;\r\n  -moz-osx-font-smoothing: grayscale;\r\n  content: \"\\f02d\";\r\n  position: relative;\r\n  top: -1px;\r\n}\r\n.notebook_icon:before.pull-left {\r\n  margin-right: .3em;\r\n}\r\n.notebook_icon:before.pull-right {\r\n  margin-left: .3em;\r\n}\r\n.running_notebook_icon:before {\r\n  display: inline-block;\r\n  font: normal normal normal 14px/1 FontAwesome;\r\n  font-size: inherit;\r\n  text-rendering: auto;\r\n  -webkit-font-smoothing: antialiased;\r\n  -moz-osx-font-smoothing: grayscale;\r\n  content: \"\\f02d\";\r\n  position: relative;\r\n  top: -1px;\r\n  color: #5cb85c;\r\n}\r\n.running_notebook_icon:before.pull-left {\r\n  margin-right: .3em;\r\n}\r\n.running_notebook_icon:before.pull-right {\r\n  margin-left: .3em;\r\n}\r\n.file_icon:before {\r\n  display: inline-block;\r\n  font: normal normal normal 14px/1 FontAwesome;\r\n  font-size: inherit;\r\n  text-rendering: auto;\r\n  -webkit-font-smoothing: antialiased;\r\n  -moz-osx-font-smoothing: grayscale;\r\n  content: \"\\f016\";\r\n  position: relative;\r\n  top: -2px;\r\n}\r\n.file_icon:before.pull-left {\r\n  margin-right: .3em;\r\n}\r\n.file_icon:before.pull-right {\r\n  margin-left: .3em;\r\n}\r\n#notebook_toolbar .pull-right {\r\n  padding-top: 0px;\r\n  margin-right: -1px;\r\n}\r\nul#new-menu {\r\n  left: auto;\r\n  right: 0;\r\n}\r\n[dir=\"rtl\"] #new-menu {\r\n  text-align: right;\r\n}\r\n.kernel-menu-icon {\r\n  padding-right: 12px;\r\n  width: 24px;\r\n  content: \"\\f096\";\r\n}\r\n.kernel-menu-icon:before {\r\n  content: \"\\f096\";\r\n}\r\n.kernel-menu-icon-current:before {\r\n  content: \"\\f00c\";\r\n}\r\n#tab_content {\r\n  padding-top: 20px;\r\n}\r\n#running .panel-group .panel {\r\n  margin-top: 3px;\r\n  margin-bottom: 1em;\r\n}\r\n#running .panel-group .panel .panel-heading {\r\n  background-color: #EEE;\r\n  padding-top: 4px;\r\n  padding-bottom: 4px;\r\n  padding-left: 7px;\r\n  padding-right: 7px;\r\n  line-height: 22px;\r\n}\r\n#running .panel-group .panel .panel-heading a:focus,\r\n#running .panel-group .panel .panel-heading a:hover {\r\n  text-decoration: none;\r\n}\r\n#running .panel-group .panel .panel-body {\r\n  padding: 0px;\r\n}\r\n#running .panel-group .panel .panel-body .list_container {\r\n  margin-top: 0px;\r\n  margin-bottom: 0px;\r\n  border: 0px;\r\n  border-radius: 0px;\r\n}\r\n#running .panel-group .panel .panel-body .list_container .list_item {\r\n  border-bottom: 1px solid #ddd;\r\n}\r\n#running .panel-group .panel .panel-body .list_container .list_item:last-child {\r\n  border-bottom: 0px;\r\n}\r\n[dir=\"rtl\"] #running .col-sm-8 {\r\n  float: right !important;\r\n}\r\n.delete-button {\r\n  display: none;\r\n}\r\n.duplicate-button {\r\n  display: none;\r\n}\r\n.rename-button {\r\n  display: none;\r\n}\r\n.shutdown-button {\r\n  display: none;\r\n}\r\n.dynamic-instructions {\r\n  display: inline-block;\r\n  padding-top: 4px;\r\n}\r\n/*!\r\n*\r\n* IPython text editor webapp\r\n*\r\n*/\r\n.selected-keymap i.fa {\r\n  padding: 0px 5px;\r\n}\r\n.selected-keymap i.fa:before {\r\n  content: \"\\f00c\";\r\n}\r\n#mode-menu {\r\n  overflow: auto;\r\n  max-height: 20em;\r\n}\r\n.edit_app #header {\r\n  -webkit-box-shadow: 0px 0px 12px 1px rgba(87, 87, 87, 0.2);\r\n  box-shadow: 0px 0px 12px 1px rgba(87, 87, 87, 0.2);\r\n}\r\n.edit_app #menubar .navbar {\r\n  /* Use a negative 1 bottom margin, so the border overlaps the border of the\r\n    header */\r\n  margin-bottom: -1px;\r\n}\r\n.dirty-indicator {\r\n  display: inline-block;\r\n  font: normal normal normal 14px/1 FontAwesome;\r\n  font-size: inherit;\r\n  text-rendering: auto;\r\n  -webkit-font-smoothing: antialiased;\r\n  -moz-osx-font-smoothing: grayscale;\r\n  width: 20px;\r\n}\r\n.dirty-indicator.pull-left {\r\n  margin-right: .3em;\r\n}\r\n.dirty-indicator.pull-right {\r\n  margin-left: .3em;\r\n}\r\n.dirty-indicator-dirty {\r\n  display: inline-block;\r\n  font: normal normal normal 14px/1 FontAwesome;\r\n  font-size: inherit;\r\n  text-rendering: auto;\r\n  -webkit-font-smoothing: antialiased;\r\n  -moz-osx-font-smoothing: grayscale;\r\n  width: 20px;\r\n}\r\n.dirty-indicator-dirty.pull-left {\r\n  margin-right: .3em;\r\n}\r\n.dirty-indicator-dirty.pull-right {\r\n  margin-left: .3em;\r\n}\r\n.dirty-indicator-clean {\r\n  display: inline-block;\r\n  font: normal normal normal 14px/1 FontAwesome;\r\n  font-size: inherit;\r\n  text-rendering: auto;\r\n  -webkit-font-smoothing: antialiased;\r\n  -moz-osx-font-smoothing: grayscale;\r\n  width: 20px;\r\n}\r\n.dirty-indicator-clean.pull-left {\r\n  margin-right: .3em;\r\n}\r\n.dirty-indicator-clean.pull-right {\r\n  margin-left: .3em;\r\n}\r\n.dirty-indicator-clean:before {\r\n  display: inline-block;\r\n  font: normal normal normal 14px/1 FontAwesome;\r\n  font-size: inherit;\r\n  text-rendering: auto;\r\n  -webkit-font-smoothing: antialiased;\r\n  -moz-osx-font-smoothing: grayscale;\r\n  content: \"\\f00c\";\r\n}\r\n.dirty-indicator-clean:before.pull-left {\r\n  margin-right: .3em;\r\n}\r\n.dirty-indicator-clean:before.pull-right {\r\n  margin-left: .3em;\r\n}\r\n#filename {\r\n  font-size: 16pt;\r\n  display: table;\r\n  padding: 0px 5px;\r\n}\r\n#current-mode {\r\n  padding-left: 5px;\r\n  padding-right: 5px;\r\n}\r\n#texteditor-backdrop {\r\n  padding-top: 20px;\r\n  padding-bottom: 20px;\r\n}\r\n@media not print {\r\n  #texteditor-backdrop {\r\n    background-color: #EEE;\r\n  }\r\n}\r\n@media print {\r\n  #texteditor-backdrop #texteditor-container .CodeMirror-gutter,\r\n  #texteditor-backdrop #texteditor-container .CodeMirror-gutters {\r\n    background-color: #fff;\r\n  }\r\n}\r\n@media not print {\r\n  #texteditor-backdrop #texteditor-container .CodeMirror-gutter,\r\n  #texteditor-backdrop #texteditor-container .CodeMirror-gutters {\r\n    background-color: #fff;\r\n  }\r\n}\r\n@media not print {\r\n  #texteditor-backdrop #texteditor-container {\r\n    padding: 0px;\r\n    background-color: #fff;\r\n    -webkit-box-shadow: 0px 0px 12px 1px rgba(87, 87, 87, 0.2);\r\n    box-shadow: 0px 0px 12px 1px rgba(87, 87, 87, 0.2);\r\n  }\r\n}\r\n/*!\r\n*\r\n* IPython notebook\r\n*\r\n*/\r\n/* CSS font colors for translated ANSI colors. */\r\n.ansibold {\r\n  font-weight: bold;\r\n}\r\n/* use dark versions for foreground, to improve visibility */\r\n.ansiblack {\r\n  color: black;\r\n}\r\n.ansired {\r\n  color: darkred;\r\n}\r\n.ansigreen {\r\n  color: darkgreen;\r\n}\r\n.ansiyellow {\r\n  color: #c4a000;\r\n}\r\n.ansiblue {\r\n  color: darkblue;\r\n}\r\n.ansipurple {\r\n  color: darkviolet;\r\n}\r\n.ansicyan {\r\n  color: steelblue;\r\n}\r\n.ansigray {\r\n  color: gray;\r\n}\r\n/* and light for background, for the same reason */\r\n.ansibgblack {\r\n  background-color: black;\r\n}\r\n.ansibgred {\r\n  background-color: red;\r\n}\r\n.ansibggreen {\r\n  background-color: green;\r\n}\r\n.ansibgyellow {\r\n  background-color: yellow;\r\n}\r\n.ansibgblue {\r\n  background-color: blue;\r\n}\r\n.ansibgpurple {\r\n  background-color: magenta;\r\n}\r\n.ansibgcyan {\r\n  background-color: cyan;\r\n}\r\n.ansibggray {\r\n  background-color: gray;\r\n}\r\ndiv.cell {\r\n  /* Old browsers */\r\n  display: -webkit-box;\r\n  -webkit-box-orient: vertical;\r\n  -webkit-box-align: stretch;\r\n  display: -moz-box;\r\n  -moz-box-orient: vertical;\r\n  -moz-box-align: stretch;\r\n  display: box;\r\n  box-orient: vertical;\r\n  box-align: stretch;\r\n  /* Modern browsers */\r\n  display: flex;\r\n  flex-direction: column;\r\n  align-items: stretch;\r\n  border-radius: 2px;\r\n  box-sizing: border-box;\r\n  -moz-box-sizing: border-box;\r\n  -webkit-box-sizing: border-box;\r\n  border-width: 1px;\r\n  border-style: solid;\r\n  border-color: transparent;\r\n  width: 100%;\r\n  padding: 5px;\r\n  /* This acts as a spacer between cells, that is outside the border */\r\n  margin: 0px;\r\n  outline: none;\r\n  border-left-width: 1px;\r\n  padding-left: 5px;\r\n  background: linear-gradient(to right, transparent -40px, transparent 1px, transparent 1px, transparent 100%);\r\n}\r\ndiv.cell.jupyter-soft-selected {\r\n  border-left-color: #90CAF9;\r\n  border-left-color: #E3F2FD;\r\n  border-left-width: 1px;\r\n  padding-left: 5px;\r\n  border-right-color: #E3F2FD;\r\n  border-right-width: 1px;\r\n  background: #E3F2FD;\r\n}\r\n@media print {\r\n  div.cell.jupyter-soft-selected {\r\n    border-color: transparent;\r\n  }\r\n}\r\ndiv.cell.selected {\r\n  border-color: #ababab;\r\n  border-left-width: 0px;\r\n  padding-left: 6px;\r\n  background: linear-gradient(to right, #42A5F5 -40px, #42A5F5 5px, transparent 5px, transparent 100%);\r\n}\r\n@media print {\r\n  div.cell.selected {\r\n    border-color: transparent;\r\n  }\r\n}\r\ndiv.cell.selected.jupyter-soft-selected {\r\n  border-left-width: 0;\r\n  padding-left: 6px;\r\n  background: linear-gradient(to right, #42A5F5 -40px, #42A5F5 7px, #E3F2FD 7px, #E3F2FD 100%);\r\n}\r\n.edit_mode div.cell.selected {\r\n  border-color: #66BB6A;\r\n  border-left-width: 0px;\r\n  padding-left: 6px;\r\n  background: linear-gradient(to right, #66BB6A -40px, #66BB6A 5px, transparent 5px, transparent 100%);\r\n}\r\n@media print {\r\n  .edit_mode div.cell.selected {\r\n    border-color: transparent;\r\n  }\r\n}\r\n.prompt {\r\n  /* This needs to be wide enough for 3 digit prompt numbers: In[100]: */\r\n  min-width: 14ex;\r\n  /* This padding is tuned to match the padding on the CodeMirror editor. */\r\n  padding: 0.4em;\r\n  margin: 0px;\r\n  font-family: monospace;\r\n  text-align: right;\r\n  /* This has to match that of the the CodeMirror class line-height below */\r\n  line-height: 1.21429em;\r\n  /* Don't highlight prompt number selection */\r\n  -webkit-touch-callout: none;\r\n  -webkit-user-select: none;\r\n  -khtml-user-select: none;\r\n  -moz-user-select: none;\r\n  -ms-user-select: none;\r\n  user-select: none;\r\n  /* Use default cursor */\r\n  cursor: default;\r\n}\r\n@media (max-width: 540px) {\r\n  .prompt {\r\n    text-align: left;\r\n  }\r\n}\r\ndiv.inner_cell {\r\n  min-width: 0;\r\n  /* Old browsers */\r\n  display: -webkit-box;\r\n  -webkit-box-orient: vertical;\r\n  -webkit-box-align: stretch;\r\n  display: -moz-box;\r\n  -moz-box-orient: vertical;\r\n  -moz-box-align: stretch;\r\n  display: box;\r\n  box-orient: vertical;\r\n  box-align: stretch;\r\n  /* Modern browsers */\r\n  display: flex;\r\n  flex-direction: column;\r\n  align-items: stretch;\r\n  /* Old browsers */\r\n  -webkit-box-flex: 1;\r\n  -moz-box-flex: 1;\r\n  box-flex: 1;\r\n  /* Modern browsers */\r\n  flex: 1;\r\n}\r\n/* input_area and input_prompt must match in top border and margin for alignment */\r\ndiv.input_area {\r\n  border: 1px solid #cfcfcf;\r\n  border-radius: 2px;\r\n  background: #f7f7f7;\r\n  line-height: 1.21429em;\r\n}\r\n/* This is needed so that empty prompt areas can collapse to zero height when there\r\n   is no content in the output_subarea and the prompt. The main purpose of this is\r\n   to make sure that empty JavaScript output_subareas have no height. */\r\ndiv.prompt:empty {\r\n  padding-top: 0;\r\n  padding-bottom: 0;\r\n}\r\ndiv.unrecognized_cell {\r\n  padding: 5px 5px 5px 0px;\r\n  /* Old browsers */\r\n  display: -webkit-box;\r\n  -webkit-box-orient: horizontal;\r\n  -webkit-box-align: stretch;\r\n  display: -moz-box;\r\n  -moz-box-orient: horizontal;\r\n  -moz-box-align: stretch;\r\n  display: box;\r\n  box-orient: horizontal;\r\n  box-align: stretch;\r\n  /* Modern browsers */\r\n  display: flex;\r\n  flex-direction: row;\r\n  align-items: stretch;\r\n}\r\ndiv.unrecognized_cell .inner_cell {\r\n  border-radius: 2px;\r\n  padding: 5px;\r\n  font-weight: bold;\r\n  color: red;\r\n  border: 1px solid #cfcfcf;\r\n  background: #eaeaea;\r\n}\r\ndiv.unrecognized_cell .inner_cell a {\r\n  color: inherit;\r\n  text-decoration: none;\r\n}\r\ndiv.unrecognized_cell .inner_cell a:hover {\r\n  color: inherit;\r\n  text-decoration: none;\r\n}\r\n@media (max-width: 540px) {\r\n  div.unrecognized_cell > div.prompt {\r\n    display: none;\r\n  }\r\n}\r\ndiv.code_cell {\r\n  /* avoid page breaking on code cells when printing */\r\n}\r\n@media print {\r\n  div.code_cell {\r\n    page-break-inside: avoid;\r\n  }\r\n}\r\n/* any special styling for code cells that are currently running goes here */\r\ndiv.input {\r\n  page-break-inside: avoid;\r\n  /* Old browsers */\r\n  display: -webkit-box;\r\n  -webkit-box-orient: horizontal;\r\n  -webkit-box-align: stretch;\r\n  display: -moz-box;\r\n  -moz-box-orient: horizontal;\r\n  -moz-box-align: stretch;\r\n  display: box;\r\n  box-orient: horizontal;\r\n  box-align: stretch;\r\n  /* Modern browsers */\r\n  display: flex;\r\n  flex-direction: row;\r\n  align-items: stretch;\r\n}\r\n@media (max-width: 540px) {\r\n  div.input {\r\n    /* Old browsers */\r\n    display: -webkit-box;\r\n    -webkit-box-orient: vertical;\r\n    -webkit-box-align: stretch;\r\n    display: -moz-box;\r\n    -moz-box-orient: vertical;\r\n    -moz-box-align: stretch;\r\n    display: box;\r\n    box-orient: vertical;\r\n    box-align: stretch;\r\n    /* Modern browsers */\r\n    display: flex;\r\n    flex-direction: column;\r\n    align-items: stretch;\r\n  }\r\n}\r\n/* input_area and input_prompt must match in top border and margin for alignment */\r\ndiv.input_prompt {\r\n  color: #303F9F;\r\n  border-top: 1px solid transparent;\r\n}\r\ndiv.input_area > div.highlight {\r\n  margin: 0.4em;\r\n  border: none;\r\n  padding: 0px;\r\n  background-color: transparent;\r\n}\r\ndiv.input_area > div.highlight > pre {\r\n  margin: 0px;\r\n  border: none;\r\n  padding: 0px;\r\n  background-color: transparent;\r\n}\r\n/* The following gets added to the <head> if it is detected that the user has a\r\n * monospace font with inconsistent normal/bold/italic height.  See\r\n * notebookmain.js.  Such fonts will have keywords vertically offset with\r\n * respect to the rest of the text.  The user should select a better font.\r\n * See: https://github.com/ipython/ipython/issues/1503\r\n *\r\n * .CodeMirror span {\r\n *      vertical-align: bottom;\r\n * }\r\n */\r\n.CodeMirror {\r\n  line-height: 1.21429em;\r\n  /* Changed from 1em to our global default */\r\n  font-size: 14px;\r\n  height: auto;\r\n  /* Changed to auto to autogrow */\r\n  background: none;\r\n  /* Changed from white to allow our bg to show through */\r\n}\r\n.CodeMirror-scroll {\r\n  /*  The CodeMirror docs are a bit fuzzy on if overflow-y should be hidden or visible.*/\r\n  /*  We have found that if it is visible, vertical scrollbars appear with font size changes.*/\r\n  overflow-y: hidden;\r\n  overflow-x: auto;\r\n}\r\n.CodeMirror-lines {\r\n  /* In CM2, this used to be 0.4em, but in CM3 it went to 4px. We need the em value because */\r\n  /* we have set a different line-height and want this to scale with that. */\r\n  padding: 0.4em;\r\n}\r\n.CodeMirror-linenumber {\r\n  padding: 0 8px 0 4px;\r\n}\r\n.CodeMirror-gutters {\r\n  border-bottom-left-radius: 2px;\r\n  border-top-left-radius: 2px;\r\n}\r\n.CodeMirror pre {\r\n  /* In CM3 this went to 4px from 0 in CM2. We need the 0 value because of how we size */\r\n  /* .CodeMirror-lines */\r\n  padding: 0;\r\n  border: 0;\r\n  border-radius: 0;\r\n}\r\n/*\r\n\r\nOriginal style from softwaremaniacs.org (c) Ivan Sagalaev <Maniac@SoftwareManiacs.Org>\r\nAdapted from GitHub theme\r\n\r\n*/\r\n.highlight-base {\r\n  color: #000;\r\n}\r\n.highlight-variable {\r\n  color: #000;\r\n}\r\n.highlight-variable-2 {\r\n  color: #1a1a1a;\r\n}\r\n.highlight-variable-3 {\r\n  color: #333333;\r\n}\r\n.highlight-string {\r\n  color: #BA2121;\r\n}\r\n.highlight-comment {\r\n  color: #408080;\r\n  font-style: italic;\r\n}\r\n.highlight-number {\r\n  color: #080;\r\n}\r\n.highlight-atom {\r\n  color: #88F;\r\n}\r\n.highlight-keyword {\r\n  color: #008000;\r\n  font-weight: bold;\r\n}\r\n.highlight-builtin {\r\n  color: #008000;\r\n}\r\n.highlight-error {\r\n  color: #f00;\r\n}\r\n.highlight-operator {\r\n  color: #AA22FF;\r\n  font-weight: bold;\r\n}\r\n.highlight-meta {\r\n  color: #AA22FF;\r\n}\r\n/* previously not defined, copying from default codemirror */\r\n.highlight-def {\r\n  color: #00f;\r\n}\r\n.highlight-string-2 {\r\n  color: #f50;\r\n}\r\n.highlight-qualifier {\r\n  color: #555;\r\n}\r\n.highlight-bracket {\r\n  color: #997;\r\n}\r\n.highlight-tag {\r\n  color: #170;\r\n}\r\n.highlight-attribute {\r\n  color: #00c;\r\n}\r\n.highlight-header {\r\n  color: blue;\r\n}\r\n.highlight-quote {\r\n  color: #090;\r\n}\r\n.highlight-link {\r\n  color: #00c;\r\n}\r\n/* apply the same style to codemirror */\r\n.cm-s-ipython span.cm-keyword {\r\n  color: #008000;\r\n  font-weight: bold;\r\n}\r\n.cm-s-ipython span.cm-atom {\r\n  color: #88F;\r\n}\r\n.cm-s-ipython span.cm-number {\r\n  color: #080;\r\n}\r\n.cm-s-ipython span.cm-def {\r\n  color: #00f;\r\n}\r\n.cm-s-ipython span.cm-variable {\r\n  color: #000;\r\n}\r\n.cm-s-ipython span.cm-operator {\r\n  color: #AA22FF;\r\n  font-weight: bold;\r\n}\r\n.cm-s-ipython span.cm-variable-2 {\r\n  color: #1a1a1a;\r\n}\r\n.cm-s-ipython span.cm-variable-3 {\r\n  color: #333333;\r\n}\r\n.cm-s-ipython span.cm-comment {\r\n  color: #408080;\r\n  font-style: italic;\r\n}\r\n.cm-s-ipython span.cm-string {\r\n  color: #BA2121;\r\n}\r\n.cm-s-ipython span.cm-string-2 {\r\n  color: #f50;\r\n}\r\n.cm-s-ipython span.cm-meta {\r\n  color: #AA22FF;\r\n}\r\n.cm-s-ipython span.cm-qualifier {\r\n  color: #555;\r\n}\r\n.cm-s-ipython span.cm-builtin {\r\n  color: #008000;\r\n}\r\n.cm-s-ipython span.cm-bracket {\r\n  color: #997;\r\n}\r\n.cm-s-ipython span.cm-tag {\r\n  color: #170;\r\n}\r\n.cm-s-ipython span.cm-attribute {\r\n  color: #00c;\r\n}\r\n.cm-s-ipython span.cm-header {\r\n  color: blue;\r\n}\r\n.cm-s-ipython span.cm-quote {\r\n  color: #090;\r\n}\r\n.cm-s-ipython span.cm-link {\r\n  color: #00c;\r\n}\r\n.cm-s-ipython span.cm-error {\r\n  color: #f00;\r\n}\r\n.cm-s-ipython span.cm-tab {\r\n  background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAMCAYAAAAkuj5RAAAAAXNSR0IArs4c6QAAAGFJREFUSMft1LsRQFAQheHPowAKoACx3IgEKtaEHujDjORSgWTH/ZOdnZOcM/sgk/kFFWY0qV8foQwS4MKBCS3qR6ixBJvElOobYAtivseIE120FaowJPN75GMu8j/LfMwNjh4HUpwg4LUAAAAASUVORK5CYII=);\r\n  background-position: right;\r\n  background-repeat: no-repeat;\r\n}\r\ndiv.output_wrapper {\r\n  /* this position must be relative to enable descendents to be absolute within it */\r\n  position: relative;\r\n  /* Old browsers */\r\n  display: -webkit-box;\r\n  -webkit-box-orient: vertical;\r\n  -webkit-box-align: stretch;\r\n  display: -moz-box;\r\n  -moz-box-orient: vertical;\r\n  -moz-box-align: stretch;\r\n  display: box;\r\n  box-orient: vertical;\r\n  box-align: stretch;\r\n  /* Modern browsers */\r\n  display: flex;\r\n  flex-direction: column;\r\n  align-items: stretch;\r\n  z-index: 1;\r\n}\r\n/* class for the output area when it should be height-limited */\r\ndiv.output_scroll {\r\n  /* ideally, this would be max-height, but FF barfs all over that */\r\n  height: 24em;\r\n  /* FF needs this *and the wrapper* to specify full width, or it will shrinkwrap */\r\n  width: 100%;\r\n  overflow: auto;\r\n  border-radius: 2px;\r\n  -webkit-box-shadow: inset 0 2px 8px rgba(0, 0, 0, 0.8);\r\n  box-shadow: inset 0 2px 8px rgba(0, 0, 0, 0.8);\r\n  display: block;\r\n}\r\n/* output div while it is collapsed */\r\ndiv.output_collapsed {\r\n  margin: 0px;\r\n  padding: 0px;\r\n  /* Old browsers */\r\n  display: -webkit-box;\r\n  -webkit-box-orient: vertical;\r\n  -webkit-box-align: stretch;\r\n  display: -moz-box;\r\n  -moz-box-orient: vertical;\r\n  -moz-box-align: stretch;\r\n  display: box;\r\n  box-orient: vertical;\r\n  box-align: stretch;\r\n  /* Modern browsers */\r\n  display: flex;\r\n  flex-direction: column;\r\n  align-items: stretch;\r\n}\r\ndiv.out_prompt_overlay {\r\n  height: 100%;\r\n  padding: 0px 0.4em;\r\n  position: absolute;\r\n  border-radius: 2px;\r\n}\r\ndiv.out_prompt_overlay:hover {\r\n  /* use inner shadow to get border that is computed the same on WebKit/FF */\r\n  -webkit-box-shadow: inset 0 0 1px #000;\r\n  box-shadow: inset 0 0 1px #000;\r\n  background: rgba(240, 240, 240, 0.5);\r\n}\r\ndiv.output_prompt {\r\n  color: #D84315;\r\n}\r\n/* This class is the outer container of all output sections. */\r\ndiv.output_area {\r\n  padding: 0px;\r\n  page-break-inside: avoid;\r\n  /* Old browsers */\r\n  display: -webkit-box;\r\n  -webkit-box-orient: horizontal;\r\n  -webkit-box-align: stretch;\r\n  display: -moz-box;\r\n  -moz-box-orient: horizontal;\r\n  -moz-box-align: stretch;\r\n  display: box;\r\n  box-orient: horizontal;\r\n  box-align: stretch;\r\n  /* Modern browsers */\r\n  display: flex;\r\n  flex-direction: row;\r\n  align-items: stretch;\r\n}\r\ndiv.output_area .MathJax_Display {\r\n  text-align: left !important;\r\n}\r\ndiv.output_area .rendered_html table {\r\n  margin-left: 0;\r\n  margin-right: 0;\r\n}\r\ndiv.output_area .rendered_html img {\r\n  margin-left: 0;\r\n  margin-right: 0;\r\n}\r\ndiv.output_area img,\r\ndiv.output_area svg {\r\n  max-width: 100%;\r\n  height: auto;\r\n}\r\ndiv.output_area img.unconfined,\r\ndiv.output_area svg.unconfined {\r\n  max-width: none;\r\n}\r\n/* This is needed to protect the pre formating from global settings such\r\n   as that of bootstrap */\r\n.output {\r\n  /* Old browsers */\r\n  display: -webkit-box;\r\n  -webkit-box-orient: vertical;\r\n  -webkit-box-align: stretch;\r\n  display: -moz-box;\r\n  -moz-box-orient: vertical;\r\n  -moz-box-align: stretch;\r\n  display: box;\r\n  box-orient: vertical;\r\n  box-align: stretch;\r\n  /* Modern browsers */\r\n  display: flex;\r\n  flex-direction: column;\r\n  align-items: stretch;\r\n}\r\n@media (max-width: 540px) {\r\n  div.output_area {\r\n    /* Old browsers */\r\n    display: -webkit-box;\r\n    -webkit-box-orient: vertical;\r\n    -webkit-box-align: stretch;\r\n    display: -moz-box;\r\n    -moz-box-orient: vertical;\r\n    -moz-box-align: stretch;\r\n    display: box;\r\n    box-orient: vertical;\r\n    box-align: stretch;\r\n    /* Modern browsers */\r\n    display: flex;\r\n    flex-direction: column;\r\n    align-items: stretch;\r\n  }\r\n}\r\ndiv.output_area pre {\r\n  margin: 0;\r\n  padding: 0;\r\n  border: 0;\r\n  vertical-align: baseline;\r\n  color: black;\r\n  background-color: transparent;\r\n  border-radius: 0;\r\n}\r\n/* This class is for the output subarea inside the output_area and after\r\n   the prompt div. */\r\ndiv.output_subarea {\r\n  overflow-x: auto;\r\n  padding: 0.4em;\r\n  /* Old browsers */\r\n  -webkit-box-flex: 1;\r\n  -moz-box-flex: 1;\r\n  box-flex: 1;\r\n  /* Modern browsers */\r\n  flex: 1;\r\n  max-width: calc(100% - 14ex);\r\n}\r\ndiv.output_scroll div.output_subarea {\r\n  overflow-x: visible;\r\n}\r\n/* The rest of the output_* classes are for special styling of the different\r\n   output types */\r\n/* all text output has this class: */\r\ndiv.output_text {\r\n  text-align: left;\r\n  color: #000;\r\n  /* This has to match that of the the CodeMirror class line-height below */\r\n  line-height: 1.21429em;\r\n}\r\n/* stdout/stderr are 'text' as well as 'stream', but execute_result/error are *not* streams */\r\ndiv.output_stderr {\r\n  background: #fdd;\r\n  /* very light red background for stderr */\r\n}\r\ndiv.output_latex {\r\n  text-align: left;\r\n}\r\n/* Empty output_javascript divs should have no height */\r\ndiv.output_javascript:empty {\r\n  padding: 0;\r\n}\r\n.js-error {\r\n  color: darkred;\r\n}\r\n/* raw_input styles */\r\ndiv.raw_input_container {\r\n  line-height: 1.21429em;\r\n  padding-top: 5px;\r\n}\r\npre.raw_input_prompt {\r\n  /* nothing needed here. */\r\n}\r\ninput.raw_input {\r\n  font-family: monospace;\r\n  font-size: inherit;\r\n  color: inherit;\r\n  width: auto;\r\n  /* make sure input baseline aligns with prompt */\r\n  vertical-align: baseline;\r\n  /* padding + margin = 0.5em between prompt and cursor */\r\n  padding: 0em 0.25em;\r\n  margin: 0em 0.25em;\r\n}\r\ninput.raw_input:focus {\r\n  box-shadow: none;\r\n}\r\np.p-space {\r\n  margin-bottom: 10px;\r\n}\r\ndiv.output_unrecognized {\r\n  padding: 5px;\r\n  font-weight: bold;\r\n  color: red;\r\n}\r\ndiv.output_unrecognized a {\r\n  color: inherit;\r\n  text-decoration: none;\r\n}\r\ndiv.output_unrecognized a:hover {\r\n  color: inherit;\r\n  text-decoration: none;\r\n}\r\n.rendered_html {\r\n  color: #000;\r\n  /* any extras will just be numbers: */\r\n}\r\n.rendered_html em {\r\n  font-style: italic;\r\n}\r\n.rendered_html strong {\r\n  font-weight: bold;\r\n}\r\n.rendered_html u {\r\n  text-decoration: underline;\r\n}\r\n.rendered_html :link {\r\n  text-decoration: underline;\r\n}\r\n.rendered_html :visited {\r\n  text-decoration: underline;\r\n}\r\n.rendered_html h1 {\r\n  font-size: 185.7%;\r\n  margin: 1.08em 0 0 0;\r\n  font-weight: bold;\r\n  line-height: 1.0;\r\n}\r\n.rendered_html h2 {\r\n  font-size: 157.1%;\r\n  margin: 1.27em 0 0 0;\r\n  font-weight: bold;\r\n  line-height: 1.0;\r\n}\r\n.rendered_html h3 {\r\n  font-size: 128.6%;\r\n  margin: 1.55em 0 0 0;\r\n  font-weight: bold;\r\n  line-height: 1.0;\r\n}\r\n.rendered_html h4 {\r\n  font-size: 100%;\r\n  margin: 2em 0 0 0;\r\n  font-weight: bold;\r\n  line-height: 1.0;\r\n}\r\n.rendered_html h5 {\r\n  font-size: 100%;\r\n  margin: 2em 0 0 0;\r\n  font-weight: bold;\r\n  line-height: 1.0;\r\n  font-style: italic;\r\n}\r\n.rendered_html h6 {\r\n  font-size: 100%;\r\n  margin: 2em 0 0 0;\r\n  font-weight: bold;\r\n  line-height: 1.0;\r\n  font-style: italic;\r\n}\r\n.rendered_html h1:first-child {\r\n  margin-top: 0.538em;\r\n}\r\n.rendered_html h2:first-child {\r\n  margin-top: 0.636em;\r\n}\r\n.rendered_html h3:first-child {\r\n  margin-top: 0.777em;\r\n}\r\n.rendered_html h4:first-child {\r\n  margin-top: 1em;\r\n}\r\n.rendered_html h5:first-child {\r\n  margin-top: 1em;\r\n}\r\n.rendered_html h6:first-child {\r\n  margin-top: 1em;\r\n}\r\n.rendered_html ul {\r\n  list-style: disc;\r\n  margin: 0em 2em;\r\n  padding-left: 0px;\r\n}\r\n.rendered_html ul ul {\r\n  list-style: square;\r\n  margin: 0em 2em;\r\n}\r\n.rendered_html ul ul ul {\r\n  list-style: circle;\r\n  margin: 0em 2em;\r\n}\r\n.rendered_html ol {\r\n  list-style: decimal;\r\n  margin: 0em 2em;\r\n  padding-left: 0px;\r\n}\r\n.rendered_html ol ol {\r\n  list-style: upper-alpha;\r\n  margin: 0em 2em;\r\n}\r\n.rendered_html ol ol ol {\r\n  list-style: lower-alpha;\r\n  margin: 0em 2em;\r\n}\r\n.rendered_html ol ol ol ol {\r\n  list-style: lower-roman;\r\n  margin: 0em 2em;\r\n}\r\n.rendered_html ol ol ol ol ol {\r\n  list-style: decimal;\r\n  margin: 0em 2em;\r\n}\r\n.rendered_html * + ul {\r\n  margin-top: 1em;\r\n}\r\n.rendered_html * + ol {\r\n  margin-top: 1em;\r\n}\r\n.rendered_html hr {\r\n  color: black;\r\n  background-color: black;\r\n}\r\n.rendered_html pre {\r\n  margin: 1em 2em;\r\n}\r\n.rendered_html pre,\r\n.rendered_html code {\r\n  border: 0;\r\n  background-color: #fff;\r\n  color: #000;\r\n  font-size: 100%;\r\n  padding: 0px;\r\n}\r\n.rendered_html blockquote {\r\n  margin: 1em 2em;\r\n}\r\n.rendered_html table {\r\n  margin-left: auto;\r\n  margin-right: auto;\r\n  border: 1px solid black;\r\n  border-collapse: collapse;\r\n}\r\n.rendered_html tr,\r\n.rendered_html th,\r\n.rendered_html td {\r\n  border: 1px solid black;\r\n  border-collapse: collapse;\r\n  margin: 1em 2em;\r\n}\r\n.rendered_html td,\r\n.rendered_html th {\r\n  text-align: left;\r\n  vertical-align: middle;\r\n  padding: 4px;\r\n}\r\n.rendered_html th {\r\n  font-weight: bold;\r\n}\r\n.rendered_html * + table {\r\n  margin-top: 1em;\r\n}\r\n.rendered_html p {\r\n  text-align: left;\r\n}\r\n.rendered_html * + p {\r\n  margin-top: 1em;\r\n}\r\n.rendered_html img {\r\n  display: block;\r\n  margin-left: auto;\r\n  margin-right: auto;\r\n}\r\n.rendered_html * + img {\r\n  margin-top: 1em;\r\n}\r\n.rendered_html img,\r\n.rendered_html svg {\r\n  max-width: 100%;\r\n  height: auto;\r\n}\r\n.rendered_html img.unconfined,\r\n.rendered_html svg.unconfined {\r\n  max-width: none;\r\n}\r\ndiv.text_cell {\r\n  /* Old browsers */\r\n  display: -webkit-box;\r\n  -webkit-box-orient: horizontal;\r\n  -webkit-box-align: stretch;\r\n  display: -moz-box;\r\n  -moz-box-orient: horizontal;\r\n  -moz-box-align: stretch;\r\n  display: box;\r\n  box-orient: horizontal;\r\n  box-align: stretch;\r\n  /* Modern browsers */\r\n  display: flex;\r\n  flex-direction: row;\r\n  align-items: stretch;\r\n}\r\n@media (max-width: 540px) {\r\n  div.text_cell > div.prompt {\r\n    display: none;\r\n  }\r\n}\r\ndiv.text_cell_render {\r\n  /*font-family: \"Helvetica Neue\", Arial, Helvetica, Geneva, sans-serif;*/\r\n  outline: none;\r\n  resize: none;\r\n  width: inherit;\r\n  border-style: none;\r\n  padding: 0.5em 0.5em 0.5em 0.4em;\r\n  color: #000;\r\n  box-sizing: border-box;\r\n  -moz-box-sizing: border-box;\r\n  -webkit-box-sizing: border-box;\r\n}\r\na.anchor-link:link {\r\n  text-decoration: none;\r\n  padding: 0px 20px;\r\n  visibility: hidden;\r\n}\r\nh1:hover .anchor-link,\r\nh2:hover .anchor-link,\r\nh3:hover .anchor-link,\r\nh4:hover .anchor-link,\r\nh5:hover .anchor-link,\r\nh6:hover .anchor-link {\r\n  visibility: visible;\r\n}\r\n.text_cell.rendered .input_area {\r\n  display: none;\r\n}\r\n.text_cell.rendered .rendered_html {\r\n  overflow-x: auto;\r\n  overflow-y: hidden;\r\n}\r\n.text_cell.unrendered .text_cell_render {\r\n  display: none;\r\n}\r\n.cm-header-1,\r\n.cm-header-2,\r\n.cm-header-3,\r\n.cm-header-4,\r\n.cm-header-5,\r\n.cm-header-6 {\r\n  font-weight: bold;\r\n  font-family: \"Helvetica Neue\", Helvetica, Arial, sans-serif;\r\n}\r\n.cm-header-1 {\r\n  font-size: 185.7%;\r\n}\r\n.cm-header-2 {\r\n  font-size: 157.1%;\r\n}\r\n.cm-header-3 {\r\n  font-size: 128.6%;\r\n}\r\n.cm-header-4 {\r\n  font-size: 110%;\r\n}\r\n.cm-header-5 {\r\n  font-size: 100%;\r\n  font-style: italic;\r\n}\r\n.cm-header-6 {\r\n  font-size: 100%;\r\n  font-style: italic;\r\n}\r\n/*!\r\n*\r\n* IPython notebook webapp\r\n*\r\n*/\r\n@media (max-width: 767px) {\r\n  .notebook_app {\r\n    padding-left: 0px;\r\n    padding-right: 0px;\r\n  }\r\n}\r\n#ipython-main-app {\r\n  box-sizing: border-box;\r\n  -moz-box-sizing: border-box;\r\n  -webkit-box-sizing: border-box;\r\n  height: 100%;\r\n}\r\ndiv#notebook_panel {\r\n  margin: 0px;\r\n  padding: 0px;\r\n  box-sizing: border-box;\r\n  -moz-box-sizing: border-box;\r\n  -webkit-box-sizing: border-box;\r\n  height: 100%;\r\n}\r\ndiv#notebook {\r\n  font-size: 14px;\r\n  line-height: 20px;\r\n  overflow-y: hidden;\r\n  overflow-x: auto;\r\n  width: 100%;\r\n  /* This spaces the page away from the edge of the notebook area */\r\n  padding-top: 20px;\r\n  margin: 0px;\r\n  outline: none;\r\n  box-sizing: border-box;\r\n  -moz-box-sizing: border-box;\r\n  -webkit-box-sizing: border-box;\r\n  min-height: 100%;\r\n}\r\n@media not print {\r\n  #notebook-container {\r\n    padding: 15px;\r\n    background-color: #fff;\r\n    min-height: 0;\r\n    -webkit-box-shadow: 0px 0px 12px 1px rgba(87, 87, 87, 0.2);\r\n    box-shadow: 0px 0px 12px 1px rgba(87, 87, 87, 0.2);\r\n  }\r\n}\r\n@media print {\r\n  #notebook-container {\r\n    width: 100%;\r\n  }\r\n}\r\ndiv.ui-widget-content {\r\n  border: 1px solid #ababab;\r\n  outline: none;\r\n}\r\npre.dialog {\r\n  background-color: #f7f7f7;\r\n  border: 1px solid #ddd;\r\n  border-radius: 2px;\r\n  padding: 0.4em;\r\n  padding-left: 2em;\r\n}\r\np.dialog {\r\n  padding: 0.2em;\r\n}\r\n/* Word-wrap output correctly.  This is the CSS3 spelling, though Firefox seems\r\n   to not honor it correctly.  Webkit browsers (Chrome, rekonq, Safari) do.\r\n */\r\npre,\r\ncode,\r\nkbd,\r\nsamp {\r\n  white-space: pre-wrap;\r\n}\r\n#fonttest {\r\n  font-family: monospace;\r\n}\r\np {\r\n  margin-bottom: 0;\r\n}\r\n.end_space {\r\n  min-height: 100px;\r\n  transition: height .2s ease;\r\n}\r\n.notebook_app > #header {\r\n  -webkit-box-shadow: 0px 0px 12px 1px rgba(87, 87, 87, 0.2);\r\n  box-shadow: 0px 0px 12px 1px rgba(87, 87, 87, 0.2);\r\n}\r\n@media not print {\r\n  .notebook_app {\r\n    background-color: #EEE;\r\n  }\r\n}\r\nkbd {\r\n  border-style: solid;\r\n  border-width: 1px;\r\n  box-shadow: none;\r\n  margin: 2px;\r\n  padding-left: 2px;\r\n  padding-right: 2px;\r\n  padding-top: 1px;\r\n  padding-bottom: 1px;\r\n}\r\n/* CSS for the cell toolbar */\r\n.celltoolbar {\r\n  border: thin solid #CFCFCF;\r\n  border-bottom: none;\r\n  background: #EEE;\r\n  border-radius: 2px 2px 0px 0px;\r\n  width: 100%;\r\n  height: 29px;\r\n  padding-right: 4px;\r\n  /* Old browsers */\r\n  display: -webkit-box;\r\n  -webkit-box-orient: horizontal;\r\n  -webkit-box-align: stretch;\r\n  display: -moz-box;\r\n  -moz-box-orient: horizontal;\r\n  -moz-box-align: stretch;\r\n  display: box;\r\n  box-orient: horizontal;\r\n  box-align: stretch;\r\n  /* Modern browsers */\r\n  display: flex;\r\n  flex-direction: row;\r\n  align-items: stretch;\r\n  /* Old browsers */\r\n  -webkit-box-pack: end;\r\n  -moz-box-pack: end;\r\n  box-pack: end;\r\n  /* Modern browsers */\r\n  justify-content: flex-end;\r\n  display: -webkit-flex;\r\n}\r\n@media print {\r\n  .celltoolbar {\r\n    display: none;\r\n  }\r\n}\r\n.ctb_hideshow {\r\n  display: none;\r\n  vertical-align: bottom;\r\n}\r\n/* ctb_show is added to the ctb_hideshow div to show the cell toolbar.\r\n   Cell toolbars are only shown when the ctb_global_show class is also set.\r\n*/\r\n.ctb_global_show .ctb_show.ctb_hideshow {\r\n  display: block;\r\n}\r\n.ctb_global_show .ctb_show + .input_area,\r\n.ctb_global_show .ctb_show + div.text_cell_input,\r\n.ctb_global_show .ctb_show ~ div.text_cell_render {\r\n  border-top-right-radius: 0px;\r\n  border-top-left-radius: 0px;\r\n}\r\n.ctb_global_show .ctb_show ~ div.text_cell_render {\r\n  border: 1px solid #cfcfcf;\r\n}\r\n.celltoolbar {\r\n  font-size: 87%;\r\n  padding-top: 3px;\r\n}\r\n.celltoolbar select {\r\n  display: block;\r\n  width: 100%;\r\n  height: 32px;\r\n  padding: 6px 12px;\r\n  font-size: 13px;\r\n  line-height: 1.42857143;\r\n  color: #555555;\r\n  background-color: #fff;\r\n  background-image: none;\r\n  border: 1px solid #ccc;\r\n  border-radius: 2px;\r\n  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\r\n  box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\r\n  -webkit-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;\r\n  -o-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;\r\n  transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;\r\n  height: 30px;\r\n  padding: 5px 10px;\r\n  font-size: 12px;\r\n  line-height: 1.5;\r\n  border-radius: 1px;\r\n  width: inherit;\r\n  font-size: inherit;\r\n  height: 22px;\r\n  padding: 0px;\r\n  display: inline-block;\r\n}\r\n.celltoolbar select:focus {\r\n  border-color: #66afe9;\r\n  outline: 0;\r\n  -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, 0.6);\r\n  box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, 0.6);\r\n}\r\n.celltoolbar select::-moz-placeholder {\r\n  color: #999;\r\n  opacity: 1;\r\n}\r\n.celltoolbar select:-ms-input-placeholder {\r\n  color: #999;\r\n}\r\n.celltoolbar select::-webkit-input-placeholder {\r\n  color: #999;\r\n}\r\n.celltoolbar select::-ms-expand {\r\n  border: 0;\r\n  background-color: transparent;\r\n}\r\n.celltoolbar select[disabled],\r\n.celltoolbar select[readonly],\r\nfieldset[disabled] .celltoolbar select {\r\n  background-color: #eeeeee;\r\n  opacity: 1;\r\n}\r\n.celltoolbar select[disabled],\r\nfieldset[disabled] .celltoolbar select {\r\n  cursor: not-allowed;\r\n}\r\ntextarea.celltoolbar select {\r\n  height: auto;\r\n}\r\nselect.celltoolbar select {\r\n  height: 30px;\r\n  line-height: 30px;\r\n}\r\ntextarea.celltoolbar select,\r\nselect[multiple].celltoolbar select {\r\n  height: auto;\r\n}\r\n.celltoolbar label {\r\n  margin-left: 5px;\r\n  margin-right: 5px;\r\n}\r\n.completions {\r\n  position: absolute;\r\n  z-index: 110;\r\n  overflow: hidden;\r\n  border: 1px solid #ababab;\r\n  border-radius: 2px;\r\n  -webkit-box-shadow: 0px 6px 10px -1px #adadad;\r\n  box-shadow: 0px 6px 10px -1px #adadad;\r\n  line-height: 1;\r\n}\r\n.completions select {\r\n  background: white;\r\n  outline: none;\r\n  border: none;\r\n  padding: 0px;\r\n  margin: 0px;\r\n  overflow: auto;\r\n  font-family: monospace;\r\n  font-size: 110%;\r\n  color: #000;\r\n  width: auto;\r\n}\r\n.completions select option.context {\r\n  color: #286090;\r\n}\r\n#kernel_logo_widget {\r\n  float: right !important;\r\n  float: right;\r\n}\r\n#kernel_logo_widget .current_kernel_logo {\r\n  display: none;\r\n  margin-top: -1px;\r\n  margin-bottom: -1px;\r\n  width: 32px;\r\n  height: 32px;\r\n}\r\n#menubar {\r\n  box-sizing: border-box;\r\n  -moz-box-sizing: border-box;\r\n  -webkit-box-sizing: border-box;\r\n  margin-top: 1px;\r\n}\r\n#menubar .navbar {\r\n  border-top: 1px;\r\n  border-radius: 0px 0px 2px 2px;\r\n  margin-bottom: 0px;\r\n}\r\n#menubar .navbar-toggle {\r\n  float: left;\r\n  padding-top: 7px;\r\n  padding-bottom: 7px;\r\n  border: none;\r\n}\r\n#menubar .navbar-collapse {\r\n  clear: left;\r\n}\r\n.nav-wrapper {\r\n  border-bottom: 1px solid #e7e7e7;\r\n}\r\ni.menu-icon {\r\n  padding-top: 4px;\r\n}\r\nul#help_menu li a {\r\n  overflow: hidden;\r\n  padding-right: 2.2em;\r\n}\r\nul#help_menu li a i {\r\n  margin-right: -1.2em;\r\n}\r\n.dropdown-submenu {\r\n  position: relative;\r\n}\r\n.dropdown-submenu > .dropdown-menu {\r\n  top: 0;\r\n  left: 100%;\r\n  margin-top: -6px;\r\n  margin-left: -1px;\r\n}\r\n.dropdown-submenu:hover > .dropdown-menu {\r\n  display: block;\r\n}\r\n.dropdown-submenu > a:after {\r\n  display: inline-block;\r\n  font: normal normal normal 14px/1 FontAwesome;\r\n  font-size: inherit;\r\n  text-rendering: auto;\r\n  -webkit-font-smoothing: antialiased;\r\n  -moz-osx-font-smoothing: grayscale;\r\n  display: block;\r\n  content: \"\\f0da\";\r\n  float: right;\r\n  color: #333333;\r\n  margin-top: 2px;\r\n  margin-right: -10px;\r\n}\r\n.dropdown-submenu > a:after.pull-left {\r\n  margin-right: .3em;\r\n}\r\n.dropdown-submenu > a:after.pull-right {\r\n  margin-left: .3em;\r\n}\r\n.dropdown-submenu:hover > a:after {\r\n  color: #262626;\r\n}\r\n.dropdown-submenu.pull-left {\r\n  float: none;\r\n}\r\n.dropdown-submenu.pull-left > .dropdown-menu {\r\n  left: -100%;\r\n  margin-left: 10px;\r\n}\r\n#notification_area {\r\n  float: right !important;\r\n  float: right;\r\n  z-index: 10;\r\n}\r\n.indicator_area {\r\n  float: right !important;\r\n  float: right;\r\n  color: #777;\r\n  margin-left: 5px;\r\n  margin-right: 5px;\r\n  width: 11px;\r\n  z-index: 10;\r\n  text-align: center;\r\n  width: auto;\r\n}\r\n#kernel_indicator {\r\n  float: right !important;\r\n  float: right;\r\n  color: #777;\r\n  margin-left: 5px;\r\n  margin-right: 5px;\r\n  width: 11px;\r\n  z-index: 10;\r\n  text-align: center;\r\n  width: auto;\r\n  border-left: 1px solid;\r\n}\r\n#kernel_indicator .kernel_indicator_name {\r\n  padding-left: 5px;\r\n  padding-right: 5px;\r\n}\r\n#modal_indicator {\r\n  float: right !important;\r\n  float: right;\r\n  color: #777;\r\n  margin-left: 5px;\r\n  margin-right: 5px;\r\n  width: 11px;\r\n  z-index: 10;\r\n  text-align: center;\r\n  width: auto;\r\n}\r\n#readonly-indicator {\r\n  float: right !important;\r\n  float: right;\r\n  color: #777;\r\n  margin-left: 5px;\r\n  margin-right: 5px;\r\n  width: 11px;\r\n  z-index: 10;\r\n  text-align: center;\r\n  width: auto;\r\n  margin-top: 2px;\r\n  margin-bottom: 0px;\r\n  margin-left: 0px;\r\n  margin-right: 0px;\r\n  display: none;\r\n}\r\n.modal_indicator:before {\r\n  width: 1.28571429em;\r\n  text-align: center;\r\n}\r\n.edit_mode .modal_indicator:before {\r\n  display: inline-block;\r\n  font: normal normal normal 14px/1 FontAwesome;\r\n  font-size: inherit;\r\n  text-rendering: auto;\r\n  -webkit-font-smoothing: antialiased;\r\n  -moz-osx-font-smoothing: grayscale;\r\n  content: \"\\f040\";\r\n}\r\n.edit_mode .modal_indicator:before.pull-left {\r\n  margin-right: .3em;\r\n}\r\n.edit_mode .modal_indicator:before.pull-right {\r\n  margin-left: .3em;\r\n}\r\n.command_mode .modal_indicator:before {\r\n  display: inline-block;\r\n  font: normal normal normal 14px/1 FontAwesome;\r\n  font-size: inherit;\r\n  text-rendering: auto;\r\n  -webkit-font-smoothing: antialiased;\r\n  -moz-osx-font-smoothing: grayscale;\r\n  content: ' ';\r\n}\r\n.command_mode .modal_indicator:before.pull-left {\r\n  margin-right: .3em;\r\n}\r\n.command_mode .modal_indicator:before.pull-right {\r\n  margin-left: .3em;\r\n}\r\n.kernel_idle_icon:before {\r\n  display: inline-block;\r\n  font: normal normal normal 14px/1 FontAwesome;\r\n  font-size: inherit;\r\n  text-rendering: auto;\r\n  -webkit-font-smoothing: antialiased;\r\n  -moz-osx-font-smoothing: grayscale;\r\n  content: \"\\f10c\";\r\n}\r\n.kernel_idle_icon:before.pull-left {\r\n  margin-right: .3em;\r\n}\r\n.kernel_idle_icon:before.pull-right {\r\n  margin-left: .3em;\r\n}\r\n.kernel_busy_icon:before {\r\n  display: inline-block;\r\n  font: normal normal normal 14px/1 FontAwesome;\r\n  font-size: inherit;\r\n  text-rendering: auto;\r\n  -webkit-font-smoothing: antialiased;\r\n  -moz-osx-font-smoothing: grayscale;\r\n  content: \"\\f111\";\r\n}\r\n.kernel_busy_icon:before.pull-left {\r\n  margin-right: .3em;\r\n}\r\n.kernel_busy_icon:before.pull-right {\r\n  margin-left: .3em;\r\n}\r\n.kernel_dead_icon:before {\r\n  display: inline-block;\r\n  font: normal normal normal 14px/1 FontAwesome;\r\n  font-size: inherit;\r\n  text-rendering: auto;\r\n  -webkit-font-smoothing: antialiased;\r\n  -moz-osx-font-smoothing: grayscale;\r\n  content: \"\\f1e2\";\r\n}\r\n.kernel_dead_icon:before.pull-left {\r\n  margin-right: .3em;\r\n}\r\n.kernel_dead_icon:before.pull-right {\r\n  margin-left: .3em;\r\n}\r\n.kernel_disconnected_icon:before {\r\n  display: inline-block;\r\n  font: normal normal normal 14px/1 FontAwesome;\r\n  font-size: inherit;\r\n  text-rendering: auto;\r\n  -webkit-font-smoothing: antialiased;\r\n  -moz-osx-font-smoothing: grayscale;\r\n  content: \"\\f127\";\r\n}\r\n.kernel_disconnected_icon:before.pull-left {\r\n  margin-right: .3em;\r\n}\r\n.kernel_disconnected_icon:before.pull-right {\r\n  margin-left: .3em;\r\n}\r\n.notification_widget {\r\n  color: #777;\r\n  z-index: 10;\r\n  background: rgba(240, 240, 240, 0.5);\r\n  margin-right: 4px;\r\n  color: #333;\r\n  background-color: #fff;\r\n  border-color: #ccc;\r\n}\r\n.notification_widget:focus,\r\n.notification_widget.focus {\r\n  color: #333;\r\n  background-color: #e6e6e6;\r\n  border-color: #8c8c8c;\r\n}\r\n.notification_widget:hover {\r\n  color: #333;\r\n  background-color: #e6e6e6;\r\n  border-color: #adadad;\r\n}\r\n.notification_widget:active,\r\n.notification_widget.active,\r\n.open > .dropdown-toggle.notification_widget {\r\n  color: #333;\r\n  background-color: #e6e6e6;\r\n  border-color: #adadad;\r\n}\r\n.notification_widget:active:hover,\r\n.notification_widget.active:hover,\r\n.open > .dropdown-toggle.notification_widget:hover,\r\n.notification_widget:active:focus,\r\n.notification_widget.active:focus,\r\n.open > .dropdown-toggle.notification_widget:focus,\r\n.notification_widget:active.focus,\r\n.notification_widget.active.focus,\r\n.open > .dropdown-toggle.notification_widget.focus {\r\n  color: #333;\r\n  background-color: #d4d4d4;\r\n  border-color: #8c8c8c;\r\n}\r\n.notification_widget:active,\r\n.notification_widget.active,\r\n.open > .dropdown-toggle.notification_widget {\r\n  background-image: none;\r\n}\r\n.notification_widget.disabled:hover,\r\n.notification_widget[disabled]:hover,\r\nfieldset[disabled] .notification_widget:hover,\r\n.notification_widget.disabled:focus,\r\n.notification_widget[disabled]:focus,\r\nfieldset[disabled] .notification_widget:focus,\r\n.notification_widget.disabled.focus,\r\n.notification_widget[disabled].focus,\r\nfieldset[disabled] .notification_widget.focus {\r\n  background-color: #fff;\r\n  border-color: #ccc;\r\n}\r\n.notification_widget .badge {\r\n  color: #fff;\r\n  background-color: #333;\r\n}\r\n.notification_widget.warning {\r\n  color: #fff;\r\n  background-color: #f0ad4e;\r\n  border-color: #eea236;\r\n}\r\n.notification_widget.warning:focus,\r\n.notification_widget.warning.focus {\r\n  color: #fff;\r\n  background-color: #ec971f;\r\n  border-color: #985f0d;\r\n}\r\n.notification_widget.warning:hover {\r\n  color: #fff;\r\n  background-color: #ec971f;\r\n  border-color: #d58512;\r\n}\r\n.notification_widget.warning:active,\r\n.notification_widget.warning.active,\r\n.open > .dropdown-toggle.notification_widget.warning {\r\n  color: #fff;\r\n  background-color: #ec971f;\r\n  border-color: #d58512;\r\n}\r\n.notification_widget.warning:active:hover,\r\n.notification_widget.warning.active:hover,\r\n.open > .dropdown-toggle.notification_widget.warning:hover,\r\n.notification_widget.warning:active:focus,\r\n.notification_widget.warning.active:focus,\r\n.open > .dropdown-toggle.notification_widget.warning:focus,\r\n.notification_widget.warning:active.focus,\r\n.notification_widget.warning.active.focus,\r\n.open > .dropdown-toggle.notification_widget.warning.focus {\r\n  color: #fff;\r\n  background-color: #d58512;\r\n  border-color: #985f0d;\r\n}\r\n.notification_widget.warning:active,\r\n.notification_widget.warning.active,\r\n.open > .dropdown-toggle.notification_widget.warning {\r\n  background-image: none;\r\n}\r\n.notification_widget.warning.disabled:hover,\r\n.notification_widget.warning[disabled]:hover,\r\nfieldset[disabled] .notification_widget.warning:hover,\r\n.notification_widget.warning.disabled:focus,\r\n.notification_widget.warning[disabled]:focus,\r\nfieldset[disabled] .notification_widget.warning:focus,\r\n.notification_widget.warning.disabled.focus,\r\n.notification_widget.warning[disabled].focus,\r\nfieldset[disabled] .notification_widget.warning.focus {\r\n  background-color: #f0ad4e;\r\n  border-color: #eea236;\r\n}\r\n.notification_widget.warning .badge {\r\n  color: #f0ad4e;\r\n  background-color: #fff;\r\n}\r\n.notification_widget.success {\r\n  color: #fff;\r\n  background-color: #5cb85c;\r\n  border-color: #4cae4c;\r\n}\r\n.notification_widget.success:focus,\r\n.notification_widget.success.focus {\r\n  color: #fff;\r\n  background-color: #449d44;\r\n  border-color: #255625;\r\n}\r\n.notification_widget.success:hover {\r\n  color: #fff;\r\n  background-color: #449d44;\r\n  border-color: #398439;\r\n}\r\n.notification_widget.success:active,\r\n.notification_widget.success.active,\r\n.open > .dropdown-toggle.notification_widget.success {\r\n  color: #fff;\r\n  background-color: #449d44;\r\n  border-color: #398439;\r\n}\r\n.notification_widget.success:active:hover,\r\n.notification_widget.success.active:hover,\r\n.open > .dropdown-toggle.notification_widget.success:hover,\r\n.notification_widget.success:active:focus,\r\n.notification_widget.success.active:focus,\r\n.open > .dropdown-toggle.notification_widget.success:focus,\r\n.notification_widget.success:active.focus,\r\n.notification_widget.success.active.focus,\r\n.open > .dropdown-toggle.notification_widget.success.focus {\r\n  color: #fff;\r\n  background-color: #398439;\r\n  border-color: #255625;\r\n}\r\n.notification_widget.success:active,\r\n.notification_widget.success.active,\r\n.open > .dropdown-toggle.notification_widget.success {\r\n  background-image: none;\r\n}\r\n.notification_widget.success.disabled:hover,\r\n.notification_widget.success[disabled]:hover,\r\nfieldset[disabled] .notification_widget.success:hover,\r\n.notification_widget.success.disabled:focus,\r\n.notification_widget.success[disabled]:focus,\r\nfieldset[disabled] .notification_widget.success:focus,\r\n.notification_widget.success.disabled.focus,\r\n.notification_widget.success[disabled].focus,\r\nfieldset[disabled] .notification_widget.success.focus {\r\n  background-color: #5cb85c;\r\n  border-color: #4cae4c;\r\n}\r\n.notification_widget.success .badge {\r\n  color: #5cb85c;\r\n  background-color: #fff;\r\n}\r\n.notification_widget.info {\r\n  color: #fff;\r\n  background-color: #5bc0de;\r\n  border-color: #46b8da;\r\n}\r\n.notification_widget.info:focus,\r\n.notification_widget.info.focus {\r\n  color: #fff;\r\n  background-color: #31b0d5;\r\n  border-color: #1b6d85;\r\n}\r\n.notification_widget.info:hover {\r\n  color: #fff;\r\n  background-color: #31b0d5;\r\n  border-color: #269abc;\r\n}\r\n.notification_widget.info:active,\r\n.notification_widget.info.active,\r\n.open > .dropdown-toggle.notification_widget.info {\r\n  color: #fff;\r\n  background-color: #31b0d5;\r\n  border-color: #269abc;\r\n}\r\n.notification_widget.info:active:hover,\r\n.notification_widget.info.active:hover,\r\n.open > .dropdown-toggle.notification_widget.info:hover,\r\n.notification_widget.info:active:focus,\r\n.notification_widget.info.active:focus,\r\n.open > .dropdown-toggle.notification_widget.info:focus,\r\n.notification_widget.info:active.focus,\r\n.notification_widget.info.active.focus,\r\n.open > .dropdown-toggle.notification_widget.info.focus {\r\n  color: #fff;\r\n  background-color: #269abc;\r\n  border-color: #1b6d85;\r\n}\r\n.notification_widget.info:active,\r\n.notification_widget.info.active,\r\n.open > .dropdown-toggle.notification_widget.info {\r\n  background-image: none;\r\n}\r\n.notification_widget.info.disabled:hover,\r\n.notification_widget.info[disabled]:hover,\r\nfieldset[disabled] .notification_widget.info:hover,\r\n.notification_widget.info.disabled:focus,\r\n.notification_widget.info[disabled]:focus,\r\nfieldset[disabled] .notification_widget.info:focus,\r\n.notification_widget.info.disabled.focus,\r\n.notification_widget.info[disabled].focus,\r\nfieldset[disabled] .notification_widget.info.focus {\r\n  background-color: #5bc0de;\r\n  border-color: #46b8da;\r\n}\r\n.notification_widget.info .badge {\r\n  color: #5bc0de;\r\n  background-color: #fff;\r\n}\r\n.notification_widget.danger {\r\n  color: #fff;\r\n  background-color: #d9534f;\r\n  border-color: #d43f3a;\r\n}\r\n.notification_widget.danger:focus,\r\n.notification_widget.danger.focus {\r\n  color: #fff;\r\n  background-color: #c9302c;\r\n  border-color: #761c19;\r\n}\r\n.notification_widget.danger:hover {\r\n  color: #fff;\r\n  background-color: #c9302c;\r\n  border-color: #ac2925;\r\n}\r\n.notification_widget.danger:active,\r\n.notification_widget.danger.active,\r\n.open > .dropdown-toggle.notification_widget.danger {\r\n  color: #fff;\r\n  background-color: #c9302c;\r\n  border-color: #ac2925;\r\n}\r\n.notification_widget.danger:active:hover,\r\n.notification_widget.danger.active:hover,\r\n.open > .dropdown-toggle.notification_widget.danger:hover,\r\n.notification_widget.danger:active:focus,\r\n.notification_widget.danger.active:focus,\r\n.open > .dropdown-toggle.notification_widget.danger:focus,\r\n.notification_widget.danger:active.focus,\r\n.notification_widget.danger.active.focus,\r\n.open > .dropdown-toggle.notification_widget.danger.focus {\r\n  color: #fff;\r\n  background-color: #ac2925;\r\n  border-color: #761c19;\r\n}\r\n.notification_widget.danger:active,\r\n.notification_widget.danger.active,\r\n.open > .dropdown-toggle.notification_widget.danger {\r\n  background-image: none;\r\n}\r\n.notification_widget.danger.disabled:hover,\r\n.notification_widget.danger[disabled]:hover,\r\nfieldset[disabled] .notification_widget.danger:hover,\r\n.notification_widget.danger.disabled:focus,\r\n.notification_widget.danger[disabled]:focus,\r\nfieldset[disabled] .notification_widget.danger:focus,\r\n.notification_widget.danger.disabled.focus,\r\n.notification_widget.danger[disabled].focus,\r\nfieldset[disabled] .notification_widget.danger.focus {\r\n  background-color: #d9534f;\r\n  border-color: #d43f3a;\r\n}\r\n.notification_widget.danger .badge {\r\n  color: #d9534f;\r\n  background-color: #fff;\r\n}\r\ndiv#pager {\r\n  background-color: #fff;\r\n  font-size: 14px;\r\n  line-height: 20px;\r\n  overflow: hidden;\r\n  display: none;\r\n  position: fixed;\r\n  bottom: 0px;\r\n  width: 100%;\r\n  max-height: 50%;\r\n  padding-top: 8px;\r\n  -webkit-box-shadow: 0px 0px 12px 1px rgba(87, 87, 87, 0.2);\r\n  box-shadow: 0px 0px 12px 1px rgba(87, 87, 87, 0.2);\r\n  /* Display over codemirror */\r\n  z-index: 100;\r\n  /* Hack which prevents jquery ui resizable from changing top. */\r\n  top: auto !important;\r\n}\r\ndiv#pager pre {\r\n  line-height: 1.21429em;\r\n  color: #000;\r\n  background-color: #f7f7f7;\r\n  padding: 0.4em;\r\n}\r\ndiv#pager #pager-button-area {\r\n  position: absolute;\r\n  top: 8px;\r\n  right: 20px;\r\n}\r\ndiv#pager #pager-contents {\r\n  position: relative;\r\n  overflow: auto;\r\n  width: 100%;\r\n  height: 100%;\r\n}\r\ndiv#pager #pager-contents #pager-container {\r\n  position: relative;\r\n  padding: 15px 0px;\r\n  box-sizing: border-box;\r\n  -moz-box-sizing: border-box;\r\n  -webkit-box-sizing: border-box;\r\n}\r\ndiv#pager .ui-resizable-handle {\r\n  top: 0px;\r\n  height: 8px;\r\n  background: #f7f7f7;\r\n  border-top: 1px solid #cfcfcf;\r\n  border-bottom: 1px solid #cfcfcf;\r\n  /* This injects handle bars (a short, wide = symbol) for \r\n        the resize handle. */\r\n}\r\ndiv#pager .ui-resizable-handle::after {\r\n  content: '';\r\n  top: 2px;\r\n  left: 50%;\r\n  height: 3px;\r\n  width: 30px;\r\n  margin-left: -15px;\r\n  position: absolute;\r\n  border-top: 1px solid #cfcfcf;\r\n}\r\n.quickhelp {\r\n  /* Old browsers */\r\n  display: -webkit-box;\r\n  -webkit-box-orient: horizontal;\r\n  -webkit-box-align: stretch;\r\n  display: -moz-box;\r\n  -moz-box-orient: horizontal;\r\n  -moz-box-align: stretch;\r\n  display: box;\r\n  box-orient: horizontal;\r\n  box-align: stretch;\r\n  /* Modern browsers */\r\n  display: flex;\r\n  flex-direction: row;\r\n  align-items: stretch;\r\n  line-height: 1.8em;\r\n}\r\n.shortcut_key {\r\n  display: inline-block;\r\n  width: 21ex;\r\n  text-align: right;\r\n  font-family: monospace;\r\n}\r\n.shortcut_descr {\r\n  display: inline-block;\r\n  /* Old browsers */\r\n  -webkit-box-flex: 1;\r\n  -moz-box-flex: 1;\r\n  box-flex: 1;\r\n  /* Modern browsers */\r\n  flex: 1;\r\n}\r\nspan.save_widget {\r\n  margin-top: 6px;\r\n}\r\nspan.save_widget span.filename {\r\n  height: 1em;\r\n  line-height: 1em;\r\n  padding: 3px;\r\n  margin-left: 16px;\r\n  border: none;\r\n  font-size: 146.5%;\r\n  border-radius: 2px;\r\n}\r\nspan.save_widget span.filename:hover {\r\n  background-color: #e6e6e6;\r\n}\r\nspan.checkpoint_status,\r\nspan.autosave_status {\r\n  font-size: small;\r\n}\r\n@media (max-width: 767px) {\r\n  span.save_widget {\r\n    font-size: small;\r\n  }\r\n  span.checkpoint_status,\r\n  span.autosave_status {\r\n    display: none;\r\n  }\r\n}\r\n@media (min-width: 768px) and (max-width: 991px) {\r\n  span.checkpoint_status {\r\n    display: none;\r\n  }\r\n  span.autosave_status {\r\n    font-size: x-small;\r\n  }\r\n}\r\n.toolbar {\r\n  padding: 0px;\r\n  margin-left: -5px;\r\n  margin-top: 2px;\r\n  margin-bottom: 5px;\r\n  box-sizing: border-box;\r\n  -moz-box-sizing: border-box;\r\n  -webkit-box-sizing: border-box;\r\n}\r\n.toolbar select,\r\n.toolbar label {\r\n  width: auto;\r\n  vertical-align: middle;\r\n  margin-right: 2px;\r\n  margin-bottom: 0px;\r\n  display: inline;\r\n  font-size: 92%;\r\n  margin-left: 0.3em;\r\n  margin-right: 0.3em;\r\n  padding: 0px;\r\n  padding-top: 3px;\r\n}\r\n.toolbar .btn {\r\n  padding: 2px 8px;\r\n}\r\n.toolbar .btn-group {\r\n  margin-top: 0px;\r\n  margin-left: 5px;\r\n}\r\n#maintoolbar {\r\n  margin-bottom: -3px;\r\n  margin-top: -8px;\r\n  border: 0px;\r\n  min-height: 27px;\r\n  margin-left: 0px;\r\n  padding-top: 11px;\r\n  padding-bottom: 3px;\r\n}\r\n#maintoolbar .navbar-text {\r\n  float: none;\r\n  vertical-align: middle;\r\n  text-align: right;\r\n  margin-left: 5px;\r\n  margin-right: 0px;\r\n  margin-top: 0px;\r\n}\r\n.select-xs {\r\n  height: 24px;\r\n}\r\n.pulse,\r\n.dropdown-menu > li > a.pulse,\r\nli.pulse > a.dropdown-toggle,\r\nli.pulse.open > a.dropdown-toggle {\r\n  background-color: #F37626;\r\n  color: white;\r\n}\r\n/**\r\n * Primary styles\r\n *\r\n * Author: Jupyter Development Team\r\n */\r\n/** WARNING IF YOU ARE EDITTING THIS FILE, if this is a .css file, It has a lot\r\n * of chance of beeing generated from the ../less/[samename].less file, you can\r\n * try to get back the less file by reverting somme commit in history\r\n **/\r\n/*\r\n * We'll try to get something pretty, so we\r\n * have some strange css to have the scroll bar on\r\n * the left with fix button on the top right of the tooltip\r\n */\r\n@-moz-keyframes fadeOut {\r\n  from {\r\n    opacity: 1;\r\n  }\r\n  to {\r\n    opacity: 0;\r\n  }\r\n}\r\n@-webkit-keyframes fadeOut {\r\n  from {\r\n    opacity: 1;\r\n  }\r\n  to {\r\n    opacity: 0;\r\n  }\r\n}\r\n@-moz-keyframes fadeIn {\r\n  from {\r\n    opacity: 0;\r\n  }\r\n  to {\r\n    opacity: 1;\r\n  }\r\n}\r\n@-webkit-keyframes fadeIn {\r\n  from {\r\n    opacity: 0;\r\n  }\r\n  to {\r\n    opacity: 1;\r\n  }\r\n}\r\n/*properties of tooltip after \"expand\"*/\r\n.bigtooltip {\r\n  overflow: auto;\r\n  height: 200px;\r\n  -webkit-transition-property: height;\r\n  -webkit-transition-duration: 500ms;\r\n  -moz-transition-property: height;\r\n  -moz-transition-duration: 500ms;\r\n  transition-property: height;\r\n  transition-duration: 500ms;\r\n}\r\n/*properties of tooltip before \"expand\"*/\r\n.smalltooltip {\r\n  -webkit-transition-property: height;\r\n  -webkit-transition-duration: 500ms;\r\n  -moz-transition-property: height;\r\n  -moz-transition-duration: 500ms;\r\n  transition-property: height;\r\n  transition-duration: 500ms;\r\n  text-overflow: ellipsis;\r\n  overflow: hidden;\r\n  height: 80px;\r\n}\r\n.tooltipbuttons {\r\n  position: absolute;\r\n  padding-right: 15px;\r\n  top: 0px;\r\n  right: 0px;\r\n}\r\n.tooltiptext {\r\n  /*avoid the button to overlap on some docstring*/\r\n  padding-right: 30px;\r\n}\r\n.ipython_tooltip {\r\n  max-width: 700px;\r\n  /*fade-in animation when inserted*/\r\n  -webkit-animation: fadeOut 400ms;\r\n  -moz-animation: fadeOut 400ms;\r\n  animation: fadeOut 400ms;\r\n  -webkit-animation: fadeIn 400ms;\r\n  -moz-animation: fadeIn 400ms;\r\n  animation: fadeIn 400ms;\r\n  vertical-align: middle;\r\n  background-color: #f7f7f7;\r\n  overflow: visible;\r\n  border: #ababab 1px solid;\r\n  outline: none;\r\n  padding: 3px;\r\n  margin: 0px;\r\n  padding-left: 7px;\r\n  font-family: monospace;\r\n  min-height: 50px;\r\n  -moz-box-shadow: 0px 6px 10px -1px #adadad;\r\n  -webkit-box-shadow: 0px 6px 10px -1px #adadad;\r\n  box-shadow: 0px 6px 10px -1px #adadad;\r\n  border-radius: 2px;\r\n  position: absolute;\r\n  z-index: 1000;\r\n}\r\n.ipython_tooltip a {\r\n  float: right;\r\n}\r\n.ipython_tooltip .tooltiptext pre {\r\n  border: 0;\r\n  border-radius: 0;\r\n  font-size: 100%;\r\n  background-color: #f7f7f7;\r\n}\r\n.pretooltiparrow {\r\n  left: 0px;\r\n  margin: 0px;\r\n  top: -16px;\r\n  width: 40px;\r\n  height: 16px;\r\n  overflow: hidden;\r\n  position: absolute;\r\n}\r\n.pretooltiparrow:before {\r\n  background-color: #f7f7f7;\r\n  border: 1px #ababab solid;\r\n  z-index: 11;\r\n  content: \"\";\r\n  position: absolute;\r\n  left: 15px;\r\n  top: 10px;\r\n  width: 25px;\r\n  height: 25px;\r\n  -webkit-transform: rotate(45deg);\r\n  -moz-transform: rotate(45deg);\r\n  -ms-transform: rotate(45deg);\r\n  -o-transform: rotate(45deg);\r\n}\r\nul.typeahead-list i {\r\n  margin-left: -10px;\r\n  width: 18px;\r\n}\r\nul.typeahead-list {\r\n  max-height: 80vh;\r\n  overflow: auto;\r\n}\r\nul.typeahead-list > li > a {\r\n  /** Firefox bug **/\r\n  /* see https://github.com/jupyter/notebook/issues/559 */\r\n  white-space: normal;\r\n}\r\n.cmd-palette .modal-body {\r\n  padding: 7px;\r\n}\r\n.cmd-palette form {\r\n  background: white;\r\n}\r\n.cmd-palette input {\r\n  outline: none;\r\n}\r\n.no-shortcut {\r\n  display: none;\r\n}\r\n.command-shortcut:before {\r\n  content: \"(command)\";\r\n  padding-right: 3px;\r\n  color: #777777;\r\n}\r\n.edit-shortcut:before {\r\n  content: \"(edit)\";\r\n  padding-right: 3px;\r\n  color: #777777;\r\n}\r\n#find-and-replace #replace-preview .match,\r\n#find-and-replace #replace-preview .insert {\r\n  background-color: #BBDEFB;\r\n  border-color: #90CAF9;\r\n  border-style: solid;\r\n  border-width: 1px;\r\n  border-radius: 0px;\r\n}\r\n#find-and-replace #replace-preview .replace .match {\r\n  background-color: #FFCDD2;\r\n  border-color: #EF9A9A;\r\n  border-radius: 0px;\r\n}\r\n#find-and-replace #replace-preview .replace .insert {\r\n  background-color: #C8E6C9;\r\n  border-color: #A5D6A7;\r\n  border-radius: 0px;\r\n}\r\n#find-and-replace #replace-preview {\r\n  max-height: 60vh;\r\n  overflow: auto;\r\n}\r\n#find-and-replace #replace-preview pre {\r\n  padding: 5px 10px;\r\n}\r\n.terminal-app {\r\n  background: #EEE;\r\n}\r\n.terminal-app #header {\r\n  background: #fff;\r\n  -webkit-box-shadow: 0px 0px 12px 1px rgba(87, 87, 87, 0.2);\r\n  box-shadow: 0px 0px 12px 1px rgba(87, 87, 87, 0.2);\r\n}\r\n.terminal-app .terminal {\r\n  width: 100%;\r\n  float: left;\r\n  font-family: monospace;\r\n  color: white;\r\n  background: black;\r\n  padding: 0.4em;\r\n  border-radius: 2px;\r\n  -webkit-box-shadow: 0px 0px 12px 1px rgba(87, 87, 87, 0.4);\r\n  box-shadow: 0px 0px 12px 1px rgba(87, 87, 87, 0.4);\r\n}\r\n.terminal-app .terminal,\r\n.terminal-app .terminal dummy-screen {\r\n  line-height: 1em;\r\n  font-size: 14px;\r\n}\r\n.terminal-app .terminal .xterm-rows {\r\n  padding: 10px;\r\n}\r\n.terminal-app .terminal-cursor {\r\n  color: black;\r\n  background: white;\r\n}\r\n.terminal-app #terminado-container {\r\n  margin-top: 20px;\r\n}\r\n/*# sourceMappingURL=style.min.css.map */\r\n    </style>\r\n<style type=\"text/css\">\r\n    .highlight .hll { background-color: #ffffcc }\r\n.highlight  { background: #f8f8f8; }\r\n.highlight .c { color: #408080; font-style: italic } /* Comment */\r\n.highlight .err { border: 1px solid #FF0000 } /* Error */\r\n.highlight .k { color: #008000; font-weight: bold } /* Keyword */\r\n.highlight .o { color: #666666 } /* Operator */\r\n.highlight .ch { color: #408080; font-style: italic } /* Comment.Hashbang */\r\n.highlight .cm { color: #408080; font-style: italic } /* Comment.Multiline */\r\n.highlight .cp { color: #BC7A00 } /* Comment.Preproc */\r\n.highlight .cpf { color: #408080; font-style: italic } /* Comment.PreprocFile */\r\n.highlight .c1 { color: #408080; font-style: italic } /* Comment.Single */\r\n.highlight .cs { color: #408080; font-style: italic } /* Comment.Special */\r\n.highlight .gd { color: #A00000 } /* Generic.Deleted */\r\n.highlight .ge { font-style: italic } /* Generic.Emph */\r\n.highlight .gr { color: #FF0000 } /* Generic.Error */\r\n.highlight .gh { color: #000080; font-weight: bold } /* Generic.Heading */\r\n.highlight .gi { color: #00A000 } /* Generic.Inserted */\r\n.highlight .go { color: #888888 } /* Generic.Output */\r\n.highlight .gp { color: #000080; font-weight: bold } /* Generic.Prompt */\r\n.highlight .gs { font-weight: bold } /* Generic.Strong */\r\n.highlight .gu { color: #800080; font-weight: bold } /* Generic.Subheading */\r\n.highlight .gt { color: #0044DD } /* Generic.Traceback */\r\n.highlight .kc { color: #008000; font-weight: bold } /* Keyword.Constant */\r\n.highlight .kd { color: #008000; font-weight: bold } /* Keyword.Declaration */\r\n.highlight .kn { color: #008000; font-weight: bold } /* Keyword.Namespace */\r\n.highlight .kp { color: #008000 } /* Keyword.Pseudo */\r\n.highlight .kr { color: #008000; font-weight: bold } /* Keyword.Reserved */\r\n.highlight .kt { color: #B00040 } /* Keyword.Type */\r\n.highlight .m { color: #666666 } /* Literal.Number */\r\n.highlight .s { color: #BA2121 } /* Literal.String */\r\n.highlight .na { color: #7D9029 } /* Name.Attribute */\r\n.highlight .nb { color: #008000 } /* Name.Builtin */\r\n.highlight .nc { color: #0000FF; font-weight: bold } /* Name.Class */\r\n.highlight .no { color: #880000 } /* Name.Constant */\r\n.highlight .nd { color: #AA22FF } /* Name.Decorator */\r\n.highlight .ni { color: #999999; font-weight: bold } /* Name.Entity */\r\n.highlight .ne { color: #D2413A; font-weight: bold } /* Name.Exception */\r\n.highlight .nf { color: #0000FF } /* Name.Function */\r\n.highlight .nl { color: #A0A000 } /* Name.Label */\r\n.highlight .nn { color: #0000FF; font-weight: bold } /* Name.Namespace */\r\n.highlight .nt { color: #008000; font-weight: bold } /* Name.Tag */\r\n.highlight .nv { color: #19177C } /* Name.Variable */\r\n.highlight .ow { color: #AA22FF; font-weight: bold } /* Operator.Word */\r\n.highlight .w { color: #bbbbbb } /* Text.Whitespace */\r\n.highlight .mb { color: #666666 } /* Literal.Number.Bin */\r\n.highlight .mf { color: #666666 } /* Literal.Number.Float */\r\n.highlight .mh { color: #666666 } /* Literal.Number.Hex */\r\n.highlight .mi { color: #666666 } /* Literal.Number.Integer */\r\n.highlight .mo { color: #666666 } /* Literal.Number.Oct */\r\n.highlight .sa { color: #BA2121 } /* Literal.String.Affix */\r\n.highlight .sb { color: #BA2121 } /* Literal.String.Backtick */\r\n.highlight .sc { color: #BA2121 } /* Literal.String.Char */\r\n.highlight .dl { color: #BA2121 } /* Literal.String.Delimiter */\r\n.highlight .sd { color: #BA2121; font-style: italic } /* Literal.String.Doc */\r\n.highlight .s2 { color: #BA2121 } /* Literal.String.Double */\r\n.highlight .se { color: #BB6622; font-weight: bold } /* Literal.String.Escape */\r\n.highlight .sh { color: #BA2121 } /* Literal.String.Heredoc */\r\n.highlight .si { color: #BB6688; font-weight: bold } /* Literal.String.Interpol */\r\n.highlight .sx { color: #008000 } /* Literal.String.Other */\r\n.highlight .sr { color: #BB6688 } /* Literal.String.Regex */\r\n.highlight .s1 { color: #BA2121 } /* Literal.String.Single */\r\n.highlight .ss { color: #19177C } /* Literal.String.Symbol */\r\n.highlight .bp { color: #008000 } /* Name.Builtin.Pseudo */\r\n.highlight .fm { color: #0000FF } /* Name.Function.Magic */\r\n.highlight .vc { color: #19177C } /* Name.Variable.Class */\r\n.highlight .vg { color: #19177C } /* Name.Variable.Global */\r\n.highlight .vi { color: #19177C } /* Name.Variable.Instance */\r\n.highlight .vm { color: #19177C } /* Name.Variable.Magic */\r\n.highlight .il { color: #666666 } /* Literal.Number.Integer.Long */\r\n    </style>\r\n<style type=\"text/css\">\r\n    \r\n/* Temporary definitions which will become obsolete with Notebook release 5.0 */\r\n.ansi-black-fg { color: #3E424D; }\r\n.ansi-black-bg { background-color: #3E424D; }\r\n.ansi-black-intense-fg { color: #282C36; }\r\n.ansi-black-intense-bg { background-color: #282C36; }\r\n.ansi-red-fg { color: #E75C58; }\r\n.ansi-red-bg { background-color: #E75C58; }\r\n.ansi-red-intense-fg { color: #B22B31; }\r\n.ansi-red-intense-bg { background-color: #B22B31; }\r\n.ansi-green-fg { color: #00A250; }\r\n.ansi-green-bg { background-color: #00A250; }\r\n.ansi-green-intense-fg { color: #007427; }\r\n.ansi-green-intense-bg { background-color: #007427; }\r\n.ansi-yellow-fg { color: #DDB62B; }\r\n.ansi-yellow-bg { background-color: #DDB62B; }\r\n.ansi-yellow-intense-fg { color: #B27D12; }\r\n.ansi-yellow-intense-bg { background-color: #B27D12; }\r\n.ansi-blue-fg { color: #208FFB; }\r\n.ansi-blue-bg { background-color: #208FFB; }\r\n.ansi-blue-intense-fg { color: #0065CA; }\r\n.ansi-blue-intense-bg { background-color: #0065CA; }\r\n.ansi-magenta-fg { color: #D160C4; }\r\n.ansi-magenta-bg { background-color: #D160C4; }\r\n.ansi-magenta-intense-fg { color: #A03196; }\r\n.ansi-magenta-intense-bg { background-color: #A03196; }\r\n.ansi-cyan-fg { color: #60C6C8; }\r\n.ansi-cyan-bg { background-color: #60C6C8; }\r\n.ansi-cyan-intense-fg { color: #258F8F; }\r\n.ansi-cyan-intense-bg { background-color: #258F8F; }\r\n.ansi-white-fg { color: #C5C1B4; }\r\n.ansi-white-bg { background-color: #C5C1B4; }\r\n.ansi-white-intense-fg { color: #A1A6B2; }\r\n.ansi-white-intense-bg { background-color: #A1A6B2; }\r\n\r\n.ansi-bold { font-weight: bold; }\r\n\r\n    </style>\r\n\r\n\r\n<style type=\"text/css\">\r\n/* Overrides of notebook CSS for static HTML export */\r\nbody {\r\n  overflow: visible;\r\n  padding: 8px;\r\n}\r\n\r\ndiv#notebook {\r\n  overflow: visible;\r\n  border-top: none;\r\n}@media print {\r\n  div.cell {\r\n    display: block;\r\n    page-break-inside: avoid;\r\n  } \r\n  div.output_wrapper { \r\n    display: block;\r\n    page-break-inside: avoid; \r\n  }\r\n  div.output { \r\n    display: block;\r\n    page-break-inside: avoid; \r\n  }\r\n}\r\n</style>\r\n\r\n<!-- Custom stylesheet, it must be in the same directory as the html file -->\r\n<link rel=\"stylesheet\" href=\"custom.css\">\r\n\r\n<!-- Loading mathjax macro -->\r\n<!-- Load mathjax -->\r\n    <script src=\"https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-AMS_HTML\"></script>\r\n    <!-- MathJax configuration -->\r\n    <script type=\"text/x-mathjax-config\">\r\n    MathJax.Hub.Config({\r\n        tex2jax: {\r\n            inlineMath: [ ['$','$'], [\"\\\\(\",\"\\\\)\"] ],\r\n            displayMath: [ ['$$','$$'], [\"\\\\[\",\"\\\\]\"] ],\r\n            processEscapes: true,\r\n            processEnvironments: true\r\n        },\r\n        // Center justify equations in code and markdown cells. Elsewhere\r\n        // we use CSS to left justify single line equations in code cells.\r\n        displayAlign: 'center',\r\n        \"HTML-CSS\": {\r\n            styles: {'.MathJax_Display': {\"margin\": 0}},\r\n            linebreaks: { automatic: true }\r\n        }\r\n    });\r\n    </script>\r\n    <!-- End of mathjax configuration --></head>\r\n\r\n <link rel=\"stylesheet\" href=\"https://cdnjs.cloudflare.com/ajax/libs/jqueryui/1.12.1/jquery-ui.css\">\r\n\r\n<script type=\"text/javascript\" src=\"https://cdnjs.cloudflare.com/ajax/libs/jqueryui/1.9.1/jquery-ui.min.js\"></script>\r\n\r\n<link rel=\"stylesheet\" type=\"text/css\" href=\"https://rawgit.com/ipython-contrib/jupyter_contrib_nbextensions/master/src/jupyter_contrib_nbextensions/nbextensions/toc2/main.css\">\r\n\r\n<link rel=\"stylesheet\" type=\"text/css\" href=\"https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css\">\r\n\r\n<script src=\"https://rawgit.com/ipython-contrib/jupyter_contrib_nbextensions/master/src/jupyter_contrib_nbextensions/nbextensions/toc2/toc2.js\"></script>\r\n\r\n<script>\r\n$( document ).ready(function(){\r\n\r\n            var cfg = {};\r\n\r\n            // fire the main function with these parameters\r\n            require(['nbextensions/toc2/toc2'], function (toc2) {\r\n                toc2.table_of_contents(cfg);\r\n            });\r\n    });\r\n</script>\r\n<body>\r\n  <div tabindex=\"-1\" id=\"notebook\" class=\"border-box-sizing\">\r\n    <div class=\"container\" id=\"notebook-container\">\r\n\r\n<div class=\"cell border-box-sizing text_cell rendered\"><div class=\"prompt input_prompt\">\r\n</div>\r\n<div class=\"inner_cell\">\r\n<div class=\"text_cell_render border-box-sizing rendered_html\">\r\n<h1 id=\"Introduction-to-SHARPy\">Introduction to SHARPy<a class=\"anchor-link\" href=\"#Introduction-to-SHARPy\">&#182;</a></h1><p>Version: <em>June 2019</em></p>\r\n\r\n</div>\r\n</div>\r\n</div>\r\n<div class=\"cell border-box-sizing text_cell rendered\"><div class=\"prompt input_prompt\">\r\n</div>\r\n<div class=\"inner_cell\">\r\n<div class=\"text_cell_render border-box-sizing rendered_html\">\r\n<h1 id=\"Overview\">Overview<a class=\"anchor-link\" href=\"#Overview\">&#182;</a></h1>\r\n</div>\r\n</div>\r\n</div>\r\n<div class=\"cell border-box-sizing text_cell rendered\"><div class=\"prompt input_prompt\">\r\n</div>\r\n<div class=\"inner_cell\">\r\n<div class=\"text_cell_render border-box-sizing rendered_html\">\r\n<p>SHARPy (Simulation of High Aspect Ratio Planes in Python is a framework for linear and nonlinear aeroelastic analysis of flexible structures.</p>\r\n<p>It is developed by the Loads Control and Aeroelasticity lab at the Department of Aeronautics. All the code is open source and readily available in GitHub.</p>\r\n<p><strong>Important links:</strong></p>\r\n<p>Loads Control and Aeroelasticity lab\r\n<a href=\"https://imperial.ac.uk/aeroelastics\">https://imperial.ac.uk/aeroelastics</a></p>\r\n<p>Main github repository\r\n<a href=\"https://github.com/imperialcollegelondon/sharpy\">https://github.com/imperialcollegelondon/sharpy</a></p>\r\n<p>Documentation(!!!)\r\n<a href=\"https://ic-sharpy.readthedocs.io\">https://ic-sharpy.readthedocs.io</a></p>\r\n<p>UVLM solver (C++)\r\n<a href=\"https://github.com/imperialcollegelondon/uvlm\">https://github.com/imperialcollegelondon/uvlm</a></p>\r\n<p>Structural solver (Fortran)\r\n<a href=\"https://github.com/imperialcollegelondon/xbeam\">https://github.com/imperialcollegelondon/xbeam</a></p>\r\n\r\n</div>\r\n</div>\r\n</div>\r\n<div class=\"cell border-box-sizing text_cell rendered\"><div class=\"prompt input_prompt\">\r\n</div>\r\n<div class=\"inner_cell\">\r\n<div class=\"text_cell_render border-box-sizing rendered_html\">\r\n<p>SHARPy is mainly coded in Python, but the expensive routines, such as aero and structural solvers are coded in faster languages such as C++ and Fortran.</p>\r\n<p>A number of different structures and analysis methods can be run. For example:</p>\r\n\r\n</div>\r\n</div>\r\n</div>\r\n<div class=\"cell border-box-sizing text_cell rendered\"><div class=\"prompt input_prompt\">\r\n</div>\r\n<div class=\"inner_cell\">\r\n<div class=\"text_cell_render border-box-sizing rendered_html\">\r\n<h2 id=\"Very-flexible-aircraft-nonlinear-aeroelasticity-(Alfonso)\">Very flexible aircraft nonlinear aeroelasticity (Alfonso)<a class=\"anchor-link\" href=\"#Very-flexible-aircraft-nonlinear-aeroelasticity-(Alfonso)\">&#182;</a></h2><p>The modular design of SHARPy allows to simulate complex aeroelastic cases involving very flexible aircraft. The structural solver supports very complex beam arrangements, while retaining geometrical nonlinearity. The UVLM solver features different wake modelling fidelities while supporting large lifting surface deformations in a native way.</p>\r\n<p>Among the problems studied, a few interesting ones, in no particular order are:</p>\r\n<ul>\r\n<li>Catapult take off of a very flexible aircraft analysis <a href=\"https://arc.aiaa.org/doi/abs/10.2514/6.2019-2038\">[Paper]</a>. In this type of simulations, a PID controller was used in order to enforce displacements and velocities in a number of structural nodes (the clamping points). Then, several take off strategies were studied in order to analyse the influence of the structural stiffness in this kind of procedures. This case is a very good example of the type of problems where nonlinear aerolasticity is essential.</li>\r\n</ul>\r\n\r\n</div>\r\n</div>\r\n</div>\r\n<div class=\"cell border-box-sizing text_cell rendered\"><div class=\"prompt input_prompt\">\r\n</div>\r\n<div class=\"inner_cell\">\r\n<div class=\"text_cell_render border-box-sizing rendered_html\">\r\n<p><img src=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAADeQAAAboCAYAAABX0TDLAAAgAElEQVR4Xuzda5Cc12Ee6Pf0DAc3EhRN2iIowDLXa5lK1pScVOKkllsUy05lI2u5kQxkTRJoYrpBUGTMhJSi0NlYO5gtV+JcbKasWBcOpjEYDLiyCCdScRPLpSguUtryit6IWaosS1SWtIkhJfESghcQl5nusz9wETSYmQZ4wYXzPFVddbrPew66v+6pr/DjrZMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA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6uuWd+XbLDVvDompk/GqUgSTGpj/Fx+z9r//oisH7g4N38XFECuUw3dRNkecyRJlc+XwXRiSeXrTmJu7FkUQV96f1hswFDmFznvvLRZU1+L5CeIoJMz2EBYLFHu66Nmxjc7fPjHm5o2MTQrnjT+Nb7vCUnPn4JIJLAwJe9Lsvv8BPV8iY9icP7vJXCrJK5+5U3NVRETGPAX0xrfm5iXLwP0JkHZevGKkehERERERERERERGRI6FAnoiMaUb85w7vIUf8yebmG55qa1v/zwNrbr11cV0+568D5oF1+UHp8/23O8+1YdwEXNmyvOmWtes2fGXgMQCam5ve6+BDAC72B60Zy1avXu1Wq1ueiAyiL5j3pksszhfK3bXqavDr65j2wavNJQL2qFueyEnV/ehj5W55Zy4gOXsGQX0dLpFgwSdut9Ke/YTZHHEuT5zNEaWzxIUCxIaVSmSefWZczE+LQiyOcc7BuDhjmSjOfc9NlqiuwwuSWBRSyvYQFYsU092kd21n76//UyNSjpnCeeND7evPxyUTEMVE6QyZLc+PtIuIjKLZH11pLpmEGGbdtNwyW/6bnl/8l66rIiIybiigN340NzfPdpTXDQ371Nq779060j4iIiIiIiIiIiIiIkdCgTwRGdPa2u59eEXz0nXm3HKH/dOK5qX3xnjrfL+42RWT0yIXX17I8dfO8VogMrwlra1f39v/GGvXbni8uXnp5x3uDhxfbl7edAWOu1KpcHMY1hql0jmxFzdhdivOOTN+tPaee342xCmNab2LvArmichg0k896Wrf+CYDiNJZonSWoLEev76WadddY14iYPfGB3XdEDlJMls2O8CinjSpebMJpkzGSyUJpk+h5wePEWdzZJ9/btzOQYvivtvOjdsvQ8aRc9610pI19XiJFBZHlHJpomKBYuYAmd2vsOf5n2kgygmlcN7YNPumZvNSScARZbLkfreN9BjsJCsiZbNvaTavKgU44kyG/NZ2hfFERGTcGymgN1iNHLslS5bUDrWturraWltbs733nYWtODcJ+Hlb28Z/HGo/EREREREREREREZGjpUCeiIx5d7dtbG5ZvvT/Z+/O4+O66/vfv75nmRlpRpL3XQmBELI6OLEJlB16W1ratCUJS+IoseQkBAgEbul2b6+V3x/9/drSlhJaaBLbWUxYmrZQlgYobSm0FMhmh4YmJGTxLnmTNPtZPvePGcmyY0uObdla3k89JM3M+Z6j0Znz/UrnnHmfz3bgD8y51Q5bnSYh+Mao8it7U+PajRvv+acjLaOz84WPb3vhTMPxUee4Gri6XguAGnjNRo03jn8TF1x1pGVMJaODeTrJKyKjlR55uFEtb+UqwyAeGCIplvFnteHnW5n/3ivMKZgnMmGaoTzyF7/aWs7qJFy8AL+twOxffhMkCe2vW2G71t83NftfkoBZ41OBPJlAr/yVbssUOvDDLJamRJUiaVSnXhqivGcHux//N22AMuEUzpscFvdcZ14uB55HUqpQ27aDge9+V6+ByCS16IYu81pbcJ5HUq5Q27GbA9/6Z/VZERGZdo60X3B4SE/7Dsenp+e9CzFv19Gmp0n1OeAsgLVrurrM8U6MivOt52jzHIt169a522677UVBy8PbbNuqAnwiIiIiIiIiIiIiM4UCeSIyJazfeN8f9vSsvsdSPuLgDcArwKXAz8D+IU69v77nnnsOHG3+2277bgL839dff80m3/lrcLwdbAmQw1yfwQ9x7v4NG+758tGWMRX19va6XlXLE5EjKD7045FgnsUx8d4DpMUyfkcbfmuO+e+7wgD6P/93GjtEJkBp82MOM4uLpUa1vNmz8LIZwkULWPbbt9i2T9w+5fpeWq83wnjAqIsmiJw0K191tVUuWoifyWJmxNUySVQnKhcp793Jrse+ow1PTguF806PhV3XNII9fkBarhDt7mffgw9qnYtMUguue5/5hTwuCEjKVaK+vez7ytfUZ0VEZMY4fP9AAb2JdeON1yxKIj7ZuGd/eNdd9z019hwvFgQMJHHj9o4dT80F9ozVftu2bbOGbzuXHPWcpYiIiIiIiIiIiIhMDzqwLyIyQyiYJyJjKVy6yvAcYPj5Vvy2Al5LFhf69H/ubzVuiEygwqWXWu6sTsKF8/HzrbgwgCShunX7lOt/HW9/m/n5PM73qO/axdAPfjilnr9MTqvOXW3ZsEDgZzBL6T/bJ6nXiSpFKvt2s/ORb2k7k0lJ4byJs+C9V1o4fx4ukyGtVIn27KP/Sw9oHYtMUvPe/VuWWboILxOSVupE+/bTv0lV2UVEREZTQO/k6l7T9Y/O8euYPeYFubdUKpX4aG2zGa8IkKTJJXHsntq0aVMJYN26N/vbtp4ZAQ5n561ff9//HG0ZAD09q8/GvJ9hxMvOOCszXkU9EREREREREREREZnadCBfRGSGUTBPRI4mv+ISw/NwngeA317Ab8vjZTN4mYC++/SGSZGJkl9+sWUWzyezdBHBrA68bAY8j7RaZfuf/dWU6Xsdb31rs/KJRzwwwMC/fHfKPHeZfC47r8syYR7fC0ktJY6rxGlEPSrTN6tIec8ODjy3WduYTAkK5508cy9/p+XOWIbLZLF6nWj/AH2f+7zWqcgkNfsdv2gt556Nl8mQRjHx/kH67t6kPisiIjIOBfROTE9313GH4Yzk3A0bPvckQE/3tTvBLTLc+zZsuOcLY823dk3XFeZ4ANi6fsO9Z4zVVkRERERERERERESmvmC8BiIiMr0Mn7Tt7e01ncAVkdFKjz7iAAqXrjQDksEiSbFEMKsdP9/KvPdeYV6oYJ7IRCht2exKW6DtNass+7JOMgvm4eVb8FpydP7erbb1/3xyavQ7S8EMM3BhOF5rkSN67fnXWxi04nsBqSXUojJJUqcWlSlW91Ks7GH3049PjT4h0jR630vhvON31s0fMS+XA6AaDxEPlRj68SPjzCUip1PLOS/HhSGWJCRDJYoPPTbeLCIiIsKL9xUU0Ds9zPiKc9zksPcDYwbyUnhX40Wx74/VTkRERERERERERESmBx2oFxGZwVQtT0TGUli5qvEmD+dwmZCgow2vtQUv8CDw6N/0txo7RCZAfvnFllm6kMySRQSz2hvV8oC0UmX7X/z1pO537W96o/ltbbjAx6I6+7/xzUn9fGVyee35aywTtOJ5PmmaECVV4iSiFhUZquyhVNlD3/4ntE3JtKJw3rE5c+3NFuTzOD8grddJqlXioSG2f/E+rTORSWzxh9aa19ICBslQifITTzH4ve+r34qIiJwECuidPMPV9EZXxhuZ1tP1Gowf0mjwgfUb7/3MERZBd3fX5Q6+DDiXem+66+67v3ekdiIiIiIiIiIiIiIyfejAvIiIKJgnImMqrFxlOAdmeK0tBO0FvNYcLvDpv1+hPJGJ0va611ruzKWE8+fhtbbgQh+LE7ZN4mp5ba9/vQUdbY3qeGnCvq9+Y9I+V5k8XndBj4VBDs/5JGlM3AziVetFhir9PLdTb9yXmUHhvBdbdvV1lpkzBy+TbVTXqlRIyhVq/X30ffOrWkcik9ii968xv5AHzyMtlqk++wL7/+lb6rciIiIT5PCAXvMx/e09BmMF8gC6u6/9c4f7KIAZ9+P4m2w23hLHeSOKzkm9tAuzD+CcZ8a3N2y895cOX4aIiIiIiIiIiIiITD86CC8iIiMUzBORo2m9aLm5TAbneQD4bXn8tjxeLosLffo3fUnjhsgEyC+/2LKdi8ksWYjf0Y6XCQFISmV2/OVnJ12/a3vta82f1YGXy0Bq7PvHr0265yiTxy9csNaCIIfnPJI0JoqrxEmdalRksLSbF3b/QNuPzFgK58FZN3/YvFwLAEmlQlqrEe0/QPHpnzH0k0dm5DoRmSoW9lzbuEhDEJCUq9S372LvP/yj+q2IiMgppip6x2a8QN66dW/2t71w5p/g+Chjv7/im0Zw1YYNG4bGaCMiIiIiIiIiIiIi04QOuouIyIv09vaaTsyKyJHkL11pQCOY5yDoaMcvtOKyIV4Y0HffFzV2iEyA9je83rKdSwjnzx2pUGlRzLY//stJ1ecKK1daMGc2XmsLYOz7sqoXyaHOPeOXbE77mYR+FpxHmkZEcY04qVGpDzFQ2sW2vh9puxEZZaaF885ce7P5+TyeH5DW6yTVKvFQkcr2bez7/r9M+99fZKpbcO17LJw3B5fJkFaq1Pv2sucLD6jvioiITAIK6B3ZeIG8Yddff80K3/lrcLwdbAmQw1yfwQ9x7v4NG+758tHmFREREREREREREZHpRwfZRURegp7urq8Cv3b44+OdpDsWPWuu/TbO/SKMv7w1a659g3Nc53BvBhYDqRnbwb7j+d7Gu+6655GjzXusVC1PRMZSWLmq8eYN53CBTzCrHa+1BS/0caFP332qmCdysuWXL7fsGUvJLFlI0N6Gy4RgRlIsseP2OyZFn8uvWGHh/Hl4rS04hyqhyIiLXn65tbcuJPBz4BxJUidOakRJjUptkIHSTrb3P6ztRWQc0zmct+x9XZaZOxcvk8WShKRSIalUqPX3U372WYpPPj6tfl+R6WjulZdbtnMpXiYkrdaJ9w3Qd9/n1XdFREQmKQX0RERERERERERERESOnw6qi4i8BBMVyFu75robzdnfDN8/2vKuvPLKTEd7y53gug6fNsIsxblPLes862O33XbbISdTj4eCeSIyloPBPPByOfz2An5rDhf69N+vKggiE6HjTW+0bOcSgnlz8Fqyk6paXn75cgsXLmgE8jynQJ7w6rOvsHxuLoGfBQdJEhElNaK4SqU2yIHiNnbu3aztROQ4TKdw3lk3f9i8XA5wpNUKSbVGdOAAxaefZuhxhXVFpoKOt73J8hedj5fNkEYxyYEhdm+8T/1XRERkClFAT0RERERERERERETk2AXjNRARkYOWdZ51+RNPPDFyArK9rSUZq/2xuOGGa89I4/QTx5KRbm9r3QRcBWDG/c5zd9br6eOFQpLUasFyZ9yIc9cAt27d+vMs8IExF3gMhk+49vb2mk6+isjhig/92AEULl1pabVGWq2RFlrx2wrMe8+7zIUB/ZtULU/kZBr49++51ouWW+6sTjKLFxK0F3CZkM7fv9XigSF2/vX609bn0qgONvzerdP2NGQSuOSc91hrdha+nwGDOK0TJ3WiuEK5NsCB4g52KYgnckJG759N1XDemT3vNz9fwAsC0nqdpFolHipS3bGdvd/7zpT5PUQE8heei8uEWJKSFMsUH/vJeLOIiIjIJHP4voQCeiIiIiIiIiIiIiIiR6eD5iIiJ6Cnu8vgxCrkda/p+pZz/F/AV4DfgCMvr7u763LXaIORrtmwYdPdL1oY0LOmazWOewGH47L16+/90ZHaHQ9VyxORseQvudQAnO8DEHS04bfl8YIQFwb03f9FjR0iJ1HrhRdZOH8O2WWLCefOxstlIfCxesS2P/nUaetvHW9/m/n5VpzvE/XtZvA//uu0PRc59Va+6mrLZdrw/SyYESc14qROPa5Qrh1goLRLQTyRCTYVwnlL37vasvPm42WyWJKQVCoklQq1/j2Un3uW4v9smZTPW0SObPEHe8xrbQEcyVCJypPPMPCv31U/FhERmWYU0BMREREREREREREROUgHyUVETsCJBvJ6ru9ai8edYAf8ID0vif2dcOTl9azp+hqOd4I9sH7DfVcdeYkNa7u7vm7wq2b8/YaN914xVtvjoWCeiIylsHKVYQaeh3MeQUc7fr4FFwYK5olMgPzy5ZZ7+RlkFi/Eb8vjwhCShGjfAXbdcfcp728db32r+YU8LvCIBwYZ+Jd/O+XPQU69VeeutmxYIPAzmKVESY04iajHZcrV/QyWd7NrrwI2IqfaZAznnXXzh83L5QBHWq2QVGtEBwYoPfM0g1semhTPUUSO3aKbrm/87+f7JKUy1ee2sf/rD6ovi4iIzACHB/Saj+n/ABERERERERERERGZEYLxGoiIyMS4/vrrl+GlfwZAyq133PG5XT3dXUefwbEcwPA+d/RGDebSz2Lerzp463htj8fwCVUF80TkSIoP/dgBFC5ZZUYjFJSUygTtbXitOea/+wpzztH3xQc0doicBKUtWxw4S4ZKZJYtJpwzCy+bIZw/l2Ufv8W2/entp7SvmaWYGRi4ULuc091rzuuybJjH90JSS6nH5UYQLypTrO5jqNzP7n0K4omcLqP31U53OO/MnpvMzxfwgpA0qpNUqsTFItUdO9j77/98yp+PiJy4hd3XjFRGTipV6rv6FcYTERGZQY60X6EqeiIiIiIiIiIiIiIyU+jdkSIip4nvpXcB7WY8uOHu++4Zq+1VV13lAUsAzLwtY7VttLGnHIBj9i233JK9/fbba+PNczxGB/N0UlVEDld85GAwL63VqffvwW9txW8r4LdkWfDeq6zvC3+rsUPkJCht2ewA8itWWO6sTjKLFuAX8rhMhs7fu9Xqu/rYfff9p6a/JSmYgRnO1y7ndHThWb9u7fmFhH4O5zxSS6hFZZKkTi0uU6zspVjZw+59j5+abU5EjsnpCuctfc81lp2/AC+TxdKEuFgkqVSp7emn/NxzFH+6eUJ/vohMjPnXXGV+RzsuDEkrVeI9+9n7d19RfxYREZnhDt+/UEBPRERERERERERERKYrvTtSROQ06O6+thv4ZWAwNe+G8drn8/klkPoAQRDsHa+9c7k+LAKgVNq7CHh+7DlOTG9vr+tVtTwROYriIz92+YtXmPN8knKFpFwhaCvgt+WZf+UV5sKAvs9/UWOHyElQevRRR5JaMlQiu3QRQbNaXmbpYpb99ods2yc+PeF9zdIELAV8nO+N11ymkFXnrrZsWCDwMxiQJBFxUiZOmxXxKv0UK3vp2//fE76diciJOVXhvJe9/xbzW1oAR1KpkFSrRAMDlJ55hsHNPz6pP0tETp25v/lOC+fPwwtD0lqd+MAQ/Z/XxVZERETkxRTQExEREREREREREZHpSoE8EZFTbO3aa5Za4v4cB87cx+++++5t483jeVEefADuvPPOgXGas379+v093V3Ney43ZuOTZPikqYJ5InIkpc2PNqrlrVhpAPFQkaRYJJjVgZdvZf5VzWDe/QrmiZyo4Wp5hZUrLfeyZYQL5+MXWnG5LJ2/d6uVn3qGvX//1Ynra0mCpYZzgKdA3nTwugu6LQxa8JyPWUoUV4nTOlFco1ovUqz0U6kP0r//iYnbrkRkwkxEOO+M7pssKBTwgpA0qpNUqsTFEtWdO9j73W8f93JF5PRre+0qy565DC8TYHFCMlRk6IcPjzebiIiICKCAnoiIiIiIiIiIiIhMHwrkiYicYpZ6d+LoAP7lro333DFe+6lGwTwRGUvx0YcaQaFLVpkZRPsH8Iol/I42/NaWRjAv8On7/Jc0doicoOJDDzmrR5YMlcgsXdQIwGZDWs9/JbmXf9C2f+KvJqSfWZxAmgIOJuQnyKmw4pVXWWt2NkGQxeFI0phaXCJJIupxhXJtgKFyHzv3PqZXWWQaOdFw3tKrrrbMwoX4mSyWJsTFIkm1Sn3PHsrPPcfQExozRKa6wqpX4zIZLDWSYonS4/9D5ckn1bdFRETkuCigJyIiIiIiIiIiIiJTlQJ5IiKnUHf36uvB/QpQdF66drz2U9noYJ5OmIrI4YqP/HgkmJdGMemefSS5HEF7G15LlgXvudL6vviAxg6RE1TastmVtkDbZa+x7JnLyCyah5dvwWvJ0fkHt9rWP/rkSe9nliRA471Tzp30xcsEu+y86ywTtuJ7IWZGktSJm5/VqESpso9K7QC79m3Riysyzb3UcN7L3n+L+S0t4BxJtUJSrREdGKD8858z8NgPNWaITAOLP9BjXjYLQFKqUH3meYo/+rH6t4iIiJw0CuiJiIiIiIiIiIiIyFShQJ6IyCnS3d292BH9BYBhv7/+rk3PjjfPdNDb2+t6VS1PRI5iJJi3YqWl1Rr1ag2/kCdoyzP/yneZCwNVyxM5CYZ++COXVmuWFEtkly7En9WOl8nQ+f9+zNJyhe1//pmT1s8sSRp5PDNw3njNZRI4/2W/YrMKSwn9HM55pJZQjyvESUQUV6nWBxks72Z7/8MnbTsRkallrHDemd03mV8o4AUhaRSRVCvExRLVHTvZ+91vadwQmSYW3XideS05nOeRlCrUt+3kwHf+VX1cREREJtR4Ab0jtRERERERERERERERORUUyBORGWv16tX5o01raWmxO++8s3y06cfDWXwnzs0Cvr9hw32fHq/9dDJ8MlTBPBE5muKjD7nCiksNg6RYIimVCNrb8QutzL/qikYw7/4vauwQOQGlzZtdafNm2l//OsueuZRw/ly81ha8fCvLfv9W2/a/T061PKvXGmE8mfRWveoay2YKBH4WA9I0IorKJGlELSpTru2nWNnLrr2bT8q2ISLTw/D+3NL3rraXf+ij5mWyWJoQl4oklSr1PXspP/csQ088prFDZJpYeP3V5hdacYFPUq4S7d7Dvq9+Q31cRERETrkjnV9SFT0REREREREREREROR0UyBORGamn570LMW/X0aanSfU54KyjTX+p1q7p6jLHOzEqzree8dqPZd26de62224b813u69atc9u2Tr4CfArmichYio82Ki8VLlllGMQDgyTFEkFHG35ewTyRk2XwP37g8sXllu1cQmbpIoKONlwmpPP/+ZglpTI7PvnZE+pjlf950mWWLrXhUF77G15ng9//wQktU06u113QbWHQgud8zFKiuEqcRkRxjVo0xFB5D9X6IH37/1uvm4gc0Vk3f9i8XAsASaVCUqsRHRig/NyzfPTyd9D7jX/Q+CEyTcx/3xXmz+7AhSFppUa89wB7HlAfFxERkcljvCp6OhclIiIiIiIiIiIiIhNBgTwRkQl2443XLEoiPtm4Z3941133PTX2HC8WBAwkceP2jh1PzQX2jNV+27Zts4ZvO5ccGKvt6TA6mKcToSJyuOIjPx4J5lkcE+07QFIqE7S34bXmmP/uK8056PviAxo/RI5TafMWV9q8hfY3vt6yZywlnD8HryWH35Zn2e9/xLb97788sf6VpmAAhstmx2stp8Crz77S8rnZBH4O5xxJGlOLyyRpnXpUpVIbYLC8m517VdFKRI7uzLU3W5DP4/yANKqTVKrExRLVnTvY+91vN/bzHvmvQ94Aq30+kalrzq+/w8KF8/HCkLQWEQ8U6b//S+rTIiIiMqkpoCciIiIiIiIiIiIip4ICeSIyI61f/4XdwCk54RZH/h3OMRuzx7wgd9fq1avz482TprSuXr06v2nTphLA4sXb+rdtPdMAl6bBPMYJ5EFtLnhgxMs6X9U3dtvTp7e316lanogczehgXlqrU+/fg59vxW8r4OeyLHjvVdb3hb/V2CFyAga/9x8uv3y5ZV+2jMyShQTtw9XyPmrJUJEdn7rzuPqYpYaZgYEXhuM1lwl02Xldlgnz+F6ImZGkEXFSJ07q1KISpeo+ytX97Nq35bheaxGZGTpXX2/hrNl4mSyWJMTFIkmlQm3PHirPP8fQE5sPf8OrG3Vb4TyRKSr38jNxmRCLE5KhEsWHHh1vFhEREZFJRwE9ERERERER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ogWPExURERERERERERERERHtk3POOadZ1+VCBfypCN6kgIwAw0rhAaWpG77znX9Zt7d1rFy5/PeVwjkK6h0AugCEIhgG5B5N127bl3XsDYN5RERE9EodV6wUoyULLRGfbT1yEFRq8MamYW/uR30db/YjooWt69pVYuSaoExjttmzAX+6AnvzEMq/fJhz2H7qunilGLnZ84IIxAsQ1hvRuWGqALt/ELV1ew7IvemfzhSzNQ0tZiB0fQRVB+50FY2XxjH+o/nH5IRr/0wSPc3QrQTECxDUXbjTNdS3TmHoNra/ENHisL0JL9bVDiOXhbG9/W6nkN3QbPudlc+LUlFTnjs2DrO1GUZLFkauGbqVgooZURAn8BFU6xj951s5Fy5iS5afLrGezqjpTBAF8Wp1BMUynKExFO+6Z9Ec38wf/B8xspnoIS6eh8LPfrFotv1wiB5u0AI9mYCEYdSGWKnCny6i8VI/AEH1yafn9mH3Jy8UPdsEzTSj7+a2A79Uhjc+BXvrAGob+d2ciBYPTlhERERERERERERERES0V+evXP7uUKkfA8jsYdg/L1227YrrrnsgeOUPPvrRj8aymeTNgFrxagsCAERCKPWNpcuOveq6666T3Y7bR2vXrhWG8oiIiI5ubSs/KvE3dENLJaLAhe0iqNbhTxXReH4rak/sufWIiOhwW3L56RJb2g7NSu4IFBdrcAcnMfODX3IO20/dl58X3QQei0G2N/fUGwgqVXgTM3AGR/YaxDvmMx+S5LFtUbguCBE0XPgzddhDM6huHETpsefnLX/y9cvFzCQBpRA0PHjFOpzREopP9qPw8PM8hkS0KFn5XjHbW6JgXi4L3UpCmSaUpiC+D79cxdiN31VWPi8IBbGONriT0zCyaRitzdEyTRa0eCwK5oUhQtvGyFe/zXlxEcn9yR+J9baToiCeUhDPR1i3o6az0QkUfr74Wsib3/OuqI1YaRDbRuFXdy263+H10HbGn0vijUuhpVIAtrch1uEXSnD6h2G05iB+gJk7oobBrotWitHSDC0ejz7vjof6bzdDSybQePHlXRr0iIgWA05cREREREREREREREREtEerVq14pwJ+BSAmIk9qUP/oheoxTdMCXby3idIugMIZAADBzbfc9r0LdlnHyhX/rhROBwAR/FBp6mbXDZ9Np4PAcYy3K8EFUDgrWoXceOut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\" /></p>\r\n\r\n</div>\r\n</div>\r\n</div>\r\n<div class=\"cell border-box-sizing text_cell rendered\"><div class=\"prompt input_prompt\">\r\n</div>\r\n<div class=\"inner_cell\">\r\n<div class=\"text_cell_render border-box-sizing rendered_html\">\r\n<ul>\r\n<li>Flight in full 3D atmospheric boundary layer (to be published). A very flexible aircraft is flown immersed in a turbulent boundary layer obtained from HPC LES simulations. The results are compared against simpler turbulence models such as von Karman and Kaimal. Intermittency and coherence features in the LES field are absent or less remarkable in the synthetic turbulence fields.</li>\r\n</ul>\r\n\r\n</div>\r\n</div>\r\n</div>\r\n<div class=\"cell border-box-sizing text_cell rendered\"><div class=\"prompt input_prompt\">\r\n</div>\r\n<div class=\"inner_cell\">\r\n<div class=\"text_cell_render border-box-sizing rendered_html\">\r\n<p><img src=\"data:image/jpeg;base64,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JBBBBJABBBBBBABIIIIBBJJIIJBJIBAJJBIJBIJIAJJIAJIJJBIIJJBW8YIIAJAJIBBIBIIJJIBAABBAJBBJABJIBIIIJAJABAAJJIABIJBIJAAIIJAAIIAJIIJABIBIJAIIAANiIBAIIBBAAJAAJIABBBIAJIAJJBABBJAJJJBJABBJIJAIBJJIIJBJIAABBABBAJBJJAIAAAJBAJIBJMZBJBBIJIBJBIIJIIIJIIBJBJBJIJIAAIIABABIJBIBIBBIJJIAJIJBIIAIABAIIBJJIABAIJIJAABIAAABBABABIJBAAAJJAIAAIIIIBBBJBJAIAAIBAIAAIAJAAIAAJJBIJAIJBBIIBBIIABJJJBAIIAIJJIJAAIBJBIIBBABIJAIBIAJBIJAJIABAIIBJJAIJBIBIIABJBJBIAAJJIBIABAJJIABAIBJIBIIBAAIJJBAAJBABIAIBBIAIBJJJBBIJIJABBABJJBJIIIBBIIIAIBBAIBJBBJJIABJIBJJJIJIJAABJAAAIJBAJJBJBAIABIBJBAIIIBIIAIJBBABIBBBIJBABIIAAAIJJAJIBAJAAJAIIIAJJJJJAIAABAABAAAAJJBAAIAJJBABIIAIIAJAABAAAIBIIIBJJIAIJIBBBIIBBIABIBBBBJJBJJABJJBBBBBIAIIJJBAJJIBBIBJJBAAIBBIBIIJABJIJBBJAJAIAJIBIJJIBIABIBJBJJJIBBIJBAAIJAAJIIBIIBJBABBBBAIBIAJBIBIBBAIIAJBJIIJIAJABIBJAAAABBJBBAABJBJAAIBIAAIJIIBJJBBBBBABIAAJIJAIABIJJBJBIABJIAJAJAIJIBBAIIAJBBBAAIIJBABJAAAIAJBBIBIJBAJBIBAAIIIIAAIIIJAAJABBBJIJIBAAAIBJJBAIJABJJBAAAJAJBABBJJJABBBJJJIJJBJBIBAAJABJAJIABIJABIJIAAJBJBJBIAAJABBBABIJBIAJBAJIJBBJIBAAAAABABJAIIAIJBBAJBBABAIBIJJBAABBAIAIBBJBBJJBJBBJAJAJIJAAJIJBJBBAAJAAIAJAIIBJBAIBJBAABIJBBAAAJJIIJIJAABAABJJABBBBIIJBJIAJJAABJJAIIIIBAJBIIIJBBBAJJIABBAJJIAIJAJJAAIIJIIJAIBAABIBAIIABJBIJBIAIBJA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\" /></p>\r\n\r\n</div>\r\n</div>\r\n</div>\r\n<div class=\"cell border-box-sizing text_cell rendered\"><div class=\"prompt input_prompt\">\r\n</div>\r\n<div class=\"inner_cell\">\r\n<div class=\"text_cell_render border-box-sizing rendered_html\">\r\n<ul>\r\n<li>Lateral gust reponse of a realistic very flexible aircraft. For this problem (to be published), a realistic very flexible aircraft (University of Michigan X-HALE) model has been created in SHARPy and validated against their own aeroelastic solver for static and dynamic cases. A set of vertical and lateral gust responses have been simulated. (Results to be presented at IFASD 2019).</li>\r\n</ul>\r\n\r\n</div>\r\n</div>\r\n</div>\r\n<div class=\"cell border-box-sizing text_cell rendered\"><div class=\"prompt input_prompt\">\r\n</div>\r\n<div class=\"inner_cell\">\r\n<div class=\"text_cell_render border-box-sizing rendered_html\">\r\n<p><img src=\"data:image/png;base64,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dDwcVGcXzH3sShY7+8doOaN/LIdVzNnIpBKO8txqPmNnW1zTSkRENHPhda2DhnPZdBLXL5X+xe3bt/9G1LVERERERERERERxJKMuICIiIqLJ+cpX1g9+6zc++33Z8L7nQR+MI5abT4/HcqOShpACEJ46uX7V8zS29us4qrdRypu4tmLDNMb//0ikFFBq8qtfLyIgoPRsz6CUhgBEq+0u/uWDveTeYeOvCul865137r8QdVsiIiKajDfeeO0Pfu2LX3zBc9VLK6X0dz/+zGorm042om4HAIYhobU4iLqOiIiIiIiIiIgorsb/yCARERERDe3Wl94rJSz1swLSjrr2InGYMDfqdDlgtAlzliXt5y7b//QvHh5ZF01Ym9Sa1puX0ygftRGebjdtH7+aw6OdKlxPRV06MdlUAgt52z2qNcyjmj9tT0pRv3ll0Wi129+2zMSXuaaViIhotu7effdFrb3byaT1kqegLpo6l0sn1dpS4b3XX3/1tbN+n4iIiIiIiIiIKO4YzBERERHFzFtv/a5dx/EnPYVFDCEOsRww+2AuZcvss6v27/9/H1WtqGBsEmtan7uawW65iVpz9Jc1rE9cy+HBVgWnp+xNU9q2sFhIeZWjulFrtE/8Xipp1a+sFAyuaSUiIoqPe/fvv+y0WnfOW9f68WdWW5D41dfv3Pn9814GERERERERERFRnHElKxEREVHMvP32rzZ/6+3177ccfM+Q2I+6fv6Nfx0rAEgpLAB9xWKTWNNqCNHX654kKWKyklUIcdY5Gi0nzTWtRERE8fL6nTtfP72uNW0nasHvGxLSFOKPLngRREREREREREREsTbao4BERERENHGDrmmdvwlz5wdzo0yYy2WNlauLyf/xBx8cWlHXnjaONa0//UwOH24dw3Fnsw5VCOCnruXx40flqEsnKmkZWFvKqr2DI9lsn/++5JpWIiKieLp7990XlXb+rmUlP7V7cFRbW8rX7txZvx51OyIiIiIiIiIiorjihDkiIiKimPvaV9YP8jL/nSdz2txkpssBgCXEwKFcoN50sV9tjDRtTkp/utqsSDn76XIA4GkNAQgv4ixK6e60OSnxjb//D+7+K06cIyIimr033njtD4KJcwu55J8B4v+Jug0REREREREREVGcDf7IHxERERHNzK0vvVdKJ3HTU1g875r5mjB3cTA3yoS55ULixlLRvD/MhLmwYabNGYbA89ez+POPqlGXToxpSNy4lMFPNg+jLp0oKQWeWSvg0c4hPK//aXuppFW/slIwWu32t9stfObNN994EHUbIiIiIiIiIiIiIiIioiicMEdEREQ0R772lfWD33p7/fstB9+b/4lzk5suBwDSEH2tsI1yetpcNhV9blP6/y/FkLP7/ylSADEYMAel9FDT9hotpztxTkjnW5w2R0REREREREREREREROPAYI6IiIhoDoXDOQ3VjLr+aWRIJKOu6ZfnaWzt13FUb/e1ptXo/J6cYTAnpIDGYJHaJEgpoBSgh6z3Gi0nvXPYLHFNKxEREREREREREREREY0DgzkiIiKiOfa1r6wf5GX+O/M3bS56StvIpEhHXTKoetPthnNrpeS50+YMTpjrklIMHcsFlNLdaXNBOPflL9+9FnU7IiIiIiIiIiIiIiIiotMYzBERERHNubff/tVmMG3OhXcQdf3TwhAYezAXOL2m9fS0ueD52QZzo4dq42AIATWmc3BNKxEREREREREREREREY2KwRwRERHRE+JrX1k/uP/l174npfquhohxONffdDnPdaMuuZAA0q6CirpuWOE1raenzQWh3CxXskopoMbTqY1ECDH2SXdc00pERERERERERERERETDmt0jeEREREQ0Ua+/9dsLypV/BRLJqGtP8LyoK/rinhu8TSeYW11M/q2j48Z/etQY7eX0wzAElospaA2Uj1yYhsC1lRQ29xs4PG5H3XwiitkE8mkTW/tHUZdOVNq2UMrb2NytRF06lFTSql9ZKRitdvvb7RY+8+abbzyIug0RERERERERERERERE9vThhjoiIiOgJde/tL5TVivzWLKbNjRrLjYNliBzEdL7dDU+bK+VNPLOWRippxGDC3JhHuw1h0qthuaaViIiIiIiIiIiIiIiIBjG7R/CIiIiIaGpef+u3FzxlPCegS1HXjmPC3DiCuVEnzF1dtv/eXrXxqVrDibp07PKZBK4sp/Fwp45KbfqvHwCWCkkYEihX61GXTlQ+k0Q2ZWF7vxp16cikFPWbVxaNVrv9bctMfPnzn7/zh1G3ISIiIiIiIiIiIiIioqcLgzkiIiKip0hf4dwTEsxdW7F/c6dc/3frrdFezjByaQsfu5JHy/FQrraxc9iE601uytpZVopJCKFQrjajLp2oYs6GnTCwezC9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AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAzMn/AQtp2pA98JvuAAAAAElFTkSuQmCC\" /></p>\r\n\r\n</div>\r\n</div>\r\n</div>\r\n<div class=\"cell border-box-sizing text_cell rendered\"><div class=\"prompt input_prompt\">\r\n</div>\r\n<div class=\"inner_cell\">\r\n<div class=\"text_cell_render border-box-sizing rendered_html\">\r\n<h2 id=\"Wind-turbine-aeroelasticity-(Arturo)\">Wind turbine aeroelasticity (Arturo)<a class=\"anchor-link\" href=\"#Wind-turbine-aeroelasticity-(Arturo)\">&#182;</a></h2><p>SHARPy is suitable to simulate wind turbine aeroelasticity.</p>\r\n<p>On the structural side, it accounts for material anisotropy which is needed to characterize composite blades and for geometrically non-linear deformations observed in current blades due to the increasing length and flexibility. Both rigid and flexible simulations can be performed and the structural modes can be computed accounting for rotational effects (Campbell diagrams). The rotor-tower interaction is modelled through a multibody approach based on the theory of Lagrange multipliers. Finally, he tower base can be fixed or subjected to prescribed linear and angular velocities.</p>\r\n<p>On the aerodynamic side, the use of potential flow theory allows the characterization of flow unsteadiness at a reasonable computational cost. Specifically, steady and dynamic simulations can be performed. The steady simulations are carried out in a non-inertial frame of reference linked to the rotor under uniform steady wind with the assumption of prescribed helicoidal wake. On the other hand, dynamic simulations can be enriched with a wide variety of incoming winds such as shear and yaw. Moreover, the wake shape can be freely computed under no assumptions accounting for self-induction and wake expansion or can be prescribed to an helicoidal shape for computational efficiency.</p>\r\n<p>PD: aft-loaded airfoils can be included through the definition of the camber line of the blades.</p>\r\n<p><img src=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAABAUAAAMtCAIAAABow1/2AAAgAElEQVR4Xuzdd3gc53Uw+jN9dmd7X2DReyVBkCApkhJFiSIlUd22ZFmSbUWO4xI7iVO+G9vxZ8dx7MQljnscybbiItlWlyVKLGJvEEGid2CBxfbeppf7B0QIYpHoL/nuTaz5PXz4LHbOvDOzBHfOmfd9ZxBN00Cn0+l0Op1Op9O9K6HvFKDT6XQ6nU6n0+n+YOn1gE6n0+l0Op1O9+6l1wM6nU6n0+l0Ot27F/5OATqdTqfT/d4uOzVt+U3kcosupV64ZHWV8TqdTqf7P4Po84l1Op3u3UD7v5NYaxf+XNTdfNG2Vs40V7MPFwVf6Sx1NU3pdDqd7h3p/QM6nU73P9XVp/hXHwnvFHxpdo6809hT7Z0y+xUrHQir9+FKO7PSmt6ToNPpdP8Zej2g0+l0/yNdfYp/9ZFwSfBls//Vi5C3zfJ/rwFCv9d+wqpNo1eoN36v1nQ6ne5dS68HdDqd7r+dd8yM3zFgxZUiOUHKFtlskcsWueUXkqJMLCS++eSRv7j32qaAmyZxt91kIAmbibaZDDaTwWY2XNqs+rbX769+J+Gqg5etXuVKg5FWlwe/V+M6nU73rqLXAzqdTvffyzum0e8YsCxdYKeXkvORzN7TE5qmDc3GjDRBkzgnSAaK4EWZJDCLkXZZjYyBMhmoaq+twmVtCri8DrOiqhOLif6JRU6QM0W2xAolTgQAI02wvLTcfme9T1FVVYUb1zfV+x1+p6XW71hedPX5/dVHrrb6E3ibT+OyHR0qAHaZWJ1Op3v30ucT63Q63X8j75jri4qqqaqiaaqqmWhy5f1gNBNNF+aimVSufG4qHE7nUQTx2s29LQG72fAPj+9/+Na+aq/dZWX8TouFoVxWxkiTAKCtSsoRgGs+9p3jP/jTlevuq3cmXWDT+XK2yGYKXKbIBmOZx/eeff+NPV676fx0OFPkwsm828ZUuKyt1R6vw1TndzQF3A6LcaWFSwcjXXqwgiKuDAWisDcPcGUVuIpGLuvSs91VrqjT6XR/2PT+AZ1O99/CSDbxTiFvEhUJQ1EMufx13k67Z+V1QRQsJHVpTDhfjhTYUL48ly5mWa4sypECS+GXb1BSVQJFIhmBV8TtTX4LRQZsjIUmLRRhoUnz8t8kAQBZls9mSysjcHhRRhBkbD6WyJXKvNha5R4JxjleYgXRSJMagKyosqIoyhuZKoYhJI6ZDRSGoqqmLsZzCAIMTZZ5yUDi166txzAsr6k1lU4AWAinvTbm0ImJuUh6IZZd315d67HVVrkb/I4P7+mr8zscZoPJ8Max//C5k3/zgR2rD0pblR+vzAbWAG7f0vHqmcldfS3wVhqA02J0WoxwYcUfvHqSpvCepopbr+kATUMQUDVYjGUX49lYrjgfyzx1ZDiZL6EAAbfNazf3tVVv72m0mAm4XFq/gsJIQRGXKwFBEVfeX73KpXXCRQoSbyHolR9X1r20IIELi3Q6ne5dS68HdDrd/9cum/p32j3n0pFWq9OAXyZ9v8hINtFp93CycNng1e2HywVUQQVJy3NSiVXm0qV0mU+zPIIgOIoWBamyuXJsJLom4HhoXbOBxJwM5TTSTiMNAGmWT7N8uiwAAr+Kph+sRsfDqRdfXwQAYN7c3HKKOTwXpXDMbqQ98byVoZYH3BtMhsaA6z03rKnx2AEglMx1N1f+Yt9AjOV9bktPa4AicVFUDDRhNJAAwHIix0vb6v35Eh/Pl3/y4ulwMl/lt2+t9l7bXQ8IvNo/dX4m/PTLrxM4pqhaKlcSJWW5m1dEIOM0VhEoajVMFUpThVKDw9Lkd1Y5zGVe3Lymbu+Zyd19LdqFSgBbtfOwKmOu9FrPz4VvXN+MoW8kyTPFjKgobx7whYv3dpsBx1GR1iYLKQSAxDBRUYABb73VC9Y1ELhldzsALISz/VOhf/7+wcYq93eePl7js61trmiv8q5rDnjsZuRtM3EKIzWApVyxfyGa07QPdr+xVyt1gqQpBILBWysEQZFWdwa8TQfC6kFHl76p0+l07xJ6PaDT6S7GycI7hbxJUmUCfbtvkrliVnvr7ShXX79fjUBxA04tb/1qqoLLBidKXDDOHZ6PhLKldFmwWlATSltIvKfSheHa5kanz2IAgFiBK3FwosjdUeGs/1D1KyPBlwfn1wZcsoUknFYriQNAocjG0/mYBqeWkof2v34CQ8dDCYqiZFlWTC5zNMaZMeJClwIiyipNReNS1OOCgBOiOYYX0WwRoul7WM5pJD1mo50mUzy/pa/JrUF6aP7RJ47esqX9ujX1t2xsxTCUoYiVo1hOYc9YDZ/B8LlYYnwq/vlH9yqKOjofd9uYD9+y4RN3bwGA/a9Pf+epY4/ctvHg4Oyp0cXF/UOjBFYsCx6npdJru7mv+ZXzMx6nmTFSjJ35zoHXgzy3rtprNhBA4nUWIyAIaG8My1lOgueL2TzJjy3GJwuplTS63ea+aMeWJZxFWVZ7A75am1tSRABAANFWpdbLOfoah9/KGJ4KDH7yA9u6W/woIJPz8Yml5E9e7i+ywo71TV01vp7mSq/DDJdIFNnRRCaYyo0i6DoMGUzG1nn9sDr7v6QnQVJlAiUshIFXJAoj4K1JvyArvzk3ebjI7nSY1tS6Wm2u5UV6p4FOp3s30+sBne7d7tLs34BTvCLS7zQk4w3yZXL31VfoJVWtM5mWM7Plq7lvn/Evv3+la/8XoXFK07TFXD5S4KaShX1TS5Kq5XmxsrlycSSxJuC4b3Ntk81RYWE0AF4WDDglq6qmQdrEf/nsUC9FDU7PzZLk6dml6UTqV6emKggBQxEDQRgpssALdV6Hvc5fTxMv/s39z50Ze+nY6PHX5zQNMKT0uU/suaa7rsFjB9CmY5nTs+GfvHAmRRDertp1NKF5rLMLkTNjiyiK/pSXvEacILAiJ9nZco3TypLEzq6qzz1wwwsnx3+2t/+BL/78jm2dt25q66jzNlV7NE2biWXOLyVe6p/65cFht8kQqLPff3NvOF0aiubygvzEkZG+3ubbextpK2VgCIlCPvberYFdbEu+PLYY+/HTp4JLqeBS6vjZmeVPyes0q6pmshhu7aivaDe+PL4wJIhVoDa4rG6zUcM0A4UaSFzVNAOQ13bUv/LKmFUjyrJsIAiawHhFXO4RIDFypbATFNFuNwBApdsqXUjKr8TtMJM4/siODTiGAsCm6ipF1Xbd2JbOlSdnEpNLyR88d0JS1Gu6ajtqvGtb/LUepyDJ/fNRxkg5LMypEvdwtdeCojOpjOJWMfQyTzu4UBVIJsJYklgNNEGREdAAgLxQ7UiK2r8Ub6j0nFmMlTipmrFO5FIAsFIVLFspA9RVHSk6nU73B0yfT6zTvbtcNvu/NOZqcnG4JHKlDFjdA7A8todXRFGRLOSb42wu2hMDTi1HXhRwpRFBLVbXmcXkTCp/JpSgcKzTZ21yWbfUVrw6E345mXugvmKDz3F8NjYSTzlIqt1p7qjzTYZTI+H4UDg5rcK5aMYYTla7LJtbqra11WxuqDo9F/7Xg0db/L5Gn+Oa6ipBVl4PRr8/MIPFEwGXFdG0NXUVLquxr7vm+YMjZwYXPvbH25Z3RgVFKWNL+eKxYnGxqJJDM26LsdbtIAm8vcF78OzcfDR7+01rtjVXvDKx8OiJuRQv+1R5sSTwsoLGUyKgoEiganiKx1AU9Zt4UdI0zeOwJCpc9EyEIvDNHYGzE+EyL7CUfXmj7W6LnRBTudJCIltT4Z53mOszhSqPtajxkVBx+RJ3fDZFGyiTxfjwzh6WF775myMgKAgCHe1Vpq7qj2ys7ap0qyoyH81rGsKJsqgqOIJGcvljx6fuuXmdjTFQGAYAOIagqGYkKJJA7AYDioCNIQHQlFj+9Fee+9Ff3GMy0wxJMOTlSwINYDyX/Nlvzlzf3bB7Y+tlYxRVPbkQGp+Jj8/Ejg7MxjOlu7Z37d7Udl13/XiuEJXkPQEvABycWrRZieUugmXCqlJEUCQSxTUEieTzY9HsKwMTr56fS4PxY9e2ffqmbgxBppI5nKJG8yUfRRby5W6fs9ZhBYDlqsBFG130W6Y+w8rQqAuvdTqd7g+S3j+g0/3hW8m8JVVenZFfKfj3KgZWdwVcaSAQANAYqWna6sYv2gonCwiorMQjF0aUUyiJIJBjy2VWzl2YoZstcrkyf0QuTIfZ9QF3QJS7bIzdZPCRdLXBEMvlTxYKD7rtWIHbF5qsr3YDZf3xKxPPRJOThfzaer/Hbgrj2B/1NLbsXOc2MgCAIgivSrKiPvXauduu77RTNIUhv5ubYkvCMCfdWGvp7Gtqr3Brxjf2SpbVmcX0PbvXMjwpqFokW6pyMrVee5XTOT61eEs1c+2163AUGV6MPn1k+MkXz1Z6re1NPgeFlzghQBhbOuraU7lYeLHTiaUUMs4ExBLgmCRriGyVZACQVURMma3GzTvX2/LlAZQRRWEmJ7e2NuVZ+ZbOir46f8DOkCjK83wmV/7L77/w6T3XPFdidxjoXe01IiGFw6XhUPJ8tJCqF8pFlitzzwxN5sucZqMAQEOQ4XQG/2349JPH/R5rR4OvvsZb2+S0WY0NNuvAQipT5vOKWigLXQG3x2ygCRxDUSOFKzLCy3JJEGPF0lgsk1eFNMcSJPLi8HRnnW/5w9E0MGCEhSbNBsJIkhSOm2iyxIukiK3prPzB8ycnF5MuG+MwG30Os8lAOq2Mw2LMFNh0voyzWqXZ3LzVZfQwP3/yFK8qX/2PA/+g7qcbnPe1Njw7n9iypk5k+RdnF30bmAqXJVfkciWuKHCpsjiWTLKCKEiKpEFKLI7Opyo8XqfV4K/1TZ8YVfjqCFteiuYDfmtO5FhFqjDRDEpPpTI8Kq38BqZ5NsWzAAAI0mJ1IgCRIvfVQ4N3tFXd0FgJAIIqi6psxt+cpqzT6XR/GPT+AZ3uD9ZKGbCceV/NEKCrLwZGszFRVQkUf5saYNlUPt1sdXKysHqcN41RnCimimy6yKWKbKrAxvOlowNTE9PxiYVEV4PP67Dc0Ff/3JExXpTmlrKCKCMIomqaKMkAQBkoWdNQTav12R1GGgA4WZlcSAiiVNdUEZqLt9d5nRYj6TV4PExiKl1X6dnSUU3SxDCFPxjwVLvsQ6k4iUNJUmRNXZ4I+/l/+t0dN3XPLqVnZhJ2j+26bS0BO01oaDiVA4B6n3N9ZeV8Nnd6Onb0zMT2ze1OhvZbGK+FwQltvMAPZot31fo4mV35Sl2M5R99rv+5E5OkIEl2ymqiaz3ms2anJVYQaRRDEYzEMKe5XUOGFxNtddbJJGdA0HSm1FvvLAsCm+X4EpfJlTAcr6zxiyRWa7ekeKnJaTGQxPUNFeur3Nl04S++98JnHrzh6WwhOBSRZdVjNbotZJ3LLIqSi6EMZpRVxHSunM6Wzx6f/9+P7HJYmc+fHsXn4/OJnKfCOHJo3mY2qACAQHdzxfb1TQdEfvK5s9/79F1WF5Mq8rKqmSii2W9rcDoQgNFsEgAQAElGvzwyS52cfe+1XZvX1i33D5REMV1mFUWeTOZYUc6VRAAolDiLybCQyv7rj14lcdxIkxiGSqKczJcFUW6pdlMkrqhamRdNBpJhKDCh4bmM1Ui7beaZUFIELZ0u4ji2prcSAABBpkcTgihbGbrSY22otMc0FSMQG0MbSaLCZPrteMLEGL91Z+81LRUnJiO3fPoHoqhsXFPzhQ/fuL655qdTi3c0VDZaTLwinglGG9yOCosZAARFQhEMR9Hlo5vIpYJ57i+PjKGhYsDPBKxMs8va5rOt87sdDAkA1CVzZi6dtaz3J+h0uv8p9HpAp/uDsnoQzurM/ioT/XcMm8qnRVUBgAazdbaYbzBb3z5+NpYZiEfjseJYKJkt86kCmyyU0yUuXeQ4UQIAFEG6arwUjpUFcTSUXF6r2mV1WenFRJETZafN5DIRAKCiDKqWz83Fl7+0GKOB1LQ/ua5n+5p6AHjp7PQPhufExRho4LExD1/bIwrSj54/2b6mopzgBEG2MLQGiKaqLTXethpPThUDLlt9lUNSAQBODM+roEoE1FuddqvJQ2B1fttrk5FKF8NLSv/wYrLINba5HRbjUjRbb3PaTAYEQSgCA0DihVLCSLWYqWoLparadCx/cjp1ZiY2Fckjcwtsa2V3jXf5uFo8pslECQD2NAYoI3lyMYZEY26L7c5tXTd1Vj97YvzLjx/80F19A1n28ETIYjXeUefesbbuyEhoMpjon1oEFOms9W1vr7+7t/Xo5OL5dOHwfHwhlqnxOcq8KCiq00i1eK1+K9VVbcFQ3GTCrAStyeiBZBYAMufm7tjWYbVZzqa4h5uqorlSCeGhBOFkdiiYfHw8WhyfNZJEvsCmKe3z9123raPaaTfnWOEns9E20NZWegw03ulx4ygaLLOzJa7PYv7Z3tcrbaaHb+l78188nOyfXjp4dvb4SNBtN8qaRtJEZYW5pErHjszv3NK+rrPm7HhofCaSieRKmnrPjd1rGn0Ijks4SipKWeQWEoVfPzPw4O19jQ3e07xYGFw4eXQ8KwiqrKqKarIaTHaD3WMy2QyNXuuuzuY/+8ozGIUXC6zESQG/I54qyAAVdvPXP7Hn608eiknaQiFjwLA2E+PyOsmWysfv2mZlaAQgXWbn0rk1lS5JlRnCCBcy+CwnfPXY8O8SWSpU+sJt69YG7IqKvDg7owj4cCyDIEhPhdNnp7r9DkVVVw58pR6gUEzRNF6VMeSNeQ4tq+YnaKAigF5NqXA1MTqdTvdfQq8HdLo/BAWxvHyTnytl55ws0Dj1NhmGpgGvCBRGope7AaSsqHOlrKgqtbRVVlRWElQZxrOpSspc5DiMJlQV4US5LIiRVOGV8zNqnp8qF90WRlaVsigMzMYNnMKxIiKpK81Xe+01fnugva7Na26tsHltJhaTttZUx3PlYDKTKUkz8Wx/uuRg6EfWNeR56T/6Z7fWOG/sCGgavDg8/Zsz4ZvbvLOx9Otz0Wi2CAhSLPOCJC83TiQ5WVE1TcMw1Os0/8UD19UFnFsba4PJ9Fwoc3Zq6fRUKJ4qRpN5VdP8LittIN5349qReLQYLdssTK5QpkkinilmiqLdahR4PpFhZUXBMcxkpOpaXABw0zVNNzW3GEjibDByIlFciKYVVYsVWARBQFVZDKuymU4+d+pvP37rltaqgNVkIomiwD19auoXh4cnKOzDG5quq/XW+40VBtMSWyQxAgAe+Mx/9P/4zwkM/fXxkW8/+ZrWFPBajGt9dieOBvzmtFAenErNzKcODE5f19VQFfBVeOljCwl+NvLXD9zosjMAMBkvhLLl4WiGlRRRUjEU4QC63LZr67wWGvnK40cc61s+3VVjJrCJaOFcKJ3nRQ9jaPBZAzbDM9n8X9dWnBlf/LtH986HMwGvTZTltt4awuP51JbGeqv9pYmglSYJAge7odvGNFkcJ+YXfvnSuYd2rX/68PCp8/OzkfSujY0Wu7mvrdpAks/HIuWiwKtKJC/SioLMxPzr66N5tlCWTHamzcqECmUDgaMoMpQqIRo4TKSXMaZ4IX9y0tBeRZmNKoaOTYWtPI8rCopAvMwBAM2qJpPBTuF/+8AOT8D82NCcxmkIinxkfUMsWZwPpp8/OnJuIkyTuKyqbp9TFaUP3tq7bzpIGEzJUHp+Yumh3es/esfmtU0Vx2eW2ipdFVazeOH2RPMZdt9MuKPS+UQ4OX4y+PInbwqxRQTAStB+xqQBJEvcYCwznsieWIhvqHJ3eR2dXoeLoQFBcBRZ7luwEEQFY1357zOZSy2/WJ64rF5dT8KlYcv0OkGn0/2X0+sBne5/sOXeAARBNE27UiUwH81MheOJNJsrcZOLiTeG4BdZmiRYQTJSRKbILsSylR6rIMqCrCAACgDHiySJY4AQOEoSuKpoBIGKsrIQyXTU+TSARLZI0wRDkYyR7Fhfz5CkgSQYiojGsiaMGOa0673MnVs7jk4Ezy0uHTsxPzyx1N1e+dANvb1NlTVeh99rWozlhoLxoVRpNF586JrmTr9dwWVNxMKF0sBS4shcYmO110KTayqd3T7HP74+WU9SJ6Yi7+2tu6k58Pjg+L8/c7zJ4wQK662vOgL8JoS8ZV1tg8kxE00fGV/408deQmQVAFQM+eHDt96yvhlBkKPji/uOjx3on46mCxiKKKomyW/eVn99exVmx+fGk8lMyW1ndmxu2d7XhopisdJxl89RUDjgtUyeT+W4KMt+/eevVVZbuhq9DEWGE8XpsQROYpFEobexwmVnXDZzoNYxEyv0jy/efV0XogEAtLptzx0fCsaLVFvVl/d0AsByCadpapXJaiMNL54aOz8V+dxDN2oAc5HUZx97+QO3X7O7o+7wfOTkYuxUMBEpsoqi5ZOigqoAoAliJMXSUpbIio/+3X2drV4A0ABpMNlnimk7xvSHU/uzhQ/XViCg7Z8JPzEwPbmYogmm2su02229ta42n83nphiVnk0XsxjcUe834hgA/PrM8N984/k/f++1r5ydefXUuNFIFQpshcvqanL/9c2bHWbjk8HIVq/jhf4xkpSXQjljg58VJYzABudz7X4LSoLLSOd4cTokKIIka1rObcRnM3QhJ4DEMPSG7jqb2wYAnTZTUFbqjeTwYjqULV/fGmhwmElB+ey/771pe9cTL5w2WhnS718q50gMrTEZHDZGVtSzKNbCC3e2Vp96fWpmPoYwFBVwf2HnOpMZnwgmKByrq3Kl8+VH952/f0vX40PRz17fNjC+8LsTI4myGA6lnTbmT+/e+uqZSZLA79+9TrNSD23ooAg8ywnPjgYTLHtLW/VYrtjAGH/VP/eR6xpbba6Va/+rz5cawOnF+GQyf3Q+Jihqt99xf09jSWFbbS7hwq1OL7I8cXm5tda3dBq8xcq2rlQnrKZdmPR8mZsuXWI5WK8odDrdRfR6QKf7H2n1vXdWD/KJpPJnxkPnp8PPHh3JlTgrQxtp0mYy7OhtdFsZp5WpcFn8TovVZIimC5kCG07mJ5aSTx0auuu67rlMgTGQjJGirNhzonqfxcRyghUhSqxQ4sV0roxI8svHx+7ftc5pZb7w3NGeLj8AnJYIy+lZWZJVVcMJrMpnn56PYxgKAGs3NDUFbA21PpmT/S4rh4lGjeyodDV5rCRKjMYyB2Yj+6YjmbxEGcBvMQqqUm1lANQcpwiykudFSVFtJjpWZDEVAGBJlI2i6DYbBEkOZ8s1bltPhX1Hc2VflbskCVaGSha5HCuMR3KPH50fOzVkwKCj3YMSNMdL5xdiyx9RAKOKRY5EMRxF9mzt2LWhubc5kC/z2TIX40uvnpwp59hgJFPiBRRDEQTZvaWjq8bt9Jh2djT+bnTx2eHZqUxOkBXCgPbS9F3rW1FUS/N8W52vgbHnSlymwKUL5YhQPnc+dHRgVtO0RL5soIg9O7pLsvw8BR/3OrqdznV1PrvJKGtqsJQNMGYTTn3+sb27+lqv7a5HAGRFfeQbTz5y72a7xVgWpIl4ejZfOpjjAUHD4xE7Y2x1mhEjNnhw9JYtTf/67CmPlbmxp2HPupY9PS0owEQ+5TdaTiaymzwOO0WhALwsPjs4+bkf7PvYfdcjOPazgSkUQTxmQ4Pb9MHe1n9fiG2lDesrnR0+x1QqNxwKf+lH+7/2kVsos+EX8UzyzNSL+8+pJX7l189goNweq1TjqrGbIFl44Nb1zT4HQ5EZkc0qrJkgi4KEqWgkJ4wBElnKJpM5s8wNvjZZc8OaP11X/28HB0LxnIkm1zU4i2WFcXk2VFqPLMYW0/I/3trz8unxnz93mtzZ0YBgI1OZ79+/7faehoOTiz995uSB05OBtiqb3yt7DJFI2m2g8tlC8OAIAGAYurY18NAtG27ua4kWymfmI8lk5r6be77y8uAX9/Q2mhxLudyn9g7Mnp14//r2H/z2WLbAyYqCosi6TU0BnPrwrX3/Ojj72Rt6KAM+w3J1FDkcSbb4Ldura7VVqfmlabegSASK/8fg7DeG53c6LQ/2NK7xO8Ur1AMrVIClUr4si0aMqDHbLlp6YYuaAghySQZ/UTa/Ug+s3BDp0piL4q9ErxN0unctvR7Q6f7rXel5XgggvCK+faLw9pEXPYFLA+BlIZPl+idCM0vpgwMzALBjXeOWrlpWkL7+xKH371x7Q09zpfvNoQusKKXLfI4VMixX4iUNgJX48bnU/Gz0G5+4bYHNy6o2WcydTIiP1FX4GKOTMSiqKsnqvqGZJ0+MLqTS0bl05Rpvk9Fc63M63I4RgrhRQwhVnVhInBgJHjo367aZAGAplVcV1eYwUTjWXO8xVtp4vyMTLlQaiCorw9AkQxFba31JXh4RxPBCPCTJZk14T0fj9Y2BGps5mC2eCiVfjmc3MtS5paRULk+GUiiGOTrqvri1ce9I8PXT8x+6ow9FkCfPB71m6tnRxXUVjmS6KCmQKfPpMq/hRp+d/HB3YGNd1ZMnRn/90utGHPviH930wsDUsalQLFtSNc1UkO/c2vG+Xb3PHxo6NbZA4ti2NfW9TYGmKpfFTI2Fs4/PRdaiaDZTOHJ2OpouFVuq7BrqFstffGhnTY252eJAEURQJBtlYmVhMp/GURwAuuye6XyaErETw/O/eW2wr6Pm2jW1Kor86NlTr5yedDvNVpe1q8ZTEkSv23Lv9taZZIqU8OP984/ct4lAUUlVk7nSc0eGOxvrCAZxmYw4iU/khT6Pc6PX+eJ06Fi+2H9+biqU/OT1rYQZfX1g/vb1bXlR3H9i/sDQ7J4NLc3VToHROj0VtU5GA9VBGFNlMVoo3Pdv+zou3AtomY9CTsaLBopMZksAYKHJGofJbiTnltIIRabKPOsyQywLAK4ynw6mtCKLWIxMhYdCkIyqoWyOwtCHb+ytDTg0gE2NfrfF7DTQE/lsOM/+vH+GY1A3zby3vsKoSp/88tNffPimtpbAM4N0foMAACAASURBVFOLvCR32+j3rGv73bnZfYOzY+GYpoGqabTTzkfi08FMym5qcXnW+ZmtzQEF4I41jYDCr4+M/mQ0mEqxvX7jsIr8WU+jpoh/80/PAoJQfruWKjpsTOvOtXc3V/zkqRNf+/htvKb+25HJ2+tcbj+TMyrmElIqKZ/9xb7kdEpGNDNN5vIsRRM8J1Z4bKUy/+2/uueEkfhMQyVQ8jdemvjevVsVTYYLDzdALnfNXgUYTme/PDztSEgf3tw8GssUBWl7g2+t/y3PNLiIBjCRS/kMRjtlHL/yMxBWTs8ruf5lU/bVe3XpGf3SVVQADTT0kiUr66qgIQDIhYB3rBMu+ljeMV6n0/13o9cDOt1/FicLFz2j9+2n2F7983cv6gTQAERFIjFiMZlbSObn09zM9OLwzFIkyfa0VHbU+25Y27C+uWpl9SNDMy+cGP/Sw7sNJLGYLxxeCM1KSrNCdFW6zBRpJAmLgZQUNcexeRB/9MsT125saGvwAsCBSH6r27bO40YAXjk/MxCMPtc/cUN3XV9L1aP9E9MnZ775sVvtVsNj+8/9eDFVt5S2GaiOWm+Nz97aVEkT2HiZm0jmRlOlyMHzjVtaGxsd17uc+07OHDw7Q2uwpaehtyWwvavWYzcPTC0N5ks5UVrkxG6XhQalym5p9zi7A+7Di/FfLC6s1YjxpWSlzdgacLVXu8eXUiEZ6bIwP3vpZF9d5dbNDWcGF4cno2Mz4Ui6fH1v863XdxkorMFlYUX5qxPhXhw9EowuRfOgQXOV++Prm3ED5jYYZUVNF8v7R4Jf+NV+nrQZpLyZJj90TectO9qtQLvspsVcae9E8MxcJi+zCMAdAU9ZklADnDoZPDu80FrtvW5DQ2eXf09XC4ahoixqoAEgGgKSKpMIvsSWCiy//+QUheBb2+v6mqoxDB3LJVFQp+czL54au+vaLgLH9h6eGJuLFVBY1+ivdJhv7G6w0LTXwbw4NZNX+VK0vH1to5M2LXDcfJHbU+PzGAxFSXpqdsFH4zPx9N9++dn669cAQCiWfuyhHSSOPXZmBsOhnMqgsnxuLm6pCcSLvM/CeJ1EBUPnBTGRKKISC5qmAUzOZFAMcThMLQH74aEQL6moqgg2G2A4BqAAMDxvq/W4yzwvqRMJnjFTZV4BQMComcdDsqZBtVumSZzlpFIJNOhs8H9kZ99rSrEPqGmj4dWJUICmvnn9GhOlnUkWsHLp6z88+KPPvGdBFiut9Ca/X9ZkCiW/tX8AV+X17f6ZaObpmXAFRb+0kCiPLeXKLEVgoGpIinOYDIEWH+a2Di5lrLFcirF2O7HTKhgG5nx2syTJgSbn1ETS3dtoF8TB4QUhz6pd1S1VbpoiEBaCp4cZAxnY2VKTENJ8uSyIYKNOn1+ic6LLZ3P0NP5pX1MNY/jkD1/is2UCRVyVpkd2bf7umYVv3dW3vTUAAIIiLp8pVx7kDAAaQFGSf7sQPRCO58czn97RvrM5oAEMxVKnF1O8pHxofbOFunzxP55L1ZqtJIaj8MaEmss+GW3l2v9KebA6816ddmuX/LgSoL7xt7ayrdXvv80oo6usRi6KgVUrXj29hNDp/v+l1wM63e/t0gdpwVXcmecinCzQGHXp3F1ekouClOWEPCfmWb4kybFigcbxM6MLo8FYKJUPpQqaBhiGyozTY6XsJqbJSRkxVObYHd0NTT5nnddR73GMR2LBcO6Rr/364Q9uNZoom8mwOVD166XUB+v9DQ4LceEJr6PZGI7imqANLcb6Bxf+4YM386ryV/1jH28IPHN8+OlT47f2Nm1urtrZ2TBXTmuAfuWpcz1e8+xs9IM3b3j0wJnnC1JDMHnbznWUy/zqVMhCkbe213T57e1eazRfvvdLv/rovZs3tQU67Z4CL/55/8Rf1/nH5+MvnZk8dn4OUGT7+qaaKtcCQ93qsT9dKH8gYMIU/NhU9NxScgLHbJFkwG7685s3dQTcJpIAAEXVXj479amD5zzZlEEiCA12bmpuq3b3tdSYzKRh1YRpTdP2Dc/829CcX5VuWtd+a2f9yWAsXChPJHOJIpcuCwYCu8bv+Gkq3SXAofHYbV0V0WR2MBgJp4uP3L3NazL4SHwpWzo+tnh4eO7jN2/c3lZV67XJJLgQw3wkPRNJnwmFxkZj13XXr2sJ7O5rBXhjIsdENDYwG6YMiGTD/Uaz12DUAEFAq7c4RFUORXI/ffX1D+xcW1PhsOIMgoCiajOx7HQsGU4Xp6OZ2XjW0+S1V/l9+cLQeEjrqu+ymwMktHnM4+nSsVS6l7G8OBg8Nx7WMuXqzppomZ0Np8xWpsvvuKu9CkWRr/7qtVyRFUQZQxEAhMCxSo/1mx+62eswCZq4saIyki1lWP6nx8/1B0MA4LKa8oJ2JlKUXTZjkaNmI4011lAw7+xrXkoJKCY34PjtfS11ftP6Cn+TxzoSTb90fiQUyx8dWByfDKsaENVOzkCSrKCUy65tHc5oljQaKQP13rUND/a18ZJycD7803BMOD7Sd0PXB9c021CqzmWPlvLRnPCNo+eXRucWJlMajYdsJkOFFS2LzfEcOG0uUHq667738mmPxZQqlq9prbFZjE0B18Riaj4vdnpNp4eDvoB94vX5r3xid8Bu/9XJkSenIsZwJhXJEDhGkjiCoaVaf4OTKTPUR3vrrvG6/TZzLJU/PrHwytCkZiWrGqv+pLu1pMg0QT4ajv91S+XEWOx7z5wQBD4ULzosxs8+cENvS6C9zgcaqACSKiIAJEYCQFGSXghFqxlCLsP3Do1++57NLhNJYQSvSDiCDcUyxxZi22p8PRVvpPgr59qJXKrN5uIVicaI5UoSWbVo+cVyYXBRPbC6HWRVgxfVDOqbWb4Gqy7zrz7ZrzT49lXBRVn+2/QDLEeql+t2eGuMhsDyhJq3bPTSRGT1plfoZYNO93+JXg/odFflSvfxvDTmbaqCkiDFimy8xI1FUnGWsxkoTpKnUsWSIA1wsqVYJjCUJjBOVGRFeT2cajbRU/kSAPRWOUFRzy9llICbzpQEUaZIvMljBYAKCxMplFP901/4410SaIvxbDCSmk9mNYDpcE5DEEmWSQKzGOme+krFb/tAR3WNi7Eybz5TKVYuKaBGo+UfPnX0fz1wg4bhX+sfNWZK21tq1zf6SQLxWU3JIp8s8YkC++pk2JQvzEXSFiPNBhwqgpgVikDgPT31XV671UDSGGGksHCxiODw2OhC/0uDX//E7o2VgdkCO5It3lHjBYCRUPJ/HzpfEqRAS0A4OXFqdKGcZ+vrvRvW1wRczgMTU6iCEW0NHwy4E9kiAGgA1zcFZEX9p18cfOHoSFdXbeOmxo91NNb7HBimKQpipAlRFjUNEyQ5ki5miuwzh4biRbb6xrXvr7O12B0ogAGnVE0rS3ymLO8dnc2LykCyMBpOSariN5rSPO9l6EQuM7GQVXJ5RNMqHJZ6t/W6jrq7+trW1LwxxmY0m+ywu5dfn0tEC1H21OhCKJl/7ez0xo6a+27seeHcmM1K7+prbnN7cBxKkhznWRLFAaDT7hFUKVMsfeb7L/z7X92LIggviwCQFnieV8qiKEsaQ9GPDs+mR5ZmEznKQM40uB7xO9Iyn83LJIqmMVzMFgkEIQVt//4Bb12lwWrNlsplQbqp3Xv0/HSgsarZba1x202KsrHOd1177aHR4IvnZ7//0okKp/WrD+3ubLRHktxPj029NBh0+RgTqgLAaLRQlS/VVFpFUC1tgWqPbRtjqQ3YOj2+wXBmKJo6MB22GKgHexur3IaA0Xo6uZRI8CwnqYB8L5noiJb2nhhPh9KqpACO0DRZ014RSuYFQVrfXgsm40iqqAI4TVRpaOGe2za0+uzng4sIimzo8J0ZjuZYtM5q6B8PtbcE9gnCbpeNL7D79g2+f8+GugrHQr4QFeT3NgR2rql/7szEEydHFhI5BEGNJgpYubOt6pjZEH1s/8CP/zxcKm+o8Q8sxj/76sAD9f7dvU0IwE8ODn7zycOqpm2+oXuOF2gMB4DFg0OKptXduPaLO7peOT+1Y01dnd9xJJZQ00Kly7I24Ezl2W/sG6vCpd88fy5fZK0mQzxdbK/19rRUtjR5Kz1Wj4OJg/pssnCPhUZ4bTxXPjSV/tq96zwmI4JoAKBqCAKgqLB/IspL6voaR4XN0GZzyao6U8gs5/rL9QBcIU1f6S64bEkAb02XtTf+vNkDcOnV+osauWij2lsrh4tc1NqqUkRTAZALkxyWXU23A7IqcmXFy277ogO/KF9Zrnz0IkGn+8/T6wGd7oqupga41MqdPRMl7mwiO7qU2j8ZEmWNU6Sy+MbdMLkyn5pd0jSNIPDGKucpwD5a57umva434G73OSYT2WOj83/7vd/dc1PPfDBx8NTEe2/q/dR91yooPBqMfaSm4p+fOPTADT1bWqtkRT2/EPvkt542ddWaCcxME4CqU8nS8ondY6SdKJEt8aApkijPlICQxVJJQLiskcIDbmtztfv2viYLTn+7fype4IcX49VL2cWA3ekwNdssDEUwNMGLcrjIahqgCBJJ5EQcpTGsKMl32YxtHVXHZgsmHwIA1VYziaEA4DBQQIjhPKfx5Im5xHyBrU/mfvm5D3xzaukev5NEkKeG5mgc6650Hi5xvSiCqdqxsYXDh4Y39tanUoW5UBqjya7WQMTv+KMabySey+bKAbdlJlu0UKRKYADQ7nPMCmwtaXCZDIAoJEaoGmigqbLKycqpkQUEoKPBZzJQLqtxWhB2eF0eM4VhWqLI5ViOwkgNJ787tbSZprJl4T/OTPGInDYZ0UReUVVZUgoJjqapj2+tnw8n52KZe7d0bm+v3dxcBQAawHg22WxxvtI/sffs5Guvz9yyuW3DmuoSJ/7b3lMTQzFFVW/a2PyxO7bs6GkUVGl5fBcvizPFLABgCNZqdv/jEwfu3ba2qdo9lEzkyrwZp1q8jpwg/2A65DPgO112TVEPzkVm09l9QyGfonGc6DRS771+bUeVG1G0F85MfOX5I0RaaN9QfV17fVd9AKXUDVWeWqd9MVMMZoq8DBOpfJoVtjdU/PLY1HA4wwlCMFWQZLWKEiq6q3gObfGYtzmsO7sbXzwz8cLhEZrA/p8P7miv8pYVZSpXWBJYMwW1NCOI6ny8KEhySpAOzsYKgrDG72xzWO7uqScxIpgtjIaTAPBkLiuPR18/NkGTRGeT/9iJCUVRAUEwFDFamdYmP0tgC2m2YCRAld0GyoSjRob+k81tL0yG1vtsj//2ZA5VA73N/7J70+de6p9PsDA+V7u9c09r4KHe5oPjQY+NdhjJIieFsxwA5EqczWT4+f6zwXTBYqBVVups8v3ZrZs2NQQAIMcJz48v3tVRy1DERx4//HoodWu777ljw1PDCwgAbiDVzmoE4P1r6+/srs6WuGdPjn9qT5/PxmigpUt8KFdKZ/ilbNFrNZRz7N7Xp+/b0fPjXx6emo8DgCgpAGA0kMzN3Z3hnKaqGE68lhYfaPP2NvgrnWavw+xyMDUeZzxdjKWLM9H0bDx3RuQFWfvKzWt+1z/qN1kq3BZQtaZajwbgUGmbiSZJHAGQVRW78EA0WVFlVQ2WcwDQaHHgKHqFkkADAG1VD8OyK1UFcLnsWXvri8um8hqACir6xkINVm1xuRRZriWusiq4tMBYeVMBwC5XA1wp6dcuqRn08kCn+z+g1wM63WWsXOl/x0v+F0mUuNF4diianEoVF7Mlh9O8xWZeV+15ZXj+ZydmFjNFQVZbPZbP373RTeF+u1nD0H+ZjdzpMm2t9dEYgSAAiDYcjP/xV397fnLpmrX1n7x7y60b2zAMHUrl47J8vd+pacLIdPLIyNyn7tw2m8/86DcnWzcH5njhWpfXyVCbfJWTqfRksrA3x76/0vXN184v5cuLsUxPfYWRJrtBmsGwyWRZUBQAMLHcyMSCKCkUgVMUYSspCUU2YSjr8rYq7Ptu3vCerZ0/PzX+230DszhK4tg9fS0P97U+thi/z+tAeP5bvzqyaDR/+33XMAxmpSkrTdkoEgB4RU5zHA9SlhV+OBycPTQYWNcwXkT4VM5OE5VWQ7vLHsoW7CRBYqjHbsQ15dDQVCFcfs9ta/mc9J0njseTeRVBZEGq8FhrfY5//sRtAa+92mmJ5cuxQjlSKC9lil6bscLC1DqtKIIaCExSpBMjoeePjz19aOjmza0P7ertavAenAynyxyKICiCiopMYmijx+qzmfwWy51PvBaK5ggEoWVMVBUSxTy1ZjEWEQoqa7c2OC1dblurnbmmueqFganXRuZqXbb39LWxZf47zxwbn4vftKmlvsW5u6+N4yUxJ4QyeVmSv/3EsS/90W4jRew/Mw0IsqmjZteGFlGTaIwcySYazNaSJJ1eWDw+ON9U73UwZgNKdfpdDEWeimWeCieGzs0hKHCCvLnGc1tLTZEVfvnCsQ3rG3uqPAcHgxYDNTQfn52KhJP5LMd/6u4tn75nW7XHJqmSBjBfyLTZfcuJEa+IZ0Kpb52b+d1cMsDxdrY4YLNbsmV8amnb+3pPHBhVALlva0d4JjG9kLxtW8f1axu3ddVpCCSLXFEQphO5HMdnGazXYK52mjlETBeFX82H3YpWaaFDcS7GClaa9DJ0jc20rSFQYWWOLca/+OrZZJlnOHH82FihyHmqvZloqrHazWmoqb4qfn68taOKx2B2aPGR9183MLN0ejKUt5ktNFks8e0ug7Xa8Tcb1jAG+jMvnp6MF5TTE6986yPbuxoQBDRNE1RZVCUTbhBUSZGBl+Q8Lxop4uP7jk0cmxH8Dnum0Bhwea0mt830yet7Xxmee3omcntT1VdeGdQQpLm3IjcbO31wREwXNU37Xx/b9f5r1ywV2els6dXJUCjPGvPFv7vv+h1N1YimzGUKX33t3M5OLyKph4/N/t39N2RK/JlQbP/R8XKmfHZyCQB626rW9NTduqbRbqSOTQV/MxbfVeeKhdOJbLHACtkil8qVFVWLJPKAAMtL7lqP20bT9c5sf6hc5HEKc1kMJIFLoooiCCdKkwuJ7esaXGsdy18jwaU8GM131HgNNkohFFHQRFmRVTWZYkfnkzSOuSzGrmpfS43XRxJWu6mocgYSV1SVwglFUwEARTAENE3TZFVRAeDCiR5HUQ0QAGi02JefNBLLl8qyGMmU4rlypsASOAagiRoxNL2YLnGSokiKKquqrKgYikiKhiEgyOpEOJkD0zoPQREYAJA4xkuK1UgxFCEqKgAUOUGQ1UqbySJqdQ3eer8z4LTUum217jdvpnRRJfDWAuONH1e/+TaJvvbWyNUuKlEubUSvH3Q60OsBnW61lQ6BiwqAd5wbcDwYm07l+0MJAGhymC0YqlH4a7nSTTbLqdH5AwPTnCQ3VrjW1lTsPzH+9x++aU2DryRIc+lcECRDXqJIXFVUVhIsND0+Ezk4vAAAu9c3V3htZpIw0ESeEzUbU0XhnW4LAHpiaf7pfUM7ru888Mp4TZN7Y3NdGkUeaKzGL8wKmMgW/nlk7qN1vjwnf/f4yMkX+11dtSxNEDzfUee+sanSStFlXvzH3xxeDKdIHPvKA7tem04cOz+RLxYRBEERVFEVPM2jKCK2BdY3B750Q8/NHbWapvGKuFTmz2fKu/2u+//+lwu0aejz71ne6OqzOwKQ54SpVO5cMP6DVCp1aMzZ7H+4p67F6+Al6bfnF88upZef0cpx3AanscZtf+Z35/Zc2zk8GW5vq/5tOm8fDI7OxdprvetaKh++ZeP16xpXf+AqQDCVjRe4xXQhz4s7mgNff+IgieI3rW+5YUP9oYHZ48NBI031tde0VnsGw0kcQwN2i8dinEnlczy/pEnj09FWuw0AKqzmkUj60OREwWh5sKtqS0VFV7V3NpWfzxSznDAUy3CixFCkBbTnT44OnJoGn/VTu9fc3N0MZiQ8nwnFshVO291buykCv/kvf7z3G3+8/CGcGAkePj/7/LHR27a0X9vTYKtkUBmNSsVwkU8K/OLwwp3X9HgY5thcPJgrn+CE2HSUFlAEAdDeyIecJiqZKZpV1mGm19b6rm2rafDbf3tmymYx/uLpE9PBxK3XtD+wa9113Y0oAuPZWKvdt7zpA/Ox9z55QJ2LsDXedoYJ58p2howfn/zcn+3eUuM/MhGcHoscmAk7rczt65u2t9VnBRFQlCKwSpvZRBE2I+0wvjmcDAAG4tGpSP6cot5ZbacBoQgsluGfG12YTBR6K103t1b/+tx0pZk5I4mHf3lEyLMfvG3jqXPTI1ORmtZazGb56PpaTpDGF2IfvX3z9w+fq7AwfQ0V0QL7rydmchPzKZljaNLC0I3r6wFAVtUyC+HDo0/9/UOb2gIkSgiqtPyp0BipAQiKCABzxTxocOuB85mfHH7sf93b116NoEh/KDIXzb54fjYay1Z77YjNlM2pLMul55ZMNmO6q6Y+kRnYN0KR+Ja1dfffuG5tc6Coqq9OhV6YWpoKp3o6G76ypUNR1S++OPDglpqn9w3uubbjhu6apVD+Sz/bV+ale7av2dldDwAvn5v57cFBM0ms6axqafPtG43t7PANDC0E7ObOeq/baQ4m0vOL2YV8UVHUwyMht8VQV+cABNm3WAZNe8Bj7m6u2twcsHiMw4PhY8Pzp8aXrutreXzvaVFWnPV1NiVnt5oe3tPXWetNlkqSrOAk6jGa41xZ01RFU89PxxLpks1in51czFAkxxZKedHGUCaKaKp0+c1ml8noMhutRkom1S6Pr1jmUyU2li+ni2xJBpZnZ9MpDEVzLF/ltDpstI8xAQJtNe5kQfhF/+zwkbH33LSmxmXzWIwuC+OxGgEgXeRKnJQsslOxzAtTmdmT5//0/uuq3Fa3hXGbjT6byWE2ZopsusimS1y6yPbPRY9H2cjA2B/fvXkqmZ2NZaZjmYVkrsZtq3Xbmv3O9kq3jaGtRtpMk0aKMJCEgSLMFGk2kGYDtfw1srpb4x07Ci67VANNAQR767fTWwPepA9A0r1r6fWA7l1kJJNYed3p8Kxe9I79AJcN2Dcdfn4keHg+srna2+609Va7EYCZWLp/LvzYYmKnifbbTb11laqiohgKANkie3wouGdL+4Zan5kmzRRJUvh8PqNp2uBU+Nhw0GE1OA1M/2joXz5+O4piFgMJAHlOCJfKR6dDBUnQQFNVjUKwAiuU82ypINy7fc15SdpV4fYZqSqbOZQrzmULXx+cE1PFSptxrd++tcY7PZv46D/9xmk2/P1f7mmqdoQjbLTETidzS2W+0mIM54XdTYHvHhyTJAUBJJXORPMCkLibQJKJ6Na2mvu3r/3YDb0AwCsiAFAo+buluAfDphbDX/vxwX/66C0397UAgAbAClKyxGVZfiFd4BWlwAonU/mBEi8cHw9Ue8so+vCWlu5qj0YqR8dCwwtRHEPv3Nb8+OvBYIy1I+jsmamG1qrzQ8H6O9Z/vLri+taqQpEbmguHE4WnDg2/b8eazR01mztrl7fFywKNkbOJ7A8O9M/x6g31HofRsKneW+d0IAgCAAfOzZyZCGV4YXtH3bXddaPxbDBbZEW51WNp9DhcBjrHlQfmY0Oh1GI6X+mzW0mKcjJbPC6/2chQxHLeIClqhuUnkrnnRuZemgoTKCqluUg4LErygzvas+HyX753+6a26uXfh6/+/GBPc+WuvpaVnENW1Ff6J05Mh+bS6fv29H53NGEj0V6S/Ob+8/de17i12o8oaJXV5rOa6qzGcK4sycoLA9MHhmb3D07fual918bm7bUBr8MIAARKAAACMJfI7h2fBwAEkP0Hh6yMYUdvQ1Wto95sP5XKPzERen46jMczsqw+sqXVbyC2r6194eDE1/snXQ5TQVMfrLZta6s1W5nBuVgkkacIfH1bxfqWSh9hshppHEVXJ0PLo9izecFtNb2eyW9wOxvMDAAMpWM4ih2civ3y7NxsIn9NpXPs5MSsx9rB2ACgwWm8r6/KpBKf+f6Ls+G0LEg71jV+6ZHdmzprEYAzs+Hv7j87HcuUOHEuknz0T26/75qu589OvjAweXgkmNAM7XUWmkLTIgIAD6yt7wm4O302H2Na/mcdzSURABtpOBRLWXPiF3689+f/eP/y3iqaivIQzZb6F+L7h+aGF+IggMFE1jqttNeCKuqog2ZfHfF4jEsZVg3lGqo8Y3ZTrZVZSuVkFKEQUsPkkqpWG8zVUmEUN/KKAgDdctnRUIn9v+y9d3wc1bnHfWZmZ3vvVSutpF31ZkuWJcu9ggtgMDWElh64KZc0UkhIuclNcglppECAhGoMGBfcsC0XyVbvZbXaru29T3//EHYEJPf977259/X3D312RzNz5szM2fP8zvM856BIIEsxANAMU6JIUCLmfRlNMmkQsWdECmUgEEbou3esBtm8t1BSiHgtFg1CwVadIphNH45lFpMECqhivkRzeHqcvK2ubJNVR2DE394b8QUTeze3HJv05jCy//QgBIGe1VUbOiwdHWadQBgvFmiGqZEqhCg7USplCHxiIfzikG/y0hiA4S/ds9FiUAoFsJDPiSSyoVTeFcnk83gylYvlivFsPpIuBBKZWqNKKeKzYFgp4luMhr0t5Rw2pJMIdRIRAICgqIVsslaqAAC66gw+cXRUS2e+88DW5eClPF5iIQgAQMnhcVgwAOD352Z1bNi9FP3qnRs4MAsAgNEUB0aWnwIDQQtLselQ5ienJn1XJ7714La5SBxlI7Fs/r1hRwEjrr9djWVqPhstEvSUN1ylkzvDCZL6+2Jr3bay5VaEQDAAgGYYNptVb1CKuVyrXl5rUGkkApPi7zMpf1D6P7HmV/ocmP+39IaPcEMe3OD/D9zQAzf4P0KOwIQoZ6XF/3EqxZLFTBoA0CBXL+9J0B8E9K+cLRSF4TyJIRAiZXOzBA5WiIflSYFGIrFTnuhcNLvk59yXYAAAIABJREFUi8ajRZphGAZAAPDZVIVMVKeTpAoYV8K9q7PaIpRhJAFBoIQxyWzhueMD37p3s1zII2l6eSyfAWBo0fv8e4MclLWrp+7JF0/yadatOxs3tlRf74XyBJEiSiTGeGIZAIBeJFSIuKU88Yc3+7d112Ro2p7JW8WCIsWQNA0AyJPUFArtVQqa1AqZgKNg8wQoq+m+X5R3NT2+uaZvwctjoattZVVKmV7GW0rnr3qjv59w07FULIdzBdx5XxSe9e/f1X5hYO6RW9cKuOj5adfJMcctHbW7WqvqTZpqrdyTzH736ux6Aev7zxy3dLd9psPsiKckfJ5MxGMAaNMr0wUsz2b1BuI5AD5Zro2mcz/+0ylCKrZW6J/Y3vDapXGxkHt7Z32jUZMtYe+MzZ4ZdgCIsek0T790TttTH0XRei56R2NFq0HRpJemcoRWIjg1ON836QYANFfrm6u1HAT1JtMzoZhBqzwdzz5aU8ZFYF8iyzBAJxFiDD3uCm2qKbs46z3aP3clk9vVWnlfo6VaL+GxOAwAAwv+C7NuGIY7rPrVFh0AyHw8nqURLklH0zmMpLQSgYzPKUIEjw2hMKznSyAIXHRF7zw9JI+mM+5wolgADPPu1+69qa16+Un1T3vODNq//cC26wbETDIKAMikiGcmp6MjvrFJv7K5AoHh4IC973dfrNQr5tKxIolZJXIRyh9w+N+fdBIU3Vlt2tZciUAQAGAuFbNJlQAAgiYgAC3nfS5rA3swfm7BN7sQcLkjE45AiaBiXTW3GcQQAnZajO0VqsRS/rt/OnFhdJFhGJ1G9uSX9h2Z9+OA3mvVHWitFXJYXBS9OOc6PDhfIsmeFnNDuaZBpgYALKe9AgDCScwZTm6pMZmkkiJFnQvGN2oVAhaCUUSigP+qd1yGQofPjUAQlFOpuSx4X1M5IKD3Jn3HPr/TV0xfvep648z4qYH5TW1VD+9es7HFwsDwxXnP6QnnCXtMLgLKtsofttasNWmga1ZXIJWfCsUODjqm/a52i8lqUHsyxTSG89moRSnUiHm7qyzn3cFDocj9Vbp0OPnUsycfv39bT105RlKXPb5LE54To4uBRIbNRivNOraAMxjJyWIxCY8jsxhD025TpRYV8iAASiXWPfW6g+fGd62tRWH42SNXpZXm9k3Vh98eShZzAhm/EE6R0SwXAJKPcFQ6IQc1ywgYRpaihUg0LVFJYzLRdgk7kqQXRh2ZaBoVcln1ZdVGpZHHihYJnUyQLpIyDksh57MZaGxw1ufPfOmhHc547hMdVRDF/PTCBJYp1Kgk7zsSJE3e22xYWAxtaDMf6Gx+5fLohTFXIlM4sK1pW1NVsFgs4oQnUYBy2Isj/un+CUOZ1NhSvhAsaIQcLorKBRwWm8GK1EQwDQAoEyFRlMUUi3QBy4Yy3lEfRVGYgquRigCAdDLhozvWGOQihYink4n0MlEkVwxlC2PRCETCL/XaHVcmX/rOXWtqTQAAkiF5LB4EQAIrxEsFmgGhTPG3vdPSeP7hnavbraY8hQEAHKHMgj9iD8YvznqzJTyYyvEVWqdjoUEqlSqF37176/ePDH5xcyNNETqZUCcV6mWiQDIbSuZCqWzffPBPfY79jcbD00vpRIiiGZ1U2GbR1RlVWxsqFSI+gsBiHieYzM4G4r/ucwaHpvTVao1chOEESdFSPlctEbSYtUoR36KWVesUMiEP/HNVsLz9euzQf7/b9a8ruSEPbvB/kht64Ab/u1k262GIYQAkYnHKRB8dLlrJ9bCfqUTEJBSwYdY/dAgUSSxLEBhFpXFsWQkslzIbSnkSOU82pZXJ6+Ryg5DPkNS5aW8gnRtd8LERBIvmnnxk59Z68/VTTSUiKIwQNCVmWL851PfY/h6jQnL9hNOLgaVABgBQYVJUl6t8jsRPXzk7OO2LHvtBjsJSOIbTFACAwWFvPMNG4Gq1rFwmAQAshhM/PXihpkLbO7ZY0sj8DGgT8T6/tqZGJQMA2GPpVLYQz5dyFK6TCdgCMDznf/nlQbGGJzfKbFrFPaubqjQyjCKWUtmlVOFQMjd1oh+DWGVibpzDAQAQ6bxj0CUtk1nUMjaKzC19MAeiViJkGCacynkTmet15LHRKp0iUyhRNAMAoBlGIxGUaWR0pbEBAjIWYlRK9ALeqCP4/Zfeh8VIs0Lxw0d2dtWUAQAGZrxvXpiAWNAdm5q4ck6gkH36L72tjVUXF5Pf3rNKwedc9UaG/NG1ZZo6jby7XBNK5YfmvK+eHumfchvUkt3b6lsqzCO54h315ZViwXI/PRtOnp3zEAjSppdjEPHi5YWpSPo2i+G1Y1fkYsGPPrUTZbFOjy3AgLm5zdpi0cPXvA3ubKpGpqFoukRSC6l4voQzJOxPZlEINsiEOomwTCYecvqfOzHyajRlFvNxiuYgyNLMIoaTd3Y3PrKpNZXKf+PZY8N/+jILgZeVgIot/MPFiXecwWo1b8aXbabA4YtTxWyBIKjnvnFg55oaCjADzsBSPt3n8vaYy1tNuk5rGQB/T9ucT8VsUiV0LU6Gg7BXGisHRxf+441zQMTncjliuZDxB5NJ/BObmvd21EAAmvCGn3ru5MC0l2GY7395X12ZZldz5XQocWzWI+VyNlcZmvWK5fNcnvc+feIKRlKf2r3KkSgGUrl4gRRxWDSJd5j1OpGwSSsHAPT5o++nMvdX6PEi9uMzo7dV6M4NzpM4+cCeDqGaDxiQLGB9i5E8Rm+o0Lxx5mo8UuxuKN+7tvbCuMu5FOufdAdZ1Lb6ils6620G9S8cvvvKZVdnAhI22lVlbDJ9yGUHALji9J9f8DhjSatBVWdQOIMpbxbr90X7/Yk6pfix7oZvvnbZClMMH2AkFc3iJr1QIdGd8YeXD7eqJQYxv0kp5pRwLgf95TuXtGxuGpBfPdDTqNcuxlMkQbFQZKDfXijh5WbNH/odX9+7eoAoHvzbaV6WLFq0AIVlGLarrfrWNVYujVyacf/u5fMVzTohl10oUubmipgvXMTZE2dGSBUPSDUcp08kFVBSdmOFSadVYDRTY5A86w4JYvkqGV/EYTEk+Nq2tp5K/cELE5/+z0MKqzHAQ5ukgpwzJILhA5saN7dWWcrk7lDSkUv+7vxMZMQr5nNrNjS8ecWFk0wTkgeAQXRGFoe9qsnQruAL2IhVKckX6CxRmPIkXjg5QNF0MoeX2KzdNeY33xtmALh5Q31HjQHwoLPz0VUK8WvvDrJUQgmfg8AQRlLDJLzBolEKuDw2zNBQo1j4x4MXnv3SrbZylYLPYcOsZbcMSdND4XAgWTw27jVzkfeuTDy6vzuHk5fs3itTSxyBYm+jdktD+Vqr8eTY4ivj/s+ts/mCiTdOj/zn53eHsqXPv3ThzL/fapALGABwmiBoCoUQAEAsW9z1m1O4y9+wts4/Ovfp27vX1ZlYMDK4uOQKp3pnvTAEbawrrzOptjZWvH159ocnxn9+VzcM0SaFWCnh4zQZSRSWEplYppTMFUZcQXcsY1+KVrP5arPi/k2tHZUGvVy08qVa2XxWWj8fsfKZf7RxGfpjydM3uMH/AW7ogRv8L+MjHoBle71IYlmCjBTzH4kCWsl1MbAc+bOYSVeKJQCAjywCwDBMIJkq5MlEthBL5ydD4Wyu5EOQsVAaAPDExsaZVFbHYlFsisAoiqSLUCkWwTrLDUcvTj91//YKjfzjRS/F0786dHH7zhqtULy8JexJH+2fYbOQ+3asajTrAAAlgnzi+ffKNNKTUwuP3NwhkwpUUkEqjzliSR4q3GjSasT85WOHPeEf/PlEWiEsU0kXg/GYK8rRap65q3tjte6DKlzrqOL5oj0dH3VFT1+ci5RK2UwpS5ayeby6SiHlcwEABZzASWpRLC0uRrfJeOVra++oLssVsd8OTPtDqTs7rWIS0svEcgG30aTJlXBXOOlPZE5PuZaiqROjC9tbqlZZ9HtX23gctNmsdUeSY97woCf8ythimV4uJwi7NwIAyJXwaDqP4aSJzfVgxc5q41N3bkZg+McvnGYY5hv3bi6rlAMArBIFA0C6UPr3P7+XknE/s67WLBeZBBIaUAOe2Fw0ddEZ2mjRKSDmkadea2zRf37L2uN9MzmaAbWmF3d3CrlsCABvIvv+nOcyRXdxOcPuUJHAGzVKGEH67aHZcGaVijcXye1oMu+oN3ZWG2mGgSFoZRTBXDIMAANBcLlIyr1meecxIpzODXjD064QF0DdDeUEDL8WSW5TsMUw7/kBO80wXVrZuQnH1Vlv3pv81TdvW9dWoUAFLw/MnpgO9oWiG3RaQOVHLs4lUzm+RLS7q/aVI1cYhraZ1WkebJCLvnHP+hqTimJogiZtEgWfxYGuPcf5dNwmUWAUvqwEwLWrPTblOtQ3dTma1pp1n2swd1t0E5HItD1ULBD2Of/QrE8u4XevsSZT+Wy+BHDqhW/dxWWjyzKjSGLzkewVT4QBoMusadIrIAAuOZYeeeN8KRJXyIW71lavq9QLYZZSIIgVCGc8O+CLZjAii5GuRGaCy2oqkenhxU6r8dFb1i5HATEA4BQBGPiTr58pF/KPzvpIBA7avTBFV2sVu1uqdjRYCiXimXcur7Iae+rNCpnoV77wg0rpXDicTeEYDCnE/DWV+sYPqwKcpC543CfGFgcW/RIW90BXoyeW/cGrZ2ixFoiARcBdiKUeaKt+JVVsQxkGQPUaeU+F3iTll0kFZTJhPI/Hc8ViAfvTqSGtUvyH1y48eu/GQC4/7gi0Vxq2Nlo21pVDEPTL41fePT0+Pusz6GS3bm0ZmPO2t5ft6ag7NuR5Z3LRly+RFIOGYxRNKwX8hCum0IorWsoF1do6BL48FrL3Tz+0t/OB7atePz95cNLnmrQDkpZUqzfXGf2pXE4uERez62y2IxNBFkS2Vcjtc765cS8NQyRNI3wuV8gVaGRwPJuPpg0qCZfLbmrXT84EsCxJYURVu23w/FQgnCRJksdjAwA1tRhgCMJlepgDi2Roo1EE8lm8QEUzeXuQfrCtgsDxS2POeU9kHi8AAGCZVgcXWCjSXqelaaZI0AgAm22WHY2W354a/kPvOF3E+EK+RqW5Z7XlDXdg3hVpqtSphHyYYZoNiu3VxmNz3uFANJovCXkQhUF6BM/HcZJH7+tqIil6KhBxjnsevHVdfZkSAjSNIy8POHbZdG+fGX7w5naDWvrNt0cWB2be/MF9eqUYAMAAiI2wIADSReze58+N9w5/+sCG444I5nD1/ubzHJSFUyQbYdEMAwCIpYqDzqVLdv/TR/vQSIHSCF76wm13dzfg9PK60ehyo8CpD8KQ3h2yf/3tQU4k8fQXd4/7I+dm3AwDNteXW3XK69pgZTu6/pm51uI+4hn4Zw6EldwQBjf4P8ANPXCDf3XSeNGXy17/+nGLf2Wy71Qi8g8lwXIiLAAgV8TSaSySzIcSmbGloJDP9nvTGE5MOIIQACIBN1sqIDA67QzhJAUBIJPwERTRGqXzzphRLtreVXfzuuq+cfevjw20W/W3rbbtaK05OjobzuT2dNezWLCKJ5CwOQCADI5FinkURool/NCx8cduXycWclkQfGHSebRvhsdGb15TuxwKDwAo4MQboxOXLztvP9CKRfGTl+e/dc+W+VjSHc/OIsgjVUabXAQA6POEj026jtj9plj225/aubZC1+8KfvpHr0Nm4/WkXnCtDyMp+uicPbSU/fO7V2IMGc8WWAi8yqyvNMhxnLJZdLPhxGwkM47CtYH4YwfWtlt0oTwWzhXYBezUFccjuzvEfJ4rkT7v9Ner1esr9Gdm3AAAm1ZukgotKqkzknpzYO7yrOfUqP2WNfWf2d7ORsAzg/PxXEku4d5mNbRY1ARDRVJ5x1Li3Ixz0R+fG/Tfvqu50qSMpovvjTqShaJJIf7anT02mbKhTI1ci1y/MuN94Mevrd/Z+eu7uu3ZOEmTKMwq44sQGDo+7f3TpckMRFQkqU/uWF1XoX396twLxwbqTKpPrG+M0BQA4O2FwEwwaZAIsklcJ+GXqwS5Yml9ta6IEeenXA9uaNvbagHXEgev9/cpPB8q5FAEsYiUJRJbjim63s0vhmK3PfGSWib6y7fuCqRynlQWI0hYwu/SSBV8/lwk9cLgnCOZNaHQ88cGtHLRd+/e/MK4hwuYDVrFyIS7d8h+U0/d3nUNP+21A5Is0cAejPfouPd1N75wfICDsJ58aPv6Rsvys5tNRiCIKRdK+SwOAwBO4QvpRIP8g7mDzs56f39y4OzEos5a1lVteKDNyuNz7PkiA2g5B7SI5b1Trj+cHFaoxBVi3uVh5+xiUCUTPvXIzv3rm5ars7K9jAfifZ4wRTOrjMqvHL1C5Jj2MomTw4xddFYy2NYdDXd01qrYXDGHw0HYsXzp4PDCny878LmFULKwodny+6/eppGJlm0pgiYiqeLZafeXXr+q4xEUTd/cVRWnOGwE6tIqNteay+RiAEA8U3j51PBfjg+kciVPKFFdrpHyOetaKlurDTTDnLB7IQh6bPOqdqvBno4vn1nHET1/eeSPJ0f0WnEBwxzOBA6g3R11b02FLHphYHABq9PzeGyrUrK3Vr/Foq9WCWXsDw0JAwB+9valXB575rXe8k9v+qpeuaeuum/OO7i4BADY3GiJpItPnZ420YWjp8c4bNbN+9cUq9WxC9PuIidXwulSCc9kGLkAsFhoIkuyGAbDOVy2gMsWqdTbKqWTc965qXChgDEMYLFZpSIOAGCjiETEk4u4gs7qMi7c279Q4MmqObRzbqmkUlZKYITP4UoEIQoCAETzRQsEazWymyt1I8lUrIQHYiQAQM/n3GSTbawyv3p29NcHLwEGHNja8s60gwVDZrkwByPxdD6VyVsE/CqzIpjI+miuIJxYW2dqrNRtXlX56pnxP717laHonu0tPKkI5zJhCOoR8zU87uCiJ5rJx6PFbAEHAIqkMgwA0iLgCjghGmMhLL1KCivFMAQ5sziXhZRIig1oOU1WVulGF8ICuaRZJYrhVCxfZChSwEUhBtJL+FIhjJeYPEQCAGB7dP/OxolYUcVGnQvuB3euW1OhhiGYBSM4TWEE8/TpMRSQf3uzr2vn6jaVcGBk8eFPdOgFH/LxQoApF0lPjDsfenUgOzKtEPHEFTIeB93dZt3VXN1tKwMfjgLqWwh84aXzP7y1c3vzByu1exOpcVfEGUqem3EDADbVfaANGJq+NO87ORuccLg4bGT3Kmu5Ulqhlln1CpmAd73t/zNJsPJfK62oG9rgBv9LuaEHbvCvy1QiAgEg5XCkHJ6Axf5nu620b3CSsmfiAAANwndGUtPe8NiMLxBJi4Xsy5OeYDSTL+Erj9VoxVs7bV1Wk1Eh0ynEmXzJn06PzgdnYMifzNIU3YSycvnS1XE3ThD37lntDaUGRpwwBMUSOa1SrFMKJhfCnc3m7e228nJFmU6aRz5ISBDQaINWw0fQn7z6fk+DZXNrVf+U++XTI9OuUFOVrqO2rLuholwndy7FexddyXTh8OnJXV21X7qt59X3R7/57PE7d7cfWFuvUUm+MzTfA8FDueKQP7rWrNGS1NFz43dtbnn8wIblgs6NLT7++6OP3rVhW7MFADDkDPQv+I+P2Ce9EbNS4o6mzAwqbqr5xqaajXVlEAy/Mz73t2OjfYWSWSY00gzcVX23VGjTSqViDgqzCJr89cuX2leZtjRaCZpSoAJ/OhvNZgaX4qP+tFUtWWsx3FpTdskRdEQyvfNLw944AAArFuzBtI6NVxsU21fZ7lxTW6WWAQAomr40731/2rl3lW3RF3vwqdc0cuGtm5o6myuUWgEAIBLKLoaSo65QIJE1ysVdNaaeGnMskbv92y/qmm1//cz2ZrMcpwgUZi1m0wzDXJ139034V5Ubc6ni2PzSjJCjE/EHSOIBiXhm2u2PpXn1ZqgAPruxtkEvt6mkJE1786l5V2Jo0Y8DqsFkkPA4ayr1ZpkIAAABUKRwgiIChRzNwHUy1fUO/nr6eInCs3nsoR+/cbx/9tR/fWZLWzUAgAGggBETiTReKMEASPhchANOzvuOTPqd0QyMICmHt0QQrHippVL3ldvX7+6qnUpEfZ70a33T7wzM3LKm/pGtq7uqdM58CgAQ92bfH1rY0WHtqDcvTwE5nYwQNFkuEiMAiNnC5RSCQCr3qT8ePWtP4FzKJhd/psN27/ompZi/XJHZaOoNfyg86aySSQEbubOj7uyst0RRaIF47fRIlUFx59bmdY2V0IfbCwOAL5W74Ar9onfCE8/KWdwiRbUb5a1KQe+VmclY8o6ehj2bq40iWZVEmi8Rjx7su3JuIp/NfvWujS1Ww/aWanswPuYJBuLZfrs/kMzIhXyjUtxTW1ajVzSb9a54+rI/mMwR/e5wd7l2XYW2Ra8EAJwcnP/crw8ruJxP7e5Y11N59pLz8MXpy6MOuVxE4kSFVV9Xrvr0tnaCYQ4Pzp6ZWDSqpWVGVb8zDQNQXsZ3xYq4L+QOJXRavXN4DgHgbz/+5CmaCCwE+Cir06ToMGk6TCoOwr5unE0sxbYdPFM8Pb3z8b1dLFTD4XRV6FEEPjpsf7N/6uKct4RKEY8PQIAiKKVBXlujxUs0AMDli1M4ke6sQ+MZq0Zij6YAAOUSAQNBCRb9yQr9xVm725Uwl8sGx5e4KEIxCB3JAAAe3rtGJuM/89demM1qrNNGShBFEHgglSxheJHgclFcwdGp5QoxL5stpkk6wuXX6yQWtcC+lAtm8DxEsGlglXIXJp1iPhcAwAKQkIFioVQ6W2TkPJSLlMuEpkqjO8N4+sYxPsLlsysqNJttBoAx9vnAmSvzHDaK4aRIK8uWGVaVSQAMIaCEoAIlHyUIeotFlSoWAoEkB6ffPTPVUmtsaizvnXCFYSYZSaIQnMoXMZwAAMAwzEJgXKEDbFon5ufyJamErxLyy0UcLoR4WCCMl+Rq8SaAVsqEeYCLIO5vX78AGSQCtTBfIj0JTMNHizjVYVKtr1Y2G2Uj3sSl2XiLRnTs/YlUmYpF0aJg/MkHtuUBxOEAEYfVotKkiniiWIrmSv2e0Mt9Tv/wbCGV/cuP7papeXI2b9wdcfgSAja7y2ra0Vy1bMekitjdfzw92Tvie+u70DWnAQdBl98BjCICyeyIM3hsdPH0uCMyH6bVAinBfGJP5yc3NjsjKXckOeENe2NpIZctF/LWVBuUImFjmdaqk4F/7ij4yHbmg7//3TrNN7jBvyA39MAN/hVZDgpqkKuLJIbRtD+X/WeBQEUS4yBsGIKmfZFhd+zyzOL5aSeXjXJQBCNImmJm/NHWKs2cN55fMa8FgiAURS1/1slEEAwVMUIu5kv5aChZKGAEh40msgWNUpJIZvUIhyUViJVSiMblXBavzbSO5gMA8vk8jhNHL84uBZMMzfA5KJvDMpRLo8FsbaV2/9qG+kb95RHXC6cHv7N/y/PHBgiKWt9q8QfSGEFennJDAJRr5dkClithhSLujaREPI5eKcEJctwRAADwuGwAgETEU0iF3kCcZhgEhmvK1RwELtPIFGKB1aRqsxrimcK+bz5PawTLdVlrNVZrZaPuMIaTm2rKx+f89+/ufO7q4uM7W9ZX6d5f8H/3vQEYI7KL4Z98ce/qMhWDsuLZfDST88SyGgmPLpDPnxp64pEtCMPK5Ev+XLZMKtJKBWyGxeeAXnf4iCc+5wg1SWWry1W7G80AgL/2z7805UgPLz5857qOMs3R4XkRj7NntQ2BoHcG50iS2tZYKeCgr58ZdQXin7ute0tbtT0bX85bvb52GwPAjC8yuxR1R1OvX54ccgbbZfLN6+s21pfvaK46MbZwfngBRZBP71uTZPC/vHv13KWFBW/0zZ89nKLB198cYPh0vIjbOOxSLGvic564e+PGlkoAQCxb+NPZoWipcMeqWqtOjVN0CM/NB3N8BvTYtDAEBQpZmoGXlxxeOdq3/CGN56cWwpcn3C1VhpdPjXzhtnUdtaaVFgBGUjPxyJAnspQoXvFELwUTlbHsbVtaxjMFRzwzOzhNUvSRr9+rkvKf7x+xSGQtJt2OliqKZvIEFsdLMjZbwuFDAMTT+V8fusQAsLPD1lFXNpuOVYmlc6k4DZgKkThcyOFF5OsH+3uDsT2N5s+2WV8/MTQ447mlu76zvnzb6uqBBf+4P5oplLpryzotBnCtFpFMYdQVXFWuHZ73nxt1cFjI1o7q9lrjsh5gAIgVSv/ROzHsj1l0itHJJYkC0ZRpKwh8fsx9YFtTo03ndCUuzXm2NlWmyNJPnzs3jbFW8yhayuazUTaC5jGiUiNfbdGrxYJao7LOqGYYBqMJDsL++7JVAFA048gmpoMpRzjLMGB7tZGg6D96Qgp/0ucN39bT8OSZSQjABE13lKtW6/ixLH5q2slBWWqJrMemgyDQH0oG0gUOF1mlV223GVhsWsbnXJnw/a134rwzw/Yuvf7jT9ZU6n/p8O3XiNQ8/rA/3ucON+ik26vKAACHAtHZTPbsr48TMLTl3h7Yn2DRtFoloWl6KZgKJnMAAD9O+9w+Lp9rUsgEPLZj1MVhI0abwWRW1erkCJdDYUQE0PkCthRIjgBYhGEak1zji2m0gtubazssxktuz6GLU6MTfk+xCACQCrj5Eq5QiFUigX3YCbNY5bWG1uYKRiO7XyVXiniHxuZOnJueWwigHFRnUYnMGgoGPpyKoyxlGovli7xSyYhCs94IAECkUpLRNETSt2xuYmj6yNlJBoLr26zhPG5VcVLpvGfK98CtHQPzHnWZLJjM5YO5QCCj6aoDABAUHTo3iZMUykZqa9XOxUR9hdbQbS3DqdeODEi43Mfv39TcYHCFklddwYNvDYnMcgBAm1kr4rB/dfgyRpIbGyzdjRWOQMIx4x+NxThcNkUzYqkQkUtxGvDZSI1Osa5ctcosM4gF/lR+Ohj7r2eiMWAzAAAgAElEQVROyrtrllioBMNsGr4MhjMCDhorOfPFfIlUCbgQC2aKGD3j37q/g+QjV6d8QqkgkqHEbBSGoWIJYyjAQ1lZjEjEit4chsw5yUrNMwd6mk0qLheCAMMD6PkZ74DdN+UJ71llXddk/vmpuS69MBnL/PjB7QgMsRGUBgABH+XstOcrh4cdA5MVFdrFWLRaK9/Tbmsr15drJDTNNJapE7miJ5r2xtOzS8n3F2JYNm5RSzsqDTa9ssWs/W8SElZCfyz66AY3+Ffmhh64wb8Q13MDVs7ncz0DGHw4WGjaF1kIxi7Nu0+MOFkwjKKsoSjejFAP7etQSQQKIS9OF1u0apNMRjBkOFlI5ErJXCGRL7qimTenwrubDNF4QsjjCLlshMV6nyC389iufI7AgFHAKVOIlVzuD09M1ovhVy+Pc1EWgCAOitiMqtVVhu6ash2NlpMTC398b8SgEGk1khqjJhhOXR5xvN83S1H0/XvWpPKloWlPPJU36CRqvQgAYFZLeSi7yaBVCvk5hJQIuat0epVMyGGzvNH0exOL0XS+u1yXzhXHvdHfvHlRXKUPs5Bf9jSUqyQamUgtF2plIgBAPFMYsvuDiUwsXSAIcty+dKx/djnWhiPk8DholUH50K72ZKZw7NLMF2/rlokF//7euF7NE3JRezxjLGa0fMlPHtyplgqu91XLw+HhRPEXhy/XVRtG8NJ2hazZpLaqZQAABoDpRAQAEMeIdz2R1QLB0SmPgs+7f5WthJP3nxpRz/meuH/rxtoyEY/NAPDnM8OHrkzz2OjO1mpAM76lhITHWd9iaas2zGfjAIBlMXD9+a7sUBmGKVI4BMCiLzkbjB8bnn/x4vju5urdrdauurLGci0DAE3T74zN/Pxgr04mXlVv+/MVh1rFe2pn+2sjC0mM6JaLj1+c4sDQfTtXv3ll+tHdnZ02gzuXqZOpppKRkVipXsSToIg3mRUJ0AaVmsdigY+JgRKFp7LFPx6+WsCIx+7slgl4ZwYWQ/HMI3s6V3bwM8moL1Z6+uKkgI3uqtBQNLA7Q6lk7t5d7f5U7j8vT0864+xkZI3NdEt3zc6ayjqDCgAwl44DALQ8YaiQrRCJAQAsGIUg6MqU+8TVuRJFru+p3GmzITCMkdS79sWzk/4Mgxukgjvqbe1GFXQt5+GN8+Pnx50zseTDW1d1VBtseuX1C1vegQEAI6jpQCyeybeWaS7OeP52eljE59zWVbunq/GqO/jKtKco5gMA/NOBz/bUZEH+j/1OuyOYH/M8/bXbdjZXwRC8EI4d7J++MO0RyYT5UpHC6e/dvt6mVcolPBEfFbB4MPRBAk6JwhkAeMiHXHnXO5hlYXDG5R7zp07bA2MlypDCAQCU21thlHe1Va6vrehzLJ2ddrpyjJTPXVetvjTpAADwzPrH19gadIoCKFWK5SwYXh73dWRSAACnK/Wp370dyeQ3NFUqmy3f67ZpOHwUZk0txa4s+t4PxCJJolEBLXozVBGfnfTu3dG6tb3KopVI2IJMEetzBk7P+RIMFC1gqSJmlgl50bhFLePB8POvX2azWTK56MsHejAEymSLvYMLvlASYqOwpYxbrdDiRKGA7axWV8tkdlfIH4jLDCI+n62SizIJzBNLjWZwk5CT8EcXx7xRLtMmFlF8ns1mILg8k0GSLmI6kkZQeMmfmE9nxzTSpkhKjLIyifygTKQjabIIwskEyx8lU0UIhpTNFaxyOe5PsVBUI+ZHY4XCnOfArtVvnxuTSPnbeqoczpBWLaEJcmomlEHh/evreFxOg1lVzpPk89hSJHll3j8w67llZyuF0X89MeR2RUiSQhD4e1/aC0NgeCk8Ou3V8NHP37lurdVcxpekitiu35ycPTdIKrkqMb/baqrWygkUvjjqxC2aEkwrC8y8w5+Kp5UyEaVSAgCVCKJcIQIA8ALBnzywZ2Nt2fkp1+f+6+2eR7ZhBC5HaDaHVaSoZjZfw+Z+5gevIi0VVq2UjyIEQ8f4aKWEXc9iwzDiZ8gEBZUVmSFnrE3Be+fEyJ27Vh1/fwyrK1OJ+fEixoJhGqeEHJZRwt9mUiYK2C8P92XzRQGH/aO7Nltr5Tr+B1a7Var8iF1+x5/OTI7ZSwxUCEaf+fdbb26vOjHuGHaGTo4u3tJuW1Nl2tFctdx8TowvPvj8uece3Li10fz+pGvMHb664Mcp6nrQ0fWEhH/mPbjODWFwg39xbuiBG/zP83EZsMzKwAaSon3x9JGJ+StTvnF3aMYfXWs1EQxRCORbrcaH93WiKOs/T048ube9tVydxvNsmEXSkCeXknN4hSJVKBGRbCGPEwCAqaXEe5OBlx7arBHzAABL2cIPRxfwQExUIdkqkFlUkjajJl3ERpzBp49dPbYQb4TJf7trfYVO/nI884hW7o4kJlyh09OObAa3hxM8lPXs527hstHvPHvU4QrTNAMAuGN7W2WFdp6LBofshXDKG05VmmTZEiFTCg7sazUYpDt0lRACcVgsAKBRf5SPIHqJUCXiAQDGA/Ejk66X+mfISEao05750s1qEQ+s6HL67b7zM+4jQ/N72qxVckmdWVNfoR1dWDo0MHVk1CHlc7+xp7t/wv3upekZd1ivFKcLmEEn/8L+niKO//mtvqf+bde+5loYubZ02bX7XMSJL//2iNaktJap8xgu5XPKFRKtRGCUiZbLJWj6dedSvUyEQjgC0Vfd8dP20IlZPzLpffyRnSUKaCTCNeUqHMffvjoz7Yvsaq6a9kUQGLaoZdtaqqwGxWI2aZUoPv6Il/N6l78yAPBXKITfvdt/anjh87d2DbuDR4bm96y2VWnkdUaVRip8Z8zhDMcH59xZPu+R1pqHN7UAACYC8d+eH1uMZc46A4K5AAyBV568b9MqiyeboQGj5AqenfVs1Ek1PLaBJx73RTgsxCyXqMX862Igg+c5CFookL8+dGnbamtrjY67rEjdgf967eJzX79z2fidSUZnY9k/9dmLGLXVrFxnMTbpFWwExghy949euXV9Q5EgL896Z73hgk5lFHC904tdNtPvHrq5hJI2iYIBAL42lyjNMCRNAADYCBun8KF5/4/fPi+g0Ns3tf5i2B7LF9us8juazTvMlQwgGAhI2UIIgBxG/LF39P3Bhe8d2NhebVh5V6+LgesmSDCVG/ZF5uLp49lsS7o0P7c0vhBsv7lVYtZulPDNct4fLs12m6Xbqqq+cOLKwJtX8wa5jMAwgtRIBJ/oadi9qjaHEU8f60sVSg/vbGus0tTJVAAwHBhdTsshKBJFWOxrboGP8BFriaTpE4vuFwccGEHVSYVd1eqZhcDVca8PL8x4E5VVVfvbLQmC8CRznnQO9kbZYk6FSvLlnR18KataIgfXIkDI5Zmg0nFfOP3EM8cfuKP7xVND5VrJLd3NyVwhGc95Q1FPLOnBuF2tegqAgRNjnznQtaneohTxr3qjvXPhgUDIk87xaWbrqgqGzwdc9GaFxMRhT3nDX3ruWNGfuX1ry1u9E2qJUKcSP/Xwzpl4CgBAwcgbQ97dnZZ30pk6FhJNpMYOD5nKNRu6rBa1zJ/LR3MYi8uwEUQG0AqFFAAg5qHeaKZBLbn9l29yc1SVSaGxmb3BkD+UEPE4lUbVzeua3grHbaXSodf7CJJuW1dPoGgGwzBPdAFFIAhwfXGGYWxVOpmIl8YwTwmp4tEIBE+NOK3VWnmjkUcQCxN+LknfcV9HtVJWKVJORGLTwYg/nBjsXQxG0hTNAIYplRnrTHIWDZBwiKEZlI+OB+JwCqNoWiQV7F5be3HU8Z3PbV9fbQ4V83Pu+G+veF2Dk5l49tF71isl/LdG7KOeEARB1o46PFsoSSS6QoGOpVGpACcodyTJs2gZHEoVihxA//nOTXe0VJ0aWXjsmcOvPHlfksDzJTxdwnGSYslYME7+/o9n9+3v+mxX44wn8tgvD5X31AMASiRdKRephNwkRYw5kt0VcjFKXrrouHNzS/+8r6ejrtWofHfCsZQr+dhwASZuEUgd6eKJOd+4N8PDsUKB5BApLpu1o7369s6a3XVWTyF9/deOoul4jPjCG/2JBbe8uhxyuvqffcyTSzHX3tBZR2TQGTg+vLB3dc3WBsv3T09rcpmXv3kXBAFsOWUZAoFEdsQZdIZT52fcNMNsrquw6hSrKw16uejjRv/KgYZlbgiDG/xrckMP3OB/jAJBhIpZimGqP2wjLlMkMS7ChiDo5NjCod6p49OLS4kMAIAVK9IMs7un4cCOlm1N1WqJ4Poh788uTSzFHlxXLWRznfHkYjh1NpUnYHKfUmWWiWR8rkzATeZLMAx/4rmzf/7kBrWINxJOnvaE8vHM9lpju0m7kI6jMJJJFd64OEVTQCYWv3h5/j/uXr++1nA2nOjRyhOlLACgf8D5g+dO37a5xbMUH5nzCQzSAiqMhkMcwDy6bfWezrpTY46fz/k2wPADO1qNUmG9WTe7FDg/5XnpyNDMQmhVo+nm7fXVtWo8Rx6NZr9srdSLhWVS8XJyJwCgy6whCfKTT70Cm00r9cCFafeFWQ/F0GurTTta/r5eL0Uz783Ze8c9nfXGfQ01JEMyAEQTxbPji32pXCxf2qmSTjpDb74/isLw7g31W1qq1tSZDQpJicJyJQInQSybf/vq/JI78sxj+zCSlvI5iXwpVShlSrgnkTHLxTqJMEFSz857f9ZRy0HgaKHw7MBMiS7IGNbBYY9cKrq7tRorEWfmQ5x8elOtmaaY8cXAPdvaKMCcnlg8Mbqwe7VtY135uhrzR54yh8WBV8TrX7dlE5nCbw5dAgB8cf86uZi/vPH4iP39GfeFafdiOFHbZjOJBUYA/vZ2v61evbGxamd7XZfF8FzvWO+87561DX8YWZh2hZb6ZruaK77xua0cDmCj/FddiZ+216AwDACAAAhnCv5kFgBgkAk1YgFG4WwYHZjzXBp3P3xzB5eHLIsBCAAKgC1f+u1fv323Ti7t9fjHl1K/mfFX5ulgpqAR85sMcrmAW6EU4bnCt35zmFFyN9ZXaBQSk0oiEfDOFrDRCScAQFUofve29dsaLcs2wVw6ZpUowbXZRXNEQYDySYo+Pr9w33++LcgQKQy/6ZNbvtNZxxMjJE3Vy9QUw/hTqRFf+FSfXcXl/PuBDZIPryX8D82OYCZ/weE7lch2cjieTPaiLz4FALdU3CPitbeZfnewP5nDEBgWFIATKxQ8iTt3dwzlio5YWhVIHvzhJ7rrKpZHWC/Ne94dmd/QYC4zyqBrfh4GAAYAnMIBANwVzgFmxWV8RBI4MkkAmOMT7l53dHTEfsdWm4ji//KlcwwL0duM1Rbt13oaOst15x1Lv331/M41Nl+heG7arZcJfnbXVqWQD0Egmiumipg7kckWMZyiz88urFKoL046s5k8IeKuqtHXGpRd5WUSHuesPfD8FXulnDMcihVghIezPcVsmVRYJeWv1sgHp93/tr9bIxVemPdyWcgkAidx4uLzZxYWAjTNKCsVZo18lUF94tLs04/t277aGskUgrni785Na2WISih49fRoKJFNyoXVKmkohxnkQrNMsL+5wiTjGAViAiEBADKET5AkC4Zmo9H+mcAbfdOznrAWoBoRZ1VbVUezZcYduiBilewR1B2YngoBDptQyVv5AJULUQRRVBnrpIKnB+xEvihwRVAeW2LQba/V9OVKMAzRDNPGh0qZ4sh0UFuuhFP5pEm1vquCZhgYgGSiYE8VgdtHkowvwkQKxJe7qu/b3Pze9OJ3Xj6NwDACQxYWB0VgCIB5d9Skli7FMtU1agSjvaE0h822WlWJdDEazqTShUKJYLNZJEkhMExp+SiCyHJ0vFCCGcBmIVKZQKKR4DjhDaQkNFO1rXk2nMRIKo8R4vngZ+5e/5V93TAAEi6bpOmxZCQdyk+4grdsaqiRKgfnfYevzOzsaazVyvMEPhFIDC7FTwaT0ViaIIi6Ita8qgynSrvarPVSrUEkSJYwGfeDoaJsCRdx2X8dWvjFqcmlkdlCJgf31DVoJBstmv4rsxqJ4EBnw75VNgBAPF+aC6d/enI8sxTU1eoaFMLjpye+d8+Wza2V7lyqRqoE1xbgAwBMusI/ef2ibyH2g8/veGBDMwxB1/MQVtpM7lji1LjLFUlNekM0w2yqK282a3c0f2gx9Y+8/CvbxQ1u8K/DDT1wg/8Zln0C5SKxO5v5eG4AwzDvjduvzPnfHZw3KcQWleI9Z8w7OL2uqeKz+9bWNGqtYgUFyJWrBzAMWIgmvvLGlX3NRqmAm8qXgjz2Bq1knUGLQB/67XVE0t99d2hzncGTTgOx4NYqQ4tailE4j8WJZvPPnxvJkXhnrbGUwp85PJDkiQ8/uvPlBU+PTqIQclz22II/en50YWohcueW5jV15o5aE4Chs3OBZ85N39NifOvK1BW7v0InL1OKH97atrvFdiHiErPYAjZXgLJnHKEnnj72nS/uQLnIL184T7OBTMy/aUdjNomNhUtaAffWxoqNVR+M9S4nCv/wszdJBNwLs57jowu7Wqo2N1R0VBlXVieQzH7q2XfzOPblmzprrZrlAfhkCXtrwhVK5VoVkmS2MDDtbbEZTmH4txrKL825QsFM34Q7mS221hjFSrHNogUAHDk29LV7NvU0VXxwP1dYcv5kNpIpDHvDOBspl/N5KBzMlFqMMjxD/fXM8C0bGvMQ+Zd+x7FxZ1kW27+ldWLSpRYL/uPTN6kkAgaAmVTUJlK8P+nst/sABO1ssXZW65dLKVIEAAxgmOsR7SvFwPZ269qG8pWj3YF07viE88VQIjDtLqaL+XQGwwgTwpWY1LBIpJQCJp7Y0FD9iQ0tBqmYpOlLLu8j339dXqbKh1M//fRN7bVlv5p2f77BYhBwr78TDADhdN6TyJAUVamU/urgBZKkH793g1osKpAYj8WBAKABmHEGv/KHo7s31ue47CJOW5QSRyJzV31luVwIQVAoU2BB4OK8/+DgYgknv3lT68aGCgBAMl8KZQsj3tBL4fhumeStCXfKG7TpFJ/ZtnpjXfmyi6BGqmQAwCgchdEhb/ilC2NTpSxOsDtgxOEOj8z777mpfWO7ZZ2tfCYemwxFiwk8Hkrd0l1Xb1Z/ZAGNf2hq4BR1eNp1BcMfsBggkj4y7VKiLCEfVUlEeL74wtGrkWR2S6e1s9o0FU7Fl5I/ev5UmU7e3WJ5aN/aVyadj3TUdll0yycvUUQqX3rm2BWcom5qtWr0wnqZemWJpWuLJHz8MpavbT4VAwBYRLJLC4GfvnV+2B0qqymDIEgqYyczDAAg0Du1ZXX1F2/parPqSIY8N+waXQzt7mn4rTtUCoRT3ujGlmq5iMemwc4GCwdFjl+de3/EcW5oYf/OJrNWvqm+IoQXSgXq2LAdYsCmVgtJMz88Mg0hMJyKs0wKBmasSkmXUStFWVdHFh/fv86kkgAA3ro41TfvC+ULJA2knbZEOHn6z6ef/MLNQhn3N4evjC8GkGixvc5074F1r/Q5t1iVEMMcvzxbWa3368U5T5JhGJqmkwWip9ksUooftZrieEHCZlWJZL5CiqaZM0OOqwveI1cX+Xlq19oaRMq3u0OcIp7lIgFHjBBy9M1l82NOooRLeZKsJ7itw/b4fZtWVRpeG5nrdQbtyWKjXPTnK7M8AiljUYVousmqv2lHk1bP1XDEnVr9wJzvc784aPfFH3toa56HLiTyvlSOBkDLZ+UxyhnIV4nx+YUoFcq315Xx5OwrV12ZbInFQnCCZMHwy9+7t63GACDQO+b6wQundWXifLQYiuXyGK6Qi9g8FqDpVA6XN9V8u6tqQ2MFwoLPTrt+9u7laLYQt0f2b281m9XexbAnELd7IwTF1LSacxatAAHZ+cAsTqEwtKlS//Da+nUVOsCAi2OOV/vG7lvfuruj9rX+iVfPjnZay7Y0V6mlQjGXo1WIhxx+fyybK2Jj3sgrCwGSh/K57IoqTbmUJWWjHULhVotZI/xgMChdxH99ZoJH4H9869KTD2+vqzXWqCTJAg4B5ucXJkfHHAWMMNrKdlg03gQGYdgfXjoj3rlKzyUZnFRJhfUahUUhalEptUKBnMcJZgrBbOGyPfDEkVF4ziE2ywxK8bYmS3utobZMtSwbrptNkUzh58eGVpfJe2rNGE0MO4P2QPzosH3PKltbhe66MGD+UXP4h7kNN7jB/xQ39MAN/r9mZa7w9dyA65Lg5Jhj0hs+dHVSIxJ2mPUUw/QOOdzRTFwkeeORLdvaKpd3m0mGrRIVC4bzGBHJFhL5oi+ZccVyrw96/uOuLogFjcXSZi7KRyClkGsQizVCXiRXjOVL3lTWlci+dGXGEcGamvV7TeqtVQaLgr8YzY35o2fGHJvqzB2V+sml2MunhrVGxRV3+uHNtvPJQuzy9Mioa09P/YGNDd11FrVM+JF63f77k+vLFa+/NzAi4h65eyMDUb1Tnr453+pqXbvF2FFphCHo7KTz3KD9ps7amUjqtWMD6RLxmQPdA5OuZD5rM2nMRo1RId3fVs1hsQQctHfC+cvXemeymYe2tK3sWpZZni4zmMqv/fHB6JidoqhP39q1uqXsnrXNp2Y9v74y+431TXwYfvX0sJCNPnZ7j1IiOOwJV4q4AMI0KC9XwA8OLniW4mSuNDjjJSm6rdpw15aWnWtqwIfFwMoPA77wofEFCIYeaK9FGeg3hy7e0l2/vqlyMZL43sFTCIDDJPAl8kaT8ome5q4q43wmBkFQlUjOQRAAgDuavjjv/8PZSSWO/dudPRsbKtJ4Qcr5u4dn+cfo6rTn5MD8F/evU4j514tmACgS5M/Pj70966dJEi5AKAtOlzCrSupN5FyBWCEVVkiED2xo2rvOJhFySYYy8Pi+fJ7EqE/94FBVbZl31m+zaPOV2hd3d4q57OslQgAsZyzE06XXL0xq9fJttjKpkJcjC1KOkAGAYRgYgv52ZfS54wN5lfqxtTUCNqQVidpMWg4LWb4/qULp2VODOMVsb7F2VGpXhs3QANjTcZpGnaFksVCS8bk/PDee8gZr9IrPbW/XaAUVIjEDQCJPfPtQ/4WlUK1RVctDZiZ81QblztXVOzpqDvZOHBm2z1TKH5bIBoYWuCLWD+7eoRQLwEcmC2IYAEEfidiJ5gqORCYPwDvB2CPlhmFfpFEjk4hggMET/qjdF+m2GOJ48W/vDOAEtWlV1e8OXUZg+Pdf3b9ltRUCIFbIvzbqgiHo7tYqHhvmXhsi7bf7jo/aMyXsk7taURRpvJYQsvwEsY/5CsC1kdcKkWzQFX5v2vfCpVlWIHTX/u6xbEHFQ8aXEu0mVbNKfktDxeCMd3DGs7PTtqGpMp4p7PvZa4/sWXM5V1qvEeEp7G8XxhmS3NdqG5pwz7vC+9bVr20wb2+3AQASxWIMzxMMw6FZGRJ/d2jhvYH5ycUgrlTQGALPLLz680/d0lp11u35U59DBcD/w957RrdxnWujewaD3jtAACRAgAR7FatESVSjqlUsy72XuDvJcRI7thMn8XG67dixbCdykXtcJatSnaLYeydBkEQheu9lgJn7AyZN2/lOzv3WWefcdY+exR8gOdhlZs+73+fdb7m5vgjDsK7hueOXJ3Y2FlVp5WqFQMxlHB3Rh4LxP79/Yf19W8iJRAWZbPEE2gf158cX5ESqQiMb7Jpi0slZ60sZJIRCJNxXpebTqGoRr9fsPD6zOGz1NNbnQwDYFl2w3dM+ulCSI9xcmjOiN89Nu2AYhgGhqVK9e21JIo7ueeItFpviIOBZG0tl7mS3zl1FBT+9cd3OmgI6mQgA+GrS+OtjQxI+YcYXtwXCHBLCYFAeKsvOYbM7jQt0lFihzNrVUHS8c+KZt07rTW4ymXjDNXUtVRoGhdg7Z3tv1roQjNASmIABswMhwKXuK8jbvFpLQwn9M5Y/9y5cm8P97NzgwJs/QrFUCk9N2LwfDM/70Fivwf9ouSrkTzzxRS/d7SYTCQ0NuYJ8+f31hRwmRUyi+6OJwUWn3u594u1TAIBcEXdHUW59vkLEYcAQFIolxqxuiyuQjiSTNGTa4oIh2EajhtC0xxYiz5uVShGfTx4aMMcTKIVM1OYIuVIGAACE0r5QjIQQKCQETWHRZAKCIKc3moJBbm0ejcf2RGIP1ebjRBQAsEohEVNY7/fNqumklz9uC0Wix35/l5zPXbnwcAC+7Js6fHmkd84a5LLZOJSYs8lWF8QmF/fsrYH5VF8EQ0PhcCwGcBCK4PFk2h9PTi34iDpjMp745aO7bmkqvTAzN25wJdDUxsrcwmzh1y3j0CPvdE61D81/8hQZISSW0hnhAJwa1o0YHMcGZpaJwfcpAbgac3wV/1/CVT5wFf9NwHF8wucCKyqILesxsST6fs/ol5cnTw3NbilTby5RkQhwW//cnMVz/Yby9RXqBIY/fWrkiwdbvvacwcG4x2sJRwOuMINClLLpDApRyKD3mZzPnRjOq1XKaeTVXKbNH5x2+I2+MJOMuCMJRygWTqa8sbiASjH6wtFkik+niJnUQDQhYpJJOEAxPIThcgZ1MRwbn7eVi7kRMmJz+IVsXhqNKqTcHA4znER/srYEghExgyph0gAA9lDUEY6NjCy8PrxI9HtzVhce3FbBJBEXo1EAQC6D06EzDurt58bm02lMymXyaJSxcZMbTeVVaoIYxiQhLJX4h9miFIZ91TfpDUULSuRIErk0Pk8jQJsKVNtrtEwq+ft7CQ5At8588Pxwuyn40q7KPY1FRzomvuyevByIJNA0PGt95s4tdkdgc21+ZYEUAEBFyLOByAWrs5RDigdTTAqZSyWzKGQRiwYAsLoD/dPmkTnbxUH95pr8ynzZ1trvEoNQPPnJ0OxcOHBtmWp83j1msM9MLt6xp4ZCIT139JJn0hONpzbVqNe3FFPJxGFjgEwgbNZkIxA0ZfVPWLyOYEzMots4Y6cAACAASURBVEoYZCbATnWMT/r9NzaVPbytTsiiL88oGI7//sMLHAb17p113yEDgVjyYPfkR1aP2BmrVgpXqyUlUq6Cz7hiXPR5E8d6JsZM9qEFe5FCeF1jcZ02q1YtH3BYqRRSPo0fTaSeeOPkjoZCOoX06w8vrtLI7tpUUb908hBPJSkIyR+KfXh+6NaW6lgyZQtFYmhSyKDTKQiHSiHChNYFw8H2Gb07wA1GczdqX6mp4tKoy2UK+ucsV6aMTYXKVeqs7zypmYAH4LiW83WkryMYHVp0hmIJPI29PqjHXB4Fj3nPhmoYhx76RwcajXgW3VFvKEvIemx/08N7VgMAnKFo65DeGgifvDDKZdE2lOdes7o4TELBkrtOxtUqk6YJrLBcJlLpKbsnkkohJNLHFqfP6F6tFN9UmssgE6f9bgZGeu1c/90bqsatrhwW0+EJvX+qb2BmUSMXrK9S37+3PtNgJn/XsNXVbXI15ogz2ULxpY46Z0wnhmc3l2qEUioAoJgrWqncLIUW4JZoCACQy+R2zS4eujDsxZAbavO8oegfzg9oZaLqMrmUzymlkma9/u55J5dKvr08d3DR1d+lQ2BIW5L9wqGzezdXGtm0ZzdoI/b42SH9uxeGzdEwQiD8cvfan1y3dqlDgAPgicXcyWiXyXZx2jVu8886AtJkctHmjFG4FNPixts2/HpjFROC7vztB9uaKwyRBItMLOayNpfnKgTfpL1vW7D97C9HolL2Y2tLs6T8tVlCNJ0mI8iQ1/L5penX3rkcT6ZKd9X+eVt1Xa6EgVB80Zg/lvDHElQiQiYQzk2aXuyYmHZ5c8iIWMwlwzDN6nP6wquqFWtLctfn5wq4tEwMdueoccdPDkEwVJAjAABfcIX3t1TXVSjpZCSWTFGISLfV32N08phkroBtHdaLChULzqAhEBFTiOvzRLUiUSIY6x1ZGJ42J1Oozujeu7b0o3NDAMdxALIErKpS1ZrVRUdHjLRU6JI3to5MLCrLmrK4VSJunkJYKcp6o31mu0b06qdtD+5f7SMh3SZXhZQn51DDCXTc5HcE4oF4yj8++9t7t8WS6EtHOiKRuFDKEPOYGg2PSWQ3q+RnB2d/+spXAACEQMgpycIBbhq3sehkuZCzt6lELRfkK4QKMUfEYSw4fa93T2qFrJ+3jTu9ERBIAhQjmix4Ks1hUe/dWbezsYhBI/vwOJ1KIkYhizswYbSPz9lv27pqTbnyVM/MpZG5kVlbIBRllSm5VLKMyyyWcP7eqW8pFUlI0N8+6FQKeUeeu4OI/HOz+7mJ+QfePGl2+hJoKjsv2wpBuVyGSinOF1PzKMyxZCqYiG9gIK4g+nGXgctAFgZ0i2zG2grVaoWgUipUiagn+xcujc7x6JQHN1XjOPRc61ijjKGbsT50T6OCwcll8b4vpU8N6z7unPywfeSHOxuvrS2oz1P803MzcJUVXMX/NK7ygav4r4c/EvNH4v5I3B+N+yPxYDThC8cGp811pcpCmUAl4uYIuTMWu90V1pndp3unv5yeBwBQIql4OEEmIeX5kv1rK8rU0pbaguU2b/z7uef31qoErClPwGh3m9OYmERUcRgSJsUZSiz4gikM17sCE04vAYalTFqxlC+mk0QMai6fNWr3Di66FkPRZCoNxaByFb9IxCkQc6Ydfk8gcqxrzOaO7t9cvVotAwCMGuw3PPl2NJYkEgm7m8tb1pcVSgV5QhYBho3+0II34IuhOlfAHY3FkmkAQDSBznqD5ovjdCGHlyPPq5X/sqaQQEAzKSyX82mGYgm93Xvo8sjp3umQJ0rO4ntg8q93Velg8FixqpjHBABYvMHW4dmeSaMij60ze8pUCjaJruAxCmX8bA575W4RiCZePtWdxrCNZXknJhb3VuXWKUWdC/ZnWvueWFsaCcXf+rIjXyF88tZN/KWqxrFUwhiKvjxhqiIRdhaoJKxvrPLLyOiyrb3TgzrLsSsTu9YUF+aIMxk2F/xhoz9cpRAWinkAgKlF15Nvnqoqzukx2CbmrVFrsFgpfvaOLWvL1f5EhIIg8yHfhC1wYdIVCiTW5Eua87IKJFy9M+DwBP9xfmhLjXp7bdGZkblunbmlQtOQr8AB8Idiz717rihH1Fylyc3iZwzzmVw63kj8g8FZrZhbKuNn0akrxzzitH98Yaw2V16QJSiUCYaM1mmLt29+MY3ja8tythRojLFACVfUNjJ3rk939zWN+/5+7rmWst7ReRzHH93fRGcQqQSSzRN8+tCph/aursqXAwAwHHeEQ2NWny8U40qIH/eade6gNE/iDcbH3r4w88ETHDoFAgDH8S696au+aRGLefeGKjaNspIMpHBcH/Qux09DSxs/BIAzFB2zup2BSDKF/rFt3DhtiCWSjHA6EUebylQP7lv9fvdQIV/YVKEet3sAAGwAj8/br20qRWCotXcmjeMP7m2U8ljjPmcJV5RpNr6CYAMAEmms3+LMYTO8CfQdow3xRW8rV5eIv7abusPRl0/33N5UjpIxmzEwbHQgBLhAwt9UnXeye7Jr3AAA9PD+Rg6TmkihFIREIhADseRHw3oAwI2VGg6FtMzTTg7N/+pEnxrBfn/vtiCczKazmKRv4hlMIX84kZQyaFOLntfPDPXozGSu6AfNRX4UZZCJrCT6Vfvkn+/bBuiU8zbXoDc44vHcwxfOByNVCm6VUKQ3u3556HT3uBGGIQzDVXI+k0KCIMjsDMjzJQBAMAK9eMe2dYVfF6Wa8Dl1jsB7ffN9BtfqHIEvFh8b0osh0l8e2Y3h0M0vfxJHU/vu3Hrkz0fisaS2SPHUvRvYJGqvyZ1IYzUKUZGQO2F3OYKRd+yeSOvIz+/ZwKAxyAhSp5KYo0Ecx+1+9MK0qc3omu6fbMrJun9H3caKvGVvRHcoevBs/7TDG7IFaspzPz8/NEaAGCa3UML9/a2b9jYWzQQ9RRzhpN8FAMhn8funzR+dH7Km4w82rwrGU79rm0b1c2ORSKFM8OC2+n/M2RUsWj6PTkYAACAQjp/tmjmwrtyIpSEM6/T74/6EwRspFHK2CFiJaGJi0nyyY1Ih4ljdAQiCUmkMgsAPb9t8dM5pcAb/8UBLS5nixNDM21/1cUqy6TRkemrBZg+XF6pTMH52wqxR8G+vVdfLZLPOwII7RCRAxXL2rsLcowO6M1dGnr5ly4TdY4vEAAC6cfNHZwbra5Ump292yplMpulUkjcYfWDf6nt31Y+ZHW+cG0igqd1lmmubSvNkXxPI5fU/bfN0GqwdE+ZBV3ARYB6XH7a5Htxcu2h09Y8b+Wz6lrr8NaWq/CLxlen5+Sn33jUlZblSAAAEARRL4TigIZRgPDnl8OldgS9NzhODuiSOlYRixaVSqZhZmydbn6OW0mngn+F4v+6Z148NY2RiwgeTibdvrO7zhBlkJE/I1vKZfBISSoNLk7b6LPbL755rXqvZurbI5IyPYWlKODnjDsrpFIBhJVzGhRF915QRgmBODDv4472rS3L8WAIAkAlczmN9q0r9VwOzd7598ZUbGqatLhiGtpRpGvMVKy/Avy0fruIq/kdwlQ9cxf9reEPRWbt3wuob0Zt90Vgwmsjo/ZmfQDReniOhkYkYwIPRhNHl12YJMQwbMdozf3cHo4YJSxrDAAA4DnCAAwQGMAQAAkAKSqbv3V2/vlzdUKxUSnkGm9dg985YvB9N2Ro1QhGXPIKmGsRsPoEYTqQ84agrEkNgQplUIGFSJUyalEljkL/lpeCNxj8f0B2N+oQh7PG1pUVCfsYyhwPQNW440T3p8kV+ccdmPpeK4/hnXeOzepfR7tm3ruyaxlIIgr4jnZf1ewBAIJY0+kM2d/DlTy+bObSxeRvIlpQg0G01+ZUSfpmUL6RTYukkDSHH0fSE1e2PJ2kkxOAI3PXBlYTLRiJAXA6zpFb78uZVbAqpV28dNtqwNPaDluosDnvEbD/aOxFOJPNkwjSVgAMgRmir1NIcDtsXib/XPlKvkddqZACAbqPzk/75hXCwLkfUUiwRwLQPWwc2VedVa78JM8ABsASCOmcgEIlvLFKySETwz7C8LWUmeLp3um14/kyvLo3je65tXMVn76z7mqE9+vIRlULQPWfZVKE52T9brsl6cHO1kE0HAGTUHTmNecxoL2QwD14ZkzCpq/NEW1RKHMd//U7r9rrChhJlGscJEOQJRV851YMDUKuWXejXbanO758yAxzfUJ3XUJwDAAgn0DOThvlA9J66Qg71W04+OADuUPRPx6/cuLGsQiSJL/moTPpcOAAue+T00CwMQ/X5CpWKO66znb0y01SZf1Lv+vS+zTiOt4/PXxyY29FQlEqnP7s0anL4H79hXW1hNg5APJWgIORJt++gbtZvCiECNo1OqQVATqU+/cbJt356XbFK4glFXzndQ4CgXTVarYy3MmsqDgCG45ZIQECh0lZESC+PHAIAw4HJ7++Zsx/umxl2BgVMqmfG8HBz9YF15Wopb9zndJpDfznePTJiTKXSD+xpvH93wzK16xo3nOnVbarNrylQGMI+HMLVTD4Cw8sx2ZFU6vOFxWuys3AMf2ZUT3CHn2mu4NO+qUH20JvHt1Sr+QRya88MmYTsW1eulvIGjXa1mMOlk4kwsXvCcLpneuMqTW2xAgeAtqKe8RWTszZHBKWwQaP7ss42ZvEau0Z+dscmbzK+v7k4jackLJaMzloI+QEAKgZ3YMH68cDEyKyNzeczaFQvllolE+wuzi6RckkQseUnf3/j8WtJVGTQ4iZBsEDErhHw3JH4od5pMgKvkvIdrsDDf/ocZ1E9C877r2va2aylYqThefukP95tdFPDPkMM1GUzb91cTqaS3+uda593KKmMdMAh53M3FCnbx/R/umNHxvb/4hftF4bmLxnMtXlynMVQlimVXNpqEVtGph4bWfAn0xP2IFXKpDOpO5nEn79w4uTv7hIJWLNeT/esrVGT/evOiWQ4sUmd1ZDND6PRCZ1dN+sgE5ENlZqttQVfdU7+8WRnb+csm0XNLZDlirmFKjGDRv234flSIvy3a5vqssWTflcRR5jG8L4Z0yddozwydV25ek2JCgfgj+eG2ATomZeP5ggZOA5sBFwmYN+2uWJzuUrF4IYSSTIMr3v04E37G3ls+mW7h4OBhXi83R8LROMYBK0nkfeos5qLcj4+P3zoaKcnECEyKGIh277ozS1W2fWL9iO/mI/41Qzuj18/VluSU1civzxraTXboEAYotHMkzaORmJzJdNprDk/q1EjqVEIwliMAUjdBvtbH7atbdTet6l6YMbSN2WeMTj7p804hO/dURYJJyVsJhpPHzrWw6fTrt9YUaaR5iuEn7SPnZs2FHDY91xTX5//rZId7aML750dBAT4+q3V3YuOM+Ho8IQRC8YjRiuDRX9oTbmCyzTYvDqTE6PgfA79ho1VG/PVCOEbP7iVbjk4ABdmLY+f7LF6AutX5SFEAkATSQRDMawFYVblydRCrnCF7WPfL9/3QLDf6vrJTete+ujCRCRKp1Nev3dXjojbYXKcmrUkEimXO7a3QPTJiV6ZmPOnH+3EMJxJJeUwuAgMTdh9zmDo4rzj7Jx1CE1zE0nP8Ew+nfXav+1brc1eCPsy0QVzIS+axgAABRyB1R/e+drZEgg9/LPrAIA6dMazo/MAgLo82baK/OXbslJ6gKus4Cr+J3CVD1zFv8aE2TlpdhpdgQsTC/5wLJpAR4x2wBYRLXYUTUIoltGauQyqRi4o1mRtbtCuLVImUukvR6b/fsX4wzWaCqUkT8IDAFi8oQ8vj0xb3D1zFpsvlGmfSkBi6RSgC0DEDQAoYbAAwKcWnPjSUSqVQiquzsN5FH0sJadTslj0chHrmrLcbA5TwflWaZjvwOQNtU4sHJuzytn0e9fk04hINoNBRciOQPjmFz/NodFv3VylEHHMTn//tPmTiyP7m8u21hWU5WaBJTeMlUikUTaZsVJSe4LRVz5r31JfkELgv53pvn1rzTpVdq/JMesJjtu9yVSyLltaoxC1TZuqVdI5T8Aeip/TWQzmYMjhJHLZVBYh5g+F3QEAQ7Ua2b7awlvWlmcimwEAaQw7Ozt3oWf2XMdMcb60qkBOEdB03rAAJ95SV5TDZwMAggn0l2cHzzp8r22sqFOIJn3O820z97TUsRnf2GjjaGrM6sYwPIfPkrDo2FI2m+/jO3wAB8DsCR5uG3mnT8dPpCPe4HVrS7fUan3h2HVPH2Yreb+9fuO00fnEjc2RZGoxEArFkyw2UioUUxEEA+D3I7M/LM4mE0g9ZvsXE/MECCpgkvqHLS89sAuG4YztP9PvmaHZ9y4OB+OJ+7fUaLMEi05/29AcRCRsbiwye4PzgehDa0qY5G84TGZZdOvMrSP6+zavCoCoismlEEg4AFN+VwFHCC1NpFtnPj8+/2n3RK1aps7iftU1HqaKXrm+sU4tIBNIo3PWQ8d6yEQkN4vvDUXnrZ5DT1yfMbRP+dxPnu0dDuD3ahVwJO6NRHeU5+GR+EMvfPGj65pKtbIzI3NbytUNS3a+aCoBAUBFyBmH4MVIiEMiOWIRBYOJA0CCidCKe5txr+8xuD+fMu7UZi/YPbZIWEKmnhudSyTRX9+4YT7ow6M4nMDePdX3yN7VzdV539EPMgsvjeN37qqNElMolipg8wEAVITsT8TOLrqaJEJPInyocy4axzZqpAcqVMu37tL4wqZ/P1zHF1yzpqi5XFNbmJ1pPI6mRi0uHMflPIaAQfUF4we/6MABvrW2oKowi7JECcbcgYNDs4xkuk4m2FaYfXpi5jd/PfP+n28RQNSXTnVtLFWtyVeOuZxKDgcB8E8/POcORasLlEfGrQQ61KAQ3VatVvGpDCIVByCeTP3mkzYai1KXK6vJlYmYtOVpWn3hK9OmPpsnjeE8Eul3h05TKCS+Sq6U8SQs+mqNpEjCrc8VtU+Z3uuf6bJ7AiZHljZ7v1bhDvsM1tCDzdUpNPX+6YFrVhchTGRg0tw9YGiuUldrs1tq8o/0T794updIJV6/ptiYwmtY9OIsfi6Pc3p68eGjV7L5jFs1ihcOn/vjv+3KVfCDIazTYJ93+crE3C9GLAQyIi2SFDKohRQSkwx9eX5sdGLxrHGR5I5jABRqJI/dtRkAsKMod9BktwYjb7TP5ZVIGanUvmJltpC8oPP0jRsRhLBjTRGZTwIAFLEFfSbXQx93kClYJJ5Yq+BtLci5PKwnM6knh+eyeezX7t3FZ9KGZhdvfe7jm1qqZGrR8JTF5Q6G0yjEoOQqsz7p1mcJaEkARvTWnQJOXXHOm22DcRS1JymEeROGYSQi4bWn99/ZXIPj4Pz43C8PtcLFiuvKciRchIrDhy+OLPqCEJcdkIiK0TSdhKAYZqYgq8mEZlmW1eK90D0zaXAoRJz64mwJj5kj5iklXIWY02+zgljaG4x1T5sWnN4NhepQNHG6Z+by0ByPTbcEgs/cstmTSAi4jEe21nHpFM9SxrDNNfkNJcrlZx1KoC9eHHhreJ5DpSyM6sqVWWs1iuZChZTPGrJaLWafNRCqKVBcX1/+T1nBoN76edfkpvrCMwu2tjlrpUxQlyMq4jEHHdYxnc1qDfmsvuqinD3rynyh+K6/nqItWo/9/u7VZdm/eLP1TO8MACBMQ56+dl2VSppE06eG598emvWl0zIBy4lAz9cWCKSs9VKpLRYEABRwBMl0GoYgBIan3YFzE/OPHO5gqNiaSFQj5d64rmR3WSEBhsBSYMCM333g1TZ73/irP953zeoCsJQq9+uc0QMz16wqWFeYkxEjK1nTVVZwFf/9uMoHruKfo3VEP2FyduvMi56gnM+qz1dIOYzSbHEsgR7tnDh0ot9BYxIddjqHfsfGqg2lSrmIw6JTAAAkIgGHIGckNuZyIhDyZtvsDzeW1iqEAIArc5bP2kcJAKvR5tTnZkWTqS8HdAcvzBAt1htuWN9r8B5YpWgpzEEJaNuA8VefXaIx6clEEk2gAAB2FEPTWBJNIVQySKJX3nioOvdbR67fQTiBHhuZCyeShnB8X6mqWv51BNi41xlLJh946SufKfDItWsq1VmtvTMsGqVKK8uEJP7HWCYJFIQ8Pm/94vLYvdc08NiU+aDPb4t91TX573duJcBwCsPSGD7r9c66wq1T5mGbGyEQ1iglpRJeiYT3Wd/s0WGzLh7iGJ1BQiqeQHEML5ILK1TSH2ypbipQrjyWQFPpKwbj0Uvj4/OO2UUPuUb9x8ZyGIIEHLqEzTint6iE7ON23y0KER5P9OnNt6yvYlG/8RuxByNmX0jBZWYchP6DbWYlGchcNuX0v9gxNhxNEBbDFQr+5mwelUh44R9tl4fnlGoxFE2tLlP95ZHdTBoZByCZSo+47KFAikkhyXksezI55Q/tV8kwPDUX9CXT2Kw9+Lfzo7evLqxUi4t4omUPX08w+sqXHS31BQACrcN6AMDdG6rkAvbJ/tmT+kWAgx358u3VeWAphBoHwBeOvXSiC4ahh1pqmXQimUCa8rkyrRVyhctkZuWHU8OzX/VPf9A+puTTmtdX/2F7YzyJHj7Vv7pEiabSp3umPz4/bHT4zr38QEWe5JLJ0mtyXhx2zVNhZSRNADiGQwouecIaInm87mT4jubKh7fW8Zm079y6GBqnEikzAY+WzYcAmAt6My7FiaWsOzgAyXQyGEu/0j4KQ9AttQUdDl85n4mm4zMmnz+afLFPR/P5H99bzwWkzuGFn1y/nsf+Rkv+DjrHDacHZurrlM25uXMRXwlX5EtE26zu1WI+DvB/jC40KiQ4BrrnXZdmLDw6+dYaNRGGXz/T47F679vfsLlUs5xCEQAAARBPo55wbNEXgQGkFrC5DGr3uOF070waw+7bWx/E8AF/OJnGytgMWyigs4VK5Szci14ZmfvNXVthGLb7Q3893QMA2FCq9oPkG2d763KUx6ZcXigpFzAeXa3dlaeiEBEcw0w+vyMUS6LpgDvcNjL/3F1bqSRkeSS9k6ajV8ZZbPqGugIMAi+dHx00eQjxRNLhue+aus2rc0v4YiIBng54jJ7wJ4MGvdmLg5TT7iEjhN/fuFEpZ/kC0V+90rp7TfH4gp3Hpm2p1/KlDA2TR0IIAACDJzBgdkwuutyB8IYi1aYiFZ1MjKeTCyHfj94b2Fwkbbe52j/t/MUPtqVZVAhADdmiShnPH0seG5njsVhX9LZ6Oe9Th3vm8siMxQ1skTSOp9mkLWXqA9tWNeZIC5cKw50cN13S2/KF1IvRxNycbcxkXw8Rf7x/7YZKdeaZJlLpS2bzWx3zXjRRSiadbBt76q7mGq0sHk/96E9femLozVuqFpy+vbWFX/VMv/Nph0LESWHYrjUlW2vzW2q0Z8YNr14ZX5sj/MPb51AEomqy/Om0gITcVJF3dsL6VEs5AU0feOptNJWW8Fnv/+rWHofvvbE5is724mO7RRI6l0QR0Rjnh3U/O3icpGKl0wRmtiDFYOA4jsBwyBem8skbYoQCEW9tmSprKb5iWRHPpMZKpFEERo4N6C6Ozg7NmqYnHbyivJ1K3tCUSSJgrS5XxdHUxRnT3c2Vxzsmb2qu2FD1TcodsEIWRZKpV9uHW+cdF4MxZM6NhD27aouuqy/OlTMTfrR/xnx0YPK25iptlrBOm730JZBIo8++debA+oqKPFmmtU6jY9TmjadSpRKuksNAkdRlvXlG55pyxNp1NmTRGg7Fvnj+jp0NRRkxe2FI//7ZwQ6LHcNx27SDSSMDAEgsKlMrn/ME1tdroyQCDuN3igXr8uRJOJXpt4AjsPrCqp+9m4cnX3/yAAHDjujNXT3TdRpZbXF2WZZYK+JGkuiU3X/w8tSJzy62vfNQMp2iIMTvFGBpHdF3zy5iOL65VLWmQLmSEgAAMgcg/yfzzVVcxX8trvKBq/gWWof1n/fO/L1nYW+BaJVckCPiZvFZAABfJOZEU+3dM0cvjmxqKCouU7WaPcl0AgCQx2PRlmy3GMBDcZRCJGA4lkil0wAS8BjDc3YmnKmoigfSGLyUAYWF4RgEwhA06wwUSTg2hKSCMTWPeaAq75lJvWvMwqWSIRjar5ZuL83NYtHbRuZ/9MEZRzBSTISeu6GiZcf27yRbXIbJG2ydMJwzOgtF7EdWl/Lp3xjLTw7qbnrxU9wbu39/g98bk/PZ2xsKM64135HF/xSZawKR+Adn+1MYdm1zWQROohieKWfztw861tXnadUiCEAApD/TO0oItGAa6zE5b63OIxMI3WbHxVnLrCc4uxCISxk1MGV/iXhHubpYIZowO0eMtkmzC4Hhlsq8ZcOzKxB56C9fXBlZqFyvJjGZliGTiMN8cEcdk0YZdflELFqZXBTH8CdO9VSQiTdtLS3mizP3N55Kjy06cQDKZEIK8Wtl6z84HMBW8IEYmjo9tnBkzkKGCTdV5zcrxd0Ljv45ezaT/Nznl0KhmHHWsbE6b09Tyd076wAAOACzAU9mq8uEzLrgdC6LwqYQk1hKy+FDON4xaXrzZP8kmXhztaZUxsnm0Ut4Incg8uoXHcuphAAAbVPGrwZ1G0rVr3VPPbmpigTDZzonQRrbWKWpK84BAPgjsVdbe5tLVFVqSeYrEAALIV8hR/wdDgCWPoOlXy+Mz//uyBVGGuxcXzw0u3jHhlXVubLMNad7ph984fOcVblsBVPNZd9YnO+NpX47qm8kEG+qLRAzqVZ/+IuBmcuz9ie2VLaUq8EK4Es9QgAYgu5sliBzJ3V+d8FSJDEAIJFOonh6xOw/O2Nu0WbXqyQQAOFU+oTJJiABMkBmF92uGHrS5R9t7S1hs5+8qbmlOv/7TmvLnUIABKLxn7x7IofNaSpTx9kEYzBWwmbTCMig1Vmv4kppDBaRbvOFj/TO/O1I5ygK31yvvndNoTiLoWKyyQTiyvWQwFIAx0kEIpQpy+APyTnMTLj5WrJvMAAAIABJREFUkZ6pD9rHCtaXbZZQWVQiEUZKuCJvLL7/nbNsV+CH1zWtK8yZ9rtxPA3FkUsThuNDsyf03gY+Cc/m8xn0LLUUACAmEQ8o+b5g0hOKKjgMEYsqYtJIMHHHTw+d+uO9mTEMzCye7J4CAGyvL1x2eHOH4/92rCucSKyR8QaG5ukk5KZN1TEq/H7/fBxNlXJYXw7Ps3wBVWMBRoCB3be9NPfJvx632Lzbmkp+dv261SVKAEA8lZoP+QLRZCSSIiMEJZcl4zA9kcirp/r80fjaipyCbKGIxDjcM8Mjg5/84UikRLEjT/b4hqpKGRfggIwQAQAWb7DLYGNChN99dLHNZCG746UFsrtvWPuK3qg7fIVOI4s0wlfu3L5lqTbIwUsT5XKuks988+LQwU+vxKPJmErc+sDOIpkAAmDc4RtzeH2xRKGURSRCH1l8C1/1q65ZpWRQEYDNR5K5sfhAx0yuTDhgtE0uupKW4JO3b/rV7VsyT98VjG7562mCcTFLKZDwWZenDEwaia2Sz7kCnkiSQyM+WJunEfJ/e3IkZTUs6NwtTYWP3rJWy+MPW6ynOqf+dMfONEiTCcRIPNn06MHNqwsIXOJ7R4dk1dkAwzyTjn9/aFehiDNqdEjp1BK5SMT8lkd+EkMBAPPBQC6T12OwX9bZneHETeVyeyT0WdsoGsEatAoCBBkd/ssj80a710nBAQR99fiNO1d9y+zyfal7yWD/zbmhtjlbFZs1ZHSVyLjPbasqkgtVYm7PjGnG6nrnwsDe6qJqrbyxUHn0yrjO7Hr0wBoAAIlABEutjdq8nUZHGseqZQJvLPl6+1SRlOL1h/q69AaDu0Qp2b26uFQtban9ZjBHeqZePNnVPmMiumKP3tLs9oXHpi2zbCqBAHMA+OG2GjoJBgCskotUIq45EvjBW1cmLgx+8OzNG6vVmd4hAE4O6T7tnSKJOAZv+EBRtjWIAhQ93zb67k+vi5PS+Wx+JsvWSrEAADg/vvDbLy8r6Ix7dqxq1OZ854ZczUF0Ff89IDz77LP/6pqr+P8/Wof1n3aN/+y9Mywauak41+CN7a5QTc3bT7RPvHWy952Tfae7p3vC0QCTwtVIfWTElUgWluXcps3eWZSzMU++OV++q0i5t1TZkq/IldC2anKKJOzKLKGaz/rV5VHvsH5Hfs6dtQXXVeQ1ZfE4KObW2wWp9KM763+1q1bNY8ZCaLFSIhSzasVcAgz3GJ1RZ5BJIZEQQjaHwWczCAiCE6DmsuxitWLCm75W4GHQ6FUVlfF0kgh/Y1YEAARiife6J+dcflMk/kBD0fUVGtqS3dETij7wxlc/e/8sDwWBQCxfJrh7R93Nm6uyBKzlr/9nZK43GH3li/aNq/K21xW607FICiVAkJrJ4ZEpbBqla8RwbV0pCUa6ddahGH55yqRg0x9fX54vYGex6QoWLRaOJ/whKBYWsuk5IkZ+loDLpGZzGEI2PS+Lu6U8n0JCWof1lyYMZCJxzu5/+s3TZflZbih946YqhEF7cn8DjUI83T09aXSoBewmbfbrrX3987aUhPdIYxFMAgIKHQDgCEb0Tp+Cx8oX81Yesq/cfZdVZ7BkhcrsOpFk6vDQ7FASTYXjv91WWyziAADkXEYiEv/N4bNbKzXJGPryY3u21haMzNseeenLeYc3DJJ1CkUmlo5BJqqFHAYRcXgjkSgqoTGFdLonEP/8wuj2eu2frl2H4fiXQ/Mvtk3m8invtw4+vGe1iPNN8tY4DF9Mpj451ikkQDIOo1QmKFFJLYHowa+6/nFxRCblHumfvmtTpUzAIMAwBACVQNIFvEVc0b8kA/F0UiFk3b6+Ko3jpwZn3ZG4LIuNU4CISocAUEp5ww7L8IjZhxJMweQqKd/hC0Ro1IfrCgqF7HgS/dvZ/mAk9sJNG6NpjIwQ6EsceLkLQ8jviAVy2aJEKoFiaRKMCCi0ab9bQPlakbIHw9f87bTBGfjFtto8ESczKhIM80nETpvPnUpsyZEpGLTOiyPqbcWzk4s6u6elIo9BIS3bbFbOK/OZQkRUagEBR945N/SpxXOLOvuyyTrnCEoBLJNwKDjx40uDX14ac7gDWxuLoHT8+RvW07nEAo4gjWMw/M3KSKRRMoGIwAQIAAwABpnIo1HnXH6zPwQRCK0uv51Ps14e9DljchqrTCEiwgiViOSxaX/umZkPxypV3EKuMBZHn/z44rAzsr4oe2JmbgFCfrWh8tZGdT2fn0Mjc+NJSzJdwmdVKUQKLptDoRBgQhJDLa5AOo1HYol3WweGdIs7Gopu+vZbSSMhe0tVGiG70+gsVPIZPOqHrcNHzV63M+r2J6btHlEw8rMb1m8tVhLiqC8QfetcP4tHq9/T+NR1dSqJEMZxWyBi9AWnLD4qgrCYRBGLquRwEhjKplAbtdkJJHV53NgzvZgi4Eks/k6P0WNw/O22jdsq1X1mF4NEzGJ/XXe2f9r87GsnZ3yBIIrCvvjzD+6oqcmrz5FuEgrcoeiPr1vbMzD/4oW+BbtPzGXMOfzvdOqqZLzPzg4aF703ba+ZKODnukKn7N7Dg7pWnZVGJjTkiHYX5dAosJBOaRKxvzgz+psNq3YX5JSw6RsF/Ol5Z9AdGps2ZXPYe+uKEjQChMA0Mkkj4Z0ZNb7YOkzx+xpXaY70T5OZnPXlqmf3NP1kfYWaz46nU3PBaIfF0+rzccmATKc9eKChQik93TsdJSSgKDQ6a2MzKblifgJNvXC69/NT/YuuYK8zVSqmoKmEad7V1Kh2ovHmbFm5XMSmUaYcXn80HkNTaBpDYAghwDBE6Jpznp20vto2yaKQNhXKb6/Ll/HZWqlwd20RhYUMTlkWXQGNXPDo/qa6opyIJ2rSO94fnj4/Opcj4KiWQtuh7x0UKDmM26vy6hWCV8f08ViMEom9drYnjmM8GqVBm12uyrp5XeWc19s1ZXrurXOJZKogW1ShkSMwIZlGCfDX544SJnWVXEhBkC8mDANGL1/BDTGoE50zRYWSvbvK79lU50skrowZfvVmqycQjcSTGpmgQC68s7myQMy3onECDDcWZj96bdPjW6rLpXwkFD80rP9yxIAEY1Q29dyk6Z02fZOMHYslNm/LF1EZdOLXQWV5Un6dRv5Z28jgxHyCQetYsLTN2dTrilQ0WrGQPx/yFnAEGbHgjkfd8WhGOFh8kYNtukdbKrt05vMTC0QSJOHQkaW5rNyV/jM71FVcxf8drp4P/K9G67B+cMF6rG9mV422SpXVUqGx+sPDFvcLZ8e3lcg+HZwJJVMEGlnNZ+XyWA0ywdp8OQBgwOL+1OF9rFBZLvwmQ18Kw6b9bjSVlpCZ0VRSxeO26y3XH+9hz9kiDl8KxRg0EodJIhKIVQWKLavy11UqyUQkEsfm3MGHP+oYY4BiAkFCp1xfqhIzqAo2I5vDAEvZPN2RuDMcvaC3BmOJUDy8yTPF5/MfevgR8O28pXpP8OKk4fDoAoUAP9xYmstn5vCYAIBpq3fB7vqiY6JEITp5ZZxHp957oHF3VREMf0u6/mfOB7zB6EufXf7B7oYECfPEw6uE30oehwPw5BvHtq8pcmDp0/44wR24t6agZslVKROBCgAolouK5MJihWjWHZj3Bs3+SJ/ZWSnjrc6Rlkr5mXa6deazo/NvdegXLSYxl3VgfZldwL1VwaYg1D6DPY9PRVH0ctf84RN9hZqs+69dw+LQ5iNxFgHbkKecdfhoJKRRLaN8O+/eSo0ZfHsbXv6XL5Z4o29KyWOOWj0P1BdnL4XiLbr8Gx97XWd2PXztmmfvaskUDEZT6ZmQp2/UNDJmYVLJ2+sKViTxTFAQsiMYWfSFhkzOhRnL7sbiuqLsaCqRxFJ2d+yZd84EGOQHNpbmSTnL1SdsweiOd86k0ul7ynIT8WTvjHnEYKUKs0R0EgkCF2ZtB8qzf3tTI49GzeS2n1phbPuXZCATYOALRl/5smNLfUESTx0b0MXR1Mbq3K0FeZdMxg/7p1s/HXA5Ajw+k7ZKk81lcmX8d7es6tMtds8uLkcLZKLDcQBKsgQk4td32Bjyi6nUTPGyzBgyK3N66Yig22h75fJEeN62va7wvq2rlgeZSKUHLS4WnSKnU4dnLZcG9PftaZBymfNO37udE75AeH9dYdNSUeevHxyOwyvODMZ9zt4Z54cLjtnWoTwp9zd3t9hCgaNnxvsnTbe0VO9ZU6zM4nxxZfKyzvzMdevDUDIznngaJROI0Ar3j+UuVi4SZzB62WQjMYj5DJaARJy3eE51TaUx7KH9jWwG5em3zmrUQp6Ic3TUdEdV3l9Pd5tiJEAHW3KlO7WKB18/Ekmgnz9+vS+VoFFIYgZDxqJ9pyMcgFPdU6PzVjqVVF+krNH+H50AUxh2wbj4x/MjZdnsOUtwrHdOyGeMmJ0aIvXLX9+qyeK3jy68e2bAF46VViizeKwTo3pRdT6cTtUTSeUygYhBk62INZr0ueQM5mI4BAAo5ApnAp5T/XOfdk4s2HxcroDmdl945X4ygRhJpl9pH7OFYvu12b/9os0x59TIhY/f0oxD0FdT8wUS/pYCpYLL/NPHlzQywZ6mkkVX4OGXj2yp154enTs/sbCxqoSHpX+wbRUEQ+cMbg2H+vShk2VlyjCdkk6n95YpNxVmgaUFjKbTa596/b5ttftqSj/uG5sat2IpfHtDYUuN9nTf5LHO6UKVGEbgCYt7aNTIzVU05QoUXPrn/boETnTrF9968vokjPPoVCGDag/FTurMH4/NjVt9UhY1vejesH+NIBm1+BO6c2MQBKlLs2cnF+++bvXMuPnTc8MVWvnq6vxhT3itgvve8Z5r91VeGDFG48mi8pxJS3SVhLejKEcjYHXMW0OxhCeScIdSA2bPjhKFQkTdrlUSYDyZTjFI1JUrZ8bvntTbz3XoaGTi9tqCbDFXZ3a9ebLvRMeEKF+klQnevn+PfEWO1xQAK007F4bnWofn1lZqnu+ewDB8nYwzOGmS81j3rq/MvIZpDJsNeqcn7VdGFxhk0paa/IZiZRJLgaVQ4+U3pNvk/P2lkSmDI271bLmtGYKgLDKGJlLZRHibKrd30jQ+Z2/tmb5mdXFpruS1Y92rK9VkGvn0qF6bxX/22nU8Jg0AAAFwfGzhrWF997Q5HsIKWfDM5OKzj+5s1mY78VAOg5PL+lbRg7Yp4w8Pnx4x2MoZTM3a4ihECDNJ1SL2D4oVKgaHAEEZ68m0351Ipm8/1JGXjn308xsJMNyhM54ZmcMBaClXr9HmLDe4/L78y03qKq7i/w5X+cD/RlycMB483T1r9eypK2zIV7RUaGyBsJTNODm+8PcB3YDeambQHy+Q1yqERVJesZQPAAgnUAaZCADwRuKuBPrxvGWnXETGME84Fk+lIgk0gaXjiTQJgdNpLJRIzlo8CYCnc+jmQXetlMNl0yJptHN4AQCwvaGQTSZBMBxOoACAi/M2QyLJkXP3MllcGrkuN4sIw0wKibmiYlR8KavPJwOTMyc/w3EMISA/f+rpzAWxVAJNY+062ycz5oFwDFmMEGBII2IzyYgvEp91hcxWNxtEgTu6pir3wNbKHeUFBPifCNV/KWr94djLn1+5e2dtBEmJKWQ2mfH9r7SPzv/+0/b5HHEjl/z8tlomCcnQlZ7ZxdPD+pURqGCFworheL/FPrjoxXFQJuU3KiWZZv96dvCnX/ahHhsllIpX5mq9oYqm0rVc5tYqDZpKf9Qxsuj1f3hkcH2N5qc3NccwrM/lTUVQjZhVpZAUiL/lqAqWzp3B98a8PItwAn38VIcfja/JzlqXJyHAUGaE0WjywI8OA4D/9cf7ttZoYRiGAHDEwq54tGTJMN85bsgE522p1VYWSFfWG+6cMn18Zfz5WzfRKSQIgGgC/ezycH62ECXAl01OHIDd5dkQBEQk5ubXT0BxQCQQkqk0k4S4InEhCXY4HPtWl37VO/nC7S3NJYrlKleTPlcRV4itmE6mu+Vfl51hMmQAAOAJRl/7svOBvY0Z96R4OnluzPDmpcEglthcr/ngcM+eNSVHL4ytqlCNz9k3NZV8sGD3jOuvqSl4bFtd3VLd6AzsX3vUMIQM2mzQo+UIYmicQqSsHECGEox5nM99MSrgke+q0aKR+NneGTSF7WwsrC3MNnoCnmhcxWWhaPq1I50AgJWuU75I/NNBXe+kgYTAv9zfLGZ/HQECLa0cAIA/Ejuin+0yBKfbxskw/Ni+NT1TphK15MXT7U/u3pBfKC7kCFyh6Eunuu7ZWJkgYMvVVZNplEwgZo4Flif1HTIAvqZ26Z4FK5WIlMlFGYbZMb5wqmdaKeH96aOLR/5615jJ8/xHFw2AVCUTetLpl3Y2rFNLAQAn+2Zu/82HZdXKN+6/RsZj6oKeCv7XdY5xAOBMoqQ+HYEA715TVJqbFU8nyUsP9ztLtNvkPDJl0Dn95DSk8/mSGCTCorphSzKa/Pmtm0pzxJdHFmDo60DVCbv32JQhj8t878potVJyT1O5lP3d6oFpHJ8LelIYToVJSZDyBVMfDeo/HTCXyJjdvZOVfPat2ysrS+QKGrdj2vTkR+edAKbbfI9dt/aW9eVji04Og5rNYw6ZnCwqKZfDuv35j99+4kDGw94TjP7y7VaRkPXbYx1SAun5H+y8oank5LjxUJeuKYf/k+Pdq/KydmmlCIJ3mn1qPvuJ5koRnQoAeP/MwAN//lwjF4iV7LVlqo1aTV3BN47yHePzz793IRJP3ru7nkoh3fLaEQCgm9YWbywvfOHi1MKV4ZG3fwRISPe8xR9LXDZ7JExqk0ZEAsRft/ZjSIpNo1xfpm2SCc8N6l/75BKJz4ARAgITbq4runFDxYk+3ZQv+qMtlXw6uemRV//+m+txAEYX7P9on4wmUjc2lc8HokwqOZfLfKNtik4naYQMLZ9eocwqELDNEX9mUX2fWDrD4bGAw2+N9g4aCRC8tUYrFbDyFcKjPVOHT/TxpKy7N1Q3LDHA5SU3MG0+1T2N4fjyu9C96PxoaFbnDG5Xivp0ZjmXuasqvyFfEUPRSYeDRCN6FkOTBkfPhLGhWFmukZbkS8kwgQgT8SUJ0KWzvPh5u45GWqeSrNPK1yhExnDYFIlEgyE+gVKvzOIxaK29M8c7J1/9/Aqfy5TVl43ore/fuXbW4Wkp1zTkKZYXbfuc9fYvrkS9IXTR7VXwCnNEO0Ws4rysOjkffNsR6GjHxIFn3kVFVDqFfPPW2tlwwhuN1ynFTVm8OJq6rlLLopBswchNh87ru0affbCltjw7n81bDjg+PaIHAGwuy11mBSvf/aus4Cr+y3GVD/zvgicUffKji3/vWdCgses2Vdy3rZZGJfUZHZ9PGPoXXQFPUINDpCr1U3WFlWIenYQAALyRuC8ajyZT3kgslkzFU6kUhvvQuFbAF9EpZITgSkZIREIem5dAMQIMtU0ttE0Y99UV12myPh/Xf3BFf0eVqkojPtE7VaiV5DC4ajEvEE9enrO+2z8jYVDLRBwOjaxVcbVsvjMQ9ccSyx2RCAQykSBkULk0ioLHmvcEfj+xoLh8DMPSCAF58KGHORwOAMARjJzSm8fRtN/i3VyYXchi5PCYMAQWPCGD1XPXbz6s1cpYHPqBrWX5KtGyKfr7+I/5wJTRcapn+vpNlU48nMtgscmM73/F6A2+c3Hk+MURvlb9zPaKRrUULKWo5zHodzVXCpjfyvq/rLAun3KMWD19i65Lc9YmlaRExH3k7VOBNCmFJgNedzQS16hlCVcIC0YNFk+pWrqrqWhDrSbFgRd0bqPdB8OwSsYtVkvSaSiJYgRAyBGwlWzmSt3unyIzi0zQxZQ/fE9dQZGItzy1Wat78w9fhyDoHy/cQaeTAABEmAADQIIJMjoTguBljoED0DVuaO2dxnGwra6gvkQJAeAJRl8/2nXvrnq92w8AUPJY75zue2zfGhjBM11MOfx9FneFVPCriz1zsxEygnAYpNoc0bZiRSwaf+N49961xV/1TSVT6Sf3NTUVKDNjzpCB5Q1yWYtd3i8xHCdAEPgeGXhwbyNvSeFOptMfTo2/cG76xqrcz86PECk4LY5fV19+tntmTanyDx+1pRFYWpStUYqf2VhZuXTOAwDAAAAAxNFU17yVQoIrZGIYxijIt8rGZT7YQqH7P7sCMOzg/vWyJYW+c9zQ2jfjiMfZDOqPdzQM6Bb7p8xbavIbSpTge4gm0T+c7EHjiX21hVW5WSsfYgJN/fFkV9fwfDKeevqmDetKVQCArnHD4wePDeksh567QSHmFgqFB8/23bW+MgwlcxjM5byo39fewNLdw1cEFSzPKBNRUJwlyFCCKZfrsT98eaF39qkftHSaLGaUupiIssjwnhLV7avyK7J49kC0z+x483jP7qr8UbPz5nXlNWqZLuTBAShiC/pnFk93TwMANtfmNxYrl2cUX1HYONO1N5Z46kx//6K7Rsy7uSYviSeP9U9+dnmalyOjuhyVecqxERONiPzspuYN1Xk4AKFk6hcD01okicegPD7npeOdWqngqb1N/BXu75nJJtIpQzhgCQc6dT4SgbBFI0+g+Ac9M+16Z6WKY7U4WFoFg4gvnJ9ACciGxsIrNk8+l1mXLdykzVFwv/YgWgyEP+4c//CL7vZXHqQvmTDODM6+e3rA5QnuaS47M7nQrV/MytXAVCiVRBe7p974zYECKX/WHXM5/TkCbrfJsTlPjqWx599qxdH0/XsattUV6kIeAEAR55slNzJn+cOHF2bMTiqZ8tNbNxwfnX23bWT3qoJ1JepXr+jMPROHfnYgL0/60ahe5wzeUJZdr5QhCMEWC3WOmX53+KKoSmPwh5EsLvHMaLaAHkWxXY1Ffz/SVV6de+OWqs45T56YecOq/Nl5x9kR/bqinB31hTgAM3631Rr6R8/kqvwsIkTsMvuOm6xbSlVENhUAwMCwIi4jn0VuzMpCYHh5Xa1cVPqgN5vOXAgFXIuhE52TJASpzpfXFMh1i66zg/rzerOYQPrxjevWFSlxALzB6BtHuyLx5DWri+uKvuFCGQwsuj4c1LFhQADQjNkp5zJ3VOZV52YZIn4AQC6DC0NQz5Tx0tAcmkpvqdFWF8qWI2Sef+98Y5lqfXluJtoYALBKIcwXsEkEeMRhh3A4h8MSM+gAgM+uTDx3ecYzMZsrYP/q7i2eUKRtxixg0x9qqeUzqJnWOiaNe37+Dr9aXaqSVMoF08lEwB+OQcnqBGFVsaxYJc5j8TLm/8Lb/lhZpvpo0q6kp8tVkvu21tDI5HNz1kgytSab748k+o0BDRU5fLSz941HMxMBK0jF91nBSlkHrrKCq/gvxVU+8L8IXTrzxx0TCqngoz5DS4HYsGBzsKmuSBwA4GifrC7OuXtfY56U/57ecmOe/P9h773D46jOvv8zbXfK9t6l3dWqd6vYcu8FMAZMN4RA6AlJCEme9DxpTyCEkECABAIBAhiMjXsvKlaXrd6lVVtptb3vzpbZ/f2x9iIwJHne6/fPm9ffay5d0u7ozDlTztyfc+77PmiCsflDoVicYmFyHkVgKMXG0sP2MYYZ8bkK+JIUSI35XBkLu3Nifn/7gIhDPrRhWfrt2+e2//Ljy+7x6Vvrih+6oRZnYQNuezCYOjwwPWz37DCqAABbi7KVAs6w11n6WUs9mUq5QqFgNB5LpCKxhNUXdIajPamI8PTRVCqFIMi9e+5TqDQDC04PHcVxVse87d4yo5z6dCCwuX/6qRcPJJLJl56+TaSm/gkJpPVlPODyh5/feyESiT+4sybJg/L4oqWD32nRcaZ+fG7W5Td7giYc33uy88wLj7qCkZdOtMEQtLM6L099ZYWajHfT0g49cnWl28xXreaF589dGvKGYnQySqckYvb36grePN0ZjsSqNPIjDQMvfWvX5pocAmUHorEht6NrdrGQyzvcOJRKgptWFC7L0zbZ7KFYQpiEy9Uy+ZK1fjPKWM8JJtk0YZm0ey3h2FOritPh1+lvXf7wz988NbXgeuWZ3TqZIPP5gMeu5/LTbYGWtAIAgKPstoHpUx2jAICqfO2+C72P3bxiRXF2CoCJBdfjrx3dvb5sTY66QCsFV1fRumx1feNwSyyaeHCZqUTHE1B4Dk+MQtDTrxwuzVPNB0NbSo0pBpzunXx8a7UrGQEAfBkMfK5psWScBWMAgAWn77WDraVG5e3ry9L7OMPRn5ztdEdonkaGA0ADkO0JvHCgqbpIdWd50Q9fOWZDmCK9nvH6v79nw0wwfHOZsSy9StrVJofiMVskxE6i9mBIxefKuNTn6uOORP/UPFCp4W00ajnYp2fV6g12W2wijPXrt88euzh4/7aq3399Z2Za4AvlCkb+52ATwyRXF2SvKsxK0LGO4bm9zYOzNjcnT/rx/Tel86JAAFy4PLHhm68CAL56U82DO2sbJmYeWrPMm6TTRkY6L2o6pv8LfYSufQQyN2oknuibdyj5VBiO5/HFZ7rH7335QNQaUK4rK1PytxSrt+XoG6cWOmbtZVK+nEuWKMTTVse+CwMrS7KHbW4mldxUYmRD0EdtfTKcWl1iSEf6XmvZ0FfTMY25fCfH5qaYGJcibHTiPqXk4uScUch1BULfe/ZQ2dqiOU/AwEol/cwjN9SuqzBGY4lP+icOBiP3UlRVmap7wgUAQOPM6KJrZ1VeXa42c6wUAGM+l8uXaJldLFLyskScQqE0bcs2jlu/e6B9e6708uScn47pSw0SJTcWSZRibKNMdHnemS8T5Er5RjF/Pkw7g5GXx+c85/u3byjZVmhgGOaJvx1Tc6mH1lckmeR757pLC7Sn7V7r5Jw4RxMIRcbPD5Tsqi40KpYJ+QoAm21us8V1ye6j48xmg/zb22tJNgYBkF6pIP0TANA6ML3/4uCqMr0jED47MolHUusrcqrzdX0W21uNfU2DU5Q/UXvLiuU6SZGat9NA5BaGAAAgAElEQVRknPX4F/yhBr+bTmI2Ov7G0fZqlWR40ZsIJNkCJJtk31ds2H+yq7XH/PW7153tGseMWT+9oRykEpN0TBqKzcw5f/7AlajlUa8zGku8d77fH4mXZ6tYbKxl0c1mofcvy61Vijts7gVvAE0wNTqF9Gq62KWoOeJ1piPXh71OCICpcde++v7GS2PmBbdJK7V7AlmrKvMIZkWepkwjP9TYf3Nd0frKnC/rit3h6G/rezzBiJpAfaF498QcC0UeuaHqhnzjTMgLrlrS7UMzJ9tHmWSytki3qdrUMTR3pmPsFw9ty5STjjYGACzXyYoVokA01jo7b3WHciTiU/0zGgI70TTw9B0rz3SOpQCkU4p8YfrUoPknu9dtKDEkAbg0PPtR48Dd26tQDD09OT/rDeUrBWUi/siis3/EMjRiKcpTbFhmpL2JR577WF6aKwj6f/PodhxDTvVNrCzUFail877I+Ulr96I7GIhXSYhDZ3qffWjb6nK9JeTLF0hGPpuH4AoVQNCTW6tlXOraju66ruv/F12PJ/5/Qq1jc387d/nylLXEpP24ezbESrjpKMZCm452es2LSgT57we3Pn3rKnuIPuJwlSAIl80SkWyDVFChkxulAjmPEnMILs5iowgAAIFhWyTEZbHsdFDHEaAw7AqEnzvYNL7o2rW8YPfyknS6oXAi2jZpOXt57ld3r9+9phRFkNY5++8b+punF7M4eJlcuLUoe0O+jk+wEQiyRUJy4jNj5zQT4+OkkCQkHELBp0wyoU7IlSMJc19fKpmCYVih1jqTiJRLiDhEx6xjT0WuNRKYD/mUJNfuCX7n5cNvn+zUKoXPf/9mrggvEsn+nX7z2n0C4egf9zdtqc0fczrlWt5KTXYiyWSCmNP7+yLR9zuGhVxywhN8ak1pXYH2L0faIolE09jc1lLjvavLFAIuBqPpLZKILi0BLJkcyBjWrkD47caeHdXGG3P1jUOL0xx0nUpYp1fcsiZfwMLNNjchILZWmlRi7owzMOsJxGLM+hwtg8O3Ly+LxRLnusYPtQ6P8Di7tIosIXfBE7T6QiKKQK9xk4IAiDPJjmmrjMeZ9IYeW1EoJD9FHZc//PLHF3etLv7+vRv4S3I0DXkdRUIZk2RYMApdta7SrcBgFAJAKxOsrcjBMfRg08CC01eVr9WrxA3dk68cbD7fMkxAEMwnLs/aDGIeF8ftodCr7SMJPvXbjRVmlz9LwDeJeDNBT8OA+dV9LS4o/q3blleq1VoJv0AjffF4m5rDrVCr0ll3/gkMgCUw4PaHH/rtRx3Ds4/vqpMJOQAAHx370ckuXxJAFLGex1urEAetHimb3d45eceqkh6brWlyQYGxKZXy2TtWXbw8YZIJ/9ozMWn3lGukOIpAADCp5GIkIGYTHDYqpjhdc/ZLi1adgM9CkPTRvZHob1oG7yozVihlC5EghSIojEIA2ANhqz9YrpYZlSK3NwTD0Atf36kQ/bNlNAAABAtbk6/rmnNc6J98oWv8rb+fs3hDW1YUHMSgP99QZRKL0heCSaae+tNB87zr4199pdyk/uux9lWl2d44XaG8MoLLgtFkKpVMJXH0M4u7gS+3LTKXGEPgIIjOOANubxSkwAunO3fWFi2KuDyLU6CTeHnUJacjnErmEviI058nFxQohNkyccfgTGGW/Kubltm94V9+XN/VP/fQ5pryZZocuQhHsaXlg6sVQGEkyiT/0TPmCkdyxbzbTdmYn7aa548uOHlq6QKA/vj8Ia83yMKQFx7YMhGJbyzXdw3NPf/ehR/+5fiUxTXbOjY2a69vHzeb7Uk6HkNgFYd87vDFdxp6NpYYeBQ+4nPZw6GDfXPOEP2VyrxSmYTHYg15HGqKDwCYmnO89PpRAoG/d9uq0mzl6fbBPIpzf7l+oynLIOYVyoUf9k7u6zOfCgR73b5Gh9dzpueJm+uqDaq3LvZ+7d3Gqc7xH9y1fkNFjlYmEIl5+xsHHltdXG1Sj07MX2geCNoCB795670FejIJftTSN9s9tbDg2VhtLFbLum2BNTlKHs5KAeCgw1KcEqD4oZ7hV/e3dAzPFhlVn0w6cZB4dMOyEoOiY2B2dMauV8uOTXhK8xWuUHhrgWpFkTxXIhSxCTFFkGzM7Qxu1yhwdyg4bp3sn+bJpe89sPYrVXlNs47DE/ObTJqeqcWeoRldoSHmcEbzlVNM8hat3B6mPzja8fBNy9OXQ4KTcoqj0/B1fF7b+Oy03V2nk+ULeW0zNiGJVypE+RIBF2ctBkIL3iCGIBQLQ2EEhZEoE2dSSQXJnfB7uBgmJ7lclD1Dh85b/FE+v0LKWVmU9cw9639/9+pCjTSWYF442nr8wsAtG0pzVOLP3Q8ZERi62aRR8cjWOe9J84IjDIUT0NHeuebe0TyRqEKrHPe7JTipkQrWVRhxFtrQY/7pG6cWPf5b1pRq5cJMaXIuUaWRshCkddZ+ed5JYkiSgZsm7D2zdg2X1dI7+eyj25blaDcuy+US7JEp24dnu7v7Zt66NHSub5LPYp3uHNuzqaJCr5BziTqdXM0lLe7grC9okgiqDSqpVhRnwIenehtGJvwCccQ899LTN68u0qlE3PIs1b6WwUuT1nUF2s15mlyJoN1qPzNhlZbqBhJxTjSewCAthysjqHTAcTraWCvmry/S23zht5tH+ASiEFAIfKWTga7OVX7hk3td1/W/0nUe+A9XhgQKsxRqufAf/VN2DP5ehalCLuzqNT9+84ptm8orCnUcCmdhqIhLqPnY1txsvYgnovClGcE/J1skFIhHOBB7PhIYnXHube7fXJ6ze2VBllgEARBORO2+4B8OXPzH+e4gwrm5yuCORZ+v73vz8liAIiRy7s9Xl9cZVPwlafI/xwNLo4QzIjC060K91boIAQAgEFLmayXCKJNsMC/eVW7ksVkyghJhxLH+kR/8+ajVE/jZg1tu3l5aLlPKCAr8ez3m5/YJhKPvnO76yvbqKMXkCMXnWsbrSrOWVgwCwBeJftg1enrKhmPoIysKRST7bO/EmMcXSya/e/OqXOXnnfjTVBBORJkkE2cSTIohUTa05NCuYPgPx1vv3FC0PisrHE/Mx2hjlvSp6ry2KeuPT1xCPaGtNXk7a/IPdw193Do84w1uKsgySHlcNiEnqCGP/dKIZXNVnlohMnebc8S8Ep1MJeAgMDzp9CIQzFmyqhcAIJpgGiYXFHzO6YmFB6vzlq755faHX/744td3r8rVXnFaSL+hh7yOIoEUAmAp1dCJKHk1lBZctSy1MsGO5QV6pehY6/CuH74VjER3rip650d34yzsXOvw0Nh8lMBYCPxG11iRWqQXczbrFCYJf3+/uW3WzgbguTcvFKzQvLTnBqNQPORxcFnsBTqwIVe/r2WwcWi6VCcn2NiXwUDqqt8CBIDbH/7zgeZ1FcbWgdkfP7AZAOCnY3+/NLqzMDvgpwP20OmBub45Z++8t3naFXF4vMnEj25dt6U2Z9Drcg3M7VpVdHNd4TsnO8NWz4oCXf2klUeyJBQx7ndDABKx2VEmzmHhg0HfRRcddvtJDBWSePPU/Afdk1+ryhvwBUd8QQWBKkheIBrpsThC0bhexIvGEr/fWx+Jxn/z6A3/EgbSjcIQZKVJXWFQ/uXN07MEtXWZYTAYfnp5/rjTzwawlEOM+lw9Mws9c1aLxfvDJzcvhkKHeyYC9mCJWhEjU1KCgq6eljSXYjD6L2EgIwiAYa8zXyCRUsSU0//9/c3tNg/GJX6xsXJjqb6zfWxxYmGdXr1Sp9iQoyxTSxrNtu55t45Hckj8SMeoP5Z48aOmdmdsPAruXZ6TLeK7EhFfjOaz8HRs9FIqGFh0f9A7KSSwSpV4xh544ewA7fTsrit6akWJKJE8sr+Fx0Ir71y9akNJuZpXrJYfHp5TCii+jHS4Qxse3PLLHTXP3LG2pEyVq5LHUqlwINI7b+/qmMDiqdPjMzwRO8UgF6ec6w3K7fkaDouVDqWQk5whj8Ni9b1y4KKYT/364e1SIccdobOV4v4xy9CcvSZHTbJYOIoUK0T7OqfGLYu3F2p2Zotf/bClxKD8S0O32eZVywUBm+eVb9/qo2NvdY1Ouf27a/MPNfXVVWY9vraqIktxYdqSIxeFovGXP2lOzLoqyrJfeGi7isfpsdi7zI5zc4ubTWqKhTrpcCLMvPBhw/iUc3l1NsJC//pJa8IbeP5rO4xKsU4qXFmW5YnEfvNBfUJG1dbk0VP2vS2Dw9POniR8aNGRz8PoZBwOJP5+4bLD6r11dcmGqlw+zv7qyrxsER8NRhib7/iCM6YWGTXKsQFzYVWOvW2MdAV3VeeVq6UzgRDJxnRSQebSi3EyijHLclU4G2kfsczYPSsN6qYp65DDx0KQHAlfwaMwBJl1++3BMAxBFPtTKvDGoiI22Tq1eH7MavXS6wplT2zMM8kldk/A6vSXGJVZMkGhRra51NDjcr/d2NPQOiYVcAxKEbQk5GmpVHxqR4G2VCXusLt5OuFKtfj4uL25sW/c49mYb1iIBtKWtFYmWF+RY1CLu4YtU1aXiEeopIKlpWWo4NX2kfZpZ6VeVijlf3Cqs6hU6YOSAg4pYrM1Uv6qUv1jN68oNipdC97m9om9g+MhZ2Dr8gK1hA8tKYfEsL5Fz5QvmK8Qczlktyc6RcPRkak7byrzBmk2guplYoqNrS/SExj6cdtQgknVGuRwgE55QwEARYK0nY0dnLY5QmETl9JwP0MFNl/ol4cv3Vebe2Fouml4GkGAhI8vza8K/tXze13X9S91nQf+Y7WUBHJUkhar+/TkglwjuTdb3tk3Zba5N6woyFOJq/XKOoOqXCtT8CgZh/DHaTX1L6wTWyTojkbkOAcF8CMvHz7fN3nnyuLl+WoSZYcT0XiSiUaTfzrQrNWKCgrVwWSi1+0Zd/sAgdYIeI9V5T1SZCCxz5PGUh6gEzEAwOcSiaZ14fz5UDic7vgK8vP6PPSkK3DfMlPakHV6Q0+9+EnDpcnsUuV3HlijkvALRZ864H5hd/k5M2jp74Fw9MP6nptWFS0ygQqxSiXin+wc5ZFEluzTPBKBaOzDztHZIP3w8oJbS/Q4ivjC9MneybtXlXxt0zKC9anBmlEqPdQKowiMshA0koglU8lMY3unF99t6r1rQ3GpRO6nY+cnF+6uyEERWEPiag7hml+8FEvmSAV5amG+Wm4P08NT1pF5BwRgo0J8smPkXOvY4zfWxcnUdDR5Y6n+WNNAY89kiVEl5ZEiipi0e62+EALDHDaWAiCWYJrMCwoB57XLE8uV4iKFMFNDtz/80scXv7H709jW9Ika9NiLhVfcrtI8kJ7uyDBSBmwytp1GJsDZmD9MH744qJHwOQRrQ2XOTXWFQh6578zl/ZOWZWrJJAytkFGxJB1i4vkKvhjDX2sf7+0Y+8MDNwEONB/yqyiOgw7l8MVcnL22SI9j6PsX+3EM1Yr5XwgDdCJKoCwIAG8w8ucDzU/eurKmQPfe6cu1hTo2wXqve/y+ylyjiLvGqKjUSXgEeHJd6S1l2SRg5hLgvSd35irEBXLpjmLTUMQza/flZ8luqCkwqcQNl8YNUsFr3ROXZhY3mbK0XN6Ez6niiPpcVgNP0OcO5ot43eaF356/7AjST68tU/PIIiEXR5E+dzCVis24gllCTo5UFI0n/nKodVOVac/WZRmq+TJlGphMpSb87kAiptHLegYn28YtkxL+jQapVsxqGLb1WNxiGH3unfpsAX/W5uHiuNnhe3JLTblBebZzrL1nWqzlOGIhDXUlo0sGSpdSwT/RiNdZIJDMe4OPvnHsxYYRtpi8P1fb0zb6vd2rTSrx+nKDk6bNI/M3VOSQOIajcF2WEkDgwNAMCsPHhuaP9E7nF2XdXqhm+3zjLk9JvlyGEzwWPhnwyJYMBPjo2AuNfafG50tloqbRxRfPDb/eOKiKBH5w94Y8laRjaPbExcE9m8p/uGfjFqNKhrOOWpwjHv9KCX8mEofY7LpKQ+fZvrWlxjgMtZvdR0bm89WSfCn/lhVFecW63auLKR77YMd4q9N/b6mxRitHYSQYi5AYGwDg9If2nuhuHZ/evqbwqZtXm90+CIF1Yn5ttnJ3bZGUS7zfNADDKbmQ4uO4VkgduTTtiUQxb/Tdox0+iPnBbWsnA8mNeumUzw9haIfVVa2VbclXhdFEiUm172gPhbNoOv73/a2fDE2aF91leZrfPbhtY7GehSBiDtEy6bihNIuNJFvmHCwIzHoCB8/3byjL2VKbF4kyh7snwhTrtw9sLdFeWW5vxO5rsCwmRaTIHVwu4/FY7LkJ20M7atoujc1NWi0kdezjVm8gcuea0iSXHQbJ1inXRoPU5gy+c7LT6w3fuDz/1fs3lylEY77gFBv2d5ufvG31xqKsg40D8WTSSUf7RixbqnIz1wUCQIqT3hiNsuC1JdnhQPyvR9prDEopB2+ZtQ3ZfSwEMYh5Sj4HgSCLN2B2+aUcAkPgtilH05jtuTN9PAJbaVDsLMkqkImkOMlQYFd1EYohH5y9jGOoVibgEux7VpWWaeUv1V96/YOmpv4ptYRvUIq+7ObMFnILhNQHDf0Wb1CgE/3qrjoJxfm4c0jH45co5ON+d9qS1itFt6wpUYm5Tb3mw82DHJKtvoYKqjXSc1OWIYdvlI745t2cZXkRhJn2BRacbhabLcbZAIB8ney+LctWluhtc+6LdseZfvPu2kIeiUNLyklTwXmzdToUXaWRFAqIMYt999bqbI3wTMfor948O7PoZmNoXUFWjkx0+PLYj94/57Z6H72x5r82VxlE3Gmbl8OkcgXccavDHY5SLEzD5ckIqt9p3/HnM6pY+Jndq9cWanEWerrXfHF4rkgnxVAYvTpXAP6Np/i6ruuf6DoP/Adq3h247bm9HZPzdYXZOSpJh9U9H6JNcoGbYAUGZtBkksMlfnnX+jqj2iATCkmctSQrpS0SutZ1JyNfLDrhc4cTcQYk/dH4Y++dD7k88URi0RsMxKIJEvLH46e7xo90jGxZUyCkuEMOP8lm3V5srFJJeEmoOl+GIEknHU4fJbO5oxEAkoF43BIKWEI+byymofjX+tUEg8HWlpZ4PA4BAMGQjSPfUpxzU2FW2ovJ4vBtevo1hz/0q4d3rKsyGLlCNZf/Zbb+0g+Xvm8yv/hC9LtnL+9cVeSN0wQLs0aCzmiIQ+ENXZNyPd9Oh9Lbt9r64qHE99dXGMQ8AEDbmGVf6+Ajm5cZ5CKwBAOWHjqT5j99aDaCoTBKJ6LeMP3n0x09M9bb1pfk8ERDds+pMcudZUYll+QiyIsjs+0NvTeuzPvDzrXRZPLI0LQjHM1XSu5dVRSOJ5tHZr/5xrG5Gef9W6pMGokvlrTGInoRsbO6CGdje890szEkWyFKTxRYPAGLNwDDyPGhmRSbVW9x3lOY1TvnujztyJHzcQxJuwllYCAzcW8OePL4n3q1JpJMmgQwGL02yQ9YwgYf1/dtqc5747/uSKVS9d2T9d2TOJsF4ax+mv7xhmVtQ7MDTHSTSFIik/HZmJriWx2e7q5xWVXOCqOiSCaCU4gnFlFSXBy5YrlqxPxSnfz9i/31g9OlOnnaPy1ztoOJCIXiAABvMPL6kfbHd9WlMwY6AhFfNNbh8NxXmSvAWSkAoglm1u2vM6ggAN44eykSj79438Z0Gh8AAJdg76ooiLNT9YPmGZt3bbG+tkD7+uHWiM27rkR/YWJewGEhGGyLBEtFCiYFNS+6CnjE2VGLXsD5+pqyzPpNYjaLgKHLDu/GLJWIJD2h0DsnLz26c4VR82ma1C9T5mTGk8mmxRkpxvGH4rVa5U21hecW3MHBqePz3vsrc24vNSHJ1O8uDHb3TJxrG+EKSDcT/8NXtusVAqNCsq7SROHY0aahAoPCFg0IWKxEkkFhlHXVge0L2Tuj9CBlvkDiCUfv/OupBpd/S6nu2e01N5UbBxYcg1bXhMfHpFLr8rSrS7Nf+6SVZLP0crEtEu6Zd150+HqnFu+oMn37ljIZG+4ftDyyo2Z5vvZQ6zAfZ+cqpHKCGvDY00jgCNHfONys5VMOVyQYieWJSD5KA5vvb8/czmbDv3rnjNMbemTnilyNFADARhCQYBLBSKVKtjVHc0uxXi3k7B+3xpLoqQvdvd7Y9iL1LSt02wsMhdlymYDCKGjU7js66ViRoxoanjGpBRgJczEsDQOtA9N7z/ZsWJZz19oKAmfNBYNGqdAoFYhJPO0AJuLhZTrlP5r6TvZMKJUUl4PZPdFSmeCvQ1P0gvuP39i1piDr/Oi8nEe+PzwXh5hCKb9Qyfcz8SKhTMHhECzsp2+c/M075xIJRoxi37hvvcXmrTVpOFdDkP/SNPyj7ZXLNDKf0/+XjqGuafue1SUIAh/rHh9acOar5M0Tzoe3F8pwKhCL//3SaJ/VVZElurUsW8UheoYs+8/2muddD26typMJZyasixZHVYHutuWF1SYNCuCfHe3Rc5ALbSP+YGTHioL7tizLUYkBALlSwb3LTHVa2bsLTueoZU11rlIufOVgy4mGAS+SumNFMfvqwE36Hsji8MQEFYjHfnCkd7zPvL9vJBaLL9erBGysZdY27PBFEkkphSMwMuMOnR6ef+5MbzAaL1QK7qrLXmdQ8UmEhWDpm1qKk+N+N8Vn1+Vm7T3f09hjxlmoRibQy4V3Li9qt9rqp+b3HmyfsLrXlBoI9mcGwtNqHZjed6GPF0389I41Tl/o7LQ9KcNvMOjO9ExcHJ2RU5w0FaRdbhQi3oqibAmPah6YOtY+lK0UCTmfhutw2NgtRdlygt3cN/XdW1fdk6PZoFLwWNhcIt646Ai4gjohD0NgAIBeKdqzuXJtftbctLNtdlEi4GjFvKV1k3OJ1dkKHht7tqlvqte87IbqRTYqjCVFSur2jWUMSDV0TTQPTKVSYHVBVoJOLIQj5XqVRsI1ivjbTJpsPjVm984HaRmH6LXYLL4wC0W+8rdG+6Whp7+yJgonJBwqRybeUGwgWNjelgESw2RCcikSgH/VpVzXdX2ZrvPAf5oahma2/uHI3MT8nZsrR3whZyxRLhdyMGRkZjFGQj9eX7VnVcn6omzWZzPTZyQnqC/jgVGfy0mHAQRFk4mRaceR1jEIkF9ZU/z9XWtzDSIRQvz05ZN/+aiZYLE31eS3TDvDDLMjX1emkEToGImgK40qNcWVE9S1mxQnIZDScPh8DNNxBHKC6nPb3dGoOxq1hHxOOpLGhsCifWx09AoPQNA9W9fnaZQAgFQqdaF7cs+v33dj4PgvHmCJsGKRjEA//wr5J73k53jAHQi/cax9y9r8CMLISErL4fMwTEnxTXJxfc9kjlhcrlElGeiphkFxmPnFlioJibsD4ecOXzTbPE9srRFSV/Jww58tGVryZ3LJJxAAvlDspZPtqwu1RpNQABP7+qem3IF7K01pZ+JENHHseCe3Ou8Gk4yEsRmXV8RmF6rEM97gm51jXIJdppWpJfwTA5MbyoxyIfeQ2VotlxQIhcNeZ1WWOi9L+v7Z7sxEgUrAiafA+50jfRA0ZvfcU6CrVIhqsqQYCh/tniIR6O3jHWkYyJAABMCoz2XiicASMalkJq762nQ0mT+7xyzzTv+9myshCDKqJWsrclIQ9Py+po/Mzp9vLKvJUW0uNRRzOUe7xk50jckEvKGF+Q/P9Dx8Y836XF3D1GL7nCNLSqlI3lzIZ4+EMq5fJBtLTxR8cLG/RCfH2Vi6nlEmRqJ4lImFI/FXDrY8evMKAYdIVyaOwM819d1VYSpQiAAAsQQzbHXqxfxYIvnXM11bSo17Vpcu9ZFLAgBDUKFMsjo3y52IHOkclfI5a2oMxSpZ0+XJujxNm8Vm9oVMEr6UIC87fBcd3t981PiDtWWrTRpXkE5PxYRj8VGbOxCNrc9S4Sjq8oVePdj26M4VLDaEwWgqlQJfsvww+OzJHPe5eqZcATq+Rq8RU4QrEsMx5Oubqnp6x98ZmK/RSAgYPtvQG2azg94AJCJO/uh+pZCbSCURGIkzcaNSUpWn/fBCj5zNibCSKopPJ6IZoruWvTMa8TrjSSaHJ3SGI9/6qCWOw2/evubpNaVqPoVhKMlmneub0MlEVVkKOZ8UkmSpQfnGya5Xj7a14ezTlyeyo9F71xVOeAJqgkpFGKcn+NANNToJvyxL8X5TX+PQdLFOrucLBjz2BW9kX6/5VK9FK6B2l+lNUs5fT7VdOD9836ZKHEOONA3duqZkx8p8HoEDAGIM02txRBNMXbYqh89hIQgAQMkl12Upuhcdm0qNC9PzOVkCiZCSkxwIgGGP8+SQ9ZzZlgrFwvFkeUl2Q8fo6LQ9DicH5mw/e+tM18TC9+5Zr5LwJly+KJMskIvtsZA7GpESFLiaoopkY6vys2JI4nj7hBgn5Bz8x5+0I4tubo5SwOfAMHKwe6beakv1Tj+1vTbXIHAH4/kScbpu04ueoy3DC07fxirTfz+07b41ZZV65WunO6PxRI5CdHbIkmQYwDD/ONHp9Iae2FrVAgX3tUyaZxZurSko0crPTznVICEhqLlEqHHKWq4QF6ip1RqdBCf1SuG6SqNRJdl7rvuThgEYgtetLrxreVHPtHVi0U1i2Nc+bPP2jJIoUl6e/e1dK3OXpMlKSy/mPbQs97w3cKzPfGLW5qfYd9bk9fTPLEZolZjrTkbSNMjFMDaCsRHU6Y+66PDu6rzx4fnbVxfPenwTi+58mUCMszoXnG92je/rMEchkKMU3F2dE6LDkXhcK+GI2RSBsqJMPO37ngJAgpNSnFyIBXdWFeIstL578lTH6LI8jUzA+er6ytV5OnMwuKXCtO98j4hLamWCzOPQOjD95rGOyQXXzhUF37ptVbaIt7MwyyTi9ZkdoQi9syKXYrPqB6cvjs7UGbQL0YA1HBCw2EwqKRVSVflahZA7ueDsnwkeHtoAACAASURBVLIiMCy5Cv8uf3jfuZ5v7ajuXHCNOnxcFlYhFxcJBBoKRRFo0RdGYZjDvgJverlwTbkxFEue7J/tNltIFqoS8ZY+xWoumcclTy44SQzdaVK7UaQ7wnBYaJ1WUVWh5bPw9uHZ/3n7LE3HN5bnvN82eLhztC5Pg7MQNY9Tq5NLKKLH6poL0nwC//WxSyYuykWQ7962lkFT/lj0ijeUmF+iU3zQMtA4NFOolaQnCgC4Msx0HQmu6/9A13ngP0euQPiJvx37yQfnpFK5MFfqD9JrDUoeC40xzMSwZc+6stUGaZniX+TYAUtcd/rc9qWj+KlUSkFwcAC/drTL6gjsri1Yk6teDESXGSR6objbYm3rn73vhtrKXG2P3XtjsX5jjjrBMEE6ZpIKTTIhCn+6Su61giCw1O0kgwoqksvDUA3FRwBydGYhNj+biEbTPCA1lemkgqNtI9997fgv3joNJOT5nz8QJ1JL8wj9H/CAOxB+/Vj7jZuKCiUyKU6RGItmYjjKSgGAQBAGI4dbhgkKPzFp5TDMLzZXSUjcG6b/fKpjS6lxz5oygvWZBI7gsxiwVJkP592Bu1/Yd1t1gVonwCDsotlWrRVvz9dyWWwIALcv9OonzU/uqnPRNImh7kCoUC6sylbJuKxanXJ3qQGCoSlf6PTUIoxyXj5Uf350NqYUP5yvAwDICGrAbY+AxK21xZmJAjGfOtQzYWFjSjoK6PhyrVRMEQAABY8kYPD3E13P3Lk2nZEzU/NRnyuXL17ais8FeHzZefYGIoebh+7fWpUZ4UsBMOEL/XFsNjo6f6plWMIjRFyCT+IQBB8anG8an3v2o3oeQL55+yqdkC8WoBoO7+KkvVghyubxpQQ14Lanb870O08r5pfo5C+daMcxVCPmR5kYG2FBAIQj8TdPdDx0U7WQQwEAAtH4n1sHf9PQo3IEN5fqNVJBNMEMWp16ET+WYP5ypvPJbbU5SnGm8qmrkJP+E4agXKlYJCPfbuqemvdsLsupztf8/VTn1hpjrkDUZLZDMPz65Pwnpy7HLpuFHEIj5JZly2MJpn/BueANmOTCArkIhWGXP/zygeYnb10p5BIYjIbjNAvBoCUzMEu19KU+4nXuM9vHEqBGKTLwuA2T1s5558O1BSUqSY5M+NdPGk5YvfNma21JttXrExv19T+4UyPm0UwcAJBMJdOZXnAM5UvJj8/0dvXMKrL4Gp4AvTo/kD5KKEFn1nbIHDdfIBGyiOPj08/sa/MB5v271+nFHCaVjDLMmM095QsEHcEStdgTiZEsFgrDDAqr5ILmBOPuH9tiUt1Yl1urURTJhf9zrq+v23zPxgqtlA8AINnYinw1xWLvbe7HCdb73TMtC9ZlGsX3N5bqFaQrGGjqM5uEgsMNA3M2L5/Cn7h1pUEpRmGEZmLeSHTC4dMJeQYJPx0kDa7eWhw2ts6kbpyyVhqV/zh5iYGZCp3qyNhUr8VXphA/WJV3W0WOWsCx2LzrTNpkPPnSsbbjF0c4NTmGSn02SdhDkSwhzygV4ggiIygpQQ15HFKCSqQYBEaGPQ5PLLImO5tiYa+d6jo/OCngCce6x//x1C61XPBax4glFq5aZjRfmti+Na9SrbPHE63j86kYMzHvfL+h96YdlTs3l1dnK7uG5gqz5Soxr0QnO9Ax9NMPLyzQIJ+PX+gau7mucM/mShmPogJxp9PrR1mbC3S1euUbF0dy1aLfNvb6YsmbSzUJOFEilmMwAgBgUgwbxqZtrv4pm0zIuePm2juqCsqzFTdU5BJs9LkPGgZ7x3/12PbfPLA1S8JfDIZFFHFtV0yxsTvLjEYp3+IK7CzKqrc4aBHXt2jvttlaO2cKpBK5mMpkozrYO3NjYZbBIAj66dwc2VfXlnMJVseEZWLRXawQGQRUq8MllPNnoORUODKVSs6kUrZwNBWkFXwKR7FYMs4kk5mVsFEI8sRotZi/qdLE47DfP9PNQhGtTKCXC2+qzt/XNliYrfjLJy3nL08ohFyrO/C3ox2T864t1bl7ti7TygSZJmj4VI1GetZsHbB5CQy+r65EQOIftQ2KcULAJ7yxqILkpkMa5EJurkbGJdkfN/T1T1oRBB6ZtT/3/oXtNXnL87U1WhkLQVpmbF0WZ66Ur+XyNDxeEEQnbb4FX1DKITEE9kVi3/iwuXvG8fCaonyV6OO2wZ6R2WK9ks1C08+syx/ee77nqW1Va4yqLoujQMDdk6tFYDhER32BqEbDKylQlWWp6nsmnAG6IkdzZsLdP2jWyYUyIYnAiJxLrNDJpRRxZtZ+yryQsLqXLzMu0rRCKEDhVDoBkQQnSRa2rjAbx9DMRAGTSmZwC1ynguv6X+o6D/yHaN4TePqDcwV6lR/H+XzWWoV4aHS2IFt+/kK/1+H/yX2bTErxP3EEymg64A0nYp5o1BoJlopkGbvcEQkVi2SxGLOvZWBbae5X11XIhGQwFv+oa/rWcoM3SL9zunv7+uLxEA0TrAdrCyQUPmbzBOh4gVIkpv5ZIsW0gvEIl0UCAFKp1OcGTDEY9UQjHw/OdNEpycxoLBaDIQiC4CN21i9P9r753mmuXBzkcut/eg/zWRgA/3se8AYirx9rv3FzcaFElu5So4loetHZ9G5ZCuEtP3yrL5Z6eEXBA9V5JIZ2TFgOtA8/vrXapLgSOpz+x4xf0LX63PjNjX862tnYT3LYRpn0O0c6nqwuLNcoEkkmFKeDkeirn7Q8cctKrYSv5RBmn69OIxOTnBgTy5jjWgGnWivLlfCHfd65IMg2yAZaB0wKUY5cCABImzUjXqdeKsjXK579sP79xj5PtnyTmDPtD+4u1c+4fWanD6RSE3OOT5oGvnHbSpmAs7TmAx57gUD6ZTCwtC2fa5c3SL91vOOB7dVC7pUR+sVgZM8H9S80D2gAQYr4hFTY2TZwoGnw4JTLSyd0BPRRw+USjeKeG2v5ONuZCOi5/GwhP1fK39s7iSGIgkvKCWrAbc/cySkACDZWqpP/+XTXm+cvry008AgWAOD5vfXrK3JyVFKaifnp+JuXRtYaVEVs9sm2kYdurLUnEpMOj0ksiCeY1053fn1bjZhLQldtyvTUzbXw6onRd1YUh0D8yKVRnI9KhZyjZwZMchGSSH77RPvElPs7qwsO/eieVDLZ1GtuH56TiTjTXj8MIL1EwGFjLn/45f0XM0sspQBIgmQ8mcCW5GgCS4BkKQzASRQK0pVy8Xm7e++0tWfUemtRll7MTQEwMmP/8FCHN+gzOzyXQtFntlS9fM9aLsEGAESYGIWy06OGaTmi4btWlPEp/JPz/WI1peRwU1cD3DEYxRHWUt+hNAzMuf0PvH7k5U6zUMT57+0VMorDAMgVpOc9QSmHXKaT8kjsWPPInWtL57yBC2NzvzfPnR2ZrcCgp7Ys7+yZGhixVufqZDyOgAX/d+PAbZUmvZQPrt5CWglfwKOePdq6zCgDYqEzEWp2uw6f6+ubXJDzua/sbZLyOa8+s/vBHTVplzA6kRixeZzBUIFSxCfwpciduvq44ShSppXu7zf3RmJnD3f9YV9jVCq4rSB7lV5JsTCShaoEhIoi9nZPHT7ROeT21hbovre+skDEHw0Gt2areTgLXgLzUoIa9ji8sYgjEikUStPTBQve4LTL/9jmmpMjsxG7d9uKgqkQfUeZ3uYP58WZ+o5Rj0I6lYwNOP2XafrQ4bbB8QW6WvXdyuI6g7rEoNz2zOtjc46ttfliHrmuSG+QCd890Hi6beRbd6xZW250ByO/O9zs8oUfWFO6xqiuN1vdoegnPTODHo+727ytWleiV1EY5o3TIjYBQ5AnFP6v144PTds3rC24d115z+CshEdlyYUAAJ1EsLZU3zZnjTPJWpNGJeSKKGJw0SUi8S8cnckW8Vbo5X9rHwrDibosOSkQtFn9TgQ5ebilcWCWjSF5Wmnj2ILVH9lcoAkmYvFk0jLvVWcJuVz2jaUmPsm+NLEw4/DW6RXnJ60Jf/ixCtMOrfweg1pJEVwMXfAGERjms9npOOM0EuAoZg0HfXHaE6NLNMoivWLvuZ6GnsloPF6iV47P2H+6v37I472lKv/y+ELP2Hx1ge7xXXVLSSAjEkM3mzRCgt1ucY4sOm8ozdFJhQc6hjrH5ouz5d44nfYdSotPESuL9QBKfVzf99L+5jOdY+/++J70V5k445NjFhaCyLmEBCdjSALAqTODswGaebt5uETKjbh8j92wTCXiVGQpf3+i/f3jHUaNVCvjQwD63fsXlhfo1hRlK7hksUx40bw4bPOs1srypUICQxe9YR6LLZARN6wrwgD68xO94oB/e23+3xt7zvdP1eap2BiCwIiMi281KIsEnL0jc6RBbkmlRt0+KBo2iMQqipMJNdaK+cVa+QctA00jc+XZKhQBaSSArumQr+u6/rmu88B/gi4MTj/8xtF5FF0A4Nt1RXou4bB7vQueoDf0xK66r9+6kkOwwDU5fJYqMxWQJxDjCJx22sl8O+C2F4tknlDko9b+u1aWGhWiCBOjmZiGJ3i3ZQRKJl853LK6yjTmCa7MV6zNVodjCas3qBHy8hSiJPhiP4SlohMxBEau7HaN+wSdYE7OWLU8dDXFMg8PxuNxGIIgAKQi6f5DbUwqxYLBgV/sRnDo2hUG/n0eSAHgDkb+dqJ924bCEokMAiCSiEbiNIdFLt3t7KVxW4B2AGxDrtLhC75x7pLZ5n18a7WAvJJdHnw5BixVZoeGkfm9nWPPPrqhQC3/xelLcy2j8WQyxSTzNIqL3VNnukYfurGGQ7ESDBh3eJarZXwWQV9FlMyWAkAt4OwuNa7LV895A/OJ5HtHW4YXnKvydGlDSoITc0H/XDQ8xoXXFSimeiYH3c71+apIKo5REJ2KH2wbbuyd3r21DBDAQYfsdEhGUMF4dMzvTgcQZypMJ2L/Dgy4/OFXPml+9OYVaRhIn5mvH2juGrFtzFI9ub7o6+uLnt5UqtByTUrpyXOXmlsHL0zNgcXQu9+7vcqonA+E8sUSisX2RoM4iuRJhceGZ9Kp3zVcXpoK0glzIAAC0YSYT77XvfDa6e5SlWBq3jVtdd+zuRIAEIgmXmofrNFLhRwUQsG+s31TKj4MgfVaZTSWePUqDGSqnQIgYz4vbU7aOEZhuEAulSqpDxr7pxc8RXrVqx83//GDegePFEGYPR7Nl/LXFmWtqzDCCPxhy4Bn0S8i8EGX1+0Jfni+54ldK6WCKxhDX03PmjHBM5cylUrBVx+CEa9TzxHOuvwmqSiVTDUMznYMzVltobXZohm797Hn9//yRLNKIzrwnbvuXl3a0T95csF9S1E2j2BHmTh1TYYuOx1SkByNTBiORH/yysnicrWay1va2Ex90u2d9wbveulAWzBx5/ZKuVwwHY4dt9j63T44FF2pVwlInEkls2Xi7rH5YDi2Il87t+COOgJ3V5oeWlUm53M2VZq4OHvv2R4MQ2J0ImLzvDNlTaaSORIehkAIjPYsuOrN87dUG+t7plbJhRqENTg0KyvRQCxyuH1CQBHP/9cug04hZLM8YXrRH5rzBtV8Tq5MzELQKBPDltg9aaVZjkCRFQYZAjF9ScCX8MGCK18vKlDKAABRJm5zBm/6/t+mxhdu3Fj2wbd2KwScM70TGIZsN2gExKfkn5GUoCQ4x0GH0/fbvDf4VtPwtvKcjUVZGj552bbY6qcfqDAuz1JkydivdExYR61P3VDzlSKDddI22z/z1I3LHUjyiaJ8vYSfAuB0x6hCxN29vuxg00CJUUmysWyZ4Ma6wqbpeW+EFnGI95v7t5bl3L2yWM6jlDwKRZHvHmsDLEBCIOL0K9dXTIdisSQcpWMW2jM17fqkeZAU8365Z9OqPJ1GwavK1X54vruhx5wunEuy719bLuQQH7QMlGhlXIItJNlDi+4vQ4L5iF8j4R7omzvrDn+/tuA326oTTHQwBbvZ2L6Pml7c3wyLRToOSgnRPIG4UCP/0XsnvrFlpZLimgPeZRrVusJsPsFqGZmlXd51RvUbnWMVCpFGwBGxWWISF5H4uN1tD4YFJBtHsQwSeGK0gStQkNwRrzNLIFhXYQQQ+Nuxzjt+8s7ZjtG4n2bRjEIr2VhmrM7X9k9aURTRSPnXVj4tFY8qU4lPTVpPzNhHLLabynIhGPmoYzhbIIqh8aVIAABQSfiry/X5WTIJn0IR2KD6NB2cnEuYJPwTo3NdFqdRzNNyeSAJH+6fazfbNFysZ3Dml1/dKCRJFEa4BHtTiaF+0vLKqY7mjolwLL7/Qt+vH9meLgdHkTRdnBq3sBDEKOFzcbbFE3B4I1yM+OGJblfv6Pf3bHD7AnSAztdIf3eoZXNpDoEjGIwkATjU2H93Tb47RCOxxNosxXgC2ENhOYu1NAGRjs9fV5ht80Xebh6SUGy5gGRSV2ZgriPBdf37us4D/3dr3hPY89KBZw9fpLKVpRrpDrWEDUFFUkHP0NwTN9d9c/fq9EBRWmm//KWGfgYDMlMBAIAUSGUseCaVGvI4cnniS+aFkz3jd60sxdlwPMmQKDsFwKwrdHpo/uV3T4d0Ylc08fjaUi4b73Z7Xa7AcoNSQOIQAPEv8UvOKD1SGL8mqX9adJy5vOCoU8sUFOeT8fHk3MwVHoCg/ZccMM4GIvzQb++rUqpkX4Q6S4v6wm4xddWYcHiDv373bGGBYlNeTtqdGgDAZX3m5eGNRE+MWYpVosOHm7vCSZ/Hc3NV3r2rS3EMBUt63n+n/03v4w3T/3OoxRGDirLE7kTyjoqcx+9ZLkDZH57tufVHf8dQ5Ad7NhEEGkskhxbdRQoxinzGq2ppaelNI6B2FGRVKMUjkVitXvF2Q6+QxLNlAhiCUqnUnCewOUtBoaQ5zDQf74FjqSKpNOSN/3HvxQPB6MO1hTiEFMqlWVy+jKDGfa5YMmHkiTLpIMEX5YH9wjPs9odfPdjyxK46IffTddAuzzucAfqZzeXf3FCSrxCIKByBoTyFlJCg64oNA06PdWQxwSTv2lhBStkFEsnIohuBIRFJJVIMC4EqNGICgxunFt2hKIlhaAo9PDjZOLb48rnBZrM1GmXW6qUtzf1/ONcxObF495ZKk0riDEefvdi3wqCcpxMN9sCR/lnHuHWFWnJLac6IxfFx6+BSGEin8YavNiRjZUJXYSDTTAnB2V5sSrBSb1/onYsmPAtuaMG9qTZnzhW7ZHf66ZiKR1lDkYfWlUv45D9Odr2+r2nKH1pRZcqRCnjEleWBM/76n4vohQCAICh9aLPfncsXW32hlqkFGEG6F1wKAr807kos2vZ1DJzsHsNYKBaIt/z+sdJshV4m3FFhOtrU+4dL42qKbZKJ0p7rS2WnQyI20TE4c7J99MOz3QgDNEahguIubeyk3+ukg/kCqcUbvO3Px5Mizq+3Vj1RZtyskohQVJ1g1Ai6uSCbxNArGV0hCIXhl/ZffHFfk04meHRrVTAclXIpFIEBAFqZoNio/J93zl64NP74LSv/+6bqOJM8MzZPsdG3usZm/cFtRap8kRSFkBcPN5vHFx5cv2yVQjY6Nvu1TVXfuWNNg8N/we7aP7MQdHglFJkvF2WSFKd9hxIpBr1KBQAAGIAoE4smE9OBQJfFM+EK1ujl28oMjR3jqiyemCCsruD2Z15PJlOnfv9ITZ6mz+piEGhLiaGhZ1LCJbIkV1bcA0ueqfQmI6hhr4OJQ9t+/Y/Dg4t//9omHx37qH/KhWDcgH/O7VeruaVihYFHvTw8bQ7Tv//jIQyCblpXgkDQ3dWFzlDY5g/jMLK/sW9tmXH78vwSo/Ll/ReLjUqcjXEJ9p41Ze5w9NcHGu+sK9lwdcFmHx3b229OiKhyDtY276I84T/dtvqOXJ0AwM+1j/Y1j8063Tm1qnvLivkkDkEQCiMwBnLVsgWn/8PzPcuLstLDAVfc6k51oAikl4lwBB53eJY6DiWSyTGfq9vlGfTF7OH4Rp1yrH+uccF+e0mWXiSQEehXl+X2QEBsUIzM2Lr7hy2zPgGJz9k9IA65Y5FirUKCk2knFq2Yv63UqBPz2sbmzrUP1bsC5ybmV2fLuWwWCsPpBESTLh8MAR4bjyXjTCopIzhTQR8HReUkd9Tr5GO4P5GstwVnxmbWlRt//JUtH/3ifhJndc/ZdFKBVi44dHGwvnuyMk+Tcc78nEgM3WLSiHH2/sHZFy4MDVn9iwHm+ZOXLQu+QqPQE48spQIURgxKcXmeat/53obeKxyV/ipjyh8dnkulwO8vDJSrRflq7qH6/u3rijUCroi6MvPJJdh31hWX6uSvX+xpvTxRlasVcIjPvHyX0AWTShUrxNOe8HstI0YOxsHRB++ovqW6OFcjbe2fOXym9/2ekRy52KAUtA/P9o7Of+PmFdtyNToedcniKBPy8gS8UbsnREchCEonIBrxOqOR5K+PXLq31lQ/PNM4NFOik2MYnHHKAv/eW+m6/h/XdR74v1jznsAdL+6zU4RALqL0ku+UmnYUZtsWvcdbhn+4Z0O+7gtCBdJTBF+IARllTHMmleq1WgUI/oejLWNW14MbK0gcJVF2+tt4kmmYWLhstVt4+MaVRWXZ4m6PL55gisW8aq0EQKl4koknmfSeX7YF4xEERuJJJsrEiasLJGV6rliCGbQ68+WiZCr1yeDUerV4bGAgwwNly8pmYsxHP7lrmVL1ZZ3dP+GBpe4ZEAAPPvvhoMv+3L074qk4gbLTZvfSf/FFYn/vHH1wecHqwqyfvXESYTFvPrGrQC39XFHg3+t5IQA8Ifr1c12rCvUnh+cZGPx4U2WRSuKgQ6tM2RiKBMLR55+8SSbkJBgwsujJUwgSIJ4CKQ5G/JNi07amVsC5qVjfMms/v+B689DF9on5kmzZlN1frVURCKtj3rY2S/nbB7bGIvEXPmh4/r362TzV0dvW3bEsF2dh854gDEE4htrokIbishEsXebn8oqCJfzzud8zMCBaEpHsDtP7esyPrCjIl39mop9mYjhgHR+YeGRD1e61pRanz+4Nbq/IF3EIEUVMOrxWX1DKoQCUIlG2ksvxRGLnJhb+dKr3wui8EMfzFILqfOGNBQYuBu87c/nO9aXJYOzC3IJSwBXyqd819NIIMpKIl7GI23JUcCTRMTBdqJN1mRfmXb6vb6tdCgPwNRcubQiO+lx5Aknmq/SeCAThCNYa8A70T8fYMB9CenumJHr1L7ZXaoWcj/vMWwuyRBSukfIJNubyh996+rYcudAZooUkjsLw57Dq2iQ/EACjXqeJL6bjibMjM5dt/kiC2VNh4qDwrw92xKKBb2+qrshWel3Bj352n1pyZayUR7C3lhtONQ9csPunHb46vYK9JG0Ak0xeHJp++0jH7KJ3bYXh3Z/ci8Dw8aZhsYajoLjpg15ZYQCnrMHA9w53RFOJF29YvrVAx0YQKAV8gXCxUlylVQAoyVwNSwAAWOxei8P3zd2r79lcycFZUi41ZHWKSCKNBCQbq87Xtg7OlBmVJo1MJ+SRbOSPTQP/H3vfGR5Xeab9nt6m9xlNkWZGbdSbe5FtLNsYG4wNhE4KAQIJIckmm83Hl90sSTYVNnQIPWBs3I1xk21Ztrqs3nuXZjS99/l+HGsYbOPk+7e51vc1ly5pdOacM6e857nf537uJ0PErEtXjc17fn2q47OWkcD0AinmVBhUZ5sHf7RzdZhOqDm8MpmQjyK0P7QhS2uUCrCvTmmzcvBgLIwsVVIGY+FYHGqzzV4aslaopb+8rVTMIbvm7Xop/6W/1TJ8/M97axERffj/PqyTC5yhcM+81RKO5siElbnpnzX0XOybKNAq6OscYNnLeHzG8fL5lvkI4e0dVqeJ223uUrXk8WU5txdnxpDY4LiVQBCXw7fv4xrPlLXg9tKdy7NWpiuX61UUjqUJuN5Y/FTv2F8+rnnlh7sAABSB5RuUrx68XGhQ0gQ27/A+/sYxWwSdXbBUFRlpAnMFwx+1D5eoJOu0vJ3Z+gKFqC8cLUmTmK2ut040Rc3OjatNCpmoQi0PQlEpeXUMbx+c/ehMKwrDd6zK21vdnoxuaRwr0Mj21vXU9k+WGpRimhpedEQTCRrHzs/NdTnd5xc8fIIoEvD0DN06Znl6nckxNte66CrTyRMJkC7hV5l03eHwuM2Ro9dsyFKfaxnqGzOnK4Qn6wYKitMkJM1SAlbEopUIthYZS/SK/qGpy22Dx2btRWIua8XDITARTY5anQtun5Sh2USBPRTk40Tj+GLXtOP1xh4hQ1Rlpb3x7F1SIdM9tlBgUBbo5AVa+ZHWgabhmXWm9EK9cv/5DhxDbygcYqHh0bcZ085NzHD04jQoEZmxPLih4HLfpJxmQljsmkQBhyRWFetoHN9b3U5gSOpq5VwqRyp4p2no0OgUrRV/cahRUmrIljGjDsekzasT85KXZYZcuGeFqWN+MS9Dfvxyr0rMS11Pkl2cG53/VfOg0+LVCqhzzUP3bC+jcDSKxPJV8i0V2SsL0menbO/Wd/3s4+rZCesTd65gDVLlXCpfJqwbXxhadGoFHJ2QN2CxL7j9Ug41Muve8945bSz47K4VlSYdhyD2N/QW6ZQICmKJOLakGPxHHky38L8Zt/jAPyvMbv83Xj7k4jHfK8+uUEn+fVVhHIu++Vn9/KLrufvWJ23jU2EN+v3RsCsSMgkk19OAJDAY9V/VDFiQEPzDd0/uXm66Z10ujeM0SgAA/NGQNxT68HSLLRp7YHn2H26vWC0XCFCMG0lsN2o0HCapSL7mlbQ4ZF/ReIyL0+zvFIqzvQuiS1QhGI0OWRxZchEMQcf7J3fmpYv5nOaGhqt8AIYmAfPCd7eXKpTg60e66/lAUloApbzTNT53eWxCitAMjZk0ytSGwSycgfAHrUOPVWQLKeJ0xzBHzHnne3elibg3FAjdfNhlQ2enP/j2uda7V+QtRPzOUPz/VpWplduZcAAAIABJREFUBQwEgCXoS4QSJ+r6/uM7W1USntntH7U681USBicgAMEQ/HU+MEmwWydRZJ1BVawUN7n8Iin3k7NXyjNUkUjs8sTCnXmGEBKWU8ys1f3CB9WxWHy9RHB7iVEj5fMpQkCTV6bM8x5ftliEwFe7QCTFLcmt3IQMvPBh9aayTFO6PLF0ZGz+4H/XdueKORXpipQ9BcFY2OuPvHG25bsby8N4fIVeW7E8PVMi+ex8J44h6UqRQsBBYXhs0UkgGIImEBgV0OQ5p8fscN2Zn76zKCNTQafz+YsR7x/fP5+fIb/cOf7cves+eHa31Rf44FLXplydyxW0z7jaJxffvTzQPW3NylA4PJ5H1hc9tK4o1aX0JqXu1qBfSl4lNomlJRdcvp0fnAVm5y8fWnf36rwei908Y3dOL+xaZYrE49vyMo72TqAAmpqz13aMvvD4Nimf4ZK4kCa7Zxe5NMpgXzZ7ZpFKCeKJxKDLliOQ2PzBl+t6Rmyuxypy7spLpzBUyCH21bQ8Xllqt3li4djvn9jOtlsGAIRikVgiIWLoneXZw6OzBongP8+1bTCkoTCMo0hDz8QbxxuGxi271xU+srXcmCYBAGSqJUUG1V8PN3pAWC8VjbjtOQIJBEDL9OLejtE9xRmbM1Un6/pytTJnIDjh8JgUIgFFhuMRAsGSZQk2t39vdftPH9xoylCwlwGKwCKa6k2hBDyGXFds+OxC58X2UZJD/bG2p0IruThkfv/y8MXhhfq2LsLm+e6dKwvUsv0NvY9sKjUoxGyGKhiO+f2hSoNGmGL0fg0QGAnFwvFEPJqIEQg+6na8enF0d5FBysfdkXC5Uk5g0Ic9U5fOd9W0j39je+lLj90OIVC/2d40tdAHoLVaoc8XUfKZrcWZBIburesu0MqSM8QAsEpC/x+O1XVOWypN+tmgl4Fhv5BTZVRVGlRjHmsgEanKzMRh+HfHLr17oD5NIfz3x7emiTiWYFTIoYQcKhSLD7l9R0dnL4/Mm4TcqrIsBIEhAGgCY7MENI3/5mi9HybGWvsf3lJ+YWCCJPETA1O7C/UwHi2TKGkcz5YJDXzmpyeb65sGVxXps7KUG42atUa1IxI0CaR9zkUsBv9p38XRWdvd6wtuX52TIRcXGBSvHKz7khIQWGVeBomhR1sGCnUyEU0OWZ1vjY2jMF4qEd6TrjIJuDKKONg2tiFTVagR7lhmCvlCz+y/uLskc9zl5dBEOJF4uFC92ahtmbMtM6gkIk59z6THG8yUSaIMYClBMlEAANBLhQ+sys/Xyj452/pBTftQJL5KI2UIjE0UROKJmuFprZDXMrF4edjyYnUvl8LylaKnV+fnyIQBJCQhaWOahD1EBIZkqaVrc3RSAad+ZGZDQUZJZtrRSz1nWoa4NJGkxNeAwVFOJNY3stAxa9Wsy70rP21Vuvpwc1/zwGxaGldOc1IXRiFEJmGKDGmfVH8puGL/RaDIpkxVhUL0bk3XRNvovqd3LkLQVCQ8HQ0NO7w6ikr2eeRSxMZ8/Yn2kb2tffWNQ5OLTgFDqlJ2jzUkNfCY3zR0jbWNZqzJ9fNowhuyBLw4gbANE+7bWFysU8xP2rwEtLnIKBfS8NVaC4RtcdA+Z+tcsKl4DEhA/13d+Ub9EDY1+/IP77L4vEKG1ktF+RrZq6ebKRxPlwjD8Qh6ixLcwj+AW3zgnxIXR2af2H+R4dE/WJW3XKuozFQPTJhr2ka2lGY9uLks9WGWRJfd4omE5RSl5XzthEoSkXhs2GXjJqjdf/wU9UeLTDIhSXNpgo3Ubc7gv/71VFss8ZvbV2RJhRiMYhDscvtX6hTUdY3GrkFyPLpeeZJKG6KxxOCCI1MqioHYpYmFSr2cxOCuwenJ4b6l+gFo/YrC9aZ8dp1fp5K8/k0oJXxn1ca+UPhs1/DuFfm5GvnlzonKEkM0cTXmZhdzBELvtwzeV6SXcqiGoemavsmf3bVGJuCAlFVds4mbw+UPvnyy6cF1RV4k1Dbp/M6q3G6nN0/MgwBY8Hk/O9Px5M5VKIb0ztu8oXCeUkxiaGApIr9+LjmJ6w+CWsDZU5Aho7DPp+1/O1HfNW0pS1cuy1AqaM6V+bnv/Ho/l0tWPrb5iZWm+rZR9vmHIXAMi0kpZtzqEjMkgaLBlNrlVFxPgZzewKuH6vdsKDzdPHhlcMbnDxnSJDXDs/s6R00izrZCfep0dTAWDoXir55ufnLzMjGHtoa8bMmmTi4sMCj3nm272D5aYFBJeLSYoUYWHQuugIDBYgmoy+5+vDRzYNHeY7blySWzAU9L98x/f3xxMRYQ4GSFSeuMRvtsnoeXm75oGbi7xLijOH17gTYSDS3TSafM1j88vNn0VcvFm5yvAac1Go/ycTwpxgUAmN3+be+eEvp8739vxxp9eoFKvrZcZ5aLLUOz51qGnrpjhUEuxCDoV+fbLzf0P3r7sqwlUTICwzwK7Z63x2EgIK49pOyZRSCk17aYwRX2mh37O8cwEH9yZb5RcvWe7Zk2//bIZSGEPH77ske3lpNLeolQLIIjGArDEAAcAl+boz3eMnCyvvuj4XkeDP35w2qzw7ttec7atcZynTp1owyJF+iVB853nu4ezlPKJx3+//P5lWGb8182FudIhVohD8PA/pquxURsU7aWRK9qhJIfb+iZ2Fvd/szuNSIenXoYr6cENIFVlhhHre5/eeukFWDRcHxXkfbi9Dwv6J7rmXtm16o5sysWjz9WVfZFxzCBoRIe0z1l9cUiOTIxjd+4ZVuSjaMwEknEAAAjLsfrtSPzzmBYSM57whKKdoY8A1OLb7591p2p0Oelz/XPTFgdn7cOKylKRBKXrK7dWpUz5P3s0kCmXNg7Mm+xev5wrK6qyMilCXb9dq//lVPNVYWGbJXkcPdMRZrEzoNHWvt/fMfqfpelWKJS0FwAwPSCo613OtekqFxlkkl4lZnqSmPasYHpUzbngMMTT4AKKd3ZMLKlPMsZCiuEXFarQxNYMB579Uh9abbuisWXI2LWF2bU2j0tvaNlGinDh4vESvbL2t3+Fw9cqr/Y3WNUmrHET1cWZIh5MAQtBv0inJqcsB9u7t1YaLz/thKFiMemTXgUVaBXvHKortCgJJcMvtJE3HyN/LUzLTSJ6aV8j82/TiPPFlwtI+mcsU3YvVvyVDiMNfROHKvrravtqYmE12nlV+zOzRrRSpVKyaOL1ZLGefu8P7i1IGNdkb66dbitd0ah4csZDgAgSQlCsSgKw4u+yHwgEcUZl3Xx1KRFyWdIHPUFI83TtgMdk7870+WJxdQSzjfXZqzNkOslAgAADEHJldAElq+/WmRcYFAaFKJ8rfzN6tbSDOX2lblcmjh2ubexd9KUobjmwcfaklod3m9vLLq72NA7aTm56JLGYt9eWyzm0EcaB3wgbJSI4JSCNRRCUAxaW5JxNVGAfyVRsGB2jnaNq5ZllaZJqtKV6xSyIqFwLuDzuAN2X1CypL+iCWxrSeaqLM2o012emXaqaaBzeO6a3dMJmBVSwcmpxR+szisW8eZgqNkbgRNxEolfbaMmFz68udSUJj3TPUpjmFxIx0AcgRAopfHZZ93j9SNmGY3VVrc8smtFjlrC4RKOUJCtKMjXyD6t76npnyjWKREU3KIEt/B3cYsP/JNh0Rt46uNLLzf2FFLE89tX3Jari0fjL+2v7Z0y31lVWKZLu2Z5fzTU77QnpUEQdOO+v9dg2LVIA/RPnzeSAtEPd5R19c6/8tnlI7W9Cw5fFMD/8tbJEYY48kiVmEMBAMxu//iiy6QUf11Pg1Swg1EgGoIAlOp8kopQNNY3b8uUiaLxxOmh2Y16VTAYff1g3QcnmtLpYCwahSAIguF1K1ZKxF+Wf90wLo9/9c/rl/EFQwdberaXZ2fKpVq58IvmfoJAMpWy5Efs/uB7rUPfKDKAROLPx+tHzPbvb10u4tLXy0uSuPmA6/IH3z3f/tiG4iAcbRi1PVSSmcajR30BFIJFBLb/QuemkkwRlx6zubQirlEmRJEby0tumCi4ZtMJAHrmLBqxoEwtbXT6u9z+UxfaGoZnErH4U7/+jCOmZHkKVabuZ6vyCgzKVw5cRlE4SMaz+GIeSYgZqmfOCqCEiKSuqfH+uuTAHz+9uG1lTkmWekOJEUXgD6vbn3npcI0/sDldvtaoTvb5AgAEY+FAMPZxXdc3N5ZwKCyaiDlCYZPwaphOE9j6EiOBoXvPtpMYkq4UKQUcDIHHF91zodCkP1ilkUqFCINjF0bm5Cjx3Rf2OdyBd398X3auYt/5rssO1883lWZI+MsMqn2Xu8r0yuax2RUZyku9Y/95b6Wc/5VJQfD154stG7CHggqaG4qFY4kYBiNmt2/nh2cFXu/739upE13VB8soJlNC5GVpD7YPVNf25epk8Wh8pHdqUcwhECRXKSJRJHH1gowtRqJdVkfv1KJRImBj5SQwGHWEfDN+1ydt43Nuf6VeySfxYrUMAiABEhCAznaOTltdj20uvb0ih93tUCwSS8RZ39IkSAzdUmRYkak5VDd8ua5n7YrsezcUFWYoHJHg9WU2kXhMoKM0POH7F6681TzlCHv/cvdaGYdib59ILH6yZ+TRVYUSLpNKBmxu/x8+uTA6Z7ueDLBIUgLhEiW4PGl+rXXIjZKmRPSuUr1OzO3qHa+bsAlQBE6Ap+5c8VBVWZqYl6uWvXyq8WLP+NZCY7ZUPOZzLgZ9IpJKjduuycslAMBgZMTlqB223J6tWZUuG5iwGYWcz6YXGm3+N186HhVTL39rc45cVO/0nTnRWt8y3DI8+2l1+2Tb6Of1fWfrBjv6p492jnx66sqF1uGxcUswHl9h0tE4ZvcGXjnV/MzW5VlK8aI/UjNucSZihShR3z6pMwn4jFBF0wCAi13j71/sfGBrmcmgqG4bnre6b8s3SLg0BsOfNvTfm6vTC9BMnviV/bV/ePIOpZDbN2+NxROBcPRPn9fP2t2Pbio9XtdnjkOVuWn7escfKTUWG6QXu8f7x60lGUqGwG1u/x8/rakw6TJz0mQAszjcMQgKBsNhNDzWv/hJdduk2fHkHStDdCIpHGIpAZeiCgzK1w7XFeivznZDEETiaL5Gdri5v6Z3ckt++qzd7QiERAyJwvChjokStRBJwC/trxmbs9+12rRrfUF74+DnVudOvcodjGoFHAyB2YlqAU122t2rDKqdq0wMiR861+2DIka5OBnNnx+fPNg6teDxP7zcuE4vPtzQ+9ym0h6755dNAy+e7LT4QsJsaVq6mBRSEARCIJErEIbiYWKp7WBSgKQVCCpLDASG7DvfUWhUiThUgVb+ZnUrgSLLszUbS40oiuytbnf5gjya8PhD566M7DvfMTpnq6rIemhzqVrI1Qi56zKUZotrebpy1ukp1srK9aozHaOHOwe0Kr405aZAYWQpUaD6tLqjpn2kwKCiCczm9n9ypu2hzaWbstUtczbWd4hG0QKRMIJEuRg+anWKGQpbuqMzZEKtVHigZWBDiSFbLTl4oYvAv1Q32dz+T891/HL3mo4F+5TLtzld+e1sLQLDNldAiJPmkJdNsGgk/AKtfG9dd23vRGm6CkGvegcBAORcqlglea2l/4v+KTkC81flQB4fn8fFkauGpGyRMYEie7/qRgr+3hPqFv7X4hYf+GeCMxB+5rO6Ebv17vyMHSbdwXMd0Wjs+OXeLcuyH6kqs4YD19cK20Mhlgmwb2JLWqAbrp9V7Aw5rTyIfO9c565l+V2z9t1lWXcsy12xUn9HWc6C239qYDou4316/0Y5nwlHY50zi+5AOE8lIbB/iAywA30sHidR/IZB7RIZEMbiiS8GpjcZVOFI7K2jDZsrsrdUZI0OdEdZPgDAyhUruVxuUshxQ9x84PMGw4eaesrztf54dDHot4YCJIWeuDSgyxJbgj5ryD/v8+5tn3i42JiIx9+70F5VqH9wXRF1nbz4Gtzkvy5/8P2ajvvXFJI4VjtmuTsvg0vgAAA1Q12etVptrnGLY01u+qTDk6eUsKWT1ydSwFIu5fpEQeqmEwAsuNxWfziBIO9PWTzB2IO5OjOKmH2hA8ca/aGwG4FWbV+zJ12UyefRBJanV7z7RXN770xJZhpN4igCMxQ8bvGY3X4RQ10TuSbjsOQWWwemphddu9cXgkQCgqA0KT9NIeyFErHpRSoGVAJOsrrOGw34g9FP63seWlMkZGgURoZc9iQZAEtnUyMTFBqUnywlCqQ8RsyQ7RPmmWgAg8NrldpMkZCA4N/WdvVdGV1bpP/Vt7Y4/OFPJyer8lQlSjmFojSBZchFL35eb0qTfn5l8Cc7VqVaCV2z/9cgWUPMBiVymovCyKzLve3d00Kv773v7dSIBMnPBiLRWZtXLqWfqCx7vbb9gwMNUwv2h7eV/2rHygQMVQ/PGiV8CkPYUznqcZ5b8JYoRB6PPzl9ziIWT1yemW8at280KKsytdMOd7ZMyCOJBAAOd+DNo/UHzndYY9FH1hfrJHwAABugJ0OEa5AuFdxXkfl+Y/cXABmft83a3LlqwfV8YNLn0tGiSb/v9IRNDQd+vL08TyGOJeLReDwUjY7b3GVa+d7qK2uKMlLJwCsHL7Me8De5HVAEFtJU+7Q5mkg8f+bKsf4pU4H6iRKjQszZf76j22HRUtzOxqG4UfH247evyNGwn0oAYI9FI8HY+yda1hVlZInFjnDAHwlzcZKlBEkdGli6VOLxRPXE1JVJx0PFmQo+kS7k8VHk9fM9gTlnz+kr6kz5R8/c3RWM9IaDfAUZJZjgrG3nljJgSnthz7p71xdmZkq1CikpEDIqISaX7fvRnSUG5SeXu0gC21vX/czW5WIO5QqGTwxO31OYsUIrPeJ0m/umLHrVvM/91vBM9ZGmpoHpeIkunoit0SgeWV3MZ4hP63vytbIMMf981+znwxPLFbLhcTOFYeuK9SgMx+KJU33jhxp6t5dkPrK+OE3CF3Cpj/dfmBdzXJ1jD20rFEk4a/O0oQT8waVuHoF/dKr1oaqyiYDf4kvsLtH/YccKEI3/vLr1xT8eDycS91cWPbC5lMQxKcn0ORdZSpAAAIWRUCzMo8gCvfK1w3U0SagkV/MANIGtzdWJGPJkx8iqLDWHxEYWXZN2b8PofLqAOXqhc0tFNmvwn6EQbSw1Vp9uO2lz3ZmpnnJ60/gcdiKcrZE90DtBIEiZXpmrk59pHDze1p+tkUXjiTcvDVrskdU50uVGSaFcppXwp2zOfK304fKcPBFvweerylI/kpe+W6vYpBArGQpD4EWXT8nlxEEMhZEEAHEAZEsCJBFBaeXCIqPqraMNGIpkpkmMMuGBpr6LfRMFWnmWWlJgUJ5rHf75m1+8uP9SJBq7b2PRNQ0KODhappJ8MTAlpInmiTk5l9lSaEwT8A7W9YmlNBfH4yAeS1x9AQAQDLqtNIsk0L3V7b5g+MX9tfdtLFph0il4TLIyOFPCJ1FEQtLmkJckkUmrO5USjCy6T/fPB0OBOyoySzLVB2u6ajtHcQydsTj3Vrc/s2u1VsJbppFxMKxuYiFTwtdyGQWHmbC57e5gCLlqhUQTWKZKanUHPznXLhdypQI6eb8zOGrkUOO9k4qijO0qqZ3Ca2cssQScI+AqaE6yvDtfI9tb33Opf6pIp0BRCLmVKLiFr8EtPvBPA1cwvLdjBIcSz29ddm9p5uiM9Zk/H/L4Q795cnuWRgpDkDngIxGERFCWCdywVhjcyPCHpQGsa9Cg084D+EcXO5+sKneHou2TjodXZkMQJCHpyaDn0uTi/ctzf1JZzCXxcDQ2sGBPE3DYOWzwDyO4FOBeH9QGI7HeeatRJkwkEsf7p6qMqkQ88c6xhmfuXpOpkYYCnp7uLpYPAAhat74SJ4hkZAB99QVu9GbqyxcMnbgycGe5Sc3jyShGRjFcDM1TKpv6JpUcXkW6OhIBn7ZPPFqSCQHw3oX2p6oqMpXi1JV/HdgF4jda8sUTDSuztCIu9VnP+L2FBmZJ74HBMByNv9nUt6FQt+DwLktXkUv86iYFA6mJgutDW284Ujs6E8fxDyYWMIf352sKpu0+HoSWKQTVdlckFLx3Qyks4X8nSzfstsopDkPiKoNAy+PvP9eZr1dAaIKLU2lCLgrDo1YnAsGcJcF96obY3+1u/77znU/sXEESGJtMsAdC/93Qa+Qzr31zK4WitR2jdd3jCAzJJExt99TR1sHv3lbBp0kAQJ9jMZUMgKW5cAgAisA2fDVRIGHIqCuAxmERB4VhaGTS8l9/ORbLVr7++O0LvsCrdT2u0dkf3bbKDUJs4Hu2Z9wgE354sWO9Sbc88ytSmZuQgUGnLdVQiC0hmHX5tr97BrIHv7Uqd4Mpg3UBggAIRWP9C/Z8lSSdz1+M+0s0Covdc3ZqrrtzcsfqvDyV2Cjhf9I+nC6iBSTd47CYBNIuh2edUmIQ8lIVNQvewDPH6hrHF3eYNCs1ChhODJqd5VoFG/L+/M0TWVpZeYF2fNF593ITl8bYit6bfAsAAJcm9qzMmxqc3JijvTht+XDB/qBBTaT4DrG0xxGIvNkysjM/vUQvP3ShT6MVKGjugsc/5fAUpsl0UuGVwRkEhrQyEVgiA8/sXpOlkd586wAAFIFhGD7WO0FD4MnKnEKBsMftO+f21no8UzX9F+oHGYZ88YntV6wOGEA6Iffi0NyhjvF9zeNNo+betqEZv09vEBt4fAJBRz0O6VJ3ahbs1l3B8DutAzOOwGOlWXySYOfFx6YXf/PKUSwS+cv37/rFnnVKAUfDUKg3+GCuoUwhbo3FuhsHVy3PbRo11wybZ90Ro0aytUB3V7E+R8Ep0ilMWhlFEn/+vOHhdYVZSrErGN7bOfpgiVEv5io4lBQJHz7b8/y6okpt2njX6O6VeQ/cVhJz+R4uyeGTGAajaWJBrkb80heNzmiQwEDrkOOLiWn7uOUbG4tYpXsgHD3U0JtvUFVkqHgUAQCwBiM1nsjw6dZANOY3KBfiUIPF0xUKelz+Qxc7711fuOgNrM/WHWgb+2lVMQBgbMrS2zoKF+l+sW3ZapMuecAlJNPvskrIq/00lrIEZKFR9e6J5qb+aVO6PClcUYl4BRrZvvpeAUX5guEXa7qoSKSle+LnD2zI1cmT6+RRhFrC2/txTWcifk+Rod9sT1ICEkUyJfyzI7NN05ZilXh9oT6IJNpmpvc1je8o1T1WkZMlEbIBvT0UiCUSQ7O2CqNKL+DelpnWbbbJKVLDZ3AEllKEjsPIGKp/wYbDCI5B8UQchZYmsxMJRzjIYBhN4Hl6xSdn22vaR0uz1DsrcggU2VvXXaCVi7n0yoL0LLVkcsHx6LaKjWWZ4DqQKJIrE1aPzA5YPeFwyBkI5yklJenK9853OJBAnkSGIyhbpI7CCA6j4Xg0XS4uMCjeOdE8Z3WtLdKzBCNZGXxyaDpJCSQk7QWhvjm7gsf0zNmf219/rmfyX7YWF+lkh5r6KRJZV6jnM+S7J5qOXOrdvb6gyKhi94qlVXs7R3EESeMzaXwO26PAC0LWoN/viz57oNHvCT62sWhfXfcnp1pFfEonv9od8oPPmx7cWLw1T9ex6Mzlc+4yqgkEnnd6MAhSMtwRtz3pRppIgLfPtxVqlRQBI7esSG/hRrjFB/450LtgOzE4vS5DcV9pppRD2dz+t441SgXMGz/ZoxBx2WX4OGEJ+GyhQK5AcpO+Y6l8gGUC9JIwvcdu4UPYe+fbn9xSIeNyGQI/1jlZqBaJGPLKlOVQ29i9KwwVaQoAQCgS65u3mZRiHnUDZflNcL0YPUkJfJHoke4xhstY/MFX63qNXMbj8f/5s8vb1uSbtNLqtuHDde2E3x6NRlg+UFVVdX1gCq7TEtwQsXj8hf3nbivIUi9VerFztzAMRaKxUy3DDJf6fGj20dJMkEi8c+7K01uWCRgyKZu5+TAKXfcLi6bhmcEF25pc3f6e8ZU6qU74ZYt7ty/4XnWbWyGiQ+E7C4zJMowbJgdSkeRU19A8XyT6Rc9wSzhxxeGdHZr90dqCcrVkrUGBRqK/e++Mz+81Lc+bnzIvjM3vLM3KEYu77RZr0J8vlOnkwny94uWDl0qMGprEwVU/ENbqxyfiUEkzjeTjxO72v3604ak7Vya7Gtv8oX871WLBkWdWGdVcnkElNmilnnD0WH334787aA6HHllfbFSIwI3IQBwAlgwk16+RCQqWEgXl2ep8rVhAUJNWD4HAv3jrZCgc/ejZXXv7JuumzZu0kvb2mX/9xga2MbPdFRyxOpsHpx/fVNo0PFvTO1Gg/TIYAl9zHsfczky+KPUdMUkPOq0/ONwQ90R/s3t5V/9MbccogaEamWBs0Tnr9JqUYtZzNh6MH7/ce8/tJQ+uLNzXPnDoVNuO1XlyPpMuoj9qG3VFA+UypSMc7XJ4NqrENIayippEAkw5vf9Z03ne6QnOBWgCFVC4mKb94bBSwIUBaOqb2n++s3/S/FBV6eXB6W+sMvFI6u+m/tkbgUcRm3J1hxt7b8vVORbcPm/AKBOwe8uSAasv+MfanoScG4ShqXA8ohBeOHHlaMypiqNlGjmKgGgiHgjGGnunyk1pgUD0tcN137t7tXjJPArcdB+cwfDBnvF1GQqdnHG5IgIMiwejrW3D9+gUi/MuMY8pXp07JqZUKHJ+aO7HnzZQJLoxO03DBW1Ng797avumksyjDf0FOrmI4Ugpps/xZXdqdrv2QOjjjpG1OuXu/IzkXWNxeb/7+30MRRz/7bdMOhkAIBSNTdlclQa1gqaMUsHuvPTfX5mcqO9+evuy25epH12WKxajZSq5hEMZpML+eVs4Gv/L2Y4HVufV9o6JecyxvskHSzP5JA4A6LabcR98/HIvnyYHxhee3bk6wYFmHd7KTA0Px6OJGAwjCAAcgpDJ6WN1g0fq+yGCWS7hHpiYvb8iRyvm2b2B1041PbfbeoiJAAAgAElEQVR9lV4imHZ6wrHYrMt/cXLh2+WGyuUZXAxfq5D8eFWBLAHOHGnyOLzFa/L6h6aXZSitHv+hjkklje891Tq14Hh0a/mOvPQLk2azw50m5LHFORAAUpLuX8oSgCVKwCHJjWWZGAKnmg4BACgcy02Tfljb+eqZlqZxV3DeuvuO0nQxlyLQ5GQ5CiMZCtGk1bU5W1M7aV6eoRj4KiUoUoppHK2ZnIuA6DuXx8zu2DfXZ9V1jJMwwg6wbLhsUsp+euhMZVEGF8M4OG4Q804NziRn2QEAKAyLGGrU6jR7/BIOE09cTRQwGD7rc9tDQQlJkzhWWWwgMORATVcoEq0s1HcOzvzqQE1VkZFHE+kqcdXynKNLvR3AdSBRZIVWLudSXWYXhiB1o7MZIr5OKrzUO9U7b85RSMmUEjgURkKxCJcit63IyVCKzrQMpa42NY6Xcyn2a7pjwVcu9HVOLZYpBUGb64ntZXqpqEArP9DY1z1t3lRsWGlKP982YnP7l5t0qcamqTkHCUOJGapvzs5FyfvfPddT0/bLByrLspT5OtkLx+vf/6yhc2xOq+BPmV3TFufDVWUKHsNaDw0vutZqZXIOPWV3L3h8GQJBGofLJgpmHL4nP64fnZrZWmxEUSgYjxA3mkW6hf/NuMUH/qfD4Q990NjXuWDbaFIWSCWAnZ87cPmutfk/e3Ajj/nSqKTPaRUTpIbztY1aWKTafdJfNY2Z93qONQ5+d3OZlMMBAISisVM9U3Zv4I91XR1Ti99cWyCi6D6nNRCIzTo8ecprNUJ/d3AJREPkV008WWAwGoiG93aP1fpC0/7Qn5r63TOeiyPmjtaBKYI+2TfzfsMQ8HrvWJ872duTzA+UlpYRKUWZ0D/GBFic6BgIuMI7VuUll0xOwxvTJDt++teuSOJbK3LFNP7Xc1ee3rJcwqXYJmhQyoZYXL+tG069zNo9T799oixdGaLAuM33YHFWMB6JxqMYjFpdvj/tq92zvoAXie4pyaL/YTKQBGvclMy0+CPRY52jLgrfqVWYOFQwGnug2AgBMGNx3v/LDxEI/PW5PS/tWa+T8sei8empBZNaGgBRkADmgFdGcWA0UWLUvHKwDscQrUwAAEAQWCXgIDA8uugUp9iWs9/xvz4+X7UsK3OpSBcC4IkDl7q9wYf1aas0ylND4190zxxoH++3u68sBlVpYhyK/+yuNeBryEAy05R6ANlqVBxDPz3XwRCESSvz+cOfNva3dI/85bldGIM3TltBIqHByYbOsdV56XIRd9EVqJ2aau6Z/Plda/PUssq8DAJD917uZinBTa5Vc8Cb6kXILnl5Yn5g3vnWA5UmlWBzaRaBoccb+t/9omU+ELwtL51DEQAAh8f/xpGGH9y9pkSnClPxb64uuTA2PTZuKc1Sc2lMwEMvDlp6zQ4eTfY5vasVIhyBWZH9wfbh2inzKqMM5THPr8mDkXjntL1maFrB46oEROv4Ym376K61+WNztghIdM2av7tpWepFfpOrnV2MIrBlBtX+S91bTLqGGavN7dNJeFN+F2th9Gpd7/fX5q1ViHZqFXlCrhRAUhHHMTS/LE8ppVmJTiJbLfvF2yd5NNnQN/H4jpVCLpUU7aTeDql7kgDAE4p80jGyKz89gkSyBJJxi/u9hv6Gnskdebr+wdmf3le5oSLrs9pu56ytlUu1BgMVQnpbfppaRq036D8+3frS9+/SSvhFOsVrp1oKtXKGwKQU0+O42ocuFI0NOW2HuicfKclMX5oTAQBMLtrv+Om7Dgw685tvigU0AiOLHv+ozZWnECfL2RkC+87KrAMLtqHW4ftWFfoSIRyBIQiiUQxB4Fg88dibxy8OL/71W7eJeMwfTzTevyxHJ+YBALrt5gKR/FTTwNvHGmkS/49vb0EQeNbpE/JxdyQkoZhoIobDSJ9j0Rr054vlGwp0+Wp5Y9/IqDeBTpodAkrJUK+faNpZnp2jlvAoAkHgtxv6RhzuzcY0mgttMhoQADV3TZgd3vePN+1aZcozqbN5zO7y3C+uDP7peH33nDtoczy0sfihLWUaKT9NwMmTi470Tc3bXQapkFz6gqnCIQAACiPuiI9AcLVMwNr1fJUSoBvzM7KVEqvV+pM9a8t0CmcogsEInyLZmXK2RqUiW33gQufaHM3poZnlGYoBi03FZ1AYZuf+ETRRplT85HDLTND/wu3laXwOJcH2n+xo6JkoNKjYbSEw5PdHoCiAaHjB79Hx+CUqCY7Cp4dmUimBks9BYXjC7pIwdGyJEthCgQwuf8TtYFMfGpmAIvE3jjXe+/wHpxsHFuadQ2b7lvIsCsfoJSPXa2xDU6Hk0YVK0WuN/WcGzKd6pz3hmE7MJ0n8bw3dFekqJoVIJL9+uuKqX1PqapNxfOOMFYLhSbv3SOf0MoNIwWDVjQPPP7hBwuUAAGgC25CXQWLowab+8izVUztWCrnUNcQsNecQjsX1It6E1fthXb+BgxEIeG7PahLF+TS1e1lu85zljoqcI7W942b7Q5tLJXwm9eOnh2dyZQKDRIDB8ITdLaAIJcPptloe/1uD3O342TcqDzf3F2hlIoph+8H93af2LfzvwS0+8D8a3lDkT+evzLj9z6wr9McjcophycAze9Zkab4MpJICIQhKYF+jLWHhj4ZgCEo61aT+q9tmqW0ff2BNgZRz9eE6ZHbWjZjPzMwGpqwKo8oCQIPVOekORt3+dUb1DQsGrh9ZksNNKBYmv2rimUQ0Hh9edKnF+D0ZKj2Hnpm1VekVlpGZrctzVmtENZc67BNz375nuUnA6+7sSPKB/Px8Lpeb3Ar4x5gAAKDbZj57afC721fQJM4unxp5n2kdmnP6ZuPoaq3oTOfIM1uWibnXWv5DKa/ruUHqTxbzTt/K3xwYbB5o6pmcpcjVcl6hRoEjKAaj807Xn/ZdfGBz6Zzbt60g4x/PDFwDaCnTEoxGDvdNWnFoh0YpIvHTg5OPlGVxcczi9H7r9/t6xhbef/7+7eU5AIBMhXhPoZ7Esb9d6tyQmWEQiuQUp31xjsEJMcNkaiXvfNF8oXOkIkfLzpkxBOaLRTvmLDIugyNXM86NvZMT8/YHN5eCpXPdNGX5oneS9McH5p0DC45YFEiFxMPLM3fmZ5gUvJlF20uPbeVRxNeRgeSpvB5SMV1iVO+tbq9pHwUA/P79s0VFBpNe0W11lRsEOrHgpYZ+8/C8SMG94PS4bZ4rvdNP7qiIInFWO3S1K9PJpnytnLnR3CG4rvUY+42svuCn7aNPV5p0AoZAcACARiYoyVKPe3xjQ3NtQ7MChpyxOPdf6PrerlViHgMAkFHMQsz37OaVHBr/8EyrH46v1Go3GtMIBDnYOzEPEmVivpDAAAAoAjMk3jKxkKeUeBPgnsw0ioJKVTIYirdM2t+o6T/UOvDMlvI1eTqxmPvbD6uDCPzEbeXs7iWvwJvcd+xiNIFVGNL+Vtu52qg6P7Ew63BlisTxROKFU60PlBiMEj4XQwEAXAx1ef1GCb8oR7n/RLtaK9LyhBiM1naP2jy+aDT2yO3lFIlG4jH8q90SUu+FBACJRMIXju7vHt2WpQmCkMcVf/l89xt1Q+Ptg2XZab3Dc7/59tYcrSyMoWGNJErgnMnZP28pXalWDFhcUoLs6J+R8Ji1hfoEADSB5WrEr51qLtDKKQKTUUyfw4ICuMMxe7bf8kCxQcp8Wc08sWjf8dP3bFji8n9+RyMRxOKgbWbBH4nmKkQkiiYPCwQAQ2B3mnRvD89cqO7YudwkoImFgE9GMVaP//kDtXMhZKteHIOgbovzvorsA429OWmSCb+zQCS3unyfnusQ8ujfPLkdxdB5rz9fKVEyXBnF9DkWeRg+4naYhFJW2oTCiFLMbC/Obh+evntdvknC+8P59r0jcw8vy9aJeZ5Q5EjvxI68dLvLKxERpTIlACBTLdn6k7cb+yZhFJaqRdsLjWsz1WIOVZmXkZsmtdvsT96+rLJQD5aONo2hxSrxqeG5WZvTIBUkp7dZSrAY9CfLCdjebfSSyek1M+gZMkGGTNg8MnNneY6YocaszgW3j+1ZxrICDkksy1a/f7J1dY769PD0aqOy32rzJoJGnlBBcyUkTSLIlXjkFytM3Qs2GsNEDFFRqJXSzKfn2kkcY2PoeDxxoXdid4lJQXO67WZnOJgvleiEnL2doySKypdGWprARDTZv2ATMzRbTuAIB/k4oaC5g06rEKdgCJpxB3p8kf6eMRiGTLet+Nm20sPN/fk6OYVjDIHlG5SfVrezlkQ3SRScGp2RakWJSKRv2nmkc3reHRu1mDUCTqrrAAojMIyEYxEuRRYYFHurO1JXywbiBIq8fGXkrYv9ecXqPJL65HzH5o05w04XQ9MS8uowzo4/b1a3mrSSHI38enYBlnIObzYN/PRAsycUzpRyTzcO7NlWGiTCfIykUIxHk9vLs/c19C7P1vSOLWRpJOly0TUf39c1hiOIXswLhKOXRmf8weg3369DZ2d/96+3V+iUy/Tq18+0FmhlXJJkKcENpa238L8Qt/jA/1x0zFi+u7/GE4r8dscqBZcxB3xRf/SNww3P7FmT2l6gy25JVgxfXxuQRFIadL2rTzgW63dauwbn7l6WK2G+HAfb5qz2cJAkiACBfrhnbZVWxkEQ0he6PT+DxlFwI4n8DYcV9s1IPIrB6PXhSzgaG7I4NUKuhssf9TjqBmaWSQRvf3Zp9xrTzILDGwjes7GIm8Z59rYVAj7v8uVLST6QlZUlFksAAIkbNZP6Ojh9geN1vU9tX8m2zg1GQ/5okINdPZ42X/DjztF0ufBKbce03/9fD9wm4tys/xe4jhvccK70gb8cskbhH+5epSrQ9p7tHBg1j81ZOSQxZXHsq+54dHv5lMNTki5n9fTg/58MgKXNRWOgfcYq42PZIiYQj5wbnl2TKQ/Ew7Nu9399cH5ZkS4sQu/ZWGAJ+tiXNeSnGHRjlv6tM60EhqrFfD6O2YKBOZ8nCMWK89NoCj97ZZgroRZD/sWALwZih2ZdXptbQOI8irA4vPvOdTy9e03yiWv3Bd9tHiBh8G9by57bVHhbrrpMJ+VwoAy+MBSJHG3q+z93r1UIOF9HBuJLR/J6BGNhEsFpEq8sMcbjiRc+ONs1Mn/XxpJzU+YdxVoezpijcUTC7wuGLvTPFAu5g7PWF/ZUZknErHaIpQQ0gVE4/l5NZ55GxiXxazZxDRlg4fCHnj3ecH9ZJkMCFXM1+RaKxkaszmV65WNbyhkS/93H53vHF37x6G3sRcXuv5RiZnwuCAVrTBl/+qjmkzNt64v0WQpRLBa/2DXOxZAipRgA4AiEjvZP3FmkHZl3jkSjUhwjkcSU1aOXCO4q0gsw2Gd1n562nuqf+ah13GFxaJSCh9YWpe5hMhBPHrcbMgSawCoMqvcutlfoFc0zdjgW/1vH6N15umO1PSVLwY3F43cHw9ly0WLItyHH8MkXbSEqbjZ7LraPPXhb6Z71xQxBROIxCIBANMRSo1RAACQSCQiC3KHIW80Dy9KkC37PuR7z4Kw9X8abG566p7Jwcnqxan2+WsSbD4cbLY5CISUlEneajJcahjYXGgoU4h8ebZwent1dWaiRCiAAgtGQkGIKtPKXTzUVauU0gckoZthtf6916u68DAiJLfg9fJyIJuITVsedP3vPjoOmXz+ukfBD0Vj/gk0n4qkENIl+pfSFPVw8Et+Zq31reLqmunN7Ra5RLO5cXPjrmStVRVldc458tfhg1+jjK01FGplURr9z9oqGw5+xOPdVd9yxyvTUrlUjNheEwCaFmMKuDmtikp71edK5gmQCDbB+NTjQiXhvnm3umJy/uzxnzh7+vHe0TC25MLFwT6FexWcQOh7yJyKRmIihzrcN8zjUnesKMnPV9Q1Dz9y5MrmqDJmwqshwqLk/Xytjy7jZr0NhaKFSfHp4dtbuuoYSJBMF0USMRPBgLHwTSqAW8053jvIoXCvhK/kcBIZHbS4EgpLkmSZxLo2fvTK0Mkve7/QUyCQzdp+az0ssVeIiEFAyhEnOP9I32TvvUjIciYwqyVAfqum62D5G4KjTG3i9uvWpqgoAgJzicDFsxO0IxCMmqehA71jnnC1HKvhSO0RTfQs2DEYwFGJ7GDMoOmb2f94//kpNPwSDLTlpbz23q8CoSjhc+enyTcWGt89fKdQqKBylCWx9iYHAkGum4VPBIbBtOZrPmgbPTppRDmYdmA7b7M9uW36id6h1ZDZHJU1+CgIAWaIElTdarYJDrVRJ2izWzTLRoUs9WKkhACFBFKqft/kjIT1vyV4Wxwo08ldPt+RqJFIe53p2AQAgUaRYJfliclYq4fZ1T6RXFdlhmHJHQng4FItJSJrGseVZmr113aWZaR+fbjvfPlxZYiSWTnpqyoIksD+c7nn9cr/EbnvjR3dLhIw/FtXxBfka2WtnWnAU0UmE4XgEu0UJbgEAcIsP/M8EqxF6pa6nuanv33esLk1XAABmXO6/Hmn84T3rJEu+jcm0QPKD2HX2Qam1wjekCsFItMk6PTJmu7PUxKe+jH0Dkejx7jGTWGCds778jQ0ihgxHYx5PYKVeRacoLFMHketj/eT71wS4yWWC0VjfvC1HLqJxzBkI/a1+SIlhP37pcN/oglYh3FNZqJYLx5zOH29dTWLo4uJie1tbJBqFIQhAkFarVarSwP/PQLbg8Hz/r0fvWpZvVEpYzT0EQCoZ+HNtVwaflnMohEFffHSrXHCtN+XNkUoMku80Dk2f6hqLYxTFx+/NT39258rCYpUApz482XqudejhLeV8HhOHIJ2Uw2qW/i4ZuGbsTj3mXTOL6SJetlTCxdCj3VOrNMoCqSQSiP3+wwuVZcaeWesb39qp5fLZ+mkZxViCPgOXL6TpAq38b5e66gYmy/RpAopwhEL5Ipmc4mQrZfk6xV+PNK3NzjCKRDO+CI3Ay9WynomFi8Mzh6rbn7tnnVRw9YK0+YIv1XbpudSzG0p0SxKOcDwio7jdVvNHFzqf3rJMxKEBAItBf6rHX5IMfB2vY8lA8s8Fu+dS1/jMouuCLeCOw85YDAYJNUnsMSjVFFl7omUoEXvl/o166Zd+oD12i5igYQiadvqP9879+nDDnnIjj/7yOF9PBuIA2DyBhz493+vxMWLuOoV81ueSkHQ4Guuft5mUYgmXBgDM2VyTZsfzj1XJhdzUsw8BICAoDolbYoGqgsyXD17+6PSVXWvzS7Sy3x5vj8IJnZCz4AkcH5jclKvIF0szJHz7rO2sy5NOYlAMlKTJw/Ho6bq+1fnp91QY12dJ6URiwBddIRVUlV9bK5nc7tfdgyxoAtOp+ccbBwuU4l9d7N6iV3oC4R2lmW8ebSg0KB3+4LzHl6sQQ1DCGQ5lisQSIfOnQ7XVdYN7KgtX5mewG0JhFIVRAsGD19lbxQGAIcjiCfziVGupStw5vxgIJFamy7go/Or+i3csyxqZtPznt7fqxPzT8wttVk+ZkBuPxG7PTDfIRAUZyjcO13Mo3MChTs0sbilK1wh5AIBoPIbCKEVgJIZ+crm7Mi/DHgz9V90Aj8FbPAE9l5vGcEfdzim7496ffWTFEnUvfCddJgxFY70LNpNCzFuqME51YUpG0jgG7s7TvzU8U32mXSbhfdE8eN+mghKV/JWL/X0+T2LCIlEIGT6i5XJ5BPlvH5+tvzL66LaKfINywunJlAmN0q+E/jAECXBy2GVPXtus3zEGIxNW+4WecTgBctLkbXNOcTh8etby9Jo8NZ/TaZ0rlqhAPHFuaOq3757pn1p8ctcqKxQ7fOJKMBDO1kiT88cJtquxVvbqqeZrmqbROFp0I0oAlhIFAoLElto534QSlGQoD7cMmNKkJI4yS42EJ1zeqWCQQZE+h40nIN47e2VDUbZOIny9ebBEKZuyuzQCHoliKIwE44n5YFjP5SqFmJrDbZ2xds06cQrcWZHLoYhzrcN/3l/bY7MXa+U5aikAAIURLobxcHLc7ZQLES1XcHZ4NkcqwFEEAgCF4QQA9eNzzZNmHEO/6Jp5uaZfyiFK1NJNhXK9glOWJgcA5GhlFTmaz853lGamlRtU715oxxBYLeZBACT1UV+nHWIwNObyWYfnvdH4qnV56aXp2zPV95bmOqPBI80DZXoVgV49kklKgMKI5kayKw6O5om4b9V0fv/2itu08m1q2TKpCINjYoKad3plDJ3sTpBKCW7ILhgcNYm4n7cMPb2t4n6jWsehxhLxk+PWQCLBxxNJSnCwqX/S49210tTUN5mrk6dSAjZl8WHvJMHB+s61PX73ai+cMEpEURBjK4zzvtqd4BYluAVwiw/8D4TDH9p3ZfCnp1sHhqyJKcuH/3ofAGDR5XvzUP03dpYZJSKQwgRuYh90Ta3w9Rti0Ws3P/92dXG6olinTDp8ByLR9xv6SuSi+vbRf9uzTsKlwtHYoNmRLRcSX20ycMPo/xoEvybADUVjvXPWPJUERxF3MPyXmi4Vij7/2ucgnvjL87t+sGMNQaAts/MPrSrikDgEwNjY2PDQUGwpPyARSwwGwz8+hMXi8SfeOHT+4uBLz9zJljWjMJrq3vPLs616LpWvFDcOTf1yT+X/Lxm4BmzMYfcG3jjXtjxfP+ZxP7U6rypbw2dIPxxbn60XcMi+Scuj28oXvIHCNCmF4RiMusM+DnZtRuL6CO+Gf1rcfk8obJQLIQBGrN4xm2tTpgqFkF+8fbLQqGqbXPjVNzYJma+s3BL0iQgSg1GawFbkqLgk+XnbIIniuTLpgMvKzqlTGEqi6O//dj4KwF6ra5dGbhBy4UTi4NmOohK9XsJno+oEAL+/0KFjiKq8dDnv6mWZjON/d/ByhSmtRK0E15UNsN8uDhLI1z+PWKkD+/uMxfmHvTWP71yxcUWOx+rcnq9rHrfPLgZsHt/pvumeGTtGxn69a+2YOzDv8UFxSMSQIxbX+ILvdP/UCyfa/MFwiZy3OLVwZca8OkfLPoNvmBmYd/m2vnOS8nj/tHv1coXkit0Ng3gkDqbtnlQx+jufN+9aV2BK/9KPJTXuxBFURjELcd/D60s/Ptv20ekrUplwwunflJN2pG/i8qR5Q5Z8pUoFACBRBMWx1uFZKh7PU0hEDNXYP3nkUndepvJs9+gHNV0Chnh2c9k3N5eArwF00wRLLJEYctnyxDKSwH764WnPot1NkN9eZRpYsK3M0bx/qtUBJzZmaWE4QSCYJeiTUczYrO3VTy6jYsxq8d65Oi9JNqAlYpBKCVg6Z/EGH9lfMzjpAnD8nhL9pmwVAhI/23v6Qm0/ANCLP7hTzGM4JC7F8ZnpxUQ8XpYmY311Wdn37/92vrlv6rnty/ocPqOUw2B4OB7DYRQCQCPm1/ROOPyhmknLzhztyJxrem5hCILaLY7LNs9v/mO/m4Lf+dFukZAc8wRnHJ5ipSR5jtgexqkV2MFYmJ0y55F4kUywf2bx+OdNT25fscag/bR3KIpC6uy0hpNt928v7pmy82nK4fSdutTnxsDq/AxnMFyikfNTrBSSdygEQVKK6XMsSigGLPFbm8f/aX3PtzaWbMrXH70yCCPoTCj4vRW550ZnJSK0RKoCAARCkUNnO9KNijyTOhiLbTCo3zxS/3BVWc/4QoFBSbGtAwCA2IBSK3vlayjBqeHZuesoAUgAVyTMYDgMQamUYN7m/uBU64q8LwtbKRw1pUlfPt2Ur5HT+NVGwjgCNy3az5vnG62BLruP1qvah2a7ocSR4XnIH7qnyDBmc4loEoVhAobPLzjKJHxHKJgjFqzQKDgE2rvgal+0bszSbl+Rm6uTt3VM9Nudj6wvZreIwsig02rgC+UUE0fiZUrZwZ5xdzBMoYg3FGmcsh7snDo3aB52enLTBM9XFeWliXQCruSrjZBZevPm0YaSzLTiDOX+xr6avokCrZzGMYrACgzKvTfSDjX0Tr73RYvT6f32lvLbiw0zLu8dGWkOX0An4OYrZXIF52jLQLZCkjySVylBPIJCXxKqZFcBm9v//qkrT1aVXZwwr1BLuQRGIkgmn++LBdJ5/H6zPbVhWZIScAjihuzi7WONO4oMIx7/oM21SiPbqJLu0qfBMGR3BUNQmKUE20oys1WS873jFZnq0y2DXIpIdisHACg4lIzA/trQx43FmeWZdhjymh3/j73zDI+rOvf92n32nt6bZiTNqPdqWXLvDRubDqY4EEJNIyfJOQdCyuGkAAkJLYZgarCxDTbGBttyL+qS1XuXRprRaHrvcz9saTyWZENy73Nynov/jz/Io6219uz6/tbbYApL4fBHXbb47gQ3keCmaN3kgf9dcgaC+xp6XjjX6hnUPbEka9rkSJYLzHb3J6dbnthREUAjUpIZHyA0X9fLFV5QbSbDI2+d728aauuZHJgwQRDQKkWnu8cONvcXSPgna7p/dvcKPpukqwllygXzO459LQ/4QtcUFIotnUIAdEyYlDw2/Vr975ONKRzqbE0Ph4F9+t8PLUvXtFsMZztH7irJ4TBmsg46OzsmJiZi8UISsTgtPR18nWKv6i9au6tqBpLkAjaTyFbLAQDekJ+a3bfG8enqQb1WwK7qHP63Wyq+NkzoBorNaHZ6/uvwpRW5mgu6aSpJ+NPiDNqiMnrdUCD6RVXX49srOifNizSK2CsnEp2bATIHBq7330AoPGx2ZMuFCAw7/cFzgxP35qcycbyqc/jQxfb2afMz25akKa4xeTusxhy+JN4pwecQeSr5G6ca32kb2p6ePO6105fZuNF2rLZnz7G6LAaxsUDLJvFf7jm5pihlUYrS6g/QFTPb9eZD7SNaHnNVhpoePwYDDYMTo9O2h5cVjTptBq9rXnVRAAC4AQzMcQ7c9uz7n1/q2LYqbyoSfnxNYXv3WNRq+9n2siUpylA4JGFhEhbzhxvLU8W8d+p699cMHLwydLlfz6eIdFfXD58AACAASURBVBnn1jJ1JOCvahp8bEvZovSEfZfbc9RSisDonqDxk+rt7s3vnuC73O8/cWuahCujKBKBL0/ZLF7fSpU8diPUdI4OTZh3ri8G14q+wmNnJx4JPvyyDpNJKpLFI053OBLOV/BTBDMrl1IWedhsmx4zFiZI/vxF1cGTTe12B4NANhWk/XTr0uWZSUI2doObOhY4Nx8gI9GozmVnIpjJ5b374wsCKKiRCB+pyK7TmRYly9v15pq+8SdWFXGYON1kwOhz263eu5//iEnirzy2rXp4LFUmpB0gMdFIQPdUjgIAQ5DdH/jJuZapafe9S7TbClQRJNo5PLXtt3vtw1Yxn3XwNw/KBDP1733BkNMfQCFIwWXR4ShRAJgEVpqhqukYWZShWpGe8Fn7aJKQSSAwCqP0vHwOc8/5lvvLMktUkjUpigwJ32q2ZVKMV188HOEzTj73YKvHd1Rvh8LhzckJ8SsX0dli/JFoJBQN0yQQI8xJi6O3X+cQ89rqerVqcZfBdn9Z8moef8+xOr1aqMPgy12jtbV9ks0FpIgzNjS5ozBNGPd8mH9Liklmt3Waxmmzy/v6yfrvbyjLUIjFfDJJLKjpGd6alXikujMvVXpBZw1EAt0jht1fNd6/uVSt4MMQBEfBmM6sFHKfuWfFgqv4N0aC+V4CJoZPed2xXAIEgi93DO05Vm9xem5fnjc3sRVHc1TS10/U0fY0AICFY2k8tt3sViNIgUxwV6KCFYqcOd4UDUDjHve/Lc8TUIwug1lAMYLRaJvVkcKmvKGAjGIHIkExi1GmkvEJol5vRGCoVKvUJEr2V7VnJ0iSpXy63ZiWw2diBAxBMoo97rEXyyWvVnW+fLbz5XMd024/P10sVwtUMh4PQ7NFvHAkhCMoAACKa4QMZpHg7S9qi9ISbilOi9UhpXCMQWCrZpfhA6GQVimqbOjde6p5aNK8rjTt/vXFKjFXxWeVKkWne8cL5cKeKaucw1Sw2GlS4WdXurRiwTVIAF2DBJ+cbj7XPEgS2L7TzU9tr1CLuOkS3r7WwViGtIhBjbptag7nBkgQowt69z6/1GE0Ox7dsmiRWoIjSGX/TL61kiJlLGrU5HAB/0zDMiG3JEX53rnmsnTV8dru/nFTukoScxTo9Jbh9lFepurx7OQyqaAvHG422XFvMF0oGHXbYt0JXj9ZTyNBJBq5XjOTm/o26CYP/C9S65TlP081dTg896UnCCnG0xsXvfB+ZVOvjiSwp25fihGwNxK0B/yZ8xYy4+UJ+dkY+bUkAACYdjlfOlw7Zo/86cFVLz9xizsaPNU48J3fftLi8e7ISjpT3/sf963ksyl/MNypN2XNqyZE62t5IBQJobNpA2DWTgIATDu9FrcvTcoHADSMTr1R1+McnX58c+nPd67mMslQJPLSl9VbctOSRLzYsD09PVMGQzAUhCEYQJBAIMzKygLfQIFQqMtibLwyet/awhSFqHNoamm+hvZazBjubt8fz7Uks8mWwYnnb1s+p2vVPyF62FeP12aqJF0W5/J0qZLFJhBExMC7bSYhIN/5sv72FXk6m2tFZmKs1cD1IoXmHNL5//UHw116U5ZciKGI0x/c3zJ4R56GTWA2l/fto3XlhckRAB5bvyj+D2kYAACEIuFQJEzPG4yE2QQjRyU5XdN5qXdsS07qmNeOReCD51pXLkrHl2SukvIrq7tdXv+Zxn6by5sk5afJBee6xxgEvr9loEDMuas0g7bDaCPeFw7Yvb5jV/oeXVsUiIZC0Ugymx/faJYOqLhB94o5MFDTMfJlXY8rFOonsWfW5+YppGuLUzVyYWVtN5sivCAybXX825YlFIERCJLAY1VNTm/NVv9m26IClUgj5nEwdGDKZDQ6H71lsVrMy1FL/3SsWiihABzl4nh41gsxOQsDHz21XcJl0IHykXAE9QVXJyti9fvNDs++081Px6VPzNGCSPDZxQ7DoG4Mxn64PCdXxeuctLv9IRJFnB5/9dCkbmCitnMkGI7kKSV2n/8/71rx6JpFahGPHg1bqAkdrXirdD4S9NrNQoIyeN1rdp8UuJ2v7dq8Lje5qne8OFGyt3W4c9q+JE15+Hzbkgw1iyTCkWhV18h7R+oJDN33/M5cjXxdfuqptv4UmfCaVedZJPCFAziC2nyBD5r7d2SookKGIRLttnmqza4PPjs72qYPg+jZ15/UyGYSH/2h8KDZnikVKLgsnc3Jp0gEgem95TAZywu0B860FqUlZEl5n7aPpIq4TByPAmDzBY50Dt9Xlvl5bSddJErKorgw9Iv3j9lJXsNvHspQiJQUCbk8d2dqyFkYiMZhEp0XS8MAmPWlmF3evZfbHlyevzpFeWjS1NYy9NjKfAWX0+s1EVF0hVSUSzDaOsaCxfKtfFEmi7x3UdbfL7TECtfGH+f4RxztJcCiyO5TDU+uXyScyVaKXBia+M6SnNeP1ZzpHOJmJXlx/PPGgSvVPdLV2ZesNmcklCERCJnk/rMtG0rSNHLB9QJ7bowEX/bq9FY7yWSIZ1OSpnzuLJ64yzY9MWnb82V9/5hp3aLUB9eXLLg4TeFYrvoaJMBgOFMqEDFJv9fv9Pq1Uv7fWnR+/dTivCQRk5EsYNNIYA6GYQDCAFAoEBIkfcAD4aCMxVTzWAc7B1smLBgM3j/XrJ+wFBepMngiEYOia/gQCOYPB60BfyKbU6wUtRimE4XMjZmqR3M19yYr0jjMKAymbC4WiuMoFCuMMwcJ8lMU7x6ry9HIUuXC2Fdg4lh0tmzxK/sv3vGLDxEYvnN1/s71RfFBRHR3gkOdI7kyQc+UVcllsQhcKxZ82tSJQLBsNsN4BgnCQdrHsqJQS+Do3yubdizPpYt80BH8c+qQLogEAEaf239ucbqSRzIoAsvTyj893/7Ma0eMNte9awvpfYtVNaWRAENgIZOMRwIKx0gG4w9fVG9fnK2V8y93DKcnSDAUAQDsOVp32/Lc9VmJTXqzlGKsUIi3JSpQBNZZnWoOZ9Rto2OHYkjAYTAC4eBNJPjW6iYP/K+QPxx5tbXvs5Yhn9d/W0pCx5D++R3LOgb1CWLej+9a/p0ti5gMfMBpkzJIFWvhAmpgNkCIPS/aZEH5w4E3TzakyaV2f+jZ7WUwBGUlSEkRUesNPpSrqWsb/uWDa2gY6NKbsuUiBrZAYbL5ZsecT5wBD3N2f6C4z33B8OC0LU8pQmDYYHc/cOCCeMr2l6e2ZSbO5EIc6ejxOoN3leXEj9zV2WkyTYdCIZoHeDxebm4u+Dr5g6Gz+sHzFwceWl+SpZalJoh/+tdj39lUGgERGlRMbu8vvqqXk3jf+NTv7l4j5izsePmHBAHQNDR5uU+nVQgd4fCuoow0HrvF7BQyMFfI98rfLyzP03qikeUZ6q+FAXB9Hogd6lbdtJI/42n5sLGvSClKFrDNDs+v3qtcWqi9MmJ4/p6VMAJidmSf3ZzJEwMAfOEAAICe1zPrLeGQxJ3l2VIu85OqThGTdaCmY3NZplwpkjIZd+ZrCRx960jNI7eU5WrkF1oGL3aOZiVJ/3SuOUfCW5+dLGFTAABXyAtDcCgadrqDu081Pra2RMCkRlx2DYcfH28diUYBBH1zGDA7PG8erS3JS672eB9dmr49cyaMXiHihKLRFz48VTOo+/6GMm84JGCSCAzXGG07stRdRqtGyBl1W6e9boPDfeZi3zN3rhjzOSQkkyIwiYz54amW3GRZAptLLyEbHO4t71XyXK6PntoRgwEAQK/BohVxObNZyLG2XPHJ/fMFxZmJNBIsz9R8cqp51GpaW5yUpuTr9fbLOtPzx2oOX2phMYktedpf375SxGRc6Bx5ZscyrZw/x/q/ARLMvxPpH+hoKIs3cPeH5wmb9TcPrdXIOBlScaZKvPtUY7KQmS8VXB6eUvBYL//9LApB//n2V+19+qd3LPn32YrGBIamyIQHq9u01yJBdJZSPCH/gbbh0gQxhwntSFRtTpAIAPTyO18ONY0TBLbhZ7dmi5gUhgcjUb3dPWZ1ZsuEXJJgEhifIuObsgEA6ACP3Yeri9KUWVL+Zx2jCAzsvsCxnrGdxelJQg5t5xEo0jc+/diLB6cjkSPP3ZYhFnmDoTGLY6VGScNAdHYP51xgsXQC+vM/fVG9OFW1IivRGQwhUbBrae6xCx2FqQomgREE+tnx5sFJ845V+S4IZ4YCd+Slqvn0DtTnqiUMAoNnZwHXPuIAAFgU2XPpymOrSwRMEgBg9wUOtA3dma8VsInCLHnlma7mzsHVCVK/zsxOU25Ry2AYGfOH++zuAx0DzgFDVrZKK+ajMPxPIIGYIt+pHzxgMLK9fqWAw0CRaZ8n6AkfONFSMzB2a1n2/euLE6UCfyR4vVwCCp9JVMhTS8nZtolMApNzWcFItH7MMGiyDrUMbV2U1mVxrkpRojAsoBgjJhuLwFuttjUKOTTbroU29ykML1VIbSHvyb5JgZJt8rqWJSWphTMJ+vQ2AAApxe61mZK53NtyktNE3FGbs0guZKAIG0MT2Uwpixoy2QwOD4/EcASNRwIBQUIQxMCxbI3s9c8u4yiSliBOkfDfOt1IU00UAIrAijNUfePTD24sWV2UAuYpHgnotmtMAtOKBW+er2/on8hVSyE4OtPAGAK+cACHMQCASsIry06Md7PM6SdANywbdduUbHaXwRQMR/gUo3bQ8PSndZf7pswWy+J0OZtgkAS2slCbmiDqGDaUpCfMqWp6PSSYtLoe+OhS/bAJgwI7yjKzNJJzVwYikWjnsGHUYN21sUTGoVJF3Mo+XafBmiriytiUiEl2T1li3QnUXC6OIm+easpRSwRM6iYSfGt1kwf+9fIFwyf7xqUUMWg2b0hSNHaP/mxLOYiC4zU9P7l3ZXayDMwWEWJihOc6pgBtzH0TtwCtCwPD01bv9tLMKIB8wZBKwHL4Ap80D+7IVrV0jv3ygbVCDuUPzcAA7RmYb/3Tut4nvlCAwhh0rGr8NnQTYnpYvc294d3jYoNtz0/vVMzGPrZMGyrrBp/eUBarawEBEAGgo73NarGEQiEIgiEI4rA5+QUF4OvU6zQfOdZemK2ieARdUcdm9ejcdiafNPk9ky7XT47UqViM0YnpF+9dK+X+P4ABAIDF6Xn9VOPqfG2L0bq9SC2nWBgChyKRs+NTE+PTPYMGvkKwrSAFn20hBG7Yh3g+AMT/asrhcfgCqVJ+FICqkam9zQM/WpZrdnief/fkiqKUc10jv7pntZjNis8113tdkpmCVKE5MBCbSC3kFiTJ/3C07rzJnq3itzi8xRKujGS8+2X95vKMxh7dutK0rUuz/aHI+w29fouTxNDVWYk4hvrDAQqdqVz+0hdVa3M1qXIhnTMQ7xkIAwDdEAYcQQ8TvdpeAwDw0t5z2anKC0YrZjH9eN3iWIKH1e37tKWvfdIoiiAlaQm5amnD0IQlCvaN6Hcky8Vc9HDbaLlKoWZx/rL3wrYlOVmJUjrD2BUMZAhEhUnyPSevSOUsCcVEYOQ7+y9cqev49Z2rSrTSGAxMOT0uX0AjnnlD21zeNw5VPXXb18AALSju3pGQzH6foxUgoVHz3prOvx5r+OpKn9flefaW8gFf6IHSzKUpCQCAt47UrMxNdkZCCi4nnqBozb9Urndj0vM6Aj6XJ7Rh96lpyL9mTZEpFBlxB40+HwON4Bhe3zFic3lLVZL9w4aRXt3BU1ec3sBrv7h9SWpi/OAMDNVeiwTxkw6anU2T0/kqXgZPBEOQxeV75UjV1hxNOBw58vuHl8vFbXbv6UnjJaMZ8wbKk+RXI/sRWMC8igT0mNQsEhSmKTOk/ANtgxdGJu/I0ai5LNqqI1D0px+efPnd00BEVf3XIxlicYfVOGJ0JAm4NBXH9i1WwTam6GzsEAojlztG//5V4y8fWGP3BY736b5blpki5WcmSV49dFnGYpMQOuKwPbl9WYM/kBqNlGqleotbxmaySSLgD/7wnS/X56cwKSL+OMSfhVeO1xao5RATiEmmKxDc3zZ0R04yl0EMOKxKNlWoSdh7qM4dDj62uawkUXpqSH97unpnakImD2u/0LtzdWGxVj5mccq5MwXs/yEk+LJ9vCBBODVtH6Nw+6SJwYGNI46D51rXl6Y/tLbEiQfpwKH56cV5WjkjlkuAoblq6RuVDblxSAAACEWiR64Mr06WDjkc7ROmLm9gZ2EKgSIoDMvY1OVB3XmbI4vDiobCCAzRmEfH2GAIwicZAgFcwpP88VD10SHjQ4szYz3aURjxhYMEgsaW/OcsjYOr3QmgIbODG4cEJIpO+9wUisMQROBYrmYmYaAoLaEoWU4jAYljEAAcJmP9ovTPb9iwbD4SrEhPGvHaTrcMFSUqWASBwggKIRiM0V4CsNAJWrCH8ZjbHoXAFy3DH9X0v1XdJ7RZ33lyY4lGfqC6K0slYhEEACBZIVyWr5nfnWAOEgAANY8YLQHvzncviuy2t5/YWKqVf1bXVZioSE0Q/+1obc+ocUtF1oINlZk4JmKSvUYr3Z2gx2Yy2QJftI439I0szVATGOKLBLHZIL2b+vboJg/8i+ULhi8NTii5zMqe0ZVJsrqu0Z9sKgdRsOdo3ZO3L6FLCdEwQG8/v6JoLG94gdGvo/Zp/cn6ocfXlUo4TG8wVDs0haLwxRF9Jpd1vK7z4XUlWrnQHwp3TZqzFXPDhL4hD3jDAQaKQwBgMOILBejGW4DOIZ51OEw53Ov3HJdO2d/72Z1ywUxocsu0Yf+Zjme2VIhng3bo1zkMQFtri91uD4XCEARBEMRiMQuLiuZNfo2iADT0jvcPTv9g6xIZxaKL6mAoXHVl+N4lheEw/MyROpxJGMamXn1gw/8TGIgCYHF6fnPo0opcTf2k+a4yTZ5AQi9SSkjijZ7xzub+wgz1g4uz6SRp2mKb37Y5XvFHeM7R9gfDgyZbmkxg9Qdfah880DGaxWIxQPTFj8/mpyqaxvQ7VxTE0gZoJOi1W+hIoXiPxPzrCgKAgaOLUxSfnm56r06XkSkoFDKHR8wjBssjW8pytfLdn9eQLMYnXaOrMlR8FkM3YjzRNtQ4oq9IUdGcU9M3PjRluW9pfo/NtEAT4mg0Hg/mKwqi8WnENR0jTYOTKYni+mlLd+3Qv9+zipx9We5t6BqdND9zS8XqgpTzVwYutg0tyU6etNpCKCynoByhJEPC33el3zxtN9k9D66buWbYGGEP+HEEFlBkfpJsT2UTA8c6p2y/PdPqdkEKJCJkUvTb1BcKD5vsWXJhzDR/4YPT25Zka5XCeXt9XdEn2uL1P3+8VcJCXAQ7PGkKIVA0Gn1ux3I2RTy9Iv/SyBQKQM+woW/MeO/6Aj8A3dNmEZOKRSjRmuMiiIAo3dE5XjEjtddmgoLIbX8/w/e5n9tcviszaUeiPJlFeYLhbrNzdaL8uysLBUzGRycaBztG7XxWoUb24wfXKERMJZszO9TMYDEk0MiEBHbVXLD7Ake6RzdmKxLZHARGm/onXjneuCJdVd858sr3t6lEPDHFKBRy2SiKe/zr0hNjBcrocenKkp16E382lCKGBH89XM2kcJRExm3eTDFHyWXTh3FAZ3r5vdOEgv3+kztKUxIAAMFgxBbwpYr49Ko0FHcEoNl/tOhTiMLIhN3x4DunQhYHj8+6YnbclafhMXAAwLDXpmJzf73n5KnGvg1FaXqnfV//ZB6CyySUgmS98OkFlzf4n2+faOsY6zVYNpSkUTgWmyLGHue6x35/vPVP966gA4dO9Oluz9HwSaLHZkpmczEYMVpd/lD46VsrLvePUyxGdffU8aGxlWnSZBbvTx+fe/nJrTyKobe7ERiml0X+ISTYU9Xz8/UFCRxq9+nmqIB9/HDD8ITpZ/euTleJYQiKJRKAeUjw5uGqXI2coouZQhBFYDnXBg4BAF451ZLMpVp6xn6wZfGFxn6RjBsJh0QsiksSKAxrRTwQDXtsnmmXZ8BkG7U4Ju0ulz/g8Id6bCYAR9g4h8tBO3sM7QZv5eRUnpSvml0JwhGUrogfQ4I5djC9GYvABUxGt8EaQwIcRkw+r97jlJAz+ETX7fn0fBuLJJgY+sGFlsVpCTQSxI7k9YoO0UhwoGMkBMNHWwbSxfxwJGr2BdlMxhsnGsu0SrpUMRRXcQhc5wTFkCYQjqh4rC6dvbJzYnDKKcCj490jb/5w++IUZaKIl6eWvlHZkJkwgwQLDhU7FPRQrTrze1X9fznbDY2Ov/Oz2xenJCSKeLkq6V9PNeaqJFsrspkkVlnfm6uVUwQ+Z2doJBBQjMYxIwRDP/2k7lzX+A/X5i5Ok++v7ihIlPNI8qaX4FuomzzwrxQNAxIO9cmV/kUqcW3f+LPblkm4rD/tv7BuUXqGWjK/omi83RZfQeg6MyygcZvlw9Pt39+8WMiiAABqAevxv1+qM5ruK0mL+IPNg8alixLt/vDQtD1XKYo9gmNa0PqfvwIXjly15BAYwWDUFw4EwtEjXaNsDpXEZVo8vlveq7TU9z/7yAYBlylgMvqMthMdPZdbx360uTweBmLv8ubmZqfTSecTQxBEklRJSQm4obpM0ycudP/HzjWxZyIAQCZi1XeMj5idz51qkyWJas9e+cM9a3ISrjFYv4kWXJQFADz9/vHSNFW7yXZ3mSZfKI1tpjM73v/wdIdW/sGWck5ccRI6k4E+hgsOSH84Z7ooAP5guG7MwOUw/ZHoy+1DbZ1j/7EsN1PMefl0R+XZK2X5GhRHH1h+Ta36XrtFw+bSV1FsmTnmHIhea0gBANgMfHNh6on6tn6zN53LPdsxeMeyXBmPRREYg4H9+qMz/eGwl0IfLc54YHWBQsQ6Wd37ZctAgpQ/YXWebBl4auMiFgOfX10UfB0M0JFCtLESioYRCNn9VV1WmrLb4Vom5A2MT9+3tpDmAU8g+E5lw71LcpdlJqokvJWFKRSBHTjXuiJfuzxBODjtlrFJNoHDkeizx2qfXl+cIJwxc4cc1kQ2b8hhpQOHSAJ/4dClF+v6M6Dw35/YnJ8orqzvq+4cpSjiXL8uVy6MlWaq7RzVm513rrrmwH4TQQA8e+oKUy3YrpUm8Qich460TKqZLGs4+MSGkgQeO1XEfeLQpdFe3Y6V2akySafdcsnkNU/bUkS8WDgNrRgSRAGAARR/D8afwR6bCQ5hd318drSt7+2Hb7klJ5nuO4ZD0LTdtUGjFDHJQCSULBFQJP63yy2kyW1NlhESntUbKpML6YKP9Pj0sASGamXCT6vbYrkEdl/g783961MTABIZNrj/cq7tcGXT8gxVbefoL3etlXJnys76Q+Fpu2tZspKal4EAaC8BRXbpTQKKxBCY/i4kgZEM7NXPq2td3u3pqrYpa6qYDcNRi8O363efADH1wZM76ocnsxIkVq9/0unWirgjbruUZELzbhZw7ZMEAsDi9PzH/gscFukKR/gq8YokGd3kuMdmSuHw9SbnuebBiy2DX1Z3X24eMXeNH6/u/uiLptc+u6w32juNlqBIsnFF/tPrC/Zdbs9NlMaMNnoKi8v7i4MXakcsmQq+LxyuHpm+PUej9zktfm8ym0sgmN3jPXyh42c7V3JZlBcGZ64MpKv43aPOygFdxO5JEvGW5iUDAARMctBkE8Qnod4QCQgMUQm5Rqf3QMOAlEADHv9Ij27c4txRmq5QizQiLv3YmdO9GIERfySI0AmyGvlrN8wlqB00vHimw22YfmHXuvQEcbKU//q7pzpRREQgAAAEhvkkkcPnpYr5WhEvTcKXsikmjkWjYGDa2mCwfWX2GDyeKYe/JE1WWdumMwaO9k40GU0KNlPFY4HZwKGvRQIUhoVMsnvKwiUxDEEAgAQEafS6LX4f3cAYzCYMvLT33Nmm/iyV5A9Hq9blatgUI4YECxYdosVAkWyZ4LXGvsYh076Ggffq+uoHTZ06C0Uiu4/XbSpIZZMzVS4WRIL5PYzpFmPeaLRAKUgXsw+db71ne6E7EE4R8zEEpuj04sqGLJWYSeDghkhAD+XwBVLF7K4rvY/dt9wDB1OFgpnQMrV096nGPLUkJUGSnSx541B1PBLEH0wmjiEw/JdTreUJgindVHlFQolSWZikePNkfa5Kwr6ZS/Dt000e+JcpHgYqVOLKlv4H1+YncXk1HSN9OtO9aws7bab5dYSC19pw/xAJAAB0NuvfTjb/cHO5iE3RL8iz/RMuKMRSixstzpa+CShNWTvtgiKBdclKAp37LFjQ9Aezb8HYuzaWqhv/D4WRt7oGe32hSa//zITp0Jhx6Hw7JBYZvaGzPRN/PN1eP2Q06CYfXlOSLOHHBo83gpqamtxu91UeYDBKFy0C11ef3bznQM32JTmpyqsZ2PSiOMnAXjl4ud7s0WJQuoT7o41lNxjnBpr/rKztG69sH7Ig6KbsRCaBSJms2Ff4yZtH16/MfWNVcXwnrNgifczkmj8sNO8HAIDTHzzWMSwSsEfdvmGHJ4dJwgA8VJQyMDr12zeP5BWnOwPh39y9gsSvXiF0DjEGoxiMWv0uNk6BeZFCsVlie8Ihia3FaYfONL7VNMAWcTITeKkCPgBg2OH+Y/eoubpne66GK2bI2MxQGM7RyA936Y+2DuhMzp9tXSzhMOdUF50paQfdiAbi0wbouKPavpFXD14cIZAXtiwuS1X+/UTT4uxEuZBjcXv/fKrB5w08sf7qlaCS8ApTle9+UVuQkqDkkf1T9kg4YrY4RwYmjxnMW7OTGCjSazOn84QoDMe6lemcniMDBlPv8G93rt1YkKSRiVYVpiAwvL+6w2V2lWclMhk4AMDi8Ow70/L49vL5NsTXqk1vaZ0yM9mMHAE1brZtLkjZtihr3GTftijzUH13cYpcyKJyhZyDA+O35KeYI54snrhqypot4Tuc7vgIe1pzvASxGy1WcrTHZsIj+M5956506su4zA2FKQliHkT76AzmPLmQgaJ003WtXQAAIABJREFUHicAICNB/OH5lh/dvuyZNYVTNveSBPGA0ZrIZ2Nx0Ur0KSNnvQQohky5/fvbhooVIqPXda7D+JeznccvNkhJhsFo+8Pjm+JhoNNgji/SCuLgkx4ZRWAhRXbpTXyKxBCY/go6r/9vAzp01FiSIStNkR5pGwfByBMvH7Cg4NQvHipNTXAFIj96/zhHwNIIOC4QCEVCZr+XjoWLXWDz7ym65s+6gtTP2iZwLGTr16/L10j4rA7LlJrJdrmD+8+2fm9r2V1rCi90DKfuXP5wUboqW4NLRSKNfFVp1s+3lqmFjKdW5WUoRbmJ0jlr82aX9/UTdZuLMhonrF8crWqLhn+1rlhAMqa8rkAklMDk2dy+jyubHtmyGEPQSbdLK+SW5ygPnG/3RhEvFNH16R9aX6QScwHtOaGDqeKQgK6Ts7JQG/eFZpBgX1X7he4xAOCPLndfqmrHYXjnmsKNeck9dteKlIRRq1PJY9HjiBnMLvtMGi40E4GGgNnkjfm5BHS5nlS58LljVxC98fWnt0n5LABAkox/uXvcxsBe3FLOxDGdzal3XPVpAABwFGEzcD6TkSbmK9hM3OMrkAhS+exujzuARl3Tlpw0Zeu440jraPWEgaaCcDRCm9dfiwQCiuw1WjkkjiNIBIBprzuLL+mxmcSztcIoAsNJ4qMTjUcutOsnrBYQWpqZGPMSLFj7PyYGiixNEB/tH8tIVySkSbaq+GQoZNRZ7Uy8d8SwOCWB/hMIAAhGgtciwRzSYKBIgUJ0cnyS5DBGMNBf2ytelQMTkFbIqR82pEr4+IwpL3vzZEOmSnhjLwHdrUwkYvV3jmZuK4EIrEAmqtHrUvh8HIYpHMtTS9842ZCnlgg5rKzrIMFHVwZQBN59obNIya+60v+ze5ZzWAxH0J/I5eaoJG/EIQF8Ewm+NbrJA/8axWDgzMBkqVRwuqX/9kWZFBvHwvC+s82Pbl08HnDGuwVioi25KIj+QwFCtPQO298qm3+wqVw0u/pu9wVOD0xsTFUWs5kdDX3byzKWyAS8QPC2zGQKvdpLeA4DQPP+gbiX7vXyYg0Oj8/u0Yrx7YkJrEjknTMtqMnxp0c23F+WGnC5L1e3obAPw4inN5bFxpwT+9va0uJ2uUKhIJ0/gON42eLF8yeK6ULXsGHKsWtDaeyT2L5NWpxHa7q5PHbE733rkc2sea1qv6HmPCgnLM4ffXAySyW9pDdvKBDnCiUgGqaX4S+1DZ1vGdRqZBVaRfyfzIkFh641ksB1fogCcLR1oCYQdIZCBUJOEotxYXDi/jyN3eV78Dd7x6esJqPlz49vzlBdU4qKLioPAPCG/GycotMJYoQZW1KdvwMckkgU8YaH9ctTle83DUn5uNsfeuarBoYHinA5znFDpyP4aePQ+f4pHpOxJFl0pLptWZY6SynW+53zq4vGXzbzNSeHGAAwYXb88I1jziTpr3fkRaGoLeAfN7vc4YCTBLW9E2OT5uduX8G89gxSBJarVbx5qCoSAakK/p5zzW09uvvXFm3MST7eN54kYHsigViBUQnJbDNP7b7csyZZymIjk0b70vQkJoH7Q+Ept2/n0lwek/HJmRYcQ3VG277Tzd//uhziBWX3BY71jG5KV2l4+PFJh99kLVMr/XA0SyneW3llSVbiwdouEkU+Ot10R7F22O+vUCidoXCHzblGKU7kseck3dKa0wEAzCI0BEC3zZTM5v/4i5qA3ceJ+H51z6qLTQO5WjlJYO2TpgQui0sSMRgAAJxq7NfrLEEE7CjNKFdJzg1MFCqE3XqLksuKTRq7QhgYiqHInrONJ8fMS1TipglT0A+VqcXpXOLA4VooAj785d1KAZ/e+MYwEH8loHFeAhSBrb7Ay/U9Qg6TkyCqu9ybIRbCwdCuvefGLdbfP7QJw7CPG/pfO9fdMGzW6SY2V6Tmi2Q8HFcyue1WI72MEr9aERNtrz+yptgaCLVYbeUJkrbOoYdvWTzotglwyuEOvvLppR/cviwzUUKQWEKKtP6LRgfFfmxpxppC2T2LNXcXpqmFnAQ+W2d1Knis2No8jQT04E9vLFPw2fuahgYigTe3VwjZxIjblsoVJDB5bVOGPZ/XPrx1EQzDfWYri4VBWCRXKFuekbjvQlM4iFZbzbsqstSzXqz5SKCS8C60DM6PdaEIbGV2MgNDn/+8Ttfa9+cf3ProLWUqMVfJY+XIBIc7hnPlwm6DWcljITAMAJAwqG7btOTaRAJwHTNUJeRe6Bju1VvPtI+9uGttrvrqTa1UCPbWdOUrRQUqMd3VeD4V0OdaQBJqPttgtbMoeLVCXqSQ1LUO9I9OPbY6f9WStMttk+0Gq87h4hAEn8K+IRLwKUa3wcIhMQJB7cEAE0W5GNlg0I9bPGd7Jv90pp3HZDy2qWTa6nzyjiVr8lM+q+/OVUsJHIUBBGZ9CPNdLrRYOJoh4r5X3bldLqqs6pqcstyxMu/lO1Y6wv6jDb0FSXI6hgoGAL7WSzCfNJg4miHkvFXV6W4YfOrW8h8Wp8uY5JDbc8LsiIRC6TwOCkO0K+aNk/WZqrmBQ/Gnm4mjKVxqX1XnjzaV/rgoTcYiJ33+cyYPGg0msVkoDJMzLp36PJVEyF0YCTLEvN+daWXxyJorA49vLRu0OSasHhGXtPq96ptI8G3VTR74F4iGARxF36juLBDzmSg8bXXtWlWIhqHdJ2u/t3mxCfgWhAEAgCfk5+DUP+oWAAB4Qv63T1zZXJimna365/AFPmke2FmUmirm7TlcvX1RRqlG7nD7VmhnfPrRecv/MXtxjuLf6wvmxfpD4XGLszhRmskXdNsMfzrb5mgd/c7GEhmL8dmFtp5Rw7olaWaH79XvbGZfmw4YP3VdbY3L7YpEonR/YgzHy8vLwXXUbNSfPt/zk7tWxEcK0ftm8wV2V3WmJEqNVve+p7fJ/y/6js05FFtfOzbeN3HR6lxEoEIGuVijwlEMg9EJi+3tY/XlFZm3F6TEv3VuUGCUfoNGZ+Nq5sQ/jDhco0H/IhkrR0DCcHhfc2+FRkIw4B+9fNjq9Dx93wqUy/j5bctiMTkGr2vEZZuTNoDBqD3gpgtSxdtnYJ5nxubyHrrQ9uTmRfV94+frumqt3haDEfFC6zJkHz+8VipgDQxO7Fqf870l2SWJYrvHG4Uij64uGrDY04QCMi4+JNbv5gZvl9jqYEz3/+6TSTH7ufV5OMKc8IdPTzp6bK6a+r4qCLYOTb5w52rJQokfNBJ8frH9hQ/OONyezAzV0szEDJkgWcj56EpfueqaNtvPH78SQsJtQ5PfXVGkknMOVXclS/iNo1OpMr6QRSrFXF8g9MdPzneNGn+xa90/BwMftwzcnpscQYI+Lzja1r8yMxGOgLJkJcZDf/3miQmzfVW+9gfvH3ebHY/eu6RcoTjQOsRkEF02161JMtpQnoME9MmK9xLETl+PzZTJE10a0v+i8oo44j/203sKkmQEhrx3orEwTWn1+VNEvEAkFIMBi8Pz+cWO+9cX52vkB2s6C5PleXLhF91juXJBt8Gi5LIQZCasP6Zxh+e1lmHf6LgbIR4sTd2YlYiC6MMv7OWxyDN/fkwu5AQjIRRGA6Fw10IwQGv+ZUB/0yvjUxAM7WsbXJcqGdI5hsdsiSmyT4/UvHOo2hf1B/IzazsmLG6vjE/kJrLCeusv7llV2TSQo5YSGIzCqJRkdliNYpIJLTTFS19Urc/TZieIX2zqj/DICJ/pHTM1YoExX+TklOX8yWZTtrxQyHMFw3qnu1ghLkhRnrnQsjQ7cUVqotHntga8EpLJIjA6uJ9FYDEkcPsDr3xZs6kgNVctdQdCJ7p0UDjQ1zeenScJRxGTz+d2B/7wyaVt63KCUTDhcPE5eBZfzMZwFEY4JLGtOP2Vk81yt6/R59uRq7lmIfxaJKBXoBc0YROEnGQBdXpw/NXvbol9yEARCsfO9E9kK4RTDpdwdpz4wKFYjjW4jhciP1F2tLrLF/KsyUlWzeIKACBRyGltHuoNhbZlJYLZGkTzqYB+vIy4rBSJWu0BCYspYZOZKnF959CZtqGnyvOeWpa1KUOFInCr3tw0YfaFQ2oeOxKJWvxeGt3nI0EUABSGI1Fwvl8nZpO1o1OX+qb2Nw11jNsBEsmUCH6wKqc4SZIo4W0oy7jYPLi2OLUwWf63s035ahkDn0mAWZB/YuobNkz2TrRZnVsLU62pchETzRbz2Ry8QqN6s7I+L1FGIwF0LRKAhUhDp7cMto3gqfJNmYkyDiVmMLL4vFwewcIZY2abjEWhMEzh1/QliO3eHIfDhN462KvrCgRWahUqFpXBZd+SIAlFwajVJqLIq0hw8hokIDA0BhUEiogY+KHa7sfWFw25fd3RqD4KMBDNFQjpbmU3keBbqJs88D8thz94qG0QI/Dfn28ZGXde6p/qae2/d3kegsKvfX558TINiWPZ/IVj2eeHdlxP0XkvwqahyX6D5Z4lMwU67b7A/tbBewpSeAy8pmOka9R42/LcMaszSy7EZxOI4xkgJujawecsJF/PwG0eMybMFsTs7Jl656NzG5am9w9NTTs9a0tSFYn8qi7dDzeXZyVI5gwYr7q6Wp/PF4lEZngARSsqliy0IeiwGt/7pG770tx0lYQeyhvye8MBFkZGAfj1iQaNgD00adr98AbZ/10Ocfx+Xuid+PPpNlG6bM+dy9KSBN19hmffOm62u0OR6J4vG3Lyk28r1DDJq72ib1BglBYEAARB8WhEyx8KD07bV6rlKRyuhGSOWdxuf2R7urZ/cLptxLBjXb4Xinz/jsUmv9focxt9bnvABwGg4QhgCJozKQPBPdfGnIDZRrPx+q/3T21bkl2SlrCxICUnUfbBsapeX/j7q1NvydEm8NiJcu6qXM3Rms4Rj83s9XSMG7cvzbSHAyeN026LN3U29j2+de71Xi3znQPnWgZf2ndOx8AN1iAiYqmj2B0pSjwQ/dvHZxGPd+8P7pBdH+coAltZmJKSIBrUmSsyEiw+v5THnPK7FifID7YNpYp5tFXRpjef6BkfHpxIylL4cDxbzk+TiV/8okYu5CxPTaCHSlGKXtp3/mez9b7+Idl9gU9aB+/ITXZFfMks3nMHzkbVYi1ANmYks3BMQJCWkC8zSfLG/ktmvV2QJlyarM5SiLUi7p7GXj2Iloi4HBydgwTx9yCNBLGmXZ5Q0B7w293BOz48nRj2H/rxXXIuKwpAgoT37lf1wy7PkhQlg0AYcTDw5uHqJ3dUpCaIVCJurlry18rGomR5nlx4tHssZxYJsDjXhNnrf/JIbdgPVi1KIjF3gUI8aXHc+9rB8WHTu8/ena4RUygRioQjEdA9ZcmUCeekIcWcGGChJxWKwACC9jf3rcmUL5bLt2Sq0mS8/XUDfooyCBm3ri99eUV6x7QtSyPugkLWutHvbSrdVJqenyh7/URdQZKSSWBRAIxel5Rc4MKo6RsfnLLevyy/RW8eNdt/VJy2XSluH5uqEIuUKKrvGH/u3tWLhLxjk0a3P7A2ScFnMjQy/ud6U2t9747leTwcs/p9tJNNSAf3UySKwLQB/dwnZ79s7v/o6dsAAOcG9M5IOLFAXXey2ZGiGrT7aszuM8eb/AXqQbfPGfHlS3i06yy2Ns9m4PcuSj3fP3Z/afq5EUO+UkxcBwlubMImS/gWl8cfDKfMLv1EAZCyyTa9RcYhU0S83imLYCEkoDu10RbtfC8EiWMbS9JSpILK9kECRVSzpUIBAEIx90BD78PlV7vBxFPBiN3ljUZ5BN5nN6fzRGIGJWKSPVMWIZNUiriXu0asekf9mP7pDYvYDEwjYJcmiAkUadNbX7nUbvb4BATpjM5FArPXH4YgIUn0TtkaJ8yHWsZePtvuD0UWJ4nvKtLeVaQpUIi9sE8UFziUo5G/9XlNUaqyRKvYc645VyUhbogENR0j735ZP2qw3r2qYGW2us3meiBDrRVwhs32ZA7XGvFVaFRvzEUCOBAOxZDg6uo+juqm7Sfreu5fX7QmXVU3MU0jDQxBIgblDLo13KsNjCliFgni0otjDgd6qMr63nvXFC7RKk70T8ToSEIyRBTZaTQJSMYMWlyLBHtPNV9oHYp9x/eO1W0r0LZZnWtSlJtUkmVSAQRDepsrmcMddd9Egm+jbvLA/6jcwdC+ht7LwdC7HcM8Z+SuAvWJqittrSP5KYrzLYN3bCnMEAgT2Qt3GPjmMADmWe3DJsu/f3i6OEVRkCSj14zfb+jNkQlSRVyL07PvdPOuLYt6DBaNlM8mr8b930Dx7/KvhYEph8cTCGrEPAgAndF29/Mf9Y9Np8iEm9dlfXfdoiATQH7I5vHfvzwf3HDq2poaf8AfiUTo/AEEhpcsXTp/sw6rcWrEPmmyP7SxFADgC/lDkTAEQUyUEQWgdsTwyuWOgM350r2rxf/4Qm9M8+2YJ/Ycm4ShV7dXJCpZK5KTpUncn9+2yurwvHu8YXF5xroMtZLPoU23+BZgXyto1lETm65r0qzisXizGclfdI7mSfk4gA5faNtYnlnTr7urPKdQIaeLKUlIpt7rEjNICsXBQt4bDEY9IT/9OTTPMwBm02fvWj2TPpsqE+wdNHhH9bVmz7p8iS3gtwcCrkhwVbrmg6MNTXrjjqLMkgTFpMfdZQ8tTZBM21wCioRnI8LnH7eY5sOA0e7+8e5jaG7im3eV35qVrBu1XOyb/PzK0P6GAY6Yd/EXO5UC9nUGu6pkuWBpTtL+s62LMhKax41iAZXI4aaKefuaB3AEnnJ5v2gbLhJzpm3OP+9YTuJQm9V3esq8Silp6RsvSpbTkUgn63uFHOYDG78mf31B7W0ZWKQSawQco9fdOTx9uWdsc5L89sJ0Fh1sAEE+T/B80wCTTYzrbaZx+5fdwzuX5ok5FBNDK68MsDEkVy4As2vnMSSIP4yxwKFwNNo2bbR7A7v2XkwI+w/+6A4hi0FXTB822QCPMdZvWJaXxKcoGrytTs9fD1c/uaNCwImznNTS3ZUNRclyNgO/NDyVIxdMOa5JYPjN2eawgGIpWBjFZPGI/QfrG6cN031mAZd8dtdqDEYwGA1HQN+0OV0iZKBovN8pdoFdj/yd/uCR7pEKrdTq8Mu5TBSGHaFQPw7sPvebt5UFjdYihXRnYdrZ/gmtN3KmpueVJ7dBECAJDIHBvsvtq3I0EABSktVhNUquTb4yu7z7qtq/u6bYHQydGZx8rDRDyaJG3bZEFvvtQ9W6ScsLj6yTcdnRSDTs9m1KVZGzCVRrtfIzzYMiLkMjE0tIZqfVKCGZc06Hzuy41DOmEfO4TNIXBR1G2/fK0/MFhMnuWybgqhB0pHn4lztXV0gEkN2zIVkdhsKxJPsYEnBIYktR2qd1XRVa5Vc943kK0T+HBLlq6aH67hy1hIzFuAOQIuJW9ukyxTwRk+w1LoAEdKe2WODQgl4IlYibq5buq2q/0DUSKzqUKOSMWV3+UDhFfBUSAABMAnNEo7ZwtMZg7rY5l8gkOAxHAcAQmM8kuw1mFoaphJyqgdGWsemKdFWSeCZzTMamipSiWzITQpFo04SpdcLmjfqTeFwYgmgkaJw0/7y663dHmqqGjRN2DztVVJqpMEVDt6ZLJUwcgzHa1I61KgOz1vlbR2oKU5WFyfLdpxpz1BI6lwDE2+4YojPa3v2yfnDSvL407f4NxSoxV8Fj5coEX3WPlSpEMhazf9qq5nAsYe88JIDmeAnoYX/30ZnKhr5dm0sXZ6npbgA3bmBMzaYXx7wEAACVhJenlf/+72cr63tnh2LOGQqFYQHJuB4SLMlPpHD8k9PNBI7260wjk5bvbVmUKxN82T2WK+XzCFxOkVIm1T1lobuV3USCb5tu8sD/nHyh8O7OQTOKlrIpzBe8LTOhY2hidbr6TH2f2x/8yaOri2VyJnbNei2tf6KiKC361p12ux57+6vKPutw+6DB4mTgWL/Z8cK55t9uKrM4vbs/r3l8e0UEQGEIpEr44Prm2nzN2XLBSCFfMDxosmXJRSgCT5odO577IBAOH/jVA8/cvVLKY/dYTHyEPFTX/cNNi2PNfa6nmprqQDAQCYchGIYgCIbhpcuW0b+KtzJ1dvu7n9fftSJfLKRi9Zfo6AW7L/D9Q5cG2vr/++7VWf94QaE5iv/657pGfn/kEsbnvnbbUqvfIyGZRp9bRrEsTm9t15hWI1ubmUhvSafzekN+4lrbd47m2M2xVAqzy2txe1NnU67b9Rad3V2hlnx0vKE8NwnBEJPTe9/SvPihjD63mEHSky4IIejsLtGnL35eugXvEzsqYjbBxSG9LxC6rzxrYlh3bNiqd7i3pGk0XB6JYwIOs65pKFkliDAgfwQXk/gKhZi2mYRMks5MvQEPxFcXpfXwiwdGBazfbS3alqZV8VjLUuQ7CpIlFHqpteeNXevyEheOqZsvioHnpyhe/7wqL11qmPYmirksHAuEw2/XdV8YmCyWC1oGJ353z0oJm53E5jCQEOL1lqrkySLeh5c6MBTTT9suNA/GH4Rvrq4pa4/JtjFdNeCwMELouxdaludrb8tP5TGungguk/HCB2d83uBL/7atqnl4atzapzMlywW+QHBf3XAAiizXymfe918XODTktBEw49EDl0iv7b/vWJOtkNAJ2cFwVGd3FyjEK/KS3/q8hg4mtjo9uz+veSIOBujRmARGewmSpfz+aZtWxE0RcXunLPSkbXqLzun5cXFanoCxUSkHwWBLxF/1RfvohDXz9nIpn9SweS1my7TTnSriBiMzdYejs+PHYOB65P9uY2+RUsSikEyRsMtgcftDz7b1SfTTb9y+skAmLk6S7z3RlKYSTzvdp8emc3ns9WVaGmVFfOpy9xiJY/TStYRkxiOB1eV97ava764tgRH4SPfYvflaLgMHAJh8Hqfd1zs2/dtHN8sFXHfQr7O6FifKSHTmUeYLB3AMXpGn3X+6JU8jJxn4HCRoHDUQCPJZQ/cjqworMhLfvdByzmC9NVOdLeWb/d5EDuvtwzWTesuL390k57NAOELhaLZMSNchjUcCbziAwAgTx0o1ig8vti7WKr7oGslTXC3yNh8J/MHQhyeashIldNs4WlEASGKmm1h8ojNtSe9vG8yU8BdEAj4x0zZkTlOCOUhA4djKrCQ6wziGBP5Q+PLIVLFawkCRTpuz1eI8rTed1pumfAE2hhQJeSoWNWyyS5gkCsORaBRDYASGhy2OHJX4QuOQWszumjQvz0qOVTWFAEBhRMomylUyNoFVjRhb9KZgOKLmsRgoki8X5PDZepdrc4ZqV0nKdzIS0znMRDbldQflLHYUROjCOAsiwe7Pa/JTlEwC+7Sua2VWUuyJRP/2tx+dqazvvXt1wXc2L5rTvThVxN3fNpQp4YlZ1PWR4JqKQ/SwJRmq2s7R4gxVrBvAN0SCv55oyFSLmLNIQBJYcYaqtmu0OP26Q81HAgJF3zjVmKuS8JiUVMjM1yp/++GZ880DuzaXqiS8OSOgMEx3K7sGCSob8xKlbIK4WXHo/2/d5IH/IfmC4ctj+lwZK4FgdE6Yny7L9Hr9naMGOY8l4TGffXpDqXwmzXROJfh/ro4QLQgAT8j/6wPnl+YlTTpCLz2wSiCi9hxr+F1Nx3KS9PiD55r6H926GEMRo9ubOVte/Zvc7fPf5dezNVt10wl8No8i9BbnrhcP2hPFl56/PytJCgBg4rg97H/reOP24oxUhejGMAAAqK6uCoaCkXCE5gEEQcorKuDZ+if0/nRYjQePNacqhW0D+nUlGbSh4A35GShh9/pfvdi2WCEkMfSHm/7JgkLxih2BCavzBx+cZKhkt6zKI9FguUQOADD63EKCfO94ozJJvGtJTnxDH2/Iz/oGbaTjjzB9wAOh8LDJnq0Q0RmBTn/wzMDErZnqoQlzVftIllZ2uXfs6Y1l8S/vXrs5iye+gUci9jrEYdQd8uPXXmkvfnx2w6L0NNUMO9l9gcNtwzkidmmS7M6lmT19urVpiQ0TUxSOjExZ6vsnytITPv6yKTNJ2WJxFkgFUpKA45JEYWReb61ZLRgp9MrBy8sq0p9ZUhhfnFRvdSIQ2LXy61vRxYvJwAk5/tnxtjUFmt5Js4RHagTc/zp9xeDyTOtNj68pTpJwURiJRqPVPZPFCQqT3x0NI191639+qF7XO/LIlkWxg/DN5fQHzw5O7shOGnfZWQB/+VhNQVrCthytgEXGn1ynx3f+ysB/f2/z9rLsJUu0Q6OmWyuyPzjZ+J+Hzkul0s1ZyqrRqVzFTNQNEocEc8L6Bx02HsZ44VIHjyL8rsDtS9JGXS4UwZpMtim7K18hEjJJDIdd7sBn59v9wfCRyx1P7qjgs6k59zIEAElgeWrJXysby1OUl4b1JSqJiEW2TUwjMHxqYOLuPI0z7M0XSrg49nl9VxpBQRjgMBj3l6QNh8HBcQMBoLVqBYlhDBSnORO61jNwvYdMy6S5Y8qar+Zm8EQ4ivhC4b829Exc6nr1u7eImCQAgMDQJLng9UNVMg7rYFP/r+9YniYTeUL+QCRMoUR+omwvbaQSGLgWCV75rGpdfkqWSvxx82BFojSRzwIA9NhMaib7g6+adq4tzE6WRQFonTDJuRSPwQAA0LVuGQiOwAjFwHO1itc/q8rTykkCi0cCfyD05Icntxelr8xOsgdC5wzW6kstL9+3ZsBhSWZzDSbX5LTj+V3rZAK2PxQeNNuz5aIZK3wWCWhYwmYj+EkcW6RV7r3cVposP9w5XKAUXw8JUpSijT95u298ekNZBkVgMZcLNFtx6PXrIwGGwKNmB93vDAAgZjAHnGbRbOBQLJHA7Qs897fjy/M18cgBAFAJubFG0SohN0XMvfuji21hf6fdSWKomCRKhNxNSkmJkJvCYYpIQsQgJEyyy2BGIIhF4FEAWASmt7uiEbC9PLt5cHJFjuaT6o7SlARZb8GvAAAgAElEQVQq7lGJwkggEkzgshI4rGGT82jP2K9OXzlvtN2RrlJzmWkirs7h2pihAgCwMTSJzZSxqC6DmU8RxLXdi68JHNLK3z5SIxdx2sameEyGSsiNR4KSDFVNx0h5TtL81gTxSIAjyLjVmSEUTgXdc5CA3m1/JIhCM2eNw2TMaTH2DZHAHwYfnLpSnCancPybDxVDAn8ozCcZA0b7voahs60991bkeMMBPkWVZqpqOkdjLZC/FgkABH33/TMbs9V85s2+BP8/6yYP/A+pRTctpBgBEL7Yr9+Zr41Gom+dqF+Srq7tGPn+Q8tjMADmdRj4J9wCtCAAPKFAXf/EhMW5rTCzQ2/76eZibwQ0OF2/3VyWp5aca+jfUp4pE3J0NlealE/M9sq9wdsaXOe3N4gUolvnAgCe+vPhQS518uFNEu7Mo7nDapzWuyfMzgeWF3yT50tNTfUcHli8uByZbdUUjka6bNNWvbN31Hj/2pKW/kkGhiZIeNDsIf3juRY1h9kyMPHCXav+iYXe+Yrt88NvfaHD8D9uLSuSsgy+SCKLIhDY6HOP6e19U9af3lrBJq85ODdoRUwr/iDH/9w6Pq3ks2Klr99v7MuX8pko+tm51luW5Rys67qzIieWL07L4HVJSKY76KOri85RNO6MRwHA43oYAwBqOkYausdTlKJkxUzjrd3VXfkKAYZAWSoej0EuTVPtv9SxWKt8vaFjaMS4Pi+FgJCzVwY/rLzCyE16NF1NpyLEVrVjiYxzNB8GAAA/evNYNwd/enF2YZwhbnZ69lW1f39T2T9xBv2RcHaK7LNTbWUZysZho9nvRxEw1Pl/2Hvv8Late338ACAIEtx7iNSitqhpS/KQdzzjEdsZzWqSJmnTrLbpve3tbdPe3vR2pc3ey850Yju24zjeU5YsWXtvUZND3HuT+P4BiaZESXY6fs+vffw++IOCgIODg/W+57OG1Oq0YgUfELDDH7jUr+uddBxo0DQPW11ev5yGVJ+qYydxNi/OVgpn+EJcFw5/8PN2zW51WgSKalyWzy905SWJ5DxWoVIMz3yGzjT1oxTk4VsrCAAckcBdlcUHL7YvL0hrbh3VmAw0Jn9TnrJmdDJTxCFTAMdbCeLd+s1+70eNAwVCTnvfhLIsp9fua3f4T04YKACohVwJTicTCrEZtJ++elRndjz3yGYBG49/5OPvBxxDy1XyvRdal2ckHe0eFTLpBIBO945tzU/xEP4crhAA0D4x+U5VI+YHD6xZpMoQfvJN0/bCdFYosik9KebPFjM9EfP7CJFwBUJHe0c25ctiOak6h/R/eefEllWFm4unAlsD4Uin1rxlcdYr+6vGusb6UHhHQToLw/zhAA2h0rGpZPnqZAl9WhJ02Yw9o9b/Od6yoSDV5PMb3P5bc5MBAGRpsOZe7ajedu/GRQAAk8vrDgYzhfxgNBQBUbICRsyUQc4fv3qwukAlo01LAjaVtvvNk+OdIwqlUCXjf9GuuSs/RWtzhpHoijQlFUb3HK/fuUKdnyadM8+SkM4gk/yQYxKbm6dRKYvT5HsvtCxVJR3pHplTEkQi0cttGrmAvaY043R936oSFTRzbBeWBGl8tsHlZVDRWBYgo99Llioju4HASH336PG63g9PNsIwvChbMeuhI91RPr/Scb5rOAzDYy63u1Xz0h2rCgUcOU5jobNfcRQY5uM0jdlucHr4DDoCwwIGfdzhErPxler0C+2Dy7KS915qiZcEBAAGp/fS0OSnDUNnBw21GpOIQeehQCXkyFi4hEVvnDBTEUTCol87xMxSZYmSgMyp+s7R2pUFaV839VVkKXEqGnsE2AzaqmLVAklISUmQxmOZ3F4mhqZyuLqAqyJV8dbZhkVpcrJOHwEABZoqpEDumGhsmU8SMClY1eC42xt66kCtw+G+qzLvUF1PehKPNW0luJGmKDCMQsjHLV0vnO6x2N0PLM/q11tEHHqGWBSMhPhMfEVR2r6zrfO1QEqCpnGjise7ODz+n4eax+q7Jvy+JdlJNColQkRvSoJ/S9zUA/9fgKTF6ULuh/X9hUpesUT07Kdns2SCuo6Rx++rLJXI4jeeVWFgniZvCHqnY9/lzjvXFmQJ+F+2DBMQofP4frSykMAiQVd4bNK2c2XBuN2dOS0GYpjzUV/gWz6n9wvpKZQvF1IQ+FL78KHqrlfvXpOrmMqA2Wkzsgnsy7ruH21eykh47c6JRD1QUVFBQaf2HXCaA5Hw4aquO1YW5Sol7kCwumO4sjDNHwniFKx2WP+nqo7RYe0L920Qsf+uGOIYyKGo7R9/81T92pKsRytyPRG/lM5sMjvTWfRJj+dC68hjG8vYM8XAdcOIScSPM/l70ul1BYIZYh751W/TWcbs7iVK8duHayqL0qMw5PQH7lyqjm+k32HJ5YoAAOFohIrMO8jxjBCNkwQffFNfnJnUMqC91DqEYeigxfnylU4Vi76xIIVGodAQKhPDytLley60LEmWXjIYVyhlFxsGt60unJTyQl2jK3JTmPTpQp4IzGfQu3RzJM0Ec3kKVfWP/+Ji2yKMeGhlkZTHjo3GX45WbyjKiFVcvnH02s05XKGPiCzPTnnrq7rCdMnlfl2JjO8OhB9Ylv9l19ibZ3tOdU3QUUSdxPtOuaoyUxKK+J978wSfjT///S2Xe0djs87XBTmYz19s41KpCg6jzjDhMATfPNWgVsnvKsulJHxKPz/burkiRynmQgCI6IyJgHNDYdaBC213rilyWbx+BNlUkLI8TXqwYzhTxEm0EpDjOeS0hn3gQKcmaHM9f+faFVLBrlRZAZcloqJ+i3OtShGczi7q9Qer2of/67512dNZI8kbIDrtlhbrHikJPrzUVpmh2N8+3GqwbslNsbq9AAAJg1HbPfbgnovMcODWkhwMRs43DGgc1st1g4sKU1ZlKOJPMHZTQQuGDXzePrgtNyUMIiR1mzA7Nv3xEy4F3XVLMZuOcegYSalLkyUCFr6yIK1rzHjHoqyzGl2RQsil0UnVgU9LgsJkCY6hEADREPjPL89YHeFDx+u6QPQ36xfRUEqf3ZzG4jhcgYMX2p/YVYljaJCcvJcKKQhMgZFwXEXF+AEpUMleO1hdmC6l0ahiOuPr3sETbWOjPWPPPbi+TWuq11l2qNOWqpMutgwzqdSBcdP4pP2+jYsSxUBsHES02Y5D1yRBumzvxdYcufBI18gtWdeGlALDAIZrNdozdX2byrN3ryqcMwMpWFASfNI6WJwk6jfZldNFCUx+bx5X1G038al4W7/utSPVJrtnaX7Kx7+6hyCIQ5c64ikyQRAQBOFUdFVeKp1KOVjXnc1lHtBaVqVK0uZXzhQYJuOMNRYHH6fRKAhZc03IwEvS5Sea+pZmJe8538zHaVp34P2rAy+ca3//ysCYx6fIEd2pSvrNxuJ8JatYKmrTW7JFU74uJ/rHYzwY3JgkwDG0Ii9l7/GGVYXpey+2VGQpY4EEYJ4iDDHEBJVayh+xOmVsBoOCjrscK7KSP6pqg2Ag5uBkxA6YmS3tujw+EiWsAd+w0fPhlYG9V4dg/eSfvrcuRyakosjeC60r8pQ30hRZvfiKZvKdS51ftxkmuwf/8vAtFelJq3JTPr/SVagUM2m0YCTEotMKVNLXvqxZQBKgMPLbr+v3XNHQJw0vPb19SZbii9qu4hQZm0aLd4i6iX8b3NQD/3SQtDhTzB0wO0bsrrJUYe+o6YuazsEhw93bFq3LTJ+1PXpjFQaic31T42ENuF891lChVqxOTxu1uN+v7g0h0acr1Rwa1ejzfH2pq7Iw3ejxF6dIZokBMFfLsUmyRPjDQQZK9yWEPcQ8hbQW50/f+oZbmPrTW0pjLWhdzg/Ptv5kyzIh6/qeMyRm6AEAEAQpK6+gThtSDV6P0+Cz2rw5+VKj38MV4i98eLFyZcakz23wer+/v9o8OL6jIm9rccbCR7kRxHOmX+2/6OayX7ttuS7gVPPEIjrW63BDocgrR6p5HNb6/LT4HW9QDIAEPeAPR4ZM9nyZMEamD3eOFEv5eoOteUAr5rNaxgyPbSiL90rqtBlJMeALBxjoDFs/ifiziD8cyd5a+3TDeuvjO5evLlEREHjvRONfr/ZkwtAt6uQMGT82nY9jKIeOfXK5c1128p5TLbcuz5eKeTACf295/sfH6gtUspjYQ+EZ2eVjh5uz4MCP3zhGTeIZW8cf2lgm4jHJ7jUMTgwYbPfNrLh8IyDFAACAj9G1AZeCy/3kfHu+UnS1X3v/soJkMeuY1TtiMO/MU3x/pbpQIdL6nRGYePalbwZGzW/++vbbyvPzkyWvn7h6I5KAHNVWneX8oK5+0HRuQPtV08S7VT1lcs4zWypErBmlsgAA1R2aYZ31/o1TkcoQAGI6YyzgTOPzLrYMPr5j2eaS9LPtgyVp0hwJ72D7cLyVAIHgIbNdyKSPuO1sCv3Z0/WtjQM/37o8WcTkYzQAABWC3G7fmkwlCsMxanK+eVDMY96+ekaQCRTX+fg1OIYuyUzaV91RkiIZtblzJDw+l3qkfvS1qt5f/3W/3WzbVVnQp5m02D23Ls0rUSvGdfa1OamqaYMSiSgA6HTE86x3CPknaUvZmZ9qDnhYVCqHShszO5b86l1BCPrq/x5K4bNNbl84SnTqzQouk4/TCADYDNqGxVn7z7cty1Ye7RopUohYGDZLEmAoZcLifP6bukF7JEXJanb79961KlvC77ObU1kck9Pz3tGrT+5cLmDjiXw9Nkc+q8M4htJp6J5TTQgC6+yuSx0jdyzNvGoJyHjMXqenWMgS8LEcPp+OUn7xydmGtpGHb61QirntWpOCy+LQp8qQg5mv08RYAn8kiEAwjlHL0uVvnmmsNtqKZXzldCotWzA04PLsN9q+2Vf1xjO7wIIZSOeTBFSU8mG7RkDHunWmVAEHoyAmv5dDoV3pGXnncO2E2XH7qsIty3NylBIAQEaScBYBja8oqBBwKjKSTrQNNLX2fa213VOiYi9Y0YWBoXyc1m2w8HEaRkGYGKXfZBcw8OI0+ZHG3hQJ/+WD1QcGzIiSxVNyVxYoHshL3pUuzZXw2DSqiscNI0EhDT/ZP16uFCdOjYOZkgBFpm45vddlC/hjJdhmSYIlWYp4SZBIuONBoyC5Yt7+9mEiCp3sHskS8TzR0IDFmS7k/++XVQdre25Rq3g4HYGRWdmT5+PxHzcPElHwpzNtb13s0zpc5Ukcg0b7yhPbVGI+ACCJz64fmsAoqJiLX1cSkNWL7b6AnENvru9+4t6VGBeS0llsOkbGFhdcTxJ83DoEIYjB4fmstj9fxNYPa3/xvTXJSl6pQq5WSmLhxYGbkuDfDjf1wD8X/lCkS2/OEHHDUeL0gHaXOtUTCe672L65MGPC5fjVrrXxjtEkbrzCwAJ6wBpw94xYe/Xmx9aUQxB0blDb43D+aHUhH6cFotFhrX3vxQZ1duqyjCQ2ffaLG0pwCiIWPBY5kRYfkApmegr94K8Hh3mMz+9ey6RRyXY6bcYPT7Tetjgn59tM9CbqgUWLFtNoNABAt90kALRjNT2PbKlI4XDFdIYAo4+ZbHSIsiQ95ZfHmqgUOJlJe+Ge9WjC5PR1Maf0ItdcHtS+1dj/xu5KtUwQq/YFEdG3BsfZnvDPty6bdbjregqBuZyFCADax6fEFbm+emTyndruUjGvumlw7eLMCz0j28tzM2UzSBjZnxtRIIln5/OFj17pemz7UoxKAQCkSfm/vdrzaEV2sohzrq5TN+kmokRsMvL9881lmUnHW0Zkcu4XTaMBGHqgNCODTL99sLpAJaNjUx/axHBYfyQIEuwDj796pI9J/a5CMmawPb27kkalAAAcXv/hqz2PbyqnJfghXBdmvzc2NSik4d1O+0e9urMnGncuzT3RMnS4phfmMpxObxafJRbRjD6Pmi9uah//48fnV5Wofvfg5h67OY3LvXFJ4PKH3m3or0yT7ihN2q1Op9GAXqtT8tgqMV8mYMZcUAAAk3bX/vNtT91eGV8lAwAgpjM8WLitS1eoki/LVRYoxW+ebihNk+WKeaSVgJQETAwdMtkdEX8qm/dGbWcGi23xRFblKNKEPF84EI1CPQZLrpQfX4fY4vQeq+n+3tbZDlfEtHM/NL3EmCsdpSTx2R9dbluRkXS0Z+yts/0jVo/HahodNIQCoVQp9/6Nix7cVM5i0Mwu/5olqhPVPUUqeaxCXGwqIfaKgOIORB7lv082cDBMyKChVOAPQQav66EXDw21T7z/i7sWZynYOIZAcOOoYdzhWp2pjHfgKctR7j3esDxb+VXXSKFCSEEA+XzhGBoIRV4+XneybbA8K6Vj0iNLosvsgRW5yalint7njngj7x+tf3pXJX8uMUACgZFAJAhD8Kxq2goR5/UOzfOvfd1qttxXWbhZnVFnMp7pm/jOoowmn7dUwhbS6Hqjs7ZZ48WgtUUqAoZ8obBKxIuddeITZ/J7RXHZkMJEJHYi5Sr5iZqOAxp9Zaq0zmQ/rjNdMlh9Xj/P7JTx2WuKVGTC0wX465ySwOjwXenWXdYZbWy6XW+BqWggFHxpX9XouG3lsoxH1pfLhZyYsYJsZFZRghmmJCq6uShjabaytm3g5WbNfSUZC1t9Sd8h0tcfR6ksGtpltAZhSCln/9eJxubeEUfv+J/uWPVYoWqZmCdnMygwEpj2XBfScBfhqx8zc2hUGWv+6sUzJYEt4A9HI2I6E8RpXR6T/tHJpmQB589HqzcUZTBx7NoZXU8SqKX8PQ39raOWfS2ak+06vcN3RWsYdwCTyVHX1H/32mIoIbZ4zmZpFASBoN+fba8aNu7apFbj9LMNvQ/tLB9w2LNFAioCAwDyFOJ9NR1FKTIKBSwsCWLVi/u7RnO2LbYhMM0R9KB+Oc5m0ahTkiB5IUmQLeL8b3XXxc6JHCHzXFP/D3YuHbO7pTymLehL5nCoCPzFlc5VeakUGPFFwyj0rb+nN/H/W9zUA/9ExIuB/e2au0sypCz8d4cvLstI1tuc/3v3hvjZXBI37iMEzU/TrQF3yA8+vtx29/pCGYMJAfBRS3+IyzBHoo2TtnMGa8uAVlKcnknDFqXMm0x9FiWdD/F0E4Up/nCQAiPuUPhE7yiTw0xm4SebBz480/zoukUSLoOGUnzh0KnBEbc1oLe6HlxdMn/DcyBRD5SWltLpOADAHvC/tf/KlvKcjGl/JBiCLE7PoapuQKO+0NAX0pk+e3KXgHmjtohZSBwBCACdzfXjj06lJUueXlHQbTeR1b4AAAaL06OzPrK2lIP/LZ5CYObhIACMceKqy+p8rXvks7Zhw7jz5OmG+zaUohhqsLvvXzUjBqPTZiT7M6cCiU63HGOBs/CXzy+uKVZJxUxy34sa/ZVRo46FPrko45H1SxAIOlXfd6l9mM6k9evMwybbD9eXFWQKTtQPfn+DOk/Eqxox5El4fAatQCV79WB1YdwHNSYJeDiNgsBkvCZJO8j051eHDWcnTK/fvTxHIDhT33/P+lIalWJ0eF74pvbxjeU8xre+gjHjAAmDy/vkoSshJ9GnneBClI2lGRAV1ZjsEjj49bDpu4XZOULhuNF+/3Of8tn4kd8/xGPhYjqj02pM43IxlPJZdcfqmTafeJAPy3v1fYuTRdpoJI/PSGKzjrX0qFPkt+al13YMrynKDEanaE0gEnrh86pN5dlZyjkSJYnpDEkq5/C5jiKVXMhmqJOlb01LgkOdI9kiLpWCAAAETFqfwTZic75c00sEoncWpNS2a1YXpVNgSu+kOYnLYtOweDHwxqGax3ctn1VSLfaMQzN/k4vdH9xb36eWCf5ypNrkR/KU7FIefuhIrUTAfufnd+zaWlSklIYjxIDFsShFmsrjChTM9w7XkZJglndQvCSI/atpwlw3ajzTq68ZNV62e9q8/oaq7iWZCps38MCuxaNuN4qgIx6P2xcQ4jQqBeHEOeDRMbQ8R7nneEOuUnyka2RTTqo/EiRv2gwp/96XD+oc7t/ffcvBnvEsdWo4EhgZNuJJjCQU/59PLqwsUZWq5C0W++WB8QK5kEuf/WwS0/GsifOgSQzaG4PjxqbhD39213mN/v2GAWnYZ2DgFXJ254QVpUAfnW3bsaZoca7ys6vdMJVSKBNy6Ne4ZiISTQSusBeDUTBVHZzz7uGqKovruyWZi0VcGR0sF4uPXOzYXpFrcHtlPBblehlIEyXB8Y6xjWrFslTJgZouj4D1ad9Y1/mu+9aW/GDbklyZuM9pEc2MLQYJRQkSTydNzMtRSl6tbj/6Vd3ulWpWwpDGg5QEPQYrDAEGRhEy8Uv6yTqL6+HFKcOD+tFg8OKFzjWVmW4iZPZ7ycXo85h8nkmfJ0oQCgH1isaSLeLSUcqNSAIRDTf6PNaAX0i7FkA/YXb+8u3jZ+v7DHp7n8G6aXEW7YatBBgFKVOKDvSPSZK4m9OElVliijdoHTN0tWo4Ck6uXKQUcm5QEsjZeN345G51sgpAVc2DjCXZLiJog7FwKJDCZlKuZQ69mp8iYcXNHSQ2xaBS8visYw39P9ux7PGC9CQGrcUfNHlDIjospOE4FS1Mlrx+qqEgWcyYXxJIqeiHbQNVZ5rzdlaYQ+EJCAo4bLkiid7nVMvEF7pH6FSKUsCJRiM3M5D+O+GmHvgnonXCpOSxBEz6h019y1KkqTxWVffIS1/VBtHQb3fdkviuvHExEEPio2gPejhUxq/3n19WkLw6LRUA0Kaz6N2++wvS78lUFPPZZ842L89ISkLRLer0RE+hGMiWFxYDIIFuUmDEFw681ztU5wqOOz2fjxjefedkf44SdgbbJqwnusZOa0av9luudgw8um6RIq7I5Y0gUQ8UFhUzmcx+h0U/6hgz2O7bsCi2MQEAnYb85fNLH7RPqCjRp7cuXZOdvEDjC2NOPfD4nhNaCrrnzlUQDJyhQCyz4dH6vmVZyrSZvrw3LgbAzMEnAKgbMTCYNGc4cmXS9uGgtqdr7MdLclcnC87U9Z6asGv6Rh/ZsFghupYlIyYG5jso6fsL5pmqrO0cGZgw37O+lHQcokDI21d7gID1HTHHGQmJcIaYx8pNk+ocnpfOdYwbzT+/rVIfdBcIJWvzUo5c6VqUK80XCQ53jWSLuDwGrXDaSjBbEujMLBxloFPdo8AIBUYQGHmjpmNNkSRDwEsT8PecaFhVpKLTqQ+9/VWyjL+pQJXQ2evDEQzwsWsq4vHD1VqDF4ds7z68oyI7qbp9eENZptXrvb+isPVK7wdD2gw6becv9ugtrn2/ua8wYyrQ3+jziOkMpYBzsWsEQynxxZhiIMe/XW8dc7hWqWTGYABH0AGj0e0NP7WuLEchutA8iKFIqlQQiIQiRLSpR6vRWmKeQomQMVgxbi1i4+pkybtnGxer5PkS3pHuERWfTaMgGpcNhZA/nm4Z17sfWpZ7z9KcS82DCALDKBKIhFN4nPg6xH/+9MKGuGxRYCb7B9M/ZpH4Z081Zoq4n9Zr+Bh0Z6lKSae98tkFny/4P09tj+BUuYAuxBjdBouCyyIpdXy38WmTYAyxN0ZMbBzvG1+VJv3vdUVcJvzm4cbxmu4tJRkjWqt4fVGvzdvm8FVPmgUoZUmSWMJi6OMqIZCdxzG0PEf55le11XZXsYyfJuCSkuNU26DW7krms9lMulzI+vXSfAVG/ay6aYDL2d8+pO3RjqcJmsz2UzqTgIWtU8wI4iKmpTIU59Afv4HW6hwYGC9SSJzB0OEBbVq2nCbi1o8aUS4rSoTe/aSGm6fsoEQ7bC6zwXLgbPNDq0q4jDl89uIxSxIQBBEmIgiMAADSRNxJt7ciWbK/XbNUJSwWilv7tQaT43tbymU8VnwG0sS6wjHMkgQvnut4eo3a7PR8WNM1XNvn7dbet3NJmUpOxjvFihLMOv0ClWzf2ZZClYw2/TjPur6pAnZDVacLx863D96/YoZPWiJISTBkthucXh4Dy+ZybGZnGpezdXnuiZPtNB5eW6/5yfaVYjpDSMPFdCaXiskZbAmdKaEzEQADhDjeM7E8RQrmiqkl2xcw6D2TVg6dSkFgo8+TzxP32c0clGbx+OtHTXUjJi2Ge/WmjNWLf7659FB9T0GK5MYdh5gYmsXBP6rvQ8Wcg/trvC7/tpW5n/z8O0ohp6p3tDB5qikIRkLXkwRJdOzdloHeFs3DmxbvyknerJTjSJiNYlqbS8y4Vrr4rdMNeSkiBnVeSWBxej893fzjLWU148ZsETeFxVgh4QtomN7uDYCgkIZPlS4+WV+ojJcEMzqjNdiG2keExWmP56c/mJ8mo2P9vkjQ4Vkklw677SszUvZf6bpZlODfDzf1wD8LpMNMloTXMGZ8o7a7TC4aMzn++9PTOAre/cFOPj472cvfIAbAXGSOIED9oLZr3Li+LENMZ9j9wRO94w8szkrjMAAAA+Omtp4xjoh99+IcBnVevwsobgp5ASTSzQgAJpffbfMtSsLz6czP9l2Mpkt+t7Lw6RV5K1TigM9zuaFruHscZ9N/uWvlfM3Oh5nxxABBkHy1ejwSUDH5n5xu2lKRq5iuhkMA4A8HohDlM63ZPq799d3r1uem8PDrfI8XQOI4XB7Qvt008ObuynQRxxRwi2kMOgUFAHSMGbUW5+aS2VEKN+IpBOYSYHqHu16jv+LxoQicycbzmXSd1ZmJ097aX7U4P/nChRaegvvsXWtAHJMzLegpFJ0WA2Ce6/vBN/UbyrLIKUAUpjTqjHtb+jeJeZ2TNp05tK9p6Gjb6KUBw7nByfbe3v+7e11RipT0dmBg1KJU2QenmzJSeXkCHikJSCtBoiTgMWjdeouAOSPj0NURQ4POvDotOY3HG/XazjcO4Vzqc52D/EDkj3etSwxEvi567eYszjU3qsYJc7fRUZrMN1o9t6/KLktVlmYpPj/fsrU4c9hg21WpPnuy+U9XOlBfeHFm0rMPrr9VMJYAACAASURBVI+ND2kiENMZ+cmSz6s7Er2GyAvn8AeP9Y3tVqc5wl4mSjs6YRoZNuwsypRymNA0l1KnSzEqQgCw93jjpoqcxBjQeJDc+oOvrpZkKgQselGqdM/5lqIUabaQu699yBbyhgPQizXtLj/hUDB+tDhHwqDlpkrePV7vQqECqRBFIQiCSCJS2zU6rLfM0szQXLccFLe+btz4p4vtfVrnA6tTc5WyL+oG93xy1iESyZdnhUQsMwXBokBApXoCoazpmhgAACmDxZcz3j9ytTgjadZAzXIs3NPYX5kqXZYi6bdbTtUP7shSfHa0zu3yPXPnynvV6SukAhkNg+2uymS5nMVgYigCwUMmu5zLnOGsgqFcBvbppxfawpEdBWlkIMHXTQM7y/NKVUlnOjTfX65OFbBTRdzX9tckoTDTEXjth9u/n5dOgyBBMHxPnooaV8yBRPytRoGRYDSMTLtGkHXNfrBu8aIsxZ7TTe1G+3aFuMfoGD7dmkSFju6/SlApHoOt7VyH5uqAadRMCxIuKLJYNXsoEkFKAiGdAQCgwEiEiESICAojAICKjKRPr3Z0jHlOD02oBZz3v6m/fWWBUsydlYE0sa5wPKYkwakGT4g40joiw6knqruaa3vWbav403dW58gEVl8gsU5ZvCQgY23fOnKlUCWL583xkPFZr390jp4hL5ILlLzrVAwkI4wpMDRqcYqZeLaYp3e4WQzqvWsWvXWucaBXv6IoPU3Gn974WtIeNhVL5XJa9WYMQaSsGdWLZ0kCAKArGp2ASZt0+3t09j6d6/3Grup+Iw1FSlNE/7e9TJ0hJ6x2dZo0Wcz9cmZRArCgJKjtHNl/oe3ymZZWi/N/71p9gQU9WpzjivqWpCrVSvHrpxsKpiXBAlYCsgLagUsdp4435q5Sr8iQZwo4CAQlM1musDeVzek1WgXTeq8wRfreuZbsJP4sSYChyGuHaqIEceRy55M7lycLOTQK5XjfeJlCBAAQ0jApAx+3Ofk4HYVhOhXFKMi+K52r81LJCIdZnTl1tY8spdyst2QKOSksRiGPbfL46RQkCCKpXO6sOmU30w39e+CmHvinwBMKf9MzyuYwJj2+Ez3j9d3Gqn79H47WS+iRF7+3LVnMmUUN/2YxMOtb7g0HnZ7gh5da799YXCiUAAD2NPSSpgkAgM3l++hMU1qOYndJJishbCAesbmxBTAn3SQT5C9Nl6tY3Ff2X0qTCwZ9gV3pspM13a8cqGKwqesLMid9vvcf28H+9uw8UQ/k5OSG6diQxjxmsN9zy5T3ETkm4WikWjN5fkinZGAl6fJYObBvi0S2RK750adVOqtjU0ZSCI+GolExjR6ORigQcrShb0m2UsKZkcLobzAOAAAIAELhSO34pI4aXSFlr5RJJHTsVN9YLhN/6bOLp6/2jZtsNjr0zg+3Z0gFsX27bMZ8nhiaX4FEAYAhiJjHU6i+e0yjt9w7zRrt/uCbjYOQK5wlZ6zNTLmnPCs/jX17YUaxgl8o5QAIenJjeZ/DEksQiWMoKQlUqfyFJUEEhCVMZpfOwp+WBCa375lDNVkyvp6CfKbRNVu9LqO91eKGzc5XH9jM/7s9hRz+4PHesSIp71D/ODNdms1jqdhsi8dnDkd6BiaW5CQPGGwr81OPHa0Lpos/fmK7QsCOv/oxr6HEQILYZnsa+8uVoiglnMMV4hTkvN5C9wV3FWeT/8UxFKNSPjvTvKI4ralnQqOz3h/HzueDlMESKFifHGssTJfzmHQUgb+o6dhckpnCY37RNnSidwwEAB12ZaSl0ry+LCGbjdO1kWBTw9CaIhWdhhJElAJTLE7v5+dan9xVSWbhJAAgCECqQgLE/QGm1wAAALD7g192jXDTxFQRzQ7QiYA/HAl1jespBusPNpdNuryPFabxqNTBSdsipYQ+Pb9AjoYl5JPgjC/Ota4tna2NY5KgTW+ZcHi25iYbnZ53Tzf/YE2p3xfcd7YlSyH61XdvoSEIhiBolGBQ0ezpyrVMDNU7PAgMM7AZZDRNyh83O2/JVp7V6Nh0qt7iahnRbi7NbtRbtxaqvmnszVGIqgY0L39cxaWhv/7+LfkSEQDAbHeXJol506ZaYloLgYSnPhQNx8jc80drNhSqlmYrHeFwtdMzeKnz8OnmiZ5xl90zMWFRZUr8HEGSlGdGaC/ds+pP39/yyNaKUCR6onVgAU8zEgQAIjqjx2YS0xkQAPEFgzVu27b8rP2Xm6zOaNWIlhMhnt61nNyLAsMIDA+abHIOEywYWwwAIDnls4dqz3eOBa323cvyXv/JLgENazXZFinE85UuJkMpSNqHY2ihSvbO0br8NCktweUVAJAm4086vBtzk89pdEvSZPj8E08xMDEqAYhzgxMZIi4NQ4eNDiodXpwiP9g1aDe61i/OujaVECcJYAjCEOTyqH5xkoiMxItJAqsvAKKAz8B6J+0tetuRtrF3r/Rd6jew6NRcMfeOogx1GntVuiJVwAIAZCuEZTnKA+dbZUJ22+gkl0VLErChuFsgURLUdo6QNYy3L829Z32pjSBuLUj9aVH2sM2RzuGQafvzleLXTtXHSrbNii0G0zz+9x+f6x41blua+/pPdgpo1GaDdVYGUmVcUQI6lYJRkD0XWytzlfGtKcXcNw7XXG7TPLp9CWkAlLDoTdpryVhRBBbg9O7pOmVKAedS9whGQVJEPFKokOf4+4/PnWno37WqYFVRenwpZRaGytmMIbN97tLFccUWbuJfFzf1wD8e/nDks/ahy95Ai83VobOuUYpfuH0pEyLOnqmvKEz50a3L0ZlZ3v82MRBD7KXlDQfpCPrsF+eK8sSLk5JwFG3TWcYd7q15U1T45S8v56fL+Cx6QbJ4Aa6fyIDnxJx0s11rVvJYXDp2sWXwl28fF+WJI0PG/jHThrLMe25fLGWwL/eN/XBjef5cDtPXRaIewBUyBVvyxYXWp3ZV4tNEBwLAFw5Y3MGHD14Oaicf37LkH24cqBuZrNOZbO0jx+t6AoGQ3elTcLiBQPhy75jDG9hcmjlrl7/BOEAmf2wam0wRsLekKFJZ7D6HuctsaRgzsGDIanE/8/Da4jwFykR2rcw3+j1k9LArGHCEAhI6wxcJzld9jGR+8820v3G4ZnulWi6ccuV6/Up3vohTmsTekpch4dIwBBXRGaNeexaf93lN++6KXD81EhMDJI9k3IAkIHMKUZAZU5sPfXHxfLdB5/CbtQ4VTlvCZamTpcdq2reVZ28rypynvwthlqfQ3oa+UrmQEo16Ha5frSoccAcgImhw+MqUkvIs5YFLbc5IREjDmvq1v7195XgwVJ4sniW555QEsQ3a9dZRu2tzttIe9AtpuMsbqG8d2FWSJYvLb6sUc883DfqCoZq2kaduX3HdCWOycSmDyZUz3jtcV5Auz5ILL3QNIwgM4xAMgVPDE07z5D2VZX4YXpIkNts8FArw+4ObF2ftOXa1WJXEwemTdscbh648tbuSrDYAAUAQAJ7mOzAAEARB01Q4xoYhAPY29i9PlWxQiFdImKskYgkBPbf3BMXk5eZIoDQRXcSs7RwXUeDiJPGky5PEZRHT+wIARHSGlxapax5h4bTkhLlqFKaYvZ6PG/vVfNaY2f7ZlY571hWoBLzn9p4JhiKH/u9BNoNGABAIRzQWR75UEG9EIjNUJiauLctW7j/fliXjv9c6VN81/N0Vxe5oSO8K3F6kIiDkl1+cd9l8TrfvJw+sFosYloAvFCQ8wVCGiAemb12y53O+AGNz5A1D2mGTnSwBfqR7bFdeytaK7LruMY5MJJCLjCi9ND/9Z1vVK1UKHg7tqMhRCjgsnFaQIrnUvZCnGQly2GOOQ6Tv/oDTbPL58ngiJkbdUpK5r6q5zx9+/jtrUoXX/C0ZGKp3uCkQzMDQBeazSdCpFCkLu9o98D/3rL2lJAMAkMxnZc5VupgAwOL3kQ73lGlJAACgUVEUQfadaVlZrAJzDVd5jvLA+baiNOnrVe2VGXImttD0Ewm9P1jlcA07XTIGwsKpJoffEPJq9fat5bmHLrYvyUuZUxJIWXiVRu8FgRAUJnMGkJJgT2P//nrNew2DFwcNfUaXMEdUlCFRp/O2ZySVJokYVFRIwwecllmli985WruqIP2b5v6l2ck06oxcWLFRpVEp739TP6SzbCjLum/jIqWYqxRx1mcrzg5qs4QcOYsxYLIlsVhjHkcyZ6pkGykJ4AQTAQBAKebWdY3uqFRvXpIDAEjmsWaZOEhJkMbl9hltfJxGgeEkPvvq4ASVgkri0g0BAFYWqxp6JxZPV0EGAMxKxkqZWbq4IFmyr6Yjlm6IlARsBnbgQvvzj28jW6BRECqCnOgbX6wQUeYsXRxLN3RTEvzr46Ye+AfDH4rUjempNOhJdaaUSpkwOX5QkWOwuX7x1tdsKb7nyTuYdAz8Q4sMQNOfk3A0fLln/MVjtSWp0uUZKbXDhiad5e6STPJdUN8zfrF1iCPj7SjJoiDwfIz/BsXAnBPeRpfX5Q9miLgWp/eXH5xq7ZuAfOEf3b985wZ1ulgQAJGAN6y3ue//9vkiSSTqgQ1rN7z51dVFWYqSrKRYt/3hAADg0QOX2xp6fnPnajmPVZE2wzn422LWgBAAfNE6tEQp/uUdK5YuSQ2GIn0Dk3/+9MJnZ1omPP7/2rUCwJF4AfC3GQcAAEan1+0P5U/P/Qsw/KuO0SI2u6ZJ8+DGxVtKc75u6X9sdVlJkkxMZ4jpjAGHJUiE01n8QCRIp2DxFCcGcuV8YqCua1Rvcd25duoCteksTeNGejS6OjtZwKDHdKyIzjja2ds7Zn5oTakt6CM9nuMPt7CVIC9NgmEI+SWjILAnEm6aMAyanF81D/5kQ8HvtpTfXprOQik1A/q9tQNCNvP1+9ehyLf+0gw5bSr2NQ+Wdr2ldcKcwsHPtw8+tXFREodDBVDzpCNHxE3hsXAMzU2WfHWp9WDTgIxB/4+7VvdbHVQEkbJmlOsCc0mCWPakg52aMoXIBwKkUaJxRE9DkPX5abMuARWFv7rctXNlwQ0WPCZ3lzKYvCTme4frspSikjTZgfrubKngvdZ+ndlPDQVWqVNbXcFHc5OpCFw3bChJlqSKePnpkjcP13p8wb9+fun2tQW5yRKyQQIACALQgg87NC1vbs1WWoLuHK6Qi6GPvn6I7gp/9Kt77lqaP6zRb0mRqlh4g96+uzDd5gnAMMyaOWcviQuJZiQkoPzLxXYFi1bdNTJsst27rrBAJIEg6PcfnXv56R2FmUlTfZhO0xm/4zUZOVMS4BhanqN8Yf+lE6296dmpqTzWvtbhYinf5gv+79eNZ3sMnZrh1YvS/nvHGj6G0WB00GorlIop0zWeyZ5H4sZk1uBQYGTS5fq6sX91XqpCwG7XW8cdnu35qWGcUCuke7687DDbP/vxjmd3LiHQqD8S2q7OmLC5hYypThYkS/bVdMZn+AFxTw0083CkJGCh2KDTlscTs6jolJMMHduxOOdc0/A34/rbclOYcaPKZ9CHTHYegw7DMI6hVBT5/GzLqrkCCQAAqWKuxeXJThLG9AmNgqAIfLpfuzxNCsPwoMku4zAhAEQ0vMduisUWozBCdlUh4lxsmXJMIuIkDQk6hi7JTX7zaG0IRV4/Ube1JJM9f2yxxuWtNlqNgeAqCVfBxPVWT55QQKDRJB5DIuXWdIyuLVR9cqqxYqYkCEZDCIQAAPIkvPMD+mKpSOdzxiRBsVx4RWdao5Ldu0j1QFnGerkwlYmzqRSvN8inU6kIBcxMOwam0w19c6V7VUH66S5NgVKMJUgCMjxjY3n2Q1vK4z2yaDNLFw+ZbTidQsbvxiQBYx5JUJGXcqS6qyBdRp8O541RcHIDs9+bxGRBAGjMdrKedJ5C/MWVjsIUSbzXEJtBW1V8/dLFCAT1mawyFpOBoXQquudCa75CzMHp5Bx/mkxgtLr8oXBG0pRlNb7oW6IkoFKQN840qZPFfBy/KQn+1fGt/XFvYmF06sypPFYyj2H3B9rHTP+5ogAA8POPT/uoka/+6wHpTGfK64qBWS/ZREDT2TB94QANob55ugHiiN/7vC7jnj9+0NQvjhJcGhUAYHP5vrnaU1qWuSE3hYYi0A20/Ddg3OaSc5gEAD97+5slRemr7lxx4YXH7qkoTWXxIpRoBpN/tkOzsWi288Dfg68vtX5d3VWeqyT/9IYDgUgQANA0Zhm0uArSpASC3JKbulAT3x5VGn2z1rwqU64Uc8UC1uqKjJee2PHiUzuYMu5Pty/lMmh0CkanYL5wgFyuKwYSrwVJ1PQOd7z3bafB6vOGXO6AkEGvLEhrGNLSYEp5XOGnQDTCQbHYTCoUpxVjzYIF9d6l1qH4SMS60cmV6VKlgClhTc1w4xTMGw4QBFHXNVFZmDzkspLGgcTpVRELf2br8i8vdLmi/g0Z8n2tA65ASMDGH9lR8ef9F7qM5k6rkVwCIPil0f1WXbeagfxwaYGCyxCz6Guyk27JkdECzvtXZOFz+SRcF6FoJP7PKyOTOXzmwSudGwpVZGQnE4E5oUgGd2qEBWz8oY3lQgS67dYyg8N9Z6Hqyuik3R8ECcOo5os7rUYRC398c8WrJ65aXV4AQIvObPH62SyYFAPeYOibtsF8hWjWaAciIQqCiHnMpepUcD3M4uslYtnikuT/eP2o3eVbVpD04pn6CpFIyMF1CHPvgFGIQh8ODJ/tHyOiBALBgUhIzGFtKMt6cX+VzeUrm35GrnsPkAd1+INXxibvKEzXuGzZHAEBwKU2zaTG/OKTO9aWZKzOS31wSd6Fhj4AAJ+ODZgdGWLehM3lC0eiAEQAiEw3VSyW3bm95IUDl0wOD8kaowAQANSNTh7uGT/fptldnvXcnetQKkIAcLK+Z8vS3DWLMslb1+jyAgDErNmhVlEAMAqSLxd26c3+cCT+0gjY+J1riyVRSjqD/uuTrS0D5g+q+092j+4olSAjYxAEPbyuHEFgAECXzkJBIRpKmUXE4Th2TiQsP3j7m/PdQ+UZCrs/eGVs8q6idBiGAARtW5YbCIaDwfDuynwKDBstPjaOChl4Mo/VqTNP9Y2FP7mp/LWT9RaXN9YgNP+1yOYKJ32edDYPAEB6DZG7yHnMr360ne/2bdxzwuDwxHpLoyB5cmG33hwMRyAAlqlTAQB1nSNQ3FGguOXJTUtOtw2RnSEvSpFMEI5G2/RWCQuHADC5vGRPyCJlAAAMobpCvlgPn9xdebqh3+L0gpnjRi4CNv78w5vHu8e5XPb25z/X2t2JLzpPOPL1+GSX3ZXPZe1Ilqax8Dwum02hOHz+NBZHzZOsUCXlq+TH2we3Vea//mU1eSwSVBgNREIAAB4dW50mP9I5ks7i9dqnRlvMpL24tQKjwtliDpdOZaCUdBa+TCxS8ThdBqs/GgYA5HCFse1JLFWnCtkMIQt/cGXxqyevWt3eWX1eqk7ls3H6XFYXDo16d5HqQMdwOEr4w1E6QSUbFzDpT26qeO3kVYvbBwFARaa6HQOfjT+5a/mrcWdXKOMDANr1VvJPsp88nBYhCPKhEDDpt5Zmv3q8QWt3zm5qd+VrcU2RvdrXNuTwB8k1EiYjEiEa9bpIlPCEosdHHM+8/Y3V5QUEcIb8AIAndi+v6xqNH+q7i1VXxibJFjAKUigXDZrsRADqtZs9oWiLzvXD944FIiFAAHfYD27iXxY39cA/EpNOLwAgicsCAOxt7F2WIuHSqFf7x/q0+pce2hYvBnAKZgu4/07LAPl5gKd1xfne0eZJ389uzX/h6dtAluz4F1XPfXDqz59eqGrVPPbXg0WZSQo2I2X+ypFgwfnCeMzJcSedXkAACRuv6xo1O71XPb6Xd68QsHAAgM7r5qJ4k0aHQNDSLOVcTd4QIpEZDA8A8NyHZ4w2N0EQvnDAFwniFIysbPV8VXtQO3nf6pL1uSk09B85Y0EA8HZtlyxDRkEpsTQ+CAwL+awH1xSXx9UQJVVBKBqevzEA4sZ81g+zyxeKRMRxeSHP9Iyls/Hm3vGnbl8BALjUNbIpobYahiCzrg40TQFjH7b5LnFT34TT41+Sn0L+2T1pM7p9NEpkcaokEA35I0FyCUbDTcNaXygokdKVjCmPhcSzAAAIWPgzW5d/VdXjg4IbsxT7Ovo6LEYbFCgrVu45UJfLFar5YjVfjAIaAMDi8S0pyJywumI86UBNx6ObF99W+K0FZIQgZkUOtOstFrfP4wuyMMqiDClZS3vS7i6faTg6Wdf7vc0V2hFD07gxGArfWZi+r2VwAUkgZOHri1S/O3y5Zcx4XqNdmcvjUafc0v5yup4KQcVKCUjA19Xdty7NS1w/C4kPIwHAbSX5bm9w28/eHxi11I06X9h/8bEC1Qe7KiVhOI/B0DgCgCDK02QTNhcRhchdclMlb//H7XQK5g3549uc92EnCADAvtahJUqxeDpmw2B13f/WkSyFaG1pBjkURWlSJoaJMOyHS/Lqx03haDRTzO3WmYOhyKyPSolYdsfW4r/uv2idJq8Gp/exIzU8t+dPd60tz0gacdtyucJgJFTXNb5laS55A/jDkQmHO182dRFjg09MU08aBcmXCbt05kAoQky/DPVOz5tVbRJ15qtNfTq/69YS+fP3Lb6vMk0EaEoJ9w93rL3QOayzO7Q2L0ahFIkkXTZjfFdnjcksglvXP273Bi4Pe96pavusoa9QxufQsV67OQlnnG8c3LFCva0y92ht57DFyqZheXxxp83IZWARIjrpnBIAPBa+vkj16smr8UeMX6Jxv2EISmHxBp02ciUNoQYiQbInci7jkyduE3p9T3xVE99/GgXJkwm79eZAOAJm8vVECFh0Up/Y3FMUPwrAvaWZV0YNZq8/XcybsLv84alXbkwSoDBC1gwBAAgS2OcsyAWsP35vY2dNr4dOv//1wzqbK/5kh1ze8wZLHpe1TSlJZ+EQABiCBqPhXCnP4PRGoiBKELk80e3Ls8Q8BkqlfG9bxaxjYdPculDGRyC4e9IeT/FZGHpnYfq+1mtUGAAgZuEIBFmnTzlREjx9e2Vd5whBEA+tKn7tZL3FfU3/kHjq9hXzjSpJvo/2jEpYjD6jTYIxZ0kCq8tLzCcJZo5kPAUHAORwhcNuW4aIO2pzjlicAACnL3x00Pbs3jOTrhmSIPGiJEoClYB3qUf/8McXnjncILBadq7If+V4HRVB2SgtEAkJ2IyFW8AoSAqP83XH8H/sazzUNPjUerVSyGkaMmAIit60D/wr46Ye+IfBH4pM2F1quRCF4Qmbh4rARXJBJBp98cLVApFkSU7KrO3plOu7VM5iIfEgpr9SpBjQO53vnGmmUKnfXZwvEXPuW5L/h6e31L35NOkT6fAFLNHI2rzUBVqelx/cGCZsLj6OmeyeA5c7d29clM1jFcljQa4Qm4qdaR/6BxgHiBk/HX4iJ0Vc2z1Cp2B0hAoA8IUDTRrjaO/oT7ctk3MYaQvqn28LAoC6YQMAgEFBRjzXvgc2j+/PR2oqMpNmbe8LB9jUGYHF10XsKozZnCn8a53vnrT121xfnWm5d22xgI03aXROX2BJnLgixUkgEkqUauS1jhIEmP8ST5jsrx+u2bFCHVtzbkC7JFmEwlQBzqAh1NgChZHq/rGfbV8hprFZVAxMhzqAmbcQAQAMgIiF/3Tr8jMNgwMe05bMlAt9Bh5K37WogMeg13ePkVv+uWvk0sW2Z9aoS5Vii8cPAUAQxJW+MZvHB0OQMGF6+LrQe51pLHYgEiSNRXZfoGbEUCrhNg1NrC9KJ8VA4txzbddoKBy9bbn6iZ3LejpHj3VoFpYE+Xxxl9VYpkrSWhzPXWorlfIxmMrFMACAOxDUWZy7K3LBTAQioeZeLZuBLcq+phuvixhHhABAYOjRHUtsbt+PnvtSU9XpcniffOMrBU6/rzD1VPtIVjS6MlOp5LFy5bwundnq8h6t6br7lhKFmEsAgKM00pUOLPywQ1CnwUoAIk/C7bWb01m8xuHJtT95m+MjXvnJTrInwUioZcz05Kby5iEdDIideSkH2jXhKJEh4pJz9vGkgACAilG+t63spUNVTo+fIMCPv76i01h/s2uVgseiUzAAooFIqKlHC0NgaX4KeS91GywKDpNKQaIEiBJT7RAEAQAgSACAoYiCy+o1WMgDuYOhxz89rapUG0VYgZCBdk18068Lh6LJOP/jEw3ZCtFjW5dsKMr83cGqS4MTRUliGoWi5ok7Z0qCBXC2U7N7iTpFLvzDnrOTQX+JTDDqtKezOH5/qLFv/Jm7Vz6xa/mXlzsvDOj4OI5RKHk88ZDLqhJzR62OQCgCAIABWJalJKXFLLERW+JBgaB8nqjHZgLTCd+I6ZtQzmP9z51ruyaMdSOG+F0wCpLEZXXpzGAmNZzzivNZ+JObK14/VW93+yAAYAC4NOrdxRkH2jWRSDRdxOvWm33TFphcrqjHbgLTxgqyBQEbf2J35evzS4I1xap7NpTuUMmtTMZ/H7g46fRAAHTbXaRZYI1UkM7C4x+rYCTExGj5UmGfwRqMRAEAEAT9dOuyCz0jAIAVRemvfVkd335MEnynWFU9brT5gzGKHwWAjaF3FaXHU2EAQL5MqHd4PcGpZ2GWJOAy6d/fsfS9r+sAAVZkJ7928moUzMDCKohDo65VJZ0b0hUliQdNdlISRAhCwKQ/sbH81VNT5sTEizGr2UQSn8MVTgbcAhz/8GrPrnfOPLLnfAEc3lmZ/9Kxq7PUxXyS4OPmwaZxc+uE5U8nWk52GqI+D904uefnd96xXA0hcF3/eOxCLCAq2vXWdq31jyeaP6sfm+gYfHh93qIsybO7Vp5pH7K4vFiC1LmJfyHc1AP/MHTqzAoui5yNbtVaNmQpAQBftfeKwuhvH9o4a2NvOEDOZP9tmPVy94YDrxy7WpomSxEwP28aqh42/HxdyUOrRfUiKAAAIABJREFUFg+6revLsmo6R3ZvLV+fk4zNP1N+42JgXuMAAFI2443DNYtylOMe/92Ls8h/ddlM+TxR3cA4AODvMQ7MBgEAACf/+sgvH7hlSGuNdd7s9j9+7CoNRQgEKUv9u8IGwFzDcnFI+8Ol+femywecbjk+5T/68okGFZelTpljMnhhzDfsk04vQYB448BXbUP5OE3EYy7KVlhc3uPN/T/bURm/C3U64cbstqZB5hSaDz/8y5ejBpvbO/WN7NBbTG6fze3OFF1zwSfx2smrFSqlk/Dn8qc8hchDzhIDsd9UKvTwqkVDQ1YEgu5Uq450jppdvrWLsj4726Ix2Bp0FgCA3uU9fbYrVyYAAEw6vTAEfVbdUZSRtLP4bwkjDkaiwy4nhlAxhBqIBD9pGSiScjEYcDC0PDMJABAIR7R2d97M2tin6/s2VmRDEBCzWT+9a0VH2/ACkoA8QTVf3O+0/Gj7cprLbfO6eTQaDBC73//CmQYhTitOnl3sz+7yn67vf2TbEnA9ENPHIhKYYm6+dOP3VlBxTKzgucZsVo15zW8+GJowV3fqDnZNMKnUQCTEoGISJv7KqcbRSdvS/JTY5SDd2GItx8hl/HHdgVCj1rwzP3XIZXM5iT+eaL7v3TNjOsvLT+9QCjkAgGAkZPMGmTSqSsJ/alP5e2ebotHobXkp+9s1oSihEvO6dWZ/KBLfbQENd4VDt5RlPvzC/s+vdg2abOtkdCYF+MKBIaclhyu2e73nWwaemE6YY3J5CYIQsXAy79FUHiSCICCIAICAIDAdAC1h495IeMjhbDVaH7zc0oHCDLfHPGp2aMzf3bXM3jx4194LH1e12CKR/350QwSAimxlKBJNwuk0CkKeu5on7rAZiTjCHZ05PuRSNzARjES3lGZSKAg9Q3rheIvd7xvxOM0e35OvfXXravUydXpZXuqY0fFNny6NzwYAwADk8cSGgCtbyu/Sm0lJAOIcdWaNPPnvRG1A/oCnTQQAgCgAUQBWZCQtF7B/fbbZNHMOW8LCwbTiFbDxogz5nuP18RvETgoCQMCk31KQ/uqJayYLLo26LEWyv13DpVHzZMIevTkQvmaBCSYYaQVsfENZ1m/3nJ4w2mcdhez5r+5da9DbAABpcuHjn5z+fm1H1YRJzWVtV0qYlKlohFj7LCoeiIRoKCWJy+zRmwEAOVyhBw6tU6e9crqezaYHwpHazpH4A5EclEujFssEv6rpBNMUP0pEAQAcGnVZsmRf61BsexqFki8T9E7aZ0kCcsYEAMBl0h/fufz9Y1eDwbDV6b0aR5RJLCwJCmV8GoWidXiyxPxBk52FYD1WUyASYuHouoK0l0/UBSMhAEC851Ws2Q1lWTHBE6PgV0YnAQA1Q4Yj9RNPfnH5UMvESFv/K/dUfvxfd25dnMPGaS2ayURJEN8U2drSZPFfLnU+f7ZNzKaN9Qy29msfeKAiBEchAJ7aVHG6fcjq8sZsF/NJgo+aB148186hUYLj2ifvW+X1hp3BAIYh6wvSXztVD+IU2k38y+GmHvjHgCTEEjYOAGjXW1gUjEAjBqdbq7X930Ob5TMLb103bGBhEHGfCm84AABoGZwMRSJrFiVPOvzHB8YqksVsGhUAgMLI6ca+tWVZAIBU0bxpzuMb/BtAGkbSBezGvgm7L4DTqXw2HjMOAAD0dtfZds1TmyoWaOS6mOksNPV+dvpMy9Vph6o6w5EoAMAbDjx5pBa12J67e52cw5Cwv/XU8gIgAGgeN7n8oZXpshweq4iPndGaem1OAoBRgzV+Zp3EjUQOxEBMfxQhAPyhiNbuUsex1TadpUFvPV/bc8+aIgDAqyeu3jLtBE+i02bM4ggWMEeQ4zXf017bOZIq4z9z58rL7cO/3XO6rl/7x3MtFclCAYMhZM4Yw9r+8UA4sihNDgDsDQfIZqGZt1Di7cRn0O+tKDzW1hcFkd3qtCM9o1aP/7Uvq+/4zUdvDWlbmgYK4bBm1IRjqFouHDLaLnaPQDD04w3l3zYrFAFAr92czubF5vy6J50uX4gIg1cO1kgYdCqMAgC6deYkLjO+GB/JMJZO+0ol8bk/v2claSUABHFHYdoXrQPuYAjESQISOVzh10Oj+Snylw5fbdeY/nCqaeebZ1rGLevz02dtGYiEXv+yZkN5luB6tyUxTfgS0Ws3G2xBPqAXVuZYdfbDf3jo1F+/zw+BR974kgDgvoL0L9qGvMEoAIAKw/oJy+rVBe5AKP5y0CiYNxyYz0seAPBp62CBlA/D0LHW8Qt94zhBjNR3LitIW1uaQQAAAxCKRHUOT75MCAEgYOEbilTvnm2UcRjLUiQH2jUcGjVfJuzSm/3T9BcCQEZnctl0fhIbguFHjzXYRiczMxRf1vZ6AlGr39drNfzk9WNb1+RDGGoJBGv05kGbM08qjBIEmQRpaoEgKM5PPdbnRUppo9Hyu47BnjPNv1RnuGwhlZB9y7byhtbhkh2L/T0Tz17oUG0s7vEHNQ7HgMm8tEh1sWvY7PKSoQ7RmRR8zsXq9p3t0Pxk8xIaSmGwsZW3FEWpyE/ONVsC4NmqFv//Y++9w+Mor/bhM2V775JW0qr3alvNlnvHGINNMwGSQGjBEEIIKSQB8qaQEAihpAAJpBnTjAuuci+qVq+rutJKWml777vz/THa9WhXLkDe35X3+nxf+4e0O/PM02bmPs85z7nD8Nuxqefa+n/Y2nfv7UsVNndj/0S07QAgYDKUAi65Zk9QAnWoGwngyimeC0SyPouBPJcRiRrCABCAl3auY1kda989pHd6CMqtV5gknbQ6yKihyvyUww39p1uHoteKtosssyYnBYBoGNRGr1iaKAGATp2JDMoiA5AQADmDbQv4g0SYQXERAIDHF+gbm3nslU9hIUj47F9/c0PCjHXfiM5Jp6vPdn0tOyVjvt8vWqVwJJxGxuNAxKrJF0oVSbwZm/PwgGZLbcGB+r4YIk5HafXjM+81D1oM1uYpw4DVGAiHZt1OkuLHhONDxCRQz1pdgYijg8Gcdl0OvCHZ8OcXepfnpPz7XGf8RoJ4wk3FzrLM+nH9gZ4Juye0p3nQ4HOZXP7uSWswhBzpHK1XT9NRGo/GiufN5LaiqMFDUvC9PZqyX+39uHs8Xcq7Z3Em3Wx86oFVpqDP6Q8gAI+tqzjbr7FHlnKuVBQALE6WMugIX8Ft6Rkr37S4+o5lfT76Se2Ywx+Yi2g61mxyXl7jX9Co2F6UdnBq+kzzQO39qzoRZEhvRRHM4HNXZClDRJicRTdMgv+juJFf6D8AbyA0YrQWJUlxDLV6/YcHtLcVp7vDgdc+PXdbZaFKPm+F9YsaA8iVyRZpDLAw+tsnW9eXZgENrR/S0zn0VZmJTDotQBATDv8njd2Z6Yr7qgtZcZsykch7aMGX0ILwBv0AEJM6s3PSIGYzUEA+PtW5dVVJ84x5bU4yKRDTazFk88SvfF6/qSwrZ/5y7BdFMBhsamwMhULhcBhBEQQQDMOWV1QZaITN4pl2OWgC/PzQxGenu+5ZXcJmMJZmKLnXSuZ4PYi+NQ0O9w8O1H+rukAp5AKA3usS0Fn7NbqGpkFOkLh/3aKYE68zxyi188m/OycNySKegH15kvy1vi+dTnM7PI/ftqxhUDsyY47J0UQmG73SFaNsA+KmE4l/H29bWZa5uTp/VXkmgcC7R1rqxnRlEu7agvSYfIXvnGxdU5Tuo4cKRDIy3RAdxeMLpE5RcrYzabhKyt/frs5LkDFQ5E8dw7Njs6tXFZ873sYPundWlzV0ax65pQbHUASQd892lGYpq9IT40u+CsiDozlGpUz2gNX4bv1gIpv5y8Nd53oGZjQmu8eXniQxuTx5CZftVZPd/cGJ9l07aqmN5bNYJbmKU40DTjSsEvOEbPonXSNlSnEwHAqGQ4FQEEdxg9NzpE/7Uev48Z7JXq19ZHzq1oocHgPePdQwOWq4b/0ioNS/oXd8bNoco0Ycnt/AKOeI4eskEACj1/2PluFcibBvypYr4myqyF1RmrFyUVZ/35QSh5sWZydJuMcHp1UCzl8+q1+3JJvDYnBZDCF73gMnNH+eIJQ6NGkNbzf250gFar1lVWaSjEl/40g9MwSf/s/9fA4TAPyhQK/OlCLkC1gM8qwUieBMn4ZBw5ekJVyaNNAxVCnkRFXDoleZdjuKRXJBIrf5dPfWzRXhZOn+f5/VqMQDVu/+Pp1zxtrMZw5ZrYcmDQwC8mVCOZuJIJe9XTFPKoTywVGEHgKa1T1ptFVkJNmJ8I9Xl+4sSO8an+HafWfqB1x89h+3Ls2QCC6ZrLNe95rUpNrc1D8eay5NVXAYNACQszjdFr2CddmWjrnu7w5eXF+ckZkouTRpmHQ6X6zMT5Rzjuxrzk8QIybXz+/b8PXcNBaCiHzB5RlJG8qy9tS1F2fOpYuRsTg9Fr2Sy5uxu3AUI2UT5vL/XOxeVZgeHeWrLM7JWJx+q0HO5CCRvJ9kjhoOg7amKP1kY98ls+OWgrToVMFRVMRh9emMIg7L7fW/9K9T4zOWjVV5bMYCCmLIQrmPsmWCI2pttlTApdMwFB0xWJMEXA6NPutxGbxuOZODopgv5G8ZmPzr580Ts9Ydq0rGdGaFiEtm3QkTBNVXyWMx1izK+mR/wyWXb2LWvTZPmS6dt0ZGBQIQIsIYiok4rFGTjUyyafK6VSLhyc4Rnoh7U3n2n/c3lGfP6bu1TBj+0qjumbGsy5MvTpVc0horkuSZAnEYwuNOG5lBKCbzJgDgKIpjmFpvkfGYOIoRAHqvi4HhdGwupxCZbugfR1sXZyk/buytykmJSWxwFek3Jo7lyYS720fbxgyXpsznBgxnNdqL6tndbeMCOl09bV5TkMqk49TEqVHEyEcwcQwQ5NORCQYDU7vdBvVk/uYCexibQf0ek6sgQcKk44XJsr+d6chJmidSFl8UAKj4nEPN6u9vW/rA4uz1SdIUDmvYHTJbzfkyKZtOY+DYnos9KwvSohWLb6PO6nSaHE9tq9lVkqXkMNq8PpPHXy2Xa122pRkpexp6SlQJbDotXmzhBv77ccMe+A+gY9KQIuKRL933WgaqUxUCFn60Tw328F0ry6hHflFjIAok7o0IAI6Al09nNw5OdmtnaxerjNYgn0d/tLpg1O07M2tu0Fv3js+0eD0/WlGuEl7eyhyD6+dbABAMh8iQg1B47m4nZZjTJYLXPjq3clEWjc2wB0I3F6iQy5FCk2N6y5fOMRpFIBBobmqKsQcqK6sypAqTzaWZNJeoEn5/YdBssbPzM/IYtCWq2GiN68FVqO19e06zPd4n1y+BSLB+Epv5257eqYbRR2+qVCnmWX3X4xyIXiv6BxLpz2xKaZ3Tpg+6RjXdmidvXZoiF/71ZNvGsixqFnOyMle5YpggMMq7GYlr5rN/+vzXj9xE/p2eIH6hse87ywrGtKbWnnEJn50gnps8DYPaHq1+2SIVmVMoDMCIZCCl8qfo3zGzHcUgUy7a3zYQDoTe+cfphNp8cY7SGg4rPGEFn9M7NvvothoAePbfdQkSvpTHFnNYAhbjOk0C8rAYNWL1jP3VC129Gtvk2Mg7j97y+q5bXR7/wdZBJZ+blnC5h1/efXpDRU589k8eg1mUId97sksfCNdmJo9ZnA5vMFsibhozHO6efLmu45XjnQgOghTuigQBw+W6c3XRvobeHLnY7vZi/lBGklilEJEVm7U5PjrZ+eTttWxKInYqBYzKgUdnAhXk9/1W47TR906zemzS8uLNFevKMo83qVMSRF2T+hfvW5eXIqvrHk1TiHt1ZqfNbbK6HrypUiURjJvt1LycBAB9vkIwEanJjNPzxIF6vd5rC/geW1qQIuQNjs8ePNn5h6duK8tKIhuid7idvkCOXERVMCtOVey+2JOdJMmXi06OTJO5ZWfsLgxBOREiove6wiF4/VzHtoq8nk5NIYcVwpAaGf+bxTmnj7c/vLnyW6XZS6R8BZOJuf1LUxNg/kSdR5cpAtskJBzWrz49m6GUGoPErUVpVSlyGo5ZvO4LbaOjk0a+y3vRH9iYkWgy2VerkqVcupDNptPwDy7M0fEwQCKL0zvfJIg+bxuGtMM6yz0rSu1e/7kx3feWFyt4bJyD1Z0f6BucfnhLZV6yDABMVkeZUpYs4nFZdDoN++2es8tL0kn+LWdx1DZjqkAwZrRJOWwUQwEglRSEiigSLDjPwxRTQcacEyUAAFKXgDyLy6CvL8lsHtOJ2MxkIReJnIKjaBhB9ncMjU0YlRL+9pUl+873xCgSRC/KJnWLjzZHTQIGjjm9/kN9WgxDURpmdnlYOM5h0Ga9rgKhrNdqGNeY/rSv3mhxrS7Punfj4pwU2fJSSrJLBIH5LeKxGJsrco8dbSspTumdtqzOUcbrlEXrg6OYPxRg4riIzeyfMQlZjEQON0AP947pS5WyCYsjM1Hy7vE2vpD721PdA2Z7bZZkbX5CbXJyCp/DxLHjg9NVKXImRiMXBaRMNhPHMiX8PV2jVJOAQ6fpnW4MRXgMBh3DZjxOdzBAii2QSJEL3z/U/OnprtrCtN8evLi2OEMw32N5Fek3Bo4hKPylczCzIGmbSrI6O4FJhKb6J3hAPH5z5cdNfcWpMtZCvDlePiJTwn+vRT3ZPoLM2v7w7ZtXJSUqOGieUDTm9/PoNAmTwaLT6Bj2/tmu2vxkamkxRZns7n8ea31wbXnLtHFFWgITw5LYzFIRX+/2cmg4l05PkQjO9GqYdEwpEYQjFaO20WR37z7e9vCGRQ1aY65cqOJxVigkPDpt1GBV8fnWsHd5lupPx1tuKBL8H8UNe+CrgiRwOQoRAJD6X5tyU4dtliPHe+5ZXZ4ovrwK8qWNARLI/Mer1e8SMbgA8PaJS+tLM7k8ev2oflNOakmiOE/Eq5aLysT8Qwcbd+anbb6CNO91Mq0oooyThuI4inmCPgzBTg9p6TTa4IT+TLdmZUXOH+r7skX8FBGXhqEmn1vMYL1/pn1jadaCKjxfCD6fr6WlOWIPoAgAhmE1S5cymUwEkPcOtTgDQSwQ/NmOVQynZ3lOiiAu3/k1sWCHkC/X+lHdOxe6X7xlWZqED5H1+H6diWn32y3O72yfF8oPX8E5oJ4xJ4t4Uc+G2ux4/nBzFp3e1K3ZWJk7ZrSNG6xfyDkQBkBj2NN8pnWsWS3gMGtL0smfzo7qWqeM01zat8uyy7KTPj3d1dw/geHYsN769snWO2oKuDyGjMWJ8jOcQi6vYgyQAmRsOj1TLn7zcENYIvG6w90jswqneXNV4b7TnW3qqa9vWtIzZTjdM1aWrVyXl2ZwukVsFg1Dr3OiIvMTilu9/mc/bwYvcXd5ioTL/PGtKxAAFoeh9/nONg02944XZSayGbSGHs3ItOnejQvrBHMYjNLshJa+yRyllEXH9/eN/+DDRhRFNhWlliRLOq2WLcXKPAGzsXXs23dUF6jk++r7R2bML9y+asOinLqWwfx0OU5DMQR9effpTZV5ORQZvstMlyCi0fAQNwmp/047nc8ebPHbw4n04I9uWZosE+SlyX+5+5QiRbIkVZEiFxamyv5cd6k6I/Fgr+bRDUtkPDaOoWL25VT9ROQxEiLCgXAQR3GgWCA/ONJyyeXbVpt1U64IQQm9x/XMG4dMZsfzD25AUAgSYXfAP2F2FCVJMRRFKPKtJJt8+0TrksykAoVoX68mXcyTcllai0PMZmIoCgB6r+v+P3ymJ+g0p3NTceb5tuEMpfBc8zANRbAw8cDmChaOsWl0o9VWnCjl0GkQqWqUl1/un7hNMg2D2kuaGYmAM+zwfG9FCQGgthpr0lSvf3TuL8/eed+mJW0tQ3UGS5FCuCorhVRHTpOJz/bOEwhTsDg9Fr08YhKgEUvp/TMd60szUySCv7cOLk1VpIl4ZPYqkYBpc3gf2lrjJwJml8/hC2RFYjKT5cI9pzp+1z1KSgQgADIWZ8xpSRUI+mdMUi6bTAocXZUnJSxixh0i30QNoahOGUZxESAAXAatIlWxp32oNEnKpOHkuVZ/YNjherlPM9Mxdv+GRWsXZ5O581fNVySIGUSqScCh0X5zuOPvvSOIgJ0j4l+amLWHgiw6cql78sPTHUaLc9uyoi21eekJEnKYWBHRA/IS8fcsn824rbbwdP9EUYLohX1Nm4tSqaIEMTOfJMpkvvxRo1XKY5t9njW56YdaB3MVkkt6877uyT3DOkme5JnKjKVKJXnj4ygm5TDapswMHCN91KRJYPS6U3j8eJNAxGaOmex8Fp2OYXqPq1AkH7AaZZFniN7hUSpEh+r79p/tnp40d5jM960so1YynrtTkSXh/7Vp4HalvL1Ls+fgJRoL/c7Wpc/etTJdLpzraooWGPXEmGLrWocm+yelham/u3NldoKYTcOTOFxHwF2jkA8brAlcNilS1jIyRafjKeJ5r9poUUw6/sGJ9l23LctSiNqmTFTdYiWPO2y2SFgsHEVLVIoPLnaXpMg5FJGymBJSpYJcuTAqayBlMlgYptab2Sw8TSikY+ie+p5VBWk4gt0wCf5v4YY98JVAjRTSOz2/PtleqhB7/YHHX/+ExWY9uHExlaIFro8jLoj4ZytBAA3FGga1XROztYtVdkfY6PLeQskgdGloSmu0fWdTJQ1f4Ia8To5FRdQnAAAEAA3FR83WPpP1gMmxb+9FenHaBauzZ3hm2ui+MKw7Nqr541E1K+S3ujz3zXeSfDl4vd7WS5eo9gCOYStXrsIwTC7i7vr9Xn04+PRNNYkinoDFyEsQX6u8hbFgnyAA3znQkIajT2+qhMh6PAB81jFcd7Lzsa01X8I5QCJKcchX/qzdrXO6CTpNzmb0Whz7xnTvdGmae6cvneuiKxNOjBl7BkcfWLPo+p0DRMzCKgVIZA58cKJ9zeJs0h1sdHtfu9DL4TCLUDwzTZQiFBZkJE7Z3H862PSzY90SFty5tiiqRhwtgQwcwilegnjTN7qiyaThk057Y+/YqqLU6aBXLOYvVknPt48Zzc6sDMU75zpuWVq4LlelkvDRSMwJcq3pSv6qtpqoOUb/50Qbkii8NSexfkiza/3iJAHPFwxpTPZ8hXjn6lI6Hf/gRLvL4/v70Ut3rSmL9/hHgWJQrEo40DygkAgueH0Br+cblTk16YoxlyWMEEtV8k/2t22tKZzC8bFZw6psld7qrMlJqclPZdDx3XXtaxflnO8ZGZ0y37/pcqQQQRn6aFTMlZpJfjNgNb5wpGNmxos4Zn5991q5gB0iwmwGPo37Gi8OLcpVMumYgMUSsuhv111anaeqnzSUp8iZOIZjKIagGpMtQcAhCAJFEE/Qx8QZNBT3UrwE3TrzrMv7REVOjogx5AydmrYe6J0yamYL71vhC4SDEPAGYXjWkikRClnM+NqyGLTStIS/nWorUyXkyoSfdI/lyoVSDmtgxuzxBXgsxrGOoQ8OtjHtnne+s50jZ/YO6dw+/78PtwaDxK8euYlJpyEIGB1uly+YIGDSsHmGSnj+HI7pIpPTs6ehZ0dN0cHRmW+VZdIwTMRmmrzulq5xDpPx8C016QnitGTpO2e776vIy5ILIWKul6Qqdl/sLopEDSEAs16XjMWJlo8CNA5pR2ct99aWdOrMkzbXlrxUADB63V63/9CF/mfvXcth0jAEGzVakoU8ajxJTZGq7nhbndl2V1kmWaCUxRlzWng4o0urz5QJEQAWg1akUrx1tLkoVR6N5Imxf2B+e2UsTq/FIGdxcBTzhvy0yAOZTcc5NNpTn13ISxRfMtsPT+nPzJidLk9eMGi1eR7cVIFhaPL82I/4ycYm9bYudq8sTEcAXP7g3vYxnI7clpd6cVLfHQzuGZ64uLfF6w/cu7q8oDipOCmBFpFtJiucIhee6Rih0/F4RWoSHAYtWcD53al2ntu7t1W9dfE8dRFqfaIhKxwGTWd34SiaLhBO+Ry1man/Ptt1cspWuzYFV8/+aHlZedK8RA44iuEoUj8+Wxkxv6VMNmkVxJsEOIqK2ayOSSOXiXvCQS5OszpCZycmGoYNf6sfPDs0w2PRH9q0RG9x3L1xscHhTleIkiUCaj2vYhLsr++zamZ7ba6txRn/882NljCRouQncnkAQAbnfFA/LziHei6VhZ9pG753w6JlmYktOnNUpEzKZI85LAomW2OykSJlxSrFkbahrEQRe37UEDsio3br8iLSCxqvWyxhsXr0BjGLyWMyyIqtKkjDIuppZGVe/+T89oiKYoxoGodBm3W4hXTmjM9RlCg/069h0vAUiQBDFtBfu4H/WtzYT/yVcGpY68UxJg3rMNju3nO6uV///oWBX59pmxw2P7p2XqDwVZwDxILfUn6NpwjuoI+F060u79GO4SdvqgaAi5qZ5fPT6fRNGr6xdlH8ogVci10tCE/Qx4xLkDpjcy9VymqRYKpM8KOK3OCs9YGC1Ndvr1qaLPBOGbRNXbuPXNr0xfPHLwi///L2tRgMGW3J60qSaMwlWUlmlzdZdMXgqC+E6Iv54qiud2L27uUlAOAOzm2TGjNYAUDEYy+PrKx/IUSHgMp1msd1TCZ92O78defwuNOTx2EFDdbNyUIIBqtk7OELbU6vPz5H09UihQCu8iRGAJr6JgLBUHQf7c+Ot9JYNIY/fLh35ud7Ox/efe6HB1rOai0uHlcIzu9uqSEPI+LpIM7wBGM3tEVBOgei/25fVMDkIWemjSKDcW1B+r4RvSQ/WSTh/VM9zmPSASBNKoDI7nxypz5yrdsEAAjKIV06s4LPfjIr2YBjPjabw6e7AoHuKYNSyE2XCQGgplBVXah691Cz2e6+ujQYC2cwGeiOmoLD3aMAcG9VbuPkTIdhpmHUtCo5aVRrErCYG8uz2W5fvkjSo9N/bUXp4fZBk8NdU5iGo+hbey++u795c1VetMBo713/bThgNbZPm6fs7m3liRtKc2qyUugYjYlbxISxAAAgAElEQVTR9A5PJlu0rib7u6/tnzW5AABChGPWsftcx9JkWTQtkoLPDoRCBoeHiOSYir9u/cTs5hzlihS5jEH7Vnbaz0pymIO6X39j40erKqoTpRcNrj+rNVaXL6pMB/MHhQAQspkrC9L+fLxFxmPdVZb5UefowKwlic9560jLhmfefv7No8qlBadfeThBwAWAnVsWt/VNIQj63TuXi/ls0tswZXMmCbicSF5UIlIyeuXRJwDeOdlanpbIYjKqUxWL0xMNTvcl3TTTj7X0a5+6YwXZ0oqMxOU8zrPHLumsLgBg4gxv0CfhsTeUZL15pAkiVkehSE4qEpDsdsrsePlAQ3WWEgAaJmaXpioIgH6rMZ0r+vNnjRsrc8mt4SaXBwDhMufdakoJ//1n70x1+pr6J4hIgQiAUsTrstiHTDbyMCmXtaE0882jTQRlSkRH5yozhABgYnR7wBU9cXGqXBgK/eh4awINvys9aYuSf2dmyvDg7F3Li5tGpsgNwaQigfEKuUEhkgKO3BXaO22+uVT1o9riz9qGMmk04/k+brNmSVnGM3esKstQRhUJYrBrR+3xZrXRHrsBFyLNqclMSnJ4z9icJamKZ3efoP4Ug+i21IJEqc7u8gSC+UKplfA+tqWqUsJIN0FFYcqbH57VW50xJ5YrZSiCdOpM1C/nVL1YjOoUOTXdkM3jn3L4fne697nP2ne+d+bVk13TZm+ahPezm8rfvGvpA8sLlhepnrtvrcnivK+25HjXSLwiQTQVz7FmNQAca1a/9K9TSx97o3905pEtVT/eXKFHEV84vDZXZbMHorlNa3JSCAIah7SxCZsoxW6oyNld17ahIqcqL6U6LQHm74oGACmXFY6IlAlYjOW5qa8cbFhwm7KYz4lG+MUnM2XgWDKf16s3QGQONFL2lwOAhM/+2obFR5vU0W9idmmXJMn0DreCwR1xWB5Zt+RI5xCpv3a9z7gb+C/ADXvgy2Pc7hgNuetmTD+7pP5t+yAPx165s/rhNdknP6rPzE9aVZpJirnCV4gUupIxQJb2t1NtKwpUdsRnd4RZNJya0qd7Qg8ARamX4xOiuH4WcnXM2t0ulw8NwYWGoRVlKbMzlu7ByY+Ptjz06z1Gi/XxTdW//vYWjoRTnZ96rZKuC4PzVWNIuN1uAGjoH6PrLU/etWLG5oIIj/wP4nfnuycGNFuLMwBg2m2TMBhhgqgbmDh+ouP+DbFxJtfvHCARHYsJq8MeCvY4bOl8zveKMtYlSWkEMWZx/H3PWYPJfrKxz83Hv7NlXo6mqKdiQVzPQB9tGripOp98c7dMmwwhwmty00Lh3+2o/uW2il/cseil2yq/u770F9sq15VmZqaLCkSyeGOA/Pv6ZzuG4RxpIttjGQduu8cvFAusKOp1+zRNQ2vLs27KT48eWZQknbI6yESNVzIJyKvHCJDVa2ZWpScUKUSjbYNfy1c1zjhH7VZXIEgVHNhYmavRmb9754qFSp0H0iTYtbpMSYQYaMji8nVpbSab2xfydXRpn75r5ZTVUZIkq1Il1XdPJCl5a4oyXjvUAADrK3L2n++xOjxRkyPKcZG40bn6eB2bMCfnKJtHx29Znj/j9lp8/lGTzeD0rshJvbOy2O3xr3vqz4ca+o83D37njuVpEgEDR28tUO2OmATFyXKt1e4PhryU+Rm14rp0ZoKAYoWY7EYcRfpGdZlSwbqyTAAoFvF3qhJWsFjr40RUkPmGTWVWcpggGga1AiZ9aZL0V2c6q7795mdnu000pHL7on/euVLMZQFAJl9sd3t/fP/aW2oLmJG1eZLTKCIDhEQKD1P+jl5ojgQTxOnesb0tA6Vpie0609Z8VSKPLWQzLo3Ovvh+3U2VeWI+GwHwBkPNI9PP379OPmvb+LcjpElAtr0qJ5kAon5QG002GjUJAOD2vxw9dapnQ2lWp86MAlKSKCZrUt83hiJIdVEaAeAJhiatjly5GEUu79AgK5kk4d25qvidz5ssjjkGWSiSn5uZ8bAZ9WNTnsCcUmHVfPoVneRXmg9kuqFID1yeSAjASzvXCjBkxmmz+ByV8gS1ZlbCYqxfnJ2XLO2eMgAlY8yVOCgA7NpUXdc5cl49+UHDQAoTpwWCiNa0t3Xom2vLD/3yG3cvLRq12EIE4Q+HCYAQQdBQmivoCxFEiCCCBCHkschLRIePBLU5f3l6xzIMOzZh2N/cf7pPc/WZT5A6awmSgVmz3ecHgHSp4Ce3Lu8cmz55sQ9h0Z7986GYUxCApSpF/fhszBODNAkKFEJfKHR2bOaFo+23/OX4zX86/kn3uEHEEOXyd63MfXvn8seXFivlDDmPFT2xpihNwmNLuezlualvHW2KfxBFO7b8gVcbe8fLc5T1f3rih/euqSlIrUhLWJGR+HH3mIzL4jLojDAeNQme3Fx1vHPE6nDTrpCQJ4bH7yzLbJgvUqZxWjNlwnGLncwlVZ6eKOGy28di048CwJO319a1DJopyUNj0rAquBwAmHW6AGDXpqrjXSNzuYbCc0XVFKpQBBp6x6OnLKhbLKVzHIj/2xsq3zzcaHF6GOjlEm7gvxw37IEvj2G9JVPA/nFZ9m1KKW51/Xht+aoc5e5jl4KB0Iu3r44edk16dHWicyU0qrX7mvqrspIhzjlgc3lPdIzcVp1/pZK/KOI5LgIwbXMuUiW8svtMaUbS3hO9O5//J8/oePrOFW++cPuPdqyuzlVNOlzPbl9+pTK/KELBBYR+vR4PAbB3dCYrQVSTk2x2+/5TzgGI9P+Z4al9nWNrM1L3ne/xBYIjdquUwdWYzBM6E58Sdv/lQB1indVZo0q8PycDQ32DduOg3fhKU5u5bVgsYO9++f5Xf3BrVXlyTs7lPa8DNuM1thFf6/YmU9FVF6rIedI2abgzJ7FGJfnBpsU1mYoSpaRAJPOgvtJk8cmeoSc2VdIo0WLRalP/ZuMMqz9WdTvGOQAA3TPmfKkg7Aqp2N6R9qlRtR5xIZ585YO3Lm1rG6NufWbQMDJ55dVNghh06UwAUJIoOds7lshlbS3OWqqQdOldyvnidMea1XetKVuz+HolDqRs5o60pDP1gwo67fTwtJiOfXSksyInJUHEc/oDAib9/MD42uKMbL5ElsjxBIKnukY9/mBBesKfvreDLCFMLGwJLAgi8hmwGk2OEC8Q3iTkISLxPp39T4OaN/tH27WzCQIOi4ZjKPqn7+8AgFf2nFm3JHvzkpxXvrHpbO9YKBwuSxT/u20oSBA0DM1WSNqn9QA4Sd3IDx2jOwPe85qZapUcEAgTRIggJk22P+6v31CVRx4TJkBvda7ISObG5SgDAGR+lqRdm6qOtQ/XtY889JsPmw615K8qSa7MtcuFQoWQzZo7fcJhWZ6ZNqI3b19VcrxZDaQihM2ZH0n6xKS4mxAgwpFxJzOERvsQQZDff97UbQwe6BhFEaQ4QQQAXiSg1zkcLh9pgxEAfTpjvlKalyx9/9k7FEbHt/dfJEtj4QxfyL9rc/XxzmGLw41G7pdCkbzboj+rHqf53TaF/PXj7R+2DVWlygiAfqsxmc072TJEOnwIgF6dMZHPZeAYHcX9ETHy6NgtK0xzewOr3zlEGiEAMO0OL0/gZibw97aqPb4AAaAz2jgE+tw/jutMdoRi+YQXmicBgggRRLZQ2mcxhAkCR3GSi/tD4RBBKPjs5zaXtk9YxDgnRBDHm9XrK3JDBCHlshGAGbsrRBCVhSoAaOzRRC9EBRFJh/p23SW3x/+bf55s7NY8enPVMxuXjPsCKILkJIgRAKPDjSFIkVCmthkxBOHgjEA4gCIIjiAIQFWhCgDqezQhgggTRJggYq6SLOV/9LN7BRbnior8d852xK+4R0HHaGS2fgaOybisEYMljSscsBplPPav7llnIIJd4zP7z/ecofBaEqWJkjBBtE/FejDyhNJRh2VnWebu9lELB0sqSdqyseCxmtxnC9JvEUgLEkUIgmAoEq9b/MSO2gtdYwF/yGx3Nw9Pxj+IaorS0pMk371zxfPf3LCxMpf6U0mimCBAbbDlyMWzjsuNFUeyfFIT/8eAyuMFTPrdC4mU5SrEvTMm0iR4cPWis30LpB8V89m7ti97g6InEJ+GtVAum7Q7vMGghMvaVJb96oEGndXJQC9X7PEdtceb1VfRLU7kc4b0FgCQcNnFaUnPvHOEIACIBcQWbuC/EDfsgS+JWbsbCYOSw6ajKEpAZbK0SC76tK33cF3vosrM1WVze7YC4eB/0DMAFOvi93vOinB0b0/P9KybhqJU58ArH5+z+wMS7uXljSiuVOwXhd7hNtlcrWrttMF2aXD6zvWLS25a8rdf3b60RAUAGIqSHucvLUAWk3y9x6JPorMBIEhRISCAcHnc59Ua7cDEt9YuoUpAfHUQkXvjF3XtpXRk121Le8Zmljz82uf7u/u0+o+bh9xm18+/td47P0jmOp0D8aMwa3fjCJoh4uMoWiSSF4nkJpN/aMotZNAb//zkzupSJV9wa3F+Ll/SY9GTHwTC4dj37GVc0xgAgOMtgxsq5mTjEICGsZnSBFFZqjxFfNmmKhDJjgwMBYGQJnCyBeJrzh8hneu+cuAQiQuj09kiZr5M+urOm5akMB6pyXywKq2AjrU73ctK0v/02UXqwVc3Ccj6xDkHZpemKQCgaXiqOjsZAeDjmCAQypqfZauhZ3zl/L2VVwG5nFySIpfR6Q6bW2NxvVvf39I1VlWQSi5sy3jsxkHtusIMUtbgyZuqXz/S+Mbei6Q8MMxt7I7tvSjzC1P+JSiUl0SDZnZVkrRnUPtcRcFzJVnfyc9YJhN5OfREHocA8IYCqXLxq09sYzJoQYIIEISAy3p8U9U7Jy6FAiGz09OjM6EIgiDBII32D/WYNxjCECT6UettCBDFCtGQzVQgkmEIcv8bex0uX02hCkcQFEGm7PYQARIuK7oGTG0FGZMWrbaEx35yS/X7xy5ZeYJfPnGrwx/Q6mxiBmOjUKa3zXFiQBD1lBHH0OWlGSGCON4yeLJPI2IzmZSdTmSHEwAozC28U/uEvFbD6KzaSaQyiA6zvUAqIAD6rcZcoaSvb6K4WDWqtwDArMONRISolRL+T7++rm1wsn54mgAIASAAMh77iU1VbxxtMjrc0fIRgPMD43fVFuemyF7efXLQ6ihWiNVWYwZP0DIwAQRUF6oAwOBwowii4LHJ+tBR3BcOEJRCAOB3376Z9Ev84+ilM50j9bNWSYA2MWncf6HnG7/5KHvnSzf/8G//OnppuG/6R+8cMTs8QDmdAAhGLLcgQQQJAgXAEQRHkCKRTG29zMVxFFFbjWqrsViquClP9XZ938cX+zAcX1acRo5ysVI2ZXUGgiEUQR7fvqyuZdBgc5FknSwZKJDw2C9/bV3YZn9gS+VPv7G+piB1WWYSjqGkpV2YJJu0Ov3BEABQo4YQgBBBYAiCIsgTO2pPtw07nF4cQQgAfzhMtiJ6iSQx78CL9zNQtCBF8fNPz8KVEY0aShbyenWmSftcdFCKRHD2xQcQOrpxddE7h5rjpcG+Vp7dpDWYPLFMNE8oNQdcP11XxvIGvpWR9Hxp9sqMhEwBd1NemsHhjSoSxJgEJJ8+eKF3Ra7qo4u9VpcX4vD8NzeM6czmhcKx7inLbJ40BMPhRB5HZ3BHSyYT/791rNnoWOAsABDz2esrct6giJTFrOsDAJ9BT+JzenVGABBymA+vXfz+2S6DMzaMShynJ0Bd4AcAJo4n83kXNFMuX8DlD+3t1j38u0/Izr+KSBm1PslCXp/O1DNiue3t409/WD/mtF9UaxgYjbuQ2MIN/LfhmpzhBhaG1uIgs0l4g6HTo1NLkmUjLstb/zrn4GAv3rUmeth1biBekOVcBWf6tQ12f2Fu6tFT6nfPdydSDu8Ym5lxe5+5eU4DlVryNYtdEAtyXK3FUZqqONM+8vRdKx+7tUYXCr25Y3kGTxrCCBVXAADHOoc3ln75nQPx9QyFFvAP0Ni8VxsHshTCZbkpX3HnwIKdc2pwcmDW8vN71m9elP3sPas/ePX+0gLlb/59+nTbyPYVxcliEclarhI6fxVQr6izOVPmV/4fbSMz53t/8cBGcmfeic7RlblpNAwjrQUAkDDYvpD/SuYHMZ+0xWNOgSsSx9I+bSxOEPZNmqjGAAAQAK0j0yvKVNFtxNRqL9hp0cChBdE+bRzU25o7hp++dVlNdsqTN1fU948ebun/xupylYjLZTNsXn+s/ugVTIIFrx51DhAA+1r615dkAsCU2VGdkUQ9rKF3HEUuC5BdD1g4wxvy71hVMmN1bkqTMg0OWVWOF4DMotM+qqPhWGV2MgAUieV2xPfohiUuGgE4ChTzjJj/Qa78IaG2Gi2OkNvrd3v9Qhq+LDtZSKeJGXROGNYlyqPrrwabq3VAe//GJRc6RmkIgiGIhMd+YnP1J/U9pXLhvq5Rg8vJwhk0LNBr9x7pGaO2q2HCWJkqITPehMLh052jJVLJm0/dBpF+nrG5VCIe1YSgehhCxNz6fbQ5Yi7rka1VCkbwm8sLf7CqVON2TZ/v3ZidTANEa3EM2YwZHNHBC72LVUo77n9ga9XHF7pn3B553PoFE2f4KBsJ4t9VL312lsmgcWWCuk8v1GYkkldv6NOkJ4if2LjE4vVrLY4xozWZYgeuyE1Zyec+fqBeZ3UREUeEhMfeWDq3kQAAEICAI2zxe/KUMiaDZhBxvlWerfd4zT6/0eX915mexcXpCECn2aY2WpMFXIg0PAyAI3iAEh0RIogEMe9HO1eNHm179JVPN3//3Y9f+qTqodeef/OYemAKSRKzC7J+cM/qg795sP4vT2ysyPnDoYYo+w+EwmSmYBKkGQCUaV8gko3abd6QP0QQaquxQCQjb9IlybIRi/1Ar3bLissiiQwcSxHx+nQmBEDMZ2+syHnr04vkaJIlBwnCFw6HI6w9QcR9cvtSHYVT7izPqh+ftXn9TBxTCrkk+4SIScDA6N5wIDoNJHz249uXvXOw0er0kJcg7YQgZdoo+Own1pR/1jP+3qm2030aiEPMo2bQ5vSRrJcAkk8niXiHf3wfYEhBZsL3/niQ+g6FiNDyhx1jMd8DQJ5Q6gy7t+elNI3qIHIhOoblysXDBqs7YhLEQMxn37uuvLFrrDY7+c2jTQtuJHhiR+2bey/GmwTkUvrH3WMhAkIE0ClRQxIua0NJ5lvHmmhXCK0hH1PRp2LMuv7cvgg2MxTZSCDisKQ87lPvHbtOvTOqw4FLp7dpDHf97eS33jtl7hsGHr11WMfALjsG40XKyPqcHp4GgPPDuhO9s09/1jLZM/zc3eU/2bHyRI/G5HB/CeJxA//vccMe+DIgl6JTRfwSsfzU+ITV52NzkTG1obFTszw3dU1JBnnYNSOFFsRVWDtZIAHw3uk2Po9z8/Jcs1jw4KqCvrGZqkf+8OqHZ4+1qF/Zc0YpF3Lism1epdgvilm722RzXVJrGTi2ZnE2W8CR8NllSqmIyQwTBI/G+IrOgRiQUfIB3wLP6PPqMe3A+P+Gc4DsqxePdmZi4VtK0gFg0GECgB1VxTm5ydMjM7UFc1SShTNIpmj3u67uHKC+lqjDYXR4AqGQfH7lL00a/P7gtmWFANA8NImhSEx/cvArqq2ROUav9CsJqnMAALp1xkVKiYjLEHDo3lDAF/J7Q35vyN+umcIIBGMDROpPfUNf6RpRkyA+WOhAz1iVUpAmlZSkJQJAsUSxuSrH5vF6AoHvLC/psTjWVOXuOdsVs9rHoGEcFr1pQufwxYoEU50DBMAFzUyNSgEAR9rVWxfnAoDe4aZhqJRCN0129/Fm9eM7YrPEXhMsnEHQESeXqZ02//Tra7P5nJ5ZiycYlPPYF9QTlZnKaMXyhdK6jsHbqvIPtw+Sa//hhQwAElfpyVAYDvVqyhWiS6NTuzZWkl/OOlw0QCQcFo4gwXCQhdH+erBxY2Xu3WvLnG7fJfVkmAAEQMpl/Wz78jO9o+VK4RsXervN+iSWwB8mCCBmI91Lsop8mWTAqnfaia1vHX17f8Ndq0qSZQKyVjq7AwChbiMGgKhhQCZHIggiGA67AkF/KEwSvtoC1Zqi9N8fbfnloUsVaQpzgqiufyJNIhgymi1u3/meMb8vuCQvJU8gc9AC6enyo8fao3lmor1BUP5F5vceADQOah3+AIqisiRRWV7Kxxd7BqxGvzv897Pdt21YJOaxXRhyrGfM4vHJ50vh/uqhzfIZ66a/HtZbXUjEJKjKTiYiGr2hMHFmQLOjvMCKOeQy9tfvWv7R6c5nWvveG9B982jjwKTxA4/jh619f1FrzA4XWTgBEAwTBEGECAJHcFfQRxJrspfWlGWuXpydUpBKX1qoqi7ZdNuqXzy46bUfbntqc/Guldl3rSlLkQlTZMK71pQBijQMagmAcJggiw0TBEEQ0eSn8fCHQmMOewZ/nojB77bUiEQsYv7rnazqrMMFADVFaQgyT7yWtAoQBEEj9l5FdjKgCLmxgYjQ6w/ahwFAxmMjkS0fBAB5WSZKI7WTSQi5rJVlmW98cgEoY0d6nNCIVbk4LSHFF1xUkPHMv+qmLA5KZefdFJNu/wHtTK/NuSZJWqZUTM46AWDEbkEAlCLem9+6+UTf2J669tNtwzFdRAotx0cNAUCeUMrnoUa3t1Nnil6IgWOJfO7AjIVk0vFRQ9WFKjqOSbnsZTkpbyy0kSBmOZ8Kcin9QP94cZJMP98bUJOTggDSOKSlowtHDZEbwaNPxZh1/TyhdMxpUQp4B3tGWjX67W/X/f54F+oMtA5PXbMoslZvNfQ1aPStWuNznzXtbp7QqzUv7ajR73/hwdXldd2jxHzJ4Xjl451lmYfU2rJf7f1741C2gMkzGB+5uzZLKShNU2woznjzWDNEZKfhBv6LccMe+DLQWhzR1dxJi2tNeqLbE3jjs4tBKeuFiHPgixoDSOSJfw0eB+AJ+nomplAEPaee3VKQskyVcsfNpRf/+ER2inTv2e4QA//+1hrq8cgVQlG/NCYtjvJUxdn2kQ2VuQBQPz67VKUAgB6LPoMvgq/sHFgQLm+sf5ZAkOfPDWQpRF/dObAgzo9Mt2gnt2yr7TBYo1+Om+xJCuG6JZeZNAkmRr9OX1D8EE/ZHGTCuCgujEwn8tm3r57TGdjXMnDTotgr+kKBK+UYhWsNd4xzYNBgNbm8brc/SypiojQGRmNidCZGZ2D0D+t7SzITViSkX90YWJCpxIN0DtiM9qq85OiXJ1pHqwqSdQZrXoL4qTXl7Xrruuq8n//zhCEaXgLQY9bbCO8Ji7FuYJz8ZsEGtk/NhgkiT8HzhfwNg5OrCtMBYMrqTBDMo7NvfnphQ0WO5EtZj3VDU7eXq7ZU54zNWm8qUJ0a1CqFPBadduDSADnnyRu5dXBSzuIsKkm2e30N6gl0vgFwnRiwGvd3actkorO9mrurCoWRiJ0pq1Mp4EQ3WrSqJ12eABnB8v17Vh9u6LfYXeSISHjsncsKDnUMFCXyTvXPTjvcYhqeliSdtDq8gRAA1I/PLkqSTrhs+1omT/SO78hLZLMY5E5ZsiE6m0slipWSDRFEMEwEw0QgHCYrQUdRNo5hKALE3HNsY1nWp409LSbL1uzkHJX878dagwThpgcvjejfP9t18+pSmz9g8/sNHkjJEPI4jIs9GqrPAQAI0idzBV/Tyd6xbZX5BiHOT5PLFme+e7z1h22Dj7z22bSCu0c3+1xb//uaqQmfrzx53oZ7AkAp5r3/gzsVRsfj++ci08iNBKtLst48eulkx8jBPvWQyciXMLgoO0GG/zQ/7faafOuJHqXFnWpw//sHd364quJ2VWIlhi9RJZBr+SGCwNHL/hMMQdE5WwkIgCBB/PmZHSIUSeMzH16R+8mjG+5aXVqbkeYEd7pcMG62RY2HjWVZdZ0jAMDAUBydW1YnqTPpCPKE50Xd5AolBq87ky9iYnQvhYvLeawHlhYc6tVQeScBUJAknbQ4A8EQxPFCEuQsRSPXfXxTVV3XyKzdTYYmkvS683LUkMM7FzUk7bcaQvN1DwGgqiA1FCYu9mjw+XqISOSJwcDQt3Zt885YOWLBI+9+DnFwBUMHtbN9VmehkHeTUpLO46QKeVwmHQJIKBxyBHxhgpDw2O/t2s5I4T/x+r4poy3GcFqWpmiY0C/IROkotjxPdJFCrAFAzmWHCMIcCQeKNwme2bnqTPuw3x80210N85PwkIhZzqeiJFHMxPEpmytXLrHa/ANWYyA8Fxv7+MbK413DV4oaignUiY8actmJ1091vn5q8Pa/nhy51P+Hr6145Jaac/3a+IYvuMA/ZLTd8f6pp/c181BgWy0/emC9m+V3B4K3VuYDQOOgNsYkiDcqthelTSLefR+fGh6aXPaN1XQcE9E5Br+7IksZIsINg9ov+vS7gf/3uGEPfGFQl6L7jWZXICgQ0n/5x2M1xWn3ryiNOge+BK5uDJAGhjvou9CrTZPLvMFgu868Ij2Jy6DTUAzH0OqiNEMw9ND6xQvmGP1yiA8WmrW7TXZX6+AkE8dqitI6pk0AUJIkidb8f8M5QAC8d3qImN89CEFkh7wv37fxf8k58EZ9L8ti254k1bi9Fp+fjmJAQLNm9tzZnrsiTD2K69w5QCJmoDUme4wx8/j++u5jbV/fuBgAGge1fBZjMSXcZdBmKhLJ0StMljBBXPOu3n2ifUnuZUbeqTMtVso8gZBSxAPK27pBPeHxB3OTpUwcp9b5eqxWNs6w+JwxzoGTw1OVCu7wqJEXyV3bMKgNBENFKmWIFu7UzgiZ9EeXF7fMmlZX57zwz7q2GV2PWd9j1heJ5Rk8sZ9gBMPh6No2AmD2eTg4Te+x+0J+X8hfP25Ynp7IwOgtw9MoitbkpOgdboIgqCvEzf0TKIpcPcfoldClM2EolivnpicKK3OU/zzVwcfQp/ZeeNYGEVoAACAASURBVPds59bKfPIYsus+v9i/siSzKkn5jc3ln7epTVd4zQNAGAiYz2CimLC4PP6QJxh2eAkEw0iKZnR6CAAZjw0AvlCAjuL7zvfctqKIpEECLvPx25a++elFcyThI1uAJ3P5EoxVoZT95UIPhqFLFGIxh9U8PvN538TBvolZh6d9zHxLcfpylWRsUv/Qloqo6aKzO0IEyHlsKlMPhMMogmAoQmXAZIUx8nsEwRHEHwp3aGYwre620ozta0ubHK6vn2o5oLW12L1al/eVicnf9438uK2vx2LLVYh/cv/6I00DVrsbiwSWeEJhIrLjmYzHCxJEOFKHpuEpo8urFPG+mZP8QnnO79YuZmNYybS7ODXhw1tWPFee91RBxtdUSelcVs+0kbR8ojQRAUiU8H/6jfWt6sm6/gmDw6Ozu0+op/94pnfKHbzlB+++9PH5bcX5Ki6/W2e7qzgjgc9JzxB53d76C/0PripLEfNDYSKJTi9JlKYIeGgkGCY6agQAE6P5QgGEIjutlPBf+vr6mQt9b7cOAEF4Q/4QEVqqSE+Qs6asTn8whCIIAbA0JwVBoGlQG8Oto/1MRwBDkGDECAFA0niiEbsF4lCmlKotjuc/ORutFQJADfWJ4YUhgogKFyKR7hJzWRtKsv54tAmLOA3uLs9qGNfbfX4mjhUmSvt0Rl9kI0G/zUiaJdRq7Lq9ti7O6qBeQinhHXjxfo3FWdcxfKJnLGoKIgAjDvepGVOhkLc1RZHF4wCAN+j3hQIlSrnN5ePjzCmXg6yzSi589ZGtOjS44XtvTxls0Z4HgNJECYog/bN2KjMesBoHrEYlh1sqSVyZLftH+yDVJChJkukdHtcVooaEXNa6xdmHL/bVZqXUdY0YF9oMvaCtRWJnWWbzpCFMEAk8rmbGcV435gsFfKEAj017bMOSPx5vtrl9zuACmxNixqskURwEuKA1NE4Ynt7X9Oa5XgwjfNpJidX85DdXry5IrS1U4TjWpVnAFopf4H94Sa5URDcNaurqe4puq2z3+foDwQPDo3A519C8ZsZvJMAJYlui9I1n79j947sfSVfOcJiNeoeCxRtxWNYVZx7vIq3cGy6C/2pckzncQCyozoF9PRohD9MMGd0e/9mBiUc3zTn0v6hzAACIqw5G1BhgYfT6gYllhekIAoNGO/mGyxVKesx6q9uLILC6OD3m3KuX/EURdQ6QKRSaJvQ1KgVCyX35n3UOBMJBT9DXNDDm8njiWdPv71mTKhH8bzgHWicNNl9gbXFGllRQIOQendJzMVbb4Cw3FM5SSqsKvnAS1StxaK3FoRLPW39tGNMBwJK8lNridAA42jG8sjCNeoA/HPIEfXzGvDVvEtcTKdTQo9HozEeb1WS27IYxnS8YFLAYGZT0O+Tb+kCbelV5WoFIRt2dHN+QKzWNhdOpGwk6dSa7xxsMBMenTWkRwbgDreoNpVkcGvbMptqLIxOzDpfe77ijKrPfYs/LTfzDP8/nC6VFYjkAaN2+GpmwKkMZXdsGAL3HJWQwzT4/A6P3zdqd3qDfH27W6H9xoDWJx3V6/a2jOgV/XkftP99zU3U+fCn8s2OEy8BlDEHPpPlI3xRwGAeOtWtmPb89112RoSQijrjG3nE6Da8qSCUAaDTssQ2Vrx1uuJJJgMCcODFB+QDAiN18tG9aQqedG5y+pyrn2MU+8tU7ZXUkCy97k5r6JrhsxqLc5CiJlwg4GypzvvfG/uPNAz2WmQJRwmPrKi/0adxuHxGE25NkCICcy5ow2X51pmN61nVKPbWlIC0/QcRhMAIBf1UkEI4gCK3VmSziRuNesEiwB3mhBccdidT/9WNNVWXZBXkpz55o2ZYgefdra0Y6x7N8gGpNO5cXPZ6R8mJ5/r3pySkhKBIrXLTAo9tqfv/JeZPNRZA2LaVoDKWZvS5yBpJ1qOsaqcxKHjA77ixU5Qq5Ahb9odsq/C7fQ+vLRCyGlMmQMhlSBN2Yn5avEHdPGQLhufV1VyBI8toSlSIjFN74efO61w49uvtcz6RlY5G86WSbh4W1jcysLcgYNNiYGL4yNXXcaUUAHt1WXaBSVBakEgAIAjq7SynkUk2UaG3JacDEaP5QAKWM7OqyzMqCVAC4qJmioTQaSmNiOIogcj67a8oQnQNPbKqq6xoxL8Qy/eEwjZRiRBA8EnUDgOQIJB2m2Xgu/vutS31MeuuEnjpSpCVJ+g2ovDBmNKP1qcpJRhCoH9SSQ89j0CpTZbvbhgGAgWNKIa9vOjYTNLUaQh5r4/zVaBIhgiCTEREACj77/XvX+sWiJ98/orM6vcGwIxDcr53ttTpWJ0gyIsY8A6MhCMLAaGwani4RDs9edtsiANuKs15+aIsW/E++vo+gyEsDwD1lWQ0TeqcvRJJRMsIwnSegYzQJk4WhSEWy7F/tQ9HSGDiWKIiNGiI9JOQNfv3pR+N+AQGTXp0i/5+T7Yf7J+uHZ6cs3iGDwx+ESbNnxOguTE165l8nORjjSulHgcLj7yvPfLdz9KGPLk6zUY6M0909vuzmkpe/d3OIFhy12ADgwdXlZ/rH43MNQZzFgvoCyRZXUM7f+/y9v12c93Rp9j3paRgR1jmdc9sbjjYR8wk9tY0mu/vI+d7vb1xsArB5/YsTxM+VZK9MlLVN6gGgOis5RMwF492IGvpvxn+QKP7/AtSl6PYpoy8YKpSKPj3btaYyN10hIhfFv4QxcD0gi20cnLR6/QlCzuJFqtU1+WeMtn2amSGb0+QNnBmaqkhPiDnrSlztehAfEB91DjBwrKYorVtnDoTDZZTURv9x5wANxUcctsOdQxvWFsU3JDM9bcbuChLh/7hz4NenOjpa+p7cWAkAGXxOMBwec7h0Lk9d8+DGitjQnet3DpBvDmpD9HZ3TLDQy+e6Z873PrWjFhbqz6+uOXC2Y/S7d664Z115Y+/4LT95//jwZK6IP6A1xNhUTUNap9eflyoDSpnXbwyQOweoe4vPj+nSuazWgYlL/dq0RDEANAxqjXa3PRRak5+WKROpMoV/r29PZHCLJfLHl5d9rNadaFSf6xojT59weorEApWAkyzk9VAoCI/GyBVKB6zG91sG00W8E+qpXR9ePN7a/eruMw/85qMZl0dJYc+NveM8DnMRxTdy/WjWmXrc3r+dH3rgX+fU0451Bcq7KnMUCuHmLMmwyfraR+cgQqGON6vXLJ6LHSL3Fq8pyvjDoYb4Mqm9h1A+QYIYNTn79fYPWzR7z7asLEjddWvN2wcbZ23OQDBERvP7QgGH03+sZfChrdUxQ1BdlGayuTZ9752f/+F4fc+YjMd+YPWi/c39y5Ilv61rMzi9rkDw/S6NkE3ftb7olqpEW9BvcrvfrmtdvjjLFwq4gn530K+xWhECFNzLgUkkU4/GfsTHh5BAAJqGJl3+oA3HX9y+Mh9BxTQsPZGTT8C+tpEH1y3aXJDGIZApi4PpDy5OVnBoeJFIbsZ865Zk/+GT88FwmABgoGjUCKGhKD3iHgkRRP2g1uz2Mum4lMvKV4gxBBmwGkU4U8BlVuSqyHqanJ5AOJwk4CYKuQgCRucc72HhGAEwaHO+1jUi3lBSYzP6mMHvrC5+dkN5MpO3KE+Jselr8lXvnm37vEe7PC2BhWPuQCCRwb3UP3n3mrKoiwYBSOBxovE8ZMV8obAvTBAEQXLHKHkix9Qb8r/21C1SnfXxzxpnbS4AwBCkUCT3on6H1z9jc5GTQchlbSzNeutoU3zHxgCJUF46iuIoGopIAUQPUPDYu5aX1qknDBHrghwyMtTHR4kaMthceNxQkg+rMMDjm6rqOkfMDjcCgCHIXFD+tMkXCst5bAKIWYcrRBBFcQplRIQ9wxXiZ6KHrc5XbZeLJBLRA28f1Ls8Z2ZMhQLulmQ5l5JyCijpR+U8NhPHqbn8pVxWIo+z/9l7fGysUa0FikkjYNIrU2RvNw+MOWzd5llyu1H01ssTSoU8zO4LkL5uEnIuO0yJGlJyeJMuW4gIR/to147a852jfn/QdKWooSu3uixJYrD7XzzWeahX9+7p0Z8ca1zx6sEd75z49p6Lv/q81RbAGkd08WeRoPJ4AYP+aEk6gwFLECwwrHvrsZufXVquCQSHgDFucviCIRGHtbog7W+nOxaMGiIX+Bt6NA09mqMN/c/ds2Z7eZbR4xfSaUI6rVQiujknS2u1ewLBqEJZjOVDtvGDE+1vfnph17aavETJiozEaBRTvojPp9FYBH3UaXlk3ZKjncM3FMr+y4G98MIL1zrmBubgDYRGjNaiJCmOoQDwz/bBQqUAc4SaejWDJtszt9amSAQAEAiHFgwlvwpXuzqNIxkVaWP89VRbXqpC4/Jty0vemZNaJhGwaXiH0bZ3wjTsNny7tkzCjk3T8aXvPoKAQDhIbYt6xpynEO850b6lOj9FLtzXq1mWpkjgsaMk9a+n2jaWZpH98BWBAOi9riKRXExnvfT+qV03VfV1dQQCASAIch8jhmFeAW/YGcyTiwTM66Lj1wTZVw2amb+3DhWKuD/ctgwA+qwGBZN9RD0p9UPg/2PvvaPbuK788Tsz6B0gCgEC7L0XsUiiqE7Jtlzl3h3HKY6z2cR2NnXTuxMntmPHNYnt2I4ty7JlW71SYpPE3sBOgg2N6B0z7/vHEBAIUBLt7P425/z0OTg84GDmzcx7b97c8rn3+oIPXVsTd1T4EiMeB/rlFKuCG51epz+Yo5JGt7RMzL/RMVos4n/37s0A8Obp7ppsbXbEmg4AJr9HyGSsqH7QVvwrDve3X/j4549co1NKNlVkScT8V1r7m5oGBALO5sI0Zszb95mDbRvK0zakp8PyNmO/0/OWXMmu4CUDCFAYkVwG2xsODJkc3TOWJA5+9PQQRaKb6oslQu7zh8+tz0+VCbjlOpWfDGYKZNIk3muHO0tSVTIeZ2eu9n2r/cTBC9uq82Z8AVuIXKuSAoCAzZxzeEiE5gMu+tWOAQwtOP90tjccQDeWpNboJB5v8Ilb6nEBe2hwpiZPx+cu0ZNe/aR9S2U2nbLps+LNrtG1KZKwSnRnvq4qU+ryBSq1qtI05YXh2aDD7RNxi5KlWpmotW9ydNZy344qLNI/Si7fwwi19BtEXLZOLk4cICzmL4kQAhh1WJ863h/ykDcVaQrUSVuKM7hspkoh+mdT76aCdAGHhQAoRP3+7VM7a/NytRerUiAAmnnSUJY5PGPZtib3ZOdY28C0gMtiUOiH/zxOsAUdRquIy+4zLj5QkWMLBppc4QumxRfPD80Mzk6ny6dcTmeIlDBZMw53mUbJJgiI0WNRxAFFb8ETdAP6/z8caC3P1uYqJV+sKyxPVz1zoAXDMLlIEAhTdTmavGQZhVDvjHne5S3XKhgEjgAsfm+pJvl0z7iYx1HLxXhMawDAwIkAGWTiDAzDXj52oSRNPer0bslJkfM5OI7ZAr53D3XtrMnTKiR0n+tNNq1EyGExCAxTCLhTVkeQQhIuu9PqODBjnvf58mScJ0vycrXKUCBclqrQSgS/eOPY2vJMoYC1oyzn9OD0AgVfWVuEYRAgw6cGxqZnbA9fV4sAgmFyzOooUMmYBB7tc7pbMAwYMcGyFACB4b5wEAEVoMIsgiXhcdOUkrffOnnK7b2pJIPLZACAnMMPMIILNq9CwGMSOAJIlYtPDkyymYzYhZRECFtOTILIiFAAKi5/yG5RcfkUojAMDyPExHEEoBbx3uoZf/9U18aCdD6bSV8nA8cJHB8z29ViAY/NZDGJd452bqrIjt5OtPEwQiwc57OZxanKPx9sL0lV8thMBJCnkBzQG/IVYhaDkPG5Y2aHjM9hEriCwzf6XDI2308GCZyIThiPP/j0u6cbyjJFfA5a6pmlWYRFPvUlGa/ta2nx4zNsuCNTkyMR0JHNKGaaAQCJKAZOAECSgDtqtnM4hJyzZAzSyUQTi46bqwveaxuoSE/mRUrdhSnUsWB8pV2/NkVdo0kOkKEwojgxOXPkHJ5MRJwYXShQSKJJb+V87tSiU8hlsgiCTTBMPrfF75NzePSl8NhMNpN45eM2nUz86qmubWXZIm78mlySpX77aGdJljqRwduQlXzGsJAk52tzkwU2hwIPXGjqX6tN+sFt9ZvyUo70jJanqQkCGPgydQgi5337aOemiiwAmLe5/tbUi0yOx66rLdQp5VyOmIldr9MQGGawOdVigUYqbB42sBmEVhb/Uqab+uUbx/onjT98sDFXk6QQ8pqnjGsi6wkTx40+98yiWycRlaaq3mnuK05ViTjsABmKXlhJlvrvB8/f0lCSq1MAgErIPT9jYRGESsgFADmfO7Ho0AiFdsqn4gvebe7bVJhOYEQwpoWr+PfBVf/AZ0DfnEUrEXKYBAB0zlp8oXCKhP/c3rMFWZpcTdLndg5cXhmAmCIGLcMGkqLqcrV9psWtWSkSNlPCZuaK+bUyUR2AeiGck3RRsoRVtHwZ+MNBDoPFZbAD4SXTworOAdpWRON/3DlA6xjHO0auqysQ81fwAOw32JE/nLo8r/wqEWvqiOuo35/unR0Y++LmiugWDkAyYJ2Dhs2rzlgfCxR5c8dhxuaKs8rHOgcAYP95/Y7yi+SryzsHYBXDfahdf8P6oui/c4j85taqhjU5Xb2TP/37kX1NfXMWx5zF8Y+mHn8onK+7KGhCQi9F/01cRPxkUMTk0UHJfjKIY9iFOVOakD02a7mhvljE50wu2KLOgap0tY8M8hhsLpNZlqS6qaHgDx+ftbq8aongLztqzg9Mr/3qM38cmk7jXgxFKNbIp23O2DN+0DepIPi31aSV6aSd47Nf2r6mIk9blal54vaNL+xrpplR+5r6ICaK+jOhZ34RQ1SNTvbzilwLgd4cN5pcfoWQXZ+f+s+2Xj7BvK0067cHzx/pHj3Urn909zr6qOigF8uUD11b+XGH3rI8vjO2P8mYjDT987Zxi3NbnmphcXFHeUaQDAXJEI/DyEhXvPBRy4Ld6QoHzg/OEjheF6H3wHKDvU4p+d59W/snF3atK2ysyW3qGn9x71nnhKV5ZC6ZIH51tEMj5G3KUstZjLu1yu+W5MjGrD+6a/Ofa0u+lJ+TxGK2L1hFfB5dSyEqtK0SLcOGMaPtnNlxXWE6hZBSyM/UyP7wfnPTudFd+altBovdH0wW883BACIRDhgdeqvgcAdNpodvrDnVO7bodvvCAX84QJcgoE9N5/ZtHjZ4wxSPw5QLeTQ1XG+3zk3ZmQRRm59GIkRS1ILTQyGkFPJoRgqLQeQnJ7VNzH/5TFeX1Z4tIu7NSr1Wq2Xh2Kb8tLsqc5871vXXIx1Gh+fMxPz3b970wNayUaP1gZJ0AoMRh1XJFpxqGVtfm0lfSd+8RS3isyI9EyvRxlLwo36DIBXCMQaHYJEUwgC2lGft3lx2jU753KmeaI8VSZUiCbN9cj46gl/bWXu4e9R66dkSC/rsBVJFv83MIVhBKoRjGM1lCpLUj7dV2nncH7x7PPaQSK4hL1oqH4Y190/G3U4skoS8xrKsZyNeCwmXtS5N9U7XGIFhXCajUJ3UP2/xh8IBMuwJk85ggE2wAmSQvp2WvslD7fpPWga/+vv3ASDSQ/F3lCITfvrLh9IExPEjfazIWhn1vdCKARbjdWEziHSZeM7oiboI2AyiTKcyub2bC9K//fqhj1oGwiT1Vs/w1947+4uD/bPmwN8uDCcuwksnwrFbSzLe7ByJBhLQrCH9gs1PhobsllSBOO6CQwg+PN33k5cPtp3Vf++9s4sJFQkSSfZRKPichwpTF/2BYy8f9hjd19YWGN77/j++e3tDvrYuW31tWfZTHy8rwxILegU7fmGkpW/y06b+9x7c4VKJ2QIO/WumSDrttmvFAjKSfvSRLZVn9Qar52J6htim0tWy2zeX0ckVEiuUlSmScQIzuT0yAXd7SeZzB9uoBNbQvY1VdFVBGrFFlNkMIlUiGlqwwhJraCmw+FL1mK/i/xZX9YHVwmB398xZZgNBAOgw23/X1FOZKp0eW1y0e4/0T+xeXwRXUgZWlAivKLJ7wwExa4kAfahrdENRepfFXJeqit0nicvuGjTcv3FZkOsVW14lWAymLxygEDo3vaCWid5tHigvSus1259tHWTjDL3R3mczEUHmvq7xV453rs35n1EGMABWxH7Q1D2xtiiNw1rBAF8qUVSlxVOkPh+i3dU9Z6UQCgTDN665WGNywea6riC9o39qR01+3IGfiSwU5xyA5WHQFwzmMaszGKZwggCAjy7or6+OZ7pf6nT09cfVcUtE5/BsRW4K/b3PaDszMX/E7fMn81958rbt1XkftQ7VP/Z8w9df2Hd+qDJPQ6czx2Lkniii/15xmnEI1tSi1xcKq3Scg+eGtm7M27Wh+GD36G/2N2+rypUKuKrl6SCZTGJbSdYfP2kBAAyhzTV5moLUkfeby5UXdV0OkyhNURitPl9oqSpF27R5U0OOiC+YdDsO9YxvLEizeQNVmeosteyx3fWt/VMVX/jDnpM9jTV5n++haJqc35ChBoAkDrshSVKM8IYsLZfB/rRLf11l7q8f2NbSN3lkcOqpd05urc1WiS/qeNGnPkeSVFmou++5D2asyzQZACARClIUEbH+Dtktr7WPKVgcYCKrP7g2J41NMFkEc8Hlq9YlP3rD2hc+aDl5buydo53bE6hrsVhbnC7icTyM8PrijB8+1Nj52uPv/OS+opD/6Rc/6Zy37szTWkKeawrSSbd/aHyhWCvfVpYlZbMkLGaVXGy32EuTJLDSkkVvpC5BFgKAd9sHN5RklSmlZWoZhQAACtPkUxbHwebBW+uLNmSq/35Ob3b7FFxOsphvdHkphDCAZK5QLOK6CLKuMP35Pc0cBpvLYHMYbForoP8GqNCZ0YWa3NQhm5teA3EMANCHZ/oba3JCiCIRYBg27/SoxfzYi2MxiLUZmhogtqiSNqpTGDhGAQCGIYC6bE14wfbkwXOl5VlOiuknUee0qbwy7/UTHYEwhQG0DU0KOOzcTCUAzDs9AKCIFCBLkJuX9QgtxYpYfJIKAQCbwOkttzWUNJ0b7jDauiMEFbqpAEkanUtCm0zAbSzLfi4if4djaFpxiPXMFEgV/falUAR6fzaBywXcn22vOmdzt0zMxw5ZoUY+a3f5Q2EE0FiT+9KHLbMme+w5ghTFwnGIXF5NjhYhOKM30Cct0yShSK4hFoPQSoR98xYMsDCiDF4n3U7P2OzP/37k8Lnhu7aWH336y0lifkvfJH3BK64byWJe0+O7OQLm428cit1OXza1PE4DAJIjihlELlIl5In53PJM9eDQ3H2/fKf4l3tebxlPzlO+sHvduw9sVov4PfNWNsFMPHW+RO4ifXGBBDRryOjyhSiSQiiNL2lfmDs+PPdG+8iTe9uebRlpvHXz7VvLf/fYDXfV5Pz+4+aEVlcOJGjpm/z1m8efe/uULEj+5ivXvfKfu6U8/qTnYjjEmiyNmMvuHDdeSmh+bHf964cu/PKNY3V52ppsze+uq2uduUihpNOPqkX8WYcbAKR87rbizH809a7Y2o+/sOO8fiZaMCFWmgcAAscypGKD0wVLSVFXYg0VpVEIWvqn6H/FHNbamNxHSiGPzWCwKMa42/ZoYw0dmvz5FuGr+N/GVb7QanFcP90aDM94A2dNtkOzFoPVNTRtam/Wb6zKCVPUV65Zw8QZl2IKxWJFoeoyiLbZMmwYW1jcUZFzZty4JVurjpEjf/1hswDg9o2lccdesfHLIEyRUY8eE2f4yeDPusaOjS/M6mcsWcmtFseRcZNlzn5aP3dqcu7FY/oDPRPNvfq/PnrT5ZtdPRb8HiWH39o/NWW03b290mw29/b0xPGFeKl52wrSrtTSClix5+ktr7frU3lslYhH6wN9NlM6X3pufH561qKWCTck5I9aPVkIlp9Uv7CoEvNFHBYA9Ntc+ybmP5y3Tp7q42nVR8bNfzk9MDBl+cKmEm2kQBjtHLjU6aLKxuUH/dsvfPyrL19Lf3/mbI9XIqzDsEq10hbyYhjz9JzTzRdQYmHzqPnn96yTc5cJVdHvcb0Xd8bEmgPPtw7KeVyfNxTwURtyM/Za7SeOdV0wLAzppF8rz+UxsVgtWsXluxmh1v4Zly/0jxO9m2vzu4ze8aGJ6nxdRgxvatJtV/L44xZHikTQPGmU8tm35+pGPL5/jJtNc7MpcimPzcpVSgGAx2ZuqsgScFljc9b/uHUDfHb0zC/qLY5SnThfIscAZFy2we5em64GgH3nhhqKUjcU6Ix2p1k/49dIthXqkiW8MEVGP/MOT/OE8a9NA8+fHOqetg9MTN+9YelRxWICK6OkiJYpY/+8M7lQ817POFcrV3DxNIFgyOYIhsgitZzHYXHZrN++dcLrCz5x1+a49QSPkbQwgLKclA+P9y4xFjCsMFWpTZG9PzBal5c24/LWZyfrhKIkIffj8yPX1eYrI1lZF1weIZupFgmivI7YoY/yhWJZHNF/W4cN+ztHzATxcE2BSsilEAzarCLEePej85VrMlUSfn2O9qDeMGxc3JSj04gERqdXzudgOIYA5n1uhFCJJvlU1xiXxdQqJRgAE2cwcQaBEyyC0T21+JdTvXkpSQwW4/qCVAxgwGaZn7Qbra57G9dgAEwcW/T4LR5/ulzMxJdZu8RcVphCMi5HxGHFzdj1pRnvXhjpGJmRy2WHT3d3+0NfXpPdMb7A4eMVyZo3Dl24fl1RVWrKsMM6s+hOk4mEbBasFLgfqyORCGEAtODLIhjecIBFMOijUpWStsHp+gz1uVlLmVbBYhAEhim5fD8RXFhcxho6NTDJZjK0SWKIjGzcSWmrOQKgIuWWzX6vkiv0kUEGRtBH4RimlQguzC9+2tK3qTBdyGEBAAJg4DiO42Mmm1osmDM79jX1H27X3729MrZxiKmcTWBYaarqnbO9JakqFpOBAbgDW+ZuXAAAIABJREFUoTMTCxZfIFUinPB4ew0mPocZwMgsvuTE6PgHx/rOD07fsL7o7u2VOqUkQ5O0oSzzraOdJZlqXsIQQESxEXNYFWrZr5uHalLkGZEMB2Sk7DHNIGLiRJSyohDyJk1ONxZQRFhDDAI/MzZryJTP8hgLPfofXL/2G9X5ahFPK+Er+JzmKVO1VsGIaSEKOYfnQr6BBaeAxaTpLgCAAb6vZ8zo9LePW/Z2TrZOG4UsdrKI21ig/XJD4ZpURY5GNjRh3FKRNbxgZRCELik+Oa9OKTnVNWZ3e/PTVIfa9f843DE2Z60u0P3qkWvEHNZsMLQ+I5nPYU4tOrViYXR8i3WqfeeHSlOTMRytyBoS8dh7Tvb87tHrIYGlAwAWv1cjEC44PUwc57OZyRLB+fE5FpPQSOIvj8dmslmMt44sEZA4DIJFEAf0hihrSMBizbtcBIYLWCw2gzjSM7axMJ3Al3F+SpczoxJZQ2MWO4dDpEskLAJ/h2YN4VdZQ/92uKoPrApzTrc16F+nUV6jU1bLJRoWs2vW0HVK70O4cd763ds3ZqqSnCGvgBnP3Y8DdiVZKg6xDodXj3VsLMrwkJTZ67+pKCO6j8cf3HOm796t5Sqp8FIS22dFnBEaAzDYvMjh6TnT//itG56oK0zBsFODU7uzk0vTRRfOjHQ093pN1q21eXfVl1ym2dWjz2YqkioxgBc/ar2mrkCrEE9OToyOjoZCIUQ75TGMIIiskso81UUZ8TMhXpCKfP/qvrMus+3BDaU0a9/k9wT91JDRdvbcyM31xbrl1PPVOAfQSuM+5/C0Ts4nSfinjdY3x+YETEKD4a8e7/IZLA9vKjl7tmdWP6VS8X+wuyF6yBUjB6446Ifa9WI+p740AwAGjItnJozeOc+A0Xl+3Dxj9QYpdHN5xq9urtFJuF6va2tFhoLLj1553C3QX1Y8YxiRcat8496zHf0zrSPmvAL1WbevhsE8OjD+07u3bpCK12eoEl1qKi4/OUX42w/OUxyuL0g+ubPsTCjY2Tq0tTJbxFva2eL3ponERqeXAtjXP7UuTZmvEBRLJDoGcdzoHMSDt2SlStkX1ZL9Zwfu2FquVXyeyIEPB6eKkiUiLoOWOWbsbhaBJ4v4APD4G4d+escmLoNdlqZ+s3WI5wufWnSnK5JykiTt4+aT+vlXm/THBmdxHNOKmd1t+q/uKvUGwkoxXycXUwjRYhYWI0+TFPpUb2jMSVkjFJBO748bynscvv2GeU84WKqQidgsDGDO4jAuun/xpWuFPHb8NI6RFzEAPofFZTHeOHJhY1kWgWMAkKNJ+mjOZp8z7yzJPKqf35GfOjxrnTTZtpdn04R4BDBitqeIRRhxkWO9bGHBMCwhk1X01D/e21Sek8phMu6pzCERGrJb8qXyU51jQZK6vaG0c3phU1FGulR4ftbakKlWCLgyPrd/zprE57AIwuj35IsVw06LWiB893h3caZaxF9iQVAAGIZ9841D1jAzSAVur8hKEnCDFHKE/PuO9V5Tm5+mlNL7DBptaTKhkM1CyzsEA5DwOBMWu4zPJQgcRYJtMAAOi1GqSXr53LBcKNxUmHpkYPKp3Rurc5L3NA9YbC6TzXPvtkrAwBcIm/3eQqV8RdE8RCHamk5GhhVFhHgEgBDFxBnR3qvK1e450V2Qqny/b2J9dgoddZDE4bkx/+i8PU0mpo8tSVW9dba3OFUlYLOCFHWxtcjHT1IcgiDo9RDDcAxTcvkDNrOWL/aRQQZORPes1in2jC20dY9cW5kL2JKaN+P1nx+f1YgErx88X5Ovs7v9KqmAXuJo7hMek1QKAHhsJpNBvH2md1txJoZhAibzt592vT8yPYBRJl9wPBgOWp12i2v/2f6e8flr1hTcub08XXmRUMpjM5lM4u2jnZsjsQqxiHZphlzc1a7/TfvQvWtyo9pLtLdplQDH8BAVZuAEk8AJAps2O3WSJWGaz2JavYGtGuV1yqQ39zSfGjfcvb5EyONgAMkROTVZyF1RJbD4vVUa5adDBiZBvNo2/JemwVdbh83OoMnrr0tX3F6Zc2tpFl+I1enUMj4bAGR8dkay7FTXmJjP0crFJ/onNhamJy6JJVnqZ/acueX7fyNw/I4tZffuqMpOkQNAjlLSMWtlEURWknjO4bYGvWrBkvWHw2Lw2cwXj13YVJS2otCcoUkyLroCoTDdFIsgzk4ZqyNCvJzDG3UuZkgkU4tOGY/DwHEWQRzsGq3J0SS2plNKTneNsVgMeugTtQsZlzu2aJdxORkK6amBSTaD0CaJYwV67vKoBvp6oqEIDBxHCM3ZPD4s6HAGf7e/OV8jz1RKSUSFI9EgV/HvgKt8oVVh3OIQcBhrlBKast87NXudMtm36JoYmg7ziLrCNG84IGJ+thQ3V5TeYtE+MkNgWF6K/MKcpT5DHfvTUx+3qnic8piNn6nlFYHFNEALKwMGEzj9/UMzloDzSMfoY795b+Tghbf2t46MLfz8ge0f/PJBaZrsP6+tu0ybnwMt/VMsBkEn91yYXwiHw8t+RqAOrpB4+3MgerdH9QYA+Lh9kGbtjzsXM/jS7imjhAK5iPf5qOcrYv/MQh/m73PYBUx0d5ZsszqJHQpT/dP3N1aMTs3/8MEtmhzFY9dcDFy+TOTA6oe7c3g2ul4PmewPrsl9ZEPeNQXJrz2w6anda7eWqeqzkwGgeXD8/q3FBVIFlqADoM9yOhqnJxa+mKnaXaLJw6iT52edI8aXm8cyVBIen7M5X3spfl2FIvlnD6zHwt771udtKtAd+sI1RpX4ief3x+7DwPEkAbdj2tg1Z6Ur4mEYfNg2eF9u6kMqTYYoJinn4HQgRMZS7VcJ+n4Pj8xoZOxoFWSTy0MrA4d7xm5fW8wmWL5woG1guihJrFFKbszRvdo9fuOfD3ZOW3RSwQ92VT1+Q3FjhUbF5u6oyvrmznXfvG3t/g69yemJEoRiMeK0nh5fKJBLjnbo7yzLThULvpCTeoNWJQ4gnWAplvFA69BtW8pS5PGmvihix2htcXowRO7rGgiSFIVQu8HcmKV58eHr2gYmT00YD/dO7DnVk6+SdUwZ6Syu804XSSG6AO2lQF6aLPTa+elPBqZ2l2QuxULgGEVR3SNzX7m+7o4NJQSGHe0b7zYYH6zO+6B3whUIcZiEViocmLOGKQqLWKMphAanjI8+tYeW1+mkRq2jMy5/KBQKUogiEDAwbMK1uDDlYBLEuuIM+nQmlxfHQM7nwnLqOX1tBIFrJcL+OQsW6R+aqcXCcS6LcUdlzg1lqS/2jpcSjD0t/cawMz9TtbdrJLdQPeZa7LDYjg1Os5kESaEwFX/7KPKHjESAQKR9+jsd/ECPC4mQQsy/c2PJB0c6RmyuUZMNx7BIPQHwh8k5h5s+XCLgbi/N+vPBtmizRIyAjgA4BI4lPJIFUsWgzQwAeMz+SiHvp1srLzi8p0dnMYALFscbo4YX9FMtoeDLxzumjLbHdtd/+Ya6w+eGY28qcYyrc7QAQLPAEQCGgYzFXMdify03tcpPHjs9cOD04LbynD88dL04mcchWJ5wgIxJyVp7iVpdcTPq6UevF+D4Y387kPgTJAQVaEQCREK3yRjdoSZVRZBUZaZ6XUkGafXe/cye6PHr01TNU0b6uU5Mh7/EGtIpnmvp76GCwjx5QW1acXWqUCspSFFI+QwmgSdWKGuszm3qHk+TSyASRBeHJBHv/h1VuTrF/Tuq4l4idKVhq9efIhLaHMHYlsvSkhVCXufEJVlDX99d3zYwTVN9StUyDFtG/QcAEZulFvHpchPl6ck8FrNrcmHFprZX58bFAMTWP+YwGEoBb8hsBYCd5Tn7zw8v2N1xcyMun1JcKIJOKho22vrGbF95v23SR/zx05YAGWKtRNy6iv9DXNUHVoUpq1PMX7I16i02vcN56Ozgozevl2fIvnX9us80p1cvVMU6B/a1D5VkaAaNiwBQoZFH9/H4g063r7EmHyIt/2/A5PTOubzP7T0zY7L/5NkjX/jVO94s1cvfve2Vn9/x07saq/N1Egn/C1srt5TEc2k+H6I1yE52jtYULgUkOJyOxD3Z7GW8lM+H2LH4c+ug7cJoY7rueMdoiCQnFu2zTse823u4XX/9usK4A1fjHKCRONz4oufhnKw7stJ3arXFUuWk2/aj463zRvvsgu1r92+oXZMmU/Py8xR9NlOfzUQfcvnIgSvOqAv6GZfXT1exRQAHh6czZGIRm7GzOEPEYTFwvFCqGLCZW0cMIYqk04xesc1EJJKF2g3GLB7DO2t7YHNp9w9v/eam4mwB+ePbN8sErHTp5az1XDbjTw80Hu7S07HFJx/ZxeOw6PcNnUEcADKSRG90T9xbmj5utbMJFgC8fvwCANSmL9OZj50f2bX2M9ccoHONN08u1KVejKs2ubwIQCnkIYDOifkinRLDMA6DPTprvnt7+bduXNcyNH24b2xLifbhDQWaZLYDeYtlyiTgtPZOPn7bRg6LUaJQVRVofvdh04onHViwV6plTfppJoHX5izlRcX8oXXpGjoQs6V/kkKIVpJX+ch/845N5zum+i1GkqR65q23lWfVZ6fc0VAw1z/2jQ/OvryvZWdNXpZK0jtndvgCcw5PukyEAXAYbEcwPgYRRf6ueN79PRMcFgPHcKAoAsMG7ZYCibx9aJrNZNBlDR7dWXugazRIUUk8drVO8VbnKERCaPpnzAjgTM/Y/gO9+zsGnrh3sy5ZGk2NjwBO9U9uLcv2syE/RbWnZaBldCZIkq8d7ywv0i36A4uB4HmTrWfBmrI8e29UdvSQJACoxHwAMDo9QZKKld0PdAzXZ6g6p41OD6VuLHv/TN/PTo93ODwmp/fYovdFvfGl4akTQX+FKnnYaUEYhGPUDARAJxhdUU2KbqRjIUiEvGGSRGhtcXp6snSXVvlR97jDF6RdBPkShVrF6zYuOoMh2kK/Pi8VANqGZ6LnQhG3BhbZkviQUgB8BjtABlFkGmMAazOS12Vrv/Bp85fO9rTNmxUc7Is5ioe06sGxhU2bipz+YE1RGkKouW+SjAmMTsTXr6k93D3WNjI7bnbUpSseKM08Mzl/24/emJtb/OKONZsaitLUSVikXB2dUYDuZzrEubEm71D7Ra0DEvoNAajF/Nfu3XpiwXF0cBq/xIXwGKwAGaJ7vi5T4/OR3tCS3MxmECoR78K08U/fuEnEYZ0ZNhzvHad/KlXLMDo9wKVVApmICJDkN4syflyW89Laki/npt6Vk7ro9oaplZ82WhSeml98eFPF8f4Jm2+FfP9bqnLu2lbBTUg0RFcafq9nQi7gshjxlvIvbKpoGpxyx9RKi4VMxNtenftsJDjhrrJlQjytt0h5HDISWPzAxvKT/VMW98qBxRAjzSfWP9aJRO2zc05/cNbu29s7/6Wn9tD9Ftt7jdW5sfrkXeVZp6eMxyaNAHCob/rZEyPf+uAcY3ru2TvqJALuhbEF7Go5gn8zXNUHrgyDzZWnkmYLZT2LpjBFnR41lHIEYh775g3FKUnim2oKP0dOoc8qZj11bOjXbxx7+mxPvW5ZJPFb54aONfXXx5TH+hwyXBx84QCHsUyk658xSxFWl6879sev/PV7d6obiv9re2FmfhIAEDgOACcHJj93JPFlQmA/OtMfjd91u12JO7BZn63bL4/mSePBQcNMyHdPY+WJztHHnvmgSz97cnBOGEJJIl5F/jIRc5VYcTgMNld1enK+9GICuAKxHJ9yvvHfd7/0xG0VKrVhyn5beXGBWFEsVRZLlX02E3aJflqlMgAAxy6MRFMKNk/Nbc3WMnBsxu5KiUlwlCdO6pxbaKhIp50DcYgKIijm38uje95KIqoyT93cOXbT+iIA4DGI9Xna0nRFriLp0iIHAECpTOnAAluKM+nYYpmQ+6VdtfvbhsaMF21gzZPGzVnqilSV1e0HgE87R+jabSohL/rqbh+YBoCaz1JCDsXcXYvBVJIiiToH5p0enURI//rh+aEdpVkAgAG8e7JrfUl6ZZZme3kmD8dfaOsdtluLZUq6mNqL+1qurc2Xinh+kiIwLD9V4Q+RZ/XTcecdsluGFlz5MmHH+Fx1lpa+EmOMBmJxeg+1D3919zoUuUi0XDSPGxTa/i0VcXfVFb72blvfrIUCKFRJB+0WJUeQq5Hb9YaSbWWHh6YVQh5CaM7hoSgkF/DCCPnDAQGT5wn5o4IvDSxmGtCfMEK0zP1eSx9Lwr6zOP1I62CIJJk4EQyT+88O7KhdeoqNgaBYyt97uofLZJSqkyiE6JjadJnwg3b9L58/cqBtaGtFzm8e2JWSKf3Bg9sPtestDg8GQCG0p32QzcDrM1JG2fgol/mr907+8Gjf2MLiHr/v6YHxP/SN/nV0yuX1ywTcFYz3GMYjCLokWYpEML3ooqVVeofmYQMLw3aWZHgJjEn6fliY+eR9DfMn+ro+7rq7rohvtt+enHRnSvJWDpdDECVS5aDNxMAwDMNCCAVICgMIkBfDwaPm8KjoTyJEi8IIgMAwHoOgu+vWhuIevaFIKnyjYzhIURRCJII8sVwuZb0+NEVL5CRCj+2sPdwzuuj2RR9AiMjQKz6DYQRFUsWAzcwhWO6QF4+ZIb+4ppoXgkN7TuUImNdotQUSxcGTvQ9sKlML+YseH4Fh22vyDrYN+cLkik8mfVK5kNdYlvXT90/97lBPmpBzoWdizGB+5Ka1375n89bK7Ptqi0wenz8cLpQoBuzmqD5GXyoLx9cXpwPA2b7JuHlFI3pHWwpSG0WCHx8+hy2f4VGQCPEYrDAVJhFiMYgU0bKyJCoBTyLgSsX8l568jWny/fS9k9EKu+vSVC1TRojM4RWL5v7u2ppOg4mP4wCg4XHWqmQZUqF+eYWy2P2/vrv+TM8EAGwryryUqk+XDlhMyDVEm9L1ZkeJWmFf7iKQ8DnbS7L+cvj8pYTmtTH+lkQhng4szlPJZhxuuhzBpsKMl451rthaXIUy+qoODBlMLp/J5TsyNHOi21r0y/ce/utxS/8oCFkXRufZxDL1JlGpKFDL/j4wWfPbff/10XnnlIFps3z14Q3rSlN+d8/2Iwk1j6/i/xxX9YErw+j06iQiHpMBAL5w+MDkzN4TPXdtLh9dsF6/Ju8Si9W/ilgd45PuycxkcX194YLZ+fR7pw62DdHbBw1mANhYviwD5hVFtCsCS2hj0u460Dr40LU1W6pyNpRk5CnEN+blsAhmlMESlxbzM2HFC0YAR9qHbqi/mBnT5VpBH2Cy/lX/QOwL9YWWgRKJ5NqqvHu2lP/4ocZN63JGxiyvfdJ+tH14S0UW7fGnP/CvOQfsXr9csCzU5NA5vcnquiai/HRNLBRrlERMjdYUnuAyzoHVYF9TH52OBgFM2VzFaonF41GKuAEy6I98QijcNmnIS1lWr4dG7L+XekMnOgeaJuYrVLKRCdMNG4rpLQc6R3KTFcNGmzoSvXoZlMqUSWq+LxSmvfC1BamDDOy+X/3T412ygQ2a7GXqJJWITSFkdHgO9Yw1lGZtydNBzEV+3DK4tSrnkudIQFTqwgA65yyuQDBNtnSpFrcvRFI0l+ZQz9iNa5bG68i54etqCwNkEAO4s7ZAUaTmzDt+8mkX/WtL3yQCqClKIzCMhWMUQIlMuaUq46PzQ1GRmv4YbF5PIGyxeT45N7SzLIu+hjmnRyXk09+f3dO0dU12sliIxVwkFjncEyZp0ZP+G6AoAGDhOBPHN5RkuD2BN/QjNZokQDCz6P20d3pXWQ7JwUukwubJBQLDtFLhqNmmlQgJDAuSQT6TQ8Rk01+SaynkjdD2omenEAojNDhnATKcKRflp6v6J4wfd+tDVHhf56DJHxCoOM3G+TdGDe9PzWmSxGwWo3XYAAB1WsWfTvUc7h7/6rMfnu2fyixWP3nXluqCVBaBA4BGJtpWk/vMnqYwhY70jOWnyAec3nurMl9aW/Lclkqb0e5qG/nRXZv/WFP8n4WZ1+uSqwlmdZoaQxcnJ4qMJqIQhRCbwAFAJuQCIFOMWPZp18j20iwOm4kQ7ChK65o1CXmsJ29vyEqWPbS1/IG6otcOtjnsrs3ZF00edMQOE8MIHPOGSQQQFf2JGGIPm8BZOE73IYZhPAbbF1MvbH1xhpjDcvsCVqe3d2GRheNMHGPi+AGDnef1jS86ghTlC1MSAbc2R/fcgba4Jz3xCY3cL8IAaHcfinFiIAAln/u7m9ZYuLzfvdMEAO2D0wSGbV+TW52psbh9ALC+OB3DsB79THTEY88YNeSvzdWFSPKDtqGDLQMPbil76pYNZkCuwFIaUK1UMDRvBQBaJaBdBLHZgb5+a/3Rc8N2p5dEyBUKRxWzuDv649eur0hOaplYSFxwYl0KdFfrZKILhoXJmDTExRq5PRCsydc9sKvm9urCH71zjBZAY6ksKy5l0VxDb0RyDaFIriG7N7SiSkCb6l/d36YU8WV8buvITEKrkCTiNdbkPbNnhaLF69JU7QazhMtOl4mMNm+Yumj9KU9P5rHZl+L5wHKrfGLCUAAQsVkKPvfjvjGnPxhG2KQ9cGHyIrcqisRUSOvSVKcnF774VtPDb57e3zOdI+KILIuPbCmYfPd7D2+uONI7jhK0qTilYmuaqmdkVqUVUnMLVTsrt9672UswACBZLKCzl2JXXQT/TriqD1wBcUkhP9KPj855WBieppZ2TS40FKXTqdMv28YyxC15VwQCeOv0OQaLZabI712/5uZNRad6xuu+8sx3Xvr01OjMxwc7bk1IK/SvINE5YHZ6wyRFYBhtimieNNZnJDNicncc6hq9PiY152dF3IocJcp3DM9WRjJj+v3+YHAFnymLGe9+/dw4t7A4gMHExMSXtq0BAALHZSn8ypKsJ66p6R2bp90UXAab/vjJYIhaHsyQgMTXTBTjZkdc2YH3p0zVBRcN2Ee6x2L1KwyoOEsMDRTpvSvOqNiyAwEyeMGwqBUKF92BNKmErhJAf7omTesy03LFS0W+okg8xRXPCAC9C4sBkpTLWPOzjnydgu6QTzpHKtKTxVwul73aMLKvX1v3aecwnYv9zzeut6ZIfvbCYQBAACfG5takyoIUWaZV7usZm3e4MQxLi1RxwgCa+6eYDLx21c6BuDs9NDKTn8JTcZb0gRm7K00mondoG5lpiAQknOmdWFOgFbH4/nBAyGKe3LH+6zevO9Y9fnxwum1w+lC7/rHd9bFGawrghpJ8kkLN+uloVKvebmmbtJYrZW+eHy9Lkh86N0xfz4zNqZUIYEmvQFEGXRQkQrTlm88g6Iq5dINsHI+NQL33+rq2g31Gr/NXx86PzLk2ZqhOnxtxB0Ovn+rsMznOz5hDJBVGZP+cxRnws/ClRYDLYPvDASJCQ2fiGB3AGmsFp3/906H2Pi43vyT1U4uNt6novVP9z3YZ/vheszdV8fcR86wPVSWJr9OqBGzm929uONw12jowZbc6rQPTX/7Nu8INRalbyuwyefPEHG32LpIqexeNtQVpAPDKp20fnRtqKM50+AIb0pMBQMxh/+grOwvT5A0l6RIWU85hZ/O45SkKnUQAGGAAVGQoMVp2xDEAoHn/LBwvSVHM2l10strWEQOLIGpztANG246clG9tKW8am+8aMR7rGHv0pnUcglWVnez0BfoNJhmfQw9ioUTZt2gkEaKN+iwCFzAIJo5BJB1TdFxwDKMlOwwApyVXnBkkl5YyCqH/uHVDx4ChQiH5pHvc7g9iAGNOj5zNLs2UDy5YcAzjMnAMYGdZ9lunu4/3jkf7PMrniVEDlnSz6DUUShWzXjcti9M5rHoXTY2Z6fdV5bbN+f52suelj9vLc1IIDEsW8TEMFpweFBHpbE4vsVwVjBXBEcBrX7nxhnzFI7tq6gpSK9NUDVmatztH6V/lAh4AmCLFE6IHsnCcVgloyfjPHzQTGMZjEGREg4199EiE1GL+3dV5r7YOmF2+uNdEFFF5dMDmxKSiDsOS3IwA2AwiWcS7MG38zt2bB8bnN+an/eid44tuHwCsS1M1Txkh0maiSJovkYuEeCBMxsrWaTLxvNMNlwD9fpyYs965tvhIz5gtoRwBvQ+OXUzNGUVUjk8WCpgY0WNeJq8/uLHsUjwfSLDKx1H/0/jS5tlZh9f/xPsXNvx+/7ttw3dW55zun1pRBE+MAfCFSZaUzVfxupp7Rkdm1t+3KSuLbw8GbqopgJWCJeKUiiMXRnID4RMXRp79zxtfvq7ut1X5m9O0M2bPkN1SnZ1ClyOAq/i3wVV94Aow2Fw6qRAAXKHAjMf5myO9C00Dj+yqmTI7KIQqslbIjnIZrEZ0i8MZ/aTZFWARRChM3ZCffXNV4T2715z582MVOZrRKTMDxzaUZtB7fo7GV4MPukcPH+1+YOcaAEAAgyZbnkI86rJGnQMtI4ZNhemXa+Izgr6Rj870N1bnA4AvHLA6lhk8omD8a/pAbI91GMz36RTMPN2NVbkAYPZ5AUAhYEsE3Jsjtu0oOARrNTlG6ZdN3KDM2FyZivhSkePNg3QPA8DJ/oktxRnRn/pspkzhsjJzUax+xFv7pzaWL0V3tE2bM2TC7rlFHDClaFkQ/JmhqWQZH1/O2F3xLNQlTGuxODu5UKtTcliM/tGFLE0SBnCqf6IiQ31gcDKJx+Ux2N7wCkTbOMSxhjQSwfsPbU2Wi452DrdMzG7IUAGAkMnlMhkbs7U+DFuboYk9/HC7fpXOAZRwpz3zi4BBebLS6PcEyFCQCg9bHBwmAwGcGpoGDKM5ci39kwihWD6SmMsGgI1iwVf+eeKZfc11JelyMX+pfQyjGc8MHL9vR9nHHXpzRGzCMKx92jRjcy84vLu3lLX2TRptboPVoZOKAMDq9B4+N/wfuy/mS40Tx2mRCwFQkUyXEJER6c+Ho7MuvugXrx6vSk/aVZwGAE637yc3NtRmqq/NUL0SaqaYAAAgAElEQVTXOXJ4aKIgWZ4iFRwdMMTOAM5yqzaNWME3TCEKob2tA8JQ+MnC9MfLs7+UrdxVledqHeYD/pcdNb+oLtidps4SCcL+4LrMlCyVtLEk85dvHvvbgXNP3LExY0PRg1rli/UlXyxIlfC5C04PBhAiKRzDmARenpNytntiYMYsF3C35y4FVAzZLafbxnatKwK0ZEmdsbuWRQ6gpaGMCqNhCjEiDjcOk5EiEfbNWpz+4Fn9TF2uDgMYMjs2ZWsasjSZSuHf2vVmu6e2KI3AMJLC6opT+8bmeCwmAIQR8pFkqUzVazPR2gX9IMQ6UgAAAYQoRGAYvnxS0d+DFAUABIYpxPw7NpacaNfXJsve7hztNdv/2T+1I1mmZQnPTy8c6x4zLNiausZe+ri1QCj62yftDrefwDAfueQIQjHjC8vvlwaF8OCSuGzus5lLZEo2g/hSbX56lvSJva1nOsdqCpbUyyK1nNaRZMtFuujsir01DECbJPrOLfUtw0uct3J1EgB0z1vpNUErFc7YXABQKFEMOiwcghUgg3RrdDt1RWkUhVoHpqMpjBjLg79prM1U+2zOL+89AzELTtw9AoA7FB53+9crZVafP0iS0QdZKeBJhFwWi3nnlvIzneMbc1OfO9S+6PbR8nf3/GK091a0Uu8uST81OUfraQCgEHBxDHNcwkUAANurc890j2vl4mvKc57av0I5AkiI3I0iGlisEQkXl7OGpHxuRbr6rye6LlOOIGqVF3NYdamqX5/qOTI2/+NDnbe9cvTRv7fd+MoxW+cg27jw7evWbClMxTHonFjZ4RAXA3BPUXqf3uDumfrB/dve+t6dX81KCbP43TNmAGgszTrSM4YSXASx5dKaeyb+44a1u8qzxTyOhMWUsJhrlEliNptFMcZctm0lWYd7xi7V+Vfx/z2u6gOXQ6xzwBYIzDu8ALC+NCNPp2gbnVmbt7LR8fJC0moQJQt5w4GXj3SW5+h8zPD2Qg0RscojDKa9/o+PdkaFyP8pxJGFJsx2AJAKOetLMugtJ8fm18eUAPtfqkl89PxwQ1nmJ239NC0nlBChRXcyk3FloTwRKwq4p4ZnWDh2X0nm8YkFALAFfaaFYHWa+mDb0LUJoairJwslwuj0KoXLqDKHz+mvX1uwriiN/rdpcKqx7KJzgIUTGIYlnm6VOUYhYu+hl2k/GeyZsxWppIgi45SBHoNx1uW8piD3iosCiiwcWMxsTyQLnZ6YV8nYfV1zeoMpR6sAgPaxuZ3l2SIOK849cnlEWUOnByeH7JYcqeS/79/y4dnB186PFcovRiRb3H66mEMULX2T2OoKEkflqli83zvBBmLE6PAEwm4/2TS60D5h+vWhzo1/2P/8sb763KXH/3D78PbaXNqBw42Izrsrcm7YUobN2d6aNe2ozsNislvS3ymAUmXymsKUpz46Q19A98zitN3z56PdtRrBnfVFj+2u//OHzSdGZ5R8LgA89/6Z7dW5cjF/RTUgikRRKYqPTfb660oBx98cGH28a/D7rx9W58o3VmX9991bP+0fT+Kx2gzWNBlfKuTrQ6FhWzw9L3amkQh5IpXgEECQoj66MMxmEGkSfplKJmezhExifZ7OZHZ+9fpaIYdFey1sHh+GYWoRn8CwuoI0XMS+Z0fVuqK09x9s7FlYtHoDeVJhTZrKYHN5Q2EGjtGRM+W5ms6RmTUZKYeGZ9Mkwqi8eLhteEtlNh26YHR5AEAp5JEIMZYSfV6cmWGE/GEyNmAAAJQiHmBgdnr2nh+sL0zvmreGKVSokpIIZSVL2sZN9++qpft50esv1MqlfM6ZoekghRgRkzYeSYdPYBiFEK1E06ItbepOnFEAQCHEIlhBMhi9mLqiNDGHFQ6GlRR68M1jbd3jv/r7sZ3feundt5t/9PaJ/3rpkzcOdXh9wW/fvfmBnWv++ElLGCE+g8HAMAaGUctZPXGjjwCKpIpZr3vIbiyUKgokS36/NTrl7SWZX95YIMmQQURHYjLoRE8WoLMAYVhrjBmbRIiF40QkJpjeuDZXhwC1Dhvok65LVzVPGuk1QSXkA4DR5SERil1PUKQkAoXQN27bcKprzB6Ji4CY4O9YEtGXtq/pmzaejERUhxNm+Iw3eHTOvEWdVCyXaoX8ttlZMlKWAQGUqOXOYLAkU81jM5OE3PpcHV1leW0kioDGilKpLeit0SrfiWHk5yll80735QOLW/om12RphFxW2+jsZfaJ2x4NLFYIuEwCd4V8nlAgQIboz8ai1I86RlpWahASrPLlatmgN/CdTy4MYWGVTsSem8/2eX/1jRu/eP+6ABUGgC1FGacGLucioEu5H2rXv3XwvL1rYkbKa6zMBoAKpeyB7EyKQS243PRLnxYA4lSCxurcp989/eJHrY/trq/P1714W0OrwXTRZSEVzdndsFSxGNG5qq7i3wFXfPX//xpzDneUKWQP+j86P8OfmP/BvVuy1En7zg1uLEld0TkQKyTFYjWiWxTecMAbDnAI1vstfQcHTEwWUZeunHb7giRl9YembS4ACATDURLIZ2r8UkgkCx0Zmm4+O3jT+mIMgAJonjRuyEyONeH8K5HEK8IbDvhCgTGjNSNF1j08z2GwAcDmiC/pSoP4XPoAjdgeOzdj1kr4J88NbdcqzSQ5ZHOa3V4mQO/ovFzEq8rTXq6hlYAi0yBuUBJrEgPABf1MUcZSmHjLsIGkUE3OxTMGKRKhlV8/q8Te031JkTMOmexMAq/SKhxef5xQ/sG5wYp0NWN5FafPPa/OThprUhVmp+edE52jM1YAuDA+b3K6y9KTsxVL7o5VughofP3auo87h72+0ITLqZFKdqwt6DvZsz5LDQDdM9YH/n7ijleOYP7wBx16T3DpzXT43HBjde6lnscolmSHBLx6fvj1s6OvnRn72Uc93/mw/eljnVqJ6JbyzG80ZO89e/7Xrx9FUedAwcVHgLamSwXcG8qzn7hvy31VuYcHL8pVUdC9fFNJPkmhEwMTIw7r3p5p8IDTYrxrXTECSBLxvnrjuvkZ66zRdqJjFBDUFKZ5w0Eeg5WoBkDEXXApZeDMlPGRXO33CtKf/eZ1ogW/Ytw0MWFs4zKfnzG+O2NkFWj3NPU4w6GWSdOUxz4aCA9MLWMs0Kwhmh4TRggAuAwCj5h1eQzib6e7UgozH6srJDBs0mXLEScBjtk8/pvqi+kLIhGad3rUQn50OF792s3NYzN2t0/KZa9LU/2za4wAjMtk6CTCvlkzfTsFEsWI1+4WMl7ac2bK689XSkiE+hYt+iHTrnUFBM5g4ixPOLDg8tLKwBKJn0IkQhRC/kgSoahnIKpNkQhJeZznj3eUp6kXnZ6zk8YN6SoCw/QOayaHnzRnf/TdU4suHwAsevyFKuUPb2042jPq8PhIhPwkSSJUJFH02kw+kqRbpldI2m/GwDBvmMSXDwUZ4fkAgIDJofVGBEABbK/Je2Hv2e//5ZPhQx0zY/PnPNS37mh4/lu3XLu58Ldfu+Hl79z+n7c31BWnby3PRhg06w3RLqVldFqGpktcR08XfXILJCqEcE84EP0VA7ipOMOEUGWWpn10DiKKhErIBwwsbi+BYdurc48kmLERAGO5r+DRnbWHu8doLl+ZOgkD6Jq30kNcqE6asbmDYbJAoui3mbkMtp8KYRE1icAwkYDTUJb57J4ziVNWyGRE3zIbc7TFAta9fztisLmoiL5HwxMm908bB2zurRoFoECQDKbJRBDGACEqopKxGIRCwOuYXnjkhrqmrvFgMGx1epqHDWUJVHssohIM2S1DdkuGUCzhsMvUSSSioruxGUSyWBAXWEzFrM+0qX7G7Higoez04KTNs0LIbBzJPopStYxE6B+dY04/OtFtPDU77faTM4u+C1OLL5/odzFFX3nz7Jx95VdhnJrxnaocDAuvwQjGlPm3X7p230/vCyu5o8CZsrkDYXJNpgbDsEu5CB7bXb+vqQ9veOLto523byje9/MHrs3SNEcWBAGLmSLmj1sdAPDYztoVw4LXFqdnaJJu21xGv3fiAp3pisVsijHutm0ryTzUPQYAzKsugn8DXNUHLoepRacuIjNNW90Ti57yHG1ldsrBrpFdVZdjzCeKIKuXq2gJicdg8xjsI92j2ytzQQipeeq/jVjeHZ/7Te/Y0TlXz4xRDNjDu2rpQ1bf+OfAiQsj160tQAA4QM+8tVKTFEsW+lciiePQZzOFqPCE2znudrx7rnddccaHZ/tJkiIp6k/H+1YU6RgJCdo+H06Nzmo5LJWIt60g7do0VdOCdXTesS5D29o/WRGJYfisWHFQ5h3uOKs8AOyPSaN0sn8i1tnSZzNlCcX/inMAAH7/zsnn9p79xetH+wymp0/2rNcq5hZdabL47PUneyfW5GtjG1yx/biN9FRPdA50zplrdUqJgHOwWa9OEhnt7uN94zvLc/vnLLF6yCpVApo19GhjzT+Od3NJxpDd8pee8Yk568sHz/3lxGDT2MK1xSllSk6WWmoxLW7f3zxtczX1TEDkNZn4PNJACBCCFUXoE9PGLZVZ9Zszd1dmPX3ruke3591Unv7l+oKqVPktawooivL4Am8ePv+PIx2NNbnRxlHkQyEkF3DVEsE1JRknY5JFxnUdjuP37ij78MLQ6cHZSYvrrkptnkZ+XVUuvdu03ZmjlL68v+3NIx2P3VpP4CuoATRoee4yOSL1Jvt1uSkaEV/MZd9fX9rdMeHg4c+tKflTbcl/led9LTft8RtqfcbFV7oGcIpFYEABWnB6IEaAjtplaRmUQhft36eHppr1hkyZaI1OCQAhiiIwrFM/c/vmMirSAgDM2F10IAQGQCFIEvJ2lGU/e7CNAijTJAGgvoVFAsMUomXs8xGDtTQzOaM6e+bMYNAXYOE4gcOZnvFN5ZkYAJvAeQz2rMNBh0HTqXuiF4ljwMBxf5ikEPKEyChLh/5kysVTi4HyrJS2KSOBY8XJshCFMICO4dn6ikyVWvrkS58GQuFpm0snFSVLxDU5mmc+aQEABobR7XNxYtZjIxEKUyhEoSUAkAixCRxfKcoiOlWiLCwcYG1RmkzE++49Wz769Rck6ao/3V57/4411YUp99cWTdmddCfTf3eWZx/tGY12aRTEcjE9dqaRCEGCApmvlKSL+SWZmqblSa60EuGMzQ0AdTGJa8iEXEbR0/G47MayrOcOttHb76zIbpky0oHFBINIkQoG5q0YQL5EPmg3c3CmPxI7QTdbU5hKUlSisRximEUA8LXt1aapmXteO0T/RD/OnjB5fN5aJBVen6oSMhksgsUgmGlSscnuG3Uu0ofT+ysEXBGfy2Aytq7J+fTsQH227kjP2KzNVa6WNS/Xe/V2y7jLkSEU0/nE0kXSSbftttLMWEa+SsCjEIqyhlJ4wmm3HSJ9TpvqX/24TS0VVmelvNnUAwlIjNyNolannLa7f3ak+8ig6Qfv9Wz906e7Xz766Dtnnz7UPd/e5+gdfezVA4lH0Yil+hAUZTbaensmbq0r2FiawWUxr8tQ/7g8J1UqpMsRPLKl8tTAyjEJcdUS6gpS76zKjVWcyhTJBIEZ3Z4kAbexNOu5g20owUXwo4cazw8Z4rIVRRtJk4pmIi4CBKhl2IBfVQn+DXBVH7gkDLaLMlOYol67MLTYNnzPlkofGTw9ONlQlLb6yIFVym00/GQo2vKJgan64oxKbdJ9+SlfL0x/sjTr4Vzd9uQki9PfPjC9tfJ/RhCPAl9+mcPziwBwY8NSyeHuOSuJqBL1xXqT/2IkcSIqkjSFEoVx0nl9aUGQSzVUZr528tw/zvcc7JtaUaDDP29pw7gReb1j9ETP6K7yHAAQMhkZYkY/GeIwiSNt+qikHsUqyUIrDnqshknjUPvQ9TFplFapX2GrnlSH2vWP37np+W/d0liT94e9Z14/M/jki5/+s7lfJ1mWpr151LC+NC1XdLHY82qUARoYQJAi6QxF9JaueYs3FBaLiNEBU0NZ5ozZ/sHZ/kW3t0inkPK5SuEyjWj1KgHGxtYXpX77H0f7pxxjVpe6uuRY9/j6LOUDtTlyOauuWHPL5kL9vCOfzz3QN/H64QuN1bnRwxNVAloTuJQEPWNzf7U4/Y4MFTeJ++b0fPeEaWdRBofJAIDD3aOPX7t296bSvSf7xmatpflqNsFEkc7BAdgEi44Z3Zaf6vYFRs2OprGVHf0YQDJfoNOJ3zrZHfIghZh7S20ezSaiEMy6PIUZyecGpq9fVyhPUCOjIBPcArHCEAAMmey+ULhYJRt2WLNEskAw3KmfXVuVek1plozNkrFZWSKOQMSkGNQtmemvtQ+FESgVUoPN5QuFiQi9m8dge0J+IhKgHGv8fu1kd0ph5hfX5EJMaQj9tGldSRoRiW+ec7i1UmH0mmg+T12uDgG06A2+MHlXRXbrlNHmCxAYVpqiWLB7AmESx7DeMVO6TomJBYXZ6nOD0yRCg2NGhGBdUQZ9j6b/x957h8dRnmvjzzuzvTftale992Jb3b0bgw2EACGQ5KSQkBzICSckOcn5QnpyDmmHhOQAIYUSCCGAscHYsjGu6rKK1cuql12ttL3vzPv9MdrRaLUyApJ81/X7+b50+ZJXs++8M+87u0+5n/txe9PUqlWLi4DC2E9RJEIRGvNJgkcQUj7JJwiGzMP8XDbPB2j6Tydbjg1M1abqEUJj7qU0qap3fP5TByuevn3bvIB3aWhaKxEDAALYV5p59pr53DXzgGOh227tsVuNEimJSIQQj0B8YtnNoKNkKm7YmFkgZsJE1LZGiEDR5fvlQ7eOzy3lpiT88KbKnkVniAqJeMI0tYog0KzDzexeCuOa3BQCENOekrvErL9BRik93L8WqHRml5NriwPAQ9tLzk/bXm64dq53jJ1eokKKABj+1cGqvFMtgyGapqJ6qdSaHyFJLC/i0BQAqESC2lTDC1eHAYAAYHSxmNFiwE44ph0BdzOzl7OrKH1nUXrjhPVC1LX2Rahzc4t7jNrM6IcJj+BF6LBYwJcK+QaBbMBh43oUjNZQUYZRKhbqZJLP7tr0zDvtVDji8Pl75peAkfp12PJVugKVjskSsJ91eqm4JkXP1fFM1ShmnMuEOgwQoWlXaOUTjA3V7ypMf/rs1Svx0oPrsYYqknWeYHhXhi6jIkWapVaTrsnm7iIU+Z97tluOPfqHb90t4pPNI/FrcLnE/ZOXev/48T1dPLQ/Wj2VqVBPehxpajkAWN0+tVS8qzD96bPtcYeK6ZYQY82TBEpXK6ddbmA4Yxgah+MVFlfl/Wa1WtGVqPell0vE0RTB3pLM+u5R2NjX2Q38Q3HDH1gXFpfPFC1Q63PYRma9lXkpW4vSW4dnEUBlzqqyxbVYa39sBL5IUCNcMdSeONnU5/B+YnNuuVaRLBMBgEkictucGiD0Sinz/G/QLnxPBCKhGOPo/Mh0/dnOO6P6Ra3TC8WJmn9CJXFb31RBsr7CmFRbkHb28tC//Ow1Y5aBvUruFElyo/7AddbiyrilIkl3pmOYNcQViNgmlp/rGOVa6hvHeivC9TBZNPZM7Ioqxm7Qv3pfK94xNLOvImfPlpzK/JTPH605WJJ++57ypqsjP3juHe63UcPgZFVeEksW2rgzwEBAkEJSwAgLBqhQw8R8qUkNAH0z1uLsRD6PHHW6jlTk987aYpyBjcMTDvmp8L78rGAo/INzXRKd4ov7cm7alfvoi6fOm8c7Bi0701MTRQp+TnLjG82XO0btbv91KgfWSwswMC+6nb7ApkStTsg7mpJ4yKjlqWTJ0YbHHePz+8qyHr5j+/j80lfv3slH5LJ5BwCrDRoRn3fbppwDecmvdowsxtMbAQCDVHZzee7o9KJUCS+1XqsqygxR4RAVHrfbU9QyAmGRkHfrmop2Fmyv3OusTtOktSZ1Wb6WovFvjzVmF5jEi5EXr3QAQISmxx3OUp3hz/ff0dg/maOUdo/P70xOSFHLe6OC7hQnvI3WnOhE2wAA7M1ZyaRdHZr2+EN1nA8Hq9tnUsjCHCFFAKAx3l+adapzmESQIBHVpScyHcpEfF6yWvZO3/ixjpEXu+autA7K+eRDd2zrGp19vaXn+Nlrh2vyfBTFGHzzLp9OKmZafQEAhXGExhTGYpIkEWJkf5gJMzNnmPcCgrjSZ96Tk0hpE8xT1lA4wmz9xoFxVyBUV5xWnWn89u11z7QND1lcjAT7+cH5zOzMZ443Far0haqEIrUeAWQrNH12a8zHi4TPi+miRS07IUBG1Z8wgIgTENUqJHsrcp461pCmkQCGAaubOXJzssG86PSFIxS9zDU6UJZ9umuEudgQTTP2OvvD3QbMX5l7XqhOGHOv6uauEAn+Y0+5Ji/tucvXFt0r3JUik27G7glHqKqiNABo6Z3AeJkmxNKTyGgSRkAQzJROdgxHMA5jXJCoJhHqml1k5l9gWmYNsdqjrrAPOI8J244A4gFHGUqPHN1GLi3+8GRr6+TCkMPDOAOSaH6YGU1ICsJ02KiQOvxBhslDRvMYTIeyq5PzuzZlXeoyJ+uU/3qw6qUr3Uap8On2HsYTYHuMIIAAHRGQfIgygkoSVxnEepmEope1R2d9bo1QPOtzc9e7siTjv/9y4RevXCyUyX77WgNDPItBTOUui1Kp+MrIzMnH3+Q3m1U5iYPPf+3P37zryOZMALipKv/fDte80zO29l0MHrxj23On23/8/Ds1ecl7CtMeqC6ISYDwCMKklE073ABQnZ3sCYTW8y5ipleXZmiYXBnKIJNiwBaPFwAOlmXVd43SawuLi9JovCKmFNNBucSUYHH7AKA6O5kRGkI3UgT/r3HDH4iPGae3c9Y27g86guEFf6Bn1EL3TX35I1sRgtMdI3vLMv5ByQEuTneO7NuU0zZjM2gEeaqVqPys23e+c3T33zs5AAACks/q6wPArMWhlku2l2Ywl/Du6GxVip49+B9USQwAb1y6drAqDwBqC9Oark0ghB7YnMfWB6589aL34Q9wEbMi7w5NFaqkd29dToNEaNrtiVSlJg6Y5zd/CLLQ2kdr0ePXrm47wK30BYDGoanNHHmc9chC8H421fErvczNDFChN4dnPr2teIyEO26qOFyT98zbbff88KWLA9Mt5tkZt/tw/nIk6f06AwxZKGriCISk4OzQbGqCxBMIXxg0b96UFgxH/trQ4w9HnKFw3ErijaQIZHwBAjTuc+6szNQi/+cKjS6E81IMfi/1n6e6LvVOFJoSZgOhogxDIBDs7BorKknzBld9taDo5rm+MwAADZOWzUm6GZ8rT6XjEwSEwjv1K03Bj7cNHCzLPtM69NFdZds2ZYhIPjMYxWHwi3nCEBWiME6QidO0yur0xJ+dbY97TgTQO+fYsaPU3D95OUA/bp56dcIy5vYNLji1YvGA2Xrr9uIQFQ5QYW8kwJWdpZb56PEGXY3W6YVyk3bAYctVakkCHb/U22Nd3F6adb5h+MmzTUNO67WJJaNSIRcJP1KR98bF7t7eqRc7RhIVUgRo3uUNUTTjCfB5QlYrk41PH786RCBUk6Inog4DReMTV/oO1ax4tla3DyFkkEsY+yxE094wxdTg1uSmIAQtwzMYoMSoQYA6ZxcxgEEhnXF6nzjVXGTSjETIb+wt2paXUpJl/MtbHfM2V2VhMmPu29y+CI3VUjHjBrARZa6PxK47FzTGl/snbirLpGnsEwp+9WbTuN1l9fueqb9aXJzcbLV8p2PgCfNkQzj0yIuXjv7vqX/765Wr4ws7k9WUkGwdnkYAgUhQtObZpKJKoGGaFpIkRMtnmZmEosUG7NMkJPmM8I4nHNhSYAKAwTHbZpO2MaoQLxHwhRJ0eWQaEIRpGgNU5yYDQMvwNGOOMyKeUX4U4kXtddZ85xMEs1gUjXyRIIUxw5vCAFuS9QeyTKUZxq+9eJbdukKmsHhukUTooTu2nW0bdnv8VLwSJrycKUJ1uSk8gmgemiIAhARRk2ZonJhn9qeAJE0qWe+cjdHUD1AhAcHj+swQbUew4PRGOCUQmHOXKIwPFGXcv69iR1bif5/r+lnv2B6jVsojUTRtwr5LSApUUoHTF6A4nieJkJ+i9TKJUiaqyEsORqiGnnGdXFKSnvDyxc6LI7ZFxyrxaAyg5IvDHMOUJNDdZatYQ4z2KHNbSEQAwPiS6+zAzLNNQw++3PDtMz3vtA5e6hi9Z++mLxytfvpsG6xBTIqgsWf8Z385f/PXnzlx8dqWHNOvvnLb8e998iPJKVP+VQUD1zfiGarP9IKT+cyvSzNweT5rOxbfVlFwsX8VYYzF8vQ41jzGq8otUhQKNkWAAJqGptZukYPVeVwxpbpUA+ufCHlkulo5Y/WOeZaFhmDDX2o38A/CDX8gPo5NzTdGqNMzticHJv6ru+8/6vuNKhmm6Hc7RxGGunWUhWKAouVlG0RMn+NTXSPbijO2pen5HFbMlN0NAG839O2vWO4ttfHxrw+EEAIQ8YSMRkogFBkZmTtQV+gIhR3B8NtD0/Nu34khswpJrG7/y+e7HnvtUm3O+y60XQ8CYjnIuoo/Q5JTMmVxTcn+TaskI1nP4IP5A1x0zS52ztuvDk3dVV3IvHLVMocpkAr59c0DH5gsFBcxZCF3IPTniz2VJZlM9PFUx8ixlv6NkIU2Dm7bAQA40TNxfNam8ASzUlQFWUmfPlIT1GoffvHif711tTw7hVGver/OABfM1/O54Zl5t+9kz8xjbRNuXcJFCgl4PLlS+qR1QSVa99ZtxCXAgLMVSqFEsojFJxsHKjWq42Zbwv4yZ8/Eiea+Rbd/0uM/YtA89plDeqW0KMOwsKbQDQHQ8ZwBhIBr8Jwamq5KTmCves7hSVHJmbef7ho9WpE/MrfYNjBVWZDCjkRFI+jsIKzW0I6cZC5riIwh8zhsYzbfJq0iK1VpnLR9Jzd9k0Z5cW5xgg4Y5JJro3M7SrhI6N0AACAASURBVDOFJF9E8nloZbezp4sZbS0aJ63VqXpWN+z1Sz0Egm25Kfft3rSw5Pni9145/IVnGq8MnG7qJxBasLkQRRcrlW/1TQBAklo2bXfzSYJiqjMxFq/RHn2u1eyRy+8uTAWAAYctR6lt6huPUNTmvGVfmsZ4xulhxEAZZVI+QUj5JACEKJpA6MFDNe90jy66fQigLt3QOGFBAAhgW5bJT1ERILPT9E+daH9rcEhnkjf1Tdy8o9gXQY5QuNm6dGpgQiUVkQjxCUEgEgQACmMeWpFD5RqL7G2iML40MLk9L1XAI8OJkoryDH2G4Su/PfFy/8K03dtC8v4ysTTjDqIw9e3N6VKt4JsHyl7+7L4dmYZrQ9OP3FZ3umvExgmoF6v1TIqAcQbC0SoFiH7+IwAeQgAg4ZEhivaGV7r/UhhjTHvCARlfJOYJb6rOv9gxkq6WA0Dn7CKFcQTjMoNRLOQtuLwkQjyECIQOlmXXd42wE2D2QGi1fn/MXwGgWKOf8DgYD4Gd56cq85utjkWPr4mjBM8k8Sxur0IuPliZ+5vXrpBR7g1jpkeibg+KPiP/eqjqTPeo3eP3U3S5SYsBXZtfYvYnM5rV4ytUJYx7HHyCH+TIKwGAViHRKCRffeI4a8JjzsgMEILvfnRn59j8q93mjyfqpNHMAKvsxCJRKRlfdJEEweqBUhiLSYLGuNiU0Dg+d9Ou4j9cudZls1SmmLqbzN2N3Y9c7mHPu9pVWykaVouF3KJYEY/XPDZf3z/zVufMt95o+9Eb1x6/3G3zBlI1skcPb3r7wUMvf/+TY3NLt20v3lGS6Q6G2kZnYQ2YwuKm3onv/bG+vnUoO0n3u6/f+ZuHjt6an2pFEKTp7TnJbl84sjqr9rUj2053mbkpHS72bMm5bXvx6ZZBiNeejOlYbFRImRRBVXaS3etvG4vPZjxQlXe6ecWa35pm4GYbDDIpADApggOlywa9YE2KAFY3NADOfBIVUiGP9AXDwQj1clPfOz1jjDauKxw/lXoD/2iQ3/3ud9/rmP8/omVs/Jas1FtSDUVqeY5S+PKz545uK37tfHdj78StdQVFKcb3GmAFGzGkGIRpilW1bxyaOt4+NIeIB7YWiYWkTrTMsmgemQk4fGkG9Y7yLGbkjY9/HQQiIVZZCAHwEPn4qabBMctcpmHI5f3r2NyvOoepOf/oouPJdwefaxp+51x7W+fYn75x9/WH3Tjm/R69WIoAXnm3a3NuUnaSDgBOdg6f7+7bVZ69O1Pf19VFURRFURhjhBBCiCTJ7dt3vNfAAKvNWbzaCX6rfzJXLj7ZPvjT+w4wr4xYnIlySdfAjEou3l6aGTNUhLNGccHYHGsXxWxzDlrsWCQwSkW9dneT1fGr/onXXzjX6qOfaxp+vmn4d396u7I0/a66ZWbIeskB7vjvaab/7d3uTblJ2Um6ABW6YrZGaOyd8044vI1DCyM2Z4iGj1dl78pPOjPQ/9+372XbIceM+Z5niWCKx3FZv3/2ate4o8W80NZs1ktkOSSe8nr+65596Tze5jSDWixabxw+wfNFgte5vbaAxyhR9tmWFpyBAznJTf2T/7mvQh3BA3r+4pWxjHTDCOBb0gz1jQO3by/ZkmWyef0aiZhHriw4TQNBrHtFjF3RMGGRCnjFRs1S0KcTSWYcbgFJJiqWJWJfa+kvzzBWZSd98+mTj35mHxOwD0VoPhknthKiIwKSxyOJVK0iHI5cGJmtTEuUCHgYgDVibAHfC+3mB2qLf3GsoTrTlKyWb89K6hmbrTbozVM288zivQe2EAgFqbCQk4hgos7MCDjqzHOHZX9/s3+yIllnUkhtAZ9KIP7Kr98YpQO/f+C2LVmmBI3iVMvAZz+zbV9hdufQ7Df/902MUFGq/qXzrSMhvCvLmGdQzzm8JIFkQj5j/9EAFF5+BJhTfO75dzP18um+qVvrCpdCAY1A/OczVysKUvJSDARCgPGC1+8OhDJ1KuZ4NnIPAHyC8EUohUjA55EvXeneVZRhUkjaphcEJJEolwxZ7Ase37DPn52XpDKpT71ztU8p7b7Y2zVm6U+UDbo8FyyLY5Hwp/LSeQyDn+Q5Q34ewQNYERRiTkoDQNQxYDyEvzb1lqcbNQrpwpLngZLM6iSdQCGsP9l2/53bPDRWCsiPZ+mMEXRTXkbbjO3KxWskQdQ39N2zp7wqP5XPQ3+5fG1vSTZr1Fr83kSJLIQxAYCYKgK2BQSncRgAAAIxj2Qj9AAgIPkRmhKQPABI0avOXR0ViwXbc5PfGZnN0amkfB4C4BPE2KIzWa1gViFZq7zQNy7k81K0Sipa7MtHiFptHLO+EBGVRrUG/AoBn0+QzEEEQnqZeMTmzNarT3UM37wll307gdCUw21SylIN6gudowI+mWpQo6iyasxOAwCpkC/k8166fG1PcQYGyNUpTw1M5SQoRTySQIgk0IzDo5WJrQH/YsCnFopWvul6xv9cf/X5+natUpKsU5oSlOwdi7kKiYBvUMufvzRg8XgPFKRIBXyus8e+hUeQgUgkTGGlWKgWigeciwaxlLkihJBQInhn1mKV8n5e3zVBEq1nOgUJMqVSXmrUJKtkaPUnA4VpkiARgC3g04kkBrm4eWrBF6b+1DL8xPneQZsnQOEktejWktTP1RZkGqV1aabsBIVUyJcK+TnJOovdEwxHspN0MpHwXO/YtvzYMKJEyBfyyZfOdhysyvv04ar8NL1cIpJLRJlahYAkTw9N16YZFjz+xZDPKFsJJIkFPD6P/EtDz3pkXaGAd7FzdOemLAAQkGTDhKUiOYH9qy3gM8nkFrePRxBSIV8tFV8emKyJF9pL0asudo4KBLwUvQoADHJx27RNQJIG+XKWWy0WDdmWNGJxhl59sX9CxOelaBUUprlfB0I+Wd86tGvTMic2Zj40jf54se+nFwamHaEF28IntpWRBIkA8z5oZeANfBjcyA/EwYTDuSlRX2vQqIT8hYBruM8yPrXQ1jN+36Etk0Hf3i0bjeC+pyF1HbzRNrijLMsoF2kUfJYsZHH5Jhye9oGp6oIU+HDjxyCm7QBCaKh/NiNJc59JdlQlz170+M90Tbf1OMYmIiPjeTh43+HKm/aXrTfa+0WfY4Eh48JqsZ032gZMhZkfK8vSq5cbeNGrIyUfHif7J32hyNEty4WnEZqednpS1Yru0dm1ZKEPkxzom7V1An5pbPabrQPXlpyJfHKz20+QxB6DNMHlHLrY7paR921/H62mN7L6LFkIAIZszjKj9gs78vdkJzz/mT0/OVq9q1S/OTVBKxMeKctljOaNjBmDGGWhnrmlJJX01/dU/e+RikJe5MHqTCBFNTnJt27JS5CJMzSxjdg2jgGHNV+lB4CdqckCKTpcniEiiabBqQW7e+bVTpFK9osL3TP+YCRCv9nQd7gmP0WrSFbJe6IMeADAGAgCMF7OY8QFBui3OnJ0SrPbzvCJ7b5AUrT2GgMcaxs8WJp1umXwpprlXUphzCPj3zY2mq6TiU0qGcMa4h4w4LDN2UObEzWNg5Of3VH+mb2b282zfbMLEh4vS6O80jW2lVMCwUw7hmtxfXTPLQHgokTNgMOWLlPXtw1daB+uLszfVZxBYbxnS/bOzdmCCD8jV/vN+/Y0PPnlfVuyh8zzAps/aPV/6fUrMw5PjkE9Y/cEIxSORk8ZYRzm9xO944lGxY8OVZEEeqt7IE+lozH+28VrFUWp9mDIHgy12OyDNnuiUspNnlBRYhUGEJMEXubAICZEfc+m7IYJS9v4/EsNPbXZyfka6b+VZP56x6Zio34rpsozjSlK2d0S+XfK8j+VmbxTsOJehmlaRJIAQMMKk56ZJw8hCq9a9BPtgzuL0ocWXQUJytJETbZO5QwEh42KervzUKrqW2V5GlKcmaDUSIS/vX2bRSd/+LcnxuaX6orTAWB7XgbGq5qzFqr11+xWiqaZcyEAtvqWUWhlHAAqWuHAxuzDNO0MRxAAhTFD9z9QlXvp6qhJJatNM7zUMcIcnKSSA0LzzuXmuAjgwUM1rNAnuyXYKD7E2yckQkXqBLPbzpRTswH+o0XpjRb7otvXOjwdib5dJ5dgDFa3DwNUF6WdaR1iDiYRCq1m9bA2dG1uCiBgap3VYmFOgvLbZ9oHHR5g2hFgmHV5mPyGkBT4IsGm3onv/rG+vnVoU25S++8f/szN1Qy3hFuHHXMVu/OSv7SruMqku/mJ4zNOL8EpaOEurkosWvL6mfcWcrqGkQgly6Qmkv/1kvw9crnCvJBs1Hx1T6XG4/3Zxe61D5WQ5IeoMHfk6hT98x3DvRA2lhlNJUZeolQr4ufpVXySyFfpzO5VfTMPVOYyPRyqs5M8gVBrPFGB2uJ0jULCVu6yYELpgwvOQoMuEsb+yCpGUy2nhnstuMT9uCmCcY8jMZoi2Jxh9ARC7eNx0hewpnta3eoUgZjH4/HRueFJhy9YlGz40WsXg2sC/Gt7Hkdo3DBuuTwyd/8LF2976swz7/Yb3c4n7q5RSkVxuxncwD8NN/yBOJi1e2nOjfnr5FxFYerPH7o1PUl705acD2wRXh8xZKGn61v7nL6PlGZxj5lzeg4XpDdeGz9Ylb9Ri+B9gvlg9QZCvzvedOpi78M/ev1zP3n52VcvJ1bmfP9LB17/xqfO/vz+O7YVOQLBBw5VvddgGwWOCuzHiO0ca+4DgO1ZhuAa4scHQ4y9e2XcopaIznQOHyxb5iM1z86a5FKaxsc5bsnfBZf9vs/m6T+Srr43W1OsEUjE9N/OXJ23Ovxe36Of2P2XH3yiLi/llsrlM877YrtBMWDu0gaXPoYsdHls/tbiNKWId/vmHIVIwDgAIYp6q3Mww6RG6zgDcV+8DlqnF/bnJOUaFTIheXtNQXVe0rB57O6tJbOOOLXUa7Eea8gXCbIfVgqhgAiT56fnvnCg8lhLf3P3uMPpS8zLCpotl97peO5sx5G6ZeoX0+eB6fnwnjUDLC6MzdWmGZhjbV4/AOikYsasPNM9eltFnnl+qX1wujzHJCSXI5SseRcDEiEBKWBcgr35aQxr6CKnqRAG6LUsFWkVY1b7kS25B8qya8vSP/fUm55QmKLpNxt6D1TlAQCTHAAAio418iBq8sZF2/RCXZqBRChC4Y//4dw9jz5HY/iPvaWsdX7wQOnI6JzfH2bYYoeq8n//H3d7zvzkxc/vm+kz//uJJqVYmKyW9c3aUNTwYk7P/PLsufZ5X0Cjkd2+u+yVd3t7lix/vNiWm5X40NX+/+kz/7LPfHxi7viCNZHTgI/itE+mo1YpnyAOlmXVd49SGKtEgiyt4sUu88tXriGAslTDwoJDyCPv3lekUwhe+O7HfvSFgyNjc7N2u2vRsT3bGKBC/kjQGfRhHKEB/GEfMz5j9a5MGC2fnUTo7DXzLVtyLS7flMNTnKgGgGHX4pHCrLt0mu9vyt+WaBKQhNsfMsikJEJJKtlvbq0jMwyfPFLDWNsIwYHyzNMdw8wVMdo7+UrdsGuR1Vfllt7yoskc7otMJS6fIGQ8kk8KvOEAUwywrSSDQNDQM15i1ADg7rklZmulaxRjiy52obVy8f6yrF+/3QzRm8ngOruRCaUUqAyDDgviPNdFBk2pQfPR7aV/aep1ePwIoSCNMUChSTfr8AQj1KGqvGOXes61D7OnYMaP+XCgMH6I046gMFFzedH9rdb+54YmBx0eLBacG5iiAVJFyje6+77z+9MXu837K3O/8+kDTMxi35YcQKild2K9+TO4pTi1xWyd6jY/eKyB5lCkEOcpSJBJ5lweVi6P20iYj9CurOQpq+ORm2umxy3j07YHbqr8zh077ZNzFwbiM+m5I1Qk67QS4cNFGY9tyX9sS/7HspIUEpFjnY7FXFP4q7fUnu8bd8QTFThYlRe3sLguzdAyvaASC9NUyl7rAvdPCOBgWfa7feNr38WAS9yPMeIZ6GRiKlpFcKA060zXinoSF2uteVjtXaTJ1I1TM595/sLXXmmUhqFzeF5I8oWro/sxpcm1qfr/PtN125/efe3ldwxe1w8/WvPJj1XVlSXdv2cz06543bW/gX8wbvgDcTDn9G7S67uXrN1L1ly5xtIy+tgXb8lN1rWZZ3YWZ2zMqHjfhhQXpzpGFGJh2/RCRXJCmKbY1wdmFy9eM9++oxg+3PgxCERCQt6q+MSjL58/VFPwfz65/8VH7zv988/ffF/1y/fu3lWVbVTLTTrlx/aUNwxP/R2Z7gghZiNeHZpho/JvtA1IhIItSVoAcLvjN2H5kGiasOj5ZNuUe3J2EQDc/uDA5KJJJT7XOXS4tuADfCqtZ6+PLbl2ymT5Kl2N3lis1her9TNmh9MXfOtn9//63z6iSZEJtPziPMOA09Zjt/bYre5wMHOdSmIGG1n9jqEZpnmCO+xvmrDuyDQihKYd7qRoDUOhOmHEtXTZPHlTfs7fxRkAgHOjM1UpeozxO+0j20rTZWKBw+vfXZTuC0e00lW11OthrUsQ4yprJEJfmJIJeAEqohSLOgenEjcV/uIjlc888tGZhoFjF7p2ckrti026Kbs7EKZirOi43zoYoHHCsjPDSABCAGGanrS7DXIp29uoe8KSrldlJmqOX+ndV5mzNgS7HhCAiE9+ZHPOgbzkVzqGZl0ufyToCQcQ0E0T85MOz6m+OUcw3DI++4uT1xpngzM256uXeo7UrZK3YizRGODoMmHOf3HUaDs1NO0OhgcXHK93TJht7giNpRLBrVuX/SW7LyAT8O/YWvLsqy09divzYjBCIYQ+VpNfl5cyZHM2jc8nKqQYw7zTy1JEmLwHjfHpq0NBtfzPcwuvBL0TVucP63ueeb0V5yX9a3baV4uyHi7MPGBKqJMsJ4Wo5eLL+HesJjcFY2genqYwztTIxxweg1HXZnNtMuk0Msm826uVy85eHB3wLdUWZm4rzvzeH9+xeIJqsURECngEXy4Qi3lCESlQCmURKhSiaV6UdsIalyzXvGlkqjYnJVEpvTg2X5e23ArwpbPtuzMSZ2xOpvnstMOdrJIzb6/JNNYWpb3Z2A/RG1uTm0Zj3DA4GcGY6bcgIAgCgORwolgwLhDBCeEzr7O/CwhCIRB7wgEKYwxwoCqvvmWQQIjRYHUHwhTGJqUMEMw63Oy+rYvG4+G6wNFGaQQAAqAxRkCG6TDF0ST9tx2lEy5faYbp6y+exRgLCMRDSMrnqZTSF1r6XrrQnW7U/PKvF4FTuBKI0GsXUiuXsO0IeBg09tBE/1SaSHhlyvr08PTZGdsPnzx79Ft/6Oidvmt3+Zfv2rq1OJ2KdlKjMD4YNRzJaKJj7W45WJw2b5n73G11V4emm0bnuFfBPgUiAQ/T4AjEZ9gnyqUquYQv5D340e07y7MQwM78VHWq8XuvXphZ05Z7bYrgP3eXd8/YEI1VAn6pRlmaqJtzeWAdsKawWireWZj+x/Mda49ZT3uULeE1yKQIkGV1r4CanGR3INS2jpAxl7jPGPFda1IEbBVBZVaSwxNsHt2Q0FBNmuGlbnPDuLVpYuHrrzXtffzkk2/2L5onfv+ZvQ/due14xyCsFRqKuUCKHpy3kgPmFx699/VH7/VrxFaeCDhCQ2tHuIF/Dm74A7GYsrsztEohj8dDBACcbRs6WJG7uzwLAF5v7TtUuqqw9R+E3zcO8d1hLYGfu9yaJV1u5jpld7tD4XPtI6w85d8LsWQhAMrl/z+f2veJQxWF6QaNTGx1UFORJZNkmTWxQVnM9RBjh/XYrYWqZTYhlyz0cmNvUnHWx8qyAMC+TlPGD4ln24f+0jhstcz89MXzhx55+iu/Pd43vzg953rlbNfOTRmB1VbphyELOb2BYpOOz2n9+9zpq5G85MPV+SSBCpS65u7pO8oKGVehWK0P0ZG41jm8HwOdJQvxCXJowZWTIF/0evUKcZAKBaI/OEx/fGcxj4ijUrMRZyCGLMT0JB732jOl6nfbR/ZW5LaOzt60KYdAaGLJFVdZ6D0R4wwAwJIvKOXzcpTapWDgwcNV7ZaF4YH+fSXpN1Xmbi3NvBQJU7yV+yzikzGsIRaxLgECwNBvdeTplQz7fN7txRgS5BKWz/xu31hhUsLplkE2BbERiHhCR9DjjwQlQuL2zVnbMgxffOFdizMw7fWMWwK9FvczDebhBfdXXrj0/RMdxQmSBPvCo386fappoCDdAAAhKswmItgxGYOJWSMeQmygFEV/MMB589yQzfntE+2v9ZgP5qR8c0ceTdG33Lw5EmWwLHi9GQnq/VtyRHxe34iFscz4BMIY0xh/5aYay8DYd+vbbN5AglwysbTqGRTzhG/1mhOzU1/cW/698tyvFibff7CC7p/VyiVPH6rcZkpQCwVKAV+JoSp52eCOrE5ucK+ImfCDN1XXd404PP4MraKttTciFPRaHVUpCbWZxhHLUt/IvEjAo2nsCQWrClK9vuDSolspEgYoik8QOFpWgZn4AkJ01P1g7lWQokmEaIxDNH2hb2J7flrLpHVX5kol2PELvTvKc0QCntXpnXF4UlRydq4kQv++rfjCkuvy4DQ77b3lmW91DEE06g8A+aqEfseqOC7Xro3Zb8zdZgWCmIOZaVcXpWEMDT3jTOfmlzpHmKuoSDGMLbl84QhzfIimD5Rmn+4aicuhJBAKR5k3xOpvekZ7lIwWFWAAmZB/pDjj1LjF5vU3jsw4QuGlULh5YenpoalfWq3HLvXs2ZydbtSwJh2FsYhHsIY4cFaTUZx7t3d8dMFZmZ5QrFdTgbA6GF662OftnkxJ0r706H2Pfmy/VL8cHWBcKYZPVVucjnEcy5gLDHC0Mi9JKdks4P/riSar08d1sRAAoy6VpJY7feFgVA4rJnKfqpYv+YM7yjJ2lme29E8BwNd3lC7JpN985d213XYZlyAvOkJMt90EmZhEyOW/boqgdwIAqrKSFty+rok4XYEPVOWdiZciYEt4kxXycbuTolduOAL491tqTnYOr1dYzLXj7ynPauSIIzGgMO6Ytjr9oRm7N1GreuXdnnjDxFrz5UZNvy94xx/P3fK7M5Mut8Tt/MmdtR+/Z0u6QbE1L1UuETWPxHFRDlTmvvROJ9Mb4YWTLY7OMeP2wpsqcyVC/ldLcz6SljRu8bBCQ7GfzDfwz8INfyAWTNsBCugwTeXI1J3DyzzyxqHJ+7aVra50Alhn427EluIiVlmoZyqpIuvbhyqHzUvVDzz+w+fOvtnUf6pnTByidApJbXH6+x3/+lhNrIXmvskEpZQlLl8Zt5SbtCaJUiNcrmm+Oj63Of19VFRfH2z12HpkIREpmMAbCi1fHzE3rX5oenLRbZmbefrzR4//+F+eeuSjadma1qvjRx75ndMT2F6azQRBuQKs1wcNgNeR+Jixe2LbkDX2sTVVJEHUXx05ULoS1UYIx60kRqt/uQ5YslCACgkI/iXz/CaT3uULmRRyESlgfy71TJanJX0wZ2AtBhbsJYlaADjbPnRLbcH4vH1kfnFTunGDZCEWbIqAfS7YLlcAsOQPRmiaQOAJhq9OzO8qSj+0Oed05wgA3Hdwi3TE8vPGXnYojCFRucIaAlglJcR+8bDXe948V52in/a6UqXKKYcnSSWF6DGzS267xw80vjo0XZ5r4hG8tcHLuMAAKqEMAMQ8oVYqdfrCE8Hwbd95vt288M3XWih7ZMrm+PYdFV/el3/lZOOZCz237CoGgMZr45X5yQBAIMTYsmuHvc7pEcDr/ZMLYmF+Vfr2/ESjUvzb1y7zBbz7D1ba/H6b399iXZxYchsVUomAf+vW4ivNo72OBQFBMCqZCKFdRemHN+fuS9P/9FyHRioiEJpzemmMWXr3uY4hqUx8tDhdLxbK+bzdJRl2l++Lh6vEgpWK8Cn7ck9iCmNePG1U1o5EABqZ+FBZ9tPvtA/O2Cqzkw7kJCkEvBBFC3lkmlHeO2b7/C01STLltM/l8Pozc4yXGgYowIKoLhaO+kJMhQNriwMAiRCfQIzRee6aeW9xptXlMy+5a1ITAGDAYRsesH50V6lMLEhVy7umLJ3TFpVYyJ1hXZZpc27SD549M7vkDtE0gdCOvHQE6DKnvy8Zdcxi7H6u28MSikhOGoGZqognDESCzOt7q3JPNw/Acudm6JpdBAAxn5ehUVydtCC0fC3VucmAoWk1jzyywsJCYZpeS8fHABgTASqEonOmMS41aov0qtu2lf6uY/hrrf0/7x4ZcHpuTlb+KDXFGww9dMe2j+3bdLplkHEhyNW5jhhn9UBZ9i/eavz56e5CtWSbXv29Nxvrmwb//UjN69/7xP37t0y7vMwtYtqVMG8XREVR91flno4SXbiGPgMMQGNcm5M8almqKkxZbOi/78VzjkBo7UyUIqE7EBIQ/LgugVYmDkUiCx7/3orcrpFZAKhJM9xZlFaWbvr6i2dhHbBTiaHNmJSyKcf6KYKoSg8GuL2y4HQ8Zk6MVD8L9kQGmZSicNfCKl9CJ5PuLk7/VbQ5dAy4dnyMDwMAyWLl26Pmk90zB3598o4n3nqucbjXtti8pq0YA0YHiW02/HBJhlKKIt1DMLv4zENHZTrpOEX0WZYAoDo76Uz3KMRLEYzNLu57+Kmnjjfdtb342A8/dTjLxLKYCtUKGZ8HN1IE/69xwx9YBcZoMCgknnBQzueTBHGyoY+JWA/O2vJMKxrk/zi81T1OkChRp6rOSP7cHdUv/vyTxVmJDb0Tf3ir5VLHaHXBhqRON44gFWaVhRi8e3WkIj+FtTZ6LEvlnJ7EsOEeuu8XV4dmCqK5+zfaBsRRshAAmnNGU6V/v7jBubH5yiyDWCg4WJZl0inTEjVF6cn31hWlGdT3HtjMXLuYJ2R+AlQoTK+q6FoLBLDWXQSAWYfHpFrhTwPA6bahvDTDPVFJhzPdI7dVFrB/7bFbTeIPEkrngiULAUDDhGVXlolEaHJphSzE4LXuwRz595zkBwAAIABJREFUSk9iBh/MGQCAd0dnq1P0ANA5PJuXkpCRqH69pb8uL2XjZCEWEp7QGfKu7fIRpEIiHrgCodbR2WK9rmt2/j9v3/HI0a1NQ1P17cM/+tMZkVo6uuhqHJsDWKkZSFHLp9YwAViw19swYdmdacQYz3rcUw73tekFAY8AAATQOrFwpsccitDBUOTt5sHdFdnk6rVea7uwgxMcr4PG+K7K/I/mpnSB8PvHOkFKZqYI8/T4nvKc+3dVpCWqP7F/84TNKffSYZUAIxSkwjyCx1rS7FnYOa9dLCpayTpqcz67f/M96dq3J23317e09U/Jj5Q/NWv9Vf/44/1jr0/Ov2m3paoVAFBXnC4XCxfGnSxriLHYfnrv/u6xubeHZzpnbDkG9bTDHaZoImpBvt1p/mhpWoSmGZlRHkIiAe9gTS7bJGHG6UlRy3E0M8DOk7FB4z7KNbkpbn+w3TybZdBM+ENFBvWY3U0iFMH4bNeYTiYBgO7B2a/89virb7V5/aGW3gkmEE5jzOOsCIoarKxXwATjSYQu9E3olfJRm9MTChcZNMw0mvonS7ONBIBBKaMBu4PhhNWtQiiMv7azdCFB8eXHj0HUsj9UnvNO5wh36YvU+h67lXUJWG+E+SsGwBizDQFithDNKQXeUZyBELrSM05hXJumZy2nJJUcAGYcbj5BCAiCQGh/WVZ91wiOekQRjLlEKdbOxlE/gdkw3PZkzF3yRSKHi9LPj1sylLKRhp57s3T3ZqbUGRLrL/RUbco0W+1bi9MxwJXVzbDY28t9sTY3BTD4vd4nXr7w4lst2Sn6L95Wu7U4nUQoy6ABwDaPv0iV0OtYgNW+BIkQE4e63DPGdTmoqM4pjTGJ0MGy7CvDU0er8z+6p+xwiv6xM1eZI93hCBnNwyTIxXMOb0zNUL5K1+ewMfyudK1yyRfYnJ+MMWaM5iNFGU1Wh83ti6nTxQACkh+iwgUqXX/Uo6hLMzRGF0UjFQtIwrleiqAojSRRc98kAFRmmZy+YFzt0RipfhYs+z9Tq4zRHkUAldlJNMbrFRZzUwSlRg2F8ZVxS9OE9T9Ptu/71cm3OmaNUiJssXxud/HV793z0KGac73jccfRKiQHKnO/98f6aPPjawY+76lv3PmXb32s0KS9pzDz/pwsmkfPuz27izLOXjPHfbQfvmtHbkrCJw9uqS1OrylI/diWXG4dQrZOze1FwD5BN/DPxA1/YBVmnR6mBnHW51UKhOc7Rm7fWQIAGOMXLnfV5saxxddu3LXf0NcHNzngiwRPd/SGpMTHyrPGvY5ijR4ADlXlZ+Sa7t9Z1to/VVWQ8n7Hf784frnnYFUee1GnBqcMWgHbLOxDkoViwCULHb/cWxnVTXrm3aumooxPVWQDwJTdZVSu2NMf7NrX3rRLo7OpOclpepVJowCASYdLIuTvLs00ahQ71zCyMMYKwSqbfi3odZIDCx5fwuqmvM+f6fBkGvZFJdiumudKo44QAAiIOGo1dPRZ3eDqc5WFRm1Oo0JidfligvQtYzOfqi2NEcq8zvgx+3xdspBE3XhtrLIgpb5r5NaKfIIgJu3uD0AWUgqk3EKCIBUKUiEhKRi3eRLF/PQEVaJC1j44GxHhrXmpZemJv6lvGZ2xPXr3LoPF+YXXL885Vui23MLiGCAAHLWwX+2dIAgyQuOrU4s/PtXeOm7/0kuN//Ls+TufPvO5Fy7+6O3OxdGF0y2D+ytzxatd6OuAMWgQgJgn9EWCBEJKsfDf92/R6IWS4FKORnJHXoaE4mMav9M+tK8iV5+R8MjNtZEIVZlhbByZipuFiLtG3PgoiVDbtO3OkoydaQa9kPfV4txwsxkAxENzD+WlP1Kc/Uhxzs1JCUe1Bva9h6sLTjUPxIyplUs+s6Nspm/08cs9cpEgRS3vm10EAAKhk73jIoO2VK9iCpERQEv/1I6yTNZaoTFe9Pi1EjFNx8kM0DjOJTCfpbuLMvqmFwpTDQKCSNPIr80tekPhy1fHZszzL7cM/uR/z5y9MrSlJOUbD978xY9sZXRvMKyyrTGAmBR4wwHWpvRTlJTHAwAK48cuDv+fJ9/6XfvQ9nQDinprJxv6b64uAAAa4/IUgz8YCVM0AISjWkAkQrUZxiytorln/FKXmRm2KjeZQKhxaIqMBuzXA46WHbMGKxfsqsn4Ik84AAAIwaGqvDMtQyRCJUYtxsspAgBI0yiax+dwdBvU5aUChobBSYpTPM2OyRxGRBMX3AMKVAaze4E9WMLjlZu0oUjkr83mUMTntod4BGrtm1TKRF/at2XJH6QwPlSVd7ZlaK0PwFKeWHz1cI1tbObhu7af+/nn7ynNvDK1fCISoSSVfMbhjixrMfHDdGwM+GBV3pmWIXZA9gnibpijFfnD80tHqvMvtQ4OLLm75hYpjOV8HvMuBCAW8AHAHwoLSQGbIqAwThRL5vwuANDLJBGaXnT7H7h9KxP8LjVqyhPVd2wtebm5j2ENsTeZPTW7dqVGDULo2vwSc4BBLp11rpsi2Faa0dQ3wQzyyJG6tzuH17KSYqT6WbApgkS5jIfIq5Y57l+FJP9AWeaprmGIhxiqT0GC6reNfY8cax51u3UawVLPhHXKtv+eqoAMAOBwebYnEI7rq8DqAP9t1QU/Plq7wFmPTIVcLxWPLbn8ofCh8uzTXSOwJsC/Z0vOPfs2sUpKcXsRwHKKYF0P5wb+objhD6wCt2OUki8enlnYVpoBAKe6h2+vXJcxzP1836C5Fhe+SFBECt5sHQaAqjQDjvIaZp2eivTEu3aVivikSffBFRvjIiZOx5B2cHRnXBm3bM9M5B7wDyILvdnQ6w+Gg5GQPxI82zPSODCVo1NWpepFpGDRG9AE7NE3RG91/PDiRnFl3LI/21QOoMhOenNoCgB65xYVUoFMJBAJ+R/gJmOInxwAgPHFWOr8iQvdXEHopuFprj8QpsNKoQziYYO7K4Ys1DK1kKyU+kJhpWSV9v+gZTErYVXm5zrjv+epWbLQgsPt8oZGZhcbh6Zq81JmHbFcqfeLAYctQlNCUiAkBQCw6PUhgCSlbHbJ7fIF9SopAFRlJ7WaZwmEvnxb3bfu2b3UMPDxP5/l8mWLTbpphzsQXqnOZ8EETQFgXkg8eb5v769O9s+4M3Xyr+wueekze759ePNna3PKdMKf3FqtV8uHp6wFGQkbWYUYUIw4PQACkAr5X91bMMgTXXyjxeHyFxt13ea5pp7JB26vIyiaovH9R2seOFjVPW6xr7Yb8JqFoKLZADIqXMO83mNZytMpmZIVtVh4oX04qBb84t79NQatRijQCAUaQEV6NbB8mOJ0EZ9v4aQIGOwuTK/LSxtedDVPWBIVUoTA6vIBwBstfal69c4cU5gKIQCMce/4fGmWEQMEaZqZ0oTdbVLJwtH/4mgIPExjRCBuOJy1LxHA3tKss9fMbn9oZ7phV6bJ6wvW94/+4On6senFp080Zxcnff+zh1NMCXnJqltrCzGGxp5xek2sHXN+AhTNGKwYoP6a+ZYsTWJpbn3nmN0b9NN0r93W0zd3y7ZCil6mQnXP2UxK6YLHT2HMdhQGgDBNf3VHSeL2osdfu8KWVh8sz2a4amQ0F1GgSmBSBJFocoC5cB5ndWhOowBq9eSZbCQA1BanIwSNPeMkQvdsymqYsDj8IQrjEMaYzxtbcrGb4WB59pmuUR5Ckahny00FoPWfXLYNAnPkiHPxk9XZPAXpjai+/Mzbb7cP17cOPXL3Lq1CihDY3L7a4nSEEDMl1itgnS7WgscAu0oytlVmp5vUALAvLwUAuuaW/ZlEhRQDWD2+YlXCoCtOYU9tcTqBUEvvBIVxiKYpjJnl496oTemJA3OLaUZNhlFzS7LueKfZHQiz02DmYVRJGf0cxiXoc9iGnYuzPrcvvJzpTdUo7IGgQSXbV5n7xKuXAeBIUcakx39XXclvTrcsevzcW8dYt9zY/7YMQ/uMjTkgQSYmEHKuIzS0e1P2q+e7md/VUtHekswn4pF8Yip3WTAlvM80Dzm81MmB8RGbPUiFpx3uzpmFdwanAhT1SmP/+XWKLrhj7sk2DdocO1I1/qFZ9ZLnB58+8P0vHjhqSNQBOef2AsDRiryzPea44wDAZ2+pzk1JuG17cW1h6tYsE48guAF+pVQ4teQWC/g7C9Kah6fjfj3HXGBdmqFhckX4KE2jtC4Gxjz2fSWZp7tGEQD/BmXon4sb/sAKpuyrWM6tw1ONA5M1hekYoHV4ujx9lVn894UvEmSyBPN2t9XpFUuF/9M/2WrzDTrcFBacGhzn84gLnWbGUv8Atsh1EFM8wFX4AYCBBXtBgop7wN+RLOQOBwHAHwn6wsEzVwdLs4zdw/MiUvj7c51JxVkPLDcMRpNLLsn6fW3fE3Hv2OiiK00itFrtD5ZmeQmifX5xzOGqNBpb+qcOVX+Q7Md6lQMxmwoA3rjSW5BlPGxcZunMLrmCYcp0XXo9fp8P6vmOUZlYwHwrLngDrkA4WSmbc3piKBCXhiZqMmN7LMTFRnYdSxY632W2ubyn2ocAYEumyRcO62TiuF8P7wm2kIBtTxMIR6wuz6wvnKiUtozOHCrLzldou5esoVBkcdS2c1fh6Y7hXWVZB6rzb041/NeZNnYobmExQrHuJPM/hStoytHu2pVTk6vLM2qKTRoAUIv5LYPjv7x37x01+d/59IF5m2tbYQaFN3RB7H1jTBlxVLnf4vWUJakr9GqLQXmsrT8nQXX8Us+eimyRkEcR6MTl3rt3l+0sS99flv3rk00xo7ELQWEciVqZMQFaCuPmyYWqlIQ+hy1fpTvbNrS/Op+m6VurChiDKUSFx5fcSSo5V0v+K3fuONs+HApGWNsOAWCAJz93s8br/cJrl+ecXoNCOrbkdAdCDf0TdRkJIlJAYUwDUBjeaujfU5El5Ql4CPEQmnN6U9VyABCQyyKbBEJo2WkBIqrDw/4ICILxHI53mXs88Nixy4Q/mKKSJiL0/afqF5Y8Rx+6ZcfHdwsSEqb8QV+Ekkv4iEAM3TwS9SioqOQ/jbGAFAQiwRBF84nlUwQpqnfKWluQRpA8vUH5079eHF9wLPp9JztG9EmqTvuCMxRutS55gqEEuWTJG6AwVvD5XEerLt2YqVU090yc61huD1yRk4wBXxmcZM1iEqECVUK33cp4AmxaAFaDubdU1HDH0YUjESKi2Z4VdRqxsDbN8ELHsD0Y7nP5DErZ2KKd/UyozU1BCBqGpkiEEEJhmkZrtgprwXPnkK809Nvn3aEgD6E++0KhOuFgZtpdJZn/sjV7xIOfOd5UU5SmVUhojJPVihmHB1abdKxLwP43QNHMLqUw/tYdO+q7l9vo1qUbGsZXLL8klXzW4YnQNAIQRqsIuDhQmXu6ZblWG+LhYFn28baBLKPmru3F1wZnqhM1f+kadQZCmJMM0cglnZPWAYetz2Ebdbuy5IoMuaJYvRJ50cskYYq2ef01RWk0xo29E6VGjU4uIXjk5/ZueeJUc0wUn3EJEIA3EgaAQr0aAPqsy7Eqo0I2u1poyB9ZtmUxwK3biutblu8bU3K9NgS+ntAQU8L7vVOd3z7R/s61xfuevXDvHy/828uN//LspUdebf3Gsa65iPDXf7sE8cCMeexSDwC82TywYHHMmOe/cqT6+a/duac8K1+l08r529JNcw4PAFRnJ7n98VspA8Bt24s1Cslt25c7ZsbImGYrNEla6aTTyb26+EJD0TIJVkCJ+W+KSj7v8gJATXYyBtw4NPWeXzo38PfF+zIz/j8Om8evlogAoHvJmq/Q/uGtVl5Gop8K+iPBS32TW/PSrvNeFC90txEw5o6EJ2QoQ5fH5hNzU353a923yjJ1QqJj0fXU4HRzmEqUSeJ2yPqQCFLhmLrVE6t19y+Pzctk6B9EFlrwe0JUeNTtNHucfeMLKUZ174Tl6ujM8ZZ+ANifmwIAU3ZXmkYhEsS2a3lfWLsup4emSkzanrG52gxjvlreZXerRYJgONI/YclLXYncbxzrLb3dG1Ctjsr/9cI1f1bi9k3LPlXLyMye4gz2rz12a6ZcDfGw8d313Km2X7925dE/vN3SP90zab02tzi55ApGVoXGW8ZmduSu2tLrjR/39TVkoXmGLJQt05xqGphccLRPWWpyUiQC/sSSi9Ft/DBgJLCCEapvzqZSyFRiocMXGJi1laUlCnhkqUZ/vHMg2aDanZfWODyNENx/U+WllsHBJXdnlGUB67OGmAvEGFzh0D1ZpsPJKhdF5CUlAMCSx/+b0y0PHqrWyMQUxodr8oMhKlEb33lba28xoFabgwjAGQ6c6rJmpeiUBlVH+9ikx2P1+k1J6vPmGS1BJqikDHmgLi8FABoGp4CzCiRCbNB0rZXJ2GcdM4uVybplV4TG5zpGa8rSP7ltpdvdnNOXplGg5UZdy5QYrUJyS03hc39rjUkRJKnl371j59Lw5Lfr2+QiAQCcHZpUpSdsT0kkCWLW582Qyc+2Dd1St1IDQyC05PVrJCLGKo1EpZAQQ6tDCFaH8KMGMaJofLylL0stnkHkg787UfOFXzV1j+2pzZOWZ/z2poont5Z8qjB9fNamlYiy5Zp+x0JdURoC6OyfYq12IupdkAhFMA5jmrVZMcC5HnNVZmJQQJtSE0y7in700rtPXRpq6Ry/JpW8PL70qz7zs6NTApLM1qsQwKJ7xRxk7hIN+Os7ShK3Fz7+2hX2LAfKsuu7RtizsHsgRNEAIFyzTOx+oJhW6xzbnflXzBOGqBCFMSMd0dgzjgHKTFoC4MLYXJvNkSQVXzZP1/dPji44F12+pr4JXhg/9tolGmNufcLa3cjdosw914tlVr972LlYqE5gDjhSmOal6R8f2Twxt3SwKo+ZrUEuAQCr2xdjs7L1CQBAYSwiCbZ8mas9WmbUIk6KQC+XAAarx1e4RpGJQW1xOkGgtv4piG54WPN8Ha3IP901UlWUphQL+AjKEtUvdYwyd5I50hGJXMORTIWmUKUrVOlCdERACjBAnlI74LBhjDHGaRrFvMtDADpQlXe6ZRADlCRqeq0Ok0p2oDQrbhQfAHrty3ytLUm6S2PLNb4xKYJkqXzW5wIAGgAB1BWnNUbZ+Qhgf2lWfXecwuKYyl0W36zI1an5hZUp+ZvTPr039f4t6RUacUbIN3KhvYik/nDfNrle3sgpbefiQGXu799s3vSZX7QPTv/x43u6eGj3akIstxfBrqL0SwMTcccBgKNbi9hq7xjCD48gxEJy2u4BpqFB92icVCynuprB1hinIkFFRkizx16aZrgyOIVupAj+ubjhD6xgYsnFBlAJhNr7p+5MMwLAuWtje0oyr/tWgKhL8H4RpiPcosljjT0SqfhoUca013EkLfWerKRPZhr3isRCHnnicu+Bv3cbMhqv4ryyZCHmLFaPn8ZYLVmZ3rUpS4Hpg5jLXLA3yk/Tm7SmYrU+AUkMKYrtdVknmwdea+8TCvkBKnJubHbU5eubX5KJhWKRiKKoSOQ9Kno3iIYJy8HcFIRQMBwxaRTZMrHQ7U9NkIsE/BPx2pC9p9IojoqLr8Xsmqj8Gxe6E6QiffTF/pmFktSVkBUC+gOrmjKYtTnzUhN+9qVb9lflvnCue99vjtcKBI0do1aXj/u0D1oWs/UrZCF20WOw3usAEODolvZZ7EUGNQDQGDf3TgQo6kyP+WB59nQ0PfLBng4AkPCEgGkMOBCJNE3Mh3k8rUwciFChMHW8beBgWTYAXL429uL5jpIs4507SgCgcWiqtjg906i5JVl/vGvU4d8AawgDQqAQ8PO0SikAzx0oT1Avefy/Pd3y4MEqbXSxTrcMHnw/6SPGJuMG70XRjsVtM7ZD2UkPb8m155v+fKrDm5P4WK/5b67Fhq6RQ7W5rnBAwhMAwMHynNOdw+wqUGukaWJOx/ype36pOFHDY4R3MP7lyxcaRmfu4XS/dviCapEwxlEBgK3F6XKx0DLu7LVbWQsVA+wqTK/NTWmeWuiatZEI9U3OWWyBHVnL4QkMMDRprchPYcfBAJMOd6pGweQECIDIano9bzWjHQEwFcYEQhd7zaRAVFeUJk8w3nRgU3Fx0pWu8cRE9bDNTQDMhYIzbm+RUSfh8wGAJIgv3bHtTOvQgnOlXAQAKIx9kQifFJBAMZqeJEILTi8BkKxVJCrEj5RlP15ZUF2Q5Oyb3pxp/K/y3P/ekn97mrGSxy9L1itFwkKTdsbhYbYKc6P8FEVyqgjejaq1bM1LBYCmoWWfJIwxABSqEvodK4XFXGCASDS3Q3AOoDgkIgAgEQrT+MGPbD3dOrTo9FEYb03S/fhU26w/1Dgw/XrL3E/r2+948swd337u4V+98crZDh3Jbx2YIqP1CeQaSg87LBV1z2iMtSIZSaAc5cpHQZlRq5WJtCrppi0ZpzqG2fcmq+XTdjfEo7WQnPIJktPAmBsqro2mCJj5FCclzDm8jkAQc4SGIOqlRDA+XFNw/MqyAibrdXBdgk3piVfH50iEDlbmXuwYzVDLMcc89Ufohnl7RgSzKs9yviREhRAsEzsRQgihBJkYY2BSBIChqWd8a5rhwtgcxIviDzhsY25nhlwpIZc/oksSV0W4uSkCGgMAcoWCzO2L8aOCEfq11sF319TvMpW7DHmJCz7GGOM6vkAyMnfiROdjz5+lg6EHDld6Tv/o+W/ceVtV/mf3lp+K52AAQG1xeoZR8/BdO77zyX17CtMeqC7gmuAxvQj2l2S+1hpbR8Ri5/9l773D27iutPFzZ9ArARCNDey9ihJFUr3SknvcUzex198mcZp3k81+3yabxJviZNO9yWbjOM01cZVsq/dGUuy9k2AFQPTeZu7vjyGGQ5CUZFn5/bGr98HDB0S5986dO4Nz7nnPe6pzmzkiSEmEn0qtPgqUxRdoKMzEGFrXUitqKDMRaEWIADhnLUMpt3oDAFCbnXa6fwLW//W5jb8FbvsDSxi3ezyhaIyme5y2SrXu3eaBFLn44OYSALg6Os/cGq4NfFOzKSBW7Hy/f3W4LkPL/Y0WxaiGbMOF7ol7tpYnf/lDI0qvMIySyEI9C87q9BX88tN9k3X5aXCr0TpgbswxpZIS85zz+29czCrPLy/Kes9q/0HPxDsOl0Iq4vP5kPTLer37BOY8SfrsyKJHIxaMLTjZjXkegZRSwbGrKwRPPxDWHE4gEgMAKacW/TuX+qUSYYl+OQJwXf4VTthk1zviJbQOzhxsKLl7S1ldaeaT9zXUF2XsqS/uHJv/9+cOP/vKGfYHiUsWuglnAABY0VIhKTg9MVeboeETqMM6X1xpJDASCXhvdQxfnJpXSZfCIzfnEgy7HcUqXZZMPmBf7LU4fze58PiZrukF/x/O9czava+c6fr2748/+cO/DnTON9Zm5xtTv3Bg8/GusVm75x8f2t4zPGOSiZ871822trocAYYlZwAAwnEqTSGRCPl8khiat//yaMvnm+pUMjEkCN/9k5bcNA2sHwrgYrXhzs6nMxhJV0gerMhtyE2TArhs3s8XZT+cabxfqjrVNlFXnC0ieQBAIrS5MAMAWkdmmZjAep4AADDWKtPL2Yn5+qxETO/q8N66ohP9E4zvBABRKjbv9Wtk4jWbOri5+EjLECvMQmFMYxzH+LnPHNRFwj+72CsT837XMpUq4Z8fnSURogH4wHu3uX/HhlwhyWfO8qzbZ1IpIHHIREJZP07Ta3rOjDVJY3rO7YvH6V4pkWLSNh0of7dn7LDdG6Go4g3Z3zzb9XcXO45OW9OV0q4Zmz8aK1fpepxWrVLaVFfEmlDseeGTpIggxAkHDAO0j8/tKM0W8nhpcsnObIOAJCsLDDNzrgd2lsuEfACoVCu1ElGuWgEAfB6ZkSLrnVtkzVAZj8eY1/95b6NhW9n3Xjk751iqyfDFA/UnuscXfUEKY16CuM8caZSi2SExli4CYChVzIvMjCVZ7YzfyCeQSiHZv6nw6efeOXpl8A/vXR051nHiv49861eHFzsHfPP2bBx+4u7Nb/z7pw4/+/je2oJjPWPcNgGATAQiYCVojp9glMgHXCs26RtN+iG3/1N7alvGZll5e51cggEsq0IErNPLuh9cB5gJngBAlVGDAbrmHUynQh6ZoZKPWJ05UtWAxw4I0QAYgOF68RDaWJwhE4u41meSS7C3Mu/d9hEMUF+eDQBDU9b7SrMum5dU9k8v2IuVUrlIGI3F2YPn5hazMCilcx4/iVBTXeHxqyNWT2BnjpGxmO+oLninY2TK7hly2xnJY0b1OF+pHk6kBzxWnXc5Ie3PDRHMB30qgWgu6GNP6qaqvJ8caj3aNfHAf5/4/F9arFHBe51rJRavYg0dax3+83ut82d6nz3evi0v/ZdP3vfIR+uffngHqxiBAOry0xmODayFx/bWTCZs7kaTnsv7Z8ANETxcX3p2ncrH1yb88AhCIeZPONwA0FSVd6x7nF5LNnRzmelc57LrUmlUt80uLT+dXCLk8fgUOR302LyBQ+1LkQRfLHmWbuNvgZuwYP9nYtzuJlWyfo8fAByB0K/fvWrP1JwcmgaAs32TO8tyrtfAzSAYj3CFSg73Tmjz0+8rM/E4pEmz05uWIuscmastzlirjZtHhIopBBKuuH5SCKJzfrHIKGfJQvNOLwBcm+l+4+h3L5YllIWGzYtpKsXGwoztG/IxxuNm75P5Wd/dVPSFkuwaIHViIZ+/rGjO4iaMSwZXZ2zlBtWEzVmRqQeAeY8/TS3LECj6JiwlnLzeG8c62omw6A+lKVdkBr9zZdCwreyjVUvhpiT+1TXIQjeOsTl7fvqSMC6NUKFBjYS8hbLUC//5Bb025Zt/OvWRb73YPrmwvSib+cxNOANJZKHTo3NmZ+Dt/kmjULlgj/MMhrhKUHfHxhOBwIWQl1G0ZHATLgGb3/LmjGMQod0q+RapBGP45bFW24ituXfa1p7CAAAgAElEQVRq/6bCH332rgydMt2YghBo5JL91fnPn+7I0Cof3VH55vGOdquzm8Ma0shEnkiEqTUGsKxJ6gpGxHwSAAKRWJSiXzjbydCEgGOrNfebS7OvtUJYY4VKaMCzYOdzyu9zeqN78tOs3sCF3olPl2Xn7q361RsXL3WPC/yxfRsLiJUTv786//3OETJh261uEABYaxUALputO3KMNI0H3fZ8mepo63BDRfYnG5eDA6FoHADkwqUzmOTbNJRni3i8RbN3xOtk0lKZR6pC8v2P7fUHg4eGpnSZ4oJsw3NvXe62WoqUmtah6Qd3VLKjGvf6hxZdKukSWYgFgRCPIGhOBQNqpRIonyA6xufrSkyVBPpaSfbz++qkCIje2W88vPP/leZky6Wfzkzbn6ZVSkTZGsXAgiNMUTTjNZWZAIBR52RnifvbxszV4Jy9KF3bteDYm58Wx8weNpYI+QfqipjvWL2BjBQ5Y50LCEKrkCAEjJXPnXxjiuy/7t9i0ys/97O3mFc0cklTdf4v3rsSjtNs6nClWj/lcwlJAgNEKJpJJECrziMX7GlAAGKekNEa2lia5fAEXj7ReffmomM/fjKnruirj+28+KvP/uCTe7ZsKTzQUKxVKzK1KY/urgYCsRYhAmB27ElO5gDFiS+xJ11EChBaEb2pMmo0cgnJI7eX5fzyaAuVkPvMUMnnXD7MCRGwrUGiL1gJ7i47o9GJE6dDJ5eQiHAEQjTGIoLPUKS4re2szj22UoKT6xJggDtrCk90jyOAprqis+2jRqX0seq8P7ePjTh9kShVplYQAK5QhHvbSXIJKIw1UnGcohb9IYad1T9pKdUqz08stJht/hj99qjjH357uEChYeufsE4vAOBV0v5Ghaxn3u6LMMnNxIwzcG5i/sXW0adeu/z9M/2vj9kO/OL9k2+fL8TRtz7XdLCmYL3E4pdPdr53eeAHL55u/OwvO0fmHt5W/vq/fyozXfPgtoocvbo2zeCNJlfFuaMy/9j6IQJYWa6Y6xKwIYI5jx8AGgsze6dXMAa5SCL8VHGseQCo1OpjmLL4/A2FmQRCrWslFjfVFR26tFwiptGkPzu5LJpkUinPjsxembT6sOS3b12JUjEByRcQaxgAt3HLcdsfWIKXjlSp5QuhyCtj839/5Or59hHkin/r7at/PNW9v/L69YCvYTzdOF493y2WipuKTX1OG6M0ymSjYgxHmof2bCz88F0kAXEIDIebBypLs7zhqDsSc0di7XP2N/vMrmBkxOYGgLFFz4Whmd3l1+dN3SD4aHntne4YqyvJBIC/u7MuU6fOMyn2F2cAQJZIVJulBwAe74PlD3BPR9Kk2fwhAIjEKHZj3uoPEgKQiQTnOyeYYXBxI2Sh9ZSF3MGwXrFCpfRs2ygAOINxADg9OPuX5oGS9GX+1WqyEF4VHLiWqCEAAJzpGKsryQxTUSEheKNviieXHHH79xCyNpvNQSObXDlOit7qnTBpVHBTzsBqHB+ZnbYGn78wvuNn7/7xyki2gJ+brv3LvTs+XWjaJv4A3uPqXw4WIlKwWSR4KD11zul7elvZT+6qziX4r3/3U7/44n0N5dk5aRqFVLy7ILfHaQOOCbLEGkrXvds7wfxCA8CQ2y6TCy5MWwGAxsAqYbpCEQmfP+X0CXg8h9v3/+7bxtCEoolaYBhgdtFTlnN9XYEk8xFW2twIYNThK9UrjQppx8TcvoqceqOmujTr5beajzQPNpaaYnSMlfCnMG4syorFqUN9y0H8JAue2x0GGLK5S3QpJIEA4Mrg9POHW7qGZu/fUAiJteQIhpPc1CR86aHtZ9rHJFFyyL2ImG9hTCJUakwpUApfbJsyL0biKTKdQfXt/z55pm/itSsDCpXMHw+fmp9/eWLm+dHpo057FidpZMXhI0QyzP4Eq4TJGaUx5hNEz7Rld1lOgVq+I9ugFAoe318z5PXeV19SolF+sb701NDMosNbplOXGDQEgNMfqlDpepzWGI33bio81jKEEmWJgSOCKeYJw/EIxvBex0iFSe8MR9MUEj5BDLrti3O+B3ZUkASP8XlcwbBaIorRNKuJlJEin3EuV65gp5phDTX3TZ3vnmB6qSvIIAjUOT7HngtvNEIg8MTCJEJCkkAAsXU0SSmMUSKqwH2RnZ8n7tq84PAWmXSNZaYff6QhliLJMWh3lObqxJIRr4Nda+xmPGNzc8lIJIeFDwmHhz0pOXIVN0RAYdxo0ndZnMXpWgBoGZ1lPBm9XIISWQQ0xpf6plY7AFzfg3llf1X+iZ5xCuPqNA2NMWOJMgebqZIvePx5UlWfazEUTy66t2Z+LdN+DGMEUJtr7JhaAID6MhNBoCv9ZqVIUJep/cmZvkKJSC0WZqkVwUiMWlkkTkgKcuSKIbeddT+y1ApGLbRpU+HRq8MSPvnWgPnxl85/8Y1m0aLD7Q+1js2yA2DaKUlJHXbbmWYrjeo4wOtDMxZv0B+JXRq3/OJM/0+PDTzx54vHuhdGbK70FOk3D9a88eS+Y0/dUYajL33jo29/++P1BWm7y7JhncTiqQXnSyc6i026y7/+wtc/vruhPHt7efbHawrYcsWz3hUFVYQkvzbfiG+sFkFSKjCDVJk4TtM2X7A2N80TjvRMJ3+AQRLhJ8ma5xGEXMKfcHgA4GB1weH2YQAQrAoRcPMQAGCryfD+4AwAHB2YbvrlkW+/1/uDNzodA+MugmofW4Dbtcn+/8JtfwAAIBCNCkmiQKUoVPL+sbTI2zwUDkUn2/ojZvP5q2MbTbdMXvPaONY+ckdRJveW6PCHJDzeua7xOxtLbtw+u0Gwu9pMSP1E22g4W/G97rFfDZl/0jvxb1eHXN7gW12TD/7mZOUzr3/19Za/tE1WZN8ashDGmKUqzds9AMBIfJ4emvriPVsOFKQzd915j1+nkAAAj0eu39i1sNqu7bM4c1NkZwYm2Y15s92rlAoWHMvD+KBY79SMLXomg6G5QBgA5gLh4dnFBYe3N4Z/dqK76pnXP/vi2dO943X5HyBHHF/vimUm06hRAgAgeGva3tExPd4+fWLQOrkQ2Fac3v2NB3/4kboFl7PEoP5ARv81YA+En3uk4b8/Vf/M3vIL710+M+neaDLIhHxBjNq6asFwf5i5uPZgwrH4ojcyOG9/clNRmSFFICB3bym+s34pgbXEpOcRyKBWVKp1jEvAqkB+7dEdnaMz5fqUfz1xuc9p63PachWaDlcIRWLzngBXFt8VigDG9rD/3ZaRz2yrYbPA2euxa2w2XbtiebCmJxcsb4eLpKO7Yl6sy0ydd/l8oWixQb2vMP2y02v1BZv7zLUJFj6VoF7QGN+zqfhS9wy1ljW52vc4N7nQaNLHaXrS6vvS4c70VEXXyOymRLMRKuYJRVeXh0OJHimMU5XSOzcX//KNC9wuwvHIlN+7NSdromfUIuYTAsInFbgi0R/3jr9/of9tKvrz/il3DNeolQ9mGu5QJZduZKeK6YKHkIgkGSWcpQ8AIID3u8ZEfN6B4qVKL1srTHwe8VbrAI/g1aRpMMbjDm+qVATMXrXbT9E0hTGfQI3l2TSGi72TsGqXmpm1k33j920qBkDts/ZSvQoAEMDAtC0/Q8NL0Jls3mCqTCwgCBFJhigKALQKCQAs+oKwyob+6vYKw7ayn75xERK27+6K3Hc7h+MU3e2w9LpsZr87VSSZ8XvZNc9w2SlOfjNeWUGMBTPnjCcDAPdtKw9Fl+SYN6TpCEA98w6EoMCgkosErNIo4wlfHplBq64maiWlh5ki1nbnhgiYd6uMGgCYcvt2lOUc716uuZauks04vXGM99cVnVirfhYkIhKQmJb6wsw4RbeOzdEAW3MMl6cs7PB0cgkPEfZACAArBEJ/LJR0RT31wNaT7aNuDqlmacAEQWG8vzLvUNuSn7yvrvitK0Nd5sWTQ3P+aJiJKypEgmB0WS+L2wjNWSc6mSRGUfNef0V+2tCs/eed/RsrjBIF//MbcyJuf1NxDpP7ixOrdLV5Wm/SnTRbP/rS+Sf/emXeG6bJ+JNbil59fM+z99ZtK9bvKkzTycU6uXj/hvyHtpdr5GJI3An3r5NY/PhdmwfN1qT9KZbqo5dJAcDqX5EzAwBNlXnXCRH0m2H9EIFWJl7wBgCgqTL31PrCo/s2FXJLp7H0KgaVWn0cqFm3LxSLv9sxeqpvPErFYngFMzkpD6E2PfWlq2Op//ryx1++ONMxQLgcn9hdcPGPT33xQP35oen1fjJu45bjtj8AAGDxB1RiEYVpAEgRC6/0TBbsqTz87OPfefJgu8XWtOk6GYQ3Z1dxy5ABwOHeCXWOcXN6ahJZKEMtH5iylpj0N9HFtcFVGhWRwpOtwzkB3KQR3qmU6RY90xOWFI/j0jtt4xc6xi+0H33rzJsXrzZVZK/f3gcB5+evdXBm94YlZvNz7zcPeoJ3l+eEqaiQFMw4fYx0PZ+/zE75kPMw6fSlCshJi4upojDt9KappADQwhnGLcGEw+MKhA5N254bmPqXq0M/7Rn7wvutGo382zn6ewr1Wq9nurWfSWhmPr8eWegDra62oZk9tQXM/dPmD22QCr92sOqeMuPLT+z50q5KbSofAHYXZ0w73Eyp1zXxgXq0+UNCPrG/MAMAFAKyMj9teHDwgfrSJWWhtSoP3Pj9neHsAoDZ6bcEIxvS1AzL5Uj32ENbythB9k9a0lJXBCLq8tPDVLx5dMYB4Tt3Fr94stnnj4eDUK7WSXikLRxLM2gWPH7uMFyhKEGg779+cd4VIBKOAtcEHJlerC/NYj9PJKoWJIHZ7V5vDofc9nlnZG9+upAUXBg2T9vdbaNz+0qyw9HYpo0FoVicyUNkdy6Zb20pyiIJxA0RMF3HOWqVGIAGsPlD4Rj1ctfYj891feOtbu/IpNUboHUSY8LRjVD0rMu/Oj4QT/S4tP9dni3m86xTHkY3s99lGfd5SlS6rQVZGGOVWPiIIfWJzXnF6Vpf20Rptv7XdWX/VlPelKYpUsqFcSpPk+xXI7SCrMK8yOYVMLGC4z3jhWmpl62uYt2SxnF730yRUvHCqU4EQCD0kYoceygmEfBJhBgql8MfrtEYGI2aPXWFx1uGAIArospAxBPOOj1bizLFQh6NsVEuYSbwUvdkZd7Sdk8oFscISwV8SPCvGDuSyaNNMighESK40DVxonPc5gsteIK2aOCtlqG3ewerNIbSFG2+IkXOX/IqmfwT5thpDARC8YQuKiRWC3NdcO11CmOSIELxSJiK3r+9vGvEIuYJEUJbsg2XzVYK4zxNyoI12Oey8RCK0RgD7KvKP9E9xg4SAcRXphRzLXXguARMiID9JAZozNJ3LTiL07UIgKm5RmGsk0kBgcMXbCzPBoRWi2MywIkLhOn9QE3B8a4xAoBxM1ihIQBIV8kWPP48uXrYY6cwlXRz0CgkBzaX/PDlM8y/3PUjIIgYje/aUMRUv+KJBG32wHeOde3ON3xxS3mz2QYAKRIhw4lnBk8nGpHwhPTK3Ll0leLKxPxzA8Mld1fEJpwNIvneXINCLJAI+Q9vr4C1vCymyAAz4I1GTQrGTzQUfvfgBmxSlaSm1KTr4nScRxBJtQjqy0znupZN7fW0R+/bVi4WJkfFuXa8TiZd8K2QN71uiKCh3HQ2QdyvNKqvcng+DLQyidnpAYBNuek2T6BrypLcBACsittszNByXQuMARHEL093PfXG1ckA+eapHiHJl/FEawiPsouHotvNc2LrIjk0setjO/Z/fKc6TQsAd9cWvtO2bnLzbdxy3PYHAACsnhAGPO5zMZnEMqmoLMewrSJbKhZ+alfN9b59a3C4ZVAkFW/j7BYzZCGaxue7xjet4rHcKjC3s7cv9A5P2V46fPWrPzj0xPde/flLp6U2x5N31x//4ROB499r/c2X/u3xpk9uq7peYzeKQfcim5YwNmvPz0gFgGNdY3trCtrmFhtNBgCYdfmyE8KOAsGNloO9Ls6OLzTkZ5zvn2TIQjNunzZVVCBTD5ltFXnJVJAbIQuthym7xykn6vXSe03Ke03KTxVpY5Pz1bU5b5/qmDQvfPXRrf/5zw9sK8liN33XJAsB5xfoRsz0QfNiSbYuQsdEpGDQ6jxQknGwJKvQkEISiCRQqUo74Fp8pb33I1XF67V23V6Skgf6rc5yo5pRGr3YM7VzQ15peurWoszZVYUXroHrdvpy15hBItyYaQzGI+0TCwIeWV+wdEVgDINmKyPQCQBMiGDQbf/ovsqLY9NpQvm+wvyCVN1OY+r7vVO9Fme/07tRm1KWqkCwVFqLwez8on/RFVfK0w1qtUSEk3g4GOYWPWz4aL0BUyu3kNf8cM+CM1+jMDt9/3G232d2HbnQP7bg2JaZ2uPxB8PRc70TsBYP+5/u2doxuLDoWx4wndhXZs0UPkLtc/YRu+cPrWOF6Slf3lE0PWWhAW0vyzo/al4IBWcDgQGby5iygsPGjHZ1j3dsLnnpRMeFlrF+l6VAri1X6QgAmiSCmpRIy8D3jrcrRQKDVuly+B/bWSUT8kmEGKHMBU9AtVJjl51Jthfu3LJ5Bb3T1vpikysYaTTpAYCm8fjEYn2pKVevahmdBYByg1opEnTNLTE9MlVLMvZMO5tKMgFQS7+ZLV8FHFP7SNfI5oLMPotrc6aWGYDF6ccUnaNTM2QYZzCcrpQnjQ0ADEopQojRHk06s1/YUh7OyXrgd6ce/u/jT79++dn3hid8xK/eauV+hkl6Zo1sDMAnEHPuGHcIcQJNrNsAiWEw15qYJ9xemdszNs8MoCpNAwB9C06DcqmqKwYgCURj3FiYiTn2JZXoiDskcmX+APNcRAowUGTCvUSJXqbcvu1lOQwNiUTIH49npMhn3X4EsL9uhdAQ5jzYZckUGWgozIREtmtSLYJUmYRAiLHaRaQgEF9B9wcAXzAci1PNA9NJ5wUABCRRnWN4+VLfofbRr799tUYnH7zUE/IG6rK0ANCz4FRJRMFojBkSD6FQPB5PNMIjSG4igVEuwXLxngzjsxtrnthZ09Y2tkGteHPaWluaVWrSMwKasApcl+CxqjxvOFKXpf3ZxpL0BAFpNbjseeaL64UI7tlS1jqYbNmzVJ9MhXzS5UlioNEINa3TGgDs31T07uUB5nljQkaJRXFK6kzQo5VLGKGhnWWmYxzHMglcr6bSqI7T+PKUtdls+3+HWg/+59G//+Pl588Mypz2nz9Y12JZOxVh/6bCV051nW4fvdI39eL7re6uSWmWpuP5L//2zvof1hZvzdTP2IPmoGdfVd6a1Y5v42+B2/4AAMC82y8W8gCAoum/nuvTbyv9TG1hmIqe7zdvzFtBeFjxa3BL0TM+V25QYxqzyQMOf0gjE/uCYRrj9JvisVwD4XiUa32+drpbq5J96zNNh37wmde+87E3f/Gp9A1Zn6jfUJFrBICyHANPwr9/87oVmj8QMKxIwGWTB84MTm0tyz1YmMFYN/ZAKEm5n9MEBgDqevKjq422S1PW6jTNsa6xOYf3nZZBAJi0e2J0HCH03uWB1UqjN4I17UIACERjD2Vk3mPKqtcZ63XGEqX27MUhx6zjK5/e+ZlH69NzVUNe5z07igc99j6XLUnx/abRMmCuzE2L0fEwFR1zePJT5RjiBMI8HmYV/WgKl2Xp1hz2embuNTDh9JXoVABAIHSpd+ruhlKRkC8XC53BsFK8zulbGSK4bqcdc/YBmxsASAKJSUHvjG1vRc7SdzEgBLM2T4YuBSWqjMXpeLlaV5mq31GY/aujrTyS2F5i6uifrlArXmgfeWViwSQVK4SCMo72qMMfml50372xKE5BqkQIK0dIIhSiol0j8zlparimM7DaqqYTH2YtsAuTlkyF9OtvX50cN//xm4/+wz0NL53sSFdINyhlG3ZXvts2Ggis+NljvqiVSw7WFP7ivSsUvfZNiHn1yMDcvJCfXZH+ztzi74bGRRJhxj0boqWmIx7/r4bMP+gdm3T7efzl5ATuhivbDvNPfZnJYvc99d037n/qD8/86cSRliEE0No7qZWK7q4rH7e6R2yeJ/du0Gdrd9cWQOLwg9E4SSBWUyupC6bxpIliXiQQOtI1JubzmoqWPL0Rr+N818RHtpc9srXiWPdYKBprn7E9Wp3XPG3zhaMAYFBIAWDRFypX6fpcNhGPd2BzEcNk4Jq8CGDO6bO6Qr861dYzu1ioTaEwHnDZrdPuPbUFKBGjcPhDcpGAXjk2EiEa4yyVfMrhYY8iStNDbt/zQ+ZfmWezMqXiBevnGov+8sS+bzdVNihIGuPLw9NRKiogBcwMMOY40yjzl0AoTi/JrbJD5U7L6rXE1AZmqvZSGDck7MICrXrBGux32QgAAiEK432VSyYU2wh3MbNIcgmiNJ2nUPe7ljJGGDSalkIEAHBlZIbCWM7naeUSDNjqCzaWZWOAy31TST4A8/WEP0Myz7lCQ5AIEVBLfp1i0uEGgAmfhzuqK31T33rh+Nmu8abNxS0D5tUXFwAcrC546UL3p39/pu9c+/tnuoYnF37yylkAaMjWX5qyeiMxAUmixKqT8pbTUotTUid9Xq5LsE2voSMUAGyvzFGKBGOz9st9U4821aK1dvFXm6dVic17CZ9XplNbvAEBwVuzXHESe369EMGO6tzuseTSYNwQQbpM3mFZsYWPMG4ozMJrtcbg7sZStusdK3k+DNJTZLMeHwDsr8g/0j1+eZ12knKCG7J0z57ovuu3J8edHu/IpN7l+ui9pZ95sPHBhpKH6stO9K5BPWooz56cd+z9ym9+c6j54W3lf/3OJypM+vQUWYqAnyLg703XMUUYdpflNI/OrrmAb+OW47Y/AIFIDAPwSEarG9451wMAm0x6AHi3fbipuoD74dXr8rrWzJpIIgtZfUGLRKp0Bfonll12s9ObqZK3Dc3u3Vi4VhsfClyyEAJoGZj+wqf3fnRvTXqqMtegTeFJHyzP5JOclN8PoTR6jSuZmzzw3PvN5mBkX3EmM58L7gCr3B+NJovE3RyazVYBwG9bzZ4p58mW4VfPdNs9wcH5xb+c67yrsfQm7jjrKQsFIjE+QeRyvLhT7SN376gMmgyPbKosV+mKlamTZtf2rOxylY55oFWpwtyldSPLbN7uicTiaakKPsETEPwhmydfo3IHYplqpZAUMCLfOqHYC+GarDWSYm+ki9U4O76w1WQAgAWHJxCKHr4ycM/GIoIgFtx+rTyZpM7FdW/xDFnIFYocH569M8+wOScNAKJ07C/NffX5mZBwBgDgSv8UK/sTjEc2pKb1OW0AsCkvPU7RV4ZnmuqKz14dGZpePDc6txCKlKnlCEDEJ5Vi4anBqTGr87mjLZ9r2rSrMJPRncQJ/gx3PPMOb0GGljtLXNuFa8CRCT43rDpMZzASpegzows0jSMxSiEX15eZDmwumZyxP7ajUiaXFOTqn3nxFKyFhsLMKEW90ze42lhkR9XvcLy0v/bpEuP3a8s1k85wLD51oe8bhTn/XFn4pZLcR7KNUhqKNEpYSb1YDebdpx/ZUZCp/d6TB6srM053jlY//pNPfOtF35WRlssDdmvwD81jI/OOTI2CzyPZIYWiVKpcxG1kvS6SMO/yXR2f67R7s1UyZsYWnX4MYNKmMHLmJ/sm593eHLVia7bh5YScS1maZs7td4UjTEf1iQJezLv8RM3jC2ML7dbI6yc6Xu6bqsvUIgAEqGt8ngkJYgCE0Kzbp1NI2a107uDVMrGAR4zbPQDQ4/T+ZWLuis1plBJ/3ln74zvr07eWHrnUf6Xf3NY98ewTB7790K7TfUtBHoa5xLgr7JEyJ4tHJJPamU7RqrXHSqbu31TIGnNVRg2Ncde8w6CU8snl9CoSoS1FWYCBLZnMYM3LjV3AzMHyCT7BERrCAJWJLILtpTnHuseYBkmE0lPk004vBti/qfDE1RG08tZBrcVQqivIwHjJTi3QKU9OLjRbnb5Y3B2NmUORcZvHE4wCAA94MTp2rHX43144drR1eF9d4Tc/vX9PbcGbZ3thHXz5rsafP9LQ8buvnPrpky9982MapfRK31SlUY0AWsxWTyTKHQ+Pc23CSrkhvUxCYrzoD1EY768rOnSmG5vtz5zrdoejsP4uPjdEwDppWpmYT5K2VVqiDGoK0ztH5pjnzBfXbDxJ3JNFo0l/iQkRqOXx2IpfDRHJj9Cx9YYKK4n7m1byfADAIJJZop4Zl3d00fVS81CUJ/vVsatrNQOQ5NVQ9LDFpnA6p7onfvjkwdP/8eRD5dlqqYgg0Ob8dCa4t9qDevyuzYWZ2vu2lTeUZ28ry95TmMH1T5jwckNBJoXp9dyb27i1uO0PwKI/pJWLrWGfmic60Ta8t6E0VSpUiMlzvdP3bSq53rdvDXrmHRV61aN7qk+0DT/3x/OX+qcC4ahBLglFY11jc9eWOPzwONo6/MCuyqcP1rOvHB+eKzfq2H9vrdIoF2zyAEMWGlx0l+nVoXiEiiMCLe8yxmK3xh/4Y/vICxdH56fGX33mkw/vrOqZWnj1VNf3fnLiRMtoWY4+HI+E4hGuAOu1wZgRa75l94fSU1ZQtFtH5vY0ltxVkMF4WTa3PxCKZSYchgH3QqkqORJ1Q2YUB62DMztq8hiykD0QDsUoIUl4Q1GZUMg0JSIFtmh4ZMghFyaToG6iOwC4NGXdlmNg2A6tQzNGraJzzlaTbWTakl6vqjTibJ+vBp8grf7ga90T95ebFGKhWioEgNN9U3dWFwapKPdbrOxPkpsNAF84sPlY99jP37zQPTb//T+djHtood3bPG1lfoYVQsGcJ/CZ3xwuMmoVIuGrHd1SBIQ/OmV1xOg4cNScBqesAj6pUkjWHG2SgY4T0i504l8Gwx6HxRmdcQf6F1wHinRFaZrSdH0gFp4Jh85fGbp3Q8EnNxacsbknFpzr0bLv2Vh8uXsGY7zmMC6brRuaFCMAACAASURBVB+vLtiRbQAArVTsdAe+/PC2snRtsUEt4/E0ImGdViUW8MR83mqPguvbsNi1If+xvTValbQwT/fdJw4++7m7ZZsL33r28d88/UBOJPhez8S5/qncVOWr7UOsIJI9EFZJhCSnKFUSkizFWOJYzg+Yg9HYoN1TrlcxxPrhycWdG/IYA31fVd6htiF/NA4AVWkaBNC74KAwFvF5aSnS4QVHnkzd67JhgKZEoVnmwXByLg5MVOQbH7ijvk4ta55coAEITL9zabC2NMsRiboi0fMLi6lKGT9hLCbND4mQUSkbWrB/u31w3BuoTU35u0LTnZmZgNCdJdkPlZoqizOeffXs/rrChjLT7srcw23D7BeTZpW74Jl3Q3GK9T2YV+hV2wyMS1Bflk1juNJnxhgCMarBpL80ZaFonK9VzVuCPU4bRWOc2Iw/0b22RZgEMlHumuk9S5Yy4LJjzn5/Q5auc95RmJ6KMVwemWHeMiikCIHNG2hcJQG0phPI/Lu3Ko/J8i/Sq/5gtv5H38TP+iZ+PWQ+Pm9vxvjHw+NTE86fvXvh7n/+3ZDZum9T4Tc+vX9LeTaJEAK4f3v5ybZRWAsPbCoetdgNGkVaqvLRvTU/fuqe41dH5h2+aqPqxMisNxQJx+LXcI24LkFZmnbG7YtR9JbybAmftzjvuDdd90rXGKy/i88CMXr8ic37NKVsxuVlQwRcNNUVHb68vLkO6zeeJO7JoNKoRgh6FpxGmUzE5yVlFSMEDQUrOGNcrBYePTxgHl/0AsD4ord5YvG/jo7+8PjAnp8f+cHh9vnu4b80961uhMGO6tz3rgxyCT8CY8qzn7trR2UOSaBGXZpaLrQFArvKck72Tqz2RQHgvm3laoXkvm1LhZWSCiNkKGVWR2jS79qcn3Fu0Ay3KUN/e9z2B8AVDKcppUaJQiUWvna2d2ttfq1BbfUEu82Wkow1avFy7yY3Z0WtxpEes14t2VRg+OYn922oyzrUPPCVF46GfOGTV0feOt/Hlh35G+F051hcSHIjBu2zy8FNAGgdm2dLd31IYIB+l42bPJCuVQBA77R1X1VBikigk4qBUe7n2NPx+IrcrxvB6lNzasp6R1Xe9gKNQa3I1KdsKMooLc369lM7n35ke/fofF1JlpgnZB6MV+CJ+G86ecAdDKeIV3z30LleJ484WJ7N/Ns6NrdiSleZYtzx3+AyG5uzZxuWMpL7Lc66TB2B0MLKAsmjc3aF5OadgaTkgTG7J0ctG/c782XqiXlnSa5hxulpqs5f9IWMKckZq2viGv06wv4/d44+XJWrlYpFPFImFABA56S1NF0PnOBA/6SlKEtLYxyMR6R8ITOR5WodEyLQyCVN1QWvtQ3x+TwxSX7/zqqHyrK75paWt04hudAzbgvG/uXtqxkP/PtPfn/R6w/96Wj7o9988cH/+6cfvXLmrfM9kzbHiMXWO2pJkUvWvF2utq0ZIM6DNbBOjs+RIfSx2vzPbK8U8HgqmVjCEynF5B31xQqx8EB5bpFKvrEm7/kjK7blWLOyvjCTREuJxeyLrOk24fRlKqXMYBYcXkCQqpTevbEYECIQIACLN6iXS1aba0lgj4hEaH9d0YmrI4VyzYjPsbs6r0CfUppn3Lch//VnP14A9HNXh8sK0qQkj6kqCgDTLl+mMiVKRVd3QSIUoZKdBPZ2+kbvTLpqqfohgdCIxzE6YasrygQACmPGYEpLMNAaTfpLU1YMEKNpo1LGJ8hFfxAAQvFYQ5kJEdA6OA0ABLPAMJ6xuz9Wkxkk4d7agtfPdr/a3PO10726zNQvtA/+pH/8u90jw25fmLd0etc8oTqFVCIWHkzX3Z9tLEmRMz4wHyEa8F2VuZccHu4FfM+m4lM9k6xlTGFcptL1umxorQUvXimeRiLEiEqx29hxGsdpTGGgMN67qfD41WGEQCYgq9I0GEPPgjNNKRXwSAIBj0BRio5RuK4ggwZ8cWia23KSHcyAwlhAEHyCiGOMASQ8IQ1xisZUotNinZrCMOXy7yjLPto5GonTzLvpSvm0y0djXFuU8cb5XrwqLJAEEiFmVJeGpwUYGSyhqf7pA1rV5wqyPpufUR+h4PLsyyc7s02a93/w5JP31zeUZ3MHvLUy90zn2v4Aq6rE1HrTKCRPPbD1+UNXcDQeDMdQouAGC/bC4dJ4mMGLeGS6UjawYAeApx7YWpWftr00CwC6F5wAUF+wZJgyYM1Tth3M4fcnhQiSKEN3NZYev7ps6OP1QgQrxT1ZVBqWVP/XEB4l+FF8rRBBkvBo66z9X99ra/yPQ199q+XU4FyWROAYmeLZbP/+QP0f/vWxBzeXne6fXLOdNQk/OwqWEiB5BCESkBZvMBSNHajJZ7IvVhv03CBDkupRpkqx4GHEjvIPtw+vuXpv49bitj8Akw5PmoKxXfDR5kEzFb+jNFuvlJztm1xPC/JDLs2kXUyM4arV/pnaYjEpGPe7Gkuy//nRXfnZuu+9eOq+f/l92d8gOJCUJnuqbTQrTSNJ7OY6Q2GBGIoUy4qBY1ZHvn5FoeJbhdMdY0zB1yNdo2IBb1d+GjO1rlBYybGn4/FbsCsw7fBU61JscrHDFyzL1NGAMYnTpYpP7tuolku4SqOMVyAgr7O9DeubszZfUM2RdJy3ezzByKVJS0FCsHLM4sw3qNkPCMl1663cuLF+pmOsLHuJ/zDtDmSlLJmG3ALJVkcgqRzyjbe/Gq0ztjK9GgAIhM51jZMkcV9dSTAa84YjCtG1XCkW17iU/nRluiJNIRUgqYiI07RMJMAMha8qX0gIQtRSGGfO4aksMISpaFJkgHUJGgozpGpt8Y6NX//E7qs9k0xxaLZCWf+s7a7qnO8/UF+wtfrRezYpZaJ/uLv+ne99+rdffbAgQzs6Y3/0Gy9+7Jsvf+kX7xg1a2glrQcSoXhi55v564mG7GFft8VBkgTJJ472jmvVshhNB8KRdy8PPLSrCgD4PMjTyE9bnU5/6OpKYw4SduremsK/nBtaM4ugZ8GZq14aZOvQdLpO2Tlnq8kxMN5mhIo5A2H1KqVRLjBAEoG+vsxEIqJlwAwA7w9O8UkiM0VGYyyVCJ55ZJd31vLnfnNBunrG6cMAM25flkpOEmsvqDjG/JVvcdde+8CIPFWtpqF5YoFxn860j22uzCQQKSCISYdnS1Xe0e4xplxuVZoGA3TM2ZnN4wyV3OIJZEuUlqA3GI/c2Vj8xvmuYDwSikfC8cis283j0XdUZZsj0Y5QcMeu0tdP9SiHFj6+pfRX9ZVPl+V9xGRIjVLVSjmBEF61N08kTmWxVoUiyzci1tyvTtPUGtRbNxW+dn6J07KrLPfKyGyUijIfAwCasxjY9rl+V1IYgUSIh1A4ToXjNI9APALJ+MIIFdlcZkIArf1m5jON2forZguBULFOPW8JMonLQh7BI9CB6oLj3WMRio5QOJ5YLUm9s/pUFI0BQ5SiKRrnyNVD7kWSQDwCAWAegbZl67stzuJ0LUKoeXTGH4/74/HxUKhrdnHeHfjRK2d/8uo5pkzHtf1MAUHsq8x7/nTn4Ky9xJgSpWi/N/jrdy7f/dXnF+ddf7+/dueW0tJsPUESBEqkVSRGvrE4QykVM27eauyvzD/ZM44Ss61RSD7/kS2vnuis1MgvmhdTZclrnssaojDmEfw4HWPWkk4uAQCbL8go/BhSpA0m/WWzBQCaqvIPrSV3gwGKUlIH3XaCMWpRgt+vlFl9yZKgDHbW5F/pW2HlrxciSBL3ZMCq/utlUoTAFkjupXH9aEZSiMAdjoSkpFoj9E/M/Oa3h+dmbLvuq7n703swD+8oz37qwKbm0eXaC0m4NuFHKRXOOH1iAX9PWe65dQoeJwmPVhrVbXPLqkcMZYhi9KnWqXZ8G7cQ/9v9gRmXT6eQTATclWpdx9D8vTvK+q3OfK3c5QkTCF2DIYOuSXW4cQTjkQmXK44xQRJxmkaAytW6MY8zT5fywPaKwiztwca/LWdp3u7hEUSKYll9csTh3pyuv1XJA9fAvN3j8gXzM7RzTu+UzX1u3l5uVEXoGKxMHgCAWOw6qcM3gv4FZ5FaLpGJSzK1ALDg8evkEgFBnu4a21V7M0qj10geoDDmWuGtgzMbykwAoEsc1OmV3maYWkEDxR/8ypy3e1y+EEsta52xlRnUi/6QkaMsGaPokwPjpWlrRL3WxLWdXps/hAGzYZCjV4bODJvrCzIlAv51kwe4WNMlaJuxy3gCHhbOBgIOfxQQdgUD73cOH6wpQAAIgYgUBOMRjPGA2VJmMkrWj+RgDH/++307TUqZVOTwhwYnLdUG9WWzBQHMOX1aueQL+zYq5MIfPrpp2h8nSaivzDZqFGmpyvu2lX/9Y7uv/NcXv/zw9gytcnuiqvTNwRIMZAhTKSDUperfTZr/ND+fmS5/e2Dor92jLou/JEsDABEq+n+2l5XrFI8crD3UMujw+0MJDhvzOD088/OTPa/12N7oHYGVXgcAWPyhLJVs2OPIlakm5p35Jt2oxVmdm0YmWCiLvpBaIoJ12EGw1tY4BmiqKzpxdSSFFp0fnqjLWS7G8uDmUp49fKhrzOoNeMLRgQWH1RtQioQIgBEa4nZBYUwk4iTcB2Ntzzl9GGAiFqkrzjzSMnymZ7xzaK6owBiO0iRCXQ73KauTxnhPee4vE/Vct2brm81WpgO9QsIjiEV/0B4ORWhcW2DSKuW9wwtCUiDliwZnnfsrCgnEi/jC/1Cctz/DsKM6x+4J1OYaVUJBioBfo1IKSJLRRCISFc3YESIAxtA0KqUAYPcFmePiTtSu4qyhcHQyQfTaXJhBItQ6Osf6DCRCJSlaJouAWfBJU809I0xAIE5jIY8kE2kGUZqmMAhJ4o66ImZ/N07jmvRUhFD3vMOglAp4JAbgJTyuhsJMhODq6CyPAB6B2DYBIJbwBBh9KorGjP6YgCQAgZDgkwSmMaYwxhh4BKpOS6VpPOn2795Q9LtLvc90jX6na/TQjOVKPPrCmY5oLL5rQ/7pttFwnGa7WA/bik2BSOwrb7RkyYT8CdsvLvSUZRuYkltNm4oq07VkjBz2LO+jI7R8c9i9oeCdi8n0FWZff0tRJkLQnBBFpTBOVUof3VFx+HS3zRd4f9X+OiRcAjqRz82yhjBAeop81u0LRWOMwk+1UQOAmBDBPRuLuao7TKUtlFgkDBqz9BfNFgBIlYlpGvvCsdVZxQ1lJgKhloFpdoHha2cRrCIQ7swxvtI1fnxw1uunX+4ZmHZ7I1TM4vMPWp0tk9Yzowu1BVkvnO+BtcANEdSmyFv6p0ITli/c1+A9+t3ffuUj39pZtyc9RSoR2PzB2lyjNxRuG59bs50kwk+lUT1kc7Pv5ivU6RrptMezMS9NLha2jK3RSFKORKNJf3Z8OYUyR62cswUm/a6aHEPH1AJ5A+U4b+PD4INaHf/T4AyEmc0DiqYv905trcnPU8m1MlHr+NwtrMW7JoLxCBMoGLH4t5vSf2u2vDm1YA1FJjw+qytcnqW7p7FUJZfsrL5+deQPg5bBme01eY8linMBwOiiN87RZv7wyQOswYdXkoUu9U6GIrFwPHJlZHpDYXrXvHNbdhrGOCl5AABisaUtAdYEX8cUXwJey1VzhSK16alfzE2j07Wv9U50zzlkUn6Upq70T1XlLVs5NwgaIEnFj8WiP5Sk7942NrexInuTcSnGkjSl/S5LmWrtqrdrHsiaONc1EQhHO8dnRaRg0R8CAAFJeIJhBSfMcmlmOuqntPJluclrtH/drlml0dIU7fC0DQM+2TfRVJ0fiMbgBpIHro1Bm+vOkswTowvPj9gWIoFQlBKQ/CsjM1tLMumEYAsAhKho59A8V30LoeW1wYYIjCnSxxpLemYsBxtLznWM4xjl8AavTFkuDE/vq8hLlUukQp5YQDzRWKzTyE1qBWuZYYAYHf/onpoUmfi+reVJNjRr7XFfx4kFv3r2hhfd9xZn/aihsgHxhy4N01lZF4Lwpsdbk2cIUlFPNCAkBSqR5ImG8kGHvyzH+N0/n7kyYhWRwtZJ+6/PDn3qhXOXRhbuLc/KDXt//voF5tBYjDu8epkIM/d0BG+c7bm7vkQhFZlU8ghFCwgiHIvTGH/Q80IgtLnMRCJ0+Opwi9PblGdEAENuR5FSc7J99GBjicju+mPHhEIqGrW6pl2+JJocA2aiEEI8hJidcmZyGD4PAdAzbd1VkRvRKrpwHFdk/vrtKz9956pZIni2d/zZ3pF+l7dIIcrSKHeV5eBETmqpXs1DqM/iYrrIVCnMDq+ML5wL+hCCLeU5R1uGGeN+aN6RplJgDKkSoULIl/CFtSVGi9NflL2cIsVsfyyfUJpOMvLYXmZcK+gZDLZk6z3B8B1byo62DjOJE03VBSe6J6Ic+RoSLefqrva7IMGnYgMCPAJRNGbs+zBFEYAUAlEoHqlnagP3TvEIhAAeq867ZLYuBkImtdJmDfW5bOz9dn9VwYmecWZ98ghEEIggUCBGAwYeQrDK52FeQghy5Kox74pM0/os/e+aR/9stY8CXczDj2arv1ya91lT+pTZ/m+PN331Y7ua+6eYuATre8A6+FzT5q6x+eausWeeaHJQ+O76ZVW3LLXC5g0AACN+AMykJW76SSECaqV0VUNB5vlBM8XhLDWUZ2vl4hqV/MiA2REIJw2D+STXAGJcAiIRIrB6AwWZqWNzdgBoNOmvmK0AsKPE1Dw6u2LeEqeRTSyuMKp5BNFrcWIAvUJi4Ygac7G1MudE2wh3EaybRbBpha4rg40Z2hlP4NTI/CtXx//aMv+5ly9/6o/n/+mNq//6dtsXX2t95kjnP715ddoVbV6lUAQJK/yVk53f/v3x37xxUSkR/ejJg3cnyjtmyqSFCnGeWrngDfAJ3o4S08n1a5NxCT+raxWLhaTZ4QOAzfnp61GGuFURAGBn3rLqkUGxJKe7uzSHKURwg7+Gt3Fz+N/uD8y6fRqJGAAwhtdOd4v5/JosdSSKh2btFaZrEXXwh5i7MBVjPAFmU3PQ6qjOUP1uW2WxUjbkjfy039y16NXJpQCgkouNmps3xG8E57onkFTAvXm3W61N+Sb231uYPAAAQoJkdjqDsUjrsFkmFjb3zZwfnqkrMh0szGDSc5OSBwAg9kH0hdY0xaZcPrVYOOPyHesc+WJFno2iJpyuIo0GAM62j29MVG9lcd3KA7D+vckXjshWlpJ57XinBfCuRC/JyQO3AifbRqoKjHZPAAO0TVo2pKUSCJmdXm6YZWjavrlgOShxXYs/CdzkAQww7vCVsHWjRmYJgrirphAAbjx5gAVrwbCYcPoEPOLjdSbbhO2FcUsoGj/RM4EQaijMYIZNIMScIIvTxyQTrwfmB7uhMFOjlAoE/G3VuX892VmWIv/JhZ5DHSOVWXqpgJ+vTbE5w+FYXMsXcueEeX6ybfT+xB4YizVNOi64fgJzgGNO7+YMbalKUaBXETR+JEX+Ca0qbdrZ1FimEcoFxBJnrCZdKxML3ZH4n4+2f/mvLQd/8V7zpC1bL33p8b078gy9g9PPfeleg0I6NL3IPYMTTl+FQU0AQgjN272xOPV+6/DBmgI6sWfsDISZHe41sebhsO3vryt65UTn5RHH70602JlivTTdOTL/6J7qv/7jw30zVpsnEKModyjCVh4Q84Rh6kYv27bxufpiU1OK9OnCrF9uKt1el6eM4x/trv1aVcGTRTkFChmfRjlquVjAu6M6/0z/ZJSiBSSxIy/t7PiSuZMqF/NJMhiOYYxjNO32h1452XmqfRQDtI7O5utVky5fqU7FHCMCVJGrZ4930R9K48wMiRAgxCq7c2dGnyhXTK4KsNxRYjKoZO5QpG1gOkrTjYVZANA6usIaK0vR9jitFMa8RDE7xnQOx2nmgTEgBOwrjAYRAcBDBEJLZBgEsH9TEcs+V4mFm026v3RPaGViAX85FSFO48aiTITg8sgMQiiGMcY4GqelfIJHoCiNKRojAIpOJnGRCBGIJyRxPOGNAEB1Rqo3Hum6OL5Jo7zUPlGt0eklovdOdz+ytUwsE22tzAWA5r4p5qCYb63pFVAYbyvO+MK2/CfvrjtQmfuxDQWXpqyQsM4NCqmQxxPR/AH3MmmEO9V7agvOdU0keQIMmqryD7cPJ/nnP/j7gwsLrjSp8NnTXdwxUBgTCAkIIk+p4dL62ShBqTHVFY4WZemYJOYqo5oG6F5w1hdmYgzNo8u1yVbvTCGALSb92YkFBGBUyKYcXv5awqM7N+SfbEu28pNSFBisGSKoNKrnfUErUDgn5bGNeXc36p7eUfJUff5GtTg/Hh48fXWzlPw/O0rPrsP+ry/L6hiZ3VaZ89N/uPMjpSbeyiQWADDIpdNOL0Jod0XO++tkbsAqwk9SrWKJkB+NUxZvYFdZzqm+tbOKuVURAGBj+grVI5NKYXWEuIUIBLcpQ38z3LRN+z8BgUgsHKMWor5Kte5E20hJrvG01ZGvUaWIhYfbhpNo1rcK7mhALZRx6Q0XJuaZTJoqjXJfWsrnCzMyBHyVWNgyOL2ndoXa6YcHXmXpHrrQV5xn5CYP6CRinXSZPnRrkwc8sdC4zzPu80z4PeM+T16G5tLg9PPH25ot7vurchEAxtgRDCpX7jJGojeq+bMeRu2eDRmpNI2vDE3X5xjuyjFIdQpL2CeL8ER8XtoHL+9wDUvQ6g1y6zHN2z0UxhNOH8vtTkoeSAJrhH0ge31i3llXnHWqbXT/157/zcU+5A9hmubW26Joes7pq0+Iu1+78fXeDVNR5hGhomfG57aYDAAQjVPvtw7HU0WPba0AAGcgdIPJA1wkuQTOYCRNIeGR8I191e5h+1+75v7lpRMavoCH+GxwAGM8b/Ol65MdZjZEgPFyiAAA9lfnXxgyZxtVSpEgEIxQND7SMbyvKg8A9HJZIBo7OzqboVpqjTsDXWNzBRmpmGOaXNsZWG/2OmcdZXoVhfGmvPQUkaAyQ1eXmyYiyYb8jKRPbstNOzSyYNxQVpmCv3yg5Ok9VQ9VFvBJ4lTz4KM7Kw9sLHr6ni1nO6b6nTZ2SPPeYLpCShAIY3x1aKY4xzDu9uTq1YyFFIxHveF4CqcixGqLlvsiTjwAgAZoKM9m0l4f3VX1o7+eDYZj827/y2e7G6qyawqMRgL+9UQHTyjgk6TFu0xlJjibuElzkvTvoY4RCZ88UJi5wajhkURVgSEYDG8szFAJ+RqhoEgujUXjqRIxBqgvzPSGot1TFgAo06ukAh5b7DZLKZ9e8PeNWr7023e+/9KpkZnFn752bmh2cWrRLRYJLL6QXi4GgCG3PeCMlucahCSfOV53OKIQCbnnlMaYKZG2+kRnpMjnXH5YxfCpzdT2On0bS01HmodoGqI01VRdeKJ7wh+LMPY9Yx/TGDCGcJyO0zRjcDN/RTxCxCN4BBKSBIUxj0A8EkUoGjBEKJpHLJGOBKTAH4s0lpsQQlf6ppjprTJoEKDhRbdRIbMvhvtctjiNCQJhAEb1nzFeYxQW8QjmuYBAJIGYgbGHxjoAAoKQ80XjXgeF8dIywPjBmiwfL3Kxf/G95oHj3WNnO8cQQturcqVS4aInsGdjwbHEHjbTTlKsgGvEP7at4tKwmQZoyNb1LDi4xn22Wjnn8gEnRAAcun91YTpJoM6RuTWvPobMw7zFnBqdSvbDx++43D1xfGy+ecrCvE4kysAhAB4naMMCAQh5ZLpS1mqxu3xB5gbeaNJdMlsRQFNV3nGOdhO74T3ktsdpijH3S/QqMZ/H2LWmtWqTMev/jrpidnOduQE2VeUf6RxdzbZPqmrM4GMVucMz1k0xODw8ff7iyPf+cPyZF47xKerJO2qn3vi/v//qgx+pKzrUNghroamu+FLP1O7agvqSrLsqctpW1iperk3m8gLA3orcM+tnFcP6tYqLU1LTddJJpycUjTVV5a9Z0w1WVkVYL6t4V1lOy/g8YIhSsRj+wPoit3Ej+F/tDyz6Q3qlBAAomu6fsGwoy1pwB4q0ymPdY3dv+ltJ+rC7gAysvqAzGCkzagCgz2krUGpS+PyqDG0wGjNbXIVrCRzdQhxtGdq5IT/OIa+PONw5qhUG1q1NHhCRAkZuv1iRajf7Mg2qOZuHFAv7Fp2LEX+fy9Zls03afdqVGWDhcGTNrYU1saYa45wnqJeJ+QgisbhcLHT6Qnt0WgC4OjxzE07XtQcTiMZU0mXDq3Vwpq4yZ9zhzU94HdzkgVA8gj/0ZThv90hE/M/dv+XbTzR945N7+5zen79xseDRH7xzrONs5xgAUDQe9jr7xq1FOg3crDMAACJSwDyumO2IJE5Ozi0EPYNuhzng5vPIqlzjkMvbb3Hobjh5YD24w1GDQgIAcYp6oDLzkULd/JDl129e2f7Uf/7wpTNHW4bn7Z55u6d7dH5HVd6apwNj4NoMdCLHzrzo2V6d1z44vd+glqbr3+2bBIAxr8OkVkSj8W3ZBuCQyBmc7hi7doHwJNt69XiG3HYpEon5ZKpUJCAIdyAcjMTUMvHV0dnaBFeNQASNl67ETVlao172nYdqPrGt5vyFYYbNwmSRMj/AW4qyRHze0PTyr3j73GKJLmXEbc+VqS70Tul0qgkvLstYjpxYvAHtqsRKBqzJDgk3AHEeDMnnM/fU59k9lXr9gT1lv3z98td7RrQZ6n/qHP5R34SkwjTn8Px6etYgk/jDy1t3Yp7QGw0lmW6r/RASoTGLo9vhK9YuFUYQ8nkGlTxGxxkZU6VYGIrFlWIhM5J7Nxa937FkepboVFdnluIkY7P2X7x67g/vd2zdmHvmZ59747t/l21Uv3WxLxiOUjTusTgLNEtMsOZBc37G0h4HnyAWPAF14oJlpE75q5wBMkFMNyilAGD1BgEAY2AZPjVpmtQUKQZ4t3lQSBJCktxWnAWA28bmAEDEIxACIUlUa/R9LpuIe/I6hgAAIABJREFUR/AJgrHIgbOhzjwhEPLH4jyEhCTDwCFiFM18EmNAgGmA+lLT2a4JAiGMgUegxmx968yiTiEds3kYlhEz7obCTMBweXgaMIh4KypnI4A4xjIBuSa3R8mXYkT5oxEa4z6nbcRjv6cwt0Sr+tLesvSc/Af+P/beO86tq0wff8+96l0ajTSa3nv32B53J3Zih8TpQAIhgSwESCgLLOxCKAF2YSkbsiSBsGFhgRASEtJDEre4lxnb03vVNLVR77rl/P44ozsajcZ2EvPH95c8H338sTTSufece3T1lud535898/TbvV+4batcIjapFP54Yn1VAQI40z/NpGQVINlmIc7xGC8rLjZVFiCEzozONuRkYYz77MsWpEmtkK1KEQCACKEgy9IIravMP5tJDwBJMg/5v7DN4hx3y/Z6NL7wkyO9RDWBkve3Yd/iiG9RQiF7JBDnEuQBAEEmggFMagUG3FpTcKrfSiPUbMlCAD02T0ZWD2mWUqFd6ldIAazPzyaR8hyNcjGlEQGT9BkAYEdz6Zvnxl7pnhIqfv7p1LBfon34L0dhJdL6fy0s+l863v+L54+dG1945KlDeruvpMD4o09f9/pPP/0vd+y8dkOVlBYzPAOrBA+puHHrEtUnjecjwKiSO0IRAGivKOiaXtH4LBXtdUXHepZ8lTRrnmDWG5RLxBvL8zrG53EmylBqQwYAqMrWdi0sLZE/lgjHmXMzNlco9ujxsUND0xJaLEbp2YwPcEXwXg2R/6dhC0USIgQArmD01bPD66sL1AoZx3E90/aavIsZ4hc3p94ROqYdOOV2zPA8KU2jkIj3d460VacHDt8jEEBqh/PDXRNbt9XelpIJGXb4U5rbXAHxgIC0RRuZcRaadLdsqe/3eIx6Y1ihfGEh9Kdx9ytzgQTDKlfybfx+/4qxEEKrrC7hacaeAJ2zzvocA+E+URTyBqOEJ9Y/ZS/PX66kdJm4yAbwhmNpFO3xucUdreUVyeRA2pJOBr2CoCIV72iPkc4DCZ6R0ZLt9cV1lqx//sSuqnt2fvkj25871qfZ++DHfvzM0d6ZxWA016B5185AKo5P2hUa5e9n7c9NRx88NXoGSeRK2Q/Hpv84PjNKRxTvkKROIFzTBX9YL5MQ3u2M27+lIu+6DZVF9Xn/8Zm9J3/1hdaqvHPDM5/44V/2/evv3uoYMagUF28ZkZoi2NNcfmzYWmTRa2USnuHbdMo/do+TGiYNedlxhhNTVNoKLCwGEKBco1Y4vYskB8gbhL+l2r7DLl9bfjZ5ZcLuqS8wvdE11jfjWFeawdmmEfrsxpq+BX9tsVmMKFLk+62OkS/ctlUY/JYNNUcuTPd5nADgDEe90QQgDADH+qb+77Wzx2z+8Y6Bmtyl+rPRBIsQZLwuqdNByQes2gmvTS5I1YovvdV5YsbZWJ4z/cq5T1/V/PD62u+21Hx3fd06g3LogrXEpPNFVxK1M4Rf00cenHNVWLKmfKFig5rhOAlF9Y0ubKwvRMkorzcSk4mXwihRjmuvKMCAiUG2pdj86In+Ny6MPfS7t5451F15Y3uorbyuJIei0E3b6jfWFs0ueFqLLRIR7Q7HSvRL38FjXVNtVYVk20QTDIKlleGTwWMA4JIpAuE8hYXK06lmPQFivtMIieklV2FzkenFGUdtqWV/51IVmr3NlQd6Jhk+IXyWfIrMi+Uxh0GWrHOKATBAjON5jHVSsfAenPwrieUrxbIEl7h6fcWrJweI6Y8BmnKzeIyPTNs7AY4MLQwka5vyGG+qzD82aCU2elpOg5ySKJkoEOz4OMcjBLlytTMWtAZ9lVpjrT5bIRZdX11YZcl69f5rd7Q23HlNa5ZGwfK4wKCZ8QbkUnF7XdGR7kkxhYQlI56AlKaIY5PqeOxpKidR9k3FOaenlxkmAFC0KkXAYcxiTFod72gpezaF/JMKwVIn0yT/KqUSlUT8h29+tE6v6p51khkO+xaJBV+tM5plKk88LqUlwkMtVkQTUQbjqysK1Eb1iWTw+2PNZadmHLZAeHtt8Rs9Y+S+MexbHPV7qnXGOMdIaHG1zjjiW4SUXgTZKjlFIX+EiXPMsG+xUmsAAI7nncFogsd/fKPzoTe6/+3Fs80/euH2Jw/+6LXzznMDHsSeHklXEdy4pe73f+/8+V+OXP+N337mp8+Nzy/ef/3GvXXFP7x3zzMPfuzuTS2J5ULQy0j1kdKQaoXvXNWruFpn5ETchMsnpkQ76gpf6Fim9KRhz4aql08s+yqNFkNqtkFQFZNGBJApXJLm7dSZ9W+Ozv9tcOZ7r5371B+PPvr22INPnX/gqRPx4ak/Hr4AH1QZ+ofhfe0PTPk9R5yuv055v3Kiz+YL/Xp8PsbGD/bNPHuyf61Ko+8Rq/slHZ22XZ2/zMbBGC/4Q9kq+fyiX0RROf8A8YCEpgX76dC5MV8gkqVeZgcdnZu7pWrZPbiy4oH+FDHx4LSjtSpfJKbFEf7eHbXXZGvvry58qKX0pgKzWZde2DEeS1eDvSOQItDRBDPp9BQZdUqpJBhPKKRiADjWNblhVej3csQDa8EbiZlTijUBwBsdIyqZeHeSqPOPEA9Y7d78ZCXTQ2PzM/7wwVD4Vp1appd84roN19y0Y5gXP31hor608F07A2mdB7rnF7t75mfOL/SenJztsYudiT0N5b/a0HBrkaVFrFtjjEuD2NwLgYheIXUEo0qQUjQyq5Ucj6tys27f3ggAu9sqv33PNYf++3Pf+NhVnUOzrZVr+MwpM8HJBmGbUlIEw5O2j7TVlOpUFxZcGKBnfnHSHzo2NhtnOEhaTnGO6RldIC3zIMVjWY3VYe80jC76i/RLsopJpzdXq+qfcdq9ocZCs/BBoRMtAKzLz5aLRNPe0PbW8oefPfrEy6e/eNs2o1bJJfk8QoqAQqhz1uWNxPePzD3bOfnggf44ww6c7jWUGoiJGWCigRiTpnEHADpT17DVEyGz7rd5bt1WL7c6r68qKM3Vm5WypkKzXio2SCWbLcYH920V8/zZKbs/lhBYahEuoZeowkyGL2/qAUbt7saSXFswWmJQUxTF89hhC1bkLnvpvmhcyGxIKAohuLap/Im3Ot/unni7e6I+xv7mxVM7Wsuf/Npt/7Wh5qGWqhl7pNfrpBHKN2mP905dXV2U4HGWQkpiww5PEADnGpdura5QNEejJCrnVEOWJoHkZKaIw1hCUQDA8linlPMA7tAKnSiNUH1OVpVe1dJQ/NejfeSdW6sLESDBICPOQL3e1OtxxjkeARALHAMwPBZTKMHxJC0AADyGEMNjADGFxDSFAAihiFjVNELXb6492DmKky7c5uKcN0dmWZ5XYHo+HPAnYmQWuxrLX02pkkmuL5vMIZApC9weLoXVIxeJeYzylFpCYeIwXpdnujDvKjCof3Dz+hOjM8IgRQbNnDe4q63y1ZMDXLLFMocxxiBNqVMnohDhTUGy/NGZUVK9BwTSFwgpAk486HPxGIRSSEK3uNt3Nh46n5nRLpTooREiHRWUUjEtppFUdOfm2ifPDaZ6AuQjaokUpex5MlMRTYsQKjHqqspyjiXZQVqZpL3Q/N1DXZW5xmAs8Ur/MBmqwWCOc0zazROlNBLO06oPjFh90cT0YuDwiO34sOOfnz/9tRfO/M+5qX03brmvueCqfH2231ccjzxyx5aFF77ztRs2Hx22wkrsaC7tGp3Ly9Y++Y0PkzzA1uqCb167zkdTAFBpyrKmRc1S7ngZC4+mWuFtq3oVE1i0yjlfEABu3Vj79ho1QwHgpq0XUxWLaGR1ByMJZm9z+f7eCZRJA5CqS2YBjgUj9//lxIjPP987prA7qltyjnzvpse++eG+ZCvJD/CPwPvaH4ix3NYcw4ONZe0sts4tnj7SywW4/3y9yxuOXZGI+OXA7g2tqywUnkYSLAAopeLOodlt762+4VrASbNj3uUDCnQaxVmH1xdnfHHm9JyDArR/eNYZjDqD0WeP9r7SOVyec8XEAxJqOfUw6/QVmHQiMc2rRE6GvbulbF22DgDkHBZ49gISiTi51a5V4lNARou23+5ZX2DCPD4zOlebn+0Jx8Q0NR32vmvxwEUQijOmlAI+Y/OLU3bPzy+MyWgxALxyevAPh7uK1j4iTppfqbO4ZJG18yNzpI0DBjgyseD1s4NnZw4MO39zaKTXFXjwhpaf376BZsLXNxW+O2dgNUQU9a3rW/7rjrbnP7P7W7vr8mXMrW2VeoVMyvLNue8435IGRyhapFM6QtE5bzDHqACAcxMLm6uWvyYEd+5uUUjFFqNGIZJGUlIEaUwhWJki+OJ1G48NW0dt7oPnxnQy8U11xcen7Bapun/eGeKRXqMaWFjWFwLA6Oxiagbp4htQMM6EdxHziwcYsHtrTXpibJ0Zm6d49LeDXYHYxRS3O8osHXOu6iJTSW7Wh69qytIqcDKKTB63bKg5emH6vMP2uwsjDlf0mQvT9XmGT7UWimiaopFYjF7uGk5wzLA3PLHol4kzJAcSfObNlbYZaIRkMvFd2+qLs7Sjk87yQqM/HKsqWs5r7ajMr1NI/jZg1Srl0x4/j3GYiSnoTBHLlS4HBrgwaVtfnp+vUWAAGqGpkPfIhYn22iLh/eE4Q3JuxCjnMN5cWTDvDe796m9eONb3uZs2xfKydFkaANBKxbvzstXipZB7Sb4xrpV8+7dvLfrDjZYsAKAQGhhzbG8ug+Rt0B+LyyVikhagVzbrJSeZSh4jtqxMRBUZ1FZPMM5xKFkpn7D872irOuUJLAYipP4PAGytLjw+MBNlE3GOE3hBpL4+hzFNLZX/pxCQUDoAMDxmeIwAVGKKOAzBBEte55ZOReSNR7c3lZ7qn05wPDFhG3IMEkRNzy3O+SJcGFtDfuuC++D58cdfPDnvDrx0djm+i5OqZcElYHmMEBALnhCQAEBGS/JVGqIiIGvSaDEghHps7vaKfOD5zvElP8eiUTmCEYZhb9hcu79jJMiwdJLIBClgeZzq0uxpKj/QM8EDbrRkpfHXLRrVvD/EYSwXSVieEUYhVv7O1vK1GhFsqizAAKdGZ4lbIkIoFEuwLPfWnO2XQ6Nv2AM2LyN4AgIQALXy0gt/+ti66ht2NZ1KNgP59fT8sQlbr829tbHwzOBchWbpx5HBnCzZr0YQDTdYDByP3560//L44LMXZm76zYHHD45NuYOVJv1Nbfm//8SOH+xru62h4PWjvWe7xn7wiatf+v5d1zYWA8DNG2pWNzrYVF9s0CiKc/SpP1ipxneRVjsbCAh/ktLiBMfAGhplAsEKz8jzqdYZTVnyKY8fADZX5J9duxFBc8UKwk9atkGrlM56g1GGrcw3/flkf5xjEqui+6m65OHxhc3eiNPnWRiw/vS+6w79/NMfLyuIM+yH22tlUvGCJ0OBrw9wRfD+9QfckSiFIEchldDU2e6JRJyhbV5rzwi/4Ni4St6XindkNl0cjmAkwnAbUjqOuUKRXK0qGmdGZ11VBVdePBBjE3JaQlyCU4PTzVV5b4e9z0wt/Kx77GsdQ4/0TY66fN98oXP3I6/vfuT1H/zp0Jvjng0XXY3LBwJIpJQxPTNgrS02D845G0vzhpy+uqS+1hlcIcYlSDDvKTlImnMVG7VznkBdgckXiRlUcni34gH+ol+baU9gJhon/tV8IPLA62flOfpRBv/irZ6mHz7/jSdenxqx1VqWfpAyigfSNhi+jG+pOxAutGhltAQBeKLxH9+w7g+f2nlrc97Dt2/e02JpLciO4igVg2LDJfyQy8S421+kV11fW5ilkpo1ijeO9U67vNtrigDAGchw+d4REEAwwZQZNQoa5elUAMDx/LjDXWTU4pXn+VbHyA1b6i4yDjHi0qaWpVaU5RhOjs+6KfYXzx4t1qk4nj8z4wAAluMLdCpIssOJxfb2hXEhg8RhLKYQtUYqYK0UwbDPraXkFCCTUs7y+Pjo/H+fmvjNiyfHp51VZTlpH0xNEbTmZwPAhCd4687Gc8OzAEBMHA5jCgAlUwSvdI7NOCIt28o0lYZnXd5f//2sWCJSf6jJsKn2eCLxUPfob0ZnjngCoiQFRQCHsUokWn3OqycyaPeYVLLKHMNNW+o6u63iIDYXaJhk13AEMOP2715f2TPjnPcGA3FmwR+QJTNsacslXA7havbNOaUi+qqyXGLrOtxBsZgiddXImTiC4dVlTL95yzZzpfmWqxq31RX95MZNp2adhPpPIVRp0tud0X6vM8+gmWYkYYCHzww2mHQAMOxbtNv9pbkGokzAAN5ITC+XCFMmSQDhhMkuImYim8KMN2uUFELeUIxOsoBIEL05N6vVbNi2oep/31zqML23ueL186M0AilNc3hJXNtkMPd7HQy3VO+SGOIUQlGWwwBEMk/sZowhzHIqiYg0CKMoJKaQmKJkNN1eVwQAT+8/3zthYzk8OGXPYzm7O9gx7X78+bOf++5zt37nDw/+z+u/f/2sfdT5+FuZO15DMiJOYvmiTNVCUx2eLcXmU1YHxrCxsuDIwDR5g0mjwIAdgfDWppIzA1aliE6wPL3KGRBWjxylvaIAA3SMzrUXmd5O1okiuyJHp5r3hugk9RMnHwAACDWUWjRK2YUUA5SATGRTZcGRgWnBo4skWI1cWqdQi1yswcd9+4VTjlUFQCu0WYNeV6onIKUlCS6BAeQS8a7G0imXDwAmguEsiUivk//y6KBtMba/e1KYYyqjXThbCqDGpPtb39QFJprTkFvfbnno+ub7t9XtKM0tMChFFFWWrdnXXjPr8N2zt43ogoS7Vkbe/6b64tWqYsH4tqhVzlB6YzK8dhs1AGipzOseW1rGNJ6PAB5jdyi2oTw/EI2fm1hRL0tAGuGnxKDumHU91zM97PABQCwEJ63zn3nq+A9ePudn6K7pRemqXp+pJVCPd03cu3dde1X+I/fv29FYIpeIr6ooCIZYa8T/odaKjol5+IAy9I/BJS2N/9/CHYlKRDQAYAyD046Hv3LLuuuabtm9DtTim1LExBl+3q8cOmccE26fWa0AgH6Ps0xtCETjeqVMJhUf75lcV3VlDPFU4JQJHe2akqvkd2Wb9xllJneo98VT1mMDzPiC7Vx/sH90nRQ/cPu2HHEiV59OM7gimHP6MEJWl39TdaFOJhEadYXjK8S4BAzDvJcLQcQDA7POfIMmGI0HYglyuHcnHrgIwnEmGI2/aLX9pHfiJ70T3+sZnzk9tLEirzAatXb2GfzuT93UHlbSQn3MtcQD7wi+YDTOsAaNAojtAvyu6rwcjby5wGRUyWv12YNeV3lu1mIgUl+Q+ViCiXaZmHQH63L0pDgixvj84KxFryYptXCCeY/+AAD0LnhEFKWTSfK0KgBIcPyZsblKS3qeqm/SVlNkIuFbIUWwOjlAUG8wDXicZBflZ2lmPQFPPBGOM32T9r11uWdmHI5wnOX5ymxtvl49l6wxb1sMUBQiATnuUgVGUyH8rnMYy2h60OHdXGzmAYfjzH/u71HFfDde3dS6vvyO1qVbTZxjUn8jhTjl9jJLx5yLROJX9yQCgFs21JzutVYUym816x5qLnmkqUbL4k/d3F62GHogL+fB5up/qa+4pyy/BONSzZrFRmHlHli9H4ad3p3leRhgU32xCFGHL4xvKCoYC3kEm9IfZz7eVrM5W/1/XWM5ekXHlENYK+LhpLm4BOTFw/1Txxfc9ealYqBjM4sba4sSSTExAEQSrE4hE9af2Hm7Gkrv3dUql4o5jJPRTTdCiMXYolVJRTQGmHB6K+WcwmQ48Jdj8/OLLM8zLH+831qUq1+Mxd2xeK8n5AqHtCvLYQmmJJ3UECNACW6ZXg8AcY4v0KlmvUFiPQt/Ynl8Q2PJKU/AHYiQ68Xy+Kb1NUf6rCEmTjYnh3Gc4xFCKgmd4PkIw5ES+whALqLFFCLZAFZoE0ZRfLJpA8vjOMcDgJgSR7nENesr/3ak95P/8ZcdX3jssz9//s+vdUy8dKb/VG9NSc537rnmVw/d/tpP/umJf7n911+/LU+vJqQRNlnUSEpTcY7nMAYMFEJC7kII4bM8VookpRrtoNdFgv0cxk2WLIxxt829t6n81fNJggeP83TqxWiMFG4+3W8V0ctkJFjpDBCIKBTn+PbKgiOD0w5/eGdp7vFpO1kEHmMaofJsnYilh3yLkMy5kYcIgMN4Y00RqZRAwKXQnPY0lv29a7mOp0REd1g9r3VN3rex6r8/silMoa//7i130iVI/eBafn5tfvbzZwb/3jd52uW5Pl/34NbGhXj0953WeU/g5eQKEAIMTn53apIqgqvLcwed3u+vq/56bcnVMm197lLYK7Xw6B27muXSdPs4I+8/zewmEKg+ZpUSAByrXAJYW1WcSv1fS1Vs0ShtgTDDsztqiw8NXFYjgjqz/vXhmZ8e7N766N+N3376k3889ufDk+cvDP7sjq1fubbp/MQcZDLohRKo3/vUtdc1ld7TViVUQRWqDDUXW4YXFlO31ge4gnj/+gOOQESnkxhEsgPnRj+6q/mua1orjboPtVXlGjQ76oqFt6XtvHdqOV0cnfPuvYXLyQGaQnPeUIFevbDo53h8ZXksqSCTevlY/6sHe/7tsdf+/dH9Qbf/3+/eld+S952PXNPzv1+ZevZbv//Gh6vzDDdeuTpLqeKBgSl7vkkXSzBvdI8pJKLdSQq4LxJXrrozAgD7HvIDRDxgUskH51ztlfkUhayeQKFBAwBHuyZWiwfeC6YDQZ1B2W5W3VSkvalI++U6s8cTfP1AFzftfPSbtzz64C3XX1W1vjKfTZI00MrdhJdeXPHKJffbyKyzwKSL80yMS0x4vFqZSCLCC4GAXrFUSxsQGl9wF2dnpvVfziHS4AhFTGr5RNBTozWKaGp0zrWtqgAAvJF0LfW7w7DT1zlly9eraYqq1hlno75Jp7e2wJR2nqmRe4I0Z2Ctn40Sk37GE+AY7rpNNce7xqv0xlvqS7ttXl8sAQBmjcKXSNgD4TjH9I8vcUtSgVbFvAn4NVaS4bkum7vcoHEGo8+en9xVZowx7IXBmep8YyJZ2mvNFEFeNsYw4Qluby0nP7fkAzj52FxVqFfKWB7XZGkpAC7BahXSu3Y2Acu3l+YZpJIsqWSjSV+0igCZZl6n/mn1olm9oTyNkpQiyC/QDVud6yryKMCCyW7zh+Ri0S/uulYvQRccrte9/iHvMnUhFTglywEAg3MuBHB+wb2pyLyUDVgI1KYwkQLRuEIq5jM5Y3uayt/qGUcIEEKbis0nppdK+yOAymyDzRE5PTOTrVfmF+bIVfJ9X//fq776m2+fG5m2eX7l8jwyMPHfQ5OvzNp7uahYRMOqdRCecjwGBBKa4jEWeDU0QiatkkJoMRQRLF2y/Zpzs1rN+m0bqp58o5PYwVfVlZwcmQVYYukAgJSmKjXGyYAXAQLAMhGNklFzhscyEU08AQSQ4HiUrOXP8hgB0BRCCKQ0JaZQe12xXi3/6kd3/PYbHz76+AO//9btj//LLYb1Ff+0a51YI9Oq5dk61cbaonuv23DntsYjA9OpdjmHMaEnsTwWU4hfabXHOZ7jMctjjsckb0PWn8O4Pifr3JzLHgjf2Fb1Vvd4jOMBQY5GiQA5/OH1NYVHuydSF3O1MwBJx2Nvc/lr50fMWmVbfnb3gjvB80IJoEK9xuGPYMCphUcJaIRaqvIwxueG51INeuENN6yrIpb6kaH5O548KApHqrJVKgovzDoRx2frVF999OWMH0yFlJbE2TgAZGuUsxPOL4xMtui1W82WfdWFlUbtF6+uyS0ue+bUgOADQNJjSQUC+HhzGY1QhVZVb8laDMVWR7VbKvNSo/7krrUW7z/V7CZIpfqYVEpbcLm2qZQWJ3gGLqoqTqX+Z1QVgwRPewIAcE1j2RtdGZwKgrRGBABwVWFWO82Hz/QVREOf/eT6its2Wsza6hz9/jXqHQklUMnT1CpDAEDuYLvrlhqTfYB/BN6//oArEAUAk0I5MGkvyzeOL/rb8k0iCulU8jTxwFpWxTvFajHx8Kxzd0oX5BlPgGz6zqHZq9f9Q7ofCLC5A+Ys9c17W5///t2HHvn81+7crjXL6kyGTTVFgh/SbbXX5b/L6PXFV2xw2tFeVySTiqddvn5vqDRLAwBRNh6JczmZopgsy65+cTUymrZEPGDzh08MzShoEcfhUDQx5w063UEEYMlKd7ouLia+uPXMJLgKrfrGosJ2k6XdZNGxktJc413Xry9tr7pzY2O93uR1RUoK9MP+xX6vs9/rjPOX27DpIphc8DSUWaSUWEZLptzh1jyTCIkCUUYtlZGf0lK1dsrm3ViRId10mc5Ampi4d8FTllS6D8w6i2pzP9RaCQDeSMy0Ukv9LuCPJRyhqEpMG9UKAOAxnljw5Gdp6JU1QBcW/QCQ6jOnqQgIUicopAiKs3XWRX97ZYFBq3D6w/vPj3RMzQ04vRSCKU8QAAx6yYtWmycUG5l1VhZkw6rkwFr3BFFSxYgB+GSkEwBOTDk8kfjLPdY728paCrMBYHzaUZxnzJhLIcfCGDAGCtCOMsvZWVdVoQkAzvRPo2QBUMEE+dTV6ya7rAEuhgHODM9sbSyVScRGldysUwFAnGOcgSjpwr5s414014FWOTxnpu1VZr2Eokb97qtqy+YcPoyhXGPo9zoBIJxgeIxFFKWUUfuai588Powocd/UcoFCpVgWZmJ4JdeOrOG5mcWoSDM559o/aAUAjsfnhmdri5fLpPqicaMyvUwqmQixmc6MziGA1lwjAPTbPOSkLVolBeD0RQxqxT/vqIo3FopE1I7Wsom/dqhEol+2Vv9zXdmXa0qvzzdXcLLYGvWphCwB2UQUQizP00lmPMfjfL1q3hvCSXtdRC0lFoQUQcegFQDWV+RTCHVN2BNcgkIoxLCeOBNk4kEmluB4mYgGABZjhsc0tXRlOR7PByPD2VbGAAAgAElEQVRxjpfQS00JEAIeACEQJSsgiSlJnIvfsbtlzukrKzRwPNNcVnDv3g33tddMewIOf6RIoRPaFe9pLn/1/Ajht5DyQWQDMDwW0YgoE6IsRyYSZ3kpTUlFFAAoxdIStXbY52J5jDEEGa690HRkYiFHo9xWU3RqdFZGU8QHy9epPNH4juZS0l6KfGGZVc6AsFZEc3xda+WB3slGi4FGaMjuEUxqk1ohE9Gk8Ciz0oYm+7O5Kp84Hqt38o7qokffONv8oxe+9lLH4PGu1472/uXAhft+/rdf/u1E95T9N88c+dOb59I+SOoCoZXbHiWL8G5uKv23nGxDsvTe7rLcAq3qa9sqeZH87ITt4rfQtmTh0WyV3BPJoK3PGPWHNXj/q81uSKH6FGg0Vv9KPxwDf1FV8fam5QGrTbphp2/1eygK4iz3YueIPxp/ozuzNU8IPy8d7wOA071TxZHEsz3jn/tQW/Tgj1/94d1fqK58bEOFJxhWyiQIofk1NAA3bl2RZOicW/YH8rWqtMZkH1CGrjjev/5AKM5oJCIAOHxhvLbY7I7FNRLx0Lzr6rqS1W9e6+f/vcAVik64E38+1HW6f5rjeQCwBcJZKjkADEzZS1axI64sukfndrSW11fmleUZEQK5SFqk1lt0YkNKxyKivr3IIJeJ1UbnrNNn1Cn7ZhxtlQVT3pAgIA7GGFXG/ECKP3BJSXEaBuxeOUV3z7h+eXz8F385eu9Pnu0enR+LLY6POHe1VcS4d9bp7OIGtDcU1cmWF/D8yHxdmUWSa/jKzmYRRQFA75Sj3mQiHRjK1Fq1aIWhkzb4ZRrrNneAFBfCAPZgRC+TqaWScJzRyCQAIKMlk0G/xxupMK/ZAe2dwh6Klho0hNx7fmJeKRWvK8sDgHCCee/5gUl3wKSSfbitWnhlxuHfskpMfG54dncykkQoQxiDUpzuEqz1zd1SWdhakvvE/nP6bOXPnz/mD8dVMmmpSdYzNX10evKn3bPjFyYOXhh/6+zI6t7VBGnh5AwxQowRQuMBT45MM+sLP9c1eXNzkU4uKcrWSSUimqZ02gy+E8tjCpCUksa4OEKAELTmZyMEk57gp2/a9FbHqEB1EI54ZNalUcr6pxwIYHTOZTKo+2edW2uKcHLu3mhcLc0s7V2NjLvOEY41WbI4AAlFVReaXj899NDv3uT5JUaNPRBWyyXjQdd40L+3vFTPcCcm5hHGjpRTxZmipyzGZ0etFp20Ks/4zMGuGbf/jHWmf8aZbVR544w3wZxxeo5PztM0tZb3sqmiQGjetKnYfCqlSvrm0jwpJb5uQ6VBq9xVZJZJxN+9c9e/f37v3o1VOqXMKJOqJeJSubw65XuRdk0hGfIHjFmM4xwvE9GEOEQsWrNGyWNs94dFFBKsXhqhBktWhV61bUPVk3/vJMb3tU3lr3eNEpXwbMQ7G/bMRwIyWiylKYzBHU/QCCU4PsHx5JqJKERTaMofOTPvxaTgJo/ppBGPiB1PIUD46rbSV04OSGmJXCTFGBI8bs7NOje3qJFJbIFQqhL6hnVVb3aPEw+HQojhcYzjGY7nMYgpJKaQTESTWUiTJVDJTPkkoUhEIZWIZjG/o9RydNpWW5LD8bxgZWapFBjjOMNdu7GKWHUYp19xhseAACNgMBYhJEJoV33JqRErw+FNRaaTaxQe5QClpghIaH9nc9mbZ4dP9U3DKmyqKtCxqKenx3qy+8F7dv/0vg99Yk/bH755x88+d/0TH91uaizZt7MpNcqOU7bo6j0AAHtayk6fGnl9YKk1spbjf/D6mVMD1s9srX6rO3OlI4ER1GQxIIAem8eiUVndwYy9ildH/WEN3v9S/6+VLsHmIvPRyaWdX6jVzAYyWNtrqYpTG4qtpgz5o4mQH5+fc97+P4f+47ULtrjk2dMZXBeCpvLc5w73Nn/q4e6RuVt3NBbkZd2wcek2XqBSJhjOEwhTCG2vLjw3ma79IKguMvVNLp0A4fQ6k60bBMrQ+rK8izRD+ADvBe9Tf8Adiep1kmZDjssbBMAGrXJ00VefkzXj9JdbLt049orgrNXB0cxtW+tePTP45cdePj84P7zgKdCrMUDfhK268AoY4hdB/7SjqsiUlxKMdycippWVIon6dtVHrwDODFizdap5b3B9eT4FIDTqyigmBgCO4y4zRbAahycWnjo7/r3XLijZwGdv31rfUDw8MXf/N/56fni+NCeLcDPI41IjXRoJltPIlw2veZe/othsdQfzk5Zf15S91LRUEj7OMbGU6i7vened7p8uL8giYuJem6c0Sx1jWAAQSrYDwIUJ2+pL+e6OOO725yTFHhyPj3WO98w4yODvXUwMAFOeIMaglooRAIcxwzN2d7giJwtgufgjAMw4feuqli11LpNsYPUESaGhaIKlFLqXD3WPDc0/+mZnHDFnRycpj/fl05Pf+K/XPv3DF5852H3gzMiv95+fcfjyjZowy662R9fyNGiEWIyFzAACdGx2RiMXt1UZp6K+086FsIjJUisaqvMhZQSSCiB0FPJIxfbS3I55V16W5toNlY89fxxWFr0JJ9hb2uuOdU+Pzi72j9t0KtmCL1iSrSNpBAywGIqqkv4AjVCI4dKmk9EGEl4ccnpjCWbE5WM5nuH5wWlHZUF2JMZ0Ds3W603jAc+0z0dJuDp9ToPeJKbpr35oU3Q2iCn63IxD8EmUYlmIiUGK7YUBRAiNzDtlUimmqV3t1d//y9uPj9liDPfF80O/GrH+vH/sTxOzVgpAkkH0TLCnufzVcyMAwGLcmmtECPUsLFWuVEjEQ/OLHMb9Tu9XNtZ87tYtv3ju2KnzU23JbZPg+cVQVCuXphK0UkEK/tDJqqwIINUZIO/J06tnPenMKIzhjrbKE26/Oxw7MziDEIpx/Kudo6/0jvV5bTXa7CaDuVqrN8rUXW77QiSmE4sBgBxLKqJiHDcfjp2d9x+edPU7gwmOx3jpr8QxIJkEAFCJ5QBww5baN86OkLOS0lR7kXnQ6dOrFTZfGBBieZzgeECwo7bozOgsjwEDcDxGADKakotoCbU0rDC1NIYPRaFKrbHf60rwGCFQiETr8o19NrdaJL6uueLN7nEh5J+jUfbOOdvrik73W8krCAEHwANggCjHUwhI5VBxcgeuL8+nAJ2fmG/IyQKAPptbuNak8CjFUFOBpaC1QPIRIXSiZ9KSpfnd3zsgE55/6BOHHrx7546alqr8bY0l7WW5YqloU13RfdsbW+uK9m6pPTNgTXUDhEfqPpPSkjiX4DDeu7H62IUJBODwhh5+9uiTL56qKDR9/oaNV9UXY7zkEV0kXE3i9+EEk7FXMayK+gunsYaqeIV2gmBHaQ7JQhiVcndkWTAtNCa7iKo4tfnxtuKcI5P2Hx3s/eSfjm5/+NUdv3jt038+/tjrgwvj1u/evP5392wbms+gOSbYUFOw4A78+2f2EgHAXS0VqewjiZgGAEDQUmLpm3FCphXbUFPw9oXlqa3PNw44vMLToiyNPxy/rrH81fMja91+P8B7wfvUH/BEotkKhZyWnBmy7mqroClqyOmJM9zhgam1Og9c8f339+FZ79T8rubiB+/Ztb297PzQ3KsnB08PWp852DU84xQkp1cQqUyYg52j9mi8Knc5CzG0EMhSLPNkiPo2fYgrhDmnL1uvOtw/dVNrpTwlopxRTAwAHMfBZbOG0uBA1Mc3V/zL1dWVucYb1lcU5xq+/8Der37yKttioCwvCwDkIil5RNl4GlE1I9baBnGW43g+1Qo/3jO5qaqAElHFyUZIMy6fsObueCRNTJxqo12+sT7r8teWLKlQ7KFoeZY2EEvIk6eBAQDjmUV/mj9w+eOnYVlMDIAxHpiwCUmkKyImZtl4tUnL8hgAEACP8cudw3qjPO2E/3akb3vzMteORkvXJZU1lPFKNRhM4yHP5jLNT7+676n/vGtjc0FJYc7bR8ccStlz915Xs6vpzus33rGr+fEv33zH7uZtraU8gCy1RV8KBIs59UCp54kAEjzHMvS2MouTlrw6F3htPvD4qNPbUsZvKbdY9HGOibJMIBGVicQIQYznCB2FpOyIkUoj1JJnBIDzc67UYB4Bh3Ewwe5rqaARtb9zzOkP67WK02OztcmOigggxrA6mQRjwBg4jOWi9Nu+cM7kP4Q1Hud4HuMEz3dOO/yBaMeETUpTGKBvyn7ztvqP7W7966Ge8YVFhuec8dC6nDxI0pB2VuSt14t/fKhr3hskw1LJ8dGqx7wnKNFKiopNCZm4qShH3TPXXlf4+PraL9eWfb2+4uOl+fksLs/EIRQWf19b1Zvd42TwLUXmU9MOwaAcnLFHuMSoKyBXSG/cVPPSsb7XTw1WFhqJ7EFO055oTC2VpPLQhGFTbWIRQnGW4zFRESw1DWB5HIizJrWCopDdH2aTFP9ggkUIMKAEx9c1lT5ydGDHz1/6yf7eAkvOH547U67SA0AoEQvE4dCUi0KI5zGxzlkexzie5XGCxxPeiEkpMSok+RpZmOE4HsdZPsRwUZbneB4B8DxmeBzneIbD25vKziRL/ZAp7KrIYzgcY3kZJ+7zOmgK8Rg2VRUCQMforJhCkIz9kznSCPGAuaSbkQoOYxktjvMJjDGVVBE0WLIQQL/dvaW6EADOJJXKeTp1kGW3NpYCwNlBKybEM57neZzgePmqPA85gT3N5Qd6x2kKVWXrTk47Ur3TIoPW6g64EzE+he7/VsfI93+//2j35K07G/un1gwVX91Y9tv7b97fN+Hwhw0K2YI/TEa+ujJPJZNMO7zCJiQQAvZ0UkfOJStW0Qh9Yu+6gDP4+P7OulLLoZ9/5s7G0k6bGwD2JDserIYw4OYi89Epm1IizlLKnCvbVhCs/l6T+Wfk/V+7voowslIhUH0KNBqrb2UjgmQVkYuoigXCUkuu8bHjfWftTnciKnO6xo6cK4yFbrux7po7t+nUkqvrinfXl7w9MLV6EADINWoVMvENm2vJ00aLIY19ZFQrXMEIaUyW8eZM+J+ECwoAFUbtVLK0AwDk6VQchyMMc11Lxf6eCf4DytCVxvvUH3CH4lGWxRjG5habynNdsUi2Qjnv8cNFe/G+O/uJIE08gDH02twfai2T0xKFWFpbnvOJ61u3Nhb/9e2e7/9+P8sth43/QbA6fBaTNpVFYAuFc1N+d4n6NtNH3xmIhZEmJgaAGacvzrJv9U3sLLOQW8NaYmIA4Naokp6KjAbu+KI/D8HxULilJJeikVmrlktEEjGdZ9YGo7GKlWwouUiKMb6IeODilUb9kbhKtoKV4fSFC806mYhWyyQA4AlFpGKRLkmGjq19lS/fWB+YshckO5EJkftgLGFULXNRxhfcRdkrZBKXP/5q2AKRPK1CEBNPLrhbinPgCoqJvZHNFdnjAfeQd3HU7/5zx0CUYR2RAALASVLygc7RG7cuVxolv9lp4whzRGn2OsYjNteW5oKPrG+4fV39l/a290zYWJrS0JJNZbkP37LVjqBMr6otNPb3THMiOhhLZAyfrx4ZUg6aavd4IvEdRTn3VRT8qLX6gariW8SS3NPj+yTKVoNeSonlIrGEWnLe5DS9+kDEPdhRlnt0YgEB7NlQ9VbHCBmdw3jaEzSpZBaNsrwgy7ro55WQY1DPe4LE/WN5luUAA0jFIpJ2IIkI4SiCFcvyOM7xQqBXRCEqWZL/zNzi7MTM8Y6RBW+Qx2B1eBsrcj97S/ukzX3d1558/a2B093W/glbIBwLhGODU/Y3zg4XadUz3hAAzKb8nCvFslDSVeOS+ZMFb1Aqk9xdnv/ppvIqs55luZ11xUqpOEsq0UnEzXqNUSmTiURrXQIMsLO2+MzYLBmtKTcLIei1uXmMPaFoMBKXctIQjpZlqdvriiRietjqIs4zhzGFUJxhFRIRhZCUlqSmCFh+yfrkBYuQoiiKJHAQBsRwWEQhpYQWUajYoJ3xBATKkExEdy36D7s8IaX0seMjo73j/3pVw9e21Zw8eN6LuXPjdoZLhFnuz71z4SifJ9eG2Cjp2TUfigbirCMSH10MGWRiT5QBgFKdIphgIhx30LqIAGQ0JRXRfHLfSWlKI5VtqMvDGM4MWNlkndC2/OyuhUWDSj7vCWIAEUISCnE83lSZf3RwhapYANlmqVuawzjCciIK0as4+hKKarBkEXr33qbyA70TRADNYpyvU897g7vayg90jJDVIy0jUhuTQYqKAJLs9jOjsw05hsOTC+cXFu3ROIfxfCQ2HonOuIMYoHNk7sXjPT99+u3Nn3+0a3T+mvWV3/nkNTdurfvY7tajXZnNcQDIUsm/sGfDrw90jiwsnrM6yFI0WgxHXL7+ycyOBI8xm+J7CBPfVFs4MG7rYTlNkQYAdlXmH5m0wUWp+anYUWI5aXXkalU2fzgjZai9ruhoz7KqmALgAa81+L7N6fyiFY0IdNq5QHrOCi6qKr5xS91Lx/sBYG7WdX7edf6N8zpP8Is3bwrv/9ErP7j7oc3NV+Xq/LG4TCzaUJ7XlakMEcFVybIHsIp9VK0zGvVSWzAcTTDXtZQfWMOJuqq1vHNodnmEieURCrWaOXd4IRZsKcm5MG2jrnSI9gO8T/0BVzAil9IAcH5oriRPb/WGLUrZuUlbRvEAwXsxodIQYeNWn08uEt26vRUBsDyPAHmDiZtaKh5+4MZv37N7LcrylcLgtKPYogeAVHKLL5bISTEiZ93+glVa28vHalNJwPmROXcwcmZ4piBbPxqKlxjUMTYe4xKBKGNeQ43Kc8uNC94RJj3BqyvyPlee9+VD5+uKzL5YPNegKlXpa4vNHIcN71z8epFtEIwnDIplPcDAlN2oVUzMu/XJ0uljNo8+ybTJ2HngXWBw2rGxroj8f9IdbLQYQgkmnGAEfsiQbzHoS2yvKRY+csmdnHbh0sTEHbPOuiTl2hOMaIv0H2q5YmLiQJyZcIfYGFWmNtgX4y90zjxx3GrzBCdH3IRXOjBl/9Ob596+MF66itcnbDkhRZBxE0a5RM+wPV+vJb/0NYXZWqXcYDHYjvRxsQSDgaFFHy4wqaTi80OzOo0iEmdgDUYNJAXE5P9kYQVLV8CUJ2hRyXMVMgDIVcjm7L6oP6JVydRSceobuaSMWHgxNUXQnEwRtCdDieQoE55AY46BolBprn50wR1nuGHbYm4yH4UxBGMJwU8jU+AwjjI8wy2b/gBLteeFpyyPxRTCABRCi6Ho01/56N4NVd/98+HBQftfj/XlmjUxnr3t2nXjc4u/euHkscMjd/3H09d89Tcf+pcnv/6r155663zQG7qjpVwkFvckK5qn7jphiawuX2G2BgDK9GoAyM/WRuNMZYFJWG0O49WdBwTQKapiwWbaXGQ+bXVigBGbu8CglYjoCMMyPE8jdNt1zZWFxsGpJQ4DAogxnGqVskI4Oo8xQoiISjmex0tmItAIiHFLrrxRLecoNOgJDHiDL1pt3zk/NB2OXFeU85PN9Y2lhvtu3PTmsV6nO3DLjoavXL/pYP+kOxJ7adAVZXkMIKFpBjMhhuUxdkUS5+2+cU/YIJd4owmzUqqSirIUEg7QjC8y5Yn0OAIAwPKYRkhEIXKBCLY2FB/tnhC2aIPFIBXR7nB8wReuUBl6vU4AEFFod2P5q+dHVjsDZEw6yUdCyd5kEmopoi+jJaVq7ah/McbyAMDweGux5eiUjQdoq8hHAGdGZxGAmELZaoUvFm+tKgCAswNWjIHlsZSmhK8JJNMCqadxbVP5W93j/khsyOZ7qHP4N0PWn/RNPDEw9bvx+cMLnj//7cKrncOuQKSlMu/kr7/4r3ddvbm+GJEC/8XmrrHMZHQg+0clf2DPhpOjs29cGPGEogCwqch8fm5xzpUunOWSND8aIeLDQEojgj0bqrtH5n69dwMdR1GGBYCrSi1nZ5wcxtdeRoqgLT+7z+YJJ5h8nXo+E2Voz4aqV04sU/MxAKk+l5H331K5ov8XwdYSyxNdE/uH5nxB7um+oRlvIM4x9mBocjF4esp2dMyW4PBrXeNvp6SSUgd87u2elnsf/unTbzcaNP91/w1/+vqH97XXkL8WqJSVGrlZrVgIhNpK8w6tkR8AgIZSy0UakwGA1ROQS8QbyvMJ72h1gL+xzDJodS6PULZihAKD2h+O72kof+Xc8JWyxz6AgCtgkfy/iAhi1pktTm8wHEvolEoKgRqwyx9OC6NecUTYOEkU9C34xnzBv9jcP+oZf2HaZgvFrZ5gnkENAE5v6PpNNZca6T1h2OpsrsyHFIq5NxpzhiKp6YIrJSZOAwY40Ts5Ord4Yc5eV2wOxGIV2SoSmA/FmbRC4AL4S+UH1rJxvdF4iV4V8odz/CGXQtYxY8M0rxCLB6cd+abM9TcvgovfgCIJRiFZJgsNTjtqyizjDm9j0nKddHjXlVrW+PQyLmmvp2J4xtlamQcAGGDSEyjN0qokYpsvlK1e9kwmHZ4i49JkLzn4xd9A1F3ZKjkRE4/ZPUaNktTnTbU73zWePzd8wOn7n+PD9z51dMIVvLY676f7Wjge//7Fjs/+7Pmtn3/svp8+/+OnDv9p//n1yUqjGZMDaSCOAfn2yWhJ99TyDwzD8VsaSmbm7C538LmjfacG5z/VUPz2+EL3hM0fiuk1inD8EvlonBx/9UkM+xYLFFpXKEbanAEAj3HH8ExetRkQSMUiSMZlBaQ5HhiW/7p9ZYqAWNW2QDRPq6QQqszLmhtydE44T0/MtlfkCSMH4gmDQiYkAYgdJhNRCAFxPwAAA+aTzgwGIA+h8qMtHGPFon65aNLueXJmIRiO/9Kx+J+9k2cV1Pa2is/ctHn7lurvPLDn2R/cffqJL/32Xz/81Y9uv2FDVZ1Zd2JqYcEXcq5q/yTAuujPN2gBgKxPrlHj8oeKc/TCG7yRuC5Z4WAtl4zD+NqmcqGIYVNuFgI4a3UMzbu21RRtKc01YMl8NAAAzVW5ANA1Nk+WLhhLyMU0qaSUmiJgeUwhQAAIIQSAAOIsJ6IoGiEJvWQmUkltBnmIZJI3pmxPj8+Wa5Q/aqu9udBSp1O35hk/2lKeZ1QPzTpfONp7566W27c2PHey/8SMLxDnNuXrTUopXnJ7YMoXCcXZRpParJaS5EyuSiqlKMDgicTmgrEcldQfS1AIRMkqRqmLcO2GqtdODtAUCjMsUTtsLso5NrmgkUmcwaX1J7t037qqt1aWiCFZBRGFSEIAA/ApXYoFYAAOsEREMTxZAdhZajk1bUcAmyoLjg5MwxJlSIUAHIFwW03h0e7JNLsf1ig/ur48HwD+3j0hjqHZKUdxKH5faV5xMO49NujrnjbptZ+8acMnr2u7pq0Srfyi7W6rePFYf9poXJLtQ4z7bLXiwZu2bqkq/M9XTjj8YRqhtnwjy+NAOJb25lp99rBvzfL2t29v6B1fsChkQ3Y3AFSbdENOHyRTBKfWSBGQHdJoMWCAEZdfI5e4UihDqSmCm7fVH+gchZU3k4y8/4wlicpMOmsgfHBk4enOieNDns89c+qf/nTigadP3fm/Rz7/9KkfvNH15RfPieXq3xw4B6uwZ0PV4LT963dederR+z+7td6/ilJYrTMq1SKrJ6BRSMU0vVaT4LQTW12wyKJVznoDV9UWv9CRWcyQxoaqzl4xQp5OybB8MB7f21JOuE+SDyhDVw7vR3/AHYlqpRIxTXUMzV7VWg4IddsWy82GoRlH7T9GPgsAMY4hngBhDfXaPbHJ+W9XF36rqbxaqzrm8E3gpZguadx7qfHeE2ac3vqSHHUKOefozJyaXlHr5sqKiaUUDQBRNh5lYsMzTqDQoYHpG1sqGR7la5d8MIc/nK2+rADz5ZcY6rN5ivXqTZUFDMffW1M0idlqkwkApmc9DWVXWKHhWKmmnXP5DTpVQiYWqiXafcFcfWY22iXN9LVwvGfyF88f7Ru1H+ubeurC2JYiczjBxFemUzrG5olrd8mjZHwDw7MxLkEe/Q7Punyj8J7+GUckzhCK3Ywn8N7FAwBQwOMv7az7w907791U1ZBrkNLUXVsavnXXrie/8eETv/7C/3zj9q98ZLtRqyRMUwyQ6gwIP+RCZF14JZr89iGE5tyBVIuqutCMAGEEfz3cva0wa0uxmQZ8YmjWqFffuak2EFuSlFwsRcDzxExhVyUHIgxHIaSSinHSdZmcd99QU6qSiKmUAblVyQEAwBgUyYlQCLXmGXFSRYABOgasANA552ow6wFgYnaR57FcQgf94bayXDIUy+NwnBHRtIhaKloPyWAwoQ8BAh5jBIhKMX85HpMWuRSAOxy3uiIvOzy3WIw/uX/P/IE+GUU9tq7uyzUlP2qt+f6nrp2xeZpqClqr8nOztRzGuUbtuqqCfVvq7t/WYFYp1ApZp3WZmKESSQOJqLBE1kVfnlEnF9GkqthE0OsNxoosBgCgEUrwfDCeSPWxM4JGqH2lQba5yPzLE/2vdY/trC2uyzMGo0lREELhOPPnt7rIs1A8IROLhPWmSB4gSRAivhAAEI4QsWtJpR1SUhYhhDEmlJiWbL0mEv9cRWFLllboXEYj1JpnHA1EbtjRMD6/uL2pdDES37exLuELqKU4kuBqs9VimjJK1E8PTr457jAoJAap2CARzwdjFo0sEGcVYpE7ntBLxbEEhxCKMDiS7AlNdiPZ3nKRNMLGr99ce7BjVErTPA9xlm/OzcpWyWmR6OT4QqlS3+t1EkN8R11xquVKXhQMYrVYxHAcmSxL6p8C8AAJHiOEGvSmYa+LbBIE0Jaf3WNzIwR7mstfOTcsDGLWq4+Oz21sLHnpWJ9wIBqhKMdndAbYJRVBxatnBxPhCOcLf+u/X7rmy0/MTDu+uq/9he9+fENNAYVAvqoRAQAggFt3NLx9YQJWuQGp30SpWHRdQ2l1Uc6PXz4+7w1+tL5YWlc07Q9nfDOB8H0nqmIAaKnM6xu3mTVKADr2BaMAACAASURBVHAGI5uLzEcmbeRbTFIEEmq5K5nwIL3JEECTxdC94DYqFY5AhKYyWLHrqwvODs0IN2Hh3pWR97+6JNGuIvPBvskFNQUlOn25em+J4UubK9oM8gaaFVlnBw93Tp/o6jne89cz6e4TwUeubi6x6AHgQ/XFJ1YG9QXMeoMUgk2V+d0za8o2Uk9sNWXInCWf84eiCfbmtqoDfZm7m+3bXLvWCIVa7ciCr8u7YNSoHnuzI8ExiQ+cgSuH96M/4IlE9XJZJM6Mzy2W5xvlMmrWG7XoNYvByFoW8CUNqYsjyiYMUlWqfsDqDYkpVJKtA4CmLO1tJdlXG4wkRDfn9F1ZMbFgDwnM+MPnxxvLLKkFKJ3BWLlRLTy9UmJism7OWIim0IDXMRH0T4YC824/0AgA3uyd2FCUzfMYACIJFgDW0g9cDjJeIF8sblErAMDuCbYV52SFeZ1E3O91+j2RwuzlMOTlgCzjRbZBOLFCDH26f7qu0OSIJoTiQqdTUi5rdSZ+pzsNA2xrKH2jY/ifH3+1d9rx1OFuu8vvDEao5F+d3hARE7/TkQWIKZGMlshoiZSWjCz6K3J0C5GwNejr8zh//0ZnsVnvjsSGvH5XOPre/QGEQCkWtRUaIRmCPTw4WVduvufadbUlOQBQV5LTWJ5787Z6QdB8iREBIKneIT/PQ3Ou8hxDqUo/4HECQCzBzQej+/ZtkYpFZ/qn/eEojVCJQT0LsLDo18ilAOBYO8K9BIQgE1MIAOb8oSyFlMcYAVAILSz6/eFoUbauwqRHkLmb8lqOBwbYWZZ7aGw+EI1f3VbxZsfInDcYiDMJjh/1u50LIZlEZDZmP3NqOMus5JIVYwKxeFoNX3JQGiEWYwTA46VEAcZYOLQwlwm336IVP7KprsGkVysk3757V1tVfpZKrpGIjDLpzsZSQGChxeUaw7DPRYx4wU7dV19yYHR2wReyByJklhzGYmr5RycUS7SV5Qm9ye2LgWz9CumwOxxTpCSdMq4M2dh7VqYIWIyPDkz7wvGOaXtVXvapfnu/1zk86SzNzUIAnUMzLI8D8YROLiWzJpRxnueJppZGSwYxJKsMLR0LY0j2fxAUrhgDjaC10CxGy/V5SBfh9YWmPpdvz8aaTY2lvzjYtX94oaHQPDzv2ldhirJsvlYWY/nn++22YJjl8Bmrm8F4Lhgr1MiCCcYTZQxyMQAEEyxQFMmRshwfYljhZIIMS/juAGhHc9npgWmS/KEpxGG8syz3xQHrkSnXrC/E8TxCgAA2VBRgwCeHZ1gec3i5vRq53HGOV4hFHMZcsvMdBcDzGGOsFC2b42SOTZYsAOi2uTmM22qKXu4aE1Oo2+3/7djMAo9fPz20tan0zY5h8r3jeCyj0zN57AoVQX5UJLcPTkx1jimr83/+pZse+tSe9roiuVS8taJgwREe9GWubFNdbOoan7uIZU9g0anUUvF9u9uePHTe4Q9lq+Q2X3itNwu2eOpTEvyWS8T5OvWcLxhKMDtKl9gs7ZUFCOD02CwknSXhIWBzkfmk1YkBLFqVI7CCMhRmEwCws7X84LnR1SeUkfe/uhHBsb4phuOvUSl3USLdmP/pQ2d/9ufDYo67cUPVb79x+/yL3z35+AO//tptd29tyqgqrikyn0wKmlfzfABATNG5OqUzFGkozOmbyewwAEBLZV732CUpQ6KyHMO43Y0zUYbS2FBbi3L+1j1lD0Tsgchfzox8//W+z/y283svXxjumZHQ4tS27h/gPeL96A/4IglMYYmIPnxhfENN4aQ7IBXRkw5PtjZDFYsrArzi3gIAMOMLlST7xfZ7nEE/W5qlQcnGvasGuJKwuQOeYKRj3pWlWk4I6GTSKtMyV+pKiYkJnNGIWiyp05vr9aYqdVZVvYXisFqv/lXPREG2snPR7ojGejyBrExVRC6JixCJ/NFEguO1coknFGF5nkKorchMfpH6x+3leVeyw4M3nK6mnXP5S3INi5FooW7J0bqyKReCYCS+e33Fd++59pEv3JitV/7k+eMbPvvLH/7y1R/834ED50YZjhuecORoVZfjDFzyPQigc8b1xPDs1zqHXrRGvn9itMfptmuk/9Ez8ttR64z00prvS0JEUTq5xKiUCYZDx/hCsXnFN0JIoGVkCgk/5IKKILpSyt8/59xSUSgVLRFFlDLxrDf4jW0NL/3sn/hsxY+fOowBig2qSW8w36TzBCL5evVcUhS72h4liyaoCNLMCAww5w9VZ+tESTry0Z7JRX902OvXyKTCgIJZKcyGRku1RyGZ68AAIoT+P/a+O06uqzz7PbdO7zszO9v7arVa9Wa5Sq7YYAMGm2pIqEkgyRcg1IQkBNMJED4gmNCLsY2bXOQiW71LK2l7nW3Te731nO+PuzOabZJsy/989vObnzQ7M/fce89tb3ne511X44rkis8O+De211IUevHsRE6QzkaTPz84vieQaK2ze4gsyMozZ0bm8tlgIXsymp6IZyw6TlRxyegHhOYjl+W5m88LAMIl+njZThqNpRSsiCUb1B9M3LipTds8AEgWBJvHuuf4MBBCISRhrDHONW9kS4Onyqg36nXHp0JlwhJLcRlJ1N4/8FIvzzI7W2u0YxGKZT12M5RmmEZIUJZvSKKh7LQggG3tdYRcSBHc0uxL8PoP3f/gtw72batz2826dF6cCyY++fZtX/7IjQ/vP1uQhaIi8xyVk4WMVCwqYl4WCKC8nK9cRaUzAABaioCU6sVZitI6TEsqqbIYJ2LpgqzmFVUt1fViQtbVuM6FEl2rG8ZHA3mEzK6qR470mTkdAXUyld83GTdxNBZ5CQlTqeJMqkhTyGPi68z6aFEERFx6PpgTCSHtDmMoWxxPFEobpgKAgaG1Y2pi+U1dPkJIWaOGoVB7lY0gSmc0HxxeQGW5qr3upf5JUVU1DVMaIQKAAWRMtKQIgxAQop0USqmhsrZsu9U1kU1o72VMtjd4Hjw3uXci2Lqh7VtnR9/90omJbP6uWs/1XueRgamr1jSeGZkDQlRNe3Th1aGU2GvluP7nblxj8Vk/+1c3r22vubq7UTsPVUK8FiPP0AVBruxVXF7q5s0djy2hDC2F3aDTc2yd0/KpW7Y8fGygN5KYXCIUCwsJPJXXu/afFvx2mw0EIJ4vrvM5NH1bTMjNa1ueuWgvAhWTrfXu/nDCadQH0zmuVFVcb7LGhYJ2Pd66pXNpIwJBwU8tERit7P+15/jwN3639x9/+HjgpfMf+t2L+0+NXdVWc+/bNv/qC/d+5t7r33XD2vWttTJWupq8H7x543uuWbOsfn+l1ueyjck6bS6blY3ki9d01j+7cqPiW7Z0PF5RCNHkMI/GFugd+azGmWSmo9p5YGh60SlRHqGSdLS+2vnzgwO7frKn+1uP/fNDh9OnB2py6X+7YwNUGYKJ7NLF38SrxhvRH5jIpPSccSwQn01mMwVxLJ6rNxsGA/FrVjVcatErg6lkFgDWVgibJvNFp0EPpca9Ky75qrDokjs5NLu1uxEAqir8gZl0rsF2IT8wFUu9lmLipajSzfOn56LpiaEoduntZruF1T8dzv15Ivkvp4aGk7nMpU7GeQsFIajYo4uYsFOpbJVBDwCjwYSeY54dmDLpOK0v2Fw83bakOuLinYkvjmRBqCyG7p8MaT3CCtJ8fr8y5bJSMfElLfJF8AcTTdUOTS/FYDeuran6xHtv0H/w6s//1a21NVW/fKH3xn/9+Vf++5l6l+2Sw17mqkejqdHTszMn584fnpw4H+ZS0r9uWP297WvvqqvuhNeaHJAUVVbxlroLx4VCaC6RbfU5oOI0PtLnvzihrrwvBoZPSzktM6ABAYRTuWq7iaYorV3x02cn/RlhW6P31vVt13TU7zs99uKp0TaX9dzzZzybW3mzXjusl0wR4IWaQhoIIXOZvNukL3/xh729kwYza9QbOUYzzYuKbGAu3SxM2/2iIt67oemFycBYPHnNusaDZ0bmCvn/HZikPXy8UJhOCLKO0lf7fr23/9t9gz8bnX1sOniaFE08h1BJQAYBgXlTTzN3ytOFQOPALFjvSDTTgKC65Kv3j4dqq2wqmY/pGjm2o8X72P4+jImECSHzEV9CABMCCN62pvmFkZlgKhfLFhCar1rWSPAIAY2gN5Ftd1lVTBRMUhmhq8kjYYWnWZUQCpAo48p6X23kvKyWvQsFE6HUVXdre91L/ZPa+8YqK8uzztXNveOBbCK7td57LDQ3FExct7FldVNNUlT2nJkcj2asOr2J01s4vZnV8TSvZ3iEaG1jAEBUF6viAACNQDP3FUwEFWt7SlOo1makKZQTRCNDl/t5zWaLzW7bmUBifYPnxPnJ6zyWyUxu19q2J3tHo0XpwFS82sybOBYQ8pp1Jp6JF2WHjlUwpASZEIQBZUSZAkrCiqjiqWQhkBV4mkpLMgIAmPchy4XFV3U3Pn1iJJTK7/XHZjPFA1Ox61p8J6dmMIFWk6M/GZEwxoTcuLb1qdMjDKLKXCCGQhgTlkJU6WRQCdBLGhHoaE7CsoLnaT8UQI/XOVwQP7G3NxdP+xTxS6ua72r0eTnuz8+c3Ly+edfGtscP9GdltTyI5jlrx0hLTVTG9e/a0lnjstx3Xc+NHXUnZiJihQJbg9MiiKqsqgCLl0IAd1/fs//M8uSTShg5lkbIZtK/Y0sXyPiHjx+Yq9C/WgRUEWziaU5SRABY315zanhWJaTGaormip1VNgqhvlACALa31VEIHR9bXOY7lIr1JcIEgKLQtvqqc8GEw8CzNF3utDWeSeQVRZugHRtaf/XS+ZeH5wDg8ET43544seuHT3/0T0fqaqr39E0tGnnb6nqt/9fR/qn17TWnfv4PP//nd2/rqP3rt2679/p117Q05JRluDQrNSKo1Ppc2phMg6iowVQOIdi1pnkl1VEAuHPlNsOdNpfbqZ9N53x2cyCRmUtkl33uvG3H6j++cCYQSwdi6cHR2T3Dk5MvndwK8n+/79q5v/zL++/Zcu+O1e+5uvv4+By8qTp65XApE+z/R5wv5n4zPPOpZ44ns4VPP3viB0fO05Kyb8CvmWtXIMh5KRyZDM5EEpsqWq5mhXmqyVwsXe28YJdfQch43jD1hxLrWn2VxQOyivsjiTrrhfXu7Zt87cXEy7r+/lCi2m4BY9UHrl7Ns/BOt/1727r+ur0eErku8+XmB9DlGa9z6cIqjw0AJsJJrTLEwnMAkM4WAeCVigtd3GIuSIq5ohh6wB/e3t2oFYxOp7IAMDAb3b5CyoWU5upydqoS8Uze6zLxFAcAzwzPOryOA7nCDSLzl5HQ7vFIv0zJdleiyr29q/ni41zmqtOC1OywfPH29d99z5ZHPnbTV27qcjU6VzW4AcAOaHPday164Rg6rUKz01yO+g/ORmsciy+H2WhaI9SVCN6LUXnisdT8eV7ex5MTgaZSSzgKIYpC1zXP0/O+es9OxaX/+u9e6JsM5XJCs90ykcgAwMVTBACgEMKjeZusvHYZYwqhgXBaa79NI3RsaGZgPMiKCQvPlM1cqqTlUrk3hMzXdwIAIQQDiIooKKKJ1a2pdtdYTaOh1KaOhueOj2EFtlmtbYg+NhDGPk+RMucGJ/uH5z7R0fTZ1S3vbqrZgPQIAYsoDIQAyHgBY6ds8JU3ACGg4IJXEC2KjRXEwmgqV+exKVgxMJyqMVUQddtVq/acHO6xu0czMYTm61C12POmBrfbpDfpdSdKBAMFExM7n/GYSaRHopmeajtDIZ6mlILic1pEZV72NC2IHENLKlZKWqhMSQGJqSiH4BmaphBDoRt7Wp4/O44oBAiabSZrLjtdyHdUV33jjy+/7z//ODEnVzWZv9Xv/6++8ViN7et/fPlPwahacQ6R+bYPOpXIFIK0INNomeJXBRNMSFbSWtQRurQ9kkp8VlM4ndfM6FBemM4WOJq6usGbLAqPnZlas6rh4VPjZgZd39302IlholAcTTxmnYJVDKjVakecOBjJ+sw6nqYCOcFr5F06LpgTDRxFgDoZSFl0bCwvEQI6isor8yz/8gnJ09yOdQ2/fvrEz8/PCQo+H872eG16nb7ebqYQ+OMZSqM2UQghdMfGjhfOj2NMKAAKQK1oQ0ZKF4us4kUugYKJjOV2q2skHdMMegzw7g43k8qcHo3evqr9/gdf3nNq9IHHj3z6HTuqzQZZUW/Z1nn4zLhSSpgAgKhgzS+lF9J7tIP+1o0dZ/2hdqdlKJLSNknbwTqbdTaWH87EcQW7qYxtqxuODU4tvTAXwW0xRLNFANjoddimIrYq5xf+/FKlmidZ+EIANEJZWVEJwQAKIbds6XjqyACNkNdipAASeaHFaekNxLWNvHVt67O9Y0LJCh9KxYZSsSazdbXDoz2zerwOQmAomnaa9OcC0ZwoD6Vi1TpzXpCHosk9AzPffrHvT8OhLzx+8l3/8/wvDw/bKGKMRNcx+P2bW8/7A4t255Ytnf3+sNb/65YtHQBw5/ZV923qYBgaANwmYzC7jJARrNyI4IYNrcdLWp/LUoa6HC6aB4TQltYazRZfFh31K7YZ1jCXyg4Eo4TAvkG/qMqSurizUGeD+4WTo7d/7hd3f+U3P3niaEuN89nvfPSpr933tg0tiEI22hBR8msbvGOhBLyJK4c3nD8QzheqGepvO+td4VQkmkmeHlYn4g8cmewdm9M6kVFLrNjLtJYuH+PJXGR8rtM5Hy0uCLJZx2prOT082+y7kjwWDQiAo5miImJCjg1Mbeuqz4nycDoPAArGL/qnRAGNlZJ6gUQmlRdeO7OFlE4vjrrQzmk2kq7x2iAfvX1NfZPDsrHGBQANOt5rMZp1l46SLouVDlC8IDgNOgAIZ3KtXoeZZzV91alAsuaKZj8AIFEQKvMtI8GEw2V9YTwYzQuJrLDv3MQf9p11VPzgcnBJ1zSYyGxoq9WejIfj2d5T07pIwWvgvnHnlu9+YMufPrrr3Wtru2yo23exSomLn96VYqPTyWytzXR7V73DzFdbDW/fsspp1je67QAQyxVe9eGrRDBTqC3R9kRVHg4kNjZXl5/yCKCvlHiBFRzORV9prKHynyohoVSutWTgMhSVkqVdbfOiTzt7mq/pqD/QO/GL3SeqrEavoo7FMwCwUooArzx1mJCxTKLeaBMVtc1lBYB0UfrW3j6MCYWQ2cBrMftlscg3AIT0DK8SwtOcqKosQrd2NrwwGX7ozLils5VNCX84NPzNx89T/tmPrm8YOzVo91pvXtsyNhGfzCR6HFanUaelALR6jEXr1OyYco8ttdRTVssnEIBIMrulo0ElZCgVazLaiqLc4HWUAvNYkBSPUXf7tlXH+6fxEmsME8JS1B1rmp8e9AdSuUobjgBkipLM2mIFofzp8YEZj93MM5TmIOVEWc/QWjRaSywAzItXzntKpZuMZmxRADd0N7/cPymrpMFlNXFsvUkXE+SaG9d1v2vHeO8Eq2dvclr/T3frzXrjtD9ym83iLokXKaWyWm0jKYRYmkIIVAIKJioBABBUrPUM4WhKz9AAYGIZhWAKIVFVGQrVOcwjkaSoqNPZgkvPnw1mDvjjQ+HMurraGVmwuO2nzo73VFlFnSGWF0/5Q1V6JpgrxkQJCPGn8pq+ZH8kOxjLBjKimafTohzICBY9E88J7U6TgglCSFBUmkJWji0XEgBArCAem0vtmYxu3dw+OxmYTRW7PWYjS1t4tsps3TsVOToeaDY5htJRTAgFcH1X4/ESJV0lhC65AdrdQFIxAijPcxkqJjzNiljSEgvDqdhUNnFnW3Nnlf1DW9vPziYf6gv/7tmTa1t9LT5nT4Pn3Ex0TUv1mdE5GiFRxdrLyNJkYTJNqVC+2tBUPTgbaXNZ9k0EKUAIzZe/yxjX2s0UQgaGX1pVvGVVfTYvnB5eXly/DDPPZQSRQqiz0aMoap5l7tmxZs+58X97+OVYrkhKJ9Iqm+t8IiQooqCIRUU0MDSNkIHhFSxDhfZ/rc0cyxVanOZy/HtLa01GkJ7sGyl7Ao1mK0ezqIKGtLXB83CfvzeQ7J2N//Tg4M9eGPncX078/KWxX58YSgnSv79t870dnvd1Vd9Qa48M+2dmol95/86H/+W9W1t8L/UvkwC5d9c658LAVkeV9UwgBvONyS4QonialVRZO5zrG73LUobWNFcPlbQ+mxxm7e5XCQoht9EYyedv7Gl55szy5ChY0mZ4g8/51MDMocnwdDInKupgNNY3m+idTqY5696jIzzNmjn90kbFE4H4Z99zw+GffOpf3r/r3d1NtpK9ZORYjqYKoryluealgUl4E1cObzh/YDQdNwDrMuiy2eJP/ukd3/nUnSmnaeL4uSJjvkgnsteCRZ3IAGAqmRNltc07b5QURbWqdEkH45mlPJYrAgKgZ3hRlfyhZCovIAP3+Ez4v/onHx2fHQ6kzgcTJ85Naum5PceH88LiG+5rgVRKTQBAIlvoaHSvbfACIRYdqwUPeBZhApYVxEZfNQbDqRqrAQBOTwRX+VwGntX0VYORzIbO5btQr4RL+oRF6cKzOZkX9p8ZP8Cizx8ZDAbzn37wyMe/+4iUKHj1K/oDy45/SS90LppRCQYAAuBD+Lvv3v7Dd1+1ubGqxmYAgGqHvsVnZynU6l3RH7jkflViNl3o8tio0hKPHRuIlUzkoqxYXrM/kBXleFGoL0lzAsBYJG616DpsTihtqkaoW7ZyQMOye1T+MJEr4opQZTxfTAmCryIx9dV7dipO/U8fPzzsj2gBAo0fvGyKQHMz1AoW+7zXgbEWdy7KiqTi8XgmXZT+eHL8vWsbYtliq/eCw68tSwEqd5iqBIWQoKqYEK3mlSq9tta5Ayr8+EB/W62Jk3P/efvGz13f4rQYeIw3dNTmFPna1U0HBqYAYDaVrbOZAc0bOsui0v1QKyYWIVBUEsoVe3xOGiECEIhnbGYDAGimG09TGUkiCG5Y34oAnRiY6ra7B1NRUcWVtvW2Bg9H0wRgOJwsB5sxIbPJfF2VZXAiuG94FgBCiWw0U6iushUVRSMUBWTZaOANDK0ZhZUxZm1wBRO2InTNUOjmnpb9A36EiD+asuh5hUKEIl/a0PbdTZ2f/cB1p0+EMlLm/t8+/z8PHdi+qn5oPFiQJM2xycsKANDzuv5cThaZeY0g0P4VVcwgpCu5JVpTAs2/kjHWTHkVkxq7uS+UrDcbZnPFWE5KFZQTgbQ/VYgJsrnam8wUfnNs1J8u2t3uRDg4lizsm07OJIRqEz8QznKIzsrSvqnYQX98PJF/fjT60EDwXDDdH8xqvaIxIQ49G8mL2jEyMHRBUSN58UwocyaUEVV1Mpbv6mgITYUIIXUWvUXHAsDVDfaZjBAriMFMHgFwFFVU1C3tdQBwbHQmKytUSVcKl/pSayejlgkhAAomeVnJSDKiEEuxNEI5uRDIp7vsVW1Wp46hb26vc5l037/n6j994NpwIrtlVR0A1NrNWUW5aVPbk4f6McwH9bWUTvkKqvQEtON4y7rWJ04OY0yuba4+6A+VDzqNUIvLepGq4uvXt+49NXbxFEGVWR9I5bQimY56d7PDbDfp//Xu62/uafnZCycyRVElZCAZHUhGOYrRmtbrGF7BckERRVXSKlvK1a5uswEAsqIMCPZPhoDAcCaxc33T/rNTrWaH5gnoaHbRdbe+2jFYED7yx4N7x6Nuq+59W1u/987tP75nx31Xtd29rnldQ9WHbliz58D5Y2dGP3/Ptd/95O2bO+sIgM9hBoClKp/r22v29S7wEyr5OQ02y8xyjclWogzdsqXjyZLWZ7fHfmxmualGJJYrFiV515qWizQqhoo2w2urnaPRzN88dPjOX7xY89UHP/7rk787OPLZPx+ePnr2qdEVR9Dz7HtvWg8At21uv2lVvebkaKi2mQqiUm03A8CbJQRXEG84fwAj0mS2IYBEpnDL1k6Xy1Jt1P3tB3fd2nbhIV1+rr9OmE7lrAbeUdLWZIHWNLYTmQK8ch7L5YIQAjA5m9JxzKPHByxE+XhzzTaaiY2HHnn2WOzQwLf/8NLdX/71Wz73i49/86HNLb5LDfcqcXRgmqGoG3pa+uZiWypSEJdUFXwViBaKWlFEMJlrdNs4hgYAFRMhIzV7r3ASJpTJ+7O5hyfnvnBi6LOnR06PzBZOjlkT6amTfY5M4sN3bhsp5Gp9pUYEK4gLVeJyLPWTQzP1HpugSqIqyVitsesKsmjgGKued/L6tCTsbGniGdphWv6MupxVVCJZFK06jqbmTZ8nTg7X0TwACLICFb0sXjXOz0ZGo5naCn+gdzJU4zJrgW3tk7lIqrLgfumlWv6z/JUm2YkAFEImQolqu2k0GJ8fLVFotTuyWCibETt7mq/uqDcYeJqirutpuqrBc2gqBEtSBPRC1hABQkq+gUoIQkiLsM6k80VJHY6k/3hy/G3ddQ4jv3lVncXEL2U6lQdUMQYgmpAlIYSlKM0H0DN8VhbKVJ+P9TT6xeJMUfz4TVuPnhldX+ObjaSeOzny3ts2feSG9fdc1a1jmcmpZG8gpNPRTGl1izZbKXW2KhtnTEXRp4LJdCqLCazyOAAAExgPJGpdVrpi2/OiXGMzGznmpi0dz50YKdfRlp0BTa7nvi2rnhmeeXlkprx2HcOPx5Iuq67N5/zJ40dePjd5enQuJ0p6Ax0oSg/7A586eu5UNBFS5hk9TEkBU6MP0UsmUCUgKHhbW62K8bHR2UA8s7bR+4GeZkmU/ZPhQlH66kv9U+PBH//h0A3r23p/+U/33bopH80ZeU4bnKdpbfyyAapZyeUNpkuKQ4KCFUwQEApp0kwUAkRTaCpTmM0Vq63GWDY/kspZWIahEEXBnZ3ee7t9gqzY9MyHbts0d27UwXGf3Ll6YDKws7HKa6TNeiYuKqoKoHAFUpxOFhFCmBCGpmRFyUpyXzhTlPFQNCdjzNLoyExyyeRIJwAAIABJREFUKl0IZIUD0/FnxqLjqbyoqEOR7N6JODB8W2OVKIhNlEwAMqLMUPCWjrrtLU2HA4mPHDlba7SfS4QJAYWQ7e21L/f7OUThUiWGVvbA0xTPUGUykoyxSoiRZSwcy1GIEFAxWe+oKyhyebrW+Zx9oSQAvPOabtnIAIVUQiQV1zvMkqzetKXjueMLmqBp59giT6CMOza09/pDDVbjUCTF0VQ5ReA2GzmGLgjLM8Vv3Nz+7LGhRWe4BrVUecyzDEJIkBWepm7f0bXNYfnJoYG5TGFLW+0nbtr8wIFTw8lYl72qy34hJIcAOJrjaY6nOe1UrKx29VlNY+H4NAUf+8vBT/z5QD5D7KwBgDoyNrPUEyjjUz3NnbWWj13VvqrKtsZnt+nnq9q0W+stWzpnIun7bt2kVQyXcUNX01KKztJGBG6THoBo/BybXpcoCLAcVqIM3XFV13MnhgGgyqSnlvB8eJrt8VRN5zJGjt16qUbFZepRNpl9dmz6xnpnTTqTP3b+ag793S1rvv+Bq37wj++4c8OKqqM7N7auVITgNutpRBVk+dpVDW+WEFxBvPH8AZlUWfXToWSN21rttDQ7LcG8EEqmb1q3gGNdfii+UpvpkhiLpQOZfL1rnvMgqzieL7qMOgAYnY1WO1+XHEW5UrbfH27wOh56+vR3Hnjxzn9+4BPf+vOvnz5urnX84NN37f7GXz38tfv+/l3XVLe7t7RcMXGhRTja7z89E25w24sIlXUGs4Kkf4XWJKIuceqmS6LjiVwhXRRyguSzmhSMB9PRY/1T3a9Q0fXip0GiKCQo+bm5oIkl72t1fKjeIkny3gN96lT0R5+/60dfvKuu0dZS4/TZTbBE7gaWG/wyz7pEplBTZdXRXDwv+8zGFofdYzIrREEUpimSFPPjocRKdeGXuYpKjMTSHpMBNHOVkIG5aGt9FQBkXvnhWxaCrPgWanwFk7n6hXJbR/qnVjW4V6ocgIt6CComE5Fka7VrOJQAgOeHZn98ZDhfFLOCKFQ8S7787uvzehoT3D8ZWudzoeVSBFCaQDzftAshAEIIU9Ktx4BzotIfSQ7HUj88MNjTXJXA6p7h6a6NLTlJ1bhV6kJZIVxSvtegxYAv+AkVkXsFk9s66mpNeh/PXN/dJIrK7sP9zV7HVWubAulsd4OnyWO/prPhmTNjEbFo5BbU41aaX6SkNaR9VDbitY1BCKYSGQTkzFxMVgmNYCaa6mr0VE4+xsTIMQghTQXh6IC/2+4eSkfLNpn2/9Ut1Q6DjhBIFgSlVMGcTGeaLMy0JLffuv73L5z+9H89Nj4X/8qg/1QsvdFp+7vOpnaaWW0yKJhwNKUtpRJiYGmEgBDQaDPapggK5un5ooJb1rb9/IVTs8lMi8vGqeT8ROIj9//pmk//38HHj4fDmQ3dDWvaq1UCd1/fA4QcODfJlCjyKplnJYkqUTHWJpzMO2nz88ZQ80qjWiMChkIKIdPZwnSm0GAxVBt1DMcyFMWpuCCpTgOHMaiYTKSFnR0NQ3PBDavrLUadQyrUmfW3b+o4OjrLM8BQ0OIw1NsMzS69y8g12gxtToORo408taXWbmBonmWua3JuqrXSFPInC+dCmb8MhJ4cDg9GcrG8dGImeXw2xdIUQyETTc1miraGmicPDwqSkhWVRFHui2R4Bs2kcrVF3BsOySoGIDRCN65t3X1qmKZQuQSiPA/lF6loUayBoZC2iFQq9mUotKPR8/J4gBDAQG7f2H5sbE7LBrhNhvOz0TUt1b2jASiplEKpLnzZi1jB5LrVjb0TgQ6Xdf9kEC10YhuclqKoUkBrlCFS8QKAXRvb9pZoKpV7QZcKFWiEvFZjPFcEgLYa55A/9Fgk9ZlHjz7ePx6V826r42sPHtrbPwkLVYZgiSNdltj3WoyUjnmL1+rQc2/raTzhjx6cjK1rqv11ReOFMspj7mrx1VqNO1trUgWRLakMVa7x3l3r9EtktVq9jmXp8ksbEWyureoLJwGgymAIZBekFMq3x5UoQ10N7nPj81b+plpXfzi56AcUQs1221w2e1NPy8UbFR88N/nU4YFv/G7vF//nmTNjATGZ+ehtG4vP3//Ql9+7s7vGyLPv2NH1lo3tY6H4siM0eOwD/vkChkVFCG6jMZoqBoTsSnPyJl4d3nD+gKCoVh034A9v7WoQVGkuKbQ4LWOz0eaKmjkNSw2LK4KBcBIAeprmKcvD6VgiKzpNBgQwEYhv6Hi9DHEAQACheGbzqvq779j88L/f99g37vv8x3becf1qTm/uaK/xuaw+l7Wp3lXjtLa/Ki3OZfnufclIZSx8KpQcCES7alzhwgVh/pyoOIyvjFt/SWjiQlOp7GgwEUnnf3dkwGsxamEYfyi5tMPDaxEXEkSl02h9Z0PdrbW13XY3nYMbN7b/3buuMa1paK/xddvdt7a3pEGYk3N9ychENpmRi8VSzdmrsMvLyBbEBq8dAAKZgp5lEUCqKNh0ep7mXDqzjtH1zUaWLWJ+dStNFgSPWT+YjnXZqhiaYihqzapaAMgKkmuFFMQrgqionooGDgktxGXUQakXAQDMlYqJy6i8TnFJJJGUvtIo/loVAUOhp06PMBj2+1Prvv6Xz/7l+MGhRCqeT88VTszM5WRpeC7y3OmR/tE5AECATo3MAsBVDd7Dl5EiWERh4ijayDPnwrGEnje32x+ZC/7n+eE9UjHks8TW1O/sqBOxLKqyqMosxWgmJktRGC4USS8aEBNiZPiiIpZt+htbawAAIeSptpyeCIzMxq5a3TAaTlaZjQCwo6t+z+kxTuESYr7yPlbe7EqDjEaoqKgXtHTIvFySP5kPZ6X+YIKlEcYQz+TNhvlrRMEEA8mIop5hNILQVd0N+85MSApGJXa4gglDz7c1eOfaloNT4Sd6x7SQs6wSINBZ69rgsb+ryvnjv3/7V//2li0dtf+9seuuek+z2WgghKVpHUtr5yrSUg2lLWYoxFBUOVpf6eRsaatN54qf+e2eKr3+0ZfPtaqCo6fxB5+683ufe3tTjfPvd22dzeUwIQVRMrrNfzlwXtv4cnJAG83I6mQsa7MkqJguuQGSijma4miKoZCKSVaST4dSbgNv13F5RZnK5m06trXKdmY6PBTN+Cw6ABiI51RMai1mPUMNBuImn+dPe88eD6Q2ttW9eH6SBsZppG08w7NUlZF3smbMFI08bWBpPctYeLbephdVtbvKomNolqZtRtaq59Z6LZ1VJgAiq6pNx+kYJKq4y20mhLRWOf7zrvVPHxr4Ze/Mc+ORoVi2N5ROFRUDr5uMZV8eST85OP2r0zNfen7gp8+dmo2md58YZCgkKlhUMaroRaB5qsvG7xnEKkRe5/KMpGPljNC1zdWH/CEaoas7G3r9IW0aax3mjCTftKn9yVIMm6FQRlIYCpU1kcooT/6OjnoKwb6hqTVu2yF/GEqOBI1QjdUSiOdHswko3cQqX1u66nvH5gBAUnGlD1C5FqueD2QL4+l8S1vNr+YiNarynm1NM3Hh27sHHjs7M5DEd3//z2/7zoMTCyUyF6FSIH+Tx8XK+LpmL0XIHatrHQT/6ODIr45NLVqELHzd0Fy9fyIoKuqyXlFng7vcCgBKN7QtLcvT5TsbLhTvamhzWf2JLAAYORZjkhFE7fPKIPpKlKHNFdT/Npd1crk+xB6jYff46AP7zqpkGQqThlu2dHzvwZd/8viR9e01h3/0N3/5q1sPSlJzsxcAaApxLK1jaADoqHZqSYalAf6uRs+RiknYXOGcGDkWEyLJ6pslBFcWbyx/QFLVgiA6OP1cNO1zWgBgIpluspunoqkym78Sr4dL8IsTw8H+ySbHfNSzIMgO4/wjdi6aqXEtH829Ujg/EexudG9b3cDruBqHfde69rYuj0ygLDbaWGUr//tKUVmKvazF6Q8mAGBgNtrktlcK80sK1nMXao5fEVYybefShWqLQZDUc9ORgqToWMbIMbKqnhj1+1yWJSnli+GS1nNekuvs5vLu+IPJa9c2f+iWTWuqneXqWB9n7rS6uu3uGoOJRoyeWax7U8YlV6chEEtXOYyauFA4V2h3WQEgWRCcJr123mKMp2OpqiVdHS5z/KVIFKXqEpktkS1gQjTxH0FRtJv7a4QgKzU2Q5mwMRpKeCu4Q0RTcfXYtAB85QFEpafs0rxB+W+VEAoAE/K/jx15+A/Pje07NfzyyRYk7Osd/+nuo1/82dNv/ef//ev7//yV/3n2Z48ercK0zWN+7GA/AKz1OWGFFIFmPKGSlJD2oSYHpH3eF0x9Y1vnz7av/UJP+48399An/d5A5u2Isel0LMUYGK4gSzQ1XxUAmtLLwlOTADAISRhfsLBL9tmOJm9OxTOZfLXbOh1MAECDxzETz3jtJhohjqF2rmkenYvAEtAIKZioJc1QbX0V2z9vokgqDueF8enE48+fnktkKAomZhOVTUJGU9lYrljuF3bLls4nDvYTRHocnsFUOUUwP+xNnXUnpyMAMBVLKyoBBOPh+I7WmmaH+drmao6m1nfV1rutLpOeoShRVU06TlAVIztPulgUTq6ch6Xvb2itT47F/vBS74du29y9Y9X1a5s5i4HnmXfd0GM36UVFCaRzgUy+o9m7+0A/BagcC9fMX1I6BAyFEEJpQdZ8s3JOQPt2LleMC3KtVc9SFIOouaxgZBkKUEFRgnmpysAyNBIAY4J9Zt7AUtsbq4/Mxlc1e86PzGYlvKbRmxPEY2NBK8sa9YyiEI9Jt8FnBgpemkx4TToACGaENR6rXcf1RbNDyQIAohFl5emxeL4/kuM5GgF4THwsJ9bZDA49q2PpVU6jy2a445qu0fGACaDTZe5xGfUsvctlyRTFk4OTD++b/ubuQ3/cd+7Hf9wXHA7/4vGjoooZeoH1XDbNy/NQjutXfk4AeIbSPuz02IciKVklW9trAeDY6DxXpMFplWTl5q0dWgxbwcRQuleUXdPysOWRt7XVDUxHPDwzGEmqhGinq4wJAqi1mzP5C63HCYBMiEyISshNm9sf399PIUQv8WHKqDLpJ8PJnwxPfX9i+modrHXbnZz+765d/cD7r/3Je67+5lvW1Te3DQWyH/yfPeVFtBXRCDEUqzUqrmTp1NktLKKurnE9Ojj1ofsffODRQ8WBsXd2u589N162/knJYyn3Ku50207MRlNFIVUQlprCi+pxNaxUQrD0x1c1ePaVmDweg6kvuqAMoHx/WZYytEh19JmR2V+fGDs1E0sWxGRBPDUT+/XhoS8/dvo/Hhn40Qt9dTW+3rnlo/sA8H/uuf6Td27XhI966t091Y7K2jCX2RDNFjp8rsGKwoBKrG7yzkYveGX1NtN06oJcUrXNlBPkN0sIrizeWP7AUDouC1RBEU8OzbTUOAHAn8g1Gzi31VRm8y/Cq7OcylhaTOwx6Qu89be7j3/1f/cc7Js06Fhbqavr3tNjFxdWf+0IxjL1XgcAaEo7VTrjarfLomOt+nlSgSYX0+hesQL1tcAfSgBAWcm0vNJYrvjqiokvYtr6E9kqg+6Xh4Z+dHhCpzc8c3Tovf/x+8/9bHcmJW1eXSeoYlERi4q4wtILcEkDWlExx1y4lNI5wWUzmvU8z1A1ViMAjAYTdqOeWY7j9KpPsGA801nv1oykdFHSageLsqJnLlB3+qejtQsZaJfcl5Uwl8479BeYJ6OhBAB4bCYASOSE19JYWgMmpC+W99r0o+mYps5xejrYXV9FI4qUnseDU5HtqxuXXXzRfqGKx3DlbxiK+vIHdw389rMjv//ct//+TtjYtHl1/afu3PHTT7zzR19+xwOfv+frH7/1k3dtT8Rzcaw8UWpytGyKQCWEoyhYSLMpYygVqzfaejzOeovRwXMOngtGUkpGGJ4KJZPZRE7QlOB1zIV5q0wILEoOIABMQFAwU4qqqoRsrXcHc8VfHhnwVlmmg6nO+ip/OMEyVLXNDACyilvbG0enY61W5/l4+OGzM+VHZqVtTRa58QS0ILGiEgLkfDDO5eM3be341sP7H983OBVNGc26jFQcTOV/Oz7z67GZY2KeYqmyYfe2q1e/dHJ00VA0QpKKWYq+Y13L3nPjB8fnCAAhciCZPzcd3Vjj0JY9dX5mVaNHJYAJ5mhKx9CKQniWhpKVXzmg9iGU6CvKwmpju8vsbnNvWd8yI4ifv37d+zZ1/OBQ/97DY2uavDxLMwx1aiY0FE68tav5fbds3HNimFmoqslQSFCwgeGyUpGjkYljCJBKLfypTGFqniCkV1UcyguT6Xy9We/geRnjc+GcgUYTyeK5cMbAoqKq9EezDQ5DQaGPT4cRR61f23RucGowlutuqRudnA1llUi6KKqqnqI6HFYgJFmUTwZSepbKSipDoyJWj8+miaoigkOZoqTgYE6st+o4RPV4LRPJAiA0ky74k3m3mW9zGi2c/p3Xdo2dHwkLysHpBC1JmcGRXzy4L7i/LzEbnjveFz3a342Er33stie/+zFXte3U6Cxd0Y95kWmuQSWLTXYoXVzaJxtr3fsmghyNFEy2ttXuG/Brv3GadOdmomuaq0+PzJVHUEr1QCqBcn6mvCKVkBvXtuzvn9zWWrtvMkjIfNsKBEAh1OiyFkUVA11QxPnEGkJsqRHBO6/v2XdmHFaGgWPHWbir3v6jjV1qQn5ro/d8KKGlH8enwgfPjOXPj+BQrNZIBQK5SsrQIrx1x+o9x4dVQgqSHM7kHt57dnQ6+q4b1+/+xodf+P7H3rqx/fREAFXkLhZhR4Pn0FQYANLFC8+gMmVoUT1uGcuWEPhcVgRo0Y+vK6mFui0GaqGZh0rX+0qUoUrqf43Z8JVnTv/NQ4fbvv5I29cfueVnz33t0ZOPPfhiD6j33739hpaqoZllRtCwtat+pET6b1n4GOq0uVx2PpwvZAWp3mntm1kmbAEAtVXW/sn58Vd77CcXlhBQgCpLCLg3SwheM95Y/oAgqdptJVsUW2tcALBvInjzmpaVopuv2ni6CKZTOUVRv/nJ22/e0vFi79j9vzkg5UQACMTSqWxhKY/lCiKRKYiyajPpWYoqV3/OJvOeCq6OP5J0vao+wZeDkdkYRVEbGqs5lnYZ5ldKCBQl2ap/Nf7ARXA2GH9hKFBrZrlC8qPXr7l317r7P/aWhgbn7ESyye3QtCO0zq+X6RhcRP0zWRArmxOfGZ1t8TkpBFTpIRdMZsv6rRfvr375p1wwkWksJbUGIimN2b/INI9k8pWpnssfXEOl2GggU7CXHFcA6J8OxzJ5j1WriFAqm0a9ajw9NvuenrYOm6vT5mqzOM/3BdY2V7dZHeUH6nQkVe+Z91TLTzVYYtQuC02mcCQUt9qMHqfF57IGWXqLnrt2Y8uuDa09jV4AaKtxXbWmcV1rzZrW6n/cubmtoeqxA32wMEXgthiC6dyy7kflnwghhkJZUS4XyQz4w53NHkGRjTpOz9EcRREAaomLSC+kIQGAQgiUQtd6hhcUUfuapiifzRwShKlIuijKXU3eY0MzgqTUOcwAQADsdquC8csD/kReemks2h/KlK3q8lq0HdG68GICgEDGRMZEU6mP5UWe47Z21grdDX969vTB/qnvT818s29yIJVtNrL31nnbFNrCcpoxpxJy7bqWI/1TANBtd/enIriU8aARQkDe0dV4Nl2gGZIs5jiKOzw0PSPIDgOvLZ6I5p0WQ0GVjCyPABk4VsGYQhSULM4LE1Iy/RkKKfiCNalgorVhtht1kVzxV4fODWcKTgO/q9U3Gs/0Ds2sqvdQCG3wVoeErKximqF2rG7oHZnVMgPl8TVeECbAUBQmoHUh0ExSfzo/lso3WAwNFoOCCQKSEuVITnxxLPLkcNifKvxlIGjVsbzZmkolLBxl5ZlMQSWY9EeyjS6+02ufTeba2mqnR2daLbypytk3PhsryAlRzEhyUVH7Ipl0lrOZZYZG/aEsz1Ij8SKFwcSimVQhIyqr3RanmTOxdFqQmx2GYFbQs5RMCFZJt9viNfIMojAh21fXp3PFT3/uJ4888Ngf957d1FV/59t3fPUTdzjqPT/5zN2ZZ772nc/crrNbb9zQ8q6r17w86C87VBqZZ9Fsa7tf+aHWJ7jLXnU+EdGsfANL7Wz1HZmK0Ajt6ml58uSw5kLU2S15RdEoQ5WqpiomKiYsheb9T7yA608I3LGxY9+Av7vKdnwmQrT8FQIVE5/ZxCG6PxqmlqMDbe2q3392YulFVIntekOtzuSxGI0MPRlK/ObEyLNnJ/7jl8/vOT6ysdW370ef3P/DT965sWP/4GR5EQSgVBQkqISsb/P9/vnTzxwZ/MEjB0cnQh/ate4/3raNthk12u37rl67+9TiNsOL8M7uJovRMBJNLbuhlUY5lO4wK9Hlr1/fcmJoQQvqcoPheqslkM0qeJnH10qUodYa19jcvOV9T3ejy8pcU2PbhtT8sfM7ddQP3nd1+PGvfu+fbjfrmc3NvhfPr+h9LSL8eEz6ygC/JKvBVI5CaHNLzUopgu3djZUlBBggWioh8BiN4VQxIGTbqp2joTjAYiXlN/Eq8MbyB0RZNXJsLi8Liqw3MjqaMzDUE6dH3rq541KLXhkMhJP7xgI6MWU0MutW+e69aUN1ne33z5/62q+ef/7kaEF8fb3bkdmo1uxMXyHmE8gUu6svcKX80ZTbunyq5LWjdyyguHTXrG48ORvr8szbqWmhgMkl1GkUZXG/kksiLUjedrfPalSw2uZ1bGjyEAvqcDqLglzZfKDsGFxkKA0Xud3IqspVuJTJbNHrMPuT2bKQ5VwiU3WlZaNmI2mjft70j+WLPosBKkzzwVSs2WTPFsRyqueVOgOLoFGSECBCiIrxS/2TU/0Bj8UIAIKsXJHmAwih3YPTsZwQzhT2Dc387/ngj/906NED5zUZ3F8+ffyPL5zuqHMtWqq8XxfZwXJQ2aznNR+GABz2h9ZaLY2ls11rVwwADV67nmOv7m70Nbp++fRx7dtyiqDObp6qkOVeFMgvr4sQggnkJLnapJcxRgChZK651jUXTZt0nJ5jKa1/WclqWTY5oO2RxlnXvhJUVcI4ryiiqg5Ekmt9zpFo5vRYyGE3VXvsv9tzeiaVnU5mBFVNSTLNkK72+q8/eujRc3OSqhwYjyiYaCtZxPoAAJUAhUDFhEKgoylMCIMQA7RnW8fPpkL31NrvvXVdjd30i+s2famn9e7Gmh1eb5PV5Kio9wCAbasbKISODUwrmOhpZv64EAAAUSVbGz23dNUKGJ2djmdFKZTOp0XZbdIRAIWQ2UiaoWgGzYfqBVlhaaq8neU3NEJaT4ByMbFmKmk/0DGUgolRxwFAKpmdTeebnRYFk3XVjslwsrXOQSOGoahGmy1VFB0G/c5N7bsPDWgOEpQ8AQohirrgIWCEeJrGhEyk8rVmQ6vNqIW3X5yMTaWLJ+fSTw5HEkXlXCjz42P+85Hs/qnEcCSbUanRZFGQSVyUowWJZ6jTwazHah6NpaweB61jH+r100A117rDkTBCYNBTu0ejjw6HE0VRxpDJKylBLsrqXLZQVMlMRgBEWfTMSDLvNer0HB0vSoKiBrJCUcE0oDanqTeYMTB0QhAFWR2NFW/a2VPlsnzw/Tf+w93XyHZnTV0Ncrpklk4hkhLljCjPFpRgVrimq/GRY4OSoiSLkqCohoWhscqcAE0tMLIxmZf90b5FAKvc9sFwUpvJ2zd2PNs7psXG65yWoqxoKkNIO16EYEIQmu9QAVqeB2lyRvPu6KZm33go7tOx5wJxVBFlRwC1drMoqUqFjHUZW7vqCSGHK8zQpejwODI5IVeUFAX/+omjR4dnnzjQd92Glq98+Ka7runWDPrruhr3D0zjhUXJWj5Q285bt3b+bs/Jnz5+ZOe6lu9/+Da9Ube2tupgqekeQnDHxo5lBXzKSYC1PmdfKDmXzMBy7PnKVgBlrFRCsKaletC/4MeVDYZrzZZTwfn3WheC8s+WpQxtWVX39JHB3YcHjvT5f/TooTNjgcBs5FNv3VJ8/v4/f/net29sw6BW68xZInpsRpamVyohWET46fE65tL58p8cSwMAIOjwuSKpHCw3Cc0+51ToQkHz1rr5OmkAMHAsECLJ6uYm374BP8DicpQ38SrwBvMHJNVh1M+EknUuu3bmHZ+N9U4EW5cUE79O6AslzDzbWm1bVeMx0Fy7x9lYZfv+397pshqO9U9pGh2vHyYD8a5mrygrVaXqTwVjGlC9/QKrbzae6Wl4vXIUM6EkALT7XIKiVlWIC12cbaKq8/d9jddLVg78VIJl6B6eP4gA0fT5YFzrBdZY7Ywmck2vsOPbJc3ooqwYKvIDs9F0Y7VjNl1oc80nSc/4Q1r366IijmfT5QLrRSbsKzLZh6ej69trACAtSAVZrVlims/FM27rK0v1XGRmM4JcbdFrz35C4Iw/xHOMycBnBem1K41qFvBQNPXfewc++5djn330+JeeOmMh2Tt3ren3hz/2rYff9S+/+dbvXzozMre6yVveSLRwxtClUgR6muM4VO+y0AgdmQ5f11TtMup0Jd9YJUTj8dd77SxDX7eu5Utvv3ZkLvbi6VEA6PE5AcHZUExQVJuJ9yfSNEKYEAljQVUFVRVVtaiqQumlEBLOCwxNsSwtY1xQ1YPnJ7euqud0LK9ji6oqqqqMsYjJ/OKlcbRlC4qivU9IEgApf6WjaROro0HlKLo/nLqx1dfqsoQTeYOe35+W83lBFJVIKo8ASQqxcVyN1yFiMubPWfRoMpGvNOnKMVRJxTxFUWiej1SeLkwAgfwP3e3f3dzlMfE3d7eZ9bzNoM9LioQxANj0OqrihNUyD3dc1aUlVdqtzvPJCF2y7xkKSap0c0/dM2OTDw7NTMfSNEUlimKN2SKrEiYEA3FYDeVwb1FSdOxiHlYpjF3pJFAAgABkfGHjOYaWVU2RCMZiGQC4oa2LKvn5AAAgAElEQVSK6qwZCCa0UHeX24UZHMnnVUzu2NG159gwLqkG4flUDAUALMUVZIGnqOlMYSJVqLcYdMy88ToWz784GTsVTNt0bLfHzFDIxNEGFjn0bLVJ5zPzNMPmc3lRwRQGHU0XZFXHIgScpEIwmXN6XefOTVoY5i3rW7OJhNXIeowMC+DUMwwNiswbjBJHoZygxAsyj6DOrIsXpLyCXUY+XpCiRTGUFZ8aiRh5Ji3K1Rbd6VAqXhD7o9mjM6knR8MjycKWNS08xxCz9WyimJPUjKQaOdplMk6nCvtmUiOJvF1PHw+kn5uM9zT5vvPi2eNzyeOB1IuTsWfGovum4rtHI5VOI1RcX9pRMDCcQi5Ybyoh2xrcL08EZEIYCq1t9J6ZDGpGfLXF2DsV7m6uPjUyqxIiqpijqXJ0nwAQmM9KyZiwFGIphABuXttyaGDqmvY6ADhbEghmKKRgUme1zGayyaK4tDEZAGzvbvz5E0cvkiKotZunExmKQteua/7KfTft/thbwmZ9fV1VZfjfYzfxLK2X2ZF0XLstLB1L48dvXVVv5LlwvkAh0Hr6aqte1+A5vbIcJwDsaPDs94cJQEG6MI1lb2GpkCisXEKw7I/LDYYbnRYRK5p6waLfXLeq4WipLV0ZPpd1eDr6mR8/+dyJkQ/cuGFbR+1n3n2dVgZQhkXHUxRFI7S9vbZ3ekXKUCXhp9ZqDC9UL/VYjbFccX2j97lzyycZNnfWvlzB/qqzGheUENhNOUEmmvIEIZIqy2QZF/FNXD7eQP6AgrGRZXgGTQaTnQ1VABBI530WQ99koOs19+K9HBQUMS4Imza2njMa989EAeBUOIEY2mLga902UVbWtb5eqv8AQADi6YLHYRkMxMvB7KFUbCqeN1SQmBO54itto1sJVEoHa4+RReJCwXgWAKodlr5wsslhLiqioEoZQXReVFxI8weWdQNWMqBzomzimPVe+/VWw5BJZ7Uas6rQbXd7HaZ0QfA6zMsttDzIErtzKURFLbs0/mCiymacjqVTRbFcIBFdyNtZFq/IGQCAdH5eWHo6mQWAuUw+K0gAkBUkzW2aqigmvpzBL/IbAjAcTXVVuM39MxGP3QIAOVHSX4liYn86v6m97pM3rvn2O7Z+9x1bP3VVS43T0lRr/8L7du3+1l8/9O8f/Ox7brhta+fFBymbLKQUUKw8aURZAQC70QAAQ9HMtkYPQyMFk0pDXMR4IpSwmHVGI39VT5O30fW9P+8vKoqoqtsa3E8OTw6moqyBOToXyyuKhLGOpssvPU2zFGVgGB1NMwhlBdFt1PMUraNpjqJiyZzPaVFlzNO0nqY5itLTtI6mWIoqvZ//pZ6mDQyjVanqKVrPMOVVaDuCCZGJemAypKrkI9s7Diay7hrHRiNFCGx3OqbnYpioSVkoZDKI5pxObyoZ7KwzFyWcKkiVdpL2fp6Xj4nmLZD5jryEQpATlWqTzsDSNIW6Gjw8TSMEFp5lKQohiOUFp8lAVXD6EcDGjlqzgT8xOK0SggAEBWs29GAqPJJJ7axv4IAHgOFwkqJgJllwm3UAgAhMzCX0FayzrCjrGKbSHtXM06XcFQUTQcFlzqeCic1oZMweqwCnDvaO+kMYk20tXkzIkalwWpKiRXFGkOLF4lwmz9LUteuaj/T5ESBcIafDUkjBRMUkUhT9mXyzzdhoNZRI7zCVLjw6ElQVjIDYdayRZTxmXlDVOqvBpWOrTHx7lVmgaFlWUnmhIKvdHvNqj8Vn0rtMvNtiiuQK1XVV585NjMWzXp/n+NB0k0Fv17EpSWR52WRS7QbJqecKMolLslVHWw3sbE7UM4yFp6qNjMfICyIuKqrHwAWygoGmJ1IFSSGbauyqSqrNPMFkTZVlrdt0/aaO+Ewonilur7XRQHKC8uFN7bOZ3CaP6WpvdUYubK2xvKPTe8va1qm5iEvHbPRa9Qw1EsuKKqbRYpqWjAku0f01ko9KSIfN1ZeMlnk+1zb7jvhDhMAt69qeOjVMISRhbDfp7Rb99tUNj+3vIwQ4miIANIVkTAiAigkQoBBonkDlGu/Y2H7WH2p1Wk7MRBVMCAGtioNGqNZomSku7rQViKWfONj3g4f27z09dvHQQJ3dPJfMbllVPxdKdtdWGTim2WlhNQpfqevfrtVNJyfnUOlOojESKy+fmza3n5+YN3br7ZZIttDmsmgsHQC4bV37k5eiDO1sqQYAQVFhuej4IiFRBICB3NDVuLSEYOmPAaCjyrp7cPqBo8MHx2NPD02PhLO5IhZVOZTLj0czvbPxh06MJQviE6dGlo72wVs3ffEDu/71wzfftrb5vk0dzHJ3eJ/ZPJ3ONFTZRgIrlhRXEn4W9RAAAIdelywKRh2HEJpbLsngc1kJkHJpxKIRfGbz0dngY2dGBAX3Tgc5mmXRFXgSvZHxBvIHBlKxWFpodTmiqWy9287TbDBb8FmMI8H46uX8gcsxoS4HBUXUXjqay4vqF7ubayOpZxKZfz898rPRWbfJQAB8LosgKU3Vr2eagkDvWKC12k4xVCVfKJgteiocgHNTodrXpwcCIRCMZ1bVugDhmVS2zq7XMzxPcwUR69iLXcZYXd7pX/YmpSFWEIws0+qydrpsDE3zLFrjcgPAcCaezguWhSQHeG1io3lR5iu2xB9KVtlMsorH4hlPKQ8TzRSueIl2Ji8c7psiBCb8kcl4JpAp5EQJALR/AWAqnu5p8MDlncnL/kbCiqBKWr+zRFGQVEkTGx2ciwKAz22N54W0ig2GxfP5KhBM5dYY+btX1bnN+iqz/vquBh1Lt/ocmlSIz2XtbHTfsKEVFlr5ixyAZVG2ViOZgonTIQYTAqfnou1uu4FjFUXV0TRLUUaGWef0TKQTc+FUjdOq2fFfvOuaqUjysZP9Y+k4yxMLo5uICY9MJWhJSeWEsoFehlLSxCQEEgXRyrMECABkc4KC8VQkqWKVqiA9XyTZpWBCIVgUmJQwJgA8wyNQa6z6rz/Te/8zfQ6LgeWZxw6cL9hYh908Gc/8dnjqN+OBLEIFUalyOAYnAzzoKV4aS2ShFMhXCSEAoow1jg1DIVHBpMSk52kqlCkqRK0y6TUDaNAfrnZduDNQgAqyZOJZWcUE5pMAlBYZbat58dQoBuiwuMZzcQDoT4ZW2TyrbW6Gpv5qe/eLodTR0VkCSOsKDAAqgWQ2r9dz2roUTGRVteh5zfxSMAEAhIBUEP3L7oFmxCMApaQRpGORXk41buoSZeWj337oQ99/5FdPnRHPTX/xxd5/ON73w6GJR6eDRK8fC6ZoCl3V3YQQHOrzV5q/WlpjKltstFhrTKy2FgIQLYgv+WN/6g9EM6IkKzlJOTyTPBlIJYqyRcf5k/lqiz4rKilRaTDxTh2FAOqten+yqBBVz1IywTtbPIPBGEKoa03j7FQo+f/Ye+8wuc7ybPx5Tz/T+8zO9i7tqlnNlmzLlsE22GDTCZhA8oX0QAgE0kgg4UtIAoEvCQQCmDiEjmnGBlvuRZIlWXWl1fa+M7vTy+nnvOf9/jg7o9Huqrjwu67vh+/rXLqk0czpc+Yp930/krG1v+2rh86cyRe9blyp0qUyY2pMQTVDbrY/5A652YJqMjSybeLi2QNT+ccmM21+0S+w3WGPjclMWYm5ON2ytif9rX5RoOkWnxhysYenC3s2teF88b3XtN7QHo66+b1tofGivqToj56dqmgGJkS3yGxJKdLiM2enfjiy/I1T88dTJZailiT9+rYQqRV3TJto2KYQOKPo6tG/s1C102XZZDAeHM2UsE1YhO7aueGRU+NOAtDk8/zi/MyezR2PvTBWj7A1CzsSgkvZAd000HFyKtUd9v3w3MyppfycrOoYy6Y1VVU0ljmfKhgWJgQePTb22e8+defHvvbb//yDicX8b7x+VyLsTeXKa1sEK+V/m8T97oph3rit68FDw6Zp+QVuMl+p75iz9CTCI2t47TzN6bWmRGNVPuwWJN3c0hSus3SuhjJ0U1fTSEH5yelxUvtII7b3N58YWynek5VHHOpJhNeVEDRaoDq4viNx3+HJLz438u/Pnnt+pPTr9z31mn976Np/+tldX3j8bV997CM/OvKlJ878yfcOp3UmVbxA43Fw7UBbplaJ74/6T645DwjAL/CGbffGQ4fG5uAS6GwKzdYYPjGPiBpmCGwIRHRkzhUqFEI3D7Qfn06tu4ZVOoplSf3e8fGP/ujIW77y6Bv+48DnHhr9t8fObe/rmlhen3H0Kl4UfoXyAQAoqwbG9qGhma7WkIvhS6o+GA9u7fhl0WMUSwcAF8M7C4VQuiSfmFi458Ytn9+14a0diW3I7g0HEEBT2Fesqi2xl+LyeSnUH4ROsIsQzC2X2hIhzcKeBnJLUdESDd5KmbJyxUr21UOgmbpgV7W0bFna3pHkGZYQtFBUAQABzBerjWSbtcDraaEcXCoEXCzLYZcAAM0CNyipIsU6rPqlXDX8Iik0V4RiXJQPLGRLW7uTPMtUNMPh9M9kilcUD1xNyL4KJUX5l28/veN3/s9v/9P3BwOe6cm0ImmZqhKoKbMzZckn8i9hzXVwFCPQnEBzPM2dWiw8OZYpSMozC/MPj0zyHJPd2vx7R888PJteMl7WI9ghCy2U5ZaLL02wIW2zCTk+Mh+rEdsaUwIHjRmC3XDIje/MVxXnF/d4Kru3Pe5j6ZKB6TVkp9lMsa89qlvW2UKmqcPfv6vl+w+d3BiIbArFbuxoenR0MW/hYCSQLq/+EQUAp1ju/D2raG1Bj45tCqHJVL6qGE8NzXAMU2co6djkabYxamlUEdAImSs2o8QGIAC6bbMUxayYqqJc2ezZ0pzYHEv2xWcp6pp37Gm6abDQFXn2zPSOuPc32pvdGNumFRDZ7b1tZyYXLEyOzRRJbeU0QrplMTRyaq6WTViaqg+fpgBlZdW2ScwjOqSO4bnMDZs7aQQmJhQChKCqGRxN8wzNILAaAq/X7Op96NAwtgkA0i1jpJTp98cBACFAADe2xd+QCM0Wq5ZlmxgvV1WW4uayuaBXjPvchKyEm4ppotquGhgzNRMhpraHBFZ6Gg7d3AlbnbBJZJmueHhvqz8R8m+5aRPpTz5+cAQEttkt/nFP2ye2bnh3V0vURDZnLZarBsbXDrY/fXKCRshhTFk2masqC5LS5XfVj0u37JGcNJZX3ByNMSGEEIS8HMNQ4OdZhFBO1jRMnpvJqyZWDMsiSGfdAaRvTXg0MOdK6tl0VTHs85lya9iXqSj9m1sXF2dGlpciicDJc/OZHMXbfEE3k34WEMMSUQXlxGJ5NC0ZBtYMy83TBckoK6Zs2DpgbMNYQd4Y89IUMjExMJkuKEmfMFWUO4OusMildRsigSeOjggsfT5TpRGiKbS72V/Uradnss8vVBer6n0n5382ugQAN2/q2uaB37+2c1uTX7XtwZjHzdIGtg1sz1UkCsF8VXHuGa6hOSPQnGwZff7ImULGycqu74g/M51GFACCfQPth8cWOJqyCWkJej0ce92mjlO1mNWyibehLLUqdneu9a6eFgD48fGxk7L+yVMT3xif/8LI7GfPTPzDmYnvzWZGxjKfuO/R6z/wb+fnlnuaI1/92Nsf+uf3f/idN719/9bX7ug9M5G2CFEs3MgCWslhKJTwuRGAYeLbru1/4tRkl989lV/dbdjd3Xx4dL7DHbiMy1C9Kt8S8M4VK6soQ1vbY5cKcx3s62w6vpiruyRzFKtjs54t3Lar/8DRMWjodsKlJQRrKUNPTSwmQtxbu6OfuHlTPwuDfjOQyWSPn8udGPYtLW3lyCfu3v3l9978uv7o0cnVlKFGD9O1dX0HzrCz3mQ4U1bW/q+D3RtbnzpxgfCzsyUy3DDgjGNpTAAh2NyWmMmWyHoBfXs8OJ1eyX9OLGTHc+U//PGxr//Xzx+5/8nSqZE+rP/Du/fsbg+l8qvnpr2Kl4CXS/z9fxHz2fJAZ5wAnF7Isbbd0/Ti2OQvCqvMRg/NLUkCt6c76RM4r6oFeC7kEhBAMuIvVZXWVzQfWIV8RUEIAh5RXy7UyS2KYQGAp4G+n6vIr2AlWzK1yepKCTBTkhN9sXv2bSlqhmJZ5zKlnoj/WKaQl1XPZfUDL0FMnJP19qAHANIlyduQbCznKpHAi84HLh9SK4Z1kZi4okYC7paQt6TqjtnoTHadIQAvHxG/+6/ecytF0x984vg7t/Z8+/GTf/v1A7KmT75m4Q03DKYMaSSV35iMXU0ycMWcYTZfVWX7X54YCrv5impO5yXdsG5U7L/ctvHR4enBtlcgo05XlYXCBfHZkYmF/YOdPb4LHbMzk+n33LZj7QdRbf/rR7HqWLBNGBoBQK6q+EVBUqypQrU/EpgrKjN5MyPnk7v8kRqzqz8QPsHMeyLCRLWwMRilEfrwvut+9zM/ePrU1C3be65pjrAnxg2ATp+7XJGXK0r80pleRlL7w34nfjo7s7yYLf14dHlTS/ie3YOr1MMsRdWbGA4smyAELKIIAQQIE2ITwlMUAtCxjQkxsV0w1HeGk7s6gkt57S/GliKyOT+5/Mfv2/5ATi4slHf3t52aBdOwX7sp8boe378+9HykpXuEyRu4y9kQJoQgSsNWkONgpbMBAEAIAAJMSFHREELxWrFgqVhpjwYJACBwNKAl1QjXcjYGIYf8bdmEpqg79w489NxZyyYmb29vTpYZnUGQK0mpQnUpX20y8WnViDaFAWCxIneGvNmirGhG0CsYGLtZDhNiWLZTttAszK/pBFrEdiEaENJrfCQEQAFQCExsMzTt4tlrOuKHKkoxk//KPa/5DrH/8WuP9YR8HKIYCjWx3DjHBARhMluOdrrvuHbDp+579M/uucWy7amySiPU5Xc751mgqbJlFw19WTHCIhsU2Cdmct0hV17SWRrNl1Ufx3A0lfDwHo52MfSyokuGVdYslkF+kREMhqMQR9EFyXIJdFXXJxWlzMDsRLpcUrUqzB2bN3XdQ0xdqdgQbfazBFM8BW1B4WxeswywTDAJcBQqq6bI0za2kyGx3ecWkC6Z1mxZFVmKZoClqUemMhGBM20yEPWM5eWSanQGuL3ber791JDi9tiE/M+peR/P7OlsyxWLs2Vlb1tkQa3uawoPxHw/p82h2bSqW2lJS3q4bTE/jdCKYwuiXlgqUgjGS3JvwI0ACLmQ/tEIaAoxDV2s/d3JY3OZa9vi1/a2PnJq4vmx+T19rTq2e+LBpMf1lu8+9Wf33IJrsy8c1JN2q8E5yvnLnr7WLz5+Iq5Qi2OLb3W77trR+5OjozOnJh8/OHzb3g03bO/4+9+6XWR4VKv9O5/at6371Hjq9us2eFlm1TerjpjXNbSQ2TPY/vCx8X07e1IVBWppifP+ZMiLEMqW5XqUhBooQ857nKq8w613KEPbkuGj89m97XEAeO2Wrv/9w2f+8k371m7dCfp7feH93U3z61UWHLxmZ+8TJyZu2d5Tf6UuIUiuYb3edf3gdx47edO2LgA4en7+8MTiyYnUwpNDPwh7BzrjbRtjv79v90B7POhzGdjk6JXJHmVJnkivJvzUDU+TEX99NnDdKs2J2p0qHiGQDHlHU7n+5GqnB1gh/KysBwDaAp7Z0kUHm/C7spI62BL95nOnYU2VBwAGOuLfePiF3pZI2Od68tjo6YlUYqn06Q/cddv2Hp9b/N6p0S3t4aLo+tKjx9Z89FW8aPwK9QcsbMu6eWR0Pu7wYQh849TEqcnFO7f1Xumjrwwk3QSApXwl7BUBwC/wAOD47qdy5YDXtZbH8nKALv52jS9knfJqo/VYQdYbTSRfcbNRhmI2BWPO4sWc1y2WwTi4kJZM83/Sy3/xwvC3JxfOUIZwBT3xhXzgKsXEqmm5OAYAUoVqW/SCm1CxpL7iEx40ywo0mKWenkx1JUOSbmqW7dgpLOQrW9svt9ErhuNrUawqEb87GnBbLm5jPCi4+Xtu2xm6e+dfvf+OjrbY1x45/rnHh85nzZbolVO7q9l6VtF290Q+8+bdX3jP7ndvaipOjTM5bSARBkJiXpf48vTENiEEYLpQ9fAX1jO5XOBFmqGoOmk7W5I6EhcOB6334wHrHQ5TE9HmqopP5DGBY4uZf3t26svPz0RF+9oO389HUkfTRadMbthmVlK2NCc2hWLOD//1gx3xtvC//uAZALBse1ciAgslXTNjPvHMYk41V5PZaISGi9k2d2Cpom5OhBCADfDU6enWvdu+8r6bowHvVLYE66GeJDhV6nrMYdg2AtCwrVpYtbBTiHWxfEtA6A15TJscPTX1xo6kRdOyrLdH/O/at+XpFyadomNasfxu9tbNnUG3IElVGsHppUK91m4T4mHYxkDKOX1OGT4v6/VTLDJsoaK6BY5CqP5e1TRdLINrzvQshSqGRSMEBG66pvveh47+7/9+9DNfe+JP/v2nd3zkP1/3ka+851Pf/ugXf/a57z71kydPz+WrHpcrmy1aFRUIObu4rNk2RqhiWjlNP7JcOLeUoyiHyETRCKkWpmse+ZplczRNLh4+5zzWCAGEEMtQDIWCHhEAPDw3tpjd0hvvbovs8AjPTi8BgIdnEUU1hV2LznQ5hF67s++7z51dkvUuv7u9luNRCM2V1QNTpcmi1OF3BUR2OFvVTDxdlL0CS9NUWbc2Rry7WgJlwwy7eECwKeaVDFzVzUxVk3V7QUPfPDqalvTzSuWRXDaj651uzy3JZtnSbt/RfeuWjvTzp/MnR9qb4mfG588vqxwDYRe3NeEfy8kWgEDRPEthbFc0SzJwUTbcIldSram8HPcKAk1VNfOapkBBMmgapUpqxbB4lvra8bl7j8/6BW66anmToe88PWQhJLAUTaE3DzR9YE+vyDPdIk6XdWyT3rCHRujO7b0/PjqSKksZ2Yy5ebpGxFqU1WXZGIz4oi7BxzMvLBctm9gAgICu8XxWsobahdjREj1VI5Rf29f6xNlpZ1VNPvcvzs9ct6nj4aOj9XC/fita9oqOhbl4xMHt23oePzUmK4ptWF++/7k7//SrS4v5d+0dnP7+x7/4R29qawmDMxuhZgbgLLft7v/pc2cv/1hrCXplC9+4pSsgcksF6cFzs2vfs3+g8+jUOmT9OlZRhqq60Rf1EyCn03kaIYZiGilDZM1CUej1/W0Y6HWfZgRg98a2RiNR523rTiEAgA3tscdeGLvjo/e+7a+/MTKbedO1Gx//w7uS+zf/+4fefO9H37GtOznQkwj5XPXr5WzxUg2HRqJO42zgRiS9Xt2ydvc0j67JKOq4ZXvPsdp6BuPBYwsXDUdr9nvSVUnWzfF0fj5fXKsJHuxMPHR4+CNfeODAsTHniOI3DGwaaEtG/B6R64sHy7LenQgtNeiMX8VLxq9QPlBSzUVd//Th4XDUq5rWk9MpABibz3TGg7Dm23g1QdKLxVJVSXhdy+VqMugDAMdx3/kzna8EvS9dxXspND5lplP5nf2tDE0BgFwzNs0rerghln1FzEYvdd6WqsZokfzjQyM/Oz7f3tf60c09n9458O7uli0252IuF1Ca5oV84Covymyx6ndsdhiqKxl5964VHSqLqVc24QEAjIm7QQeZLUm9LdGlqgIATs1pcrnArxcxk4ur2i8KhariEfnWWCDs4sez5a8vZj7zzDCeKH773MITcwU16r67t9VPaQnvFTLMy2y9cfjAsqTc0JG4pScJAAOJEAAQQoIe0c0xAPBy8gGbEIaiCCF5RfM0rOfcQjZcC8ucQDlbkjsuFtjUb2/UcDJXoU4SwITIutkVCyIEMwUl4qZtmyAAU0eIAEPgXK6yrMosYo4en50rXhSyf/zN+0bmMv/18AtffOzMAydmgh4mLSnNAe9MrvSph88OpcqN2wIABIih0WxJcvb80GjqQLryydu3XNvd5OfZ63tb6muu5wB1vkSNFr8y8FjHNraJgW0vy4gM7Ui3KUAchdws4+ZZhkKTs5mOsHcsV97YkQi5hb2bOhCgx45PVnU77mJyirEsa/fcuPn0uXPLWXIilS/qpg0EE0dA7JCFbBtWAjIDrxj1FBQ96nHlZI0A6Jb15PHJW3f11ffcsonIMMzF0l6OpkybAMDeTR2dTaGP/NrNn/zN237jHdd+65PvOfTlD97/qfd9/oNv+rN7bvnN1+8Mh30CNtoS4fd/7ofv/sfvEYpCYP/FmbGvji98fnjyfybn8zybw9jZE8smTpvFarC/RABmgxupU3JmKETIyhSzoEvYGA3cub3/saFJG1Eix3XHg9i2Ty7mBJYVGTpIiU0R90K5gm2yZ3v3ibOzbb7aUBSAkmoenC88PpObryhRD6diu6AYOraTPsEiRDUNjkaqiV08HXZxDEW1+gSfyM4Wtd3NAc3EcY9Q1i2WpecE41y5KNj0Xl+glXPxhPGwzJbWBMtS7V3NlmG2tkR3be2bWUg7h6Xa1vl8VbNIm9tP8VrExdq27RVYIEAhCIksZUNOMyeL0lRZQTQQIAJPqwamKMrC9kROVk0MCOVUw8Jkx8aW08Ozd3RFbuqIxNzchoi3N+z54PUDY7nKxrDL1rlnFtLODbCpPf6Zp85RhIgcVTYsDePTufJYUerwixq2OZoyMNkQ8i1IKkchGiGbEATA05yKjY3B6HAxhwAQwKZECADOpPOYkDu29Tg2/DRCTUEPAOwYaD9Z48Q7F06xsJNMrqsiwITctGNbcWrh7HzmI+/c98wX/uhP371/3/ZeCoGLYwuGDgAMQg6JrnG56/rBA0dH1y0Z1NEW8i0Wq7fs6P3RU2fGC9XMxe43UPP77/IE16UMOXnIG68fePjIKCakye+ZL1ZFltmcCB1byDl58jWd8RemUqT2gFq77GyJuAXOmU0GADzNDhWWTRufL+UQwG27+n58cPjpM9NDi4WyapRV48Rstins/8kL6yiVd29snUoVPvbu/Ye+9IE/f88tewba2qOBLcgYg4YAACAASURBVE2h5mSYIOA5xsuvo5G7lGdRI1Fn1WxgBwjAL/DDmVzIK06tly046G4Oj9emGdRbDc4/W0T/lJI/MrN84NxUVTUPjizy62mC79wz8C9/dNcnfvO2PQNt0YBnS1MoWftpSPhdDKIdPWRRUi9/uV/FFfGrkg+k5KqG9Gaex6l8mqH/cWj602dnzmI0uVzsTYTgEsHEK4tlSY17xOWS7DwZy6peD6RSuV9KPuDAtDEhpCipXclwXtEAQDJMADhbyPDA9jeQlF4Rs9HGEJOjGoj1y7k+P9w9mFAAv87vvTYWAoCNfm/ksuZCAGBZFxEKEQDUSoPr/IAAAEB9DtTxicWpTLFYmwE5PpeNvtL6gbKmRxsE2dmSDAAZSV0sy4puPnl25tvPDTkJwyqz0ZeDUlV1C5zfLXpdwoSNUkPpd27rfPuOti++77qvvPfmv3nDjps2tFVVPRm6nDT86lMRybBElnZMGJtrcnOfWxA5Fi4eZ/GSsSxpjf2BfFWJB90AQCFk2WQ6XYhemuhVP5C1R0QAiro5XVFsQtKl6qa2+PlM1cd5BY4WWXq0gM8tVfui7rmi5GWpsZw2k6vMZ8qR0IpQwQnT91/T09sceeC5s90+4Qe/e+sdG9rHciXZMAGgqJifevjcpx4+l5P1enBPABAg1bTGs5Uzi4W/P3DatZQlsgoAhoUbyUKN+8lSlGphCoFNCCagYtsZE0ZTSGRWVxAJgGIQhgIEkK8oiaB3X2dCM6xzizlMyLWb2n707Nlzy1pnxBN186pFXre1W1I0QmChLDmMc46miE10TBQT2wSwTRSMZdNSLaxhrFpYwrRf9GqWnZE124ZEyAMAOradGbSSbuCGscHEic4RQg4TicAb9w6ksuU33bD57Tu3yLxFAEJB784NrXffuCkY9qZGZoYqCrLwnl+7EQ223v/oGYGnP7yx+Q/62z400P3OzuZ+hmkTeb3mJaBbGGrl5Hr9GAGYtm2tDCqm6BVvU0qgaYpCQY/o4rm7tvc99MLYxHwO27g96t+SDB+ay8iGiQB5OI5h0chyaVFSb9/aLXLMobMzlk3SVf1cprok670h903tIb/AnF5W8op6NFVKePiCarhp2iVyLT63i2cNYrsYOuHmlqo6RaDJyw9nqoiCdFXrCIh5Bcclupl2x90iIZRl2ZZp0yyEPa7ZQlVVjYHN3XfcfeOGIDfYkUwtZYoa8XJUQbV8LK0YNgBCADaAZtkIkaifN7FtEDBsm0aIRhDguZGChCjwiAwgUtTNmJtr8vLYxm1+kWco2UZ7dvbd9+z5pZIsG/hEulQ2LIJgNl9ZllSOZtKSPlOSh5fLQjhSyOURBf0hL09Ty4pGAAYjvgDPCjQVE3nJMLKa1uoVZysKqVW4naAW2wQT26oJPLYlI8cXcjRCgNCuDe0PnBonACeyRSHs29Xf4tjRQi27cyYe1JtUVdPCDYx/QuC39/ZUkHnXzv6ezjjHUDxNeTjaEeq0u/2nlrLruo7W9bWrlAmNCLkF1cI7N7S4OYYAHJvLOO83bNvZ+o7u5DPDM7DylSSYEJsQmmINbDiXgEFooCM+NJV2ig6tQW+6LN/QkXh6Kk0hxFDoNZu7HjyxIqFeBQIwUsoRgOvaoo6hKrbJSCnX6vF1eUIlRT82k/n56Zmm/vbf+sHzv/7fT930+Qdv+vyDH/zWM3/7wPHj63UtkhG/S2Dffes19VecqcDdYZ+bYxlMD2UvZB2NNP11Gw6N08QuIyHQbGsgGT09e0nL0UYpAgBsbw6P5yrPTaQ/+qMj7/3vp37v3mN/98jZf358dE5lhkZWyxgc3LKjt14bagt4ACBZK+r5eb6oqbqF4wHP+KV7FK/iKvGrkg/kdNWFOQBYmsueenLoya8fOPvNJwNHRwzWF6oRZH/ZKUFe1uIeMVuRnSitrF0YapsvyxvaXoEwcS0QAEezGjYOHBnbuaGlrBlFRc9Z2LDtJUW/f2ja0O1MVc1U1e89dfpHh85dnsr/YmE0jIw5P754fiHzuk0dHUFvslaH07ERcl0hHzANEwBM0wQA+yJt8SWj2apuRtwCAJycTsf8nvp5LlSUZORyIfIqOPfD5YNmE1/YpeGZZdEtnJlODy+VDk8vf/A7h95/7+MbPb4Qu/5ZvVREfsX7sCipLoEjBBIu4eaQ6/039l/fGemNB2iTXtSrQEh34gpMoatPBgBgtlD11cYaNNd4qwGP6JxYdo3NzouFbFhBkXvPrsH6K9mq0hT0Qo1e77g2rf0garhGZM1X+HunFz78wJlHJzKSbpUV4+BEqqRb3zq9EHWJVZUERHjn1pbXb2hKVdSwi3t6It8VEI5M5TiRj4UubOvEUjkvax94+76pxfztu/sA4DW9zQAwli3t7W7enuRYGp1NVz7+4NBwuuIESdi258rSVKH6sZ8c+4/nR1472JRsCXl84vGFjMctULASoNQTA5sQqPnf69h2VuJlaLaBNQQARc04k63YhNiESLqBEPLyLACk8pWulvCe9sSCTR44N6Na+MZruh59/rzoErYk/EXFWKiqMia3bu8vlQsMhXKyVjVNzcJOw6G+uBmap2kXS7sYhqGpk4tlBHRBNQSGfma+0tsapQAMvHKCJd20iF23aDSw7eylwFA6tmkK3bq7/2cHz1lkReyLACgECMAmJOwVgRCWZgIC+9GtPfe+fs/te/pElm91eQI862PZJMu6OJalKBpRmBADY46m62mA0w2omJZNCIIVPTQmpOrYzQAQitKx7biXEoq6Y0f/yHQGW3bI7765q+mpyZRkYsu2c5rZ4g2ZYCLbAoR2DbQ/cGj4J6NLedVIePjNMW9AYKJu/sbW8HxVeWRymQAcTZW8PCOZdkzky4Zh6GaAZymAVr+YrmqqiWdKymDc62IY3bJHMpW4l2PcAa1alDUr6GIRhfwelgDycq65Qplm2S07NwydHJuWcFsyWigUF/NKXjFEnspphsBQNiGKaQMg1bBomsqWLYohFsY2tnWbYIIyVR0QFWY5YhAGIZamgIKiaZmYDC1Vypq1XNaTzeGhkdmn58tLkv6DkaVvnV44tFB1eTyHJ9MWIT6OPThXOLFc/cMbB46em7KRnVG1tKRaNgR5NukSnCFcGsY+nqUBSaZlE3CyXgPblk0wAYZCm0OxsXLOuUbXd8S/eWL8RCp/MJXrvqb380OTb3vsyGhZ3hnx3/v4ia29yV8cGdGxjRBgQhACZ6o0gxCFkIuhCYH6wlDozbs3bOlI3NWVODJ3EdUEAJoC7kuZTaxryb8KziACkWP/+C3XZ549+3BN60zXrJNaQz5AaLkoUQ1+SjRCjRZhuza0Pl3zyA+KQlFRZcPc3910eHYZADiKfeOOvl80uAyNlHLnS7mhwnKX1w8ACGBfZ9N9x8buOzr6zWPj9z019Vc/PvGh+w9//dDogZGFvGbuTvjTR4ZGnzw28fTxTRT+7Nv3/u3dO5g1c80d7N/es8p1NO4RJ/IVAIj73Yq+vhJv3bHHg52JxdyKxnqVNVAdbo61CGmL+i/FgYQGKYLzT5du/fkDz7/pvicdTfDcsyd9M4s3h/gvvuO6J6YXYD1JcSLkrTOX/ALnYphUZUWE4Of5imTlLGWwNTqVKa778Vdx9fhVyQcAANtkeyyYCHj+5n23HPvSn/znn7w5Mti6MXRRKPNLTQmquhkC0leT3VQ1wy/yzkOlouiBl+H6f3kQIDzN8Ryt6OZEpngc218Ymfv9g2e/Ozp/YDL9rweGXvu5B1/7uQc/8fUDlGQG2Vdg0Oy6SGfKTUGvQ9epK5NykiaKV8hADHOl/INt+yqDWMlY6Q+ki9VYwFNPcnJluemVdlPNVJWxigwA54rVjz59ukLsTz4z9IuFTCJfGXvmePrc5BIxQuEXPfHg8ijJSnPEp9uGaZtRD9cf9bAMWLbFs8jPsASIbRMPf8lLeTWbaITk0KNr8Io8AAQ8gmyY/MtOBgAgXZGDIu+u9Rkqio4AeWoaX4RgIVPa0t207mfr39l6tbL+FX5df7w36hnPVr91Yu7zz016IsmfjBVVw3A0Cc0+fq4sxXyM24UfG89M5OS5bBVLCuv1EJUeL69Um85nKg9P564dbL9j78Bjx1a8urc2hU+mCq0hb8Al/K89HYGAWFLNvz8w/LXDU0tVpWLozy4tVV2Cd0MoF2aeMWVpc/Irudx/Z7Kn3axum6ZtyZZhEQucYQI2qRhWXjOdqqdNiG5ZqoV1bCsmNmrKARXjVFXVsa1ju6CaIs9yDG3aJBbyzqv4dLYqMMyGaKCq6gJD793atZxX2nwumxCeRnlJvW5LX7GQGZs3iqbk5ViWpggAIVDnaTgMIgohm5ChVJlBFCdws2W1bFiSZrHJ2AtzWQAMQDMUKmp6UdEoiqrXPh0Gv2UTHdsl3SIE3nD94KNHR7FNCAHJsAxiG7ZNCPAss6kt/v7tvaZlMQQYGm3sirkFniAAQDxNCQxtEwIIaRamEbJqTCon9GcoBAR4iuJoiqGQ8yeNkMjQjsagYlo8TUmaDkBoCr1+a8/J2eWSpCdCHgB0bVvsyamUZBE/xyQ9ol/kT83nCopuhYJPnZh4fVd4Y9Tj4xkN24plIwKTBQUo28A2IYSj0FxRwYT0hz3YtiwAyTBVbHcFXRlJy1SN9qC4VNGbfUJAYAybSBaOeCiOZSgEVd1EQDw8UnTMc1RryJeXpa6OhIHt8ak07/PNpDIEoCCbZdVSTHJmsVKuUiajiALDMYiiKJYmczmNoZDIM3lZb/UIHE1FBEYzsQ0k5uZ1E7d4xRjP72wJIgSKblIMm+xoOjY07WMRTSEBEBCSqqosw2c1K1VRj81JBVw1sE0Q2jvQMbOQwZZNIcQxKCRwTmqqWNjDMgxFsTSNbeLnmamSTFPIIWi5GW5thX5rU/Rvj45+a3q+ieg4tfjRnrZ397SwAFpZ2XdNz8mxRWckWX2pzyNrVBHUM8C3XzegGNbjayZntQf8S9Ilxbh1ytBlWgRtId9Csbp/W/d1W7qGM+sEtfsHOl+YTtU9f2DNk7PRIz/iEdNl2c2xG6KBkUyJRsgGsqU9fmouPVLKjZRyQ4XlDq+/y+vfHIrzNFtfYbfXd2ahIHLM267p/Kvbt33p127441sGP/yaLb9+bW+zT+xrCd/7sXdIj/z9N//87Xt6m35tz2BvU+jc/OrpxQDQ0xwZmrpoCNqWRGiqUAGAmFdc9ayuPyovJSFoiVyYJrbKGsgJuwlAwuXJGHJXLDC6xpO0jv3X9IzMZg6fnfnb/zrw6W889vzUYiKf//wH7n7+yx848f2PfPwDd37ud+/Y0Z2IXMKboSsZOj564dJH3IJDxAUAnmUIISa22yKBVyUELx+/KvnAglwpV4z+1pimm7sH2hBC123uFHyuLZ2rgwx0sV/hS4Zi6avMhaaL1d3dyfrcHEk3NXslXz8zkW6JXZC9vsIghCA0t1z66cEhwzLi+WL5+fNPfOUX5w6c6KyqY88en3zuxCba+uA7950pFePxV2w3Vg0jy1fUG/vbnCnldYfTlG6NGZd0K3Og6+u0gy8DxbAMy3aKGenihWdERdY03XTKFa8gRsvVe8fm/+LYyMH5zP6AO+pi54+OTB4e9g20/uJf3v+dv3sPTVOBmlKcbyBQvdigvBHEBpfACTRX1XDE5Wr2+USGZylGoLmk24cATWdKieA6BXV4Sdut6ma4pjtfLFRbwz4ACHhE1TC5S0+BuCLqBfJ0VQ2IF7KX+XzZL3Jt7guZW7YkrdsfaMTaZN7DM+/Z0XbXQDIqcmXTEkRR0g0a2IxqVHVTN6yZgnJ6uUBjGmdyo4u5f3pk+HPfe8aqyiUbyjop6EZZN30Ca9nkifnipt6Wx2uFwL3tiScnF7FNuiL+sIvv9Qtb24J+kY24uR+eXlBVZCnQQaGPbui67/rt/7x1Y3Akcxct/lo4vMcCBDQhFALasqmiZlQNyybEzTJBnhUZ2sMyNIUoihYYWmRoD8e4GJqnKZ6mKECmDTnFEBlaxzZNs+MFfb4oyyyHK1KApRlJ/p+hqQdOTT45usS3tY4fPsYzFEUhFwsY7IG2kIVxb9g6OJMiNiE1TyHnvBGnTQFQUs2ji8WnUzmaBp5Bk+ncckkGAEvghqraULFEIXQiX3o8WzhuKU4hTsO24/XJUAghcDG0m6EZCm3tbT4xtkAjNBCITkt5F007VdWgWyAIdnYnF6val54bMrDd3BR03BRoBJZNXBwj6aZpk9rTEjUqTR2CkDOVzCaEpRABwGRlHIGO7QDLmtguyZpNSJPPdX1/G0NTmXw5X5QZCm1viR2fy1imoZkWAAgcnZfUw4ulfS2e113Xe2RkRjZ1TEzF1ClkpSRpsVp1IarZz4c8VE/YLZkYEEIIFAsIAd0iZcMYz8s0ovqjnoSLz6nGXFktaVZAZDXTFmhGYGmRsWUVD8R8qmF7BDrp57vC/qKsIICm1vjcTNo0LEBIVtSiTnwcxP0sQsiywbaJZWGeplXdBESxDOXmGMuyCbZlyyqrpqxaBc3oCLl7wh4D22eWKjq2C7LBUVTQxSdcHIuY/v620xMLYRevreRsEPS5ZVl2M8TCRLdgV4v/qZlsLBGZX1w2ESjYEmnayzIIQDYtnqYtmwg0bRNCUxRDoaiLGylU6nG2aVtOSpDXVh7mG5JuTpLHT6TTWZUxmUxBOnh29os/PBjvS+7a0PrjZ8+iWvaOAFQLO8PI2IvFxHVsSEaPT8wHXfzB2nArGiGEANukI+BfqqrrUoY2tMdWBcdrEfe7M1UFAH7rLddrFWW+KMHF+cPmtthoKo9rxkd11N9DAPZfsyK9dfqlsmHubo1+f2jq4MzSaDnf0R544Oxom8fX4fVvDsUFmq1nAnV0x8SUqmxvi+xsjyYDboaiev2hWbkEK7RMzrp4CM+e3tbhxdXdElhDzgGAFr87XVEAIOZ2ZyTZXK+fcikJwXWb2uvTxNZaAwEAAoh6xUPTi+2xwGUkxc1R3+e//8yXf3r4tl19//6Bu3f2JD/7x3e/97btm7uaAGBvdzJVlZNBb1nRivLqFgQA9LZElwoX3GA3xgKNc449PKsZ1uaW2OHxC8LrV/HS8CuRD1RN3cNwZdVYyJSiAfdAZxwALMMMlqUdHesUHV9stHQ1IADjuTIQqPcBUiVJ4FZiqUxJ6kj8EoeRVWTt3PTSv37/uU994edLc/k7dnWd+eqH/uitN5qJ4Pf+7tflRz/97Y+/q7s5FPG54/4rRF0vGXRYuHFje9gtCgxVL9hjSd0TuMKB67rW8K+V5zK6RMMUAByNRE7WZjJFAMiUJMfZaX698g9cdhjZ1YTOMYZ9a9J3T09oT4s3X5J2bWz50l+/rWd32wf390davRJv2S5SQtrZYmaqWpQszcDWZdZ8NVsEgKVCNeAWASCvaCxFBQSOZ2hsk7oz4/hSfkfXOvf2Va5/FS7KB/KVllo+IBvWWi/Il4B0VWnyupzKNADMp4pdLk+jf8yR4bmuZGjdGh8BoC49cwAAWvzi/p5YUGCxZVCADIKrhQqLrSOTxeV8+esHU4dGs9s747+xu6sp5r/2hmvyVVnK5JvdrrlKtWyYBAhHUWdT5ecrOFWQnj0z7TDsb+xsOpHKBT1CXpLv3tJMAezqjBybL/ZEPKdmq8+NFDXdvKUz4WGZkMhbVe2GgbbBWLBUUXiaohACQiiEfDzr59lVA55phASaKhumYdsOOwgAirqpW7aO8blc9Wi6dHg+Zxh6X8jdGRJ3NQejXtf5BWVjMhD3CQJPDeUqfS3B/dvbHzxyTqRJVcd5zV7WpF3b+7/00+dPT5rjlRxHUc6s2fqYWEnH53PVhYoa93C7kkETEwIQDvn+6+Dw+fFFuSLLpvXwYv4TJ89PVZX9TdE+zAg0xVCIQU4wR2FCnByDpZFpk9fu6nvw4LCjXa7Lpm0AlqZ4ikr63CnVqJQqLIUW02Wvixdrw54YirYJmJg4aQBLIRoh1cIX9MS1i+1caKvmUeO0DhgKKITKikYjtCwpmJC37hsMd4WHlgsTJfmG9pibZRBAVlaLmpGRaclrbUsIYY93/9aeI0PzIsWVdKxhRGzmwfH8soSbvS7dpBcqiknsIM9pJp4oKi1uUWBpF0MrJp4oKcmAMFmUj8wXN8d9Ikv7RNYjsopmlU0CvLdcURga5isKx1L5qmnYuCsRmM4VDUKa2hLjIzMsQFtTrFgo0wC6gbNlQxToqJe1bWQDGNgOeTjNsBAAz9ICQ/MMXdTMoJdlOYqj0WxRzkg6BUg2rK6Qa2dz4Nq2oGnZsmnPFeSWlkhpKe9iEYMQQyOeRrppuz3uSrUCNOxIBIICtyUZSCbix8cXDs8Wzy1Vc7KhYbtsWAJNO7OKaQQUEIvYIkPbhPQFvcP5imPwjxDNUmxUEPOaeiafOV/K3dnbWVT0379pY1m2FmV40z9+8zP3P/emW3fcvrH9x8PTuwfbHVqLc9V8HOPkeGtTege7e5KzmdLWgPt8pli/1s5HQqKQV9evKDnB8aXWCQCYkIhHJABLFfmOzR2zherByRXtb325bWvPMyOzNjiTmJedFy+KqQnZ3N00MrtSrfd7XQtlaaJSCPnETz50IpszMzmDtZjHzswIa9KAetvht64bNDDubuhd8zRr2hgAAh4REKySF0Z97vR65fBV5BxooP67ORYb6Hx+JYu4GglBS9S/kG2cDbw6A9GxmfC4Ij7uut6WdHGdAcMOupJhgWNfs6N3z6aODR3x3lhge0u0/r9ejstKCgFoC/tH1xt1HPK5AKBQ6wlEPUJB0ev/G3aLmoE3NkcX8pXLXOtXcTX4lcgHvCwf5DmRoxeypVitynhwbL6q6j1Xolm/UkAAkm4+MzZ/y6ZO5xUNW4PRlW9FriR1/DKHEy9mSl3J8J++6+YP/q/b/ul37nzXDVtmlTLrEbvDvmTryj60hP0AEH9JcttLDgxrAEVRzWHfUsPALACgEHJfyZ2mXLrwdLsaOPlARlJnsiWb2Jmy5Eg/5zOlq9nPFwXVsJIB94ZQZFMwttEfkUrK1pYm3WKDtDvG+zYFY32+sI/wO+LJTcFYs8vDUixHrxzv2rj86oN1zbCcenle0R2bdicur1fr85IirpnydvXrb4QzpMJVI/OkytUmvwcBCnhF3bT8rvVTqReFhYrioUiqIo+V8+eL2dP5bCTpM23LaSAQgGJV6W34CVkLVPtz1e9BxbDAhqF0mUbILQoMokxJ3bchqSLaH3Czbm9/XNzUEbE83jnZiPhE2+UJeb1tTeEAxzE0Hs/LAHB+qaIZlkBTuzd3Pnx0zKncb0uGjy/mIh7RyzM8BbdtiKcKSlvU/fxM8bru4K/vbm9zRV+YywPA2HyWplE6V0mGfB2xgOPT72IZoWbOYzVoZOvgEYUANIwLqjldVk4tVxYqalBgmzzCxrC72cPHPMKSXiUSLBUK3zgxG/exWYnImjWRk+ZK5nxW5iLh//PTo6m8PJzJfv/I6Jd+du6xw5NGVlF1YtkE24RCK7dEXjFG81JW1UMil/TzTR5xoahyHJKIVsEk1BK7djDGsIybZt7YGv+7azbe3hzzAITdosisRHJ1OrVFiENudq7dG28YfOTIKEdRm4Kxc6UsJoRGILKMaWGRY65pjU5U1V+cnVJVvSUWoClkWGRZ1hmaElnaJ7A0Qpptm9jWsS0ytDPsufE2Nm1i2QQBOEwhxcI0hRBCumGWFY2hqapm6Bi3NUe8Lt5QtYRbIATu2Nj2/ELxVE6fL2vbm7x9AffIUpFGcOvO/geeO8fQKMTzpkUOTGeqGqYoNJ5XcrJhYnR8oUQxqM0nFFW9bBkY42VJG1qupCtaWORSFY1h6NmSTCEIednZnOwSWJpCNI1UVbdsVNUINnHYzciazVLQlwgVJCni5QY3dRbzxXAoUCiWmtw8z9A0IIZCRcXSVDYcwAxNSRpmGArbxMBYMXBFt4Ie1kszHE0nPGJnwGXaRGApArAs6RnFfGGhVFKNhYpiIbRroPXk6YnBIA8IsE2ubQ0NRD0xn29ZNoCgQ3PVrF6VTDPi4vrbEpMLSxzYqYr2k/Pps8uVhaoi0DQmRGRo1cI8RSFAPo4t66aLZbBNLJsIFKdhk6c5i9hbwrGNgUh70LMxGnjDQPtfv3HXvffcFLfZRG/bSEGN+tx+gdvc03RyPHUhu7sYdIPXlrPEAl6BoW/b3H1iMVenEjkfjLndqYpk10oFuEGL7BiLz2dLztrqKuH64ogB4l7XckUxTPzG5sij00uooXGBAGzb3tHf9ND5sdFSjkG0gQ0DG1ZDJI0QatQqqDT1QDr7lbHMWza2Zy3tc48PfeaRIcEV+NYzZ+DS6Aj5fAI3djELn6VoHZsBjwAAwYaZoQigOew7U7MkWoVVA31jHhGAON3yuN8taetz69eVEDRKildZAzmnW9PJ2fnCU+eXMhV1ZL1Q3kFvS7Qsqzv6W5z1+BqIrBsCkSJWC6pOU9Su7uaZ7Po+RYmQb7yWjXSHfGcadjXo4kWGUU2zNexfl0P1Kq4evxL5wJlCxgMCQ8FkurCpuwkACMCopI2lcq/gLN7LY7Esj+fK9z52wsNyAJCTFEIITVEAMJMuRK7EhXiZWMiURJ593+t2xXyubFUVGd60rR3xuItj6lJ9hwTiEV9KeHc1UWZV1eMBT0ZS68pUADAsvDZsXQXtov5AfVzxJQsBeVnXLEwBGkkXNAMvpkvnJ1IWtqfLxb7W6CV4pC8Rmmm5ODbo4gGAoSldtxIhr49nCQEfzwJAc9Brmval5F8vGYZlRfxuAKjoRnvQCwACywAAjdD5Uq7LE5xMF9wX6wdeWjIAAHlF8/KsadvDpWyPJ1SW9b5ocFN3QlINA9s0eomHVicLAcBUvvLDarViqxsCkV5/eHgms6UnASslOjI8vSRrRsjnQgiu8vI5iUFJNzmEjs4XbhbLTAAAIABJREFUNif8hAC2YWuLV2X1hapOIZTyK68fiHkF9oW5SszD3z2YvHsg3hoQunZu/pdnJr/+wmxOMgQKzi9Ve8JuhqZu7o1NAX/fz484O521SEUzRjKlkFvISkpbQOwIu9q8Yn9L4OB4saLrc0r2Pw9Offv47Nn5XFE1lkryfKHiYRmWQhRC9eHEOrafnMlJxgU+gIHtvKovKfpwrjpbUiTTYhHV7OZ/MZSSdMvN0l6OpSnkFziRoi2GS27c0Bv2zBaMpUJpe1P0/uGF2dQSockTo8tnNfKJHz7/+IlUV9T35p3d0uwiG/EAgGmTvKpyNJ2StLGClFP0Jg/fE/SwNAR5jkFooax4BdAKkqFYIZZpDXrdboFB0CIKDIVEmnZxLCGrv4Q0Wn2L3bSt+/lzswyFMCFU7T00Q1MUWipJnUGvTDH/9MDBR54djfjcpk1oGsXdPEch3cLYtgu6iQjwDO2wg5wWhLNmhxrkNCgAgKGQYROeWvlnBNipxWJZ0adLclYxom7BMHFB1jkKjZakrA5Dy6V3bEzsbApEBTEueqcqJVk3Hz8+vmdTxwOHzr8wlz+XqRIbPByt6rioWoqJs5IZcqOcrFuIGNguyZZmkbOZ6lxRZQEdnS+phiWZVkoxqoYl6TYAZWKi6VhgkMfFmxYOuWgLUFk1vQJlYWjye3OSimiqvT2Wy5Zao56x2cXZkpqTzfYQL+t23M9TFJgmMCxgbKsGRoA0Ewss8nK0odsV3czLRrNfkEwr5uacK7JY0YaWynE3L3JU1MNH3HzBRHt39D10fNrEdl41oz5eMnBr2DufKxKbsBR9JJU/n5FtgLft6i8sZ2crRotffEN/POzi5krq0cXiYlm1CSCEHD151bQKmuHjmLSsahhrGBNCHp24KBrb3RY7Op9BAPs2dezc3S3y7HRJQwgFBK61s+mRoyNrM4HG2r+1Yhu1EvrvH+z86YmxTFWph6QOZUhgGExI1TAbQ/z6sv+anuMjC6terC/OemqqYuae23acn804NxiN0HAxO1LKjVcKd27qO3pusdMTBACe5nia83JuHRuNtKL6oOJdYX+LgT/U3/a2wU6RoV/fFX1Dd3Ts1Oj3Dw/BpYEANkQDI9ny2seb3y0CrO4PdEQD2cpq9o6DnubIRM3f08GulpgzPSDiFrgXIyEY7EzU+wMAsL05PJar/P53n337fU/c8G8Pbfr0T2797I9/+7+ffPpk5q9+fKy0HtXHgVPgH+xcsS5cNc2ApSlCCEOhtoi/3FD4b8SO/papmvlpd9jXqGwOuoSCqtoEdvUkzy/m7FclxS8DL/G3/P85uDnWIna6WPF7eBfDI4CiatiEvIKzeC8PRxE/raAv/uDZT9336EK2vFRVyqoGADNLhdgvLR9wyDBLherdN2xyzMIdd0iWYtoCXgpQc0NDQLhSaH4p1B8rlwo6s2UZAOJ+T07Wexq6orqFXVdyqzTW0Q9cLirMSOpotvTZA2ceHFnu7Yj/9dv3HR6e2/S+f/6DT90f9Aka1lVrZbnMSgDAvoqvh4ExQ1FCrcWRK8vNEX/YLWgWdka3JkM+1TAJAdXSA/zlrvKLitcNCzv9AUk3nUkLDhna+XliKKoka6EGhfqLWvkqOPmAc8ophF6YWMwWZSBACMlJyrqu4S8WS1VlbyhIDBoAnhmZ+/ZzQ1+9//mHD4+lc+V0rnJkeFaplbXWpgTk4qOr34o2IZZNTqfLN3REtjcHMlWtzc/PlQ1JtzY3uf0C2y55IgJ/XVvYJuTxidyx+YKX49462DR2/FzEK44sV+8/mXtoYp5BILCUZmLFwB6O2bO158HD5wGgy+/amow8NpEKuoX5QjUo8m/Z0pKXjA6v4A9yPz29RCj02zd0bmsJPrVsAkFzy8WxpbzAsqvMRlMV9fRy9f7hxZJmzlXUoWxlsihrlk0D6gy42wMuBmCqIH3/+PxsTjmeLv9sKDVTViqGGXbxKrazFQUTODC9DAjamxOI9cqicHA6e3Z++Y5diS+9Y4+4lN3dEor53ePnpr/yl+/avW3z1Oz0vz88t6xWD0xmFsuqQFMbIt6QyEmWydM0tknFsrKSIQrcUq5gAwCggoIFhmnxuzOK6ZxegaGBEMdhph7Y6djmG1JfBHD95g4AOHR2BmptEEyIh2NVjEeXC7taor+zqw9cwpmx1ObOBE9TNGIUS5cMCyHE0nSIZwHAbGBvEwI6xoZNGOpCSOdM0uUoRCjkvCft9jxy8PxcoWIVpITIn5tY7PH7PvHdJz78zPBPJpfuX1rYnPAfml0q6iZDoRjjOZ4pvfsfvv2tJ073dScPDc9tSQZ7Q+6sYgYElqGpGztCv7uzfUvcTwDpFlYt3Bl0NXt507ZzstkWcBV0U+DBIgQBmCb28rSXpVmGYimwbWBoSnC5TLmck01sExMT3SKaZUc87pl8iQLU29cyMjwLNunvbMlks4ihC4qmGlYqrzm3NiGEolBIZAkQ3SQGtjECZypwQdYlw8qr2nC2qlo2z1BBkfVy9EJVaw+6aYRcDL0n6W9qiUzPpE3LdrN0uqzJlp3XTMHjrpZyBKCsWzxF25jceU3PycnUvvZAVtYNTHpC7r6Yp9knLsvGT86nJ3JyXtYnytKpbNnFMEGB6wt6U5L68GTm5FJZNW1icsPFlTpuXzRwfrloYPtsrrpzU9/kQlqx8ExRTgS8MY9ALqa1KDUymDOIgKcphypWf8PmtvjJycWkz31ueXUZOyF6xnIF0zbXpqMOk6f+TLgU2kO+hZLEspSK8XdeGPvRuYln5xbaPUG3LVRLtqJbj52eXrvyRlzT13xi7ALfJsxzPzsykkoX/uaLD4zNLP3Hh970J3fseeT0Rcx+Bw5lyMS2YegnL5bkbghEpqtl0cUQQq4+H9i9sfWpE5ONr7QH3M70gJBLzCvqKgmBc2YuJSFoiV6QFLt062M/fK7ZxamTiyd+9tw1CH/otq3f/73Xv/eG3vfe2EvTl/u1TIR89fXEPWJdEOzAw7NlzeiIBs7OZ2C9gD4e8mQKF/hRMY84mV9RFIREsVQ103p1Y0t0fDlPXelav4rL4IoBz/9PwNFMWbaypUp3S9h5pajqDkPm/xvMFiUAsDH5zB+88TU7e3/w9Jknj4yfGlkAgFJV3dKzvnfKKwICoOpmc9TvGIBcGHpQkYMNZI/5fCXyS5uBkKnIAGBgWzJMr7CSdZgYw1W4VZrmunriSz6dF8qKB7MfvX3rx27f2hsPBTziX95zy8f/4PaOplBXIiwyfH1RLV3DhllTda9CfQOXeb7I+kWCWtUwwz6XwNDOAgCpQsXxzXxlYVo4W5L+L3vvGSbHdZ6JfudUru6qzj09PTkBgxmASAQJ5iBRJJVIS1a29Fi6kqy1rfV1WMny7r1rSetdS8/aXq8sy9bakq8lK1uJSgxiJkiAyBOByblzrBzOuT8KMxgAg8CgH7b0PvXU01PTXV3V1X3q+873fu8LAKfXKu2qDOsC7Tbxg3i5uikfeCXJAGyiJAU4dHbpr//16eCx6XqvpJ94A0XbCVnkByenP/njY5/40UmRY9/3uuunl0rv+K9fuf+P/uGDn/n2rbt6Np58jVUC0/VPrdT2tUVDPDOWb/QnQhOLq3XTYRh8fVuCZ/CujPzcbHmhat3YHcVA02FhtqL/61guu61HN51kWBAZPJSKtUak8XzTdLzT+TpmUEtP+1d+fqppOirPZRPq8dXSk3P5smaOrlbCAjuUUX8ythph8Z07W9uFBIeYHWnl7de1Dtx0/VNl+v0jk4hnZkrnWAGUQtGwDy1XRQ67lB5ardQNpy8aSsu865CFsv7YZO4Lz8x84dnZkdXa9hYlHRFDGGuWe7bY+NmZFaBotW588fmFZ549FW5WEYW21sxa096vqlwI3TuUbVPUg0OdfdnEmWLzWz86fODW3YjlIqoyvbTGiuw3Ti0fXSydXKnZHkEAdccVMPYJna0Zzy9VGAbyDWN6KW+5HsJ0vmrZnm87XtVyaqZDgnoUOt/gGzzwKWWD7l5CKQUWIwRw43DX48enfUr71cRErcggxHPsfL6W9+lgOvr+g8MAsFxubOtMO4RyGHmU+MQHes6AOIgRPUKbjueeY5hgbiNSRMillBLKYuwRCpRaPjF93zGqscEOgvFf/euzt/3u3zz8zNm2m68DgD890Pfx/f2/M9B9oDX6sR8d/sMjE7//tw+955Nf8RZL1+3sef0bb0l0tX3vyVOFhvHsUqUtLGyLhyM80xcNYcC648ssI3HYcel8w5ivmwDAcTin2bmGVTO9qMj7iCbDPM+ymuMjBLZPBQ43TC8scQgj1/Gahh8WWccDgUUyj7sT0cVyrWHRvm2dy2v1ZDyWK5YViZFETuIxRUjisWmyPO8BQNlwfJ8qEpNSxExYbFhe0/Z8Qo+v1nmW7U1I6YgQDXEU0aTCR0VmMBGOihwAXN8e/38euP7osbOU0objFQxbFhjXo+/Y25t3Tc2rp7DaJBrDIMsjr93Tf2I2x1FyYrWmOz6HcULm9mcjb9jWEpPYU/nGs3MV3fBN95yThsQwi02jZrpdUXms2NAdL5jav6W75WdnllY0y3DJR24dOjo5qwjMeFHnef7kQm73QNvh8UXY1EIAV8S9e/onlwt7Esp4vrbx6w9m6DOREAJEthoUNjN5mMurDEVCwumlwl/MLc277n/8+rN/+bPxv3548r1fevxNf/fIh7727Ie/efjFMkEYDUQS49ViUIjwKPUpDdonfEpfc2Dbtx4/+dCh8ZGZtaNji7d99PPHzq586d13t961682v3Xv//u037+g4tZC73LjFMfj379x3aivKTVIJI4Sim/hCAbJxdX4rlc/NekcBhtZbCGKSWG+6M43zCdXmW8OWLQQ3DXflK80NaaAXl/IjZxY/+qYbzEf/x7f+8zvfeqCvvyXy5r29VaNpOVeakt+/vX2jNbktEpq4sJcvJotN2+lJRwv1rVtBelrjxzfZ2O1uTcysdxhXDYtQatju63b1/fDFScd3Hd91LnNP/xWujF+WfCCYhJ5ZrgrCufClatodW0nRv8Lg6XKYKtahCRG/WdD0PTuyv/1rB4d3tH7/ubE97/+Lbz1xSn5VVf8vBoWJhXxClYPKwIZ7VK5pxDaxg5bL9fglg86rhWAyg2WZs8V6S/jcuxjX1o3quu6WY/3l0LTt19w9mImHbx9o41kmFZHPNMtII12ZWPLC7giJFUSG5/DLt9NyfKKs03I0w7YdLywLqsjbHgloUWs17aoFEHjp3zrX80t1HQBymtkZU2A9H3C8c7STjXzgJe15y0+5YTldcWVjdmyhWKMOCbrcPJ9cyxXcEhvXtGE5axX924dnJnPa63d2vn9fx0BrMh4N/d47bnvm87/7B+++q68tua1z6+YBCnDphBAC0F3/+cXKjR1xBqOq6R5briVY98zCckxi92TafYoAAUPd+wZbDnbEC5rt+VQVmLv703d1xziO8TAWWebW3uTkmu5gS2Dwb93UuzcbvXd7CxuPNjzyB985cramTRQ1VVQ//+z4osn8y4tTf/74mYcmcqs189np6uhSLRQR//GFuY//ePT/Ozz769e1vmG4pY7jFQdqLl2oGT+dKjw+X5wsa5SCxOBuRTqz2nhsqvD3h2Y/9/TMI2dyNcPpS4Q/esfAnQOp5Zq5VDHeuLPVJqQrHX54Mj+eq37xqckvPbmc2KH4QCmlPIs4kZMEJsxLIYEfbzQWm8xXTqwku9qWJub2D3bMF7Xnlus+gf6OTKNeHYjHWmOs7ng9sVDRskWGMV2/aDghjpFZDIBGZpbT8SgBsG1ftwlm2bLpzJSNH57NE0pFlgWEMDrf9e0Reukcqkfo627Y/qND4wDAYRxsoRibjntitbwtGREYvL8n23ld+2yxxmOEERKw0LAtABAwDpTpg10pPHvu5RQQgBs4G1BqecShlFLqUcoilNetNc2KctwNbdGoLP7xu+/61P91f1OQ392R+NA9B54anaMA+bncJx86Pf/4Ke2pkVt29fzoMx+678bBVDp6IKPc15u89+COzz02UjGdPZlImEcEkCqyBcNqOK6A+TAHHqUswbZHKQXL9uqWwzIoLLAhEROfyDyjO25YYFgGZUJ8f1KKhTjH9WRJCIlMWGZ026cIPAIeoUlFzjV0FkGqNVlaK7XHQ2fmVjyPlHU/o/JJlUtHeIHHLIMwBgYhCkARNB2varsIoxDPZGJSJMyFJG6uYsZFznCJ6fpRgVMkbk2ztidDFOiJfJ0QfP+tw1qxBBhmy4ZmepTShYZd0NzjZ0pjuZzlmDLHfOPUMhD8pUePnSzqbao0WmggCmGONTy/aNo68QfTodt6En3x0FLdPLRYWa6bR9eaEY6bKBotCj+S146s1r49tuwR6vr0NQPt42tlSklE4h+8YahaKq81zCeXaghge1/r8enVwIUAoQt4/2Q92r5o+fUbhwPVUccjjk8C4V3TJR0RdbmhUUrperVw8/LmW4Z/djWj4q6Yetpz/suugb+65/pMVLi3O/Hnb9p/S1rpdozpp46tHj41LDuTy0Vm3XmA2eSWsPHnUHfLA3/8pf/z0Av37+n/nQ+89uPvuP01Q127M/G7t7UTSvf3tj4xPo+2OsJgUQRuX1vyyZnVSw9PEljmwnsIAkip8uplWnjv3tf/4sUtBOeo/yGeNexzgbvAcA45H8Tv6kxPXqIZmoqGL5IG+u1fu+XeG7Zvfk6EFyUsmM4FCkgXIR0Lr667GXRGwyX9Ag6wIvKW67EYN63LSgytlc9LDPXGldNrlW+cmD22VNJsr9A0T64Vv3VkPB1VOIYTGI5/Bff0X2b8suQDQU/kYq7a13pO/r9iWDs6fiEWYJeCUigZFqGkp0XtyKgC5k4vlw/syPzNRx/8bx+6f3w+H5IuoHq/uqAA1YbZEg8DAIPwxnz8atPYljpfIcnV9OGOraOuV46N4mbVtDbMxk3H5a4hmgycyNZx9eCWZZhehCYa+iMTC7rrFjx9ZyydTUYs23vVxUYJpRuEmXy1GXA9g36pYL1aacau5izxkkL2AI7rF2vadPn8JJDteQDg+AQA1qoNAEgo0kva8+YnW74jMnyw0fb9wVQkaIGYzVcAgBHYhCoDBbrex/xSQShlMQ5SgqJu3dKV/tDt2+8YSHbHQ4PZhMSz7XGVUsAIIQzJWDh+IaFuc4ng0pTAcP1D8+WdrSpBEOW5b51aOr5SHczENMP0Kbg+GVlrUEoBICZy7VH5Xdd1J1XmofH8eL7x1GJtdezMrVH0xqHMfMVwPXo219zbHkmHhYjIRQXubbvbMh2Z6amFrx9ZGltuJCUZMHRHuRaFf/1g+hN3b3vr9Zmm4U6WCvf2Jnd3xecKTdbQfjZTeWqhFotyBRseOpP/4tG556Yrj46vfX9k7fBsabasPTVdLDRthsXXtUfetqf9bXs6buxORGRubK2x3DD3tcfXNMunVBbYsu29bntLVopvH2xVQuyQCx39fe3btmUivO+CbXkSg1tVhSVCo1l3fMon4xPzeSOsxiLCTb3Jt+xu7e7qrRYLisCu1I2m6emuJzLMXN2o2W6bIioiv1gxVZmjDH7X3fviYaFheWGRsx1vtmqyGMkcM1s3apYtMBgFkkGXpOtBoeDcxQJ4481Djxw5a7jetkhqsl50HBcATI8gBA4h7903IEXCZwvVjZ4K3fEowKUEjYBMEli2abbnEmp6vsIxPMYIobxuLTXNtrDUHhZdz2uPhWWOOdm0zYh6R1e8VG7cPtjxtedGbv4P//u//sPDg8T6/MffMRkSbtjZ1bTdbLJlV2dsqlDhWeb23b2lpbXuqByT2TXdRojWTQchoAgRQBgzvTGpbDpAKMMgj4DjElXkkgrbdHxJYDxKeQ4jDNmYaAERMNM0vLpFeV6wTVMzPAI0JDASINejbZHIQrnGMjCwvWNmeoUwfH9X9uTZZYHHPAMsAENxIsyFJaY9IYkCI/A4JnMYUYTo3qzaovDlph1ikGZ5dcubLeqa6TZtslK346KgO/7Zst50/J+eKTy9XNs71J6fXy3WbQCISRwDaLsiCq6HHffR40s/emH5T7759NeeGf3eo8efmasBBYnFg8nwaKE5XzPKpmP5ZEdcbQtLIoMzirg3G21TpcdmS1MFbalq2YQs1AwEYOjsTLO62NALptWTUKZLjZ0phWXwrUPdS6v5iuWmJU6UxOuHu37wzCiLzpt/XbRgQJ5P6SZvsr09rc+NzydC4tHlAs/gQIRXERhKoSusnsqXbN+5dLgb7EqPzq5dlUayTxCTPHdbf5ZXpM988Sdv+5MvN6vNj9x/vfbwn339/33P9T3Z8UvUdeDCmsO9N2zf1pG647rem3Z0phU5IOXc2XvOmCwbO0fIQQCXW/oj0qGFC3owAMAjRBK3CA/2dbeubFLh3Iy+tuTUxS0E5yj7ibCU1/SmY9m+a/tuIHYX4N7d/T88OnnRrtrTUTUk3rGn76ad3bfv7B5IR+/oz170nIjI8yxjuFeqD2z2EAgIrnXrfNl/Q2KoNapcQWJog3F0c1fLV09M/+6/vnDv3z+y9y9++J9/OvpnPxj/Lz8aeXq+ce33u1/hUvyy5AOm45qWgwCF1xkySl3f25W58qteNi4yH7B8Z6lkRLsT44rytaJ2PF8ZzZWirMixjGm7ssAlX5aqz7Wj3DBaE6rpeDx7/oqXdHMzD6RhWsLVpH6uAHTFATdX1YoNnRBS0u2gg9n07JplcVckHQbwvM21vyuP6gAALEYJUQgjVOLZDfUbWeRkgZPFl1yHuXJIrVnORkCcr2qRsHjRE8qaMZhNBru4yJDhlaDaNHxCV9eqpu0sVpuwXh9wPR8AcnUdIxQLy9c+OF56mpbvWL5j+858telSf8XQ5pv1Q0vLnenog/fvn642cppRNe1XwhcKBEYLmjmQijywszulyKrId6eilNL2uCpzvOW5/dlErq49mrf/96ELSLGXYw0Zrv/cfPmGjhjPYACYKmtzFeO61khdtyzbLTlNgaOHl8qqgAGhuCxihBSRu3cwQQD945F526cIQXc6OpRWUyHh+o4og9GTU8Ufja/FBO5MRY+JXLQlOTI6KxJrf7v6wJ7s+2/Y/vxiLm/zj04uTZe13rT89uvbZSo/M19RZf71Q0kUT67OzhWWlgulcr8iFcrG3EqzrFlrNct0vQd3ZXe0qB8+2POWXW0Sx5wtaI/PF791avlzz8/8aGLthaXKdMM4sVIzPfKz8Xzd8oo1o2q4kbDQLDjDbcpUznzT7o59bdHgM7F9EpX5pByybWswId3WHWsJi/3bO+vFoipyXVGpPaVggMnF/KNjRYyQTUnVdPOaHRe5dkWSWIZSOpprUETjSlgWBI9QxyUIIYbDPMdggJjEEULLhi1xbJAMYxTE6DTo+vXXCwUBj8gjdP/29hNnlxWe4zHyKZiub4iRkZnV507P+YSsrFWPL5b/109fOFWqlS1H91ybQRRBIPoelB28YM4YaJCBe4RKHEMo2RhAVptmW1jqicgA4PlU5PmqjyQxdP+27P39aUXhT82utidUgoX3vP6Gn3/+d979lpvu3dOXDIlPLVaLhjuUUsMys1rVTq9WilL42eNTd3TE6pZbN/2sIpUsR3c8z/XmKrrMsWfLhusDy2IEKCxgBmOgxPMhJDKOR8q6y2OmLSRQSk3bK1tuIiyoEs8LvGW7qsQoIt+0PJ0SBoHp+e2xyHKtwWPYNti5uFRQFDVfqjQt36ZYwLRhObZLS2WmbDZUielMiCKHYzKriMxMxVyq2z0Reanm6JYnsDge5iWB9XxSsKypkrZQNcfzzZLuMAhWGma4NXlibHFxahZMTeAQYzWXDNterRWbmjY1P//cqDs5G9Ob73nzTbf2xJDReGGxZPl+iyKcLjQmC1pc4H1Km65PKDAIGATpEJ9RhTu644QCh3DRsqMS5xA/IQqnCw0G0PZk9IXFfMV2VzTztuHuI5MLEsfmdKcjGT21kDu4u/dbmyyEDd/f3EzMYsQy56WEWIzu39M/tVq8JRMfzZ3vRsUIeYS2RhVCgFBKLwmyN0vyX4EyNJCOVTQzcLX3Cfn0B+/70w+87p4btgPAA7cMv+H67cvlOmxSCL0U+7e3x1V5//b2EM9tOH/1xJWz69SdO4e6LyXkwPo+PUIM13tkannz8Q1Gk/N6jcGIx+xFlHpF4je762zGpS4E/Qn1samVvzs0uVC1npxZWygZmkU4zOqWP1tsnFwuf/vF6a8/P2575KIWgu5MTDPt4Z6W4M87e1oPbdI1Coj+PMeKPFtpbE31CXCRh0AyJC6u66Vulhja29O6JQkKACIh6fD4wmqpvlqqf+XnJ8bmaubRcf3wiH54xHlxrPD8SO7FEaKXm4Z99RDhV7gMXn78928LlutX60Yqdi7sLjeNUkMbvqKC4SuHsd6xKjI8L6I3qCF7xnlXKvq9xYItC5loCABS0RAAJH9hqv8Bqk0jm4zkG/pmeYGlmj6QOC+vNLZUvG2wc6tXv1JQgMmV4rCqYoYiRGer1bZISGIFQprRa5AzujAfuHqIqzteOiQe7Ej//r88OhEPD0aSABBXZMtxX3VClEfoBv8qX2kG2nAN2wnWIifVDUviuSsc9Euawg9AKYzN5/7T5x9iQ+JaKjw6uZzg2Ew49GRzyXI9ECBf03xCrn23Wx7DRn2gpNn/8/RcXJWrrr02teb4pN4Zr4v4T8amBhnCX0NGdwVghAq6lVXlDQmm7lQUAVJlAQAQglhIIoRyAn9ytX62qG1Lnf+lIASEnptFDtJR0/UPzZcPdsYdSuIin9Otb55ctjz/lu6kaxmO5+XqWp+a0HxP4PBUmaw2zFZVslxvqeK9aSj12NlyyHemtw/4gkgpPdgZ++mZvGWy9w1F42LoxaXqYt0I80wkzLVkEo88d/zGHR3FPmPiAAAgAElEQVQYodf0Zf/22bGP3NRarWs/OJsr1CxF5jtaFdejrueLSkjPjaTbWgjiWiLCeKHZGZPvHkgfmiv3JsPTZR1jHBE4gqArIash9vhqo0/mgQLN0dt7Ur3J8Gi+/v2R1V1tkYlcI8TjECcdXa7yHMOy7OiqXqvoGsUMQFplqUY8228K7tv3tP/3R18EyAgsY7netm1t09Ort+3dNlPVOQKE0piqzC3nsrEeQXbPVpuDCcX2SBN5Cw2j7ngYI4pwf2uy6dG4zNc1FwHiEA6ziGPw9kS4YDgcS3mW2fjaMAg56/7EFEGQBgT/8im9e/+2T375kY//xmuCLabjiGYNYpn/+/MPSQzGDDJVybTdry6s9oTrGIiMUJR4DvEoQjLLeoSyCLEI+YAoBRYQxoARIgQQgvmG4fhkWyzsU/AIrVnuEwvlSEt6Z0t01VqLiCyHUTatPHds5g/eftv7bx86tZAXGSYuSz7QB4Z74gIMp8KuTxmEbM8/stZoEnr3jTseOz7d2ZMt6nZrRDyx1ijptkfBsr05z+UwJMJcsWmHBc50vZYwr7me5flJWZwu6RgjSmFRtwo1O6nwjkfqpuNTKnAsL/J13RIEMcRjQoBhMbG8pBLKN/SBdKStPTU3l+/b0XX09MTdB3cRnyoiq2muYZBkhDccu26QquZFJDYd5jsSwnTZCMlCzXVFHvsEBI6xHJJWuBKChum3R0VFAECgOV7TIUbVjHBMPBV56HvPvpBQVUUWJT7Tlu7bObBUKn7k/feqcrgtQXRbHF2t3byr79GRufsOqvN148bWOAUQEDpb0rpjku55qfVJlqB5QOKZMM/0JkI9cb5VJj+ZKrjY64tGDy9XNc8zHJdH0KrICw3j1p09tXJZaW1pV6SzADv7s5Nz+YXdfW1hCQBkhtncQEzXw/fzXeMAb7lhh+n6P5/NffjgjmAjAkAIuqLq0ZVVgNSl49iGJH/rFYvDUVmYK9XbokpvXEntH0hc6JU71J769vNjv3+5FwPAun5OsG6NhEqaGYpzwy2x74zOvXffgMBwOztSpxbyDx4Y3PLlLMbv3L9jSXOeml29s/eCOfiQxCOEguB7w8usOxV79PTsVns6f8ob9fBbujNv+6enWhRRxGiyWHv46LlaB6UUIZQIi9S0Koa9p6/nxfnCA/HzDW/drfFiTd/Qeu6JK1Ol+s1dLRe+IbAM9inxyGWV9OKqDIAqDSOY6d+Rjq7U9V3rnkscg2ngU96WGlsubBnQZ+LKBz/z7d39WUngdELkqPyZ//jmvd0tA+0pw3Y///SRTiXyxceOLZXrQ/KrM+n2S4hXdC//NwTDdat1vavlnJqQbjnt8UjmF6bq4xAvKBEEC0YozLN9CZXzyWA6+q6O9KCHLMcDgEAlJhF5NePUi35Oq+V6oF5sOhd0f9ZMO72JylJpGvGrMVteBkzPNl1rqVJvT8cEhqcUVXQviDUblnMtsbB/gTXj1ZN/zyfBaVab+o5CMxihEpHQxvpVhE/IRn92tWlu60hBcF7r62Oza+IlVZeXkQNsRklriiz/qQ/e99/e/7qmbn/2m089+Cf/dPfvfeHMyNLMQgEAJlZLVyUpbeDKB4MAGrazMJI7dWhu7uhKLedUNbtnsf57mcwnd2/rF5SrtoNfFYbjpkKSInAyz9UtZzZfjW/qa0+oMvVpTGAohZ+eyRnuBSzVzQcfJAM3dycUgQUASumhhYrh+qZLfEImV8thSQQABGgooyxUbd3xF6rGcs18dqHcl+b7E/J9gy0TDY+tVn4yVfrxZL5he2XDIZSmVX4goQy3qlXd+eHIWq5q79w3VJkvL8yvTZW1kuV0xpXvjqxVLHupbPgIdNdt2Ho8zI4VmofnygPDfY7nOy5ZK5Vevz3zwZt6u5PhbFQazTfLdfOHo6u660UFLibycZHviksThcZaw3zDcHaoRZ2vG73xUN32JgvNbFJ2fcJQ2rBcScA8hz2fhpSQyLIEUFUnXTEhFOI6U6E9bcl97emiS5+ZXuJZVkkmPUJOz6y6tvuzswUGowdv3DE9N+cC8jy/JSRUTOdsRTu2Wh8v6mP5ZjouEkqXy41MmGcxcnySFjnHp1Xb35EKxyW+ZruuR/B69OZdqPazGbZPBAYjjN5489CjR854lA5FU2dqJQYhhsFv+Ogb3vtHv3bgtXu21c1MS/zNicSvdyTf29e1L5VQRIEC4hkmyASCvQX9xIDOveOqbi02zYQodKmyR2jFdCZKWk637+6M0Ua9P6kgCiGOYxDqzMbWyk3Dp/dc1/eDFycapl01rSMrtesysULTIBQEFvNItGSGsZscRvt2dPz08JlvnFrJ6/ZyzYxLHM9gAEpYxvNQXBI8j3RERNvzFJHlBeR71DBJw3FZBlNKwwLDIqQI2PVoWXcoAo5jHI9yPIcICfFM06ZhARSeUyVuezoyW6zZLiSymdmpJYTZge7s7OKa4RCfUIlnLZc6LsEsioUYBGC4ngukZrohHosswhi1RYSQwHCY9qXkhumrMuMTUtTsEM9SCiEOtyi84/k6IXdc35uKKb/x+hs+8N7773nwrgO37I7GIplE1Afc9L2FplMzHFnmqCyPL+YYDiYL2vF8tTUkdEbk3Rl1rNg0PJ9bj/nKpsMz6ORavSMqAUBMlHriQndMamjMaKm0qpmuSwbTsRMrZdsnMxVdjMWnl3MN212oGaLA3T7U+czxGULPO09vBgWgAISeZ9gjgOH29NNjszXLLmom2jxwUeiMqsuNrZ1q7tx7gST/lojJou64DEa3d6bvvWXoH352FDbVE4Y70ssXknMEhnd856K70YYaT1jgm5YDAOmwhADKuuVT+trren949AxcCbQjzJ9cu1hAKSyeS8A2C+9syyYu1z8AAHft63/s6FRwMGNzuX965Fgmxr1vqO2B7uT1DN0T8cjMwvRTx+yJmVS5tE9Ev/+6vSc/+a7b+1Pz+UtbCM7fNDfczS6CLHC2589pW0/tB8gklOn116bDUvHCFoKwwNZNZ7g9dWJujQLwl0gM7ehu2daR+k/vuuvQFz76qd983a7ulntuHLxxqCuuyj4HB3Z0vu3mnaLALV+GQ/UrXAv+/ecDpyuFfiVeqOl7OpL7trcFTrRlzeRZ3J2OXfR7foWB2gZ4zMoXWt7qjhcNiQAQC0lJWQyLPMsiAEjHwgDw6vKF0IVRc67cCNTKbM+PbmpUqFtOUB4NUGqar3D6fPOnN1otuMQ7UV6dadZntcaZlfLrbhl6YmY1r5mz1SYAHClUTizmBebqFaoL84GrX5+G7QTa/03d3rBTCKYl4upLO8Grfh/8TfUB2/WCvKtpuxvrXFVTL18Duer+t4Rm2D6hvk9ciRtsT77vjTf+5w/d/4b79mJZ+MYzYx/5i3/9wpNnqtpl1aA341oOQBX4P75393c/fM9fvPP6P7lnh23blmHHJSHGsLFrKO9cis3OAwAwU2nGJB4A0mG5ZtrPLSymN92BUtFwMhpmWYbBqCcR+urxxZq5yQxo024PzZf7EiGZO5efEApN07u5NyFx+Afja8cq/t5duwYSGQJ0sWpSoAjDI1PFI8vVvdmoT2nD9btiMgWYmFp+145kV0x+er6ca1oAqNpEZ2qlmuV2JiTH9aIC+9G7dvS0Jr75zMma4z05X0ooal5vLGlsRgaMca3pGU3cGhYVEVuOpxtWdzbZl1F5MfLdU8sja/WjS9XhtshtA6n3HuzWHX+mok+Vm0DpSs06Ol9BHLMjqyoCe7xQUwV2PN9EAB6huaoFCK3UTZ+AbnmZiMhhTH1fEhDPMS4lPA+/dl0WfDRSaCbCofFcKSFyEo8xgt7e7MnTM6eKmipzAsd09mdN26mZjmOzo+ViXOL3Z6J7MmpWESISB4gahqcKTNMlec2VOZzTLYb4rkeSMkeAqjyru57MccE4E/QUB0QMyycig+m6MxTPYApAKL1rX//hsXlCgcOIEppSpRu7Um9Nxf9ouPcDwz2EZbiQcGhiNiWHYoKQYFnXJ0Apu36FfUJtj2w4uAGF2ZreE5E7wxKlxPLIRElbbVqtijCYCMsc29BNSqlPSEIWfEqjioQxYhEQCjcMdPzjockGYfdkIvvakt8fW2ja7lxV/+l0qWw6q7YvY8y1pF4Yne+NiZrjFw33yGK1qDseoZrpBEJKHVHJRVQSWMenvoP6UrLtk7rpuQ5BgHJNy9B9ReJFHiMKGKFYiPUI5RnGtCyMaYjDZc2vmXZMYi0fOmKR0ZWKwKKegY5GpZZNx9aKFUXGddNPyDgkMmXd81wRMw4A5RhGt4njUMPxl8tWw3QDAo9PoWg5EYmp6x6LsSKxmue2q6IqcGXdYQE5rn9gqFsQuGY0rmEksAyPEQAosjSVr5g2SQlhl7H2ZtTBbJJSOD5XKbvWE3Plx2ZKZ0oaxohn0XhOazqeT6nmenndiYq8QyjLACBUNu287sRlNqmyGGNFZFiGQQz/7ZH5fzgxfzxXv76/bWphLSLyY0UjxPOMLPiEUMNaaBgEAGPkUiBwbgEABBBYUW+E/gf6si+eWdqRio7mKxvMoqA25TLs4VxBc+2LupCXirWOdPQHz4wGbcqwlTFZsIR4zvH9HdnEGoLv/PzkRh4SLO1xdXQru6vNHKSbdnYHKjpRSSho5/gzB9pTo+ty+2/av31L1dEAIZ6TOe7SgDsVv3jikgLEQ5IqCVt23wJAV0vs+dH53/j0127+D5/70Ge//dfffW50Pv/PPzg0N7va0xp98Nad3//0+7SH/2ziqx/70Wff/9kP3/+mvT0AMNyWPDZ7MaMpFQ1veIFd5EoWAAG874bhq4q+7d/WPrN2rjegN66cvtD+LCxyDctxfLfYMFzfdXzXJhdM/XSkI3FVVmQeAG7a1d2bUDfsnEMs79lQ8oy33LgjV9PgVxYELxf//vMBAGAxOluqP3Vi5oYdHcGwUmroiiTAJaHzLwgVww7xbCwkAoAkcGGBwxgFZmRBfUDeqmHo1cJqqRFTJM20XZ9snqtuWO5GfaBhWJbjvsL6wEWR5d5Edm8iuzOWHlSTcUUu2sbDEysaot8qlj5xdPzzE3M1VVryN3OBtga5QC/56pfLcv1A28cjRFkPWCsN4xfRtL2ZjbqQq/Zm47CpPlDRDM12wpe5uNcSi28JzXQAIJuMREXB9slYTPr743PPrmovlDRoi9y2b/dH7hy03CupPQS4xgNgEGI4nInI8bDw1gM7AKChW2pIDAuvzudZt5xWRSaUihwzslrMVbQdbSmEkOZ4j8+Uv3dirmPvcJvEtIT57qg8W9a/emIxeOHm41+sGoTSrCrN1vWq7UYFrul6Rc2mhO5oVe/d3nJdkj07e7bpa7vaVMv1gULdIbbnxyUOqI8QkhgewPvA/va+G3YPd6azUfHW7kRWFTFGP53IL9bN2XJzOB1JR0SOQ0umO3T9kLZcnVtpzOZ1z0UMYpq2uVTX22IsIQQjmCxomunHQxw0azd1RlNRruJXS5rz1aOLCxVjRbP64rIqcZ7vzxf1r764+Mc/Of3sfLEvFcqG+ReWqmuahQB+Pl34wcRKROQsx5dZhmVQoBo8Uynub1cf2J1wXIdgHBE5oAhhnNedquFoptMflc6WGrrn5RumwKHOvtaRsQWGQZbjMRyznDO6spmpmZWkzO9uiWTCYtBpXTLt8Xy90nQxRnEl3LC9vpgo8ozEYt1yEYL5hslhjBGt2C5mGQDwKGXWJ+w3rikCcCnFCCEAn1IOo4PDXQihI2MLLqXdajSRkYuatTMdc3y6rS3ZmQzdmAw/abkjhSoCwIAZwJZrB78vn1IGo43G/dmGXjDtrCIF3CTD9efrRkLmhlNKUuI9Qh3fJ5RWNMsj0LRcBiECkE6oluMv1LRIPDq6sBbjqeb4XxtZyUaUP39q/Ksjq7rjCyzujEdco74rIe0e7Dgzs8IDRCWmMyqJHK7rLgOAWIQwb7h2TfcVgRE4xDOUEmAYhAACdz6XIIyR7ROexYkoL/LINF3LoU2bMhxfaZgRmQksCDTXAwrZWLisa4ZDki2JUq7cEo9MziwjSgGBZhHTJjKHKaUsBwyL0qpQ092Zku751PFBs0jd9poWCQnItP1i02mLCWGJXa1ajkuwCJbnCxzTGhcZhCNKSJZFmWd2tahhidUdj2OQj7i6YdqETBUtm3hV01VYfF1vNoysEOZUju2KSiua9aUTC2NFrWF7PzmbzzWsnO7M1wygNB3iEWAAWrWcpu3vTkcTgmh6/vZEOB0S3jrcMVeuZ8O8aZOS4e3oaZtbXmMZ6EioPx9f2DmQfWJ0HgAwAAZAlBJyfnEJpRRsn2yE/umo0pWO7kmo/3R0aqRcZzCarGs/WS785ejsw6vlKV03HQcD5MuNh54d+8tvPPWmj/3j+z799f/+lccePz59ucbljSWtSE3T6U9G5sqNuw8OPnLkzEYqggAObmufWC5SgO3R5EStRNeHoM3oaY0v5KuwXm0INg4kI7OVJgAIDLe9LXFqIQeXYFMLgWs4bn5TwN0ommOF4lNj56hBAsM13XP/TUdCc4Wtp+SHuluWi/WPvvWW73z6fd/59Ps+9o479ve1/vXvvvmvfveBW/f3D3ale7MJuGT8H2hN5GoX9yTs7svOrp6P3S9yEwsib1ngmKt5bkYVqVw7JyvSl1Dnq9qXDp99bi4/U2qs6vWq43ztxNmfnl6oW7ZueQLDCfiCynPAfQrWgcnxhgWBxLOEUsf1oyGpualN+Vd4qbj67Oy/Gzx6+Mx7Xre3arkIwVpd3/DeQtccGL1sVAwrLHCB+AwAKJsCxGJNU+SLm1BfOTafVKmuD3amMcZFzdjTngaA0UpBxbLMswXNDFKCpXIDABKvLB+4HFgGr04V/vnQwh/cv+dzh8Y+vr3nhvbU4ULl+MTCYPfVz/0l1QeCtlpV4OumDRz7noNDwfZyXd/ycw782i7dTq8tVySUmI7HSQwAmLYb8Cwbthusp9YqABB6tZM903YBoDWh5H0yTVDLyNrb9/V6rnnzcBYo3R5JMhh9//D4lXdy7d95lxB1vQ/7p6em7tnZq9fssMQrr9J51S2nJSxhhASWqZv2Wknb390KAE/MlrKK8GSu0ZlQmhQqpkuBlnSnYriTheZgWqEUghDRcP2zJe2mroTueQt1gwAyPZ/HuKTbUYk90B4TebwjHSvXtHnfZxiUUASBw6sN+5buRNV0vvxihedoq2Lsagn5gNqi8pHF8s5s9PhKbW97bLpuFirGidXqQDQxWmhkY/LOpDKeb7z1QM/jjxxuI8bwzp4fjqztbG05urS0fVfH95YK2yEky6BEuQjLLuW1eFf2kXrJzZMYm7CJd8u25Im5ylRBa2i26VGEEKKUMMh2oV2VkhJ/LFet1L3vjK30RUNhgSUUCg3Lo1AxHFXlBI7lwhggzmEGwOMZzGFUaFiREN9wKaPprutP5DWf0IgknypZnGsTiHk+6etvW1lYGx7q6JSkH59eTaVTpUKhovszNV1lQ2XLm65ohEJZc1SJD0ucDZ6jmRAWEqqQr1vAMCLLmL5ve37RdafKjds7W9D6z4RQyiDkEcqtdxIjAkEJFJ2z9kMHh7uePjlzy65u0/VYjNPRMAYIccwyaxoCHcy2PHT4zN89fGzv++6LirztkUC2yNskY7rYNHwKfWrI8gmPUcV0VpoWAOqPyxzGDqEEACHwfT8s8GXNAICSYUk863iQaY1/bTLHIAxy6MziyPKuAXOpMpAKcUzLM7OrfbKcDgt138EcZzluUbNau1unZ1Z3tKR2pMKzFSMsYM1GiTBb1ryaZYdZFBbxQsnkGMypsNh0fB9YTCSBJR6RBIyAmrbPI2R5NB0WlusmRpCMiCtlapnGWpVNKTxBsFa2OQYigrxaW9nZCj39bYefPrFrT89gX/uZ+bW+7jbH9SKKSyggRHkMHMPOl00WgetTx/Y5Hvu2Dx7Ewly+bvEc4xO6VLE934+FecPzVZ/FLOIBqppDEEzW7K7uTK1Y1joTpksQIFViPI8WAFzHs11/IMKFWM6jNJFKzCwXr+vr9IAiRHtjoY6otNawVhvWctP46qllVWIVnn20bu5pVecaBgUaE+TVhnVrR4xnkg/NmjsSESdGH5pY29eefnah9MbtbWfKem9bMleqUdppeyTCswNd6bmlUuZOYa5udCiST8+1pAcIxihEL/C9vn93f7FpPnMmL7Qv9q6VOlj2tkziYEydzZcfGl/9zMknZhcqtuPdta9/oD35nnv2AsDIzNonvviTq7YQKKLQsOzORAQD3Lynb2RmLRDWDJLS9ri6VK4H30lKafDgoiH0wI6O//PQC3/0zjsBIMRzVcOKyeLNXS1feGHi/ddvA4D9va3/+PiJj735VtgKQQtBzvROrJTu294RbFTCwo372tUIvzHhzWM2eN+dHen5Ym1fzxbmRcM9mXLduO/GwSCAftddu+sSH02ossD1pCJ13YbznYPno4VgQrCimZtnBtWwWK6f9z5rVeXlTX8GaBj2Ve8mmbjywuh88Him3Jgq1Z+YONeajIEQwLrnp1y3NameLTQO9lwcirQmlI01ABxoT85UGkGJIMRzAMBzTIsaevT0BbITv8JLwi9FfcDyPJf3Esnwn/3zY+/55hN/eGTiHyYWNkvBXEvk90pQNe0Qz9V1U5EFAGhazgarobCVKM2rCYQKVa09HZUFznS82DpBqG45GNCGDHAgnvAK+UKXg2baYkZ582A6o8i/vqvnhvYUAEQJtKgh9sI5gC1xQX3gaqOOZrsixwBARBJSqty23hpVaRrhX0B9gBAw3XMlDn19ZqJpO3PlhurTSlUr1XV5K9fnK4TjF7hHbgXTdhVZaE1GWiThzrj8mzcP3NKdzERCxKI28QuW9vDJ6Tdff4FE9EW49mQAgnxgvRQwtlwYSieKdS0k8k3LubQ14qVCs10ACAscAAQf1ORKqa8lNlfVAejOTPiNg5mqS1c1BwNMl4yEzMsC88PxtYZ97mMP1EVv6IyHeAYAYhLfsOwIzy3WDQQwVdI6YhICVGoahukUz5aWKuaujOp6ROGY8Xw9IrLb26WDvRHR856bKn7j6HTDML9ybPHYan0835xvmgKLZImr1ZnJaglR2JNWddd7TX/qZMEE6n/36LjAQDqFWtM4FqbzOVvVLYRRSzTcr8gCizOJULHmumuEY7Flu5RSy/TSiZBlODvT6o5EGCGEEDAsQwj90enVr59cyVettpgYFnkf6NhqQxJZDyhGkFIFxyOm5Zm2jzF6bq7y/JKeiCuuR+IK71Oq2z7DYoLBdv24yt831Dm6lhdZNiYzmUToup3da0sFjsG9iXA4zCfisaVckbEap2aMo4V8ybBNx68ajusQlsOG68kMJ4elowsFyyeG6zMMNsD7/mz+UyfPPJMryyFpUTMarrc5gPPX5Xf98w5lgBDCAJTSew6cM4dyCZFELiUzj87Pn6nleZ2TLXaoNdXTGh9bzDMIZJ5DCByfbpQdlprmfEPPhMRMSDB9v2m7o4XmatPOhIXr0irPMCxGPEY+IQ3bM10CGCq65fp+xbQRgprhkJa2StPRTe83dnVQ39M0PRkSLRdiodB8RWsNc5ZHYpxiEg0EQSfM792z59ixs54PHqGYg5LmAkCrGkqFhHt60/vbopYV/FKp7lDH9hgGsQw2XU8NsZrl13RPYjjNpWGeKZsuIUgRMKU0JDKm7bHILzbsfMUKiYwgsK5H26JKQdc8H7YPdRaKWltGXcqVeM4mvCuBQH2hRQxRPxyN0EyEc1wSC3E+QiKDAYPl+ywCj4DvkViYYxBEZA4oTSucLDDxMNsa5dOqIDKoYXkHd3bqhQqHsSQinsMcxgKHVVlumKbnw2yecJx/oC3yiXt2H51cEFm2NyaPFbQXV6un1uolwxFYpjsqJ8K85VGEMGLoyXx9pqjPFswzRa2gO6dyzVN5rWngZ1dzIZ65uSvWm04S197TEiE+7W5Nza7kEUKnC0YkJO3sbX329OyqYfdE5BXN3LIF5SLs6mp5emwuZ2jXae6He9twsfnlHx/5zU/9y//8yuN+3Ymn1M/+9ht//NkP/tE773zwtp3ZZCSbjNx74+ADt+48MrF05Rt9SpHWajohtCehPnBw8LtPjwTbg+rBcEf6hbPLwePAhYCsWyVsuJK1JFSOZZeKNQBIhaWaeU5Q5I5LVEcvcwgAQDMSe2Jdc3OyVkISXl3RJ9aMYwuV5YrpeOC4MJErPzy6WNLcsaUtVFADtKcvSH66Y+GRXAUA0qrEocvedjPR8NTaBYqfmbiyIfQJAH1x9SKqDwDUDUvk2U5JnWpc/K8NtKciy8X61x49AQCjZ1fquuWeOhMIBOHRmY5i4TbW/x9vvWlXUppf2+KkNtcHACAmCRXD3vivyDKO67dGw9dIlP0VtsQrvZ3/m8C8XucctlzS3nBwaCVf+8H3n3/3mw60qBcqmv8iU4KqaYd5rqpbEUkAAM12pfUYsVjT1F9AfQDWz8jxvSeOT7/v3v2W67mEVHUrSAlKmgkABc0caokBwEKxYXlXZ5hcO/hNgX6+ricUKSwJC7Vmaj35CZRP2ZelTkMpXI6t2HRckWUbtmN7F+y50jDCL5Hsfi1BM6HUdDwAqBt2oWmenltLZBOPa+axs6XfO/V907Q5hCWGuVwV4lLQa8jRKaaCiG3fCQlIFdmehMxx4BFP4hmPeklBns1XrkD9upbz2gyPkA1L6TMrpZs7s4dPzckir9mOxL7SASSvmZH1OoMi8AjBxEqpvzV5eKXRGw8BgLf+tUwpwki+DgACg2/sS/zsTH5PNkIpfXKmtCujFjTrsVKzYrkhjumKSACAATgedyhSXOQjPJfTrXfesRep6ZP5ekdMrttei8zPV829naGRM4XvTq/t6ckc2NE50Kp++fFRLxT6zqllyyGjS7UWVRQ4RrXgj70AACAASURBVGIYlkB/i3xovpyNChEx+ls39dy2/X1/8jc//N6pswKnXtcWXQi1T1WLEZklhOZrlm2RoawyVmwyQGWWrTTtINo5tlAbblcz7dEjC5W5kk5Z3JeJLOWbA+lww3B5jjEdb023PIeuFTVWZBq6gxFKqULNsHtCCsZIFliBUswh0/UAo93ZyHi+EQ2xrkt8nzw4lEEInyzWZFba1hKlAm+aTUzV3t7MxNicWaiVImHTIRxGO7Zte+Tk1J0379csKDsGz+GG6yMGcxg3Lbdu2rLI4XTIowCUSiyKc2ynLPYk5QgnEN/L1Y1OJeRTigAIUEoCnRDqU0rhnDnxBqEuMAt78y3DPzs8WXKcatF+7S5hvmy+fSj9wsKcptv1uv5bu3o+s1Z+anpld3sKAAglLEaW7y83zXZF8ghgQDXLKxg2AsiEhYTEB3vGAJSC5fscxqrAruoGJjC6WLARDoKGjMovnxyVD+6VBcSzzJ7eNqNWzUid3XHFJ/5wS+zIYikbUy0XszyNKOFapchl1btu2OZVShNFAYBmwmLRdCkhbaqoiFxMkF4M1SzKCBw2LMIwOK1wDcML80y+ZjMIsSzCDNJ0m2d43fYdz/d9LEsMpTQk8Q0HgU8QRmERlRseJ0BElo7OrxzsSg3u6Rw5Op7Gfc+fmLr3lr0sEIRITKDzNS8R4qqWaxrQnhRzNYdjMSU+g5mEwrEI8QwKSSzGEA9zxaYbV1iPgueByAH1oWG5bQlhvmhx8cRzx5788FtuPVv2BRabHuE5xHOC7dgRRREwGilVb2lLMxjdt2/gkZGZ+3d2ma6v295gi6IITIssVk2bQUzdcfNNR3e8iMSxLKMIrCJxZtOaLNWLOnVdcnyt2qdGCYW65z89vZK/cZBSkCWRUqg29Wg4lI1HTi+sNQ07X653qhKh1KcUXTiuB5G3v0ll6N7d/fd97mEQyaf+9qEvf+eZt91x3Z7ulg/cu78tFTFs5ydnZ6KxLe6nu/uz0+uS/BftcAPBfATLoOuyiUePT9ueH0j0BE/e3FIc0Ht6FJVBiAIErmTBv24a7hqdyWWTkbDIN00n+P4PpiKTxfrBrhYAuGuo+8jMyoPxi1WGgn32KnGJZ07M5Z+byyHe75Ajh6ZXX6zq0y9MJVXZsr2pUhMAKKUK0Fxd3yMgeOvtsBVu2tl9ZGLpwdvOBdBtkdCz83kAUAR+tam5hHBbMXz292RnC9UbB9o3trSnIpXm+SC7L6EWLom566bNMyzLYIwue/vqSEefPjlzdqn4N999NhINHRzIHvzw/Qf7WgfaU2pInG5WnptYu3uoA4OnX4bzE1OkDdGkiMiPFzbRljjG8UgmEq4aF7Qp/wovCVeNPf79gGOYm3e0//PH3v7Pn3jH02PzyiWWwC8pSHpJ0GyvIxoyLCdQUdQdV12fqy7WdDV0TZHiywAC4BCuNg0K0DAdl5DJmuYTAgCVfPX0WrmerwLAj1+Y+JtDs/YV/cZfKpxNzUD5ugYAHMusNowNwdNAAuiVqFVueb2C+kDDchqGDQCV9ZHrZeQD14KSbtoMzDW1Pzx2ZqZY/dOnR/56cvHE9w7tZew/+/D9n/2dN3ItMidcPBnzUiPyi1As65mIKjA8h7mIIMREKXBZFjDHYxYBmi1ULzdz/zLe2id0oz5QahiBRpMkcLrtxl96acsjZHMz8eZ8gAKsNJoeIUdmc2eKzR0pBQC+PrK2Nj5lOF5PNGS75DUDqf3tUZVhbuiKPTVb+uxTU+P5xnPz5e+MrLw4V1ms6LMV/enF8jdHl8cLTeLTXW2RiuU2bNe3vSYTHkgIZdZ+YansElqs66tzS198cp4Py2+8a++uwU4HsEVxV09rVOIt149J3IGOeHdSXq2auutrBj6ykq/qzmix9MVjk6PlsoxDHBEee3Jkb2tkLK+nVPGYbcS4CLE1gcMN231muoQAFJltmm5IYBmMWqNSNMSdzTXOlvVsXPYIFVgc49iUKq3UDY9SlgGbUNcDhxKPEpnlJJZNq2JNdyKKYPmEEGo7Xk2zyw3HdUla5dQwjzHyKfJ8WtS8umfnLIdlkCrgzmR8qd6ghEZCHMcwrZ3ZQ8dn6rYb6AzeM9w6v1qMK1zBMCq2O18z82XD9WjdsNMhPirzHYp8VzLOALAsgxDTGwt7lMZ5XmBRmGfyTRMhxCDkEsJjDAgopZSC5RGRxQDgERr0gwbXHSHYv63tsRfPVivacq5SzBtPTOdfnFjQLKdY0xbyVaNhrNS0f3puEiOE/3/23jxKlusuE/zde2OPyMg9s7L25e2L9J522ZYtydgW4DEGGi9jNzQw7UMD3dMMPhgMNNBNn25joJuhmRkamB4z2B5jbLAtbCQvkpCs1ZKepLevtVdl5RoZ+427zB/5qlTSe0962ujx4O/kqVMZmXUzMjMq4rd934cwSLLs+2tBOu3aSCI/Zac6YTNKxxzjmrrrGuqwdRAzBnBR4VQnmCDEGU860We+/Pizqx3mhVzIB5+8cPTU8mReBSE/f74ZlOzFTrAe828vdx9b6t8203hycZVxceOYe7DhWLoaIeX+tb4zWjt2ZrkdpqqCFQ2XHTWiPKcrSMhFL9RVJATEqeBCCAmUQ5DxfsSEkK6uEIw1gkdds2Sqro5NTIq26g14TiOWmcvxKGcTQyNrCV0W0ZHQWzZY36P3P7v2t48vPrHOH3z67GyhdP7scl5XG3mdgsIySTAyVWLr6lI7qeY1mglDwY6OOSAqecalpeGcrkSUBSkLIubFWSRoFKFWxKKMCyTzGkmlPHDN3KceOh1nwtCIa5KYilLO7Pr+joI5XjBUIE+s9rkUN+0cF753IaBl2wAMa35SNnWfsViApqG5olW2lPcdaBQ1Mpk3mBAZlwzkgIrpojVTNlPBv3Bq/evnW37MCrb1pRPrCCGC8Nz4yMpGp2QSBSOM4NaD04uLrWU/nsnbq0GyfaAfNlnpWwX44e2jd+75hTfvr9y863d//j2/9KE7hn0AAHAMHSuXv6BcKsl/WTQK9mo/HMmZx1N6aPf4i1SJxkvusZejFO+drh2fbxKE6o61OgiHb+Qt0yMPnF9DADpRD0xdlNR80U0A6ERBCGLKfS/79buf+sN7Tn38y0984hvHlh49+85dpY9/38Fbqs4Mjc4+8OQBzP/9j97yXz701mV5xXH5kVJuYZtRw2TBaYUxAORUPQjZuc1C/ouot7W8vfHCcaCJWqHdf8GWum2e2+YWrBN1kCQRze5++oyQV2xvu7axb2bkYx+646/+3Y//2S/+6I8e2lEeKw8FghSC/ZjauuroWtmxzm10L1vtKzrmWudia6VqG4Pk+d02FIUy3ijmekH8htZ2//+N11re+/84VkJfSjluugDrtqmPVvIIIJXC0lXXev2jwyshEyJvaEGUuKbhx2mQUltXJQgA8MJkx3jl5RZ4TUgp+9tHj7312tkzrY0/fuLMIYIeOn2e+gIh/CvPLnziz7+ZMH5+qbX/8NTLrfQq0ewHAGBqSitl9qYaz9DG62r8iQEgo1dLEgrSzFDIIM10KQGgGybjJRcAgoSOvbB/+rrgORmfOT9/uFL6mV2Vv1zYWF3pLj5xZsetU++7Ze/UdPGRU4tmWVvLgsinclvufaWI/CqD9UGYGJqKALyYIoRGHCvjnAupKQQyAAA/Ti8ranSV678IXEh3M2Rv+dFQC0uCTDknV64GXQlDD7KtlKAdJlsyEetJ+m0sc7b1TC+bKRiZYFQwQuOf+dG3PLDsrfpxP8oqjlbLGUfXvffuGz046p5qBe/eWz9Qc6kQ53vh013fIBgkigWfb8f5nPaNUxvf0Ns8Eb0w1VStl6FZrsdhAgJbtlmdnjA0HAt8et0HQAnlAIJxGlAiJagEne+GEeUmwaWSXrVxgpkfQKevtaLsLx5tVm11357pz/3NQ198/Hy1VirbuDygbTuoaeBHrFrQ45QTjLyECQQJF1KCwJDTldYgefvu/Ll+PDmSa/bTTkhXu5FlkLkRx8C45fcRQnlT6/k0TCkXwgsz19ZW2knRVoSUlqEWFFzMaZ1B2g/5E/NdXSOISMlRRsW6l+i6oSOpKModsyNfe/bsbWMlomILo6m5xqe++cSb7rxOIlAVHFvmDftnTy2s3bxjBEwhMq3nxQQjQyUpExjBXbOVM14UUiEkhGkWUqYRfLod7K/nLUXNhFj1wh3l3NCPDCOsYOSlbEsFiINUEZZSRnxoYoXedfOeuz76J+WCranKpz73cM7QfubhE1mSnVlu/dIffaVUdJ7CQDoBzd4cCdmM0wM1V0FqzPh8L5IAI45u66ozbC0iFHOBJSgYDxMDBeNhWJYwDgVjurRjQPkv/vFXVYQwgpiLU2E8IFk1MPfXJ/7kW3f/i7tuPttNW1HmZQwASpa6HlBNUVydnk0S2VOcev3M1x77vnfdaJq45VHHwLamt8N0tZ8seHEtRwwFRVS4JolSsdGLCzk9TrhEkiGJhOzH1DWVVS+OqRBCOpIgFdYGVEhAMT3D+hjjuqFXNa2BTMtE7dzG7mrV1fWvff4bgR8V7zh8br2zY9fYwAdXRbFF1rqxn0IxHytE7QwoQbKY05Y6iakQCnK6Yix3k0peCyNhqiRMhWPgom4MBJOMCQ6MCk4QTWVtpNhstg4cnMwrpJ3SoqWs9FIEqOkPTMM8UC+e7HZHctp1043/9s0nf/6uW84MaMzEAdc81fbLtt6Nad3SMEJzRWuuaLua+oXjaxVLi1NWs/WY8aqDd2jF+eNxrpDp2CxbWs02OlGcClnJGdVKYWFp7WdvP/jgUl8BuOXQ3FceOnbzdTsAYNQ2znvh5Lax1WFgp2G8vR98647Rzz12XDW1vTMjUkIqBBPSUDAXcjTndKKkbL5YkGfIHFhpe6OV/EsEi66hD5J0ruwGCT2wc+zEwsZ7b3v+0Vt3jR9fbu2fuChvrxMt5VQjLxhDvX73+H/90qO/+IG3WZqKAUKaDafbh0bFb5keefuB2X/7+b//2HvestUbP9FvM8EBgAsxnSu8//o9z7b8g9Xyew5MAsCn7/nOr90X/eU3n7znG0dvv3buZ37gxr/+zQ8DQMqz+aZXubJi3uxo6WuPPu83nDc0AOQlNG9o4ZVrf7O14teOnNm+xbUNhC5qSAy3XNMob83uD9HygzCllMiNOCjrRkm//F5N1ApblIbqIHpk8XlrM0NTACBnaPW87W0bBNqOomuttr3rd48DQMU2hjy9IfKmNsgoABQdc7XrN7ZZKHwPV49XfDn/7kInjQ1FyelanFDLIrvH6gBQLzgAcKnqy6uLll4WUsrn1jpjeduL0x0jJYzxSs/3WXqgVAOAIE6V16zg/hJAGAOCT376gQ/85qe/+DdPTUXJzXsn/uRj7/v4h+6Uc/Vf//Hv+6vf/om7/+NP/eEv/HB6FYo0rw4rnUF7ENq6Fmc8t1lpfu39gRfyjC8iypiukEFCvSQFgO6mHNty2+tnr6CTeJUHw16hfWh2+oenJg5VRmYa5f/74x/41Md+rJor1XX3QLFWxbYr9Z258myuOJd73bKRlPKhYWQ/SW1VcXT14oe5mVwN4suIGl3lO7oUfBt/I948BasK6UXJluTLK8IwJRj+7qfZ1KYNCEvpWzDpRsnKIBnBUsVKSiVY1tSIW87pkwWLSfG5o6v3z7eeXumfbPsAqOxqz6x6IedUyhTEdN7aVXQcFZctfaRgdP10umrfNlmaq9sR51k8iJO4WM/tnCzN1G0m4Y4dFVslYczHq87+UXe8Yd0yW+6stSTIgqn2Y9oNacaExJAyOt/LNvqw0s0CxqXAukqQSlK36PvRl7/1ULcffPmJc7dOTfTCECQgkEGc0Ux4MWOUN1yTSCmEjKk4t+FzIdtxVrW1iLGirS17YZQwyuT5dnCuFxkmKdmKRFLFEEaZrhIMqJHTXVMhBKsKzjKuIGj30qKlqQrEmcgACFIA4ZumS2HGm0EyyGTKeMlQrp+othl02j1dVVSMdu2dOvLMBSkh41yXMlcoLK+0GFI1osx3IyFBIVhRcMwExvKjn/3m8iDNGLcUQil3NGUqb6ZcuLriMYEYHWScCYkAhBi2BwBvCgEJAAJbv2BzKEYk5Iffdf0H33U9rtkf+6l33PJPrv/jj/6TX/1n77jzxl0f+aFbH/rDn/vMP3tHcaL8rbPLMstchTAhvJTO9+Oqre+r5sqbbdWECQSgICQAhmMPw93ACDEp/YRO1QrvvXZ619jobR9429s/fPuPvP2go6u31SsfmZspa2peJ9fsmvo/v30q5WJvzSmb6u5qvqhBBqKRMyImsWoMkqRkoL37ppYurCy3kpjxhMGKF0cZP98PdR2vB3yioOgqFgImKmbeUaUAjiQmOBMyFRBTkVLuJ1xXCWC87qVhkiGAvIEYIWOKcdjOz1imKdRKTssoHJ4cZYiPlp0f/P4bi0VnYrxydrnZ7GeYAAKJEHJNRcUgpawVVC7B1JWQ8oqtMSL9OIszqRLc7KeOpTQK+nTVyARa6ocIyTTjCEHJMkZd1dSQUy5fOLtKM3auF6WpQIBVBRuastD1C5rWS1gi2F8eXbt3yQtS9shSZ8B5SPmTa32DkCMr/UHCmJDHmv5ozowY1wneW3eSTBAF5Q39B3bUZgvOfD+2NZUK6SXZXMF8997JQRwlTOytOu/a0zi62npgsX+07T8Spd9cbN/z6Imypl7wIoIRQS/wJB7edIIRgq27t+wYe+LUUs02yOajtkqkBIRAIeBFVEiJhlzkbbfbD+944sTSS5+whhSCoqFbuvZDt+z5yjb7ZAAYL+eHRLvteFE1eqySVxWy2vZg05VsuP368cp3lltMCCHlW/dPffqJZ0/02891m891m7O5/MFS/WCpbigqArA19ZpqLpasljNrOXOkYE+PFN5+cMfffuKnf/nDdw4pzkPsGq0AwNIluzTEiyyBAaBi60NXYEtThvZHW9h6F5eVGCq51tI2IaPZcm55W8dAAgQx85J0EGc109mIr2hUvN3l7UUFfpVgS1P8hNbzjhcl6HKaoXsmax3v4uI1xxz6fg5RtA1bU+KMFW1jrf8S9Izv4aXw6qOx7xZM2I6CcZzQsWp+SOet5x0AsF8ntcRLMXQi27qLEHJ0rahr/SA5PNuwdXWQZMbmDMlTp5YN7Y3t0kgJv/zhO7/wb3/iIx+8/Xf++V379tYAYHZm5JpGef/eiSHj6ifvutG6ZIDqKvGyvbkza52FY6uupsYZ2xrTGvYHXlak7JUioGzYHxjEaZKyrdbnlx48qmqvf95Vsk1EBQAEUTpRK6gK6SNk6uqwDeIYWpYJ83J84ktx9fF6MWdO1AsA0I/p8IV0QmAbZyOI6YtEja5+8UvB5UUFVQDACLW9EAA0haQZV19tOreVEhzf6G+5Xa4N0r9+em1yfHIQJn/w+Qff+nN/9KHf/lyz46uAVIz2jbgYYYcQzoEQ/Hdnmo8v9gSXNdf4q2dXnmsNcrpCuRjQrGbrnYh2BqlpaFSIhPJjy56uErdYnCvbrkI6YRTJRGDIG8o795biJDu27LVjen21IBCM7Zop2yQVIhNSJVDJq9M1wzYNglDPJ7ohLFOxDVUlOErZHXOla/dPy43wueXWRKWoK5qhqX2OWeIzDqZBWMqsoQgmE/mcnnFpGaqikuPNweML3V4/o4Lnbd11VMrERj9VEZRNNeNQM/Vq2S7mdJayQtEkCj445hoqcgwyVGCMKEsSlmTSNogKqNWPdZWc6EQMFAOJKIPj64Ovn+4UHee5tbYf0RNNHzA6sHd64fzK0NzXNnRDs4+cWhhkYrGfYYUSjFQFcwFFUzMUNV8u9JOsbOuGhjiHfeWcSkjF0roRjWkGCPmUSYBMSEPBF6cmJAAAlxIDcJBcSimkghHe5BJ84PuuO7PUDjl7/5sPzpbcfbP1D73jug+++3rd1KSUh3eMSoz/9OvfoQJiJub7dGkQT+SNiqUBQMoE2bQ/UzBiUqoYDekKcvMgF1JmQpxa61w/XS/Y6Mem67996/4b9o0VbB2QLGrKuGus9qJSMb+23tIxYVIiDDdNj9x7allHSkwzL85215xBEHbjbGKyfubMGuWyUdA4FQFly/2YcRiErGwrmQDXUh0D94KMMkkZNwgq59Q45qMFlQAghMq2RjNuqlgiYBwRjKIMijlbj2M/zjRMuJSuRfKW5hpGc+ADQrv2TquqghAghDIaRYnshpmpKQkTukqKluqoRErAAF7MmBQ0k0VHUwnmQoKEQcK8mHGBKBNcYj9mKiIjBX0jTs40wzDl+YIjAa00/ZKlRpT340xIOVKuLG90x/PaIGFjeUMneN1PJhtlzxvsL5uuruiAn215fsa6cbrix80wO9L021H6+FrfUkjN0Ve9tGYpCKGiQa5v5E0VhzSzVNJOspGc+bUTiykTx1v+ny625d6JPzp75mTs6Uyhff/Nh+a+9PiJYW1hyrXmB9FXz1wcy0GXu76MllyM0N5q4VjzxezVvaVqK45iRrfPF3EpmZQ7xipbfljbJ3y2Y4tCcONE9ZGTS2+9fuc9jz/vILZvvPrI6eXh78Nx/0tXAIBb9k8+c3YVAAxNPdfpP9XpAwDl4i+eOfu1c/PnBr0b946dXmrPbKYBW5bDWxhx7WPNi/F3Je8oCqkUncteK11TX+pc3oFraLbTHTwfne+rFYfSQKaqXqn8tyUxtH1j2bWWW89nHW+aqn/+6IUvHVsEgH5M3/fVR79wbpkQ5UQ8GDOfbxpciv0zI1sjWC8q8AOAqapBSkcKTv8K/QFNJcm2zkZe17aYDDXbboYRZaxgGWv94GU1Ob6Hy+JVXs6/i2ApesJpktKye9HkqJ63AeBVh7+vAhnnCeOf+/bRlLJelOBtVdW1zuCN4w8MYepqKWdxhdRyVjugI1YOIxhzbQCYKlxsq91z5Oz/cONLKdK8FvSihHHhGFrCtucDb0gWRDm3FGXENm3DPNuL733k5CNH5+9++HicZob5+r+igvCwxRHEqYLxTKNUtvSE8aHRW9W1Y5qpCqY8e2k+8SuK19te2Ci5ANBPUku9zGE8SNLtokavaPHLopekx/stV+iGqnS8ECSohKTs1ecDsJkSnG57959be2Kx9cn7jn76ybN37qzvmRn/p4fG/+hfvedzv/VP/8e3H44SemqtrwBCQkopQsoTxvaPuEHMTQ3342wjTCVCzyx5C724amgFTY0YK5pqJ6Y7i1aznzyx1kcYTZf0mok2MjAVoiqGrZk84w8tdlcG2XjVzqS40Am/dnJ9fZA2u7FrKG+bq4wXtaJJOiFr9rLpnDlZtg6M5UYKWhizbkgzLqSEk71kfNeMEGLx9Mm8re0aceYqlVYYAAAXsudT01TjjKcZp0xQJjgTcUIFFzeMF8uWDhgMjB1duW6yWHQVkGjDT9eCdLUTrQVJ20u8KM1Zek7DG356qh1wgSxdEUJGqZASulFGJABCYcryOU0IIQF0Q4ljFsVZxqSX0LFSbrE7wFhWDAxcvmnvKAjRabYloBFTe/v+xsGdk8fPLvcHaU7XuACZSS4kEzxIUn/gxyyrOrqtKYBAVYiK0aRrrfqJn1KCcF5X+wk1FJzwIfdX6AQzkAShYX9gGHQRBAIklyBAvvOm3V9/9KTnx599+OiZjke54ELumav/X996ZjVM6oY2Ucn7SboSy/kgq9n6zrJpKDjhPOGcSwFIcikRAi5lkLLhkZ1wIaTEADHnXMqNflAwtMlKniA4UC8CQjPjFSak6g/uu9A5uj7AmIzUR04vri4E8eIgToWQoDyxsPHlp5YeW/ayVF1LAk1Tyzl9776Js2eWXYsEATMVPJY3C7ama6joKr2IZQLilK17TFNxxqWqYMohowJj2OhmXEoVQ0w5IJRyUbY1AEm5rLiqRAogUrC1tW5ctBQpJUi5s24DgB+la/10bvfk6mqnXsyvNPthkoUM8pos5FRDQxihhENOR92I+j5NhRxEmakRAKkTLAHGi6ZrkX5EKeWGCus+xQBcQrtPOZd1W1cwTE7V15c3JALXUpiUuopNXc9bxplW2PTpUj/OmCjZWqlSee7C6qRj3jVXq+V0A5FGzmRcOprSKKg3jLsn2uGpdnC+H857kaKi+893Hl7qtUN+rNVrOCbL9I3YDxL2yLqPhfKp0+e+sLD4/Y38j0zPuIudHxkfLyhKe6Xz3rfsPze/UTe0JT8+1fY//9zqiv8yvdwP3nbNlKXfe/IF8/0AkDN0LmXCsu08BIKQgtDN+ybue+rsVoZA+fOuZNtXGCnYq/2w6hhtIWbGK0+dXiFXdim+LPZM1U4sbACAoqn39Qb/x8kLv/bUid89O4+Y8qf3nw0HYGP90dNrl6YBW7AMI2EX6/eVvI0RKuUvN4Ej4U27Ji5so9W+CCMld8tKDADKlt6N0pBmJUvPXznquFRiaP/MyPo2TaRvPXvhnn740599qPJrn7njE1/89jdPPPbshuqW9ppukL7UZK9laMPOCVxS4AeAgqmFlAFAwTIu7VEAgKGp2xkROV1tb2MPhyHbyMLJWr7lh/hyDsffw8vi1V/Ov7uQJNmLvGnNN7gqvx0J4xuD6Hhf/Je/efTp0ytRmiWUA0B3EIUxfSN4ri9CvZjTCAYEGsEl3RISMEKmRvKb/ffzzW75jREbBYBBnAKAbQznhS6eBFPGlNe7OQAA3SDNG9o3T65+8uvPAEved/u1X33s5L/8z39dKdk504hZuv32EutcZQDNxEWLt7YXFnLmSCmnEmIoZEibNjXF1FSNKBp5PaPzhLJG2QWAKOPjeRsAUs5hk8MdUUoZ3zq8X/vLAUCQZADQC+KEsoeOzSc0U1XChXjt32DTj/7N3z1939n12+fq/+HdNzbyGgDsbRRHK+5YNX+Ga7TTWYlZM0hPtQOMsYLRvprb9JNMiG6UJUxMFaxdDefgaO58K3xyEUrr0QAAIABJREFUtX9k3WtHWRSxOGan2/5s1ZaZnKraOUtPAN885mYJqxnYVLVa2QIpuZSNvF519amyZevkwsYAI6TrBsb0mtHS2oAqCoo5f2yh20uyVsSAKxhBydXSjCUZ73i0OjaCAEVxMlm2UioMDTeDEAC4EIKLfE41NBxmDAARBUsEGZOlnJYzldmKpWHoxxnCcHJjwKiUACZRNIxuni6lmQAhXFvrUZrEIkwEAugH1FCIriqqgjFCGRdYJ1nGTUMRUsYpw4JvdKNmDKYKGeeAAADNVktCM0+tbGgKPrIy2LN/emN5PWeSR5Z7Z71odKSytNY2dC1IqGMQrBNDIxxgvT/QNC1vaBhLj7IsY36alQzVVDEgiLOMC66BCDMOACpGKRcSpACpAAoY1zarHkxKLqUQoGGkYZwJ+Z63HthfLv/GH979yLNrf/Xc6SU/7gTpgfEyCHHBD+7cuwM75t1+q+IqVUvHAArCjMt2THVCQsrXw0hKkBIcTQEJBCEEEDGhYIQB5VRFSEgyNt/uy6FQvJSJgEY5v9L0Q8aRREGcNWw51ag8fWz+5GJvaS146ly3bFleGnMp5/tp06ecGHEYgIT9B2ZW5tcIwoyIHk1DJhSEBwG3DCWhopYjhooiyg0FJUwwKboR5RIyEBlnSEFlR2NCOLqSMMG4rORUCaATCQAso5pCEEIhlUQKDnLEdTaCSMW4UMqHfmypWqc3UAmq5TWVgK0qpqYmibre68+vh2FAbVOlVJZyKpGw2ktsCwNAO6CurnCBHFNpe1RHqJzXuj5VFTJXt21VYVw06nm/N1jtpH7Cy7bKhSRY5h1nvufHWUaEOVvV/SS7ZrbxyKmlvz27caYbjOaMbpKpCO8pO8tePJkzK5o27ZpjOb1iahJExVQrlrrsxX9+dNlL05XQr9uKlCCUZLKAr5nOv2u0itvp5x4611zvnjy9tHhu8emHjvzY9193y57x+548e6Yf/v18+9PPrsRc3Dj2MtOV1083vnN68YmVF1ToCUJCypptdS4nMjNayQOCZmcwzBA0greyhe2dBNfQ0oyN553lMLnz0NzdDx+DTVozl3Ki7D67bep9CwRdNAoEgBt2jz/4zHkAmHHtaS4/smvqt6/b+9G5qQyy3XnzE/c++ytfeeaEj9ZeSNKFbT2HA/Win2ZDzm45bxmacm1j5EXtCJ2oVGSVnBW/cPJnO67fPb7dSmwsb5/Y6NuaWjSNbj+9Un9jKDG0fYtlaAvrvW89eeaRo/P/8S++9fE/+Zo8v2avb1TWN37rh25a/b2f/N0fvSnptgDA0V7KmKyYM09vE0h1txX4AcDWtZQxP04VgocaJC9CztLjbS0F11BbwcUv+owfBkm2Fg0Oz4ycb/Yoz+j3koFXjtd6Of+ugEE0KdhkrTi82/RCAHjt0ulXDy+m9xxbHClY77/j2m8fm//qoydW1ntciGHu/rr7VW1HP4gBoF5yhqXcrRHzZS+oWs9LUl7Y6BuvrWD/EnFnsDltEm86BwPAa6wuXwkLff8bJ1e/b+/YR99xzc56iSH5b37iHf/uX/+A5yeWoZqKvv2WcPqyZ42XnoZSMB5OS/eDRCHYtY2crqZMDNOevGUk2RVP1lt4pSE7ZWxIyQrSrOYYAEAZ3/rZ8WPYpGe90pWvBD+lANAehM8srH/m3qeOXlhXCZGvXC52O5MYADBCc5P133jnoV+68+ANk9VeRE90yZPfeXI8//yRubDS4ZwLKY+seGVHY0KqKnrLbKVoqrqCFYBHl3pNLzU1RSBY7yQY0JqXnGsHUoo3T5UNhRCEpl1zMmdpmIzlzBumioOYWSoahCmXqBfzgqrsH3EFQNXV0ygsWmRA6VKfPtscGKqy0Y3jjCMNL7ejgLJ2wCp5HMSplKhgqIcm3ZtmS4eunQWAZ86uccniVI66bjsDkQaapqQpxyA1BRuGUnJ1DSPbUDth9o2TrScX+4KLKGWDhDmWliEAgE6YmhrppinjQtNIxqVCsGkoBVOJE2HqBKuomtcqeY1JYRmKomBVIa1uTDCmXHIpHUPNqeBoioHRRNkEKcfy+dPNTpiwc81opGgd2DN55uRCz6dxzPK6MjFeP7ewgoVMYxVI6pjE1kjN0lzL2T09LgT4CdcIkVKGSVYwyFpAp/LmgEEmZMHU2jEd/o/oBGdcYgQEIQUQkzIVQoDUCQYJBKPhZJGC4YffevD0ieVkenz/ZO2BJ0/9wZcffOjpC0+cWPoPT53/yvnOfYN2ztCXv/bUTbUSACBQE55SzlWMWnEqQI45NkYw5BAnXMRcaBhpGAFCQxfblIt6qXC66VEOT652uITFlciamXsqgPl1f6MfSc5PrSdjo/WB703WnaKrayreN15dGvQO13MakSVLreR0hBGX0Kjn/b4PGFMqCEGOiiZdc6KkFhWoOepMXi85+iDKBhFnGWdUIAwKBiFFMaelTJgaLjoaRhJhZJsXNUB9CqAYgyAGkGGS9XyacLneyXKG6acpF7JSr6yvtKvV/PzyesFWpATGZSbkIGQ9P1aIYmq4WrJUDTdKqmMoEkPeUUMKCkE6Qa1BljLhWqqfiESKVjdWFdQoapkUHUpzmlobqy0uNqt51daVsqXWXS3NhGubfhwXbG2mZHSzOKLCo2J6fORUJ8rS7MiGlzHx7Lp3ph0Bh6fWvL88vvLoYm/NT9a8uBvxXpTNVe2ZkuNgstinFcsSjEy5RhyqLNP2j1Qx57sbxUM7xi60gz62H3rm/ORUHQDCNDu/1n1gsZMJWc9pN48Vd5Wc8144/Db55YyKr5sdffzUkgBYG0TDLVtnDIRllPLLjgPdcd2Oy7oQbO8k1HLW+iCcyNsbQaxr5Adv3XvP46cwQhghKeV1c6OnVtvHeq3jvZaQ8ni/tUWFQptntrFqQUpY7/pD7cu9OWe17V04u3aronzywWfu+/KDFx56+qaK8vjZZbgcEEDFMd8yXT/e7AFAJW8jQPXSixnSQ9Tz9pn1F9Tyt2O04m6v608WnKHjUNEyettmcjYn9S++kalqYeWFDgnFnPn06eV/8XtfuPeJ04d3jT36hz/7xZ+6q3hw8j//4o+85/AsANx1cHa7PfmVUC/l+sHzqZqrq1sOSACQ17VulEiAomUstC9DinBMLaZsywxhIu+c7wYfeeS5D977xP92eul+v7O4mnhB9tmHjqpEfYn2y/dwJbyyy/l3KTBCNd3c4j4OU0/9HzAfONnqf+XZ5fb6SpzRj/7YW289OPWV+4//6p997dRiK0oz643MB7wggWF/QCEAoGB8tLtxoFRb8cK99eLW04JNLdRXgcuOeG5HmFLYtOvamkSnjL/26vKlSJgY2VUruOZbd45pCjE19ZTfEQNu6ZpxyYSYQTTttZ01mBTDVkA/iId53TAT2MwHXv4jfRUhO2V82HV9fGljf70Em67MlAvYHP3UFeWVrnzZL1ECSJBD86+WHykECwmci+HSr/0bfFM1X3Iufkon11uKgl1D3S7q1+sHbcpUFYWUlSzNNZSbGqUR2xiv2ut+YplKo6jvKNtrg3S2ZFs6OdcMEABlYmYkd3TdP7Lc10xyohl86dkVL6QnN4KVQVKxUJyxyYoTJbTvx/2ED1KOACBjPEk3/GwQMkNDKWVAEMZgqGTSNQ80cipBuqbqulCIUivphqVc6EW6Am+7aQ9px88cO+VnYGq44jheEisYDJUECet1BkFAFQKen0op4pRpCHK6wjmkAhBCScykECqCRtmQUi5sRCfXQwXj2Ypz7WTpYCNvEJQwUcwppoYzJoUEP2SmRsquIQT0/VRXiRQypxFVwX5MVV3BCIimYAxvnih//56RdhRNNGolg3eiLMj4gYOzzdWN6ZKKBc8R2DMz0u6ujdcgp2tZkilIGgrpxaGfZCDBz/hw6KUTp0xKBJJz2Y0zrKiOoZUNrRtTBEC5sAgmCDEphgKRKkYIkAQQIBEAFxIjyIS87ZoZQvCekjovuHtwWtk1/shzC6M7p3+4mv+l62c+snMSIZRl7O7vnE44VzCiXAgEXIiapQeb1dCUCYKRikFFSEjQCI5TttSLHlvotDJlZsfc0XYmqP7A6e5/uv/0t861p2raNVOFStEouvp4NTczkd+/Y2JxrZlQoUh01zWNt0yN6ISseCnBKEoVrFED8YIG++cqnZX1qg31nNYw1ZxOIk5bAZ/v0wud5Fw32egnlZyRt1WF4LGyoSIshNQVpWCrUcL9iOkqChLhWsRQsa5gTUFcyFJOYYxZimobqpDgxVxVkaub7TBUCCoXTUAggDAumh3v9NJgsRk221EtryGsJDRtVC3KZUpFmkGc8NVuyhhgJF1LiTMRZwKBjCkvOSoG1M+ko2qUwUonBSk1A+uWJRFsdAOEwKOsGzCCccXS+37YDbJnVwcpEwVTGYRJo1o8dvT0Y+sB4uAljEnRDOP5QRzEbLGfbMRpREUipIPRzrLdj9iIrV476pYs1YszAGkqeso5BrhrbmShO5gsuftqhZ++/cD/dNcNHZmhYi4z3O+sdqq1wsZ6LxWi6OjXj+ZNlRCECH7+9iKG8WTFxQjtrxZOtHrDLVtnjH3l6np0eUbpjrHK2ZXLF8W3YGmqBLnkBUJCxMRth+eOXFjlXJzqt88Ouof3Ns51e7vz5b3F6t5i1SB6JjIuZbZNFBUA3nHjrtOLGyfnm/c9eebD//6z//x3Pr/U7L3nLQdu3j3+3371g627f+PHb7vmxPJlpEu3sL+SO9f1AcAyNE0llfzl84FGMdcNLtMMGWLfdP3Rowtbd4fKzl5Ci5bhX6LxLzcvFzfNjd13/ML2h+qlnKaQ3/v59/zGT75zSGh+886xaxql6yaqW8+p5CwASBnf4Zau1HmoFx1vez5gqK1t+YClqUnGCMY7G+UXERiGsA2t50ePHV9YbXurbc9b7/3Wl554/L4z999z9Iufe/zb9y/9/t8++3Ofeei6YvEVXfi+hy38w8XE/32x0fVv2n/RAHwof7lVKf8HAZqt6Upc1XUssSjZ1gffd53Wgd//7ANRQs03ksnQD2JDUxxL51EKAKqCgQETwk8ze9vEVBCnlyrSvF6I0gwAgpgCgJ9mwxbBK+0PMPbyhXYAMDVlFqHj/eDcSithrJWFdxSnVko9zkXRvqJF14vwiiJpVcEAMAgTc1sm4F7yYR7tbRwo1i7981eBjPG1zkAxtC0+1jAfyBgHDB0/wgipCrn6twCXvGUmeAIXLxjzXX+xN5ge0Z9eXa8Xc3v2zmyse4u9YMOPXp2+0HbcPF59aH792pESQui+Bb9skpt3Thxfae2fqDWDBACCMBYCFIQT4CVbNYixHiS7KrmZgnVssR9S/t79DV3BVIjT7SADmTC+2I4aJcNQsKUQL4aGpS/0IwQYa+RUN6w7xNScOuZexixNEYALOvGZKBraohfLYlnjQgU04jjTRfTkqh+nrNmLs0xcO1nAGEkpg5hLITwfBICpkeVBnOSKAJAx0Wz1Z8eL+9zKZx5ZnrUNkXJLV4Rjs0w0CiaX0PQkpDxO+Uo/tlQ8Wbea3WSkqI855re7bQ6ISyCABiE1NXy+FU6XZciyumVgjI6vDXKWplAWR1mc8ZypUibCONMURDREqTBUlDf0tXYSKaIwkhtzs07IJAAm8ppGnvNElZmrScbFwf2Tx4+c6tMZGkb5HIzUi/c+fFJzarpKbc3mABrBgoucpZdtxUu51LCuwtfPtFUDP7HkLbVD29QgT4KUqQqe9+KDVQUDUgjGCEkJBV0JGFcJRgCMC8DAQCoIUSExIDD0Qs5cWN04PFm/vVzlmKmHdh979tyd+ycoZ4fKxV+44/DvMP6pvz/y7ut2RYxFTCDAI7YZMFYwtG5C85oa0cxLWStIV7xkqRd1Y4oRyhtq1dFn6+5TTe/aqdKjC6t37JlQMX58vc+F3IgZIlBwtIqpDigrm2JurPb0yaV/+f2HqqYubZYJ8fRK58BkyVZRIqmeL/c8v1wornSic+u+ahhMAOdSSEEzQblMOeaCjhbUQcoBwNBImHCVKH7MNFUShPK2YiioqKsmId04M1TUGmS6ggUXCUW6AhSEN2AKwrWCZit4VSFCQpBSgrXGeH1xoVlwc48fXZsYrWeZsntc55yD4I5thKnEGCyd9AJqaDimnHFRKxhdP3UtTUrWCcBUUSthKeOuqSEsvTAru4pOSMYlIXh8vD4/33Rduz3I8pYSUaCCGIae0VjFVhqouQLTVN2LciePnLzp8O6FMLVNxTGU9X5ScTTbgK4vBAJFQRtBqhB0qh3kdWWhH+ctkjdwHevnO9GKR4USzxQrzzUDjGG6bJZ04+FlD4NMk+QHd4083oyb7X5jpLS23ts9M3JDPe/TTCVoPGfOe+FM3r7SqeODt12Tt/Svn1y6c25s+3ZH10GiXhJWLlEdvWnvxJ985dGPfuB2uLIrGQCUXPt424s4f2hptazhLz11fP+B0WtHxxSMBwPv60+d/+UfeMvwmcM/Vl7oSsalrBadT372fsDo0E073v/uN+2fHhk+89MnF997614A+MEbdn7yN779K9vVTF8IiZUjm0P8rmW0veDS4q1O1IprzLeuyB/YPzOy/MJCe8U2FvvBuGsxLtajQd20LEUFgExyHdStq8CLXH7rRYcysV0cvOaY7jZFlsfPrbxt37RrqulLXqbrxZwXPr/ydDHnbUtLNIXEGbN1dbzsrlyOp+HaxrEL68+cXf3Tux8HgFCIVs4o9L1PfvCOvaOlI2vNWtE6cnz1zx94+tK//R6uBv9Y8oEoyRpbMudeqGvqP1g+ICUcSfnBiaK4sOQ69ryXpojniXHLofHnzq4tbfQd840KxCWA58d524TNsFUlBACkhIWef8P48+FpkNA3TnDJjykABHEKIP3NEJYyTl5JPnARQ1W5K0PBqGzorpTnoqRH/f2VCgBcVE15kfXlVeBqEoPhgZRQNjVShM1MYJBQ19CGOsoZ41da5WrWvxSDIBlE6Yn55pmN/on5Zu3ANGVcSpkyDhr0woQLob+Sw/vS3VAwMYg2fGhhJfhj78wXn148uzHwwtirOes57dePnxkxjfdKefmy1VXjmkbp4cXmkysdU1UNVblrX+EYyYZkslZA+30/n7MwSCGhXNDreZ1gdKoXuJa67EUVV2/HNMyYz6FoKoca+QtaeBJkkjIvyGgm1rOkYKvnO0HeVG+YK7biVJFoQKETRxgjxoREMkiyE+1g3DHP9oNUSgLg2FrZ1fqUWxIKFmEFY74ZUCaW+zHC0O6nJddwrNS1zaGcixcxlaDpnZOVRml+YXH/XG2jF0+U8rGiODRIsEMw0R1VVYkihILAsFQC2DWJqmCaCQnQ86kQMFIyeyF1LSVMGHDo+RQAji17hOAFmeQNlXPph9QLpAQAibwoUwlyLS1KmeSyUtAiyoOEFmx1pGBIxm1bMRR5qtP1qLRt99n17oylQ5DputZiyvlWOLm+rDj2g89tnJ5v8cUmvAthrpsGQ9JY9aPRggsSEYQISD9hQSpVwr749GrB0WdrznInYkg/3Qsn8tayH1dMdagyxIRECBEEMRcYwXA8jAthEEKF6MXU0VRDwTdfM3tB0ENTYxkno3mCxwrfeiT+ypNn987WVZLtbFQkwLeeO3+qF3RCWrVxLLLjzcEgyXSMNsI0TJmQkDe1EUcnBB2aLJiaYihEStlL2amWB5JTkLvH6k9uDDQFI0C+Fzhurp7TbJUwgBlLnfeSqZHGSnP9uTV/usDOd8ID1erqwJ+hBT+RSIUs8wZRGoSplHDmzOpNN+4WSCSp6Ifc0lWRZKZOGBMKQVwIAOkaKpew2k1LOc2PszAVGRdhmKlF0vSp4DKiYOu442d5S0moiBIOJEaq5lqKoytNj1oamizmBkmsYmLl3NXltXK9FMVB0Z1UNaIQtNpKdEORHBdcqiEriLkEudZNRkoG57I7yCxdSSjLmWrJIUHMNIJVA0dp5igYAGGBQyaG01alaqm9vmGrsyFGhk4cCze7sQL8XMfb0zAEQB5DTIXrmAhApFkqsGtrNsIEgYowkkA5y5uKnwrHVryQNXIaKEgR8mwnclVi62kz4DHjtgl/P9+tWThl4juL3R3VPM3YjnrxXsAnuylg2FfNpb1C6AUGJrqCASCvqUHGqLhYbt86QW2P4K+fbvw/jx2j7guU5odRftE0OlFyaT4wHLNcbXtDO4IrwcdoTbA1EP/pW8f0jKzG+q/99VGAowCQUHZq/TKl6+0gCO2frkuA999x7W3XzQUZ25opun228e2F5pun6gDw7ut33/PM2Xddu+Oyi+wouwDQCuKqYzqW1uqHaukydcOcqWOEvCi9Ui96rOIeu7C+f2ZkeHdnJf/guY2KrT+72heGO2NwPaeBlJ0gXaYJwuh8a9Dte0xAN4i3TO6Hcfx49QUf2o3jlWPNXs0xAWCh1T84WSsaevyS87GOpQNCQZQ6lg4AJUvf2GwX7ClUjnY2EsYp47sb5XueOXvp1TpvG/WS++F3Hr7r5j0A8MBz8//rsQs/e+u+D1+/60LHs7tq0dKmKm71yp4M38NL4x9LPpBQNlK+eOI4v9HruLb2wnmhVxeZvTQiliJAQUpvsJSDuvoHtvNX/XCaMjvJhsX4asG2dDV3FVMlV4lL34UXJAXHgC29/037Rj9l5W0KA35CX4vgEgIQV/4Ah3xiP06ZkJ0ojJkJACGlVzNxuB1CCPRyEqVxxiqWXjH100m2uDgADgCQt42EMk19BSHyKwUXwtrMBGCzDeJFCQwzn1f/0V4GF9a7H/vf784wPqKif31s6b0375keLc+H4c6pIuuyXjdgXFx9uvvSRz4CmB7LffDQ3O37an/zwKlPR70fqlS++siJj//w1JGVVu6qX+UlMFdy7z2z3A5hruKULG1HrfDph57rhYmXZLfVraVqLs5E3lCRgFaSVXS16aetKI2F2Flxls62H17s3zheaKb0xFqQZWy8ZBiIHNvwvSjrB9SPMy7kwMzcnDYIs4QyglCUckCIMeE4qmTSC6kqUWdAMykwQWnGN9rJGoobrtqO+UY3kYCChHVCKqUMUxZvsFIB0YwmVLCMA0JIws69s0efObUc9vfu3YsRFHR7qTvYW3JAgpAiillfJ3HKKRMSgCPZCSgCMHUlY7Lj045PNZUklKkKtgyFJsy1VMtQVAVFKfdDxkA2ChZHQlHxRicp5Y0wyRQkO4Ok4KiY4NVOnDGR05RiTsWYxCJb66XYUGxV9cJ4JJ/7xvEL9mijv95a7tP1nj/I5T7zwJkd45U9Y8XVY+fRdO3c+eXJsXIRzJjynEb8VBKZPh1RCVJiAkIKJG7bWUul1Ag+2wy8MEu50BCqW3rB0FxNAYCYiZxGACDMGBWyqKsJF0OqZSuicwXbUpWzLX9yuvHwVx5+rFb6n2+aixHV80zH0Ol4zu5RFZOjqx1VIXOTox///CMHphq2oxkETKQ2XKPqmntrbtHUUinQJo95dZBe8GIpJJfyQi9kQiYUdQQdcY31JJ4sFhMhvPUNF9mmShQF8ooySJnnpztmao8ePQGK+M6al2YcI/XUxuoNc40klZCxR/tR3ub4+ECzjLOnFq6/YQ4EFlymTHDBCMaMi4KtqgQckyAJUSYHUaZpuB9meVuVkmOQjZIZxFwKWS9oax4NUwEAUSoAQHOKcdgrViqOSZiAiqNkXFQc60LL07haHa09/egz+w/tfPA7z9x4eD9kvN3jAqGUgalJnSh+JCIqchou2KqQkgvgIAu2stqNmUYQFxIgy4RtkSgFLuRk0Q6zzEJyI0w5hwMHxv/swadabzokJUQJL9hI15RGvdI6u6RpOKEyTNiIa3oh3zkxMlV1MRenB0kryjgXq16UszTOxbqXaipiVIkSvgzJaM5Y8mLLwAVdszXILL40SCSCTpRRrtTd/PHVLgY14dKPWc62n1namBypdDOBc865587dWLNXBgnBSEfY0pSGpZ/th7N5W8VomBZkQkh0sSJ0/dzo//Lnf5ebG7/0lIKwDJLLE8OGFIL33vZSrmSHC7n+eu9nD8z+aXDiN99+/flza//q978gpCQYC5D7948eW9rYciW7LPbNjIQxfft1OxRdXej7WznMZME+3xkMFZb3jVefW9x457U7Lnv6Hbp9HW327nBM1zLa/bBRKlzuieCa2lLHy1uX359bD0wfn29u5QMH6sW7jy3910dO2ip+arn7GbnUj2jC+NCwvOwYnSABAN0pnGkNbt7MB4bh+0TtBTvQcK3lTTnvJy+s/tw7b8rl9DhjW7zqyyJv6c1eMFxwruR+/czKhw9fzIgo40LKkGa7RisXWn15CQNk6IyWs4yLdtQjhZ2tQtk2AMAY2psSXNg0TfseXgX+seQDhKBG5WJ/4Mlzq4d3T71SKuTVI9mkqA5dCLyYzZXc6wq5mzj/yGilWMo9cmpx+ISh1WvOet2OYHRJeDcIk7zz/PqUXfxf9VNa3va6YULfIMElKcGPUwCI0hQhmTIYKm8iQM4b0ZGQoBIyrI57QTKsmuQdEwCU1yN4vRSUcUXDC+u9O67bAQDDBsjw57A/QDk31cscbK86BW2U3I++/w6sKh+77+lP3HEYhPz0fc88enz+m08dP318ww+TOK9epfHz1ezDdCk3UXAAYLzg5A1tZ6UgI1rStVrOwq/cn/hSzJZyf/adU3mzdN1oQUqYrORbg1BIebo52GgNxuolkOBFWa1keBHzEzZIs/lepCJcdYw05au9+AkEXkQzJm6frfQ5n28HJUtbpXExr+sKRoDGXGPNSwhGQZw5pvamucrpdtjsxQpClqPYthplfLRitPtpN6Q3z5QveHHD0jIELhFpTh8EVAppaiTNOBZIIhnEYGjMNbQAQZaJfE4dOzx975fuH90/0e60ZxoN1XVObDQlOAASIciZaneQIpAYEyklICAEawq2dIJchci4AAAgAElEQVQAGToJU6ZjVCgZKsbtAc3ldFsnXMIgFpaG6gWDRiylzKeMCSmFbHaictEYDCKV0zDGjo11jGtls++n8+340IRmaCSUkkapnideQDHB0sndc+TCbC33/7L3psGSned52PttZ+/Te9+++zb7gpUEQXADKdFSJNOirEiKZEWKq+KlUuXEKSeOfiROlZNKxWU5cUWJ7bKSOIpkybIYUiJlkuCKhRAWYgbADGYw+9w7d+t7ez/7Od+WHz13MBgMgAEJuLQ9P2513+7+bp++fb7zPu/yPEdna4dmpnQefOlLz64cm+1c7zzy0fvjIh0F4w8dnR9GuYlxnJMp38oLudEJTYtVPexQ6bsOofj8aBzt5aRBNVLXRumVTvgLD8yPM+4xYhDsGWTS2U8QxkgJpaXWO1FGMZ5yzSATV6IYUfIjh6b/VZLbBr3cCx9ZaMpZeXhp6nRM+qc2U63GQbHSnE8Lefrs+b/92IHl2WbNwRgYJbhs0jAXg5TfGKepEDGXWuuL/UhLpEBblFRMxhhqTJUu9cYzPl0f5ibBDZte9Uu7g5FkzDChx/nuOHUcijFammleu94pVcpTjnV9d6gkfHdnj1jGKOfWqTNndrOFhakDB+eeffoVhlCuIRG6XTEHITcIrlUoxigqtMdwNxIEY60hy4Vj0SyXAFDz2G7Aa47hAhvE0iBEKaU1FFJZFDsM5QwrwTtjVLVQb5wPQ1Hy7E6wdXS6hQCvHllcX9smCIFIU8lMw1ys05iDbTCu46qLSw4ehQIAgkRalFRtOkrlOJEGkzlXFZftChWlwjJIyFXCeZBxQsAzWRhLodTBI4vd7U57Ydq3yDjmrkm5xKaLgRS1CrFxSZG84TizM1O//cTzjzz8QMU1ejyrOCwXqmpRZGKuUN0xUskzoZarjm/SgMtZ3zzSsMe52Esjh6KybSIBVZveP1P/9qU1kxFCtZZ6pll99MCcAfJaCLMV/p1+8I31oYERxfi1TpgLBQAYwVOoXzapUJoRVLONH1ltTrasuboPABrgUm+8WveV1lLDJPK2DLq1FxbT6lYgfuvGbKO83rnTteAOVB3LoOT+mcY3KhtV13z08Oyh2fp//Yuf+cXPPviHz5770umLt1yKj1Qarw12T9Sm7lgBAcw0fIxx2TKS2/R/Vmr+Ny9vTW4/sjr3f37n9H/1ucduD3v1bXNcjOBre/0PzzZKjtkbx5+uHLgw6h2pNODNqJeczUFw4m34Sc13zq/t/u63Xv7UAysAcPHy1h9euP7jC43d3T7CorM9MkdZOE6644hibE1VqqZR8525dvXa9Z2PLL9xXOW3dNuu3nYsnVF0YLo+SNNhkr9zFb7i2bvDcHW2DgCrdX8vSveidFJkyLmiBI2ydLM/shnjSnAlbh8L9l0rzXlz379y0rA0KchP5GEYxZX3L5r6c4gPJAT8EwgJamcvXJ0xAeByZ2DMNt8aOr9fsIlh0zci3SjnNiOuyVQhZisuI2Rxv1LxdkNC7yPyQh6ab8K++Azf9/SNCn6LDwzCBN5vwaWEF2cGnYN+dWIg4thGnAku9URgOCj4i2u7Dyy8MY30DnhrnuAdkHBRMtmtbhnfNgGg7Fqw3zF177jHrwcXCgxIcz4pp76ZD9ysD9hv6f28x8XvCsMgSVYstKvzVQ8s06JEfWhlrxsfO9IYmw3S60H/XWbmJrj39+BMzORtEwBKrgkABZdw21X2XqDe5v+4Wvd3o6xsw4GaNxDRQqPcCxMAuDZKv3/uRnu6frRsdcI8SaVvwnLJeW6UboTpYtlNCqFBK4BhxAnRjkEcgz7zeg8ASg4lAEkqMoRsk6yPUwMjqWCqjJpVNwXl2sTLGCF4HMcZt1tVx6V4B/K5hvNaJ3BN2gkzQOBgpLicbdgmwld2I8AIE0CAi0KXHNUf5owSSnEQ8UFYLB+ab7bqV66uH1qYbVXY8qgcKORn0VSrGqSKYFRw7SDNAeolsx/mOVdaAwY0HOVAoe6YQZC1Go5pkt44J2WzZBqYyd1+6jhG1TZkxguuMEKUYIOROOYGZabNyqatkcqI6gwSLiQmZJCL6ZKppEIO0xJqvrk3zB6pl5/sDVYarmf5UxW2Ny57jtW9sfvQAwdIoxln6befeWl3XMxNuRjk3rBIMmFZ5OOHp66M42gYYYz6eb6WRA+WnTOh+kizen04vr4b5EJd6kWYoNn9vMNk+lMqbRF8LUiU1nOezaX63vogKMSiZx2dKoVVzzDoLC19+/Xume1oIIK0OvVTB+vHF2tbo/yl3cAU+cUdCJL08aMLqda9OM2E3AmLmMuySR1GTIo3Ar4TpELpim3c1/KXqs6re+NuzI80PIeiZ65uL/oWIwaADLh6cN7/+ukxjWIVEsaIadGgkBZFrWb93Nr2yWOOTuPnzt+wZXZ1rRPvDY8cW/joY/e1m+3Nzm57qtnrDl89tzGzOJ1zaTGmtFagOn1esnEudKtljqnOuGz4Rl6IRsnKJRdS50JVPKoBbIKFlCbDQawYxQhAaq0RVlr3hrnWRZ8gKbXUEEZF03e7UTxb9tvt2qUL64Sxc1f3jh9epEj7No2llFpmOcNONgqxxYjWiFFdcMWVJoQ0fAYAoMEguF02okwZFA0innNtYWQbbC/KEyml0vVmdeNGtznbLgqwDSqE8g3UT+SXv3fVMel02T5cI2ZtNh4El290Pv8p0uey6tJxqlqeEQshFLQd02PUt9goUQdq7kvbw1SorTDLpGq55GPzlWfWBjXGkBtluao4ZpjnCrRJSM2j18red1567djRQxijfly0qu4SFvPzrVzKK714Y5z1klwo7RrEoPZDMxWk4fIwlrdJCX3qxPKplL+2M1ip+Xq/WUhqfaTa3BhGQZ7UbQ8A0L4XngZYmq596emz/8XPfvIt+9CbMPFvQQDLtZJnMstkn3hgGQB+6mPHQyl2hu/ugPuJ+1deubw16WzJuZjolxyo+5391vyZqgcA24NwpvZGy9PRSuPCqHeo0kAA901VLUYwQivT9fFtc7e3wyTs5PzULdvNt6Jd9X7nm6d/55un62UXAFKtz9mMn7txYqE5s9J4aKn94Nx0u1ZqVUuF4kFY7PSD3UG4PQgG+Zv0uMuetbE3ulVngJv7dgr7ChZ1z9ZI74YJw3ginPpW6jJZZ3dfvOhqP9iNsi+f2zjaKrdLdo6LThbvjPLrO71RmhmETYSPbqcEtsmalZsjJf5EtON2PkBw9S/qAz8E3s8Q8E8yqp69N4xWZxqDMLk10fIBUQINb4p74kKYlHgmAwCC8SBOG54DoACgfleTkR8OdxxUzuV0rQSTsHWfFSRc3CoUAEB/okjzw/GBOz5Ghxknqq3XhnvDMK2V7AdPzl/XfC9Jzw96/g79w7X+smOt5/mDd1/sB4dQqmS+MRziOxa8wQfuKWX+XlFICQBZISbl1H0+UMC+0GouBMD71jCkNdzYHbq2sVAtXeqN/8FXT9uMHqh5//Dzx++baS661d95+tXf+d6Zd1vmvX3zPYMBQMUxAWCiQ5VzAQD4PXZ8TTzI8JtZxHaYHW/PXevtFPIAACBAjZKzOQg1wHZncPLk6laQlwzScMwDVaef8hnPNkzsM3o9TD2XgkYZ54drpYt74RfPbFVcAykdZ3LKN3vjwjQJ57pqMErwrG++uCU2BlnVNkwDlX0jinPbscchT/NwueUajHTHKSDcHecWQ4VUhUUrNkpzEQFIrequRTDiQnEhEUK2BYRg32XdYYG1Onxs5fxrV1IGvdGgVJo6NtN8/tpmuVwCQFXPGIYFlypVquqawyDXSlPAvkUGEUcMIQCBteuZ/SAvuyxOsWVhw0BE0ZJnDga5LhBQUXMMwyJKa4Qx4goTlOcy13IcF1JDuWzqQgqtdwZpN8imK1aRCY2h6RqF1FPMPLvVOTg3nUQBggpGsHL04OUz5z/erCmElKRKKdcEqZBhapPijqPqFnvhxsA1acW3gnHyyFw5SNTilLftFh+eqW2NAiWVZ9HvXOp88tDUOOd1YmgAjCCXaidOBUCJklFSnNoYjFN+qRuOE/EaQd+4sLsxjp3l+nPfePbf/ZO/tTJVefrija/vXZwtW3XTiB2JANq1CgCUPefXvnPm6NIMAjhcN6dcdqlfvLQZIgQzvrVadx+dr6Rc9bKcUNiKsgNVNxdh1WYUg4jzrXFmUHJ+Z3hyri4AT7Vrw5D7PpMIlUwslSrZ7LEjC1944tn1WOlrN5LuWHqWfWjm5x//zJHVtkAZ58AYC4K41qzf2Og259oUozARlKCUK0aQaxkiLqQGIaBkGVLLWpkVQkcZaK0pRQzDIMpNTMJCBDEUUhsUMYqU0KMgKwqj7vJRajCKaxUzF0oDtKQ7zrKlWrk90zj1wrmFwwtFkRKkq74ptSaglQbPpP0wFcLIucwL1aqYQgqCSV7odtncGhUaQ1LwXEDJorlUCGlCQCDcS/KyxTyTBImoNmqvnrpw/0dOZFLyJJ+rWQSjAwb7ph6fqLQtJM+c77x+/vtZIaRUa73w8EytE+cI1DATJkMGhc0wG+USKeVYhGulCcxUzTATB2oOARin/PHlxnObgynP3czFblQUQvtEmaZ1olXqL0z93te+9zc/8+Afd+LDNXdnvvXrT51/6ERGKKUIGQR9cqlxsOaaFBdaTTnWpUH0iYUaQm+kIX78vgN/9K/+3ZPL0z99chkUwL5yKFe6YTuDJJvwAQU3xUAxwKH55jBMhdawzxPumtRo+c7re6Nb3GOuVbmlHTRT8588v3bH8xEAfvOAcsWzLm/0PvkAdww6zorW/uW17dlX+8GBup9L/qmjiy9e3fp87cgdq2EADbBS99dHkWOymaZ/eaN3OxG6HSvtytWdtx0pnmtVDEr+m7/26dt77v/R4w986ODsF165tDLtf2zhps5KLnHN85anawDwpRdff+r1tdvXqXjWZnd8Ox8AgCnPvtoPeoOgXfEAwKIUoZsRyNth8vlPbj+/PfjGMHrpKy9N7mJQqdCr/lqRpWVd3PXSYpusVd2vD1gG7FcJ7Jv1AeI679ul9s8hfqgQ8E8RkkJMnAUvv7lW+M7f3fcFKRcGIa5lAoBrGTdGYcNzUihgv1/ofcctSpDJ4vTFzb/zMx+H/bB1Ikk50R7uJ5ljeLDP7++94/zecaLaupz1HYO9uKt3VNdqO5c1m43VrxyYf/HCxrGZ2rst8J4hlC6Z7NamHCSZv18G+aD4gJCwHx/DPhO4WQZJ8zDJs7f4xbynWPwO5KqwqCGE8i3jI/PNv3xk+XPHF8Ks+OKrlyKdA5NN3zbfbVLivb4Bz2QAYkKrTINOOt3f7UV3opAaIT0x7rmdEtwYJUqqk+36a7vD+YalAWol58JOXwMggut1fycqemHxk0faBUDDNp7fHg6H+bRnXekEDcfYjYp6iUVCUkwQUb5Fd8dZvWwtetZczTl1bWAztjlMqzbdGMQIo3FUaK4QQyYjpmUYDItcA4KokK6BU854JgkBDIgxrKVyy1aeKlUImxGhNBeq4hqUGnEq6hXBiL3TTwlB7YqrYfb5Z145eHJ1bbOzNNvyXdsgNJEizKTNdKtidgNIMt4fp8wgUzU7yrhhEprKRsXc7idJwhklUoGQgBEKYmkyMs6EwZBh4VwVqkAPLZYiwTd3E8c2QiHrjhnlPI6ExlC2jcE4wwh5JpFKZanuqGyuxoaJ7Ma65Rv9OJ+r+jcGoaf4kAit4PFHVy+9ci7nol5zklzOT7d2ekPLdTSXR2bLM4V9YWOvbFhpoXqpMhg70vBPbY8ZwrnUL24MuqF6/GD7yYu7KYVBmJ8uxCcXGv2k2B6nO0H2wvoAkFYSZqvOcs1puObRKb/sMKX0XpSfX9v6l53+w351c3e40CqvtmsSoOY7Z3vhjTBNuBxl/OMnjxqUfOv0BeKWTIz7SUIRWfDdB4/7ZZtRTGyKT3dGr+8E98+XCcKFkKNMgEZCKMbIKAxnZupJoaol+8xu0AuKLJOuY7gGUVo3bTstooZpXOsns4vLe2cvPf4jH/mlx498+7Ubz+0O6u3GKNUlB5JMKmQIqVaXm6+cev2hR0+6Fh0EhW1Sz0IaQAllMTzKZMnCAlSYSiVIUORlmyCEEcZxofxJvyBlu8OMEYRABwFXWns2DaTOhar61HOtMBOUoKpLs8K52h0ULVUIXOR8ZWX2j0+fde0TUSKpAsciw0hyqSwGQKlJ0ThRe+OCIAiyoukb3Zi3fboxKIJUYQwaVBBxgnEuFDMgzESUiXqJSdBL034cJd1r6wsPHTi/3nvl+93NrW6l6pRT8d1X108cWfjw/XM/87mPnTpz44kXX7m63W02vIpNVmtOrlRnnPFcC6m7cc6FrGvje5sD32RaQNVkG6PUoBgrVXNMjTEAVGyWFPLoVO1MJ/iRQyWtdD/VAqGvXNy1bAuEbjRr6XD8Nx5ZqljG6Z1RN+HbQZZy2XINz6IY8ivDxDdo7ba+lY8fXcgLcakfwJs7bTACw0BxLia7zO17HQJACC6u7R5dbmOA4s3N7rcuHA6je8OgZLIbw+hYu/ro8cWXL2wttaoAsNKqdMfxhBu8Q4F0ebr21ecu/PWffKTh2mFetPbtPk+2a9cGwWRc+L7F9itrnbdbYaHiPX9j7/zu8MNH5n/jyy/83Z+7s6Yx8d9dna587eUrb7elz7cqSc6PL7cnPfcHD84c7A6dirsXJQYjbyfxN1X2Rsmb6gOH5pudwZ1VkfvatW6Uvr7de3h5BgAsSrl8p+EBAKCEbPeC75y6bJvsy0+8VOoOk1fXtFSTNCrGcAkQJVgcvrMFawLHZLf6hSZSfpV9ORaTYC5kxSvBv5e47s8k/izzgTODvftqLQAQUm12R799efPrAKt7IyHf9FWZnEXvMA77QyLhwqTYNRkARGleSGUymqqbMlvGD5eVf1fs9IODc7f1CwkJBAZpBgD9JJv0hU/6hT4IPgAASc49y7hx6uLf/7s//c29wS/NNh9fmb60O2x49g+vXv9WKKV9yxD7u1KQ5r5jvV2x9R1w7xHzZAfMCzEpp8aFSPNCBwkAUKHdVGXJm5Se9Q/t+rE7DutVO5fFlG/9pSPtXBY7QThpkSII++9md33vh3YLJYNFIMr2TWblO1aacXiP3xeDIA2g9c0qgUEwAGiA83thyUAPz9QvdkdLrWkNsNKuvzaGVt2aX2jtxAUACKUxwhWGX94LXEJ2eP5qZzTOxDDhjkWlBK3BZMh0jEIK08BhnL80zksGKpms4rIHZssv3hhWPGMQc9PEMVdMopmSvRtmvsWQbwqpskI2HKNkKOwZw3EmATAgz2GOieu29fzVfrVsKkBFIcOU+7bBKLJNnOaqWTEZJoMwA60PHVkSUl66sv34IycNxNqe342C2UrSqtQLgRhGZdcIE1522SDMqqXJ56kHYVF32ThTJQdNu87OMHUtkuYSAzIAF1z6LotS0apYnaSoGMQpGYNxzggajLNKyRBa9cd5P8yEgpJNglR4Ns0K6ZVYIpBrQC8VcSokqOlKaaM3qlVsz0JSUdNkJ04sxb2RRhQhVKtUd/YGJw4tGOBe7Q0908k5eXCpnGbqzEbAw9g3aZCJi71oN8w7g/TojBmlRaG0FPpr5zsljz13tdf2rOmy3SpZ/9nHV5++McAEfXapbhl0EjkhDZSgmmO4eNo2DeyYz93op7Y7LPLcIE9e31tq+GVGKUI5F0kmUyFPX1z7X375x2IJ14ZhnMtro7iXFMenSoyiTpg/eXkvEfLRpXohVDfmVwZJ2zXO7gU7Qdqen9OAl+peLxIMSBAUWGT1lpcJVbXpMM4tg1zuxbaBH1ppfHVjnbn2uX5en2mtgoqzZLFe6YyIXyoomMPxuFQpE4xFmgTStgxSskiQ8lbZ4kLaFglTUXdZzpUUKtGIYeSZRANKc0EAFVJQgrDCCEEUFYSgStkcjvOCq1bViMK06pm50L7NLAMD0q2ypUB2+vHxpeqJkyvXr25IoeIkXW6XbQOIhsIiu6OcUaYBEAZCoOnRXlQwggdBLiSENs4KZTJcdmhnWBCMQOlenJc5bXrWWi82GUIEEQPPzTX+7b998smnzhw9vlSu+R9dmdWE3Oh3f+zHP+46bMFjmBW/8OmjM3XjhYtbvaCYrdoYw7RtIgVbSYEUdw2UI6yEJgyFOU+RlEpPOdYwKQ5NWVeHiYkg4vnkXTBmxgV/cWP0Ch4rBDOthmGax6pmjtwSEv/m++dqtlEo/fGFxnqQAEDVYJ04f2VnHAmZC/Wy0t2kKBlk1rcRgG+b9ZKzE8TdKK051u3bmmXQ7eAumpWXN7tl1z51cfP4clvv1xNuPXrLxcwxmQZYrpU2x/GxdnV1pn5l82YT5lKr2g2TW9KiGOFU5AYx7ih7HpxrDoLYsw0rpre7Us767sY4mvyZH7v/wD/8wpO/+lMfh7thseKd3u4/0PIfbNUV6M3uKCRpfpuB5qSRhmG6/fb9S75rAcAkBgCAGd+Z/JzIUd/RQ3srkzhVce+4aBqMxumdlgVzZfefPHN2icDBfbPXuODvHIhbBr20sfdbT7z0i5996D/57EM3njnzK5+878hMY6FVKVz9r7959rGF6Svb/S+dvXzXlzuW0R1FE0ow6RQq70t7G/fARv4C74wfMjL504Hz494giL//1VNf/6d/+H/9wfMZF5feMsn6XiOke0dU8FvWv2FWFEKZ+ydhbxy/j+JCt+MWP472z+HJqcKVAoDBpD4Q30wAfBD1AQPfXC3JuWMypdTPPHqk7TmPr0wDwCQWvJeRbrk/8AD6jT4s9PZZGaFVcJuk8WSi9wfgA/eOScklKvjVzgAAHpqun13b/Z9+69uP/e3/7X/8zW/hmpWo/UO4B9xLVsOizDUskxj3TTVObw4tYtQcm1E067ot231ngYUfgAwgAM+kAFDeF6TyHCPJ77w23AsIQggBxcgguJBKKH2lH1/sRo/M2D96cObZtT0AMAj+/CPHd4ejA1XnwELTZNi3KEbwu69s/D8vrb+6NbrYCSjRe0GulGYEJ5nQAg6UnRKjLddMMlV2acUzV9ruo6utHzs+dbDp7YTpw/OVfpAOw1RpjQDqvtEZpVxqKdEwzIOIA0aeQ/2SoaQSQpkGrZZM16S5wlujyLOZbTKMQGrtWjTMBWNYCMUIIhiEUs2K1fBos90Y7g5cx375wiaXxXy1tBmE45iD1Gkhg5QHMQeAccxBQT/IlARCcMmmcaGlUrWSZRtkumbnhZJKayX9EiMU98OiUjIRQBIXG92YAHJM6ntGq2yBAoyJwYhjEqaiLFdS6TATJZuZFAulMQAo3SibrbK10qxsB5HlV9I0cyySCWWXK69f2a6XzVbNfuz+havrO1hrpZVtkN1RWi5ZRGOONMGAETrbGe2Mk2ev9ZRWUSGuB+qVzZFA8OB0xfWM4zPln31g/q/eP/fhhZrC0Mv4p5cbP77aQggMjEyMMyE7cX6uG37rWu+FvfgnP/3Ixx85eu3K5vGWe6Lm15UZo/z59eHr3VAhBRpVXAMBuv/gwj97+vyrnSDnerVhtDxjK0y/eWXv98/tfP3iblzINJMXuvH3t8adII9zMcz4KBOHG14QBEmmEi4P1Z0sF8fnSqbFhNJLFaufCE1QXuhWyTANMj/TKnl2e6omkK55bL5WXh+EG4PUswnDWCBScJEVMLfY3t7qexY1GTYYMhnNhQwzEadCKbANbFDiWLTkUMfGhda74ywslFQqTOQ4FIAAAJU8Q2sIw6JcMmsVG2GEmdkL80zqNJdxrqJEVh18eKp6cNGrlszV1anx3qDiWaPRaHtc7Ax5lMlRqgAgzoCrhCGCNFIAlkEwBoyxbaB2xZqMcGRcmwYhBEulW77R8IxRXJiMpIVWCkCjhaW5ar388KPHTz5y8r6TK2a5Mj1VcWzb81jJJP2cS6VtgpXjXtvpuRZdKlseo9dGcS8rqg7OudICCQmJEE3LWK24AGip7Ayzop/m1wfJlWE8zvl6VymUAUK+ZW0MB1M+sww849J2o3Ll8tUCM9Cq5FpKw2YvpBiHXNRto5sVJYsdrHsmIz+60vzMSv0zy42axWIuv7fe/9rlvd86s7U82wKAr1y4cX4YBgWPubgWJi90R8/sBC8mo4C/aZs6d72z3hlWPOu5c+tv2ZwAbjMqrtpmzbUXKm43zqTWHz46/92Xr9x6WtN31vaGk+cfqzavhqNbowu3GEXNd5TWwzAtmUbvNtH941OV7292b97R8LmHDz/x6hsr3w7fMhxGL3eDb72+PoTs6evrw77+3sb2IOIGYaNEnN8ZPnV555kLm7vBO0mg1m/T35zx3clPe7/h/q4vmSp7k+G3Wyi71tW3WLkdn6qOsqI7jCbt+wnnoFFSvKmwcAd81zINOrE2M13rYKty6PD84w+urszWAeDnP35yabF5eLXt7Kvz3QGT0b1hdPtvbjkYGJRwoUZv7872F3hXfLDJ6T8JODPYO+hVZxvlv/cfPv75T5z8vSdf/Y//32cO/UDRzA+GQqpp3+FCAkCYFoWQFqUTr6f+OPmA+ADcDPsQAFze7H7k2GIhVTdImmXXZ2RrHJ/Z6e9tdLerHgAUKc+5fH/baYr9IDjOC9c0QMM3Tl95fHV68svJNnQveqNSyrx445+lAZTW70AjlIIw52/0C6U5AIzvZnb4vqAfpdrA4yRf7wz/8fOv/+ZWb/2pMyQv/s4vfPrnP3n/v3nqlX/+3dNRmgPArezROxzzPQbrYZKXXQsBUIJvjKLHFqcoxlqhrNAA8A584B7XfytKptEpoOLcLNX7jpVk3HCYUvq9jhA8da33obmqaxCDYKX1M2s9AurI9JRnso8tT13YHR+pNDRSBqXdfmSVba5gc5hVysykuOmYK00PSf3KXlAzMCDR9E2VS4LRUtVZHyYUI9ukdc/sR7xisJiLnViYGJol69xO0NkkjK8AACAASURBVCzbAiHfYoVQFEjJhl5UZEL5jrE7ysxCrvXimbJddighzjDMC4opRXvDzADZqjipkGEskpxbjCBQ41A1K47QcRBhg7JCSEXZA/ctvvDMqfs/dGg46gGab9ac5UalF2feKM+4EoVyHFotmTuDlCvFKB6EOQCKM+E5FGUQpIW2qNSoXDL6oyzKFE8y12IGQ7kUo0i2qxbRsDVMCcatipGkMlPaRBghiFOJiNeomLtKzJjWcJz1xrljEbNkuBY2Ke6Oc2qSpXplfS+cdWFvlDuuYfqVy0+e+vBH7y8ULDTN1YXp165uH1+cCniBFQOQN8IsSSQGVGvUnr0+LDvGjWEybdl/9UMzF/vDB6cb37rUlQgowyebfi/jW1FmUeIwMlOyTIJ6aRHmIiriXCiL4rLFHEYemvZ7UX6mbB+sl//7L33vI5946MYoCZ0yCnjbthIhx6nwPNp29X/0kWNPv3691+vhg9OmSSKp1odppiDlskg5oTQRiiLoRlmrZF4ZJEt1y6fs+1vjUZFbll2z6SBJd3rpyYUqBtgaxEqrTpI3PRal3HcZQnociGbJtgxjMApWW+04kyst/zuX1o/PTCmt41xYlFkMx7mo18uD/igthGtRpQEASaUtRqQGz6YIQZDwOJdI67LHNvspRsi3cX+YcyF915BSmhjyQlTLBsK4ZOJRIrhECDPgCcfUMUjVoXtBsdXPp8rutd6oZBqHDy9+5Q+fO7EwdWVjb2Z6epTKioWLnNc9JhQkkm/00oRLz2Qlh4IG28B742J9L5FKLzYt36DX+lmaK4R0kCliS0RQw2GgUZzLQqjqVN002cFDc4ZJFCaOBRqBYxrb3WC+5VOEU1780cVu2bQBgRLZmR3dKLMgKUzDcAixKVZEI64ZIf2USwCt9cV+nKRCau0bKMkkAGIUWRR7DglyhhFJuTg+Vb7Ui+ama1+9cIVgOFhz/+hM5+FjCy9f3GjXj3Ept+O8YtDr45gCPlj32q65ESnXoBYji8jBbUiETHNppcf/3m9+/T8fxw8/ePCBuo8YalvG1Sj9m7PN01Gw1x9/88LOjb3Rc6+tbXbHKzP1Bw/OHF5s/etvnH7r1rQWJiZG064NACajNiMnp2r/6zNn/9pDB2YbZQDY6o0nXTdN373eHS3tJ8UnWRyCENqfaZ78+sBs4/pO//hy+3aJoaZnA0A3SluenUt+dLZx9sbe27kQmAR/4bWdJE63EvN/f3r9xFwQqZTyy+c7b5Q+xmnej3SQFuW3MTKq+84kBpjcrVrmVhC33nGmbqKHHmXFLZfSVtV7a1qt5dkIoSDNJ04FKZdcqVxI29DLpfJdR4o928AID4IEAGr7LgS3HrUoGcRZ03fGSRakefktYkGWQbujm8PTEyYwSotJicAkmEs1uhuL+AvcI/6M84FJyxAX0rUMy2QAMNX0Hfnu4gDvI6TSrkEnZsBRViitb7V398bR+yg2+lYg0K2q++xr1x85unhtffeZ3eFzADVDDApKNgf/w5lv/frEwDzn5+EDkP4EgP09xa56Y5Md3N+wJpWBd3YSmOCN+sBt0FpP9JLf+hAAhDm397e5OCvgvdcH7r2l5wzO166tpVJe6/TZ3uizjx39b//WZ3/73FVomReC3tKhunpBd2R8LRzmUkql7uWQ3xW+Y05a+X3TeKnbBQCLUan05FO9q+Da5AL13iL3fWAEUVEAwCi5SatKjhmmeR0cqTV+j6suVpwnLu3+6IGWb9G1YXKxGx4qw7FWWYP+6EL7d1+9ulAqf/HsXizh8jAfxNp1JMGoKNRH52v9NE8K0U+LXKg0F0ppJfXhqdI4K/aSnGJY78WPH2hup3nFhWFamAJXbSMRcpwXiZCS65mq3R1mjkEGSe7bjBFMMSYEHINIBUUh94Zps+Eoruq+XQjRG2aWQ7WQQVoUQvsuybngQtVdI0x5mHLHxmEkDaZti9ZKJpfqvvtWMSFr13alAgR6oVa51OlrHnqmJyQtu0aSyXbZ6keF79IkkzlXgDBCYFtkZ5CFFkEaca3DuKAUIYSiVFQ8QwEUnPeCYr7muBQjglxGsEaDbkI8naay5BpVlwqNVglzLVZiZKMbxQlfK9SMT67vZPWKjTBq++56f1QhFhhKFNIy2fzK3MXLm9Pz09c6cbVaXtvcMyx/fqqUqdCxzcNVN/P1s5e74yQdRVIiQKCnXNNipOGYJZN+5kjzi2c7roG/s9ab8q0jNU9IHRXyld0xw6huGxZFs77HEOJKRYXYjfLnN+LtILMqte8PM2IZT798eXWhzQBAy/mKmQpdtiRHIgKaS2EZ+OLu7vro8P2zPkGACaFKykIRRmd9C6ROtbIYvtSPKiZDCl0exA4DLcEyDIMiiNGBtlcy6I1x4pacikdXSs76KJWguVRRLg2Kx4Wcm25u7w7y1SmuEdL6QLPSCYKpkl/2aJYj4lZIOJyabb5y6sJDj92XcVkpsSgrtMZpIaYqZpbrUcwxxibVqZA8UErpaomBRtQgzCBxyjNAtkMVRoxgRsk4kxTjikO1ZsNh5loIU9IZ5UUupht2IsgrN3YfXZkWUh87saw02tzpaa2U1Hshb7kEKB6MCttF1CZSKS4kI8QyiEmgZNNxzDGBIJVBwkFB2SHjRABozrXJUD8sTEYB6UKoVrPsuJZWGjSAkqB0nuu8KAqIK5k77dNcQqts7ozypdmpa5v9uZl2kktMWcMxUikdi+wGuYExAogLEeeSYFQySMtiIy4jCYeblpDQSznCeSFRyWUz1VKYZ2HmFlJrxKSQdSZeG6ag0YHF1vkb3R/7iOymRcMyxoUY5UXBYbFiYwSrZXc9SBZ9R2qtNFiECKaPLrRDWjpWdj9HyIeqpee2w+vnb+Ag/MffObsRD/9A0/sPLR+Yqf/qL/3IQ4du2hhv98ZffOqs3re2jLhIhEyFXPDs23t+HEYRQJjzyaDw4w8e+P7rG5//RBkA7luc2uoHb9Ry0ZvqureyUcdX2tc7w/sPzmqAjItbCn4fnmvecvK6pToKd8Nji1Mfmm3mWfZr/+yrn3pg4fMPLStbP3t6g3SH5y5vXtroAYAGWD45s9Ebld9GcvT4cvva9uANPuCY20Ey67sU40ma8nbcyhmVHWt3HHnWzRm/RtkNk7sk/o82y+d3e5OLTlrwfpSOi3wgUvE208+uZeRcVEs2ANQd89bPCUxKCqXmKj5BuBem8/U7beNsk3VHN+sDE+mOYD+3W7KNUZ4N8/d2rf8L3I4/43xggjTnBiMVzwaApWZF6X9/TWYa4MLe6CeOzE8aV5K8AEZzfvMk/OD6hSYwiHFxvXthvfv73zmTcdELE8MyWtNOr5sXVe9//uUf/dR9ywDwxKnLv/7tl95tsR8QQZr7timEGGf5rb4pgxAAIPeQWr4rH3hnhDmv7HurTRR+Jhn6DwL3a/OxlYW2aT01/71/8Cs/+pcfO/blc2tV4rbN8olqS5TVAb+mIz3reJtJ8s5k4B6T9yY26hUHYQQAdceMCg776goTvLU+cI8rvwOiXADAOM4BwDLYynR9GGdOzpVW90ydbmK17n7ryu6/eP7aTxxpP3GlW7FYwvMzO8Onr/fWRmk3Jr/25BUXCYLoE1//44W5unP4gNTSc8zjrdIws564sOs4LEy4zQgi4BIy5Vllm10L4mEutQat9EYvqfpG2WN7QV6xmUfIpVHIlWqWrCQtaiVmGsbWME1SYVs4TrlhkKrHBgGvuuZWPxYaKjXDxnh3pGybpGnhOWyxanRCSQkMAi6lFkjPVO1hVoAGywLfNW1G40wyrFvTjdOnLviefWNrd7rdMrSxNQ6XHZMq5VkkKxTB0I+KistyoTyH4Ux6Dg1jnnOlNCSZNpjWGsq+UQiNQDOKbYtwoetlE2mEKZRdqx9lg1TYBCGiUyExgoZHoyQr+27LM8aZxACHZkrdIO9HGSEkVWJnlE75ZstzT63vHGtP50lMMOMFn5puDHvDpdXZVtkiBE6dvXz/0YMVk9glfydUWiOTYoyxXzILzQnWhkFmy/b31vqHpkovbnbnyn7OZcmmBVcmwUHBl3zHN6kGAKQx4EFaXO3Ha8P46iCOcqEBOSb2GP1Q2//vnj83aJc31rbvOzpfBNxFzlYejEMy5PzxudrecJxb9AmpZMSzcLjWJ4tV81jNPbsdPLxQ3R6nO8N0xEXFZmujNCskxnhtmH5otnxtEO+Gec01NgZJzTUKDZ04C3JZK9E4VdjHQoJtkKRQNoWoUBjQ/HR9tzdgFAxKxhkv23Y/Sg62K4Mxtqw8ybVWul5zAVAcxiXfDRJhG8QzSZxLE6PdtCCeMVdG/YzkBR+F3HFYlEmGIIpyhFGtZBZSlx2DFKJdNta6GUUwsW5iBEulowJKBDiXMw0749JhTGoI4gJh2p5tPf/8a/0i6QyisudKUKZl9CJessFx1I0dgTFWWueFqjkMg5JKGQxZjKSFqvqMZWqQCEqQbxMD4xKheaEMClJjrTVCenFpemOrd3B1OlO0ZJJIqIPz06+vbSKAflr4lgFmWvOMsuf0R+HKYrsXirm6MY55L+OWgS2Kg1RqhKc8tlT1ciX3xnknyad940DVuzaKuQTOZbNC12Lesg2bsW6QFk1VsqmHyfGVuW+f315YmKKMzFX83/jSsw9+7NjBSkkjGHOhpO6n+SMzZak10nq2ZF8fxwu+M6ktV0z2kaUWANgKvvCNU7+fCwD41EMHHzqxdGypRWv0a69uOE7Nopg7zvVh0nINAKiUHNc2X7qyfWRpKhVSae0x2rLNOwSR6549kRgKssIz2cJU5dp2f/JQs+TuBdEbm6oGNFEMfDPqvru5O8oL4TA6SvPmfpZqvuyuj26OEEzXSlrD9jCcqb7JaHny6EK1tDEKN64P+v3gK9995ezFG6iE/oP7jvyVRw796s994vhy+9z1zrPn1//5U6ffwYLAs81JPn6CQw1/L0oBwKLkrQ33tw6q7Fq7o3h16iYfaFW9cZSu7QyWpt+kAvKzJ5Z+6cxV6pgAMNR6k+ACxCG/iQAujO4ie+1YRl6IaskBgIni+e0+SCalXEjPNghGd830L7art7J7QVag2/qF2mU36Rd7UYTeTM/+AveOP8t8ACF9sjoFAFxKivHEpveNGt9t+OEDprcDAjApmS2759c6AJDk3GY0Ezerh3FarHwAGju3gAAcy/jrP/HI/Qemp+v+q92eZ5GU80GKvn5x021XJ9VPYlHrBzUje9ePLuPCYRSkGmfFrdGfyRgTfpsE/+14r3wAYwjzIhc3WdakXyiIPyg+0PQcwnW5atZL9mTP9UymNbiMAgDF+OTc3XUS7sC7foy3gBDMtcpRmpuM1h1rkiMBAIPgyRR15c3GMfe+8jsgKjgYMIxTrfXGIFhsV//R7z35y9MfU2+TBHpn/Px98//H89d+48U1jUAprUCfff4aB4QQ7Ib9zxyYTXP8tWdf+pXPPfrHa30kBcYYpHqtG17vRYZNu1FGEVQ9Q0iZKTnOeSfNgpCXXaJd+vz2EEvIciGkMChJcjmIijAXSoFSKsykTqRChZKgHJxzxShOc25almPiIMltg5gGphqFOUcIgqSouAalNyMnjIhtENskw3E+JkXFM8KYmGYhhCQWGwYpJnh5afpbT7xw9IHVtc291dlmZtG5ig+AuNK2w0ZB3vLtKBNC6rLNRimvlgyLkSgpFGildSG0VKhRtrKCF1xqhcolGsQ8L2TZMwqhONeeTX3X5UonhaKYItD1ssUYdVybYrw9FFGWLdcdDngYcYRQVnCGMGjdDwsuFNdaaG4SnWXK80zbmX7pey//1E88PIiE59oEQ5SkewFdnGJCJBsB2tnLbJN0h5lKwtrSdBDk10aJb7OX1gamhTppQAFajrkRJFJohJDL6FaQbQfpxX68Mc4IAoZRxWYWIzXHaHpWqjhDJBTq8WNzC+v2lZcvaoqGUuxe2PzcZw5HkapQsh3FyFKFyj9pWH9wcP7Ua1f+xd849u0boyAKf/xIe5zzVMor3ajlG6ZJglgAQmHKk0Je6IYWIVKozW5c9kgB2kEy4tpgsDcqpBDPczVfsXpJbjES5UpKcG20OF07/drlKJO2AQYh0757sdNDAFKDBmkbDCGbabm03O7u9CsVT2ntGiQuZMOnw0zZJk0T3kllgQnC4Dk044oXMuSKGcyxqGGgCiOgUcF1PxJKQ8VjlEKcqFRp0BojNAwzx6QYQco1At0qua9tjg+1q/PL01/50lNzx2ajKDi67CJAuUxdF5sIhWNzqiFdZF/v5eNEVkoKNJgUE4yGEScYjSPlmcikuGRhpHTA5XSJlEusM8wck9ZKdBSJRsMfjUJmLjKMcymV1LaBpNZpzqWkghcIq6JQB+ZqX/ru6cMHVwmCfiAKqZEG02RCwmLTHscyl2gjyA5UnR2SzfmWEHBpENZt48ogS4Xuj6lBI0zsad95ab1TCFiuOJ0wPTDTuLbTP7E6T6v+Mxu7Vzd7690UC9T0jCAXO1FxuOn2s6LlWDCp3CKUCOnclE9ACNAxH15e7/zLn/rYZ+9bnm3e9NCVWr/a7SxWnAfnG8s1b2OcduP81c6YK51w8ZGTS69d77SnalWbGQQzhN+qg1y2Tdx/Q2Lo6NLU//fkTR3nlanq1165beAVAQBggDs0144utv7g6bP/6ec+0vDsuODt/fWPTVW/eG7tlx8+NHnpZ04sv3Bl86c/fBQANMDhSuPCqHe40kAAJYMO08Iv2e166e//4uN/6cOHI0Mc8uu3ujSPL7ePL7e3kmR39Kau+ttRLzunLm3euusZLMx5mBeeaTQM91ZXz0Ts39gX+6845u74jTWbFS9I8rXO8A4+kASp1vr/3tp7MoiEkJ+slDCnheImvrvup22yQtysDzgGNd48wGBQPBlxrJfs0d2q+pZBk33n6TDnWkOwfzeSeitKwjhRGgrJAUGhpfn+KX3/ecAPGAX+qYDWKBG5Q81CSIrxxKR2bW84W7uzCPWBgks57bsvZAXGKMwK27MnzotSqVGU+R+wfYZtsmrJfvzBA5d2hwiIY5sL09VrndQxDW+fA7yrIs0PAymVrTGSepzxsnXz5JzUB+6l9VyIO/ZYoIRMgtCC38WRniIcFSIXEgCCJDPk5CU4Le5uX39XvPvb2gcl2GIEAMI0b9dKAFC1zUzI6n7Zp+45YZpT9H6eaIySKC3qvns7HzApmfCB0W2za+8LGQCAuBAfajV/8+IruRDzNf+//Kd/oBDo2+Q43hW3LreFUo5J/sqx6S+c3dqOcgupfkX5ptkeYQTAvdpaP+cSHn7gxJ7G9Xo5UUgpSSl+dXs8VbGGwyTJZMu3AKA/yislazPKTIRSLncDPl2zGpaxl+QY9M6QM4xyh22PMtDAkE5z7hiYUpJxOVsxd8ZFw7PCQsxWrYSrkssKqQD0KCw6o1QjZBKcc6lc5NsUIwANCEHVN3b7aS7kfMPFGGWFqJZNA7FhlHMFDOtuyI8cX5mdn7107fqNQa4UHJ+tXu7v0lRAr1pyjExIhrHFiEbIYLg/zltls+JZNQJJIqJMVEtGlHCKQQM4DokSjglCAGHKy545TAuP4kIpQnBaKC6ESallYAW6P+a+q1Ouskx2w3wvzDFGYaI822k6HJusECovVNsrre1Fcx7GBjR948ZufOTo4pUrO0a5UirZy7NTmqdB7HSGMhXaR+iR1dorO0FekJWj86qQYw1N1xwXQlPSGWT3zTnbUsWSM4RujJKL/fC564NUyGnPMhnybYoAHa57FsOeQQoJK1Wr7hhXe8mXz20PUkyadiHlCkW8Yo+gvpvkrq0BdIqEpTy3SB9dnLveD8+t795IM6yk7eKA87O7YSdMPYfxXJ6YKl9F0axjv7wdMIL3opwBsizarpq9hEuFDUojXvRCXvfYzkgzjHajnCtIMilBGRgriWzb1gCiyG3PC1LJFeFCj6LCYlRIqFm0MOz+MGg2y5290XQ6V3FpPypci4aJ4lxWfdOyiGdAL1Vc6tE4QwBljyEgheQJF57FOuOs7pgaVJqr6arZDQrXpLZBMiHNUiUNw+lGWSAohF5oWGkhDszUn7pwo+UbPIuOn5xaPDCz2x+MwzmMoe0ZDMHakGsNZqF6cVGyccFlkspGyQClN4a5kEprzCUv20bBhVm2o1zxQmZChxHHgADQzqCo+3Rqunb+teuU4nEiWyW6lxdSU0ZpXmQIOUqjvFCOiZPcG4fZtM8KCQzBobo341tXh1EObByLKY8NCiky+ex6lhVirmxbBvYtcydMLIIrHpNIY0XCmJc9pxcn055BCP7EQvNbWX7xhdd+7vEHOxEyTTJd9e9zsO9bZ3fDYcoxhus96EX5/8/emwZbdl3nYWtPZx7u9O6b+72eMTTQBCgSAAeRjCxRlJLQtvxDlmxLKjmxK0k5ccWOUylXFJVTscoVV5xKZCuyS7ZkkaKklCSK8zwAJEAAxIwGeh7e/N6dznzOHvPj9ntoTI3GQJdi8vvx6tbtPqf3vX3e3utb61vfWo7d27sRxWgl8i6n5eHIAwBlTK30u08sQ9H85Q+cekVDmmNR16ILkUMQWm15Pd86MRMAQN4IsdW+tDn6zNntnmu7DC9FbuTQOd/2b8iLLbXDL5+5cmAxdOfhufW9ZDph4Ph8Z/uGrtbjUfs1tfLTS3zH8i1WNC8dQMaYvaLeTouubxmAk4u9711YP3a0AwAIwACwfTeO2LWyhs+3PIvR++5YWeq3XpwMXn1uLnbCtG5eb7df6MXjG+oDsWOd2R1LbRxGhNKvFwOemOuOi5f13VGCX7y2O9Pyp3WJM1d2PvvIC3/64HPWX7nvgTj4lTsOPzdKd0ep0q+YwPQyOBYVUk/5AACEtnXgew7T+oDSsH9uvvryVuA+fWFr+jpp+F7ZuJQ+uT78s8Fwq2rmyoSkupHqOqu51dPpR7iOdzJM+QsIj9qlbBouCL2uF7qyN1nuRW903TuJWqrNpKgaUTZya5IHodcICQSMga8/ceHnf+Jdb3SDt4vItwHAIpgRvBjEDQifEQDw9kUmBz1DPwhc3ZvcvjxDMEprHr1kDXY9u3PTSwEApHzdOP415xYLpVu2lTbiT5+63FLk137nS//ij769M8qubI0GdVrJl6igS98BFmS0mU6ytCidbtOMYIeSlwYke/ZzZ7dvvjO92aidUXKggOJKl1x6FrUonY6cm6ZVhFSUkjd125tgyjryqika8envPl/WvDJTTntLOy7X+oAPWBgDwB39MGnkkZa7m1dHG+dd86333915enP0rx/due/wwpVdsbmz3XEX8ka4jmU47Iyq1Tnv2qAoucIYEYqU0pZDkpIrULvjBmPwXZbXilMDylTCgIHdtBmX0oARXPVbtsvIIGm4UAtd17axz/XWpLYpJAW0Antc8E5k1Y0CQCjjpVJ5JXyPFY0MOS45atl4IkxWiE5kVbVwHLo9KhtpjJGTykxySSme79icgzixtHnt0spCZ2vr3G1HD49TmuekHQKzNBdSK21hVHCla6mM4Upvjet2aHmMUIocm051ZQhDL3YqrmKPUYwcB+eV9ihmGNkMq1xEAZWCz7ScnUmlpY4Di1EzybhWJvDZIBNKg5DSd2nTyHZEd3MhlGGULHWCS3uTRvfmSQUoBGOOHJm/cnX3Pe+fsxia63fPXd08cTTEmHbbxBi4NCkDm5QVlCVXylBk0kZkQhEMbmCdG5eU4aLWGnBaccelHqOyBkrR8W7wwJIVMDoXOi7DGZeDqi4q9Z3tISC4u8e+9PCzx46e6C3MfOI753/qfScro4gguRHvW+xfGJdbExEgPSxyr2mEE//ON87df3LWlexrFwctl9aNOtEPtvOKS9Wh9tlR4bsUGVPXZrXjckDjShAwoUvWJnVgUUbx9oTPthgAGmSSEGCEBAwHjtUolZZqcbZ7cX2vHbmeTRCChVZ4aTc9Od/uRGxzT0Q2wtisHpr73iNnbr/3DkJQ26ZcGilkO7BcRgmGWukZD18eNpQRhMBzWJI3lkULLpJShi4ruFxtewqMMWix5dqUFI1yKS5zGVBkDLEQcj2U1DLXzWNZ8nzNq6evZkWj14qZWfnUmSs/df89tYSdifJsoIRiAr6tQBJtlGuztJKEwCRXCAAhpDQQAlyjXmyPMtnyWG2MkKYdWtWobhpJKd4d8143TpOCYdyLsM0Qo9i3kbHIxjC/92hrUnKuTZ1xgnEr8q/sJvcdmSsafnlUjhuuDYxS0Q6YQwg2Iq9N4NLQtRmBQc738qYfEgO45LoSkjJDCGCMup77wm5y92IXIZRLIqXCIN81531+S80t9f7smcv3nz7uMuJZ7FBsaw2bef3kRvriTj4fOpTgSssF37EIlsr4lHzk9LGHvvz4t86t/aenDidcBOy6ue2RoL1up6WUGhAABIwCQC5ky7UPL3S+8ujZ/+HnPwQYG2P2Cp7U4sxuhgAWI7frsUOxd35vghC6bSbeTK83sC7NxC9e2bltdTb2XQNmlJed4A0mip481D97bbffi55Y25lgdEc7lMZ85crabll95dLafau9WvKVlfgff+pr//Nf/fCB4d7ZfaVNy7HSRszbBBC8YhbYjWj5zkMvXnu9P53vhuMbHDVmfCetBUYocuxKSvo6MWA7cF8x9niUlv/ij779e198HACWZuIHTq1+9P7bPvHM2SOlOOl7AHCqE70opHr5SIdXwGZUSNXen8YQWnRYNsv7IwUAQBtDMD613L/RpPUAs51wa5B88itP/sJP3iPG5Zcm+WP/7hsAMAMgG17Z1BTFZLiHfsQF3hL+I+cDAOBRO60Ha7tj12IAsD5MV2Y7a2901TsIofRmWgwr9eQuj777ovuXnOP9Fg3Q1jCZZGXkvwNR6c0RuDYAMIIRQjYlDYip3PxAdO6/DT6A3iicLbnstQIAmNRNy7n+YafDEG5F3TQSCgAAIABJREFULyReqwhwE1xL8n/0J4/ePt/60JHZ7z7+/G/90sf+ygfu+p1vPvZ//f63e050IweoFQeARombE4ObC+QpJdOKZ81F7LsAENiskTq0rldCZiIveZVt8414s2QAAKx9PjAsr8+R8KzAotf1QpOyxgg18p0xjDIABmCa3Mpqfn5z+NiL63/n4w/8j//P5wFAvs7W/4opPxbG2hhtzKS5vsVfHBYYoOTqzn6wkYkX19MPL/U+fHj23z324umFaGs8eeLshY/fvXLxWobiFrXwA4fau5yHHpIa2oGltbEpsQlpeK0Ewhi0NkUlbIpHWY0RoEqWXGpAUinfpa3AsinOa9mO7LwWDddNoyquGcVc6h6jG4MqCtk4E6FLq0YFnqUrgRHqhHZSCINww2XISFVypbVBpB05joV6kbM7qasaLfZI4FgG6TjUXJo4an3jy3sP/MSxi+c27jwZAKp3s6IdWkaxOGTjnCOK+4HtuwwhSCu+Mai2hiVBiFIMBrRSgBClVGvwLSyUkhosbRnQG8PKsvB8y2mHNiEkCsChGBHUcGUR8Fyr7SOlYZI33ZhhhEqu8lrPt+3ZmAnUpJUcZY2D7a0kf++RpclkbIRQGm4/Ov/lLz327vefjj1reWn2G488/f4fO1VUigAGY7JSUAszSvcmtdTgOXQra1q+ZVMcBEhxPci0ZWEbYGusTi/Fbdd+Vz9yKMEYuZRcnhRCKyTNZlE9u54gQPcutFbbXibEJ779FKbW7ceXHnv8xe9gWUqkDHE7xGvks2d3Zpn57PObsq7KumpcvL6x5t21wo3EBG1O6pZvE4IokGHDs1q1fTpMuJC6G9mUkN28kVozyhqptZLG0H7EtrWxKJ4Uqh9ZCJmk1uNcZrXqtyybYEDO2vZofm5+NkaDlHd8ZzcvB6loeV4n4mmhMcJO5ABCvKzGCKLAshiKA7sRcpTljdShQ07Mua2ApaVUyoQ2pRjSSgU2DT2yNW56oWUztJ5KjExeSsYQMpBkXBOMpTyXj3OlzARaFus77D1+sGf2PnDqUGw7nzTw2Wc2uom4tJ0yxwod0mFsVCteac8BRlBda9thVQNC6lbAtsa179C0FBYiZS0ijxqtXYYnlfGozhvVj52re+VKbO9KnXMTht729tCLWwUBQhBGpAXobFNGLqKUGawCl0xKPddtzbZj22jBSJMrn9G1tIoccihyL40KSmnXh7SWgWc3xhzquqmQscNaNnl+t2p5FiaQZsbGeCb0z+1OANNx3mhjTq7Ob+xMThyePT4bJmmd7E5ub7l/8MJOy2WVEn3XiW16ouv7jCa1yLgaZuJTz214FB+KvaXYub0X715c/70nLnz8riOxxQohHUomjbQJih13WBYnuz0AyPfjS5+Sd63OjZIidCxpTCXVoZZLsX/vPBRc7hR8O2sevjYeVnxrXH701OF/9PlHf/k9JwHg/jtXzlzZmcbl863g7ObwvcddALCJJV/HVPqeE4tn1wYnD/X/PM1Ini94LkawVcudkv/egxe71P2J2+Y/9cj5iqvPP3H+4+85Ob3K7J8LLccelo3fj04fW3j+8vbrUYLZ2E9eq9l3ioVefKMLZ893skbEjjWx2GaWt19++h8c6Ef6L9dEAZw+tvDB00c+ePfhg2X83refti0KALPB9Xw/wSitbnZkW4wcTAcCgMBmoxtW3kgJADYl/dh/Tb3QbDv4/tn1py5s/t9/8lBhjGG4PL9llK7xdcWX1LrpvPV45occ//HzAQDIS26uTyqEpKxn20Fev7ko8+0gr8VOWn3hzIav0g/ce+qhZy9vrO0+8K6V3Y20bETwg9TqTDEN96e5B4tgUDAdjub/B9EL1UJOxzCntTgwROO33BXAX67zwW/kzxPabGG1+6t3rj5/ZSv0bM3IhWIUaOY7r/yMDrHgdYoMN+KNgnVz4BoRBw4ATJlAYB/wAT99px3QLEqrRsANfGC5FYSONW4qAEjLRmktbvkbPsCNzERqebDoK6NMKZBaT/JmrhudvntFAngtDwBu3NlvRMK5i+mlJG85lkcpAHClH10bD0txqOUeit0Hrwz7gX2i67+4mx7v+g9dHv7GN8/etxxLA89vp0LryPMmZR3PdChClOGnNiadtjMpOEJIKA1KpULbFu5hd1JzABR4tG6U0XqmbSeFCC1aK0OxiX2GESoqUQFybVpzpQGltXQtjI1qDPJsUgsFyCS5kNKMcwHGLLXZpGhizxpmwmg5TJteZBUC5mMr42aUi7qSSpqSy05k9WLHp9U4rQgmo8SWSsaONTvbvXZ5w3fctfVtYvm4QXWazyzMlrUWStsU2zYWUmswNsZSKkqQ0RB5zHdIUcuiUSLnFdeehVuhxRhJSsGFjnzm27hReia2x4W0CElKoREIqa6MKkLwTMeNXSt08dpeRTGupbIoUQbSQiSl2NwuldauRxficC/J2hRvTyqE0KUBP3ri0OWL62Z1wbLJ0dWFc9e2+91uXvPAtbnUjGFAxvftuhGMYdBQYZUJ2dJkZ1gLqcqSz3T9bmgrMCkXW0Wtp79cCFGMd5OCIXR5L1/puEfbAUJwKSme3Bj3F1fiiJp2/7nnvrCxthtF/pOPn/Es+icEB5EfOdRrRUdPHd9JJ0eH42sX1gUyMbMYksmEj0EM87ofubspP9rzc6EarjyPMoyGtbApCok1KnnVSK6AEDPMZGCTUaF9C00KYVGshVrouXtJszPmNsWtKPr+s1d+5sdPKwMEo9nIe35z767Fub2MdyNdNgZhVnF9aHV+b2e0eOdyLbRUUDWC15IQ1Imc2cjCSDOC51tOLdROWtdcI4ySUkhFPQeHLhmVcpzz5Z5TCd32yM646bXtolbEjw6NM9INYmpHjCBsKMLH+63Aoas978NH+//v955p3XN4MBmfOLKkFNRCC6lCj0mOXL+pOKkqIbVpFFRcYgRcakZwxRUmLLKJUrA5rhtlcqLaNqm1iT2ykzQEIZ/A0srszvb4UBAaAzYjCJtudyacXNKAXYaS2sGoDmz33mMLL75wVt9+wqOk49Pzg5JgONHztrKq5lpx4zMcWnRQNqstr5aq6zBpTK0lgJYCL3qBEKlL/Ni3X9ganlrqJVxZNqpXZv7VlfWlImcIH257Dz9z8TtbaWRTm+BJJdMynw3ts+Pijk44F9rLLed4x8cYdvKaIHx1Uj2yWwmlH14bTCpOMEYYhjX3KHEpoRSSSmQ3ZJpDRgGgG/sIYJSW7chzCGYYT6WPDiNH2l5sU4RguMGVgUeu7B4kvI8sdC/se/C/+8jCld3JAyeWAUAZo8HAvtnojXVv12bru+OiET/OrGOrc0eiIEBYKv27o+rfPH/5H//593/j0zrn4lwCX3nkxQM+gPa34pZr2QQf7bTuOb16bZy9Hh94vej5AK3A3dw3S+0HblqLzbSYCdwn1nfb8SujZwMGATo+391+eU/CbCf8ux9/4MZ3DiKHAz5gEyJuWh+wKJFKj7PStWMAWGkF6Q3m71xqAGiUWuxED59ff/XZPNsOe63g7/21D/7CT97z6Ydf+I3vn/3Vn73vrkP940szZSN+89uPEo4/++S5V133I9wSfij4wCgrD/plz20O7z48f3V7fPNL3jKmHQs3vnNhlPzhoxcfONTKRwv3HJ49utKPMXz94XNf/O6LM3HwdnLztwK0P6FwKtlnhICCwGKwP+4bAOK37XF0kyR3c8NenOx7JE+VLfqNYnEA4PxmyfVXw2X06EwkwQDAXDtIoTnV7m90xkrpgxFpt443TN5j9BI/mXqAHjCBKfo3zdy84f1fE451fVTkcDpXrmwAYD72m4kEgGFedQKXizfHB16xEorpdb4EcGUj//UvPPF/fuu5C3uTrKi/sDdc6bjZ3Uv/fm9wul6ajfxX3y22LKH10VawVfCOg4U2j10dbWXNXbMRJehTz22MyuZQ7O+UAmHy6NoYMB6V4ksXhpHdemq99mx634/d81wGjk2znFsAbZ8yg4WEbkiVNJFrZ42clEpJ1Y8ZoapptG2RdmwPEu5QspNx36VVI+pGc6kpxYDAsXFaKMcinkO0MghQkzcFh1orIcFhaLZla6OrWlVKOxiVjfRtPEqBUSONabnUY6ZSphNYO8NymDULHafhMkvKxjeBF+wMS23qVmBf2s46c3Nnnn6xvzTz9e8+/f733uM71gtJcWeSRa1YSFoLPc64lAZRHFgEIRT7VlqKJG2qhlJsKAZpwHdJy2NpJWXGMQbXJkZqY2EgeH1ceYzktcCYVFxOUmEAkpxrQPEcYxbpteyrexUxphfaac6vNSqixrZx6Dmbg6LtuuuTbGF1fkYmg5LaBGZme7sbe3fducKVWZjpbO6OTh1fChwGpGKUKmUYxeO04VLXEmyKzFD5DtnhvJYGDKIMCy481356M3tgpZM2aj6wZ3y7EPLqpDg7yAngdy+2HIovpeV22SSNvJpWWJcM+omp7zi5/Nc+dNfD6+PTJ5dYC98/2zuTy7VBfTKEK4m8Y7k/KvLthk/SQnq2TYFaJPJYJdSw5g4mDsHr4+pIz580alTLfmgxhHayBmGwGaEMN41eaNlXBpXNcCPAs3HWKEbRMG1ClzaNarg6fax35hwrqpparu8yY4g2kFdN22F5DYDA87xsMmx3onScBN5xKvUk572Q+l3Hs0itUCGURYBhI7XZnXCMoRtZk0I4FPdiBoD2Mj7rO7Mtyxhoe7Tgpt+2h5mMAzYppAZ9xPeKxgCYYSbBoJbrntueMGT1F2ZbnXCx006yQinAYIQClyGtIXZJJowCaISuuObCOBZq+0xpMymlxbA25tqwsRmRSmPAFkFCQyWUa1GhhNLApQxDbzjKTlioF1tJoTGgTmjHgb89zuPAa4SmVP/0sRmyFP/KQ0/dfddJ18WTXAYepgQJY7q+xbXJGgMInZwNXtjJxpwLbdq2VXDuEuIwXHNzZqfAlqq4dImVZfzP19bne4Hg8v1t/4WvP/lf/62PLvVav/nFx/eG6eVJ0XXt3aJZDF2D4NwgzxrRcLlc+b5FPYYjm9kEn+gEGMHtXf935zokdH77+9dmPAsBdDx2pO0vt91Ro3QlXIJrpad6oYMjZ64TnV/fe+++C+c0iN/O6o2svjop5wLngaX2dw1Msnwnux5qv/f25X/9mUf+wc9/GABW++0L26ODazEgZYyZyl1u4ANznfCPvn4xCt2CmGWDv//ExReu7n7mO89XxlzxrduF/ge//FMfv/fYv/3GU//0z74NN+AgT+9Z9FAvvrw5okJ/7N7jt7V6r+5V6Md+UtY3OU3aobM1zKZ8YDevAJnNtIwdq9lvz5uOPeZKWoSh/dvk9csO32OLvS89evaj7z158M5UaXxj04VFybRo/HpHu8WoVGqcVdPFtD17J3tJyzRdD5dquRsNs5d6Hm6E57Cjix0AwC3veL+1sDp7322HAKADcP+dK6Od0jvzox7it4g35xX4/1MUFbf3H9mKi85+L8t/GHClz+4k83NtwOauw33PIe1+8Hd/8QN/66ffUzXC+4HxgYPdIb4+eQQDAKUYAKadxP6+puVt1gdurtVrpBzsyxAn9YHqXcGtdaPymw47fDVW2uFdlnU2LZKG9+f9Hz+6CgAEI0YxfzNzgm8RBKEDmWN8Q2t4vt89NhP5r9kX9XbQi/3p/2y+l57fneyuDTYHScisp7d3DUBWNeOibl7Vh30T3OQgQQBHlsJf+9i9X/6vPvYLd83228EvHFr4b/uz4TPrf3OmN0Neg2KdGWRX0mKnaL55eUDAnJ8UV9JyLa3uno+kMc/sJBZDix33cNd930r7vkMthGAmsH7p/pXYZYSY2KU/cbidTva01DWX2hiEgCC0nVQEDEXg2sii0PMs0NpzSFqqkFFKUeyzrOB5IYYZZ8gYpQ/P+hoAEKpqNUl4UatB0gwzXtRykDSTQgDGhAAYPBNbjCDPIRgTx6GDpHFdNt9xAWOlTc0VF2ZrVF/bqZKiaYRqebgXWkkpPdsalHJ3qJRuAt+xGJ3kfKbtv/ee1asX159//MVyfXRlmPVj91AU7JaV7zrdgCGE9rIGYQAwJZcIICtF6DHAyLUwpsRmdL7j9kI7rQSA0QCLXbcTWBVXl7eLa5v5KOMWJY0CSpEUKi245zJMcJE3G5OyEjLNpeIq8thuVie1JAgClx7qB1wDJaTr+FtJPskUJshmJArs/uLsC89fsrHRBma67SvrO+ubuVBqbyKqRtWNTAvBpZZSH4qdkNEPH+u9a7FlNO63nIUZ9/Riq2rMC5tpXvBrg/L53ZQQfGmcP3hp8OxW1rHZ4a6XcHFmmF1Lq1KoYcb/0mrvo6cOT7jQAv/cT917dZD8ys++y/ieMuHzecZrc7jtTiS9a6UbhS6jxGL02tag5bA054FLbuv640mFERgwj14eNVr1Ajvy6LGeI5WuhFYGylo2QmWVyLiquAldrJRxLZLWEpTWBhhFBpBtkUZIx6UnVufXt4ceQ5GDxrmYDYOtcT4uRaPE9X59g/rzM1evbA8m9TjjncielCprVCmBa7WXNaNGE4R2k6YW2nPo9oQXjQpcihEWQtsE1cpUtZzkvORGKl1zPS4F5yawMSCSFLzmci+TXBqEASO6nRUagBB87MQhY8zaxnY3QK5LMq5dhggGYQAjsAgOHOraBACMgdhnGhCjhGJEEDBGOiGjBDMGw0xwpbNKWgzFLkPIOJ5th9H62m4lYJgpBDDKedEo37UbwTEyroXbvvXtK4MBALOoj00/tB0L5ZUaZzJTOhHaAPId3EilDRzue0IZhkghZSK0Q4Fh3Qnwcts+2nGWOnDvajDiRXpxfOXRjWDAX7w4VFxey/lv/Nsvf+Fzj47HOeJiXIulyD3UdiOXtB22FHpJLS+N8hmP3tkLEehL4/JzF3ZKqTAl7z6xPNobryXVcuwe7wWTSn7l4t7//tCFh6+NxmV9QAZgP/WOAN59cunS5kjt9zVtZ/Wj6+NraTXj23/1joW50M6F+rE53wAYMFtpqYxZ6MUIoc1BAgD3Hln43oX1A8GkAXM+GU5nG0+nFE81P6tz7Yubw3/+h9/65Fee+O//1WcvbAzuPbH44L/8b/6XX/rJew7P/frf+ZmPnV5BAD99+uhM9NqtCIHFMi7i0H3h8s5r/gXYj8uL+nVzZ+3Qmy4bAAZFXQp1YZhdyaqiEVtltl1mNmE2YRahBwfB+a3hK25CCT5wXJ1imkmcDdyd/f4EmxKpNcOUq9eWYDBKtIHxPgc42ome2adVANAoRTFupFrqxlnN4VURws44i333+NIMAES2BQAHTYnXkmQ28FtvO7n5w4wfivpAVtQHY782Rmnbd2/F2eYdgTHAMOoejT+TpI8Q9p31ETSKEgIAq7Ntz2au/QPnsjfWB6Zid//lmpboBzkTjUs92C87pvsbllRaaf16W8aNqOuXyqDmFtzuHYrvnm0/kxX/xyQpzw4shAHAd6yav4n4+NZBMKqleqkZap8JZFx0fQcA9tKXtWTdiLdWHACAUVZ+9jsv/E+//UVk06cY+mfPr/3mHz840wvCef+uVn9zUjRS3frnfcNlrLYDxhDFuOXbgcU6vnOoF8miAYBX21cDwNG2/+D6sBGqH9ifP7fzn982b2EUUHo49mZDZy6w/+Dpjf/keA8jlAnZD+xTM6zUVtdiP3f7/G997/JYcSHNykw/EbpuFAJYbNsY41rou5Zbg1og0DVXe+MKEKobtdhxx3nT8lnNVezZx1rhd66MhIbVnte12S7lYDRmRGujtW5HVtnIolIaIHBIHFhKG2QMVzqwSV5K1yGbgwYT7LuUERTZhPusF9uAoJCY2azvgDbmzLpkzPRbziDnUiNjIK2avBQYkbSSvsc2d4vjJw/ddWqVhfFDTzx7x9I9q348TJK8EXklLYJrofNatgILEHgeUwpsi8xE9u64thgOXIYAJUVTVIpS1IksZUArow3Md1xpIPZoLbWo1bWMl6UEQEUlGSW+x5Kk6QRsd1IFLhtlXBuY6TjdwPaIObeZBw5VyhqNKwMmlwWTOgqpMXquY992x+FvPXLx9F3L1LYxRhqpQcLbERlzTSjre2htUGEELY9JgI5nP7k9NkqFljsumqhDEIBFsdRmu6pnifvglUHB1WrLbbnWI1cGlkWOzQSGmJIrIc18ZNmEPL5dpJNhAvrU4cVPf+2pd3/wNEbIs4gGlFQiL81y35vznAXfvjLTfWJp/vK1jV984LZRXns2XU9ratOI0UzIwGdzkV1Idbzt71ZVWkmDgCBoeVYt9XxsDwqppGok6kU0qyTDKG1URGleytkuNQZJBVrphZn2xfXddqc/17bn2/aocAd5MRs7aa1nOmY0RkAt37KNMVLxIPSGhTjc9SohJkWDEJ5rWYNMIIl6kQWG+zYualDKeDayiCkN2BYpygYp6LUtUHozkUOuEUJcGyyF0jAuJCBCCTJgklLNxt5jV7nSoJRaOTTz9NMXLg728gYaqSmGts8aQMgAxUhrrQyyEbJdVtSCSx27JC2FAdDS2IxQAECYUSgqmZYycIgxYMBghIpa9WfbeVYiBN2QNo0Gh2kl8rKa1KIVRgCQ1jJm9pW96tjS7Hg0Roy1PIYABrnYHTf9mHoWKrmZaTnnxhlFuO3RnUxUqXIt8sKYH42cWpur4yY2+mg72kyaI73WXbNzH7tz7uxO8qnvntvk1qe/+uTdty3/3FLn0198cneQLiz3N7JqWPF3L8eho463wmtJdTUpH9uaPLOdOowCMhlXVyfV8Y5/6vjyn1/Z3ZokX7tE3rPYemCl3Uj9rWvDTAlMSCPkAR84QL8dXN1LOJcTrtaSCgEcit258PpR6DPiEDzrWy9gBADrSdHyHAz6fadXHz+7foKKcV2tV+mF9HoseziK1/PrW/20PjDNds12I0Lw3/7P7leh9asP3DWVAyhjTp1YPL62c+fcde/OhU7YDtzn13bvfNUMgcBiac1bkXf2hZc8Q1+N6fiw0Hlt+/LbDvWHyfV0+15Rnxskv/vYxeWyeHI4/EWlUd8ehbLlWN3I2hgXe3m1Nsyu7Q6nRogHcCx65srLOMl0fvCUDxztRgBgUaKUQQjd5FAxxkz2+cPRbrSTVXt5NR3bXChZyoZrcWUwqoTkWr7CM3RnnMeB04k8AIhsBgAHJuaDrKq47L5Rh/ePcBP8UPCBohZz3evDPrSBXui93vC8dxClbBAgAyZynY8fXfrQyuyHP//oo40guj7tzQOo0LcB4C0b/78mXjO2u84HXtVdmjdiSgnecYH7jUiL+sHnrkwlmLtFWckAAArREIIQvLGAJ02S13xfaf2a0n+X0fnQI2D+/uzMryvVDV3Y/wbeLN4wUAYAgvFBfSApasdmGRdwQ33gFRYNB7iVm78eHIs+e2nrf/svfyaMvH/4jSf++uHF9x6dH5XN9zbWfufBMw+d3XKsqJK39ITfyjIwxtNMzPQwa/tuL/YxRmXFX9NfyCb43tn46Z302b00lfL3n7j2s7fP1VKX2oxr8eRmEjn0ue3s7rnIAIwbeS0x9694G0l1ai4qZGqz9jcujd6z3PrKuR1GCcbQj5yrg/KX710hFH3m/DYj2ADqtKxRKupGcqFqaWxjAo/VQjyyV2AMvcjOK74zrjqBVQs9KYTnkEZom5L5tptUInatqpYMo6RomkZjghd6bt3IohKhZ9WNKBrZslnRaGXAGLAZmu25XGqK9fndEhBqhEYAM7GT16KRuhG6rJFrGwvBJBOE4vved+f2xuDEQqfh3HUsrelaVi9NRuPSmum6FZcV1yptXIt0A4tRwqWabVmIwLWtYpw27cgOPKK0sW2aFaKsZduzKEWIgM9ozRVx0HLX38xLl5GNXVFUCiPDOQCgpBCN0ICU55As56AhSRvpEmJU2SDHIu2WvVjFF3eTU/NzVZ7zxvO6/txyf/3KdtMsGWqW5vvjJDm80OoFDkPZJFe+4zgMh7G9WzWi1ptJuTmppTbjoq6kPreXP3C489T6JPLZ2qAsG1kFju/Q72+lhBhJYMZlm2lZNNphJHBYQNnDV0aSm3art+LTK4WuGs54TShmCJWNchle6YRcyO+uj7uepbW2KXr8xatfujj2HdLCaK8UDMOkEpFHjEHDUs0H6MmtiTKAMPgYksaELrYtmjaqqEXLpm2PSAHjQmPQCFAt9ULHoRgqrqVSgMjK8twXHnrqg+++Q2vjWPTkfOe5J7YVIIwgr4XUpBW5g8Hk0Gp/e3OwcvTQTGiVQhOCEdJS6XGhLYpmW9a1sZDaKA2N0L7LEMKNMoxiCyMrpCFjQstKgTbAMAiFhNAGMMXgWFQoKGtNCIo9XHATOFbJq8B2WzOdtas73cXW5t6o02opQISgPBWdwKqVCRw6KmTbxZNKUYKQgbVRjQBpY7TWFZfaWP2YZKV2LGIAYocltewENGu0b2MwqBX7TZpumCgOaMWV67DIZheTmmFouTQTmEO1NtB+ED56futuO4o82g5YJVTZyN0ELAquhaVUghvHQ3spj1yaFrKQ+sR8cLzjPr9XhQ4uKjPxKoPQUid0PbqZNXNR8Dc/ePfds+GfP/j9+aNLvue9796jbaSQ1HcuxONKnN8tT876BuBaUiKCIou2LXZ1XBVS2Qx/8fzO1wh5YdRIpW2k50NnMXYtinfrxqEEVDjfImlTt1z7FXZ2y7OtT371qdaxlXvnW8uxuxC+7IzYSOvZ0D4Ue1obh5EntnYkFhjBiTsWf++rT/69/oeURpZix6IOxRgAGvXK3Pz0n2v5Tif0PnDnqrRwLuSBPHgaPR/pRgdJsY/ccfjMxt6r+YBv0bQRceQeBPSviZbv7EyKY7OvzQcYJet7yZ89+Nxf/uCpyc7ERujOlvPVb5wflfVv2bsOuQgAgdHSGIuSRmqXka1JbuBlsXXkO1XzshRe7NoYoX7gDvYO2rKJAAAgAElEQVS7F2y63z/w+ucPQuhgPtrFYbpX1g9f3fuZ25cA4KHhYKybJSHUuHYZtTB9xZi3nVE2HSQF+5WB6dkEAEnFmY1j+oMSXPww4J0MRv/iAqMJ6PVx1nKspKi11hSj6eP6hsHQW0ApGwCYdhEYA4FFWo610o2X2uHf6Lde2B7PMmusq2mNz35V3uLtAL1WhJcWdeQ7U0sfrjQAFFxMf17nA29b0PJ6X6NQ+tm1na9fGswfnddGV0JfN/MxpdZwK9Os6ub62m7uYnaAafF3aveJAU394OK3xAduBRSjel+pnxT1bCecMoEDPnCT+sBbRuQ7nmON0vK2k4vKwPNt9/HHLydVM9tG/8WHT733UPe3v/pYWb8xx7sVMgAABKPp4IjIswGgHTieYy324g8dXng9f6HAohbBg0zcNRN99dLgj85szviWVLoQ6tww9yg51vUvDHKXEYygFGoxcteS+omNMTUeNqZW6tuXBzajWuvQt7Q0h9v+fGSfHRbzoVMImeacUVxz5Xs058q18DjnM5G9m3ALI2lMVguMcMtneaOQMYCg59tFI9s+E8bEPluvqtiQjWFVcelYREhjtKaIJEJJoWZCx3cx0uAonNeQFyK0vfVJjZGxkQENs103zeXGqHIYXey6WSNtw6oKKMGWg2uho9A+Mrv0pc89snTbsTuPH0on49nZvm9ZO0XjO05Ry8CjeSW5MjMecy1rkFd1LRmb2omShmvfYzYlNYeyFq3QSvJGGvAcOk655+rYpVxqrSUYRAgKPAYAlBIhlAEzSBtCkTI6KRSA2RmXgBBJUMulTSENQsbAXCd8cm1TKq2lqpVstJlfnn/wa98//d5TkWd1WvFoNIr9Y3kjPR+XDYxy0UjNk+bYXLjXVF8/v+cQHAas4Cr2rdOL8bnd4uhsuJ7XtVBEardL01oWtYh9Vgq9VdQnuqFD1bVJORFqXPJxJT0H50na8tsuZieOLz95bvvI7cuTTPY7NCD+pJYUEcJUIXl/pnN8ZzBcXdzZ2b3z6FIueF7JfmgzC0kwSSFCF1EHQk0ro7rYqqWmUpZCA0EYwLHYqJbzzCqk8G1MCNUV9228PW66sSWl1hqSkrcDduLwwnOXto4s9kOX+g6aj8IXt8Yth824xLWIQ4xrofn57niU3nmKGmMMGIoRMkAR8nyilckrVTUKAIYJDx3aCqjU2kbEpmYv455DGYadRJRcWwQXjXIZxgRJBWAF4zS3HS/yqMVQ2ci2R/uBt5dWQc+Z6wUE49lOXBRlpxVTjKtGRQFrpGHU1biUmgxzgzBQDI5F5jrWKJUUIFcABiW18l3UjUggsVDGaGAUDzKJEGxPmthhS4vdapLOz/cGaR17pGlkvz+7NjpvU6I0zLhsu6wMZmC713Yv3m8zo6EWOvaZTUgpdMvBo1JrZYKAFLWyCMEaYWzSWl0eVDaoyLbGDa64SOrGwa5N2eYk9R1nxsOlVB+5bfH8lfWP3T5/dmeiO/GF9eGPrSyOK9H22JntfLIuj7WF1CYvBXhGCKkNzEf2pJAYo+XYXg1nP/GnO+zdx993qLVT8LbPlgJvJxUDWdcKj4rqcLs1TdhPw/TdvPnuoL62O/4bdy36jvXqTrbL4/LehRYAtFx7QNBvfvvFHnG6gbM+zNd2qgt/+HDNRdOgtVG+2otuvot2Iu/00flzu+NBXvWCl7TKs4F7aZguta6/szITrw/T6evb9keSAcChVjAs6lbkDW56lLQ8ezfJX29Ldyx6bm3333/p8X/2yW9UxjzFcPr0lY31wcJCZ+lQpEb69iPz733XsdsXO4d6vk2s8zvjbzx36Y8ffu7GmwTuK8vsseecmO+Ssipu6BJ8w7bAsuZSqal+6eFnL39plD/2Bw8BwI8ttz6y2ncJdObZd3d2N0cZvMqBcJxVJ5Znpq+nDZCtfZOSWkrPs1v2D+qs/2HAOxmM/oXF1jDpL/eF0jtJAQCjotbaTB+0WwyJ3hRu7CdGCLS+3r87F/tG6pnAtQgBDdPOAYu9cY78beI6H1AKAKTUAJBzCQBZI2ZDAICbNLy+ZdSqeWq4ZcBUQhBK2yHjWu8U9ajhALCj1aiobyXE582bW5tDydVJNue7ABC59tQi+q3VB24FgWMdxMRJXsM+Eyj398e9tASAtHxZ9uhtPnW+awFA5DvHuvEFjWaf3frvPnLX/au93z/zbK/tfODk0u9+84mbaEmnuPkaHGLVik9biglG00xM6F2vDwBAO3CPzHe/v/66klaXkqNd787Z6OqovJaUQ8yHVaNzIAjdsxhjgj+42pXafPHcTi30elGvdLw/enrdplQD+JQwjAdVYxS4Nhlx+cGl9plBnnExbjiX2mFka1I7FgYNCkO/7e5dm2yNhO/SopaBwxqpudRpLVs+UxqoMISg2KWWpVxspY3wBHYdGlm01kwjU1ZqmPGq0ghBFLC9jGtkGWRaDqtLRW2ymZY2JZOME4wjB7uMpER5mFa1yCqSlVJqGgUN0lZeX3fgHpfi6InlrbXtVuivbQ+ZE59amLm0vRv5UNYycGnosayUe5OatAzDeMLV2nZJCAoc6jnaKC0M6oZWw2VRCN9mm8OyG9uU4KwQaS4Ch1oYlVrnhawbRSnhUsShlRfStckoacCYbseV2vBGSWGQhXgjNQAC0Bo8Zkujq0LYxBBGpxTl5G3LG2u7ndOH+73eo08+J7XhQrdcTChOs4YAaGMu7uSt0BKFIhQLhWZDmpYyr6U25lpSLsVuHovltqOMOTHjZ5U8s502Qjdc7VkiKRvLoV3G1iZlw7UXM9exGgVCiXtPLjxzfjNcmp+JGNJ2jeulKNgs6xahsY8bzlqe015xnz5/ZWlxLmQaEdQYU5S6FophpDVsjrhDsdFqJDWXEAZ0L+EWhdAjtYSjbSevZdbotkMmjXIorRoVeSwrhDEGAAWuZbRZmOls7o2j44uVULsTHjvupCqXW3MEidC3JqUIfa91LPrcZ74b2+BZVCmwCMSUAsIEa4QBAQgN10bNXOwMiwaApoXOkJoNmefQvFJaQi00RlBLTQnCGIQ0lVAUIcUb7AUadFLAUs+mCAW2k1a1MabkZuXw3FwnOnPu6rHDSw3XSWPmLdioZT+0G0AOJcoY0BphNCp46LHFNs25rLlRWo+yWirWC9kwEwZQbEHBZeQSXYEx4FjEjaPL68OVk6uEYIyJBiUV+I4zzssjs5FWJvIIb2C2F6d5pYzm0nCjLYbBaGSgAeQ6dJyJrIBeSMGg3ZQLbTyLSqUdQpNGcqEMQlktbBeWOv6jF7c+EFguwV3XXXHJ5jB1w/jD3fhzw+TZvYlN0UbeXM0qQtCcQy8Oi7nA+uixGYlAKL2Zc5diitBcEFwclmcHhW2x9aQMHDaqZN3oXc5XYzepuG/jzXH+7qXrTGAzqzezWir9S/csf+HTHufy1ZYe15JytX09Nb7Qjf7XB079k68+8Q8/dPpn7zz0B19/+pf+ySfGBGOC73vg+NWd4eFeNI1/b/x5I9qhe/barh+5V0fpdA2N0pigu+c6F0cv8YE7Fmf++JHn/z68zMAHAFyLTs+Uo4u9A4+gV8Am7Ph8d/Ty8WE3IvId26K/9isfndry/NPvn/3bxxZPLnTPFcX7b58/7LcO8pLTEcX3HZk7u75j05epc33HutEdZAqbkqMzrYv7TGY6CfTmePrC5j/75Df/zWcfBYCXPEOl/t5T7Jnjq3Mt/xPfuZiV9Uz6Gh+nEdLfb3ecKoUO9EKNUIzig+rBj/AW8EPBB8ZZ2QcQSg+SHABunM0xTai/zfjs5sAYTYlsN/R2kpzaFqMYxHXV/qtlPG8Try4RJEW9tG/pM7WhzK/XB67/br/9+sCr4RL7znZfKu1MZLiysCkcNOCfT5ILz14AgM2iWnSttYYvvNF9+JuZKwwA85G3kZQrrQAAYs8eZtUBHxC3sFUd4BYfCYyQ1mY6DSApKthnAgff7fY4r4XK6wb2SaJ5wx6IN4LvWKFnB65lAP76Su9Xfuzkfcv9i5PxUhi6lB5bbsOrrCFuxJutjFGMW64NAKFrA0B7aqPkWTvjrBTSGIP2szgplwAgtNYadrL6x1d6m1n9gdXuv/zuxBbkW1cHk0x5DM8GtkXJ2XFxvOW/Z6l1dVRWjXp+L81rSTA8sNJpBfihS4nvMN/GSpm9pHnCyQiAlKpR5nDkPZFMuNJdz7It2rZpI5QxSIMua20zUjRq+g1TBC1Gd6pGG53XMvLpKFfd0HCuu7GTpFxrI5Sab3sI8OaowgYWui5jiBIkpPFdlpbcsnFeC4vhpBCMYAzGt0ijTGiTvaQWwuyM68CjkcMKXudFrTWKPTaa1J3YPrTcX1vf69158spT5247cTwtTd00QqJOaCljlDJaG25gN+UIEMZYGRO7rBFqtuuO06Yb4mHKQ49FActKGfmMMlxXMvKYy7BRQG0aInBQs82VxZBSmDeaUTQcV8bA/Ixb1jL0LIeSrGi4UKnC8zHNBbRDa3tcL0SBRUnkMWG0Niak5p7bl69eXlsODvctf/325Y3N9dMn5lJubJtDrhGAMqbl00nBhTSzMauFBEy5Vmd20nuXWo5NKyVnQzvJxfHZYG1S8Vq9a6G1UZVXd6u1pGCM+Ab59nTEuB4VwnedQZbfvdBVtPepzz126n2nYxsnuY4tODvIJUZYqYg6hotjM61vXd7Z3Blu7OZ3r4ZMykZIz2IY6VKYhhvfRmmjQUMtpQGMaz0TWWkpuADQZiNtLESMgUIaQrDg0hgQSjsMp7WyLYyRGRdyebb7+LMXhoVEAA7BR/vhN1+ctFw6H/meXTiYQoOEVC5SyaSpfSvjOnKtpOSBRRspLIocijECgtFO2qz0vEnJPQttDxsuDYDxbVpKHVpst2hmY2sv4TXXkUcJpggZ2TBGlJCkGzODQBiz1Pa+tTdYEd3lgN5z9+Gnnr28U5daaYIMIEQwxC4pGinAEAIWInmluyEruN4YVv3QroVW2jCKEUAvIMoYZcBlEDgUUUgK2QopJTipxNHV/mefPo8RBDZmFJhErocIwUqLtVHd9qjtIEKwAR34zsbu6I7lPlcqcJiUmhJT1LLlW43UtVBCKaFMN2JColro0CE7ZbOVCNcivk06PkaA+q6b1YJzzbUO2u6DO3kYus9t78Wunxo0mqQCNEXIpti36LgSq21vO601gFAaI6S1Hjfyw4d6Hdv6/vrkI6vxF3vxtXHWtijE7qPrk7bHjszHzyIAAG3MelJSjK8lFQAcit2ZwNbGLPfiGy2GDrCdNYfi62F617GlkDYhFvv/2HvTWMnS8zzs/fazn1pu1V17755943AdijJJyVIkW7EcWTIUxbFiR0iCGEH+OAkcWBDiLHASwLEUAYENOwYkx7JkSdYu0ZJIkRqKHHI4M5yZnu7p7un17rfWs59vzY/q23NnpnsWkqMglB4UDurWrXOq6tS933mX530ejAA+9djJh0+u/Lc/9umVQfL5izcWFf3F8ofusaieXV969dboOz9w+k6sTDFCAN1AHJQNI6w1ShD28LHhnf7AUQiCS6Uf63dOnVvJ7n3FHCTB7N51vU7kL8ZFAOAHn3pwG8FHTiz7FE13LZL4Gszeaq78VpWRwOPtG/sD86oBgEESvDA7WDwi38VF9vGza//VX/uO7/voAwDw+Zeu/8z5az/+fR++f7VvQ/T4+to//5OXn1xfeXV7/C8//+xb972xO/30k2ePPjJv5CIlaLRh5Ju8tP5Zx5+JfGA0L58MPIXRrUkmrZ0Ub8g7331g9I2BIhQLDgCPHBtuTfNhL124kd+2Df6W8oUWQG+sUmRlA4eSPrf5Qq0CgPow13/HWvI3gMUboAQPTi/94BP3/8y//vyZ73nib6+vPHVqBQDOT7KLV7YH70IAVKn39t4IRlkrFxFqEojFd50dWva+w87vHRTjcV1ZFwFAUUsAKKWuW+myGgA+85WLn/3qZcmieaN98W6/6Hccmu6momybftdvjfzo8aVI4MZIj+LWykUnaqOX3CvHe5d5zlEwjNPb/YEFX8gHgGE33psWrTH5EWHThFMAmLXqmc3JJ08uhZzU2nQEfWw1/frOPMuURdCJvRf28wcG0eVJ8dzN6cJG7fPXx2WlDEKM4pf2MtgD7RzCqFYuFKiozY2dwqfYAQDGLxdZXutuzItaN63JK1XUmlKsrY09FgeUULwzqgOP+pxqbJdCHvusbnVeal/QptVVa9diZhRRxhkL00pOc220HfZ9QnFWKUFJVkkELs9lAyb2edXqxGeJT7WznMI0U5hinxOt7bDjFbVqnAyEmBdKWzctZSDYJJNahLduvbJ6+vjKsL+9N3r03Oq0Tpp2xknXWJDaxAHFCPkeAYNmlUxDbi0YC1IZzsmtgyoKuTIOAypb3YkYZyQWdJq3CGirbEIJJSgNOCV4d9YsdQTF+Pp2Hka8lUYIKjXMCskoXu0H2+PaYejGbEgIQpCIYBCufenGjWGyEoGK4hAz3l1ffvbrVw6amlC8sdr97DOXjq8fG2UVYzb1xdTIxljskKCIEqycA4Qr7XyfSmUlcsy52rqOz7anVatt7FFH6VevjxHFhJC1rm8BUk6uTErj3HLPI4CyVpkG35w3N3dKaezBOCMk9RiujCkb5AnKCdrMW6lhVre7ZYsQHBsyZaHn073aTiu1nDBjrdQm8FhAUdEaB0gwTJFTxnCOPQIBY9NKr/RZoTWnSCq73vdvjSppLMLEWOdxorXrhVxKio1hSvV7IcGkkRTA7uUt99B+bWtZE4b3duZiefDS5a0nHj/NGcbYrSUMAZSGMgLjTHkEKEKNtY3RyrisNZSTRhlB8bxSACgIeeoRbdwigjEWOWcBgFHStpoLKigQwISgQRKWUkecGiDgh1u3xmOqlDShz6x1rQZtIRDYIjJu3LyVvYhRghKP+Iw4AGNcHJCs0hihcaUb5ayFUrrEc420acjGmYw8Dkj7UegA8qLyg2BeKmfxVOqBL14bzT56Jh7lKjGU8+ZgipaXenuj7MzGYJTreWOdc9rYRlsprXNmpeMrZceFXPCmooBNcx0zVCsrtQ08GlIOFhPfk8a+NioST/iMVK3xhJhNymNnO71uXFdt3bizA3/aqL7PJ05NGllo80fXJ4+txgeV3Ei8kFNO8GZWn+1HQcjOHB9+eVb//Au3fMYQgkBQcMg6d1Aoqc3TN8ane9HRiWEE8IH71q9sjz/44PGjS+Ju3gCCO0/zOS1bZZ3rBQIA1pbS9UHyY9/zAQC4OctmVfMmw4G7wW2P5oKQ5o2abyuR/+zmwR2eAgBs9JO3jhQzjFtthmn4wMZglNWwDnfFQ8cGv/D0G+g9R9GJvKqRvUNX4GHkXTyYff/9Gxf3Jpzg9k0kfQA41Cw6Cl8wqXXVyDuiiPO6BYBhEs2brcUji5wHAXDC1D0E/XzBKCGLRsfyscG5g+l99x/79Nm1i7PRtG4eWuudHEazPFu6m+BS3aqNwe0OybyRADCrZerxBQWaUXLUee3P8V7xZyKdur4z+aXf/so/unjzp5+7fGN//vLedNa+t6rzN4M7/YE08A7mZd7KhfRn/H6q+hxNCRbh/sI6arFdZAJ3OC1vU0v+hnFH7H+1G/3QUw+CtQDw4Y1BT/Ce4E/20qXIvxf7/CjUQpD4XbsQcEJ2smoxL574b8oH3vnl3is8RhYWKgSjxas8udp/6freT/zDX3zyJ/6PL71844c/9RhXRVG9Pgr2juH4Oz4hFF4ovJB7HuE93395ZyYID6nnOW9x2p+6b+OuZu/fQDIAAAzjxcqbHJFyw4JPaskoDSlJOF3cAODSqPjXL24NQr5XNJXUAqEvXB8vxg92sjqv1YrP9/Lm5Z3Majdu2lxqyjABRwlOQ2oMzCutrEt8zin2GJnkkhLcaGMQdGPBOZbOWuuKRjfGOozGhfI5VtqAdVWjdib11n6ptCkqKbXZnTbjQsrW5KWqpAZA01IJhrNcCUFqZTxBx5nmCDGMslJjB4JgzMCC25s0RGBtoJBq0PM6ASEEIsEowRSjyKdJxEKfphE9NQzTWGgNvQRTAoPUW+15nKIoDhAAxfjcyZX5fDov7OlBah2s9YJewgNBBqlPKZ5mqjXWFyTguBNTwfG0VHmphSBZKSOfjjOZ+HR/KndHTVHr0GeTXApOBEMO4CBv9zPJKAYDk0zGIacIB4JmhYp81kk4xSgUdBCLJZ93BMskbGdaIbw507u5irtBZWyu0UFWX7q1bVx9fbv5zS+89ht/cmNybVy3bV7ZLG/2c6ktQsaEgmSFogiyQlrnMEZNa6OQX53Urx4Ue/Nmey4pxhf281llbhWNNm48a7K8UdbuZ+2NSVO3OvXo/lxW2qYJXx0EeWX7neD02Y3p3qTrk6JUHRIvdazAyFkXUhJ7SPDu6YifGHYDrUe5pIwMIroSi0lpGQFrYZzJrFGBoAQjBBYhLJUlCPLGaesCQW6M69WYY4B+KOpSr6bhMPKGsViOeeJzCrA7ay5vzdbXl/fns3EppXN7eTNI4lxVB5mWzn3tIP/dnexX2jqv2v3t/VggZ3Td6qxxhUR5raWByKecom7CKEajmeyHTHBsHQwizhlhFBvrtHHGwbzWccgpwYygjSWvl/A0iZ2WEXU+ZYI6Z8ykkJHge3lprRks9ybj+XI/NbpG4AgGY13RmHEmG4mMc846fdt2ADFslXOtsh7BHKNuxJcFYxRhhHyGx3nbD7lDsNwRCAHFqGjNyRPD2e4IY+ccUtoOE04JaqEuVLax5DfKIQSD1Du5vjyZzncnTRpgn+PIJ0nAjvf8RtmNJR9j1I/4as9b73qcIYzdcsoBk+WQ9BJeSXN9llfGHLRyEPuphzZSPpdyKSbLS+nV/emQwbleEIfebJqdSoNPHOuDg2HCEUbLEY88+sUbk/2mzVqVClpKfXFUfGAt7RPyX3zvR3znVkNiwXV8Pinbi6OiVnarrCSgD64lH1rv3InyF162G4N0b5xjQJU2d8Svb2b18eR1ln8o2KJ81jtc/T795NnPfOVVAOhHwavbo4XAKMVMu7uHv6EnbuxOFhzCo+Xz1SSYHvJIF72Fp84dO7918CbGkc9orTTGKPH4fnZbqa816k23+1b79b015TqRXzayd/i5OMF3rpL8bprRALdNS4/C41RpOzqikDGvmkXprdVmQWp6N/0BOKLwsTird87tHRXEt2YjCzRSHxt2FvfzVgHAws5s8dmVNrP3Uxzl2x7f/vmANvbkSu9Dj57c+t2vvfr7Xx9b/3PXpn/wp+hPTDE+5Av5tw7mcKjSGHjMAsi7xW3fEtyJ/BZslsWLLmb/S7VgDb2PfKE7Yv+UYE+wH/z040d/GwomKLmrWuWboKRyzr3jiNIdRJw2h0tSetgfmJcNAOh3t1TBe4mbPUZHRT3Kq1LqV7fGf+2Xv/DX/8HPz1+8Hp869r/+nR/4yf/kex49ORx0gqJRHf6u0r9389JxIPKqXQxJdzx+dZIjgIBRba3Pbmeeb3UOfjdHvisYxbO6BYCsauGQbvfQxtLV3UlRt6U2mdSL2z/98rWf/dLVCwfZ77yy+4+evvw//P7Fn3n6tWeuTT7/2qg1lmDsMfzKfjEv5Su7851JbVq3NW7y2mSVNsbN5iqNuDZWanswb+a50taBhbY1jXKjubo+qvbnclIqbaEstWpN6lGPoKxSg0RY4xppZGuscb1EIITmhZTKUYrz1nQjEQVMKrPa88G5rDajWRv7rFU2CWjRqtWuLwiaV9ITxGN0KRZA3KxWyx2PY2yNa7VT2szzZtbaYcqxc1K7JGRlY/NWR5wihz0BnKKskgTD8SWfIjh+YhnastPpX7u100upVdBIqZ0uGhX61KO4F3OPkySihOLYZz4nGEEkmLTOATjrOCWhTyKfLne4Q87npGo0YLQ7qSbzdpS3ScjSmPUjNq8UgE0iRgmsLwU+p1WrnXLLHW80a0Zl65xljCCCtLGttOfWopUkvjnOn9+a/8aXz3/m2UtfuzJ6zaS/8JmvDThxO3sZh+dfHbXa+j4Do8uqZYIXrfEEQRQ7AJ/hujG+ILOyDQQKOLHWFlKFASWUIOwQRo4RpR0GqJU9FQfaWG2cA9tLhLSQFZoRst4XIbFLw85kMh8XKgnYtWnT9/nJxO+EVDuTFTpNaCj4qRMrP//Zr6Uhd87VrWmcQc5QiuOA+RQnPhsGzOcYIUIAKul8SgYxRQhxijACn5Cuz2qtPB8LYfeyelpKwvDWpNmctQ7BsbVkdZjujKaU4lkpAZBr9b998fIX8smFIg+mVfvMZfXLXzr/3OVXXrnRGtCAEUHaIetcq502Lq/NtLEBhdgjG32xm7XGWIpRq91aVzgL1gI4ZBDilDACFhzBcHNc+xSXrXHOYcIodo1xNyctJ3glDSg1Wa08jpeGaS9NNvfnjUZpQAmCYcg5xXnp0sggjLPaYITy2o5zHQsSCmoAIYSqViEKKwkHcEWtw4CtRqLnUY5RL8bLqccp6vTTyzdGeWUSn3oe9jwyXBlmBXzt1fGFW9sI8tizN0d5I9W1zV3OyChT00JOM91IwxgeJDxmLPGxRbAU8kqbVrmqMftzqawVjGS1Qg76LLbQ7E/lpKiHIR/XinsEEOlE/hJz651wp2qCOKyrqnE25uRkJ5gUihIojCMYOh5ranNpVJwfTV4ZZ9dn5VZeTZT5ly/c2surP7i88/hyfHNeA0KXxkUu9cdWV86txLO6greMuj50cvnL528gBAEli7B+O28AXm8OAEDI2aL23Dus36304ks3DwBgrRcvFsOF7cCZuPPK9ADegvVBWtStc+BRWh6hv64n4bR5w5V3pRPtTHJ0yGFevFefkVKZL20ekEj87rOXLs5GDONJ2ywcA+7cXtk8eJu63u184LA/kAheHzYr2D3ygbfyhQSjSptx9nptK6ta59x+VgxMBfAAACAASURBVIBDCwsCacyChgfgvHv3/zuHc9X9QNzZwiF9mhOS3qNaenSAYSFfvqhVVVIBgDJ2WjZwtymOP8e7wbvlMPz/FxfnozTxV5eSn/qpv/FHX7/6d//V7/+FE51j71qd/ZsHPRzHXO3Go7wCAOfcI73hlzdvEYykNnfxd/3WAWOUlS0ASGMPsuqT5zZePthT0/zFnfFfWu5uDzsAYGpVte+2AP9ewQhBGH38I/c//YfPfeHS5g8/eW7x+Ho3wkBq3fr0zevOURijAcAuLA+de0eCUcDoHZrmSjcuWwl3GFPv0bL33QBhdLUs/uRGfuHG3jSvvvOJM3/rr3zog48c+58/+9w+VxfmI5zgs6d7c2iss9tlthYmb3O0dxmyL4ori3xgEPqLAgkjhBNSK+Uz1o38z5+/dnSXd3nku4ITvFh580U+UDZrveT4IP3VL56PBzFHwCnBCFnnLmdVErIn1tJ5qcY7ige0K2jfY1t5vd4NtiZVxJjA6C8/sEYx/oOrB6OibW3T74iNDstKd31cKb1gckPgMWVM1epQkI1ucHlUGutCQRKfzQq10vUaaea17EeCM7wzbRxAEgnrQBode8yB68diXknfI21rlDI0ZMJgP6A3D8pOyOvWphEvGxMIUrVaGRcFlDGyPW3ODvhm2WhpjQFjrbNOW2AUa21HmQIEfUYJwKxQnBNB8ChrMMLLPep5FECv9rztSXNtv0oDCgidOLG8tbnfXRmePbH+ypWdOEzrVu5OamMROCipAoYDn9aNSUM+L1pPUEqwVIYgqFvLBZlmTRrxeakcwlLZVts4YLPdglCa18r36XTWRin3GYkdhB4F5DjFqc8TwWZ1m1V6e1Yv6p9hxPdbtxZjpdmkaB0gAuzFWwd9P3g84vefWh+Ny6ubkz98/uUrxP7ID33H7z/zSlmXD/YGHqX9Y3Kao/FMzkvZT4UyRipjnVvpeNuTuqh1mZjtonHgQo4JwbqRm7VeSUQv4tiBEHg6byvf7s/rpdSvNDitOx6lDKSG/Ukb+my40n/2mQtPfOThvDaxT3YySQCUtpxiPyBa2TT0Xt6fH0zz8bxNhC8EXXSTamkZcRYjpe3WrHEYlmOmwUUhc87lrTHaWIA0JArZWaMX9Vhl3GqX785UVkNVy07HV9oS7E6t9j73zPlO1IkE+dyV/bxqo+n0xpUduhF2BytP3n/8kx+7/8KlvRe+/LIBxygCB9bY2prUZ6Os1cZSgpS23YBtTtvjPaEscshNC7U5bpSxkU+Eh8dTkwQ0YCQHXSsLDpWVJgC11h6zWaNHmerFxBrwiNieVstREjG6tr60upReuHTjkXMn8kp7DIfMKgtSOa0RZ04QjjAwivop18Zigvohb6XGCKatdggp44wDgmBcq1Kbg3mbepwRtBTyotd9+cWr2liPgMNAjUWy8rUh0l28Nd2bNdOiNRZgc2vEfUGs47gXsYOZZIQ55wKPXB9XK12PIBg30mOkE9F5oT0fN7UddDln7Ma4Wk7Ytazc6PO1Tvezr+0+dW6jKo0D9PDa0m/8yYu/feUgTPqry914aYkp1/PFpUlZSUM0brRe7oUE0JCKrax+ZbcVWLbG/N6lUSn18aUOHc+e29r9b8LHOj69Ma0+caK/mdf3LyU3CrOd5Q4AI+QOmwMA8PCplc2D1/WsCUK35vWJ1D+qRLSIUAV7vXK6Mej80fOvAcBqJ5qWr1ejMUIYIevAwBsYRL3Ytw4QAkFJKVX3SKTb88ROVvbD27Xw08Pu775wGQ7bBYtDeJTsZNUtZ54ui7Ubm1/4+u7Z1Z7jOXTJahpsT8udebk9Ky/ujI++mTehE/tVo/rp7VgjEaw6vBoyguFuF8a3RuScEWPdaPZ6fyBvJELoIKsAuYUFgaL0oKheyycEY303GtICd6Z++4F3ZwuH/kicknt5pLZS39qfPXxqBQCyVqHDrGAmVdkqpe2srB3AQsX1Td4Ff453xLd5PvDyZP9s1B0kEQCMq2ZU1Z1AnOvF02nxTrt+gwioqHR7KDbqACFpbNbIxOMrnWhhwa20BQFF1RKC348g9ShaZVqttkZz06p/8sKFZ56/8vLWtswtQvh/fPH6/+lxAJjV7YX6/TohjJJhEg4Rql66eeW7X19KBKWL4ea3h34j59ItpEAQgsPtm+AzKo2tpIoFe2h9cP1gBoeMqfZ9SAJTwfuY/Qcn1r94bv2//4++6wc+/hAA/OYrN5ZFvCrSR7pDbW0718VU+oTtNeXb5APvKWRnh8oPS6GXNQoAEADBqNbaZ2w5DY/Olr2nI78VgpB5owBgYbQ8LWsA+N4P3/ef/e//5kMfPjNt1GpMrXMv7WYdzp5YTWpltvNGULKeeiElO3ktGLYOFjnDo8vJ81vzB4YRsm4vb6yFnsdyCUzgk8v+QV4d68d787ZoVORR45zF6Mas5hSlPg99Oi/l8WEQUnyjkksdUVm7O22MdVI7C2CcIQghikADZzj0WNUYTxBr3bSQg1S0jXEOKWMFJzvTZjkVQUC3DspA0HEm00gEgmzNG0LRtNG+oNoYbZ1HydaoSiMWB6xs9LSQSkInFNNaJQETjCQh19ZqDQ4ZBGiYiK1JM8llwMnJB4594XPPffd3PVEeW35tc//Yanemg0k+Ob2yJjjVztWlHvaEMpYBlIC0WfyNQ+gRglHRmGklpbKBT62xGCHk3KyQlNNOxBG4WSE9jMtK8ZgQgJhhjzHn2UmjRvPGZyQO2Jrvzwo1ztrRrIl9Zh0mBJWNDgQ51otfGx185PQqtFJblyThxx8Ptq6c+tBHHnjwgRPTUu2MJ6mHJ1mbhDjyiaD+5n6ZlyoMKCCkjHMI0pDlleYIDWOxO28GiWexC4QHgJFzrTUbQ6+WjmE0zZvVXnC84zXOamPrxihH5pUapmKUtZ4faGWuXhvHSSBbyoUsCoUQCjgNQxpwPAy9g3K/btrxNOsmfK1Di8o5RKSyxqLjPTGrderjeeMmlaIYtHVLEeMIRhIogb2ZrAUUUmEM89IhAErReoffGLdhQAXDxkBRG4LZJCv/8Pe+hAGyWUE84T+08YmT9x87sT7oWgHhwSx/4MzSzcvJzuYo6fcQshQhQdBCQDnyWdnoLGtL0IxiwDDPpLQOYahaQyjS2h1kbcJoN+IcAyaw1vVvHFSjUnV81NYsr2Uh0UpHxBSVynV8cX08M9YZ0I8+euq556+MdAvgjIVSmpDhkOOAsUqVqRcBgDSuVWCdbaSxzrWcBh7dn7cOoBcTwTBFCBDS1u1nrWCkNmbWmEZakcbj0fza+Svw4HEP4wuv7u3tT1vZbo+Km1e24ySIknC4kh77no88/dWv39idnTm2dDBXg45HCficjLMGY7Q5qpe7Qipb1Cb1SS1NxyPLMR8VrQLXi9hXt7J+DD5l51bS56/v+A5ttpoA+ITvz8uTqV8rFXvk5osX/x0lL45KaW0hTatk4JHrszIQ1Do3qbTPUVbb5dTrBXhcQsxxN/IJZr9yce8vnR1gh65OSoTgwjjTuEDYgnML/co7ofb5a7twhFu7mzfoSHPgDoNIGZt6YlI1HY8DwMmV7sGsAIC1XvLWEBwjWLQaFj8ShLpxUNQtAtQNvDdRerqB2M6qO/nAudX+7uzNF2KPklkji90K9qfPjKH+4iUAOHcsuHzra5G7zbh1AOO8AvR2dI/AY71DRn7i8TvTg4wSuFsx8K0ROadEaXOUL5TVbaP085uj3bJ5bV6Mb8Fvbe43Sv140icYXc+mcA90juiucoKDQxcm8Xp/4O75QCPV5sF8kQ/krdovGp+xl3Ymv7i132D7MNPjsgo445hZBHfNc/4cb4Nv53yAIBQz7nG2vpTuTfKIswUB+q36Yu8TFgFr6vFCqsTjq914nN/uqQFAUUlGyVsFvL61uLI5+t/+nz/6v3/rq8LjZ1aSJz544r/+G5949cL+P3jm4k8+cfaTj50CgM88e+mn//CrShv23sWO3nH4lVM8SMNBJ6xbOT/SHqUYT6t76qPdwZvygQXeJroNOW21GZVNINinHjn9/f/Lz/+9v/qdRd1ihN59PvDuo2dKcD/yB3Gw1ovv+KMNQm9eq0XNg2L88PqQYTLww73mW+ZFEAi+sD8bRn52OAzjEbLgSi2n0fyQRvlNJgMAICiZ3+4PSITQtGgA4Nf++KVFKkvBZVJLY3/r0l5WypNpcGYQLt2cfubKPnYwbdSNg8oA8jlOAwYAX9mcWAeXR/kT653XJpXH0G7WdgOCA4odGiQ+RQhhJzjJa80Yxg4p4zoRa7R1lSpqHQl1I5crHU9Zuz+tHEK9mC/F9CBTB5kSjPQ9Lo1lgCRxDkFeqihkvZAb5xyCYcdvpK5aiRw4gKxQGGPO6biWzjlGyaRU/YhFHh1l7VIiqsYkHlWOjDPJCenFDGMkGxVQxxIuCOqnQmrDEPE4nhS8EzVSeT4noUdinxkDp8+sP/PCrQfvH/7OF569/+zZlPnKNkBw1WoErhuzRtm8UqlHKUazUvYTgQnGCNrWKOUIRoSgaS4HHY+1+GAuBx2PUOsJUpSyk3jaQY/hgBPZ6hvj+vQKmtcm4lTH3GOYU9QaaLXmDEceOZhUyUpgjfPZgtGDKaEOEHZGSj3LtbRu/eT61avbp8+tCj+8uXVpZ6abVocVBaAOXByKulF5qax1nOG8MQCGEbi2VxGCBikvlauVAXCM4o3In9baWADkgoAaa0fjCjnrMdK0Zpw1jFLO0V6OmsZkeXvy1ErgmnPry7NKz0sTR0bQcJxJW6OlkMdp/4F073nOjKml0hTz0GOIgLGglL05bn0Pb8601pZhOD2IDlp5kGuPIsHRcswq6ZQyw0hU2uxM6jTkStn9Qmu14PEDwiT2CCPw+H0nfcruO3uiE+CXLu1tGRkPuhgbgsnBvPV9Mcvy5dX+lRvjs0HkHDJOC4q0sYKSRhpOERe8qExe6pvWUiDaOY5wILAxwDgBsByjqtUtQkq7GwclpyQNadsq7PS4hEFKA06K1u5n0mO8UrKUtp1B2O3dvLabh7iR1jqHAGzoJoVyzlIG1lhlbT/is0oRhJYSNs31rGylthSj0KOYIIJd3hhKwEcoDVldGws4EIxgw4nDCL7whRe/8pWLQeSfPLVy8r6TV3d3P/nQ6eP/8b/HkMtqnUTaarq9u1xVpc+XF+q3vkeqtnWAKmmVtrvTNgpo2ZiqMdK4fdc2znY4mdS6lRIBSGMpR4HgRSs9Bh7Fa4l3c1YjwJcPsk+cGWLBbtzY/kRHdH3KMbXW7ebNVOrNWaOtExR3PEYwnOlG81rdnNSRz7YyORj2G6uSgHBOHl6Pf/qFa5Sg86YImR4K71MIIQDrHELIAVy6efD0i9eqRl3fmWysdAFgK29W4tfD0Ds1fgeQeHxStSe6jiB0crV3cFgj74be9iRb6725ynNnX+NcGvtF1UY+ZzlWbxyZO7eU7Ob1o6u3CfG9yAeASVH33hAuk40kOHcqqeuln/qHv3zxxlYSeat6/an+8Ds+cN8HTgweXu+f3xp//tVbv/T01+HeCD0+yapFShALVh8WIsVbNHkWCVLyloicM5pXzbxszl/bffjUyvlru03eXt4Zu2QyXfa+VNV/99Tq2Sj4k4vXF/5OhX47/tLizrhqYvF6PHY7H7h3f2A0L7cOZgvvgtnu5DPT4qv/4nMPL3e+++ywx6Ct8K1JOatbhP4MUOHfB3w75wMA9niUAoCzroNwN/QWQyr+t9QS+B0hKJk3ai2BnWnuAOZls+B2l1XLKG7edZD6jeGxM6t/8/s/9P0ffaAT+b95/sqp1RQA/srHHvq1mwf/4Xc9sXiOF3mB4PIbygfQ4fZecaeg9GBeDjoRHFL9Frgzifv2MO+ih3AUi5VuXLWNMr/+7MWtcfbrz1zIytbjbEiDl6f7j3TfbAD5TcJj1DoHDk4ems8LSjxKxOHJPLXcabV5e7OF9xq1Bx5b2J8BQCLYflEPI58TuhgjXu6E87KF937Yu2ItCRbKGEUjnXPzqhln1T//ra/MDgmj3LpfO7/jrGMEpz7DCM0aGQl6da9UYD5yovfV7fkolwkjjkA/FK8dFIDg4qg4Mwiv7BVc4J1cilJZQA5BxG0nFLO8rQHVjSaCBT5hFE0LVTjACDYnDefkIG/LWlOKA49UtSwJIQQJgilBs0rWyviMVAuXMYqsceNcYgx5ZSgGTBGnWFvYm7bGGC6oNBYBmlZacFs2ZsFNJwQaaVpjARACpA1y1owzN0iFdghT5APNlQILVrsGGant8YE/LnNGcSTorFRlYwSGtN/d2dzhbXF8bWVvNFpbHlze3BumS92IGISVdp2ABwz7jFhntye1UnbQ8TnHSruyVss9v2oMwmhn1lptEEBeyW7CEYBgOMuaotK44189KKwFBDAJmHEud7A3bqKAZIVJA1y2thtzQtCkUONcSWl6Kd8ZN40ywzi8upcvc1eD1saBgyBNzz9/UX36Aw4x42B7dx5G3jirldRSOUyQA+QJ0ig5nbfLfZ84zDFe6QVzpfNGU0ammYx8VtdqyyLOkDYu8ciVraJpjDJua7cUgp5aDlfSdDdXAK5sNWP4+Fqs8qWt3XG0PIh8ji3uRFxpGghLKRpVKvLwoxvLl7Lm4vWdJx86VUnbSJM32gGAA+ucMsg4BM6lMZvJhgChBElrnQVlLCeokWCdy2q11vcDjo2zo0xpi0IMFtByh81zVbdw+thgNCtObXRAu09/PD2/PR4X9UOdLiNy0OFNayKPDgbdLKvSgGNnPcEdMoTgrNLGgFSGUywYEIwaaXhAnUKc4bo0jGJBkAUcCLqft0o7jEBpizE+mLfaABahzKYj1K1aSxAiGAUC+5xZp7pRlPQIwQgA9sezpV5iHLLWEYJ8JmY1GnR1kVNBESO4bA3KVauhFzHB0d6sLVvtCY7Arff4rNCjsl1ORGZ0GmBAaFrIuXGDYffs2bV0deXERtcjLmvs5nR6YMz9HIO1SzEfVa1s7OmNpfGszCptnfM82ih1oufXxjkrvUjkjalbFwrCKZ6WihLcSIc86EdsXhiEQRmlrOWEAKDrsxqAbGYtIOjF3qpwlVQnltOvPX+1aNXxxEMAz+/meaOts4NE3NeLpo26Pql6Pt/JmlEpi1YbcH2fPvTI6X919eZv7h5cVVXo0EfjaFzrH1ofWKG//urOZ5+7sjOaj2bll87fGM3KRqq8apfS8Nru7Xzg+rT64FrnrQvg/cvdC9NyVDUYIe0cAljqhNd3JidXe93Q25kVb80H7oAgFHkcECoa6XO6P3mDouhS6O0coeMDwEonurwz/ui5jQc6Sxdmowc7Sx4jFtx9w/TXP3v1zHr/v/uxT//FD54ruL4v6WN8e3V/eL1//taOuYeezwKhx8fzcpEPHO0PtPeY4sveol7KKHnu0tY//qUv/Nzv3VYCzaXKRefjZ5Yul9UnfP90HFw+mA7ju+gCvQmd+E4+0MZH4rEF11ccuXq+CV+9eHN/WrzJu+DrGF954NRS4v/c05fLWkrzp1Tw/fbDn2pk/KcM59CCuhN6bGt/DgCh4ADgsTdQyr4lMdPbgGJctNIB7MwKglFWNYs52qpRgtH6fVY6SkJv2InWltJJ2XiUn0rTfVkgBJ86s/rF63vfcXIZABbCXu/TJINgdD8rh91FPvD6h/XYu+ILvdd8IORs3rSv7E7buvk3X7tZb2f/7Ne//CN/4dG6kVUjI6vfcWLhvYIiIASHPu+nt9fBWLBW2/hQnyHxxYs3997Gi/kb+AsMPD4/FFZLPDYqm2Hk+4w25vYqL435Bg57V3CCpbHGurxqpTLYws/+ytM/8unHv3ZpCwAEY7/z6h7G8NSx3ku784hTB7CTNQ4AYxBAXh0VGNxjq8mF/WIj8V47KBGG491w3CgO1gL4gjalVBZOLgUOmaJ187L1BEGAWoV6MeMUitYZCwijBWMnFMRZV2EIPGKsK6VRWR14NPLZQiklDVnWmNQjgIgDRwmZl8oZCH0sKJHaYIwBof2yTWKOABGCIk6zWgtG8koHAsvW9CPBKWbcpj4WPicAVasjQfem9VLiFYX0Qty21lpzMNerS4Ih0Mb2Y4YtsxagklltELiwE+8+e+HBDz26MRkdjCcn1vo8iIktlImL2q73/WnVTuYto2jY8SPBilrd2i8xRoxiTPD+rKUULyViNG8kRsbaotGNspggZ53SBijWzjqHMAaM4NpuiTECBNa6qjEYw35mrLHaOEKQVGYvazf6ngF8ejXan9W7BWt0GyTLspwfW+lZg28q45zLZ4Uv6PKgP5pOgmCtqEgnMc0MY+cAQV5KjBEmeG9ceZz0uqLUph+zokKzUlGMikatdAUmEBI6qZW04Jw7ux6Dswe5qiqVtQYYYQRCn/YTVrRWGTh+fPj8Vy489bEHslbHiTDQhozRxCMIPI4q6TBGFuDia7dGuV6Lca1d4DFjHMJOW0AOKII0JNNcTQvXiVjqkf3cLsVUW9iZNILhtQ73BCqlS3yWtWoQM22c79HEY6O87SVcIOR0+sLF60Vt1lNeatfxvQvbI6ktYyigRCsLzvWGvVdfueasGyYiV8ijMKtV3RjnwOO41BAQOGjBWAAEyx2eVyb1WRxRa522rqxNwKnhrm40pVhwQgGXrU4F1y2JPRL4vFU6rw1CaCkMDsoaY1Yysn5iZba/N5/PHzs33J5KBSRmblQrj9FGNoywUaFnpfIYJpRYqYtGO4elcq22ax3shXh71sYenZeaY9yJaCNdIBAjJPHcI4+dHo+ztTg0Bg5Kwzlej4MLWam0mWRqrc9Xu2x3RNIkuvDa1lqHaYeNtUrjrNGE4kGHO4eKRi8nbFabTsRb4wKBi1LX1g18XDN8OxNwyOMQeFxr0wm8RuvYJ6vLvWdu7J2xbGZRkVeTQn25nBCMCKE+xT7n41Jt0rpQxjoYVTL2SC9gxoGxcFDKPFfptP5wbf7W6fWnX7r+7KXrL722+/nflDYwHcSP9XsPn1zeGKR//8f/4qOnV6/cGj1z4cYfPHt5MUJwc/a6B9mb8IHjK1/dnhwUNQKgCDmAYSd6bWdyYrXXjfztSf7B03fd73VEvpjntRfwcdkcvQ6c6SWfubT5o3Bq8aOx7qFjg8t7k4+e21g84gAwQgRhj9If/c7HLu5OVla7G8POxdnoTjKwwHIaAkAj9b3KnYHHJ/nruYeydqHPcy8Z7ruqjDx+du0//8GnvvOxU4v+wBdfuflP//j5B7pBBnYR1vN3cgBQ2hCMZnm9SAkmVRsdETJa5AOtNo1UwVs+SCv1I6fX/su/+tRR74L/9C9/9NHjw7Xl3r998fJyL7y1Nf2FP34R/hzfEL6d8wE4ZPPHobfQhj/kC/2pjpgIivNWIYCDedlIXdRyYQJQN1JwWr0PWp9HwShZW0oAoBd6zoEgzAGmGKc+35wXAMsAsBTfzgfe4Vh3w9t0BhbwGD3IyoWmcna0P0CJfBf6QvbeZfW7UokiwV7cmYyn7XrMfuD+wT+7mfzIdz/+87/91f5S9Op4tH6u51NR69srHUJIOfN6a/YeeHtOlKDUWocQuuMcedvN93CZ64Z++a0e1w4Enx+6USaCH5Q1QLfUSkoDAPvz0lj7LUkGACDk7OWb+398dce16NXt0f/0C5/7F3/vR3XVhp0AAF45yDo++/dPro6q9uJ+jgnaL5vGWoxc0aoffGTthb1cWXtrWnsYXdovnHMeJrvzphvxvWlDOdbGfOxY74vXxspZrcGjuCG4qE0jTRLQqrGWY4KBM9yJeN2aTsTzSmW1Usp6jDTa+YLltUxDmlcaI+QLWtY6DVjA2Oa46CSskToRxAKMsrYhdqkjlDSjUglBQ4/WrREEhx4VHCsDPsN5ZXoxraXxPRpRmNZKYNJJhd+SaS4ZIdOi9XuBANcqHXo08a2WJg7ZpJA+p5FfMcI7EW8mNThgwnfOroRwfGnjn/ziK08++mCHB7t527G+MW5v3igNUrtGmcDTJ5bDWaUOpo0BF3gEIyhrE3ok8ikgMckkQsQ6AORin8Uh1drMMtVPhDYuazTBIBhZGA85hDACzghCCBMQDCcBmxeyqDSyUEodh7wbiWP9+Llbu3FIZw1BgKZ5c//x8MaJla9+/eYDD58Kg2A8nW8q8zc/8SCgVregtDXg2lr5PitbIyiKIzGat92YUQK9hBaNGc1kGvJamroxGz0fLBADHqMOXKPsIOW1IEWtScg9j4FzRWN6MRvnOu1F2pjdSbsyTCjFyPgta6XmoaAUo5DD1LmAkOHpDeT0QYE2UjGp9VLMtIFamlbbTshmpQo93EhXS6eNIRhtTRoASH1WKbM/VQaZxKdaaaVcXutOyDgl29N2tSfKRoEgjoajWRF5uDR2XGqfsbyRea2TGJrGlNKknRTNs9FoHvt0pnTKxE7WtsoCQBowX9BW6iigpTF167B1xKFBwqrWMGQVBiltEtBJpVKfd302rZQxppSWElxbjMFNazNr6pCTbsj257IXerOqwTH41D7y0ImL569f29z52AdOC4KLRncEohK1Usch3p2rOGQBx/2EjzIZCCSNLSXyODIOZY1ptWUUF42JPAoIpLaCEYyBYscF6/bil1+69sgHMUFutSsIcQf7zhm3P5ODmDFMa1kPUi+r/PG8MM4JBg4Iq3VRW0osZxgAM8H2Mh15+GDWxD7tMhoQIrVGCKc+yhvwqMd5qypYCryTnaQX0IMKGWZXe/HuON/rGwCUBN7HB2Jb4iiggJzVGGEXNoQSgBaOd3xGcMenxrpau77PKIIPDP1f+dJzv/Crf/yZz3zlUx84e26tzzup5uyHP7hyMKs+efJYJw4WAWtrzJljS/cdHxjjZnndSL1TtCfSu18KxkV1bTTD+Hb7FwE8dmZ1ZzQ3zt2/ujQu3lDgvysin0/z6r5uRDEal3XsCUIQABzvRpvzEgFeYcEdCwAAIABJREFUWJJdzsary8kLr+0+PlkGAIoJAuAE10oHjHoEn1vt3YtIM0zDgLN51fg8uusTQo9PDh1/b+tDtLc1ee76/PndhDt9wQLBFvT9h0+tvLC1zxlZ0C4W1jcLwVBt7bVidl/ae+sRpNKUkFlxOx/IWrkwD739W2MBQGqT1a3P3xyn5VXbT4JBJ1pcaj/y2KlzB9NPf/j+M/1kZ14M0+DkUjSk/Fe/hL9VtbA/a/j2J1kFVHiCLLjO6f8X+YBH6cIPeHN7ygq10o2Od2MAKGrpMfp+eIEdBWdkpX+7mxkdSinDoU7/4n4/9gGgvVt4/c0j4PQgKxcDWLMj8wMeo9+kQdgdvv6bkB4b/oWH1j5ycvj48eFqL+51op/40ace2him6NBihorFzSOcoXegSLl3+idZrOyC0QWpEQASweEwKwCATui/zbf8ja1c3fh2igsAp7rxrJEAEHlsZ1YsOlEeo/V7tHYGeF3kDgCkVY2RjZGhwFen85/87ef+r6/dHGrSfeLEL27v/eO9veyxjZ8bT/7da+OHhnHEScCJQ66Uer+QCNA4k2eXYozQbtZEgp5dCneyRhu73vE1AiowOGikSQTFBO9WtcdJRKkDOymVs5CVklLMKO6lbFy2ZaNCj84KxSkuax35tBNyj5O8MoIgoy1nZFbptSRQDhyGXsSrVktjGCXgEFgYF9JaZ50rKpUV7azUDhwlKCs1wuBxgggazaXUdpiKjb4fhjzw8MG8cYCDgHVi0bTGE3TY8RByqU+VNkrbaWX2pm0Uct9jgLB1YI1TFqZFZawTjAACQtDG8dWr1w9uHjQbq4MrN3YHCcuqwlhY7XvauNCnlGBGSBoQShCnsNb3wNqq1eNZ07SqFzMPQ+izwCe+hxmBla6PMRSlooSsLXmYo3PH4vvWQ0axAZtEzIFLI7o+CAgjAFCWuqj01n6dVZoxPK+kc7Zpzc6kEpjNyhKsttbllWqkvTmS6aDXFEUjTa+T5GXxXfedZAQsQOiTVluKUBQJRgmnCGEktfUEvbVbXrg6rxpbtXYpFVWrZ7kOA1ZLSzHszhuL3O5cYYp9j673gpV+MMlbikFaEJTUrU18Wim3urG8vzOmBHmC+AxHHg19Mi/lvFZa2+Hy4CMr6SeeuH+yeWMjZQiBBdQa5xBEPgZAjXK9kFnjfEFCjqRxe7OGYdz1OSDwGYkDgjG2ALu5nJRaarc7qse5tM7uz1qK8azQStk0Ci/cGAEgZ13dWo+xed0Wc5brcjXlcSictb1utLU1mczVtVHRjdhqGqQBIwS0s6nPA4ZDQY73xXIixuXCNsNZQBRI25pJpdYTj2FHKBIYlY2hBEttjbUEoYATRnA/4Yyg2CdpICZVHXu01mR9o++s296fOQ2hjwhG/Yhwijd6AiPUjSkCCH0aErTaEasdLxCkE+HVhAuCjNLrCRUUDVIWR0RQ1AuIL0BraxwCC+vDdD4rFhz93Uxqi5Z6iWeUNm5nJrcmFcZoa9SspMI5uHCryCtbNLoXUO1sKQ2hILWNGcLYph451hU+w4qhQunAIwThvbmyzjXK7RWth4ix6OlrmweVQghNMj2q8fWd8amO9+Cx5WPDtJyXnJEznehsJ9qvmtXQ8xmelurcUiiN++Ba52w/ujqtO5x895ml7zu3vN/Y5U789//29z79s3/nqU89uX7uxH1n10+udi0hp5a622VJMJLGNsYKQghC2rluEpy/sbcYCz4qM3oUAWc+JbeOTPr2kmCSVRShwON5I48um3cFRjDJawDYy6vrVQ0AF2ajC7PR527cxBj+6Oati7PRS5O9k3H61z/44PY4ezAdPNpbXuzrM6qsjQRb2MPfa9B2kQ9kdXuvd+ILdqc/sChQlrc1Ot9DfwCOWAfA4cBDfKT+tZBjepuzIbWhBM8OPWHzVg2PDEssipLSmHnVBm/JB7Kq8QW7U3c700/ubKP/l703jbUkPc/D3m//ajv7PXfpfXqWnoWzkMNlZFERbZE0TUmRYhiQJSCKrcQy8iMIAgdxkh+GEzlyAthIAiuBEECLY1g2rUjR4oiUFIr7UOSQw9l61l7v7buerfaqb82P033nzkx3T89wKCAmHzQOTtftqq5z7jlV3/O+7/M8ggOAYOTk6CYTXz/AHeLffT4AACvd+GBRFHW75NYR53BrWvyeY70TrkbBM1vT33t1r4jF737p+V/+rT/70jMXj427COHie+D9fxSMkkHv+hd43Ann9Y0hE8EOJwiX/YF3rWRAN/v+P9QfPz/ft86dWumlVbs/LwAge2Psw21GaL4bdIvqW0UFAONulITcSPfT738wDoQDz+8gEfmdIhEir1pK8c40X26RjDCCDpshgzi4lTP0uyMDAvNuIg8thu5f7R+Gy9TGVUrvp2Vr7PyNOdxvC3/EeQMAOGaScEl4TwSgyT/41GP/5NOPBhud//aJh/7pDz3yqx955LHMfJj2zw2jk90w0wYBWAezUl2cFlvzqtH20WPd12blQNKYkm9cWwiGTwyiQcgfXe8WlT7IGmf8olSSESko52S/bJUFZ11WKYIQBg8AyIE2rtF2kuu2NWmla+3CgMaSeA9xQGrlKu28daGkigAGj6ybFQp7pLRbH4imtYSRYUfkjelEfK0vm9Yp59rWSE4YRap2gkLZmI2RBO+TkCUBnedaO+iEzDobMbI/bzhFnCBt3agfSMHmhZpVmiLnnDPW7adtUZuVrowC6ryb5SavNGfEWjDWJ8P+5tbB8RX58D3HVZ32ukk3DOMAZoUSnBjr4oBgBNaiRquqtaEggaDdgIYhiwI6z9va+YAgpT3yiHEMGA0THgpaN2Zn3qa5bhqHEO4ENJZMaxcIqrTzAHFAPECvw1f6UnA87Mm1YcQ4LWq3KNq80AfTKuLiwk6pIUgXqeBUGyc7nZ2t/UHMT24Mm7pl3GmDrLHeIw9ACBr3pTbGGFfVZjavr27nVWM9JjsH9SDi2jpGUBSxsrEII2fQKGGBpP2YJQF1HlrvCMWjnsTgOLl+AUkrs7WdhkmnSLNOyCKOa221ccyR011GPPYeJRSdPTY4f3DwxfNb0wZVykpG0srWrdmeK6V9RKFWRntUa5/XjhM4NZJxSEOJhxEZxKQyPhFUOZjltlZGGW+dB4BexBnBRWOVcRjj42ujoigIQv2IWu/HSVRrVSsTMrw5U02jjYeTJ8fz2SIKEKV4c9Iobw5ynVbGG5c1ylioG91av7louhHdS40keJ6bojWNdpKjStvdTF/ZrwplKQaEveQYAeKdnqkzbVyjXWt8P+HDKCxbbZw7MeIbG0MAvz9La+OVBmPNJDcUQaE8I6hVrhcRZbxGIAhsL9p5YacLc1CYMKB56wxg7WBRGmNgPzeTwigN81Jbb/fSZr8GQonRSgY4YDQtjRDhIIk60hOMWgNb+4gHGggedaOeaBGyA4E5x5EgoWR5YWKJk5AkgkwLc2naXJ2000U7CPlKFOSNW0uot9h4RwjCGFZ74daiuLKo94s2ZGRt1Emz4t872QVEV9aG/+qpy1bZz76y9/Wr82mhn9lLY8ZGMX/xIKcYpUo/eXnWGCcCcrIXRpJ84sywNuayo5V1f/3+9Q8f79bGhoy9sNvwCCZ5jQAoRpJg47xxniJ0fKV7ZXf+h69NbtUcAICQ04CS+ZE79fGV3rMXdgBgJQlf2Z64Gwk59/VGLy8mbz1CHIhrB+le2zzl69+6dO0fPfvyt2aNA57XsFe0u1NNtbivM7qwm/3ml19+ZWdO3zh1wzFOOE0CDjez/bn+X0geCnbTov4Sp9b65Y0SUtZo76FoNXhQ1uG3OPU5gPIWk8xx8Pp0/iAKAGB5Ytf5wC3SDA6htGUUH6YIP7s7e3C1//pPraUYXe8PCAZvLPnlVRtwtj5Mln+9MM1Wb3CJRHKMkOT01EoXADzAsuUCP8A7wfcFHyAYK2t/66mXEcaS06W/kL6tvvM9BEbw5Uu7n/n2hU+cW+0w/NM/8tBPffTB3/3qc//wVz7rnVuGA3zvIBjdmVzXMDFCDr/kHckP84lDwTklt0k3fNcgGBOCtbHPXdpdbklvXJJuGqD7nuC+ld4nVvs71tIujnr8Y3ed4ZTctT6cFZV6i+Lq6PjQuwPB6P958XJWtYf9AQAIGM1vvNX9KCjfean+NkAI7lof1q3enqTbk/T8S1u/8c2Xv3Zpe5KVz7y89fLlvYODrFXmNnbUb8VbmYkkvLEKANY7YWqakJO/8ZEH1nvxX3v0HgDYTyvSGwL4R1dijwAAqsYSgKzVm1ndGHtmGBXKvnRQ7JXqSlpHAaEE/fh9q5+8ZzzJG+yh02GEQC9gzvi8NtZZ573RDgEMEgEIOMNKu51FSxCqNXhjrQfJMCW+qLUDBAic93HIKEadRMSCztK6n/Ao4AFH/Y7ohDQrtbVetaaodTdiCCAJsEOoyNsoFlVtG2U5R86Ddz6tbBwy43ytjfNea08Jss7vpi0TaBByaz1GSGLSGGesrxvdi7jk+Nq0zhszy9Xeot3cbw4WOuCAwFOKCHgp6KkzG1cvXduZNvecWHn16m5ITb8z3F9kUrCAEaUdo1hbd5A1AePDmJfaRgEtWuucjwJ2MG+3DyplfcBJN+Zau7xUi0JXrQ0EHXVkyPA0a9JKj+KAYWSdDznRxs2yFjlPMRp0RCekq4OAYjRN67QyPYlUawJBez3RDwLttWq1ca5ShnPS60aEkp39rKo0Y9Q7MM4TkBqqXsK9B+f8qB8ydn2MmRK8thJxijbGoQffCVgv4v2QhCGdl4oSWJSWYUQpAu+NcY2y3jmEEGfkYNYs0spbxwkijPZG/d1L2/PUtLXvR0JgNqnaFtNOTAYSW9x8Zpa9sJtd3ZnU2gmKJ7kaRDSrLUb42IA5AGN90zoKvhvjQcRbixhGB5malLrSLqu0MrA/b+KQRJwgBONhEAtSKwvguxEDgJND1u2EeVlnlakahxDuBXJeNbUDznAvJPPaUwzjcW9vP12ULpY0CYjSLuRofSABe0Jw0ZgbSnRvDYx6HBNirJ9kLbuuCoZaGWNdwDEnBHuslZMcrCeN8R2JCUacAcYoqyrn3aSory1UWdv1YyMAqMqiF1sgOjWt5E0oG0khiS14jMC31mkH2niMwXqPCUwXrXO+rDX2Xlm3Pa2KxhxkZnvW1sojQMMO78c8ioPZJCsb68FXrQkFRgT20mbY4dY6wfEoZmXrNlb6i7RigHZzsz1TK6FMBBKCbi9Uo1wnIJ0AWeswcqFEVw6q7azuBqT1UCptjEcIYYIposa5gCLKiCB4rR9pa/PWPnEsSSSJwAJFkhILXhAUEbqd11lj08rkrfncK/vTWn/4eO9jp0ZVayaF+s60WjPmD154+V8/v7OTN9p6SQgAYEDG+NZaAFiufSlGFCPj/Eo/nqaVB7QSC3uLhnPImaRkfkRfe8RyNJkX9TKP7DoruJkL9qm1Qdm0SLvHUfAfHF/7z+8786Eo+h/+/MX/45XNZw8W/+Rzz/7NX/vC4//T7/3ib/zZ//zH37nYvlkOSzCOBVsygbfa/hwiEix9iwj4EATjQ0+LrFWAIG31flGVRgO4nSpd5hwDQOs0BrhVDasbvU6cbvQHBLyxP3AbtNpQQg6HXffy+uj7lWlVKNVaMy3KWHLljTqS+lw1SnB62B+4MMsevuHhkbdtHNGzncHWNFvpfC+EkN8X+HdcP7CEFGyZSHWQllWrs7oNOTXW/cVEVSjjdovm0w+firxf+ZqstcIc/8LPPPHIg8dfe23/XVfl7xABpzvT/K61FQBgGFfKBEDgen/g9W9aIkX1nq5ZDyEZPb+7r4LrUq1F03YDDgCNsda/G0rmnQdyu6p6yMgDK71N1KzxhGuCvAcAyen5q7u32eumuJP6/dIJ4cRaf5q+PkgaHuEDS8P+xVvMVe/k4LdC0ag/f/7qL/3m/xtKVnv/Ysj+3q/8gQzh1ZcP/tdf/zzC6LEfeXRe3+lH6/Zn0g9FIthqEgLAJx85+9nvvPrJR+/55k7+vgdOzS9f/XoXn1zpdDh9ucyN89fS5rX90oMDgM9fPOgHNGt0XtsPnR69uJ/fM4xLbR471TuZhV++POGcCEEowXuLOpA0LVUo2bDLa+0IRhh8EvJG27K1SUCqRmMEi0ILgaeZ7oQEAfRDpp3nXWGNLVsNGDnwi6JFAISasjHGOIJIqWw/opTiadbWCndCqg2rSi0F7oYMYaScDyRptS9qXWMcCjpI2DTTgHxXsFLZvDWDWCjjGEFXJ6W1Pon4waxeZ7ZqnaC41UYwWtW6bKywqB/TpsHGuF4ilHPKwOkz6zqdvaR7pzZWv/rczoljw1ov77g+5IRTDIC08XtZM4wl8mYUs8m89oCy2gCC1aFstCMEMQb9rtibVC0lo55AGKWFblt9dj3ZX6itWekRxAEta9uP+LRQaaEIwUlElUYHiyavjbdOULxxOqkNdCi+dC0bJeG8qntxhDRsDIRGtCPQ6dNrri4gCU5urL5ycafeWI8CHEo8KzUApPuVFNgYjzHqdCSRhjK00g8xxoJiDD7VDiPwDoIAIetb57Cj2Pm0tP2E5Y1LJE5LE4dESpYtml3VdhM27oi+ZM8wVtQFkEgCblojpREUegG6nGrd4I9g+m/6IaH0wpXN/r3HOIZZoRnFGEGpbNHYTkhjj7D3RePrVh3ryc1FCwAUI2td2diQGoRIq10kieS4akxmgDNsLFBqx32hnT++2v/8k88RDGXrTvR5JDuffX7y+OkN75VzEHNc2UDE7vK3Lzzx0YcbZRGCojUdSbWxyKHWWox8PyKYkVPDwDhHAMB7ypBtgXMEAGlprHOS4kgSYz1C0GoQCE1azQhlnDTK1K1b75LaWMEYRT6WShL84SdO/+5XXtza2Rv1zkoXIoIS7iuDdkvbi03V2Er5SADCEAuyk7a9kB2kimCMkJ+XxnoIOWm8zVuzlnBPMEUeEVy1RlB86tQqtFXIidY6CRnGKJTCODtJFWc4kegg15RQIYMru2k8XB3FnBM0bxUgCBguCDhwpQLnr2upq8qcXgkXjTnIVNrYRrmytaFEq4kMCH7q8lUukW9dTZD3rtW2zAox6nd70bMX9ijCfckybT1AP2Rc47Q1Gz2ZtqZVthfwrXl9ZVY1xg1CHlIUSa48rAToi5enaWPSVv+NBzdOdIIXZvvKmcrYmL2+5qEYnRz3nPc/976NpUPo0SSyo5CUzI70Bw4tR49GkgVUVLcoLZ07Of78t1/7ytMXncT7l/b/fOv8l5+7/NTLm0DJdJQMLWy+tv3xj9z/X/zsx4qm/edffPpNuxOMYs6WS+1bBfcCgGT0NhHFktPzl/eWz7NW7RfNc3uLrxa5xWitG/ylE8f4spruQTkNt54X6savn8AwCeGN/YFb+QIdolGGU7I0w7gwzRpjv37l4CcePPn8LL1Ypheypi3MWt4A4EAwjujRO1PZKHHk1zer2u6NodxcqYgzhvHlg8UP+MC7xvcHH+BUaau00daGgmljCmX+wvoDvX68uzf7zas7APBCEP38oJdZ/dHBCXgfVIvWvqdjS4fJi4cIJNudXu8PSEYORcNHHccAIAn4d6NkuOnI0BKdQEzz6urV6bIpfzhFU2sNAI3Vb+v2s5QUW2Px23kXLBEweqoXf0wNjHXGuM1p9mAo+0lQVO/+Bd4GAafHu3HejY7O60tGDvnArKgBYF40cORK/t2QAQAYdoJvvHj17//cX/nZjz/2fz/54n//jfOfOL2WJahJro0VKopiLMw8y9/uMAB3diYBo8vO7OkT/a+9du3+E2uXFvUxiV5Ka0TpTl6njEwbBQR94dKBdS6UrPZWUrI5qwchP7fRefR479md9ItXJ5LjgeRfvzQ3xo+7DDDMy5Yz0iiHPAoYbrS2BgNChOBp1hgHSUiNdxgQIPAeqdYDBk5xJ2SU07Y1rdLIo6Iw3kMsaCCodb7RjiDEJUtLPe5wRsheXiOMjHEL4xEAo4hS3BoXC1qUJu6JMKYY87a1eWU4J1FACOBSmaq13YAyjJYBT7UyBKNFoTxGxkFea4wwQnCwaDohHyS8arVDOo7k9sRQioeJsNYMxqNXX9t+6IOjc/fec+HyBU7WN3usWzU9zlb7gUMgGOoErCxNJIykKFcuDjjneF6aXke2BpKA9AKSaxdTMifYODDGSU7yvFlfCQvt1oei3NFxyPJKO++KFnoR2zPOWLe5XVBJCEKhoILi1YFkGAY9npcmDlnC2WuT6QMbg3KxLODbTEN/ZbCzMzl7zzEZhHmRxyF1zkvBGLZ5Y6TA2noARBGazFtGoDQgmbEOScqy1rfGdyRulClr1w/IOBEG/HRa93qibOypvrQORYzkjXHatQC6VmmjrPVdXI9Wuhde23vk4ZOMSByIta69NqfzGnHCDory+Gj8sXn5/LGTL1/evevExiihDiFlfKv8NDODmHqArNTKuiRgQuJJoeIAac0qbbNCc4qMQ867gGGKcaNsN2KAYFZYgvyi1Nr4iJM4ThZ5qTwgjGptu1KAh7xuGfNppY1HgtBOTKbTVBCotV/ryoO8rYzzytfahZy12hHkkLdbuRIElEUYwSBiglnv4CA1kqJ7VqJFZXqSg4bK+L4kAUEd7o3zDZhhIA2pLrf5HrIpgS+dvzK6Gjx2ZhwMN9jsmWdf219ZP8UIDgVWhigDzrnWuIBhgmGSae89xkhQ3BoTcEYwMAplZQSnlbIYo9WeCBney3SDPEVOW7ea8DASVVkH1Ike30818lDUjQIzTLpFbZR2/Q7MchPH0UuXrn2Eo0VtvHWMYU6xp4hiPMttwDCnEAqirA8Dvpc1aWm6ERmETAgyL4xqaRkU11Lfj4KDrD437h0UumzdQw+d/d+/+vLZ0ydKwJN5royZtSarLSD07WtpLEgSMIwQATgxDCNGJCGzRilvY0HOH+QijjUm39guJCPOuROdAAEY7ypjwQMFKLQ5SgnKRg2SMM2rSDAAoPjmrCCgBAHs5NX6DTPNlRuWo29qw+Kb7f6jj5392f/uX6yPe2wY/vhDZ+9dG/zSL3xyadHz59vT/+WbL/3R3/30MgvoyVc2Hzg2etPNlN6wEloqhm9FCQLObrWIB4BOJKdZ+S//5Omf/fhjel7+8bx46uL5EOB/Cw8aayR5piPZyUF8oh8/cXLw44+d3VmU7c0Mwbtv0Q8s1+jLGIH27TSBdau1tZQQAHj+lWuvTNK/9VtfAYCH7xv/xw8d/+HB6Mn9a76109oeH3TfFDla1EoeMR26PM9/5Mz68nneqoRzANiaZg+fWn3bO9oPcFN8X/ABzoi2tqpVXreNMlmtKEatcXeyEvpu0BjlwcfelpP0p9bO/Ph9J77wmS/9XjX/aOf08h/Egp+//I6L1rfBMo/96Is6tdqf3nAVkIwefl074vV5IQBIAn6b0sJ3g1jySweLz3/h+e7qEAD2y6o2MQAUrUKA4D1zwXkdGKGO4Oud+I/PX2EUb02zB0+M+0lwKMB9bxEwSijuh/Llq/uHG0NG8xueQouy3pqmi6oO37sgvLVhJ5TXHU7vuWfjhSfPR1vzB9ajv/2X7/6bDz347Yvbf++ff25evr1+4A6/AvENadcHzx37lT98qr9+oivpKOECowu5m724e88wPtaRHzrRf34nXe8HVWutAWXtzzx6/Lm97JNnx4uyrbXdK9sTPLyWNdtZ7T1MM7XSk2VjtXVa2/VRXDa2G9Brs1Jbm9ceASYYGesHCSsJnpcaAXgEw5hFgRDMLEqdBLQb0mnWYkCdmFZKx5xFknhAZaOLWgecNMYv6qYj2LzUocAWICss43gUC+/cvNQEg0dgra+VFYQME7E3r7sxX1Q64KRVLhrS3bzlHnYLTQnW1ltnvfV1YwjG/ZjP8jYUNApZWelhLDg3s8wQjIYxwwzPS7tyfO3CyxfOrIEF/OKrKaXl2sy2TFUOI/CcEErwNFcA3hrvKOYU1kdhWbYUo1iSqtbGmG4iKEDa2OMr0dZBNcs16eBWO+dc09iI4OOj0HigCAQn27M6q7RtLaIIGBkmfNQRFjz2mDDvvL+4XVjjuwlflMZ57zzBLGibKoqTtPLHTm18/UtP3//YAxsrgy9fuswI3lgRjW9GA+GmjnM6DFnTmLIx3nplod+hi1xTgrxDDhBCvmhco1w/YYIRAbQ2upEsYtQaWzV20djGOGVcENKTCa1aW9fmYNE0NL7rzNq17elBajC1vZDsF3hDsF2lDuZqURi/dxBZ70J0YatqGmslzpRvDWhjWuX7CasaO+zyRvuA40Y7AjYrHAJECYx7fJIpT33iGOa+VTaWdH/WjAaCEjyM6f6iTSs9L1Qc0CQMyiw7sz4wzm/OmvVuspeWURh2IpbXphfwayX0evGlrdlw1GPgY0FjifYzTQEkQ9r4kJNFC52Aew+SeeWgG9FFY1vrMIJRRxLitXOTopUCpaXpUnRlYRrjW1S9NlcSE4bwQNBHer2kwV+YXfqhYysXdrPnrxyo4xvF9jzkSDtftSahUNS2G1PjdWOcsS7kdLUjDvI2YGg3VZFEBJz1SHsYxxSDm+e2bE1IeRKSrDKlcWtdPil1r5t869Vrr+yqu1aCQcQ8AAGcNa1gEAieVcY4r7QTQVBUTab8MKKSsda4Wa4JAcFpXuqQi1lp1vqyaQ0noLU/NpCCeIZxoczJQei9D7nn3KwmsiuxpLQhxWVo9lfiMi+lqL+zPy3SeqtoPSDJCcYOe1Ybi7XFHnUDflCpnJEA45CRudbf2k6Ndb3xcL538IHjvda4zUU9afQze+lvv1BWUJ0OxLxW653wKCX4jWeuYYx2Z/nJcQ8AjPMUo7f2ChjBHmBeteM4WG4Z95PLu3MuKEZwNJJsOTsEb2EFf+cnn1gbd9kg/LkP3M8YWW5/8MzaK1X10NoAbhTd//jZC594+Oxyn3O90UuLydlL0NWeAAAgAElEQVTOgGJcKD2gJOAsq9pb8YGTK93bTOHGAb+0PfvSdz73z37nK0vn/vKVnQagEPS+cyuvvTx9rVHfBhCc/psHzv6jf/t0UTfn925yxzzKB2ZFHR9W6FuVCP62LoVVo/bnxT/89c/9s9/5Su39MwyHr+4QhL4+yQ4uHKRliwEl8qVPPXLqntU3K4OzsgmOmJNmjT7UD2SVqpy2zi3K5qiB6Q/wjvB9wgeoNks+oACgbLRzXlmLbhiq3MmS6M7RWr084LLy3ZPBAyu9vmDDUB7vxx+1Yl1er4gnkaiaOx3quEOgN74iRonW11n+myw+jfWNtpIRAEgCcZvSwrvD9TeBs7JVYIFK6rwrlZVUAECOy1nZfC9U3ZKSK4s8JAQAzqwOlgnwy9D4t9v1DbjDD0bAqTKuG8ujDZaA0fLGJNjFvQXy+NWdySODjeWWOzzybbA+TJJQHF/pAsADo+4nh/HPP35vtwdbWyUl6GMPnv7Jx++9vUJjWYK6w9OIBNstqrtF98JevnLsJMbgPTy/l3fGvbMdFMXhOBGVtZ87v4cA1ntBUaiLi/p0V947ii+npfb+mWmOEVqPxE5Wn9/OOpzJDnEIOMZJSCdpKyWzzgmCNw9K7/14EE3TJg7wWkcsarO/UIBg2BEHi3atJ1ttZlkNQFY6bFGaTiCSgM0z3WibV6akljLUi0VRu05Ei8qEgiBEqtasD+TmtEokDSSplW21GSSy0VZy1ih/kJZrfZm1uhuyIKCCYvCgjMMEZZUtGx0goq0zznvr+wnPKj2r7KkBn1Y2Dtkw4XVrOyGb5e0aFisDLXFcuxohd2yFLgqzuipf29Kn17vjwepkUq/IzqTKuzyY53rYw1KQSjmC0N68GfV4HPCAE/BQNTavzCDhaa0vXys8QoOuAIzu2ohfvJpOixZhNFm0J1bDSMKl/babMCFpmmutvbKeB5RR3Co7z1QSskWhwftezDcXdQS+pJgghADWknhRlgMplbIR+NZYY9zJMxuzvYO77lpDCFGsGZVNJWqdGYu9dulBxQjS1gNALCljmFk36speRIraTQvFERCCQkEWlRUR3kuVDGhaKcKIaYx1CCGIJaEUFbVlhDQUAkZWB2ETrH31K89tnFzjtvzOlf2Dg1lbqayom9YYbZNOOBon+1UT6YoTC4jPK73S4ZLLvNRV6xa57sRMWaetZwg8QdY6SpFzaJ7rtZ6oWjtMeK4MxbhoLWNIEKcYWO8DQRKEssYqbTdWh5d3ZlHSGccklpximjaN133FaoI5IEAAqxuj7Z3Z8fWR9ZhjYADHurJUFiGflR4B4hi4wPNCEUJWO3hn1qSlTgQhBFW1rhA4gFI5D4RjlCqLMSbIRr7zsK2iJM4bNA5FN8B5R/QjMeiIjX7Sx/4zX/vO7PSgbh1grLR1ITEeOY+M9RHHo0RUjdldNKMO5RgXreUEFjWcHXJtPHgoGmucjznJaltbYywg568e1IOEdXtJltcIkLau1p4TevrYanHhamuhKtsk4MZBKAF5YZ2LiCWYa4t6IaMEz7O2aS1neC9txl0xzRTBqDV6rc+NAk/QmZ5MKl0ZxwhuTdWJwGD3ra2DXzu/+f7TK/eLCNn2y8+/FIj+B4j4vLPEAeJYG6uVpxTWEjkp6l7IARB1xCiTerRojXOWYvxjZ8aqqb59aWstwC9MmpDhnax9bi8fhyKm4mw38t621klClpRgN28AYKUXbd+Q2C1FBcsnR5f1AGCc3y+bBxCy3oP3586MtyaLuCMjybfn+ZIPvJZND+O9lrsb7z0AQ+jTT9z/q3/450/8pfuyVg3Z6yP4iWAIwUokAeDJVzYB4Il7T8AbwQkuWj0IZcDp7ToAgbiNZiySfNAJ//anP/yzH3/s95588R9/6+Wf+es/3JT1o+Mh7ZEHh+O1QXKwKPbnxXbd1sq9eHXnM08+f6ujLTHNqyN8QCeCq7fLCyobdffx0ac+fP/hafz8X/3guY3RiWMjzfXvfePS+4+tPX1x6zNPPv/Ypz/ypn0bZU6tvS4+ztrX+cB+Xo96wnt4YWv/Ew+fhR/gXeH7gg9EkjWtLet2OdHRaA03Glt3uB56RwgIl/T1SnDEaWvs0oNyo5/M8upwxi6WvPneTO0fQnJ28UYLQjJ6SN+zVi0fJQsA4K5x/z0X+FZWPT3d3moXeatGD5+5K4K5cy/O58UF8tw8L5QehGiq9buIC3budtZE653wWlq9b7V3apA0ZZ03LQD0k6D83vQHGCEA0I2C8siVeqMTHl4Zd2f5S1uTnUXxCAAA+PdCxT8chGXbrK3ES8nvuXHy8XvXv7G/E96oe51a6b2HJqcRp/t5PY7DZ3bb46tD7+G+lfgBHP+ZanLlPzgIaweffenAec8JmuXtbtYIjD58ZrhTtAe1OT/N7+tFr2znO0VzNa/HsTjZD5/ZTAlH07INJTnZDw2BurHTqiWMxJykhQoYHscya5T3vhuystUUo27I0lKFkkQBBcCEoJWOUNbOi9Z5LxlGAfXg09Io41d7khJABGlrq8YihA6ydqMrAaO8Mt76QDLj/LAvvYPtSZXX1vv65GqUVnrc4ZV2kuH9rNXGZqWWAiMCzntwvp8wwfAg5mmlk1gwBtuLGmMYdPj+vIlDGnDoRTCp6+nCa+NCwfpBJ4yGlGAgMOj1v/XCxfvuvsvUjQ39Sl8a50JB0sL0YppXepIrxkjAUNVoyknMSdGYTsCshbY1kmHnvMMw6MjJvEYYC0kFx4XyZWu19ZHEi7LtdaTRDpwrlJOctMq9ei0H7wnGWaUZwQyj44NwXhnn7TgOJ0VlSpxIM9sqkkRGAT19anzt2n7c7a2PR0+/tDM95iOJhfDaeaNsPxHaeaaNA4hC2irbCRnBSBtUNKYfs0WuBMNppTsBVdqdHIRp1Xa7vFI+K5RzrhuLRjtmUdMa8DDqykFI9me1YGg6Tf/4D7/60MN3DYbde+87s74hgSTIuXRR7U5zhNTFSTZQ0WvXJidWTo47vLFQlyYWJK1tJ2ZZodcHIq0N4SSrzbjLtfFZrZWFvDHOeopxR7CdpkXglXHaYmQ99rAS00XjQo77ibgQhtO09M47i41R967GX3p1y3i/EhEciHmmtYbhsFumeS8kiKCq0aWCRNJKGWV8rZ1xnnNMPTLW9yMyzXWl7LjDs8pwBGGIy8oBQsb6RjuEXFEZhCAKWMxx7nXMuTY25mhr2nZDDgjWulFIkTpxzFuXF1UnJI0GZxGjOBS+0W7YJftzY61rrb9rGHjkSmO7Ad1LFcForpw2rtUuiZgHQxhh2C1ycM4TjJKAEoSjTlgWtTZOOQgFyWobMEYI7kq/EsWhQFlDZKLykiZRcGF7cf8ZiZErW0hLwwWttU0ka5TbmTejjnTep6UJGLYAVQpgylqhVJnVLvfIHxODhFWbbf2x1fHuVv5Hs91FVs3mxZ/+268abRjFSDfDbm9zrnshr1u7m9fKOKqMc1ZbKyiJJWmNef+x4WZaBwx3AxEw+pnndu5f7R3rCGXdX7137L07P7OSscYYTrDz3ji/lVe7ufqZB9bqy8dmWXl4rVsO57yJFfz0B+77/JX9b23vrg0YADjvH3po43e/+NwD79vIkXotn8ULAQB3d4Zb5eu2pABAb5CKx8+d+LXPPXVtd9F9/A1d4uXY/SiSAPDFF6985EgS2etFPYJzZQAgCcRtFMMnht0vnr9yq5+GkhOMzVJU3QvvGfdOrnTpKDmz2nfMrfUSAFjpxSu9+G6rOWGLLBP0JneqtGzkjQL8G/sDGu4gxaio1SAJf/SxuwAgWeneM+7de9+JH717AwC+cnXz1Ci5e62zyDucoGESvskjSBu7DDZdIjuS6pO36hgLAWBaVKvdmycw/ABvi+9+ZfL/A3BGAaCq1dJdZ2mk0+i3+eC+a/g3ztIngtXaLt3o33dqbZZX8sairRPJ6nuQT3zYIvAAnTe2IKzz2ji4Mcd/OM2/0e+85/2BDpWPDTfeP97Y6HX+1kfuq+XgVUdec+T+XvLLjz/wH9594kSN+uS7tfd5KxjGaaM6gaCEHO93XtqeAEA/CY21d0eD5+evT/W8V+AUd2NZ1Oryzmy55b6V3kvbsydfvPpn37nwm7//jfml6U5+vQT1jhbitwLHdJjEFFFJuCD8/cfGT21O16Nkox8f5DUADONw+cLfindKBgDgZC++sqj+z6c3MSKxpGmrZ426nDfMmgT7jSR86srMGPfARtLviUmplPWriZi3+lJWaWMDTLbSOmvUc7tZWVvJibZ+UqtZobx31vi9sl0UKq9UINggEbWyvYg75xd100/4uCsDSSjBVeuq1mhtQ0GcR0WlKuW2p5UyvjWOEGiVX+3JUY8LSZvW5oVaFHqQCIoglERZVzdmViptXDdmUpJJ2nrkp2lrrGuNJwiU9mVjopDkjd06qDYPylpZ1TpBMUUQBuTMargxDAQni0KnpaIYV5UJQkIwHMxVU6txh1PvNKbbmVNKEERWkkApuzdv1ld7Lzz13JVXr5Wlee7FC1987hJYs77CGMaM4Ky0AC4UZNQTStndWQMIujEfJMKD94DSUvdixjh21gJCxsFKVyJAUpBQkqy0V/criXEkSFoZ5yArVFYqA9DvcITQ6kBKThDCzvmAE2NskggHHiEUMLbWjzezTEjWCSkXvG5MXWkSxFub+5jSMIwWaV4UahCLcTegyFGCehEhyDsATrEUxHnvPCjrrLOj7jKYlvQTRigqlROc7OeNB1DahwQ6EauV257WscBRRDsRN9a1SjsEKwNxdbccjPp/+ZMf+Wuf+uBDj5697/4TvVGnaNxu5lgUnbt3YzjshZydPrmeZal1kLe2VUZpxylB4AlBIiBpbSTFVWv6AQ04KxtzahT1IiIpdgAIYF5pyVBZa0rwrFBxhNPGNhp6AelHdJKr0aB3bW8yzVuFHSJEsmBRq1GEKELTXMeS8KQbhezK5v75nQJZQAjHkjXW7qVKOdeL+Lyxo5BMC9WPeFbporFV68rGAEKCk61JCwCNcgjB3qSqlSfY9xJOCRCEwNlaW+vdJNMefF27fiBf2ckMoCjA9z10GgCyogbvBMXK+q4AAJgsGOetc36UiN1CbU5bhvGs0IAgFsQaF4Wsak1W6G7IispUGoYx74aUUVy3lhAIBe12osDWjGAEPhQIEMaAi9oQ5j1YzpAydl7oYb8zT4tJrnbmzV7also6B8OIKuPiAPcjMcnatNLOwSQzdeUkRa3222nTCci80EVjLy6qRsMkrySGj547+dNP3P+R472RxZ/41BM/+aknAND+NNvJGgSIMdQa25VsGDEHaL3LHznWHUWsae2pbpQ2Gnv4s4vT1EDatI+vR+NYlMr2Je8Itpk1Z/sBxjAr20qbyliEYBSK3aLtRrIfy7p58134cGR/iY5glYff/+bWf/OZpz/79HaR+QCHT5/f/dd/er7O7HS/PtcbneuN4Eg/4SgIQtb7n/vkB0KMjypiW6uHYYgRWnrw//5TL33ykbvfuvuyP4AAYsnbW5ftTq/0Do4QmzchEEwZs0wPWM5/LotHDN98EfhWY9NltHB6pAUxK9/CB470BwRhS8Oio1jO/Cw9ggahOHwEAEYwAEhKVjoRp3R0Q6pxiJeu7j9w+nosw35RA8DeUptXNQCwlBZM83q19wM98bvE9wUfAADOSVWrvbxSzi3rpvV7XQ6/FSLOWmM7ggHA/SdWPnz3scMfdaLge5RPjG4MhMSBOGxBLDsAyxSwrNWHjwDwobs3Pv/8pZsd6d1DewcA/SgAgEdPjX/xr7zvYe9+4cT4sWEPAO6OwpUkeG/l1EvEgm0uCuO8tm7ciw5t+K1xd56A9o4WzZyQbiTLRl3enS+3LCbZr33h2X//v/71v/+rf3Ty0XO/9J/9xOZedjbq3yEbuU334xCS0a39BQAggICy16YZAPQCWSoFN4zw3rrXO3pdh7h/tf/c7kxZr62jxBrnL04rpPS0VrnF39meX0ubUJBWu6owK7FgGCnr69Zo4wjHX788/ea1tNVeGZ9Ici1rvnZpOgg5BqCEXJvWrTIEoxN9zhjenTWc4qxqA0mTiBvnC23308YDgHfOQT/hxkHT2rzSStk4YtY6DGhjGAEG5f00t/2IEYwKZaz1ZaOBkKw23vthRxwbRHmty8aUteEcO+cZwU3rwPt+zLR1m3vlS1ey/XnjPAw6nCAUBHTY4ZFkpbLYYylIWmjvfT8RsSRASAB2LSZJgKeFOchVkgQEQxxQ5D0lKJCkF/NhX64cX//61174v377i3/yB1+ms/bHHjw+iuNnr+432iQh7oSEEBwK2rQOIyQ4qbXDGLBFoaTrPckojgPCMd5btNsHRatM2WjCcFXp3anSxg26nFOsjBtG4thARpIo69JSZ7kK5TLyDCGMEUZZbSwgZ+ws08bYJGKL1CCHG6tnjaQuB4SchyAKnXX9wJ47u7Z3MOl0ZNFohxCXFDwYC+OeFAwr61rt4ohXrTXOzyurtPPeE4y09teHMj1QiowD50EDogSdWg0Jgs1J7axnDCcRK4oSgWcY3X8mWT95/GBvWjYmZORgUU9nrXNAsGeCpi1QDMe7CcPowuYeRh4hdGwoEcC81Bs9WTVWMowRlK1tGrM/rzcnFSXYeR9KGgWkF7OitR5AMKyUGXTYIOFpZa3zHvtpoWeFPd5h7zs9qKrmxIBb67yzZWMSwZ+5mqW1abS5Mq2d80ESTg8W96yGHrtuQBttrYVYkqIyjPhQkKVjrEf+IFOdgEpBEMYE+YhjTnE3pOBsmrdxzE+PgyDkzsGJocw1FK1tNfQkH3XFSsw8wDAKCLUSo2HEH/7A2fGgO8vKSFJtfF5bgrC2EFAsGMYEMwTWecnx3kIJTglGlbIAkAjciVhjvPc+ErgyZhjSurV1YxxCZe0aZTqJXCyKtDIYkUmuqsYCRmnVgPNVCwQjyUhHko1RV6smEmStL6zzvZAAACbYA2BEGfGc4n7Ejo+kA8hbIwXqx/TkSoAAOEOCkVabUUd0A44oLZUx1q8cW60l6g2647uOve/Re/anmXEQCuo9cEoExR4jihCAr40NGaUYby3q3aK9dyVe64izvWgYBX96cXL/SvzBY72Q4d28cc433hGMD/JKEIwAEkYnpTrZlRijbhy8snnwpiveUkhwdMs8r/7BT7z/d/7Oxz90avXbVyb/1e9+8yVD/+U3L31nV12bvr1zA0Hoh8+dfGl78ibCsOwP7Bf155557ScfP3fTfQUhy+XKxqBzG1vwUyu92xT1JKfauGV6QMAoAESMAgC9RSZP/Ba12zJaOC2O8IG39gfe7oZ+dOZnGIrDRwBgFCOEJKPrvdh6N+6+eVk/z6tlNDIATMoG3eAD+2VdKdMok1VtrfT4B/2Bd4vvFz5grft2lv6Ll69e2U9fnWSX53n1F8UHYsFac70/0I+C7AgBiL87V5/bY3kx60ayavXSbrUxFgCW875v6g8AwOKd2NXfCZbhX0kgGqVHSXiiF4UU+xuTPv1IwjtPhbtVJvFR9ANRKAMA2tpxJ1yOVM7zCgAWd5AtD7e1S7opOCXdWB7Mi6Juv/Tspf/kn/72f/SP/9VQq/UPPPg//qef/swv/tgT506MuuHyV/K2B7/DJfugG24dXE88GIXi8jwHgITzZbHkqBHeIe7wyG8FI/TiXBdav38kbVF+7Hj80w9uTJ2VGIXIfuHCfmVMwMiz19JOxPbzVlu3mzfPbGUv7eSLVGGKHxonCAEneCMOqtYGgszKdtQRsaSJpCuJ5IzkFmEMkmGMUTcWvY4oSrU9qfNCt8qWjUkL1Y1pXulWWW2sc75qnQdUN5YQnFUqClhamtW+MM4NOnylJ6OIIY8IoF7Ck5AVrZnkjXE+CWjEKUZIWScZMc4p7fbT1jnPBfUOxSHrxgwAnVgJGMaE4m4spKSLXE3mbShpEDCHYNwV633pCcoNaI8RxhZQrVzR2DRHMjCrfWGdy2vNKeKMPP7hBz76Yx/6kR97/Oz7z2KMGCGToq5ak5Y2ZJhT5L1fHci1gXDGgvfK+NIZirEnvp9wpYx1HiPABO/Pm7TQkaAnViNr3O5CzTIVRyQKqXb2IFXO+n7MvXPKuLxQaa7CgK30+EpPAoCgmDJ8bCQpJfvz2jnoB0HeqkgQhNC4L0+uRoziU3dtXLk6HXVCzkk38CfHYUiDEyuMMZRXetnBsA6qWjOCAHyWK0pQrZ2gqNDeGh8yFnEyr9sO41WrlfNZqa21kpFxX1rj9xfN7qSmFA+HSSCow0gE4n33r25fO7i0U80L5SwGAo2yg16AMepEjEf9tYht5UVW1pNCnR0yQN4DpKWelyaSuChNJEnIEBDCBBv3WCek2/Omqu21mcprWxpzeiAJRc55QVDVeoLBe180rjEekDuoLSDcTYKLO/MQ0FpPbgzEejeqdFspN4zZqRWZhIhQNBx29vYXS7aMEBjjQ0FWuwIcIhgfpO28bKe5DiULA9IPWCTw+kC0xoUcF0q51iURd95PC00Q0tZq68SNS6XgiFPwQDb6PAl4XrfOO+vd+qhXt2o6S63zmCDrEcbYOQcYjHUIgFFMEYollRy3rW2UA4A4JGXr00KfGoh5ZdPajmLeGo8ARh1GEChrMULj1X7btATD5Wm93hUe/CgQ21mhnZvm6mChF5UWnDAh96ep0jYSpBPQqnXDmAoCnKBBjMexIBjtLdqmNccGAmO0PWvTUjEKCFAn4AhgrceHgayVPj0KhgkH78NADvudxlitTaNUVbVdQYpGY++0c1VrY0KLWm9n7da80c594FhXULISicvz+nhHbuXNTlpE1F2cl8b7WruXD4oHRsk4lMNINvp1y9HtvFmNJHi/NogXRbNMKLvNNfDDJ8fLot4P3bX6d3/kgZ9/cP2Uqv7Ljz34yz/12B89/eptdjyKcxujr7+86Y/cApYLg0aZpy/vPnZ67aZ7CUqWarTT495eVhz18FFOX//jzdXpor7Ov292EEa1scv0gKXidhkAzG42FAQ3C0JWxjL6enQAAJStPjPuC0oRQLEcxja2dW55hm9tDgCAsY7dmJcehvLw8aXF5HSnH1AiGR0lYTeU/SO5xUvM8+aFG0FGk7LZyqrNrLqYV1+eppeZmuny0nSGEHCGlpapP8A7xfcFH/De1426+s1LL/3JsxMrv7SVPTIcXpvesrP2nkNQstQP/H/svVmsZdl5Hvavec/7THequjV0Vzd75MymSCqKYlmUhFCKY9lxEGd4MIRYgYMgiYDAid8SwLATRA+J4BmKDUESHGukZUuyRJHi3M0Wm93ssbqru8Y7nHnPe815OFXVxaqu6kFkHiR+uDg4+5x91q06hVrr//7h+wbxm1Onj4+2p6592367PyXyJGx7dWW6hjfrAw7uqA88+9phK7/LzGRj/rUpj06y+EQeA0BzS3oj5uxt0wnvAcOQb/y/nPc7ebq+zgc6AFhX32XOs0Ecslrq518//B9/4bO/8rlnFkP+f/0vf/n0E6f/p7/82GQ/frmY68DhEL1eL95upXeBR8/uHC2v56W203DdKgAIOZXaAsCJUXYrH/DviQxsLMlWvfr1Fw6SgP/IfZOPn92Zd/LhvfF9w+hkFqXbW1MczDprjX91WmURm5ZKascp9t5X0rTOKvBnBtFLs8o57wGeuVp4gEUpOUUe+2HM4oh5jCKBQ77JqiIEYIxbrVXbOW190alBxCkC51FZG+th87dxAJSA9855vy7VfCU7adaNnBX9IOaTAQ8oqRqNMRyVfdOaQUQRQN1rgoBgNEg5RbAq1OtHzWwtCUWBoIyikBFKoe50GtBRHhCMpLFlo7RxUto85UJg5tFOKpD2y94c16ru7GQQDBI2yjineLrspLLLymoFnXbzQmYR67WNOX3wgZNdWZ574PS5+8+cv3w4GE0ib0LOEABiWBlfduZoLQPBA0566QjyDKPpqnfG160+Xqle2q1cAEAY8l6ZNKLeAxe477TUvm7NbNkfr2QrTdEoY+wg5hihvVFw/064lzGG0bqUo5Rr666tVLluF4X0HgcBGUZhLftlIb3HztoowKOcZ3k+n67mq+bMie3D6VJrf/GoapXaGjBtndGOEYTBa+O893nCAUHXG2Vc0zvifcjRtOyL3rTSgbGTlEcCI4SUx+vOgPPOuqrWStvDeV/UtulN3dtVpStF6rqXvT6a91FMs4QNMtF2OuSk6U0s/DBgi06dOrF1cLSQ2redS0OynYs0IuvKDBNGEIwzHjCchvRoqShDUUgBw1bKEAZj3LIxRWOiiFcSOm0IQgCok9ZahwkCB9q703sT3feC8XVtCEF7eaSdUj2nQq1bRymjGJ3cn1y9OvfeTgvZ9CYJyCAiZW9qbY1zFMMgYZOIcQoc41qZRamL1i4KVXUqEXQ0CJR1O0O+nTJGUBxQhEkW0TSJPMC01NPCWu8QotiTw6Jpjb846+Mo7C+tjmZLjCANSMhRJCBgqJEm4IQSNCsVQtBK30rXGUcwjDK+rvQwIRihVW97ZZS2hIDWNkvIorHOefBgPMI8OJxVznmCobcuEqgz+rho6s722hhnI0Ejzk5uD+q2H8R03ZgkIqOUTSsdEYyRPy50qUwoSB7RorUAkMeMc1xqJHtzuJJla7SxBBPACBOci1AAOjOK7h+FZ/YmR/MVIE8pmS/KRasxwavOEQyC4+NWWYDtWHzoZHYyC86v6jyk14ruStmenzcnUnGO0XXfj2N2fll7gIjRM4P4oWxSmK7VlnhvnDuqeudhJxEYob1RWjY9ueFQ9pasYNl0D+bRk7eUER7enySMvP/M9olhEjJyNy+zW7Fouta5X/79P6EI3ZoVYhhLY+7WLOS8307DSmsA8Ah96ZXLb9SrhayvNYW0mmN2/QfRN47XIWPoLts8Z8RYt3EPSDkFgJjfq1/oThUjpS3B6C8AQm8AACAASURBVNYM5sGy+tDZ3eeOV9L6QprzRf2Hi2Kt26ttQQEx/Bbjqa9dm9+qUMQJjm5IiKacIYRCRje2BhF/c3Jgg4N58eSLlzYunJcuHn/72vIfPP/63/7St98XBGc134vy6bpzHjhmb/mrv4+3xZ+Lb+1iXexMsp/69EeU1L/5jZf+w/vHl7QUwdsYZ3xXsAnCbg4QDyJRf+fAwPeoX+gm8jhoe3V1un7svt1e20bqSR5cma6bo9Vzh4ufeezs57914R//9teffOVKtPu9qrIFnI2TkDIKAPUtrGMni246Jt4NCGPv30lV4E2MouDml3xcVABwsCw39YFV3Y5G6b0+fAPvKnRukf8/nns+joOf/2//o5/81KMA8OzBfEfMHh9tPT6cAIDK7O/Rl3dYdqS/Y9rsTrzDqD0gPI54caMjaDeJll0P3oec9TcY5jAONkJ473DN27Chap1xv/3SNOZ0US634wecd6tlqYx9ZV6+fFhVvQk4sd5TQfbC8LiRCKNTibha9u/fzc/Pm6006Iw5P6sYp6EggqBRJC7PWoxhnAdpSNed1tYq7fIgXrVymPCq1WVj0ohSCo0GjIABts4lIa/7rpMWIRQwgrG3G91DRqrOEIIYw0WtwUPIiLZOW1Q22gNUrQ4IDjmeFjKJaFEbqazSvbUIkE9j4TwIhjJBHcKrWjkHASOTgXDetdIXtdqYUuWxwwRhgs+MkvNHJVOGC9J0RmBU9worsAiKRmEE60oa6wmxnUYEsSzmTWuSiC+qPszTw2de/RRzezuTJ5/59o996tEsDrVT4LnwHoEvW72RiMEEz0u5jUXdG6ncqlZpwCiBaSEpwVuD4HDeeQSrSjKGY0HTgPbGzSsVc4qRG2UsEYwxUrUSPHBOpqWuWi2NbXvrPGwPedcb6zxBfpiJprejOHxlNj0Z5UmAamnL1vTSRsP8+Wdf/sgnHk/i6GhRVsoKzsumUgoPEtFKyynGCHsPvXIiwGFA61YPhTDGAUKltJhghpFFoAG0haJV4PwwoR7Ac7y3FS+KfpyLo0W/LFTXYUDAGD69P0QIpQnjgq2LPg6iyVAtV0gwvJtz5PUCMCP4zO7u8aJ85OzJuncnR/xopa7O+xMT0fcGgMwrnYQkCynBaFXqgBFlfaddJkgeMIxQ77DsvbKeYbSqFadYMCooVL3FGHnwaRJfma0vF90gprNCWk+Pq/YT51gv+6bXGKNQhFHEV/O1ALw75FUjHQICNObWOh9QlFNmPFwoVSONNsAxOGNWhRunIooxI5gg5xwY4xyjFKNBwmaFdAAOESvbPEsGIeEUGe8ZplWnnUM7OZ/XmjJSNS0lHhNCEVlUtlOOUWqs2U7ocW1DimrjQo5HCbXee+erzgpuGSfr2mCErId1rU9kASi0lYFUpOlNxNDu7uCpr11jBAcejUNqrSeIWAe99tuZCAU9WsowLAQPvPNHy35/KzLKVb0JBSsUOAdbGT8ulHd+e8CvLvrjtcSYtL2lAYQJ35+wopEY8S7ol7UBgGXTnhomy1ovO5Oncd21gEgQciNVGhDn/JmJKHpftpogxBmupT0/b6yDRhnnFXh4fCdbd+qo1mEUHJTy2wf14zvphfnyo/v5vJf7SVR2CmNYd2qXsctldzq7HpXuDNN10znv4ZZh4tv6hQjG3sP8lgzL2d0hANy3Oyy0AoQwQsZ75fxGJHQzS3ArEACn5OTu4PXzh197/uInHz+rrBaEHddd0cnffubVt2wWui45Ok7/0ddf/nzTCiklMV95cToe8dxa6sxOyqZVd2VRXVqWV6bLexT5OSXGuk0svqkPbPgAJxjeKpme3zE/ILVh9M1+od996uV//oVnfvjRs5kQL09X2dnJ5YuHO23/xNmTDw8mr5bL26yQNiibfmtwPdJYtP3GtWCD3tgNOblVtugmDubFdFn9/V/+/D/7nacAoHFuxole9gElL339Ao34ly/Mx07Py9Yj0NbcOoj8fbxD/FnmAxih55dTANiP0iTkVdN/4Mz24AXx2O7gI8PU3rM4+N3CJg2A0HUln2Ec3irzX7ey+x7rC+VxMF3Xx2XpvX/h1Wtf+8Yrv/7HT/m1vTqvAOC/ee7idp7c/9FH/tP7t3/vuXda9HyHeHy4/fxq+nA2iTidZFEkOHxnhxIjRL+dPBkh16nU3cqgd2IUiUaZZdsDwLRsAeBwXV+vD9T9CN4RH3hXOBNGPxzkX0/CrRuTTPeNsqLT990QpeaEcMxWdQf39F57V4H7zij5nRdf2jzf7O+tMizDAKCM5ZQM4+BwXe+Nsne+JtygAb21xvkrRXdYd4tGAfLS2t0s/tzzr2MPU2m+dnFpHDjn1qWxDpT1vXdpQOeNvlR0AcXHdR9zvGo1IWgY88Oi77XbG7Djoh8mrNd2VkhAqGgUArQ14KtOBpwUtewUEAqttGCddoZgGgqCEZ4VHaMIY9JLAwg1vQEHRaOMcWnEqs4kAVHG9cosShmHDCOUx+y46AUjq1Jqx1alCjpDEcoCkiT8aNXnIa86sz0UBKFVrepeDmMB4PNYYA9HhTo5DutWRzGX2lGM0oCuKxkOUZ6yojZ5wlLKpkUPzu+P4WAly0bnMdsZh3FIFoXS1nPmlrVJA2bBjTKG8HC5LK/M5YlJ8PC5U69dmkaCr+v+xJhrB5yRRJBlpVeVzlPe9uZ4DXnM9iesla7uTdFogvGiVKGgjOGm13ksVqVCCBlr286NBiIK6NZYOO977apON50lGJpOxyHdHXDt0Lzs206D9zvDAJy7VraUoJPD4NKRYpgGEfNhiotF3bLJQOyPt576I/va67Mwjq6+fuVgLtOQjDK+LEgrdRaxtrfS2ETQotG+BvCgtW2Zmgz5cm01wRTjZa2HCYkDXJcmYFhqZz1ggihCuzkdpbTXLsv4fNk7RJKASAuC4XwQ12U12Z2MM75Ydbtb9MQ41B4EwZ0EStDZcc4oeeHK8V/42EMBQ5dn3YlJELQ4Zjgk3IKPQ6ItLGobcShab62lGPXaBRSXUqeCrVurDbRGEowYQZMsOC6l9zhkWDuXxXw8zJ575WIj3W4GGKOTg+TZq4ggjDBKBBkk9GgNZ/dGX/jyCzGHkIvtiCKEQkwpWE6JdraQLhU45EhpRDEkAgsRp4IaA9N1t0JmEvNR4nvlObeAoVfaOp/FVEqilBQUW+Q6AwKjSRbKy67qdBRwQexwlC+KdtH4kLnTI3ZYmPvHfNp471HRe0HQsjEWIOcIIVhXJhL41CRcNToRxGrUaU+wr3pbCbNqddVbbT1CQCgK06SqWm393oAdl5oRdGJ3crAqtmMShnRR2VAQgvGqNFEcHC3Wk4HYzwNOUNFZz8B47y3iFDFKL8/6kOFW2p0Bo4hI461z1qE8ZhmnvWk75Tihq1Zh0iecbudsmkeXD6fG+TgSWulUUIRhwMXhqg4pfWQ7vrhqP7Y/sM6/dFx5i3vvlXEvzioAQAA//IFzv/3tCzHWL06rhNOnr60f3UoJQpwxSkB5uFJ23sNu+mY7ilSm61QSCes9Qei2yQEACBlF3zlzeHZvtHl8bbba/F6KEMfI3D13FVCaMPbTP/z+33/q/CcfP7t5sZLaAXzlpUs/+xc+fLcPWucxQt/84oU8FKqH//sLLz94Knr1ypu9r4m3FtDxuvbd3fkAo8ba/JZ54pgzAKDkrROjd9YHemW0saMs+trzF//dN87/yueeIZz/3GefSQJ6Lsv+3oceWkj53OWj9EZe/zZ1oA3Kpr95Si5amd7iLya12Xgwz6s2u4MPHC6qH3jszE9+6pGf+IGHAeDffPO1z16Z/uwTj3zmA2d/9euv/NK/+fpv/epz7vTJH99+U5D0+3i3+DPNBzDsh3nGRWtkyNl4mOSxAIBREjpKXrnRe/29BgLIA1FJvZ2Ewzh4+WAxLZvtLAaAqpEhZ1Xbp3c3If9TIhDsxYvH/9svfu4f/vrXf/AD90VJ9DOfeeTjgxNffeHy3/vWa//rJx75S596DAD+9dOvfPGVS2+32FvDvV3b2U1PwU6ZdfPmwBMnePl2nlk3+IBXUlFKaUgQRvB29YKY01UnAWC6bgDgYFnd6Bd6e4uu94As5IlgFKGHTl1XT80CPgz5bX/MWVFn27f3RN7EuyIDAHByki+LN4+EURgsWgkAASWN0pySURpdW1Yfvf/uS9yBWac2G/Si09q6kJLXZk0W0kfG4bNXxSuz9WuVj7f2f+uFw91MxAGpegQIBdRb52a1NBaGKet6a70rpNnKgtNp8MzBump8wEhp3evH9fYgKDpNECCMZoWMAxILWja6l1ZRxzltlGKAPfKMEzDIet9oS51DgGJBO+VCQZ31UlrOMKUojljTW0ZAWb9xzFXaRwIqqWtptPKrXjoHRakGKQcEguFWOtuYOGC9cae2wkbagJNBwhnFAUecUqkdZ3grD7wHilFZ60HCLs/aUJBOuX2COMZ1pxGGPOEhp1WrGmk3Ph9ZzOOAKm22h8Fs1auw7iUbZsI7Lygdxz7L4mpVXnMQRcnFa9OPPXLmoKiHeTqIyDhjZWPigDTSgfeBoHVjAKBsNEbII0QwktqNhkxqFwtqrWt7O0j5fNljipKYlLUKEDoueowhCugo44OEhRw5B71x1vlrs9YjdGISpBFzzjuDqPfzVT88lW1txTvrqO+0DAjnXAiMMe4NPPLQqd1Qf/DRnS89Wd83Zoh6jokYotePTMAZQn53Es2X3SDl3kOe8Ola1o3tlcQInEWI4Dggx4XpNWzFou0lAO6U08aGnGiCGuUpgphjth3Nl11h3NaAJxzt7Y2asnn0oROAIE3EqpBbOVgDy1YnzFOCt9Lk4rK4cHXaa6s12hkEB0t1esynKz3MqDZ+XmpGECXYWLQ1IGXrqt6emQQOvPe+bY0AH6fCOl90Jo+Y9S7mhGAE3luPmtZkcdq0/X1jwjDaz0VnfCpop+SpMeQcGHZl5IZ72bJonjloEy63c24dONDOQ7nudofh9c3Ruixi81pZRyKGghhdq+Vme+iNE4y0vXLa78TEeDIr25Dh7VxcKMplbQPhnHMn8oAgFDC67rQH5AAmu6OXp0cEQduZZUOcdZ3CgiNKoWhN2VnBCTjojMfGO+fXtVYGMHjrvfOAkSeYKGN75QYxB6S1dVI5DHBqO8IIiO6dp8b5gCHBeRwFtZKt9YKTqncBReOM7++MrJZVay6DQgCDhC8qqY2nWDvv6t5zioQgnKFZKc9uRfNSeQcIIUC+sw4jNMl4yNms6hnhEaKl0g7xrleDkPaDUEntvCcILTo1SVkj3SBggmPr/CvLRjk/jkUsyId2sqcP1uOIP31QfHvVOQ/PzOUDQ1pK80O7w5iRZ4+KN+qiXrczNRuH7IfOTJwH4xxG6HhVAcDxqkoisRECunNj5JQAgk6bDWHYvLixKI5vRK7XuQRC7sbzO9eJQ/bD505988XLX33+4kcfOQkAVa+ygP+rZ87/xn//n9ztCHhhuvqrj5/9Z3/lh/7FF5/7h7/35PS1aVgMDl6ZM4Lv3xu//6H9n/j3PvTjHzj187/z1P/71W+/1QJvjeZd5iI7qQ/mxc/9wmf/+qc/8mNPvO/jj53+2X/+u//5+3efePjs3/nDp421zDqOMSf45fX8ocFEvdX8QNn0NzVDl6281TtMGruRGFrUXXJHdeJgXpzcyv/GZ35gcxlv5z97euszD58GgFPj8Od/7jPn0tG//NK3f+0bL72rY/T7uBV/lvkA8ujmqEwcsMkwCTgzzo3SSFNyc54YvftQ7N0ioLjolQeYFY3u5D/942f/zk99CgDqVoYBq1r5veMDAPDEw6f+6//4B/6LH30CELxwcPx6WxiB/rMf+dA65GfPXFfvOjFKAaBTOryjae9t8bZfnaB0Xrant3h2tC5vaRC61Q/hbtjwAfedbUUY43sTgkSwZSt7bS/P1kUrqYdRFi3K9mj9FkIQIRWdkRvzuPeGRPBa6jjk7pazJBPi8rp6fzjeXJ7dGh7ekw+8W+xv5/Nb1OUGIV82EgAEI43Uwyh4cG+8fju6dRtGAVt0atGqk2lwed1/7sJMe/vEiSEjniDy4lFxsegIxtNSauuigIJzHkA5iDkOBWt6wykOM+IcrBvtwT99bY0R9NKUnWYYJyHtpElDvm4VARhEhBA8L6XRLo94LbXUBiM8TDkG5LxVBkvlvPfrRglOKcUpxQQDxriVWBmXRKJqdRxQbcFaiARZ1TaL2LLsGSOxoIJA27lBzqveEgyckbY3vTR5wopGD2PeKrsopE89YySNmTMWY/AA61pK7ZOAIgTG+2WlACPn/MmBcA4tSukcLAq5KmQWszQWzhhrPAJ0NO+yhA1SXjYaADyAtd5Z5z3qtZ8u9c7eZL0skzQ9uzf+gwsXWRjW84NlOVKKDmJWdT0CCATBGGUR65XVxu0MRdkaDB4wikIcMiIoWjdmkLBNuSAIqeqNQUgwbC0YD9hBLy3yXmkAQHWvA4pfOqiigG4NQ0Kwcx4QXnUmF/jUiYRgdNTrj5/devqNa4+kp0JENTgnJcXo7H27ly4fZScHBKOXD44ePHlS9R4HxhlYFR1heKM/UzY6FGRR9tsDYY2bFyrLOACKA2q9mSSUMpDaVgYSQRaVqlrLqY4EpQRxTjxCeYi6RNSVPFxKTiBOk7Kop0uZ5yLihBBy6bhKk3Acs6JVNB6w5mhe1HmWvHx19fiZrXWlhhGZFRpTOFgqRiDkZNUYhC0niGokKOYxAuSpg2mtjUPDgC17o3uzOwoYQwknFNwwIq1yzoIDD86Ok/DC1TJKY21dr30kgueurJSPux5Poe6ROjxeGuunx6vo1AQQ0t4b69a18eDXpQoYq6xqDQQCRZxq5wtpXOkpQRPORyFddXZeKs6wNm5m/DjGe8Nguu6jgHFB48BxRq3DR4VKIxIwMq2avSyYN3rv3N5RV1njRMAaZZTxgmHs0aLiSayMpdY7470gVFBMMIpDPoqp83Cw7BFCkaCNtGnIGuOUcY10ylhG0ao1iSDjQez7VtlIMGQc1EZfjOmJujo1itKAc2LzFJqOnDu5c+lwdnIsEMLKeEHRIGFHy35eumHCOPVWYwBglCQhvrrs9waMIKikaXrLKBpG3nufB8I6hwBfKzuM0O4gVkoPA74Sou+V9Q45crDuQ063E/HasgULf3JtnQYsiygD9Nh2kgb0g3v5Ny6vdiNRDOJnL/kQ26OmJwg9d1wMQ7Gf8Q/vZN9oFMG+N3Y3FRghAOS8P1hU3sPxqj53cgI3fMSkc8jDTUsyjBAnWFqHEboZ628NkotHq+HwdhkcfENg9DZK0BvDMXHgf/zjD/3+N85/aqMYK3Um2F/6xGObWzfnx21H6rKRO3EIAJMkOLcz/Js/+tHt3fjjJ/a3bhHWlFafHCYhv2tEd10dqOkDwTazv5tZPnOXEn3R3l5qaHv10Ont/+onPrbpif3lLz93cpzuDuJ//4G9+76ZbifhsXcAICip7q7VUrbyZr9QKdWZwZtdyv1NPlC16R31gUXRPnz6TbOiV+flZx6+btzWOV80Emdo1fd/9ROPwvfxXvFneZ5YOxdR0RrpAepOfXh79I1Lx9OiGSVhFvB76HZ918EILnuFAOZVSzG+OZFTNTLgtP7e+GTdxDiPtocJQoAAskR0Vm3Khbtp+NJ0vblnb5AAwFsqVL4t0NsJ5ghGF3UHAMM0XNyyy4SMvu08MXqrLIs25m5vbUARPj9dX1lWL8y6Fyv46f/5//kffuGz56/Mnnrj8hvlojPy1p+NpdefHjuj9NWrbw6cPbozuHpL/t5a98rRWxsCwHtipBsl6fJGw+iDW9lmpHgYBa0yHuD0OL+HHPVtOD+v/+FTb/yTb1x89qioe/Ovnr32Gy8c1EovK/X5C7PfeP4oDNPXWyONIxSD92lMtXWUYgCw1nGGxylnFEUMRwH13jEMTW8JQU2ro5BTTAB7h2GciapTeUTzmIaCFY3BGPJMOOQ7ZRHgiCGG8axSRWO0dUlIQk6igAwSNkrEIOHOI218GlFG8KpSbW+MtVWtjLZVrRjezBkjwggGtDMQo4wva2WdwxjVjdbKbQ3DOKDW+XnZa+1GGfceVlVvjW96e/mona66stZNZ46W3aqUWjtB8YlRyBiOYlq0cjsLtoeCEEQZCQMahZQxPB4FlCKPkHL+0lFTtToMMMHgwTe98eCXdT9O2f1nt7uyxJR0ElvvZ2vFGHPW5hHtlc0itjcOOMXgXMAxZ9h7nwRsnItQEIwhFqzubchIrx14JJXdzrlxXoTUWZ/HXIM7PRI7A5HFbLqW86K/dFy3nb226BFGO6Mw5siDlwYihk/mwUceGBHsvbMJ8dazde+OC3950TvOPYE3imKmTVEun/rW1VaaN67UV2YdZrRoeoS8oGh/Ep3eCTnBBKMkZFq5g3kHGAtOBMO7Aya1RYCV8UoBABCEGmmjgI1SPkoFwrBu9LzSi0pdnUkpze4kyGLaGc/C+Mqlo9GAJRx1vZmvDGWwWLVXVz0hBAHkAV9JNZkMyrIKKMQhoRg579eNERx5jwKG45CCR96Dth4QCjhlCHFBsoiNExZR7Ds9TJhRVgA6KhUi/uKyV8bNanl50c0btbWzdXG6MEanEcsjyhB+7nj2b4+qA7I+Q8V2w5ODrmt7VRQnBmJWqqOVnFc6DmgoaKHtYdMa5zkn1trTWyIL8HbKnIeI4lmljmq1bGXEMUKQhBwDtoDAASFUaU8xaqXrtZPKYeK09VtphMD2zjsP2+MBIRj7bhzTUSQIAkYAITdJibKQhCSPeEiptrbXVjvA3mvjOUEYoyRk0riUY4LQMKCDINiO6VbC9/Lg9CDYSdh9pybrZZ1QNIkoAzekPl60v//0lX/55Yu/+O/O/8ZXLn7xqYP5Ws1m5bdeeuPK0ixrYz0crKVUZpJybd2slE1na+048XlIIoEIhrKz2kHRGozxKBUBJ01vM8EJdvtDEnN6ahwYwEqpsyGKBqMgEtemNcWwEwc7MUceDsr2sJSn8uixrTQgJKTMWD+t5JOXVmupr1TdfeO403rV6TSghOCVdc9Ny5dn3bW62h6Es/X6w7up89567wEQQrNVjRAcLKpbh4kJQrfWChAAp0Qai27E+gDwgXN7V2fru4Xgm9turTZIYynBieCffPwseP+1Fy4CwKVFyb3/m59+YnMPunGe3nqk9sZc7/AJWCjYziA5d2K8dYfK/p2OAbdCGUsJ3rgHbObrNnzgbkdwcYd0adOrYRrdtzfaXI6ScPP41UvH/8F9e3BDxvRWg4XbMFvXNx8BYNM0cfPdzpg8EABQtPLMZHDbgVg0/Sh705Fg1coTNy47rQUj3vtnLx3vjzP4Pt4r/izXBzaIqFjK+vT2cFk2SSic9+MkrIz9/01vFAACSjdeevOynWRR1clG6liwrleC0e57YEl2K6KA31T8DQgPPA8wA4BM8Kdn1+PXjd36qulPjL77/50CRjeZ7LOntxa39AsFjL7t/AClFACsdSIQt9GOe/AB7eyvfP3Cwzvx3/qRD350L/nff6v/u3/905Lav/uP/+C+bHxnKeBtPdHeSbz+2Lm91w+WP/Domc1lIljRv7ns3ij5yiuX3/KD72Txt8Qki69M1xtJ5g/ujV+YLTkhWSgWdYcAnjh34p/84dM/91M/+HbLwC89c+XLb8wpxxSTq8vWA+QRf3g7uVZ2H9xL9/L4WwfrZlasGwUYIYCAYSVdr0zIadtLhPGJPGqtBfCU0em6d84NEr5uFCOYc9xKQzGEARvHfNlqIYjULkTocNFFAochO172zCMEYLwfRPxg3VPvg5BiDMta7+RikCcYkbbVRauSkC0rqbQFhKMQd71ZFppSFEcUvC9bwynyEWtbI0K6qpRHiBBEME4jxjAuGz1f9WUje+mQh4VTBIEH0MZRjCNBBzErOxNx2iq7LPuQ0a0BH8Rs3RkA6KWlFFWVaa3NQlrWuul005tBwpHUGGEAnwhKAerOlLVOE7AO6s50vTmxlRjjFAkOjxaPEhQF/NTe9nK9iJIAI4MwVtrEIclCxikuWyMI4gwjihtpOmkA0FYerGqptBtkQRKwXttBxCjGWzk/XslRKrz3p3cj7+Daot8bi1OT4KhQy7VcNyoL6N4k7hoTMRFSHHJcKV10NiU+jHnV2Nbiw0W/bOSF49UrXo4uLsqqRwg1je4bRkzXkvTweL4z3joxFidG4VYeBBgCilrtzuzFh/MOAWyNgmUh5+s+T9h0KTvptbHGQxJQZSAPsFRSaZfGlBJsvAfAacxjgQJCDgtFCBolQpt+ZxQiQHXVTVeaYI0AKYvT2DY9KYs+ZJhh33hIOTuZj/quDQXV4FatoQQz6pGHcUJb7SKOtAJAmCCgyAuOtbOgESXQSyc4xQxzgaeFAkbSgGgLBKNpLRkho1QY6yjj09mKEyEI/urF46rTKPafQlC8cPW3X10s56XsVV22l69Mp/WDZWtP5tHVdV14Hwkacyw4HQbIICsYvzjt4oDU0jKKLi27s+OwkHaSC3CwrJQDJzhd1LqXhhLiwYFzCFHZ+ySkEUNhyAQlvbLOOYRgMkgwxkXZntweOecppZ0G41Eg0IAgKfGqMVmAG+knMWMEA4KY46NSJwFZNwohmDd2b8SAIIy94ARrP28UoSj0zlL+4huza0U/2hrdd2Zy+Vp1AtAlaj82CJ0nb7x2+SvPFX/UfUs7x0+f3M0YpujqrE9DWnc2EcgDeA/GeoTQotRN79KAbmV8VqhhRFKBQ0HXrU5DPQyDoxKWTb/o4H3bsQdwQxhkye+8Mo2SSAScOR0jeq1WHxvkl8u2Uf4v3j+OGHl1XhdaF4159nCNEZpEHAB67S4qwxhtlOzBvdw0C6vDAF8t5b73Z+LEGfvY7hA2Ybf3APD6wWJRtkeL8lZn4g1uxvQYIU5Jd6OavXk9FKxsS7gzEwAAIABJREFUpLq7senN8sLmSa8tu9Gs/6Mff/B3v/7yJx8722szjoJIfEdZ/rbjQDsfMuoBkkAAwJ29NBvcOYN7K5S2lODNNPDG7bhVGgD0XSQ97qwP1J0KOL3pADCKN6E8ulI0g1DADT4Q0LceSACA6arePG5KBM8dLX/8ffs3322U2k1iD3Bc1OM7zMj+5JWrf+unP3XzctnLE9l1RtQqs+lJnpXN2a0BfB/vFX/2+QAABIQ9et/OwaKKYw4AozQinWr09yoKv7P/ZC+LNix8XjVZFJya5JsNou6U4PR7LTEUiTf5QMyoNJYTDADjWFS3UJFBHKzeZXvJTSAAd/egNuJ0XrUA8LEPnftHX3qzwTHk1FgvCL9Huw6ld+tfuldNYjeLzz2y+8k8GifB4/uT+/eGNbe7EEyy+MFkdL5YvC8f3+Pj7wHvmwyqcXG0erMfaRDwF49XNy8fP7X7L/74W/fHw+dX08eGb9Y93zMZgBsWBJsN+sN7W7/w1HN/7fEHTw3Sb10+/tD+NgDcaUFwJ9a93skF42RASeN8b51z3nSqnZrdUbi25uXXZo02J+Noobq69eA8p3Td6fvH8euzhiDkwK8biSjRGtpWN70WBDvnspgfLzuM8SCmhCIlzbJVrXKM4Dyiy0pLZaW22vlRJlZVzzEJOV1WimFEEcLIC0YFc8o4olBRy97YmFOMkTEuiVjTGYZJ6yEIsNa+anUaM4RQq6xS3np/vOwEJ4xghHDbmRKjTjmtLcYIY5IntOttGlLOMeNESZvHLAnIotSTTFiPrPeMkMlADGJmAapaW++XpdqfRGyA5doCYEotwVgbdzjrTgwZI+A8EAzb40jUelX0BCOMnXOecXq0aCc5e+DU6ClAMbNUsN1JfjBd7A7ji6vi9Pag6nSO2OVZh5DPIwbgI04oxhvjBU5pxIiP2LJWjPjtQaCMLRtNqBtEfL6WcYjzjHGM29Yg767NupO7oVQ2FvS+naRXtmk1YXhRqzxhfW+994Jg7cx6KRlFCAMgr6LwydevjUMx2orft7s9jIN1LQ8vH77y4usfOHdyWqy2J8HBvE2jMKLocNntjsJVrRlD27lY1morEtlOvKh00WhtbNHIPGb7A9FqFzLKEESCeA8ekANvnUcIMEaN9JMB2spY1durqx4jPImJ0ixOouPDxQP3b2MAom0U0YCywxValhIQstafHGQB4+ffuHK86iqNRimX2iUc98ppCznHjfUOoYjhgMK00KHyWxlvlV01ZjenISdcEMB+JyMRJ713y1IKTo2BQUS0c8OQPHRy8Bsvv/bS068ShMuycc4NToyenhWf/MSDUX5id2+8mC0OLl29emlRNdo4v+p6SvAkFWlAtbOVtMdr0zrUKx8wwgjmAd4Mc0ttdhLRKEsQIgxb60OGjwuLAbx3yrkgjp3pCAuOCxkLwjpDgMyq0poJw6A9LaqmKBtlHALEKHTaBpSVNbAArRrtnCeIdNYflhoARjFdNKrsDMGIYLAWAoqaTjNCjEWtd9sx58gT5BelG+Xhyy9cfPqbr4WRwAhFsRiO4olHn//Wnzz88Jn3PbB/+tOPBig4/9rhl55/1SFnFAQMbeSJAKOtTHS9SSK2qiRnGCHUGdsoEwmMAAWCrlsNHnrqzg5ErcPDokwELrREQICACPiirLfGWRjwRdFeWLUYoy9fWoYUI+9fnlcU4UWnlXNWO0Kwce6g7LT3UluE8LVQ/FFZf9Pa++ftXhpFoYgSikCl2H398uwLz1wo625aNBeP15/94rc7bS9em79+tOqUCTm9WLQXlm3CyQ+eGsGNmN55v2z69paeAoJQEopvnr/6hDx9t6315p2bKkFvzObkBYAnHjn1h0+9+g/+9deeunL88UfOfPto9cSp2w+FmyecMi4VDAGkgQCAO3tpNojFvXp9r6sDNR3crA/c1B9/qxOoaG/PkW2shW9ebuoDgWAvzctHtq9H4W85NXETs3WDEJqtr1etpzf6EYz3tdbHZfPw9lBZ/bnnX/+Zv/iR2+wLjpblg/tbm+cHZTMKrgcMVa82g9GArvOBe3crfB/3wJ8LPgAA23lycbrmNtrK42XVjtKoU99b4f9bwQneOHSUBg2Go9/84vOXXz/+az/0/pPb+bNw7XtnSbZByOmlo9XD+7sAEHNuO3ShXj0+3B5Hwa18YBgHq/rtw8d3C4TgzNag6TUAfPjU1m25CE5xry26e9saY+96ngEAzo2zf/vKlSfzaOfwOM+Y5PbT77u/bZRSlmC8MUZ453gnIfv+JPvV6UoWbxKqreQ7vOdODjPBKLuLmMN7w2Nnd5dlezAvAOCLz1986Wr5K08++/ho8pXnL55I02ffOJyX9/Jf8wCl0geN3I3F+8bxtJQ/+cj2K9O67PRR0xtjp5dVzPAo5FsJL6xZzTQAAg9KWULxslW7uXh92gBALW0MSBp3uO663nQIOmXyiFnnrfWGeeKgUW5/EEbcVb0+WMr9rbCTFiMUMNwbgwAxgsvOgPeIeCaodl62RlBcNPpo2Vnrk4SPMlpKH4UsFLhq9brWCEGvHCO47a0yDiHUS59GtO4AUxQHdNXqOKR1bZWlo5Qr45KAdsqUrR7nomqN814wcgRKaBwJAt7X0rTSFZUiGM0LVbV6mLBBKrSx00IdreUgpOCg6q4fqElIk8AD+FEeTNf9stJ1b9veBAEBg/LEcBp2yq4LHTCYFfrkqa3Z4fLk6W0eJIfTVz/4wMnDZSmtaXqrjMcYMYIwIXWn05CVjcIIY4Tb3iBvMGOhoOCBER8K4ZybFjLiJA5or12k3dVlZ7VLBAME9Vo77aOInr9aTkaCU9xp2/X2YNoAwZwhAKAYco5XDjDCWcYfb5Nn4vLszmA/YjwKjIMoFKNxbrv+gdPjq39yHAa8A3PlWO2MXdmaLOJhyKaLFmOcxWxRqixmu0NunIeASOU4wb1xBKDqFKN4Jw2OsTTGWQcBwxTD5t/9uLbaOu/QTsYxhrqzAScn9reaolqs0jQWcSgC7ixiaeQHIdbez+Z0f5BeXlcXD+dZgI1H1rm6M4002nhlnSDAKB7HtFP+cKV3h2JZqelaCorSEB8XZhAhJc0kCZbSC+Gc9kFAWum8901vzoyDRWeSPCud+PEf++jDD+63vTk8mP7B8fITjz54aod5GXjiYTJS1frC+YM8wmXrs4ghjxD2vfIYA/dYEbITYyC4U75ojdSeUUgDuqic78261qOYE4wOVnJ/GAxjVrZKWR9xwhEq2jpJgiwMMEEhQ8pEr04XhKCqtWmAB4a8cbD44OMPSO0B3Fr7s0NS9J44iAS5upCMEoygV86DLxCUnZnkvOvsKKPYkSurbhAzRhDDUHf20rLfHwVFZ49LWRjaWf+xH/zAQw/s7O6OVtPV4Wz1hen6J37yU8OtLYw8C7TSnOYpJni2MiHH2npOqfaurvSm32ZRSkax0h7AMYa8h+2MJxzP5z1BiHJkLVyYtdbiqlcE/LJxzmnByO54EBIrOApCoaUapGy2lhgjjzDC6FopQ4GldggBIQiBzwMSc3pQdp7imJNwXlZPnm+0XXLmneOM5qNkMEBfqS0Po//zwuHOKD2xMyR5+rf/u79SSvXN51//tc8/u//RRwYhA4CdSHxg5ztkajBCp4ZZZ76jwDvJ47KVgJC4e0Z8g02UrKzdhOwb4Z33n9v7za++8MdXDv/Gj370l56/+F9+9MGN2qYHeHk9RwDGWQA46upKqU3SfeMunIbCwFsk9aN78oFeGU7Jpjm50wYB1Mqsq7Y1Gt343PUQHAEA1HeEJbdaCwPAJoWfhaJVZhDyzbL8ngfcvGi89/OiAYALi3LV6xeO10dl93LXHMpl0fkfQmRR9Ou2PzUeAMBNeaJl2QLAzX6hg7Id3rBLq7RMYnouG11dlFtZ7AD0W+kafR/vBH9e+ABCcOlwef8gGkZB0clRGsWCFp3Kw3uV2L5byAT/g8tXIkJrZT/zgTNvHB595pOP/NqXn/utL3z7Iw/s13f3GP+uIAzYTT4AAJziTYlzHAX1LQoDwyR8z/UBuJHPuDNuJhgzSjZzw4+dGANALVVyQ3WYEdJrE4q7xtucM3t7T9GG/98rRD+Vxxt3T238Q/kktXx/lJeiv/eO+adBKngSB1cvvTk/MImD8js7wYZRcLQub53ZeSdM4x6Y5PEfPn3+7//y56OAdd6/MQh/8fD4hecOwcOvPH3FGAtX1mXTZ/Ht0+oewDh/fllb77dC/uS0um8Yc4w7Za9V/SCgnzg1urzujtp+XqqqN0cNpoxo77djMW16adyjW8m1qicUIQTOQ6esR9557z1kMWt6k8Y8FAQwEoSUnVl02jp/ZdWBB+v93lBMVxIARhkPOFnVKhS0lhaBjwKysSL2AACoRj4SZJwHs3WPvb+2UgGnnKF1qZzxHiAKmTY2j5kNiAMoG0UZNt6jjYBVpTjH2PtBwo0FhKDXdpIKzjAjuGpNGlJlHcLwgVFGEDSNWdVKG6+txwTtjgMprfUeEHLgPQJAMF9LY+045ULYpjNVZ/a2GDgvW8UDnMa8703ASdXqXlrgOA9Y0fRdD1kulrUKqYvS7NLlaTLZ4oxb64CyFPyiUMY4jFEoSCyINs578OB7ZdOQtb0dJDSPyFFhBEEMY0z80bIFBM5B2epJxgDw8VIKRla9RZ2utaWcGGMXrVLampXnhEhrGUFBSLOIYoLmazUcipyTwKKyUabzIWdxwPMootR6Bw/sheDg2UZaZ7fHSRqLrmvDMDqZ8yuLEhM6LeXWIBCCzJZ9mrBhKpaVNNZb6zBGkSCLUtIWDxMWcFIruxuDMT4MqGqsB2AEVZ0JGDHeB5wCeGM8F0g70Mbno7ReV6d2k3WtOUPewbLWOyMqJWQc43FWX5sum2YySF+b1g+fHF0tlOCYC44RQh6CAM2WatVIBGCcv7rojPURRZpiwqjxcLzs8pjW0iaCtJ2tOptGpDQmFGQrYbNGIwAh2Dhw26d2uWCjQewY/xClYYAwAiZIKS1GkOVJ18mi98Z78K7Vvm3sJBYEo1HCPPLW6kZBp5y2XipzYiAuTbskIpyQ0+MAeXS10HlIBUfr3uwMglkpq96GDLRH2EPR6a2UzyojKGuVch7iAEvjR1uD41W5ro1HKBbIOu+QB3CtMlUFJ4dhq812zKe1Rh5q6WJBI45nhUkMImCd9dNCDlN+OhdAYN27WaWltmnI+yxq6m40SnGYHi7VeJDZssoC0Qm+RSGLRCKilnRZmjBGrZEsDLcHcdGZZaUHiVDKefA5Z62y27lYNFpp57y/PO9OjZj1ru4cAJD/j703j9XsvM/Dfu9+1u98293nzgxnhpuGpKjdlqXEqmzLiGNbrd02tpM/EqcJUKBtUCC1UxQ10gIp3KYw4KRxUqcx0gYJ6q3eJRm1bFkLtVCUKO7kcDjr3b7tfGd/9/7xzQwvlxmKpGSgkR5cXJzzLe+33Ivz/p7f8jyYbA9MnoMy7nCppfHOOUos52xetpNZ1c9io3RembWMC0Yny44iPAz5mWFkwIWESmMnlRSMTCr14VNre2XXWbPbi3bfc18YiEES3rfVn2lggTi9jlpFDyez+07uUEruyYLn5k0iSA6oMfDgvbsne+HDm9m5QewBjsuRr/qFBMXGemkspwTdvPyWTQfe3zIM5oSr20+jzVvlOJ1L1WPYA/zYh87/4z/67IndniS6VOpCMYebHOCebAg3o2Gak05fW80PrCoDScByeJ2YIQ1ev8a+Qis1o6RsJADUysxadaVsjij+PuZyVe83bCii1SuulNKK14Qlxrrg2LDEqj7Qi0Sl9SAQsOIDd6RG+7NiXjSr8OMbz1//g7b5wq/96f0b2V+5b/3hnfU9U1w8yJ+9dthptz14hSz4C9cmm8c6mQ+r9u7xjdNSqkwIhvGlSb7We/VMxXfxpvCdwgfGWTwrmo1GBpwdLevT64OA0qX8C+IDMaff2Fs88vz0n/7Uh86vZ//6819LUv43/9P3n7p79MITh0X97eUDpzeHR7P6Vk9OwKgyDgBWvoCNMquD+7bH3duYqThe33wVskg88tw1AHhqbwYAh0WbrN342inGrTbh7cN0zjkAhGGg1K3r7OpqfCeXst1+vNkLf6gXd1JFnPWj8NLR4vT6ABDsz5bwbSAFvZCncTA/pme6noRF90o+kIQHeRUOb3z2t0kGAsJ3N7NHn736cz/z0Z/+wXf9ziPP/MMvP/3A9uB5l3bO/Nrf+MjRoviFX//01Xlx/pV8YPW6z87KQpqAkieOii9fX3zs7vVe1PvMi1OE0FKZ2X7RSF1rC94nIV3UWljvPUxqGTLaKfvirIoYyStNKUYeGEVVa622jGHAOA6o4KwX45VTT+SJc9Y4yGI2K7W17mgpE06ikKYR66TRxrXWW+sQwEJZStBmn09KY71PA6adW9Z6nAXSegDfj6k2zlmvjacECYqkBg9IOj+IWdUacB55P+4LqVxAkHUuizkCNC06ZdxaJgJGZ1Wnre8nvGz0IOFNZzihIUPKO4zQuM+1dkVnCEaE4q7WirlGWed9EhClXT/mASOzSvcDXktTN4ZRZBDuU08SJgUpG91LOPJ+lAlG1f7cxiGLBW5q7zC9++7NP/rdC9//Ebq/8Lvb6wfTvBdFs6KxjmSCK+0GCV+UKolo3RpKcRzRolIYYe+RNq5WLo15XSpG0f68y2JWNjrg5Nqkst47A4hAKJiS2muIAooAVc5HAV3r8TSi2rhFZYraxDFzHua52t5NDidtI13AMLPYWrcxjGznM95QGmDK+71gPO4vl83p7fVlvtzdyDzB2+vB5T3FBVsUshezA9cqaXshzWI2W8osYR5gUShjfRjgvDLO6/WByFszTujeUo0iYjwYh/oxm5Zqa8gb6a3zjBJv/TCiAL45OfrM85cHEak6jRDMln6Q6lYSjpEHSEMxDEUl9cb6oFiW4q5hErCVamFE0X6hOo36KS9a20k7zpgxPhJYMNwpt2x0K53WLgqo8W5WGgRoJcwaUswJKqQrWt0LKfEQCsEJ4py1nVvvie0mnlf17mggMGKctq1bLogIguWiGg7iStpxKkYJ31vK0GNpLTiIGTCMGmmQR5xhh2C9xzvr55XuCzzKwvWMzSuTV5YTBOAwwoIiQsA7O21tq30kKHjHKI4Et15nQVCUzdaZreWLV5KAHhWSICIo0gYJig4L0ku11HgtZsYDQUAJKlrDKdEGTo2DyVJyThjDnGJCvHa+lLbrnDZuZxxUjRkOYoJQ2k+ziEQBa6XFiHjne0HAMJoVsgvIoOe3h5HRdn9eMRGk3pWN3hwE+3NJCHLWW4oFwwd5JximBEntpPZF57OQGqdr6Xb6wnsZMqaNpRgU8pzhmFPlyNG8fOf9MYCrakkwGAvn+oFVMIzoUSEPSzlT5mTKK2030uCg6M5v9oyHWaOkcbEQ2ydP/MRDJ15atBhhbu1WxmdtfSrjyyUTGDNMnpl3EWNbSfDereFaVXyiKP/q2fVVvGuPmZFZ7znG1vtnDubK2kYbQclq4xllUdUohABeOTd8Oyzr9hP7ZXj9MBP0XBqfi+jj+3nwvPnz+/cQoNNJDyO0ishftTVIY1feYWl4Y34gf70cYnrHeeKmU9Z7gjEA6EX19cNFE7F7lX9eREjYU4LyiE3K9qho9paVMrCf16/SXLlwffrhh+66dTqv2tXEQqNMFnAAaJXhFN9hW3vx+uz5q5P/5d/96T/97c/V3nuGmxf2v4HRS5fOjtKAIIz8U7OmKabzrUGqj/ULXdybv+felycN8latJTc2tbxRyhsAuDYrHjq18Xa21O/iO4UPjHpJXjUefBSwedkggISzvJW7/eQv4B9ovZ8chjRbSx6dL6/nC8ZZg+yHx9vsvVTN9LfWkuy1USZnND8mHBQwcmsEKuFs1nQRTwAgDUTRfVuYyVovLtpub148duWokfqwbM6uZQCwyg4Wsk1DdLv5Ac5fe/uN+oC7zSAUAGymUczofWvZpUkOHrJIXJrkp9cH4yw+mJfhxhuru94qd3yTUXvAaJoE8/IV/Tm9gB1V7S0JhdNrg2uL4u7hGH0Tpg3fDM6eGIUBf+e5LQD4+Pfe/3e/+vyR0r/zX3zkyYvTj54/CQD/5JNfvDYrzh/rTIWbH6qzfhzyiJHfeuL6tOgEIS/O61PD6JlJmTG633SVtmB9L+F5pRglbWcoI8j7VhqEoJGuqM1axs+OkutlRxB4cIxhzkgiKCCUV9JakgR0UWljXBzQWNBJqRH4zUGAMTIWqka30nBGOEVJSJ2HsjEEeYLRQaEDRsB6QhEFSkBZ5yjGGwMhlVtWel6qlS9u2VmCURYT1HjvgRIUMFo2Who1jFnT2YhiRlBe6zRk80oxRmZNp6231nOOhSX7s3ZnHCpt5kuNEKwPgnkpi9owhrvWNp3tp6zqbCAIZ9g5Pyv0LJckFYJji3wg2OG8iwIy6gURJ1L6gOHc+ZCTNCDKuFbbUKCqM9o4AJDKbQ9D7/3hrOn3k9FoeGXv4KF7Trw0m58abc4LGQW0rHXT2ZUBcxRQhAEhuDppT6xFUUCXVcMwDBJ28aCxzk/yznpfHlhOEfIgBCYEhRwHEgNGsSC1tONBqIzlnGljrk9lK30g8HwpCUajPq9aM8jY0HmESNnokLN8qe7ZjKpaFR04ryzA+tbawWFlKLlwbSbi8caAbY/xMAuu7Ndbo1Bpl0bs6mE9K9UgYf2YVY2JE5bGLK+0VDbgZFHqSQ7bg6hRmhKkETLaNVJlCSMET5a6H1KHUKssRaiSZqdPg6Q3nS4J6JATTnGrkXF+UapIMEEBnMUAISLZINmf5lqfbJQBhAX2i86eWRPz1rXS9iJinTMO+ilTyrbKYYwHiRDMTOYtpySJ8SByFpA2vpG2lBZ3BhHknD9StpWulyZfe3bvwbtPbI3CZed6Ab80zREalNLMC4MxMILSNNRNbQcJYHxUqWEosojGgniHrs+bMKNFqwOORjG7NJEck0KZpjMEgwXmrJkWarMfKOuk8nVnMQLjXdV469FQEOd905mNXjCpZchJZ2yGvMVsOOh1UgUMBEWttBGjzllKCMEIAUKAFlJbA0mAWwmC4oBibT1FHgACilqA1jhfgxFeUBL2sbOQN3qcBD2D4ojfu9OXCDplOuUEJZziJOCtdh6glU5I07W4l8Rd1yURk8plEcWAOMUYIEoYI2C888C6Tp8YxQj5srGdtgxjZQGDrzuVhqRoNKe0UnqrHwFCo4BfzZJLV64G3GNGq0XBKamlvZp31tvDyrbGQoeMs9cLuR6JvbK7dy0+3Q/3SzVtFEWQpSFbTjbDux65kseMnl4LwKPGmrn0a0nEGRsF7D1b4V39yANo6/px6J2jt89tE4R+4r33fuLiQdGpwc1y9iiLi1cO3d6ZFZxZG7yrbM6f3Hx4nD2xKP/3Z68MPnCvrOSv7C+o9wHlt9toOmNXOv1lKxnGAX112LZqQOqFd9qp6k7Nl/U//LVP/a+//pmr0+Xk7Jbarya96MlrC011D4VVqz2A955TIo1bVM3pV6bbi7rbGL6ctr/lInyrX0hZGwtuvSP4NY5uAAAwyat/+XP/8cpQ7DNPXPrlp1762R/5wAO7azBgazT5V488uZ0k/8dvfy7bPY1e+UUeLart8cv1gWeO8u85ec/qeD+vdtZi6/ysbF47hfxdvCn8+8wHHhiuPzk/emC4HlERJ3SltJWFYl61ABAwstIAfWNe//bQGpkxOOX8z5w78fDO+FefvvRcj3xgdxcAHhiu/zZy1bc0Cn9tCJvFwZMX918+DUWub1zFUsFmTbfbTwBgs5888pWr8C3FyqJ4lEYHi+rTj1/8rS88/fje7Gq+bM0QABBCvVCAQ4zc9v8wCG4bu9+hPgAAMae7/fTSJKcEPXRq49qsAIBhL9qflWdewwfevgUBAKRx0EldNTK52drYE2xad7f4wNnNwW996em7z47hm+MYb4hhL0oj8Y67NgHAA/zd+3e+757BmV6fnSTXFuWJQfpj77334Ka423EcNTJlRHv/R88fhpw6D1fz5rCUxruEk+vLtpXGe+AUt8r2ElE2mjJstGfUJxFrO7M2CA5njQP03FGJADyCXkidB2P9olJJSMc9jhHMll0csNK4tjGYoIDjiPOmM9YBo2iQ8oDTWJBrk1ownDcGEDjnnfORoIOElbUuKyWVQwilCVnvMecgoNjHrJJWqRuT8Q7gcCkHMata6z0478OAdtLUncMA41RQjJOA7i+6zUEotUUYYYwGCZPKTpeyk/rKxO+MgkHKrQHnfKusNM5af6TsOAsEpR3xxgFyHgGKBG6k8wiwB2XdRl80reqUTWNCCTCMamkBQHAyKRUAxhiCwEqJBcOVsR7gqDInT29Nj2Z37fb9ya0vP/bkQ3fv7FfNXSMPGEvlcqcAUKtd26pOm2nRcYKNcXuzeqMvopBW2oKFcV90ky4KqDHeeddpixDaGQUYwbIwcUirRh8tuiwL8koLjg8XnTZOKjdIaMjZ3KtxxrVzIccc0FKZgMPOWhjsY6+99eC9xwjyUhMEaT8pFuXdD9z9yFcfjwM4yjXn5Nph13R2f9oEgmSpkMYv8q6s5DvvGZWtqWqdhJwRG3Ccl8o6H0cMgVvUJg6oUa7RrpImDkgSEO9cp70Fb6xTzscMTyqbhmQ46j1+YXHP2TFBaLMnpo3G4BH2HnDeWO/dziAai/EjX/vyD37vQ8OE783aVPAsotZ6a92y0ut9MU5Y2Vnw0Grfj4k2qFGGUjJK+WbG9grlPWDsGcFrKevHJG9cJHDZ6jSiASPTSZKXtfPgATppZku77Exe650sKipjAUXZYDDuz+bVYHODY1Qrh4ijHuWFAoQwQYKiOKDLxmiDRpkgDAnjnaDW+rxVnImTw1h7yxlupFs2xnvfC5n1pnMeY7TZF51yun0yAAAgAElEQVS201pK5QZRuGy7rSxulEuSBGG0PytFFCFts5grZRpjEUahwIWE7VTMG+UdWGcBIGREGk8IDihC4PsxYxTNK71ozKyRW33RKo8A1Y2WzhGMZFnVLKxauz0KNKxvLIqIYUA4Dui8lIkg3pD1cV8pXdRqLRWCYe0sJb7prDRukFDj0GafzSt0edrsrgdpQrqlJQis9Q6g1qgXQxgQRsm87tazEDxcmjcnxvEjSnNOB1l0uLcQFO2m8UHb1spnnH703PgLlxfbveB0P1o0uq3spUV7fdkp4wiCH7ln/fefeLpq1W88c2Sc+8jZcSlNrfV2GpwO+fNNc65HH9waYoQAAAEQjJKQK20RAmkdQcgcqw/cwjAUcFOjcwUEoLTtbt5CEPIA6va70jAUozjYDXhA2PvGQ7nd/c6//fTOidPl89d7p9fbm4X610UldSJY1am3YBC0QtWqu7aHf+8/+Uu9NPwvP/21n3/ozEYYfvXq4U88fA5C99BonWA0rbr9oioaXUqjZPuLv/PZ4ysUdbcxeNku4FZ9QN1MzCnjGEGXqvze/hheD1Urz9+1uT3OAOCnPvLOT0wWf/uH3wcAz+bTk2nyPWc3f/SBs+fGyT/+/c+/aoP86nPXfuC9H7l1Oq27s6MeANRKd8YGnHrvv/rS3t/6yLvhu3gbePs5yv9/YJRFZS3XB+l6lqymPCNGl52Cb1Fk9lrc0LY3KqRiGMaZYHcPe2d78cf66cMNZjdfNY75i9dmd1zpTeNVJGetHxfHdGbigA7CGwFxKtgtAdATo97822DfG1PWj4IvvXjtH/zqJ0+d2jg1TI9KddTZgIrD1hw6++Th/A5Pz7JX65+aN7IwW2EQBlduqP2gLAwWTffi/vz8XZuT14uPb4dvsjhwC+im2+UKvYBPblZmPMCyan/z80/f5qlvBdrb8SB89up+Z5W06j968MTVecUpGYRi0XYAcGrcz5uX/6ZPTcunpuVz8+qoln1BGYC27n1bGULw1KSojTmVRd5AxCmlxHnACCGMylYzhJwFBB4zX3e6F7DpvLPOd9KGgmCKMUJpxBB4e3Nsg2J0mHfLxsxLJZXFDFeNkdK0xhJKRn0xygKPUF6rZWvyzhwWspGGYMQxziLmrF0UqpXWOsAERSGLOV1Uylp/mMtGmZ2hYBg58FFInQPZuoNZp41zDuKAZhHdHkdJQrzze4u2VXZRKQ9AwDfSGAtSW8KQ94giFAuGMb502OxP21DgeaG09v2YJjGlDNedBuIjQZWyBAF4tzEIQ0E9hnHKhwlLQ7I5CHsRrxuzP5fK+rYzvYhhjHoRB/B56QhCAKhqNXi0M47WU94bZrPJ8tq065Q9dWLz0sE8JCTrUYIRIJDaWWe985zRQSoiTkYZ3xiFUnnB6GYvwAilEWUYCEDISShwL2KAUBAQ5/3eXOadEoQwwQklVa2s81pZrd0wYfecSE+MwkHCwpDOC7kR81AQTJAQzDi/KHUigpmsX7xeGeu0cZ1ydW084gfXjwTWddvUtWkbef1AJgk6tZ2uDSMhaC8VCHnOSRyyZSnDkAmGtXFCkKrWzvleyg+nzX4uY86KRue1ohglgladNcZaCw680s46SENGOR4ntOns9s5atSw8xgQj62GcsbWMF6Wa5d24Rz1l92yNv3DwEsHYqaaWZtzjUYAxgkK6VvlhSochXjRmmLBpocYZ45REHJ3M2HpCxsMg4lgIWB+SjR5PQxIGKBZkZyQa7TaHAaUYEDgg+bIUnIac9iL6wMlMabObDgyWlKJWmrp1AG65rKQ0+/MOga87Y7QLQiIYDSmeVnpWKkaxxyAImhWq1pDFeD1jd61Fi0YtKnV50laNBfCDmAeUlp1JBSaM7y3ktOiKWhedNc73Ar6opNReUMQoM9Z1sjHaxQHbW3SIYAueI9DaZxErlCEYLxtNCAaEMAGG8VGhGKMBo4LjotOEIIpBUHJtrjjx45Qupa47myRBUdaCoZPjUEuLvE+jECFDCVbGDhK+bE1e6zQMwFlwfl7qo6WaV1pbGCQUYzQpdCPNrNQUwaDH92dd3mhGACNgFFOEMHhjXC0Nw0QaU7dmmstQUONZWbcULAu41GZRK42tMQiD/4Fz43vGMSUo4XRSyRNZ8J7drFV2r5CHtYwYnUn7k+849XzTnRkEvYBNW3luEGOP372V7fSifsg2k6gxttKmutkfGwdcaUMQEgQjBK8lA6sRAnilp+9qLrZspAe4xQIIQrcrW6+aam6pA/3Sb392+8Tp/+ljDyadBoDZa/Q9j2PFQ8pWBbfnDOUdjYyKuhv14r/6wXfUnD60Nbx/e/Txd5/5yP07D+yORkmQhjwS7OQoffjk+AfPn/wP333mr33v+VdZKxR1t3GsrX9et7cUTvNWAcBR1UR3pCuTvL6lEXTLtWCFK3l5ctADgI+986x4zWc8mBe3dE6XnWqMeXFWAMBeUTfKMII9wP6i+q7Y6NvEdwofiAIeB/zhjeHpE2uzsrmeVztZ3H5zkeVbgHY2pCKkIqAcABCCnuCn+ikAnN8Zp4weLm9Ibg170fKbEIV8szje7rLWT46/RCx4JW9cOE4N0uLm8e6oN63uJEfzFtAYnat2iuqZi6N7Tj9yLV/fHP+r567+0jcu/LePPv3Pn730x3uTfXqn8kgQvEVD33vWsucmeadto/RmP3nq6tHZrWEvEmUr70lHTy6O3miBN42fft99959cO5y/zDfuGqbaWAD43c8/9bd+8dd/4V98orq6vP0CbxoMkQ89eOapFycB4QHhIxFbQzIhBlFwVDQAcGZj8NWL+502z87LZ2blmX50ph+NQ14ZizH69IvTlWcTIziidNGoP7s4mTZyGDEPgBCS1htjvfPKOfA+EKRrEACeFlIZTwmhBKUhc9aD9wihtnPe+UHKCYaqMwHBvZCFnKQRa5WtO9NpV1baOOe9n5aqae10qRppKMZtawNOsoj2EuadH/eCtR5LQoIRxAHbHHBlnfeobE2rnVLOOD/o8a1hIDiJA4KxT0K6lgiMfN0awYhULmS4HzNj/bJVnXZpSA+XMuSkajVnWGl/NG9aaaVxWtuVRZF2bpAyY13ZmLLW4GB9EFhrl6UCjMpah5xijAYpmxYqEhwQUtqPemKU8KazQSRSBp2yjGFGUNtpQEAxeO8RRs55jABRFIYsG/avXjnw1itjsyybL5shQwT8IGWEoI1hsNYPOEHb45ARfGI98g7yUmnrpkt5+agpa9tKuywNxkgpG3Dcz/juOFLKXpm00jjrEQC0naYEzm4m925HgpP1oWg6jQlMlwoTwBiGmbh0WLfKDgRy3ueVyXrifWfW98piYxQzzmvlpbbS2I3NYZ6XyFvB2NYaP39ueM+p/on1IItZEPJBFiSC9BKxtRalMZsu5d5hNc9lzHGx7NpOIwRto0NBREAxQlnCV13pCKFQEAcoDClDgDGiGDrtMKCrUzlMWdpL80VltbcOWm3bhgah2RyFcUAHQXBuc7jO8UYSfvTBk2VeRxwFDNed1watJ+TkmK1nYtG5U8MgZnBmnROHADwnUDlXGxcSZAD6AdcaWfDOgTTgnK+loQRZCxQRgtADp4da651BQBAaxCzhdJiIvOvAwdYweGA32R2yNAmqvDgx4tvjMAmo1m5eq+vT9iBvytbUygvs9hdd07mjXCrjAoI66Q5z2Rk9SBjG6ORaFHM6SFjV6VJqQUjZ2jgMvW69h1GPC4oEQ1K5opXLRnfGee/TKLh4LecEGecFp602g9huDO1OBoIBIGTBGwcewFp/sNScA0IoCykjuKhNPxTGuFKaVJCA4VllLk9kGhCK8Xhj9NJebiwcFgpR3EnLCFbaKOuk8QhBEjJKCResrKudsVhLmPNOG99KV0lPiI8Ewd4XjT5aynmhEEJ5aRjBCIHSTjs/TDhGgD3qRwGAv2st6scMIT8MLADaX3Tbm2vzowUjuM95FuEsYF/eXz4zqRvr9ssu4vT5Wf3irDkzirZTcaIXVso8ebh87LA6v73mPDbWbUXBrFEfPDm8L1urQUlj04AljK5+6hUrwKjTxjkPx+RBXwUEgAA6Y2/dO1s2AFDWEgEgBP5mGg7fpnFIMLpq31/hDz/xWH86AWP/+sfeg6ruyvzlRNJxdNoCwEr5o+zkHeoDr50APo5b6kCr3p7Vb0FIdBv7sE89fuHH3nvf8VuKVyqQ3qoPAMAqtVorfbvVAODS/nytH9/SCLq0KDfSlzf3ed2uZEP/9OlLP/DgmeMZzZW40FMvHaxOr+TVvJVPT/KLZfOZ6WIRe+3spCxrqbaGsXLfyu7r7zR8p/ABAKAEG+3KRn7x+as7/eREFi+/bcbADL+6EzG9qaizlkZZJI5uCkEOsm8LH4BjVYL1QXK8PpAw1tkbeZFh9AoLgu6V80NvHxFlDNN707UPn05+7vvv+/LP/8TfeOBkX5kHMfv7D577+w+e+/FTW1mFVxYEr7uCEG+xhycL2OVFlYW8UeZW6WNzmD576QjfUSP5LSMOeD8Jj9cHWC3/3eMXd37if/xH/+ZPl73+T/3I+zfOrd1hhVfhm+lkGyTR9ckNjrGbpVfyEgAGUbDKY929Ndybl857DMg4TxAKCAkpKRr9xauLg1pyhj5zZSaNuzCt6tZQjLR1e6UE58A5ABdyupEFaUAdeG0dY8hYhzBgBL2YhgHx3gMC74FiiAJMGcYIMABGOE15q20jbSvtKiDeGIaCEWnc0VKCh2Wjw4BkMV/LxPY4CjmR2nnwacwEw5NCLWudRDSL6bIxWUx7MdPGMQJxSGZLtay1tn4Q8+2R2FmLI0EaZSjFSUiP8q5W5tpRt6wNeMhLZZyb5apq9CyXBENeyMN5p40H5ClCW6NgexRGIZ0s5cWDmhJEGaYYjzLBMSIIBQGOGOqn/Nqkcd4XlWKULGvZaZe3+vqsJQzntb4+aerW9BIxjGnI0SgT6ylb6wcBx4I6D2Cdb1ujrU/TCHkviI05fceZ9dk87zHx9atHjbTeASPIWr8xDENOhymNGN4cilW6erJUZaMP5+3VScs5SWPWKjctdFHqXkRCRhEC5xxBwChJIjrOAs7Q9WnbC0lZ60EWYA/KeqVdzDHDyHr09JXy4mHTNKqf8pjjvT2JKfRSkcahqksAyFI2HPDhKJvmKgp5vqyTAHvnnINA4DRAnBLnvHV+mIkk4VHAhv0giijj6Ox2KhgpKzXPu6o11npK0TSXFEPIUNHoRam0cdpY5VESYK1cP6QYQRqzkLKNjcHR/pwREhIaINYPqMBsFLLT4yjvTBTQNMDjhLm0/7lnr+7vVxihiEHAwCH/0kRL7RKBOYFpbbEH6WyrjPHAMYoIOirUtDLGwGypnr9WTQppHXTGAfhxQkOKCPKTXBocLquGEE+xpRg5cCGlRdch5MC7AMMwCfr9qO1kocE5Gwu80eeBIILT3VEQRQxh3IvFMOXLWlatWdb6aCmPlqru7N5UKmm3B9x5Z5DPK5vFLA3ooMc2sqAz3mhtnE9DemIYRpw8eGIwq5teiLfTYHPo33VmrFWdxqYX6ThQgx5KMJ2X6MWprZTJK90XlBEkKFjvrYejpRpEeF7rzlmCCcZoLRPa+kHEQo6SgNw1FvParvcZEFK12gGKA1y0miBAmE6WXT9CDAPBILUNOIpCUbdqUhhpvWC0H7J+SKV2zmKprcMoFmQtE+OMU4zCgEhlnYdBQmNB81qVSvcDSjBqtbw27wCDYGi66FgsZnk9zysgOBX4Yt5W0sUhLjr96N5CW1+0dtLI7TQopXlmWpXSAEKnB1GP017IlbWNtrtZ+OxR9dys2khEZ60DTwnOlV4VByptVqaWgrPpsj5sb+ySr7UWXgEh1ChzizBMlnXWC5dt14sD61baY3CHFaz3CaedsgDwqa9f+Nt/7cM//1Pf/5Wnr/xff/jlrx/Mj8pm9ehXFaU78zIfqDp1OztkACjv2HhsnVuxkZUW0CAQ06rdyuLb2XpeOJivH/MDnuRVLxLHd7da6rvWB4JSAFh0ctF0AHAHunLpYLGyIVvhhWmxccyceNmq1cz0U1ePxmmk3MuaoS9cm/Tj8EtPX96bLvemy69fOnpsf/Erz175n5+6+I4kHlt0X3/t6qRECDimcEyl9Lt4s/j3eX7gtZguK+vcs9enAPB9pzf/+SNP/+z7X8GAv31IBb2clw+FIwDIQnG4vJFFHmbR8WHfby1u1QeKRlatDFMBAIngt3SEzgzTP37+2ur46qwAgKqTyR1ly94COCEbafSBs9sAcM9aJjt1dpgOBQeAu6NoGgp0+66clb7QW8BGEn1qee17Tow7Y26VPk6s9+d3lOQ/Dv/m6TIl+ML1KQD8wRef+c3PPfmHn3/6xLnN8cP3/+LH3/Oh86cOl9X/+8yLQpFXWZK9HZzZHn3yi8/dOh2GwdVleTJLY84WTTdMIs7oY3vz+9YHn7sye/TSvFTmUGmkfaE0pjjfVxEniKCQkZCRZauVdZRi74Fz0gtZZ+yyUdp4TonzPhCkaW0aM299zGnZmlpbAEAIFa1JIlZLV3e2H3Np3LLSAafS2DSmzjPn/N6kSSIqtSMERxx3HTCKjLWEYIZ9q3zIsUfQi9nRQrbKjbLAGN8qm0XMOjDGDHtca+sRKOMwglhQTqHTaFF2g4Qv6y4WpFWOcUIRMsplCZPaFY022oFHgBDCKOCEUTRdaiEIwqCN18bV0lrrrXGEIEFJFFHnfBaxVppW27WYGwzG+l5MCYJhxjkmeakph07ZZavSmKYxCwVR2vR7/LBQiSCtshEnCUcOxVFYdgohhKpWcYa318L77tvNj+Zn7z81LzAlOIvFC5P8Xad3PFgPkKUCwE/y1jifRTQIaKvs9ii4ftSGIW20qzpjrFfacobXUtFPqeCEMXCd5xSf3IpTSmgLrXSXj9qmNXVn1ofhvJA25ptDUTTWAowzDoAOZw0m2GvoR7iWMB7HduLrWlMK2rrTGyGjeLJU61vjvb2jNIqmy+q0XgMAjGFWyEESxALNl2ot4855wfDuRtRIK423FlEM506ms6W8dthQgmd5i7MQOT/PpTaOcJIKWtb6ykE1TESc8DQiISGe4JgBRuj8uc0/+b3PhQhyqRNOFq1JYsOREQyvUf/Ssnnsev4NaSOk9qf5qC+uH9VhzIcxqTu02WMB8a3x3vu1iLYWMIJZZZWANMAIIOA4r9TmIGTE91PaSsswzAoDmKDIzxuVBMQi1AtxlkaXD5ecR4JjgqEXhfvLdpDRotAEI0FsvxfVZbORIExpSDDyfqcnDFgEZDtge4suYCjgaJgEReO085QAshCEeFnporNFa6X0StuNPq866zkdBsxabwaigaBLgFOFGWq8uzzJO2Muz2frvVC13AXZk9944n3veigVtNEuZCIR3lU2EGSy0ABwadZp4xaVt85zirZG3FqIQxAEHciu1mY95YkgStssZIeFOqrMIKFV58fD6MILezGHRW2984DQsm3SSLxrPfv6YcUIIghngaiboJMaYdQo02obMJKFNAoIwqhqUK1MaVzVIU5xKAjBUDYmdeAsDCJCEIkFbbhNCv+5FyaDfnhXP35sri/7pjs1fi50i4t7COGj0kTCI4RmtQkZKRrLMHCGJo26tuwoAmlckASHZbuWBHcNk8evkyuz5YkYPZtLbf1uL1DGeeQDSrKAEwcM45UnAMWo1D4JecDpRvjyXNkNxwDn+LGMfqP1Ks9CEHomnxyaqqYaRagh6sVqvnpc57Sx/tYK9qY58Y3rcxyUnVpP469dPvjR99/3sXee++H33fvBh8/+N3/0pf28Xu3Xr+IDxjoAaLUFgPqO8wONvFNq/PLB4sGzW3CzbYliVCvNKaH49Xe5Fw5mf/n+07dOjxZVloSHi+rszo3ZgEXVPnx666lJjgDyVh3U7VHZmJsUSFqtvBXHtPyuTfJ3nt2+dbpo5HYvAoBn8+lulF3x1UqF/OuXDn7mww/BMVzcm/eS4N/88WP/8g++DJQ8Ak4o8tXDZm+t/8fdE//gh88jD1996aCR1iH0esYM38U3i+8gPtBK/Y2L+zSLylZ9+cL13Pn2bchrvlmcGqTXl/VDWyMA+PxzV99zemN1+zCLim9PfeA4epE4mldr6cu9+IWUPSHOjbPDmzMDq4nbw7xONr+VfIBjAgh6oVip3JzoJwBwenTjnfRu6hLc9umcA4AxRinF2XFu8AbZ8+1eZJ2fdrof2VUKpGi63fX+9Gan1hviLRQRPKCf+5U//KXf+Oxf+fD5YiR+8j//6Ncnxd956K7xTvzscgoA73/gxIViujt+hdnNbZZ64zcQEH5yK9ubvdyDdM+4f62oTmbpei9aNN0gCna3x8TYP31p+pVLM23dfVu9j58ZvzCpnltUAcb7y44CQggGgh3V0gJaifoPUrFsdavtOOB7VRdyXCs7ToNOmUDgRaEwRmVjCMOcYUaQMd5aJ2JWtTYStJbWe6AEAwBCN1q/Z0vJOHEeZQkz2h/lklPw1nsPndKzpRachAEF56rWKOuSiOWFYhyv9QQgdLToNodB02ljfRTQfsqltFLbotVS+1ZajLW1flFqTBChqJdwqbHzUCmbBMRYvyo+SGUPph1nmGFkjQ8DoqzOS80YXjknEIzSiBWtXu+JRS0ZwRigFzGE0axSo1SUrbHWA7W1sRsRzyvFMS4b20943RkMgJBfT9nBUlOCDhftIBFlo6z33pMooHHIBMMcwfp6Np0u78MkCcnpE+vG2oAQpXWn3LxwZWPSiHfaJSFZ1Jq0Zq0vQkE8AGM4RKgXEUbx4cIZ62eFVMb2YnZiHKYBOcgVdj4JCBBuIt919gC892iy6ISgOvRlazFGrXbX552UdpCJutVrw6iWjhK0sybqJ+Tz1+Zb4zSg0BmcBKSu1Nbm4PLlQ06i6aLSDjgh1oGx/tq02RkFYUQDRspO9zntLDCKZrkU/SCgYACNsyBL+LWZzJeyqdWprWRWSGVtL2BN50KMo37kASKCBhErjEYA3kHIADDqrfWeuzLZ2BzW2gaM5LX0LkwCrJRPGT6bRI9dPvrsdFJPJ2sZF4G/fNDUHQ0FiTkpGhMGWGpUaBdxxDHuxyyvzaJQ1nvBcCQII4gS0knLGMk7G4asqNXewsQhGYY4E1hrm0aiKNv7zmSHC6U9RJyWXdd0VlvCKC41EoJQSq9Ou+1xrKQ13oWCdtLFIfLeb2YiYs4AAkCIuEFEVoYAEcMmpItCKW2td41xrbbTWjnrA4HzWpetnRF1baGfWpCFtoQg7f2klZ/5+n4smAc0L5okia11q+KeM5aGeBDzedNtDnoYg9H2qNCxIJV00tjLR93NANVThBF4jH0c0EWlk4QgD9Y6ZYFiRLhoG0UwogQHHADcdUqWnZqpbqNPj0qrZIDCOosTqVQqSNHcSIg7cKEgUttxxpuZYwjSmAKgeakYQQjjgOJRwgRB807lrRcMpjmKSfT/XDh65zi7P+2dMfTKpdmmyMYs/lInMQJrvba2bL1gOIvoKBTgUanV3YMUY/TSorlvPbl7GFfSfOV6vtMPN3rRO3ZGS5eXrS6l+WdfuvSX7h6NYzRKg1brDRJZ7ztja+1DRkdJuLItf9UFliB0nBKUxj0+nacvkt1RjDrGaCJL+NwT15Ekd6dDirEHUFa9VBbHVzhOCTjGi1aWnfq9R5/9+R//0OrGwVrPJ8FXH7sAf/mh117z9Q0+YACgkTri7FUbg7RaOsMJq6QWt2/XaaUephHc7BSKBZtW9Ub6OoL9q60nb+RG9nI6f7qs00gcLV7uhv3dR5/9uR//0P/9jYuIkLnUX7h6VCH/fW3hvFdWc8Lglbv6omgHvWMNQp3cvqlftDJsXU1W5E33qjGAg3n50ffc/T/87McA4DNPXPJPX/pHP/Ae4uFXf/eRz1649N//RvPLn3zyyWvz/+r7736z+bvv4lX4DuID951a+z8/+Sjl1CbsN+flM49fsfgvjg+EjOY3Df/+s//g3b/32PO37urFwSSvjpfSvuXI4uBoUZ0/BQBQSRUwWkrVE+LCdAkAF6bLc+PMKTNZ1ofL6uzm8A2WezNQzmrjklA8dfXo/O767iCFY3wgYJRhXEt9O0uyV/kTa2244KuD1338LexkcSn1mWF6VNSnBr1xEl2dFbvDHgAUd5zcejtQHzybfvGZd370HX/vpz98dzr685f25fLF79vYumfQBwDj3APr6xl6Y7XTb4YMrLBqx5wXzepgEASLVnqAmLOiU3kjv/fs9v6y/uC5nRDjP7tw9NyknHRqXup+yvaXbU+ww1ZJaadEaecTipYEykYHGcEAgpOrReOcJxiSgDZSV63x1hMKxCOHAAMiCIxxSchGGQeALOVlrQOGlfVZTLWBRtqi1owixvCJUeiQP5h3oaBRgJOQNdJihJSGTllM0f6s3V2LJrkMA9KL6J51oSDSuLzW633BCCq0DwWxzjOCHfP70844DwAIQeWNc54Q5DHyHgD5SLBWWWS9xUhbFwW0ag3CHmGUhpQyPC9U0xnGST9mCEHTuTCgIcWC01iQWruVPXAa8s47bJBxXjkP4ANBEPhEEIZQloq6Na0yexONEOyshQL5RevigLSdMdYfLLosJtaA9xAEBBNU1nJh/fr6+KknX8Jgu6591/27F69d7yHSdqoXBCszsrJRBCOpXcCI4CTkpGoN57jujHHee5/FlGA0SvlmxqeVyitddQac9xauz7pYEG1wax3FIDgJOFkb8Mv79eHMj/pCUJxwXNZm1ONVawSjR/N20A+VA0HxfZvjViqCEUPIgytb1O+JYbL26JeePv++jZeuX7fWTjsYhmEvbg/n/ihXg75opCEYW4Q48fsLFSe8blQWhspa56EX0q0hcsZtroXEwdYgXDYyr7VDWEmjraMYLxp14cANE7Y1ChGG1gBGfntnVOb5cBDzOOEhX6MAACAASURBVBAUCEN1A7NFa7tmb1JK1eKLh/OI7Wzu7M0KFsRro+Bw2mGEOuWSkFaddQKlnLTG1tbMcmkdGmbMKF9UamcURARaQZeNyQQpamU92sj4YS4TTlqNwPv9wg4H/f15MRqNT4yCSamk5ReOFvfDoN8jsvPa+M31cZZFzHTLStw1jrW308qAh1b6WSW3+oEzVgJy1mvrpXFt5wQDZVHCiQxYIe0oZqGATjptvbP+qJAI4UGK/BSSXpIyrmrXgG27dsr4w6e3793qUwKPPb//uW9UGKF5a7CHZWNSIepORzzJ22IQpYKRkFlOMdPOAISchhx10m5mbD/XvZiWrSlaIxC+NjUIkPWeU1RIy4KgaaXRRFAwDhhyqaDX5/XlubbOh5z0QmqxSkIKAFWr0ogb7733R7nyCNKQ1MoHFBetaZUUDK2u2SFzlMFhKQFhjIEzQqmPBVnI+kfvu3s95l+/eDBZVNWk/ZOn/pwQ0tZtFvqAskIZY9xaFtTSauc8oJjTiONZrT6w0z85iCqpv3J9qZ2fVLrV9guXF5NKddbtpIHF7mQSNL4JGZu33VjHABBSsorXqWCUkLzuktdI+HOMlXPOAybo2qz47OPoiRcWGCBg9MXD5ZcL8+JT+zPtbpdlh2OUwAMEnDx+fXrh+vR4a/4qTf5nX345JDgOZZ0HqJVplPmTp6+8//zuE/vTIIYr1WIjTOBmewwCsM61Sjvw5PV2j7pTw5vhOMc4oEQZF9xeYnVZdxv9l9nC0aJilMyLem+6BIBPPfr83rz85T9+9JN7MzFMfMh+cjB89IWrW2Fvvy0oYa99B4+/uPfXf+g9q+O9oh4ea0OopL71Tg6X1em1vjpmPvDIk5d+4W/+0EqV6KPvu+cTk8X5ndF6Er7vzMf/7VefvXu7//hzh//sU1961+lN+C7eHr5T+ID3QAj5Ox//oBH0l37/c0996aUfec+pT1+49kbPe4s4rl+5iu2ygD99uFjduzNIjtv4DZLwaPFt5gNJmBdy9ZYqrZWxMWF70+VXvvHSN/Znjz1//b/73/7gkacvv++encPDJdz7RsvdBuj1AtmV5Og4i56+dnR+d70X8oDRS7PiFiUIOa2VDsXx3P/LOM4HlFJvapxgEPGTg/TyNAeAYRpemxVg3DiLr0+WaPAGDvNvDbtX82Ev/K8/8M4HBusA8O7t8b9+9Pl7bmY7KMYfecdd/+JPvvqjH7rvdb+rFb55MrDC1rD3wrXJB95xCgA24vBr+0cAMIiCp/dnRATU+8cu7v3RS+VuPxSMAABhBIiRxjXSNtpq7TFC2nqlbOnBWe8AjLFckKo24FEWMWlsWSsA4IRY5DEGwUmrLGdoZxwCIISQcYYSWrfaOx8IompTtl5pE3LSeaS166dcOzctJEaIUzRIgsOFJNgjjLy3QhCMIBC0UXacsWmpk4BGgpaN9ghlMW+l+f/Ye9MYy9LzPOx9v/Xsd62tq3qZ7lmaM8MhKS7iKlILKWuxRcdWFEH+kSg/7N+JIygBnAAGDDhBAgQIAsGIoB+y5SCKYlrWEkuOFoviUCSH0pCa6Vl7ppfq6lruftZvz4873VPTnB4Oh6SCyHzQKPS5955TXbduf+d93u95n4cSHhACwKLUecKziLbagfORIG3nCQFA1DZIicH521PlAyBACGBdYITUnWUEkRDr/KI2EaejQjbKckG5IHXrlHURJ4wSY10kiEDQZt1975YtjThlDAQj1uJ0pYuE9VJWNm7V6s44Z4OyHgJcu12f6fPWYdO5EIJ1HgCP57pXQBwhZ4QSzGK5rDueQtEjnVltDOOA/Dd+/+A9H7h85XDy3t1dF2B7EMckEEYgBBdQ+1A29njeOo+9VMwqgwiLylKCyvrWBhVASDaSFJ1nlNycdNeO2kfP5sKG2zNdJLwzjiLdHiUHJ3VVo8jFpDJ5LCQjTpBGe/TOWaec7zG+XWQvHs0ubseTSZfxkMaYJbENESJkaVI33WSp+ylbNB1n1lrQxo8LsWjc7kgcLdRWxnc3YgLBB0aQxBwhhJPSNK3t53y+0qWHWttIkiRiq8b0MpFJrDUkEqvGVsqG4MvG9XOurI+T5Nq1SWmTbn60XJR13ZVl60PIsrg/KPJ+/KFPvvfzr9wcE3j6hcMPf9/DEcXxMD6aNGkiFpVOIz4tnaCun3HE0MuFMn5W2c0et45q5xcqTMpumPFGuyJCIngqSBGxRjsfwDhIJeVc1k0rGHbGbRey1a5UehBTAGaIFQQJY1kWV2W7PRrcKpV1PuMcSThedb2EV63dzKn0cHOhWu3jHrfOR5xOSzPMpZRYRBSBtJ0+KbWg1IGvle8nyBC1J7njBGCrH9XaWiG2e+lmkeaxXCr7wDh6yjfaht2hwABAgnWuF4vDlcoitqxsntI0YhFHycSktP2ENl2IJVm07sxQrFqXRzSPeKdcW2llLCIGoIhAuGzqThAzq/wgZSdL7zxUylTKehcYQWVCFEPZesH58ax6cG+03RNlaz1A8GFeWUqwH4uIImfUhBCLsNuLT2qtHS5aB+CAYET9MCNpxPf6xbKqB0K87+KZccH+rM//+Mvt2f7o5GAymeu9M7Ft/biQfU6sCdNKD2JxXGl0odHeuurWqmu0QwLjTP7wxfHvPP2csq4x7tMPbjAKtfY+BOX8MJI3J1XKKJ5SBAWALBZKmX4aAUBn/WmLoTUlAIBHtwZ/69Hzn3no7IMbxdWT1bO3Zr/q1NZm7w+fffnNFubXsaYENrheFNfaPPXcjc++//W77N02+cFkua56T0NZf3vVvjhd/ZvF8t8czf7vHv/vCH704a0zSe8eEnK8rGPByX3uHk2n1/sDi1avjU21dZzR5xeTy29mD7psutP7A8u6gxA+9yfP/PJvfxkApmVjtP1nf/ryKgr/9D2Xfu6hs/vL6ondDUkJAJA7kQinL3iyqC5sv7YxfrBqBsnrt/JGm4gzALg5XV7cvHfzfP9keddcCAAKKdYW3stOXxgVm734U5fP/u+ff/oDD+zob/im38O3hL/mfEAQCgDPzI4Rw6c/8NBLB/Msk7Hgn33X5vc/sPXF64fNW5r+fkewrvw2sri84+Sz1UuXd0b1L/fGG/3sWzLBfAfgjL64f/Ku43HO4y9fufH167f/2f/1eT23+5MV5fQfX7n50Psf+6Uf/+D/9gdPze13ZTx/u5/dNcIfZ9FpPrCRJY02AG/OBxhj9xt4+qa4aznKKD52dvNwUYGywyI5OFn+6MXLz8yPHz8l4v/GCIK3KNnvh5/+4OU/+cJzl8+9NjQ8SqONNFpvv6wfiQX7wpUbf/Pj951a+Va/IwB83yO7rxzM1nxgO0vW21CDJGoBz2ZS7Y5/7U+/vvPQu/Z68cuTatqY2vs4ohEnQhDvAanTDqzzcUQzzie1hxA8IDhAAgyh1RYQpaCcEcnootbDQlKKynhAKBvbGY8I3nkp/c4wvjlpWu2EIMFDABAMBYMkEr2Y7U/bTtt+Gk1Wyli+WciyMyGEgKSXUes8RZQUrQ8cERAiSVsTvHORIMYG530vkdNlS5EgwKK21vpRL1LG7gxFL+Wr1kxW2vnACPHBA4DzQAkGCNYDAiLCRk/Ml6qzIUlo3dlWOWyttbwzzhlfgV0HrmkbACAEQAQAxM5OPXKGecxq5RBg1YLz1Fo/zLmxfNkaaB2hSADGvajzWCtjtJ+tbEBPAZzmZ7aAoKEIASBJ6HzBev3xtavz/gbEcXz+zCZVbrnqtp6QJ3PdS5i14XDWlK1NYxZHzIcQAKUgjCGFMEjFsjZ747hz/vaicy5o69OIAmDBgBBYdWbZGO08AmYJpR0ezbu9YRzvZS/dqOrOjntyVqmTZdfLxUbOUy6uH7ejYQSIZ0fJ0zePDATPkuOTOUuKIhMRJw8+tHfz1Rve+VEaslxiCNoFxkzd+qq1qaSryoKH5/erPBd5zFLJtbM8gEXoJyRmfFqaIuVVZTzAZKmksBuD2DgfRyJNUFvvgt0expxSziE4qBvX66dPfeX551/Y/8QnHt89Ox73k6jHE5HbENra3DqckCzbyNOHtoesaw+m7UZP9hNCh9H146afC86C5CQRdFqZYcoJwa2+qFpnTZCSSkojBuNczivdTxgh3GC4OdepQOfRAQAG60KaxFdvHEwrzZlEYouEUcROM6DNosY8Zgz9YJDfnpTphh0V8mSmXQaFJLv9WDlPOJS1OW684LSfsgDAEBeNNcYPsuBtmFV2HJNl7fdG8dFCKRskI0XCF42RnBrvM8EIhK2CN8Yr6xAhi2gq8cpcSs4k88vWKO22i5jxcHuhtXFpQlvjuoUdZIJTNilVGuHxwpjgzw4iD14bLzkpW1e2aiC5dSGLGWOYSVa1BAJDABJcKmjVuUFC6hXtrLMeioQr643zTAQpaBwJrRVjoIxzIbTKUwySU2NDbSwX1LigjR8VYqlMLAglIBipOut8YDHxAIlgLgROKCEEKTYK0ljkaXz2wo6qO6N13VqAMCn1ihNrPEGct3ojERGjl4bZA8N0f9Vcm7UbmTiq1cmqIwjnc9a5wDk+NsorbZ+flGfHdJBE1/zq7j1lXakTRMaourPn/I1+o2tEjG5m8YMbBQBc2igubRSHNw6feunWCwcn64u8xdJNEdGHtYXO7/75i7/08z9x+tkzedJ74oEvP3fzs5+4lw9MKzWQ0a9+6Sool5SwePLG//rC7Fe+8MyjmzsfOz++fGb44GZfe3NjMj2YV4v7a4/rTo96KQAsuzt8wDnJKLzZDb/qNADctQ8CgKbTH3n8wvsf2Xvsge1nXz38wrPX/snvfvGzT5z5s3n1xM4QAJZNl0fiWrW43B+/qZb3ZFFf2HlNenBUtQ+dyhdbKj1MIgC4OV2N8uR191aAZ1893Nt4/T159mj+wb3X2MvNxWp3M73cH0MfAODRs5undxW+h3eA724p/P85TLDPzU8eH242Vr3Sy/7oz6/+wCNnJKPnxsXa/fNuOu93FQiwmUbzzqyrvUQKAKiVTqVglPTT6GTxdkXt7wy9NPrFX/qdf/n7fx5H/G//wLsvn9tML2U/ffHyl567+U+ffvl/+cwHfuDxCwBwUjfvOKL4rQvZvX7+r7/y2thrX4qrJ8tPPfxa/LhgVNn7in8Yo957BLxTn38LWFuOgnW1sh944Mwv/7unzuXZ9qg4vI+z27ePh/bGaSTObr4uf3zvmfErs/LBU12fW9PX1aX34B2QAQDYGuZ3ZZ1rG6tK6db4xsPNVfvA9ijPsp1UfOHalFGyHqntp3xZGUIwYmRhHCHog1cGXABKwLsgGDJCrPOANOKk7CyjNBK0aqwxoVEOERkjAaBqXZ5QRnFWedR+VmpAPJmrYU+mkqwaXysXCTKrtLaOc8IMSSRJ4xggrDrrAQhCTMisNbEgjMHJSvdz3s95CGFRGWtdPxXOu6ox1gXKSS9nzkGj3KgQRwtf1qqXCW1D2fllbQlBCLDZi4x3wYOzHhhR2jXKI3hAPFoo78EDVK3NYz7IBUK4Pe+KVEQpSkkFJxTJolYQAqGk1eskADSNsza02nbKJzFrOlNV2rhwhiSrTjFKCIGtviCMRgKPpuZk3p3ps/deyOaVapQnGBgFcBIRV5VKIlHk2C/Sa68ejRs72t05vzV+9Wg6sZYS9D7MVrpRdtU5TpERqFtjbGAUI0GnK2VdYAyLhPcz2Rkbc4oEVrWxPpSNaZSlDIMjRzPVeX9mFFnjTxaq7dzLh/WZcZQkrFNuudRxSgGIdTCvbTHgRRHdPGqGPZFFqfa+btvNXL4wD1CaurGb4zTv5/tXrtkQnr8+/8gTmfcwXelxL3ZWT5adNsAZ8SEo7Wrl2pRtjyHiBAGNdjFFHcK4EDbAzlg2ht+eYJaKsjEbw8hDaJWfl5pzkkdk7YAUC1KkvOnnzvvHv++RsxfP7mymbauFdMvaxpJWyu3ujmezhQPYLuKnX7n2nscuTVeqUXRZ2yji85Ve1XpzlFStZoxQAo32xkEkCAPfKN86HzFaK9dPeGu99TbilFJsDcyXbRwJY60QdHcjf/KrDQAo41aN72yIGJ+WbZbA3jifl/b2XLng21UjJSUQOMf5qi0JntvMau2VtqmkOz220hAJorSnDJdLO+5zRDA+tNoJIEVKb88640IiaBHzVLJZZfM0mSxWjPQI4Elldvp8t58vVXdjLs8O4tEgt96XjdrbiJR2K6WzSPQS1plA0AjOmtZPSjOtTPCQR3Iwop0JZWfyiM0a2ypXdTbiNJIks2yzx48WOs7oovU0+CSVk3mrWTzMpbGaAEhGW204RePDOOU+uExAEom207emHUXsjCOIiWSUYkuc0l5rJzijBDjFjPPWOesCACaSxJJNV9q70OkQvOeUOO9RYyDoPSGERBGvymZZddvbuDdKDqfKORilclqrjSRadroxbtaaG6vWWr/S1rmw0ZO7EfUBnj4ut4v0wX4GBM4WyUuzqlFuhUq7N8ycUkQbAqfkHnu907p/iuhDCAC55KdX6Ugw1WkAIGvd0f0ZgQsBESHAC/snf+fDj93z7Ls3+xd2x197+eCnPvH46Us8v5icLYrHd3q/8Ml3P/fcjV/6zS/+xz/5wV/49Pv/6NUbT37x5V//ylK7lyplAKDV5ms3p7/4mXfBfVB3eq0pnXcq4xwAXAj30wsdLate8gZd69ev3v57n3n/uk//2APbwMjul5755OW9m1dunOtnADBruoujXglvXj+szUbvHk7q7twpQcSqU1tZCgC3ZqtHzoy0t3fb/FeuHX3k8Qt3X7m/rHfuuB4dly2VAADP3jzeGxXfWnHwPbwZ/przgZTJzfg1zdyZcaGN2xZ8s5fujXq9WMSC3k3n/W5jI4sbbfCOgUAvkUfL+uKmAIBz24PvnsXQGpd2xw/ujf/hz33y537kA8rp46b5yuFhUsif/aH3LmLRuxNC/t2IKF7jzLA3uxNucGaz9/LLB/Cx19bEWLDjVb22HP3GhGBKWZIkq+UK4Fsuloex/NrBZMhpLJhS9l/8qz97/6Nn/94Pv+/fffWln/30a0GG9/M5fWcYFgmjeO327G4jZDOLT974y3383JZd+mfgu2Ux1I/EzVV9Una2rn/7Zet92L548XbZScFbY2NOGSWNMtNKORc0+nULPBIUAL2HQU9OFnq21OO+pBQ5I5023gflvG19AMhTLhhptVfa5onoJbxsTQgwylgkxPGyKxLuracEvYcQoOmcYbhRSCS4zherGhMACEHOSSqYJGQOYR2qtapsGlHJKKdwvDRZRK3DqjWE4KgX1a3pbHAeW2XTiB4vtbZeMmJsWNY6c96FQAnplGmNc84PMum8V9ZXNuyM5GSptXZZxCgEpDSJaNmYTltlgg/gvN8cJseVoSRwgZFghGCn3CiX1nmAMMyhVd76gOhXtYkF2RhKZ3yrTCJZ1VjGCOOMASxb3M4o96zoJcqHhQqrSiPBTYnTRbO7kcSSLyszSIVI02efvab+/KUsT5Is3nhga5zH87rVFg5m7bgQFzZlZ6Bq7TDlNkDZ6LIxzoGUdLLU5zcThp4Adtr1UxbF/OikJkhSSSgj2ngGuKzNjeO2l7JxXyDiotbXDxvB6fY4Hca06uxspWKJgjPnYFEqALh11DBOjXaTlbpwoTdI6aSBrb5UymSD4uRofvaRM95r70kAtz0Sy4oUKacETpY6S+isVB68YCyJWFnbjmISs7q1nPLgsQveB8g4ny+7QS4SyYYZAQCl/bwyRSKyhFyf6d2Cj3NufSg4IRuF0fahS9u7W2kIWBksJHiEVet6ubTGBB9iTo0LS+VTDocOFnPNCGQxFVIa4yaLbtSTqaA3Z7qfUBdgWRsMkEgSnK+1Y4TUNqScBgLa+lb5LCK9IgIAQNpoB4GGEPrSTUsPHopMbOTJ0bI+uzE4nBnGCCEsSeTNFw60di2CD9BPpfH+YN6gxySirfFnenzW2XkVAvjggFHghEyWOhLU2gAA+9N2py8XtYUQ8oSelPrcUM7qgACSk40e6ztU1gOQRqtxzpSz2sGoV9St4pQwilXnVGqVIRs90XkTMexISATtjG+NKzvjvWOcIoTbi857iATtJzISSBAkg7bzg5QcLTVDDEhkJGaLariba+MWtZWSDmIZ8yAZ8cop6/s5qevQz7NV3caMUEadD71EnJQqk9TagBCQIgAkglWt7UzYSrm2tmw1Z4TRUCTMe5vFjBBSxJwSBMTOeGQ0hJAWxcbWkDrXanftxMSCbiRyUesfvLjx9cOyNaEX0XP95OuHy1o5yrDRjjBslEklb4xhlFbKbqWJDeFDu8Onj6f7ummMXdeOd+8nFFFy1t7Hn+c0MUgEu9uXQoAijdZ2IHj/4ILTEIyGEP7G+x66p/Xznr2xXza//OSV//Y/+8w9p7TG7hbppx7cmR9MOEI7XS7a7rG94Wf/8x+jBAFgWnVXbk+efP6GqmY7/dfzwu5B05n1mNldvdBb4GhR99I38IHTah8AWLuDPLA5gCs31oZFnbGJ4KVWb9rVusds9Cv7kx975Ozdw6NV88jGEAD2Z6vt3hvqsf2T5en9ga8fzv7B+dc4T6n0JVkAwJVbJx956Oy3WB18D2+Cv+YD2ZXRCZONVQCwPSrKRm0PckbI2VEBABtJfDed968AmWDHVbtudJ+OIJAFX3zXJlzXePjseFgkm4OMIMZMbiW5D24gIwA420+fuTPY8O1EFL91935vlE/uXPlsGv/zF15nHZngnXX3sxyl9A0NDER8++kBu73kuePFcav/+997+hd+5y/sZvwP/vZHP/f5Z164dfxiOUXwawZy9883ux4AfHM3s51Rce3w9cTlvV5y5Whx9zBi8r0Xtvbnrz9yF+9sc2BtMfTS/sndR8728pemq3//yvLqCnYyuZGIuq4HuRScSMaUCZNlu3/cUcTtgexnXAgaAvSzyFrIYlZ3PpV0HRlmXQBEZUOWCEkxi1jECGek6qwyzjrotHUAo0I6H2oVqs4UCUs4bvWlZCgYCQDGBaWd9X5Vm3VsWSQZY6RTXmlPCdTapRHzIRxMuyxm89ruT9pGOWVcp13dOYLYzyVCWLZOabestOBktjLWuUzQfia9B0CytlixzjGC1oW6tQknJoR5ZbwPbeMYReu8d5ikQgpqrOvnghDSy7igmAhybdreOmmOF51xXaPs8aKbVfraUX173s1KU2sXx0xw0iqDJFgfnAPjkCGWnU0E2+3HGzGXkihtkojGWWScR4TJQjUq9DJeNWbYl53y06VKJQEKF89tBB8++kMf+vGf/vSHP/IusF2P86NFgxgwwKLSt6cKAijtrA+1clnMexn3wStttfHa+UWtb5zUghHAkHIklPgAVee0dkXCNsfRmUEMAHnCA74Wk5QnrJ/zAP5g2t6atp0NPoDuDAAUqdgeyrZz2oWtItMNnTfWOh8ADqdtFrHxuE8QtgbF8XR1Y1KXnWOQZLHxEDxgLIk2niOmMUcA7zxjwBlZdS6P2eG0tS5IRon3qrXW+dlSOQjGgvNhXuk8oo1xLOBOjzMK2sOktJ0Pt+bK+3BhbxwxUreGErA+AOBmwTlDEyhFGEXixWvT6bIy1lzYTLcGIotp03kA3BxGw140mXdV99qke6e9pNhpq22YrMy1o0qb0Bp/WFqOJGZkXDDjMQB0xlsfIkZiTvpFMi2bRNK9jTiJSMR56+ysMp1xnXF1Z9MiaZpuMmtvHdeMgvY+5mRUSEJxMu+Wi7Zqfds5QkAyUnWWUDKvtfNh1TlGQVkfMbps3EbGBadHC91PufcQC8FoMD60GpCA84ESsmh01TlOcJASRrFtOusgpmidn9Uuj0BQkgkacUIQjQ+CEEqQIC5ad7RUnYVezIc5DxAYwXll5srnUkxrTRlPJRrvtQ+RFFXVdspoH/JEgOgJq7x1FIlkRFuolTtZdlEsvXMOselsL+WttXujKI8Yo2h9yGIuOGoXlA2LSh9WKoSAiMNMPDhMCCAXBDzO6uYHH9wcpNx7TwgWiQwBnLVCMEYCRYw5NTYcVkoKen1ZP7qRWu+Pa327VFu5/Nn37P4nT+x++qGNUSoCC96H42V3dVr/zkuHf/DK5JVZwwkJaK/O1bRunQ/Ov6F4F4JVdww/3gLrhvrd3eosFqfPegtKoJ0RhCHA73/1xZur6p7bZSb4K9ZevTX5xhMbY9cd8XV3P4nFOqKY3hE1jbLoQxe3zg3zQSI3TiV8ncaibJOIT5c1ALTG7fbS+2mi1jhaVv3kDTfE02ofuNOSf/V4fjdDoLMuk/fV7p82Gz2u2nUKqgvhi0e3/+Rw+qpaJZIqZ5584cbeONfhdWeiLz5z7dE7ZowAcFS1l0YFAMybrogEADgfrp8sH/iGqYPv4R3grzkfWCNhsnNmZ1R02iBi/84n+F1bg/Xn8ltWorwj5FJM7sj7TkcQPHJp84Xr3/m43DXWP9qF7SEAnL/D7yPGMozXP/JWlrx4N9DquxBRvEYRR3DH2OfSRu/c8PU2Riq5un9Q9D18YA3y9ljBXj//k0X95auHn33fhf/m049+/F3nP/74hR/95OUikg9mQ0742+QAdxHexn+Y73tkb//4dQPQc/180rxOsRBgs0i/duPwnrPeGRlYY1gk4VR847lB+tStynj/nt3B/qK9OmsCwKzU1vosYUXKKUFOsZ8JJLTsnDV+oycgeCCwah0lQDjhjCxbU6SsVbaXilEuBGetcnVn284YB5xhJlk/Ff2US0ayhEMIhBDr/KTUdecIwUWlrfUUAqW0U94H71ywxk2WXWt8kfJxTzoPjOK8VKmkqaSt8f2ESUqOFl0WM+Wgl3FCSdW6aamdD9b5LGba+AAoGOWCtZ3Vzu4NJRAAhGEu+xmPJRkN5MtH9aI0saSUYp7zVLIs4cqYprWCISKJBBvkXBtXpHzVuIiTPGUuhFrhIJObAznMBWekT35GKQAAIABJREFUn3LOyKI004WqWoeIIQBFnK/0qjWS01yyVWteOaxfOCzL1jJOOxOmpQbnV60L4AVDDOBcuHXc7E+aqnO35+r2pHHebp8ZfuIjD108k12+fP5wXo1JuD6dU4JnhmJvGElO5qXWJkyW2odwe6pmS4OBeA/G+Zf2qyv7VaPc/rRZNpYSKGJG0Q8yPswFY6Rubds557wxvqxtFtOLZ/JxTyrtZittIaQJdSE0jS1bSzm5OORIiJC0rfVOnh40i6OltqxIWcM5nS3VIONS8Hc9tPP81f1YMsGwNQ4JSE53BmJrGI17HCkZ9+Tl80Uv421n56V2xlECvVysKqWN44KnCXtoJycEj6atceF4oaSg00oPIrroPEGsddDGb+YspqGfso3NwRefvnFz0gpK+zGPOOEED2aqrG0WYevJmUFBeiIS/OC4qrWdlyYSdJBxZxxD0mlnbJiVtqwNIygY1daXtZksumVtW+3SiK51WYRC2blbU5UK6LQnEAghWcw8ws7G8PCk7GXcA3TKFYk8rhohMBJgLeyO4wsXznWtHg/jOBGqc3VjDmft4aRtO7smY1Vr6lpNV0ZpHwAIBE5JxAlByGO2HmzIJJnUxofgA7Ta3Vq001KFALlg1gfrPCGQSa6tqxrXKDdZ6a1x33sTSdL5EElqXaCUAIBysGw9QRiknHF0ISxbA4jbvSj4sGwdEhwX0qGHEMrWtNYB4rKxkjECQELY3Oh55yjCuOBFjJzi5nB0tGhNCCvlc0kZhjTmW8P8cDJrO4sUGUVOMASYVJoR3BnFnXKUoHcOQvAeGEHlIeI4K03dOec9BqCUJIJ/aX9JEHYGkXNh7TSNhAAhR/NacHKuSPKEgfeC4O1Sf+HmTDL6xHbRGntpkDy+VfQltRCGGfubl7ZSyT52dnBpmP7kwzuXhulB2f7KX1z/8q3F7arzPihrGUHng3XBeA8BIs7aTr91gx8BUsHvvgYBkkg0b2QRFPEteka/97WXP/rIufXfT1cdvUhM6u7i7vjuMn4XtTaCErjLBxLJ38zLaJwnd79+IxZVm0ZiVjYAUCp9tpdO31KSMK/bh7dHdw/vUfsAwJVbJ+86u3X1ZPnE9hAAyk6/hVURADx//bhReh0o9gdPvfjqdPVbz938x1976cnj+Sc2NndZ1ignKL81Ly+f2RL4+qVODxNfnb4eYTZr21ERPVgMKcE/uvLqhy7tfm+Y+NvHNy1v/v+Nx4ebz8yOASCiHAFiyRBgq5eus7dyybv7V6LfcfQicVy1AHB9uiKc/ZNf/+ODO1Lytx+S9c5wYWdIEB/e3borjxGULjsFAGeKZH4nl7FIXq/a3wHeglYZ54ZZtH7b704Sr7G2WrpfBMGb8gFtDAB8U0YwjEUa8598/Nw4i37ifQ8rYQ9M+WPveaRqNCNE++/Kr35cpOtld41eLADgdBL2+c3eX1x9w6L/7ZCB9RveKvPq7RkAPHVz+i+evK68dRy+tD8rtTXGUMZ7KTBBjLGIgRJEgovKzEvFCY57sjHheGWc9c7aVruyNtb5WNBBygUjghIIgWDIYtZLeBbLSEAWsQBAEazz80pXtUaKwftxLxpkgjOsWpfGPIsYQfTOuxAko6vGhBCSmOcRPTOMBCN5wieljgRZ1KaXcgJhVhltHQKJBKEkpBEbZCxiaBwwDIKTOGLWh1HGtPPGOC6otuHWtAXA4CE432nHCGk7NyhkEXFt3KgQs5WyDoa5JBRbba33khNKQJnQz2WnnDbucLqO2KRt55x3TWeLlKcxNzakEUWEYU9c2E52x0kaMedCr5CMoSOh67yDkMREGT9dqXmpOusQ4fpJNy21dSF4KFsXR4wTyinpJSyPGSPk9sJtbw9vvHIr5ugBH9jbLLLUen92nGgfIknObyeXdtLtjWhzELWd5QwJhSyhhJD1qHMiKWNE6XDtdvPc9Wp/0nU6zEpze9YdTrvJUjFEBFxUZpgJCOCdzyKaJ4Iiau2NA4J4MmsbZSsdGu1vHTeCkSwVqoVb83peakQgSDZ6bHszSSV9z3svXXnhFqekEL5unXUAQIQglXaS00XtIkFjQTrro4gPcpHELPiwP2mVctvjKJYUIdTOZTG7sBVp649mneSsamye8KNFF0siKLbGJRGdVXraBmP81vYgQuMBT0p146Q5PLGBqEjisjLrD0Yay3mj+r385snyeKGq1tyatgfzllJirRvmnDMSnIskRSRVrWYLZa1PI8YpJLEABIIYCzxY6GVrGcFl441zHiAEiCXdHUZ5Eneqk5QGD72MpYLXynoPw0QkET2aq0rbLItd10lOzm2mg0LubCZZyvd2knPb2aAfAwRGCKPQat/PeCTYZk+sG721coIi56idTyMaCVLEtDUujzkgOmCVcRBC3fmTlWGEamc3+zxidG+U2ICdsq2y40IWCTMuWOtuLztGkBFExHlplrVFwESwSNBU4rjgkpNFaSYrpbUbDyIpaNc5SkgsUTtHKWwW3FO2KJXg9GSpWgM2BHD2pG2tsYLiStlV553zSZJXTRcLAgFXyiHirNSDjBUJszYkERvlYiOXACAFmVdm3nnBCCC8Mm8EpcHTOGKEEKP9onZlawlBQikiEgJxHBltbaduLOtO+1jQk1o12nFCLg6TZ49WgpOPnRuvtJ0pO23UdiQlZxTRet+X/NIwuThIPnlh/PPvO/+Rc4MfeWCUx9Fx3QEAI8goMkQXghRs2Sh6J1f4fsQgumNRuj5MI9F096qMCMA3nh4AAsCfvbT/4+99KL+TKYZ3Ht9Io5O6e+zh3SvXju458aBsCikAYJgnjJEkFse6Ou0ItHbyeVt8YNUCwFf2Jx89v1UZq5xX97ntNsqmp4aJ71H7AMDRos6TyHE2TCQAVEpLxu4ZzDiNf/35v/yV3/ny3/1Hv/p3/9Gv/g//x598/fb8v/7Nr37uN5/GSedVKDstKL2yfywoHZ3a4rhnmPjqbPXEHTP0Sd254BkhB7MSAHaG9xVKfQ9vH3/N5wdOIwBs9vMbR7NeEk3KBt7oAfpXgAvDfNlpAHjhcP65v3j16vO3//7/9Bv/1c986uZqcfv+M6bfKWz0s+uH8+2N11h+L5KLTm1l6W4vnTevV6trn/7H3jhL9G1ibTmax3J/unzs7OaaD5y2GJKMvkUEASHEede2bRx/y/+qj6TxlwDsc6/8yONnf+79T1QT/fH3nk+l2D9ePL6zeY/F0FvjbVbte5u9P/6Lq6cfGSfxjUX57vi1dsul7eHteQmn6NPbueyb4teevtk591OXNz727vN/6xd/5Sc//vjG+584v9k/Wc19A6OCT8qWMx5LYSw49JzSqjOMYAiQRrQzDghOK4PehwBIIJE8hFBaQwlSxFXr0og1nQ0Ay8ZwgpyzYUZXJ8FSAAxSsqq2acQjQQhB6+Bw3rXaUYJSsLqzWcQa7XopP1l0ghGEwBglBPOYL1vTae8hEILeB+9D2VofECFEgrXaNZ2NGem009YLRrb70fGizROutQdAHwInoJ23rQ4+UEbbzglBppUhACfLbphLybFxIBjNYh5F1DkwxhUpb5WjSBADAUwjIhnDHKRxR5O2rEy2kRBE68OiNJFkiSSdCpKRzvjb0zZiFCkOe5IAHs3aunNKuVywEEKlXB6zTrtBKsrK9FKhlPM+cEYJwY2eHGex5KvZ0ted5wzHOY8jPtscHtyaPXr5QsL9ex4++8r+yXHdRgLKDrQPzIMJoR+LurMxpwFg1BOIUB/UBHGUi075Ucqt852GSBJlXb8nBSWZJIBonI8o7Zzf3YgZBYJ8XpmqtavGhnXdoz0AMEa09s9eW+72mPXQy/iiNNuj7NnpEUEC3nYGlCPc+Ju3q6KXPnvl2tFsdbjUgzxOOVE2VI0ZF9IH3BiIyUydLPWlHb6oQyyp9u5sT1pPAgRlfFlrwSijWDb6ZKljTkMIEMLaKbHuXNPqKBe9hHfKeqTehyJjURovF9Uo4wC4qNRk5YTQ1sCgEJ0BgmFeeq3d1vaO96ZIKATJGa4aW7emqtSwL7OEddqNCi4ZzXhSpGay6LyHUU8oGzoVnHeNCYmkkjFtAqPgPEGAOKIBgncYxfH1gyNOAZC0nRtlMSeks3acEGVMh4CIvTy2dT0s8l5EepGkGMKaprKwEcmyM0XOVo3Jc1a1zgPMKrPdj4DYQcwkJ5NSOwfOe+eDYJRzpBSttc46p7WmxCEknLScG++dh1LbOKKC8+lsFjGWMCQElXJKu7p1TNhJRRhiL6aMMaXdZl8ez9tZBavGOA9AkAVolNeu4xRHRdT6kDJqiA8Ai9olgh9MlsvaSoHWQUx8ytmV+UowElE8V0QLY5ZUW0dHvSwWOG+c18BTcmYQTSrlKYykuLlsnWCdd5LTSNBYwM2JGg942TlB2VLbWELdePA24lQyvDhIF50+WHpGsN8rbqLDgI0nKUKnfZpyECAIdsa11m3lcqHsojMu+HEkrlPai/hvPXc0b7pJ2cRx8uTh7IEi6QtuvCckSEq0s96H9VqzjgVgCInkdaPWYSbril8Q4t6YLgwA6VqrcydSQIjXpg7CG28Qd18Ad7gBRfzyy/sI+EOPPfCHL95Yh0XCnVNGaRRT8uAD20dv9LoIAJUym3kUIPSLBADSRNI32x8Y5cndr9+IRdWlkZyVzXHVTlv1Wy/ceFnrzNb7zWqqqqNG9GUMANrZTMQA8Oz+8Wc/+LoJ3j3RwusX/OATl55btR/OYgCotU0lu9ks72cuxCj7L37mY3/j+y8DwOe+8uIXj2bXv/rK/sn8f1xW//Pvfl0Q8vSN1SZznXWnzYXuGSY+Ktu93msFzO1FdXGnAIAvX731g48+AN/DdwL/ofCB9RRBEvHZqt0bFVcPZz/w6IXNUx6gfwXIJb8xq77wyuHX9+efenD7yaf4z/zw+373S8/9+h9+7dVb02929reLzX52/XB2lw+USoN7bfkaJOLWst7tpXDHp389LfQO8Bal7cO7o8NFDQDXpit4Ix+IGH2LCAJKKbl/2stb44PnNjdSuVg159P+dp69cDDZ6xfjfnrtcHZaDbnGd8Ry9ML28PiN7rGPbvX3l827d17jA8MsJojLuoPB2xIg3Q8Hq9b68NKkPiqLDz/2wB9+9ep/9AOP/51Pvfvp49XvXjVlrZeN2eyn3odVa5nEXiImK+0dmBCKhC0b650HcHHEqtpuDqO6s71c3J62FDEArhrTaBdxNirEycKMCuE91K07nHacUcSQRIRQ7JSJBFE2VJ1JBJ2sVD/lhBDwAQA8BGfDstJ5wrOYhxBWlS4StqjNKOczbTPJWmPLxlEIlBKlbZFwD2FYiK6zScRWjTXWD3IRC7I1iOelapQDCMbjVj86WmptAiAIhiaQTLJVY5wPSMAjlo3Z6EerpQ8hVLVjjNSdVcZnMUeETodxhpSwybKLY0Gdk4Ia57rOjAex0i6JGUPsxbwWngQfcZJG3AVwLpSV6YyzNiCA90ApBgOcEkKRErJszVY/HkWEbUSL0jad2+rLVrtFp1ywm/2kM6FRhhBCIPAkeeXpl4x1rQ/DQfH0lVc6C63xmWCt8o2y2tpO+Sxm2/3YEZAC2sYyQggjjXLeBsFwZ5jcmjSL2gYfCCKlWCqfRYRTsijteCCRAKXYKCc5SSKMJF1/qmvtMkFevL6KE84xtK0FJINcGhtWlU2FCMFXHYB3HuBw2lkg2cbWS89/Pjs/fuGVye7OMBYkTZ1S/Na0Q4CI46gvvfPGsJiD0n4YM0Tigu865wlwwRalghCKjTRNGRK/KG1d6ovbKUOopJEMOxsEwaPKIuAg5Qgg4uTGq7e7zixa16p1lCxSIIxSwYKJk52Ufe12GCS0Opl3BjaHYraybWud84yhmXWU4LgfHy/0MGOdhUHM0ijjFLULbWcjiaYlu302a+yyMQRxIDilnhPSqAAhbOU0iZNqUXKgscT5wgCx3rkYuOXV3jBJ0pAEf2UzP5osdvdGlSUBgCKxzk9WBkkgAbYL1iOkM9YDFgmbV4YJ6tcVECHWeev8MOcHcyUZGaRsf9Y1nbMWIbjWkZwggdAreK1sayyBsFCuNmGzF51MQudMMBQB04ghCYJ6BFjvPhQpy6S4Pmk4xTOjeFqZJBbzVccILVLGKJGMUErmlQaCkoJ1kFBaFPwqY9evHf7UT/KAaK03hH11abYH9PZ8cm6cXiu7lKVprG7eWh1Ply7QjT5vWscoHiw6Yz0jwbiuMW5SdaNULqw9XnSSEx9CcMF7H0UQC55GnvGQRElrLefkheNybxD3U4YAj/bpMwjlsgaAqvNCkFY7530TQFJy3Gp0fpTIp4+WT2wVIQSGeFQqH4JM5G88+czf/4lP/t6tCT1ESUjOSc7bjOtDHo6MukiKtWXQeoU/vz3otF2r6q0Pdwv6ezr96Z3W/vqpLBJVq9dl1D0r+ekrOG8jyr/80v4PPHo+lfzcsFi0anCq6baVxTrAhx7e/ee//WV/6o6DACtlelIgIAJIRvl9ZDlvvT+wrFtE6KfR89ePXjpZ/otXDi6Z8K6H9qQVI5kNZcYoWXenEODmrJxWzd7w9W38e6KFAWBaNTv97MnDxTpMTVmbSH5XH3BP+MCzrx4+fHb88z/x/evDdKP3mWH2yIcun98eXutWv/WVa2ey7Nd+68++uDL/5Q89ZE6ZC10/mr/74s7d63z9cPajD+8BQK1NZ53g1Pnw6vH8/Ma9Jq3fwzvDfyh8YI2Hz22UjXqlrBglCDA+5QH6Hcc3FpdbWfyv/vLVr96Y/acfeuj5g+MHtoYff/eFz37i8mgr+dy/feZNs0i+g3jiwZ2bx4vvh9eG+qWg8/I1XdAgjg5WzZoPvObT/07xFgX0di9bNh0AXJuuCMBpy9FBGr1FBAGl1N7fkPSt8UA/e+rm8fk8low+urfxf37x2R9+7OKHHzt/WuL/dvD2PyQXdoaTN76BG1l8VL5BD3Z5d4w1PDM/fvRt707cg1rbf39tupXLk1p97bj6/sfOXdob/dD7Lu3XXcJgWk52ig3nodMujxnT2Gp/UuqtgZyVpGrtstHBAqGYSFY1Jkt5rVwk2GTeYQAfMICPpbTO1a1GH5BiCGujvoAEzo7jgAABlHE2YNnZk3mXZexwZvoZ9w58CB5DIunxvOUMilQgYt2aWDIAdC7kMa2Vk5TOSxMwEIRAyEZPzkqltRv1pAshIHbGFyk/nLXLSlWNIYiN9pzCMI8owUiyrQG5PWu9J4wQIYP1YZCJaakSQTttEs4WtU5SGoBEknrnN4cxCdAo1yibRsyCrzrnAZ13SvkiZYLJsjWtcq2ykSCNspKTaakTQSLBehmjBNBDp7wQVFsTSdooC4C5YJ33saCckLp1iNhqezw381I5B4iorV/UatQTq9rkUtRtaF3IGH33w9t/+G+/aHww1udSAiCSUKuuiNPIg7IhT3gehcYGxjFiZP+kmZaGYBAIg5zPS3P1qM1iBogRp52B+UoxSnoJKRu6qHQI0EsTwQigH/c5OFI7KxlQivPKDFJ+slSIsN2Xh/OOS5a5EDE8t5VWPfvyTFpiMy4TEvcTEhxR2u/k+OiFEd3qD1L3xDmJBJV2nVLzFaEEZsYToiJOtPWMEgAQHDljBAMgFhFlnBYptzbUJhxOFCEQSWoav2iMIMgouTVVD5/hKgTJSBYzhqAtZHlcle21STfIZRwT6zxlIZY8OIcOmIia5TxAGBe91dFRHlNjwnTeUoqbw6SXiaazTWfjiNrWM051p68eqF7GRj1Zdm6QikVtxxkfxJQx1ouFNl5yGKfcByxbm0rSF+SxC/3/509xf1ENEmlJuD2vauWfuraMztBlp4z1Xtt+kZ1Mq6MasFUxJ4JRhqRtTUAYFPLaTI8istWTRyvNIsIoxpxwQEGZsW7W2oQx7z2EIDlZNHac85OVZgQ5xZ2BHMVs3tmDaZdImgsxq7X3RLJQGZyv6qrxU2spBUEQJRrvOZKNgletKyQvlVXWl7UepDxiZDPj3vuqs532iSSMkqpz/VRUyla1ZZRoQrV1aS4JgdViCWlv3rieJB8M/A9uVE+XK8FIGotRFj+2E6kmxJxu5bQ2oTPeOowFHceCckBEQcm8tie1DiFEgmAgggFjVDJ/XOqdnowFvbwhv3TVW+c77bNE7K86CJAk0V9OOy4Y8825jB/r0I/YKGVHtWYEK+WcDa11odVhChd6MSDmkt1cdh89P/iHX+BB0t84PPy08YNIjPMoTyPSEwPP/l/23jTosuu6Dtv7THd+8zf23OjGQIADOIijRImURFEDKbnCyHJsZ6jIlqvixLFTcuyoSokrVY5VSiVVdkpJSYkTS4yk0jwkNCWRoEWA4CCSAIgGuzH1/E1vvvOZ8+N1Nz40GgQJAa6KyfXr3dv3nne/1++ds/c+e601L+1REV4bL+ZFk5dtI/XuNN+Z5FcPFn/rI+8yzjNyKJT3XhyqRt1Gmc2SoGwkZHeO0Sniyu+stB4A/uzJi//5h98FAN1QLFp5OM84KJuIkbVBsmzqWrYXqxvL07gpx2U7jEMAmOV1HN55iVxBMBYH/I7l+WXZtkr//X/xh51h58sn1i7/yblHk+j/fXIXAM4ei6sctrvxdid6x8nhj77p9Ke+9vyFnemx4QvRyGFr4RWmRbPZS2etXJmpTarm7vXB0t2Zk3Bbmf/cwfxn3nnfXcPO+cXkbG/wztPNB+85kXFY/P5n33TiRR7DD33l2f/qr37vrcP9m5yHq1XDGAEA5/2jz1z9+Te9cM138JfBt1c+0E3CybL5m+9+4OOPPAEA6y/WAP0mA75XjVE3fcz7H7l7Pc3Cu4+Pjm4PLreLskw+9s43/84nntid5q9hPvDSP2eQxeP8hTj1DcPRw+UNe+a717r7N2nE/TicVa9SYugb48So939/9gkAOKjbsTGPfvHCf/Le+1cPmYViXNSI6VJVXfEi3hIAUEqTJPEerP2Ws4JTg+xfffnpoWAAcP+x9Wuz/IETG1975vr+vLTuFbWCXiX6nfjClYN7jt+I9U8Psj99+gUn7JAF9x9bOyirznr4qr9yv/bY1d1WRkvinb+2lBuRk+jGqt0r4Ou7+Sju7S3afho4gNb4LOLaKMFxd9ZI5QCAEOKoT0IehbRojNSOUUIpegDvPSAwQlqtvYduwrX1YNx+IbupUNp1Y+a935+1o0GY14YxnC6kB6wq4wEGnaBsdCNdHNJlpcFjvyNq5YzWYcC09R58JAgSVMbGIa2lqVorOEtCWrXWee8QZqWKA9pIiwiEQBaxKGRKGiSEWt+JuffAKM0rhYR0YzYvtQPfSrc1DBmFvCZpxISgHmBv2hjDhl1ijItD2kiTRSyJ6GQpQ0GvjVupXTfhzmMnZZOFooT0U1E2Jo2oMS5KeN3aOGAhQwSV14aCLVstrTOtVdJGKYkFi2JmlNNKl411zjFGSqmHfb7Zx2neBoLW0q1lwhEQTBPCdxcSPaYBLRrlLHa7yc7eJO72Yu57vQym+dVZtZaSE6PEeFO2LqCQBqzVfsBIJ2KLUndTUTYaAcEDo9CJWWAgEiRgUCkzXujduULAMKCIMCm0yWUa0Szm40VdtTYK6CAVacjHhRyl3CrBKUYhowhhEqQcIo51rQjqYz1xchQjpIvZ/PggqVtybTrjveDIsdF0WRWGpxzHhelGAUNiPezNmoBiq733YJwjiEFAohC9w6q1OzPjvKNIGCNt45T1XgMh1lgrG+MEjSPuvdpbtt2YB4I00uS17yX0LWdHf/ZH8vRGpD1BgikHKqBucVa7LKRla6SyIWe5bCbTed7axbxlnDrnkGBem07G4oB6D+vdAAAHCW8bQwkpWicoqZXrp2wrFXtVu6y9NE4wlBIa65W1SkGuzJig854yevH6zG2PCGBdm/FBfam49DG6cSzpDtb7uzvT80U9Plii91J79BAJOs3bQRZEEZtWOg1ZNyXj0m33w+vTJg7oKA33lo2nZD7TSIAAZiEKRgTDvDYA2Iv5rNLG+INpobKkm3FKLKdEMBpQp5EOMr7eiwHAeI/oOaGDlIEDTrwxNI101eKy0QDICMYRmzW2F7H9XK93BCcYBWRW6lY7gtAf0MARD7i3aDLLOCOCUaXNM8/trR+BsNOZTxbFosytrZ98xht74NwVxIuDTClNCcklhIIIiieHsfJ6UVtQ0I35RidMImMslI3uhnzRaEA2yvhc2g4l0sKksHljAAlnOEhZGlJp0FlLGfOmFYLXykyVQ8RSGkSYVxoACJJU4Fu2upVyx7rho1fnzsOZYRJw0gvZXd6c36ueeuyhcRaFlCDAoBuXXIkWCdD/5V/+WcQ5IgSCtVJHAd+Z5Kv09TAoonH+cNdQKfWtlIAixtEqH7hzVR4O7RJ85uuXP/Smu5wH5XQn5l8/mN672b81/8+aemlrEiHr8C9cuf7Bs3cBwPnF5IHudhZcW8mDzos6e/k+3klRd6KXzRZaZe4+tv4fffgdLOA//8iTf+dvPPjxP/4Ca8pl3UoU5x7b+VzZLjfW33xi7X/6149fnBT24rRzSF/oNrHRvJYAsLcoB+GNa2plsoAvmztHDpf352eOvEB4uKURBACMkJCxRPC3ndrqJeFbT76wG7AzWTZS//qfffWnvv9BAHhuml9f1g9fOXhKK6L1+4/FwyB0YK9N8zPb/VI3Gb+zttJ38M3j2ysf2Bp0Pn/uyve+7cz8ZqK50gBdT/9tfJM2Y3pUyjeG7FLT/Mn12fz4WqHZ+wfrADDIkp1JfsjC/C8LfElv+tH17qe/8oKtej8K9U1CbTfky5ukqKPDzmeeugSvA06MupfHi1976LHPPnnp6auTROr2Jrl5vRs+vT8ThPs7sbgYo1prAHDOA4A+tFfwilncmVH3yqKCo6OiVVkojg46564enN4efuLz57+hksSL8IrvchtCwX/5ocd+8T+8oSRCfLA5AAAgAElEQVR9ZtTdK5oXvmYeNtPk4599/OdPf+AbjfLyuDSvrfcBI9bDvNFSOanN3fee+fSlclJLwhEo73dY09oVgb5VFsEvCuM9jPrBYqHCkFeNigRpWksQOMM4oGWtewmfl8oq101Fo5w0jqzYG0i6KWlak0QsiZiyjnFKkXQTdn3aEIprWTArJCBWrTHWJyGV2gmGxmASM87cdGmQYFXqKGSM0v1Fk4R8Z9Jsr8XttEkiorVjFFfN01JDqyylJA5oVZkoolLaUTecFSqkWEkbcKKMCgVD9JNKW+uWhY0CWtR6kAoKULVmWZks4XHAOkkQCjLNVeRpGjDvyLxukUBe624stJbaOMqIdRiFLA6Zcz6LeV6pLOazpQTEfixCSjb7kbSWEOzEVBlXtrZRbdW4rVFYt7oTilJpqS0B3OwHrTbXxm3jkBK61gs7CeuGfG8p4xD7CWME61YHlHAG00JvbI92dhdv2RgmIRlm3WP70yuT5Xa/P6u04KQXUwJeWR9wBGK7CWezFgCs83tzGXCylomyMYNu0It53khBaSSM90gptsoeG4WcEkJEwAEQAkEb6ZKQzwutrDUWltqnoRhP5WgYamlHaK/MXD8Tl/fbWGS///hz7zy5PUijA1Ld59i4kZenbn9us1x/9cKlkydPE4KRYBFaqQxhJIvYWldEEW0aO2tsJyB5ZSYLJTgRgnYSnle6k7CAk1r5EQ9qZaUylJKNQVgpxxiJAlY1ZlEaD5BFtJuK8VILjlkn3h+Xa2tdaxyPhUdVNYYTLKUfJjiXZCOLJ5PFTPp6Oo/TDmekm3BtvAc/ChhEZNlq4zxFl1emk/DxokmTYNQRk6WqWmqlz7XVxmcRbbWjBErlmIfNHh8Xei2ll6cyFMGV6wfn9xa7s9J7Xz359PaZzQtP5I9OdFNJQKirlodhaz1FyEI6L1QWc+2gqVTEyLLS61mQxqSU+th6NJ63rXWldIGANGattt2ENtoRAlL7jV5ACTTa9z1OdFRWlaehQSxbIzgTFJetFpRdGTeNIUXVgDebvXCaG0TIYrKT+0mukThlWCkdgFfGLWujtNfGA3oEp51PCSrruzHLG2ONJwwiRtd6IQVYVHpSW238px56IowuOOc7nbjbj/jV6Q9/+B0izc4cH3iA/YOD69eLv3j6eWPdtLCdmF1fNknEkoAC4rxWAGSYcRHAMObjUm1kwbjW89o46+/qx89OK2dhXjgPMKtainxZmSDkRjtGybLWIhTK2Eo5592pQbJTtG9Yz/YruZEG80ZdWtSbWbhTNNr5WaWM9d99ciAoRUCxmH3gPQ+87eRoLY2SJDw+SGXkBjR6+NLeD99z0mo7Keuqkq3SB/NyZ7L8zU8/vppgDycAjCC56WEMAJV6IR+w3rffhEQpAChvH3768gfuP6WdDikPQr6o5FPjpaM25RQAvrI3DSDoQPC9d5+e71Rw9saNtTbdmzH3LK+3hi/Lmp0Wdfry+YDS5thG7wNvOwsAx5669IG7jxQ/8KaffMvdnNGL1eJsZ9C0er9sry+LaSFjCr/4Ry+6/Tax0avT5TCLdhdlPw4AYOXrHDAKL7NWPvSVZ//a9z+4en1YIwgADop662ZjgmD0DUfXtLuxvn/p61dPbw9/8dc/c2V/8T0P3rW07tHLB/Ew+/dObhlth0G6FqUr2VNB2Le2Qn8HL4Nvr3zg6Hpvltfe+51Dfq6Tqn1d84HGSAT04AMqjnfS95/Y3kiju7Pkc9Z9/qvP/ehdxwDgvW86OV6+xhbFqx/IraD35OZgsiwP236FjOVSdoJgI42/dPXKjcvWegf5a/wkK2wNOn/2tefPf3337//1D/zsZv9XvvT0p87vvPvsEQB4ara8NC1e7hfNGFs5wds7dQ29YrB+vJcAwCofeNfdR5+6Nv7g/adeVwL3/ac3rx5qGXp2smyk+vyTlz/yrnv/4JGn/uDhJ89d3inCV0kcMM4/tre4dyMLGfnzS1OlnLTu8qLtb61fr9r1VBDEa4sGwPXjQDu/N2+she1hSCkiQaU9E9Q75z0UrZHKdlNOCFaNoYwUrVl9nCs+QBhyqV0c0EWhkJEkYrWyVYsIPg5YK7X3IChJUx4L4kDMC7nIldQuTdhGJ2y0a4lrWlM1dpgIZGQJShlbtZpTsjttYkGujpuQE2e9VCZOA0mccei8d95vDoJFoZTzkUfBcVrIvLIUYWsYLSudBMx7Py2VNI4S7ESUIamkJagrbbkj6/1wWapOwj146yAJmLG+kmayVIJCwGkrXRTQTpgspTHGK22rxmQBpxQmC8kZFo3mnGQhqxo9zdskZmvdwDnQBhZ1U0lDCUYBTSIWhcxqZ7Tz3g/6AaXQ4bxtdTmTAJ4z4ITlreUMm5ZbrDpR2o2Ydq5oXIDOophOcm1s0cD2eufcs7CXVwcHVacTnNxMGPGNwiRA7/3FqewIkoS0qHUaca3dejeYFQoAqfdt62dLA+hH3VWDgSToFqUWhISBA8K2OwFabCuTcb6VBZzQSdXMS9VNeNnq/aUS1EeWJzHfXbRFZUdxdm734E8evxIJFgJ8BccB42Wj5lH28NPjSHRODkXrMG90qfSwl+WVPLGVoPfzUoHHQcKkskdGwf5S91OeRJyiG2W8lLbWLuS4atxChO31yHoYdXitHA3pNJe9TjBIGKdIALpDsZObKA5kXdUmzQLWKkdIuD1UkwVZy4KiaSdAEiGuNypghFBPKUkjGggSBf5gJp+f+lhAyOnuQnVjyhiZ5AYA05DtLtR6yjoRU9or65KAzEtVKycY4QRFxBa1kdruLNwwFXF/+OVPPgoA3sPZ+06++6Pf/aXxwZHjo9M2OnN6vZrOH//65fPnrnjvkZCDhdwehvtLzSgySovWaOsiQXXrlHbjuUQggO7YKLo2aymFbiwCxqZF02oYdggSvDxp+qkAdGnEK8tCamSLAFA0znuyu2jv2UoaCVvDBBFni3qjGx0ZBge5bpWLBUoD2nsPfuUDAICcUu9t1Zo4oNJBP2EOfCRoFtFIEEJpmcugS733SEnA8fgoZhTf+fZ7R8e3zxxfP9ib7k5ml9JYbA7fc3p9v9D9hAXxWq2QPk9rZTmBRtmAkclSDTLWak8B05jOS00JgPODlMecNtalAZnV9vx+QSmRGikBimito+gppd7ahGMsuGxlFAlnHWNklIgsYLTEy4u6m/DrZZsRhsQb48eVXPHjr+XN567N3n20BwgEIezFH3rPA4OUC0IrbffbZd7YVPDSmrs2+qe2B6tAf7WC/OEjT92xSIQABLE11gNUL/YwLutvyr8oJOzR81f/0Ue/Z2VgjAh5LH7z2tW5ZgkjGyGHpdpZ1k9fnYDxf/TwuZ/47jc+k0/v7Y0e25lmN73DPKfHT6599IG7JvYOaoSTou6EL1T0b8O5i3s//j1vBIDPXd7/3lNbAafHelkg+HPFbCVVlMZBGgdHh7Gg/M+fuqQO6S6+VGz02ixPwuDp/dnZYxsAsGy/kcHZzmQJALd6Hw5rBAHArGk30wQALuxMtvrZYfLAM9cnH3zb2V/5h//+n3zpwsf/zRP/69ev9K6MH1no60cms6r9OYAz7xx8+eLuu84e9YivbAz0HXwT+DbLB9Z6k2UFAK3Sed124nClAfqGjdfFzEI7Cy+mEAzjGy0iW4EAgL84fyMK5wkbL1991/43AAKs+EkntwaTRXXY9ivirJCqEwSHJUdPrvcnr4/46YVifHec1L3+py5OZo2eU/Iv98ePtA0AlEoTYgpj+J1Ce8YYADrntDFSySj61pK3N20NAGBat9u99Niwe3W6XCmU5VW7Ej46LDH0UtbHq8DZIyO6+0K4//Xd2dcu7f/c587/9f/2V4NAbL/9/r/xQ2//zc8/Cd+QbnEYt65pjX302mzeaIuwmQSMonEQMkxiMau1tg4ceO+lduD9EnTVWvC+3w3GuQwZEk8YhUq7rCsYJXmtjHW1tN75OGSVNODBOrfWCSxAGlAhSMBpXutQkCRirXT9hCNBgrAzbQgBiiTg5GAhBUVjHaHYajfsiE7CrfdCIG1RagvgNSLznhIiGHEGRl3hnW+0TwS02mURF4KiR+e8NTeqld75gBOlXRJRSnE6kUlIhlmQNxrAzyvJKUkEowBla5vaAnXOeW89AOllopaGUFyW+tga25u3Urm6sYQAo2gdKOu1dXVrgBDngDOyKCWlZH/RHh2Fw16YBljUZlHrmdLdhHFG5pVKI0YADxaykiYWbJByJCSvtXdAPVKOWcA5pXlj6saAh1HK9gsTMLa/qClBSsET0k/JspBxyBn1/ZhenehOL73wxNPLyi6dXtmHlUqJkA+7AsAjUE4toK+V70c0r00SsrwxdWuObyS9mJbSxAGbFiaLPRLoJCIMkXgUg0hZH3G0xi8KbaSf1yoQNEr5pGyiMKqV7yWcMqQEj67HVyZNnIZhCITjMlfe+27KPNq333Xk2CCUZX3XyY1a+mXd7lza/93f+kwzCMelG3TEsMMYw4OpdB6Uccb6snGDrqgbvdYRcUgJpwzx+qQ5tR4oD8Z61RqNmMU8b/WwF/RDfnnSUBpo7QF9KIhUJgcYdXmtfUDJ3qwdjPpXd5fJaA2dKRs9yATlvtH+4rThFBn6tvGLUq4NO41swqyvLSrtOyEJQzbKxOVJU0lwxhHG89pS4kUsau0iQUrlFo0cxUIbKLwfdoRZaEBQ4G1tCEXwkERsUqjNhJzbyj707re9880n9nJ9fVF0imBtlMW0W7aWJJ2TxzYe+9IzRSGjkK8PwiSiYWO08dpZo30asqLSjHOKhAtSSsMQjQeCUCvXzdAY12rnvVuWJhT++Ci6Mm4CQQdpWFcVIcR6zwhqY5NAWO+tw80utw4CzqRSy8Yy5arWaoqjhF5rVQqeEsgifpBL733R2PUOLxoD4NvWdmNmnHfWzSsQDAcRlTHXyrbaDRJWt1AYSghJs+SBs0fGi8ZGacWW3ShghBoHhOC1qVzre8IYoTRmLozElYN2kDJCSC09AUgjis6H1PfS4OqkrTRM61YqJE4vasspSuOkZp3UCA7KOo/YDdl6ys9mwcVBctDojePbAD4SuLdo9xctZUQr5MyCgzAkB0sppfuhu9cabf/NxSkC7OfykSvzVYE/DASluFIKQoSYUSc8UjKVutvIjTj0AMa5gJJPfvHCj733/tXHq5y7TVYIAYx1qxn48PnyppC09Z7h7RP5LRLCJ7763OVJ/ttfOP/AsfUHjgzPXZ+2e+WTF65dn9/Ylr/ATZsF7uOf3rk+LWtpbsqAzmp5azuiqOVmL+sl4R0X6ElRZ1EAL7OgTPN6Jdx5aV4Mk3BnWW11k5c87w184tHzH3jHm28dvlRsdG9RdpLw8WXzkbcPAGDRSi7YSprppfji169+31vP3DrcL5qNLAKA84vJsbh7aefaA5sjALiwO33fvccP3/jQV5795Z/9GAD84DvuGW0OvmLtP/3bP+KQ/Pe/+qeLy/s/95v1L/7RY+870f3Rt57V7jvOA68Nvr3ygU4SAsDBvASAlarmLQ3Q1wOc0Nsiy7vXuk/uzT5w5kg/CQHg6s0q9dow/dRnn77DEK8FyM05YtRLLx2SGMqEWMkr3S452okvHcxPvqaGf6vIu4nZ//nTP/DBB059/EtPF3/yF//ZiaNvPjYCgKdm+fnndptG8/gOxCzOOSK8aomhe9f7//sXzwPAG7dHK0rx99xzfGvYeeba+J1vOPFKdwN8E/H6bbj72OgPHn7yjz/31I++5w1/9Pmv/w+/9Vld1B/9wbc+uV9en9W//bc+sD2If+fc1796fXcYxpvRi6bab4wnDvL9QvYifmlRPzeteiGz1lJCpXMbHT45mCraWVlfGeuldknElPbeAUMspR8k2Ei3OQyq1ha1oYiOklhQqW0jbRZQB1A1Xnu3KDUCdFNaNKbVrm6scQAIHkk35VrZ7bW4lXaey5UYaDcTy1I55zYHofcgtQk4I0gigXXrjqzFUjulbciREKQcxnNZSmes2+qHttRpzKrGOPTK2IBTwUgnZpRivyOq2jTSMYqCY9FaZdphIjx1SrtCGqs9ZZjGLA1Z0xoCSCjOS7UsNIAPONnoR60CazwnJI0xFmRR6k7EPfEUQVvfCdE5bI3rZ2JeKEJQO88IHMx1yJEAMd4a59FDq+yyMoIjY8S1fl4qSpAQSEMWhSxAXBukiCiN8xIqwLWuqKuGMwT00lip/Pog7AZMap1EfLxouykvGxtQ7PbSpm6sdd77Wtk0iUyjo9hXtQk5kc5Tgs5DFpBppY31g5QCgDaeekDEtW4AHvPSzEvdzwQAXB/ro4NgvGyd96QrlPZbw+jqpM4bv9YNAX0U0iuTZqMblBKXle6lYlaotW6w6nJRDvNCIcFc1ojoJSKNrWvz2m/0oigUs4PKW9/rJMS3jWabKZu2Vogwi2jACSHQtLZqbC/heWO5oN4AC3CUsYPcSG2992lMA0qXpRn2grwy1sHWIGikY5QMU6K1GC/bkLNaeak9cnd6I9p5XliltvsCCAhBwEOjrGAsi8l4qRtFTm13rpWLtWxY1PpIxJCgcc4D6cVsZ6FOjsJFbWYGu4LGnDrnKCFKg3bOAzhnOwESLmKB6B3p8r1CU0CH4J0PObHeZzEPheh30yhhrUNGySANKSEE0HsA8GnMcZBywda7nIhAal80llAaEj+vdMRpFpEs5o1xAJg3Wls3K9WK0d6N2e60HSYCEAJGAkZq5aQ2BDFiRDvw3mtLCYVewrz31+ZUGeuc31uoXirCQLRSSe22emHE6bxUlTTe+1YR4/yi1MOMNdIMO1QbO0i4da4xkDhvHPYzXjTWO7g2beKYAZKQuVmpwYNDdM7FcXBtUjkCEfOJoOBdJ6BIoJeEkdC1NowJZ92VSTPskG7CnAeBeCQT15ZyUZs0IAFneW2ymGltF6VRxnUCvpmKaaMZwSymQohBHJqVU3Wj5o2+mqsSGSFecAreAyKhlFHU1gUUT/eTyphprdHDek+Uzj43K0aJeP/JASHkkxcP9srWOheGrLW21A68m0lVezMgHJ0/lsWbSbgSG0VAad1z16fDzsvSAADAOhcLVusX7Q+sxEbhxQKjL8XXru49l8M/+9dPdCOxMt/cW1R4fW/95ODZczsO4Z7ve+N/870Pfuxnjv/Gpx77n3/rzy9Wi1XZPpfqxM1Y/C+eujLX+kfefrOX6MWopF559N7xCaZ5fWy9BwDPTPLvP7NtrI04Z3daUj3A733tmX985gVe70vFRi+PF/ccWb90bWzBP7ss//xgdroXjGV5Kusqe7sbw8Xd2YlD9dYn9mY/c+K+1esVv2gl2fTs7vT0oX2D23YVGKN/8+13v//+E5XSf+0j73jvfVuJDR++cPmf/cFn/8nHvg/unIl8B98y/t3PB1aWZA8MbtSAR93kYF4AwEoL/3gvPX+w+IYDvJbohmL3xVIzs6IeZPH7z5z63U88/nJ3vVa4TXK01FprD2sAL5YcXe8kl8aL1zYfAABB6Mfee/9qY/EH7jv2C5994jf+ny9+33/x4wDwvq1RpGzRyo1O/6Xlec45AEj5Te3MvhQn+um8USsj9xWlOBT8rfccfX5n+s3kA99kCf8wzh5de+grz37iixeiKPiet52578ffZSfz/YD/wHtP/cCJoQRzqVz8B+94IFNs2tavmA/cendt3TPjkjPy5H7unAcE7R1nhFC0ztXaKww4wUpZ8LDWDRaVcc4j+NUgBH0QsqJpvQW+ktWzftVGvyr/V60OOPMeysZEAXXG5Y3Wxhlt45Bp6xmFvNHOQxyQtnGN1J1ELErVKu0Kn0YcEJCAUZYzap0vG2W07yQsDkgtddGaJOLG2PFSEYJZxBppADwhqIyfLFUkSD8VVjup7XY/mpRKcJbEPI3pZKGzmFV1G8V8WSupvWDICHFoEWGQBCEjxkAaEkDIG00JpBEPBfXgCCVxyLRxxLhprkbdsGgUAMliPl40BoKVbVPd2l4iAkEo4qJQASdSmVbaTirySjvrAOD6tAbvs0j0sqAoVTcTWciUdY1ylXd9QpRzjbQRx3Qt0togYMiJBcgiXjWtVrYE4MK3Sk+Xylq/rHQn4fcc7z7CSD9B59nVSQOEGyv3FuVWp8soWTQ6CXkUYCO91o4QQEY6Eatbe5BLznGa6yQiSUQPFlJqK7XrZ9yCA8A4oPNcrXWjTkD7neDiftnoCjymMRMUn9kr17rhstIEYVaoe3oR5ZAGuFOYYS+kjBxMa+fw1NG4LBrBcX8m+5koK9XpdwFgrZe2bXN0rdda34l5QmmhDKPMOeCc5KWsOKYRc9btz1vGqNQmYCQIKKOkkU563UvYpDRZzBppKobaQjci2mEvZY1kiFg21jq38klcX+uee/wZQSCXjhIEDwRxmLG8UvNZJYjZ7MXG+7TbWezuMgoECYLfW+qtDh2m7GCpvXdbg0hZPytVVes0EZFgAUNGMUxpP6IgTa3dojb9WFDQUcAaqeOQ5JWNAavWUCacc91OkMWMIFStcs4P0qCsgFKyLOV46cMoWBQ1DYARzIJQKUsJIegDgZGg2nhtIY1prYy2vpQ2YLS1TlvPCCIBQaDSvmhdJ2Er/sCklIygs1YwVM6lERMUupF4bjID8Mp67y2CX+aVsW5nrijFXiI4cePaArHaIqCnSBAwb0w/4spa7XwtTRNgyEmjIAnY3rLdSIPrs2arJwJBtIFOwiaVBoAoDtZ6wcGyjUNKAQkhxuO8strITiQ4AcpFFAUc3VafzWtHARqAi9M6DlglTdGaYSby2lACScgFRSQUCFlIbYzrp7yRXoGNGGu9W8/EsjHaemsdUKZlMx7PrfMMvGDYj1km+KzV58YFOqDURwENKZmU7bw2dw3i04MUAX7inu1feyQoCBGEbYThIOIho6zyV6oGATkl4sXUYUHJlf35vSfWV6YEt5wHDof42jqGWCmzCj6d9xRxZU68kit8qTgp3Nwi2JmW//QnHrzn6HYvEqMs2urGCHB1f/57Tz538oNvv7qoFgH72L3HAeANpzfe9Y6TZzs3IuPW2Fvd9g8/9twPfvBNSSBA3aGht2hkP43uuFTlVQs3i6HzWo6S8CAvz4x6t122Egn1AMMsunf7Bfrv+csHcSjOXdy7/9TmuYt7j5y7/H889NW/9xPfs5PXv3Rp53gU3AdwV9JpjDLOx1zc5hP86JOXfv4//sFbh4fJxLfIAwDwqXMXf/I9b7x12W27Cl/dmdxzU1R0mIQAcGyY/tR77v/nn3h0a5C9NAn5Dl4dXmXN9f+/iAL+0OPPL2p5ZZIDwHtPbn7muR24Gfa93thIo6fHLyhd3ndk7Zm9GQCcPjKcLl6Xrv3DWEmO3jqMA3qLR7GSHL1x2YmNa3+J9vqX+ySVs28+vvmFZ64BwHoarSXhF7928da/9uKg1faONwohVh2er8KPDABO9DIAyG9u7B4ddJDgkVF3d1q8ThJDg06cxsHow29+/9/9ML7n7N97YPMf33eqmJY/fGTrgf76A/31uzqD9ST72pXxK430ok6hh69OK2kuL2vl4M1Huj90z8b9a5nzsBaJU72kbJ0jTCtDCHJGJkvpvKMI1oNxnnFMAjaet9o6ZVxeG2ddKEjIGYD3gFWrY8GU0mv90AEikkb7NOTOARLUdtXSDxQgFKRuXdlIxmipjANgjPUz4b03xlkLScw9IKcABK33UcAmuQ4YcxZqacEjIgkYyUIWhiyOGKBHxDRmWcK9h04W9FK+u5RZxKpW91OxP1NHh5HzMOpEjGInC9KYKeesdYEg3VR475etss45gDikccCymC8rXTQWEZeVOpi3RanL1vYS7sAPsrCSWmu73o/ni9Y5Z63njDgH+7NWGccoFo2utAtDJpVNQjbKwn4qGKFNY5DCYtbUjQ0C1hinDUQBjTgygq10ISMHC9Vqk9eGUhxkIi9VHLFQkGkuKfHOw/5MIkDVmmE3WOsFjIteN9nbW5S1ds6d3B708uLT5y/30oASHKWBtl5ZT6nvZzwIWCcko26ABDgll/ZrRn3d2EHCrPNVbSLERaWdh0AQxsEBXhtXtXKASBHjgFnvp7m8Om2LxlzaK6X2ewvZtNpZi94bB7PCDrshAGxsJCf6HQDcXk+UDbxaNpXc6ofH14ONjV4njQ8WNYJn6MuaO952Q6aMzxsbMExi4aybzNp5ZfJaL0vVz0QSUKP9slBVrZXxcSjWu8JZd3It2u6Kk8MAiDfGSwtCkKrRcUgoonduWuljW92qahoNjbSyNWkA3vore8V8qbfWM0JAW5sEbLMbK6kyQVdJjlZ2f2kmuRacBoIieoJYNdZY5zx2E5KFJGA4q8y0dkvpL0+UMr5oNaMEEDZ6QSv90WHAGdnqB0fWUkoIo3xnKqeFGvVEwOkq3C9LWTWmlwWIuFw2ASdJxGttBUVjreCsqPWVSXvtoKq0XZY6EiRgJBKEMXQO0ohkCa8b100Da30c4GSppgvlnXcO0BvCWBr6QSLGubw+k5vd2DjXS/gg5fPaNsrMdmceMGSkkTZvdBxQQYkHCChZVLpqDUEA762FXiysw37KrfOEkESwZWUCSr0HTtEYvyj1pNDW+FhQQmgQCgRMQ+6c54xYByEXxvgs5tKC4KSXhgFn2thagTQQBawToiOkmzDBaBLSWaE9+F7CW+N6mQgYiTgJGIYhcyu5J+W0w91lhYicQsQppSSKor3xvGlk26hZbbOYziuzXytKYLMTEQqL2ixr3RX82XHdav/gZi/jjBPy5PWxBQ8AjLGAE0aI87Adpz3BNYA09jZLLwSope4k4cp/4I5Q1jFCVoKECDdcs6pWAYC46QlwOCU4nBss6/bsZv/DbzzxnjNbd613s1AkobjvxMY/+NA7m5ixtc6PvfHU6srPnbt019bo1uNdmhf33yyuX9ydH93s1+qF2IKuYM0AACAASURBVFdaLe0NN7Qrk+XwZWiQVw8Wt7Y+Zq1cT6NWm/Rl3H5WOHvTLQcAfv+zX/u/PvGln/6F33rP3/nnP/0Lv/U//sZn9EH9Kw8/ewHwr2yu/eTJbSBkK0s8QMLvMOa18fL+Uzd2G24jE0/rZvUYO7OCU7rVf6E0dv7ywWHngS9dm6w+h3FR3/JY+OTjz/7Y2+755nVBvoNXxLdbPuCH3eTXPvXVsTGflOrLVyYPPbM7rtpXuutVYtWMfvjMdieZNzfO/NQ77n3w7NHxTaWjUS+9tDu7fYjXFIMsnh5qPYxDroyrpAaAu9e6B3m1M1nuTJay1p9+8tLLjvKXwNnN4Vee31m9vm+jf9gEIAvEuKzvmEkIEQAAHtqKFfxbaBbsRiINmDS21QYAVpTiN5zc+Py5y6/fVHLvyc2fe9t9/+TBe37ng9/1QH/9vcfWY0bvWbtRkgmpuGur94ULL4iQ3hGHk4EnDvJa2Xs3M289gr9WtU/s5c8vGk7xai6fnZTGuGFPdFPhnLfOrfWiOOABZwHHbsI2OhFflcQ8lI0ZdUPOMQxpwCGNA6W9oDQOWRSIRtmQIYAjFPZmLSJ45wkCp6QT8SgUaUgRvWCUInjrQ4adhEvl+ikfZkJbW9Q6ZJjXRikTBUwZV1bag1fWCgqTUgcMam0bYxHBWM8QF4WMA7osdchpIAihtJvyWltGcVKo7WE4KeU8V9qZaV0ezJq81Nq4rWFMCHLEojEE0QMISorKcErK1mptq0Zr42LO+ilXzjlEZMQ5aJUddUJC0VuXxgIB54VspFmUsmr0opCIrpuIzUHUS0QkWCONQ7AO1zpiNIgFJQbAeNc2mnEMQxJykoXcWjTGTgrZyZi1GIeMICJCJ+Yhp900aJW7ctAgwGgQ3XU0ObGRDLtBLGgc0CNH16bT4sRmenwjBmdmeTVM4t1ps6jNrDSMAAOQxs9z0w2Jsy4NacDpotKtcstSd2LKOeEMamXilA8zsSx1LxV1bcOABZwe5Gp/VluAlaXDsVEccRCUWPAr7qCxPm9MURnjPFgzLeSoEzCAkIjHL0+u7reeMedgslTWuuszOdro95PkiacuP36lKpX33kvldhaq1TYJmHe+rFRe6UqZRaECzgYdUUk7r3TRaKltmjAPUEpXtXatG3KG2jptbEgR0OV5WzaGIFjjAk7CAE8Ow04/qysZhXSjx1tpL+61y1J3svj0dpZwYDzNpwsCkOf5eDpvrNfOMkHXeqJSpp8wZVytvDa+cY5S5IwFDJWGorWttc5Bxom2fpjRNKRRQFfEmL2FGnX5tNKMQKN9FAptbaMpeJ8GLKA8CdmyaY3RSczXB1EaszgJm7qhBAF82RhpQRuL3vcSMUiDLGHThZosZdWaqjXTXI8XEgGkhEkujbf7c+kBQsEoI8Z7AOzFzHiG3mWJIAQo4HqXbw4SbSwSr6zf7PBRNzaN7MSMc4wFRUq8dVm46qpyyrhJrrT1xkKtjXJmsxf0I1ZJZ61XzmrnjPcIEHGatxYREXxltHPgnD26lk1LXTRm0Xjw6L1DAED0niptCNBuyFqpnXdFoym4/UJZ5xOBO3O1rHVeGc6JlG6ylCFD6yCLWNEY68FZLyjMG72WhMbCUqplYzyhJ/tRh/PhoF9VjWoVIAiOUkEc0ba1/Ygba9+43sk4v2uQPL6XzyvNGdbGltowgh+65+hqrhOMckR/aF0ZhIILarxfzRi30CqdRMGtRealxX5prAdfK7M6vyp7lY2KQhEJdqu0RBFvLVW3BqmVPjLo+EMnV7cHjL7vzLGndsfvPrGxuuULz1/98FvuvvWm+c1+pC89fY0E7NrefCEV3MwEVmX4gHIE+Pyz146/jF75tfFylQ9cz6t+GABAa2z2MlYGl8aLNBSDQ1E7o+y//Mn3//LPfuxzv/R3f/lnP/YP/ur72Vr8n773zPuS8IdObZ7tpYLgYV7iYZy7uHf0kFnY7WTiqu1FAQA8dmXvXWePHCYT/+Ej5z70XTf0Fg/KBgBWoi/7VT3qB6tmqq9e2nvw1NZ3yAOvIf7d7xe6hZVF8d3HRyiNg+TaE7v/9cVFqfSX/b+NzabVXHCkm9yiK8wbefFgLlv1ow+eBYD1XnpH09zXEEfXuw999dlbEkPrPJn7a+D9zmRZ7c0/L9U/+sXfZRSVdcnZFzF7XiucXOten9/wY3/bRv/3Hjh+bmd6//YQADqRaF4s3XALYRgCrPgDt8fveJMt/Y2xnSUAkDcq5Oz+o+tfubR739bo2sGCUfJSSvFrgu+691gi2Ja4MecOk3AtCZ+dLM/cnLLfcHTt+jfchLmVDBjnnzjId5ft6VGijeuETFqnG781EDuLHAHRmeNr6aSRAFhJTQA8YCVNSMmoK2pJx8t2lEEjDUEcdgPBqdQmCsg81wSBUeLRA/pFqRhBT4AxEnAacLYspNYuCRkiJAErW5PGdF6asjXDTEjtj67FdaOThBMASolzfpCFrdI7s8Y5QMBRhx/Mm7VBqK0TFGvtAwYBp7W01rmQ0zSg2BXaWKQUQE1zWbRGa9fLeCAIp0RbfW1cGwtZwtE7UDxNeN6qI4N4VrTWukAgJbRqjQc0zs8K1cuCvFbdLDDGLgo97IqmtknECJKysetdMZ+1jmNACVDwztXSEcBhRzjn85rFIRukDIHkrQo5bSQSj7U0jJGiNuA9ISQKqa580ZggoECAMqxbHya+kBYAEYnzuDtrKYE3rTHjoDRuumyd92HIlAoC0U5z6KZh09q5c5tdMeins1lOEYz1w/W1t5w58mwrAUAp5z0QQz2ANX7UYdICGs8Q+wlfVlow4gCk8a41WcQnuSob3UkEIcjRJQlnSDoxFUBKpTdjzhhGgoWMTguZROT6gdICvXLOunmht9bCxsDxtWjROKAIHs4eyR6/Oq4b1UmDLOPdDp+UJuH+7nuOP/301Zq4bkyl9WWtPahGuqolObWt0s77gNNhwiJBV1sTQKBp7SyXacyr2vRSQdFtdoTyMK2Ntb6q1OYoTATJsiDzXivTSrfeE63y4EFQSNNoOcuTTufYevT8ThnwNIlUa4m0MMz4Mm9GSbgzLWmcxGgnyg1iIQhmIbPWBRyZg0L69Q6l3WBnXPdSXrbGeUgY8eB2W72R8P1SUSStdq00W72gVqaVLmLkYCHTmBHCCZJuIpR1vUzMC4meEEe2htG0csZ5a2B9vd/UChHXO8GkUK31RwbxXi6V9f2EdgMaxrgzb1d6wf2El9JZaa+XspZmkAb9LJjkbVFpo6xghFJirSPeaefzXFIRbA4DpV3dKmntNG9Dzh0SIcSsXMxyZRLai4T1VnDS6/BxITkjjAAgeA9VawXFSa7T0BeNVdaNF20vDboxneQaEJRzzoEGT8BXjR2lNI5CA2CtDTmR1jNCAFFrRyMIKHa7SeuK0rhulkhpGOVZSJa1dh6t90oZRIwEcd7HEfMOysYQQCFwmLBC6YD6iBNBKeeqlwQUAcE6A/tlq63vCW8QKmUAQWsXUGs0diLaDTil+qmDYq0jlLNbnfBZWR4U8tEriyzkZ3qJv1m/p5QSgtYBpTeUQ0NGjXalMdZ5RvDW8iGVSUJBEaV1lCIAHH4NAJUxrfdfm822d4JeIgCAAJmT9sG3Hc02smeLGQCAx9YpgBcajVZPsrcoT4y6t61Tq5TAef/uE5tPXJ+8+cjIWHf5YH7mUK/O87Pyjy9cu8rgkWd3Lh0dfHLZnLl49Z6TI4b08BbHuWsHAWNrncSBpy9ZD/dmxapCv5vXg1gAQPgyJscAcGm82DzEHl5ZC//MR9+9Orz/1Ob9pzb/t0ce70XiI/cdB4Bri+JIL7XewZ0aa29zItvN67OjLgCcX0zWRPK0XaxMmp/emZ7eeCHy+eQXL3zkvfffOjy3P3/H0Rufye6ijKIb7UZ/+Bfn/+FH3/edZqHXEN9G+QAAXCwWnbUYAZvp3t/+qXf/lbfe/Zlnd3/pC+dutc6/flj9TjxAJxDX82q7k6SCr/WSL164urrg3pPrV/ZfXybDyc3Blf35r//pV979puMBE59/6vKfP3HhV//V57SytdJHTmzA6eP/4ifevmzkz/32Z15psG8Zq8i71WZFmbhvc3BykH316niVD4ScAUBrzEuj+zTNAAARq6pO09v/m14xGQCAe9e7AHBQ1uud+ENvOfPf/fZn7hn1AWCW14OXcMheE4mh+09ufO6Lz1TK/PR3v2l15i3bo+dnxZlDJZzTG32ztOfg4P7++m1/xeGJ9bl5FRLivAeA52fVfeudu53/zJXp0xeKiNMwolyQhdJKgfXWeUgT1rS2lbb11iO0rT2ykUwWLSE4zIKq1d5D1RhOkTGkiATBaNDGMwLKeWc8OvAeGCHW+ywJwLnNtbiuTZeTojUMcdQVTWs7CW+1ZYLWrckr20+4tp4Q4JwgkCQiy/+PvTcLtuy8zsPW+sc9nX3GO/eMRmMGCIAAB2igSEihJFssxxXJUimJ7fjBVS4/yPFD8qDkMa6KkypXqMTlSmKXy6lKWSo5kknKlGRRFAdQIAgCJBpTAz3dvvMZ97z/MQ8H3bjdAEhwUlVCftUPZ9r79qnbvff61lrf9xV6+6gYdiRH1IRIwSJJb4z1JFfO+byyDbFVaxHAO8+5H3YD7yBrtGSsaSwAjqu2rjVjhFNoGzPoCiHpJFMAoJRT2iNCwJilyClpjTuYNZzRnXEVCxoLSiOulLXGcUobY401xtg9Yyiha4lABkdTlUg+rdVKX0aSzQrV74hW20VlvVeR4ON5G0qapoITRPCUkKN5nZWqE7GzXSkoMQiSkFlpAk6dg1EqnfPagdK6Vna1y71z2oIguD4M98e10c47xwil6NAjARtz2irbH/Ze+OYbrXVhwCYLF4SxKwptjNJ8tSeNX0pCRd7YfsIcACcEEAJOtkYhAE7ydmMQjFLZWH84V7V2W8Oo0D6VbHtcBZKtxHLYlYtcAdJFpX3ok4gtcp12AgBftjaKhBTUeqhaUxYqjERWWY+YBGLetGdGrm6VU3a4ImaL1nvCgnB8sKhiOp63nJHZol5boWkoHdC8VNb7Xsx7iWiM64XUAuxNFOXEaLs5CCYLZazfm1RpJPonkzJXkaAl2FEvOJq2o65YLNpKu/WeVMZSgt7jpNABRxGIN7dnH3i4g0C21pOAuqy1Spn1lDcK8opfWOv//gtv3BOHnJLVlOatr5UdpaIx3nlPwQN3h5nXxkpJy0aXjWu1QxABJ5SiAwwlWxQqFHSlL733kvOsNkWhtfUzZZW2grFrO9n6SuKNnVXZZi+eVs2o03fOWfAR1eC0B/AeF7WKJGkKs6h1N2ZFZY2HeetOppJBcHlSDzuCEhJaH0TSe5nVlqDvx2JW60Wpm9ZW6Je0SinbjaNckxAdpwQRr4wLRnBvXj1+ZpQIdvfJ9eksu2slQGEqVfdjLrjpMk8pXm8wpHRSt+vdMG90GtHDhc5qLSglhHYCSimMOqFWMK31MBA35g2lsDUI55WqFHBBq7LlVLTGA4D3wAkpWm0WULV21OHIrDXgvMvrJqsVAlXOc+OdhU7M0KPxHowniP2ECUnKxgwjmYYYcmKsd95raxl1jKl5XZe6CCLxuWkRI63AmfOrO1nVNmoQUIMYCtpq99phwRmttcvqOhTUgYklDyj5wEaHAmzndUTeuoDGUhCEgJHWOkYoADCKgWBrYcgIGufpzQWhutWdUFjvJX1bPHB8fWhm3DXOxt86+PbrszTgj50efejM6l0rG89/48bw7PB8Z7As0FurbpTFrTNIQqz3gySkwJQzkjA4Jj5GgL+4sv/I5kqlddaqv3jtzY3gNjnZHx7Mro4rVxtl7LDGqy8f/NNvvTo7qD784LmnP/rAo6dXzq+nF3cmX37tRtHqzX7nXQfeedn0OiEAHBT13aMuIxhwpq27ZTZ6HDuT7PGzb6uH7yjoAeDzL75x74nVlxfV0xe2AGBWNd1AXi3m9/ZG7/zp1w5mTx07/Os3xv/l4xeWM5PdrISbI5qvvn79t//mx2597NuX9+49/XaH7so0v3e1BwCl0gAgOAWAz7/4xq988N73c/f/Cd4/fiz4gKT0pekhAJxLeyv3xg+cW3/6I/e+ef2g+9SDn3ro9O+99OZu9iPnA0sgwGjp9pXGseRrvc4tiyEMyQ89guAOnNkY/Olzl64dzIZp3OuEj9y7deb0SK1v/ZMP3/eN13f+yQtv/A//yQc/+sCZ3WkmOZ0W1SD5Tn4L74p3dgjuwEY/ubQ//VAnund9kBP80tde/c0P3bt8KxQsr9VqGt1Rji9lA8f3hb5X3LfW/xdfewUAHtwcffb5S/Oq/cyzr1Wtfp8WQ/g+vtcdeOjc+j//w2ce+sDZW69spNHB7VLyj1w4+fLO0cPd2xLa4faflSuzaPUbR8XZYXyqE375ynirF/7JG4dZrjyA4MQ7Py90HFDJyTS3niB3WHpk1GsNnKHo8KoxHkAKmtembEwseatcA77fkZNF0wk5j1BbF0rWCZnW9jBvWmsDQdNIlI0JBZlmTRzwsjWSoba+rFwoaKNdJ2BIsKx8HNDWuUaZtW5AGOEC45A3ytXKHs2bSdbEkQg5neYqksR57EaCUaKNi0PKCAGEstXjRdtLRF5pZ73SNjW8US6QdNQVzuOsUHltQkkYgTSSeWsoAcloY31HYuG8NnZpGkMQPIFKOdSOM1TOxyFjGqWgjXKBQGNhnLfgsdU2kqQb8bI2glNr/dG8PrUazku7O242h9gaB4htqTsBjSJRtO2oK7NSF5VVyq6kIRC0zktKrHMHRTMMhUYPBA5rwwj0Et4oV2iwHsKAro9CwUlXskyVcciMcc6jQ8eRrqz15vMCPEwXbV4ZDDiZ2caajYE0DpgHYv143nZjnleuG7NK27q1UlCCKBiliAezJmYskbSuTTdkWaXWerI1fjxvGdV1Zdb7shvzSrs4oON5GwYUAKrGhAFF8HWt24jvHBrOsINu2rhWu1a7XodJxlaStCnLuoF5XhFkQtJa08k0IzS8fyt446C1xlOk00wjmrW+ZBQZJQEjMScOcJLrTsTmhR52OKXY68mu9eNZszGQZWMr5aaFWe/KWJJkRBvjGmWrxu45v9qVhbKN8utduj3V/UHvtTcOO73uvee6AWJRmTShPGAWvLE0Zriy0v/pcyuPbA5mV64lZ0/XjTHWa0Gmi7ZpLaUkSbigiA7Djsgb2wlZGHgApBS89cDdLG8Fp5yjc348V1JQ4zyTdCWilYEBx2ciuT6knYiPF21AAtkhypqQgRRIPEjKuKBHk1I7O8ucDARBcN6PZ20UsqNFPYj5QqlxaZXyinulVShJq11R21Bg67wH3wu5DxkHFJI0yglG5nkTYEsDKOqim0RvTMuqKWqlOddHVV5oeuZM70//sh2rMnbR3txyZIuFiUKWK+a8d8QJRhalAoIBpaspvTGt60YRSrohzRurjTLOMUQPvhsz79y1oyqSpFFecqZVMxjEe9OWUg8AgjIkEHAaCpI3qpeQE6nsRVJSIOhb7ZWx6F0gaBIy71AbR0Isaqetm811JMmkajnn88p7D874QNKIEuckZfzfXh4LiueJOLnW9dq+8eK1NIoB8bA0saTOgrJuMw0OKz2KRK7NuV708mF+1yjhFAWjlCAidEMpCEFEzikAtM7xW910D8457QAAKMHllAAAqlaHx4KHlzXrcUkxb1vcn/2Djz3y1Nk15/3FvdlzV8f/5pnX/emTcZEd79Zr5+5YN0oCcWO6OL912/Dfev/S/tR5+NCp1Uabr1y+ceXG7JG7t2594LCoP7XW+/VHzv/K/ad+70sv/ff/5x//zP33nL77wrXd5iCv/9WXX/mdL7y0/OS0qPP2PVv+F6/s/9onHgWAea0Gkbw2zQdR8K63Uw8wyavVY7XQHdHCAPDyjaMHz6w/P83uGtwHAHuL8kNnN/aat8b+7e1i4s8988p9Nyv7w6K+Os8/e+kGCdn1/Kh05MPxW35ENybZhc2+9lYCh9vzywDgz6/s/d0n7oFj4gHr/LevH967+S4M5Cf4QfBjwQcAYC0MV8JOZdqVXrLai3/hsbv/5//wtarVkeQfu2vz4OYS/18Bzo/Sg6ImAJzROBBw02LoqfOnPv37X/1uR3+fuFXRPv3Bu//2Lz7xkYdPnVkb1br9o+uXz+2ZXhp/4sl7Pncwe+L0GgBsDtJeHFzam37o7u+ZD+A7d3puxwfOblw+mH7o7hPdUKQBf/b5y7feWkmivFWr8I6GfRhyzozRlN5xyXu/JfqFUXdWKwB4dX/2z7966XJB6q+//sDJlTd2JhfOrXrvxnW+1EK9f9bhvqP45oGz60s1SNnqWHIAODfo/MnrtwkG7lobfvP63sP338YHjpMB4/x+0SSMdSR7fKN3fV6tJ8HOvN6bNbFkxLp5qcOQesSiNjVBxrATCsZJ4F1WOMHpojBAvGS0E/Gi0Vo7BKyV7UQsqw3lyDkJJEUEpW03ZpSSojYhZwTRgw8DIiUZpnKyUNOslYJmpQaC1vpeR3BOBMPpQmkLUhClrHU+r3WvIwAQAdYGYV6pWdZaoPOsrQWNJQNCJKNCEIrYieg014kglTGxZD4hWakRkHOCBAklUiASnBfGE+QUuwkfz5VgNI1YpYwULBK0rJSzDACqxsSRaLUB8J2YB5R0QmoMePRla0NJkWDAETxOF3U35XVtnPeUkICTzLq6MQQJJWRW2IDRlVT2YxZJKhjdPqrikCptvXWEMsHIqCeOZu1R3vQSLiQ3jclb003EdN5UzvcT2So36sm6dTFnDiHmxHpfN6ZusSr1sAfGkGmmCMJaX1gATmivl8yO5q0Tg5iqRoyLqmrrg2kDAMOuLJVtlO2nfCXijgIBjALaasc4ZpXqRGyWaxoiIjrvDxfN5jCaVW1eWSnoIBFRxBe5LrSTAV1LOR0IZ4EiUAIIQBCDSBrrKKJSrrceJkDyShe1kYxa5wi40ai3e2O/qtzmKt+ftaurKUFolLbObwyCqweuaLTSbH0QGAfO+aRD4wCvHbZpxCjCotRpxLT1e9MWCWz2gxOr0dGsDQPeTVgnglmrkXJtnXfgnd8YRc77aaGx1KNeAI72uA6F5Da/dzPmDnqC9HhIqA45zhuXVcW3rD51OP7Wfnb/1tpruXoMyGZfOMBxrqOQd0LOGIacBBR2Fm5RqI1ROKvsSkIBYFFZg8gJ0R5SgQhwMFfOe1gONLImDFiXkUmmKSWvXps/ek+y2pfGQ1aJ7enuwycbToVWNtNEBsKZvBsJ9D6UrNV2mLIbDhaL1lhntRtG0XTeZKVmnhvvywqSSKx22e6kcdZFg4TGcJS101rpzGnrvfPGeufwYrbXo8EX85oSmNTuCiB/bXym77pReDCeWOeLnA1XyUZPHC5UV8DBQiGhaaqYDfPattYKSrLGM+o3esG0NEsFdhqidS6SAQJ446eV9eBDwSJOaqWjUDSl7q8Sj2CM44wEgkgOUcBbbQSnjOvr0zbtxAS9ZMR5Dx6QkKqx4KFq7fKKxgipLHUA2oKxPquMchAyclgaZowMiVbeaPuzmyt3DYe703xvP3/p2iFvYGf7Rl02iWSlMog2kfxG1gSEGOtWAjFvVDdgK0mwlchG2Y21QFI6uaUJRPQeCKBxb80HtHUEMBbE3owcXl5pESA4Fqp1x7IQAChjJaNPnVtbTULr/SfS6GMXNntW/e0/fkY8fltTyd2kEMszUMS1bnJjmt29decy8FevHXz09DoAhJydWEteuUweuvA2HxiXzdl+58OnVgDgpx44HTBy4dTKLz5y5vxPD5ZWoYtaXT6aHWbtNC/+6R9+Gd4Dk6w6s94HgFcO53/rkXPe2ViK9zIb/caV3X/wC0/eeuWO0hwAnrm0/Vt/7alXnr901zBdNuwjzuDdNJi748Wl7aN//Dufef61naefvKdAeG5/9gfj2af6vY+srn3z8tHZk31J+cXtw9MrPUBIaADvcBpdBqgtH+/l5S3xwBdevvIbTz10h5fRT/AD4seCD8RMLMnA8unGMAWAN/Ymf/Dim7/+5L1rnfBHF0HwTgxCOTkWanhymC775RdOrh5Mv39Xn/eJ02uD3/j5xxvbEkRCWSxZwXwaioCzNHj7/9XHHzx7+WD2obtPfIdTvReWlOC9Guqnht2Dm2OQU73OH2y/7bETClbfdHM7Dsa41oYzprX2N5surfoefmXnR91Z3R6W7f/z4tX/7pcfD031yw9/uB+Ii1cPduq8K8JReFsO/B0q8HfCvw8l/l2bw92D+VFRL/nA+VF3P3+bdoZMPnJ25Z/90TO/+okHb714Bxm4Mi8jRl+aZGeGMQBcmVcO4KW9zBqXo2UEAaEsTRzSvAF0EEqyqBQjpB+xhlsPnjOUgpeNEYyGwillCUFtbDdiAN5bLxg22q31ZNPaealHabDal3VrD+dtXSoPyDm1rg04yStnrCcMY8k9eO9hlql+wlcHkXcur3SmnffYGHc4U5wjEnTea+0oZXFAAy7yWuW10cZ1EzHO25CTXkca5xeNCiTbm7feeaOttSAoDHpScDJeqFFXGutmhTYWFoX24CWn4MF74AwrZZrWTvN2fRgBgNY24LRuXFGZIJW1AddaGbKqVW3rKMNY0taYEyuhcdiPhfdAENvWBoKWtXHOD7rSOreoWgBwDhGdQ7c+CDiBrGwZReohDHhH0nA13lvU+5PG2Np6F3DWjWFlEFw/qheV8h4Ep4yRvDZU8FJZrUwS8azQQSKsVwTJel+2yuWVJRQY+I2tlSs3JitbG2kiD45oJ6+e3d5bT/trg0BQ0g0pItSta4VtlM9L3U94o33MqQ3sIjerXTkrVBDyQJCytnVro5B4B6fWorq1CD4JeanaNKDe+7I0QrJBNzDQDBJ5NG8BvBCMULDWh5zuFwYQBilnDDmlu/N6y3ulnW9scwnKrQAAIABJREFUwKjkVAraH6R7pvrGG9NBr4OIAQetybxUp1bjSASTUgcE4pAezBrrvAwYpRBwJjlOMz2vdNmYXiLzrBVBmEochAI9YZRV2m1roM5vDcIj0jStk4RkSu9M28JBUeivvZGNujKUNJAskSYUpHWEoDytqueI2zuqv/Hm0eHuJOyX57fiWJBuLLJKl9pVmYpDwRlptBvP27Mb0XqXFa1blKYbUEQIBd3oCu/9zrTd6AWcgbLACTrA3Wm73g8CSTpRsN7jG8OgK4h1vlFN2RoP6B1EAW21H45Wrl0+7ArYz6x2sN7j3sLWgCMBYyGSFAic20iuTRoASCWJBHPepzGlLLo+biZNO+wxoUmHiUZ7bZ333liPVj+pOCRxrf0w5pfrmQW49+TK9l528cZhVjXlPB+mrGxsa3wv5ie7bFw5SohFfzhrrYdYMkQole4nlABd7/JxiZW2VWOK1qx2ZchJVmtCoG6cA++c4xSCSCyKSuaaUowDVhWeU1YpczZA5/i4UEHtrCel9h5ML5JHeRMKqo3ziEgxkpRQkJwuCiMYSMZmhUaEVkNPiJ1FSwggpYLgKJWdQAxj6bzf7CWbvdTVxXN76vw9Jw93J7FkoaCRxEVpBCGAmLVmGMtxaSQlL+9nT33w9J9fOWqtE4RM6wa8B/CtUrWxsWDOo7LWeW+cdd7fkhIvt4ZgaSd6+1Y9I+hvjggIYmvsIBRLMrAs9yniTz90xjkXiXcpSZerR8tL+j2bo/15ccet7dv7UwB8ZGPgAV6dj09H3W9fP/ype9+mFkdlkwZ89aa098x6P+2EAHCrlO+G4v6twaOnOAD8L597z2biJKuWusRx2Wx1469f3Xvi9G33OzhmNro/L26ZC91Rmi+x9B5MpQCAcVGvptEdwutb+Por2//5Jz/49AcvhJIvA4aFop87+sZXesm5UedsXz516sSuLV+6cfTY2Y1bfcQ7nEYvjRfLZSEAuDbN+r0RACwTRX/iNPpDx3etav7/gM2489L0MGKysRrAP3bPiT974c1b6tU7PEB/uHinxdBWN37lYHbr6YOn1y8fvGUrVNbfQ437/eHh8xt//PVX31qRp+xk0ruVNP7EydWX9t/6m2z104PsR5KXfNfa4Lk3d5aPT/XiUIqLV/aXT9/LYmjpN7qEe4dD6HedSCwxpOIrl3Z/7sLGE2fX/u7Tj0xsHa3I//j11+9NR6eS7kuzw+92gu8ZTz9xYS2QF7ffPvN6J3xj/Pa/tI1+BwEPb/rM3kEGDsp2Iwm+ubtIQ/7QSiooeXNSXJ5V40oZ5yUlo1T0IoGM5KUG5zsJK2rnAZu8OCqUNt468B4aZaUgShspMAlF01plXSj5KJUEMY0kAtTGxiHthnycNXVjtfFK29V+QAmx1jGCZW04J0nA4oDXreWMHs1bpe103uxPq1mmKmUjSQB81dhOyDxg05qAI2VklHLvvXNukAb9DmcE50XjjG2MP5w1oaCDRFSNjjnR2jmP68Og2xFZZcYL1U/Ewbg21mtlADwSpBSTkE9yRQG1cVHAkpBRxHmueh1hjCsqzSh0AjrL24NZ5RDGiyYO2Epf9mOW12bQEc7DeF63xi/7f57AIOYOoJ8KwUgn4Cu9AADntULwBDCUxDiXJiKNuHYukNR4D+g3uoGQNI4ZpxTQZ6UyFpKYaWMBoKz04bg+zExIfCx5txM4C71UNMoVBSOkXpSqbk0oaCxglrdhJ76xN62UdeApxUEvjQVvteMEDUBrYaUrlbaV8Xljp4XS1mttC2UjzvupTALGGAk5S2PhvJ/nGj011rWt7UV0mNBBzDh1xjrnIYy48zDN1agbSEEGPZEVbV6pXkg7ApMA+zEPOMkKs33QUKTGmVlpDY1Uk0lJNofhepdtbg0AoKrrLGsDQeY5XR9CwElAoRdiKsnhQo/nLUEcdYP1ruzHvNUukuzUSEacFKXdm1SjnlS1qVv34pXs1Z18Uquy1TXYawflc5em2+NqVqnr45IQWFsJ7z8/3Ns9vLDBTq8FG4OgnyAT1gM2dbt/kB1Niq1FM88Xf/aNN1oIYkn2Z+3hQk1L1RiHAFlljINGeyCEc5I1ThnIKpMEdFbqnanaGdezQjvnBcP9RbOo7e60OVxob71qzd64ymvT6cR7s8I4yI0/rBwltGg1gB8kFJBIgQpp1eij0lBBQoFHC4UEjCeRZMo4bWzZ+MNcSU4AgFNStKY2Dj3OS4MA2kBW+0Tyfsx7CetFbGsQJJL2OoJSwizrEiqAdCQDD6q1922t/vrHHvzQ2V4niS7vF0eZrpUNBTnM1I1pMy5agt46Egu60hOpZLFgk0zvzeuDRVs3GsDFAQk5PVqo7XHjEZV1XFAP0GjXGp904rzSScC8g1nlnQdOaWvsUWHKxtTKNsYFDNe6SV5WgC7kNA1pIOi5XlDU1jlfK5jmhhB0DsDBWk90AhpwspvVeWuKxpS1nldqGHBJiLcu4FQ5EBw6cdDvJhubK5TSgaDDgN/bT0/3I2Otco4RzGudt2YQydbaS5NiPQn2i5YgTqsWEQEwq1SprHFOWUeQeADrPCXYWksRrfMAwAhmZWOsWy6mH8fy5kIRnfefeXX7iZMrd3yAIK4P0vimV09rlaTi+C1qeQbBaNlqjmxpD7pkFM9cO/zI6dWlrRMACEYvvbLzpcs77c0I5EWjzvTfKtwv7U8ef/Tc33j47UIZji3nLJfp4d2wDB+4ujddNKoy5tqs2J7n8XuYjU6LGgBumQvdUZoDwMXtw5Vu/MybO0+cGJVK542KBb8lHrijA3hpZ/zkfac+/tj5jzxw+j/7+ceevGfrs7/11/6vv/fzDzJz+bmL/+qLr/3Gv/j8L/xPf/BnL125+/a4gzskBx89vQYA12cZZW/Vq8++ufOz953278FDfoLvGz8W84FbCChHxPVB57nXd+ZlXbUabvcA/SvA6V7nqHqrT7yZxun5rRcu7/76T8GlG0cAkJXNMjfkR4SNYXrxysEvPPn2taMTiqXxzmYa3bjZuT+31v+jFy69xzm+O/A9bH8e7K9+pbx+5egt2fRDo1700KlvHsyW7gfvZTEUBEE3TbVSVV0TQhDAmHd3IvoO+PCF9Z2yfvDE8KXZIRHkG6/u/ey503EoD2f55jts2r6zpPi9Rh934Pzm8JlXt2n3beO2hzcGd0iKf/6Rc+OD8mLv8P7+6nFqflA2EWeTSlECT2z2AWDe6FePilTwnmDWgkOIAzYtamscoYgEF4uWMOKdd0Jq6wVHJMQ6QOLTkAsupkXlHaz0ZDfh1jkLUFRGG2s9SIZxwFpjW23nHpR2AHAwa8EDpVi3thMxQiCvrVbWOZjnLacYhayorQTQ1mvrujEHj4tKIXj0XlnYPmpXe1xpzykgYlFr7wEoLCONAMA4P8vbWtCs0JujcECwrLVkZF7qQJCiMogQBnSSqSTkkWRZrUZpkJVKW0cJaZWLA99oG0qaJhwBo4AuKk0ABWdBwHYOqhttLRha51vl+j3ZKDvJtFZmmAYRJ1lp0ohRQp2HkFPnvHa+rE3AKKUYSjbJlQc76nJKCCAQh52IE8SqNZGg1sGJQXS0aGSXJpKHjMxzFSW0amwcMi6o86CMnRWqn5KqsZwT733T6tWu1ACMM+phlqtAEKQ4Wum9eWlbG+eREpmeXh9+u6wIQUIp8dAouzGQnJOjRRsKGknmAAQnS9ZXljru0dU0OMgaBJCclo2pGt1NZNMaxmlR281U9rpBXrtKuaKxRW1qZRPnqsbllSYI6z1ZtS6KeGu8UjaWfOewWl8JD6uobNUoicsKvIcsbxa1q5WL1leDvQM0TRivAIC1QIGs9gPwYAxyQgjCMBXdkNfGVY0JOK+N96Wd5q3xrtZGOCIYZQG5slOAg05fMMSFdnHAw76YTqskEpN5AwrvYhGlOC19U7cHu9M8qa5cOdzfn5ZVk2d1q2zajdNeOC3adNh5fHOzPtpJAvCUldqe6IvtcSsEbgzDsrGcIhLCOJnnynkwDqraMQahJIyRytpSuTjgiLAoFDh3MKsQcDSQDHFe6kDyVunGeMEwr6wFkje6Mq6q9CTTnEA3ibQyHiDmtFZ2oy+vjev1npxl7WoqDzPlYgcA2ri1nhhE8vqkIgSneduLuGS0F7DW+4O83exKsD6JaFnbQcpnWQseegEi4UfzxrbMO9gcxutpJw6ZcURwJojrJ7xqjdK+H9Ko8UVtkZlaEc7ILFOIyKzTFmJOG2s9wMFMAQH0wAhJI962liIgIdYZSsA5bB2ZZM20NgDeOBcIDDlVxg0ivj9vTgzC1rhhTy9m4fU9KyhdSeh+3nZi9uakigNea0vRpwGLAzzKbRySVvlAUEaAUtqNKYAPGFCCNwqlnGsN1tqv9yV4oIQa6zhFABjXxgOc6MFe1kSCK2uFJAdVq4yrjSWALxwsHllLX9idbyXBQxvDZbG4DA0oje1wvtQJaOudhyUToASt995DVbdVowRjtwQDt4YAt8bd96wN3unR+fVXtp944BQce916f0eTFQECzl4+uC1t5sW9CQB8YGNovH91Pr63N5pmFQL86mP3XNyfPLA+lIzmrR5Gb92Dvvj8m9tZUSj9rvee1/cmJwbpu7wBsH04H3Xjq/uzHEE7/439yQ4lX97f3YwDAGhv9tcbZyTll/Ymx82F7ogWBoCXd47W++m11jzaS2LBD4vq4c3R2Nymi7uF47tGP3t+8/zz3Z+7ZwsA1v7+0195Ze9XP3DP9Wn+pdd3/9mfvPjbf/PtLan/+z++8OR9J5ePD4t6UrdfvLq/1U8+e23v4VUxkhEAvLxz+Mjptco0CX/3yIWf4PvDj8V84A7cc2q1KOqHz2wYY5SxtzxA32en+QdENxQAsKgVADx6eu3Vg+m//MI3P/fsq0fzsmr19o84LHnpu3/re97bHcURm6sGAM4NOt+6GYBw98Zgb/YDzQfeq2LuxoEHP80rAHjy3HpvmH7pL19bvvW2xdDtYOwma/WgtTHWwvuryI/jkw+fniTuT3dvPNhf/fj5szuTLOD8px86++wr29/t0O8T959Ze/7VbQAob3pIn+jGe9ltl877NldfunEIt3+dXJlaW+Pcm9PyRD9a3sYujYuI0bODqDYWCVS13j6qqloTAmksOCVBwALOrPMr/ZAQUMYT8B5BKactOG87gchKAwDgwFhPEQn1SSgBoGwso9QYH0uWV9pYf3IUCU45J8b6JGTaOOtx0OEUUVvbKqssaOONtbNSG++M9WnIpKSImNfWGlDGr/Z4VmqCQCjpxLxRLq808UAQvfNJQBFQaxcIOupKAGi1TSOeVdo5qFu7PgwpQc5pLxZRwGVAEbBRttUulrRRNg5oVljrvAPghCFiXpvVbpDGnBBPCHZi5qyPOLXWJTHz1jrvW2U7EVfWZrUBgke52j0qG+2jgM1yRRBlQBtvCBJGSL8jOYHpQglCmtbOMjWet947SlFZTwgSglHIurGolDnK2tY5DsR7TGPmrEtCemYlpojzUkUBBcCiNv1UAiGIUDaGUKKdLVuThLi6HsWhWRtCErbDgQtWUmp9VtetNovGBoJUyinjkojntUHEqvWhZEuph3Hee2yd60es0baXcCHp3qRZZC1nmFV2UtrDorUOhCDrHdmPqdKWIjbKdROx0guTWKax6HdEUerc4FqXV9oEkjrrk1AQ6rX23ntEzCvlPXjwD58emv386t404GTp77ioWvR+UuqsMTvTOgqotr42Nit1JIjxMIhoqa2xPpIsjXgU0O1p7ZQ/tRqvD4J5pl7eLqrGeA8B9SdW47xUva4MBc0qQwA/+uDqdJL93u9/9YUXryLl9z94189/8qFf/y8++Zt/55d+5uOPnT63+dTPPtqPwtU0oJTsjMtYkI2uKFvnAbLSNhoAwDgv6DI6g1CCFME4a4yXjHQiprTrBFRyrBpdNiYrNaFk2Jfeo/Ww2g8J5bNFqbQrax2FhIAPORvP2/FCRYIKzuJENk272qGtdmt9cThv17pslqlhR0hBTwwlI5CG1DloWndtUjFGauWQUuddwqEf85jDyX44zrWyblZYY+AoM1mlGm13J/U81yu9MIkpZySNZBDQ6+MqDDgAOKPXEtGLpXUwrnw3QEYxCemgw7yHJGC9iK335MlR2OuwEwO5moo0psYAAtbajrNWG9com5VKUAw5k5z002Axy3sSnIc4oJVGTqh1rmztRj8UDAMkkqAnbFHUN6Z1pgwluCjMej8IObHGJgHNG0M0XYm5QJxXapy1DqAxzju31ZGSc0QXCIqAgzjoSDor9CRXURQAAsjQAxxV7bRWz25PQ8lCSe9Z7XCkyvpAkKO6ZZzs5e1B1bbO/4c3j373W1cQ0YP37i3VxPL37jxYZwnCrbgA7wERFmUDN41r3gkEYIizRiWS3+IJS+xNssfvO3n18O2B/xJ3fCwNZaW0Ba+cXUYffPXa4UdPr3kAgrj0jrt04+jkSm+93znRTS7ujReNujRe3LI5+dYbuyuDTvxui0kA8OK1gxPD9F0bVTtHi1Dyb13ZP1qUrxzMPrtzFGf1fZ3BmaSvnZWUL/8EhHmAq0fzJ8+/vST8zEtX7z+zdvxsNybZ3SdWdhflMh2sVLobvt01Oy4m/g4yAKVtEghC8YGt4d//uYfWA7vSlW8NOp597eRq99996aXPP/saAHzlzb1XD+effvnKv3x9u6/NkEcdwVur//1zr/3SBy5w+uPVzv4rwI8XH1hGEJxa6z9z8Vqt9JXDedYoD5BKsZv9aL19jmMlCq/NcwDYW9R/uT2dN+of/86//68//Ydrg872j9hy9IGz6zeOUQ5GCKCfFA0AnB91D24uuC+dhabFu/P+HxCb/c4ylXnZKT+eUry0GLpjyeptPvAD4L5u6nebg+s5ADBCVtMYEE6v9y/vTpa9ou+MW1zxfQ4HAOCBs+vX92cAcCty7oH1wbPH1oeWEoK/uHj1+FHG+aw160nwl9dnoaAPraTLF5/ZmWrnrue1I2A9nOlHrXIeQGu3KDVBqJUtWz1IZKMsJYiInmAiGaGojJ0sWmNdGjFwHhEqY+el1tYvqiYShDGijaGUZJX23oeCXB9X2rhuhwsKi0pFActLM55pbX03ZJxjwEnZGMaIYIQSdNaVtY4EUoraOkLJak9ISkPOpKQI0ChrHQxSQRAdgANw3q/2RCgZIjEOytZEkikDHmCtLzshB0BEpARbY6Ukea4RYLJQjGInYgFDZZ1xliEJBGPUW+8YRYLQCXkvEmVt69aRZZyCoASxaJxglDHknM5yPZm3qrUhJ2t9SSjUyvRSQcALQpyFUFBjHNp22A3uX08P5s3RrHbe92KWVYYQROcpQW19IGhZagbgve93RKUsIKQh7XWE4LTUbmMYUEKQeHBOgPfGxAI2UzLqeu2rUR+7MWkUoBNVTScLkpU0Ep2eIzsxT0RQVJqAG6WiG9BuyEKBaczL2uweVdN5G/DlKlFgwDEKYcC881ltIkmThCcRF5xKjoHw06wtGg3ejUu1fdQIwcKQDTuiG5CNHk8kWVTqaNaksZgtGklxFLNuKivlEikuT2ZbIxkGnDGyM1aBIAGn66Oesy4vKwQwAIwhZxgxEgk6yZS1YKyPJV2UtlJ2WlmwvjXOec8DxhgJJKEMOwlfFCarjGMYRbSpzXjRck6uHza74yoMqNHOeb/ITcCAcnLXXRu/+EtPPv3JJx978p677zmRpOsgzWgQxr3u2tYGc3pr0KlVE0RxVRS748I6HwvSSxhn2AkpZ9hPOEEfSFop68F7xCTkm30xiHkvpKdGQVmbg0ldVrYbi/Mn027EJ7n23sUBBXCnVzvaqEQSjxTBW4eCkaI1kSRSso0BF5xEoZznqtHWe4giPsldbRxjaJ1tlPWIWW08eMaosa4TcmMcAcgrW2p7fVK3GvPKbHSDUHLvoVQmK9pFaZFAJyJhyLPWdBOBBAiQeaH6MY8EpwRbZWatRgDGIJDYCRmCz2uTSMYILipda8vQFY0tW7u/0AGnK4k8tSL7HT7sCMlJL+HnV6PVnuScNdr2E14aqIqaAyzX7gXnlLLDrNTWZbW5Pm6oRA/w0dPdpmmGXeqd984nko4zFUsMAz7JdS9mB1VzbVLtztq1NFh6eVnnGusvT5vDTDnwHUEoxZBTBz6VvB9zQhDxrdyZgFKGeCINP3Ki/9SJvra+Vloy0hHcGh9zggBvTCvt3LRW10p7VCnnYXteNsaFlCrnAMB4b51HROPcrSs5RZyXDdxsSN1hDXQLldK9d8wHXr1+SCl+6sn7loc47y8tJvf3V+44QxKIVhvwXhCqrX5xb4IAj2wMAOD1+fj+/orx7sru5NELWx78SicEgOduHL0+WTy43vfgPfijWX5qs39c33wcR1l55mbY5R3Ym2STRfl/fO7ZT3z6D165Ov/W1658+k9e/uXf+fw/+rdf/fw3t595c29aNJOiee7q4b/+8itffv3G8WTi49HCSzxzaftTj94dSr6ahLOqeS9+Au/YNXr1cL6UAbw6H2/FaVeK5bFfuHjl5x44c+tjz79+47d+7Wd+4+lHv3bx2kf/4f/6n/7vn9s+rC+9sLdeam0cAEjKv/DStV/54L3v+z78E3wP+CFUWv+fw6ATWecGnWialQiAAKM4uLEoN9L4/Vd7PwgurPQqZf63v3j52zcmH79746WX3/wf/84vofef/ndffn5795MffvdFwB8QeLOWPbHae/nq/rmTb80Bk5Bf2cnhDADAWie8lZm10U++P4uh74pbFkPLZfpLxyTFoyTKmnb19kyApa2QtXcqB74nrCahJKR/c/x6K6X4d7/w4j/6NfwRpZI9evfWfb3OpKjPDFO4mbB4WNSrx9IfF8fisZeygWHID4r21qYQAPz51fHurDm/khw2ihISCjgo22Eqs1IPI3FjXlWtZ5ykIXfeU+fRwzAV1vkoIPPS57VOAnE0b1d7MhYUkKjWOe9Xe0FZ26bR3ruDRWMMIGIai0WukcB6TzoAJIQiyUs9SnljbFG6JOacsbxRgSChoNbDKBV1Yw/nqpcKRkkombMOABvteilT2qURr5RlFOaZRoQkYHmtq8YB2G7CW23rRq8Ngt1pyyiudmXd2iRgxoPzMCv0ek9mhQ4kJRQd2tV+2Grb70pE9N4Th9r7aaE5xVCyorXYOkqhqnUgqRSkbJ1znlDnrOtFVHJBECgCp6QTc2N9rQzzrhvxsrWzXPcTPuwEh/PGOec9dInZU269K5GSWdEiwdVUGI+Ug7IQS2wUhAFdZCpmSAC8dWlIrcVewFttgSDxfrPH69aup/QI0RMY521joaqBkKBtvUBIQ3KYqShNty/vJmKTgi2yEl4Zf6bQf/2B++e57iY8iYSgMM0VAA67Yl7ovLVV48KAjXOVBNRar7VPY+ErHXIyyZUz9q6NhBFwls2N2hhEs0bvz1sHaJTdGIWRxGuT9lRfJjE/nNZJLEJJqxonpZ7UrhfxolKcCvDEeyeojyXfnbudiQoltQ5EIKq6iQI2DHkaE07VrPVZoboJX+c05CRXznnTtk5rtSg0eGcdCEGdY1LQRaHH82a9GxCORWWUtkLQqtJ5oQFgc6sTBORgXHcjXjVmXhgDGEQhJr1ZYUJONfFpRIFy4iCRDIXfb+hWL1Zay4A3bb3WD47mrRA0CeipYVBr6zmpWhtyYjzq1jJK0pgp7SLBW+8P5+1R3gJAN+aUURmitZCENIpYNySTzHYCqoGWtdYGtPNF47oRiYW0zq31wqKxReNmuaKcVmVDogQ9WOut84LTca4lJWlM0fv1frAzadpWb3SDeaU5x14ka1VHgivjJoVqtEeKrfKqNXVrtLK9NDC1AoBQQlX4ugGBtNF2rRvEIbsRcGPMVkIRcF6oSBBKiIjQOIgBjcGQ4EK5rUhMG9sT1BPmXDutNIAfdhgiMmRpIIrKIHNZYSjFMKCHcxVLUdUto5gIUmrvdCt50BqrrfOIQpD9uVrp2knLrPONxqrRzoB2zjpUDoYJr2o9L3Qcilo7Qei0VGtdYZ1zHsF7JAAEGZKr09pY54Eq5SpnAMBY4AQ314edSAaMCEoowW/t5d67vaJtjF3vBMZ6ZXxI6cmUFkqHnMwruxUHghLwfiQZRSSIBLE0lt60EjLWL6+3y/yB+nZDEev8cqRwHIUyaSCOl/keYPtgXnN48sKpO1nE7YQiCXij7PY4Wx9GiPDlK/s/c7NZvgRDsjfNT6z0lkG/D2yM/s3XXwYPt3J/96ZFHAX7TfHOxAC4yQfeta01zarf+tWfoZL/N1988e998B5wOkLx3EtXsuzwL8bys9/YbrRFBO28Urobh/9w5S0TpDuihZd482D2x9++suz0z+t2GAfvJSZ+9drho8e8km55hgLAtGy2bm4lPfvmznHbks989ZX/9jc/AQAfefDMzz1x4b/6zNcmz7x2w/vf3pn8rY/edbbf/7Px9u/+5au/+uH7lNeS/MRZ6IeMH0c+AAAfe/TuB+/afOVo+scvX/vUB86fH6WHRf1XwASWSAP+mddvPLo5umejd3l//PFHTg9HkUzZJz56oZj9kJUM72Q4H37g9MtXDx44u75ckV8OSZe2mMcX3B87t/F9WwzBMfrxTpwcprvzHABe2Z81SnuAi1f2l32IlSS4Pssbq7QzIbxVuxNC2rYFAFymw3y/KqIPn16b3XR2Orc6eONgskwp/s5HHcf3Shd/6uGzr24fJcPO4zfj6J88uXpxf7p6fgsAPMAXX7p2YtA1C3cRjk7Hvay1a7FkBC8eZP1YLDeFvnmweHFnXmqdG5eX2gEg+LtXk+15NeiJg3kLBBkj6GGetdZ7zghnpGzMWj8MOYYBQSBVY7Rxk6y1EWeMaGMjyTklkrkKYBjLRa0A/CgVR4uWc7LakwBQ1SaKuEDgnDbKZqXuJnyaKedhNQ2M8225CDozAAAgAElEQVTrWmt2J7a1jiJOc92LedXajUFgrGccJacCcWfWKO06IS/BSE7mpaZIBgnPawMAq10Zcqwae2ol3J81+/NmmAjO0RtfNHa9Jz3xhEDIMZKsak3RaKWdtT7kxHvoRHw6b/upKGojGMlKo63lFI31zjkAvz6IxotGcJIkwgCEkrba9TuybIx3PpaEM95qdzBvWuUJAVZj0ZimNYjYTXhR21j6ee0bZShi1VhG6TxvhqkoK3NoPFrHOOnELFtoQ3VXsFMrkgGOi9aBCwRrLIA2TNDDsQ4CyqwHwgjRUgjnfKtsadyoKxlFIcT+jb2Lz78sJVvf6I5MTVkPERnFNOKzQlW1IRQ3hoE2/sQo2J0041x1rGeElo1b63F0qK3Vxi5KRQk26v9l701jLEvP87D3/bazn7vVra33nunZp4fDIYerKIqSqWihRViRYsMKZBmyYkcIoBiKlAQJnNgwEsAxYviHEkuCQjsIZMvQYpmUREoUaYnbcPale5beu6tru/s967fnR0339PTMkBqTox8mHxQa994+51TdQt3zve/7PYsvW9soE0Vce182pqzVWjcAgCv7TdnqlSSKBR0V0jgwzicR08Z1MrEomnntiQdtPGdEW33uWnV4PfWtPKBb1BLq1mV5tqyblW6YhJSCNx4OJOkb/TjkbildIgjrhavdoG7NZKnSUHTzcH/eNK0uldXGRSE1xgWMruTMeT5dqrLS3TxQyiwb3UnjI6vJxe2ykvbaqB32Qyl1vxNkIUtDsqxNJW2SgHeQheTqvooYMB6c26s3k+Di1sgiDbhflmpWkjggkSCCE0KgVoYTqJTLEhFwVraqaO3urCWe5InopMQhgIeqtAeUsIDgZK6kJ5F3xrGqlqWyjbScYiOxlwbTSu3NW8HJQTBfHAVVo3sp7i5kJ+aUglR2rc/npR0v1EZHgCH9VIwLtWxMq6wQVGpnwYMHhogEWm0mhZfKeu/TiK/1wllRI3omQkSSx0xbxxkj4LOIN8omEffOjxZ1vg4Bp72cpxyd98eG0bhaCuYHPVGO2kmtOxG5vpCUkCP98OpcUoL7S5NwWkuVh3SjKxaNWe+JnXkbcyGVCyPW1FJwmsWkmreU0bWEP7ulI0a8B4soBGrrwShtXcSACJ4mdLuQ1tppqVtl01hY6yJOTCRKpRmQSpp+zLoBRworiVg22nnFKXDGKmkOyndOSS8JqqY9hHIxL4cRC4W4a5DMWz2qpaAQUJ5xtr4SHcmCE7348qz6wuWJoKyfENCqE7A9RKnNvlFkXqxFgXSu0MZot6tLBa9qdg/u5+XrnTwOdAW3En4AoFamG4nb1rV52bAm6twYMx2sTNZ7cSPU7OD1SHBlzeXxvN8NL45LgnB6ow8AL83H996o77/6wpV/8DOvVswBox+648gXL+5+8fz1j9556PLOtJ+95WDu8mg+zN8yPemrZ658/NG7h8POqbOdj965cXZn/LG7jv4Xj971ynJyZ95nhByYlo5LNVkW/+wzX71749Uh1BuTyA68MZ6eln/7zhtJZFHwVmLi3//ymf/+pz528PhWshAAjKvmSPdVnfQfPHXuF37kfTfJQp/44H03D+sO8p9596l7PvzAQyc3fu/sJcHZZ1+4+vtPXTy3v/j1n/vR7zoLvRP4juwHED58+nih9Z+fvfLJD52OBeuE4i/TcvSezcE/OXNpKyBdwZO6/cCDx7/48pVf/PiH6P34Dz/1uW929tsD3rhJ3fy4bgyy6+PFrTX1MIv2ivpk0Bkm0f4Ncstanr4TFkMP9FafS3Z/9befWEuSP3/h8ivXxh1Gv/by1mAtc96fr6vpsnoPWb/VOuDW2IFbb9Hkhu3aG9/jm+IDR1c/99KVK9PlsX7+6J2bv/r5Jz56z7HDq92b3cit+LakFB8edr760rV7s/BmCsG7Ngeffv5SpG0j9a9++rFXru6869EHz+7MTncGW0VzOIsZwWuLBhEeXM1fHBcA0Cp7flIxjotGMYbzufnwyf7Z8bKWllLKEJOYSe0RfZoKbTyir6QFD/NKtpxWlU1iSGO2vhJa4xalMjVwTno5b5WZVdp5sN5yirWys1J1UlHUumqNNj4JaS1tmAkEvztVm4Owaq0xPot4o20WCs6sLL2yLuZoPMkjWjUmFGRRqThkzuP2pM0CVjY2jpi1bnMQVdLG1mntBCOHVyLGiDQ+iYIodNK4tU5Ua7Oo1azCTsyVsmCdAx9yOqtMI41Stq6NI0Ccd0kQMGoJrPaCVro4oPNSM4qt8YvGgLVRJMrGVI3upQEloJwrG1012hrvAA4ICa1x2jgKGAcsEui9X8kDZW2WCCUt55RRn0WsVQYo4YzEnClrrfeL2qykQWbtuDDaWKO8MqZc2IaZRLE4ZJNFO+iHynotDadQlXpn1kYBSwOWJWy+ZFHYShP0U2HAN9J1EnbPHcMvbe/d+/A9R48f8XJ2ZnfSZ8J6nwgWh5QLsrVvopABYhpTpX0csSxkVWuzmNQSvMe9mRyX0jvopGK6lP0sGJc6jWjdGEoIoK9aC857wCigYL12PgvZsrJlpSmhaUiAEO8gzsXFSUUIkdoFAU3DYLgShBz3q5i4KaehsS4WZGWtN9rdrps2YEEhXRThas5GgMZY4BgxmDcWwdfSxQHpZ3y0kMaDcRhFIo1sElJENNovSrVoTCut8xCEVFuXpmKx1Bd11euIlV4g9xoAMNYfP7kx3R6dWEuN872ETStbS6elU9pkiWgqmUVs2cqTWaqNnS01Z6AAbasgCCkltXIA0Eu40m62kN6Ds84be2FbZlnQTcRmR+wXMg4RgDjnRvMmT4LRvKUED69GZW36WeC9ny6bYSeS2vVS0avi1krrfMBIYY3gGEeCOIXkgABpkogH1FMg6znbX8idpdnMYda4kJPdRZsEjFqIBdoClsoQh41xgkBZqk4mAkEdgPMQcVIpaq1eNl5rKxhlFEZVuyFTQtBa3J8tL13af+T0KUasAb9bmo2Ye+cIwUWjpyUSAsOYE8Qw8AGnjXGdiDKK44UOOK2U2SuM0q62LmAYMKq0SyM2BYoA86K0JIxDSiGql0trXal1zJmg1INPQvrc1SIKOHjSGqusXu+IRrlaO0pI3ZpBJoxzWUBWk2haKamBAHpntAUV2ixkBH1raoogCDnSjS7PaussIknjsEi6URxeXLT3DXmp7COb3YXWv/389kYaPLCejxs9bvVyr5DOriXRg8OME/z/nrkMAHEan0n4b13eWYsChmB8m3HivB8r8sqyOdbt8Bvxw/OqgTeQ/m9DpXQvCuD1o6552fplPXxDyP1tiASvpDm/N/nIPce+cuXCB4+uAsCLtzQDALA1WtxzC1n/yqx47/GNC6PpR+88dHl3dugNo/qbuNkPvOm46oDzs182eSD6cRhQepPkc+BbemBaemA2+jtfe+HmiVf2Zg+efN0mxtnro/uOrT+xPf71Yx/ZWpbPXN//a++6a/dGEtmt+OzXX/6rH7r/5tNz48WJfgYAL83HR+LOK9eufOD4JgB84cyl73/wxM3Dnn7l+q1bCk9sjT569+EPHlvbXVbvOjo8tJrcmfVPb/Y+//yFvwyh53ckvlP6gQf6qy9M9x/orwIAAqz10se++uLNgnItjR6/9jr5/7cRt1WWjZHH82BdmZ8+vH54kJ25vJsx+v88fZlRcvqOje13wPn04B5x8xN0cnPwh1976ebzB3qrL8D+aFGfXOkc6sRfuuH++S1aDH0DHFvr7s7L/+FX//Dv/9TH/tHJtd/40pn/4/e+/NVEDCPqrHOoP4l46y+NUkooIQTx9TfrN8STfRPcv9771GNnL02Xx/r5Zj8HgFDwm7sl3+xs8G9fbXPf8bX/+9999d4Hjt5MIZhPlr/xxMv/5ne/Mt5fDB++9/s//r67uuGF0ej+u/oMIBOs1vbcpDzcixkho0bt1vLxi1Pr/f0r+aVZPSsUofj1rWktLWfICKx0xPZUInqGUNTaOKAUvceAg1WOCJamvCz1ojTgRJaILOJIcLKU+7O2UbZVliAULUrlKIE05FVrEJAzQqkTnNStUcYbYynB/YWklKzmPE0CJDAvdK1sFtJpYZGSbkSl9YLjSldYA9uzliH0M7E9bbyHqjIbg4BSQomrGpNErGhMNxPSWGk8owgIxnjCnJQ2j8RkKTlFSgARlPZSm3kpQ8GU9ZQgAXAApdSUIFi/aAwA5BGlCGFApqW12gP6wDrr3LSQaeziiFnre1lAvF82upXWeDDKamPrxrTKWeuzmB0dJpRAWeo8FlFIE0antaqlmRaqmwbEufGyFQFNI76sdMXteNlyRhrlvAXtwTkHjFoP80rFESMeCAEaUAZutJArWeAARws5XrbH11MgWLY25DCaNkDJMBciiutGBmFgvUMkpx958NJ44rwPOK2VV9oGnPUTQShGjO5XbRxQh9hL2HipOwmjAL1cAENjXVGqPA6KxmjlGkkFIyu5sAa8g0t7dRCwQUekEUMAaV0eC2V8UetWegA7q/Rmlzpl5gCCkaqxFNjLV2ePnFozxq30wr15OxhEdWtO3r25XS6euzB+16n1/XmbJTyLdN3aCzv6yGp8ZVSHnK52Q0pgb9aWjXHOF7UxHhhF7711jlEyCPm41cNMNMogoDbOg2+VAYBaOjOzIWer/WBn3AJAkoSzRTmp3DAl1+dqmAuHhDgiOKfeqwpDyp0HTzIO9siAM8aKxkjNEbGoTRqSLGaMkr25tM4vltLHLE94GPE04s555X1Z652xSSKaJ8Ia3JnUlGCehdPCMEbBuSgKiNeNEhRhXLRZKKqiSiOcLnUY0Ep5xllZyj5AxDASjCDWFpAApbjWCarW9FO2X0ilXSfmjXYhxUIZ8BBSLFuDzvUy4TOUymrrs5DGEb2279EVg4gSwayjBCEJeKNNwGFR2zigAFAua+1c0RhBQWnE1AEAZ2AUlc4e7setM60C72BUy81+OJ6rfoeC98Y58Egp8YBFpQsED7DWEdLAsZUICQZSZWvZtNSOByNZcopaNau9noG2EwSUeau0dZ4AIPj1jpjVJomotN57JxihFI1xG93wwqTuJDwD8ACDJFhKMylUyigRVhsPHqOADZPgyqLljGhmlHWXt8dREjGCAacOwXrvHMScPXqkt13IRasfXO0PYk4QZrWeNvpkLy5ac3Wvnm90j1wa38PIWubjWLBOeCjKPXFPL8enuHjh4k7dSO/h4vZke7w8COO7NVvgtvag0qYbBTdfP1g/52WjlnyYJwcvUsQ3ZbWGQXBm4arn98L45X/97MVHj649PZk2Vivn5kqPWlnuLYYbvXndekoI4tlZ8cfX9h5c65mqeWVvtjVenDqy0urXOW3cFO9uTZYPHVuDN2sGbnJ+zuzNTq/3GmU2Om+5k/DHz1344F1Hbz79wlPnf/Gvf/TWA85ujd5/15HltfEfntt6vmlmzIkbiQ3KauVtxl61Rnz+4s49x14j3z6+Nf6hu1+1DNotqmP9V3ubpy/tnD722sp765YC3EIxujRdHFpNDohS10aTn3z/Pcp9N4bsHcF3Sj9wG05uDi5tjadFBQCLWv4lWI4eCGQRMGKB93Cim33fyQ0PQDZX/vSlq1968erBYZvDzvMXd27ry78twBseoKcOD3cmrws+q1u9v2zg9V6o37rF0FtBU5U3zm8M/+TSWCNMjwyzQ92PDcOfuOvOZyeLly/vzaq2d4vp6s26/6AfsM4d3Aners54kESl9a/sTD9652EA+NgDJ56/urfSTQ48nb6phIC8fb7Q/SfW9+fldGv6xwDrjD350rXf+dpLe2n4X33fQ09enf8vf/Xd7z+58eTe1j/+nT+/49TGJ08NAOCLF0e9RDw4zBtjY0qevDwb5AIJzKW2xq13g0mpa2WTkNatHS1kFnH0XnAqtY0FrZVNAlY0RkmVdOKmtQTAgQ84iQXnFD0n1r+awpNHwjkJQKrWDvPAeq+cc9bnKa9awwhSsIKzPGCaYhLQvYWMA1opX5vWAwzSIBJkUiiKkCecM0KNM9pdGzVJQAc5r1ozr3QcUOMBnA8Z3ZvXnUSEgnKKrbJKu4DTVqpa+kWl05BV0lGKZWUCwSgjacQXtTbWCU5CzgQnBEFbxyg6gmkoCPpFZboJnyxlgdjLQ21twMkgD6Vyxrq1QdSLeaWdc956Xzd6XirnoJvy6aIddkIR0roxccgChnnMlLUh8kWplfOJ4OChE/FZpepGg3NVaxyQMCABRQtQKV1U2iFkMeulzHh2bdQq8OshDSNRt25R6wOxRCckQGkpbRRQ53zAyc6kWh9SKUEb12qXBXR/LtcGaVk23X4OAJyS1W5ybn/EmF8s1byQ3oP3kIS0G4tGG+v83qwVnK31glCQ3Wk7LQ3nEAoupZnO20BQ5QEJWON4QPdn7WonuPtoPp63k1Jdul4e30wEpfuztm2MdE5rW7QGEWNBZkjDkErtHILRPuIUqN+bNB5gXkgWZGlItMbW8yAUTd1cHzfauFZa2/PGEOvw8n7dSKO0KxvDKUrjEQiCtQAMwVpPCaIjlKIDpB6G3cA5SBNOwG+PW0ToZWLQCban7XTaaMOCkFrnncf5ZNmLsFJ+JRcAaJxvpJkVOo/AGFtJ0AY0WME5oxQAlPYO0FvfT8XerNmftsN+WFbaOd/JecKpQ8xDYq2xBsCyfi6QklaaZa2t93HCOyHjhCyN5RRq5bI4bKUiLOIUpbGCEeOc0oRQFzLMY9bpxtu74yOnjhGAQSQIQYw9JR4BEaDmCBYZxTRgZWuddUWtAxqEHItapxFPY6qNkxYYI/NKMwZUIqdeMSaRcAeNcs5BKgKpzajSmSCl9gDQNNpaStAkAU9DX2s/KkyeUU0RwUtrCLBeDLtLtdYNOMVuxpV1wzyolAkZpIxxIEzQjNOAEUEpRbdrCKXkmSvTE0Fn2ZqAkR0ps8TP62a3YuiiaxPZSe2yaZxzjbG1MltzoAShNd75PAql1kWtPeK5SR1TLCpTK7eaUm0sp6TRvhvzvaZplRGM1sqc2V8QcFJ5isx771opOD2SiXGjrHXPev/E1kwIcn5WnegmFvzxbkQQrfOdnnh6Z+fhje4Pnhr+2+cCeGXr62p8/uXLEadpEpTUrAfJzngeMP4rtRKMdpKwbFQk2IXtyXhWAgBFVM6JN2T3zhqZCHZrq0AQEWBRNeWCDjvJrc0DeUNHkQU0bGYvfPHCL1/edT3+D5962TqZdjKErcNBAABfvbI3G0R/7/EX7spTD3CpqF5ZLLc5pIzCxa0/euLljWHnPUfefG2aFPXqW1T5B5yfvUV1dV5uZPHFyWuGRW/EuZ3J3TdyALbHi0bq3/yTp0/fsXH/ifUzl3a/8uLVf/u1sz/3Qx/YLurPjGd/8/jGuS19tZwHhEirBeU3GFgAr3caPWAc3JTM7Zf1ZvaqeODzZy795AcePHh825bCrRSjmzFkAPD7T7z0yz/24e+Shd4hvL2K6j8ZnDo8PL81biKspV608mg/P2CW49uv+f4i0M7m4rUtRUR4aHPw5ct7Hzy+lgUCAI4NO2eu7d9/ZPU99xz+0xcvvBP9ANx4X/08BoBpUcfxq3V2HPJlu4RbvFA7kbhpMXTw4NuIlTCHQfwv/85f+f4HTnzm7NVf+Nzj7Lkr3/OTP8AJec+wh7Wa1a/rB+AWahAAIqC11jr3dvcHAOCRw8ObkuI71wbn9yb3rw0+/eWz3/isbwXe+V/5d19BQt7/yB0/8r57f+HOzZ/9ykvXG/3P//YHCIHz5fRYlh/urb1/OLxUzAIfOfCn1/JZqz73yv7z+wVBKI3NY747a0NG9gvlnDPGW0qGaTBt9KKSnFNBUCNoY70H4xwlgEwsKj3MA+eBM5oGbLSUXcMnlVrvBKvdUFm/KBQiaGMjTtKALhtTt5agt95lEZssJWeiVkbOLCFgrVfGzyrrjF3photSlowEjFJCspw10oKHIKCtcpHgzoMgdGktAejlfHfaZhHziAc1XxjQTsLMUjfKINBaubrRDnzTWkpRaReF1Dk/WchQkKo1SUCr2iAFggAIiMAZJYjDrtibNojACax2AyDonJ/NZRbytVwo6xvlrHOEYFXrUNBeSrcnJg5J01qp3GoeOOuI4Kv96IBERChV2iKYgNOAksmibTiRzoEHQPSIZWM9WKlw2AmMsppgFDBpbd0YbdxaLwbw3vtAsKK1VaPTgE0LlcaMEe+MEwFrtaeMcE5rqbxlnZheGzXegaCowJfKR1FwuBcsDW1KT30A4EezapClCKCtowR3p+3+rD2wKZTGeaektojgPcwmlfMQCKq0dQjSOMaINs54p63jlCwLvTNr69YSAh7g6l5tXzVawU4sRrM6ihlBWOtFk/3CGn90LZ0sZSdhLaTLRlJGKGLIg/3CdVMRBXRvP1guK2vVZj9EQual7EQwCLngNBK01HZZmdb6fsq896OZSWNBKfEA06V0DlgMsWCqtf2UCwKrvYBSytDzDbqstDLWOquVi0LeKscoSmmBibqSAC4J2M5ME4pVKw+GHaVCDyTleCCO9IC1MoxS672ynqP3iGFA54Wsd6o85krb2VIWlHQTkYWccEIICTjdX0jwmEW8qEwUMW19o51CTxCN84M86EUiQL+SCErQOV8Zhag5+sOrhCEZmbq3llDwd68IaXBcthRh2vgspIJiIuheZVLq44gq7fOISYalciGnHl0es4iTSakjwWWr+im31iWCTQqjjPPOpJxSJjizMacXx7TV1mrXIgkZg4PUdrTDPNidt7HgSYJ5xLVSjXKbg7CqNSEeQxYLumwsOB8LVAYLqStpKRIP/nA/aI3bWcgj/UgIwgxo68tKLufl/t4s7WW7e1OzbM+N2nPntyghkWCdJHzvsSQNRN2q0VIJTqtaE4JRIvopEwyTgE9KnTIyrbVB8ADDjOcBUxLGrU4jXlu9kogfuDP83z5/DU8gAok48eBraSkSwRmjZK8xx3tir5bnZnUl9aEwbLS9tmwI4NaiPZSHnKD3/mgnuraojXXGuqIqf/B9D3/83o2VLOlnYRm6+7srlMPvPH3hB+8+rrWeFY33cH57PJnX/+9nnzy4Yx/M/vH1Bf28kW/qpbMoWxeTwevJ/W+sIpJAHOnn/+Rv/JXCwxP7syf+w/MvnLt+bLN/+t4jjzx857KWX3rswv/+1z/6yAPHNuPwet0+fW30r7aX/+Xm+tFB/rNfeGJ5fuc9Dx473MtH+k1cEJ+8tP3zH3/0ja8DwPZ4ud7P1jrJ41vj//bD91+ZLLpRAAAHiQe3HukBPvfchX/xd16l7z/+4rWTm4Pf/bPn/+UfPlG1CgAWrTrPwk99/fJgPf6l+05uzZcfOrmpwfTDOKD81l2R25xGz+zN3nv4te+1v6hPbwwBYHtaMEKG3fBg0v+1M1c+/t67bh5204/o2mx5c0/js8+e/8Qjd3+XLPTO4TuuHziwHO3d+ADfPezMatnaOQBcX1TfoHv+VsDJ7ZXrehZfmCw+eHwtjwQAvPvkobNbo/uPrB5Z7V0ff/spQwe4eZ/aGOTnt0bvu+/YTU5OHvJp1faT8MAL9XQ0gG/ZYuitmitB6Cffd0/IKQD8yH1H/8c/+vq9dx568uWtI6tdAOjFQaX0bR/5Ny393+7+ANyQEPwEAADclBC8laT42yIh+ORHHqy8274jtxA8hbZB+KWHjv/YfcdOD1YBoFDquf3FvcP8qYs7m4c7l8bNXavZtXkzqlUQUkHxrvXu41uzSSspI4vWHOlFW7M6TYVUxngHHhAxEmxR60iQQFDbaO+9dR4cHCyorbZJyMpaJzGfVCpghDE6K5TgeJDktT4IOKI0Lo5opUw3F7OlYoQEjCrjlLa9NJiWMhSsmwilrSeUAWYRL1trmM8TppSLA9oqW7XGOd/NhDJeOpdGBwRdFIxU0tWqWUmFJ2itdxaMhfFC5glflIogBpxSgU1rEEBph4hFpaKQDXJhrTfOcUqdQ208AOQxy2JR1ObwaiKVVR4iCkjRAvQSMSv1tLGmtdLbQ72YIty3nr24vWSE91KRxRQ8eg/ae2UsQ2BISgt5zPIAG0IZQhrSQpqy0d6zurUbgzBDHC1kJxN1ayKGrXKCk6a1UciIRUaxqs142R6YyXjvq9aGgiln+rlYVop4qqxvStXPheC8bkzE2bxqq4YmMUcAj4QiMcblnfTFS+O1jZVhv1tVS0qw0Xq1GyJC2Rj0Po54GNAooI003rpKe9lYCz4KmObUe8IIkACNdv1uGDDYnrZKOQJkfRAp7TdSfmGvCgM2yEUq6O5CSuXW+qGguD+pCOLR1Vhb2wKuxISiD0NWtLYXpC/vTt51bH1RWArIGWYRyyIWRVHHcVlXacKsx/v6adFWezOTeaRIGCErHbE9Vc4hAMYhCQUljDCENEwQoGz1aCZ7iYhjvmh8yGB7XhvjvQcEIBQJkjggSVcYC8tCHl2Pn5rNyka9vFWfOpylERktNOVQl6ZVjiLG1FWNJwhliwA4mdeH1zrOA0WslRsvilZaQklA0RofcbLSDUPB0ohY6xaVSWO+kop5xI1z45lcyQNA0NYraVfygFGkxBOEfj/fnZcP3HX4+rTlFMdle7GEk4fLP98FBDzKk83NY1/8o0+feug+QExDKjimwu0tNSVACBKEPKW7Y5VEZF4pY30cMmXNsjQFQsI5UiAUVnJBPPYzPi50nvJawqJlZas2B/TySIc9QpDUSlJGIkH6uQCAVtpSearVRhbMW4NAK6mihJDGzytNPWzmImBQEUcFCk6Wja2USQQ51BeX99tBFmntCmmO9KJlo5WzUllCSVnWX/7Ki8FTF6yHTifp9cJMuWvPXyaIc8Rd8Hu91BOchGk3JtohCOqdK7U92DwhjDZSK0U6ISMUl42ZloYjSoBBJox0R/Lw0nJ2cad96NAQAWpt85AdyZF4yCEAACAASURBVKPnd2bWmh7DYR4/sJ4tWzMIRSLsHkDC+e5SvtSWa1nowT+5O390s7uZRiux2CnkrFEegDH6kQ+d/s/uWd/MQwB4drJ/ZNA9uzfe6Gco6H2HXjXW/MCDx//gK2fj8LVy/40r137ZJvy15YYiGu/LsgWAlSw+6Bluddo5uMLNjkIwGoWicdYF4sPHVv/W3/vRU0dXP3fm5WLcvvjy1r/5k2fObY0++X/+3YOLHE0iNewmhDyyMUgE+9nN4T9q1eH1XsgZvNlYfHde3moSeiuefHnr5//aBw8m9P04PLsz7sW3p50e8I6uTwtEvBlGdu76+PsfOXXH5uDOwysAcH5r/PnnL/3aV593sf/7H7zvaCd55truew+vXihmHXH7BW9zGr06L0+tdADgpfnYStDeHXRWz1zdff9dr7qVfPWFywBwq3z5Jlnoymy5NogOupenL+8+fGLju2Shdw5vu6L6TwZ3Hl6ZTCazsl4ok6chAGwv36l+4I042c8+98oWAgScZQF/6NjalfEcAO48NPjsYy99s7O/Vbz77sMXtyfvu+/YzVcGWTyv234S3rvWvb6oT28M4Fu2GHor3NUZ3Ht8+CcvXPzQ3UcB4G+ePkka9e+/9uInv+cBAOjF4cXx4sFDcJuEwLnXMzM9EHxtVxffIhH5Nty/3vu9Zy9cuUVCcHVv/laS4m8Lvuehk1+7cP3+oHPi2OqDK1308Oz1yYXx4gNHVwEgoAwAHj559Ne/8PTD5o5DefLY5WlAyYNrnY0oOCvIUquy0ga8AGAEC22ymIMHjdAaZ6xBROsdJWitBweCUev9q2oRD5RiWzmPxgIsKtVLhbG+aHTd6kqidj4CkMoqAG19JJAgMkRBSKONoLQ1LgnZpJCDTNStRXAb/aCozd6yDjkb5CGC09ofUKmUcYJR7R0gxAG5Pm67CQOCnLNhJzhYF43z2ljBiAOgBJvGHgjb85i36mB3ApBCFDJBMQmpB1DKFq2ljPZS0U34tFBVY5yH7VGVJVwq651fVqoWFBGymOcxn5eqrOQgDQdhEHHinGu03RyE2kMjjdFovNPGOusaA8OMM4pJRMelLpST0gScttIiAg+I0k4bN1mqtW4oOJlVRhA4PszmSkecgvetshv9tJaaEjJfym4uugnPY1FI02qzrE0vwU4i5kUbUFgqN13KlTzsZMIYHwWOUtE0tp8HnJG5cxHH1bV+W9XOQ9EYTgiCr5TyiMa4POGhIM6TaaEYJQSxlwveGJ4LBiCt994XjTEOBSMrgwApUucO96PduRx0giggcUh6gu4t1bDDvYdJZcDDoBPMC+UBKCHdmNXaJgFtW+sEG02bbjfsxtGF7WUWBpO5dt6HFLspNw4AQLft4Q5TSnY5isAyZiPKO6EYF3reaEDgnDrnrXMBo2nIamlDwMb5Wlql/XhWI0GBRFmXBOzSnrTer/aCUBBOibEuYnSQB8ZDrfWRjYQTf9exzjOPqTgW2vrJUkupV2KxshpNK62tt00dBiQNBCGKC7a1t0zieLGUHnyeirqCkB8Ub2i9D0MWcsqpny61876biBBhJo0HuzuT2sP1eUMJhpxo6zX6otbL2oSCIGBdlM+c3fIevnJ5NC9bG/nriUiVWF/PrlybLKbz/rCLiNp562FWGOu8shYsZCFrteOMJwHWrUVEwTANaEiJ4ERbdxAAoo31jIxnqp+RQSImpbIA4L3z5MpEhxznpQZHrHW1NN77XiQAwBkTc+CUW4eHcqGsBu+ksrUEZikjflxrRlF7D9aPpdYeBNJpZYXw6/2wbC2PED048CupKFp732r+nLKdTvLwu+5cOXIo7+fVfHGtLIrR7Ad++AP9Xs7jOIuZa+eXrhZPnrtYSUB0ecycI8vaWgqUYlUrQFTW7xUyZGSQBlnANjPeGrxaNqNStsZa6k4OkklZU4IRI4tGW+eVMuBczvydK9lHNjpf2JofyqML0yoLCAXIQiqNG1ftvJaE4Evj8tHNXj/iz+0tZNv0I3747uPe+zx8XZETMkoRQ/a6AdPBMPugoH/17+P1Bb3R6nb1GuKkqAHgVq6OvSWcGG/R7FnvjXVxGLw4Xnzsjs37j60Z73/09L0vzcc/8b0P3bm58vknz8EtguY7B/nNxayqJUXY2p1dOjF7YPAqZeggV9gDzA5q/TR609Hb7nR56vDw2b3Zew+vMILfIC7giYvXP3LP68QDv/ZLP3Fzxv/ofUf/7MLWf/1Djz62v3jk0MrWvDjWy2/+QjyAviWJ7KUr+9/7rpM3L/X41vinH7nLel8b82f709NxevCjPndl9+EbjKD/8MzF99//WjVykyy0X9S3dlnfJQu90/hO7QcQ7r9j47HJ5OlLe6eOrV0pmqvz8vKsfO9bUPS+Rbxx0nxr+Fck+LuPDH/hU3/0i5/40BvJ/e8EDq10ru3Pb53Br2bxuGxODrsPrvf//fOXoKh/6L13g/J//OyFv/HhB9/yQv+xuOfY8Le++IV/8OMfBYD3Hl/7nRcuP/vK9YP/6iVhpW7/wLc33J/oLbbQnL/tIcEgiZz3B5JiAPjYAyfObU/uOrZ6ICn+phKCt9rx+AZ4912HfvPLZz7xvvuMhYwxRvD+te5nXrzyU+8+5T187tz+n14YKeNoZ/XipB0tTdEYgvjEtbkHTym9pEtCMUASR6SobEfwZasrpdOYl63pdaK60UY7AMhiNqtNJ2bgUWmHAIThvNScEmt9FtOiNEWje6lYlLqfi0o6ahA9FLXu5YH1blaaA81lELBaWW1dNxXL1nACjbRr3TCJ6O5UWu85pcNumEXMGbewmhIcL1USsW7ClqWeziUhsNGPGIXr40Yru9IJtHYG0TnI4yCgpmissdaBR4Q0oFnEpDGI2E04Y2Rv3i6sW+9HIaf7szZipFLWamcdIPh+xuOIcwqLUk/mMot4HtFlY4jTSc69g6PDGBBiQa0HZb2Ubl61Hpw2wASdF3UcUOt93dowZKOlGmQCKfHeM0THKedEULqoVT8RAaXXxnU34UVrAkFpbYx11+a14KQbi6LVeSompSxqzQg0yhnn69akgmyNW2Oc875qTRZxadxKKoA6D77VzjZWcBqFPA6CTNhK2pBjHotpIfu9ZH+8RMBewnZGRd+DAaeVRUK0ASDQichqR3BGKCMIKJVnxEvvy9YSCuu9MEt5VZlZIdOQUUGmhe5nYlnp8UzmMR1sZklEV9OwsaYTEwfQaFeWerZojXV5zBeNqQGigHACmcCMY56g6vHrhVrt0I1uoH2kikpWBQCcPhHsXAomZb1dls2YpRHJM7i4VRgLJ1cjpDgrtbFuMrdRSCliIMii0pNFq6QDgoxSSjGIqSBktJSEQC8LHfiYU8GINHRvKTsxTzmEQihtL4/a6/taabu1U272B92ESWkBhKON1MQ630jnhWcEjfecc0bcaN4SioxTZT0NaBgwCsApyUNatXpRKkqwk4pAkN2ZDBg51MNlZZOIWUApLYCXxnsPWrkwIBbYZKnKpdq9On3qKy8KwWeTpQM48dCJV548Wy79bFpZa7U2g37eDXBUe/DeeiAIwzwgCMY46hEAwGMW0bKxDtEDSO2c94hovZ+VFhGUdmvdoJAmZNjLxP5SOQ9Kq36eEiQe/eGV+Npihki09pJbAGikHi0VIFnJ6bWFHyYkD8VCK04xZJhFrFa2J7iyhjImjWEItfadiHLAQtqAkVq5Spsc2KTS3ZReWdZRwALBu914baPXKjfoxg0j660Kht1Br4cIjGHc6V4eNUgII4gUW+Wc9YeHoTVuVpn1XrSzaBCBeKq12y/UqFStFo2GiBIKaAGUdV+/sruSJIhYGYsEGSd9Qaz11/dnJ4e9JBZ3D7PLs9p7sA6/9+SAITkzLh5Z65wZFeNKnZuWX7w4sggJZ7/2pWeay9sfe8/9IcNEMACQ1nGKpZbdMCSIyY2k4YN/NwbZG2/dNwt676FWJr8ljOxgFZiXDQB8A6/P29BNwsXWaC2NPAC7kVfgvT+/Pf67P/aBW4+8MFkq65/anpwcZHvjJY+CSVnXUsONTiCgXFqNAK/sTI4M3tx6aLqsAaBSZmtRrabR1rxcfWvq79Zkee/h4cHj2wg/B/jC2Uv/7Gd++LkvPhswurcsO6Fgb1BZHOBff/6ZB06+OlzbL5vL8+LTr1xzEZs000OW3r3WOyjof+/xl37+h99z0EXcpiR+bmf6wWNrALC1KDY7qQUL3yUL/aXgO6gfuM1i6MMPnvhXf/D4//pbf3rfww/24vDSpHrm+vgnTr/W175DuPn3vJHH58eLO1Y6xwZ5KLh1fnu63OznzsNoXg5v7Ny9EzjI4br5oxzUwc9cGw04P/vy1q//yVP/9KXrRunVYSc89m3eHDjAajcBgIP3e/96/x9//umXrr4W3JsIfpukmLE34QuJ1087/oJl+h1rvVa+2m+cPrr++ecunFjrvnTlte/+rUMfZGE677xvCII2aUBfHi/ee3QVEdfTmCJuzctDnfR9x/ovLoqqtFLL44Pk1CA4kmXnp9WfXZgOU2Gd31k2q52QUtJIQ4lrrTXOU0JraVc74WghATEUVGoLiJyiB2ikBgTBaMBJ2ZiVrkD0y8L0MjEtdC3N5jCqpStqSRCcJ92UL0vtvBtkofV2NJdlaxlFa92yMc75LOKxoN77nUlbSOM95CkfzdokiDnFLOLTUq33g6IxO9Nm2InGhTQOssROKysYxAGbLFWWMAIotbk20oNMIMU85hPrjIPVhCN6wVgcwKzUkaCdRJSNqlvTi/hKLmaVymNxaCUoamOsz2OxN23yhBnjs5CtDSIKflyoLA6l8VVrFpV2HnudkCAIgvuLtmldN2Wc+aJSWcwIxclC3beeXy/ajW5oEKiBQRaMCxUwIiiptU0j3mpzZbyMadDLg7K1k0W7kgf7i7ZutNZ0yfS8UdbBfKGst9J7BNDGRYKO5wrRpwkzzoMHJJiGwllbtZahl9oBYOR83VCpGkZoFrFFazsJG3SCi8gm48Wd3mdJ1Nbs6PHNJy9vm5NHqXORYMZYAOoRl7Ue5oGxtpW2aEwc0jTiaUgb5bwDxmkvD7b2SiqoNd57WO0Hk4VaG0ScsV4sOIF+EjbaeQ8N86LnjDLOUobIPFrpQsbWe+EzV5Y8w6qwF/ba3cKe3Z1/vqTGuI8m+MoV12jTherM2f3sSC/gcRpQSgFQGm2tQyFYQEjQo5yrWWmldiEns1I1yqMHERDnAdFzhko5xnDYC5wDqex6N2y03VuoTsLSgF2fyrWuGC+VccAEu/9k70tKK6WnC1lJywOWBgyITgJSK+udl1KHjOuyjYWIOB5aCcoWKmmOrQbTwhLiOKHSgvVeGZfHPI05IbA/V85DUek6CWrreomYlQoIrPfE9ZGMAlq0ui0dIgkEjXuJn/L3f+The+86xNE///LO0/Xy3kP9tTBfW+9X8/nZV3aefOzsXmEAQSo8NAgmS103xjnvnO+lXBtfGxcAdhIulbMAQHAlE4hI0BsNO4uWIo4KZZ1fWEMJUPTWmFbD3qIFwIAQ9AScSzgpWrMRMABw1sUBs9YtS7vZia2WlXIHDKWi0UBIL6bG+lO9+Oy4DSmppDu9ll6Y1Q7gSCesSusprKfhtNYMYFmBA19Ja43tZZGzLiKuKOv71jov7OwfH6RHe9GsNrUxnZA7JIygMq4TiICgRr8zbSPBKELV6ruH2fZSlq2R6ENO0pgGnGwvGxUyadwGZ6VnyhlE4gHAQRxQrd1eKcfL8sreHAl5Zq98aC3/88uTeaMfWuvc0093G5lweqQTbWRhQMlS6vOz6tyoemFUHOn1nn7xkkPaGu9uDN2t94wgERwAQs7oLQlit9W+N4EABFFbd3W6XEluJ44WlQSAb2A2enC6cs57673vp+GiVWs3lLUU8VRn8Omnz2rjPvDA8VsVyWf25udG81976WruzTbg+dX8hYt7dx/tDElwfG0AgDfNha5Plw8cXX3TIvnc1mi9n2vrntud/vS7Txlr8/DNua8e4Kvnrv34+14VD9xG+AGA7WnRGnuQREYQdhbV0RP5G0UIAPDZr798//G1/+nX/uiFi7vf++47S4Qndqf/4uWr/917Tx4Rq7VQh/IMAP7o2fOfeOQuQRm8QUn83M4U4NV8hnOj+UMnBt8lC/2l4e06KP6ng95G4rx33n/scP6bf+v7/vl//v6XR28jmuo/Gnjj6/713qVZ6QHyUHz27JUHj65+/fw2AAw68R+/eP6bXeZbwv0n1l+5NvqNzzw2nTUXd0e/96Xnf/n/+synfvfLH/pvfuV//tTnTsXRkUcf/PgnP/pzP/7hQL+Ju/C3BR+69+hj57fgFueBMzesTtfyeFa/ltoLN6QCtwkGhLg9Pf4vggfWul+6vOsBKmO///TJP33x8uX9xRee/jb8wi8sqpem5Zlp8eK0KLVRzh1sTD94cv3p89sRpVdnhXbOeHekl/3mmWuttcNIfOLUuhdeBOKV69Ol8V++Or0wbtIAd5ctJUgpKZUBgFZb60Eqxxk2ynBGvIGVTkAQkoAiYNkY76FVTmkHHlqlZ6Va6QSNcrL1cUQnS8kZUEIQYFaqJGKDPFjtBozSJKSUEMExC3kU8kQQggCI3USkIStaszNtrk2aeWOM83nMmtp473fGzbwxlTadlFuPWSTW+7F1Lg75xiCy1itpG+m0cYtK1dLNSg0eGYH9eTOet9q4XhJEggacNtL1EiaVk9rFguQJTUIutVu2ZrSQRWO1Mntztb+QDJFz3OgGnNAooJurMfd+3mjGyM6sfeV6MV4qACQAgnjZmqJRUUAJ8YulXNQ6FKSozbLShOCVWR0IWiq7KFUrdS8QaUid9wBACFICdWuHWXp8IwUkVaNqaeelXO0GhLAs4rvzpm3cZNZ671rtGKcH4cpHVpMs4RuDGBAbaY3xnAB4mwSEglPacooBJ1Lb0dwg+lrqSSn5QTqA93cfX2mqJon5eFkri4f6ubJ2WWvOiDReWW89LCuVRcw6qJSV1mUxy2JuPbTGWWNnyzZkWLUminhA6dFhnMUsEXQlD3bHEq1LA3phVF9ftLUze7VaSM1CNqnUtNHzRnkG00JurCfICSGopd2fNQiwEwdfeWXn+uNXd5/a+u0vXzuztXNlPH1mVJOVgZu2i8Z6BOfAOdDWbaxE0nmDYB0Y49E7RACPnZinIbvneO+OzeyuI/lKL9ocxIfXks1hlIYs5CSPORKIQpJFFBBCjgHH/YXa7AUEYSUPgpB3e+nRFV61tpcHecwQPCFgnJPSZCEjYI53uyZg0tjxoqoNamP7KTfexSHJQj4tVNMoB8AEK5Rz4PcXilOipAlCVrembi1410244KRtfT8LTq7EnYhTRPC+lsYjmS5KDKinonKid2Swksb/P3tvGmxbepaHvd+85j2f+c5jzzTdaqlbAyCBJEBiCMaQwiQWTqgUDqkEx3Eop+JUQqXKVJyqFCnIgG0MxrjAAiMMohGgRrLUTau71d3q6fad7z3z2ePaa/rm/Nh9r27fvi0cDfYP6albp87ae3/fWXufc9d6h+d53iSLRJo671r9tvOo22vFnHJK2jHbn+iiVGVjhCBpwgmlyjpGkPdgrJfGKWnKxlrjx4UaFiaNSBQQwaEX84gTihGlJKCYMdqNCUIIgTfezZUCRIz33ZRfziUAGGsJ9tr6I50or/VqFpzohsb5orHOQxKg/Vx77y7N5OF2sNoOgwAQ+Jagy4HACCURraU50Y0FxUtpwAmiFH/4cOacM4Adwg6zQARXpzKgZFzoXNpRKTnDeaPvWk0bqRFC01LPpGlTGjGSCnKoE8UBK5TuBDQNaT8Vy4noUZ6GOAkZI4gzPFdGGaO1xR5JabXxCKAbMcEBEBzk1V6lXtyZbs7qlFEL8OB6S1CSN2YpFnNtCEYIQSfkdy1lP3Lv2j09VskKAXzk7Nq9y9ni4mycW0TbIaM3v94MwbeHs04aYnjzjGEAAEAAyrtdZU4u394HGM8rgvHKLXyht9ak0C0Pj4vGA8SC3fqyz33h8ve+6+xtq57Z3B/NzPVzB/vbs/z69DAKd1H0Tz7xhUd/5pdP/8Qv/mf/++9+8oWrHuBfP3fpj790+XCvveg33bbJpe3xQ2c2OCN7Rb3eindmZT8J4U5i4r1pAQA3xQOvXd2/zdHk6YtbRwbtF6bF2aX2wj0puqGmuK1h/tzrmz/6/vuf/6c/9+Dp9d984oUP/vIniqv59S/tXd6cPHdp90z/jeHHT52/fvfG0uKUv/j61q38omc2Dx4+NACA1yZ590ZsAACfeOa1D91/Ar6FbyS+ifoDcIMaeHk+9R59+O43xOw/+sjZcVk9sNH73Vcuf8XVX2esptFOXiGAThSsZBFaH1zaH1/cGT94Zn1n/xtFGUI3/gNrY3/xX3z6V//NX7bT4LEHjv3sj7z3/93cvou33yfNr53b/HsPn/mJd54BgN9/9tWF8dFftfEd4N+eYHNvZ2nQi1/eOvhhAAC4a7nzpUg8d2F7QeJPA5HX8tbL2x2pQVx8NUrf473WJ+TlYVFFgfjXz118YV9vv/4FCn7zYLbSS+GGMywAIIQQQv+OkuKreWUddALaD8VY6owzglChDMFwdKnz8pXdn37g+PasPNzNEMC9a/1PX9p+dnd6ppto43Vje1lw4NDTF6cPH+pc2J84QBudcCK1cz6LeFGomJAwoda5qrGCkeVusLlf9zNGEJLKWfDW+YBhbR0haFFEb5RrlIs4AYRGecMZ7qQiDsj+tEHeL7eDvakMBKmkNcZGgiKEpHEhw4W1cUilct67xlgEXhlHCFruiqIy1nrBUNVYIXg3Znlj98ZytSMIhnGhKmmTgDXGFqXxDgiG3UntvAdwjOGDmVTaBpwAQF5rQbFSfsqxYNg6tNYJvPNhyDDAvDYUwXAmMcGJIN2UBQxPC+0A6sZKpavGYgLbw1o7D84RghNOOilvtFfScEEQRmlIlXcIII2ZlJYzwglKI1w2ZjyVOEJQ69VuiAiKKI4pRjXqCq6sk7WZS9NOmDRuVqhWDGHAeG26mRjlKoswJYgTNOgGFOP9SWOsMhbHIdUe9ia1sZBy3AqIoKisjKC4lfKYwrCwQchH0xqBz2JujUtjMAYFjJa1dtYBwXErnc+rotKMYa9NlAjvASE0LXSWck6xMT4JCMJQ1mpcKm19XulRrgQjgSDGOPC+khYQYhR3Uu68t87vTmUr4gjD1YOq1wuMc5PKrHI+mqu1jtAOOimf5KpWLmAwq/T1/TIlnlE8ylUc02IOvaI+c2SFeTixlti62pxiqcz6crC5FD/13KsxttO5aiccOY8JmZamFTOp3TCXscBZHHkHldRFYyhGxhjBiLQ2ZCSvNEIoSTjyUDQmDZm2oIyttQWNAJB2vp0yafygxQmGWjnGaVHrU6tt7dBsrooK1vowaAUhIzv7tXJ4b5Z77Hspv7Q5bJTrt3lAyaRUWjtKSCumgmNtAQFaSvisMEq7Wa2ShA1aNOO8tjbkdDSXSruIolraXOJJpZZbotaGM14XHAFEAU8CujuTlBBpTDfmDGBSGM5wKwtn07n2Tls/r/VSR+yMbMaJNpCmpGx8FtFU+yCgo1xzgqTxjHlAiBPUWNgbqcbaTiwceONgqR3ktWm0d9630yj1vlY+5vi1baWta5SbV9oaBQDOOs5ojPF+JQOCL0/q/cp2MoIc1QYwoLKxSjtBMUVYeie1HxWGczyIxYVxUSgnnbsyqzLBSmn7Ia/BXSpsIBhbpC8Ymro+Oui/uOmjkE5rzRhupKUR7M0s57QtSG2d1O7atLl/PVXKNd4eb8e7RTMslQdQxubIU8GcQyljhTYrmUgDMq4UAKQhJwQb65RyacYCj8ADcX6tE51qh3/4+l4mKPbwydf3+N240rYVMIrR4rYurcMAguBuyAEAIzjUjt53tIcAamNvqoFrbfgtpNNFSrAzmreT0MGd55GFhPz2l67ct/TQa9Mh3LijWe/Pl9NT33bo7sNfvjkabxcvuHnXc95zjCrjBSOzqmkHb6phPf3yVQxo6XB2a3MAAMa1+j9/5J3vPb7yK5994Td+5/P/5Y+/9wOnD/3h+SuX7q23Z9Wzs+rcJ5//h598flLURND/+vsWU8xuP/Pd8Xxj0JLeLyfh9WkBAG/VDyz6DF+8cnWh5VvgNvYOAFzYHT90cuOJrdFjR5avjvOlLLo1cZK3iAf+zedf/fm/8QEA+NAjZwar3ee8+28fu+cPP/Ol/+33n28n4upe9b33HZnMy088e/4//a4HFqv+5Z89/8hdh27u9qmL2ycGrV944Ty39u7eG72Xx1+48H3ffko5w7/VHPhG4psrH2isfmVycCxtR1QAwF1Hll+u5vcdXn7y8vYjx7IsYBeGs5P91h1D2K87FpJigFOdOHAA33Zk+Rd//3M/95HHjq/0Lu+M/qrVXyt+6H33nTk0+MBDp7qdwHu4VMw+XJbfc/L40SxZPby0O68WL/vow2cWxkdfebc7Ar21ZHELjq62f/WZNyzevvvE2mfee8+nX7j0k9/z7QAwSMLXdkf3bwwWuouA8FvzAecdAAGAQLzJ2eDtco/bcKSbSeNe3J5cHhb/7MlzP/bg2qn+3U998eKTr1y5//51hnCu9HL0ZbJWbaQHeHk4P9mOA3qHfpoHmEk9kXo9DbviDbni4ivGEHjy8Jn1f/EnzwaUXh7nx5c6l2d1pc3+rKqtuzgtP3txpA3ktYoEYEQ+f2XoHe6ldFypeWM6ITPWRoKO5k0UslKaLGSzSo2mMovYQa4wRuNKYUBRQIxx2jgEIBipG7vUC7Vx+7kE7yNOKMVFqYylVWM9wO6oiUM2rywnUBsfZmRnXEtlKcUhw42y3VTMarveC4e5VBoJjhplEfL9LNifNdZDElJpHUUeYTSrTMjJrDSAfa0MAuycJklAYgAAIABJREFUN9Zah+KAEowQYGt9GtKZdWnItHUOoCq19bAzaihGcUCymHZaYjRXjCBOUC8VxvlZqTsJowDSuDikyrhG2fFMtrIgCQghSBs3yZtGGex9WZozy8nz23mey2EuQ06igHZTjsAq43qtgFFsrWMUr3cCyrCyrpSaUXwwb8aEcII8+JCTuIdpgfO5CUMcBrSoTWOcceCtZxiVxayiKcdY1pYkPktZrow2XmnNKW7FnBC8HLG50/PGZSkfF6po7Nm16MhyMilUyAkluGhMEmJOSBbRSlrOyKTQxlpGSJxEdVG4OAbrmhxxSsumCSjvYN5IO5kpDy6NeCyIlI5gX9RuoaVOQ2ItqaSZlioUJIi4tb5ojHW+nwXWA2W41k4518qCeSEbC+vtYHfcRBE7vpaYVae13x413nptPRDQHrQy/bYABNbZ0ytdbWzIyGheUEzPnOq1Uz48mHJGX71WPnJ33zrnAPVaLBRifyrbMZ9X2nqaITTO1VIniEJW1qZSriuorqE2rqrMclso7y3yASd5ZUJBKul6KWMUgUc2ZhgBJWA9DEszGpaA8NWtmUjSOGSthDFGKtMkDEWCpGnUlMXqIP3sheHZ40uN0mlAhlPlEerGNOIYYeKMq5Qrao0Q0sYKhqU0TFCCUcRJyNFaR0jt2xGD2hgLjOGtsWyHdDQ3Hpx1yHlYdJE4RSHDVQngIQloi/NZbaeFAYQRQlI7TnEl3eZBgxFqlOsmfJzrNKSpQMqJ4UxhBJ2M702ks55i1I7ZzlQRTgJMR3O13uK9hOWVtg6c9wT7edUwLhhDDqF+i5WXVBQijkVdGwCw1jpr9mtHMK69WW1xXDvrvaC0aNQk1xghQCgWdJirTkI9oAobXbuLBwWjJAuJNr5UynoQjBTaNtbuSKudp4x4QGC09eC94gQ/stb+0n6VclY0CgHSCHkP0vnlJKiNnUo9qrRDriXYpWmBLV6OxW4hCcXa+txaanEk0IOr3b2qKRubhQSBn1RNP427KS8re89SgmYCAKZVM6zNhalstKmMXbi+/tmFg7VWsBRz7720FgDAo5gT6/3CUhMAWlGAALR7U82/0Ybd4la3YA1tD2fdNLp5eGtovjjMNP1Hf/ziSit698nlM8vt+9Y6HmCjt9RZCtbWs1dnQwAIEAXkMsbRjdvQza0wQKNtXsuWeFM+8PgXXv/+x+4+lrbOzUZ331Kzz6V65PCgFfBBEsiq0VVztJ/9R8mxk9/RpRh7gPN74+1JvTOZ/aM/+Nw9a124E5586co/+NgHL47zo93s4mS+/Ba+001cG043um80Um5j7yzwyRcv/OR3PPiBUxul0tNatkJxpZjekSz00cfuvnlIKflPHj790fuP332szRX9vRcvHG63/+Tl67/11LlCsbVOCgCPP/3aoaXW7332JW3dhx458/FXrp7bn358d/i3Tmw8c+H6yVZ0LG1Jqz937tr3PHBcOfMtstA3FN9c+UDGgrU4DqmojAypeOjuQy8/88r5nSEAUIzecWjp0jg/+TZUwq8RbycpXkSxgpJTq/3NcQ4A9x5b+fgTL779Tl8fvOPsoQubw7VBqzFSUKatfWx9fTavIEtuJCoAAHetDS7sfUOSk5NrvWs3nFXvWe0CwBPPvDEOeTHKt5R68Q28DTUoir5aI1QEv/mFC3/jHac+9V9936e+dPGZa1vf8a5TF7ZHP/Se+0qrNsv81nxggVcO5qNa3d1PMYKDWrYFYzfUVB7g+ryiCGOAqdQOIJcaA2jnMYLG2iiNp9JsTYt2HD67N2MI/9vLUwf82WtjjxEXmDX4UDe4sDckJPHWc4aU9UBgtR9GFE9rPZorpX1jlAevtMtiXkiDlMUIjLGcYL2wGQFoxWxeGeM8Btgdlc6BYBgACmWowVq7SitGUNHI9e4blhqTSicCW+traTlFnVhMysYYqBrXNHpTGgTIOes9neZyuRvuz5q8Mu2YSm3z0hoHytjFAGPrwDlUVgoAGMWrnYgKLAimhGhrQ463DmqMESeoFQkLPgto2djpXMYhXWgeZoVqlO12w4QTj1DAkLJ4Wql2IuaVDgVJBJ3VqtcS4Hxe6iSkhTJBgDPKUo43t4avDaGsNSC00Y2ujcqiMQeTBjAwgueNTgJqnCcEOYwCQW2jm8ZNtI4DUkkTczIp9cYgrKQbJDwWrKx1XqilVoClyXOXl1oaFzHCAsIwGs6VK3wSEG9dELFIEPAwr/T6INbeN7XvxGx/KqV2jbJ702ZUGOvAWI+RFwy3YpFXVRrxWaliIUpklIda2iAMxpPigY3ueIh5SCPOpNWxEErZhfGRMUAwktpp57wF4xyjZF7peaUowcb6NGSzUu9Nm07CKUGcYUAevPfOG2PnheKcZCGdlHY1Y2lMC2n3xwp7d3I9023fNOZQT2DnSICu7ZZFrRGCI+1WqatBlo7nEiMMHkZT1c2CY4d6T7+I15dFQHAFCCzqtbTWaF6bMCCVsmVjpjla7YXjyvZiFgfEI6iUdcgPYjbPm3Fl+dy0OqyWPhSkE1Hj/NZYtiOCCWWYYOJLZctKWwfLXRHHgiK31OIaMKe4ljaOYVpa61wvC/aUXE5EPw3jKKwazQgwir2HaWm0dYwgAhhhTzDhxBNKJ7M6jRnBuJPwWWmJ8we5Rhj0gp1lLcWIYSSN4ww1GpR2glMAH3AqjVvuiDhAX9zEnJJRadc7QSw0bSJrrPMII4g40d430ghGNkd1O2KFtFKjWWnWe/zasJlXJg0JILw1qRnGHvmQIeVQKsi40s5DrR3FuJEWk2iUN1GCrUG9hBaVpxjPKr3eYeOpAQBrnLIee5jXOuZEGlfWup3hwljnwWJgDAPAqFAYoVltrEezwqy0wkK6iNJRoQaxAGutcda5vVJ6AILBOh8FrAEoLQKCc0McwLPbc05pLjUAcEYEIxgBAsQxProcr6fBC3sz5N21SYMRZIKNSt0L+NVppa0j3hvGMODdomSYrKV84opR1ZxaMyhQHhsWuCcuH1zZGhOMtLZRyDFGp5fSvNHbc2m935o37Zi1BHPeb5XN0TQi+I0gvh3yRQLQioRxnmGEEDY3koJGG04I3BKsA8BwVp05PIC3B4ngbz1y9icfOvXkpb1ze7PffOp8JfWF4fzijr13sHokywDAOL1X18vR7dLkRfn8/iPLl4f5ifX+zVTjyZeuIID33HdMWXdrneniKF9OwqUk3JzOy0qu9bONlc52M7/rRvyNAI7009PLXYD1X/qjz8PbYPNglqXRX17eWW1Fl+sGR3eulXmAZy9tf+dHHlsc3jZaGAC2x/OrB9PnRvkP33ss5uzaJP/wytGL88lbt/ri61sPnl6/efj5q3uPHVlmBAPATln+2MNnNtopANy1kv3hc+cWxcK/fPnaf/PX3xcK9idfeP1//Zd/8Zm1Tm+q34nY8SzezGIAEIR9/vXrCKH3nD6i/JsmNH8LX3d8c+kHamsWcTkAIIAPvPPM4V721LnrAuPtabGUhLs3PH/+/WA5DS8stPytZFY3K+3k5ev79xxbubY/NfaOg8+/bnjkrkN//twFBBBSoaxOGV+Ko61JAW/2Pnrk5Nqfv/TV06i+covgyKD98vV9ALiZg23fyBDWWslB8eXfxW2tAGMtAHS7d66LfGV4gLWNwaNHu8cHyflinPXEixf2HthY+bfPX6YYp0y8uZwEAOC9P92Nh6WU1jkP/VAwjLVzKafK+ZnUxvoT7bgtmPWAPCjvCKC2oBmnMSNtTj/yjtMvnd/CXLy0P/tXX9oqlUki0VhfSGMcHOqGm3mtXDCrZCcTxwZRP2EM46rW0joAcN577533CGMHaF5pY7y33jmvjFfGOedjQQlacJzAGIcQaOOziGpn24kQhIScUIYxgixmd210HELauWkhEaCAM2Mdo6ifCcFxJ+WRIMY6jxB4nyUsDql3fqUfLbILTnEcslK6SrmqNpwi7VyjjLGWYljpRZyRjaUoiRkFbLUf5Q1BeHPYxBGxAKW240KVjbHOZxFhDAecDDJRKzutjPdwfVjNShMLUtQmCRnBiFHEKTLGYYJ6sZgWOm8MIehgJpWyG1lorH36uQuOhbPSCEas97NGC0aymHsA57x1kM/1NFeVtMOZctptZMHJbtxJeStitXQYIwfAOZ5WZiMJzu8U47wRDEcBndRqb9zEIVXOW4Bpzce5Gs4UQoAJKqUlDFeNKWtbNqqQZuugHOYqDIg2Pos5cn6tFwhBS2kradKYOe/KxmDk2wnT0jjrpbXLHX52Iz22Gq+tdmVVj6YaEMkilAha1DXBqKh0K2YYACNUS5vFLBHEex8ystEXq/3gno10pS2WWsJ6hxAiGE3yhexBX9wuruwUO6N60uimcjvDurHQi8m4kFe2C61tFJBpobcOqk7CEEII0OIPT2k7L1QrEZ0oyGXTjglCpJQGYzfNZcBgpRtijKxWyruI4MZ4AFc1xjuopWunnGJ0ZCUmlPQSwrBvtA8ZTQWOBQJnpXZlpTf6AUOQJiTk2DrnnMfebw2b3YPyYFYXtcXOL96adqjVTmTTIEqUNAdTGQjCMOLUhwwXjfHeduKwlIu/H6ksrLWDTsraMeulfNASTJBei0cBRghNZo0nWFkolR3O1bhU54cVBlRJFzCEvO+nnGAUBgRTJLW3DpbazAMKhVAWASIYUD43AB68X/w62hGLA04ITkMMGBvnEQBBYJxnFE1rnYXUATjvxrlplPXeS+2N9ZwSh3wn5oIiY51xXlCchmSQ8G5KWonoppE3jXdgwdbKKdt4752zlXI74xoAnPPSoMO98HA3yiIuGF7vB0pbqRe1A5dy4qw31vdTHlKy3hJxwAi4TkgAAUGoF7PVWAj+hkqhF3NwQAlGmBhjA86cc9L4/XnTFnCkHXYT4QE8+I1+xBk+0g2O9kOPfG3tsU6EKTnejSNOhcBnV2KK8UocCEFL7ZAHb03RwKyyw0LnFQbAn96cfXq//J2rs9/fyh+fHnwOdP+dZzRydplen5WNsmut6HAW/eDZlf/4/rWAkNrajPPT7YTiLwe7rRuq2TgQFCPrPUXotdnwrvYAFv0BiheX+JvdgEpqcWP88K1YPDuXajmNHj7U9wDvOr78k+869esf+67vXElf/8yz5cH28UGLILTYsDJfdsZ7U58BoVrqipLwliEGC5NNBEAxOtPuL8hIAHBxnN+/0i2VnlbykcMrR04sffjsUbgFN/k5j79w4QcePgt3aowvxHjnNg8+dXHber/TyA9ubLw2HS5+irR68U97C95vT4ubk4k//dyFW9k7APD0xa2HTx169WB2z3Jnczo//GanUXULWegTn3v5Q4+cWXx/qywYADanxSIZAIBXr+389PsfEIQ9+fIV5+H9D5169N6j/+BjH/xffuqDJwim5y7//G9//m//8yd259WRuP1nr17/x088/+jpQ8oZhr/VHPjG4psrH1hYDIVUYEAA8NDR1dHl0VPnN+9Z7xvrNlrxi994os6tuH+1e2k8B4AsFI+/cvXUWu+VzYOXL+82Sv/l5vW/avXXhIWjws34+2Srt6eLxthSarg1UelmALA9/ur1DG9H4Lmr1X/n6Y2Xru8tDk/0skfuP/b0q2+860SwefNlCQGlFN5ysQ6/qv6AMu79R5eeNmWD1NlW/x1rG9Z5SgijeGs4Iwh5/6YfFFIhrdpIg6t5/dL+7PK0upbX1gFBeHNeF8pMpT7WjgttJ41eCnk/5AMh/uTCfqVsQIjAxAGcWO9tDvNOxPdGVcKp9YA9ntW6HYvhXF4Zl1ICQtDNhPHIYAQEY4xCQRtl81IbD5hiQjAGzwnEAaUUM4aymGKEEALnfNFoY/1kLpV2AKCs7bcEo2SpHYeCthNWNAYBcEooIdNaRwLPKs0IDjke581BrjjGAGhaqvncdFJWShMwnMa8aqzWLo0oAExLzRmOBBKMJAGlGK30Q2d909hZrSklHtBoJnsZY3jhFeLHlYo43ps2UrmtkQwoAg9FpbWyrZgyhgXDZW2Uc4zgkJNGWWv9cktgjYx2IKEXiYNcUYqtcRihaaECzhz4MKBhSAmgYW05o731tdVedGolbi/UGwhWWkHAyb0brX4iVjPRi7l0rqx1O2HG+yuT8qXdubPeOB8yQhCa5IoRBOBf3Jkq60aFLhqNMMKAKEGdhB3uR8h7TtBqO4g4yUKeMUopXknEO490pbEAqNcKuy0xaImiNpxjSiGOSFUZZdFyQilBRa0pQdbCOFcIUNFYbd0kV3njCcFZTAaDFIzCGNIs3dmaMEKLyazf4s6D97DUCwNBBi0eCnJ0JRaMauN3hzIRpLIoDumgzTqpODyIjq7Eq/1o0BJJSPvtIAl5IAhGIJUpGjuc1q9vza8P68b60UzujhsRsHGl9yZSars9kXmpZ6UBAG18K2FJxGeVxABZiAHQSi9cG4TWAqUCARilau0MsmlAMUJlowFDpWxV6X4vLpSLGJYGvPdFrfNaD+faAdLWC06OLQexIBiAODScqfPbpdYmi+hyNzi6HKYxq6SRFhzAuNTH+kEgGKPYOJ9ELOA0pOhgrkvpIoqtw875vJHWAwLPCCnrZmdWj3K1Oa4PZmpW6l5M9qdqPJNFpbOUxwHz4DFCylhCMADqJ5RiXysXcAoYtWPmrBMUHR0EvZRtjRVltJYyC6mxlhDUbgWC0oNZM6/MtYNaGesxJgSHHAUcWweM4ihksSDWeoqhrJXzAB6kc8udQBkfcKK0IwQIxpujulY+4DhmyHhYiYNaW0pwI+2srI31IcfdiDOGau0IRlo7Y721FgB4wA61RD8InHEhwyc7IsSwnAaPHu3cs5bEgljnBSOM4lljEABGngDsFbKWfiUW7ZB5gFljWowigJO9FCO4d5AggDSkUcgihjnGzrnlJAIsIkaq2nRCthSzM712QMhjhzq1Nsr4lUgc74R//ezat61kvYhZ65V1Z5bik4MwQIhzVGu7levvPNr7zx8+8sjhlveoklpvzocvbs5f3Z2/urf73E55bjp94WqTS5ETZWGujDbuUBac6sadgC/F3PrbbwsEvWEwCgC95MtVJAywKPRIa9NAuDeTgi5vj4IbTB6CblcVb+dVN+JnlzrOf/mJI4NMKX1k0IaFc9GdhAc3gQBaaTRu1K36gUX0fBs9CQD25vVyGsacXRlON0f5u05uZNGdqT6vbB6cWO7c8alnz22O8+qTX7z4+v7049f3xMF8P6+Oxm0AOBxngrBFEB/T4PWd0doNJfEdnUYv7I7fe9eRtmCCklHZdCNxR6fR24hGz2weLJKB16ZDYsipQXvx+JOvX7fePXxiDQD+4ouXHr33yM0l7V72sXuO/OO/+6NP/g8/utIJn3p9/wO/+Ht/+7c+++tPPPeh+08A+iaLVv9D4Jv0E17wP+85ttJvxXuzQlCym5eH2slB+SZbm280VtJowdQfJGEi2Mnl/v/9+DO/9sfPVFJf3b5DP+7ri/d/+8mb8fcCy1m0qMrfTFQA4P33HlsYH311eLsWAcE4zcT5vfHi8H2Hlx6+7+gfPPXq4rATBXt5tWhfNFbxG5fRm9dj5514i574K7cjFjDgv32pd9pybhhBiBL8nrNHvnhx+66jK1949Zr1/oHe0ovjvdtWXZ/XHOO7e9mhNHh9NP/c5vDxywfGQ0ewmTJb86YtaCaocs55v5U3l4bl//P01Vxq7z3D6B1nD/3Zy9ebWQUA0jmCkLcwq9TetC4q4wGUtSEnnGGCvNZ2f9bUyhzMZCVtK2YhRVlIWxHllFKMtbFSm7IxB1MJ3lvrBCe9TMSCJgEjGC13g34rMMYbB0qZ7YNqXCiKUSdhQUAoRrV0k0Ib6wNOCEbaoUEmGgvDmUwj3muL7bH0High80o30jjvPUKzQjGKy9rW0leNkdpKbbf2q0Y7LnAvFYf6UTvmDty00Ff364NcYowIRoIT71wsMMWIU6K1a8WsnQZSu7qx3ZbgDO2PGoTBex9xEgV0WKpLo/lSGhTazJRBHqaFjmJGMCQJk8pkEacYOWMGmQAAQSnndDRXc2nK2jgAjJH0jhCYa2MBLEUKHDgAC0qaStmru5Uzbn+uhjNJnLcGugmfzfX+pKEegwWCkcfYep+X2jgXBzQTNBLk6HKklCur5sGeePRMnxO8V6jz4zlGnjNKMRSFIhi1Ez6Zq3GuunGQpXySN1FEN/qxNq6QNglpXtlG+W4m+lmAEcxLOa/MrHLKkck4DzlRBjoZTUXwpfH0YCI5xflchhStdnlZ23mpAobXB1EgiHLu0m5trVPKVdKvtAQApgSHgsYBjUMWCdpJGcXoyEq6NohChjcG8dGl+J7DrXuOtFZ6IXK+lkZqtzWqMSXSuMqjXohExAkn+1NptM+lHlWOYAgDkTe+nXJpwXkAQLNSWoc2xxrAG4/6nRCsM405tByvZqQd0MY6793uTHnsdycyEgQDmjSOYrQ9UqV2tYFK607Kj65G672AMdpPGKWk0Q5jLI07mOokIAelncz17tZ+xH0oUBrTRvss5MT73Vx68BgTDGQlC8e1yziAs3FAnfPr3dCBL6W7NqwraZgglDGlbSNNwDAlKBF0KWVpgIdzgzCW2gmGBUV5Y2NBspDmjTHWLbfYICUYoVKB8d57qJULGWmsl9aNc7k91Q6DtW5WuVmhuwnV1ieCdVK21BGH+pFxKK+t8X6jw6313vuyMQEn2oB3EIfMeD+c6bl0nOBLk1pqIAiykIiA7nIyNQ1gxbkxSGrvMFWH+z4RmlHywINrUzs/Px9WuDKk3K4LYFq6yhl8JInKxjCKIo4EQ4z4TsK8RV1OvYd7l9KtWdUJ6XoaHmtHrYAeSsOIkkfXu9NGh4zEgaAY8lob67S1DLmNNOAUf/D04L6VTkQZ4xQhIB5mlRMEtQUFQCEhDy63/trZtYjSa6Pm8rAaxMGPPbDeC0Qs2EoiPntthBBaSyOMoBOw//H7H/ydn/rAL/zIo7/w1x79P378sf/u/feYqyPVqIfPHPvYgxu9RDTavv9EHyM0rNQg4hg8AFjvb42qrfPBnfypFzDWMXx77D6vmqV2fNu94+aeW9OyFYjFmpuJxCJoPnojzF3A30gnbovyPcCxjaXnr+6m7I0Te/zpcx999z03X4YAzrT7V+ZT7dyLu+MT3QwA9sr643/xpVeu7d8+i/MGnjx//e71O9OcPvvCpYtbo3/+iade0O5LT17+jc9d+LFfefynfu3P/+EfPftPP/fav3rmwstbYwB4ZWv82n7+jpNvuIq/1WkUAD754oWYsw+c2sAIrk3ylSy5o9PoUy9fvdUm6InLO4sZAgCwP69ujj544pUrj54+DAD+zf0EAPj81b2P3nf8+x85vT0vfvyR03/nB+7/2fee3Xnm1R88fUw5w/A3F7n9Pwi+2T/iLA7+9MVLCKFKGed9Pw4ujvJjvewrJftfP9zK1C+k/tWnL1976frzz14cTcur2+OvvParBrrRXjyy0rm0Pbr1IthPwlktAWCjFV+blosHj/Tbl/a/ISdzZKX1q194Q1L8jmOr/+Tp1z7z3MXF4W1TybqdHgAQjJ2zCBAC5MG/NR/4K1EayzHSzh3ppluz8kgvA4DTq70nz13rtcLzm8O3towXmCtrvJtL/fjre4WygmGL4WgWFMr0BOsGdK4MALQ5+7+eurxbykRQ7/w/e/b6jz2wFlEytL4fsKf2q/t7XNHg2lTuFhIDqhpLCEwKJSjOK6Udbce8VBYQVNIjC5EgyvhKGmMdIAQelHFL7cB7iENWK0sJTgTRzguCa7CVtElIZ6XyDnnvWwk2BpKITEvTzTgGXJQ1J1gZSylQjDnF40JZ44rGYHDG+b1xHQe0nzEPWDa2HXFEoGkMcp4gVDc6jYQDPy0UxiiNuFQGY5TXxoM33s8bxTBZage7k0o7PJw2vZYYznWt3Lw21nhrPGC0FNJaaed9K2YY42kOg7Yoa5OFJAyolHZcmCigW3ntPHDAHjxCMCt1O+HG+jTjEUMYoUTw2jqpfV41GFyvHWrj2imnFHNGIoHfsdb2Dv703P5SyJGD993TPz+Zf3FzFjNUlLqSVngPHhqAQioPtGiMYGTWaI+8s95oGzAsjWUEl7WdOG0cOA9phJULf+VPn04M6R492ssC2TipfBz6/d3x4bX+Xt7EnAhOisbuzppOytOYl5XcmVYeIUZJ0ShOaV5LrV0c8OVuMJurUS4HbXH2xODl589lKd88KHyjORWdODy2FiGLtsc1JchakiWkqnXeOGssQsAITiJaKeusa8Vsb6bSgFbaG+0k4JRjhHDZ6CikSYjbjOe1aUWs1qZUBiOcRvy+k/T8tfms0EHAjq3FnZjtz5WeNwHFs7xhCa8apzVc3ytbEc3ScDSeXdpz7VANOkFeVJN5hbwH5/Zzk8Yu5eTU4YwBTKTNpQspGc9UHJF+m5e1qyo5zCUleDxp2pkY5XKYMkZxKPik1O2IZBxm3pcGlHKJoIJCpV3KKcMwN/7Yodbr1XxSuDTCGHmB0LwCx1Q3jJxVO4VjFPeTKI7TdiudFQ2mQnAyrlQSUgyorA3BmCKgDOWlCziplWuURRF1nlrrD3WDnVwihJyFg1xjjAJBdqeKUdwKmfF2Z2K1sf1WILUvapsGKGDcGHt4VewzspTx0UQBAPY+5MR5HxCURXhUWG18gBHyXiAPHk0qEwocsMB5yGsbCew8WAcRI0spiwWj4MEhTCxDuB2jamIHjfmCKjwCQF46et1DStLDQfvPq+va2Bef3/6BHwyUsZygg7FDCTYAVPDXx7lHqBvzVsAooMGAv3pQpIxOtElCSmvy6qiojX3PoX4v5tvz+vVhGTIgCO9X6rGl5Jes6wZip1LGeQfeOzeV5pH1rJ+Gu1WTBPjlkdselZTSz1ydCkbAw1Sq4+2kdjYjNKDkB04v//ZL24OEXxlX7z7c+8DGLKsfAAAgAElEQVTx3lNbI06Jsf7ypOxEzIOPOVtqBQ8dGTwEMG3U05vjGqOj9x/afGWbUnqql9bW39VPY0aN88NSfdtqFlFinEMAgJBxHgCM8402i2nNs0oySm/qCghCEmBayY1OevM6vwjf55Vcaic374y3gYLrRQLe/OxqLyUEn1zuvrXAb73nNyroC26PB7hruWOcX0rfCIufevnq97zj9M0l0upK68boWpvdeX2ily0ct3cOZmdPriD0lgwGAAA2R/nbWX1c3B7/9x/74B9M8//54TMX98Yfe9c9d611Lx3MXhzuz6f26mj+658/NywaTtCjJ1c++sDRxaoLW8PbnEYX4oE/uLz799//4P68OtzJ7niHfPKlKwDw6L1HF4c3BwwvsDkt3n3sDV3BJ5557ec++i5B2NuNHdifV9KYfjc42+6ffV//f/r4p3/mR94DAOiv9gr5Fr5WfJP2B27iwbMbAPD69jDilGH84Fr/4miG/x3KzF8FbkoXbuJkv3V1Unz24s5ru9P9ufyZd5/kg+jn/+Z3H1puv/Lq7tvt89XhrRWGu48uP/XyVXTLifWicGs6B4B7V7pfuP7GiK67NwZP3Uhavr44uda7fmMY87uPLj+zebCwelg8EnM2vtGuuaN0+P/v/AFpXKPt5bzcK2U7Ca/MikWx56Hjay9vDR84sfYXz19clHbwDT7oAs6Tg7IZlfqXn7w4LNThdjgrdUzJU9cmW3kNCEaN8R56AX/pIJ81uhWyvFJ5peZK/+oz1z9zdXhtZzqOslMZXxv0pmW5V8ja2AUvH8A77VuJiANOCZ7MFcGoli4WJIroQa3mlQ45GaRivRd2Mk4ImlYKADnntXEBRYBglMtxIUNOAo69h4CRjUGYxaxqTCBwrbygOOCkVlobL7UjgI32gcDTUrci3msFy60wjRgg1I5JN2NxxDsx4QGeNzrgNI5Yo20W0YDSStm9cR2FNOBUWRcFzBjPCaoaJ5W1FroZr7Xtt4JWxBklyviAY48APAhOKMUY40mppXaBoNaj4bRRxjoP7YQGnHBGuhHjDBWVphgj5/NKl7VulPXKHUwb5Hxd6Ulptke1xUApRuCPdqPlVlA3hiFUNTovVaNMQMlurf741b1+FsxK/eBaKxPUYzjVTxhGWcy1dZwRQpB2LmLUWT9IOcdIKbfRiVcHUSRoURmtvdJuf9bsTxqp7daw2Z/pWprjx88snT5JGNHe19oRhMYzDTzaGlUHUzWda+Mg4Lid8lmhh7OGEswpYRg1UoNHADArSBCYvNQO/GovYpzsjpsgjqqqod4HjLYSemI1brR56UruESIUS+Uo9gHDnOG9cbMzlc7CWj8qK1M1BhMsCAIElXbOQqk9xsgDVNpWysQBAe+1c4NW6JzlBKeCpAFuhRAG9K5jrbuOZe2YUOQZ8ZnAImDrvYAz3OuIk+uJdvrQUpRFLC80Z6ifsHmpKUH3H1kfTUvtfZYwgkFb5zwMcyMtUASj0lyfNElCnXVVZfJSpRHljBCElnthO6UIwe6oTjlF4DoxjjgZVp5RRBEEDCccawcYsAG7OZXzygCiC+f+WaH3p9oC9FJxqis22iRizBqzk0/Ayvn4wFprtbGAauMIIK1dUemQo6UWdx6KymQxCxnlBC23WBrR0VzVym2PZF5qbZzyFiOEAUZz1YpIJ8TzRnvrA84AIA1JGhLl/DDX7Zhp50e5QeAPChUFxBg7r+20UHltjYNrwwaBb7SR1kQR55wa5/Znam8qlfWzSjvw1nlKkLe2kIZx4ojLrZVga+92ZwoAcQoBJw8G2cNR+z6RfU+nHcyrP/ri+V/605cmZQ0AstYJw72ETyu70hGRIAMRg0eVtGtJsJzxudIKuWGtV9rs9WEVcXJ+WMYMV8oQwAd1c3FaXJqWWUiPdaPj3ch48weXR4xRA5AJHHBKMNXeRgxX4OfKnGonvSDoiqDPMQAghE50o2GphrVBCBjGtXEA4AF+4v6NSttj3ejiuAwJaTHmvX9gpfXK/nxcKW0cQrCcBBQjilE/Eh84vlSNJ+85fXzQSe8WPmLkdDfenjfGeWUdIBCEACAAhBF2HhYLA4pnUrUDAQCz6vZuPwZQxkb89jLovJK91pdvMbdRhp7dnRzppLc9tdZvHbl77aETa7fu8xUa1CcHLQBYa8UA8IXXriEM77zniPVmweMXhHWCyCP09M7OeisCgGktAcAZu7Hctv4O/YGXr+9v9LK3Pg4A28NZKOjHPvzw/avd7z678d7Ta3etdQHg+KB1drXzk4+e/TsfevD3f/b7fuu/+O6///0PvnDhymMn33gXn37uwq0Fe7ghHrg4nk+l/tzl7UgweouRxk3xwEILcXPVa/vTs0tteAtZ6PEXLnzkoTf2v62fsBAfA8DVSX6Tv/T4Cxf+5nc9+F33Hod/B+fAb+Frxzdpf+Cm28/3vvvuJy5vPnXu+r3H1zYn824k/j1Lio1zf/fjf9lLgh++b+0jD556aXPn/jOrf++nP/Abv/uMsY6Sr1vCht9S/Ljn2Mrm/pdHsC2mFC8kBIsZYftFvZSE9xxa2vwa9ANfAWez/qmV7mK+wRPntxqlH773yNOvXvuh997nAXpJcFCUUYC1M3EcMUqtMXCD6wVvM5TgK+BiXpbKJIIthfxkr/305b3tUiaULLdjYx0C5LzfG83X+hnc+KyuTatX9ufP78wab6vKrLUjo925/WKvkDQgXrmnivGVdnDfcrYSiU9dOnhuc7KUBcNKve/EwFr3qfP7tbKXDvIo4I/efeQT5/YIpQDeOCAYOe+11rW0COPZXA46webevJ2FZaUoglqaXiZChhkjRa0mtXaVAfCtWCyaJLNSLXXDSS6TkAYMxyErKi2Vwxg4IwRQO+ZVY6rGZBElGNXSLHVDQDiNWRyweS3rxhjj55XCCAhCpbQBI4IRpVyltDFeGbcgBVnnvAOp3aAtjAMCniA0mstOKgiF5a7YHjYeoclcck6MdYwT4iEU2APRHiZTmQS0Ai0YahQMMlpK20v4XJpJrZR1zsMoV7QrMOC9cZNG1HtPMKIIxQlPpKMB259UDnvO6EEhWxFrlF1uiYi6a9OmFwdXhyV4pz2Y0CtpAoqtdVKZF65WZWP2S+ms/8Pze9a4kNNKmkTQVkKVstYDABBAgHypbV1bwYl2bi+ve63AWC8ICQWJBC1rdbgf7s1ko700NuQEY1TVMgj54V4YM3Jhr5AOBSEWANZ58NAKaYVgVuo4pPNSW+e7HeGd3xvVlCLvfC9jzspGm9EMWJcMEv7apGmUY4K/fGl/ZbntJMzmQDDKYrQ7bryH7XG92g8n88Y56Le4m0oMKBFYR2yUy0EryBvLKFXGdiOmrStqs9wSBLnhzMUBbbTn2NfGzkvdyRghCIGfN54zm5emnfBOwq/tVR7jptadlCkHYUC9clwsyqC+qnUrYVaqdsKmc50I2l3Onnz+AieoUh68d95r6xqpawYeIa2soGh3WK3/f+y9abBd13UeuPZ45ju/AW/CRIAkwFEUSXGQRMt2JMvylDiOnfYQ2+mk+kc61WlXpdNDVX4k1e4fiSuVpN1WYreTVGQ7ctttWbZMDaYkUyQFDiBIgiBmvIc33/vucOY9948LgCAIy7ItqbpifvVQdd655+x73sV7e6+11/etr+s5h6KQjSa136Szni+NcYBX5oKiNAiBEKYTcY9ipSAg2GIHzikDWjiMwCm80PArZbIw2Fvve0ouzLe0AURcXUPi20Lrq3nxJsd5pdReaSJrHDinQgZp6QCBkHqpF/oMWwcBswicUlY4Uwlba7zQJj7DiKOAYuFwUVujgRBkHVCKa+moj2OPpqVabBOPE+3IXETTygYtPhYewQ5jFE6701rs+2y+62EEw1z7HtESpZVqR96wkElIpxTsyCe1sD7Hk8JRioxzAYEwJCElpbFppps+HUsLAB5Hg1xlla2Fm40JYZgidnEw7Eb+owcWGNCnX5kq39yH51tbSo0zU9X28Ey03Awv5aqB6aVBGQekkPbe+ZAgtJ5WDKOzg2Iu4AEl21r0GvzcsEAIYkYnVk2EWmgGPqXH2twC7EmdMLYHFUJIaJMEfttjHiYc41qbmGOpjc/o3R3vzG6Wa6usvTIuGcFNxgiGiJJC6Qf3Nc6PirnAf3UrdQ628voh3CqVfWV7+H0Hl587t90M3i75epRUlXhoufMcI5uUXc2qmcAzTvRLKYydDT1OMAKggKS1PsE3VrdxJVvX6wM3L3gOQGhTax1eb8M/vcVYl5ai14zgpuJ5ZWx8nXS0OSk/sDInrWU38eY3h2knCQ7v695SHLDOMYzfXTRwAA5ge1J0Ev65E2c+8cQxaVVA+M0XAAAFdvd8o19Ug6J8bHn+D5c6P/Lgnas3Nfe8ISZ+c6P/2JFluF1NY0r74YxEjCJAK+1racPNPB9p9f5Osz8unjp2LY7fHEzKWv1fv/f8B+87ePzg/OnL2y+f3/jd187ff+xAf3P4mzuDlnOPUH1jEGmUdMYDBu+yLPjy5a2fe/ha3L+blfuvP8Arl7fed2gBAJ57Zz3hluKAxPoWT+L3bAe+M/grlw9MJcX3dK5V2T509/6tc7snLmz82JP3bqflUjP64wsb33iEby0ON5txt9FtR8boN/Z2jh+dfe7yxo8/ePxXfuO5r16+/JE7vpWGfO/evViabZ2+vD11AZtiKiGIPPbw8uwb28OP3LEIAEudxl/YlQxummRvASX4ocOLL17c2CvE//Bvfn+Noh968vj/+9ql+SNz9/eaI+QGo/zoXNcnfA05cxOHcirrum0+cONnvPntjHNvDNMGowgxAHAA7dAT2mwN0yNz7YnUTx0/8NqVrQeOLn3t9JWPfuDuWd744uWrZUUA4MhsIpB75cre+5faL2wMRWXmE58CaOcwuKO95PKw+Oze9ufZ7iSXQFC/kNq6ca0QQhYAUYQ1zktZ1ZIzEvhEOwgRjEptjKtqizAiGJRxBKMj+5oXd3Lr0EzbCzxCESqFHWd1p+E7p+KQFpXOa22MBQQUIyWtNrasdRTQNJeRT6UyCGEAV9R6UilGURzyWphaKELQ9l69rx1I59JKTJ2MZ1u+kJYzLI1phpRSlJcKECYEMY4pRdMzRaURwL5eQAnanVTdllfVNgmpUlZI3Yw8zyPaWM5pK2EEEKe4lmYvk3sTiSmEjFTKOIfiwJNaSuPmmp4F53OS+GSUG4TQMKt3RwIhcA7KWndjBj4aFzp0pKq1b42zttOKskr6lGKEIp9qcNu5LWszSfNDs2E/l1FAtRJFmtMgTnwKCLciz8eEeTjABDOwEp443D0/yFf3ikPNZDb0Lw+KZsApBmXdhw72xoV6cXW00PILbfJCcY4nWc09KqQ1FiGCAo/GHhzohhuTshd6pzcMILQzkc7aTBmPkP3NgGC8Pso9SgZjoYwNfMo5DiQJfTwqDWdkph1s9kvGMQDEnpeXNvDoOJeMYIQhYMjzvDwtWgd7Q4F7LR8DGhZ5y6fOAiEgpW2EtNYu8Gg7dnupSEstpPYZElLHAbUATY9WyjqMfQpKm0wYSrC2iGPISzUWOuJ4MBazbU8DGAs7Qxn5lCDAgDyPbuyUCOOlrt/frXyPFkI7SqU2lRBV7eKAFgXWxnJGylpjyvYvzlCEPIaE0AggrU1eGYdJwyPdiBGMew0ccZwLm+flXDtoRkQZ8BDxKcolaXZ5Xmmr0V5lynFtDLRjWtRGKKstOOd8jj1Ae5XD1o1qaSjdGk5688mktnled1r+1YnOClyXsG9Q9DPxVaSH5/tdzi+tD3u9eZ9CVuluO+iEeG2oGYG5Fh1XTkhb1JpgJKTuT1zkscDD1iCfE4IxgIs8orQbZBIhVNTG4yhgpLYIAU64A3C9iOQCzTX9fp6XtTbGdWLGMLbWEQfSIYxRwokxllMmtWEEKWFS4mrtKEOhT7dHtdTOAaqtzSvNKbYeEs4AIIKQT7EDUAYoQ4RgbcxeaXoRKcH0kkYr2BuV6si+xiPLjbVzgACdGGRKQ1qplXa4Pi5XxxWikmgy3/Q2RjUhcHYv54gUWlsHtdA7DnDpCEL9tAbrLSb+qFIMIWthPR2NS72xM8IYdWM2ETYM/DIva6EQIb/5xuZC6CMEBGHHi61xhTH+2laa16bps3ODfCcVjGACSFuHETLOaWcAQVpqB3pSOwL44rB830KCmIowoxh3gndQQKXWh+Y7rST4vv291UIKbTjBZwaZR8nB1q3tM2+sMuNKTC0IRmV9S1CeVlIYeyMfmL5WCgkA4XWJ2nScgLwd0w/KaqERMoyn9eRpiWBrlCOEDs22blx2fjK8uz13LWmGd8ABnNnZQwjWJunGtm6G4X2Hl8g7q9DGup1S/tbp1b/z0NGz+fjsxuC+ue69K7NxwHffZs6+jdX+5I7523fYu7AxWJ5rn9oeHmjHz5xb/Z473965vwXPn7t6o7PQi2eu3nNw/ksvnf+dr7yWVxIAJrU8U2WXGX/kkSM/ONsZDicLYePsZEcYBQCcMDAA71IS/5lkIY7Z518899Gb6FI3xMfrk2yuEZnpuACfeemtf/yDT0ir3ysOfGfwVy4fuAULveZMKz67OfAo3Zzkjxxc2PnO1geeunPuN05dfvzg7AWhqtw9um/pc1+7YB5wP/TBe85e3P3W5gNwfQa01w8+cHz/m1d2bs4HbkgIFhrh+uSahOADR5f+wq5k3xittvef/+S1CyMTz/buAPi1N68EnTA7feVwIyqkCoj9XtgP16lBzjl8E5Hym6wPXE7LtseWomAzrxlB9voc/MhS74Wruw+vzOZKP3Hn8v/9zKsHOu0vvba6igKCUSvG+1v+civcy8RLl/cwQpcGhXPwgQPdZy8OPI4ZRsxnFwY5RhBgPEhFN/YOdqN+JbFzWlsHgH1aG/fYoZZz8PT5nbzWhTDgEGOIEqyUA4TBGc6JlHZ9UFtrGCVCWW2cNbCTi0ZItXWDtG7FXApdlDoJqXOEUbyXir2snm8H2jihTK0soRYwsuAAsCOIEBR5xFqbltJnRCobBbQQKq10JQw4RwkaTASjRBo72/YxctaAUK6bUAswSGvPowGnzrlxIRlBe6n0GNbGlsIkIYsjsr1XlUJXwrQbvnEwmtQBx7FPs1KXlXIAiz1/2tfI47QQ2vcwLoFimNRaSRtFzKOk3SRam7LGUUApnfb1F/1MOgTgnE8x42QvF8vtcFJIIXQcsloZrW3kM6NtL/LOlYNLA8AYJzHyKF9ZmFkfFg6Q0LaqNaX4B47Oh5xempSHmmFaq8rYxw/1KMLKmtW9olB6uR0IY06tT2ppmz47Pt98bXeilcUEc06NdcpYBO5sUR7wgkqYHSQjzhChPiOFkocXmud284DTozPxdlpnQhW16UXIWscoKWvdiJj1wDpEKSlqXUsTBNQYuz2Uxw96jQAHPrGWjAtBKZbadWbaZV6VZc2IyyqRJNFbb60/9mCLcdyO2DCXhxciV1sE0y60aDARC50AEzTJZSOiUtmQUcYh4kRZNClFWVvfo0IbpslczMdCex4ta5OWWigbcAIABOzrF3OEYP++aHvkImTHmWokXqnqWljGnHE24LgCM42NKCGR74aFSqJgY2foAJoeUx52ziqEew3GKSmkdgi1QgBkdyeykrbV8DBBhbCcYUbRqFK7w5pT0gr5oJKkglKa0Kf9VCKEWxGLfKQ1SGMROIywsraV+GVV97f3rjQbQtu9ncGZ17OdneHeXs4463ajvbSuscv62eH7D7x6/sqh/YeikLYSTyt7cc8SsKHnaecChia5ZhQ3Q2KcS0tVCm2sW+p4mYSBUAiDBQg8HGraDkkpTFmZZkDTTBNK+hMZK9yKmEcdcqCMQQjNtfjmXh1zIqVa3do9sDRXIxDaCGWFNHNtP59Y4xwgFHu4lqbj8zDm/VQa5zjDDENemaCBi9xQCqWx2lhK0V6qZts+I9bnqBWz2piIkTvb/ItvygeWW8rgu+daAODAPbXc26iEMOaumfh98/F6Wp/s7x2ZiSOPV3P6haujR5ZaMaPn9oqR1Bi7WlmHMHVgDCQBDTiZbfFhpi6PSmncctv3dXAh5B9Z6XWD8NlL25/e2jmXFo+0m3d2o7VUeBjvb/oFqh+aj04w4lHaafBGyHMlV1pB22chJTFjFjmMIRd6I68ONiJpVCbdpNKlNiutaC0fFVI757qRf/POeiHUXCemCHXiIAj467tZv6iFAefUBxbfIeSdYhrKl8o0OMMI5bW85YJhJYZFVUjVuMkXbJSWtzTwsc5hhG40nh6WYn87uSXE3xylAHB4rmOutS2S9CbB6zRn0FY7gNoohNCFftrPqgSzT3311XuOLJDrjZEKpXdqORDyrUn22avbu0L+6uVNALjLwxd2RnPN6E9jCDzz5uW//cS9t3/plQv/7O9//OQwOzbbqqXsxcFtL3MAX3z90q/8tz8w/fbk+Y0Hjy4cPzh/ZGkGAM6v9595Y/WXTpx/zbp/sTAbgL3/jqUG5wkLpgUKYa9VKm6xHXhrd/z+pRkAuJSOrCEHrncrukEWev70FXRTcQBuqiec74/vP9idFgeePnXhEw8dfc+T+DuJv+r5AAB8+KE7/ujC6vR4bZQBwKSSjeDPx03/82LqLQUADy/NfurkpQ/t3/ewUC+t7iy0G1kpWpF/z4H5b59L8Q3u0KGF7oX1AdwkIZhPoucubd6/NHOz1vnQbOfb5Ep258pMJk79jz9431P3HXx9ffSLX3h9MVX/6ODSE4cWXtwdnjq3MXUlu23oT+k39dvb8th0Ks+VbmF2o3rQjPyLZ69Od3IOLsykUtvuTFGj/THtI5RZXWj7h2e3L+zkPsUfOtSLPfw7r2+X1jhwtTTK2DvnElHr09tpVpuHllovb4ySgFXGGGGVsaUyylih7ZflwCc49kkJiHNclEpJGwS4F3s7Wa20q6VJQoYQygrbiBk42MtkVihlXSkNQdAI2SRXQlpnbV5qBQ6sIwjNtPxS2rzWnYhJ7iphMIJOzCtlkHPOOU7x7qg22mJOjXUIod20bgQewWiciSRiRWUpwZi4ojTNiExKJbXJha6kYQwXpWIJNtZ5FNfCWt+CQ0K5LsVCGuvA5zSJ+N64ygqprVvohQigqE1R6VbClHH9VASccIqUsbNNPs6ltY5S7HGqiHHW5sJGHrUAPieVMD2fCqkJgmbCh5mspRsbtdAOaqYdhkoaRGBSKYSAYDSplDOQWR2z2Ock8CjGOCu1s8Yi5HHCKd4T5oPL7YkyqTa9gL+0Nd4YlUnEtXUbZWWMCTjJldUAC0mw7Woxrr2QXslKzvFMwz8UB589vcU5UdpwisnE7bCaEDQvve2iTpTOKhXFXuWM56Fjc80r/bKQZibxA6wiHwdAd7PaAWAADVAIkwQk8L28VONcWQAtdVnTZugNc+n5bK4VVEKvD4qZue7O+lYqCTPWEDOuBB9ltTRLPW8vUwjcuNAzMZfWRT7JaoOQHReqHTNtXV5pzmmhjJAu8BBDCAPSyjRCSgn1KAIAcCCkjXySV7oR0rw2oUdWd6tRJjFB7cokAeu1vNGw2M4UpaSslOcTbezmuOgGcRh4HKcauSggw1Ru7tSEkLTUrEmUtsYZiqGV8Fq6Zkg5Jbk03KFW7Ku0rqV2GDvjtHE+w7W0aakPzHkIIPaxMYhQPNvieWWTgFCKJrmOA1rkWmpDCcIEh4GfZ+XXn3vz5Mvng9A7eHix2472LTUtTpJmsre7/ZDPD6Ti9d1+uxdH297hpTCvwed4mErOcK/JhXKqQoWQGOH9XS+rbehhrZ3HcCskaWF2chH61Ce4rjSLGAKnjEsLZQBRgpKQYoxyoZkPe7mupSkVaGsZRqv9ilNcV9I5IOAcWGNcVmtCiJBaW9eN6LhQlIA1TitbcksVMIopQeNcehT7jI5SNalV6JFewoSyxrgkpEJbbTEi3Dp7RzfaLdS5YcEwbXCeCvTy9rV2cEaofiofX+5WxkyEDDlNArRTiDs4j3z62P7O69vp9x7uPbzQfHOY7m92Tm2lO7kQxsU+ySo9G3rndqt+UROHDnWjkNKDs8nJ5jVr9rnYd87FWnz46FzM2I8f657cmqzlZTdGr+yMHSGl1u9b7p7cTkOK7plt1MbuCz2hrXIOwKW1Dhhp+BQhvJ/yabxtnJXagtRNj92yDVzWaneY91qRcS6g5NGF1lZev7ozxojcyBmm4t2bG/UMa2m13r84MyrFpayc87m2diLl0+tXT+2lW1h+lxQRv2Ykb5wbp1XyLu9eBDCtaayP807o3VLfJgitDSax945VyV63pYebytQ+ubbifO1qf7i69VsvvvWl06tPPHTki1uDq2U1kRoAmpyuRMHD3VYoxa9cHnzwjiXizIcPLPzqH704qeW7/XAAYHOYAcBC51bvM7jeM1QZ++XLW//qBx579uJ6xG8fT++M8yTw5lsxADx/+gpG6Oe+/9Ebrz56bP/vvn7pH33swctZ9fB858vn1x5emrtBFnLwdhHkM8++gyz0hYubDy71ruT5H1zdaBH/QwvXdhtfvk4WevrE2Y+9s63QtJ6wPs6WWm87gT5/fv2v3fuecuA7im8qovqvGx974u43R+O0rBea8cVhqq1dHWf3BV33bfhFDKg3FrlH2A2j4iCBdsAxwIFu463tPUrQtL/nPQfnP/3MqW+thODdeOTu5U9+5oVf+ImnbpwhBDvnCqFucSX75Jde+oUfeOL2o/wl8KGV/U3f+/tPPswIvqvZ++2Xr3zPfPcLX379iUMLD892cKWm5KXFuQUAwJhYM3UodOCAkD+1qdxtUSizEAcNThFAwunjB/Z9+tWLX760BYi9ujG6+/67PVkvBKhQ6tBs68WN0Re2dpx1cUgpwSd3JoCQtPbKuHQOACFl3FfO7mrjCEZC2+dWR4Dcue3M5xgccIZrbRjGjGCP408FrOwAACAASURBVMMzMXHoalqNctkIuVC6rNV6rRHG7YQ7ACmNMM6juD8SdKrIBNyIKae4qE0pTC/ho0KVwjmHGAaPk6LWg7FoJF4joAiD0sZjBBCSxjYjlpaqGXGKECNIE8wYogYXtV7uRoXUk4lyCFW18RhZ7PnjQmKM1gclQghjTCmOGR6nIg4ppwgjTDCXurYWSe2ktJNSdxLWH4taGmcdZ1ho2wh5LnSRq0bCKcO11KNCSWURIEpo7JP+WEhtA48NM9kIXSPkxtis1LWUkUcZI5QgY1wpXSv0KqlaMa+ErqUblwIcbA4rSjABdO++xqnNsVC2F3rAIRPa90hWKgRQVNo5J5QGhKqy8hphEpCzO+m5HWgH/N59zYTRWtp9DXJ1VCFA64Ww2jY4OdQKA0oWQv8lNbxzNrEIXlof9zMRU0IISkJGERRSU4p7iTfIxIXdnFGc5ZoGtOGREGOPEencXMtPlUmFnun6k0lNAtKMOQKQ0iKH4phxZ/NCOWvnWnyUqRq7QVr5nNbGzQRkmOuA4dCjdHHm3Omzcy21u2c3R9WhXvvS9sBjeHNYEkTqShGCMUIzDZJpDMZaB1FA00pHPhtMBMF6eSbEzCIARnAurXEQe3girNI2pGS+yWvtQkb7E9mOYabh9TPZjOkoBUaxkDYJWUCgIEgbV0sFAMhB2482dupkKcLOIkKUNr3Iu7pT7ptPzlx0GCGjnJROaHBIV8LMNPjOWDoAjLFPYepUOtvwQ052C0EAhx5eH1QYoU5COSE9wLnEpVLbIzHb5GWtfU5Cn/RTqZTGhFgHRjtESBwH3/PdDx47tkT80FnopyKO9CSnDEMrCZJmK9DDZuhhYPO9pkexpsAJ3j8TGOcQOAwuF9YBLM54zgElaGcsFjt8N1XS4mbMgLr+WCqCOiEra621K8BYC5SCMk5rywjpRoRTTAlWxnZ9tlc7whBDpJZa1hITzDixDsUBSyvVjhHHdHcs2hHDFPsU+x6xCCEAQpCpnc8xIdg6qKVOOG2ElBNU1ibgZJiJdsQYwwNpiNMxR/1MrrTCU1sKAK1OqnYU3j3f+iwAIPRb5/qc4eW251M0E3nj2oScLjbic4NcOGURFmCfubL3+Ern7k5zu6ifWO781qkNQjBDeFTpjVT43PkEhx4DjNoBLTPNKMEGMtDtwMMISWPvnW+lEg60wsPtaC0t/nh1UyvTC70fOtQ7n0lABiO+nYtDrXAjr1seYwgBQso5BxAzmiuBACw4YZ2PMadkkKvQY+4mjzDj3JX+aHeczbQSgq8F2rOR97HD87cNkW/gtc3Blk9PB+zfb/VfeA0DwIrPOqE6lHS/b3Hfy+c3iLQ33gUABpOiEb7tVHBzaqGdWx3l3fAdbphTnH5rQ9u3H8M4d8s6fSN4mG4HvLQ+KA/M/fKrF/KW93uy/nlOn0q6cz6PbnIoQyB8jGVR/uTDxyZl/erazi/97Mf47Za5Exc3vuvYwXefB4ATZ66+7+6V19d2P7A8W0l9W/HAVIRw8sqVx45c6zT6lZOXHr1JEDzF//m55//m9z/5M+8/0s+K/e/sLHSDvPv0ibeeuO/Ab3zx5FQcfGJ7mAr5y1c2PzwTP9zpbQ3S+cib8ot+/+W3/vtPPPzSmXWE0M3Fgde2hu9fnhnW4utXd+5b7BnQAPD8uavOuYfu2PdeceA7iW9jrPn/c9zYEX/ojsXQY5ujrBF4IUYPL81sXOfJfDvgE34jGZhiytQHgIVmvLaXHZxpX9jZcwhd2Bi8lQ7+lGG+NbjFleye9uyVYtSO/KkLwbfWley2Uzgl+IN37//i6xcBgGL88WP7Y5995rk3p6924yCtBACgm6ei6/jT8oHbvtewVgmnAG46y5favLSxJ6y3k5vEo3/7wZXvPjS7NhivtIJP/+GJZY/e20s4JXMNnwCa5HK9X17ezZWxzjmEwTmLMCQBnesEScSSkEYe3hf7jGJG0KP7O4utIPJpGJFjiwkFvL1Xv7WdD1KRl6qUhnHaSTxEcLfJK2FGqSykIYAIRcZZoR12iDHQ2gpta6kroXYmFWPYGIeJizwS+DQJWRIxa6y1VkrDKQl92gpI4NG80rNNf28iNkd1qYwBMNZZ58BBWsi8NJFHMcKAEKcoLfXOsC4qGXi0ETJpLCaoKCTGKA4opzgtpbOOYOzAKWUoRR7Fk1wrba0DpR3BmAASylS1mWl71lqPYWWQzxCjuJNwhGFrVCOEOKNC6ZmmjwkGcIwRj6NWzI1zUpqs0pvDSmm7m9YYwf5W0AzYSi9wAB4nGHDoUYbwqxtjoRzBaFRLYW0zYUJa60ynEfz8I/s/erxLKWYYW4udtKFPnzjY+9ChGUbJ77659eylQenMW4Mir7VFhiNIC7XcDJyDSSlPrA4fWe6MK3V6KxXKpLk4vTlxAEWllXGxzyjGw0JgDMZCLS2xKGHkgX2NF89ewYCUttI56qCs9CSTo1x2MK5SSS1KfDoXcCttI2AHZoP5JifOdiOy2PJmGty40mNKatFKdKWydoMkXrm8GK1uG86Y8Mk4ZJPQYxhzSsCZJPbKWoUMYSBS6ShkjCJKcMBpITRCuKildU5ZENoijDyCAw9jgjBCCKNxracMmdpYj+Gtkay16SSMUBoGdK4bKmUAnHbIGocAWgn3OGm3PI+Trh/OtjggB9Z0Ep9gDADNmDvnpFbDXPYi3k5I7LH5VpDVphXRfR2+r80Yw5S6mYQJZbcmUisnlF7tV9a5RkRLCdbBuEaUQjOk+1p+VigHbhosEYwwIfMt3o55IyQIIUKIH7JuK85KvZerubbXDAkjpBF6lODQYyGjYFAY0fWd4ag0CFulbC5sWpmtsRqVOvJxN2JS2EKaUphOk49KA4AmudLaTgpjAM00+SBXo0IHHAlh2zHrNjgjmHPMKBHS9BqUYZht8Nj3lDVSOq3tQsNTyljrSmGVcrUy1gEjuBPzRsQwBnAuFcZnRFlQyg4ziQkiCCchnWt5iABlWEiz0gycc3upKGuzORKl1No6RggQslfJXsw+fqQjlDQakEXLrQAAwLlOSNsevTKuhkK/PphsFTImXsNjH9rfdZYMUsksubMbX94rDFiEkHF2SgIcV7oSepiLnbG6ezZ+fLH90YMzy43g2SsD6dzXNkdXx0VtLQIktJ1Pwm7I+qUAgJVG9OC+ZHdSAqGXMo0BFuIAOXRpL6+1LY0iGJXaCOMAAAM2DqY2igghBEhaixAUQiWcAYAFcNfDzVKoE+c2Diy8bblFELLOmW+YD2yMi/MnrjZfvHzxvzz/wq99yZ681MvSw4W3jNBKEFrrOtfj+2noP5gUSehNx3y3Dvgzr19cbL69aX0DVzb2jszdnr4/xfRRb1BzH1ma4Zv1z9x94OFc/a93rDzSax1KwpuTAQC4uJveM9P4iYfu9igBgE4ScEpvjuMzVU3j48u7o/0zTbidMO/CxmBloTNE6FAnuTAYd6PbJDNTvLUxOHpdPHCLFQAAPH3qwnc/cOTlzcH9+7q5ULfYkOnrZKEXTq+97+jS6vboR/+3//hTv/hf/umXToYzzf/uwMKhxM9y8cTBpan32TNvrH7/+45u9NOnv372ZuXAa1vDXGtp7S+/tbqLlbmuJP6jUxf+2n3fYrL0e/gz8VcxH5hKim98e3x5dpCWp1d3ZuKgUuZwt7GZlt/g9r8k3LuC1ZXWtWb/zcCT1t6/f+6P37hcK7U027qw9u3NB+B2rmQzcTAu61yob6Er2TdAtxu8fOnayIc6yYlxnhVimqLMxMHmJLfOleVt/ke+Sb4QAKRCnR3lGKGYkvVJ9dL66DOnt17fyhYj9NVLq3MR3cir/c1gbavfmWlf3Rr+0teufO7NHY7d9qQuan33vsYHDnbBAUYIAFkAjxHn4OhMYoTR1lbSNEKeRGyhGxBKXtkc50LHIYs9litzaCbCFDniamGikCUBlspggmdbXsBpt8kZI+CcsaaujU8JI7jbZL7H9nVCKW3g0U7oHeomRaGbsWetO9qN00LGHm36TGtbSVMIq41tRywOOUJQC1PWuptwZax1yFlIS+UxYqwTxlbSVNISDFqbSaEGo4piiDwW+yTN1Uwr4BgL7XyPIoc2h1Ve60mhGEVZqfLKGGuLWhVCMUKQA4JxWioHUNUGITfMlNKuP6k9hmKfdxOvEBojFHAS+xSsjQJSCl3WemtUWWcYJ5Wwgce6Da8ZMoqQkIZi1In8C3tlWqnQo+3EzyuNEIQ+ixJunDvYCf7uwwf2t8OHV9rE4V7Di0KUEFRrfXqznGt4SpujM0kq9TBVX13bO72TzkeeM67hs57vIWPGtTy3ne9ltTTmwiB/aXV0amOyOi5PbU06sfehQzPvW2w3ONuX+JRgC84CGAsLzcDnhGHca3jIubzWo1y9upnNzs0HhNzdje/tRg5cxEk7ZMqhrf5QgMuFogRtpIJyIsGtDerNsRpXzhKaCZtWZjRGe2OztqP7QzwY4sFEjQp/bwz9rUGl/f1a34MDj3PKjTEgpVXGWIuu7JSFcNP4SRuXVYpyVAtd1tpaNynUpJBGu1qatFQ+p6WAkJF2wDghWkNRa4LwTMtzzm0O67QyBFnswBkrhJlreRgBQhAFrJV4ABB7qBd7G8VkNzWTQhbSrG1maakBgDFmrB2lVeShGmytuDCFNDr2Sa3d1qDeGNbSAHKQ1yakKPRQM2Qeo62IKm3jkEprQ44jjhBYKaFUhnGKME4rG1HUS8hihztw1po0Vz6DMPQU9i7tCkKIMU4aB4BaMcnLWii9N8nrWitnQ49jjBmGrDaAwac4K3XAsDZuUpl+JhmFUa4QcgicA+RzRAjyGPE9GvpkY0/0GqwR0bw2pTTS2MFEZrWphcUYp4XYnchK2XGhhJIEIW2dzwhhRGsDAOCc1tI4MMbtjoUGq7Ub5VpqWygXcXDOxgFpBKzBcSmNsyCM1coq7ZS2Z3ZzZUFb14yYNXYwVhybTLndkaikeX5t9MzVPUrpvqaHkHtu/dpmDedoJubjQq/vVStxdFcnJsRwAh2f3zuf/PW79nGGSmkuDcvNtB6W4kuXBhjB0ZkIYeCUMII/cqh3RycW2l4YFj4j9/fibhQ8udxcbnhvDdPZmPqc/OG5dUDm1M6wUHUua4TRfXPxnfs69/dCcLCZS4zd2qT2KT6QxBShkNGI4YQTipwydmorTBGyzmnrMECldMwpuh6ROOccwGtrO2+u7Z7dHTuAd36h6YG+3hv65q+9Sly9cvFf/YMfeuXf/cPP/u8/+4kH7ujv5c+cvPDPf+2LP/XPPvVHnz/1v3zyc7/+uRe/evLiWn88XWgO7uu+e9WQ1nKEFzuNxcat2mXj3IW6fP8di9OCRqb0LVkEAAijOHmbAfXTD96xtJT81GPHDrYbW/3xuzetCqku7qY/+/Bd03aor13dlcaevPz2miuM4phOb3zp0uaf5kT2zCsXvvuBO17fmzy6Mjup6qXWbThFAOAAfufFM9977yF4lyB4imfOrD557ODHjyy+24bMXfsHz59edc79xPc8+D/95Eee++V/8N9838MHAv/ZL575t1987dXzu2uDNL7eE/z5c1cfPDh/dH7m9589fXnrba/V/+fNK3fMtk4MJ41KPNhuKmuEUX9y9oqx9r6DMzd/gO/hO4BvNqL6rxt+rn79mZN/64P3IQQfPLTwD3/vaz//yF1/1k1/WdzI7O+Z7/zOG1d+5v1HZ+LgzPbe4wcXAMDn7LF79q+uD+H+bzzMXxDo+gPcsdS7RUKw0ml87o3LDyzP3jvb/tfPvqFH2ccfvZsa97tff/OHvw0fyyeO3/n3PvmZ6fHx+c4//9LJh+49cOLM1R/+YDPymHNQSsUYM8YAAMEE4JpL8TfgC71dq3XwJ1f31tJqNvIuiPKl1eGBdtQJ2SOLbQzord3wk8+9YZxjhHgAQuovXUrnDi06BAHFAOBTXErzxsaklXBCcMMnzMJMy/ccSrU+cWVICALnnHU74yr1acRpUWvrwBhpncMYNUN+RVUUQ9tnQuhy0Kdzc5GPykr1mn4pdDNm7dAhzLNiGmTjOGQAKPaINHq2zRnBhBBAkISUEFwIdGprMu0pbhFgDBQRZ61FuKx1pUwpjDY2q3QnZo2AKQt5Ka1xeW1Cjse5Ihj7nDR87BBT1gKC/lhNSsU5iSLa8EkpjMcIo3iYS2sAAQKEpvz+bsvLS9WKeCkMJtBuBGWls0pjsNZBO/HSXNXSWAPDVGKCCEFTPYOxtpbOOLDGAsKtiNVSDyeKc4QQjDNdCDv199VC+ZxcGRSc4iOzyUSpSSGnvUdBmMcOdV6x7uN3zhGEhLF5pfNKtgO0GCfbef7CGuwUsslx7NNze4WxdrHp9zN5MZdbk9o6J41p+HR/J+Ich5gMpbo0KKS0cZNVpWlyttgIANyJteFEqDigG5PKKDvX9g534q+cH2zZqhWysVSzMSMIRplyzg5L2Yz4IE2/eFbON7wHFpsvrI3WRtXijJ9npOsT59zZjTSJeFaIiHu7mawqE/jEY8Q4FJDgnsNoMIH1ncJY53tkoe1rgE+9es7zVzu95vx8Y2NUlgwubqbzrVan6Y9TQTjJa5OWkjHsEbRjXVbqJOTN2KuFBoylsoGPS2GyWkttOPOENtsjtdj1pbbIOWSdtoZg3E74KFONiAyGqla2VBYAqlLnxnqMrDRYZVDAScgZJzQKrZRmu9TNgAUBO7uWCmUBQGmjtGoEPK114OFsrAF04LGqUpwTY918QjfHdTvkqXRhgJADjJBQBhxEPkWApILdTM0lpJCaUyyVddbNJKzSjiK0O5FKO0Cu1s4BKkux1I2ph4XS3QarhIt8qIXxOC4QVAIWusHFIXUIrHXagUdxwNC41Pva/u5EWAfaOIvg6lBVwpTCTgrlEFLaEYJ2xqKfC59jj5KtkWQUpYXqNPxJaRAGoY2HEMHYOEsxLmvTSvj2OKcYxwGy2nGKwFoEwCiuNWkltBTaONgdC6lcM2IEg5B2ZJSUtiTGIYf5dFpzZeUaMW14OK0hL7XHCMHIONeMeSV0JRV22uNEVHqYS6lNKc2kdvMJuXt2Gvaht7bKxw55kU/aPjuxMZ6PfUucdfDGXnqwGQljltv+c5eHASWfO9tHyHmULDWDUaU5RrnUEff2arncCmptFqJgLateWOv7DHNM20FwuKH6zThhdGNcvRLsEksuZdcmYaFUL/TO7KaHu4lDbjH2X9tOr4zKo73YWEcQEIRmQ69WhmDkALR1whhlXcdjOxWUWq9c7/FPEcq00bVohn6aVc3DC+imKR0BIHBTd6ob5+l1/k8ulDJGKt3pxEu9pgNYmmkeHc8daXQsGCXdJ7988qGF2eGkePnc+v/xqWeE1IcWOk89eAe8szgwPUYINiblIyvXfHZvZhl1G+HRhe70yqktGrwLU1HylOtkrO2EXuizYwfmLm0OHz22H90UAwhtPn3y3As7u08dXbmUlX98dfe5q1vGs8++cakz69exQgg8wqbEGwRwcWd02/Yem4NJrc3nT164hSx0M6ZkoWfevPKjjx6bnrlFEDzFv/2jr/+t73/yZ95/5BvYkH3l5MWbmT868v7eE8d/++9+7D+9eOa5c9uff+3q1d3qo/esjLL89146+z//jSefPnHu2MH5f//ZF/7zF17+rofvvPfYyq+8dPYHQ/Zjc92C4VbIp/nGn5xZe/KuFU7ei06/03jvEwcAePDOpf/48ptPn7q4J+QfnF699JcgxnzzuLFDMBMHxrndvJqLAwCYSgheX9tZ7DU3BhNjHcG3+1v8FuHdEoK8kjtpeXFj8OqZtd/7ja/8Zi3uWpmtlR7735bHWO41EaDNYbrQaczGwUojenj//KvnN374g/cAwEIr7ufVQuwDXGsz+ufClbTolxIcbIyqZsD2tYOjM3HESMAIADyyMvuHp+Pzu5P5VvLHV9MDh1cYQcuHD0YM5cKU2voUR5Q4BNvDygGMCvORI7Op0afWxoFPtQMPo1pZRDACqISplCEIJT7NSimNa4SsqFUYsFGmwNn3LTa9lebJ7YxzWlamyEWvF4xTwykKAjouVejTgNOiluPMNUJGGUaAlFZJSOOIWgdGaWuhGbBGxBBGLU7f2Ew5Ad9nk0rntZbGNQI2LmTo0UmhLUBeq2bMEUKjtHYOeRS3Ys4pUsbEnFdCK2kRgFS2nXBj3OawFsowhpSyLY9lWFfK+nSa9cCkEM2I76Uy8ok1IJUthEl8UinUDil2EHCijDHGSuOIwZ2OX9Y6CqlPSVpqhI1zOJumEAQFnPQnEjkIAyqVdWAJRhhjqU3gkbLWF3dz7Wwz5LFPpTKlNnmtCUKfP7c7ruW40ltZvdQMdrKaIFsoqGU5m/BxpSIfg7PEZ8+evPTTT961J+GhpdZ84p0dFiEnX78yHJZSaqeMDTg51kv6Uk5SWSn79fVRwknokTt7CSVoa1w/frB7NSuPzsZfPrPbSHylXMOnxri9TNSl/uh9+7ay8vxOEQReJhUVZLuUoU8bIS2l2dcOt7O6FpoQpLSjAUXOGa2bCVfapUJ7FEeMeAxiHzdiL8ulMlg0bCZMo5W8/wPHDx/eNxxNaKmK9a1cSEKgqIwf8tjHu+N6rV/GHmkmnCFkAfJKCWEaidcJeVrW/YmYb/sEk7LUhbAehYDjgDuPkLTQUcSGmZxt8cCjo1wJadd3S63tZCKbCd1ORTvmu7mypek2vSRkRa3r0g6yci7SK7NBSP08L8FZAChqrbWxRhswiU+sg17TryQ3yhSl9j0SRrSUppt4w1y2AqYtDFPtMzTJdRTQUlhpHAHSDOi4No2IgIWYk0pCVlvrnKOoEpZR1Ir5LMFK226vCdxLCx34tD8WvSbXxlGKN3erutTNDvc9AwgoZs65SWEYRQSZxGdlpbR1IceFdMg5TBwGcA4coFLYgGMAYAzPNj2hHEGQ1yrwaCfxCAKMwTmXFsqjGDAeZ3VeGQA3zoRQChwZZqab8H4mjdaAgBGUBK6oZMhJwHDE8bC8poruNhixZlhah5EQRihLKC4rTTBqe4xT2m14w1xVtWIEp6WKQ8YoKSWXpjTKRAzHnI1KwSmVxl0dVVJca9FoHJy8mjYjNlSyQdDrFzLqqStNZywUSieMnt7OWk2EBVlKiAN3cVgqbY/PNO6bb3z27PZs6NXKCmUXY9841wtYz6NVK352fYRQXkjz9f6ebbOXVtfKYu4jR/YdbfSUcavlcGuYPbA//tDhuZc2x/fPNpWxDY+91c8PdSKGr5kHE4SWGyFBSDsAAOlck1NtXalNLuXsTaaTIcGXC9GK/CwVjfjthcdc7/gpreX4NuyG7byci0Pn3FRriwCcA+scJ6Q2plD6u44fvH95dhrZ/8KPP/WpL5z8g+ffXJ59R7eiGwIGANgrq8XGO9wwjXNFJQDgwEzrRieic5PhvZ232/S9G7/7/OkHD8yf20sX51rb16vuUwhtTm/vHZjvrl5Z/8XTl460G0sKdk6vf9/77rzvUPu5c6v/8j88+5NPPfADj18L309f3b1jvn0jl7gZJ85cPbDYeykvf/Tg3IXB+IaN2s2koylOXto8fL1d6S3uAQDw9KkL3/PAkZc2B/9i3wcu9kcLzfhmstANG7Jbbvza2s5/+LGnAOCxO+ecdf/yb37wuQvbn/zy6//p+fM//sD81Z3s62+ufuLxY1OlwbOnV3/pmVP5anrimfNLDxR/57HjJVxza/3sy+f+yQ99ULr32ox+p/FePgAA8N3vP/IHz53518+eK4XeLOr9zej05vD4Que2f3J/SdywQoObBn9sZfb09nD2jsUbEoLL/dHxue7vfOW1M5P+Pe1vfaPPG1joNSshf/UPvv6xR+8SWp6/sPPpq6/+9udf+8f9lAU8e/L43QL9mx95/6QU/+TTX5pG7X/WkLeB/Yaf5ON3LX/9wvqPPHIMAD58ZBHn1b977s1/+nMfBYBG6I2Kuutd24Vy13eGvjGmuda5QfaltT3r7FIjQA61Q84w7JbyeC/JlGlyer4/WW5Gv/7KhQeWFgFgvtMZ16rOalmBH3hJyEKKQso20nq6+YMRfvbSoNnwtHZZrvZ1wnEmKSZzHY9RvDup80prZ7PSOocSj+Wl4gxr63xOqtpdGFWF0JxhZx1jlHJMMFZGjis9j7FH8KRQSknnoNPwxrlkCiGEKMMeowEmJdXDwrZCmsTscCe8OKoqa5yDSlrAyGNIKhcwEnKalqoSOvbpsFQASAgdcJJETGo33w0npQwD7hzsTESp7UzCR6nstrzdUc0I9hiulWvH/jiXfanBAcaIMaq1AwCtHTjXafKy0rUwo9xQgkvl5lq+c4AwHhcFRhiQIwi1Y+4QxD6XUmvnrLXzLR8BjHJpLcx3vGEmp0RijMD3sHW44WHGiRBmXGipnXXGY7g/FkJbilEr4l8834880o69XBplXCOgpTbfdXjm2Uu70ugnD871cxlQemmQW6te/ZMXVvb1Xu1XP/2+pX3NoOnzuUYwrqQF+NrVPR+5YS1lbV/X1oIjCD2+vzPb8JGDQSVroS/2K4LRxWExKuWbWykADCt5z3JjKQmfv9xXCixGUtlKw/feOTcx+sWLo0Fa+wT3Gn4tbcAo90ioKEJQChP5RBk7zrXHaOTTSa6MNoU0tOMZa2tl2gmnnEwmYqNfhj6llNx57FBeSe7x5Ti8OBlnwyFfnq+tdda1m15/r3bUlcrKUS2VQxjGmQ04YdgJqQaptNZlwsQcEEJSKI+y0CegcVqqOGDSGedgeyhnm37o/X/svWeQZel5HvZ++aR7buw83ZNnJ2zOu8ASeQESAAEUKMEgKZtFSVTJRSXLRYmWLNvlMks2bemHXCpJNC2JNCmJAgiYAIhILNLuAhtm04TdyTPd0+nme/IX/ePO9PYGgBCpJV0FPNU/bp37na9PT/fc7w3P87ykN5KC0yDkHPjuIQAAIABJREFUrRr3KVrr5tv9wlp3YD6YJFWt5iWlQY7082yuQznFgUeG43T/YnR1qyilQQhtD9KsMhjZUpo4cpFAlwaVlGY0kXv90AHSxrUjMSl1DRNAsD0sGcNSWU7wQo1zBoNcaYNGY5VJ6zEsOEkKbR20a2xPW1gAh4AxVFSOUmKs68QsKQznpJ/qPT5S2sYRc5r5HsYICMacUgBEMWjtBkqNckMxQggK5TyCACCTphZQpa1zQDEITgBAKhv4JPTg6nbJGC6lwZgYA/vafi+TxrqAk0CwNJcEQycWk9JihQSlnJGsUhSTSVZhggFgUoB1zjkntakUQQgiTnyKYowmCixAK8R9iyihlTGBT7RyWrmKmlGuCUaM4ryyPqfWOMEItxZzhgmJOB6mUlpLAKyxmCC4aTvhnBsV0oEb5cAbvO7xFNTZrQQDfun6ZOqthJQjoLqTKvKoA7hvqfnI3rYg+OfuWH5uY7TSCFYn5f6mv78eOud0UYF1JM8P7Jl/8cJ63suvbI3+xr3HAq1+/5lL/+D3n7p7pTPD5fYwaxz3tLV3zNdPbyfa2uXYP7kxoruKWQQh6awgOFeWEuAIE4SUcwyj1WF2qNWYpg1TQ7NBmtcDsbk+qb2ZXeb3Swm2kmKu5gPAwk2nGorRTum+l+aRYDuxPgAcXGpd3hjsm39VovA6CcEgr5Ybr9cPrPYnALA805iu3G1Ouhu7D6rLW/13zDb6pdw/3/zct0/9nb/4E9MFpTZnNvsn5tuCEvjC00b1nzzTKys1F8afP7Nxamsy1PkF5P+1X//UzxfVh99x+1/72Nuudod3H1jaqSfuxoXrvROHF58cpfevzH7uxQv3fB+LcAfwrZevfeLh2+AHkoX2lzKrFAB0Iv81ZCGAN974xNWtd+xfMNadn/SJJncuz9Q8/v5bVzhy3z1z7i8+fPzqRt85+OR775quP3J46fAw+VvvuP1//a2v/dMv9J66OvorDxw+enfnM0+//MG7j0ir2Y+VxH/m+JHOB6ah+cXJeM/BVm1P/X/8wB137l/4tS8+DZysJtkJ+EFqof+82FO/ISGoCZZKdcfeud987OQ7j+69svkq0+6tw4HF9l/5x793x6FFwekHHzn+wL17f+LEwV8+d+XhuZlrZ1b/4aP3PLx/HgC+d3X9qQvrH73/T5IP4JvkzjeN5dtt//Ra92P3AwCsNMLfX+seO7Dw5adefv/9R+fi8IXV7cOtCOA1SuE3yjB2cKGfPr02fKWbzkTCDwjFtCHYqFAEoetZcSAOt7KyE4grg+yzZ7evjZRgNWsdAAwyWRnneQIjizBeiLnn29uazXFhPnt6PRZsXKpG6CFAnGKpbaFUPaKcYudg1hfbw3Ix9q1z9YBd2EoCn1ZKr7SCTOpBUvmCOgvaQtJL7zwwc3o0QQhPcpQW2hi71s0QQh7DkU+NBUaQcxAKbsEGPi2kdmA5J5627YYvKNrIZMBQUmprrHW2VChguBOzSa49huOAeoxMChUIMt/gxoGszGCshCD9STXTEEmujLaCI21ga1g2aryoNAIXCRpGtJKmP64IQYwgj9Oi0nmlKUbOOUxwpWwckZqPhEfVsKAEEYSMhf6kss4KRo21ASeUoqLS48xiBBhj51ytxgeJnGuKZiSkNf1M1UMmtcPI5aVCmAQeMYBUYZoBtwhB5moBr3FSaqOVG+ZylElGcFYZ39P1gDFsjs3FaalrPnOE3TLrXxnmD+1tCkJe3hqVW1u//Il3fOdS/8XvPr/4zsM1wS4Psm5WXRpk21mFlPMDel+zeb6fHp+Jz41SZGA9K7eSijNEET7YCu9ZahKEzvXTPzi1fnYrbcU8K/Qk0yYwozJd6TQud8sX1yeY49XxZK5Wm41Z0xfdcdWfVJ5HtseVCjgnyjDmcZJXhnNMGQk8CwAYu3bN646rrVGxzxN1nw0Lo5Vt1PhoUsYcjtyycvbs6tzSnDNWO+TAjUdpXprZplcqM0mU79NJIv2pX40gzZAnharV+GAiS2k4o3tm/M1hMZyoTlOAsYOJXGn7DkOu7GKLbiQ28ukwkcbqdiwubWT1WMw1RSsg25NSadepi0mmFpr8O+updHicVD5lmGApddwM80I6QHHI41AjcOBglBSDTDOMQp9jJIep2TsXJpHYHpeVtto5awEhY40bGEesK0vVqIUIwUyNXx9VnZAXpeMMjypX8+kwkUyaQNB6QLsj6cBJ7do1XpSaIocxTtNcePWssh4nStuNvsTOKxRQ7Epp6wEgcEJg5xwCaEaUEYwQUtoWyvkCaePqHq2GtpC2EdC8skttMcwVwahd45uTapyresCyUnFOCKBOnZaV5QSNK8MImonDIBCLDT8rNHPAEaSg5mKqsR7IKgqU0abfEIcxrgmGATACwbAFcBaktduZ8gUmGNb6MhAEI6uVdQCYIJ9jbZ02lmIklUMAlTYI0LGZ2rntNNcASiNHAo/oVAPASt2/c7GxErF//tsAAMY6n5GAEUzRqFCjwu6ZoQRokhlOEdLIJyiTmgo0V/OuDXOC8eOrfWmtR0jDZ/uaQcDI+YF5fmOSSb2/FlxdH3zt5Pk/+PYpTkngcxeJfZT+i3/zpUboXVnvG+suExwE/Jaldvtdou6xQtsHlpvdpPz65d4gV2e2kxM3uEygreMES+sIwtq6aaow7fpOSjlf86dXEILKuLyUzdA/n5Vx9Br5787nPEFo94EyjfK7WTkbehihnbpVZe3OXeOiWm7GcNOlFACmXvt7F1r2zfTEq6O00GZ1mC43o+n16Y1r/TH8QEzFAwBAENLOIYDuOHvo4NLvnL7yyIMn1ro3bq92JQNfOb/28dv33jIXPXpg33986tz/+fnv/M8/+76gQQ/Wmyev9L54cO7UxuB0Jv/W737ryELzF99+HF5zHt7AYycv/LO/+zNPP/bc1y+tjz0s6JtTardGqXNuqVWDH0gW+pnb91/ojQ60Y/pmrZjvnr766GuVwQ+uzE65DFuT7MjMjfDJY/hnHjh2dKH9O188+YEHXuUbP3lt+68+cOz2hdbGxx+MMfvyE2f/9r/7zn/3qSeXAvOPfuYdP7YV+nPBj2g+cGtr9loymiiJkbu1NafrdrYeGW3qPr9npdOoBRf/TChDO7h1vvWply7/V/ceaQTepd74vr3zAHBta7Qy17xwrfcW9QfQzQD9vfce/s6Ll3/lZ9/1yffeNZbZWp4DwN8Zz7zt+N7u0syF7ugd++cB4M69C2/RFILXSQh+++lzd59YOXnu+qP3HdXO7WnUJtkP6/j06VPXv3mp3/JZwMiRmejiJGcYnxtmdUo3kiL26DCXz29mlXTro2JvM1hpet88d60dtJ5dGxJCCHKBRweT/J798biyo9xt9Ho+IRijXJo45KNc1j3mCcqFtQ62B2U9ZIFPT6+PMSBjneBEUCIomWSyFfKtpFJS37ZUdxjOb2f1gNZFfL6XaudGiZpkBgAoxQ5cw6eY4EmuPUH6iTTOlVozhvNCNyJGHZoU2mOoPyo9jxLkstLUPeoJ4nGeS0MJinwmtZFWM4onheaUeBwX0iaZksbVAuqMjQLGMWDntAPKaJNR41xvWGrrIo+Oc10p0256/WEZC5orI7U12mGKMUIIwFrHOMHITQrlCTrlYbdCHiCUctIfawDlMQgiXkpXKjPfDia5UtphjHyKRtJu9AuCcejT2YhZB7NNLy11LWC9pKpKoAEBDKUySaqikDGKBrn0OFnq+B+aWxhl8nNnNox2/bGkBN+90hiWqhHxk9fHyzEe5KZf5dKGn3nu+t5O7ZKZfb4vDyzPJJX69W+8vKce3LbUnAnEh47GStuNtHypl3R8dnmQJ0o3BNtT8wNGliLvWlLc3olf3Bw/szYclzpX2uf09qWGs/aPzmxdG+S50h4NB4lyzmXKBBSd35a9yWRf0//a2c33H256lH57Pa8JklZaWkOgCmtR5FNCMMM2jgRFkJfa4/j4Srw5LKy12+MSAS4rHTSEEPTiZoYonwwnC8vzwiMApJIWKUUZKaQJfTIYS0oxQshZKCpVD0UiDWOUAFrs+N2J7NRYIxAIQXdcamUrqZ2FrXG10PQYx3mlmz7ZGBvGST83nYi066I7LPOABhxd71altEeWxSRTWyMpOLHOWQvOOuQgVWp1u+xPqjpXhUaLLe/5YeV5vhknzYBYwARcpQ0AUdbFEbcIMmVDTghDStuAYwew0SusA6lt5JGkMsYYhrHgZJgqABgmMvLpJJWtkGEEtYBwTnqjcpwrgl1a2kqZzW7qxzE4MNYhZ9o10RuZdk30K+IxLC045xijnBHBUT1g1welBVQTBJxjhFRSOUdaEVfGDiYyDllvIh24hU7Q8lhe6RojCAPWzvNJyEkpTVm5TixaAUsKmWl3+dJ6rREfXGhdXR9vDMcPHm2MIM8LmOXiTE9jjGrdIm2G0pmyNJwT47TVjjBMMXgMa6krZWs+MwaKyhCMnAOjbIJNxBByYBz4nBSViUM6Ts1LWxOlLQaNAOfaqtL0k9KBuzYp+0XvcNvzOJPgjs8E66maFBJhslTn41KNSkkMnYkEOEgqBRYiQQmgraKMfVb3+SCTz26Mmx4TFDOCEYJuLmcDcf3q4GJcfu+VtY+8755bbtn7S28/eubK1meeP/+F6/1ffejYXQcWDix2lLZ/dO7C2sbksVOXO+2IIGTAeQAzkfjwLfO/+9Lac+ujnXygMMYnhGNUGmuciTnTN9mw41J2bjrhaOMExaOsbIQeAHjiTULDaVz+xprQsKjq1u7Y5tyI+29aElXaTNW6uxF63FhH8Zs0HM4NJok131lfvxu3j+/i21zcGvYn+U7mII2kb4hfd7IK7dzF67097bgTBwDo0s2xQlOa0In5NqcEANYn+Ym55t4ZH8Bd2Oy+78jedx5bOT/pz0bBB25d+cCtK5VRo1yfvLT+D//9H73/tp+EN9TX1nvjzWH6uWfODYvqK5P0A5G4MBlM33rVoUgWNe4/d+XKjnvPDyAL/fqHHvjOxbU9jddkC1Oy0JOnrsCumWIvbgwA4Lb51sujHrdUUDpbu0Gy+tILFx45unxtfYQQeuimpemLGwOE4PaF1tooOTbfajb4x+79CMHo9548+8UnTt9/eMn9aHrd/HnjRzQfqIwurZoLwohSAKAE3zHT+t3vvPjg0eUjc81Mm29d2vjrD72+ifbWYTbyEcBUQpBJNZUQnLveu2Xf7JXVt0pSvIN33HmwHQfvvOsgQkgQpq3ZH7Xu3ms7jJ04sPCb33t5qq7+U04hQN+fNfQ6CYHvsY8+eOwv/Q+//fd/7t0AMN8I//CFiz+keOB9h+f6mUQITszVT21PNDJbpcq1GSHMOJFD1+YUYZgJ+YMrrfVRcWor2QZ+ajtjhOTSxAFLcoUpO7ORc04OzISxh1LlyAQTgDig7znc/tbFQZbrgGOggACER3rjspCmHXpRxK00L29OhCBWgcWADEjjhpViCGXSDlOJAChBtZAlqaSMUALNmuiPS4tgMK60cXlpBEOM4Epaj5Ncmv5YCk4AIQ7IIccwbE9kxHB3UhrjpEYIXOTTSmqp3bBbCEEEJWkue2PrADnnWjVurOs0ve5YDlMZ+tSCk9IYYwtlfUE5w75PRmNFBZmkFefE9zAQVJTG95mUepIqRok2RhBcSZMUclKoTt3rT6rtiRwSJ5WjGFlwzcizCGFsawFPCz1JVS2gHkPjTGMMxkHDJ0mhpvY141wLiqJQEKw6kQgE7SXlKJeBT5W2WaE9ho11R1rRZlYqY1uxiBntl2pP7A1yeUundnY7vXepkVfqC731LM6/fLbv++H6sGKMBz55+/7Ww0vxpx574RfufXh/+6bVBiOtkJfWXhllxti00rMhn4vEwUaoncUILcRe5NGmx4aFenptOFG91WHunBMedQAc4zsX6s9eG7brghKsK6OV6xq5NipWu71/8uTJudn46D135Mr6hAhfDCcoHRT1SGR5EXl0se1NCosRRggDoE5dIKSigPfHVbPuzcQCHLIWrmiXJ2ktoETTrMSCYqPkSotuJWaUKoRQXph20xsMS+bRcSZnasI4GGe6WYtmQpoWmmImOFlsB8pYCqKylmFIpZkkCivXanBrXSVtq8akst1hkRamrW1aWQcIY7Q9qiplikLVYj8rJCDX6LBG6iUD2HuADUbFOFEzLWUccc5xRtOkyiTKSgVG713gTY9JaxlCvWGJkVtpxBNpKAKM0PawbMX88FKUlkZpMMiUGkaZHE//lJ0jBGtjA4+Ocz0udM2nm33JKfI4zgrTCmkcB9hqsMbjqKz0YtsTXLfqojdWxhjroMkxwZhgLDjTSuWSBh5NMmUtcQgK6Wo+HRdaGccwlsqOMtWKeVKa7VFptN1K1GyddUeV8Ogw1/1UEoIxRtcG5UKTSYc456Ok+PS3zjBPzNWjWWq+dbHY5y9YgFeSbeKMlJoxQpFJcrDOydxijCyA0wYDSgD2tVjskbTUCBDjCCEUMILgxo/PBQ0orowVnNQETTOrtW35fCgJR1ojigUTvqSElJVB2j5xMSGEACCEyDv3x6W2377Sk8ZU2nLtrHHjsgw5rQnqEPQSSTFaiP1M6r0Nr+OxrFIPrLTaAW8GLC11N5OrSTUf8q20AucePDj78++6FQDuOLz4zGavMUj2HV669/AeYx0A3HNsKaLi88+db4aets7DeBr31wT9L+9c/t7qcPrBra2jCFGMtHUEYeNuHAUEIevcuJSzkQ8AlbGCTqlWVeyLhVb8yfuOwps5gcKuktYUxrmnV7f/0q37P/34S9MrDuDssHusOVMa6ROutPU5273V+bXuQjtGCPRr55pN8annzvXSiikaO+/MqAcA4BxG6NNPnfmpY/t3S/sIgHaOvuEJHQBD6PT17v0H90SC37en8/zlzUyqS+v9kTU3aEIADuDpte4/eNddE5sjhOqc3nr3QfwG3eBczW/4/KfvebUqvxvffP7SK9e6//rC2vJC+wGAt+9dmo1DAHi6uzoVIgPAVKT79MX1Bw/vgT+OLDRVJGtrL0wGryMLfeXpc7ubA09c3Xp479z0X2N1mBybveHX9OS5VevcvpnG73zx5OtmkD28dw4ANibZXBxI0NN7T1/b+MsfulcQZuDH+HPAj2g+IAi1FkW7DCvf/cCRf/yZ7wScNQJva7MvtdlOi5nvM+j7T4ndEoId3Ld8Q0IQclZpe2iu/b1zq+1G1N1OTg2336IWwRSLnXqj9qpkKqS8LkQr8DcnWSjYOw8uPH5l62375namEPzJJATwAyUE7751/1MXrk/JSPcvz37l5IVSm/Xe2Kv5DqGc3igWIITgB5KFYkF/6YH9q6Pi5PpoJuKZMSLEw0rVBcMIaWeXQi9i9OIw/86VXlmZSplZQkulMKBGxLNKGYBI0EKZpueNKz0qbV7pRsQAkNaWAXpopfXM+micq3bAQbvQo2mmJLIY3OagYBgZbcOIDyqlDBrnylp7fiOlFGttMQIHYBEGB0AwRSjLVSWN1K4oDSGYEIQcIECcI6tBatescYQQwTgpqrRA9ZCNM2W0GyhNEPiCSm1Dj/YTWQtYKEglDXYwKbWUDiHMOaoqM87kTN3rJ1Jra5wzFkKPlsoQgpx0WSkD4VGEOg2Rl9ogVFYmwSivVFIYShBjlAniczKY2M1ByTlyFhwGDK5TE/1JSTjhAGml2xFr1vi1XqG09RgpSjXf9otK5aWutOOceJyOch0wlBZaG9f2qAJ0rZdFgmlw1hlP0EjwSakYJYGgxrpOwIx1G1lVFLoo9SiRK52g1O5IK3xhY3KwFZzeHA8LxQmZNe0hknct1b91obd25cL7P/RgZR1hLMfkydU+wWihHmBAnGIAONAMCm0ISweFeteBmUzqhmCXxvlcJBKpOz4HAEbw1aRcDPjD+9p7W8FTq8OvXuyW2pztpoBRWmiC0WzIBXGWOOcoxXv0nsV2xDyPbo2qmZa3Pi5yaYyx2pTGOm3dfJMVyiIArex2USy2PcDIGlcLGGO4krrmkSzHSwuN84N+02ejsVto+cZCmlcbIy04iUMaCHK9m0tthUcCn2Ql9JIq9LgyZpjKdkCHucZgJ5kCjLNctmIupWGCZLmKa7QTepWyzYCGPu2NyrI0CCGGoTuqOMWdhqeN3RpUU/5GLaBFVmGEnNOc4mabxyE7sBiev5JduJ4iQM45wahKCuucrmSz4SGwo7LyBQXk5tuez3CmTcARE+JyL1XGdiIvlwYzYIisDyqfE4IRQaC09X3KCRpnqtPwpNLaou6wims8zVWpbCvixtq4Ho0m+ZyyBEEzFmnpJgUiLGdElAgRQihF0hhnDSW4qnTlgTWWUpRXKg5ZWujI580aJgiNUtNuciltpaxH8LhQdZ8GHBeVySorrWYUOUDGuLpPWEDy0uXStT1fbo6H20OM8QDQ9kJzz4L3R4NL2TgnBBd5NRokpTTMILAWADgjlKC6x7R1aaV8Tjo1jpiVw6oRskmurXOFstY5hFDsOZ+iQhuMcFGpShuHnLNuUCiwhgsvIngy5RASEoUMHJiyYIwWAOdH2flRhhASjACygiGpbZ5VgJExMC60wEg7l0szKtUDK82NSXmoFfK6eGpt+O7DM/1cCoodhkklOYYH56Lj++Y69ZBiZJy70ks208IBzIa+cc4h8AgGgE4UMowbkQ8A0phpwZti5FHyngMz07RBGhswUhkrCK4sCIJLbT36ahV4Y5LPRP6U7o8ASqV9RudaUeBxd5NuugOMkL4Zu++UmTBCk0o5BM3Qc9MZYTfdSDFCFqAyJuBs2iuY7nZpfXDXkRu2ofa138UCeEzUK/rZk1f/8MXVhs+PLTbuXu70kzTH6rY795yf9AHgaKMjjYKbkxNu7HyTy2Scowhd644OzbcX6uHhTv3blzf9UPw/3zvz9z788A6fZzstANBM5E0m+Sgrv3nm6icfuX33cVndlPB+8+zVB28OEXtdf+DzT5yRnfgFZS588+UXR8MvH9v33refWOnUWWizwBCM14bp5d6IOveF587/9x9/B3x/stCj77nvrz98/OnVzTuXZt5IFnrizZoDty/cIAgRhF7XHLi6PkLoTdZvJ3mltbw5c+DJc6sWwX1TF1f4Mf4c8COaDwCAdtanYiIzHwQA/MTxff/qa88CwEzkf3WQ3LnYPrU5ePehpdf9l3vrMJ1CkFZqNg5GeTktxv/tR+//td/62ic/ds8fd/efFtMpBB99pO5TsSeEU8Pt5bD+ytbgjj0z+1u1873x2/bNwc0pBH8yCQG8oZyzG7etzJ28vP5ROAYAhzr1//vSxp1Hl586u/qeB49dGCdI/afVC5YbfiNgnzpz3TloemyizLBUkUfrnK40gmEh71ysI6hf7Kffutz3Cb4y6n3w2MHTW+lyI7zcSwrtjIXeuEAY1XwaBWySSm3sXN3/yivdSpso5FmhA58In3ZHVSsUoccYRi1GNsaFx3FeaoqxNdZahxEmGCGEfEYcgLTWJyTJpHaQaet7RCpHCcIIwLnAo1LbTl1sD0qPWYS4YDirdFZoQnA95JUyhTKNGisqgzFOcxkFzFlLCR4mJaekHvFJoa22nCHnoKo0AGKM9iYVIxAF3GO4MpAUCgEYhBmh2rhCm3FfRyHzxQ396yRXhGBKXT3iSllKSFEq36PW2YVWsDksmzU2TpQFiALmAMZZNVMX9ZA7aymCuZa3NakcRsOkohhCnwWACmkinyBOJrmsBbw7KVfHBSc4DjlCqClYZexdc7Wvnt22yCkD9YDMNv1MmjP9FANGGAJGstJsTyqEIC2lte5SLw0F/fhtSxzDdy+urRyYf+Ja96/et+efddfK3mj51sU69X/p7Uf/zZefbcUPbZYaOTcTio7Pjb1xflOAzUnRCcVmXiIEsc8mlU6VHpdqM5Pv3d8Z5NXpzUkgSGJNS9DE2I7PNqS2GN2+Jzq7lY+S0uNcUJhriI1ROcg1FLoWsCyrtLZzDW+QynrEtvslJXicqqywWWmSQu2dD5QBrQ2e+uhXLqCgtJtreqOBqKQeVaaQpuOTOBBjY6TUjRrX2oqIzbe8a1s558QXtJTOWaiURghvDUpMfKkMoyYULJE6yVQkCGeEUDzXCigGD4PSOOKUUhxz0h9V3X6x2PSVcUVmCEGNgGW5ksouzAS5tIttrywUcBsxuH2pJrU2BEZz/DiinUhkpWwHB7518pWWqA4eCABsaVx3WLWbmIILBGEIK+sq7RIlnYF6TUwqSQkqcptWaqbGR7myDmoBdQ5jDP1xKTilGDKD8kIBAFhXC5jSVhpTaYcI0oVKUrU8HxKCQkEwwZk2SWaQcxYco5QgDA4owVmlato55/LKLDS9QSqbEUfGOoQdgkZErnblXF30JpJjaIbMYySRcjDWnk+xswicR0gm9eagxBi3YobA4cjTNfa243fHtYgHXhz5q6p3XHRsJZMkHw/Gzz79MgInwIqAS6W1ccZYxYkzzudkUujtCXDBPY7zyhIMLd8bpBVDkFXa+BQQqgtWaDtXF5NCA0UYOaNhkltpHYD1CUYOAk6XQuEz8mR/RAkBAGehKDXGwCPhYXqoxY/NN9aH5kK/6GZKGbvY9NuBWEuKtNQnr48wwb1cMoQDTq4Ni0ybzaR0gNoBHWslBMsrGUWeti5XOinKI/PtlwdpJxTGuoDdCNtmGqE0hhGSaUMRFhgPS9n0OMVoUqq6xwCgMm6qGdDWATiCkL4ZeytjpbX9vJyt+TuqgElR7W3UvltK69y0h7BTfZ8G2cbdaDFMj5XpskLqb7x87Z0n9k/XT7eafhVScUJ29pm2ArqjtNMI0c1TaefF9PWZ7cHf+6k77l7sHJiJL2yPr/TTk9f6v/n4K6MzgxMfbd/S6ADA2VFPWx1zgW+ebjv2OzsZy2NnrnzybbcDwMN75/7rzz7uRfxdtyzvJvef3hq6HTl9AAAgAElEQVTet6eDAQHAv33ipfHGuLVLwrsbf/DMy3//I2/fecLdOHl+/W9+4N4X8vLdP73PWNpNy8fOXl9PzldENnCQlqoyFjl3bZB98Ojs9N7vRxa6OEgKbS6B+shrHUulURyzrzx9bvdMsWfWutNk4OVR7/p2dmL+xjM/eW51MMmdcd996crf+PgjO+t3mgNXh5PFRiRBT69/6YULj95xQBC2O/H7Mf4s8aObD0ynkt3amp2W6hdbscfpK9d7R5Y6s3FwYL51Znv4rkOvT53fOuxICGJPjIvKEjzKSgAYTPLtfgJvTX9gJ0DfmUKwA59TAMgqdet869MvXf6Fe48AwKG59lskIXj/nYf+p//42K9+7CcA4G375v7pN55/z637nr+w/pMPHRtXlbO78oEfLkUTBB+bjUtt1saFh3G/kATj5YiOSrmvEV6dFA5c5PH3HZl94mI/lfHVYdEOuNR2pRM9feYiVnDXbfuvj8pBKpU1eW4bMd8aF4v1QGo9KNRsy5PGeIwmuXQGklJhArHgSa4xQgYMRigUJBC4lLYR8EGmPEGUsRhQUkpKADlgFGvtaiH1PVZJnRWaUVL3aF5o55zFLMCoN5FRQKWRRqGyzDDGlGOCEbJAGQDCYIF5pMxVq+YxikepxAhmGyKTxhkwxiKEKqnbDdEbVg50RZHHEcEwnSuMBS6lbAjelWWlbJoXDiDyuXUWOYgCWkmDMQgKALRUek87GCeqkma9axBCjEMt8DACa2x/LH1CrUAAYABFHiXIUgKeIONU1XwCgmCENHJJaZohRB7THDPASa6Ns2WpZ0JeSoMpqkrredQBkoX1GMaARnllwUrrOMfK2JpgH791SSpzvp/99LF5AxBzmuZtREiNEwfwFx449tLVzU9Ex6+kozsPzbW+I/wkvX15JVEm1+Z6Um5m1bVJjgE8j25mshnwl/vZiZkIrJPGXhnmzrlY0NijiZZByP/glc0GpUdn46+d2/YAae0qZ7PSDMeVtuB30IBqOoH3HWp95oVrzXqcFjpxrhFwwKgWslEiPUEcAKGkUWOTIqUY9ycVI9gTKKk0IBRyzCjmHEajcm4mUlLWfZKM0dmN3igrnXO+b5NcGQuBTzcHJac4CuhgIuOIjzOFnNNGc8q2eoXvs0y5flI4hw3ApFCNGhpnBhA0AwHYDkuVG0wJwoA2xmVW6aUgHJQ6zRRlpCr1nk7gpHYWuqnOS2OVIZquT+TJtd6LyipjT+Rq0xejXLfrop97yjiD+Kgg0uDuKOWUc4wdctYhwlAh7UY3b9ZFuy7SQm8XCgMyxnJGIp9OSl0LaK4No1BUbpRITk0toJTgOOTaWnCQFaoZ81JagiHJTJlmCx3fY3iQyKjtp4UyYOIwnFSkzlw/VcpaYwFjPMlkvWYwhrm66E+k4GR9UApCooAGDGtrGcG9RFkAT9BBoTlSWaGlsTqXjKDKOIoMAGIUYwxKmUZIA16nnB48srg010krk8s0SBkLUK3Vac+5yy9rSgkjmAmSlhoAEHLaOE4xYWhQyFZIm6G4PpZLsb82LBglg6xCCBkAj1NAyGckySWnhBJYiMRI6STX2liPkMOt4OhMFBDyz7879hkdV7pfSKs1YxTA3TUbXc/k5qSspJlUcK5bnB+pouCcIE6wcejqqLjYzxsBjT2qrBvkkiC0POPPBGIrKSvrFiLBMAkZ5hRX1maFrIXeVl4FFPfSci4ODUBNCE5usGuMdYv10FqXa0sJmg49bHq80hYQ3EwGrCBk2mSorKJoyrbXmYaNPBkVKuT02c3NY3M3fH60sZ9/5pVHDi5/4t13YUBylyb4TTE9yNbHWa70pc3B2w4tvU5tDACV0vy1+lrj3IsXN37+0Xt2NsE3Jww4AIqQR8kjB+bna4Fx7vBsff9M/D60dKTl//Lm6pGVmenmxxqdU4PNmHn0ZssC7eoMOID1QQIAU//TQumskuOr/ZevbD9yfN/Ok1wbpXsb0ZQzc3Wtf//xlTc95L78woWfvveGJPd1P92Xn3rlnhMrI5/9zXsOjbP8I7cfqgk2pfocrLW6k2JjnK2NkqKofu0z3/rIfbcAwGe/fWowyX/3q8/97Pvu2tnnSy9duuPI8mit97nB+MMtL9N6NR3tJgs9efoK2tUcAIBvXN74xftucIEEJfNxOH392JnLh+eb/+83Tv3iT97XvunZ+oOaA87d/2dYgf0x3ogfazZexQfuPPzStS0EcKBT9yh58srWn+Xf5Y6EYCbyL/fG33h5VWr7+4+fGafli6+8JYOBd+P+Y8tfP3lh9xWM0GI96qbFlNa5nRYAcP+hxa+fuvzmW/yp8eidB7/4/Pnp6588vjfy2OeeOGOtq4xbrO9ygP7hfiuc4JCS5djvhDwpVaGNAbsYeTXOrk3yGY9hgKWaiBi9b3/rvjlvkFfdtFps+h2ftdozCyuL66Mi9Ol8259kJvYpsahS7vIguz6qJrmWlWmGTFAsKM2k8TjGFnkYNSLx4IH2bE0QhBACbSwg1E0r4+ykUMY6aWzNJ9ih2KMUo0bAssJUlZZ6ylligUcrbTHCzljOybSWFQgacEQobsZcUKy0jUKGADyG44jllW1EwjgnKI58Gni0UKYmqLW2EQmMUSf2wEIcsk5DEEIwoc2a34wFYEcJ+ILl2lJGfYbqIWsEjBAX+8z3SVbq0KP1kCWFKaSxxm30i7RS1jpOESbWaSelzStdSBv4ZKIUxcgaBw6Mg6RUaWU2+6XPCcIYIzTNLtp1sTEuKcM6S0pj44g7h7RxjYA/dX2IMAp8SjAAQoNCro/LXloFnFiLmiFvx5wS8gt3r9wxF0+keeeBTixYU7Cx1IuNaJwXdyy0n98c3LF3/ovPnZ+GEQihn3rg6LefuxAJthB5BxvhXCQONsOOYA1OOSPDUvULeX6QvLidrKXF85vjgJFY0K2senZjnFfu9pnaf/PgoXuWG+d7iTa2UqaQxlj37NrEWisYvjUO9ktxfIa++/ACBuUx7DPMCRYI5YVS2jpACCOprSzUZj/nhDQjWvPZICmLyo4LAw4IQnllkHOIEhH4eVZSZLQytmDztQgQslrHIScYbfZyrU0zZkVpikIlmUTOMYI4oVIbwXFe6LQwk0wlmVzuBIGga718mMiQEwx2c1wFBBtjpbaVsbWQco6Vcz7DUtm00ITizWHJAtYdV5GgslLL82GzSc9q+4fPXuu/uN57fu2Zq4NvvHT+uYvXv/3S6mZve5SUpy+ng0z3J6Xvk4V2GPtka1COJqXSpih1d1CsbWeEoNm62NsJGgFljFiApNTzdc9ZlBS6m5j+uMII1WNRVCbgmGFU8ygALLQ8Z5GxkGay3QqstaVy2ljOaFIohBBCKM2VMW57KAkyBGGEkeCUUduqiUrarVFlHeSlpggQdpU0vYnsJzKXWhkbcJxLU/cIo5gi1AxZIAglmCDACAhBjJF6yHLlMMaTPOOMUe6X0szUWehRY12lIBJMW2cQRhg5gLyUhOF2nWvrAEGhTVIpCuiRve3b5sOPHp0TgJeaXt0je5t+SLHWppTaWddP5UorIBj2xkGhLUWIEUQwZgSuDrKn14eVte86MLM6mmiw7YB5DAWCAQAXZE/Dv3eleaAVyFIiMEqbiFMAZJxjBEU+r/nMIthMq3GpCMaM4l4qQ0ofXm596NDshw/Nv+9A5+3LrYeWWgHG1rpWPRAEFcZacAvNiBESe8wBTO1BHYB14AvmU8xuct4rY5V1BCFt3XTZTTchQOCkVZVVHuECM2VciwUxF5llX7py7fSw++2N9W9fvfb4K6uPvXi5s9yuzGum/76pkGB6cX2SL8bhenc0/waHUADIpPZu5gPmpsK4O0p3m42iXXyhV7qjhVowf5P6shPfW2M8Tlu7GLYA0BQ+7Dqadj/kUxevv+v4fgRQavPs6vavve/e+v1HTl/Z2rnXATy91jtxMxcKPfae+4686dChl65tH118fcfgxluXNt5218F+WpyYax6fb9UEA4Ap1YcRvNgM79k3+4HbVj7x0PGaxz589y0A8Juf/9651e6v/7vHPvgr/9f//u+/8eSpK198+pXf+Ooznz2/vnRw/gGAE7Nzq+kIACqjKqOkVQDwjecuPnhTFgwAT1zdeuf+BW3dy6PemWvD/Z1XJzn83hOn81zu6dTvPbq8e/3u5sDO9Z3mAPwYf374cT7wKhYa0bXeGAAagTdM8lLpaRD8VmBnGPBuTCUEDmA7yV/cTGTY+r2vv3htc/j4s5dPDbffdJ8/Gd5Ivlns1AFgOrx9CopxMxCjvEwrdd/y7KnNAQDsSAjesMEPi90fuK/D3Gz0vfOr09d3L3U+c3XrlWvb/+GbL1rjwLzJ9Mc/FrGgFKP9jXBvK4g4G5fqelJ+83Lvc6c2vnqxe3mYWeuksf20OjPUhXKZ1i+tj852E2uBEtxp+kY5Z9xs00ulGRcVAscoNs62azyKWCndKK0CQX2KPUYCnxTa7G35q+P81vk657hU4AAjdIOW6sARgikCRrBzttJWKhNQ0ojYOJdl5aSxSaosQp6gjOFGKNJCd+q8ki7JFSK4Us4Y14xY6JG0VGlh6hHd6BetGisqCxa2hqU1TkozEwplbBgwCxCHfJBWvYkEgKIyxrmi0lLp7rBMMm0tGOM4RbMN4TNsnTPGWgMIQZIppew4U5RgQBB5xFhkHRjrHIABZzREodgel0mhGUVau6K0w1QVxvbTcjAuMULWuqVOIDgppLHOlcqmuQ49EvjUOYuDWrPGjDGhRyOfvrA2HiUqL1SSS6n0Yugt1IXHMIDrp9JnGBEIMTnSjg61o/WkJABm17k5XwvqHq8JVmnzhRcuFNowQo7U25eT8d1HF41zT56+Ol05KdRzq8OsMO89NIsAYk6aHru1Ey/XvMevDSttTncn5/qZR/HBZnCwGUacriWFBvjZO1cagioMjsBMJOZi79CCzwjBCr37wMzBdvPkap/QWBo3F3sU47cdaH/gljln3NQgniMkfEYJBoBcunGuPU7HWTlO5Ua/WO8XVruisjMRt8ZywS9eTylBceRtTBJGaa+fpaVmFEntPIopwZFP6jWR58oByOkvxqHeqAJnjXEEY4TAWNtPVCWtJ+jGoJQOwoA6IJRibdw4lZHHA5/mlY48qrXB4EaTsqj0cFIJj/YTqTQYB+OR2Y/c7SszBzrtR+8++M6jc7/w6K2LrZgicr6bllU10w7qIQWAmu+llVLWzdTFQtOvjNPG1mMO1qW5nJR6fVClpSEYzcbMZ2hSqKvdBKTFxrRifnSl1oxIyBHCzjrDCI4DigkmBLJc1kPm+0xWMvYhKzU4xzD2OTYWtHE8quf5eJwZqY02RjAmsJvkymEIPcIoEgwHHhGUIIBWxHxBY4/N1vlSW8zEfCZmZWXaEa+koQQWmh5n1DjwOCkrPSmNsa5UZnuYOefi0OeUTDLNMMEYeR71BEIIqMcBABAwggnAKNM+J4ziojBSW2kdw2i55i/E/h0L8SCRZWmVheWmzwmei7gyTlu7Ni41wKVBcbATtgO2EIqpw1ON40muP31q/Xefv3x0bkYQqgE3OWmFHsZkdSJ7uezl0gIsz0RLzVoz9MZ5mRf6zvn63Qv12+fid+1rz/seRcgYkNpSjD9569KjB2eOtGuLsU8poRj7jFrnuuO8Hop25DU8PusLZ22DU2MtADCMMEK5MghgY5jGvlDOOed8SgTBBKGQE4SAYpRrs5MYaOukdRyzkPIbQ8ow2izVFsb/4vnL/8sTl/7u187+1oXe/3FmvfX24+f6k9/Y6DJCyK6JATt43UUEsJXmCzV/a5SutOtvLDOXStcDgW52AIx1GKA7yvYttHZvNS3zA8D57vjuPR0AmL61E9//228856evHqGVkRTf4FlMv2lldWVUadT0Y//S9mCxXRtk5emN3r0rc+84vAQAF1e7O7d004IRNK27fevC2skXrhxb6ux++B3xwGNnLt9/8M05C1986pWax48vtB47d3X2tbnKFNNNvvLChQ/fcwQAnjx9df9C63f+0c994X/7y7/xK3/h0FLnX37+ex/71X+deY3M2P/2+P79M80Dzfhoo6OsEYRNH4Bj+rnHT79/lzL4xY3B7Yvtfln+zqXrW8wtxTdC/C+9cOHAbPP0+Y2Hbn01edhpDmyl+USpHzcH/v+GH+cDr+L48ux3z60CwHKztjHOphKCP+6m/5zY0wifWu1991o3k/bj9x74Jx+/b/Fg+5f/i0eeObPaL14z0fBPCQI7EeqrmEoIAMCn4mCtfmq4vVCPrg4mkWBTbcONZbfuf+rCW9Kv+NCJW753/vr0db87/tLzlyqpf/NLz2Bww+L1udMPg1iwjbQalWomFAFFxrkvnN28NMoIwQHHg1z9h1PXH7/UO7U50Q4TAvftaToLpbSCsSura6P+uBnxJFejRM7FPGSUEXKgEYADKQ3GgDFihBZKG2eXYt8Ypxxc6qXK2Rc2xhiQNEYayymqeWQ+9loh18rEIUsKPV8PAIG2sJGUk0LHPp2PfWNMqWRVVpU0oU8rY3Ol++Mqk0pQYqxtRKxZ48SRPLcUY4ygO5Kckv5YxQEdZ1IZZxF2DlKlx7nECLJcSW2bEV9qee1YIADswOe0UkYqAwiV0ipj8spsdPOk1JRgaVzs02Eim5FYnAkqbbvjEjlHMBYMIesoxpSgUNBWzIaTkmHHCZbKVtpGPsUYAkFqnNUjUQ+YL6h1lmJUSTspVJJVoU+QQ5HHpLKt2NseyXGmSqkHqaQUIeQQQCsWtYAXTlfGeJz4nDrrtoalKe12qo7OhKe3x1+/2MUIVZW5Ms6VdeNSXRrmhcEvrG3ftTDzmfPra71JPy0A4Gijs5pNPvDg0cdeuro1zr92bvtSL7t7qfGJO/cc7USH2lHL5xcGeSzocxvjaTH1rvn6Bw/P7an5qTRn+8nJrdFqUkacEIo+cscSAHiMIIDeuHr2+nYh1ag0J+br7TA8tZlacBScIKQRkNMbkxd7E2ts5FHknLTOWlcLGALwOMkKNUw1oST0MSHIOtgcFFvDwmEXUCwEKwvpAHXq+O0HF8lCewyuLC2hZNp+6Y2qca6nek3fIxihOGTWgtG2EbIk12VlSmmu9/4/9t40SLLsOg87d39b7ll77/sy3bNhVmCAAWaAwUIsBLiTctCWFZStECWSwZBMibYUDpkSHQ7SlkyHFSYtiRJJcRMB0AAGBDAzAKZnxfRsvW/VXdW15Z5vv6t/ZHdNT3cDkEiQgQjOF/kj6+XN+15WVb57v3O+c74i8mnAWV6odk0QhDiCRgUzTDyKjbHa6krAjLLUOU9Qbay2DgFKctMM6dbpgDHcGcmZJmMYYYPv2NVmCDMCaY62tSuPHNny0O5aNfK3N7lzrlVhvnCM4LV+OUyVsi6XNs116DMvYN1hOc4Up5hzUkpzfjk+t5yu9nIgUK2wmYZgFPdilRR2pS+7fTnKTC+RvXGZZHq9nxNKtAFpsCzVOHelcqUy3Vhe7ZXWWUpQqRxgJI3BGIMjCKHuIG9EbKrCOMUUo4Bha8FYVw8oIrDQ4EFAEaBBrDdilRRWauhnsh4ybWG5XyDnBCdSW0JxwLFzKCuN1bLdqDjkAAEluNQOATgDHEjISSCoc85oNy4RQcgaMNYa46YqvBlwgfHx1fHVUbkc55TiVoVr5zpp6QeYYFQRjFNsjMuliSgBcL2kTLXpF7ouGAAaF8paaIYiKWQj8AFglMu8VL7glOKI4AfmG5/eP/eJfTN3zdaaAi/UvP2z1VpFHF8dn+mma+P8Uj+7d6H2mcPzd87Xpivi0wfn9rUiB6CNKZW1xiIAqS3DWBYy9PikZJxgZK0b5OXedtUBKOsoRggj42BllCw0qxgQRohgpKwjGDkAjFChrSCYYjTJD3gUEwQTerB5UJfynqr/P7770LM/+f6fu3dfpZsvHV/ZeHmVp8XHKP/OSiG4IRg/KmRkjMfZZseLk4POocbU5HmpDSdEXZceEYwurw2m6uGtE052pStxNlEKwQ1kAAEcX1w7uHPmtu+iCOVahtQLKPcIK43SVn3z9JWtrcrF/vDATF1Q0o78duhlpbQAkwqms93R0dnmZDlmBMdpMdWIbi0euFF3dBNWuqNvnV764yvrj+6aq/piS/3b2hI/f275vQd3IICnj5//gXcf+vHH755v1+bbtU89csdPf+x+Pe3feWj2Vx6/pxdnd8xcKwk40pyByVbBwZMvnnnP0Z2/+5XjK93RSnf0J29eev5qN7fmS8sruxj+5NbZSSahNOpLx8/uaFTevLD6/rv3bJ79yxeuHt3SfqUz+Pzy2l0LU5vH30kOfJ/gr2/9AFwvIdhdrU1+PLx1erk3nvTP2Tfb3G7dscW1v8qS4kOzzf/+qdefPr323z12+Mxa710HWx94aMeeam3qRGSy7/bm/0JsfiJ3/fZ3ZPfsK2evfuqRO94ag2B7s7o0iP9qSgi2tmuDpPjNrxz/7DNvfP3VC1vffeCBn3j0qadf/2Knty//z/UfuBGFNgig0HZ5VDgE1rnZpt8WbLGXIoQ4JUVpDk5XNpaGBpC16KWlgS9oO2Drw2xudsojrt8fUT9Mi2K5bylGB2crFzrpVCgKcGCRz3CSylKaasDPbcTOAaUkLrSxkJR6vuFlUjFBrEWcII+S/VPRC4t9glEgyEZaam0xQko7ZE1sYZQqghCjtBMrRskoVYSguZbfG5ceI6W2DBATaJCqCiejTFrnjIWZphenUjC2MSwBoWrAjLWldnG/aFXFMJGNKqcEG23HmQodPLK1Bch94dS65xFOiWA4Kaw2IDjOpSmkiws53RCRTy1AZ1gSAhi5rDCtqhdnMvRoWKfDVLnSSWWtBUZQoUA71aqIVJr+uMQIEQxJpq21gaDSWqVlIITUxmrrB7RUNtPGOFcog1Olk97DB3etJOXqsAh86gu/5lGr7eqoGGWKYbSnFb1+daytNc4l0oQEP32+6wuijItLc3IjnvQ5BQBnIZV6kNr1bPjR/ds2xtnra4PDs626zzqJIr734kCPvnnxsT1Td87XOUUAMC7U7orfxTLg6lQv8RkWlLR9pq1dHKcYACPUDjjFCCO0NCquxrLQOvSYR0mSqdmKcOPozm2VQayMhT1TlV/7+vl23T8yHX3z3JXdW2cyaXfUgxP5IJOmFrIwIMjZcaIBHBhbjQRybhSjSoAssOFIEoYwQicWx9o5z2MekZiw3ti0KkGlGvY3+ndum3fGegJLaZo14QBGsfI9qo1rRDzO1VRdjDNMCOYUBmlJAEtjSmXbFW6RG6bS41hq10Zo6MzGsCQYrfULgtDClE8JqFI1qr6bNL/PFSY4G5XtplcLGCG45nsHdzQjwaWy45EelNnehZAxiikjCGVlXhpej6jShhCsrNIKVk0xUcF1R6XvsSAk41SFIRqP5EQ8Vq/QrDSNyCOY9jKV5dpYx63jDANCBGCUKo/j1W4Whrzmk7VBUa8IVapmQJPSMooin64PS49w4IRzhIEUDCPsAKFaJaQU95Iy5Ew57QuCAYUUF6UrtUukzUpblJpiBBhPVeg40b4gcWkLZZJEBR4ljAQMDzNlLfSkMdZVQpZkZate5RQjgG01v5u6y0McCrI6zre1vJUVSgmpBNRSXA25TYpCoUpAO6mkGEcebvr0haWxBTg8XaGAGgHrZ2q1J5U1mTWUIM5xxaOZMuDAIdQdS+cgV0Yq/cCWGsOcOPVHeV7zRG5UTdCLaYEA1SPv8W3V5Vy/uDQABPXA3TFbOTscCowXqgJZGEld81is1KvrY23d1qrfEtRYV2iLMRKUCABlnTQmZBQAhkkeBQIj0NYShEptNpK8IhhFYBxIbaWxDtwozqq+8AgyDox1bEIGALR1kxTBJPDkAEpjEUKArrmJAQDHNC3Vwan6Z/Zvsc59aNfsE7tm/9+G9zffeGMwlI3rStHNEP53oAfnuuOHt8189tib1eBtvftKIwXhvSTfO9OYaH6Mcxzji6v9qdspixCAA3hlufOzjxyxDtjbpTsU40fue2uPexM0OP/6FU42uK9dXj/bj39y9xaP0tIo59zBdvUVqUotMULOwZVxvKMRIYCLg4Ey5omHDhB0m0DtRHc0eX7TnuQbbyx6vrjYjw9PN9bGt9lVT5IDz51dAoCH9m0FgD89dvJ/+KnHbhwjPPqBo3u7gBZqocDopiRDaZTA7PmTl+/Zt+Xy2uCHfvnf+RW/t9B8+O7dn1/a+MjWJqJ8PrpGw46duXJhbSC7ydFdc0+9cv799+wBgJevdp+6sHKWwMHAe3S+tZTGuytVADh2dslY+05y4PsBf635wAQ3dv9sRv7XTy7+2HuObm9Wz6z1zna/iw3h9xZzob+PoPqO5mfXuxzgpxtzH99f/PqfPjfVik5f2PjAnt3fbYI/D9D1LMET9x/4p7/15RvvERTjZuj1knxHuwYAG0k+Hfl/QReC74w7p1q/8J9erkXe1vsODzOzuj8i7973A+3wwuX/sj9EpsxTl7pLozxR2oJbqPtxrgNKCULdXHqMvr4+Jg5Cjz632JuKvNLY0tlESl9QX5BdzcogGfvVWr7aTUxJMSEYObD9RObKGOfqFT5My0bEtXEIgbW2NNZaiCgWnChtmpEolPM8prVx1saZ45S+uT6ernvduKz4zDhtjAGMnba1kA1ijcABxqNMIYwiRpRWvqDOOI+RtLDWgXNumCrBibOgrXMA0zWxMcgbVZEVmhHcrnqc4zRVjYgphbSxghGCcT8uPU4Yw+NMfe7EirXgEAgg2pi01MY4nxNACAAKZSygOFFamVJaSpHHSV4aY11vlEc+y6UhCCWZZAxziuNMIweEgM8ZxbjOkcdIVphGxJNCC446/QJjpJRTUhKKGzUeeHScKefg7vn6hX4qjV1YmD/VS0Of1CuMIrIxKMKmX2q3sxX1Cp1AQZ4AACAASURBVMUcnF1PHtzW+OblHie0FrCHtjSWhvnORjAViYBTaW1F0JCQbiHTUiOHukl+bmP9ckx3tOeeujh66uIIAMA5jNzeLe1LK91vMrI4uiYFDBkJOK37tM74oS0VZd3lUbY4yq2xBCOKsTauX5Y+JbvqwUwkOlkppU1zJbUNBXEEz9SDK+Pcx+yVjYFHabvl+5ws57IW1CKCNUeT1isWYBhLIXBjyve4HeVmlKooYJ5HrEOEGK0ZxkAxktI0K8zn6LTgi1fjXbvaguHe2BbK9sdxf1zunqtGPlvcSLLcIAztuhiMyzTXWa4qAYtz3aqJtDBRQJvOHyVF6LFS6o3SGGOFR9JCexSPCzMcK4/j1U6el3qm7Se5oZRQRpyzguFBXM7WhTWuPy5LizBCzQr3OW3XfKttnCtLI1uML6/B1llcC4RxrhPr2bqXSaAMZGnK0rZqPCkNIxgjrJWp1sU4NxrAWIcIRCEDAAtIcDrOVAE6CmmBEWdEG1vz6fqocA6yTJY5NGq+L0ggyGzDW5GFF/C0tNJYA7iMFcaIMmMKi8BlBjA1BJAG7TAbxJnSLgejretkJSeIYKyMc4A9hihG2jmlXLOC+7EslasGlBDSSXSjxj1KU6ULZTgjgiJrIFeGYWeM8QQ1xgGCpVHRjrhxxljkC5xIs6Pla6WdczXPSW12taoXe3G7wi53NEZ2lLseyxOFlbLfWOwrYzGCms+XxzlH2GknEXCCsYWaz/q5ttZSgsaFrnnkTSDPdAePLTReW+5Qhqdr+n275l5e6UlVVAK6fX/rSytrO6vVc/Eot3omCxkptrTozplmK/R6Sbk0Lt7sJNuq3lxFrCUlACTKfHWxO1bq8R1vxWsFIaUxgpBBnEWeAACf0lEhrXPL/WRbvWIcAADBCDvACDpptm2qBoC0fauF6EQONNkbT+Iyk4SAs9cqbieQVg/LcjYKEYC7viW8f/fc5NVgorwCIOj2VcWbyQHj3IXe6CeP7gIA+/aGlRgh5Vypdc0TcL0SAACWO8Oj10+0iUmY3zi3PE631KObyMCJpQ1fsLt2zW8eOTfq39GcnVy4cY6/fSt/cmmjEohd9YpHKQBcikcO4LH9s8+cm3qz15uo/F/b2Nh1x/Y3++vHlzfOX179iffddWPxwKZY6PRK9+4ds3A7fP7507PvPfxLjxyZ2Anfdgzc0Kv0yRfPfPzhm20HPvfKuSfu2fdqb3RyZePjd+yGm9ILCJ4/sYgA/fjjdwPAP/ypD/ybp1//v6+sL51efc/emYvL/U8ceYsj/dELJ99/cPuFxc4Pv/foM69e+PprFx9796F/cezEwv75T0w3+/3Rzmo4kBknuDTqC8fPfvDOne+0Ffp+wDt84G2YrUdfe+Hsj73n6FTkP5vklwfJd3vHnx83uRBMygmOzNd/9Ohuh9GJi6tKmw8e2f2L/+7JT92179TZtTfv/8t1IQCAj7/n8JMvnn7i/gObkqH9tfbxpY1dU/VJCcEH9ix8T1wIvl0k4P337f3KhSt/50OHfuBdB86vZv/mW2f/4f6dX/raqYP37r11sDGGEJIq89ULnZMb4+3N4K7Z2sF25eIgfWVtVPeYBks5LpS50EsdgDTWOhhnKhQ4RDRBdm1ctCve1WFurBUMa0DKWACYqrKR4k1sk1pYJBYjcA4+ekcrzlAnLaOAZVIjQFI7B05biHP9wLbmhW56cKZyphsX1vmCIOSQhKmaGCcqLXRSKAKQq9ICDFNZDZi2jiCUGxsXlnGMAFvjMAFK8DBVCAFGkEqDCXLO1kOmjGMUxqlCPhCCMEKro3Ku4WWFDgWOAt4fl4Em3KOdXp4pY6xjhKSFnqSh01xjDNPNoDsqjbXOgZIKMK0EVDAyjqU2thnxcaZ8QTJptHbtKi+1cw48jve2o0u9LPJpLk0tFONcSaUxAs6pELjOaT9Txtqqz6bqQhAySMsydYRgSpHgRCrDCM6kCX3aqjCCCcLAPaJymxvrHAxj5TGca7Wl6VNCelnx0YOzL1zuX+qlkcfO99OGz0JGHt7WzJV5/+72fPUtbxBtXaxUJGhqzKFmBWYqBOkHdnh/8vRzS3H3Q7v37m6F929rHJqtPre89v/1N35wb6teC+s+a/i8n8tRrkaFzrU520nW4pIQdLGXVQQptZWTakjrAOBKN5u0HymUyQoDDoayJBjftVA/dr4zOy2euzK0AM0K741K36PNht/JytlqmGi3ba6SS5MXmlESeaTQkJYWAOXSGudqIQs8lA0MRahd94yDuocT6VrTDYwcJzDItLFACdJaTdV9zrFFTlAaBWyUSmlsqybyMicEK20pxd1R2a7yUSyDiHHidUelx0k1JKMECMYrvfzgQhVjSHLlANp1sbxhrIVGRSCn40xlpWnXPWthph15HKR27abQxinr+mmBrRkkhlNcDYjKhEY4EDSRTkr9xpkOPshrEQdjh5k1CJJcG+f6iRrEpbGoUHacysATDEPV58paQAgB8hgdpkUl4sq5akA2hpJiPEwlIJCFaTV8hFA9pN2RVMbO1XnisXiURtzMhN64sINECUoKpZS2nGHnUKGtdQAI9izUv/L81VJNrMBgtu6t9TIu8EzNI8R1YskFqnAS+AQDGiaGUKQt6mVmS8srpUUYoHDTTT7KtaB4fSAZRaPUjMfp1tmWz3EjZHFm+rkEhyjBpbTa2kFqOaeFsjWElLHL49Q6YBbVA1oVArAlyO6oe9NV0YtVN1OdrOzniiAUCJoo0/BZ5IgviAUrELQiTjGJuSrj4d/YvW1Q2icv91/sZldHWR35O6OaN0P/0fHP/1ef/sja5b4r+CtxkhkcEl+SPBReJ3V5nqr1xIFzFu2o+WtxgRBgjBAgbdwPHprd347g+g6eYoQAwGLjXG+cBT53DvqFLkqlrdtIyh3ta3KUQtuIU4xQnJcN3zfO0esbWW0dAqAYSeucg/I6T7i1DEBbe74b3z03NTm1co4hdGjrNAA0ajeLefB30w5d2hhsbdXo9SIBADDOWeeM1qW2kceVtRNjYwQwjPNm9TZSewA42xkuVMNJkuRGfOvC1d44O7pt5lb3sckZ9dtXt29dXL3SGf7Ssdf+3mi8Y3t7h6hcXO1dudjB2nmGHai3V+MMNL13eh6ce+HMRtwtt9ZrcDvc2Gn0Jnz2mdd3f+TeDx7cdqOd8E1iIQfwuZdP/4NPvgcBPH/i8o1uYhP8qy8+/6HH7vsbd+8JKL5tcuDJF8888cCBzYOpx/7F+47qQv32c6e/dmJ5aSN/aPfsE3ds++qbl86v9m1c/Oyn37N/69Sjd+9+6tULv/nFl5527l9Ssb7Rf3jXwloe76u1MELHzlwBBA/u3fpOcuD7Ae/wgbfhsSO7/qf/+BQAhNc90s93R7vbt/9+fk+Q6xIBcuAmxOATB3ceX+r80JFdeGGqk+ShYD/67iNQ6CdfOPMzP/WXEpK/EQe3z7xxYe2J+9/6zk8kQxvjbFezcu56tuQv6ELwHfDeQ9unqsEP33l4a62+r9b63ePnP3hk5//6m19+6NGjV28ZrLVWDr58YWNy37/cz8900u1tf5irmUic7McKnNa27rPVUVEoIyje2You6NTnWFlXoZgj2kukMtfuRVXhG+cGqZqKxKGZxptrwywHQOBzmkvz9XPDuLCBRylBjLJMakqglPZdW+sn18YbhTTWne7EaWkMuCRTC80gyVVWKGWgGXHjHCHYWTtKJACKc6ktGAeC4tCnWalDj45SGXoMHJRSCUq0trkyUppGVWjrSm2UQqFPk1xjhDCBkGPjIPIZwmiYKG3tILEoVRY5QUmuDABMGp9rbSNBM6nBuYpPx7lW0s5OV+NcDcdlTo0vWN2ng7FEGBOECALCECKo1y8IQXMVv5ermaroJGWpXKkVJZgSHAk6yqQyOMn01oYXFzpTJi50jTMEMN3weiNJKSbIVQJmNShtLcAwyUPfv9BPh6my1lU8LCheWe/Xd8wRZPqpKlURBnR1lAOCXNl6Ba0Py6mQTYTyHiVbam9brjCClicQQOP613Z7q/7kyQsP3XPXepx/eH/r0T1zCMA6N1tljx5c+D9//+n/5x/8yGRk3edNn8NEOOecAxgUCjlX9/kwV99aHx5sVRhC2rpE6iujvDQGA/qDV5drEUeOxqV+dXXk+0wWJs0UQQhK2xvLlgPtnDU2znWmzDCR2kE1IHmp14aWU4YRMIq0gaK07TpD2EQBG2g1SlSzyhmlSEpPsCROOUXSII4JACS5XO3nVlkvoL5HhqmiCFECaak5JxRD4NFBIhlB3WEpGOl083pNUIKlNkkG1gFCYC06szLe2Qq1dZWAjVMJADMNIY31GJqZCuNU9Ual4KQ7KgTmgKAecExAGjRTiU6tjnzgUShCgVOJZ1p+mutWhWNMphpskGppXCU0tdArB0XAqXOw1suVNh6nSem0siOZs3ZQC4lWhDM8yHSSq7LQ9ZkwllZqu6XpDzNpLUpzPdv2HUA7oIudvBbSOFPdGMfSOgfDcaEQ9ximBAuOfUGKAhelpcgxGihjtHGWCN/zWhHLCzPXFsNUzU0FnX45SkrCCcYo0w4D9jxaFJZRhDGy1mGAjVEJAJSgeoUnmcUOUYwbERtnmjOcSZ0ZZxwAuFSaXCrnkM9wrtyWRvC+qeAPs9IBEIIpwhRQATaRupTO+TYtVasuxkqfv5wtVPyDU+EuHRxbGrQrYn1YltoKTGKt+rmiBDMM67EclSriZCgtAtrP0gebraSbrVv4l1878Ua36Hb7AOj5b7x8aXHjalq+f8dU3WdXhrlxYi0t716IspIwjLZV/YWK75xbHOWLg8w61/TZdOTVPaaNi42OGHUAxrprFbcOpDJbp+sGXNOji1nmM7qeDI7Mt4x1gMCjeBLUWOqMtuytkmveAjCZxKO4NHbyO5xogybTquvin81g/yAr5jf35Q4cghNLGwCwpVmZmBNv4tvFkoxza+Msl/qFi6sP7tuyOcBebx6alspnb+UMJvO8fmH1Jz54z43zbE5+tjO6Z6F903UCwBdeOesnevPnSTGxu34iuAV/9JVXBy46/flXf+ZPXhkf2bLzSr8VeoV1b3p0ZZQdmYfTG8NDUw2G8dVR7DH66oWrStsbt/LSGQHsxk6jN+Gzx06GoQcAEzvhWwdMMgybMzz3djexa5N864zg7EI/7sXJuw7ugFvoxHMnFjFCD13vLPT6ah8DvHvr9Llx75EDs//Hj7332Pm15y6s/dzvfH1vnbx37xar7f6t1zJO779r988989rvPn7Pnxy/JEvdrHgfO7gbI9RL8i+/ceHvfvh+/k7lwPcH3qknfhved3hHuxpM+udkUjd9frY7Qm+vu/0eQjnjU+FRvpkleGj7zFfPrUSC1XwxyksAODg/9fziyjgtNnrfy5LiG7H5AW/tOkoxrgdeKtXRuebTF1YnB49snTm10rllmu8B5pvVRuRv3vAf3T333OmlH3jfkd4bZ24dPE7Sb60M5yIxzNUkbsQQWuxkw0JtJGXb57vqwY560MulQ85npDTuYjdB4EppJq5G2qGKzw7MVhBAw+PS2CignJJzG/Eb63GhjHEWY5SW2iI3Lg3CjnOcSb0xKHyOGcEIo9PdVFt7pZNqgO641M56FDOKWz4D56yDyCf9UZnniiCXS00p2dLyQ8FqAcMIKW3jTIeCjVNlLYCFcaarAbMAiCCtoVUTWWEAwGO0VCYtNCIIE/AFrQSUMTxM1FovH2USIdyssHqFB5ggDBRjShyluBZxY+wwlRZcP5HW2dCjh7bU5kIxiuWk100htdYAAFVBxoWKGEsLE2c68ikjuOJRbN3lfpaVhmLEMHYwyVGAoMRZWwnYMFN1j22v+Y/vmQ4iGnLKHGpXuS+I0s5aZ5GrV3l3VFqgeaG7oyLyaOhTbZG0UJayGMbcIV+QiWT/4jA/u5EIj1CE5yoCIYQRWhkXd83XrXM3PhBAbox2zgFo5y710+cW+w4HD8yIbx3/1r9++bRxbvLYGTX/w5+9stQZTiw2HQC+4duN0bUlvRUI69xY6fdta89GAmHkcVL12WyN752Kjl8dUoICn/o+qXE67bM7F6qJke/dU1dKLw8ya2zNQwKh0BfNCsMM75wKW3VhLAhOCgUUtLaOUeIL4ntUaUsQGqdSCBxnqtMvC2mkMqXB3c6QYFQNMCCEEJRlOd8KxqW+2s1LZUqpmzUxXfXmW/5CS5SlNs55nBbKSm0BnEOw3sl8TqyFXBtGMcEoFCgrzCDXubRJoSshoxgIQIUTo5yUphIyY12jwktpMml8QQw4gnBvmDuLLq+PCSVxUkptNCLa2MK680sJxmjx6rgslKDgc8oxFQT1hmV3WFKCFtpBJWBOm7l2wBlOk3KY6DjXnVFprEXIVX1KEDDsrLWltqWystSNmucABEPLg0IwDM4RjHyOW1VBOV3ppZk0aamlMnmhkQOGTTMEZWBpMIgEU8YqDdoYTjFg1I01wTgrzFRTTDV4WZqQEbBuusY54LTQPifNiE3XOOdYaqe0K6RNCzNI1TDTw1RXPTrX5BiB1ho5lGT6ak9SgjglDhzC4IybD0XXWkoJBawsHhdmlGul3dq41M6W0mCCPQ7DzEQevRrnL60ML44Sj2EKKAypNhYw5IVGCCjGiOD1uMgKzRCmjL65Ee+ph0uDFAOqeWLLTO21CytPnbo6KtTrr57HBINDx5b6i/1sR8Pf1Yy216rLcRZxvBB5DY8BAkHxXCQe2NJYqHrn+6kgaCrkBKO6YARd6wo6qQB21uVS+YIRQNq6QhnB6LhU0xUPEAiCJzXBADDOy3Y1QNeXktJYiq9VDItNmwLnAKAw0iN88x5+dtTbFtYzqRdq4eT7yDCyzr10/ioA7Ns+E17XC23uy29djs31ZqPneuOnT1y8e/fCZEBmDEZoPc9XsmwjzWOpbtq1bwyT7Tc0G90kA8a5tTibvyU7AQDfOLN094EtcMNl3EoGJi85gOfPLLkK/+UfuPMzP/T+nQ/deVfUeuDH3/vP//4P/vTHH2wF4nJvDABXhsnh2WYvL79wfqnTGSTd8huvX9qcqjSKI+IA3lzauGfnNWnTTYzoD555YyIWOrPRn6ve5ponOL64NpEbffmls7cmB37r6Ve3HN79y4/eeWM58gQOYBjnX37pzN/5zFvZiWOX1x/aPj3RNe2brlc8/sQd2/7JJ+//hccOf+OZk8++eulvffSBGwf/7MOH37N77qE97U+/a9exUxv/8+df+tLrF3/+t7/8oSO766F3W473Dv7q8dedD0xKije7f843q4KSr59cBID379/20d3zr6/8pdTOTsDQbWy53797/tji+lTkr4wSALh/z/xLl1bvP7y9uxx/b7uO3oobu476VExs2CdXghF6dPfcs4vrAPDEXXs+//JtNuj/+fgOFOvdB7b96Ylrk+9qVjaMeeDw9sX18a13jETmpzuxsa4i6OGZaj9XgKAuWIXRdiDGheqmJUGo6XHQiDIM4HJjLYLCmmFmjHVSmrTUiTWewONSUYwKaUul+2OZpLJUziEANImqOkxQvSKkNh4llZBoA1LZmk8bnE5VPWMdQghjtKXmC04YRhd6CaNAECIIN+sCE0QwwpgAQEXQqbqXFYYx3KwJcG6USa0tAIoLXQ2Y1DbymXOgjdHaaWXHqaIEGMVVn83VPaVsf1wMYhUnMvQIZ9haiFOtjEOABrnOC+2cy0tb9UmpnHbIIhR5zFrnANUCghAaKgXXBBtQ91mclWHAxlIr7VZGuXUOA+SlNs5eGWZrcQkIU0oLrR0CDGAMJIUOBEGAEICyLvRowNhAqr3NUHAyKrTTLvBIsyqcQ61I9EclA2eMDX3qcSoYzgvDCQ4FnZ6b6q50+6U62q5QBNOe6I6Lu+breWm0sQenK9205AR/dP9MTdDN3oUEIQyIYiQwpggtD/Ovneuc66b3bWs8vnfGUTdTDaTSJ9YHGCGG8dfOXgh99tiDe792/PzmIoSuL7EWoJvLls+ltYujvCqoBdAWjHPDQl0ZZZ1MvtGNGcE+wfFIbvQyhKBfKkBE6xxZhAmuRqIaMgzUOTcfie5IVhmJS0UAAYI4U1xQoKQS8UrIGCNTdSEYJgTvmQ0xgkCQwCdrw6I7lIzzcVzGJrIyZYRIZcEBdqUsjeBYKgvOrfXzOFdXu7kyTmk3TnW7wiOPNetePWLgEOOkN8wRwvWAA3LG2qQwHidamkDQRsTjVBGKr3SzojSlAmudVCYIKGM48IhRxvM4wXi5l1uEtTKU4HFcCkELi5VUo1iPRvncdKUolda6LPR6r+wMssX1cS+W0tp2XQQBH5dWWzs35XNOt81G81NBO+L1CqMYVQQDC77HBaIYyEzkMYyxco2K1/ToRZMPxooRXBFEadeoiKy0qQTBeZGVZanjzDQj3q4JQtB8C7VrQAnUAtQKCCdIltl6b5gqywXZ3vIoRs0K9ymOC1MJaJIpo21S6nEhCUGF1MNUdWLpYVQN6WxdTFe51CbwCKM4ydXGqOyMdciRs7Ya+YEg0lhlHKOYYIwcoRQ/f2V4JS4QRog4RgklaLrOMQYABBgNM10R2FjcqOCIUascx9hqKJReGmZWu9CjFCNGiFTGOVfjtObxisfzohwmWVaqb17uxdIs1Gs+Y5Syw7sWDtX9hoTDh3eCcwAwF3mvbYy/dLF7fG3YS8uk1JeH+Rvr468v9r94bv1L5zdeXB68tjq62M/mKqLpc+uu0QDjnLLOOFdoW2jLMFpc7bfqISAw1pXGLPXHo1JVBd8kAw5AWTvOitZ1hUkqNUaIYoTQ22p/CULS3uau30uLVuDdeMQBPHv6CusWouIN0uLWt0ywSTMmZ1kcxgDwwtnlxX78t559/ZdfOvV/nbr0ny4vffbK0heXV/9w5epMNbxp194dpjvmmjfNOeEtr1zt7rtFF7DSH09XgvfetwduqG923yYzAADPnL78E48c2bPQ/LUffujVX/r0r/3IQzMF+tffuvSFq+vB+ujFtf6pjeGfnV8ZFPK3zy+brHxp6cpqZ/QfvvbKandUaFUaBQCCMATwB8+f/NDR2xcQfvaZ1wHgXdtnah7f1PncViz0oTv3PH+75MBTJxefPXNlT6vy0I7Z3a2bP7U06l/90bEn7tt/k6fYkZnmxJB4T/stTvWHz7+xfa7+iz/6vnp0Tc85KuQba/1PHt7eS4tDc60DO2r//DMP37ut/RtPnejH6b175jhh75CB7xP8decDt2Jru/Yfn3wFAPZM1wHghStv+YZ8z7HJQ6xz7npQ4dBM41x3NLnXpKWab1b3z7XuP7T9+VNXvtt83wNsdh2FifPiYENbK7UhCN030/xHn3/u2InLT7164eG9W5989W2ZhO8V7t01v75xrWzj8Gzzwii9b9/CK4sd5262ILDGVAQ910unQn66kyBw4CDTZj2R62mRaVfz+PIwHxYKU9DaMYrTzMSZkgpaEfMY8TwMzpXKBAEFgCjkBEM14vONoF7htZBjB9ORQMgRhKfqHiHI9+gwlVK5mk85I0q7AzOVSTPqJC3u297sZLKXlIRiZxHCqCIoIUhq0656G6OiKJSz5tRa3B2XpTIVn44zrbQJBGOcIIBqyHKplbJaWwdoOhLOuUhQQCjOFDjojVRWaAA0VQ9rFc4Jtg4qHl1o+ZWAjJKyH5eUIkqwMhYhpA34DJB12FkA8AT1OemN5JmVcV4awigCUNoNU5mbslRaKhMwALCE4KzQBJDSLimMQ4gR8Bg4iyhB0xVvusI9hn1GOEVpJglGd83W9swEOxq+dlYa4zNiHBrGKk6UtbDcSRs+a9c8wWmcyemqGGUaI7h3oYbAvXdbS1VrD89VFgfpsFCvXR3mxh1fGTIEO+vByjjHCH3y8FxVMOucIHjyKI0tjXUAS8P8yTPr5zrJ/qnoQ/umdzTCHc0IAK72xgfq4a++fDZX+o3O+gsvX/5n/+3HPvX44T9+5o1bFyEEgBHKlTnVTQJKRoW60E/O9WNpbN1jd87UDjQr715ofvjgzC88tv8Hjy4gAhtxIZVd3EjumJ392qUNIWicyHdtafTjMlH25FqcGWsdpKU1yAUI1yOeJuXhqYpThhHkM3wtlu9cL9O1kNUjXiqrlG3WvVa7Zq1tROCuMVMIPN7pF4Ti0GOeIDvnIoZgaSNPMt0ZlEwQq61geL4ppNKE45mmQIC4YFlajjLdrLCiNIziqaqHMGpEzCFHKJlueMbA4ka62i8coDzXDKNxqupVvmXab1Q5AahXmNGGEALEbpkLCEYesYJBEJC8ML7HKEacAkKgtFUliyKzMB3Wqx7GqF3j9YAJijkn1pnVXra4mi6uxdpYWaqQE0wRJmisNKWwlhbdceE8MsxlLy/nFGuHQmAy1/Qjj3NMmiFv+NxmeZWShUbQ8JnPSJlJDtQzlazwO0l21pjLhJa90aWVXuB7ocBbGn5u9FSVW+OGicIAhbLNCp9teeBcP9ZZaRshV9oBQsq5rDSDTGWlmaqKZsTrAY18VijrrF0f61wqzlip3UJTlEqXyoCDvHTOIY/gtbEhlABC2phQkF6q2hVmnKt7VGmzOlCrw2J1oFbGuXSuk5aXBtk41xPm3w5ZCa4SkIrHHYKxNKNSduJiWDpGyPZ6sKsRbK8F0mjt7IPb2586OBs2IlMhjz9yZy3yd9SDbqECThm4kKJ7Fiq7m/67t7bunK89vqv9qQNznzww97H9sx/cM/WDB+ce2dF8Ys+0cdfYNcXYWkcQ8ij2KC6MXevH29o1Yx0jyBm7ZarOCJpYdE34gLGOYBwXshEFpbG5tiGnE55w00NZJ8hb+43JftoBrMV58+18AADOr/eNtVOtykS4a24JwE+cgKW1HOPJWnlyfbDMmDu0++e+/LJ95dLCMLuvyv7m7r2f2br18fbUXkN3vL3gbXG1366HmwRlO04KbQAAIABJREFUM8w/OdFanO2fqt9EX545sZiW6vDWa81GEcCpYW+zn+mNQNe34B+9a28j9AZpDgCP7pn7tc88+POPHNI5WqrUfu/Vi8rY88PkN85eniolwWzYlb/4tz/4qQ8e/cJzp37jT469fGp5MtuXX7/www8eum0EbVMs9Nsvn6rd8muEG2wHPvGuAxdX+8+8evFGN7EJfv2LL2w5vPtH7th5ZqM/SQ7cSCdePLmEEbqRQhy7vP7gtmvJgbcZEr956asnF/dunXno8FuDf/fVC/dtmaIY97N873QDAAhGn7pn99Lqyt/76AOTMuJ3+MD3Cd6pH7gZH7l77y/9zle+fvLynTvnFnvJhX488Qz+bu/7C+HGMqkHt0//xnMnPnl4+8QeOBTsY/fuU6n802dP/jc/9uB3mOQvgs0Q6Z4t7fPL3be95tz6OPviC6f+/dNvnD+99PjnX/jxD937o4/f9frS+hN3fdu2a39ufOSuvf/095/6x59+lBI8sWiJld595wF449xNI7U249LOVf1TGzFBUChT9djR2eoLy/19zUgauzjMDEDL4xnS3VwKTusRpIWME+kAqr6TFghFGFBnUBCCOIBGeJyoJJWIYgzOAvQzaS00q4JgJAxazUqC0aS61yInKD7ZGSPlQp9mmX5lZSAo4ZhY62DSSR9BWhrrXC41RsQhQNghgzCG6Ya3Psinm0F3aDhDhNIs1R6ngpOsMIITStDGIA88EittjSs0VCNqnesnilLcGWSBx/LSWqsrAQWM5lq+B7iXl4NYJ1JiwJyhNFfNCgsDYjTT2ngcd0dlvcrzTG8MC+ScQ0gwbKwLmMgK3ap6jOIq4HFpJhoVjBBGSE8a5/tcGzdd94fj0mFQBjxBhdQEo6mq6Et5uFV9bW30+toYAZLKUIZ1YQOGx4XhDDsGFCOEYUvNywzaWfc3cplK41FSDcR0xWMeX14ZY4SGhY48mI2EdW7vVPR7ry4dnKrsbIQAgBGyzk2ecIIv97OzncSB29OOdjXDG0N1P3bP/n/2e197JU4qiD596cqx5y/8/U8+3KgEniafeOTwky+emRjrTBZaez1F8NLqECOgCGYib6HiU4ycg0mwM2CktG6+4k35YlTo+Va40i92NoO1VF4e5hwxBMAE2UjLWsA6azHCMIzj6T2zo0y2uFiPi0AQ36fOOWMBI2TAaW2TQocesg6UQQQjjKAa8cG4sIhopTtDXWFIKm0BAk+kRTE9HUljBcHVkHmcLK2nnJNBqjBAUeqr3XyiTSqlNRa2Tgcr3cx5PEnKxCdzLW+9X+alblfE1WFWKjseS9vwjQOCUD1kq/2CEWQAae26g6Imgk4/0xYhgCxXoeCDMqWEBB4W2KWWpZkGgKpA3eH4UJ49fLClMVHaUFGOE+zA5YUqtMsL4zF0ZSVJUjX5x/AYE9j5ggQcbWv7pTIeQ5c7GcFotiW6IyU8muSaUtLLJUJokKlM625qwKHAIyWgjWGCF9fn5pvLi93RYFSmWW99qBEiFFb6yUrInyvlefCITtLSFmWqHFQ8q5VrRCwtjFJGcTwcSikNE7QmSD8znBOpLCAUCTJONfNYJ1Yho1FInNKW40LZUGAAAIS0saPM1DjrZQUCbJ3d2QpzaQKKpNR5oREiNUEDgke5RgBJrgAjjF1VkE6mSqkpwdZBI2R56UKPVDm14EDKik9XekW7LrLMEIJ9BnUOibNbQsI4T5W7NEqNNYenIufc335wz7mzF3aHVEs1U72mvvAFIdic6g0/tGt+NvCvJkXVYxacsc5cNwLzgSprA0oAQFunrZ0kCrR1xjlOkNKmVhUR97SDblLUfTEJy0zIwIRFgIM4l7NVHwAqnDgAfEMPHwBA15j2tejjjVtw59xqnO6bqrnrRyZ1upc7QwCYaVU5vU0KHW6gBJtTdZLi7+6Y/uNjb/zchx840G68eObKr/zbr8zycP+2qW2zjaVxVjvyttVqcW0wXY82Mwy5NhVGAcA4d747mr9dnfEXjp+9fHJl78y1lIK6JTOw2QsIAP7s9QufvO8AwRgAAs7g+gr7wPapX/nIXZ/6x//2E+9737HL6/fNtk6dH/7OpeHVYe4J/spacYiLBw7uGw7Sf/LbT/mC/tcff/BPj5/9kQcPbq7RN2IiFvrxozt7DCui4NtgIhbaNdf83LMn/uFPfeDGl547u5QpDZS9a+v0MMtvrST+sxfPfuSGMuJryYHZa8mBw7NvZSF+9XPfPOyHP/8j771p8P6p2sm13nQl6Mp0QjOefO38Dz1w8JGD2+AdMvD9hHf4wM143+Edw6z4X/7sBMEnxkW5xfefu7j+yaM7/spYLAL4wO75N1b704E3KSE4snXmf/vcs9dKCP6SWwzdf3Dr//4HX29U/Q8/cKBQ8rWlld965fk//Nob77l3z+79Wz7n8SMl+tWf+Wip9K9/8fk/d9fR24Y6NvHhu/f8+5de++kH7waA+7dOX+jF97fx4i3DsIXS2LW4NA6GhTTW1QStCFIqd7obe5RqB9S4vpMIUFpozlBWKE5prS0WKp51rpPL0tlrVjsA3bS0ANZAJeLGOKWMtkYAmm4IBK5QNqC4HVIDOMlkGDCtnCA4U3YQS08Qwgg4hxFy1ubSzVT5INeCs0zJqZqHkMtK6/skLuRsk6/0JUXOF7Q/Kq2BUa6stDMtLy20xwhGQClOc2kdJKWNBElyjTEeJ0owgsHJQlvkGAVMiLO4HgmKXT/RGGxWGoQRJSQUNCkUxSiXkMUlp0ApqRBsHXT6hSdIUZpGVUQ+GaWqKC0l2BhUKFsqO8ldaOfKeIRFJeBEGaut2xjl05EXemghqL60NKhFdJSresAHSeljcmWYv3RlCMblyuyfqaSlvtBNtXMt35cCKj7NVLGrXp+4Clxe7DkqDs9VL/YzQfG31seFdp9/7XK7XhkbTSmZr3gPbGu8uREv9tOQ07vn65uL94Q/p1I/e6mHENo/HW1vBAAwcUIFgEkkMhS84vGXT3d/9K4tv//s2Z948FCrFhrnGCZH71j46svnPnT/fni7aqjlsZBhjHDNY22fw9s7okw0VACgrb08yDJpBcGckY/vn3lusbe7HT5zvssYvjLK7pmrX1iPBWe2BG0dBZsVxmOYUdKuemtpUfEIJYhaPExkzadZKcFRhJ3HcSYJo7gaCoKlc+AxsM5hDAjA87xRXu6P2PJ66gCNE+b7dNtMtNRJGxHPCs04kcYsd7JQ0HGqqiHnFE/VxOXVFByU0iHAU1W+Niy05eNUE4oAo6zUAIARTgoN1mhAzGJr7EBCP1bD1OS5FILUInF1ME5L1e2XCDuvyhk248IAxmsjDQDDYZYaiOOSUldnOM3KUap9TpIkzxJZr4owYGHAMXYOYY6BcVIjeFwa56x1zkhbrfIAYQ/hHta5spHHCmWcc42IAEbtqrjSLQRHpdJXlzfSNPcDgRGOqsHcQmtqOmrN79++0Lp6dW1aO7u8sWXrDF7qXV3XCEAwwpwbZ7ru836uMUKCgOAEAxpb1/DpMFOqNBgz51xmLQannM4krgjCGe4MJQOrDBIUKwt5UdYi31o3TCXFCGFnwRbKjQsFCPnYOecQIKc1saxfaEKwoFgacA5K6RJpKDiNceRTQdBUxDfGSgPEWjsLmEBnLKsVwQADdh7H/dIcmKqtD0bq/2fvPcMkva7zwHPjlypXd3WemZ6MmcEgDIgBQAIkGAAwgKSouDZFWbZk7+7jdZBXXmnX0tqWvY/lfZRla2VLtihKpKQlFSgGACKJRAIYpMEAk/NMT+euXF+66eyPmmk0BgApaUlRP/D+6v7Cra+qu+6955z3vC8VB8bKmbGrg/xJTz4zP/ixAzUbsUypNrIP3LH7/tmRnrJlnyvrWml6st16eakrp1hmDac+ArEOPX6V7ZMZN/TiHf6am6HGLjEOh1z9bpxNN8rKKm3ZIFPbGhUEXBmkQ546p+Rsb3VSFH3BPSk5JRaRvq4Hdz2Rv35keC6zlhKyGmdjUbh+9TB4uLTaKQQyCj28VhxYrzPABsNgg0gBDAJB10rzv/u2XV85dOy9e2dn6qXbd8+85507C0acvLz08vnll07M3ffQ4Rs2NfbMjt24deL+23d1Bsn+bRPkWhAyDIqGr3VmrXvr1ChcKxiuv53DF5dKgTeUJLKIBI2gb7qDeuL4pY/evnv4VgPJN+4fHKd669iNlUI/1x/Zu+mHb972yMunvtFc+on77rl37+xfnL+0sJa/1IxXyxVKyE9/7pmza/3f/ocfgqtzFJINO5EvP3Ni5t37z/n8I6VoU6EyzOu/mbLQI8+e+vDbr5cZ/bMXTz9w667Da91HT196vczos8fnyF++OHDswkd3br3jhk0bL759ZrQZZ7kxKVHrwz51eu69+2ffKg78bcNb8cDVFoJ9tcZQ/bNRLmwfr3/0prG9WxujsvCfHnv52ErrI7DlWw3z18R1qqNDzNaK55q9myfr3zg3f9P06P03b3/g//rUg3u3rF3pH61/Z1VHJ0fKpy6v/sfff/S3/vzQ9Fhl9w2N77tn/4ffvu9/OnUhGKv+A04/fuuOdaroX1t1lFyb3N9wLji4Y+bQmTm4AwBg+0j5L07P14M3cI0xxhDCDkyVM+M+/VJfOXe2lRiHoaAIMFPyt9ei46v9C90EEAmlnDKHBAho4+Y7KVAAIISwJDMOkTPaKPudWPW1iTNTDUSWmXIoSqFAQgw6lbtcuUw5NA4AhHScsbVEUQQENAi+IMpAql2j7LVj7QhYi91E+5JFHmGOJb7pxJoArHSV5KTgiW6sjXH1qt/u5eVIpsolqbKahYGIE80Zo9ROVIJYGUodoUQyDgDlgpcpnaa62VW+pOWCNNYMUicELXtS68w5YIxYcJQSbdGiAQIFj0ufJ5kFxNDnaW4KgQAC3Vj3BloKpiyGAXMOQp8b63LtJkv+nC4ikkFuqoFsJYoxWI2zlQExth9Khkgmit58P0NKji92y74cLfn1UFzqJGuDvJMqTzKPQOIccZDHOgi4ZMSn7OiVuKfJ3dPFU83BnvHSQqySgbpzS/0Lr1xeG6hiIMDBR26YoBS+frkVZ6ab6u3117TKXWonp1cHO0cLW2qvHg85Gy7eQ2ETSclMrdTuw2f+8Oszd+3+nRs2IQAnRCPu2Tb2+DNnnz568a7XUmkZIQcmqr1c9XJ7ZLlbC2QkWNkXiGABAWA09FaTvJmpB7aP1j3+hRNL92yuba6GrVSFghGCaJxz9HIvoZyl2pBpCCQrhTJ1oC1KwF5ieABSUEopOk0Rk9RItPWCUNZmuSEU+okZKYokVUHopVkecCc8KgULosBo3ennm8cKC+2sPVBS0n5mx2rBcisdmhP3+3mpKPupYoyOlmg30Z1OViwKZ/lYzWv380FmAaA7UErbgPNhky4CCQM+iLUQLAx4rtAi4RSssYwgF0wKHme6VPCXhp2ZBHKDFsjm8UKzk1eKAgDiJEu1o5wWfE6YGivLRjlQBnsLvUJBVCu+QxgkSlunDVIKvqCe5IWAt7o5I2TXRDGxthUrwmgoWSdWXkgEpZ0MWz1dL9Nm6sC5wcAZB7WR8p1vv3F2drw6WnPWpcr6oTaZRMLCQsRjHQVevRyYQXhlyVnEdqwJYDEUjIPLwVkESlPlkkQXI4EU6yVJkXQyXZQ8z/KCwILwO6lOc1QOA48xwn0KncQICp4UzoEDMlqSBNx8W1FCAXClr8ZKcqmfU0oJJQONfWVT5YC63AxTDxQJCgq1UK6milOyFptBZhklBZ87B4JDTxHOCBqsVJhBF3JmPN7RFgAOjhfHC/6ZVv9iOwZ0N02W+8qebOVK25PHz21tVIq+KPrCIgpGA+FnJKqJsObJmicBwDhcF9QfbvoDyhJtJaO5cZIzck111CFSQnpxvrDWH69XkSgLLtYKCSz0+6NFyQgoB5zQdpKXA29dafRbglyb+QPGlHMXW/29jasE9OGX9+JKGwAa11YWcm2ZGKqI2g2sHofoADxKTqx2q4FEgGLgTdSKCEApcQQ2N6ojtfDuG7f/0cypj928Y26pfX6heej45f/tN76wZ8v499yzzyIOHcfctZEBYLGXbKq+wYpz/MrqwenR4XMOUxJvlth69ux8KZC3bZ0cPnkoX6XIdzP1M185HJxbevCmbf/+8SM/fnD3+dX2j9y1//zFpffduA0AZkeK923d8vfv2K2snmulz59f+IsjG6m5r37Onz9yfjDbKBbC6Xa8b+fmkPNtherJzpp2dth7oKwpyOCRI2cfvG3XuaXW08cu3f+6TuL/9NChHbfu/pf33sQBry8OuL9CceDXHjp0x0j91/7pR6+7eFgcmKwUFJjh8adPzznEtwzI/hbirXjgNTjaWgGA2YnKc8+e+/F7bmGU7p+qfuncwre679uMPWPVz75y4SN7twBAnOvIE//ig3cVOf/0oy/9u5tedUL5DuFH3n/bDZvH3nvbjol6qaeTlTTNnfsX3cbuLePZeP3saueds+Pw/1t1lFxjaLweGylDb98y9rMPP//+TfXXX5Yr5bHCWqxOrw621cIzrcQickq21MITqwPEwcogT6xFi0Agy00s6EhJpMohQo5OKVsMZCAYtdhLwDnIMrOlFs3zNM60QksoYZxy7qjmHYOEkbIQyN1ynDFGOaPoMM0MpSSQzPOZ0RYIQYudWB3YVC0F4oUrnamSn1innF3pZ73EeJwSQizgROi1tSkWRK7IajsjgINMW8RG2QeH2mEvNZwRBLLUzSghoccoI7l2taJEhJ62lNJaJLoDtdLOPUmLAadA5tpJrpxgpFHxstzleQ6AlNJaUSCCFKzTU5RRZawnWa6dsgiAQjBCCUPnHBhjCPBaycuVvdhMKCcztUAbmzknOR0vec1ESwJ9RXyPa+0urMYjobx5W+3Fy+3VWN1UKF9sxUvdrFbwHKF1j1/upUlqiqFEB/tGK+fipKtM0ecA7tGTc9VqBQCMtoAoBPP8UAqaG3zbZDk19itnVyjCztECwNUsPSPkYjs+sxoDwF1bapF84xlsWB/Irds+NdY6v3aO0ZHQe/LC4t2zEwggmZgtlm/dN/3wc6c2xgPk2gJflKLsyZlS0E71QJsL3aQWyIJgQIYuFkgIMEpvGCt9/uzyN86u3fj2bTdPlL98ctljXFkrJbm4Guepue/mxqW2qknh6tF8M/U87kvuM8IJiTzwqEMOsiSaCRYLSInLlQ4EZwhByJDCrsnwxZGCzvJi1TPOeIzXy5HSmnGWW1cveZmyuXGSQ5y5sVqw1Ex8j+WKhz5njBQK3nwrBec4pyORbMbK9zgA6STJVD0QhLRSVfC5UtYTjBBgBJS25YK0DgshJ4TEqakWvMWu3lz1tcNUuVgbBPA8YhzppQaUEeC2TEXUOQDQufaJWxqYSBCnrDUs0bpa9CcbxZBT6ZF+opV2nDMvIL5kzV7m+yRTiAjVqt9TDikxFjmF5kDFgyxJqZS8N8jrZb87MNq5QsC9AiEUpRRAaXWkGnmMA6tEInEuAKqUArCh5KFgBKBcDJxzFCD0GABJlUsVAmC1IJ1z/dR0U8MlI4ZQsJyBYIRzMBbAk9qYRslLtGsNVKPst1MdSUbAMUazXHFqSlHkUTrIwTm0znBOCMCVdtbrJIRSYx0BnO8m9dBDgITYakGmuU2Ni5UbGAw5r/qyEvBc4dog76U6Ua7s8VjZRoX3End5Nc0dKAmE4lo/Q4Bja92VXJ9cjTdXw2rgv7LSFYzuLQltLWpTKwRwje3DCBm279aDcEjC0deCAXOtr3coyRUKZhHZhlOEgE/ZQrNXDL3LK93p0ZrKKSDpZVYw2s9cQXjH2isOMbMGBqoYXM1nUUL0a0sB8Dr2P1xj+wwJRe1UDXmhQ/4PAbi42gGAmckaIl4n3bMeDAxLBPxaqfBiqzdbLrx4YfG9N24dxg9H26t7K6MOkRPiSTES+QVf7psd3zc7/sG79kyNln7ts1//qR9+NyOEEnCvdUV46tLSB3bfvv6ow3NDCdQ928aHwQABON1t7au9sUHY4ycuDp8EASRjidKRFADQzdRnjpz72NTIb5ajx146d+vUyLHllsryVrv/rn1brcMzvebG1P720dJnn3r5BzbsyDfi019+zk2PXjq78l9OLP3WV09OxP1b9sy85x17HMMxXmSUHF9snl7qnri89IGbtl5aaJE3khnlgjuET19e+mc3b4bXFgcOn5qXgr1ZcQAYXS8OPHb0wvml1q/9ow+NXfN77mbqqcvL379/thln7TgtlvhsVFlY6z57fuGly0v/+IG3eUx0lX7o8uLbGsWtpVc7kt/CdxFv9RNfxdHWyoV+Z1+tsa/W+OiB3UfWWkPm30Q5WhqkK4P0Ww3w7USjEDjEdpoPWwgA4H03bfvGuSvPvHzxW93618f6xPeuW7bNr3UnR8qEEEl5YtVUWLxvz+YC4m3TI99G1dFvkht44Jbtn3zmsLH26RePJHneWVl8/TVaKWXdV8+t9rV959aRHz+wqRqI5ThLjHUOJwv+tnp037bG/rFyI/R9n1uHaz2ljQs9XgzlVCXcWguss+1UC0ZnaoHH2VqmI180qkGtGAQ+DwUHkAlYQkjoMSmp8Nho2R+vhEmsM2NGKx465IJ6hCjtQkkJwdxgX5lDF1vSo61+3svUcivnlApGCwXRqPqhZG1tOv0sS20j8CQjhFJAiDyuLKz28zQ3jMJELRgpichjxrrcuCTV9YIYJEZpUy145UjGyo6UvVLErHXdWC+1EkoIIVAuilBw36P1kvQkK4ZivOhXQxnH2iACImdUG4ShdGNBjpVF3RMAsLUeAtJOP89zKzgRgghK1+J8oZ11esoXjDFqkaQWJyt+kuoiZ4TATZPlWiRvmar6gr2y2lOIgc/HIs86186NymzRY0muSwX5/Hyn1ckJou+xeiSFYKHHlrqZNk4ZfOLcGiIo47ZU/IZPjy/3m4marUVLg2xbLbrSSS+1k784vXJmNd4xWnjfzsZGQfF1rO8VAMBj9F9+6M4to8Wf+sR7H9gx+Y1Ly+tBhUM8eNPmz3/92HW3D/8nybUWhWogZkrBrWOVSLBWqs62k7PtQWosDnt+EKiFF+faBt22WoFTUitIZRxxUA7E5pGwLCQj2M4yoGSgrAFox3lf23aikLJmin1LWqmrFUjISC+LmdDCV5xnQmZS5JbpyamoXsG05l7sdONcIeKRE+fXuirJ7Gonc+AEp5kBycEhNGqBUgYABokuRbLbyylgvSS3jIb93CqDg0w7RIduaS1hjBR83hkoa7CfqchnSWYJAenxXLnuQPdTYx3GuWWEjFa8TaPB1EhUr/iEQG6gXhScklS7pZ4xGpZ6FgC6vfTCStbt5nOrcbuXZz4ZKQe5smMVzznLCVMaK6WgEHJCSTcxgScRiXVu10ypJrlHwWPgS9GPtaTQqIaRFKHPC4H0Pc45MEqX1pLmIFfGoXPKYKrtaidd7OW91IaCaEu6OTKE2ybLqTKVQDZ7mjGaKqu0y5SxzjEKnJE0M9ah0VgIODg3GOShpMriILepQa1NnBtG0eM80Xai4sWpniiLODOScwIgOOv2c2NxdaAIBSpUd4CAYCx6lIaMOOsoAYfgHKzEeaKsBehmxpfM81gt9KcjfyyQ3VRpjZ1Ue5xNFoMd9ajgMZ/TXmycA8JoLRIFjxmExTjvpeqr59pPX2pXfNnKjeC8KMUtY6Vemk9UCnmqPMm1QyAgGVVOcSq1dZJRANDXtEGNw9y6q1YejA435cYhoyTRdvjdUdbl1i23B+WC3+r0OSWJ0u00O9PvXYJ8Lekfa69sK9Z3lEZDLtqDtBS8KiEKb2Q6dh0sIr/qSQCdNB9/bVr6zIWVhqJ/58MHb9/yGvPg9WE3lgiGy9byIAvRrXYHm0YqG68fXnOl05t5rTD/+w/uDn25f+v15sRDnOkMzvfb1x184dz8TK10z23b6TVVYtiwaL7myvMLAHBg6yQM4wFOU3U1Nf6Zl87dtWns9u2Ti6vdr3cH+8erWps94/VLq50tjeob2hJ//vmT9990tfPhugzaV585uVewH7pt9sS/+zv/+Yffef8H79S12i8/fvg/P3zse379Sw/88hf+ye89+WP//dGTa+n2sdrvfvk5Ssmh45davaTVSw4dv/TfvvzcT3/mq5v3bd+7e+qHxmuT0WtVnhA//41j33P3jetHhvn+fePVk521xxY60/VXP+pffejQ/pHqO/ZsXj/ymZfO3To14nF2vtPb3aj98v/75Pt+4jc/8n/8zueePf6eG2fHSsW+Nn96YeHdU2PKWXgLfzvwVn3gKraVXpXZetfe2V//0rNffOHUBw/sunf3psPL7ReurL5/96a/yfLWwZnG+WZvtlLoJBnUS0PKEG3FhZwfbX9nKUP337773/y3R3764+8BgIB7JeFXvaDqBUOj4qHq6Nu3jN1/8/Z/89nHfvqjd3+r8d4U5M0pQ/ffMPULn3/i0O/+NgDcxMXFG+56vYjDar8/3jxzqbBvT80724xvGi/9wL7JP3hl/kIzIYScWhssdDIQBDRm1lYFHxg3zITVQp5bZ4HM9XOPM19Q6rEgEMhsnmokkGmrrEkSTFJdKMp+bAJJu7nJpB0k1oKtFf1SUSqDIactotCS2FkklFM6bMJd7KWex+LEJJkphYJzAoCCEzS40EsogZFQyoqvFC4Ncimoza1D4Jw6Z0uRoIQMMqu0k5QqcKVQ+JLGuU1yDD2WGeRAjHMhZ4ySUiCna7wdq9bAaGWUxtVO5gJoJ/lUOeDEhYItxXnA2SA3DoFQcA5HK56gpBur3FqdDRPeZHGQT9S9ZpxIydoD5YwTnCSZrQSiEPK1RJ9fHUjOt9QDRPzRt23+0omlXqIOz3fyObelGu5qFM80B0WPcQPHFnsFnw1yHYQ88rnN7Vwz3j5WvNJOlXNjgi3EanZjO1pRAAAgAElEQVS8utKJK365l2mfsUFmK0XR7mcnnzv6j/7nD/77x85UQ9EoekcWOtuq0flmHAi2c7SwuRpaRHetZP/NMVmJfv0T7/mPX3hqZ6nxyVcu/PO79wOAZJQSsrVYffAdex86dOqBg7uuu4sADNWs1hOHFU+UPC56SSXw5vtpJ9OC0EudpJdph3Bkvnv7ptqORsGt9K+0SDPR4HDbltrRVlzy5CC3ickDQdqJLvl8tZNtqkvjQFKy1E5z5bKcRKFRmTSAHQbgqCfQkxh4gvFofq43Q0Z3anK2rV5uLZYLoScpACptdR89wZW2mbGVovQl2zxRSHLXi/NerAGhFPFMOSyQ0ZLMtF1uZcogp6QUyeW11POYUY4LwimJU6MsepKjdUmmA19YY4seJeiQEELAOJoZHSdaW1crSsJowSfa48XI6+em5gMA5HnucepzNjbqFUJMEz5AUw+pMlo7UNoWQ9EaGEqIJ7ngaAymqZmuB3FicuuYI91cK4uViBckYwIA+WLH1CuyE9vAY4QAl7QS8n5mCSGTo4WiQOIJawEJtgcaLYs8hiR4aXngceYxNtOIXj6BRZ8NMleOBAD0Uy0YSTU666THHQICYYJ1E93q5YVQcErqRX+1m68p6+qsIKkB0IBZBvWiMIZ0M5NmKuSQK5tb20+UQzTOhpJpRE7IcqooJYjACCoASkliLTpngQ6UlRSMM/MDV5A0M4jgCh63ziXabK1GQLyVuTYjZGbEm29mM4Wglao9I8Xjy/0B5zMV2dfu0EL7SqtbDsRYQdZC+VyrN14pNttJMfIJwNAszCHkxhJClL2qzJYZp5xDIBFncC1CMM4hUADSy/Sw2mbQBZwBwFo3FowtNvvHLixNNSoPZR22atpXBj9/8iglhFDyS997e2PMW+sl6/WB15cCNuL15gPjsugLHnliPekOAM9dXmx24gtzqx+8cev6bls5N+QBFl/nGQwAryw279s89thLZ3/g4B7Y0GAwPNtOsvKGiGVIOpoeLcO1Bcg4HPokAMDhhWbZk3Nr2cnCVV2NHeW6cfi7jx9ZOr1y24YQ5c3e55cOn7nvpm0AgAAUwOM8URogGO6n90/UWpGvjJ3rDIqecJaGUhy/tPjh2254/VDfxIbsi0fOB3s3/eQde0bLQdGXH7p59kM3z6baXIo720u1udbg/Fpnpd3/uc898YmDWy8sNEuR//LZxSePnB+kCgBSpY9fWKabK7tmxhNtbt06tbtSujzoAsCQa3ToxKWvPnf27n1b985erYE8cm7+7tmJU53eVxYWp42385pNwRPHL15abv/bH7h3/QN5fn7tmfm1LaOl3z91aVvZOzw3LzL4qY+/53Kz+/kXTynrXlpuvdIZfO/WqYLgo4F3qrO6pXg1uvDe8ib77uGteADgWgvBdBQOefyTtZJB9+TzZz94YFckxbgvn59bff/uV7tkvr14wxaCnaPlo0vtg5sax06t3TzTAIAP3bLzoUeOPPbyudve9moU/h3Cg+/Y+/CzJ4dGxeNBdLS9srs8MjQq3jFSPrnSfvuWMQB48LZdD7909tuuMnTy5MnPfupTtc7VDI0zOjz6BASvmSb8cjWd3E7XFg72X77UP7iv4T95sRUIcudM7ZFzq5Ml2U8NYQTRaQJbquFqXyEgUuYAfE4ZIR5nqykMUtVLjOQ0yXQ31QXJu7GarHkLXVIuAgBySko+4YzlQAapIRSIY4BIKRukWVO7QDLlbNnjudFJbn1BjcNUoUnyetmrFkR3oHqx9gQ1DpPcVgPRTvVCL7XWccqGvFVErFXCXj831jkHI2XPWpflZi3TlNBqQXiMKYKdJOeEEgYMeBTwTLlMu0yZgmSdgfYF9YQHiQ48GoU8Vma06A20tYhxqjtWeYJ7HAap9jwyFsmLawkS2FQJ5ztp4POSx1LlHCWR5+faEMBa0c+0TlNsJyrO9VQtXLRYjngzVvdsqc9Ugn0T5Su9bDnOPUZbsTIOJZJNlXBt0OGcGIeT9fBKM+kMdOJcgTODsH20cHKllztX9EQ3U0KI5kAbg22lq5FQxt29ufzJo8cePnpxthqeXuufWul3M31qpf+hG8Y3tgp8E7DXdjTWIv8nP3DHz/zJEwVOv35h8T3bpzLrlHWEkJ07xl66vBqM1CKP+5xJRiWjghHOqMeoYBBKkRubG5doayz2c5uqTBtsZ/qVxSXCyQ2TpcOq88nnL//x0YVaKFPtLAIlxBHy/OU2Z5QSUvVF5hwQLEcyTrTklACs9nLJaZa7alEyApnhtSpy9GLrip5wgByBcqqU7XWT5549udxJLcf+6cXa9NhYyece4Yy0B2alnTECgkGrqwSngaQG6EQlvLwW+xzTzOUOO4nyBZec+h4bpLoUylxZT7KVToaAY+WgHatE2UbVY4y1eooS4glqjAsDGSsbebQb6yDAXqwJEONs4FFfMOawi0jRZBl6gQOAPFOjVd7qW8F5plLOROgxyVlPZYTRgXLKOp1p6XNOIMk0IlQKsjnIE+2ma4HnsY424NDjdKBdGjvrsBAwjxHJrLVotC14vBzIgFvGKHDhKNPaeZx4UmSOISNZrIUQE0K8CMAZyw2llCCh1YjWC2K5r0aLUhkkxOYKCx4t+95CN614YmWQlYueczhIdILO93kx4vOr8VhdRlQSMEJ6/dTuqhWe7caC80tr/c1eRIEIxxJjBWfaOAdkphJcQkcICMkyg5zT7dXwfDvhHhecRJI3B8o5qBdEXYq7ZmqHl3slyY4s9bZWo7leCgghp9KjIWWCUk4JJaQda2N1wReLsRPUbioHN42MP3Z2/oEdDU5Ia5A2CuHZK51GOSQEPEoBgDkQjAFcNQ5T1hECpQ1EdkqAETJU/XGAgeRkeAQpABiHnV5irf2VP/r67z98WPhSeWxubq3T7AMCIRD43j9z2Ch77xgvzo5U4Nremm1g+cOGCOG67D4AUIBmklV8OYy68Vqu/cxKGwEb9VLgCUqIueYJMOTebMzHD29xiMv9dEujcqXZ3TPT0M4xQobMh8wqScVqP52ultYrh4yQF05euf2Gqwk+i+gxuj7sf/3GK9S4F86vVYXcNlqeqUZfO385ybNEmELk7drcGH6AQ2dieB2eOnXZIt6+fXo91VUJPCCkmWRPXV7+H25+1UNgNc5euLT44L5tmTIAMPpG9mfPnLnyZrYDX/z6MUkgc/rmqVd3JpfizpDtM1ULZkdKAPBrX3p613jts1956dadU3u2jO2YHgWAM1dWXzgz/48/84g/Ob7zhukfbFR2V0sAkBg1FkQeE4j4J08cPXVp5X//L18+cnbxnQe2p7746tmF0wxGpb2Z+fft2Ty0JwKA3/raCzdOVI6cWRiJwoN7NgHApw6fyQryi6vtOwUTTp69vPazn7gv0+bQ5cW/9+5bf/uLz7e2TvzCXXsL10I7BDIMA3Kr/yazrm/hOrwVD7yKildY35fvnRr92gtnhnPEdLX4O0+8/K/ed+Bv8j/1zs1jv/H08e/fv3VTrTTX7s9Ui//8Q3d+4fDp3/vqi9+5eGA9YX/rzqkXT88P44EhOKX1QtAcpPsnav/10Ml/cPtuALh1y8SLFxe/jfHAyZMnv/ilh0+dep3ZGWKcqCh8NcfDTE5ffmL4M20vHINJAFhNjM+UTwl1UIuktm5HtfjsXGtNUnbVR9NM1IJY2Xool+OcIDoEhxAGHByMB95KmgcBX+goZVyirKSUEFMqyO5AaW031SPHSDUQzUGurSMAgGgdEoCAMyXsILOBz8drvrPOGJrkJstBAPUltRYZRbSQGhsIUgj9VFlK6HAttA46/dxaRwgIQZu9nFBEApKzVGM71r3UWGMQSSFkkvKVOBOZKUeyn9tKJJe7WW5dpSg5pUC01UgdIiBlJNZ2oCwnQAhJc00cFAIuOcsJeB6jQPrabK6H893cSHSUGOe0RmuhEMpeqgUjvqA6z942O3FibSAZIYzmmf7CyeVHL64RB1HAA8pacd7M9XjklQJ56HIrd0gpdQjL7QwQqEeZgsS6XmbWBio3rtlX9dAbLfhFiY+fWitHAQIOMjNa8Y+orH/LlodOLT9w46x2cG5lMBLJjx/YVPT4xq2AdsjfnO2YGEsQMm1TYzPtUm1/7vvufeTk3EMn5xkRm6rheEl2Er1tYuKPj5/snFierATwWtlfBCCAQ7O2a38jvPr9R7CIg9xq64DC5tFQoTu4qd7w5IV2rAj6lJxb7EcFWRA0ze3WRuHkWj/PTaPmS8GyXEvBIkIjSXxGCYfeQAtOBlkWed5IwVvpK05J5LO1buZJnsTZzW/b2Xc0P3Np5+zUiy+f0YA2NZ3YOOcqJa8XK41kpu51E5PkplYKhaRTI0Gzm6NBBrDSUo0aZZwaBxPV0CD6HmMIzVhJJtoD5UmeKNMZ6PEaU9pYi7my1aLXSTRBLPisPTCc83pZ9DMVSnFxub9rU2WhlTnCpKAGMVEOAPxAppYFAcm1LRdYkmC/p5tO5RYZgcBjnNGUkiwzmkEpEkBJKEg5kovNrJtoSexkRfZTM+J7VJClruommhAigEmBSW6KHo9CCgzS1AIhgS9ChoRzEMAIoCUqdVmWVuo15SwlxGd062jpUSAjkouQEmCCEYOEc5L28rGqF0h2pZOOFkWs3OZ6uNRXUjAHYB3EcR76olLyU4UOrc/9pU7GCH15uVuKPN8TBEAwGquhmrCVjHJKPY+e7yYMHKWkLPl0vXAlztbSPAw4GicZqYYiM1ZZu2u0uJZqjW62Ejw11060W+nnHqPN1DRjM0plXxnhkdU4F4S2lOZCxP3e922t7puq/dnRi83Y3j07Nup7lwdpP80LjJUKfvW1xJvUWnKtJSAULLdufYYfbsqNw1gZn7OA0+HG2iIigkHklHTjbO/W8Q/dvee9t+zoxNkfPH/q82PVn79p+703zTrEJ1+59OmvHn70yRe3vv/A1r2z8FqN0b8kVvtp9ZoDMbm2vF5c7YSBDANZ8qVxjhLiUaqc44Q4dBvVdYa3nGn2GoXgwnJ7ql5CBERAcjVUQAAgJFa6Evr6WsuBRTy/0Nw0XsXXiRchwGSt9L4btsxWiq/Mt7528sRiL0m1vdzsr63ivffsONtrAcDuyshwNzyckdyGh3/0xMUhvWf9KauB99SFhflY/ciBnWVfAsDpK6vrnKNGMXzi2Plbt02/vnngqdNzAHDnzhm49iobJ7w/XVj9Dx+6Y7waXdcEPMQw+Hr4yLm7d2167sRcIfB+9AO3r589uGdzClgrRdON8v3F4ODs1abEovCqXggAz5+Z87n41M/83QffvufhZ0/94TeO/0qn/317Zn5orH6+vXrXtumivJq+fOrU5UY5+rF778lS9effOP7Q86fvOLDj4XML//Y9t6Zpuq1efubYhR95963FQP7q5565e8+WIPCWq4WLf/L0ryf2577n4EghWO9YGFKkNk7yb+FvGG/FA2+M+2/Z/srcymKrN1krvXPnzKH5tcfOzr9r+9S3uu/biXdunTyy2JwqBM1BOlMtSsEB4NFnrpfh/07gOsqQdgYAZqrFFy8vf4coQ28aCbwJ6IaWtYl47piG/bOTAxccWxk4Qlqp3lQO1lJ9sZuMRX7E2fl+QigYazNlN1fDxV5qELqDXAoeetwXtJOqFgAAGO2UwUpR8lhzTgihWrvl5ZWxkcZKs3fPvukLrRgpcdpag6VQxMpGgq+lCtBJSTijvX4GhKSZBQqSUcvRF1yGNPAoWrRAHKInaDGS/YFOla0XZWac0haRAIK1Tkiqc9ePVTEUhYBlaXZ2sTM72RgtiitrcTWC8bJ3U6P8lbMrCKSbaECgQBCxn2p0uGW0cHZtkBn70pWutThV9efbmRBEUGIJ9FMtBfqShh7vxWpTEKx2M63MlW5v03illblKQTJCKANnnUOcqgUE/JeXe4ySiXrIAYhxNrVa2+lyeLEZO+YCj6WZuaTslnpULXoLrcQTNJCcAPZzM10MNLo8t6my75itPXWlVYr45nKY5+ax08s6z0gUEEKBk85A1Ury/VGjhenzc21KSOrsh7dNXOmkkWQljxc87hATZbu5SZRNtDEO24k2zimDyjllnLIuM44Rch25d6mfX+66T794Ea2rFKOxSK7EujJof8/uXSilx2lB8mF9QFDKGKFXjZlYbmxuXabdWpZFQjqLC3GGzjkHy3H+5IXVUii/eHh+21Tp0lI/KAhOGGek4DPJ6KZ6ITEOAMpF3znsxZl1UI6ifGBbsR4pylQ7BKgFHKTf76sVZbXDKBQeg0pBnkeWawvopkZGqosrN++YPXVuLh7kwhcOQUiWZrpe8ikjgcf7qSlGMsvysh/FCDOjQZy7K6sJ40AAKEHJaCkU/VynynJGy5FgnMS5STPLCE0ymypXL0pGyETdX+7kyjhBacBJ7vDS8qBe9gWluTXFgrDaKgPojNWmHIilpgKAMPCLPqPImnHGBaz0sOwz3+cVStZ6WaqJR0EpYxDGioFgxCIst7KpWhhFMtc4UpQqM1mOLaZthoPUlgLW7GQqFJnGsQKrF4NLzQSABB6x1ilLFvtupIQuJcqq0RprdYGCW+5rbV2mbSCZQVTanGnFExgopRxBBPQoIZQ6hFg5yWC5qwKPNxPtcxrnxjigkoaBFBRCzhgjmbKcQy2QglNrwToDWo9EYqLsZ/mw08CjBOIo7VmcqIuVxYxSOlXxG0Ue+L41DighCA4tI25LxXPOPXmhGQgx180kJco5jxEF6DTuqIatRFkEjtRqHFg7W/Xu2z66lqovHRnsGC2VpaiH3uGFZiX0lpOsLNi55dau8frzL1+MIm+YAjcOtcNIMOOcdcgoGdr2DWODq3tfRADwOPM4xWup/cTY8Jrk/yDNN4/XfuDd+33mtdTajTumz+Rm186pqZGyRfzBe/d//7tu/INnjnzuyRMzU9XrmEIbk/Ebv4MbL0OAxTiZrZcQAcirm91Lq53ZWnFIchq2Jq9bDVxX+hviYrM3XQpOLDQP7pg26DxGj7ZX91VHLSIB6CRZKAUickLcNV+/Z45d+tnbd+FrA5jhqbNr3R+7ffdYMbxpug4Hd1jEc6u9Q6fmfvw3/vh9m/buKNcpIae6TUag7r3GlcgBvHRxqZfmt+2Y3vh8nUyfXOvdsXlsGAwgwInLK6P14v9y+4537ZgBgAsr7d2To9c1D0gqHj9+8Y4d0+sHN4758InL33fzdg12z/hr/JWvwzNn5rbUK2fnVr//na+2AQzxS18+tGnf9p+6e18lkNPlAmzoJB6k+bHzy//qE++LfAkA99++a2J6ZPDUsUe/cfb/Prt65/bR6o1XOw0WWr3/55Hn/uF9t+2aHiUAN++Y+sJzp3/rqWMzlp28vHzb9Ngzxy//vXsPlEP/qVOXe7nOjH3u0srfv3n2Y5+47/GTV37xkZdu3zX6gd1bYUMw8FcLKN/CtxVvxQNXMaQMrXcR3LNny8//6defPH7pB99xIyJOhd4zl5fv/Y4pZL0hZWhbvXi+2btlsv7C0WVfiE8eOh91dQrw0uErcBPsq3/bWgjWN00b39pGytA6vhOUoZMnT33pSw/9ZSKBjSUC9loJi71q7uQcffvu2bJffXGhs6dRfO5Kp5PrXqICybOOYYQIQblgyrmzrZgQJEgoZ8vdHAD7CYQ+6w10o+T3tC34pN3L09xGPh+rSEZJf6SsVbK0sOrvnujnZiiYSAiEAe8n2lCXK0sJ8SRhBANfEEpKBSkYNcZxRtLcCEEFp0SQLHfliFc82ct105iCx3uJBoBqQQxSgwgVj/e1sQ5KARvEerxRWLb2bTdMJ7mJU8MoS5W9fbpyvjPwOStKniP2EsMY7ScmDLhN8EIrGTaxSY9oxIVuxhh4nEa+iHMDOSn4vB1rX9LA58jIaMVbW1BUBPOtVEpOLB6Yrjx6oWkMMgoBmo5jxZA3ezrNzSDVPmN3bq4fW+pd6SSSEUnpttHCmdVBLzenFvsVXxjrstxVI+I0cEoBwCEMZQ2VdYPEpE5dWe6FoWQ+H61VKCMhp8ITwkKzkxvjKJCLy52RkZJx7vFza9X10hACp8QXLODUF3Q08hgl40XP4yy4epAFggWCDZRRxmXapsal2ubGDpTl5/TeRqWX9L925PwdB2740QPbnm3ILz/58r/+0fsAYKhSuu6iOkwfIoDkzOOMUcOYX/YlJ2RTNTjXiV+40rnUiUPJuokepPrccuxLNujrTJgoErE22jBTcB5jQEi3r0oRT3PXKDtEzJT1BXWIiDBalkhpwXMC5WJXAQHOoD3QuXIjJf+CtZKzPDNT5dKpuUXr0A/EIDUMHFpaLHq9RPsexxADn3f7aqIW9JRmBAiBLLflguz0dD9RpUiWQp5bJznVBvqxLhelNi70mS6SJNXdgV5tZx6npYiXIxn5YrmTTVU9a3F5kCrrWr2McOocArgkd4wxxkg3xyDga90cAMLQA8SBxiy3RlOlXceYMpKcuHLRI4CrPSUEK/ocAIoB6yaWCX55NQ4jL091Hoi+toRBM9YOHaXQHOSOskwjInYSm5iknxplHANCCEFCQ4+1+zrwWCj4ai+hVOTaCY8kiaaUzK0li63MIY5FLM91ueAtt1Ip+UpfWWPXOhYJiTxeCXkvMUAJEYAIYcCVdqFknqDLnZQz0o0VZzSQHDjRGh263MGpudVjK8lCc+DA7ZgJd0wUatprFL2BwmbTGGNfWeiBX2KEOkMHVvVS63vMKFMKPeeUELyndUP640WPEFjsZe1YMUZjZXxGa4GMPJEY20lUI5KNgneu2SsHXiXwMmtLnkyUaYR+JHhibCfOoknpECuF0Fh0FAiCRZdYRynhjCDCkBIzlOuxQ5eAYUvxhipbbt26Yi8AvHxu8fvfs18yaRFX+8mmSkFQOlkK13PqAMB8nhizZbTyV10ZU6Pn4/bpte5dmyYIAQtAEAHg4koHACbHquR1scQbAgFWBqnUdnWQbGtUr5M2AoB2nI4Vw+FQiAiEAMCV1e7e2fGNskLD5MH5Vg8R1/ubhxWPXY3yT/72F2Apfvf+rcNxdpXrR1tL20uvqt4RAGX1lw+fffC2XegMXqMSdTP1F2eujEXenkYVriW/njl5hWxpAMC2kQoAfOP4hR+59wBcBwJ//sKpN8u1PX1h6b27pzOtp6+R+GHDhn64t3769Fy7n4xH4UgpPLBrZuPtjx2/+NSpy1N7t/Wz7PVZzt/4s6ceOLg7ula36WbqqbmVj9+y/X99757//tUTRy60fu7Pn/vwTVtybf7pL35ubHPtrl2b1/9OF7X+8XtufObc/KceP/Xl8tx/+OjBoWvyHz17Yud044m5tVsmqg/u2xZI/sD+LVOT4W9/5dQLJ1d+4v5bwuCtveh3H2/9DV6D9X35ZK202ku++PjRH3zHjZEnQsmf/W6ojv7ei2cjweda/QvN5H98156P7pn4yC/8we9+7fn6zmgffNvigfUvM16bsOC1lKFb6pOHmwu31CdfTxm6YXL0lb+uUfFftSYAG0ICxoZJrFeXoR3JpT87UypJVgpkM1PT5aCU83aiBEURiKnIv9BOGKUVTzZTpY1Fh4wzQp11RHISp6ZclLGxaFwn1Z5HS0xopxPtporedLl8+NT5qa3Th9cGHqcMiNLGOVxuZaVIFAOJIJVxlIDvDR+MaIvGOgdoHCAQAoQQ0hsoRCgylhK7tJYaC8tJxgiZqAaM035qc2P7xKTahh7jnErBz60lBIixeaPkIZDZWnhqqf/ScjdTNrdQAIgzQwhOlP12otPccsEAMBA8ZtQTtOTL5W7qB8ID0u7nvmCAjhNIc4uAI2UBAAFn40W/mWpjcc9oJCkvCt7p5whYL3hLsSl7bmHgKCHNXl70+P7x0mIvPzBVPd0dKOV6iT6x1FfOWYeUkhQcEKKMiXPejxUwer4dlzzey3RJiq9fbI5GciVRg9wVOOWWAXPWuhtnai8tdhPEkVA2Cl4zTS+fbzdmR1b76mM3TjqEgmQlj4eSBddYp6/PFG5EQXIrsLaBYwYAgtmXFpq7R6vv2r/ljw+98vzZuS2lwh9+7aV33rz13lu2r6uUDi8e/rr+ApxSADvcTsXKfv7UstI2t1Y5BEo9jzuC3b4Ofd6PTRjJ8aIcKDPQFigBhHIkB7lmlARB0SAyTp1DRKAUEEg/MZK75W7CmZCSLLeV71EpaaxRaesAAo4jBb9FMMkyRARrywWZa0cpBL4oCUIJVEKxuJbOt9LRktdPTdH3aiVxeTkFcLkB51woSLOvKaODWE3VgljbZjevlb2VtQQBS6Fo91VmTaXoNQcaEEfLfj8zjQIvhKLMPILY7uWAkCnDwXqCKEUp493MckEAwA88AiT0SJKy3BiKtlYOgRBOWSdWgWDWYjGSyjggpJfZ1kBVQp4SmaWqEIildiJ8YREjj652beSzTGEYUnTAOWMUlHa1Ai+GYm4ldYiryWCbVzMOjUXiE25BAwEmPGbHRn25SIsFUSj4TzzHE+24lLlGS4hgzFoVBLziCSaBg9DGIECeG0TqCepx2ko1auN7vFyQ/UTXyr7PWDc3EWPViPRStdLqDBY6WT+LIn9622Rowz9+ceGOWl4fq/ucxL1EGys4XRpoSpAA8RiLJFvup5SQTh5vrUpJiULSTJRBhwQEBcEpY7SfW+VwLVHtNLcOB8o+d6XzzFzbJP3d02OUEADSKARJrhuFoCB4wFh7kFaqRUpIIAWjxCJyRqgjRc4ouequbRGREAdgh425xjFKxIactLkmQDQEIiy3+1NjZeNQUqqtnSxFADBZjta30cc7q++a3fyryTMzo5U3bO7feJAREjvnM5JZBQCUklG/tNBbqFf50fbq9lJ9aEWcJfmNhdLH7t63e/RVUwJOiNmwd78Oryy23jFRPXTi4nv3bd143CJaxFjpSL6aRbKIxy4sTY+W3etmD0bImXvnR4sAACAASURBVKXmrteaIQx//sLh09S5e266Ov51zQPDWOLZs/MO8e07NgGAdhoRBrn5w5cvvG/n9CvzK5E3ZMIgAHnh2KXCvquk/6dPXrpl65R17kyvtZEs9E06iZ++sJgbe3DL+Hyn/4YXDPHIy+d2jY9cutL82N37rjv1S18+NLV320/fva8aekO60Xos8fzpy4EUN86+2jb96ZfO3bm5cfNE/WRn7fZt4//ng3ceubz6m1975ZPPnIa4/dWPfHh9FX55sWUdbqsV51rRtMufe/z0H0zWpRS9JP3cM8cnb5j9J3fuenDftpInh69440jjl3+o8ZVXLv7Knz71rz/+HngL3228pTf6pnjHrk2fe/zl4c8jheC7ojp6odX71a8dO7zQumfP1IHNjcmtxe993+7TZ1dnou+IXi8BoNfKBfffvvvPX6fGOFMtXmr1KCFDyhAA3L598mtHL7xupG+BkydP/sIv/sov/tKv/pWCAQAIfO+G3Ts8T7KrRe3hfH11qbiz/8rOseI7ZypbK1Hm7P7x0kw5uGGkxJAITksez6xrpoo6aBQ8h1CQNBB8ouq3+3kplIKS0GMGUTscJNYiliKfM1zsprUC7yZJruH8+XnnsD1QWttiJEbLHmM0zkwcm+5AtXq6H+ulZrrYTFrdfKUddzrZusohOOSUWMB2ro7Pd1uJLhf+P/beM0iy6zoTPNc9nz6zXJdtj/YN0+hugDAkQYAOhEQnkiLFIUeiDCmOTOzMbMxKM1KMTGiIEXepUWilkQmSohElesIRjvCmge5Gm6q21eVN+nz+uv2RVYXqBkBSGknD2MAXGRVZL9+7z2Tee8+53znfMWxGMcbLnTRIBcJIA/j1GijNCK43k1BIy0C2if1ATC1FrkFasbBNSiQWEiwKsVKAIOcZtSD1LNJfMHM20YAYRkrpMFG1IFEAnKt2yjeWXKW0QqgZcUZwxTaZRnO1cKodbyw5W0uOVvr4nF+wjWdnmq5BhNBhKk1KqqFSWmOkN5c9h5InL9UaUfrSQssAvL3sUYJSpZSG3oxlMxImwjAwIbgdpoggrTUXqhlyoYEwhABSqQlGgFAjFQYB26SE4Gdn6kpripHNyIKfNCK1ZdvQfDvZVvF29GZ39WXHim7BMczVYAa4XFr0x8Thkd5nppdu3Tz403u3vPGarTuGe77wzMnJ+foffPHhtX1Mgk2CDYJjqbpS7t3ta8YBQejIfHNzwRkumRvzGROTis0ynhEHXIMOQs4wivwUATTC0A9S0JoRPFiw40R2M4wJRgZBBsONThJEgkslhIiFLnoWI5pLcCwSxMI2SCVvSSGVVDnXCBJV9ZM0FbVWgimhGOU9FsVSK5kIFUQi5opgbFKy2ObFjCEV2JT0FS1KkYFxEEk/lgSrtp/mc2bOoeUsK2aMIJYJl1EiOyEv5UyputmlpOiZGoEEzDVIpZNE5GzWW7ApwQqU1BCmWgBgJerNkKccACzLkFpnLWJQIrjeULTjmNsMCQ1hKhebcdahCCPHxJ6Jo1jaBomlZhSKOStOhG3ROOQuJSYlWZulqaQEy1Rprff0ett7vJ68Wc5Yw56bMzHB6NqN/QhUhlKL4CAWFsMO1RSDa7IohYCLAc90EUYANkUZixKETEqqzTjrGSXX6qSiFcpqEHdSmXMZI6gnaw4ULYNhSrFpECk1wqiYNTM2Mym2KA7CwCPUxLiUzx66cf+v/dp7fukX79q+dWj50kzZjx6+7+nvfOWBb331oZdePFOuZKVSlgGWQZXSiZDtlHu2wShBCAIuW6kEgiyK/USmqW4GMuCiFfNAyZ0V747N5bdt6R0rOJ5B37Sx8vatfRtcY1fRQQgwQME2Ay5KtplKJbX2Y54zqJAqlopihBBovfJzVRooRgQhghABIAAYIT+VlCCEgGvdfQmlAa2Y791ulUhVa4VbBkoUI0AQCwkANiPrzWgMgDHpybqv6gzAqqHchdQakI5lyjBjmGEgAPDSXPOxi00/Jqfqy0eWFx+YmRmfrdY70Ww7GChl4Ef5/F07dN4PN5RyC01/x2C5ezqttdSaK24ToxHEmXUpChrg1OTiwZ0jr2wWATw9Wzs43CPX5UMDwL1Hz922a2N/KTtQflmE8JV44NiFt+7d0m3HwMwg7CvHLt4w0tuXMS1KTNZdXEAaoB0lnzqw5bbtowDw5EuTQwP59XR3N1jo6bMzN181srZxPf3yyNm5a4Yrx2eXfyQ5gAGKGfva7ZeRAw+fmnxiYgoA/CTZt+FK3b77nj1z456X3arj83WEYFdvcbxZbbbTt+0ccwx6aHP/HVdtMKZm3rB95JbdGzEgAGjF6UPn5964aeDR8zMvPH/uZ9+6v3XP796+a/izDxz7za89dfDwzl89uO0dO192BrpXW/OjJ05f/PRdh+F1/ATgdX7gNfGuA9ufPjP9rWdP33ngqhu3DL5trnZkZvmOfzGVoVdCA9y4sb+GUYeiL1yctR2xM98rG3pmofmvoDoKP17IULc+8Y9fqHh8fPy737t3YuLMj9rxVWBZ5sED+yzLzGYys3PrKxK8PLKbZ545ueXA+eWAS+UYRANQClKpyU6YcpVzKCCkQQVcmAzP1CMCqNVONlRcJXSQSC5kEMmBohXEgnMtpQ5jUc5YDa62jPY7Dqv7RCqFMXJN2vSTjGvcsaUnEeqpydpwMTO+4GcclrXYYivOZ42N2fzFqt/hop7IhCub4XontQ3a5KlJaaLFYiO2LSJihbRq+5oxXHBpVWRBQ72daEBIqBZXgBACnXB5bik0MaIEVYMYEEoBAJRtkCASnkNrPkcIZWxmmzoR2mA4YzPXJouNyDJImqDJepCxjETykm1wpRsxzwEZKdqTtehSPTg8Ui5S/N2zyz+4UDUItighmGulbUqDhI/knQv14ELNr7hW2bW6K4lhKk4tdg4OFy82IgB9oRaUXOOqnszz002sgXN948bSkbkGwshmpBPwWKn+gp2x6Fw7NjGebwUSUUSlxUi10S7lsx/ZP7R/Q+H0YueeMwug+Iwv3r2jvzuLKwClNX1FPMAPwatGG9881v/kpYVrB0vv3L352y+dM0q9+w4LFemnT106uGME1iwYDSbGGiDkkhKELo9euGmkxKWeaLT9UL4027yqP9uYanIhM46RcgkITJsu1aPDwz3HF9oMI4zAIwQQZB2WdWgtkA5VEpGQEM/GYaojAUUChOAw0DxNy3nTMUyEkMZYCMkoipK0ezuMUtNEpkEooY6FOqHIOcw1CVdQ9zmXSgFkbLrc4VmbEIIQQo7Fmp1UaB0ktC9vZR2IuGzGckPW1CVkEFjKsEuLYV/FXm4ltklsg0gNtoUjX2oEFEPRZQpQqmSqIWcbUaoKFkqU1oYrZdJfyjTaLYyQ7dmpgoYvHIfGCa0GqWEYnUR1glQK5blGJ5E2wwRjpnHWpQ2fC64Nk9gmVVonkcjlzHorHrZcwFpjnLWZHwkpdCPii35czhtBIo+3OlIqyzTCVOlE2TZNuBwu2JhBDKzRUBmDLfqhSfDZmo8EaA3thKfADAr1TuKaNOViORUYobJHcy5LYt2Oxd7BfJuLLMOK0XYqo1RaBmr5qWezIJYDWdNguGhlFttRM0gxwdhhgpn9OdvKjG0ay//1s+dvvf3wSN6Wjj19ce7s+CQjmMecMG0xlAqNFGit8haLJaZYmUhbjOUM2pcxFztx1mY2ozsrmc1F5+RypxqlzThyTYoJ6vHMMIoLrm0aLJaKIZSxDT/hPRkbATTDBCMwDOraRjf4hyDUzRM40Vjake9Z/TmvjJIhlznzsnk/VVprRRHmSnUt+1jI+eVmOe924+WaUaI1zLWD0uUS9QBwfqHWk3XhFcFCXS+6+7d76g6PHWqS1Wpik51GiWUuafxnxyc3T1WLZU9pjRF68elTidKlgudZxvrOi9aVMFu//Vyt1es5Xcqi6DlS6/FmdUeh0t0BAYRc5KzLSMLZ5dZwz8va+evxwmz1P735mvU9XQN8+bHjhzcN9hsv3/vZV1Qie+rMdD1IYqEmFhrb+wonZ2vHmr5CaG9/KUi5BkhSrQ2OAC7M1RyTLCw1hw5lNMBj5y596LYrg4WeOjOF1mUSX4GvHz//dx97ay0IXzWTuIsfQg788T3PDL4WOTAxlbWtfZtfrnnaLUCmtFpshttKxS43O7Pc+r2/ure8ufK3v/ru7pNqxelfPT/xpk0DJ6cXR2z7qIU/ess1BOO7rt38H798/x3X70go+al9W511qzkAUPOjz937zCffdrDgXZaJ8Tr+d+EfMbn+/x7dFIK1f2/eOTpdb3/9oeMA0FUdPTpXXb/g8c+LbqjS+i2xSN69ezhptd83UNmHyI58r0HIhw/t3jpceeT4+ddq558R3ZCh7vtuyBAAlDzbT9I9/cW1wmTdQsWv2coqXnzx6Gfu/uO7//tn/zGcwGUPe8+urZZlAIBpGhvHXl47Wb+/Eom+eAwDdBLx5GxjLkzGl/2IKyl1lCoJmmHgUrdDmaW0G7O6oeiGsQwS3mwnoJFrk3o7FQrKRbvimUrqpXrsx6JUKLgmGRjpXWpz1ySM4XzOMk3yUq0z0fSJSVpcZB3aDnlXDJ4gOLXUjpQyDTJQtA2K652UMZwKJVItpRJSx4lMYsm5TBIRxLzVSaqtJOMaUkHWNRBowrDjMINgRqnBsBAy5rIZCq5AKK20rmRM0LqUYVSh/qIdpKLWSQFAayWVtgzUCrlSKIhlzqKVvJU32YHBfD3ksRR+zHf35baUMhigFcvvTCyeqkV8udqIuElJ1qKuxQChbT2Z3oxTDyIQaaPRuX1L5dM3bPrAvqFtvZ7GsGtD9kzNn+1EM+24lDMVwETdRxhGS65B8MV22FX+JhRpBDYlhzYUt+e9doenShqYbshb3dk6m/FqM9M9roEAdvdlP3btiNDENsjdX3kUABAAWonYuQw/kiJ45Q7be/JPTi09cH7hs0+c+na7/vO3bNrcX/nQW6/90kPHau1Q6ZWwOYRWXg7DDCOGUSKVw+i5ht9tlhFkU9rrmWXXrJjMItgxKRfyLbv6t27ImgTdsK2n5icUdJiqhMvT1U7FNpJUtjpcaQ2AAj+iGLiEOBZSSiFUo5MqrmyDCKGb7WRypn1+NuRCaECdUGVtqpSijPh+4lg0TDgG4tik3k6lVDIRlkkJRp5JolQKoQBpi1GMoZQzldZIofl6rEC5hgasEyHrUZpIIRAwA28d8EqONVJybIJLDuvNmGGobURG82ZfhpVd3O+RrIGzLLWJ6s/Z1NI1Iw0sXs6QkqcG87B/c+/2QcsRzf489Huqv6CjWLd9XmvGGZsNVdysTQ2Gk1REUZpiZRJSzJgFx5Aaap00TlRvznFMYtl0qh5yoQlCCZcGRYaBz9fCMFEL9TTgmkvlRwnCyDKpyUijFfqJkFJ3UpHEKZe6wyUjGgEKueSYKdBNP4kS3omkydDGkjOac1yLZS3aiQVKdT1MLYqn26Ef83rEW0FasphJkFQaYRxyFYbJ+eWgGfDlUFoGC5MwTfmOgaJnYS11j80W4/D/ff+hX33L7jROMMYiinZv3zBcrri2mXEYaFRwjFs2lW4cK7oGZgjlbKMvYwmh5vz4hYVWpPVymA5kzbGiPdeJESACCDRyDbK95IWJdA2KAfo8y8BIA4Qxz1oGaBBKL7b8nGvVW8FoX7GbmtwNEOp6BSZBa9WIpdZcapeR9T1CKM0wwggRhPTqj99jdHax1ZP3EABFqBOnsZAXau2revIaQGidKiVBa4Azi/VdI71C664qaKpUt/Gu6OfaS2ptEWKspBKtWPNLneBt/YX/dvPuX7tua6WVjj8z+dwjZ85P+81m8A9haBpX6tBfMflqgEjIc9X27v7CctPvK2S6La8fIxIhAcBcV7KAS/30iUs7RnvhFXj0wtxtWwevcAYQwAMnLhwdn7nrhp2vNdBogPuOnTu4dfDodO3Xv/T4LX/49Y//zcPfuTgvlZxrB6Ch6kd+mlqEmYQdP7dYKWffd2B7KvnJufk3HdpoMLx+dR8A7jt+/rVkRu87PXVwpO/7E5PryYE1rJEDtXbIMMp71o9PDjT96NnT0x+549q1Lcfn61Kr7T35E9UlBqQvs1J7+GN/+JUTYedvfuVdG0q57sP60tHz+wdKJ6aXBlz7yw+++JYDW7uMxzeOTMzX248t1H/55u1rmSrdm612ws/d+8wn77i+tOoMrLmsr+N/F17nB67E+hSCvkLm4SMrej79Ofebz/9TVrX/Ceg6BjY1d/dV3jAykCFkW19xqR0OFTLvumHnXZ/96hcffPFfQXV0vcrQGl6pMrR7qPeFyfm74NWDHcfHxx96+JGjR4+t23ZZr++y26/AlYNDqZgvFX9klBQC0G7cGcaTC7K/3kkxgXaqY6GCRPQUzIpj+pKbCoNWkgBFaOdANkrFvv7s8YV2X560Y0EQqmTNOJW+H7OMVciwvGEogHaY1gOeCu2YiEtIlLAZiUJxyU/9WCKAbjBumMhsxkAIhREXChhGtomDSOiVuQxlPeLapNFOSxmjGSSJlI5JIoFAa6URJUhIzShKuKaYSCG50BoBAqS0ooikQknQSANg6MvbnoWVpkNZ23Xo+WrgWSzlar4RCwlI6zAVnAMg4KmsIygQGkk52QqyjDUTrrSOpA47scPISMGZWOx0hNyze9NspxNwMZi3JYbZRnS62ikb+Pnjs8NbBlObzwZRZ16mQrmUOpiaCGONrx3In1rqLNXjsmvkTNrxeTvmUmrfT1OtAcMGz5ZcXdufPzHfOjbfSrnybHbTpvITk9W+rO1irDV+69iOzz969P+483AnFWXH/PQNm7/03KnPPT8B8DZY97O8Aq9KAvwQHB7p/eVvPFHsyb/hqsHfHdg432z93Bv23fvCmdsPbf/s3z/2qz99Y/lyIXDclSVBiGLEMCo7ZjfBoBtsnbOYVIpL3ZcxMUaBECWLlWxjbil880gZbyyfrfr3nl1OheJKYaltm/oJV0o7WWbaBpGoHaVSaopQnEjBkWNgwyIWIVmHmTZFGI4qAMB5l6iYKSUZZWnKkYZUqoRL16JBLGdqSSHD2p0UAKTSCAGmiABWUrWCuJhx8i6LEhUJ2fS5T1AqURilDsWRkImApi88hyCt5usRcViioOWnFZfMt0W7zhOPSITaAUcE26Y91Y5nFpqORfYTd6Bkzi8155qwsJy8cG4RhFnc7MY1mXGNhAsLQzPmO4dyQSL7PWs+SIsW1jYJUhWEokt7FRw2bNvtWAAgz8TVJA0D7lgECM5ZuJPIiscKtjHfjhFGcSJMAs2EhzEnlKRSC6EUsJSLqUZs2LzVBkQoo8SP01TIgmnOt1OtAWuds9hCK+ovOrOd2KRUCAUUx4mcQalUSmM15Nn9nrkha+dNhhEEqTxZ7Tx+sW6bCCMrScSevmwsFcYojlzHYFnXHMlnpprBYsDrYYwQO9OJVSGvMJ6vdoYG8pdMYQHcXu6Zqzc3VXLnGlEjSrXWnknyNpttc8+mKuEIUCqUxfBzs81TS52KY/Z75taSZ1KkAFoRv1gPrxnIagCAlaJdjSh2Ddot0VVrB3nH6oSJaxsKQGugBKVKSw3r8wFSqbQGRlbK+spVvVGKUSCkiXH3/Vo/mlpq7N60sgQep6I3Yx9dbG6p5FZW6GFF0Gy23hos5BhCsOJKAEZIak3xy4r+UmuEUHf8W99VLzX9w8M9bxzrA4A3DJbl26/50kPHPvo7XyzknF/Y0JMzf0RdKqm1Tcl8J8wabKHWumasn6xextoqQDtOnXXOgNDaImi22lqrsbW+tdOLzc3l3BWDzFy9DQDPnZz6k0/f1d1yRfKABnj6zLQG/d6D2w3C/t3tV883gvvHp3/tG489U8n+3sMvbm/G/cOFsaw3kPMePz35teX5jk7PRHXZQXd//XGK8HjPUnHAg1Vn4Plz8wih9eTA+ku6b2L64OZ+imE9ObDmTnTx6OlLuwbKExcX33PzHrgcP4Qc+PJDL96weyy3SgG14vTJqcV37xqb9BtprPdvWPGgHnrh3KMvnL/xxq1v2r2SNHh8vh4LscFzzi3W/vCLD+XK1mAmBwBzTf/u7z1tbx356gffJKnshhV1T7fcCf/kvmc/dfuB0uvMwE8SXvcHfhjesG34m/e88J0nT73j8I6btw1/9eSlhU7Y+9ok3f8iupLGCKE1oSEEsKWcOzZX29lb6KqOAsA79m25575jm93iT0jI0Gupjp4eH3+FcNA/1hNYeWNZxp5dVxaRfQ0gAO0F9QMuLGY3zbfinGvEjbjgGR6jjYQLrrhUrkEbfmox5Et+VTlzdKHV65n1IJFSlzxDcj1UtAum8eJcw6B0QURRqAkCkzI/ioRECGIFYFLEhQaAYsEKA84o7sTcMalLSCvmnsMoQRihIOKWSTlXGiQAJFy3/RQAIYwowYDAMqkCyaVCSgNGQmoFKGPijpSAECaEMZ03zblWKJRCGLKMCqkTKRebySJoAFhqJzmL5jzDj4UfcSU1wVgq1PQlxkgrZTDUWzA1IIcgrjUQKBpmlIqTy20Q2rXphWboK1lxjUv1MJVQMiBIZD1KAdDpCwtxKjO9FaVRj+c9ML44UshYFMdCGQS9MNPK2HSqETUi3puxqkEapBwh1E4Eomggb59bCipla7Edm4CPzbVjLhEgwyAlx5hvx5RgSkBoAIBbtg6em1167sL8zqEeAHAN+oFrtj97/OLjpy/duC6U9h+LVzoMP71jbPdw8Z1bhmthMN9AB7YMPDExRSi+847dd3/tB7/+npvWXAK0uiSJAAyCV5YbV9OOhzL2yVonEepcLdha8eb9WhrL+04vSgYNPzmz3L5hrKJLkLw0hwlyGYliYVusE3KTaNek09XOso8ckxSzpmOhVEUOsQ0GC40wYqSYsRCgbNaSXEipDJMYHEutbYuZDNIoxkCCRJSokXWMdpCGiYpSARpiLgGQEroZCdck5YyNMQz22EGsZpfD+UYyVLKb7bhScACgHYiMi3tyllSqHQs/FnlGqn5qEHShxhEChhGluBNr0yQUEw7Kjzkan48wfsKgQqrNPblSDs9Vfa11GqeOgS0TU4xrUdpJEcUaMzzmGMdnm1nH8EzcSlSaSsdmzUAUHEMDLIdpzBUDYJQxhK4eLY7Pt9rNiOUtx6IFlyGNEqkKFtMaZwhtYVKPOMU4R4kP4MeikLHSVJYs5vuQs82iYZxKRMcPojgMOyHByECQCKkR7sQ8a7O6nyIEWINj07JH/VDUfZEmYZSoeiAMjAyGRwr2qUUfESxSjTXkM+Y1G3IbC55W+nFDP5xzppp8cy9c1ZO9d3w2Vfqp6YAhACEsy4yiWBl0r+lkDbMdC9tyl4N4Y8G+hNBIzjq13MmbNFc2C54phTpXD3pcs53KXRVvrhVVQ35qqfPSYttieCBne5S8tNje1ZtpRkk9Th3DAIBqmHgmMwhGAPNNP+eYzU5E8IqOkNRaa0DrFtNjoRACi+L1zEAsFMWIK80w6noO6z9tdKJi1sUIaYBEiGrMn51evnGsv7sbXtXPPzW9fGjzcLd/oVUer/vR+kEcAXAAobUG1G2TYTrbCsaK2bVcYYLQDbtGNOhSwQOtu344XI61/tiNHUqVOr5Q/9TBHV+bnNva97JBvIZ2nJS9l8WCCEKnLi50KxOvR/eOnry0cNeu0bXpp/vm2XNz1431H6leGCjnrriatZHhkVOTh7euBBIjgIGCW8rbO0f7/sttV2dN489nFuamZ7/6xLEvPXJkYq66sBhMX1rOhwYUIWHyYzdd98CRs7Unwv/8wTcXXTeR/NFTk4e2vFzObD0ePT93dKb6Aojfuu5V2IMuOQAAX3nipQ8c2GkQcv1Vl4U3d8mBwZ2b/CS5dZ2SKQAcPz8HAHs2vRwp9KWj5w8O9xQdc2Kquq28EilUa4f/9zee4D32f37vrQCAAFpx+p2zM9vz7qPnp488f+7n33P9aL7w3afH62Hye99+gvcWjn/wtrJnI4AL7UaqZNf3+Ny9z9y2Z2NpnSn1qvf7Ov6V8Xq80GW4ImToXQe2x3nju0+fBoCMybb35F+Y+RcMGcqZHkJofUV3ADg00vvs9PLOvsKleru75d/evH/rSOUbT554tTb+mfHjhAx985nTM9XWN545tXZUo9H4zN1/fPfdnx0fvzI0qDuNYLQyn1zuEujVR6sBUFceW2sNoPfs2mZZl4mxvgJ6nb2HEAIvqKdScaWkUEMly2ZIatWXsQyCLYRshilGedvgXD0wsciFmmpGnVhkbNoIODbxsp8+N91Ybqcz1bDtS9skiVCYQl/JzntmIWthhBBGgJAG5AcpNTBjKOMaqZT1IMm5rC9jFm0jikQpbwmlLYNICRiDSXHONTDFUukNBWcw50ipbBMjAEKxRZBrEdC6FXOhNEIgpAxjGQjRX3Q8i2mNKMUFzzApBqQdRrI2yVi0FYlGkIYhL2eNnqxVyRgAWkmphKIEVfJW0+eGhGt78yXL6LMtAFV2zE7AK445mnFkqkqmEXP17w6PLZycmPPjVhS3OsmLT7zgOM58FNm9ZoTEzh6vxyKHhgpbSl4QCwVweKR4zUDOZjhvMZuRobxdzlhv2dLb65mMoAuN0DHwcisOI9GM+OayW/KMwaz1c1cP/dqNm37l8MaPXj081fBNjDcV7ZJr3r5n4zeeH88ZK+sUrmUM9hb+9r4XVr7X1+h6PzJqaD2k1nftGr601E4UL7puzIVrsENbBo9cnN9Z6rl239AfffmRKw5ZM00w6n7joAG6KRYIadekU81Qg2YY+THfXHYbjYRQ/K2TC8/PNB64sKwAKaWDVMSWavmJQfFY2TNNJBQ1DdJbNDMWbQYKI2gl3DaoaZt+O7ww50dclT2qlEqlMhlzTCNMpVZosRpYnt3f4xQ9M1VQ8pjn0FbALZOirsa8hphL18Stqb8F4gAAIABJREFUUJyb7ZybD0xG8i7pL1op1/PNxLFZHPKLi4FrUw06FareSRBAyqVEqOSyomO4DLmMZi2SSmVgFKVKgYoTlbeNazZteOPeTW++euuBrcM2Q/P19oV67Gmz1Y7nanGYqMW2nwg1VHFci0khn7lYawVpfWl5rp1gghMJBsOWQQouHso6SikuZDMSSaocA7V4WsybSuvZpTCIhJ/KS/WAEeRQShAxTGI7rM9jBiXNVEaJHMo7A7ZpEdwK41tGMnmm8zZ755aeOEyD+eU0TTFGNZw0U1HK0P6CZRJUcFlf0Sq5hlCoHavrh4pv39rDpZ5pRQWbYYpeXGh/Z3xJKc1Aj+XdHsfgidQKolQEUvpJajKay1iPnV96arphGdQgVCq+UG0N9BTAYUmUyIQnQUIAxvLOoaHiYM6dabaUVoygomOO5b2dvVmioRFzRtCCn2QYqbjGvv7ce3cOfGTf0Lu29+/oybQj/uSl+kjewRjNWuqRpblTzSWKUSNMTIKlUgCw3AmLGbsWhltHetYIAYIg1V0vGxKpGUEGwWucQPfFCKIYKdBrGp1r/Uhqffz83FBlperwcicayLll1xrIvmzAdW3o5VYwWsmvbXml7y1XbX3QmiBEESitldY+T47P1zeVsuv3NBjRve6G3vzq/PAqUFqr1dJpALDUiVIhHzk5eWA16r07SsQyNTELEu6ZBqzzYbrJxGvDhVxNHV7shAigL+Og1XmoewFPnL60f6jvTddtXWv5TKu+PV/W6zyfbz0/fuuuka4t3oVnsI2lTMjFdUOV/3Pn2PvGhj/zc2//j+++9cO3Xjs3XGGMnZqqzs2HKKXLSXTTrZv3bB76zf/5/UdPTT/wwvmvPHni9r2bX3Ws+8unT/ds6v3UaP/B3r7xZrW78Qpy4L5j54ZKuUeeO3PnjTuvOLxLDvzCdVt78pkryIEnT04e2jm69syPz9cBYFdf4UR1Ca9GCs0sNT/6+1/ev33wIzfufePujQDQjNM/fXZ8SynzWxcvff/xUz//3oN3Xb1z38aBN1275Xe+9sis0H9w0/6KZwOAz1NG8Ggml0j+2MQkANy4bWTtwl53Bn5C8Lo/8MNw885RjNCR8enuv3squaNz1R9+yP8iukawWh2Suq+bNvY/O72cd6zpRgcA3nXDztNx8D/vefZHNfZPx9pg9FoqQ6fnag+NTx+fr331yVO/+5f3L0wsfu6+57qfnh4f/4M//KPx8YkrhnSEutYUwhitjXSrw/LLQ5/Wr0oa/EisyOqtnRIhuGrxiGkQP+ZKg23SsZJXbcWpVAqhRiSu6suMFBw/FHnPiLhEoG1KwkQWXaYStdxMTIT783bOxHmDKQ2lrNUJRa3NfT9MU57zWN4xsg5VWimpeSyWmknH57bNTIuFXC366WIzchlttJJWJwki7jIiJdQ7aZyqNBVBxBXo+VbcDHgUyVQozqUf8o6fIgSwEmGEpNK9BbvRThcbcZRIJXUr5u2Q92QsrMG2aRCriIuBrEUwEhpSrk2Go0QYlBwaLW0bzDJErunLlz0zZ7OMRa8ezt84VsxaRqiEVHopTKYawXKYRkK+e1c/l2rP/m3xwvRMIyQE//ZHb1cIPn3bjrf0V8qG1WjWD4yUH59cfvpSvZFyIfWppc7Ferh/Q+627T1v2lyJhbxlrDzTjqJEZhgdzNoCEMbopk3lvM2WwtSh5N8cGN3dn8uZLGuyg8MlrfVcO+3NEQDYO9zb7znPnptd+14HevPLTf+x4xdf5Tv/oejO9HLVbgiEWJv79/SXDEYmFlvtMPYM1o6St+zZ9N0jZxjB2zf1RZw/eWLylQ2udAql0Kop0IxTgnHOYnmLHp9rJVy5Nj0x13QYKWVMQPB3R2fueWl+oRPnbcooJoH2QzFfDY9NNYNQJansz5iMolTInI0RwibFk40oinikaF/FqWQMRAhjlFEspA4SiZBiBlVamRQLocJULNTD5WZUb3OtIU1Ff8HMWARAGxR3/HR6wVcIMUaagSAIeQ5VUvmxcC2CESrmDYRxrZHU2jEmwIVAgCyKDIQQKJNQTFEsgWHciIXBcBRphDQjzLTxYCUDSo+U3cGSM9ZX2bsh46NESWETtNSI4xgyrmESY99wPuRqsMfqKdqcOlEs5pZCglG9zQsG6fOMZhxpAK6UZaK8wwjg5RaXCip5G2Po+HHEJRBc8IxIyFTpOJWugecaocK40U7iVEVSWja6Y1tlcWH5jx870TUW59qhZ7PSxiElUymVG6usQYaLXp9r2oz2ZcmQZ3UikTFwxmCznWQp4psrrmWiH0xWF/zkuoH8bVsrmyvuaMEZLdpX9WYMRp6YqX/v3OJ3Jxa+f25RIkII7iu6i1PTe4tGwtN66NekWI74bUUz9sO9w+Uzpyc3ZWgQJhfqYSMWtuni1J9sdExCRnJmv2td05d/68bew4OFoax980ipaBpFy0AISa3LjrGp4F4/VPjUwY3v2TmQNegmaVzqwLF6+vjiwkS9nnXYhU7jaG3hzGLVddlC2EHZlWRNoVbS7pXSsVAWRVrDmhtAMaIYrXBcSpmvkaC/1PAHejybmhggSPjmSr4Wxhty7hVG/3I7HO3Jv5ZDvrZzKBKHmrDO/sYILXbCLZcr9jx29EIlxT/zzusPrdO7XI9UrWgBE4QIQpP1DkJQ9aN2wtsJH291nl+eH8nk60kyF4ZPL1ZPzVXLGVuuIzRmlltDPfnutXavpHsjx+Zrh0dXgojWm6ef+e6T3eSBtWtAl+9w37Fz77xm29qBXXRX07OmkQhZbwXv37/NNdnGvtJ8J/SOXxrYu+2vTsx9+C++v0TZ147O/o8HJ75/ofaCLz/6lw9+6Le/sHWgvL61tXM9dnHhm2emd8TpTRsHHUq358trLgEAdNLIIAwAvnvkzHXDfXnPeSU58IPTkwBwJA7ftHkQ1jkDryQH7j8/u3+ofLbVXkjEtUMrkUIf/f2vPD0+/d3j5z5x27Xdq/rM4y95lHzu7NTe6foffPwO21rxiBRAxjbqL1z4o3teXPYjBDATtAecrEVYJ+QPvnTxU2+9fu1crzsDPzl4PV7oVbA+haA37x07NzdXbQ2UczdvG/6LIw/+qKP/GXDFCL2t8hMUMpQKOb3UfPzYhUeePTO/1Pz494+OHdr3/7zrwF8+/PxX7n9s5sQL4+Pj3bEXoRULqpvihRDq2voIAEDDSkC9BgCtASGttQZACHWZgZXBsDuKHz8xcejA/teiCNZIhhWXYKVlhBAcbh1/Jr8nSiXF6EzNNwEZGFU76YGRgsXIhapvYiwAxvJOyTMV6MODxaUwcQ2KFJysd3pM9txstc+z/uGlCz9zYIcf8pcWWlPzHZurSsnrc6CjGGF4W9G92AzTRpLNGFEkMNFZx1CpNi0WpNI1aZgq08Auoxyg3olLOQNawKWqB5wQZAAmBi6YOGuwqp9Qiv1E5rNms5OYBBsUdYK0kGGWQV2LKgBG0cxSONeKYi5aPrItGoa8FqamSQaylmFghnG57E0s+Y2Iv2VrzwN8iUtlIdyXtaab4a6erFLQDtKca7SBNwIODiCM3jBammpENsOfvHHrnz7Q3D6Se3IxfniqblD26LnFO3dtLLsGF/qxyUbKhWebowXn7Vt7/VQeX2yNFd3pTqQVdBI51YoODRf/5rlLBkFS6529Ga20w0gr5rZBP3T9qAadYRRWZ9Y3b+5/fraZd1B3y8Gtg/cePXv9Kp39rt2bAeDzDxx5w56xtUNeCYxQovX64Wz9IiUAuJSuX7n84L7NXzp6LmsxRkkzSgqOdee12x546cJb923++PsOfeXbL2wdqqxPJOiKn5DLYxg0wN5yboNrEYTiVJ6r+fefWZ6rh0KpD18/MuBZR2ab955ZTBLJCPYTGXNNMNqQtyUBrDQg3IhTCFXZs6hN/FRJAFA6SGQuYxQdWvWThCvKqJQ64aovb3cSvsGxPJsA6EYrTgQyDGKbLKymJoOCZyGM6+1YCB1GHAN4rhHFwg/SOGLWgNuKtWngWOh2wPOWgSm0gzQWKmrHCKN8zlZa81SkitbbcRAry6FKgYkUAmiG3KIYSwDQedfgXCKEHAYJIUNFK/QtAEhTGQttW8Sz2WiRnl9M4qZMYq4smsnSMFVxIkp5JwxjoWCBS2yiMJZRKrOmkbdoI+axUBiDUhALXcjbjokXalE5ZwWJjGJJMW5GIhVSK5VzzErW7M9arTA1NU6EfPvV2//m/uNPXVo8YGVOTjZSxiRSoh5FUTJdCz98Y6Xi2cth0kklaNmOxaGR4kwnmmsnQcpLrlHvpEKhnGMiCc/N1l2TlR0jVXq8GiRSSakPDBS2l73TVf/p08rA6Jr+AiXoA9uv/6/ffrw/Zx87PT822m8SHAUxQajYk3nvwav+7oEXf/4dB8q5DGBUC9MzlEws1S1LLvrOYM5ECBIl+zPOcM4jCABAKI0ALEoQAMHIpqS7rh+nwqD4g2P9mODfP3Z+6tz8f7hp99ZcKRLysZOXPvOzt89frA+Z3onGktQaAXAlMcKgFcFIKG0QrLRml5v+BKFEqlcuCUqtMaDlhj/SVwCAmAuMIEx4ybFe3gHBycYSjfBQKdsdrIXS5ioFcUVrBCGxShR07fKzrRqkdLSQgVVzsLvbd186V28GzXY4ULgsWbZ7bCqVTYkGIKt+xemlZjVMvn566gkMv/rMyS29uTFPPVNtM4xTJaoRFwjexyhBL69APXVi8rf/zVuUBgmXXepkvTNaXLmetUdy39Fzt+3a+Pyxl5MHUpkSTNff4dNnZ27bvfGKA21GAMAk+OR8dUM+01VJ9hP+WLXTV8z+6cfeWOuEf/btpz90w/at+RKYYtQtzDaDR8cv/Y5Sv3zHwW4j+PKx7rNPnIi5vPtvHn76+Yt3vvnqDQWvN+s8FcxmbHqh2lxsh8vthZyBj11amJ5Y+JW7bnjm1KUtgxUAODuzfPLS0h89+Nzo7i3ZkdIndmycCpprlELTj7715Mm9mzas3dTzs9UHz82dIXC4YLxxw4BNKQA8d3oqEaLYlzUjWW8GCOBbJyePzddbGaMyPv8Hn3hbMw23lEuJ5HU/+s4LE5948zXf+vcfuvf45H+//+gHbtq0u9wDADU/+pP7nv3kHQfLr+cQ/0TidX/gR+AN24a/dmbxoaMXfvbN+x+amJlrh/+iKQSvWqj40Ejv/3jq1Pv2bnzs7My+oR4A+Lc37z8/PveNJ0/s2vuyT/8vhKu3bnjgubOMENOkT41f+r8m7mUxzuSdd7xp77mM+8CDJ//DoQ1jBWdv+9SDf3+qa9B3obWilEqp8MpwvDK4dQ1/rTVCIKXCGMMKL4Jg9Z1eqSPZBYrj5Klnjx46sO9VXYK1nbXuNouQXnEKEEIb+YJR7F9USCeqJYRWYBE0244dgscKzmjeJRS7DEdCWRRHQl7bXzi21PIMesNg8aXl9mDG7sl7wwU3jKKLzfjqwXzYbuYy1pmj4+51O1Ol+21zOUxuHCo9DvWEq0KWcgEEIYPiTWV3qh0ttmObEtdg9TDJZ0ylIIr5YNGuh5xR1Ao4xVhJQAwacZpKRSgmgKWUGsC2WcGhpoHTVHRSGSXSZLjsWEFGVlvxQNmttpKUS0yQUjpJZUfC5oy71EnCRFgUb+31EIKRojPVjBKhYiX39uROLLZfnGv5iczZ+hMHR5WEP3tuUip9bL51eKR0VY/jGuSDb9j1haeOYda7qzd7YrHTCuEH56sWxU0Ft22pvLjQOXZmcu/W0VDIVKn37trQSrlScM/EQs6kt2/qGS04xxdaFiUV1xyvdraXMw+dW06kfu+egV7XXAji9V/f9cOls+1ozMufai7vyFcObR164Ni5p85MdzPqKlkHAB47euGRF8/fsn8lavZVpxD64xU07SJvGYdHer95aur9e8ZqfqS1vmnHyH1Hz7913+a9Pb36Hfvv/rsf/Mb7bi5k7O6MRTEWSq38RAEAoBmnRcuA1SgLhfR1Q4VFP91cdp+9WPNj8YNqbXypU8iYdZUEgQgiYdhKcQpaX1XJZBiemItsj/R59nNnpgf6e7MurTUSIbVtUS1UEHGCsZQSE4wQSM7nQ2EQbFAqlVxqJFxCKcsKLq21udQiEbTpp715CyNkWzSMuWkyxySAsUeQZ9OZelrwWH/JWWqE9WYSYR5KxZUqZ41M0V6ohtVaqAE6kbAt0UmBUJxnzHRpdaktMQFC8llabSVKawQoDAVGAAhxobhUtbYAAAxquMdzLNIIeDVMKCYR5wmXhKIgANfElmFSLHtKlkhlK5STC6FtknKG5UzWiWRPhrUDISiPuLJN4pgUtGwjtFiLHNcYyFs2xdWAf2jv4BNJ54U4/Pi+wZZQsZSL7eRCNaynwRv2bjs5OT/VbD1br2qA/b3FmaEynZy+ui9T7SQV18owRiSYhtVO+IWOvy3vZQw6vuzPNRObEYp0xiTLEccUVwPeinjFMfb15QhGLy205/xktpNUXOO9Ozd8sdG4uuJ2JAzknI0jPV997vxv335gYyX/g8nFidma1DrDDGXpX7rz0F/d8+wv3Hl9KZMZ8KyRnL2z4pyaW5iqtyquxQixCNEa1gxMilEqFQEklM4ZbLId5k2mNURcYIB+x7IYvSOf+Z2G/9XnL2aZMTlfbQfplx88Oj/feP+t+zdnyhgjpbTU3GXmicaSAt2tTPxKpErZ66oRr8eF+VqlsCIm044Sx2SLnTCzUlELAKBLxM7U2705D3XpMgQaQGnohixpAK40QqAAYNWXhtW4HQVwrt7aM7BS31dqbWAstX7x0kLGswpZp+C+7Hus/bXXqVV2nZznppefj9LnLi0Vjlw6+uJ03007+m/Y8uYdAwyzQKcXmoEIeNcZWLvDmeXW9tFedLkMEQA8Obnwrp2jetUK7+7/0vTiLduGly7VupUHure//mE9dWYaAA5vG+6mAq/BokSurhxUVq2Fu7/31MVHT/z5b77n0JaB3/qr+95zy1U/s3vbeLO6Pd8HAEXXbAadT964+dZ16/oIQIFGgJ44P/f3z4wP5YrFA7vnAL7w5IQC8GzW1pEhWZQqhlHKxRs3ld5y1dikm3l+fPqhF842OhEARCk/dXGR99g95cIne4v7e4rn2/UL7cb2fDmR/AsPHHnjtZu+98TES+fnb71mC9js8ycmh7YNvKXsZTX0OlYieRClX3/y5Ifefu13jpz5tbcf/ut7nvulu/9h/50Hxmxzcnz+Dz92e4DSHT29BKHFlv/fvv3UWw9uedOmMQRwx57RwQHnSz8439ktkFb3Hz/3yTuuL77uDPyk4nV/4Ep0Uwg2ZVd4zA8e2vXt+178T9879vkTM5FQ+wfKz00uv3P3yL/yT/mNmwYev7igNQQJd022qjL0wu//i/kDaLW73n5g+x2/8efffuLkB968f8/WgWuuG7q2Z/BS3Prm8Yt3EnZ2KPvo33/hEaUwxkopAI0QXvUEAGOsV9XuusY6AGitAJBSCmOMMe46BusdgPWewJoXkSTp0RNnDl67G14NelUgEgBd7hLoSrDUIVCF3rJl7NmQjaTaWfIsk7YTcVXJm/fjgEuMEABs8OzFMFkMVlRfCUKeQbVjXlpuXDva/6VTUwcHei0D7rp27Hunq0jr3R5dwmSmlSRcHpttHxwsnFxuh1zFIs26hlb65HInioVQ0Jsx5juxlrrpc6WBYJxK2e+ZyACb4enlQAOknDgWLnhGKpQGibDBCNgMJVxGXKRCKUBRzPsL1kwtNDHuyVvz9YjHAXG9rEMxIIKxidDpxU7ZMZaDpC9jFR0jlqrksslauBwmtxUq7UTs7c+P1wOG8Tu39W0rZ6aa4TX9uRNLHUbImaovlRrMmUKgs1PNwkjPsp+WHQMbaKkWb+lzbxquCJ4eHsg8dEKFcXq+Frx9e59Fic3Ic3ONWpDu6suOFh0A+MSBsbl2/IPJWsTV+XpAMbp6ILetnAGAvnUq5ghgU9E9PJCbaSWmI7pbrt86dP+xc2sKG5lUj2wf+NbTp3Zv6i9lHfQaEwl5RezyD99hb3/pyUuLpxabzSDY3lc4uHno/mPnn5qYPrRtiBnkF+869Nm/f+zT735DKeu80pxaf46ZTuQwMpRxTIL3b8jdM7FkGeTB88s3jZYTLqtBOpS3PYcpgpp+DEqWet1Iy4JBNg1nF5qR1srN5pTiTV8wZmUdbFNKCJgGDvwYYUQIBgCfI8DKNRjWqBOkmABVerERK23NNyINSCilNeJKFTyj4aeMkr6C1QpSkxHPxiZBKUdNPy1lzd6ijQAMTFoRR5RgKSMF24azVV9QjEyiLYNsKNJ2lFbDtGKgwR63xaHVSYRGC82US2UaFAtkmUQTLBWaW45yWRcAFhfqQzo5F7C8QxlW7TB1TEYt1g6452Gtsc1wGKbtTtBTzCMKSEkuVRArBOmWUna6GV5shqnQAJD3KJcSa9jZn5+u+X0FZzBnTbfiXT05zcX3J+Y3eFZbyGqYzvkxSLBMujHrjc9Fw0VvGtDVQ33HpxcRQrdvH/y7+556+tjk7h2bx6vB+LKvEZgJ9kwSRsljjTrCyLOIgygjoDS4lCAbGMFLkHiMVsPk4YvVPf25SCitoeIY+3oyXz0/NVTJHauFBzfkLUYGyx4y2LefP/3777nl/XtGf/bE+b5KjiC0o1S54Lc+/vYDf/bNZ37xzutLWU8qXXatQxs3+JEYX2xs6y0QRKXWoADgZTmgrgYoAAxl7G6oD5eyP+tajALAYM7dXM69fdfwE+cWP//0xLnFev1ilWHcU/QYQVKDRXEkALr1OhDSAHJVuX8NssvGwpXodpDpxWYlv+IPtOKUETLTCrb35Lvkw1rszVStuXt4JZiEIMSlMsiKmY0AYiXtbhl5hNSqvNrKX62nm/7mUl4DaAANqEtKnJpZPrCxFwCE1ldcW7fb6lUyoevkzLWDT472fOuJE//+13/6/Tfvue+5iR+cufjN7x3btbFv98b+s23/wwd3rb/N4xfmBys5spoCtLZ9oRMCQG/GueKk3zty5o1bR+66cdfaqc+06rvXVR64/zWEQV2DNaLk1NzSh67b0X0ifsJPhOmejf237tsEAN96/OSXf+oj6w9JJL//6Pm37duyfqMG6MryfObJk4dde9fOgZ/au6nsWjbFPVknYxvHlxdtaSz5Yb2TNtv+b/3t/beMDd558Kptw5XRviIAnJ1ZPnJ29pNfup9sHf2Vqze9e99WhvFIJrcU+Ynk4xeXldbXb994+KqNT5+89PlHjj3VCTftHvmNwd4l379py7BJaLUV/O7nv3/z1Zsfnbj0159+d8lzinnvJcc4/uLUQ6n84kdu5oZcKy72C3/xnZv3jB0cGkQIaYCJZnV3uaezW/yXbz37/7H33tGSHOXd8FNVnXtyuHNzzns359VqVzkjAcIggk0wGUQ0tj/8+jMfxja2X0yQhLFJrzEGYRAKIKHVSrsKm3PevXFvjnMnz3Ssqu+Pvnf2bhBgG/yac/Q7feZM91RX93R3VT+/J9bo+O/fcWvUp149nb6G/yF4jQ9cG2U9/d2buoygBGPjn333DduXNz59ZmQonftVe//m0VkR2jUwsbYyPFcwdFkEgHtWtR0/MvTf4zL06QduWNFS5WUmPjw3NmJm23zh69WRn/70sc2ZNEIIYcwYI4QwxgjBAJ6oj6lLMcGUejFgwBjzbAIIIezpPheMA1fMw97qwryx6GjEu264CYw0UPfyxgsTe5lReO0BuOc6hBD4stNbxFRd8/qCJBQcXhlQCEJp8zKNDgD4JcGiLGPaVboyVTQBIKErCiHnZjJJVuqJ6IKLGnRf0rAwde67bd1AMn9dd+3KBBwYSZUQ65sruC5IBJUwupgsbm6IzBVyPkWoC2sXUyXEkSxhQUAuwcm841PonGMRggUBACEBI+oZTBh3OScYAeOySLCAbJdpggDAsqZZ4Vdm0mZlWC3ZruvShrAynGIuZQQQAs4oK3JQRRLRpc1NEUUSMqa7PO4fzhUp50GZHBxNr6kNAfB1VcHDY5mc6e4bmUcIbm9PbG6IPn5uan1NKKAIp6YKF2Zz69esGpov3N2Z6Iz7zyfz//Dyqem8WBdUkzmKCHnT+s6DI3PvWtfoKe0IQhdmC1Gf/OYVteV7WRNQ7u2s3DEwuyIRaI1elsTzCtT6lR39YzcviwMAB7h9ZetfP75neX3vsd7x//PU/o1rWm5e2xrEwv9+9MW/ef9dv6Sf/ygluK6h8vvH+zojPtcFEJxblzc/e2pgfVvNsnD8XCZ5y9q2hx/b8xfvvs1rjBfLPCGA1KJxIG3aK+LBi9migJFFWdFhvbN5gqBQtE9OZm9qq3huaBYAMEEtcX1CJjOZTN9UPhJSVYKZzXI5uzPik0TLcqiuIVkULZeqhEsSEgSMgAiYCgLBGDEGls1EIviJOJdMzabMhoReTJvT8yWEUUCXTJNqspArOqZDASCgiZokGI7LEbIcpoqEMWTYzHWZRYFTpuqCwQBbLsKIuixrQkQXkzlblwXTpqosSALOF61kHsUrFG4xy+VF06lPKMII1iWiazLHKKSilMA0v0wwA4BAUD9n8JJlIpB8mDoum8yWBIlIEmGUc9c2uKhIRFf9hsuAslVVgZaoPl4wh1LFA6MpCWHgIIsYcRRSRcNgnZV+26FOWHWAzmStxoA6lCty4D5ZcGR573Cqo8J/XV04VXJztlvkqYgmDuZYte6bV5BEyGim8PLp8UTIX99Vf3JwKpGI+AWsSoJD+XzBMSlIiFbq+saa0HjRqtHl9oiPAR8rWLsG5yKymDYdh/PWsD6cLmVtd31VsCGsUcZnc8UcBYXgoCJwDjFNrgmoD2zq/tauo++5ac1nN3W/47njnEPJcpeFo+ez8+++e8M3njrw/vs21YQCAMC5G/VpDKFXBieua64pJ9Z0GEcL3v/gMk8p7mk3wHJoKnL+AAAgAElEQVRoQJUBQMCoLqgrIqkN63d118XB/eLgyJo1tcfPjVZFg154gOdLU3BdT83hubpdPg6gPAquGBHe6thcZkXLQiohw3HTlps1rKqgbrjULwplyX4qU6gLBy/1hj0TAQcAh3MJY4KQzZiEsbM4pyMABGAzdnY6fXtbnSfcO4xKgnBqaKpHD9yzubs5GvAoB+V8qZtTmQx4ZztbMDSR3Npe99y+M9cvbwSAutbI59e2YYRePD2w+9jQ3lPDO3aeuntTZ3dDYllLJQCcHZravKwBrsLJqfnNjZVXXKPJVK53aj5I8TtvW+sd2qK2uCTTqGccuGbVsIlMvkoTa8IBadGm8aNjF07tOPaPn7ofAJ49eOGOTVemyzs0MIEvTzNaxt7BqV0nL/7RLSs/eN3y2OVpRjdUVVvUWU5iAHDbF/4F5o2PfGLzdcubyv9lY3dDCbimSJ2h8KduWKNLAgCM5LNVii+bt57ad/Yjb9zi8dBNyxq0oG4dOLd7T/9XJ3P3r25WBGHH4b4DZ4bv3Nz1zMn+B7auiPk0DvDTC6PvW9V6Vht97Jlj//D86c9IaztDsZ29Y5959nArwR++cZ0iEI8MeDwBcdYZUz/zui1Ls4tek46+hv+7eC2e+NpIW8bFfOZMavZCNnnj8qaZdAFxBgB39zQ8vyTY8beBqwuTAcDmhsTZmYxfU+cLhrflvdtWxUK+uUz+qg5+87h1fdtEMut9VwW5ODL+0EMP/9t3vmtk0uVQAYQQIYRgAhw8JuD5BXlkgFJG6SUywDmnlAIAAGeMc+CLKidYVAOVe8U9y3ve+J73055tbiBSs2KDKF3hMoTKzIEvah4QArRgJkYAgDHmjj3VezJgFQIS6c8UJ0tGxrCthXOAgCQKGM0bdkyVcvZCXg7GeXNQ64n5W6L69RWV97TXF107oIjJghOUsUjQcM5gnOcdd1mVH1G+rCpwY0vULwkixwTjw2OZjgp/IqgWbco5bKgPOS6jHBACRYJEQGmK6Ybt2i5XJBzzyxghxsCnipyCIhFFJqJAGOXVAZVRzlymCGLasNfUBOdyJgFQJWEyayHAGFDGWOA2b1lZ87lburY2x9ZWh9cmgnV+pTGo3daYIBhkQjSBiAiN5gzKgDJ+bjbXEtWvb4zVBtXuCn9DUDk2mSnYdE1N6P4V1Qmf0hLWZIIAoCvm/8CGdsKKioBrwv6SZV/fEJZl6a8ee6l8GzbVRB7c3By4vPSpLpE3dlddQQYu3bDFL52JkIBRIQ8nUlMI4MW+ibwY+MJzx+Wwducn78WbW86rAtal+Xxp/5nhK3r4r2BFVUQkhHM+ni3IRFzbWsU5P9g/DgAYYEN3g8vY/sXYYowQRkABpU07rEhp0/a+eL9SxgeShR+fHLcpy5suYryzwndwJOWdKSGYIViR8CtYi0RxXUQeTxaHUqV03jo8kQXKw5osS4QyZto0m7cQwFzaMB1XJFgUBATIpowB5wCyIiOEEhFNVbBfl2IRVZVFjDFlEFBI2CeqIqkIKvGgQghWZTERFm2XC4RwzhVZyJYo59xhwChTCCgSronKuir4NdGnC4qEOYBfE4FxWcCUQZVPmDdYWBaiAaVgUscGkeCCwUQB+xTslwQBI0ZZVVwHAJdSIhJNl03btR0eCiiSTCIBhQi0ULBnMvZMsjg8lT83nBmfyqWz5u7zM98/MHx2Mk8pRHxStV9O6HJEERqDimsxiaC87Q6kS6bLVCCzOWPv2Hwqbx+ZTB87c7GutoJxNJI2+uYNm/GQQiKyLxrEQYmDSEVMAgpKlVzLckzb+eDGtntWV73y4rGhVGksU4rr0gM91V+8pevtK+s7QmKFJq5NBHIWLTjUpPzUdK4moCX8SkyTgpIYVsXOmP+6+ogkYso4QWhsLi1JAuNcIUTAKKxJiiiEA/qHbl3/neePzqXyW5Y3Pt07emY6xQHaA1FTcDZ01v3dv+4enk0Zru2li8hSOoXhuQvDhrOg4ChH+hKMEPJCZkERsIAR41wWiGdAqA7qCKAh7AOAG1Y104B0z+au6lhQJsgrIOAtQ/lUVygOAEXHZZy7/NKI8WT08ipZklbIW53PFCvCPgDgnM/lS3GfPDCfr/RrV7genR2drVtMEORF+pb7UTCGRdndpPYVSfMwwFTOaIkGLcoY5xLGjPOT/RPz2SIVcEM8hBdtGgQhtGBDAA7gco4XtfvnZtNrauOSQCJ+rTqycBoEYwaweVnDn771pj984Pp/+qP7m6ujR3rH/uAvf/i6P/nO80cGmqqjcNUEcnJqvjV2KdORBy/T6JFzo+u76q4pub50fmTTYpgTKr/AAAAgVbIAIK6r3lUeTmZ6B6e3rWz2jAO7TgxsXNPgBQSX/fifP3XxjpWtcC18ad+Z7VF/VVCLvbqj8q4zQ7vPjazprN2yvPGKs/3GC0dbVnd+aHOzLl2anA3D+cfH973/vk0hn+61z5r2vom5t65sfuLTt9eF1W/tPoPe8/BXH9/X3lrjAkQD+ub2Og5weHT2Z71jw5Nzb79++eiP/+w9N3d9/0Bv5MFvfubZw1om95V33ukFSwzkUmWjwXOnBv7f+7fVRi7FhLxGBv5n4jU+cA3U+vw5x6xQ9Z5IRU+k4sE7Nloh6fvPLSQ9vK299qXByd+URPLr49a2mpLjDMxlvNX7tvYIBO8+8VssVFz+j7dv6Hxs94mXj/edu3DhyW/+y3f+6Vv9ff1oCQghoigyykRJwAQD555ZAAA8MgAAjDFKmRc4XHbuYYx7aYc8NZgnx3uza1Nb25vf/YcPPfSVD33g/R2d7TeuW3FmcFYLK5u33SgtUILyHVh4ZaAllABg0VwAC4zFKRVGzx2bKhiWSx0XTM5Tlm24FAASuuwXhaRhAUBQEjKW45OEokMBQCS4qyLMbWo7dGS+cHYulzadG5sSr5waNG16diobUsTWqF/FZLJo1gS0zQ3RG9vjMV0UAJ2czI7OF0sOZQAzBVORcEQVEn75zSvrLIdNFEyBYNvlnKPZnOXTSFAXZRGHfIJXgYxzfnEk6ZjOVMZM5i3LcGaypQMjKcNx5/JWMm9qInZcB2EUkAUBC601UnVA9q4DcPBJwqpEEABcxm5uqQCM2uO+gfmiYdP+VMEvCZvqIzWBSwqbd6yu/9iWli31kYaQVh9S3rqy9u6V0SdfXigkt7Y23hL1n51NJ/yaKhKZoL+8qcMvi56SDABuaIqFlEsZ9345yi94tLhsa6p6pnfsYsp8YWTqJ2fG1t3Q2ryh6bnk/CeXVf1g+7qPdrdIArn3umXPHV6oCfhqA7As3LwarmjwqeuXD+fMvUMTACAT8fZVLfv6RinnnaHYUCF907rWH75wIrNIwgEAGAOAjGmHFKlMBgDg2d6ZR4+P1wXUd69raIzqD6xr6J3JT+UMDkjRRILAL4s9iYAsYYKwTFBzXI/qkqZJjHEiEIdxgkDGXMCgq2LOoJmSY9qOX8KyRHIFK6whDpRxpmsiRizqw4WCa5huLm9rIpIwqBIyXCYKGIs4oAm5kp0p2VFdMkxKKU8VLYGA5VCEuYpJdVgWRRL2SQihuYzDGNNFLCBcE1eDuuQ4TJBQuugyxiO6iBg3bUoQkwU0lTaLlh3VhaLtWg67OJs3XBT0yZpARIFQlxk2j+hCZVDTJJQv0WhQMUwnKColyw35JCIQv09WFVFVRVUXair0qohKbWdoMpvLWUnTybosl7fOjGeyRZsxPpkrhjVJE3DOdCQRmzmnK+ZrCmhWwVAkQVVIfUhLF52hueKZ6dKFucJYih0l5oBlzBLLL8tjabchqIR8amM8XCiirdtWzp7tfVN7/N7Ois64HwA6YoHuyuiFuUzGdIqOu3c8dWAiLRPcEFTCitgU0d/QVXVHS3x7Y6Q77psvORfmC6mikS5ZAV2LqAtPe0CVGEBdQA/pSpWi/OCF4ys6aq9vrDw8kcxbDgB0hmJN7fGHf7LnvV/88dELE4Zlfb935Fw2f31ldFNT9bnpecNxvWfSU/AD5y7jHDjByJOAMyVTXRTmhtN5hRCvqrfLoD4eqk+EMwVjqURKOceLPja6KBCEvDT/lHObMZsxl/Ors/uXcaxvorkqari2wxzbpS0xX7JoVAUkghDjl3abzRbrYiFnMWVQWXaX8KvKFZTzC9l51yL1YR8DDgCeGYEg9GL/6GyqUJ0IBVX5CiufgBDjgJdMFwhgNFVI6MrQdOr6rga+MBugMmHI2XZXdayxOvr663v+1ztv3f21D/3xW2881je2oWtBAV+eQDjAU71jNTH5fGZu6U/nJ+Y2NtW01sZqFpMgeZlGy2f11JELt69sBQCLOkvtBgAwmclNFO3axajoF/rH5ibS9123DAD2nxlmnHe1XFYQbU/vCFxlavCmx72Dky+cHOroqr257bJfPS5RrjnwuX/fjaeLn37L9iU59gAAXh6Y2DWT/fjG9jesbCvv2OILP/LTvTeta60I+sutf3BicENtfG1d3DDcB29a9ZlbliujE7+YLnz2ycPf3H3sthWtHGA2X/qzHUcabeftm5dd19lwsZD+g/Xdn7ljta9aL84UHvngHd5f7s+l2gIRAJgvGFcUIYbXyMD/YLzGB66BkKTmbacc4/WGjd318dDEXMabdJZXR09Mpf6byQAAdFaEDo3NaZLgZR0FgPq2xI6Dve3+6Jn0pZoJvw3sOHB2fCb1b//0la999aHRoYuyJCOEVEX23kACIQBACMYEc74gkntmAdd1KWWMcebFYi5I6ItX1iMTsJRZIIxxJBL+6Mc++sD7PtDc2TlRcsaKVlNQe+vGzhdODABANBhq33qbJMmLs4p3KzwZeHHTUqaAoHwIZlu+kdMVqoQ4VGhS0WJJwx7NF+cMiwIfy5vTRVMU8GTB1EWS0OVTc9mM5VT7tfG51P6ZbGdcLZpWQBMFSeb+UEtIOrz/lCjgouPWxNRk3rqQzCkCjvvl5bXBzS1hWcRFi05lDJmgoflSyWEBWQSEcobTWeUXMQYEFJgiEk0ipkVTedt1GeW8KaaFZCFfchRZPDOVA+C1ITUeUEOqQhFbkfDLArJNy7TM1sqgBI7t0mTRBCYMZozJgpm3Xf8SPX1MlVdXhjAAY9yw3f65giYLAkYNwVfVNilEYuC2B6LDyflTw1PehdzaWHlhNgMAtSH/bK7oV6Q3rO947uTAq3XyS+DNO+W3AgJYURVNFswP7jj9+X3n7IT20Y66j6+sW6sq87OmiPGaeLinKrapu8F03f3XSgb6H8JSShDVlPuWNQ5kSt7qlvaGVNE4NDzmMObYdOfR/nuu6/7Wzw56vwoYTxQNxnlYka4gJHd3Vv75bV3v3NCwsT4SVqWmmL6lKWqYrryYjiQik4AsrqoK+CT10MhMyIfTJVtViK4JjLFMwcwUnfmC5VA+kzZTeTsakGVBMBkmohDwy6okWTbHgPy6ZrusZEMsIDdVan5dnM+a2YKtysRyqMOAM3AZ6KpoWO54upQpUsvlJYtF/bIsIk0W50u25XKH8lzJNV0uCCjmlxAGEXFgUDBcl3ORgyriiE9kjBYdmrZdURByRTfgF1VJMlzSFNImksZUxnFcdz5jJbOGpsiMsbAiSIDrQ3LRokGfaDs0pEvJnCWLRBBIVVTlHOJhBWHMGXJdEwCqwuqnb2xvrvZRCjKG5ijpqA0igZQst1BwBiczg/PFuYw5NFMo2u7AdK4polHOjYmZNsLSpt1IXGN65vjBkz96dM8TP9opn5wdePLg8NNHakTx0MkL33zpQjQUeKo/2VMd/vjG1v/n3dt/9sqpfNHJmGbRoWNZYzJvzRj8+YvTYZ+4oDsAIAitTARubox1xXyKQDSRJHS5K+ZL6NKuscxM3jQYrwuoAOAwnipZCKDCr0oEh32qRsiPD5/TZen29pofnRoq2Q4AXOxN/sG9G7dv6/6nHUfe/6XHu4LC3TWJ5oCvyqd1V0bPzaRMl7qMLbACzgW8oDLxxojpUl0SOYDD+HTeqA7qnAPncGRo4qaepvlMoTYeLMvQVwjTeDEplhdLQBDyCYIngtMlCXlLLvW+MM4n57PNNVFVkGQilWw3b7GS4ypENl3bcC3DMadKec75bLbYXBEuEw+65Che7WSHsfIh6CJtQAAj6fyq6ijlXCQYFsfj2clkIh7gnMd8aplaLMUV/+vQ2GxPIjw2l2mvjnoXigEXEEIAjPPpbDGsKWRJZqG33bpalaTqyzOccoBnLoyZNh2bsZp9kfOZOY8VuIw9c7wPIbhh1TXCAwBgx8mBe9ddVqazjNl8yXCoQ1nBcgBgOJmZmE4fOj9696YuANh1fGDbima4vG7AzlNDr24cOKuPzHUkQo2x0DUbAMCu00N7+sa2rWm5cXXrUlF7Ip3/7KMv1MRDnPOIdilqa/+5EeB8Q3dd+Y15aiplU7c2qA+m0isrE3VhvyYK77tv8zMfu+uv7t9QGYttaq+dzZfe/ujuCsv63O9tf/ylU6dnZzpDsbRh/fxUP5lOPvK2raosZG1r4FeRgdeEzv+xeO3WvCpCsq/st7Olvfbs0PTOw30IYFtT1YsDE79VgvtqLkO9c9lIQJ/NLcgu79yy/OzFmat9Q3+zSKfTO5/4wX21aQCQJAkhRDBGCJmWLRAiEIIJJgR7mYIYpZwDpUuZgKe4uUJtAQAcOMcYI4QIIQghzgFj3NbW9sd//Jnl3V1NQa0+oNYvKrAJxvdv6j58YaI/XWwL6z1rNiz2g5bomjkHgMtyEy00KVMCK59mpUKVJkQUaU0iuKYiKCB8IVUYzpYEjA7PpM/P54uOO5gpDmWLKdPpSxVOzeUURRVcFAsHLmZNvyKczxrNFaHnjpyfmc3kZ9JhVWoN67qIe2cKhkNzluuTRF0RbmyNV0cUTRZypktdBoyPpY2JtPnK0HzfdEEQsCaTupDKES+5zLSZ5bJU0U7l3ZLpzOTthE8GUZqfTd3REl1RGZjIGo5rz6bSJ6ZyAUV0Ga2PhetDYjjon5iZCSlStc+nSO5MyRIxmitdlsMHIWgK6xfTpesbYxFVbglocZ/su9y352oIBN+0rm3nokp+RVUUAE5OzXu1bGbzJU+hVTYR/Idw9fv+c7euuzUefO+K+g93xkTBvb6y+s/u3rLr5OB8vgQAtWH/8dHp7ata/usmgiuwrjbOOD88Pkc5Z5y/dcuKXScuHugbffzZk2+/d+3Wlc2UsyO9417j5bFg2Syw9AQIRhgtOE+3xX0X54s7B2aDmtgU0ooWC6uSJgpRRVpZHZpMm7k8OjCYUWUBEWw5rGjaDuOSgKrDWnVY0WQsCDisSD5dLBp2KBywbWpQzsEFhHyKODk93z+apcA4R7KAJUnUVKFkukWDWTYlBIkE5gs2AIoHFF0msgCaIjDOBSAALBGWLZsqIg7rQk1ICqocYaRLgukiBihvslzRyZjcp4m6LjOMNRGHddF2mWExRLnDXMLo8dF0zCfGQrImSxVhbWK2IIoipWx4rjhXtI5NFjhCYUWqCMiOQ/2aqMmkaFiKgDoSfsN0JRETDDKR5w27KiBPm+b4vJ1zXJvSDIizeSvhl8N+ua06eE9P9f3La27vqe5uDLc3hj62rW1t3BfWpIf//aUPfeknf/HFf/v7H+yem8911cbfee+a973n9prmmocefP0X3ntHhrnLa8M6y4uV4Y2VWnNYV0WyOpG466aev33slacHUy9dnJ0uWYpCmiv0tMR+Pj5lc9d16db6yIpEIKSIAkaewn5B+Y1AlcjtTTHHshRVTvhkhIAgyJbsqCZ783A8pGOB3LeyfXw2RR36us76H54cOjWRfOxo/5vvWEeqItbaxk8/sH3nrvO5UsnrXBWFZZXRvplUpmQCQM5xGYBFGSs/XBwMx9UlkTLOOJ/Ol1pjAYIRwWhkLhPR1dl0YdOyhquf+CsEaLhqyJBF5yKCkEQW9PQixvmSVXItiUg50yYYT+cNUSSDqRzBQm8mPVTI5RybGLg+FqTAS5RSzp1FMlOW+wEAI1RW/3uLN02PZQsJnypiXJ67OcDAVKqxNoox5ks2YoRczhmAw1jZUwgAZgsGAFgO3XX24rrmGsr5mfRcTzhOOS+6lkKkmWwh7lPL8i4A7DjUe0WJLu/XJ0+OuBn6zZcvfO9A3/iU5ePq3onxJ86ca2kOD44nV7UvZOy4InjgQP/49msVTbdcOp4tXNdSW+nXcqYNAC/0j+09PLD5noUX1k9ePNXenVhqZ/glxoEDw9NDqfzajtq3rb2Me1xhHPibJ1/p0QPf/ZO3wOX40HeeLvh9b+upf9PqjvKOfiruPNz30TddVy6gljXtV4anbm+vPTE9UxvwywJJ5Uo7D/f98Vu3L6+L9k8mP/eGzVPZ4gM/2IXn0p+8Z/Oqxso33bnyh08dOzs29/W9px4+NbqyPnFbT3OjP5RzzGZ/CADm86XXLAO/c3iND1wbVxQqvnd95zhyH33huLd6c1vNS4OTr7LrbxE3tdaUbHepy5AkCT/d85svVFyednsv9P79338pn0nLsizLMsFYVRTTsjRVEQiRZQl7CSUWYgZczsF2HMd1AYAt1o65cg7gHIATTAjBANyLQpZlqaur42Mfe/Djn/hYOByCxZcZQagpqF3MlgBg+7Lm08MpC4oAUFNZ9Z1ieUr1DsDLvXtfyxQELTbxKMH4yQMaYt5vEVXqjgWaglpX1B9TpTUVoc3Vka010VUVoY1VkQ2V4Y6Ir0qXu6uisoDWVYZcShFnpuXe0xzJlUq3bew4OjA5VzTXV4ZvaakoOPb56XytLlfrSqVPa4+pAkK6gCv8kq6K1WEl4pN8KjIpzZTsfNGinE+mrVzRAcr9ulgRki2bywRNZC2MUFuFXxCw4Ni7R9PP9s/SUqlQMkNB32wxOzaXbqqJrWzUGiN+mWBq2xtqfXnTShpOQBJ1Sai9ytP0traKO9oTlX6lO+4bSBZj6mUevVdDIZJJ7buWd4xls2UTwZaGxL6RGQCoDfvH03kA2NRW99K54V/e1a8DBJDwqZ/csmxoMtcWiHSH4gAQ92u3rmx5+NmDAFDh16IBfV1HneXSX2ki+HUoQblCGeVc4OxLL59+qX+KIORyNJCxv/eLo+s761rD4alibuvKpmf2n2ecl5drdsgBCCDGeX1Q7ZvLp0vOm1bVzWZNBlwlOCgLMsH1IS2uyxV+2XaoQ3lNSA1qQlVU8+sK41wQ8XzRsVzu2HSuYBKMNFWMxsPFnJGemHUZOIwyRhFGmiJmCu7obNGkLKgJjDIGyOW8YFJdwgLGlSG5vdLHGPMrRJaECk3MldxoSNRlAQAsh1HG53JOpuRmDGRRNpExcpZTtJlpWvMZK1OwTIe5lEUVqS6kFUrubMoM+UVAiFI+nTY1VbAZCEQIKTisYMBM0xQOQClzGIiiVSyIjPNqv1oVUJnLMyWnZNCM4VrMaajwOSXTcZiFkE8RXxlI7hvNOg7ljHfE/Xnq+lXSGtWJgClnFoes5aoSaghoKiEzJXv3eJZI8u03r/niJ97wi4c/8pO//INPvXlbU2t1fUO81qcGNVnya/0GEII3NUQt2xk8NfCBJ/fNFUwAmMybw1k+VLC//8Od1arouPa+ZHrCMN7UUPP21voA4Ztqw1FVooveO96nRT3neFAwUSViu/RPtnaKBBOEMEJpw45qiufcHw/5HMdd1ZBoTET+/cBZYGxFPPi5XccfnZo/4Nj3tdd9f9taLuN33bHukcf2zecL3pOkCKS7Mjqcyp2dSmLOJYQ1gQCASSkAFGwHAAFGDqOAIG86UVVGAAjg2NDkhtaadK4UD/s82drl3KK2IsgLaZ29x3LRFACe782iDaQ8Ruhi4iAAGJ5KxUO+4ckUAORMe65g9GdzI8w6lprryybXxKu6QnGX0el0viLgAw4aIQCgEFIW+oUlWvml8MRBl7Gz05n2RT09AmCcJ7PFWiTdu2VZazTo/TW0RDrhnIsYlbdzgDMzqfV1FbmSCRwqQj4OwDn3nIUwAsNxAZAmieUrwAGO902sbq9ZejJe/6dm5/7hLZt+/L5bllVHJjKlv3n2xEe+e/DZ5y+sCVecnZ2pqF+IK3CYC4vvmIP940tjfxG6xLrOTiVrgz5VEghGOcvxjAMDo3P3NyQAYMeh3ruu64IlmM+Xnj899LE7LtXnKiNj2p999rAyOLV+bYsqvaor5q7TQ70Tya9+4vU18eDSN+3uc8MvnxvJGNZHrl/leZd5nkLfeGL/nRs7Q37VuwJZ0/7hycH7e5pKzPQJYsKnz+dKDz225z33bACAb+8+/v6b17icf+LpgzFqb75rw7Ka2IVMcnlF4o6tyx78xs+/fLifDY9//K5NADCcz8RV3WV0Jpd/aMeh18jA7xxe4wO/FrZ1N3LOdx3t91aXV0ZOT6fQ4uzw34aOePDw2JwmCQOzGQB4+tRwtL3hqT1n2/3RoVzqV+39HwAC6Ovt/epXH/7qVx8qlUqyLNu2TTA2LQtjJBBi2w4m2HFdQRCAA8KIupQxbjsO55wxxhaTtV+LDHguRlwURUKIKArLurs++pEPf/ITH+/q7PDeUp65ubyTRwlqK2PH+8b2HLtYtJzvHeofGp7MXEo1dNlhPErAgXuUwJuJEELAASHkOPYrL+6Mgn0+VbAZq9RlysCirC3iq/GpGCGfJNiMZW3XYowB1PjVFYkgBkiX7IaI75kzwwXDjQX1BzZ1B3zK7t6JZRH/dNFsi/gbQ3rasE2XMeAxTRzOGFUBpasq4Lq8NqTajAMChLAoYIszn+b9feTThNYqnyhiXSKagnWFuIzJIjo5k1EVoaq5plgsyRJuqok2VsUMDSHuNCTCd7ZWrI3H1lUFQyJ51+aul4/33tdWtTERJ4K5In5ZbNxc0To/l+9PFvaPpp44NzWeNVsi+tbGKPwa+JUmgttXtf54/7ldZy7+sl5eBVeMIASwujZmUbp3bLb8af8AACAASURBVNqitrdxqQmiNuw/Pjrzh/dsfO5w33yudHUPvxxX+C3oggCLKtL3bu6ZyBU/9ZMDb/n2CwdH5m5qqzybTt2yps1hTBLI2vZaLKBD58cwQhIhS/nA1SdAEGqJ6memcq1xfXVNqLnS71A2Z1pNIU3AKG+7a6pDuiTHAooqlYC73GU5k3LKFVFinIsCjgYkhMC0qSoQwlFDRWBuNlUZ8TsFsFyayhaAA8ZsMmkIIikYrqYQi6Fi0dZl4jhUEwWHMlUUisxN5iyCEKO85FKfKsxkTAacMWa6rGgyx2VzWTtXdPIlVxKIT8ZBBSIhRVfFiF+UBMwdmjftkYxZKrq6gC2Xmg4TsRgKKlFNFgWsiThnUYTBdWyfJmOMASCiCRFFxhgsy81ZbnVQ1XWpJqqLAs7krOmC5TC3qSoU9RGfTDRVFBUplbda4xrCkLQdjYsba6Npy44ogk8SLMp9EinadDxvyCIZzRnrEj4Bwdqm+D2rWuoDGsEYEdxeGZ4oWIcnsrIonp4rLqtQI5qU8GsdNfFbVrZqucJHnzn6k/NTB4dnUSYTBHrj1o6Hntr76GSyw0/urqts0LWukP/WlppUoeQyxjmYlMFiDlCZYA5cQIARUAYCRgXLYZxTzl3GC4bTmVjw5YiG9FzRrIwGI5ry+9ev+OYLR85dnD78zNEefzg1Os9tShBaURU3RPbB+7b88xMH9p0bZhwcxgnGa+srqwJ670zKcqnLOAZkudxl3HJcRcAiRgRjznl/MhP3qd5jPJ0pmrZzanCqMhaAxQSjZaF56XeXAQfAi5K697l0RHjGMZfzgal5nyadGZw+e3F6aCJ5aDa5Y2QyNZF/5Mlzv//IKz87eXE6V0oVrN7p1PL6CotRaUnoMFyFpcHEXhuXsYlssTUW5ABscTAOTSRzBQMUoT5+mT8PADj0GlaOofl8TUAbmJq/oacJISQs8hAAQICS+VJ1aLEwwuLy1N6zt23o8LiBp6niAC9dnHr7mrYb22oYwKbmxDs3tz/y1q3/8Ia1e0amti5rqlMDayqrPSeimVKxMxTzLuYvTg7cubqtPPDLE8JsvgQAcb9muhQAMqb1Qv/Yc3sv+Ne33bm+AwAOnB25bW07LHEW+tqzB29Z3hy9VqDw3z5/7K7aeGtV9E/u2bx0+9XGgXXx+I3Lm6/Y/RsvHG1c0fbn23uWhhHvPzeCANZ21UhE9K7pD08MbqiNywJxHd4ZiwxPpz/98FO3rW+viQW/9eLxbR31GKN3/eTlyVwOd1e8v6VmpJjpDMVSJeu7R/rUuphxfri2sUUSxAuZZEcopmAhX3L+8bkjH71jw2tk4HcOr/GBX4ay3051JFAV9m9Z0fTyiSEA2N5SvbNv/Fft/V/Cq7kMnZyanyvZ56fnP//zo/3J3P09tScHJmzHNS6vh/JfQW9v39e+9vBXv/rw+MSYLEsAQDBWFRljpKmKbTueWcBjApRS16WO7dqO41JKKV1kAtca/pxLkigIRBJFURQVWYrHYh/96Ic//vEHOzray60EhESMl+p3Xcbr/CoAJCoiX//R/s1/98S3dp8WkPZ48dKMswQcFq0EHiVAi+dTpgSube158XngTMJ4OFvyy6QxoHlJLVSBjBeMsCyGJCEsi2FZzFjOhWQhoikXU8W2kM5AvLsrEdfk21a2vdg70l4RPD44BQACRne2VwoCPNc/5zI+U7Dmio4uE4vSFdXBjGVLEs6WbE0RMEZBTRQJSQSliF8CBjZlEsbX1UUfWF5bMClG4LrMspiCEEKEIXJdTbjar75vXcOfr+mI+8K3t1YwxhRC5otUImR7R12FTzszNms5HACm8saFufzh8fQT56b+9fjY3pFUwXL9srC1IfL7q+vetLz69vYK/69yFoJFE8Gdy9vHspmrTQQVPvXl/rHv7zlXU1X1laf3/6rOfhn44oIAfm9F88nxDEaCRwkQwEfv3LTz1GCqYFT4tWhAIyK+aW3bw4/t8fZ9NUpAFgMol3KA8nJFY58i4cqALyrdvbLuXZs71vdU3b22/emzfWOFfEzRRorZNW01u4/1ewcqO2R7uNQXh4VoS4RuaIu/eUVdznYUEXMMxZLDOaRM++xsQSKIcRbSJAn7MiYNqqTSB0SmfoVgYvklLIkk6JcM053JGZqEZvOmPxQ4PWUyhXLGxyeLsixnC66mCY5LdRmLBGkKESUiEIQBRAlkAXNwEUcxv5SzXAbcsGmu4NgOL9nMthnGCAOP+WWMQBFJQBaKJYcQElaUioDMOc8VnYLpZIpuzmL5ki0q2EI8lbXyJYdxtzGsUYC4T3IZB4TmTO6XccynCgIWRTyTKQkS3NYW0zVhvuQcncwGNCGqi1UxPSALraFAKm9VBoT6mN/I5kzbrQhJsoCGM0ZEF2UBl2x6dCKT0BVO7QpVHs2WpgtWX7ooC7gtolFgjOCiYXVVLiSKcTmfzpn984Vk3qJm6fU9Dfd1Vy2rjARkSRCw5bjBYODjb7x5euDi375wSAT63Z3H3Ma4EA2++3Vr3aP9lVih3JEFLGBEMG6Nh87PpChjCsFeDlmMwGFMxBgj5DBeNAyfIqVyJe9BsigLKPLqmggAUM4rw/5MwQxoUnM81FYZ/chtG54+1pcMhD61vf3tK5v3jsykDYsg3BWK5Yn9nrs3PPHKmc9/b2emYBCMGOMRXe1IRHpnUy6lCIFPIjLBhuPKArEZ4xw8c0RtUCcIZYuG99TNZQqNlZGlYn052w/l3OGccY4Qdxnz5G/uteEcowXVNll07BEQGp/NxEO+bz558NOP/OxP//X5Z/99/7P//MLAjmODe45NHjn7v546evfXfvFHjx7ef360KuT3koGyV3FMWmqC8EY35Xw8U6wNaN554sXBeH5k1nDcUEALaZelj6OcK8I1pJTdg5OtscBYMtteGSUYnUvPdYfjAGBRW8ZizrQCigxLJocdh3rvvW5Z+RTxouhzeirl6Ti8Ld57QhXJHStaXjp5cU1rrSQKnaF4taYbjHlz1EvnRp480pc3HQBgAAyAA+IAhuuOZfLdVVEAMB1qUjY4lwWA7GI2gv1nhilnW5Y1lv/F/r4xzvnWjga4HAzg1FSqN51/+WDvB+/eKIuvOld7xoEHf2/rFQL3S/0TL0xnHtzQdmtno7flQiapu+LOw70fuX9L2VPo1FSq5LoOZ0/3D0QU1XHpP/zopflssWQ7L5wemM8Wh2Yzb/+bHw3OZd69suXzqzpr/DoApAzzyy+duL65MoL49x58Yws1Pv/UoRDWEMBsrvDwjkMP3rEp6rvEcF4jA78reI0PvCqucBl65/ZVKzpqH99z2lu9tb32/4rLUEPE//Xd5394pP/GrqoPbuteu7Zq2+rmHx44oQm/wv3j10Fvb9/XHnr4a197eGx8TJREx3a8MgKEEIyxbTsIIVmWOIAgCK7jIowc20UY2Y5DCF5MIXr52F8UnCRREASiqookigCgqUpLS8unP/3JjvZLTGApyu8Sz8tWwKgtrP/JXRs7NrR/+I6eJz529x+9rlvX/axlGRBvurxizrlECbxVBAAIMMYeJWCu0/vKc72pQmtY1wSBLtrTAaBSU+ZNO2XaactJW45PFFIlq8ovJYsWQmhLU+InJwcp5y01MSJJTVWhJ/adjSlS2rRLjruqTss7zoVUYbZolWyqEMI4cOAlk6YzDsLIdVnBdDN523Zc26E+kYR9smlRFWPKF+RJkWCP0+RMGlYEhbmD6dL1deG2iC+sSO0R/9f3nolp8snZ3GimlDWd/mThzdf1/PWu8987Nrb7QuGFobnZguVbJACv765aXxvujPtj+jWqO/9yKESiQG9Y21Z2lvNen/uHp3rHkl/71xcfPTTwh9d3Rfzafy6KAADK9NFbVlXHMKBdw6PlBhGfeuuKlod+cQAAasP+VMla11nLAfafHbmiK375IizKOtfkALDkGYup8qZ4+K/uWj1vmcOFTGcodkN348FzE+3BiEwEALh5TdvP9p3zbo9wOVkFgKAszpk2QiARzDgnAPd1VmkSDkpiWBExQo4LfcnCvon0+cncoZF0KCSlSs76mjDj7qhhJBGJSroowVyW6JqbK+U5MoNhiPhw3i1oAWmGWlzh2aKNESlaJmUMI4j4JIEQRcDJguPaVBIFQEhTBcYRAgwIG5abLroEIQSoaFIESFcIY7xoM13CsoILjosxkkVkOqw+rDLLLtl2pmRHgnLRoqmMLcjYcFyLMgQ8X7D9soiAU87yTinil/KGC5zZLgVOuUsbA3o0qPc0BRUBI8QzFi2ZVJOxLCDLdUsO64r71jZFakOKzdhwxna4K/n1+dlkEnmlbMEnC/kSjfhkjND5+bwma33JQkAkQYkwBu1xn01ZTJUkh6qyGAvpADCZN4+MZ8byRmtEX18bSqiiLgmWQ797dNCnKpMWYIS2NSXu7Uh8/0P3xUzzcy+dfMYsffmWdZ9c37W1vvaDb9r0nacOZPO26S7oUzRR6EpEemdTpuvalHkZNkWMLcosl8kEz+aMomnP5YpooWIA3z08vrIy7pk05zIFx6WHppKKKGCAqF97+L133dYW3nGivzagva6j7vGzw7ZLAaDRF8lh512/t3HbquZHHt87k8kjBDLBuiR2V0aPTSUHcgWMEOW8ZLsRXREwlgkWMU4bVmVAo5z3T6Uqwz4ASGaKrdWx8nOOEbqQmVsRSXjPvLhYYUAhC6VCFhYAdJUEQDlPZour22r++bNv+ukX3vnG7cv/+hNvqLtxxQ/+4h3ZZ//qnz/zph7sDrxy7OSOQyeOXeyojBCEbMbEqxIK0cVSaEu3UM6H8inLRMurI1cMyRf7R9saKwAgol9S8bhXlVHz+tkzPH1jSzUw/uLZixtaL1XkXDgcQtOZYsyvXtoCcHpoqrOhgl+lqdrZN7atueqKY7x0brgpGpycy6xqq/baK0QISIr3/ctP7zsxaz9+fPjJY0PT6SJw7jDHps7pibmqgCoLAgIwHHcomftOev4v/+UF0lX3xdvWAsBPXz7T01I1WEh7lgHK2DMn+m9a0QRXAQE8erRvS9ivKWKs/lKaTrjcODCezP7+Iz9dF4tdYRyYSOc/88OdtRVhAKhfzHGUL1j/33d33LmxK7RYcz1r2jsGJ1bXxX4+MzXtMMt0v/H4vrfevOqTb9n+vR1Hv/Djl3rqEo88vn+iOvLnNyy/rbsRAE6nZnQkPbLn9LrqyImB8S+/7Zb713f+1YO3/6971v3jzhOHBye+/otDD97+mmXgdxWv8YFfF9uWNR4ZmRqbzRzrGweAtljw/GwavYpu8reHW7vqMwmlojJoidb57OzqaPVdGzpHhlI1auC/kmWor2+RCYyNabrq2I6qyBhjWZE8H4AyE+AAruN6ZgHXpbbjWJZNKbXtVzNQcOBcEgXGmK5rBJNIJLRsWfcHPvD+j3zkw6HQtXMmoEX1kuUyAV+aT3rq4msSAQ0bp9Kpmkj8/p6WobSjta4k4jXpEPemIo8S4IXwNe5RAgBwbevci88YhqEsyavNOYgEhWQxKIues3jadi7MFwBQQBZHMsbWhojp0kMTyfMzmXdvW/H8ueGxZPbI4BQAFFzWHYkn/FL/TH5wttAZ9RsWbQxoB4ZTCCFNJdsbYphxXRQIBofxoslEIF1xf0QVZ/LG4bHMo6cm47rsUAaAaoKqT8apkos17cTBM1VBdShV3DeaXl0TmsoZ3z508eRk5tBY5mK69PJI6rHzcyODgx/a0PD2VXWr69UNdeGu/xQBuCbaG+MFw963mPt/S238718+/Qdf/NGMpL5+Y+Mtyxs/cMva/1CiobLIjq71tnj3+o5zU7m8Rcsmgk2LXkMVfo0DzORKt6xte+5Qr9ceLWjpLuMVv+ZLyKMEHOC2ilCFrL1jVduu3pmUYa1rrpYJOTQwAQCdodjFYubmdW07D/eixQNdEUVwxRFzthOUPZ9nIBj8CvnXg8PnJrPtFXpj3Hd9bUQXccqyVldF5tPFVUFdVhFyEQZeKgpFUwAqO7ZUMEgqJ2QyrmLQ08ye1MkoQZmS4bi0utKXM6lh2pJAXNMVBIwAHJeHNFETiSJiSlnBcCmHXNERMMQDciIgI4wKJdevEsfl1GWOw7DCAIHpUgdxURbGUgbCOJ23bZtRxinlpkH9AplOmQygOaFFAqIuCn5Rbg9ry6v8MhY4x/N5xy4UY6qsyNLmeHBbazxboudnsn5ZEEUU1qR1NeHuKl/GdgfTpd50IayryWIhY3IxIFQmorpBBAw1fqF/dHI+b2VLNlGxSFBAJptqw9jKn57NV+hivU+LaFJEkV4ZTyZzRUEkB8bSoxmjOiD3JPyqKFDOHYSOzhT2T2QUzGp86t1tCZ8iRf0qQbgy6Pv2++6Ri/S6hsqBxWoqyysSb71v3SOP7y0Zbt62OXDGuURwdyLSN5tmjHmStEWZTLAsYABIFwwAmFt0V+vLzxeL8MrF6aJD05Y9OJ1WNZlz0BadNGrC/sc+9eb33rTq27uOMc7u62rY0Td5YmoeAJZH48si8cqG4LqO2r/7we6p1MJZKQLRdOXobOpnZwanMoWJTD6gyp70PJktRlXZE6YHZlKrm6oyRTMW0jlcKjpGFwuQeSdPF1NwLgW9VjIiyjkGdODMyMr2ytWt9T5Vbq+ObmqtXl4V2bSiCQDu2tL1gz97YP7nn//Kn74+q0BPUxW9yjJw9SEAoOhaFrVt5riMn0+mogGxPFq9E8tN5964tccnX5rGy2TAa0OXpELqT2abo37Zq8YQCaAlkwkAFG0HAHRJhCVDcvexgSvKCHCAF4cmb22/Rm2Bp470bl3WsPfkxds3LITh9mbn6/UgAOzvG2uIh3f90b1v3dh+fir9tn9+bvMXfvK//31P70z29GQyoCgWdSzqpA3TpVSayDqcm9RtrNItx/3Soy9+++lDluV6Mv3e/lGEYHNb7RW3hgMcnUj+YnDy+f3nP/y6TVedHZQ9hd79jSeiDv7ax15/RYMPfudpFgpKTeH7l4QR/9lXfj40MY8wlI0D3zzS2xjz70tlawndHov9n2cPf+SN123uabxxdcvu0YnVDdVf+ckeo736Xctq37iqvS7oB4BfnBj7/rHBdZWRF08PvWVjd8yveW5C13fU3rOq4bvPHv343Zujfu01DvA7itf4wK9A2W/n9lWtgzOpzSuanj/SDwArq6P7hmfylv2rOvjP45ouQ1vrItf55Ttaq4klLA9XAsDdm7p3He7/T2cZ6uvre/jhrz/08NfLTIBgjDFGGGGMHdtFi2UBvGmLUoowcl2KMLIs2zMLkIWUo14txkuiNQDXNFWRZVVVdF3z+/RAwP+ud73rQx/6YFvbZYXZXw2ygL2oPocxz2q/sbn6dO9cVBPXVATv7azbO5F2dX/Nci97w5VyYDlZNgdgjHnmDo8SEIwpZdR1Xnr+F6VSqaw2symDRS1aSBb9ohBTxEzRGcsYyxKB+YLZEvb93oqmgbncuproda21dSHfiubKbzy+xy+J3VG/TyR1QdGw6HzJPjyaTujyroFZieD6oLq2KnR+JrehPiJIuDqkmRY1bbdEHc74TNEWCSmabsmhyaKlikQhSBVxpV+pDSmVPgXHYn/3Yt8/HRq+mC6dni22RKODc7Mb6iKb6sNNYX1TfejDGxvuWdu+v3c0rIrd4fhgfh5+Q1CI1BwIbt/Y+uUfv7zraP+BsyM/2Hn8ySN9se62lde3H3SdImW/fqKhpTTAu1VoyRPjrUZUpbs68J3DvRKWTGp7v966stWjHImAljWttZ21AFAOLL7yxi+CLPFYeDUQhBjnPZUxw7LjuvqOVW0/PjWUzFvbljXuODVY9g66aU3rvjMjNmMIgGDslsPlASKKlLccvHistGlHFMlhjHKWNh3OUd6kEb8yMJl/ZWS+QhMbw3pnRWB83lxfHe6pCEyVbMNwRSI6Lp/J2YJA0iXXdFjBcjFCsixwx+UH+0Yf2wOjU+Pz+YwjaorgVwjjYFNWcphRcuriKqM0n7cnk4aEUC7v+BWBA1gUYgFZQrjg2q4LkoD9isgxMIYMx1Jc0bYYpTxZcKZzTsmmzAXXpQGfGFFEx3ZFESeLDgeIhxSfLM1nTYexjpgPEBQdlrGpImKZkMFUoaD5MYIn+2dPzuQ0iUQ12bBpR9i/riYYlkWNoMaQ2hRUuQuGzWqCfpdRoYQqgortOiWXM0EIhqIlo1QbkpsD2ubqaE1AHckZ/lAYY44QzllOhSqP5Ur5ohkO+V+cKtYE5K4KP8F4LPv/s/fe0XFc9734997pM9srFr2DIMDeO0VKJCVRlGwVS3JsPcmxLUeJYr/Edpy8HDuxHScvyXGXiyRbthTbsqzeKJGi2MUOFgAE0XvbXWwv0+79/THAEgQpWT7Pynl+P33OHJzF7Mydsrd8P9+aPzOW6IplGWLWO9itld60aig8E3QqLMZ+u8RgxGEUsMvPPLjDmcl94eVjo8mMlTh/vi9w965lP3npaC6nEWpa/ZNlmPlBz8XJmGESiwxYP7RBaCKbby4LjsbSE6ncZDqXU/Wsrj85Ev52a++PL3Z++/QFQ8CH1ITBIpNSq29rprmytuwz1y//9eHzLCY31ZcdH5x8/GRHPK9RgDqnt7rB97OXT3zu3599p70/o+qPtfd1ptJLA57l5UVnhicvTcTKPQ6re48ms+6ZxJHhRMZvl4FQv8tmkGnbojltFp2GJVWTGW09mmG/hQ2uFNx1SobDifmVQYzQ4FSy3OPACDkEzi0LBZrRk5m6b+OyIredwLXJQKFBBKATI67lBIZXWEFieJPSI72TO+uq22Ph9li4cMpYNLW8vrS+yDO7hQIHMCnlMLbaxAidGgo3Bz0nukeva66yjp8tgEZS2ZDLVmgZAVjFNAtlBApTUNt4bEGRG67EG2e719WVHTrft2vddDKi2ZmF3jzfc8/apuvml6+pDX3l5mX7v/yRf/7IqkGTu/3w6adOdf6vZ95++mIfBkYmJJZTcdfoli0L7l5Y6eOlp4+dv2lD4wO3rnzpcJthmHlD33u+94aF1QLDzZkAAeAn77TX2CSPTdq4sNoqW2btt4iEQU0A2Heh93zf+PaVDYl0bvbj72vr33+hd1JVX9yyejyftM4a7Y/XFPv+/hPXn7g4+PbZHgTwcvvAnq6RPbFUlaiv9ZfsPdr+lbs32W28aurPnGgbjqWeeuOMq764mjJlNodd4F7oG/inE90Xoql7FtVwGCk8t7K2pBAFMZFMvXrq0jfvu8Ftu8KDl77LtPwh/u/Eh3zgvTDHZeiudc0aIc8fvAAARXZ5KqceuPT7BaA/CnKGam0iw++oq2ABTyay7IyV9pb1TXtOdTa7A3+QiaCzq+uRR370w0d+NDA4IIrCZSaAkCDwumbwPIsQsCxrTaCmaZqmqWuGYZiqqhnGdLwAAFieQjP+QmAlDpJlSZYlYhJJFjHGdptSVlb213/9cHX13Min9waLkVU1zLJKX9dUve/CAIfBJfIcg29tLLMDLK4o7khczq88GxYlKGjIkGUowAhjzHGMaRJNVd/Y/Uo6k7Hat/LuaYTkTNMklGdwIqdTCmOpPItxjVfpiaYWBN37e8cwQixG2xfXnOob+82bLZYdwyC0yMkHFCGW1aI5/UB/xMbjIptY5ZZbxxMZzbwwmQCDjidUgWNrfbaMah4fnMpqRrlbimY1SonAYpZjEjl9IJ4dTeYYhAWWCQbckxlN5tibGoJ/s772325ebBIyMJUscYgemSuySRwHOxZWH+v6oDpkY21wKp29/gs/+eELR3eurHvxMzcLPu6LKyrvDHiS2TwAbJuR168JOmsZvnqFuHpF3FpRgTBqGY0UmEOBcpS67ANTSYnntq2o/725R+F9UwKfTaIAk6msU+TXlAdf7BisK/ZSSt/pGkII1Tg8wUpXMps/1T74bq0hgFheT6q6xDI6ISLDJFUjqRoyjxuCtmUV7ntWlGuqcbg3+puW4YvjiVhOS+eN25uqUhm91MURalIEOiUYgU1kAw7eLrMumeVZjDBesmzhll3r/EH3vJDbyaqaZsZTmiJxFJBpmCGfJAqYYTDmcVo104QIHGsJwTaeAQBOhLwOhkk8dl4zqMIxHIsr/XannS/2iqZJTIM4BSbgkpM5TRQZWWDjmi6wjMDiGr/MM/iW+qBIcwKHeQaXuGwiYnqjuVI7bxO5moCSV7UsoGQ6v73cxWGWY0Bg8PV1PpvIpDXTpCSc1TvD2UjW4Dhc6hRtIssBM5pM5QyS1cBB1fhUWmYZn9MejqeGM2pbNNkWSWUNMpHVgjY5k1cnMvnT47HOcOZodziRzHy0IcAxeDCRi+b0gCwsCzmrXZIi8E5JEFlGNUyHyNsVCSMIOGwzjl4o5FQe+9RNAU2987/2jSUyOd0klCzyBz66Y+EjL76TzuomMSkFhIBjmdqAu2Mylrgyda+azisa/a+DF+97Yv9Dvz70VsfwfL9yf5X7tnLnfbWVNwcCdV7nx4qKvBxjEiOpqiktb1JTN3WnzH5m69LXWrowQp9d1bihsug353oSeY1FaLg3tnlF3Y1bFj3yyokvPPrafDt/a2lontNe7FAqPQ6Oxe1j0/R+Ip2t9zmsHni6d7TE4xiLJBbVFAvMtPd/UjfQTAUAmKkMYA2BwlCaE3ZsbQalFKCjf6LE77R83mKZPM8y3dHE8rIAAFjpQS3sudB719pm9io3IQsFaT5lqDIrKZzIzvgsRdO5rGb+qn0wk2dcnO3Y+Oi+kZHD7QNjU6mLUwmPTQQAjRA6E5NQ2AwyHQIUTucAIKfp3RPR2qAXANpj4Sa3HwDyVwYPwMwDnrw4dN2SWrhqCtrTObSp+rK7kYVjXUMlTttoODE7GZEFS98xOzEoAdjeXP6tj6744cKG5Wvm/zqt/9uRS5v+/pFv/GbPipCTl/Colg26lKOD42+eLDjlIQAAIABJREFU7bzr9hV8MVdV5v/BM8eePNhKAa2snb7E7AnlUP/E813D+14/vXVNU9tIFACqFFdHPBJJZwAgpeVkVgSAf3nhULxvas/xSw99+7ltX/jJp/71t9995tDulu6HfrEbasqeunNTaEY0Nwzydkv3Pz2wfdWisvu2r/jFG6fLP/Yv9794pKKmaClrzJN8v32z5aFd6zw2RWC48Vj64cdfd+Vhqsj52fVNX71l5enBcM1Xnvr2uf7MRPKvN84zTONAW/+DNyzvScXmuXwUYDKZ+tGbp/7qptUfkoE/dTBf+9rXft8x/7/GZC7jEURLPZBV9VfOdJY4bR6bVFHkGYiliG4uqwh+cP3eIKZBTJMSiRU4zHKYRQhRCrsvDVe4FJnnnJIAANm81tI1sra5MqJmA5Ly+1qFrq7u3z7zzO7du/P5PGYwQggjzLIsQohlGV03WBZb2nSTEEKIaZqUUoSQYZgIIcMwMEZWwQHLOEAp5XnO4gaWlUCSRABQFIlhGJ/XY7fb7r333uuvv14Ury21Xw00a0KxlEM6IYRSndBYKsNRxpCIkxd5hFtGIsvL/OUB+/jI4Myp12jNUvTimdxwCCEECGEwDGKa5kBfb3llJc/xOiEIIQ5jHmMGI5PSvli2ZyqDECKU1nltsXQmYVKGEsMkpS6bxHNfe+btZDi1qLa4tswvsQwizOGBcFanJjH9spA36VRW7ZvKEYYaCAydpjVTI2alW46pRt4wTUJZBrM8YxgEARiUYAYBhYVB587G0Eebih0iq5rk9NFz5aX+cDLnt0uabnh4/HbveF2RpyeaXV7iFjhU6fccaO8XOLbM6/RLSnts8v10hvcDFjN2nlNcYlv3+N/evTlU6XI7+GzOrHW7FpX4JxJpjyJV+l2Fq88+t0DDrskE3g0YoTTJH+2d3FhVohGNxQwCWFBe9OsjF0p9jpxmcCzTVBE8cLZH4JiygAuu7DBXt1bQbr4bKIBXEXuiCY8sljiVk0OTMseWuu17L/Ruml+JEPKLSp4x953oumF5vdWRyEybBCCh6hRAYhmJYzHCPIMBIJJTT40lRBavK/M6JW44k9Pz5pbawNoqT0LTVYOeG02eH0uyLJ5S88Qk0ZjusvE1XsUAagLigMRTqm6aU+GpoE/2ex1TmXyxQxwZixQXlRR5JF5giE50nfAcNgkihKZzpkEIpVTk2UhKFzkmrRnZvKmZBAGSRUZAyASqagQjlMgZNo6ZSOZ5DDzP1XvtQ7GsQ+QT6TzH4lTGsPHM4hJn32R6KmdsrvaVeZ0tI8lIOulUHOGMhgAEjhGMfHOZf8+pjiVF7vau0aZlTRMp1WGjjT4Xg5nxjBrP671T2XBWFzkmZ5g5nWRNQgiUuWUWM7G0ntPI4krvyHg84LJvKncXu6XJWHpNmdfJ82PJfIPHvq7UwyA4OxrXNAg6RMhm05m8p6pU4dkim1DukAQWKxzbG41lcnpd0C3x3MGesYUhl4TZF092fOb65QgBRogAUEoVgd88v3LvifbHWgc+2lThEASdULco+UudT7/R0lRRxLAII6yahEXYp4hnxyItgxMlbgeDMYvRoa6h1olo38Xh6NB4jVsOOOVXusK76isWh4oEhjvTMYQwYhVpbU0Jz7AEEIdZnmUxwhgzIsdVBZw/evMki5llFcESh/xsaz9P6C/3tty2aUGYR7mq4PYS79vvXFpUF7KJgkmpwnMXhiOJvKoRwmB8ZiTiVcQ6nxMj9MgbJ29bOe9S34TTJi6uKwEAk1JCdYUTI/mMV5StR9YJLfR/NJPR3+IJltjNYWxl90cAh8712iV+xfwyjNnWkUhDyHtmOFLkkGt9TotmYIQm8pm3z/ZV+92NpX4EwCA0e3xZ6vzpg4HyDGtdiEGoKxHtjek5hnm5Z+yd0annu0YOD8UGdPLk0VYaz6xeXLOiMoQZbM32hdFqGTSYGfvAiaFJG89XOJUf7j7+uW3LbZIQyWf9koIADGqymD0/NDkv5OUZBmYIwAuHWhfVFdeU+GZPQQd6R+0Cv7IsMHsSeKdzqGdiaueyhkeePfKtz95k7WyPTza7gwDwX4cvrKgprp0xYlhQDaM3HC9x2beVB/9xVWOF0/ZiUu2W5ItZ9VPrF8QMfLpt4vXzoxfHUj1RbTKVd7rZwwPpzpHYA5uaq/3T1onC3EUAHtx9Kj2WHlfpQDS9u3Xw6y+ffOaFI+0D4SnRDLBKscvWMRa/OBKJJrOf2r7sgZtWfO62dXdtWVwZciey+e+/9M4ZwHdf1/z5pQ0AEMlnw7ns20c7//ymlaLE2DhJ5LnKUl+3yJ4/OzJ+omPrgobDZ7r/5o6NLrsEANFU9i9+9lo+rrpX1H3rxuXtF4e2LKwqL1YOpDPZnqmPL6nO5/PPHb/40LaVedZscHovk4Htq65OkfT+Z/sP8X8JPrQP/H7McRlqrg0dax8EgNXlwaFMPvOufvN/BEisgBASGb6gxaEAC0IejsWKJLTNKI22r5z39L5ze890vXdrANDV1f2jH//kkUceGR4aEgTeMA08YxNACOn6tHcQpcCyrG4YlsQPAFa0gGEYhmFomm6a5EprAGiazjAMwzCKLCmy5HLaFUUSeMHrdpaUlDz44IN/qFnganAYWyr8TfOrDlzsNygVGWZRsdcgpGUkWl5S8nxrwb3q8lxkKXMJpXSWRGitiwgjlmE4jkEIdF19c/er6UxWYJjZRnAGob5ollC6OORUeDbkkEbS+QaPbVmJ7+xo1Ip1xgjJLvn7zx22TmuLTgGCUodQ4pAXFDk2Vfl0An6nICNGYBi/IpQ5JYllKIFqt2xjGZNQl8jFkprAYABU6pRdPPfQ6upPrahsDjooQDyvb63y/s2tq7pbLt7UEDw5HNvbGw24nKphnB2JGIQ4RNZ6qPdW0v8fYmFD8YY1NdjJzHf757v9tzdXnR2NuiWh1GVvG43AlVcvdNf3SQPQzN/CtrWiAmNoGY0UjvHapVV1pY+/daYx5D3WN5rKquVB91N7zkRnKvShd7cS/F4wCHEMU+xQWsciJqX3LKm9GE5QgJxunOgaxoAA6LyaYF43j7b2AQWDkKxxOd+tZhI7z/IM5jCy8rfkDLM3lpV51m8Xh1K58Yxa77HdtrCkZSTeGk6nDLPIKWU1k2AwNIJVLp7TNI1oGkmbZrVHdoqMU+BZng1PqcQwOIxXlrlV0xB5XuS5qmJF1XUGQU41snkjr5pZ1ZAF1upCuaweTmnprAYAOZV4HDzG2K9wDEIp1ZhMqPGcgTEqcYoCzxR5RBMwQuj8eCLkEHWdOO3i2TNdBqXb5gWK7cJwXDMM7aVLY690jKfyeiSrYaL3x7Iiw4iIUECSaYbjaWepX7FJg5m8XUY8Ynpj+Y5IeiShjiTUaFY3EbAIqSZxCezaUvf2Gv/KIue26oBBqCIYQDS7x9Xd0euS+TWlgRvnlR3qGseYZlSzfyr7u7bRs2NpJ9Z9doECxDOqhNDOGn+T3+4QpiNOz0YnGtw+ieMUntMI0Uw9ZLensnlZ4Cypl1AK0/npkd8uP/qpm4Nq/van9kXSOYHBMsc2en07r1/w41eOnb40nNN1BiFraLOSMM7g1y/25XTTIDSnmzuXNez59md2/+dnblvdeLClqySd/d9P7jvZPnDkbM+hc33FXqeN50wKOqE8gwUGswjhgqqbwQ9ct/TVls5vPH8QUdjVWP7510683dLdIuCdjVV/1RD0BG2fvmXVD589eritDwAQQl5FWl5eVOJUXmntOTUc8UgiAEylsxlVU1WjvX8i5LkccsogRCjVCSkUAisUGrMk9dmph6yJTps5GAAGJ2JlQRcBwAAZVTcJPT8WrfE6YGaEWi/zRNdIY6kfZhJ3Fhq02sQzRgnrK4NcdisaiiRWhzyP37jitTvWf2fL4vubKy8c6Rk+2WcowhFdkwWOv9LmYM5YCQp7BmOZcrfCYwQAoRk3qgJmBw8UtAMvH2nbsbJhzpGt47Hmq5yFDrT3LyoPdg+Fr+ks9NKpju1XVRFuHY2EHEql1+nmOQDYWVfy/dXzpSPt8zDTF838zarGr25pFkfHf3zP+sc+tfZ7t25YV1HyPzfNL3GwK2qK4CqcHY3Kuh47e2n3Qzte+8Ku3/3Fjf9+59otN67OOd2vnBr4+2ePb/rWCw/87K3nW/o/uXnpAzeuXDW/wuOQ3XZp1fyKqgr/8fEJn0v+9tqFVmtlkqO9Z+zPd6zy2W0WMUMAB4Ynb2ss/4c7F3sba399sP36lY0ehwwAE/H0g4+9sqy2TGkq/+K6xrVVoQdvXv2frx093Ruul4SHNzc9c7TrtZNdOzfWq6xZ5/C8Bxn44DSkH+IDxYd84PfgPVyGrqst2dM98nbH5UQoHwSmExheuW2pLdnfOzYYTRYOa64u+vG+M/V277u5DHV3d//4xz955Ec/Gh4a4mcxAZZhMEIYI4SA59kCEzAJMU3TnKYBJsbY0A0EyDRJIVrANE2e5zRNVxSZ41ibTVZkCQBsNhkAnHaby2m/596Pf/KTn3Q4rsiI/35A3kW2Exm8YV45IdA1HLXq9SwIec+MRCYTmSK/S7VXUDwn3RCdTQkopYUIaWvdYhmGZVkA0DV1z+5XstnMnCsOJbKUwkQqv7TYaRe4cpdtIpVbEPIahJ4ZDp8ZnvrIdWsEv5I19Jdb2jsT0Z7JvJMXFpbaAODsaPzseNwj87pJMIuXFDkxRuGsurHKZ5MYINBU5FR4hmcwRpBWDYyAw+h/LCmv89oAIKOb/bEsIVDrd2xeVFXpdwyOTW2p8mKEDvTHloW8h/sms5qJZnKDFpxqEMB8d6DtD/Efe2+IDF9qU3asnPfGvovWnsXFPrhWueKjnUN0Vl99/5gjzTMYLSxz7eka5jFfKEewfXHt0Y7B509e+s3+c0s++53uiambVjcWco++B5j34TUEAHZZIJRG0jm3KNy9qOZ8ON5cUfT4gbPWt41u36bV1S8eaUMIBIYRGCZrGCalhNI6t80iqzohGiEZ3TwwFCOABIzr3IrMMZSSsWR+IJVXFPbC0JRTYOb77EGn8LGm4q/e0PixxcWEUpZnVYMQAhMpLZU3spSmk1pdiY1h0C0LK5IG4lmG5ziMsU6wIvI5jWbz5sparywxOZ3YFUYlJDyVSRuUQcAwOK3qHIPympHM6BMJlWWQS+G8dsFj4wzNTOqmQQwPz7sdfDSRzevExiGOxcMT6araChqPJHTaPZXleSwI4oFTrWtLnEVuqdbnnshSCiCLjEYhbZAXOsclgc/liSQLEsKlNptL4GwsM57RMrrhEtmAQ2jy2XOGwSG8KOSodsl2ni2xSQwgm8AuKva1T2ZlDt+yet5Tb565MByVWOx2OZ+5MKaZRplTnOe3+e2CYnOkEtEVJa56p1DstYs8i2bifDKGyTHIJfEYIVngOIxEjnGJfCSdkwXONAmh1FJ5IAArYthjlx/79C2ebPaOX+0bS2YNQimFBX7f2qWVT7x+6ltP7h1LJDuiiV/2Do/k89eXBddWFXdORicT6fOD4z67XOJ3VQbdt29c8NDHNg0q0qd3rnzzxKW/+M9nBydiVSFPwKFgjDCalonJjJRsSbd+u/L1u7Zsba7+2f6WzpHI/YtqJhbXZEdiYJgNLt/i4qDK08/eumbPya6v/2LPaCSh6nqt3xW0K3csqe+LJt7pHVYNs2M06nMoCGAqmS0NXC7gCLPiia3uXpDj2RlOUqgYoJqmNSgsUT5vmsfaBurKvTIrxLOqTeAA6Hg6V+mxWy1bbw8jNBxJLCgLWP8alwuBIcv4kCcEAHSis5jTCWHxdOZfAnB2OLK5zN/kczAINfkcd84r++rmebJp3L9uwQ2KwswUMIYrGctsnBiabJoJHiCEFjKNWoikskUuG8w8OwXYc+JSQbifjTev5Sz00qlLtUXe7pHIvIor7AYA8Ma57l3LrygSTAHCqSwAeG1i4S5jmdw7wxPZEs+ttSXFdnldqV/AsH1pzbbFNQAwlk8VcbZTXYP/es/mQlyvBQSQVPVXz/cusUm71s3fvqy22K0Uu5U7V9Z945bl37hjyYsP3vKbz+747r0bvrh9saHlllUF4UrJ+4d7TwebaloeutUjCQCQyOafO9a6c1GjyLGqqfMMBwDnx6bCmbyuaxWStESGf7xj7ZNHOzb/63NPH2m77R+faBufejuceHh1w43zq3x2+ZlLXWMMf2g8ce/8yqDClTuZv9q1anWwpFyxp/XcWCLxyBvXJgMfipV/ovjwh/vDsLSq+PTA+LzK4MGzPQBwY33ZWCIzR475b8DaiuCRgcmQUxmKpaw9d2xaONQ1ga+aPQGgu7v7p48+9tNHHxsaGpIlCWNkiRQWEyhUEaYUKIXZTAAjrOm6xQQ0VTNM05ixCZimyTCY5zmO4xRFNk3T4bBTQh0Om80m2+2Kw24rKim7895PVFVVXX1L7wcYAL/7i92xsOZE61B3Mpo3zZXlgf09o06bdNO6Bed6I2s3bBVmeSUhhOZQAtM0McaEEISQFUvAMphlWVXVdF19Y/ersylBSjXSmmm145OFS1OpMoccSWUZBJvqip9s6T45HLltZdn1K6o3ra7/1e5zegZlNLqtLuCWGJuAgMGlDjme0xiE6n3KxXAqrRp53eyNZRsDjmUlTkKoInAZ1VBNUuKQEEIyxxAKAJDRTUrpUCK3qmxaj7VtRf3+M10+u/jA8op7FpWN5cDOi8BAQr2sqP7gTAQ8ZhuqAoZJLicaml2uOJ6iAA/tWLXnXM9UKvt72nofQDMmgrNjEYHhVVOjAK+3DyYF13eeO8KV+pY8sObLd2++eU0jXBlY/G595t0owWzVpsKyZW77SCINADaeu3/VvKc7hl490/mLA2fHo8nByVjfyNQz+869faYbAHhmOs4Uw3SkpmqaGCFK6e6eyfFUTiek2C4goEWKMN/nWFfmWVfqvn1+CYswY+K+WGZFifv0cHwsmaVATYOwgr601KkZxkQ8hzFkMvq6Wi/m2HQmP5nNx5M5nmFFFmm6kVMNlQCl1CZxOaCJtI6BUor8Lj7oUyhFukGcCkdMyrBYN6ldYBCLvQIXSxvJrK7rpkNm3RIXlMTxqbwTMx5FLLYLY0l1KJwmFPEi568oOTueGM+qPMYrKzwLFzQ+cayj2S9eCk/p2GRY7LPzIZeYUnVG01XDINmUyybaJZYgcyyt9SeyAYlf4HeUuySvxA0lck1+R71XMRGcj8QNk77eNfHbthGZQxNpjRCczKknw+lgVelPDl38l/1dbcNTEoNP9AyHc1qlU9xZF1hc4uoTuBc7+zOaUV92WQRUTcpjhAAIAMdM+7hrhqkIXCav2gSeZbBOqEmoSahBqElBMwkCCDiUxz+9U0kkb/z57olUVmQxBXjrSOeC+aHVC6q/+esD3+0aqLbhWyuK65y2kF1pLPK+0Tk4MBkPeewYpgUxjsX3rai7cWnd1x7Y/h9/uYtjcUXApZoGnZFlySyz5GysrC158Prlv9x/7vED7S/vWPnnq+YdHZiYyqkOXmh0+ZKM/pWPb9m6vP4nrx7vDydymgEABqE8y96xpP7sWKR1JOy0iYBQJJEpC7hmi87tsclmd+Cao6BwmKWzxzM2BOsrkWGGJuMNFQGT0qlMzu+QhxPZoE0yKCVWKQNCWqcm1LhRF/LqlFqvEWZ4gpXyAQBEjA1CDUoBwKrbYG3hdA4AFV0pPt60utEwTE7h19WWWNJtYTDOJgPWuJ5M55KqntP0cwNj6xrKZ35tQAB5UxtO548PjCsiT2Z2oplMo3AlDvSObpsVBmDhjbPdu5Y3AIW3z3SvbCwDANXUelOJRpcfAI51DW9qrJhzynA8VeqyzxbKnzvfvfut881VRROqdmNDKQC8eaJz6/K6QprR7+8+vmNRnVO+ht/sr8/2VMpiR8fwp29cMXu/9ZgYIa9NLHPJr59s+8S6psvZDAAA4EDX8NuTiT9fUl3qsgGAScg3n3lrYXlI4FgrHxEFmshr+3pGNpb5TM44c37o3+/fvqmx7J4VNcPtvXc//vYwpnxxYFd98YISv0HI79ovZvPoS5sXfX5Z/S8Ptf3iwLktiyuXFYUUTgCA833hn7x55uEdV5AB+qFl4E8cH/KBPwzbF9ee6hl1eh2P7T33Ts9YsaL86kJ/Wv1gXYauzjIEAHcuqBIEvuAydNuGZsMkzx+5MPuY7u7uRx997NFHHxsc6OdYFmOEMbJk+tlLlMUEEEKmFTMwwwQM05zNBMSZIK0CE+A4jlIqigLPcZIo2GyyokgOuw0BuvWOOxet3/LrYxfhg8GOxXVvtvQAgMgwIstsrSs5PRReNK/MANw5GqtftBIhND010WtQAjLLSoDAchzCiiKrqqZrV1CCoUQWAKJZfVHI2RlLLwo4S902gmh3PPXS8KTsxdsXFW+tLv/bG9YevjjY1h9+qTPskTiEYDCqV/gFkcG90YzAMUU2YTypTmU00yR+G7+u2tPkty8IOocSOQBI5A0AKHaID6+p3l4XbJ1MdkbSkYzaMppYUeKSOCtxE6xproQZ2bfOZ3twZVWdg+2LZidSKvy3mAisREMvHGm19hTKFfvtMqU0nMr67PK2RTU/2H38PVt6V8yR5hmMblpQcqBv7Mxo5ORY7Msvn3ykfWD55tqmWxYnxse2866MYQDAX96+vlCx+OpGZmM2JZhNA2YLH0G7AjOlRiWOeeyOjaF51Z/56Yu7/uGJj331qcd/d3x4MvHdZw5ZrQgsmzcMaxXECNk4DgPqiWW9Mr++zLO5zLuzNrg44PDKgiKwPMNwDJZYXBJQzg7He2M5jODiZPJ3rWO/PDPMYlzmdHVEUgLCyCArQm5RYg/3xUbGIrFo5s3zox1TKZ5hCLAYY10nGIFLYWWZTeYMUeREgUlm9UhKNwnVdMM0SSKrcxzjVli7wGgmSaa1loF4TjdzqpHK6PGMMZXWDnVF4lltOJHTdHMwnBmfyosMDti4hQF7jds20NlvYzGHEVCTQ4BF4dmO4TU1JaaKBA491jHw80vDkkyntLTHISMH7ws6IlltIqthSjSDZjVzOJnriWbCeQ0DjCTyg5lc10Q6mtLPjydDTpFnkF8W85q5tMTlU6TJVH4opQaL/XIu4xfwW28eG7nQ9+QbRxlM+hLptmRqR4nTk1DHE2lZ4hHAdOYxk0gsgxHKqjrPYJPSjGoILIMQimfyishhhDiMrRomCAGDwIq+5TDyO5THP3OLL5u7+Yk3xpIZBHCwdWB5XWVYwg/ctBy39FaxNqCmahKEQGCZOxfVZTTD51AwQkBBI6RjMrmizE8BdEIrilyJdN5lk4qdtqt74JxuSQE8iviNj11XL2GSV5sD7pvqS59r7T8/FtUIqbC5+jJxd7HtvptXXugZ+eav94WTmaF42iHyDMZ+m/xsJutSpIlYyiTEoVwWLq1IAOty5F2EM5NSFiMySwFv/e3onygLuBiEMKC0qvMMM5rINM+4y2vENClghDpGI2vry1iMGYz4WYyCt2KuEGIQYjEqhCxbW3cimk6T9VVzw+1eONya1w23U/HZZUKv4SBkwXp7p0cik5n8c+d6fne6M6HqVo6vwXT6hYHB14bGftU70E7ybpuIZ12iINzPxjWdhVr6x5ZUhqyY5mLfFUFQV0cSw8wUEXQohWvlNP340Ut3b1mcM8mxofDaiqBVg2zN/Aqw8vyMpgSOWVM3934A4PxY9EDPSE845pGF9VcWJeiIR6odToHhhsOJHV98bCiWXFVXimYJ3yOx1D/8+q3V1cV/u3W5dcrrFy4FZduiqtAMGYBkXv/5qUuLA66BbPzgnou3r2/2OZVoMvvSwfOf3LVSJilvdUn5vOCi8sDJ/rEXOi4Nx8yH1zUvL/FRwwhHohcS5GPLmgEgmsl87bf7j1waevjG1XPIALryl/0Qf3L4MJ749yMgKZfiU3aOtfwIW1oHf3pmMEvR0f7wqaHwRCzvFNHSiuAHNxIMYhZcGAvgWeb1jiE3z/pssk3gAODwhb593UN/ff3qjmRkanD4+edf2Lt3byqVZBhsmcoN07wsBCNkKcgpBUopIYRSahomJVTTdQqAECLExAzWdEMUBctriGEwxsimKNbCJooCx7GSKAgCTwix25WSkvJg05KDxPPpzSuKPc49rX1XB5j+QZg9681BNJ21ooqDkoIROjUcWV8ZdMrCGyc7d6xq6tUFiI8DIKsJNNMSQoAwpoTAtPuAxRYAEGCEWJbN5fIIwaWOjuqaWo7j9nSFE6oetPFlHnlRYPpBCIbT4amFPmWh03t8ILKqLFDsdrQNRW5ct6AvlltV6Y/mtGqfzaOAT5SPDsa9Nm4wljVMurXGn1SNDVU+lVAANJrIH+yLxHM6z+Bb54durCvyKwLPMhUuuXU8OZrMra/0FsiABYFj3jzZuXlJDQA4RP7C8GTf1FSRXZwXcMF0RB2T1clThy7curwBAML5zB8rqhis9hX22NkBpyyWBVwIgGPwOwMTK0r9LMbDsVTIaSvzOq8ZWPw+MfsXRwB+SYkb2W/vb9s/Fi+t9NxZU7K93HFvTXXfeKLa64ykc3VBjyxwAs/+am+L9VrmNDIHZEaPNT0qZnlWWKAALEJD8VSR02ZS4hSlO5or24cjNy2r//oD2+/dtmxpfUksnfM7lTK/i8Ll4rXT10UQVIRql+KReJ7FCCETIKHqHknAADzGw8ncQCInCyifMxmBAYrCGdUlcSY2KWZMakyG89ubimWOGcuoLDJ1PT8RTjU01QxG4jzHygzTMzBaW1mGMHZKHMcgquUjST1v0IxOAJAssLmc6XIJDEI8zzIMymkEMHbLrAHIZ+MlkRV4VOe3RzN5uyxIIgaENAMyBjER2CUmnSdRTcuoWmVZABmaLOORiRjDY4zQ8FSUxzzvYyc1dZ1LXupzIs1kTOgZGnWIEtbSq2rd84uLHt5ZAAAgAElEQVQdXgWV2Bx5kxgGSDxT5ZYJAyV2MafrAUWs9SrlbhkRMIB2RzNZjSAAp8SOJHOLQi67hNeUeg8ea1u9oGoYs3eunvf0sfZzmK7yKmuCISD0iZePcy5pQ2MFxlg1Cc8gAJjMZ1jCZPJapdc5kcl2huPrK0PHu0em0rlti2osCdiigjNqeyAUOIxkgb9hYfUbRy882jaYy6v/NTaZ99k/v7h+MpNavaDsyZdPLagJ8RwjMCxGKKPqj+49XVTs9dkkkWUuxSPv9ESWFgf8NonDKOixf+upt4qqgzV+l98uUwB6pXEAI6QaOs9wltSLAOySsKG58sVTHa+f615eW9rgc7zZPdoyEq33OSvsDrcg/rZnqC7kwjx+6VBbQ1nghfaB2oDzFyNh/eKA0yYl89rgYOT2zQtFjjUppQBZM58xjCLJZlKKCn1ypmMDgEYIsV4CQhghKw+pNRwOnu21y/yyxlKMmfbRSGOx79RI2G8TmwNuAsAizGIUVbNHWwerA57msoBJpyOVTQCrojyaSeNGAXRiCtOVIgEBRNTcyYFInc9V6bEX3olJ6b88f4hDeOG80pXVIQZfu25gAd/e37YnnnprODycVc+H4ycHx4cS8WOpFGMyG0t885xOM5pdUX7ZL380knj5SPuDt66d08433zrzd9ctmbPzS0/t+da91791uttpE9c2VwKASc2Ypnp4+ef7W7YtrJk9oVGAzsmpEpddETiTEhYzAPCtl46Gw6mF9SVHRqPXVYeWFHmefuvs1uV1mkTnuXwjyeTLxzu/cOMaloU5zkIpVX+2ta9S4Q8d7fjMztUVwctcpSMeqbI7pwsO/NvT3fnsK1/+uEMWClPcSCx11/d+Ny6Kz39ym0cWASCeyR260Hf/9pUCx1r3Fs9rT5y6tCTg6kxG2k8M3bt1yYEzPSLPfu+5I/Pnlfz0YEvxvCpXhfeTNaFwJLlvdEzC0l+tbfbKYjSde+rwuTs3NgsUOAZNJlIvn+7cubTho6vmy/zlR3i3yfZD/GnhQ/vAH4ydm5qZ3BQbCX/llgVfu3lZRYkNrtL9/HFxTRPBwpDHb5PcdqVleFoB/JmdK9l4Zs87LQeefu6Jnz8xOjrCcSzHsmhmhmUZBgAsVxlKKaVghQUTQqZ9gRAYM740hJj5vGYN83xelWWJYbBNUXiO0zRNEgUrRakkCoQQRZHq62s/9rF7tly/lXMHaot8R/onAGBNXdn+9n74YLC1ufrwxQHr86JiL0ZwYWxqdVMFBjjTObLAp8w8N7LmKkrBshIQQgAhQgihFABYlpltJZAkUVW1yXDkt0//uq1/eCiRm8xoi0NX1E0rt9s8BJUJyvISP4/wudEoAHx2x+rRnJ4jMJLOVTulxQHnPKe/ZSSGMYmmVJ5hbl0QCDgEhNCUpntFTmbwq5fGAYHEMvctLaMYDEozuqlwjJ1nt9UFbmkMzSEDcKWJAAC2N1VuLPOdHJruAwLmTw+MPX2yezxjnuob74hPYASz83z/H8IyEdx/+6pXjl209PGLZkwEhSgC+KP6LCGAco/NLYn/o7nib5uqixx0vsvvlcVbFta+0dI1msxYV1zTVIFmvZY5oLM2K/4UX6m8LGwAgAF8dhkBTKYyIsOppu6zSf/08ev7NZWyTLHPcffWJQ/92fpXT3ZEUlkEILNswQ/bEgEtUa8gGCVV3Slw2oyvXUckHUnrIsMpEn+8N8pgBECjqVx1QEEUQGUIj/f0hPf2hnWD2G0iUNANM2vqDItsIudxKoQQCiiV0cIpzQTgJCnotyGMZZ6VBQYhJEuMqZmKwIQcgsjiDRWeBr+8IOis9yo8i20cU+qQFhfZP9JY7OCZzRX+HXXBgI3nMJJ5JqGaumlurHXNK3KNx3IjSa1zMPp2ItM7meQ4piuSOd49vntv98XTo4OT6pnBZPdk5lhPOJwykkltaiy/q7HRydsDkiOe03UDCEOrXYqNZXnE5AyTATyWUi9MpM6PJpKqUeWUNZ1wDM4ZpMZr+9yqmvFEcnWxJxgUbt+66PUzXQvmh/rz+U9sWAg9Y8W8hAAaq4pYBt+zan7reDStm1bILwVgEEqrmscmIYRymiGyjElpRtUr/dbIpbPJAMxUPbf+lrhsv/yL23z5/Hd7RlaUBv9nY6VX4DdUli8Nldy7a9kPnz/a0jGimjoAjEwla4LuG2pLR2KpYwOjiZzeN5UqdStWruG2vvHyIjelVOFZBGBZXQv8kwJk9bzEicYs3x4AcNukL39kw0dWNv5yf4tJ6OdWzVtTEXjuQv/FyVhXJCFl9D0Z9am2kdqG0H88u88hsb+62H13me1818hnNi5eGPAUF7l+e7YzpU/bqE1KCYBJqUamDaEqIRohOiEamX4J3IyVrGAiyxqmSenQZLw86GYQwgBpVTcJuTA2VeVxFF4dgxABONE10lTqtygNoZRFiJshHtZGAHKGKrPC7HEHAGeGo02zJF2TUgxoqDe8c+38kF1+byYAAAigNRz5Qk2oNp58+qPrTz/80Y31obFLkejh7hpKyxV7uSwX26/QfZy4OHTd0rkRwO/hLNQzNtUxMLmgOgSznIWOd13DOBBOZxFCAbtcuOmcpg/3TmxaVndwLAoAtzaWt/eNzzYO/Gx3y82L63xX5eEBgCfPdPk4diqWKXbbN1yrYjEAvH2h91Q48suHPlLqdYBF4QAA4DOPvTLEC7+4c1OxUwGARDb/7Dutf7Z5qUMSLONAUtV/crKjxms/PjTY1TL6+ds3bF5U43XIX/rRKyG/49uvHht3Okqr/PdUFR+MJIeNzN9vWPaPW5Z5ZTGayv5g9/G/2rF6Z1PtrsVV39974advtTywecmSytDsG/uQDPw/gw/5wPtFRtcBoHVqsrHBXxfy3H/zilMne3c0V/zD1iUjWTWjXXbg/m/DslL/wVlRxV7BXOuKHHr12cjEBMsyQClC6HIgnaUHncZlJmCRAUqIZQEgxCTEzOdVACSKAsbYYgIcy1pMQBQFy3FIEgWHw6Yoksfr3nDbrjvuubuysrK4qCirGavLA+fHogCwfXHty6cuvccjvB8URKs5WFNfJnLsxGjaCqFeEPKeGg4DwOK6kuNtA6FAMOyff3mimsmbBEApoVbUhEUJDMO0KAHLsAgjnmMlSXQ57alU6u1XnmXVFAMUMVAwDlhoLvJNJrIAsKYi+M7ABADUB51Ou9Lk4l595Whj0AkALEYCzwUV0QS4b0nZ8iIvIqTUKVQ45IAkHOqPaoRQCrc0FWEGFSmCzDHKVQTgaszOu1/ucQBA2/jUwc7h/ef7HvreC1974cSnNs//4s1LXmlrr3P457nm+s6+G2av3O8NQWSvX1b73d8dBAA0J4ogloJZtQLeu513w9W/+D9vX9objvWno/OcXmvP6voyt012suyp/jFrz+zXAjNyCZ1ZrmZL/My7BBLQmUtjgKaQbyyRGYilEILzseRjQ+NPZ/L3P/rS0FTyUiJCWbhuc+13fncwksiYlIoMY8lVs9dF63KU0oxhKCxjEMJhPBDPHR2MZXVzPJ23XDuSuiHyTCJjGCpCBqkP2heGnGlD51mGAFCghEJkNCwDaIah6ybPYoFjXTaeQSie0oYmc2PRPBimXcJ2kWUxnue3cRgnc2aZQ5pMq5ORHDWpnWfH0/m6gLKjxldmF0N2ySHwIsuwDCp2iEld99n4VRXuWFKNZ3MMxqqK0qa+rNzFMjiH5Coku2V7VgeeYZdWha5bVP6J1TV6Jn+2Y3B/++jZkeRYPPPKS+9kM6rE8yFZuDCRckucxOFalzKRybeMx6MZbSiRQ4CWFDlunxfa2VBU5pYWBhxLS1wfay7+23U1y0JOgWPuWlT1RtfwVIq81j1WfcPCwTM9O8qDIMDDNyx7fO+Z0UTqfM/oVDK7sCZU5/d0T0ZNQgrpa5J5TeZYAMhousSy4VSWEMoxjEmnJZZrkgFrT4nL9qu/uG0Hx356Se1L5/sSec06Z0EgeNfOpc8evPDPP987kUgNRRN+pxJ0KgtL/LU+V+vY5FA8wyGsEaIS0to3vnReGSCkzNTZxTNL7HT3m1HGk5n+BjO9bklV6M+3Ln3ywNmW/vHFIe9HmipODkeeOtNlE7jP+n25070HDXKMMKwoZLrDJ84MYwrjWmpcS1fWeJbU+lonwhOZTM5QFYaXGRYACvYQHmMBY4wQgwAARIYBAA5jFiEr8RGPseVA9U7bwPyKIgCIZVWbyAOg8VSu1ucwryQww5HE/FJ/zjTn7C+A0mvw7Ug6Ryn47TIAWCHIFGAoEh+cmEIy31wevLqdOTjSP3H3opo/W9EgUnrnykYO49WV/h89eOvDt60/1zG46ys/+7ufvJZN5Waf0jEwWVvim9PO8aHJhsBc0+WxrqFN8ytrQp6XjrQVyhIDgEnIngu92xbWzDl+YCpZ6rIXHp5Q+u+vHuMZ5oaltcdGIstLfY1+18GWnuuX11uRA+2DkwLLrGsoL1QXLuD8+NShgXGNGJfahv7shqWzvyoYB4bDib/+zgv1Jb4tC6pnH/B2e//hiwPNQff66hAApHLqU2+fuX1Ns1MWCxf64bH2gE38enf/xGjyi3duYhH6p5+/+cPnj45OJZ96/cRgJP4vGxZscimHJqaETOauBTW1Xodq6iPx+Pd3H//L7Sv9dlk1dVM3atz81++6zq18WGTg/1l8yAfeF4plezif7U1Emj2BRpfvE5sXcyzz5olLFGBzbcmentE32vrejyD1x8W6yuA7A+N6Onmxq+cXv3jit7/5FcaY49jZTIDOyD2WTYAQapqEUmoYhsUETNM0DNMklJgmMU2gUGACGGNVVQtMwG5XRFGw2xVJEiVJtNsVRZFE2f7J++53BPwFK0RD0O2VhbxuWlrzW5Y3vHH2j6MqvhrrGyr2XuixPq+rDO7vGQOAlY1l+850E0oXFXtqF67khJnaNAjNUAIoUAIGY0IpBWBZhhAyhxKYgIVLB0Wemee5XPDSQtDK0ZbMLir2AoD1sFvKXc/sPxmOxguK6ruaiiUeN/vtIseYlA4n1Tq/w8ExHeF0o9+ezOmLgo4NZd5FAWeTb27uvHfDHBPBLQuqF9ukh3936L5/fboH+O/cs9Hv54NB2cmILX1jCKDR7X9vE8Ecofm9YZkIiipdqZxqBRYv/IBNBOWKY0rLrq8K7m2b5DFnVSxGAF/ete7opaGxVDZimQiufC0wSxSbAwrAzqIE11zSBJYJOJTTA+PfON/dMpW4s9z92PVNnkrvV3/7doPD2+jyB+2OT9+y+gfPHU6m83gmnyO5imZYQj9GSGY5k9LWyaTAIgYgYBNSuikr3FRKm0xqTqeom8b8kNshcgGb1D85sWd4ZCSfndLNaqeEEZTKrGEYHFUDimASglmmyCfaZE6W2Eq/HM/qkbg6Fs0KLJrMqg47zwKdyOUZjNwKt78nPJzMZ/JmSBFZxEgcG8mpY+n8ocGoJDDDqXy5TVoUciRyBi8yW2tChKX7O6NHh6ZOD8U21ASWV3vLQi5BYg0TfIrk4ORbm8vGwtH11d6dC0r+x+Z5D6+sKDJhzbI6v8cxEk2+3jU5lc9fimRyOjFMUuNR7Dzvs3GVTtkmsArP2gVuMqtWOWSBY3bNK5ofsBMADuNyu2QCvW9J3bOdwzsWlnytueZbn9jywlstLsQxvPi5bSse3Xv6jVOX8rpxaSQqsMz8oPfi+JQ5kxEhksq5ZBEBZDRD5BjdMFuHJuwijwDUWcWkCyiQAQtem/St2ze1XBoskbi7n9o7npyOIGryBT778bXXr6j/wfNHKSGNJX6TgsgypU770rIihWc6w3HLdX48mqwp8bpEXuJZ1TTpjAKe0MvdAl3JEKzb0illEHIr0uduWP7Msfb//fIRwzA/ubTurgXV/anc8FRq2dIaryJxeTTQF79uae1z+y50jkXPnBt++1DXjc0NC73BhUH/aDJ1fGSsMxk3KaGzsgkBgEZI4fMcIR4BWIG/GNDQZLym3C2xQjynBu3yUCJdZJdwQZkE0Bab1OJmbchLAKQr8zKjGXpjEMpcNZw6E9FkmqyrCgKlOiHWs7MIHT3fl9cMl0O2qgHSd08rRwAuheMNPse5/vFdyxvQzKzFYrSwKvTgR9b+5qt/5i1xP3ew9etP7DndMWyd9dKRtquDB166NFTiEy7GL0+JhfCAN65KRnTkWpEDE+kszzC+mfJbAsNF0xltKvOlj285PRpxS8LHF9a0940DwLrmKgBojU6e65r40i3r4Vp4trVvZ20I5YyKoHuOcUAnpiXTP/y9F6Ic+fmDt1n7rSlrOJb6u6f3+RoqH7t9IwBEEpkv/fQVh120S0KhhZMjkdcuDv5iYGx5MrlpXuXFgYnHXz2xbUX99z5/m13mO7RcWWl5LJsflUSvaXxx3RIESGC4rqnoI2+e/ssdq7x2eTKV/vcXj+690Pu/PrKhxH05sy28y8z5If508SEfeF/wiBIF6pdkAGAwXldfdm5ockFt8eHzvQjgxvrSaDo3NJX84CjBNV2GOrq6N062hE/sffq/ftnf348xBko5lrWCZa2oAABQNY0Qks+rhmFaTMAwDEKpaRLDMMkME2AYxpphMUIFJmBTFEHgLCYgioIkiYZh2hTZyig6yZZu3XGLz+Npdgd6UgnrDkNOWzyrLi72WDrjzfMr3/nAiuZuX1z72unLVRc214QsP6Wcqu0+3hFw2NKUXbB0tSRNm2inKQGASYhFCQzDYDDWdWMOJRAETpZEj13WCApefDM8co2ssgGHPJZIwywTwZLKoqWVRRuX1f745WPWMQ6Bu3m+e0WZqzuansiol8Lp0US2Zyqzusy9stS9rTZ416JSjvmDh+HqpornDrbuO931Tmv/d3978MmXjqc5ft6qhQ9urVM5o8runu/2r6wufe3MZX351aBXMoE/CPPd/vWraqzAYgSwtiJ47EoTQV4zfnOkdV9r3+9p6F1QEC8AwM4JisAtKw6IHHtufKpwtx6b9NGVjXtPXnrhfLdqmHBVYPGcduZgjpXg6rWt2K7ERXa1V1nkZDaGSm6rqv780uau8ejBS0Mcxg0ub5YxPnvrmh88eziazFryln6V3DmayVfY5ISmJ1U9pRnt4aRT4lQgMo/vair+u3W1n1xa2uy33bmgeEO1Z2Wx8+a64I01/p/dsbGSY1YH7U0OeSyrGgbhWZzX9eUVxcOxNFCwc5Sa1DCoU2JkHvscfJFHTk+MjUVzY5HcVCxHAUkM0+SzmYACPknAjIHIqbHYucnkUDKXVI1zY0kGYxvH9kxlLkym2iLpSFa1C9xIKl/uVHTT3FTsk2RuIqemVA1MEyE0MTSeymU8Mrux3Pf5bcuPdg45RK7O5zIElFfYFdevOtsz9tNzozmNiBxeW+bZWOWZ57f7ZH55yAEGSpmmYVKenRZMLZ9FjJBBqUXPKKW1Tptb4v9ubdPZ4VhvJpLF2hfu2PDcW+c0TS922h7atnJ3W19H/8REOGEQwjC4MejpmJiK5/OabqbymlsRASCt6W5ZYDGOprIeuwQAMsPgmQT8VhTyHDJgUkopuBXx73etu9A/fvbUxZueeHM0kbFsCA0uX7Dc2VBT9Nyxi7VBl0mnrcGxjCrx7IWRiaFEOp1TW7pG64q9HMsUcgoxM0K5TohBqdU9DEqpdSd02qWHUmqlTpZF/ht3b1k/r/zRt05PJDM2jtFM8z+6RhxrG3yxnNfFf/m2puGp7I0bmgHgm4/teWbv2VxWYxBSOG5JqKje646kcthk8EztMNUkBQJQ+HBNMa69f7zU7wTLopXXOJYZimcWhjwAwM5EBRCA9pHJtfVlzEzu1DmNGJTOebEW/j/23jtKjuM6F79VnSfnnZ3NOe8iLXIiAAIgGECQFJMoKz2REiVKVrZkWXrPPytYsnKyFWgxSBQjSDAiEDmHXWzOOU7Oubvr90fvDAaBlBjs856M7+Dg7Mz2VndXVVffr+797kUA/e5AjdWYJoSnqCw5efZCf3VZHgBoOAYpeboyz6yc808CwABvDs9UWwz9M+7FZfkEoC9TlhgAWEzHJam1suCnj+zctrzmhWOd33vy4ONvnI8n01cog1/tn0qkpKHZWJ3B2hdw9wXcaUl66VxfgU7zyqm+pw60L652QCZYqEJj2t85srXlSueAMxR16C/bIfrz/va7NzYXW/UHR+aKDeo6m+Fo+8iNrdVKaqBf7z135/L6a0YKtc95z067T6YDR84P3rqqLvdX/QFPtd4ESqSQx/PLj91caNFDzvD9/RN7B1j26CdvcejVnmD0R88e3bW5ua1r6puP7nUGwhzFOKOJ7xxqZwRqSSq8yGo/fHbwbO/kp+9Ys6qxlNMwSR23ypH/6S1NFyZ8MxenPtxcU6TVAECHa+6PB7s+u32FVsU4Q+Ff7z2/uaniX+7ZlPUMkMwYvdO3xnX8X47reuK/Fs54zMILiq631Gb81xeP3dBYPjHnW9NUBgBPXBzGovTfpioeGxt7ec+eY0ePkEw4ECEEgBACBCBbTjiVTmOE0qk0AMIYK6nSFf+AJMlACFrIHErJhMiEUBhjhDiOxQizLMtxjFKuWCkzLMtEr9MwNF1ZWbV+w4Zbb90pEupY99S65nIAcCUWCjlrOMYfTRAEz3aO3dVcXmTWH34P6lIFb7P6ZFXFNkGNAJ44N+Cc8QYi8bODM7esbTwzNl+WZ66uqJifnRbFNMCCehgpcmpABAAIoSlKlCRMYQpjpcCCTAhFUxghIBLCeHJ8vKa6huUu7bsAgF7gzozP1dpNdq3q/LSbobBdqzJqhP9480I8GK8qsCh1c828yp0OBaKyL5bud0cA4KZqu5qlAaDKomGpa70//xIqCyzbv/ib072TKp7dsbL2jg3NB0ksHAj98JY1eSoNjamElCrPKVdsEdR9frdVUEOOfYzeFRMAAKX9XGGxXas6O+XiaLrcrBua84Wiib//+Z6LIeL3e+9b2/SX2rs2UE7Aj4kTBkPepXbbvsHpWqsJ4wUBX4lFf2F0ttSsmwlGFoTFDPVUjrA421QWuRNJsRFRJvoZrppmDp7zhOJL7PmiLGKEC4za16e9+0733NhcoRc4VzxWYTLWl9t/tftkY5mdY2nF3YQy0wwAfPEkRtjAMTxD0RjPxeIigZ3V+S12rVngBJo2qNjlxaZ8jTAbi9SZjAgjCiMjz24os7/QPSEBFY3Eensnm1Y0DjndW2qKwiK52D9WUVpca9ONu6MUjQvNAo1pmcDcjCevwLK9Ok+vYpOiVGJUp4m8tFDvjKQC8dSumvzmPH2tSQtA5iKJxjztxlILR+FQUqo2q2kMva6oTMAXT6kEBjDyp0SSkhkOiWmotmnLDWqfnJ70hWsLzFVmrSgRH+LH3AHgVIhTn+ocTASirVWOv1td401L5WbOrlKXGtRmnvUn0nYNH05LFp6NinKhVvAlUiU6FQGgMRZlwlEYECKEUAgpmexZCtdZDK/1zpRZtOVGY11J3lMH2goKzAV6tZ5hzw9Olxea1zaUIgQcTekErtfpScnyrDdabtEzNHVifF7HMy0F1hfP9W1trswzaACAQgghtJDBBi+Yy9mBVmqHEQCBY7Y3Vywtd5ztGP5d72Rzvilfp5YJWAXVVDT4m70X3jjY01KWX5CnozF1dHJuLBCdUDE4GO2e9x463vvBG5d6k6kCvUbFMorRTABEQliMMUJpWeIpBgBohBBCVCZhP5X5WbnOApOuudj2szfOShQGCV4+2h+OxYKpdDCRurm6rMlhefbixNDErOiPyzLxhmJl+aYim4EAcBROguQKxGdDsSQCI8cihGiEZCUXEwLlY+5sV5iDTOB4x6hGxS6pdchA2qfcDQ5L24zHphHqrAvFDQiANxE72jVR77DVFliu5gMEABCiAKJSSkNfWiolQrzJ+O9PD31xQzONMck5+/ce3X//1iUlecYquylLOZTLy3IDAMAAJ8edep4tNqi//fyR79x/IwLwJOIWQQUACSnFY2bEEyizGkxqocCq37y0yhuMPn3wYkWB+ba1l+33//NrbfPOmFXNp0S5SKujCf1S7+gL7V3HTgy9eLjr6MXRJ75xP2SUxP0TnmlP8IF1LbktuCPxaDJdatZnb6RjZHZoxrNrXRMA/OBY54cXV0Z8kYl5//03LhkMegem3OmEfGdrPQBcESzkiia+e6QzZRQa4nI0FP/UratyTzQfCzvUuml38I5//MNkPPbU5z6Q/RUCODw0/ZMz/f/xgVUrCvMVMnDPrYvXlJdsa61lWeq5oz0arWrXM4epVCo1Mn3m5HiRWf/BLUtuWVvHsZQrHPnp3vOrGks2Lqo67Qr+r/XVLXbLvu5JjMiUL/DqmaEHNy01aLmLo86nT/Y8sn1ldb4ZrsK7eHFcx//leMcbk/9j0WiyjYSC2U3625bXshw94fRfGJheX+7wxVNv/+fvF8bGxh5//PEnn3xidGwUI4wWEgSBLCuxQJIkSWlRTIuiLMtKNTEpow0QJSktSgBEluXsw0wAMMYUxhTGHMfSDC3JMssyHMek06ISIKRWCXqdpqa66tbbdn75K1/ddccdlVXVAHDzmsaXj/dkry3rxCg0amd9oTqb4b9HVbzn/MDJ/jlRkofm/L88dPEXr58rrHK0cdTnT3WfFJNnJ+ZZgVuybEX2TxQvAcZY8RJIV3kJMEaK9prlWINOS1NYJvJTTz0ZiUSuOHuJSaeUgMi6CFZVFy0qta9dWpF1EShY7ND746kKk/re5kIKS9nv0VtvYL89vnzfDZ+/Z/23Prp1VWPpqrqirxUVFOjUSodncXnQzkLs8rumAVeg3mjdsPJS7tFFDsupSScA2PWaB3+0O2azvfSZbSat6l2oCEiO4wJnLIMGg9UnRVcU2/58cSS3QtmXbl1zanBqNhR9q6iht+/ht+KZhABCYNOqzBwXjCVYiklJafBhrG4AACAASURBVIzQV9Y3+zTqrz1zyBOO1RrNfQGvTa/+zB1rfvnCiWAkLskyzngJlJbL9RoDx0DmLBqOuae+oNSgQgAsRQEAIoAAGIxohDzJtBJcRACMAre4wD4fjKpoBAhS6TRDUSqeCcdSCCApiYUGAQhRs7QkIpvA6hj6i7evImlxNpbMUzNV+Zo0yNUWjV3NrS4w1Ro11WaNQFMchWfCCQDUmm/Us0waSXFRBAIcomgalVhUaoFJp6VkStJRlCSRcq1aYHGZXrWpzLK90h5PpsKR+Ivdc/vGvBoGEpIkppLD8x6nLxj1hdR6zcnZgEzAFRF73JGZcCKQTNtU3HQoxmI0HYozCBAQGiMJICURkRCOwqJMCCGUUhMRQJJlCiGziv/I0ppDg65uv8eoFf7XTa0vHemaCcZvW10/Met7+lz/fDis2KM8TTkM2m6n2x2Lj3iDoix3z/sK9KpwLDHuChg0QtZsTYoyAbiiXi9kNs6V8VJqFKyrLXni4V3mWOyRPaf+6fWz4WQKI3RTbdXwnG/eFXz4J7s/+4uXe+bdZwNBUSRfrK94oLX+npbqaDKtVfOyLEdTaYyQnJPKViIkIckAoOT2ETNSEykj1SUAhBAl+QNGSK8WNjSUPXu65/f7zkQT6X+9cdmX1zfX5xnfHJl1B8Kjo+P/+cVdj/5/95XkGzcuqfjVS6du+4dHp1wB5TbLrSaaZ9ucvld7xtKiBAAyIQxGKUnOZhO64h+N0aQrUJJnpDGVFBECSEmpjllvoUFQeonO0JVjPRPLK68s46XcCEYo156QcvL5dsz4NlbkKwdkF589x7vdgYjarG0uyYOch11phGScA8rPHbOeOpu+c2J+1/I6tPAlyS5lBKFxb9hh0JLMn+xc1zg257t/y2VJhM5Puc069t8/uO6WxuJxb+SrL5z5+2dO/uSNvmRC9bWPb374vjWf3HWZRX6ga2Tr5QWJU6I0F4pW24zK1RIAbyj2p0MdWzbUAMBrA5MA0Jxn2n24c3FNgbLV0zvt2bGoGq6Fb+4/7xWoey2m6XHvp+9dk/ur/oCnSm9yByOf+dmLWrtuW2nR43vP94zNE4DesfknDrR95Ym9NcW2myrLen3un794/FO3r+Y4GgBScnpdU/mujc27Hj2UGppLTM6KMXjsa/d+9xM7FlUWMJj2hmPfffHkjS2VQYKnRfHTG2qP9s5X5hlayk3feOHUM0d6H75xGYXRt587cahn/JHtK82ZsCgF5K3z2F7H/+u47h94B3DFF7bAASCWTLePzZXnmQYn3JUlNn88paEpncCZ1Px/0aMyNTG5Z8+eY8eOBvx+xdZQ1LFKriDFJyBKkizLDE0rPoG0KAIBjLAoSTIhysHZBkVJUurysixD0xTCSOA5pU6ZkkiU41i1SmAZprCwaOu27WvXrTebL+0TKLfpCkRiiVRlgcUmqLv9rqyLYD4cL9CrT4zPry/Pr7Sbvvrk/o9vukwp9U6B3sJ0KzLrf3vgwo/29j99drBzymtUa/tLTXVVjs8uKTx/tOPhFY00Qxt5Ps9k8nrc2aoCsiRjjFA26SqA4iUghCjvPcXrIssyRdMMTafS6UQy1dXZVVtbx+V4CRBCc8Gow6DJdRFQGD99qnvP/o5vfnSrcphNUI9H/WuL8pY4DBxNXZ1A9l3Mmda6olNd4w1ldp5lAKDAqJWTqdMznhurCyGzhV92mYtA1ed3v1+5R692ERQZNA/tPmbl2a/vPuPl+J/fu3p7U1meXr2vY3hjQ9lfag8gx2pHOf9yB92diNWZTG2zHo6mLGpOcRGoOEbDMU8e7hAZvKQ4DwCaKvKfOtDeVJGv4phsg7nt5PY2uiryIWuoKd4Ji1oY9QRMKp6mqLQslhh0nnCs0Kj58/GuHYur/Im4VVCpOKa5Iv+Xu0+2VDh4nqUQiksSgzG5PN0kIUBAdmgEBJDOzIG0TDBGBMCbjFk5NUZAYazcuzee0tKkbco13Du1ZUPziNd/R1OlnYPnT3Q11JSzmPJEUzYTV6pXNVh1/Z5wSJRljJ3zfpNBU67njSpORVNpicwGE4vzDUaB7feHp0JxVzSVlohAo5gkxVNkIphomwv1ecJ6jtlabs3XcBem/ZIEiUT6hmpb57xPx/GeWHzIGx8Pxvpcnti46zObmmrzdO6kGI7GhpxBvZw61TcuhZLVzRXbGoqW5BloJt1sNQUT4lQo0e+NzEeSgWQ6LYNJxZgEtkSnAgCMEZAFiS1AZncZIRpjJYKIp+lqi35Pz5RWg+0abXWh9cUTPV3Ds30TzodvWXlkYLKmwMwzLEJg5HmvFBajyIWkUCx5fsr5iRWNg3O+V9oGH9yyjKKwKJOEKCm+OEJAIpCNFIukRZks1CiRCSgJizBCOoHd2lTeNTi5vNR+YHi2pcAyOu870jfxyF3rv/yxja/MB9883XVuOvSDHSuX5psphOY8wZdO9OiLjPGUmKdTK/lGs7MLIcRgJBEJIwoARJkgBBihFCEcxpCxsXBm854AGFR8isBH17dAOm7Wqp7uGvvc+uYlDsv3jnT09I1/dN1iDcUIHHP3ziVGlv/hn4/0TTgL7QZeyx2eD4QleZnFWGbUjvtCBIGKZZSbohC64uEimfP+6Okjt62vd5hNc8EohbFRo3muc+yB1logokwkUZYCycSYJ3C0c+Iz21fA5ToEhQwoDcqEJGSRwZTi8ZABBkO+9gl/Y56p1KxDOR6A7+w+KqXlJQ0lN9QUoyueSgDIcRF0zHqng9GVRdYDF0cWl+ZX2k1KsBBRnAMUO+MPczTO06khY6bvPTtg0akf2L4Mclp+sWd8Q4Vjbbk9T6daUmzZtbgsT0UfbOv9wX0bbmqufu5gx+Z1NXX5tqSUGgh6fa74wKzvIxsW5VwXdM56HDq1TuCybf7kmSMrmkrdGCOc/s3pAZtKkEKxN88OnO6dXLGyNBRIBuOJHU1VABBOxwX60h+ennIdn3LtdJjfPNLz4c2Ll5UV9gc8Fl4FAP0BT5FGw1PsP/zm9YpiaySV/uxtq8dmvc8e6vjBU4d3n+j50/42b2nenns3YYSeOXjxwZtXhlCq1mBJSumULIbi4qdfPk173cNJVGS2fOX2VduXVQFALC2+1DX01T8evHFR1XAodkdzxfJyU4vFWmM3/MehTg2NpVTyq7etVjHsUye6dyyuund1U25SUcjOFriOv01cH9l3gEaTbSy8sAezbVHlsf7JVQ2lb5ztz9Ord9QVvzYye3jgGlHm7x1jY2OPP/7YH598cnR0lMhEzoScyrIsyyQtipIkpdJiWhTFtJT1CSRTKUKI8glg4WAAUNQFik+ApimOYyVZ5jiWY1lJkrPpg1SCoFYJ5RUVd33g7rvvube4uOSa17ZxUcWp7onsx6yLoDHfHIzEYmnxv0FV/IVbVpdppG/dvXj/l2//lzta77PqPlJh3lFTfUNlGZOWy/TauWAUAJa2ruQzQgKMsSzJC14CJYBKlkVRBABZWuBMGCOapoEQlmO1GrXAc4lk4sknHg+Hw9lTZ1XFkOMi2Laocn/36JYVNXvP9udeJ40XHrcr1CAoxxT+62HQCBsWVfz8+ePKR73A3beiDmRyfuoy6fD7qOu9GvVG66bV1Ue7RgHgQNtQswQPPH3Y2uhYe0PNSCKRlOS/MtFQ1i65wiyAyzunwWAdjviWF9lOjjtzXQRra0uUKkKKi8CsU61sKPntnsv8M7nWTxZKy7naYgBQQsxpvLCzy9NUoUHbN++lMaYxnZLTD6+pPzDheq198HDvOEKgaIhNOtXDu9b8cveJYDhOAFQ0HRfFXHkxAqAwqrpKkKdsJCtXpWGpSFpKZWZgk01rVvFri200Qs16jsHYl0xpMWZpSoXBl4pp1VQ0Lk2F465IMikSFY0rDKqSfMPFoWkOYwqBhqWToowRMqnYAX/EwDJD3mihlmcpPB9Jn5kKhBLiplJLkYHTszSNUSwtn5kOUIAACKHxaCBsVmm6Z+daHYaV5ar7m4tK9Jp/uHvt6yd70imxzqACQKUmzcnBSQBwuwNf2tToDAQ86VCL2W4WuFKTaqlDv7HEvCRfX2IU1hYZVxUYZQKiTJKyDATSMommpYQoEyXUHgBlomsAQCbEIHAfWlR1esQzHPSZNPzNq2qfO9k75w7a9eo6m+mhX7084Q1IhDjj0Ygo98cjFoGf8gRTsjwTjMz6QyxFaQVWiWjXsLRSkozGiMGIypQn07GMiqF5CiMEl8e/QL5B86P7tlwcnl6UZ/j5sc4j/ZP+aKKTxb0x6cubG2rri7iUGPQFFbN1fN5nM2plkWAaBxPJhHjJB6ggLiZ5mlNkvgxGABARRebyuZcFhZBOxVm1qpYi23fv3fTKxaE3esdSqXRzvukb65sxRv98qu/xNy7sXNtQZTA3LyqoKrHduKZ2z5n+X79w0hFPt1pU1UatQ6eut5unfOHOGbc78nYlwxGAUpkYAfhjCbteE4gmAMisL8LRHE9zY5HQiN8/Px/Z2lKhpAaSycIDJWZiokRCJJmk5bSa5hQfl8LrKICOWW9TvonKecYRwNSo+84NTY5rRdVnn1PlFBem3c355ny95uULA9sWXdqwzy4XvmjcrBayHxHAxcGZxdUFKOfBJwBvDE6vL88nOd/wDL6ppXxjfenZvkm9ir+lubYv4B4IegFgz4WBXa212ZBFAJj2hdqmnAJDA4AvFDvTO3G8YzQaT21oKvfKsoFW97qCS23q4Wn3yuaSeX943+mBY0MTH1jWkJTSSSnN5uwBuSLxbx1o3+gwOZ3hE13joWR61h8t1Rj7Ax4ASIgpFc0f6Rj97UunDw9OPPa5O7cvq/7SvRuf/OYHX/zOR3dsbBaXVvxx1zoVTf1y9/Hta+t8cqJMq1dS4kbi8of/fAjmPZSc3vPJbd+7d91vTgzc/91nTo7M3bn35CdePTvq9L80Mn9va7lRT1fpTP0BT5gktjUUvt42fOuS6mlP+PeH2h/cvGxZRcEVS/EVi+d1/O3hun/gncEZj2ULk7lC0TlPSMOxHE2tqinsnPMaWcaiFfQ5mwfvEWNjYy+/vOfYsaNerw8ASZKkbFoTQgiBtCgCIWlRkoksSxKRAQBkIiu+gmwjsrwgLwYAjLGyIccwtEIGaJrCGKtUPEVRNE3rtGqapktLS2/YtOmWW26rra3T6y9Lva8AZVaHIpvhcPsIx9BFNsPVLoISo/bQyOz68nwa48O943/lPvFbAb3FklRmM/qisSZHXhQlrXpuqd12asS9vjwfEdh3duCmFbVtU65au4lhmMLC4unpKVFMI4QQIFmWMVb6ExBCcqaLMIUVQ00hDLIkMwyDMcYIxWLxubm5xsZLMfEUxtP+8BUugkg8WeEwHb04umtdo3KY0jnZ7fn3xUVQYNUfbh/hGEoRKrAUFYzE9g3PvrWL4JKK4L1Dab/Gbt19tpunmMPtw7eub5yJxz+yqPS2UnOdQd/v8hcbtE3FeU+d6G4qtmV367PIzlH0trefO+6eRKzGbGqb8XA0VaDTJqWU4iVYUVm452y/J5lSXASVBZZHfrK7utBS5rgy8vXqEyEAjJBIlAcIMCDF0Z89r5pj5kJRCmMtxyKE1SxTYdEe80ac897tdeXzqYiJExBCHEtrefbPhzrWNpdLRKYxTsvyQiBKxtIkmYhtUZZoTBNCGIyTssxg7I5HbYKao3BKIuG0RCFEITwZjnkCkaNnBm5YVn1m3lefbw6GY4e7Rusqi0psRpfPJ4k0BRhTVDota3mmRMceG5itKbKc6x1XtK0982GrhkvJsiiT87NBXzyVp+E3FJt9ibRDy5caVeGkGE5KA55wLCWP+qNpiSRFiRAAjO+os68vMY/7I2VGTa3F1OFxnRl3f/3GZTUl9t3nhmbSyEBJdywu/cHzx27fsnp2fG7jksoJBuY9/lqrmaOpVFqmMUYYaTlmJhrPVwveeKpIK6RkWbH4OQpjjDACCuFs0A7ApW11WSYUxlVm/b7BGa2aEkEqMhuPXhjaf35o36kB15z/T+f7bBrh513jc4n4LJKiEgkBmnP66yymjrH5M0PTn9iyTCbAXiXZRwDZOgDK2Cg76MrSSTJb9RxDL68o+MPh9iqb6dcdo9Pjc19Yv+jvmisFGofk5OEx7/FDXbOuAMPg/gk3prHJqltXWeDQa0a8QZNaIADZiHllxLPnUpQSNMbKzwAgyQShhVNLhARjyflgtMFhUbGMwaA5POb0uPx2LZ9IpdUCv9ygff1U382r6ktshjcvjKVBvmNr44iGvrWi5GT7yIWOSTXPFdkMNMZ6NS/Q1HQg4gzHKIw0mVyouR3ePTb/8omeZfVFDpP+5MiM0aDqdwVOT7pUPOIE8CSiDUZbUEwe7ZyotlvqC60YISVnkXIXVEb/QCEkEolCFACQTK2Pfq+vbdJ7/5Iq5d4JAAaY9QR/9PSR5cuqNjSUGlSX6bJIZo8fMivDj491fW5t496Lw3oVt7a2BADciZiyjikVGM+Nz7VenhT/K79+5bsP7YCcRo6Ozuk5ZnmRDWW+QQC/P9i+fVFlkVn/x31trXXF1UVWLcM41AZfMvHPfzpSrNHIkqzi2Hgy3TY08/jo1NDFiWffvPizZ48+9WZ72+DsvD90+4amAqvBGY13zXg6Z712FX+0Y+CGldU9M86pUPThm5fbNWqOYiQicxSTXVI+/eLJnlHvhC/55KmBOQl1zwV2t4/+8czgmD9QkMfX6G3HBqa/8MuXZ6n07z95e0ORFTJ/GEyk/nXvGUt54SOLK3+/5/QNiyv0ZkHJSSoRORBLP/j8Mdnp8wcD9VZba6VjdW1hTb7h+6dHfnewk8eIcfl+8bGb7l1RXmu0WDihP+CpNVgSifSv9p5bUVbw80O98x7fP+5ap9fw1OUr5XUy8D8B1/nAO8MVIUNdk84ii3581remuYyh8PuoKr6aCQCAJMkAC0FBVzABhSIoyDaSZQIMTSlGCc+xCAGFMc9zNE1JkqwwAUKIwgQqKio3b9mydu263NCgt4JymxxD7z07sHFxJQC4EtECtT4uJhlMMxSe8YX+1DH6kWU174uqWME1+1YncM+c6m6tL2ww2Qp06o5ZL0PhZRWOw+0jEhCBYxmG0gtclhKk02mEFyiB0l+EAMYLlAABwtSlYI8MJaCVEGeXy11YUKg3LNAkDccoHnYNxyjFepcVWbUq7gpVMQC4ckoFS0ROy2KWEqB3u+DmlisGgBKL/sjwrFHFK7VplJdl1iIXOMaTeY++L6AxlSZiaZn1idfO37WxxWJX19oNXVP+22sqjALnCcUojK1aFcdQT53oyrLBK2jAX3nXymFWXj0Q8rY68vYPzlSadQyFFD6g5lkVxx7rn8QyqbCbXjzWPTLjdfojy+uLr+AhuafLtTwohOSMBaNY79nfyoSY1fyoN2hS8SyFRUKK9ZpALL6izPHH452Lyux2jUaZOXOeUNvQjEErKKWLaYzTGauLwAItQAghgLQssZhWnsoUISzGrnjUJqgJAEdhFU0lZBkITMVSc57AhY4xv1U36g2tKskTRHFvx3BZUcFHl1VUmYwHhz1WLUdRyBdNlqrppw60F5QVaATayjPHL47WFlk73eFISpqOJN2RZIVJVW5WOzQ8jRACFIyLnc7goCc67IkmJem22nwtx9xUZWvI054YcecbBS1H1Vn0tXmGg6Nz5SadP5I6OjZnUQuBhLyuKv+NY52YweOz3nMjsyUavn9kfpDHH1tSY9Kw7lDcqOI5hsq6WRCAJ5FiMDbwjLJJr1i9SkS7oq8VZaLINogSZC8TBiOJEA1LV5h0L3ZPajEdiEcGxlxdQ3PBaFwGYFJyz7hztndqftCtjUj9p4dmBmdbaooePz7w7LlREwef2tqK0bWnGMmMRS4UVqBcW1ySaIzVHNNa7vjhK6cO9zk1tBzguFvrS0yCgGk4N+b5wi1L6h22f3/xdOfI7K4NTZimWkvzjSrepOJ75710xv7OjrhyFomQhCipaBplLoNCCCGgMqeWCJkPRgWWtmpVCKEio+bo6OzfLa/9w5ttr7cPfWhdy/0bW/7P7944y+Dfnx1wTji1i8ucKXGtXV1o1m9fXKVWcYfODx+5OELRVEmeQc9zNp2awXjKH3GGYyyFVSxDMjM/JckHzg7sOztY7jAbtEK/0/9myPfi2JQmLakRX6zTNdtsGCFnIvrE/o57VjeaF7TgCAAYJewypwOTsgiAFf208s3RsTmLSmgtsuWucq+d6nv1dN+Ojc0ryvJZeqHoCsk5ILsynBh3ajg6XyO8cXFICRbq9bvrjVbICRZiacquu7Ss7T07oFfzay/P3bm7a2xNqd2Rc9ipwakRp++B9S2Q4Q8IQCLSYMhXrja+dK7/P1849cTetp88e+w/Xz/XNeEK5usITe1YWvp3O1trymy2PP254cmdW5oCqYSZp753sKNILUx5gmq7KQnEXmpZV5W3qbKcp1kAyNYwBoD2GfeAO/i5dQ2ri0xRl+8bd635+i2td7dW5RvUPfNhdyr8D0+cefr0YFmxrdie9607LhVXnvWHH/jV7pBW89yd64an3GNz3gduXOpPJewqbVJKnxqau+PRN6zJ1IM3L/3uvdsSafGxN86HONTn8U+kE0YNHx+c+snntlfmm6sN5oGAx5OIlWn1417/p3772vrakoPd47pE6gcfv8lqUOMcV1mWmF3H3zyu84F3BpugHgj4FBdBpd30racPPbi19de7T3z4ptYSo/bXp3qbbYb3yAfemgmAJMmyrPABcgUTAAS5TABhhBDKMoEFhQACnucoCtP0gkKAoiitRsVxbHV1zbp162+59dba2tprOgSuRnZxz3URKCavsvmtF7gjg9MGtcDRdLFBk0xLp4am19WW/KWG/wKu2bcOo/b86KyJV0XptE1QJyW5c867pMDCMfS+c4O3r66fDUYdBg0AZCjBpJgWFUoAmSVPoQQIY0JkhBDGGACUbqQoLMtyLJ5UCRzGeHRsrKqqKptu6GoXwbJSe/vobG2xbf+5wVwXwWDQq2botCwKNPe+uAiKbIYjF690ERwanV/kMKtYWtnC1/F81iJ/f10EACASSYUYbISLA7O3tNRVGAyd8z4VQ+dpVUq35Os1RWb9kd5xlqELzXp4hzRAQa4l4UnESnR6BuPXB6ZWFNlT8oKLoNii/9RvX2kbnX3y1fM8TX1kR2ulw/zc4c7cXEO57WRVcdmLQQhJMslN+JT9FU1RFEKj3qBdp1a2RW0a1ekpZ6PdvOdMf1mJ0cAKZ/qnDlwYum1N/d4zA00V+TxLIwAGY0mZYIQoaSgV8yktSzSmlZMyGCOALB9QDmAxRhhJojjrDR46PfCBtY1j0bhDr+JEsW/a/cWti5sLrXadcKC9L8kKZoFFiLS1DX7iptbBQFzN0jV5+qMDs9MSZdNwpQaVhqVngwmjhg3HxTFvbC6cRAAGgTbwjDua5Gmq2MxXGTVajq6xaBKiHEyJOp71xxMFOt6uEarNuhe6J1yR+LFRp1mnv7km36TmllTm/+D5Y0/tOTeXiM1a9OKkm8Lkf21cjBkoNehH3AGjiscIyQREAlqGjqZFi8AK9EJeY5JJ+aokwEGwYA0nJAkjTAgwGCniCmUfvdZq+MzuEwMXRu7d2draUNY36yux6L/2oS1b1teMp6K7ltfVVRV+eeeaMruxLxh+YEWNVUPJonzP6ka4FqScMtLXnIoEgMtkKeVZJhRNvH7qokHNP7Jp8YHRuSqbYcDja5/2f2JVE6unqTTsOd6zoqEkhqCxwMrSFI2xQcWNeoNTgYhNI1AYZxUjKVnGCDEZJ2TuGZWPBIDGeNofUXOsWS0kJfnExLyaZe5eXJUSxR+/csobTYR80Z5x18/v27S+oeR/z3m0geinlleraBwXRRmjRUUF65rKMIPePD90vHOsqSKfYxktx9q0ahrjuVBsMhSJE6JmaADgMP7Bnw4f6xidnA8c6hp/jiF9fz4dGHHfvazWxtKPnh597sJoHo8vTs6/fn74n+/etPD4EMLkJAuCTA4iAjJD0Yo7JiGlxiOB85PeWquxMichDwB8/+UTNMItdUUryx3Z21eALx+R/UPTtVZjvd34lSf3f/f+LXC5c4DC1Lg3aFYLupyk+88d6lxcXZBbiezCtHvCH7nj8mJejx5s29pSWWTW5/IHJbOQlVf/Yu9ZsJoL6ipMpQ6Vw5YQVIsN6tlAOpSnvxCInXdHTh3v+/oDW/N1Op5iRt2R7x/unjjc/eMPb31wfZPA4d6huXvWNttVWrg8rVAgnvxj+/CyfMMN1UXP7LvwwRuab1pSoRVYrcA2OEwNpVrRI81MO7cvLvdGo7/5+FYdzwIAAZgLRD70qxf9Gs0L921iKfz8oYsP7Vw1L0ZrDZbZQOiRn+35t/NDKzXczm2NrYWOtCT3BkIHzwzsPtAxpeMTwTgTCj31xbtiJFWmN8zHwyUavYqhj/RMfOhnu88Nz5TnGR/avPSLd63TCBwGBJkhIO98rb6O/3dxnQ+8Y+S6CHJDhkrzTdOByHtRFY+NjSmKYa/XJ2cKZuUyAVmWJUmSZBkIuYIJYISJsgWJEUJIyRyaZQKSJClMQBAW4oLUKoFlmdLS0o0bb9hx8y11dXWmv8IhcDWU20ymxVM9E+uay3NDhgAgnEoXGjT/DapiAIgnxSO9440VeTZBXWzQ/Pho1x1NZUU2w/GOUYrGCUnSCJyGYwCAYZi8woLZ6alrUgJZljGmiCwjWKAEWKEEGDMME4snVAKXSqV6enuzlOCaLgKjRvXbgxfioWRVoaXQagCA8XCAAOEpRsPwAMBgWnGkXPPWSM4Pbz+XrnARaHjWF4y8PjSzuaoAMi4CxSLnGLrQrLcJ6t73jxLQmEpBut6af3ZoSqcS7EatQNOnJl3LCq3qTLeoOIZl6P0dwxsbyt7Fc6Eg2z9WXt0Xn2WsUwAAIABJREFUcNeZze2zHpbCFg1HY4oAvNo7eWIyPGHhvnfT8gdvXlFkM5Q5zLlkCTLvtmzSEnx5hyMABEiGSyLg7EsRI6TimLlgRNkwRgAmNT/si2gZamDaQwM8+fr5aVfg4dtXlzvMzRX5j756rrHczjE0UlSVhNAYE0JQJl5cJBKLaRkubVFfwQcUczmeTPfP+U5dGN61vvnVkWmO54R0unvStba2uDrfPOIN83r9iMenYtmeodmv3r5CQqjDHaYRCiTl2hLrrCe4rNA84Y+P+2NAICXKlSZ1tVlj13CAUCAhyoSUmdTBRHqx3RAX5RK9QABG/bEVRcZyk2rQF/bHpQabjqdpm0b1TPf0uNf3+TV1SZy08KokIYhljrUNRYj05Y1NgyOuh7YuOzMxW1NsKdDozWphwOkzq3iKwgxGGCE9xwg0FU6JCgXK2r44xy5PSJIEIFAUzvgHlA6RCagZOjUfePFEb2NF0SF3uGJp2Wc3tLQPTW9uqVzeUNA17b1jaXWR1VBZYDk1Nb+9rvSmxvJzIzMb6kuz289Z5Gph32pJyVrnirsgEk+2jc19YsvSUad/WWneS33jwaR4cdr3wcVVxVrdXCLyq6ePt4/MeeLJm5ZUaHhOIoSlqDytWkbo4Nichec4BjOYVqS3UsaYVk6RnZa5fdI14ym3GDCFWIwPj8wVGTTVVr1WzR/qHt3cUDbiCZJkenVTaVKUOs+Pf2JNvTMaZRhqkcVu4IWRoNeTjLcUOtY0lTMcfuFIdyolFuebRFlWcwzPsUFR6g+Epl1+Pc8CgW8/fuCfPrrlcx/Y8MGtSx0p6YGtS/dNe4Yvjp+8OHLhXN9I/8TpvsnzAcKK8Ye2tKYIURhs9uKzXZqS0wAgE0kkkkgknmK9ifiz7eOrKi1FusvqLf7zb9/44NYlxXnGarsJMuQcXWsg3mOwkILd3eMtDnNpjnon1zmQ5Q9JKTUSDtYbrBijp050f3JTy6c2Nn9yXd1XbmzZWluAsHzP0qqBIdfpC5Oj495eHdsZiO6fdP/84siM0wsENevUn7tzzWQk9NLJvo9sXtRotsHlZMAbS/zyVG+5QdhUWdw1Ojc263tg29LsJXX5nBqRff1E7+1r6jsm5h7avLiuwJpdgh5+9LUpmn3+/k08Tf3Hiyce2rkqTKUrtMbTfZMP/3T3q8HIt3e0NjXaSwVdXJRc4bhdLRSX23owGup3+2dmfvaxmywWAVFEJFCi0Y97/X/3sxe/88Ixi1b19N/f/fDW5UWWywjbWz0X1/E3jOt64veEJWWOuWCkrizvTN8kAGyoyH93quKxsbHHHnvsySefGBkZEUVJXoAiAlaqhsmiKBJCJKXMcKbWGCEEAQK0QAMQRtSCUJimaZrnWJZlWJbhOFYRCsuyrFYJapVQUVF5510fuOfe+yqrqv7S1b0lUMZs3ba89pqJR+vyTMFI7JnO0SOdY4cujqyuKvqvUxVvW1R5oGOkQm3s9rskmWRrk21bXnOkfWRxcZ5SJ0uBTqVds3ETzwuKT0XRBoiSpDCsdDpNAERRVJwzygEAwNCUTqdOpUWtRgVEeuaZP0cy2uJsHS6lXPGZCZeEsD3fvnFl9U+ePTYY9Hb7XaVaQ75KNxkNwVuDZP5l345/8RG9IsNmsUkHAH1O/4VpNwDwFJuQUpARFmeH7H0Ei2mGoqpKbPvODgBAc74JIeic8xGAeodlJhBOidLqv05Y/PbIvXgKo3taKo5NOi86w6dmXf9yqucXveNVa4pu4HGfP+CPJZTDshXKct9tOEMGroASrHIF5EzYGAJozLfMBCOKVJQALCu0XnSHGioKf/fyhfJy2z8+sMWkVWGEjFrVja3VP/zzYQAQZZkA0BhLhCjcQJGVJ6VURExeXWTwChgETpYkQgiW5WKTriVPez4cH5n3ukOxWFpqd0VOuvxOWeqZ8hSW5B2Z9h+Z8Qs0DiVEdyQ+GYgXWo3Pnx6MpaTbKm33NBW0OHRFBt4oMFOheEKUKk2qNcUmo8CUGlVqhlIxlMBQva5QiUEo0Av5OqHUoOp1hbvmQ6en/R3zgQ80FC4vzhv2Bit15m6f5x+OdJyY9Xz8ztUVeUbnbEjDMXesa/r8TavebB9LpNICQ9fmmXqdvpQoQcZelAhRMRSVk+tTgSgTSSZRUZIJaGha+SZb2UqSCY0RASi1m+bnA98YmtarmY+1lNTV2B7cufKP+9vicdFhNPx6/4VTQ5OnhqfiyXSJUXuyf4Jn6Oc6h9yR+DX7NourH4pcwqCg1GoQOOaDa5r+cefao71jFUZV54xnMhA5Nj4vEbKtobq62PbBm5f4w/Fv/G7v8e5RAhBIpdt8wXO+4Npi+1Qg1DnjSYgilZPPirpcTEwjJGYSdBKASDJtUHEEQCSka95XZdFTCGFAAsvU2Ezh+eANy6qODU596bHXO8bddywq3l5dcn7K80zX6IDLX6E11RrMY2HfeMS/ur6svtz+2BvnVj/0058/e/Rkz+RPeseOTDkbTYZFBba28fl/ef5oQ2X+h25a2lxunwtFNtWWWPXqD62s++wda574x/tCb3z75K8/c9+OReOnOxqL82RYUHtDZpmSMtcMAAgQT7EsxXIUy1MsALgi8VAiXawx9Pnd2Srps54gg7HKrG0osilJRa/wCWRxYty5sSJ/LhhtH59bXJoPAFcHCykrXhZX1xgOJ9MHhqY3lF+WJvVI7/jKqoWqw3tO9GxbXgOXIyWKdQ7zshKrw6AGgHKrriHfbFNxP9y5/Ds7Fmtd7lduXPbHHcvX2vT6WMJD06hr7Kv3rUeAfrPv/O3Lajl2gYXmzqMfH+sqULEriuwI4EjbyGfuvFSxOCmlGUz98oUTNyyuZFnarFNliyITgGNDM+cC0X/bvoyI8ld+9fKK+pIwlR4f9Hzgm49/5sfPtwEsWV7l0khiHGSMaEzZtOqfnuw+NOb8SHMpkwxEKZ1LjCOEllqLy7WGSW/g7n97rnfac2NzxYF/+vCmxjLIsf7JdTLwPxV/0di4jiuRW4hAyTK0vK44EIkrhQgCibRBxblCb5fMIRdXMAFCiCIXlheq517JBJSNasgyAbjkEMhlAoLAKUxAoQE8z6lUvFolNDY03Hrrzs9/4Uu37by9qKj4L13dO8CtaxuUdDqNRlu336V8qeOYnjGnNDiz40u/fezgxa0tFe+xVnF2Z/ea2Nla+2b3KABQGC0psHTNeQFgVWMpR1MXBqe9oagzZ1xYjlt/wxZBEACBJMsYY5amRUkSJSlLCdLpqykBrVACSZIojLKUIDfR0JqK/D+0Db7eP/3pHc0T8WBalpyToUajDQDU9GWx7FcnGoK32CR7e2xtrd537lIp4q0NpTsq8l/oGss9JjfVT73Rmn03v3colGNHU40rFukYmwOAVcV5JyfnEQBPUwUGbc+sB97XTEf1BmtfwK0XuOXFth+fH/xF20i9Rfv11RW/WNn80Lolfl/khcyJzDrVZ+5cq5QQvrqda04kKiMqvXoUOJoq0Gt6573KFn65WQs23bNds15etb9zDCGkbP8jgJaKfJNWda5/isZYlGVJlhFAmpC0LCsEg6NYDc0xmImmE1ExGbucGGTPruPZtOIhFEUjzyzKswIQUSKTwehPL4ycd/mkSLLFajAadN5AeC4Yj8fFCp36ngbHrTX5ep4u0/Gr6ksme4f1LOXQ8mYVG05Ive5wtVmzvMBo03AiIbOhhEXF+hJpo8D4YklCwKrhY6Kkpqk6i1aUyag/alYx60sto77g2rK8+Uiyw+l7adD1kabCtQ5zQ6VtxOnffaizd2weIdmo4rcsKf/R66d8kThLUbV5pj6nL54WISfXPmQK96ZkWSIgEaAxQgA8hRXhb5YMSISQzG8RQLHdWFZo+UVd8Vc3tPTOBcYjfpZjvnDX+jfPDgPA/asbHz/a9fFf70EYu4LRU4PTyysLNlcVTQXCF2fcCVFShvtqWx8yBtDbUOVSmxEACIBZI/zvXRueO9fT0zdZrFW93jcZTYp9E069mr+xparUpt+0svYXr5y97VuPf+VC74kp542FNrtGWFyYV2zS9s375kNRyHQCXGV1ZS/DFYmpORoy3glXJF5h1kmEtI3O3rasttxu8gQit62o+9bdN/zyYzs+uqL4QOfYfCL0uRWLlhZYT0+4H28b6pzzlutM9UbLcMhXV5/XOTz7tQ9vXlxb+NThi1PHuq2JRKlW7dCpN9aUjI84yyrtbRPOAaeva9pj1ak6532rKh33bGppLLMDQFN5/srFpfpiw67WOgohnCkUKGeYQM7tkOxdKBhyh4PJ9LFpr5bSlGqMyrJzpndyVUsZAFg0An5bK6Tf7a+1GvP16j3nL8sspIAAeKNxs/qyBPntgzOLqwtyvzk6ONlyVV6BbINZ/pCUUhzFZg/QCVyp9VLoLAEwqXhXJOYJxU4PTyZiiUQ6fWhopmvSladmt6qFm9Y0tlYX7x8c0bG83sjXGiwAkJTSLF5Y89tmPL54kgAp0Gt+/PSR7StqzLqF3EpJKT0WDs5PBCOJlCcSOz449cj2FZDpyVl/+At/eA1JJBZJ/P1PX/zTvrbeeeen/s+z937ryVlvUNaqsF794XprXKY315aUmPSTvuC/HGxjGGZjqa1nfPb7D24FgMfeHBYIE0vFp72hnf/6tETg6c99YO/XP1Ro0sHl81C+Tgb+p+J6vNC7wRUhQzTGxRb92d6pyhIbIHAYtHPBSIXV8PZPVDY6yOPxkpz9fgBQMmAq0UEAIMkyymbKV3YrCWBKcbMDTVEIgGUZhBDGWBA4RUPM8xxN04JKYBna5sjfvGnzzTffWvtu44LeBspt0hgfbh/JqoptnOb1s32P770wMDK3enXd0ULLL25ZubG+5D2qirO28jX7lqbw4Z6xOxbV9wU9jRZL24xHyfajqAjuWNMwFYgoKgIAYDAtYWIymqcmxzFGkiwrQVZSho8BEIqilG6/TEuAMcPQskwSiSRD093d3VVV1SzHSYRMBMIyQk+Nz4lY2tlQ2JpvP9s7VWY37zsz8F+aaOgKFYFe4Nomnaem3JUWvUOnXqgVgCmOYfZ3jW2sLyEA76+wWCQSS9HLq4sPdA5X2M3FRm37rIfBVJ5WyEYN1TosR97b6EOOqWHl1f0Bd4PZcnhgaldtUZmFWWFzaBi6zGIwa1V7zvdvrCtRAkVUHMMy1J+vKlqc2xoAEAJZ4YAS0aHE+eAc2xEt5BqKUAhpOJbFuEIltM/7bqpxjDp9Oh1Vk2ellPyhCFUVWZ/a39ZYka/lWYwWCuLSGCucNk0kClEIgKVoBCicTsfElDMedSdiSqIh5az+WKJtbO7MxdF1LeUjscRXb1iklaRnT/ZMO2zFKqHRol9dqqkz6zeVmjQ8GwyHb6lzrC42mwQ2kEoFE5IkkyV27dq6on9/+UxdmX3QE02IckueXs8zACATIgO0zwUtKjYlEw1LzYaSLXY9hRdM8HAyFU+TblfozvoClqYODc1UW/Xba4oevTC0s6aoyWIa8vnqbeYTvRObmsojkURFgaWi2BxMJdeVF//+YFtjkU3DswYV3+/0mdU8S1EkY+AuFOciwFFYVMIe0UJZLokAkxkJkhkO5aNGzT/5+vlP7VzVWGStsxr39c07THyJXq+zCUfaRjc1lDcU57V7g6qkOOkOvNk5+vkdKwuMunydGmHU6/ab1TzOMV6veNBQZj7I1yIM4y7/vs5RvVqwG3XxtJRn0R6aCsyOz35gTcNrvRMzs15vOL68ofSls/3bVlXO5xsknTrSObHGYWkstEkA8XTCIKhNKn7EG3RFYkaBZygMSpwMQigTfC8RIgFIsuwJxxmKsutUKZlM+cN97uDW6kKJkFcvDNY5rEvK85891PHZe9YDgTKbYVND2dHB8Y4Jp4bhWopsix1mnqZOTbouzHiSktRkNR86N5pC6K5Ni4bTqY+ub+AE6kz7+NH2Ea3A9U84n9rf/uiXdql5fsgdoClM0/STF4buW1yl4ehsz48GAsc6xn/60YUgnDQhRCbZoC8FyoZ99iMCGAp6n784cdifmArHXhub3zM063RHRUi+enqwotBiMWqUbGBvg/clWOjRC0M7G0oL9DmC45wGs8FCipK43mBVjtlzYeATmy8F8wCAjueOjcyoWeZ7jx+gGktYhrqhylFl1e3pnQoPzt2/qUXg2eNDkx9bvyRBRKWSQFZG7I0lHrswWGdS31xf3jvunPeG7t50qbJBX8Cjk9h/33N607LqIwOTX719rSlTBWw6EL71+08ZTIbhE30Hzw1uX1GNaNw5PefzRC0G1cbVDeeR/E+b6y1mYZPd6oqnf3O8czaavLelvMmm39s+dP+2xi0l5cFkaktd0UttY3la1X8cuEAh9Mzn724ssimnyLX+yVv7aq7jbx7X+cC7gU1QDwW9VkEDADSFj/dPrq0r+flzxz59+2qOpnZ3jzGEvI2qWFEMHz92zOPxKBFBcDkTUPSsyvcAcCUTwBgQUJl6ngoT4HmWYWiFDygKAZXAMyz9/Y7Ex3durVu9pK7g/fQGZIEyq4miKpZl4gnFnjva+e3/PMCzzPbltQ/eumo6FNXohElXYFt1IcfQe//qAlVvBXT5EpZFkVl/tHeCprFKw9hVGgqj05OuZUXWa6oIAECUJb1W7/G4Y7FolhIQQhR77mpKkEimGIaOJ5LptKhW8wolwAh1dHZW19RY9dr9PeNTUqo1T7fIaDo74VlTal9clv/d3UdfP9y9pqmsLN+knDc30dDbqwj+elyhIrBoBSxKp6Y9WRUBhalJX/jCpNeqFYxaNpiKu+Px94sSKJRDw3EMTe2/OLikvIDB+PjEfGuhDQBMamHEE+BpenGZ4+mT1849+tcDZf53J2J5gnp5kfnQyPTKgnyWAuXVazdojvdOnJ9yNhfZlGThhZfzpWw7JIdhLnyJsj8slAVAORaPsiFqUatGvUGEkDeVPu3y39tQfGbKdWNjyYGOsWUVdg3HIYREWVbzLMfST+1v37C4QmknGwoiESITmaMWNoApjAWajonpKr3ZxAkWQd3jdztjEVciNuYNTjqDF/qmKsvze0PR1SW2VRUF33vxWEGe8ZFVdYVGXGeypAkU69QJAsVa7k+nupeVOURC2uaCeWpOIqQ+TxtKSRFefaJrfHOto9qqE4EAAZGQpCRHUuL52UBMkh0afiaUaLbrMEYYUEqUO+aDnnhyUb5BzTAlRhUQeHN4utluLjVqWwssb/RP6Tlm0h0ymbg3zg59bNOS37x0KppM37isOkJSVSZzQ5Htd4fb6wqsBoEzClyv06fjOQpjmUBaJjRaSP8vE2DwQtpKkRAEaEEzAAAAaZlkU4UmJXnWGTjaOfLIXeswQjxD11gMe7qnBAEAQTKN9p3sK3eYe33Bj6xs/NPRjgOdo1+8ZbVW4ABAwzI0Q70wNlNj0CEEysjKOYObHWM5U1orFwTg4vj88b6JvWOhx04PdUy5O5weScWtWN005XKp1OwbR7vjZcZJWrJhZlin+UhlwVIHf3NT1StHus/0TiytKmAZzFG0BGDXqWmER30hhIChaQSQlGSZLHCeiCiqKAoApv1hDcfwPMsg1DbjUbNMs8Mck+QfvHjsoRtbR2c9/ROuOzY0URgpXdFQZBVpeV/b6PG+CYGll5XYlxVaWYrqnPM9/OKJudF546LS/mB4W7mlUKtnNPTOFXUaFX/g3OAPnz46NOla0VC0vKqoe8bTVGDZ2zfR7w7dUOkwqnilJ7p9zonJQKFZt6qmmAAoabgucYUMFAMdAJTAOwTgScafaRv76rrGLy2vvb2qIF/Dz2L45uHe4ZM9sfqCG/ItFda3y12RzSz00rm+zU3lRWb9u8gsdGHa7Y0m7my+TEn8x2MdSoMA8JVfv/Kdh3akpBRHse5EzMovtLa3Y6S5JM+g5iHDSye8wTMT899+sz2t4X508/IPr6zlaOa1rvHNdrPXH7l306JXu4dWlhdKrJx1DijKAWc08c0DF+pN6h31ZTSgPce7H7ptFZ8p9ZWU0q5w9LE957atqD3QO3bLspqmDE2aD0V3/dufE5jqOdH3sVtWpJLpMaf/rq3NeoqbmPd5ZTRjVn10ec0cy1cyqj+cG/nt+Iye4C+sbbCq+OdP9dy+qbbFkKfi6GKj9lcHO9dX5e/vmfzQmoYv37ZGy7PK8GWfNeUe38Wr5zr+ZnCdD7xLZAsRFJn1h3snxpzBjoEZq0kHNPWrM73LHWaDmjeqrlQVZ5mA2+ORZFnJdZmJEQJCiKwwASLL0iWSsLDwZpgATdPKu4SicJYJKJUEKIpiBTX3/7P33tFtXGfa+L13+gx6B4jC3otEUZ2ymmXJcpFr4pLY2STebJzdJM6XbLI9m+/s7pey6XbsJI6TOO5Ftoolq1KdRSTF3gmSYEcHiI6Z+f0xBARJ7nb2t2dXz8HhAcHhzOBi5uJ97vO+z4tjCpXy9tv3qKzljz9/djye+MbOjQNBzyfVm/ZaSG+TIvAfPH9yyOW+Z3Pt3betuG1VpVxFziaWdAqKDifdsaRZzjbkmz6mRJDFO85cEt/44BJBnE+aTZYZlyudlirhRDGzMJxLCdKpNMIQSRDxRJKhKV4QspQgmUwGgsGhwUGDxYYwbIVJX6PT5im4zhkPgaECndKuUz3T1js76XloZ4N03P9KiUBJkcV65dmh2X1d42Oe4O46+/6ePptJXaE2fCiJQHi/s5KiAaNS1jk+Q+BYrdXQMeOVBh9HCENoyhcqMaoTqfTBzuHGj2czJYXyBpobD/l8qcgGq3lv72SZXoPQ8mpcrd3Y1OdcjCVW2o3S9rlNi7NfgTDn6xBBAJd7fl9mBWLm7ktncl0gAASGAATnx2bGUsltefqYEKu0qE+Ozju08v1tQ1urHNKioACAw6A62z3OUIRFr5TWwPmM63xC4KmM3ygAAEI4EwkbWBmEEEPIyHAGhtPR7GQgmiawP057oipueHJxs8PcNuw61T/x+Y1l09HEJluelqW98eT0UqJGJzcp2KZeZ+fMolLODXqjogjqzMp4WphbStQY5HqGeLmpu6HSJgJAYpgginGBnwnF50IJEseWEulKg0zNkCSG3JHEqC9iUzIFGlpF00VqFgLAi+LhwakbCs1KhqIwrFireLlrHAciJaDuifndK0svDkzdtbm2ZWiqtMDIUQSNk0UW7dPH2iutBpYiNSzdv+BVszSOEIkhSYGRcoF4cXmlOS2IGFoWUkQAJK8nafx5UYQAdo3OXhqekRZWBUGkcKxcr9zbN0kzIB7h96wp//Vbrf2B0FabCRPA0Ly3yKSudZgAAKOhSLPHX6/lnJ4Qh2MKmhIzn76YiYSEHDkil5NLz9sHXUIs1dM2sMaqWZWvu3m1jYbC3aXm9XmmN453tpwbfmTrymQ4NSumH63MX2FUm1h5VEyuqrbpOLapaxTDoV6lkKog5BSpZCmnN7QYjuo4msQwycQWZdoR4Aj1zLgdOqWapgAEZ53zdrUsXyNf9C8daB/+ys7VZ7vH5Ry9psoh6RgiADE+BQh098pKGUkc7Rk/0Tde6zDlaxVlRpVezn5vYoFeit9XXVhn0PUFZoGI2eQqm0G9vsaulTPRRHLY5YYITYej5ToVRCgJQCyZ6ItGVRhGE3ggGTvaMVZrM1VY9QBClOlaAK6cEy7zAQiBKAoANI3PqCj6S6vL5CQuJ/FSjXyLRecQxdePXfrqjfWr8k1qlgbvjmc6RtRybikc/dnbrVtrChM4FknH9QwXSCbdsdhIcKlrcqHEqFa9p7PQe1cSv906pOCoxprCq8QBAEBTv9OokmVThrrnfAcGp4Y8wXqj0siLj+5cgyHsT50jxSzT1jvxqc01UT49GwrvrCz2J+NXiQPfOHhhEPB3VFqqtJon37ywdWVxYSZ/KcGneuYXH/v+G6srbBRN/vpE+88+d7P0p3gq/fmn9scZmvD73XPhhjLrgzfVV1dZDp0fvtg3mZYxcyZVaDqstmnbuieGZxZjFAHD8X/dvoKH/J+aur62a12pRiNppJ0Tcz/a2ySK4Gef3VFi1oiZHK1cMgDfb4a/jv/xuM4HPiJyU4YSAnyza7I/mPzd+aGu2UBQSEZMCl2SrzRrszfYtUxAEEUggow4AMQMEwAAiEJOlRkAEEIIobT8DyHAcQxDiCRJDMMQggxD4TjG0DSB4wSOn+KKqupW3bal0WoyWg3q093jp8an15VaVWrmz8QHskGVzaC60Dd56/rKHfWli/HIQjwsWRnY5Ep/PFGiU0q9yf67SQQsxeRZ7dOuKZ5PAwCyUoxECfg0DyHAcfw9KAGOYcFwOOD315UU+uK8hmVwDGWNhgqM6uPdY2dbRxtr/0slAgVNEqLwb6e6f/Gbw/2hxKfWF60o0dEM7poJGRjug7Qny70I37fSKJuVVGTSHr00YtWpWAJvdi2uthmAlGYTjGAI1TmMX3vmcIlZW2BQv98u3wcQgEg6kccplTRDYdjBwan6PG22HYFewe1rH5KyhiAALEVQJP58JmsI5uxEzDwBAMAMKxABEEWAISi1X5WsMIH00UAop8iupXCpnBZBulSpNbJcnUX3o7N95zqHVxdaCw2aOJ8iMFwUxbpiy+uneyvyjTiBYQhJRvu8KAoiDwDKtqwGACzGIkaG4zOsA0KIIAxEYi7nwtFXz3qGZwMU1jHi3tcxER6f+8mXbiuyyPf1uYq0CpOM1jNEWhQSvLDCYWrqn5pJIQbHK/QyTyQVSfEVek7D0iaNvLl3giFwm16VEngCIR6IvfNhAkc2OS2I4gqTMikIHXPBUCJdbVLIKZwXBQZfXgjGIdzXP3lHdT6DY4IIaBwTBb5nxhNZitl1SkCA5ksTT3/nUzWFlv3n+mpsZgGJRpapshmeONJa6zCyFAkgOD486dAqaBxLCyIviiSGstn8EhnAMgb8KUFPQ7pTAAAgAElEQVTMOnJK26QEsbl3Qq/iGirsEpHAIGQIPJFMjS8srSzSVxv1Dqu2dWbxjQPtzx1sCyIxlkqvKbMenl4cj8VXaZgqtc7AMU5vaD4U0XAMiaHcKxzLhLkSQxAyP6VXjvc5LUbVU//nHjVHTy/4fn2wpSPI31niWG0zORSKp/e3DAWDUQGPIMRRZLVJy5GkjGTkJJ2kxTq7+ekDLT2jc+UOg4KmEIQAQptShiE45gkACCgCxzJ2/mlRxADsmXWvsBmlU3q6ZfBTdUUciZ/oHVexlEkp6xieNmlkVYVmKTQPJ2MygnbHoyqKK9SrtlTm0wT+0oVeAsMcOlWVXnXk1MDn11VEUqkLU4sOuapUoxkP+xbjMT3Fvnm+74YVhWUO3ZG24dbR2UPNQ73J1O5S60AisdmqXgzFembcQ17vS8e7H925RiNjQU7giHKmiNxkIckoaSTka3V619uNdrUM5Nxl//z8URlB1FXYtlc4wHvijv3NXYuBZ8fmJkPR6WBkCIGFWKDLHRgNLw2FQt2+4Fgyfl/JFd8jVyULhROp/zzd9e2tK3O3ydqMAgCeO9KxbVWJUcdeJQ4AAMYW/MFYsr7A3Opy7+2bmPSHG6w6BoHxiYVHdjQYVbKeOV+Xa5EVxOk5n9mg7HV77lxVMZ9YukocaHYtnply32nRVFnUY06PayFwz5Y66RAJPjUa8P/y2TNvnuo92T562jVXr9EIoqhVsN5w7OnWgV+2j8hn/X/38NZffOWOmiKzKxw60TrmcBjiWvkkhuUvhVmT5lzzOBVeGkOIE8C3d5aSCL12uv/LOxv0cpZA+KmBycd+//YLZ3saCi1PfP4Wo4oDme+X7E/wkb5uruN/Hq7zgY+I3JShYqPq+6+ffOzmVUIo/LU9K/dUFZ7tnSxQsFqWVHHM0NDgW28dPHv2jNt9BRMQMzH/cnlAhgkscwERAAAgQhAADMMQQgSBQwiyTCArCLAMU1JSum7dus1bttWvaigyaI6NzNbbDVKVlYKlXzvY3h8I3NlY+WfiAxKkCQVDsGt0VjIe9SZidk6JQZHCCBlJDs97X+6d+C/oTfZuEkEilW7um7p9XcVsKGJSXhGLsxRjtdmnXZOpVEpiX5cpAUIfkBJ4vZ6ysnKlQj7uDV3Vrjhfp/r9xQ8hEXw0SnCVRNA3Pv/MkQ4PgrY8y2M764x6plChNLOKUrPuxbPv2p7sCiKa8/ggkBYIaQLHIPr12xc2luePSYK+nAUA8ILYObXYNeV2+hPNA+P3N17u8fwRAAEQAJAR1FjYb6A5k5ztmPEwOKFm8dysofacrKHl8SFxq+GK2p53GG0IEMxUEeTkkOSWExQr5BO+UKlKTeIYhJAh8O3FlkPz/pGxmT0N5RjCUkKaQBhJ4BiOvXSs84a6QgCW1QAEYVJY9htFyykZi9Uaw/JpQAgzCeVOd1BFkRcHXV+6pzFKET+8a8OuqrxzU3P/eO8WDc3KZWh/71S5TsWSBIVhFIbJabLSZjzQP5vHiWmIF2nYcp2CwXEB8BSG0yT+0vHOdZUOliKky/vkuFdG44k0X6jmYml+zBexKZlyvRxHkECIF3kS4VI4zgPwWo9zV6kdQwhHUABAzzJT3uBzp7tuX12+sBCy6pXrqgsmo4EbSvJ/f/hircOM4UBOU1U2469OtnNyNoWgM5manvMV6JQUjkG4vBIvKQN4RhkAOQUDKUHEEUyLYloQMQhPXRpVy9n6krzsBgAAIIqLoaWzTk8KpWN8atwdvrmm8HjrcJrGHtxY82bHSLleWWeRV6kNEAACQ2YFh0EodZcjMJRd7U5lEuKzD5A5QwzCx4+07q4vs2oVBSaN0szWW61vvNk87HJbNXJvMNI26PrLXWvjENxb7bBw9MEhl5KhLXIWQWhkuOl4eGWlRUtzL564RODQplcLQMQgZEgcQNjsnB0IhAwMxZGExBX90bh3KVZsUEMAFpZip8ZnP11XJABwqHPUoVNuqnQ8sffczjVlFr0SQiiIYlrkR0L+SpVecv4RRNGkkdfaTS+d7z3RNz4diJ0Zmn3qs1tWWnQKmmhxudum3QZWVq5Rj4X9v3n1/B07a2qtlt8eaF1V7bhzS+33326fm5hfb9VuLLTnyVmrUpYS0sc6xvRGtQgAgZCMWu5lJn0G0ugJGXFAzKwdhFLJ3zUPf2tLHbhy+fk/fnf0wZvqHUZ1iUkD3h1nJxaMBLZRK5/sHfvZHRtvryvua+uNz0U+U1+x0qhu0OllGC6P8jWWy1LAtclC+7tH0xBuL75cXpwrDlzonRib9X5256prxQEAwEI0caBz5ActgxYFt6nAvK3IcmF0xsBQ3nD0vo01AIDfXuizsfSh8/03ri49MTTx6S01KXh1ppA7Ev912+Bag+LOFaUWTvbEG+dvWl1mzWgO/mhs/7n+O9ZV37m55qRr7skv3rqx0vHyya7v/eHYr/c1712KVYfiT//tvXq97OTQzAvH29zeyOaG0iiDqVhKpyRnRcJ3YeDBG2unRcwM4O21ViwNTl2aeHTHKpNCMbLg/fbzR7/70sk0L/zqi7f+w12bFSwFcmZ4eOXnch3X8b6rftfxrhBEKJnD8IJw26oSvZ766q1r2tvGV+Xpbik2l2qYgYXA93/w/VdeeWV0dCyZTIkZjyAgiqIoAiBm8xMEUQAiEAURQghEgCEEESRIHEMIwzCCwDEMUSRJkqRKKacokqJIhqYKCvLvuffer339G3v23FFWXiGTyWQy2cYi61gw0jS0bONzx6ZqURCRCBZml7K2P584YGaWucp4VEYsrxgZFaw/mlDS5OnxOQDA+hJbU//Etfv5UIA5U1su1pfaMIgkIyMMwbV2w4VJyXi0/EjLIEXgk753cPxkGHbrtp0MywJpaRYhAIBUTgARSiZTqVQKYSgRT6Z5nqbIeCLJMjSOY4lECgDAsoxCLjt54lgqFonFY5LR0HqHUTr0ttrCxjJ7U+fYiY53Nti5ymjoI+Om1aXPH+s8eL7/X585cqJ95J8e2GrIN8wJEauZkfJuAQA6OXtTXdEvD7dAACrU+n6/W8ysiWa/Hj7al0TW27SuwKwmmUuumTKt4rRzTvqrVS2fDS0d7Z/+wqYKjZz9aN6juaeKAMAgrFLpBwJuEYD7VxQ3uxajSTHBJ6WNH7tlfTgce/3SiJD5d8l+1Hel15B45Upn7oGk5WoCIckXiBcvS3c0jq21GkfdAclPEwBgkLNvfGYHhOCtgWEcQhIjoumkAMDacpsIQNvAFIJQzOxEFMW0IKR4PikISUEQRDEtitlDpDO2LUmeLzBrEIbsetVDq8u2l9k0Mvr+TTVAeu9q3Y5y03Ndo6F4EmScH89M+uQs0+EKhsOBYo2MxhGOIATYXCB0pG3oMztXPXOozReJpwRh1BeJ8vxcMG6S0fPhhFQ/kCenpYLaaDpBYSQvikAECZ6PJdNJng/GE1KAjkNprgICL/y4feRC98SOVSWuaABCoOCYh29q+PX+5oPnh8bmPclEcoXd9N3jF38/5lqjVTUW5Q3Oe2Opy86bEhnICgUgx1+IQDCYSokiSAsCgqBnbN5hvDrj3J2KxBL8fXVFvTPBn58e8sTjSMaUbV0NADjWMnRbTVFT5+hzb3fPhoLZfzHI2UqTtn/euxhevhIwCCWxIvsAAEhdWqXPe86/VGTS4JmVArmKu2HXqq/f1Xikdeibj+8fnnJ/afeaLeV5LYOTp/ucdQb1oYHJJ1sGwokUAKBUqbXLlHqbvLrA9O9/PP7XP329pX+KF8WlVHo6kYix1Lo8g9MX7ppxJ1JpCIAvGs+mrffN+9fYDCIAvCi2jLjK8/QiAHPeUJFVL10wuaXPfI7hj1bG/PPdm3evKOl0zuapuJN9EwCACoP6kTXlmwpMrVPu310car44teiPmGhuLhUR5fStG6pUanZHXcHX96yfGF+4+bGnfvLK6bZpl8sVvHVV+f2rym0q+XRwqd21MBO47N2Mcm4fMWfeaHe5NxdZxCtffPNsrzuwxGrlDVe6f16LnjnvHRX2r29dSYvip9ZUNOab/uauDQ/fUPf6sc6paS8uguBiaHvpFUVxzX2Tm1dcrhOIJFOHJxbWFV8mDACAI12jN9Ut+xQdaRteV+UA16Brzvtkc/+/n+5+bnjmCytLvrimvMqo9sUSi/HoT18+g5PEuCfYMeNpX/C/fqRjS21B2+TszrUlUreBXLij8b89clFDoLtXlGoY6uLQNIFjKsvy+os3srSvpf+hratWl9sohkQQYILIC8LYrJfSyWG1XZfmv//lW/rc/oMXRoec09s2la6vLdg7Mt3j8pIk1mg2PlBhTQD465Hpv9xU8pVt1QdaJ95qHnls53qGoH+47+zTJ9prraYdtUXH/vHhbdWXh0UE4lXJQtdxHRKu6wMfHYuxCIkwZzjgiUe1FNMyMH3jiuJh55xGzhRy8MyRt1w9F+Ox+LJZkEQBgAgAEEURQiiKYLl+QJBc2oAgiMu1wjgGAaRIEiHIMjSOYQghhiYRhjE0jeNYSUnp1m3b6teuNumv9meAADh9IRmO6eSMlFgZiidrHMYDncNb6wv/CySCxcBSNJ4sztNJS+B5nFJKhpEqXC/O+baX5H0ivckkvOOMdq1EkEqnz3WOvXVhQCZnEghK1R3SxrwopIQ0gXCCIGxWx/T0VDpHJUgmUghDV6kEgiDQNBVPJEVRRAghhHieJwgimUiMjozYrbaZUKzAoP7/RSJ48o3z53snH9xR/7ndq/PU8lvyTZ0znmKlqlCryKb0ZNuT5WmVeoYb8LslQ5sPe7hrkc0hRhAePNu/vt4+6lniSMIkZxdC0dfaxlcWahryTbfWl36owuJssH4VXZFGyROPGmiOwjESww4NXm5azNGkTsntbx/aWuEgMllDNYXmX752ViokyO4f5gx4lmzkjsbyOjFC0rK6tI2UwDfmDVqUMul/GRLfXO7Y1zpcZTXQJE5heEpI4wirKTS/0tRVVWBiaRKDMMYnOYKGEBLY8li5YxETK5NUCCyTog0BGF7w61n68dfPFq0qKtTIyw2qgxeHVRzdUJyHQQghlFGMSobe7Jsq0Sk5AkcQ+mOpLQXaBpt2ZM5bbFCRBC6d6g+fO3ljQ/HqcntNgemFox1GrerouNsoZ+IpHkeo2igv1cqonASeSCpFLndQBiRC3mji4rS73KAyyVkpXHb5w053cF9L3y6r8cyl8TsaqxwGdTCVwBGS03RVvunx18/+6zPHntjX/HuPXzPvppNCvdVQbtKqOWZgwadiKBLDsqG/mC3VyLwS5wUIAIUwAkNS7tDvDrbcf2O9Sn6Fv6Q3GfUFEyuthu3FeRyBtU65j/XPl9lVtMD/3V2NR1uHbl9bUWLW7G0ZqrTpZJme4jhCGpYe9wZngxE9x6BMg63sQ9Jn0qJIIORdir7a3P/IjQ0AAAihOx5tnvRsLsrbUm7bXl+i4GiSJG5aWxaKJ/5q+yqtjDnYOVxt0qhJ4uCgS8VSKgajcEpLsz4+9qeD7aur7M3Drt+/3d6vYqg0v6fQamBpvZwhMDTmDaXS/NmxGZuJM7EyXhDfHnY5NPICjRxB+LODF759xyZfOPbqya7P37YOy3glxfiUPxHX0zKp79tyCA4hBMCiUeysLSzWK473jZ/qn6AJ3KKRW+Rsg00fiSWPz3gMOJLRRCwFeiYXBrTM/Hzontp8q5G9a23Vw7esTqeEV8/1nBmYqjHrG6vyOYowKzgcoflQ5MLkvMsfhhCoWTrBJxmMBJm7BgIwEvSeHlncXpxnzlhqSvjOC8dkJFlbbt1UagXvjq45rysQubXCIRkBrS+1DwY8lWq9RausLDT86o0LLzV1xxHYWumQ7iCQWezPbe/1g+PtMUH8yprq4ZBXygVqG5txuv0PNNYCAA6c739i7/kffuW2bCWxhmR75n17+yZcwcgGh7GAJqcn5x/eUGXVKhJp/nDf+On5UGTW990HtrW7Fn7XOlQA0LEL/Wuq7X4x+aUbGkZDvqvEga/uOz+GhN155nqr7u2eyScPtG6oL7YYZDqaTfCp359oX1fiyDeoT3SPP/TE654RT+fI7IBrMa/YNLLomRbob2+vgRg4eLJnYt5389ZyHNG93qVgIn1rtZUWkEOv6pjxzcrI5Hx00h0uM8tcs+7Pb62HQNzXPpSvU18YmiZw9IPP7DRl6uXA8hQHwUdd8bmO/9m4zgc+OhgM9yfjRoazy1WFRs2/vHBsVYF5Y5mp+fSxzraWeDTKL/e3EgEAIKciQBSlhyhkcoYEQYTXMAGSIPDlvCAkk3E4jpeUlGxs3HTz7lvKy8uVStVVeedZyCnimY5RkEqvchgBAHKG/MNbbQE+tTrfGiVSnywluPyuMvPL1cajDCdFuiqGap9aOO9yl+iUFgW3GIpE46ni95SM3xfvFjTnVhHoaNY1632yY+TpF09Nznh6Zzz0yiJ/LLzWpE8IKamJZjYWv5YSYBjKpQSiKBIELvCCRAkkwSeXEqRTybHhwSWV1SSnFQxdolceGnSV6JUVeboPVUUg4SNM2VvrS850ObfWF1t0CgAAR+JiMnXB5Vlh0bIkno3XKQI/0jW6taoAfKLeo5cph0F1snOUool8jer42GyKB7841fvpDaVaJeePxGrz9BSBvXCu573LSK6lAdcCAqCjuYGAW09zJjnTPuMhcaTjKAxhAABLxmuozmqgSRwCwFAERWDPH+2QLtHsTkDmcPDK417eJmM/mgWCkCGJ+VAEQciSBABAAIAhCQrHfnyoZWOpjSUJHGEpIS2nqcoC45NvXqguMDEUkRJ4fDnUXo4+F2IRDc1imWBueVoAYGjOFwnHOoZn1HZdrVlXpFW8fKE3T6usthsl0YNCSEuzChn2Rs9UmU7JELhDxWpZUi9jSo2ave1DxQY1Q+DNUrR0U0NaSHMUVeYw/Hxfa5zhMAg1DHlzqUHLkAjCBC9AAJO8mOAFCEUCYVKxLwBgOrjUM+c3K1ijnMURGg0uTS0GinSKpl7n/RuqX3i7o5fC76gpXOKTsXTKzMlkNEHJmBePdzLb6nY5dP+yp3G1w3T40miN3aigSQVDDc77lCxFZZoHS3wgkRYQhClB4EXA4BiAIOtjgyD8+atnH7tvs5hDHnhRnAmHvcH4mgIzBGDUE7yl3PFs+xi/sPivn95aUqS7sbZ43+m+fL2aI4k/nupWyii7bllhwBEyKzgcwQl/WM1SubUcIMMNpBPrmlwYnPXcuaZC+oDc8ejBvulbyu1qlkIQnmgfqSuxJCAoNqq1CtahU64tsrzRNjDpCawtMLdOL3bMeqpNWggh4uGLJ7r+6sHGldX21rQY6nbWmzQ1NgPMXDlalj42NJkUhJPeqFkGvInowd7pXWU2DUv3TC10Oufv21DVNTo7MLl49+ZaMTNuS3w8muaNrCx3JNOCiCBMCiKBkFUj31KZT+HYoa7R80NTFI6btYpCreKnvzl87/aVl5aie4dmlgAoo9nzzvnPbyimcERgiMDwQrM6RYg/fO38xOjCb/Y1n+12YgitKslT0NRUOOoSea8vODzvSws8LwAlTWVPoGPW41lK3F1zhasPAODbP3vzbx7evqeuOMvG3/GmPjg4VWXU2FWy5850basucOhVWZtRhIEttcVDvmBv92S/c0HJ0tJE97uDreuqHNlK4kgy/YdLYzuKrDKcKFKpfKH0voHx3za13VNfOTnn++7vjnznyYNb64vu3lwrJQsFQsLrvePTwchGh/HWCrtRzmg5Zl/70JduWs2SeM+Mu85ieO6Vs6o1JY2FmraJ+aNOd1tTtwjBRGTpe5/dbubknnhUCvRTYppERMeMZ9AdDE6Fxzzh354ZePJkb+usf2wh2DwZUKrgoif8++OdJVbTP/zm8H8eayVS4Htf3PnVuxsvzntaRqYnAC4bnFpVat13pk9RV1Bv0zRNeBeiibV2g11DxSO8TE73zvm3lFq+e2N9uV3xxNv9F/tHv7JzjcvjH1vw1TrM5wanHtm26gtb61ny8qqHCIAIRHjZLuE6ruMKXOcDHx0UhgcScRVFEgg/dmn4hdOduvmunu4uv88vMQEAQIYPLAcz2XShTJGAKAUWBIFBBGmKwjCMY2kEkVzGYhiG4xhFkSUlpRsbG2+++Zay8nKN5ooA+lprGgCAWcF1z3pVJC7xAZtB1TY0XWM1vHC+d+fakk+WD8Cch/Q+JeNRisBtBpUU72Yj3VwTTByhpv6Jj1lVLOEdZzcKx54+3sEC6h9++/ZPX2gaF4RVDaVb77tBWaRL94+tsppVHKVlOSk4zo3F35sSSM1i34MSRKJxhiJjs86AzFhl0dE4RmDo0KCrwaaXJIKAJ3xTQ6n0dXiVRPCJFBbLGMpmUB1uHdy8YrmwOE8tn/UG9w25dpRar5UIrFqlgeH637Ow+EMhe4iVJXlvnOwxmRWPtwzt655SODQL6WRY4I0QyWnyPdoRfBAacBUMNDcQcOtorlSnPDTkKtOrERIwhEEAauzGpl7nYjyxym4UAEAAjLjcnSMzKhljM6hyRzj3Se4lnQXKGARd3gxCDceMe4NajiEwJO0/T6t4+ULvjy+N7im3cySBQbSUTsppemjK/dSbF/ZsquJFgYBYQhARXI7+PfGoieGiPC8CQKBl0sELQo/LPT3ri/BChCa3FVsMcvaN1oH6fFOxRYdnAlYEoYFhQ+nY0eG59XYDkPxMAWAJHFHE94+2OTSKQ21Dj96+XkaTOMKCqZiSZjZU2k4PzypYenu+RstR0mlICfQQAgpDvMhTGA4hkBxCh9zB2VBEw9Jyjjoz73tufG5yKVamofZdGPzUxuou5/wdtQUDkWiBhqvVGoeD3lF/7MXh6TDOVqXi39i5ZnWBRSYjVuVbHj/SWm03qhhKyVCDiz4MQorABTHTrQxBCAGB0FUZRBAA55zvdNf4gzvqs+v3UZ6nMcwZCKZTYplRAwE4NT5jU8uLWfzQpZH1K80NFquS41YUml9r6h6aWtxcW/BW50jL2EyVXc9RpDRQcopUsVT/nFfD0ldRAukEEIRnB6bkDLW2xCoAIIiiOxY50DP9pfWV0un9+OXTd2yqjoqiTatUUiQEgCGJzVUFKpo63DVWblSZOOr42JySoToHpo93jsUqHQxJ3lJkXF9u2X+8u23QpZAxBrUMgxBHSE4So/N+AwZnksDtjx8bmb2tLs+XiDX1TahZen2p7XSPk2XJdRUOEQAcoXAqTiEsmExkJb7sFYsgFICIw+VBtGgU26sKSBw/3jt+dnCya2j6+MWRe7fWbCmzJ2KJ186PL+HifCi6wW6u0evmYpFAIh5MJmZ9S4l46rsPbC+16f/j2RMdw9N/ONLeMjR9fin6QFXeGrO5xKgGUPRFE21T87EUDxFEAO7tca63m/LV8twviCOtgwIAFoumMUccEK98SJ/1z872fLWxunnYNbbgf6CxVhIHpO3TIs+QpDsS+9u7b1DLmDfO9rQNuMZnvc+81fajr9yW3e3/O9F+ajGU8MePD8y82T15uM91uHtmZDrcOThII6w4Tzfscv/T53bkGeUI4l85cbFl3O0wqLbkG8sNSl4UeFEIxxOvNA8+2Fi9lEi5vEG3OzQ67ytZVcim4Msdo2B2sXFNaZBP/fLRW1YazYMBT7lKl+BTAAAWp4Lx5L6ByQ12w5cbK3dX2RwKOhkI/b/7NjlU7B+fP9aXSA17A53TsYM9rpb50GO3NMzXmNZplE1j0xcGXO40vLc4b3jG29E3WdlYQRL8pYWliCA02DXjoWCxWt0+G4gn+c/UF7MMiqQT0WBq77mOJC6bcS80lhVY1Iq2sZnv7NlUYr7caEjMTGXoOhm4jnfHdT7wsaCmmJGgNzAzf/rtAzVsIplMpdM8yNAAKS9IiiuuZQLLGeoYQggSBIFhGEUSCCKapqRyYZvNtnXrtpt331JWdjUNyOLdJAI9R7897DLKGbOCAwDIWPpbj+8fHJr94RdudUWDauoKwf0ThDTXUAT+duvQlpXF2Xj3WolgTYH5E6kqvjZok2DTKZ892PaT5vEwSeYV2dQ0m8LFr68uvK0ob3o6uNJunPSGy3JmzFxmlUsJEomkVL+RTKYQupoS8ILAXEkJCBxPpdLxZDI0MeQoKJTLLhcWry/O84YiRWbNi8c6/6ztyfL0yqbOy4XFNIGXmTWnRmfVLG1RXm5PVmM3vnDuXQuLPw4kFYKlSZYif/ny2VTQb3boH1tfuqfA1qBXswS+GI7SOF5fYHnpfG+tw8iQBPhINEACzITUepojcYzEkJQ1lBCSGMI4mjQouTfaBjUMPe8J/nZ/y9RC4M4bao60DdcUmRmKyB4ou+CajQrhlWcFMpQAQpi98HCE1CzdP+9VsRSJYdKSv1bOPrP/3FBCuKe2EEDYPTL3zKGW1052a+SsVa80aDkSIzAEAFx21FmILukZjsQwAqGk5DkGQDSRuuhaHHMu6LTyOI52VzhUDPXSud4bqgpsWgW4cogcSuV51zyD4wYZI6USdS74f+WcOTfje3F29kc3rbWo5bF0Mi3yMpxO8CmGIDbk646e6V5fbpUzpJjz7qQwN5yKJQWBF/m0yAMguAIhbzTWGQh5hfQ6vbJeq4x5glqSPjMwWVZsaB5y7txYdlN5wZGRGY4inx+YnV6Kbcs3/uOOFYgELR3jOA6LjHoBA3UO89MnOsry9DKa1LDM8KLfG4mpWJrEEISXfZz4KzPjAQBdozNjM97bG6tA5lSl1foRr19N0RaVDEJ4any2waqHovi7k50DSZwHYplOoZNzm1cWqTj6wLmB29ZWFBrVr7b0V1h1MooSpf0gBCG8MDWfxjB9jnmlmFEhjnaPWbXKGpsBQdjvd6M0Me4N3Vhqlbb5yUunv/KpTSOLgXq7Udpeqq8wa+T1Baaz/ROXJuc2FOW92j2xd2LOSaL/u676ztZ77KUAACAASURBVGJrHsdFxdTqWruRkx1sGewencEQMmkVGpae8ocbi/JsStmTfROxUPQGR16ZVv16c/+aImuaEY5eGi4tNmAyzMhwAgCCyC/EImUq/VX3i5hRCbIF2QhCEQC7VrmpwkHj2C8OtzonFycTkZUFec+1jjCh8F9uX2lScZ2zvgODU3waqCjaHY8evDD06S3Vt6woN6i4YxdH/vazW7/5wLY33D5u1vvrl86n03yaT5vkcrNKXqhVJZJpTzR22jX1Yrvz/2yuSwsCmcnnAQD86UhHTbHZqJaXmjS5PCH3AQC4MLnAELhZxrze2r+2xFpk0mTFgQSfpDFyPrBEEbhNo8jTK7etKvEFIy+euJSnVdy9pVY6UCSZOuWcv63cdv+Kwi9sLK/J01bouBPtfT//zNbv3bfD4FAE4wkOJ/7q9vVpURgL+wcm/bhJNbwYfnV01jUX4nGsVKM80jPR4ZwrMqqGvP6IN/LMW62P3dO4wqi+tBSZ9YQjPIykhEd3N3AMLqPIaDolJwgAAIUR3mj89+3DN5VY1zmMHEWEI/Ef/vH4jSsKLWruucOtGIFQMva1nRu+uWuVWUtPzs777PpPW7QYLz55oAXRjOgOdnSNO6rsk2XWMgVuYLgkELcWaXtiMadricbQ7ZW22ysKfKmIlVV0DM3tbx+y6xUPb6r+U9vM9MKCjMa/detGJXfZ63z51v4wM+p1/O/EdT7wsRAMBg+/vre1uTkaiabTaXBZEAAALDtXZuqHRemv0tIfjmMQApqmEEIcy2AY4lgGxzGOYzAMKy4u2bJ12/r1Gz9IL+F3lAiMcvbSnC8QipYaNRcnPd890D7aN3HDlgqzRoaz0Mwp3nFXHxPZCOkDSgSfiPGohHec6Qx6xfmeoV98dtvnd5SWmuUcQawwaerNBg7D/nC4XWlQWtXyrPHoVcyKIAiVUj056cRxPJcSCIKI4di7qQSCIOI4hhBCACRS6ZDGUWXRAQCy3qNqGfPU8fZYMFaSp8v2xsrNGuJFYSkdyzr3ZYf0w+Iq71ESw4JL0SOjsztKrSAbr1NENmnnfb1HPxSylMNqUDX3TTy8c3Vdge7ipG93mZ3FMTVLYwi5/KFig5omsT+d6ZaugdyY4MMCAqClucGA20BzRjnbPuMmMaSXUTjCIABjnuC/vX66dXB60be0Z33FZ3c22AyqmqIrCgnEK4+e++SqP+WqBFCKXBHUcszgvE96awCAfL3qzJCr0xOo06l+88Z5dyDSWFvwrc9sUcnY1qGp6kITQ5IQQiCKKVEURNETjxoZLhuUS5mEvmhiZNHffHHkxvqS3mDk03VFOIaePdW1Z3W5Rs5edW2IAKgV+PHhORxh89H4yyPTj18aKxbRX9Tb5/qnAYYKtHI5RRMIAwDgCEvwKZogavKNT+w9X11gktEkgjApCCiTs5RI82qKJTGcxHAC4ScG5wZmg+e7Zm0sa1NwhRpmLrREAOF47xiTBvOz/kd2rYliKUSmXu2Y2VZgfrDCIaKkPxVtLLKvKLa+fOzS6a7xhuI8pYyqyDM8fbK9yqZXMpRFJYMQOL0hLcdkW49dSwYAAGe7nQoZvabSAXO2QRDO+iMKhjTJOUEUj4+4tpbYKAwd6Rn/6qaaDcV5BwanFDLMwLA2g2ptpX3vqR67XpWMp7/3alOeSlZk0gIIIACLyeQxj7/bF0gEozaVHEeX6ygEUfzJweZ711cZlBwAwB2LOD1LSppaladDEA5MLLQPuW5prPZGooV6leROK9WFIwgZkthQYjMomf3tI3a1onXUE4vFCBJf5zCSBK6nWR3NpihQUWbWs+zB8wMXh1wESTj9oe3lDg1NFsuYU0PzU94g4Pmnj3X8+LO7evpn/7j/4jfuuKFEp+v2LXgTscXY0lIqqaE4HKHsyIgA8CIAACSEZWusrHWSdM1YtQqTnJ33h//pga0n+icWQvG7NlacdM4/sr7y03WFO0qsogiGPIFX+sYOnui5d20NTwszgdCJdufX7tvSHolsyzfcvL7o7+/Zlkyl24ddvz/U/uLRTk9gCQOgxmHsX/DjGOYOLU0Hl7qmFxeicRlBiIL4xR+8vGlj5ZZyu4y+3Mb4KkAADgxMrXMYSnTKv3/+2L/dvx0C4InH9AwLpK7eCBtd9Oep5RxFSPdLmcPw/edOfPsz27Km/vu6Rl/ocf7s1vUajgIAaDhq3h/GIPzCtnqEoIZkn36z+YYNxUVGNQTAl0y82T1zX5H1b9eVFSpkPhodHJ75Vdf4sXaXz+ctzzc99aemn75wusph/Pq9m/m0sOunh0KL4d119nQ8ekO9rUSjTfBpLUXLCJoXhUAs9fNzvUYabyywkDi272zvI99/pcc53zU2N+8Pb1pR1DM7N+MMNKwumvAFL47M3LW5Ns5Sqmj8h6+dScgU/Pi8fnWpttgSGHRVYOmlFDYv8LVGGUHjeAz8xeqiPRX5AsZfdE7/3xdPf/GJfRhCD2yquW9DLRBFLQ2+evOaz21eSRF49uYRPsakeh3/23CdD3x0OJ3OF1943r2wmKsJZP96LRPIJp9ACEiSRAhRZLZCACNJori4ZMPGxl0331JWVq5UftBV83etIiCJx8/2PHthjCLQw2uKRue9DeWW/oBnTYn9k00ZugrS1PPfQSIoMKjdoUiJWY0TaIXFaFXKWqc8a2wGm0F1oXciX6fwROOlOQUMVzErTibzuBcjkUguJUin+VxKsNzPWBCWm0RAeJkSQOB3Dlvy8pQKZVYiaMg3dY7PltsNR9uGr5UIJA9vURQ/vkRgu6Yjr0OnvFYi+PNlDUmUI8EnN9cUvXKiy2RQjLrDBgVrlrMAAI4iZoNLGEJlZt2ZgUkKxz7mNQAAgDmFBCU65aEhV1oERjl5etr79sR8i4iqy4ybiy17GsoBACIALEXQFP7i8Us3rLiiIwG45oq6ig8AsFxLIP2UolIMIQzCcW/QrFhO29hcmf/c4ZaDJ3oe2rX6oV0NBUYNAGKBRV1XaHnuaEe5w0jgSACARAhB6IlHjaxM0hYghFKpqHspOuEJnm4dvmtLXfuC/666QgDA0yc6Ht5cJ8ka0nlK5AGD0MCwSjn2TOvoXtfi7nzj360pzzfSKw36zaW2fc2D/jRfoFFI1qsgQwnkDF1VYHri9XPVRSacwLNROC+ICF1xHfYt+lZatD+6Zz2BUOek560eVziWWPCGnz3ZNTI455z2/eeX9+hoLiUINxfbz08slOmVeTK5LxE3sXIZTW5dWUyTxIsnLtUWWVQyqspqfOrYxTKrjiJwGUVqObp/3pfN2MkuzOei6dKYRs7WFVukSTa7TYdrMV+rVDFUPMWfn5rbUWKXs/SzTZce2b5qhdVQplPt7ZlUyDA9w0rV5K+c7Hr6QEv34MxrJ7vHI0t5OnlIFLsDS0Vy8qHiApLAXL4QgpAlly1ZIYQ/OXjh7+/cJJ3GYizSNeO3q2RFOqUgik2dYxRFrCy2AADNSpkoiilRRJlKX14U43zSrFI1FJgPXxqNJYV/uWXNWruhyTknI3EtR4uiqKMZJUlHifTtq6sIAnv65KV9hzsq8o3zgaVn2kdWF5n6ZoOHw77hS+NGOfvj55smZn3f/fxOEQADIzMzMhlOxtK8gZEBAIRM82CUSSRDEEo2XCAzaFnO8OqJrtvXV66rsldbTTIGP9Ax2DLv31lsqbEaZCSRr5HXmXSEmNp7rr8rKeKImAvG/zS72JVK3l6gN8koBBGDY1ajck2l7YHtq7bWF3nD0UPNg//+3Mk5hGpk3BqbIV+rfHx24XaT4czg5CsX+kRBZDRcnU1P4FiubpCL3EpiRU4lMVzm3rxvKb6USBbpl7uXQACOtA5pFdxDuxqkC8MXjXfPeExK2aZCc3a3vz3esWtlsVWrBAC09k9NLQYeuWntYMjjScQwiM473bdV2HUyukSt2GBQ31tqtcsZ3ixrWkpeOHVp29oKIS089c17NDLm4VdOuZouPbSjzhuJPLZnrYpmCuTqYDJhZOUJPuWLJP/y5VPrrFoyzr9+uufRH73+2wPNIoT/+MjO3TfVUDTVMzLz6J0bEEQ0wi65Fm9fXd6USLbNLry1v3UBEveuq/jqthXfualhc4GBUuITi5EES5IzC90xaJfJv9FYo2DxkUXvL95sefyt9m7nwpbK/B88eJNJKfvTme6xed939mwss+hgZljEjNT5Eb4+ruN/J67zgY8Cp9O5f9++pqaT0VhcBJc7CUi4iglACAEABIFDCCmKxDCMZWgMIZqiCALnOKaoqLhx0w0333xL6bvnBb033lkiULAdLl+tWXHLahvGgtUOy4uHO32R1GpH3hKW/DNRgmwg9d9EIqAI/O2ukbtXVbliwRqdvjPTi4CjiNdO9Sj0iveQCAAABqNpxjWVSqckSpBOp2mKzKUEIONJiiDMpQSxWJymKSAK4+PO0pJSkqKyEgGG0EsXet88emlTbUFBZkErkIyzOMbg1LWncS3byV5t7z3R53bkBe8iEYBMYfGWqgLxky4sDqWiHE5TJE4T+CtHuxorLX2+pVK9iiZwAICWY8Y9ARrHOZo41j32SV0DixmvoRKd8rdtQ58/1iWKwo5CyzfWOio5xbGesS3lDgrHpKGz6VWnusZpEs86goOc4c19AnN+XQaEaUEgMhnnEACOIuZDEQxCjiIAAHKarHGYftHUHlXKdlfYCQwJokBhBMRAiU0n1RbLaUqK5j3xqHRL5n6m7lB0whd6+1TPo3c3Nk3M31tTCCF88u22R29eK2S+73PjPwCAnmFtemp2IbTKoo2BRJFcSWKEnKZW5ptfb+6TKAGdQwmWkkkFS1cXmn/1xvm6IgtHk9KucITifBpHGMqske/vnyw3qe0qWZ6aW1tgVNDEoR7XyVFPwOe7v7EmGk0+smc9DuFiLGJXKMv0ype6xou0crNMPhryaWkWAmA1qGoKzb9643xNoUXOEjV202+Ottc5jDSBYwipWbpzzmOQMTATTF+F3+xraawryDdrYE5HCABA29R8rUVPE/h8ODLqCa13mFzuwOnBya/fsl4QRQrHyvSqN3ungulYvlLJ0eSWlUUFFt2BC/3GurIthcamwcmzQGjUc1vMFgShiqY0LD3qCcyHImqWJjGsz7V4yTl37/rlPKXFWORA3/St5XYVQyEI32oesBlVcQD0Sk7FUghCAQAqsxgPABBFgcIJjiJurC7I18lbhibzVDIliTc558f9YQSBWsZAADQ0Oxry03IiKUK3J7D/3EBT72RnLKa2aZYo6B0LTk1Oe2cDG1YU2fTKbatKMAwJIkjwCQanPImoZE6VVQCAdLlCmBZEMnOJissh9TJ7/NYTB/75kR0MRo64/WUGdU2+5YRzwTkxfaRrxLsUTfG8USkbWPAkU8L379zEsPTL024mya/UKItVqmq9zpeMRNPpcDqZx6mSQpplCJWc+fW+5hu3Vp2dD5452f3ikY43z/clRxb80biCIPYe79q1riLPoJoNLs2FI5PeUDSViibTAIAsRwUA7O2d2JBvNMnZayuJ43ySQsSoJ6BhGRVLwczNku1JLL3yfGt/+0Lg03XFFgUrvdI87HIu+h/YtNwF7Nm329dVOhwWZR6n8iXielJ+ZHjmgRVFHEEkhDQGEQCgQMkVsbSOT73hD6VT/K13byxScAPu4MuXxr3DMx4+cf/WWptSmYa8Pxm3Mor5QLCp0/nVw22x6YVTZwfdwUh5iam62j61GCj73Oab7YZ8ufxYy9CX79vQWJiPUcTTZ7q31hWfFfju/c3+KXeMZl/94q4vr6+i1ERMTJ1xuprnQpiM7Zvwu/pcf31Tw32rSiAFT/SPzi2Eiw2aWCL17w9ue2jTihlfeF/70I01hQ/dUCdlXWaZAMzJe7yO6/gguM4HPhykNsNNTSe9Pp+Y01MsKwJcywRwHIMQEgSRmxfEsozDYd+yZaukBmg0758X9B54Rz4AASg0yJtcU6tMhlq9qcCkbR+cLs8z7Osc3rqy4M/EByRI0/R/B4lAMhoiCOzadsUfRCIgCMJqc2QpAc8Ly5QgxQuiiBCU2kvnUgJJSSAIPBaLxxNJBIHLNV1VXZ2VCDaWWD/3xF4WwydmvQ/uWIUg7PUv8qLoTybeo4ogFzDzeG8spwNlOvICAAr0qr55H01iFsU7SAQfpGPxh4IIRIly2Ayqi4NTxSadVksfGpjZmG+CAOAIYQhN+UK1NsP5oamPfw1IMNBcX8AtUQIlTQ66Fr6wstisgtVqY4FOea5v8qJroc5moAlcUtJrC83PH11mTTBnbHNHGOX8mvsEv7K8GACgZukxb1Ba546k+T/NusXA0taKvFPOhcYCo9QJAEKUhqkVRdZf7b1QXWiWQvD56JKe4SC8IhBeCEVqTdrBycXyfKMnkdpekucPR9+8OPTQ5jqQcxpZbiA99Aybp6NPjc6tMukYgpSS7DmKWFlg3nuhz8enCzVKAsd4URREkcHxlJDmaKq20Pz462erCkw0RaDltW2ewnB+2dIe7RuY3FJoUTIUBqEgihyJR5LxSoO82Kj+0s41h5oHvnDrWgjhYiyiYzgWx0t0ipe6nSSGStUqiRKIALAUUVlo+vW+C3WFFgVHrsw3P32io9pqoAgcR8jH80ddC2VqOZbpU5YzGOC3B1ruv3GlSs5ImTzSLe8OR5y+0Gq7CQLg9IWdvuAGh/nSxPzYgn9PQ7kUHzMEXqpTHh2ePe+aV8lxDc34UvyZQFL0ePzByE0NJSN9ziqDtlCvlo6HI6SXszhCTm8wLYgXR2dUHL2+1CadxmIssr/HJRUTC6L4H388/he3rgkkk0U6FUcSIgA8AHjmzBGECT5NYbj0SZlUXLXNsP/iYKdzvs6mZzHU7HIPLAYIDBlljIFhMQH+4Xjn7vWl37pvq0gTb3Y7hbGFjWZtV9/IM1++Y0ttYceAa9fa8lA67Y8nSAwROBoJ+ao1xtyRki5RPtPNTSJXYo6OhCB8u3VIxlLraxwEwlon5tcWWHyxJIOhO1eWPLpjbSSZHHZ7/9B96eUjvQ9sqNldV1yqkf/qzYvf2b5yR5l1aDHwy/N9qSTgcLJUo3KGA4FkIpBMEGn0h6MdDSvz3Ql+zW2rSzaUP/PgjUXFWi1Jv3z80qmOkSUMolhKx1ClOvUKhxED4Ojw1JgneHFq3ukL+aOJCX+4Y8ZzS7m9eWT6/LDrMzfUjS35cyuJcYRfnJirytPlygu5PYmn/KExdyAugM/Ul0iveMPRF871/vWuNdkb/O+eeuvfHrlZEAWpB1kkkTo2OrurzEbhGAZRgk/hCIun+Z6JeZwX+zpHf3Lvlk02429Gp//pQl+syxli4b/cv6VGpz07PuuJhvYf7fvBn5r+cKjtlVO9MzgeGpj+1O6GuobiAZYa6xzf8eDWb1ZYYBL8y28P15SadteWH7g49KXfHBhOgY5wNNntDBFQ78j71Wc2mNSMN750fnCuZXq+adx/Q5HRm453QiwdBWeH55y+Wbdn6dbaEq2MO9E98d17t5oU8mfPdE15gn+9a23plaXD8LoscB0fCdf5wAeF0+ncv39/U1OTz+fPRvxgmQlcrhOQXoEQ4jiGEKQoMlshkJsXtHnLtnXrNnxMGpDFtQvbsXQiLfByhhyaX8J4IJlvqGXMHw61BdLp1fl5n7jxaBbwA0gESobCBeGFzjEdQvFY8o22wTvXVrzfjt8H78gHwLu3K/6AEsE7UwKaTKd4EQCEoNREAkMolU7jGMIJPEsJCByPROOL7kWbzaZSqSSjocFZn05vbJuYSPnjjmKtwIBqtcHAcO/hPZobiX6oWf6qrCECQ6V65atd45UmNUNc9h69qrCYI0gpy/xjIks5AAC1RZbXmroKTbr+Rb9WxmSzhuaCEUEQN5TaPlQ7gveGJx7V0RwEIE/JuYJho5KsM2hJRAAAau3GY11j3mQqX6tkCRxIHQmK3qEjgQR45XUlhVkw5xNBV1IChJCGpS/OuCkSPzzrvkGn3FCUt6+lf0EUy3SqPIVsKZ2mMUwEIk0RDEm8mGFr7njUwMqEK9nFyILfplHsO9NrM6k9PN9YaJ7xhc70T97XWANynPIRhPDKX/UMq+Cwg/3TFQa1JIZgEMoocmW+6c3m/hgUHSo5SxJSpAghSgtpOUOTBP6L186uq3KwFBFNJ1j8slW/AMRXusfuqimUlnJFAFiS6JhacM64q/J0sUhcq+A21uT3+92Var30FigcK9IpDg9Nt8+4682GqUjQm4hqKYahiJoC81P7mgVeLLZpRyYXf3a4tabAvH/WHUqnt1gMQ4t+GsPkFCmtZEsPBOHPXz3zzfu3gMyv0vj3B7yhULLKooMAnJuc0zBMhUF9enCKo4hsBA8AYAh8vd3IEMTJkfkIn/zR0d7CGnNxQ9E9hZYznWPFFs3TxzvODkytK7dyFCnJPjKKVLH0qdHpjtGZQqOm1m4EAPT4FsUU7vSGpWLiBW9o37n+v9i9ZngxsMJugACkRBHm5OcAAJJCmsRwAIB0nZA43lju0CnYcwOTE4v+Ep1STRPNLvegO0iT+L/1TQxc7L1tbe3JQLgpGGJ48Z9vXfPGsY4LzpkH11XxKf7Zt9t//Dd78vUqDKH5cGTCFxQxYGJlVykqvCjiEOII8uJyOYogAhxd1pFeOdm1ZUWRSS+fD0YpHONo8g+dI9tLrRuL8gaDblZG5ukVpXrdUwfbLo7PesOxmWDs5MDMz+7fZJYz9Xm6u6oL0oI45V/6xYVeIGAMIsp12oOXBk61jY0o2Kq6gs8Xmv8/9t47Oo7rPhu+09v2voutwKJ3gL33KokSVS3Zcmw5cdziuCVx/Maf48SxrbjFsmzLRS5Uo0iJYhPF3gESBIje+wK7C2zvfWe+Pwa7WpISpaj5Pa/5HBycwWDOzt1779z5Pff5lUeLtc5keLXZXGPRCBlizOF7YGvTIpPmUuf40wda9p7uOtQ66HQFKRw7lYjfpVEOT7u+d757pVEx5gn8+cz1crPGm0giMETCKArDsUwykmDd4ag9ELGqpDiC8A/mTTWJ910fPjY+99llVfm6B/996NKWemtZrozx8bZhAUUsrdHzNQeUJDPtj1yanqtRS9UCCgIgy7EIhJwcmNQw9I/3nr865dhRaVlbYRwZdbx6rjeiEymNqkP9M6eOtDtDkXAyvrjaumaJFWfoIQHxxVrDyIR7z9cfFKDo3pculG9t/IRGFkwmv/ijA4CG97/R/d1nT7zYO5x1xzLhuJ5AR0SESCD4wc4GtZAKRNJ9U77ZeKzXHlAJsNOj7ntLDYHRmRl/ypiKzafxe5usgONevty/s7EsGE0ebB/aWmd9bHU9fWMyBgA4+H/3lriDO1jAHT7wzihgAr5CJgBArowAyycN4kBOEIBhCMNQvpQYzZAIgtA0iePE1u07d+zYWVZW/u7DA94l8jvK8UwyzWYplEBhFIcRGICzY/YNZQaQTzxqVB/pGv3LSgQyhuywze+/PvaH58++0TJIyeiKIsX72R7mDanbSAR8LYJbJYJytdQdSxjkYjQXy/jWlMBomrFNxWIxCIIAgBYoQSbLcQCGYZ4SYChaSAnS6TRB4BiKsiw3OTkpU6sTMPJK35QzEHtwqWlHs/XZlt75Se/Xdq3lX9IfRu5RcEtgMYNjc/7Q3t6pwtyjNIGlWO63pzu3N1hFODEXj4hw8qbd2feGwluQGLr3TFdjibrbFeIlAgCAjKFs/pCcoRgS29vS94F4DSlzuUcBADIRcnXSU61SIjCLwghD4g0W7eG2QXc82WRU871K3ZYS8IByhilScIZHISXgAMBgWC2knx+zNclpEgUMg405/AaZoHc+uM5aRCJIluNSbIZGCbWcudA1SfKEOR5VUwzgMxCAhfiEcbdfK2ZeON1JC6lSo6pepxhxenum5nYvrbqpDfnpwXIcLxeoaUYoQA702iqVEhpD+RYyBN5s0R28OuBMJM0yEYWh/F47CiPxTOoPR9vXN5a8drGvpliD4TAGo3l+Ektljg3PPFBXzOW+sj+aGHB6z3ePfXp9U8+oQyZmmsr0c7GINpcFP8txDIYu1itxFDkxal+iU5lF4qGgV00xNIHVWDR7jnf8fN/lV872OP2R1zz+jSb5er1WTZMqhprwBudCURlD4ciC4824w/vq+d41jSVCAQkX+EeNhTwgDZeppBwAfXM+q1ysEdKvXx81yMW1xptrNWqFdIVC/O3j17vs/n9fX/e3leZas9pULHv9bH/MH9/UZH316pCQwZQSEQxBLAAwBBmkwp8cbpEphFa1DEVgdyI27YmKSLxeK0dh+HTHmIghllYZ58PRYoUkCzg4l34qz2RS2QwKo1zOUQdH4AzLmeSidVVmIYFfHZ0dn/Ntr7FoxfShAdvYyKzPFXVpJeuUsmvD9kcWG0pU0hKNzBOJv36u7/DF/sGp+cZSXaVJLSQwlYBGMcgeCHvDCQSBBQTOz4TCaOx0loMAgCEA3/g8f/EnB5bVGswq+cHucYWEcSdST3dNlqsoCMlUS1UqilFRzJjXd+r6xI8e31ZnUp3onUizkACDKnRyAAAHgFEiKFMJ76+2pjPslD/ym7Z+ZyxlLRJdc4Ufq9SWKwSRdIrlOBpBUmz2hVNd25aVG1XSzQ3W0x2j96+r++bHNyyvtbzuCaCBWP/5/mNXBlsHZwaTqcCESyukjnaM1KvlWiXdPjQ/6Q8OuvyzgVCvw3t8YKpCKycQhETRVDabzbLPHLm6us6iVYrTWbbP4XUGI75k+tHG0gzLprNsy/BM+7jjs5sX5b/4cyc6NjZbdUrRSMhnEUgxGO52+k6OzEqiyXQ6QxN4KsV2TNung9Fv/+JIrVXbNu280Dry5PNnXp3zlgPOKoJ311h3VxhmTQqBkPzm9iVri/UkRnSHos/ct7rUIktGUwOT8z/ae6Fi97LtBOHxBvee6iaq1PYsHPlhPwAAIABJREFUJhBTc5EwEkikYikukQ4lUnGx4IfblmQy2Qmf/4Xe6W63JxRJGcXk2IRrcnTWoBQ8trr6iZXVo7HMvfWm56+OX+gd2VJXcmnYFownP79lcalWAeWYwJvL0Xt5S9zBHQBwhw/cHu/EBFiWK2QCEC8CIAjMMwGcwCiKhHBq+z33VlXXzlKaFVVW7G3iqN4nMBgNpaIAgggEx2EUyi0QRRLB3uujOhGjEzMAAClD/t8gEbT22V4+eX2kb7qo2iQrNn52ddX1Scf7sQXzfhZvuRbeRiI4fX3s/lU1o+6ArqCI463uOhiGGQxm+6wtlUrlKQH/L47jYBjOZLMQBBVSAhRFE4kkQeAogsTi8Z7entcpdYVBKMXgVaai1SWG073jrdcmVtcX58uTfRi5R28fWMxLBL0z7heuDDsjSZOSjsMpNS2cDPk/KK+hvAphUEmu9k8LKMqbSkkYUiOkoQ/Na0hJMgMB91wsVCaWVaoU+3om8hUJBASuFDGHO4bXVZpwFOGfFOoW3yoeXE4N4GUBnjLmp3cevBWYn4UoDNXKxSOugJqiVSRTYpC9dL73wnxgkU5hkAhgCMpyWRhCOI6ttxa9eLqr1KRMgIyKYvidbwiCMiwLQdDwvF8vFf5gz5nGVVVaIVOllvZNz0+6A9ubylgAkBsJMMdxbC6ElPc7UlC0SAC/1msrU4h5SpDlOAGBN5g0r7b2e9Nps0y0UEaN49oHZyec3s/cvay2RPvrgy31pToax7nckzUVCPfP+7eVG2AIynAcAGAuGJ30BE91je5sKD1+dWhxhcFSJPcmYgvfAoCFTDsA6IR0qUK8v3eyRC4qEghHgl4FSVMEVlWs/Z/9FwMZdvHGutoicfugxx8I1hSpBCSuFTEIBE36QpJchHHPmON0x+jiCoNFK0NyxYPj2cx42C+A8CKpCIKgFztHHm0sYznut6fatzZY9fK3yKJGYuhqi2bcH5j0hSwqyp+KF0uku1fVlerkp9pHKw2qX55qvzQwvaJCLyDwFMdRGPrL49eefGSTIxQd9wWzgL1m81rlYotMCEHQsdYhrVKM0wRN4DIhxXcOBEH5ZD7JbIpECTRXMIG3yfMDpJUJ11SZJRR+sntcKxYs0ivZbHbPmFfEsWaZ4PqM68ltK7UC4Z/Pd61vtPzkibvkUjoUScy6gzqFUK+SJLMpMUnHQVpK0u2Tzt5wRI5jFI7CEAxArp5DjlAVGo7H24YcntDLZ3r2XeqzByPzCnwgFMyEggcvzri98WUlGhJD+/2uOUdEIxE8saHZIBdvry8pUQrbx+3/9PwJdzgWS6ZK1NJYJglBQCuiqtSSe6tKRAR20un2BpNxkG6f9vuj6WyWpUjk8sD0j/ecW7OyelmZTkzjApq4OmJfVm0eymZ2lBs+taZu07qyx9c2yqTCNILcX198+fp467TjevvEuNfX3WVr6RgfGJm52j3tnAuYZCKQyLTZnPPx5JFrwy2jMy8euaYyyXvs7vYp59XpuWe7J80AsgVC7ZPOVy71/c/RVpNcohHSOoW4f3Lu1Qu9vzt8ddOS0kQ6G06njnROHGob6nQHTo7Yx3umTl4Z2nOi46UzXT42c/REd0f/tCsQRUT49jW1frEAcXi1FuHOhiqTVISiCMay31hbjaNIJgNe6pv6xxU1agHFIDhHIz958cJcKIYwVMzmjKUz65Za15fosv7IsaMdGRrFYllDqSZEAK7StEwkXF6sMirFz087w5GoGKbIVIQE2OY6878+vPrB+qpihUQjpYwy5qsvtUzYppz+sJAiPrtp0SMraqhcoTGoYEV6Dy+IO7iDPO7wgbfGbZgAy3IcxxUyAQRBYAgiCJzAMZLEKYpEEJiiSARBftcW233PluFIsrnE6ArFzAoxjn4ofAAAwHIcieA3rQgQAGO+cDad5hNf/sUlgtEJ9x+Ptk84vHcvr9Lo5Z3+5NOPrb6vqfQjiCJ4S4ngUvcEgsKJbFZAEbfxGgIAYBhmNN5ACUCBzxgCI3lKAMNQMpXGcpQglcowDAVDED05eHfzohK5/IrNtUivMiukf2zvc0x7Ht/65vbV7b2G3vLbvSNuE1gcjCb/64XTo8H4zkZzbYm8a9K52mwSkeS7Dyzm3qlVN3kN7Tvbs7S06PS4vcmg4p1P8l5DciH9cutArUElot/MAf+e4U3EqqVqBEYIDCUR5PWhmaVGTTqbQmFEIxFcHphun5mv06sofMG3W38LceLBd3ueCdyE/Jm8oQxDEAcACsM6ITPtDbmi8SKhQC8V/vlIiwPAD9QWwxCUZrM4gkIQjGFQXbHuJ/vOV1k1WoEw/5m8ydjv8Frkoh+9dK601lyllpTIxW2js/5oYmu9FcoVS+YA4JcneMHIfLNJEABKihYK4AO9tjKFmEIRPo0mQ2ANZs2rVwb8mYxZJiJQxB+KvXS660u7VyEYJKTIBmvRn95ohyGID7POctyIO+gMxdYW61iOQ2EYhiB7MGIQM+f6pzbXFJ+6NrprVbVcIvAkYjKS5nI6CW+JsgCQKFKqEO/tmbTKRQahaCjgUZB0FkBeq3o+wknD4c+ua/rCxlqWBfuv9NcYVBSOMQQmo8lhl19MERAEnWofvdwzadRIg+FYMBrPZFgMgcORxGtdE2KaKZbTZ8edbbZ5GUFeHrIdbB/6hx3LSBzlcvMz/5PhOCGB7ao2a4T0ufE5GkMNIhEMQUUqyZJK42vne/2eSL1F++TByxtqzVKaGp71dE87H1/XWCQWpCDw9NDY+JR/V5VJJaAQCP7pvgv3rq7JwrCIxpUMxY8CBsOZnOmfYbP5mOwky6K5mgn8UGU4DoVhnUxUrlfuOd916NpQioOn7f6vbaw/NzWnZEgBjjncwV+eaHvq8R3T8WBLx+SD6+trrdofvXiubcAmFBBhPFMqlI8Ho06OXa6S24MRdyjGchxD4AgEgXxF7QJ7kQNg39nu1Q3FP/zCDpVUdF1GXfjD+ZbjPWNdMxVSusmi+f6JHoOEmvIGz3RPrq+ylGpk/IzSy4SrKoxPbGiKJFOdk84fHro0H4iEY2kJRUsZGgJAJxL8tmXov+9a9qmmCpOCkuDUoCv428vDL18ZUeGoWCOGSQTDoWlv8KmXL0+YZJ8o0RaL6NlYsEysEDHUlXn/J5eU72wo/bcD5x5fVhsMxx9YX/fE5iUf29zE1uofarZEktkGk8blDR881XXsXN/l9rHDp7tD0cTo+Fxr50TviNMViPS4Q/6h2asd45eujV1uH5vPJLuvTVzqmXruePveM12/P3I1nkoP2V1HeoZOnxs+cWGgd3B2eGA2LqI/saT8yc9s27Wq2hlPtA3MlK8oPfDPj5i0solIVC4RxNKZYr0k7k/9/PFtYhHTn0h8rKqoSqqcDYf/5Y3ObaX6Bq388vTcb1r6DvSOOac92iZrRSZZWaqrrdC1jU3/YV/b3iMdSRnxyPKasgp9x7QjI5evV4hDCRbG4T1OV4MIgzLZCglxd1P55vrijSUWBUkn2CQMwe5gfNeTL7q9Xr1c9MpXH/nqXSt0MlF+NKFb9IE7uIP3jDt84GbwTOD82zABlmUB4LgFPQAgCEISOAwjBIGTBEEQOEniAqFwFtdu27C2prpu1htRqeQzsSSGIiSG4Agi+SBsnbfEW1qxAAAGQw72TZUoRHKGAgAgEDjaMuiKJz5KiYBlOXco+qujreFwYn2D9cFNdSa1LJBKB2W03enfWq7/SBINvYVEQGDoiWsju1dWzwQit5cIwM2UAAYA8JQgk85AMMRTAt6DCMPQPCXgODaVSieTKQFFhT3u+uqqfleQL092umf8UtvYqjrLu5QI3hsluDWwWC8Vfe1waxFNfvdPp7rj4N/ubqSE6PIiPcJBL7X0rqk0v11g8ZsPQw7Qu2hPodeQhCZeu9jbUKI6b3MXeg31O7zpDLe3ffJ01+DHVtW+wyfeFnwj87lHYQCUQuq63YMjcJFImMymUBipM6pPdo15UymLXJynBDcRp/yXhXK/uYLfUMHxwmUQhOS2gSEAEBhWiRgcRebDsXK17MzA1BwHWVRUqUyaZrN4LrYYwSBNkXjv4esN1iKaxPnPZDkumkw7AhGjVPSD58+U1JpXmbVaEX11bFZEE4utRQAAGILSLMtyHF9OCxQ0KU9gQI4SvNZrq1BKKAzlN6pxAltk1r7S0ufLZCQE/v/9+eSDq2vLjCo+CSlDECUG2Ysnu853jteVaEkC63J4BQRerZHCOSFueM4XiyfHHN6lpYZDl/o+dddSCsfm41FdLmtq7v4LrUIRuEwh3tszkchmKxXy/aOTv+2dFgTTX15bWW6UXmgbrS3RlGpltQbNU8ev1hrVNI4hMCyliIE5L4kge453DEzN+UKx7nHHhe6J509e33um65WLfUOzvku+8Kt9tgtTDhsHnW8bf717yhHJfve+ZXBBvh0kdwxyx1ohXamSHu6f6XJ6xEJESdICEt++tMKqk7f12w6d7N7bNVynVww6PASJLyrWzcTirR7/UgV9ot+pZvAisQBw4Of7Ln7loTXddneNTkmgCD9h4JzFDwDIsFkERniuCAHAZ6OCc/oGfz0KQTSOrSo3jnlDvRMOlVhUrBZdmJ77RHPpTCj249aB0WFbg0W7xFj0tacO7tpWi9PoniPtq+stc9Hozw9eGrJ5TwbCD1jV5TJpkViAIbArEmufnk9ksjAEMQSO5EYhP5+/8csj3/vsVgLBAyy73aTZUl9yOZvZ83c7N9YX9405rl0deKHffqLbdr5r6M9f2g1uBAdAqUa2usK0e3kFgxN9NtfPjl154XKvMxCOIOyr3bbNFYZ6rVzNMCya3m416zH0/Pne+9fXM0L6yoz39QH7G2PzvRC726TMAjaWTU+EAt5wctofnPCFd1Qa3ugeZQj877ctOTk09nfbVqj08qls5j6TmmZwGEEfWlq1vMr06R1Ldq+pkTDUwNT8T750zw//fufmZRUuOT2b5f5tW8MPH930mbuWmLTSay7PZ1Y1uHyRf/vkpp/9w72uSHzGG1y2pe7vtjfdu6b22w9vum9VzbqGkqpiTbsvhIfij66rc0XiBy/1m5eUVMkEvkRyKhA53z0eYgQWBnx7x5p4LBVPZ/f7g4vFRJ1ceWZi9j9P9oQTqeMj9meuDnmiSRUOnz3Vu6zZkpnxrmgo9gWiv3ujbdYWqLEWjcej//TQOp1M/PyFbqlGAU274/6wSitsD8dLBchjjcXrSjS1enW1SiFAsCSbTWXTDEY5/ZEt33tuxhNcX20+9E+PNZg1HAAc4JBcmeH8WnQHd/D+cYcPvIlCJsDeQAR4JsDlmQCfMogkcIqiEHghZZDBpLcuat62bmNtTZ1ALD7WO717Zb1MJDjVMdpcom2Z85dqZD22+foi5ds34f3iNrXJ0qkULxFYixTff+7Mfcurep3uhlLth8QHePDrFIGhT75wtnPc8fDOxkdXNBRr5X1+VyiTUkopxJ+4YveUfVSJht6nRAAAwDBMKpXZ7bZsluX4+tMcByNwnhLwNQrylCCbzZIkwXEsDMGJZMrldplMZoVE3DbrWWRQbqkrealr6GzL8D0rq0UMyd/iNhIBj/ew+t/kNdQxMuuxe78770Ni4J/vqlHJiSqpCgBQJBOd7ZvkyxEoKWbQ71FQdOHnQLf8vEu8o9fQpDt0qGvyrjrjtDtQJBP+b6dBIVHJt01JMkMBt5xkIABKFeI3hmeschGGQHwgQZNFe6htyJ1INuUczW+KLeZuSdORN6ryJwvnG39QaO2hEMTgmIQirk3PoQTa1jly1RtfXaYQ4wQ/pjAEYTAylwjrReLfHLxSW6IV0ASfQjQUT/piCTGOPfXKJV2lfle1Wc6QLcM2AkUbLdoFUxKG+Sw3mVzKHQAABzgoZy7wKWXUFCMSQAd6beUKMU8JEAiicIwWMd95+ewhOI2Oe77+8FoAQDKb5gBIs1mAcFuaKggc23umm2DIUyOzS8xqg0SQuwnonnVNzvkUIrpIIjx9bfSzu5YDALyJmIJi3jLLIQcAjaFWhfh37SOfOtOVzLAPVGgerS9JosmlJn29Vf/Ma60Ujpt1EqtG9ptTHXlKIKPJfV0jv9178csPrtm5vHJDc9ldK6v/Zsfiz9+7cnW9JUshjy2qrFJLN1i1jnnfNzc1ryvThIKBh3LpQflb5/lJ/pgDgESRZUY1iaHnx+ZCmYRZLOYAMKok25dWrKgzn7sy8uzhq1PR2Nq64o5geCqVMtNsvUw37Ap8vLl8Phzbc6HbafdtXV45G4iUKCX4jXyAp2gZNgvDCJtLRZVP9ZNmWQSCMBhmc8pSluW80cS3711drZO+3DbYOuvaWqzdWGbgIjEIhh0cCM0HrvRPf37HcilB7TvXs2Vt5ZbmMq+GqRaKHP22oXEXnOXK9EoBgWlETLlalmFZZyg6H45xHCckF0ILAADH24aFNLG81oQgaOfU3EqLLpjJaoTUg4vKDCrJhsaSv7tn2aIqRbVSIhdQ9y6uuGkQ8zM/w2VNcunSUv1jq+rWV1lCiVTH1OwrnkSn0/vt1qHpSQ/D0DieGXV6LrdPrF9VtcisebC+5K4Ko1EseKVrIpTKTnojFydcVyZ8F6bmPNGEXsJM+UK/Ot5x/5pqdzDSOjQ9qZVBgFupFgGWS7JZhIONUjE/kkKa/NZvj/WMO3/5tftJIfXMtFPBcWoh9X82LJYIKCFNJlhWRBNPbF4EOK653GBQSZ4/1SlfVfHfO5dgIqxWqaJQTCKkzFqZ1ah8qXcy7g9GOPZs71RKL/lkfWm1XlKvVfmCsRcudBskyKMrmnbUFEME/qU3rgW84flY5LW+aUcwdl9TUTIMfMFkMJyadke6Rl3uSQeplWViyb4Rx/Jmq1Gheu7g1e5A4JHNzbFE6k9nOt0MrYGBrkhmd/jHJIL/3FZzX51RTTHVMq2KEnAcYAELQYBGySujs7851Q7D0NNP7Pz2A+tENMGPAAIWZhEoGI47uIP3jzt8AAAAJicnjxw+fO78Ob/Px+Z4AL90c9zNTICPEGAYmiJJFEFoiigusW7YuGnpshUxAlMIBDRJm5TScwM2AEHpNPvssXZtkeJpuyeGwDAKaWlaTr1tdcb3ibezYsUkVigR+MMxsYCyB8JGieSjkQha+6fvWVm9xGqYT4Wd8YiZERoFUhXFGOUiNpn6CGsRvF+JAADACAQu13wqleA9xwopAQc4CIIWypZxHIFjWZbNZrMsy9I0xbEcBMG26SmhUjsbitEEUaaWNpi0Pzp1tbfHlvca+jAkAgAAgSEvnu5iOe7V8719E85P3bW0zxcMRcM/37VaTQvzLj035hqKqigmb16/h5vmcavX0Moyw5lxu4whp9yhf3ipZcjheWhlhSca/cTqukNtQ+8y11CeBrxdI3lKoCAZ3mXlxe5xPpCApwQq8ZuBBPz1NIFFE6mf7bt4z+qa22TvLrwLVPBu5s9DuT1p/gIUhi0K8WKztm3cXqQUL9aqoiDJhzvz8Cbj2UTmlXN9pztGPraxkTcoPZF4NJXGOOiZQ63SEs2nFldQGPqHs51VRYoqgyp/X/5eGAzzkcSFcQVsrho6AEBJMSIBfKhvBkCQTsScm3HtmXS8Mee1IXi107t1bS2JwCIaxxEMgWAcQVmO4wBnUElri7X/+fKFi97g97YtgXOFkzkALozMjto9ZRpZkVTYPmi7f23dUMBTKVVyALAF9jePvClMokitRjbr9GEst9aoSXApGsPkFEMRWF2J7sVT1y92TTaX6hssmmdOdRAoapCLURguU0ieOXRlybKyR1bXWTQypZhhSDzLcfZ0OBXndtWWVKolsVRKQBD31Ji9oWgonliTq3hdGFxbaJFDuTNFIqZMIT42ONs6My8ToUqKznKcQS1dUVd8PpS5Pjh6eXB6Z6VpqUUmwPAJd4RAkHUlOq2ImbZ5CAINoiCWzCgElJQhYQhiwUIZEj6qOMNm0yxEIDA/FjxXZHMaBd+qhZMsNx+JVWnlepnQrJYeH3X0DE09d64rFk/ubC5bXVz03MishSQYEp9y+a+O2h/b1DCWSa5TK1UqwaMra0UU3tI39S+/PuoKRDAEKVJJxCShFQtQGHKGotdnXfFUJgvAdCj6+8NXNjdazTrpXCBGoIiIxE+OzFZrZEUShuUABwEYhmJc6nLv1F2NZdaCXMyFyw5fOTH/LyFFYEL4+a7ZX+xYfE+pPmGff93lueYKff/yyOmXLmoWmUs0sjXFRWoRzeBYpVp6+Or4v25s/Piiss8tq1pmVCVZ7heX+kc84b0tk2POcF8kNp2KDCa43eXaYjGVyqQvOOZ6xuZgDMsCVkoTw25/75jju8+eAAA8uLnpT4758bDX44o+3GApk0sBABwHfnemY0u9td6swVHkpdNd43ZPNJ158v4VQoKcivglMN3t8Jwcmjo1MnNufPbKjGe+f+Za1+QTu1e6CLxaTl93eE4MO67MeXsGpuOx9GCGOzvhfLFvIjof++r2ihKZ1B6MlcqoR2qr7q0z/82y8rsq9SAUee3gJRxDE+4wU6lTSZlfnB3rnQ8lBExzs/lK90TrwFRaIf3skgqIJiAB7STJhnhk1+LyWpXaKJKmsuksxwIASATvGJ979uz1iXnfvYsrv3HPKotKmutp3i/hjixwBx8K/tr5wOTk5JEjuTiBPBUAgGVZnglw3MIyiKIIRREUSSIITFMURRLFJdZVK1dv3b6jrLxcLBbDEKSimNGgV0kJAAAkQfzXsa7DXZMBnDzSPWUUYJ9qNC1SCt2BuOWtAt0+KLwbiQCF4bOd47VmzbUpx0cjEciEdPugbVNzeTidLJcoSRTneQuDYx9xLYL3LxEAAFRqrc02DS1MEy6RTKEIAiNwNpPNUwI+2JynBDAMp9NpnhIkkynH9ERjufWyzVOtU1QWKW7vNfQBSgS/eq2ltW/qkU0NT9y1VCtm7inWeqIJEkXNMmF+/37Buehy77pqywdbjuAmr6GjLQOLinW/6xrbc2lsZnD8S/cvPxMIUQxeIhGuKTP88vi1t6ME3JuH74qoeBIxJcmAnBf7SwWU4NZAgtb+6UOX+h2ekEUr06skb/nJt04wCIBsTkzg/wUXxI/yV2IIsq7KfPRK/zV3cJO1aC4RVZA0ACDLct2zczan/+FNjRN2r0oq1ClEEADz4SiOIKlE+vdH2yiT6qtr6gAAfz7Xta7GYlFJoZxrfrYgsxZvZWa4hZXsphyUvOPQkQH7Yyc79o3M+ke8xTTxxaWW9WXmrvHZEMspGVpKkzzHSLNZHMEybIYhiTgC9UzMacSMVSXhCUY6y3bPus93j+1eVuXyhm3zgR3LK/mqWLzTVCYX0gButMgBAAIc21VlKpEKrzs8zTplkUA4HPDISZoh8XWNVhJH95/raSrVN1g0e1v7zw9M1RnV0/P+9uHZbz2y/optjsQxMYkDAGAIGvMGhBihkwpgCLpicxklAqNEuK+136qR1xhU/O14Ax3khibfVwCADMfxDjwEiqwya2gMPT8+H8jELWIRy3E/ONtfo6Au9U9k7eGeEfvpYZtZK702491calALaQSCjl0ZrC3WLi01dNtdkUymVCnFEJjLKQMcANFMkkAJPstnFoAMxwEOIDDEFRQo4HJTZS4YxVFEI2IAAO5oIpPNfnlD08oyw7/vO5fMZI1iwenj1x/Z3OSFoT8P2ToyKWOZtkZCNyvVgWTcl07QYmJLY+mndi6OJ9NnO8cvdE8k0mlrkUKAY2oRU66UhrPZjinnNwZH2w9ce/KLO3zRdK/dU6aSyhjyJxd7/nF1LQQgBIIgAEEAcieiP3z54pOf2MIBkJ/phZMpv1zkcXHKKSKIx+qtJgmzq7H0qytq7ivTb5YJ/nj46rRWysmxuDMYiiasGtmLrQMXRpz/87E1MpoAAEhp4s/towNZLo2iq6yqgXTUQBNGEZkU4b5EajoS7ZgPXpsP2GeDY/5467R7X+/k6RH7r873oCyXTWV7SahESl93RZzOwLpSNY3C3nj88rDtt6c719VaimSCCXfgG7843DI0+5WPrckg3IGRUcd89JW+yXNj9i5XcNATuj7nnwnFsnbfiq1NPd6Qbc53dM7v80VNUiqUjNpn/d96ZM1/7Vy5s8JYKhd5EtGlBp0tGGlUyh6sK5fQBAfAwYt9//abY88ebMFQREgRn75v2RKL8mrPmH/ej2MZ4YbylQK6rW/KXFHcqJf7E6kEhCiExDe2ljli+MWLgzuWlhP4QoXEa6OOf3rhxPi8f/eSyo+vqdfLxfn17aYF5w7u4APHXy8fyDGB8z6fn5cAeLAsy+cP5ZkAgiAwDNE0SVMkSRAIglgs5rVrN2zbtqOsrPzWcsLz8ZgQQzEY1cuErYMTj66qvGexyTnhWFupn/ZF7qkqiadSCAQL3sXe53vDbSSCV3omSpViOUMZVJK2/mmaxD8yiUCvkrx+ZUgqpKqLNLylm2/nR16ueEEiqJDJ2u1uAkE0QjoST/30wOW1TaXXbHONOUsikU2l2QyBvIWYg2GY0WianbHxyWZRBMlTAj7XEAc4FEXy+acgCOIpQTbLYhiaTiaioYDFbLk861tkUJoVko8msHh9k/VC9+S6RqtOIQIAUBjaoJUf6p+q0kiFBJHfv89XKNPLxSqKGfjgKMENXkN90wmW++m0KxwJrt7WhGHQFqOsXi73RWJqAX1r+tH8Ewq9OxqQhzIXSAAAIFEER+BjwzNLDZoUm0JhpNaoPtk94UsltSLmqdcuj0y5dq2uWVNvOXltpLZYS+We05texjcNAQcADACXO+ABF0QY82cYArOoJIdauylGEI4nYYINRZK/OtRydcT2uR3LStQKpZRp7ZtqrjTCEDTrD4soIhFPPft6m9SqfbjeSmHor060P7C8WiVmAAAsxyEQhEBvYmHzns93yXFZjoNyGgLfAAVFqyWQJA+sAAAgAElEQVS4zeE3k/iDjZb7m/TNKqVWwjQYdcc6RvyZjDcS00kEKS6DwxgMQQgEp9mMgCT39E14p+bXVploEgcAhOKpAaf3xPWRr9y1vGvELhZQSyoNhSWW4YL23MQHeKgEVKlcvL930iIT6gTCsaCXZ0cGlaS2RPvMwVYBSaypMYkpYl9rv98flUkF9aVF7bGoze6BIUhKkygMD8/5TTKRjCZhCDo2NLXUqBGS+M+OXtm9rEotFuRvueC6w3G8cgLn3KhAge8QC4BCQFWqJMcGZy9NzzvCUXswHtaKRrrGvvbguiWN5qMnem1eX080s6m8yCARBuPJ7z135jM7l9AMkc6yzUbNTCAMQxCNL1Rzy3AcBFgCQfnIAZbjUAhCYKiwN1gAOA5AEJRhuVl/WEyTvH35xvBMo1650lrkDcdIHPnE2oZfvH61/frEo1ubN9VYSmSiA93TViGuE9NmiVhG0BpaoKaY6UgwlE6tsJqW1xmTmcyfj7U/+fzZeX84lckqJYLv9E+MhSIPCMWhaEKgZIbnA9PeYIlK2u30pbPZlRZt3ugc8LvGJ3wKIb2m0pxPXskCDiw8g1DyRnEAAJBluZMj9hVGtV4sALlHQ0hgUw7f0atDP3t0w9/UlwlRtGdq/nuvXWgbc5QXqeKJhJyhwvHUob7JV/om/2dj426Tqnto+gdbFi8rVZ081jU3OPevW5d+rrmiiGEUCXZbteXxReXNRYodFcYqAf3ivkvyWnNCJ0uFE1wqk0lk0ll2PhE7PWX/8dnB7r4Jv0Q46oscHpo5NGoP6BVgzt8G2AlfeDyTGU1kVhlkS4rlH19U2lAk22guOtE18cntzQNTgW9ubnqoocQFgR0mzZmJmWs9HgUJvrt7g0EqFOBYuVJi0Qif6xirkIp2Vln6Jpxf/9WRx/79uZdOd006fQBACquyokR7rnV42ud3RFO+dFK3pfleifDo5X5WrahRi9eXG+IAPNCkf7SxZIlGvb606Jku+8G20RK1xOEN/cvzp3589EqW5Z5+4q5KvTK/xHG5BYe9xYPxDu7gA8RfIx+4gQkURAznmQD/ACIIQhAYTZE4jpEkQZJEcYl144aNy5avvJUG5FEoEQQz8Z4xxxNrGotVkn3Hr0cYsk4rVwloZ/AGv5QPHG8pEaiEdPecL51aSDREYOiHLREUGnAAACFFvHF1eFVdsSe5YDf8pcoVkzi6SK8bCnqUGPmdY20KEv/un09d653+/bzXI6dXa+QMBmW4LIngBIK/nUTA1ym7iRJksyyCwDAMZ7NsnhLAMAQAIEmCP85m2Ww263G5tSbLXCxNE8RHFlgsoAiDSvJG29DahtuVIwC3VCj7oPjADbco0f7iQAvtD5stim+sqHiorLhYJFJQhEpAj7r9VrXswtA0TWD63Ez4X3GAm1BICdRCun3WjaMLscUiiorB8I+OdV9I+R+vsn58S5NBJdGrJDXF2l++erm2eKFuMT+ZC819KEcACgHfOC7QjYkmAQBaibB1bOaVCXezRPifLb3X20bXNlgam4uUJIMicJFMcqF3QkQRCqmwe8ZVoZXbXYE9JzqkVu09VSYUgD+e7fzMxmbeWwa9xcjmWQGc+41AEJv7F29MAABkJFWtF9ap5KPewBKdWkQQCASTONpo0rza2r+4WDc079NJGRrF+U9DYURAImdG7Et0ijcuD1SZVCKG9ETj3TbX9dHZ7Q2lfeNOtVRQV6JzxaN5PsD/hnK+TPmACrigzTiKWOWil3smcRgulUlHQz5vIqYgaT6K40cvnn31XG99sRZk2T+d7Fy/tLwzEilV0PdWlLAcN+0LeaPxjpn5TeVmFIIgAF4fnN5dWwJD0E+Ptn7rvjX8HfnsnxC0sGEPQRCcU1SgnJd/luNYjuOzmtIYutKkEeDo8UHHthqtJp6J++LnfYlBV0yoU5tKVDaWO9Iz2ZnJHLjaM9Jji1UqPPFkrU5plYlkNNk75+22uzkclRE4DEHJbAaFEQyGuQLikScD+ckMQxALuJ5ZV7VWjqEIBMBvrgw9XF/C4Ojelr6mYt36+hKjWBCJp17oGOQ4TkgSw9Oejy8ps4Viz3WMuSIJDIbVQkpJ0gqSHgx4gqlkBmJ/d+DKtz+1pcaqPdg6+K1njyvTaROFv3Ks42v3r9pSXyzEiUyWG/b4jw3N4DDQiwQKAcU3zJ2IHrs2uqLUaNXI8tMeAQvSAQAgw2URGOZAfqjBWMi3p23sH1fXgRvn/zd/83qIgFZUmXdUWYpV0hXlhsdW1W2uKRZR+JjT84sTV/9woesXHaOJGaeYwLls9vVrQ9vqrSVFklQaGotn5yfmNBKmUa9OJTNry40CHFMKKClFOFwBGEX+/cE160yakz2zi63q9rnAz+9a/lhtWSyUHpuaXFtq/lxzxSNNpcUkkfTHzrTbUg7Xzx5du7nJJE1Cn1tU6WIhq1RKIkBM4fF4pt3meqipvMfm+Y97l2oEVDFDHJt3htyph2uNPVPzy2p0cZARY8TVOcf+7qmu4flyIf1ffzz5q1dbOv1+iibSkSQHAI4hS6pMnT1TGp2o1mrsnHVVrqqbS2dHR+Z8BLarQsMiSDCV+eLqCq2INgqEAowSkkSpgjpwfeypUwP7L3ZkWbZar9zzxd16mSjfh3kyABUsPndwBx8G/rr4wNszgYWaYvxazWcNYhiKzxlaXlG+atWardt2lJWVi95FHTF3Ijofj/mTiWVG/fdfvfDEhiaTWto+PFutkbU7vVsrTb5oAv4wJYK35APQRysRcAUGHH9cpBSfvT5G4OgiU9FfViJ48XI/jKIz/siXf3qw1RNsvTpUur6utNlqjIe/uaJ+2h2oK1LnC/TexmuIpwRTkxPhcBTDUBRBMpnsTZQAhmGO42lAFgAAwzAMQzAEIwjscsyaDYaLNvdaq/5/KxHweA/GcZFSfK7zhqyaFqWkf85H4ohOxHwEXkOFt9hQX3yhfWhLVfGFKdfOKjNvM6EwDMNw18z8huri19oGea+h9/BNb0IhJShViI+MzHIo7IjE/9g39YcBW4lR8vflJb5kslKzUDKcJrDaYu0vD7TUFGsoAiuczIXg39B5nlB4Td4svokSNBVrfv/apT+9dJkKp3dub1RrGQAjCAzPJ6L+ZGJZifFY+5BUTE/5wqUq6aTDu/dMl9Sq3VKmj8eTh9qHv7BjKW9Wvl2f5O8OAQDlKAH/DPIORTKCCqTji4rUr/ZNVygkJIbyG9uLirW/P9O5ssww4vLpJELeRAYATPki477QY0sqHvvOc6OzHrNGatHIXu8ei8WSqytML5/u2rm8Uq+U3MQH+AM2R4rgHDXicqY5BACJvlnDeJFObRSJhwIeJUnTBLao3PB66+DeM117T3fb5/xn2PTjDZbtZhOOICKSkNHk+bEZezCiFtJKAW0LhDvtnvVWff+Mq3PS+eDyajjnoI9CEMtxKfbN/ue7Ls2yUD71UC7ugr9AJaCWm1Q/ONX9+uWeFfXm5LxHCmX/4Z7GDeU6GcYVkxAx5z1zamBiynVXpYVBsK3lxizHkSiCoPCZQKjH6w/7w2oBhSEQgSwkqmJz/Z8fGi4/QBwXTaVt3nCVTsFynCMUuzg590BdMQJB33v1wue3LBbT5Gvne1fUmH71uV2pdLZ1dDYDuMXlii3Fpofrrcks22F3d9g9qSyrlwhkOKWiGDgDvXi2+2N3N5Fi4ZSYevL+FTDCHTjW1dI54Y/EVFJxr8u/rdpcoZbtuT727S2LIsnUNdtcIp2JsZn+WdfTR6799JPb3pxFN27uZLksBqNQwfJzeXpeSpKLDCruRj7wjz9/7V8/vW1Xg5UpeNkJKaJCK1tVYXx0VR2KYywC//LRTSUqyW9PXe+3e8ZCvhNXx2KpzOKSokqD7Jf7L71yoVctEZAUphIxAzOuNzpH953u+uTmpiWlRTqJ4EDXCCsXJaOJNUbN8V7bnqsT7tl5j8/X2jG559i1i13j3YMzQZuTxNBnvrEbwACHUSVN1SokvYHIWDAuTEPf/N1hv4A2CAgaRmAYNsiEs5HAf+67cn+FQcNQRztH1pWbQIp7+kJ7l8d35dII6gkfudDnoyCTSbmqwjQ2ZE8kM19+cLVeJRmenNObJAFf4uz4jMCgDcsEmC9SXqbbViJDYfTeWtP2Sg0CceUSBY0SyWy6dXTmJ4db24Ym0jBp0Ch//8S2r9+zUkwtZCAsXGre/wJ4B3fwjvhr4QPhcPjll/eev5UJLFQX5qBcrDCGogIBTVKEyWxau3bDzp13lZdX3EYQuBVKShBMxsokChSBnYFwLJm2amQQxx2/MjSHwdVqqVJAfagSwduZsLxEgHBcuVoGACAw9JVzPSaF5MWW3q1LSz9YPnDT+sX/SWDoibbh1fUlf1mJ4Ncnrn37UHf3pAfIJA06ddSieKxa93iTsUmrefn4dZlSopcK+GKfPN4usBjwdcqMZqfDFonECikBx7IoimazLIAADMM4hrJ85DEA6XQGw1AYgtlMena4/3CIaNTKVpYb3lEiSGbTOPLma/XtvuA74qasmhgClynF+7snPhqvobxEkMimCAIp16leOHHdR2FKMV4sW6AoAgILJVIMgckF1AdVtBjkAgkgAHAUKVeIf9wxes7mvqdE/Xi9vkwsPtY2JKQJOUNK6IVETxSB1RRrnn71ck3xm3WL8xZSIbgbTxaaUPzJQkqAIGD3oqp2p+uLu1bsqC0ZdvoZASbBiVKxTMeIpuNBjER/fqhFo5BKpILpGc9rF/tlVu2aYm0oFD3XP/W3m5qhtynFnUf+7rxPEQdBaIE5DgBQ0cxcItykUe3tGa9QSkgUAQDQONZo1j577vrKcv2A06cRC2AYgiGofdadSKTtdo+YIj65bdGlnsmXz/eoFWK5kGoya58/3vGl+1dTBOaKR5UUU9gqXsQonKhwTr7gPXZi2awYxxbrlQSKnBy1l8pFBqFoMOBRkLSYIR/d3CSSCA5f7E2nsxsais8OzPmCwUqdgiYwFIZpAhua93MsJ6GIbqdHRlPVatn5gSkRTSwvM4ACPyUYghAY4nsD4pP55Dyp8u0pdOPhAMBRRMBmf3f6ekQo/NiK8hKDvG/CYZHLft069s8blxQrZeOhgM8dmXcHKAEuIXGZmBr0h2biCQONPlxsYHAslEj64wkEgmkcy3Acxy0kGwW5ruAbwAd72AMRAkXUIgYA0DHrFhBYU5HC4Qsd6hj++y2LWQ58/8+nvnD/SglDlahlG2ssFqXg5ba+qblAJJ5aV24oEtIUigy4Aj+73BeMpxAY7hiynewYixhVQiG5USvKQMAkE+mUolA08aUHVl8fc7x0oTcUSWIEtr9/aqlcXG9SV2sVGcBemZn9zqWhJUrJ1rqSVJbFc9Uz89M+XuAsxJ8Z8LvPD89vKzeoBRQo2MM+3jYEIEink60q1YO3AgfAFbv3k4vLF5s1c4GI3R/6zMame5aX/5+711YXKRUiqnfW3u30skKi8/rktw9ffPZc59H24d+c6VCi+Ipas1Iq/I8jVw+02wYhVhbKXBqb1wuQtr7hbQ2lD62oX7O8ZP3y0iVWYyqb6R13Vq6pV8nJTDgrJvCLkw4pjsX8Ybc7+PD+C3AsE8+C9ov9jVbVcz1j7pT38y9e9Y3bj14b2n+lPxCJn+mf6uiatAtQi1m+u6Lk6w+u1Zdpy4oUKMe1t0/cv7FOQOAJlr17be2nH1pKC4QHO0ewJAgrhUgsvaiiCITjRin18WarVsyUimUSgiARvHXM9uyZrvYJx7JSvT+aqNMJX/3yfZVFivwyUkjA3sMifwd38B7wV8EHJicnXnjhBadzjg8L4E8uaALsm0yAoUmKInAcKysv27Bh0/Lb+gXdHvPxCO8yhCLwuf6pddUWa5Hie386+ek1tZPR+DKj+i8lEUgo/PiwbUOZAQBgUEn+cLTttwdbzXJxc7E+imU+WEqQR94gWChX/JeWCNQSQdvA6JOPrntodfEjzWVKATbvj95dZrSqFZf7piwKsSeWLCtIrHEbiQAAgGG40WThKUEmkyFJIpPJcgAUUgKOA7zXEARBCIKwLJtKpQkcRxDYHLH3Z+kKrXJHU9n+nuGbco/mKUEim6JR8gORCG4tR/DRew2F0lEGpVAYKVKKrwzOrDJreuaDfIUy/hvJGMrmD5WqZReHpmkCe5/kkEdeIoAAwFFkkVraO+Nu1shhLLNcp2swql5t6Y9ynEUuJrGFTqYIjHccKqQE4Eb5C+Jd0m8Zi0I7GOQoAQdAlsvKBMzdiyt+d77rUMfwhppiRyCiFjGRdFJBMiqKschlb1wb3Y+wjljqja4JkYSJwtA9Feb+Gdd8IPKxVbXvaCLwF7D5gri55uX36TkA5CQ9Ews2aVQv906UK8Q8JaBwbJFFt+di99Liou5Zt0EqhGDo5OisgcDbB2yPb2natKhsbUNJimWfOd72iTX1Mpo8fLn/0c1NPB9QFfCBQgu7sCu4gpbwDv0cH06gEO/rnURhqEwmHQv53InYVDB5JB7zh1ivbY6Npf7rE+sNCuGBa0ONZi2BoWNBL8oiS8za9pn5i5Nz91ZbJBRxsndcIxbWGtUgZ+7zDci7gQIIwmD4TZ6QG5Qky+UbwycDLdPKX2rp+8rGJk8WzEaTAhz+we9PFQF4eaVxVZX5y9/fH8IhMcNYjOrDlwcOXB44H4g8ZNXTJKylhVKKZAiExohpX3g2EIYhWETiXM5liyv4QSEoy4GLozNGhURKEQgEnRlzVCilRongdO+kiCaWlRmmXYGjLQNfuG9lvjNlAsJqVChJ5trY7L+8cCqWTGlE9HKL9vHmsngm2z7r+X3PRDeb/VxD6Saz1iAQcoBLgOxrp3s3r6rc0lxSZdbQYlqnFD/T0j90pudK/3Qkmowmklat4qnO/tGro1+7a2UolRpzB8Y9gVg6nUhnMQTGEYRbEAcWqnrzr9KeOW84kbm70pQfYv6/vz/atqLOLBPRpZqbX6P8Zb1O72wgurPSBAB49sz1u5rLS0sUS3V6GIJUIkYno5dYjCKJ4GtblpXrFYG5oBLDF1uLnJOeT2xrHvb4v/78CUcoVMQQM15/bG7O5XZf6J8IRxNplu2cnjvVPXl5YKbDO2cbczuQrEYp77JNdY7Ovd452jblOHF99ELfZMfsPOqOTmoEApIMBYKXzw8mIwlOIYbdgXsby/Foxm3zcgIMeJMbd9RjapnAHpJIRQ5v6O7aEjzL/fFAy7w/YneHvvDI2tUNJW0B/6udU/1jsxVGzYjLC8ukyyuKRCz3icX6LaUGHEE0NMUB0Dvj/vXJa8N2n1YqVAiZIbvna3ev+Od7VvI5YfnOYQvWlju4g48M/4/zgcnJycOHD50/fz4RT3AAAI5j+R92wbGWZwIURdAUyQsCO3beVV5eIX4XfkG3gZISDPjnlZTAIBef61/Y7faFYmIh7YwlpAz5F5QIPJF4Mp3ViRkAAIeibYO2+9bXTgSDUjVpFcnf6sM+GPBL2/8NEoFFJfWEorVGVaVWkYEzSzSK4fmQAMe1IqaxVP/8ieuUlJHThCRnlIPbSgQgRwkcdlsymbqJEsAwzLIcgAAEID54AIZhGIYRBOaLlMUTyZJiy+lp732NpcUq6VPnOwpzjwIAAqkEjSIUSoC3CizOO4jfhNu/SAy31OL9iL2GCATPs47F5fr9Z3uqjar9fRObygy8JwkKwzKGahmbXVFm2H9loNGseTfpR98RhZSAwVEFhV+adm4tMSS5tIxiGi3aV1v6CouUAQBoAqsp1j796uUai5YmMd4GurV7Cy2hvLUEAcBxHJvz7eFd2WPZDIVgNIHpVdLfdI1Pzs7XGpVTrqhcSAUyCQVJQxAkETGz3dOfby7fUFn0vXFHairQPj5/st8mIaBPrm245eY3g9995x1j8i3JGxkgF++ropjpaKBBrdjbM1GmEJMYCgFAYGiFXv7rUx3Lrfo+p4fA0Kcu9uoIPBlNfHLrohSbSbHZPa0DfTbXzLQnEkl0jTmW1ZiCaKpGtpAFlUehOQ4KzMf8KZ4w5CkKhSJWuejEqP2q3aOkmZ/1TB8dtTPu2NZSFQ5B//rxDe39NpNSKqHxA22Dapnw/Khjc4XRKBV548lz43bAsmqG+sO5zu0NpXq5KN8AluPSHMeb/lAuGSsvXHAF+gBfORjOZW3CYPiNrjGZgPzbDU3LTWq5gDw145jHqbVVRVd7ptz+cEvf9Kd2LI0Q+LQvqCzR0BY1NeV+at/FTDyDInCRUpJiMwxOKIQ0BsOzwbAnEicQhCEwuOAr8/3DArDP7rLKCU8iJkSJn1zo4XNJHWgbrDdryrTyc51jYoZcWWvh+y2eSZIo4UpEF+t1qypMT6xviqUyl4dsHROOZDqzvtxYJKQrZOKLnbNTyXj7rMcfT4kIYt4e/PVrrT/67HZnIj7k9BvUwjVW/U9Od/7Hw2ue+tIuVzh2cWD6m785GvYENBJRpVxaoZVXaOVmmTgST8YzmQGnd8oXDCWT6QwAAPCVxSEAMiz7+uDMuhKdUkDlq14AAFr7pi73Tyv08g2VJkGBux1UMBVf6Z1cZdGqhdTVkZmROe9jq+r8qThPKTkAMlwmnmYpDK0qUpQblI9uaqowqA6e7702YHvjv/92SameFlJrysznPIGn71255+93GRXidCb7rd1rvrRt6TfvXb263LjIqDl6vPfrn1r/0PLKrYuL/3Hd0r/b0LyqwsTC0IZKM4QgZ073Cq26KqkIQWAKkLiA8hPk4LgfD8X7h+yf3rX8oY314x4/Vmksr1R/pb5CLxT0DM8oaerHL55rG5qy+yLhWKp4U+1kJDEY8WswvKVzrMKoPt03GZdqjAo6Hol/Z1sjzWEIDopowdVhx/4rg6FoakNVsVYqvDpqBxD4p12ryrRyUCAIcHeChu/gL4T/Z/lAOBx6ee9L586f8/v9vCTALiSH5NNBIgSB0TSF4xhNkZUVVRs2blq2bMV7FgRuhTsR5SUCAkOPd42tq7agMHyqY3RxsXY4GPkLSgQwBJ0YtMEQ9FL72C9bRitlZGNt0Uw0VKlWF0ul4MNB3ij5iCWC/H1vAoGhJ7rHt9ZZ/amElhHhCHLV5lpkUNIExpD480fbIBHVbFLnr7+9RAAAwDBcJpPPz9lTqUwmk+EXd56C8gSA5VgIQAgCF1ICFEEhABxjQ4cjVJNWtqHa8h/7z81MuNc0FJtzm2rOeMSfSt4msBjc+K6F3ur73oq/rNcQuDGQYEmF4VeHrrQGIyYlVSqX8u1HYVhEERNu/4Zqy+9PX3+XFQneEYWUIJCNDzpDYpI0icXJbEpMUQyB7b3Yk4Shap0i70BPExiOoS+e6lxVX4JAb9u9N022hYGAoMIQZAAAx2URCIEhSCdmwqn0ugrjmf7xiRkPjhPFEok7HfUmYrVa1aWBKRmJf+WpQ0KV+PnHN2yvMZ0812nU/f/svXd4G9edNnqmYQaD3isBAmDvpESJ6r3Ykptc4m4nsTfxxptsNjf1S7Jpm6zTN9dx4tiJ4yYX2Sq2bPVCURQpFrH3BgIkiN47MDP3jxERWMX2OraSz1fvw4cP6uDMOWfO/N7z/or09hWV+Xb25WCN3UtscWgxr84iNwEQABTDqEmeIxEulPEODNmL5SK2qBYMgyWF2qePd9ebtScmbCennW6r678e3solODAEZxm6z+5u7p/6j1tWHWobaembXlJeYDRI84MHrphTCFpMkMLiEsIAACBQZIlOzkWRJ3umbDO+b64oNwrhgeH5G5eX3ry6utai2XOqf9zuWVVZuLdrdCYYaSrUyPgkn4N1zrlXFmo7Zhfebh/5122NQi6epml4Mdk/BsPsDzHgYtwC++BSxrL4mPXs2t8xUqaVl+sUAABPOlIlU7zSO5VFkFWl2h8/c3huIRBXq7fXGvByfcrhe3x5xaPblmxZW4ID5EzvdEv/tFxEaqViCAI8HGPrAMwFI95YAgIQ773TOJrMuB3ewVjGLBCetdulBHeJXpGlmW++fOyJ+7YAAA6eGy7Wy8sXl6N4NjkZDlZLLqZBYwCwqKTrKgpxFGmfnP/Gy0eT6ayYJEadwR/taPzy2uoURe/rnfr50e5GjXT78hJfJDs6719fZNw3NPlWr/U7dyyDIHgonrinqUyg5p7otX3zplXzrtAf9p1743S/NxSLxVMSLl5rVOlEfByBOm3uGV+obcYx4w8ns9kQlXyqZeSRZeVcFIXyjNqn9p9rKNOrJIL6vFU0H/0LPkc4vqPcAAHwzPHuLbWWJCdbLlEAACAAUlSagDkT7kCBRJijE1q5UMAjMBS5ZU1VIJ7K0oyQTxaI+Q80lvqjiaO9kz+9Z/OKkgI2+5ZSxPMGohAE/mX7cpGUqFDIZCRJASDlcUvVstMzjueH7U4IeqDcMDtsG++c8NhdOIGVNqi+f8PS0874fJoJZSmZFE8C6KEbqv+tstwgFOpk/P/cfaz5/AQDMb0TC+aNdRy9fGelplTFJWjk/JDtxiWlr53pj8ullFq4ksu7udJ4rHe2qUR5fsD24zeatWLh5kpzrVHtDsZax2y3NJbet7qG5PxtMtCAgcDflovruI5rjE8nHwiHw88++4zDscA+XUwcdJEJsByA5BJms2n9ho037rippKRUIBR9GCvqw+NyiWBFubF9wMpgyIlZ1wNLSxAYdoSiGtHHY11djquZsHI+d2//VKfdV10ofnRTEUGgQ8POao26c9Kh1Qs/IZchFmwPX0uJAFyFD+QGpVanHgy483OPGlWSY90TOr3sfyURAAB4fIHL5aLpTDqdBQAwAOAcLEtR7F0ynxIAACiKQlEUhiEUQTkYqvdbD3gZfyg+m8JQPGuf85VWKL3phDsZq5IoP4nA4vfxGtpcoqfy8otzOdi7vZPVBhWJY/5URE58PKJWvmMSiWMSEn/55dP9WbqpWJ5zQ+fhWDCR5nKPhcwAACAASURBVOEcmeDjDyQYCXosQlGVWn50fK5ILuJzOCkqbVbKLswsFCsk86FogVSYowQsj+VyEL1CfDVrHFqkBCBn+r+XsLHWcIamcARl3VTqdYpTs461Zn2DQd0yODPpD20rMWv5gvb5+XFH4PevnJme9+qKtfcvLa03yoqN8myW3lhlzo9OvgRUXqHiy5H/LXrRZJcTpJLL4/Ph/QM2LoaKuQiOcLgcTKMQ/+Td9oBY0G913raspEoj4+IIxdDZLJjxhluHrF+7ZVWRVuYKRNMU1VhtUPH4IO/Er9jCXP6lKxIGFio+d4VWNhEI1WtlUJL63Z6Wu29uMEslOI6tq7eIeNxD7aNFOjmMo+NznpoCFcUwh8Zm720oNYr5z5/pV6olFoWYg8AwBLHDBy12CLNo9F+UDvLeYj9GMQzr6w8g8LN9Z/5lSyNJcBgAAqlEJg0QCP5sY+m7QzaKR0QSGaFaSgg5X6qx7Kot2nN2AEMRHh9dUVS4ssZIEtibzQN9kwuxZNqilTMM4OGYVsRHADTk9g84PAkEVpMEAIBimIVQLMmANQXKIw7vwJTn5srCGJM82j8pJoh15UaaZp7c1/q5HcsEJME2NU6lI5mL6R/yF7cCmWh1meHzGxuiqczhvikGgstVwlKNrEDEw1KZc63DX7i56cyC+/W+2WA8KSKJHx7tjQ/Zyo3a0UxqhVaUBjRMgiPnp3792e2rq0z3bV2yod6SSGUOtg7/fm/r84e6esbnJua8EAWOJJLjgLpVreDjnN+d6eXhnEg84Y0m4plMhqJFBH6sa/wnzx+rrincVl+U2/DKtZNt875B64pClVpAto3bJ92Be1ZV+1P54gDli6XCiXSRUpL7oi8cP9Ay+O0HNmUoyhaMWBSS45Nz68xatYD7xP6z2+uLijVykIdnD57ftrxUpxS4kwk1IYBhaGTBf3Ji7plzQ2+NzdP9s/SCP51M37yldnmtqW/Y7tGJv7+9brXJ8IU1FXGjuFrE7Zhxr1xlqSPEJpmgx+461G/t7p5CBFjf4Pwvv37Lg6tL15dokunUHxZCLe923bumtnnWJVTLv725+qcrqykqu7dzokQjnJzzbig3fve2DcstuizDPHeqx+YNfWn78hKNLL9PmItJnK7jOv5h+HTygQMH9tts9sWaYjQAAEEQHOeQJFfAJ7UadVFx8foNG5cvXyGT/u2a/NgvxcslAhxDnz/UJdHL5DyiXCVxhmMIfOl20ceIq0kEAiH3rw73E6urCviSeqPuJ3899vhtq8cWfAou+bEnGsoB+hASgUUpTidTZ2zurSX6dCr7Pwfb7l5d/UEH/lC4fHCrDapXWwcqDSqTSDwa8qq4vA67Z2mBAgAg4XNfP9zNCIgqrRxFLlqEHygRAABUKo1t1oqiMEsJshQFAAAMYBYpAfsxGIZgGKYoii1HAEMwh4OJ/fZX/aiCS5YZ+CaV5NiZsUc2NqpJPrgssPhyr6Ercp4PxFW9hjDEIBbmjHVvLPn2gL11ZKLILCkTqz9Gr6F8SmBSS+2+8JYS/VmrRy0ncpQgF0hwZtjKJzj6v5sfAgAUBK/TM1smlnMQDoGhxTLRa31TRTIhhkAojNQVqve0DS0xawcdnmLVRZWGYUBNkeaV4z1sUYIr3rfzTf98VnDxCIvWcIamODDKuougCBzMJkY8kXuXlDUUavadHz7SN2lWS63u8N2N5cc7x6zzPmWZ/iurqgU4Z3/HqEYmqC/UwIte75fY3BczaYL3A/tuLrQgZygruaSQDx0bc7Tb3MF4NkbTf7Q6BDLhcP/UnDN4f2NpMpMpkIgIFLP6wxdmFjrG7feuqeoembtjfc3ySuPpnqlKgwrH0Pe39cFi51xewzgfPA7aZFAen5j/aevgfL/1W3ducGZjSi4PhqACpXhJie5Yz+SMP7ymuOBQ7wRKIC0z3mqNzOELX7A6fToJFkvISS4Px5iLdQAu2ltsFEGWYWAIyiwGDNB5b13M/wNB7kDkre6xL2xZymYL9SXjbTOeJqNqvVlLpLLPvtocXFW+rUpXRXIqCsRmsaREK/vz6Qt9U66GQo2QIOQScmNDcYaif7en5devn/GGYiSJ62RCHo4hGNKXSHZ5/B5XAIagdJbumnU2GpQaIa9cxP9tz9TqAmWtQravfWR5sT7Dpae8vlODk5/bvAyBYfZEUot84GpXfZFaemOtpUgpPj859/WXjngi8Vgkebp7/PZ11XUFajqd3tVQ9Juzw0w6m1UID1sXtpl0ZVIJoCF3IkalaHOh1JOMizk4ycWKC+QUzRzrGv+Pz6z9zsObaAbqtbl7Tw30n+ifWvCdGJ4IM0g5SdapZSVKKZWh/3y659Uz/T955khUgBboZKN0Vo1hqWyWphkYgiiaCSdT/lhy1BPqsLlvrSzkIMhfTl5otGgZElRIFGz7U1SagLEJl58VB3Kn+Yvdp7Y2lpQZlSNOv1zAdUWTrmhiR7mhbdw+4w7ct6YWWrz6hmec+1sG95zu29JYMuRxP/1mxy93n/5Gc3+rdWHEHVDwOHI+hxNNfuWzm25cV7m+1KgW81sS8V9tXbKyTMfH8Oes85VZun3Ctq7GMDkfPjXofHR36/ELM290W3lKSTaRiIUSu9ZVT3pjb/q8oWTi9OvtFEVPJNJ31hY+vqIqFk60jEw3T0xtq9X7QtT9KytXWPQAgF6rc0/70JZq831rankcLHfpsSd4XRa4jn84Pp18oPn0yXQmQyEcABguh8PjkXw+WVJeWlRS0rB06fp1Gy1FxULhe4oEf2Sj6n1wRYmgY9RukYl6Xf7NpQUIDM0Hr6lEwACQyKbUPByPpQGAdSIeDEOeYAyBoJuXlb3WPlRulGt4gvc55t8JtocvlwjYpgpwvFgp+dqBc1IA/ddzR1EaFBco9IqPbgLmxvTykSVxDMfQV84OrCk3elPxcpksXyLoHpsrlAvnwrEPH1gMFtMN5VMCFsxivTsIhmAYZpicyxCSyWQzmWwqlSa5RGF0/radq9eXmP98tPvwqaE1teZPtBwB+BBeQ92zrtbJhW1VBTP+YI1arRLxPyGvIQBAY6n+zdP9ZQWKA0O2G8qM7N4tCsMMA85OzqlFwrfODq+sMHA5fxd/ZkdCyxNPhAMKgoQAwDG2bvE0W7dYQBD1herfH+4geYRBIiBxjM1EzObFf3Lv2VydsksM2twz5kqvsI8T2RQPxXNsAYagGJ0edYZFOG6Wi7bWWAbd/tdbB7lcvFInt2hkbzQP8M3KDWUqGc793TttG6tNOrkQhRE4L18Qa1jnrPAPnAb0Im3IGcqsLaLg8iRCxCAUtNo8X2oZwOajBQTYVGI4OmH3uL3FJl3/glfAJZ4enzs+axMksquLDa+f6K0v062pNgvk3OcPdtWY1BwO+j5kINcA9H1TJFEMQ2LoUr1CQ9PnR+fMWtmqEuNE2O9NxuUEieOYVMdT8gRnuydKC5S/PtMXcLjEfO6zwzN1SsnPNzWqhHxHKOoKx2QkgSIwuuisDy1a/AgEQdDF7KvQom8V+xbr2n5y0Coi8dVlBgDAgN9tEUhf6p68s9aMo2iZXvHKiZ6fbVti8wRdaapMJk2AFAUzai3fIpK+cm6gukCFYzCGYGa1rGPEfvv6mkqT+uyI7WDrUCyT3RcK36lRlMu4dRoVxICzU3P2QLRQIZaRRJKi/3i6z+NN1GrEv3yr9Yn7tshx7tikm4dyxDqeOxnzJGNCDHUlEmViRa73mMX/OadzCAAIgjRi3qrSgs9vbLB5Q4f6J3oHbG6QLpBLFkKxMqUUgZjzDh+URBA62+8JjXqDLXPzL+7v+uzGJU0GvQwnrdFgMJ0KplMyFe+dU8PffGADwKCecOyzKyq3rC/9yf3bKgtVpIjry0I958f3ner/9tMHT/dM9Qza+kfsvmBMK5dEMlQpD++3uia9wZlg5Mzo7LG+qSMXJt/tGH26d0oPQ+5UatTu2dc1+tWdKx2RKB/lcDE0mk57ovFoMts/71GLeDTDsLEKB88N/+rV0+vri1AMeatn3OsJ/6FzdJVGNuPy//i1002FmkAk/sd3zv/ouaM/eeHE261DLx/tKTSKvSB+8PhwH4ejtajvrDV+eV3tjmrjAEig3jiUYb5/98ZKtTyWzq79/YFUv23G79tSV/6ryfnjB9tfO90bF4twHDrZZ5vongBzzsYyzWjPpH9mwUOKqhuN5ya9tkikr991vHUWyiZphey+WqPXG/nTsU4cQ+pLNV9YW7fGUqjkky+0DBMI2Ns+1G11fG3nSotaCuUtEeB6tMB1/NPg08kHnmuZeXnEYzNZ6mU8sVFds2Rp6bKGFdUNFrOZFPAx5Kr23Md+WeYkglSGahu3ryk3irj47qPdfpJTrpRY5KJrJhGwTICiKRLFMRjlYeh5q9MsF3ExFIXh1oGZm1dVcjH0hVN9BqP42ksEAIAsTaEw2jZkdYzN/c+rpzGD7uGN1X025/oq0wcd+KrI3SCvaHzkeBpbnmyZTn1sfK5YISJQpL5Y9xECi8EiJZiemkomkxAMAQAAAyAIYmi2aiwAEIBhhGFohgEsJQAAwDCcSqVjsfhBL3JnfXGpVvniheFrUI7gal5DPz3VX62SPN86uBBK3L2sFOVBN1WW7m7pr9QruDiWTwnyb2xXw/s07BKvocbSgj++1d4ViecHEgRjqS/sPhcMRu5eU/FSc1+96T2pfj4M8hsJLf4pCHI06JWzlABFSi6hBCbN3nNDgUzmktjiWDL93WcOra01i/hErmJJ7shgcablrO1L5l6GZnO3/+11dzK+ukB7cspRJBPycaxGp7RFoi0j9hG7m0DRQ+dG3Bjy8NKKFJo5cG70gbW1Qh6eZWi2x1gzN0XRNGAuSWd5NeQcii5vJwBATpBJJl6rkQd9oXuXWrZVatcUat4YnC01687bXUk+r2PeU4MhWV9MJeEtqdC29czcua6Wz8O86SQP5jy175yAh5suyydzCVgOc7WrMvcBAECRXvGDZw+PiEkGgHq1okAgHA35BChn3BmsVMk211qeP95jT6XinthRKi2Y9z+2pbFUI+NiaIFYgMDwtC+Ewn+L0WLA38IGcj8Bcm1YfEoxzLsXxkrU8jKdHADgSsRgBmmZWdhVY0Zh6FjHmExIfm7rkmA0cVddUee8d9ARFKB4g1oNc0GxTvbS6b7aQpUAx9njjdncd26uKTWo5iRkZ9vogVfORJPpAqGwRCvn4Rgf5zA0YwtGRlz+fX1TEASlk/SC29s8OK0kyWffaj/SPrqjqWJlkVHJ5cm5vNGgN5xO6nh/2yLJDSKdfy6LYACQk8Tud7q+fu/621dXNo/a97T2n5uYTxH4MrXU4fXTM45f3rv+4eUVTDb516M9wxnQbncHE2mYhg0CIQ5hvUOO0wMzq5YX9sdSdQoyQqWLhBIGMHIx/8iUc3uJ/of3bhDy8MFp53cf2vLsN+/kC8gLk47V2+pUNNPRYz3XPXm+Z/pM+1hHz3RXn/V0+/isMzjLMJ5B++lzI7u7ho2rquxhX3+Pvdvq7LAu2IOhQUfg2Ig14I81D1lP98/saRl4en/bj/5yxB+OzzgDe3rGOzomXz/eO5DJ9LUN/+5Ep2PMOesMeKNJQkLOGsQPr6woVEhm3YHP3boCVQnHAun/vmHZD29Yvr6ogI9zzsy7u4IJV99ssVG1vrJwIRjb+F8vLiSzD2yt9/nDUwrxsTfOuDFMbVDV85AT7/bR/riGi0qFZHefNZ1I0xT9yG1LN9ToXdHEOAzFbQtxEikvVEfsTpNcfHND8X/euU6nF640GuQkn8CwKZfv7c4h25x/16rKB9bV4YuJy3LD9P5X63Vcx7XEp5MPkALyqRO9Sq1mRXkJKdbctKRGL5KOhv0qLv99tnjf5/70kZHjA0Vq6TdfPPr5TUsKlOKOUXulWtrh8F4ziYBimCydZZkA+7qMx512B45OzK8xay5a5xi6ssJ4amiGwLEKteL9D/v3gO3hyyWCUCT1xMsnbc7A9tVVxxJJAYf7/VuW984ufCxRBOAqI8sGFrMSgUkoRmDo8Jj97wksBgBgGGYsLJyzz6ZSqUwmiyAwSwnYFsAQzAAGhhEAGIYBNE1jGAbARW4g9s62xPE7l5S2j8+9fzmCT85rKJRIN4/bTw7Pf251VblJkKCzFRIFgaEVesWThzuqDUoCx7zJhJxLgjxz5H3+3h/vH0iwEIju+P0ReST0o4c2zUeiJqXkQMfIhwkkuCIHuKQx8vdSAhyBD43alxeo03RaxOXyCOy1loEUDHKxxb5w/KWjF54/3AXD8JJSPUlg+ZTg8iGA3htBCxb5QP67rkSsSCQukglf6582y4QSElcIeOesnq0Vxlfbh+IiXnporrFEpxYKXjrTv2tjpQQnMBhN01m2xyiGYRNoslrB+/vhXC0HKLTYXRAAOIJ6UontRYY+p1fI4Yw6gygDEzRUrZF1dI98aUXFWrP+ZN/krsZyDcl7ua3nxvWVOIyE08nlJsMjP9/TMWJ3+iOVFg3OQZlF/SH/j3XXyT2lFz12cu9Six+gATjRMSaVCr69Y7lRKjw+Oc+B4RKpxBoNDs/7G/QqmYCssmi7Xb6RnhlPr9Uei92zulIpIXEEgyCIh2NiLj7tDboicQSCWPehq/GB3NMkTeMw/NN9LY9tXSrg4gAARzw65Y6KCE6NVobC8L6WwVKD0qKXBxOpVWZto17B52Aj7tCT54ayGSDFiXqT5oXmvjCVZDig1qD57vPHtywrG4jFS/jEI+vrHrt1pS8ZP9dnbRucBRDUOedZadauMmsLJMK3R2xmMY8HZQ92jtiHHCI+0VRhPNox9ssv3ZwbUQGGMQAR40Ru4FgwV9pmZsc3Ek+9eKT7a/esKddrpv3hX9+3Vcgjfn66b2x8dmbO7UT4dy0rTmKp3hkHBmHf27niq2tqUllqNhB9tX/6nTHbYauzK5NWG5QVJFkmlc3HA0kq60vFz9rng7HsnbVmBtDlhcp5b3h5hUErFz154Jy6sWirSXPf9pr7Vtd976Etd22ovbGpfE21qaRAeaZ/Rlpp+PMDm//4+M0Qisgl/NjMQjoQ7e2zn+uaHB13dA9Yp6yeaae//fz4xJQr4ItwBNyshEdQ9BOP7fyXW5pICe/BbY1nIlGRK3T/9iU8DPvZ5274zeO3NJQXdKVTd5do1XzBH99spQqV+kLRPVWlNRLh2Iy7sdyQzGRb51xmsVAcib14oPPWGxoYjLnrV29MpOhyk8oaTWAKwcmD56UyCZhy3r/SfOz48IIjWF+i+coda5sqCydd/lgilUplA55wcbH2WZsHnpyHpOIdxeJqufg/71j32fU1DAkimXS1TI1BcNu4/bnTvTZv6PPrG/51Z5NOJmQAw6Zgyl16H7g2Xsd1XEt8OvmASSVp656+MDJjRbCby418giPi4rnyme+/xfvxXqI5lyEAgDscY2uTXWOJIJZN8jHu5XvJKIocH7UZJHyVgMQx9EjH2Pr6Ih7OOdg5du0lgslpzyvHejY1Fj+4balJKe7LZFzB0OeXl0l5xCeaaChfIvi4AosBABjGMRaa5myz2Ww2RwnYFjAMk6MECAKzlICmGRzHIAAhCMLYxw0my2fW1L3eP361cgTs04/XayidpSw6WXPvdOeI7calJa9O2JaapKt1BQIOdkn60Q2VJjmXHAl4Pq5JcnkgwdICxev9NgEf/eKLrQv9Y7/4yq2kgPBQ9BKNrGNi7moVCT4MB7gErAsK+3mlgOye93AQWCcSpKh0oUJ2YcZRrJRMB8IQhkzZPLuPXlhbZ37xu/cyDLO3eaDaomEpAQMADF258/NNbfBePsDacOy6hKMIBsOHxuw1Gpk7Er9g92qkpEkte61/GsDUzIRTLuV3zyx8ZllVFGRi2bSQw83SWYqhYehi8hz4vaW+LmcFl7v150+YnJmSoik1wZ+PRapV8ue7xpunnOuLdFvK9ONzgbapYNvAuIiHv9E+oJLy/b7I4Jjj0W3LY1RGiOCt/TMMzXzjnvXlhcrXTvRWmdQEjuVnFM1Z4Ze8mHPaYcDFol0IBEEQhEDQW61DZQWKTbUWBZ8olosOj811zXvkOHfKExSJMBzBnp2e3X/BqlKqg7MLWQIZnHcd65tZV2EgOAgKIzAMaUV8GILmQlFnOCYhCRiG2E7IsQJocSwgCMrQNAbDjkDk7e6xL2xtZHvSn0r0zfmLZCKzVMgA8NMXjj9268pIJstBEKWQBwEg53MbdPKbKowMA6YCkV6Ht1Qt++PhztPDdi4P/e2Ewyvi3GaQ1cpk/lQCgSG+hLizqZrgYMd7Js8MzxrF/GKd/FD3RIvd88RNKzeUGv7nhVP/9tlN/7qjKZpMZ7LU9qZytoXJbGomEioVvScr9OK6cmUyAAA4eG7kdM/U3Ztr4xlKwiMMMmEWhuIZ6mtbltywvEgkJM5NTr/SOmidC+5qrNjVUAoAKBDz67SyG8sKVhlVOiFv0hOA05lgItU842AyqIwgs1no6dbxlYWqIIhRDBNMpzgktufUQP+8883jfZ/bWt9Upa6UKNmFS0ASWrmw1KAsVEv+cqhr+dqqH9ywLJbK7O8b31ptFsqIL2xu+tebV37x1pXrG0zra4usvvDggP17D27+8ee3rVlSdI7KRkbmvvbg2m1LymyxxNbywhTDJNOZdZWGU/1Tj9+04ubl5cOByP+Mz1by8EP99udah7iJ1M8e3fRAbbFOIDKqJD954ZhKIXrX6jCJ+Ilk5psneviJ9AICXu6ZjSLQ7+9eWS8T7T11YW7aBSllsT7rf31hG4Fi4zbvNx/aVNdgyaDwH/acNZlV9+5ctnlZSVQjfnt/R2zBTWiUf/nMurtWVuyqLzPKRJNhv0Uk0fPFvkj8F2+3TrkCW2st96+u0ctFAAB6MVw4fzW4juv4p8Knkw8AAHQq8XOne5R65TK9IpJKFynESi5v0P+e6NXLv/WRLar3QU4iyNUmu8YSAYFwrni+Mh43lky1z3n/URJBtUX76rEesZD77LvnHd7wozubqk2aJJWejASaNKJUmuEg8IZSw8eVaOhqg8tKBOsrTUou7/LA4o8mEQAAMIwjkcocczY2y202S8EwvHjrhqDF1CYsJWBLE1AUxSUICIImp6fqG+obiwy/Pdl5STmCT8hriOCgT+0795vXzkiF5MPbl1br5RMgOTjpazIocQzOufhfg/SjAIDGUv2LRy94GOaF9un6SvUoQwdkXB2fu0Yjv2BzrS0xvNE+3GDSsIEEH4ED5CMnEQAAIACK5KLDY/YimYiHcTJ0utqg+WvbUL1F96exCdeE67GdK2qLtACAIp282qJ58s2zLCUAEKBpAF/lV3OmNpTHB3JT0ZWIqbk8CAC1gNsx5wnEUq90TTfoxZvKjENO79CC/8e3rjk+YT3wbs98KnHrsnKekKMlBTORoJIUwBCcXRQKcoAvCy0AV4/xvcRAiWWSAoyAIEhKcB2JcCiR3n1hKpal7qw2b6s01BXI+pyxP50Z8bg9PZ0z5/pmZHz+HevrvOmEUSh+5VjPrg3VyysNeoWk2qz5/d5WAkN1ChGdp1owiy28YjPYPyTPTP/N62fu3FCrlPAZAEgMbdQrYAhqnnaEk8kShfzbfWOEL5TOgm9vr7p9TdVrrYOhmYB91vdKz2i9UaOTC7I0hcEIH8e0Qh4CQdO+EAJDPA5GLRZnyJ04k9fIU4MzIpJYXlKAQtBQwGPmS166MPmZWgvJQR3e0MHW4fu3LXGG4wIuLiHx3BlRDFMg5tdp5RIu1mp1B2C0oVDzlVO9koG539662qiUT4V8GYa2RwNlYjkNmEKVtMai8SRT7T3Tt3zrL0c6xiMYslwr65l1xTjQZ9bW/nrC2nK0R2uQG+QipYBkAKBoyp9KKrnvyeMELSoDuQvhkoXu20+/o1eIMQ42EYioZPxQJvPzC0MrNPIKo3itsXBHpemW2jKhAP/lnrMj895XWgc8kbg3EhdycQEX53GwMqXk2IWZL6+pua3KvKZQk6XBVCByYGzaH0l32L3DnkA0Qau4vAyNfL19qOVIr7JQSpIcqZxI0WlnPOJKRD3JuDsRE3PwQCr1wuT8dzc3BKnsN1r74x7/HesrS/SKcqUC56AEB5WIuDw+N43BZzsm/vKtz6A4dsrpr4DgZDL9wMYl+6wOEQ+2iETPtA+XyIV/OdrZ0zH9/c9uPez2vWlzvT46NzPhrBTyBjvGv/PFLcUSiYTkNtvmW2cc1jTVMu+KZrM98/5nusZSnVNff3hTUC2KLgQebywlUOj375wvEOAenrBEJFMjGV8mHopkt2+svgBSegr57z8f5RdIBubdbcGoF8msVUrOTs6lJJK3HrlxY6nOm0poScGg31Ur16II1jFhf/Xc0NYay/1ratnkB/nFxa7I3K7jOv5J8KnlAzmJYDhDNenkcj7JX6ygCT5oi/fjvVyvWJvsEonAFY7Bn6REcLVEQ/9YiWDRef3CrU1VSxuNSYhyJ2PuZKxWqpbi3HAkfn7OVyIXCrn4iYHpv18iYHH54OaPizsZuySw+IoSwYekBHy+YGHBkc2ksxQFw1A2S7FJbxlw0cuEdaJGEISlBDAMs+HFoUDgbBS7fWnZNfMa0ivFLf3TD25f+vANjWyw7CqFPBiMHpl01GsVCMLkjM5PrmhxvtfQstKClw+0wUr+Gi32xK2rHi0tqpaKBBzMJBMNzHtWlhT86Xh3nUnD5byn1NFHQz4lIFCkSC56tW8yRdGFEmGrwzOIIod6Ju8wa1RSkUbMF3Jx9lsXw4vfPFtt0RAcDIEvlj6/mrcOOzTslZg/Rq5ETLUYiVEqFz3fNT6x4LtteVmNWirnk4eHZx9bX1ukkBwcn2Fopswkv62mHIMRts0KLg+FkRSVYfst/7D5rIBZDJa9InKWCs0wNEOz4Q0wBMkIUiPgnZycu6nCOOQKJ+tR4AAAIABJREFUlCjExUrRDdUGismemQg8srG6oUjn9EckOgmXi0xOe+dcwQe2LIUgOEtnBVyi2qx+9URvc+90rUXLJzhZhsksVgO4WjMuWk7Q39r6m9eav/3AJrC4nU8zDIZAgXC81evePzjvtoYgmPnqxiq9lKRTjIDD+clDW+/eVHemfeyXJzrPDM+a5BKdXEAxNAojrPtQn9M35vTTGKIgcGbRhmbTjKIwnKaZFEUf7pko0cgr9AoGAHciBtNIy4zzrloLA8DJ7kkRn1heYRxc8JarZRz0YhQHxTAZmsERGAJAQCAbigrKFOJmV3B0xp0C+K7GonKVWE7y5DhXxxNNhgPBdCqYSow5A0sL1dk0daxrorDWFBpznO6dbrM7uFLRJA8nxx1nOyf//NXbw5lsh80ZS6cTVJaBgQzn5pSNSwY1N5Q5tA1abe7gzWsqplzBEwvuEW+gKxzuGljoGPF4fIkVFjUXQxEYGnV5sxn6/9m56hf3b42l0qPz3t8dOb+7dcAViqZo6pWeuZZTPbtWVyqFPKNEUCwX4Rj89oD9Syur/s+6Bk8i3mXz/blzbM4XRRf8ZdVmD4IMOSL986FMFiA0qiL4hSLR2TlHz4K32xXad7DDXiBqfav99nWVc6lIKs04Y5FQJnHB4ZoMhptH7bws4IvISCr1mi/QwCV++0bL/Tc2ONPZ5yfmGiWSUZ/nd62jx1r711Sb7M7AeSZbJecpEGh2xh1MpM4c7vaKJc5M8vS46+3x2bYZT8+8f5lO1jHq/eH2xkdXlNYKBM09Uzqd4ukBWyEGv/Bi84H+yaaqAmWF5kvLyopEeCSbUCtlNWX61kjSP2l/ae95c43ByyWKTZomlairZxpQzE/u2YxSUKNJJeTiaUAthCNlEmXfrOuPxzrn/JHHtjYWa2RgcXTyB+Ujr1HXcR3XAJ9aPgDyJIJVRlUwkSqUCb3J92SzufYSQS7x6Kw7+Mw7navKjcdtrnKdlIIhqzdk/ru3wK+Gq53vP0oiyHVygVLcMWwv0ssIIcciEElxQk6QWZoiUEwvEcz7QocmHTsrC7unHZ+oRFBtUL3yv8k9CgCgFmM63x8ajXZmehqBIZYSUDTrgwAAAPmUAAAIRS8GFkMwjCIINTdxjb2GVlQVvtU6VGW+GK2Lo4hFKXZ4Q2+PzW0vNaTozCVeQx970eJ8SiAk8ZtXlJ9p7jsXpndW6PWL2cAQGNZLhUMO78pi/dPHuj6uusWXU4JnO8ceOtbb5wlZaOihZeZTPdMby4xWX0ifV5SApQRP7W2tLtKQOAZBAILAJUHG+YAAyNAUAqO5adTvd9dIlWBxyAgUYRh6wBPoS6Uc4bjTE3p3yFquEauF5O7mPjyY7nX5Gkxqs0pKMYySyxsLemUEmU8JLvll1nAEi1vvl2/M58AmHcqfSxAAiQzVaXffv9xcq1K80jdVIheJcKx5xJqIhFom7IlA7KFbVvCFXFsoeLx94qamCr1ShEAQCiOxbFJEkuvrLTgHefVELwdDjUoxAIADwzmKckljKIaBFl9k3xiacfZMzN+5oZZazBkKQxCBoa22+XtqSlcb1Z0ON45A60w6HoHuOzeyscq8qa7IopHtXFkx0G9v65z8a/fwqYGZ7TXFBIFQDM1BUADDxwPBQX8oE44LcA4fx9hkRzTDQAAgEIRC8M/yggdcidiUOyokOHVaOc2AAy2D9cVag1pq84crNLJc12VoBoEhBIIS2RQH4TAAKPncHUXatWYNJuTs6592RhPxdNYiFwEA5AQpJ0ghhzg77ShQ8eVc4rVT/fxy/a8e2FxpUT97ots95pxsGzvdNhYKx2uKtGsqCyvUsiSVWYjGZhzhDE3TNCMicOhKlIAdbnjxrZeOdq+ts2xuLKqz6JgMXS0Wt54c7Do9UCohl5o1Pzvab5Dy+n3u4x1Td6+sumlJKQCgSC1dWVpw3+qaDRWmZDbbPmEfGJ+BIukwnc0wjFEhPjo++e29fXYcs066pXJ+vVohJCETyTv8SrO2VLVrVdWDjeX/srx8a7EeAMgZSewfmt0zMPNm3+yB7nk7gcbkouFxpySSnKKRaCbbMuk7Me46M+0ZcQZ754KRaDIKQKVF/f92T07Ned7sGvdZPacTyXGH28mAs8P2N3utJWLcuRCIigSzEmHKFxn1Rk1C/voCVbfDzw0n3vjOLUqdPCnmBb2JeUcsFM8UKSQzrlCVTlqjk3eP2/c1Dxydmk2kKMf0XAJheBUmoZR099gRnJqwOm2hRCiR2esOUfa5mDsFSnVauei2Mk2xmDdt86n45P88vL3RpF1uUT/fNupPJZp0uqFZ9/6u0R6rc9ey8rtWVOU2Kd7Dzz/Smnwd13Et8WnmA5dIBAo+aZZIWJch8A+UCIZnfbHkwT77kVlfu80zm01FBaQvmVQCWMjl/P9EIgB5ayWfi+9rGbyjqWYyEtDxRBiMsk0lMLRMIz096VAKuAap8BOVCK6YezQcT5nlovMjtj6bu7FYNx9LFCsuRtwmqTTDMB8+kGBiYjweT6AoAsMQBEFsTQx2GxSCIfYhwwAAGAiGc6lI7bPTtTU1y4sLfnOy6xp4DREcjIO+J9cQgaGlGmnzpENC4ioBcbnXUIFM9MlRAgQFJoXspZdOtsbSTcVyJZfH3mVRGNZLhaxK8MlRgiqN1OEJ3l1m2FmjrVXKGgt1z57oXllcMDDvya9TxuVg1RbNH/e3VZnVBFtIFXo/oYAtPpCb/Kw4kG83CDhYJp1xh+LL5KLv/uEdqFApMKqygejwrOvHj24d6LH95lTXlNO/odLE5WBygsynBBRg0PeWN2XdhHJu+u9ji7P+M5eEN3TY3EKCs6FQ70xFDFLegUEbyFKvNPd945ZVO6stP33+ROuCiykrmPcH3Y6AVCkqV8toQGUZmkTxFJWhGLpQJasya1453nOqZ7LGouERnMsbw+TxFjgv71Bz75SAxJsqjTTDoDAMQRDFML5oYtjl21SsKxQLy5SiPX2T/kQWimf/dKzrsVsbfamEDOeKeMQDW5esqC50zHrbOiZf6R1rNGrNGlmP1z8RSxhJ7L6iQgxDXZHYQjjOBhXAEMT6Kc37Iwe7xx7b2ggBMOR3Fwtlp6ccJqnQLBUCAL71h4M//cKO+VCMgyAqIQ8AkGUYBIIQGKIgiGaYDJ1lo5lpBjAAGMX87aUFDzeWxjNUu9X13UPt5+weOZdjkAimPSEuilYoZDGMem5s/vOrSn042hKMiNLZ3z5yw/omy95j/TCCTM/7Y4l0KpMtN8gTELXKoIMB7IslO23OZIaKZbIUDPFQNJ8YwHkSwdefOviDRzYTCGd4wddYqFli0TxxYeKlL+7cUmfuGZs7dLTzwJT76OB8a+/oc1+6jf3K36YiFzeqhJsqi760bdktqytpCHTPLvzgzeZRl/f8vB+dnZ/gIicWQs/0z5w7bxuYtEb80R88uNWkEO2oNvE4GMnBzFIBG4ewplBlFPM9qcTDpcbTZ8ZQj2v5tiVrS/iESKiU8Qr0ojKtqFyv2GnW8xD4lpqiZzsnRhdCj9daJi9M//ejN3xtQx0Ow0ECrxbxHaFY0un/xh2rfnnTmjUqyanB+V/f0nT/kpI6veKtt9q+9sCa7RUltVK+hSRHISotRGoq9F0DDoKD/Or40O+fOXi0fUxsEAnVMioaW9NQ4iS4NRxIyUHdE55kNNO0wnRDTTnQy8WJzHindcW2qi8vr6rViV862ef2Rv5jR9PXdqwUcQkAwGwikMlkd5+dePZoOx/nbKw0PbC2TicR5AaCyaMEH2E1vo7ruPb4NPMB8F6JIJT8p5AICJyzt3v6rqbi+1eUdnYMi/XSLy8x3V1iwlDUE4l/clEE/1QSAbN404IA0MqFXaN2DEOWGC4tT8ZBkFA0fnLGdQ0kgktyj6oQ/K89U//yvReCqYxyffWs08+DYYNEgKBMhs5yURyD0Q/pNYRhnEKTxWadjieSNE0jCHyREjAAgiAYggEEwMWQApgBDE0zKIrAMJxKpRzz8+tWLDs3do28hi7PNcQOwalpZ4NOeTWvoU8ikCBJpQmEY1CK2djiI+NOi5YnXyxShsKwkItPewIGqWhfx/DHRRTzKYGAg602qs5aHct1aiGHABi9zKR/+ljnqhJDjhKwUgAXx6rM6iffbM2vS3BFoSCeTZEoDhYHCCwGE+d/CoUhqy98W5Xpe0e7kXQW4eG/3rjkTW9gon/6gbV1X719jc3qXVdt3tM+JOFzC2SifEqAQHB6USgAV4oZuCIxyP9YhqZQGM3Nn5YZp07EK1GIFQQp55JCAfLvB86fvzD2wPp6DozsbR0saSgKu93z/bM/vGdzg1E94w8peDwuigEAUBhhWYqAS6yvt3Aw9NUTvQQH1S9OrVxjYAjK0DRr7oO8Vr16oiebpb2hmCcYiyfTEAS4BMcbiLbMOtIUsMhEg1NzJ6zeJqXk6f7p6XH7+lLTClPBeNDLTkWjWvLQtqWrqk12q+fFo91/7Rj0qCTLZeQKpQKFET6OaYR8FIZnLuYk5bDBxCcGp0UksarUAABwJ2IKgvdk69CDS4q5GHqkY0zII5aWFTiCUTEXF3JxlgywQ3kxiytDYzBKMwwKX6x4wKJIJlxbpC2SCc8PTP+hY/TPPZPVCiGCokVy8Ygj+GbftKaq8DOFsgsXJu5aVVZTqq7TaQ6eG/n1v9385L/viiXTbSPW//PMu85AlAuh9WaNiOBUauQRipp2B951ecdmFhAYTmUpHEE4CAwWbdCjHWN8LmdFtdEfTUWSmSKVpM3qtsiEtzUU65XizUuKvvqZtXw+fHBv66ZlJfesrobyZiYLiqEwGAEA8Ll4qU6+stQolhJ93tTPblz+3CM7G1SSuM050TNqF3GQhVDSIAXRlFrC84cTyWyWQNFUhpp0+XtnnD0LPm8i9Z9blmwq1v7wQGc2Hj7+ldtVIt75o/1JV/TLq2q3F2pJGJ2Pxe+oLlILSD2P7BiZt4h4agFx94a6hUhMpZQOhmMt/TPWvol7Git21ZeO+NypGLXn/MRqvayqUHWgdfC8zfajz2zNMFkC4ZAwHHL6Higp0KboHn/g5NwC3+kV6pVzMMdDIwoebLBo/LHMDqNycNCuFXJuWF1TVqzqHnZcCMSIdGasa/rpr9/eWKhYiES+s78zG4q9/KVdFTolACBL08MB95Q1cKx3Kp1IfG/XuvvX1hZIhfl2f64PP8IifB3X8Y/Cp5wP/BNKBHqpoG3UWqKWFuqFxQb5m7tbXFzivvpiCYl/0omGriYRYChy7FpJBOxCmetb9gECw1csT4bBaKFcxEoEmytNe9qGqg3Kv38z+GrmMo6hr7QO4TgnFqEe/cWeKbs3XK5vXFd9f7G8ii98/VBXHIebTPr8PvwwEgEAgMPhmC3Fc3PWZDJ1CSVgAIAhGF40LtlMKzTNpNPpdDrtcrkNxsK71jS83jdus3ru2VyfO2Y+JUhSaQDAJV5D9Eeaw5dUKAMA6CSCBV/okkACEseqDUo2/ejHHkgQycZ56EXnKDa2uDsab9Io00gmRwl4OBZMpEs1stYx29XSDX0E5NINAQC4GCoSIG8N2orlAiGHiyCMkCDebB+6Y3nlhDsgIbnYov8YgWPV5sXwYhy7OMnfKxQw750trPWwkIhp3ttvWZqeC0brdAoOw7w6MvvMHesaDcoSFHm1dbBQr2gqKbihsXTf6f511aZ3eyY6puarCpQGkWgs6OVjGAIj2KLv0NUCiFnkE4MkRbEaAktXIAAocDFH6osXxrcU66UkwR5NySWzqeiR7qnuVPZZhw/3hjgSxdIKuSQNlxuVZToZD+NMeoIIDOcWsZwvk1YhqjFrfv1a83PvdKyrt/AXwzDym4RCEPuAomkIgr7z9Dt9kwsXxudOdk+81Tq0+1jPM2+3v3qqz0ngrbPu3a+fOnRuuCsYP/tOV2zelyUxD4bVamVFEslk2O9OxtmoDJNGes+mepVS1Ds8P94+uqRYa1HKw+kkjsA0Q4sIQsLFp71BRziGIjACQW93jZVrFWzlAXciNuwMn51xfW5ZaZZh9rcMlBqUlWZ1n91dqpZxUASD4VxPsoOeprMIjOR6/pLlzigV7mosq9FIO/snez2hN0bszdOOd92BKWfg1+vr61SKX+xreeLubXPBUPPANIlhX75jFQXoQq2ktFDeY3OtLi3sHLZ/79nDgUhizhf5k83ZlUw8VliwtbwwS9ORZGbA6bX6QrF0BgIQDIGn327fsMRSrFGMuwN6iZCPY8fG58qUEoOYf3HhhSBSiLzZNf7Te7eYVBKwOC3ZvxSVxhFOboAYAFAImo8nhDj+4JJSBoBShfiOxrJv3bx6lYB/6Mzgd3Y2aSs0R86NHOmbPDYw9Xxz796O4c5Jx97uMYaDaUl8VZFu99mBN5o7yEi2yKyoVqqKCuQkiu493R+KpvoXvFssBTIeFwBQIOUfGVuYHJ6+a0NNr8PTYFCJcc5LY/bu4blYBJw/3fu7N1r2HO0f9TnTvshf9rf96K9Hj3VPlG2qFMMck1zQPGB9trVv/4HOd88OvvB2h2vWFUsmBBY1HA7BCLWlsUgh5Y164wpPiJDylHqpK0IP+EN7elykjFwqFnZ1TVbctkIPwU8da3/i1LgZYQ58/V69RJCl6QNDowe6R559twdH0dsby79x86pChRjKG2UmTxP4CMvvdVzHPxCfcj4AANCpJbtb+hU6+c5K00Io+s8gEUTp1PGeqTuWVlZoFS2D1hnA1KmlBRLBJ51o6H0kgiGHb9QXvgYSQf4qmevkq5Uny5cIbq+14Biyu3Xg49oMvnxwC2SiPx7t/O6B3t5ZT0Yi1Gnkq02yz9Ya1mp1Kgn3TO+0Tic3SAT5hO1DSgQAAAzDCk3m+bnZRDJF0zRN0xAAMAzTNM0AAEEQDF/cT2QpAbKIWau1rrZ2RZH+5eM95UZVTiIAACi5vPGQj0QRVq+4pCXQYomi/Fc+EPlhsiwlIDCUDSTYP2rfVKzNbT9/coEEOIxdElt8/MiFfU7fTZUFGh4/d2FKedz2qfmVJQVvtA9/El5Do0GvWSgsU0pf758pkQv5OK4Qc8+N2oUkrhbxbYGwRsQHi3P4kn6DcmWAIZBLSJq5jD3mMhzkhsYXSzojsUqNLEVRf2kbdmWyO8oNUwu+tjH7z+7eNB+MynhcpYT/duvwrpUVBUrJr99t53M5NRpVv8st43EphoYASGTTGILCV+cDOTAA4AjCEgO2pgGTl+Hnhe6Jzy8vp/OoxYVZb+uw9ZGVlVZ3cGHY9pU7l921tHhzteXNtpFz43NLTFo5n2sLhBfCMSmPy3pVoTASy6YhwAi5BI/gfP8vR0Zn3YUaaU6DyoUHgEV/IRiCnL7wkfPju9bV7FhZfuu66vu3LXn0lhV3rKulZNzHV9WUKiQLdNbL5clwvsygUUj4JAqeemBrm93Tu+BTk7xiiXhqsZ6xN5F6we1/fE21G4bOtY69MzxhFktMahnLVSAI6EUCBILmgpHTE3Mvnux5fHujhM+lGMadiB1aCJo4xEqTigbgiRdOfPHWFRiKzvrCZVpZLkNRriej2ZQQIy7p9svHwCgTri8znh+dxVPpcp3itY4xOYadtDqj3uDwvLdQKV5hNjz/TueGFcUoH9OQAgRGOBjsicbGpt0VJvUPHtnmjaW6phztRy54+2azNJNOZRosWgEHK1PLVEIeRTN9Ntcb54cnpp21dYYsBbpnXTKZAAPQk61D/762OteS4YB7ctpfIBM9tL4eWlyQc2DFgdyKDQMwFPAcG164scyg4HNzJi8EgNsXDkYThWaVWSn6/s7Vn91Q/9DaujuWV64sKShSy2Ri3lAg1nJh7MlD5/94pAPjoPUlyo5p1/7u0bbx+Z65BWs40nJ+cjoWf7N1cHfrgDcSpygaS6UOtY2sa7CM+4PH+6b++2Db6VASnbBS6RjNwxg+J0Mg0RRlKpfPM3ySz4gExMCoozcSe/bl5uapuag3+vkdy2tLde+2jVqK1PO+oIRmAkL+mjrLiWR6KJzgD9ju3tlYXaDASRjjo9ksNNc2FF4I+CJBsV49OuEbcrmP9riNGPXWN+7Vi/mDTtcfTncyKbC+zPT1navWlhv1MtEltzN2C+Z6qMB1/F+KTz8fMCkl3mhilUlzaGLeLOb/YyWCAa/Dk0w06fWtYzaSgxnkYo1U8PwLJ2xc7O66Ih6O/UMkAgCAQsDNlwh2H++hGQaiwF+O9zTW6T9eieASsJ3M5h4tNSoSUPYStmZSiIedfoKDLDNpPunco2vKjTMO563LSn9+x8plJTIxiY86gsVyoYjgNpYZ9h7r8QPaLBOymS5Z/G8oAUcqkzsX5lLpDGB3kth0QzTDAJYHQBAEUTSNwDAEXwwlSKdSo8NDCr2xy+F940jPLav/FlgMAFhIRKU4wf76FVuSf9tmb/YfSHTJy4oWs4EEZ6YcMh4p42PXOJBASOIbG4qPHO7ePeNeVSxTkxcpAQrDBblAgiOdS8za/HH5yGApQSidNPIFOMLhYmixXPRq31SRXMTncCoMij3nhqoMyoVQlE/g7KXK9uellCDPLoQhwDAgQ1Oc9xZHzyUbZRYHyBmOkRimEpIkhr4zbL2jxjLsDdmd/t6ZhTuWV5iVkglvsFgt7ZmYN6qlAMUODTsOtA+MO701FlWSyapJAQIjKIxmLstDejnyNQQYgiiGwhE050004QuNuoNbSvT5OsMr5wYVAqLWKD/4xjncrNRpJNUFkmKZYku1hYOir7cN1hdqipUSBIanfCEEuriUwRDMgZEUlfGFEjiG3rmh9mz/zKmeyWqzhsCxLE1jMAxBUL4lfaJ7UsQnvnr3uiqT2qiSSIU8LgdDEHg+GFlt1lVppFoZ3xYK/+jGZRVybvuY9du3rVlfYWzUKzgI0jXv7XZ46zXKAoFwLOT77yEbcITHg8HH19bcuKz0TNv4C0e63+gb21RtFpJcGIKTVAbHEKVIIEDRZ453iaQCrVToTUcNPPHr58fuqjPrRTyHN3Tw3PAXblnpCEZxDNWKeLkLCgKA7TFAUxhy6Tpw+bUGATDq9H92dU2ZRvpW19hEIMzLwr6h2RMTNkIjV0qEQU/o2bfOf2Zt3VKjbjTo9aUSoXSC4OIvHex+8IbGwXSGwZGHV1Xs2l51z9o6iGL6pxzf+/Nhpz8SjCZkAhJhQOfg7LvNg1+7a12ZXt435x1d8DWHw0OTCwQHW2FUZmmagyBZmvam4vtbR3Y0lOZW1NxakS8O5Da8h9z+eIq6scyYO3cWT+0/t7rWJBWSN1aYwKJBTGCoUsQrUkt7PaHNxfon7trA42CJbPbLNzRtbLQ8un7p49uW39VUuaJct6bE5AzH497o4ztW/PyBralM9rdvtz39SrNXLp/xuwuEgi01RYVqGRZLfGlD/ePbln3rltU/u2fzvSur71tVvdZklIhQORcZG3FlI2mZUaHfWLrVqLMUKt3J1BtnB6Zi0flQRI5xEYP6wabyfb3TRI/1axvrhnQiWyZLpeMIDe5vqPj3tTV8PnHgZL9GKwq5wgQVn5jzlKsFP7xrA5eDHBoejyTSG0vNN9aWaMUCkLeK5uYAfZ0JXMf/5fj08wEAgIjEX27um05l/uESgS8Vr5SqEBjmcjA20ZBJLT07NDvN0P9UEsFTe1t/+NzRU10TWomgpFBpkkvQq2QJ/DuR62TWBt19vGfXsqqRkDd/dEiMU6IQ7embNksFgk8496iQxIvVkq4J281LSsJ0UibAdDzh8YmFZQVKPpfDVixOk5z8cgTgg1hlPtgMpAydzVECwDCsOEDTNEsJEBgGAGSzFJWlMA7GBhKE/d6mmurnD1/om3beu7mBtZwGA24AQCCd+pC5hnI3+w/Ehw8kIDjYga7RIq2UwJFQOuFJJD4hSrC5ofjI4e6Xp69ACc7PLGhFgh8+f3xdjUlAXuqI8hEgwYlIJoUjGGu+EyhSLBe92jtZJBfJeWR5gfwPR7uaivWT7oBeKkTgvxUeYKfxU/ta64p1rEtMLooAgkCWodCLTjEXkUs2Ci1uLjqCUS4HlfKIRCb7+oWJr6yvzVD0bDwdCYQr9IoitVRKEucm51aWG37/dsfeQfvjG6p+ft9mfzpxsm+m0qhU8fislf+B+a8udyjKyResA0z3nIfkoCUqMbJYThiGoJZh68rigm1VRS8c6Xp0R82O+rJ+RwCHUQWfWyATVRlUfzjagWNImUZOoIgtEHaEY2KSwBEEAIDAyKsnem5aU76urmhdnYWLY68e78E5mFEpBu/dawcAHDw3XFwgLzEo8xuZoih7MFqrUwAA1ALe4bHZL66skvOJN84Pff2mVRKSYABQ8IgGnRyDkWMT8zQEHjs+gHlidy4pWFemLpPJ/z/2vjs8juu6/k0v23tfYLHovbCBvYuiejVV3SSX2IkTx7Fj2XHKzy1OHFm2ZUuWZPUukaJIig0kRYBoRO99gQWwC2B77zvz+2OI5bLJsk0qjsXz7YcPXICDN2/ezN7zzr3ninnUrevLS3NUvf2zA5YFKZ8yqiQYjGAwkkgnG/qmjvVZ1uTpR93+dxcXQr5Ek2VxR6FeK6QPtI+GU+kys9YWCGuEPBF1rg6EYVkGAC7hKsWksvnARa2pATeHAAAAumaXKvUKvVRo1siiDOjoHgrbvQkM+sa2WoOA/s/O8bg76OGTCgFVrpDTCOxNJPyB2NsnB60q0R0FuvVaBYbCrlisQC436aVrK3If2lXHMmxjn+Xr/7N3X+NgU5+la2Tuvp3V6SR4ZXzWLeNXxMGpGUeFSugORed8wTlv0Orxj8w7Bmccj2ytw9DzS4Wb7lSWOMDdayM+Z+uUa1ehQUqTIOth0jY40zxkletlW0pyzjWBzjrlvgX3fCB8f00+BMB7HSMPbawqK1JuyctTivg4hpI4KuIRQpqSivmf2173Yece1VN2AAAgAElEQVQ4w7JbKs0Li74ECx67q74mX/vVrXUCCn+3d2qDSrY+X1dfbHR6gqe6J19v6Pn9wfam/imhEF1bYf7MrtoCk7LVFRASyFwqPTU063D76816x6wrEknzSowlBvmZCZtMzJPmytVSaqNatl7Ft8GYQCy8ryhnyRP521++l9Tw5OUGiYDsnVz49h0bdq0wWxY9tpBve3H+OnOOQsDLXMfsc2QACwB0TT4gr+M6PkF8KviAQSY6O2lbZ1L/sRLBVecDl+1FoP5kJYIrUYJqg3LA5hSSuIJP8fnU3tP9hZtX/vqL20aXnCEyZhZe0BTzKiLzeWNQiht7pzAMoUT4RQEuD8cWvYF3h2evbmHxZTPstRJBx6QNRZE6vdYdj5bK5d1XqR0BB41GO22ZwjAkmxKwLIBhGMPQdJrhVAIEgQEA6VQ6mUolEgmP22XML1ziSyaGZnILZGkSOGLhcolSSfGyCwkumzX0py3jKxUSHJ6wVelkfBwHALAA2PzBQ4PzTUNTRSZ5mUx9LWqLue/PUYLjPafdwZpcsSKrthhioQdfahwfnG6btX128/kSiz8K2fudEASJcHIm6FOQNBf0ECiCI/CRsbkVegWfICpzFM+c6K4v0A/ZXdkOpACAeYfvcNtoz4RtbUUugWHZcW4kFWMAi0IoAACCzpuNguVIEQJgaMGlFwv4BNZvdx0dsX5350qr3XmwebC6ppBPk2VqKbJMgcpMmpbJRSYYAgxTXqwOuKMHz44zOChSyAAEpVgGWZ66y1599hKXoYvSmZpnltQCulQpgbKKDZ462nHP2nIBRew7PfAv922HKahCJT84Yu22uYoVYilNlhtVbzQPNI5Ya00as0IMQWDa7U+zLA/HukbnbC7/nRsqk0wKgxGDUsytsaa+aQJDM8yTww9favjK7Wt5FJHhAxAA0x4/C0COVMgA0GJdkNJ0mVoaiCYaBiyP7ljBLhf1IhCk5FMlCvFrPRYkmbi/Nn+rSRdPJc+pMRDI00j3bKsW88hjHeONfRY+RWjlQgiCv/XSUddiuGPOa42n0HjqUM/cHA77cPT92aVjx7vCGqkllYSC0S1FRrCsCXBMgLvLkmwag1FuuJk99QzYZROFeW8QRxC1iAcA+GBsbn2u+plHbhZKeRSOtYzNHu4Z900uPbC9ZmO+dtDhf7l3cikUhhH48cH5jkDoR1vKFXzMG4+GkolCsRws122jMJKnlbGAbeic+Ncv7FxdZiRp/O2TvQfPjge9oZETAydaRoIsu92oXmvWlusUWiGPJZlXGvoLDCpvNG73h7zxxGggRLGABYCF0jiMnfdCBgACoG/RHUsw2/L14EJkxIGaHBW40N3IH0scHpu7rzqfRJG28bnxRff96ys9iXNbBjAA8XQCYhCrO7A6T6sQ8Srzta8c63rsdx/4QtHb15f5meRGk65xdPZnJ7pLVZL+0blXjnT+xwvH3zjRs+AOYAis1IrzclUUhn5j11oZj+70B+adofnphZQn9M0bVpcZZE+8epqHo4taiZxPTzi8MhH9tdXFd5fre1IJLQNoCCvgUbfl6jvHbH/3q/19PLzQqCjlUY3dU0FIwEOSRXnydaXGG4sKZTw6cymzH6ccT0au6DB8HdfxfwmfCj4AABDRxDMNXdOJ1H21BdF4UimkP1oi4J5o8IU3/1XBpb0IPmGJAFyBAuEILKGJpik7AsM/PNrPY1PfvqtWrePreaJ3WoZ3lJo/Tjrynwzu0Fw186USAZZVWHx1vUfB5a5viV7xxhXaEawuMe493hNEoT8na8iYa5qYGI/F4jiOcfUDHCVgWRaGYRjhaoshBIERFAEsgGEYhiD77Mzq8rwJKH7i+Mh9G6pLFOfrOj7afvRPowRXKiRYcPsPjM1vNKt80diPDnQ4g7H7VhcZNIJjZ6eqctQ0gbliUTlF/6HDn8dHDCxbIgAACGkizyj/7an+rWZjHElwtcULvvDtTx3HbQvf/MK2OYfPoBDlyC+ILD8CF3CAi14QdFHrYpWA7px3EgisEtC8ZUqwtsCQTQlaB2eOdYx/dteKuiLD6w09ZXkXVDUwLEujRDQd54QCR+x8J7LMJAwtuEs0UhSBG0as+/os39xWG0umXzjVs9akTqBox7yrUC7i4ZiQJg8MzT26vrhUL28ZnPnlK40YgpTqVU8d7+iYsq8tNIhIMp5Oclu87CVWR8wl4kDG+yiDl7vHbyjUS2kys35gCHr8YOv37tw4aFmYsrkf2rXSFY8kWbZQJZCR9LGJ+QKZUEwTm0pzcRR5p3243KCS8WkIhjqsi23T9qbe6fu2VMuEy+6oLEOTxNaafBxDjp4db+qzZAya7C7//jNDj9y6Jrt5GQTAoM0Jk0AnFDIs221z5koERrHg1OC0kCbWFxu5BxS7XDaDo/CWPLVZIhxa8vbY3Woer1AqmQn5vYmojKAAAAaleHONmcKxfU0DXWPz7kj03ZahO+tL05HoQ9vKVpoUS8nwN+uL8gggBYkDB3t+8aVtGh6hoKkcqTDDBDLDi6XiNEpkmtGyF4oD2fRgeMGtFvJEFMEC8D+N/d/aXAUDcLR/6p61ZT97YGexQvLc3paZaFjIJ0vUkrur80kMfrlvorl/PuwLu+PpUqVMyxPEQcoVi2SXvwMAzFq52x9OM+yx7slt9UXsqsKtJvW39qzNk0m7U6nwmG3c6jhwZui5g+0D04s2f+id5uHNefrNRUYJgfeNzQ+zqYUFtzMYnnD7pt2BOU8wkkwm0mkKw0b9rtc6pm8qzmEZBgBAoEgwlvCEo73jttbh2Yw4wJ1g5iZ6vnNsbY4qRyLwhKKvnen/0o6VC4lgqUSRWfApNv1K+8hKg0pIEwCAJXeQSbPuQOS9poGFdLK/z/rD3x87OGYZj6aWRud9a0xb1fLtm0rXrMj//JYaPk1Y5t3THvdnNtQEovHvv3XiRMe4y+E15ui2bK+rpMh/+Pk+uVaQylVhfJ5OhgGL82s7qmKphC2WUjDMjmKTWSui08g/PLH/iTcbBSsL7ipQIdHEyMzS+lLDD+5ds2dj+QZjjpoWcHcKlHUdwTITgC6RgK7jOv7v4tPCBwwy0Tttwz4YrtNIPaFohU6hpHiXlQi4ECHz7AZ/fCD10fhLlgikPMri8B6enPvMqtw15bqu3rkdZYVFGnnP1IInFS1RXc3C4mxkAo6PkAi4fJXnOsYFDPurD9qqctScIcafj0uv72XbEXASwVXJGsKzHEhBJlxjM53KIBiBWXCuoABBEQRBAAAgnfIv2navqN07MPN+w8BHdCi77PX9E5bxZQsJClSSHxzulOJ429TijlLjbbXmMBzfkJNDYeib52qL6RGvU7ncLuAPvj4aF1GCHJmot2vyJYv93pI8ZzLMpuGHf39yrmfkl9+5hxZSOSrJ0f6perPuSrXF2QQAfIxhXEQJCuSiw2NzBXIRiSIZSlBt0p6anFMIeE/sbZ6cdX79rvWFBoVGJizLUz+597wJaSbgxjin2nR8MRrWUAJuHNwAYsnUtMtfqpFBADzbNV5NEDtqCygMee/s6Gc3Vd1WaSYQ5MDwLIYiz3dO7q4whtIps1K0raZg08YCNc3vGpkLeaNmo+yJw216qcioEEIwAnMLKetM08xlrIcurXV+qXvikVUlmX+yAPRML/RM2+9dW9HYbxHyyFUlOd5EtFSiUJB0iIlWKmVvDlhwBFEJaL1MWGFUPX2iC0ORMAvOhiKtLl/cGYBorFglxRA4xTIkgsXTSQSCDUrJxuo8AkfePNkXTSRNWtmhlmGJkK4pMaLwuVQlBgAWgJaZhV2FJgyGWQCe7xi5oyyPwtCD3WMFalmxTg4tjzPNspzzDwBAJaBW6BUUinw4vTi85JUQZL5Ekik1BgDoFKJtdQWRRPLt0/3Tbt/8jHNXfeHA+FxNgdbmjf3N6tJCuWTG4uRTeI5e7vNHawwKEUleOoHc7Z95lysNygyJ+4b7+lbv+JYiIwJDZ6YXBARep5O3jM9NLXm+sKUWAODyhigSf+zezVU5quF5x5nRaa1aoABE14QrOTr7w3s3eZKpt/otjZOOWIIhYSwOJfyJmCMa5s4IRuCn3mud8wZrbqi6RSUDCKjTKAGNp1jwxc2V/7xny2e2Vmnkwhc/7Go6a1mMxeyznqf2tz5/uLNtZDZsdYM0K8IQPkDVPDpPLkon0293jPbbnIMud8PYIhaLt47PN/Rb9p8dPXh27NDZ0ZZey9aVhQiOGmXCaCIJACBQBABgd/nfH5h+om14i0o2veD5zktHDWJ+BE6IWZIisFgyNWlzjdoWe6yu4z2TH5wZeu1o12/3Nb9xovdX7zb1TtrLCnVbN5crRfSwz68pMP79lirD2twv55vuqytan69fbdKqZcJyk+aJo2fWlxU0T813TttKTOqHt1cr5aIed2jK6nzjlVMhCJqT8MtypA9V5JRphQhN+V2B+mJjhIY3GtV8Cp2edP/NL/Z1MilELynhwclY6qF1FV+6pW57lXm9wSAnaQg6nwUEXfL0uF4tcB1/Zfi08AEAgFoseG7/mZ5IfFeBjsIxEUVkzD2y46eLggPoT9pb/Wj8BUoEGT0Ew5A2i31DnnZ7cT6PwN8+0be5Jh+GoPfPXn3v0YvATXKFWfva8e71hbmz8cBFV8cgEX73SMd7bzbFA7Fxf+DzW/7EzJAMoCtf34vaEdRqlEfH54oUYhJFrkrWEI7jprx864wlkUhwYQOCwCzDnKcEEMxy2clpBkXPeQ0xySRIxLavqXu2fah/YPbhG+oyB1Rem6bFlxYStA1ZvfOu1wZtj24qF0sgTzxWKlEAAAzyT6K2GACwqtjYcLT7hZkFs0TwwtnJlbny9lQiqRa70ykER7ab9a982Ftr0mTUm48QAT4OLm1d/EbvZIYSyGT8H73fEpSL2qdsNxUbH9pZl6EiNIlV5Gl+tSywXBRwYzDqikUdsfBSNKTkWpJBkDsc80ZjJrkIAPDkiZ7dKwvLtLJEMvVG8+BXdq6gCUwloEqU4p+d7E9LqM5wuFTEt7p9Uz5vqUJZblTtXFFYZFR0TMw2NU88e3agadh6Q3UenySyz5RlAYAAZ3yU/UqxaRw5V9sAQWDC7Rtz+G4oMmT/zr/tazIpxDkyYdfovE4hKs9TO2MRFc2DIKCgaFs0kCvjfTBs61/0cLlDcqngVye635m2rxTwOpv6/nb3mtVmncXtYyBGQFIMACiMRJKJFMsQCGpQiivy1HtPD/zDL/dbF73376w1a6TnsnEgCIGgaY8fAGCWiwEAMz5/m9V1e7kJAPCjvY1cO2GOUCfSaXSZDGSg4FOrDUocgdvnnN02l5Kmi2TSySxWYNLKvvHq0Rse3DHdP93QMobwkGfebFuE4DqjukAhffN474ZKc0WOet4T9sUS0WQCABZDoBSTzrwSTJpEzl16CJwriGCzqgi4ddjr8IVgaDbsT4Fk06SjQiPNkQheaepfZdblq6UAgFeOdW2qytteW6CXidYUGkQ8bH/P+Adnx0ctcyGB9IHVBevztHtq8uuNSsCCKXfwxY7JSIwhYFTL4w95nHZv4O3jff/1lZtrtLJ5p9+g5Ekp6uiYbXOB7sbqfIJEaAqjaOzYwMREIPyfD+y8e2NlsEhbvq3yOzsr1hXm8DDU7vIfaRt740TvWyf7vv/M4aFR29CkvSsYt7eMdQ3P9Q7N9o/MT1mWxqYW23osw9OLhbW50WjcEYudHpzZ2zLU2DHx2LOHf72/9feTc+k+64nuiV+/3TQSCLjsvq5p2/EzY68e63r5SGdj39SHfVM9dnegWLNSJvrWnRv2bK8pNChePd7Dp8lvf2WXBEHGnb57t61wJFOYQf7VIt1KpRJDzj0EUun0841de48MnLba1LVmg4DuWAgcHLNP+2Pz3lBk0Irlq0m9ks8jDeEEA6X5BJknE7zbayuo1K+RCvoXnT9+pfHo6aERAVUtQ28oyQmH4j/ds1Wp4pdKlJx8BJafmdzXjPKTucTXcR1/ZfgU8QGTUtw8Pr+YSNfoVbNuf6lGpuHxh71OPoammHSCSZFZXssX4ere/JeVCDZW5TWc6O0IRz95iYBdftJFU3EhhQ3ZvBPu0MY8rVEpuabeo9nIPHZpAqNw9I0TvZdmDTUPWN2WRZdBrpFJKRQq1sr+/CoCcOVYmcDQY31Tm8tMSopnjfjkJH1kbG6VQQkAWF1ifP/Dfj8ELpII/ihKgOF4Xp6ZowQAAIZhEQTGMQzF0FQqBSAIPhcLQUya4WqLEQSJhIKm/EKLI9DSaVlXYbrIfvRaFxL4QtFDLSO3b65sTMZmbM5dBcZ88fkBXLsmZZfaDe1/v+3Xw/MmlWBgyfvsnvW1Mt5ug47CMW8wsqnI+LuGruplSvDHEoBLcRElKJCLXu+dRBFkIRz7vXWpyRtROtz31hV744k8uSjTpwwAQC3nXJXlqXEcvmhhLEXD5RKFhuYPeJ2OWERB0jZ/CEcQtZBn94Ve6hj9p221QhKfWPR0TM4/vLmGGz+BIvUmZePo/ITVsUCi1lTanmKxULxIKWEB0MqEO6sLcs3yhCva2T0Tw4CUppQSQSY+TjMsCl9mJji6khl5x5xTQGBV2guqhlpHrLUm9dqSnMffPH3H5ko3iJVLlZljyUhKRfMUYlRKUu+PzPIJ/AnLPCIXrhXw32jucFl8P3vkRgKDFTyexR1YDIQxGBIQOAojBIJyPQooAttcY9Yrxa839GyqMRfoFcs77AACYHjRDVAmRywCALTPOfg4VqOVL3gC73eNPbpjBeC8SqFzm/LZfCAj+ar4VI1OTqBI+6yzy+ZU0rwMK2gemjsxbN2qkcNacYonwGhmEuCxQeux5iGIBW+f6nv867fFUykWgDKNVEwTNn/E6gsHGFbH46EwkmLTPIzKnlZo+Y6Dl8UNbjvZ6vIrBLQtli4WiJ47O3pjpUaAEt99reGnD+zg/uN3fnPwJ1++KXMQHo3kG+T/uHNthUGVjoeOnR5eikVC8YRGyK/UybV86nMrilAYnnIFnu0Y3T8w+3TjcGTO9e1Htjgi4R7rkkTAm/YFXu20/NPmKhiCuEoDPkm+eKrT5ov++/1bw2Le7WbtKhlRo9Xk6xSFufJNFfl3b6navaaYTxMjM44ffunGDfX5/gRz/4Zy8eYyRU3OG5/ddePqohy19GjXBIVjCYY9cLj7TPvEwMhcuV65scb8pTvWWQ0SmmF//+juzdXm07P2Z796+4aVJuu0e1OV+eEbVvzHI7vu2V7J41F+Efnl2rz760olAlpAES5/GEHgv/3Mxr0tQxMOT22R8fSiR5aj+FaFntt0AAA0js7++9unfn6q9bXXz0oK1KhJo2WZXldkl1be+eGgZ9aZ5uEbynNgGlewiTuqzHvWluVIxb9+tTECRb0YxkvEn3yvfcDhJ93Rb+7ZfEuVYWTWLSawx+7ZgJFIsVgOlh8U7HLCMJt1+TKflddxHX99+BTxAQCARir69aG+E1YXIcBkQjSUjqMwQqMYHyNJBP8kjYb4GDbm8ygpXkYiENKEySB/8mTPqly1UfrJSQTc9lU0FU8xac7GXimgGy5pT1Zj0h44OypX0yqK/4cO/CciM8+XZg2xALQOzpzumbp7c6WcprqWAo/dsrptdPaqtCfjcOn1zWZrSornYyIjC34+jnFZQ0qpYH/L0NaKPDzLmgP8MVlDEAAojstkcuuMJc0wAACGYdPpNAzDKIYiCJxOMzAEIzAMIABBUKa22Gad3lxb0bLobmyfyM4aAteskIDE0d+935Zm2PeaBr9ye71ZLbm3QGdZcLfOuso0Iq62GFzSpOyaUoIbVhY1nepbQpDbiyXrc3IKpTIehhr5tEkmGrK71hbonz7eebWaEoDLUYInW4e+3TqiCaf/fXNZuUH0YY9lU5FhwObUS4SZPmVguQzjt/tbqgu0NH7BjsNiJKSh+QAAFcVTUbwBr3NkwUfQpF5AO8KxN7on7q8rFJB4z7Td6vLfXFcElq8dhaG7CvUlSrFtyb9OKbnJoFwKRaUUwT9n7gnBNPzo9lXfvn8LiiKvH+85PDAl5lE6mZBhAYpc/vpn5AsIAmmWbZ9dUvDIAvkFfPvnB1q+dsMqIUU8/lbjPz2wxROPKperurlmCwAAOUmH2FienP/TE4Mneqc80/4IiPvC+LZqLYmjeQopiiA6ER+FYZsvtBAIS2gSRWAERhLpJOeJNO/w/eLtps7xeV8oii/XGUMAnBydMyj5Gp4AANBlc5appBoB3TBgEdHk2mJjdnIOuKRUmnPx4n6q4lOrDAoSRdtnne1zDhlBuUPJR5qHUv5gmMU/v77gkc3FlXpjvzvgDvh8dv+x9rFFT1CvEo/7QityNDqxgIfjUh4BELjP7e+atHFaAY84p8NA3F4yy7IQxAWRcJZE0DvrqNTKF8IxdyAqJrDNufq9PcNiitxUkgND0OH2URGf3FCZBwBgAIil4pNBX5VUDUNQsU5+b33Z529cgUDQsM35xJH215oHwrGEPxLPl4sMYt52s66UT7/26qncXFXrgqfX5psOJyddvq55lz0QEfCQYDoeTidcscih0fGnDvXwI0yyNu+zZp0QQ2LplIQgo6lEmuUaRTM0hVUWaGLJ5KYV+cdmHTdXmhkJ73ajartGmC+X6eTin7xywsYmvvPg9m/dUj+z4P27O9c9/909u1YVCcW8n4xbx0fnfnHLuvp8rSsc5VH4o9tXoHy0Sq8Zn3V+bvfKBJOcDyUmwpG7Kg2rlGou+Yph2F/ua15VafJDDJ9P7W8b4RXpZxe9Ow1KFkm4ItFTU/PfP9p1oKnPGo7P9ts97lAymS7USOI211S/dcbq2HNDrTsR02ikAZZJ+cK0QG51RwcXPO1WlxchA0w6Ty8IRpmIw28dWvj+F3cCCuoYs921ruS2+pJymVJO0pc+HhnAwgDKFEn/sQ/P67iO/0P4dPGBXIXo7JgFCPGbzFqYgdbn6EkUmQ0F/qDRELjaDwIMRl2x0EUSQY5M1NtjOeX2fWISQSydSLPpJJPimAD3voxHhWPxU9OLVRpZoV7OSQRFBoVMQD/3YdcnX1icjqZ//vqHE/Our95ZX5mrrdTLR3z+9Xkao1TwVuvgVSksvlKgXGFUvd48UGFU0QTmiIVXalXHxue5rCG1RNDaN3121lFlVP5phcWA2/8TCOfn55PxGEcJWAA4SgBBENfGmGVBhhJwPQmYVNLntN+xYdX7o7N9g3P3bbt802Jw5Y7Ufyz0SvFT+1ua+qe/sHtVgV4BAMARpEInt7v8xyYXPoISXMW+xeASu6Hb15aebuofjEF1udIcoRBwFAuG9ZmmBNeSElRqZAsO755as16Gr9Ebyozy3x3vWltoGLK7RBSZ/UdpAqsp0L14uLM0V0Vg5y/HUjSsps+zaylOjdhd3aHYGYfvgM3VOTBdrJBU6OXH+y0SHllfaIAuDEq0QrpWI22zLo0s+aQ02TO/ZJaLSRThhjoR8ChIGobRBYbdXWE6PjDVOGzlU4RawmcvCZe52gZOHEizLAxBb/VO1eeqVILztao2d+BA5+hXblg1NL3YPWG7e3OVOx7J8AEWnLcMlZO0kuKV6Pmbc7STIT+BYY+sKdxcnHN6eOZwz2SdSUviKIWjOhEfhqBptx+BYT6BITCCwEg8nfyXZ4/Gk6nf/uPdxUblsbNjp3unSAIV8al+u3N9roHEUIZlnzjT9+iqUhaAQ93jmeIBdnkkIOsEz93Xl7AFrq6AxtCGicXHGjpDfeP/dMu6h7aZDCJhkmFgFo7Ek/911+Y7N5S/OjgOh5Mnu6fCLGsU8Qr0CgiAriXfUDBMo+ytRTlplrX7Q85QLMUwQpI4lyAEXWJAybIL/jAEAbNcxCTT+4ambynJNYj5+9pGV5u1SYp1xMLN3ZaafG2+Ts5tSIdSsVAqrVx2pOVgUkrqCw0PrK/cUmqKJZODc45nTna93zkWSyTjkfjRtjGBSpzwRbbXFnx9Q0W1Rv5277RRRo86gi3TzkG7f8EXmlvwnR2dixbp785VIijrSgQJBA0kE8FUQscTcxpCkklBENBpRKctUwvh9BQE7s/XJNLRfKEkzTLHu8dfPtr9Hw/vKDAqNhQbc1WSrvH5TdXmcCr1+4m5YDypZdFHVhe5Q9EXG3u/sK3WkQyXShR6haih34JhSIs/eMDuyWEZnYzP3VBphnm3Y/C598/mV2iPpWIHD531yqR+fxhAIJJIdk37OqzuY+OLi2Mz375n3fZc3Yddk7riXKBW4vP24SknReGlpYaheccoivFwNBhJTFtse1YV2BbsI7NLg5NWKZosrtLGXAkjDXkgUWGhomHSRjPgoW1VG025CpI+v1SWFwmHNICQ67LAdXw68OniAwAAjZj/3P4zk2l2U45KKeDJaOqyVQSX4qo/Cy6VCAAAcrngk5QIQqkoH6MuOmUIAD5JOH2hwxO2bQW6jESgEvEHrQ53KlqslF/pgH8mMnE5JxEkUukFX+DNht4bVhU/fMNKHIfH/J5gOu4IBvvt/luunvcouAIl4AqLXzszwGUNzV6YNVRu0pzqHHekU39O1hAAQKfTj46OhsMRhmERBOEoQSqdRlEUggAEQdznE4oiAACOErCpFJyO765fsb959NKmxdcia2hTdX7HyFxdkT5TSEBiqFxAuf2hwxO29XnKTKROX7O+xdkSQSydIHBkR03RhN2loPkskT6XhX9Rn7JrRgn4OLY+V3Vyan6VVs3DMQyFakzqZ453rysyTLl8wXhCTJHoslBAYGi+Ufbkuy1lpnOD6XMvVckuWDYIDA0teuuNynvNWnEq/WTryPCE48mG/nQiWmfWlRuUYDkoyVxBEkXq9AoaQ3vs7lFXYGLRVWtQcuoElxmPIfDAgntNnvbW2kKSwH55qPXNlkGDTKiVCVkuCwKCwIXiAPfmm/2T91SYSey89taRN+4AACAASURBVHWsb5IFYFtF3uneKSGPrC/LccYiisvxAQBAmmWVFA+gTKGOWq1VW7xhnYi/vsgoF9BvtgziKKKTCWEIonFMyiMtLt9CIIxyrABCfvjCsX975Ibda0oMSvGmGjOOox+0jz5/tBMR4rkykYxPNc7YZDRdpZFBEJQpHoCWJ+dcj9hlNSAzpov4APemSkCtN6nKRPSbzQMJIb/eoDOKRA2W2VPjCzdXGLbkG00a6cFjvV+8rX44FCT4xNOvfPiD3x9rG507E47cVaheq9YQKAYjaZ1IiEKQIxhpty7GU6k0y4rI81oQZxgAQdCEw2sQC/gENucJWR1Bs0yoEfEee63hpw/slBNU7+D8b0+2P3jrCu7mjaXiKIR4E3HVcse6i6JSAUUUaeXri42fWVu+pdSUZph93WOWaYfSKIgRgnw5b3eFuW/edcqy8NjG6pvKDF9cWVggk7hj0cNtozYYzxPwzs67p1yhtmlP77w3mkwnk+ywx+WKR6Lp2KQ32LfojqOpx09PafLEVTSlFRILkWA8nXbHoz/47ZEACa2vyl9ToKUJVC0XvHq6HyaQkw5fLoXvPzu+yaQOx2K/Oty+sSKH4TEYjDhjkd4lp1Il/F33RJ6E51twG3R8GICZgP/I2OyPTvSfPtGvrMppsfujM0vyWhMvCVmcgTfv23pvpfnv1pWv1CvKZfz5oL9WrnzxUMcNmyoWkmGR1ycszl1VYUyhiNXm8amkX1qRa5ux8/k8FYX2TNk3lpv7rIsBHn3nltLtek0g5DndaoVjgaQn+s971j2ytkbB42WkGyiLb0OXfHMd1/FXj08dHzApxc1jcz4YXpej8kXj+Qqx8gpGQ9n4k6Ooj8DHkQiWAmH4WkoEV8qSElNE77yzZdZRIBetytdxEoFBKRZQxN7OT8579L/f+LBnZP6r96+XKHmueMSbiJsFIh1PtEKvHlry8HFsW1nu261D/7tZQ/tahjaU5lL4BXMYTcWJK5ejZAMCAMPx/MLC2RlLNBpjGBaCIARFWIbJpgQQBDEse86QFIJhGI4EAzn5hT1O776Gvouyhq4FJeDTxPqqvIs6Eogoont2yeIPa4WUTiTI/PK17lucYtMkgqMwwifxVbma9/ot64y6+aj/E6YEFIYK+cj7g3P5Mj6fIPkEUZGrfO5kz85KM4VhVk9AQlMIDEMQiKTiIpIuy1X9em9zhVlD4qgzFlFdOCeecMwbia3LUQMAftU8OHKs578/u+2mFXkN447Pri+TCyh2OezODlwAAEoBVW9UqvhU65yzcXpRTpMaIc2Nk4fgJ8ftO0t1MIQYZMK1RYbn32t7oX1wwu7WSgQ6qZAz0U8yKQxGOXEAgSB/NPH+kHV3sTHDB1gWvNE86IrGt5bknOye1ClEFXkaRzTEZQ+yy8lCGXCkQkpSCoqXhtN1GuW+YavVF1qTq67OVb/TPnxy0EJjqE4mxBBEI+IjMNy/5O6dc/SOzLUOzjz+9duSTIphGRRGDErxmtKcCW/AMrfgdoX4fOqdfsvNpbkyHsUVD3xl50qQtZ6TDJtpB5E9Ju77FMtiF7ZWTLGs0xcicOxbO1aMe4K/PNvXM+MfWvDtLjQm4MThsyMYhPzz/VtVCvEjGyq7llxOh98jpmebx440DgdCMQSFDAoxheICglAL+blyAcMAVyjSObsUSSRTDCskCe6SLQUigWiiQCUBABwcseZK+M3jC20jMyf7p1Q0/T+vf/jt3xzcWVn4ua0rRvwuZywsJcj5cLBEfL5kK5PCnn1GHAQUUaCR/fzFE49/45bv3bV1MRi2Lrp+09D589aRyOxCJJkoUkt5ODHlc3iC/gMt49++YXWfPejpGn/y4e1fqC/bXqBPM8xSMN5v856eXDo8utA24+q3ew/0zQUjCZcn6opGOme8iTikJnizM+5XjnZ/4fY1S7E4TCAYDjXNLA6K6Wcbh8oVgh990B8PJDqmHQcH5lv7R29YVTDjix8ash0asp2aWNo/Zo8FI5YlvzWUGLYHu+e8bTPuY+ML48d6Hr55dXWusn9kpnpr7XqhoGFsTjC2cO+6sjqTGgAAGObJ420rVarHnjq84A26kwnaJLt1dUGhSvZut9XqjZflayu0wkAwvK4op8nqXGnSdk3ZRqLx0iL95+py50bnJmdcW2vyfUyShxBPf/32Or3mYhEpiwCw57glC4Nr+VF3Hdfxl4RPHR8AANAE9vLB1nkAVakkcj7NJ7C/WIlAwiOn3QEJTV6j9sDgyhRIzqegVKp13nWRRPAJeI9yO3wGpbhjZPbWjeVphC1VKZQkJSVIAECKSdMYXigXvTc4U6WV8Sn8fyVrKJFIG6WCMwMzzQPTHyCRG3UaYrmQIJZO8DDq40sEEAAYhpvN+bNWSyQa4yyGEBTBMSweT7AsiyDIcqkkxLIsw7DxeCKeSNhnZzbVlF+aNQQuKSTwxYNklrt8ZpL/KFzakQAAYFaKff5w+7wnO2sIZNUW0wR21SlBduIQjaNVOvmTTf1XogQqIe+dtqFtFXkffdiPj4wpzZjfbRIIi5WSt/qnOcchPkFU5SpfbuxfXaCT0tSEwyvlUQgMp9g0BqM0iVeYNU/ubS7IUURB6iI+YPeHcBRRCXkAgKfahif6pl/53n0CAn3jdNd3bluXWQAMy3LR9kWhoUZIbzBp+uaXGq2OcZc/TyaMMklfKDW+FFibp0wBJs0yYpravaZ4eNRWX5JzpH9yyOZMpRmTQpxmGRhC2OWmxeMuX/PMUrlakskX8kRiTx47+4+71+QqJY+/1Xj3pkoniJZLVeeDpyx1ILvzMQYjSoq3FAvmKwUSnDw6aePh2LZyk4giTw5ZPhyaqchR0zjGIzCAIL+Ynn/zjdN1edob1xSTKIbBSCgZTbMsgWLTvtBntpfreIJnjnf1uLy7io1qIe/EwLSQJuqLjNkrOcWeK5hOAxbKCuagC8fGESEWAASCXmnq31BsXF9kKFdJSzTCIql4MRhZDMcK+Pxn3mu7bVs5zENdvtimYuONdUUzCoF11Jqn4d+3fQWKIXs/HPigdUREU3laGQAAhRERRWiE/FyZIMWwjmC4ZXrB6gnEGbbdYi9UScU0AQD4RdPgvdXmtzotTx44HZn1qaSCdRWm4Zml7z64LU8nV1C0kuLPhvxplpGT5xdJdsyaeVhlmOF7TYPvnxm6sb6Yz6OEFP7VHStFQp49En9iz5aiHJnF4f3t6c7GXuvxgekCuaRUp+ywurzWxTs2VqjEfKWQpxdRK3SqHQX628tMNxYaqjUyAocsrnAsBKxNg//9ma3bK3Uygn6uffRnvz6QkJKwUGCNJMeWAqcmlk5OLLb2zzqcPk+CWQiHEjohJMSt0VCSomACrtQq7yg1bTXrNCIeG0utNyhHR2Yfu2HlAyuKvry6ZLVBUcqnW4esphzFbw+331hX7AHgzKD1wbIcG0IfO3a2QCe3egNffeHQ4qL7rQ96kmlGe9dKIhpPz3letLqHmGQUY7eYVYOuaDTGrsxXvNTQE/MEzobjphzN11YV1edL2jumH9pad3RqpsAgfXBF9Vd3ruIEJTajF13IBDKA/+hn5HVcx/9hfBr5QLFW/r3Xjk9HEp9fXboYivylSQTTdu8rbzY1xmKr83V6AT0Tjs66/DlS4R862J+IK1Eg0RUkgmKdYn/7NSwsZpddHSAA1pTlHGkf3VVb5EhFdTwRBqMYjF67jsXgClf50qwhFU492zn+zf98yxWKKTdXiKxOVzRZY1TGmSRXjAH+ELe8CBAAGH4xJQCA5eyGuFgLygKKICiKsOmUz2G/e9PqqQWfXiHJ7vCaLRFEU3EURj5iJB9/VV9KCbgmZR9dSHAtKEG2AymNoxQC/+hIx66iXHs8eBElaJ9d7J6YV4n5H79P2UcjIxEsRYMaWkRiaEGWCSmN40U66W+OdNSYNHI+NeHwSngEC1huA54mMAxFfrm3qaZMr+WfV1QAAPO+IA/HpDwSAPDjkz0bjKq7N5QHo/GjfVMPbKjM/Fo2K+D+mfkRjsCVWoUnGDLJRQ0TdjXNc0QjgAHlOimFYiiMJNJJkkC3Vhe8fbL3jvoyo1zUOGL9+aGWGadPyqfUYgEKQWmWbZ11DLv9Gj6NkVjLku+t6YW3rYtnmwc/e1M1H8GfeLvpOw9sdS0XD7DLEXbmxmEvSt+HIAlBKUg6xMZMMt7xsYUJdyBHJtpaahJQ+NsdoxSfckZinV7/7TrJkVPDn9laFWbSJI6hKKBQAkfQSZeHgcBKrcaolKjUoneGZufG7QQCv902dOeaUqNMlAmRIQAYwHI3DBfMsVkDS7NsjGERCGK4TsYQxADAAPDdV4795IEdAAAEglzRcIfVfVNxzhqj8h8Ptrec6n94x0qKpMddXoJGfjYys0spm/Clb95U3DHldgcDRoPYpJIfODP001dPLrgCqTRj1spYAFAYkVCkViRAcaTZ53cueYQkMe3xS2mqc94ZTiQ3mtRaIbEUSj/1tZv/5rZ6jz8s5JFfuGkVAAACUDQVX4pG9DwxgaBX+uiBlr9yv/Dt3xxoH55FMFQgF2jkQlck9uTwZKmYV2WS3ViQvzJXd3tNSQQkzw7aHt5U3TOzCCWiCbGsa3L6UO/4/q6RSDQ1sehJphkcRRiGDcaiEy7fB+OLFAu755Z215dKpdQKjQqOxBu6Jv7fg9vLdPLbK8xfXFl0c7ExXybsHHeJ2DTMw1/es+UuvaK5efDZuzZ9fnVx76LTwoDJcMwWT8j4+EqD4vX2sZnB2Se+erOUJgAAYor4fy8ck6nFz7VNkyx7LBCaPdY3l04PnRnZWCA/0Tr2wuGOtwfHlSpROMZEPOHiNWazTlGsFJNMwh1hbtHKuw5292nFMjGqlvHbp1xiEiLUKilNPlhrXHI6Ojtn795aGYjFH920ckdhvlxAZ0gUN3vZO23Z73/8p+J1XMdfBz6NfAAA0DFld43aJ9C/JIkARZ470YNj+Mtt423uSEgjXkynO10eeyQmZyERRVy7rKErnbJZKY5H423zrkKZUEgTJzonNtfk8wjs2hUWZ3/sQQCQOEai6Bsneu9YeZmOxSaFeHjRwycwg0RwYvDadizmCBvDApNS0jy88A9Pvn/a7l5ZX6KoMT9YIK9UKl881n3jCjMfJ7On8eN7DXHAcVwmU9jmrQCAVCoNAADcHucyQBYrOFdIkE55Fu11VSWvnuhbU2a6KGtozO+SkzTnHHVp1hDICiYuev8jQF+uSRlHCU5YFqt0EgrDMr/5ydgNAQAMUsH7x3t+MWjZU2peSoayKYFJJrJ4g282DWwqyeXaoP6ZYAGQk3S3c7ZCpgPcQl02IcURRCWgaBwv1st+e6yjzqSV8akJp1fKIwkUZVmQZpl5p//Y2bGxeYdaINBlGfj021x5cjGFo0ML7uP9lrvXl9cYlCcGLCKKXFtsvGgM3BpgL4oUIYhAkVKNzO4LmRXi57vG+2a9O0r1OhHFTRRXKopi0JqS3HdO9m6tLbi5rvC2VUUYCvfOLLZNzrMsY/eE/rt7Qq2UjCSSMMMUSQR35qjVqfT4gutLG+uODI0vLQbu2FBxng+Ac+IABAADQJpl0azHAgvOUxauzlguRqUk1WxdGncFjDJRvlb++qClz+ktEWBjI0tn+2e+9/B2s1Y67fY7gjEMgQOxRN+8SyLG1HweCiOOcDQeT1UqJc8fbN/bP35XbXGB7oJypmx1AgKA6+jBOX6iEIRAEApB8DKhQiDoeN+UiCY3lOQAAIY8DpNA+ru2kW9tqlQL6Hya7Jla+CAU6V9wy2jye+0TuDvmj0c3lyjuKMn/8qaKMr1SxMP7Zx2T3sAd9WU4iR1tH/vhC8faBmdjiaRMSAMA/fvQ9E0GqZYvWPSHNuTrjoxM7x+yqnnEvC/QODB958qC3XWF0UTy+cMdN60pyZgppZi0LxE38EXgwiD1SmgbnLE6vP/+6M5VpbkdC67D03OvDYy7HbG7CowDM95Kg4LCUASGZn1+CkEfu33jLXVFD26o+rsdVV/cWrupJLciRxGOpXyR2NMNna83D7zZPrR/cPSM1ReeXZgQ8ZR5mpcbBiZdEZpi/+bHb9tBcmVJbolaUqgQ6SQCpz8cCUdJkJoMMmO2pbvKchOx5OGu0e0VJliQinhiA63DZpJYoRPLKOTQosOJpDsnA0UKoZRHhOPJ031T//rMkalwMJGIBCghoOEkj0CH5v2+sM8fWVmbY3P4K/LlE0N2EEt/+b6N1XnamUDYuuhjecKb8lVvvNuGpNmogrddJaWY9EQ84eQJ3BCEJmKVUrRIrYrjjISk7lxRrhTwQFYbAWh57ymD7B9dx3V8CvEp5QNqIf/pxh6lTHxTZd6cJ1CokvzvSwRy0UuHOlrtgS9vq3hgbVHHiW57JPqD9ZX3FRkRBHEGI9e0sPiyp0yiiFxAu/yhhunFWyrzOkdmOYngGhUWM1lP58xU6xSi0z0XdyzmKAGN4YUK0XuDM3wMGbe7RRRx7SQCAECFUfXzg623P3l8xOaJC/jFSlmpTvK5Sv06jVYhJkfGFzrnXH+m1xALgFAonJ+fT8RjAAAIgtJpJosSAAiCWIZhGBZG4AwlSCXiizPj71r8fUP2+7ZfkDUkJ+kh76KWJwYfWUiQ/bo4xLwcLm1SxlGCeaev0bpUrpZRyy46nFfpS019JXrZfMwPAHS1+AC4Qp+y56cXLqIEFI5GYql/O9jfPjxxS10Rj/xYdR3ZyOZLYHmitDzRuN+dyR3iKMGJSduZmaVSlUTKo0qN8qeOddaaNAoBb9rtl9AUisDeYPTFY527NpdsLy840j56qnsyo7QM2F01BiUA4Pjw7Dt9k1/fXKUX8z/onjDKRWUG5WWGtbwTn/Hd5zQDGIa1Il7rtH2GxHg0seTx12plFHp+WXKUoCJP/fuDZysLdAgCFaoUdXm6VJL5lzdO7j3aacxVRlzhHBzbla8xiykcRlvGrDiCrC8z2Ra8EA7VFRo8iei54oHzAf85SsAl6UBZJqTZy0lCUBE2VqgSSAjy0Pj8+7OOGoVYQ5PvtQ88/XJTIpn63E0r1SKhWsjHEMTmC3XPOTyhWL5OrKWF8XTyzMzSpnzdTTX5n//xG1K5oLlz0uUN0QSmU5y799MsC5aXMRfxw8svbqgZJsCN7Z22oVqTxqyWQgA4ouFJR1BE4rU6OQDg1WNdd24s/8K6cm8g0mrzJMOxSo10fa56T2VhkI2641EYh6r16huriwq0skmX90DvhEzGL8tRPfte67un+5/c1/LOmSFZMLrGbOiZc9xema8R8aMp1h1N/N3GihK15B9fOLKqPHd8yXOgc2xscuErt63lPANiqTiFEo5YWLXc5JvDRxCDZw603bqhdHNV4WI4utqkLlVI9/fNOVpGcAgu08l/cKh7a7F2LuZ/58Ohe1aXGeTnFRUAAEnAuTJZhVFVZ9Y9sL5yR4VZwqcmI6nvbqv73ed31ypEXrujF0qNh8PvHBpgAkGGQuMM22uxv9k69MLp3n1nRw/2TBztmZhhEmk/+9rJ1i6LzeYNTgW8HX32ActC37TTM+f5cGL2eLfFZnWN91nj4cCE3bWvY+Qn+8+88HZLQoB+Y+fqXZX5Y8MzCaU0FYx+8+aVh3/8BZLGO+zOL9y7KqLSzPdb79pVp9dJTy24FhZ891QUGAji2X1tSoPEHUuV5+v+aVN5jU7R2zdZrxZNNvTZdcqduWooldqzsmpDQS4Kw9z5ZlKD0oBFlieSXeYGH/3cu47r+OvGp5QPmFQSdzhWbVC81DFmkgr0EsFfgkRg0Ejfau75wV0bU0SqNF+9r33i7iqzUSqQ0MQn4D16payh7tmlljlnkUK0vdr89sk+Lny5FoXFFx0IWg5MuY7Fawtz5pY7FoNlAsNlDTVML927oqihb+pqFRZn/nQ2aAITUkT3uOVn92/+zo11KwulIgLvmnWuMMgolLgqXkPc3822G0JRZJkSLCsDMAzDMJNm0gyTSqVxDENQJBCK3Lp+tc0TNaqkmcBo0OtwxMIAQBfxqMtSgux3Ps4VzW5Sxr1DYqhCSC+4Aw0W+yazjjsIC8C8P3B40DblcOwoNBuEoquYNQQu16fsUkqw5At/7uUmscf9pbvWvdc+XGvS/EFKcFkCAF0yOTKSVlxoQlqjkwtI7IPRWbNcJOPROIq83ty/syo/CbGHBiyBYHTvqb5Hb11DSYhKrXpDZR6Jodw0xlJpVyhqVogBAM90jvYd7fnXB7ZRBPb4wZZ71pYrL7cXcGm0vSwcQRgC58pEPqe7XEwrheSJcVupUkpmWZ2iMMIniYp89esNPSU5ShLHAQBTNvcTr3w4LRADEvnh7lX1OcrTo3YCQadd3p8faDarZW6Xv3tsfmWhMU0DhmUVFC/NshmZImPpk9me5+Lvi5ZTmmUVJC0j6QATK1GLmkdtfXaP3eufWExLJbxKnUzMp0pyVQgE8QlMI+LTBHZ2ZtGfjGsF/MVg9MXO0c+tLDzQOvJe4yAt5T33jTuLjIqG7onGfksknjRpZQwAGAxnOED2n4aW2QKSNarvvHL8x/dvhwAY9DjyhbIPpxbypAKTVAgA+M5vDv7XV29RCWiHP3xruelHN6yU0oQjFH2ybSSeZPkoXiAV2iIhdzzK4+O3VBU9srVWIqCmXL6WhSUswcSLNI/dtGp1pf5Y6/iBjvFEOM4g8H+e7F2vlKzO1x/pnlCKBY9uripQip/Z22rKVy8m4ha3P55KxlPpyaC3SCjHl9vxXrT22OU3ObQOzozPO/fsqPaE4tFEqkIr90YSGAu+e8e62jxNy6D18LGzp+w+GoMjkeQXt9SCLMTSCQrBuUNxiZoCinAycRRCv7i6BABQJBfds6Lo3zZXr5MI973fTG8rv6co559vrt+ztvwfbqrfUmaqzdPkKCXTMPLMXZtuLNMlEumHN1V/bdeqHXV5/3zj+ptri7dW5BRrFG5n4M7N1Q/Xl39z95qv37Dq5tpCtzNw4uSQXCuOOcPBcNyolNyxvWZ+0VsGQXfVlzqD4f2DUw/vqllKI6UI3Dk8t6rOvL95qCkBZHHmhZaJ1uOdSI7OyaKlckwvU2wu0rzR2JejELY0jYmq8u7P55Mp5MsbVyj5F3AqDiwAYLm2hFnmCddxHZ9yfEr5AABAwiNfPNkTg+ENBXp3KPqXIBFopcJ5j38hGtxZkF+skPX3WU67A3uqzQCAT8B79Epe9XIBDadSnQueOyrzCAz51btnSAz1B6O/ONhuNIqvXWExB2i5Y/GLRzqqy/WXhrYmhXjS5TdIBAbJVWtHAK5wlU1KyZzLv8KsKdJIhSS+mPLOuWJymua8hlaXGNuHrYU6OY1fwEn+WEqA4Xh+fsHk5EQiHmcYlrMTQhGEYZjljWCOFMAAgFQqnUymYBgKeZwbVlcfbButLNDPxgOOWLhcolRSPOWFHQk+DiX4OLhsbTHHHmcDUZWA0Aj57kjk395rn3WHblmdWyKXvds+tLEkV0bxRrwuOXXe2P6j8QcH9tGUAGGQh35/cqp94Lff/QwlpAQ08fzp3jVmPf9CSvAxCUA2MjFZtuMQAEDBo8zL5QT5KmnT+GwCpA/Z3U2hsHtq8Ws3rdFIBFznAQiCOKOepw+0VeRpkmlGJ+EDAH5+us87s/T9h7cDAB4/2PrdOzdeaQDQJbvvGRAIUqVRRNjkkjcSisXGXX4EhlUCOrNxDkEQheN8ivjdwRaKwD2ByO8Od3r5wi9vLiVgUJ+rrtQp8hXiw4NzPz3c1zsxN9Rl+bB7sm/C/vf3rk+ibIVUzdU0Zzbg0yybYFhkmR4wAKTSDARB6eU1xi7b+3BrWE7SGh6/wiCsUsp6lzzOeMzaPrbnxhWjTm/PzAKGIHqZEAAQSiTswXCdThVOpNqttjNWt0nI+9vH9zlx9qkv33zzqpIcpWRjVR6Joa1D1see/mDJEyRQRK+8uFYkvSwLcGSAG8/x3kkhRawvyYEAcETDCpL3fMfovVVmHo4dPTsq5JEbKvPmvEEaR1caVQAAg5hfo5PfXp6bZthZX/jXrYMsg5AwViaXWUO+YDLOE+B31ZU9sKl6SkAiXr/d7cnVqJVq8Y6y3HAs8czx7oY5h6Vv+tkDbZO+QJlKurE8790PB9482fftBzYvotBmg5KHY0uhsDMcnVj02XyhcCIZSaQAAJzmlr0sM4v2mQNtO1YX5KrkEw6vQSLkE9i+wZlthfoVeRqDUry9Lv+b925iMaZxeOGzGyoMsnOdOgAALABpNo3CSOYJAAEw4nWeHnfsLjIqs7pPQADM2N2N/Zaf3FxfV2zYUmwU80gAgJhH5irEGIkr+NQWs7ahd/zhTVV3rCqJYak6tRaCIAFFmJTSfJNEwuM/v691U7mp3e5oHba+uL/tpYNnGZZVCXnPfufeX/ztbUmGGQuE/2ZDRX2+7un9Lc8096Vj0ajZWBBLP/HaaUOZYcwbXGBYYySUEvKCUQY4PS///c1bcuQfNI5sXaVdiEc/aB1zzPtnpIJbi0WPrlpxV21xhlBlg82aPfa6LHAd17GMTy8fMMhEHRZ7pU7+Tp/lUongk+xNBgDAYGAJep2xiIYvaB2Z31FhhiFoXUVur2VRJqD0Yv4n057s43iP/mZv8/efPdLYPy2j6ckl111ryq+d91EmVDUoxU190yqaFyZSl2YNkRjSMrO0IV/bc/UKizlceqHr8rSvNvWVG5QSmoozTL1ec3zCxnUoI3GUxrFff9C+oTQH+1ObFnMgcLygoJCjBJwNCgtYBIYRGGFZFoK41CEIhmEEhgEAMAQz6eTs+EhDGLz23tkHNtYWK87ztIsowdVqUnYluyGXN9g25xaS8MvN47fVmGqL5PU6XY5cfGpwmsBQo0wkp+gRr1O5nAvx0a+LtkIviytRgmq5/JVeS6mcPzA+H680etn0WCKxVind2zJUc6FKwhgz2QAAIABJREFUcNEf/ZjIDE9xISUgUSRfLnqlbyrKsGaN7MX+KR2GjLcOPbSpOhBPABjE2HPmQhAE0SReadb+9kiHVkDnqiWLwcjTbSPqFPuF3auG5hw90wv3rC2/9E8zWRafVxowBICWL8AoIBRhGprfOeccsDlc4RiFoSKKYFg2mWb5AuyVIz3ff+bokjewosq0lGQEQnJzrrJjYn5TSQ6BIqtMykIx1dYx/j9fv+3GVcXNAzPf2rPFGY+oKX5mDFwGDrTsenTuwrHnfD9RCGKWh5RanrSMsCAj6QSSXJunKIKJg02DEb38zpp8HkmcHJo+O2nTSAXNFptWT9WqNTohf8obOj2z2JCKeEbtwWTyZw/u/P/sfXd0G/eV7m96waB3gADYeyfVRVWr2HKJS7xuseNk053EyW7i7NuW3c1uNt7kpdppdopjW7blqt4LKUoUey8gAQIkQRSi9z7vD4gwRPVYVva88Ds8PCjk/OrM3G/uvd/l0limqrFayl9fW/CZXStjieTpPkPboJFLE0oxD+QwgVx3Sub3nvMjDYXKEoUIAOCIhNgU1Gq0fbKuCAJgz6mBxlJ1sVoy7fSJGYpPfZh5wgKgFTDVctGdZWqWhaacgZ+eG04nIQbDy0Sit8cNr8w5diolfhiiGUGP2TExZ7N5/CiGFmllc9H4I82lVQXyd7rGPjjU92+/P/pe65AyXz4GQ2uFVKNGhSBpHxtrlivL5UI+iQMICkTjU07vkNU55w2EE8lgIuFMJBgYSaXT7nC0e3ymY2zmiR2NrlAsHEsWy4WD865ZX+juSl22wzAMmTzuUCDymY312dOKBSCWipOLzoHsLhqwuazeyAM1hblnRBqAr/3kPT8BNVfq7qsrRpFLrvnvjZjqlSLLgrdjcu7xDXWDC3YRzaUgGEXgaDzxwbBeb/PvH5i0zbpfP9b77pG+kD+yokrXM2HZ9si6o//8RF2RCgAQgWFPLP5AbeG8N3jGbHl4c02BTj02Nfvrl48nIcDLE6cRuEYrUcrEm5XiyIytYGXl6gp5ZbH0UOvo+hWFvz/Qh6XhWZrc/fjWzVX5ldIrP6hKL7pBWMBC4LKacctYxl8x/nr5AAAAgaADPRO+FHu5i+Daz3TZnKvnLQGJ4gvRUJVIni8VtI/PZIxahsCFNPGL0wMtxSoOkSnc4xNx/mLao1OeYD6f0cgE7UOmB7c1uCjON3c2n5ox1CtVCHxr5+MSZA5dV6zafbzvilFDKh7nvNnOwVGtkHcLE4uhKy00iaM4imS1hmYjvtwKZQoh0z5gPG+ybcq5GYObdxGwSygBuNgVCAAERiAAAfBhYjECwxm5IRRFdHH3GWdi36mx21CRAFwlt1jNZ3onZn99bvLTGytEQrxSePHG/OcpkEI31rElpYu3NJbsO9j1sskmzBMZQMJNYz/fWr1FrdyeJxeQRBKB3mkfbihQMiR+g8e/Ij60fa9ECUqk/N+Pmv65fVSVgHpMVi2Ps7JQXaGWGt1eeyCk5nGzDy9TLGv0h051jHePzSAktn9iZo1Kumtl2ZmRaR5NrinTLGk3a4hfZ9UgCAJAQtJigoqyiWq55OzsQqVctBCMDM0vRBPJNJvmEGiZVjFitJ4fnplH0Z3VeSenrc9uqOs1WEgMVQgYCIJm3T5bJPL3D7S4/WEMRTbUFzliYRnJSaTSmaD8bAIDlJPMABZzG1gAoEUfQtaZAOU4FqQkLacYTIC8d3xoU4m6ze3Xe0IrZUIRQ7/VNU7gmExKKSkOieLvDBtpnex+HmfW4Uuy6QKdTCvk8QgimIwBwGY2gE4p2tJQTOLYq0d6Xtp/QSLgFKnEudyJzfn93GvHvv/YHSwAw25HjUh2YWaBS+L1KjEEwHMv7v/+F3YBAC6YrCvzlZl/Zxf/EQIgmopRKKHhMw0q8QPVBak0O2zz/MfJvlPTDp8jbPf7HltZ+PCKwvp8iZCid1QXpCCwb9KiHzYYFzzOYHhjma57bJZNsyzLtnxyndDubeuc+v3BzrND02wastr8CATny4QcAmVwrEjKL5YK+CROYOi8Jzjo94/OOCy+YN+cY/eBzvp6rSUQm7R7imUCAkVe6hxfkSelMRSFoWQ6vRCKzIS9fzzaf19TWZFclJ0HAECKTWEwkpUehgAYcS8MzvmeaiojL32icX7Y1DVp+dSuVdUqMY6hLARwFAnE4p5wdNThbTPMSzDkX187ruQzbizudMe+OqTXnxu7MDj9x0NdxzvGnKE4J8GurdKtLNcGI7FtzaV/ONiprVS88Lfb83g8AIAvGj+sn723Mt8dijx/qKOsVHnSE36j3xTqN3vVYjhPWi7jfeeOhr9dVSqm8M4e46fvbthWrjs1btUbLMPjFn8yEYynA1Lh8c/v4nCRcoEkO8Zc5J4vy4UFlrGMJfir5gPFCtH332t7eGV5m8Eq5pBimhBwyGu7CNicS+etRTaLoEorf2PRbNKIuB+c6H97xv5IfREKwzAEGRa8Sv7HIvQJrplF4I3GKRx9e9ikYSir22/BwFd31agVnBG9Uyih5PTH1aXsnfvaUUPlcsGB8dl0LP6jve31OnmBXHjtw94IoJzWc3F5hbKBOQ8Xx5Q8GgDQWKIenbF/9Kiha1CCjM0FWABYdkluMYIgd6yoP2SwXl6R4GOiBEtyi13+8G/2dpzpNSQr1TaHZ4VOIqcvLtbtVCDl0cRdq8onZhfyKcLeO/XdXc1rtVoOitIoIuPSBWK+Kx5/59zIjeQSXANQzgsWAAlJG/0eEUFlPqRQpFrCn3d476zM+/zmyjwev23MXF+gUPKZEJtweiMShs5w+0QqPe8JfumulTiO/uFo7+lZx48e3ayT8Pd2j5cqxeXqpU86WXBJCu8VketAIBBUQtH2WLBczj82Mb9KK1+dr0ym055ItGfWnk6DL9+7ZkVtfhxFTp8dHvIEW9RiKJHe36u/f1UlDEE/eP8sT8C0lOS9daK/qlBRXaCwR8JKmoEXrf9MK0v2T7aTS84j6NJvs+gZnIknUmNGa9upgekR0+Sc08HnNMgF3TO2zqmZEr5g3h14eWCyFoF2f9C9o7GEyyG/vn3FjCdg9YcoFOOTRDydTLHpNJuGIFgl5Ts8wR/uPn1+2OzyhwkczVXjzfTnSP8UjyJaKnQQAAuRkJCgzhitZVKBRsAczQkWwhFEvhiomTuE7A0iM7Q8PqdJLXm8vjiPywnH40MOn5iiNFymQ29dVaGIwizFwQfmvc8/uKFaIxu3LnRPW9fWFdxRXzzvDnx5Y+2ujeVf2bXm0W31fAUjwImpWefzr5164d32F98716e3ODwhpyfEpgDLpn49b1+Hk3wIDnrC83OuNMv+/YPr5VzGGggZXb5TU5Ypl5+Pw45gpMtsM3sDeru7bdJsmHVVFCgRGPJH49FEMg3YaDJOY0QkmQrF4rPhkD8Uw1Dk9xf0O0rzUAgAAAgUCUTj7lDE6Qv9/L32VQ1F1lAkBbM2b6jfstA3az8/MXegc/wXPZNKDPneGyesens4HB8zWdu7jbTZmS8T1hUo7m2peGrHynA6XaUQu7zh2QXvlsbiH+w+HY0n9/3H0zAOSUnaFYx884P2BpkgmU498eujJAW9OekwTdnY4ZmAWvSZhqKHGnVf2FQl4eHuYGzfsaGvP7i+MT9vwe8/2tn/wZAjaPOY4nFKq9r/1PYYkigXSK546c6tuPJnXOiWsYz/7/FXzQcAAJ5QRCZghn2hsUETxpBNOvnVXAQsACDnfvDnGU/XAAajXAyd8LoLBAICQ15vH8opT9a/Ml+uFXEZArN4gygC3+aoIRYAlYA5P2U5ZrTF0GRzkWLgwtR/PrpdzeHVaOT7uidK5ZLcbMVbi+xsXyNqiEsQGASePztiHp3rHjbfs66KS/35dh64dHEvX+jcCmUyisPnwacnbRUyYSZqqFIje+f8aJFCtGRObipqCAIgDQCB4xKJdGJinGUXZVMgAIGLhljGpkqn2UxucSKRjMXjIY/roQ0rDbalFQnAZUXKbhUlqClSvnmyn6GIGbtn9/G+mkLlM59Y06QQdUcDxhlPo0qSKzd02ygBQ+JbyjQvnR44ZF54ekVlFE1kGyIxtEDMd39kSrBkk0AACHDSGPBmKQEXRzcVKHptzhVKeU2erEIj/tWxHqWa2yxTijjUqM0l4lAoDM/7QhwC04i4SQQ+ML8w2zr68MaafIXwv99t+9KOFVzqEo3U9KXFgK+xXrkGNwRBGblPER85PG4pkwikDCXjcnRiLophF0zWg37PLp2yqVglEnFPnx7uG5sTUyRNYWMzCy+f6n31mQcYEn/ul/u//skWUyxQJ5KBK9n0uW+WfAvl6Dle8X93H++rLVI9fdeK//nSPTU1Ko1cYBwyH7swgTapp2zR04e7D3WMttsDZ/d1R9MgStJf3NZQrhJqhHwEhi2+oNUfwmCERxIwBMdSCQDYVJLtHJv5wRd3VRcpj3XpW/uN1YUXA9syDb97YWxDZX6emAcB4IiEJAT907PDX2+pZgF4+7JgoctNzNzTOXckJRLenWWaz68sBwC80W/on1vonveeMdgXAtFNpUqawfa0Dj21rf7Hj9+ZYsHesyNWNja34Jo2uVMIjGMwT0Ct1GlUEsG3HtmkEHHHTPa9Z0cPdYwPTNvePNX/Qduo/vzEmV7D6R6DJxAJRWIbGwuisdRZk1VHUza7/z29pUXMX62V54v5v7EvPFGokUnJva3jz2xfWZsnjySSjkDYHgjP+/zTzuC43aNf8PTOOgbCPqczcMJkNjiDcCpl9Yb6LI6+OUe7fnb/hfGv/uDtdrtdoRCaGeJ+tdxq9XT1T7+8p/1s92TP6KyJTXd1jxWRnH99esfWltKNNSWRKu0PHl7zyOra0nyJhMczefw7qgpqCpXrawu4FPGTt8/OOX1bn9yyVinxJiLnjLavvXvWZpo7N2H+YGwmHgrGMNR+YSpmtKWiCUEkXlwgrVYJV+ny2jpNL7zV/tCmWjGf/tGeM12mOYrmPNJSsXtsgZQyHV+9Xy1gMnpf2eWAFm/c7GLGMHTpYi1jGcvI4q+dD6AIfHLI2KyS/m7YWK0UbyrVAACu6CJYch35s42nayCZTnliMRnF0Yj5p0cvPoHWifn9fYZTLl8msRhF4NucWJwZJgrDJEO+7lxAArFnWmr9/lg8kSxWS0gMJVD0xTOdW8oLlqh53FpkDn2NqKGZebdxwnLPupqBKOge0X9yTdU1jnbjuOJC51YoAwA4Y+FGpeytAcPFRAIMRSDoZwc6liQS3JSLIAs+nz87N+v3+6GMoGQuJYChjFmVZQgwBKeTcY99/s4NKw5dmGyq0OUKLn18ucV1xap/+u3hM/2GJ3c0bVtRyqVJLZ9zh0o+7/Cdm3NUyT+kRreTEsBIentFfsfZkX0L3kx6cbYhCv9IlOBqswRBkIigDDleAgJFaIrdPzJbKGIkDNNQoHjr3Ei5SsQjSSGHHLW6kmnW6PQViPkMgYlo8r9O9s0NmlzeMIvBRwamHm2pZSgi13S+3M6+HEs4Qy6kFIfHIO8NmUslfAhO0yghpMifmqyUN8JBYWMg0qgQfXlH8wMbamgSf/PUwD//5pAtEVtfnNc1OnO63/DYtoYInFZQnCs2kfv+cosf5Nhn4LJvv/u7oz/66r1yIQPDUIlcsrZM19iooUTcLRrZQiDu1UkxAc/ii5AikZ9FzbOm335xF4FgAAAugSn5DAxDFl/Q7g+xLBBRFALBCAa9c2boyZ3NjaV5G+uLcAx580Q/jqF5ixr/j/3m+K66giRgrTE/nMBOmB1KhmrOkwAAvv3i/v/8wi4WgM5p68qCD4OFsj2OJGOZsoPXOF8kNBkIhh+oL/lGS62CS5812s4Y7Hv7pkcmZh5ZXQvT4IcDxvELk6vXVZVXaTos0QnTzJHByfMmy4XROXcwOu8JrCzTbGoqVkr5kTRbU67h1OV/75G1z392147msrpSpZBLj5rtneMzB86P90zbfvrKqaMXJgws6zZYf7+/c8+ZQXLeO+vxOwPhV04MaDkcry8ci8Q5CFqtkYloXM0wHBiOBmJ7vQHZQkDAod4bnN2ulD68sqJvdPald8+9sffC+e6pts7JaDxJpiAEQ2e6psZMdjmfWV9T8PNn75eKeSM0lhqaIbnkDz97Z1OThqYYF47crxWVCiQxNpFOQyNWZ6VSTGAoC0A8nRybcfzinbO6Wp1v3vOjU6P9pundQ3NqPiUQC1IQbJl1IDRhHJjFxfy4N4gi8Df+dvvqElVnn+n5P53+6VttE2bHvS1Vr53stSLxr9+7dlVpXiCSZgTEG09uV/I5417nkkihXBoArr5Sy1jGMsAyH9CI+R36WamAkyZxg96ypaaQS+G5LoJAPJy561wRt/b6knURyCgOgaFHBqYy5ubaat1fKrE4927HxSHMHTZ4w1oed2dD8d62kUwiqYLP9E/bnLe6HEEusnbq1aKGbF7f7mN9j9/RdGHevataPWF16cS8W5VYfEUreUnU0EzY+zElEkAAaDTaSf1EPB6HIAiGIQRBkKzcEAxBF6W1cyhBKhENBSsqy1851l9doLxaIgG4ksviz6MEJI6tqy1oHzI1leVlnRI4gkh5tMXpG1nwlkqFxCI1uj2UIJqKkwjOkPiO5rJcxaFbRQmuMUW5lGDc6yjkCcqkwrcGp3EEVvEYjpD4w/G+qjypgKKEHLLDOD/t8hdJ+TyKmHL6uucWTKMzf7Ol/s0T/d0W+8pidY1OkUnYzfxkrfBrLNMVbfEspBRdIua/MWgol/JpDOtxeDz+yGP12iqZ5Ncdo1KG2FCq4XHISp08BrPvjhnSqXRXj/GlfRds7sCKKq1UwVNkajssYSk5TVyNkECLP+mcgQAADneOc0h8fW1h5qPMwfkYMecOalXM3ZXaMg593jifYIGWx1dSiQadolAq1EgE7GKdZi6BK/kMAsNWf7B7zuEIhEmAnB+deequJgCBFJvOl4urChRvnug/3WcgCXTK5nHOOX55dnzSEzppsJwYtXlhsKNErWLo986NhFOpjXWF8+EwBsNKPpPtaPbFjSTlx1PpKYd3hU5B4ejxScv2Us0KKe+No11CrXLAHXy1w9RndqQszq88uH5Thaoqj3/vquL6StWagrwCgTCaTOptzv978PzhQYNYzN3QVPrCuAmbmF/TqCuSiBkGL1ZJ320dum9D5SNbGtMc4tmdKw93T3q10l98Yu2uFaWROu33Hlq1oaJgIRx88+yoeXje7g70TlhaB4wneyZfPtTxL785dqhj/IP20VeP9pj7pmccvh6DeTqcnBk2v3Kw89ygCYOg5nLNijJN1/gcoeY9tqNZtbn2x4+v//LONetq8ovVEgDA3qm5JhHPn0786Mkdvca5tr4Zn4S3RcqPswkhToQT8Te6JurU0ukFd/v4zC+Pdn/1dwd/daxbKuSJS+Qwn7uhTE5xaHMghuK4Mxqfm7ZIGWLO5BLny9Nz7ruf2DCfQkVimuEQn1xTTRJo+8A0gkCedHT7xvJPbWggUtgP97XbYqnv3bVKwaUBANliINnlgABIZ+q33Pw1bRnL+GvDXzsfAAAQGHpyyLi+UHnM4TUbrbsaSwAAjkiIi6HJdAqG4KtZb3+e5XRtXNFFwBC4kCEPj81sKskDt1F7NLdAWOZ5WL5EEI/E5kPRGqWYQ+Fvnejf1FAMAKjRyNvGzbczakhK0WEylbFrzw+bdh/r//KDa0rVUh5DnDZZn1hdeWrQeKvKEWRw+UIviRrypsNjVh+DY5mb061KJEgDQBJEaWnZ1NRkLBYDALAsCyCAIAgMwxdzizPyoyzIUoJg0K/OL367f+rk+YmbSiTItnuzYChifV3hkqIEfIoIxBMaIfesyVoo5t82SuCPhzjYxSf0l4uQ3hJKcO0pEhFUJr3YGQ0qaD6FoaUS/qGJ2bNma6GUuyZf89Lx3gqNREBRLAADsw5vJCZmqBGH1xuJ93Tqy/Ple1uH0zSaR9MryjQcEocgCIKgbLEtKJOne6Wmr+EcyIJEkUqZ8J2R6UA6/sGkrSVPskohG3Yt9My6nm2pM3t8IppEEVjEUK+e7v/a/S0byrVHOsZJAgtj6QqhpFgtuZxy5L65GiG59B8gsHheZ+JzitSSLB8AEDTjCQCEXaVSyWkGJ1JtxoWH6vOHnV6DfuaeVZWH+qdax80iDqmV8KHFQ3EITMVnAAoPhcJj0zZvPBFg2Tw+l0eS8XSSwJEtDSUEjuxpG9rTOVqmkk6Om//2zqZH1hbzabJtck4PgX0z9iMHLjBViolIyBuPVsvEAgL/0Kex+CJzhWRzGA606PrIDsHo8k25vKvylQgE/aRt+O821parJG+cG37h0Tv+7c6VJRzi/TdaC9ZV+li2c8YViqf8sQSbhktFErGE1Cr4ahn/oZbKFaXqJAv/nwsjhNUVh1iXx/u71gGnJzw2bX/r1MD6+nyCxt3RhIShVtQWXJi1W2YceLX2GxU6jIQbtWpHPDJr837rwQ3P3L/uHz61dXWVLk8u8ATCQi591/qqT9/VbOCT376/WSTkxLi8Z1qq7ltR/JUH1j2xo7G5QlNToHj9eJ9lwf/wjiasofCpPAmBQ0KCSLHpFJs+b7Y93zbksjq/tL1JICXzJaJAMvX91qGOU0OranQ2d+AnB7suTM7/yxsnz03M+aMJMYc62DOBB1PYjroKDt2QL5DS2L4xK49DNvCJnh59qZA28QVCPsMs+H/77QfLxDyX3zNM4n4Usrm9r753QSmi//nZO79475o6uZJNQM++cmQOwl58oEXCyRBvZ7lAklkCeHE5WACg5bzhZSzjxrDMB4BGzO+YnEtD8N4BQ9IbqipUROA4DME4jPJw8rrW26291uS6CDAUOTpoyLgINELu6UkLgSIaIfe2uQhwGAUARJKxZDqVcY7TOOqNxlEE7pl3bSzNy1YsJjCUwrFjo4ZGnep6x/5IyMx2XbHq1eO9JIVFIomX93dOzi585cH1PIbAYNTHhiccwVKpQHtLyxFckfvRBFajlf/i8IUMJXBEQytU8qP6uaz8KJtmX28dXFWa91HkRyEA0ixLEMTF3OJ4nGUzlACCoIu/AAsAy7IsyNQ3hSAoGAxb58ybG2qumEiwhBL4YkESvUR8M53z+sZxRQVSJY9jdHoLJfzTBss1KMFCNCK94aIE1wWB4EvSi69NCc4bLa+c7l9fruNdGqx/DVx3ZiQk3bMwU8yXJNIpDEZJFGnOk1I42mNx1SkkdTrFr491V2gkeUL+hMPToJGd0c++MzQtjCZaOyeMVk+AQfY99/iKkrw3TvTXFCopAgM5Sj5ZjwF0md19bedA9m9IFNEJOf91aniPyf6zLQ0IBLWa5oUkubNMK6KpUbtLTFORWOJ/PmiXS3hf3rHiTJ/hO09u3bS2+JX3u/7rlRM2d4AisDzpJUm6uce/Bh/IMJZcG/rbi2I+WWMagqABywLFgbU8PgBgyOLBEOSeWm21iPP+uXEXw5FLBTVK8W9O9LxzYUwhYAoWexJJpXo9/nwGc1t8fBR7Yn2tPRgZsDjiyXQilaZJVCHlMQz5+9P9VtMCTsDSQiqPz++Ysz29unizSpCyuUOB6E//5g4JRYS90VVa5eUWf3QxWCjb4ezr7N+wALROzukhCIPjpoUgjiIrNbIj/VMihvpUSy0AwO70oTj6uR1NjzYUf25VRZ6ASoCUL5Q6OTX/3uDsiNWXZmExSaEw/prLHTUHm6vzmkoVKJf7re2rhCTxx0NdEA/vmLa+12vo0RsPDBh+0j2pgtjNzaUvnhvpbR8t1EonPQs/fbfj8Q11MhGXxyFJDJUIOBSD3dFYJpPx+2dskxj45w01Sikz4A49tbJiS2lekVLGpUiGIjEUnXV4f/xmK6ETknLR2NG+inyxkuIpBdyRWfvJUfM/nRyY6pl4ZE2V2eV9ua3/3Q79brdP7IvMxqH5UPDwhdEwSVjTMF8mKtLJvL7wn473IM7IjvtW2nm0gIPGIrEDQ/NPV+WPto8NDJjKahV5JYVigM+cH/vN3z9YqZUNOzzHTo88tbbQOTH7/nxAJed94ZGV60t0hVzhtNP77dePOwjy3U9tE9AYCiNji5FC2eigXGKwjGUs40awzAcAAIAk8N+0jqUS6KxWYI5Hv1RdSqHoXMh/7Weo4Cpm4kdElhI0qBWtY+asoD6BIkcWXQS3QXsUg1F/PMQCQKFE7tjVAqZ72nbcaC0W87Ri3onuyYyLQM5jemesGIrIebdHawj71Z5zrZPTT2xqfGxbI5ciJnxuS9hXJ1LUK8UHx2e5GDJqcQoo4mONGspNJLg8akgj5X/7VwdwIWdJ0eIUm06kkzdBCSCIvawoQcZLsGgfQhkDLJ1mWZZNp9MogqSTiaslEoBLKQEL2CUUBVr8nfvI80ZAX6ZAiiKwksfo7e5CMe/4lKVEys/qbGYpQZVWms8XjHqct5ASXK44dA1KsKoo7x8PDg0bZrZW5V/Xp3Tjp7yKwzf43UqaH07GMqxgIRFcrVS+OzxdJhU0FihfPtlbIOdjMLxCp+Qz1PdO9J5rG9EJeN96csu8N/jZO5oai9U1hcqfv3M2q+CUQWbRYQhiWTZD3jI29I04BzJ/E07G+AS1Rit3ufyRdMzs85+YsNZoBNVSCQxBYg51wWjpm7YeHzTwKSLgDY1N2599qMUZjgzrrf/wxNbKfPnRzom2QWMmIv+6nCR30nK/hQA40jnO55AttYUghw/Y/WGrPygSkDKKk2bZIxOz6/IVtTKp0x0CMPTMjrpNBerTJtt4OO6DkZf3nW3XzylEXG8y3enybVCIk+lE64Wp5hJ1Vb5cylB5IibNsq5QrHvG4Q1FI9GELxR95t51D2+s3dc+9pvX2ueiYFOe3G7zvXd84HN3NeUrhA5PsETGJzAIhdFsxzIWfzKdQnOcA0uQ+cThD8/bX4HEAAAgAElEQVR6AxwOpaWZNwcMTflCHZf7WvvgtpqizBXp1aM962vy76wvFlIEAIDA0gSB7CzK31mmebi2sFwqAACM2r2HJmbHDXYug5fKRFIed4VWrlMwBrv7WNfUw7sa64tVRSpxfWmeTMRAGPZES+3PByblwTAQc/onHfu7h8ennf0ztrMTM3s6Rk6NTY/Z7b0G274Bfc+MLS0R9rePj5osME0dnbAVS7ByqfzEkOHtC6PPvXb0hSOdv32jLSEhm8u15xNxPBw2zdjPTFp+fqTjZ4e7P+gcn0MQbijePWvd0lRcrlEHBEwxScZQpKlEmoYgGMf/6/5VOypV20oVeQz9m6OjSYefTaVl9YXWWCK5EAx4IkK/t7tn+r71FQEBrNFqdxYqV8kEkViyuVS9d3Dqd/s6iFQyzaY315WeO9hbeXdjKgbzUfyFk53v9Yy6ceqNx7aoBdwkm0ZgxBUNS3PSiK+2NMtYxjKugWU+AAAAeSLugGGupTJvYcGb1FtrChWFYkE2iwBc74HuLb/uZKKGFDRzNRfBbdAeBQCkWTb7GCwLFIYlDMUmEmZ/WIxjwyY7nyIylkqRTHx01FAkXaqrc8sBAaCVCTpHzQ+sq8H5qI+NWiOBUp5QQtKRZExI0hUywRv9hvUl6r09E6uKVNe18G4QV6QEV5QfjcaSRRL+u31TeghMI+lKEV++GMSfiby6rt9pCTJNL6UE6cspAQQBAMEX44bSqYR5dq65uf6PxwdXlmuWzIMnHsnM2BX7A+XcVtmcD6+LJQqkYJESTDg8PApvm7Y25X0ooEkTWLVW9uujXWUacZRNLETCtypqCNwMJTg+MnO4z/iVrXWH+/UZb8/VjwrAjc1DBjSKGvxeXzyupHnhZMwdi+Xz+IUi3jvD0xUy4Ypi9Uun+tVCnjMR/aXR2mO0hkdn//UzO7Y1l+ztnvjHBzcCACgCqylS7j7ed6bfkHW8ZPdhhhVkVp5l2TTLgsts8SXImOMZfsLFsbVa2RmD7ZVuw8C865mNFTKKYQHAEFjO47x0orcwX9Gglg3O2tu7pr7yyfXnRk13r67c2lCslQk2NRThGHq0a+JUn4HEP8zTzTaxpN0r8gGwWPmrKBODBAAAIA3AoMUhkZJVAikLQCwVf7lr8ourqwAAu88ObarMv7OiKMhGVxVIH6rX1UhFCwgyk0i/cqijLRjarJRWy4SuWOT7Lx3/ny/fAwCIpZMkgvFIQsnjlMlFMob+0f5zhVqZWiFUyPkIDPYcHXDNLfx+X2drn7FzZOaxO5pUct7ArKtBKyMRPJaMp9KpRDqZTKdS6XQynQIAYIsk4WqE2eDwlMhFXAI7bnOHApHPNpYfG58yWD1PbWzIELZsfQMAQDQZm/J76xZLPkMACGmiSMxrzpPeU6H93MryB6oLyqUCDoZa/OH/c7C3/eSQsipvPpIam/eOeMNGb4Sm8MZ82XG7p5TEpRL+inxxsYrX3jdz3/qqRzbWPLC+cntz8c4VJWqhUMnnIgRhYDjn2oYWAE6K6LcGzdxErMs496+7T9sDYa1c/Nw9az2ekHHe9YVPrE8IGcIPcfmiT7aU1uUrXSgWY2gnyxJWJ7K2olTNP+QKG+e8CQ61uUDyVFP+040VW4pVJAQViUQkQAdnXH862lMuF0wabKKqfNOgKYQjuN036QmJAczloXMeXz4jrJAK6QT75rHejfVF+0220SFzvpDq19s/9/BqAkIoDP/hXWsFOPbVIz0RjMAQ/I8PbwqBmCsa9sZjtnCgSijLzCQLQBoA5GbO0GUsYxkZLPOBi+BR+IVx071VBSddvhmjdUtVPomjWaGh/4UuAg6Bzf8ltEfBYjkCFIH7bZ57mkuOnR/PmCkkhmIIfHRk6mOKGvrQBgIAANBcrn3zdH9DdV6DVKWkuRiMYjCaZlkMRikMFXLIE1OWCrnw2GJa9q3C5Wu9JJGAhRKv905/7T/f6Eklvr6lcmd+3oDeUiQVpKFUNvIK3GQiQQYQAPilCqRsmmUBmw0jAQBAi3JDGUrgTYGJNLW2UHXw3FjGk5OFhKSHPQ4hQWb6cG1KkEsMrrvbM/ZrbtQQisBKHufcpOW02VomEcgYKvvHMMomWei11oHtlcUavmDM45RQlyQFfhTcCCXwhGPffOucuWfsx1+5WyzhP3/gvIDEdZJLIqyW4AZ7FU7GaJSQkLSEpMe9TiXNc0SD9kg4n8fXCpi3R6bFJOGNJV440rnf6i5E4M5JC2T3NzcXmbzBGbvnyU31mePQBLapoSjjeMkSrdw+ZFYHQBCSIQYAsDkpyLnGd9aBkFh8xkFh6FqdXCdgTk5ZGBoWMriYpCEIQhH4n3af2FxTmEqn9x8bEBaLNzQWtLZPra3QqaUXQ/Y1MsGaGi2HwI906k/3TZGL6j1LGs09bS//NhMsBC3WOc7ssfapeYWYllMMBEHnzXYawxrVEgDAt1879v3HtkEAZGZVTNIsntpWrlqtknkJrEvvHrW5egxGly08ZLDKRUyhWkgiGJuzmbsNllmX/7m711E0ftbuQFLwEW/w3x7fNGNeuKel2heOjpgcKrnIGoxUKyVpKJ05s0gUx2AUgZFEKkFhZO6gsucFWHztDETcoWiFQqTkkP9wfODZ1eUFAub3J/p2NZYG0bicYo5164U8el11fmY2QoloKJmS5TDhJWcciSISDlks4a/UyLQ4Zpp3/cdjm1brlAIc/ezqigaV2LAQmPdHQoEIl8JQBHaFE0anN+gNL+C0I5LomnWP2v1tRpvRHe6yukfdIf2cO4KiKhlPI2GCsXQUQ5MoWVejmgwkXZHES31TZw50e0mI5fFmAxEWBxSDkASRJ+bfW5m/WiMLR+P/fN/a76wva5BJx9rHS5sK5WJGQBMr5KIkgLqNVpYFM57AnDe4+2Qfn8sZG5yRN1R4wqk8jSQaDHvT7JM1BTYOtblSsrWyzOmLHDw1+Md9FxyeoINNRubdglLtjjrt4LhFLRL0jc/ft7Zq3hv84f5zfA6nRMD58T1rVDyOlKQlJO2MhrNkICNo+3F5zJexjP/fscwHLiIjNCTk0iwAGhHv0LnRO5tL/xe6CM5MWhEE5tFkLJWeicb7jNbay8oV3UJcbdSZqKFzFudKnVwj5mYTiz/uqKHsPRICgCYwAYf8w/td2jLx5RqaKh5nwOoWEJjB7rk9UUM/P9xFEYTZ6f/mT/YeG3fkbar+3obqCpWgTioplPL3nBspU0q55IdSP+AmKUG26VwFUhiGEARFMvnEF80sKEsJIAiiITY5o88vqTDMORmaWpJI4ItHI6kEDyczNuI1KEH27Y1s9SsmEqAIXCgVhAKRoQVPpVyUKUpgDwR/sL9Pb/fct7pkT9tIlUam4/PHPE4ZRS+xtJbgRrqRwTUowVqlfNztfumcvkrJN1tdegVvOhhyMsRgl/7kkLG5SMUhrpxhfIOtJ3JOnwwlSLGgViQbdDuCqXiTUvZGv8EWjByOpoSeOBvzpVHSbbS/+Y+PWV1+isDWlmlQ5EPzRiMTZB0F1TkTm0V2sTKbIItceSKwaIsnLj21PZGY0e0fsPgSKSDkIu5YJOiP7Tk/sr6m8JHm8n9/+UhTfb6ESx9rH//6gy0EgUGLFn2KTevk4s0NRRgKH+3Sn+4zJJLpErUka9FevohZPpBm2aOdEzwOuba2IA0AstjhGU8gyaZpGpVRHBaAwxMzzRqpgss50j/Fp4j1FbrsoSAApCQtJekEkthYLP+P7c0qHnXAaDs1baew1Gm9pSpfmS/mgcUlgwB4+WTvrobSQrlw37xDTaednnjHlPXp1RUEQ0wY7WtXlWxcV3FmwHj09PCwyaZViNQiPgojsVQik0cLAMBg9GICT043oMWhAQBGra4CMZ9DYCf180QyXSTgTFqcFrf/0xsb5BTTv2D947GehzfWKYU8FoBoMobCiCcek13JM5Z75MxMvnqw87E76poK1TZfcEW+skjCPzg2u65AsaVY9enm0u0lGoWQ4BDJ1vapHz6xc0uZZkux6u4y7fZS1eP1ZTtK8jYXqTcWKDYVKrcWq7QiasYbu786/zsb6x+qKVhTIH2gvHClhP+LF/aHeehTW5s+v7nh7zbXfmVN1TNrq3aV6xpUEhiCDoyY/u2ulYVybjSVokl4TWXeSL9xjUoo4+BnHe6Xp0ziOOBT5GuDprFxcwxFRzsmX3j2/uc/uS6Ph+9+py0kFdTThBGC5Cg973LRXObt9qFZg6OsSP7Yfav//elN+XliDoELUXzfmeGOoZlHtzW+0zvxy2NdkEL6s3vXfGFlOQfHMnOSFRjN7O3lbIFlLOOjYJkPfAgCQ08MGtYVq18ZMZHxZJFCpBAy/9tcBCZn4INB87FQqNPu7nEHxVxSgOOim9FFuSlcbdS3P2poiVWaeauS8HsnLWKCurxCGQaj5XLBe8Om2xY19KujXf/4Qd+A2VFQrP33R5p2Faq6LM4yBZeLoQgCUSh+bNDQWLjUc3KzucWZprUarV4/EY/HAfgwkQCGYQiCUul0JruATaeTqVQikQAAWM3GNU01hzonG8q1GRWdYY/DEQ1VCKQIDBv87luuQHpFSkCgSLFcaLS6z885aBwxOLyvnZvcVqVpqVM2K1VVGtmLhzurtTIdn5/NJYCu8nM5T7hGD69GCd61uc7qnUgBv3dqftXOpnvzBA8X6e7RKO5rLB2cdx7rm7pcdOimpmKJzc1BsXAyicGwluHLKc50yJvHcN/pN4ph6K5a3VHzgqF/skjALS2QTtjcDQVKVzhKEViuAzDjKMAx5I1L3S9ZXHGxcrlBxnIKJWMUSmRJAgRBB8ZnNhWp/uWOJpYF7dMLIow4PWFEAPzNO1fZFvyDxvm1DcX6oHdhxvvY1gaGxDMNxVOJjBwzBIBWLtzUUIyhcK/e8rWfvH9u2MRnyAKlCGSX7KI0KGBZNtNDBIL2nBpoKlOX5EmzoTIAgFGrUywmqoUyAEAsGXu5c/ILqyohAPacH2ksUBYrRNltkEXGXWAOeoVcvFbH3VakWwCIDcDv9E1eGDGmUFTEIfzhWLfBYnb6PrWhbjoYNPr9+TTn9b7pqVPDP/jMzq01hT/b0/aHv/uknEsPLnjvWFPmi8TMDq/e6oql0zqJEIHgRDoJQ3A0nQAApNh0imVzM7gyXbL7Q6FYolgmYAE4MD4jocg/tutbh/R/s6aqUC483q1/4p9eJxBkx9YKRyQkpZhUOjXuc9WJFOCayEz4+WHThbGZcq1cLuLqF7wchppyet8dnv7ymipfOhxMxcLp+Gql2rTgwwH8lW0rSiR8DZ8Rc0gKg0kUQxGYwTEphyoUcSE8OTjn/VRj6QWH/+Xjw75YQkbRYiE6b/G9cay3qFjxyMb6R1aUCSmCxJDM0Cw+/38e6b6nJj9fxLWEgwyCJxLpKbufQNBzvVNnUqCURJ3BVJ9p4YzZETRbP7mueq1ajiPwsw+ut3h8z/36IFOlFeEYRCJbVUKzywKFwJHDvTou9S9furO6Pv+xTZUlfEmRXKCU0T84Njo2MAXhSIfN8cjmxjCH3vPE1jKpIDsVEzmCQmDZLbCMZXxkLPOBD5FxEfA5VJJldVJBx4Dxxl0Ef57NdG1kXQRVWvlbHWMqEe/l1tFjo3Mjfl9i1PydXfWrZYycZgLBiIyhPtbE4mtEDVEYesI436SRdY2YMy6CjylqaMn0Zie8qkDxp2M95UVyJcPNfostFi3++KKGwGXL3VKhm563faql+r8fWlspE0fh6MCsS8fjFgqFGIzKBUyv0YohiFxwiefkplwEYHHgBEGUlpReTgkyrADOiFHmvE0mE1bL7MqGqj8c7ZHni1yJSLVQltnVBIJeV4H0z9veV6MEpQqRzeX/bY++a8z6yOoymYyoFErBYnrxC5dRgisCuuzn2rgiJeg6P+6nkW0SUYEg9WRt4XqFioOiFIpgCFKbJ3NdRYf0um1lsYQPjHldSppjiwQzKulyijMV9tiwxH0lBW8PTccTqUfrSlKxZDiR2ts3+eOn7lTwOYYFr80XypQxzh4nTybITOySJOMMrt29zK5IsikcQbMkIc2yP2kb+saGWhYANZ9TKRV8c//5vuHpTfWlMil5uFvP41E7WspHYYpIxLQSQcGiWZbJ5szmNAMANDLhqkotDEPPv37q/IjZ5Q9jKKKW8tkccaTc8LbnfvlhGH0WbVMWhYiWUxwIgGywEAvAc68d+/5jd4CrQ0RQmTLMGAFaiuUP1evqFJLRYGTvkPFX50ZfOXTe5PS11BRFIHbA62+ScEgUebFt3Km3PPtQS/vItIjLWVubP+sJbizVNOTJ7m0q21CZz8Lw6YmZL/WPBE2OHqOlQCJmaAKHURRGUBjO+g2yPxM2t0rI4ZHEwLzT7A3WKYT7hmaPdw1tr8h/++TAf7920mhxvfiNB9cU6WQUM+pxOKIhFgAFzb2RffXy/gv1par+afubHaNVBfL9Ds/vxybKGCoFp9arNTKKI6M4Ix7HB63jD62q0kouOkVjqTiB4NnTJGND91gWPKHEo3VFa/MkVhqxI+DgualXWqdefvUoqmD+/ckd99YXYiiUHdesx/fwT96Fecxj9cUGj3dy3jfjCZhdgTKVRA+S7fN+ZGzOkUj9/frqVSrJnNn69R0rUzA0ODzznUc32fzBB777ekItCoaic9NzvFR6IRkq4QoNY/Mgzf7sOw9wOeRDDeUymoml4tMBf5lALMWgPx3siouJosZytZD5yX3rpJwPgwyXlB67kalbxjKWcW0s84FLUKOVv3FuuFYj2z1qZlLpIrnwBl0EGdzaq1LWRVAgEDAU+eKpoXsaCr65vaGAz2mzudZqlCvUShWHwmH4404svhoR4uBYr9kWYkE+j6OfXci6CD6OqKErzi20qDW0+2BvXoko1+Ge6fPtjBri0cTOuqKzo9NVGhmJo3ycjOGhfrO/QibMxMYUKcRHBwxFiqWek+vuqyW4LiWALpYpuxhBlKEEgE2ZZ8zl9VXvnh7fVVvGvVRY83ZSAhxFCAh+bX9XWEqtLZauVn7IG2+KEtwsLqcED2+oqZYKfn5mwKV3bl9bthAN30hpghuchEzyQO4n9kgonyvIBA45o2EGxeddoa2avPFgRB+L9U3OT/cYP3PXyv19+p5pa02+tEwtyhPwEQS6XEyMJrBYIvmjN84c7dJvqCukbtL3tYSonDPbOQTWlCfN7BwSQ/M55P+8dzbOof7QawqaHNvWlMYZeDqUNBrdUhExZvdoBFwSQ5PpFLJo3uea+ySOnh0y/dcX76wuUBzpnGjtN5AEdjl1OdI5zltUFsqABWDOE0gDlqKQbLDQijypgsc50j/Fo4iWnGChq4FA0Gx2AUykNxYrHmgoqJVLznsjnX36U3Zvj9dfL2VWyJUnpyy+SGJeP39fS2Vr33RTeV6FVt5ltq0uUFKLJ6lKwPzR6flaRV6lRNQ9ZNo/aDg7bD41avIkE0VifjiRYggCgREERlAYcQai/mi8XC6JpxPvDJnW6KQyDv7Dt45FZrxyEXfbitLaYqVayn/mwZbMwXkY6ksk6kQKaNFMv9ruyjgHpuacX3uwpTJfPhENvzsxPd0z7gyBe4ryxmd9NRophaEjHodtPmj1BJ/aeDH5JLpIBrKAABhxOzqnXZ9uLqMwFEeRzUpJIUOMQik2ErFMW1/4xgMEiUkYGoMRDkFYI9FIJPH3r50YS7KfKM8Ls4lqmbRMLpp2h17s1p81Lehw7K581fsnBh5vqRCgWNvw9DM7Vhg8/t++euautRWBaOzzP/lgmEc6g9HQvF1CEAgB2ObyFSQRDcV/+Mw9kVS6pUwLI1CaTZkC/iKu8PSo+elffSCgyPxVlb/6xLqnVpSRKJIdQlZdNDucZSxjGR8dy3zgEtAEJqCJ3x3v8SPI42sq2kfNDQUKLZ//F3QRqDn8YbejRi4bm7VqhNwoluQyaEt+3oHB6Rq1mCFwhsAsf6HEYobAvNF4sZjfarJvqNDubR+NxRI8DhEIx/TTjl+0dW0tL2DIGxV0v1lkJ1wrE7QPmXIrlIGPP2oogyXLTeIohsCvnx3cWJmPwrCOEfF5yPuD5gqZkEQREkOLFKI950Y+OiUAAEAA4NekBACADBOAERhBEBiCoXRynwe5r67orZNDl8sN3TZKcH7Y9H7r8FcfXN8biNqcvtUaGZUzG7eTEgAApDziroqCtybnVqrlzXnK0ZyyaFlKcKBrvCH/Qz5zgzOQuOxaYY+E5BQHLAa3TPndI2bX1hJNuZBbzMU7xh2uaLqze/zRbc0QxAYi8TWlWhQDfJIScogxqztTciS7BMVqyQ93n757beWZfiOOoZdb29fAkr6dnLKUSQXaHM+VyeGd9wbvbSz9RL7y9WN96+uK/mCah2yRZ++oOtM/PWazpWGke8ZaKBIyxEVbM7d8oUzI/OFQ19cf3FikEbXUF9AEfqRzorXfSOCX9HPPqYEKnbxcJwM5mFzwiDhkGknLKE40Eyy0+mKwUEOBskghusH5z0C6SAwQIl0uoO2+8Ld2rrD6QycMs7t7jEZnoIAi/S5flIVa+wz//tmdc54AjiCKnGqPI94Ag8HlfKpUKuCSxJku/d/uWGEwOV774IIlFD7aPzW24B5b8PTNOaAU2zFj5wk4Oh6nf9495w1+orqwdcQsYqjvPrntK59YW6iSvHdm6BMbqhUSJsWmk2w6nk64YlEhQWYfw2dcLuCybeb0hV4/3vv5+1clU6zB5VtfqK6XS942OBztY+FQrClf+d2DfS0lijicert15J7GsqxzICttnHVljHoX3u+b3Vqs0gg4STYdTSVYwCooWhhN/N9fHUitKw2L8cfLCqfd/kmH5/z0/F6nY++JgaYyjS0U3VGTJyI4/Vb3ian5AZvb6YhKSSwYYcesTmcK3b+3Y9DhvHdlpckXSPpirx3uPmCc+eBIv6tILlOLSB6J8hkexC5MO2ePj0zPe75w/zonmyziMyAN9E7HufE5uzP840Md//j6cS+H2bqx5vWHN5crhFknAAvAuNdZIZBAALCAhcH1tHWXsYxl3DCW+cBSaMT8zinL3ZW6zlmngs/Z2zq0vbHEGQ3/pVwEkWQsmEiiAMJg+FD/5EONVQqa0Qi5L3SOt7aN3L+2EgAgZqjbUI7gigNXCxiz21+mFB2amGnWyo6cH/vh7tO7T/bvPtrrdQRbnfNPrqm/4gFvCbIWaqZC2TWiho5MzCp59IkBwx01Hz6M/Ii4on2sFvNODU9n8j1QGHbGwo1K2VsDhotFyjBUJxP84URvZZ6UxP98SgAtimlclxLk5hYHg2GZb+5QkLinNv+14wO3nxKQOPrygU7DvOuZB9cXK4S7ilQOp//crKNKfglBum2UIJqKkwjOo4i7awrf6jNUK0U6Pn8JJWjUymu0ihePdGZ1SG9w+NfgAxn4Q3ECR2QMZybkPT5qbRIyJ491c3V5vVbP13c2rynV7OkYqdepEJQlUUxIE4YFr80Xzp7mR7smhDzON/9mY03hUjXSa+Nyx8VvL4x9cU1V5rU3lognU88f7NhYV7QqXwESqbkF79FAZItW+lBtYYtOdU99iYBP7j8/Pj7rgAisZ8auE/JoHINznnCPTNsGpuY/s2slCiMojMjEnFW1GRmiiTP9xmyY03Mv7v/G32zg0pck2Z/Rz0mlF5MHcpWFMsFC0PWeo2exZKOKcOoPJ3o/u6m+PF+0uUR5d6UWBYjJ42+fcQ7H4iOderwuX4whI/MuKZ9RL/KBUDLV6/ZvkInCybgAJ9RSwb7W0W9+csPWxuLP3bOaxBDTjPODY/3dfdNokgU8YtjifMvtijv9p43WdQUKKYf645mBrbVFayt1yVS6fcjUq5/70n1rM9OSSCdNwUCdSJFk0wSCZZ0MsVQizaaTbDrNskk2lSEJz792cktzUZlGNmpza0SMnEt5InEkzT73iTWryzWn+wynTve9NeNRIHA4nnhsfXU4lQCADSWiGIJmaACBYJl2eywLg1ZfrVLM4DgHx32RmDsU+2DI8L1fHnB7Q1+6o75FKrEFQjhNHfaHzPHE0fc7NjeWnpi2KSXUhDUkpAkpTVbJhdtK8p5eU6Tmc5Vc7K6qAjEFt83OpwOJuWj8/KzztbdaddWaiEQQEHMbeLynVxQ2KfiieGRwwhqaD+AYWrC2fmDccPjoYMfIbNfE9O5DQ30Tc0kcZShaH0ns+czOf9rWlMlUyS6o3uus+LAI8XW3wDKWsYybwDIfuAL4NHFqyLi2RP3SgIGMJ4sVojqV4rouAnbxxa29SmEwmkrH3fEIwcH6J21cEs8EvWi41I/OjzRrJDox//aUI7jiwFEYpnGsfXIuEzU0Mm3f2Fi0Y3XFLEG/8M0dQgGhZLh86pL7/S0HBABNYHVFqpff7xDnMUrOUkqgEfCOTlpAIvmLA+dXFqkL5MJrHO3GAV3FPl4iP7qkSBmNY0eHptv7DZvri5Yc8GZzi7OUQCaV6fXjSEZmCIYAyJGbZEGmQlkqlYIhCABI4p45GCJWaaU/fbd9Q20Bl759gUM/fbttY33R5+5ZnTFbcQTOpBe3/yUoQZJNkcjFKCAaR2tU4hdahy6nBAAAhsRrtPJfHO6s1clp/PoGdwZL+MCg21EruuRBuNntF9GUOxlJsanfdUx+Y1P9iW79oy2VJ/rH3CS5vUpXIBP+8miXiKZkQgqC2DwBPw2xvXMLCARNWhbODkx/8d41FIFRV1IjvQaWdMwRjLzWN8mQ+HQ0vn/Wcc7h2T1tPXVmYFrMv7NYfLRtbFWV7rPbKgt4/FG7t8/iKpbwq+TSu+pLo3jiRI9h1GyHSMzqCfIpgiGwzPY402/gccg1VRdje1AYARCrkvBa6gtoPMMKDN0Tcz0Tc49vb8zyARaA2SsFCykzwUI00VKuAznnHbj6PszdopnXFybnZp2+pzc1SkjaFgmiEIjvjCEAACAASURBVNw/59pQIv/W1pomPt/m9JktthNW99T8wntT1hNTljwebQ9Gvz823UhTZWKeOxoUkvS5ATOBI6sqL45LKxXc0Vjy+XtX3722AoHh9zv1+2yu+liCpun3x2YlFHZWbx4xOVRK4UIw3Dlj/9O+C0XlKpWQ645Eo8mkORKKxhI0grOAJVAUWhwaAiMwjCAwgsBwhiRcGJ2dmlt4fHuDMxgLROMVckkgljw8Pve5NZWlKolOLty5sqyySHHoSJedRe5uKGZIPJlOxZJJEiVJDEuk2Gg85Y3E7KHQfCRweNRaoRBORmOmuYVZr98djgdDsYAzePj82N89uVUtFTAc+og/NJdM9vYYxzrHIAHfEo4pxPg3Vtc/u66mSS0pkwo0AoYmIIhFzhlmFQz9q1M9u1v7G8vzwnyOechsHJhGudQ8RRSohD+9f1WdRnhu3IGnY59eVVcjE3eNzXz10U2NJXJjDES5zNPbKhUq+XwkeGHG3usOG53+u+Siv/vEutwFhXISiKGbv/4sYxnLuC6W+cAVcHli8XVdBLkXqVt+qUIgyBtPVAqldTrFm+3DNVoZTWBaEbd1buHYif6t9UU8mvhLRQ2xAHAXo4bazPatdQW9k5a+RPRLd5TvLCquVSgPDunzxcJbqzWUi6x5yiFxCsf+tL9bW/qh/ChYNLIFOPpynyHmCr7fO/HJtVU86qNGMUE5L5bYxzSB1Wjlvzh8IUsJMkXKuDim5NEAgJVFqiNDRoWAUQg/am5xhhLw+Py52blAwH/xcwiARe9ALjLhQxAEybyzb0a5C2bHgcGpz2xpXHJYRzR0edjVFdu9KdAEtrpK937b8BUVh24/JUiyqdzAoSwlIDC4SirR+1y5lIAmMJrAfnO8B0OQ/OsZ3OAqyQO5zgEAQN+so0opUTLMlNt7cmI+7g6Vq8T3ra86M2b++paGaX94zOFdU6Q+0KPvnLTU6ZQoBryJdKvDO2aeG9HbPr9rlSQnrCVXjfTajoJAIsoCNpFOZYjBqYn5YCTZx6Z2qiUbFOIVEkEdib/bMfr55jKdnPv6/p4v3bs2Bqca5bImtQRHkMP6ORxBVDy6SCSuL1OoREzbkEnO4ww73A5/SECTMIDeOztSoZVlA4FiqUTm+XfGV9BSX+APRve1jyolPBJHawqV2b5N2N1yHicBp+Q5wUIAgD0dI435ymKFKPuX12UFuR9CALzaNriySJ05giMaymeEvzo//t0tKyQk/caRnvu2VD33SEs0nPJ5ff0DU5b5hTZ36HtHhkaN891zCwNWZ41cbPGGf3e0d1NzafFlDxS4NIlyCA8C/cOGuuI84e/PjsUnLRe6DGN215ZS7T11xVKKmjJYU6n0tx5osYciRpcvnkoM+P0LtqA/Fpt0+CYdHv2CR+/wTDt9s56A1RfM6BSlWRaBoJ+9e3ZDYyGM4qM2t1bEx1D4/54ZXKGRimgChaFkOu0MRTxoTKWWjpnmy/NlkURyzu+z+6L/j733jm6rzNaH39PPUe9dsmy59xYnjp3EIZ2QRgkwzADDwMAw9U67c+/HnXZn5k6B3xRgGn0IJLQUEtKLkziJe29ylS3LkmX13vX9oVgojtMgwPzhZ2llaSnSKe95z/F+3r2fZ49ZncNmu87qnLR7dDbXgH32vY6pu4s1U5HwBhW3WCoqlPFFDHq/bua//vFRlEsWZcoP6szNU5buEVMkGKpgM/rGDF+pK4xh0XXKjHQOC4OBPxQZM9svjU29dqbzmT2nh2dsJwd1vUNTzAhUWaA6abB7tYYtd5b3xOP56aK9X1kjoVFvneuOQ4GVGRk0GNl1tHXUYF27utDEQQRSWpWa32B06SPRKoXYRlHiGXuBgP3sU3fRKTx57SAABh2WnBQB8SIWsYjbjkU+sDCSwuK3+ydo4RukCOLxODRXx3h1dPjpgcEoHUW0Dls6h4uh8O4LPQmrnFVqyd+1+v624R01BQAAFIENDo+UfUXMcXtxrehQzmEMWhxpIvaxEX2BgtN8ZuDXD66HYQhDYBiCbrvX0Dwkx1wl4pzpGCEpLF8mTv5v4piNM6725qFJNi1fJDjfr1udp7qZyoqbx7wrfjUl4LKRM8PGHCGHwlAMRZblKE90j316IUEyNFeqlENabTgcuvz5dSkBAFC5WtmDUyxnIEvGn7einJoiANc+pJss20jF1VoCcIuUgEdS8G2qGU5mCZKsIEEJnj/d+VrHyF1ZadNBdyolmLB6/mtf2+mOvgGDZYlGTr+uye8Ni4W8wfCEzZUv5QMAtDMuizc4NWwoy5S5QmExh/7k2spKpZBDI86OGldmKzIlvPeaBzNlwqMT07kMpKVj8lt3LdNZXQSGXu1Gev1EgS8SZOE0DEYTL18keGbMcFeRyjfrkTGIdB6LQpHzA7poLCYRsLNYrNPa0UfXVlqC/sTBi5lUloB9RKtvnbLQcSyPz8+XCNMU7IPN2v4Jc46UP2x1tOlnjjX0P765isOgAAAQANF4DJ2riU+UrGQoeM++Xb+yJONij+6Xb5ww2z0UiXFZtLNDepGILOKK4vOKhXYt7Cy0ICu4OjkAUrbQazcXckVNk2YeRVQqhU19E+NG29Obl/MIasLmeGpj2ZObKrPlApNhdnRoDPX6+CwBgsY6TNbXWkfPTppH3X5POGL3Bf2RKIkiwUh02OIccfu0s44NWYpiKX/U5W6fcU716u9ZU0JS2NCQ8YP67l3H23y+UG1R+rL8NDZJTLo9/aFgOBaslckEdDKDz9EIONkiXoFUIOcwhQyKSeB0HCcwtFFn3NfUPzZhlqaLOqfMMQAsHv+JwckRq4uNww5fcNTqHLE4BkxWo8dzpEnLr879QXkunUTT+awcsaBQKlBwmGImnU+nskXcv5wfYMp4U97Acj4nBkWhKNJusHz/w0t/f+noLBatrS4Koej3Vhb9fF25ikU72qo/fqGNL5HPggAtRLborG+3jLx/tuWfp1onrHZ3KAwDOASB4YHp3kkTNwB2bl+yvFwd4dAnOsbF5Qoxh7PnS3U4jL5yun1teUaNOv21lvFLTf35GqkLjT+xuWyzQhmwuvec6y2S8bwhf0cwwB4x/98Tm7+9o5pDo6C5iwvmyACUclkXsYhF3HYs8oGFQZsTFttgeHW28tilgfJMaRCKLpgigK4MUD4LSpAUFqe2I2CSeLGI81xjf6JqiE5gJpc3ITq80fY+OVK5UPI0URgGGHJw0ohHY3kcjj8QxmAoUy4An43X0NVIjnlZlmLv6e55VUNOd/Dt422Pbqy8qyh9b4++SM5t1k5+1kICGoERGPp2w2XyJqboFB18FtriBCUgcCIrO1s7OBgIBOPxeDweh2HoOpRgdnx4lJJ8uSrzbMf49YUEAIBoPJZUJSZ3mnq+Nz/bPxkl+MeJ1qI0EYUg1pAfhxEsZV3/0yARm6YqjGk4WqESnWvoOzFhvitfM+V3JiiBwx/8zp6LM93a726rIVnkgTZtpUbGuEa3MnATfGDa6cURRMKiAwDOjRu5wcj+011b1xW2jk5XauRZUj4AQMyklSoEDXqznMPksug/O9WRySDPtY88vqYsWyoUseijsw6TyzdPOJSaKLiaFcw7MBRCX2kZfHxJXpGMf05rPDM0BUPR3+4/rxFxd1bm6kw2EY9ZoBLbQoHkwZMoUqkQ4ghyadLcbrBo+Kw0NntdoYagwx+1j3brzRORqJhLhiBIyWXScSx+JR9I4FTLMI9F31JT8F591zOPri3KkO491/vWyXaUjglFuJLBgQHY3zu+TC2WMOnHU4qFFkQqK4gvZEWf6k1kDnh5BHVEq1+qEkmYtF3H26ryVdkKocHuoTC0WCISUfRypbQsV/L05iUFKlHQ56aQkM4cCPkheFj/6JoSIYW1muz7esZPjE4f0eq7jLaOSAi1eWo18lbD7F/O9+azGJ2d410Ox5dqi595oO7e1SUyPmt4ynK+e/ytU50XByYmkNg6laBIwCsQCJgkxqEoCkMxBAYAYAhMYSiTxNkUYfD4d5vthq7xH3yllg5hEAStzU0rlgtPjZoershZmiYpkPA1Ag6TxBls9M2jXd9YW3l3jlTFYqNIjEcxEp48OII4AyFbMNhhnv3rpSEyFO3SmY4M6s8MG5v15mmbZ51M4PQFntq8rEQp2laoXpYu7dObtQbbW8fP4wSmkdO6Z719vSMhr8vSp3tya7Wcx2gZMo4OGQUCZlW67NCwhRuOwpHYttV5kDf+wh8/9Lj8cJrk66VqOB5/r7HvwTXFdWq13mQ/drrdzufI+URH23iGkHegU/vPo22wkK+z+4ZP9GTFkf/95kY2j3SEgiwcR6HLlzFJBhaxiEV8pljkA9dEQlhcqRAe15lULNqJC/2P1FUMOCxJShCIXGFUMg+39/mViBGv7licqBrq6xhLCIt5dPJzExbPL5JBgWHaVpetqh81rsxLO9Y8lIwyP6MOZVcDWqhqyOryvfBBwzfurs5VipVcxjnDjIzCdWa7lMO4Xfaj4BqUQMln1/fpkr3kbklb7Ap5CeR6K9CpgACIxeNXO5DCMIQgCIIgsXj8Yz4AQT5/AIbhNMfkmSDtZrTF4ViEQokFU0NgoQXa6+MTUAIWjfjTkUtZ6QIORhn9ntmATzBXO3STO70O5lECBoHvWJ4vY9H2dAzXqORTfqfJ693VNJbGwCZM9qe3LpPKBS1IvKd9pEItpa4hJ7gZ8QCbIjg0AgDwUtPAl6vyDjX01Rak/+NE2xPbKhMNCgAAJIpkCdivtw691a4LusOtw0YhB1melcah4wSKSdgMBIbGLM55qwDJRMHxlqF55UNXOY2aSBQtVwhxFClRCnh04v/b29LSP2qatB1p6rO5vMvyVBEsrmCyKPSKMxUzqQQrSJQPSVm0bJGgNlf1jtnS2ThonbIXpAvNvlCf0Spm0HAMQWAk9R75+4FLS/NVmXL+O6e6fvvkZiGfsbwoTWtzeYPeC+2jJqsnhkD/V9/783WVEAC7znctmSv1uQ6gK4lBcnfJLSS8icwBr97qm3b57spPAwD8518vN0AYMTvUfDZrLu2T8IAqV0rzMgSlGlGehC9jxMdDaNfQeIN2koRiqzTSbblplVKe0+Xp1M2cHpvZ36t7p3c0Hgf9VtcEBPwOV5jLWpGtcAbCL3/UUpqj+Pq2Zdka6RmXx2O07j/TMWlxzwaj0RhEw1AKn/9s9Eaivx0Ynz7c/siGMomY7fKFS5QiBZfVqp/d2zu+VCUiMFTIoOz+4An95Kt9001Ngzuq8qMoiMWiOpv/gm7mgz7dvr7xtztHT41On57Uf9hjsDj9HBgL++JwGMKhMBMh1CR6+HzvzjUl1lC4T2d87XT7X4+3/Py9M4f6Z+h4fH1ltjGOPZAn9047nXpH+RINRcAPrihZW5TBlLE5GPra6Y4tFRmDEbxIynzt3cZL/ZPebGnc4Z0FwK43dOrMeTL+pvzsoy3aQ40DlTWZag7jYLt+0mmd9fnyVPJxGNkg5NBdvl8+vPYnD66WMZmXrbecNqPPbfZ7bcFA7iIZWMQiPhcs8oHrgU0j3mnoCZF4GoM2NmGWC9kMDsFAcQxB/JFgHIBrLeIuGB1+SmBz7QiKpeL6AR01F2V+/sLiqxew/ZEghRJ5Uv7IjGOJWnJEq8+T8l491LStpgAAQGJohoC7q7ErVyIkPjNKkBzz1KqhWaf3xQ8ufPOeGjGH5Y8Eh132arXgrG52bV7akY7h22s/uuBFv6G2uNds332y487K7NRfBaIhOkbdWpYAguLXbkqQSBEkvhmPxxEESQoJ+mD2xorc1w63XIcSJJJCCyYuUqOueMqH18ctUYJANDRucZ0anNFOGdfnZyqZLAFFG7DPiih66k6TuOHer8bVPqRKHrNELnjxfDcdIZ473rssV9waizZaHGEpV8og71ZKV+eo/nmilcRQOY81b2s3KR7Il/BxFDF7/Ef6J2wzDh6dDEQiOWmiLcU5wy5bKiVYkyXPE3GGHc6dS9MLpOJDbVoGjkl49Gg8yiZJLo2YsLqm7B4Bg0KuTBTUlWlisdgbR1oRBFZLef6rDuzE0FSu6GOnUQGDEtLxk9rZ++sKd1Tlf3iu96cPb5gN+9XMhSUTyfKhdoOVwpGZQKh1xhXxQb9+qKZFa/jHseZgODw4Y7UHIuk8NoYiyRtkww/+6fYFKQI72jSIYQiDJHkM+oTLm5fH/3rdEiaD8e0PzpWhGIPABydnXzzR/OzDG26ecyZnY+In9X26V890/ubBNRAAvXZzJpN/dGiqSMJXcRjJBggzLp8rEMpayGmAjiIqJj9fxF+WoVpfLt9Rm1eWIaaTuM3je/dC71vnuwb0ZhGF3VuYoWBRZ0aMaoIsEXGaW/vhGe/vH7rj8PD0b462TI8ZJ7j0VrOj1+lh4BDExBwIoQvELmqnfn+q41j/xP8ebfnoUEvLyDTGpAKRSJfV/fPWwTx38FznaF15RgCGRqbtFEn+z/HW/b26GV9g1Oa+MDHz54beD9rGmmZnhy4NpeWoD41MN07M9s3YXcGwyx0oFTPXZsmVDNzp8zfprNszFWvVYrfdMTYxabFaeEzYZra9v69lJOCxhMItgxMVMvEPt9UEwxEcQyR4hMblDHXr9eGInIbtXFO+uibv65tKynMUGIGcGtJzIPS3e8879PYAFFfKWA1GPycU3L65SgtFFBI+O+D79t3LJwyzp84N/8efDwAIVNfk3pWX4fUFm4Z0j6yr1EWgbrvH1jCQI+P/5tH1+Wni1CsrJGn2YACG4LxFMrCIRXxeWOQD10MiRZAr4hzRm6szZR39E3dV5OrdThaJUSiRqL69TsR22x9kiaqhAYdlVWbauxf7vihhMUipGvJHgpFYlEIJAAAKwwwCm7C5M0XcN/t0XqNdLeIkyhVIDJ32eY53jNZkq26w6U8NaK5qKILHdx1t+8aO5VIuq9dutoeCGiZbyeRUqyX7enQrsxSv1Xd+1pTgaiFBQlscCEY0Avbh/ol9I/qw05sp4Sf7FifIFbhFuyEwt3eCIIQCYX9/H4ahSbshCAAwlxy47D46JyRYUVrYoLflK0R/ePtMbaGaRb/CDCpBCXgEmTiSG1ICCCwwCAvi+pSgyTBbKhNgCByIhjp01oNduk0Vqros9e7z3fkKIY3ABBR9wG4RUjToyl1/YoZwNSWg4WiJXPDrI61nRy10Nf9LcrZraubHa4prJGIRjWQQeKFStOdiz/7mwYorZ9ENi4VSxQNNk+Yxu9swYlRJOPZgqDxDVqAUJXqWJSkBAEDJpddlyU6NGvUOT3WG7HD7cMuwoTRNhqIAguIyNgtHkTGLA4bmlwumy/h3/ujlpr4Ju9vHYZJSPjt1NP54rvu7K4pSv//njy7tWJ67OleFQVA0Fl9ZqrHOiQcWRKJ8iEDhEyPGv/SNRyz+H68r3piTtrZIs6E6Mw7i/ZPm/Rf7Z/3BI92jeVJ+JBo70z6iELLvXlX8r6Otl/omhvWWY83al460eODY2LhVxWHGIrF2i0NBkW982PzHd+rLCtJkLHq6hJe8uDdzQQEAMAAQAD9568RUhFCyKbWQbQ36BCTt+Ya+764ohADYdaxtbUWWUsQZMduFTBp7IZuBcCyKwygAAIKgRP/jbKGgKl1ek6ksL5Deu6JALeGki/hne0bfPN0eY5C2KVPPjC8U8COe0H13lODx2JlTnXfVFvx4bVldmjgUCtscQRiBkEiUFYNKpHzn2Mym8qzlSmEbiE8GQu+0DT93umOP2Tk5Mn1y74XC8oxX+yb1ZsfJScvx4elph2c1n/VIccZdOaplMkEOg/THw5ca+tcVZ046olNG25YCmcnmPdA6+V7L6O4TjX892vJR65AnGui3+LS9Y9Nme6lE8K31S7ZX5gg41LvvtwQ4OC8I8dmMiQGjYcbxx91n5Wn8LdU5z9xzh4TDODHr/cHa/DVL0jhMWpGSr6AzaRD++tmegRHj7vPdG0uzaiqzwgJ246wr1Kp9+N4V+0ZmHA4X6fXs+Y97cALeubKQQ9L6Jsw7tixhAPjVc12v13cUlWWyMHxDutSnn/3FI+uemnMbAynPjUT7YSF52/wDFrGIRdwQi3zgBmBT+N+ONGvtXhEMLS1I23epe+fS4lG3Y66O4nNtT5asGtJwedcRFn8+7QgSWswEL0p+TicwuzeQxmNOzjprCtQnmrXJVecsAe/DXq2ISZd8lrmLxLDTSbxEI3v+nfOrlmpIHmbyu7NZXB5BAgB84QCXonEZ5LHB29+RIIF5F32ekEBE0eNQ+O328e/8ek9zKPSdVXnr8zWd46YMMTcGRZPkCty6kADMnT6bzTZMGxa0GwJXUQK9TreyvPD59rGhbt2rh5sfWFPGSImKeu1mAIA9FLyh41DqbL/JaX8dSjAybe2x2OBY/Fu7G8emrd/fVM5kocUScb5C+MLR5gQTFlK0BU2HrsUQbng/LkgJlmdIx232LWkSDEA4DG/Mz0rUeQMAKBxbmqkctTqah6YKlKJkyccN+UCqeOD0yDTdEzh2sf/L6ysOdAx9Y/2SROvoZBvjjxMFGCrh4Rou+4LOXJkmYdLIdy72LstUskgyHAszSYJDEWMWx4zLx0259481a8Vc5nfuqy1Qiz842909Mp2jEiVG+4LOxCAuC3aT+Po/PlxZrLkjV/Xemc7yHEWECc2rdFoQIga1TCXK5TAmHa5QOMoicSmLJiBpXA6lTmM/c+cqBoGZ7K7nT7Ud7hk9ebbvie3VGyqzeWx618j0d3eu+PrWZYpMiVnMs7HIc4db957uOGNytdf3GizOkErx1aVZe463NfVNIgiUKRfcPCtIfGHnH98N6mZavbF6/WTMj/hjsU6TjUfiI5Pmxv7Jp7cvBwA06YxV6o9tjpKIAxCNRa8uj4QAgCGIT9IQCG2yu5fKBNUFihNG1/9tL19bkN45MP6tzUsCOPx+U99bDd2BGbc+7D/dN362XzdhMpt99tHhGQgKeR1usx+ajkJmu294yqAbM8Q8PpvFBry+uGHGO2WOu8OmsH+ZUmAbnYlAGDsWbdKZYgbb+faR482DHzb0XugeM1otQ0Z7yOw1j+qXKdjlGeIKmThostlHDR6zmwiD0hxJmzWsNLkkQqq/02C1e851jl3sGZ+02KYMzh/ev6qmIuu5Rzfcu6oYImBd0Pe1rRUwAbcaTftHJu/OlB42mAIoNhUOHz7f907v5B9fPmaNhrdW5NQUZ3DYdDqLXqeStg9ZMDg2GgnrXC7YbP32jqUoDhUwhZ0D003D+polWW+d655yeqrz1bMQ8uVcpRDD2nonfvPVDflpHxs/xOdu1WTHsUUsYhGfJxb5wA2gFLAP1PeQdJZRRK9UMM2TTh6TIpl4UkVwnRTBZ0EJksLi1KqhpLC44nOsGkr007n63Hl0sl1vXqKW1I8ZU6uGYAhaopYf6tZ+RlVD8+JROokLOPSjjYNLitJKeBJszlAlDuIYjMpY9OMjBhCKdOmMSj4rTXBjB8mbxIIXPVVIYHR4Hv3Vu8cGZoQrc3+1ojBXyi6UiDLE3Hcv9uZIhUzyiuX5T0AJAAAQACqV6lp2Q/MogcftmtKNry/Nb0Fxz6TlnVOd21YUsmhkr91sDngLuSIRRZ8nL14wcfHJZvu1KEG2hNc7Yf7piZ6hxt4f7lxBY8H5XCGYkxe/cLSZwBAln30tSjAPSWJwQ1xNCVgkfkeW4g/HWj7s1u0oyYxT8dmAL+k7hCLwUo08Vy7YdbYzU8pPnMItiQf+eK77nqL0U83auvLMplHDU+uXJL+WqKVOJAriAGgdlnQmS8VhlyiETQbrjDdYrZG/Ud/JoQiVgBuKhSAoLmezERgaMDss4YiETs7YPfvP937/gVUFagmXS25cko/A0NsnOggMmbK6Dg5MrM9VSZgfj96xzpFIPC4VcAok/GdeOvzzr21MVRLfEEoW7a5cFYvEL0zMtBksKAxn87hcnDbtd1M09K7CnEdqikUkoTc79g7pAAzRMaxVq39wbblCzA2CeKWMsV4qdEm50xw6M4Dy06QMCS9oN//uK+vHp6w5acJ2reEXr54wO9z+YDhTLrjOfEv+17HOETGLsWlZrk6r+7+vruZR1O72UVjK7fb43v+gAS5QpfMY3kgEg2H5Qk/L1Aqrq/cFAXCkd2wgFFaycKPTxyWIp5YUe71BFIH/e+vKlZXqXCmvt2Pi2R9uzcsQV+cpq3Lk9y7Jq85XPrmyclVJ2vfX1TyyPO+x2rytZRkbijN2Ls2/uypvQ0nWptLM7WU5IWfg+w+s+M6W5SgN/86mqlW5ykMTpp+trXhkVdG376l9YE1ZZa4CZ6Kt47O/vP+O7+2o/cXj66VyroLN6tEa7ijRPPPwmm/eXaNS83rD0A/qSp5cX7FmefZzj9+1aWleeY5cquS8+l6zJFu0ojJrR222H0SCSPz1s90lGRIGTlFh+K3uiclzQz29U7o23Xivwdw3NTQ0s7kq05bN/XpJni8aazBYMkW8nSWZo5Pmt987w0kX6XXT4RCO4DRPPLJ3d+OrB5tsbj+DzzjcNbK6OKs/HBswOx4vVLf0TPi9gR89UMdnfTzxkmRA67Dkca4gqItYxCI+HyzygRujrjSzbXhijVpyaWRmW0X28cbBlbnp+qDrhimCBG4mCrl5JALEa1UNnTrddUdZJpP6vKuGUvEFVg1Bc/8m/rooRZxjTVo2m8qVCJPfSUbY5XLBgcHJIoWovm+8Jktxe6uGrrbnTwgJKAJ//Wx/hMV+/su1qzXCnhmHRsAQ0+gxKKoR89843fEp+xaDudNP2A0NabXhcPjy5wtRglAoDEFQOBiEI8G7yvIn2czxIcOLZ1rXLNOUCiWpbRxEN+pTBlJG/pawICXAUYSGIAeONmcuz55weLbmaehzyt0EJdh9oedsv65QJf4sWhPM8yGF4NjqLNXFSwPdTu/2oqwMiwm9HAAAIABJREFUDmdewzIageXKhf882dowaihS8Zk4lbrB64gHEiv0cjp1qm04AoGCNPHy3Pm3hoCkaR1WPkmzBwMcHEdhhESRJUohm0acHTXmygSvnem4qJ2szVEzCCIUC7FJEsGQd3rG2sb07x/vfHrbcrmABebqXhTCy+5DLxxsbA8E7i5Il6U4FO8611WUJsYgSD9tpVGENIN7M8mBeRAzqSUpBkRMHM/j80UUfdhlZaPEnpMdS/NUzz28wejx/7NbG/KHuwwznlg8jUdnM9AyoTifTZzumfrPNaX/795qNZeGIvATayuC4eiAbqY0S/bbb97pD4Y6hqb/828fmR0ebyCcKV84fEzMw/cb++6syL6/tqh1corPpmAKHnc7nyhWQWa7w+n7ybaKE6ZZk9dfJOZzCBxcOXuTyYHUDaZixuXzRaLpbMaRadvghGVdrjSdzX7jbOfmsmy1iCskaQ67D0eR721dsSIrrUotl/FpgIB5dBqMQwCOB+NRZyQYjIfjaAwjERaLKJZL8+WCQoVoz8n2h9aX3lmVP2xzlGcJi6VSWzBEYsgTNXkSPoNFURSBOZEgi6RBMPjxthUcNkGieASLF8hEtYUZWUohi0ZOhz1+FOmfca7NlytlTDqJTwc8CAlDBPy93+2z4ODnX1pfq5LyMKJ50PDSyfZYBt83ad93uP3YxYEYi/bcl1b/5VvbijIkJqtzWYH6Que4HYk/XVU05vCE4uDRytyNOappm+e7fzkwLmTEbY6vriuHPLZnH1+7LiPtgjNiNJgAh+ronRTnKC7pzPQZB2qxO12Br22o/MqGytTnbSLbM+iwWAO+3EUysIhFfEFY5AM3BpPCZRz6nrOdNgSpUAiyRNx3z3SWFii+qBTBtaqGMjiMvdOWM+d7C/NVEjqp8wc7dCa1gE0gt8ec8WpcKy78oqqGoJQ3iWFfmpf2/qkurnyBpsVsklyeLjmqnarNkr95vvv2CgkSSL3uCSHBnw43bSrT/PfmynQBOwyFhAR1SjtdqeRTKEEjsF6zfe+pzhKNjEFd4Sz0qSnBAlmCeDwejwMYThQNQR6XKysn2y0WTITDsNH5ypnOB2uL2LQFtASfDyWwunyvHWr63v2rRvzBtVmSsyPTBWI+iSHJ79cVpBMYuudC72fUrSyZKAhEQwSCMwjsvhVFcjb93Y7RBXsYkziaKxc2aSebRqYq1DI8JQN2HfHA6RGDmEaajDaDxTnl821Zkrugi46ApE24nRCIIzCS9PmRMGmlCsHJEcNMNL5SI3v3Uh+LwtME3E6LrdXqLOKSu/a15GXLCQJj00kagSXZO43A6so0DBY1aLI5pu0MDE16kj76wr7qYs3WYs1HFwcq8xQcAf3mkwPzkDQgSrCCRK5gzGN/Yff579xTG4HhFyeM7FD0G6tLfdEoiaMXJ/XTRjedwCft7ne7dQ+UpMvYjN0NXTurC5R8NotOvHyo6dv31HIZtCyFsLYoY+eG4lAw0jk8/ZO/fTTr8HoDoSQxSM7AtrHpTp3pkVWlAICMdMG7x7oHPYEvFWUWCnkf1fetL9esztEoKMpscq3IkEFzsxfMvQnMKXmuNaW1JlsGn61kM+pNNsgferw89+jgyLjR/vCqMhiCIABe+6j5zqV5qjmZciQWcUcieRyhgKTRUVxOZwlImpCkJRJBPILSOq3OUOBiv254cnb1ipwpt9vqCUSwqDccPj1k3FQkd4dDzlDIEvBYAv4pt+t46+gj68uckaArHLAE/OFYxB+JzAb9lqDfGvRPe9312tlOX6S1xzg04+YRlIRD6qbcD/3XmxESQd1hk8d38sLA8+81BDCorlrzpazMViZep5HOcBkvPbB6bUF6MBbWKPi5Ksl7Z7oIGSeIoLZg+KtLc3cUakQMymB1fenXb/fS0JcfWKl1xiql7AwO58k1lUar62JjD6tQMSXkOUWcn5Vl1mmkTrOdgZN/+tbWfLUkdQwTA55ICwgWBQOLWMQXh0U+cFNICIuLpfymqdltpZkd2ikZk+nFIzdDCcCth0c3xIJVQ1NO377e8QaHZwaDmy2OfqdvPBwCTm+ehH+j7X1yXCsuvE7VUFW64sTA2G23H503yIm/6BSBFWXIXt7XOK8jQeKwWQRZpRbv7RnPEXNfPd2xvTIH3D5cHRnTCGxZlnxvY19CW8wnaRN+85DRJ6DTpCw6ACCDzzJHI3tPdJRlyT89JYhdgxLE4wCAOIAStkNwghIgMGzQT26sKlqfoTzrCcBG54un2x6sKWR97pSAwJAps2P3yY5v3VObKeGuTZdOWFx5Is773WP5Ei4tZc4o+ezProExmEsUJN4kTkfJYyZ6GGMIVCQWjrntM35vkhXQCGxlntoTCP7yXyeUEp5izs32OuKBl5oG7i3MuNg1xuHSG0enn31kA1gIcQC4BInCiMnn4ZM0MDe8JIqs1MhyRZzmKUuOlP/8seZ/NfSMMGhr+CyTxe51Bv7n/tV8Fs3k9EzaHDQMp6c0TGgyWu8vz8qX8o83a892jhI4OmyyBWJRqYBTqhD97NWjv7jFYqEFkcoKGseNk2OzbdqpynLVC2NToSn3T9dXEHSoSCo2On01OfJAFJzX6l9qHpzVTXeNm2acnjfOdq7IU2dL+W5f8F9H23beUcKkkSDBbAHIVUlWFGc8dtdSjz/QMWz4r78fNtncDo+fQSM8vuBHjYN7LvV+eWWJnMfqtZsLeCKSIN7f1/TM/XdgMPrMP4/8/qktwVh4xGSrSBOiMIjEoujcZE4EqddPDphdPncwlCXiOv2hV+t77i9M55DYoWbtdzYtmwo4xRT9Qq9uzGD9yobKxPcdIc+Uz1fAvZxvIZD5W44DICRpHIx89q36XLW4Ml2ht7jrslTpTO4bLcMVCtEyuSTBHGb83nGP9d0jfQ9UF1WlyRkYKqFYApLGxUkhRU98Z9rjbhiyrNfI79NIx+notNH6YevEoabRY30j4/1TbgL65s5Vf3v8Tn882jIz++CWsp35eRoBp4TFaHd40jPFmTwyjcGMxKMEjOsdrk6Lrb9H78+W/Eddbp1KCQA41Tnyg78dsqkER7+5sUIunXC7PjraeVd1vtHqem7fRXWlGkGwdBL7XnHGlMECQsFHNlV9956VzJTnSZJ6aR2WxbTAIhbxhWORD9wslmhkuy/0tDu8EgpXcJkXusbuqy5OtiP4QoTFiaohOYO5r0WLY9ihTt2lPkO6lG28NPjQ8qwN6fxSHj8ciTIJ7AusGrojR/mrc93NDX1l2Yp0CQ98XvajYG7kE9riNw61CJRMMe3jpERiDJkEwaWTf20cnDFaMiW82yUkSF70qylB0m6ITuASiiUREPXDpkTfYgrHMvgsSzx22yhBPE4QHxcOIQgCAShxWIksQSoliEUio909a5cvu7848wOzPT5tf+GLoAS/efPU8Wbto5uWZCuFAAAUhtVcps7qIuDYseHpAgmPdmVrgnmUQEDRbnW/1wEKI4nCoeQ2Ez2Md7cNnR+dXpmhULOuSBR4gqHfnOiaGp/5sFfrDYazZfwRj31eyc241clnUGyKMHv8Z8emq+SC53bXZ6qEWUphItG3ICAACAQRkDStw2IN+Pjkx6cpnksUNFs9bD6rt7GvNku553T7N7YsE3PpbJIUMWkIAgwOr8np5dGphNT4lZbBu4s1uXJBolPBy0db9rdra3JUOIkPjxg5LNonKxZaEAlWAPyh14+25a8o8EbAyfHZB4oVQiampLEHZ22FCj5GQnXpaXwW1W10bC7O4DJpH7YM9uvN9f06TyCk1Zkb+yfVEl5h+uXV5Wg8luhpAAGQpRCuKM746uYqq8t78EL/H98599bJ9pcONlJcamVeGoGhEzZHc4/+mYbeXDrJoRHjRiuDRqwoybB6gqFoNEPAw2AUg9FgNBSNR6PxaCQejcQiJEokp/HVk6rfaEnjsekEdmJwqmXM/OWKzH/Vt28qzcqVC8UUvdU4vfto+7baAoWIAwAIRIIohKTq8pNIbDm5o8a+iSONg80D+v5ZR3GWPFvIbZ+27O0Z31wimw14E68CrqhzfMbq8D2xuiIYC5NzjUqSbrPdlplv7r60QSagAHSiRVt/sCkw68wokJVJuKeOtEWi0aqC9L8/sTkQiR7pGdm+tnBnQR6XRjoDoX2943dmKarE/EGn3+BxzJi9zx280GWY3VScwWZTI+f6lxerotHoT9488b9/PwqK0449tjGTxxv32p0znl29pg+bOk6fH4TyFAIMW53Gz6CTExOmO8sz711RymHTEAhOnmwCWofFslgjtIhF/HtgkQ/cLGgExqbI1z5s0EbiZUrB4IhRyKZT7C9MWJysGiqWSl4+1Xp8wPT4yoLnH1olooiTNqeueeR7m2tkDErBYXwOXkPXqRpikFiFXHDaFzCOmKKhMABAxGUMTZp7dKZjXSPrSzIX2uTtBAQAncT5HNrLh5vXl2bDKc2kE0eu5LAu6mY0Eu7ZXt3ybCWDvCIK/zSAbkQJWBQhpuh0BrSveyKVEnSbbBc6RtaUZ83b4C1TAghKZAmEItHwkPYyB7iSEiDIXM0QDLtc7v7e3srysp3Fmk9PCWJzb24eNAKrzFU09k1W5iiSRSwoAqfz2Wwa6fP7bkgJxlx2a8DHIcjUC/1pgMBI8Eo5AQ1H67IUNBw90DWeL+GpWKwkJfiwe1wGgZOtwz958A6BgPl2W39JmlhCuyIEbNIZl6qlAICmSTODwDgw/OIHDTEatqk8K1f+sdBlHpInk1j91TosqZQgkShYohId7psMRYmLE3oWihYpxBox3xPxAwBwDFFxOSgMJ5qXzXj958dMD5RevvuUIg6LSfv9gQarO1B/usdsd69bmi0QMT9lcmAe9DP2aavr8ZXFIy5v+6hRyqQrGIwgFNKZXRgjnsHkMXHi0ODk3UUZX6nKX6qR/37fuR/eu3JbdQGdxN+42NNjtkYhiMBQFkXgOIzDWGIiJwEBkJsm3n++98G1pWuXZDcYTM/cvXJ4yvKXIw2HTvS/daId5TLKxLzXDzY29k08trlKKeJoTTYZm8mYWy5J1IldrhaLBEkEh67SAiXez7h8vlBEI+Q4AqEDfRMUjIaDgbFpq4hG5apE+851f+/ZfSgX3bgqT0zRIQDCsajWaS3mSVI3lXwyJN9Ynd63T3Vsri342rZqvdPTYp4947LvGhyr5LDT2JxSsVhI0UUUvc9u3n9u4N6qfDGPRl7ZtXBq1nFiaPR7B9psLUOdA3o+i5anFP7wgboH6krY0dhf3zkbqc787Y7aAb1ZwmPsvtSblydJkAEAwJ8aerIE7Dwhh4EiQ0bLbzvHX999mqJThSoBm0nbsST392+cOtAzBghYI2DPOn3friupzla+3drz4t6m54825bAoKo5wKzN/UKJRM6n+IaPN4nxkWxWNTQopOgLBoWgYSWlTnUgLLNYILWIR/yZY5AO3gHQRx+jwLFEIL03M3Fedf6JZ+wUKi8Fc1dCoy76pMLtrTF+pkar47BgeOdCtH20fXZKnSpfwPh+voetUDU3YXGo+2+XxpwlYFzpG/7r3wr+Otr5/rudC1ziLQ2TK+BLOx2U8tx3JcFzMYXYOTlsj/jzpFUueieTG0jTxYa2ejWP/+96Zu8qy5oW/nwzxePxyrf5ClCDVgfRqSlClkZ3oG5dwGBLu/Kt2y5QAgBgAbBZbr9d7PO4kJYCRyxxgnrbY7/fPGI11NdXb89LeM1o/JSVY8P31waKTK0oydp/sSJUXAwBYJKHkse1u97UowT9OtLLphJLLtAeD1qBfQF6OZW9+19cCliInSH4o5zAKpbznz3WjMFQkFmqdVqM9cEw7VZ4mPnypP5Ats6GQm0bGnE4SQkXMywejt7txBJGy6QCA0yPTKhZ9ymC1efwtUzO/uH81cyH/+wWXEi4nCoL+1HBKxqJtzkvrsVgxHKvOlO8539M8ahAyGGIuHYEgFEboBMalE0060/7uUTqJL1WJ8DlxkcnpcfiCdeVZd5ZnPfvWGYPVma0W5UgEt4tWAQB2HW9bUaRenp+2XCV+alkeDsNnR6dbRmc4HCIAh7JZvFg89m6XbntBOh3HzvaOi9iMH22u5nHpTQ5nuVJMMFkPLcs7NzDxpyON+5sHrB7/pNUJ4kDEvoK0iLmMY61DcglXKeJ8c9Oyikx5XoE4TyJq8AZcPRND46b+8Rkxj7mqTDM26zjcMVIg4fFYV4SkCeUAA/tYFA6lvOIABCPR0VlHvkyAwvCrLdqV6dICIfODxv4Slbh7yPDzV44eutA/oDO/9N37KtMUvXYzE0N9kZA/GhNT9GSRDEh5kyQDz3/Q8MT2pTkqcb3ZFmSjq/nCf75R7x42b6vKax+3FCuFFIb02s0jo7Y/fnhxY6kmGoqLOIy+cdO5rrGDF/p+9LeDBy72D8/MxmH0Vzvr/vDU5upCdW6aiEkjmDTixy8enHV4Pnh667GgdWbA+H7r4N0birbmZAsZNABAg870u/rOYau7SW8+ODi+v1fv6BuXy8Vug/Vs4/BACLK5vGcoWDrlFsvYDU2jD2+snHa4f3b4TMAVThNwu3smXRZX9eYlX9HIOwf0Xpd/6/Lcr22qFtHoCY8sa8AnojGTlGCxRmgRi/h3wyIfuDUkqoZ6PIHadPEtCYsTuG1/WgEAc3GYhMY0BF0aPvdgm1amYBXyRFvzVPttro5G7ZryzM+/Q1kqUBiGYah32lqXo3zuYt/F+p4da8p+/cQmpZTnljCe3FDaNGzIl4k+h6ohCIBclej9U10LCgnYJCmmk2/1Toz16euHJx9bXXadDd4koCsDqXmXPtWBFFxFCTAUWZajPNE9ppEsoLL4BH3KYgAoFUqtVhuJhOPxOADz7YbisXhSW2y1WtPSVEqJKEkJjg/qHrujfN5m51ECR8BNovPD2WS4My8Muj4WdBwCABAoch1KwKIRfz5ysXXStCFXk8biDNgtIoqW3HUSN3kMqUj85GpKQGJooZS/u22ofmRaSGPs6RgDUvKowT4Rjfxje+U6hXyFmOeJBvc19XeNm4qUYgJDh80O0Vzfqz+e636gWHOxa0woZE7aXD/aXnuN/S98zIlEgd7rYuMfDzsdR7fkq7lsrGnCEsTxfDHv/ca+xiH9ytx0CI5F41ESxcQs+slRIw2G4vE4k8QTj4VXTrXX5KlwHBOQBEWiO9aXtHRNtgzoSQxTCNkL7f+W8Z9/PfR/T25OvI8DoGTTs/gsHIKOjOv7J70zXr896G+asKzLUjAJbNf5ruosZZ5caPQFj1tcEY///1tXYfb42WxaeZb8yzWFLn+oe3Lmg6b+Px9uPNY9MmV1eQIhjZjXOzHzwxcOjvu839q0VMlnDzgtuRxBBMUoHP3JjurVpRlt2qmv3VWlt7g7J81HTncdaOh77XDLKx81f3ih70z7yNSs02Bx6Iy2SCRG4iiBo/MGHwKgSz+r4DI5FNE5bdU7vdsL1Qa75/32CSIUWl+R+dsnN7PoJItOfvfeFQAAEUUfclp90bCKwSYQFEq5HZIbTOB3b59ZsyQzXyVtm5rV8Fjb1AqLP2SIg2e2VB+/OKiR8n5/vEvCwsZnbU//9ZDf4BqYMJ1pG/nH/ksdwwYmjSjKkP700fVuKHzS4PzN1uUb55I/CZxuH3njWOszj66zh0LVPH69Xl+YIa7KyAAAfqd79LsHGy9MmHKFnAdL0ncUKgPuQE/f+B1F6TU5qukoVpouqj/ReiocUpvccQlb2zpmjIemnK4yteihJSVTFtfEpEW1NOfxFUXFHEan1nDfqqIH1hWniy/3EIjPzdUhh8URClqCXmvAv0gGFrGIfzcs8oFbQ6Jq6NUPG2bj4EtL8zq0UxIGw0dEr08J4ilrS58gHLkOIrFoJBZ1hgJ0BtE2ZEzncNIEHBaJl0q4e/Tm3vbRVUVqGoF9Ph3Krl4kjgPAIDCHL8Ag8LsL0z90uLsbB/dNOjli7Hebq/OEIhoXf/l4W6FS/JlyFegmhATGGVd9fY8WpU0bpmtz09JFt0dIkMCClz7hQJrQFoOrKAGJoWkizuun2j+9AykAAAIAI4js7Czt4OA8B1IwRw+SQgIIggYGB/PzCwQcZoISTLaNVeQq0yXceZtNpQTxudk478CgK+c/uLlb4GYoAQPHEjpsAEAgGhq3uIYtvjsrMvZe7C9QXCEnSH19AnqQ/M6CDcvqshQUhr7dNspP52wUCKslTNzpube8kE1gOo99pVy1Ji9jNuw7PzhBI/Bm3cwdOSow1wssg8P4/dtnriMeuOETg40Tgw6LMxTgEZfXs2EIikCR+4s1+WJe/6zTFI2typS/e6mPS5FqAS8UCyEweL11+Fd3LmVTRIvOOGZ1jhgszx9p/MmOFUOzzsb20U3LcvPypQ/VlNJx/KNLAxd6dASOfkpWcKx5kEUnVxR/3PsPAmDEbOcyqAI5+768rEAkur9HR6MwLgPtnzC/eb77lztXwxD0onYiZvL8pK7EA4LL0+QVKgmfQXrDEU84ymBS31xb+fgd5bkyoTcU7po0/fSdM3tbBuxQbMrmvntZPoPEJxzOxkHDR0PTD5RnLdXIrS4fRWA//tLqMIj9q7770TWlD60p/9rmqu8/UFddkKYUcyPR2Izd3dA5vvtU5+6TnX8/cOnlg03v13edbBv2B8O+QCgOQUd6xohorL5r7MWmwVoJb9Jkf72+47sbK5+6c0mmXGB1+Y43af/nq+spAoMA8EeCMjrbGgzIaazUc4cAiIF44i7sGze1avV/23dxZYkmGI11TpmFMHJ62PD7s13b08RbluaaLM4z3WP7eqcGhof+crA1DSN/+tjap7bWPLpxydN319y7uqS6UJ2lEGhdthcuDke1xt89tjF18KdmnQ/8chcqolcVZVRlSA+1a5elKeo7dS+YnB6Hp1zGC0ej36kt+EZ1IQJFfvDqsfYRw7ryrFyFCIQj0+bZVpNnFmAcDDGCWHhg6svbl8UiASQe//B47z/3XvT6gssL1cul/H7djN8X+OH9q9LlHALBQcr9nngJSJo9FIjHwSIZWMQi/g2xyAduGekizgWtfjIWz+UzV5Vo9p3rzs+USBmXl5yvrhqa9xf9ZuKPmwcGo5FYVEZnmwPeuiz1e5f6SlRiGoEpuUyry6fgMnYfa91WU/CFVA0lT5xLoyZsTpLAVqrFTXF/bMz031tq1UIuAEBMMRzRwLH2kRW5adfe8G1AkhJU5Cg/bOjNlglJ/OMo0+kOvn287atblnXYbHGEcXFgZEt5FvP2CQnAQpQgVUiwICWg4ddzIJ0XmN4QEAAYTmRnZQ8NXdmUYCFtsd3u6O7uKSwsTFCCHhB3TVlLMxewZE1SgkRn5QW5CnRlZHCTrOCGlOCg1tBumC2VCeJQ1O2LvnFx8OHVuTUqZYHiYznBgH12NuBP9R26JXpwdTieoATReCx18JVcxvJ0cefwtIDE3jrUsqU2N4YDIUVPOAvBEJQnEmZLBP843947MVuTpYjFwUcDEyUyPh/HfvfWaS8KdtYULeg0Cm5ioBJWlaMumz3o5xGU1mFNZ7JIBJcwaSs0Mg2f0TJlzZHyXzrZ1jJq4NJpBpefRmBVKr4jEm22ONlo/Fdv19NpBMWkVStFf3r33G+euNMWCkhpDLmQvbo8E8eRw5cGGnrGcRRRflKevOtY29qKrNSfQwBcGp8uV4n9sbCGw/GFQtOuwNb8tOdO9/zrZGtOcTqMxPTe0L5+/dNLcnL5LGvAl2CeFIEqOKwCqUDEpNn9wYEZWyAa5TPpG0syH6wpIkjsSPtwnC6Ympl5u7PnVPP4m/VdOJNaJhfqjNbf76mvq8hME3P3XBpoahl6dNOS5cVpTDoRjccELEaalFeUIS3KEm+vLX54Y+WWmvza4nQei3a8eaiuTBOKRA9eGnirceDSxcGPmgY/ONvTGQgOtgw//+7ZjlnrnQXphWrJgfO9P3vlaG1x+ti01TDrdPp90RjUbzPncUUub2DK7Bg2WLpHTW1a/ZmO0b1ne371xonnP7jw81eP94wZEQyc7dId6hlraRw61KJ9oXvM0zE2OD7z9/0XXd7Ag2vKNi9T/+X0qIqNn/rtY6uLs0QcBo3AoLkZ0mef3duqWyEXcOjUsnyVNxSmMNTuC8zY3Bt++NI0iPzsoXV5Mu7h3mE5h/Xj95pj/qCczq5S8fb2jm/JkGwu1BzvHnrzbM+EzUlQ5LjFebpjSMCkti7P3l6aZfSGdK4gMTKVs6rCYzPJJAK7JwKRuG3Gaba6ZywupYC9pTrvofWVGAYIBE+93xMYdFjsoUAWi7coGFjEIv49scgHPglW5qv3n+143el7tEQuoTPeP96pyORdK0UwjwzccMHvVoHNeQ3pAy4pnfHOxd7EQmOxQvC/Z7uSxj6fT9XQvHAwcaYoAvPpVLPOeMRpYQWh9QXqD+u7E/ajAIBsIf+j/qHPqCPBPEAAEBhKoOiLRy6tKc5M1EZbXb4XP7jwrXtq1RLWjsKMvSOTcoXg0MWeNfnq26gtBjdNCWxh37GBqRq1BACg4DKtseif3z23olDNpF1RjROORT5B4RBGXEEJEBgGC1GCeBz4/X6DYbqsrIxJ4veXamAY+vvBpqtdj8AcJeARZOJgrkUJkqeffH/DeyHVhDQ1lExQglDQny1kHBk0cHDylYb+p1YXRZGokKInFcY4CpfIpGIa/TpWpFfTgxsSeHQhOQGFobkS9qsX+k2R2OosZYVc2m+fjQGQlORSGJop4p822XedaovD4M2usV+uX3KqbcTs8h7uH3vzO/dctZ/LuMnHBY+geAQ16rJH4zEuQaBzwk0ODatUSk6PTFviUJ6Y+0p9x5FRY02aOAIh7TZnCY/677981DJp/MUDd+js7o5hA41Acwulqc5CCiFndXkmjqHHW4YSzqS3ygou9epGU5w3E8HilN0diccCSKiQK4qjCZmWAAAgAElEQVQDcKBvfG2mfJlKkk4nj7YPfWNFic4dfHlgsoCGp3MYGh6LiREjLpuQpEVjURRG4gCwSELMpGcKORI2HUeRCzrja/oJ3Be2uXz/s6P62xuW1Bap0ric0Rj8zJryXfUd3991TKc1tVqsbzV0T7g8PabZjq7JHSuKuXQKhZFAJByLx1whP4FgidGjCEzKZ8Xj8XNdY0/vWH5vXcnyQjVCJ57aUCkRcSwC5ks7V2pkPIiJRczerpHpv+2/+Jf3z2snZ8eNts7h6fahqZMdw+80d587P/LKwabdJzv2n+891qxt6Bmv7xh973SXxx/83dNbaorUzQOTv/nGpu21xUIF/xf3raotUgsFbJhG/Hrnqme/cZcvEB6bsd59V3HcH6Og8Evf2KoW8JLDCAAIRqIDdsvu5nExhkzMOIRC1qTLo3e4uw3mHpP14WfenEGi/7mzbtYXMAftTDr96LDJo59x0hgqdvi9/inbmOFox/De1j6T3Zct5/MEnMEJE5vEfnj38o1V2WUSqcnj+0Cr4xktf//BPatKJUeG3B4GxqawodbxUCiyujzzt09tfvTOKpWIE4qFcORyW7fUeTvosORwBHziij59i1jEIv6tsMgHPglYFJEh5r6/99ygI/BgVV7XkCG1auj6wuLPghIk4kJzwFsqlSTbEZAokiNgnfL6jSOmz61qCMwdTAyA1H2gMExgiM/qfbAi5w8Nfan2o59dR4J5gOasQiRcZlv/VFJb/Pu3Tm+oyslRiSKxKI+ilmfx6geNBTL+3ot9t9duCNwcJQhC4V6Dg0XgUhYtGou/Om1xzVovtAyvLM5IfMEfCV5nMf76SFKC4eGhWDR6pd0QlKQEsXgMhuGEkIDD4QIA0iW8lw42fv90xyOVOfNkr712MwAg1UvxWgeWevrzIoZrIUEJdp/sONs5mpooIFCkQCZEAeLwev9wsvvLy3NxWjyfK/z4VyrRngs95wY+7mF8M1akVx/VtX5yNSUIxULbi7LUfNZJrQFBAE7CKATNBnxJN9Jhs6MuXdJPI3e1DjncPjlOvHG4uSJPoRJxdizNv3oXn+BBwcYJfyTki0TZ+GX9dzgWZRFEok1B/6yzxepBYeh890izy7dUwLXaHX97+/ySYvXOmqJgPD4waJBKeQCHBXQak7hi5itFnFVlmlg8/v/2nD3eMkSRuEZ+s41Ndh1vq8pTJvqFJTnhiNkhZtOCUFRM0QOR4CvNw08uywcAGGwuEkO+tb6qNk3yWFE6A8eGLc4/nO+esLsj8WgGl0UgGAQl+VscAAhDEDZFBCGoxRnoaB/ZVJGlFLKmgm4GTDAZNAiC7y/LJAHU3jb+6n/d/9jaCqVM8PTqsooM2Ut9Rt2UcW1RBg3HEBhBYCQUCzMwMhgNR+OxxAvHkXdOdn77nhUkgQ3M2JamS7Jkglar64ll+cszZIc6h1blp//ykXUPrCnNTxO3DOj/8r0dy4vSN1blrq3KfHB1+cqlmT+5Z/U9q4o3VOWsKs2oylMVZkjSpbwps+PP392+sjjD6vSSOPrIxipnJFKTpZRwGUwmrd/p/dnGJcVpYqvLd75n7CdfWROEo+/U99yzLCdPIQzHo5F41B0MTjvdU05Xw9TE7ladiMKCvuC5Jq1BxKzJEpfJORou57//dGA6Hv7bU1txAj/Q3rNEpXyzayrkstK5xPI8hVoudkejm5dmB0Ihozt438qixjETHIs8ckfxw2tKV6rTQAz+9fG2vzYNMidnX/rRvTwp5XBGWh3WyTN9wO5eVqB+7ltbfvHYRrWMH46GIvEogeBXMwFLwJfDEdzqTF7EIhbxOWORD3xCpAs5FwYnJ2PxHB5zU3n23nM9uZniRNUQBqPOkHeeDdw83N6HYzJFMOC01Gao9lzsvVbVEI9O9hutnyklSBwMfmUs6I8E6QQaiwEWid9dmL7P6kzKncHn2JEgAQiAXJXowLneIBUbn7DqTPaH1lfAEKR12gw+ZylfujZLfnhAzybxfU39d1fl3Wh7t4YbUgIRRedx0BOD03EI2vzqUanF+eW1RQIh79DZntJMGYTGE0wg8dtPTAlEQuGgdhAC4GNKAC5Tgng8DsMwjMAQBA1qhwoKCgiCAADUFGcc/6jlX0fbtq0sTFKCXru5kCsSUfRULQG4OUpwk6ARWMIj/2rToWAo8uaJLiJL0DpqUnLpGg4n6YdDu6qH8YB9VkDRb37XNzzOBCVIWJHagx4uwYAgSMllFsn4+3rGjg1ObM3JTDYoCEdjLROmVVmKbWliAoL3No4d7hiPebw6l/t/dtYp+QtX59/80SYAQxCHoNg4Oeqymf1eGorQ5kTeYiZtpUbGZ9FOj5lqCtPDLNqJ5pGmlr7JYOjJzcsCGFynlr3w3rm/fns7REJ2V9Dq9iPwFelECAC1lPfsnvqH1pfrjLbvP3/A7Q0CEL9huiBVSQwAgACYcfns/kCGgGMP+YUU/YLORKJYhUIIAHjldPuGkszkgKRxGBVy4fZ8tSXoHbd6nz3ba/MHgtFoGocJwNzEBQAA8MrY1PkzQ0wQfvaBtWl8Nk7CWTzuv1pHuDhicni0Jiscjv3HfSsRDDW5vRlCDotBD8XiawtU+1v6qzQKCkNdQS+boAMAkBTj0XA49vaJ9nvvKHKFQq5AKFvE6zJaJh2eu/LSLg3rh03W72xaljDw0Zsdp9tHXvz+PUUaaaZCIOLTZ+OBcpEUhiCKwPhsukLIyVQIijVSDIGZNPJLa8utLu9bJ9q/vmOp0x8KRGJZYi4EwCvNg8vV4jQuMw7AH3afqS1JJ3jY5ISzY9z41boyhz80YXX2TFkMDg+G/v/snXd8W+W9/59zdI7O0N6SJVmS93bsOM7eZJBBIIsRoKWlt7TA7bgt7a+9t6XztnAp7b0UbgdlQwIhCZBtZzneiffesiRLsvbe4/fHSYRiOyFAQtv78vull1+2LMtHz/Occ76f57toGIq4wlGbL/xvqyuXZst/9lpt5YaKbQp+LAnO9o18cLbvyb3L7YnYodZuFkLWdo6XCRgPr6v42h0LSRR98cLw0iK5JRTmqiSiPHkMxLeVyleUKlaq1BkMljsUebWpP4fN0PVPfuvBlSQb/dHhSxdMFmR4+icPrn/+m3dvX1GgkvHRqz280bQ2HRSDLlsBV5heGHeeeeb5h2VeD3x2pFwWlVh8R2GmnMd660RbZq5ATDACsTALJf4u7QjkDI4u5JaQjHcae9fNFTVEJRKM29yya4v03VpmRLcHY2HKhBUwiEmHR8ZlVmUI3jVYG893379uAfUaHEUIDnpbc4tTG5OpRIKfvnF62up9bMdSU8xnCflLeGIZyaLKDS3TSH95rqulc3hxrvLW5hYDAKBZRc3JayuQchBs3O78U8OgPEf6083VYh5RLBLYE4lDtR1VeZnMa7fnP5skYM2qQHr1VxCAAA2mUYkEgWCgo6OruLgYx3E2iW1cnP/SB02/6xh+sCpPH/ZQg5Z6W0oSWEL+T6xD+hnWv1LMnZFOYPcEXjzU8J1dK0sFnFa/5/Kg2eoL5ou5OJIW2X+1hzEdgUukkmG33RoK3oyjIMUnSoIrqiARJ5ArWwAkHVmskmA4/EHHBArDVDXScYcLg1E1nw0AeOZ8Z8wTvqdIcWzcbpye3ru0JPuzJg9cDz5GCHFyKuCiw7T0Kfh140BehqDN6dU6fBopZyAei1jczEKVggGZDA4hm9QUiKrEskwemwbDU06v2e1PVwU1l4aEHMZjdy9bWqx6dNtibzB8oXPsQudYOBqjtv9nk55JnJr3UYtTxCbNEW8JTxyKhU8MTi1TSaQssmlYPzbteGhV+Yw3gSGoUMhfpBBrMlAY0IYt7v8812UNBH3hKIOOBiKx08OmZ5sHTd0Dv923AWZA3nh4gUDaP+3Uu/yPLy/loEht0+Dq1cW9JtvJcQMbRSYc7g97JkoyOEwCFfKZl8amwrFYAiQBgCEA6DSaPxJ1ByNDXu+kzlrXq81ViIz+sJzHQhDw+uWRUhmPDoODTf2Pb16EInA8mTDZvPf+9I2ynIzda8ogAEKx8JjXTZ0dqUlMffz363s1GQI6Snvu3boHNldGkskxuyeDyxQwiFadpUVn2VakhCBQ3zNxsWdi9arsSyO22s7RZaVZdn8IpdGYGFoilxTLhEyM7owFL2kdX60udMeClmnva6faOHnSPVmq/mHT958/6mUiKAM7c2lk38qFE6HYcztXPbFpcbaQEw2DbxxudE9OBQemVpVla0eNGEJ7dv3icrFIxeTRabT+aed77SNKEt9f275pVcG4PfCH2q6xlpHYlOulH+3KyOAICTKajOM0ui8aYCD4bCVAuQXA51jD88wzzxfJvB747KQSizMIjJ5IDkxO87ikSsShNuT+XlFDYoLhR6JtQ1MsHJszaoiJoQaXl36bEwmiiRj18SkxQD1JJRIMmZ0aIadxcrqprreqQKm5agl9AbnF0NWvSQBwFNmysHDAP83lkyUCER/DqfI4AIBYIs7G8GIJ90ODY2BEt6ks+9ZGDaVIXwBUBdJEEpg9wb/VD+gsvq+syfe5ggUiToIWz+Hx1UKGLZE8XNP5+VsXAwAgAOTKzOHBwVgsNlsSXOlNAEMIgrhcLiqRAABgDkUsWRK0Tz88ZdtclpfNn2nFznAU3FpJkJ5OYLC43qnteGLXCjGXIWWSGxQyNBHlksSpYX2hhDe7O8H+hp4LA9qVOaosHu/mHQU3eZyUJEjpAQBAn8u2Qq4olgr2t42cH50qFAoGjU6ZkJCzWPUTpg96tLvy5aPjpqHO4bxM8cneMUckujgrA6F97LW7mf/7idBhms7ntYV8JIJEE/G+aXfL+FTEF/16Ve49efKzfZPuaWckEjOMThksPr3OuqIiSyxh8jGMalYg4zApVTDp8oUBIGD4SEPfmopshYhDHV62XEC5bpr7dE+9dNTq8tNgaIa7YEYmMfWhGieMCh4rBGJigtFrdpg8we1F6iQAb17srs6WXy+1mgZBmUxuoZBfJRdXqrmReFzr8B3oHnurYzQajy9iE9pp59aKPA6LngBJHkZ+0De5IVeu5rNfOFi/Y3nJ3VX5DAJrMdgrNUIpyUokoG0l6mq1rEQmLFOIO3TmEbvH5PbpnL4xm2vc7u6csrxpMjT36RPJpB+lxSAwanM1TZg/HNDvLFb/paZtTbEmRypIJCEoAXY9/caQzvL7790TjMcCsYg7HHKFwiwUhSHgj0ZdoYA7GLYHAnZ/EEomfrj/bEG+7MV3Ly4sV1nCkT6jnU4HBqevRWtq0llzeYxRi7vHaDvfMlRVnTfhdp1tH//23UsWyWUlcpGMw2TiKIGiEABDLtuTB5rL+Uw2C5nwuJp7Jhu6tQSCvHK69Y+vnw9z0KVF6sFJK0stL5Dwfrt9KeV/cAZD3zraMNI5uqu64HKPzpaIAj7noQJFJoc9YXT02z0Xxs3tk5YsFvH8exfUeaJzY5bXL41628fL1dJ3n34oXyoS4OSQy+aNhlgoSoNoMwobpLsFPv8anmeeeb4Y5vXA52JVkfp4ffe4PzQybnp488Ku0SmhlE3VskT/Tu0IUBixhPyrctQHro0aqtBID9S2V+crcQwVMomx25xIQLkIookYcW1NegSGaTDUa7RvzlXU+IPpUUPg9ucWQ2nfJAHAEFqVUtnUN5ktFrIwHIWR1CMYC2fxuWM2t1rIOdTcf8sTCcBctmZppuT5Y83He6b2Lc3/xtoyDZcj4iEnBwxLFTIanGTjZJaAbUsmDtV03BJJgNHpObl5Q0MfSwIqHBuG4Rm5xVabVaZQOiBal9tXKSR+vmetkEm8e6YLw1DlXGUob1ISJD691UtJgl+/ceZ069CX71yUp7ySMECnwblivjsYoiVjc3YnWFOswVHk3ca+4kyRmsMdcFoFV0Ob5jyA9DyHTzzIQCzMppOhtDbGVGUhBh1dk6sgUNr+yyOxePyOXLXW7/zl0U5TMHBvedbrR1tyKrL8kfCvvrT+8pDh8piRgaHpgUOfamRmE4iFSQQT4qQQZ4x5XO5I5PSg/q6izKUq0ciUc6VGKiGhYxd75fnqPKUoRKP5Xc7jneOjVlcOny/k4PFkPKUK/Mnk/v6JziHdmMn+0PoKOnJNZIhSzF1RpvnqtsX+UORC5/iFzjG3P8QmMW8gfGlAPzntpDKJU8Ooc3h8kagFeEr4IjoNOdA5ujFPIWQQEAA/eLPm1w/c8YkfHIYgIU4WCvlVCvGdeUqNhGTRkn872SZUSlrMDlsowMUwvcP/RttIpUyo1VsnTY6HN1dBAFwY1g8g8M7MjNPD+k2FynwxD6XR6DQahiJCDvZWQ79MwCuUCotlAgiGHeGYVuu47HIHCTwejrVbPa1T9rYpe7aI63F7TneOsTjEgNXVYbCc7R5r6Jrg7KgQIIjdE7AFAr02h90R0Tm9E3aPzuGZdPqnvQG7P2x0+vbX9QZ8IasvAEcTP9t3B5fAfKFYtSpDxCZa9Y4nV5SuyJbnibi/f+v8qspsggH/+u2LhWsred6IJeyLghg9SRuZtk+5va93DD57qt81bT3aMtA+amoc0bePTk94vIZpOxJJBHBo+7Jio9OHysX/e/fyBypzcYQWjkfrx6b2HbgQNEwzCNTkD5VoZJebRgYR2NA28V5rd3271obRM1Aaiwa9cLgxr1g2FQQ7CjLZ3tCzX9/6ky9t4DBwAAAMgAgnmSiq8/sc4RALvZKBTbkFCrjCTzxl5plnnn805vXA54JNYFliwXMfteevy1yoEGYxuW8fb1NkX7fWUDo3Y2d8WlJRQ/qQZ0bU0OlhQ56E9+cPm+5Z8QWVH0Vg2pwFcBgY6gqEBEzywQU5fx411J5uT0kCGIIWqeVHu4duUyJB+mhT44/SYCgJ/ni8cd3VckMUlJ5Zps44OWTIFLAPNPTeWkmQmv30NUBiaHWOvGlwfFWBMoPHAgBwUDyEBmr7zaUSIdW6+BZLAgzLycsbGhyKxaIQuNpDjYoZgiAIAvF4AkAAguDevt6TpKBaRG6QK2AIoqJ3nnuv7pcNPXcWZLJnNda9SUlAqQLwaU4EEkOrChTNfbqqfEX6VjQNhjN5bC6JB4KBGd0JKKjYoRdOtmZlcKNQzBYM2q4tRQpmrZDUNzc+VSlnYHrdIUoPUL9V8lgFUt7RHu2AzRWOQq+2D+cUy8eDkYYTbVwB+dJj27eU5e2oKmBg6KnO0fN92kKFmIHTb35Arke6i1KIk1w6/kJT35ZSRblUnCVmftCt9QUCwwbL8gzB6gKVko7EoWTxopwVKsUrZztqe7QyDkvMIyhVYI9E9humhy8OPLZpkTMcMXn86FwOxhy5cE1FNkZHGnu1P/nrqeffrTNY3EoJV8AmxTwmuDqGrVoTi4XIWUwZye42WT2h6PocBQDgVOcom8RWFqiSAICbWBLUpMAQpGSxDVPOP75xDhII7l2s4RL0Ny5PvNgwkICgUyNT52o6HtxanSPjdRhsTn+IyyRi4bg/GMuSkVyMoEFQEoAxu+OS3jnGIpo6x1/vGm+cMF+asinYDBVMO3G4papIkczgbdXILJ7ALzYuXCTjtwwbMImg3+4bdviaDLaOxgFIJUEmLBYpednm01u9zkgEp9HZOJHBZcl5zBKpiMToMEQzufxHz3StKdNMGBzfenBlOJLwhaKrc5UiFvnCxT4FieaJ+cFItGVg8lev1WppwfpO7diUQzuoq+kZvzRs/LBp8OCl/rZx45jDYQ8mH19VctDuLxdK7lqY/ejKSjYbsydZ9gGdnw6+um2JzuqO8LjHvryxQMKDAKjpHfvBO2d+1zQoi0YUykw0GA0FIkQSXrukcKJ1eMuq0iUVWY2BaGRgsmF8qqauL3ddXr89vCdLpp2Y/u2jdxapJdSwwwCE45F4Mo7R6AKMEODkhM/NRJBRj7OAKxTi5C2/r80zzzxfAPN64POiFnGah8YHpoNVQsHKAlVd1xiOo0XyK5fOf5yoITodPTZhchhsMgFbJeGNeALdumkxe2YVkVvL9QxBqiOBjMvcXaz+86ihs7F/9+oy6le3L5FgznGGAJBwWZfTyg2lQGEEhhMrsuQfDegz+axbLgnAVYM4fQ0wcfqaIvVbF7tKlGISQxEYVpIcLgc5crUpwa2XBPQ0SQDDELhyNFclAdWSAIKSSaive2lRsehqjBCJoRW58rcP1v/y0uBDC/M+myQA1zHBbwybga8sz3qntmNGHVIAABvHqO4EHw4aGibM5RkCMq2bG4mhKAq/fL6DjiDLMjNlDOaA0yoiGFDaXFAkZx3YDYzU9NOckgTmoC+D/LgN9oDZsTpXkclj/W/n2LjT80hepjIZO31xQKMW/eK+9dRrlAIOlQD9Wl3nJZ25Si1DaZ/dfUc5B9KfaZqcxhBkfZZy1ONUsjieQPjDbmNr71jQ6h4ZM0Yi0S3LCio1kh6j2wngSoXorbrus71aGY9tDofqDNaieDwaij22dbGcx6IjtCmXz+T2xRPJ2fOuFHNXL8hWiDh//qh5UGcxWN2/fK3mZ6/WvHe28/KEqThbenZUL+cRSDDZNjL10Yhhe7FayCAAAG9e7LqjNEsp4ECfNOBg1gR9/a8fhf2R721fpPX6nZ54lpht8gfvW6BeKuW09+lrfMGzY8ZgKKIWc+FE8k/d4yszxXAcPjNm+Gvr4JE+bbPe7I3Ec2D6/QtzpwyWZZnibywrWZOTIWGTb5y8zJYKcSmnQkCSNGRtVsahpt7tlbl7K/K+s6pspVpawWF2jxjvKVYPjJvz5KJ95Vl35En2FuZiCOqLxFr01jOjxo8GdC16a92E+UjHqFVnbeyauPfOqn6ENjlpLhLz9Xb3sQHdax2jE+PGYx0D7zX3nuoeN0ZDcqFAZ3b9/N51X15b4VEI/7Z33dJShUbGQzDUEgbP3LWsTCZ4tDyrKRHuHpi+pLUaw8GumrYwB925ZcmkwZbksb9Rkb0sW3H4cv8Trxz/3YeNJjr9pxsq1pWpZSzcEQdfXVG2qirvzz1jiUD4pNnRqbevUTCTEK2pcVi8sng5yYzq7VA88R8PrhewSQgAGAAIgHAiSqfRaVdjhCAArEG/IeAp40tnz8s888zzz8K8HrgFrCzIPH6xq8/lLxByNi3M++Bcr1DBlF6tNfQPEjWk4DJeqOspVklePtbSRKLjLt9gLI5AiVwuG4Fv7SFcw5wuglQigYzDrBayD5zrypYL0hMJeCLir6faylXSWysJZpCyxalyQzP6FgMAYok4B8eXqKUfDej4BHa4pe+eRbey3BB09Wv6TRSnIyVKcarcEALDM/qU3QZJQM/JyxseGorFotCs3GIYgmEYBhCIRSNuh5NKJKBgk9jWJYWnT16+SUngCnuTAMzpKLjBj3NyvTqkIK07AQHBtWPG0gxBKnYoFI94QvHzOvNHdb12b6BIIVZxuFQ6AbgqCaj/DqdpAwroOgc22/Lud9krBNL0lPrLuumVOXI5h6lgksNmx8GWwWPvNUYF+O8e21x8rQpVCjjlKumRlv6TnSPTobBGwCHon2IqU8zeiagZNpRI+Ro+W4iTgy4bk4k89vy7ZDDxyJ5VmxbkflTX95MH1ycRaE9JbpGE129125JQuVL88oXOwzprGYvRPjj5tU0LpVw2AICko1IOgwbDVm/wktYcisYhCJpxqk5Z3W1D+r/9v/vuXlXiDUZ0066ybNnCEvU3B8emGoYPnuys6xwbMtpaPOFyBpGvFB25PGJ2+x5aWZZ6h5QquN56SD3fNKw3O3y7VhSPGW0bl+QUivjnho0ZuXI7gPsa+lctyvnXjWUSFqFkkW1Ge82IocHh05tsdBSWcxj5Uta9perdpdl35CirVWIFl7kyT3m+Z7xzwlQoF41Y3Y127/1LCqcBGNZZl2v4OrtzfMrxzY3VPBIDACRi8cNnu+5dXXZ5aGrzsgK5kJ0pxZdI5FwcV/NYJVL+crVoR7FmfU5GgZi7kM8+dKgxSKIOs7PODwJW18WOoQ8vD//5zOWGaXcRiawvz35geekDKxZUZkmK8zIO1fcrNTn7lhbSSNgFgUI+ns0TGEPBi1rHfZV5fALjEJjB5YODUQcPh6yujw42JuDkV7cvGdCaA2zWnhx5+9jU7uf2H2zu94YiyrKcV/auQhGkSCpMJMEyjez9bn0kmXirdzxMR4TuoITNMOpMY4PTNofPMmDgkcRTe1c9urWaSOt6Fo5HUkVFIQCGXDZbOJjPFWaQ7Jv06swzzzz/mMzrgVsAm8A2lWcfb+4f94ceqC4oz8l47aNLQgXrZhIJbnzD+2zMGTV0dsBw8JK2XWfrgxN43+Tze1eXi7BsBnvY6lJyb2PU0PXMUyqRYMLmLlGKalzeM+e60xMJpAxmMBl5vbZjc0XurLe8lVDjf72+xdTBU5Lg2Ybels7R6lyFWnRryg2lT/2MZTC7KcEXIAlEYtHQ4CAAYHa5IUoSJBLAarOqMjN5PF7qDz+VJEgCQCDYDWKHwKc5I25QhxRDaEUZIhEHD4dDZ8ZMQgYuYBDheMQbiL/aOLC6SP7M3jvCkfjh1oFU3SFbKJCeZAzNeqTLg/TDm215U8FCqWqkJleAjtCoil4nB3W7S7OWS7jv1XYBBvrl1ZVRLJHeowAAQGLo1so8HgO/0DvZa3EuUks/g6Ng9lE9X9f9rZWl1PdCnGzp1+N05LsPrAZJmE9giUQiq0BSxhfDEERVJi0Qc3ut7g8CYZolePTyeDYbyRTxVWJ2/GqOBANDJWxGnoQfjSfMbr/Z7U93Fzz9t1NMgv4fX9qgkQn2rlvw44fW89mMM53jCb29FYYKytWPLi/G+JzjfZMH36v/zVtnbQj9q6tLFfyPnSoU0KxiXODaFeIKhPY39H5/x/KVJZojl/syBCyEhPV+79fKMpPTzjG9LVqotoZjGQlIJWQXSwX7FuTeXyzdUijPl7BFLCyt+HIAACAASURBVEzAwOgInACARK400iLp6IoCFQxDr9d3RyHo/ID5lzuXXLC4aKHwmizx8ZahleWZUjaTgdIhAJ556+zG6vx1lTmPP/e+nSQrVZxJo0vrcCMJGIIASaeb3T6DzWOwu012TyQS/WN9R8zojkRiLDLJZ9Kf2r58eYm6LxT97bbF64tUviSoM5lbjNP9Puexc/1JARdh0Nsm7Ce6jTwljwdoHw6MHe7U690Bqz90Ydx8Ykh/bsw0YHX2jZkuXej2ZQrz8wQOT2hsymaYNLUM6tYXq3v0FhoNlpdk//vqYgiiiXH8sn56mVpmcnp+98qp4xMOkMHbtyJbKRMNtY1GPdHv7F25okxDYPQ/fvueEo00XQlQMULUsKdSBYRpecM3c9rOM888/5jM64FbA4vA8pWiN1sHyjKEORKegEO+fKJ144I8KiT97xs11NyrMzt8T5/qyQwHvrtz6bDNrWJC8gz2MkUmF8ds3gANnrm3d2u5nnnKwFCTxw9B8JZ8JZVIgCE0PovwBsK1l0dOtQ4P2SwlSqmMN9NEuLVQ44+jSL5cfLCpJ1sqSG+LlpIEW/KVR/S29y4O7V74sW75nKRP+meQBAIS8yLQoZqORQVK8toZ/AySgD2rAmkyeVUQQACG4GQyAUHw+MR4UVER1ZHgyh+mSYIlmRKNkD3jnVN1SPlXk7ZvEDuUTDO+b+akSNUhnRE7BAHAwXEln2P3eD4Y1I/Z3LQY9OSbF3Ys0ORnciUkM0fKn7PuUPLaVnrpbzhbG0DX1wMAAASm0WDaqNUlZBIcAgMA/P5iz7dWluYpBb9961yCQBA2K18kKJOIht32dFUAAaAUcjlM8rmj7W+evzQdCC3SyFDaNVVcbsBsl0WD1szE0Mq0kqDvN/cvylEQOFaaLTxwqmPzkgIWj5CkyRIJi1ydnbFCwjf7A2IRo0wtOdk28qM3aydsbjaBSnmMlPeDTWBUJSKz2984YZq0eQga7bdvnfvhg+tyFSIAAEgmIQjKVQhtifhPd60qkLNgi7c3EjzYNiWj44SAy+azBTh46q5lYC5uIAYAAD8/eH5HVQFVsDWYjJxpHhn2R/aWZJeJ+ftPtG1eWbijUEpAcBSBN2gUEiZBoogAJ4U4KcRJEU4yEFoyCWzhkDscsob81lDAFgo4wkEmi54j4//hWOug2YcxaKcnLJvlXKvd+/qZzsqsDHPUx0Pw+p6J59+7uLoyZ9zibBrQ7VmZ5w6Hpqa93ePTJ7vH3m3uf6nm0sHm/tM9YzXd4+f7tM8cbSgmWX/54d6715frnL6QNxTIlRtjfms8dmeRiM/CMoXMDRoVnUhggYTVFfz1ztXPbFksYxPT0VDrlMPqskfD0OZ85YOVuVsLMu8rz67KEC5XiWUEmvS52nt0IB4B1QWuiWmzH+GEQ0FnoN/h+tL6qqEk9GCOZHlOZiwWP9U73jM49VLt5YsDk0S+sjpH8tzGygw6FkHD50/2PLlzucHi5LMZP/nKhoy01HbKLTAjaViIk6kZATd3ts4zzzz/sMzrgVuGjMNs7Zs4PKS/I1+ZLRV0Dk7ZYyEqJP0To4ZuuR5ImVxigiGXs597+0L/pcEXvnP3pnKN0x9cma8+3zyyMFfBwOl8Bv4FNC2+ngnIZxCTdreUw9xdov7zqOGN184cbx5452ynLxxdUqZhZJDdI9PlKtltlSsgTRJkSwXvNXbPKQl4JKEisNf2n32rY3Dv0pLZG+Gfn08rCbgM3O7xLynM/MuHzRV58s8vCZRK5dA1FUhBElyRBBAEYAiGYCgUCnd0dBQXl8wpCX7TPtxtca3SSFnXJlpQdUiH3TYxccVp9omS4OZVwY1jhzIFnHAoJGIxn/rg0tjl/m8/tDy9jXGq7lDKUWAPB4Wf1EEpJQzALD3Q7bCU8T8OAYIAaBw3VaiEsWS8RWchUKQ0g3vi0mi9zvjS17dvKNHUDhkujE5JSSalClI+CggAmz/cZfJcutBzyWDW2lydU9ZFahmKfLIqmC1Rjg1MLs6USFkfJ0//4I3TP927tnvK6rb6tGZHwaIMPoanLLwUSg7jriKVkI1O2P3NVu+2JUUqPvOtuu4zPVoUgVRidkoVUJWIYBR5X29qvTSCI7T8AgWbwFg4ncpTN7p8TBxV8tkkCT9QXSpjYDpfsPtMh1VrCmLQ3oX5q0s14OZIzU7ziMHk9O5dWgIAGHbbq5XKp1+uYShED1fkD05YdGbno5sX8ei43R1YJBUy6HSQtrqoBRaNxzgYKcRJPk5QCoF6YBDNYPfdv7i4vnfo3aEpj8F94mJHv9YyaXOPGh0tvYZDfYOvvt2og6J9U9bmUUNmJs8TCmdm8ErE4tWFmh1V+asXqh5dXbG5PHdxtmJRtrxSJfVafS//cG+eUlTvdjDVApGSp20bGjAFCnGGnM2iYxCLjoUS0WQ00dRjeOb+jSUyAQAgW8jemCtn05Nub+znG6qWqiRKLpNHYuf6Jj66PPjymcs1I2N1tYOKAvG371m1Qym60G95ZEnW5UlTGAHqspzz4yaN3a012E/0akccLlo8qc4U+whCJOE/UpW3LFvarJ3qcTj3/+85pztQrJE8uLly16pyFoGH41FqcikxQA04VUs0fZ0k086FeeaZ55+XeT1wK6nUyI4397dZXNtKNAWZkg8u9N5M1FDyarDyrb2kpkwuaySwrbJg2OVeUaSOYIlVasWJAf3yXOWrxy9VFyhZBPYFNC0G1zEBaTDMJ4mhaYeUw3xwQXbv5PTGxfmblhR+oHNnq9kPlBflqPl/Pd1+uxMJwE1IArPL/bejrW6V2BuEPrrct70yj3VLc4spPq0kUPDZXUbrkqLMlz5oWpinmCEJ4slEqhHEzUCnY7l5eSlJQJlxKUkAwzCVWxwMBDs6OotLinEcT/0tJQmOfdjSNDB22uLZXaKZMWW9TgsA0IxuZXOml6QrgZs8KW4cO8TDsfOj+ktmK1MlLsvg5fJ56bWkqLpD+xt66ga0q3PVKu41GQU3xhMNMFEi/Zn0ykIAAL3TiyM0BZeNwLSTQ/oCCTuLx/3xn0+06szvf+8+JY9FFSStHdJfGJ1anik3hjzWoF9EMOKJ5KHOiRwS6dOafvLQHYUaacuwrqZrrHPKemNfwWznQJfRrnf7thWpUs+c6hzFUKRCI+s22s81DuxZUybmsUoEYmrrd4YqgCEoBsd2FeV+Y2khh0CHbF47gCuV4sMt/d/409GRaSedBuXIhBAAySQ4bbJV88mmy+N7VpQsypVb/cH2SXMwGg9H4w1jU1Iuww9FiriiSCJ6ath4f1l2RZb0aEN/CE16zZ4PLvaa7B5vIJze2mzGhXHGj38927a+NIsq0moK+oZNHguJDZztXlyo/LC+b+eqMpWY7wpEIrGEnMuIJmLRRDy9dXooFiZRfE7Z2We0Zwm4mQJ2aVbGJZODTMBOh3PvwoJf3btuc1mOzx08U9ufVyL51QMbH9+0+KkdKzaUZ/Hl5Aq1isPHGUwUoCAGkmEQp2MIk4VxuNjh0917NpUKJaxOg61QzFkmE2AJqM8R5lm9m8uzBqZcG/PV2Vyewe967UTXnsXFhRmi5JWDjI267b892bUpU7wsR36hX/t2ffdP3jsLwdCirIwMMeuV1xsiXPqP967fvTA/GU20TIwaQvE7yjRjCCLKFC2hxexxSCjnFWQIVhRpNDLhkNN3R4FimUZqDvpdviA/Cf/X80dZJHbw5w8/tmNZAI3awyEhTsaTiXgynooRSrkF0kfplt+25plnnr8X83rgVsIisM0VOYNGu4BJaEScm4kaSl1PodtwbUVhxBsJKJlcc8xfLBOf7BndU1nMoKMLlKIP+rTL85WvfLGSYIbxR31ehHZFEggYRJ5SVNs51p2IPLWt5P7SQgGDlDFYQgn5BeQWAwAgABIAEChCg6AXTjSuv7YC6W/fPLdxcd6uBTl1BrtYKXznXNvG0iz231sSMDEUIZBDBl2JWLT/ZNviosxU/kPwalvoT+UluEYSwFcSCShJcLVJGUxDaF6fr6unr6pqIZJmmLJJ7J4VxR/Wdk0Yp9t84a35ylQubK/TUsITz+5Wdr3Dgz7TGTG7hzFFMBw92zz003uWTcLxpkFjp9FeKRfOblBAoOj7LX0ojVYiFacyCm58DPFkYsZ5PUMPjNvcVLAQBMBzdd2PLy+KJxNf+dWBLcuLHriaO5tSBfvbRyQkg3IUtBusgybP8vyMI+d70CV5AhbxwJKcQrHo0pDhWMdwx/VVwVzOAV2xlJ+Zlib0Zl3X4jzlkNmBxxJmh2fVytxyoQQAQEXRDLns9lAwXRXYQ0ERQUYTURWPQ6UWjDq8Fy2ejVUFRVL+yY7hXx+qM3r8LDZ+aMpeLSD/tL/+90/uYBMYlWAQjsb6jPYRq9PlD5N0BAJg2OYasnjuXZAr4TOP9I89+8CG/9i37q7lxcFwrHfc/NRLR+2eQCyWUMv4NxAD6c2Me52WXJbgxLB+e7bcaHX5A2E6Qtu7bgEAYGjakcFhcQkchREERsLxSCwZpx4AABRGZsvOaU/AE4zkSniuUOT0yNQ6pbRx0j5tMAasvuYe7YmmgWMX+7Jk/JO/+hpHQpRIxMF4ZNTnLOVLBTiDGkMBTopwUkoy+RjBx4iBYbN+2vX1LUtDobgvFF2kyEjGoWat7eHK3OW58jOtQ4VK8e/P9eeo6TZz0OT03b+yJJaMx5PxSDzWZtd/c//ljta+wy39JztH+SyiKlv+w7tXyhXsJJz8998fc9CT+x7dtq1AbLEF7312v67bZIzS+ny+ChiSSphuCc8hYT+zsrJUI23QWfvtntW5GSZfwBUJrVDKMgj8wKl2IYt8/xdfKs+VQxDERFEpyRp02TzREB2iMenE7AAhcNO+u3nmmeefhXk9cIshUIRLYi839lRlSrIk/BtHDc24vX0GA+gTSSQTsUQcg2FdwjM4auMxCKr8KJeB12nNxVL+ycb+NRU5X0xHgtnGH/VhERqMwHD/tAMh0MZkpPt45/aKgmypgHqNlMH8wiQBhZTH6h4x2mLBAumVwJKmXu240fGVO6uFbPqOMs37XWN4Bvd4Xff6IvWtrUBKcfOSAKXB7kC0bnx62mjftaxof21neU4GTkeDaW2hP5skGB4aisVi0JWWBCAJAEzpgyu5xUm/3zdOF+WLOfQ0w5rNwPeuKT9a0zXYOf6HftPybLEXBC0hfwnv4xCaVDrBzZQi/QzdCUqzZS8ebmASWIaQDQCwewIvHmr49q4VGiFvg0KCQ3EmjVY7bmTj9BkNChQCdolS8k79NRkFYoKRSHvNjCOJJuIkgqXO6xnBQgCAFq1psVoGAGjQmlkYukghPXZpqG7S+IOdK4oU11YW4rHK5MJ320cujE6RMPbC2YEVJbKjLu9kNPLjRfmFYrKIJ1IKOHdW5PIZROuQ/njHyJyq4MaZxIAyo82OB1aUtuotTW2jm6vzuEJGuoahLNp0X4EtFGChSCpoRMIil2tkjy0tEjKIUafXGE0+uLiQIPEHP2ryDuos067BUZNUwC5WS6nh4pJ415R1RY48Q0by6XiH1vpu99galYyGwOFI7HjnyJfWVBQqxSwSL1CJqdZmgVC0sXfy6VdOm+wefyiS8hikj//LZ9s3lecoBRxKbfaYHEZP4J7ybDGH0dCj3b6sSCnmpix7AEAimYQhiGoTgcC02d0SKULR+JjNlS3m+iKxA11j9xSpYqFwX8ewmsP+wQPrnn18u1LMbRsy/PG7u8qyZGKC0WE3eqLRRDKhZvKgq1IWAoDqbAAD4PAE3j3T+fjOFfFEcsrtK5GJQtHY+z0TDy3M0wjYShFnYZ78L0ebHZF4gUjYNKT/ty3L2DiOwjQAoJOj2v+pGeg53RF3hcUYtndF6e5lxaWZkpr+kf4+05PPHNLGwo+ur5oYNx2p7zs5YPaaXAGQpBWK8yXsGIvsS0B3YMSXC7NQOrK/c0IjZE35AtNB/wqNZH2mXG+wn2zov3dN+Q/2rWMzrvj6EJjmiwYEOEGHUW8s4gyHcjj8GS6j+Riheeb5v8e8Hrj1SNmMY5cGz0yYZ0cNzbhVz3k9vbUXWRRGYok4ByND8fjqPPW7TX1U+VEpi+yzuvh0dFhv5RCYUsxlYuiUy4fM1WboFpIy/mYoHwaG9hpt49HgXnXGBxZ3R9PQjHJDX5gkoGzxUo3sYs84VW7I7gm8U9Px+K4VDJyOwsi4z7ahQN40YCqWCd9vvPVNCSiga8uqzCkJwonws+d6W3TWRypyV5bLJ8zudWXZfzzSUJIt5pHXWLo3CM6ZEzody8vLHxsdiUQiKUkAriYSQBCcSCZhCA6bdSOAnSdiY+jHk8IksJWV2W+d6XBEQYPNZnWGthVkMejXzNpsR8GNuxN8Kp1MYmh5TsbLR1suDegRGvxObccTu1YI2AwAAJ1GK5KJRGw8HAkdHzIOWl2FYh6eFpGP09E1xWocRQ409kI0wGQh1mDQdjXTF7q6LUoRvBqZk5L6s4OF6LQrlYVqhg2FYl4mj/mjPx9v1ZkPfGdvOBFNBd9TEHRkba6CQGlHeye1zqCRDh7JEa9WCQa15o0FuSnfXaaQs+U6quBmMolfPtO+vjQrASCtw/Pq+w2/e+IueyQoJWZuBKSrglginsGYoxG1ksuk3AXGQGR/j9boDkoI5oVz3VYk3m+ym1w+byjMxrFYItmmm16SJfPEwvl8oScaDcWSi7JkR8anai4N1vVOfH/Hcg75cewZACBbLli1IOtLd1b5Q5GO4an/96fjJod32uEFAIh5zL4J86HWgf853ryxNJuB0ycdrpZu3X83DZRzmAs00q5R40uHG1dX5HhDkaPdY0s1MhaBJQGAISh9V/t6p0OXwargsQRM4vW24WUqSY6I88q59vtXl//k4TsKVWIIALvbT2DoI1urIQCCsbCSyZsO+cv50tlvBQFg9wReeL/+sbuX0elIy7ixRCbo004/daxFBdOgaAwAwGYSeptzQYXMPOV8s36wOkNUqBR6w9H6Ud2vjl3c367dnilZtyTXSHDurtDojPZzg6N/OFr/x9fqP7jYSxcyZCjuRSE4Ft23qrwyW9hojZAavkZvw6JJCEMZdt+oPXZqXFczZDD7wzgK71yg+nplcSIQ++azB812z1P71qWafFOE45GpQMARDvljUTHBTF/PFJ/qZJxnnnn+WYCSyfQb3Dy3Bmcg9MK5znsqcksyBJ5A+PVzlx9cU8llEGCuG/YMbsfVltot7nVauEn8T7WXv33nEgGLdIUi/32us0LMq20e/MlD6wVsMhyL95vsRTIBdhM5i5+H9N3rFJ5wpHF8Kk/CRwG89dVTxf7wO/+xL/0FB7v6W3r1z+7bBG4byTQD1BMIvdfYvaY4+62atn/ZtkTGZ/c6LQCAEp44GAu7g/GnT7TKCPqYwfrsA3dIODPvmp+f2R55uzfwwsmWJzYvFrBIs8t/z9NvdAWSe9bnP7miBCeBHGc3DxukLGJ/TedT960RzHVIc4789TAY9B99eISKEqJMYRqNak4GotFYOBINhcLhJCReumlLkUp+tRqJNxo7PDSpJGmP/PgdXTz0zCNbAzC0ozSrPEMw+19QO7vU9zc+tsSn35Js7pt843TbQxsXLilWzfiVJxQ5OTBK4mSv2bkhT7FQLgLXnnr1w5N/ONEC4ck/3LdVxmGOuO25HMGMGfGnncsQAIFYeNTjTvcPdOgtQiah5LEAAA+9c/aN+9cBAOhrn9q0oeyjHz0IAAjFIwAAnPZxnmuKC2OmV5r7CYy2RMF/u+bS80/eVcS9xm6jaBjU7W/sjUbjCjH323cuhpHkjMvLS019y1TS1OA3DetPdY4+dfeKxpGpqSl774T5oT2LyvjiG192Rj2OWCIBAJgRPj6Dwz3an9W2T57tWrt7xfZsaTgeax3Sm10+GEEKZdzFpfLt+flNY/q3eia+u3pBoZi/99ylswcv+ocsz/xgt0bCy+SzpRyGmHXNVjRFEoDay8N1neNHLvZG4/FJs1OQLbSP2RYVZ0bJZNKTHDXY7EpBWSjWMzyVqxCOGGwkjpZUZoetXgGb4LPIZaVqIYehEHHVUl6mjB+KhXEaPT0gkGLaEzA4vZUqSbfR3jg5/Y2lRU3D+lNdo0/vWUu9wO4JvHCw/ondKwRsMglAMBYe87pLede4elKcbRt54VDDl7dWF2ZJDreNZGBYy5D+YG3ntJy3DKZFQhGDxZ2VyWcQWBhLOPzxiT5TLBajwXBWmYIlxPodiWiXdkGBPEEkfZaQXyBQYJHeAZMDjqP+GMzCkjBYtzB/XYGKx2MMW5wSLrPX7uZBdBWbGJgwHajt5BUo6FCSG/LREby6WLV+gTqPz+8eMZ1rGx03OV763m6FiJMagnA8Mul1JQBcwBXOuR7mY4Tmmef/MPP+gdtCetQQn0kQGFrTNVKZJQdXtkIjKHxdgxu6DZIgVX5UF3KnOhKkooa2L8zdf7KtNFv2hSUSzLkfnAAxDZ+rs3ulXOaDC7IvdI2LOYz0CpIJLNncb+AQeKZwjq3KWwV09SuGIjlSwTsXO/atr3TBESrohdrPjiXiOApTrYtvR5+yFDMWA+UlePFEKwOjv3lxgCEV/teepUUqbpPWkiViqdlcKZ/sn3IsLVK9eKSxIlfOmOW4+FSxQzMqkIK0+qOURoBhKODzRSxTBjo/kUzQYJopFKozO8rFxOIM+c7VpTUX+msGJlbmKPb36zr01kWZYvxaqTnbS3C9XduUTgM3fXYoxNwlxao52xhjCC1XxJ/2+kKhyFtd41ZfMFfExREa9c6heMTsDr/eZggmEh6Xl0GnF4iFQ267LRQQEwzqGIKxMAPBoKsqJQnAgMsBAJCm7aemBwtRm/QftAzU64y/eXCjRsIDAFCBK1SbAgSmpX8uNZ+1oyyLjSF/res9MWlfKpcgTOCKhATYNeYy5SuYdvnfOXG51WAcsrjTI4hmZxK/WddVnaMolItqhnTnWgb3rC5lcHEJwYBuOLZ8jJgdRDSbQgn33Xfrnn/yrq1lmhF34MLENJvHKZcLStViPotoHtX/tbb9cGsfi80uEnENvuBHvRPTOkvA4v3hnlUbyrKpPgbTnkASgNnJ+tkZAhiCPmzo37ayZDIS/PHO1b96ZNO3d69UawT5ElE/SX/7gfWrilWXB/S//Nqdd1TnD+ltm1aV/GjPqqceWFeikYYiMZvLX3N5+P0L3a8ebz19abC+W6ufdvVrp80ObzgSw+mIyx/63zPtRBKcHzP+V133OqlAa3H+8r3zRWKBRsLzBsJHG/t/8WrN8jLNuNHuD4W1FjsEwbZAQMZku33BKat7bMrWPWbqGzedvjT8i9dqXz/Z1jlqHDKYj3VPhOy+GADFORlmDvGHe1b85ssb+WxyQG9+YufKiirV4cbh3YuLNizK8yAJfgb34U2VOXI5gOEfbVvylc1VezaW31VdJBCSrdPRSYtZDKFeFGSKeQ+uX7iqRO2LxyGEdlFvs0bCW/OVYjZ5tHfyFJTwh6I8b5BUih/fUlakEh053vn20faTjYMMnL5zdekP9q3jMHBq3ofcdkck4IxE8rgiEU6CuW5DyU8vyOeZZ55/Iub9A7eRJ149EcOx/71vHQDgr7Wti3OVpSoZAMAR9vGxTwjTv+WSILX52uu0/OXDtr1LipfnZwIAXmrqXyDlhdyBC+2jT39lEwBg2hOYcnkrMyWf8I6fj/TN4GAsDACgfgxF430mWxafE4nGXjrc+OTuFQL2x8ZHp9V84Ezvd7cuE821ifg5mfP+F47GjvcNrs5TE1cjXiAIwml06vht/tCOV04Odw2/+529a4vUc73r5yI5143Z6Qv++sCFLUsK117d9u52TB/vmXqkKk/CYIaisZN9E3QU+uBs788fvEPCm2Ol3byXwOfzvntgfzgcgqErAEoJQFAyCRKJRDgSsdmd9+57iCsQ1U2Y9TRQISLXZSioPzdY3Xc+9dc+v4cg8Z/duz4AQ99aXc6ZZeqlHC/Uj66wl4tdt+lE6oJ1kycIFbABAHhi1zVrCQCQBEDvcjdPTCEoPmx1P7q4UEjioXjE7g5vf/G0Cg3+v73r4UTycGs/idNXFmQuyVWOeh1UudLZjj4qeaDLYQEAlPHFOofH4Q9VKMUgbZP+X547OOHz1fz0y+BakgCE4xGcNnNkQvGI0xv5/p+Pt4cjGgX/W0uKFDIGCsO57GucLV97o661rv1rO6rrx43BaKwqT/G9TYujieR/1/dsK1ItyPh4U3/Zj/7S+OuvDZkc50cN5y50/+ibG2ckPNzMlWfQZQNz+QpOtgw29+uefmRjEoBIPEKn0Ru15nfbhye94UwhtkouDoaiH41OfaO6uKZf+5/dY5pgeHmG+EJ9/w8fWMvkMXgMnIHRMZTWP+2IJwEA4M4STSKR5LLJ+t4Jpz8kIvDvv3R0351VYZCgNuwp/1LHlK1ZZ/nG0qKzbSPfeO79J3etGDU7isrU95TnCNkzS8cmkslwPOJwhwzT7tEp26mWIavLByDgDUZiTCxq9yEY2goSXK01GAwLc0T2MVuBSkzQ0UAo0jVqBACU52TIhGxfOCTlcwxhLxmihcJRACA6SotE4wSGun3BvglzMBw99J9f4jDIPrt7R0WWyewdMtsno7En15RzcTo14w/+7J2ffefOiQnn7v86kCcX3bu8eGGW3BkLNupcBJu5WCbYVaiMxhPndFoFl9U7aLnv+XeJOBykJX6we00MhiAaJGQzWCT2fq+Wz8D84biQjtj8wS6rNz874/EC5R/ePrumKuvejeWD/abn3roQjyVtHv+J3z2aLRXCEETNIwwSKhY3lRwywyBI6fBPXBXzzDPPPzXz/oHbyNI8JVVrSMwiaRD02rm2pQXqOBRn08kbtyOguLXX39TGsJhgSDOYh5sGK1RSEkNzRZzaUSMHofVqpzkEqipVYgAAIABJREFUpvgCEwlC8Qi1OUqVwaGeR2gwDYInHZ4cKb8sW/Y/B6+pFXO7EwnSx5wyxBEanCXgv9/SmysRsXCqRAkNzOxTZm/tGt1QlnWbmhLMkAQEHV2UJz/Y2FuSKaZGho3iGCN8otdUIOaxMLpKyL087ZbwmHN2LwafxktwTbkhCAKpg7kiDSAaDCeTQDs+VlmxQCPiWq2ecomIg18ZBzYDv2t5cXePbnzI1G6y7FyYXzNm5JK49Fo5NyOdIHn92G4wa44+kfRSpHP2LMsR8R1+fzQcOzNuJOjwuDPw0MvnWA7bM09uWaiQZfBZ60uz6AittnvswoB2WXamIeSxhgJcDENgBKQdA5U8ICUYUoLR47AMGhy5Uj4Lo3cZ7Yarm/S//qj+O9uWFijmiPxB0xwF1DOheASn0Vk4fefy4kVK0eTg1DMNfQhA+DgRQ2PTQb8Iv+KLeL1x8P5VxVqrq6pQpSUx04TxTM+EIxp7qXlgS0Fm5tWOfqc6R9kktjA748Oe8fr6/p2rSgTimQHis/XnbNJ9Benugj8fba6qyCzIEEfiEYxGhwBAAKAlk/eUaVRiRrvB3WiwcDC8Qi7Ikwi8EOS3ui4Z/X79dK/XMzBlrR/Une2bON+nrekabRiY7Bo3nhnSdU5Zvzc03niu62THyJG2oQmvd9hk37W0GADIlgwkvMmaYcPvLnQ/XJGTwWU++YcjLf06uYT7lW2LIQgsUElmfxDqgsMmcYWIU5YtIzD65SH91mVF0kzR/3z1zg0Lc7lcJozTv7axostqp7wQ//GlDUuKVSwS79dO//DBdVuWFq5ekLNnXWlugeQH21Y/dtfSe1aWbq7OX1mmqS7KzM8U5SlFw3prVb7ixw9v8MbjS3Pkch4bZyIddu+jS4q4BB0AEI5HajvHT/QOqTiC8/1aAZv56/vW7V5aEkFjvSb/jmJNgYjTaLL/55HLYy43gcC/evvCs4cvKgnSmYxtWlVhpgGbLzTsDraZnXqXvyyDV5UhluJom9lVIOH/ZOPCp5YW0cikgEGcrBt468O2aCy+YVHe5LTrtX+/H2OjlqAvGIspGEwehklIdnoeC5T2AJ8pTm+eeeb5Z2ReD9xGCBQRs8nTgzo4CdyeYPfIVJfPvFqThdBg9JM6lN3MXfnTkrIC7ZHgiuzMF09fKs+U8Bl4rojzfu/E0nzlRw39VKdbAZP4ApqUITDNEw0wkGvyCAEATAw1uf00GBayybJs2QtflCSYPeApSaAR86/XuphHEncXqf7SO3mioed2SALo6tcZkqAkU5xKL0ZhWIizuBzkSPdkvojLwtByKV/BYzlB4pZKgugVFwEAINWkDIYTyWQoFOrs7KwoLy+QCgxOH58kENqVlcNm4A9vWri8VHOxZfjD7pGdC/PbTfZ+iytXxLle7FAsEScQ7MaxQ59WFVClSOfsWYbAsIrPEbFwGhQ90KP7167RZPPAT79+p0zETDUMVgjYVOeyA429MiYrX8LT+bzp4UM911YWEmDEhyZzNoclJLDDvRP5Iq6GzzY6PDU947+4fz24ltTMpocPxZLxdHeBnMfauij/u+srovH4xVFj67hFymBSqqBz0tU37VpbnPHN2g5JvvzxYvWdizRyFvvd+t5Gow14A91Ga7VGFonGX7/Qub40m4bQxmzu/UdbH//yqhnOAYqbvPgIr3b5pYRB/7C5fWxq29piFoqkjnx42pkr5cXQ2BKJnEvQL+mnH11c1GF0/PZCt2VsiobAuyrzdi8v2rwwf/vC/G2VeXuWFD+wouyJzYu/v335vuVlKiFHLeIK+HgWjudIhWoJb1d1oc0XONDU1zxmONE3cr5n8tnGAdu4gQZB4zrr4bqeR3Ys2bt+QZ3WuDJXwWcSsz9F+qKyewJHLvb89NE789RigYCVJ+bRcXqvy/f9tQtgGOIxie/dtVzMYwIAItHYv/7+cJFG+tK/7SrJlimkrEyhIIwkVBwuAIDAUD6blIs4OXJhabYsEIrUXh55+qubcQINRuO5Ep7NF/zy2+cKuESemOePRE91j75+seedjl6dxefyhR7buOipu5arRNxBl/3MwPRDlblZAracRUIg3Aoi3Hj8xZM94WDYMWb14tD29ZUxBsZjIPcvyF2slETi0b1lWRoOW+fwRgD4+tLChxfmh+CwMxI0a91HL/abrJ6tSwoLlKKuMdMP/+UOhKTFkskMksWh01Mth28AfBMrYZ555vk/wLweuL2ImESvwfrMhS6Hyf7IzuqyTNl7tV1LClTghh3KKG7yrvypSCUS6EOeGYkEDVrztoW573yxiQQYDZ3TKuUziDGbi88g2ARG4Ogrpy4XqMS3u9zQnENNzcInti6+TZIgfQ1A10Z4z6g4hMLwjFZlTAzNErBtycShmg4GTldJeDPe/LNJAso1kEolgKlAIhiORiIdHR1l5WViNmPQ4oQhmJk2NRoZ/67lxUdOd37YPfIvays0Ik7tyNT1JIErEhQTTPT63QkoZou3G3ODnmUAADaOZbDZsWiwCKKdD4d03sDmIqX02jJNSgGnLFNytH34WPuwhscrkUqG3HYxwYAAmA76UzWIAAA6pzfhi5gSiWmX/2D3+Jer8hl09EzPOIfAlxVkglmkHzylCtIdBenkiLhr8xRMDK0d1LeOW9go8af6gaAYj+K0gmDsieoCggRFXFGulP/cpaHX71tbrZae7Zl4va5ryOZ6q657U2Vet9FO84f5HHJBsWJ29RiKGYvtxghxkk8nXjzSuLI6i8RRDkHgNAQAYPL4ncFQlpDrjATFBGPa5ydR+tZCdXWmWI7TrU5PkssOJJMwiXHYDCGHkS8TaERcNolhKJIEAEORLDGvUCbIYjGm6dDD1UV7qwreqe+pzFMsylV+e9fifZXlMQChdPrv9q7hE/hz+y+MRoPeWOxE18iYzX26Y+Rgc9/x9uFz/doJi3PYZHf4gwkoJmSwJm3uzklzTdfofx24sLYqNwpDP+oaquSwjE7fU8dadharODj9UMvAk5sXpxbJPT9+tW3I8OL3dmlkgnAsTCJYz9VU+NQQufyhAaP1ZOPAt/7nA63Jcc/asosTxlwR9/zA5HfePH1WZ/Xb3Ydae8/2jfOZZIVGNhaMhdyBN57YVawUAwAGXfYzA6Z7y7M5OH3YbT/VPfrvr5/xT5qbPWEVThvs0sVCkXUbFoilApFaulEuajNYjW7fplylyeVPJpPLs2Tbi1UhOOqLRcgo8tybF8aN9q2LC6USzomGwXgi+fQjG7MEfCFOslAEgSFsVnBaOjc/+/PMM8//Deb1wG0nV8pr8li/urJksVwhxMnDrX1iDlPKY4HrdCibwa29IqdHDfmRaFOfnk1gmUKOlEV2WZxKLmtZifq5I40BlFYi5Y/5gxcHdQvmim24hcxp81FNyvpMNj6DUEt4L/SMn63t2L26LPWC2yQJ5uTTSYL67k3lObewdXG6JoSuVQjX60twpFuHIzQpiyToVyTBuyfb2oYMFbnyGUbwp5IEIrF4aHAAAHCl3BAlCaAr9YcgGPb5fFOGqSWLq/kkMWp1mdx+AeMaRwElCQ62D24o1vBw+pE+rZBJiJjX9PcVEwxLKGC9iTbGIM1RAF1bnvUGpHqWzY4dQhEaj4619E58bVXhCAL3jVnUXJbk2tAmEkOX5ikFHOJUx9j5/ivhQ5agP3k1k5gypMYsrmwJD4bgdo+/Tzt9T4mGQUcPtw4sUMtypPz0N7ye5kdmhQ+lo+SxKFVQM2BwheIPLVCvUnCFXKK5Z2JLSQENhs+MGJp0lh2lWYs1stIsWa0vWN86ZJMLL3n9nEi08dLw3tXlbD5xPT0A0sb2Zmjum5wwOR7bsoxDEsaAl4ojmrB4ZByGLRYo4YmTAOzvHF2TnSFkEBAAb1/s2lqZt7xA+tSqBTkCTiwR07n9B7snPhrQOYNheyDMpCMkHaU2p/kY5ovFmAita8z0u48av7qmYnWxyuYNtk1MT/jCDy/KW6yS/vgvJ60o/u87l21fmMfhMH+9Z+23Ni9eU6guyRSLOYxYImnz+huGdX852/bWxZ79TX2/P97cp7c2aqcMTu+ZQZ0tlmjtG/zNub5cOiznMn9zuG5lgYpN4iI2o09vaR3QP/PmGTqK7F1f4Q6FYsnEVNiHhWl9OkvjsL5+SP+fH9QdbO5/+UzbX862NzQPT5qcCRlj0hvoGNYfuTz0fms/IhM/t23JvqUF39qy5O5F+ZVq+f9n772j27jO/O87gxkMBr1XAiAJEOy9qFG927JsyzV2XONU28nGySbOpm56nMTrJLZjJ3ZcIjdJVpdVqEZJJMXeQBIsYCd67x3vHyPCECnJyv4kec8bfA6PDgWi3LlzZ/B879P6LaZzraO/e3hjmUIUTSSOjI7vbNVXiDiJeOKtvuFv/s+Bs30T8UTivtXlSgw5dqw7R8EOcwUiHHFjyTIurVFvlHNwndlj9/i3FinX5sm9IGQPBzQMvn7C9v7JrlV1uVtWFVJw9PCZgUg0/uuvbpHx2ACAcDxybbdASglc/9nPkCHD/w/I6IGbDoaQiljsMyNz+UIOjYzWaRQn+0YJm/JzcRGkSwKJjLGveahcKcYxlEIiHdbNUCDotCfw4umeMRTucXqFdAoLQ3mUG7bhfUWuaO2lJAEVI9+uyVpcbijgCSfQ5HfePLqlPI9BvbkjTEmCXBF3Z2NXQZYIu5IkULHpB6at733UeOeKYsYN8hIsPvufKQk0AvahoanGcWORiMOhUXJ5zCAFyRdxPjrdW6m5giTwRv3X3iwkYDJZMzPTPp83mUxCMAwu1SJIzvcthuKJhM1mUyqz+TyulE0nwbDe5loQO7R9RfHHx7v/dKY9EIpuq8g7qzcOWV15fHaqxG2qk/HAdbQxJoD+xbZlRM+yVOwQjqHEC53ewNtH2p+9a7mIQctBSUwSaWfvuNbkKJVw05sZB+MRJZe7uiibgiIftw7K2Sxr0s8mU6yhAOErMLr93lCkUMxFAfjD8fZCNodNIefwmd//54nfPLxx8XiuNuwF1YcWP0HOYWwokBeJ2TqDacrqj4VjJ3v1AiFNymT+8lSX1Rdv9waG/AF3KFJCRqOx2Neq80+d6oqGwxazBxPh1SIx7wbl5b95uHXrkgK5iIORSEQQUSAYM3v8LBY5EI+EYrEJm8foDW7KU8AQ1Dw8rTc7H19TmSDFhTiNS8Xy+OxiMXOjRlon5wejsRmXf2eX/phuxuwLBqJxBZs+YnT+4ULXC++djph8I3FEKaXXZUkM/tC024/G4yd6xrqHZuX5ijur1K5Q5O7q/Bw+CwDAwDEph5Ev5Vdki5fmZa0rVT61pmaZRi5k06dC6NNrSn5498oHVpRymDQTRl6bIyfD0NYC5T/PdDX0j09Z3Ud7Rl853v7T3Wc6uic9YlGEFNZbnBdGp3b3Dp3rnDzdPzFhcTFxLFvA+vK66i0VagWHOTll37q8aNzk/O8nt37vtqWPr65gM3Abir714OpluSI5h5MEkN7rHHc5f/BuY4jC2VCsGHLZ/9Yx+NLpQToFHZme/bC170LrGAmCOEzqI+urIQA+3HvRjiQU66urecw+k0+llvaMzHJo6GA0sobPrlUK4micRILEGLV7xPDhie5+vfHRHXWr1DmRQOydQ+0PrKt4/qG1VByJJ+PxZPwz3QIZJZAhw78nmfpCt4i/n+8btLqe31gjYlBd/uDOs12Prq0hAmA+x44EAIBui3HX6YG7qgsD8cS3drfOghBlYJpGo7z07HalkhmKIJFQpFom+Fw6EgAAwrH4gMGew2NGIrG/7mveXKcBAJzt0R+6MIDh5CAW8zsjSwsUL3z5ds7l28w3A+JE9NvNuw/3PHtXveDyAv/BWBgjkUV3/swjFhaySYeffziLe9UiOf/vpK+K9L4ExCPxRPLExOSw0ftYdT4Hx6ac3t5ps9fpP9s+8tPHNmalySoiaTW9xNM18Hm9H330QTgcIsHwfCIBhJBIRDHSeDzucnthEvLUU0+xWCwAQDgaHzDaiiV8DP10/cxa3d98+UBNofwT7fgPH1gXTCaPDhser1WzWDBIqzIEABhwWgAAxdfXoADMq4Lrj29r0U42dIwuK1FurNEcbxtuHZx+5p4VHAaVUFxzbnffrMXgCs4GwtuLsqtklxxl6ResKxD6y8lWQ8z7cElZXa5szOsAAJhtoWwuM5vHsviCz+y78FiVZsLg4uOkSbPj+XtWLbiWr/PqTu9UsJhALKy3eHZ3jR4ZnFTJeFsKZLt6Jtflyrsm7N/fXK7iMV442LRSI99Uob7tLwd7zvV+95E1x/WTLnsIwHDF5sonRcKl6qwrvvP10KKdfP9k97pq9d1pXZDbJo00HPWBUA6TxSZT/3i+e1mOUMyiAgDePNJ1R5VmVWG2zmXLZ/Mj8QgAIN1OTQIQiUesvtCQxT3p9DXqTTqLa3Z4IoRSAgPTv/3eXT2mYP+MY2Wp9K4iBR2G3z/afu+acggjHxuaiUSCawsUpTKBjH1ZZa30xWPxBr+7t/Xdx9aEYvEBg82ThHZOmwTB6Ndr8lqnZ3Y29D64rGRNUQ4EgV698bm/HHjszuWNRu/teXwpj5IvFvmRSKVAQkoLpITmy1htqi95t2OURoa6e8f/8LXb4xD0UnPX3YU5LDoEADzl8CcBODk2p+0YjzJZFjq1moP2zHooEMiBgmIOa6lSHohED7QMrKstyBdz/f7QsVN9XiT51Ka6KAC7uqb7rG4BDw0yqRIOnTNlCjsDdYVZZXkSbyTc12NgYOTblhYuK1bG4okO3cyxNt0zO+r5LNq1Fw9BJkAoQ4Z/czL+gVtEroDdO2M5qzduKlBQyKgh4Gu4OLy8OBtcX9QQuNF36tSWvD0SFFNpv953YZfW5NOOhGes7BLla1/a3KefXavJzeUwhXT8FiQSXG0DmLA7ew1WjZhbrpb++p+njrcNb67N//3T2+l0LMllZikY64vV+9t160pyr/jONxDCTBRR6Wwp7Y19F8tV0vQC/yiMHGkdDEUTP7+//uMR68HmnturNDcwl2AB1/YSwBCUx+Wk0gnEDOqf9XOWOXNX/+TItK2+LIdCRkGakfSZe/AEZAzT5Gl0Ol00FiWihgAARK9iohIpACAYCHT39JSUlFAolJSTJz2dgEmjbK7VHDyvPXl+8MOuIUpJjnbI2Gk0J+PwsixJeidjou7QwPU1KADzW5vXGTgE5mOHPjrd871XDw1Nmh/fWqORC1ITy6RQ1EIe0cz44NBs06SJjZNZVOQy9Q4nEmR4X+fk8Yu6WbtbTKPncLiN+hmZiCbEaRenzGIG9b4KFSkeO9E+cnuNRi5gpTZgoOsWA+CavgJCn7Co6MaC7DqF8Mz5wZMGm4RFKxDQOsatazRSBYfx4w9O/ubhjZ1TljPDs2RSxODxP7ZhaTBbnKSQoyOGnef6Ro32Bt3UcnUW+V9U/nZP4P2G7rtXlXboZr7/6mGLy+f0BskUtHncyOOQeThFTudozTZ3KHZngUqI0wYnLCNG+8oqpS0UAAAwUYRMIpMu770AAEBgEpOCqXisKplgW5FMhpPn7N5Bd7JAjIcEtEoxd8DpprBpunj8+KHWL6wpX1ehknMYf7+g/drqcpWANenyntJNzbn97mRSSseTlzshfZHYscFZDk52B4MlUj6NRDp8ceyB0mweDdt/cfBbdy8rlgukLCYdxywObySWqC2QK0TsR+vzc4VcJwhrWAIMIUEA2HxBgycwavMcbRr427GObatL4yj8msnkQ2JJIe3QgP6oyTw17LaEQx1T7vZpu4BOLZdyiujM/inr48sLl8mYnRMWh8NXzUaEOQoRi9kzOOX0BB5cV7k5X6lg0g83ar+wofLp25cNme18DuOi2UKmw9Fpx8MV2feViMqy+bUVioA13KGddtkCD6wpf2RzjUzI9vhDv3r3pNXl+/L2ZQw6SiSmXztvOOMWyJAhQ0YP3CJwFBExaXu6RzQiroRJyxPyDnYOEokE144aSt2pr990uB7So4YiWOLj5sHOSceHz931xJYaVzKhlrO2lmhe399cnCO+ZbnFV7NHGRg64PXbIr5CPq+2QN4yMLW8LCeQjJti0duKlQ9Vl0EMqGVwlkiEuOI730AIc1NKY/Cy6IslwT+Pdd6/tnRTZd791bkv9Iw3XOjdWpF3UyVByvZdLAnAfDrB7u4JjIwenTIFTLZlxblrS3MOXBgoV0koZHSBbf0vSQKiAumlNTlfbgiCAIIgXq9vdna2qqoKzMd9LUgnoJDR25YWqrKFLV3jftPcAyvyn1lRjiNI06QZJcGLq5EOOC1ERsH16BZiWq7zeqFg6LoqtTpLMDprK84W5Uh5IO1ygwBgUShyDisSDeIw/JF2YsDiqJYKCXdZKB7xBeM/O9HB8Ad/dM8ajYR3pGv0rbPdNAplfV72pN/VNG4pFnOyOYxJm1tntD25sRrMvy3xEena4Hq4oiqIJuLxZILY/ZWw6CW5EksgMtI8fHDCgpCTJ4YMdpe9XTfHpJB7Ziwtky4sEYzniiUy0WYBZ5WK/9y6uq9vrI3GExMmx8/3nB022i9OmWqzJej1CYMX3ju9uS5/aUn2yrLcL21bEghFhuZsfz3R1TU67nSEctgss9v/0oX+L5TnCZlUAMBbZ7u3VWoqsyR8CnXSaw3GgD0UtIeCgVjUHgpxMMqCEwcB4PKHD7QN3V1b8OMdFTCWHOyZcNDQCIja7cGRwWm30+NQi3NoiM7o6JmzL1eJFFzabChy0e3vC4ffG5iIOTyeUDCaTIJkwh+Njjs9WqPz7IhRQCcx6RQVn31wYPKT3ql8AeON0x3rK/ISKLBE/bNev9nrfXnfxfwC5QGdYUNxljcaOjdlPDtmOTkyt7t/fGf3aMPY3Inh2YbRue6OkQkOtc1gm7K7c5TiChF/OY8zYfCQ9La1JYoJY+CZ1SXPLC/mMmE4CP9hf9P60tz2ocn3+2aW5zLurVIrObygyz9tcdaXyL5/2wqhAB+aMn90sue2+mJzKDxuc/e53L1m+/3lOdk0CptG/uRgV11OVkfP1Ht7O3PE3B31pU/dviRLwIYAaB+a3n++f9vyotvqCzGMRKQKXGN1ZdwCGTJkIMjEC91S/tWoofSvxuu0b/4lUtvD7SbDK/vbnlpbVZ+vGHTaTgwY7yvJAfHEGwcuPnNvPY9JtXgD0w5PjVL8WW/5/0q6Wz91yMFYvGvWUiUTUFDE7PL94r1TqJz7pVpNqeRS07Sb2qdsAalv0G6LcdfB7ufuW00EDrVoJ4+3Df/0iU1EgfMem+mBtxrFwdD7z+6QcW5W4NCCr/PFgUMAgFPjkz/Z32EDyQ8eXskhUcaMTjmb/u6x9i1LNStLVCmTPsVnhuUAAHxe765dH4bDIZjILQaARIJhCE6CZCKeCEeiNrvz0Ucfzc391Glj9gQMLm+xlE/sQHujsX3D00oa/OwvP9Z6PSs08ree2UHDsQODUwCAL1SqF7ctG3BaUrFDnqifDKPXDoG4nvCh1BpLtS3bVKtZVpK9+GlE5zIAwKgzeEdhtkbIIMPotz68YDbP/fChNeVCMQAgEIn+7pNWrX5OJeUtLVD+5Ez3rifWqhncX+w5W1+g3FShJs4XnPbRqX8Jrv8aJ4JAEskkDEHp8/DXlgEFk1Yp4gCE1G+w/fyN4832cL0ADfqCyWTS7A3f99SKDWzJ7rN933tydRF7YbWAI10jJ/vHfaEwhUpR8llfW1tFv3py/KU1/+Tm9GHbvIFftXbak5SKRHRs3NKtnWyDkXoM+8VTW+PxWOPQ1M/uXX21Nxx225PJZPq+g5LG/s3+c+uKc+oLlDqXzeT0fPe3+3JWFn97ddGcxfPdPxwsWKXhCBghCjlKhj2DHplKwObR1AxcCiMjFqfR7YETMAQnQAI2+0JJAMgkmIYijnCEhiDheHzE4g5EonPGADlg5yvFKgFnzh/k0ChZPLKn32jls3GEFAgDiYBcI+WIOKiUzuJSMQENc/rDFm8oFArtOdq3sjJbKOVOWzwFcq5ayDL5Inv6p5ZKOVF/eNeJvkmI/MsdVWweaWLc8Y8T3dopa0mBcC6OZVFIkNdfW5L9XkNvjoitWV70RIWEEiU9/9KRaDK5ZWNp65TdB0ECBratMCseTDjDoXXFWW1tUx+c6OIxqV/fsXxjlSZ1/Tq9wT98eIZGIX/5ziUMGka5PP6KIP00ZZRAhgwZ0sn4B24puQK21e3f1auvlgv5dCrOxd7Yd7EkR0KjkK/mJYDSfrnhkgCFEU84kAAJJZOjVLB2NWmFYnoZT5gvYH+snSwUcio1stf2NZeqJAIm1eTxLygieTNYsPsLXXoQFtKonXPWMADeaGyAmggNmYqlwqx5h8CtLDcE5s+F+HIvwZuHWzfW5StEHBRGuu2GSr7knpLsNwamb3gR0gVAaV/ti70ENm/g2385AtEYxTKWWsiokYmlXEbPtHlJQdbes9pm7WSpSnrFokPXCMsBhJcgP390dDQSiXyqKCAAQzAEQyQYToKkfkxfVFyMYZcOnI6hPBquMzmSAJj9oXNme5kIr5PIbl9e1N8/09Q+trt35OGVZZsKFSgJPqqbuWI10pSjACORiSL91wiEILbhr5FqnH5BpaqRnmgfOd83XqGWUcifHj4EAItCyREw5VzmjNW9XzfZa3DFY4mGkYnvbF1Ko6FEsVGHP0xG4P/YuoRGIf+9bUgKgILJ7J4z/HFf85+euI0EQ6khpVtjUNrP9V/jhK/AFw0lk4lU8H2PwTbr9j9UpWFQKQwKWS1gZ4k4Npt1cMjAKc3u8JPykNiqJWoOhH3Q0F2cKyqULOw/oJHwtlSoxWz626e7zzQO/c+ptoZefeuUKV/E5S5K0XnzcOumunxFejpKNK6zOFfnZKm5mBNCalXSCRK0oyDHi+IfNA/2zjieWlN2tbya5HwURxzQAAAgAElEQVRPAy6Gp36OD491j5k21amc4aA7Gra5fS1d0/99Z/0yldJscSUB+ME99WuyszzOADtCCkCJWbMLDkSivjAPx3JZNBGLclu+fEdx9pYCpYBKKeYzivnMchkfisXjYvZyIScaj99bqhwyuI2zc99dXVkuZM8OTLed6YtbfV//Qv3XV5Q9t7rs0dpsAY1iIiXuU6trxSIFg8mlUGUMJgNGDp7q/8kXNxRmiRLx5B1lqmIhPxYDx4dm7i6UN/vDuliinEntujj4br/hnX1N4Xi8ukRRqpGO+eKrsnkDMwEqHtvT6aA63JEc8beLcmx27zd+s3fQ7eEU53j9UUciwadj2/Jldk+QDpJ9PdOvvHchV8JdW6E+1jr8wte2hRNRYv07vcG3PmnbUJt395oSFk5dcFGkr67UVGcaC2TIkCGdjB64peAokitga2ct77YN1+dKVVyOKxE+0aJbWZoLrpRIsOB+/S+ZC9dJAiSI3k8YiUTlk/ef1VVlS3k0PE/A2tM/kZIEhdkiPh2fcnq5NPymRg2BeXuUBCPpH4OQYBGDemTS0Od1PaiU5XDYexr76woU+M3vU7aY1PdrShJ4AqFxo/2RTTVDbpsl5C/nioOxMJdKvfPm9CVIkVoSqV8ISfDq8TYGhWx0+T9qGYZYzO9uKC2Qs3pmnAwGKYvOEHOpg3OO+1aWkkjwBye7r1iH9DPDcshkMp/Pv1SB9HJJAMNwIpEMhUPd3T3FxcUUyqWWcyQY5lAp58dmp33BAgFeyhUCAFjzDcvOtgy/dq67Ilu8TC2TMal7+ieuGDuUyiggAqOvUX6HgBjZ1S6cBQ/Khew1lSocQ/ed60cQWCa4LAItmoizMLxYxskTsHUztr81jXjh0Gq1goEjhB7QmRzZfBafjmfz2S+3DH19ZdkHjT3//f6Z0JxHquDgbDKOIGQSkpIBhH22QBtcP4FYmEmmYvOTEEvGP9HNlIp5irRU2p3nejdX5v3qqa0up097vkcgZ12c8Rw32EhsvLdXv7k6/4q1cWVcZrlScszoM/dPPrKlVmuw/vV424fN2mGD7UDPWL6IG4pEWwamukcNX9m+LH3MWoNNyqYr2QxfLKRkMBqsrglPREGlPlKnKpFyrE7X05tqFn9cigWHb/MG9jUPff+u+iwm0xD0Kmgsw4wnCSCegDZstDZ2jn/3/tW5Am40HsNA8sEq9aOVmqfqCu4vz729UFEt4xcKORRKIo/LZmA4mUTK5bPUAjYTJw8ZbWwqWsDCz01ZvlKTjyWB1WT2TDltDi8LQ7+4oXJVWa43EP7BfetscR8TRXEE84HA5ixFu90jo+JkGIYAsLv9L++98MyOlTgZnXX7ymVCHEWMbv/jH5xeJeNFwrE9x9svNmkhCCypzj2vNbIp4N7N5TQqZee48x6NvH9wik6NVZXlum2Bjdtqv5gjeWX3+VffP++iQKXLSpdLORQ6tlEtktEoNpNX2z3pdQfvXF78h2/csao8t1wtNTu8oUgsW8pBYFLb0PT+89pHb6vOzxJdO08gXXlmyJAhQzoZPXCrwVFEwqYf7B8/1zN6T12hRsQ/3K27nkQCghsuCQizD0cwGorFE0khlbarZYBoUkYmwQ1jc+s0WRhK+vBU99YlBTwaPnTzEwkAALFEnLy4AikM57EZLrtPxWWVKETvHOv4ff/4XYXKlEFzCyTBgsm/JAlk9A+Odd2+tiiKJYlamQCAWCIejIX5NNr2QsUbA1NHm/rXleSwbk5d1HT7kpAE5Urx3rah7gnTpnLVN9aWyLkMFZvNYJCOaedQEpTNZglZ9Em7JxSPLy9Svn6gZbEkANeRTsBksqZnpn0+LwCAyCVIAkCkFpNRNJkEwWBwema2srIy9RISDGtEXCpKsrmCAjoVnS9FSjQs+/h49x9Ptp3qG7+tMq9Uyjs5Ntcxa72ao0BKZRLFkYiQ+utxFCTSwoeucR3JBKziHPH7J7vOdl/WzJhQ7AhMEtKoCh6tbWAwKJM29OlnHAERHXcEwjqTY4VKCgBomjRlsekPVuVxqJR3G3sSNFTCphdLhXMxVyAS4+O0BZZZauMW/CtXd2oHgfAVkGDSi+d6v768IDUVLSMzepPj8XWVzaNzTBhOgsTTD9bfWZLnnzB1Ng0PIsiRCQNOBhQqxCHj8OWRY0eH5h6ryY0AUF+SDXLFbLXsW6vymQhmdnhfPNz82vH22Wl7TV1ewXw7Dmcg5A6EnYGQSsAedFlLOEIAorpZ5yOluV+sVsEQaOgZ/dGOlYuXGcHi8BW7N/DKsbZntyzhM6hEFdpwNHFh2qriMd450H66dfSr25chHNQbjRgc/iwhXUxlRBLRWCIWT8RRGCHe0BMNMVEMgUnEjvioxz5l8wi5uILDOT40W8amH/L4u7tHN5Wofv3Epq9uX6bU8IU47Wy3/idPbGbgGBNFxr1uR9hfwhVTSCQZFT9rsiOJZCgY/tOe8/ffUUkjIx1T5iIJj4ljRwYmH9/d2H1Re7xr1ODwlOaI71xaNMWCI95IxOf++gNLQoHk3j7DqMszNeagUJmPLy+Ws5mTfr+hT3fW5BnqHIvyKEtVIjGXFUShJQLW7Iyzt2siHox++fYlX71jmUrGT00OhpL2ne+nYuQ3D7ea7N4v37GUx7hqK4kMGTJk+EwyeuBzgE/DA6FIm8WZw2Vm81i1efLD7UNESfvPURKgMMLHqQE0lt6krGPWSibBNSrp2W49hiLZYi6XRhkyOTjUmysJrmaJxpPRPB5n3OrGEdLKCtXphu7XRmdusSRYMPMQACwyha+id3RPr8hTIAhE7NTiCIaRyMFYGCeTdhTnvjEwtfP4RYSC5fJZOPla5/dfJX09pH6nkJHl+XI2lXK8d7RELky1JigUcg4NTZ+fMJVLeWoBm45jIybHiuLs/7UkkMsVOp0uHosR2cQQBACAIAjAEATBEIlEMpvMCqWSw7msOzIHx0R02qDRvqDu0PYVxX39001tC2OHyCRYtMhRMOa2+2NRjISgn1WnnwACAAYgPv976t8rQiEjqysuNTPGUFKWgO2N+enopwEzL3xwZuOSgnsLlGOk6DI6463usUNDU2wyImPROVTKkaGpYjFXwaZPmJ1ntRM7v3nPqsLs5rHpnnGzHGf40Zh1vp8xmFcFiy/qa1/jizOOmidNDAytzRKHE5FYMk6C4DdPd26qyFMJOWdGZw+e7b1nc/nd5UU5fNaGGvX3H1xXLeNHZh1/uTh8Ujtz0Whzhvx0GolNxmEIisUTLzT01msky0oUPzjV9UyVZo2cUSuWFcuFm8rVX95Qw6Vgo7O2o1r97hatzujY2z89NGee8wSW5khwFPVEwwwU29k1sr0gu1TEAQC8eLh5c7laI/3Uok0neaVJeOHghdRLLCE/D6O+0zmyIleyvjTnof/eqZbxfvz4Ji6ZMjRnz+GxlCzWsNvuioT9sZg3GqUipHgibgy4xVQGRiIPu2z2UMAWCtgd4VqlWMFi7embWJ0tkXMZLS0Da0ty5zBkqVwwF/KSI6T/2X3uyW11TBoFQxC7PxCOJmYCTlIMwRASSCZBOPbWtOnXL+7dvqGER6Ed6NYHg6F/NPY8/vLej8dNMzMB3OZaVpZTnJ9VLBcmKPE4hAwMTdeXKZsm3L1GDzsYeOsLGwMS5jIJZ2jWc7h3mkSDWwcdrqHJKAf76l3LURajKlvACMaPtY3kc9kPr6985u4VikXNxScM9u+8csji9H3tzuX3rS2nkG/KvS5Dhgz/PmT0wOdDroANJxKn9IYrJhIEYxH0mm5f8Fm2wr9KyuxLb1JGw9A8AeuobiaLQa3SyHaf7i1VSRg4xqF+PuWGCD8GQoK5NHzE6hQzqZvr8m+9JFg88yiJJMYZXAn9nQPt5bkyFhVPWaVE4A2KJHcU574/ahwbmyFh6A2XBCBtVFDaVquEwyiRC18+1laquCQJcBSpyxL6EqEzo8Z8AZtPx+U8Vt+shZAENAxN7/hGcO10AuxSuaHhWCwKQRCUMuogAMMwDEMYho2MjBQUFlKwy4zXK9YdYl4ldqhxwnhObywRc9OrYRqDPjmNNeF1EhkFn9m9i4BYsolk8tPiSFeHKEj6/smuU52jVIws5NGISWjSTnaNzm1aVVAtFN2dLecxMA4ZcnqCY55A26zVH4l+opv+7upyAMBXXjugxKk/fngDj01ZkqsIJeOfNA93jhplTEYQjVlDAWsoQAiDBRIldR5T/13A4vDCI0NTSxUiMZNKTMWF4Sm9yfHI6gqbJzBkdhiN9u0bSsU4jXCqQADki7l3LCn43sZqGYs2MTjzWvtog3a2yWBJQNEBi/1A5/QonOiLhHOcgRIZF6OjAsolAWP3BI426zbW5P3g3tX3LSsOxxLHB+e6dBPaOWvfpKF5YnpkzuUMh19vHdXQKflS/v62IZPb98iq8kUHAcDlGiB11BdHZvRmB/ESwjnQa7DPuv3bipTH23QiLvO3X7udRaNYvcFgJJYv4oLLcw/GPE5fLBqMRYKxhCXoz2fzOWSKbs6p5nO4VEq/0dE3Z8tm0492DP9ge72MQ497gxfNdjQW//u+lppqtTMYNnsDwxbrrMNvDPr8LmBy+7tnLAMGu8sXevGlfZNBf/Pw7Pkxg8PltfuCUhFrloT+dH2FPxz/6tbqkbE5l8fPlTP6nYHGM9plxcrGKddQ13DI4//Z/euYVLLN5jnj9hhszqUS9qEPLyR9PrqSs3J5cTgSH8HRGgp1Y0nuT+9fu6ZCpRBxFp96q8f73vEuHpv28rfvyVcszADJkCFDhv8FGT3w+YCjCI+O+4Ph353qWpsnU3O5rkT4eIuuviSHKBtyi10EIM3+TreneTRKeiLBX/c1l6gkTBwjwdCoxSm9vOPPDQeFkVQcSHrRG8KU/FwkwdXmHIFhIZXOkdLe3Ne6oAgpIFQBktxRnPuGduomSYL0gaVvtVIxtFRxmSRY0JqAjqEpSbDnbF9T30R6hAwBes10gvkKpMPxeAwAAF2qWgYRucUwDAUCwf6+vqLiYjKGpY8TIcGpNsbpjoL02KHTfePbawrWarIAgN7uGKNhiIxFA/O1hlCYtKBHQUoVfEb4EASBK8WoLIaKoasr1SgKNXaPN7SN0qiIwxM41DL04J3VlQIx8XI2TmFSMF84UpPFiUfj73aP2YKREiFbO2F652z3bx7fLBXQKSSyLxw5OTB9R4W6MEt4sn+8Y9jAQLBquXTUYydUQeqsQfNp0ARwmjYgRrvYOdBrsM+4fduKlKlH/nGqa0tFnpCDv9euO3665+5NZRvUucF4BF9UlClfxLljScF31lfl8Jhj2unfnx84N2wYcYRiscADcnFdgfyjlr4NBapUAswL753eVJe/sUbDwDEmjkk4jCMDcyAQ+vGO+s0r8qgIdrhr9Pi4cWpwsnPc8NcTbVM2d7aAnSvkLG7afUWviMMbeL9J+8yWpVQMJcSAMxg+Njx7V6HS4w8dOD/w3BfWSLiMUDSut7mKpfxUA+wUfAoVJ8FiGpuL4XwKFQLA6g2GIjGNiOMKRY7qZoq4jEPtuu01+QUyPodKKZTwIF/41Y+bc3PFy9VZS1XSLC5VTGdQWCReAkvE4lNm11snOxq6RppbRy1QtOT+FduUss0VuTScnCviOOPg1XtXrlTJNxXLG/WGNZUKuYL1etvkxbP9Ipmo2+ByTMx9444V8mxxx5yNRII3aGRLhZwhOHHo3TOFBQJerjJHyokmoaSM9z8rSu+tKpDzWCDtQiYIJ6KxRLxzZPbwhaGtSwu/de/Km92XPUOGDP8+ZPTA5wabinVNmxumzAcaezeX5So47PcudClFbCWf95lBGuBzkgRVmqxbXG6IsO2iidiCCpiLJEHXa6Ozt0YSXA1oUcWh9L9eJgn0cyQykitg4+iNkQRXXAbXkARgvjXB/r5pCkLKYtMFLNqgwXb/qlI6jn10qmexJAAAxJOJaCJ2DUkwPDwci0UBABB0qZAxIQmSiWQoHOrq6ikuLsYolAWjpWPoFR0FROxQS4f+4OB4hULkTya/3zbcrzeY/X5fPFQtlKS7p9JLD4H5ZfOZ4UMLRNTVgAAQ8Gjrq/K5dOp7J7qOd+h2rClncHER/mnE9rjNXSLlL8vJikPJWZf/vkLFLxp7//TBScQdeXhTZa6Qb/UEHvzrsa3VyrWF2XI+a21xDp1Cbh+b+6/3Twb8UQFOJdwFwsuDiBZog5QwWOyu2aedWK4Up9KvW0Zm9GbnI6sr7N7QiMVlNDm2rS+ioyQ6srDAfzoqAWtbXf73NlbncpmxWfPQxeGWQODElGk8ED59vkcg4OYJ2ae6x0ZmrE/cVpd6VSgab9bPPb992Scdw3Ipt8/h31iicHkjP7x96R8e2ewLR9z+0PCc7Z3GnuO9YwMz1l3tukbdFJOCQQBcMcmeiBTKl/KSAFhDfi5GfbdzZLlSpBawXvzw7Ka6/Hy5AADQO2vN4jDYV7KJA7EwjmCp6YrEE31me4GI44vEPurV31mkdPmDZqf3kVXlxFQYHJ7RWdtbR9ruW13GplN2t2p3nu/f2zf4ysdtRxsHO2ZN/lCEi2HGCdvDd9WFC+Tbqfg9VZqNBdnl2fwOo/u2YoWUiUEwZAz5uCxKr8kRjSUPHe8IcTh0kCRTsGyFCADw2JLCZ5aXsJkwToE7tJNvv3rcniep1IhpOCVmcD2wqvgb5XkaIQuFSelKAAIgHI8kknHtqHnX6d5pk+uJ25eopLzFR50hQ4YM/2syeuDzRC1k0yFw3u5p7x27vUpjiXuOnh1eXpw9HzX0OUiClJ0hptE9ifCeCwMbSlVEbvEpvWGNRlamkry858KtLDeEwKQrBqt8KglYtM21+acbuhocngcrVKkniGl0nhB/40RXpVJ8tSzGG8t1S4LJIy1jQg7lhnsJFrBYEmAoidh6BACIcJpGwD40NNU4biyT8rL5rGGbm89nUBDSq3ubKtVSJo2SeivCP3ON2CEyhmnyNaOjo9HopQqkyWQShiEIQCiKgCSIRiJTU9Op3OL0dZvuKOBSF8QOZZ88P/jiR43veL15YdKPtpWVivid045eoz1fwE7PM045ChaEDy2WBAsCVNK54tVEbMZDAEj5zHK19EyX/rxWn5cjyOXxUjm4rZPGpTlSCIJOjs5typMXiFhcEnyia7RmVdGYN0TFyI+8eUYQDT6wsURAuWSyy3ms+gLlU+uro9H4ed1U14hRwWKF0bg56BOkKQ2wSBgEYmEagiXTDmSxc+DNU12bK9RyHuu9dt2xU907NpVtylNjJDQUj8ST8Wgyfu2IxHwx575Vpf/54Bo1l4laXRPdU23R+IDJ8VLr4FD72JZ1xSwqzpo35btnrG2TFo2E3QtH/nCs76GS7Flv6Pn11SVZQgDAiT59da700dUVP7h7VVGWMByLd00Ye8aNey8Oftw29JNdZ95u7D7YOXJWOz5pdSWSyd5J0x8ONa8pzgYwMEZ9UXfimG76723DK2U8rd740u5zqyvVkUQCRUgnddO12SKUtPBAEgDEE3EEQpz+gHba0jFt+VGvroJFt/tC3znYskzKdXoDr51ory9Qmly+1xo6/vPd48+/1/DJ6X4jHJu2uSw+H0AQjpBaq1TmiLn3rq44qnfaZ01Dg7NzVte9ayp4FOTO6hwVlxVPJkYtvjGH546i3JmA1xkOxBNxvdM+6wy+sf+ih8kqyxZV5Iq3qYW9bWOr8qU1heLT3aOv7Dz/H7/bf65TL+AxNizXzNGpT5fkLFNJL3bov7ihKp4mYsPzJysYiP11X8uczb2mQn3PmjIcQ68dS5YhQ4YM/yoZPfB5QkERAQPnocg/+sarldxBrXnrysJdJ3rK1dLPSxKkf6hGwGvo19MwMpFbfHHaQkWQbD6zVCV59dBFmEWFyGjz6KySv7D8yw3nalOBkGAEhqcd3kIpb31V3vjgNAMnZ6XViLRHgjF/7McfnNpQqro1vvXrkQQVHPbhho6TQxNCAfsWSALCiCQkwQdN/Y2Dk6nuBDiK1MynExSLuQCBD0/OTk7aLvZNDE9bJFymlM8k3ielAa4RO0Qmk/k8vk43CMClgJxE4pIkgCAIhmGTyaRUKDkcTvreZwrCUTBgtC2IHaorzW4dmfEOzNJ56LbC3JV58mVKEUYiHdXNXLsgKQAAgUmeiD8JwOKK7Om/X1sVpEfqM6iU7fUlLCHtSNNgz/AcAsMKIXvE6KBiqIRFAwC8dL7/26vK+HTaN17Zbx61PP/wOiWL9lzzkMFo+uE9K0UcygJbHwCgFnPXFucwcexgh047YaGS0BglOeq2hmJxHuWyoyOGGkvESZc36FjgHGgemdGbHI+sKp+wuvQ2t9HsvGtDqSgtngqFScF4JP5ZDRwAAAo+7bbaoqfvXPaV5cW5OOWdNxvGZiznfMFTY3Nv94y2zVizaHjPrOW83haXMh7TSKa1sxemzffWqQq4XHDJTeH41m3LhCwaAEDIopUrxf9om7KOG79776qVxcpQtohXlPWrNVV5Yp47EH7jdOf7TdpRg23a5t6jHXz9H02/P9HS4QxYRqZeO9He1j0xGg6c0I7vbRvc1zNmtrm6xo0Wtz8UiVHJSDCWGJqzdkzM7W3V/vlI+y8+Pvfb/RcOdY/0ztoQnHK+R7uze0qv1X90oa9peGbAHt93oTMWi0tEHA6dajd7+Cvy/3NjzZ8f3bK1Si0WM+4rKaxVSlbnKwok3H6jfahbb7B5ZHLBqNX1H5uqyFSYR6b1GR3vdg1XK3koCgxW35utI6agr0U33XBhNCHmfa0678vL8wq4dJQCZq3O0SHzzgMdE3OOwmzRpNlZs7n8qS21ZAC+X1++VpVVIBe2D82QUZJEwEh5t4jaWT3DhkNNA+ur1HevKpXMX49Q2g9xKd3YL4IMGTL8u5HRA58zLBwbt7m6LO4uvfHZTTUbilT8LPobey8SkuDaPaFS3NivgZS1B0OQSELfO59bnC9gHxyc8ofjRVJuGIG/tr/JzcQNiSgjHJOxGTfbS3A1G5SGoUa3nwRDEja9Qi19/0SXyxdk0jBvIHyyY7RncO5Q18DYqNnqDS4pUOC3pAoHBICIxuBn0d/Yd7FCJaVeLgkQGHnrUMuWpYXnLcGB0UkaA9eIudjNFFSp5UHF0DXFORiKfNCkXZxOcKB/molje8YtLqO5rjB7TXHO4ZbBruHZAqUQQpIL4rWudjqYLNbM9IzX6wHzkgBcKjcEwyQomUyO6fXF84kEi9XsFZOMD81ZvnlX9bIyZVvz6O9PtJ7qG99YptKIOESy+zUKkroiQR6FmupcRti+VzObUqoAmu8XRvx3caQ+DEEhJPHQkgp3Inz0/NDhi7q5SHhDgQIno02TJjqGVsn4Z/rGf3vgQr0661ePrufR8Xwacs7g0Nk9o3avmEHNYl6hNKSMy9xQqsJRpGfK9OL+plgCEuCMCBIzB/2pnGOQ5qyA5ofaM+8cSB1Xyjmwq2vk2KnuHRvL1qs/bRRNgMIkEkxCYVIoHomDRCxxZWEQm/ckMCjkIoVw9+me179//98e2yxhUM3DhgtntX8dmZqx+gZCPizgLuMJy1TiYyNz5RJRsZjb0K8/OzD57JYl6d65Zr2ZQoK+tKXmSMvQpIT9TGH2Zjm7RCTMFnKqVdIfvH/qkZXl73/r3jtrCyQibqczHsOQv923ant5Xkf35L231SSrsr+zoozPY20uz00A4AwEPf7QWe3EG2d6ft4waLNaG7SjeQoxjmPV+fKARrpeLt5crmoNhN2e2H9tKV+uloNE8umtywZtftwd2F5XIGMzGrvGKu+rf26p+r7yfBhO4AhmCwck1EtN08726fVjhrs2VD6wqWo6Hg853Se69TWlypeGRt5pHAJoXGu2n9HP9Y3Pcriwvm/uaNP4qrKcXAWnr2NkWGc60zwiZtDvXVH+5duXuEKRt4+2mRy+73xpM42MqIWcJ1aUZs2ruFAk1jwwubxUmVICLl/wz3su9I8bvn7XipyrBwhBaas3Q4YMGf53ZPTA50+2gL3T4vC7Ak1dIxtLczUC/rwkkLCo1OtxESRu9JfBgkSCtxq6KrMlbCqFQSb/vXV4v8P1yqnukkjs6XWFXypUUxBkyu6+BYFDV7NBOTTKmNXFpeJMKlaikuw+0/P0i3v3n9dyGHheFn/70hIkC68Siw92jpRn36LAIQCAmMbgZzH+vkgSXNROjs7anrln6Rfr8l/qm+jsHd3nD+3IkVBuUC7B1UjtI8p5rCumE9ij/j+e7pu1uJ/eULYuX+GKRO+pL4Fg6P2GLhYVv/66Q3K5Qjesi0WjEATNJxJARGoxmYz6ff6uru6S+UQCaJGjID12KAGguWDIGYuvlojLssRblxb09880tY190K2ryBYXyvg1cgFRkPSKjgIehUqED3ExSqpNQeyaoTIpiQLP+1Wii1ph9DksZVwhQoILJUKpmitlMJsGpvTTVgglvdw8cF+5SsKkPvbnjw3Dpr9///5CuSgWiR86P/i7+1YGacgEFDnTPTVkdiIkWMm5QpveLB6rUiV6dGWVwev99f7ursFJBZtZJZOMehyEKlhQVgiadw6IGFRCxlwcnh4zOR5ZXWElygqlOQcWQBwsCpMQ6NPSTOkeA6ISUer5x9p0dBz7yh1LAQB5QvadywrvWVPGxJD/3Fhl1E0bZy0tNt+J8TlPPPHPi7rdQ1M63fSmKo1cwKal6fBPtDNL1GI6g9JOIZF6p+6u1QSSUaJy0YGmgQ8PtiUEgi8uL7AlAiuysj7S6l+8a3lX/xSJBLsDIaha9UxJlphOoyHokhzxhuKcHTUFt1Vq7lpSxKbhY3b/4/UFEU94W22hkM/qg6FqAL5QV0TGKXOxBCMeLxGyBiZMLzy8aYlaNmvzrC3NPni2r003XXTnkkflQiETY6MojmBEBjMxWoPT88qh1qJCRbvR/cS80+IAACAASURBVI7fXaPkRuVsTMI63D9xsnFGzKaWcZjHzvaT4URlgZQLKHMWv3vKGQlEg2TUoDM/eXfd7760LV8p8Poib/SPfnKsW6YSfu2elUwcu7+mYKlKSvTfIGY+W8r54WtHv3rHcmJ9dupm953rX12hemRzDX6r7loZMmT4tyWjBz5/yCT4YXUWNZk8Z/McbOzZXK7SCPiuRGjXiZ5NNfmfGTWUnM8yvHmSgCei/fNML4mE/ORAe62cNzA8940VRVvLVa39kxU5UhGTSoR5fC6SIAkACsOXBkDFmVQsXyHsGpl7/PbaZ+9ZKeQxxv2+hyuLMS5ar1K+cqKtfD5U5mYDETnNiyTBzhOdS4oUBXIxiiQfKMm9aPdqz/Uc6hrZXK6+Sd3KCFKbiMmrZBgbrP6RGaeUS10ml2B0SMXjTjk8oXh8RbHy43+l7hCGYXl5Gt2wjkgkuEwSwDAAIBqJTk5OV1VVJi8fFUhbw0TsUOPIzEQ4vF4mYGEouLyTMdG2TClgEwVJic5lVwsfGnbbYShJRcjzO+LRa8TJpMZDDCZlf6fGZg76U+Y1D8O1due28jweg/rPkz1T/sCKLEH/lOm3By6sLcj+2eObAAB//LDxttr8WpVsXZa4gsOQUhAcht/vG/9ry+CM20fHUGmau4AwwUkw/HbHqGPc8M07luvmbN/beSIeTmAQKUaJuyKRdHdB95xtzu2/o0hJaBinN/DBhf5nb1uKYeg/24aOn+resbFsnTr3ajeH9CMlQolSwiAQD9OQTxNIbJ7A3rP9z957WUOxEYtzpTorm8/KLxR+Z/NKKpnkiyb7j3b7xy2ucdOA3dnrC77VO/ZRn759xsrF0DG79+9NuhwRa5/Zto3LKleJX/i48a6KQjqFbPcGnnv72Jje/NtH13ZZnRKc3j5j7Zix/mrbkhgAL+1r0txe8wWpQMwkBwPx9QVKMZNGw1ASCSZWToGU7wlFCqXsNWWqV460DbPwinhiQ4Vcxea8PW4w6U2358nO9Y4/uaVSxeFAAEi59JN688nG3mXbl9Bn7BtKc/QmE4pQ9F5nFs42ev22QMjtDzz5+z0jVLLO4Y7DSTmajERjNJzR3zMz0jgUCPlM3sSATr++Rm6fc73fa3bZPVsrNX98atv9q8poNPKFOe8j9aXGqP/11qH/+t3Hs3rzA9vrfnTP6lAsfkdlnoBBjcwLMEKsIjDJ6vI5PAF/MLLzRGef3vCNu+vVsit3bMiQIUOGG0tGD/yfgEyCiUSC83bvsQv9q4qyWTy8tWeKRcMVQvZnSoIFFsyN4tPcYiqdLcB/8M9TJwaMzEj4l/et7LU4i3M5K1TZr+1rKs4RM6nY5ygJoPk4E0IS8JjUdbWavc0DTCHeN2vbqMmmk8lCnDYdctfnKm6ZJCDOxWJJ8P1XD//mq7cDAFAYmQw6vrm0or5AcWDGfpO6lRGkL490SfDqiXYGjhndgQ9aR02u4BeWaOpzJE3Txs5pe02WUMmjs6n4qNl57bpDix0FKUlANCW4NAYIhiCAoigASZPJrFAquRxO+qgWrGGEBBeIuTiJNOvwYDBpQTVSom3Z2x0DEybnutLcdXlZKAlumTJfMXzIH4s4wkF/NMLBcAgABCaRYFL4mgWIiPH4Y2H65cFC/Q5LGffTiu8wBO2dshSJODU54h+39P96c+3OE53f++AkyRr8yZObylXSFu2k3mD/4uZq4g0FOF4kEQiYFBYK5XOYDIT0j85RrcnJxskSJg0AQAypa9p8sGfstw+vX5EvX6aRP7W+OhSJaWctv951LhEFSAJO4Emid8EvG3o3FyrZVCwcT0Ri8f/ac7a+KLtKKe402o0Or8nkuGtjWapmUSoJNf1GsfimQdimRPIxYbCSIPj51w6vKs+tUEtTTzN7As5gSCVg+6JhdzRMhhC9w7teJf3z17blyYVNc6b3v3XvgzUFgSmbaXB2sHfikMXZZ7Q3BIINWr3F7DwxOntqzNhksJ843sXlM/90ok2TJbQ6PWtX5MEQ8mbz6O7B8WQAKNn4sYtD3JVFYHBme41myuqpU0ooKJI6Fnj+EDAU2ts7kytgtWIwVW+6uzYfIEm92f/B2YH1KvGF/vHH1lTQUIorHvSGYiaX/9Wzg45Z0/P31pfnyQ61aKdt9ha7u2HQuLtH/0a7LhyP/vq1o6EccQ2PUqPgrS4SaRgMty/8/rlBz6QhmIxjjhAu4heySWKRcBqmhObMblU2Fk7mCNjFWTycRjrUa+wzm8/NWVsOdkYZ5He/ez+TgUeTydUFWSgCxZNxbF4GpE5BKBw7260fnrFsWVKQcQtkyJDhVpLRA/9XYOGYOxRemyM5OGM91tS/sTC3rFR64LT22rnF6fbTDZcE6R8qptIpDKRTO/aLh9YtUcv8ifBZnWVroaI4R/zyngulKgmTiiEwPGJxym5yUwKwSBJc2t2clwQQBHliUS0l2Xxy4N66Isl8VMYtlgSpE5GSBDgZHZuxUijkZcXKIbfNEvKXc8WRRETCod1dlPPB2E3sVkawYKngGFquFO9vH26dsK4vkt9flydh0YQMvC5LFIIiDcNzOIrkC3lCFm3C7hFz6KW54pf3Nl2tZ9mCk0JIguHh4UutiwFIJpMQBMMQBEEQhpFHR0YLCwspGLZ4Dac/wsMxEY1KZBRAMMzAUJDWtsxl9RXKhf9zuFnOZy1Ty4jwoUPDMxBCktEv9RIecFo0LL4Ip7MxfHC++hAEQCp6/hqqgBA5UJpoMc07B4hHJh0eEAgbE4lJm3vO7X98SaGEy3insQf4o5FonEWjvHOs4/51FYq0GYMAYFEoRRJBsYyTzWclItEsBvXQ8EzzlAmCkiou+9TQ7LMftpSzkcfXVKVepRJzC5Wcp9bVxKLJznHDLz9sDIYT8TjpzaaxvkRQ5wmcMTn+2Ts2PWG0iXnddvdps7Oroeu+zeXr1bmpWU0p9ZQxnT6qxaQ8Bue144ebhuxufxJO5skEEASSyaTWaOMxcGcsGEnEpTjr7fah5Tmi6iwRAMAbjTKp2Fc21Mi5jNtq85+4rfaZu1c8VK2plvGXSXmUWcd4+xjq8DGg8KZq+Smb/6NjrRQWvS8YgoQsbc/IUbPbFgz4GFi+mPXP3ecf3lrzYIFSKeO9froLxTB/LO4LR2OJBAyBWCLpDoXHHd4JpzMSBa83Dk2zkLUoSqVRPr6gpdPxPzUNwuHEwebeh1aVjbh8p8YMn2inj01O7uwY9w9OCJcXtMxYRp1OHwkyRCMDrSOrixVZODraMT4+blCruRoeNqK3JcKBhubhd89qG6edeSj84mOb33x6O86nNZ/XmqicEIawfb7fP7Lpq7Wa8y7P4YtjH7SPeeCQDyM3TxjNZwZz8kV/++r2UDJRnSPKl3BoKJaSASkZ3KKdfO9E18isZcfq0ke31MjSiiJkyJAhwy3gUpnwDP8XCEfj5/Vz3lDkp6e7SzDkJ3fVe6HI3iO9z92/WsCipTfkIrii9X9jJQEAwB32k0kIjmCxROKnu05vqcjjiHANk/e3Vt3KbHG5lGf3BF7ec+GZe+t5TGrXtFnGZoiYl8Vs3CSCsTCGYAucEaFo/PTItBVJLOFzmDD6t30tW5cVLClUpJ6gdVrYScrrJzv+Y+tSHuNmjXPxWeixmF5774LLG3zuwTVUAZYKUAYAhOKRSCzqDiRuf+s4NxB4aHXFfVUaTlqtzxvF4lERj3RPmg93Dn9jU01qQkKx+Dmz/qLOjZHQJ2vzyTA8ZnHZPX4Jg/b+iU4KijxzTz3vSmd5wSr1+317du8KBPxE4BAMQRAMQwDE4nGv14ei2JNf+hKDwVg8sMS8qZTC7An0G20hMrJeLsLnt//tnsB/v33ibwdaIjzKhuKct57ZIeMxe83On7TqciDwxUo1TksWz0916lMGnBYAQDFHmHokHI9gi7p0XaHnl8NSxhUSLyHum51TZiGLZovETprsZ9qH33lgrXbcuP7nbytg7NVv7zjWqps0Or79wOp1VWpwFULxiD8cOzU8CQDoMrnPTZj99phZO/LuLx/clHdZEjAxnkAsDACgkMiHukbe7BwxTM6aE7Sf3VUdjYb+caLnubuXlOWI+ue8Fp/r3JmhH391Y7o3A1xJCYB5k3TB01KTb/f4/7Lnwpa6fADAme6xQ02DO9aW3bOu9PjQTFWegEZBxRTqtNPXa3A9XlMAAWD3Bv5yrO3ZLXXp11ciTY2kPkJnMAuZTMGTv8UcEYyM1Nepa5dJx0asBk84LmLw4vF2o987bEquKpIFIwgM5eLYiXFjroRLQRGQTHrDURqG1mQJRiwuNZ824wxF/TE6RpoMBAEAbBLcanCAUARKYiHjdP6SoodV4mWl8oPnde/uu6gpka4vzRVx6MlY3OR0zwR9pFBCN2ytKJVaZ32WaCDiDH/ri2sM3khD15ArEGLSaXMoOWjyH/nO9gQWhwG8u2384qypoWmmkIcc+cFDOXxWn9nxom4qaLDCCeAOhi4e7qJi6H89sf72Gs2g0bmmQEnkCC1Y6hcHpo63DQMANtflLy1WXtGHkyFDhgw3m4x/4P8QCAmWsegt4wajL1gp4x9q1z1ZXylUsN7cd7FSLWVS8cVxMouBbrQkoCDkWCIeS8QTyUR5tviDC9q1eTksnKIRsI/qZvIELC6NUnrLmxIAAGKLEj0BAAgJFrFoNrs3m8OUshklKslbxzte6R9fnS0mWpURXoLlufI/H2vFUUTBv1n7cAtOgZhGzysU6kwWg8uzriAXhkGq6A2FRMYQMhkF6Q2MuTQKh3rjJcGCURGrRcyml8gF6d0JEBhWMXkrsiX+ROjMqLFEzFUL2HQcGzE5rid2KBALEXmoZDKZx+MPDQ1+GjUELjUuRlHU7/d3dXVfsUkZSDNSiT/RMVTBZVjCXrMzkAofomLo1iUFy0tzzLPOId3c263aWo389Wmzvntma4li1O7SGT00MiJmUNMvivROBURXYCJoPpgIY/CnRxRdlCptCfrFOC01KrMn4AlF8sVcCY3y3Ednq4UCDgV5+MVdoTn3nl88trku/7alhdlSbmOP/mTnKBVDsxb5VQAACEyiomiRRMCikuPRCAcjH5oxBljUYauXToXz+RwSBIE0cXLJFROPBJOJDoP9y2uqRkyezvGRj3d1iEWsJblZpRLxad3kxZbh9SvzaqRSOnaZzoHSflKPpNugC/6aBOD3753ZXJe/rCQ7S8heWZ77pW1L7L7gXxt7TrX1J0MJKoUU8Mcaxgzr82RCOhUA8LsD5zeXqzXSTwPfk/OfkrxceDBpWNPQNAlAP3po3evfvaeqKmtNVu7P/96QW6v54erKCrHQNGp8/om1RUlAoqJAgMmtQaozGJ11BKasnklreMqWNLqmRw2o0zM2YABhHwtHvTY77PGiPt9YKF6YCFmDSMg8i1qDgUnr1Iz9yGnt0bNaKAGkUobT7ItHYxurNcsLlUo1f4laCUOguWNq/bL88hxpkAxNOH1yFvX+5SVFSlG/N/z1JfnVpSy1iDtjCzZNWJaoBLVCod3t+PVDGxIQ9FH/2MGhybjXH2YxigEY7ZoQsWjP7FgxanZ5Esk7K/Jw9JKjKbV+2oZmXt3fbLR51lerv7i5mlgeqfm/sbfxDBkyZLg2Gf/A/zncwfCujuFXO0Zmtfqd37pH9v+xd9bhcV1n/j+X5g4zo3DELNmWjLJMiSnMjUNN2zRpu4W0u9sm3eyWmzZtsGmahh0njpmZhBazRjQjGGbm+/tjrOlYktPuru0m+5vPo8fP+Opq7rnnnJHO9573/b5yJjNG+vOBlu/ctZK32C7Bolz3vyXJ69o8/leOtT29aQmPQXUGwzu7xu6vyGGTSYldgq/fXoeT0Am7u1DCu9FFCcCCp9HJg4BABvW2IimfjCFnuyd2/GxnTn3Jnsc2seeSevsd5kgk9s7RbiYFvxEbBQufhibod5htLt/Zi6NPba0TLgisCkRDNm/kmf1NqMO1vipPyqKtK8ggY9ezG681MQgA7B7/K8daAQBPb1qa2iF9dvOZQdPqLEm5lO8KhMYtTi4Fj0Vjbx1s3VZXWFucsfDdAtEQACA5NJ/t/sRoNCAwAiCQ2CWAERgQwB8IeDxekVj2+OOPLXyTZFNTVQEAIBCJDuptAIBiKR9P6ZzGPu2Tv/lUM22JLsktpXN+fk/FhpzMAZOjbcocjsdXZYhLF3NsHHCYaRgpg84GAARj4eTxOEFQF0yt3pTkAQKADp1JzmGImdRGrbFZZ+Ii2KUx818PnWlQyk797mvJ0yAAWgenjrUOAwA21KgX7bErJxPEpWHtrov9dVVZjd7Q+IQhGI6tz5VvLVSUiPhJTQUAcARCH3Rp7ipVscj4+RH9jr+ccxmm//DIJp3Nvbt5gMtnAb/3gY3V6yv+Vp6vkCNY7JpXiYF5D6cJAFr6tcfbRp5/bCNIGYK93aNHPYG7uPQZm71rYLpHM+tUiJ9fmre5Nv/Q5ZEerenf71qZNCZKnXJEylVC8YjHF371WNszm5byGFSNy6Zm8Y62Df/4reMvPLq+ukD5xt7Gr962lMOguAPRAz3jHBH99txMCECpcsXtD5lcLphATHZPkIiNO30iCmZw+5uNjq9U5bg9oY8u9m6tVFcpRUWZ4oFJY+vw1AcnOnbcWrO6PNsBB3AYg0DcH44q6cz+SdOP3zgWYiIYhEqEnDKV6M6afCYNm3b4W2csd5dleWLB5/e29tq824sU91ZnIWH4pSMtDWU5E26v0Rcs47NkLIbL5f+3Px3NELOfvH3JmvzsYwOTr75zuvG1p+cp55YB3al2DQzDG2vyqvLlIE2aNGn+2aT3B75wJIqUcTFkMBK/3DN+e2WBH42IaLSdp7vXVub83dziBNf98VLyuqnWNFwaOVfA2tk1ltwleG1vY5VazqdTRsyOm7BLsGhvROMxCkbi0q6kF+fKeDqLa0OB8tSYvkwhSKgUIYUmoTEUKpaIStvZ1H/d0wmu1fNCCi2DzWFLaIuWJsBgFEOJByrUMi7jXN94Xa58yGCTc5kJG/7rwrUaBgFAXqw6AVhQxlhAp/SbHFqbqyZf+dInF947enlVWdbnVzKWyxUjw8ORaASGYAiCCAAAASAYQlEMhmGjyZQoUrawScTVj0sTB7EUQ1IEgmlz7VSK2MtKM9tGp13Dswo+9sHp3opMcV2OrEouIKNo0zVSjYUUGptEnvQ49H6PlMpMmr34oiFwdRWz3qsziRObA7kiDgTA4SHdmizppiLVQ8++GXUF33z2nkwJN/UzKBewVldk4xhy4rLmfPd4KBJd1DcGgqD3jrTfUVu4qTRnhYTLREA+n0GDkZ39E/0GRxyATO6VZJi3Lw/XqoRqPg+F0ef2d0DxEJ8GbyrMrsyW+oLR/n5t0TJFW9f00bZRrzcMRUAGi6UPey1B/7jT5otF+Cllzub1MEh5bXP7d57sSngKJQ+a3X5HMLI1SzIWjZRLhTlyfrfHpx/Sv7On6cWd550g9tjaqgwBN5GunahskMzQSB1Hq8f32vH2hBiAADAEvAiBvHC2Z6x38hu31711sPW2lSV5ciEKoyNmW7lKUMhnUhDSvAlMxlAqBeWzGAIuwx2JrsyVy/jsfrvnG3VFHCp+tHP0hXvqa9UKIYeeuOrh1qHvPVavVHJdcR8OkwgI6B1ei9l7tFPz2bEetpT177evUckFj68svbMmHyDwOx2jozbnhiJZHIrPWIKvNw+LXI6VJUqLy//Crgt0GdcVDOeyGVIaZWtRttXiPn5pEAfgG/es7CcIOBTZmK9y+YLxOJEc7uZ+7duH28ZnbRuX5N+/riJZ7y9NmjRp/rmk9cAXkWRu8aEZ64mm/tsrC8hcrKVrkkElJ+yGXGEfeUG480Kuox4A/5gkKM2WvLGvqSJXzqORNf8MSZDcMUimF1NQdHmRat+F/jq1fP+AtkwuSK4IhRSaD43ctAzjJIkM47f2tZbnSKn4fEkQjIWlXPqyHMVbZzrFLHqz1njjMoznAQEgn6tOkIwdAleXMS4Wc2ES9onR4bE5SxWCo63Dk3o7n0lNJBmn7tgkk4wRDM3Pyx8ZHo7GotDcrEzYDUEQjJMwjWa0sLAIx+c/j09dUs9TBXQc41ApkzbXtMONwUhCFSQql9WVqgb7DYMDM++2D5zpncgUcpZmSz+nUgEAgINTEhFEjlAQhQEBCAZGQa/ONk61GQUADBvtCg6DjmPdetuMy7ulULWvZfCDjsGG/IyfProBSqkKkvxXLmSvqcjGMaRlYOr5vxyfNjvIOJaaOdrcrx2btT24oQqCIDKKFkkE5TIRnYKwMMQTCGts7udOts+4fEaP/+CQrlYllLMYzaOGH+9u1k5OhgzeSZP1wKX+fo2eL6H/+pFbHlpSeteywngMTJodrxxrO901YXf7KGRcRqYbI76EPVHiSzCXIZ3ayTEAfvPhmY1L8nIVguR3I9HYuMVZqRQKaRQIhM6b3K9d6nPY44BK46mkQh6DhsM/um0lBAACIwiMoBCCpXiYRolYjIjFiJjJ43n9ePsztywVMGhQIqsHpe3unXi0MtflD7k8ARiG7llbHgfA5g14QuEMHpOGkpMKM9nUQDRERvFQJDpgsGULONE48WnvxPZCVTQefeNE+1Mba8Qs+qDDYgn6tXbn1361e9OagqUqRc+4oU2jP9Y3fqZ3omPM0TI4aZx0fP325Y82VM26vdvKc8UsuiMQer9zJE/CKFMwgwHo466JXd0TahY6MmKO8dlnWkY42fKvFGasVSs3F2XB0fh3/rBvcMp8/7qKb96xXOv0ACp6e34mi4KTUWTPhX4cQ4x2z9uH28b1tg016oc2VsnTGcNp0qT5IpHWA19QpCz6jMtbpxAe09sGNdP1Oaq8QvHhC4OVahkBxxEIvvlbBOBqSVCkFP7haEuJUsRLkQQcGrk4W/LqnsYKtZxPp9xkSTAvfCghCTRmB59OrStUfnSqqzZXtr9fm9wlADfddCiJmEbnK5hv72+jkObb9SSW0TBC8KjUX+9v7JrUI2TSTZAEyQlDwbFipfDjxr7zg9qSuT5JljE+0DfNpVPaHR4JiE8bHSX5ypUFytOdYxd7JhAUyhZfFdYC5m6HQKD8vPzh4eHYnCS4YjcEQzAMezzezq6uoqIiMnl+ysS8aZy6YMUQWMyi4Qg67fTonF5TOBwExEqxuFQh/sqGquUlmbM6W+PlsU/6NON6m5BNr84Qf06lAgCAkEIjI4gjFPBFIhycAuYMdoKxcI/dXMETJ89MbA6oRRwAwN7+yXIJDyaIH713YnbE+OuntuarhAs1DDFXJ0QhZK8ozdxxSzVBgDOdY+e6xnEMScyBtw+3bahRp84HCIKoOFoqFddkCJYqhTwctnoCu3omIBSM2rxUDPvhZ21B3TSVjr/5rdt/eH8DicucmjH9+DubClh8MYvBoOD5Mn5dnvLBlaWrCzIoOPpJ29DrRy5/eKbX4w3BUUhApmXzuKNuW6o8SPiTNvdN9muNj2yqRlIGtGvKpOQy2RR8wGEu5giZSNzsDn99eeGv71iqZFNMbvcfH72FSbnyGYRTbh+FrwiDhNnrr/ZdWl+WnSlmx4hYn8OUxWB/2DFWlyHMl3K4NMq5rrHv3VdPIZPCkajG7CiQ8CCIQGEkMZeSIi3xeQ9FY01ThgweEwDig+7RLfkKmABvnuy4t74kihCWoC+Txr7YMfHNX37W5XBMmV0fNfeI2fSyDPHqigwajB061mOZdT58S3X/uNEQi2wuz8ZQyB4Ivt85uiZfwESpf2oannZ4l2eKQ3DQ6Ai0D015zK57Vpe9tH1FuUIkYdKa+7UfnuycDvn//d76KAxFCFAk4zcoJDgCQwBopi3P/H5vy+AUlUxKKIGF9lxp0qRJ808nrQe+oKTmFm8sVB1sH16epaBySH/e11RXmPmP1C0GN0YSJG3maTjGE1L+fLyjTCVOSIKP5yRBSbbktZsuCVwhL500f4WXIgkoywqUH5zorFXL9y0mCdgI6bvvHm8ozmbeyKJgqYhodK6M/sGh9pZBXWm2dJ4UQWH0vWOXi5Wig5OOAY2WxqDgVFx4A0yH5pFYwlJxbPW1Y4f+cKlv97gBaM3bl+etK8l2hiL3rCqhU/FTl0cv9EyULLgXAEBCEqjz8yZGx8KRcGpRAhiGcJwUDAQ6O7uKi4v/riQAc41M1A+m4ZiERccQuN1qq+Zz+XOL0UwJ9+GNVXWlmTaTO18uePN0x/kBrZzPWpEtIaNI+4x1UVWg8zo5OFlKYw3MOZMCAFAYsQYDLBKWWIYSAAwarAoug46TevS2aZd3mVL45on2XAHHbPf+4Vvboav9kaCrG5zc4siQcFeX/y2IaMrkeH1f08YleZkpeQ6JNGIIglAYwVG0UMyPQUDv9t9VpBDi+MvdkyMuh9Vg/vmOjUvK5XAMeunDMz96sEHCY2Yw5y86STiUJxYySORLBtvv7l1bqhCNzFo/vNj38tGW5oEppzsYDsQS8uDYyOjh5qEDjQPrV6ghGpJUCAaX1+ILZPBYE15nAZvvDPobJ01fXVqYJ2QTAHx0sfu+uqIiuQAsJuGSwgAA0KKZnjA7d6yuwGBk2GUr5YoHjA69O7CtKNPpDu481fX9B9YwmHgwEh0w2AoknDgUQyA4mX+fmDzuiI+EYO5w+I89o4VCij8afrt1RMkk6R2uH/z1eENx5up8ZfvI7Mv7Wx5/Y/9A/7Qkk/8f99V/d1vdkxsqipUCDxL0GgMnWybidBqEhasKVKcGdPWVOXkC7gnd9N4+7fIMUTgM/eZC3xSI8CkAxqICgtrWM5lLZ/z0gYavN1SRUKRlQPfWodZBnXldTd63ttTpHJ5ylThHxGHMbfodbxs52DggYNP/64lNj966JK0E0qRJ84UlrQe+uKAILGBQsDgxZHOvL8j4uKVfyqF9cqyzd8y4siRzxYaLEAAAIABJREFUod3Qolx3SZAanyOm0fki6ltzkoCMIadGZytkfCqOJSRBcY7UGoo0jetV/Plx29cdMkpatENQBObRKBqzk0+nLCtQfHC8o1Yt+6xz1GZyEgQh5NAHJo2DI8Y3TrfaLb6Dw4btldk3+kl8AggAEY2uUHOFVPrO013l2dLU8kMQAD949eAfv7P1oSV5h/X2822DpyKxGZd3mZSPwtdxPK8idbZAAMh5rGKl8NXjbRQMlfOuBDpTMJRDxvUak5eOVWcLq2ViIZs+bnWJeLRNNflkErbrdHfygXcqGIxScLIqJ3tibCwcDifqFkMAwBAMwzBBgGDAPzU1U1lZARaw6DRO/S8dx9Rs5rjFaXL5EBhOLV62vir3aNOQw+oty5K8fa6rc0x/x5L8RP2yvYO6YyPTdBImZ9MAAAMOcwFbECWiOIKlehAZA75SrjC5V2DyeF2BcJ6YBwDY0z9ZIeEZbe7OsVkFh6ngs9ZU5BBXPxqftzJObhQkSAYR7T7Xe6ZzTMBhEMTfws3neRxBEHR0ePr24qzlWbJcMbuYTm49dtkVj/dB0Jnh2T3NQ2PDM8trs5cq5CTkqo9bouwxAOC5A525NOjrG5YoeKxateLu2qInGqpKlWJAgBmbe1dT/0tHmj+9MHDsZJ80VyCTsElRnIORTFGfJeDf0zmaI2H5ibA/GvFFIrt7xldkSCVMOgRA44iub9r8yOryRH4ItGCwwNxBu8f/UWPf05uWUnGsz24q5oqs/sDBId3WPKXXH3p5z8Wnbl8u5TBDkVjntClXyGVTKDiCJbYXNC67NxK1BgOOUMgXidiCoV2tmvZQxGJw7G2fLOLQTvaP/vVol5xG39cxsqd1CAFQuUIM+SI/2bHup/evK1NJIDRORknDdvv+Q/1jU7Zbl5fsGzRSIMLLwIWF4qMj2o6Au2/WIaeS22ZMx8d0PAbihCgxbyiXxt5zqe+pzdXri3POd4y5g+Hn3jo6MmO9bWXxbSuLjV5/lABLMqWJEuMtA7oPTnQ++/ohFo28pa7w2QfXZi6Wy54mTZo0XxzSeuALTSKRoEohOjuhr82WvXKiBQBiR0P1/ksDZdmSf1wSxBf78/w/5lqSIJPHbJ02UzBUSKdQcQxnUX/87skRNk0fDpECYRWXeRN2CRaXBDDMoZFHrgQOqd49djmbxzrSOvzWwZY/HWg52jyEU0i3rCrQY+i/rqv8sLH3ZgYOiSg0Hx5dnpfx6r7G0mwJ9W9PFodZNMqa8hwMA49U5uXK+NrR6VwmvX/WeqNjh1LXr1QcK1GK3r/Q06SZjseJDCH7eL/u0rD+iVWFDWp5i87SpDOWSng8OmnG7rP7gnkyfoVavutM9/nu8UUNSSk4mc3jjgwNJyoSJCQBBEEYhkEQbDKZlIvlFoPPlQSJbyEwrGDTERiecXgMLh8CwzQcg+Y8SXNlvLbBKYfVW5Ej/euZLgWfVZMp4TOoh032V052DZsdCCleKZSE4xE6RvHPzSIhhUbDMG847IkEExFEAECDBruCx8AxqNdgnXJ4a5WiPS39WTz24KTx9hXFijnXSJAiAFKbDQEQIwgIuuKTkzhBLmTftrL4+Uc3EATRqZn94euHjHYPjIKsq22FevS2GZdvW1EGhiBkFDPaPQGI+PbW2l9uXeoLBjtbNPwy2YDV/07XmN7ti8XimdwrKi6xs9Go0f/uaMe9a4oq5FcVJRCyaEUKYV2e8s5lRVsq1dlcli8Ufu7+hp2tA+eGzH852XawZfhgx4TJ5LB5/IFwZJUqo3li9vVmjRAHZAa6v2PkrdOda8oyyAzMFgq4QkFTwJsagJTMUjC7fb893PS19dViNn3YaS3iCAfs5j09urV5Yl8k/N7Btvu2VkbQuCXo/7BlOFPEmA05Q7GYNRiYdjtHrTYQgPQWj98b0pld7aOmN050v6czRyYNFyYtfCT28aetrnDs+QfX7uqYeeHO5a88vjkejV/oHHvxqa25Cl6MiPmiQRwldZsMew733ros76GNVZE4aJ7UT1ORzQUyGgwOdE33HOzqMoRCRFRMpiyXitbmy1cruKMxdKBzFKfzGsrkIW/kV++fOdc1hgvozz/YIODSDR6/nMPM4DHJJPTkZc3bR1oNVk+FWvaLr926ojQzvSeQJk2aLwVpPfBFR8qij5odVSrRW92DUxbAicWqSuTrytV/Ptjyj0uCBDdOErjjod2XBtaVZKsF7NOjszwa+Z2+yY+mjOf0drbO9MSKPDmDYXD5bk7g0KIdgsBXAod4NHJdoWrP2Z5Pz/YQKsHTG6v/9L071UrhgMnxo3U1ETy2IvOm5hJAAAgptOmQOy9L+O7ByyVZVyTBB8c7SrIlBSoRBqO9DgONjt5ZnPf26Y6uCX0cRW5QdQKw2PqVSsLqizNxDDncObrxd0embJ4n1xQuyRJLmbQ6pdgTD57SzNJIaJGED0OQ3uXDEHhjtRq/9kYBm8WempryeDxJSQDDEAQgGP683GJwbUmQfCBNJMKH2HQEhmedHr3Ti8JXDIgUQnZCFXRpZk9eHNw3OL7/8nBVlnQ4EnVOue6qUQ0bPT16W5wgVGwmBiOBWDgxi4adtkwGS0SlJ/YKDB6P0xcukvAJQOwfmKqQcvU2V9eYnkclxyKxhzdVX6uFIOU4DEGp9wKlfGXL+MtLMx/dstQdCFzq0Tb2Tbq8IQYV9/hDbdPmbqP9/opcMookfvat052rizK2VuWTEfRk54Td7n7xaxu2F2TycNjmDUy5/b+/2Dtmc0Xi0Rwe59jQ9Hd3t1j7NM89sVaQkhidJPGe4XD0SPPQC09syJUIyCh+amLquW0r6DTqy1/ZsDRHZg8FTnZO/Men5y7b3AbNdOPg9C8+vqCZtYWjkT6TpbFnmkygfm8EiUIMBBfT6AwUD/iiZptPp3fuau//z11n68syIA4UjMaatPqzY7O/PT2wRsb3e8L/9ZcTDTXqtQXZrcMzx7vGj3VNdGtmjzaPHuzRHGke/eP+lqb+6QtDWqc3oLPZaWTK6jzVmsKMCYIIBqNPVmSPTlkVhTkHv3OHjMsa8bkut45JOLTGnsnv37+aycBxhBSNRwkCHO4Z2X9y8IENVVW5shGTs3FsBqVBYgqidYc+uawNApAbh6tzRLEY9sMNlUoprUYkhSLEueaBzeW5DfmS18/07DvSPjlr+95Da59/oGHC5rJ7AoUS3viMdc/53mdfP8RmUG9dWnDP2rJF/aPSpEmT5gtLuv7Al4BQJHZwYKIt5Onr1a+W8FuGJv/r8QbLlPtMx9h/Pr4JXMOGP0ly2XF9A4dAynVjceKnu8/eWp5bq1YMmZxvt2kaciT7WwbvWVFkcztbO7Tfu3s1jqETdneRlH+jA4fAgg5J3ngwEhswWLO4TA6dcr5n4pe7zs/yGbseqB93uesz5TQSBlIKGCdu5xpXuD7MG5Fus3HPkZ5bavIdbv+/vnnk0K8eUwg5/Q5zophxIBry+GPr3jqSqGF8I6oTJLjWPDE4vY+8uo8giBfurV+W+zfT9D67+VDPDAygx5fkozA8bnYCALJ4zHAk9sa+JgDAwmLGHo9n18cfhcMhGIIBBCAIQhAYgqBoNOZ0uhEU/epXn2SxFjdgWbS2w7w2EwAQAFg9/mmHBxBAzrmqZnZTv/Yn75xo7df5ciVKXyhDLf63W5cVKYSTTvegyXVp0rg6W1ol4+eJGFQUT7UZjcbjZzVTLBZGI2M+L3Fh0nBfSfabJ9okdNrAmOHetaU1hUoyck0ZOU8VLHokiS8aoqJ46+DUxZ6Jw82DJAqeV5u3Rsy/c1l+4mbP9E0885fDAy89AwAwOby/2HnmgduqlkhlibcNxcIAgsLR2LuXB4NR6PDQdMwX1wS9/saR1394tyKLUyeTYSniPNmBz/3l2LoluatKsgEAT7x7dkQz/P6/PGDzBatUIpAo3OEjfnGu64mq/A0FGR9d6n3+k7O/e2TDxjL14aGJr715TkWLc2iUcDSWfNtILBYMR7snDWwaGXGGCivlbAadJkBPtTmtcJjpdElY9BG9FbMGMoplmWJuhoATR+C7avKrMsUxIubyh/d0Dn3UNPXsxpJylYhJJx3tn/rK0gIKCWuasX7vRPu92dJJreGuZQUMAVbOlRAArPnNPjkWIbyhF5/eJmEzAQC2kGtoyvnG0aaAP37v2vJRj3/c5EQRAqEjfZPe2PT0GJnekCt/enlR3Bf6jw/PWqmMVx9dukQsbR+f/fhSX02u4rDd3bW7USrmPLll6Y//dESo5K8oVH1n87KWQV378DQZQ+tKMtZXqz9nQNOkSZPmi0x6f+BLAIrACg7Tb/dvK8n6S7umo29iTV6mVMlKdSD9/F2C5GPI6ysJkteFIahMKdrZ2A9g5IWD7WsyRaf6J39wa02lUhSngIbC7Df3tdzk9OKkNWHiSOKur6QXWxxcKiVHyltZlnX0aHsnOVrF5haIuYkzk45DHzf1X0gx2LlBpA6HmEbnSOmfHO9+bV9TjIgvW5bpg6IJMQAAwGAURuK3F2aeMdjNesvawowhg41BwenXu3nXmicMMukrq0pzJLzTvRMkDElmFIgotDqV2EcEz44a6TiWL+LAEPj8jQIcx3PVeUNDQ7G/OZBCEAQSucUBf0Cr01VWVi5oAgDXmMDz2px4kUg1TkQQGd0+DEaoc3sFd6wq6aeTSeP60ZHZ2QnL+x0DgWAoV8xZniXbUZMXiMQ6Zi3NOrOL8FcLxMnpavEEApFolUwsINPe7x4pkDKsVl+7ZpZPo0Ax4uFNNSiMhFIsShc2cmE7ocVUgT8aoqE4AEAuYC0vyXjklpoIAvfOWM5f6DfZ3SiCjBisj7yyd4VSun1FMQDgVx+d2bhEzeJTRXPOoSiMoBBCQtAlCnG1gv9QVQ4bived77UWyMc9/ota896+yVmXz+QNBCMxMoaEorFRq2tw3DCpt92/oRyFkZYJ458ujah5tCiKrs1XkhAkIU1NXj+TTL6zNIcAwBsMk1BkR30ZjmIef0Qf8D5YU7CpPOf+5SVfW1d9//KSVQWqqixpsVIUjsY2F2Vd7BinqDIfWJFbqZTvbZ3IzxK8/ZUNVUpR1B368Y51z9+3dmt1vocgvr2hulAuoJIwGIVEDEa2iHdYM/H11eUyHk1n820oUJFJmM0feurTC4Qr4nE6f3lffb6U7wgGBBSazuEaNbsOHLn8gycaVHxuMBa+PGv43fmh0y39bja7PFc26nXjMaIimysmM5gk2rmx2bEw8clD6364tkLJYaiE7CgdOdw2VibkHugY6hzXF0sFn53qHm4ftaglrz3eUKEQ+2Fwrnm4b2j6WOuwkE3fWKN+aGNVtpSXHNA0adKk+dKR1gNfDnAU4dMoeodnW1HGSYuro3e8IT+zqEhy4Gx/Ra6MimPRq/MOk8xb2N04SZAoSvDjXWcP9EyTgoHn7l5xatKAU4kSrpBBwf8pjkPJtqXecrIuAQSgKBT3q2hd+3sPmhx2t79Uzk9WK5sKuu4oLyCT0I+vNti57swbCzGNLs1mry7IskQD1Sp5iUyYtFVJOKtQSchdpZkKLntP26CYRe+ctRhcXiWXdR1rliW41iRR8JhFSuGHF3svDU+VKEUU0hU30hwuRy1gHx7WNelMQjoFRRC9y2cPhvh8RnGG+FcfnHnvWLtKzEmqAhzHs9Q5mqHhaCyaiBoCAErYDQEAjEaTSrV4IsG1SJ3byRU2BAANx8RsOgrBk3aX1RvkUskIDE/5gmEY/ODO6m3VhTNWp5RKLc2RvHOuu3N8Vsxh1GVLaxRCCob0GR19ZjsJRkV0CgBg2GhXcZlMMqlHbxswOWqUvI/P9xYq+T3Ds7evLFGJOFCKRWliyBYKA2hu+2KhKkgeiaS47CfupWnWWq+W/9dDDaFI7N2THf/y4QleFN5aV1hbpDrVrunTGpavzE0tl5aEmGsSl0I+2Dz88y1LHllR9I1l+cFgwB0M+SPx85OGnT1j+3onWmat/X3abfUlOULeqbHZ73/a6hrTrq1W37I0S0pnJMSAOxhu1hlvK87CEMTm8X90qfepTTVsKg0C4NWzA329g/9+V32ZSixg0nAMxTFUwKSxqeTjPeM/f2BdVbb0XO/Eww1qb5QUiUG9Tudvb11WJOaebBn52VdvWZKvxFB00u5eX5iR9OeJEzEMRtyByJEO3dpKsd4WKJUJKBjqDUVeOH455ItZzYY3HrtVwqZ7I346Rj6lmxocMrz6/mmUTm4Px2a9zgmH89KkLWA031JTkC2i2z2BfBbnltJMvSPyYfdElADfWlFE8frqC1R8Fh0GYMBhXp2h/NnL+ybc7lV5ShmTfrFrPByObl1fQcoSWvpnm0emD5/uqVHLf/Tg2he/uS2dIZAmTZr/G6T1wJcGOo7ZfUE+nbJcJd4zaRwYnV5RpKjJVrz19xIJ5i3sbqgkqFXLx3UzX99UU5MtxalE05g1l8cio0jScShVEiDwDTPKmSPRNtLV3ZKQBC0TelMg0CARbastHuvXlWaIToxMpxYwHnJZq+XSPBnv5eM3MJ1gYQ/wyFQ/Et1coT7XPU6CUJWQi84Ztyct2PksvDpT9rsjLWd6xzaW506YHTenjHECCgmrL8okYegnTQN4ykZBomyZLx5s0VmGTM4VWWIUR88YTE67t0guHJ2yfHq2JxiKAACkAlYwGmJQ6Oq8/NExTdJuCAAAQzCGoRiKjo2P5+cXLJpIcC2gq5UAMfcCAoCKYzI2A4Ygrd0TAsRbmumVUnqNQJIj4+/YVF2cKW7pnwy4QsUq8ZtnOs4PaAUcGpmJ1isVPiLUOG5un7LgKHJZa6xUiXAUea9TU6HieO2h4Skzl0SOReLLl2dZAr5Ui9LEly8SiANinjCAFuvhZOMD0RA1JdoNAqBXb5t1+x6oVBMAZEm4OAVzegI/fXjd0KTpsZ9/rDU5tqwvyaCxuAwqlHLLV77mEpfdgfCHJzpf/MY2MYNGRrEapWRVlrxSwV2XJ1+eIRThpOFerYtHH7I59w/q9g1oex1OEoNcnCmiUzEqgmpszjGz6+3LQ5k8VrmEf25s9sUDjXcvK8wUs0kwAgD46aGOqYGpVXVZGdyrVNyvD1zaWJajlvI9ofDRgZFf3H8LGUe/v6dVC8PbM7hHzvV/6+6VfCYVANAzY5FzGGwKnrjrpCfSxWH9iYEpHpWUp+QKKNQTmpm3Ggf4MLznXMd9Nfm1hdKfHG85P2l6/kTXGY1xanKKVpZJFjHXV6mcANG1jkb8vu/dvRonYU5nJFPAea974r+O9B0f1/Hp1D/eVkelwzwIH5oylWdJhl3WHAZvT/PA+cmZLcXZFzvGOoZntq8oqSvN1Lt8nRcHsgWcbUvyf/XkrXfXl+WrFlFfadKkSfMlJa0HvkzwaBSd3U3BsXg0tiRLerhlpCRPWJ2l+Jzc4kUXdjdCEjhDXgIQNDJ6S7n6s9aBPBk/CKI1UtGRoekMLhO/WhIIGFSNxcmjkW+aJMAWSIJsARuFgckdVLIZDWXZn5zqqs1T7B/QpkqCfoc5AKI3rlrZovcOQxCfSp0JepUyzicnupv6dSVZEsrVl8ZgFEaI+sKsMyanWW+tL1D1TpkZVPJ1jx1alMT8UfCYxUrhJ80DF4d0xQph6kZBrVIcBKFmrZVDpxwzuBjhoFZv31Stfm7H+nAsfrZz7HS7pjRHQieTSSRSTo56bEwTiURSJQEEQdFotLun51q5xdcidW7Pew2uVDXGL2hmggioZnN5cznZHA55W21JjpTbOqBzWL3VefLPWgfPa3RqAa9aJuGwUQGF+uvTnUcmTa1T5ng8/ln/RBmPu69loEYh0ejMd60urVTKUi1Kk8KAhGBRIkZGSKFYJLnPs2g0UaKRydSX1Lmxt3+yTiUWMaiJ4x9c7H20obK+JKu2SIXx6NNG27jJtu9M//4L/dNmp8XlY1BxxoJ087OdozI+q7ZYBf4mFQAKIxiEsMnklz8+rxCwnt1Uta0kc32urFrOJyOAgqFDHu+oxbNneLRvynVocHLWHeqYtb7bMbKzfaSzf+LuuiIWleIORQ6OzjaOGbxGa1GWmEqjkDE0FI2N2dwdE/o3z3Q2lGYLWbRdo0NOi5vOo/3mXH/UHw/3jl7oGP/OQ/VcNt0fjnROm/tmLI5I1BOOAAAYOMnk82ks7jOjs7u7JgRoWCTi7e7X/fBw2+nRGRGNtHt/My0GhieMu071XG4Za2kasU5ZUYv7gTur1klF1pHpbBZb1zmuczmfvaceIbCLGsPFGSsMwfU5sjaTVUll/mh9aamEbw8FVFz27w9dqChVIH7onhc//uOxNlEM6dXMDunMVpcfYpCypfyaLMnz99U3lGcrBendgDRp0vwfJJ1P/CUjFIldHJ8VMKkfd44ukfGOd2qeuLWCHiN9eLzjO3et5LFon59bnMr1lQRgbikTiIZc/tArRy8/s2mpiEV3hyIHBrTbijKYOAYAsLn9r3x26anbl2MYMm5zFUn4OIZc32YsysJuSRxJ1DzK4jLDkdjPd55tWJrfbXZ+q76MTSYlz7yZGcbz6HeYrdPe813jz9y+nMucX20tEA0BAFoGZj46072qIjuAwDcuyXgeqZOndXTmZO/EutKs1CRjAIA9EPrxifZdelu9L7hjQykJwTk0spBGETJprcPa8x0TG5fk1RZnAACmp6f37/sMQZCEtyaKIBAERWMxh9ONINiTT371WrnFCyEWyN1FX486vXa3z+jwZvKZYhaVTkaTj+Sb+7X7WgY1DtuybOWx7nEKTnpkbXl+nvDDNu3RGfsjefIPO0a8kQgIRa1jM9+/tTbkDT7/2MaFc1jjskbi8SKOEKQ86k4QjIUTL1IPJvDPbQ4km9oxY/19Y993V5VmcZkAgJ4J/dm+iZ/eUw8AMDo8v9x5VqnkbK0qyJXwB7WmAa1Ra7Bf6J6gUUhVeYqKXNm66tzEO//HX09sqFEnOjzxS5+Yy8xu7te+/NmlQa3p7rVlhRmipQXKQDT2+wPNBpvr4e3LfEhgmVB6fsJwckRfIWGp2DSdzdulmXWTcTYVC0dBOB7v9oX5wZA5HC0XcxAEYDASjcbMvmBgxhwVcIQ0nMVCdOYQ2+H2cum1ObyzfTOmfn3thkI7hWTyEBSXT0YmkSgkZzAMA4iEwBgK4xhk8YRhAuSJ6R2zdjKOunzRJYViaRScax8rFrJFfOZjqypxDB2dsQzrzDtPd/3iG5tlImajVvvL187IhMzaJep9J3pvXV08G4qwmfRcAZOMouN296YC1e97J8g2b5VSsLJQaHV6n/3NwVuWF/z1Yo8YI5uMTpvHX56vePTuFU63/8n6iptWozBNmjRp/lmk9cCXjy++JAAA2Dz+V461Pb1pCY9BnScJ7G7/a3sbv7a9DkXhCbv7nyIJUl8nTYci0fgvPz5XX6PuMju/XV/GWkwSIBD0zKalPMb8pfmNo99h5sTJbx1s2ViTt6xItfCEC71jv915vsPhlPCYP76vweEL3lulpmL/kAXt/4bUyWP3Bl493haJxr69uZZHpyTPadKafnu4I06Dv7YkXyGhkiKY0x8EAOTwWJFoPOE+tKFGjaNw3+ULHqcVQRAAAARBKIoAAsTicafTzRcIHn/8iYUNWMjflQFgwZyfdXpnXW4URmSsv3kQRaKxU2Pjx88M7z3TGyUIAxJl0inq+sq75KL97ZMhUvTewowznZqJQBSdtr749LZNFTnX+igNOMwAAAxGlHQGADAZuWpcksIAAEBGSM6wlwRjSWVCAOAJhv/tUDtdwoojEAmGDKEIMj77zMYlxRKeNxj+4Z+PrFmWfU9NCbgaAgC91TUyZekcmdlzoW/b8iIpn/nz908/98iGB9ZXJM9JYHf7X9l9aVmxcuOS/ONtw52a2bPd4yQOPewN3LmueHllJhmGGSj1tGZ6c0Emi0zyR6Lfe/fYHUsLGWxKNo8JABi3uce15pc/PrdlbamOR0NJ0Hoaw+oJHmgZXlGoEPKYMDlOjWPnO8YvXh5//qlNsXj852+eVJbJ+Wo5AICAov2O8A8yRRqbh4ahbArGIeO+cATFYCgOwrGojEr/t9cOIQXKd++rd/uD75zr+tHW5WI2I9nhVpfvxU/PPbSxMkyKN12ePNY3iqNoaZGqZcYFYkTUYP/RQw2OcKRHb6OR0B3VeRwK/u6wVoKgaCx2SDsp88IvvHlMkM2XQSQ6g3LHqhIShwYAuK0sJ+GLdRN+O6VJkybNP5d0vNCXDxSBZSz6kNG+NEN8XDOzOk/x6YWB4r8XOLQo0ILl0f+SeenFrxxrK1EKOVRyBpd5YECbCByi4FhxluTVZC6BxcGlUhDkZgQOBWPhRKhGjIgnYzaSpkN8OiVRrWx5nvzg4BSbRhYxrixtr8owvthXliFOhMfcBIQU2nTYXZureu94+9mu8Yoc2bzYoU/O9JTkiJ/ctPRoMDo9Ou0XsDpnLPkc5k2IHUoOGYWErS7MoOLYR5f6cBIq5zEhAOy+4Ccto4+vKlyTK2vTWzqnbHI2vVDMg2BC7/KT5tyHTrWP9oxOy6USm16LokiiKAEgAARDMAQBAIxGs0wp53H/oQqvUMqLawUOpc55JpnEoZNwFJ11emecXhSGcQwZctlWKJSbavKWFCgmDfYZrbUgW9YDiAs7z5sY6H15qlPtQ/UFGStk/NFpSx8ALTqTxRsMRGMK1nxf/0QQEY9Mnfa5LAGvOehPhhKBlDSDRApyKB7GEcwbDcYJAoNRQBBvtg7JWfT+UfN9BYrbc6QHjrfdVp1vihMfj+v/3K4hrM7tDcWiBcUEIACYVHKGhFtXkvHElqW+YLhLM6uZtrQM6s50jI7P2qwuH4uGB4KRUx2j7x29vH1F0ZqKHABAjoy/sjRrdWXuuMc9qjcYDe5sOYcIQu90jtySnyFj0QkAOsZnjU7v4/WVchaDhpFoGElH14cvAAAgAElEQVTGYiAEdKF74huba+8uylonE1NR9HTX2C8fWFeiEHK5eIVAImTQdw7NTPXpXnxi8/SMXaM1t7eNvf7g2hIhmxmBf7myXMZirM6SrcxW5Ao4UiaDx6BoDE4MARsKcmy+0Bt92meq1SQEPt419uyWOiGLDs1JGpvL95O3jtaUKu2R0Kcn+rIVwntWlNux0LQ3zqLiPBVbGw2G2XjfmKE+T5wvYhJo3B4KTOtMh2Z0RMB9+tjQqRFdRbHqe1vqvnfvGiqfkSPjr1IrVqrlVByDruuvxzRp0qT5wpLWA19KPkcS/PVoW0WuDEGhazkOzeOfIgnI89KLb5YkSKy6IvHovP2TK5LAPCcJjrbniNh/7Z3QGOxJ0yEORtZ4bFIqfWLW/uaRy3VFGQzK/GCPG4SATJsOuUuLZFI6Y9fZntKr0wle+vTC7StLq9SSx0sz+Ez6pa4ROZM8ZfUYXF4W5QZmFCycOXIes0Qp3NM6eKxjlIShr5zovr06pyZTJGFSlypEISjcorO0TpnFDDqGIHqXzxMMi7n0jdVqOo1ysVf7UYuhkA8lNosIAAABIHgut3hsPDMvB0aRz5nSC6dx6n/nvU6enIjPoeMkCYuOIfCUwz1ktBEwIaLREBhWiDjbVxSLs0VOLt1wps+VI8km44cvdGlNjoEpk8vs3ray5PnttauyJOFofNjsfLmx3+YPBiIxJZsOrkbv94ipDBWdvTDHIEE4HmWRaFEiRscoMSLujQZ7DNYpl29tjuz8sP5f1pZ0TRgcbt831lUX8VlVPOaBgy3bG4oacrLANT6/0Nyd5sj4a6tyn7p9+de31xZmiKLxeP+E8Wfvnf7D7ouXh6YBgCry5MFQRMCmAwD8oUiLztiForOd2rs2lLV0aj843t4XAWVUSp5CcLJr9NyQ7plNS6k4RqRcSMCmv7Gv+d+/0kBBEZ8/9Pbpru9uruUzaVMBVzFHGI7F9w9MVTNoHSMzMAQZbZ4tdQUDk8avbKzxBsPLM8UYAsgkBEGgGBGHIQAjUIvWPAJiJVIWE8Wf2dsUGZm9MDnDpOLf2FAtYNETFx10mKft9md+s7c0T77/0uDJS0M6NtMLoC67ZXbC8d21VV+rLeFD6O6m0TOftNgJ8mql8Ni5/j98eOHjQ12DBlNX4+SR44NeMvzK45t/cNsKXywGwXBNhqREIaDdsE9NmjRp0nwxSeuBLysoAtNImM7mWqtWnBrT1+XI9jYPl+WLVFz28bah2sKsRfNoF+UmSIIipZBLJas4jMNDU1k8JgmB5zkODVrs/JviOITCyKJKCUVgHo2iMTsxBK5Ryz473+uctmZLuD87262mU2fMzvdPdLyy8+KHbd1NHZNWFtdisTDIJAXvH41r/18iotCEFJoXj65QZ7y89xIZQ+VCdqKvXtp14Zk7VzIpFAxGPXCgLld29vKY1mivL8jQ2lzOQJhLo1xH66F5zBsvKo6tyFdxaOTPLvSNGM2ri1QyLhMCAIagXC6nTin2E6FWrWXI7FRw6WQMNbr9CVWwubaoXC3rnfGTglYMQ5NPfyEIhiAoFo32dPeUFBUTKBSNxxaO4H93Aifef56TDw3HREyqPRaIBIj+GWs4FgMEsAdCE1ZXnEF5YGXe8bYZl3YWQSBuFL5rWdGnp7tDJChbzC1TijK5jCo5f3txRiAS6zXYfn2up33GQsFQJYceixNDTksRR0hFr6wyE5sGqcLAEfJKqCwwJ1nJCMkXih/XzNxXnsWmoZ5A1BMM7G4e2FqjVvHZAID24emxGfPmtUViCu3zP79/60kACAAEHHpxpnhNRbaUz7zYO/Hrb2xpqMzt1MzuOtv9m53nTnWMjts9OXwWzRPYGw4+XJKdoxCNI0DTOvbuvqZff3TWSkR3rKnIlfKIudyDxJsPThq7x2YLVCIEhZOBghAA5qAPisGf9k7cV55dlSP55oufwTD8k0fW+0Nhhy8QoqCr1TIShgAACIIgCAKHMZc/3GuwoyRMFwii4diBnsliFqV1yvDSjo2Pr63Shz2JHrMGfZpB48PP7xqfsTr9vpBSosqXrlMI1HK6Y9qlmZypLcw2eQJ7Osc7T3W7nD4LjLY29tdXZFcVyzV2q8ca0gUDAhXv1a9vYVAocQKoRdwcESetBNKkSfP/J2k98CUm4UDKIGPLs6SHhqZW5SmaRqbKVcLBSROTgos4jP+WJIj/N1dUn888SfCHoy08IUXFYmXyGCc0Myo2A0tKgoMtXBE7hsAdVksWk4HeeElwrW5BYJhHI+scbr3D81B9WY6U98mpzosXBk5cHjHY3Gsqs5/bsQGloW4O/dlNJUUSwfGesZtQsCxBok+EFJou5KpTq949dvliz2RpjnRSbzvcPHT/ugoKjvU7zGVcMYdM2liWLWEx914eUvFYeRJey/jsjShbBq6tJCVcxobK3BwR91TvBI7CMh4rcXJCFSTch7pm7cNm14osMYNMsvmC0x5fRaZ0y4oyNl8yMTqScMkkAIAhCEYQCIJ8Pn9XV3dZSSmDSscW1JsD//3ZCwEQjsfmedHCEGSPBCologIJLxqLXxqbPTUypcVJ9+bwSQTJFQvH4qjRYt2xuvzA+T4mjXLnipJPWwcffnWP1uSg4liOmKtg02sUAgoZ2zVmaNHMfNo3YfL52SSKisNY2IaEKqBjqITKSmoDKZUZiIVfbR5YkSHJ43PJCAlA8d8e7997oXNNrjJHxTvSOnSsfWTTlqJSDh9ABArP7ah87kZBfO5FAqvLR0KRx7cslQvZy4pUd6wqubWuUOcLVGaIhrTG9y+2I1p7Uzh0bljXO+wwhYlMhQAwaB1G3x3lmdFQWMShE4kBAgAAcL57PBqPuwKh00Papzct5TOoIJH6gtA+7R1/oCKXS8EPtvTBEPyrb24Rcmn7Lg3AdMqjK0sZOI5ACAYjGIwScWjAYPFHoigJ7XR7RsdNRqc3X0DffaGPS4Z3bK0Kx6MslCyiUNv7Z/71D4de/PB8NBav21y5pihLUqzixoNjRvOlpkm91cpgsF9rG+HQyatzZK88vY3JoJ460RbNlNlthukpZ11x1qjD/auHN8G5gmIac0mmNDetBNKkSfP/N2k98OUm4UDKp1OqFcLDI1NLsyRN41N5Yv5Ln1yqK1IxaeR/UBIk/q7/dx+yfj5XSwLRn4938EVUJZOlZNP3D+i8kQiDjMMoIuIz73r/FFXMKWWS+nWWTB4bQWBwXVuykGt1CwrDUhadTsGnnJ48KW9NWfbIpHHrypJ+CGyvzB312Cxu8NyGmmIh34uEb07BsgTJ3hBSaNMhd3mxXESlfXyqKxKNnekarytWObFwopIxBqMYjArY5KpM6WctA40jU3VqxbjFeeM2Cq41UnIes0gp3Hmp7/zgJI6h8hRVkOpJyqVS8kUcPyAu6i0MGPL4ox1TXmrUBcMwBEFxgoAhCIZhEgkLBIJa7VSibjE2V28uGo+hMPo/mC2JGsDz5nyv3VzKFcIQBAHAoOA0EobA0FTMSVij+4anlgu5n+25GHUFLw/oxFzGK/9yR8uA7vDZ/o0l2aWZkj2tQ/+681TjkE4m4nxqsq/iMMw2/xOrcgr5vEGT4/cX+hyBkCsQopEw2tXJJ4nqY6mbBp16q87uqczgJGKKzC7/kMFE8QVOt4++sbdZa3AsqctcnalikHEyQkrUPosRsTgRixKxCBGLLXA1TXzAk/rN6vJ9dKrrmTtXUFOS5odMjg0lWRWZ4kq1rLYqo0wl1geCJILyygMr7y3LeGf3eVvUz7B7ekZmmvonX93bdLZrbNbiopKxGYvzw9PdCgn3cM/Y5vIcCMRZDPKBvqHRGc9PTrQvZdEqc8R7L/a/ffDyrXX5K0oz3L7I6yc7f37/WjaNDOZa5QmEPmgbElJwFZ+9v2f8TxcHaiUsUiz24cmuqizxrN6VlSUuEPCaxw2PvHP67ffOBIOxSCxekCWgxYDF4CChIbZc2jHsDGMUJ50UJJH+dOfKBrW8KkPUPKTde6Gvf8IYpNA3l+d0zZpIKPrgumoZn3VPYdayDAmdfJMC/9KkSZPmC0vaX+hLTygSGzBYswXscDz+euugjEl+63iTc8KVL+G/9ew9CX+Mv+s4lFwVXV9JAFIubfH4/3C0+YGG0kKeoG3afGhoysuiorH4mN4+eakfJ8dX5uc8uLrM6PavKcwgY8h1b8lCEn6dlBQ7l+QVk6ZD4UjsFx+dXb1M3Wqx+r2xh5bkL1FeqUOUqNhq8fhfO9a2oSz7hlqRLuyNfoeZFSN9/cXdNCqpulT17PbVieNJy5pQNExCsM5x04GOkTWFmZWZkq4pU4VKLFrgW3pDIQBo0Uyf6BkDAGwoy1k210uJ27EHQh92jgIAKpTCd7RGdTgY90VWZEliPmdv6wUURSAAAAShCAIA8PkDdodzx45HsrKyUi8RiIYBIP5BT60kC509E2Ig9Zx2nYlLI2fxWb1G2yvneyQk9HjL0BK5eP+F/j98e/ttK4oTP3uyXXOxb3LniU6T0xuNxmlKtjdLqrK6JBLuT7csX12oSrxbo9Y0ZnW1TZsBAEsUwjwBa6lSGIiFqVe33OT1v9eleawqP1Eeocdi3H1uKD9LqOLTIpFob79+78X+H35nw1KhjItT5jmZJki0KjkTIvEoQRAk5IoIcXqCr+9p/sYdtWwGGQBARkgEAGa3b8bprVCKCIIYdJhLuKLLev3xIcNXlxaK6JTmkak/n+6oyZbmCNgZEo5cyNZbXJMGu87o8AXCpzpHCQhqNHgLaRAMQXwG3RD1uU3BWS6dPG5k0ykanTlXwZ+xuKvy5DIhc1lt/q79TT97YvOg1jg4YTI7vRaXL0LF+UxUzGVSSOCvPTaG3gR4ZIvLm8Vis1lIiM3m0MljRg8AwNE+VqQSPrZ5SXGukEWl9RjtDhAoFIg/mLEWQNChvkk2FX0wL0NAJbcN6g41DtUvzynIEvdozL840VurYm+qUn//1qXUm+UHkCZNmjRfCtL7A196ErmwIyZ7jCDkfMqLzWNuO8TigQeWl31yprsmX0nFsX9klwCa+/f6LsSTl6bhWEWG5L0z3SwBJY/L/cnedo/Xu1HKN48bHm8of/S2JQIUP3RpaHlRRt+MWc5jYQh8fVuykOQz5kTPpF4u1XRoSaHilQPNXiLWZfG6PIHaLElqwbJMFjtPxvuose9Gxw7N6wohhWaK+FZX5wwbzSyYVJApAAiIxqMUFE/41ZBRUmKjoDpT9lnL4E3YKLgWCh5rTVEmjqEnesbOz/VS4jkEFUOXKoUkFD4zNnuue/zStG2VWoKg6EwgjnissUgoETgEIADBEAnDMAwbHRsrLCxMFikjAEhEmyyMIPocHCEvk3RFFyXnvCngS/XqMbn97mC4UMpzBcOHBqeqhJymQe2j9ZVBGIBorKhExaTgLApOAJAt5dVX5HzrrpXFWRKnPzSts66k00lUWDdu+dP5zkmjg4xjWSKukk0vl/I2FyhrFIJwNDbr9r3a3BeMAIMnEAJAQMXHrK4mnfmT3vFtBRmJagMAgJf2Nd1anrulNFfJZpMI5Njlka89XCdjMD2RUCK4KBgLxwgChf82oImpkpgGCIzgCIYjpERZNIcn8NqepmfuXMFnM5A5X6NgNDJucaklbADig05LFoPlj0R79Pb7yrOpOGLz+j9uGvjxnatXFWZmSfg8Bg2FES6dliXhV+bKy9QSOp38+tnuqM1Dycn+4daau7eVc3GGjkz6zdbaN799O5OKByORp+5Y/uI3t66uyBo2uwaGpvo0hlm7Uyph5avF1aVKjpy3Y33JfcvKfLHYrgk7E0L1HscTm5ZWV+SGGdSH15etkglFGHrkcAc3FH3+sQ1ao/3fHlnrjsS90ZhIQFmlVBmcvrfP9pydMNyhFPRodU2No/5gqDxP/vA9NaUyqdEdbBubyeBQ3vr69u1Vagy54QU60qRJk+bLRVoP/F8gsXi9PGUc9PmeKM7VB3wPLi3unTXWl2S9c6QtIQk+Z6k0b9l94yQBhYSVKEVvnejwQrHD3dO2nnE/BfvR1mVcMaWYI8yR8SvUsjf2NadKguub1bAoyebNu1CiV3tMNgaZpOdAo40TFG9wQ3n2qdHZMjkfv7qG8Y2OHVq0E3hkqiHkXlqYkcvnvXesg0rCM8S8eSdjMAojxMpC5ZTZdaZvgk+jliqFNy6jYCHJ6ZRUBTsb+3EMUfBY0FzUu4RBrVUKpVzyuMmtc/rLM7k1MqGbJnDpNBAEIAgCBAEAgGAokVvcdvlyUVERmUxOnaipEUR/VxUQgIiknAYttjkwbLQrOAw6jv318nCFlIcSxKTBliPmTkyaX3hso5zNsPmCrVpDMBKFICjRmXkKwbYVRR617PHagqkJS2Pn+Nr8jOJM0WdtQ195+bNxgx2CYQaFJGbRM7jMQhFnnVoaihD7h6beG5p58UR725Tl8NBUn8m6Qa2gYqg/HG0bnZ21uR9eXZ5o0n++d3JZVWaZXJrN4grmgoscoaA/GjYH/KaAN5GBIJhTNan7foml/4sfnd+0ND9PKYTmvhWNEYMGe4lUQCORhl22Eq7YH4mf1EyvVytYOMXpC752rO3pW5YJGNTkj6T+inD6Qgc6NOsLVCebh0sqcpaVSKAYOu7zv7CpplIhNDu9h1oG/+PxTTw5PQTH7P5ISZ5486qCh7dXb6orkEs4Nl8s/P/YO+/wOKpz/5+Z2dnem6Tt6r1LtuTeZcDGhd4TOgkkQOpNcnNzw02DXCCEHmoC2NgYA8ZNcm+SbfXeVytt73W2TPv9sbYiS7ZDEtu5P7Kfh8ePdjXac+bMmeX9ztsIsLoo04cRXw5ONI673K4Y5rRqDeovCPIOmfB7q8otE9497QOvf3BCJeHve+7BmgJVx6jZE8P1cjFHzODTrCc+P7Wlc8w0OJHoNzsdHoNYfP91tQ0rC2UKnskSaeoxjppd9y4p/9HGxckIpRQpUqRIMYtUvNDXh1AcPz5qLsqQCVjMN1r65mnkjZ3DS7K0B04P/ec9qy7Tp+yi1v+VlQTgwsChe1/9vHHI88W31mQoRc0W15J8Zel5U8wTxJ7bcuSuhmpLILy82MBkIOBKz+SiXGpx4iT54dBEtZifLZV0DFt2HO9dVV/Q4w6uK80szZBOH3YtY4fm0utziinWC9uO8dnMtbX5dSWGuSu2v3Xgdx8cHolidy0t31hXbPKFEBgu1afnSy+S53rFmbmdPCHs5X2nAQAN5bl1eRoAAAWANxx7+XD3qhJtiIq1jLshABZq5XQ0OtR8GKYIBIZpABAEhmGEIAi/P0hC6BOPf0vA5110b/jjYRaCQgCwL3ZNk5FC2IXFhWbpAUcQm/KFavRpXVbPrl7jsqyMA+3DhWmyE13jd66oSHb5TTLlC7lCGEWDdCFPI+GP+MPvjljuypEUiBQIDO0/M3SwffQP246tqSuYX6pvm7SfGbcqBNw7FpcW6xTXV+TDENRh874yah44PXFDhdYSDo97whIOi6YofxyXxGL3LK2oMqQDAHpHLZ8d73nkroXFUiWYkUA8EnBLWRwZ+6+ejX6fEwAAQRBN0ygM4xSVfN89GfrsZO+vHlrLRc+dOIbj7VPO4gyZhMMO44mJsF/B5DcOTzbk6RQ8bpSI//f2o9eV5y4rypyVjpycwKmhyS87hh9vmKcQ8BY+8fItG6o7nXEWB7mlWq+T8IkE8fGujtvWV3LYTBmDM+jwVWmVXBQFAOAU3W93Nw1OaKXiT3smJnxhGQ+1BGJCCJzuc6CTFoqmY7EEACBHI7e4AjWVuqkp345ff5MjYnVMuKLx2JGOsbvWVQlo1i1v7Yt1m+JxfEGlYf2SkgkpZ7NaNmL2chDWsNXTa7RKeOxf3rYybU5riBQpUqRIMU1KD3ytmM4lICj675IEF+WKS4IYkWAzmACASXfgR1uabl1esqmkoNvjODHqvrs8V3g+qy8pCe5uqLYEI8uK9CwGMm36XFUutTihRKzd7OEhSLZMlMDJ3245sqquoNcTlAo5t5ZnT7cxTkoCmz/0auPZf0kbYwiCXKbgwdYRBIIev3mxTMiduWJGm/fBZ7dtWFJcXaT/sKXPK+Tz5CJ2PLFGIW4oymSjVzeCYu5eah6eOto/EYomNtQWUABu6jd/e2WphMcGAJAU3Wg0dk35Y9F4qQi1tZ6AYSgpCRgMBgRBOI4HAqGuoPjbtzcsKs+eNdasRtTJH6bfmSkDpn++aOaAViJIE3Jfa+5ToIwTfcb1lXmAoI53jv3i/gYwB2cIs/jDVn84GE204PFHc3SFaZKZBzS1Dh/qGP3DtuPLqnNXzMsFMN3YPX6g17iyNGv95iUcd+hPzWOaDM73l1XmyIQQAANm1+bntog0aZVZKkDT/jieTZAbVxbLuIIcmVjKO5f5QNPnipnOms/cBbd5gy99euLmGyoiRELGP7czXZ6YQsYGAEAQFIonuAjaanLXZsqTUVoDk65j3RO3NZRImRyKppPp3eccDgT9QVM3DcAdq0pRFKZp8OaulvysjDZXWK1XXa+UpLOZb35+6lubFqaJ+cNO/6lRi0YhrtYqIZru8PhbRq3dEw43TvixBIrAi7MUmQL+F6d6eSzm7QtLC+Ti7Qc7m9pHXFjslsWlR9tGQnjiPx9r4LPYXwZ9eiY66HHTEcKOg7A/LHAGb6wvXlRhAAAYseB4ANNTXINY8Oq+MygM37O0fHGBHqRIkSJFisuS0gNfNy4qCQrl0t3H+1749o1ahfhfKwmSD24BAJEY/vaRjly9PE8jE0GcPYPm2yqyxTMkwe+3HqkvzbQT+C2VuRI+B1yFycxlVobx9JtsBssZxMz+UJZUiBPUb7ceqS3U8risHm/o8aVlMyUBACBPIDs7ZjnQPZ6swj53lKtHn9+Vy5e29Juazg5fP7+grsQAZixa/aMvvfCdDeV56d5w4qkPGkMEsbm+IF+uSOBEqUp+tfOML3r52sat+zrHzMH48gL1rXWF00cCAEiKbjJOHOybajG5b4YsTIiGIQhAEIIgAAAMi7o9/vf7kPIc1eM3L2mYlz/9mRfd4dNXdpZbACPiNA2PhXyXcQ7ouKyzA6brK3NPd5ueuHmR7NILRQNg8oaG7Z4YQTIRWCXiS3lszYWVRhvPDvdN2A53jhw6OxaN4QiTgVdnc7om5tdlMhSKB6tzF+dpaAA6jPYfftD46kPrlxXpd3WM/mHb0afuWdI25T84bo/GaBaLTuNzV+WpYYQqlMt0Yr6cx54uWzRXP3uC2MufnHhs8wKFmD/kdxWIFQRFnRyz5ColKhGfBqDP5+TD7KNjlg1FWSI2CwLA4g89v+fUN9dUitlsNV84HXdE07QtEHpl35l1lXkL8nUAgGAsvq2j0xUhR4ORVfk6CocOhWJj+9t/ePtSCZ9z3GgfsLrt0QSPzRyIk5wIRmUIHk1XLixJPzbkPDRkuS4nnQlDbaO26yqyDVLxlMN3vGvcG8CkUoGFDY+3jq2dl+9EqUw597Njg/5wLFPJ3TsVXiUXVhQbDg45712Qo5JwYoAgKIoLmBVqZdeE/Xi/6caa/GvspkuRIkWK/39J6YGvIXMlwbbmrrd2txZwBft//9A/IAnAFTXEp0cPYLHffH6cpKjvXr8AgeHP+k13VOZMSwJvEPvtR4ctrsDSZSXXUhKAOQ+Yp39OFh2ScdgUSb21qzmKkyvnF3S5AuvKM8szZNN/nnQU7G0bfnbn8Z/fvGx5xewH2FePpGEHABCTrDc+b0Yg6ImbF0uFXACAyea9+5mPvvjt/VIhN0rECZLaP2j8onkoxOE9VV/kCEUEHFalRnn1VMFlrl3LqLWpaxQniOsrc+tm2HB0UhWMG/98pGsBZkIQGIIgGIZhGAYAYFjU5fFtHWIqpUIURTcsKi42pC+pNrARZvLx9lx88TAbQcGFRaXGQ74MDn+6WVjyKhdnyNko8lpznxJlnOgz5skl/WO2O1dUXDQWaybTpxmJ465wNBSLj7sCWQqRgM1S8Dk8FkrRdJRMcBGmzRM82jn+2penuyfsJEEy81TfW1RyZmTq7LjV5gvlZ8hyMmRPr18AUeDn7+y75aaaOyuKZXxum8X989NDtDN8R02mXMyc9GDeSDwUx/3RBAJDbAYi5jBz5SIln6MR8XLkolF34HS3cXfzQJFeWZ2jgpXsCkW6I4w5AhGjy1+qS6tUy0dDnkye5It+Y7VakaeQAACs/vB/fHxo/byCBEpVp6WrhTwaAEcIc0ViRrPzyODknYvLNFKhXiI4aDLJeay7fvRhMFNZlykX85khHB85OmouM2i5rAyC2pSrrjKkV2uVuwYm/zRuxc0eSCF4uFDHRKnjQ7bqdOmRbiMgyGX5+nSJ4K0vTzu8oSWV2TQNms4OYzRZWKzVyXl79/f6ojGlml+ztGh4IvxEfVEiHHvxk5MmNu/pdfnzdOkFMhmLwTg2YDraN8FGkcevrXcuRYoUKf5/J6UHvp7MkgQFUkGcij/16h4pAf8DkgBcaUN85ujNw1ONXWMPrKomaHrX4OTSzIyyDBk4P+KJbuP2Yz3F5YbVBbpMhRhc6ZlcimQZx7mrFMPJfpvbHcBqDOl9RvuO470r6wp6PAERn5MnFarZzCJDWteo9dDg2I4DPd2jNp1C3LC0+Cc3Lbk21sn04vT6nHkC2bSjoL7EcLRr/Ievfbn32QeT8qDX58wWiOyByI/+cmDY7hPrMn7bUBOMxWV8rkYiuEqq4PLXrmXEvL9zFAB6TXnOrCe7gQj24YcfkDFsWhIgCEzgZDyRsNpdFUvX33Hdgsazw21DU01nh5dX5TTMy59XqJv1+TM9AzPjiIYCnjhJTvsHpiOFZjoHCtJkLncwGSn0N3fg3APMvpA3ErMGwigCS3lsBZ+rlgiSx1j94d8OmPaf6H7luvovjvW8uu2YIUvpxhM/Wr+QAUGfdQ43j5glUTh+p4MAACAASURBVLpuTf7K7KwsuaRAq/jvPmM9hz1pD3xzRW4ySyE5aDiOu8JRRzjqjsRsQazV7PJGYiOeYLB1VFiTI5l0xXAimp1hEPESNC1nMlhcJgLDOVqmgSOXstl/bhu8p7pwVY76i46RN5paSamIAQMYgoVsJgQgAEAMxyf8ET1FsJUyBIYgCAoQ8Sl3BCep0f3tb/741ooKldUa2tLYsbo6t7Q0o9nia/H6/ndelZjNdASxfQOmvlDEFCNcVr89FMiTC6vE3B3H+26rKQQUvb9lkIOiJbmqV090AAAEISKzQL2mOsvj8BzqNt+9bt4n4/b7FmsLeEpfKCbmsv1Y7IU/HwrIZfueuCFTJnCHsFf2nQYAzN08KVKkSJHib5LSA19bHEHM7AtV69P8scRf2ofX5Kh8OLbx5x9OS4JgIiJk/h05dn/TDPq7mGlqe0LYi3tbNi4t5EPso0Z7nCDvq8kXsNDkcA5f+NcfHiouN6gE3FXFmcnWBOCKTuaixMgETV+8qr0jhJl9oWR3gl9/dLi2SAfBUE8kemJvW9+4TZcuWVyTLVDyDg8HfntDJcpkHOgZvzZJxjOvUe+FjoIslezF7cde/d5NdUX6pAcjeViUiJ8ctLzR1CoX8TbVFkqEvGAsIWYzr54quAz0hc0KZq5YKBTauuWjRCKWdA6ckwQEGQyGGWzuLXffq5WJsTgOI1RLj/l49zhF0XXF+plxRLMihZK0uqy5IuFIIFijUAEA7MGI2Reu0acBAJKZA18099VlqfpGbP99f4P8/IL8zXvhUgeEYwlPNOIL45PekFYqkIp47wxPoWTiZL917zfXAgD2nB587J3dv7tr9ZDRsaWpfdji5rGZ375z0X1Lq3ec7Gk12c8abVaVPNsdkGel3VucXaSWGxRig1Iy/T0+c9zPO8eeeuFTQU7mT1eXrK/K+fBk+5H2yUWV2RCKZEj4mSoegKBIPObyU90Wz+6BKQmPsxeLaYYni0qzH6jNo1CyPkOtk/AtgYg1iHmCkY9P9txYlVubo5Hy2M0WK0Uyvn+8T4pFe/a3H33vWxKa/cbnzU9sXsTjMSIJvNvum6dJp2h60OYBAMQgaIvFbXb5JsbsMpgMuAODRgczhAd9GIvJyNEoTHZvLEEsqM3t7ptc11C5vjYvW614Z2zqQOtojU6yKFORgQo0MoGcxxGwmVNYwGmP/WDryd/eUifmMhu7xq7NLZYiRYoUX0tS9Ua/tvBZqC0QQWBYzmPnK8Q7+yZKFNKNSwvfPdq9s7Hz5mVlnMsWIZ0LBMAVrP45s/B/soHx243t2QbJykytmMM6Mm7LlAqTNT35HGZVrvrTpo5FRfpOq8ugEDFgGPoKNtk/CQNGLrU+PBaa7E7AQODaPM3rO08+89a+KasnrpIuWlr64NLSdLXAFab/Y3MlX8yq0aqKdcotJ3uOXOUGBUmm1yTZ7HYyHrxpXgmKIu/sOdMxbJlfrENlaJFEOX0YSVPpMu7N8wsVfN7+7tHPxuzlchGXzZzyh32R2DXuVAABoLmwWQELZWhlIgAAi8XKy8sfGBwgCDxZOQeGIASBGQwGFg5bIN64N0zSNBNBSwxpSyuyWSjS0jf5w9e+9IWiPC5TKGTOFQPdXmelPJ2mab1A0uqyClB03BWQ8dgSLrvT6u4wu7gQdLhzdHjY9uRNi/K0iulF+5sb71L7kwCEgsdPF/Hy06UkRR8ZmToRdH3abV+Ur+ahiEHIG/cF+yzu/7xlWUNNniFdeqB1+Ju3L0AT9Evbj49NuQ+dGkoEY6pATCbnO0zurS297x/t/MOelme/OPnWwbb3j3S4gpFoAuexmFgc//JU/7Nbj8y/c3kVn3loxFGZL2kozKvO13x5dmjcas9RiedpNAEcS2eLhpy+Wq3y56trVEIuR8BxmBwv3LxYncZZrtOLOEwAgJDNZMPQzua+n21aXJWZIWAzh4LuugyVE4s1DkyE3QnK5RVx2W0D5u/etFgi5CZwalvrSJaEHyfI3T1GAQq7/OFem++PuzvHnW7Y7WPE40yKcI56I+E4E2VU5amNdm9WZprbG5IL2b/79vqV1dkddt/hCQcWja8rTnu4tnSRXlOYIZPzuU48HCYTZbK0CU/guX2dbUOjHCbj8bXz81TyuRciRYoUKVJ8FVL+ga8z8fOR0CwUmekluPvX23Vs1sc/v0/x91ccAl/BGPrqzBzdFcKe333qtpUlFYr0QCzxRb9pQ7FBeN567rW4n9158uF18wZDobsKsziM2R3ErhIXzTBOjhvDyT6r2xOMcCD4Z2/sISjqZw+sVSiEh0xmrzt+X11BYboEnE8nICmqZcR8oPuqOwrmrslwwAMA4BKM3+44lCYSrKspLDAoAADJe39mCI0ziP3gz01Gd1CTq/vd2loUgb1YTCO+po6CmfNvnuMrCIVCW7d+lIif8xIwGMnc4lg4Gl++bgNbLPZGCAmHpRRytRJBNI5zWOiB1pED7UMyIa8sSzXTXQAA6PY6c4Wi6YvbYrWMTAWuL9VTAGzrNBr4rDf2nq1SK8cmXX/5yR3g799vs47HzgcpcRms5K+GPYHHPj3hsmI/WF81FsUO2rziSYdPp7wvTbqwQGc1u9/ec/rxe5YUyxQiHhsCwOT0//RoVx2H1T9iHTA6Jp0+uzesSxNnSIWadHGeXsljM7utrqODJoqiXCMuLJ0HcjScEbNSxFu6uOTpBWWnTY5tPv9SGGk82Cnkcf7jnhUvtw5dp0lfU5YFw1Bjr/GVptbVVXlGZ6g2V7kiU12qS+ubcraNW7c39922oKRYq9QrRAN+N8DRYafvzbPD+jw13+h696NDYgHn5w+v/e6NC08OTb52qIPGCaGIAzPAxISjdcIVTRAxsRgPklwqVKAS487oogVZ9VpdgU4pkfA/PTM4aHad7hy7ZVXlvCI1l4V8MWBzR2N3VuRoFBwVhy9lc8H53JhiiZKk6NMjU1tP9U04fU/eUL+iJPMiq58iRYoUKb4yKT3wNeeikiAC4g8/vxPy458+c99XzyWYNm7+Xqvo8lxGEnzWN1GglMzXKvp8oU+7jUEc7xow3VxhAIDxL8wwnjWiI4h1GG3zsjL6jI5DrSN33VDjpCK7euybCw21WkXymGToTrJBQTLK+epVI51bJx4AECXwMZ9HIxAa7d6dh3uEHM43r6+VCXlgjsaLEvFDPeZ1L+3ZVJL21A3zczPkR0fNCAwX69IKZUJwTZi1wrNUQf+o8eCezxAESSYNMxgMAGgMixEkbdFVLMnTKYR8XwjDEkRemkQl5sv5nBiZ6B62v/F580dN7Xeurtq0pLS2SOeio/kCKQWR01d2e/vwsVji5xU5H3eOVqlkXk9o/W8+WJ+f+eYPNqeLRRed299k+viZ0UoRPMZD2TQArzX3UQn6yKDt1TsXmXzBVxrP3r+kXCIWvD481WX3ZBqdy1bkMxOMIrUsTcBTSwSDvtD/9hrvzZFViuUCzjlRYbL7jDav2eUfs3j2nRmyugJRnAiGo7o0CYvJMHtCcYLQ6KUwDsQ6WdfwVCxPyx+35qolMAwDIT824e53e9lMVCsTjjt9mdka46i5rljTOpmIB+znTgMCEAAcFJUJuCqdYGDIFRCLAAAct48u0hNNPQRBogyEUHBUEkF5pkpAUiSXNTFkS5AUzEEIEZeCIKcvIWFR1TU5D9fm5EpkEYQIBRMDFu+RRIi0Boe6TMpSVbFW7naHEICuKlDxBRAC4HQeH6cIJswAAOQKZDAEHegZOz1iBqlUgRQpUqS4cqTihb7mJJvs9tncUi6Hz0LzFeJdA6ZShay6KuOdpu5P9rRtWFQiE/CnQ3cuD3T+3yvoKJgZOMRjoeX69Heb2tPTBVqhMJIgPu837fcFLe7AfIXoVOvwbQvzTp0ZG+ifinLQLJmQw0STk/l7rbS/l5mTnDUQn4VqZKJhlz9fJSvNVf1m25EeDK8SCtotni6Hr0ApZjOQZOhOr8+ZKRIvLtSzUMbW8z16LzrcP8NcMQAAQGFExuWOh/0IG9lUW4qijC1NHSwU0SrF0IUXFIUZWgXPZrQuLNQd6TPu6ho1C/ldIeys3evAYupr0tUYuvCCamdGEPUauWzODw6aywU4mwElJQEMwSiKkiQBW42vW/B2s9uL46VqBYeJWvxhRziCU1C5Pl0pFTh84QdumG90eJ/fffzIsZEppz8eJ3M0cgBAv8XtxKKjCYKRIKJxvF6nfOqt3dYh+8tPbSrLVEWJOEGRBEUy5vSxvjzJc4nOEAM0AEyEgRHxbqt70h9Zm687OWpflJP+RUvfmuLMFcWZaTz2EqXkL+82VtRqvlFdUZ+tJik6FE0MWN39U64pktAQUJwkw3EcS+A4SYn57FyNPEerWFiWeceqSrVSFIrE/vO+1f/94NqblleYeWiWkEPGqYJc9XC3yW8LiDxhVl2+0huhZEJPt8Uy5SFDCQGPaw6GmJ5YyOYn/DGn2U+6vSgMEygsopkxnkTgDy+p0jNgGqXZwyTgDFpoizfhi8JTHgYCc1hoRUGGAkVLC3S3LS2XykV315ewOSyXXGAnKKkzzGIjddnyDIEgkS7nRLF9vVPNPVMcIWo0uvbsavO5QoYyPYOG+8adoSB9Z3VunkqYKZAImUycohAIzhXIRiY9W072/GTLQRGXvbI06+4l5Vfj9kmRIkWKf09S/oF/C2Z6CUJxfEvPUJZQ6MciT/56B5+JNr3wSNJLAOYExsxkrs19Ba3wmaP7ItFXGs+sX1yQJZAseu4LZRrv6UXFB071P71pgQ+KFYrkp3pNn8wpOgSu3GQuxWWWKIaTrRZnBp+71Wxs/axbKRV+Y20Ng4W22bx1OmWF6lw10mvpKLgU5/qm+UKvfnoSgaCGefnT3Xanl3H74a6OMashQ5ybmfHMrpNmnH5qeXl5ltTtiasFvGuQanyprdUyPLXzeN9z+5v1MsEThSw2Qp8rNwTDBEkGg+F4glh8y+YYk9tj9kdxclVOBkFBHVanAEJ8nuBtC0vUUmEklhjH/BICPT1gGpp0f3GiryxHLVQKb19c+rrFFZ10fXtBUcAXuuHXH6zUqQ88/8jMCYQSGANhAJoGAEAASvbX+5tMOwemz8sXjX/UMXJrRaaMw33jSG8Mw17b2zL08neT+qFz3PLe4dbf3H393GwTfwKPxfBwPBHDCW8kliDJGE4CAGAIwuIJHxZvbR196pbFOqWYosEUFntpwHS9jGNzRooV4jJ9mjcU7bBZMRI5MDAx4osEfBQAAAmHbXHi1+ursxWi95y+B3PlUIg+0mM8OjxZZ8h49oNDuUtqHq7TPrisesup3tc7x5+Yl7+hIuf9/W2/336sZlnxzSXaUm16+4htOBgpUSuK0yQfd4yO90+2J3CuN5Sfo0JoamTYwmbAVnckEMKYKCMSjQsFnMKKDNxLSEu1AIAfL6m02NxPvrqncmXx91aXCdhMAEAy0O7k0OSBnnEEgupytQ0VOSBFihQpUlxpUnrg34WZkmDfmHF7h4mIkDdWqL790hfTFYfApXv0Xso+u4KSAMwY3ReJ/u/uU+UF6me+6LmnJqt7yvHj6+cVq+XThXGmiw4BAG6pykv2tb1mquCiSxQnyb8MTvCwxMo83ZDJeahtZGl1boKkzjp9YgHn7qrcWZ2Mr1lGwVySzYynO5fNVQV9RvtzHx1+bNOC8rx0eyDy+Dt7zd6QKlf3eHWeUiy4NgWILr+19rYPfXywuZrl/2sFUhgmCDIQDG2+5dbc7GySog+YTAO2QJfV1xbFc+z2uppCCYPJZjIMaUKtQKCTimJknM1gRaLxX2w7ahp39JmcEZo2iySv3Fj1q48PiHFo33MPaRQXPISOEnE2gwXNeDnztxfdGHPFgD+W2NIxekdFtpjDwoh435T7B+81apism5aUblxc2tQ61GtzrK7PL5WnzfooGoBkn2BwoSMoFEuE47iYw7z3V1tLSvUFOiWHhQIAHMFIiMv0Wb1FaRIOEyVpimCQUAIGEHna6l2aqVmcmdHYO/Fq49kX7llTpVcO+kIv9088UqgcG/cd6Zt4ZHWNRiJY+uRrm66vGvDi99blnpp0FMm4AIApm8825aupzj4eiFQJGaOW4GAsVi+THDjW29YzQeRmZEgFyxTij091p4sFj66p8YcxkZD/0LLKUYt73ObuHLUd7xpT6UW3LyhfP6+YBiBOJigCWvXfb4a5ile+sWCJVnv+BhkDqdCgFClSpLjKpPTAvxFxnOy1uWVCzgQWOmgLuyedmwv1AgGcLELa+PuHk6bPRe1d+rwVMperJAlcIewXnxx79dTYGgX3kY3149FYmVayTK9hIkjySIcv/LO39/nD0bWrK2+qyBHz2Mn3r+x8LsqlJEGUiLvDCWcAk3JZNEm9/lkzCeibV1TATLTd5qnXp5WrZMm5zXYUUPR3b6hPZkRcG+jz2ZnTbQqSzcumm+/Of/SlPc8+mHzZ4bHaLeF3D3UaXQFNnv6himyFmJ9UBcnM3cuNdNWIRKPvvf8+jccRBAYAMJJ9i6MxBEHv+8Y3BAIBRsTZDBZBUodMk2+1T7ldvlqDrNagKJXJx+y+YDyeJRPrZSKCog4NTG6qzG1sH/lg1Lz32Ggi4EBc0Ref3NhQm5erUUyPOH3dL3U7zJUHlxQD51vvuUPYS3uaV5ZmApL67Ejfi9uO3beu9o47a5ZmGFiMC0L46PMaYPore9YMmnsnvjjV/5/fWB0nSAmX7YvEpkKR1nFbqUaRKRUyENiMBaUoJ5LAz0w6YIImKRqBoTMDpqIslYDNZKMMdxg7GA/Ee20aEb8iT8eEIQYDbD/SUVWc8+czJoEYfaQqp0Aufu/Llkg0ccuKiqXlWc1G687WYbPVd5YgCuLhsCINAmCRTHBywGh1B7Nlks1LS6uz0vPTZWIue8jufeFknyscm89krK7Ors5Xj4eDJRKlOxbyxOMTIf/bH7W2+clXb6/nsxgpJZAiRYoU14xU/sC/EQwElvE4h8ZMpji0TqOsUclbre5kEdKjQ+Yxo2N+oZ7LQmfGyk9zKTEA5kR7/5OgMCNGJhgwwmOh11fmLM5KOzE2WVGYvjBTvXfI3GX1FKVJ2efrkN64oEglEx4/O+IgiWQ6AbgwGv4qkVyiudVICYqUcblSHmfSG7L6w7csLpELuAdahpaVZRYqJQdGLa1mV65CxGIgaeczCjR8QYaQ32t0/OVAh1zCNyjFlxr0ipOcw0DAzRExb5pXwmahW88nFfQZ7XuaB+5cVcliof1+V6k0PTdNtq4mJz9D3to39vnZwa5QLFmW1BHCuszOGE5AEHQNUgtmwkTRwvz8wYEBHMdhGKJoGkZgFGVEo7Gent6cwjwRhw8BAMPQO0cGby3W31qnZyDwmDv0l9YROxbLUYi4TFa/1dVpdkm4LIWI+1HfxHU5mqWZir37OmhAH+82nh2Y+uhA++5TA2ZXwO4NcjmohMeFIOhStwMKM2b+54r6WQhKUCROkWQy/QBC3j4zuECflikVAADcIeyPe1qeuK6uUJOmT5NG8ESfyXHjbVUbsgs4KAqdFwDJweDzP8waO/nSHcS2NHU8eesSEZfNQRkAAAiC7IHwyny9XirgMtGRsLdUqoRhqMPqKsmQLcnRMBH4s9P931+/sFyjqDFkKAQcAYfR0zFx7+LSe5YWG2RCBgx12SYX5uX0eIPOePy2FRUaAL34waF5hbrizPT2Ecv7x7sRJlqZp/aqZAuE3N4Y1aCWGcfNIzb3+vnFZZkZQV944/KSeXpVl8Xz5BfN3Q6f6ewQM4J9/85F1Vm6CEFYsGAgEfcn4iyYoWULeSz2R6dHT/cOc5iMNeU5qSSBFClSpLg2pPwD/3aEEviBAVNdpipDyJ2uOIQzCNdU6FDryJO3LEk+Ev6KRYemubImuD8eZiHnjEtfJPbHvWc2LS3gslmBINVucd9TlSc+H3tDA+DyR3794UFxmvj76+r47L/Gc19BlXIpZq5SsqXx9K8cQcziD0s5LAIn3tp1umF+flFm+rg32Gpy6plodZ4ahqCzQ1MtxsnDzaNWV1BUki/Cg9dX5S4rMlybB6Iz1+dcUoE3+OrOU0wEKdArf7/1yAtPbBBpeMViBTh/feNkIkHiZ4YdbzS1TrjP+QoW5mlcoWggGgcAXO0gorkk+5TF47FzXgIGQhBkKIyhbO4D998v5PNaxuy7uyae2VwHzhUYlY6FvMeMVrePODvpTmczVxZo1SJ+85i52xlYqlM+u+2w1+h5cGN9+8DUtzbWLygxUBTdOjg1MOls6TURFL12fr5CzCvUpxVnpl9mYlEiTs8oLZqk1eI4ZXQ+VJeXfPnr7cfXVGTX5qo4DBYNwLde3JFZqHxwUbWUxwXnL9BF76yZv6IB8AYif9xx/PGbFilE/OSvYjjRY3WXqGQcFAXnr28gFm8amVqbr2cgtD8Sf21/62MNNWIeK/l/gW6Tc1/H2Lcb5skE3BgRHwsFAAA/e3E3UHBvrMpTyfgTRt8HBzq7ekwGlXTpgoL5xfooSankop3ugHPcZvKEnEMTK8uy8tTKkJINMWAyEHWFQyGYxQgkehy+0OmR6hLtzatLaoo0CYqa1tI4ReQLFEwEaeoZ23Gq3+cIPn7LouWpEqIpUqRIcQ1J6YF/R+YWIb2pNNOLR8QU643Pm6+fX5AMJf97JQG4oib4hXVII899ebIqX1WSqURxtHHUMi0JkiM6fOE/7DjuTuA1pYbpUqTgis7nUiTnedG1ihFkn9XtCUQyBLyPGttYDGRpVU4Qix/pHDveOY5FE7Xl+o2ri6yu8BGb78HKopVF2qbuc7UUr0Ge8azF6T0fPnR2cHLn8d4ojhflpj+8pg5FYABAjEwAACiaTp4sBMCpQctrTWeNroAu3/D0/IKqzAxXODrqCQSxWIE2rehaFScFAITD4e3btkajGAAQgsAwDBMEEQxFxrnamxbX/m9jz9Nrq9aUZfZ4nWVS5fRfERTV7XG2j7mOm1yDzqCAhTxRX+R2BZ9+/tNlS4vZKOPmxaU1ujSlkMdjoTRNx8gEG2G5/OGzg1MjZlfboHnU4s5Ry6vyNRqFqMhwgTxIhglhRJzFYCHn3/RH4x91jt5ZkSPmsAAAp4Ym93eO/uK2FRAAUSJ+pn9q6+Guh++qLxDLAADJnmvJf8HFYDFYEABRIhEMR1/7tPmxzfUi/rmQOZykB+2+wnQJA4EAAIMBT45AHCfogyPW1XlqDpMRiuCv7D/zxNr5cgEXAOCLRP90sA0C4N4lFWlifoIg+wIOgDGmrJ4N338rQyHKVIs4LDRLrSwqUj83bP9+tqpIrzR5QzEavN8+Ms5gNPDQ4XHrN1aV31iS12nz9Lr8oWi02xq0OH0QyVxXoBgatdy9vCw3X06Dc+3tSiTK5JYbG/f0mJx72kdurMlfWmioz78WYjhFihQpUswkpQf+TbmMJPjxm7tDodjLT2/+6q0JZnIFTfCZ9XxcIezZL45HceIb11UKIE7jqGWJIaNcJZs5XKfR/kFjW16RdpYkAFduShclSsRxkhCyeLPeP6dVgliH0VZtSG8bNr+356zLG7rvulpduuRXp/r+a3VVgI6POSL31ORbYgEAQDJbunl4qrFr7GrnGVMAzO08nDTRDBzx4eGxg8cG06WihWWGmgL13I5syavz0fGex9/aq5IKs7Izv70oTygWvD40RQL6usz0hgy57pqkFtAARMKhT7Zvw7DITEkQg5A/dIXNPuw76+o3zi8QyznFYjkCnzvpKE50WlwqEW/SH/mvptZbK/S7es1797TwAQpV55SE/bc11HIgJpfJQBHEIBeKuUyVSJiMiZredX1Ge/+EY3fzQOvgFI/DhAB05+pKXbqYgcJ6hUwp47ARltkdsLkDYRbDFo5Npw14QtjLe08/ft051Wf3hZ79+PDtGyprM7TQ+ZMCF9u309/X4QSGwEjHgPXDpvaFpYY7V1Ung5iiON5r9ZSo5MmooaRnwI1FDoxYbigwCFhMdwh7ed/px9fWyQUcAMChnvHffHpsZYHh1qVlJpdvyuHf2dpnnQpaxNxEgvC1jj6xeWGaXPjxoc6H71ws5PE+P90NG+SqOHLK6p0KRAQE5A/6QQJ/5s5VvgTe7nbekJOVzmdXq5XxBPnuwY4/bjtemZP+7HcbaJSR3N4xnBgNe88MmAcn3I2do7fUFddkqVOFg1KkSJHiX0hKD/z7MlcS1GoUfD5Ehqjrn/mzhID3PvegViEOJiJC5mxL9zJM76crZYLP1CQnhya/7Bi+aXkRD7C/HJzkoIy7Z8QOgRl1h+6cVzgznP0KqpRLMVc7TQ86s5Pxr95rytXINy8royDQ5HCEMfK6QsN1+VoIAOi89QYAmC5I2nDN8ykxArdiQSHClLJ5rUNTu072oQykofavBYhmYvUEb/jx2+uXl3VaHEZXwCIQaHjsxxbkqERiJgwnYgm9VJgh4l/tICIagEg4/Mn2jzEsAgEIYSAAgGg0FqPpRWs3M1B0X//ooXZjQ3l2daaqoSIHS+CHBidrDBlpQm6X1X14zHpDnqbg8Rc1MOsnj1//H1vOKDNFmWIBggKDhL+hMJOHor5QOBDFUQTJVoglXJaYy5aeT2HfcbTnF+/s/9m9q25bWXGgbWTY7OwYtgbC0UmHn4HAMZzM1sgL6/JVJL2uNg8AcLR/4k9NbdeVZt+1ogIAcKrPdKx3PL9a81BNJZOBXF4JTL9v8wVe+eQkA0Ea5hfsPz0IAHhs08IERTkj0aIMGQdlBPHYZDiYL5R1TTlfau69Qa28dXH556f7X9rTcmNF3pObF+0/O7Sna/SlxjM8P56vU6TLBHU1mRUF6kSUfr934qkFxcMTzqd/v4PNRpdUZS9fWqIQcCNEostoHQslpjB8Rbr0zf2nUQhWZ6uKdGmrslVlWrlCjGZweAIm2xUI//GTE/tah8N8IOSidgAAIABJREFU7ruPrp2frUlOu8fi2Nk+cKh9fHGhYUGe9rqK3DknmiJFihQprjUpPfBvTVISqMWCNCHXE4lt6RoNxOI3lKqpCL3+Vx9ICWj/Cw+qxH+fl2DaCL6CJviFsUPY87tPbVpayGWjkRB91uyaJQk6Jp3fevlzZ5n61IZlaTNCbmgA6Is9Eb+CzGpQMOsB/ExHwaH2EV8ktmRxvo3FHR+zVavkt5ZnCdlMcL7sz3RB0qbuMXDNVQFJUwN+NwCgRKIkKPpMv6nxzBAAYGZZ0mnW/ejtz397f5zCjw9MvnmgfX/HiCFNmlucPSu14BpUIgpPSwIISpYb8gdD6zZvwiXiIrGcAcP7u0Y7jLadZwYK1AqlXPSfGxadMTkG3IGbSzKPdY794u19P71vtVwh2XJ2ZPP8HKmEQdOgzeqEcPTAkAWGQa5cWKVSGCSCaCzhw2KhOJ5A4BwhL1chfvA3H+/8n2/ADAhAFEVAPBYaIxMYRo6aXX2Trl8eaIuNO9QyIUVRAxNOoU5sYHKCkRiHiTp94doi7cLl+XyMzlUpaUDz2Ewhjy0VcPgclpDHDkZiQSzuD0fjCSIax92BSDAS84WwxrPDtQXaTUtKy3JUveO2L1sGTg9O5RepNlTm5asVYyFv96SN9BBd447TGJbosyIoMmR0yHLkrlEXSVKABkurstfWF25tav/WpgWrqvNCTJwMA28scWTcurnUoBEK7vnlh4MTzhuur1pRkX3a7iLFrL5O87gvvLFAhYXih4c9oSGjLkNi0MuLDRm1WaqSrPRW75TfEbc5gj53ZE1tHkFB/7Xn7PdWl2+sLTg9PtVjcQIAijMU9Tm6v3UxU6RIkSLFtSOlB/7dieNkr9UNAMhRikUcVofFfdRoXZavpCL0Tz9oypcKf3nfWiGP/dUlwUwZcFUlwZqybLVaCOPI3mHzdDrBWBD7qGPUhkW9w0aNTJanT7vGsUPgsnkX046CEo3i8NDYwbPj11XnLyjUD7r8w57gAn1aMgIKzFAFAIDm4an9XaPgmiQVzCIZPlQsUVIU1dI/2XQxVfD7LUdKstMb5hVAAIQSsbGQb2TUt+1UbzLh+MHyrAV52h6bl6LIABa72u6Cqampzz/bgcAIgAADQUiKwmmo/paNNQo1OL8hLd7Q8/vPmB3ecZdfm6W6qcggYTHve2lHaMrX8d4PPm4bW1OiW5CTkfzAGElAADpiM3IhlskTCWHkl/2TMZyU81kGCb8kQzYJEtiEp2/IVleiz9dKGRBDKxEI2EwOC8oQiPxYbMQTfPl496052nXz81/ccWJX5/CmmoI3dzY/80CDIxD+9Z8PLlxdwPDgJEGGsASOk/5wFGUgOElxWChF0dE43jNuK8/OQBkIACCeIM4MTOZq5CNmd3mOisNCERiO4USMJHPKtPFwWMBmmlxelVTktgYjMTJ7ccG3a4qW5Gm3HG770ceHn793rScQ+fGWA0IGqkCZd19Xu+/04I8fWq6Q8pt77b2eoD+aqFSI7KGIzRk4cqT3xZ9snqdVnzLaXj09qOYyx11+k9Em5TB/uHGhUik0KAUTFu+Exetxh3tH7DZvAIgYIogp5nFvW1GxpjJvx9m+B989kSuBxHLWfQsqKnUZperZTRVSpEiRIsW/nJQeSAHAuWI4oWTskC8af79taFm+skAs752w7GsefmzDApmIF/1bDYzBxQTAFTTBZ9rZnhD2+oFWeyB8/w1VbIq5e2jq1vKcU04fgRN6FvMvTa0blhWkM/lbmjr4MsEP19dzZ4R9X8EpXYrLr5UjiPXY3eN4uIIl3Hmom40yHtpQDyHwZ/0mAMAsVZCUBOBaJRVclD6/i6bpEomSpOiWftMsVdDcO7H/zNB/3d8wHe+ULK3TPGR961CbyR0Mi4TztIoNhbqlOWpnELva7oLt27c57DYEhmEYghGEIIiQgP/IpltEfD4AgAagzeQQstG8NOm2s4P/c7xnpG0wFsdZvvh1a8qrszTvtIy99cDK5UW6i+4QkqIHAi4AgNkXcYVik77onr6pzigxT4DWaKWrsrU5csmYOwBT1IjTy4CRVpPbnIhvzFXX5mmDgfDWE90PLK8KBaM7T/TesaLig4PtxbU6Kc0UwqhExNbKJGI+GwDgDkQC4ZjLH/YEMbMz8P6+s0/euuT6+QUAgKbW4Y8PdjbMy1dIuVqFNE3CT5MIHP7wgTFLKw3uyZCQCfwHf/z8nrU1QgF3r939/fqyIrUcAvTRQeN33973yOoaizckRNFXPj62ZkW5iwQKAbU4L5sBI58MTtVrlSoey+4P79jfHoWhtJqcNBZ5esSr47HIUGTS7olEE0UsXt2qmsfXFCRTzJP5wTFPbNfx/rd3n8Hi+NP3LxMzOY4g1mW2RRN0eV5akUZ5z7zyZGJ6ihQpUqT4P0iq/0AKAADgs1Apl9Nnc0u5HD4LzVeIv+ybkojgcrUaRRnv7W8r0CulfN5FWxPMYpYVBZ03wf95+3tm1X8uC11SqFcKuDtPDWTqxBAMXj42WKEU8wA42jry482LUB5SoUovz1ad6hht7JuoyVVzmGhyDtDVVwXJ8vOXWis+C1XwOX4vFogm7lhaJuCyPj3azWMzl+SqWQh81uJuNbuYCJwu4Co4vH6/yxmNKDk8rUyEIvCPPmh693CHQSHOTJPM/eSrhILNS+Pwen1Odxyr0asXl2ezmIzGM0PHu4wCLisQjr25q+XetTVDIU9SvSRPP0PK3VCbn5chHxqdOto21BGOnxi3a7jMCn3aVCDiDkVbJ50TnqCfptVXtBGbTqcbGOgnCCL5ksFgUMHgqMddnl8AQ5AjiAVjiVK1wh9LnLF61urTth7rQtzRT3/zzbVVeQfbRg73DSmEvFgcF/HYM8vXJoEhSMnhKTm8HImkPF1Rr01LE7O8Zt/Ta4oK0kXjnvDHXWN7BqdOTDrb7V6jL2ILxlABx85ibBmZ2vL5SXGGJEGSu8+O5Ganm/zBfrOtSKMR8zm6NDHKRFAUhWEIRRCFiMfnsUkBSyMXFekUja0j3715sVopDmLx7Ud7fnLvqupCXYFBoVFIAAyPe4ND3mC2Rq7nsva7g5Uq3u7DvSd7Jocg6ubiLF8kOuYOdE65nnjzyylPsM/irinQizisEYu7eHWRG4u6xm3iNOm2vkkBAln84d09Ey2nBuQ5GRklerczYPXHlHhCyWE8urb6RzcvyFIrm63hjfP1K7L0Sg5fyeELUEZXv+U3HxwanHRtXlnOlnA7Xc4spaxAI394Re3y+Zm3V5ZW61QIfJVutRQpUqRIcQVI+QdS/JWZGcbBeGJL97BeyhMC1jN7OkpZ0KaFxfXFenDZeJjL2P1XRBIkmRs7VJKp/uXebpYQqRDyvtdQXa5V9s54st5ltB/uNYYJ8ns3zE/2LJvmCs7qolzKURAl4mwGyxmMmP1hGYdNkdRbu5qZCPLQhnq1TNhl9ZwyOQAAt1dkSzgsGoB+v4um6TSEd+svPugx2nkZwm8ur7iWSQXTCzXdWZmi6DODkye7J3ad6jNavf/znetuW1gx3T06+fAYAJD8hmkeNr+0r7Vx0Aswj1irX19j2JCr4vO53dHYGYvbIOUt5vEK0qVXymMQCoW2bPkQTyQgCKAMBg1AIBResHGDVpruDMdKMuRMFHmjua8iQ+bzhm749V9W6tQHnn8EnD/N/Z2jQzZ3U9cYgsBLCvVamahIoyjW/rVW6Ux++mnz/GzFjeU5AACCogYDTksk7AhGLa5Eq8k96g6FQwRfwIhHYx67m1uZjwE6d3Siob7kZOvYxuvLq9NVBWnSM5NOiMIJElj9ERYDxhIEAODjYGAtm80CyPbDnZuXlvHYzN6uiZJyg4CJ8jhMkiJpGnKHo4MOr1TE3x8NV8HI2QS+icPrN1p8AnYxR3i0dfg7mxcRFPnoG59H44mnNi3x0tBUIBKOxQmLRZ6TMRWk3cF4kEgUyEWLNeKPPj1Nc1hctcwZpdRKLmF31+WqG+oyq/UZybuJIKkFv/rkxE9vZiIwAOBg+8if95+ZsAciPGD3YncvLFtcatDrxZk88XDIjcKM6XswRYoUKVL8XyalB1JcwExJsG/MuHvAQiXwdSUGbhy8s/u0ORp974nNWrnoq6cTzOQKPpKfFTv03fcaJ4Px7tP9L3x/s4MiS7WSVXodizFd+R0EIrEXdpzAAP3Tm5eIuLOrAIErNKtLMXe5ppuXxXCy3+Z2B7BKvbJtyHykfWzDwqJzcThG259aBh8sy6JpeufJnnA8UV6lzpek/XJv1zM3VDIQOJlUcG1Uwazc6OGABwCQJ5KRFHVmcOrVw80jfc4VlTnX1efXFGjAJSTQZyf6v/nMVlglYDKQrHSZNEdzc566vjiDTbNwnMRxwuQJ6mVCOZ/zzwuDUCi0detHiXgcggCDwSBJ0svl5pYump+l0ksEXVbPrl5jhUL06KufiXFo33MPaRTn+uDOlIhWX+jsqGXc4W0eNpu9wSylpDIzPTddVpOtUkmFyYPX/v7znU+u5TBY03+FEfFAjNjaNbpQlzHi8T6/p7c+W2oyO2+sz68vVJ8asX93X0+uw12/qsjswxEEiuMUBECcJCEAQQA6p6EgwEQYcp2cEfIbO8eXlOUcahn97m1L5RJBtlwIaOCMhM1erHXK2Wr1JiiKiSACIYgjHMBnhEbso/Y4F4ETBGmy+TNEnLDPWVFXlCcT3ViWlcFjD4cdf9rROgWz4yTlweI6Fm+ZQXTwRD8t5VM8DhnGsaBvdUVOfob8O2uqrfHQtFm//fTQz3e0/HBNWWP3iHXCzWCAygrDgkzt4vIshZBHUpQvFvUkojAMcoVykCJFihQp/j8hpQdSzCYpCWQCzkQ0dMAWjti86wt1CgmKB8i7fvFBEAWnf/eIWib8xyQBuHKP5GdOwOoNPfS/2x1U4ke3LzGki/f1WVkI4+H5ReIL2xV3T9jPjlrn52lKdbMfW15tVTDLUTBr9RwhzOwLeQIRGYf9+men5ELujQuKYgT50YGOtsGpNfMLinLSqysyRkxhezS2uDAt2TMYzEg1vjaqYBZJX4GMwbEnQlk88bHO8VPdJiYDqS82rJ1fMPd4mgYV9//+V49ev6I6u6lr4t0jHUM2D5UmX5alWp+VviBfh8CQM4iF4wmTJ2iQCeV8rkbCn/s5X5FknzIMw2AYYjAYQZzqL1v89uIyfyyxpWM0k8f+xUcH2lpG9j//yIqqvxa/n7U/Z77sm3KOO3wjds/BnnEYhpYVGYq0aT/fdfY7S4tXlhgypMLkkeE4/mnf+PoirYTNxUmq+n925ArBqw9crxTyCIpa/x9vW/zhb95fr+aLIJjBgEGUSvBYSI5EGo7jkTgRjhPRBCFkcMI4/v6ZIXMAg032aChGF2o0Qi6XhSZwCqcoOYshYKEGpbharShKk1qigUiUfqul3+4NcWnu48uLvBHsD7tOMlFkw8LicoNMJmTHCTDu8n3q8tgODquKNAuy5P5w7PBnnT0mJwRD2gqDzeVLxBMcBvJAw7wipaQuT52dJjttNSeCpMUb7DM5tpzqjVuDYhGvPCft1pVlG+vLYeivq5XcD3q+SID+I98MKVKkSJHiX0VKD6S4CHGcbBoyTUH4sowMIkEcHbcm65DSYfrnb+wxqGR3rqyoK9InY0L+AVVwpYzvQDxMA8BCzoUAtY/bjg9NbpxfOIn7eISg3eKZ1cYYABDA4ttP9QEAbllQPMtRAK6cVrkU0Us0M06O6whiXSb7hD+cBiMtfaYwFs/TKpaUZ1k8AQuJD4S8A6PYL2+srdUq+vwuAECRWJGc7b9QFWAE7o5FgngCzChOerRzbNeJvvWLipdVZM+qT/qbvxxcWpldX2KIEXGcpHb3j3xydKCxY6xAo4jLJPM0io05GQsL9DAMOUNYOJqY9IX0UoGEy5YLOLwLY72+CuFwePv2j2MYBiAAIYwvYfEPVi4+PO5oyFHPihS6DHN3BQ2A1RvsMNr6jbbG/glfJMZCGXkZsiJ92oIC/W8Od96Up15blh2n8IEpz4dHu6u0abcvKQUAHGwf+fhQ53W3lN9ZUCLhcQAAEAAJkpyOs5r+/GSBqbOD9u//bqe8Iv/OInltTZZOwp/0hSmYbB1yatN583UqFIZxioomSBaCHBiyVqmFt/3gI0629tnb5x1uH68tUFflpQfCiRhOmAJBkqLa4oxjLf3mpq4///KeE3b38Ki1r228YUXxu3af2u6DIwTCZ7IYDMweoKTnuiuUFqVFPLhWIsiWiw6cHmKjjO/fvnRxRebMPdw7oxxWihQpUqT4/46UHkhxcUJx/PiouUqrTBfyAADTdUgLxPK2IfM7e85MRMLvPr5Z9w/1MAZXThKAC5+1B6Px3395ckmhPl0tQBKM/SPmpZmqSrV8lknXM+k8PWz+lzgKYmQiRiTErAsee8+c3sw2BUc7xlgM5MEN9RIBp8Vmfv2oUSvm3FuTW5ouQ2Co1+eEIOj/gipIMrM4KQLD+88MNveaAAD1JfqGeefcBcliRL+4v4E+Xz0p6TnZ1zG+tbl3d+twoVY5LQwWFeghGHKFsGA0YfQGEwlCKuCwRbxqmWhms7nLEwqHd2z/GMMiDATBorEzxUukkdhaQ/rcSKGvwsztESHiXISVfOENYyM2b5/Vs6N/wjRqlvDYJEHhJLms1JCXLtt/YuB01wRF0/NK9YY6zWOVFfmqc3vyUhKUBsDqDXzzuR1NtsjRH29aUqBJHumNRgft3nK1EkYgDnKuA7EI4XzeN7GhSNM67Nz8SiMS8xZold+5cSELRYQcVCxgs5hwrkR2bML+4rGeIjZzy7YTN967opTD+t27jQXFqihJNywqMOOEMEic6Bkbc3ijCYLljRMkBUHggdsXTIy7m5qHnrht0YaFRfOLdWDGU4CUEkiRIkWKrwEpPZDikszMJQAAJOuQrixML5UpJ13+63/wlh+lm3/z8D+WTjBtDIErYXzPjMbxhLAX97YEo/G71pQhCLyv1ybhsO6pyhNcaEEmHQUQA75jQTF3TpJxkn9+Ypfi8is23aagUpfWNmw+0DZSU6lz8bn3ZevGvaFmkwMAUKdTlmX8X1QF08VJAQDJ+qTHzrsLllfmkBS140j3TcvLxBr+dNQTOH8FwRxhsECftlIjX12WfXDcuscbBACoWLA2TmXJxWlCLp/NVPA5vPNXdu5T/CSRcOiT7dswLEIj6LtR1nfmzfvT3haf2f93iQH6Qtsdw2NclE3T9HTAjD+W+EvbsF7Eq1XLaZo+OTT16en+R9fU7u8YaewbbR+1yxLgvkeXHDkywmai66rylEKeUswXclhSPkcl4Uv5XFcw4gxEXMGIK4jZ7f7D7aNarXLXgPX1+1fiiYRUwMFpetDpX1uo57FQGIGPjBntvjCEsPvs3pVZaShAHntzVyKMO+LYcw+sU4nY+RnyGEqavGEsTLda3I2jFj2KtOxrZ6ULEG9MpRD1RYKZDHZeuXp+gaFYk6YVC9IFHINS0jfh8Ieju5v7Ooatukzp5tri1TX58fM54smtm1ICKVKkSPG1IaUHUlyOmQ2MwXlJUJAhWKHXjdm9N/30veD/Y+88w9u4zrR9ZtB7JwiQINh7b6pU71Zxk+M4XjtxNpuedXYdb5qzKZtsNsmm50svLrEt9yJZvVOiRFLsBSRBFILovU0Bpnw/YMEwSUm0pBRn5/6hCyLPDM45M8PrfeZtXJCRBLFUUsoV3eh875BrWt2uKJ1cI/vC1NzBwenV1UWFhdJQOG0OxT/YXC7lvat8ZBRNXbS6nrXbH6utbjK+0yYpO5/bJVeW5Ib9HLwxZD4cD8aSMgH3e8+fEfO5H93e0dVQAgGQLUC0WBUAACAAeqYdvzra5wzHvrK3a2Nz2bW+4i9ENtwFXK1EBMPQ0V7T4LRz3h9tqzEc7Zv60r9sadTmZ/f27WL2OX+OTgzb7vr+83wuu6JAM6xSylGsUMT/YIN+XWVplUbOY8Hz4USKIF3RBABALxNLBbw8iSAr7XIvIgRA4qqX4GmXcE9DydOHrvz883fnpg1ch+xt8I4YIHDh1QuXOX8mJ+GDLeVyPpeg6UgC/fnhy5/duUIlEdIAHB2Y/u9nju9/oHNlXkF7kR4AcHTIbPNHxua84STGZsHT7qCQy0FSaRRPDdu9AIAGsdScRg0QT5Yn8SSRinwlDUECsYBOpVkQJBXxaCEIeVBnKDbP4d5fWzBidiNYqiRP8VrvJCXVFAkIvU4IAJiMgihJcSCWjiMAYa87HC+EeSIO+/P3rasr1hZo5TAMHxyz3tdRLuUJMtqmZ8x2Zmj2je7xPWtqN7VVtFcZTLFAmUQGGCXAwMDA8A8KowcYbkC2gXG9/u1uZc8PmyMpdHd9ERElP/T1Z+I86MXHPtBUmgeWnUuwWADcLst7Qd2hjKPgwe1NfDb79LS3y6hrKXi77Iktjh6edfbHEcGsLRwjtjeWNRm1TSX5YNH0btfclmQ5quD8tMPKxYuiYGTKyYKgXatqVtYawTVUAQCgTpEHAPjjsf7/+tOJcCS5eXPDxza3bm9elu17W8gtRpStRAQAICn6yrTjqaP9/W7X5oqyrsbS9S3FmWFL1iP6wq8Or24sloiFz/WMnR+3RZKoUauA8/M0In6dVrG5TN+gV8kFPDYMuSKJFEE6IwkIAjqZWMzjKIR8pejtCPisJDjw4gsolv7JKWdVSdHB7/0zWB4LaivligEAAA1A9KoYkPG5AIBgHMmKAQCAJ5z49vOnalsL72+oUQiX6LRAAYBguM0fdQZjwUjiFy91C3mcT9+95s419a9dGP/Fqxfc4fi+Lc1sPre9RNtRoksT1IDH7Q2lLkzN+SDaZ3bwBYJdDWXBaPK5i2P717W46HQIQQJJGk8TiVCM8of9CAaz2Z9a33JlxMphw//zhb2NeflRBLeHomwWy6iQKER8jEwd7Z3qG5/nsFi5IV4ogVvi4VKJQsDmMUqAgYGB4R8SRg8wLIvcBsYAAJM/fHxmvqtCQyfoj3/vBUrGkfP5v//UXXlKIViGKrhOzPStm90LLOwLU3OHh2ce2dQWA/gbw/NcmPWBlvLBYCyOpyr4vD8d69u6ouSuxrr+WdcLF8bFEPTv+9dJRfzF0/gbqoI4njpvnk+nyNVl+oFp56krM2Ied0t7RSZVN6sKKtSyWq08heKHhqdm5v1CFrfGqHtmaO4r2xovTM+92T+1p71qQ23x3ySIaCzHXTAW9pWLlacGp69MOg9fmty1qqa9yrBkPaKLY7bDlya//OFNNAA0TV+Yc3hcyKHB6Tf7pgRcTkFdGQBggTZgwZA7mnREEpEEEkZwhZAnEwsq1HKtREDTwOnxnDh+9P+dCzzznw81lelveDWzFz17Zy4QAyDHMyDjcyEAgnHkZ4cvf2bnCrVECADwR5Nfe+q4pLNoT5G2S1ew6BvegQbg8rj96OWpbZ2VuUnYM97wn8+PTjv961aU8NlsPp8NWGQsQL9mcnjjMTQQ71jXJAhFpmbdl6fmDUKBsaVofB7jRIN+oTBNUsDl40SwO9c3vnp8sL2m6BuPbF/XXGqOhV3+ZApLtxl1PDbr7Mjslcn5UwMzm9sqNrSWdjWUQVeDoFACJ2jgQeI4RQFGCTAwMDD8g8LoAYblsmQ6QYVWLKfZPz1w+tB5k7xIeem7/1K4jHSC69j9t8vszp1DBMF+eayvtUyvyhPM+hOvDbn2NxfzYejy0Oyn7uj0U0jGykHw9Pfe7JFxORsbSppL8pc87W1RLNfiWvuGkSkei+uLJefDiVAcaTLkDU7Pnxmc5bFZ2zur3m5WMON8dtw24Q27Lpqa6go+sKNBIhV3m7z3NpfX5asy5zk2ZO6ZcQAAVlUY/pruglxmY6E0RebxhUq+iKQoGIaP9ZoGpp2ZBIMao7azxqBXvxPT//U/HN3WWbWqvhgCYCzsy0StAACODFpe7TedG7P5YkkBj1NQWwYAKJSLG/IVHSqpQiV9yuFjs1nhFPZYuZEmyCiKs2EojmI4SSfwdLVGXqiS8blsCY8jWdSEOMNiNxF6bTEgz/EMfOZqmFAgmvzOn09u3VCD4/TupnIOnOtmeBe+SOIrvz0Ms+DP37feoJGhFDUViSeiiN0fsdN0kYAmaWrwsnVdQ0lLU+FFk+fbxwbVWLKlvvIVi6dQxHdNWaU6TbOa64onY6G0hWbR+ao/bGjs0KteODMyPuN0eCN4mijUyL74T1vEYt7BaVu7Sm5zh+3uyPHeqb1r6zpqCja3VmdUQPY+RAl8Nh4FAOgEYhVfeK3JMzAwMDC832H0AMN7YLEkeH7YHEaT63WaRCL16E9ep2j6V/+xf0N9CUamriMJbmhV3xZVsEAS/OhQD5JKrW8of/KyZSQSUtLQ9/euWlttmI4GM9EsGYIJ9NsvnhND0N3rG5dUBbdlbtdiSUdB7kK8MWQuHA/HkJaivGwBovZqw2O/POjwhsUifv2ONh4H/uK2WlaaN+AIbmzIA1df62Zm3jPtODtue+PK1N6/kbsglsLmkrHM5zpFHgQASdEsGDraaxqd9ZwaMAMAtrRXtFUVrm8ue/nsyLG+qZ9//u7peGhh/jEEpSkiFkufn3J886Wz7jiSwvBMpzObUKiGAF/Ix0lSyGZ/dlVtnV6ZLxFKeFwAABuG5kIxmgb+OJKmKCxNpEiaz4ZFfC4pZBdz+RwWiw1DXDaLy2Jx2TCPzaJpEMFRNmClSSpFUimCJChKLOQ/P2LZUKxt0atpAFzh+Pde7/7E1o4itQyCQCSBfvOZE1vWVkeS6QZDXr5ElIBBsUgg4nKSeBpJpZEUgRHEjDvkiiOmUbtKryjRqygaIKn0OEUZJYIWmXjGFUzxOIN4eqOQw4Opp1/vd+LJGZLVoJIMuFDcIFPNObFYsq5KU6JW2izBVRsqByyx/9zefsAZ+Lgx//UTgwCA5gp9R02RW+KgAAAgAElEQVQRC4IP9U6enJyz+CIAYHCC3tJSsbq+eFtnFb7oabXE/ShB0gBmHAIMDAwM/xdg9ADDe2NBhjEAYCoQHg8EymXyUDDx0W8/b0mja6uKnnn03jyFACwjdug63FA23JAF5nXPtOO5i+OGfPVvL8zEpyzVGxv/e3enWAzlGj00ACie/t6bPS5fRM3l/Os9XdqlWmL9NVXBAr8BDYDvaqpxpgDRK2dGZucDXU2ld29sytfIhtyBS24HhnD21RpbClQUDczxYObYXGFwdMh8acYBAWh1VdHWxlLwtyCTBp2tR5TJPHYFov0mh90bOXXFHIwl7Z7wz75y987Gag7rnffrGJmiaVrA5mX2yhdFPvuT1+/f0nz/2qY3Bqdf6zcNmp1mb5iiaCHv7cgiPofNZUFGucQgFa4p1eVLBFqRkAa0LZiYicR6MBwCoFzM0uGQXJDZbZqmAQQBACAaIjkwmyAoGIYpmsYIIoGlvzFo3dpkfLhYFw7HvNHk+KyzrqxAwuPAACIBfap7vL2zJBJPK8VvPyk2LlxGALVYkLkCCJaOp9JyClwYtf3r/i6lRAAg6IzVcywcr2TBNo+/VqV4y+xCScoGgwYxZOqz6pTCMW8iH02ZovE0BIwaeQxLfe6uVVEsfcwaNARjT33pfk86RgN4djr4+mXTPatqdrVXAQBhJH7F7D45bHvpcH+aJNevK394ddvqumLw7rtrLOyDAAUAqFMs7R9jYGBgYPiHhNEDDO+ZBRnGAICxkO/FQUssntpkyP/xn0+dG5jVVuT96bN3b24ovb6j4IZQ767rcnPkWjyBePLxZ0/OR9MfWlmh1on65kJYmnxsXbNa+K7cUwBAAkv94OClRDD+4La2a4UPUVcH3+IMlwS9RvOybHqr992qIOMr2NxeoTCIX7D4HzAWnplxXbR71pTkt+pVLQVqNgwvyAelAbg07eg2zb3aN3lnW/X6auOK6r+2uyCz4Zm0Y3A18zjLkd6pZ05eMUdD97bWV+g1DeV5OrUU5IilrDALRJM/e/n8J+9eJRPzaQDSBOlAE1SMHrJ7zprsA7MuizdcqlXUGfObywt9KcIZQ+yR+IQlEicoiYpTJhPd0VBYp1HnCfkyPlfG58r53BRJQjBFAQAAYMNQCqdTJCXmc6+4Ak8cu+JwJb+xo34ES5Fs1sD5kZ88tL1BpwIA2H3h779w9u5tjbEksbK80Ifiv7N5AAB1bKotX1ssF0MAckYT3QPm508MSESC/3hwM5/Pe2nMet7uCeHpOo2MS5IxiuJzODtK8n59tE+u5JviVBmFA4VUlEyhQXRi1rV1R3Pv1Pyje1f70+QbJkesZ+p3j++/Y2XN2eHZn7/aHYwgrW0lUb3q87XFL58cOW6a+8im5mKNrEqnylNITLFA5h7I3F3Z7I4yiexWnlYGBgYGhvcpjB5guElyM4zHQj6I4Py8e2JLtXZtgW5gev4Lv3hzPBF7aF3TDz68Qyxk37SRQV/N5gS3ZnMv7GRs8/VMOZqK83RKSW/IHQqBTaWFrQVq8O5iMuEE+uLgTP+oLV/IXzJ8KCsebn2GS4ISeIpMy3hLOCiyLFAFh3pNtkCEU1fyh10rZEIeBMAFm3fEHQQANOQrVxTlkTSdcRfkekXG53yHeqcujdl4csGHNzZvb/rbZBcAAKajwRRFgpzpjYV9FWLlycHp4Rl395CVpKlNrRXlBeraYm2VMS93z3vGbIcvm77x0R0AgPGcZAMAAI/FBQBMOHwTTv+RUctTl+fIuJ/LYUMAiHicFElxOWx1lZF3tU+wlMfBSaqtUB5MEkIuWyHgKgW8Vp26QCF5xRMwTTsrpJK3hmz/vq0JTeHffvnc6g0tIoX4E+UFFrPrUK9pVUeZL5Z+eE1dfzB63BseH7FGURwnSR6LxWOzcIIEADhOj+RVF/BUMsBlz85FazRSj8eV6YfAp2lbKE6R5B2rKjqMuu/87pSsroTLh7AYICkaJ0mYSLlCCY1WLJMKP9lYGkORH/7p1Md2d54dtKB4esfKqkA80TvrETYVbJSrojH06/etlwjeeQazmRiZ9IBsV7ibfk4ZGBgYGN7XMHqA4ebJxA6pJAIHFrdFiTVa1aFJWxqkP1hfEY6hX/jlm7tW147P+x/Y0NRapgU3ZW3khgzdlvCh7BxiKP6jQxfRNLGqqihOp0Y9CaVIsK2ysEWvXnBUxlHg9EU0PM7OjqqunNCaxSmn4JYnuZjl2GpZVVCskf96cGyqx1pTqNnaWr6tvTIzYNgV7J/3n5l1ry3Nb9WrGnSqbBCRhGT/+KULB44NqVtqfnFvZ8/03Gv9prs6ahqN2m1N5bd9Ocsk6zFIEni1TCVg8yiKhmDIHYj2TToc/sj5EasnENMqJWsaipsrCtY3lx3vm37sF2/89NG71jeXjUf8ufkGGJlKkwQEIBYMAwAumJw/PnDuA5uamssL6gs1E85A76yzz+ryhRP+aMIbTcawlE4hcAaROIqzYLjAYKBoMJ9INRpk1kRCLxERAPg9icJC2fSVyYq60hSbreCyR1mQ+MJk59Y6BKFMroQ7huFVmvVC3hqV5PKkpXvERtF0Kk0IeBxWAE1I2AIuB4YhlC2jkiEBh/W5fWskbJZp3ndwYLqr3vjg5qY6rdYbSz552bS2LP+YxXV/a7kjEPuv587gWGrzxtY9RXnf/MWhzAI5bBhPk/O+SL5KUleme2RPByzhxRDyQytqRO9utxfEkTCOYuTboms5dxcDAwMDwz82jB5guCXwNHl8ym6l8TsMhaVyCQDA5A/3Ob0aCU9Ksn/56sVVtUXPXRov1sh/+MjOm3AU3HaDe3FGwVtDM4EEum9lLcmlpz0JPE19anXtgs5lQQR3hWPP940MXrYVqGQPbWvraiwB15Aotz7JJVmO3eaNIf0OzzSK3FNiGDG7j/VO9Y7b962t29Bcli1hmXEX4HhqVb4SxdNnx2YLSmUKieLbr4/+aP+K9ZWFmWHHRyxXLM6DV6Z3tlS0l+m3NZWDv8CilkNWGAAAKmSqjL8o0xiYBmDC6pm0+/yRxOWJOU8wNmn3ySWC//jE5jXFxiKtIjNhlMAhAPHZ71xTGgBPJPqrV3o+cfcqmZgPAJiKhCrlKgGLAwGIommcSsWT6flgzBWKz4djPzp4acYdEAn5mELaJIAs3lgCSRFCJYgHYZguVEoBAN44wo+la1Ya+HXFphPj3mACItMcNqtQKdu3srrKoGzR5R/tnT58cQIA8PE7V7dVFdYZ8sYdvjcGZr/zm7cqawsCSWRve9We9qqVFYbekDOfJf1lzySO4p/cUm0NJP/njbGH2wu//cI5rkz2cEvpRza3nR4wf/x/XqBomstm37Ohcdeq6hU1RVw+680xW6lS2lKcLxW888Rlg4IAAHqhWMkTgmuXtGJgYGBg+D8FowcYbpU4nj4zPScX8juL8jPpBHE8/dzwjC8eX63Ne/pwn8Mdvntz0/i8/8GNzfXFKjbMWr4J8hcyuJdUBV01xkq92hKPjjmja4t1rVc7lyXS5DMTtr5Ykm2y6hQKvVZ+7MSQQiJ8aFvb2saSa00j+1zdyjwXc0NVQNH0bDQaimFWTziZJndWF/WM2/tNjtzipN5o8viA+crkHADgjnW1ugJRPE6fnHHuay0Ci2rMHx+ZvWJxvd4/tbetqrVUtzXHY3B7l7YcpmIhHotFURQAoFSiWHB7eEPxngn74X5TjEpFPUmSpLd2VOYpRcValVGrMOYrQE7KBwAgGE3+4tULn7lnrUoizPgTEAKHAMDItIDNpQFIUwQHYgEALozP7X/iGcOG+v/c0HRnc8Xzl0Z+dby/ez69VcVZUWv4wLrGF7tHD182PbC7lScXbC42PvbT10Nx9BN3rd7YWKZXSgmSHPS6D7wxIORydq6oAQAc7Z1a01C8raPqssV5dGh21OU3Wdzbyo1r20pESm4EEOwUt9fm1Yo4fq+vrrz4f86aJvvGCZLi+FEOm4VgKQBApUFTUah+aGd7bbPewJNGUTyE4mmS1MlE+VJxJl0EAhQNYLDost7wRmJgYGBg+L8DowcYbg8LGpYBAEz+8MkpW6VEEk1gr3eP711d2291UjD9lbs38rjQcgyR6wcI3RZVkJ1GMI787MhlAMCHN7ZGIezIqBsAsL3KIBTwTLFkvVDw1d++dd/Oxl31VTZ/9Ix5HgBw4uSwTMR/eEf72oaS63zLrc9zMdcx5nIXNR9OeGLJ0KLipL967aJKJvrEvlVcLnsgEDYlQjDJW2HQ7q0pWlyMKMvRIfOQ3fNK7+TdnTVVOlVnqV6X0yggw+1dZi6Lt3Es7OPCLBqCIJrOzULO5BtQEGmy+2bmQt5wfMLqDSdQTyiukgh0Klm1UVNXkl9l0AAAnj0xeHJg5tGPbNhUWcpmscDVJgOZHeazeZlvHJjzffP0AH8+/Kl9KwALvDVkrjAq72mrPj9kf+H40DNHBx7Y2bZvdwNJQHfUlWXqIF0xOc8MzHY1l3TWGk70zVyacGztqFhRa8gELB3qnXrmyGC/z//Itva20vxStSyKYFN2/7DDdax7mttobNOpdTz43Nnxok7jTCA+0WtJuWJ4ue7x9ioBBB3tnRLyOF95aMumtgo8TQz4PeFwis9hVeQp1CLBbCLMhVnganL2AicAowQYGBgYGBbA6AGG28biUqRxPH14xhaMJqtksj8e6l3XWCwR8XotrntW1S8no2A5CQO3aG0vsI16zfOnJ2yd5YXFWsVEONhrD1Ny8TqJiE5i5wfN/3RPR9butPojx01zLBg+fnJIp5J++cHNGpnoml/zl6lEdMNmBQAACgB/TsLxpcm5Hx84RxDkntW1j31wAwAgTVJn5+0TCTA76yEpqqVAVaaSrjHmZ9OOwSJhcHLU8psT/YN9FrlU2LWysqu2uLNcr1dKQY5XZDG3svDr3AmZX41H/NmfQIAukcj5LC4AgKZpiqJZVwuVOrxhiysYjqHuUMxk99s8oTlvmKSprtXlJXKFTiUx5MlkIr5aJtIr5YFoMhhFrAnUE02cnHFu1qsRFD98YTwlYn3urtV7GqpoAFACPzdk/dJv3vrMI+sEMH9fS5WI806w/tmh2WdPDDx5uH9dS+mH96z44Lqmo8Pm35+80jvrYsFwnlgMALh/Y60xTzY957MHIkaj7NUTE9MUuxIm0krltDdKjTk+9+GN/Vb35npjJISNmz39E/aHd3fuaq9cU1/MgmFnND7i9JMwVaARcmB25nsXNw3I3hVMgBADAwMDw2IYPcBwO1lcihQAMB0IHzfZdHzBi8cGkih2x8ra358d4rLh5z5/n1ohuI51shw9kOHWVUF2GuEk9r9vXuBz2Z0VhdZI8ldDFgTDOwH8z7s719cYx8K+3GKdwRjyyrA5jWMjk64H1zdlkgqWJLuW2x5HtEAVXMvg88YQdzQx6Qpmat53j1gvjdruWldfXaI1S6j7DSWFCok/gY55QtZQPJN2XKWR5QqD7MLPj1q/8dRJCwH94SObeDz2hem5U2NWAMCm+pJyrSqrDcCidPCbYMkru+C00CK/AQdmAQAIOlMpFGQTixffUSRFnTVbxRB3wuKiSGjK4U+liGgS47BgJE1Y5gNwhR4CgJxxySSC8VmPh0W2KhQff3DNlqoyGIIujtuPDU3XNuhs9ti9HdWNJToAgMMXmfdFrJ7Qj148j2HpGIZHhHB7qV7A4xAE6ZzyRjG8ssFo00hKAZ2ccmskgg/tb1erhNOu5IFBR6lapBRyu9Sqj33rOVTO1YgFX9y7pn9yTiUVNlQZLvO432osDVEIgqVjcQIAIJWwEYCu1BTz2WxwbWJphAO9h1A9BgYGBob/OzB6gOH2szh2KI6nf9w98OLw3JdWVv32lZ7TfTMcFryzq/6LD2xoXoajYDncop29wKq+NDN/ZGjmjYGZBCzc02h4YXS2vUz/H1tacpuXZYxLlCBfGLfhsWQ2qWBJVbDYEr1FDbOA7Pxv+ALYEY5PzvttkcTuupJzI7OHB8w9g7N71zfeu7puZW1RdtgFm9fkC2eEQYlCXK2RxwBK0+DshHl+NlZVoh9yRX54XxcLfnsFrlCs1+wye4O52qCjXF9wVRvckAVbdJ39WTxy8YEg54fjEX/mD12m9xl49xv0sbCvQCjkszjZ6KBoEpv3Rfot7mPz/nuaylaV5CcR/FDvZPfU3H2r6g9eGp8KBtgJcGHYWleW37SmdN4ei7rDfA4bSxFjs26SogAAbDaL0Ag4LPieFbVt1fo1pUUFSkkERV+4OOn1RXtmnGUbGzmJJDuBjAzaP33f2rk0MegM76gqaMpXaZTcMZPnc797697W6tFpZ7Uxb9eG2uoy9XwycdaFbtLL6QTJZbHK8+QFMgm4EUyAEAMDAwPD9WH0AMNfhMWxQymSfGFqwuFBirmCL/78IM9Q8FBLkTeeUMiEn9218iZKDy1gwQv4m7Ozc41pGoDTY9bH/3w8THK+tLdNpxX3zwUxgvz3ria1ULDgQG8MeX3YDAC4liq4lq/jFmXMAjKWH1iG8eeLIfORuMUXxrmpU1GwBkubZj1iPndFrWF7Z3XuyB6r+3vnRmNYKtA/01xXcNf2RhhivTZs/9DKCq1UsDg0BeRogzMTNpKit9SVFMkktaX5dYYlBmdZ/Nb/Oiw5+FqXfvHgTLEdDsxKUyRBESI2F6eo3LUEUfyPV6YebC7PFwt9seQP3uimAXh8X5dGIhwL+1gJ+qVzIwdODn/645vW6go4LNgTjDv90ZMD5j9eHIaCGASBndub/3lz650ravE0YUeiQpoz4w9Hk7hSxD3QPdLYUHw0isGuoDmQrNVIgoH4v21vXVuuTxOQORL85E/f6J91cwPow3d07thYs6+5hiApTyI54w9NR8JVSk2tRqm7bnxaBkYJMDAwMDAsB0YPMPylWBw7hBHETDR0dGxOzeJ9+w9HizTyx/Z38biccybb1qby5WQUXIflv12+PiiBpyiCezUUO5zEvvznE0V5iq6aIr1KOhz2egLUxrKCxW0KwNWkAgDAS29cFvA4H93ZsXdNXeZXyzFwM9zEnBezTEOQBsAaDk/OhwiSXluq751yHL08dXHEete6+hqjtrPGAAA4P2p79tQQAOATd63+evfYmirF8FwCjZKP72zaVlloSYSyZ1taG4Tj58ftJy5PnZtzqiRCuYi/qb6kQCEt1SoqdEqlWJg7GQgAGrxdS3TxqXJZYOJn/nudY3I1Q+4whMABgIVsDsipyJkiqCdOT32us6RAxgcEePbEyIq6wjKDsl6RR1LUi/1jB94a5ElYq1dUCVOwPRQdnHXPuILT7mARxIVY7G89svWDG5shCLBg2JWMh1Ko3RMnCVom5016Aye7J1Y2GF0U/ZIrrkeoWDIJQfCu0rzBIfsjd7ZzYPDWhakDr/Xevb7xI7s6VtcV0wCEENQbQyiazpPyC+WyG27O8mUhAwMDAwMDYPQAw1+aTOxQ1lEwFvIRJOv5cYvZ49+m0fYMW/evrY+jqe7pOYVEsL2lorVMexNGzPXfvt+Ehb3Anh6Z87zaO4kRxLqakjRND3ojSrGgq0TXrH+nrE2WaV/kkXPDsXNjcV8UUPTDOzu2d1atrDMucxq5BTGXeci1WI4qQAmcz+b540gwic36o65IfE9dyfkRy5Wp+dNXzKk0UVOsrTJoHtjaWmnQkDR9wTn3pDU6OWI1yERKIa9BpyxVSRrzVXIBL6sNcoXBpcm5X7zZe84e/M79qzfWGQEAvWaXLRAesLjd4QQAQKcQt5Xq8xUSo1pWrlOpxQKwDPkErm4UDQC8jPGLXQTIVaNZmLM/BEV1W91fO3YFj5Lbt9RsUYq/8+LZe1fVbastBgC8NmI6cGos6Y8LiiUgzZaxWVU6lUzIqSvPf/X02LGzE1u66iGl6tFdNRLB21nFzmTs4pi3rlTpi+KXZgMjrojA7tlzb0e1RumKpZ82zRVhNEmQE+74zHwAAHBvc/7Daxs31JVAAHiiSZQkXZGEXi7OEwvzpDfuGLCcK87AwMDAwLAARg8w/MXJOgpK82RONEbR3LPu0Hqt4o2R6ReG5+J9M61Vhn/e3cnjcs5N2giK+syuTpmI955smuubg7dLFfRMO44OmyNoqrlUJ+RxzZEkn8/ZXF7QpHtHFSAE+aJpTgdDvzvSY1CpqkrzeVj64ohNJuLf3VW/ss649DflsMByzXATk89y/bfFC+xLZzgRRrFZbziZJjZXGA5emvjT4f5IFHlga0uNUdtWVRBhYz8e9+/XKFoL1QCAMU9oLpLsc/gomm7QKYsU4lKFlOKm58NJk8k57fDniURN1cUvDNl/uH+NTvaONyBDKIHMuEMWX9gRjF4wOTzRBBeGUyTZWKRtKdYpxAK1VKiWCNUSoUoiFPI4C/5aLfnK/1rkuggyRUUzvgiMTKVwesoVMIViR2ac475IKkx+ekOVTir8zckraTF/YsRSrlOiWGrQ6i7lCh7a16HP19zTUuEJx08OzAzNOC8MW+e9kSSaqijN55eX/OaR1QoxzxaImj1RNsV6fWaepOjOYk2VVPTSyf5/uWeNw5M4anUXyEVGHu/7fzge8EU5XA4u56yvK/nRwzvlYn4Uxe2hWLFKmicR6mTiBQtZUhIwSoCBgYGB4aZh9ADDXwlvDJkMhCRirjmRusOgE3NYBEWdsNp/1zeZdRRUGTQ2f+TcpH1HS3ltsUrGvXGEdIblWIQ3bVtfSxW0lxcIeBxTKCEV8pp0qnWluiF/1IFibVLRd/98ckdX9Za6cm8MySTvKgF87LJJJRVuaC5dEKC/gCXXkvuUvtf5Z1lOfdIs7mgilMTN3lAyTWwsLzw3YhmYmu81OWIotqqxdHtrxe6VNbkz8SXQMU9oyh89bnKYw/ECuVAWiW9ZWVZZmJckyN9fMP37lgYJn7sgpmiBVHOH42dHrY/+5DWxQkbxgV4pJimaBUEUoHlsNg1omYAv5HGkAq5SLChSy7lsFocFy9kcoYQv4nNlQj4bhvhcNo/NFvE5Yj4vgeFJLI0TBJYikBQBs6C5QDgRRUk2K4mlYih+asyaJslkCvfHsLRcygpGCJJyE/wKEb25rlirkv3yxe7GPR3fX990edrx5MHLn3ugKxzB72qvHrd63uwZJ2l6e0dVMJ787em+HStqfWHkzeMjj39oI1chGp73ezCiWafsMOR1FuVZEqFRs+fLP3mrckOjO4ZIbG4MS7lCSMWKSpPVKYLh//rApi2NZcPzPpVYmCcVGhTXSxTOvWqMEmBgYGBguEUYPcDw1wMlyFdm7au0mlL5O7ZODE/9tHvwheG5YM9UZ03R9z+5m89hPXdx1B9L7Ousbi3VLcfQWY4eyELdKNZ8SRbYzT3TjrMTNlck8aF1zSQE/ezi+KAl9Mi+1jYBn0yg5wZm7r+7LWv7emNIn8XliiO5hT43NJdlugUv4IZruUVtsMBdcMN6RO5oIpDApj1BnKQadarnrZb8OLDa/eeGLPeub6wq0nTWGPQ5jcmOjlp/+fKFnuFZbVfdljr1lAv1BjCZjPvJVTUlSkmalRLzOAAACEAAABrQuQohhmA/e/VCS3XRV4+MPNxaqJEIM/4BjUSokggBAIF4MhhHA3EkEEMoQB8bNNMQIMIYLOO5wnEklRZyOViaWLQIQAO6tkDDZoMZd1hJwnqjRiMTNRi0neV6TzR50eLs8YbubyrdVVP2uxNXvvHi6Z98eKeUz/3lwT4LzPvWvtb+dDo1O7eiujAQSSkh+I0LE4FocuXKsq6Gohm7v3fG2V5vvOKJXrYF2Q5fx4rqe5pKmwvz5EI+TdM0TZsTIas99k9Pn4ji6U1C3gObGhpL9WZ3+GuvnBXKxBWN5du0CgmPU6NT6WTibAr+9cHIVOav93IeEAYGBgYGhuvA6AGGvyo4SQ7O+zkAym1QkHUUTLuSak/ksXu7qgwabyx+dGiWpOjlhA/RNA3dKMkyQ27QSIZlHQYAWOpF7BWL663BmbXVRm8C/d/TphgrBUNQOw199I7ODbXvalaQ6Qs2bPfYIok7aorPjVpOXTGrpcK9q2sXqIIb6oFcqHcPXv6BAACUwDP1N5dpULqjielgtC8eK6PYaJpYX154YcTSMz53ccQiFwu2d1atby6LJbEfHji7f2PTQzvaaRrYIuETVtelJPmIUWcNRMa94flYgqaBViys1Ej1UlGhTITDOADANheY90Rpit7RVZ2M0uct3kc3NXBg+PpTOj5o/uSPX4PUqo9vqMqTCvVKKZ/DUogEChFfIRYAAMIJNJzEwkk0nMC88bhaIPy3XxwEatXv/nnzprpiAEAESz03OAMAuLPWqJWKzpms33npHDtJbOuoumJyrG0pH4jgq0qlQ7NOkUwwwYW8x6eMCunatoor0aQnlpyPIfERq6SxpFkvW12pfzMQyI9TtD98z/o6NhuWCvkzXj+KYKfO209Hkhtkwv3bWzbXFBFpMDrnfXNgekWdIY6Sfi78QHlRiWq5hVkB4xNgYGBgYLitMHqA4W/AgiTjDARFHZ21fenNK57zE6sbin/8uT1GleLAuZFfHe17Yv/61Q1Ft8X6WWxtv9fsggWmWDCO/OzI5Sia0muUzw7MbanQXJ73NRTlPbSiSpTTrCDLgr5gx/um1e8OInpPemDB4MUP8w1P9Z5q0dAAYAROUXAogUUx3OaPxvAUAKBeLR+edZ+6MnN2aBbD0h/Z1bGqrriySFOYL5mJRX864f1dVyO4OtsYlnJEEo5I0pNAzlrc4SQWxdPoiK2ttvChu9qSCPTnwek6vapcK8mXCES8d3pscWBWleydVA2cIP73xbP1VUXPDdieemTzdcRDJnUYx6kfvni2vaH0peG5P354EwuGwyj21JXp1UZtvVY5FvR946kzyVR6c1MJIOk/vXxJIuDevaPl4JkxlhC6o6sBiaaHJubmVR9rNM4AACAASURBVNIylXRzqa6tKG+VUXtmwv7oT1/71Ic2khSVIFImLh+JIXfIha+eHqJ5QMRnu10Jv0apEnI/11mzvkYPUawfH+/3BSIAAs2VRfe0VAj5MJ/FW56YfW8Xi4GBgYGBYZkweoDhb0M2ybhQ8S5VMOT3PPT0eQBAeQJ5eGvH4z9/wzwfEAt5mzbWf37Pyo4K/S1aQteytt+ruyBXFdAA9EzN/frkwCuXxtV5um/cvaJMp7zo8FIUvbWisLVAs+QZsn3BiATWPTBrsnj2rqldVV+8rbNqmXMAyxAPdM6H7MglD1mmrbkgvghJpYMJzJ9Apj3hGJ4S8zgNavmwxW3zhO2u0LjNI5EJGkr1XfUlDcXa4nxFrhsn8+nEmO3po1ce2draVlnw076BC+Ywm8MNxpJ5Yj4NgIjL1kmE5WqpXioqkArnkZhCyFUIeQCAo/2TrRVGlKT+cHFqZWm+QsgTclgKIU/EYwu5LAAAliaRFBFIoGkK+Kw+VzS5c3U1YMEvD1h3NxoBgF4dtq8vyVtZrj0/Zn/27Dg7T+WOIQCASgSBS7REKDbQa163pZZMEQaWcH1TeZFSUleSn53/qM37+T8eaSjWfnZH56XJuUND5md9kdUCLkygmztrDh0ewMsLWRD41paWRAqDABRFiN4JK5fN+uCahq5qY/Y8NwzZWualYWBgYGBguDkYPcDwt8QbQ+bDcZDTowAAMBbyWQPRrxwccp0fT9Ng7+q6YRR8Y1v9oN1F0fS25rJbUQXLN6CXY5SjBJ6mSQ709sx7puafPzqg0Sk6KwtqDZrzU645BBfyOY2Fsq0lxdlWvrk44shnT/d7Lk5/ae8qGIZP9s90j1j2r29qrtBdP+04ww2XkyV35PWfeZTAMyOXU48oQ+aESTwdTmKBJDrjDcfx9LaqIgrQT41MKDEYiWMOTzicQCVCbkt5gVYhbq82sGD48oT92RODH9uzcnNbBQBgPOyJxMHTjsB2ubhcJTXIxRAN7JF4IInbw/ETZmckicXTRARNVaCYsb0wkQAT3phUyEuguFLIhyHAYcEESbNgwGHBMEwBAPAUHcUJTSRetcKYiNNhNO2OogEUFXPZWrFwxB3i+YMQBNU3V316dS0SSX7qx69+cFtLRZHqu8+eqarX+Dypb35w0+qKwuxiowh2Zdb92qVJdyQRmA9aXMGWyoKGMt2alrIAO/2MMyxLpNy+aAQjCiKJPRvq2TB8b3tNz4zjxKjl7s6aXCWQ5TolgwAjAxgYGBgY/sIweoDhb8/i8CFvMjkUcv/2wvS0K2k7NcJlsZ5+4oGd7ZU9U47Dg9O3ogrekwGdGXzD8QsiiEbsnsNDM69cntzQUFpjyOPzOMO+qEoiaDcqu4oKWTkvyBNp8plxa42I9+eT/TtX1EM07Utiu+tKLo3bRszuY5dNe9bWtVYWXEcYvKflLHMkuJqWsKQ9usByXbxFmT8oznAihGC2YHSEiNdAwmAC21ZZpJQKbJ7whNVzedJxedwmFfKFPA5JUqsainVKSb5SolIIYQn7OUf0y/WlciEPWjTtM5NzP3+pW8hh/fe/7OLx2EdmbXKu6GICrWezdBKhQsBVCfkqIZ+iaVc8TtNQBE0lE9jr58YevXt1jIXJWOLDZtebE/aHGkvb9erTk7aLJsedbRX72t/e4YMXJ/b8x+8lIt6urbVcAa+6rPD8tCc06XziwU3jNu+5IUsUQZV6FYDoXQ1l5Qa1WsgvN2jwNOEmEgCAN/vsR0IxNJxYrVWtNCr6J92Xhqwf37dq0unjsqDP7liRyYpezIJdZdIDGBgYGBj+mjB6gOHvgsXNjMdCvlKJwhQOtj/ZXc+i1Z7IEw9s2thcBgDIqoIdreVrqoqXb+aC92IWZ0cu02Ow2IY7OmTumXFE0VRzqV4s4A76oioJXy3lbi4uYsGQLYm6sVSnTPzz1y5UlKp2t9YKOZxAAvXGkXgSay7K43HYx/qmRmfdRy9dUxgsfzngvQxeMDKzNAiC+Czuknog+xks0AY0wEgcwekogiEpIohgaJpIoqkgggEAdlYbIQAc/ojZGZic81vmAwkMn/NFAA0aS3UFalltsVYlFVYaNJUGzbjVc2Vq/uUzI2UFqtqS/PIClUomisBopUL75ZHZH7RWKkR8+ups0xSRKVYbSaDffeZUU7n+g1taXhsy/3Fw+s0Acmdd4SMFmu+9cBpLE/vbaz60qZkFw6cHzb8/ePncsEWjlhhKFADiR9yhaBJLEVQwGF/fXrFzZXWEJPNU0t2NZWqJkMthzYUjOElPh0MBBGHj7HkEm/JHXbGkjisAAJjccSxFzHiCn+2qeWBV5cocD8OSZOsFAUYJMDAwMDD8dWH0AMPfEVlHgUrMN0UC9cq88VD08LyzRSr6wakxZ890jUHzib2rsqqg22QPJZFH967Qit+pd3l9bqISUe5PslzrFItVQaZfQTJFrKw00DB0xROe8EeRVHrjisp7DfklUtGaT//83M8+bU6GssnHvjjiiyOuSIIPw/UFGi6HdS1hsHwTH7yXwdcaiRJ4ikxzWRyQkztB0TQMQeDahyzQDzhBxhA8hqfQFBFIIEiKQPF0CMUBAGtKdN2J4AaJGsNSkQQ6NR90BaIDJseMw7+6vjiO4ONWj1YpAQBgeJrLZbNY0FwwXlCi1fO4WokwgiJb2ypVElF9ST5Gpk1W/+8P9XbUFV+enLswNEtW6cM+XAhwRKeQuHzIXJikaUDRnTVFBEmNzLrYLLi53QAAWN9ctbu5qkgljWDIBfP8gXGXMI6sby5VSIQAAD6XRdNAwuew+bBRI/EG8VNmN5sFtRdoKjSSUpUkmMCODFkPXBjjc9iP7e1aX12w1Ma8TdYJAxgZwMDAwMDwN4LRAwx/X2QcBSRNqaRCN54IpuAtBRoRmz0W8pmsvt8P2wP9lnKd8gef2lOgkgIABm3ubpOttVS3zE4Fy+f61vP1nQaLI216zfOv9ZlIAGoNWhKAP/VaIyDVZtA0S7l/eKX3mx/ZWlalXlyMKNMUzBmJZ4QBj8M6ctn0xvnxEYt739q6loqCjtoi/bLrVN66HsgdgJEpAACgaRoAAZt3HYG0QA+ARSfH0kQMTcXwVAjBxtGkAqd5bFaKoGiS8iVRrVTojSG760rEfG7uUXEECyWTpkDoCELtBFCaSK+oNo7ZvN3D1vMjlgSKc7mQK4Il4mjJliYAwDqN8qwlOD42TtP0vv2bFL7o2UuTgKL/aXubSir845G+3Rvriwq1U95wpVaR+QpHNDFIkGoCr5TzR0btX3hgY4qguByWLxUrFMrn/digKyTjcTeU6WryFLF0kgdzBmY9R4bMEIB2tlSsqjSAa8DkBjAwMDAw/P3A6AGGv0e8MaTb7r6ERD9SUVarfOfd/1jI55tPfL9/soGE7lr1duX+QDLxs4OXSermkwqW5IY2cQb66r/QUuMXuAsuzcwfGZqJoqkCjfLPA3Nbq/NeHjKTfO7WCt2eluJStXixJMjgjiYCCRSjaDyOPv7/Dn5+f5dMxL9imj83NMtiwRuayxrK8m+Yf7zMFYFrjLyWe+RtbXCNWJfl6IHc32IEnq2/mUylk3iaougYliIoKomnUyRFURRB0SRFUTSdIkmCm7aG8FKxgA3YFE3jaSKE4JmWZ65g7LjTO+6Ofm1Dkz+G/PLsjH/OckdL5anzE0SaVKytfbC8IE0QQVeIK2V3tpa5fMlijaI8Tx5KYs5Iokgp5Yr5z9o9n6kylErFX3v6aHN9YZlRAwEqFKMmvREhh7O2OL9Zr8pIoytmz9FhMwuGtzWWtZRpr5MfDBgZwMDAwMDw9wSjBxj+TkEI4rcTVgMF1pQW5BYkHQv5AAB+Z+KtC+N8DueOlTVNVfl8Fu/U6OzXD5yiAXjivvXr6oy3bm8t33oGVwcveJayhy9ZnPT13kmxKk8bjzz2yPaCPPlZm5egqDq9rFYnr5FplixG5Eqg/3lmyDM9t6+jpkwlbTTkcdnsQCQ+MO2cdvjf7B7fs7auxqhd0DA4yy2u6DpGPFi02AwCNm9x5ZzrS4Lr5CfkQtOABjRGpnAyLYD5NKDRFJkmSZoGWJpQS4THJ+3/fXb4oYrCbW1lo3P+l3omnj83rIe5Ro38wzvbv/XkiZ0bG5PFmtiYbc+KiqYi/ch8QMTjoGmyXq/Sy8UGhQQAkKaop82OTrUUQGmTPfjkoSsRpUTMZt/dVNJekNekV+FkCgBwdmzu4pQDhqHtTeUZnwBGpvgsLmA0AAMDAwPD+wFGDzD8XeOMJj2RBFjUpiCjCrz26PkRSwLFPrChJY6kvvPMybODs7RG+MC6xvtW125uLOFfO47lhtyE9bz4h7lg7y5OCgA4Mmx/7mCvVCPa3VnTVKw7bbLPJbEBd2hrZUF9gVwj5eW6CxJp8pjTL0XQ7xw4/uIXHiRp4I0hc6FYkVIq5LB0MjFFUWeHLJM276kBMwBgU2t5eaE6VxssZ0X0uz/coD/wVahrjMytx5q1hmkAwLWzOJapBzItxoRL6Y3u6fn/7RmfDcY85yaisWR1i3FnW/k9nfUJFP/BM6c+eeeqnStq2Ou/oJCL6hryP33/RksyRYTRNkNeY4HaoHxX8NVY2OdFU783uT5WWnhszHZw2hnrnXnqqw90VusAAH1m19lx+6GBmd1tFZvqSldVFWWmmtEAaYrgwGxGAzAwMDAw/P3D6AGG9wHZNgVLqoKIO/6r1y65fbGHd3Zo1bInjo58dUfjqM11Zty6rta4ubG0pTT/Jsyy5VjPWZYzOPOkoWkcgiEAQOb9MQRAz5TjzKTtjf6p9fUl5TpVV1VRr9U9FU2I+dwChaBYLQIAQLDAieIrFVK7M3BhxLpnZ31WKnhjiCeWtAWjRqWUB8NGtYwgKX84PmR2WVyhw5cmLa7gQzva26sNerWsTK9UXC15ueSTn13F9d/iL2A5g1EChwAE3vE80EtelMX2/WKxgRC48OoYlMAzqs8ViHZbPYfOjr7hCbBmPLI82d6V1cM29xMf2LihvgQlcCGbd3HM9vypwa6WkiePXJEVy9srC/k8XnOxYVX+O22PAQBjYV/mQ6lYedLsfPxIv5zL+kRnTRpN/enls1/96A4Jj3toYAoA0FVj3FBvfPfsGD8AAwMDA8P7DEYPMLxvWLJ5WSyFTXkDHAJ+9Cev1Rq1d6xteOLIyP/eu2JjjQEAcGHKfmLEkibIm0gtWI6Jn2X5g7MjM2+R+VeDiCAAjg2bR+zetwZn1tUW1xm1IRS/5At5o5hEwG2uLypmQ1Iu69Dh4Q+sb9zQVDYW9i1INnCE46Ek5oomAAB6mVjIZusV4jd7Jn504Own71yNICmT3Wv1hGAI0sjFrZUFRVpFppTn4kmC5Zn4Wd7r4NwdyJBxF2Q0UjbYZjEZtwCfxYUhKBRDZub9s87g2JzvhROD3nBC0VraVlW4USNHUPzkqKXOkPfEfRsyJf8pmg6hyJTV/+2nT0QhfN+uFqsrXKLWbKksajXkAwASaVzM4WWUQKlYOeDyj7iD52Y9NA1ojJwLIlopDwAwavMJWPD+1qJN9caOcj1grH8GBgYGhvc/jB5geJ+xuHnZTDSIkyQAwGmN/OCFcyPTTm1X7a93rlhVU5QZkOlXAMPQnvbK2iLNX8KAuwk9kGFBnZnMb4+PWqacgRcujVXoNW3lhTw+5+lhK0KQAADH6ZGfffXumhItAEDLF6kEwsXnTOJpfwKdCURsvggA4A+Heg99+QEel01RNAuGsBRhcQZsnnA4jg7NON3BuIjPWd1QopGJ8pRinUqqU0klQt57NfHBsgeDa29XrkLIBYIgTyQ2Ox9EEcI05xuccnmCMQCAQiZSKcQKvfKVSftMIPrFNfWVBapBi4vPZm2oK1lXY4RhyBtHLJ7wbCgWjieD3lB+kcJBkbUCWYlE+OyJgX97ZAMAIIiiBEhpBTJPEB9xh0bdoQ5DnlEhMspFNE2yIPDmldm+adfxYfPu9uqPbWnfUH3NwkEMDAwMDAzvOxg9wPD+I9u8LBs+NBby1Svzut3O1+e8rSn2s0f7PaFk4YrKxztrsqqgz+x88dKoUiRcXW14r76CG3LTeiDL4gKUNACnRi3dprkonirWqV8cnGvTSX/SM95WXpAvE6wwaqRSsLmsqEamgeElgvEtkcTz4zZ+LOZyhVc0l3PZLAmfqxYJxHyuXMBTivhJLEXRtETAm3b4Ry1umzt8vG+KICk2CxbwuGw2rJaJV9QaKIpWSARahUSrFGsVErFw6X17r5JgSYIxJBRNhuJIKIYACMRRPBRHhs3OGIJHYlixVlFmUOlUkkqDprZEe37UPjDr/vOcN+LHy4tkl1+/jEnY+1fX3bemrrOiYNIVRgkCTREhBDOIeC+dGwvj6CO7O+fDWD8NPlWt57DJ3zx3eWW7sbkiz+rDJrzRXntge1VhbZ6sq6SApul4Ghmyek+P2s5Pzm2sK+koK9jRXHGjFTAwMDAwMLz/YPQAw/uVbPhQnlQQpTGjWPGGw1Mnl7IhHABgMwd//UbPAlWAEviQxffWwDRN0yurCjc3loDbFO9x63ogS7YY0dU4e9Bnnj9rsr90aZQnVSXNc/t2ddy3sr57xmFNoCOeyJbKAqNKWKGV0oDORhDF08RJV6BDKv7e86cbq/O3N1UXKiWhJBbHU1EU98eRBJ4WcTl5UqGYy5EL+UoRP4GlXuke+86TJz5/b9fG1vJKg8bsDJjsPocvYrL7okk0ksCiCRQAIBML5GK+TCSoNuZJhTw+jyMR8IR8rkzEo2gg4HHEAq5EyJMI+XEEiyN4Ak2heBrBUkkslUDxWBLHUgSXw5qZD0QTWCiWjCN4HMFTaQIAQANQpldpFOJBi6O1snBja3lxnqooTy4TCTK/RQmcz+IOOv0HhmfjKF4oEDzZPe31eeKxRGeZYefK6jKdskanFHM4BqW0b8bx3OlBAqbWtZTjJEsu4sjyxG/NhVbLBTtKjRPu4HcP91owYnOJ9p6W8jVGHQCABjROpk6OWC9OOThs1tbGsrVVCzMEGBgYGBgY/pFg9ADD+xtvDLGHomEMZ4vZZzyJb7W/XYM/k2qcqwr+paZ4e0clTqb4bN6pkdmvHzjVPeW4Z1Xtx7e1r60x3KIquKGVn2WZI1ECpwGUIlM8Fge8HVgPnZuaO9A9MjnvF/A4rWUFBo1sY23JhRmHC0sPesJri/P0Sn6tTk7R9HPmwANlBdVy6epP/vT0Tz5pw6JZqZCdQCiJRRAsjqdd0USKIAMJ9C0sPP507+/+/Z5Sg0bC50r4XBoAFE9TFCUWvL0/CQT3huPeUMIbjruDMac/emV6Xsjj8jgsXyTJZbMymmExCJ5Wy0SBaFLI49zZ1VCYJxMLuAIeRy0Tq2RCtUwEAPBHk8EI4gyHg1HEoJZ/44/Hnvv6PxW8u3bqgNP/+rh1cD5QKRbQAPL4IidGzIpVVXvyFE9OOd98oKtUJBfzOJMO36HLE/PR2PqW8iK9YtwRqitWy4Vcsxf7xawrafdhqXSTTrUhX/nU4b6vP7h5bV0xRuJnxmx9s67zE3Mb6oo31Zdep6EYAwMDAwPDPwyMHmD4R8ATS55yezmJdJsxv1T9rv5lIEcV4OX5d9Yb9lYVxyPIt588fmHUtm5bh9/v39VSdnvdBddhmXoAXB25oIA9DQCggTsc6zW7Jl3+N/un1tWVVOjV62uMR0dnz3tD1kCCJlkYnfrm7ha/M/jT5y7+6wNr7l/dbEuG84ViNU+45ASSeHo2lviJyeHrm9zTUaORCGAIYsMwi8USc9kKIZ/PYQu5LAGHI+KxaRok8HQylZ6yuJ85PlhbrC3JVyjEAo1czGbBCokgU8IoHEfCcfTqv6gzEP3TW33/+ZFtD2xtXfT9AABA0zRKppAUQZEQkiLcvsjjvz70p8fvE4sFg/O+OIqHEXw2mkRTaTUXTqepwRknmyP42Lq6jsrCrw3PfK7K8J0/n0QK8x6qVPcN2H1IsqXBoJFJrP4EB7AbjXmTvrAlmHAmkL4U2Z6mAQAz3sSDTQUvH+n93AfWT/tC5yfmtjSWrqkuYhwCDAwMDAz/p2D0AMM/Du5Y0hW+ZrMCmzn460OX3Z5gqqpIORfY0l6pUsleHHN+7Y5mHgs+NWZ5o9+0u61qfZ3xtmcX5LJ8PQCWkXwMaHBseGbaEzoybKZpoFWIW0oLkyniuQEHEAEAwKjF3Vauv7PRWKwScYRknToPAFCnyFswh3iaOO0OlgDoUz98+bv/tssgViiEfAmfm8DTMRRPptIERUeSGJomkikCAgAlyHASjSP44UuTG1rKdzaVCXkcDgxLBVwYgvhsFp/DBgBgaQIjSCxNYGlSLeZ//pcHP7ajo9ygkQq4AIAYmsJIIoamoiiOpFNomgAURFA0QdORJHYgHFGafVVFmiKtwqiR//bSRADB91cVsiCod9rBYYEH17XQNHS4Z/wDW1ovReJrCyXdg/afvnSxpkSxqrXUoFFMOOJz0bg9jmlEgo3leqNcUiATFkrFfiRBk9CFKfusJzgeQIcdoQ////buOz6qKu0D+HOnT2YymUzKpPcQCKEHpEhTEREREAhgQZR3wbIWbMC+Kqy7ru661uUVsWNFBEEIoemiIEXpJJBCEtJ7Mpne575/XBhCJpmhJLT5fT9+/GTuec6Ze0NOcp+5pwyKv61vItIAAADwT8gH4EbjfbOCmgrNu+v25PxyYmCvWHvPaNLTf2YNH50WzcVsO3pqT0GFi2WH9Yy5uXesqBv2k7qcfMDN86EBS1TXovujuPrw6dofDxVWNuli4uNVAXz9qYoX5t0RGR50tEazv7xBwOdlxoSGB0mUAYKYYBkRlbcYnQKB2cm7NSr0VEntCx9kvzb/zrC4oBRFMJ/heZ6D1eHUmqytTucXxVWTYhTP/OfHr56eLRGLWowWo81udzodTpfRZrc7XW1PuMlgPuwwCmsNdqOtX4+YELlExOcrpCJlgEjI50mFgjC5TC4W6S02vcVmYNlvS2vGhCtLaus3784t4Yl4DDOtR/TO40UVtdq7MlOnDO51U0rMKX0TEa/wdOO6nSdvH5YSrwxa9tl2G89hjokMjVGo9c6eUWGjEyJ6RqjCZJJGgzlULq3WaMqaWvPKG9f9fnLq4PT0mPCMOHVY4LkfEgAAAD+EfABuTG1mGwfEBgdyB012+7GaWrlczDDMkWPVb6zdXVXZHDMmIzlE8fjQ9NvSzgwW31dYub+48vt9udOG9k6LCr0y44g6dCHJw5ncgGGkfJH75fZjpbtOlm08cIppMk0e3/+mnnHqIHmYUl7VrKto0emITmsM5Rq9SMAXCwSmYPmcpJDwAPHBY2Wfbfhj7pQhY4emmK2O+KBAtTSwwzct0hp+b9Rk8AQL31v/6jMTR8TFO1wuAe+8fcPMNofZ7rDYHRa7w0Ds9uqmnsSu3LL3tUfuDCRRsEws4PEkfJHFaQs4/3vbbLa+cLDwoYSIZ9f/dri4+skR6UeLqwLEwmH9owbGx0pEgiil3OZySp3iU2U11S36538vUpfXKUMkaX3j+UKBRWsa0zN1aHKUSiqODg5s0Bn3FJbZHa7TTc0FVc2Dk2P6J0QO7xFHAAAAQETIB+DGVq8z1WoN5S26eJUiMkiuVgTobdZygzZDFZ7X0rDqVFW6mfdFzu8nS+rVI3oRUWZM2L39km9Li63VGpQy4e4TlQeKqzceLLhrYI8BceG3DkqhK5sYsCzLdLCUaAdYIp3VwBJx84/dMw1qmrUHS2vqdMZj5XV1GkNEsDw1MjRQJkkIDYoPVZ5u0Owvr/9Ca5LUtvB4jJDHtLboVSGKu/vEpYQEGlzm2KAgdWCATCSwuZxt3+5Yi7WfSlxX2rpkZc5bf747OFZORCFiSWSAwvPcHC7Xxoq6tCB5oNPx0OurVzw73SYhIlJLA8IkciIyOaylei0XnFfT+v7ugmP1GqfG3jtFdeJgoVQsXDRjxMQ+KYWN+mKN7rfSepfTZXWxtTqTuk7jcNp7DYhWRChbWywV9ZbRiWFb95xcPGuMPEBQUNV8rLy2rtVwS+/kXtGhAxIjFVKJ5+kBAAD4OeQD4BcqNfoGnYnOLk6aoQo/0txaqjOlBQmIKPdU3eptR3/eWxggFUWMTCeiO1Oi7xmYODg6ok5njAyS5xwo/HDzH5tPlswe1TdreDr3xICubG5wUSwOG/cFSyydXZ6IiE7VNhfVNde1GvYXVda1Gqx2R73BNKRHrDpc9d/8+r6R8qMHCxfPvV2tDDzVoito0LZarHaniyEmUCKUCPgJKnlqhOqb8oZxKsWE1Oh3Nu5a+1Ne1u19g2NDAoR8O9kj5Yq4YDmfYViGrdWaTDaHyeawWB3H7Y4efMbaZFi9/dis2/uFxYaopEJG6FCJA1uM1jqtmWGZX0trD1Y0E1FIkGz//hMOg1kplzoGplqL6zLi1cmhiltTohOCZL3Cg7cfK/7Lh1sY1vXQ5CGDe8cU1+gatQaN3mS1Wk08SZPRmqYQZCbHJKuDM2LVYQqZl28UAAAAIB8AP8ItTqq32EJCJfsbTLdEh/UIknNF3OyC3Nyaj3P+YIl396g+LUJ2Q17lxMTISb0TVvy4LzYufNupxqUT+uWW1Ww8WDApMy0zKXp0nzPDTq7ZxIDTbt/fs+kB22wwnayuL2/QNhutewpOF7WyDgc7vV9UZHCgIkCsCJCEyKVhQXK92VqvNdS3GptNlgZillc0ZLLUYjQTUXF1U++4sCiljIhxulx8Hi9IImRZJkDEN9mtKqm4Rmdq0jia7RYiEvF5RVVNoUpZj/Aghser1pq48znV1DooRqWzuIQsW3jslEkYKA4LeDQzbWBMcFmr+e3f8+f0T8rqnSDl8apbtD/8evxkQwMpJSq5NDpQaXM4lSJ+rEoZqggYmBAVF6YMkl7T/xYAAADXGuQD4HfqtMZ9ZbU14qj/aAAAIABJREFUPOf42MgU5XnjW7isoL5cu3Lz73/kVYy7KaVHQtTnm363x4VGhik1TbZ/zbipX7QqMki+7Wjx4dKaDQcKJmX2GJwSPbxXtIDH5xq5xnMDIjI7rAwxVpedZdm2+xsQ0cma5hMVdbWtusKaZo3BrDVZLTaHIkAcLJMoZVJ1cGB8RHB6dNjmE+VHK5orG1ry9uXPnTFicHJkoEQkk4jEAkGQTMTnU5PR6rS4tCaLxmA52aT/qbCBiOYMS3Q4nB/9sPfxmaNcDH1xtMRispj05vraJsbuSI8LLa1rnXVz322/5i24Z3i4SrGzpDG3RptfXu+Ik4kLKgaHhoiVwpB4panFdueQ3sEBkqRQRWq4Klgm9XHBAAAA0DnkA+CnynSGRq2xpkUfr1KEyKXuOcd0NisgoqrTzR/8uL++xTDr9kyeUPBUXvkYuXhG/6S0MGVGhMpss7Mu9lhZbVmD5ru9x6cPzUgMDx6SHK0KOjdI/drPDTjtHiC4ifkihph6raFRZyxraG0yGK0Ox97CivImbVCAtMVgbnWKFWSRSHgxKgWPx1Q168jFE/J5DJ/lEb9Ra1RIxQ5y6s1WlmULdPzkiJDc+hoS8IhI3qx1ulxEZLY7+DxetCowVClRK2T1WqPMyBplZyZO5B+u4gt4Q0an3ZmeMKpXUlmrodVkvT09Pj7kvH3KAAAA4NIgHwB/V6nRNxvMbeccc8f1Nmtebb1cLi4obdi1vzjn96Kg8MDZtwyMkEv/aNXXtBoDxMIxyVHxSlmP0CCWnLllDbnl9RsPFBot1j7x4XcOSBvTO+F6zA3acucJbZ8nsERWp71tmIQvJCIxX2Sy2rUmi8FsczJOjd5aqdEaLDYej19Y35JT2VR8WmdhGGFjtdPpnHxT+qj02MggeXiQLFwpCw+SOVhnvU5vMNvVMvnHmw98sul3p4u9dVTqrf17ZPSI/LxCO4yhvjFh8aqgtsvIAgAAwGVCPgBwRps5x2eWKLU5nUXaZm4xIiL6x9bD9tMtxwsq05LVN/dPnTYsfV9+RY3DUaI1DooJSQ0JSlYFma22VTsOf7f9cLnN3DdeLRTwJ2X26B0b3va5gc3lEPEEdL1lCKY2zxACOjrztg8ZWKI/KuoXbvxdKRU3GS1EVJ17Wmc039o/hZ8Y+e6tg1LDle2qsyzrYtlfT5Zs/O3Ef/8oHjAwdlBG7NAe8SarQ2u12x2OoTExMUo5AQAAQJdCPgBwnrZLlKpkkhC59LRBk6EKP6HRbimpHZ+oYhj641hFQVHd1v0FYwb3SE+MuH1g6uHi6jqXM7dBu7+8fpCLCVMHbyqonT4o/r7hvX85WVbZ2Hq4uNrFsmMzEpPUwb3jQntGqYnI6rR5nsC1kCSYPIYPWZx2ldjHvTjLUo1Gt6ewYktFw6Hq5rTwwN925WqNFpYlizAoZ+FdE/onEdGemuYmu2NyvLpt3b35ZTsOFO08VDx4YHy4Wt63d3SAS6jTOVrNtoRQRVJoUKQCmQAAAEC3QD4A0DFuHFFZs1YlkyiCRdkVrfckRKSrzoxZ554YuBODcUN73tQ7NjM17pMtB975ZmfyHQOJyGXhhQQLxyVHqUWCjOhQItpZUFHd1Hq4pFIuEgv5/NG9E2JDg5Ijw1PCFSo5NwaGtZyfJFiddm7KL3VDquB538/p8ON/k8Pa4fETlQ1Hy+p+b9adqNc4apr0ZmtRTVNqZMjQnnHj+iZOyey18UDB5t9OPnxH5rD0eK7KmoKKCQkRgRKROw0YMTgpJSZ0cN84iV1Q1Khp1FuSw4PighVxqg42NAAAAIAuhHwAwIeKFt2J2ubNmsZJIer0CFXbmcd0NjE4cLziZFHNnmNlza2mgT1jM1Ki0pMjs622+dHhLoY91aI/XttcrzcrxAKpUBgl4o1Oi7ba6ZeCivzyhqJmq17TqDNbwoPkdw/qkRyhig0Nig9TJoQFs8RanTYJX8TtStbZrF8390ikC2F12pW+PvJ3Y4nMDquUL9IYzKfqWgqqm3L15pIWXUtpjdFqq2rWRSrlg3vEjkyLHZgY2Ts23F2RyyL25ZVt+6Nw2cPjuYM5R05t2nsyt7BqUN+Y/inRg/vGRQjldTpji9kiEQgig+TtvskAAADQfZAPAFyo8hadxmjhhhIpAyRhcqlMLHS4XAIez2y3/95YESKWN2oM9ZW6gvKGbQdOWVjXmAHJNyVHp8WFBwVKxUKBxeUqbdE1myx7TtfYXFTVrOdZHScOnsqaMDjnZO29NyXKRMKjpdXl9S2VTbqaFt3ApCiHy/7g6IECHk8ll6qV8vAguVohk7ddYp8h9w7GZof1op4h+Iwva9CUNbaW1GtOWezHjp1ysg7GxdObrK0ma6mJlyynxVNG9IgO/bCm+Y2BPVSyDnb/NTmsUoF42x8FL3+y9bFpI8rrNDsPFUfHK50RwQvH9E0MVDboTDqrrUFnSggJajufGwAAAK4M5AMAF61So9cYLTVaAxFFBcmDZZLY4ECDzVZmaHXHtOjM3xZVpjt5dTXaPcdPE9EtA1P6JEbelB7nJCI+KxKIC8vrX1iR/efpI8ustjUnyxxWfrCCp7faiSg5RJEYHJgql4zoEbOrsPxEeUNDi6FBa6hp0bWarA6nKzwoIFKpCAuSxYUrk8KUQVKxIkAsl4iC5EIRTyQVCSRCgVgoEPF5IqFAJOALBXwisjuctrP/WewOrcUkFohadGaj1Waw2HQmq8XhaDFZ9xdWEJHOaCWi0ECpTCJWB8v7xIb3TwrvFaXOr2osr9U8//6m5U9PHds/mYh+LK/PCA5M9riVL61rLqlv2bLv5P68CoVaGqlUDE2PHzEgkTWx5Q6zxuKwN1sGxoW3W+8VAAAAriTkAwCXzmi1NxrMrSZLeYsuJlgeHCAJCwwoN7aqpYotVQ3DwlWpQXJuQFFDi76guKG6unXP8dMyiWhI75gJg9MbNIZnl2989ZGJI/sllWr0H1c2TA4JSg9XpoQGFTdpS1t0DQZLabO2Uqv7vaKZiAyNOltZvShBXWtgiSg18cxkhuq8UrPVRkQSkTBJrSit11lsdiKy251Mo4kNCxAK+U4XK+TzekSFSgRn9k1jieQSYYRK1tBq1pusJqu9b4KaYenmjMS1NU2LBvbITIhQBLT/yN89i2DZp9vGD0kblpFARIXNuq/Kap9PT1BIxfsKyn89WvLb0dMGszUhOWRMRjJPxBMo+IkqFY9hWvRWg8Mu4vHCAuQKhTRDFUwAAABwVSEfAOgabecf26XMN6dbnu2dmK4K5AYUcTHu3KCmvnXvobItewrKalpS48Kmje07e3zm4v8e/deovhmJEW2bZVmyOK1WG1VoDZpG3aNvrXt/4T0BysCVFbX3R4WOTY76qajyt7L6Or2p3mCu05tildKCBj1XN9Bsy9tbEH9rXyLKczJ9BTQ/PS5SKVcr5eoguTpIxhLV63UNGnN9q8Fqsv318x2vz79z8ojeeRp9hcF8Z5tpAG2ZHFYpX7z8h9+2/1H4p7tvuntExu78slU/Hc4/VSdS8CYP6U18JiFalRIXGsoLkEmEJY2trRZrtcaYEKqIVAao5TKZSNRhywAAAHDlIR8A6GIVLbqies02ra6HnU0MDVIrAmQiYXCAJFgmsTtdxJCQxzPb7Lvqy4koUhpYWtVcWtW8+UC+jCfWakwarTE8WK4ODuybEhkTqkyJDkmJDnWQo6y69URpXUVDKzcr9x/Hiv/SL8Xz3Y1WR1mrptXsdBosL6zIXpg1aubovjtLa7+qbnw+I6lncAcTiN2zCIY/8t7eD57kDnq2rzNaKhta9XZbVYvmtyOnN/xyollrTIxWKcID7h6aLhAKTwnYrJjozKQou5NtNJo0RkuL0cJjGPeQKs+3BgAAgKvuQpciAYALFKdSxKkUtxERkcZo0ZgsRpu9tElrtNllIqE7PRgZEW+2O2ot+in907W9bCeCgp5OV3PrCFXXa2satA3NhuLapvW7c7VGs8PliAhWxkUG3zUsnYh255f/drR0r0AYpQpUyqXKQGmr3txqOPNfg1avCgyw2VwWk3Xm6L5E1F8d/FV1o1p0rr+brXaN3qTRmzV6E09AJrO9qdXUrDN98OO+kX0TWyzWEp0pr6Zp+96Tx0/VNGmNja0GIkqODomOUfaMDQ8IES98ZExEmEIZJFUwYrFQUG+y1jUYy7UmXWGlWMCPCpJHKOR9osJkYmFH3yQAAAC4VuD5AMCV404P6nUmo80uFQnkYpFCKag02nIqW+cmqJODFQEiAcMwQh6Pzo4vIqLSlqbTlRqH3klEVY2tR07XBIsCNBoTQ6zFajeaz9uyIFAmttptRrOzsk7zxhOT7A5nYUVTdavOZnawLGu22Awmq83hPBMcIOYJyOl0tRqsFruDdbBxEcFMIE8sEoarFD3CVeEqmTpUEREaKBLwRSIBNwSoxWhptVq1ZqvWZLPYHAyRRCyQSvmxCmW0QoYcAAAA4DqCfADgqtEYLc0ms8Zkrdca91v1iTZ+jDJQKhKoAiQiAV8qEkgFAqlIIBTwHC4X9zCBiJLlwU16k5axrjpV9WBqDNeUzmDRG61645n/m1irQWMvrG0MCpDGhQQJhHy5VPRbs3ZycpRELBSLBGKRIEAiDJCIhEI+EVUbtXR22dKoAMWp4oYWs3UfX/hIvDo1TElE9XqjxmhpNVkdLhePGKlIECYPkIoEgWKRQiqSCPGkEQAA4HqFv+IAV02wTBJ8ds3+u4iISG+x6S02o81uczgbmowWh9PqcBKRWMAXCXgBIqFMIszXNBGRjRUaHEKNzhkuFQt5vKBAqUjJEwn4Qj5fJOBpzJZKg47HEBEZzPYQqVRjs1fVaBIjVeESiVgokAj4YqFAIuRb7E6r3SEPEFsdToPdZrU76zRGuSpAr2clJsupuhaD2SoS8JVScZg8IClEibt/AACAGwyeDwBc62wOp9FqN9jsZpvD6nBozVaHy6VzWg8a7f14AoVU5HKRi2VdLMty/ydiWdZsd3Cdm8cwfAm1mM35DucARhIqD+AxDI9heDziMTw+w/B5DJ/HE/AYuUTE5zFiEU8mEgUIBVgFCAAAwB8gHwAAAAAA8F88XwEAAAAAAHDDQj4AAAAAAOC/kA8AAAAAAPgv5AMAAAAAAP4L+QAAAAAAgP9CPgAAAAAA4L+QDwAAAAAA+C/kAwAAAAAA/gv5AAAAAACA/0I+AAAAAADgv5APAAAAAAD4L+QDAAAAAAD+C/kAAAAAAID/Qj4AAAAAAOC/kA8AAAAAAPgv5AMAAAAAAP4L+QAAAAAAgP9CPgAA0F5DQ8OqVauysrL69OkTGhoqFApDQ0P79+//8MMPf/vttwaDwVcD0O1cLtemTZsmTJhw7NgxX7Fdg2XZHTt2zJgxIyMjQyaThYSEDB069G9/+1tzc7OvqueZNGkSwzCLFi3yFXhGZWXl6tWrbTabr0AAgEvEsCzrKwYAwF80NDT84x//WLFihZfbr4CAgMcee2zRokWhoaGdxUC30ul0c+bM+fHHH4noyJEj/fv391XjcjU0NEyePHn//v2eRQqF4pNPPpk+fbpnkSetVhseHm6z2Q4ePDho0CBf4URER48eHTBgQGRk5FtvvTVr1ixf4QAAFw35AADAGVu3bp09e3ZraysRhYaGTpgwYezYsTExMSqVqr6+vqKiYt++fevWrTMajUQUHh7++eefT5gwwVer0MVaWlpGjhx58uRJIho0aNDmzZvVarWvSpeltrZ21KhRxcXFPB5v5syZM2fOTEhIqKmpOXLkyHvvvVdfX09Ea9asmTFjhq+W6Msvv5wzZ05iYmJJSQnDML7CiYgKCwt79+7tdDqJ6MUXX/zrX//K4+HZPgB0KRYAAFh2+fLl3P1ZRETE8uXLLRZLh2E6ne7tt9+WSCRExOPxPvvssw7DoJu4XK6JEycSkUAg+Oijj5xOp68aXWDu3LlEJJVKt27d2q6opaVl0qRJRBQYGNjQ0NBh9ba44EWLFvkKPE9eXt4tt9zC/dX+5z//6SscAODi4PkAAABt2rRp8uTJLMuOHTt29erV4eHh3uPz8vKmT59eWFjI4/H++9//jh492ns8dJWff/75tttuI6Kvv/763nvv9RXeBQoKCtLT01mWfffdd5988knPgNbW1j59+lRVVS1dunTZsmWeAW46nS4sLMxmsx06dGjgwIFeIj25XK6srKx169YJBILCwsKkpCRfNQAALhSeOQKAv6uurr733ntZlr3tttu2bdvmMxkgooyMjJycHKVS6XK5HnjgAYvF4qsGdI0VK1YQ0fjx469MMkBEGzZsYFlWJpP96U9/6jBAqVT++c9/JqLNmzd3GOC2adMmm82WlJQ0YMAA75GeeDzeV199lZCQ4HA4li9f7iscAOAiIB8AAH+3dOlSg8GQkJDw/fffC4VCX+FnJCUlfffddzNnzhw+fPiRI0e8RB48eHDRokWZmZlqtVokEkVGRg4aNGjRokUHDx7kAgoKChiGaTeanDtSUFBgMplee+21zMxMpVIplUpTU1PnzZvX7h2Li4sXL17ct2/f4ODggICA1NTUBQsWHDhwgDrSfS23dWlX7R3Lsr/88gsRPfjgg56l3XRdR48eJaKhQ4dKpVLPUg43M7i4uLizAM73339PRFlZWZ5XvWXLljvvvJObrDJq1KgVK1ZwEwbakkgk999/PxFt376dAAC6kLfBRAAAN7qKigpuduaaNWt8xV608vJybrB7Zx588MHm5ub8/HzPX8jckR07dqSlpXlW5PP5y5cv5yI//vhjbj5DOwzDLFy40HOEPVfaHS1zLueqvWtpaeGq5Ofne5ZyRV1+XdyU8dmzZ3u+o9vOnTuJSCqVeonR6XRisZiIDh061K7o8ccf9zyZkSNHWq3WdpHcAkcMw5jNZhYAoItg/gAA+LXly5c/8cQTKSkpRUVFF/VZtU979uyZPHkytzj9kCFDpk2bNmDAAJVKpdFojh07tn79+j179hBRenr6ypUrR44cSURtfyFzJxMaGtrU1NSzZ8958+b179/f6XQeOnTo888/P3XqFBGtW7fOZDI98MADRDR48OB58+b16dPHYDAcOnRow4YNf/zxBxE988wzb775ZtsT676W6bKv2rvS0tLk5GQiam5uVqlU7Uq76brMZrPT6RQIBB2mEJw333zzueeeS0tLKygo6Czm22+/vffee5OTk0+dOtX2J23t2rXcwkTz5s2bOXOmRCL55ZdfXn/9dZPJtGTJkn/84x9tGykvL09ISCCi2traiIgIAgDoEj7yBQCAG9odd9xBRM8//7yvwItTWFgYHBxMRBEREZs3b3a5XJ4xP//8c0xMDBFFR0d7/kJ2/5aeNWuWwWBoW6TX67lxI0FBQdxN6osvvtjuU22n07lkyRKuhQMHDlyZli//qr1zP1LosOXuuy7vrFZrRkYGET3xxBNewqZOnUpES5YsaXf81ltvJaJnn3227cGPPvqIiKKiotpdqXsvvMLCQhYAoItcxC9iAIAbT2pqKhGtW7fOV+BFcLlc3CffcXFxlZWVXiLr6uq4D7w5bYu4I6GhoVqt1rOi1WqNj4/nYm677bYO748dDkdKSgoRLViwoO3xbmq5S67aO+9DjLrpunz661//SkR8Pv/kyZOdxej1ei4POXz4cLsiLoPau3dv24Otra3Tpk2bNm2a57Vwl9DhiCkAgEuD+cQA4Ndqa2upzWfVXeKnn37avXs3wzDr1q3jPgvvjFqtXrt2rZftpR5//HGFQuF5XCQSude+fPLJJzsc6cTn8xcsWEBEJ06c8Czt8pa78KovR5dfl3fr1q175ZVXiGjp0qW9evXqLCw7O9tisaSkpHhupcyd7eHDh9seDAoKWrt27dq1azu8FgCArtUtv44BAK4XLpeLiAQCga/Ai7BmzRoimj59emZmpq9Y6t+///Tp0zsr5QaidIh7skFEffr06SyGm1lbWVnpWdTlLXfhVV+OLr8uLzZs2DBr1iyn0zlu3Li//OUvXiLXrl1LnawsNGbMGCJasmTJ2rVr2QueSgEA0IWQDwCAX4uKiqKzTwnaKisrYy5G2wEwu3btIqJp06bRheFGlnfIy7ZT7s/gvcwr5Z57VFVVeRZ1ectdeNWXo8uvqzPZ2dlZWVkOh2PEiBHr16/n8/mdRRqNxpycHCLi5g2388Ybb0RGRur1+hkzZgwaNOjjjz82Go2eYQAA3Qf5AAD4Ne72sd1ojUvQdo3LmpoaIuJGol+ItrlEOwEBAZ0VuZfD97LuDVfdcyV76oaWu/CqL0eXX1eH1q9ff88999jt9szMzM2bN8tkMi/BmzdvNpvNqamp/fr18ywNCwvbv3//pEmTGIY5cuTIn/70p+jo6Jdfflmv13sGAwB0h658RA4AcN2ZOHHi9u3b165d+/LLL7c9Hh0d7Z696kVDQ8OYMWPYs6vEcLgxSA6Ho/N65/F593ld8J+r/vbbbx944AGn0zl06NAtW7YEBQV5j+e2IZsxYwbTyYK2cXFxGzduLCkpef/99z/88EOtVvu3v/1t7dq1O3fuVKvVHVYBAOhCeD4AAH5t6tSpDMPk5uZu2bKl7XGhUNjzAuzatYtlWYZh2o6Gj4yMJKILSSc4hYWFvkKuA35y1Z999tl9993ndDpHjRq1fft2pVLpPd5kMnGDhbKysrxHJicnv/nmm5WVla+++qpAIMjPz3/uuee8VwEA6BLIBwDAr8XGxj788MNEtHDhwosdt11RUfHuu+8S0dy5c91rWRLR8OHD6eynwhfihx9+8BVyHfCHq16xYsXDDz/Msuxtt92Wk5MTGBjoqwbl5OSYTKYePXr07dvXVywRkVKp/Mtf/sJtiLZ69Wq73e6rBgDA5UI+AAD+7u9//3tgYGBhYeGsWbMufLiLXq+/6667mpqagoKCuBUn3bhPgnNycnbv3t1J7XN+//33jRs3+oq6DlyBq3YvUWoymbxHdoe33377scceI6IJEyZs3LjR+5wBN++DhXJycv7+97+3ezZFRDNnziQih8PBzcpw4wZlAQB0LeQDAODvIiIi1qxZw+fzs7OzuVt8XzWopqZm/Pjxubm5RPTFF1+0W25/4sSJw4YNI6KsrKzS0tKOmyAiorq6Ou7O7wZwBa7a/Xn8hfwbda1XX331mWeeIaLJkyevX7/ePTXZO5PJlJ2dTZ0PFjpx4sRLL7302muvtTtusViIiM/nt1sKSaPRcF+IxWICAOgiyAcAAOiOO+749NNPBQLBtm3b+vXrt3LlSpvN1mGkzWb78MMPBwwYsG/fPh6P98EHH9x9993tYhiG+eSTT5RKZV1d3ZAhQzZs2NDhuvK//vrrkCFDysvLvSx/eR25AletVCq5T9k914ftPizLvvTSSy+++CIRzZgx4/vvv7/we/GtW7eaTKa0tLTOdjwYNGgQEe3evXvHjh1tj3/yySdE1LNnz3bv1dDQwH0REhJCAABdBOsLAQAQEc2ZMyc5OXnGjBk1NTWPPPLIyy+/PGHChDFjxsTExKhUKq1WW1VVtWvXrs2bN3M3o3K5/Msvv5wyZUqHrfXq1Ss7O3vKlClNTU1Tp07ltt/KzMwMCwvT6XR5eXk//PDDzp07iSgtLW3lypXcplTXu+6+aqlU2qtXr5MnT+bk5Nx0002+wrvGCy+88O9//5uIRo8e/corr5SXl3sJbrfcqs+VhcaOHTtu3LgdO3ZMmjRp4cKFt9xyi0gkWr9+/XvvvUdEixcvbhd/5MgRIgoPD7+QqQsAABeKBQCAszQazdKlSxUKhZdfmzweb/78+XV1db4aYysqKiZNmuSlqWnTptXX17vX5GlblzuSn5/fWeMd1rqQmO5rmXM5V+3T008/TUSJiYlms7ldEddal1/XRX0S37Ypk8kkl8uJ6Pjx4x7vc05lZWWHeyrPnj3b5XK1C7799tuJaMaMGR02BQBwafB8AADgHKVSuWzZsmeeeWb79u1btmw5fPhwXV1dc3NzUFBQRERESkrKxIkT77rrrgsc6xIbG7tx48Zjx46tWbPm559/Lisra25uVigUarV69OjRs2bNGj16NBG1tLT4aul60q1X/fjjjy9fvvz06dMPPvjgt99+655hfA3aunWrwWBIS0vr8HbfLSYm5vDhw//3f/+3adOm/Px8i8UyYMCAOXPmzJkzp91Tha+//nr79u1E9Oijj3bSGADApWDYjsZ3AgAAXJv+9a9/LVq0iIjGjRv3zjvvpKen+6pxddx3333ffPPNSy+91G75qUvgcrk++eSTxx57zOFw3HXXXRs3buxsABIAwCVAPgAAANcTlmVfeeWVZcuWERGfzz9x4kRaWpqvSleaxWIJDw/X6/W5ubnenw/4VF9fP3HixEOHDhFR7969d+/eHRwc7KsSAMBFuHaftAIAAHhiGGbp0qXff/99TEyM0+k0m82+alwF27Zt0+v1PXv27N27t69YH2pra7lkYPLkyXv37kUyAABdDvkAAABcf6ZPn15aWrp69eqLmu97xRQXF48ePfrJJ5+8/IE9DMOMHz/+xx9//OGHH7zPdAcAuDQYLwQAAAAA4L/wfAAAAAAAwH8hHwAAAAAA8F/IBwAAAAAA/BfyAQAAAAAA/4V8AAAAAADAfyEfAAAAAADwX8gHAAAAAAD8F/IBAAAAAAD/hXwAAAAAAMB/IR8AAAAAAPBfyAfgKrBYLIyHgoKC7qjlyel0jhgx4hKqy+VyzxPwNGXKFF8tAVwHnE7nsGHDGIYJDg6urq72FX6eS+5lbj/99NOUKVPUarVIJIqPj58/f359fb33Ki+99JLXrskcPXrUewsA16mr/veR43A4vv7666ysrKSkJJlMplAoevbs+cADD2zcuNHlcvmqDVeTwFcAwI3m/fff37t3r68oAH/35ptv7t+/n4iWL18eHR3tK/w8l9nLnnu6KgR/AAAQ8klEQVTuuTfffNP9sqKi4qOPPtqwYcOXX345fvz4zmodP368syIAuBCX03MPHz58//335+fntz1YWFhYWFj41VdfDR8+/NNPP01LS+usOlxdyAfgKhCJRKdOnXK/TE1N9RLsdmm12ikvL1+yZImvqI4dO3aMZdnOSm02280336zRaNLT0zuLAbhenDx58qWXXiKie+6559577/UVfp7L6WVElJ2dzSUD48aNW7BgQWJiYl5e3quvvlpUVDR79uzCwsKwsLAOK3L5wGuvvTZ9+vQOA2JjYzs8DnC9u+p/Hw8dOnTLLbfodDqBQDBz5swpU6YkJibyeLySkpKNGzd+8803e/fuHTNmzG+//ZacnOyrMbgaWICrjftRzM/P9xV4nkuo5XK5JkyYQG1uCy6qundfffUVEQkEgqqqKl+xANc0u90+ePBgIgoLC6uvr/cVfp7L7GVWq5W7XZg+fbrT6XQfNxgMvXr1IqL58+d3WLG1tZV7uz179nQYAOA/LqHrXU7PtVgsPXr0IKL4+PgjR454Bhw/fpxrNiMjw2azeQbAVYf5A+BHvv766y1bthDRihUrfMVeHJZl33rrLSLKysq62JEVANeaN95448CBA0T0wQcfhIeH+wo/z2X2stzc3JKSEiJ67bXXeLxzf6FkMtnf//53ItqxY0eHFfPy8rgv8IAO4BJcTs9dt25dUVGRQCDIycnp37+/Z0CfPn22b98uEony8vJWr17tGQBXHfIB8BcNDQ1PPfUUEc2ePXvixIm+wi/Orl27Dh8+TEQLFy70FQtwTcvLy1u2bBkR3Xfffffcc4+v8PNcfi/jxvyo1eqUlJR2RUOHDiWi06dPGwwGz4q5ublEFB0drVQqPUsBwIvL7Lk//PADEd15551esvGePXtyIw+5YLjWIB8Af/HUU0+1tLSoVKp33nnHV+xF4x4OjBw5MjMz01cswLXLbrfPnTvXZrNFRka+9957vsLbu/xeFhUVtWjRov/93//1LBIKhdwXzc3NnqVcItG7d2/PIgDw7jJ7Lrdyl8+19UaOHElElZWV3sPgqsB8YvAL2dnZ3DPKt99++2LHP/hUVFS0adMmwsMBuP7985//PHToEBF98sknQqHw9OnTYWFhcrncVz2iLupl48eP72wFod27dxORWCyOiIjwLOXyAffHkwaDobGxUa1WBwQEeAYDgNvl91xuLeCoqCjvYVzjtbW13sPgqsDzAbjx6XS6Rx99lIjGjRv3wAMP+Aq/aO+++y7LsomJiXfffbevWIBrV25u7iuvvEJE4eHhL774okKhSEpKCgwM7N279+uvv242m73U7e5eVlVV9fTTTxPR1KlTxWJxu1KWZbnxQnK5fPHixTExMYGBgdwK6AMGDHjnnXesVmsHjQL4vS7puUajkYhCQkK8h3H5gM+NROCqwPMBuPEtXry4qqpKKpV+8MEHDMP4Cr84LS0tn3/+ORE9/fTTfD7fVzjANYpl2SeeeMJutxNRQ0NDQ0ODu+jkyZNLliz58MMPN27cmJGR0WH17uhlLS0tO3bs0Ol0x48f//TTT00mU1hY2BtvvOEZWVFRodPpiIibc9zW0aNHjx49umLFik2bNnFLoACAW5f0XJZliUgmk3kPCwwMJCKn0+k9DK4KPB+AG9yuXbu41RL+9re/JSUl+Qq/aCtXrjSZTAqF4qGHHvIVC3Dt2rBhw6+//kpEfD7/6aefzsnJqaurq6qqys7OXrBgAcMwp0+fHjlyJLf4Tzvd1MsqKipmzZo1f/785cuXm0wmIvr6669jYmI8I9vuRDZ+/Pjs7Oz6+vqmpqbt27cvXLiQx+MVFRWNGDGivLzcsy6A3+ranusznfAZAFeT19VIAa4E7kfxwpc65lxILbPZzH0iOGjQILvd3rboQqr7ZLVaIyMjiejZZ5/1FQtw7bJYLNyq/6mpqYcOHfIM2L17N/ejPmTIEJfL1bao+3rZ6dOn77777pEjR7r3NJVKpW+//Xa7E2BZ9vXXXycihmE++OADz9J9+/ZxqwDffPPNnqUAN54L6Xpd2HMvMN69dbH3MLgq8K8CV98F/ipp50JqcVst8vl8zx1SLqS6T1988QXXfllZma9YgGsXt0CWUCjscC8hTk5ODtdrNm7c2PZ4d/cyTm5ublZWFtfgP//5z3aldrs9Jydn/fr1HdZlWXbr1q1c3S1btnQWA3DDuJCu14U99wLjkQ9cyzBeCG5YR48e/de//kVEzz//fIc7pFwm9uxd1LRp0+Lj432FA1y7vvzySyJauHChl54yYcIEbjuC7777zn2wu3uZW0ZGxurVq1988UUiWrRoUdsBQkQkEAgmTJjgZbnD8ePHc6XYCwmArmDPhesF8gHoGg6Hg+nErFmzfNXueg6HY968eU6nMyUl5eWXX/YVfil++eUXbtFlLDMK1zKffdNgMBw5coSIbr/9du9NjR07loj27NnDvbwCvawthmGWLVs2cOBAOrvjx0W59dZbiei3337zFQhwTfDZcy9ZN/Vc9uyDgksOgKsI+QDcmN566y1uw+APP/xQKpX6Cr8U3B3J0KFDuW1TAa5TTU1N3BcDBgzwHtmvXz8iqqur415egV7WDp/Pf+SRR4ho//79vmLb406+pqbGVyDADa7Ley63BLBWq/Uexi0CJpFIvIfBVYH1RqFr8Pl899DAdrglxq6k4uLipUuXEtG8efO4TzS7XGFhYXZ2NhE988wzvmIBriaffVMgELgjOwxzs1gsdPZvf5f3stbW1mXLlhHRn//855SUlM7C+vTpQ0RtVwp64YUXSktLJ02a9OCDD3ZWi86evHuTY4BrnM+ee2m6vOcSUURERHl5uc+NBbidxbnJ/XCtQT4AXYNhmJ49e/qKukLmz59vsVhkMtm8efMKCgq8RJaWlhJRVFSUQqHwEuaJ29Q9Li5u6tSpvmIBriaffTM8PFwgEDgcjtzc3JtvvtlL5LFjx4goNjaWuqGXyWSy//znPy6Xa+DAgV7yAe6eo+39UHV19bp168rLy73nA9zoPu7kAa59PnvupenynktEkZGR5eXl1dXV3sOqqqoI+cA1y8d8Y4Dux/0o+lyaoB0vtTy3L/Xu+++/92zEi8bGRu4Z67///W9fsQDXAe5jwjlz5niJcblco0aNIqInn3yS7Z5elpqaSkQLFizwErN48WIiGjt2rPvIxx9/zL1FSUlJZ7WcTufw4cPp7MkD3Ni4HnHF/j4uWLCAiEaNGuU9bPLkyUT0wAMPeA+DqwLzBwDas1gsFovF5XJ1FrBy5Uqz2SyXy//nf/6nsxiA68jDDz9MRF988YV7XU5Pn3322a5du4ho7ty5ncVcuA572f33309Eq1atqqys7LBWaWnp8uXLiWjGjBnug9OnTw8LCyOiuXPndrb16ccff7x3717qopMH8Fsd9lyuW+3atcvLxJ7S0tJt27YR0YQJEzqLgavJV8IA0O24H8UufD5wIbxU996yxWKJiIggoqeeeqrDAIDrjsPhGDJkCBGFhIR4fhzocrlWrVoll8uJ6L777uuwhQ5dbC+rq6sLCQkhoj59+lRWVrarUlRUxC2MmJSUZLFY2hatWbOGa/DBBx/U6XRti1wu1+effy6TyYjo/vvvZwH8wBX+++hyubhfIBERER3uYVJSUpKRkUFEcXFxZrPZMwCuOswfALg4q1evrqurYxjmySef9BULcH3g8/k//PDD8OHDKyoqZsyYMXHixDvuuIO7+T5y5Eh2dvb27duJqF+/fitWrPDV2KVTq9Xffffd+PHjc3NzMzIyHnvssdtvv12lUhUWFu7bt+/999+3Wq0ymWzt2rXtxjzMmDHj2WefffPNN1etWrVz585HH3104MCBSqXy0KFDmzZt2rJlC3X/yQP4LYZh1qxZM3jw4Lq6uszMzHvvvXfy5MlJSUkMw1RVVeXk5Hz55ZcGg0EsFq9atQrrC12jfCUMAN2O+1G82E8yLq2Wm5fqXopcLlffvn2JaOrUqZ6lANe1uro6L1sQTJ8+XavV+mrjPJfWy3bv3t3ZrN/U1NSjR496VuGsWLEiICCgw4qTJ09ubW3trCLADYb7sb/Cfx+LioqGDRvWYQckoujo6O3bt3vWgmsEng8AXIT//ve/3Mao2IMMbjxqtXrbtm07d+786quvdu3axS3VHxUVNWbMmLlz544YMcJXA13j5ptvzs/PX7NmzTfffFNYWFhXVxccHNy/f/+srKw5c+Z4WTD0kUceycrK+vDDD3NyckpKSpqamiIjI0eOHPnQQw/dcsstndUCgC6Rmpq6e/furVu3rl69+uDBg7W1tWazOTw8vFevXpMnT54zZ87lLJMK3Y1hsV0cAAAAAIC/wvpCAAAAAAD+C/kAAAAAAID/Qj4AAAAAAOC/kA8AAAAAAPgv5AMAAAAAAP4L+QAAAAAAgP9CPgAAAAAA4L+QDwAAAAAA+C/kAwAAAAAA/gv5AAAAAACA/0I+AAAAAADgv5APAAAAAAD4L+QDAAAAAAD+C/kA3FAYhvEVAgBXB7onwDUL3dPPIR8AAAAAAPBfyAcAAAAAAPwX8gEAAAAAAP+FfAAAAAAAwH8hHwAAAAAA8F/IBwAAAAAA/BfyAQAAAAAA/4V8AAAAAADAfyEfAAAAAADwX8gHAAAAAAD8F/IBAAAAAAD/hXwAAAAAAMB/IR8AAAAAAPBfyAcAAAAAAPyXwFcAwHVmxqd7iYjHMNxLgYBHRDyGiEjAP5MA83k8IuLzzsbwGXcVnvsg79zBdjHuFtod9Ig5F9lpDHdivHMnSUT8MzFnzpY77j5bPsO4X/LPtsOcacf9kovh4nkdxpy5XuZcm+6DZ1+deRfeudI2Fc+EnPmOtY+hc427S5nzX7ZtjYgYOv9lm3bOveTaofPacTfbtgV3DEPnxUA7rK+Ai3Xh32n2/Ddnz71iyePEzgSfDWLbHnTHsOdVZNnzSl1csx3FuF+62rx0Vz9bsYN2XOefpZN1nY0hOtua+wsu2H2QO/lzL1kiIgfLEpHz/DN3uNxVuJdn34U9d9B+NsZ1fgtOF9HZc3a343SxdPYk3XW5GrazMQ7WRW2u2nZ+FYvTRUR2F1Gb757R6aI23xMD1+yZimdPz3H+VXOn53JRm8ZZJ0tErvOvyOV0f6O4ly7PGNbpfklE5HK43I3T2fPkDrZp1kVnT/LcQft5Mazz7EvXuZN32Z1nmmXPuyLu+Nn3OhNz5mzdV+04d/Iuh6NtDHvuG+V0x7jDznwzzz94rlnuXc4/6LJzFc+/BIe97UvWeeYcwJ/h+QAAAAAAgP9CPgAAAAAA4L+QDwAAAAAA+C/kAwAAAAAA/gv5AAAAAACA/0I+AAAAAADgv5APAAAAAAD4L+QDcENpt+I4AFw70D0Brlnonn4O+QAAAAAAgP9CPgAAAAAA4L+QDwAAAAAA+C/kAwAAAAAA/gv5AAAAAACA/0I+AAAAAADgv5APAAAAAAD4LwYrzgIAAAAA+C08HwAAAAAA8F/IBwAAAAAA/BfyAQAAAAAA/4V8AAAAAADAfyEfAAAAAADwX8gHAAAAAAD8F/IBAAAAAAD/hXwAAAAAAMB/IR8AAAAAAPBfyAcAAAAAAPwX8gEAAAAAAP+FfAAAAAAAwH8hHwAAAAAA8F/IBwAAAAAA/BfyAQAAAAAA/4V8AAAAAADAfyEfAAAAAADwX8gHAAAAAAD8F/IBAAAAAAD/hXwAAAAAAMB/IR8AAAAAAPBfyAcAAAAAAPwX8gEAAAAAAP+FfAAAAAAAwH8hHwAAAAAA8F//D8vFRKXx/k+uAAAAAElFTkSuQmCC\" /></p>\r\n\r\n</div>\r\n</div>\r\n</div>\r\n<div class=\"cell border-box-sizing text_cell rendered\"><div class=\"prompt input_prompt\">\r\n</div>\r\n<div class=\"inner_cell\">\r\n<div class=\"text_cell_render border-box-sizing rendered_html\">\r\n<h2 id=\"Model-Order-Reduction\">Model Order Reduction<a class=\"anchor-link\" href=\"#Model-Order-Reduction\">&#182;</a></h2><p>Numerical models of physical phenomena require fine discretisations to show convergence and agreement with their real\r\ncounterparts, and, in the case of SHARPy's aeroelastic systems, hundreds of thousands of states are not an uncommon\r\nencounter. However, modern hardware or the use of these models for other applications such as controller synthesis may limit\r\ntheir size, and we must turn to model order reduction techniques to achieve lower dimensional representations that can\r\nthen be used.</p>\r\n<p>SHARPy offers several model order reduction methods to reduce the initially large system to a lower dimension,\r\nattending to the user's requirements of numerical efficiency or global error bound.</p>\r\n<h3 id=\"Krylov-Methods-for-Model-Order-Reduction---Moment-Matching\">Krylov Methods for Model Order Reduction - Moment Matching<a class=\"anchor-link\" href=\"#Krylov-Methods-for-Model-Order-Reduction---Moment-Matching\">&#182;</a></h3><p>Model reduction by moment matching can be seen as approximating a transfer function through a power series expansion about a user defined point in the complex plane. The reduction by projection retains the moments between the full and reduced systems as long as the projection matrices span certain Krylov subspaces dependant on the expansion point and the system's matrices.\r\nThis can be taken advantage of,\r\nin particular for aeroelastic applications where the interest resides in the low frequency behaviour of the system,\r\nthe ROM can be expanded about these low frequency points discarding accuracy higher up the frequency spectrum.</p>\r\n<h4 id=\"Example-1---Aerodynamics---Frequency-response-of-a-high-AR-flat-plate-subject-to-a-sinusoidal-gust\">Example 1 - Aerodynamics - Frequency response of a high AR flat plate subject to a sinusoidal gust<a class=\"anchor-link\" href=\"#Example-1---Aerodynamics---Frequency-response-of-a-high-AR-flat-plate-subject-to-a-sinusoidal-gust\">&#182;</a></h4><p>The objective is to compare SHARPy's solution of a very high aspect ratio flat plate subject to a sinusoidal gust to\r\nthe closed form solution obtained by Sears (1944 - Ref). SHARPy's inherent 3D nature makes comparing results to the 2D\r\nsolution require very high aspect ratio wings with fine discretisations, resulting in very large state space models.\r\nIn this case, we would like to utilise a Krylov ROM to approximate the low frequency behaviour and perform a frequency\r\nresponse analysis on the reduced system, since it would represent too much computational cost if it were performed on\r\nthe full system.</p>\r\n<p>The full order model was reduced utilising Krylov methods, in particular the Arnoldi iteration, with an expansion about\r\nzero frequency to produce the following result.</p>\r\n\r\n</div>\r\n</div>\r\n</div>\r\n<div class=\"cell border-box-sizing text_cell rendered\"><div class=\"prompt input_prompt\">\r\n</div>\r\n<div class=\"inner_cell\">\r\n<div class=\"text_cell_render border-box-sizing rendered_html\">\r\n<p><img src=\"data:image/png;base64,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\" /></p>\r\n\r\n</div>\r\n</div>\r\n</div>\r\n<div class=\"cell border-box-sizing text_cell rendered\"><div class=\"prompt input_prompt\">\r\n</div>\r\n<div class=\"inner_cell\">\r\n<div class=\"text_cell_render border-box-sizing rendered_html\">\r\n<p>As it can be seen from the image above, the ROM approximates well the low frequency, quasi-steady state and loses\r\naccuracy as the frequency is increased, just as intended. Still, perfect matching is never achieved even at the\r\nexpansion frequency given the 3D nature of the wing compared to the 2D analytical solution.</p>\r\n<h4 id=\"Example-2---Aeroelastics---Flutter-analysis-of-a-Goland-wing-with-modal-projection\">Example 2 - Aeroelastics - Flutter analysis of a Goland wing with modal projection<a class=\"anchor-link\" href=\"#Example-2---Aeroelastics---Flutter-analysis-of-a-Goland-wing-with-modal-projection\">&#182;</a></h4><p>The Goland wing flutter example is presented next. The aerodynamic surface is finely discretised for the UVLM solution,\r\nresulting in not only a large state space but also in large input/output dimensionality. Therefore, to reduce the\r\nnumber of inputs and outputs, the UVLM is projected onto the structural mode shapes, the first four in this particular\r\ncase. The resulting multi input multi output system (mode shapes -&gt; UVLM -&gt; modal forces) was subsequently reduced using\r\nKrylov methods aimed at MIMO systems which use variations of the block Arnoldi iteration. Again, the expansion\r\nfrequency selected was the zero frequency. As a sample, the transfer function from two inputs to two outputs is\r\nshown to illustrate the performance of the reduced model against the full order UVLM.</p>\r\n\r\n</div>\r\n</div>\r\n</div>\r\n<div class=\"cell border-box-sizing text_cell rendered\"><div class=\"prompt input_prompt\">\r\n</div>\r\n<div class=\"inner_cell\">\r\n<div class=\"text_cell_render border-box-sizing rendered_html\">\r\n<p><img src=\"data:image/png;base64,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\"/></p>\r\n\r\n</div>\r\n</div>\r\n</div>\r\n<div class=\"cell border-box-sizing text_cell rendered\"><div class=\"prompt input_prompt\">\r\n</div>\r\n<div class=\"inner_cell\">\r\n<div class=\"text_cell_render border-box-sizing rendered_html\">\r\n<p>The reduced aerodynamic model projected onto the modal shapes was then coupled to the linearised beam model, and the\r\nstability analysed against a change in velocity. Note that the UVLM model and its ROM are actually scaled to be\r\nindependent on the freestream velocity, hence only one UVLM and ROM need to be computed. The structural model needs\r\nto be updated at each test velocity but its a lot less costly in computational terms. The resulting stability of the\r\naeroelastic system is plotted on the Argand diagram below with changing freestream velocity.</p>\r\n\r\n</div>\r\n</div>\r\n</div>\r\n<div class=\"cell border-box-sizing text_cell rendered\"><div class=\"prompt input_prompt\">\r\n</div>\r\n<div class=\"inner_cell\">\r\n<div class=\"text_cell_render border-box-sizing rendered_html\">\r\n<p><img src=\"data:image/png;base64,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\" /></p>\r\n\r\n</div>\r\n</div>\r\n</div>\r\n<div class=\"cell border-box-sizing text_cell rendered\"><div class=\"prompt input_prompt\">\r\n</div>\r\n<div class=\"inner_cell\">\r\n<div class=\"text_cell_render border-box-sizing rendered_html\">\r\n<table>\r\n<thead><tr>\r\n<th>Flutter speed [m/s]</th>\r\n<th>Frequency [rad/s]</th>\r\n</tr>\r\n</thead>\r\n<tbody>\r\n<tr>\r\n<td>164</td>\r\n<td>70.27</td>\r\n</tr>\r\n</tbody>\r\n</table>\r\n\r\n</div>\r\n</div>\r\n</div>\r\n<div class=\"cell border-box-sizing text_cell rendered\"><div class=\"prompt input_prompt\">\r\n</div>\r\n<div class=\"inner_cell\">\r\n<div class=\"text_cell_render border-box-sizing rendered_html\">\r\n<h1 id=\"SHARPy-installation\">SHARPy installation<a class=\"anchor-link\" href=\"#SHARPy-installation\">&#182;</a></h1>\r\n</div>\r\n</div>\r\n</div>\r\n<div class=\"cell border-box-sizing text_cell rendered\"><div class=\"prompt input_prompt\">\r\n</div>\r\n<div class=\"inner_cell\">\r\n<div class=\"text_cell_render border-box-sizing rendered_html\">\r\n<p>Check <a href=\"https://ic-sharpy.readthedocs.io/en/latest/content/installation.html\">https://ic-sharpy.readthedocs.io/en/latest/content/installation.html</a> for an in-depth guide on how to install SHARPy.</p>\r\n<p>This assumes a few things about your computer:</p>\r\n<ul>\r\n<li><p>It is Linux or MacOS (definitely not Windows - if you only have Windows, check VirtualBox and make an Ubuntu or CentOS virtual machine).</p>\r\n</li>\r\n<li><p>It has an up-to-date compiler (this might not be straightforward, run <code>g++ --version</code>. If lower than 5.0, you will need to update it). An up-to-date Intel Compiler for C++ and Fortran is a good option as well.</p>\r\n</li>\r\n</ul>\r\n<p>SHARPy relies on Anaconda <a href=\"https://www.anaconda.com/distribution/\">https://www.anaconda.com/distribution/</a> to handle all the python packages. Install the Python 3 version.</p>\r\n\r\n</div>\r\n</div>\r\n</div>\r\n<div class=\"cell border-box-sizing text_cell rendered\"><div class=\"prompt input_prompt\">\r\n</div>\r\n<div class=\"inner_cell\">\r\n<div class=\"text_cell_render border-box-sizing rendered_html\">\r\n<p>You then need to download the code:</p>\r\n<p>1) Create a folder. Here it will be called <code>code</code></p>\r\n<div class=\"highlight\"><pre><span></span>mkdir code\r\n<span class=\"nb\">cd</span> code\r\n</pre></div>\r\n<p>2) Clone all the necessary repos <strong>and make sure you are in the correct branch -- usually develop</strong></p>\r\n<div class=\"highlight\"><pre><span></span>git clone https://github.com/imperialcollegelondon/sharpy --branch<span class=\"o\">=</span>develop\r\ngit clone https://github.com/imperialcollegelondon/xbeam --branch<span class=\"o\">=</span>develop\r\ngit clone https://github.com/imperialcollegelondon/uvlm --branch<span class=\"o\">=</span>develop\r\n</pre></div>\r\n<p>3) Create the conda environment and activate it</p>\r\n<div class=\"highlight\"><pre><span></span>conda env create -f sharpy/utils/environment_linux.yml\r\n</pre></div>\r\n<p>(or <code>environment_macos.yml</code> if on MacOS.</p>\r\n<p>Now activate the conda environment</p>\r\n<p><code>conda activate sharpy_env</code> you are going to have to do this every time to start a new terminal and want to run SHARPy</p>\r\n<p>It sometimes fails in the <code>pip</code> stage when installing. If it says something about <code>distwheel</code> failed in <code>mayavi</code>, activate the environment and run <code>pip install mayavi</code> manually.</p>\r\n\r\n</div>\r\n</div>\r\n</div>\r\n<div class=\"cell border-box-sizing text_cell rendered\"><div class=\"prompt input_prompt\">\r\n</div>\r\n<div class=\"inner_cell\">\r\n<div class=\"text_cell_render border-box-sizing rendered_html\">\r\n<p>4) Compile <code>xbeam</code> and <code>uvlm</code>.</p>\r\n<p>Move to the <code>xbeam</code> folder (<code>cd xbeam</code>) and run <code>sh run_make.sh</code>. Wait until it finishes. Please make sure your anaconda env is active before running this.</p>\r\n<p>Now the same for <code>uvlm</code>: <code>cd ../uvlm</code> and <code>sh run_make.sh</code>.</p>\r\n\r\n</div>\r\n</div>\r\n</div>\r\n<div class=\"cell border-box-sizing text_cell rendered\"><div class=\"prompt input_prompt\">\r\n</div>\r\n<div class=\"inner_cell\">\r\n<div class=\"text_cell_render border-box-sizing rendered_html\">\r\n<p>5) SHARPy is now hopefully ready to go!</p>\r\n<p>Navigate to the <code>sharpy</code> folder: <code>cd ../sharpy</code> and run:</p>\r\n<div class=\"highlight\"><pre><span></span><span class=\"nb\">source</span> bin/sharpy_vars.sh\r\n</pre></div>\r\n<p>This command is important, as it loads the program in the terminal variables.</p>\r\n<p>We can run the tests now:</p>\r\n<div class=\"highlight\"><pre><span></span>python -m unittest\r\n</pre></div>\r\n<p>If everything has been installed properly, the tests should pass.</p>\r\n<div class=\"highlight\"><pre><span></span>----------------------------------------------------------------------\r\nRan <span class=\"m\">28</span> tests in <span class=\"m\">23</span>.465s\r\n\r\nOK\r\n</pre></div>\r\n<p><strong>Remember to run every time you start a new terminal:</strong></p>\r\n<div class=\"highlight\"><pre><span></span>conda activate sharpy_env\r\n<span class=\"nb\">source</span> &lt;path-to-sharpy&gt;/bin/sharpy_vars.sh\r\n</pre></div>\r\n<p>Tip: edit your <code>~\\.bashrc</code> (linux) or <code>\\.bash_profile</code> (MacOS) and add the following:</p>\r\n<div class=\"highlight\"><pre><span></span><span class=\"nb\">alias</span> <span class=\"nv\">load_sharpy</span><span class=\"o\">=</span><span class=\"s2\">&quot;conda activate sharpy_env &amp;&amp; source &lt;path-to-sharpy&gt;/bin/sharpy_vars.sh&quot;</span>\r\n<span class=\"c1\"># Remember to modify the &lt;path-to-sharpy&gt; gap with your path</span>\r\n</pre></div>\r\n<p>Then you just need to run in the console <code>load_sharpy</code> to load everything in one go.</p>\r\n\r\n</div>\r\n</div>\r\n</div>\r\n<div class=\"cell border-box-sizing text_cell rendered\"><div class=\"prompt input_prompt\">\r\n</div>\r\n<div class=\"inner_cell\">\r\n<div class=\"text_cell_render border-box-sizing rendered_html\">\r\n<h1 id=\"Basic-cases\">Basic cases<a class=\"anchor-link\" href=\"#Basic-cases\">&#182;</a></h1><h2 id=\"A-cantilever-beam-(Geradin)\">A cantilever beam (Geradin)<a class=\"anchor-link\" href=\"#A-cantilever-beam-(Geradin)\">&#182;</a></h2><p>This case can be found in <code>sharpy/tests/xbeam/geradin</code>, it is part of the test suite.</p>\r\n<p>Basically, it is a 5 metres long cantilevered beam with a mass at the tip. Stiffness properties: $\\mathcal{S} = \\mathrm{diag}(EI, GA_y, GA_z, GJ, EI_y, EI_z) = \\mathrm{diag}(4.8e8, 3.231e8, 3.231e8, 1e6, 9.346e6, 9.346e6)$</p>\r\n<p>There is no distributed mass, only one at the tip. $M = 6e5/9.81$.</p>\r\n<p>The main point about the Geradin beam is that the deflections are past the linear range.</p>\r\n\r\n</div>\r\n</div>\r\n</div>\r\n<div class=\"cell border-box-sizing text_cell rendered\"><div class=\"prompt input_prompt\">\r\n</div>\r\n<div class=\"inner_cell\">\r\n<div class=\"text_cell_render border-box-sizing rendered_html\">\r\n<p><img src=\"data:image/png;base64,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\" /></p>\r\n\r\n</div>\r\n</div>\r\n</div>\r\n<div class=\"cell border-box-sizing text_cell rendered\"><div class=\"prompt input_prompt\">\r\n</div>\r\n<div class=\"inner_cell\">\r\n<div class=\"text_cell_render border-box-sizing rendered_html\">\r\n<p>If you open <code>sharpy/tests/xbeam/geradin/generate_geradin.py</code>, you are going to see a basic input file for a structural only case.</p>\r\n<p>The last part is the one that is the most important (function <code>generate_solver_file</code> from line 134). This is where the solver settings and the overall flow of the program is given.</p>\r\n<ul>\r\n<li><strong>The <code>flow</code> variable</strong> controls the solvers and postprocessors that are going to be run in this simulation (and in which order). When you run sharpy with a valid header file, you will see a complete list of available solvers:</li>\r\n</ul>\r\n\r\n<pre><code>--------------------------------------------------------------------------------\r\n            ######  ##     ##    ###    ########  ########  ##    ##\r\n           ##    ## ##     ##   ## ##   ##     ## ##     ##  ##  ##\r\n           ##       ##     ##  ##   ##  ##     ## ##     ##   ####\r\n            ######  ######### ##     ## ########  ########     ##\r\n                 ## ##     ## ######### ##   ##   ##           ##\r\n           ##    ## ##     ## ##     ## ##    ##  ##           ##\r\n            ######  ##     ## ##     ## ##     ## ##           ##\r\n--------------------------------------------------------------------------------\r\nAeroelastics Lab, Aeronautics Department.\r\n    Copyright (c), Imperial College London.\r\n    All rights reserved.\r\nRunning SHARPy from /home/ad214/run/code/sharpy/tests/xbeam/geradin\r\nSHARPy being run is in /home/ad214/run/code/sharpy\r\nThe branch being run is develop\r\nThe version and commit hash are: v0.1-731-g85eb5ab-85eb5ab\r\nThe available solvers on this session are:\r\nPreSharpy\r\nAerogridLoader\r\nBeamLoader\r\nModal\r\nNonLinearDynamic\r\nNonLinearDynamicCoupledStep\r\nNonLinearDynamicPrescribedStep\r\nNonLinearStatic\r\nPIDTrajectoryControl\r\nPrescribedUvlm\r\nStaticCoupled\r\nStaticTrim\r\nStaticUvlm\r\nStepUvlm\r\nTrim\r\nRigidDynamicPrescribedStep\r\nDynamicUVLM\r\nStepLinearUVLM\r\nStaticLinearUvlm\r\nInitializeMultibody\r\nLagrangeMultipliersTrajectoryControl\r\nNonLinearDynamicMultibody\r\nSHWUvlm\r\nStaticCoupledRBM\r\nSteadyHelicoidalWake\r\nDynamicCoupled\r\nAeroForcesCalculator\r\nAerogridPlot\r\nBeamLoads\r\nBeamPlot\r\nCleanup\r\nSaveData\r\nStallCheck\r\nWriteVariablesTime\r\nPlotFlowField\r\nCreateSnapshot\r\nLiftDistribution</code></pre>\r\n\r\n</div>\r\n</div>\r\n</div>\r\n<div class=\"cell border-box-sizing text_cell rendered\"><div class=\"prompt input_prompt\">\r\n</div>\r\n<div class=\"inner_cell\">\r\n<div class=\"text_cell_render border-box-sizing rendered_html\">\r\n<p>For our simple structural simulation, we only need a few blocks: <code>BeamLoader</code> for reading the input file and generating the beam data structure, <code>NonLinearStatic</code> is the structural solver for <em>nonlinear</em>, <em>static</em> beams, <code>BeamPlot</code> outputs the deformed shape and other quantities to a Paraview file structure (more on this later), and <code>WriteVariablesTime</code> outputs the data we want to text files.</p>\r\n\r\n</div>\r\n</div>\r\n</div>\r\n<div class=\"cell border-box-sizing text_cell rendered\"><div class=\"prompt input_prompt\">\r\n</div>\r\n<div class=\"inner_cell\">\r\n<div class=\"text_cell_render border-box-sizing rendered_html\">\r\n<ul>\r\n<li><p><strong>The <code>case</code></strong> is a name for the simulation so we can identify results.</p>\r\n</li>\r\n<li><p><strong>The <code>route</code></strong> is the path to the <code>.sharpy</code> file, so that SHARPy can find all the other necessary files.</p>\r\n</li>\r\n</ul>\r\n\r\n</div>\r\n</div>\r\n</div>\r\n<div class=\"cell border-box-sizing text_cell rendered\"><div class=\"prompt input_prompt\">\r\n</div>\r\n<div class=\"inner_cell\">\r\n<div class=\"text_cell_render border-box-sizing rendered_html\">\r\n<p><img src=\"data:image/png;base64,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\"/></p>\r\n\r\n</div>\r\n</div>\r\n</div>\r\n<div class=\"cell border-box-sizing text_cell rendered\"><div class=\"prompt input_prompt\">\r\n</div>\r\n<div class=\"inner_cell\">\r\n<div class=\"text_cell_render border-box-sizing rendered_html\">\r\n<p>Then, the other parts of the <code>.sharpy</code> (or <code>.sharpy</code>) file are based on the following structure:</p>\r\n\r\n<pre><code>[Header_name]\r\nvariable1 = 1\r\nvariable2 = a\r\nvariable3 = [a, a, b]</code></pre>\r\n<p>It is important to note that you need a header per every solver indicated in <code>flow</code>. If that solver needs no settings, you still need to indicate the header.</p>\r\n<p>There is also a main <code>[SHARPy]</code> header that contains the main program settings, such as the <code>flow</code> and the <code>case</code>. It also has a setting called <code>write_screen</code>. It is equal to <code>off</code> because this is a test case, and you don't want tons of output. If you modify it to <code>'on'</code>, you'll be able to see what's going on on the screen.</p>\r\n\r\n</div>\r\n</div>\r\n</div>\r\n<div class=\"cell border-box-sizing text_cell rendered\"><div class=\"prompt input_prompt\">\r\n</div>\r\n<div class=\"inner_cell\">\r\n<div class=\"text_cell_render border-box-sizing rendered_html\">\r\n<h3 id=\"Simple-modifications-of-the-case\">Simple modifications of the case<a class=\"anchor-link\" href=\"#Simple-modifications-of-the-case\">&#182;</a></h3><p>If we want to (for example), run a stiffer beam, we can do so easily:</p>\r\n<p>Open <code>generate_geradin.py</code> and move to line 50 more or less where there are a few lines looking like:</p>\r\n<div class=\"highlight\"><pre><span></span><span class=\"n\">ea</span> <span class=\"o\">=</span> <span class=\"o\">...</span>\r\n<span class=\"n\">ga</span> <span class=\"o\">=</span> <span class=\"o\">...</span>\r\n<span class=\"c1\">#...</span>\r\n<span class=\"n\">ei</span> <span class=\"o\">=</span> <span class=\"o\">...</span>\r\n</pre></div>\r\n<p>and modify them to look like:</p>\r\n<div class=\"highlight\"><pre><span></span><span class=\"n\">stiffness_multiplier</span> <span class=\"o\">=</span> <span class=\"mi\">10</span>\r\n<span class=\"n\">ea</span> <span class=\"o\">=</span> <span class=\"o\">...</span> <span class=\"o\">*</span> <span class=\"n\">stiffness_multiplier</span>\r\n<span class=\"n\">ga</span> <span class=\"o\">=</span> <span class=\"o\">...</span> <span class=\"o\">*</span> <span class=\"n\">stiffness_multiplier</span>\r\n<span class=\"c1\">#...</span>\r\n<span class=\"n\">ei</span> <span class=\"o\">=</span> <span class=\"o\">...</span> <span class=\"o\">*</span> <span class=\"n\">stiffness_multiplier</span>\r\n</pre></div>\r\n<p>you can also change the name of the case so that the results are not overwritten:\r\nIn line <code>6</code>, <code>case_name = geradin_stiff</code>.</p>\r\n<p>Now run again the case. First, generate the files: <code>python generate_geradin.py</code>, and then run the case <code>sharpy geradin_stiff.sharpy</code>.</p>\r\n<p>You can now have a look at the wing tip deformations for both cases in <code>output/&lt;case_name&gt;/WriteVariablesTime/struct_pos_node-1.dat</code>.</p>\r\n\r\n</div>\r\n</div>\r\n</div>\r\n<div class=\"cell border-box-sizing text_cell rendered\"><div class=\"prompt input_prompt\">\r\n</div>\r\n<div class=\"inner_cell\">\r\n<div class=\"text_cell_render border-box-sizing rendered_html\">\r\n<h1 id=\"Guide-to-model-definition-in-SHARPy\">Guide to model definition in SHARPy<a class=\"anchor-link\" href=\"#Guide-to-model-definition-in-SHARPy\">&#182;</a></h1><p>This section will take a bit of time and is quite tough to follow, but keep this as a reference.</p>\r\n\r\n</div>\r\n</div>\r\n</div>\r\n<div class=\"cell border-box-sizing text_cell rendered\"><div class=\"prompt input_prompt\">\r\n</div>\r\n<div class=\"inner_cell\">\r\n<div class=\"text_cell_render border-box-sizing rendered_html\">\r\n<h2 id=\"Structural-data\">Structural data<a class=\"anchor-link\" href=\"#Structural-data\">&#182;</a></h2><p>The <code>case.fem.h5</code> file has several components. We go one by one:</p>\r\n\r\n</div>\r\n</div>\r\n</div>\r\n<div class=\"cell border-box-sizing text_cell rendered\"><div class=\"prompt input_prompt\">\r\n</div>\r\n<div class=\"inner_cell\">\r\n<div class=\"text_cell_render border-box-sizing rendered_html\">\r\n<ul>\r\n<li><p><code>num_node_elem [int]</code> is always 3 in our case (3 nodes per structural elements - quadratic beam elements).</p>\r\n</li>\r\n<li><p><code>num_elem [int]</code> number of structural elements.</p>\r\n</li>\r\n<li><p><code>num_node [int]</code> number of nodes. For simple structures, it is <code>num_elem*(num_node_elem - 1) - 1</code>. For more complicated ones, you need to calculate it properly.</p>\r\n</li>\r\n<li><p><code>coordinates [num_node, 3]</code> coordinates of the nodes in body-attached FoR.</p>\r\n</li>\r\n<li><p><code>connectivites [num_elem, num_node_elem]</code> a tricky one. Every row refers to an element, and the three integers in that row are the indices of the three nodes belonging to that elem. Now, the catch: the ordering is not as you'd think. Order them as $[0, 2, 1]$. That means, first one, last one, central one. The following image shows the node indices inside the circles representing the nodes, the element indices in blue and the resulting connectivities matrix next to it.\r\nConnectivities are tricky when considering complex configurations. Pay attention at the beginning and you'll save yourself a lot of trouble.</p>\r\n</li>\r\n</ul>\r\n\r\n</div>\r\n</div>\r\n</div>\r\n<div class=\"cell border-box-sizing text_cell rendered\"><div class=\"prompt input_prompt\">\r\n</div>\r\n<div class=\"inner_cell\">\r\n<div class=\"text_cell_render border-box-sizing rendered_html\">\r\n<p><img src=\"data:image/png;base64,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\"/></p>\r\n\r\n</div>\r\n</div>\r\n</div>\r\n<div class=\"cell border-box-sizing text_cell rendered\"><div class=\"prompt input_prompt\">\r\n</div>\r\n<div class=\"inner_cell\">\r\n<div class=\"text_cell_render border-box-sizing rendered_html\">\r\n<ul>\r\n<li><p><code>stiffness_db [:, 6, 6]</code> database of stiffness matrices. The first dimension has as many elements as different stiffness matrices are in the model.</p>\r\n</li>\r\n<li><p><code>elem_stiffness [num_elem]</code> array of indices (starting at 0). Basically, it links every element (index) to the stiffness matrix index in <code>stiffness_db</code>. For example <code>elem_stiffness[0] = 0; elem_stiffness[2] = 1</code> means that the element <code>0</code> has a stiffness matrix equal to <code>stiffness_db[0, :, :]</code>, and the second element has a stiffness matrix equal to <code>stiffness_db[1, :, :]</code>.</p>\r\n</li>\r\n</ul>\r\n<p>The shape of a stiffness matrix, $\\mathrm{S}$ is:\r\n$$\\mathrm{S} = \\begin{bmatrix}\r\nEA &amp; &amp; &amp; &amp; &amp; \\\\\r\n   &amp; GA_y &amp; &amp; &amp; &amp; \\\\\r\n   &amp; &amp; GA_z &amp; &amp; &amp; \\\\\r\n   &amp; &amp; &amp; GJ &amp; &amp; \\\\\r\n   &amp; &amp; &amp; &amp; EI_y &amp; \\\\\r\n   &amp; &amp; &amp; &amp; &amp; EI_z \\\\\r\n\\end{bmatrix}\r\n$$\r\nwith the cross terms added if needed.</p>\r\n<ul>\r\n<li><code>mass_db</code> and <code>elem_mass</code> follow the same scheme than the stiffness, but the mass matrix is given by:\r\n$$\\mathrm{M} = \\begin{bmatrix}\r\nm\\mathbf{I} &amp; -\\tilde{\\xi}_{cg}m \\\\\r\n\\tilde{\\xi}_{cg}m   &amp; J\\\\\r\n\\end{bmatrix}\r\n$$\r\nwhere $m$ is the distributed mass per unit length [kg/m], $\\tilde{\\bullet}$ is the skew-symmetric matrix of a vector and $\\xi_{cg}$ is the location of the centre of gravity with respect to the elastic axis in <strong>MATERIAL (local) FoR</strong>.</li>\r\n</ul>\r\n<p>And what is the Material FoR? This is an important point, because all the inputs that move WITH the beam are in material FoR. For example: follower forces, stiffness, mass, lumped masses...</p>\r\n\r\n</div>\r\n</div>\r\n</div>\r\n<div class=\"cell border-box-sizing text_cell rendered\"><div class=\"prompt input_prompt\">\r\n</div>\r\n<div class=\"inner_cell\">\r\n<div class=\"text_cell_render border-box-sizing rendered_html\">\r\n<p><img src=\"data:image/png;base64,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\"/></p>\r\n\r\n</div>\r\n</div>\r\n</div>\r\n<div class=\"cell border-box-sizing text_cell rendered\"><div class=\"prompt input_prompt\">\r\n</div>\r\n<div class=\"inner_cell\">\r\n<div class=\"text_cell_render border-box-sizing rendered_html\">\r\n<p>The material frame of reference is noted as $B$. Essentially, the $x$ component is tangent to the beam in the increasing node ordering, $z$ looks up generally and $y$ is oriented such that the FoR is right handed.</p>\r\n<p>In the practice (vertical surfaces, structural twist effects...) it is more complicated than this. The only sure thing about $B$ is that its $x$ direction is tangent to the beam in the increasing node number direction. However, with just this, we have an infinite number of potential reference frames, with $y$ and $z$ being normal to $x$ but rotating around it. The solution is to indicate a <code>for_delta</code>, or frame of reference delta vector ($\\Delta$).</p>\r\n\r\n</div>\r\n</div>\r\n</div>\r\n<div class=\"cell border-box-sizing text_cell rendered\"><div class=\"prompt input_prompt\">\r\n</div>\r\n<div class=\"inner_cell\">\r\n<div class=\"text_cell_render border-box-sizing rendered_html\">\r\n<p><img src=\"data:image/png;base64,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\"/></p>\r\n\r\n</div>\r\n</div>\r\n</div>\r\n<div class=\"cell border-box-sizing text_cell rendered\"><div class=\"prompt input_prompt\">\r\n</div>\r\n<div class=\"inner_cell\">\r\n<div class=\"text_cell_render border-box-sizing rendered_html\">\r\n<p>Now we can define unequivocally the material frame of reference. With $x_B$ and $\\Delta$ defining a plane, $y_b$ is chosen such that the $z$ component is oriented upwards with respect to the lifting surface.</p>\r\n<p>From this definition comes the only constraint to $\\Delta$: it cannot be parallel to $x_B$.</p>\r\n\r\n</div>\r\n</div>\r\n</div>\r\n<div class=\"cell border-box-sizing text_cell rendered\"><div class=\"prompt input_prompt\">\r\n</div>\r\n<div class=\"inner_cell\">\r\n<div class=\"text_cell_render border-box-sizing rendered_html\">\r\n<ul>\r\n<li><code>frame_fo_reference_delta [num_elem, num_node_elem, 3]</code> contains the  $\\Delta$ vector in body-attached ($A$) frame of reference. As a rule of thumb:\r\n$$\\Delta = \\left\\{ \r\n\\begin{matrix}\r\n[-1, 0, 0], \\quad \\text{if right wing} \\\\\r\n[1, 0, 0], \\quad \\text{if left wing} \\\\\r\n[0, 1, 0], \\quad \\text{if fuselage} \\\\\r\n[-1, 0, 0], \\quad \\text{if vertical fin} \\\\\r\n\\end{matrix}\r\n\\right.\r\n$$</li>\r\n</ul>\r\n<p>These rules of thumb only work if the nodes increase towards the tip of the surfaces (and the tail in the case of the fuselage).</p>\r\n\r\n</div>\r\n</div>\r\n</div>\r\n<div class=\"cell border-box-sizing text_cell rendered\"><div class=\"prompt input_prompt\">\r\n</div>\r\n<div class=\"inner_cell\">\r\n<div class=\"text_cell_render border-box-sizing rendered_html\">\r\n<ul>\r\n<li><code>structural_twist [num_elem, num_node_elem]</code> is technically not necessary, as the same effect can be achieved with FoR_delta. <strong>CAUTION</strong> previous versions of SHARPy had structural twist defined differently:</li>\r\n</ul>\r\n<div class=\"highlight\"><pre><span></span><span class=\"n\">structural_twist</span> <span class=\"o\">=</span> <span class=\"n\">np</span><span class=\"o\">.</span><span class=\"n\">zeros</span><span class=\"p\">((</span><span class=\"n\">num_node</span><span class=\"p\">,</span> <span class=\"n\">num_node_elem</span><span class=\"p\">))</span> <span class=\"c1\"># this is wrong now, and will trigger and error in SHARPy, change it!</span>\r\n<span class=\"n\">structural_twist</span> <span class=\"o\">=</span> <span class=\"n\">np</span><span class=\"o\">.</span><span class=\"n\">zeros</span><span class=\"p\">((</span><span class=\"n\">num_elem</span><span class=\"p\">,</span> <span class=\"n\">num_node_elem</span><span class=\"p\">))</span> <span class=\"c1\"># this is right.</span>\r\n</pre></div>\r\n<ul>\r\n<li><p><code>boundary_conditions [num_node]</code> is an array of integers (<code>np.zeros((num_node, ), dtype=int)</code>) and contains all <code>0</code> EXCEPT FOR:</p>\r\n<ul>\r\n<li>One node NEEDS to have a <code>1</code>, this is the reference node. Usually, the first node has <code>1</code> and is located in <code>[0, 0, 0]</code>. This makes things much easier.</li>\r\n<li>If the node is a tip of a beam (is not attached to 2 elements, but just 1), it needs to have a <code>-1</code>.</li>\r\n</ul>\r\n</li>\r\n<li><p><code>beam_number [num_elem]</code> is another array of integers. Usually you don't need to modify its value. Leave it at 0.</p>\r\n</li>\r\n<li><p><code>app_forces [num_elem, 6]</code> contains the applied forces <code>app_forces[:, 0:3]</code> and moments <code>app_forces[:, 3:6]</code> in a given node. Important points: the forces are given in Material FoR (check above). That means that in a symmetrical model, a thrust force oriented upstream would have the shape $[0, T, 0, 0, 0, 0]$ in the right wing, while the left would be $[0, -T, 0, 0, 0, 0]$. Likewise, a torsional moment for twisting the wing leading edge up would be $[0, 0, 0, M, 0, 0]$ for the right, and $[0, 0, 0, -M, 0, 0]$ for the left. But careful, because an out-of-plane bending moment (wing tip up) has the same sign (think about it).</p>\r\n</li>\r\n</ul>\r\n\r\n</div>\r\n</div>\r\n</div>\r\n<div class=\"cell border-box-sizing text_cell rendered\"><div class=\"prompt input_prompt\">\r\n</div>\r\n<div class=\"inner_cell\">\r\n<div class=\"text_cell_render border-box-sizing rendered_html\">\r\n<ul>\r\n<li><p><code>lumped_mass [:]</code> is an array with as many masses as needed (in kg this time). Their order is important, as more information is required to implement them in a model.</p>\r\n</li>\r\n<li><p><code>lumped_mass_nodes [:]</code> is an array of integers. It contains the index of the nodes related to the masses given in <code>lumped_mass</code> in order.</p>\r\n</li>\r\n<li><p><code>lumped_mass_inertia [:, 3, 3]</code> is an array of 3x3 inertial tensors. The relationship is set by the ordering as well.</p>\r\n</li>\r\n<li><p><code>lumped_mass_position [:, 3]</code> is the relative position of the lumped mass wrt the node (given in <code>lumped_masss_nodes</code>) coordinates. <strong>ATTENTION:</strong> the lumped mass is solidly attached to the node, and thus, its position is given in Material FoR.</p>\r\n</li>\r\n</ul>\r\n\r\n</div>\r\n</div>\r\n</div>\r\n<div class=\"cell border-box-sizing text_cell rendered\"><div class=\"prompt input_prompt\">\r\n</div>\r\n<div class=\"inner_cell\">\r\n<div class=\"text_cell_render border-box-sizing rendered_html\">\r\n<h2 id=\"Aerodynamic-data\">Aerodynamic data<a class=\"anchor-link\" href=\"#Aerodynamic-data\">&#182;</a></h2><p>All the aero data is contained in <code>case.aero.h5</code>.</p>\r\n<p>It is important to know that the input for aero is usually based on elements (and inside the elements, their nodes). This causes sometimes an overlap in information, as some nodes are shared by two adjacent elements (like in the connectivities graph in the previous section). The easier way of dealing with this is to make sure the data is consistent, so that the properties of the last node of the first element are the same than the first node of the second element.</p>\r\n<p>Item by item:</p>\r\n\r\n</div>\r\n</div>\r\n</div>\r\n<div class=\"cell border-box-sizing text_cell rendered\"><div class=\"prompt input_prompt\">\r\n</div>\r\n<div class=\"inner_cell\">\r\n<div class=\"text_cell_render border-box-sizing rendered_html\">\r\n<ul>\r\n<li><p>In the <code>aero.h5</code> file, there is a Group called <code>airfoils</code>. The airfoils are stored in this group (which acts as a folder) as a two-column matrix with $x/c$ and $y/c$ in each column. They are named <code>'0', '1'</code>, and so on.</p>\r\n</li>\r\n<li><p><code>chords [num_elem, num_node_elem]</code> is an array with the chords of every airfoil given in an element/node basis.</p>\r\n</li>\r\n<li><p><code>twist [num_elem, num_node_elem]</code> has the twist angle in radians. It is implemented as a rotation around the local $x$ axis.</p>\r\n</li>\r\n<li><p><code>sweep [num_elem, num_node_elem]</code> same here, just a rotation around $z$.</p>\r\n</li>\r\n<li><p><code>airfoil_distribution_input [num_elem, num_node_elem]</code> contains the indices of the airfoils that you put previously in <code>airfoils</code></p>\r\n</li>\r\n<li><p><code>surface_distribution_input [num_elem]</code> is an integer array. It contains the index of the surface the element belongs to. Surfaces need to be continuous, so please note that if your beam numbering is not continuous, you need to make a surface per continuous section.</p>\r\n</li>\r\n<li><p><code>surface_m [num_surfaces]</code> is an integer array with the number of chordwise panels for every surface.</p>\r\n</li>\r\n<li><p><code>m_distribution [string]</code> is a string with the chordwise panel distribution. In almost all cases, leave it at <code>uniform</code>.</p>\r\n</li>\r\n<li><p><code>aero_node_input [num_node]</code> is a boolean (True/False) array that indicates if that node has a lifting surface attached to it.</p>\r\n</li>\r\n<li><p><code>elastic_axis [num_elem, num_node_elem]</code> indicates the elastic axis location with respect to the leading edge as a fraction of the chord of that rib. Note that the elastic axis is already determined, as the beam is fixed now, so this settings controls the location of the lifting surface wrt the beam.</p>\r\n</li>\r\n<li><p><code>control_surface [num_elem, num_node_elem]</code> is an integer array containing <code>-1</code> if that section has no control surface associated to it, and <code>0, 1, 2 ...</code> if the section belongs to the control surface <code>0, 1, 2 ...</code> respectively.</p>\r\n</li>\r\n<li><p><code>control_surface_type [num_control_surface]</code> contains <code>0</code> if the control surface deflection is static, and <code>1</code> is it is dynamic (if you need to run dynamic control surfaces, come see me).</p>\r\n</li>\r\n<li><p><code>control_surface_chord [num_control_surface]</code> is an INTEGER array with the number of panels belonging to the control surface. For example, if $M = 4$ and you want your control surface to be $0.25c$, you need to put <code>1</code>.</p>\r\n</li>\r\n<li><p><code>control_surface_hinge_coord [num_control_surface]</code> only necessary for lifting surfaces that are deflected as a whole, like some horizontal tails in some aircraft. Leave it at 0 if you are not modelling this. If you  are, come see me.</p>\r\n</li>\r\n</ul>\r\n\r\n</div>\r\n</div>\r\n</div>\r\n<div class=\"cell border-box-sizing text_cell rendered\"><div class=\"prompt input_prompt\">\r\n</div>\r\n<div class=\"inner_cell\">\r\n<div class=\"text_cell_render border-box-sizing rendered_html\">\r\n<h2 id=\"Common-solver-settings\">Common solver settings<a class=\"anchor-link\" href=\"#Common-solver-settings\">&#182;</a></h2>\r\n</div>\r\n</div>\r\n</div>\r\n<div class=\"cell border-box-sizing text_cell rendered\"><div class=\"prompt input_prompt\">\r\n</div>\r\n<div class=\"inner_cell\">\r\n<div class=\"text_cell_render border-box-sizing rendered_html\">\r\n<p>The solver settings are covered almost entirely in the documentation (again: <a href=\"https://ic-sharpy.readthedocs.io\">https://ic-sharpy.readthedocs.io</a>). I'm going to explain in more detail the important ones. The defaults settings are generally good enough for a majority of cases.</p>\r\n\r\n</div>\r\n</div>\r\n</div>\r\n<div class=\"cell border-box-sizing text_cell rendered\"><div class=\"prompt input_prompt\">\r\n</div>\r\n<div class=\"inner_cell\">\r\n<div class=\"text_cell_render border-box-sizing rendered_html\">\r\n<h3 id=\"BeamLoader\">BeamLoader<a class=\"anchor-link\" href=\"#BeamLoader\">&#182;</a></h3><p>BeamLoader reads the solver.txt and the fem.h5 files and generates the <code>beam</code> data structure. Its settings are simple:</p>\r\n<ul>\r\n<li><code>unsteady</code> leave it on</li>\r\n<li><code>orientation</code> is what is used to set the attitude angles. It is given as a quaternion (CAREFUL: a null rotation in quaternions is $[1, 0, 0, 0]$). You can give it in Euler angles as: <code>'orientation' = algebra.euler2quat(np.array([roll, alpha, beta]))</code>.</li>\r\n</ul>\r\n\r\n</div>\r\n</div>\r\n</div>\r\n<div class=\"cell border-box-sizing text_cell rendered\"><div class=\"prompt input_prompt\">\r\n</div>\r\n<div class=\"inner_cell\">\r\n<div class=\"text_cell_render border-box-sizing rendered_html\">\r\n<h3 id=\"AerogridLoader\">AerogridLoader<a class=\"anchor-link\" href=\"#AerogridLoader\">&#182;</a></h3><ul>\r\n<li><p><code>mstar</code> number of chordwise panels for the wake. A good value is $$M^* = \\frac{L_{\\mathrm{wake}}}{\\Delta t u_\\infty}$$, which means that the wake panels are the same size as the main wing ones.</p>\r\n</li>\r\n<li><p><code>freestream_dir</code> is a different approach to modifying the attitude angles. I'd leave alone unless you really need it.</p>\r\n</li>\r\n</ul>\r\n\r\n</div>\r\n</div>\r\n</div>\r\n<div class=\"cell border-box-sizing text_cell rendered\"><div class=\"prompt input_prompt\">\r\n</div>\r\n<div class=\"inner_cell\">\r\n<div class=\"text_cell_render border-box-sizing rendered_html\">\r\n<h3 id=\"NonLinearStatic\">NonLinearStatic<a class=\"anchor-link\" href=\"#NonLinearStatic\">&#182;</a></h3><p>The static beam solver settings. Important ones:</p>\r\n<ul>\r\n<li><p><code>max_iterations</code> maximum number of iterations for the structural solver. These are not the same as the ones in <code>DynamicCoupled</code>.</p>\r\n</li>\r\n<li><p><code>num_load_steps</code> if &gt; 1, the applied forces and gravity are applied progressively in several steps in order to avoid numerical divergence. Leave it at 1 unless you have problems with convergence of static cases.</p>\r\n</li>\r\n<li><p><code>delta_curved</code> leave it at $1e-1$.</p>\r\n</li>\r\n<li><p><code>min_delta</code> this one is more tricky. Usually $1e-6$ works well for flexible structures. If you are running more stiff stuff, you might need to lower it even more. Don't go under $1e-11$. If you don't know, start at $1e-6$, note the wing tip deflection and lower it even more. A too low value will cause the beam solver to reach <code>max_iterations</code> without convergence. When this happens, note the residual value and set something larger than that.</p>\r\n</li>\r\n<li><p><code>gravity_on</code> <code>on</code> if gravity, <code>off</code> if not.</p>\r\n</li>\r\n<li><p><code>gravity</code> $9.81$ if you are on Earth. Setting it to 0 is the same as <code>gravity_on</code> = <code>off</code>, but the latter is quicker.</p>\r\n</li>\r\n</ul>\r\n\r\n</div>\r\n</div>\r\n</div>\r\n<div class=\"cell border-box-sizing text_cell rendered\"><div class=\"prompt input_prompt\">\r\n</div>\r\n<div class=\"inner_cell\">\r\n<div class=\"text_cell_render border-box-sizing rendered_html\">\r\n<h3 id=\"StaticUvlm\">StaticUvlm<a class=\"anchor-link\" href=\"#StaticUvlm\">&#182;</a></h3><ul>\r\n<li><p><code>horseshoe</code> if this is <code>on</code>, <code>mstar</code> (in AerogridLoader) has to be 1. It controls the wake modelling. Usual wakes with <code>mstar &gt; 1</code> are discretised and are of finite length. The horsehoe modelling is derived from the analytical expansion of an discretised wake of infinite length. ATTENTION: use only in static simulations.</p>\r\n</li>\r\n<li><p><code>n_rollup</code> how many steps are carried out to convect the wake with full free-wake. This usually should be <code>0</code>, but if you want a pretty picture, you can use <code>n_rollup = int(mstar*1.5)</code>.</p>\r\n</li>\r\n<li><p><code>rollup_dt</code> if <code>n_rollup &gt; 0</code>, set <code>rollup_dt</code> to \r\n$$\r\n\\Delta t_{\\mathrm{rollup}} = \\frac{c/M}{u_\\infty}\r\n$$</p>\r\n</li>\r\n<li><p>'velocity_field_generator' a few options available here. This paragraph is applicable to every aero solver that has a <code>velocity_field_generator</code> setting.</p>\r\n<ul>\r\n<li><code>SteadyVelocityField</code>: quite straightforward. Give a u_inf value in <code>u_inf</code> and a direction in <code>u_inf_direction</code>.</li>\r\n<li><code>GustVelocityField</code>: this one generate gusts in several profiles. The ones you will probably use: <code>gust_shape: '1-cos'</code>, or <code>'continuous_sin'</code>. <ul>\r\n<li><code>u_inf</code> and <code>u_inf_direction</code> already explained</li>\r\n<li><code>gust_length</code>: equvalent to $2H$ in metres.</li>\r\n<li><code>gust_intensity</code>: reference (peak) velocity of the gust, in m/s.</li>\r\n<li><code>offset</code> x coord. of the first point of the gust with respect to the $[0, 0, 0]$ in inertial.</li>\r\n<li><code>span</code>: span of the aircraft (you are probably not going to use this, it is implemented for DARPA gusts).</li>\r\n</ul>\r\n</li>\r\n<li><code>VelocityFieldGenerator</code>: a full unsteady 3D field of velocities is input. Ask me if you want to use it.</li>\r\n</ul>\r\n</li>\r\n</ul>\r\n\r\n</div>\r\n</div>\r\n</div>\r\n<div class=\"cell border-box-sizing text_cell rendered\"><div class=\"prompt input_prompt\">\r\n</div>\r\n<div class=\"inner_cell\">\r\n<div class=\"text_cell_render border-box-sizing rendered_html\">\r\n<h3 id=\"StaticCoupled\">StaticCoupled<a class=\"anchor-link\" href=\"#StaticCoupled\">&#182;</a></h3><ul>\r\n<li><code>print_info</code>: set it to <code>on</code> in almost all cases.</li>\r\n<li><code>structural_solver</code> and <code>aero_solver</code>: these are strings with the name of the structural and aerodynamic solvers you want to use for the coupled simulation. A solver with that name needs to exist in SHARPy (check the list of available solvers at the start of a simulation).</li>\r\n<li><code>structural_solver_settings</code> and <code>aero_solver_settings</code>: a dictionary (each) that is basically the same you added before if you wanted to run a standalone structural or aero simulation. A code example:</li>\r\n</ul>\r\n<div class=\"highlight\"><pre><span></span><span class=\"n\">settings</span> <span class=\"o\">=</span> <span class=\"nb\">dict</span><span class=\"p\">()</span>\r\n<span class=\"n\">settings</span><span class=\"p\">[</span><span class=\"s1\">&#39;NonLinearStatic&#39;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"p\">{</span>\r\n    <span class=\"s1\">&#39;print_info&#39;</span><span class=\"p\">:</span> <span class=\"s1\">&#39;on&#39;</span><span class=\"p\">,</span>\r\n    <span class=\"s1\">&#39;max_iterations&#39;</span><span class=\"p\">:</span> <span class=\"mi\">150</span>\r\n    <span class=\"c1\"># ...</span>\r\n<span class=\"p\">}</span>\r\n<span class=\"n\">settings</span><span class=\"p\">[</span><span class=\"s1\">&#39;StaticUvlm&#39;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"p\">{</span>\r\n    <span class=\"s1\">&#39;print_info&#39;</span><span class=\"p\">:</span> <span class=\"s1\">&#39;on&#39;</span><span class=\"p\">,</span>\r\n    <span class=\"s1\">&#39;horseshoe&#39;</span><span class=\"p\">:</span> <span class=\"s1\">&#39;off&#39;</span>\r\n    <span class=\"c1\"># ...</span>\r\n<span class=\"p\">}</span>\r\n\r\n<span class=\"n\">settings</span><span class=\"p\">[</span><span class=\"s1\">&#39;StaticCoupled&#39;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"p\">{</span>\r\n    <span class=\"s1\">&#39;structural_solver&#39;</span><span class=\"p\">:</span> <span class=\"s1\">&#39;NonLinearStatic&#39;</span><span class=\"p\">,</span>\r\n    <span class=\"s1\">&#39;structural_solver_settings&#39;</span><span class=\"p\">:</span> <span class=\"n\">settings</span><span class=\"p\">[</span><span class=\"s1\">&#39;NonLinearStatic&#39;</span><span class=\"p\">],</span>\r\n    <span class=\"s1\">&#39;aero_solver&#39;</span><span class=\"p\">:</span> <span class=\"s1\">&#39;StaticUvlm&#39;</span><span class=\"p\">,</span>\r\n    <span class=\"s1\">&#39;aero_solver_settings&#39;</span><span class=\"p\">:</span> <span class=\"n\">settings</span><span class=\"p\">[</span><span class=\"s1\">&#39;StaticUvlm&#39;</span><span class=\"p\">],</span>\r\n    <span class=\"c1\"># ...</span>\r\n</pre></div>\r\n<ul>\r\n<li><code>max_iter</code>: max number of FSI iterations</li>\r\n<li><code>n_load_steps</code>: if &gt; 1, it ramps the aero and gravity forces slowly to improve convergence. Leave at 0 unless you really need it, then try 4 or 5.</li>\r\n<li><code>tolerance</code>: threshold for convergence of the FSI iteration. Make sure you are choosing a reasonable value for the case. If it converges in 1 iteration: lower it. If it takes more than 10: unless it is a very complicated case (next to flutter or overspeed conditions), lower it.</li>\r\n<li><code>relaxation_factor</code> a real number $\\omega \\in [0, 1)$. $\\omega = 0$ means no relaxation, $\\omega \\to 1$ means every iteration affects very little to the state of the system. Usually 0.3 is a good value. If you are (again) close to overspeed, flutter... you are going to need to raise it to 0.6 or even more.</li>\r\n</ul>\r\n\r\n</div>\r\n</div>\r\n</div>\r\n<div class=\"cell border-box-sizing text_cell rendered\"><div class=\"prompt input_prompt\">\r\n</div>\r\n<div class=\"inner_cell\">\r\n<div class=\"text_cell_render border-box-sizing rendered_html\">\r\n<h3 id=\"Static-trim\">Static trim<a class=\"anchor-link\" href=\"#Static-trim\">&#182;</a></h3><p>This solver acts like a wrapper of <code>StaticCoupled</code>, just like <code>StaticCoupled</code> is a wrap for the structural and aero solver. That means that when we initialise the <code>StaticTrim</code> solver, we also create a <code>StaticCoupled</code>, a <code>NonlinearStatic</code> and a <code>StaticUvlm</code> instance.</p>\r\n<p>It is important to know that StaticTrim only trims the longitudinal variables ($F_x, F_z, M_y$) by modifying the angle of attack, tail deflection and thrust. No lateral/directional variables are considered.</p>\r\n<ul>\r\n<li><code>solver</code>: probably you want <code>StaticCoupled</code></li>\r\n<li><code>solver_settings</code>: most likely, something similar to <code>settings['StaticCoupled</code>]`.</li>\r\n<li><code>initial_alpha</code>, <code>initial_deflection</code>, <code>initial_thrust</code>: initial values for the angle of attack, elevator deflection and thrust per engine.</li>\r\n</ul>\r\n\r\n</div>\r\n</div>\r\n</div>\r\n<div class=\"cell border-box-sizing text_cell rendered\"><div class=\"prompt input_prompt\">\r\n</div>\r\n<div class=\"inner_cell\">\r\n<div class=\"text_cell_render border-box-sizing rendered_html\">\r\n<h3 id=\"DynamicCoupled\">DynamicCoupled<a class=\"anchor-link\" href=\"#DynamicCoupled\">&#182;</a></h3><p>This is where things get interesting. <code>DynamicCoupled</code> performs the time stepping and FSI iteration processes. Just as <code>StaticCoupled</code>, it requires a structural solver (for free-flight elastic aircraft it will be <code>NonLinearDynamicCoupledStep</code>, ask for others), and an aero solver, which will be <code>StepUvlm</code>.</p>\r\n<p>The <code>structural_solver</code> and <code>structural_solver_settings</code> (and the aero equivalents) are set up the same way I showed in the <code>StaticCoupled</code>.</p>\r\n<ul>\r\n<li><code>fsi_substeps</code>: max iterations in FSI loop</li>\r\n<li><code>fsi_tolerance</code>: quite descriptive. What I said for the static coupled tolerance still applies.</li>\r\n<li><code>relaxation_factor</code>: exactly the same. There are more settings to control the relaxation, and make it vary as the simulation progresses, but you probably won't need it.</li>\r\n<li><code>minimum_steps</code>: minimum FSI steps to run even if convergence is reached.</li>\r\n<li><code>n_time_steps</code>: quite descriptive.</li>\r\n<li><code>dt</code>: $\\Delta t$</li>\r\n<li><code>include_unsteady_force_contribution</code>: this activates the added mass effects calculation. It is good to have it, but it makes the simulation a bit more challenging from a numerical point of view. Run some numbers by hand and decide if it is worth it. Removing this contribution makes the code faster.</li>\r\n<li><code>postprocessors</code>: the fun begins. <code>postprocessors</code> are modules run every time step after convergence. For example, to calculate the beam loads, or output to paraview. This variable is an array of strings (<code>['one_module', 'another_module']</code>) and the modules are run in the order they are indicated. A typical workflow would be:</li>\r\n</ul>\r\n<div class=\"highlight\"><pre><span></span><span class=\"s1\">&#39;postprocessors&#39;</span><span class=\"p\">:</span> <span class=\"p\">[</span>\r\n    <span class=\"s1\">&#39;BeamLoads&#39;</span><span class=\"p\">,</span>     <span class=\"c1\"># Calculate the loads at every beam element</span>\r\n    <span class=\"s1\">&#39;BeamPlot&#39;</span><span class=\"p\">,</span>      <span class=\"c1\"># Output the beam data to paraview (including the beam loads - that&#39;s why beamloads goes first)</span>\r\n    <span class=\"s1\">&#39;AerogridPlot&#39;</span><span class=\"p\">,</span>  <span class=\"c1\"># Output the aero grid to paraview</span>\r\n<span class=\"p\">]</span>\r\n</pre></div>\r\n<ul>\r\n<li><code>postprocessor_settings</code>: hopefully by this time you already get the <code>_settings</code> thing. I won't explain the settings of the processors here, you can do it in the code.</li>\r\n</ul>\r\n\r\n</div>\r\n</div>\r\n</div>\r\n<div class=\"cell border-box-sizing text_cell rendered\"><div class=\"prompt input_prompt\">\r\n</div>\r\n<div class=\"inner_cell\">\r\n<div class=\"text_cell_render border-box-sizing rendered_html\">\r\n<h3 id=\"NonLinearDynamicCoupledStep\">NonLinearDynamicCoupledStep<a class=\"anchor-link\" href=\"#NonLinearDynamicCoupledStep\">&#182;</a></h3><p>Almost same settings as <code>NonLinearStatic</code>, so I'm going to explain only the settings that are different.</p>\r\n<ul>\r\n<li><code>newmark_damp</code>: artificial damping parameter. Increasing this damps the higher frequencies while leaving the low frequency modes relatively untouched (please note the relatively). Start with $5\\times 10^{-4}$ an increase it if needed. No more than $10^{-2}$.</li>\r\n<li><code>num_steps</code>: number of time steps</li>\r\n<li><code>dt</code>: $\\Delta t$</li>\r\n<li><code>initial_velocity</code>: if you want to aircraft to fly with a velocity, this is the place to put it. Instead, you can leave it at 0 and put the velocity as a <code>u_inf</code> contribution. Results will be the same.</li>\r\n</ul>\r\n\r\n</div>\r\n</div>\r\n</div>\r\n<div class=\"cell border-box-sizing text_cell rendered\"><div class=\"prompt input_prompt\">\r\n</div>\r\n<div class=\"inner_cell\">\r\n<div class=\"text_cell_render border-box-sizing rendered_html\">\r\n<h3 id=\"StepUvlm\">StepUvlm<a class=\"anchor-link\" href=\"#StepUvlm\">&#182;</a></h3><ul>\r\n<li><code>convection_scheme</code>: you probably want to leave it at <code>2</code>. This convects the wake with the background flow (no influence from the aircraft). <code>3</code> is a full free-wake, which looks very good, takes very long and results don't change if compared to <code>2</code> in most of the cases.</li>\r\n<li><code>gamma_dot_filtering</code>: if you added the <code>unsteady_forces_contribution</code> in <code>DynamicCoupled</code>, you probably want to put <code>7</code> or <code>9</code> here. If not, it won't be considered.</li>\r\n</ul>\r\n\r\n</div>\r\n</div>\r\n</div>\r\n<div class=\"cell border-box-sizing text_cell rendered\"><div class=\"prompt input_prompt\">\r\n</div>\r\n<div class=\"inner_cell\">\r\n<div class=\"text_cell_render border-box-sizing rendered_html\">\r\n<p><img src=\"data:image/png;base64,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\"/></p>\r\n\r\n</div>\r\n</div>\r\n</div>\r\n<div class=\"cell border-box-sizing text_cell rendered\"><div class=\"prompt input_prompt\">\r\n</div>\r\n<div class=\"inner_cell\">\r\n<div class=\"text_cell_render border-box-sizing rendered_html\">\r\n<h1 id=\"A-very-short-intro-to-the-Command-Line\">A very short intro to the Command Line<a class=\"anchor-link\" href=\"#A-very-short-intro-to-the-Command-Line\">&#182;</a></h1>\r\n</div>\r\n</div>\r\n</div>\r\n<div class=\"cell border-box-sizing text_cell rendered\"><div class=\"prompt input_prompt\">\r\n</div>\r\n<div class=\"inner_cell\">\r\n<div class=\"text_cell_render border-box-sizing rendered_html\">\r\n<p>The command line is where you are going to spend quite a lot of your time. Make your life easier and learn how to use it.</p>\r\n<p>When you open a terminal, the default location to land is your <code>HOME</code> folder. In the terminal, your home folder is identified as <code>~</code> or <code>$HOME</code>.</p>\r\n<p>You can navigate to the folder of your choice using <code>cd</code> (<em>change directory</em>) for example, if you want to go to <code>Downloads</code>:</p>\r\n<div class=\"highlight\"><pre><span></span><span class=\"nb\">cd</span> Downloads\r\n</pre></div>\r\n<p>Extra tip: write <code>cd Dow</code> and press Tab to autocomplete.</p>\r\n<p>If you haven't created the folder you want to move to, you can <em>make dir</em>: <code>mkdir</code>. For example, to create a folder called <code>Code</code> in you Home directory:</p>\r\n<div class=\"highlight\"><pre><span></span><span class=\"c1\"># go to your home folder if you are not there yet</span>\r\n<span class=\"nb\">cd</span> ~ <span class=\"c1\"># or `cd ` or `cd $HOME`, all equivalent</span>\r\n\r\n<span class=\"c1\"># create the dir</span>\r\nmkdir Code\r\n</pre></div>\r\n\r\n</div>\r\n</div>\r\n</div>\r\n<div class=\"cell border-box-sizing text_cell rendered\"><div class=\"prompt input_prompt\">\r\n</div>\r\n<div class=\"inner_cell\">\r\n<div class=\"text_cell_render border-box-sizing rendered_html\">\r\n<p>If you have a file in <code>Downloads</code> called <code>very_private_stuff.txt</code>, you can <em>copy</em> it (<code>cp</code>) or <em>move</em> it (<code>mv</code>) to your <code>Code</code> folder:</p>\r\n<div class=\"highlight\"><pre><span></span><span class=\"nb\">cd</span> Code\r\n\r\n<span class=\"c1\"># copy it</span>\r\ncp ../Downloads/very_private_stuff.txt ./\r\n\r\n<span class=\"c1\"># or move it</span>\r\nmv  ../Downloads/very_private_stuff.txt ./\r\n</pre></div>\r\n<p>Things that require explanation:</p>\r\n<ul>\r\n<li><code>..</code> denotes the parent folder of a location. For example: <code>../Downloads</code> means \"go to the previous folder and then to Downloads\"</li>\r\n<li><code>.</code> (a single period) denotes the current location. For example: <code>./</code> means \"right here\"</li>\r\n</ul>\r\n<p>You can also use <code>mv</code> to rename files:</p>\r\n<div class=\"highlight\"><pre><span></span>mv very_private_stuff.txt homework.txt\r\n</pre></div>\r\n<p>If you want copy a <strong>folder</strong>, you need to add <code>-r</code> (this is called a <em>flag</em>) after <code>cp</code>. Example: we have a folder in <code>Downloads</code> called <code>justin_bieber_complete_discography</code> and we want to copy it to <code>Music</code> and call it <code>arctic_monkeys</code> instead:</p>\r\n<div class=\"highlight\"><pre><span></span><span class=\"nb\">cd</span> ~\r\nmkdir Music\r\n\r\n<span class=\"c1\"># note the space between cp and -r</span>\r\ncp -r Downloads/justin_bieber_complete_discography Music/arctic_monkeys\r\n</pre></div>\r\n<p>You can also delete or <em>remove</em> (<code>rm</code>) files and folders. Now you don't want your Justin Bieber tunes in your <code>Downloads</code> folder, so you run:</p>\r\n<div class=\"highlight\"><pre><span></span><span class=\"nb\">cd</span> ~/Downloads\r\n\r\n<span class=\"c1\"># note the -r here too</span>\r\nrm -r justin_bieber_complete_discography\r\n</pre></div>\r\n<p><strong>ATTENTION</strong> the <code>rm</code> command IS NOT REVERTIBLE. No Rubbish Bin, Trash, helmet or parachute. Make sure you are very very sure you actually want to delete exactly that (and nothing else).</p>\r\n<p>A note: some files cannot be deleted with a simple <code>rm file</code>, and the computer will say it is <em>protected</em>. Then add the flag <code>-f</code> (<em>force</em>), but this makes <code>rm</code> even more dangerous, so try not to use it. The <code>git</code> internal files are sometimes protected, so if you want to delete an old copy of SHARPy, you probably will need to use it.</p>\r\n<p>These are the very basic commands for command line survival. I'm going to add a few non-essential ones, but useful nevertheless:</p>\r\n<ul>\r\n<li><code>which</code>: it tells you which executable is running. For example <code>which sharpy</code> returns: <code>/home/user/code/sharpy/bin/sharpy</code>. It is useful for knowing which version of anything you are running and where it comes from. For example, it is useful for knowing if you are using the updated compilers (usually in <code>/usr/local/bin</code>) or the default ones (<code>/usr/bin</code> probably).</li>\r\n<li><code>top</code>: shows you the processes running and how much RAM they're using.</li>\r\n<li><code>touch</code>: creates and empty file with the name you tell after the command.</li>\r\n<li><code>ipython</code>: starts a nice Python terminal with autocomplete and some colours. Much better than <code>python</code>.</li>\r\n<li><code>history</code>: if you forgot <em>that nice command that did what I wanted and now I can't remember</em>. Extra: <code>history | grep \"command\"</code> (without the quotes) will only show you the history lines that contain <code>command</code>.</li>\r\n<li><code>*</code>: wildcard for copying, removing, moving... Everything. Example: <code>cp *.txt ./my_files/\"</code>. Again: careful with <code>rm</code> and <code>*</code> together. Be VERY careful with <code>rm</code> and <code>-rf</code> and <code>*</code> together.</li>\r\n<li><code>pwd</code>: for when you get lost and don't know where you are in the folder structure.</li>\r\n<li><code>nano</code>: simple text editor. Save with <code>ctrl+o</code>, exit with <code>ctrl+x</code>.</li>\r\n<li><code>more</code>: have a look at a file quickly</li>\r\n<li><code>head</code>: show the first lines of a file</li>\r\n<li><code>tail</code>: show the last lines of a file</li>\r\n</ul>\r\n\r\n</div>\r\n</div>\r\n</div>\r\n<div class=\"cell border-box-sizing text_cell rendered\"><div class=\"prompt input_prompt\">\r\n</div>\r\n<div class=\"inner_cell\">\r\n<div class=\"text_cell_render border-box-sizing rendered_html\">\r\n<h1 id=\"Debugging-guide\">Debugging guide<a class=\"anchor-link\" href=\"#Debugging-guide\">&#182;</a></h1>\r\n</div>\r\n</div>\r\n</div>\r\n<div class=\"cell border-box-sizing text_cell rendered\"><div class=\"prompt input_prompt\">\r\n</div>\r\n<div class=\"inner_cell\">\r\n<div class=\"text_cell_render border-box-sizing rendered_html\">\r\n<p>When the program fails, there are a number of typical reasons:</p>\r\n<ul>\r\n<li>Did you forget <code>conda activate sharpy_env</code> and <code>source bin/sharpy_vars.sh</code>?<ul>\r\n<li>Check my alias tip at the beginning of the document.</li>\r\n<li>If you do in the terminal: <code>which sharpy</code>, do you get the one you want?</li>\r\n<li>If you do <code>which python</code>, does the result point to <code>anaconda3/envs/sharpy_env/bin</code> (or similar)?</li>\r\n</ul>\r\n</li>\r\n<li>Wrong input (inconsistent connectivities, mass = 0...)<ul>\r\n<li>Sometimes not easy to detect. For the structural model, run <code>BeamLoader</code> and <code>BeamPlot</code> with no structural solver in between. Go over the structure in Paraview. Check the <code>fem.h5</code> file with HDFView.</li>\r\n<li>Remember that connectivities are ordered as $[0, 2, 1]$ (the central node goes last).</li>\r\n<li>Make sure the <code>num_elem</code> and <code>num_node</code> variables are actually your correct number of elements and nodes.</li>\r\n</ul>\r\n</li>\r\n<li>Not running the actual case you want to.<ul>\r\n<li>Cleanup the folder and regenerate the case</li>\r\n</ul>\r\n</li>\r\n<li>Not running the SHARPy version you want.<ul>\r\n<li>Check at the beginning of the execution the path to the SHARPy folder.</li>\r\n</ul>\r\n</li>\r\n<li>Not running the correct branch of the code.<ul>\r\n<li>You probably want to use <code>develop</code>. Again, check the first few lines of SHARPy output.</li>\r\n</ul>\r\n</li>\r\n<li>Very different (I'm talking orders of magnitude) stiffnesses between nodes or directions?</li>\r\n<li>The UVLM requires a smaller vortex core cutoff?</li>\r\n<li>Newmark damping is not enough for this case?</li>\r\n<li>Do you have an element with almost 0 mass?</li>\r\n<li>Have a look at the $\\dot{\\Gamma}$ filtering and numerical parameters in the settings of <code>StepUvlm</code> and <code>DynamicCoupled</code>.</li>\r\n<li>Add more relaxation to the <code>StaticCoupled</code> or <code>DynamicCoupled</code> solvers.</li>\r\n<li>The code has a bug (depending on where, it may be likely).<ul>\r\n<li>Go over the rest of the list. Plot the case in paraview. Go over the rest of the list again. Prepare the simplest example that reproduces the problem and come see us.</li>\r\n</ul>\r\n</li>\r\n<li>The code diverges because it has to (physical unstable behaviour)<ul>\r\n<li>Then don't complain</li>\r\n</ul>\r\n</li>\r\n<li>Your model still doesn't work and you don't know why.<ul>\r\n<li><code>import pdb; pdb.set_trace()</code> and patience</li>\r\n</ul>\r\n</li>\r\n<li>If nothing else works... get a rubber duck (or a very very patient good friend) and go over every step</li>\r\n</ul>\r\n\r\n</div>\r\n</div>\r\n</div>\r\n<div class=\"cell border-box-sizing text_cell rendered\"><div class=\"prompt input_prompt\">\r\n</div>\r\n<div class=\"inner_cell\">\r\n<div class=\"text_cell_render border-box-sizing rendered_html\">\r\n<p><img src=\"data:image/png;base64,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pRLFP//+V/BfJKwAh/YeJ/HspRveTiIS4a5W0cDdDZVMhuoudznTG01cyMnhUm4e+SWlXD8Y9OnThzVr1lTakcmBmsXgwYPZsGGD3XG2T58+wu+rbt26rFq1ivbt2wuTipKSEt577z3BeykSidi+fbvgkbTUXygUClJTU+0mReTk5DBixAgbIrV792569ux5S9/L0nDHIt7odDq715XRaGT37t289957xMbGIhaL2bNnD2vXrhVy093c3Ni9e7fdSvuEhASaNWsm2HAWL15MYmJiuXjK68f2sLAwNm/ezI8//sjLL78scJLrC8KvXr2Kt7c3RqORli1botPpWL58ufA+jzzyCHv37rWxK5aUlLBq1SomT54skMD69euzd+9eYV9qCq6uruTk5Njt9hkREUHPnj0FTlW/fn0+++wzwsLCBAEwLi6OESNGcOTIkTIxSS4nISGhSgvKPUdYx48fz1dffVWlByUqKorly5fz8MMPM2DAAJu8rxMnTtCyZUvMZnO5arXCwkIGDRpkd8ATiUQ888wzLFiwoNKqfgt++eUXwVv6/PPP27Ssu36WVFUhk6U7l16vL9fcYMuWLUybNq1C361FEV66dKmQxWrBjBkzmDZtGt7e3gwaNIiVK1faVA23atWKdevWERwcLDw2dOhQMjMz2bRp030/iNxPhFUuV6DRaNBqtLg4u6JWq5HLFfzX8V8lrMVFpWxfe4Dioqr9oRq5DD9nZ9zVKrRyGXLJvam0ZxUVEZ95jUyrez+UtbrcunXrDfVfd+DmUVlxVXJyMu3bt7eJfnz88ccFr+LevXuFKCr4N/fbAmslcP78+eVW7ZYvX87UqVNtrFoTJ04UGh3cCqxbmluuqwULFtC2bVucnZ25ePEihw4d4uuvv+bPP/8UtnvnnXf44osvuHbtGh07diQuLk4Qc959911GjRol1HVcu3aNIUOGCMkKcrmcy5cvM3fuXLuE1WAw0KRJE+GYDR8+nM2bN5Obm4tCoeDEiRM2468FXbt25cCBA4Jq6uTkRPv27QXltF27drz++utIJBISExNZtmyZzXm5XWTV+hy7u7uTmppabiX6+jg1KLPnNW/enMLCQg4cOGDznOX43ynUGGG1VM0FBATckvdw2LBhbN68mTlz5giExQKz2czixYtZuXKlEEvRrFkzxo8fb9NmrSoYDAY6d+4sWAdi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\" /></p>\r\n\r\n</div>\r\n</div>\r\n</div>\r\n<div class=\"cell border-box-sizing text_cell rendered\"><div class=\"prompt input_prompt\">\r\n</div>\r\n<div class=\"inner_cell\">\r\n<div class=\"text_cell_render border-box-sizing rendered_html\">\r\n<p>If your model doesn't do what it is supposed to do:</p>\r\n<ul>\r\n<li><p>Check for symmetric response where the model is symmetric.</p>\r\n<ul>\r\n<li>If it is not, run the beam solver first and make sure your properties are correct. Make sure the matrices for mass and stiffness are rotated if they need to be (remember the Material FoR definition and the <code>for_delta</code>?)</li>\r\n<li>Now run the aerodynamic solver only and double check that the forces are symmetric.</li>\r\n<li>Make sure your tolerances are low enough so that at least 4 FSI iterations are performed in <code>StaticCoupled</code> or <code>DynamicCoupled</code>.</li>\r\n</ul>\r\n</li>\r\n<li><p>Make sure your inputs are correct. For example: a dynamic case can be run with $u_\\infty = 0$ and the plane moving forwards, or $u_\\infty = $whatever and the plane velocity = 0. It is very easy to mix both, and end up with double the effective incoming speed (or none).</p>\r\n</li>\r\n<li><p>Run simple stuff before coupling it. For example, if your wing tip deflections don't match what you'd expect, calculate the deflection under a small tip force (not too small, make sure the deflection is &gt; 1% of the length!) by hand, and compare.</p>\r\n</li>\r\n<li><p>It is more difficult to do the same with the UVLM, as you need a VERY VERY high aspect ratio to get close to the 2D potential solutions. You are going to have to take my word for it: the UVLM works.</p>\r\n</li>\r\n<li><p>But check the aero grid geometry in Paraview, including chords lengths and angles.</p>\r\n</li>\r\n</ul>\r\n\r\n</div>\r\n</div>\r\n</div>\r\n<div class=\"cell border-box-sizing text_cell rendered\"><div class=\"prompt input_prompt\">\r\n</div>\r\n<div class=\"inner_cell\">\r\n<div class=\"text_cell_render border-box-sizing rendered_html\">\r\n<h1 id=\"Other-useful-software\">Other useful software<a class=\"anchor-link\" href=\"#Other-useful-software\">&#182;</a></h1><ul>\r\n<li><a href=\"https://support.hdfgroup.org/products/java/release/download.html\">HDFView</a> for opening and inspecting the <code>.h5</code> files</li>\r\n<li>Gitkraken is a good graphical interface for Git.</li>\r\n<li>Pycharm for editing python and running cases.</li>\r\n<li>Jupyter notebook (this was made with it) for results and tests.</li>\r\n</ul>\r\n\r\n</div>\r\n</div>\r\n</div>\r\n    </div>\r\n  </div>\r\n</body>\r\n\r\n \r\n\r\n\r\n</html>\r\n"
  },
  {
    "path": "docs/source/conf.py",
    "content": "#!/usr/bin/env python3\n# -*- coding: utf-8 -*-\n#\n# SHARPy documentation build configuration file, created by\n# sphinx-quickstart on Wed Oct 19 16:40:48 2016.\n#\n# This file is execfile()d with the current directory set to its\n# containing dir.\n#\n# Note that not all possible configuration values are present in this\n# autogenerated file.\n#\n# All configuration values have a default; values that are commented out\n# serve to show the default.\n\n# If extensions (or modules to document with autodoc) are in another directory,\n# add these directories to sys.path here. If the directory is relative to the\n# documentation root, use os.path.abspath to make it absolute, like shown here.\n#\nimport os\nimport sys\n# import guzzle_sphinx_theme\n# sys.path.insert(0, os.path.abspath('../'))\nsys.path.insert(0, os.path.abspath('./../../'))\n# sys.path.insert(0, os.path.abspath('..'))\n# import recommonmark\n# from recommonmark.transform import AutoStructify\n# # Markdown Source Parsers\n# from recommonmark.parser import CommonMarkParser\n\n# print(sys.path)\n# -- General configuration ------------------------------------------------\n\n# If your documentation needs a minimal Sphinx version, state it here.\n#\nneeds_sphinx = '3.0'\n\n# Add any Sphinx extension module names here, as strings. They can be\n# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom\n# ones.\nextensions = [\n    'sphinx.ext.autodoc',\n    'sphinx.ext.coverage',\n    'sphinx.ext.mathjax',\n    'sphinx.ext.viewcode',\n    # 'sphinx.ext.githubpages',\n    'sphinx.ext.napoleon',\n    'nbsphinx',\n    'sphinx.ext.autosectionlabel',\n    'sphinxcontrib.jquery',\n    'recommonmark'\n]\n\n# Add any paths that contain templates here, relative to this directory.\ntemplates_path = ['_templates']\n\n# Mathjax path for equation rendering\nmathjax_path = \"https://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML\"\n\n# Markdown Source Parsers\nsource_parsers = {\n   '.md': 'recommonmark.parser.CommonMarkParser'}\n\n# The suffix(es) of source filenames.\n# You can specify multiple suffix as a list of string:\n#\nsource_suffix = ['.rst', '.md']\n\n# The encoding of source files.\n#\n# source_encoding = 'utf-8-sig'\n\n# The master toctree document.\nmaster_doc = 'index'\n\n# General information about the project.\nproject = 'SHARPy'\ncopyright = '2025, LoCA Lab ICL'\nauthor = 'Aeroelastics Lab, Imperial College London'\n\n# The version info for the project you're documenting, acts as replacement for\n# |version| and |release|, also used in various other places throughout the\n# built documents.\n#\n# The short X.Y version.\nversion = '2.4'\n# The full version, including alpha/beta/rc tags.\nrelease = '2.4'\n\n# The language for content autogenerated by Sphinx. Refer to documentation\n# for a list of supported languages.\n#\n# This is also used if you do content translation via gettext catalogs.\n# Usually you set \"language\" from the command line for these cases.\nlanguage = None\n\n# There are two options for replacing |today|: either, you set today to some\n# non-false value, then it is used:\n#\n# today = ''\n#\n# Else, today_fmt is used as the format for a strftime call.\n#\n# today_fmt = '%B %d, %Y'\n\n# List of patterns, relative to source directory, that match files and\n# directories to ignore when looking for source files.\n# This patterns also effect to html_static_path and html_extra_path\nexclude_patterns = [\"**/.so\", \"../../lib/*\", \"../*\", \"/_static\", \"/content/\",\n                    '_build', '**.ipynb_checkpoints']\n\n# The reST default role (used for this markup: `text`) to use for all\n# documents.\n#\n# default_role = None\n\n# If true, '()' will be appended to :func: etc. cross-reference text.\n#\n# add_function_parentheses = True\n\n# If true, the current module name will be prepended to all description\n# unit titles (such as .. function::).\n#\n# add_module_names = True\n\n# If true, sectionauthor and moduleauthor directives will be shown in the\n# output. They are ignored by default.\n#\n# show_authors = False\n\n# The name of the Pygments (syntax highlighting) style to use.\npygments_style = 'sphinx'\n\n# A list of ignored prefixes for module index sorting.\n# modindex_common_prefix = []\n\n# If true, keep warnings as \"system message\" paragraphs in the built documents.\n# keep_warnings = False\n\n# If true, `todo` and `todoList` produce output, else they produce nothing.\ntodo_include_todos = False\n\n# Exclude matplotlib - avoids conflicts when running sphinx\n# http://www.sphinx-doc.org/en/master/usage/extensions/autodoc.html#confval-autodoc_mock_imports\nautodoc_mock_imports = [\"matplotlib\",\n                        \"numpy\",\n                        \"colorama\",\n                        \"h5py\",\n                        \"scipy\",\n                        \"ctypes\",\n                        \"tvtk\",\n                        \"sharpy.lib\",\n                        \"sharpy.utils.ctypes_utils\",\n                        \"sharpy.linear.src.libuvlm\",\n                        \"sharpy.linear.src.lib_dbiot\",\n                        \"pandas\",\n                        \"lxml\",\n                        'mpl_toolkits',\n                        # 'sharpy.aero.utils',\n                        'yaml',\n                        'sharpy.aero.utils.uvlmlib',\n                        'sharpy.linear.src.uvlmutils',\n                        'sharpy.structure.utils.xbeamlib',\n                        'sharpy.utils.constants']\n                        # \"interp\", \"multisurfaces\", \"assembly\", \"libss\",]\n\n                        # Note: N. Goizueta 3/12/18: mocking imports from sharpy.linear.src that contain numpy\n                        # operators outside any function definition as these are causing problems. If numpy is not\n                        # mocked, it doesn't build on RTD. If it is mocked, it raises an error when compiling locally\n                        # N. Goizueta 23/7/19 - Removing sharpy.linear until its ready to be merged. Too many errors are\n                        # causing a build failure on RTD.\n\n# # Exclude selected modules\n# from unittest.mock import MagicMock\n#\n# class Mock(MagicMock):\n#     @classmethod\n#     def __getattr__(cls, name):\n#         return MagicMock()\n#\n# MOCK_MODULES = [\"matplotlib\", \"numpy\", \"colorama\", \"h5py\", \"scipy\",\n#                 \"sharpy.lib.libxbeam.so\", \"sharpy.utils.ctypes_utils.import_ctypes_lib\"]\n# sys.modules.update((mod_name, Mock()) for mod_name in MOCK_MODULES)\n#\n\n# Sphinx extension to execute code in the documentation\n# https://github.com/jpsenior/sphinx-execute-code\n# extensions.append('sphinx_execute_code')\n\n# -- Options for HTML output ----------------------------------------------\n\n# html_theme_path = guzzle_sphinx_theme.html_theme_path()\n# html_theme = 'guzzle_sphinx_theme'\n#\n# # Register the theme as an extension to generate a sitemap.xml\n# extensions.append(\"guzzle_sphinx_theme\")\n#\n# # Guzzle theme options (see theme.conf for more information)\n# html_theme_options = {\n#     # Set the name of the project to appear in the sidebar\n#     \"project_nav_name\": \"SHARPy\",\n# }\n\n# The theme to use for HTML and HTML Help pages.  See the documentation for\n# a list of builtin themes.\n#\nhtml_theme = 'sphinx_rtd_theme'\n\n# Theme options are theme-specific and customize the look and feel of a theme\n# further.  For a list of options available for each theme, see the\n# documentation.\n#\n# html_theme_options = {}\n\n# Add any paths that contain custom themes here, relative to this directory.\n# html_theme_path = []\n\n# The name for this set of Sphinx documents.\n# \"<project> v<release> documentation\" by default.\n#\n# html_title = 'SHARPy v0.0'\n\n# A shorter title for the navigation bar.  Default is the same as html_title.\n#\n# html_short_title = None\n\n# The name of an image file (relative to this directory) to place at the top\n# of the sidebar.\n#\n# html_logo = None\n\n# The name of an image file (relative to this directory) to use as a favicon of\n# the docs.  This file should be a Windows icon file (.ico) being 16x16 or 32x32\n# pixels large.\n#\n# html_favicon = None\n\n# Add any paths that contain custom static files (such as style sheets) here,\n# relative to this directory. They are copied after the builtin static files,\n# so a file named \"default.css\" will overwrite the builtin \"default.css\".\nhtml_static_path = ['_static']\n\n# Add any extra paths that contain custom files (such as robots.txt or\n# .htaccess) here, relative to this directory. These files are copied\n# directly to the root of the documentation.\n#\n# html_extra_path = []\n\n# If not None, a 'Last updated on:' timestamp is inserted at every page\n# bottom, using the given strftime format.\n# The empty string is equivalent to '%b %d, %Y'.\n#\n# html_last_updated_fmt = None\n\n# If true, SmartyPants will be used to convert quotes and dashes to\n# typographically correct entities.\n#\n# html_use_smartypants = True\n\n# Custom sidebar templates, maps document names to template names.\n#\n# html_sidebars = {}\n\n# Additional templates that should be rendered to pages, maps page names to\n# template names.\n#\n# html_additional_pages = {}\n\n# If false, no module index is generated.\n#\n# html_domain_indices = True\n\n# If false, no index is generated.\n#\n# html_use_index = True\n\n# If true, the index is split into individual pages for each letter.\n#\n# html_split_index = False\n\n# If true, links to the reST sources are added to the pages.\n#\n# html_show_sourcelink = True\n\n# If true, \"Created using Sphinx\" is shown in the HTML footer. Default is True.\n#\nhtml_show_sphinx = False\n\n# If true, \"(C) Copyright ...\" is shown in the HTML footer. Default is True.\n#\n# html_show_copyright = True\n\n# If true, an OpenSearch description file will be output, and all pages will\n# contain a <link> tag referring to it.  The value of this option must be the\n# base URL from which the finished HTML is served.\n#\n# html_use_opensearch = ''\n\n# This is the file name suffix for HTML files (e.g. \".xhtml\").\n# html_file_suffix = None\n\n# Language to be used for generating the HTML full-text search index.\n# Sphinx supports the following languages:\n#   'da', 'de', 'en', 'es', 'fi', 'fr', 'h', 'it', 'ja'\n#   'nl', 'no', 'pt', 'ro', 'r', 'sv', 'tr', 'zh'\n#\n# html_search_language = 'en'\n\n# A dictionary with options for the search language support, empty by default.\n# 'ja' uses this config value.\n# 'zh' user can custom change `jieba` dictionary path.\n#\n# html_search_options = {'type': 'default'}\n\n# The name of a javascript file (relative to the configuration directory) that\n# implements a search results scorer. If empty, the default will be used.\n#\n# html_search_scorer = 'scorer.js'\n\n# Output file base name for HTML help builder.\nhtmlhelp_basename = 'SHARPydoc'\n\n# -- Options for LaTeX output ---------------------------------------------\n\nlatex_elements = {\n     # The paper size ('letterpaper' or 'a4paper').\n     #\n     'papersize': 'a4paper',\n\n     # The font size ('10pt', '11pt' or '12pt').\n     #\n     'pointsize': '12pt',\n\n     # Additional stuff for the LaTeX preamble.\n     #\n     'preamble': r'\\setcounter{tocdepth}{2}',\n\n     # Latex figure (float) alignment\n     #\n     'figure_align': 'htbp',\n}\n\n# Grouping the document tree into LaTeX files. List of tuples\n# (source start file, target name, title,\n#  author, documentclass [howto, manual, or own class]).\nlatex_documents = [\n    (master_doc, 'SHARPy.tex', 'SHARPy Documentation',\n     'LoCA Lab ICL', 'manual'),\n]\n\n# The name of an image file (relative to this directory) to place at the top of\n# the title page.\n#\n# latex_logo = None\n\n# For \"manual\" documents, if this is true, then toplevel headings are parts,\n# not chapters.\n#\n# latex_use_parts = False\n\n# If true, show page references after internal links.\n#\n# latex_show_pagerefs = False\n\n# If true, show URL addresses after external links.\n#\n# latex_show_urls = False\n\n# Documents to append as an appendix to all manuals.\n#\n# latex_appendices = []\n\n# It false, will not define \\strong, \\code, \titleref, \\crossref ... but only\n# \\sphinxstrong, ..., \\sphinxtitleref, ... To help avoid clash with user added\n# packages.\n#\n# latex_keep_old_macro_names = True\n\n# If false, no module index is generated.\n#\n# latex_domain_indices = True\n\n\n# -- Options for manual page output ---------------------------------------\n\n# One entry per manual page. List of tuples\n# (source start file, name, description, authors, manual section).\nman_pages = [\n    (master_doc, 'sharpy', 'SHARPy Documentation',\n     [author], 1)\n]\n\n# If true, show URL addresses after external links.\n#\n# man_show_urls = False\n\n\n# -- Options for Texinfo output -------------------------------------------\n\n# Grouping the document tree into Texinfo files. List of tuples\n# (source start file, target name, title, author,\n#  dir menu entry, description, category)\ntexinfo_documents = [\n    (master_doc, 'SHARPy', 'SHARPy Documentation',\n     author, 'SHARPy', 'One line description of project.',\n     'Miscellaneous'),\n]\n\n# Documents to append as an appendix to all manuals.\n#\n# texinfo_appendices = []\n\n# If false, no module index is generated.\n#\n# texinfo_domain_indices = True\n\n# How to display URL addresses: 'footnote', 'no', or 'inline'.\n#\n# texinfo_show_urls = 'footnote'\n\n# If true, do not generate a @detailmenu in the \"Top\" node's menu.\n#\n# texinfo_no_detailmenu = False\n\n# Recommonmark function\n#def setup(app):\n#    app.add_config_value('recommonmark_config', {\n#            'url_resolver': lambda url: github_doc_root + url,\n#            'auto_toc_tree_section': 'Contents',\n#            }, True)\n#    app.add_transform(AutoStructify)\n"
  },
  {
    "path": "docs/source/content/capabilities.md",
    "content": "# Capabilities\nThis is just the tip of the iceberg, possibilities are nearly endless and once you understand how SHARPy's modular\ninterface works, you will be capable of running very complex simulations.\n\n## Very flexible aircraft nonlinear aeroelasticity\n\nThe modular design of SHARPy allows to simulate complex aeroelastic cases involving very flexible aircraft. The\nstructural solver supports very complex beam arrangements, while retaining geometrical nonlinearity. The UVLM solver\nfeatures different wake modelling fidelities while supporting large lifting surface deformations in a native way.\n\nAmong the problems studied, a few interesting ones, in no particular order are:\n\n* Catapult take off of a very flexible aircraft analysis [\\[Paper\\]](https://arc.aiaa.org/doi/abs/10.2514/6.2019-2038). \nIn this type of simulations, a PID controller was used in order to enforce displacements and velocities in a number of\nstructural nodes (the clamping points). Then, several take off strategies were studied in order to analyse the influence\nof the structural stiffness in this kind of procedures. This case is a very good example of the type of problems where\nnonlinear aeroelasticity is essential.\n \n![_Catapult Takeoff of Flexible Aircraft_](../_static/capabilities/hale_cruise.png) \n\n* Flight in full 3D atmospheric boundary layer (to be published). A very flexible aircraft is flown immersed in a\nturbulent boundary layer obtained from HPC LES simulations. The results are compared against simpler turbulence models\nsuch as von Karman and Kaimal. Intermittency and coherence features in the LES field are absent or less remarkable in\nthe synthetic turbulence fields.\n\n![_HALE Aircraft in a Turbulent Field_](../_static/capabilities/hale_turb.jpeg)\n\n* Lateral gust reponse of a realistic very flexible aircraft. For this problem (to be published), a realistic very\nflexible aircraft (University of Michigan X-HALE) model has been created in SHARPy and validated against their own\naeroelastic solver for static and dynamic cases. A set of vertical and lateral gust responses have been simulated.\n\n![_X-HALE_](../_static/capabilities/xhale.png)\n\n## Wind turbine aeroelasticity\n\nSHARPy is suitable to simulate wind turbine aeroelasticity. \n\nOn the structural side, it accounts for material anisotropy which is needed to characterize composite blades and for\ngeometrically non-linear deformations observed in current blades due to the increasing length and flexibility. Both\nrigid and flexible simulations can be performed and the structural modes can be computed accounting for rotational\neffects (Campbell diagrams). The rotor-tower interaction is modelled through a multibody approach based on the theory\nof Lagrange multipliers. Finally, the tower base can be fixed or subjected to prescribed linear and angular velocities.\n\nOn the aerodynamic side, the use of potential flow theory allows the characterization of flow unsteadiness at a\nreasonable computational cost. Specifically, steady and dynamic simulations can be performed. The steady simulations\nare carried out in a non-inertial frame of reference linked to the rotor under uniform steady wind with the assumption\nof prescribed helicoidal wake. On the other hand, dynamic simulations can be enriched with a wide variety of incoming\nwinds such as shear and yaw. Moreover, the wake shape can be freely computed under no assumptions accounting for\nself-induction and wake expansion or can be prescribed to an helicoidal shape for computational efficiency.\n\n![Wind Turbine](../_static/capabilities/turbine.png)\n\n## Model Order Reduction\nNumerical models of physical phenomena require fine discretisations to show convergence and agreement with their real\ncounterparts, and, in the case of SHARPy's aeroelastic systems, hundreds of thousands of states are not an uncommon\nencounter. However, modern hardware or the use of these models for other applications such as controller synthesis may limit\ntheir size, and we must turn to model order reduction techniques to achieve lower dimensional representations that can\nthen be used.\n\nSHARPy offers several model order reduction methods to reduce the initially large system to a lower dimension,\nattending to the user's requirements of numerical efficiency or global error bound.\n\n### Krylov Methods for Model Order Reduction - Moment Matching\nModel reduction by moment matching can be seen as approximating a transfer function through a power series expansion \nabout a user defined point in the complex plane. The reduction by projection retains the moments between the full and \nreduced systems as long as the projection matrices span certain Krylov subspaces dependant on the expansion point and \nthe system's matrices.\nThis can be taken advantage of,\nin particular for aeroelastic applications where the interest resides in the low frequency behaviour of the system,\nthe ROM can be expanded about these low frequency points discarding accuracy higher up the frequency spectrum.\n\n#### Example 1 - Aerodynamics - Frequency response of a high AR flat plate subject to a sinusoidal gust\nThe objective is to compare SHARPy's solution of a very high aspect ratio flat plate subject to a sinusoidal gust to\nthe closed form solution obtained by Sears (1944 - Ref). SHARPy's inherent 3D nature makes comparing results to the 2D\nsolution require very high aspect ratio wings with fine discretisations, resulting in very large state space models.\nIn this case, we would like to utilise a Krylov ROM to approximate the low frequency behaviour and perform a frequency\nresponse analysis on the reduced system, since it would represent too much computational cost if it were performed on\nthe full system.\n\nThe full order model was reduced utilising Krylov methods, in particular the Arnoldi iteration, with an expansion about\nzero frequency to produce the following result.\n\n![_Sears Gust Bode Plot_](../_static/capabilities/sears.png)\n\nAs it can be seen from the image above, the ROM approximates well the low frequency, quasi-steady state and loses\naccuracy as the frequency is increased, just as intended. Still, perfect matching is never achieved even at the\nexpansion frequency given the 3D nature of the wing compared to the 2D analytical solution.\n\n#### Example 2 - Aeroelastics - Flutter analysis of a Goland wing with modal projection\nThe Goland wing flutter example is presented next. The aerodynamic surface is finely discretised for the UVLM solution,\nresulting in not only a large state space but also in large input/output dimensionality. Therefore, to reduce the\nnumber of inputs and outputs, the UVLM is projected onto the structural mode shapes, the first four in this particular\ncase. The resulting multi input multi output system (mode shapes -> UVLM -> modal forces) was subsequently reduced using\nKrylov methods aimed at MIMO systems which use variations of the block Arnoldi iteration. Again, the expansion\nfrequency selected was the zero frequency. As a sample, the transfer function from two inputs to two outputs is\nshown to illustrate the performance of the reduced model against the full order UVLM.\n\n![_Goland Reduced Order Model Transfer Functions_](../_static/capabilities/goland_rom.png)\n\nThe reduced aerodynamic model projected onto the modal shapes was then coupled to the linearised beam model, and the\nstability analysed against a change in velocity. Note that the UVLM model and its ROM are actually scaled to be\nindependent on the freestream velocity, hence only one UVLM and ROM need to be computed. The structural model needs\nto be updated at each test velocity but its a lot less costly in computational terms. The resulting stability of the\naeroelastic system is plotted on the Argand diagram below with changing freestream velocity.\n\n![_Goland Flutter_](../_static/capabilities/goland_flutter.png)\n"
  },
  {
    "path": "docs/source/content/casefiles.rst",
    "content": "The SHARPy Case files\n=====================\n\nSHARPy takes as input a series of ``.h5`` files that contain the numerical data and a ``.sharpy`` file that contains\nthe settings for each of the solvers. How these files are generated is at the user's discretion, though templates are\nprovided, and all methods are valid as long as the required variables are provided with the appropriate format.\n\nModular Framework\n-----------------\n\nSHARPy is built with a modular framework in mind. The following diagram shows the strutuctre of a nonlinear, time\nmarching aeroelastic simulation\n\n.. image:: ../_static/case_files/sharpy_modular.png\n    :target: ../_static/case_files/sharpy_modular.png\n    :alt: SHARPy's modular structure\n\nEach of the blocks correspond to individual solvers with specific settings. How we choose which solvers to run,\nin which order and with what settings is done through the solver configuration file, explained in the next section.\n\n\nSolver configuration file\n-------------------------\n\nThe solver configuration file is the main input to SHARPy. It is a ConfigObj_\nformatted file with the ``.sharpy`` extension. It contains the settings for each of the solvers and the order in which\nto run them.\n\n.. _ConfigObj: http://pypi.org/project/configobj/\n\nA typical way to assemble the solver configuration file is to place all your desired settings\nin a dictionary and then convert to and write your ``ConfigObj``. If a setting is not provided the default value will be used. The settings that each solver takes, its type and default value are explained in their relevant documentation pages.\n\n.. code-block:: python\n\n    import configobj\n    filename = '<case_route>/<case_name>.sharpy'\n    config = configobj.ConfigObj()\n    config.filename = filename\n    config['SHARPy'] = {'case': '<your SHARPy case name>',  # an example setting\n                        # Rest of your settings for the PreSHARPy class\n                        }\n    config['BeamLoader'] = {'orientation': [1., 0., 0.],  # an example setting\n                            # Rest of settings for the BeamLoader solver\n                            }\n    # Continue as above for the remainder of solvers that you would like to include\n\n    # finally, write the config file\n    config.write()\n\nThe resulting ``.sharpy`` file is a plain text file with your specified settings for each of\nthe solvers.\n\nNote that, therefore, if one of your settings is a ``np.array``, it will get transformed into\na string of plain text before being read by SHARPy. However, any setting with ``list(float)`` specified as its setting type will get converted into a ``np.array`` once it is read by SHARPy.\n\n\nFEM file\n--------\n\nThe ``case.fem.h5`` file has several components. We go one by one:\n\n*  ``num_node_elem [int]`` : number of nodes per element.\n\n   Always 3 in our case (3 nodes per structural elements - quadratic beam elements).\n\n\n*  ``num_elem [int]`` : number of structural elements.\n\n*  ``num_node [int]`` : number of nodes.\n\n   For simple structures, it is ``num_elem*(num_node_elem - 1) - 1``.\n   For more complicated ones, you need to calculate it properly.\n\n\n*  ``coordinates [num_node, 3]``: coordinates of the nodes in body-attached FoR (A).\n\n\n*  ``connectivites [num_elem, num_node_elem]`` : Beam element's connectivities.\n\n   Every row refers to an element, and the three integers in that row are the indices of the three nodes\n   belonging to that elem. Now, the catch: the ordering is not as you'd think. Order them as ``[0, 2, 1]``.\n   That means, first one, last one, central one. The following image shows the node indices inside the\n   circles representing the nodes, the element indices in blue and the resulting connectivities matrix next to it.\n   Connectivities are tricky when considering complex configurations. Pay attention at the beginning and you'll\n   save yourself a lot of trouble.\n\n    .. image:: ./../_static/case_files/connectivities.png\n        :target: ./../_static/case_files/connectivities.png\n        :alt: SHARPy Beam Element Connectivities\n\n\n*  ``stiffness_db [:, 6, 6]``: database of stiffness matrices.\n\n    The first dimension has as many elements as different stiffness matrices are in the model.\n\n*  ``elem_stiffness [num_elem]`` : array of indices (starting at 0).\n\n    It links every element (index) to the stiffness matrix index in ``stiffness_db``.\n    For example ``elem_stiffness[0] = 0`` ; ``elem_stiffness[2] = 1`` means that the element ``0`` has a stiffness matrix\n    equal to ``stiffness_db[0, :, :]`` , and the second element has a stiffness matrix equal to\n    ``stiffness_db[1, :, :]``.\n\n    The shape of a stiffness matrix, :math:`\\mathrm{S}` is:\n\n    .. math::\n        \\mathrm{S} = \\begin{bmatrix}\n        EA & & & & & \\\\\n        & GA_y & & & & \\\\\n        & & GA_z & & & \\\\\n        & & & GJ & & \\\\\n        & & & & EI_y & \\\\\n        & & & & & EI_z \\\\\n        \\end{bmatrix}\n\n    with the cross terms added if needed.\n\n    ``mass_db`` and ``elem_mass`` follow the same scheme than the stiffness, but the mass matrix is given by:\n\n    .. math::\n        \\mathrm{M} = \\begin{bmatrix}\n        m\\mathbf{I} & -\\tilde{\\boldsymbol{\\xi}}_{cg}m \\\\\n        \\tilde{\\boldsymbol{\\xi}}_{cg}m & \\mathbf{J}\\\\\n        \\end{bmatrix}\n\n    where :math:`m` is the distributed mass per unit length :math:`kg/m` , :math:`(\\tilde{\\bullet})` is the\n    skew-symmetric matrix of a vector and :math:`\\boldsymbol{\\xi}_{cg}` is the location of the centre of gravity\n    with respect to the elastic axis in MATERIAL (local) FoR. And what is the Material FoR? This is an important point,\n    because all the inputs that move WITH the beam are in material FoR. For example: follower forces, stiffness, mass,\n    lumped masses...\n\n    .. image:: ./../_static/case_files/frames_of_reference.jpg\n        :target: ./../_static/case_files/frames_of_reference.jpg\n        :alt: SHARPy Frames of Reference\n\n\n    The material frame of reference is noted as :math:`B`. Essentially, the :math:`x` component is tangent to the beam in the\n    increasing node ordering, :math:`z` looks up generally and :math:`y` is oriented such that the FoR is right handed.\n\n    In the practice (vertical surfaces, structural twist effects...) it is more complicated than this. The only\n    sure thing about :math:`B` is that its :math:`x` direction is tangent to the beam in the increasing node number direction.\n    However, with just this, we have an infinite number of potential reference frames, with :math:`y` and :math:`z`\n    being normal to :math:`x` but rotating around it. The solution is to indicate a ``for_delta``, or frame of\n    reference delta vector (:math:`\\Delta`).\n\n\n    .. image:: ../_static/case_files/frame_of_reference_delta.jpg\n        :target: ../_static/case_files/frame_of_reference_delta.jpg\n        :alt: Frame of Reference Delta Vector\n\n\n    Now we can define unequivocally the material frame of reference. With :math:`x_B` and :math:`\\Delta` defining a\n    plane, :math:`y_b` is chosen such that the :math:`z` component is oriented upwards with respect to the lifting surface.\n\n    From this definition comes the only constraint to :math:`\\Delta`: it cannot be parallel to :math:`x_B`.\n\n*  ``frame_of_reference_delta [num_elem, num_node_elem, 3]``: rotation vector to FoR :math:`B`.\n\n    contains the :math:`\\Delta` vector in body-attached (:math:`A`) frame of reference.\n\n    As a rule of thumb:\n\n    .. math::\n        \\Delta =\n        \\begin{cases}\n        [-1, 0, 0], \\quad \\text{if right wing} \\\\\n        [1, 0, 0], \\quad \\text{if left wing} \\\\\n        [0, 1, 0], \\quad \\text{if fuselage} \\\\\n        [-1, 0, 0], \\quad \\text{if vertical fin} \\\\\n        \\end{cases}\n\n    These rules of thumb only work if the nodes increase towards the tip of the surfaces (and the tail in the\n    case of the fuselage).\n\n\n*  ``structural_twist [num_elem, num_node_elem]``: Element twist.\n\n    Technically not necessary, as the same effect can be achieved with ``FoR_delta``.\n\n\n*  ``boundary_conditions [num_node]``: boundary conditions.\n\n    An array of integers ``(np.zeros((num_node, ), dtype=int))`` and contains all ``0`` except for\n\n      - One node NEEDS to have a ``1`` , this is the reference node. Usually, the first node has 1 and is located\n        in ``[0, 0, 0]``. This makes things much easier.\n\n      - If the node is a tip of a beam (is not attached to 2 elements, but just 1), it needs to have a ``-1``.\n\n\n*  ``beam_number [num_elem]``: beam index.\n\n    Is another array of integers. Usually you don't need to modify its value. Leave it at 0.\n\n\n*  ``app_forces [num_elem, 6]``: applied forces and moments.\n\n    Contains the applied forces ``app_forces[:, 0:3]`` and moments ``app_forces[:, 3:6]`` in a\n    given node.\n\n    Important points: the forces are given in Material FoR (check above). That means that in a\n    symmetrical model, a thrust force oriented upstream would have the shape ``[0, T, 0, 0, 0, 0]`` in the\n    right wing, while the left would be ``[0, -T, 0, 0, 0, 0]``. Likewise, a torsional moment for twisting the wing\n    leading edge up would be ``[0, 0, 0, M, 0, 0]`` for the right, and ``[0, 0, 0, -M, 0, 0]`` for the left.\n    But careful, because an out-of-plane bending moment (wing tip up) has the same sign (think about it).\n\n*  ``lumped_mass [:]``: lumped masses.\n\n    Is an array with as many masses as needed (in kg this time). Their order is important, as more\n    information is required to implement them in a model.\n\n*  ``lumped_mass_nodes [:]``: Lumped mass nodes.\n\n    Is an array of integers. It contains the index of the nodes related to the masses given\n    in lumped_mass in order.\n\n*  ``lumped_mass_inertia [:, 3, 3]``: Lumped mass inertia.\n\n    Is an array of ``3x3`` inertial tensors. The relationship is set by the ordering as well.\n\n*  ``lumped_mass_position [:, 3]``: Lumped mass position.\n\n    Is the relative position of the lumped mass with respect to the node\n    (given in ``lumped_masss_nodes`` ) coordinates. ATTENTION: the lumped mass is solidly attached to the node, and\n    thus, its position is given in Material FoR.\n\nAerodynamics file\n-----------------\n\nAll the aerodynamic data is contained in ``case.aero.h5``.\n\nIt is important to know that the input for aero is usually based on elements (and inside the elements, their nodes).\nThis causes sometimes an overlap in information, as some nodes are shared by two adjacent elements (like in the\nconnectivities graph in the previous section). The easier way of dealing with this is to make sure the data is\nconsistent, so that the properties of the last node of the first element are the same than the first node of the\nsecond element.\n\nItem by item:\n\n\n* ``airfoils``: Airfoil group.\n\n    In the ``aero.h5`` file, there is a Group called ``airfoils``. The airfoils are stored in this group (which acts as a\n    folder) as a two-column matrix with :math:`x/c` and :math:`y/c` in each column. They are named ``'0', '1'`` ,\n    and so on.\n\n* ``chords [num_elem, num_node_elem]``: Chord\n\n    Is an array with the chords of every airfoil given in an element/node basis.\n\n*  ``twist [num_elem, num_node_elem]``: Twist.\n\n    Has the twist angle in radians. It is implemented as a rotation around the local :math:`x` axis.\n\n*  ``sweep [num_elem, num_node_elem]``: Sweep.\n\n    Same here, just a rotation around :math:`z`.\n\n* ``airfoil_distribution [num_elem, num_node_elem]``: Airfoil distribution.\n\n    Contains the indices of the airfoils that you put previously in ``airfoils``.\n\n*  ``surface_distribution [num_elem]``: Surface integer array.\n\n    It contains the index of the surface the element belongs\n    to. Surfaces need to be continuous, so please note that if your beam numbering is not continuous, you need to make\n    a surface per continuous section.\n\n*  ``surface_m [num_surfaces]``: Chordwise panelling.\n\n    Is an integer array with the number of chordwise panels for every surface.\n\n*  ``m_distribution [string]``: Discretisation method.\n\n    Is a string with the chordwise panel distribution. In almost all cases, leave it at ``uniform``.\n\n*  ``aero_node [num_node]``: Aerodynamic node definition.\n\n    Is a boolean (``True`` or ``False``) array that indicates if that node has a lifting\n    surface attached to it.\n\n*  ``elastic_axis [num_elem, num_node_elem]``: elastic axis.\n\n    Indicates the elastic axis location with respect to the leading edge as a\n    fraction of the chord of that rib. Note that the elastic axis is already determined, as the beam is fixed now, so\n    this settings controls the location of the lifting surface wrt the beam.\n\n* ``control_surface [num_elem, num_node_elem]``: Control surface.\n\n    Is an integer array containing ``-1`` if that section has no control surface associated to it, and ``0, 1, 2 ...``\n    if the section belongs to the control surface ``0, 1, 2 ...`` respectively.\n\n*  ``control_surface_type [num_control_surface]``: Control Surface type.\n\n    Contains ``0`` if the control surface deflection is static, and ``1`` is it\n    is dynamic.\n\n*  ``control_surface_chord [num_control_surface]``: Control surface chord.\n\n    Is an INTEGER array with the number of panels belonging to the control\n    surface. For example, if ``M = 4`` and you want your control surface to be :math:`0.25c`, you need to put ``1``.\n\n*  ``control_surface_hinge_coord [num_control_surface]``: Control surface hinge coordinate.\n\n    Only necessary for lifting surfaces that are deflected as a\n    whole, like some horizontal tails in some aircraft. Leave it at ``0`` if you are not modelling this.\n\n*  ``airfoil_efficiency [num_elem, num_node_elem, 2, 3]``: Airfoil efficiency.\n\n    This is an optional setting that introduces a user-defined efficiency and constant terms to the mapping\n    between the aerodynamic forces calculated at the lattice grid and the structural nodes. The formatting of the\n    4-dimensional array is simple. The first two dimensions correspond to the element index and the local node index.\n    The third index is whether the term is the multiplier to the force ``0`` or a constant term ``1``. The final term refers to,\n    in the **local, body-attached** ``B`` frame, the factors and constant terms for: ``fy, fz, mx``.\n    For more information on how these factors are included in the mapping terms\n    see :func:`sharpy.aero.utils.mapping.aero2struct_force_mapping`.\n\n* ``polars`` Group (optional): Use airfoil polars to correct aerodynamic forces.\n\n    This is an optional group to add if correcting the aerodynamic forces using airfoil polars is desired. A polar\n    should be included for each airfoil defined. Each entry consists of a 4-column table. The first column corresponds\n    to the angle of attack (in radians) and then the ``C_L``, ``C_D`` and ``C_M``.\n\nMultibody file\n--------------\n\nAll the aerodynamic data is contained in ``case.mb.h5``.\n\nThis file encapsulates both the initial conditions for the multiple bodies, and the constraints between them.\n\nItem by item:\n\n* ``num_bodies``: Number of bodies.\n\n* ``num_constraints``: Number of constraints between bodies.\n\n    The initial conditions for each body and the constraint definitions are defined in groups. The body groups are named\n    as ``body_xx``, where the xx is replaced with a two digit body number starting from 00, e.g. ``body_00``. Each of these\n    groups should have the following items:\n\n* ``FoR_acceleration [6]``: Frame of reference initial acceleration.\n\n    An array of the stacked linear and rotational initial accelerations in the inertial frame.\n\n* ``FoR_velocity [6]``: Frame of reference initial velocity.\n\n    An array of the stacked linear and rotational initial velocities in the inertial frame.\n\n* ``FoR_position [6]``: Frame of reference initial position.\n\n    An array of the stacked linear and rotational initial positions in the inertial frame.\n\n* ``quat [4]``: Frame of reference initial orientation.\n\n    A quaternion describing the initial rotation between the body attached and inertial frames.\n\n* ``body_number``: Body number.\n\n    An integer used to identify the body when creating constraints.\n\n* ``FoR_movement``: Type of frame of reference movement.\n\n    Use \"free\" to include rigid body motion, or \"prescribed\" for a clamped body.\n\nThe constraint groups are named similarly to the bodies, using ``constraint_xx`` where xx is the two digit constraint number\nstarting from 00. Each of these groups should have the following items:\n\n* ``scalingFactor``: Scaling factor.\n\n    This value scales the multibody equations, where generally settings to ``dt^2`` provides acceptable results.\n\n* ``behaviour``: Constraint behaviour.\n\n    This string defines the type of constraint applied to a single or multiple bodies. A wide range of standard lower-pair\n    kinematic joints are available, such as hinge and spherical joints, as well as prescribed rotation joints. A list of the\n    available joints can be found in ``sharpy/structure/utils/lagrangeconstraints.py`` and\n    ``sharpy/structure/utils/lagrangeconstraintsjax.py``, depending on the solver being used. Due to every constraint being\n    different, further parameters depend upon the constraint type used. These parameters are added as variables to the constraint\n    group. Some examples which may be included are listed below:\n\n* ``body_FoR``: Body frame of reference number.\n\n    The number of the body which is constrained by its body attached frame of reference. For example for a double pendulum,\n    this would be the lower link.\n\n* ``body``: Body number.\n\n    The number of the body which is constrained by one of its nodes. For example for a double pendulum,\n    this would be the upper link.\n\n* ``node_in_body``: Node in body.\n\n    This is paired to the ``body`` parameter, and this indicates which node within the body is to be constrained.\n\n* ``rot_axisB [3]``: Rotation axis in the B frame.\n\n    For a hinge constraint, this defines a vector for the hinge axis for the ``body``. This is defined in the material frame.\n\n* ``rot_axisA2 [3]``: Rotation axis in the A frame.\n\n    For a hinge constraint, this defines a vector for the hinge axis for the ``body_FoR``. This is defined in the body attached frame.\n\n* ``controller_id``: Controller ID for using an actuated constraint.\n\n    This should use the same ID as the ``MultibodyController`` used in the ``DynamicCoupled`` simulation, allowing the rotation to be controlled over time.\n\n* ``aerogrid_warp_factor [num_elem, 3]``: Aerodynamic grid warping factor.\n\n    For simulating wings with dynamic sweep by a local rotation around the z axis, the aerodynamic grid needs to warp to\n    account for this. To create a smooth warp, it can be preferred to gradually change the sweep (and therefore chord to\n    maintain the \"same\" geometry) at elements around the discontinuity. This parameter sets the sweep per node using this\n    parameter to scale the input angle. If not included, it will be ignored when generating the aerodynamic grid and have\n    no effect.\n\n\nNonlifting Body file\n-----------------\n\nAll the nonlifting body data is contained in ``case.nonlifting_body.h5``.\n\nThe idea behind the structure of the model definition of nonlifting bodies in SHARPy is similiar to the aerodynamic \none for lifting surfaces. Again for each node or element we define several parameters.\n\nItem by item:\n\n* ``shape``: Type of geometrical form of 3D nonlifting body.\n\n    In the ``nonlifting_body.h5`` file, there is a Group called ``shape``. The shape indicates the geometrical form of the \n    nonlifting body. Common options for this parameter are ``'cylindrical'`` and ``'specific'``. For the former, SHARPy \n    expects rotational symmetric cross-section for which only a radius is required for each node. For the ``'specific'`` \n    option, SHARPy can create a more unique nonlifting body geometry by creating an ellipse at each fuselage defined by \n    :math:`\\frac{y^2}{a^2}+\\frac{z^2}{b^2}=1` with the given ellipse axis lengths :math:`a`  and :math:`b`. Further, SHARPy \n    lets define the user to create a vertical offset from the node with :math:`z_0`.\n\n* ``radius [num_node]``: Cross-sectional radius.\n\n    Is an array with the radius of specified for each fuselage node.\n\n* ``a_ellipse [num_node]``: Elliptical axis lengths along the local y-axis.\n\n    Is an array with the length of the elliptical axis along the y-axis.\n\n* ``b_ellipse [num_node]``: Elliptical axis lengths along the local z-axis.\n\n    Is an array with the length of the elliptical axis along the z-axis.\n\n* ``z_0_ellipse [num_node]``: Vertical offset of the ellipse center from the beam node.\n\n    Is an array with the vertical offset of the center of the elliptical cross-section from the fuselage node.\n\n*  ``surface_m [num_surfaces]``: Radial panelling.\n\n    Is an integer array with the number of radial panels for every surface.\n\n*  ``nonlifting_body_node [num_node]``: Nonlifting body node definition.\n\n    Is a boolean (``True`` or ``False``) array that indicates if that node has a nonlifting body\n    attached to it.\n    \n*  ``surface_distribution [num_elem]``:  Nonlifting Surface integer array.\n\n    It contains the index of the surface the element belongs to. Surfaces need to be continuous, so please note \n    that if your beam numbering is not continuous, you need to make a surface per continuous section.\n\n\nTime-varying force input file (``.dyn.h5``)\n-------------------------------------------\n\nThe ``.dyn.h5`` file is an *optional* input file that may contain force and acceleration inputs that vary with time.\nThis is intended for use in dynamic problems. For SHARPy to look for and use this file the setting ``unsteady`` in the\n:class:`~sharpy.solvers.beamloader.BeamLoader` must be turned to ``on``.\n\nAppropriate data entries in the ``.dyn.h5`` include:\n\n* ``dynamic_forces [num_t_steps, num_node, 6]``: Dynamic forces in body attached ``B`` frame.\n\n    Forces given at each time step, for each node and then for the 6 degrees of freedom (``fx, fy, fz, mx, my, mz``) in\n    a body-attached (local) frame of reference ``B``.\n\n* ``for_pos [num_t_steps, 6]``: Body frame of reference (A FoR) position.\n\n    Position of the reference frame A in time.\n\n* ``for_vel [num_t_steps, 6]``: Body frame of reference (A FoR) velocity.\n\n    Velocity of the reference frame A in time.\n\n* ``for_acc [num_t_steps, 6]``: Body frame of reference (A FoR) acceleration.\n\n    Acceleration of the reference frame A in time.\n    \n    If a case is restarted from a pickle file, the .dyn.h5 file should include the dynamic information for the previous simulation (that will be discarded) and the information for the new simulation. \n"
  },
  {
    "path": "docs/source/content/contributing.md",
    "content": "# Contributing to SHARPy\n## Bug fixes and features\n\nSHARPy is a collaborative effort, and this means that some coding practices need\nto be encouraged so that the code is kept tidy and consistent. Any user is welcome\nto raise issues for bug fixes and feature proposals through Github.\n\nIf you are submitting a bug report:\n\n1. Make sure your SHARPy, xbeam and uvlm local copies are up to date and in the\nsame branch.\n\n2. Double check that your python distribution is updated by comparing with \nthe `utils/environment.yml` file.\n\n3. Try to assemble a minimal working example that can be run quickly and easily.\n\n4. Describe as accurately as possible your setup (OS, path, compilers...) and\nthe problem.\n\n5. Raise an issue with all this information in the Github repo and label it\n`potential bug`.\n\nPlease bear in mind that we do not have the resources to provide support for\nuser modifications of the code through Github. If you have doubts about how to modify certain\nparts of the code, contact us through email and we will help you as much as we can.\n\nIf you are fixing a bug:\n\n1. THANKS!\n\n2. Please create a pull request from your modified fork, and describe in a few\nlines which bug you are fixing, a minimal example that triggers the bug and how you\nare fixing it. We will review it ASAP and hopefully it will be incorporated in the\ncode!\n\nIf you have an idea for new functionality but do not know how to implement it:\n\n1. We welcome tips and suggestions from users, as it allow us to broaden the scope\nof the code. The more people using it, the better!\n\n2. Feel free to fill an issue in Github, and tag it as `feature proposal`. Please\nunderstand that the more complete the description of the potential feature, the more\nlikely it is that some of the developers will give it a go.\n\nIf you have developed new functionality and you want to share it with the world:\n\n1. AWESOME! Please follow the same instructions than for the bug fix submission.\nIf you have some peer-reviewed references related to the new code, even better, as\nit will save us some precious time.\n\n## Code formatting\n\nWe try to follow the [PEP8](https://www.python.org/dev/peps/pep-0008/) standards\n(with spaces, no tabs please!) and [Google Python Style Guide](http://google.github.io/styleguide/pyguide.html).\nWe do not ask you to freak out over formatting, but please, try to keep it tidy and\ndescriptive. A good tip is to run `pylint` [https://www.pylint.org/](https://www.pylint.org/)\nto make sure there are no obvious formatting problems.\n\n\n\n\n## Documentation\n\nContributing to SHARPy's documentation benefits everyone. As a developer, writing documentation helps you better \nunderstand what you have done and whether your functions etc make logical sense. As a user, any documentation is better \nthan digging through the code. The more we have documented, the easier the code is to use and the more users we can \nhave.\n\nIf you want to contribute by documenting code, you have come to the right place. \n\nSHARPy is documented using Sphinx and it extracts the documentation directly from the source code. It is then sorted\ninto directories automatically and a human readable website generated. The amount of work you need to do is minimal. \nThat said, the recipe for a successfully documented class, function, module is the following:\n\n1. Your documentation has to be written in ReStructuredText (rst). I know, another language... hence I will leave\n    a few tips:\n    \n    - Inline code is written using two backticks ` `` `\n    \n    - Inline math is written as ``:math:`1+\\exp^{i\\pi} = 0` ``. Don't forget the backticks!\n        \n    - Math in a single or multiple lines is simple:\n        \n        ```rst\n            .. math:: 1 + \\exp{i\\pi} = 0\n        ```    \n    \n    - Lists in ReStructuredText are tricky, I must admit. Therefore, I will link to some\n     [examples](http://docutils.sourceforge.net/docs/user/rst/quickref.html#enumerated-lists). The key resides in not \n     forgetting the spaces, in particular when you go onto a second line!\n     \n    - The definite example list can be found [here](http://docutils.sourceforge.net/docs/user/rst/quickref.html).\n    \n2. Titles and docstrings, the bare minimum:       \n    - Start docstrings with `r` such that they are interpreted raw:\n            \n        ```python\n        r\"\"\"\n        My docstring\n        \"\"\"\n        ```\n    - All functions, modules and classes should be given a title that goes in the first line of the docstring\n    \n    - If you are writing a whole package with an `__init__.py` file, even if it's empty, give it a human readable\n    docstring. This will then be imported into the documentation\n    \n    - For modules with several functions, the module docstring has to be at the very top of the file, prior to the \n    `import` statements.\n    \n2. We use the [Google documentation](https://google.github.io/styleguide/pyguide.html#38-comments-and-docstrings)\n  style. A very good set of examples of Google style documentation for functions, modules, classes etc. can be found \n  [here](https://sphinxcontrib-napoleon.readthedocs.io/en/latest/example_google.html).         \n3. Function arguments and returns:\n    \n    - Function arguments are simple to describe:\n        ```python\n        def func(arg1, arg2):\n        \"\"\"Summary line.\n\n        Extended description of function.\n\n        Args:\n          arg1 (int): Description of arg1\n          arg2 (str): Description of arg2\n\n        Returns:\n          bool: Description of return value\n\n        \"\"\"\n            return True\n       ```\n\n4. Solver settings:\n\n    - If your code has a settings dictionary, with defaults and types then make sure that:\n        \n        - They are defined as class variables and not instance attributes. \n        \n        - Define a `settings_types`, `settings_default` and `settings_description` dictionaries.\n        \n        - After all your settings, update the docstring with the automatically generated settings table. You will need\n        to import the `sharpy.utils.settings` module\n        \n            ```python\n            settings_types = dict()\n            settings_default = dict()\n            settings_description = dict()\n\n            # keep adding settings\n  \n            settings_table = sharpy.utils.settings.SettingsTable()\n            __doc__ += settings_table.generate(settings_types, settings_default ,settings_description)\n            ```\n\n5. See how your docs looks like!\n    \n    - Once you are done, run the following ``SHARPy`` command:\n    ```bash\n    sharpy any_string -d\n    ```\n    \n    - If you are making minor updates to docstrings (i.e. you are not documenting a previously undocumented\n    function/class/module) you can simply change directory to  `sharpy/docs` and run \n    ```bash\n    make html\n    ```\n    \n    - Your documentation will compile and warnings will appear etc. You can check the result by opening\n    ```bash\n    docs/build/index.html\n    ```\n    and navigating to your recently created page.\n    \n    - Make sure that **before committing** any changes in the documentation you update the entire ``docs`` directory\n    by running\n    ```bash\n    sharpy any_string -d\n    ```\n    \nThank you for reading through this and contributing to make SHARPy a better documented, more user friendly code!\n\n## Git branching model\n\nFor the development of SHARPy, we try to follow [this](https://nvie.com/posts/a-successful-git-branching-model/) \nbranching model summarised by the schematic\n\n![BranchingModel](https://nvie.com/img/git-model@2x.png)\n_Credit: Vincent Driessen https://nvie.com/posts/a-successful-git-branching-model/_\n\nTherefore, attending to this model our branches have the following versions of the code:\n* `main`: latest stable release - paired with the appropriate tag.\n* `develop`: latest stable development build. Features get merged to develop.\n* `rc-**`: release candidate branch. Prior to releasing tests are performed on this branch.\n* `dev_doc`: documentation development branch. All work relating to documentation gets done here.\n* `fix_**`: hotfix branch.\n* `dev_**`: feature development branch.\n\nIf you contribute, please make sure you know what branch to work from. If in doubt please ask!\n\nCommit names are also important since they are the backbone of the code's change log. Please write concise commit titles\nand explain the main changes in the body of the commit message. An excellent guide on writing good commit messages can\nbe found [here](https://chris.beams.io/posts/git-commit/).\n\n# For developers: \n\n## Releasing a new SHARPy version\n\nIn the release candidate branch:\n\n1. Update the version number in the docs configuration file `docs/source/conf.py`. Update variables `version` and `release`\n\n2. Update `version.json` file\n\n3. Update version in `sharpy/version.py` file\n\n4. Commit, push and wait for tests to pass\n\n5. Merge release candidate branch into `main` branch\n\nIn the `main` branch:\n  \n1. Create a release tag. IMPORTANT: ensure it is an *annotated* tag, otherwise the version and commit number in SHARPy will not display properly\n  ```\n  git tag -a <tagname>\n  git push origin --tags -f\n  ```\n  where `<tagname>` is something like `2.0`.\n\n2. Run the [github_changelog_generator](https://github.com/github-changelog-generator/github-changelog-generator) tool locally with the following parameters:\n  ```\n  github_changelog_generator -u imperialcollegelondon -p sharpy -t <your_github_token> --future-release <new_release_version>\n  ```\n\n3. Push the changes to the `CHANGELOG.md` file\n  \n4. Create the GitHub release, choosing the newly created tag from the dropdown menu. Do not create a tag from the dropdown menu directly because it will not be an annotated tag\n\n5. (Optional) Merge `main` branch back into `develop` branch\n"
  },
  {
    "path": "docs/source/content/debug.rst",
    "content": "A Short Debugging Guide\n-----------------------\n\nWe have put together a list of common traps you may fall into, hopefully you will find the tools here to get\nyourself out of them!\n\n* Did you forget `conda activate sharpy_env` and `source bin/sharpy_vars.sh`?\n\n    - If you do in the terminal: `which sharpy`, do you get the one you want?\n    - If you do `which python`, does the result point to `anaconda3/envs/sharpy_env/bin` (or similar)?\n\n* Wrong input (inconsistent connectivities, mass = 0...)\n\n    * Sometimes not easy to detect. For the structural model, run `BeamLoader` and `BeamPlot` with no structural solver\n      in between. Go over the structure in Paraview. Check the `fem.h5` file with HDFView.\n    * Remember that connectivities are ordered as $[0, 2, 1]$ (the central node goes last).\n    * Make sure the `num_elem` and `num_node` variables are actually your correct number of elements and nodes.\n\n* Not running the actual case you want to.\n\n    * Cleanup the folder and regenerate the case\n\n* Not running the SHARPy version you want.\n\n    * Check at the beginning of the execution the path to the SHARPy folder.\n\n* Not running the correct branch of the code.\n\n    * You probably want to use `develop`. Again, check the first few lines of SHARPy output.\n\n* Very different (I'm talking orders of magnitude) stiffnesses between nodes or directions?\n\n* Maybe the UVLM requires a smaller a smaller vortex core cutoff (only for linear UVLM simulations, as the nonlinear uses another vortex core model).\n\n* Newmark damping is not enough for this case?\n\n* Do you have an element with almost 0 mass or inertia?\n\n* Are you mass matrices consistent? Check that :math:`I_{xx} = I_{yy} + I_{zz}`.\n\n* Have a look at the :math:`\\dot{\\Gamma}` filtering and numerical parameters in the settings of `StepUvlm` and\n  `DynamicCoupled`.\n\n* Add more relaxation to the `StaticCoupled` or `DynamicCoupled` solvers.\n\n* The code has a bug (depending on where, it may be likely).\n\n    * Go over the rest of the list. Plot the case in paraview. Go over the rest of the list again. Prepare the simplest\n      example that reproduces the problem and raise an issue.\n\n* The code diverges because it has to (physical unstable behaviour)\n    * Then don't complain\n* Your model still doesn't work and you don't know why.\n    * `import pdb; pdb.set_trace()` and patience\n* If nothing else works... get a rubber duck (or a very very patient good friend) and go over every step\n\n\n.. image:: ../_static/debugguide/rubberduck.png\n    :target: ../_static/debugguide/rubberduck.png\n    :alt: A rubber duck could be a good friend\n\n\nIf your model doesn't do what it is supposed to do:\n\n* Check for symmetric response where the model is symmetric.\n\n    * If it is not, run the beam solver first and make sure your properties are correct. Make sure the matrices for mass\n      and stiffness are rotated if they need to be (remember the Material FoR definition and the `for_delta`?)\n\n    * Now run the aerodynamic solver only and double check that the forces are symmetric.\n\n    * Make sure your tolerances are low enough so that at least 4 FSI iterations are performed in `StaticCoupled` or\n      `DynamicCoupled`.\n\n\n* Make sure your inputs are correct. For example: a dynamic case can be run with :math:`u_\\infty = 0` and the plane\n  moving forwards, or :math:`u_\\infty = x` whatever and the plane velocity = 0. It is very easy to mix both, and end up with\n  double the effective incoming speed (or none).\n\n* Run simple stuff before coupling it. For example, if your wing tip deflections don't match what you'd expect,\n  calculate the deflection under a small tip force (not too small, make sure the deflection is > 1% of the length!)\n  by hand, and compare.\n\n* It is more difficult to do the same with the UVLM, as you need a VERY VERY high aspect ratio to get close to the 2D\n  potential solutions. You are going to have to take my word for it: the UVLM works.\n\n* But check the aero grid geometry in Paraview, including chords lengths and angles.\n"
  },
  {
    "path": "docs/source/content/example_notebooks/UDP_control/control_design_script.m",
    "content": "function [success] = control_design_script(route_directory)\n    addpath(strcat(route_directory,'/matlab_functions/'));\n    success = false;\n    %% Define parameters;\n    case_name = 'pazy_ROM';\n    output_folder = strcat(route_directory,'/output/',case_name);\n    output_folder_linear = strcat(output_folder, '/linear_results/');\n    complex_matrices = true;\n    \n    %% Reade from SHARPy generated state space model\n    [state_space_system, eta_ref] = read_SHARPy_state_space_system(...\n                                            strcat(case_name, '.linss.h5'), ...\n                                            strcat(output_folder, '/savedata/'), ...\n                                            complex_matrices...\n                                            );\n    \n    %% Load simulation settings and store in struct\n    load(strcat(output_folder_linear, 'simulation_parameters.mat'));\n    n_nodes = uint8(n_nodes);\n    rigid_body_motions = false;\n    \n    input_settings =  set_input_parameters(u_inf, ...\n                                          state_space_system.Ts, ...\n                                          num_modes, ...\n                                          num_aero_states, ...\n                                          rigid_body_motions, ...\n                                          simulation_time, ...\n                                          num_control_surfaces, ...\n                                          n_nodes, ...\n                                          control_input_start, ...\n                                          gust_input_start);\n    \n    %% Remove unused input and outputs from the generated ROM in SHARPy and link deflection and its rate    \n    state_space_system = adjust_state_space_system(state_space_system, input_settings);\n    \n    \n    %% Get gust input\n    \n    gust = get_1minuscosine_gust_input(...\n        gust_length, ...\n        gust_intensity, ...\n        state_space_system.Ts, ...\n        u_inf, ...\n        simulation_time);\n    %% Configure Simulink Inputs\n    model_name = \"PID_linear_model\";\n    simIn = Simulink.SimulationInput(model_name);\n    simIn = setVariable(simIn,'D_gain',0);\n    simIn = setVariable(simIn,'P_gain',0);\n    simIn = setVariable(simIn,'I_gain',0);\n    simIn = setVariable(simIn,'state_space_system',state_space_system);\n    simIn = setVariable(simIn,'input_settings',input_settings);\n    simIn = setVariable(simIn,'gust', gust);\n    %% Run Simulink with PID Controller    \n    warning('off','all');\n    % open loop\n    fprintf('Simulate linear open-loop gust response.')\n    simIn = setVariable(simIn,'controller_on',0);\n\n    out_open_loop = sim(simIn);\n    % closed loop P = 5    \n    simIn = setVariable(simIn,'controller_on',1);\n    simIn = setVariable(simIn,'P_gain',5);\n    fprintf('Simulate linear closed-loop gust response with P=5.')\n    out_PID_5 = sim(simIn);\n    \n    % closed loop P = 10\n    simIn = setVariable(simIn,'P_gain',10);\n    fprintf('Simulate linear closed-loop gust response with P=10.')\n    out_PID_10 = sim(simIn);\n    \n    %% Save results\n    deflection = [out_PID_5.delta.Data(:,1)...\n        out_PID_10.delta.Data(:,1)...\n        zeros(size(out_PID_5.delta.Time, 1), 1)];\n    deflection_rate = [out_PID_5.delta_dot.Data(:,1)...\n        out_PID_10.delta_dot.Data(:,1)...\n        zeros(size(out_PID_5.delta_dot.Time, 1), 1)];\n    tip_deflection = [out_PID_5.actual_output.Data(:,1)...\n        out_PID_10.actual_output.Data(:,1)...\n        out_open_loop.actual_output.Data(:,1)];\n    tip_deflection=  tip_deflection + eta_ref(n_nodes/2*6-3);\n    time_array = out_open_loop.tout;\n    \n    output_folder_linear = strcat(output_folder, '/linear_results/')\n    writematrix(deflection, strcat(output_folder_linear, 'deflection.txt'),'Delimiter',',');\n    writematrix(time_array, strcat(output_folder_linear, 'time_array_linear.txt'),'Delimiter',',');\n    writematrix(deflection_rate,strcat(output_folder_linear, './deflection_rate.txt'),'Delimiter',',');\n    writematrix(tip_deflection,strcat(output_folder_linear, './tip_deflection.txt'),'Delimiter',',');\n\n    success = true\n\nend\n"
  },
  {
    "path": "docs/source/content/example_notebooks/UDP_control/get_settings_udp.py",
    "content": "\"\"\"\r\n    Script to set the required SHARPy settings for  all cases within\r\n    the UDP Control example notebook. \r\n\"\"\"\r\ndef get_settings_udp(model, flow, **kwargs):\r\n    gust = kwargs.get('gust', False)\r\n    \r\n    horseshoe = kwargs.get('horseshoe', False)\r\n    gravity = kwargs.get('gravity', True)\r\n    wake_length_factor = kwargs.get('wake_length_factor', 10)\r\n\r\n    num_cores = kwargs.get('num_cores', 2)\r\n    num_modes = kwargs.get('num_modes', 20)\r\n    free_flight = kwargs.get('free_flight', False)\r\n    tolerance = kwargs.get('tolerance', 1e-6)\r\n    n_load_steps = kwargs.get('n_load_steps', 5)\r\n    fsi_tolerance = kwargs.get('fsi_tolerance', 1e-6)\r\n    relaxation_factor = kwargs.get('relaxation_factor', 0.1)\r\n    newmark_damp = kwargs.get('newmark_damp', 0.5e-4)\r\n    output_folder = kwargs.get('output_folder', './output/')\r\n    model.config['SHARPy'] = {'case': model.case_name,\r\n                        'route': model.route,\r\n                        'flow': flow,\r\n                        'write_screen': kwargs.get('write_screen', 'on'),\r\n                        'write_log': 'on',\r\n                        'save_settings': 'on',\r\n                        'log_folder':  output_folder + '/',\r\n                        'log_file':  model.case_name + '.log'}\r\n\r\n\r\n    model.config['BeamLoader'] = {'unsteady': 'off',\r\n                                'orientation': model.quat}\r\n\r\n    model.config['AerogridLoader'] = {'unsteady': 'on',\r\n                                'aligned_grid': 'on',\r\n                                'mstar': wake_length_factor*model.M, #int(20/tstep_factor),\r\n                                'wake_shape_generator': 'StraightWake',\r\n                                'wake_shape_generator_input': {\r\n                                    'u_inf':model.u_inf,\r\n                                    'u_inf_direction': [1., 0., 0.],\r\n                                    'dt':model.dt,\r\n                                },\r\n                            }\r\n    if horseshoe:\r\n        model.config['AerogridLoader']['mstar'] = 1\r\n\r\n    model.config['StaticCoupled'] = {\r\n        'print_info': 'on',\r\n        'max_iter': 200,\r\n        'n_load_steps': n_load_steps,\r\n        'tolerance': 1e-5,\r\n        'relaxation_factor': relaxation_factor,\r\n        'aero_solver': 'StaticUvlm',\r\n        'aero_solver_settings': {\r\n            'rho': model.rho,\r\n            'print_info': 'off',\r\n            'horseshoe': 'on',\r\n            'num_cores': num_cores,\r\n            'n_rollup': 0,\r\n            'velocity_field_generator': 'SteadyVelocityField',\r\n            'velocity_field_input': {\r\n                'u_inf': model.u_inf,\r\n                'u_inf_direction': model.u_inf_direction},\r\n            'vortex_radius': 1e-9},\r\n        'structural_solver': 'NonLinearStatic',\r\n        'structural_solver_settings': {'print_info': 'off',\r\n                                   'max_iterations': 200,\r\n                                   'num_load_steps': 5,\r\n                                   'delta_curved': 1e-6,\r\n                                   'min_delta': 1e-8,\r\n                                   'gravity': gravity,\r\n                                   'gravity': 9.81},\r\n    }\r\n\r\n\r\n    model.config['AerogridPlot'] = {'include_rbm': 'off',\r\n                                 'include_applied_forces': 'on',\r\n                                 'minus_m_star': 0}\r\n    model.config['BeamPlot'] = {'include_rbm': 'off',\r\n                             'include_applied_forces': 'on'}\r\n    \r\n    model.config['WriteVariablesTime'] = {'structure_variables': ['pos'],\r\n                                        'structure_nodes': list(range(0, model.num_node_surf)),\r\n                                        'cleanup_old_solution': 'on',\r\n                                        }\r\n    \r\n    \r\n    \r\n    model.config['DynamicCoupled'] = {'print_info': 'on',\r\n                                  'structural_substeps': 10,\r\n                                  'dynamic_relaxation': 'on',\r\n                                  'cleanup_previous_solution': 'on',\r\n                                  'structural_solver': 'NonLinearDynamicPrescribedStep',\r\n                                  'structural_solver_settings':  {'print_info': 'off',\r\n                                                                'max_iterations': 950,\r\n                                                                'delta_curved': 1e-1,\r\n                                                                'min_delta': tolerance,\r\n                                                                'newmark_damp': newmark_damp,\r\n                                                                'gravity': gravity,\r\n                                                                'gravity': 9.81,\r\n                                                                'num_steps': model.n_tstep,\r\n                                                                'dt':model.dt,\r\n                                                                },\r\n                                  'aero_solver': 'StepUvlm',\r\n                                  'aero_solver_settings':  {'print_info': 'on',\r\n                                                            'num_cores': num_cores,\r\n                                                            'convection_scheme': 2,\r\n                                                            'velocity_field_generator': 'SteadyVelocityField',\r\n                                                            'velocity_field_input': {'u_inf': model.u_inf,\r\n                                                                                    'u_inf_direction': [1., 0., 0.]},\r\n                                                            'rho': model.rho,\r\n                                                            'n_time_steps': model.n_tstep,\r\n                                                            'vortex_radius': 1e-9,\r\n                                                            'dt': model.dt,\r\n                                                            'gamma_dot_filtering': 3},\r\n                                  'fsi_substeps': 200,\r\n                                  'fsi_tolerance': fsi_tolerance,\r\n                                  'relaxation_factor': model.relaxation_factor,\r\n                                  'minimum_steps': 1,\r\n                                  'relaxation_steps': 150,\r\n                                  'final_relaxation_factor': 0.0,\r\n                                  'n_time_steps': model.n_tstep,\r\n                                  'dt': model.dt,\r\n                                  'include_unsteady_force_contribution': kwargs.get('unsteady_force_distribution', True),\r\n                                  'postprocessors': ['WriteVariablesTime', 'BeamPlot', 'AerogridPlot'],\r\n                                  'postprocessors_settings': {'BeamPlot': {'include_rbm': 'on',\r\n                                                                           'include_applied_forces': 'on'},\r\n                                                              'StallCheck': {},\r\n                                                              'AerogridPlot': {\r\n                                                                  'u_inf': model.u_inf,\r\n                                                                  'include_rbm': 'on',\r\n                                                                  'include_applied_forces': 'on',\r\n                                                                  'minus_m_star': 0},\r\n                                                              'WriteVariablesTime': {\r\n                                                                  'structure_variables': ['pos', 'psi'],\r\n                                                                  'structure_nodes': [model.num_node_surf - 1,\r\n                                                                                      model.num_node_surf,\r\n                                                                                      model.num_node_surf + 1],\r\n                                                                    },\r\n                                                                    },\r\n                                    'network_settings': kwargs.get('network_settings', {}),\r\n                                    }\r\n    \r\n    if gust:\r\n        gust_settings = kwargs.get('gust_settings', {'gust_shape': '1-cos',\r\n                                                     'gust_length': 10.,\r\n                                                     'gust_intensity': 0.01,\r\n                                                     'gust_offset': 0.})\r\n        model.config['DynamicCoupled']['aero_solver_settings']['velocity_field_generator'] = 'GustVelocityField'\r\n        model.config['DynamicCoupled']['aero_solver_settings']['velocity_field_input'] =  {'u_inf': model.u_inf,\r\n                                                                                            'u_inf_direction': [1., 0, 0],\r\n                                                                                            'relative_motion': bool(not free_flight),\r\n                                                                                            'offset': gust_settings['gust_offset'],\r\n                                                                                            'gust_shape': gust_settings['gust_shape'],\r\n                                                                                            'gust_parameters': {\r\n                                                                                                                'gust_length': gust_settings['gust_length'],\r\n                                                                                                                'gust_intensity': gust_settings['gust_intensity'] * model.u_inf,\r\n                                                                                                            }                                                                \r\n                                                                                        }\r\n\r\n    model.config['PickleData'] = {}\r\n    \r\n    model.config['LinearAssembler'] = {'linear_system': 'LinearAeroelastic',\r\n                                    'inout_coordinates': 'nodes', \r\n                                    # 'recover_accelerations': True,           \r\n                                'linear_system_settings': {\r\n                                    'beam_settings': {'modal_projection': True,\r\n                                                        'inout_coords': 'modes',\r\n                                                        'discrete_time': True,\r\n                                                        'newmark_damp': newmark_damp,\r\n                                                        'discr_method': 'newmark',\r\n                                                        'dt': model.dt,\r\n                                                        'proj_modes': 'undamped',\r\n                                                        'num_modes': num_modes,\r\n                                                        'print_info': 'on',\r\n                                                        'gravity': gravity,\r\n                                                        'remove_dofs': []},\r\n                                    'aero_settings': {'dt': model.dt,\r\n                                                        'integr_order': 2,\r\n                                                        'density': model.rho,\r\n                                                        'remove_predictor': True,\r\n                                                        'use_sparse': 'off',\r\n                                                        'gust_assembler':  'LeadingEdge',\r\n                                                        'ScalingDict': kwargs.get('scaling_dict', {'length':1, 'speed': 1, 'density': 1}),\r\n                                                        },\r\n                                    'track_body': free_flight,\r\n                                    'use_euler': free_flight,\r\n                                    }}\r\n    model.config['Modal'] = {'print_info': True,\r\n                            'use_undamped_modes': True,\r\n                            'NumLambda': num_modes,\r\n                            'rigid_body_modes': free_flight, \r\n                            'write_modes_vtk': False,\r\n                            'print_matrices': False,\r\n                            'continuous_eigenvalues': 'off',\r\n                            'dt': model.dt,\r\n                            'plot_eigenvalues': False,\r\n                            }\r\n    model.config['SaveData']['save_linear'] = True\r\n    if kwargs.get('remove_gust_input_in_statespace', False):\r\n        model.config['LinearAssembler']['linear_system_settings']['aero_settings']['remove_inputs'] =  ['u_gust']\r\n\r\n    rom_settings = kwargs.get('rom_settings', {'use': False})\r\n    if rom_settings['use']:\r\n        model.config['LinearAssembler']['linear_system_settings']['aero_settings']['rom_method'] = rom_settings['rom_method'],\r\n        model.config['LinearAssembler']['linear_system_settings']['aero_settings']['rom_method_settings'] = rom_settings['rom_method_settings']\r\n    return model.config\r\n"
  },
  {
    "path": "docs/source/content/example_notebooks/UDP_control/matlab_functions/adjust_state_space_system.m",
    "content": "function state_space_converted = adjust_state_space_system(state_space_system, input_settings)\n%convert_state_space_for_LQR Adjust extracted state space system\n%   The loaded state space system exported from SHARPy is adjusted here for\n%   the closed-loop simulations. This includes:\n%       - extracts the column from the B and D matrices that describe the\n%         effect of the gust input to the states\n%       - removing all unused inputs and rearranging for example the\n%         deflection of a control surface and its rate as both depend on\n%         each other\n%       - removes not considered outputs\n%       - assembles updated discrete state space system\n\n\n%% Reduce model by deleting unused outupts (only tip deflection relevant here)\nC_sensor = state_space_system.C(input_settings.index.tip_displacement,:);\nD_sensor = state_space_system.D(input_settings.index.tip_displacement,:);\n\n%% Reduce model with not used inputs\nidx_input_end =input_settings.index.control_input_start + 2  * input_settings.num_control_surfaces - 1;\n\nidx_inputs = [input_settings.index.control_input_start:idx_input_end];\nB_cs = state_space_system.B(:,idx_inputs);\nD_cs = D_sensor(:,idx_inputs);  \n\n\n%% Extract delta to state\n\nnew_A_colum = B_cs(:,1 :input_settings.num_control_surfaces);\nA = [state_space_system.A new_A_colum; ...\n    zeros(input_settings.num_control_surfaces,...\n         (size(state_space_system.A,2)+ input_settings.num_control_surfaces))];\n\nfor counter = 0:1:input_settings.num_control_surfaces-1\n    A(size(A,1)-counter,size(A,2)-counter) = 1; % Explain one\nend\n\n%Delete delta input and add delta_dot influence on delta \nB_cs(:,1:input_settings.num_control_surfaces) = [];\nB_cs = [B_cs; eye(input_settings.num_control_surfaces) * state_space_system.Ts]; \n\n% Adding feed through of the delta-input on the output on C and deleting \n% column added in C out of D; new column\nC = [C_sensor D_cs(:,1:input_settings.num_control_surfaces)];\nD_cs(:, 1:input_settings.num_control_surfaces) = []; \n\n\n%% Get Disturbance Matrices\nG = [state_space_system.B(:,input_settings.index.gust_input_start); ...\n    zeros(input_settings.num_control_surfaces, 1)];\nH = D_sensor(:,input_settings.index.gust_input_start);\n%% Assemble final state space system\n\nstate_space_converted = ss(A,[B_cs G],C,[D_cs H],state_space_system.Ts);\n\nend"
  },
  {
    "path": "docs/source/content/example_notebooks/UDP_control/matlab_functions/get_1minuscosine_gust_input.m",
    "content": "function gust_time_series = get_1minuscosine_gust_input(gust_length, gust_intensity, dt, u_inf, simulation_time)\n%get_1minuscosine_gust_input Gust input is generated and stored.\n\ngust_time = [0:dt:simulation_time];\noffset_gust = 0;\ngust_intensity = gust_intensity*u_inf;\n\nend_gust = gust_length/u_inf;\nx = [0:dt:end_gust]*u_inf; % spatial coordinate\n\ngust_cos = (1.0 - cos(2*pi*x/ gust_length)) * gust_intensity / 2;\ngust_vel_z = [zeros(1,offset_gust) gust_cos];\n\n%% Adjust vector length \ndelta_vector_length = size(gust_time,2) - size(gust_vel_z,2);\ngust_vel_z = [gust_vel_z zeros(1, delta_vector_length)]; \n\n%% Store gust velocities in time history\ngust_time_series = [gust_time; gust_vel_z]';\n\nend"
  },
  {
    "path": "docs/source/content/example_notebooks/UDP_control/matlab_functions/read_SHARPy_state_space_system.m",
    "content": "function [state_space_system, eta_ref] = read_SHARPy_state_space_system(file_name_sharpy, folder, complex)\r\n%read_SHARPy_state_space_system Gets sate space model from SHARPy output\r\n\r\nabsolute_file_path = strcat(folder, file_name_sharpy);\r\n% Reference Point and Timestep\r\neta_ref = h5read(absolute_file_path, '/linearisation_vectors/eta');\r\ndt = h5read(absolute_file_path, '/ss/dt');\r\n% Read state space matrices \r\nif complex\r\n    A = h5read(absolute_file_path, '/ss/A').r; \r\n    B = h5read(absolute_file_path, '/ss/B').r; \r\n    C = h5read(absolute_file_path, '/ss/C').r;\r\n    D = h5read(absolute_file_path, '/ss/D');\r\nelse\r\n    A = h5read(absolute_file_path, '/ss/A'); \r\n    B = h5read(absolute_file_path, '/ss/B'); \r\n    C = h5read(absolute_file_path, '/ss/C');\r\n    D = h5read(absolute_file_path, '/ss/D');\r\nend\r\n\r\n% Sometimes matrices are exported transposed\r\nif size(A, 1) ~= size(B, 1)\r\n   A = transpose(A); \r\n   B = transpose(B); \r\nend\r\nif size(C, 1) ~= size(D, 1)\r\n   C = transpose(C); \r\n   D = transpose(D); \r\nend\r\n\r\n% Assemble final discrete state space system\r\nstate_space_system = ss(A, B, C, D, dt);\r\n\r\nend \r\n"
  },
  {
    "path": "docs/source/content/example_notebooks/UDP_control/matlab_functions/set_input_parameters.m",
    "content": "function input = set_input_parameters(u_inf, ...\n                                      dt, ...\n                                      num_modes, ...\n                                      num_aero_states, ...\n                                      rbm_considered, ...\n                                      flight_time, ...\n                                      num_control_surfaces, ...\n                                      n_nodes, ...\n                                      control_input_start, ...\n                                      gust_input_start)\n\n\n%set_input_parameters Save input settings to struct.\n%   This function returns a struct that contains all necessary input\n%   settings to adjust the state space model for the control design.\ninput.u_inf = u_inf;\ninput.num_modes = num_modes;\ninput.num_aero_states = num_aero_states;\ninput.rbm = rbm_considered; \ninput.flight_time = flight_time;\ninput.num_control_surfaces = num_control_surfaces;\ninput.rbm = rbm_considered;\ninput.dt = dt;\n\n%% Set indices\ninput.index.control_input_start = control_input_start;\ninput.index.gust_input_start = gust_input_start;\ninput.index.tip_displacement = n_nodes * 6 + n_nodes / 2 * 6 - 3; % forces + right wing nodes\n"
  },
  {
    "path": "docs/source/content/example_notebooks/UDP_control/parameter_UDP_control_pazy_udp_closed_loop_gust_response.json",
    "content": "{\"server_ip_addr\": \"127.0.0.1\", \"client_ip_addr\": \"127.0.0.1\", \"port_in_network\": 64017, \"port_out_network_server\": 59017, \"port_out_network_client\": 59007, \"output_folder\": \"/home/rpalacio/sharpy/docs/source/content/example_notebooks/UDP_control/output\", \"dt\": 0.000625, \"simulation_time\": 1.0, \"num_sensors\": 1, \"initial_cs_deflection\": 0, \"reference_deflection\": 0.02290911}"
  },
  {
    "path": "docs/source/content/example_notebooks/UDP_control/pazy_PID_controller_UDP.py",
    "content": "import socket\r\nimport logging\r\nimport struct\r\nimport sharpy.io.message_interface as message_interface\r\nimport numpy as np\r\nfrom pid_controller import PID_Controller\r\nimport json\r\nimport os\r\n\r\n\"\"\"\r\nThis script establishes a UDP connection to SHARPy from which it receives sensor measurements. \r\nBased on these measurements, a PID-Controller computes an actuator input that is feedback \r\nto SHARPy again using UDP. \r\n\r\nThe user just needs to specify the name of the case name (bottom of the script) and run the main\r\nfunction 'run_controller(case_name)'. The case name is needed to find the appropriate json input \r\nfile for all required information for the following steps:\r\n1) Load input settings \r\n2) Establish a connection to the UDP i/o network created by SHARPy (server)\r\n3) Initialise PID Controller\r\n4) Enter the time loop including: \r\n    a) Sending a control input (starting with the initial value loaded from the init file)\r\n        to SHARPy;\r\n    b) The resulting sensor measurement for the next simulation time step is sent back to \r\n        this client.\r\n    c) Based on the error to the defined target value, the PID controller computes a control\r\n       input.\r\n    d) Both the received sensor measurement and generated control input are saved in .txt-files.\r\n    a) Next step, would be a) again. But now, we send the generated control input.\r\n5) Closes UDP connections\r\n\"\"\"\r\n\r\ndef create_and_bind_client(ip_addr, port):\r\n    \"\"\"\r\n        Creates and bind the client to the server socket using UDP.\r\n    \"\"\"\r\n    sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)\r\n    sock.bind((ip_addr, port))\r\n    return sock\r\n\r\ndef setup_udp_network(dict_parameters):\r\n    \"\"\"\r\n        This function connects the present client to two sockets, specified within the \r\n        information (i.e. ip addresses and ports). Further, a timeout of 120 s are set\r\n        for SHARPy's output network, i.e. if new sensor measurements are not received\r\n        (normally caused by an error), the network connection is closed.\r\n    \"\"\"\r\n    server_ip_addr = dict_parameters[\"server_ip_addr\"] # SHARPy\r\n    client_ip_addr =  dict_parameters[\"client_ip_addr\"] # controller\r\n    port_in_network =  dict_parameters[\"port_in_network\"] \r\n    port_out_network_client = dict_parameters[\"port_out_network_client\"] \r\n    port_in_network_client = port_out_network_client - 8 # needs to be different from port of network client\r\n\r\n    sharpy_in_network= (server_ip_addr, port_in_network)\r\n\r\n    in_sock = create_and_bind_client(client_ip_addr, port_in_network_client)\r\n\r\n    out_sock = create_and_bind_client(client_ip_addr, port_out_network_client)\r\n    out_sock.settimeout(120)\r\n\r\n    return sharpy_in_network, in_sock, out_sock\r\n\r\ndef init_logger():\r\n    logging.basicConfig(format='%(asctime)s - %(name)s - %(levelname)s - %(message)s',\r\n                        level=20)\r\n    return logging.getLogger(__name__)\r\n\r\ndef write_data_to_file(data, file_path, init_file=False):\r\n    if init_file:\r\n        file_mode = \"w\"\r\n    else:\r\n        file_mode = \"ab\"\r\n\r\n    with open(file_path, file_mode) as f:\r\n        np.savetxt(f, data, delimiter=',', newline='\\r\\n')\r\n\r\ndef receive_sensor_measurements(logger, out_sock, msg_len, num_sensors):\r\n    \"\"\"\r\n        UDP socket waits and receives sensor measurements from SHARPy. After,\r\n        the message is decoded and unpacked in an appropriate format and returned\r\n        to the main function.\r\n    \"\"\"\r\n    try:\r\n        msg, conn = out_sock.recvfrom(msg_len)\r\n    except socket.timeout:\r\n        logger.info('Socket time out')\r\n        raise\r\n    logger.info('Received {}-byte long data \"{}\" from {}'.format(len(msg), msg, conn))\r\n\r\n    values = message_interface.decoder(msg)\r\n    logger.info('Received {}'.format(values))\r\n    \r\n    results = np.zeros((num_sensors,))\r\n    for isensor in range(num_sensors):\r\n        results[isensor] = values[isensor][1]\r\n    return results\r\n\r\ndef send_control_input(logger, in_sock, sharpy_in_network, control_input_to_send):\r\n    \"\"\"\r\n        The generated control input is packed into a binary message readable from SHARPy.\r\n          Note that, this message includes the control input twice, since the ailerons \r\n          on right and left wing have different IDs. \r\n    \"\"\"\r\n    ctrl_value = struct.pack('<5sifif', b'RREF0', 0, control_input_to_send, 1, control_input_to_send)\r\n    logger.info('Sending control input of size {} bytes.'.format(len(ctrl_value)))\r\n    in_sock.sendto(ctrl_value, sharpy_in_network)\r\n    logger.info('Sent control input {} to {}.'.format(control_input_to_send, sharpy_in_network))\r\n\r\ndef run_controller(case_name):\r\n    \r\n    # 1) Load input settings\r\n    route_file_dir = os.path.abspath('')\r\n    with open(route_file_dir + '/parameter_UDP_control_{}.json'.format(case_name), 'r') as fp:\r\n        dict_simulation_parameters = json.load(fp)\r\n    \r\n    # define simulation settings\r\n    curr_ts = 0\r\n    num_sensors = dict_simulation_parameters[\"num_sensors\"]\r\n    msg_len = 5 + 8 * num_sensors\r\n    dt = dict_simulation_parameters[\"dt\"]\r\n    number_timesteps = int(dict_simulation_parameters[\"simulation_time\"] / dt)\r\n    output_folder = dict_simulation_parameters[\"output_folder\"]\r\n\r\n    init_cs_deflection = float(dict_simulation_parameters[\"initial_cs_deflection\"])\r\n    reference_deflection= dict_simulation_parameters[\"reference_deflection\"]\r\n    \r\n    # 2) Establish UDP connections\r\n    sharpy_in_network, in_sock, out_sock = setup_udp_network(dict_simulation_parameters)\r\n\r\n    # setup network and data output\r\n    logger = init_logger()\r\n    file_path_sensor =  os.path.join(output_folder, case_name, \"{}_{}\".format(case_name, \"sensor_measurement\"))\r\n    file_path_control = os.path.join(output_folder, case_name, \"{}_{}\".format(case_name, \"control_input\"))\r\n\r\n    # 3) Initialise controller and control input\r\n    PID =  PID_Controller(10., 0., 0., target=reference_deflection)\r\n    control_input = init_cs_deflection\r\n\r\n    # 4) Enter time control loop\r\n    while curr_ts < number_timesteps:\r\n        # a)\r\n        send_control_input(logger, \r\n                           in_sock, \r\n                           sharpy_in_network, \r\n                           control_input)\r\n\r\n        # b)\r\n        sensor_data = receive_sensor_measurements(logger, \r\n                                                  out_sock, \r\n                                                  msg_len,\r\n                                                  num_sensors)\r\n        \r\n\r\n        # c) Generate control input with PID controller\r\n        if curr_ts >= 5:\r\n            control_input = PID.generate_control_input(sensor_data, dt)\r\n\r\n        # d) Store sensor and control input to .txt-file\r\n        write_data_to_file(sensor_data,\r\n                           file_path_sensor, \r\n                           init_file= bool(curr_ts==0))\r\n\r\n        write_data_to_file([control_input],\r\n                           file_path_control,\r\n                           init_file= bool(curr_ts==0))\r\n\r\n        curr_ts += 1\r\n\r\n    # 5) Close sockets\r\n    out_sock.close()\r\n    in_sock.close()\r\n    logger.info('Closed input and output sockets')\r\n\r\nif __name__ == '__main__':\r\n    case_name = \"pazy_udp_closed_loop_gust_response\"\r\n    run_controller(case_name)"
  },
  {
    "path": "docs/source/content/example_notebooks/UDP_control/pazy_network_info.yml",
    "content": "---\n- name: 'control_surface_deflection'\n  var_type: 'control_surface'\n  inout: 'in'\n  position: 0\n- name: 'control_surface_deflection'\n  var_type: 'control_surface'\n  inout: 'in'\n  position: 1\n- name: 'pos'\n  inout: 'out'\n  position: 8\n  index: 2\n  var_type: 'node'\n...\n"
  },
  {
    "path": "docs/source/content/example_notebooks/UDP_control/pid_controller.py",
    "content": "class PID_Controller(object):\r\n    def __init__(self, P_gain, I_gain, D_gain, target=0):\r\n        self.P_gain = P_gain\r\n        self.I_gain = I_gain\r\n        self.D_gain = D_gain\r\n        self.target = target\r\n\r\n        self.error = 0.\r\n        self.integral_error = 0.\r\n        self.derivative_error = 0.\r\n        self.previous_error = 0.\r\n\r\n    def generate_control_input(self, sensor_measurement, dt):\r\n        self.error = self.target - sensor_measurement\r\n        self.integral_error += self.error * dt        \r\n        self.derivative_error = (self.error - self.previous_error) * dt\r\n        self.previous_error = self.error\r\n        \r\n        return self.P_gain * self.error + self.I_gain * self.integral_error + self.derivative_error * self.D_gain"
  },
  {
    "path": "docs/source/content/example_notebooks/UDP_control/tutorial_udp_control.ipynb",
    "content": "{\n \"cells\": [\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"# \"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"# Closed-Loop Simulation of the Pazy wing with SHARPy as a hardware-in-the-loop system\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"This tutorial exemplifies the application of an external controller on a nonlinear aeroelastic system using SHARPy as a hardware-in-the-loop system. The controller receives sensor measurements from SHARPy using an interface based on the User Datagram Protocol (UDP). After generating the control input, the control interface feeds this input back to the actuators incorporated in SHARPy again through the UDP interface.  \\n\",\n    \"\\n\",\n    \"\\n\",\n    \"The notebook includes examples of the main methods in SHARPy for controller design, including both the generation of a linearized reduced-order model (ROM) of the nonlinear aeroelastic model (around a nonlinear equilibium point) for control design and, finally, how to apply their controller on a nonlinear aeroelastic simulation. The test case is the Pazy wing as modelled by Goizueta et al (JAircraft, 2022).\\n\",\n    \"\\n\",\n    \"Reading material recommended are:\\n\",\n    \"\\n\",\n    \"[1] Artola, M., Goizueta, N., Wynn, A., and Palacios, R., “Proof of Concept for a Hardware-in-the-Loop Nonlinear ControlFramework for Very Flexible Aircraft,”AIAA Scitech 2021 Forum, 2021. https://doi.org/10.2514/6.2021-1392.\\n\",\n    \"\\n\",\n    \"[2] Stefanie Duessler, Thulasi Mylvaganam and Rafael Palacios. \\\"LQG-based Gust Load Alleviation Systems for Very Flexible Aircraft,\\\" AIAA 2023-2571. AIAA SCITECH 2023 Forum. January 2023. https://doi.org/10.2514/6.2023-2571.\\n\",\n    \"\\n\",\n    \"And other useful references for the Pazy model and Krylov-based model order reduction scheme are:\\n\",\n    \"\\n\",\n    \"[3] Norberto Goizueta, Andrew Wynn, Rafael Palacios, Ariel Drachinsky, and Daniella E. Raveh, \\\"Flutter Predictions for Very Flexible Wing Wind Tunnel Test\\\",\\n\",\n    \"Journal of Aircraft 2022 59:4, 1082-1097. https://doi.org/10.2514/1.C036710.\\n\",\n    \"\\n\",\n    \"[4] Norberto Goizueta, Andrew Wynn, and Rafael Palacios, \\\"Adaptive Sampling for Interpolation of Reduced-Order Aeroelastic Systems\\\", AIAA Journal 2022 60:11, 6183-6202 https://doi.org/10.2514/1.J062050.\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"The notebook is structured such that first, we design the model and its operational point. Second, the model is linearized and reduced. The resulting reduced-order model (ROM) is then used for control design using Matlab. Third, we apply via a UDP Interface the designed controller on a nonlinear aeroelastic simulation performed with SHARPy.\\n\",\n    \"\\n\",\n    \"Please note that this notebook requires 12 hours to be completed on a standard desktop computer. The longest simulation is the open-loop nonlinear gust response simulation taking around 8 hours, while the closed-loop nonlinear gust response simulation only takes 4 hours. \"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## Requirements\\n\",\n    \"\\n\",\n    \"This notebook needs to be run within the sharpy environment. Please check if you have installed SHARPy correctly. Matlab with a version of 2022 or newer is required for the preliminary control design (the matlab engine is also available in older versions of Matlab butno through pip install).\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 1,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"import matplotlib.pyplot as plt\\n\",\n    \"import numpy as np\\n\",\n    \"import os\\n\",\n    \"import sharpy.cases.templates.flying_wings as wings\\n\",\n    \"import sharpy.sharpy_main\\n\",\n    \"import json\\n\",\n    \"\\n\",\n    \"! pip install matlabengine\\n\",\n    \"import matlab.engine\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## Demonstrator Model \\n\",\n    \"\\n\",\n    \"The very-flexible Pazy wing serves as a demonstrator model and an aileron located near the wingtip as an actuator. The control objective in this example is to alleviate the wingtip displacement due to gust-induced wing loads. As an example, we use a P-controller implemented in a Python interface with the objective to reduce the wingtip displacement induced by a gust encounter. However, the reader can test any controller run on any platform as long as a working UDP connection to SHARPy is established. \"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"### Wind tunnel conditions\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 2,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"u_inf = 40 # m/s\\n\",\n    \"alpha_deg = 1\\n\",\n    \"rho = 1.225\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"### Wing and Wake Lattice Discretisation\\n\",\n    \"\\n\",\n    \"Note that for convergence, we need a finer lattice grid. However, this would unnecessarily increase this notebook's duration which is already high enough with these coarse settings.\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 3,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"number_chordwise_panels = 4\\n\",\n    \"number_spanwise_nodes = 16\\n\",\n    \"wake_length_factor = 10\\n\",\n    \"\\n\",\n    \"num_control_surfaces = 2\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"### General Simulation Settings\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 4,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"num_cores = 4\\n\",\n    \"simulation_time =1.0\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 5,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"cases_folder = './cases/' # folder to store input files \\n\",\n    \"output_folder = './output' # folder to save results\\n\",\n    \"route_notebook_dir =  os.path.abspath('')\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## Open-Loop Gust Response\\n\",\n    \"After, defining the general model settings, we now simulate the open-loop response of the Pazy wing to a gust. For this, we first have to generate input files for the Pazy model aerodynamic and structural properties, giving the above-defined flight conditions, discretisation, and simulation settings.\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 6,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"case_name = 'pazy_open_loop_gust_response'\\n\",\n    \"pazy_model_open_loop = wings.PazyControlSurface(M=number_chordwise_panels,\\n\",\n    \"                                      N=number_spanwise_nodes,\\n\",\n    \"                                      Mstar_fact=wake_length_factor,\\n\",\n    \"                                      u_inf=u_inf,\\n\",\n    \"                                      alpha=alpha_deg,\\n\",\n    \"                                      rho=rho,\\n\",\n    \"                                      n_surfaces=2,\\n\",\n    \"                                      route=cases_folder + '/' + case_name,\\n\",\n    \"                                      case_name=case_name,\\n\",\n    \"                                      physical_time=simulation_time,)\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 7,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"def generate_aero_and_fem_input_files(model):\\n\",\n    \"    model.clean_test_files()\\n\",\n    \"    model.update_derived_params()\\n\",\n    \"    model.generate_aero_file()\\n\",\n    \"    model.generate_fem_file()\\n\",\n    \"    \\n\",\n    \"generate_aero_and_fem_input_files(pazy_model_open_loop)\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"Next, we define the gust shape used, i.e. a 1-cosine gust with a gust length of 10 m and intensity of 2 %.\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 8,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"gust = True\\n\",\n    \"gust_settings  ={'gust_shape': '1-cos',\\n\",\n    \"                'gust_length': 10.,\\n\",\n    \"                'gust_intensity': 0.02,\\n\",\n    \"                'gust_offset': 0.}  \"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"and create the final settings for the open-loop gust response simulation. Most importantly here, is the `flow` list which defines which solver will be run in which order. For more information about each solver, we kindly ask you to check our documentation (https://ic-sharpy.readthedocs.io/en/latest/content/solvers.html).\\n\",\n    \"\\n\",\n    \"We are using the `get_setttings_udp` function to create our final settings. Basic settings can be adjusted by using different inputs. Please check the function code to be aware of the parameters used here.\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 9,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"flow = ['BeamLoader',\\n\",\n    \"        'AerogridLoader',\\n\",\n    \"        'StaticCoupled',\\n\",\n    \"        'AerogridPlot',\\n\",\n    \"        'BeamPlot',\\n\",\n    \"        'DynamicCoupled',\\n\",\n    \"        ]\\n\",\n    \"from get_settings_udp import get_settings_udp\\n\",\n    \"\\n\",\n    \"pazy_model_open_loop.set_default_config_dict()\\n\",\n    \"pazy_model_open_loop.config = get_settings_udp(pazy_model_open_loop,\\n\",\n    \"                            flow,\\n\",\n    \"                            num_cores=num_cores,\\n\",\n    \"                            wake_length_factor=wake_length_factor,\\n\",\n    \"                            output_folder = output_folder,\\n\",\n    \"                            gust=gust,\\n\",\n    \"                            gust_settings=gust_settings)\\n\",\n    \"pazy_model_open_loop.config.write()\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"### Run SHARPy Simulation (open-loop test)\\n\",\n    \"Having all input files ready, let us start the simulation. Note that this simulation takes up to eight hours. \\n\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 10,\n   \"metadata\": {\n    \"scrolled\": true\n   },\n   \"outputs\": [\n    {\n     \"name\": \"stdout\",\n     \"output_type\": \"stream\",\n     \"text\": [\n      \"--------------------------------------------------------------------------------\\u001b[0m\\n\",\n      \"            ######  ##     ##    ###    ########  ########  ##    ##\\u001b[0m\\n\",\n      \"           ##    ## ##     ##   ## ##   ##     ## ##     ##  ##  ##\\u001b[0m\\n\",\n      \"           ##       ##     ##  ##   ##  ##     ## ##     ##   ####\\u001b[0m\\n\",\n      \"            ######  ######### ##     ## ########  ########     ##\\u001b[0m\\n\",\n      \"                 ## ##     ## ######### ##   ##   ##           ##\\u001b[0m\\n\",\n      \"           ##    ## ##     ## ##     ## ##    ##  ##           ##\\u001b[0m\\n\",\n      \"            ######  ##     ## ##     ## ##     ## ##           ##\\u001b[0m\\n\",\n      \"--------------------------------------------------------------------------------\\u001b[0m\\n\",\n      \"Aeroelastics Lab, Aeronautics Department.\\u001b[0m\\n\",\n      \"    Copyright (c), Imperial College London.\\u001b[0m\\n\",\n      \"    All rights reserved.\\u001b[0m\\n\",\n      \"    License available at https://github.com/imperialcollegelondon/sharpy\\u001b[0m\\n\",\n      \"\\u001b[36mRunning SHARPy from /home/rpalacio/sharpy/docs/source/content/example_notebooks/UDP_control\\u001b[0m\\n\",\n      \"\\u001b[36mSHARPy being run is in /home/rpalacio/anaconda3/envs/sharpy/lib/python3.10/site-packages\\u001b[0m\\n\",\n      \"SHARPy output folder set\\u001b[0m\\n\",\n      \"\\u001b[34m\\t./output//pazy_open_loop_gust_response/\\u001b[0m\\n\",\n      \"\\u001b[36mGenerating an instance of BeamLoader\\u001b[0m\\n\",\n      \"Variable for_pos has no assigned value in the settings file.\\u001b[0m\\n\",\n      \"\\u001b[34m    will default to the value: [0.0, 0, 0]\\u001b[0m\\n\",\n      \"\\u001b[36mGenerating an instance of AerogridLoader\\u001b[0m\\n\",\n      \"Variable freestream_dir has no assigned value in the settings file.\\u001b[0m\\n\",\n      \"\\u001b[34m    will default to the value: [1.0, 0.0, 0.0]\\u001b[0m\\n\",\n      \"Variable control_surface_deflection has no assigned value in the settings file.\\u001b[0m\\n\",\n      \"\\u001b[34m    will default to the value: []\\u001b[0m\\n\",\n      \"Variable control_surface_deflection_generator_settings has no assigned value in the settings file.\\u001b[0m\\n\",\n      \"\\u001b[34m    will default to the value: {}\\u001b[0m\\n\",\n      \"Variable dx1 has no assigned value in the settings file.\\u001b[0m\\n\",\n      \"\\u001b[34m    will default to the value: -1.0\\u001b[0m\\n\",\n      \"Variable ndx1 has no assigned value in the settings file.\\u001b[0m\\n\",\n      \"\\u001b[34m    will default to the value: 1\\u001b[0m\\n\",\n      \"Variable r has no assigned value in the settings file.\\u001b[0m\\n\",\n      \"\\u001b[34m    will default to the value: 1.0\\u001b[0m\\n\",\n      \"Variable dxmax has no assigned value in the settings file.\\u001b[0m\\n\",\n      \"\\u001b[34m    will default to the value: -1.0\\u001b[0m\\n\",\n      \"\\u001b[34mThe aerodynamic grid contains 2 surfaces\\u001b[0m\\n\",\n      \"\\u001b[34m  Surface 0, M=4, N=8\\u001b[0m\\n\",\n      \"     Wake 0, M=40, N=8\\u001b[0m\\n\",\n      \"\\u001b[34m  Surface 1, M=4, N=8\\u001b[0m\\n\",\n      \"     Wake 1, M=40, N=8\\u001b[0m\\n\",\n      \"  In total: 64 bound panels\\u001b[0m\\n\",\n      \"  In total: 640 wake panels\\u001b[0m\\n\",\n      \"  Total number of panels = 704\\u001b[0m\\n\",\n      \"\\u001b[36mGenerating an instance of StaticCoupled\\u001b[0m\\n\",\n      \"Variable correct_forces_method has no assigned value in the settings file.\\u001b[0m\\n\",\n      \"\\u001b[34m    will default to the value: \\u001b[0m\\n\",\n      \"Variable correct_forces_settings has no assigned value in the settings file.\\u001b[0m\\n\",\n      \"\\u001b[34m    will default to the value: {}\\u001b[0m\\n\",\n      \"Variable runtime_generators has no assigned value in the settings file.\\u001b[0m\\n\",\n      \"\\u001b[34m    will default to the value: {}\\u001b[0m\\n\",\n      \"\\u001b[36mGenerating an instance of NonLinearStatic\\u001b[0m\\n\",\n      \"Variable abs_threshold has no assigned value in the settings file.\\u001b[0m\\n\",\n      \"\\u001b[34m    will default to the value: 1e-13\\u001b[0m\\n\",\n      \"Variable newmark_damp has no assigned value in the settings file.\\u001b[0m\\n\",\n      \"\\u001b[34m    will default to the value: 0.0001\\u001b[0m\\n\",\n      \"Variable gravity_on has no assigned value in the settings file.\\u001b[0m\\n\",\n      \"\\u001b[34m    will default to the value: False\\u001b[0m\\n\",\n      \"Variable gravity_dir has no assigned value in the settings file.\\u001b[0m\\n\",\n      \"\\u001b[34m    will default to the value: [0.0, 0.0, 1.0]\\u001b[0m\\n\",\n      \"Variable relaxation_factor has no assigned value in the settings file.\\u001b[0m\\n\",\n      \"\\u001b[34m    will default to the value: 0.3\\u001b[0m\\n\",\n      \"Variable dt has no assigned value in the settings file.\\u001b[0m\\n\",\n      \"\\u001b[34m    will default to the value: 0.01\\u001b[0m\\n\",\n      \"Variable num_steps has no assigned value in the settings file.\\u001b[0m\\n\",\n      \"\\u001b[34m    will default to the value: 500\\u001b[0m\\n\",\n      \"Variable initial_position has no assigned value in the settings file.\\u001b[0m\\n\",\n      \"\\u001b[34m    will default to the value: [0. 0. 0.]\\u001b[0m\\n\",\n      \"Variable initial_velocity has no assigned value in the settings file.\\u001b[0m\\n\",\n      \"\\u001b[34m    will default to the value: [0. 0. 0. 0. 0. 0.]\\u001b[0m\\n\",\n      \"\\u001b[36mGenerating an instance of StaticUvlm\\u001b[0m\\n\",\n      \"Variable rollup_dt has no assigned value in the settings file.\\u001b[0m\\n\",\n      \"\\u001b[34m    will default to the value: 0.1\\u001b[0m\\n\",\n      \"Variable rollup_aic_refresh has no assigned value in the settings file.\\u001b[0m\\n\",\n      \"\\u001b[34m    will default to the value: 1\\u001b[0m\\n\",\n      \"Variable rollup_tolerance has no assigned value in the settings file.\\u001b[0m\\n\",\n      \"\\u001b[34m    will default to the value: 0.0001\\u001b[0m\\n\",\n      \"Variable iterative_solver has no assigned value in the settings file.\\u001b[0m\\n\",\n      \"\\u001b[34m    will default to the value: False\\u001b[0m\\n\",\n      \"Variable iterative_tol has no assigned value in the settings file.\\u001b[0m\\n\",\n      \"\\u001b[34m    will default to the value: 0.0001\\u001b[0m\\n\",\n      \"Variable iterative_precond has no assigned value in the settings file.\\u001b[0m\\n\",\n      \"\\u001b[34m    will default to the value: False\\u001b[0m\\n\",\n      \"Variable cfl1 has no assigned value in the settings file.\\u001b[0m\\n\",\n      \"\\u001b[34m    will default to the value: True\\u001b[0m\\n\",\n      \"Variable vortex_radius_wake_ind has no assigned value in the settings file.\\u001b[0m\\n\",\n      \"\\u001b[34m    will default to the value: 1e-06\\u001b[0m\\n\",\n      \"Variable rbm_vel_g has no assigned value in the settings file.\\u001b[0m\\n\",\n      \"\\u001b[34m    will default to the value: [0.0, 0.0, 0.0, 0.0, 0.0, 0.0]\\u001b[0m\\n\",\n      \"Variable centre_rot_g has no assigned value in the settings file.\\u001b[0m\\n\",\n      \"\\u001b[34m    will default to the value: [0.0, 0.0, 0.0]\\u001b[0m\\n\",\n      \"Variable map_forces_on_struct has no assigned value in the settings file.\\u001b[0m\\n\",\n      \"\\u001b[34m    will default to the value: False\\u001b[0m\\n\",\n      \"\\u001b[0m\\n\",\n      \"\\u001b[0m\\n\",\n      \"\\u001b[0m\\n\",\n      \"|=====|=====|============|==========|==========|==========|==========|==========|==========|\\u001b[0m\\n\",\n      \"|iter |step | log10(res) |    Fx    |    Fy    |    Fz    |    Mx    |    My    |    Mz    |\\u001b[0m\\n\",\n      \"|=====|=====|============|==========|==========|==========|==========|==========|==========|\\u001b[0m\\n\"\n     ]\n    },\n    {\n     \"name\": \"stderr\",\n     \"output_type\": \"stream\",\n     \"text\": [\n      \"fatal: not a git repository (or any of the parent directories): .git\\n\"\n     ]\n    },\n    {\n     \"name\": \"stdout\",\n     \"output_type\": \"stream\",\n     \"text\": [\n      \"|  0  |  0  |  0.00000   | -0.0277  |  0.0000  |  1.9185  |  0.0000  |  0.0387  | -0.0000  |\\u001b[0m\\n\",\n      \"|  1  |  0  |  -6.69935  | -0.0290  |  0.0000  |  1.9636  |  0.0000  |  0.0396  | -0.0000  |\\u001b[0m\\n\",\n      \"|  0  |  1  |  0.00000   | -0.0566  |  0.0000  |  3.9396  | -0.0000  |  0.0794  | -0.0000  |\\u001b[0m\\n\",\n      \"|  1  |  1  |  -6.06871  | -0.0592  |  0.0000  |  4.0325  | -0.0000  |  0.0812  | -0.0000  |\\u001b[0m\\n\",\n      \"|  0  |  2  |  0.00000   | -0.0866  |  0.0000  |  6.0718  | -0.0000  |  0.1222  | -0.0000  |\\u001b[0m\\n\",\n      \"|  1  |  2  |  -5.68671  | -0.0906  |  0.0000  |  6.2157  | -0.0000  |  0.1250  | -0.0000  |\\u001b[0m\\n\",\n      \"|  0  |  3  |  0.00000   | -0.1177  |  0.0000  |  8.3244  | -0.0000  |  0.1673  | -0.0000  |\\u001b[0m\\n\",\n      \"|  1  |  3  |  -5.40580  | -0.1233  |  0.0000  |  8.5230  | -0.0000  |  0.1712  | -0.0000  |\\u001b[0m\\n\",\n      \"|  0  |  4  |  0.00000   | -0.1501  |  0.0000  | 10.7075  | -0.0000  |  0.2149  | -0.0000  |\\u001b[0m\\n\",\n      \"|  1  |  4  |  -5.17976  | -0.1572  |  0.0000  | 10.9648  | -0.0000  |  0.2200  | -0.0000  |\\u001b[0m\\n\",\n      \"\\u001b[36mGenerating an instance of AerogridPlot\\u001b[0m\\n\",\n      \"Variable include_forward_motion has no assigned value in the settings file.\\u001b[0m\\n\",\n      \"\\u001b[34m    will default to the value: False\\u001b[0m\\n\",\n      \"Variable include_unsteady_applied_forces has no assigned value in the settings file.\\u001b[0m\\n\",\n      \"\\u001b[34m    will default to the value: False\\u001b[0m\\n\",\n      \"Variable name_prefix has no assigned value in the settings file.\\u001b[0m\\n\",\n      \"\\u001b[34m    will default to the value: \\u001b[0m\\n\",\n      \"Variable u_inf has no assigned value in the settings file.\\u001b[0m\\n\",\n      \"\\u001b[34m    will default to the value: 0.0\\u001b[0m\\n\",\n      \"Variable dt has no assigned value in the settings file.\\u001b[0m\\n\",\n      \"\\u001b[34m    will default to the value: 0.0\\u001b[0m\\n\",\n      \"Variable include_velocities has no assigned value in the settings file.\\u001b[0m\\n\",\n      \"\\u001b[34m    will default to the value: False\\u001b[0m\\n\",\n      \"Variable include_incidence_angle has no assigned value in the settings file.\\u001b[0m\\n\",\n      \"\\u001b[34m    will default to the value: False\\u001b[0m\\n\",\n      \"Variable num_cores has no assigned value in the settings file.\\u001b[0m\\n\",\n      \"\\u001b[34m    will default to the value: 1\\u001b[0m\\n\",\n      \"Variable vortex_radius has no assigned value in the settings file.\\u001b[0m\\n\",\n      \"\\u001b[34m    will default to the value: 1e-06\\u001b[0m\\n\",\n      \"Variable stride has no assigned value in the settings file.\\u001b[0m\\n\",\n      \"\\u001b[34m    will default to the value: 1\\u001b[0m\\n\",\n      \"Variable save_wake has no assigned value in the settings file.\\u001b[0m\\n\",\n      \"\\u001b[34m    will default to the value: True\\u001b[0m\\n\",\n      \"\\u001b[34m...Finished\\u001b[0m\\n\",\n      \"\\u001b[36mGenerating an instance of BeamPlot\\u001b[0m\\n\",\n      \"Variable include_FoR has no assigned value in the settings file.\\u001b[0m\\n\",\n      \"\\u001b[34m    will default to the value: False\\u001b[0m\\n\",\n      \"Variable include_applied_moments has no assigned value in the settings file.\\u001b[0m\\n\",\n      \"\\u001b[34m    will default to the value: True\\u001b[0m\\n\",\n      \"Variable name_prefix has no assigned value in the settings file.\\u001b[0m\\n\",\n      \"\\u001b[34m    will default to the value: \\u001b[0m\\n\",\n      \"Variable output_rbm has no assigned value in the settings file.\\u001b[0m\\n\",\n      \"\\u001b[34m    will default to the value: True\\u001b[0m\\n\",\n      \"\\u001b[34m...Finished\\u001b[0m\\n\",\n      \"\\u001b[36mGenerating an instance of DynamicCoupled\\u001b[0m\\n\",\n      \"Variable controller_id has no assigned value in the settings file.\\u001b[0m\\n\",\n      \"\\u001b[34m    will default to the value: {}\\u001b[0m\\n\",\n      \"Variable controller_settings has no assigned value in the settings file.\\u001b[0m\\n\",\n      \"\\u001b[34m    will default to the value: {}\\u001b[0m\\n\",\n      \"Variable steps_without_unsteady_force has no assigned value in the settings file.\\u001b[0m\\n\",\n      \"\\u001b[34m    will default to the value: 0\\u001b[0m\\n\",\n      \"Variable pseudosteps_ramp_unsteady_force has no assigned value in the settings file.\\u001b[0m\\n\",\n      \"\\u001b[34m    will default to the value: 0\\u001b[0m\\n\",\n      \"Variable correct_forces_method has no assigned value in the settings file.\\u001b[0m\\n\",\n      \"\\u001b[34m    will default to the value: \\u001b[0m\\n\",\n      \"Variable correct_forces_settings has no assigned value in the settings file.\\u001b[0m\\n\",\n      \"\\u001b[34m    will default to the value: {}\\u001b[0m\\n\",\n      \"Variable runtime_generators has no assigned value in the settings file.\\u001b[0m\\n\",\n      \"\\u001b[34m    will default to the value: {}\\u001b[0m\\n\",\n      \"\\u001b[36mGenerating an instance of NonLinearDynamicPrescribedStep\\u001b[0m\\n\",\n      \"\\u001b[36mGenerating an instance of StepUvlm\\u001b[0m\\n\",\n      \"Variable num_load_steps has no assigned value in the settings file.\\u001b[0m\\n\",\n      \"\\u001b[34m    will default to the value: 1\\u001b[0m\\n\",\n      \"Variable abs_threshold has no assigned value in the settings file.\\u001b[0m\\n\",\n      \"\\u001b[34m    will default to the value: 1e-13\\u001b[0m\\n\",\n      \"Variable gravity_on has no assigned value in the settings file.\\u001b[0m\\n\",\n      \"\\u001b[34m    will default to the value: False\\u001b[0m\\n\",\n      \"Variable gravity_dir has no assigned value in the settings file.\\u001b[0m\\n\",\n      \"\\u001b[34m    will default to the value: [0.0, 0.0, 1.0]\\u001b[0m\\n\",\n      \"Variable relaxation_factor has no assigned value in the settings file.\\u001b[0m\\n\",\n      \"\\u001b[34m    will default to the value: 0.3\\u001b[0m\\n\",\n      \"Variable iterative_solver has no assigned value in the settings file.\\u001b[0m\\n\",\n      \"\\u001b[34m    will default to the value: False\\u001b[0m\\n\",\n      \"Variable iterative_tol has no assigned value in the settings file.\\u001b[0m\\n\",\n      \"\\u001b[34m    will default to the value: 0.0001\\u001b[0m\\n\",\n      \"Variable iterative_precond has no assigned value in the settings file.\\u001b[0m\\n\",\n      \"\\u001b[34m    will default to the value: False\\u001b[0m\\n\",\n      \"Variable cfl1 has no assigned value in the settings file.\\u001b[0m\\n\",\n      \"\\u001b[34m    will default to the value: True\\u001b[0m\\n\",\n      \"Variable vortex_radius_wake_ind has no assigned value in the settings file.\\u001b[0m\\n\",\n      \"\\u001b[34m    will default to the value: 1e-06\\u001b[0m\\n\",\n      \"Variable interp_coords has no assigned value in the settings file.\\u001b[0m\\n\",\n      \"\\u001b[34m    will default to the value: 0\\u001b[0m\\n\",\n      \"Variable filter_method has no assigned value in the settings file.\\u001b[0m\\n\",\n      \"\\u001b[34m    will default to the value: 0\\u001b[0m\\n\",\n      \"Variable interp_method has no assigned value in the settings file.\\u001b[0m\\n\",\n      \"\\u001b[34m    will default to the value: 0\\u001b[0m\\n\",\n      \"Variable yaw_slerp has no assigned value in the settings file.\\u001b[0m\\n\",\n      \"\\u001b[34m    will default to the value: 0.0\\u001b[0m\\n\",\n      \"Variable centre_rot has no assigned value in the settings file.\\u001b[0m\\n\",\n      \"\\u001b[34m    will default to the value: [0.0, 0.0, 0.0]\\u001b[0m\\n\",\n      \"Variable quasi_steady has no assigned value in the settings file.\\u001b[0m\\n\",\n      \"\\u001b[34m    will default to the value: False\\u001b[0m\\n\",\n      \"Variable gust_component has no assigned value in the settings file.\\u001b[0m\\n\",\n      \"\\u001b[34m    will default to the value: 2\\u001b[0m\\n\",\n      \"\\u001b[36mGenerating an instance of WriteVariablesTime\\u001b[0m\\n\",\n      \"Variable delimiter has no assigned value in the settings file.\\u001b[0m\\n\",\n      \"\\u001b[34m    will default to the value:  \\u001b[0m\\n\",\n      \"Variable FoR_variables has no assigned value in the settings file.\\u001b[0m\\n\",\n      \"\\u001b[34m    will default to the value: ['']\\u001b[0m\\n\",\n      \"Variable FoR_number has no assigned value in the settings file.\\u001b[0m\\n\",\n      \"\\u001b[34m    will default to the value: [0]\\u001b[0m\\n\",\n      \"Variable aero_panels_variables has no assigned value in the settings file.\\u001b[0m\\n\",\n      \"\\u001b[34m    will default to the value: ['']\\u001b[0m\\n\",\n      \"Variable aero_panels_isurf has no assigned value in the settings file.\\u001b[0m\\n\",\n      \"\\u001b[34m    will default to the value: [0]\\u001b[0m\\n\",\n      \"Variable aero_panels_im has no assigned value in the settings file.\\u001b[0m\\n\",\n      \"\\u001b[34m    will default to the value: [0]\\u001b[0m\\n\",\n      \"Variable aero_panels_in has no assigned value in the settings file.\\u001b[0m\\n\",\n      \"\\u001b[34m    will default to the value: [0]\\u001b[0m\\n\",\n      \"Variable aero_nodes_variables has no assigned value in the settings file.\\u001b[0m\\n\",\n      \"\\u001b[34m    will default to the value: ['']\\u001b[0m\\n\",\n      \"Variable aero_nodes_isurf has no assigned value in the settings file.\\u001b[0m\\n\",\n      \"\\u001b[34m    will default to the value: [0]\\u001b[0m\\n\",\n      \"Variable aero_nodes_im has no assigned value in the settings file.\\u001b[0m\\n\",\n      \"\\u001b[34m    will default to the value: [0]\\u001b[0m\\n\",\n      \"Variable aero_nodes_in has no assigned value in the settings file.\\u001b[0m\\n\",\n      \"\\u001b[34m    will default to the value: [0]\\u001b[0m\\n\",\n      \"Variable cleanup_old_solution has no assigned value in the settings file.\\u001b[0m\\n\",\n      \"\\u001b[34m    will default to the value: False\\u001b[0m\\n\",\n      \"Variable vel_field_variables has no assigned value in the settings file.\\u001b[0m\\n\",\n      \"\\u001b[34m    will default to the value: []\\u001b[0m\\n\",\n      \"Variable vel_field_points has no assigned value in the settings file.\\u001b[0m\\n\",\n      \"\\u001b[34m    will default to the value: [0. 0. 0.]\\u001b[0m\\n\",\n      \"\\u001b[36mGenerating an instance of BeamPlot\\u001b[0m\\n\",\n      \"Variable include_FoR has no assigned value in the settings file.\\u001b[0m\\n\",\n      \"\\u001b[34m    will default to the value: False\\u001b[0m\\n\",\n      \"Variable include_applied_moments has no assigned value in the settings file.\\u001b[0m\\n\",\n      \"\\u001b[34m    will default to the value: True\\u001b[0m\\n\",\n      \"Variable name_prefix has no assigned value in the settings file.\\u001b[0m\\n\",\n      \"\\u001b[34m    will default to the value: \\u001b[0m\\n\",\n      \"Variable output_rbm has no assigned value in the settings file.\\u001b[0m\\n\",\n      \"\\u001b[34m    will default to the value: True\\u001b[0m\\n\",\n      \"\\u001b[36mGenerating an instance of AerogridPlot\\u001b[0m\\n\",\n      \"Variable include_forward_motion has no assigned value in the settings file.\\u001b[0m\\n\",\n      \"\\u001b[34m    will default to the value: False\\u001b[0m\\n\",\n      \"Variable include_unsteady_applied_forces has no assigned value in the settings file.\\u001b[0m\\n\",\n      \"\\u001b[34m    will default to the value: False\\u001b[0m\\n\",\n      \"Variable name_prefix has no assigned value in the settings file.\\u001b[0m\\n\",\n      \"\\u001b[34m    will default to the value: \\u001b[0m\\n\",\n      \"Variable dt has no assigned value in the settings file.\\u001b[0m\\n\",\n      \"\\u001b[34m    will default to the value: 0.0\\u001b[0m\\n\",\n      \"Variable include_velocities has no assigned value in the settings file.\\u001b[0m\\n\",\n      \"\\u001b[34m    will default to the value: False\\u001b[0m\\n\",\n      \"Variable include_incidence_angle has no assigned value in the settings file.\\u001b[0m\\n\",\n      \"\\u001b[34m    will default to the value: False\\u001b[0m\\n\",\n      \"Variable num_cores has no assigned value in the settings file.\\u001b[0m\\n\",\n      \"\\u001b[34m    will default to the value: 1\\u001b[0m\\n\",\n      \"Variable vortex_radius has no assigned value in the settings file.\\u001b[0m\\n\",\n      \"\\u001b[34m    will default to the value: 1e-06\\u001b[0m\\n\",\n      \"Variable stride has no assigned value in the settings file.\\u001b[0m\\n\",\n      \"\\u001b[34m    will default to the value: 1\\u001b[0m\\n\",\n      \"Variable save_wake has no assigned value in the settings file.\\u001b[0m\\n\",\n      \"\\u001b[34m    will default to the value: True\\u001b[0m\\n\",\n      \"\\u001b[0m\\n\",\n      \"\\u001b[0m\\n\",\n      \"\\u001b[0m\\n\",\n      \"|=======|========|======|==============|==============|==============|==============|==============|\\u001b[0m\\n\",\n      \"|  ts   |   t    | iter | struc ratio  |  iter time   | residual vel |  FoR_vel(x)  |  FoR_vel(z)  |\\u001b[0m\\n\",\n      \"|=======|========|======|==============|==============|==============|==============|==============|\\u001b[0m\\n\",\n      \"|   1   | 0.0006 |  5   |   0.968365   |  18.671949   |  -6.417211   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|   2   | 0.0013 |  4   |   0.971972   |  15.336584   |  -6.496227   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|   3   | 0.0019 |  3   |   0.969326   |  12.041152   |  -6.173354   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|   4   | 0.0025 |  3   |   0.968342   |  10.516750   |  -6.020512   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|   5   | 0.0031 |  4   |   0.955032   |   9.720251   |  -6.536090   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|   6   | 0.0037 |  4   |   0.966989   |  13.089750   |  -6.365510   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|   7   | 0.0044 |  4   |   0.963588   |  12.110149   |  -6.233103   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|   8   | 0.0050 |  4   |   0.951098   |   9.182460   |  -6.162708   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|   9   | 0.0056 |  4   |   0.979628   |  28.828536   |  -6.113240   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  10   | 0.0063 |  4   |   0.956612   |  13.303912   |  -6.082344   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  11   | 0.0069 |  4   |   0.966229   |  12.650505   |  -6.038075   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  12   | 0.0075 |  5   |   0.960982   |  14.281275   |  -6.727378   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  13   | 0.0081 |  5   |   0.956631   |  12.562050   |  -6.701112   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  14   | 0.0088 |  5   |   0.947390   |  10.019976   |  -6.665381   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  15   | 0.0094 |  5   |   0.954709   |  11.545903   |  -6.619206   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  16   | 0.0100 |  5   |   0.948316   |   9.931642   |  -6.570860   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  17   | 0.0106 |  5   |   0.952382   |  11.503413   |  -6.528343   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  18   | 0.0112 |  5   |   0.947785   |  10.348513   |  -6.489641   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  19   | 0.0119 |  5   |   0.948694   |   9.952890   |  -6.453494   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  20   | 0.0125 |  5   |   0.964102   |  15.367483   |  -6.426783   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  21   | 0.0131 |  5   |   0.950298   |  10.537648   |  -6.404302   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  22   | 0.0138 |  5   |   0.950145   |  10.997150   |  -6.381964   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  23   | 0.0144 |  5   |   0.951866   |  10.756376   |  -6.365094   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  24   | 0.0150 |  5   |   0.953387   |  11.333439   |  -6.348193   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  25   | 0.0156 |  5   |   0.949008   |  10.640736   |  -6.323539   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  26   | 0.0163 |  5   |   0.951558   |  11.234257   |  -6.293924   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  27   | 0.0169 |  5   |   0.953764   |  11.976087   |  -6.266339   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  28   | 0.0175 |  5   |   0.954230   |  12.160064   |  -6.244295   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  29   | 0.0181 |  5   |   0.955667   |  11.934807   |  -6.226476   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  30   | 0.0187 |  5   |   0.946544   |   9.848974   |  -6.210525   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  31   | 0.0194 |  5   |   0.958163   |  12.588759   |  -6.197849   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  32   | 0.0200 |  5   |   0.941142   |   9.263582   |  -6.187658   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  33   | 0.0206 |  5   |   0.946805   |  10.078831   |  -6.176206   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  34   | 0.0213 |  5   |   0.948141   |  10.518540   |  -6.164869   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  35   | 0.0219 |  5   |   0.952281   |  11.594154   |  -6.153254   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  36   | 0.0225 |  5   |   0.956436   |  12.668008   |  -6.138480   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  37   | 0.0231 |  5   |   0.962601   |  14.975047   |  -6.121525   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  38   | 0.0238 |  5   |   0.973890   |  25.366286   |  -6.108135   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  39   | 0.0244 |  5   |   0.949656   |  10.873095   |  -6.100178   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  40   | 0.0250 |  5   |   0.948873   |  11.715339   |  -6.094354   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  41   | 0.0256 |  5   |   0.949846   |  10.766982   |  -6.088927   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  42   | 0.0262 |  5   |   0.947597   |  10.630621   |  -6.083978   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  43   | 0.0269 |  5   |   0.951180   |  11.054296   |  -6.078006   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  44   | 0.0275 |  5   |   0.951628   |  10.999336   |  -6.071380   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  45   | 0.0281 |  5   |   0.965219   |  16.030360   |  -6.065627   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  46   | 0.0288 |  5   |   0.977969   |  27.407470   |  -6.059853   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  47   | 0.0294 |  5   |   0.973189   |  21.817333   |  -6.052922   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  48   | 0.0300 |  5   |   0.948717   |  11.354869   |  -6.045901   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  49   | 0.0306 |  5   |   0.948421   |  10.883957   |  -6.040864   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  50   | 0.0312 |  5   |   0.948296   |  10.736110   |  -6.040590   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  51   | 0.0319 |  5   |   0.948139   |  10.621232   |  -6.041367   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  52   | 0.0325 |  5   |   0.948025   |  10.336440   |  -6.038935   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  53   | 0.0331 |  5   |   0.952062   |  11.658173   |  -6.034811   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  54   | 0.0338 |  5   |   0.952953   |  11.996480   |  -6.029771   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  55   | 0.0344 |  5   |   0.952641   |  11.794019   |  -6.023840   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  56   | 0.0350 |  5   |   0.948103   |  10.625961   |  -6.019904   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  57   | 0.0356 |  5   |   0.950134   |  11.525078   |  -6.017249   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  58   | 0.0362 |  5   |   0.942222   |   9.724377   |  -6.013493   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  59   | 0.0369 |  5   |   0.945251   |  10.558316   |  -6.010749   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  60   | 0.0375 |  5   |   0.948057   |  10.545861   |  -6.010847   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  61   | 0.0381 |  5   |   0.950653   |  11.133913   |  -6.013553   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  62   | 0.0387 |  5   |   0.949715   |  11.242525   |  -6.017042   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  63   | 0.0394 |  5   |   0.949644   |  10.870169   |  -6.017983   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  64   | 0.0400 |  5   |   0.947384   |  10.770161   |  -6.016882   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  65   | 0.0406 |  5   |   0.951051   |  11.028067   |  -6.016366   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  66   | 0.0413 |  5   |   0.947521   |  10.962657   |  -6.016870   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  67   | 0.0419 |  5   |   0.953326   |  11.602128   |  -6.018436   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  68   | 0.0425 |  5   |   0.943913   |  10.217246   |  -6.021504   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  69   | 0.0431 |  5   |   0.950180   |  11.015258   |  -6.024162   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  70   | 0.0438 |  5   |   0.956848   |  12.476811   |  -6.025761   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  71   | 0.0444 |  5   |   0.949333   |  11.022746   |  -6.029208   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  72   | 0.0450 |  5   |   0.952842   |  10.957240   |  -6.034612   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  73   | 0.0456 |  5   |   0.950195   |  11.372289   |  -6.039117   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  74   | 0.0462 |  5   |   0.952230   |  10.951780   |  -6.041620   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  75   | 0.0469 |  5   |   0.944391   |  10.321632   |  -6.043629   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  76   | 0.0475 |  5   |   0.940703   |   9.038255   |  -6.046624   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  77   | 0.0481 |  5   |   0.951349   |  11.076794   |  -6.052081   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  78   | 0.0488 |  5   |   0.943967   |   9.884030   |  -6.059680   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  79   | 0.0494 |  5   |   0.945705   |  10.703932   |  -6.067778   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  80   | 0.0500 |  5   |   0.943330   |   9.678802   |  -6.075491   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  81   | 0.0506 |  5   |   0.954047   |  11.499293   |  -6.082424   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  82   | 0.0513 |  5   |   0.946896   |  10.192189   |  -6.089625   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  83   | 0.0519 |  5   |   0.943645   |   9.952958   |  -6.098219   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  84   | 0.0525 |  5   |   0.945091   |  10.095940   |  -6.105934   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  85   | 0.0531 |  5   |   0.947015   |  10.301849   |  -6.110879   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  86   | 0.0537 |  5   |   0.935800   |   8.870328   |  -6.115130   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  87   | 0.0544 |  5   |   0.947104   |  10.836437   |  -6.120945   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  88   | 0.0550 |  5   |   0.963095   |  15.823192   |  -6.127793   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  89   | 0.0556 |  5   |   0.947735   |  10.736601   |  -6.135927   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  90   | 0.0563 |  5   |   0.947219   |  10.730737   |  -6.144368   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  91   | 0.0569 |  5   |   0.948428   |  11.076037   |  -6.150790   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  92   | 0.0575 |  5   |   0.940665   |   9.837327   |  -6.155716   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  93   | 0.0581 |  5   |   0.948581   |  11.200799   |  -6.161582   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  94   | 0.0588 |  5   |   0.946228   |  10.552050   |  -6.168338   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  95   | 0.0594 |  5   |   0.948208   |  10.675161   |  -6.174927   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  96   | 0.0600 |  5   |   0.943809   |  10.275394   |  -6.180289   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  97   | 0.0606 |  5   |   0.935073   |   9.028701   |  -6.184616   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  98   | 0.0612 |  5   |   0.948258   |  10.438629   |  -6.190591   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  99   | 0.0619 |  5   |   0.954885   |  12.366372   |  -6.198655   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  100  | 0.0625 |  5   |   0.947114   |  10.622774   |  -6.206748   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  101  | 0.0631 |  5   |   0.950739   |  11.377920   |  -6.214272   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  102  | 0.0638 |  5   |   0.955202   |  12.591837   |  -6.220168   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  103  | 0.0644 |  5   |   0.945275   |  10.215581   |  -6.224393   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  104  | 0.0650 |  5   |   0.952762   |  11.989062   |  -6.229463   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  105  | 0.0656 |  5   |   0.952733   |  11.871830   |  -6.236478   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  106  | 0.0663 |  5   |   0.948673   |  10.807147   |  -6.243449   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  107  | 0.0669 |  5   |   0.930800   |   8.894847   |  -6.249473   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  108  | 0.0675 |  5   |   0.957262   |  13.341049   |  -6.255890   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  109  | 0.0681 |  5   |   0.947861   |  11.027717   |  -6.263542   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  110  | 0.0688 |  5   |   0.952574   |  11.537263   |  -6.272266   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  111  | 0.0694 |  5   |   0.947710   |  10.136458   |  -6.281527   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  112  | 0.0700 |  5   |   0.935899   |   9.226067   |  -6.289751   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  113  | 0.0706 |  5   |   0.942306   |  10.016803   |  -6.295951   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  114  | 0.0713 |  5   |   0.939406   |   9.518147   |  -6.302064   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  115  | 0.0719 |  5   |   0.943245   |  10.038173   |  -6.309255   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  116  | 0.0725 |  5   |   0.951977   |  11.464750   |  -6.318358   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  117  | 0.0731 |  5   |   0.945140   |  10.013828   |  -6.329243   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  118  | 0.0737 |  5   |   0.948454   |  10.736181   |  -6.338812   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  119  | 0.0744 |  5   |   0.938591   |   9.071753   |  -6.347747   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  120  | 0.0750 |  5   |   0.946253   |  10.567693   |  -6.359016   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  121  | 0.0756 |  5   |   0.947073   |  11.273658   |  -6.370755   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  122  | 0.0762 |  5   |   0.941092   |   9.599160   |  -6.381991   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  123  | 0.0769 |  5   |   0.944881   |  10.358563   |  -6.392966   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  124  | 0.0775 |  5   |   0.947911   |  10.805558   |  -6.401508   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  125  | 0.0781 |  5   |   0.945897   |  10.731285   |  -6.409650   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  126  | 0.0788 |  5   |   0.940708   |  10.767903   |  -6.420684   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  127  | 0.0794 |  5   |   0.940233   |   9.522662   |  -6.432840   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  128  | 0.0800 |  5   |   0.944515   |  10.353698   |  -6.444843   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  129  | 0.0806 |  5   |   0.949921   |  10.744679   |  -6.455002   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  130  | 0.0813 |  5   |   0.955518   |  13.083724   |  -6.462719   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  131  | 0.0819 |  5   |   0.943537   |  10.295544   |  -6.471294   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  132  | 0.0825 |  5   |   0.947005   |  10.478883   |  -6.481146   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  133  | 0.0831 |  5   |   0.950212   |  11.168756   |  -6.489653   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  134  | 0.0838 |  5   |   0.947648   |  11.245141   |  -6.496921   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  135  | 0.0844 |  5   |   0.952376   |  11.929442   |  -6.503753   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  136  | 0.0850 |  5   |   0.955622   |  13.096018   |  -6.511057   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  137  | 0.0856 |  5   |   0.940609   |   9.735925   |  -6.520895   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  138  | 0.0863 |  5   |   0.940370   |   9.500913   |  -6.533221   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  139  | 0.0869 |  5   |   0.944022   |  10.989595   |  -6.543976   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  140  | 0.0875 |  5   |   0.945349   |  10.576644   |  -6.550689   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  141  | 0.0881 |  5   |   0.942640   |   9.924819   |  -6.556179   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  142  | 0.0887 |  5   |   0.947886   |  11.171925   |  -6.562681   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  143  | 0.0894 |  5   |   0.953569   |  13.078407   |  -6.569487   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  144  | 0.0900 |  5   |   0.935608   |   8.818526   |  -6.576170   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  145  | 0.0906 |  5   |   0.942645   |  10.197815   |  -6.580802   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  146  | 0.0912 |  5   |   0.949960   |  11.496152   |  -6.584265   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  147  | 0.0919 |  5   |   0.945986   |  11.480662   |  -6.589730   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  148  | 0.0925 |  5   |   0.937520   |  10.207823   |  -6.596222   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  149  | 0.0931 |  5   |   0.943962   |  10.327430   |  -6.602564   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  150  | 0.0938 |  5   |   0.960532   |  14.213603   |  -6.607404   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  151  | 0.0944 |  5   |   0.956264   |  14.017086   |  -6.608611   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  152  | 0.0950 |  5   |   0.937707   |   9.309265   |  -6.610140   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  153  | 0.0956 |  5   |   0.945661   |  11.116661   |  -6.615885   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  154  | 0.0963 |  5   |   0.947168   |  10.966585   |  -6.623153   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  155  | 0.0969 |  5   |   0.947456   |  11.300364   |  -6.630447   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  156  | 0.0975 |  5   |   0.943753   |  10.825258   |  -6.637990   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  157  | 0.0981 |  5   |   0.963825   |  15.814815   |  -6.645485   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  158  | 0.0988 |  5   |   0.945822   |  11.052504   |  -6.653934   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  159  | 0.0994 |  5   |   0.948607   |  11.214047   |  -6.662756   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  160  | 0.1000 |  5   |   0.946378   |  10.745310   |  -6.670552   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  161  | 0.1006 |  5   |   0.947401   |  11.221507   |  -6.676330   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  162  | 0.1013 |  5   |   0.944233   |  10.110627   |  -6.680679   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  163  | 0.1019 |  5   |   0.947101   |  11.862333   |  -6.686866   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  164  | 0.1025 |  5   |   0.967109   |  18.147130   |  -6.696421   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  165  | 0.1031 |  5   |   0.940993   |  10.605252   |  -6.707483   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  166  | 0.1038 |  5   |   0.955383   |  13.030459   |  -6.716984   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  167  | 0.1044 |  5   |   0.948422   |  11.665669   |  -6.724584   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  168  | 0.1050 |  4   |   0.955500   |  11.664639   |  -6.005053   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  169  | 0.1056 |  4   |   0.951802   |  10.576800   |  -6.013451   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  170  | 0.1062 |  4   |   0.951200   |   9.567037   |  -6.021257   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  171  | 0.1069 |  4   |   0.968419   |  14.355263   |  -6.029494   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  172  | 0.1075 |  4   |   0.966190   |  13.662715   |  -6.037786   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  173  | 0.1081 |  4   |   0.956161   |  12.371329   |  -6.045909   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  174  | 0.1087 |  4   |   0.951665   |  11.085254   |  -6.056996   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  175  | 0.1094 |  4   |   0.953042   |  10.715927   |  -6.069746   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  176  | 0.1100 |  4   |   0.958061   |  11.712813   |  -6.079731   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  177  | 0.1106 |  4   |   0.960356   |  12.695643   |  -6.085509   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  178  | 0.1113 |  4   |   0.954514   |  11.793410   |  -6.088583   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  179  | 0.1119 |  4   |   0.950668   |  10.003142   |  -6.091305   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  180  | 0.1125 |  4   |   0.946102   |   9.886626   |  -6.093073   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  181  | 0.1131 |  4   |   0.949649   |  10.301983   |  -6.093995   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  182  | 0.1138 |  4   |   0.953119   |  10.652363   |  -6.095412   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  183  | 0.1144 |  4   |   0.951766   |  10.832586   |  -6.097424   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  184  | 0.1150 |  4   |   0.955132   |  10.462639   |  -6.097812   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  185  | 0.1156 |  4   |   0.960911   |  13.618529   |  -6.096289   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  186  | 0.1163 |  4   |   0.956462   |  11.546490   |  -6.093168   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  187  | 0.1169 |  4   |   0.962654   |  12.813508   |  -6.088310   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  188  | 0.1175 |  4   |   0.968176   |  18.430304   |  -6.081391   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  189  | 0.1181 |  4   |   0.946358   |   9.833844   |  -6.074350   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  190  | 0.1188 |  4   |   0.947277   |   9.157477   |  -6.068791   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  191  | 0.1194 |  4   |   0.968489   |  15.667897   |  -6.062826   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  192  | 0.1200 |  4   |   0.950315   |   9.516710   |  -6.057464   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  193  | 0.1206 |  4   |   0.940345   |   8.711639   |  -6.053352   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  194  | 0.1212 |  4   |   0.950416   |  10.270131   |  -6.047761   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  195  | 0.1219 |  4   |   0.949720   |   9.165432   |  -6.038768   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  196  | 0.1225 |  4   |   0.943330   |   8.940929   |  -6.027309   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  197  | 0.1231 |  4   |   0.945974   |   9.224462   |  -6.017552   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  198  | 0.1237 |  4   |   0.938437   |   7.985228   |  -6.009420   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  199  | 0.1244 |  4   |   0.949442   |   9.156467   |  -6.001601   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  200  | 0.1250 |  5   |   0.948617   |  11.723775   |  -6.730831   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  201  | 0.1256 |  5   |   0.936233   |   9.874182   |  -6.724077   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  202  | 0.1263 |  5   |   0.948015   |  11.857640   |  -6.717044   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  203  | 0.1269 |  5   |   0.937598   |  10.443674   |  -6.710956   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  204  | 0.1275 |  5   |   0.950856   |  12.267857   |  -6.704661   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  205  | 0.1281 |  5   |   0.949025   |  11.520669   |  -6.696225   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  206  | 0.1288 |  5   |   0.952569   |  12.509402   |  -6.686150   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  207  | 0.1294 |  5   |   0.945493   |  11.217238   |  -6.675868   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  208  | 0.1300 |  5   |   0.943550   |  10.795355   |  -6.668776   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  209  | 0.1306 |  5   |   0.963850   |  17.410402   |  -6.662688   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  210  | 0.1313 |  5   |   0.964352   |  17.017205   |  -6.655037   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  211  | 0.1319 |  5   |   0.944406   |  10.911295   |  -6.647090   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  212  | 0.1325 |  5   |   0.941326   |  10.069910   |  -6.637080   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  213  | 0.1331 |  5   |   0.949649   |  11.424372   |  -6.628286   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  214  | 0.1338 |  5   |   0.948237   |  11.950824   |  -6.618372   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  215  | 0.1344 |  5   |   0.933445   |   9.096234   |  -6.607924   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  216  | 0.1350 |  5   |   0.954119   |  12.891909   |  -6.600956   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  217  | 0.1356 |  5   |   0.949010   |  11.880124   |  -6.591819   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  218  | 0.1363 |  5   |   0.946764   |  11.708015   |  -6.578566   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  219  | 0.1369 |  5   |   0.939680   |  10.037507   |  -6.568256   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  220  | 0.1375 |  5   |   0.949051   |  10.831389   |  -6.560834   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  221  | 0.1381 |  5   |   0.951881   |  12.069925   |  -6.550114   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  222  | 0.1388 |  5   |   0.946708   |  11.655207   |  -6.546699   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  223  | 0.1394 |  5   |   0.945491   |  11.092597   |  -6.535719   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  224  | 0.1400 |  5   |   0.942582   |  10.299325   |  -6.518312   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  225  | 0.1406 |  5   |   0.943477   |  11.023694   |  -6.502154   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  226  | 0.1413 |  5   |   0.941513   |  10.661141   |  -6.487594   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  227  | 0.1419 |  5   |   0.944854   |  11.009248   |  -6.471501   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  228  | 0.1425 |  5   |   0.947037   |  11.111865   |  -6.455693   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  229  | 0.1431 |  5   |   0.943006   |  11.418393   |  -6.445663   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  230  | 0.1438 |  5   |   0.937785   |  10.281053   |  -6.436643   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  231  | 0.1444 |  5   |   0.953180   |  13.515919   |  -6.423862   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  232  | 0.1450 |  5   |   0.942807   |  10.828190   |  -6.409260   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  233  | 0.1456 |  5   |   0.947758   |  12.155366   |  -6.416705   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  234  | 0.1462 |  5   |   0.947850   |  11.147242   |  -6.389836   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  235  | 0.1469 |  5   |   0.949502   |  11.667867   |  -6.370341   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  236  | 0.1475 |  5   |   0.941159   |  10.366536   |  -6.357640   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  237  | 0.1481 |  5   |   0.941645   |  11.566625   |  -6.343108   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  238  | 0.1487 |  5   |   0.943970   |  10.571422   |  -6.329128   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  239  | 0.1494 |  5   |   0.948570   |  12.000235   |  -6.315768   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  240  | 0.1500 |  5   |   0.956057   |  14.176120   |  -6.302302   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  241  | 0.1506 |  5   |   0.941344   |  10.372841   |  -6.286996   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  242  | 0.1512 |  5   |   0.944239   |  11.163841   |  -6.271065   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  243  | 0.1519 |  5   |   0.941355   |  10.750759   |  -6.256601   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  244  | 0.1525 |  5   |   0.946149   |  11.848520   |  -6.242143   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  245  | 0.1531 |  5   |   0.953282   |  13.054623   |  -6.224536   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  246  | 0.1537 |  5   |   0.939600   |  10.533198   |  -6.204649   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  247  | 0.1544 |  5   |   0.950865   |  12.636092   |  -6.191911   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  248  | 0.1550 |  5   |   0.939138   |  10.755056   |  -6.177627   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  249  | 0.1556 |  5   |   0.941024   |  11.774469   |  -6.163797   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  250  | 0.1562 |  5   |   0.945149   |  11.603998   |  -6.149284   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  251  | 0.1569 |  5   |   0.944137   |  11.027009   |  -6.157241   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  252  | 0.1575 |  5   |   0.945240   |  11.557927   |  -6.124949   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  253  | 0.1581 |  5   |   0.946122   |  11.934396   |  -6.108130   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  254  | 0.1588 |  5   |   0.935588   |  11.200220   |  -6.093652   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  255  | 0.1594 |  5   |   0.948408   |  11.680672   |  -6.078210   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  256  | 0.1600 |  5   |   0.943591   |  10.678600   |  -6.061033   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  257  | 0.1606 |  5   |   0.945829   |  11.584085   |  -6.042628   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  258  | 0.1613 |  5   |   0.947088   |  11.800646   |  -6.025314   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  259  | 0.1619 |  5   |   0.944964   |  11.772600   |  -6.010586   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  260  | 0.1625 |  6   |   0.945209   |  13.291276   |  -6.734883   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  261  | 0.1631 |  6   |   0.943456   |  12.680267   |  -6.718964   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  262  | 0.1638 |  6   |   0.944619   |  13.215398   |  -6.702060   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  263  | 0.1644 |  6   |   0.947007   |  14.169829   |  -6.686353   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  264  | 0.1650 |  6   |   0.938508   |  12.289283   |  -6.673467   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  265  | 0.1656 |  6   |   0.951268   |  14.610949   |  -6.660933   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  266  | 0.1663 |  6   |   0.935965   |  11.988576   |  -6.647986   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  267  | 0.1669 |  6   |   0.946580   |  14.197086   |  -6.636073   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  268  | 0.1675 |  6   |   0.942800   |  12.822154   |  -6.626319   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  269  | 0.1681 |  6   |   0.947284   |  13.338966   |  -6.620655   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  270  | 0.1688 |  6   |   0.939962   |  12.287910   |  -6.617902   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  271  | 0.1694 |  6   |   0.949752   |  16.501225   |  -6.615042   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  272  | 0.1700 |  6   |   0.939267   |  12.324404   |  -6.613633   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  273  | 0.1706 |  6   |   0.944347   |  13.207239   |  -6.615915   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  274  | 0.1713 |  6   |   0.942063   |  12.524115   |  -6.624740   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  275  | 0.1719 |  6   |   0.945643   |  13.180858   |  -6.632674   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  276  | 0.1725 |  6   |   0.936511   |  12.016970   |  -6.639310   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  277  | 0.1731 |  6   |   0.947054   |  13.827464   |  -6.647491   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  278  | 0.1738 |  6   |   0.935859   |  11.941455   |  -6.659334   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  279  | 0.1744 |  6   |   0.939836   |  12.367750   |  -6.673970   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  280  | 0.1750 |  6   |   0.936526   |  12.331560   |  -6.678839   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  281  | 0.1756 |  6   |   0.938118   |  12.166943   |  -6.693248   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  282  | 0.1762 |  6   |   0.935611   |  11.910315   |  -6.709670   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  283  | 0.1769 |  6   |   0.944449   |  13.326162   |  -6.733336   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  284  | 0.1775 |  5   |   0.939992   |  11.053350   |  -6.012363   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  285  | 0.1781 |  5   |   0.948281   |  12.083963   |  -6.030102   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  286  | 0.1787 |  5   |   0.948533   |  11.727205   |  -6.047338   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  287  | 0.1794 |  5   |   0.939986   |  10.345996   |  -6.062876   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  288  | 0.1800 |  5   |   0.945252   |  11.362258   |  -6.079639   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  289  | 0.1806 |  5   |   0.947508   |  12.199549   |  -6.097383   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  290  | 0.1812 |  5   |   0.933631   |   9.339983   |  -6.115169   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  291  | 0.1819 |  5   |   0.940224   |  10.936754   |  -6.132664   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  292  | 0.1825 |  5   |   0.939724   |  10.449330   |  -6.147923   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  293  | 0.1831 |  5   |   0.948690   |  12.151484   |  -6.163659   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  294  | 0.1837 |  5   |   0.942595   |  11.039602   |  -6.181324   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  295  | 0.1844 |  5   |   0.945059   |  11.630183   |  -6.198729   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  296  | 0.1850 |  5   |   0.945800   |  12.725906   |  -6.215272   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  297  | 0.1856 |  5   |   0.942269   |  10.736765   |  -6.230292   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  298  | 0.1862 |  5   |   0.942436   |  11.227497   |  -6.244567   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  299  | 0.1869 |  5   |   0.939725   |  10.225151   |  -6.260472   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  300  | 0.1875 |  5   |   0.944196   |  11.060303   |  -6.276916   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  301  | 0.1881 |  5   |   0.960094   |  15.880141   |  -6.291941   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  302  | 0.1888 |  5   |   0.948014   |  12.149703   |  -6.305562   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  303  | 0.1894 |  5   |   0.941994   |  10.651260   |  -6.318965   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  304  | 0.1900 |  5   |   0.950609   |  12.495602   |  -6.333482   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  305  | 0.1906 |  5   |   0.940519   |  10.488050   |  -6.348189   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  306  | 0.1913 |  5   |   0.947913   |  12.691566   |  -6.361913   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  307  | 0.1919 |  5   |   0.942720   |  10.632595   |  -6.374253   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  308  | 0.1925 |  5   |   0.956283   |  14.595177   |  -6.385687   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  309  | 0.1931 |  5   |   0.938529   |   9.986877   |  -6.399126   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  310  | 0.1938 |  5   |   0.941697   |  11.624213   |  -6.413159   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  311  | 0.1944 |  5   |   0.947358   |  11.831380   |  -6.425737   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  312  | 0.1950 |  5   |   0.940657   |  10.664760   |  -6.437914   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  313  | 0.1956 |  5   |   0.945992   |  11.745995   |  -6.449198   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  314  | 0.1963 |  5   |   0.945434   |  11.700196   |  -6.461378   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  315  | 0.1969 |  5   |   0.952461   |  13.212226   |  -6.475399   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  316  | 0.1975 |  5   |   0.946748   |  12.410715   |  -6.487818   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  317  | 0.1981 |  5   |   0.942489   |  11.260109   |  -6.498905   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  318  | 0.1988 |  5   |   0.954916   |  13.542801   |  -6.510605   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  319  | 0.1994 |  5   |   0.951023   |  13.047720   |  -6.522468   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  320  | 0.2000 |  5   |   0.941290   |  10.351259   |  -6.535653   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  321  | 0.2006 |  5   |   0.949801   |  12.561128   |  -6.548605   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  322  | 0.2013 |  5   |   0.933351   |   9.742402   |  -6.559248   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  323  | 0.2019 |  5   |   0.945824   |  11.669179   |  -6.570035   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  324  | 0.2025 |  5   |   0.940618   |  11.432235   |  -6.581942   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  325  | 0.2031 |  5   |   0.943817   |  11.426316   |  -6.594593   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  326  | 0.2038 |  5   |   0.953734   |  13.505159   |  -6.606923   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  327  | 0.2044 |  5   |   0.931261   |  10.402201   |  -6.617755   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  328  | 0.2050 |  5   |   0.949553   |  12.230616   |  -6.628032   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  329  | 0.2056 |  5   |   0.943117   |  11.498853   |  -6.638920   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  330  | 0.2063 |  5   |   0.943764   |  11.763657   |  -6.651286   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  331  | 0.2069 |  5   |   0.943443   |  11.352340   |  -6.663433   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  332  | 0.2075 |  5   |   0.939813   |  10.792876   |  -6.673535   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  333  | 0.2081 |  5   |   0.939146   |  10.863336   |  -6.683450   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  334  | 0.2087 |  5   |   0.942934   |  11.064193   |  -6.694206   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  335  | 0.2094 |  5   |   0.947165   |  11.997910   |  -6.705246   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  336  | 0.2100 |  5   |   0.951135   |  12.933304   |  -6.716584   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  337  | 0.2106 |  5   |   0.946188   |  11.651776   |  -6.725582   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  338  | 0.2112 |  4   |   0.947764   |   9.462267   |  -6.006966   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  339  | 0.2119 |  4   |   0.945007   |   9.856144   |  -6.016166   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  340  | 0.2125 |  4   |   0.952493   |  11.507456   |  -6.025795   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  341  | 0.2131 |  4   |   0.950982   |  10.546667   |  -6.035361   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  342  | 0.2137 |  4   |   0.952015   |  10.293428   |  -6.044313   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  343  | 0.2144 |  4   |   0.947798   |  10.362436   |  -6.050845   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  344  | 0.2150 |  4   |   0.947564   |   9.734232   |  -6.057454   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  345  | 0.2156 |  4   |   0.942505   |   9.236773   |  -6.065222   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  346  | 0.2162 |  4   |   0.947544   |   9.717363   |  -6.072005   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  347  | 0.2169 |  4   |   0.938501   |   8.694150   |  -6.077386   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  348  | 0.2175 |  4   |   0.949458   |  10.271883   |  -6.081917   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  349  | 0.2181 |  4   |   0.938702   |   8.538571   |  -6.086876   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  350  | 0.2188 |  4   |   0.939707   |   8.995470   |  -6.092985   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  351  | 0.2194 |  4   |   0.946523   |   9.639948   |  -6.099074   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  352  | 0.2200 |  4   |   0.935855   |   8.213983   |  -6.104246   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  353  | 0.2206 |  4   |   0.944748   |   9.607103   |  -6.107678   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  354  | 0.2213 |  4   |   0.956262   |  12.531544   |  -6.110114   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  355  | 0.2219 |  4   |   0.942209   |   9.275017   |  -6.112920   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  356  | 0.2225 |  4   |   0.946568   |   9.987548   |  -6.115915   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  357  | 0.2231 |  4   |   0.935081   |   8.506918   |  -6.118795   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  358  | 0.2238 |  4   |   0.940927   |   8.792735   |  -6.120967   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  359  | 0.2244 |  4   |   0.950028   |  11.037147   |  -6.122486   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  360  | 0.2250 |  4   |   0.941703   |  10.319008   |  -6.124768   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  361  | 0.2256 |  4   |   0.944156   |   9.300880   |  -6.126662   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  362  | 0.2263 |  4   |   0.949011   |  10.375520   |  -6.126332   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  363  | 0.2269 |  4   |   0.942776   |   9.523808   |  -6.124668   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  364  | 0.2275 |  4   |   0.940965   |   9.249205   |  -6.121803   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  365  | 0.2281 |  4   |   0.943005   |   9.560917   |  -6.118109   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  366  | 0.2288 |  4   |   0.942491   |   9.377592   |  -6.114540   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  367  | 0.2294 |  4   |   0.966386   |  15.220141   |  -6.110829   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  368  | 0.2300 |  4   |   0.968380   |  16.586067   |  -6.106324   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  369  | 0.2306 |  4   |   0.952023   |  11.253964   |  -6.100741   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  370  | 0.2313 |  4   |   0.950157   |  10.531796   |  -6.094886   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  371  | 0.2319 |  4   |   0.950168   |  10.427808   |  -6.088197   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  372  | 0.2325 |  4   |   0.936196   |   8.918983   |  -6.080290   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  373  | 0.2331 |  4   |   0.942862   |   9.217407   |  -6.071418   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  374  | 0.2338 |  4   |   0.931575   |   8.374174   |  -6.062450   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  375  | 0.2344 |  4   |   0.943912   |   9.646384   |  -6.054102   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  376  | 0.2350 |  4   |   0.952382   |  10.994409   |  -6.045824   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  377  | 0.2356 |  4   |   0.953536   |  10.789837   |  -6.037022   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  378  | 0.2363 |  4   |   0.934100   |   8.654277   |  -6.028280   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  379  | 0.2369 |  4   |   0.942988   |   9.373151   |  -6.019596   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  380  | 0.2375 |  4   |   0.944104   |   9.815691   |  -6.010129   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  381  | 0.2381 |  4   |   0.937398   |   8.652296   |  -6.000383   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  382  | 0.2388 |  5   |   0.938554   |  10.822313   |  -6.725142   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  383  | 0.2394 |  5   |   0.947037   |  11.900135   |  -6.714875   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  384  | 0.2400 |  5   |   0.941750   |  11.175656   |  -6.704971   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  385  | 0.2406 |  5   |   0.945792   |  12.536697   |  -6.695529   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  386  | 0.2412 |  5   |   0.939800   |  11.015844   |  -6.686894   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  387  | 0.2419 |  5   |   0.935986   |  10.217669   |  -6.678073   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  388  | 0.2425 |  5   |   0.943653   |  12.185779   |  -6.668896   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  389  | 0.2431 |  5   |   0.951555   |  13.377180   |  -6.660090   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  390  | 0.2437 |  5   |   0.943060   |  12.209697   |  -6.651496   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  391  | 0.2444 |  5   |   0.946853   |  12.046725   |  -6.642875   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  392  | 0.2450 |  5   |   0.935869   |  10.530684   |  -6.634471   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  393  | 0.2456 |  5   |   0.944948   |  11.274202   |  -6.626020   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  394  | 0.2462 |  5   |   0.939311   |  10.513262   |  -6.617542   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  395  | 0.2469 |  5   |   0.940147   |  11.755655   |  -6.609586   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  396  | 0.2475 |  5   |   0.946002   |  12.170166   |  -6.601957   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  397  | 0.2481 |  5   |   0.951292   |  13.279384   |  -6.594634   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  398  | 0.2487 |  5   |   0.940548   |  10.914453   |  -6.586754   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  399  | 0.2494 |  5   |   0.944334   |  12.162813   |  -6.577747   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  400  | 0.2500 |  5   |   0.944412   |  11.971015   |  -6.567671   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  401  | 0.2506 |  5   |   0.942391   |  11.417440   |  -6.556234   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  402  | 0.2513 |  5   |   0.946196   |  11.651955   |  -6.544422   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  403  | 0.2519 |  5   |   0.954220   |  13.544177   |  -6.532738   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  404  | 0.2525 |  5   |   0.942893   |  11.522388   |  -6.520930   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  405  | 0.2531 |  5   |   0.937732   |  11.174606   |  -6.508777   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  406  | 0.2538 |  5   |   0.942429   |  11.498338   |  -6.496583   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  407  | 0.2544 |  5   |   0.951117   |  13.381841   |  -6.484564   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  408  | 0.2550 |  5   |   0.946943   |  11.972833   |  -6.472461   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  409  | 0.2556 |  5   |   0.939902   |  10.688227   |  -6.459836   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  410  | 0.2562 |  5   |   0.941495   |  11.588936   |  -6.446709   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  411  | 0.2569 |  5   |   0.940684   |  11.439794   |  -6.433787   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  412  | 0.2575 |  5   |   0.940707   |  11.230869   |  -6.420827   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  413  | 0.2581 |  5   |   0.943504   |  11.691810   |  -6.407676   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  414  | 0.2587 |  5   |   0.946487   |  12.529424   |  -6.394133   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  415  | 0.2594 |  5   |   0.946490   |  12.476834   |  -6.380069   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  416  | 0.2600 |  5   |   0.940115   |  11.243180   |  -6.365979   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  417  | 0.2606 |  5   |   0.946679   |  12.310042   |  -6.351862   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  418  | 0.2612 |  5   |   0.930529   |   9.259821   |  -6.337979   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  419  | 0.2619 |  5   |   0.944208   |  11.701038   |  -6.324252   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  420  | 0.2625 |  5   |   0.943378   |  11.615270   |  -6.310184   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  421  | 0.2631 |  5   |   0.948905   |  12.821126   |  -6.295848   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  422  | 0.2637 |  5   |   0.956700   |  14.825340   |  -6.281795   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  423  | 0.2644 |  5   |   0.948575   |  13.258096   |  -6.268152   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  424  | 0.2650 |  5   |   0.953930   |  14.677462   |  -6.254451   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  425  | 0.2656 |  5   |   0.959606   |  20.267950   |  -6.240666   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  426  | 0.2662 |  5   |   0.946560   |  13.043301   |  -6.226753   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  427  | 0.2669 |  5   |   0.946216   |  26.652811   |  -6.213063   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  428  | 0.2675 |  5   |   0.939458   |  11.337829   |  -6.199728   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  429  | 0.2681 |  5   |   0.944511   |  12.469610   |  -6.186771   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  430  | 0.2687 |  5   |   0.951583   |  13.959556   |  -6.173960   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  431  | 0.2694 |  5   |   0.947895   |  12.948082   |  -6.161021   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  432  | 0.2700 |  5   |   0.940363   |  11.396358   |  -6.148138   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  433  | 0.2706 |  5   |   0.940611   |  11.959174   |  -6.135531   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  434  | 0.2712 |  5   |   0.944905   |  11.612634   |  -6.123427   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  435  | 0.2719 |  5   |   0.931596   |  10.630004   |  -6.111485   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  436  | 0.2725 |  5   |   0.941282   |  11.077741   |  -6.099515   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  437  | 0.2731 |  5   |   0.944526   |  11.820778   |  -6.087707   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  438  | 0.2737 |  5   |   0.945823   |  11.672671   |  -6.076067   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  439  | 0.2744 |  5   |   0.947116   |  12.356394   |  -6.064688   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  440  | 0.2750 |  5   |   0.946607   |  11.309584   |  -6.053461   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  441  | 0.2756 |  5   |   0.940612   |  10.561857   |  -6.042264   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  442  | 0.2762 |  5   |   0.944981   |  11.875639   |  -6.030655   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  443  | 0.2769 |  5   |   0.938942   |  10.323446   |  -6.018751   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  444  | 0.2775 |  5   |   0.944209   |  11.620808   |  -6.006922   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  445  | 0.2781 |  6   |   0.948086   |  14.365045   |  -6.736619   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  446  | 0.2787 |  6   |   0.941974   |  12.894964   |  -6.724916   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  447  | 0.2794 |  6   |   0.941747   |  12.867233   |  -6.712885   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  448  | 0.2800 |  6   |   0.939683   |  12.638412   |  -6.700640   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  449  | 0.2806 |  6   |   0.937655   |  12.234413   |  -6.688255   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  450  | 0.2812 |  6   |   0.943827   |  13.398312   |  -6.676011   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  451  | 0.2819 |  6   |   0.948795   |  14.855482   |  -6.663571   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  452  | 0.2825 |  6   |   0.937684   |  12.584784   |  -6.650797   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  453  | 0.2831 |  6   |   0.940853   |  12.808068   |  -6.637730   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  454  | 0.2838 |  6   |   0.949003   |  15.933166   |  -6.624188   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  455  | 0.2844 |  6   |   0.943138   |  14.585177   |  -6.610740   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  456  | 0.2850 |  6   |   0.975023   |  45.558647   |  -6.597484   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  457  | 0.2856 |  6   |   0.945492   |  12.665898   |  -6.583956   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  458  | 0.2863 |  6   |   0.943885   |  12.642572   |  -6.570163   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  459  | 0.2869 |  6   |   0.946598   |  14.066256   |  -6.556328   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  460  | 0.2875 |  6   |   0.945733   |  13.002777   |  -6.542348   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  461  | 0.2881 |  6   |   0.944734   |  13.666282   |  -6.528596   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  462  | 0.2888 |  6   |   0.961025   |  19.318107   |  -6.515143   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  463  | 0.2894 |  6   |   0.960909   |  17.956889   |  -6.501700   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  464  | 0.2900 |  6   |   0.962195   |  19.095729   |  -6.488667   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  465  | 0.2906 |  6   |   0.955146   |  18.395397   |  -6.475893   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  466  | 0.2913 |  6   |   0.932831   |  10.788197   |  -6.463861   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  467  | 0.2919 |  6   |   0.923409   |   9.725337   |  -6.452981   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  468  | 0.2925 |  6   |   0.939919   |  11.987191   |  -6.442848   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  469  | 0.2931 |  6   |   0.935204   |  11.246918   |  -6.433444   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  470  | 0.2938 |  6   |   0.950340   |  14.473156   |  -6.425044   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  471  | 0.2944 |  6   |   0.941014   |  13.263558   |  -6.417914   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  472  | 0.2950 |  6   |   0.951109   |  15.029684   |  -6.412338   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  473  | 0.2956 |  6   |   0.952923   |  15.108398   |  -6.408441   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  474  | 0.2963 |  6   |   0.933879   |  11.287061   |  -6.406075   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  475  | 0.2969 |  6   |   0.940943   |  13.381000   |  -6.405447   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  476  | 0.2975 |  6   |   0.933473   |  10.651840   |  -6.406601   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  477  | 0.2981 |  6   |   0.933221   |  11.707809   |  -6.409774   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  478  | 0.2988 |  6   |   0.931398   |  12.543991   |  -6.415210   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  479  | 0.2994 |  6   |   0.931353   |  10.779868   |  -6.422252   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  480  | 0.3000 |  6   |   0.959892   |  17.280849   |  -6.430833   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  481  | 0.3006 |  6   |   0.953455   |  17.051079   |  -6.440865   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  482  | 0.3013 |  6   |   0.929366   |   9.798513   |  -6.452285   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  483  | 0.3019 |  6   |   0.915877   |   9.415046   |  -6.465101   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  484  | 0.3025 |  6   |   0.946327   |  13.611439   |  -6.479036   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  485  | 0.3031 |  6   |   0.929681   |  10.096231   |  -6.493792   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  486  | 0.3038 |  6   |   0.942053   |  12.171144   |  -6.509114   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  487  | 0.3044 |  6   |   0.941548   |  11.788646   |  -6.524777   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  488  | 0.3050 |  6   |   0.928641   |  10.165608   |  -6.540846   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  489  | 0.3056 |  6   |   0.926683   |  10.096948   |  -6.557527   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  490  | 0.3063 |  6   |   0.943579   |  13.089129   |  -6.574203   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  491  | 0.3069 |  6   |   0.933035   |  11.317091   |  -6.590579   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  492  | 0.3075 |  6   |   0.933329   |  10.826166   |  -6.606798   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  493  | 0.3081 |  6   |   0.925417   |   9.954762   |  -6.622960   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  494  | 0.3088 |  6   |   0.934412   |  10.903793   |  -6.639268   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  495  | 0.3094 |  6   |   0.936710   |  10.941266   |  -6.655432   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  496  | 0.3100 |  6   |   0.939284   |  11.306272   |  -6.671282   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  497  | 0.3106 |  6   |   0.934598   |  11.031119   |  -6.686646   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  498  | 0.3113 |  6   |   0.926747   |  10.244288   |  -6.701629   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  499  | 0.3119 |  6   |   0.936242   |  11.094012   |  -6.716416   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  500  | 0.3125 |  6   |   0.927101   |  10.435871   |  -6.731094   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  501  | 0.3131 |  5   |   0.925367   |   7.898205   |  -6.003962   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  502  | 0.3138 |  5   |   0.930463   |   8.841769   |  -6.017855   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  503  | 0.3144 |  5   |   0.935369   |   9.849760   |  -6.031653   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  504  | 0.3150 |  5   |   0.927636   |   8.436575   |  -6.045529   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  505  | 0.3156 |  5   |   0.931649   |   8.961717   |  -6.059573   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  506  | 0.3163 |  5   |   0.933398   |   9.575869   |  -6.073762   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  507  | 0.3169 |  5   |   0.934445   |   9.244844   |  -6.088188   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  508  | 0.3175 |  5   |   0.924025   |   7.798754   |  -6.102694   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  509  | 0.3181 |  5   |   0.940258   |  10.032370   |  -6.117317   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  510  | 0.3188 |  5   |   0.932599   |   9.222431   |  -6.132483   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  511  | 0.3194 |  5   |   0.934663   |   9.527827   |  -6.148232   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  512  | 0.3200 |  5   |   0.933843   |   8.860781   |  -6.164623   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  513  | 0.3206 |  5   |   0.932188   |   9.639876   |  -6.181155   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  514  | 0.3212 |  5   |   0.931656   |   9.692169   |  -6.197924   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  515  | 0.3219 |  5   |   0.927283   |   8.518492   |  -6.215445   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  516  | 0.3225 |  5   |   0.944497   |  10.796695   |  -6.233601   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  517  | 0.3231 |  5   |   0.943116   |  10.604323   |  -6.252496   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  518  | 0.3237 |  5   |   0.937520   |   9.753980   |  -6.271885   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  519  | 0.3244 |  5   |   0.926112   |   8.010724   |  -6.291855   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  520  | 0.3250 |  5   |   0.933361   |   9.099026   |  -6.312470   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  521  | 0.3256 |  5   |   0.936647   |   9.274324   |  -6.334090   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  522  | 0.3262 |  5   |   0.934850   |   9.366708   |  -6.356764   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  523  | 0.3269 |  5   |   0.934609   |   9.331188   |  -6.380315   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  524  | 0.3275 |  5   |   0.938180   |   9.845226   |  -6.404181   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  525  | 0.3281 |  5   |   0.925627   |   8.063320   |  -6.428499   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  526  | 0.3287 |  5   |   0.925067   |   7.981261   |  -6.453779   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  527  | 0.3294 |  5   |   0.933576   |   9.620721   |  -6.479463   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  528  | 0.3300 |  5   |   0.931757   |   8.652095   |  -6.506077   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  529  | 0.3306 |  5   |   0.926375   |   8.612870   |  -6.533230   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  530  | 0.3312 |  5   |   0.931660   |   8.723508   |  -6.560532   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  531  | 0.3319 |  5   |   0.922246   |   7.936984   |  -6.588388   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  532  | 0.3325 |  5   |   0.937330   |   9.551329   |  -6.616327   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  533  | 0.3331 |  5   |   0.941238   |  10.138527   |  -6.645330   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  534  | 0.3337 |  5   |   0.935196   |   9.255770   |  -6.675195   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  535  | 0.3344 |  5   |   0.939544   |   9.773071   |  -6.704531   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  536  | 0.3350 |  5   |   0.940899   |  10.424059   |  -6.733701   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  537  | 0.3356 |  4   |   0.930236   |   6.745155   |  -6.026964   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  538  | 0.3362 |  4   |   0.938923   |   8.294867   |  -6.058196   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  539  | 0.3369 |  4   |   0.933831   |   7.289612   |  -6.090975   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  540  | 0.3375 |  4   |   0.937717   |   8.467063   |  -6.124695   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  541  | 0.3381 |  4   |   0.946206   |   9.085426   |  -6.158014   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  542  | 0.3387 |  4   |   0.935028   |   7.815512   |  -6.192894   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  543  | 0.3394 |  4   |   0.955943   |  11.529022   |  -6.228397   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  544  | 0.3400 |  4   |   0.967932   |  16.747506   |  -6.266371   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  545  | 0.3406 |  4   |   0.969599   |  18.050268   |  -6.307156   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  546  | 0.3412 |  4   |   0.959489   |  13.083305   |  -6.348949   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  547  | 0.3419 |  4   |   0.958625   |  12.513767   |  -6.395057   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  548  | 0.3425 |  4   |   0.950902   |  10.697214   |  -6.448425   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  549  | 0.3431 |  4   |   0.947183   |   9.394122   |  -6.510814   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  550  | 0.3438 |  4   |   0.949121   |   9.796854   |  -6.583580   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  551  | 0.3444 |  4   |   0.946961   |  10.422144   |  -6.670334   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  552  | 0.3450 |  3   |   0.952130   |   8.454171   |  -6.040947   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  553  | 0.3456 |  3   |   0.958336   |   9.321894   |  -6.153069   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  554  | 0.3463 |  3   |   0.954985   |   8.974295   |  -6.240227   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  555  | 0.3469 |  3   |   0.918559   |   5.521563   |  -6.152514   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  556  | 0.3475 |  4   |   0.926450   |   8.000008   |  -6.705685   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  557  | 0.3481 |  4   |   0.928557   |   7.739259   |  -6.578881   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  558  | 0.3488 |  4   |   0.925500   |   6.604689   |  -6.480316   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  559  | 0.3494 |  4   |   0.929234   |   7.475034   |  -6.427569   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  560  | 0.3500 |  4   |   0.929693   |   7.300120   |  -6.355897   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  561  | 0.3506 |  4   |   0.936551   |   8.216637   |  -6.307655   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  562  | 0.3513 |  4   |   0.932202   |   8.202960   |  -6.252951   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  563  | 0.3519 |  4   |   0.931593   |   7.225138   |  -6.207181   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  564  | 0.3525 |  4   |   0.933346   |   7.804957   |  -6.164819   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  565  | 0.3531 |  4   |   0.935896   |   7.675990   |  -6.122506   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  566  | 0.3538 |  4   |   0.921092   |   6.466938   |  -6.083487   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  567  | 0.3544 |  4   |   0.932215   |   7.272089   |  -6.047872   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  568  | 0.3550 |  4   |   0.934220   |   7.519600   |  -6.014768   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  569  | 0.3556 |  5   |   0.928175   |   8.861348   |  -6.721297   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  570  | 0.3563 |  5   |   0.942519   |  10.784671   |  -6.691721   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  571  | 0.3569 |  5   |   0.921757   |   8.404438   |  -6.665698   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  572  | 0.3575 |  5   |   0.938649   |   9.751264   |  -6.641548   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  573  | 0.3581 |  5   |   0.929423   |   9.337398   |  -6.619602   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  574  | 0.3588 |  5   |   0.931252   |   9.026243   |  -6.599179   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  575  | 0.3594 |  5   |   0.935800   |  10.026755   |  -6.580532   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  576  | 0.3600 |  5   |   0.927667   |   8.713964   |  -6.563055   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  577  | 0.3606 |  5   |   0.932789   |   9.022897   |  -6.546303   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  578  | 0.3613 |  5   |   0.932648   |   9.384868   |  -6.530497   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  579  | 0.3619 |  5   |   0.926850   |   9.294795   |  -6.515608   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  580  | 0.3625 |  5   |   0.935148   |   9.624212   |  -6.502089   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  581  | 0.3631 |  5   |   0.939544   |  10.602550   |  -6.489060   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  582  | 0.3638 |  5   |   0.928811   |   9.074335   |  -6.476485   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  583  | 0.3644 |  5   |   0.935111   |   9.725538   |  -6.464369   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  584  | 0.3650 |  5   |   0.935930   |   9.911181   |  -6.453149   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  585  | 0.3656 |  5   |   0.937111   |  10.114750   |  -6.442445   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  586  | 0.3663 |  5   |   0.926297   |   8.935411   |  -6.431856   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  587  | 0.3669 |  5   |   0.934241   |   9.131717   |  -6.421411   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  588  | 0.3675 |  5   |   0.937798   |  10.259390   |  -6.410763   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  589  | 0.3681 |  5   |   0.936302   |   9.777354   |  -6.400459   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  590  | 0.3688 |  5   |   0.933755   |   9.580929   |  -6.390617   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  591  | 0.3694 |  5   |   0.924450   |   8.299854   |  -6.381067   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  592  | 0.3700 |  5   |   0.933161   |   9.576209   |  -6.371199   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  593  | 0.3706 |  5   |   0.933705   |   9.373520   |  -6.361041   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  594  | 0.3713 |  5   |   0.927635   |   9.260982   |  -6.350829   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  595  | 0.3719 |  5   |   0.934219   |   9.348347   |  -6.340259   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  596  | 0.3725 |  5   |   0.933626   |   9.463258   |  -6.329682   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  597  | 0.3731 |  5   |   0.937334   |  10.124435   |  -6.318650   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  598  | 0.3738 |  5   |   0.929193   |   9.029926   |  -6.307391   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  599  | 0.3744 |  5   |   0.940768   |  10.412051   |  -6.295963   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  600  | 0.3750 |  5   |   0.931805   |   9.225028   |  -6.284483   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  601  | 0.3756 |  5   |   0.926832   |   8.961371   |  -6.273228   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  602  | 0.3763 |  5   |   0.921379   |   8.998819   |  -6.262315   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  603  | 0.3769 |  5   |   0.930263   |   8.900437   |  -6.251239   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  604  | 0.3775 |  5   |   0.924616   |   9.045664   |  -6.239790   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  605  | 0.3781 |  5   |   0.920190   |   8.237810   |  -6.228678   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  606  | 0.3788 |  5   |   0.938616   |   9.932866   |  -6.217750   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  607  | 0.3794 |  5   |   0.928041   |   8.335514   |  -6.207167   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  608  | 0.3800 |  5   |   0.942613   |  10.677613   |  -6.196759   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  609  | 0.3806 |  5   |   0.931734   |   9.114785   |  -6.186313   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  610  | 0.3813 |  5   |   0.930289   |   8.809337   |  -6.176285   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  611  | 0.3819 |  5   |   0.920796   |   8.183632   |  -6.166577   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  612  | 0.3825 |  5   |   0.936148   |  10.184320   |  -6.157476   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  613  | 0.3831 |  5   |   0.939177   |  11.175948   |  -6.148647   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  614  | 0.3838 |  5   |   0.935055   |   9.418275   |  -6.139905   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  615  | 0.3844 |  5   |   0.929043   |   9.167510   |  -6.131462   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  616  | 0.3850 |  5   |   0.931399   |   9.493777   |  -6.123619   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  617  | 0.3856 |  5   |   0.925089   |   8.847464   |  -6.116364   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  618  | 0.3862 |  5   |   0.923769   |   8.729304   |  -6.109657   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  619  | 0.3869 |  5   |   0.930690   |   9.356319   |  -6.103320   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  620  | 0.3875 |  5   |   0.938783   |   9.958771   |  -6.097263   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  621  | 0.3881 |  5   |   0.929590   |   9.402966   |  -6.091912   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  622  | 0.3887 |  5   |   0.932349   |   9.076035   |  -6.086617   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  623  | 0.3894 |  5   |   0.926166   |   8.987947   |  -6.081825   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  624  | 0.3900 |  5   |   0.930624   |   9.119325   |  -6.077522   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  625  | 0.3906 |  5   |   0.923748   |   8.322446   |  -6.072933   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  626  | 0.3912 |  5   |   0.935525   |  10.054455   |  -6.068706   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  627  | 0.3919 |  5   |   0.925626   |   8.581022   |  -6.064775   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  628  | 0.3925 |  5   |   0.919861   |   8.527264   |  -6.061124   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  629  | 0.3931 |  5   |   0.934803   |   9.801661   |  -6.057910   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  630  | 0.3937 |  5   |   0.937310   |  11.318866   |  -6.054666   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  631  | 0.3944 |  5   |   0.939446   |  16.229450   |  -6.051305   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  632  | 0.3950 |  5   |   0.907581   |  11.782864   |  -6.048460   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  633  | 0.3956 |  5   |   0.922724   |   9.168325   |  -6.045802   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  634  | 0.3962 |  5   |   0.925209   |   9.681161   |  -6.043305   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  635  | 0.3969 |  5   |   0.917343   |   7.917290   |  -6.041244   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  636  | 0.3975 |  5   |   0.918506   |   8.494464   |  -6.038823   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  637  | 0.3981 |  5   |   0.934074   |   9.517499   |  -6.036782   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  638  | 0.3987 |  5   |   0.945360   |  11.787720   |  -6.035121   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  639  | 0.3994 |  5   |   0.923969   |   9.638591   |  -6.033548   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  640  | 0.4000 |  5   |   0.931064   |   9.747886   |  -6.032156   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  641  | 0.4006 |  5   |   0.931296   |   9.784440   |  -6.030611   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  642  | 0.4012 |  5   |   0.934377   |  10.178377   |  -6.029328   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  643  | 0.4019 |  5   |   0.933453   |  10.652106   |  -6.028448   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  644  | 0.4025 |  5   |   0.935375   |   9.793001   |  -6.027806   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  645  | 0.4031 |  5   |   0.929348   |   9.390796   |  -6.027589   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  646  | 0.4037 |  5   |   0.932922   |   9.311741   |  -6.027943   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  647  | 0.4044 |  5   |   0.933876   |   9.519163   |  -6.028567   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  648  | 0.4050 |  5   |   0.937401   |   9.873745   |  -6.029863   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  649  | 0.4056 |  5   |   0.934438   |   9.459772   |  -6.031861   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  650  | 0.4062 |  5   |   0.932149   |   9.280485   |  -6.034463   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  651  | 0.4069 |  5   |   0.929717   |   9.812798   |  -6.038039   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  652  | 0.4075 |  5   |   0.924271   |   8.601479   |  -6.041779   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  653  | 0.4081 |  5   |   0.933553   |   9.629294   |  -6.046324   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  654  | 0.4088 |  5   |   0.931576   |   9.439751   |  -6.051770   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  655  | 0.4094 |  5   |   0.921814   |   8.409003   |  -6.057736   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  656  | 0.4100 |  5   |   0.931731   |   9.062441   |  -6.064569   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  657  | 0.4106 |  5   |   0.924062   |   8.879098   |  -6.071819   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  658  | 0.4113 |  5   |   0.933687   |   9.972103   |  -6.079378   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  659  | 0.4119 |  5   |   0.924142   |   8.578628   |  -6.087705   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  660  | 0.4125 |  5   |   0.934456   |  10.038193   |  -6.096779   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  661  | 0.4131 |  5   |   0.925543   |   8.665427   |  -6.106337   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  662  | 0.4138 |  5   |   0.935794   |   9.913590   |  -6.116549   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  663  | 0.4144 |  5   |   0.924256   |   8.054446   |  -6.126980   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  664  | 0.4150 |  5   |   0.926648   |   8.618163   |  -6.138140   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  665  | 0.4156 |  5   |   0.923350   |   8.456890   |  -6.150216   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  666  | 0.4163 |  5   |   0.934001   |   9.499949   |  -6.162310   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  667  | 0.4169 |  5   |   0.947611   |  13.289274   |  -6.174956   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  668  | 0.4175 |  5   |   0.927692   |   8.764567   |  -6.187704   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  669  | 0.4181 |  5   |   0.922900   |   8.442053   |  -6.200579   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  670  | 0.4188 |  5   |   0.920997   |   8.795515   |  -6.213696   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  671  | 0.4194 |  5   |   0.938697   |  10.923995   |  -6.226687   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  672  | 0.4200 |  5   |   0.960364   |  16.481206   |  -6.239806   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  673  | 0.4206 |  5   |   0.966614   |  19.566016   |  -6.252727   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  674  | 0.4213 |  5   |   0.951101   |  14.935261   |  -6.265094   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  675  | 0.4219 |  5   |   0.936364   |  10.476861   |  -6.277193   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  676  | 0.4225 |  5   |   0.931706   |   9.630969   |  -6.289225   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  677  | 0.4231 |  5   |   0.927414   |   9.848959   |  -6.300631   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  678  | 0.4238 |  5   |   0.933644   |  10.014491   |  -6.311949   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  679  | 0.4244 |  5   |   0.918683   |   7.996044   |  -6.322765   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  680  | 0.4250 |  5   |   0.934194   |   9.662433   |  -6.333101   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  681  | 0.4256 |  5   |   0.929059   |   9.097349   |  -6.343831   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  682  | 0.4263 |  5   |   0.940407   |  10.432632   |  -6.354240   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  683  | 0.4269 |  5   |   0.930849   |   9.559272   |  -6.364710   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  684  | 0.4275 |  5   |   0.935518   |  10.127651   |  -6.374817   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  685  | 0.4281 |  5   |   0.929643   |   9.210879   |  -6.384399   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  686  | 0.4288 |  5   |   0.934259   |   9.823093   |  -6.394270   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  687  | 0.4294 |  5   |   0.921517   |   8.424458   |  -6.404307   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  688  | 0.4300 |  5   |   0.930758   |   9.553632   |  -6.414187   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  689  | 0.4306 |  5   |   0.924880   |   8.471291   |  -6.424036   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  690  | 0.4313 |  5   |   0.926839   |   9.262191   |  -6.434595   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  691  | 0.4319 |  5   |   0.928622   |   9.686299   |  -6.445463   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  692  | 0.4325 |  5   |   0.930559   |   8.966420   |  -6.457199   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  693  | 0.4331 |  5   |   0.928816   |   9.617107   |  -6.469469   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  694  | 0.4338 |  5   |   0.931878   |   9.150726   |  -6.482595   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  695  | 0.4344 |  5   |   0.931842   |   9.893392   |  -6.496841   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  696  | 0.4350 |  5   |   0.918096   |   7.897612   |  -6.511907   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  697  | 0.4356 |  5   |   0.932114   |   9.527637   |  -6.528416   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  698  | 0.4363 |  5   |   0.932973   |   9.747239   |  -6.546356   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  699  | 0.4369 |  5   |   0.930940   |   9.409062   |  -6.566168   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  700  | 0.4375 |  5   |   0.929531   |   8.970919   |  -6.587375   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  701  | 0.4381 |  5   |   0.935546   |  10.324452   |  -6.610220   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  702  | 0.4388 |  5   |   0.930878   |   9.284216   |  -6.634628   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  703  | 0.4394 |  5   |   0.934634   |  10.035476   |  -6.660417   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  704  | 0.4400 |  5   |   0.939653   |  11.487262   |  -6.688445   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  705  | 0.4406 |  5   |   0.924306   |   8.595590   |  -6.717924   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  706  | 0.4413 |  4   |   0.921074   |   6.832913   |  -6.012933   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  707  | 0.4419 |  4   |   0.927642   |   7.818493   |  -6.046633   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  708  | 0.4425 |  4   |   0.934645   |   7.879602   |  -6.083937   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  709  | 0.4431 |  4   |   0.925286   |   7.188123   |  -6.125166   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  710  | 0.4438 |  4   |   0.932295   |   8.384217   |  -6.169749   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  711  | 0.4444 |  4   |   0.930219   |   7.790628   |  -6.218257   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  712  | 0.4450 |  4   |   0.923999   |   6.846884   |  -6.272441   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  713  | 0.4456 |  4   |   0.937155   |   8.161222   |  -6.330917   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  714  | 0.4463 |  4   |   0.913784   |   6.635980   |  -6.393803   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  715  | 0.4469 |  4   |   0.914941   |   6.048444   |  -6.467574   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  716  | 0.4475 |  4   |   0.925868   |   7.530941   |  -6.547091   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  717  | 0.4481 |  4   |   0.929802   |   7.972495   |  -6.637820   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  718  | 0.4487 |  3   |   0.926613   |   5.864296   |  -6.021062   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  719  | 0.4494 |  3   |   0.936496   |   6.354412   |  -6.150994   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  720  | 0.4500 |  3   |   0.933876   |   6.440199   |  -6.332472   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  721  | 0.4506 |  3   |   0.919855   |   5.085086   |  -6.580921   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  722  | 0.4512 |  2   |   0.932419   |   5.011490   |  -6.286639   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  723  | 0.4519 |  3   |   0.934949   |   6.479562   |  -6.567144   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  724  | 0.4525 |  3   |   0.918759   |   4.897590   |  -6.301854   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  725  | 0.4531 |  3   |   0.921584   |   5.574742   |  -6.142787   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  726  | 0.4537 |  3   |   0.920810   |   5.319923   |  -6.026335   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  727  | 0.4544 |  4   |   0.932090   |   8.023124   |  -6.656484   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  728  | 0.4550 |  4   |   0.929770   |   7.631246   |  -6.582534   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  729  | 0.4556 |  4   |   0.930141   |   7.458421   |  -6.522854   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  730  | 0.4562 |  4   |   0.923609   |   7.282485   |  -6.476099   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  731  | 0.4569 |  4   |   0.937906   |   8.195758   |  -6.446946   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  732  | 0.4575 |  4   |   0.929661   |   7.371895   |  -6.415274   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  733  | 0.4581 |  4   |   0.938033   |   8.674495   |  -6.394423   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  734  | 0.4587 |  4   |   0.915943   |   6.780173   |  -6.368030   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  735  | 0.4594 |  4   |   0.941495   |   9.210612   |  -6.338490   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  736  | 0.4600 |  4   |   0.934103   |   8.341763   |  -6.314331   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  737  | 0.4606 |  4   |   0.932541   |   8.698184   |  -6.288407   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  738  | 0.4612 |  4   |   0.921989   |   7.507051   |  -6.259720   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  739  | 0.4619 |  4   |   0.915109   |   7.382231   |  -6.228349   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  740  | 0.4625 |  4   |   0.920841   |   7.135293   |  -6.203928   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  741  | 0.4631 |  4   |   0.934369   |   8.067266   |  -6.177878   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  742  | 0.4637 |  4   |   0.919072   |   6.727871   |  -6.150242   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  743  | 0.4644 |  4   |   0.948047   |  10.231599   |  -6.122731   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  744  | 0.4650 |  4   |   0.940385   |   9.194453   |  -6.095159   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  745  | 0.4656 |  4   |   0.937440   |   9.083191   |  -6.067169   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  746  | 0.4662 |  4   |   0.924112   |   7.717238   |  -6.044879   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  747  | 0.4669 |  4   |   0.935212   |   7.848541   |  -6.020451   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  748  | 0.4675 |  5   |   0.927123   |   9.004796   |  -6.734322   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  749  | 0.4681 |  5   |   0.927374   |   9.352152   |  -6.713032   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  750  | 0.4688 |  5   |   0.927125   |   9.103034   |  -6.692085   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  751  | 0.4694 |  5   |   0.930933   |   9.221716   |  -6.673396   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  752  | 0.4700 |  5   |   0.931296   |  10.072722   |  -6.656070   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  753  | 0.4706 |  5   |   0.923142   |   8.925032   |  -6.638683   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  754  | 0.4713 |  5   |   0.932875   |   9.662591   |  -6.623003   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  755  | 0.4719 |  5   |   0.929516   |   9.521673   |  -6.609374   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  756  | 0.4725 |  5   |   0.930071   |   9.035976   |  -6.595895   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  757  | 0.4731 |  5   |   0.926474   |   8.695106   |  -6.582927   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  758  | 0.4738 |  5   |   0.924512   |   9.216887   |  -6.570494   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  759  | 0.4744 |  5   |   0.920378   |   8.357069   |  -6.558830   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  760  | 0.4750 |  5   |   0.934047   |   9.965198   |  -6.548863   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  761  | 0.4756 |  5   |   0.936664   |  10.491479   |  -6.539285   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  762  | 0.4763 |  5   |   0.934627   |   9.910685   |  -6.531018   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  763  | 0.4769 |  5   |   0.926491   |   9.685667   |  -6.523587   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  764  | 0.4775 |  5   |   0.932191   |   9.751607   |  -6.516481   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  765  | 0.4781 |  5   |   0.929089   |   9.675435   |  -6.510323   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  766  | 0.4788 |  5   |   0.938217   |  10.443324   |  -6.504507   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  767  | 0.4794 |  5   |   0.933689   |  10.570690   |  -6.499659   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  768  | 0.4800 |  5   |   0.929295   |   8.878479   |  -6.495284   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  769  | 0.4806 |  5   |   0.930110   |   9.058920   |  -6.491093   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  770  | 0.4813 |  5   |   0.927112   |   8.865057   |  -6.487179   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  771  | 0.4819 |  5   |   0.924207   |   9.043484   |  -6.483610   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  772  | 0.4825 |  5   |   0.935184   |  11.335469   |  -6.479769   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  773  | 0.4831 |  5   |   0.935779   |  10.724381   |  -6.476207   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  774  | 0.4838 |  5   |   0.913179   |   7.971472   |  -6.471980   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  775  | 0.4844 |  5   |   0.943513   |  11.730250   |  -6.466756   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  776  | 0.4850 |  5   |   0.920746   |   8.335757   |  -6.462200   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  777  | 0.4856 |  5   |   0.924331   |   9.116222   |  -6.457480   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  778  | 0.4863 |  5   |   0.921914   |   8.293705   |  -6.452995   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  779  | 0.4869 |  5   |   0.928560   |   8.960990   |  -6.448512   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  780  | 0.4875 |  5   |   0.928040   |   9.185435   |  -6.443459   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  781  | 0.4881 |  5   |   0.931650   |  10.068263   |  -6.438887   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  782  | 0.4888 |  5   |   0.928517   |   9.562702   |  -6.434237   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  783  | 0.4894 |  5   |   0.924984   |   8.882981   |  -6.429086   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  784  | 0.4900 |  5   |   0.928633   |   8.887591   |  -6.423551   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  785  | 0.4906 |  5   |   0.924556   |   8.774083   |  -6.417949   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  786  | 0.4913 |  5   |   0.934734   |  10.173882   |  -6.411811   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  787  | 0.4919 |  5   |   0.931321   |   9.234596   |  -6.406140   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  788  | 0.4925 |  5   |   0.932815   |   9.572152   |  -6.400657   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  789  | 0.4931 |  5   |   0.922462   |   8.687736   |  -6.395335   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  790  | 0.4938 |  5   |   0.931916   |   9.546295   |  -6.390520   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  791  | 0.4944 |  5   |   0.929535   |   9.834749   |  -6.385541   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  792  | 0.4950 |  5   |   0.924741   |   9.686103   |  -6.381138   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  793  | 0.4956 |  5   |   0.918371   |   8.332913   |  -6.377091   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  794  | 0.4963 |  5   |   0.931072   |   9.600378   |  -6.373732   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  795  | 0.4969 |  5   |   0.929066   |   9.401269   |  -6.371031   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  796  | 0.4975 |  5   |   0.932095   |   9.411825   |  -6.368646   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  797  | 0.4981 |  5   |   0.911633   |   8.534316   |  -6.366853   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  798  | 0.4988 |  5   |   0.931736   |   9.614760   |  -6.365811   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  799  | 0.4994 |  5   |   0.929255   |   9.798591   |  -6.365832   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  800  | 0.5000 |  5   |   0.933150   |  10.205395   |  -6.366059   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  801  | 0.5006 |  5   |   0.929677   |   9.759404   |  -6.366406   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  802  | 0.5012 |  5   |   0.932164   |   9.958121   |  -6.366706   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  803  | 0.5019 |  5   |   0.921897   |   8.490702   |  -6.367635   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  804  | 0.5025 |  5   |   0.904407   |   6.961878   |  -6.369248   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  805  | 0.5031 |  5   |   0.927244   |   9.957100   |  -6.370965   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  806  | 0.5038 |  5   |   0.938502   |  10.927201   |  -6.373256   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  807  | 0.5044 |  5   |   0.934453   |  10.172743   |  -6.375951   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  808  | 0.5050 |  5   |   0.924405   |   9.326037   |  -6.379399   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  809  | 0.5056 |  5   |   0.934565   |   9.772870   |  -6.383271   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  810  | 0.5062 |  5   |   0.959726   |  16.875979   |  -6.387779   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  811  | 0.5069 |  5   |   0.955313   |  16.020174   |  -6.392195   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  812  | 0.5075 |  5   |   0.940828   |  11.803230   |  -6.396531   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  813  | 0.5081 |  5   |   0.921266   |   8.758789   |  -6.401020   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  814  | 0.5088 |  5   |   0.919964   |   8.749492   |  -6.404953   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  815  | 0.5094 |  5   |   0.930982   |   9.768547   |  -6.409237   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  816  | 0.5100 |  5   |   0.919187   |   8.417535   |  -6.413285   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  817  | 0.5106 |  5   |   0.931183   |   9.933064   |  -6.416823   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  818  | 0.5112 |  5   |   0.932770   |   9.724156   |  -6.420107   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  819  | 0.5119 |  5   |   0.926745   |  10.083216   |  -6.422785   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  820  | 0.5125 |  5   |   0.928231   |   9.450696   |  -6.425145   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  821  | 0.5131 |  5   |   0.930732   |  10.784650   |  -6.427746   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  822  | 0.5138 |  5   |   0.935950   |  11.084179   |  -6.430038   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  823  | 0.5144 |  5   |   0.927837   |   9.801143   |  -6.431388   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  824  | 0.5150 |  5   |   0.943368   |  12.068285   |  -6.433341   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  825  | 0.5156 |  5   |   0.932240   |  10.050045   |  -6.435286   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  826  | 0.5162 |  5   |   0.925537   |   8.921238   |  -6.437849   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  827  | 0.5169 |  5   |   0.911140   |   7.980349   |  -6.440593   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  828  | 0.5175 |  5   |   0.926102   |   8.894458   |  -6.442666   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  829  | 0.5181 |  5   |   0.930764   |  10.031692   |  -6.445239   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  830  | 0.5188 |  5   |   0.935228   |  10.487921   |  -6.447810   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  831  | 0.5194 |  5   |   0.921017   |   8.795281   |  -6.450495   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  832  | 0.5200 |  5   |   0.907694   |   7.670427   |  -6.453366   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  833  | 0.5206 |  5   |   0.909943   |   7.740737   |  -6.456276   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  834  | 0.5212 |  5   |   0.914818   |   8.427780   |  -6.459461   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  835  | 0.5219 |  5   |   0.927102   |   9.244189   |  -6.463422   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  836  | 0.5225 |  5   |   0.906902   |   8.015583   |  -6.467999   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  837  | 0.5231 |  5   |   0.930278   |   9.826530   |  -6.473423   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  838  | 0.5238 |  5   |   0.933573   |   9.926509   |  -6.479936   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  839  | 0.5244 |  5   |   0.929016   |  10.408976   |  -6.486744   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  840  | 0.5250 |  5   |   0.930422   |   9.604165   |  -6.494973   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  841  | 0.5256 |  5   |   0.919496   |   8.642593   |  -6.503515   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  842  | 0.5262 |  5   |   0.929341   |   9.691619   |  -6.513077   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  843  | 0.5269 |  5   |   0.928971   |   9.842893   |  -6.524211   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  844  | 0.5275 |  5   |   0.933453   |  11.009402   |  -6.535251   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  845  | 0.5281 |  5   |   0.931839   |   9.558106   |  -6.547078   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  846  | 0.5288 |  5   |   0.934031   |   9.772532   |  -6.559367   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  847  | 0.5294 |  5   |   0.908875   |   7.996691   |  -6.572194   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  848  | 0.5300 |  5   |   0.925056   |   8.901146   |  -6.586218   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  849  | 0.5306 |  5   |   0.928417   |   9.443220   |  -6.600248   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  850  | 0.5312 |  5   |   0.924937   |   9.401289   |  -6.613841   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  851  | 0.5319 |  5   |   0.920601   |   8.422577   |  -6.628553   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  852  | 0.5325 |  5   |   0.931052   |   9.638048   |  -6.643800   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  853  | 0.5331 |  5   |   0.923216   |   9.223827   |  -6.659203   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  854  | 0.5338 |  5   |   0.922922   |   8.963944   |  -6.675844   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  855  | 0.5344 |  5   |   0.925591   |   9.590381   |  -6.691497   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  856  | 0.5350 |  5   |   0.924429   |   8.931645   |  -6.707915   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  857  | 0.5356 |  5   |   0.919343   |   8.353310   |  -6.724414   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  858  | 0.5363 |  4   |   0.930092   |   7.819427   |  -6.003178   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  859  | 0.5369 |  4   |   0.926550   |   7.337783   |  -6.018391   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  860  | 0.5375 |  4   |   0.933688   |   8.158798   |  -6.031969   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  861  | 0.5381 |  4   |   0.919090   |   6.962004   |  -6.044801   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  862  | 0.5388 |  4   |   0.919216   |   6.874953   |  -6.056879   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  863  | 0.5394 |  4   |   0.928819   |   8.566498   |  -6.067630   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  864  | 0.5400 |  4   |   0.931326   |   8.006476   |  -6.077553   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  865  | 0.5406 |  4   |   0.933139   |   8.072888   |  -6.087544   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  866  | 0.5413 |  4   |   0.916050   |   6.480457   |  -6.096423   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  867  | 0.5419 |  4   |   0.922485   |   7.022250   |  -6.104988   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  868  | 0.5425 |  4   |   0.938603   |   9.019238   |  -6.113887   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  869  | 0.5431 |  4   |   0.916699   |   6.557981   |  -6.122476   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  870  | 0.5438 |  4   |   0.916775   |   7.073197   |  -6.133422   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  871  | 0.5444 |  4   |   0.940131   |   9.969909   |  -6.143271   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  872  | 0.5450 |  4   |   0.931838   |   8.227085   |  -6.152831   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  873  | 0.5456 |  4   |   0.918185   |   6.862832   |  -6.164185   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  874  | 0.5463 |  4   |   0.929651   |   7.530676   |  -6.175673   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  875  | 0.5469 |  4   |   0.927331   |   7.491924   |  -6.188140   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  876  | 0.5475 |  4   |   0.925307   |   7.429103   |  -6.200923   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  877  | 0.5481 |  4   |   0.928364   |   8.051866   |  -6.214512   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  878  | 0.5487 |  4   |   0.935477   |   8.357555   |  -6.229388   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  879  | 0.5494 |  4   |   0.921338   |   7.114463   |  -6.247460   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  880  | 0.5500 |  4   |   0.921997   |   7.338384   |  -6.266307   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  881  | 0.5506 |  4   |   0.910171   |   7.071233   |  -6.288111   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  882  | 0.5513 |  4   |   0.935646   |   8.676680   |  -6.311155   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  883  | 0.5519 |  4   |   0.923082   |   7.320006   |  -6.337258   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  884  | 0.5525 |  4   |   0.907399   |   6.766790   |  -6.370621   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  885  | 0.5531 |  4   |   0.940883   |   9.564549   |  -6.408803   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  886  | 0.5537 |  4   |   0.916768   |   6.487341   |  -6.458586   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  887  | 0.5544 |  4   |   0.926042   |   7.786680   |  -6.510359   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  888  | 0.5550 |  4   |   0.928651   |   7.969324   |  -6.570389   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  889  | 0.5556 |  4   |   0.921681   |   7.016701   |  -6.647174   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  890  | 0.5563 |  3   |   0.923542   |   5.854110   |  -6.008526   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  891  | 0.5569 |  3   |   0.913919   |   5.762097   |  -6.094751   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  892  | 0.5575 |  3   |   0.930279   |   6.320222   |  -6.278467   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  893  | 0.5581 |  3   |   0.914855   |   5.142106   |  -6.557239   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  894  | 0.5587 |  2   |   0.935250   |   4.606866   |  -6.032091   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  895  | 0.5594 |  3   |   0.928966   |   6.051311   |  -6.485477   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  896  | 0.5600 |  3   |   0.938568   |   7.121828   |  -6.264643   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  897  | 0.5606 |  3   |   0.937551   |   7.141019   |  -6.114279   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  898  | 0.5613 |  3   |   0.920823   |   5.830745   |  -6.006076   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  899  | 0.5619 |  4   |   0.920828   |   7.319262   |  -6.646641   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  900  | 0.5625 |  4   |   0.916745   |   7.090214   |  -6.579032   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  901  | 0.5631 |  4   |   0.932117   |   8.046887   |  -6.524637   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  902  | 0.5637 |  4   |   0.925768   |   7.525246   |  -6.485084   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  903  | 0.5644 |  4   |   0.926730   |   7.667699   |  -6.460293   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  904  | 0.5650 |  4   |   0.933479   |   8.427721   |  -6.441458   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  905  | 0.5656 |  4   |   0.934279   |   8.615420   |  -6.424789   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  906  | 0.5663 |  4   |   0.916425   |   6.461447   |  -6.414601   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  907  | 0.5669 |  4   |   0.918330   |   7.395758   |  -6.401844   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  908  | 0.5675 |  4   |   0.921588   |   7.214110   |  -6.392842   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  909  | 0.5681 |  4   |   0.930740   |   7.987823   |  -6.387306   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  910  | 0.5687 |  4   |   0.920880   |   7.448220   |  -6.376787   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  911  | 0.5694 |  4   |   0.941468   |   9.277546   |  -6.372014   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  912  | 0.5700 |  4   |   0.930895   |   8.117703   |  -6.367281   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  913  | 0.5706 |  4   |   0.934344   |   8.807338   |  -6.361640   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  914  | 0.5713 |  4   |   0.921214   |   7.875672   |  -6.354599   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  915  | 0.5719 |  4   |   0.922923   |   7.908524   |  -6.346507   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  916  | 0.5725 |  4   |   0.925797   |   7.766734   |  -6.337215   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  917  | 0.5731 |  4   |   0.927046   |   7.655915   |  -6.327300   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  918  | 0.5737 |  4   |   0.921664   |   7.412390   |  -6.314234   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  919  | 0.5744 |  4   |   0.923584   |   7.685994   |  -6.302328   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  920  | 0.5750 |  4   |   0.912803   |   7.107680   |  -6.290808   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  921  | 0.5756 |  4   |   0.919204   |   6.893781   |  -6.279909   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  922  | 0.5763 |  4   |   0.937091   |   9.115775   |  -6.271519   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  923  | 0.5769 |  4   |   0.932698   |   9.973019   |  -6.261935   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  924  | 0.5775 |  4   |   0.923969   |   7.173532   |  -6.250019   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  925  | 0.5781 |  4   |   0.929120   |   8.145913   |  -6.237347   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  926  | 0.5787 |  4   |   0.931338   |   8.004418   |  -6.223171   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  927  | 0.5794 |  4   |   0.923704   |   7.463983   |  -6.208411   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  928  | 0.5800 |  4   |   0.929193   |   8.073174   |  -6.192242   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  929  | 0.5806 |  4   |   0.922863   |   7.412166   |  -6.175945   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  930  | 0.5813 |  4   |   0.923749   |   7.464325   |  -6.160154   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  931  | 0.5819 |  4   |   0.916635   |   6.873594   |  -6.144373   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  932  | 0.5825 |  4   |   0.931041   |   8.090923   |  -6.128385   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  933  | 0.5831 |  4   |   0.932154   |   8.207330   |  -6.114957   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  934  | 0.5837 |  4   |   0.931573   |   8.200356   |  -6.102245   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  935  | 0.5844 |  4   |   0.919409   |   7.053110   |  -6.091573   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  936  | 0.5850 |  4   |   0.931813   |   8.658322   |  -6.080312   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  937  | 0.5856 |  4   |   0.912471   |   7.760416   |  -6.069333   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  938  | 0.5863 |  4   |   0.933213   |   8.285897   |  -6.061676   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  939  | 0.5869 |  4   |   0.924844   |   7.949592   |  -6.053914   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  940  | 0.5875 |  4   |   0.929657   |   7.916140   |  -6.046597   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  941  | 0.5881 |  4   |   0.931614   |   8.213557   |  -6.040712   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  942  | 0.5887 |  4   |   0.917494   |   6.778910   |  -6.035029   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  943  | 0.5894 |  4   |   0.921157   |   7.833076   |  -6.029995   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  944  | 0.5900 |  4   |   0.934626   |   8.828546   |  -6.025737   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  945  | 0.5906 |  4   |   0.916082   |   7.140080   |  -6.020625   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  946  | 0.5913 |  4   |   0.921550   |   7.457766   |  -6.016519   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  947  | 0.5919 |  4   |   0.928874   |   8.125375   |  -6.014127   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  948  | 0.5925 |  4   |   0.924238   |   8.466355   |  -6.011464   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  949  | 0.5931 |  4   |   0.931175   |   8.528595   |  -6.010995   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  950  | 0.5938 |  4   |   0.915849   |   6.853404   |  -6.010663   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  951  | 0.5944 |  4   |   0.924345   |   7.463991   |  -6.010842   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  952  | 0.5950 |  4   |   0.914219   |   6.780014   |  -6.012660   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  953  | 0.5956 |  4   |   0.917663   |   7.709888   |  -6.013694   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  954  | 0.5963 |  4   |   0.919802   |   7.781216   |  -6.015258   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  955  | 0.5969 |  4   |   0.930770   |   8.124918   |  -6.017034   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  956  | 0.5975 |  4   |   0.925433   |   7.340804   |  -6.018758   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  957  | 0.5981 |  4   |   0.944448   |  10.579975   |  -6.020152   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  958  | 0.5988 |  4   |   0.954444   |  13.695401   |  -6.021178   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  959  | 0.5994 |  4   |   0.951249   |  11.892416   |  -6.021435   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  960  | 0.6000 |  4   |   0.947216   |  11.365227   |  -6.021983   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  961  | 0.6006 |  4   |   0.926662   |   7.708466   |  -6.021462   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  962  | 0.6013 |  4   |   0.915030   |   6.858607   |  -6.019392   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  963  | 0.6019 |  4   |   0.928690   |   8.081657   |  -6.017495   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  964  | 0.6025 |  4   |   0.931064   |   8.268210   |  -6.014669   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  965  | 0.6031 |  4   |   0.914736   |   6.586943   |  -6.012901   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  966  | 0.6038 |  4   |   0.929174   |   8.826159   |  -6.010773   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  967  | 0.6044 |  4   |   0.922514   |   7.269420   |  -6.008125   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  968  | 0.6050 |  4   |   0.934059   |   8.398957   |  -6.006511   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  969  | 0.6056 |  4   |   0.919612   |   7.183256   |  -6.004561   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  970  | 0.6063 |  4   |   0.918401   |   7.122052   |  -6.003055   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  971  | 0.6069 |  4   |   0.918601   |   7.398527   |  -6.001156   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  972  | 0.6075 |  5   |   0.934709   |  10.635267   |  -6.736096   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  973  | 0.6081 |  5   |   0.920950   |   9.403478   |  -6.732933   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  974  | 0.6088 |  5   |   0.925128   |   9.822489   |  -6.730927   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  975  | 0.6094 |  5   |   0.925081   |   9.443124   |  -6.728293   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  976  | 0.6100 |  5   |   0.919867   |   8.730676   |  -6.726088   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  977  | 0.6106 |  5   |   0.935123   |  11.108385   |  -6.724638   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  978  | 0.6112 |  5   |   0.924291   |   9.531157   |  -6.723093   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  979  | 0.6119 |  5   |   0.926213   |   9.206035   |  -6.722831   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  980  | 0.6125 |  5   |   0.921258   |   9.455391   |  -6.722275   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  981  | 0.6131 |  5   |   0.919319   |   9.037999   |  -6.722818   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  982  | 0.6138 |  5   |   0.922101   |   9.649626   |  -6.724609   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  983  | 0.6144 |  5   |   0.914127   |   9.180961   |  -6.726867   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  984  | 0.6150 |  5   |   0.929605   |   9.903099   |  -6.729894   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  985  | 0.6156 |  5   |   0.921145   |   8.583618   |  -6.733872   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  986  | 0.6162 |  4   |   0.930872   |   8.484389   |  -6.002413   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  987  | 0.6169 |  4   |   0.916844   |   7.861012   |  -6.008323   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  988  | 0.6175 |  4   |   0.905383   |   6.545824   |  -6.014689   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  989  | 0.6181 |  4   |   0.928213   |   8.051449   |  -6.020522   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  990  | 0.6188 |  4   |   0.929307   |   7.931838   |  -6.026718   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  991  | 0.6194 |  4   |   0.917231   |   7.924858   |  -6.033235   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  992  | 0.6200 |  4   |   0.914644   |   7.073856   |  -6.039820   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  993  | 0.6206 |  4   |   0.915804   |   7.031604   |  -6.046759   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  994  | 0.6212 |  4   |   0.915532   |   6.851505   |  -6.053125   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  995  | 0.6219 |  4   |   0.926133   |   7.924493   |  -6.060672   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  996  | 0.6225 |  4   |   0.915122   |   6.845819   |  -6.068738   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  997  | 0.6231 |  4   |   0.908980   |   7.367004   |  -6.077364   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  998  | 0.6238 |  4   |   0.924743   |   7.651999   |  -6.085551   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  999  | 0.6244 |  4   |   0.932288   |   8.875839   |  -6.093536   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1000  | 0.6250 |  4   |   0.931087   |   8.401884   |  -6.101440   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1001  | 0.6256 |  4   |   0.925997   |   7.514845   |  -6.108311   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1002  | 0.6262 |  4   |   0.928103   |   8.755970   |  -6.115036   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1003  | 0.6269 |  4   |   0.924007   |   7.877962   |  -6.120053   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1004  | 0.6275 |  4   |   0.923370   |   7.606824   |  -6.125083   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1005  | 0.6281 |  4   |   0.931847   |   8.271467   |  -6.129330   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1006  | 0.6288 |  4   |   0.924153   |   7.350740   |  -6.131815   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1007  | 0.6294 |  4   |   0.928794   |   9.078392   |  -6.134081   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1008  | 0.6300 |  4   |   0.922034   |   7.871533   |  -6.135853   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1009  | 0.6306 |  4   |   0.930759   |   8.319058   |  -6.137238   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1010  | 0.6312 |  4   |   0.920082   |   7.321156   |  -6.138090   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1011  | 0.6319 |  4   |   0.925351   |   7.838752   |  -6.139210   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1012  | 0.6325 |  4   |   0.926898   |   7.595031   |  -6.139927   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1013  | 0.6331 |  4   |   0.932205   |   8.338744   |  -6.143038   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1014  | 0.6338 |  4   |   0.931919   |   8.428863   |  -6.146324   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1015  | 0.6344 |  4   |   0.924758   |   7.827160   |  -6.149373   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1016  | 0.6350 |  4   |   0.929116   |   8.540733   |  -6.153742   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1017  | 0.6356 |  4   |   0.915126   |   7.437961   |  -6.157307   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1018  | 0.6362 |  4   |   0.927702   |   8.517067   |  -6.162357   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1019  | 0.6369 |  4   |   0.936099   |   9.611543   |  -6.167346   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1020  | 0.6375 |  4   |   0.935214   |   9.719461   |  -6.171501   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1021  | 0.6381 |  4   |   0.917992   |   7.913717   |  -6.176618   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1022  | 0.6388 |  4   |   0.914312   |   6.582554   |  -6.183004   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1023  | 0.6394 |  4   |   0.931955   |   8.374164   |  -6.190415   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1024  | 0.6400 |  4   |   0.919650   |   7.426191   |  -6.199218   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1025  | 0.6406 |  4   |   0.914648   |   7.586108   |  -6.209307   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1026  | 0.6412 |  4   |   0.922771   |   7.578438   |  -6.219444   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1027  | 0.6419 |  4   |   0.918334   |   7.000283   |  -6.232960   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1028  | 0.6425 |  4   |   0.919806   |   7.717802   |  -6.245844   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1029  | 0.6431 |  4   |   0.918627   |   7.365761   |  -6.262885   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1030  | 0.6438 |  4   |   0.916576   |   7.045100   |  -6.281386   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1031  | 0.6444 |  4   |   0.918363   |   7.295040   |  -6.301876   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1032  | 0.6450 |  4   |   0.932141   |   8.764861   |  -6.325443   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1033  | 0.6456 |  4   |   0.931872   |   8.280653   |  -6.348106   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1034  | 0.6462 |  4   |   0.923205   |   7.308350   |  -6.371098   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1035  | 0.6469 |  4   |   0.918940   |   7.740210   |  -6.393510   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1036  | 0.6475 |  4   |   0.927996   |   8.016123   |  -6.413080   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1037  | 0.6481 |  4   |   0.916981   |   7.068324   |  -6.433704   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1038  | 0.6488 |  4   |   0.921732   |   8.072070   |  -6.454810   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1039  | 0.6494 |  4   |   0.933029   |   8.710908   |  -6.478630   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1040  | 0.6500 |  4   |   0.923166   |   7.583035   |  -6.504847   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1041  | 0.6506 |  4   |   0.929650   |   7.991677   |  -6.530908   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1042  | 0.6512 |  4   |   0.910652   |   7.831387   |  -6.549571   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1043  | 0.6519 |  4   |   0.915165   |   7.414356   |  -6.567332   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1044  | 0.6525 |  4   |   0.918041   |   7.230979   |  -6.591474   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1045  | 0.6531 |  4   |   0.918513   |   7.130405   |  -6.617837   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1046  | 0.6538 |  4   |   0.935045   |  10.248333   |  -6.644649   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1047  | 0.6544 |  4   |   0.911800   |   7.263334   |  -6.662403   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1048  | 0.6550 |  4   |   0.935323   |   8.808576   |  -6.670366   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1049  | 0.6556 |  4   |   0.917601   |   7.382260   |  -6.674614   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1050  | 0.6562 |  4   |   0.927703   |   8.327516   |  -6.678070   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1051  | 0.6569 |  4   |   0.929240   |   8.159486   |  -6.682884   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1052  | 0.6575 |  4   |   0.927343   |   8.167163   |  -6.682254   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1053  | 0.6581 |  4   |   0.918255   |   7.118270   |  -6.676019   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1054  | 0.6588 |  4   |   0.924514   |   7.911668   |  -6.673981   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1055  | 0.6594 |  4   |   0.908841   |   7.212744   |  -6.671337   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1056  | 0.6600 |  4   |   0.932677   |   8.829904   |  -6.672329   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1057  | 0.6606 |  4   |   0.937924   |   9.915553   |  -6.686767   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1058  | 0.6613 |  4   |   0.919435   |   7.155833   |  -6.703246   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1059  | 0.6619 |  3   |   0.920376   |   5.931020   |  -6.003585   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1060  | 0.6625 |  3   |   0.915874   |   5.160785   |  -6.029415   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1061  | 0.6631 |  3   |   0.936080   |   7.283641   |  -6.059212   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1062  | 0.6638 |  3   |   0.926326   |   6.584482   |  -6.099238   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1063  | 0.6644 |  3   |   0.917920   |   5.606686   |  -6.141490   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1064  | 0.6650 |  3   |   0.914574   |   5.980095   |  -6.192046   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1065  | 0.6656 |  3   |   0.929508   |   7.013428   |  -6.247208   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1066  | 0.6663 |  3   |   0.929459   |   6.676799   |  -6.316483   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1067  | 0.6669 |  3   |   0.925459   |   6.066367   |  -6.395493   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1068  | 0.6675 |  3   |   0.933261   |   7.170071   |  -6.488118   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1069  | 0.6681 |  3   |   0.932382   |   7.179632   |  -6.602509   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1070  | 0.6688 |  3   |   0.919540   |   6.003355   |  -6.686659   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1071  | 0.6694 |  3   |   0.931598   |   6.937881   |  -6.645541   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1072  | 0.6700 |  3   |   0.927833   |   6.351259   |  -6.529632   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1073  | 0.6706 |  3   |   0.918263   |   5.491571   |  -6.386503   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1074  | 0.6713 |  3   |   0.926692   |   6.385859   |  -6.273671   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1075  | 0.6719 |  3   |   0.917119   |   5.999285   |  -6.176272   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1076  | 0.6725 |  3   |   0.925408   |   5.932480   |  -6.094158   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1077  | 0.6731 |  3   |   0.935232   |   7.047719   |  -6.029750   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1078  | 0.6737 |  4   |   0.921706   |   8.294545   |  -6.698059   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1079  | 0.6744 |  4   |   0.911691   |   7.933428   |  -6.654229   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1080  | 0.6750 |  4   |   0.926209   |   7.677143   |  -6.616279   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1081  | 0.6756 |  4   |   0.926396   |   8.077297   |  -6.591037   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1082  | 0.6763 |  4   |   0.928085   |   8.697632   |  -6.572259   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1083  | 0.6769 |  4   |   0.924713   |   8.636628   |  -6.560263   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1084  | 0.6775 |  4   |   0.913943   |   6.868651   |  -6.546583   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1085  | 0.6781 |  4   |   0.934523   |   9.129627   |  -6.532780   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1086  | 0.6787 |  4   |   0.928840   |   8.193750   |  -6.526252   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1087  | 0.6794 |  4   |   0.922079   |   7.691099   |  -6.521036   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1088  | 0.6800 |  4   |   0.928793   |   9.001772   |  -6.515684   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1089  | 0.6806 |  4   |   0.928990   |   8.050145   |  -6.506385   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1090  | 0.6813 |  4   |   0.911485   |   7.048428   |  -6.500763   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1091  | 0.6819 |  4   |   0.913823   |   6.982267   |  -6.496410   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1092  | 0.6825 |  4   |   0.919510   |   7.312097   |  -6.493355   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1093  | 0.6831 |  4   |   0.921880   |   8.064265   |  -6.491628   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1094  | 0.6837 |  4   |   0.924319   |   8.168887   |  -6.490720   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1095  | 0.6844 |  4   |   0.916849   |   8.145098   |  -6.493842   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1096  | 0.6850 |  4   |   0.933056   |   9.022156   |  -6.496825   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1097  | 0.6856 |  4   |   0.930876   |   9.288652   |  -6.500247   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1098  | 0.6863 |  4   |   0.928344   |   8.776482   |  -6.503331   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1099  | 0.6869 |  4   |   0.929797   |   8.445000   |  -6.506542   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1100  | 0.6875 |  4   |   0.932857   |   8.977255   |  -6.508816   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1101  | 0.6881 |  4   |   0.914474   |   6.950047   |  -6.508330   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1102  | 0.6887 |  4   |   0.915831   |   6.985880   |  -6.504984   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1103  | 0.6894 |  4   |   0.919720   |   7.433220   |  -6.498664   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1104  | 0.6900 |  4   |   0.924345   |   8.435698   |  -6.493188   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1105  | 0.6906 |  4   |   0.919239   |   7.499495   |  -6.483664   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1106  | 0.6913 |  4   |   0.927702   |   8.312528   |  -6.477971   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1107  | 0.6919 |  4   |   0.905430   |   7.064338   |  -6.471588   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1108  | 0.6925 |  4   |   0.929447   |   8.317395   |  -6.462329   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1109  | 0.6931 |  4   |   0.920270   |   7.443997   |  -6.454981   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1110  | 0.6937 |  4   |   0.907604   |   7.078348   |  -6.445337   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1111  | 0.6944 |  4   |   0.944930   |  11.707186   |  -6.436921   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1112  | 0.6950 |  4   |   0.947047   |  12.491962   |  -6.427934   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1113  | 0.6956 |  4   |   0.955191   |  13.723619   |  -6.419523   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1114  | 0.6963 |  4   |   0.949932   |  12.809653   |  -6.409602   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1115  | 0.6969 |  4   |   0.941285   |  10.841859   |  -6.398473   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1116  | 0.6975 |  4   |   0.950025   |  12.612672   |  -6.387562   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1117  | 0.6981 |  4   |   0.928513   |   9.529809   |  -6.376837   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1118  | 0.6987 |  4   |   0.952280   |  13.225460   |  -6.366434   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1119  | 0.6994 |  4   |   0.930254   |   8.762119   |  -6.355948   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1120  | 0.7000 |  4   |   0.916934   |   7.582739   |  -6.346619   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1121  | 0.7006 |  4   |   0.918606   |   8.007747   |  -6.338990   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1122  | 0.7013 |  4   |   0.930048   |   8.570686   |  -6.335392   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1123  | 0.7019 |  4   |   0.920564   |   8.365584   |  -6.328398   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1124  | 0.7025 |  4   |   0.919386   |   7.555674   |  -6.322689   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1125  | 0.7031 |  4   |   0.908091   |   7.353988   |  -6.320174   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1126  | 0.7037 |  4   |   0.925578   |   7.913533   |  -6.318050   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1127  | 0.7044 |  4   |   0.928327   |   8.114483   |  -6.319327   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1128  | 0.7050 |  4   |   0.913671   |   7.522904   |  -6.320312   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1129  | 0.7056 |  4   |   0.930980   |   8.752463   |  -6.321696   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1130  | 0.7063 |  4   |   0.940251   |  10.005117   |  -6.325615   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1131  | 0.7069 |  4   |   0.926527   |   8.024006   |  -6.329173   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1132  | 0.7075 |  4   |   0.907798   |   7.109459   |  -6.332008   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1133  | 0.7081 |  4   |   0.922298   |   8.640346   |  -6.335240   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1134  | 0.7087 |  4   |   0.896194   |   6.614045   |  -6.337656   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1135  | 0.7094 |  4   |   0.937337   |   9.121761   |  -6.340842   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1136  | 0.7100 |  4   |   0.921886   |   8.392108   |  -6.346003   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1137  | 0.7106 |  4   |   0.916224   |   7.859331   |  -6.348157   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1138  | 0.7113 |  4   |   0.915565   |   8.024887   |  -6.352561   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1139  | 0.7119 |  4   |   0.918944   |   8.247203   |  -6.355931   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1140  | 0.7125 |  4   |   0.928581   |   8.213575   |  -6.359025   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1141  | 0.7131 |  4   |   0.922211   |   7.502078   |  -6.364355   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1142  | 0.7137 |  4   |   0.928090   |   8.158745   |  -6.367767   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1143  | 0.7144 |  4   |   0.920783   |   8.535763   |  -6.371420   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1144  | 0.7150 |  4   |   0.937610   |   9.167599   |  -6.375872   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1145  | 0.7156 |  4   |   0.914974   |   7.609418   |  -6.379270   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1146  | 0.7163 |  4   |   0.925423   |   8.059713   |  -6.380910   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1147  | 0.7169 |  4   |   0.927696   |   8.380200   |  -6.383113   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1148  | 0.7175 |  4   |   0.915872   |   8.763745   |  -6.383455   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1149  | 0.7181 |  4   |   0.916754   |   7.811686   |  -6.382649   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1150  | 0.7188 |  4   |   0.904398   |   7.312649   |  -6.380434   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1151  | 0.7194 |  4   |   0.898388   |   6.233123   |  -6.378116   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1152  | 0.7200 |  4   |   0.924043   |   8.260602   |  -6.375061   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1153  | 0.7206 |  4   |   0.929171   |   8.306413   |  -6.370896   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1154  | 0.7213 |  4   |   0.924714   |   7.813347   |  -6.367199   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1155  | 0.7219 |  4   |   0.914168   |   7.571872   |  -6.364520   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1156  | 0.7225 |  4   |   0.925041   |   8.776365   |  -6.361529   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1157  | 0.7231 |  4   |   0.925620   |   8.343365   |  -6.361940   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1158  | 0.7238 |  4   |   0.922507   |   7.930578   |  -6.361511   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1159  | 0.7244 |  4   |   0.934175   |   8.782314   |  -6.360446   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1160  | 0.7250 |  4   |   0.920790   |   7.707391   |  -6.359915   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1161  | 0.7256 |  4   |   0.910863   |   7.289048   |  -6.359643   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1162  | 0.7263 |  4   |   0.917009   |   7.602118   |  -6.359626   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1163  | 0.7269 |  4   |   0.921294   |   8.246427   |  -6.360292   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1164  | 0.7275 |  4   |   0.926745   |   8.517843   |  -6.360161   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1165  | 0.7281 |  4   |   0.925840   |   8.038491   |  -6.361011   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1166  | 0.7288 |  4   |   0.926431   |   8.348977   |  -6.364340   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1167  | 0.7294 |  4   |   0.935242   |  10.113046   |  -6.366325   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1168  | 0.7300 |  4   |   0.927744   |   8.453601   |  -6.370783   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1169  | 0.7306 |  4   |   0.921554   |   7.747966   |  -6.373253   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1170  | 0.7313 |  4   |   0.922679   |   8.202883   |  -6.378563   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1171  | 0.7319 |  4   |   0.910188   |   7.777112   |  -6.387620   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1172  | 0.7325 |  4   |   0.917733   |   7.207897   |  -6.397110   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1173  | 0.7331 |  4   |   0.916014   |   7.393832   |  -6.408907   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1174  | 0.7338 |  4   |   0.916073   |   7.744147   |  -6.423190   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1175  | 0.7344 |  4   |   0.924179   |   7.997136   |  -6.438644   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1176  | 0.7350 |  4   |   0.919824   |   8.388396   |  -6.453451   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1177  | 0.7356 |  4   |   0.920209   |   7.862722   |  -6.466161   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1178  | 0.7362 |  4   |   0.898070   |   7.402616   |  -6.477981   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1179  | 0.7369 |  4   |   0.934894   |   9.805250   |  -6.490331   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1180  | 0.7375 |  4   |   0.926073   |   7.958758   |  -6.501302   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1181  | 0.7381 |  4   |   0.918172   |   7.780018   |  -6.508742   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1182  | 0.7388 |  4   |   0.926471   |   9.004369   |  -6.517199   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1183  | 0.7394 |  4   |   0.939136   |  10.829570   |  -6.524190   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1184  | 0.7400 |  4   |   0.916182   |   8.729566   |  -6.529659   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1185  | 0.7406 |  4   |   0.921064   |   8.598056   |  -6.536999   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1186  | 0.7412 |  4   |   0.924541   |   7.885106   |  -6.544560   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1187  | 0.7419 |  4   |   0.907229   |   6.759805   |  -6.553980   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1188  | 0.7425 |  4   |   0.915924   |   7.317449   |  -6.561419   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1189  | 0.7431 |  4   |   0.929004   |   8.739841   |  -6.568440   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1190  | 0.7438 |  4   |   0.906303   |   7.346764   |  -6.572663   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1191  | 0.7444 |  4   |   0.915393   |   8.164053   |  -6.575985   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1192  | 0.7450 |  4   |   0.899735   |   7.143547   |  -6.577017   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1193  | 0.7456 |  4   |   0.924635   |   8.377289   |  -6.576245   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1194  | 0.7462 |  4   |   0.918561   |   7.572548   |  -6.573967   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1195  | 0.7469 |  4   |   0.926113   |   7.928270   |  -6.569815   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1196  | 0.7475 |  4   |   0.920556   |   7.788774   |  -6.566726   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1197  | 0.7481 |  4   |   0.908997   |   6.947657   |  -6.562847   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1198  | 0.7488 |  4   |   0.929165   |   8.826927   |  -6.560783   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1199  | 0.7494 |  4   |   0.920913   |   7.702865   |  -6.557858   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1200  | 0.7500 |  4   |   0.933831   |   8.945611   |  -6.558579   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1201  | 0.7506 |  4   |   0.924699   |   8.864619   |  -6.562230   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1202  | 0.7512 |  4   |   0.911546   |   7.443252   |  -6.568334   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1203  | 0.7519 |  4   |   0.935485   |   9.703718   |  -6.577404   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1204  | 0.7525 |  4   |   0.923595   |   8.795860   |  -6.585200   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1205  | 0.7531 |  4   |   0.929596   |   8.778910   |  -6.596626   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1206  | 0.7538 |  4   |   0.926712   |   8.130308   |  -6.607278   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1207  | 0.7544 |  4   |   0.928199   |   8.880169   |  -6.617869   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1208  | 0.7550 |  4   |   0.924128   |   7.796787   |  -6.627011   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1209  | 0.7556 |  4   |   0.939659   |   9.793255   |  -6.626992   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1210  | 0.7562 |  4   |   0.924773   |   8.361683   |  -6.639151   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1211  | 0.7569 |  4   |   0.922705   |   7.717882   |  -6.653354   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1212  | 0.7575 |  4   |   0.927571   |   8.588771   |  -6.663088   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1213  | 0.7581 |  4   |   0.931787   |   8.685981   |  -6.678892   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1214  | 0.7588 |  4   |   0.932016   |   8.870283   |  -6.712668   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1215  | 0.7594 |  3   |   0.936448   |   7.131936   |  -6.028008   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1216  | 0.7600 |  3   |   0.935406   |   7.003290   |  -6.071563   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1217  | 0.7606 |  3   |   0.924934   |   6.910270   |  -6.119044   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1218  | 0.7612 |  3   |   0.929694   |   6.615141   |  -6.170889   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1219  | 0.7619 |  3   |   0.909327   |   5.570117   |  -6.234240   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1220  | 0.7625 |  3   |   0.932986   |   7.149140   |  -6.295446   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1221  | 0.7631 |  3   |   0.924188   |   6.457875   |  -6.365778   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1222  | 0.7638 |  3   |   0.909953   |   5.871146   |  -6.434445   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1223  | 0.7644 |  3   |   0.928547   |   6.499115   |  -6.511122   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1224  | 0.7650 |  3   |   0.922555   |   6.261577   |  -6.592566   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1225  | 0.7656 |  3   |   0.913798   |   6.026391   |  -6.668235   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1226  | 0.7662 |  2   |   0.930050   |   5.004120   |  -6.029681   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1227  | 0.7669 |  2   |   0.909977   |   4.486438   |  -6.109226   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1228  | 0.7675 |  2   |   0.895722   |   3.440246   |  -6.202233   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1229  | 0.7681 |  2   |   0.940644   |   5.820162   |  -6.281046   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1230  | 0.7688 |  2   |   0.930324   |   5.041517   |  -6.400145   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1231  | 0.7694 |  2   |   0.916581   |   4.403132   |  -6.514832   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1232  | 0.7700 |  2   |   0.920085   |   4.437169   |  -6.710137   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1233  | 0.7706 |  1   |   0.952456   |   4.143759   |  -6.231334   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1234  | 0.7712 |  1   |   0.939911   |   3.289889   |  -6.199109   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1235  | 0.7719 |  1   |   0.948967   |   3.912819   |  -6.279833   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1236  | 0.7725 |  1   |   0.924042   |   3.470309   |  -6.186977   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1237  | 0.7731 |  1   |   0.924761   |   3.568120   |  -6.210239   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1238  | 0.7738 |  1   |   0.951496   |   4.155957   |  -6.175174   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1239  | 0.7744 |  2   |   0.914439   |   4.638218   |  -6.643518   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1240  | 0.7750 |  2   |   0.922798   |   4.622485   |  -6.472152   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1241  | 0.7756 |  2   |   0.909284   |   4.378345   |  -6.351047   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1242  | 0.7762 |  2   |   0.928217   |   4.809230   |  -6.270035   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1243  | 0.7769 |  2   |   0.923236   |   4.858469   |  -6.200196   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1244  | 0.7775 |  2   |   0.893751   |   4.178158   |  -6.173887   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1245  | 0.7781 |  2   |   0.922553   |   4.384358   |  -6.188209   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1246  | 0.7788 |  2   |   0.909896   |   4.370389   |  -6.231758   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1247  | 0.7794 |  2   |   0.922965   |   4.873047   |  -6.265387   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1248  | 0.7800 |  2   |   0.899864   |   4.570790   |  -6.220014   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1249  | 0.7806 |  2   |   0.913468   |   4.285283   |  -6.119855   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1250  | 0.7812 |  2   |   0.932397   |   5.044742   |  -6.026681   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1251  | 0.7819 |  3   |   0.929710   |   7.061525   |  -6.636329   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1252  | 0.7825 |  3   |   0.906493   |   5.589907   |  -6.562926   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1253  | 0.7831 |  3   |   0.943008   |   8.304963   |  -6.490258   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1254  | 0.7838 |  3   |   0.926622   |   6.655013   |  -6.422651   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1255  | 0.7844 |  3   |   0.931639   |   6.835680   |  -6.366936   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1256  | 0.7850 |  3   |   0.916696   |   6.467256   |  -6.317927   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1257  | 0.7856 |  3   |   0.926912   |   6.755943   |  -6.270930   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1258  | 0.7863 |  3   |   0.922191   |   6.677117   |  -6.227701   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1259  | 0.7869 |  3   |   0.930687   |   7.118596   |  -6.186990   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1260  | 0.7875 |  3   |   0.930117   |   6.684295   |  -6.144891   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1261  | 0.7881 |  3   |   0.929701   |   7.005025   |  -6.113824   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1262  | 0.7888 |  3   |   0.918863   |   6.294075   |  -6.078622   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1263  | 0.7894 |  3   |   0.932202   |   6.840877   |  -6.047364   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1264  | 0.7900 |  3   |   0.910877   |   5.613191   |  -6.021068   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1265  | 0.7906 |  4   |   0.925607   |   8.073141   |  -6.719737   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1266  | 0.7913 |  4   |   0.912307   |   7.263875   |  -6.704270   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1267  | 0.7919 |  4   |   0.930200   |   8.913673   |  -6.689412   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1268  | 0.7925 |  4   |   0.929462   |   8.768475   |  -6.679864   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1269  | 0.7931 |  4   |   0.922741   |   8.526130   |  -6.674705   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1270  | 0.7938 |  4   |   0.904746   |   7.523337   |  -6.674535   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1271  | 0.7944 |  4   |   0.905644   |   7.542059   |  -6.676006   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1272  | 0.7950 |  4   |   0.920402   |   7.629049   |  -6.677811   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1273  | 0.7956 |  4   |   0.925692   |   9.695210   |  -6.681055   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1274  | 0.7963 |  4   |   0.907982   |   7.327946   |  -6.683734   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1275  | 0.7969 |  4   |   0.921152   |   7.715528   |  -6.689100   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1276  | 0.7975 |  4   |   0.919780   |   7.797306   |  -6.690455   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1277  | 0.7981 |  4   |   0.908231   |   6.997520   |  -6.692961   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1278  | 0.7988 |  4   |   0.910907   |   6.868745   |  -6.695419   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1279  | 0.7994 |  4   |   0.925940   |   8.451732   |  -6.699436   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1280  | 0.8000 |  4   |   0.934993   |  10.338312   |  -6.704191   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1281  | 0.8006 |  4   |   0.947827   |  13.149787   |  -6.706832   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1282  | 0.8013 |  4   |   0.946172   |  12.332356   |  -6.713397   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1283  | 0.8019 |  4   |   0.958371   |  15.994232   |  -6.718868   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1284  | 0.8025 |  3   |   0.920216   |   6.571284   |  -6.004194   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1285  | 0.8031 |  3   |   0.926825   |   6.706288   |  -6.008552   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1286  | 0.8037 |  3   |   0.907671   |   5.892412   |  -6.013252   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1287  | 0.8044 |  3   |   0.918813   |   6.421157   |  -6.016678   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1288  | 0.8050 |  3   |   0.907797   |   5.761683   |  -6.018253   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1289  | 0.8056 |  3   |   0.921126   |   6.379539   |  -6.016380   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1290  | 0.8063 |  3   |   0.937599   |   7.956121   |  -6.008141   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1291  | 0.8069 |  3   |   0.925893   |   6.658299   |  -6.002442   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1292  | 0.8075 |  4   |   0.929607   |   9.408072   |  -6.714071   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1293  | 0.8081 |  4   |   0.930463   |   8.916854   |  -6.702464   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1294  | 0.8087 |  4   |   0.913496   |   8.402706   |  -6.687466   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1295  | 0.8094 |  4   |   0.901661   |   7.318546   |  -6.673721   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1296  | 0.8100 |  4   |   0.921061   |   8.009299   |  -6.665851   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1297  | 0.8106 |  4   |   0.909855   |   7.818646   |  -6.663710   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1298  | 0.8113 |  4   |   0.912429   |   7.054599   |  -6.656185   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1299  | 0.8119 |  4   |   0.921310   |   8.087624   |  -6.647634   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1300  | 0.8125 |  4   |   0.926882   |   8.309952   |  -6.643482   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1301  | 0.8131 |  4   |   0.922634   |   8.101265   |  -6.637931   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1302  | 0.8137 |  4   |   0.903305   |   7.810847   |  -6.632792   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1303  | 0.8144 |  4   |   0.925649   |   8.853188   |  -6.627386   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1304  | 0.8150 |  4   |   0.920076   |   8.582657   |  -6.622565   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1305  | 0.8156 |  4   |   0.914099   |   7.787682   |  -6.618596   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1306  | 0.8163 |  4   |   0.931229   |   9.168955   |  -6.616898   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1307  | 0.8169 |  4   |   0.931456   |  10.647637   |  -6.617723   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1308  | 0.8175 |  4   |   0.930434   |   8.912885   |  -6.612092   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1309  | 0.8181 |  4   |   0.928742   |   8.830129   |  -6.609815   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1310  | 0.8187 |  4   |   0.914587   |   7.686721   |  -6.607506   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1311  | 0.8194 |  4   |   0.920700   |   9.108045   |  -6.606688   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1312  | 0.8200 |  4   |   0.927001   |   8.420919   |  -6.607645   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1313  | 0.8206 |  4   |   0.924258   |   8.255074   |  -6.605577   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1314  | 0.8213 |  4   |   0.923330   |   8.297737   |  -6.610603   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1315  | 0.8219 |  4   |   0.927977   |   9.260231   |  -6.619429   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1316  | 0.8225 |  4   |   0.910872   |   7.814553   |  -6.628394   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1317  | 0.8231 |  4   |   0.915706   |   8.115908   |  -6.640888   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1318  | 0.8237 |  4   |   0.912054   |   7.342257   |  -6.651894   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1319  | 0.8244 |  4   |   0.925312   |   8.489474   |  -6.664372   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1320  | 0.8250 |  4   |   0.902651   |   7.504793   |  -6.672463   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1321  | 0.8256 |  4   |   0.932649   |   9.117836   |  -6.676945   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1322  | 0.8263 |  4   |   0.913811   |   7.966333   |  -6.682830   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1323  | 0.8269 |  4   |   0.912447   |   8.078233   |  -6.688385   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1324  | 0.8275 |  4   |   0.922237   |   8.321086   |  -6.683467   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1325  | 0.8281 |  4   |   0.923167   |   8.182118   |  -6.687963   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1326  | 0.8287 |  4   |   0.930753   |   9.513708   |  -6.689673   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1327  | 0.8294 |  4   |   0.927944   |   8.866654   |  -6.694972   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1328  | 0.8300 |  4   |   0.916398   |   8.443696   |  -6.703402   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1329  | 0.8306 |  4   |   0.901440   |   7.634219   |  -6.705796   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1330  | 0.8313 |  4   |   0.922754   |   8.935395   |  -6.711642   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1331  | 0.8319 |  4   |   0.927116   |   8.510146   |  -6.714483   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1332  | 0.8325 |  4   |   0.908065   |   7.132285   |  -6.718255   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1333  | 0.8331 |  4   |   0.918213   |   8.339746   |  -6.720112   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1334  | 0.8337 |  4   |   0.915420   |   7.949602   |  -6.717928   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1335  | 0.8344 |  4   |   0.926254   |   8.569067   |  -6.713696   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1336  | 0.8350 |  4   |   0.923414   |   9.492939   |  -6.708814   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1337  | 0.8356 |  4   |   0.914152   |   8.191882   |  -6.701642   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1338  | 0.8363 |  4   |   0.892766   |   6.287503   |  -6.690712   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1339  | 0.8369 |  4   |   0.923519   |   8.217924   |  -6.684021   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1340  | 0.8375 |  4   |   0.925387   |   8.864148   |  -6.673170   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1341  | 0.8381 |  4   |   0.924136   |   8.206538   |  -6.669380   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1342  | 0.8387 |  4   |   0.926988   |   9.034768   |  -6.666147   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1343  | 0.8394 |  4   |   0.911987   |   7.943771   |  -6.667502   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1344  | 0.8400 |  4   |   0.921000   |   8.354416   |  -6.670236   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1345  | 0.8406 |  4   |   0.901436   |   6.994085   |  -6.672476   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1346  | 0.8413 |  4   |   0.924168   |   8.719940   |  -6.677506   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1347  | 0.8419 |  4   |   0.900978   |   7.824988   |  -6.681746   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1348  | 0.8425 |  4   |   0.912713   |   7.374806   |  -6.679422   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1349  | 0.8431 |  4   |   0.920766   |   8.125932   |  -6.684184   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1350  | 0.8438 |  4   |   0.923853   |   8.162324   |  -6.691453   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1351  | 0.8444 |  4   |   0.896098   |   6.970622   |  -6.695730   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1352  | 0.8450 |  4   |   0.930811   |   9.435302   |  -6.701364   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1353  | 0.8456 |  4   |   0.918538   |   8.275929   |  -6.709699   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1354  | 0.8463 |  4   |   0.928470   |   8.698167   |  -6.717348   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1355  | 0.8469 |  3   |   0.930309   |   7.341614   |  -6.009742   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1356  | 0.8475 |  3   |   0.952561   |  11.640321   |  -6.021302   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1357  | 0.8481 |  3   |   0.953932   |  12.938866   |  -6.038162   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1358  | 0.8488 |  3   |   0.943049   |   9.969767   |  -6.060154   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1359  | 0.8494 |  3   |   0.906790   |   5.582816   |  -6.081769   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1360  | 0.8500 |  3   |   0.925486   |   6.801914   |  -6.109987   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1361  | 0.8506 |  3   |   0.922876   |   6.741693   |  -6.136498   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1362  | 0.8513 |  3   |   0.934594   |   7.493868   |  -6.167731   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1363  | 0.8519 |  3   |   0.924786   |   7.474810   |  -6.199347   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1364  | 0.8525 |  3   |   0.910837   |   5.500055   |  -6.227932   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1365  | 0.8531 |  3   |   0.915531   |   5.932688   |  -6.252630   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1366  | 0.8538 |  3   |   0.930793   |   7.041993   |  -6.276321   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1367  | 0.8544 |  3   |   0.938088   |   8.756874   |  -6.296855   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1368  | 0.8550 |  3   |   0.910723   |   6.451619   |  -6.308915   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1369  | 0.8556 |  3   |   0.917983   |   7.778209   |  -6.319756   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1370  | 0.8563 |  3   |   0.927807   |   7.532988   |  -6.320335   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1371  | 0.8569 |  3   |   0.931662   |   7.979495   |  -6.328537   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1372  | 0.8575 |  3   |   0.921234   |   6.817747   |  -6.332177   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1373  | 0.8581 |  3   |   0.925978   |   6.832790   |  -6.334080   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1374  | 0.8588 |  3   |   0.930740   |   7.744576   |  -6.338519   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1375  | 0.8594 |  3   |   0.943918   |   9.086644   |  -6.339174   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1376  | 0.8600 |  3   |   0.914050   |   5.699749   |  -6.347613   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1377  | 0.8606 |  3   |   0.905264   |   6.346863   |  -6.347356   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1378  | 0.8613 |  3   |   0.906315   |   5.285599   |  -6.345342   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1379  | 0.8619 |  3   |   0.920860   |   7.811200   |  -6.338786   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1380  | 0.8625 |  3   |   0.917868   |   6.642529   |  -6.332586   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1381  | 0.8631 |  3   |   0.909967   |   5.732910   |  -6.323180   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1382  | 0.8638 |  3   |   0.921635   |   6.648797   |  -6.309623   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1383  | 0.8644 |  3   |   0.930756   |   7.780269   |  -6.296340   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1384  | 0.8650 |  3   |   0.930719   |   7.890981   |  -6.281010   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1385  | 0.8656 |  3   |   0.923992   |   6.398535   |  -6.274691   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1386  | 0.8662 |  3   |   0.903839   |   6.690373   |  -6.266116   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1387  | 0.8669 |  3   |   0.909279   |   6.162003   |  -6.265344   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1388  | 0.8675 |  3   |   0.941367   |   8.677482   |  -6.270572   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1389  | 0.8681 |  3   |   0.911446   |   6.014046   |  -6.284428   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1390  | 0.8688 |  3   |   0.929819   |   6.943937   |  -6.307708   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1391  | 0.8694 |  3   |   0.923763   |   6.919514   |  -6.331954   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1392  | 0.8700 |  3   |   0.940189   |   8.590857   |  -6.367560   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1393  | 0.8706 |  3   |   0.909837   |   6.339009   |  -6.404126   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1394  | 0.8712 |  3   |   0.926164   |   6.626126   |  -6.452202   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1395  | 0.8719 |  3   |   0.926851   |   6.704561   |  -6.496296   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1396  | 0.8725 |  3   |   0.932812   |   8.590432   |  -6.543041   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1397  | 0.8731 |  3   |   0.924830   |   6.746752   |  -6.600877   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1398  | 0.8738 |  3   |   0.892529   |   5.109863   |  -6.662386   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1399  | 0.8744 |  2   |   0.911400   |   4.365246   |  -6.021849   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1400  | 0.8750 |  2   |   0.907444   |   4.026311   |  -6.092594   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1401  | 0.8756 |  2   |   0.950411   |   7.357859   |  -6.204895   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1402  | 0.8762 |  2   |   0.930811   |   5.691882   |  -6.366503   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1403  | 0.8769 |  2   |   0.933039   |   5.277355   |  -6.642130   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1404  | 0.8775 |  1   |   0.937317   |   3.483202   |  -6.227275   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1405  | 0.8781 |  2   |   0.913230   |   5.123663   |  -6.574511   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1406  | 0.8788 |  2   |   0.911899   |   6.244291   |  -6.302770   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1407  | 0.8794 |  2   |   0.950953   |   7.910832   |  -6.147566   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1408  | 0.8800 |  2   |   0.907901   |   4.279579   |  -6.029678   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1409  | 0.8806 |  3   |   0.918393   |   6.419089   |  -6.693765   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1410  | 0.8812 |  3   |   0.924358   |   6.599582   |  -6.649497   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1411  | 0.8819 |  3   |   0.935163   |   8.815596   |  -6.623082   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1412  | 0.8825 |  3   |   0.917370   |   6.024143   |  -6.616261   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1413  | 0.8831 |  3   |   0.903074   |   5.630821   |  -6.620242   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1414  | 0.8838 |  3   |   0.920935   |   6.477164   |  -6.641287   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1415  | 0.8844 |  3   |   0.930969   |   7.159821   |  -6.656438   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1416  | 0.8850 |  3   |   0.944903   |   9.192090   |  -6.678032   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1417  | 0.8856 |  3   |   0.917504   |   6.419061   |  -6.696381   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1418  | 0.8862 |  2   |   0.925873   |   4.906813   |  -6.009344   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1419  | 0.8869 |  2   |   0.942563   |   6.497721   |  -6.020023   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1420  | 0.8875 |  2   |   0.930500   |   6.719030   |  -6.034870   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1421  | 0.8881 |  2   |   0.922138   |   4.961293   |  -6.048726   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1422  | 0.8888 |  2   |   0.916820   |   4.927310   |  -6.054676   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1423  | 0.8894 |  2   |   0.931824   |   5.187046   |  -6.082993   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1424  | 0.8900 |  2   |   0.909958   |   4.764700   |  -6.080217   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1425  | 0.8906 |  2   |   0.952513   |   8.509196   |  -6.099373   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1426  | 0.8912 |  2   |   0.925765   |   5.302563   |  -6.126336   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1427  | 0.8919 |  2   |   0.924751   |   4.762978   |  -6.153369   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1428  | 0.8925 |  2   |   0.908702   |   4.654668   |  -6.184855   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1429  | 0.8931 |  2   |   0.927439   |   4.797967   |  -6.191623   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1430  | 0.8938 |  2   |   0.922327   |   4.872953   |  -6.181712   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1431  | 0.8944 |  2   |   0.949224   |   7.255501   |  -6.165610   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1432  | 0.8950 |  2   |   0.923494   |   4.752976   |  -6.148035   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1433  | 0.8956 |  2   |   0.910790   |   4.072053   |  -6.100759   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1434  | 0.8962 |  2   |   0.912764   |   4.493207   |  -6.069348   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1435  | 0.8969 |  2   |   0.923236   |   4.706394   |  -6.009632   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1436  | 0.8975 |  3   |   0.925365   |   7.674640   |  -6.669228   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1437  | 0.8981 |  3   |   0.930127   |   8.028126   |  -6.614993   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1438  | 0.8988 |  3   |   0.909886   |   5.641717   |  -6.544955   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1439  | 0.8994 |  3   |   0.923842   |   6.524829   |  -6.498984   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1440  | 0.9000 |  3   |   0.935796   |   9.013565   |  -6.452873   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1441  | 0.9006 |  3   |   0.928812   |   7.637232   |  -6.417525   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1442  | 0.9012 |  3   |   0.916514   |   6.729560   |  -6.386488   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1443  | 0.9019 |  3   |   0.920521   |   6.535683   |  -6.358110   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1444  | 0.9025 |  3   |   0.934488   |   8.036480   |  -6.338567   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1445  | 0.9031 |  3   |   0.923621   |   8.000703   |  -6.320279   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1446  | 0.9038 |  3   |   0.945605   |  10.816668   |  -6.301856   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1447  | 0.9044 |  3   |   0.957473   |  13.628701   |  -6.282845   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1448  | 0.9050 |  3   |   0.951944   |  10.663103   |  -6.270388   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1449  | 0.9056 |  3   |   0.939845   |   8.595916   |  -6.252747   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1450  | 0.9062 |  3   |   0.948901   |   9.769054   |  -6.241028   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1451  | 0.9069 |  3   |   0.909184   |   6.239377   |  -6.224971   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1452  | 0.9075 |  3   |   0.914978   |   6.686036   |  -6.210477   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1453  | 0.9081 |  3   |   0.922125   |   6.350539   |  -6.205791   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1454  | 0.9088 |  3   |   0.923767   |   7.956812   |  -6.197706   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1455  | 0.9094 |  3   |   0.919677   |   6.447463   |  -6.197969   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1456  | 0.9100 |  3   |   0.901075   |   5.856636   |  -6.200958   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1457  | 0.9106 |  3   |   0.933259   |   7.972088   |  -6.211285   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1458  | 0.9113 |  3   |   0.923401   |   6.754908   |  -6.227387   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1459  | 0.9119 |  3   |   0.930110   |   7.010411   |  -6.244895   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1460  | 0.9125 |  3   |   0.904108   |   5.327531   |  -6.262087   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1461  | 0.9131 |  3   |   0.916977   |   6.080096   |  -6.280465   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1462  | 0.9138 |  3   |   0.901609   |   6.342472   |  -6.302012   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1463  | 0.9144 |  3   |   0.919275   |   6.615018   |  -6.315333   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1464  | 0.9150 |  3   |   0.924563   |   6.948357   |  -6.331984   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1465  | 0.9156 |  3   |   0.901309   |   6.283830   |  -6.339009   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1466  | 0.9163 |  3   |   0.918418   |   6.435431   |  -6.348970   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1467  | 0.9169 |  3   |   0.914044   |   6.364084   |  -6.357608   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1468  | 0.9175 |  3   |   0.923417   |   6.583113   |  -6.358147   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1469  | 0.9181 |  3   |   0.910274   |   6.727884   |  -6.362814   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1470  | 0.9188 |  3   |   0.924321   |   6.566537   |  -6.362185   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1471  | 0.9194 |  3   |   0.919724   |   6.277768   |  -6.369470   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1472  | 0.9200 |  3   |   0.925420   |   7.324469   |  -6.372368   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1473  | 0.9206 |  3   |   0.911357   |   6.095469   |  -6.375124   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1474  | 0.9213 |  3   |   0.930778   |   8.441899   |  -6.377731   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1475  | 0.9219 |  3   |   0.923867   |   7.201074   |  -6.379665   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1476  | 0.9225 |  3   |   0.924486   |   6.876316   |  -6.378112   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1477  | 0.9231 |  3   |   0.925674   |   7.472106   |  -6.367844   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1478  | 0.9238 |  3   |   0.927625   |   7.278294   |  -6.355895   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1479  | 0.9244 |  3   |   0.921834   |   7.126721   |  -6.335776   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1480  | 0.9250 |  3   |   0.926204   |   6.768756   |  -6.320051   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1481  | 0.9256 |  3   |   0.924415   |   6.981813   |  -6.294503   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1482  | 0.9263 |  3   |   0.923252   |   8.269953   |  -6.269027   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1483  | 0.9269 |  3   |   0.915274   |   6.118142   |  -6.247761   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1484  | 0.9275 |  3   |   0.895026   |   5.716490   |  -6.227756   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1485  | 0.9281 |  3   |   0.914148   |   5.881200   |  -6.215509   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1486  | 0.9287 |  3   |   0.932979   |   7.572946   |  -6.201373   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1487  | 0.9294 |  3   |   0.914681   |   6.239722   |  -6.195014   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1488  | 0.9300 |  3   |   0.925638   |   6.726851   |  -6.191173   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1489  | 0.9306 |  3   |   0.919700   |   6.448708   |  -6.192837   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1490  | 0.9313 |  3   |   0.923637   |   7.135001   |  -6.194106   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1491  | 0.9319 |  3   |   0.926781   |   6.974635   |  -6.194425   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1492  | 0.9325 |  3   |   0.934381   |   8.284605   |  -6.198788   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1493  | 0.9331 |  3   |   0.939366   |   8.767719   |  -6.201704   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1494  | 0.9337 |  3   |   0.922030   |   6.414749   |  -6.207466   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1495  | 0.9344 |  3   |   0.907948   |   5.853225   |  -6.208558   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1496  | 0.9350 |  3   |   0.906547   |   5.939189   |  -6.213032   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1497  | 0.9356 |  3   |   0.908636   |   5.539818   |  -6.217216   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1498  | 0.9363 |  3   |   0.898894   |   6.153936   |  -6.224082   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1499  | 0.9369 |  3   |   0.907490   |   5.856698   |  -6.232341   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1500  | 0.9375 |  3   |   0.913808   |   6.567728   |  -6.240649   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1501  | 0.9381 |  3   |   0.922514   |   6.624142   |  -6.259544   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1502  | 0.9387 |  3   |   0.907688   |   5.808735   |  -6.278295   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1503  | 0.9394 |  3   |   0.919367   |   6.465359   |  -6.305641   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1504  | 0.9400 |  3   |   0.920099   |   6.526947   |  -6.331373   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1505  | 0.9406 |  3   |   0.927817   |   7.421338   |  -6.360774   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1506  | 0.9413 |  3   |   0.928545   |   8.437538   |  -6.393548   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1507  | 0.9419 |  3   |   0.902386   |   6.204882   |  -6.420430   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1508  | 0.9425 |  3   |   0.923993   |   6.786077   |  -6.444533   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1509  | 0.9431 |  3   |   0.919801   |   6.553246   |  -6.457352   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1510  | 0.9437 |  3   |   0.921803   |   6.615594   |  -6.472199   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1511  | 0.9444 |  3   |   0.925004   |   7.170310   |  -6.478191   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1512  | 0.9450 |  3   |   0.905564   |   6.420444   |  -6.480669   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1513  | 0.9456 |  3   |   0.897894   |   5.869495   |  -6.471425   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1514  | 0.9463 |  3   |   0.933066   |   7.607843   |  -6.465231   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1515  | 0.9469 |  3   |   0.923439   |   6.751990   |  -6.463353   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1516  | 0.9475 |  3   |   0.925066   |   7.330558   |  -6.455438   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1517  | 0.9481 |  3   |   0.918668   |   6.579083   |  -6.455617   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1518  | 0.9487 |  3   |   0.909436   |   6.596379   |  -6.445974   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1519  | 0.9494 |  3   |   0.919355   |   6.596168   |  -6.448004   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1520  | 0.9500 |  3   |   0.924505   |   6.784022   |  -6.447369   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1521  | 0.9506 |  3   |   0.915205   |   7.034473   |  -6.439085   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1522  | 0.9513 |  3   |   0.921929   |   7.147249   |  -6.433309   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1523  | 0.9519 |  3   |   0.917739   |   6.480462   |  -6.421102   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1524  | 0.9525 |  3   |   0.920645   |   7.268439   |  -6.409265   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1525  | 0.9531 |  3   |   0.924978   |   6.762246   |  -6.392637   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1526  | 0.9537 |  3   |   0.904161   |   5.662068   |  -6.375022   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1527  | 0.9544 |  3   |   0.894575   |   5.943442   |  -6.352899   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1528  | 0.9550 |  3   |   0.916485   |   6.450057   |  -6.340903   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1529  | 0.9556 |  3   |   0.911471   |   5.815902   |  -6.327473   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1530  | 0.9563 |  3   |   0.946163   |  10.300556   |  -6.318675   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1531  | 0.9569 |  3   |   0.920140   |   6.708279   |  -6.319531   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1532  | 0.9575 |  3   |   0.927131   |   7.644479   |  -6.322022   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1533  | 0.9581 |  3   |   0.925872   |   7.906648   |  -6.340347   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1534  | 0.9587 |  3   |   0.953359   |  12.854882   |  -6.355311   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1535  | 0.9594 |  3   |   0.957625   |  12.035864   |  -6.374960   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1536  | 0.9600 |  3   |   0.922788   |   6.549969   |  -6.399544   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1537  | 0.9606 |  3   |   0.923255   |   7.345718   |  -6.425160   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1538  | 0.9613 |  3   |   0.894928   |   5.283814   |  -6.454270   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1539  | 0.9619 |  3   |   0.920838   |   6.585240   |  -6.477813   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1540  | 0.9625 |  3   |   0.919923   |   6.684282   |  -6.503289   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1541  | 0.9631 |  3   |   0.901987   |   6.327917   |  -6.528889   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1542  | 0.9637 |  3   |   0.922220   |   6.678324   |  -6.563999   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1543  | 0.9644 |  3   |   0.927326   |   7.721633   |  -6.587193   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1544  | 0.9650 |  3   |   0.921554   |   6.909383   |  -6.621031   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1545  | 0.9656 |  3   |   0.903761   |   5.837015   |  -6.657607   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1546  | 0.9663 |  3   |   0.922861   |   6.750733   |  -6.703406   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1547  | 0.9669 |  2   |   0.919500   |   4.979636   |  -6.058854   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1548  | 0.9675 |  2   |   0.882183   |   4.165048   |  -6.115563   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1549  | 0.9681 |  2   |   0.885237   |   4.722028   |  -6.214839   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1550  | 0.9688 |  2   |   0.931076   |   5.733022   |  -6.317135   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1551  | 0.9694 |  2   |   0.911807   |   4.571640   |  -6.398004   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1552  | 0.9700 |  2   |   0.936105   |   6.147134   |  -6.467622   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1553  | 0.9706 |  2   |   0.908700   |   4.738175   |  -6.490310   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1554  | 0.9713 |  2   |   0.920402   |   5.178498   |  -6.517662   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1555  | 0.9719 |  2   |   0.915520   |   4.679663   |  -6.599814   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1556  | 0.9725 |  2   |   0.922605   |   4.647103   |  -6.640635   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1557  | 0.9731 |  2   |   0.896298   |   4.618234   |  -6.569212   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1558  | 0.9738 |  2   |   0.922466   |   4.843003   |  -6.507500   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1559  | 0.9744 |  2   |   0.916682   |   4.588394   |  -6.398797   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1560  | 0.9750 |  2   |   0.926053   |   5.174229   |  -6.324868   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1561  | 0.9756 |  2   |   0.925270   |   5.638033   |  -6.266221   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1562  | 0.9763 |  2   |   0.927981   |   5.450152   |  -6.214271   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1563  | 0.9769 |  2   |   0.916252   |   4.483924   |  -6.213178   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1564  | 0.9775 |  2   |   0.935426   |   6.449234   |  -6.200658   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1565  | 0.9781 |  2   |   0.915920   |   4.498245   |  -6.200783   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1566  | 0.9788 |  2   |   0.904817   |   4.479567   |  -6.183228   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1567  | 0.9794 |  2   |   0.927257   |   5.067844   |  -6.170427   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1568  | 0.9800 |  2   |   0.918439   |   4.788952   |  -6.161537   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1569  | 0.9806 |  2   |   0.925997   |   5.402627   |  -6.142222   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1570  | 0.9813 |  2   |   0.926460   |   5.615353   |  -6.116125   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1571  | 0.9819 |  2   |   0.922461   |   4.803652   |  -6.079451   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1572  | 0.9825 |  2   |   0.918388   |   5.038670   |  -6.063322   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1573  | 0.9831 |  2   |   0.875533   |   3.609758   |  -6.039418   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1574  | 0.9838 |  2   |   0.927343   |   6.587288   |  -6.032471   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1575  | 0.9844 |  2   |   0.904182   |   4.309741   |  -6.028304   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1576  | 0.9850 |  2   |   0.905156   |   4.712267   |  -6.046032   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1577  | 0.9856 |  2   |   0.930125   |   5.372373   |  -6.097563   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1578  | 0.9863 |  2   |   0.930499   |   5.708138   |  -6.167997   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1579  | 0.9869 |  2   |   0.891846   |   4.428921   |  -6.282399   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1580  | 0.9875 |  2   |   0.933033   |   5.432235   |  -6.425647   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1581  | 0.9881 |  1   |   0.931325   |   3.440839   |  -6.003674   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1582  | 0.9888 |  1   |   0.926261   |   3.442987   |  -6.310460   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1583  | 0.9894 |  1   |   0.914095   |   3.372041   |  -6.055798   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1584  | 0.9900 |  2   |   0.931821   |   5.991383   |  -6.550136   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1585  | 0.9906 |  2   |   0.920986   |   4.753026   |  -6.433191   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1586  | 0.9913 |  2   |   0.922951   |   5.393609   |  -6.328313   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1587  | 0.9919 |  2   |   0.926422   |   5.207035   |  -6.277935   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1588  | 0.9925 |  2   |   0.918221   |   4.913140   |  -6.221342   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1589  | 0.9931 |  2   |   0.918656   |   5.623120   |  -6.184381   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1590  | 0.9938 |  2   |   0.935746   |   6.446742   |  -6.132430   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1591  | 0.9944 |  2   |   0.944267   |   6.625097   |  -6.092405   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1592  | 0.9950 |  2   |   0.928395   |   5.372510   |  -6.057012   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1593  | 0.9956 |  2   |   0.924128   |   5.034784   |  -6.021695   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1594  | 0.9962 |  3   |   0.911149   |   6.033995   |  -6.711058   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1595  | 0.9969 |  3   |   0.911349   |   6.372252   |  -6.670375   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1596  | 0.9975 |  3   |   0.914314   |   6.562514   |  -6.652219   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1597  | 0.9981 |  3   |   0.899058   |   5.619607   |  -6.635549   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1598  | 0.9988 |  3   |   0.883084   |   6.469685   |  -6.635330   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1599  | 0.9994 |  3   |   0.924483   |   7.161764   |  -6.640260   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"| 1600  | 1.0000 |  3   |   0.928814   |   7.948421   |  -6.657385   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"\\u001b[34m...Finished\\u001b[0m\\n\",\n      \"\\u001b[36mFINISHED - Elapsed time = 14865.6099746 seconds\\u001b[0m\\n\",\n      \"\\u001b[36mFINISHED - CPU process time = 110402.5020766 seconds\\u001b[0m\\n\"\n     ]\n    },\n    {\n     \"data\": {\n      \"text/plain\": [\n       \"<sharpy.presharpy.presharpy.PreSharpy at 0x7f39c328f520>\"\n      ]\n     },\n     \"execution_count\": 10,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"sharpy.sharpy_main.main(['', pazy_model_open_loop.route + pazy_model_open_loop.case_name + '.sharpy'])\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"#### Plot wing tip deflection in gust response\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"To get a feeling of the gust-induced deformation at the wingtip, we now display the vertical tip deflection.\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 15,\n   \"metadata\": {\n    \"scrolled\": true\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"image/png\": \"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xDvvvFMsKCjwcNW+Z8OGDZd8DXDX67cgiuzTIyIiIuXyuTlDRERERB3BMERERESKxjBEREREisYwRERERIrGMERERESKxjBEREREisYwRERERIrGMERERESKxjBERB61ceNGCIKA6upqqUshIgIAcAdqInKbCRMmYMiQIVi2bJnzWlNTEyorKxETEwNBEKQrjoiomZ/UBRCRsvj7+yM2NlbqMoiInDhMRkRucc8992DTpk146623IAgCBEHA6dOnWw2TrVq1CmFhYfj+++/Rt29f6PV63Hrrraivr8eHH36Inj17olu3bnj00UdhtVqd929qasJTTz2FhIQEBAYG4qqrrsLGjRs7VOPGjRtx5ZVXIjAwEGFhYRgzZgzOnDnj/Ph///tfDBs2DDqdDr1798aSJUtgsVicH6+ursaDDz6ImJgY6HQ6pKen4/vvv+/S142IPI89Q0TkFm+99Rays7ORnp6OF154AQAQFRWF06dPt3qs0WjE22+/jTVr1sBgMGDmzJmYOXMmwsLCsHbtWuTm5uKWW27B1Vdfjdtvvx0AcO+99+L06dNYs2YN4uPj8fXXX2Pq1Kk4fPgwUlJSLlufxWLBzTffjAceeACffvopmpqasGvXLufQ3fr163HXXXfh7bffxtixY3Hy5Ek8+OCDAIBFixbBZrNh2rRpMBgM+Pjjj5GcnIzMzEyo1WoXfQWJyGM6fM49EVE7jR8/Xpw/f36Laxs2bBABiFVVVaIoiuLKlStFAOKJEyecj5k7d66o1+tFg8HgvHbdddeJc+fOFUVRFE+cOCEKgiAWFha2uPe1114rLly4sF21VVRUiADEjRs3tvnxsWPHii+//HKLax999JEYFxcniqIorl+/XlSpVGJWVla7no+I5Is9Q0QkOb1ej+TkZOf7MTEx6NmzJ4KCglpcKysrAwDs27cPoigiNTW1xX1MJhMiIiLa9Zzh4eG45557cN1112Hy5MmYNGkSZs2ahbi4OADA3r17sXv3brz00kvOz7FarWhsbITRaMSBAweQmJjYqgYi8j4MQ0QkOY1G0+J9QRDavGaz2QAANpsNarUae/fubTUsdX6AupyVK1fisccew7p16/DZZ5/h+eefR0ZGBkaOHAmbzYYlS5Zg5syZrT5Pp9MhICCg3c9DRPLGMEREbuPv799i0rOrDB06FFarFWVlZRg7dmyX7zV06FAsXLgQo0aNwurVqzFy5EhcccUVyMrKQp8+fdr8vEGDBqGgoADZ2dnsHSLycgxDROQ2PXv2xM6dO3H69GkEBQUhPDzcJfdNTU3FnXfeibvvvht/+9vfMHToUJSXl+N///sfBg4ciOnTp1/2HqdOncI///lP3HjjjYiPj0dWVhays7Nx9913AwD+/Oc/4/rrr0dSUhJuu+02qFQqHDp0CIcPH8aLL76I8ePHY9y4cbjlllvwxhtvoE+fPjh+/DgEQcDUqVNd8u8kIs/g0noicpsnn3wSarUaAwYMQFRUFPLy8lx275UrV+Luu+/GH/7wB/Tt2xc33ngjdu7ciaSkJOdjBEHAqlWr2vx8vV6P48eP45ZbbkFqaioefPBBPPLII5g7dy4A4LrrrsP333+PjIwMjBgxAiNHjsQbb7yBHj16OO/x5ZdfYsSIEbjjjjswYMAAPPXUU27pCSMi9+IO1ETkk06fPo2UlBRkZma2a6k9ESkXe4aIyCetW7cODz74IIMQEV0We4aIiIhI0dgzRERERIrGMERERESKxjBEREREisYwRERERIrGMERERESKxjBEREREisYwRERERIrGMERERESKxjBEREREivb/AaUnMPvDR2g6AAAAAElFTkSuQmCC\",\n      \"text/plain\": [\n       \"<Figure size 640x480 with 1 Axes>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    }\n   ],\n   \"source\": [\n    \"def get_resulting_vertical_tip_displacement(output_folder, model):    \\n\",\n    \"    file_results = os.path.join(output_folder, \\n\",\n    \"                                 model.case_name, \\n\",\n    \"                                 'WriteVariablesTime',\\n\",\n    \"                                 'struct_pos_node{}.dat'.format(model.num_node_surf))\\n\",\n    \"    vertical_tip_displacement = np.loadtxt(file_results)[:,-1]\\n\",\n    \"    \\n\",\n    \"                                             \\n\",\n    \"    return vertical_tip_displacement\\n\",\n    \"\\n\",\n    \"\\n\",\n    \"tip_displacement_open_loop = get_resulting_vertical_tip_displacement(output_folder, \\n\",\n    \"                                                                     pazy_model_open_loop)\\n\",\n    \"\\n\",\n    \"\\n\",\n    \"time_array = np.arange(0, len(tip_displacement_open_loop) * pazy_model_open_loop.dt, pazy_model_open_loop.dt)\\n\",\n    \"normalised_tip_displacement = tip_displacement_open_loop/ (0.5*pazy_model_open_loop.b_ref) #normalise by half wing span\\n\",\n    \"normalised_tip_displacement *=100# cconvert to percentnvert to percent\\n\",\n    \"plt.plot(time_array, normalised_tip_displacement)\\n\",\n    \"plt.xlabel('time, sec')\\n\",\n    \"plt.ylabel('$z_{tip}/(b_{ref}/2)$, %')\\n\",\n    \"plt.xlim([0., simulation_time])\\n\",\n    \"plt.grid()\\n\",\n    \"plt.show()\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## Generate linear ROM\\n\",\n    \"\\n\",\n    \"We continue with the linearization of the nonlinear aeroelastic model of the Pazy wing at the previously defined operational point and a subsequent reduction of the resulting linear state-space system. The structural and aerodynamic models are linearized and reduced separately and finally couple both resulting linear systems. Please see [2] for more details. \\n\",\n    \"\\n\",\n    \"The generation of the linear model for the coarse discretisation used, just takes a few seconds, as well as the execution of the linear response computation using Matlab. No need to skip anything here to save time. \"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"### Define Simulation Settings\\n\",\n    \"We can re-use the simulation settings from the open-loop case with a few exceptions. Besides the name, of course, we need to extend the simulation `flow` list by the solvers needed for the linearization and export of the resulting linear state-space system. Further, we need to change the simulation time as we need to run only on the simulation timestep of the `DynamicCoupled` solver before the linearization. Also, no gust encounter is needed as we linearise the model around its equilibrium during steady-flight conditions.\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 16,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"case_name = 'pazy_ROM'\\n\",\n    \"\\n\",\n    \"flow = ['BeamLoader',\\n\",\n    \"        'AerogridLoader',\\n\",\n    \"        'StaticCoupled',\\n\",\n    \"        'DynamicCoupled',\\n\",\n    \"        'Modal',\\n\",\n    \"        'LinearAssembler',\\n\",\n    \"        'SaveData',\\n\",\n    \"        ]\\n\",\n    \"\\n\",\n    \"simulation_time_ROM = pazy_model_open_loop.dt # only one timestep has to be performed\\n\",\n    \"gust = False\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"We further need to define the method used to reduce the linearized aerodynamic model. Here, we are going to apply a Krylov-based model order reduction scheme for the aerodynamic system, see [4] for more information. Please note that this is only one of the reduction methods implemented in SHARPy. We also offer various reduction schemes based on balancing methods.\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 17,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"use_rom = True\\n\",\n    \"rom_settings = {\\n\",\n    \"    'use': use_rom,\\n\",\n    \"    'rom_method': 'Krylov',\\n\",\n    \"    'rom_method_settings': {'Krylov': {\\n\",\n    \"                                        'algorithm': 'mimo_rational_arnoldi',\\n\",\n    \"                                        'r': 4, \\n\",\n    \"                                        'frequency': np.array([0]),\\n\",\n    \"                                        'single_side': 'observability',\\n\",\n    \"                                        },\\n\",\n    \"                           }\\n\",\n    \"                }\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"The linearised structural model is reduced by using modal projection and truncating non-dominant modes. Here, we keep the first 20 modes.\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 18,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"num_modes = 20\\n\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"Further, we have deactivated the unsteady force contribution before generating the linear model and indicate that for the resulting linear system, we would like to retain the gust input for our preliminary control design study.\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 19,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"unsteady_force_contribution = False\\n\",\n    \"remove_gust_input_in_statespace = False\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"### Generate Input Files\\n\",\n    \"As before, we generate all necessary input files for the simulation.\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 20,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"pazy_model_ROM = wings.PazyControlSurface(M=number_chordwise_panels,\\n\",\n    \"                                      N=number_spanwise_nodes,\\n\",\n    \"                                      Mstar_fact=wake_length_factor,\\n\",\n    \"                                      u_inf=u_inf,\\n\",\n    \"                                      alpha=alpha_deg,\\n\",\n    \"                                      rho=rho,\\n\",\n    \"                                      n_surfaces=2,\\n\",\n    \"                                      route=cases_folder + '/' + case_name,\\n\",\n    \"                                      case_name=case_name,\\n\",\n    \"                                      physical_time=simulation_time_ROM,)\\n\",\n    \"\\n\",\n    \"generate_aero_and_fem_input_files(pazy_model_ROM)\\n\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 21,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"pazy_model_ROM.set_default_config_dict()\\n\",\n    \"pazy_model_ROM.config = get_settings_udp(pazy_model_ROM,\\n\",\n    \"                            flow,\\n\",\n    \"                            num_cores=num_cores,\\n\",\n    \"                            wake_length_factor=wake_length_factor,\\n\",\n    \"                            output_folder = output_folder,\\n\",\n    \"                            gust=gust,\\n\",\n    \"                            gust_settings=gust_settings,\\n\",\n    \"                            num_modes = num_modes,\\n\",\n    \"                            rom_settings = rom_settings,\\n\",\n    \"                            remove_gust_input_in_statespace=remove_gust_input_in_statespace,\\n\",\n    \"                            unsteady_force_distribution=unsteady_force_contribution)\\n\",\n    \"pazy_model_ROM.config.write()\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"### Run SHARPy Simulation\"]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"sharpy.sharpy_main.main(['', pazy_model_ROM.route + pazy_model_ROM.case_name + '.sharpy'])\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"### Prepare Linear System for specific Controller\\n\",\n    \"An overview of the generated linear ROM can be found near the end of the log file, including the number of states, inputs, and outputs as well as the indices mapped to each parameter. The saved linear ROM contains several unused input and output variables. The final simulation is expected to take 8 hours. Again, the results are uploaded *here* and it is still recommended to check if everything is running properly instead of skipping the entire simulation.\\n\",\n    \"\\n\",\n    \"We start with reading the matrices from the h5 file and get rid of all unused input and output variables that are not needed for the control design. More precisely, we keep the gust and control surface inputs as well as the vertical tip displacements as an output. \\n\",\n    \"\\n\",\n    \"The system input includes the control surface deflection and its rate but does not know that they are related. For small timesteps, as for this case, we can assume a linear relationship through numerical gradients $\\\\dot{\\\\delta} = \\\\frac{\\\\delta - \\\\delta^-}{dt}$ with *-* indicating the previous timestep.\\n\",\n    \"\\n\",\n    \"Subsequently, we simulate the open-loop and closed-loop responses for different proportional gains of the P-controller.\\n\",\n    \"\\n\",\n    \"But first, we save some parameters needed for this to a json file which is later loaded in the control script to avoid making changes in different files. \"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 25,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"folder_linear_results =os.path.join(output_folder, pazy_model_ROM.case_name,'linear_results')\\n\",\n    \"if not os.path.exists(folder_linear_results):\\n\",\n    \"    os.makedirs(folder_linear_results)\\n\",\n    \"    \\n\",\n    \"import scipy.io\\n\",\n    \"\\n\",\n    \"parameter_matlab = {'num_aero_states': 80, # see log file\\n\",\n    \"                    'num_modes': 20,  # see log file\\n\",\n    \"                     'u_inf': float(pazy_model_ROM.u_inf),\\n\",\n    \"                    'simulation_time': simulation_time,\\n\",\n    \"                    'gust_length': float(gust_settings['gust_length']),\\n\",\n    \"                    'gust_intensity': float(gust_settings['gust_intensity']),\\n\",\n    \"                    'num_control_surfaces': num_control_surfaces,\\n\",\n    \"                    'n_nodes': number_spanwise_nodes,\\n\",\n    \"                    'control_input_start': 193 + 1, # see log file and + 1 for matlab indices\\n\",\n    \"                    'gust_input_start': 192 + 1 , # see log file and + 1 for matlab indices\\n\",\n    \"                   }\\n\",\n    \"\\n\",\n    \"scipy.io.savemat(os.path.join(folder_linear_results, 'simulation_parameters.mat'), parameter_matlab)\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"Next, the matlab script *control_design_script.m* has to be executed which runs the linear open-loop gust response of this problem as well as two linear closed-loop gust responses using a P-controller with two different gain values. This P-controller is using the deviation of the vertical tip displacement to its reference condition as an error function. Finally, the script is saving the results as txt files in your output folder. \\n\",\n    \"\\n\",\n    \"Here, we use the MATLAB Engine API for Python to run the script:\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 26,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"eng = matlab.engine.start_matlab()\\n\",\n    \"eng.control_design_script(route_notebook_dir)\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"# Clean Up Simulink Files\\n\",\n    \"import shutil\\n\",\n    \"folder_path = os.path.join(route_notebook_dir, 'slprj')\\n\",\n    \"if os.path.exists(folder_path):\\n\",\n    \"    shutil.rmtree(folder_path)\\n\",\n    \"\\n\",\n    \"file_path = os.path.join(route_notebook_dir,  'PID_linear_model.slxc')\\n\",\n    \"if os.path.exists(file_path):\\n\",\n    \"    os.remove(file_path)\\n\"\n   ]\n  },\n  {\n   \"attachments\": {},\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"### Postprocessing\\n\",\n    \"Now, let us have a look at the linear results generated:\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 27,\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"data\": {\n      \"image/png\": \"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\",\n      \"text/plain\": [\n       \"<Figure size 640x480 with 3 Axes>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    }\n   ],\n   \"source\": [\n    \"# Load linear results\\n\",\n    \"tip_deflection_linear = np.loadtxt(folder_linear_results + '/tip_deflection.txt', delimiter = ',')\\n\",\n    \"time_array_linear = np.loadtxt(folder_linear_results + '/time_array_linear.txt', delimiter = ',')\\n\",\n    \"normalised_tip_deflection_linear = tip_deflection_linear / (0.5 *pazy_model_ROM.b_ref) * 100\\n\",\n    \"control_surface_deflection_deg = np.loadtxt(folder_linear_results + '/deflection.txt', delimiter = ',')\\n\",\n    \"control_surface_deflection_rate_deg = np.loadtxt(folder_linear_results + '/deflection_rate.txt', delimiter = ',')\\n\",\n    \"\\n\",\n    \"# Plot Data\\n\",\n    \"fig, axs = plt.subplots(3, 1)\\n\",\n    \"list_linestyles = ['-', '-', '--', ':']\\n\",\n    \"list_labels = ['linear P=5', 'linear P=10', 'linear open-loop', 'nonlinear open-loop']\\n\",\n    \"for i in range(3):\\n\",\n    \"    axs[0].plot(time_array_linear, normalised_tip_deflection_linear[:,i], list_linestyles[i], label=list_labels[i])\\n\",\n    \"\\n\",\n    \"axs[0].plot(time_array, normalised_tip_displacement, list_linestyles[-1], label=list_labels[-1])\\n\",\n    \"axs[0].legend(loc ='upper right')\\n\",\n    \"axs[0].set(ylabel='$z_{tip}/(b_{ref}/2)$, %')\\n\",\n    \"\\n\",\n    \"for i in range(3):\\n\",\n    \"    axs[1].plot(time_array_linear, control_surface_deflection_deg[:,i], list_linestyles[i])\\n\",\n    \"    \\n\",\n    \"axs[1].set(ylabel='$\\\\delta$, deg')\\n\",\n    \"for i in range(3):\\n\",\n    \"    axs[2].plot(time_array_linear, control_surface_deflection_rate_deg[:,i], list_linestyles[i])\\n\",\n    \"    \\n\",\n    \"axs[2].set(ylabel='$\\\\dot{\\\\delta}$, deg/sec')\\n\",\n    \"for ax in axs.flat:\\n\",\n    \"    ax.set(xlabel='time, sec')\\n\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"We can see here the slightly higher peak tip deflection in the nonlinear response. Further, we see a significant reduction in tip deflection by the P-controller. Since we only have slightly higher aileron deflection and rates for the higher gain of P=10, we chose this gain value for the final control design applied to the nonlinear aeroelastic gust response simulation.\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## Closed-Loop Nonlinear Gust Response\\n\",\n    \"Now, we need a similar simulation setup as the open-loop nonlinear response and activate the gust again.\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 28,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"case_name = 'pazy_udp_closed_loop_gust_response'\\n\",\n    \"gust = True\\n\",\n    \"flow = ['BeamLoader',\\n\",\n    \"        'AerogridLoader',\\n\",\n    \"        'StaticCoupled',\\n\",\n    \"        'DynamicCoupled',\\n\",\n    \"        ]\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"However, we need to inform SHARPy that our aileron will receive deflection values from the network which is done by setting the control surface type of both ailerons to  `2`. The default value `0` would indicate a static deflection, and  `1` that the control surface receives deflection inputs from the  `dynamiccontrolsurface` generator. For the sake of completeness, we set the initial deflection of the ailerons to zero.    \"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 29,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"initial_cs_deflection = [0, 0]\\n\",\n    \"cs_type = 2 \"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 30,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"pazy_model_closed = wings.PazyControlSurface(M=number_chordwise_panels,\\n\",\n    \"                                      N=number_spanwise_nodes,\\n\",\n    \"                                      Mstar_fact=wake_length_factor,\\n\",\n    \"                                      u_inf=u_inf,\\n\",\n    \"                                      alpha=alpha_deg,\\n\",\n    \"                                      cs_deflection=initial_cs_deflection,\\n\",\n    \"                                      rho=rho,\\n\",\n    \"                                      n_surfaces=2,\\n\",\n    \"                                      route=cases_folder + '/' + case_name,\\n\",\n    \"                                      case_name=case_name,\\n\",\n    \"                                      physical_time=simulation_time,\\n\",\n    \"                                      cs_type=cs_type)\\n\",\n    \"generate_aero_and_fem_input_files(pazy_model_closed)\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"Next, we need to define our network settings. Therefore, we need to define the IP addresses for the server (SHARPy) and client (on whatever machine you run your computer), and the ports used. Another important input is the `variables_filename` in which we define the in and output parameters. Have a look in the file and make sure to change the position of your output node in case you make the beam discretisation finer. As we only need to measure the vertical tip displacement for our controller to work, we only have one sensor. We just save this parameter here as it is important later for the client to know, how much data it should receive from SHARPy.\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 31,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"#  Network settings for nonlinear in closed-loop simulations   \\n\",\n    \"server_ip_addr = '127.0.0.1' # SHARPy\\n\",\n    \"client_ip_addr = '127.0.0.1' # controller\\n\",\n    \"port_in_network = 64017\\n\",\n    \"port_out_network_server = 59017\\n\",\n    \"port_out_network_client = 59007  \\n\",\n    \"num_sensors = 1 \\n\",\n    \"network_settings = {'variables_filename': route_notebook_dir + '/pazy_network_info.yml', \\n\",\n    \"                                        'send_output_to_all_clients': False,\\n\",\n    \"                                        'byte_ordering': 'little',\\n\",\n    \"                                        'log_name': output_folder +'/'+ case_name + '/sharpy_network.log',\\n\",\n    \"                                        'file_log_level': 'debug',\\n\",\n    \"                                        'console_log_level': 'error',\\n\",\n    \"                                        'input_network_settings': {'address': server_ip_addr,\\n\",\n    \"                                                                        'port': port_in_network,\\n\",\n    \"                                                                        },\\n\",\n    \"                                        'output_network_settings': {'send_on_demand': False,\\n\",\n    \"                                                                        'port': port_out_network_server,\\n\",\n    \"                                                                        'address':server_ip_addr, \\n\",\n    \"                                                                        'destination_address': [client_ip_addr],\\n\",\n    \"                                                                        'destination_ports': [port_out_network_client],\\n\",\n    \"                                                                }\\n\",\n    \"                                                }\\n\",\n    \"\\n\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 32,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"pazy_model_closed.set_default_config_dict()\\n\",\n    \"pazy_model_closed.config = get_settings_udp(pazy_model_closed,\\n\",\n    \"                            flow,\\n\",\n    \"                            network_settings=network_settings,\\n\",\n    \"                            num_cores=num_cores,\\n\",\n    \"                            wake_length_factor=wake_length_factor,\\n\",\n    \"                            output_folder = output_folder,\\n\",\n    \"                            gust=gust,\\n\",\n    \"                            gust_settings=gust_settings,\\n\",\n    \"                            write_screen = False)\\n\",\n    \"pazy_model_closed.config.write()\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"As before, we save some essential parameters to a json file that is loaded from the client. This is done to avoid the need of changing parameters in different files.\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 33,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"\\n\",\n    \"dict_parameters = {\\\"server_ip_addr\\\": server_ip_addr,\\n\",\n    \"                   \\\"client_ip_addr\\\": client_ip_addr,\\n\",\n    \"                   \\\"port_in_network\\\": port_in_network,\\n\",\n    \"                   \\\"port_out_network_server\\\": port_out_network_server,\\n\",\n    \"                   \\\"port_out_network_client\\\": port_out_network_client,\\n\",\n    \"                   \\\"output_folder\\\": os.path.abspath(output_folder),\\n\",\n    \"                   \\\"dt\\\": pazy_model_closed.dt,\\n\",\n    \"                   \\\"simulation_time\\\": simulation_time,\\n\",\n    \"                   \\\"num_sensors\\\": num_sensors,\\n\",\n    \"                   \\\"initial_cs_deflection\\\": initial_cs_deflection[0],\\n\",\n    \"                   \\\"reference_deflection\\\": tip_displacement_open_loop[0],\\n\",\n    \"                  }\\n\",\n    \"with open('./parameter_UDP_control_{}.json'.format(pazy_model_closed.case_name), 'w') as fp:\\n\",\n    \"    json.dump(dict_parameters, fp)\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"Now let us start the nonlinear gust-response simulation. Within the `DynamicCoupled` solver, the network expects an input before the actual simulation start. Hence, let the script run until you enter this solver (< 1 min) and start the controller by running *pazy_PID_controller_UDP.py* located in the notebook directory. You can double-check the *sharpy_network.log* in the output folder of this case. If the network is waiting for inputs, you are good to run the client script from your terminal using Python. \\n\",\n    \"\\n\",\n    \"Note that the log file is not written here on the screen as it causes errors as the amount of output characters exceeds the available buffer size of the jupyter notebook. \"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 34,\n   \"metadata\": {\n    \"scrolled\": true\n   },\n   \"outputs\": [\n    {\n     \"name\": \"stderr\",\n     \"output_type\": \"stream\",\n     \"text\": [\n      \"fatal: not a git repository (or any of the parent directories): .git\\n\"\n     ]\n    }\n   ],\n   \"source\": [\n    \"sharpy.sharpy_main.main(['', pazy_model_closed.route + pazy_model_closed.case_name + '.sharpy']);\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## Final Postprocessing\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 35,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"control_surface_input = np.loadtxt(os.path.join(output_folder, pazy_model_closed.case_name, \\\"pazy_udp_closed_loop_gust_response_control_input\\\"))\\n\",\n    \"delta_dot = np.diff(np.rad2deg(control_surface_input))/pazy_model_closed.dt\\n\",\n    \"tip_displacement_nonlinear_P10 = np.loadtxt(os.path.join(output_folder, pazy_model_closed.case_name, \\\"pazy_udp_closed_loop_gust_response_sensor_measurement\\\"))\\n\",\n    \"time_array_nonlinear_closed_loop = np.arange(0, len(tip_displacement_nonlinear_P10) * pazy_model_closed.dt, pazy_model_closed.dt)\\n\",\n    \"tip_displacement_nonlinear_P10 /= pazy_model_closed.b_ref/2\\n\",\n    \"tip_displacement_nonlinear_P10 *= 100\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 36,\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"data\": {\n      \"image/png\": \"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fPLkSb755ht+/vln1qxZw759+3jyySft6xcvXsy0adOYPXs2R44cYc6cObz88sssXbq0xH6mTZvGc889x759+2jcuDEjRozAbDaXut7efvtt3nzzTd544w0OHDhA3759GTx4MCdOnACgoKCAfv364efnx86dO1mxYgUbNmzgqaeeKrGf3377jSNHjrBx40a++uorfvjhB2bOnFnqOMpFdaKePXs68/Bllp2drQJqdna2s0NxiKTcJLXLsi5q+y/aqwfPHiz9hpmnVXX186r62R2q+nqkqk73Lvn44YmLZS0WVV33iqruX66qWfE3/k0IUUMVFhaq0dHRamFh4WXropZEqVFLotSMwgz7skX7F6lRS6LU6dumlyjb8X8d1aglUWpCboJ92eeHP1ejlkSpUzZNKVG2+1fd1aglUeqJzBP2ZSuOrShz7D179lRvvvnmknF07Kg+//zzqqqq6rp161StVqvGxcXZ1x8+fFgF1B07dqiqqqrTp09X3d3d1ZycHHuZyZMnq507dy5xnAkTJthf16tXT33rrbfsrwH1pZdesr/Oy8tTFUVRf/31V1VVVfXll19W+/TpUyLO+Ph4FVCPHTt2xfeWlpamAurBg7b/qbGxsSqgLliw4Jp1Utr3rNVq1fj4i/9Lf/31V1Wj0ajJycmqqqpqeHi4+uWXX5bY9//93/+pXbt2LRHPxx9/fNlxjhw5ctX4pk+frrZu3dr+OjQ0VJ09e3aJMh07dlSfeML2//+jjz5S/fz81Ly8PPv6X375RdVoNGpKSoqqqqo6evRo1d/fX83Pz7eX+eCDD1RPT0/VYrFcFsO1PvNlOX879VJa586dWbhwoTNDENegKAotAlvQ1L8pTf2vcYnTVAjZl0z+q9HC3x/A6S1QcKFJWQGdG2gN4B1ysey5WNi2AL5/FN5qAe92gNVT4PRWsFoq4m0JIaqAVq1alXgdEhJCWprtjtgjR44QHh5OeHi4fX3z5s3x9fXlyJEj9mURERF4eXldcR/licPDwwMvLy/7Pnbv3s3GjRvx9PS0Py50B7lwuSwmJob777+fyMhIvL29qV/f1tocFxdX4jgdOnS4Zhylfc9169alTp069tddu3bFarVy7Ngxzp49S3x8PGPHji0R86xZsy6bgeLS9x0SYvuffeF9X7rtuHHjLos1JyeHpKQkbrrpphLLb7rpJnus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jjvucETINYazzoO6CtuzsEtPT8disRAUFFRieVBQECkpKVfcJiUl5YrlzWYz6enphISEVFi8VVV56vmf3nzzTfLz8xk2bFhFhFgtlKeeT5w4wdSpU9myZQs6nfzbKY3y1POpU6fYunUrrq6u/PDDD6Snp/PEE0+QmZkp/Yyuojz13K1bN5YtW8Z9991HUVERZrOZwYMH8+677zoi5BrDWedBaTFyIEVRSrxWVfWyZdcrf6XloqSy1vMFX331FTNmzGD58uXUrl27osKrNkpbzxaLhfvvv5+ZM2fSuHFjR4VXbZTl82y1WlEUhWXLltGpUycGDBjA/PnzWbJkibQaXUdZ6jk6Oprx48fzyiuvsHv3btasWUNsbCzjxo1zRKg1ijPOg/LVzQECAwPRarWXfftIS0u7LBu+IDg4+IrldTodAQEBFRZrVVaeer5g+fLljB07lhUrVtC7d++KDLPKK2s95+bmsmvXLvbu3ctTTz0F2E7gqqqi0+lYt24dt956q0Nir0rK83kOCQkhLCwMHx8f+7JmzZqhqioJCQk0atSoQmOuispTz6+99ho33XQTkydPBqBVq1Z4eHjQvXt3Zs2aJS36N4izzoPSYuQALi4utG/fnvXr15dYvn79erp163bFbbp27XpZ+XXr1tGhQwf0en2FxVqVlaeewdZSNGbMGL788kvpI1AKZa1nb29vDh48yL59++yPcePG0aRJE/bt20fnzp0dFXqVUp7P80033URSUhJ5eXn2ZcePH0ej0VCnTp0KjbeqKk89FxQUoNGUPH1qtVrgYouG+Pecdh6s0K7dwu7C7aCffPKJGh0drU6cOFH18PBQT58+raqqqk6dOlUdNWqUvfyF2xSfeeYZNTo6Wv3kk0/kdv1SKGs9f/nll6pOp1Pfe+89NTk52f7Iyspy1luoEspaz/8kd6WVTlnrOTc3V61Tp456zz33qIcPH1Y3bdqkNmrUSH3kkUec9RaqhLLW82effabqdDr1/fffV2NiYtStW7eqHTp0UDt16uSst1Al5Obmqnv37lX37t2rAur8+fPVvXv32odFqCznQbmUVgZWq5WkpCS8vLzKfH2zf//+vPbaa8yYMYOUlBSaN2/OihUr8PPzIycnhzNnzhAXF0dOTg4AAQEBrFixghdeeIGFCxcSEhLC66+/zu23324vIy5X1np+7733MJvN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\",\n      \"text/plain\": [\n       \"<Figure size 640x480 with 3 Axes>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    }\n   ],\n   \"source\": [\n    \"# Plot Data\\n\",\n    \"fig, axs = plt.subplots(3, 1)\\n\",\n    \"list_linestyles = ['-', '--', ':']\\n\",\n    \"list_labels = ['linear P=10', 'nonlinear P=10', 'nonlinear open-loop']\\n\",\n    \"axs[0].plot(time_array_linear, normalised_tip_deflection_linear[:,1], list_linestyles[0], label=list_labels[0])\\n\",\n    \"axs[0].plot(time_array_nonlinear_closed_loop, \\n\",\n    \"            tip_displacement_nonlinear_P10, \\n\",\n    \"            list_linestyles[1], \\n\",\n    \"            label=list_labels[1])\\n\",\n    \"axs[0].plot(time_array, normalised_tip_displacement, list_linestyles[-1], label=list_labels[-1])\\n\",\n    \"\\n\",\n    \"axs[0].legend()\\n\",\n    \"axs[0].set(ylabel='$z_{tip}/(b_{ref}/2)$, %')\\n\",\n    \"\\n\",\n    \"\\n\",\n    \"axs[1].plot(time_array_linear, control_surface_deflection_deg[:,1], list_linestyles[0])\\n\",\n    \"axs[1].plot(time_array_nonlinear_closed_loop, np.rad2deg(control_surface_input), list_linestyles[1])\\n\",\n    \"    \\n\",\n    \"axs[1].set(ylabel='$\\\\delta$, deg')\\n\",\n    \"\\n\",\n    \"axs[2].plot(time_array_linear, control_surface_deflection_rate_deg[:,0], list_linestyles[0])\\n\",\n    \"axs[2].plot(time_array_nonlinear_closed_loop[1:], \\n\",\n    \"            delta_dot, \\n\",\n    \"            list_linestyles[1])\\n\",\n    \"    \\n\",\n    \"axs[2].set(ylabel='$\\\\dot{\\\\delta}$, deg/sec')\\n\",\n    \"for ax in axs.flat:\\n\",\n    \"    ax.set(xlabel='time, sec')\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": []\n  }\n ],\n \"metadata\": {\n  \"kernelspec\": {\n   \"display_name\": \"Python 3 (ipykernel)\",\n   \"language\": \"python\",\n   \"name\": \"python3\"\n  },\n  \"language_info\": {\n   \"codemirror_mode\": {\n    \"name\": \"ipython\",\n    \"version\": 3\n   },\n   \"file_extension\": \".py\",\n   \"mimetype\": \"text/x-python\",\n   \"name\": \"python\",\n   \"nbconvert_exporter\": \"python\",\n   \"pygments_lexer\": \"ipython3\",\n   \"version\": \"3.10.12\"\n  }\n },\n \"nbformat\": 4,\n \"nbformat_minor\": 4\n}\n"
  },
  {
    "path": "docs/source/content/example_notebooks/cantilever/model_static_cantilever.py",
    "content": "import h5py as h5\nimport numpy as np\nimport os\n\ndef clean_test_files(route, case_name):\n    fem_file_name = route + '/' + case_name + '.fem.h5'\n    if os.path.isfile(fem_file_name):\n        os.remove(fem_file_name)\n\n    solver_file_name = route + '/' + case_name + '.sharpy'\n    if os.path.isfile(solver_file_name):\n        os.remove(solver_file_name)\n\n\ndef generate_fem_file(route, case_name, num_elem, deadforce=600e3, followerforce=0):\n    length = 5\n    num_node_elem=3\n    num_node = (num_node_elem - 1)*num_elem + 1\n    angle = 0. * np.pi / 180.       # Angle of the beam reference line within the x-y plane of the B frame.\n    x = (np.linspace(0, length, num_node))*np.cos(angle)\n    y = (np.linspace(0, length, num_node))*np.sin(angle)\n    z = np.zeros((num_node,))\n\n    structural_twist = np.zeros((num_elem, num_node_elem))\n\n    frame_of_reference_delta = np.zeros((num_elem, num_node_elem, 3))\n    for ielem in range(num_elem):\n        for inode in range(num_node_elem):\n            frame_of_reference_delta[ielem, inode, :] = [-np.sin(angle), np.cos(angle), 0]\n\n    scale = 1\n\n    x *= scale\n    y *= scale\n    z *= scale\n\n    conn = np.zeros((num_elem, num_node_elem), dtype=int)\n    for ielem in range(num_elem):\n        conn[ielem, :] = (np.ones((3,)) * ielem * (num_node_elem - 1)\n                          + [0, 2, 1])\n\n    # stiffness array\n    num_stiffness = 1\n    ea = 4.8e8\n    ga = 3.231e8\n    gj = 1.0e6\n    ei = 9.346e6\n    base_stiffness = np.diag([ea, ga, ga, gj, ei, ei])\n    stiffness = np.zeros((num_stiffness, 6, 6))\n    for i in range(num_stiffness):\n        stiffness[i, :, :] = base_stiffness\n\n    # element stiffness\n    elem_stiffness = np.zeros((num_elem,), dtype=int)\n\n    # mass array\n    num_mass = 1\n    m_bar = 0.   # Mass is made zero for the static analysis.\n    j = 10\n    base_mass = np.diag([m_bar, m_bar, m_bar, j, j, j])\n    mass = np.zeros((num_mass, 6, 6))\n    for i in range(num_mass):\n        mass[i, :, :] = base_mass\n    # element masses\n    elem_mass = np.zeros((num_elem,), dtype=int)\n\n    # bocos\n    boundary_conditions = np.zeros((num_node, 1), dtype=int)\n    boundary_conditions[0] = 1             # Clamped at s=0\n    boundary_conditions[-1] = -1           # Free end at s=L\n\n    # beam number\n    beam_number = np.zeros((num_elem, 1), dtype=int)\n\n    # Applied follower forces.\n    app_forces = np.zeros((num_node, 6))\n    app_forces[-1, 2] = followerforce\n\n    # Lmmped masses input -- Dead force is applied by a mass at the tip.\n    n_lumped_mass = 1\n    lumped_mass_nodes = np.array([num_node - 1], dtype=int)\n    lumped_mass = np.zeros((n_lumped_mass, ))\n    lumped_mass[0] = deadforce/9.81\n    lumped_mass_inertia = np.zeros((n_lumped_mass, 3, 3))\n    lumped_mass_position = np.zeros((n_lumped_mass, 3))\n\n    #Store in h5 format.\n    with h5.File(route + '/' + case_name + '.fem.h5', 'a') as h5file:\n        coordinates = h5file.create_dataset('coordinates', data = np.column_stack((x, y, z)))\n        conectivities = h5file.create_dataset('connectivities', data = conn)\n        num_nodes_elem_handle = h5file.create_dataset(\n            'num_node_elem', data = num_node_elem)\n        num_nodes_handle = h5file.create_dataset(\n            'num_node', data = num_node)\n        num_elem_handle = h5file.create_dataset(\n            'num_elem', data = num_elem)\n        stiffness_db_handle = h5file.create_dataset(\n            'stiffness_db', data = stiffness)\n        stiffness_handle = h5file.create_dataset(\n            'elem_stiffness', data = elem_stiffness)\n        mass_db_handle = h5file.create_dataset(\n            'mass_db', data = mass)\n        mass_handle = h5file.create_dataset(\n            'elem_mass', data = elem_mass)\n        frame_of_reference_delta_handle = h5file.create_dataset(\n            'frame_of_reference_delta', data=frame_of_reference_delta)\n        structural_twist_handle = h5file.create_dataset(\n            'structural_twist', data=structural_twist)\n        bocos_handle = h5file.create_dataset(\n            'boundary_conditions', data=boundary_conditions)\n        beam_handle = h5file.create_dataset(\n            'beam_number', data=beam_number)\n        app_forces_handle = h5file.create_dataset(\n            'app_forces', data=app_forces)\n        lumped_mass_nodes_handle = h5file.create_dataset(\n            'lumped_mass_nodes', data=lumped_mass_nodes)\n        lumped_mass_handle = h5file.create_dataset(\n            'lumped_mass', data=lumped_mass)\n        lumped_mass_inertia_handle = h5file.create_dataset(\n            'lumped_mass_inertia', data=lumped_mass_inertia)\n        lumped_mass_position_handle = h5file.create_dataset(\n            'lumped_mass_position', data=lumped_mass_position)\n    return num_node, coordinates\n\n\n# Solver options\ndef generate_solver_file (route, case_name):\n    file_name = route + '/' + case_name + '.sharpy'\n    import configobj\n    config = configobj.ConfigObj()\n    config.filename = file_name\n    config['SHARPy'] = {'case': case_name,\n                        'route': route,\n                        'flow': ['BeamLoader', 'NonLinearStatic'],\n                        'write_screen': 'off',\n                        'write_log': 'on',\n                        'log_folder': route + '/output/',\n                        'log_file': case_name + '.log'}\n    config['BeamLoader'] = {'unsteady': 'off'}\n    config['NonLinearStatic'] = {'print_info': 'off',\n                                 'max_iterations': 99,      # Default 99\n                                 'num_load_steps': 10,      # Default 10\n                                 'delta_curved': 1e-5,\n                                 'min_delta': 1e-8,         # Default 1e-8\n                                 'gravity_on': 'on',\n                                 'gravity': 9.81}\n    config.write()\n\n# eof\n"
  },
  {
    "path": "docs/source/content/example_notebooks/cantilever/static_cantilever.ipynb",
    "content": "{\n \"cells\": [\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"# A prismatic cantilever beam under a tip load\\n\",\n    \"\\n\",\n    \"This is an example of the geometrically-exact beam structural solver in SHARPy.\\n\",\n    \"\\n\",\n    \"Reference:\\n\",\n    \"Simpson R.J.S., Palacios R., “Numerical Aspects of Nonlinear Flexible Aircraft Flight Dynamics Modeling.” 54th AIAA/ASME/ASCE/AHS/ASC Structures, Structural Dynamics and Materials Conference, 8-11 April 2013, Boston, Massachusetts, USA [http://hdl.handle.net/10044/1/11077, http://dx.doi.org/10.2514/6.2013-1634]\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## Required Packages\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 1,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"import numpy as np\\n\",\n    \"import os\\n\",\n    \"import matplotlib.pyplot as plt\\n\",\n    \"import sharpy.sharpy_main                # used to run SHARPy from Jupyter\\n\",\n    \"import model_static_cantilever as model  # model definition\\n\",\n    \"from IPython.display import Image\\n\",\n    \"\\n\",\n    \"plt.rcParams.update({'font.size': 20})   # Large fonts in all plots\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## Problem 1: Tip vertical dead load\\n\",\n    \"Consider first a massless beam with a heavy tip mass, such that the deformations are due to the resulting dead load P. The static equilibrium will be obtained for multiple values of P=0, 100, ..., 1000 kN\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 2,\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"data\": {\n      \"image/png\": \"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\\n\",\n      \"text/plain\": [\n       \"<IPython.core.display.Image object>\"\n      ]\n     },\n     \"execution_count\": 2,\n     \"metadata\": {\n      \"image/png\": {\n       \"width\": 500\n      }\n     },\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"Image('images/cantilever.png', width=500)\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 3,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"# Define temporary files to generate sharpy models.\\n\",\n    \"case_name= 'temp'\\n\",\n    \"route = './'\\n\",\n    \"\\n\",\n    \"Nforces=10         # Number of force steps\\n\",\n    \"DeltaForce=100e3 # Increment of forces\\n\",\n    \"Nelem=20          # Number of beam elements\\n\",\n    \"\\n\",\n    \"N=2*Nelem+1\\n\",\n    \"x1=np.zeros((Nforces,N))\\n\",\n    \"z1=np.zeros((Nforces,N))\\n\",\n    \"\\n\",\n    \"#Loop through all external forces\\n\",\n    \"for jForce in range(Nforces):\\n\",\n    \"    model.clean_test_files(route, case_name)\\n\",\n    \"    model.generate_fem_file(route, case_name, Nelem, float(jForce+1)*DeltaForce)\\n\",\n    \"    model.generate_solver_file(route,case_name)\\n\",\n    \"\\n\",\n    \"    case_data=sharpy.sharpy_main.main(['', route + case_name + '.sharpy'])\\n\",\n    \"\\n\",\n    \"    x1[jForce,0:N]=case_data.structure.timestep_info[0].pos[:, 0]\\n\",\n    \"    z1[jForce,0:N]=case_data.structure.timestep_info[0].pos[:, 2]\\n\",\n    \"\\n\",\n    \"#Store initial geometry\\n\",\n    \"x0=case_data.structure.ini_info.pos[:, 0]\\n\",\n    \"z0=case_data.structure.ini_info.pos[:, 2]\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 4,\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"data\": {\n      \"image/png\": \"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0+l05OzsTH5+fuTr60t+fn7k5+dHQUFBkkJ02LBhNHPmTMn6g4ODKTEx0ehzX19f2r59O6WlpVFaWho9ePCA0tLSaNasWZLnyczMpEWLFhkIZCWys7Np9OjRtGfPHnJzczPafv31V1q0aJF4vxMTEykiIoKISFaMql24MgzDMAxjHtVeiD7kdSL6hYiiBEHoQUQXiagDEYUR0WUiKj26uvjw39LumJlE1I2IJgmC0JqIThBRUyLqT3pv6RuPovEMU1P47LPPFIVnaf744w9q3ry5gRgtFqFERJ6entS9e3fq3r07EVXuMjTF5OXlEQCTvK+XL18W/y4WiK6urvTdd99JHg+AJk+eLB7foEEDatCgAVlbW9Ovv/4qHjdlyhRaunQpEek9zyNGjKBbt27R7du36dixY3Tr1i1Zkbxu3Tr6+++/qV69elSvXj0KCAgQ/3366adp7dq1RmUGDBgguXRNdHS0pHANCgqi69evU2ZmJqWmplJqaiqlpaVRamoqDRw4ULJdubm5dPz4cbp//z6lpaWVKdyzs7Pptddeo82bN5O7uzu5u7uTh4cHubu704ULFyg6OlrMzmmKcCVi8cowDMMwaqZGCNGHXtF2RPQBET1DRM+RPiQ3iojeB3DfxPPcEwThSSKaS0QDiKgrEd0joo1E9C6Avx9F+xmmNlMsOk2hR48e9MMPPxh93q1bN5o/fz4dPnyY9u/fT7/99hs9ePDApHMWFRWJS7yUhUajIR8fH3JzcyOtVksPHjygP//8U7HM9OnTqaioiO7evUvXr1+nAwcO0I0bNwyOiYqKMriW0NBQeumll6hJkybk6upKAEij0Uiev6CggJKSkujIkSN0/75Jjzravn07jRw5koKCgsjLy0u89ueee04yvPq5554jQRCoTp06VKdOHQoMDBT3BQUFyYrXK1euEJH+Hj948IDu379P9+/fpw4dOki2Kz8/n5KTk+mPP/6ge/fuKYZJZ2dn08iRIykqKoo8PDzIw8ODPD09xb8vXLhAn332mVnitaRwXblyJd28eZOFK8MwDMM8ImqEECUiAnCDiF418VjZEedD0Trh4cYwjIr4/vvvqWfPngZitEePHvT9998TEVHnzp1pxowZBICSkpIoODjYpPMWFhaSlVXZj0NPT0+ysbGh5ORkSklJMencixYtIiL9XM4WLVpQ3759jcRe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AFcAfFng/FwAt4UQW4UQi3OOg8hew+oIYBoRnbDgW2GMMcaKBVdXV+zbtw/lypVDx44d8ddff+lVTgiBJUuWIDg4GF9++SW++OILo+5fr149/PLLL3ByckLLli1RsWJFg/YqzU9qCrEQAg8fPsSaNWuMap+x90xMTER4eLgiRuU0Gg1q1aqldd6SAbq1SH3+zs7OGDx4MG7duoU2bdqgffv2OH/+fBG1kLHiweYDUQDtkb1faRCAejnnWuQ710rPetYDOA2gMYAhAEYAqAlgC4C3iMi4fw0ZY4yxEqhSpUr48ccfQURo2bIlqlatqlcwKITAihUrEBQUhOnTp6NPnz6oVq0aYmJiDAoka9WqhY8//hipqam4f/++0esYpdaihoWF4Z133sFHH32Ezz777IUtQcxB6p6hoaFo06YNhg4diqCgIDx9KrubnFWEhIRobTEjhEBCQgIGDx6MR48eFVHLTCf1+a9atQqrVq3CX3/9hfnz5+PMmTNo2LAh+vTpg4ULF6JatWpG/7GDsRJLLosRH6YdnDU3G2cLUx7uE+XhPlEe7hPzmTlzplEZSJ8/f07NmjXLK7NgwQKDs5cam9FXHxkZGTRkyBACQL1796bU1FST6yzM8+fPaebMmSSEoLp169KVK1csfk9dCmbNXbNmDU2aNIlUKhV5enrS7t27i7R9lpScnEyfffYZOTo6KibDLv/cUh7uEwtkzWWMMcYY04fU9FV9ktqo1WrcuXMn7/9PnDihd9lccusVzbGO0d7eHmFhYZg3bx42b96Md955BytWrLDoyJharcb06dPx448/IiEhAT4+Phg5cmSRjca5u7u/kCxq4MCBmDt3Lk6dOgV3d3d07doVgYGBSExMxIYNG4rVqGHZsmUREhKCl19+WetacUnaxJil2RV1AxhjjDFWfJkSDObPWLtjxw6DygLZ6xjj4uK0zru7u+tVvjBCCHzyySeoXr06+vbti5MnT+at38ydBgxkT/U0p/feew/nz59H27ZtsXz58rzzlrynIRo3boyYmJi8db7fffcd0tLSkJGRoah2mkP+P5bkVxySNjFmaQaNiAoh1gghvhZCyP4EF0L4CSEss3qfMcYYYzZFLgOprsykUq959dVXDSoLSCedUalUSEpKQkREhF516KNnz57w8PCw6t6flStXRlpamtZ5pYzGOTg4YMaMGYiJ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YcIEOnfuzPTp0xNe+TXeditnnXVWteqrjHSE32jR+40OGTKEWbNmUVxczFNPPUXXrl2ZOHGitngRqUGyOogCU4DTCQLkGmCUmY2O+uge9Z7zgI+AP5VvdPd/A5cTLHi02MymmdkdwPvAzwiC6tNJ/WpEREQkpcaNG0fPnj0ZOnQoLVq0qFbIqVWrFuvXr6/QXp3hrdFPB1u3bk379u3585//zOzZs6vUV2XFC7/nnHNOUq5XWXl5eYwcOZK5c+eyfPlyhg8fri1eRGqQbA+i7SLHpsAo4JYYH90r25m7zwa6Eew9egHwW2A3MBwYWMXFj0RERCTD1a5dm379+vHdd9+xbt26aoec1atXx2yvzvDW8k8HV65cydtvv83xxx/PgAEDmDdvXpX7q8z1yoffH/7whxx55JFMnjyZBx98MPTrVVXfvn1p0qRJhfZUzmMVkfBldRB19+7ubgf4GB31nkcj7ZfG6XOpu5/u7ge7e3137+juE6s571REREQy3NixYxNerCeZw1sPOugg5s2bR8eOHTn//PN57bXXDvymKopezOm9996jT58+DB06NOafT6qVlpbGbE/VPFYRCV9WB1ERERGRRMULM1UJObGGt+bl5XHLLbckVNteTZo0YeHChRxxxBGcddZZjBo1KqnzJQsKCnjhhRcoKirihhtuYMSIEZSV7XcZjqSKF+hbtIhe8kNEsoWCqIiIiOS0MJ5mRg9vbdq0KWVlZSxcuDC0AHfooYfyyiuv0KhRI2699dakz5fMz8/n8ccf57e//S0TJkyge/fuFBYWfh9+N2/eHOr19ifePNYtW7awYMGClNUhIuFREBUREZGcFi/kXH755VXqp/zw1g0bNjB27FhmzJjBzTffHFapNGvWjFq1alVoT9Z8yby8PCZNmsQFF1zAm2++ycqVK78PvyUlJSlbLCjWFi8TJkzg8MMPp2/fvhkxfFhEqkZBVERERHJarMV6DjnkEKZNm8amTZuq3e/111/P0KFDuf3225k2bVpo9a5duzZme7LmS5oZ77zzToX2srKylC4WFL3Fy7XXXsuyZcu48MILueGGGxgwYABbt25NWT0ikhgFUREREcl50Yv1zJs3j7Vr1zJo0CC++6566xWaGffddx99+vRh2LBhLFy4MJRa07HvZ6yQ+80336R9saAGDRrw5JNPctddd/Hcc89xwgknMH78eO03KpIFFERFREREonTp0oX77ruPhQsXMmrUqGr3U7t2bZ5++mk6dOjAOeecQ8uWLRMOSLGGEpsZw4cPr3adBxIr5N5///20bNkyadesLDPjuuuuY8GCBZSUlDBixAjtNyqSBRRERURERGIYMmQIl19+ObfffjvPP/98tftp1KgRl112GTt37qS0tDThgBQ9lLh58+bUq1ePe++9l3Xr1lW7zv2JFX63bt3K9u3b+eijj5Jyzao67bTTaNy4cYV27TcqkpkUREVERETimDx5Ml26dGHQoEG0atWq2k8zJ0yYkPBepeWVH0pcWlrKX//6V9asWUOvXr0Smte6v+tFLxZ02223kZ+fz8knn8zf/va30K9ZHamePysi1acgKiIiIhJH3bp1KSoqYseOHaxdu7baTzPD2Kt0f7p27cqLL77IJ598Qu/evdmyZUso/ZYXvVhQp06dWLp0KY0aNeLUU0/ltddeC/2aVZWO+bMiUj0KoiIiIiL7MWHChAptVX2amYqA1LNnT5599lk++OADunTpQps2bZK+YM/hhx/OkiVLKCwspG/fvgkNYQ5DrCHEBQUFFBcXp6kiEYlHQVRERERkP8J4mhlvr9Ju3bpVu65YzjjjDK644gqWL1/OqlWrUrJgT8uWLXnjjTfo1KkTF1xwAU2bNk3birWxhhBPnTqVoqKilNYhIgemICoiIiKyH2E8zYwOSG3atKFTp05Mnz6duXPnhlUqAC+++GKFtmQv2HPIIYcwZMgQzIxNmzaldcXa6CHECqEimUlBVERERGQ/4j3NvO6666rUT/mAVFJSwuuvv87RRx/NwIED+eCDD8IqN+nzUeO59dZbKSsr26dNK9aKSDwKoiIiXZKH6wAAH49JREFUIiL7Ef00s2XLltStW5cZM2awa9euavfbsGFD5syZQ+PGjTnzzDPjrvhaVfGe1LZu3TqU/uOJF3RLSkqSel0RyU4KoiIiIiIHUP5p5po1a3j88cdZtmwZI0aMSKjfVq1a8dJLL/HVV1/RtWvXUBYYivcE9yc/+UmFLWTCFC8AFxQUJBTYRaRmUhAVERERqaIBAwZwzTXXMHnyZJ566qmE+jrmmGMYNmwYK1asCGWBoVjzUfv06cOCBQsYNWpUQrXuT6wAnJ+fz7Zt2zj33HPZtm1b0q4tItlHQVRERESkGu644w5OOukkhgwZwocffphQX7NmzarQlsj8yuj5qC+//DJDhgzhtttu44477kio1v1dM3rF2kceeYSpU6cyf/58fv7zn/P1118n5doikn1qp7sAERERkWyUn5/PzJkz6dSpE7169SI/P5/Vq1fTpk0biouLq7Raa7IXGDIzpkyZwrfffsvvf/97GjZsyJVXXhlK3+UVFRXF/LqbNGlCUVER3bt3Z8GCBTRr1iz0a4tIdtETUREREZFqatGiBUOGDGHdunUJDasNY4uYA6lVqxaPPfYYZ599NldddRVXXHEFbdu2Tcmen/3792fOnDl88sknnHTSSdx9990pu7aIZCYFUREREZEEPPHEExXaqjqsNt4CQ2E/tczPz+fpp5+mQ4cOTJkyhZKSkpTt+dm7d29eeeUV1q5dy/Dhw1N6bRHJPAqiIiIiIgkIY1ht9PzKVq1a0bhxY6ZMmcKGDRvCKhWAevXq8e9//7tCeyr2/PzZz35G48aNK6zeq/1GRXKPgqiIiIhIAsIaVlt+gaHVq1ezcOFCSktLOffcc9mxY0cYpX5v9erVMdvDmpO6P+vWrUvbtUUkcyiIioiIiCQg1rDavLw8/vjHPybUb5cuXb7fr/Syyy4LdQ/QVMxJzcRri0jmUBAVERERSUD0sNpDDz2UsrIy/vnPfybcd//+/bntttt48sknEw625aVqTmpVrt2nT5+kX1tEMoeCqIiIiEiCyg+r3bhxI7/+9a8ZN24cL774YsJ9jxw5ksGDBzN69Gh+8IMfhLLSbHR4btmyJU2aNOHuu+/m888/T7jmqly7devWdOjQgQceeIBJkyYl9doikjkUREVERERCdvfdd9OpUycGDx7MZ599llBfZkaPHj3Iy8tj48aNoa00Wz48r1mzhiVLlrBz50569uzJmjVrEqq5KtdeuXIl7777Lueddx7XXHMNo0ePDnUYsohkJgVRERERkZDVq1ePWbNmkZeXR79+/di+fXtC/Y0ePZqysrJ92sJeabZDhw4sWLCATZs20atXr9BX692funXrMnPmTC699FLGjBnD7373uwpfr4jULAqiIiIiIknQrl07nnjiCd5//30OO+ywhIbUhrFFTGV07tyZl156iS+++ILevXuzZcuWUPvfn9q1a/PQQw9x7bXXMnnyZLp160ZhYWEoQ5FFJPMoiIqIiIgkyddff03t2rXZunVrQkNq460o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\\n\",\n      \"text/plain\": [\n       \"<Figure size 1080x432 with 1 Axes>\"\n      ]\n     },\n     \"metadata\": {\n      \"needs_background\": \"light\"\n     },\n     \"output_type\": \"display_data\"\n    }\n   ],\n   \"source\": [\n    \"# Plot the deformed beam shapes\\n\",\n    \"fig= plt.subplots(1, 1, figsize=(15, 6))\\n\",\n    \"plt.scatter(x0,z0,c='black')\\n\",\n    \"plt.plot(x0,z0,c='black')\\n\",\n    \"\\n\",\n    \"for jForce in range(Nforces):\\n\",\n    \"    plt.scatter(x1[jForce,0:N],z1[jForce,0:N],c='black')\\n\",\n    \"    plt.plot(x1[jForce,0:N],z1[jForce,0:N],c='black')\\n\",\n    \"\\n\",\n    \"plt.axis('equal')\\n\",\n    \"plt.grid()\\n\",\n    \"plt.xlabel('x (m)')\\n\",\n    \"plt.ylabel('z (m)')\\n\",\n    \"plt.savefig(\\\"images/ncb1-dead-displ.eps\\\",  format='eps', dpi=1000, bbox_inches='tight')\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 5,\n   \"metadata\": {\n    \"scrolled\": true\n   },\n   \"outputs\": [\n    {\n     \"name\": \"stdout\",\n     \"output_type\": \"stream\",\n     \"text\": [\n      \"   Force       Tip z\\n\",\n      \"--------------------\\n\",\n      \"  100000     -0.4438\\n\",\n      \"  200000     -0.8672\\n\",\n      \"  300000     -1.2551\\n\",\n      \"  400000     -1.5999\\n\",\n      \"  500000     -1.9005\\n\",\n      \"  600000     -2.1597\\n\",\n      \"  700000     -2.3824\\n\",\n      \"  800000     -2.5737\\n\",\n      \"  900000     -2.7386\\n\",\n      \" 1000000     -2.8813\\n\"\n     ]\n    }\n   ],\n   \"source\": [\n    \"print('{:>8s}{:>12s}'.format('Force','Tip z'))\\n\",\n    \"dash=20*'-'; print(dash)\\n\",\n    \"for jForce in range(Nforces):\\n\",\n    \"    print('{:>8.0f}{:>12.4f}'.format((jForce+1)*DeltaForce,z1[jForce,N-1]))\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 6,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"model.clean_test_files(route, case_name)\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## Problem 2: Comparing follower and dead forces\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 7,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"#Loop through all external follower forces, again applied at the tip.\\n\",\n    \"x2=np.zeros((Nforces,N))\\n\",\n    \"z2=np.zeros((Nforces,N))\\n\",\n    \"for jForce in range(Nforces):\\n\",\n    \"    model.clean_test_files(route, case_name)\\n\",\n    \"    model.generate_fem_file(route, case_name, Nelem, 0, -float(jForce+1)*DeltaForce)\\n\",\n    \"    model.generate_solver_file(route,case_name)\\n\",\n    \"\\n\",\n    \"    case_foll=sharpy.sharpy_main.main(['', route + case_name + '.sharpy'])\\n\",\n    \"\\n\",\n    \"    x2[jForce,0:N]=case_foll.structure.timestep_info[0].pos[:, 0]\\n\",\n    \"    z2[jForce,0:N]=case_foll.structure.timestep_info[0].pos[:, 2]\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 8,\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"name\": \"stderr\",\n     \"output_type\": \"stream\",\n     \"text\": [\n      \"The PostScript backend does not support transparency; partially transparent artists will be rendered opaque.\\n\",\n      \"The PostScript backend does not support transparency; partially transparent artists will be rendered opaque.\\n\",\n      \"The PostScript backend does not support transparency; partially transparent artists will be rendered opaque.\\n\",\n      \"The PostScript backend does not support transparency; partially transparent artists will be rendered opaque.\\n\"\n     ]\n    },\n    {\n     \"data\": {\n      \"image/png\": \"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Hc2SJUtISUkxjufk5ISfnx/33XcfW7duJTAwkMDAQOrWrUuZMjKXlhClSCVs86VtgdWidnd3Jy4ujlWrVtGvXz++/fZbli5dysGDB/H397/zAYQQ4gYTJkwAzIlcSkoKkZGRbN++nYyMDJo3b86iRYtylCxZvHgx7du3Z/DgwXz66ac8+OCDVKxYkYSEBA4ePEhERASbN2827np79dVXGTp0KE2aNKFPnz44ODiwY8cODh06RI8ePVi9erXF8b29vXn//fcZNWoUTZo04emnn8bNzY0NGzaQkpJCo0aNjImKRE7WfNIdA+wAvlRKjQbXxvYAACAASURBVNJap93pAUIUR/fdd5/xe40aNTh8+DBpaWkcOHDA6AH18vKibNmypKSkMGLECNzc3Lj//vt56KGHGDZsGA888ABnzpwhOjraWPbu3UtoaKiRtDo6OuLv728kn9mLr6+v9AoIUQwopdretMk7l21gLhPmBTzDP2MoC01h1KLu2bMnZ8+epXXr1uzfv5/GjRszbtw4Xn755VI3iYkQ4u5NnDgR+GeW29q1a9O/f3/69OlD586dc62rXrNmTcLCwpgxYwbLly9n0aJFZGZm4unpSYMGDXjppZcsxloOGTIEJycnpk2bxoIFC3B2dqZNmzbMmzeP5cuX50g2AV577TWqVavGhx9+yPz583F1daVLly783//9n8VtvSInlddOSqXUr5jrcDUGLmEuBJ2SS1Otte6QbxEWIn9/fx0dXeifA4qt0jxVebZTp06xdu1a9u7dy969ezl48CCXL18mLCyMpk2bsn79elauXEnTpk1RStG3b1+io6OJjIy0WOLj441jOjk5Ub9+fRo2bGiRhPr4+OT6R7akkveXdeR8WUcpFaa1Dr7HY2SRS8mQWzUHsoD+WuvF9/K8tmDN9TExMZGXX36ZZcuWoZTio48+4rXXXivgCIsW+f9ondJ8vqKiou5qrHNpnI32Xsj5Msvr+y0/rpHZrOnZNN3wezng/lu0k1tsRalRvXp1nn/+eWP92rVrREdH4+dnnvjx6NGjLFmyhC+//BKA119/nVatWrFs2TL69+9vPC4tLY2oqCgiIiKMBHTr1q0sWrTIaOPs7ExAQECOntDatWuXqiRUiCLkPczXPAW8C4QAobm0ywTOAVu01ocLLTob8fT0ZOnSpZQpU4bFixczatQoFi5c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\\n\",\n      \"text/plain\": [\n       \"<Figure size 1080x432 with 2 Axes>\"\n      ]\n     },\n     \"metadata\": {\n      \"needs_background\": \"light\"\n     },\n     \"output_type\": \"display_data\"\n    }\n   ],\n   \"source\": [\n    \"#Plot results.\\n\",\n    \"fig, axs = plt.subplots(nrows=1, ncols=2, figsize=(15, 6))\\n\",\n    \"\\n\",\n    \"ax0 = axs[0]\\n\",\n    \"ax0.plot([0,Nforces],[0, 0],linestyle=':', c='black')\\n\",\n    \"ax0.plot(range(Nforces+1), np.concatenate((5, x1[0:Nforces,-1]), axis=None)-5*np.ones(Nforces+1),linestyle='-', c='black')\\n\",\n    \"ax0.plot(range(Nforces+1), np.concatenate((5, x2[0:Nforces,-1]), axis=None)-5*np.ones(Nforces+1),linestyle='--', c='black')\\n\",\n    \"#ax0.axis('equal')\\n\",\n    \"ax0.grid()\\n\",\n    \"ax0.set_xlabel('Force (N) x 10^5')\\n\",\n    \"ax0.set_ylabel('Tip horizontal displacement (m)')\\n\",\n    \"ax0.set(xlim=(0, Nforces), ylim=(-6, 1))\\n\",\n    \"\\n\",\n    \"ax1 = axs[1]\\n\",\n    \"ax1.plot([0,Nforces],np.concatenate((0, z1[0,-1]*Nforces), axis=None),linestyle=':', c='black')\\n\",\n    \"ax1.plot(range(Nforces+1), np.concatenate((0, z1[0:Nforces,-1]), axis=None),linestyle='-', c='black')\\n\",\n    \"ax1.plot(range(Nforces+1), np.concatenate((0, z2[0:Nforces,-1]), axis=None),linestyle='--', c='black')\\n\",\n    \"    \\n\",\n    \"    \\n\",\n    \"#ax1.axis('equal')\\n\",\n    \"ax1.grid()\\n\",\n    \"ax1.set_xlabel('Force (N) x 10^5')\\n\",\n    \"ax1.set_ylabel('Tip vertical displacement (m)')\\n\",\n    \"ax1.set(xlim=(0, Nforces), ylim=(-5, 1))\\n\",\n    \"\\n\",\n    \"ax1.legend(['Linear','Dead','Follower'])\\n\",\n    \"\\n\",\n    \"fig.savefig(\\\"images/ncb1-foll-displ.eps\\\", format='eps', dpi=1000, bbox_inches=\\\"tight\\\")\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 9,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"model.clean_test_files(route, case_name)\"\n   ]\n  }\n ],\n \"metadata\": {\n  \"kernelspec\": {\n   \"display_name\": \"Python 3\",\n   \"language\": \"python\",\n   \"name\": \"python3\"\n  },\n  \"language_info\": {\n   \"codemirror_mode\": {\n    \"name\": \"ipython\",\n    \"version\": 3\n   },\n   \"file_extension\": \".py\",\n   \"mimetype\": \"text/x-python\",\n   \"name\": \"python\",\n   \"nbconvert_exporter\": \"python\",\n   \"pygments_lexer\": \"ipython3\",\n   \"version\": \"3.7.5\"\n  }\n },\n \"nbformat\": 4,\n \"nbformat_minor\": 2\n}\n"
  },
  {
    "path": "docs/source/content/example_notebooks/cantilever_wing.ipynb",
    "content": "{\n \"cells\": [\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {\n    \"tags\": []\n   },\n   \"source\": [\n    \"# A first test case with SHARPy\\n\",\n    \"This notebook explains how to create a prismatic cantilever and flexible wing in SHARPy. It aims to provide a big picture about the simulations available in SHARPy describing the very fundamental concepts. \\n\",\n    \"\\n\",\n    \"This notebook requires around two hours to be completed.\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## Generation of the aeroelastic model\\n\",\n    \"This section explains how to generate the input files for SHARPy including the structure, the aerodynamics and the simulation details.\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 1,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"# Loading of the used packages\\n\",\n    \"import numpy as np              # basic mathematical and array functions\\n\",\n    \"import os                       # Functions related to the operating system\\n\",\n    \"import matplotlib.pyplot as plt # Plotting library\\n\",\n    \"\\n\",\n    \"import sharpy.sharpy_main                  # Run SHARPy inside jupyter notebooks\\n\",\n    \"import sharpy.utils.plotutils as pu        # Plotting utilities\\n\",\n    \"from sharpy.utils.constants import deg2rad # Constant to conver degrees to radians\\n\",\n    \"\\n\",\n    \"import sharpy.utils.generate_cases as gc\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"The [generate cases](https://ic-sharpy.readthedocs.io/en/main/includes/utils/generate_cases/index.html) module of SHARPy includes a number of templates for the creation of simple cases using common parameters as inputs. It also removes clutter from this notebook.\\n\",\n    \"\\n\",\n    \"The following cell configures the plotting library to show the next graphics, it is not part of SHARPy.\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 2,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"%%capture\\n\",\n    \"! pip install plotly\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"### Define the problem parameters\\n\",\n    \"In this section, we define the basic parameters to generate a model for the wing shown in the image below. We use SI units for all variables.\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 3,\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<img src=\\\"https://raw.githubusercontent.com/ImperialCollegeLondon/sharpy/dev_example/docs/source/content/example_notebooks/images/simple_wing_scheme.png\\\" width=\\\"800\\\"/>\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Image object>\"\n      ]\n     },\n     \"execution_count\": 3,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"%config InlineBackend.figure_format = 'svg'\\n\",\n    \"from IPython.display import Image\\n\",\n    \"url = ('https://raw.githubusercontent.com/ImperialCollegeLondon/sharpy/dev_example/docs/' + \\n\",\n    \"       'source/content/example_notebooks/images/simple_wing_scheme.png')\\n\",\n    \"Image(url=url, width=800)\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 4,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"# Geometry\\n\",\n    \"chord = 1.         # Chord of the wing  |  Set to 1 by default\\n\",\n    \"aspect_ratio = 16. # Ratio between lenght and chord: aspect_ratio = length/chord  |  Set to 16 by default\\n\",\n    \"wake_length = 50   # Length of the wake in chord lengths  |  Set to 50 by default\\n\",\n    \"\\n\",\n    \"# Discretization\\n\",\n    \"num_node = 21           # Number of nodes in the structural discretisation\\n\",\n    \"                        # The number of nodes will also define the aerodynamic panels in the \\n\",\n    \"                        # spanwise direction  |  Set to 21 by default\\n\",\n    \"num_chord_panels = 4    # Number of aerodynamic panels in the chordwise direction  |  Set to 4 by default\\n\",\n    \"num_points_camber = 200 # The camber line of the wing will be defined by a series of (x,y)\\n\",\n    \"                        # coordintes. Here, we define the size of the (x,y) vectors  |  Set to 200 by default\\n\",\n    \"\\n\",\n    \"# Structural properties of the beam cross section\\n\",\n    \"mass_per_unit_length = 0.75 # Mass per unit length  |  Set to 0.75 by default\\n\",\n    \"mass_iner_x = 0.1           # Mass inertia around the local x axis  |  Set to 0.1 by default\\n\",\n    \"mass_iner_y = 0.05          # Mass inertia around the local y axis  |  Set to 0.05 by default\\n\",\n    \"mass_iner_z = 0.05          # Mass inertia around the local z axis  |  Set to 0.05 by default\\n\",\n    \"pos_cg_B = np.zeros((3))    # position of the centre of mass with respect to the elastic axis\\n\",\n    \"EA = 1e7                    # Axial stiffness  |  Set to 1e7 by default\\n\",\n    \"GAy = 1e6                   # Shear stiffness in the local y axis  |  Set to 1e6 by default\\n\",\n    \"GAz = 1e6                   # Shear stiffness in the local z axis  |  Set to 1e6 by default\\n\",\n    \"GJ = 1e4                    # Torsional stiffness  |  Set to 1e4 by default\\n\",\n    \"EIy = 2e4                   # Bending stiffness around the flapwise direction  |  Set to 2e4 by default\\n\",\n    \"EIz = 5e6                   # Bending stiffness around the edgewise direction  |  Set to 5e6 by default\\n\",\n    \"\\n\",\n    \"# Operation\\n\",\n    \"WSP = 2.0                # Wind speed  |  Set to 2.0 by default\\n\",\n    \"air_density = 0.1       # Air density  |  Set to 0.1 by default\\n\",\n    \"\\n\",\n    \"# Time discretization\\n\",\n    \"end_time = 5.0                  # End time of the simulation  |  Set to 5.0 by default\\n\",\n    \"dt = chord/num_chord_panels/WSP # Always keep one timestep per panel\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"First, we are going to compute the static equilibrium of the wing at an angle of attack (``aoa_ini_deg``). Next, we will change the angle of attack to ``aoa_end_deg`` and we will compute the dynamic response of the wing. Keep in mind we are not changing the angle of attack of the wing itself in these simulations but of the wind flowing toward it, which has the same effect.\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 5,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"aoa_ini_deg = 2.        # Angle of attack at the beginning of the simulation  |  Set to 2 by default\\n\",\n    \"aoa_end_deg = 1.        # Angle of attack at the end of the simulation  |  Set to 1 by default\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"For now, we keep the size of the wake panels equal to the distance covered by the flow in one time step. \"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"### Structural model\\n\",\n    \"\\n\",\n    \"This section creates a class called ``AeroelasticInformation``. This class is not directly used by SHARPy, it can be thought of as an intermediate step between common engineering inputs and the input information that SHARPy needs. \\n\",\n    \"\\n\",\n    \"It has many functionalities (rotate objects, assembly simple strucures together ...) which can be looked up in the [documentation](https://ic-sharpy.readthedocs.io/en/main/includes/utils/generate_cases/index.html).\\n\",\n    \"\\n\",\n    \"Let's initialise an Aeroelastic system that will include a ``StructuralInformation`` class and an ``AerodynamicInformation`` class:\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 6,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"wing = gc.AeroelasticInformation()\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"The attibutes that have to be defined (not all of them are compulsory) can be displayed with the code below. They constitute the input parameters to SHARPy and their names are intuitive, however, a complete description of the input variables to SHARPy can be found in the documentation: \\n\",\n    \"[structural inputs](https://ic-sharpy.readthedocs.io/en/main/content/casefiles.html#fem-file) and [aerodynamic inputs](https://ic-sharpy.readthedocs.io/en/main/content/casefiles.html#aerodynamics-file)\\n\",\n    \"\\n\",\n    \"For example, the structural properties are:\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 7,\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/plain\": [\n       \"dict_keys(['num_node_elem', 'num_node', 'num_elem', 'coordinates', 'connectivities', 'elem_stiffness', 'stiffness_db', 'elem_mass', 'mass_db', 'frame_of_reference_delta', 'structural_twist', 'boundary_conditions', 'beam_number', 'body_number', 'app_forces', 'lumped_mass_nodes', 'lumped_mass', 'lumped_mass_inertia', 'lumped_mass_position', 'lumped_mass_mat', 'lumped_mass_mat_nodes'])\"\n      ]\n     },\n     \"execution_count\": 7,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"wing.StructuralInformation.__dict__.keys()\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"For example, the connectivities between the nodes required by the finite element solver are empty so far:\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 8,\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"name\": \"stdout\",\n     \"output_type\": \"stream\",\n     \"text\": [\n      \"None\\n\"\n     ]\n    }\n   ],\n   \"source\": [\n    \"print(wing.StructuralInformation.connectivities)\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"For a list of  methods that allow us to modify the structure, Check the [documentation ](https://ic-sharpy.readthedocs.io/en/main/includes/utils/generate_cases/index.html).\\n\",\n    \"\\n\",\n    \"First, we need to define the basic characteristics of the equations as the number of nodes, the number of nodes per element, the number of elements and the location of the nodes in the space:\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 9,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"# Define the number of nodes and the number of nodes per element\\n\",\n    \"wing.StructuralInformation.num_node = num_node\\n\",\n    \"wing.StructuralInformation.num_node_elem = 3\\n\",\n    \"# Compute the number of elements assuming basic connections\\n\",\n    \"wing.StructuralInformation.compute_basic_num_elem()\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 10,\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"name\": \"stdout\",\n     \"output_type\": \"stream\",\n     \"text\": [\n      \"[[ 0.   0.   0. ]\\n\",\n      \" [ 0.   0.8  0. ]\\n\",\n      \" [ 0.   1.6  0. ]\\n\",\n      \" [ 0.   2.4  0. ]\\n\",\n      \" [ 0.   3.2  0. ]\\n\",\n      \" [ 0.   4.   0. ]\\n\",\n      \" [ 0.   4.8  0. ]\\n\",\n      \" [ 0.   5.6  0. ]\\n\",\n      \" [ 0.   6.4  0. ]\\n\",\n      \" [ 0.   7.2  0. ]\\n\",\n      \" [ 0.   8.   0. ]\\n\",\n      \" [ 0.   8.8  0. ]\\n\",\n      \" [ 0.   9.6  0. ]\\n\",\n      \" [ 0.  10.4  0. ]\\n\",\n      \" [ 0.  11.2  0. ]\\n\",\n      \" [ 0.  12.   0. ]\\n\",\n      \" [ 0.  12.8  0. ]\\n\",\n      \" [ 0.  13.6  0. ]\\n\",\n      \" [ 0.  14.4  0. ]\\n\",\n      \" [ 0.  15.2  0. ]\\n\",\n      \" [ 0.  16.   0. ]]\\n\"\n     ]\n    }\n   ],\n   \"source\": [\n    \"# Generate an array with the location of the nodes\\n\",\n    \"node_r = np.zeros((num_node, 3))\\n\",\n    \"node_r[:,1] = np.linspace(0, chord*aspect_ratio, num_node)\\n\",\n    \"print(node_r)\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"The following function creates a uniform beam from the previous parameters. On top of assigning the previous parameters, it defines other variables such as the connectivities between nodes.\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 11,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"wing.StructuralInformation.generate_uniform_beam(node_r,\\n\",\n    \"                    mass_per_unit_length,\\n\",\n    \"                    mass_iner_x,\\n\",\n    \"                    mass_iner_y,\\n\",\n    \"                    mass_iner_z,\\n\",\n    \"                    pos_cg_B,\\n\",\n    \"                    EA,\\n\",\n    \"                    GAy,\\n\",\n    \"                    GAz,\\n\",\n    \"                    GJ,\\n\",\n    \"                    EIy,\\n\",\n    \"                    EIz,\\n\",\n    \"                    num_node_elem = wing.StructuralInformation.num_node_elem,\\n\",\n    \"                    y_BFoR = 'x_AFoR',\\n\",\n    \"                    num_lumped_mass=0)\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"If we now show the connectivities between nodes, the function has created them for us. [Further information](https://ic-sharpy.readthedocs.io/en/main/content/casefiles.html?highlight=connectivities#fem-file)\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 12,\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"name\": \"stdout\",\n     \"output_type\": \"stream\",\n     \"text\": [\n      \"[[ 0  2  1]\\n\",\n      \" [ 2  4  3]\\n\",\n      \" [ 4  6  5]\\n\",\n      \" [ 6  8  7]\\n\",\n      \" [ 8 10  9]\\n\",\n      \" [10 12 11]\\n\",\n      \" [12 14 13]\\n\",\n      \" [14 16 15]\\n\",\n      \" [16 18 17]\\n\",\n      \" [18 20 19]]\\n\"\n     ]\n    }\n   ],\n   \"source\": [\n    \"print(wing.StructuralInformation.connectivities)\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"Let's define the boundary conditions as clamped for node 0 and free for the last node (-1), where 1 denotes a clamped point and -1 denotes a free point. [Further information](https://ic-sharpy.readthedocs.io/en/main/content/casefiles.html?highlight=boundary#fem-file)\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 13,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"wing.StructuralInformation.boundary_conditions[0] = 1\\n\",\n    \"wing.StructuralInformation.boundary_conditions[-1] = -1\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"### Aerodynamics\\n\",\n    \"We need to define the number of panels in the wake (``wake_panels``) and the camber line of the wing which, in this case, is flat. [Further information](https://ic-sharpy.readthedocs.io/en/main/content/casefiles.html#aerodynamics-file)\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 14,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"# Compute the number of panels in the wake (streamwise direction) based on the previous paramete\\n\",\n    \"wake_panels = int(wake_length*chord/dt)\\n\",\n    \"\\n\",\n    \"# Define the coordinates of the camber line of the wing\\n\",\n    \"wing_camber = np.zeros((1, num_points_camber, 2))\\n\",\n    \"wing_camber[0, :, 0] = np.linspace(0, 1, num_points_camber)\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"The following function creates an aerodynamic surface uniform on top of the beam that we have already created.\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 15,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"# Generate blade aerodynamics\\n\",\n    \"wing.AerodynamicInformation.create_one_uniform_aerodynamics(wing.StructuralInformation,\\n\",\n    \"                                 chord = chord,\\n\",\n    \"                                 twist = 0.,\\n\",\n    \"                                 sweep = 0.,\\n\",\n    \"                                 num_chord_panels = num_chord_panels,\\n\",\n    \"                                 m_distribution = 'uniform',\\n\",\n    \"                                 elastic_axis = 0.5,\\n\",\n    \"                                 num_points_camber = num_points_camber,\\n\",\n    \"                                 airfoil = wing_camber)\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"### Summary\\n\",\n    \"Now, we have all the inputs that we need for SHARPy. In this section, a first simulation with SHARPy is run. However, it will perform no computation, it will just load the data so we can plot the system we have just created.\\n\",\n    \"\\n\",\n    \"SHARPy runs a series of [solvers](https://ic-sharpy.readthedocs.io/en/main/content/solvers.html) and [postprocessors](https://ic-sharpy.readthedocs.io/en/main/content/postproc.html) in the order indicated by the ``flow`` variable in the ``SHARPy`` dictionary.\\n\",\n    \"\\n\",\n    \"The ``generate cases`` module also allows us to show all the avaiable solvers and all the parameters they accept as inputs. To do so, we need to run the following commands:\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 16,\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"name\": \"stdout\",\n     \"output_type\": \"stream\",\n     \"text\": [\n      \"_BaseStructural\\n\",\n      \"AerogridLoader\\n\",\n      \"BeamLoader\\n\",\n      \"DynamicCoupled\\n\",\n      \"DynamicUVLM\\n\",\n      \"InitialAeroelasticLoader\\n\",\n      \"LinDynamicSim\\n\",\n      \"LinearAssembler\\n\",\n      \"Modal\\n\",\n      \"NoAero\\n\",\n      \"NonLinearDynamic\\n\",\n      \"NonLinearDynamicCoupledStep\\n\",\n      \"NonLinearDynamicMultibody\\n\",\n      \"NonLinearDynamicPrescribedStep\\n\",\n      \"NonLinearStatic\\n\",\n      \"NoStructural\\n\",\n      \"PrescribedUvlm\\n\",\n      \"RigidDynamicCoupledStep\\n\",\n      \"RigidDynamicPrescribedStep\\n\",\n      \"StaticCoupled\\n\",\n      \"StaticTrim\\n\",\n      \"StaticUvlm\\n\",\n      \"StepLinearUVLM\\n\",\n      \"StepUvlm\\n\",\n      \"_BaseTimeIntegrator\\n\",\n      \"NewmarkBeta\\n\",\n      \"GeneralisedAlpha\\n\",\n      \"Trim\\n\",\n      \"UpdatePickle\\n\",\n      \"StabilityDerivatives\\n\",\n      \"WriteVariablesTime\\n\",\n      \"SHARPy\\n\",\n      \"SaveData\\n\",\n      \"BeamLoads\\n\",\n      \"UDPout\\n\",\n      \"SaveParametricCase\\n\",\n      \"AerogridPlot\\n\",\n      \"Cleanup\\n\",\n      \"PlotFlowField\\n\",\n      \"FrequencyResponse\\n\",\n      \"AsymptoticStability\\n\",\n      \"LiftDistribution\\n\",\n      \"AeroForcesCalculator\\n\",\n      \"StallCheck\\n\",\n      \"BeamPlot\\n\",\n      \"PickleData\\n\",\n      \"DynamicControlSurface\\n\",\n      \"FloatingForces\\n\",\n      \"TurbVelocityField\\n\",\n      \"TrajectoryGenerator\\n\",\n      \"PolarCorrection\\n\",\n      \"EfficiencyCorrection\\n\",\n      \"ModifyStructure\\n\",\n      \"GustVelocityField\\n\",\n      \"SteadyVelocityField\\n\",\n      \"HelicoidalWake\\n\",\n      \"BumpVelocityField\\n\",\n      \"GridBox\\n\",\n      \"StraightWake\\n\",\n      \"TurbVelocityFieldBts\\n\",\n      \"ShearVelocityField\\n\",\n      \"BladePitchPid\\n\",\n      \"ControlSurfacePidController\\n\",\n      \"TakeOffTrajectoryController\\n\"\n     ]\n    }\n   ],\n   \"source\": [\n    \"# Gather data about available solvers\\n\",\n    \"SimInfo = gc.SimulationInformation() # Initialises the SimulationInformation class\\n\",\n    \"SimInfo.set_default_values()         # Assigns the default values to all the solvers\\n\",\n    \"\\n\",\n    \"# Print the available solvers and postprocessors\\n\",\n    \"for key in SimInfo.solvers.keys():\\n\",\n    \"    print(key)\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"As an example, let's print the input parameters of the ``BeamLoader`` solver. This solver is in charge of loading the structural infromation.\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 17,\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/plain\": [\n       \"{'unsteady': True, 'orientation': [1.0, 0, 0, 0], 'for_pos': [0.0, 0, 0]}\"\n      ]\n     },\n     \"execution_count\": 17,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"SimInfo.solvers['BeamLoader']\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"The following dictionary defines the basic inputs of SHARPy including the solvers to be run (``flow`` variable), the case name and the route in the file system. In this case we are turning off the screen output because we are not running any computation; it is useless.\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 18,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"SimInfo.solvers['SHARPy']['flow'] = ['BeamLoader',\\n\",\n    \"                        'AerogridLoader']\\n\",\n    \"\\n\",\n    \"SimInfo.solvers['SHARPy']['case'] = 'plot'\\n\",\n    \"SimInfo.solvers['SHARPy']['route'] = './'\\n\",\n    \"SimInfo.solvers['SHARPy']['write_screen'] = 'off'\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"We do not modify any of the default input paramteters in ``BeamLoader`` but we need to define the initial wake shape that we want and its size (``wake_panels``).\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 19,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"SimInfo.solvers['AerogridLoader']['unsteady'] = 'on'\\n\",\n    \"SimInfo.solvers['AerogridLoader']['mstar'] = wake_panels\\n\",\n    \"SimInfo.solvers['AerogridLoader']['freestream_dir'] = np.array([1.,0.,0.])\\n\",\n    \"SimInfo.solvers['AerogridLoader']['wake_shape_generator'] = 'StraightWake'\\n\",\n    \"SimInfo.solvers['AerogridLoader']['wake_shape_generator_input'] = {'u_inf': WSP,\\n\",\n    \"                                                                   'u_inf_direction' : np.array(\\n\",\n    \"                                                                                         [np.cos(aoa_ini_deg*deg2rad),\\n\",\n    \"                                                                                         0.,\\n\",\n    \"                                                                                         np.sin(aoa_ini_deg*deg2rad)]),\\n\",\n    \"                                                                   'dt': dt}\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"The following functions write the input files needed by SHARPy.\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 20,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"gc.clean_test_files(SimInfo.solvers['SHARPy']['route'], SimInfo.solvers['SHARPy']['case'])\\n\",\n    \"wing.generate_h5_files(SimInfo.solvers['SHARPy']['route'], SimInfo.solvers['SHARPy']['case'])\\n\",\n    \"SimInfo.generate_solver_file()\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"The following line of code runs SHARPy inside of jupyter notebook. It is equivalent to running this in a terminal, with: ``sharpy plot.sharpy`` being \\\"plot\\\", the case name defined above.\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 21,\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"name\": \"stderr\",\n     \"output_type\": \"stream\",\n     \"text\": [\n      \"fatal: not a git repository (or any of the parent directories): .git\\n\"\n     ]\n    }\n   ],\n   \"source\": [\n    \"sharpy_output = sharpy.sharpy_main.main(['',\\n\",\n    \"                                         SimInfo.solvers['SHARPy']['route'] +\\n\",\n    \"                                         SimInfo.solvers['SHARPy']['case'] +\\n\",\n    \"                                         '.sharpy'])\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"Let's plot the case we have created. The function below provides a quick way of generating an interactive plot but it is not suitable for large cases. Luckily SHARPy has other more complex plotting capabilities.\\n\",\n    \"\\n\",\n    \"If you download the original [jupyter notebook](https://ic-sharpy.readthedocs.io/en/main/content/examples.html), change the geometric parameters above and rerun the notebook, you will see its impact on the geometry.\\n\",\n    \"\\n\",\n    \"In our simulations only the first 6 wake panels are plotted for the sake of efficiency. This can be changed by changing the number within ```minus_mstar```.\\n\",\n    \"\\n\",\n    \"Setting ```plotly``` to ```False``` will not plot a graph.\\n\",\n    \"\\n\",\n    \"```custom_scaling``` is a toggleable feature that realistically models the wing's aspect ratio and compresses the z axis. It is disabled by default.\\n\",\n    \"\\n\",\n    \"If ```custom_scaling``` is toggled on,```z_compression``` determines how compressed the z axis is. By default this is set to 0.5.\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 22,\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"        <script type=\\\"text/javascript\\\">\\n\",\n       \"        window.PlotlyConfig = {MathJaxConfig: 'local'};\\n\",\n       \"        if (window.MathJax && window.MathJax.Hub && window.MathJax.Hub.Config) {window.MathJax.Hub.Config({SVG: {font: \\\"STIX-Web\\\"}});}\\n\",\n       \"        if (typeof require !== 'undefined') {\\n\",\n       \"        require.undef(\\\"plotly\\\");\\n\",\n       \"        define('plotly', function(require, exports, module) {\\n\",\n       \"            /**\\n\",\n       \"* plotly.js v2.24.1\\n\",\n       \"* Copyright 2012-2023, Plotly, Inc.\\n\",\n       \"* All rights reserved.\\n\",\n       \"* Licensed under the MIT license\\n\",\n       \"*/\\n\",\n       \"/*! For license information please see plotly.min.js.LICENSE.txt */\\n\",\n       \"!function(t,e){\\\"object\\\"==typeof exports&&\\\"object\\\"==typeof module?module.exports=e():\\\"function\\\"==typeof define&&define.amd?define([],e):\\\"object\\\"==typeof exports?exports.Plotly=e():t.Plotly=e()}(self,(function(){return function(){var t={98847:function(t,e,r){\\\"use strict\\\";var n=r(71828),i={\\\"X,X div\\\":'direction:ltr;font-family:\\\"Open Sans\\\",verdana,arial,sans-serif;margin:0;padding:0;',\\\"X input,X button\\\":'font-family:\\\"Open Sans\\\",verdana,arial,sans-serif;',\\\"X input:focus,X button:focus\\\":\\\"outline:none;\\\",\\\"X a\\\":\\\"text-decoration:none;\\\",\\\"X a:hover\\\":\\\"text-decoration:none;\\\",\\\"X .crisp\\\":\\\"shape-rendering:crispEdges;\\\",\\\"X .user-select-none\\\":\\\"-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;-o-user-select:none;user-select:none;\\\",\\\"X svg\\\":\\\"overflow:hidden;\\\",\\\"X svg a\\\":\\\"fill:#447adb;\\\",\\\"X svg a:hover\\\":\\\"fill:#3c6dc5;\\\",\\\"X .main-svg\\\":\\\"position:absolute;top:0;left:0;pointer-events:none;\\\",\\\"X .main-svg .draglayer\\\":\\\"pointer-events:all;\\\",\\\"X .cursor-default\\\":\\\"cursor:default;\\\",\\\"X .cursor-pointer\\\":\\\"cursor:pointer;\\\",\\\"X .cursor-crosshair\\\":\\\"cursor:crosshair;\\\",\\\"X .cursor-move\\\":\\\"cursor:move;\\\",\\\"X .cursor-col-resize\\\":\\\"cursor:col-resize;\\\",\\\"X .cursor-row-resize\\\":\\\"cursor:row-resize;\\\",\\\"X .cursor-ns-resize\\\":\\\"cursor:ns-resize;\\\",\\\"X .cursor-ew-resize\\\":\\\"cursor:ew-resize;\\\",\\\"X .cursor-sw-resize\\\":\\\"cursor:sw-resize;\\\",\\\"X .cursor-s-resize\\\":\\\"cursor:s-resize;\\\",\\\"X .cursor-se-resize\\\":\\\"cursor:se-resize;\\\",\\\"X .cursor-w-resize\\\":\\\"cursor:w-resize;\\\",\\\"X .cursor-e-resize\\\":\\\"cursor:e-resize;\\\",\\\"X .cursor-nw-resize\\\":\\\"cursor:nw-resize;\\\",\\\"X .cursor-n-resize\\\":\\\"cursor:n-resize;\\\",\\\"X .cursor-ne-resize\\\":\\\"cursor:ne-resize;\\\",\\\"X .cursor-grab\\\":\\\"cursor:-webkit-grab;cursor:grab;\\\",\\\"X .modebar\\\":\\\"position:absolute;top:2px;right:2px;\\\",\\\"X .ease-bg\\\":\\\"-webkit-transition:background-color .3s ease 0s;-moz-transition:background-color .3s ease 0s;-ms-transition:background-color .3s ease 0s;-o-transition:background-color .3s ease 0s;transition:background-color .3s ease 0s;\\\",\\\"X .modebar--hover>:not(.watermark)\\\":\\\"opacity:0;-webkit-transition:opacity .3s ease 0s;-moz-transition:opacity .3s ease 0s;-ms-transition:opacity .3s ease 0s;-o-transition:opacity .3s ease 0s;transition:opacity .3s ease 0s;\\\",\\\"X:hover .modebar--hover .modebar-group\\\":\\\"opacity:1;\\\",\\\"X .modebar-group\\\":\\\"float:left;display:inline-block;box-sizing:border-box;padding-left:8px;position:relative;vertical-align:middle;white-space:nowrap;\\\",\\\"X .modebar-btn\\\":\\\"position:relative;font-size:16px;padding:3px 4px;height:22px;cursor:pointer;line-height:normal;box-sizing:border-box;\\\",\\\"X .modebar-btn svg\\\":\\\"position:relative;top:2px;\\\",\\\"X .modebar.vertical\\\":\\\"display:flex;flex-direction:column;flex-wrap:wrap;align-content:flex-end;max-height:100%;\\\",\\\"X .modebar.vertical svg\\\":\\\"top:-1px;\\\",\\\"X .modebar.vertical .modebar-group\\\":\\\"display:block;float:none;padding-left:0px;padding-bottom:8px;\\\",\\\"X .modebar.vertical .modebar-group .modebar-btn\\\":\\\"display:block;text-align:center;\\\",\\\"X [data-title]:before,X [data-title]:after\\\":\\\"position:absolute;-webkit-transform:translate3d(0, 0, 0);-moz-transform:translate3d(0, 0, 0);-ms-transform:translate3d(0, 0, 0);-o-transform:translate3d(0, 0, 0);transform:translate3d(0, 0, 0);display:none;opacity:0;z-index:1001;pointer-events:none;top:110%;right:50%;\\\",\\\"X [data-title]:hover:before,X [data-title]:hover:after\\\":\\\"display:block;opacity:1;\\\",\\\"X [data-title]:before\\\":'content:\\\"\\\";position:absolute;background:rgba(0,0,0,0);border:6px solid rgba(0,0,0,0);z-index:1002;margin-top:-12px;border-bottom-color:#69738a;margin-right:-6px;',\\\"X [data-title]:after\\\":\\\"content:attr(data-title);background:#69738a;color:#fff;padding:8px 10px;font-size:12px;line-height:12px;white-space:nowrap;margin-right:-18px;border-radius:2px;\\\",\\\"X .vertical [data-title]:before,X .vertical [data-title]:after\\\":\\\"top:0%;right:200%;\\\",\\\"X .vertical [data-title]:before\\\":\\\"border:6px solid rgba(0,0,0,0);border-left-color:#69738a;margin-top:8px;margin-right:-30px;\\\",Y:'font-family:\\\"Open Sans\\\",verdana,arial,sans-serif;position:fixed;top:50px;right:20px;z-index:10000;font-size:10pt;max-width:180px;',\\\"Y p\\\":\\\"margin:0;\\\",\\\"Y .notifier-note\\\":\\\"min-width:180px;max-width:250px;border:1px solid #fff;z-index:3000;margin:0;background-color:#8c97af;background-color:rgba(140,151,175,.9);color:#fff;padding:10px;overflow-wrap:break-word;word-wrap:break-word;-ms-hyphens:auto;-webkit-hyphens:auto;hyphens:auto;\\\",\\\"Y .notifier-close\\\":\\\"color:#fff;opacity:.8;float:right;padding:0 5px;background:none;border:none;font-size:20px;font-weight:bold;line-height:20px;\\\",\\\"Y .notifier-close:hover\\\":\\\"color:#444;text-decoration:none;cursor:pointer;\\\"};for(var a in i){var o=a.replace(/^,/,\\\" ,\\\").replace(/X/g,\\\".js-plotly-plot .plotly\\\").replace(/Y/g,\\\".plotly-notifier\\\");n.addStyleRule(o,i[a])}},98222:function(t,e,r){\\\"use strict\\\";t.exports=r(82887)},27206:function(t,e,r){\\\"use strict\\\";t.exports=r(60822)},59893:function(t,e,r){\\\"use strict\\\";t.exports=r(23381)},5224:function(t,e,r){\\\"use strict\\\";t.exports=r(83832)},59509:function(t,e,r){\\\"use strict\\\";t.exports=r(72201)},75557:function(t,e,r){\\\"use strict\\\";t.exports=r(91815)},40338:function(t,e,r){\\\"use strict\\\";t.exports=r(21462)},35080:function(t,e,r){\\\"use strict\\\";t.exports=r(51319)},61396:function(t,e,r){\\\"use strict\\\";t.exports=r(57516)},40549:function(t,e,r){\\\"use strict\\\";t.exports=r(98128)},49866:function(t,e,r){\\\"use strict\\\";t.exports=r(99442)},36089:function(t,e,r){\\\"use strict\\\";t.exports=r(93740)},19548:function(t,e,r){\\\"use strict\\\";t.exports=r(8729)},35831:function(t,e,r){\\\"use strict\\\";t.exports=r(93814)},61039:function(t,e,r){\\\"use strict\\\";t.exports=r(14382)},97040:function(t,e,r){\\\"use strict\\\";t.exports=r(51759)},77986:function(t,e,r){\\\"use strict\\\";t.exports=r(10421)},24296:function(t,e,r){\\\"use strict\\\";t.exports=r(43102)},58872:function(t,e,r){\\\"use strict\\\";t.exports=r(92165)},29626:function(t,e,r){\\\"use strict\\\";t.exports=r(3325)},65591:function(t,e,r){\\\"use strict\\\";t.exports=r(36071)},69738:function(t,e,r){\\\"use strict\\\";t.exports=r(43905)},92650:function(t,e,r){\\\"use strict\\\";t.exports=r(35902)},35630:function(t,e,r){\\\"use strict\\\";t.exports=r(69816)},73434:function(t,e,r){\\\"use strict\\\";t.exports=r(94507)},27909:function(t,e,r){\\\"use strict\\\";var n=r(19548);n.register([r(27206),r(5224),r(58872),r(65591),r(69738),r(92650),r(49866),r(25743),r(6197),r(97040),r(85461),r(73434),r(54201),r(81299),r(47645),r(35630),r(77986),r(83043),r(93005),r(96881),r(4534),r(50581),r(40549),r(77900),r(47582),r(35080),r(21641),r(17280),r(5861),r(29626),r(10021),r(65317),r(96268),r(61396),r(35831),r(16122),r(46163),r(40344),r(40338),r(48131),r(36089),r(55334),r(75557),r(19440),r(99488),r(59893),r(97393),r(98222),r(61039),r(24296),r(66398),r(59509)]),t.exports=n},46163:function(t,e,r){\\\"use strict\\\";t.exports=r(15154)},96881:function(t,e,r){\\\"use strict\\\";t.exports=r(64943)},50581:function(t,e,r){\\\"use strict\\\";t.exports=r(21164)},55334:function(t,e,r){\\\"use strict\\\";t.exports=r(54186)},65317:function(t,e,r){\\\"use strict\\\";t.exports=r(94873)},10021:function(t,e,r){\\\"use strict\\\";t.exports=r(67618)},54201:function(t,e,r){\\\"use strict\\\";t.exports=r(58810)},5861:function(t,e,r){\\\"use strict\\\";t.exports=r(20593)},16122:function(t,e,r){\\\"use strict\\\";t.exports=r(29396)},83043:function(t,e,r){\\\"use strict\\\";t.exports=r(13551)},48131:function(t,e,r){\\\"use strict\\\";t.exports=r(46858)},47582:function(t,e,r){\\\"use strict\\\";t.exports=r(17988)},21641:function(t,e,r){\\\"use strict\\\";t.exports=r(68868)},96268:function(t,e,r){\\\"use strict\\\";t.exports=r(20467)},19440:function(t,e,r){\\\"use strict\\\";t.exports=r(91271)},99488:function(t,e,r){\\\"use strict\\\";t.exports=r(21461)},97393:function(t,e,r){\\\"use strict\\\";t.exports=r(85956)},25743:function(t,e,r){\\\"use strict\\\";t.exports=r(52979)},66398:function(t,e,r){\\\"use strict\\\";t.exports=r(32275)},17280:function(t,e,r){\\\"use strict\\\";t.exports=r(6419)},77900:function(t,e,r){\\\"use strict\\\";t.exports=r(61510)},81299:function(t,e,r){\\\"use strict\\\";t.exports=r(87619)},93005:function(t,e,r){\\\"use strict\\\";t.exports=r(93601)},40344:function(t,e,r){\\\"use strict\\\";t.exports=r(96595)},47645:function(t,e,r){\\\"use strict\\\";t.exports=r(70954)},6197:function(t,e,r){\\\"use strict\\\";t.exports=r(47462)},4534:function(t,e,r){\\\"use strict\\\";t.exports=r(17659)},85461:function(t,e,r){\\\"use strict\\\";t.exports=r(19990)},82884:function(t){\\\"use strict\\\";t.exports=[{path:\\\"\\\",backoff:0},{path:\\\"M-2.4,-3V3L0.6,0Z\\\",backoff:.6},{path:\\\"M-3.7,-2.5V2.5L1.3,0Z\\\",backoff:1.3},{path:\\\"M-4.45,-3L-1.65,-0.2V0.2L-4.45,3L1.55,0Z\\\",backoff:1.55},{path:\\\"M-2.2,-2.2L-0.2,-0.2V0.2L-2.2,2.2L-1.4,3L1.6,0L-1.4,-3Z\\\",backoff:1.6},{path:\\\"M-4.4,-2.1L-0.6,-0.2V0.2L-4.4,2.1L-4,3L2,0L-4,-3Z\\\",backoff:2},{path:\\\"M2,0A2,2 0 1,1 0,-2A2,2 0 0,1 2,0Z\\\",backoff:0,noRotate:!0},{path:\\\"M2,2V-2H-2V2Z\\\",backoff:0,noRotate:!0}]},50215:function(t,e,r){\\\"use strict\\\";var n=r(82884),i=r(41940),a=r(85555),o=r(44467).templatedArray;r(24695),t.exports=o(\\\"annotation\\\",{visible:{valType:\\\"boolean\\\",dflt:!0,editType:\\\"calc+arraydraw\\\"},text:{valType:\\\"string\\\",editType:\\\"calc+arraydraw\\\"},textangle:{valType:\\\"angle\\\",dflt:0,editType:\\\"calc+arraydraw\\\"},font:i({editType:\\\"calc+arraydraw\\\",colorEditType:\\\"arraydraw\\\"}),width:{valType:\\\"number\\\",min:1,dflt:null,editType:\\\"calc+arraydraw\\\"},height:{valType:\\\"number\\\",min:1,dflt:null,editType:\\\"calc+arraydraw\\\"},opacity:{valType:\\\"number\\\",min:0,max:1,dflt:1,editType:\\\"arraydraw\\\"},align:{valType:\\\"enumerated\\\",values:[\\\"left\\\",\\\"center\\\",\\\"right\\\"],dflt:\\\"center\\\",editType:\\\"arraydraw\\\"},valign:{valType:\\\"enumerated\\\",values:[\\\"top\\\",\\\"middle\\\",\\\"bottom\\\"],dflt:\\\"middle\\\",editType:\\\"arraydraw\\\"},bgcolor:{valType:\\\"color\\\",dflt:\\\"rgba(0,0,0,0)\\\",editType:\\\"arraydraw\\\"},bordercolor:{valType:\\\"color\\\",dflt:\\\"rgba(0,0,0,0)\\\",editType:\\\"arraydraw\\\"},borderpad:{valType:\\\"number\\\",min:0,dflt:1,editType:\\\"calc+arraydraw\\\"},borderwidth:{valType:\\\"number\\\",min:0,dflt:1,editType:\\\"calc+arraydraw\\\"},showarrow:{valType:\\\"boolean\\\",dflt:!0,editType:\\\"calc+arraydraw\\\"},arrowcolor:{valType:\\\"color\\\",editType:\\\"arraydraw\\\"},arrowhead:{valType:\\\"integer\\\",min:0,max:n.length,dflt:1,editType:\\\"arraydraw\\\"},startarrowhead:{valType:\\\"integer\\\",min:0,max:n.length,dflt:1,editType:\\\"arraydraw\\\"},arrowside:{valType:\\\"flaglist\\\",flags:[\\\"end\\\",\\\"start\\\"],extras:[\\\"none\\\"],dflt:\\\"end\\\",editType:\\\"arraydraw\\\"},arrowsize:{valType:\\\"number\\\",min:.3,dflt:1,editType:\\\"calc+arraydraw\\\"},startarrowsize:{valType:\\\"number\\\",min:.3,dflt:1,editType:\\\"calc+arraydraw\\\"},arrowwidth:{valType:\\\"number\\\",min:.1,editType:\\\"calc+arraydraw\\\"},standoff:{valType:\\\"number\\\",min:0,dflt:0,editType:\\\"calc+arraydraw\\\"},startstandoff:{valType:\\\"number\\\",min:0,dflt:0,editType:\\\"calc+arraydraw\\\"},ax:{valType:\\\"any\\\",editType:\\\"calc+arraydraw\\\"},ay:{valType:\\\"any\\\",editType:\\\"calc+arraydraw\\\"},axref:{valType:\\\"enumerated\\\",dflt:\\\"pixel\\\",values:[\\\"pixel\\\",a.idRegex.x.toString()],editType:\\\"calc\\\"},ayref:{valType:\\\"enumerated\\\",dflt:\\\"pixel\\\",values:[\\\"pixel\\\",a.idRegex.y.toString()],editType:\\\"calc\\\"},xref:{valType:\\\"enumerated\\\",values:[\\\"paper\\\",a.idRegex.x.toString()],editType:\\\"calc\\\"},x:{valType:\\\"any\\\",editType:\\\"calc+arraydraw\\\"},xanchor:{valType:\\\"enumerated\\\",values:[\\\"auto\\\",\\\"left\\\",\\\"center\\\",\\\"right\\\"],dflt:\\\"auto\\\",editType:\\\"calc+arraydraw\\\"},xshift:{valType:\\\"number\\\",dflt:0,editType:\\\"calc+arraydraw\\\"},yref:{valType:\\\"enumerated\\\",values:[\\\"paper\\\",a.idRegex.y.toString()],editType:\\\"calc\\\"},y:{valType:\\\"any\\\",editType:\\\"calc+arraydraw\\\"},yanchor:{valType:\\\"enumerated\\\",values:[\\\"auto\\\",\\\"top\\\",\\\"middle\\\",\\\"bottom\\\"],dflt:\\\"auto\\\",editType:\\\"calc+arraydraw\\\"},yshift:{valType:\\\"number\\\",dflt:0,editType:\\\"calc+arraydraw\\\"},clicktoshow:{valType:\\\"enumerated\\\",values:[!1,\\\"onoff\\\",\\\"onout\\\"],dflt:!1,editType:\\\"arraydraw\\\"},xclick:{valType:\\\"any\\\",editType:\\\"arraydraw\\\"},yclick:{valType:\\\"any\\\",editType:\\\"arraydraw\\\"},hovertext:{valType:\\\"string\\\",editType:\\\"arraydraw\\\"},hoverlabel:{bgcolor:{valType:\\\"color\\\",editType:\\\"arraydraw\\\"},bordercolor:{valType:\\\"color\\\",editType:\\\"arraydraw\\\"},font:i({editType:\\\"arraydraw\\\"}),editType:\\\"arraydraw\\\"},captureevents:{valType:\\\"boolean\\\",editType:\\\"arraydraw\\\"},editType:\\\"calc\\\",_deprecated:{ref:{valType:\\\"string\\\",editType:\\\"calc\\\"}}})},3749:function(t,e,r){\\\"use strict\\\";var n=r(71828),i=r(89298),a=r(92605).draw;function o(t){var e=t._fullLayout;n.filterVisible(e.annotations).forEach((function(e){var r=i.getFromId(t,e.xref),n=i.getFromId(t,e.yref),a=i.getRefType(e.xref),o=i.getRefType(e.yref);e._extremes={},\\\"range\\\"===a&&s(e,r),\\\"range\\\"===o&&s(e,n)}))}function s(t,e){var r,n=e._id,a=n.charAt(0),o=t[a],s=t[\\\"a\\\"+a],l=t[a+\\\"ref\\\"],u=t[\\\"a\\\"+a+\\\"ref\\\"],c=t[\\\"_\\\"+a+\\\"padplus\\\"],f=t[\\\"_\\\"+a+\\\"padminus\\\"],h={x:1,y:-1}[a]*t[a+\\\"shift\\\"],p=3*t.arrowsize*t.arrowwidth||0,d=p+h,v=p-h,g=3*t.startarrowsize*t.arrowwidth||0,y=g+h,m=g-h;if(u===l){var x=i.findExtremes(e,[e.r2c(o)],{ppadplus:d,ppadminus:v}),b=i.findExtremes(e,[e.r2c(s)],{ppadplus:Math.max(c,y),ppadminus:Math.max(f,m)});r={min:[x.min[0],b.min[0]],max:[x.max[0],b.max[0]]}}else y=s?y+s:y,m=s?m-s:m,r=i.findExtremes(e,[e.r2c(o)],{ppadplus:Math.max(c,d,y),ppadminus:Math.max(f,v,m)});t._extremes[n]=r}t.exports=function(t){var e=t._fullLayout;if(n.filterVisible(e.annotations).length&&t._fullData.length)return n.syncOrAsync([a,o],t)}},44317:function(t,e,r){\\\"use strict\\\";var n=r(71828),i=r(73972),a=r(44467).arrayEditor;function o(t,e){var r,n,i,a,o,l,u,c=t._fullLayout.annotations,f=[],h=[],p=[],d=(e||[]).length;for(r=0;r<c.length;r++)if(a=(i=c[r]).clicktoshow){for(n=0;n<d;n++)if(l=(o=e[n]).xaxis,u=o.yaxis,l._id===i.xref&&u._id===i.yref&&l.d2r(o.x)===s(i._xclick,l)&&u.d2r(o.y)===s(i._yclick,u)){(i.visible?\\\"onout\\\"===a?h:p:f).push(r);break}n===d&&i.visible&&\\\"onout\\\"===a&&h.push(r)}return{on:f,off:h,explicitOff:p}}function s(t,e){return\\\"log\\\"===e.type?e.l2r(t):e.d2r(t)}t.exports={hasClickToShow:function(t,e){var r=o(t,e);return r.on.length>0||r.explicitOff.length>0},onClick:function(t,e){var r,s,l=o(t,e),u=l.on,c=l.off.concat(l.explicitOff),f={},h=t._fullLayout.annotations;if(u.length||c.length){for(r=0;r<u.length;r++)(s=a(t.layout,\\\"annotations\\\",h[u[r]])).modifyItem(\\\"visible\\\",!0),n.extendFlat(f,s.getUpdateObj());for(r=0;r<c.length;r++)(s=a(t.layout,\\\"annotations\\\",h[c[r]])).modifyItem(\\\"visible\\\",!1),n.extendFlat(f,s.getUpdateObj());return i.call(\\\"update\\\",t,{},f)}}}},25625:function(t,e,r){\\\"use strict\\\";var n=r(71828),i=r(7901);t.exports=function(t,e,r,a){a(\\\"opacity\\\");var o=a(\\\"bgcolor\\\"),s=a(\\\"bordercolor\\\"),l=i.opacity(s);a(\\\"borderpad\\\");var u=a(\\\"borderwidth\\\"),c=a(\\\"showarrow\\\");if(a(\\\"text\\\",c?\\\" \\\":r._dfltTitle.annotation),a(\\\"textangle\\\"),n.coerceFont(a,\\\"font\\\",r.font),a(\\\"width\\\"),a(\\\"align\\\"),a(\\\"height\\\")&&a(\\\"valign\\\"),c){var f,h,p=a(\\\"arrowside\\\");-1!==p.indexOf(\\\"end\\\")&&(f=a(\\\"arrowhead\\\"),h=a(\\\"arrowsize\\\")),-1!==p.indexOf(\\\"start\\\")&&(a(\\\"startarrowhead\\\",f),a(\\\"startarrowsize\\\",h)),a(\\\"arrowcolor\\\",l?e.bordercolor:i.defaultLine),a(\\\"arrowwidth\\\",2*(l&&u||1)),a(\\\"standoff\\\"),a(\\\"startstandoff\\\")}var d=a(\\\"hovertext\\\"),v=r.hoverlabel||{};if(d){var g=a(\\\"hoverlabel.bgcolor\\\",v.bgcolor||(i.opacity(o)?i.rgb(o):i.defaultLine)),y=a(\\\"hoverlabel.bordercolor\\\",v.bordercolor||i.contrast(g));n.coerceFont(a,\\\"hoverlabel.font\\\",{family:v.font.family,size:v.font.size,color:v.font.color||y})}a(\\\"captureevents\\\",!!d)}},94128:function(t,e,r){\\\"use strict\\\";var n=r(92770),i=r(58163);t.exports=function(t,e,r,a){e=e||{};var o=\\\"log\\\"===r&&\\\"linear\\\"===e.type,s=\\\"linear\\\"===r&&\\\"log\\\"===e.type;if(o||s)for(var l,u,c=t._fullLayout.annotations,f=e._id.charAt(0),h=0;h<c.length;h++)l=c[h],u=\\\"annotations[\\\"+h+\\\"].\\\",l[f+\\\"ref\\\"]===e._id&&p(f),l[\\\"a\\\"+f+\\\"ref\\\"]===e._id&&p(\\\"a\\\"+f);function p(t){var r=l[t],s=null;s=o?i(r,e.range):Math.pow(10,r),n(s)||(s=null),a(u+t,s)}}},84046:function(t,e,r){\\\"use strict\\\";var n=r(71828),i=r(89298),a=r(85501),o=r(25625),s=r(50215);function l(t,e,r){function a(r,i){return n.coerce(t,e,s,r,i)}var l=a(\\\"visible\\\"),u=a(\\\"clicktoshow\\\");if(l||u){o(t,e,r,a);for(var c=e.showarrow,f=[\\\"x\\\",\\\"y\\\"],h=[-10,-30],p={_fullLayout:r},d=0;d<2;d++){var v=f[d],g=i.coerceRef(t,e,p,v,\\\"\\\",\\\"paper\\\");if(\\\"paper\\\"!==g&&i.getFromId(p,g)._annIndices.push(e._index),i.coercePosition(e,p,a,g,v,.5),c){var y=\\\"a\\\"+v,m=i.coerceRef(t,e,p,y,\\\"pixel\\\",[\\\"pixel\\\",\\\"paper\\\"]);\\\"pixel\\\"!==m&&m!==g&&(m=e[y]=\\\"pixel\\\");var x=\\\"pixel\\\"===m?h[d]:.4;i.coercePosition(e,p,a,m,y,x)}a(v+\\\"anchor\\\"),a(v+\\\"shift\\\")}if(n.noneOrAll(t,e,[\\\"x\\\",\\\"y\\\"]),c&&n.noneOrAll(t,e,[\\\"ax\\\",\\\"ay\\\"]),u){var b=a(\\\"xclick\\\"),_=a(\\\"yclick\\\");e._xclick=void 0===b?e.x:i.cleanPosition(b,p,e.xref),e._yclick=void 0===_?e.y:i.cleanPosition(_,p,e.yref)}}}t.exports=function(t,e){a(t,e,{name:\\\"annotations\\\",handleItemDefaults:l})}},92605:function(t,e,r){\\\"use strict\\\";var n=r(39898),i=r(73972),a=r(74875),o=r(71828),s=o.strTranslate,l=r(89298),u=r(7901),c=r(91424),f=r(30211),h=r(63893),p=r(6964),d=r(28569),v=r(44467).arrayEditor,g=r(13011);function y(t,e){var r=t._fullLayout.annotations[e]||{},n=l.getFromId(t,r.xref),i=l.getFromId(t,r.yref);n&&n.setScale(),i&&i.setScale(),x(t,r,e,!1,n,i)}function m(t,e,r,n,i){var a=i[r],o=i[r+\\\"ref\\\"],s=-1!==r.indexOf(\\\"y\\\"),u=\\\"domain\\\"===l.getRefType(o),c=s?n.h:n.w;return t?u?a+(s?-e:e)/t._length:t.p2r(t.r2p(a)+e):a+(s?-e:e)/c}function x(t,e,r,a,y,x){var b,_,w=t._fullLayout,T=t._fullLayout._size,k=t._context.edits;a?(b=\\\"annotation-\\\"+a,_=a+\\\".annotations\\\"):(b=\\\"annotation\\\",_=\\\"annotations\\\");var A=v(t.layout,_,e),M=A.modifyBase,S=A.modifyItem,E=A.getUpdateObj;w._infolayer.selectAll(\\\".\\\"+b+'[data-index=\\\"'+r+'\\\"]').remove();var L=\\\"clip\\\"+w._uid+\\\"_ann\\\"+r;if(e._input&&!1!==e.visible){var C={x:{},y:{}},P=+e.textangle||0,O=w._infolayer.append(\\\"g\\\").classed(b,!0).attr(\\\"data-index\\\",String(r)).style(\\\"opacity\\\",e.opacity),I=O.append(\\\"g\\\").classed(\\\"annotation-text-g\\\",!0),D=k[e.showarrow?\\\"annotationTail\\\":\\\"annotationPosition\\\"],z=e.captureevents||k.annotationText||D,R=I.append(\\\"g\\\").style(\\\"pointer-events\\\",z?\\\"all\\\":null).call(p,\\\"pointer\\\").on(\\\"click\\\",(function(){t._dragging=!1,t.emit(\\\"plotly_clickannotation\\\",Z(n.event))}));e.hovertext&&R.on(\\\"mouseover\\\",(function(){var r=e.hoverlabel,n=r.font,i=this.getBoundingClientRect(),a=t.getBoundingClientRect();f.loneHover({x0:i.left-a.left,x1:i.right-a.left,y:(i.top+i.bottom)/2-a.top,text:e.hovertext,color:r.bgcolor,borderColor:r.bordercolor,fontFamily:n.family,fontSize:n.size,fontColor:n.color},{container:w._hoverlayer.node(),outerContainer:w._paper.node(),gd:t})})).on(\\\"mouseout\\\",(function(){f.loneUnhover(w._hoverlayer.node())}));var F=e.borderwidth,B=e.borderpad,N=F+B,j=R.append(\\\"rect\\\").attr(\\\"class\\\",\\\"bg\\\").style(\\\"stroke-width\\\",F+\\\"px\\\").call(u.stroke,e.bordercolor).call(u.fill,e.bgcolor),U=e.width||e.height,V=w._topclips.selectAll(\\\"#\\\"+L).data(U?[0]:[]);V.enter().append(\\\"clipPath\\\").classed(\\\"annclip\\\",!0).attr(\\\"id\\\",L).append(\\\"rect\\\"),V.exit().remove();var H=e.font,q=w._meta?o.templateString(e.text,w._meta):e.text,G=R.append(\\\"text\\\").classed(\\\"annotation-text\\\",!0).text(q);k.annotationText?G.call(h.makeEditable,{delegate:R,gd:t}).call(Y).on(\\\"edit\\\",(function(r){e.text=r,this.call(Y),S(\\\"text\\\",r),y&&y.autorange&&M(y._name+\\\".autorange\\\",!0),x&&x.autorange&&M(x._name+\\\".autorange\\\",!0),i.call(\\\"_guiRelayout\\\",t,E())})):G.call(Y)}else n.selectAll(\\\"#\\\"+L).remove();function Z(t){var n={index:r,annotation:e._input,fullAnnotation:e,event:t};return a&&(n.subplotId=a),n}function Y(r){return r.call(c.font,H).attr({\\\"text-anchor\\\":{left:\\\"start\\\",right:\\\"end\\\"}[e.align]||\\\"middle\\\"}),h.convertToTspans(r,t,W),r}function W(){var r=G.selectAll(\\\"a\\\");1===r.size()&&r.text()===G.text()&&R.insert(\\\"a\\\",\\\":first-child\\\").attr({\\\"xlink:xlink:href\\\":r.attr(\\\"xlink:href\\\"),\\\"xlink:xlink:show\\\":r.attr(\\\"xlink:show\\\")}).style({cursor:\\\"pointer\\\"}).node().appendChild(j.node());var n=R.select(\\\".annotation-text-math-group\\\"),f=!n.empty(),v=c.bBox((f?n:G).node()),b=v.width,_=v.height,A=e.width||b,z=e.height||_,B=Math.round(A+2*N),H=Math.round(z+2*N);function q(t,e){return\\\"auto\\\"===e&&(e=t<1/3?\\\"left\\\":t>2/3?\\\"right\\\":\\\"center\\\"),{center:0,middle:0,left:.5,bottom:-.5,right:-.5,top:.5}[e]}for(var Y=!1,W=[\\\"x\\\",\\\"y\\\"],X=0;X<W.length;X++){var J,K,$,Q,tt,et=W[X],rt=e[et+\\\"ref\\\"]||et,nt=e[\\\"a\\\"+et+\\\"ref\\\"],it={x:y,y:x}[et],at=(P+(\\\"x\\\"===et?0:-90))*Math.PI/180,ot=B*Math.cos(at),st=H*Math.sin(at),lt=Math.abs(ot)+Math.abs(st),ut=e[et+\\\"anchor\\\"],ct=e[et+\\\"shift\\\"]*(\\\"x\\\"===et?1:-1),ft=C[et],ht=l.getRefType(rt);if(it&&\\\"domain\\\"!==ht){var pt=it.r2fraction(e[et]);(pt<0||pt>1)&&(nt===rt?((pt=it.r2fraction(e[\\\"a\\\"+et]))<0||pt>1)&&(Y=!0):Y=!0),J=it._offset+it.r2p(e[et]),Q=.5}else{var dt=\\\"domain\\\"===ht;\\\"x\\\"===et?($=e[et],J=dt?it._offset+it._length*$:J=T.l+T.w*$):($=1-e[et],J=dt?it._offset+it._length*$:J=T.t+T.h*$),Q=e.showarrow?.5:$}if(e.showarrow){ft.head=J;var vt=e[\\\"a\\\"+et];if(tt=ot*q(.5,e.xanchor)-st*q(.5,e.yanchor),nt===rt){var gt=l.getRefType(nt);\\\"domain\\\"===gt?(\\\"y\\\"===et&&(vt=1-vt),ft.tail=it._offset+it._length*vt):\\\"paper\\\"===gt?\\\"y\\\"===et?(vt=1-vt,ft.tail=T.t+T.h*vt):ft.tail=T.l+T.w*vt:ft.tail=it._offset+it.r2p(vt),K=tt}else ft.tail=J+vt,K=tt+vt;ft.text=ft.tail+tt;var yt=w[\\\"x\\\"===et?\\\"width\\\":\\\"height\\\"];if(\\\"paper\\\"===rt&&(ft.head=o.constrain(ft.head,1,yt-1)),\\\"pixel\\\"===nt){var mt=-Math.max(ft.tail-3,ft.text),xt=Math.min(ft.tail+3,ft.text)-yt;mt>0?(ft.tail+=mt,ft.text+=mt):xt>0&&(ft.tail-=xt,ft.text-=xt)}ft.tail+=ct,ft.head+=ct}else K=tt=lt*q(Q,ut),ft.text=J+tt;ft.text+=ct,tt+=ct,K+=ct,e[\\\"_\\\"+et+\\\"padplus\\\"]=lt/2+K,e[\\\"_\\\"+et+\\\"padminus\\\"]=lt/2-K,e[\\\"_\\\"+et+\\\"size\\\"]=lt,e[\\\"_\\\"+et+\\\"shift\\\"]=tt}if(Y)R.remove();else{var bt=0,_t=0;if(\\\"left\\\"!==e.align&&(bt=(A-b)*(\\\"center\\\"===e.align?.5:1)),\\\"top\\\"!==e.valign&&(_t=(z-_)*(\\\"middle\\\"===e.valign?.5:1)),f)n.select(\\\"svg\\\").attr({x:N+bt-1,y:N+_t}).call(c.setClipUrl,U?L:null,t);else{var wt=N+_t-v.top,Tt=N+bt-v.left;G.call(h.positionText,Tt,wt).call(c.setClipUrl,U?L:null,t)}V.select(\\\"rect\\\").call(c.setRect,N,N,A,z),j.call(c.setRect,F/2,F/2,B-F,H-F),R.call(c.setTranslate,Math.round(C.x.text-B/2),Math.round(C.y.text-H/2)),I.attr({transform:\\\"rotate(\\\"+P+\\\",\\\"+C.x.text+\\\",\\\"+C.y.text+\\\")\\\"});var kt,At=function(r,n){O.selectAll(\\\".annotation-arrow-g\\\").remove();var l=C.x.head,f=C.y.head,h=C.x.tail+r,p=C.y.tail+n,v=C.x.text+r,b=C.y.text+n,_=o.rotationXYMatrix(P,v,b),w=o.apply2DTransform(_),A=o.apply2DTransform2(_),L=+j.attr(\\\"width\\\"),D=+j.attr(\\\"height\\\"),z=v-.5*L,F=z+L,B=b-.5*D,N=B+D,U=[[z,B,z,N],[z,N,F,N],[F,N,F,B],[F,B,z,B]].map(A);if(!U.reduce((function(t,e){return t^!!o.segmentsIntersect(l,f,l+1e6,f+1e6,e[0],e[1],e[2],e[3])}),!1)){U.forEach((function(t){var e=o.segmentsIntersect(h,p,l,f,t[0],t[1],t[2],t[3]);e&&(h=e.x,p=e.y)}));var V=e.arrowwidth,H=e.arrowcolor,q=e.arrowside,G=O.append(\\\"g\\\").style({opacity:u.opacity(H)}).classed(\\\"annotation-arrow-g\\\",!0),Z=G.append(\\\"path\\\").attr(\\\"d\\\",\\\"M\\\"+h+\\\",\\\"+p+\\\"L\\\"+l+\\\",\\\"+f).style(\\\"stroke-width\\\",V+\\\"px\\\").call(u.stroke,u.rgb(H));if(g(Z,q,e),k.annotationPosition&&Z.node().parentNode&&!a){var Y=l,W=f;if(e.standoff){var X=Math.sqrt(Math.pow(l-h,2)+Math.pow(f-p,2));Y+=e.standoff*(h-l)/X,W+=e.standoff*(p-f)/X}var J,K,$=G.append(\\\"path\\\").classed(\\\"annotation-arrow\\\",!0).classed(\\\"anndrag\\\",!0).classed(\\\"cursor-move\\\",!0).attr({d:\\\"M3,3H-3V-3H3ZM0,0L\\\"+(h-Y)+\\\",\\\"+(p-W),transform:s(Y,W)}).style(\\\"stroke-width\\\",V+6+\\\"px\\\").call(u.stroke,\\\"rgba(0,0,0,0)\\\").call(u.fill,\\\"rgba(0,0,0,0)\\\");d.init({element:$.node(),gd:t,prepFn:function(){var t=c.getTranslate(R);J=t.x,K=t.y,y&&y.autorange&&M(y._name+\\\".autorange\\\",!0),x&&x.autorange&&M(x._name+\\\".autorange\\\",!0)},moveFn:function(t,r){var n=w(J,K),i=n[0]+t,a=n[1]+r;R.call(c.setTranslate,i,a),S(\\\"x\\\",m(y,t,\\\"x\\\",T,e)),S(\\\"y\\\",m(x,r,\\\"y\\\",T,e)),e.axref===e.xref&&S(\\\"ax\\\",m(y,t,\\\"ax\\\",T,e)),e.ayref===e.yref&&S(\\\"ay\\\",m(x,r,\\\"ay\\\",T,e)),G.attr(\\\"transform\\\",s(t,r)),I.attr({transform:\\\"rotate(\\\"+P+\\\",\\\"+i+\\\",\\\"+a+\\\")\\\"})},doneFn:function(){i.call(\\\"_guiRelayout\\\",t,E());var e=document.querySelector(\\\".js-notes-box-panel\\\");e&&e.redraw(e.selectedObj)}})}}};e.showarrow&&At(0,0),D&&d.init({element:R.node(),gd:t,prepFn:function(){kt=I.attr(\\\"transform\\\")},moveFn:function(t,r){var n=\\\"pointer\\\";if(e.showarrow)e.axref===e.xref?S(\\\"ax\\\",m(y,t,\\\"ax\\\",T,e)):S(\\\"ax\\\",e.ax+t),e.ayref===e.yref?S(\\\"ay\\\",m(x,r,\\\"ay\\\",T.w,e)):S(\\\"ay\\\",e.ay+r),At(t,r);else{if(a)return;var i,o;if(y)i=m(y,t,\\\"x\\\",T,e);else{var l=e._xsize/T.w,u=e.x+(e._xshift-e.xshift)/T.w-l/2;i=d.align(u+t/T.w,l,0,1,e.xanchor)}if(x)o=m(x,r,\\\"y\\\",T,e);else{var c=e._ysize/T.h,f=e.y-(e._yshift+e.yshift)/T.h-c/2;o=d.align(f-r/T.h,c,0,1,e.yanchor)}S(\\\"x\\\",i),S(\\\"y\\\",o),y&&x||(n=d.getCursor(y?.5:i,x?.5:o,e.xanchor,e.yanchor))}I.attr({transform:s(t,r)+kt}),p(R,n)},clickFn:function(r,n){e.captureevents&&t.emit(\\\"plotly_clickannotation\\\",Z(n))},doneFn:function(){p(R),i.call(\\\"_guiRelayout\\\",t,E());var e=document.querySelector(\\\".js-notes-box-panel\\\");e&&e.redraw(e.selectedObj)}})}}}t.exports={draw:function(t){var e=t._fullLayout;e._infolayer.selectAll(\\\".annotation\\\").remove();for(var r=0;r<e.annotations.length;r++)e.annotations[r].visible&&y(t,r);return a.previousPromises(t)},drawOne:y,drawRaw:x}},13011:function(t,e,r){\\\"use strict\\\";var n=r(39898),i=r(7901),a=r(82884),o=r(71828),s=o.strScale,l=o.strRotate,u=o.strTranslate;t.exports=function(t,e,r){var o,c,f,h,p=t.node(),d=a[r.arrowhead||0],v=a[r.startarrowhead||0],g=(r.arrowwidth||1)*(r.arrowsize||1),y=(r.arrowwidth||1)*(r.startarrowsize||1),m=e.indexOf(\\\"start\\\")>=0,x=e.indexOf(\\\"end\\\")>=0,b=d.backoff*g+r.standoff,_=v.backoff*y+r.startstandoff;if(\\\"line\\\"===p.nodeName){o={x:+t.attr(\\\"x1\\\"),y:+t.attr(\\\"y1\\\")},c={x:+t.attr(\\\"x2\\\"),y:+t.attr(\\\"y2\\\")};var w=o.x-c.x,T=o.y-c.y;if(h=(f=Math.atan2(T,w))+Math.PI,b&&_&&b+_>Math.sqrt(w*w+T*T))return void D();if(b){if(b*b>w*w+T*T)return void D();var k=b*Math.cos(f),A=b*Math.sin(f);c.x+=k,c.y+=A,t.attr({x2:c.x,y2:c.y})}if(_){if(_*_>w*w+T*T)return void D();var M=_*Math.cos(f),S=_*Math.sin(f);o.x-=M,o.y-=S,t.attr({x1:o.x,y1:o.y})}}else if(\\\"path\\\"===p.nodeName){var E=p.getTotalLength(),L=\\\"\\\";if(E<b+_)return void D();var C=p.getPointAtLength(0),P=p.getPointAtLength(.1);f=Math.atan2(C.y-P.y,C.x-P.x),o=p.getPointAtLength(Math.min(_,E)),L=\\\"0px,\\\"+_+\\\"px,\\\";var O=p.getPointAtLength(E),I=p.getPointAtLength(E-.1);h=Math.atan2(O.y-I.y,O.x-I.x),c=p.getPointAtLength(Math.max(0,E-b)),L+=E-(L?_+b:b)+\\\"px,\\\"+E+\\\"px\\\",t.style(\\\"stroke-dasharray\\\",L)}function D(){t.style(\\\"stroke-dasharray\\\",\\\"0px,100px\\\")}function z(e,a,o,c){e.path&&(e.noRotate&&(o=0),n.select(p.parentNode).append(\\\"path\\\").attr({class:t.attr(\\\"class\\\"),d:e.path,transform:u(a.x,a.y)+l(180*o/Math.PI)+s(c)}).style({fill:i.rgb(r.arrowcolor),\\\"stroke-width\\\":0}))}m&&z(v,o,f,y),x&&z(d,c,h,g)}},32745:function(t,e,r){\\\"use strict\\\";var n=r(92605),i=r(44317);t.exports={moduleType:\\\"component\\\",name:\\\"annotations\\\",layoutAttributes:r(50215),supplyLayoutDefaults:r(84046),includeBasePlot:r(76325)(\\\"annotations\\\"),calcAutorange:r(3749),draw:n.draw,drawOne:n.drawOne,drawRaw:n.drawRaw,hasClickToShow:i.hasClickToShow,onClick:i.onClick,convertCoords:r(94128)}},26997:function(t,e,r){\\\"use strict\\\";var n=r(50215),i=r(30962).overrideAll,a=r(44467).templatedArray;t.exports=i(a(\\\"annotation\\\",{visible:n.visible,x:{valType:\\\"any\\\"},y:{valType:\\\"any\\\"},z:{valType:\\\"any\\\"},ax:{valType:\\\"number\\\"},ay:{valType:\\\"number\\\"},xanchor:n.xanchor,xshift:n.xshift,yanchor:n.yanchor,yshift:n.yshift,text:n.text,textangle:n.textangle,font:n.font,width:n.width,height:n.height,opacity:n.opacity,align:n.align,valign:n.valign,bgcolor:n.bgcolor,bordercolor:n.bordercolor,borderpad:n.borderpad,borderwidth:n.borderwidth,showarrow:n.showarrow,arrowcolor:n.arrowcolor,arrowhead:n.arrowhead,startarrowhead:n.startarrowhead,arrowside:n.arrowside,arrowsize:n.arrowsize,startarrowsize:n.startarrowsize,arrowwidth:n.arrowwidth,standoff:n.standoff,startstandoff:n.startstandoff,hovertext:n.hovertext,hoverlabel:n.hoverlabel,captureevents:n.captureevents}),\\\"calc\\\",\\\"from-root\\\")},5485:function(t,e,r){\\\"use strict\\\";var n=r(71828),i=r(89298);function a(t,e){var r=e.fullSceneLayout.domain,a=e.fullLayout._size,o={pdata:null,type:\\\"linear\\\",autorange:!1,range:[-1/0,1/0]};t._xa={},n.extendFlat(t._xa,o),i.setConvert(t._xa),t._xa._offset=a.l+r.x[0]*a.w,t._xa.l2p=function(){return.5*(1+t._pdata[0]/t._pdata[3])*a.w*(r.x[1]-r.x[0])},t._ya={},n.extendFlat(t._ya,o),i.setConvert(t._ya),t._ya._offset=a.t+(1-r.y[1])*a.h,t._ya.l2p=function(){return.5*(1-t._pdata[1]/t._pdata[3])*a.h*(r.y[1]-r.y[0])}}t.exports=function(t){for(var e=t.fullSceneLayout.annotations,r=0;r<e.length;r++)a(e[r],t);t.fullLayout._infolayer.selectAll(\\\".annotation-\\\"+t.id).remove()}},20226:function(t,e,r){\\\"use strict\\\";var n=r(71828),i=r(89298),a=r(85501),o=r(25625),s=r(26997);function l(t,e,r,a){function l(r,i){return n.coerce(t,e,s,r,i)}function u(t){var n=t+\\\"axis\\\",a={_fullLayout:{}};return a._fullLayout[n]=r[n],i.coercePosition(e,a,l,t,t,.5)}l(\\\"visible\\\")&&(o(t,e,a.fullLayout,l),u(\\\"x\\\"),u(\\\"y\\\"),u(\\\"z\\\"),n.noneOrAll(t,e,[\\\"x\\\",\\\"y\\\",\\\"z\\\"]),e.xref=\\\"x\\\",e.yref=\\\"y\\\",e.zref=\\\"z\\\",l(\\\"xanchor\\\"),l(\\\"yanchor\\\"),l(\\\"xshift\\\"),l(\\\"yshift\\\"),e.showarrow&&(e.axref=\\\"pixel\\\",e.ayref=\\\"pixel\\\",l(\\\"ax\\\",-10),l(\\\"ay\\\",-30),n.noneOrAll(t,e,[\\\"ax\\\",\\\"ay\\\"])))}t.exports=function(t,e,r){a(t,e,{name:\\\"annotations\\\",handleItemDefaults:l,fullLayout:r.fullLayout})}},82188:function(t,e,r){\\\"use strict\\\";var n=r(92605).drawRaw,i=r(63538),a=[\\\"x\\\",\\\"y\\\",\\\"z\\\"];t.exports=function(t){for(var e=t.fullSceneLayout,r=t.dataScale,o=e.annotations,s=0;s<o.length;s++){for(var l=o[s],u=!1,c=0;c<3;c++){var f=a[c],h=l[f],p=e[f+\\\"axis\\\"].r2fraction(h);if(p<0||p>1){u=!0;break}}u?t.fullLayout._infolayer.select(\\\".annotation-\\\"+t.id+'[data-index=\\\"'+s+'\\\"]').remove():(l._pdata=i(t.glplot.cameraParams,[e.xaxis.r2l(l.x)*r[0],e.yaxis.r2l(l.y)*r[1],e.zaxis.r2l(l.z)*r[2]]),n(t.graphDiv,l,s,t.id,l._xa,l._ya))}}},2468:function(t,e,r){\\\"use strict\\\";var n=r(73972),i=r(71828);t.exports={moduleType:\\\"component\\\",name:\\\"annotations3d\\\",schema:{subplots:{scene:{annotations:r(26997)}}},layoutAttributes:r(26997),handleDefaults:r(20226),includeBasePlot:function(t,e){var r=n.subplotsRegistry.gl3d;if(r)for(var a=r.attrRegex,o=Object.keys(t),s=0;s<o.length;s++){var l=o[s];a.test(l)&&(t[l].annotations||[]).length&&(i.pushUnique(e._basePlotModules,r),i.pushUnique(e._subplots.gl3d,l))}},convert:r(5485),draw:r(82188)}},7561:function(t,e,r){\\\"use strict\\\";t.exports=r(63489),r(94338),r(3961),r(38751),r(86825),r(37715),r(99384),r(43805),r(88874),r(83290),r(29108),r(55422),r(94320),r(31320),r(51367),r(21457)},72201:function(t,e,r){\\\"use strict\\\";var n=r(7561),i=r(71828),a=r(50606),o=a.EPOCHJD,s=a.ONEDAY,l={valType:\\\"enumerated\\\",values:i.sortObjectKeys(n.calendars),editType:\\\"calc\\\",dflt:\\\"gregorian\\\"},u=function(t,e,r,n){var a={};return a[r]=l,i.coerce(t,e,a,r,n)},c=\\\"##\\\",f={d:{0:\\\"dd\\\",\\\"-\\\":\\\"d\\\"},e:{0:\\\"d\\\",\\\"-\\\":\\\"d\\\"},a:{0:\\\"D\\\",\\\"-\\\":\\\"D\\\"},A:{0:\\\"DD\\\",\\\"-\\\":\\\"DD\\\"},j:{0:\\\"oo\\\",\\\"-\\\":\\\"o\\\"},W:{0:\\\"ww\\\",\\\"-\\\":\\\"w\\\"},m:{0:\\\"mm\\\",\\\"-\\\":\\\"m\\\"},b:{0:\\\"M\\\",\\\"-\\\":\\\"M\\\"},B:{0:\\\"MM\\\",\\\"-\\\":\\\"MM\\\"},y:{0:\\\"yy\\\",\\\"-\\\":\\\"yy\\\"},Y:{0:\\\"yyyy\\\",\\\"-\\\":\\\"yyyy\\\"},U:c,w:c,c:{0:\\\"D M d %X yyyy\\\",\\\"-\\\":\\\"D M d %X yyyy\\\"},x:{0:\\\"mm/dd/yyyy\\\",\\\"-\\\":\\\"mm/dd/yyyy\\\"}},h={};function p(t){var e=h[t];return e||(h[t]=n.instance(t))}function d(t){return i.extendFlat({},l,{description:t})}function v(t){return\\\"Sets the calendar system to use with `\\\"+t+\\\"` date data.\\\"}var g={xcalendar:d(v(\\\"x\\\"))},y=i.extendFlat({},g,{ycalendar:d(v(\\\"y\\\"))}),m=i.extendFlat({},y,{zcalendar:d(v(\\\"z\\\"))}),x=d([\\\"Sets the calendar system to use for `range` and `tick0`\\\",\\\"if this is a date axis. This does not set the calendar for\\\",\\\"interpreting data on this axis, that's specified in the trace\\\",\\\"or via the global `layout.calendar`\\\"].join(\\\" \\\"));t.exports={moduleType:\\\"component\\\",name:\\\"calendars\\\",schema:{traces:{scatter:y,bar:y,box:y,heatmap:y,contour:y,histogram:y,histogram2d:y,histogram2dcontour:y,scatter3d:m,surface:m,mesh3d:m,scattergl:y,ohlc:g,candlestick:g},layout:{calendar:d([\\\"Sets the default calendar system to use for interpreting and\\\",\\\"displaying dates throughout the plot.\\\"].join(\\\" \\\"))},subplots:{xaxis:{calendar:x},yaxis:{calendar:x},scene:{xaxis:{calendar:x},yaxis:{calendar:x},zaxis:{calendar:x}},polar:{radialaxis:{calendar:x}}},transforms:{filter:{valuecalendar:d([\\\"WARNING: All transforms are deprecated and may be removed from the API in next major version.\\\",\\\"Sets the calendar system to use for `value`, if it is a date.\\\"].join(\\\" \\\")),targetcalendar:d([\\\"WARNING: All transforms are deprecated and may be removed from the API in next major version.\\\",\\\"Sets the calendar system to use for `target`, if it is an\\\",\\\"array of dates. If `target` is a string (eg *x*) we use the\\\",\\\"corresponding trace attribute (eg `xcalendar`) if it exists,\\\",\\\"even if `targetcalendar` is provided.\\\"].join(\\\" \\\"))}}},layoutAttributes:l,handleDefaults:u,handleTraceDefaults:function(t,e,r,n){for(var i=0;i<r.length;i++)u(t,e,r[i]+\\\"calendar\\\",n.calendar)},CANONICAL_SUNDAY:{chinese:\\\"2000-01-02\\\",coptic:\\\"2000-01-03\\\",discworld:\\\"2000-01-03\\\",ethiopian:\\\"2000-01-05\\\",hebrew:\\\"5000-01-01\\\",islamic:\\\"1000-01-02\\\",julian:\\\"2000-01-03\\\",mayan:\\\"5000-01-01\\\",nanakshahi:\\\"1000-01-05\\\",nepali:\\\"2000-01-05\\\",persian:\\\"1000-01-01\\\",jalali:\\\"1000-01-01\\\",taiwan:\\\"1000-01-04\\\",thai:\\\"2000-01-04\\\",ummalqura:\\\"1400-01-06\\\"},CANONICAL_TICK:{chinese:\\\"2000-01-01\\\",coptic:\\\"2000-01-01\\\",discworld:\\\"2000-01-01\\\",ethiopian:\\\"2000-01-01\\\",hebrew:\\\"5000-01-01\\\",islamic:\\\"1000-01-01\\\",julian:\\\"2000-01-01\\\",mayan:\\\"5000-01-01\\\",nanakshahi:\\\"1000-01-01\\\",nepali:\\\"2000-01-01\\\",persian:\\\"1000-01-01\\\",jalali:\\\"1000-01-01\\\",taiwan:\\\"1000-01-01\\\",thai:\\\"2000-01-01\\\",ummalqura:\\\"1400-01-01\\\"},DFLTRANGE:{chinese:[\\\"2000-01-01\\\",\\\"2001-01-01\\\"],coptic:[\\\"1700-01-01\\\",\\\"1701-01-01\\\"],discworld:[\\\"1800-01-01\\\",\\\"1801-01-01\\\"],ethiopian:[\\\"2000-01-01\\\",\\\"2001-01-01\\\"],hebrew:[\\\"5700-01-01\\\",\\\"5701-01-01\\\"],islamic:[\\\"1400-01-01\\\",\\\"1401-01-01\\\"],julian:[\\\"2000-01-01\\\",\\\"2001-01-01\\\"],mayan:[\\\"5200-01-01\\\",\\\"5201-01-01\\\"],nanakshahi:[\\\"0500-01-01\\\",\\\"0501-01-01\\\"],nepali:[\\\"2000-01-01\\\",\\\"2001-01-01\\\"],persian:[\\\"1400-01-01\\\",\\\"1401-01-01\\\"],jalali:[\\\"1400-01-01\\\",\\\"1401-01-01\\\"],taiwan:[\\\"0100-01-01\\\",\\\"0101-01-01\\\"],thai:[\\\"2500-01-01\\\",\\\"2501-01-01\\\"],ummalqura:[\\\"1400-01-01\\\",\\\"1401-01-01\\\"]},getCal:p,worldCalFmt:function(t,e,r){for(var n,i,a,l,u,h=Math.floor((e+.05)/s)+o,d=p(r).fromJD(h),v=0;-1!==(v=t.indexOf(\\\"%\\\",v));)\\\"0\\\"===(n=t.charAt(v+1))||\\\"-\\\"===n||\\\"_\\\"===n?(a=3,i=t.charAt(v+2),\\\"_\\\"===n&&(n=\\\"-\\\")):(i=n,n=\\\"0\\\",a=2),(l=f[i])?(u=l===c?c:d.formatDate(l[n]),t=t.substr(0,v)+u+t.substr(v+a),v+=u.length):v+=a;return t}}},22399:function(t,e){\\\"use strict\\\";e.defaults=[\\\"#1f77b4\\\",\\\"#ff7f0e\\\",\\\"#2ca02c\\\",\\\"#d62728\\\",\\\"#9467bd\\\",\\\"#8c564b\\\",\\\"#e377c2\\\",\\\"#7f7f7f\\\",\\\"#bcbd22\\\",\\\"#17becf\\\"],e.defaultLine=\\\"#444\\\",e.lightLine=\\\"#eee\\\",e.background=\\\"#fff\\\",e.borderLine=\\\"#BEC8D9\\\",e.lightFraction=1e3/11},7901:function(t,e,r){\\\"use strict\\\";var n=r(84267),i=r(92770),a=r(73627).isTypedArray,o=t.exports={},s=r(22399);o.defaults=s.defaults;var l=o.defaultLine=s.defaultLine;o.lightLine=s.lightLine;var u=o.background=s.background;function c(t){if(i(t)||\\\"string\\\"!=typeof t)return t;var e=t.trim();if(\\\"rgb\\\"!==e.substr(0,3))return t;var r=e.match(/^rgba?\\\\s*\\\\(([^()]*)\\\\)$/);if(!r)return t;var n=r[1].trim().split(/\\\\s*[\\\\s,]\\\\s*/),a=\\\"a\\\"===e.charAt(3)&&4===n.length;if(!a&&3!==n.length)return t;for(var o=0;o<n.length;o++){if(!n[o].length)return t;if(n[o]=Number(n[o]),!(n[o]>=0))return t;if(3===o)n[o]>1&&(n[o]=1);else if(n[o]>=1)return t}var s=Math.round(255*n[0])+\\\", \\\"+Math.round(255*n[1])+\\\", \\\"+Math.round(255*n[2]);return a?\\\"rgba(\\\"+s+\\\", \\\"+n[3]+\\\")\\\":\\\"rgb(\\\"+s+\\\")\\\"}o.tinyRGB=function(t){var e=t.toRgb();return\\\"rgb(\\\"+Math.round(e.r)+\\\", \\\"+Math.round(e.g)+\\\", \\\"+Math.round(e.b)+\\\")\\\"},o.rgb=function(t){return o.tinyRGB(n(t))},o.opacity=function(t){return t?n(t).getAlpha():0},o.addOpacity=function(t,e){var r=n(t).toRgb();return\\\"rgba(\\\"+Math.round(r.r)+\\\", \\\"+Math.round(r.g)+\\\", \\\"+Math.round(r.b)+\\\", \\\"+e+\\\")\\\"},o.combine=function(t,e){var r=n(t).toRgb();if(1===r.a)return n(t).toRgbString();var i=n(e||u).toRgb(),a=1===i.a?i:{r:255*(1-i.a)+i.r*i.a,g:255*(1-i.a)+i.g*i.a,b:255*(1-i.a)+i.b*i.a},o={r:a.r*(1-r.a)+r.r*r.a,g:a.g*(1-r.a)+r.g*r.a,b:a.b*(1-r.a)+r.b*r.a};return n(o).toRgbString()},o.contrast=function(t,e,r){var i=n(t);return 1!==i.getAlpha()&&(i=n(o.combine(t,u))),(i.isDark()?e?i.lighten(e):u:r?i.darken(r):l).toString()},o.stroke=function(t,e){var r=n(e);t.style({stroke:o.tinyRGB(r),\\\"stroke-opacity\\\":r.getAlpha()})},o.fill=function(t,e){var r=n(e);t.style({fill:o.tinyRGB(r),\\\"fill-opacity\\\":r.getAlpha()})},o.clean=function(t){if(t&&\\\"object\\\"==typeof t){var e,r,n,i,s=Object.keys(t);for(e=0;e<s.length;e++)if(i=t[n=s[e]],\\\"color\\\"===n.substr(n.length-5))if(Array.isArray(i))for(r=0;r<i.length;r++)i[r]=c(i[r]);else t[n]=c(i);else if(\\\"colorscale\\\"===n.substr(n.length-10)&&Array.isArray(i))for(r=0;r<i.length;r++)Array.isArray(i[r])&&(i[r][1]=c(i[r][1]));else if(Array.isArray(i)){var l=i[0];if(!Array.isArray(l)&&l&&\\\"object\\\"==typeof l)for(r=0;r<i.length;r++)o.clean(i[r])}else i&&\\\"object\\\"==typeof i&&!a(i)&&o.clean(i)}}},63583:function(t,e,r){\\\"use strict\\\";var n=r(13838),i=r(41940),a=r(1426).extendFlat,o=r(30962).overrideAll;t.exports=o({orientation:{valType:\\\"enumerated\\\",values:[\\\"h\\\",\\\"v\\\"],dflt:\\\"v\\\"},thicknessmode:{valType:\\\"enumerated\\\",values:[\\\"fraction\\\",\\\"pixels\\\"],dflt:\\\"pixels\\\"},thickness:{valType:\\\"number\\\",min:0,dflt:30},lenmode:{valType:\\\"enumerated\\\",values:[\\\"fraction\\\",\\\"pixels\\\"],dflt:\\\"fraction\\\"},len:{valType:\\\"number\\\",min:0,dflt:1},x:{valType:\\\"number\\\"},xref:{valType:\\\"enumerated\\\",dflt:\\\"paper\\\",values:[\\\"container\\\",\\\"paper\\\"],editType:\\\"layoutstyle\\\"},xanchor:{valType:\\\"enumerated\\\",values:[\\\"left\\\",\\\"center\\\",\\\"right\\\"]},xpad:{valType:\\\"number\\\",min:0,dflt:10},y:{valType:\\\"number\\\"},yref:{valType:\\\"enumerated\\\",dflt:\\\"paper\\\",values:[\\\"container\\\",\\\"paper\\\"],editType:\\\"layoutstyle\\\"},yanchor:{valType:\\\"enumerated\\\",values:[\\\"top\\\",\\\"middle\\\",\\\"bottom\\\"]},ypad:{valType:\\\"number\\\",min:0,dflt:10},outlinecolor:n.linecolor,outlinewidth:n.linewidth,bordercolor:n.linecolor,borderwidth:{valType:\\\"number\\\",min:0,dflt:0},bgcolor:{valType:\\\"color\\\",dflt:\\\"rgba(0,0,0,0)\\\"},tickmode:n.minor.tickmode,nticks:n.nticks,tick0:n.tick0,dtick:n.dtick,tickvals:n.tickvals,ticktext:n.ticktext,ticks:a({},n.ticks,{dflt:\\\"\\\"}),ticklabeloverflow:a({},n.ticklabeloverflow,{}),ticklabelposition:{valType:\\\"enumerated\\\",values:[\\\"outside\\\",\\\"inside\\\",\\\"outside top\\\",\\\"inside top\\\",\\\"outside left\\\",\\\"inside left\\\",\\\"outside right\\\",\\\"inside right\\\",\\\"outside bottom\\\",\\\"inside bottom\\\"],dflt:\\\"outside\\\"},ticklen:n.ticklen,tickwidth:n.tickwidth,tickcolor:n.tickcolor,ticklabelstep:n.ticklabelstep,showticklabels:n.showticklabels,labelalias:n.labelalias,tickfont:i({}),tickangle:n.tickangle,tickformat:n.tickformat,tickformatstops:n.tickformatstops,tickprefix:n.tickprefix,showtickprefix:n.showtickprefix,ticksuffix:n.ticksuffix,showticksuffix:n.showticksuffix,separatethousands:n.separatethousands,exponentformat:n.exponentformat,minexponent:n.minexponent,showexponent:n.showexponent,title:{text:{valType:\\\"string\\\"},font:i({}),side:{valType:\\\"enumerated\\\",values:[\\\"right\\\",\\\"top\\\",\\\"bottom\\\"]}},_deprecated:{title:{valType:\\\"string\\\"},titlefont:i({}),titleside:{valType:\\\"enumerated\\\",values:[\\\"right\\\",\\\"top\\\",\\\"bottom\\\"],dflt:\\\"top\\\"}}},\\\"colorbars\\\",\\\"from-root\\\")},30939:function(t){\\\"use strict\\\";t.exports={cn:{colorbar:\\\"colorbar\\\",cbbg:\\\"cbbg\\\",cbfill:\\\"cbfill\\\",cbfills:\\\"cbfills\\\",cbline:\\\"cbline\\\",cblines:\\\"cblines\\\",cbaxis:\\\"cbaxis\\\",cbtitleunshift:\\\"cbtitleunshift\\\",cbtitle:\\\"cbtitle\\\",cboutline:\\\"cboutline\\\",crisp:\\\"crisp\\\",jsPlaceholder:\\\"js-placeholder\\\"}}},62499:function(t,e,r){\\\"use strict\\\";var n=r(71828),i=r(44467),a=r(26218),o=r(38701),s=r(96115),l=r(89426),u=r(63583);t.exports=function(t,e,r){var c=i.newContainer(e,\\\"colorbar\\\"),f=t.colorbar||{};function h(t,e){return n.coerce(f,c,u,t,e)}var p=r.margin||{t:0,b:0,l:0,r:0},d=r.width-p.l-p.r,v=r.height-p.t-p.b,g=\\\"v\\\"===h(\\\"orientation\\\"),y=h(\\\"thicknessmode\\\");h(\\\"thickness\\\",\\\"fraction\\\"===y?30/(g?d:v):30);var m=h(\\\"lenmode\\\");h(\\\"len\\\",\\\"fraction\\\"===m?1:g?v:d);var x,b,_,w=\\\"paper\\\"===h(\\\"yref\\\"),T=\\\"paper\\\"===h(\\\"xref\\\"),k=\\\"left\\\";g?(_=\\\"middle\\\",k=T?\\\"left\\\":\\\"right\\\",x=T?1.02:1,b=.5):(_=w?\\\"bottom\\\":\\\"top\\\",k=\\\"center\\\",x=.5,b=w?1.02:1),n.coerce(f,c,{x:{valType:\\\"number\\\",min:T?-2:0,max:T?3:1,dflt:x}},\\\"x\\\"),n.coerce(f,c,{y:{valType:\\\"number\\\",min:w?-2:0,max:w?3:1,dflt:b}},\\\"y\\\"),h(\\\"xanchor\\\",k),h(\\\"xpad\\\"),h(\\\"yanchor\\\",_),h(\\\"ypad\\\"),n.noneOrAll(f,c,[\\\"x\\\",\\\"y\\\"]),h(\\\"outlinecolor\\\"),h(\\\"outlinewidth\\\"),h(\\\"bordercolor\\\"),h(\\\"borderwidth\\\"),h(\\\"bgcolor\\\");var A=n.coerce(f,c,{ticklabelposition:{valType:\\\"enumerated\\\",dflt:\\\"outside\\\",values:g?[\\\"outside\\\",\\\"inside\\\",\\\"outside top\\\",\\\"inside top\\\",\\\"outside bottom\\\",\\\"inside bottom\\\"]:[\\\"outside\\\",\\\"inside\\\",\\\"outside left\\\",\\\"inside left\\\",\\\"outside right\\\",\\\"inside right\\\"]}},\\\"ticklabelposition\\\");h(\\\"ticklabeloverflow\\\",-1!==A.indexOf(\\\"inside\\\")?\\\"hide past domain\\\":\\\"hide past div\\\"),a(f,c,h,\\\"linear\\\");var M=r.font,S={outerTicks:!1,font:M};-1!==A.indexOf(\\\"inside\\\")&&(S.bgColor=\\\"black\\\"),l(f,c,h,\\\"linear\\\",S),s(f,c,h,\\\"linear\\\",S),o(f,c,h,\\\"linear\\\",S),h(\\\"title.text\\\",r._dfltTitle.colorbar);var E=c.showticklabels?c.tickfont:M,L=n.extendFlat({},E,{color:M.color,size:n.bigFont(E.size)});n.coerceFont(h,\\\"title.font\\\",L),h(\\\"title.side\\\",g?\\\"top\\\":\\\"right\\\")}},98981:function(t,e,r){\\\"use strict\\\";var n=r(39898),i=r(84267),a=r(74875),o=r(73972),s=r(89298),l=r(28569),u=r(71828),c=u.strTranslate,f=r(1426).extendFlat,h=r(6964),p=r(91424),d=r(7901),v=r(92998),g=r(63893),y=r(52075).flipScale,m=r(71453),x=r(52830),b=r(13838),_=r(18783),w=_.LINE_SPACING,T=_.FROM_TL,k=_.FROM_BR,A=r(30939).cn;t.exports={draw:function(t){var e=t._fullLayout._infolayer.selectAll(\\\"g.\\\"+A.colorbar).data(function(t){var e,r,n,i,a=t._fullLayout,o=t.calcdata,s=[];function l(t){return f(t,{_fillcolor:null,_line:{color:null,width:null,dash:null},_levels:{start:null,end:null,size:null},_filllevels:null,_fillgradient:null,_zrange:null})}function u(){\\\"function\\\"==typeof i.calc?i.calc(t,n,e):(e._fillgradient=r.reversescale?y(r.colorscale):r.colorscale,e._zrange=[r[i.min],r[i.max]])}for(var c=0;c<o.length;c++){var h=o[c],p=(n=h[0].trace)._module.colorbar;if(!0===n.visible&&p)for(var d=Array.isArray(p),v=d?p:[p],g=0;g<v.length;g++){var m=(i=v[g]).container;(r=m?n[m]:n)&&r.showscale&&((e=l(r.colorbar))._id=\\\"cb\\\"+n.uid+(d&&m?\\\"-\\\"+m:\\\"\\\"),e._traceIndex=n.index,e._propPrefix=(m?m+\\\".\\\":\\\"\\\")+\\\"colorbar.\\\",e._meta=n._meta,u(),s.push(e))}}for(var x in a._colorAxes)if((r=a[x]).showscale){var b=a._colorAxes[x];(e=l(r.colorbar))._id=\\\"cb\\\"+x,e._propPrefix=x+\\\".colorbar.\\\",e._meta=a._meta,i={min:\\\"cmin\\\",max:\\\"cmax\\\"},\\\"heatmap\\\"!==b[0]&&(n=b[1],i.calc=n._module.colorbar.calc),u(),s.push(e)}return s}(t),(function(t){return t._id}));e.enter().append(\\\"g\\\").attr(\\\"class\\\",(function(t){return t._id})).classed(A.colorbar,!0),e.each((function(e){var r=n.select(this);u.ensureSingle(r,\\\"rect\\\",A.cbbg),u.ensureSingle(r,\\\"g\\\",A.cbfills),u.ensureSingle(r,\\\"g\\\",A.cblines),u.ensureSingle(r,\\\"g\\\",A.cbaxis,(function(t){t.classed(A.crisp,!0)})),u.ensureSingle(r,\\\"g\\\",A.cbtitleunshift,(function(t){t.append(\\\"g\\\").classed(A.cbtitle,!0)})),u.ensureSingle(r,\\\"rect\\\",A.cboutline);var y=function(t,e,r){var o=\\\"v\\\"===e.orientation,l=e.len,h=e.lenmode,y=e.thickness,_=e.thicknessmode,M=e.outlinewidth,S=e.borderwidth,E=e.bgcolor,L=e.xanchor,C=e.yanchor,P=e.xpad,O=e.ypad,I=e.x,D=o?e.y:1-e.y,z=\\\"paper\\\"===e.yref,R=\\\"paper\\\"===e.xref,F=r._fullLayout,B=F._size,N=e._fillcolor,j=e._line,U=e.title,V=U.side,H=e._zrange||n.extent((\\\"function\\\"==typeof N?N:j.color).domain()),q=\\\"function\\\"==typeof j.color?j.color:function(){return j.color},G=\\\"function\\\"==typeof N?N:function(){return N},Z=e._levels,Y=function(t,e,r){var n,i,a=e._levels,o=[],s=[],l=a.end+a.size/100,u=a.size,c=1.001*r[0]-.001*r[1],f=1.001*r[1]-.001*r[0];for(i=0;i<1e5&&(n=a.start+i*u,!(u>0?n>=l:n<=l));i++)n>c&&n<f&&o.push(n);if(e._fillgradient)s=[0];else if(\\\"function\\\"==typeof e._fillcolor){var h=e._filllevels;if(h)for(l=h.end+h.size/100,u=h.size,i=0;i<1e5&&(n=h.start+i*u,!(u>0?n>=l:n<=l));i++)n>r[0]&&n<r[1]&&s.push(n);else(s=o.map((function(t){return t-a.size/2}))).push(s[s.length-1]+a.size)}else e._fillcolor&&\\\"string\\\"==typeof e._fillcolor&&(s=[0]);return a.size<0&&(o.reverse(),s.reverse()),{line:o,fill:s}}(0,e,H),W=Y.fill,X=Y.line,J=Math.round(y*(\\\"fraction\\\"===_?o?B.w:B.h:1)),K=J/(o?B.w:B.h),$=Math.round(l*(\\\"fraction\\\"===h?o?B.h:B.w:1)),Q=$/(o?B.h:B.w),tt=R?B.w:r._fullLayout.width,et=z?B.h:r._fullLayout.height,rt=Math.round(o?I*tt+P:D*et+O),nt={center:.5,right:1}[L]||0,it={top:1,middle:.5}[C]||0,at=o?I-nt*K:D-it*K,ot=o?D-it*Q:I-nt*Q,st=Math.round(o?et*(1-ot):tt*ot);e._lenFrac=Q,e._thickFrac=K,e._uFrac=at,e._vFrac=ot;var lt=e._axis=function(t,e,r){var n=t._fullLayout,i=\\\"v\\\"===e.orientation,a={type:\\\"linear\\\",range:r,tickmode:e.tickmode,nticks:e.nticks,tick0:e.tick0,dtick:e.dtick,tickvals:e.tickvals,ticktext:e.ticktext,ticks:e.ticks,ticklen:e.ticklen,tickwidth:e.tickwidth,tickcolor:e.tickcolor,showticklabels:e.showticklabels,labelalias:e.labelalias,ticklabelposition:e.ticklabelposition,ticklabeloverflow:e.ticklabeloverflow,ticklabelstep:e.ticklabelstep,tickfont:e.tickfont,tickangle:e.tickangle,tickformat:e.tickformat,exponentformat:e.exponentformat,minexponent:e.minexponent,separatethousands:e.separatethousands,showexponent:e.showexponent,showtickprefix:e.showtickprefix,tickprefix:e.tickprefix,showticksuffix:e.showticksuffix,ticksuffix:e.ticksuffix,title:e.title,showline:!0,anchor:\\\"free\\\",side:i?\\\"right\\\":\\\"bottom\\\",position:1},o=i?\\\"y\\\":\\\"x\\\",s={type:\\\"linear\\\",_id:o+e._id},l={letter:o,font:n.font,noHover:!0,noTickson:!0,noTicklabelmode:!0,calendar:n.calendar};function c(t,e){return u.coerce(a,s,b,t,e)}return m(a,s,c,l,n),x(a,s,c,l),s}(r,e,H);lt.position=K+(o?I+P/B.w:D+O/B.h);var ut=-1!==[\\\"top\\\",\\\"bottom\\\"].indexOf(V);if(o&&ut&&(lt.title.side=V,lt.titlex=I+P/B.w,lt.titley=ot+(\\\"top\\\"===U.side?Q-O/B.h:O/B.h)),o||ut||(lt.title.side=V,lt.titley=D+O/B.h,lt.titlex=ot+P/B.w),j.color&&\\\"auto\\\"===e.tickmode){lt.tickmode=\\\"linear\\\",lt.tick0=Z.start;var ct=Z.size,ft=u.constrain($/50,4,15)+1,ht=(H[1]-H[0])/((e.nticks||ft)*ct);if(ht>1){var pt=Math.pow(10,Math.floor(Math.log(ht)/Math.LN10));ct*=pt*u.roundUp(ht/pt,[2,5,10]),(Math.abs(Z.start)/Z.size+1e-6)%1<2e-6&&(lt.tick0=0)}lt.dtick=ct}lt.domain=o?[ot+O/B.h,ot+Q-O/B.h]:[ot+P/B.w,ot+Q-P/B.w],lt.setScale(),t.attr(\\\"transform\\\",c(Math.round(B.l),Math.round(B.t)));var dt,vt=t.select(\\\".\\\"+A.cbtitleunshift).attr(\\\"transform\\\",c(-Math.round(B.l),-Math.round(B.t))),gt=lt.ticklabelposition,yt=lt.title.font.size,mt=t.select(\\\".\\\"+A.cbaxis),xt=0,bt=0;function _t(n,i){var a={propContainer:lt,propName:e._propPrefix+\\\"title\\\",traceIndex:e._traceIndex,_meta:e._meta,placeholder:F._dfltTitle.colorbar,containerGroup:t.select(\\\".\\\"+A.cbtitle)},o=\\\"h\\\"===n.charAt(0)?n.substr(1):\\\"h\\\"+n;t.selectAll(\\\".\\\"+o+\\\",.\\\"+o+\\\"-math-group\\\").remove(),v.draw(r,n,f(a,i||{}))}return u.syncOrAsync([a.previousPromises,function(){var t,e;(o&&ut||!o&&!ut)&&(\\\"top\\\"===V&&(t=P+B.l+tt*I,e=O+B.t+et*(1-ot-Q)+3+.75*yt),\\\"bottom\\\"===V&&(t=P+B.l+tt*I,e=O+B.t+et*(1-ot)-3-.25*yt),\\\"right\\\"===V&&(e=O+B.t+et*D+3+.75*yt,t=P+B.l+tt*ot),_t(lt._id+\\\"title\\\",{attributes:{x:t,y:e,\\\"text-anchor\\\":o?\\\"start\\\":\\\"middle\\\"}}))},function(){if(!o&&!ut||o&&ut){var a,l=t.select(\\\".\\\"+A.cbtitle),f=l.select(\\\"text\\\"),h=[-M/2,M/2],d=l.select(\\\".h\\\"+lt._id+\\\"title-math-group\\\").node(),v=15.6;if(f.node()&&(v=parseInt(f.node().style.fontSize,10)*w),d?(a=p.bBox(d),bt=a.width,(xt=a.height)>v&&(h[1]-=(xt-v)/2)):f.node()&&!f.classed(A.jsPlaceholder)&&(a=p.bBox(f.node()),bt=a.width,xt=a.height),o){if(xt){if(xt+=5,\\\"top\\\"===V)lt.domain[1]-=xt/B.h,h[1]*=-1;else{lt.domain[0]+=xt/B.h;var y=g.lineCount(f);h[1]+=(1-y)*v}l.attr(\\\"transform\\\",c(h[0],h[1])),lt.setScale()}}else bt&&(\\\"right\\\"===V&&(lt.domain[0]+=(bt+yt/2)/B.w),l.attr(\\\"transform\\\",c(h[0],h[1])),lt.setScale())}t.selectAll(\\\".\\\"+A.cbfills+\\\",.\\\"+A.cblines).attr(\\\"transform\\\",o?c(0,Math.round(B.h*(1-lt.domain[1]))):c(Math.round(B.w*lt.domain[0]),0)),mt.attr(\\\"transform\\\",o?c(0,Math.round(-B.t)):c(Math.round(-B.l),0));var m=t.select(\\\".\\\"+A.cbfills).selectAll(\\\"rect.\\\"+A.cbfill).attr(\\\"style\\\",\\\"\\\").data(W);m.enter().append(\\\"rect\\\").classed(A.cbfill,!0).style(\\\"stroke\\\",\\\"none\\\"),m.exit().remove();var x=H.map(lt.c2p).map(Math.round).sort((function(t,e){return t-e}));m.each((function(t,a){var s=[0===a?H[0]:(W[a]+W[a-1])/2,a===W.length-1?H[1]:(W[a]+W[a+1])/2].map(lt.c2p).map(Math.round);o&&(s[1]=u.constrain(s[1]+(s[1]>s[0])?1:-1,x[0],x[1]));var l=n.select(this).attr(o?\\\"x\\\":\\\"y\\\",rt).attr(o?\\\"y\\\":\\\"x\\\",n.min(s)).attr(o?\\\"width\\\":\\\"height\\\",Math.max(J,2)).attr(o?\\\"height\\\":\\\"width\\\",Math.max(n.max(s)-n.min(s),2));if(e._fillgradient)p.gradient(l,r,e._id,o?\\\"vertical\\\":\\\"horizontalreversed\\\",e._fillgradient,\\\"fill\\\");else{var c=G(t).replace(\\\"e-\\\",\\\"\\\");l.attr(\\\"fill\\\",i(c).toHexString())}}));var b=t.select(\\\".\\\"+A.cblines).selectAll(\\\"path.\\\"+A.cbline).data(j.color&&j.width?X:[]);b.enter().append(\\\"path\\\").classed(A.cbline,!0),b.exit().remove(),b.each((function(t){var e=rt,r=Math.round(lt.c2p(t))+j.width/2%1;n.select(this).attr(\\\"d\\\",\\\"M\\\"+(o?e+\\\",\\\"+r:r+\\\",\\\"+e)+(o?\\\"h\\\":\\\"v\\\")+J).call(p.lineGroupStyle,j.width,q(t),j.dash)})),mt.selectAll(\\\"g.\\\"+lt._id+\\\"tick,path\\\").remove();var _=rt+J+(M||0)/2-(\\\"outside\\\"===e.ticks?1:0),T=s.calcTicks(lt),k=s.getTickSigns(lt)[2];return s.drawTicks(r,lt,{vals:\\\"inside\\\"===lt.ticks?s.clipEnds(lt,T):T,layer:mt,path:s.makeTickPath(lt,_,k),transFn:s.makeTransTickFn(lt)}),s.drawLabels(r,lt,{vals:T,layer:mt,transFn:s.makeTransTickLabelFn(lt),labelFns:s.makeLabelFns(lt,_)})},function(){if(o&&!ut||!o&&ut){var t,i,a=lt.position||0,s=lt._offset+lt._length/2;if(\\\"right\\\"===V)i=s,t=B.l+tt*a+10+yt*(lt.showticklabels?1:.5);else if(t=s,\\\"bottom\\\"===V&&(i=B.t+et*a+10+(-1===gt.indexOf(\\\"inside\\\")?lt.tickfont.size:0)+(\\\"intside\\\"!==lt.ticks&&e.ticklen||0)),\\\"top\\\"===V){var l=U.text.split(\\\"<br>\\\").length;i=B.t+et*a+10-J-w*yt*l}_t((o?\\\"h\\\":\\\"v\\\")+lt._id+\\\"title\\\",{avoid:{selection:n.select(r).selectAll(\\\"g.\\\"+lt._id+\\\"tick\\\"),side:V,offsetTop:o?0:B.t,offsetLeft:o?B.l:0,maxShift:o?F.width:F.height},attributes:{x:t,y:i,\\\"text-anchor\\\":\\\"middle\\\"},transform:{rotate:o?-90:0,offset:0}})}},a.previousPromises,function(){var n,s=J+M/2;-1===gt.indexOf(\\\"inside\\\")&&(n=p.bBox(mt.node()),s+=o?n.width:n.height),dt=vt.select(\\\"text\\\");var u=0,f=o&&\\\"top\\\"===V,v=!o&&\\\"right\\\"===V,g=0;if(dt.node()&&!dt.classed(A.jsPlaceholder)){var m,x=vt.select(\\\".h\\\"+lt._id+\\\"title-math-group\\\").node();x&&(o&&ut||!o&&!ut)?(u=(n=p.bBox(x)).width,m=n.height):(u=(n=p.bBox(vt.node())).right-B.l-(o?rt:st),m=n.bottom-B.t-(o?st:rt),o||\\\"top\\\"!==V||(s+=n.height,g=n.height)),v&&(dt.attr(\\\"transform\\\",c(u/2+yt/2,0)),u*=2),s=Math.max(s,o?u:m)}var b=2*(o?P:O)+s+S+M/2,w=0;!o&&U.text&&\\\"bottom\\\"===C&&D<=0&&(b+=w=b/2,g+=w),F._hColorbarMoveTitle=w,F._hColorbarMoveCBTitle=g;var N=S+M,j=(o?rt:st)-N/2-(o?P:0),H=(o?st:rt)-(o?$:O+g-w);t.select(\\\".\\\"+A.cbbg).attr(\\\"x\\\",j).attr(\\\"y\\\",H).attr(o?\\\"width\\\":\\\"height\\\",Math.max(b-w,2)).attr(o?\\\"height\\\":\\\"width\\\",Math.max($+N,2)).call(d.fill,E).call(d.stroke,e.bordercolor).style(\\\"stroke-width\\\",S);var q=v?Math.max(u-10,0):0;t.selectAll(\\\".\\\"+A.cboutline).attr(\\\"x\\\",(o?rt:st+P)+q).attr(\\\"y\\\",(o?st+O-$:rt)+(f?xt:0)).attr(o?\\\"width\\\":\\\"height\\\",Math.max(J,2)).attr(o?\\\"height\\\":\\\"width\\\",Math.max($-(o?2*O+xt:2*P+q),2)).call(d.stroke,e.outlinecolor).style({fill:\\\"none\\\",\\\"stroke-width\\\":M});var G=o?nt*b:0,Z=o?0:(1-it)*b-g;if(G=R?B.l-G:-G,Z=z?B.t-Z:-Z,t.attr(\\\"transform\\\",c(G,Z)),!o&&(S||i(E).getAlpha()&&!i.equals(F.paper_bgcolor,E))){var Y=mt.selectAll(\\\"text\\\"),W=Y[0].length,X=t.select(\\\".\\\"+A.cbbg).node(),K=p.bBox(X),Q=p.getTranslate(t);Y.each((function(t,e){var r=W-1;if(0===e||e===r){var n,i=p.bBox(this),a=p.getTranslate(this);if(e===r){var o=i.right+a.x;(n=K.right+Q.x+st-S-2+I-o)>0&&(n=0)}else if(0===e){var s=i.left+a.x;(n=K.left+Q.x+st+S+2-s)<0&&(n=0)}n&&(W<3?this.setAttribute(\\\"transform\\\",\\\"translate(\\\"+n+\\\",0) \\\"+this.getAttribute(\\\"transform\\\")):this.setAttribute(\\\"visibility\\\",\\\"hidden\\\"))}}))}var tt={},et=T[L],at=k[L],ot=T[C],ct=k[C],ft=b-J;o?(\\\"pixels\\\"===h?(tt.y=D,tt.t=$*ot,tt.b=$*ct):(tt.t=tt.b=0,tt.yt=D+l*ot,tt.yb=D-l*ct),\\\"pixels\\\"===_?(tt.x=I,tt.l=b*et,tt.r=b*at):(tt.l=ft*et,tt.r=ft*at,tt.xl=I-y*et,tt.xr=I+y*at)):(\\\"pixels\\\"===h?(tt.x=I,tt.l=$*et,tt.r=$*at):(tt.l=tt.r=0,tt.xl=I+l*et,tt.xr=I-l*at),\\\"pixels\\\"===_?(tt.y=1-D,tt.t=b*ot,tt.b=b*ct):(tt.t=ft*ot,tt.b=ft*ct,tt.yt=D-y*ot,tt.yb=D+y*ct));var ht=e.y<.5?\\\"b\\\":\\\"t\\\",pt=e.x<.5?\\\"l\\\":\\\"r\\\";r._fullLayout._reservedMargin[e._id]={};var bt={r:F.width-j-G,l:j+tt.r,b:F.height-H-Z,t:H+tt.b};R&&z?a.autoMargin(r,e._id,tt):R?r._fullLayout._reservedMargin[e._id][ht]=bt[ht]:z||o?r._fullLayout._reservedMargin[e._id][pt]=bt[pt]:r._fullLayout._reservedMargin[e._id][ht]=bt[ht]}],r)}(r,e,t);y&&y.then&&(t._promises||[]).push(y),t._context.edits.colorbarPosition&&function(t,e,r){var n,i,a,s=\\\"v\\\"===e.orientation,u=r._fullLayout._size;l.init({element:t.node(),gd:r,prepFn:function(){n=t.attr(\\\"transform\\\"),h(t)},moveFn:function(r,o){t.attr(\\\"transform\\\",n+c(r,o)),i=l.align((s?e._uFrac:e._vFrac)+r/u.w,s?e._thickFrac:e._lenFrac,0,1,e.xanchor),a=l.align((s?e._vFrac:1-e._uFrac)-o/u.h,s?e._lenFrac:e._thickFrac,0,1,e.yanchor);var f=l.getCursor(i,a,e.xanchor,e.yanchor);h(t,f)},doneFn:function(){if(h(t),void 0!==i&&void 0!==a){var n={};n[e._propPrefix+\\\"x\\\"]=i,n[e._propPrefix+\\\"y\\\"]=a,void 0!==e._traceIndex?o.call(\\\"_guiRestyle\\\",r,n,e._traceIndex):o.call(\\\"_guiRelayout\\\",r,n)}}})}(r,e,t)})),e.exit().each((function(e){a.autoMargin(t,e._id)})).remove(),e.order()}}},76228:function(t,e,r){\\\"use strict\\\";var n=r(71828);t.exports=function(t){return n.isPlainObject(t.colorbar)}},12311:function(t,e,r){\\\"use strict\\\";t.exports={moduleType:\\\"component\\\",name:\\\"colorbar\\\",attributes:r(63583),supplyDefaults:r(62499),draw:r(98981).draw,hasColorbar:r(76228)}},50693:function(t,e,r){\\\"use strict\\\";var n=r(63583),i=r(30587).counter,a=r(78607),o=r(63282).scales;function s(t){return\\\"`\\\"+t+\\\"`\\\"}a(o),t.exports=function(t,e){t=t||\\\"\\\";var r,a=(e=e||{}).cLetter||\\\"c\\\",l=(\\\"onlyIfNumerical\\\"in e?e.onlyIfNumerical:Boolean(t),\\\"noScale\\\"in e?e.noScale:\\\"marker.line\\\"===t),u=\\\"showScaleDflt\\\"in e?e.showScaleDflt:\\\"z\\\"===a,c=\\\"string\\\"==typeof e.colorscaleDflt?o[e.colorscaleDflt]:null,f=e.editTypeOverride||\\\"\\\",h=t?t+\\\".\\\":\\\"\\\";\\\"colorAttr\\\"in e?(r=e.colorAttr,e.colorAttr):s(h+(r={z:\\\"z\\\",c:\\\"color\\\"}[a]));var p=a+\\\"auto\\\",d=a+\\\"min\\\",v=a+\\\"max\\\",g=a+\\\"mid\\\",y=(s(h+p),s(h+d),s(h+v),{});y[d]=y[v]=void 0;var m={};m[p]=!1;var x={};return\\\"color\\\"===r&&(x.color={valType:\\\"color\\\",arrayOk:!0,editType:f||\\\"style\\\"},e.anim&&(x.color.anim=!0)),x[p]={valType:\\\"boolean\\\",dflt:!0,editType:\\\"calc\\\",impliedEdits:y},x[d]={valType:\\\"number\\\",dflt:null,editType:f||\\\"plot\\\",impliedEdits:m},x[v]={valType:\\\"number\\\",dflt:null,editType:f||\\\"plot\\\",impliedEdits:m},x[g]={valType:\\\"number\\\",dflt:null,editType:\\\"calc\\\",impliedEdits:y},x.colorscale={valType:\\\"colorscale\\\",editType:\\\"calc\\\",dflt:c,impliedEdits:{autocolorscale:!1}},x.autocolorscale={valType:\\\"boolean\\\",dflt:!1!==e.autoColorDflt,editType:\\\"calc\\\",impliedEdits:{colorscale:void 0}},x.reversescale={valType:\\\"boolean\\\",dflt:!1,editType:\\\"plot\\\"},l||(x.showscale={valType:\\\"boolean\\\",dflt:u,editType:\\\"calc\\\"},x.colorbar=n),e.noColorAxis||(x.coloraxis={valType:\\\"subplotid\\\",regex:i(\\\"coloraxis\\\"),dflt:null,editType:\\\"calc\\\"}),x}},78803:function(t,e,r){\\\"use strict\\\";var n=r(92770),i=r(71828),a=r(52075).extractOpts;t.exports=function(t,e,r){var o,s=t._fullLayout,l=r.vals,u=r.containerStr,c=u?i.nestedProperty(e,u).get():e,f=a(c),h=!1!==f.auto,p=f.min,d=f.max,v=f.mid,g=function(){return i.aggNums(Math.min,null,l)},y=function(){return i.aggNums(Math.max,null,l)};void 0===p?p=g():h&&(p=c._colorAx&&n(p)?Math.min(p,g()):g()),void 0===d?d=y():h&&(d=c._colorAx&&n(d)?Math.max(d,y()):y()),h&&void 0!==v&&(d-v>v-p?p=v-(d-v):d-v<v-p&&(d=v+(v-p))),p===d&&(p-=.5,d+=.5),f._sync(\\\"min\\\",p),f._sync(\\\"max\\\",d),f.autocolorscale&&(o=p*d<0?s.colorscale.diverging:p>=0?s.colorscale.sequential:s.colorscale.sequentialminus,f._sync(\\\"colorscale\\\",o))}},33046:function(t,e,r){\\\"use strict\\\";var n=r(71828),i=r(52075).hasColorscale,a=r(52075).extractOpts;t.exports=function(t,e){function r(t,e){var r=t[\\\"_\\\"+e];void 0!==r&&(t[e]=r)}function o(t,i){var o=i.container?n.nestedProperty(t,i.container).get():t;if(o)if(o.coloraxis)o._colorAx=e[o.coloraxis];else{var s=a(o),l=s.auto;(l||void 0===s.min)&&r(o,i.min),(l||void 0===s.max)&&r(o,i.max),s.autocolorscale&&r(o,\\\"colorscale\\\")}}for(var s=0;s<t.length;s++){var l=t[s],u=l._module.colorbar;if(u)if(Array.isArray(u))for(var c=0;c<u.length;c++)o(l,u[c]);else o(l,u);i(l,\\\"marker.line\\\")&&o(l,{container:\\\"marker.line\\\",min:\\\"cmin\\\",max:\\\"cmax\\\"})}for(var f in e._colorAxes)o(e[f],{min:\\\"cmin\\\",max:\\\"cmax\\\"})}},1586:function(t,e,r){\\\"use strict\\\";var n=r(92770),i=r(71828),a=r(76228),o=r(62499),s=r(63282).isValid,l=r(73972).traceIs;function u(t,e){var r=e.slice(0,e.length-1);return e?i.nestedProperty(t,r).get()||{}:t}t.exports=function t(e,r,c,f,h){var p=h.prefix,d=h.cLetter,v=\\\"_module\\\"in r,g=u(e,p),y=u(r,p),m=u(r._template||{},p)||{},x=function(){return delete e.coloraxis,delete r.coloraxis,t(e,r,c,f,h)};if(v){var b=c._colorAxes||{},_=f(p+\\\"coloraxis\\\");if(_){var w=l(r,\\\"contour\\\")&&i.nestedProperty(r,\\\"contours.coloring\\\").get()||\\\"heatmap\\\",T=b[_];return void(T?(T[2].push(x),T[0]!==w&&(T[0]=!1,i.warn([\\\"Ignoring coloraxis:\\\",_,\\\"setting\\\",\\\"as it is linked to incompatible colorscales.\\\"].join(\\\" \\\")))):b[_]=[w,r,[x]])}}var k=g[d+\\\"min\\\"],A=g[d+\\\"max\\\"],M=n(k)&&n(A)&&k<A;f(p+d+\\\"auto\\\",!M)?f(p+d+\\\"mid\\\"):(f(p+d+\\\"min\\\"),f(p+d+\\\"max\\\"));var S,E,L=g.colorscale,C=m.colorscale;void 0!==L&&(S=!s(L)),void 0!==C&&(S=!s(C)),f(p+\\\"autocolorscale\\\",S),f(p+\\\"colorscale\\\"),f(p+\\\"reversescale\\\"),\\\"marker.line.\\\"!==p&&(p&&v&&(E=a(g)),f(p+\\\"showscale\\\",E)&&(p&&m&&(y._template=m),o(g,y,c)))}},52075:function(t,e,r){\\\"use strict\\\";var n=r(39898),i=r(84267),a=r(92770),o=r(71828),s=r(7901),l=r(63282).isValid,u=[\\\"showscale\\\",\\\"autocolorscale\\\",\\\"colorscale\\\",\\\"reversescale\\\",\\\"colorbar\\\"],c=[\\\"min\\\",\\\"max\\\",\\\"mid\\\",\\\"auto\\\"];function f(t){var e,r,n,i=t._colorAx,a=i||t,o={};for(r=0;r<u.length;r++)o[n=u[r]]=a[n];if(i)for(e=\\\"c\\\",r=0;r<c.length;r++)o[n=c[r]]=a[\\\"c\\\"+n];else{var s;for(r=0;r<c.length;r++)((s=\\\"c\\\"+(n=c[r]))in a||(s=\\\"z\\\"+n)in a)&&(o[n]=a[s]);e=s.charAt(0)}return o._sync=function(t,r){var n=-1!==c.indexOf(t)?e+t:t;a[n]=a[\\\"_\\\"+n]=r},o}function h(t){for(var e=f(t),r=e.min,n=e.max,i=e.reversescale?p(e.colorscale):e.colorscale,a=i.length,o=new Array(a),s=new Array(a),l=0;l<a;l++){var u=i[l];o[l]=r+u[0]*(n-r),s[l]=u[1]}return{domain:o,range:s}}function p(t){for(var e=t.length,r=new Array(e),n=e-1,i=0;n>=0;n--,i++){var a=t[n];r[i]=[1-a[0],a[1]]}return r}function d(t,e){e=e||{};for(var r=t.domain,o=t.range,l=o.length,u=new Array(l),c=0;c<l;c++){var f=i(o[c]).toRgb();u[c]=[f.r,f.g,f.b,f.a]}var h,p=n.scale.linear().domain(r).range(u).clamp(!0),d=e.noNumericCheck,g=e.returnArray;return(h=d&&g?p:d?function(t){return v(p(t))}:g?function(t){return a(t)?p(t):i(t).isValid()?t:s.defaultLine}:function(t){return a(t)?v(p(t)):i(t).isValid()?t:s.defaultLine}).domain=p.domain,h.range=function(){return o},h}function v(t){var e={r:t[0],g:t[1],b:t[2],a:t[3]};return i(e).toRgbString()}t.exports={hasColorscale:function(t,e,r){var n=e?o.nestedProperty(t,e).get()||{}:t,i=n[r||\\\"color\\\"],s=!1;if(o.isArrayOrTypedArray(i))for(var u=0;u<i.length;u++)if(a(i[u])){s=!0;break}return o.isPlainObject(n)&&(s||!0===n.showscale||a(n.cmin)&&a(n.cmax)||l(n.colorscale)||o.isPlainObject(n.colorbar))},extractOpts:f,extractScale:h,flipScale:p,makeColorScaleFunc:d,makeColorScaleFuncFromTrace:function(t,e){return d(h(t),e)}}},21081:function(t,e,r){\\\"use strict\\\";var n=r(63282),i=r(52075);t.exports={moduleType:\\\"component\\\",name:\\\"colorscale\\\",attributes:r(50693),layoutAttributes:r(72673),supplyLayoutDefaults:r(30959),handleDefaults:r(1586),crossTraceDefaults:r(33046),calc:r(78803),scales:n.scales,defaultScale:n.defaultScale,getScale:n.get,isValidScale:n.isValid,hasColorscale:i.hasColorscale,extractOpts:i.extractOpts,extractScale:i.extractScale,flipScale:i.flipScale,makeColorScaleFunc:i.makeColorScaleFunc,makeColorScaleFuncFromTrace:i.makeColorScaleFuncFromTrace}},72673:function(t,e,r){\\\"use strict\\\";var n=r(1426).extendFlat,i=r(50693),a=r(63282).scales;t.exports={editType:\\\"calc\\\",colorscale:{editType:\\\"calc\\\",sequential:{valType:\\\"colorscale\\\",dflt:a.Reds,editType:\\\"calc\\\"},sequentialminus:{valType:\\\"colorscale\\\",dflt:a.Blues,editType:\\\"calc\\\"},diverging:{valType:\\\"colorscale\\\",dflt:a.RdBu,editType:\\\"calc\\\"}},coloraxis:n({_isSubplotObj:!0,editType:\\\"calc\\\"},i(\\\"\\\",{colorAttr:\\\"corresponding trace color array(s)\\\",noColorAxis:!0,showScaleDflt:!0}))}},30959:function(t,e,r){\\\"use strict\\\";var n=r(71828),i=r(44467),a=r(72673),o=r(1586);t.exports=function(t,e){function r(r,i){return n.coerce(t,e,a,r,i)}r(\\\"colorscale.sequential\\\"),r(\\\"colorscale.sequentialminus\\\"),r(\\\"colorscale.diverging\\\");var s,l,u=e._colorAxes;function c(t,e){return n.coerce(s,l,a.coloraxis,t,e)}for(var f in u){var h=u[f];if(h[0])s=t[f]||{},(l=i.newContainer(e,f,\\\"coloraxis\\\"))._name=f,o(s,l,e,c,{prefix:\\\"\\\",cLetter:\\\"c\\\"});else{for(var p=0;p<h[2].length;p++)h[2][p]();delete e._colorAxes[f]}}}},63282:function(t,e,r){\\\"use strict\\\";var n=r(84267),i={Greys:[[0,\\\"rgb(0,0,0)\\\"],[1,\\\"rgb(255,255,255)\\\"]],YlGnBu:[[0,\\\"rgb(8,29,88)\\\"],[.125,\\\"rgb(37,52,148)\\\"],[.25,\\\"rgb(34,94,168)\\\"],[.375,\\\"rgb(29,145,192)\\\"],[.5,\\\"rgb(65,182,196)\\\"],[.625,\\\"rgb(127,205,187)\\\"],[.75,\\\"rgb(199,233,180)\\\"],[.875,\\\"rgb(237,248,217)\\\"],[1,\\\"rgb(255,255,217)\\\"]],Greens:[[0,\\\"rgb(0,68,27)\\\"],[.125,\\\"rgb(0,109,44)\\\"],[.25,\\\"rgb(35,139,69)\\\"],[.375,\\\"rgb(65,171,93)\\\"],[.5,\\\"rgb(116,196,118)\\\"],[.625,\\\"rgb(161,217,155)\\\"],[.75,\\\"rgb(199,233,192)\\\"],[.875,\\\"rgb(229,245,224)\\\"],[1,\\\"rgb(247,252,245)\\\"]],YlOrRd:[[0,\\\"rgb(128,0,38)\\\"],[.125,\\\"rgb(189,0,38)\\\"],[.25,\\\"rgb(227,26,28)\\\"],[.375,\\\"rgb(252,78,42)\\\"],[.5,\\\"rgb(253,141,60)\\\"],[.625,\\\"rgb(254,178,76)\\\"],[.75,\\\"rgb(254,217,118)\\\"],[.875,\\\"rgb(255,237,160)\\\"],[1,\\\"rgb(255,255,204)\\\"]],Bluered:[[0,\\\"rgb(0,0,255)\\\"],[1,\\\"rgb(255,0,0)\\\"]],RdBu:[[0,\\\"rgb(5,10,172)\\\"],[.35,\\\"rgb(106,137,247)\\\"],[.5,\\\"rgb(190,190,190)\\\"],[.6,\\\"rgb(220,170,132)\\\"],[.7,\\\"rgb(230,145,90)\\\"],[1,\\\"rgb(178,10,28)\\\"]],Reds:[[0,\\\"rgb(220,220,220)\\\"],[.2,\\\"rgb(245,195,157)\\\"],[.4,\\\"rgb(245,160,105)\\\"],[1,\\\"rgb(178,10,28)\\\"]],Blues:[[0,\\\"rgb(5,10,172)\\\"],[.35,\\\"rgb(40,60,190)\\\"],[.5,\\\"rgb(70,100,245)\\\"],[.6,\\\"rgb(90,120,245)\\\"],[.7,\\\"rgb(106,137,247)\\\"],[1,\\\"rgb(220,220,220)\\\"]],Picnic:[[0,\\\"rgb(0,0,255)\\\"],[.1,\\\"rgb(51,153,255)\\\"],[.2,\\\"rgb(102,204,255)\\\"],[.3,\\\"rgb(153,204,255)\\\"],[.4,\\\"rgb(204,204,255)\\\"],[.5,\\\"rgb(255,255,255)\\\"],[.6,\\\"rgb(255,204,255)\\\"],[.7,\\\"rgb(255,153,255)\\\"],[.8,\\\"rgb(255,102,204)\\\"],[.9,\\\"rgb(255,102,102)\\\"],[1,\\\"rgb(255,0,0)\\\"]],Rainbow:[[0,\\\"rgb(150,0,90)\\\"],[.125,\\\"rgb(0,0,200)\\\"],[.25,\\\"rgb(0,25,255)\\\"],[.375,\\\"rgb(0,152,255)\\\"],[.5,\\\"rgb(44,255,150)\\\"],[.625,\\\"rgb(151,255,0)\\\"],[.75,\\\"rgb(255,234,0)\\\"],[.875,\\\"rgb(255,111,0)\\\"],[1,\\\"rgb(255,0,0)\\\"]],Portland:[[0,\\\"rgb(12,51,131)\\\"],[.25,\\\"rgb(10,136,186)\\\"],[.5,\\\"rgb(242,211,56)\\\"],[.75,\\\"rgb(242,143,56)\\\"],[1,\\\"rgb(217,30,30)\\\"]],Jet:[[0,\\\"rgb(0,0,131)\\\"],[.125,\\\"rgb(0,60,170)\\\"],[.375,\\\"rgb(5,255,255)\\\"],[.625,\\\"rgb(255,255,0)\\\"],[.875,\\\"rgb(250,0,0)\\\"],[1,\\\"rgb(128,0,0)\\\"]],Hot:[[0,\\\"rgb(0,0,0)\\\"],[.3,\\\"rgb(230,0,0)\\\"],[.6,\\\"rgb(255,210,0)\\\"],[1,\\\"rgb(255,255,255)\\\"]],Blackbody:[[0,\\\"rgb(0,0,0)\\\"],[.2,\\\"rgb(230,0,0)\\\"],[.4,\\\"rgb(230,210,0)\\\"],[.7,\\\"rgb(255,255,255)\\\"],[1,\\\"rgb(160,200,255)\\\"]],Earth:[[0,\\\"rgb(0,0,130)\\\"],[.1,\\\"rgb(0,180,180)\\\"],[.2,\\\"rgb(40,210,40)\\\"],[.4,\\\"rgb(230,230,50)\\\"],[.6,\\\"rgb(120,70,20)\\\"],[1,\\\"rgb(255,255,255)\\\"]],Electric:[[0,\\\"rgb(0,0,0)\\\"],[.15,\\\"rgb(30,0,100)\\\"],[.4,\\\"rgb(120,0,100)\\\"],[.6,\\\"rgb(160,90,0)\\\"],[.8,\\\"rgb(230,200,0)\\\"],[1,\\\"rgb(255,250,220)\\\"]],Viridis:[[0,\\\"#440154\\\"],[.06274509803921569,\\\"#48186a\\\"],[.12549019607843137,\\\"#472d7b\\\"],[.18823529411764706,\\\"#424086\\\"],[.25098039215686274,\\\"#3b528b\\\"],[.3137254901960784,\\\"#33638d\\\"],[.3764705882352941,\\\"#2c728e\\\"],[.4392156862745098,\\\"#26828e\\\"],[.5019607843137255,\\\"#21918c\\\"],[.5647058823529412,\\\"#1fa088\\\"],[.6274509803921569,\\\"#28ae80\\\"],[.6901960784313725,\\\"#3fbc73\\\"],[.7529411764705882,\\\"#5ec962\\\"],[.8156862745098039,\\\"#84d44b\\\"],[.8784313725490196,\\\"#addc30\\\"],[.9411764705882353,\\\"#d8e219\\\"],[1,\\\"#fde725\\\"]],Cividis:[[0,\\\"rgb(0,32,76)\\\"],[.058824,\\\"rgb(0,42,102)\\\"],[.117647,\\\"rgb(0,52,110)\\\"],[.176471,\\\"rgb(39,63,108)\\\"],[.235294,\\\"rgb(60,74,107)\\\"],[.294118,\\\"rgb(76,85,107)\\\"],[.352941,\\\"rgb(91,95,109)\\\"],[.411765,\\\"rgb(104,106,112)\\\"],[.470588,\\\"rgb(117,117,117)\\\"],[.529412,\\\"rgb(131,129,120)\\\"],[.588235,\\\"rgb(146,140,120)\\\"],[.647059,\\\"rgb(161,152,118)\\\"],[.705882,\\\"rgb(176,165,114)\\\"],[.764706,\\\"rgb(192,177,109)\\\"],[.823529,\\\"rgb(209,191,102)\\\"],[.882353,\\\"rgb(225,204,92)\\\"],[.941176,\\\"rgb(243,219,79)\\\"],[1,\\\"rgb(255,233,69)\\\"]]},a=i.RdBu;function o(t){var e=0;if(!Array.isArray(t)||t.length<2)return!1;if(!t[0]||!t[t.length-1])return!1;if(0!=+t[0][0]||1!=+t[t.length-1][0])return!1;for(var r=0;r<t.length;r++){var i=t[r];if(2!==i.length||+i[0]<e||!n(i[1]).isValid())return!1;e=+i[0]}return!0}t.exports={scales:i,defaultScale:a,get:function(t,e){if(e||(e=a),!t)return e;function r(){try{t=i[t]||JSON.parse(t)}catch(r){t=e}}return\\\"string\\\"==typeof t&&(r(),\\\"string\\\"==typeof t&&r()),o(t)?t:e},isValid:function(t){return void 0!==i[t]||o(t)}}},92807:function(t){\\\"use strict\\\";t.exports=function(t,e,r,n,i){var a=(t-r)/(n-r),o=a+e/(n-r),s=(a+o)/2;return\\\"left\\\"===i||\\\"bottom\\\"===i?a:\\\"center\\\"===i||\\\"middle\\\"===i?s:\\\"right\\\"===i||\\\"top\\\"===i?o:a<2/3-s?a:o>4/3-s?o:s}},70461:function(t,e,r){\\\"use strict\\\";var n=r(71828),i=[[\\\"sw-resize\\\",\\\"s-resize\\\",\\\"se-resize\\\"],[\\\"w-resize\\\",\\\"move\\\",\\\"e-resize\\\"],[\\\"nw-resize\\\",\\\"n-resize\\\",\\\"ne-resize\\\"]];t.exports=function(t,e,r,a){return t=\\\"left\\\"===r?0:\\\"center\\\"===r?1:\\\"right\\\"===r?2:n.constrain(Math.floor(3*t),0,2),e=\\\"bottom\\\"===a?0:\\\"middle\\\"===a?1:\\\"top\\\"===a?2:n.constrain(Math.floor(3*e),0,2),i[e][t]}},64505:function(t,e){\\\"use strict\\\";e.selectMode=function(t){return\\\"lasso\\\"===t||\\\"select\\\"===t},e.drawMode=function(t){return\\\"drawclosedpath\\\"===t||\\\"drawopenpath\\\"===t||\\\"drawline\\\"===t||\\\"drawrect\\\"===t||\\\"drawcircle\\\"===t},e.openMode=function(t){return\\\"drawline\\\"===t||\\\"drawopenpath\\\"===t},e.rectMode=function(t){return\\\"select\\\"===t||\\\"drawline\\\"===t||\\\"drawrect\\\"===t||\\\"drawcircle\\\"===t},e.freeMode=function(t){return\\\"lasso\\\"===t||\\\"drawclosedpath\\\"===t||\\\"drawopenpath\\\"===t},e.selectingOrDrawing=function(t){return e.freeMode(t)||e.rectMode(t)}},28569:function(t,e,r){\\\"use strict\\\";var n=r(48956),i=r(57035),a=r(38520),o=r(71828).removeElement,s=r(85555),l=t.exports={};l.align=r(92807),l.getCursor=r(70461);var u=r(26041);function c(){var t=document.createElement(\\\"div\\\");t.className=\\\"dragcover\\\";var e=t.style;return e.position=\\\"fixed\\\",e.left=0,e.right=0,e.top=0,e.bottom=0,e.zIndex=999999999,e.background=\\\"none\\\",document.body.appendChild(t),t}function f(t){return n(t.changedTouches?t.changedTouches[0]:t,document.body)}l.unhover=u.wrapped,l.unhoverRaw=u.raw,l.init=function(t){var e,r,n,u,h,p,d,v,g=t.gd,y=1,m=g._context.doubleClickDelay,x=t.element;g._mouseDownTime||(g._mouseDownTime=0),x.style.pointerEvents=\\\"all\\\",x.onmousedown=_,a?(x._ontouchstart&&x.removeEventListener(\\\"touchstart\\\",x._ontouchstart),x._ontouchstart=_,x.addEventListener(\\\"touchstart\\\",_,{passive:!1})):x.ontouchstart=_;var b=t.clampFn||function(t,e,r){return Math.abs(t)<r&&(t=0),Math.abs(e)<r&&(e=0),[t,e]};function _(a){g._dragged=!1,g._dragging=!0;var o=f(a);e=o[0],r=o[1],d=a.target,p=a,v=2===a.buttons||a.ctrlKey,void 0===a.clientX&&void 0===a.clientY&&(a.clientX=e,a.clientY=r),(n=(new Date).getTime())-g._mouseDownTime<m?y+=1:(y=1,g._mouseDownTime=n),t.prepFn&&t.prepFn(a,e,r),i&&!v?(h=c()).style.cursor=window.getComputedStyle(x).cursor:i||(h=document,u=window.getComputedStyle(document.documentElement).cursor,document.documentElement.style.cursor=window.getComputedStyle(x).cursor),document.addEventListener(\\\"mouseup\\\",T),document.addEventListener(\\\"touchend\\\",T),!1!==t.dragmode&&(a.preventDefault(),document.addEventListener(\\\"mousemove\\\",w),document.addEventListener(\\\"touchmove\\\",w,{passive:!1}))}function w(n){n.preventDefault();var i=f(n),a=t.minDrag||s.MINDRAG,o=b(i[0]-e,i[1]-r,a),u=o[0],c=o[1];(u||c)&&(g._dragged=!0,l.unhover(g,n)),g._dragged&&t.moveFn&&!v&&(g._dragdata={element:x,dx:u,dy:c},t.moveFn(u,c))}function T(e){if(delete g._dragdata,!1!==t.dragmode&&(e.preventDefault(),document.removeEventListener(\\\"mousemove\\\",w),document.removeEventListener(\\\"touchmove\\\",w)),document.removeEventListener(\\\"mouseup\\\",T),document.removeEventListener(\\\"touchend\\\",T),i?o(h):u&&(h.documentElement.style.cursor=u,u=null),g._dragging){if(g._dragging=!1,(new Date).getTime()-g._mouseDownTime>m&&(y=Math.max(y-1,1)),g._dragged)t.doneFn&&t.doneFn();else if(t.clickFn&&t.clickFn(y,p),!v){var r;try{r=new MouseEvent(\\\"click\\\",e)}catch(t){var n=f(e);(r=document.createEvent(\\\"MouseEvents\\\")).initMouseEvent(\\\"click\\\",e.bubbles,e.cancelable,e.view,e.detail,e.screenX,e.screenY,n[0],n[1],e.ctrlKey,e.altKey,e.shiftKey,e.metaKey,e.button,e.relatedTarget)}d.dispatchEvent(r)}g._dragging=!1,g._dragged=!1}else g._dragged=!1}},l.coverSlip=c},26041:function(t,e,r){\\\"use strict\\\";var n=r(11086),i=r(79990),a=r(24401).getGraphDiv,o=r(26675),s=t.exports={};s.wrapped=function(t,e,r){(t=a(t))._fullLayout&&i.clear(t._fullLayout._uid+o.HOVERID),s.raw(t,e,r)},s.raw=function(t,e){var r=t._fullLayout,i=t._hoverdata;e||(e={}),e.target&&!t._dragged&&!1===n.triggerHandler(t,\\\"plotly_beforehover\\\",e)||(r._hoverlayer.selectAll(\\\"g\\\").remove(),r._hoverlayer.selectAll(\\\"line\\\").remove(),r._hoverlayer.selectAll(\\\"circle\\\").remove(),t._hoverdata=void 0,e.target&&i&&t.emit(\\\"plotly_unhover\\\",{event:e,points:i}))}},79952:function(t,e){\\\"use strict\\\";e.P={valType:\\\"string\\\",values:[\\\"solid\\\",\\\"dot\\\",\\\"dash\\\",\\\"longdash\\\",\\\"dashdot\\\",\\\"longdashdot\\\"],dflt:\\\"solid\\\",editType:\\\"style\\\"},e.u={shape:{valType:\\\"enumerated\\\",values:[\\\"\\\",\\\"/\\\",\\\"\\\\\\\\\\\",\\\"x\\\",\\\"-\\\",\\\"|\\\",\\\"+\\\",\\\".\\\"],dflt:\\\"\\\",arrayOk:!0,editType:\\\"style\\\"},fillmode:{valType:\\\"enumerated\\\",values:[\\\"replace\\\",\\\"overlay\\\"],dflt:\\\"replace\\\",editType:\\\"style\\\"},bgcolor:{valType:\\\"color\\\",arrayOk:!0,editType:\\\"style\\\"},fgcolor:{valType:\\\"color\\\",arrayOk:!0,editType:\\\"style\\\"},fgopacity:{valType:\\\"number\\\",editType:\\\"style\\\",min:0,max:1},size:{valType:\\\"number\\\",min:0,dflt:8,arrayOk:!0,editType:\\\"style\\\"},solidity:{valType:\\\"number\\\",min:0,max:1,dflt:.3,arrayOk:!0,editType:\\\"style\\\"},editType:\\\"style\\\"}},91424:function(t,e,r){\\\"use strict\\\";var n=r(39898),i=r(71828),a=i.numberFormat,o=r(92770),s=r(84267),l=r(73972),u=r(7901),c=r(21081),f=i.strTranslate,h=r(63893),p=r(77922),d=r(18783).LINE_SPACING,v=r(37822).DESELECTDIM,g=r(34098),y=r(39984),m=r(23469).appendArrayPointValue,x=t.exports={};function b(t,e,r){var n=e.fillpattern,i=n&&x.getPatternAttr(n.shape,0,\\\"\\\");if(i){var a=x.getPatternAttr(n.bgcolor,0,null),o=x.getPatternAttr(n.fgcolor,0,null),s=n.fgopacity,l=x.getPatternAttr(n.size,0,8),c=x.getPatternAttr(n.solidity,0,.3),f=e.uid;x.pattern(t,\\\"point\\\",r,f,i,l,c,void 0,n.fillmode,a,o,s)}else e.fillcolor&&t.call(u.fill,e.fillcolor)}x.font=function(t,e,r,n){i.isPlainObject(e)&&(n=e.color,r=e.size,e=e.family),e&&t.style(\\\"font-family\\\",e),r+1&&t.style(\\\"font-size\\\",r+\\\"px\\\"),n&&t.call(u.fill,n)},x.setPosition=function(t,e,r){t.attr(\\\"x\\\",e).attr(\\\"y\\\",r)},x.setSize=function(t,e,r){t.attr(\\\"width\\\",e).attr(\\\"height\\\",r)},x.setRect=function(t,e,r,n,i){t.call(x.setPosition,e,r).call(x.setSize,n,i)},x.translatePoint=function(t,e,r,n){var i=r.c2p(t.x),a=n.c2p(t.y);return!!(o(i)&&o(a)&&e.node())&&(\\\"text\\\"===e.node().nodeName?e.attr(\\\"x\\\",i).attr(\\\"y\\\",a):e.attr(\\\"transform\\\",f(i,a)),!0)},x.translatePoints=function(t,e,r){t.each((function(t){var i=n.select(this);x.translatePoint(t,i,e,r)}))},x.hideOutsideRangePoint=function(t,e,r,n,i,a){e.attr(\\\"display\\\",r.isPtWithinRange(t,i)&&n.isPtWithinRange(t,a)?null:\\\"none\\\")},x.hideOutsideRangePoints=function(t,e){if(e._hasClipOnAxisFalse){var r=e.xaxis,i=e.yaxis;t.each((function(e){var a=e[0].trace,o=a.xcalendar,s=a.ycalendar,u=l.traceIs(a,\\\"bar-like\\\")?\\\".bartext\\\":\\\".point,.textpoint\\\";t.selectAll(u).each((function(t){x.hideOutsideRangePoint(t,n.select(this),r,i,o,s)}))}))}},x.crispRound=function(t,e,r){return e&&o(e)?t._context.staticPlot?e:e<1?1:Math.round(e):r||0},x.singleLineStyle=function(t,e,r,n,i){e.style(\\\"fill\\\",\\\"none\\\");var a=(((t||[])[0]||{}).trace||{}).line||{},o=r||a.width||0,s=i||a.dash||\\\"\\\";u.stroke(e,n||a.color),x.dashLine(e,s,o)},x.lineGroupStyle=function(t,e,r,i){t.style(\\\"fill\\\",\\\"none\\\").each((function(t){var a=(((t||[])[0]||{}).trace||{}).line||{},o=e||a.width||0,s=i||a.dash||\\\"\\\";n.select(this).call(u.stroke,r||a.color).call(x.dashLine,s,o)}))},x.dashLine=function(t,e,r){r=+r||0,e=x.dashStyle(e,r),t.style({\\\"stroke-dasharray\\\":e,\\\"stroke-width\\\":r+\\\"px\\\"})},x.dashStyle=function(t,e){e=+e||1;var r=Math.max(e,3);return\\\"solid\\\"===t?t=\\\"\\\":\\\"dot\\\"===t?t=r+\\\"px,\\\"+r+\\\"px\\\":\\\"dash\\\"===t?t=3*r+\\\"px,\\\"+3*r+\\\"px\\\":\\\"longdash\\\"===t?t=5*r+\\\"px,\\\"+5*r+\\\"px\\\":\\\"dashdot\\\"===t?t=3*r+\\\"px,\\\"+r+\\\"px,\\\"+r+\\\"px,\\\"+r+\\\"px\\\":\\\"longdashdot\\\"===t&&(t=5*r+\\\"px,\\\"+2*r+\\\"px,\\\"+r+\\\"px,\\\"+2*r+\\\"px\\\"),t},x.singleFillStyle=function(t,e){var r=n.select(t.node());b(t,((r.data()[0]||[])[0]||{}).trace||{},e)},x.fillGroupStyle=function(t,e){t.style(\\\"stroke-width\\\",0).each((function(t){var r=n.select(this);t[0].trace&&b(r,t[0].trace,e)}))};var _=r(90998);x.symbolNames=[],x.symbolFuncs=[],x.symbolBackOffs=[],x.symbolNeedLines={},x.symbolNoDot={},x.symbolNoFill={},x.symbolList=[],Object.keys(_).forEach((function(t){var e=_[t],r=e.n;x.symbolList.push(r,String(r),t,r+100,String(r+100),t+\\\"-open\\\"),x.symbolNames[r]=t,x.symbolFuncs[r]=e.f,x.symbolBackOffs[r]=e.backoff||0,e.needLine&&(x.symbolNeedLines[r]=!0),e.noDot?x.symbolNoDot[r]=!0:x.symbolList.push(r+200,String(r+200),t+\\\"-dot\\\",r+300,String(r+300),t+\\\"-open-dot\\\"),e.noFill&&(x.symbolNoFill[r]=!0)}));var w=x.symbolNames.length;function T(t,e,r,n){var i=t%100;return x.symbolFuncs[i](e,r,n)+(t>=200?\\\"M0,0.5L0.5,0L0,-0.5L-0.5,0Z\\\":\\\"\\\")}x.symbolNumber=function(t){if(o(t))t=+t;else if(\\\"string\\\"==typeof t){var e=0;t.indexOf(\\\"-open\\\")>0&&(e=100,t=t.replace(\\\"-open\\\",\\\"\\\")),t.indexOf(\\\"-dot\\\")>0&&(e+=200,t=t.replace(\\\"-dot\\\",\\\"\\\")),(t=x.symbolNames.indexOf(t))>=0&&(t+=e)}return t%100>=w||t>=400?0:Math.floor(Math.max(t,0))};var k={x1:1,x2:0,y1:0,y2:0},A={x1:0,x2:0,y1:1,y2:0},M=a(\\\"~f\\\"),S={radial:{node:\\\"radialGradient\\\"},radialreversed:{node:\\\"radialGradient\\\",reversed:!0},horizontal:{node:\\\"linearGradient\\\",attrs:k},horizontalreversed:{node:\\\"linearGradient\\\",attrs:k,reversed:!0},vertical:{node:\\\"linearGradient\\\",attrs:A},verticalreversed:{node:\\\"linearGradient\\\",attrs:A,reversed:!0}};x.gradient=function(t,e,r,a,o,l){for(var c=o.length,f=S[a],h=new Array(c),p=0;p<c;p++)f.reversed?h[c-1-p]=[M(100*(1-o[p][0])),o[p][1]]:h[p]=[M(100*o[p][0]),o[p][1]];var d=e._fullLayout,v=\\\"g\\\"+d._uid+\\\"-\\\"+r,g=d._defs.select(\\\".gradients\\\").selectAll(\\\"#\\\"+v).data([a+h.join(\\\";\\\")],i.identity);g.exit().remove(),g.enter().append(f.node).each((function(){var t=n.select(this);f.attrs&&t.attr(f.attrs),t.attr(\\\"id\\\",v);var e=t.selectAll(\\\"stop\\\").data(h);e.exit().remove(),e.enter().append(\\\"stop\\\"),e.each((function(t){var e=s(t[1]);n.select(this).attr({offset:t[0]+\\\"%\\\",\\\"stop-color\\\":u.tinyRGB(e),\\\"stop-opacity\\\":e.getAlpha()})}))})),t.style(l,V(v,e)).style(l+\\\"-opacity\\\",null),t.classed(\\\"gradient_filled\\\",!0)},x.pattern=function(t,e,r,a,o,l,c,f,h,p,d,v){var g=\\\"legend\\\"===e;f&&(\\\"overlay\\\"===h?(p=f,d=u.contrast(p)):(p=void 0,d=f));var y,m,x,b,_,w,T,k,A,M=r._fullLayout,S=\\\"p\\\"+M._uid+\\\"-\\\"+a,E={},L=s(d),C=u.tinyRGB(L),P=v*L.getAlpha();switch(o){case\\\"/\\\":y=l*Math.sqrt(2),m=l*Math.sqrt(2),w=\\\"path\\\",E={d:x=\\\"M-\\\"+y/4+\\\",\\\"+m/4+\\\"l\\\"+y/2+\\\",-\\\"+m/2+\\\"M0,\\\"+m+\\\"L\\\"+y+\\\",0M\\\"+y/4*3+\\\",\\\"+m/4*5+\\\"l\\\"+y/2+\\\",-\\\"+m/2,opacity:P,stroke:C,\\\"stroke-width\\\":(b=c*l)+\\\"px\\\"};break;case\\\"\\\\\\\\\\\":y=l*Math.sqrt(2),m=l*Math.sqrt(2),w=\\\"path\\\",E={d:x=\\\"M\\\"+y/4*3+\\\",-\\\"+m/4+\\\"l\\\"+y/2+\\\",\\\"+m/2+\\\"M0,0L\\\"+y+\\\",\\\"+m+\\\"M-\\\"+y/4+\\\",\\\"+m/4*3+\\\"l\\\"+y/2+\\\",\\\"+m/2,opacity:P,stroke:C,\\\"stroke-width\\\":(b=c*l)+\\\"px\\\"};break;case\\\"x\\\":y=l*Math.sqrt(2),m=l*Math.sqrt(2),x=\\\"M-\\\"+y/4+\\\",\\\"+m/4+\\\"l\\\"+y/2+\\\",-\\\"+m/2+\\\"M0,\\\"+m+\\\"L\\\"+y+\\\",0M\\\"+y/4*3+\\\",\\\"+m/4*5+\\\"l\\\"+y/2+\\\",-\\\"+m/2+\\\"M\\\"+y/4*3+\\\",-\\\"+m/4+\\\"l\\\"+y/2+\\\",\\\"+m/2+\\\"M0,0L\\\"+y+\\\",\\\"+m+\\\"M-\\\"+y/4+\\\",\\\"+m/4*3+\\\"l\\\"+y/2+\\\",\\\"+m/2,b=l-l*Math.sqrt(1-c),w=\\\"path\\\",E={d:x,opacity:P,stroke:C,\\\"stroke-width\\\":b+\\\"px\\\"};break;case\\\"|\\\":w=\\\"path\\\",w=\\\"path\\\",E={d:x=\\\"M\\\"+(y=l)/2+\\\",0L\\\"+y/2+\\\",\\\"+(m=l),opacity:P,stroke:C,\\\"stroke-width\\\":(b=c*l)+\\\"px\\\"};break;case\\\"-\\\":w=\\\"path\\\",w=\\\"path\\\",E={d:x=\\\"M0,\\\"+(m=l)/2+\\\"L\\\"+(y=l)+\\\",\\\"+m/2,opacity:P,stroke:C,\\\"stroke-width\\\":(b=c*l)+\\\"px\\\"};break;case\\\"+\\\":w=\\\"path\\\",x=\\\"M\\\"+(y=l)/2+\\\",0L\\\"+y/2+\\\",\\\"+(m=l)+\\\"M0,\\\"+m/2+\\\"L\\\"+y+\\\",\\\"+m/2,b=l-l*Math.sqrt(1-c),w=\\\"path\\\",E={d:x,opacity:P,stroke:C,\\\"stroke-width\\\":b+\\\"px\\\"};break;case\\\".\\\":y=l,m=l,c<Math.PI/4?_=Math.sqrt(c*l*l/Math.PI):(T=c,k=Math.PI/4,1,_=(A=l/2)+(l/Math.sqrt(2)-A)*(T-k)/(1-k)),w=\\\"circle\\\",E={cx:y/2,cy:m/2,r:_,opacity:P,fill:C}}var O=[o||\\\"noSh\\\",p||\\\"noBg\\\",d||\\\"noFg\\\",l,c].join(\\\";\\\"),I=M._defs.select(\\\".patterns\\\").selectAll(\\\"#\\\"+S).data([O],i.identity);I.exit().remove(),I.enter().append(\\\"pattern\\\").each((function(){var t=n.select(this);if(t.attr({id:S,width:y+\\\"px\\\",height:m+\\\"px\\\",patternUnits:\\\"userSpaceOnUse\\\",patternTransform:g?\\\"scale(0.8)\\\":\\\"\\\"}),p){var e=s(p),r=u.tinyRGB(e),i=e.getAlpha(),a=t.selectAll(\\\"rect\\\").data([0]);a.exit().remove(),a.enter().append(\\\"rect\\\").attr({width:y+\\\"px\\\",height:m+\\\"px\\\",fill:r,\\\"fill-opacity\\\":i})}var o=t.selectAll(w).data([0]);o.exit().remove(),o.enter().append(w).attr(E)})),t.style(\\\"fill\\\",V(S,r)).style(\\\"fill-opacity\\\",null),t.classed(\\\"pattern_filled\\\",!0)},x.initGradients=function(t){var e=t._fullLayout;i.ensureSingle(e._defs,\\\"g\\\",\\\"gradients\\\").selectAll(\\\"linearGradient,radialGradient\\\").remove(),n.select(t).selectAll(\\\".gradient_filled\\\").classed(\\\"gradient_filled\\\",!1)},x.initPatterns=function(t){var e=t._fullLayout;i.ensureSingle(e._defs,\\\"g\\\",\\\"patterns\\\").selectAll(\\\"pattern\\\").remove(),n.select(t).selectAll(\\\".pattern_filled\\\").classed(\\\"pattern_filled\\\",!1)},x.getPatternAttr=function(t,e,r){return t&&i.isArrayOrTypedArray(t)?e<t.length?t[e]:r:t},x.pointStyle=function(t,e,r,i){if(t.size()){var a=x.makePointStyleFns(e);t.each((function(t){x.singlePointStyle(t,n.select(this),e,a,r,i)}))}},x.singlePointStyle=function(t,e,r,n,a,o){var s=r.marker,l=s.line;if(o&&o.i>=0&&void 0===t.i&&(t.i=o.i),e.style(\\\"opacity\\\",n.selectedOpacityFn?n.selectedOpacityFn(t):void 0===t.mo?s.opacity:t.mo),n.ms2mrc){var c;c=\\\"various\\\"===t.ms||\\\"various\\\"===s.size?3:n.ms2mrc(t.ms),t.mrc=c,n.selectedSizeFn&&(c=t.mrc=n.selectedSizeFn(t));var f=x.symbolNumber(t.mx||s.symbol)||0;t.om=f%200>=100;var h=rt(t,r),p=G(t,r);e.attr(\\\"d\\\",T(f,c,h,p))}var d,v,g,y=!1;if(t.so)g=l.outlierwidth,v=l.outliercolor,d=s.outliercolor;else{var m=(l||{}).width;g=(t.mlw+1||m+1||(t.trace?(t.trace.marker.line||{}).width:0)+1)-1||0,v=\\\"mlc\\\"in t?t.mlcc=n.lineScale(t.mlc):i.isArrayOrTypedArray(l.color)?u.defaultLine:l.color,i.isArrayOrTypedArray(s.color)&&(d=u.defaultLine,y=!0),d=\\\"mc\\\"in t?t.mcc=n.markerScale(t.mc):s.color||s.colors||\\\"rgba(0,0,0,0)\\\",n.selectedColorFn&&(d=n.selectedColorFn(t))}if(t.om)e.call(u.stroke,d).style({\\\"stroke-width\\\":(g||1)+\\\"px\\\",fill:\\\"none\\\"});else{e.style(\\\"stroke-width\\\",(t.isBlank?0:g)+\\\"px\\\");var b=s.gradient,_=t.mgt;_?y=!0:_=b&&b.type,i.isArrayOrTypedArray(_)&&(_=_[0],S[_]||(_=0));var w=s.pattern,k=w&&x.getPatternAttr(w.shape,t.i,\\\"\\\");if(_&&\\\"none\\\"!==_){var A=t.mgc;A?y=!0:A=b.color;var M=r.uid;y&&(M+=\\\"-\\\"+t.i),x.gradient(e,a,M,_,[[0,A],[1,d]],\\\"fill\\\")}else if(k){var E=!1,L=w.fgcolor;!L&&o&&o.color&&(L=o.color,E=!0);var C=x.getPatternAttr(L,t.i,o&&o.color||null),P=x.getPatternAttr(w.bgcolor,t.i,null),O=w.fgopacity,I=x.getPatternAttr(w.size,t.i,8),D=x.getPatternAttr(w.solidity,t.i,.3);E=E||t.mcc||i.isArrayOrTypedArray(w.shape)||i.isArrayOrTypedArray(w.bgcolor)||i.isArrayOrTypedArray(w.fgcolor)||i.isArrayOrTypedArray(w.size)||i.isArrayOrTypedArray(w.solidity);var z=r.uid;E&&(z+=\\\"-\\\"+t.i),x.pattern(e,\\\"point\\\",a,z,k,I,D,t.mcc,w.fillmode,P,C,O)}else i.isArrayOrTypedArray(d)?u.fill(e,d[t.i]):u.fill(e,d);g&&u.stroke(e,v)}},x.makePointStyleFns=function(t){var e={},r=t.marker;return e.markerScale=x.tryColorscale(r,\\\"\\\"),e.lineScale=x.tryColorscale(r,\\\"line\\\"),l.traceIs(t,\\\"symbols\\\")&&(e.ms2mrc=g.isBubble(t)?y(t):function(){return(r.size||6)/2}),t.selectedpoints&&i.extendFlat(e,x.makeSelectedPointStyleFns(t)),e},x.makeSelectedPointStyleFns=function(t){var e={},r=t.selected||{},n=t.unselected||{},a=t.marker||{},o=r.marker||{},s=n.marker||{},u=a.opacity,c=o.opacity,f=s.opacity,h=void 0!==c,p=void 0!==f;(i.isArrayOrTypedArray(u)||h||p)&&(e.selectedOpacityFn=function(t){var e=void 0===t.mo?a.opacity:t.mo;return t.selected?h?c:e:p?f:v*e});var d=a.color,g=o.color,y=s.color;(g||y)&&(e.selectedColorFn=function(t){var e=t.mcc||d;return t.selected?g||e:y||e});var m=a.size,x=o.size,b=s.size,_=void 0!==x,w=void 0!==b;return l.traceIs(t,\\\"symbols\\\")&&(_||w)&&(e.selectedSizeFn=function(t){var e=t.mrc||m/2;return t.selected?_?x/2:e:w?b/2:e}),e},x.makeSelectedTextStyleFns=function(t){var e={},r=t.selected||{},n=t.unselected||{},i=t.textfont||{},a=r.textfont||{},o=n.textfont||{},s=i.color,l=a.color,c=o.color;return e.selectedTextColorFn=function(t){var e=t.tc||s;return t.selected?l||e:c||(l?e:u.addOpacity(e,v))},e},x.selectedPointStyle=function(t,e){if(t.size()&&e.selectedpoints){var r=x.makeSelectedPointStyleFns(e),i=e.marker||{},a=[];r.selectedOpacityFn&&a.push((function(t,e){t.style(\\\"opacity\\\",r.selectedOpacityFn(e))})),r.selectedColorFn&&a.push((function(t,e){u.fill(t,r.selectedColorFn(e))})),r.selectedSizeFn&&a.push((function(t,n){var a=n.mx||i.symbol||0,o=r.selectedSizeFn(n);t.attr(\\\"d\\\",T(x.symbolNumber(a),o,rt(n,e),G(n,e))),n.mrc2=o})),a.length&&t.each((function(t){for(var e=n.select(this),r=0;r<a.length;r++)a[r](e,t)}))}},x.tryColorscale=function(t,e){var r=e?i.nestedProperty(t,e).get():t;if(r){var n=r.color;if((r.colorscale||r._colorAx)&&i.isArrayOrTypedArray(n))return c.makeColorScaleFuncFromTrace(r)}return i.identity};var E,L,C={start:1,end:-1,middle:0,bottom:1,top:-1};function P(t,e,r,i,a){var o=n.select(t.node().parentNode),s=-1!==e.indexOf(\\\"top\\\")?\\\"top\\\":-1!==e.indexOf(\\\"bottom\\\")?\\\"bottom\\\":\\\"middle\\\",l=-1!==e.indexOf(\\\"left\\\")?\\\"end\\\":-1!==e.indexOf(\\\"right\\\")?\\\"start\\\":\\\"middle\\\",u=i?i/.8+1:0,c=(h.lineCount(t)-1)*d+1,p=C[l]*u,v=.75*r+C[s]*u+(C[s]-1)*c*r/2;t.attr(\\\"text-anchor\\\",l),a||o.attr(\\\"transform\\\",f(p,v))}function O(t,e){var r=t.ts||e.textfont.size;return o(r)&&r>0?r:0}function I(t,e,r){return r&&(t=N(t)),e?z(t[1]):D(t[0])}function D(t){var e=n.round(t,2);return E=e,e}function z(t){var e=n.round(t,2);return L=e,e}function R(t,e,r,n){var i=t[0]-e[0],a=t[1]-e[1],o=r[0]-e[0],s=r[1]-e[1],l=Math.pow(i*i+a*a,.25),u=Math.pow(o*o+s*s,.25),c=(u*u*i-l*l*o)*n,f=(u*u*a-l*l*s)*n,h=3*u*(l+u),p=3*l*(l+u);return[[D(e[0]+(h&&c/h)),z(e[1]+(h&&f/h))],[D(e[0]-(p&&c/p)),z(e[1]-(p&&f/p))]]}x.textPointStyle=function(t,e,r){if(t.size()){var a;if(e.selectedpoints){var o=x.makeSelectedTextStyleFns(e);a=o.selectedTextColorFn}var s=e.texttemplate,l=r._fullLayout;t.each((function(t){var o=n.select(this),u=s?i.extractOption(t,e,\\\"txt\\\",\\\"texttemplate\\\"):i.extractOption(t,e,\\\"tx\\\",\\\"text\\\");if(u||0===u){if(s){var c=e._module.formatLabels,f=c?c(t,e,l):{},p={};m(p,e,t.i);var d=e._meta||{};u=i.texttemplateString(u,f,l._d3locale,p,t,d)}var v=t.tp||e.textposition,g=O(t,e),y=a?a(t):t.tc||e.textfont.color;o.call(x.font,t.tf||e.textfont.family,g,y).text(u).call(h.convertToTspans,r).call(P,v,g,t.mrc)}else o.remove()}))}},x.selectedTextStyle=function(t,e){if(t.size()&&e.selectedpoints){var r=x.makeSelectedTextStyleFns(e);t.each((function(t){var i=n.select(this),a=r.selectedTextColorFn(t),o=t.tp||e.textposition,s=O(t,e);u.fill(i,a);var c=l.traceIs(e,\\\"bar-like\\\");P(i,o,s,t.mrc2||t.mrc,c)}))}},x.smoothopen=function(t,e){if(t.length<3)return\\\"M\\\"+t.join(\\\"L\\\");var r,n=\\\"M\\\"+t[0],i=[];for(r=1;r<t.length-1;r++)i.push(R(t[r-1],t[r],t[r+1],e));for(n+=\\\"Q\\\"+i[0][0]+\\\" \\\"+t[1],r=2;r<t.length-1;r++)n+=\\\"C\\\"+i[r-2][1]+\\\" \\\"+i[r-1][0]+\\\" \\\"+t[r];return n+\\\"Q\\\"+i[t.length-3][1]+\\\" \\\"+t[t.length-1]},x.smoothclosed=function(t,e){if(t.length<3)return\\\"M\\\"+t.join(\\\"L\\\")+\\\"Z\\\";var r,n=\\\"M\\\"+t[0],i=t.length-1,a=[R(t[i],t[0],t[1],e)];for(r=1;r<i;r++)a.push(R(t[r-1],t[r],t[r+1],e));for(a.push(R(t[i-1],t[i],t[0],e)),r=1;r<=i;r++)n+=\\\"C\\\"+a[r-1][1]+\\\" \\\"+a[r][0]+\\\" \\\"+t[r];return n+\\\"C\\\"+a[i][1]+\\\" \\\"+a[0][0]+\\\" \\\"+t[0]+\\\"Z\\\"};var F={hv:function(t,e,r){return\\\"H\\\"+D(e[0])+\\\"V\\\"+I(e,1,r)},vh:function(t,e,r){return\\\"V\\\"+z(e[1])+\\\"H\\\"+I(e,0,r)},hvh:function(t,e,r){return\\\"H\\\"+D((t[0]+e[0])/2)+\\\"V\\\"+z(e[1])+\\\"H\\\"+I(e,0,r)},vhv:function(t,e,r){return\\\"V\\\"+z((t[1]+e[1])/2)+\\\"H\\\"+D(e[0])+\\\"V\\\"+I(e,1,r)}},B=function(t,e,r){return\\\"L\\\"+I(e,0,r)+\\\",\\\"+I(e,1,r)};function N(t,e){var r=t.backoff,n=t.trace,a=t.d,o=t.i;if(r&&n&&n.marker&&n.marker.angle%360==0&&n.line&&\\\"spline\\\"!==n.line.shape){var s=i.isArrayOrTypedArray(r),l=t,u=e?e[0]:E||0,c=e?e[1]:L||0,f=l[0],h=l[1],p=f-u,d=h-c,v=Math.atan2(d,p),g=s?r[o]:r;if(\\\"auto\\\"===g){var y=l.i;\\\"scatter\\\"===n.type&&y--;var m=l.marker,b=m.symbol;i.isArrayOrTypedArray(b)&&(b=b[y]);var _=m.size;i.isArrayOrTypedArray(_)&&(_=_[y]),g=m?x.symbolBackOffs[x.symbolNumber(b)]*_:0,g+=x.getMarkerStandoff(a[y],n)||0}var w=f-g*Math.cos(v),T=h-g*Math.sin(v);(w<=f&&w>=u||w>=f&&w<=u)&&(T<=h&&T>=c||T>=h&&T<=c)&&(t=[w,T])}return t}x.steps=function(t){var e=F[t]||B;return function(t){for(var r=\\\"M\\\"+D(t[0][0])+\\\",\\\"+z(t[0][1]),n=t.length,i=1;i<n;i++)r+=e(t[i-1],t[i],i===n-1);return r}},x.applyBackoff=N,x.makeTester=function(){var t=i.ensureSingleById(n.select(\\\"body\\\"),\\\"svg\\\",\\\"js-plotly-tester\\\",(function(t){t.attr(p.svgAttrs).style({position:\\\"absolute\\\",left:\\\"-10000px\\\",top:\\\"-10000px\\\",width:\\\"9000px\\\",height:\\\"9000px\\\",\\\"z-index\\\":\\\"1\\\"})})),e=i.ensureSingle(t,\\\"path\\\",\\\"js-reference-point\\\",(function(t){t.attr(\\\"d\\\",\\\"M0,0H1V1H0Z\\\").style({\\\"stroke-width\\\":0,fill:\\\"black\\\"})}));x.tester=t,x.testref=e},x.savedBBoxes={};var j=0;function U(t){var e=t.getAttribute(\\\"data-unformatted\\\");if(null!==e)return e+t.getAttribute(\\\"data-math\\\")+t.getAttribute(\\\"text-anchor\\\")+t.getAttribute(\\\"style\\\")}function V(t,e){if(!t)return null;var r=e._context,n=r._exportedPlot?\\\"\\\":r._baseUrl||\\\"\\\";return n?\\\"url('\\\"+n+\\\"#\\\"+t+\\\"')\\\":\\\"url(#\\\"+t+\\\")\\\"}x.bBox=function(t,e,r){var a,o,s;if(r||(r=U(t)),r){if(a=x.savedBBoxes[r])return i.extendFlat({},a)}else if(1===t.childNodes.length){var l=t.childNodes[0];if(r=U(l)){var u=+l.getAttribute(\\\"x\\\")||0,c=+l.getAttribute(\\\"y\\\")||0,f=l.getAttribute(\\\"transform\\\");if(!f){var p=x.bBox(l,!1,r);return u&&(p.left+=u,p.right+=u),c&&(p.top+=c,p.bottom+=c),p}if(r+=\\\"~\\\"+u+\\\"~\\\"+c+\\\"~\\\"+f,a=x.savedBBoxes[r])return i.extendFlat({},a)}}e?o=t:(s=x.tester.node(),o=t.cloneNode(!0),s.appendChild(o)),n.select(o).attr(\\\"transform\\\",null).call(h.positionText,0,0);var d=o.getBoundingClientRect(),v=x.testref.node().getBoundingClientRect();e||s.removeChild(o);var g={height:d.height,width:d.width,left:d.left-v.left,top:d.top-v.top,right:d.right-v.left,bottom:d.bottom-v.top};return j>=1e4&&(x.savedBBoxes={},j=0),r&&(x.savedBBoxes[r]=g),j++,i.extendFlat({},g)},x.setClipUrl=function(t,e,r){t.attr(\\\"clip-path\\\",V(e,r))},x.getTranslate=function(t){var e=(t[t.attr?\\\"attr\\\":\\\"getAttribute\\\"](\\\"transform\\\")||\\\"\\\").replace(/.*\\\\btranslate\\\\((-?\\\\d*\\\\.?\\\\d*)[^-\\\\d]*(-?\\\\d*\\\\.?\\\\d*)[^\\\\d].*/,(function(t,e,r){return[e,r].join(\\\" \\\")})).split(\\\" \\\");return{x:+e[0]||0,y:+e[1]||0}},x.setTranslate=function(t,e,r){var n=t.attr?\\\"attr\\\":\\\"getAttribute\\\",i=t.attr?\\\"attr\\\":\\\"setAttribute\\\",a=t[n](\\\"transform\\\")||\\\"\\\";return e=e||0,r=r||0,a=a.replace(/(\\\\btranslate\\\\(.*?\\\\);?)/,\\\"\\\").trim(),a=(a+=f(e,r)).trim(),t[i](\\\"transform\\\",a),a},x.getScale=function(t){var e=(t[t.attr?\\\"attr\\\":\\\"getAttribute\\\"](\\\"transform\\\")||\\\"\\\").replace(/.*\\\\bscale\\\\((\\\\d*\\\\.?\\\\d*)[^\\\\d]*(\\\\d*\\\\.?\\\\d*)[^\\\\d].*/,(function(t,e,r){return[e,r].join(\\\" \\\")})).split(\\\" \\\");return{x:+e[0]||1,y:+e[1]||1}},x.setScale=function(t,e,r){var n=t.attr?\\\"attr\\\":\\\"getAttribute\\\",i=t.attr?\\\"attr\\\":\\\"setAttribute\\\",a=t[n](\\\"transform\\\")||\\\"\\\";return e=e||1,r=r||1,a=a.replace(/(\\\\bscale\\\\(.*?\\\\);?)/,\\\"\\\").trim(),a=(a+=\\\"scale(\\\"+e+\\\",\\\"+r+\\\")\\\").trim(),t[i](\\\"transform\\\",a),a};var H=/\\\\s*sc.*/;x.setPointGroupScale=function(t,e,r){if(e=e||1,r=r||1,t){var n=1===e&&1===r?\\\"\\\":\\\"scale(\\\"+e+\\\",\\\"+r+\\\")\\\";t.each((function(){var t=(this.getAttribute(\\\"transform\\\")||\\\"\\\").replace(H,\\\"\\\");t=(t+=n).trim(),this.setAttribute(\\\"transform\\\",t)}))}};var q=/translate\\\\([^)]*\\\\)\\\\s*$/;function G(t,e){var r;return t&&(r=t.mf),void 0===r&&(r=e.marker&&e.marker.standoff||0),e._geo||e._xA?r:-r}x.setTextPointsScale=function(t,e,r){t&&t.each((function(){var t,i=n.select(this),a=i.select(\\\"text\\\");if(a.node()){var o=parseFloat(a.attr(\\\"x\\\")||0),s=parseFloat(a.attr(\\\"y\\\")||0),l=(i.attr(\\\"transform\\\")||\\\"\\\").match(q);t=1===e&&1===r?[]:[f(o,s),\\\"scale(\\\"+e+\\\",\\\"+r+\\\")\\\",f(-o,-s)],l&&t.push(l),i.attr(\\\"transform\\\",t.join(\\\"\\\"))}}))},x.getMarkerStandoff=G;var Z,Y,W,X,J,K,$=Math.atan2,Q=Math.cos,tt=Math.sin;function et(t,e){var r=e[0],n=e[1];return[r*Q(t)-n*tt(t),r*tt(t)+n*Q(t)]}function rt(t,e){var r,n,i=t.ma;void 0===i&&(i=e.marker.angle||0);var a=e.marker.angleref;if(\\\"previous\\\"===a||\\\"north\\\"===a){if(e._geo){var s=e._geo.project(t.lonlat);r=s[0],n=s[1]}else{var l=e._xA,u=e._yA;if(!l||!u)return 90;r=l.c2p(t.x),n=u.c2p(t.y)}if(e._geo){var c,f=t.lonlat[0],h=t.lonlat[1],p=e._geo.project([f,h+1e-5]),d=e._geo.project([f+1e-5,h]),v=$(d[1]-n,d[0]-r),g=$(p[1]-n,p[0]-r);if(\\\"north\\\"===a)c=i/180*Math.PI;else if(\\\"previous\\\"===a){var y=f/180*Math.PI,m=h/180*Math.PI,x=Z/180*Math.PI,b=Y/180*Math.PI,_=x-y,w=Q(b)*tt(_),T=tt(b)*Q(m)-Q(b)*tt(m)*Q(_);c=-$(w,T)-Math.PI,Z=f,Y=h}var k=et(v,[Q(c),0]),A=et(g,[tt(c),0]);i=$(k[1]+A[1],k[0]+A[0])/Math.PI*180,\\\"previous\\\"!==a||K===e.uid&&t.i===J+1||(i=null)}if(\\\"previous\\\"===a&&!e._geo)if(K===e.uid&&t.i===J+1&&o(r)&&o(n)){var M=r-W,S=n-X,E=e.line&&e.line.shape||\\\"\\\",L=E.slice(E.length-1);\\\"h\\\"===L&&(S=0),\\\"v\\\"===L&&(M=0),i+=$(S,M)/Math.PI*180+90}else i=null}return W=r,X=n,J=t.i,K=e.uid,i}x.getMarkerAngle=rt},90998:function(t,e,r){\\\"use strict\\\";var n,i,a,o,s=r(95616),l=r(39898).round,u=\\\"M0,0Z\\\",c=Math.sqrt(2),f=Math.sqrt(3),h=Math.PI,p=Math.cos,d=Math.sin;function v(t){return null===t}function g(t,e,r){if(!(t&&t%360!=0||e))return r;if(a===t&&o===e&&n===r)return i;function l(t,r){var n=p(t),i=d(t),a=r[0],o=r[1]+(e||0);return[a*n-o*i,a*i+o*n]}a=t,o=e,n=r;for(var u=t/180*h,c=0,f=0,v=s(r),g=\\\"\\\",y=0;y<v.length;y++){var m=v[y],x=m[0],b=c,_=f;if(\\\"M\\\"===x||\\\"L\\\"===x)c=+m[1],f=+m[2];else if(\\\"m\\\"===x||\\\"l\\\"===x)c+=+m[1],f+=+m[2];else if(\\\"H\\\"===x)c=+m[1];else if(\\\"h\\\"===x)c+=+m[1];else if(\\\"V\\\"===x)f=+m[1];else if(\\\"v\\\"===x)f+=+m[1];else if(\\\"A\\\"===x){c=+m[1],f=+m[2];var w=l(u,[+m[6],+m[7]]);m[6]=w[0],m[7]=w[1],m[3]=+m[3]+t}\\\"H\\\"!==x&&\\\"V\\\"!==x||(x=\\\"L\\\"),\\\"h\\\"!==x&&\\\"v\\\"!==x||(x=\\\"l\\\"),\\\"m\\\"!==x&&\\\"l\\\"!==x||(c-=b,f-=_);var T=l(u,[c,f]);\\\"H\\\"!==x&&\\\"V\\\"!==x||(x=\\\"L\\\"),\\\"M\\\"!==x&&\\\"L\\\"!==x&&\\\"m\\\"!==x&&\\\"l\\\"!==x||(m[1]=T[0],m[2]=T[1]),m[0]=x,g+=m[0]+m.slice(1).join(\\\",\\\")}return i=g,g}t.exports={circle:{n:0,f:function(t,e,r){if(v(e))return u;var n=l(t,2),i=\\\"M\\\"+n+\\\",0A\\\"+n+\\\",\\\"+n+\\\" 0 1,1 0,-\\\"+n+\\\"A\\\"+n+\\\",\\\"+n+\\\" 0 0,1 \\\"+n+\\\",0Z\\\";return r?g(e,r,i):i}},square:{n:1,f:function(t,e,r){if(v(e))return u;var n=l(t,2);return g(e,r,\\\"M\\\"+n+\\\",\\\"+n+\\\"H-\\\"+n+\\\"V-\\\"+n+\\\"H\\\"+n+\\\"Z\\\")}},diamond:{n:2,f:function(t,e,r){if(v(e))return u;var n=l(1.3*t,2);return g(e,r,\\\"M\\\"+n+\\\",0L0,\\\"+n+\\\"L-\\\"+n+\\\",0L0,-\\\"+n+\\\"Z\\\")}},cross:{n:3,f:function(t,e,r){if(v(e))return u;var n=l(.4*t,2),i=l(1.2*t,2);return g(e,r,\\\"M\\\"+i+\\\",\\\"+n+\\\"H\\\"+n+\\\"V\\\"+i+\\\"H-\\\"+n+\\\"V\\\"+n+\\\"H-\\\"+i+\\\"V-\\\"+n+\\\"H-\\\"+n+\\\"V-\\\"+i+\\\"H\\\"+n+\\\"V-\\\"+n+\\\"H\\\"+i+\\\"Z\\\")}},x:{n:4,f:function(t,e,r){if(v(e))return u;var n=l(.8*t/c,2),i=\\\"l\\\"+n+\\\",\\\"+n,a=\\\"l\\\"+n+\\\",-\\\"+n,o=\\\"l-\\\"+n+\\\",-\\\"+n,s=\\\"l-\\\"+n+\\\",\\\"+n;return g(e,r,\\\"M0,\\\"+n+i+a+o+a+o+s+o+s+i+s+i+\\\"Z\\\")}},\\\"triangle-up\\\":{n:5,f:function(t,e,r){if(v(e))return u;var n=l(2*t/f,2);return g(e,r,\\\"M-\\\"+n+\\\",\\\"+l(t/2,2)+\\\"H\\\"+n+\\\"L0,-\\\"+l(t,2)+\\\"Z\\\")}},\\\"triangle-down\\\":{n:6,f:function(t,e,r){if(v(e))return u;var n=l(2*t/f,2);return g(e,r,\\\"M-\\\"+n+\\\",-\\\"+l(t/2,2)+\\\"H\\\"+n+\\\"L0,\\\"+l(t,2)+\\\"Z\\\")}},\\\"triangle-left\\\":{n:7,f:function(t,e,r){if(v(e))return u;var n=l(2*t/f,2);return g(e,r,\\\"M\\\"+l(t/2,2)+\\\",-\\\"+n+\\\"V\\\"+n+\\\"L-\\\"+l(t,2)+\\\",0Z\\\")}},\\\"triangle-right\\\":{n:8,f:function(t,e,r){if(v(e))return u;var n=l(2*t/f,2);return g(e,r,\\\"M-\\\"+l(t/2,2)+\\\",-\\\"+n+\\\"V\\\"+n+\\\"L\\\"+l(t,2)+\\\",0Z\\\")}},\\\"triangle-ne\\\":{n:9,f:function(t,e,r){if(v(e))return u;var n=l(.6*t,2),i=l(1.2*t,2);return g(e,r,\\\"M-\\\"+i+\\\",-\\\"+n+\\\"H\\\"+n+\\\"V\\\"+i+\\\"Z\\\")}},\\\"triangle-se\\\":{n:10,f:function(t,e,r){if(v(e))return u;var n=l(.6*t,2),i=l(1.2*t,2);return g(e,r,\\\"M\\\"+n+\\\",-\\\"+i+\\\"V\\\"+n+\\\"H-\\\"+i+\\\"Z\\\")}},\\\"triangle-sw\\\":{n:11,f:function(t,e,r){if(v(e))return u;var n=l(.6*t,2),i=l(1.2*t,2);return g(e,r,\\\"M\\\"+i+\\\",\\\"+n+\\\"H-\\\"+n+\\\"V-\\\"+i+\\\"Z\\\")}},\\\"triangle-nw\\\":{n:12,f:function(t,e,r){if(v(e))return u;var n=l(.6*t,2),i=l(1.2*t,2);return g(e,r,\\\"M-\\\"+n+\\\",\\\"+i+\\\"V-\\\"+n+\\\"H\\\"+i+\\\"Z\\\")}},pentagon:{n:13,f:function(t,e,r){if(v(e))return u;var n=l(.951*t,2),i=l(.588*t,2),a=l(-t,2),o=l(-.309*t,2);return g(e,r,\\\"M\\\"+n+\\\",\\\"+o+\\\"L\\\"+i+\\\",\\\"+l(.809*t,2)+\\\"H-\\\"+i+\\\"L-\\\"+n+\\\",\\\"+o+\\\"L0,\\\"+a+\\\"Z\\\")}},hexagon:{n:14,f:function(t,e,r){if(v(e))return u;var n=l(t,2),i=l(t/2,2),a=l(t*f/2,2);return g(e,r,\\\"M\\\"+a+\\\",-\\\"+i+\\\"V\\\"+i+\\\"L0,\\\"+n+\\\"L-\\\"+a+\\\",\\\"+i+\\\"V-\\\"+i+\\\"L0,-\\\"+n+\\\"Z\\\")}},hexagon2:{n:15,f:function(t,e,r){if(v(e))return u;var n=l(t,2),i=l(t/2,2),a=l(t*f/2,2);return g(e,r,\\\"M-\\\"+i+\\\",\\\"+a+\\\"H\\\"+i+\\\"L\\\"+n+\\\",0L\\\"+i+\\\",-\\\"+a+\\\"H-\\\"+i+\\\"L-\\\"+n+\\\",0Z\\\")}},octagon:{n:16,f:function(t,e,r){if(v(e))return u;var n=l(.924*t,2),i=l(.383*t,2);return g(e,r,\\\"M-\\\"+i+\\\",-\\\"+n+\\\"H\\\"+i+\\\"L\\\"+n+\\\",-\\\"+i+\\\"V\\\"+i+\\\"L\\\"+i+\\\",\\\"+n+\\\"H-\\\"+i+\\\"L-\\\"+n+\\\",\\\"+i+\\\"V-\\\"+i+\\\"Z\\\")}},star:{n:17,f:function(t,e,r){if(v(e))return u;var n=1.4*t,i=l(.225*n,2),a=l(.951*n,2),o=l(.363*n,2),s=l(.588*n,2),c=l(-n,2),f=l(-.309*n,2),h=l(.118*n,2),p=l(.809*n,2);return g(e,r,\\\"M\\\"+i+\\\",\\\"+f+\\\"H\\\"+a+\\\"L\\\"+o+\\\",\\\"+h+\\\"L\\\"+s+\\\",\\\"+p+\\\"L0,\\\"+l(.382*n,2)+\\\"L-\\\"+s+\\\",\\\"+p+\\\"L-\\\"+o+\\\",\\\"+h+\\\"L-\\\"+a+\\\",\\\"+f+\\\"H-\\\"+i+\\\"L0,\\\"+c+\\\"Z\\\")}},hexagram:{n:18,f:function(t,e,r){if(v(e))return u;var n=l(.66*t,2),i=l(.38*t,2),a=l(.76*t,2);return g(e,r,\\\"M-\\\"+a+\\\",0l-\\\"+i+\\\",-\\\"+n+\\\"h\\\"+a+\\\"l\\\"+i+\\\",-\\\"+n+\\\"l\\\"+i+\\\",\\\"+n+\\\"h\\\"+a+\\\"l-\\\"+i+\\\",\\\"+n+\\\"l\\\"+i+\\\",\\\"+n+\\\"h-\\\"+a+\\\"l-\\\"+i+\\\",\\\"+n+\\\"l-\\\"+i+\\\",-\\\"+n+\\\"h-\\\"+a+\\\"Z\\\")}},\\\"star-triangle-up\\\":{n:19,f:function(t,e,r){if(v(e))return u;var n=l(t*f*.8,2),i=l(.8*t,2),a=l(1.6*t,2),o=l(4*t,2),s=\\\"A \\\"+o+\\\",\\\"+o+\\\" 0 0 1 \\\";return g(e,r,\\\"M-\\\"+n+\\\",\\\"+i+s+n+\\\",\\\"+i+s+\\\"0,-\\\"+a+s+\\\"-\\\"+n+\\\",\\\"+i+\\\"Z\\\")}},\\\"star-triangle-down\\\":{n:20,f:function(t,e,r){if(v(e))return u;var n=l(t*f*.8,2),i=l(.8*t,2),a=l(1.6*t,2),o=l(4*t,2),s=\\\"A \\\"+o+\\\",\\\"+o+\\\" 0 0 1 \\\";return g(e,r,\\\"M\\\"+n+\\\",-\\\"+i+s+\\\"-\\\"+n+\\\",-\\\"+i+s+\\\"0,\\\"+a+s+n+\\\",-\\\"+i+\\\"Z\\\")}},\\\"star-square\\\":{n:21,f:function(t,e,r){if(v(e))return u;var n=l(1.1*t,2),i=l(2*t,2),a=\\\"A \\\"+i+\\\",\\\"+i+\\\" 0 0 1 \\\";return g(e,r,\\\"M-\\\"+n+\\\",-\\\"+n+a+\\\"-\\\"+n+\\\",\\\"+n+a+n+\\\",\\\"+n+a+n+\\\",-\\\"+n+a+\\\"-\\\"+n+\\\",-\\\"+n+\\\"Z\\\")}},\\\"star-diamond\\\":{n:22,f:function(t,e,r){if(v(e))return u;var n=l(1.4*t,2),i=l(1.9*t,2),a=\\\"A \\\"+i+\\\",\\\"+i+\\\" 0 0 1 \\\";return g(e,r,\\\"M-\\\"+n+\\\",0\\\"+a+\\\"0,\\\"+n+a+n+\\\",0\\\"+a+\\\"0,-\\\"+n+a+\\\"-\\\"+n+\\\",0Z\\\")}},\\\"diamond-tall\\\":{n:23,f:function(t,e,r){if(v(e))return u;var n=l(.7*t,2),i=l(1.4*t,2);return g(e,r,\\\"M0,\\\"+i+\\\"L\\\"+n+\\\",0L0,-\\\"+i+\\\"L-\\\"+n+\\\",0Z\\\")}},\\\"diamond-wide\\\":{n:24,f:function(t,e,r){if(v(e))return u;var n=l(1.4*t,2),i=l(.7*t,2);return g(e,r,\\\"M0,\\\"+i+\\\"L\\\"+n+\\\",0L0,-\\\"+i+\\\"L-\\\"+n+\\\",0Z\\\")}},hourglass:{n:25,f:function(t,e,r){if(v(e))return u;var n=l(t,2);return g(e,r,\\\"M\\\"+n+\\\",\\\"+n+\\\"H-\\\"+n+\\\"L\\\"+n+\\\",-\\\"+n+\\\"H-\\\"+n+\\\"Z\\\")},noDot:!0},bowtie:{n:26,f:function(t,e,r){if(v(e))return u;var n=l(t,2);return g(e,r,\\\"M\\\"+n+\\\",\\\"+n+\\\"V-\\\"+n+\\\"L-\\\"+n+\\\",\\\"+n+\\\"V-\\\"+n+\\\"Z\\\")},noDot:!0},\\\"circle-cross\\\":{n:27,f:function(t,e,r){if(v(e))return u;var n=l(t,2);return g(e,r,\\\"M0,\\\"+n+\\\"V-\\\"+n+\\\"M\\\"+n+\\\",0H-\\\"+n+\\\"M\\\"+n+\\\",0A\\\"+n+\\\",\\\"+n+\\\" 0 1,1 0,-\\\"+n+\\\"A\\\"+n+\\\",\\\"+n+\\\" 0 0,1 \\\"+n+\\\",0Z\\\")},needLine:!0,noDot:!0},\\\"circle-x\\\":{n:28,f:function(t,e,r){if(v(e))return u;var n=l(t,2),i=l(t/c,2);return g(e,r,\\\"M\\\"+i+\\\",\\\"+i+\\\"L-\\\"+i+\\\",-\\\"+i+\\\"M\\\"+i+\\\",-\\\"+i+\\\"L-\\\"+i+\\\",\\\"+i+\\\"M\\\"+n+\\\",0A\\\"+n+\\\",\\\"+n+\\\" 0 1,1 0,-\\\"+n+\\\"A\\\"+n+\\\",\\\"+n+\\\" 0 0,1 \\\"+n+\\\",0Z\\\")},needLine:!0,noDot:!0},\\\"square-cross\\\":{n:29,f:function(t,e,r){if(v(e))return u;var n=l(t,2);return g(e,r,\\\"M0,\\\"+n+\\\"V-\\\"+n+\\\"M\\\"+n+\\\",0H-\\\"+n+\\\"M\\\"+n+\\\",\\\"+n+\\\"H-\\\"+n+\\\"V-\\\"+n+\\\"H\\\"+n+\\\"Z\\\")},needLine:!0,noDot:!0},\\\"square-x\\\":{n:30,f:function(t,e,r){if(v(e))return u;var n=l(t,2);return g(e,r,\\\"M\\\"+n+\\\",\\\"+n+\\\"L-\\\"+n+\\\",-\\\"+n+\\\"M\\\"+n+\\\",-\\\"+n+\\\"L-\\\"+n+\\\",\\\"+n+\\\"M\\\"+n+\\\",\\\"+n+\\\"H-\\\"+n+\\\"V-\\\"+n+\\\"H\\\"+n+\\\"Z\\\")},needLine:!0,noDot:!0},\\\"diamond-cross\\\":{n:31,f:function(t,e,r){if(v(e))return u;var n=l(1.3*t,2);return g(e,r,\\\"M\\\"+n+\\\",0L0,\\\"+n+\\\"L-\\\"+n+\\\",0L0,-\\\"+n+\\\"ZM0,-\\\"+n+\\\"V\\\"+n+\\\"M-\\\"+n+\\\",0H\\\"+n)},needLine:!0,noDot:!0},\\\"diamond-x\\\":{n:32,f:function(t,e,r){if(v(e))return u;var n=l(1.3*t,2),i=l(.65*t,2);return g(e,r,\\\"M\\\"+n+\\\",0L0,\\\"+n+\\\"L-\\\"+n+\\\",0L0,-\\\"+n+\\\"ZM-\\\"+i+\\\",-\\\"+i+\\\"L\\\"+i+\\\",\\\"+i+\\\"M-\\\"+i+\\\",\\\"+i+\\\"L\\\"+i+\\\",-\\\"+i)},needLine:!0,noDot:!0},\\\"cross-thin\\\":{n:33,f:function(t,e,r){if(v(e))return u;var n=l(1.4*t,2);return g(e,r,\\\"M0,\\\"+n+\\\"V-\\\"+n+\\\"M\\\"+n+\\\",0H-\\\"+n)},needLine:!0,noDot:!0,noFill:!0},\\\"x-thin\\\":{n:34,f:function(t,e,r){if(v(e))return u;var n=l(t,2);return g(e,r,\\\"M\\\"+n+\\\",\\\"+n+\\\"L-\\\"+n+\\\",-\\\"+n+\\\"M\\\"+n+\\\",-\\\"+n+\\\"L-\\\"+n+\\\",\\\"+n)},needLine:!0,noDot:!0,noFill:!0},asterisk:{n:35,f:function(t,e,r){if(v(e))return u;var n=l(1.2*t,2),i=l(.85*t,2);return g(e,r,\\\"M0,\\\"+n+\\\"V-\\\"+n+\\\"M\\\"+n+\\\",0H-\\\"+n+\\\"M\\\"+i+\\\",\\\"+i+\\\"L-\\\"+i+\\\",-\\\"+i+\\\"M\\\"+i+\\\",-\\\"+i+\\\"L-\\\"+i+\\\",\\\"+i)},needLine:!0,noDot:!0,noFill:!0},hash:{n:36,f:function(t,e,r){if(v(e))return u;var n=l(t/2,2),i=l(t,2);return g(e,r,\\\"M\\\"+n+\\\",\\\"+i+\\\"V-\\\"+i+\\\"M\\\"+(n-i)+\\\",-\\\"+i+\\\"V\\\"+i+\\\"M\\\"+i+\\\",\\\"+n+\\\"H-\\\"+i+\\\"M-\\\"+i+\\\",\\\"+(n-i)+\\\"H\\\"+i)},needLine:!0,noFill:!0},\\\"y-up\\\":{n:37,f:function(t,e,r){if(v(e))return u;var n=l(1.2*t,2),i=l(1.6*t,2),a=l(.8*t,2);return g(e,r,\\\"M-\\\"+n+\\\",\\\"+a+\\\"L0,0M\\\"+n+\\\",\\\"+a+\\\"L0,0M0,-\\\"+i+\\\"L0,0\\\")},needLine:!0,noDot:!0,noFill:!0},\\\"y-down\\\":{n:38,f:function(t,e,r){if(v(e))return u;var n=l(1.2*t,2),i=l(1.6*t,2),a=l(.8*t,2);return g(e,r,\\\"M-\\\"+n+\\\",-\\\"+a+\\\"L0,0M\\\"+n+\\\",-\\\"+a+\\\"L0,0M0,\\\"+i+\\\"L0,0\\\")},needLine:!0,noDot:!0,noFill:!0},\\\"y-left\\\":{n:39,f:function(t,e,r){if(v(e))return u;var n=l(1.2*t,2),i=l(1.6*t,2),a=l(.8*t,2);return g(e,r,\\\"M\\\"+a+\\\",\\\"+n+\\\"L0,0M\\\"+a+\\\",-\\\"+n+\\\"L0,0M-\\\"+i+\\\",0L0,0\\\")},needLine:!0,noDot:!0,noFill:!0},\\\"y-right\\\":{n:40,f:function(t,e,r){if(v(e))return u;var n=l(1.2*t,2),i=l(1.6*t,2),a=l(.8*t,2);return g(e,r,\\\"M-\\\"+a+\\\",\\\"+n+\\\"L0,0M-\\\"+a+\\\",-\\\"+n+\\\"L0,0M\\\"+i+\\\",0L0,0\\\")},needLine:!0,noDot:!0,noFill:!0},\\\"line-ew\\\":{n:41,f:function(t,e,r){if(v(e))return u;var n=l(1.4*t,2);return g(e,r,\\\"M\\\"+n+\\\",0H-\\\"+n)},needLine:!0,noDot:!0,noFill:!0},\\\"line-ns\\\":{n:42,f:function(t,e,r){if(v(e))return u;var n=l(1.4*t,2);return g(e,r,\\\"M0,\\\"+n+\\\"V-\\\"+n)},needLine:!0,noDot:!0,noFill:!0},\\\"line-ne\\\":{n:43,f:function(t,e,r){if(v(e))return u;var n=l(t,2);return g(e,r,\\\"M\\\"+n+\\\",-\\\"+n+\\\"L-\\\"+n+\\\",\\\"+n)},needLine:!0,noDot:!0,noFill:!0},\\\"line-nw\\\":{n:44,f:function(t,e,r){if(v(e))return u;var n=l(t,2);return g(e,r,\\\"M\\\"+n+\\\",\\\"+n+\\\"L-\\\"+n+\\\",-\\\"+n)},needLine:!0,noDot:!0,noFill:!0},\\\"arrow-up\\\":{n:45,f:function(t,e,r){if(v(e))return u;var n=l(t,2);return g(e,r,\\\"M0,0L-\\\"+n+\\\",\\\"+l(2*t,2)+\\\"H\\\"+n+\\\"Z\\\")},backoff:1,noDot:!0},\\\"arrow-down\\\":{n:46,f:function(t,e,r){if(v(e))return u;var n=l(t,2);return g(e,r,\\\"M0,0L-\\\"+n+\\\",-\\\"+l(2*t,2)+\\\"H\\\"+n+\\\"Z\\\")},noDot:!0},\\\"arrow-left\\\":{n:47,f:function(t,e,r){if(v(e))return u;var n=l(2*t,2),i=l(t,2);return g(e,r,\\\"M0,0L\\\"+n+\\\",-\\\"+i+\\\"V\\\"+i+\\\"Z\\\")},noDot:!0},\\\"arrow-right\\\":{n:48,f:function(t,e,r){if(v(e))return u;var n=l(2*t,2),i=l(t,2);return g(e,r,\\\"M0,0L-\\\"+n+\\\",-\\\"+i+\\\"V\\\"+i+\\\"Z\\\")},noDot:!0},\\\"arrow-bar-up\\\":{n:49,f:function(t,e,r){if(v(e))return u;var n=l(t,2);return g(e,r,\\\"M-\\\"+n+\\\",0H\\\"+n+\\\"M0,0L-\\\"+n+\\\",\\\"+l(2*t,2)+\\\"H\\\"+n+\\\"Z\\\")},backoff:1,needLine:!0,noDot:!0},\\\"arrow-bar-down\\\":{n:50,f:function(t,e,r){if(v(e))return u;var n=l(t,2);return g(e,r,\\\"M-\\\"+n+\\\",0H\\\"+n+\\\"M0,0L-\\\"+n+\\\",-\\\"+l(2*t,2)+\\\"H\\\"+n+\\\"Z\\\")},needLine:!0,noDot:!0},\\\"arrow-bar-left\\\":{n:51,f:function(t,e,r){if(v(e))return u;var n=l(2*t,2),i=l(t,2);return g(e,r,\\\"M0,-\\\"+i+\\\"V\\\"+i+\\\"M0,0L\\\"+n+\\\",-\\\"+i+\\\"V\\\"+i+\\\"Z\\\")},needLine:!0,noDot:!0},\\\"arrow-bar-right\\\":{n:52,f:function(t,e,r){if(v(e))return u;var n=l(2*t,2),i=l(t,2);return g(e,r,\\\"M0,-\\\"+i+\\\"V\\\"+i+\\\"M0,0L-\\\"+n+\\\",-\\\"+i+\\\"V\\\"+i+\\\"Z\\\")},needLine:!0,noDot:!0},arrow:{n:53,f:function(t,e,r){if(v(e))return u;var n=h/2.5,i=2*t*p(n),a=2*t*d(n);return g(e,r,\\\"M0,0L\\\"+-i+\\\",\\\"+a+\\\"L\\\"+i+\\\",\\\"+a+\\\"Z\\\")},backoff:.9,noDot:!0},\\\"arrow-wide\\\":{n:54,f:function(t,e,r){if(v(e))return u;var n=h/4,i=2*t*p(n),a=2*t*d(n);return g(e,r,\\\"M0,0L\\\"+-i+\\\",\\\"+a+\\\"A \\\"+2*t+\\\",\\\"+2*t+\\\" 0 0 1 \\\"+i+\\\",\\\"+a+\\\"Z\\\")},backoff:.4,noDot:!0}}},25673:function(t){\\\"use strict\\\";t.exports={visible:{valType:\\\"boolean\\\",editType:\\\"calc\\\"},type:{valType:\\\"enumerated\\\",values:[\\\"percent\\\",\\\"constant\\\",\\\"sqrt\\\",\\\"data\\\"],editType:\\\"calc\\\"},symmetric:{valType:\\\"boolean\\\",editType:\\\"calc\\\"},array:{valType:\\\"data_array\\\",editType:\\\"calc\\\"},arrayminus:{valType:\\\"data_array\\\",editType:\\\"calc\\\"},value:{valType:\\\"number\\\",min:0,dflt:10,editType:\\\"calc\\\"},valueminus:{valType:\\\"number\\\",min:0,dflt:10,editType:\\\"calc\\\"},traceref:{valType:\\\"integer\\\",min:0,dflt:0,editType:\\\"style\\\"},tracerefminus:{valType:\\\"integer\\\",min:0,dflt:0,editType:\\\"style\\\"},copy_ystyle:{valType:\\\"boolean\\\",editType:\\\"plot\\\"},copy_zstyle:{valType:\\\"boolean\\\",editType:\\\"style\\\"},color:{valType:\\\"color\\\",editType:\\\"style\\\"},thickness:{valType:\\\"number\\\",min:0,dflt:2,editType:\\\"style\\\"},width:{valType:\\\"number\\\",min:0,editType:\\\"plot\\\"},editType:\\\"calc\\\",_deprecated:{opacity:{valType:\\\"number\\\",editType:\\\"style\\\"}}}},84532:function(t,e,r){\\\"use strict\\\";var n=r(92770),i=r(73972),a=r(89298),o=r(71828),s=r(45827);function l(t,e,r,i){var l=e[\\\"error_\\\"+i]||{},u=[];if(l.visible&&-1!==[\\\"linear\\\",\\\"log\\\"].indexOf(r.type)){for(var c=s(l),f=0;f<t.length;f++){var h=t[f],p=h.i;if(void 0===p)p=f;else if(null===p)continue;var d=h[i];if(n(r.c2l(d))){var v=c(d,p);if(n(v[0])&&n(v[1])){var g=h[i+\\\"s\\\"]=d-v[0],y=h[i+\\\"h\\\"]=d+v[1];u.push(g,y)}}}var m=r._id,x=e._extremes[m],b=a.findExtremes(r,u,o.extendFlat({tozero:x.opts.tozero},{padded:!0}));x.min=x.min.concat(b.min),x.max=x.max.concat(b.max)}}t.exports=function(t){for(var e=t.calcdata,r=0;r<e.length;r++){var n=e[r],o=n[0].trace;if(!0===o.visible&&i.traceIs(o,\\\"errorBarsOK\\\")){var s=a.getFromId(t,o.xaxis),u=a.getFromId(t,o.yaxis);l(n,o,s,\\\"x\\\"),l(n,o,u,\\\"y\\\")}}}},45827:function(t){\\\"use strict\\\";function e(t,e){return\\\"percent\\\"===t?function(t){return Math.abs(t*e/100)}:\\\"constant\\\"===t?function(){return Math.abs(e)}:\\\"sqrt\\\"===t?function(t){return Math.sqrt(Math.abs(t))}:void 0}t.exports=function(t){var r=t.type,n=t.symmetric;if(\\\"data\\\"===r){var i=t.array||[];if(n)return function(t,e){var r=+i[e];return[r,r]};var a=t.arrayminus||[];return function(t,e){var r=+i[e],n=+a[e];return isNaN(r)&&isNaN(n)?[NaN,NaN]:[n||0,r||0]}}var o=e(r,t.value),s=e(r,t.valueminus);return n||void 0===t.valueminus?function(t){var e=o(t);return[e,e]}:function(t){return[s(t),o(t)]}}},97587:function(t,e,r){\\\"use strict\\\";var n=r(92770),i=r(73972),a=r(71828),o=r(44467),s=r(25673);t.exports=function(t,e,r,l){var u=\\\"error_\\\"+l.axis,c=o.newContainer(e,u),f=t[u]||{};function h(t,e){return a.coerce(f,c,s,t,e)}if(!1!==h(\\\"visible\\\",void 0!==f.array||void 0!==f.value||\\\"sqrt\\\"===f.type)){var p=h(\\\"type\\\",\\\"array\\\"in f?\\\"data\\\":\\\"percent\\\"),d=!0;\\\"sqrt\\\"!==p&&(d=h(\\\"symmetric\\\",!((\\\"data\\\"===p?\\\"arrayminus\\\":\\\"valueminus\\\")in f))),\\\"data\\\"===p?(h(\\\"array\\\"),h(\\\"traceref\\\"),d||(h(\\\"arrayminus\\\"),h(\\\"tracerefminus\\\"))):\\\"percent\\\"!==p&&\\\"constant\\\"!==p||(h(\\\"value\\\"),d||h(\\\"valueminus\\\"));var v=\\\"copy_\\\"+l.inherit+\\\"style\\\";l.inherit&&(e[\\\"error_\\\"+l.inherit]||{}).visible&&h(v,!(f.color||n(f.thickness)||n(f.width))),l.inherit&&c[v]||(h(\\\"color\\\",r),h(\\\"thickness\\\"),h(\\\"width\\\",i.traceIs(e,\\\"gl3d\\\")?0:4))}}},37369:function(t,e,r){\\\"use strict\\\";var n=r(71828),i=r(30962).overrideAll,a=r(25673),o={error_x:n.extendFlat({},a),error_y:n.extendFlat({},a)};delete o.error_x.copy_zstyle,delete o.error_y.copy_zstyle,delete o.error_y.copy_ystyle;var s={error_x:n.extendFlat({},a),error_y:n.extendFlat({},a),error_z:n.extendFlat({},a)};delete s.error_x.copy_ystyle,delete s.error_y.copy_ystyle,delete s.error_z.copy_ystyle,delete s.error_z.copy_zstyle,t.exports={moduleType:\\\"component\\\",name:\\\"errorbars\\\",schema:{traces:{scatter:o,bar:o,histogram:o,scatter3d:i(s,\\\"calc\\\",\\\"nested\\\"),scattergl:i(o,\\\"calc\\\",\\\"nested\\\")}},supplyDefaults:r(97587),calc:r(84532),makeComputeError:r(45827),plot:r(19398),style:r(62662),hoverInfo:function(t,e,r){(e.error_y||{}).visible&&(r.yerr=t.yh-t.y,e.error_y.symmetric||(r.yerrneg=t.y-t.ys)),(e.error_x||{}).visible&&(r.xerr=t.xh-t.x,e.error_x.symmetric||(r.xerrneg=t.x-t.xs))}}},19398:function(t,e,r){\\\"use strict\\\";var n=r(39898),i=r(92770),a=r(91424),o=r(34098);t.exports=function(t,e,r,s){var l=r.xaxis,u=r.yaxis,c=s&&s.duration>0,f=t._context.staticPlot;e.each((function(e){var h,p=e[0].trace,d=p.error_x||{},v=p.error_y||{};p.ids&&(h=function(t){return t.id});var g=o.hasMarkers(p)&&p.marker.maxdisplayed>0;v.visible||d.visible||(e=[]);var y=n.select(this).selectAll(\\\"g.errorbar\\\").data(e,h);if(y.exit().remove(),e.length){d.visible||y.selectAll(\\\"path.xerror\\\").remove(),v.visible||y.selectAll(\\\"path.yerror\\\").remove(),y.style(\\\"opacity\\\",1);var m=y.enter().append(\\\"g\\\").classed(\\\"errorbar\\\",!0);c&&m.style(\\\"opacity\\\",0).transition().duration(s.duration).style(\\\"opacity\\\",1),a.setClipUrl(y,r.layerClipId,t),y.each((function(t){var e=n.select(this),r=function(t,e,r){var n={x:e.c2p(t.x),y:r.c2p(t.y)};return void 0!==t.yh&&(n.yh=r.c2p(t.yh),n.ys=r.c2p(t.ys),i(n.ys)||(n.noYS=!0,n.ys=r.c2p(t.ys,!0))),void 0!==t.xh&&(n.xh=e.c2p(t.xh),n.xs=e.c2p(t.xs),i(n.xs)||(n.noXS=!0,n.xs=e.c2p(t.xs,!0))),n}(t,l,u);if(!g||t.vis){var a,o=e.select(\\\"path.yerror\\\");if(v.visible&&i(r.x)&&i(r.yh)&&i(r.ys)){var h=v.width;a=\\\"M\\\"+(r.x-h)+\\\",\\\"+r.yh+\\\"h\\\"+2*h+\\\"m-\\\"+h+\\\",0V\\\"+r.ys,r.noYS||(a+=\\\"m-\\\"+h+\\\",0h\\\"+2*h),o.size()?c&&(o=o.transition().duration(s.duration).ease(s.easing)):o=e.append(\\\"path\\\").style(\\\"vector-effect\\\",f?\\\"none\\\":\\\"non-scaling-stroke\\\").classed(\\\"yerror\\\",!0),o.attr(\\\"d\\\",a)}else o.remove();var p=e.select(\\\"path.xerror\\\");if(d.visible&&i(r.y)&&i(r.xh)&&i(r.xs)){var y=(d.copy_ystyle?v:d).width;a=\\\"M\\\"+r.xh+\\\",\\\"+(r.y-y)+\\\"v\\\"+2*y+\\\"m0,-\\\"+y+\\\"H\\\"+r.xs,r.noXS||(a+=\\\"m0,-\\\"+y+\\\"v\\\"+2*y),p.size()?c&&(p=p.transition().duration(s.duration).ease(s.easing)):p=e.append(\\\"path\\\").style(\\\"vector-effect\\\",f?\\\"none\\\":\\\"non-scaling-stroke\\\").classed(\\\"xerror\\\",!0),p.attr(\\\"d\\\",a)}else p.remove()}}))}}))}},62662:function(t,e,r){\\\"use strict\\\";var n=r(39898),i=r(7901);t.exports=function(t){t.each((function(t){var e=t[0].trace,r=e.error_y||{},a=e.error_x||{},o=n.select(this);o.selectAll(\\\"path.yerror\\\").style(\\\"stroke-width\\\",r.thickness+\\\"px\\\").call(i.stroke,r.color),a.copy_ystyle&&(a=r),o.selectAll(\\\"path.xerror\\\").style(\\\"stroke-width\\\",a.thickness+\\\"px\\\").call(i.stroke,a.color)}))}},77914:function(t,e,r){\\\"use strict\\\";var n=r(41940),i=r(528).hoverlabel,a=r(1426).extendFlat;t.exports={hoverlabel:{bgcolor:a({},i.bgcolor,{arrayOk:!0}),bordercolor:a({},i.bordercolor,{arrayOk:!0}),font:n({arrayOk:!0,editType:\\\"none\\\"}),align:a({},i.align,{arrayOk:!0}),namelength:a({},i.namelength,{arrayOk:!0}),editType:\\\"none\\\"}}},30732:function(t,e,r){\\\"use strict\\\";var n=r(71828),i=r(73972);function a(t,e,r,i){i=i||n.identity,Array.isArray(t)&&(e[0][r]=i(t))}t.exports=function(t){var e=t.calcdata,r=t._fullLayout;function o(t){return function(e){return n.coerceHoverinfo({hoverinfo:e},{_module:t._module},r)}}for(var s=0;s<e.length;s++){var l=e[s],u=l[0].trace;if(!i.traceIs(u,\\\"pie-like\\\")){var c=i.traceIs(u,\\\"2dMap\\\")?a:n.fillArray;c(u.hoverinfo,l,\\\"hi\\\",o(u)),u.hovertemplate&&c(u.hovertemplate,l,\\\"ht\\\"),u.hoverlabel&&(c(u.hoverlabel.bgcolor,l,\\\"hbg\\\"),c(u.hoverlabel.bordercolor,l,\\\"hbc\\\"),c(u.hoverlabel.font.size,l,\\\"hts\\\"),c(u.hoverlabel.font.color,l,\\\"htc\\\"),c(u.hoverlabel.font.family,l,\\\"htf\\\"),c(u.hoverlabel.namelength,l,\\\"hnl\\\"),c(u.hoverlabel.align,l,\\\"hta\\\"))}}}},75914:function(t,e,r){\\\"use strict\\\";var n=r(73972),i=r(88335).hover;t.exports=function(t,e,r){var a=n.getComponentMethod(\\\"annotations\\\",\\\"onClick\\\")(t,t._hoverdata);function o(){t.emit(\\\"plotly_click\\\",{points:t._hoverdata,event:e})}void 0!==r&&i(t,e,r,!0),t._hoverdata&&e&&e.target&&(a&&a.then?a.then(o):o(),e.stopImmediatePropagation&&e.stopImmediatePropagation())}},26675:function(t){\\\"use strict\\\";t.exports={YANGLE:60,HOVERARROWSIZE:6,HOVERTEXTPAD:3,HOVERFONTSIZE:13,HOVERFONT:\\\"Arial, sans-serif\\\",HOVERMINTIME:50,HOVERID:\\\"-hover\\\"}},54268:function(t,e,r){\\\"use strict\\\";var n=r(71828),i=r(77914),a=r(38048);t.exports=function(t,e,r,o){var s=n.extendFlat({},o.hoverlabel);e.hovertemplate&&(s.namelength=-1),a(t,e,(function(r,a){return n.coerce(t,e,i,r,a)}),s)}},23469:function(t,e,r){\\\"use strict\\\";var n=r(71828);e.getSubplot=function(t){return t.subplot||t.xaxis+t.yaxis||t.geo},e.isTraceInSubplots=function(t,r){if(\\\"splom\\\"===t.type){for(var n=t.xaxes||[],i=t.yaxes||[],a=0;a<n.length;a++)for(var o=0;o<i.length;o++)if(-1!==r.indexOf(n[a]+i[o]))return!0;return!1}return-1!==r.indexOf(e.getSubplot(t))},e.flat=function(t,e){for(var r=new Array(t.length),n=0;n<t.length;n++)r[n]=e;return r},e.p2c=function(t,e){for(var r=new Array(t.length),n=0;n<t.length;n++)r[n]=t[n].p2c(e);return r},e.getDistanceFunction=function(t,r,n,i){return\\\"closest\\\"===t?i||e.quadrature(r,n):\\\"x\\\"===t.charAt(0)?r:n},e.getClosest=function(t,e,r){if(!1!==r.index)r.index>=0&&r.index<t.length?r.distance=0:r.index=!1;else for(var n=0;n<t.length;n++){var i=e(t[n]);i<=r.distance&&(r.index=n,r.distance=i)}return r},e.inbox=function(t,e,r){return t*e<0||0===t?r:1/0},e.quadrature=function(t,e){return function(r){var n=t(r),i=e(r);return Math.sqrt(n*n+i*i)}},e.makeEventData=function(t,r,n){var i=\\\"index\\\"in t?t.index:t.pointNumber,a={data:r._input,fullData:r,curveNumber:r.index,pointNumber:i};if(r._indexToPoints){var o=r._indexToPoints[i];1===o.length?a.pointIndex=o[0]:a.pointIndices=o}else a.pointIndex=i;return r._module.eventData?a=r._module.eventData(a,t,r,n,i):(\\\"xVal\\\"in t?a.x=t.xVal:\\\"x\\\"in t&&(a.x=t.x),\\\"yVal\\\"in t?a.y=t.yVal:\\\"y\\\"in t&&(a.y=t.y),t.xa&&(a.xaxis=t.xa),t.ya&&(a.yaxis=t.ya),void 0!==t.zLabelVal&&(a.z=t.zLabelVal)),e.appendArrayPointValue(a,r,i),a},e.appendArrayPointValue=function(t,e,r){var i=e._arrayAttrs;if(i)for(var s=0;s<i.length;s++){var l=i[s],u=a(l);if(void 0===t[u]){var c=o(n.nestedProperty(e,l).get(),r);void 0!==c&&(t[u]=c)}}},e.appendArrayMultiPointValues=function(t,e,r){var i=e._arrayAttrs;if(i)for(var s=0;s<i.length;s++){var l=i[s],u=a(l);if(void 0===t[u]){for(var c=n.nestedProperty(e,l).get(),f=new Array(r.length),h=0;h<r.length;h++)f[h]=o(c,r[h]);t[u]=f}}};var i={ids:\\\"id\\\",locations:\\\"location\\\",labels:\\\"label\\\",values:\\\"value\\\",\\\"marker.colors\\\":\\\"color\\\",parents:\\\"parent\\\"};function a(t){return i[t]||t}function o(t,e){return Array.isArray(e)?Array.isArray(t)&&Array.isArray(t[e[0]])?t[e[0]][e[1]]:void 0:t[e]}var s={x:!0,y:!0},l={\\\"x unified\\\":!0,\\\"y unified\\\":!0};e.isUnifiedHover=function(t){return\\\"string\\\"==typeof t&&!!l[t]},e.isXYhover=function(t){return\\\"string\\\"==typeof t&&!!s[t]}},88335:function(t,e,r){\\\"use strict\\\";var n=r(39898),i=r(92770),a=r(84267),o=r(71828),s=o.strTranslate,l=o.strRotate,u=r(11086),c=r(63893),f=r(39918),h=r(91424),p=r(7901),d=r(28569),v=r(89298),g=r(73972),y=r(23469),m=r(26675),x=r(99017),b=r(43969),_=m.YANGLE,w=Math.PI*_/180,T=1/Math.sin(w),k=Math.cos(w),A=Math.sin(w),M=m.HOVERARROWSIZE,S=m.HOVERTEXTPAD,E={box:!0,ohlc:!0,violin:!0,candlestick:!0},L={scatter:!0,scattergl:!0,splom:!0};function C(t){return[t.trace.index,t.index,t.x0,t.y0,t.name,t.attr,t.xa?t.xa._id:\\\"\\\",t.ya?t.ya._id:\\\"\\\"].join(\\\",\\\")}e.hover=function(t,e,r,a){t=o.getGraphDiv(t);var s=e.target;o.throttle(t._fullLayout._uid+m.HOVERID,m.HOVERMINTIME,(function(){!function(t,e,r,a,s){r||(r=\\\"xy\\\");var l=Array.isArray(r)?r:[r],c=t._fullLayout,h=c._plots||[],v=h[r],m=c._has(\\\"cartesian\\\");if(v){var x=v.overlays.map((function(t){return t.id}));l=l.concat(x)}for(var b=l.length,_=new Array(b),w=new Array(b),k=!1,A=0;A<b;A++){var S=l[A];if(h[S])k=!0,_[A]=h[S].xaxis,w[A]=h[S].yaxis;else{if(!c[S]||!c[S]._subplot)return void o.warn(\\\"Unrecognized subplot: \\\"+S);var P=c[S]._subplot;_[A]=P.xaxis,w[A]=P.yaxis}}var I=e.hovermode||c.hovermode;if(I&&!k&&(I=\\\"closest\\\"),-1===[\\\"x\\\",\\\"y\\\",\\\"closest\\\",\\\"x unified\\\",\\\"y unified\\\"].indexOf(I)||!t.calcdata||t.querySelector(\\\".zoombox\\\")||t._dragging)return d.unhoverRaw(t,e);var N=c.hoverdistance;-1===N&&(N=1/0);var H=c.spikedistance;-1===H&&(H=1/0);var q,G,Z,Y,W,X,J,K,$,Q,tt,et,rt,nt=[],it=[],at={hLinePoint:null,vLinePoint:null},ot=!1;if(Array.isArray(e))for(I=\\\"array\\\",Z=0;Z<e.length;Z++)(W=t.calcdata[e[Z].curveNumber||0])&&(X=W[0].trace,\\\"skip\\\"!==W[0].trace.hoverinfo&&(it.push(W),\\\"h\\\"===X.orientation&&(ot=!0)));else{for(Y=0;Y<t.calcdata.length;Y++)W=t.calcdata[Y],\\\"skip\\\"!==(X=W[0].trace).hoverinfo&&y.isTraceInSubplots(X,l)&&(it.push(W),\\\"h\\\"===X.orientation&&(ot=!0));var st,lt;if(s){if(!1===u.triggerHandler(t,\\\"plotly_beforehover\\\",e))return;var ut=s.getBoundingClientRect();st=e.clientX-ut.left,lt=e.clientY-ut.top,c._calcInverseTransform(t);var ct=o.apply3DTransform(c._invTransform)(st,lt);if(st=ct[0],lt=ct[1],st<0||st>_[0]._length||lt<0||lt>w[0]._length)return d.unhoverRaw(t,e)}else st=\\\"xpx\\\"in e?e.xpx:_[0]._length/2,lt=\\\"ypx\\\"in e?e.ypx:w[0]._length/2;if(e.pointerX=st+_[0]._offset,e.pointerY=lt+w[0]._offset,q=\\\"xval\\\"in e?y.flat(l,e.xval):y.p2c(_,st),G=\\\"yval\\\"in e?y.flat(l,e.yval):y.p2c(w,lt),!i(q[0])||!i(G[0]))return o.warn(\\\"Fx.hover failed\\\",e,t),d.unhoverRaw(t,e)}var ft=1/0;function ht(t,r){for(Y=0;Y<it.length;Y++)if((W=it[Y])&&W[0]&&W[0].trace&&!0===(X=W[0].trace).visible&&0!==X._length&&-1===[\\\"carpet\\\",\\\"contourcarpet\\\"].indexOf(X._module.name)){if(\\\"splom\\\"===X.type?J=l[K=0]:(J=y.getSubplot(X),K=l.indexOf(J)),$=I,y.isUnifiedHover($)&&($=$.charAt(0)),et={cd:W,trace:X,xa:_[K],ya:w[K],maxHoverDistance:N,maxSpikeDistance:H,index:!1,distance:Math.min(ft,N),spikeDistance:1/0,xSpike:void 0,ySpike:void 0,color:p.defaultLine,name:X.name,x0:void 0,x1:void 0,y0:void 0,y1:void 0,xLabelVal:void 0,yLabelVal:void 0,zLabelVal:void 0,text:void 0},c[J]&&(et.subplot=c[J]._subplot),c._splomScenes&&c._splomScenes[X.uid]&&(et.scene=c._splomScenes[X.uid]),rt=nt.length,\\\"array\\\"===$){var n=e[Y];\\\"pointNumber\\\"in n?(et.index=n.pointNumber,$=\\\"closest\\\"):($=\\\"\\\",\\\"xval\\\"in n&&(Q=n.xval,$=\\\"x\\\"),\\\"yval\\\"in n&&(tt=n.yval,$=$?\\\"closest\\\":\\\"y\\\"))}else void 0!==t&&void 0!==r?(Q=t,tt=r):(Q=q[K],tt=G[K]);if(0!==N)if(X._module&&X._module.hoverPoints){var a=X._module.hoverPoints(et,Q,tt,$,{finiteRange:!0,hoverLayer:c._hoverlayer});if(a)for(var s,u=0;u<a.length;u++)s=a[u],i(s.x0)&&i(s.y0)&&nt.push(R(s,I))}else o.log(\\\"Unrecognized trace type in hover:\\\",X);if(\\\"closest\\\"===I&&nt.length>rt&&(nt.splice(0,rt),ft=nt[0].distance),m&&0!==H&&0===nt.length){et.distance=H,et.index=!1;var f=X._module.hoverPoints(et,Q,tt,\\\"closest\\\",{hoverLayer:c._hoverlayer});if(f&&(f=f.filter((function(t){return t.spikeDistance<=H}))),f&&f.length){var h,d=f.filter((function(t){return t.xa.showspikes&&\\\"hovered data\\\"!==t.xa.spikesnap}));if(d.length){var v=d[0];i(v.x0)&&i(v.y0)&&(h=dt(v),(!at.vLinePoint||at.vLinePoint.spikeDistance>h.spikeDistance)&&(at.vLinePoint=h))}var g=f.filter((function(t){return t.ya.showspikes&&\\\"hovered data\\\"!==t.ya.spikesnap}));if(g.length){var x=g[0];i(x.x0)&&i(x.y0)&&(h=dt(x),(!at.hLinePoint||at.hLinePoint.spikeDistance>h.spikeDistance)&&(at.hLinePoint=h))}}}}}function pt(t,e,r){for(var n,i=null,a=1/0,o=0;o<t.length;o++)n=t[o].spikeDistance,r&&0===o&&(n=-1/0),n<=a&&n<=e&&(i=t[o],a=n);return i}function dt(t){return t?{xa:t.xa,ya:t.ya,x:void 0!==t.xSpike?t.xSpike:(t.x0+t.x1)/2,y:void 0!==t.ySpike?t.ySpike:(t.y0+t.y1)/2,distance:t.distance,spikeDistance:t.spikeDistance,curveNumber:t.trace.index,color:t.color,pointNumber:t.index}:null}ht();var vt={fullLayout:c,container:c._hoverlayer,event:e},gt=t._spikepoints,yt={vLinePoint:at.vLinePoint,hLinePoint:at.hLinePoint};t._spikepoints=yt;var mt=function(){nt.sort((function(t,e){return t.distance-e.distance})),nt=function(t,e){for(var r=e.charAt(0),n=[],i=[],a=[],o=0;o<t.length;o++){var s=t[o];g.traceIs(s.trace,\\\"bar-like\\\")||g.traceIs(s.trace,\\\"box-violin\\\")?a.push(s):s.trace[r+\\\"period\\\"]?i.push(s):n.push(s)}return n.concat(i).concat(a)}(nt,I)};mt();var xt=I.charAt(0),bt=(\\\"x\\\"===xt||\\\"y\\\"===xt)&&nt[0]&&L[nt[0].trace.type];if(m&&0!==H&&0!==nt.length){var _t=pt(nt.filter((function(t){return t.ya.showspikes})),H,bt);at.hLinePoint=dt(_t);var wt=pt(nt.filter((function(t){return t.xa.showspikes})),H,bt);at.vLinePoint=dt(wt)}if(0===nt.length){var Tt=d.unhoverRaw(t,e);return!m||null===at.hLinePoint&&null===at.vLinePoint||B(gt)&&F(t,at,vt),Tt}if(m&&B(gt)&&F(t,at,vt),y.isXYhover($)&&0!==nt[0].length&&\\\"splom\\\"!==nt[0].trace.type){var kt=nt[0],At=(nt=E[kt.trace.type]?nt.filter((function(t){return t.trace.index===kt.trace.index})):[kt]).length;ht(j(\\\"x\\\",kt,c),j(\\\"y\\\",kt,c));var Mt,St=[],Et={},Lt=0,Ct=function(t){var e=E[t.trace.type]?C(t):t.trace.index;if(Et[e]){var r=Et[e]-1,n=St[r];r>0&&Math.abs(t.distance)<Math.abs(n.distance)&&(St[r]=t)}else Lt++,Et[e]=Lt,St.push(t)};for(Mt=0;Mt<At;Mt++)Ct(nt[Mt]);for(Mt=nt.length-1;Mt>At-1;Mt--)Ct(nt[Mt]);nt=St,mt()}var Pt=t._hoverdata,Ot=[],It=U(t),Dt=V(t);for(Z=0;Z<nt.length;Z++){var zt=nt[Z],Rt=y.makeEventData(zt,zt.trace,zt.cd);if(!1!==zt.hovertemplate){var Ft=!1;zt.cd[zt.index]&&zt.cd[zt.index].ht&&(Ft=zt.cd[zt.index].ht),zt.hovertemplate=Ft||zt.trace.hovertemplate||!1}if(zt.xa&&zt.ya){var Bt=zt.x0+zt.xa._offset,Nt=zt.x1+zt.xa._offset,jt=zt.y0+zt.ya._offset,Ut=zt.y1+zt.ya._offset,Vt=Math.min(Bt,Nt),Ht=Math.max(Bt,Nt),qt=Math.min(jt,Ut),Gt=Math.max(jt,Ut);Rt.bbox={x0:Vt+Dt,x1:Ht+Dt,y0:qt+It,y1:Gt+It}}zt.eventData=[Rt],Ot.push(Rt)}t._hoverdata=Ot;var Zt=\\\"y\\\"===I&&(it.length>1||nt.length>1)||\\\"closest\\\"===I&&ot&&nt.length>1,Yt=p.combine(c.plot_bgcolor||p.background,c.paper_bgcolor),Wt=O(nt,{gd:t,hovermode:I,rotateLabels:Zt,bgColor:Yt,container:c._hoverlayer,outerContainer:c._paper.node(),commonLabelOpts:c.hoverlabel,hoverdistance:c.hoverdistance}),Xt=Wt.hoverLabels;if(y.isUnifiedHover(I)||(function(t,e,r,n){var i,a,o,s,l,u,c,f=e?\\\"xa\\\":\\\"ya\\\",h=e?\\\"ya\\\":\\\"xa\\\",p=0,d=1,v=t.size(),g=new Array(v),y=0,m=n.minX,x=n.maxX,b=n.minY,_=n.maxY,w=function(t){return t*r._invScaleX},k=function(t){return t*r._invScaleY};function A(t){var e=t[0],r=t[t.length-1];if(a=e.pmin-e.pos-e.dp+e.size,o=r.pos+r.dp+r.size-e.pmax,a>.01){for(l=t.length-1;l>=0;l--)t[l].dp+=a;i=!1}if(!(o<.01)){if(a<-.01){for(l=t.length-1;l>=0;l--)t[l].dp-=o;i=!1}if(i){var n=0;for(s=0;s<t.length;s++)(u=t[s]).pos+u.dp+u.size>e.pmax&&n++;for(s=t.length-1;s>=0&&!(n<=0);s--)(u=t[s]).pos>e.pmax-1&&(u.del=!0,n--);for(s=0;s<t.length&&!(n<=0);s++)if((u=t[s]).pos<e.pmin+1)for(u.del=!0,n--,o=2*u.size,l=t.length-1;l>=0;l--)t[l].dp-=o;for(s=t.length-1;s>=0&&!(n<=0);s--)(u=t[s]).pos+u.dp+u.size>e.pmax&&(u.del=!0,n--)}}}for(t.each((function(t){var n=t[f],i=t[h],a=\\\"x\\\"===n._id.charAt(0),o=n.range;0===y&&o&&o[0]>o[1]!==a&&(d=-1);var s=0,l=a?r.width:r.height;if(\\\"x\\\"===r.hovermode||\\\"y\\\"===r.hovermode){var u,c,p=D(t,e),v=t.anchor,A=\\\"end\\\"===v?-1:1;if(\\\"middle\\\"===v)c=(u=t.crossPos+(a?k(p.y-t.by/2):w(t.bx/2+t.tx2width/2)))+(a?k(t.by):w(t.bx));else if(a)c=(u=t.crossPos+k(M+p.y)-k(t.by/2-M))+k(t.by);else{var S=w(A*M+p.x),E=S+w(A*t.bx);u=t.crossPos+Math.min(S,E),c=t.crossPos+Math.max(S,E)}a?void 0!==b&&void 0!==_&&Math.min(c,_)-Math.max(u,b)>1&&(\\\"left\\\"===i.side?(s=i._mainLinePosition,l=r.width):l=i._mainLinePosition):void 0!==m&&void 0!==x&&Math.min(c,x)-Math.max(u,m)>1&&(\\\"top\\\"===i.side?(s=i._mainLinePosition,l=r.height):l=i._mainLinePosition)}g[y++]=[{datum:t,traceIndex:t.trace.index,dp:0,pos:t.pos,posref:t.posref,size:t.by*(a?T:1)/2,pmin:s,pmax:l}]})),g.sort((function(t,e){return t[0].posref-e[0].posref||d*(e[0].traceIndex-t[0].traceIndex)}));!i&&p<=v;){for(p++,i=!0,s=0;s<g.length-1;){var S=g[s],E=g[s+1],L=S[S.length-1],C=E[0];if((a=L.pos+L.dp+L.size-C.pos-C.dp+C.size)>.01&&L.pmin===C.pmin&&L.pmax===C.pmax){for(l=E.length-1;l>=0;l--)E[l].dp+=a;for(S.push.apply(S,E),g.splice(s+1,1),c=0,l=S.length-1;l>=0;l--)c+=S[l].dp;for(o=c/S.length,l=S.length-1;l>=0;l--)S[l].dp-=o;i=!1}else s++}g.forEach(A)}for(s=g.length-1;s>=0;s--){var P=g[s];for(l=P.length-1;l>=0;l--){var O=P[l],I=O.datum;I.offset=O.dp,I.del=O.del}}}(Xt,Zt,c,Wt.commonLabelBoundingBox),z(Xt,Zt,c._invScaleX,c._invScaleY)),s&&s.tagName){var Jt=g.getComponentMethod(\\\"annotations\\\",\\\"hasClickToShow\\\")(t,Ot);f(n.select(s),Jt?\\\"pointer\\\":\\\"\\\")}s&&!a&&function(t,e,r){if(!r||r.length!==t._hoverdata.length)return!0;for(var n=r.length-1;n>=0;n--){var i=r[n],a=t._hoverdata[n];if(i.curveNumber!==a.curveNumber||String(i.pointNumber)!==String(a.pointNumber)||String(i.pointNumbers)!==String(a.pointNumbers))return!0}return!1}(t,0,Pt)&&(Pt&&t.emit(\\\"plotly_unhover\\\",{event:e,points:Pt}),t.emit(\\\"plotly_hover\\\",{event:e,points:t._hoverdata,xaxes:_,yaxes:w,xvals:q,yvals:G}))}(t,e,r,a,s)}))},e.loneHover=function(t,e){var r=!0;Array.isArray(t)||(r=!1,t=[t]);var i=e.gd,a=U(i),o=V(i),s=O(t.map((function(t){var r=t._x0||t.x0||t.x||0,n=t._x1||t.x1||t.x||0,s=t._y0||t.y0||t.y||0,l=t._y1||t.y1||t.y||0,u=t.eventData;if(u){var c=Math.min(r,n),f=Math.max(r,n),h=Math.min(s,l),d=Math.max(s,l),v=t.trace;if(g.traceIs(v,\\\"gl3d\\\")){var y=i._fullLayout[v.scene]._scene.container,m=y.offsetLeft,x=y.offsetTop;c+=m,f+=m,h+=x,d+=x}u.bbox={x0:c+o,x1:f+o,y0:h+a,y1:d+a},e.inOut_bbox&&e.inOut_bbox.push(u.bbox)}else u=!1;return{color:t.color||p.defaultLine,x0:t.x0||t.x||0,x1:t.x1||t.x||0,y0:t.y0||t.y||0,y1:t.y1||t.y||0,xLabel:t.xLabel,yLabel:t.yLabel,zLabel:t.zLabel,text:t.text,name:t.name,idealAlign:t.idealAlign,borderColor:t.borderColor,fontFamily:t.fontFamily,fontSize:t.fontSize,fontColor:t.fontColor,nameLength:t.nameLength,textAlign:t.textAlign,trace:t.trace||{index:0,hoverinfo:\\\"\\\"},xa:{_offset:0},ya:{_offset:0},index:0,hovertemplate:t.hovertemplate||!1,hovertemplateLabels:t.hovertemplateLabels||!1,eventData:u}})),{gd:i,hovermode:\\\"closest\\\",rotateLabels:!1,bgColor:e.bgColor||p.background,container:n.select(e.container),outerContainer:e.outerContainer||e.container}).hoverLabels,l=0,u=0;return s.sort((function(t,e){return t.y0-e.y0})).each((function(t,r){var n=t.y0-t.by/2;t.offset=n-5<l?l-n+5:0,l=n+t.by+t.offset,r===e.anchorIndex&&(u=t.offset)})).each((function(t){t.offset-=u})),z(s,!1,i._fullLayout._invScaleX,i._fullLayout._invScaleY),r?s:s.node()};var P=/<extra>([\\\\s\\\\S]*)<\\\\/extra>/;function O(t,e){var r=e.gd,i=r._fullLayout,a=e.hovermode,u=e.rotateLabels,f=e.bgColor,d=e.container,v=e.outerContainer,w=e.commonLabelOpts||{};if(0===t.length)return[[]];var T=e.fontFamily||m.HOVERFONT,k=e.fontSize||m.HOVERFONTSIZE,A=t[0],E=A.xa,L=A.ya,P=a.charAt(0),O=P+\\\"Label\\\",D=A[O];if(void 0===D&&\\\"multicategory\\\"===E.type)for(var z=0;z<t.length&&void 0===(D=t[z][O]);z++);var R=H(r,v),F=R.top,B=R.width,N=R.height,j=void 0!==D&&A.distance<=e.hoverdistance&&(\\\"x\\\"===a||\\\"y\\\"===a);if(j){var U,V,q=!0;for(U=0;U<t.length;U++)if(q&&void 0===t[U].zLabel&&(q=!1),V=t[U].hoverinfo||t[U].trace.hoverinfo){var G=Array.isArray(V)?V:V.split(\\\"+\\\");if(-1===G.indexOf(\\\"all\\\")&&-1===G.indexOf(a)){j=!1;break}}q&&(j=!1)}var Z=d.selectAll(\\\"g.axistext\\\").data(j?[0]:[]);Z.enter().append(\\\"g\\\").classed(\\\"axistext\\\",!0),Z.exit().remove();var Y={minX:0,maxX:0,minY:0,maxY:0};if(Z.each((function(){var t=n.select(this),e=o.ensureSingle(t,\\\"path\\\",\\\"\\\",(function(t){t.style({\\\"stroke-width\\\":\\\"1px\\\"})})),l=o.ensureSingle(t,\\\"text\\\",\\\"\\\",(function(t){t.attr(\\\"data-notex\\\",1)})),u=w.bgcolor||p.defaultLine,f=w.bordercolor||p.contrast(u),d=p.contrast(u),v={family:w.font.family||T,size:w.font.size||k,color:w.font.color||d};e.style({fill:u,stroke:f}),l.text(D).call(h.font,v).call(c.positionText,0,0).call(c.convertToTspans,r),t.attr(\\\"transform\\\",\\\"\\\");var g,y,m=H(r,l.node());if(\\\"x\\\"===a){var x=\\\"top\\\"===E.side?\\\"-\\\":\\\"\\\";l.attr(\\\"text-anchor\\\",\\\"middle\\\").call(c.positionText,0,\\\"top\\\"===E.side?F-m.bottom-M-S:F-m.top+M+S),g=E._offset+(A.x0+A.x1)/2,y=L._offset+(\\\"top\\\"===E.side?0:L._length);var b=m.width/2+S;g<b?(g=b,e.attr(\\\"d\\\",\\\"M-\\\"+(b-M)+\\\",0L-\\\"+(b-2*M)+\\\",\\\"+x+M+\\\"H\\\"+b+\\\"v\\\"+x+(2*S+m.height)+\\\"H-\\\"+b+\\\"V\\\"+x+M+\\\"Z\\\")):g>i.width-b?(g=i.width-b,e.attr(\\\"d\\\",\\\"M\\\"+(b-M)+\\\",0L\\\"+b+\\\",\\\"+x+M+\\\"v\\\"+x+(2*S+m.height)+\\\"H-\\\"+b+\\\"V\\\"+x+M+\\\"H\\\"+(b-2*M)+\\\"Z\\\")):e.attr(\\\"d\\\",\\\"M0,0L\\\"+M+\\\",\\\"+x+M+\\\"H\\\"+b+\\\"v\\\"+x+(2*S+m.height)+\\\"H-\\\"+b+\\\"V\\\"+x+M+\\\"H-\\\"+M+\\\"Z\\\"),Y.minX=g-b,Y.maxX=g+b,\\\"top\\\"===E.side?(Y.minY=y-(2*S+m.height),Y.maxY=y-S):(Y.minY=y+S,Y.maxY=y+(2*S+m.height))}else{var _,C,P;\\\"right\\\"===L.side?(_=\\\"start\\\",C=1,P=\\\"\\\",g=E._offset+E._length):(_=\\\"end\\\",C=-1,P=\\\"-\\\",g=E._offset),y=L._offset+(A.y0+A.y1)/2,l.attr(\\\"text-anchor\\\",_),e.attr(\\\"d\\\",\\\"M0,0L\\\"+P+M+\\\",\\\"+M+\\\"V\\\"+(S+m.height/2)+\\\"h\\\"+P+(2*S+m.width)+\\\"V-\\\"+(S+m.height/2)+\\\"H\\\"+P+M+\\\"V-\\\"+M+\\\"Z\\\"),Y.minY=y-(S+m.height/2),Y.maxY=y+(S+m.height/2),\\\"right\\\"===L.side?(Y.minX=g+M,Y.maxX=g+M+(2*S+m.width)):(Y.minX=g-M-(2*S+m.width),Y.maxX=g-M);var O,I=m.height/2,z=F-m.top-I,R=\\\"clip\\\"+i._uid+\\\"commonlabel\\\"+L._id;if(g<m.width+2*S+M){O=\\\"M-\\\"+(M+S)+\\\"-\\\"+I+\\\"h-\\\"+(m.width-S)+\\\"V\\\"+I+\\\"h\\\"+(m.width-S)+\\\"Z\\\";var B=m.width-g+S;c.positionText(l,B,z),\\\"end\\\"===_&&l.selectAll(\\\"tspan\\\").each((function(){var t=n.select(this),e=h.tester.append(\\\"text\\\").text(t.text()).call(h.font,v),i=H(r,e.node());Math.round(i.width)<Math.round(m.width)&&t.attr(\\\"x\\\",B-i.width),e.remove()}))}else c.positionText(l,C*(S+M),z),O=null;var N=i._topclips.selectAll(\\\"#\\\"+R).data(O?[0]:[]);N.enter().append(\\\"clipPath\\\").attr(\\\"id\\\",R).append(\\\"path\\\"),N.exit().remove(),N.select(\\\"path\\\").attr(\\\"d\\\",O),h.setClipUrl(l,O?R:null,r)}t.attr(\\\"transform\\\",s(g,y))})),y.isUnifiedHover(a)){d.selectAll(\\\"g.hovertext\\\").remove();var W=t.filter((function(t){return\\\"none\\\"!==t.hoverinfo}));if(0===W.length)return[];var X=i.hoverlabel,J=X.font,K={showlegend:!0,legend:{title:{text:D,font:J},font:J,bgcolor:X.bgcolor,bordercolor:X.bordercolor,borderwidth:1,tracegroupgap:7,traceorder:i.legend?i.legend.traceorder:void 0,orientation:\\\"v\\\"}},$={font:J};x(K,$,r._fullData);var Q=$.legend;Q.entries=[];for(var tt=0;tt<W.length;tt++){var et=W[tt];if(\\\"none\\\"!==et.hoverinfo){var rt=I(et,!0,a,i,D),nt=rt[0],it=rt[1];et.name=it,et.text=\\\"\\\"!==it?it+\\\" : \\\"+nt:nt;var at=et.cd[et.index];at&&(at.mc&&(et.mc=at.mc),at.mcc&&(et.mc=at.mcc),at.mlc&&(et.mlc=at.mlc),at.mlcc&&(et.mlc=at.mlcc),at.mlw&&(et.mlw=at.mlw),at.mrc&&(et.mrc=at.mrc),at.dir&&(et.dir=at.dir)),et._distinct=!0,Q.entries.push([et])}}Q.entries.sort((function(t,e){return t[0].trace.index-e[0].trace.index})),Q.layer=d,Q._inHover=!0,Q._groupTitleFont=X.grouptitlefont,b(r,Q);var ot,st,lt,ut,ct=d.select(\\\"g.legend\\\"),ft=H(r,ct.node()),ht=ft.width+2*S,pt=ft.height+2*S,dt=W[0],vt=(dt.x0+dt.x1)/2,gt=(dt.y0+dt.y1)/2,yt=!(g.traceIs(dt.trace,\\\"bar-like\\\")||g.traceIs(dt.trace,\\\"box-violin\\\"));\\\"y\\\"===P?yt?(st=gt-S,ot=gt+S):(st=Math.min.apply(null,W.map((function(t){return Math.min(t.y0,t.y1)}))),ot=Math.max.apply(null,W.map((function(t){return Math.max(t.y0,t.y1)})))):st=ot=o.mean(W.map((function(t){return(t.y0+t.y1)/2})))-pt/2,\\\"x\\\"===P?yt?(lt=vt+S,ut=vt-S):(lt=Math.max.apply(null,W.map((function(t){return Math.max(t.x0,t.x1)}))),ut=Math.min.apply(null,W.map((function(t){return Math.min(t.x0,t.x1)})))):lt=ut=o.mean(W.map((function(t){return(t.x0+t.x1)/2})))-ht/2;var mt,xt,bt=E._offset,_t=L._offset;return ut+=bt-ht,st+=_t-pt,mt=(lt+=bt)+ht<B&&lt>=0?lt:ut+ht<B&&ut>=0?ut:bt+ht<B?bt:lt-vt<vt-ut+ht?B-ht:0,mt+=S,xt=(ot+=_t)+pt<N&&ot>=0?ot:st+pt<N&&st>=0?st:_t+pt<N?_t:ot-gt<gt-st+pt?N-pt:0,xt+=S,ct.attr(\\\"transform\\\",s(mt-1,xt-1)),ct}var wt=d.selectAll(\\\"g.hovertext\\\").data(t,(function(t){return C(t)}));return wt.enter().append(\\\"g\\\").classed(\\\"hovertext\\\",!0).each((function(){var t=n.select(this);t.append(\\\"rect\\\").call(p.fill,p.addOpacity(f,.8)),t.append(\\\"text\\\").classed(\\\"name\\\",!0),t.append(\\\"path\\\").style(\\\"stroke-width\\\",\\\"1px\\\"),t.append(\\\"text\\\").classed(\\\"nums\\\",!0).call(h.font,T,k)})),wt.exit().remove(),wt.each((function(t){var e=n.select(this).attr(\\\"transform\\\",\\\"\\\"),o=t.color;Array.isArray(o)&&(o=o[t.eventData[0].pointNumber]);var d=t.bgcolor||o,v=p.combine(p.opacity(d)?d:p.defaultLine,f),g=p.combine(p.opacity(o)?o:p.defaultLine,f),y=t.borderColor||p.contrast(v),m=I(t,j,a,i,D,e),x=m[0],b=m[1],w=e.select(\\\"text.nums\\\").call(h.font,t.fontFamily||T,t.fontSize||k,t.fontColor||y).text(x).attr(\\\"data-notex\\\",1).call(c.positionText,0,0).call(c.convertToTspans,r),A=e.select(\\\"text.name\\\"),E=0,L=0;if(b&&b!==x){A.call(h.font,t.fontFamily||T,t.fontSize||k,g).text(b).attr(\\\"data-notex\\\",1).call(c.positionText,0,0).call(c.convertToTspans,r);var C=H(r,A.node());E=C.width+2*S,L=C.height+2*S}else A.remove(),e.select(\\\"rect\\\").remove();e.select(\\\"path\\\").style({fill:v,stroke:y});var P=t.xa._offset+(t.x0+t.x1)/2,O=t.ya._offset+(t.y0+t.y1)/2,z=Math.abs(t.x1-t.x0),R=Math.abs(t.y1-t.y0),U=H(r,w.node()),V=U.width/i._invScaleX,q=U.height/i._invScaleY;t.ty0=(F-U.top)/i._invScaleY,t.bx=V+2*S,t.by=Math.max(q+2*S,L),t.anchor=\\\"start\\\",t.txwidth=V,t.tx2width=E,t.offset=0;var G,Z,Y=(V+M+S+E)*i._invScaleX;if(u)t.pos=P,G=O+R/2+Y<=N,Z=O-R/2-Y>=0,\\\"top\\\"!==t.idealAlign&&G||!Z?G?(O+=R/2,t.anchor=\\\"start\\\"):t.anchor=\\\"middle\\\":(O-=R/2,t.anchor=\\\"end\\\"),t.crossPos=O;else{if(t.pos=O,G=P+z/2+Y<=B,Z=P-z/2-Y>=0,\\\"left\\\"!==t.idealAlign&&G||!Z)if(G)P+=z/2,t.anchor=\\\"start\\\";else{t.anchor=\\\"middle\\\";var W=Y/2,X=P+W-B,J=P-W;X>0&&(P-=X),J<0&&(P+=-J)}else P-=z/2,t.anchor=\\\"end\\\";t.crossPos=P}w.attr(\\\"text-anchor\\\",t.anchor),E&&A.attr(\\\"text-anchor\\\",t.anchor),e.attr(\\\"transform\\\",s(P,O)+(u?l(_):\\\"\\\"))})),{hoverLabels:wt,commonLabelBoundingBox:Y}}function I(t,e,r,n,i,a){var s=\\\"\\\",l=\\\"\\\";void 0!==t.nameOverride&&(t.name=t.nameOverride),t.name&&(t.trace._meta&&(t.name=o.templateString(t.name,t.trace._meta)),s=N(t.name,t.nameLength));var u=r.charAt(0),c=\\\"x\\\"===u?\\\"y\\\":\\\"x\\\";void 0!==t.zLabel?(void 0!==t.xLabel&&(l+=\\\"x: \\\"+t.xLabel+\\\"<br>\\\"),void 0!==t.yLabel&&(l+=\\\"y: \\\"+t.yLabel+\\\"<br>\\\"),\\\"choropleth\\\"!==t.trace.type&&\\\"choroplethmapbox\\\"!==t.trace.type&&(l+=(l?\\\"z: \\\":\\\"\\\")+t.zLabel)):e&&t[u+\\\"Label\\\"]===i?l=t[c+\\\"Label\\\"]||\\\"\\\":void 0===t.xLabel?void 0!==t.yLabel&&\\\"scattercarpet\\\"!==t.trace.type&&(l=t.yLabel):l=void 0===t.yLabel?t.xLabel:\\\"(\\\"+t.xLabel+\\\", \\\"+t.yLabel+\\\")\\\",!t.text&&0!==t.text||Array.isArray(t.text)||(l+=(l?\\\"<br>\\\":\\\"\\\")+t.text),void 0!==t.extraText&&(l+=(l?\\\"<br>\\\":\\\"\\\")+t.extraText),a&&\\\"\\\"===l&&!t.hovertemplate&&(\\\"\\\"===s&&a.remove(),l=s);var f=t.hovertemplate||!1;if(f){var h=t.hovertemplateLabels||t;t[u+\\\"Label\\\"]!==i&&(h[u+\\\"other\\\"]=h[u+\\\"Val\\\"],h[u+\\\"otherLabel\\\"]=h[u+\\\"Label\\\"]),l=(l=o.hovertemplateString(f,h,n._d3locale,t.eventData[0]||{},t.trace._meta)).replace(P,(function(e,r){return s=N(r,t.nameLength),\\\"\\\"}))}return[l,s]}function D(t,e){var r=0,n=t.offset;return e&&(n*=-A,r=t.offset*k),{x:r,y:n}}function z(t,e,r,i){var a=function(t){return t*r},o=function(t){return t*i};t.each((function(t){var r=n.select(this);if(t.del)return r.remove();var i,s,l,u,f=r.select(\\\"text.nums\\\"),p=t.anchor,d=\\\"end\\\"===p?-1:1,v=(u=(l=(s={start:1,end:-1,middle:0}[(i=t).anchor])*(M+S))+s*(i.txwidth+S),\\\"middle\\\"===i.anchor&&(l-=i.tx2width/2,u+=i.txwidth/2+S),{alignShift:s,textShiftX:l,text2ShiftX:u}),g=D(t,e),y=g.x,m=g.y,x=\\\"middle\\\"===p;r.select(\\\"path\\\").attr(\\\"d\\\",x?\\\"M-\\\"+a(t.bx/2+t.tx2width/2)+\\\",\\\"+o(m-t.by/2)+\\\"h\\\"+a(t.bx)+\\\"v\\\"+o(t.by)+\\\"h-\\\"+a(t.bx)+\\\"Z\\\":\\\"M0,0L\\\"+a(d*M+y)+\\\",\\\"+o(M+m)+\\\"v\\\"+o(t.by/2-M)+\\\"h\\\"+a(d*t.bx)+\\\"v-\\\"+o(t.by)+\\\"H\\\"+a(d*M+y)+\\\"V\\\"+o(m-M)+\\\"Z\\\");var b=y+v.textShiftX,_=m+t.ty0-t.by/2+S,w=t.textAlign||\\\"auto\\\";\\\"auto\\\"!==w&&(\\\"left\\\"===w&&\\\"start\\\"!==p?(f.attr(\\\"text-anchor\\\",\\\"start\\\"),b=x?-t.bx/2-t.tx2width/2+S:-t.bx-S):\\\"right\\\"===w&&\\\"end\\\"!==p&&(f.attr(\\\"text-anchor\\\",\\\"end\\\"),b=x?t.bx/2-t.tx2width/2-S:t.bx+S)),f.call(c.positionText,a(b),o(_)),t.tx2width&&(r.select(\\\"text.name\\\").call(c.positionText,a(v.text2ShiftX+v.alignShift*S+y),o(m+t.ty0-t.by/2+S)),r.select(\\\"rect\\\").call(h.setRect,a(v.text2ShiftX+(v.alignShift-1)*t.tx2width/2+y),o(m-t.by/2-1),a(t.tx2width),o(t.by+2)))}))}function R(t,e){var r=t.index,n=t.trace||{},a=t.cd[0],s=t.cd[r]||{};function l(t){return t||i(t)&&0===t}var u=Array.isArray(r)?function(t,e){var i=o.castOption(a,r,t);return l(i)?i:o.extractOption({},n,\\\"\\\",e)}:function(t,e){return o.extractOption(s,n,t,e)};function c(e,r,n){var i=u(r,n);l(i)&&(t[e]=i)}if(c(\\\"hoverinfo\\\",\\\"hi\\\",\\\"hoverinfo\\\"),c(\\\"bgcolor\\\",\\\"hbg\\\",\\\"hoverlabel.bgcolor\\\"),c(\\\"borderColor\\\",\\\"hbc\\\",\\\"hoverlabel.bordercolor\\\"),c(\\\"fontFamily\\\",\\\"htf\\\",\\\"hoverlabel.font.family\\\"),c(\\\"fontSize\\\",\\\"hts\\\",\\\"hoverlabel.font.size\\\"),c(\\\"fontColor\\\",\\\"htc\\\",\\\"hoverlabel.font.color\\\"),c(\\\"nameLength\\\",\\\"hnl\\\",\\\"hoverlabel.namelength\\\"),c(\\\"textAlign\\\",\\\"hta\\\",\\\"hoverlabel.align\\\"),t.posref=\\\"y\\\"===e||\\\"closest\\\"===e&&\\\"h\\\"===n.orientation?t.xa._offset+(t.x0+t.x1)/2:t.ya._offset+(t.y0+t.y1)/2,t.x0=o.constrain(t.x0,0,t.xa._length),t.x1=o.constrain(t.x1,0,t.xa._length),t.y0=o.constrain(t.y0,0,t.ya._length),t.y1=o.constrain(t.y1,0,t.ya._length),void 0!==t.xLabelVal&&(t.xLabel=\\\"xLabel\\\"in t?t.xLabel:v.hoverLabelText(t.xa,t.xLabelVal,n.xhoverformat),t.xVal=t.xa.c2d(t.xLabelVal)),void 0!==t.yLabelVal&&(t.yLabel=\\\"yLabel\\\"in t?t.yLabel:v.hoverLabelText(t.ya,t.yLabelVal,n.yhoverformat),t.yVal=t.ya.c2d(t.yLabelVal)),void 0!==t.zLabelVal&&void 0===t.zLabel&&(t.zLabel=String(t.zLabelVal)),!(isNaN(t.xerr)||\\\"log\\\"===t.xa.type&&t.xerr<=0)){var f=v.tickText(t.xa,t.xa.c2l(t.xerr),\\\"hover\\\").text;void 0!==t.xerrneg?t.xLabel+=\\\" +\\\"+f+\\\" / -\\\"+v.tickText(t.xa,t.xa.c2l(t.xerrneg),\\\"hover\\\").text:t.xLabel+=\\\" ± \\\"+f,\\\"x\\\"===e&&(t.distance+=1)}if(!(isNaN(t.yerr)||\\\"log\\\"===t.ya.type&&t.yerr<=0)){var h=v.tickText(t.ya,t.ya.c2l(t.yerr),\\\"hover\\\").text;void 0!==t.yerrneg?t.yLabel+=\\\" +\\\"+h+\\\" / -\\\"+v.tickText(t.ya,t.ya.c2l(t.yerrneg),\\\"hover\\\").text:t.yLabel+=\\\" ± \\\"+h,\\\"y\\\"===e&&(t.distance+=1)}var p=t.hoverinfo||t.trace.hoverinfo;return p&&\\\"all\\\"!==p&&(-1===(p=Array.isArray(p)?p:p.split(\\\"+\\\")).indexOf(\\\"x\\\")&&(t.xLabel=void 0),-1===p.indexOf(\\\"y\\\")&&(t.yLabel=void 0),-1===p.indexOf(\\\"z\\\")&&(t.zLabel=void 0),-1===p.indexOf(\\\"text\\\")&&(t.text=void 0),-1===p.indexOf(\\\"name\\\")&&(t.name=void 0)),t}function F(t,e,r){var n,i,o=r.container,s=r.fullLayout,l=s._size,u=r.event,c=!!e.hLinePoint,f=!!e.vLinePoint;if(o.selectAll(\\\".spikeline\\\").remove(),f||c){var d=p.combine(s.plot_bgcolor,s.paper_bgcolor);if(c){var g,y,m=e.hLinePoint;n=m&&m.xa,\\\"cursor\\\"===(i=m&&m.ya).spikesnap?(g=u.pointerX,y=u.pointerY):(g=n._offset+m.x,y=i._offset+m.y);var x,b,_=a.readability(m.color,d)<1.5?p.contrast(d):m.color,w=i.spikemode,T=i.spikethickness,k=i.spikecolor||_,A=v.getPxPosition(t,i);if(-1!==w.indexOf(\\\"toaxis\\\")||-1!==w.indexOf(\\\"across\\\")){if(-1!==w.indexOf(\\\"toaxis\\\")&&(x=A,b=g),-1!==w.indexOf(\\\"across\\\")){var M=i._counterDomainMin,S=i._counterDomainMax;\\\"free\\\"===i.anchor&&(M=Math.min(M,i.position),S=Math.max(S,i.position)),x=l.l+M*l.w,b=l.l+S*l.w}o.insert(\\\"line\\\",\\\":first-child\\\").attr({x1:x,x2:b,y1:y,y2:y,\\\"stroke-width\\\":T,stroke:k,\\\"stroke-dasharray\\\":h.dashStyle(i.spikedash,T)}).classed(\\\"spikeline\\\",!0).classed(\\\"crisp\\\",!0),o.insert(\\\"line\\\",\\\":first-child\\\").attr({x1:x,x2:b,y1:y,y2:y,\\\"stroke-width\\\":T+2,stroke:d}).classed(\\\"spikeline\\\",!0).classed(\\\"crisp\\\",!0)}-1!==w.indexOf(\\\"marker\\\")&&o.insert(\\\"circle\\\",\\\":first-child\\\").attr({cx:A+(\\\"right\\\"!==i.side?T:-T),cy:y,r:T,fill:k}).classed(\\\"spikeline\\\",!0)}if(f){var E,L,C=e.vLinePoint;n=C&&C.xa,i=C&&C.ya,\\\"cursor\\\"===n.spikesnap?(E=u.pointerX,L=u.pointerY):(E=n._offset+C.x,L=i._offset+C.y);var P,O,I=a.readability(C.color,d)<1.5?p.contrast(d):C.color,D=n.spikemode,z=n.spikethickness,R=n.spikecolor||I,F=v.getPxPosition(t,n);if(-1!==D.indexOf(\\\"toaxis\\\")||-1!==D.indexOf(\\\"across\\\")){if(-1!==D.indexOf(\\\"toaxis\\\")&&(P=F,O=L),-1!==D.indexOf(\\\"across\\\")){var B=n._counterDomainMin,N=n._counterDomainMax;\\\"free\\\"===n.anchor&&(B=Math.min(B,n.position),N=Math.max(N,n.position)),P=l.t+(1-N)*l.h,O=l.t+(1-B)*l.h}o.insert(\\\"line\\\",\\\":first-child\\\").attr({x1:E,x2:E,y1:P,y2:O,\\\"stroke-width\\\":z,stroke:R,\\\"stroke-dasharray\\\":h.dashStyle(n.spikedash,z)}).classed(\\\"spikeline\\\",!0).classed(\\\"crisp\\\",!0),o.insert(\\\"line\\\",\\\":first-child\\\").attr({x1:E,x2:E,y1:P,y2:O,\\\"stroke-width\\\":z+2,stroke:d}).classed(\\\"spikeline\\\",!0).classed(\\\"crisp\\\",!0)}-1!==D.indexOf(\\\"marker\\\")&&o.insert(\\\"circle\\\",\\\":first-child\\\").attr({cx:E,cy:F-(\\\"top\\\"!==n.side?z:-z),r:z,fill:R}).classed(\\\"spikeline\\\",!0)}}}function B(t,e){return!e||e.vLinePoint!==t._spikepoints.vLinePoint||e.hLinePoint!==t._spikepoints.hLinePoint}function N(t,e){return c.plainText(t||\\\"\\\",{len:e,allowedTags:[\\\"br\\\",\\\"sub\\\",\\\"sup\\\",\\\"b\\\",\\\"i\\\",\\\"em\\\"]})}function j(t,e,r){var n=e[t+\\\"a\\\"],i=e[t+\\\"Val\\\"],a=e.cd[0];if(\\\"category\\\"===n.type||\\\"multicategory\\\"===n.type)i=n._categoriesMap[i];else if(\\\"date\\\"===n.type){var o=e.trace[t+\\\"periodalignment\\\"];if(o){var s=e.cd[e.index],l=s[t+\\\"Start\\\"];void 0===l&&(l=s[t]);var u=s[t+\\\"End\\\"];void 0===u&&(u=s[t]);var c=u-l;\\\"end\\\"===o?i+=c:\\\"middle\\\"===o&&(i+=c/2)}i=n.d2c(i)}return a&&a.t&&a.t.posLetter===n._id&&(\\\"group\\\"!==r.boxmode&&\\\"group\\\"!==r.violinmode||(i+=a.t.dPos)),i}function U(t){return t.offsetTop+t.clientTop}function V(t){return t.offsetLeft+t.clientLeft}function H(t,e){var r=t._fullLayout,n=e.getBoundingClientRect(),i=n.left,a=n.top,s=i+n.width,l=a+n.height,u=o.apply3DTransform(r._invTransform)(i,a),c=o.apply3DTransform(r._invTransform)(s,l),f=u[0],h=u[1],p=c[0],d=c[1];return{x:f,y:h,width:p-f,height:d-h,top:Math.min(h,d),left:Math.min(f,p),right:Math.max(f,p),bottom:Math.max(h,d)}}},38048:function(t,e,r){\\\"use strict\\\";var n=r(71828),i=r(7901),a=r(23469).isUnifiedHover;t.exports=function(t,e,r,o){o=o||{};var s=e.legend;function l(t){o.font[t]||(o.font[t]=s?e.legend.font[t]:e.font[t])}e&&a(e.hovermode)&&(o.font||(o.font={}),l(\\\"size\\\"),l(\\\"family\\\"),l(\\\"color\\\"),s?(o.bgcolor||(o.bgcolor=i.combine(e.legend.bgcolor,e.paper_bgcolor)),o.bordercolor||(o.bordercolor=e.legend.bordercolor)):o.bgcolor||(o.bgcolor=e.paper_bgcolor)),r(\\\"hoverlabel.bgcolor\\\",o.bgcolor),r(\\\"hoverlabel.bordercolor\\\",o.bordercolor),r(\\\"hoverlabel.namelength\\\",o.namelength),n.coerceFont(r,\\\"hoverlabel.font\\\",o.font),r(\\\"hoverlabel.align\\\",o.align)}},98212:function(t,e,r){\\\"use strict\\\";var n=r(71828),i=r(528);t.exports=function(t,e){function r(r,a){return void 0!==e[r]?e[r]:n.coerce(t,e,i,r,a)}return r(\\\"clickmode\\\"),r(\\\"hovermode\\\")}},30211:function(t,e,r){\\\"use strict\\\";var n=r(39898),i=r(71828),a=r(28569),o=r(23469),s=r(528),l=r(88335);t.exports={moduleType:\\\"component\\\",name:\\\"fx\\\",constants:r(26675),schema:{layout:s},attributes:r(77914),layoutAttributes:s,supplyLayoutGlobalDefaults:r(22774),supplyDefaults:r(54268),supplyLayoutDefaults:r(34938),calc:r(30732),getDistanceFunction:o.getDistanceFunction,getClosest:o.getClosest,inbox:o.inbox,quadrature:o.quadrature,appendArrayPointValue:o.appendArrayPointValue,castHoverOption:function(t,e,r){return i.castOption(t,e,\\\"hoverlabel.\\\"+r)},castHoverinfo:function(t,e,r){return i.castOption(t,r,\\\"hoverinfo\\\",(function(r){return i.coerceHoverinfo({hoverinfo:r},{_module:t._module},e)}))},hover:l.hover,unhover:a.unhover,loneHover:l.loneHover,loneUnhover:function(t){var e=i.isD3Selection(t)?t:n.select(t);e.selectAll(\\\"g.hovertext\\\").remove(),e.selectAll(\\\".spikeline\\\").remove()},click:r(75914)}},528:function(t,e,r){\\\"use strict\\\";var n=r(26675),i=r(41940),a=i({editType:\\\"none\\\"});a.family.dflt=n.HOVERFONT,a.size.dflt=n.HOVERFONTSIZE,t.exports={clickmode:{valType:\\\"flaglist\\\",flags:[\\\"event\\\",\\\"select\\\"],dflt:\\\"event\\\",editType:\\\"plot\\\",extras:[\\\"none\\\"]},dragmode:{valType:\\\"enumerated\\\",values:[\\\"zoom\\\",\\\"pan\\\",\\\"select\\\",\\\"lasso\\\",\\\"drawclosedpath\\\",\\\"drawopenpath\\\",\\\"drawline\\\",\\\"drawrect\\\",\\\"drawcircle\\\",\\\"orbit\\\",\\\"turntable\\\",!1],dflt:\\\"zoom\\\",editType:\\\"modebar\\\"},hovermode:{valType:\\\"enumerated\\\",values:[\\\"x\\\",\\\"y\\\",\\\"closest\\\",!1,\\\"x unified\\\",\\\"y unified\\\"],dflt:\\\"closest\\\",editType:\\\"modebar\\\"},hoverdistance:{valType:\\\"integer\\\",min:-1,dflt:20,editType:\\\"none\\\"},spikedistance:{valType:\\\"integer\\\",min:-1,dflt:-1,editType:\\\"none\\\"},hoverlabel:{bgcolor:{valType:\\\"color\\\",editType:\\\"none\\\"},bordercolor:{valType:\\\"color\\\",editType:\\\"none\\\"},font:a,grouptitlefont:i({editType:\\\"none\\\"}),align:{valType:\\\"enumerated\\\",values:[\\\"left\\\",\\\"right\\\",\\\"auto\\\"],dflt:\\\"auto\\\",editType:\\\"none\\\"},namelength:{valType:\\\"integer\\\",min:-1,dflt:15,editType:\\\"none\\\"},editType:\\\"none\\\"},selectdirection:{valType:\\\"enumerated\\\",values:[\\\"h\\\",\\\"v\\\",\\\"d\\\",\\\"any\\\"],dflt:\\\"any\\\",editType:\\\"none\\\"}}},34938:function(t,e,r){\\\"use strict\\\";var n=r(71828),i=r(528),a=r(98212),o=r(38048);t.exports=function(t,e){function r(r,a){return n.coerce(t,e,i,r,a)}a(t,e)&&(r(\\\"hoverdistance\\\"),r(\\\"spikedistance\\\")),\\\"select\\\"===r(\\\"dragmode\\\")&&r(\\\"selectdirection\\\");var s=e._has(\\\"mapbox\\\"),l=e._has(\\\"geo\\\"),u=e._basePlotModules.length;\\\"zoom\\\"===e.dragmode&&((s||l)&&1===u||s&&l&&2===u)&&(e.dragmode=\\\"pan\\\"),o(t,e,r),n.coerceFont(r,\\\"hoverlabel.grouptitlefont\\\",e.hoverlabel.font)}},22774:function(t,e,r){\\\"use strict\\\";var n=r(71828),i=r(38048),a=r(528);t.exports=function(t,e){i(t,e,(function(r,i){return n.coerce(t,e,a,r,i)}))}},83312:function(t,e,r){\\\"use strict\\\";var n=r(71828),i=r(30587).counter,a=r(27670).Y,o=r(85555).idRegex,s=r(44467),l={rows:{valType:\\\"integer\\\",min:1,editType:\\\"plot\\\"},roworder:{valType:\\\"enumerated\\\",values:[\\\"top to bottom\\\",\\\"bottom to top\\\"],dflt:\\\"top to bottom\\\",editType:\\\"plot\\\"},columns:{valType:\\\"integer\\\",min:1,editType:\\\"plot\\\"},subplots:{valType:\\\"info_array\\\",freeLength:!0,dimensions:2,items:{valType:\\\"enumerated\\\",values:[i(\\\"xy\\\").toString(),\\\"\\\"],editType:\\\"plot\\\"},editType:\\\"plot\\\"},xaxes:{valType:\\\"info_array\\\",freeLength:!0,items:{valType:\\\"enumerated\\\",values:[o.x.toString(),\\\"\\\"],editType:\\\"plot\\\"},editType:\\\"plot\\\"},yaxes:{valType:\\\"info_array\\\",freeLength:!0,items:{valType:\\\"enumerated\\\",values:[o.y.toString(),\\\"\\\"],editType:\\\"plot\\\"},editType:\\\"plot\\\"},pattern:{valType:\\\"enumerated\\\",values:[\\\"independent\\\",\\\"coupled\\\"],dflt:\\\"coupled\\\",editType:\\\"plot\\\"},xgap:{valType:\\\"number\\\",min:0,max:1,editType:\\\"plot\\\"},ygap:{valType:\\\"number\\\",min:0,max:1,editType:\\\"plot\\\"},domain:a({name:\\\"grid\\\",editType:\\\"plot\\\",noGridCell:!0},{}),xside:{valType:\\\"enumerated\\\",values:[\\\"bottom\\\",\\\"bottom plot\\\",\\\"top plot\\\",\\\"top\\\"],dflt:\\\"bottom plot\\\",editType:\\\"plot\\\"},yside:{valType:\\\"enumerated\\\",values:[\\\"left\\\",\\\"left plot\\\",\\\"right plot\\\",\\\"right\\\"],dflt:\\\"left plot\\\",editType:\\\"plot\\\"},editType:\\\"plot\\\"};function u(t,e,r){var n=e[r+\\\"axes\\\"],i=Object.keys((t._splomAxes||{})[r]||{});return Array.isArray(n)?n:i.length?i:void 0}function c(t,e,r,n,i,a){var o=e(t+\\\"gap\\\",r),s=e(\\\"domain.\\\"+t);e(t+\\\"side\\\",n);for(var l=new Array(i),u=s[0],c=(s[1]-u)/(i-o),f=c*(1-o),h=0;h<i;h++){var p=u+c*h;l[a?i-1-h:h]=[p,p+f]}return l}function f(t,e,r,n,i){var a,o=new Array(r);function s(t,r){-1!==e.indexOf(r)&&void 0===n[r]?(o[t]=r,n[r]=t):o[t]=\\\"\\\"}if(Array.isArray(t))for(a=0;a<r;a++)s(a,t[a]);else for(s(0,i),a=1;a<r;a++)s(a,i+(a+1));return o}t.exports={moduleType:\\\"component\\\",name:\\\"grid\\\",schema:{layout:{grid:l}},layoutAttributes:l,sizeDefaults:function(t,e){var r=t.grid||{},i=u(e,r,\\\"x\\\"),a=u(e,r,\\\"y\\\");if(t.grid||i||a){var o,f,h=Array.isArray(r.subplots)&&Array.isArray(r.subplots[0]),p=Array.isArray(i),d=Array.isArray(a),v=p&&i!==r.xaxes&&d&&a!==r.yaxes;h?(o=r.subplots.length,f=r.subplots[0].length):(d&&(o=a.length),p&&(f=i.length));var g=s.newContainer(e,\\\"grid\\\"),y=k(\\\"rows\\\",o),m=k(\\\"columns\\\",f);if(y*m>1){h||p||d||\\\"independent\\\"===k(\\\"pattern\\\")&&(h=!0),g._hasSubplotGrid=h;var x,b,_=\\\"top to bottom\\\"===k(\\\"roworder\\\"),w=h?.2:.1,T=h?.3:.1;v&&e._splomGridDflt&&(x=e._splomGridDflt.xside,b=e._splomGridDflt.yside),g._domains={x:c(\\\"x\\\",k,w,x,m),y:c(\\\"y\\\",k,T,b,y,_)}}else delete e.grid}function k(t,e){return n.coerce(r,g,l,t,e)}},contentDefaults:function(t,e){var r=e.grid;if(r&&r._domains){var n,i,a,o,s,l,c,h=t.grid||{},p=e._subplots,d=r._hasSubplotGrid,v=r.rows,g=r.columns,y=\\\"independent\\\"===r.pattern,m=r._axisMap={};if(d){var x=h.subplots||[];l=r.subplots=new Array(v);var b=1;for(n=0;n<v;n++){var _=l[n]=new Array(g),w=x[n]||[];for(i=0;i<g;i++)if(y?(s=1===b?\\\"xy\\\":\\\"x\\\"+b+\\\"y\\\"+b,b++):s=w[i],_[i]=\\\"\\\",-1!==p.cartesian.indexOf(s)){if(c=s.indexOf(\\\"y\\\"),a=s.slice(0,c),o=s.slice(c),void 0!==m[a]&&m[a]!==i||void 0!==m[o]&&m[o]!==n)continue;_[i]=s,m[a]=i,m[o]=n}}}else{var T=u(e,h,\\\"x\\\"),k=u(e,h,\\\"y\\\");r.xaxes=f(T,p.xaxis,g,m,\\\"x\\\"),r.yaxes=f(k,p.yaxis,v,m,\\\"y\\\")}var A=r._anchors={},M=\\\"top to bottom\\\"===r.roworder;for(var S in m){var E,L,C,P=S.charAt(0),O=r[P+\\\"side\\\"];if(O.length<8)A[S]=\\\"free\\\";else if(\\\"x\\\"===P){if(\\\"t\\\"===O.charAt(0)===M?(E=0,L=1,C=v):(E=v-1,L=-1,C=-1),d){var I=m[S];for(n=E;n!==C;n+=L)if((s=l[n][I])&&(c=s.indexOf(\\\"y\\\"),s.slice(0,c)===S)){A[S]=s.slice(c);break}}else for(n=E;n!==C;n+=L)if(o=r.yaxes[n],-1!==p.cartesian.indexOf(S+o)){A[S]=o;break}}else if(\\\"l\\\"===O.charAt(0)?(E=0,L=1,C=g):(E=g-1,L=-1,C=-1),d){var D=m[S];for(n=E;n!==C;n+=L)if((s=l[D][n])&&(c=s.indexOf(\\\"y\\\"),s.slice(c)===S)){A[S]=s.slice(0,c);break}}else for(n=E;n!==C;n+=L)if(a=r.xaxes[n],-1!==p.cartesian.indexOf(a+S)){A[S]=a;break}}}}}},69819:function(t,e,r){\\\"use strict\\\";var n=r(85555),i=r(44467).templatedArray;r(24695),t.exports=i(\\\"image\\\",{visible:{valType:\\\"boolean\\\",dflt:!0,editType:\\\"arraydraw\\\"},source:{valType:\\\"string\\\",editType:\\\"arraydraw\\\"},layer:{valType:\\\"enumerated\\\",values:[\\\"below\\\",\\\"above\\\"],dflt:\\\"above\\\",editType:\\\"arraydraw\\\"},sizex:{valType:\\\"number\\\",dflt:0,editType:\\\"arraydraw\\\"},sizey:{valType:\\\"number\\\",dflt:0,editType:\\\"arraydraw\\\"},sizing:{valType:\\\"enumerated\\\",values:[\\\"fill\\\",\\\"contain\\\",\\\"stretch\\\"],dflt:\\\"contain\\\",editType:\\\"arraydraw\\\"},opacity:{valType:\\\"number\\\",min:0,max:1,dflt:1,editType:\\\"arraydraw\\\"},x:{valType:\\\"any\\\",dflt:0,editType:\\\"arraydraw\\\"},y:{valType:\\\"any\\\",dflt:0,editType:\\\"arraydraw\\\"},xanchor:{valType:\\\"enumerated\\\",values:[\\\"left\\\",\\\"center\\\",\\\"right\\\"],dflt:\\\"left\\\",editType:\\\"arraydraw\\\"},yanchor:{valType:\\\"enumerated\\\",values:[\\\"top\\\",\\\"middle\\\",\\\"bottom\\\"],dflt:\\\"top\\\",editType:\\\"arraydraw\\\"},xref:{valType:\\\"enumerated\\\",values:[\\\"paper\\\",n.idRegex.x.toString()],dflt:\\\"paper\\\",editType:\\\"arraydraw\\\"},yref:{valType:\\\"enumerated\\\",values:[\\\"paper\\\",n.idRegex.y.toString()],dflt:\\\"paper\\\",editType:\\\"arraydraw\\\"},editType:\\\"arraydraw\\\"})},75378:function(t,e,r){\\\"use strict\\\";var n=r(92770),i=r(58163);t.exports=function(t,e,r,a){e=e||{};var o=\\\"log\\\"===r&&\\\"linear\\\"===e.type,s=\\\"linear\\\"===r&&\\\"log\\\"===e.type;if(o||s)for(var l,u,c=t._fullLayout.images,f=e._id.charAt(0),h=0;h<c.length;h++)if(u=\\\"images[\\\"+h+\\\"].\\\",(l=c[h])[f+\\\"ref\\\"]===e._id){var p=l[f],d=l[\\\"size\\\"+f],v=null,g=null;if(o){v=i(p,e.range);var y=d/Math.pow(10,v)/2;g=2*Math.log(y+Math.sqrt(1+y*y))/Math.LN10}else g=(v=Math.pow(10,p))*(Math.pow(10,d/2)-Math.pow(10,-d/2));n(v)?n(g)||(g=null):(v=null,g=null),a(u+f,v),a(u+\\\"size\\\"+f,g)}}},81603:function(t,e,r){\\\"use strict\\\";var n=r(71828),i=r(89298),a=r(85501),o=r(69819);function s(t,e,r){function a(r,i){return n.coerce(t,e,o,r,i)}var s=a(\\\"source\\\");if(!a(\\\"visible\\\",!!s))return e;a(\\\"layer\\\"),a(\\\"xanchor\\\"),a(\\\"yanchor\\\"),a(\\\"sizex\\\"),a(\\\"sizey\\\"),a(\\\"sizing\\\"),a(\\\"opacity\\\");for(var l={_fullLayout:r},u=[\\\"x\\\",\\\"y\\\"],c=0;c<2;c++){var f=u[c],h=i.coerceRef(t,e,l,f,\\\"paper\\\",void 0);\\\"paper\\\"!==h&&i.getFromId(l,h)._imgIndices.push(e._index),i.coercePosition(e,l,a,h,f,0)}return e}t.exports=function(t,e){a(t,e,{name:\\\"images\\\",handleItemDefaults:s})}},80750:function(t,e,r){\\\"use strict\\\";var n=r(39898),i=r(91424),a=r(89298),o=r(41675),s=r(77922);t.exports=function(t){var e,r,l=t._fullLayout,u=[],c={},f=[];for(r=0;r<l.images.length;r++){var h=l.images[r];if(h.visible)if(\\\"below\\\"===h.layer&&\\\"paper\\\"!==h.xref&&\\\"paper\\\"!==h.yref){e=o.ref2id(h.xref)+o.ref2id(h.yref);var p=l._plots[e];if(!p){f.push(h);continue}p.mainplot&&(e=p.mainplot.id),c[e]||(c[e]=[]),c[e].push(h)}else\\\"above\\\"===h.layer?u.push(h):f.push(h)}var d={left:{sizing:\\\"xMin\\\",offset:0},center:{sizing:\\\"xMid\\\",offset:-.5},right:{sizing:\\\"xMax\\\",offset:-1}},v={top:{sizing:\\\"YMin\\\",offset:0},middle:{sizing:\\\"YMid\\\",offset:-.5},bottom:{sizing:\\\"YMax\\\",offset:-1}};function g(e){var r=n.select(this);if(this._imgSrc!==e.source)if(r.attr(\\\"xmlns\\\",s.svg),e.source&&\\\"data:\\\"===e.source.slice(0,5))r.attr(\\\"xlink:href\\\",e.source),this._imgSrc=e.source;else{var i=new Promise(function(t){var n=new Image;function i(){r.remove(),t()}this.img=n,n.setAttribute(\\\"crossOrigin\\\",\\\"anonymous\\\"),n.onerror=i,n.onload=function(){var e=document.createElement(\\\"canvas\\\");e.width=this.width,e.height=this.height,e.getContext(\\\"2d\\\",{willReadFrequently:!0}).drawImage(this,0,0);var n=e.toDataURL(\\\"image/png\\\");r.attr(\\\"xlink:href\\\",n),t()},r.on(\\\"error\\\",i),n.src=e.source,this._imgSrc=e.source}.bind(this));t._promises.push(i)}}function y(e){var r,o,s=n.select(this),u=a.getFromId(t,e.xref),c=a.getFromId(t,e.yref),f=\\\"domain\\\"===a.getRefType(e.xref),h=\\\"domain\\\"===a.getRefType(e.yref),p=l._size;r=void 0!==u?\\\"string\\\"==typeof e.xref&&f?u._length*e.sizex:Math.abs(u.l2p(e.sizex)-u.l2p(0)):e.sizex*p.w,o=void 0!==c?\\\"string\\\"==typeof e.yref&&h?c._length*e.sizey:Math.abs(c.l2p(e.sizey)-c.l2p(0)):e.sizey*p.h;var g,y,m=r*d[e.xanchor].offset,x=o*v[e.yanchor].offset,b=d[e.xanchor].sizing+v[e.yanchor].sizing;switch(g=void 0!==u?\\\"string\\\"==typeof e.xref&&f?u._length*e.x+u._offset:u.r2p(e.x)+u._offset:e.x*p.w+p.l,g+=m,y=void 0!==c?\\\"string\\\"==typeof e.yref&&h?c._length*(1-e.y)+c._offset:c.r2p(e.y)+c._offset:p.h-e.y*p.h+p.t,y+=x,e.sizing){case\\\"fill\\\":b+=\\\" slice\\\";break;case\\\"stretch\\\":b=\\\"none\\\"}s.attr({x:g,y:y,width:r,height:o,preserveAspectRatio:b,opacity:e.opacity});var _=(u&&\\\"domain\\\"!==a.getRefType(e.xref)?u._id:\\\"\\\")+(c&&\\\"domain\\\"!==a.getRefType(e.yref)?c._id:\\\"\\\");i.setClipUrl(s,_?\\\"clip\\\"+l._uid+_:null,t)}var m=l._imageLowerLayer.selectAll(\\\"image\\\").data(f),x=l._imageUpperLayer.selectAll(\\\"image\\\").data(u);m.enter().append(\\\"image\\\"),x.enter().append(\\\"image\\\"),m.exit().remove(),x.exit().remove(),m.each((function(t){g.bind(this)(t),y.bind(this)(t)})),x.each((function(t){g.bind(this)(t),y.bind(this)(t)}));var b=Object.keys(l._plots);for(r=0;r<b.length;r++){e=b[r];var _=l._plots[e];if(_.imagelayer){var w=_.imagelayer.selectAll(\\\"image\\\").data(c[e]||[]);w.enter().append(\\\"image\\\"),w.exit().remove(),w.each((function(t){g.bind(this)(t),y.bind(this)(t)}))}}}},68804:function(t,e,r){\\\"use strict\\\";t.exports={moduleType:\\\"component\\\",name:\\\"images\\\",layoutAttributes:r(69819),supplyLayoutDefaults:r(81603),includeBasePlot:r(76325)(\\\"images\\\"),draw:r(80750),convertCoords:r(75378)}},33030:function(t,e,r){\\\"use strict\\\";var n=r(41940),i=r(22399);t.exports={_isSubplotObj:!0,visible:{valType:\\\"boolean\\\",dflt:!0,editType:\\\"legend\\\"},bgcolor:{valType:\\\"color\\\",editType:\\\"legend\\\"},bordercolor:{valType:\\\"color\\\",dflt:i.defaultLine,editType:\\\"legend\\\"},borderwidth:{valType:\\\"number\\\",min:0,dflt:0,editType:\\\"legend\\\"},font:n({editType:\\\"legend\\\"}),grouptitlefont:n({editType:\\\"legend\\\"}),orientation:{valType:\\\"enumerated\\\",values:[\\\"v\\\",\\\"h\\\"],dflt:\\\"v\\\",editType:\\\"legend\\\"},traceorder:{valType:\\\"flaglist\\\",flags:[\\\"reversed\\\",\\\"grouped\\\"],extras:[\\\"normal\\\"],editType:\\\"legend\\\"},tracegroupgap:{valType:\\\"number\\\",min:0,dflt:10,editType:\\\"legend\\\"},entrywidth:{valType:\\\"number\\\",min:0,editType:\\\"legend\\\"},entrywidthmode:{valType:\\\"enumerated\\\",values:[\\\"fraction\\\",\\\"pixels\\\"],dflt:\\\"pixels\\\",editType:\\\"legend\\\"},itemsizing:{valType:\\\"enumerated\\\",values:[\\\"trace\\\",\\\"constant\\\"],dflt:\\\"trace\\\",editType:\\\"legend\\\"},itemwidth:{valType:\\\"number\\\",min:30,dflt:30,editType:\\\"legend\\\"},itemclick:{valType:\\\"enumerated\\\",values:[\\\"toggle\\\",\\\"toggleothers\\\",!1],dflt:\\\"toggle\\\",editType:\\\"legend\\\"},itemdoubleclick:{valType:\\\"enumerated\\\",values:[\\\"toggle\\\",\\\"toggleothers\\\",!1],dflt:\\\"toggleothers\\\",editType:\\\"legend\\\"},groupclick:{valType:\\\"enumerated\\\",values:[\\\"toggleitem\\\",\\\"togglegroup\\\"],dflt:\\\"togglegroup\\\",editType:\\\"legend\\\"},x:{valType:\\\"number\\\",editType:\\\"legend\\\"},xref:{valType:\\\"enumerated\\\",dflt:\\\"paper\\\",values:[\\\"container\\\",\\\"paper\\\"],editType:\\\"layoutstyle\\\"},xanchor:{valType:\\\"enumerated\\\",values:[\\\"auto\\\",\\\"left\\\",\\\"center\\\",\\\"right\\\"],dflt:\\\"left\\\",editType:\\\"legend\\\"},y:{valType:\\\"number\\\",editType:\\\"legend\\\"},yref:{valType:\\\"enumerated\\\",dflt:\\\"paper\\\",values:[\\\"container\\\",\\\"paper\\\"],editType:\\\"layoutstyle\\\"},yanchor:{valType:\\\"enumerated\\\",values:[\\\"auto\\\",\\\"top\\\",\\\"middle\\\",\\\"bottom\\\"],editType:\\\"legend\\\"},uirevision:{valType:\\\"any\\\",editType:\\\"none\\\"},valign:{valType:\\\"enumerated\\\",values:[\\\"top\\\",\\\"middle\\\",\\\"bottom\\\"],dflt:\\\"middle\\\",editType:\\\"legend\\\"},title:{text:{valType:\\\"string\\\",dflt:\\\"\\\",editType:\\\"legend\\\"},font:n({editType:\\\"legend\\\"}),side:{valType:\\\"enumerated\\\",values:[\\\"top\\\",\\\"left\\\",\\\"top left\\\"],editType:\\\"legend\\\"},editType:\\\"legend\\\"},editType:\\\"legend\\\"}},14928:function(t){\\\"use strict\\\";t.exports={scrollBarWidth:6,scrollBarMinHeight:20,scrollBarColor:\\\"#808BA4\\\",scrollBarMargin:4,scrollBarEnterAttrs:{rx:20,ry:3,width:0,height:0},titlePad:2,itemGap:5}},99017:function(t,e,r){\\\"use strict\\\";var n=r(73972),i=r(71828),a=r(44467),o=r(9012),s=r(33030),l=r(10820),u=r(10130);function c(t,e,r,c){var f=e[t]||{},h=a.newContainer(r,t);function p(t,e){return i.coerce(f,h,s,t,e)}var d=i.coerceFont(p,\\\"font\\\",r.font);if(p(\\\"bgcolor\\\",r.paper_bgcolor),p(\\\"bordercolor\\\"),p(\\\"visible\\\")){for(var v,g=function(t,e){var r=v._input,n=v;return i.coerce(r,n,o,t,e)},y=r.font||{},m=i.coerceFont(p,\\\"grouptitlefont\\\",i.extendFlat({},y,{size:Math.round(1.1*y.size)})),x=0,b=!1,_=\\\"normal\\\",w=0;w<c.length;w++)(v=c[w]).visible&&((v.showlegend||v._dfltShowLegend&&!(v._module&&v._module.attributes&&v._module.attributes.showlegend&&!1===v._module.attributes.showlegend.dflt))&&(x++,v.showlegend&&(b=!0,(n.traceIs(v,\\\"pie-like\\\")||!0===v._input.showlegend)&&x++),i.coerceFont(g,\\\"legendgrouptitle.font\\\",m)),(n.traceIs(v,\\\"bar\\\")&&\\\"stack\\\"===r.barmode||-1!==[\\\"tonextx\\\",\\\"tonexty\\\"].indexOf(v.fill))&&(_=u.isGrouped({traceorder:_})?\\\"grouped+reversed\\\":\\\"reversed\\\"),void 0!==v.legendgroup&&\\\"\\\"!==v.legendgroup&&(_=u.isReversed({traceorder:_})?\\\"reversed+grouped\\\":\\\"grouped\\\"));var T=i.coerce(e,r,l,\\\"showlegend\\\",b&&x>1);if(!1===T&&(r.legend=void 0),(!1!==T||f.uirevision)&&(p(\\\"uirevision\\\",r.uirevision),!1!==T)){p(\\\"borderwidth\\\");var k,A,M,S=\\\"h\\\"===p(\\\"orientation\\\"),E=\\\"paper\\\"===p(\\\"yref\\\"),L=\\\"paper\\\"===p(\\\"xref\\\"),C=\\\"left\\\";if(S?(k=0,n.getComponentMethod(\\\"rangeslider\\\",\\\"isVisible\\\")(e.xaxis)?E?(A=1.1,M=\\\"bottom\\\"):(A=1,M=\\\"top\\\"):E?(A=-.1,M=\\\"top\\\"):(A=0,M=\\\"bottom\\\")):(A=1,M=\\\"auto\\\",L?k=1.02:(k=1,C=\\\"right\\\")),i.coerce(f,h,{x:{valType:\\\"number\\\",editType:\\\"legend\\\",min:L?-2:0,max:L?3:1,dflt:k}},\\\"x\\\"),i.coerce(f,h,{y:{valType:\\\"number\\\",editType:\\\"legend\\\",min:E?-2:0,max:E?3:1,dflt:A}},\\\"y\\\"),p(\\\"traceorder\\\",_),u.isGrouped(r.legend)&&p(\\\"tracegroupgap\\\"),p(\\\"entrywidth\\\"),p(\\\"entrywidthmode\\\"),p(\\\"itemsizing\\\"),p(\\\"itemwidth\\\"),p(\\\"itemclick\\\"),p(\\\"itemdoubleclick\\\"),p(\\\"groupclick\\\"),p(\\\"xanchor\\\",C),p(\\\"yanchor\\\",M),p(\\\"valign\\\"),i.noneOrAll(f,h,[\\\"x\\\",\\\"y\\\"]),p(\\\"title.text\\\")){p(\\\"title.side\\\",S?\\\"left\\\":\\\"top\\\");var P=i.extendFlat({},d,{size:i.bigFont(d.size)});i.coerceFont(p,\\\"title.font\\\",P)}}}}t.exports=function(t,e,r){var n,a=[\\\"legend\\\"];for(n=0;n<r.length;n++)i.pushUnique(a,r[n].legend);for(e._legends=[],n=0;n<a.length;n++){var o=a[n];c(o,t,e,r),e[o]&&e[o].visible&&(e[o]._id=o),e._legends.push(o)}}},43969:function(t,e,r){\\\"use strict\\\";var n=r(39898),i=r(71828),a=r(74875),o=r(73972),s=r(11086),l=r(28569),u=r(91424),c=r(7901),f=r(63893),h=r(85167),p=r(14928),d=r(18783),v=d.LINE_SPACING,g=d.FROM_TL,y=d.FROM_BR,m=r(82424),x=r(53630),b=r(10130),_=1,w=/^legend[0-9]*$/;function T(t,e){var r,s,f=e||{},h=t._fullLayout,d=O(f),v=f._inHover;if(v?(s=f.layer,r=\\\"hover\\\"):(s=h._infolayer,r=d),s){var w;if(r+=h._uid,t._legendMouseDownTime||(t._legendMouseDownTime=0),v){if(!f.entries)return;w=m(f.entries,f)}else{if(!t.calcdata)return;w=h.showlegend&&m(t.calcdata,f,h._legends.length>1)}var T=h.hiddenlabels||[];if(!(v||h.showlegend&&w.length))return s.selectAll(\\\".\\\"+d).remove(),h._topdefs.select(\\\"#\\\"+r).remove(),a.autoMargin(t,d);var S=i.ensureSingle(s,\\\"g\\\",d,(function(t){v||t.attr(\\\"pointer-events\\\",\\\"all\\\")})),I=i.ensureSingleById(h._topdefs,\\\"clipPath\\\",r,(function(t){t.append(\\\"rect\\\")})),D=i.ensureSingle(S,\\\"rect\\\",\\\"bg\\\",(function(t){t.attr(\\\"shape-rendering\\\",\\\"crispEdges\\\")}));D.call(c.stroke,f.bordercolor).call(c.fill,f.bgcolor).style(\\\"stroke-width\\\",f.borderwidth+\\\"px\\\");var z=i.ensureSingle(S,\\\"g\\\",\\\"scrollbox\\\"),R=f.title;if(f._titleWidth=0,f._titleHeight=0,R.text){var F=i.ensureSingle(z,\\\"text\\\",d+\\\"titletext\\\");F.attr(\\\"text-anchor\\\",\\\"start\\\").call(u.font,R.font).text(R.text),L(F,z,t,f,_)}else z.selectAll(\\\".\\\"+d+\\\"titletext\\\").remove();var B=i.ensureSingle(S,\\\"rect\\\",\\\"scrollbar\\\",(function(t){t.attr(p.scrollBarEnterAttrs).call(c.fill,p.scrollBarColor)})),N=z.selectAll(\\\"g.groups\\\").data(w);N.enter().append(\\\"g\\\").attr(\\\"class\\\",\\\"groups\\\"),N.exit().remove();var j=N.selectAll(\\\"g.traces\\\").data(i.identity);j.enter().append(\\\"g\\\").attr(\\\"class\\\",\\\"traces\\\"),j.exit().remove(),j.style(\\\"opacity\\\",(function(t){var e=t[0].trace;return o.traceIs(e,\\\"pie-like\\\")?-1!==T.indexOf(t[0].label)?.5:1:\\\"legendonly\\\"===e.visible?.5:1})).each((function(){n.select(this).call(M,t,f)})).call(x,t,f).each((function(){v||n.select(this).call(E,t,d)})),i.syncOrAsync([a.previousPromises,function(){return function(t,e,r,i){var a=t._fullLayout,o=O(i);i||(i=a[o]);var s=a._size,l=b.isVertical(i),c=b.isGrouped(i),f=\\\"fraction\\\"===i.entrywidthmode,h=i.borderwidth,d=2*h,v=p.itemGap,g=i.itemwidth+2*v,y=2*(h+v),m=P(i),x=i.y<0||0===i.y&&\\\"top\\\"===m,_=i.y>1||1===i.y&&\\\"bottom\\\"===m,w=i.tracegroupgap,T={};i._maxHeight=Math.max(x||_?a.height/2:s.h,30);var A=0;i._width=0,i._height=0;var M=function(t){var e=0,r=0,n=t.title.side;return n&&(-1!==n.indexOf(\\\"left\\\")&&(e=t._titleWidth),-1!==n.indexOf(\\\"top\\\")&&(r=t._titleHeight)),[e,r]}(i);if(l)r.each((function(t){var e=t[0].height;u.setTranslate(this,h+M[0],h+M[1]+i._height+e/2+v),i._height+=e,i._width=Math.max(i._width,t[0].width)})),A=g+i._width,i._width+=v+g+d,i._height+=y,c&&(e.each((function(t,e){u.setTranslate(this,0,e*i.tracegroupgap)})),i._height+=(i._lgroupsLength-1)*i.tracegroupgap);else{var S=C(i),E=i.x<0||0===i.x&&\\\"right\\\"===S,L=i.x>1||1===i.x&&\\\"left\\\"===S,I=_||x,D=a.width/2;i._maxWidth=Math.max(E?I&&\\\"left\\\"===S?s.l+s.w:D:L?I&&\\\"right\\\"===S?s.r+s.w:D:s.w,2*g);var z=0,R=0;r.each((function(t){var e=k(t,i,g);z=Math.max(z,e),R+=e})),A=null;var F=0;if(c){var B=0,N=0,j=0;e.each((function(){var t=0,e=0;n.select(this).selectAll(\\\"g.traces\\\").each((function(r){var n=k(r,i,g),a=r[0].height;u.setTranslate(this,M[0],M[1]+h+v+a/2+e),e+=a,t=Math.max(t,n),T[r[0].trace.legendgroup]=t}));var r=t+v;N>0&&r+h+N>i._maxWidth?(F=Math.max(F,N),N=0,j+=B+w,B=e):B=Math.max(B,e),u.setTranslate(this,N,j),N+=r})),i._width=Math.max(F,N)+h,i._height=j+B+y}else{var U=r.size(),V=R+d+(U-1)*v<i._maxWidth,H=0,q=0,G=0,Z=0;r.each((function(t){var e=t[0].height,r=k(t,i,g),n=V?r:z;f||(n+=v),n+h+q-v>=i._maxWidth&&(F=Math.max(F,Z),q=0,G+=H,i._height+=H,H=0),u.setTranslate(this,M[0]+h+q,M[1]+h+G+e/2+v),Z=q+r+v,q+=n,H=Math.max(H,e)})),V?(i._width=q+d,i._height=H+y):(i._width=Math.max(F,Z)+d,i._height+=H+y)}}i._width=Math.ceil(Math.max(i._width+M[0],i._titleWidth+2*(h+p.titlePad))),i._height=Math.ceil(Math.max(i._height+M[1],i._titleHeight+2*(h+p.itemGap))),i._effHeight=Math.min(i._height,i._maxHeight);var Y=t._context.edits,W=Y.legendText||Y.legendPosition;r.each((function(t){var e=n.select(this).select(\\\".\\\"+o+\\\"toggle\\\"),r=t[0].height,a=t[0].trace.legendgroup,s=k(t,i,g);c&&\\\"\\\"!==a&&(s=T[a]);var h=W?g:A||s;l||f||(h+=v/2),u.setRect(e,0,-r/2,h,r)}))}(t,N,j,f)},function(){var e,s,c,m,x=h._size,b=f.borderwidth,_=\\\"paper\\\"===f.xref,w=\\\"paper\\\"===f.yref;if(!v){var T,k;T=_?x.l+x.w*f.x-g[C(f)]*f._width:h.width*f.x-g[C(f)]*f._width,k=w?x.t+x.h*(1-f.y)-g[P(f)]*f._effHeight:h.height*(1-f.y)-g[P(f)]*f._effHeight;var M=function(t,e,r,n){var i=t._fullLayout,o=i[e],s=C(o),l=P(o),u=\\\"paper\\\"===o.xref,c=\\\"paper\\\"===o.yref;t._fullLayout._reservedMargin[e]={};var f=o.y<.5?\\\"b\\\":\\\"t\\\",h=o.x<.5?\\\"l\\\":\\\"r\\\",p={r:i.width-r,l:r+o._width,b:i.height-n,t:n+o._effHeight};if(u&&c)return a.autoMargin(t,e,{x:o.x,y:o.y,l:o._width*g[s],r:o._width*y[s],b:o._effHeight*y[l],t:o._effHeight*g[l]});u?t._fullLayout._reservedMargin[e][f]=p[f]:c||\\\"v\\\"===o.orientation?t._fullLayout._reservedMargin[e][h]=p[h]:t._fullLayout._reservedMargin[e][f]=p[f]}(t,d,T,k);if(M)return;if(h.margin.autoexpand){var E=T,L=k;T=_?i.constrain(T,0,h.width-f._width):E,k=w?i.constrain(k,0,h.height-f._effHeight):L,T!==E&&i.log(\\\"Constrain \\\"+d+\\\".x to make legend fit inside graph\\\"),k!==L&&i.log(\\\"Constrain \\\"+d+\\\".y to make legend fit inside graph\\\")}u.setTranslate(S,T,k)}if(B.on(\\\".drag\\\",null),S.on(\\\"wheel\\\",null),v||f._height<=f._maxHeight||t._context.staticPlot){var O=f._effHeight;v&&(O=f._height),D.attr({width:f._width-b,height:O-b,x:b/2,y:b/2}),u.setTranslate(z,0,0),I.select(\\\"rect\\\").attr({width:f._width-2*b,height:O-2*b,x:b,y:b}),u.setClipUrl(z,r,t),u.setRect(B,0,0,0,0),delete f._scrollY}else{var R,F,j,U=Math.max(p.scrollBarMinHeight,f._effHeight*f._effHeight/f._height),V=f._effHeight-U-2*p.scrollBarMargin,H=f._height-f._effHeight,q=V/H,G=Math.min(f._scrollY||0,H);D.attr({width:f._width-2*b+p.scrollBarWidth+p.scrollBarMargin,height:f._effHeight-b,x:b/2,y:b/2}),I.select(\\\"rect\\\").attr({width:f._width-2*b+p.scrollBarWidth+p.scrollBarMargin,height:f._effHeight-2*b,x:b,y:b+G}),u.setClipUrl(z,r,t),W(G,U,q),S.on(\\\"wheel\\\",(function(){W(G=i.constrain(f._scrollY+n.event.deltaY/V*H,0,H),U,q),0!==G&&G!==H&&n.event.preventDefault()}));var Z=n.behavior.drag().on(\\\"dragstart\\\",(function(){var t=n.event.sourceEvent;R=\\\"touchstart\\\"===t.type?t.changedTouches[0].clientY:t.clientY,j=G})).on(\\\"drag\\\",(function(){var t=n.event.sourceEvent;2===t.buttons||t.ctrlKey||(F=\\\"touchmove\\\"===t.type?t.changedTouches[0].clientY:t.clientY,G=function(t,e,r){var n=(r-e)/q+t;return i.constrain(n,0,H)}(j,R,F),W(G,U,q))}));B.call(Z);var Y=n.behavior.drag().on(\\\"dragstart\\\",(function(){var t=n.event.sourceEvent;\\\"touchstart\\\"===t.type&&(R=t.changedTouches[0].clientY,j=G)})).on(\\\"drag\\\",(function(){var t=n.event.sourceEvent;\\\"touchmove\\\"===t.type&&(F=t.changedTouches[0].clientY,G=function(t,e,r){var n=(e-r)/q+t;return i.constrain(n,0,H)}(j,R,F),W(G,U,q))}));z.call(Y)}function W(e,r,n){f._scrollY=t._fullLayout[d]._scrollY=e,u.setTranslate(z,0,-e),u.setRect(B,f._width,p.scrollBarMargin+e*n,p.scrollBarWidth,r),I.select(\\\"rect\\\").attr(\\\"y\\\",b+e)}t._context.edits.legendPosition&&(S.classed(\\\"cursor-move\\\",!0),l.init({element:S.node(),gd:t,prepFn:function(){var t=u.getTranslate(S);c=t.x,m=t.y},moveFn:function(t,r){var n=c+t,i=m+r;u.setTranslate(S,n,i),e=l.align(n,f._width,x.l,x.l+x.w,f.xanchor),s=l.align(i+f._height,-f._height,x.t+x.h,x.t,f.yanchor)},doneFn:function(){if(void 0!==e&&void 0!==s){var r={};r[d+\\\".x\\\"]=e,r[d+\\\".y\\\"]=s,o.call(\\\"_guiRelayout\\\",t,r)}},clickFn:function(e,r){var n=N.selectAll(\\\"g.traces\\\").filter((function(){var t=this.getBoundingClientRect();return r.clientX>=t.left&&r.clientX<=t.right&&r.clientY>=t.top&&r.clientY<=t.bottom}));n.size()>0&&A(t,S,n,e,r)}}))}],t)}}function k(t,e,r){var n=t[0],i=n.width,a=e.entrywidthmode,o=n.trace.legendwidth||e.entrywidth;return\\\"fraction\\\"===a?e._maxWidth*o:r+(o||i)}function A(t,e,r,n,i){var a=r.data()[0][0].trace,l={event:i,node:r.node(),curveNumber:a.index,expandedIndex:a._expandedIndex,data:t.data,layout:t.layout,frames:t._transitionData._frames,config:t._context,fullData:t._fullData,fullLayout:t._fullLayout};a._group&&(l.group=a._group),o.traceIs(a,\\\"pie-like\\\")&&(l.label=r.datum()[0].label),!1!==s.triggerHandler(t,\\\"plotly_legendclick\\\",l)&&(1===n?e._clickTimeout=setTimeout((function(){t._fullLayout&&h(r,t,n)}),t._context.doubleClickDelay):2===n&&(e._clickTimeout&&clearTimeout(e._clickTimeout),t._legendMouseDownTime=0,!1!==s.triggerHandler(t,\\\"plotly_legenddoubleclick\\\",l)&&h(r,t,n)))}function M(t,e,r){var n,a,s=O(r),l=t.data()[0][0],c=l.trace,h=o.traceIs(c,\\\"pie-like\\\"),d=!r._inHover&&e._context.edits.legendText&&!h,v=r._maxNameLength;l.groupTitle?(n=l.groupTitle.text,a=l.groupTitle.font):(a=r.font,r.entries?n=l.text:(n=h?l.label:c.name,c._meta&&(n=i.templateString(n,c._meta))));var g=i.ensureSingle(t,\\\"text\\\",s+\\\"text\\\");g.attr(\\\"text-anchor\\\",\\\"start\\\").call(u.font,a).text(d?S(n,v):n);var y=r.itemwidth+2*p.itemGap;f.positionText(g,y,0),d?g.call(f.makeEditable,{gd:e,text:n}).call(L,t,e,r).on(\\\"edit\\\",(function(n){this.text(S(n,v)).call(L,t,e,r);var a=l.trace._fullInput||{},s={};if(o.hasTransform(a,\\\"groupby\\\")){var u=o.getTransformIndices(a,\\\"groupby\\\"),f=u[u.length-1],h=i.keyedContainer(a,\\\"transforms[\\\"+f+\\\"].styles\\\",\\\"target\\\",\\\"value.name\\\");h.set(l.trace._group,n),s=h.constructUpdate()}else s.name=n;return o.call(\\\"_guiRestyle\\\",e,s,c.index)})):L(g,t,e,r)}function S(t,e){var r=Math.max(4,e);if(t&&t.trim().length>=r/2)return t;for(var n=r-(t=t||\\\"\\\").length;n>0;n--)t+=\\\" \\\";return t}function E(t,e,r){var a,o=e._context.doubleClickDelay,s=1,l=i.ensureSingle(t,\\\"rect\\\",r+\\\"toggle\\\",(function(t){e._context.staticPlot||t.style(\\\"cursor\\\",\\\"pointer\\\").attr(\\\"pointer-events\\\",\\\"all\\\"),t.call(c.fill,\\\"rgba(0,0,0,0)\\\")}));e._context.staticPlot||(l.on(\\\"mousedown\\\",(function(){(a=(new Date).getTime())-e._legendMouseDownTime<o?s+=1:(s=1,e._legendMouseDownTime=a)})),l.on(\\\"mouseup\\\",(function(){if(!e._dragged&&!e._editing){var i=e._fullLayout[r];(new Date).getTime()-e._legendMouseDownTime>o&&(s=Math.max(s-1,1)),A(e,i,t,s,n.event)}})))}function L(t,e,r,n,i){n._inHover&&t.attr(\\\"data-notex\\\",!0),f.convertToTspans(t,r,(function(){!function(t,e,r,n){var i=t.data()[0][0];if(r._inHover||!i||i.trace.showlegend){var a=t.select(\\\"g[class*=math-group]\\\"),o=a.node(),s=O(r);r||(r=e._fullLayout[s]);var l,c,h=r.borderwidth,d=(n===_?r.title.font:i.groupTitle?i.groupTitle.font:r.font).size*v;if(o){var g=u.bBox(o);l=g.height,c=g.width,n===_?u.setTranslate(a,h,h+.75*l):u.setTranslate(a,0,.25*l)}else{var y=\\\".\\\"+s+(n===_?\\\"title\\\":\\\"\\\")+\\\"text\\\",m=t.select(y),x=f.lineCount(m),b=m.node();if(l=d*x,c=b?u.bBox(b).width:0,n===_)\\\"left\\\"===r.title.side&&(c+=2*p.itemGap),f.positionText(m,h+p.titlePad,h+d);else{var w=2*p.itemGap+r.itemwidth;i.groupTitle&&(w=p.itemGap,c-=r.itemwidth),f.positionText(m,w,-d*((x-1)/2-.3))}}n===_?(r._titleWidth=c,r._titleHeight=l):(i.lineHeight=d,i.height=Math.max(l,16)+3,i.width=c)}else t.remove()}(e,r,n,i)}))}function C(t){return i.isRightAnchor(t)?\\\"right\\\":i.isCenterAnchor(t)?\\\"center\\\":\\\"left\\\"}function P(t){return i.isBottomAnchor(t)?\\\"bottom\\\":i.isMiddleAnchor(t)?\\\"middle\\\":\\\"top\\\"}function O(t){return t._id||\\\"legend\\\"}t.exports=function(t,e){if(e)T(t,e);else{var r=t._fullLayout,i=r._legends;r._infolayer.selectAll('[class^=\\\"legend\\\"]').each((function(){var t=n.select(this),e=t.attr(\\\"class\\\").split(\\\" \\\")[0];e.match(w)&&-1===i.indexOf(e)&&t.remove()}));for(var a=0;a<i.length;a++){var o=i[a];T(t,t._fullLayout[o])}}}},82424:function(t,e,r){\\\"use strict\\\";var n=r(73972),i=r(10130);t.exports=function(t,e,r){var a,o,s=e._inHover,l=i.isGrouped(e),u=i.isReversed(e),c={},f=[],h=!1,p={},d=0,v=0;function g(t,n,a){if(!1!==e.visible&&(!r||t===e._id))if(\\\"\\\"!==n&&i.isGrouped(e))-1===f.indexOf(n)?(f.push(n),h=!0,c[n]=[a]):c[n].push(a);else{var o=\\\"~~i\\\"+d;f.push(o),c[o]=[a],d++}}for(a=0;a<t.length;a++){var y=t[a],m=y[0],x=m.trace,b=x.legend,_=x.legendgroup;if(s||x.visible&&x.showlegend)if(n.traceIs(x,\\\"pie-like\\\"))for(p[_]||(p[_]={}),o=0;o<y.length;o++){var w=y[o].label;p[_][w]||(g(b,_,{label:w,color:y[o].color,i:y[o].i,trace:x,pts:y[o].pts}),p[_][w]=!0,v=Math.max(v,(w||\\\"\\\").length))}else g(b,_,m),v=Math.max(v,(x.name||\\\"\\\").length)}if(!f.length)return[];var T=!h||!l,k=[];for(a=0;a<f.length;a++){var A=c[f[a]];T?k.push(A[0]):k.push(A)}for(T&&(k=[k]),a=0;a<k.length;a++){var M=1/0;for(o=0;o<k[a].length;o++){var S=k[a][o].trace.legendrank;M>S&&(M=S)}k[a][0]._groupMinRank=M,k[a][0]._preGroupSort=a}var E=function(t,e){return t.trace.legendrank-e.trace.legendrank||t._preSort-e._preSort};for(k.forEach((function(t,e){t[0]._preGroupSort=e})),k.sort((function(t,e){return t[0]._groupMinRank-e[0]._groupMinRank||t[0]._preGroupSort-e[0]._preGroupSort})),a=0;a<k.length;a++){k[a].forEach((function(t,e){t._preSort=e})),k[a].sort(E);var L=k[a][0].trace,C=null;for(o=0;o<k[a].length;o++){var P=k[a][o].trace.legendgrouptitle;if(P&&P.text){C=P,s&&(P.font=e._groupTitleFont);break}}if(u&&k[a].reverse(),C){var O=!1;for(o=0;o<k[a].length;o++)if(n.traceIs(k[a][o].trace,\\\"pie-like\\\")){O=!0;break}k[a].unshift({i:-1,groupTitle:C,noClick:O,trace:{showlegend:L.showlegend,legendgroup:L.legendgroup,visible:\\\"toggleitem\\\"===e.groupclick||L.visible}})}for(o=0;o<k[a].length;o++)k[a][o]=[k[a][o]]}return e._lgroupsLength=k.length,e._maxNameLength=v,k}},85167:function(t,e,r){\\\"use strict\\\";var n=r(71828),i=r(73972),a=!0;t.exports=function(t,e,r){var o=e._fullLayout;if(!e._dragged&&!e._editing){var s,l=o.legend.itemclick,u=o.legend.itemdoubleclick,c=o.legend.groupclick;if(1===r&&\\\"toggle\\\"===l&&\\\"toggleothers\\\"===u&&a&&e.data&&e._context.showTips?(n.notifier(n._(e,\\\"Double-click on legend to isolate one trace\\\"),\\\"long\\\"),a=!1):a=!1,1===r?s=l:2===r&&(s=u),s){var f=\\\"togglegroup\\\"===c,h=o.hiddenlabels?o.hiddenlabels.slice():[],p=t.data()[0][0];if(!p.groupTitle||!p.noClick){var d,v,g,y,m,x=e._fullData,b=p.trace,_=b.legendgroup,w={},T=[],k=[],A=[];if(i.traceIs(b,\\\"pie-like\\\")){var M=p.label,S=h.indexOf(M);\\\"toggle\\\"===s?-1===S?h.push(M):h.splice(S,1):\\\"toggleothers\\\"===s&&(h=[],e.calcdata[0].forEach((function(t){M!==t.label&&h.push(t.label)})),e._fullLayout.hiddenlabels&&e._fullLayout.hiddenlabels.length===h.length&&-1===S&&(h=[])),i.call(\\\"_guiRelayout\\\",e,\\\"hiddenlabels\\\",h)}else{var E,L=_&&_.length,C=[];if(L)for(d=0;d<x.length;d++)(E=x[d]).visible&&E.legendgroup===_&&C.push(d);if(\\\"toggle\\\"===s){var P;switch(b.visible){case!0:P=\\\"legendonly\\\";break;case!1:P=!1;break;case\\\"legendonly\\\":P=!0}if(L)if(f)for(d=0;d<x.length;d++)!1!==x[d].visible&&x[d].legendgroup===_&&j(x[d],P);else j(b,P);else j(b,P)}else if(\\\"toggleothers\\\"===s){var O,I,D,z,R=!0;for(d=0;d<x.length;d++)if(O=x[d]===b,D=!0!==x[d].showlegend,!(O||D||(I=L&&x[d].legendgroup===_)||!0!==x[d].visible||i.traceIs(x[d],\\\"notLegendIsolatable\\\"))){R=!1;break}for(d=0;d<x.length;d++)if(!1!==x[d].visible&&!i.traceIs(x[d],\\\"notLegendIsolatable\\\"))switch(b.visible){case\\\"legendonly\\\":j(x[d],!0);break;case!0:z=!!R||\\\"legendonly\\\",O=x[d]===b,D=!0!==x[d].showlegend&&!x[d].legendgroup,I=O||L&&x[d].legendgroup===_,j(x[d],!(!I&&!D)||z)}}for(d=0;d<k.length;d++)if(g=k[d]){var F=g.constructUpdate(),B=Object.keys(F);for(v=0;v<B.length;v++)y=B[v],(w[y]=w[y]||[])[A[d]]=F[y]}for(m=Object.keys(w),d=0;d<m.length;d++)for(y=m[d],v=0;v<T.length;v++)w[y].hasOwnProperty(v)||(w[y][v]=void 0);i.call(\\\"_guiRestyle\\\",e,w,T)}}}}function N(t,e,r){var n=T.indexOf(t),i=w[e];return i||(i=w[e]=[]),-1===T.indexOf(t)&&(T.push(t),n=T.length-1),i[n]=r,n}function j(t,e){if(!p.groupTitle||f){var r=t._fullInput;if(i.hasTransform(r,\\\"groupby\\\")){var a=k[r.index];if(!a){var o=i.getTransformIndices(r,\\\"groupby\\\"),s=o[o.length-1];a=n.keyedContainer(r,\\\"transforms[\\\"+s+\\\"].styles\\\",\\\"target\\\",\\\"value.visible\\\"),k[r.index]=a}var l=a.get(t._group);void 0===l&&(l=!0),!1!==l&&a.set(t._group,e),A[r.index]=N(r.index,\\\"visible\\\",!1!==r.visible)}else{var u=!1!==r.visible&&e;N(r.index,\\\"visible\\\",u)}}}}},10130:function(t,e){\\\"use strict\\\";e.isGrouped=function(t){return-1!==(t.traceorder||\\\"\\\").indexOf(\\\"grouped\\\")},e.isVertical=function(t){return\\\"h\\\"!==t.orientation},e.isReversed=function(t){return-1!==(t.traceorder||\\\"\\\").indexOf(\\\"reversed\\\")}},2199:function(t,e,r){\\\"use strict\\\";t.exports={moduleType:\\\"component\\\",name:\\\"legend\\\",layoutAttributes:r(33030),supplyLayoutDefaults:r(99017),draw:r(43969),style:r(53630)}},53630:function(t,e,r){\\\"use strict\\\";var n=r(39898),i=r(73972),a=r(71828),o=a.strTranslate,s=r(91424),l=r(7901),u=r(52075).extractOpts,c=r(34098),f=r(63463),h=r(53581).castOption,p=r(14928);function d(t,e){return(e?\\\"radial\\\":\\\"horizontal\\\")+(t?\\\"\\\":\\\"reversed\\\")}function v(t){var e=t[0].trace,r=e.contours,n=c.hasLines(e),i=c.hasMarkers(e),a=e.visible&&e.fill&&\\\"none\\\"!==e.fill,o=!1,s=!1;if(r){var l=r.coloring;\\\"lines\\\"===l?o=!0:n=\\\"none\\\"===l||\\\"heatmap\\\"===l||r.showlines,\\\"constraint\\\"===r.type?a=\\\"=\\\"!==r._operation:\\\"fill\\\"!==l&&\\\"heatmap\\\"!==l||(s=!0)}return{showMarker:i,showLine:n,showFill:a,showGradientLine:o,showGradientFill:s,anyLine:n||o,anyFill:a||s}}function g(t,e,r){return t&&a.isArrayOrTypedArray(t)?e:t>r?r:t}t.exports=function(t,e,r){var y=e._fullLayout;r||(r=y.legend);var m=\\\"constant\\\"===r.itemsizing,x=r.itemwidth,b=(x+2*p.itemGap)/2,_=o(b,0),w=function(t,e,r,n){var i;if(t+1)i=t;else{if(!(e&&e.width>0))return 0;i=e.width}return m?n:Math.min(i,r)};function T(t,a,o){var c=t[0].trace,f=c.marker||{},h=f.line||{},p=o?c.visible&&c.type===o:i.traceIs(c,\\\"bar\\\"),d=n.select(a).select(\\\"g.legendpoints\\\").selectAll(\\\"path.legend\\\"+o).data(p?[t]:[]);d.enter().append(\\\"path\\\").classed(\\\"legend\\\"+o,!0).attr(\\\"d\\\",\\\"M6,6H-6V-6H6Z\\\").attr(\\\"transform\\\",_),d.exit().remove(),d.each((function(t){var i=n.select(this),a=t[0],o=w(a.mlw,f.line,5,2);i.style(\\\"stroke-width\\\",o+\\\"px\\\");var p=a.mcc;if(!r._inHover&&\\\"mc\\\"in a){var d=u(f),v=d.mid;void 0===v&&(v=(d.max+d.min)/2),p=s.tryColorscale(f,\\\"\\\")(v)}var y=p||a.mc||f.color,m=f.pattern,x=m&&s.getPatternAttr(m.shape,0,\\\"\\\");if(x){var b=s.getPatternAttr(m.bgcolor,0,null),_=s.getPatternAttr(m.fgcolor,0,null),T=m.fgopacity,k=g(m.size,8,10),A=g(m.solidity,.5,1),M=\\\"legend-\\\"+c.uid;i.call(s.pattern,\\\"legend\\\",e,M,x,k,A,p,m.fillmode,b,_,T)}else i.call(l.fill,y);o&&l.stroke(i,a.mlc||h.color)}))}function k(t,r,o){var s=t[0],l=s.trace,u=o?l.visible&&l.type===o:i.traceIs(l,o),c=n.select(r).select(\\\"g.legendpoints\\\").selectAll(\\\"path.legend\\\"+o).data(u?[t]:[]);if(c.enter().append(\\\"path\\\").classed(\\\"legend\\\"+o,!0).attr(\\\"d\\\",\\\"M6,6H-6V-6H6Z\\\").attr(\\\"transform\\\",_),c.exit().remove(),c.size()){var p=l.marker||{},d=w(h(p.line.width,s.pts),p.line,5,2),v=\\\"pieLike\\\",g=a.minExtend(l,{marker:{line:{width:d}}},v),y=a.minExtend(s,{trace:g},v);f(c,y,g,e)}}t.each((function(t){var e=n.select(this),i=a.ensureSingle(e,\\\"g\\\",\\\"layers\\\");i.style(\\\"opacity\\\",t[0].trace.opacity);var s=r.valign,l=t[0].lineHeight,u=t[0].height;if(\\\"middle\\\"!==s&&l&&u){var c={top:1,bottom:-1}[s]*(.5*(l-u+3));i.attr(\\\"transform\\\",o(0,c))}else i.attr(\\\"transform\\\",null);i.selectAll(\\\"g.legendfill\\\").data([t]).enter().append(\\\"g\\\").classed(\\\"legendfill\\\",!0),i.selectAll(\\\"g.legendlines\\\").data([t]).enter().append(\\\"g\\\").classed(\\\"legendlines\\\",!0);var f=i.selectAll(\\\"g.legendsymbols\\\").data([t]);f.enter().append(\\\"g\\\").classed(\\\"legendsymbols\\\",!0),f.selectAll(\\\"g.legendpoints\\\").data([t]).enter().append(\\\"g\\\").classed(\\\"legendpoints\\\",!0)})).each((function(t){var r,i=t[0].trace,o=[];if(i.visible)switch(i.type){case\\\"histogram2d\\\":case\\\"heatmap\\\":o=[[\\\"M-15,-2V4H15V-2Z\\\"]],r=!0;break;case\\\"choropleth\\\":case\\\"choroplethmapbox\\\":o=[[\\\"M-6,-6V6H6V-6Z\\\"]],r=!0;break;case\\\"densitymapbox\\\":o=[[\\\"M-6,0 a6,6 0 1,0 12,0 a 6,6 0 1,0 -12,0\\\"]],r=\\\"radial\\\";break;case\\\"cone\\\":o=[[\\\"M-6,2 A2,2 0 0,0 -6,6 V6L6,4Z\\\"],[\\\"M-6,-6 A2,2 0 0,0 -6,-2 L6,-4Z\\\"],[\\\"M-6,-2 A2,2 0 0,0 -6,2 L6,0Z\\\"]],r=!1;break;case\\\"streamtube\\\":o=[[\\\"M-6,2 A2,2 0 0,0 -6,6 H6 A2,2 0 0,1 6,2 Z\\\"],[\\\"M-6,-6 A2,2 0 0,0 -6,-2 H6 A2,2 0 0,1 6,-6 Z\\\"],[\\\"M-6,-2 A2,2 0 0,0 -6,2 H6 A2,2 0 0,1 6,-2 Z\\\"]],r=!1;break;case\\\"surface\\\":o=[[\\\"M-6,-6 A2,3 0 0,0 -6,0 H6 A2,3 0 0,1 6,-6 Z\\\"],[\\\"M-6,1 A2,3 0 0,1 -6,6 H6 A2,3 0 0,0 6,0 Z\\\"]],r=!0;break;case\\\"mesh3d\\\":o=[[\\\"M-6,6H0L-6,-6Z\\\"],[\\\"M6,6H0L6,-6Z\\\"],[\\\"M-6,-6H6L0,6Z\\\"]],r=!1;break;case\\\"volume\\\":o=[[\\\"M-6,6H0L-6,-6Z\\\"],[\\\"M6,6H0L6,-6Z\\\"],[\\\"M-6,-6H6L0,6Z\\\"]],r=!0;break;case\\\"isosurface\\\":o=[[\\\"M-6,6H0L-6,-6Z\\\"],[\\\"M6,6H0L6,-6Z\\\"],[\\\"M-6,-6 A12,24 0 0,0 6,-6 L0,6Z\\\"]],r=!1}var c=n.select(this).select(\\\"g.legendpoints\\\").selectAll(\\\"path.legend3dandfriends\\\").data(o);c.enter().append(\\\"path\\\").classed(\\\"legend3dandfriends\\\",!0).attr(\\\"transform\\\",_).style(\\\"stroke-miterlimit\\\",1),c.exit().remove(),c.each((function(t,o){var c,f=n.select(this),h=u(i),p=h.colorscale,v=h.reversescale;if(p){if(!r){var g=p.length;c=0===o?p[v?g-1:0][1]:1===o?p[v?0:g-1][1]:p[Math.floor((g-1)/2)][1]}}else{var y=i.vertexcolor||i.facecolor||i.color;c=a.isArrayOrTypedArray(y)?y[o]||y[0]:y}f.attr(\\\"d\\\",t[0]),c?f.call(l.fill,c):f.call((function(t){if(t.size()){var n=\\\"legendfill-\\\"+i.uid;s.gradient(t,e,n,d(v,\\\"radial\\\"===r),p,\\\"fill\\\")}}))}))})).each((function(t){var e=t[0].trace,r=\\\"waterfall\\\"===e.type;if(t[0]._distinct&&r){var i=t[0].trace[t[0].dir].marker;return t[0].mc=i.color,t[0].mlw=i.line.width,t[0].mlc=i.line.color,T(t,this,\\\"waterfall\\\")}var a=[];e.visible&&r&&(a=t[0].hasTotals?[[\\\"increasing\\\",\\\"M-6,-6V6H0Z\\\"],[\\\"totals\\\",\\\"M6,6H0L-6,-6H-0Z\\\"],[\\\"decreasing\\\",\\\"M6,6V-6H0Z\\\"]]:[[\\\"increasing\\\",\\\"M-6,-6V6H6Z\\\"],[\\\"decreasing\\\",\\\"M6,6V-6H-6Z\\\"]]);var o=n.select(this).select(\\\"g.legendpoints\\\").selectAll(\\\"path.legendwaterfall\\\").data(a);o.enter().append(\\\"path\\\").classed(\\\"legendwaterfall\\\",!0).attr(\\\"transform\\\",_).style(\\\"stroke-miterlimit\\\",1),o.exit().remove(),o.each((function(t){var r=n.select(this),i=e[t[0]].marker,a=w(void 0,i.line,5,2);r.attr(\\\"d\\\",t[1]).style(\\\"stroke-width\\\",a+\\\"px\\\").call(l.fill,i.color),a&&r.call(l.stroke,i.line.color)}))})).each((function(t){T(t,this,\\\"funnel\\\")})).each((function(t){T(t,this)})).each((function(t){var r=t[0].trace,o=n.select(this).select(\\\"g.legendpoints\\\").selectAll(\\\"path.legendbox\\\").data(r.visible&&i.traceIs(r,\\\"box-violin\\\")?[t]:[]);o.enter().append(\\\"path\\\").classed(\\\"legendbox\\\",!0).attr(\\\"d\\\",\\\"M6,6H-6V-6H6Z\\\").attr(\\\"transform\\\",_),o.exit().remove(),o.each((function(){var t=n.select(this);if(\\\"all\\\"!==r.boxpoints&&\\\"all\\\"!==r.points||0!==l.opacity(r.fillcolor)||0!==l.opacity((r.line||{}).color)){var i=w(void 0,r.line,5,2);t.style(\\\"stroke-width\\\",i+\\\"px\\\").call(l.fill,r.fillcolor),i&&l.stroke(t,r.line.color)}else{var u=a.minExtend(r,{marker:{size:m?12:a.constrain(r.marker.size,2,16),sizeref:1,sizemin:1,sizemode:\\\"diameter\\\"}});o.call(s.pointStyle,u,e)}}))})).each((function(t){k(t,this,\\\"funnelarea\\\")})).each((function(t){k(t,this,\\\"pie\\\")})).each((function(t){var r,i,o=v(t),l=o.showFill,f=o.showLine,h=o.showGradientLine,p=o.showGradientFill,g=o.anyFill,y=o.anyLine,m=t[0],b=m.trace,_=u(b),T=_.colorscale,k=_.reversescale,A=c.hasMarkers(b)||!g?\\\"M5,0\\\":y?\\\"M5,-2\\\":\\\"M5,-3\\\",M=n.select(this),S=M.select(\\\".legendfill\\\").selectAll(\\\"path\\\").data(l||p?[t]:[]);if(S.enter().append(\\\"path\\\").classed(\\\"js-fill\\\",!0),S.exit().remove(),S.attr(\\\"d\\\",A+\\\"h\\\"+x+\\\"v6h-\\\"+x+\\\"z\\\").call((function(t){if(t.size())if(l)s.fillGroupStyle(t,e);else{var r=\\\"legendfill-\\\"+b.uid;s.gradient(t,e,r,d(k),T,\\\"fill\\\")}})),f||h){var E=w(void 0,b.line,10,5);i=a.minExtend(b,{line:{width:E}}),r=[a.minExtend(m,{trace:i})]}var L=M.select(\\\".legendlines\\\").selectAll(\\\"path\\\").data(f||h?[r]:[]);L.enter().append(\\\"path\\\").classed(\\\"js-line\\\",!0),L.exit().remove(),L.attr(\\\"d\\\",A+(h?\\\"l\\\"+x+\\\",0.0001\\\":\\\"h\\\"+x)).call(f?s.lineGroupStyle:function(t){if(t.size()){var r=\\\"legendline-\\\"+b.uid;s.lineGroupStyle(t),s.gradient(t,e,r,d(k),T,\\\"stroke\\\")}})})).each((function(t){var r,i,o=v(t),l=o.anyFill,u=o.anyLine,f=o.showLine,h=o.showMarker,p=t[0],d=p.trace,g=!h&&!u&&!l&&c.hasText(d);function y(t,e,r,n){var i=a.nestedProperty(d,t).get(),o=a.isArrayOrTypedArray(i)&&e?e(i):i;if(m&&o&&void 0!==n&&(o=n),r){if(o<r[0])return r[0];if(o>r[1])return r[1]}return o}function x(t){return p._distinct&&p.index&&t[p.index]?t[p.index]:t[0]}if(h||g||f){var b={},w={};if(h){b.mc=y(\\\"marker.color\\\",x),b.mx=y(\\\"marker.symbol\\\",x),b.mo=y(\\\"marker.opacity\\\",a.mean,[.2,1]),b.mlc=y(\\\"marker.line.color\\\",x),b.mlw=y(\\\"marker.line.width\\\",a.mean,[0,5],2),w.marker={sizeref:1,sizemin:1,sizemode:\\\"diameter\\\"};var T=y(\\\"marker.size\\\",a.mean,[2,16],12);b.ms=T,w.marker.size=T}f&&(w.line={width:y(\\\"line.width\\\",x,[0,10],5)}),g&&(b.tx=\\\"Aa\\\",b.tp=y(\\\"textposition\\\",x),b.ts=10,b.tc=y(\\\"textfont.color\\\",x),b.tf=y(\\\"textfont.family\\\",x)),r=[a.minExtend(p,b)],(i=a.minExtend(d,w)).selectedpoints=null,i.texttemplate=null}var k=n.select(this).select(\\\"g.legendpoints\\\"),A=k.selectAll(\\\"path.scatterpts\\\").data(h?r:[]);A.enter().insert(\\\"path\\\",\\\":first-child\\\").classed(\\\"scatterpts\\\",!0).attr(\\\"transform\\\",_),A.exit().remove(),A.call(s.pointStyle,i,e),h&&(r[0].mrc=3);var M=k.selectAll(\\\"g.pointtext\\\").data(g?r:[]);M.enter().append(\\\"g\\\").classed(\\\"pointtext\\\",!0).append(\\\"text\\\").attr(\\\"transform\\\",_),M.exit().remove(),M.selectAll(\\\"text\\\").call(s.textPointStyle,i,e)})).each((function(t){var e=t[0].trace,r=n.select(this).select(\\\"g.legendpoints\\\").selectAll(\\\"path.legendcandle\\\").data(e.visible&&\\\"candlestick\\\"===e.type?[t,t]:[]);r.enter().append(\\\"path\\\").classed(\\\"legendcandle\\\",!0).attr(\\\"d\\\",(function(t,e){return e?\\\"M-15,0H-8M-8,6V-6H8Z\\\":\\\"M15,0H8M8,-6V6H-8Z\\\"})).attr(\\\"transform\\\",_).style(\\\"stroke-miterlimit\\\",1),r.exit().remove(),r.each((function(t,r){var i=n.select(this),a=e[r?\\\"increasing\\\":\\\"decreasing\\\"],o=w(void 0,a.line,5,2);i.style(\\\"stroke-width\\\",o+\\\"px\\\").call(l.fill,a.fillcolor),o&&l.stroke(i,a.line.color)}))})).each((function(t){var e=t[0].trace,r=n.select(this).select(\\\"g.legendpoints\\\").selectAll(\\\"path.legendohlc\\\").data(e.visible&&\\\"ohlc\\\"===e.type?[t,t]:[]);r.enter().append(\\\"path\\\").classed(\\\"legendohlc\\\",!0).attr(\\\"d\\\",(function(t,e){return e?\\\"M-15,0H0M-8,-6V0\\\":\\\"M15,0H0M8,6V0\\\"})).attr(\\\"transform\\\",_).style(\\\"stroke-miterlimit\\\",1),r.exit().remove(),r.each((function(t,r){var i=n.select(this),a=e[r?\\\"increasing\\\":\\\"decreasing\\\"],o=w(void 0,a.line,5,2);i.style(\\\"fill\\\",\\\"none\\\").call(s.dashLine,a.line.dash,o),o&&l.stroke(i,a.line.color)}))}))}},42068:function(t,e,r){\\\"use strict\\\";r(93348),t.exports={editType:\\\"modebar\\\",orientation:{valType:\\\"enumerated\\\",values:[\\\"v\\\",\\\"h\\\"],dflt:\\\"h\\\",editType:\\\"modebar\\\"},bgcolor:{valType:\\\"color\\\",editType:\\\"modebar\\\"},color:{valType:\\\"color\\\",editType:\\\"modebar\\\"},activecolor:{valType:\\\"color\\\",editType:\\\"modebar\\\"},uirevision:{valType:\\\"any\\\",editType:\\\"none\\\"},add:{valType:\\\"string\\\",arrayOk:!0,dflt:\\\"\\\",editType:\\\"modebar\\\"},remove:{valType:\\\"string\\\",arrayOk:!0,dflt:\\\"\\\",editType:\\\"modebar\\\"}}},26023:function(t,e,r){\\\"use strict\\\";var n=r(73972),i=r(74875),a=r(41675),o=r(24255),s=r(34031).eraseActiveShape,l=r(71828),u=l._,c=t.exports={};function f(t,e){var r,i,o=e.currentTarget,s=o.getAttribute(\\\"data-attr\\\"),l=o.getAttribute(\\\"data-val\\\")||!0,u=t._fullLayout,c={},f=a.list(t,null,!0),h=u._cartesianSpikesEnabled;if(\\\"zoom\\\"===s){var p,d=\\\"in\\\"===l?.5:2,v=(1+d)/2,g=(1-d)/2;for(i=0;i<f.length;i++)if(!(r=f[i]).fixedrange)if(p=r._name,\\\"auto\\\"===l)c[p+\\\".autorange\\\"]=!0;else if(\\\"reset\\\"===l){if(void 0===r._rangeInitial)c[p+\\\".autorange\\\"]=!0;else{var y=r._rangeInitial.slice();c[p+\\\".range[0]\\\"]=y[0],c[p+\\\".range[1]\\\"]=y[1]}void 0!==r._showSpikeInitial&&(c[p+\\\".showspikes\\\"]=r._showSpikeInitial,\\\"on\\\"!==h||r._showSpikeInitial||(h=\\\"off\\\"))}else{var m=[r.r2l(r.range[0]),r.r2l(r.range[1])],x=[v*m[0]+g*m[1],v*m[1]+g*m[0]];c[p+\\\".range[0]\\\"]=r.l2r(x[0]),c[p+\\\".range[1]\\\"]=r.l2r(x[1])}}else\\\"hovermode\\\"!==s||\\\"x\\\"!==l&&\\\"y\\\"!==l||(l=u._isHoriz?\\\"y\\\":\\\"x\\\",o.setAttribute(\\\"data-val\\\",l)),c[s]=l;u._cartesianSpikesEnabled=h,n.call(\\\"_guiRelayout\\\",t,c)}function h(t,e){for(var r=e.currentTarget,i=r.getAttribute(\\\"data-attr\\\"),a=r.getAttribute(\\\"data-val\\\")||!0,o=t._fullLayout._subplots.gl3d||[],s={},l=i.split(\\\".\\\"),u=0;u<o.length;u++)s[o[u]+\\\".\\\"+l[1]]=a;var c=\\\"pan\\\"===a?a:\\\"zoom\\\";s.dragmode=c,n.call(\\\"_guiRelayout\\\",t,s)}function p(t,e){for(var r=e.currentTarget.getAttribute(\\\"data-attr\\\"),i=\\\"resetLastSave\\\"===r,a=\\\"resetDefault\\\"===r,o=t._fullLayout,s=o._subplots.gl3d||[],l={},u=0;u<s.length;u++){var c,f=s[u],h=f+\\\".camera\\\",p=f+\\\".aspectratio\\\",d=f+\\\".aspectmode\\\",v=o[f]._scene;i?(l[h+\\\".up\\\"]=v.viewInitial.up,l[h+\\\".eye\\\"]=v.viewInitial.eye,l[h+\\\".center\\\"]=v.viewInitial.center,c=!0):a&&(l[h+\\\".up\\\"]=null,l[h+\\\".eye\\\"]=null,l[h+\\\".center\\\"]=null,c=!0),c&&(l[p+\\\".x\\\"]=v.viewInitial.aspectratio.x,l[p+\\\".y\\\"]=v.viewInitial.aspectratio.y,l[p+\\\".z\\\"]=v.viewInitial.aspectratio.z,l[d]=v.viewInitial.aspectmode)}n.call(\\\"_guiRelayout\\\",t,l)}function d(t,e){var r=e.currentTarget,n=r._previousVal,i=t._fullLayout,a=i._subplots.gl3d||[],o=[\\\"xaxis\\\",\\\"yaxis\\\",\\\"zaxis\\\"],s={},l={};if(n)l=n,r._previousVal=null;else{for(var u=0;u<a.length;u++){var c=a[u],f=i[c],h=c+\\\".hovermode\\\";s[h]=f.hovermode,l[h]=!1;for(var p=0;p<3;p++){var d=o[p],v=c+\\\".\\\"+d+\\\".showspikes\\\";l[v]=!1,s[v]=f[d].showspikes}}r._previousVal=s}return l}function v(t,e){for(var r=e.currentTarget,i=r.getAttribute(\\\"data-attr\\\"),a=r.getAttribute(\\\"data-val\\\")||!0,o=t._fullLayout,s=o._subplots.geo||[],l=0;l<s.length;l++){var u=s[l],c=o[u];if(\\\"zoom\\\"===i){var f=c.projection.scale,h=\\\"in\\\"===a?2*f:.5*f;n.call(\\\"_guiRelayout\\\",t,u+\\\".projection.scale\\\",h)}}\\\"reset\\\"===i&&x(t,\\\"geo\\\")}function g(t){var e=t._fullLayout;return!e.hovermode&&(e._has(\\\"cartesian\\\")?e._isHoriz?\\\"y\\\":\\\"x\\\":\\\"closest\\\")}function y(t){var e=g(t);n.call(\\\"_guiRelayout\\\",t,\\\"hovermode\\\",e)}function m(t,e){for(var r=e.currentTarget.getAttribute(\\\"data-val\\\"),i=t._fullLayout,a=i._subplots.mapbox||[],o={},s=0;s<a.length;s++){var l=a[s],u=i[l].zoom,c=\\\"in\\\"===r?1.05*u:u/1.05;o[l+\\\".zoom\\\"]=c}n.call(\\\"_guiRelayout\\\",t,o)}function x(t,e){for(var r=t._fullLayout,i=r._subplots[e]||[],a={},o=0;o<i.length;o++)for(var s=i[o],l=r[s]._subplot.viewInitial,u=Object.keys(l),c=0;c<u.length;c++){var f=u[c];a[s+\\\".\\\"+f]=l[f]}n.call(\\\"_guiRelayout\\\",t,a)}c.toImage={name:\\\"toImage\\\",title:function(t){var e=(t._context.toImageButtonOptions||{}).format||\\\"png\\\";return u(t,\\\"png\\\"===e?\\\"Download plot as a png\\\":\\\"Download plot\\\")},icon:o.camera,click:function(t){var e=t._context.toImageButtonOptions,r={format:e.format||\\\"png\\\"};l.notifier(u(t,\\\"Taking snapshot - this may take a few seconds\\\"),\\\"long\\\"),\\\"svg\\\"!==r.format&&l.isIE()&&(l.notifier(u(t,\\\"IE only supports svg.  Changing format to svg.\\\"),\\\"long\\\"),r.format=\\\"svg\\\"),[\\\"filename\\\",\\\"width\\\",\\\"height\\\",\\\"scale\\\"].forEach((function(t){t in e&&(r[t]=e[t])})),n.call(\\\"downloadImage\\\",t,r).then((function(e){l.notifier(u(t,\\\"Snapshot succeeded\\\")+\\\" - \\\"+e,\\\"long\\\")})).catch((function(){l.notifier(u(t,\\\"Sorry, there was a problem downloading your snapshot!\\\"),\\\"long\\\")}))}},c.sendDataToCloud={name:\\\"sendDataToCloud\\\",title:function(t){return u(t,\\\"Edit in Chart Studio\\\")},icon:o.disk,click:function(t){i.sendDataToCloud(t)}},c.editInChartStudio={name:\\\"editInChartStudio\\\",title:function(t){return u(t,\\\"Edit in Chart Studio\\\")},icon:o.pencil,click:function(t){i.sendDataToCloud(t)}},c.zoom2d={name:\\\"zoom2d\\\",_cat:\\\"zoom\\\",title:function(t){return u(t,\\\"Zoom\\\")},attr:\\\"dragmode\\\",val:\\\"zoom\\\",icon:o.zoombox,click:f},c.pan2d={name:\\\"pan2d\\\",_cat:\\\"pan\\\",title:function(t){return u(t,\\\"Pan\\\")},attr:\\\"dragmode\\\",val:\\\"pan\\\",icon:o.pan,click:f},c.select2d={name:\\\"select2d\\\",_cat:\\\"select\\\",title:function(t){return u(t,\\\"Box Select\\\")},attr:\\\"dragmode\\\",val:\\\"select\\\",icon:o.selectbox,click:f},c.lasso2d={name:\\\"lasso2d\\\",_cat:\\\"lasso\\\",title:function(t){return u(t,\\\"Lasso Select\\\")},attr:\\\"dragmode\\\",val:\\\"lasso\\\",icon:o.lasso,click:f},c.drawclosedpath={name:\\\"drawclosedpath\\\",title:function(t){return u(t,\\\"Draw closed freeform\\\")},attr:\\\"dragmode\\\",val:\\\"drawclosedpath\\\",icon:o.drawclosedpath,click:f},c.drawopenpath={name:\\\"drawopenpath\\\",title:function(t){return u(t,\\\"Draw open freeform\\\")},attr:\\\"dragmode\\\",val:\\\"drawopenpath\\\",icon:o.drawopenpath,click:f},c.drawline={name:\\\"drawline\\\",title:function(t){return u(t,\\\"Draw line\\\")},attr:\\\"dragmode\\\",val:\\\"drawline\\\",icon:o.drawline,click:f},c.drawrect={name:\\\"drawrect\\\",title:function(t){return u(t,\\\"Draw rectangle\\\")},attr:\\\"dragmode\\\",val:\\\"drawrect\\\",icon:o.drawrect,click:f},c.drawcircle={name:\\\"drawcircle\\\",title:function(t){return u(t,\\\"Draw circle\\\")},attr:\\\"dragmode\\\",val:\\\"drawcircle\\\",icon:o.drawcircle,click:f},c.eraseshape={name:\\\"eraseshape\\\",title:function(t){return u(t,\\\"Erase active shape\\\")},icon:o.eraseshape,click:s},c.zoomIn2d={name:\\\"zoomIn2d\\\",_cat:\\\"zoomin\\\",title:function(t){return u(t,\\\"Zoom in\\\")},attr:\\\"zoom\\\",val:\\\"in\\\",icon:o.zoom_plus,click:f},c.zoomOut2d={name:\\\"zoomOut2d\\\",_cat:\\\"zoomout\\\",title:function(t){return u(t,\\\"Zoom out\\\")},attr:\\\"zoom\\\",val:\\\"out\\\",icon:o.zoom_minus,click:f},c.autoScale2d={name:\\\"autoScale2d\\\",_cat:\\\"autoscale\\\",title:function(t){return u(t,\\\"Autoscale\\\")},attr:\\\"zoom\\\",val:\\\"auto\\\",icon:o.autoscale,click:f},c.resetScale2d={name:\\\"resetScale2d\\\",_cat:\\\"resetscale\\\",title:function(t){return u(t,\\\"Reset axes\\\")},attr:\\\"zoom\\\",val:\\\"reset\\\",icon:o.home,click:f},c.hoverClosestCartesian={name:\\\"hoverClosestCartesian\\\",_cat:\\\"hoverclosest\\\",title:function(t){return u(t,\\\"Show closest data on hover\\\")},attr:\\\"hovermode\\\",val:\\\"closest\\\",icon:o.tooltip_basic,gravity:\\\"ne\\\",click:f},c.hoverCompareCartesian={name:\\\"hoverCompareCartesian\\\",_cat:\\\"hoverCompare\\\",title:function(t){return u(t,\\\"Compare data on hover\\\")},attr:\\\"hovermode\\\",val:function(t){return t._fullLayout._isHoriz?\\\"y\\\":\\\"x\\\"},icon:o.tooltip_compare,gravity:\\\"ne\\\",click:f},c.zoom3d={name:\\\"zoom3d\\\",_cat:\\\"zoom\\\",title:function(t){return u(t,\\\"Zoom\\\")},attr:\\\"scene.dragmode\\\",val:\\\"zoom\\\",icon:o.zoombox,click:h},c.pan3d={name:\\\"pan3d\\\",_cat:\\\"pan\\\",title:function(t){return u(t,\\\"Pan\\\")},attr:\\\"scene.dragmode\\\",val:\\\"pan\\\",icon:o.pan,click:h},c.orbitRotation={name:\\\"orbitRotation\\\",title:function(t){return u(t,\\\"Orbital rotation\\\")},attr:\\\"scene.dragmode\\\",val:\\\"orbit\\\",icon:o[\\\"3d_rotate\\\"],click:h},c.tableRotation={name:\\\"tableRotation\\\",title:function(t){return u(t,\\\"Turntable rotation\\\")},attr:\\\"scene.dragmode\\\",val:\\\"turntable\\\",icon:o[\\\"z-axis\\\"],click:h},c.resetCameraDefault3d={name:\\\"resetCameraDefault3d\\\",_cat:\\\"resetCameraDefault\\\",title:function(t){return u(t,\\\"Reset camera to default\\\")},attr:\\\"resetDefault\\\",icon:o.home,click:p},c.resetCameraLastSave3d={name:\\\"resetCameraLastSave3d\\\",_cat:\\\"resetCameraLastSave\\\",title:function(t){return u(t,\\\"Reset camera to last save\\\")},attr:\\\"resetLastSave\\\",icon:o.movie,click:p},c.hoverClosest3d={name:\\\"hoverClosest3d\\\",_cat:\\\"hoverclosest\\\",title:function(t){return u(t,\\\"Toggle show closest data on hover\\\")},attr:\\\"hovermode\\\",val:null,toggle:!0,icon:o.tooltip_basic,gravity:\\\"ne\\\",click:function(t,e){var r=d(t,e);n.call(\\\"_guiRelayout\\\",t,r)}},c.zoomInGeo={name:\\\"zoomInGeo\\\",_cat:\\\"zoomin\\\",title:function(t){return u(t,\\\"Zoom in\\\")},attr:\\\"zoom\\\",val:\\\"in\\\",icon:o.zoom_plus,click:v},c.zoomOutGeo={name:\\\"zoomOutGeo\\\",_cat:\\\"zoomout\\\",title:function(t){return u(t,\\\"Zoom out\\\")},attr:\\\"zoom\\\",val:\\\"out\\\",icon:o.zoom_minus,click:v},c.resetGeo={name:\\\"resetGeo\\\",_cat:\\\"reset\\\",title:function(t){return u(t,\\\"Reset\\\")},attr:\\\"reset\\\",val:null,icon:o.autoscale,click:v},c.hoverClosestGeo={name:\\\"hoverClosestGeo\\\",_cat:\\\"hoverclosest\\\",title:function(t){return u(t,\\\"Toggle show closest data on hover\\\")},attr:\\\"hovermode\\\",val:null,toggle:!0,icon:o.tooltip_basic,gravity:\\\"ne\\\",click:y},c.hoverClosestGl2d={name:\\\"hoverClosestGl2d\\\",_cat:\\\"hoverclosest\\\",title:function(t){return u(t,\\\"Toggle show closest data on hover\\\")},attr:\\\"hovermode\\\",val:null,toggle:!0,icon:o.tooltip_basic,gravity:\\\"ne\\\",click:y},c.hoverClosestPie={name:\\\"hoverClosestPie\\\",_cat:\\\"hoverclosest\\\",title:function(t){return u(t,\\\"Toggle show closest data on hover\\\")},attr:\\\"hovermode\\\",val:\\\"closest\\\",icon:o.tooltip_basic,gravity:\\\"ne\\\",click:y},c.resetViewSankey={name:\\\"resetSankeyGroup\\\",title:function(t){return u(t,\\\"Reset view\\\")},icon:o.home,click:function(t){for(var e={\\\"node.groups\\\":[],\\\"node.x\\\":[],\\\"node.y\\\":[]},r=0;r<t._fullData.length;r++){var i=t._fullData[r]._viewInitial;e[\\\"node.groups\\\"].push(i.node.groups.slice()),e[\\\"node.x\\\"].push(i.node.x.slice()),e[\\\"node.y\\\"].push(i.node.y.slice())}n.call(\\\"restyle\\\",t,e)}},c.toggleHover={name:\\\"toggleHover\\\",title:function(t){return u(t,\\\"Toggle show closest data on hover\\\")},attr:\\\"hovermode\\\",val:null,toggle:!0,icon:o.tooltip_basic,gravity:\\\"ne\\\",click:function(t,e){var r=d(t,e);r.hovermode=g(t),n.call(\\\"_guiRelayout\\\",t,r)}},c.resetViews={name:\\\"resetViews\\\",title:function(t){return u(t,\\\"Reset views\\\")},icon:o.home,click:function(t,e){var r=e.currentTarget;r.setAttribute(\\\"data-attr\\\",\\\"zoom\\\"),r.setAttribute(\\\"data-val\\\",\\\"reset\\\"),f(t,e),r.setAttribute(\\\"data-attr\\\",\\\"resetLastSave\\\"),p(t,e),x(t,\\\"geo\\\"),x(t,\\\"mapbox\\\")}},c.toggleSpikelines={name:\\\"toggleSpikelines\\\",title:function(t){return u(t,\\\"Toggle Spike Lines\\\")},icon:o.spikeline,attr:\\\"_cartesianSpikesEnabled\\\",val:\\\"on\\\",click:function(t){var e=t._fullLayout,r=e._cartesianSpikesEnabled;e._cartesianSpikesEnabled=\\\"on\\\"===r?\\\"off\\\":\\\"on\\\",n.call(\\\"_guiRelayout\\\",t,function(t){for(var e=\\\"on\\\"===t._fullLayout._cartesianSpikesEnabled,r=a.list(t,null,!0),n={},i=0;i<r.length;i++){var o=r[i];n[o._name+\\\".showspikes\\\"]=!!e||o._showSpikeInitial}return n}(t))}},c.resetViewMapbox={name:\\\"resetViewMapbox\\\",_cat:\\\"resetView\\\",title:function(t){return u(t,\\\"Reset view\\\")},attr:\\\"reset\\\",icon:o.home,click:function(t){x(t,\\\"mapbox\\\")}},c.zoomInMapbox={name:\\\"zoomInMapbox\\\",_cat:\\\"zoomin\\\",title:function(t){return u(t,\\\"Zoom in\\\")},attr:\\\"zoom\\\",val:\\\"in\\\",icon:o.zoom_plus,click:m},c.zoomOutMapbox={name:\\\"zoomOutMapbox\\\",_cat:\\\"zoomout\\\",title:function(t){return u(t,\\\"Zoom out\\\")},attr:\\\"zoom\\\",val:\\\"out\\\",icon:o.zoom_minus,click:m}},93348:function(t,e,r){\\\"use strict\\\";var n=r(26023),i=Object.keys(n),a=[\\\"drawline\\\",\\\"drawopenpath\\\",\\\"drawclosedpath\\\",\\\"drawcircle\\\",\\\"drawrect\\\",\\\"eraseshape\\\"],o=[\\\"v1hovermode\\\",\\\"hoverclosest\\\",\\\"hovercompare\\\",\\\"togglehover\\\",\\\"togglespikelines\\\"].concat(a),s=[];i.forEach((function(t){!function(t){if(-1===o.indexOf(t._cat||t.name)){var e=t.name,r=(t._cat||t.name).toLowerCase();-1===s.indexOf(e)&&s.push(e),-1===s.indexOf(r)&&s.push(r)}}(n[t])})),s.sort(),t.exports={DRAW_MODES:a,backButtons:o,foreButtons:s}},35750:function(t,e,r){\\\"use strict\\\";var n=r(71828),i=r(7901),a=r(44467),o=r(42068);t.exports=function(t,e){var r=t.modebar||{},s=a.newContainer(e,\\\"modebar\\\");function l(t,e){return n.coerce(r,s,o,t,e)}l(\\\"orientation\\\"),l(\\\"bgcolor\\\",i.addOpacity(e.paper_bgcolor,.5));var u=i.contrast(i.rgb(e.modebar.bgcolor));l(\\\"color\\\",i.addOpacity(u,.3)),l(\\\"activecolor\\\",i.addOpacity(u,.7)),l(\\\"uirevision\\\",e.uirevision),l(\\\"add\\\"),l(\\\"remove\\\")}},64168:function(t,e,r){\\\"use strict\\\";t.exports={moduleType:\\\"component\\\",name:\\\"modebar\\\",layoutAttributes:r(42068),supplyLayoutDefaults:r(35750),manage:r(14192)}},14192:function(t,e,r){\\\"use strict\\\";var n=r(41675),i=r(34098),a=r(73972),o=r(23469).isUnifiedHover,s=r(37676),l=r(26023),u=r(93348).DRAW_MODES,c=r(71828).extendDeep;t.exports=function(t){var e=t._fullLayout,r=t._context,f=e._modeBar;if(r.displayModeBar||r.watermark){if(!Array.isArray(r.modeBarButtonsToRemove))throw new Error([\\\"*modeBarButtonsToRemove* configuration options\\\",\\\"must be an array.\\\"].join(\\\" \\\"));if(!Array.isArray(r.modeBarButtonsToAdd))throw new Error([\\\"*modeBarButtonsToAdd* configuration options\\\",\\\"must be an array.\\\"].join(\\\" \\\"));var h,p=r.modeBarButtons;h=Array.isArray(p)&&p.length?function(t){for(var e=c([],t),r=0;r<e.length;r++)for(var n=e[r],i=0;i<n.length;i++){var a=n[i];if(\\\"string\\\"==typeof a){if(void 0===l[a])throw new Error([\\\"*modeBarButtons* configuration options\\\",\\\"invalid button name\\\"].join(\\\" \\\"));e[r][i]=l[a]}}return e}(p):!r.displayModeBar&&r.watermark?[]:function(t){var e=t._fullLayout,r=t._fullData,s=t._context;function c(t,e){if(\\\"string\\\"==typeof e){if(e.toLowerCase()===t.toLowerCase())return!0}else{var r=e.name,n=e._cat||e.name;if(r===t||n===t.toLowerCase())return!0}return!1}var f=e.modebar.add;\\\"string\\\"==typeof f&&(f=[f]);var h=e.modebar.remove;\\\"string\\\"==typeof h&&(h=[h]);var p=s.modeBarButtonsToAdd.concat(f.filter((function(t){for(var e=0;e<s.modeBarButtonsToRemove.length;e++)if(c(t,s.modeBarButtonsToRemove[e]))return!1;return!0}))),d=s.modeBarButtonsToRemove.concat(h.filter((function(t){for(var e=0;e<s.modeBarButtonsToAdd.length;e++)if(c(t,s.modeBarButtonsToAdd[e]))return!1;return!0}))),v=e._has(\\\"cartesian\\\"),g=e._has(\\\"gl3d\\\"),y=e._has(\\\"geo\\\"),m=e._has(\\\"pie\\\"),x=e._has(\\\"funnelarea\\\"),b=e._has(\\\"gl2d\\\"),_=e._has(\\\"ternary\\\"),w=e._has(\\\"mapbox\\\"),T=e._has(\\\"polar\\\"),k=e._has(\\\"smith\\\"),A=e._has(\\\"sankey\\\"),M=function(t){for(var e=n.list({_fullLayout:t},null,!0),r=0;r<e.length;r++)if(!e[r].fixedrange)return!1;return!0}(e),S=o(e.hovermode),E=[];function L(t){if(t.length){for(var e=[],r=0;r<t.length;r++){for(var n=t[r],i=l[n],a=i.name.toLowerCase(),o=(i._cat||i.name).toLowerCase(),s=!1,u=0;u<d.length;u++){var c=d[u].toLowerCase();if(c===a||c===o){s=!0;break}}s||e.push(l[n])}E.push(e)}}var C=[\\\"toImage\\\"];s.showEditInChartStudio?C.push(\\\"editInChartStudio\\\"):s.showSendToCloud&&C.push(\\\"sendDataToCloud\\\"),L(C);var P=[],O=[],I=[],D=[];(v||b||m||x||_)+y+g+w+T+k>1?(O=[\\\"toggleHover\\\"],I=[\\\"resetViews\\\"]):y?(P=[\\\"zoomInGeo\\\",\\\"zoomOutGeo\\\"],O=[\\\"hoverClosestGeo\\\"],I=[\\\"resetGeo\\\"]):g?(O=[\\\"hoverClosest3d\\\"],I=[\\\"resetCameraDefault3d\\\",\\\"resetCameraLastSave3d\\\"]):w?(P=[\\\"zoomInMapbox\\\",\\\"zoomOutMapbox\\\"],O=[\\\"toggleHover\\\"],I=[\\\"resetViewMapbox\\\"]):b?O=[\\\"hoverClosestGl2d\\\"]:m?O=[\\\"hoverClosestPie\\\"]:A?(O=[\\\"hoverClosestCartesian\\\",\\\"hoverCompareCartesian\\\"],I=[\\\"resetViewSankey\\\"]):O=[\\\"toggleHover\\\"],v&&(O=[\\\"toggleSpikelines\\\",\\\"hoverClosestCartesian\\\",\\\"hoverCompareCartesian\\\"]),(function(t){for(var e=0;e<t.length;e++)if(!a.traceIs(t[e],\\\"noHover\\\"))return!1;return!0}(r)||S)&&(O=[]),!v&&!b||M||(P=[\\\"zoomIn2d\\\",\\\"zoomOut2d\\\",\\\"autoScale2d\\\"],\\\"resetViews\\\"!==I[0]&&(I=[\\\"resetScale2d\\\"])),g?D=[\\\"zoom3d\\\",\\\"pan3d\\\",\\\"orbitRotation\\\",\\\"tableRotation\\\"]:(v||b)&&!M||_?D=[\\\"zoom2d\\\",\\\"pan2d\\\"]:w||y?D=[\\\"pan2d\\\"]:T&&(D=[\\\"zoom2d\\\"]),function(t){for(var e=!1,r=0;r<t.length&&!e;r++){var n=t[r];n._module&&n._module.selectPoints&&(a.traceIs(n,\\\"scatter-like\\\")?(i.hasMarkers(n)||i.hasText(n))&&(e=!0):a.traceIs(n,\\\"box-violin\\\")&&\\\"all\\\"!==n.boxpoints&&\\\"all\\\"!==n.points||(e=!0))}return e}(r)&&D.push(\\\"select2d\\\",\\\"lasso2d\\\");var z=[],R=function(t){-1===z.indexOf(t)&&-1!==O.indexOf(t)&&z.push(t)};if(Array.isArray(p)){for(var F=[],B=0;B<p.length;B++){var N=p[B];\\\"string\\\"==typeof N?(N=N.toLowerCase(),-1!==u.indexOf(N)?(e._has(\\\"mapbox\\\")||e._has(\\\"cartesian\\\"))&&D.push(N):\\\"togglespikelines\\\"===N?R(\\\"toggleSpikelines\\\"):\\\"togglehover\\\"===N?R(\\\"toggleHover\\\"):\\\"hovercompare\\\"===N?R(\\\"hoverCompareCartesian\\\"):\\\"hoverclosest\\\"===N?(R(\\\"hoverClosestCartesian\\\"),R(\\\"hoverClosestGeo\\\"),R(\\\"hoverClosest3d\\\"),R(\\\"hoverClosestGl2d\\\"),R(\\\"hoverClosestPie\\\")):\\\"v1hovermode\\\"===N&&(R(\\\"toggleHover\\\"),R(\\\"hoverClosestCartesian\\\"),R(\\\"hoverCompareCartesian\\\"),R(\\\"hoverClosestGeo\\\"),R(\\\"hoverClosest3d\\\"),R(\\\"hoverClosestGl2d\\\"),R(\\\"hoverClosestPie\\\"))):F.push(N)}p=F}return L(D),L(P.concat(I)),L(z),function(t,e){if(e.length)if(Array.isArray(e[0]))for(var r=0;r<e.length;r++)t.push(e[r]);else t.push(e);return t}(E,p)}(t),f?f.update(t,h):e._modeBar=s(t,h)}else f&&(f.destroy(),delete e._modeBar)}},37676:function(t,e,r){\\\"use strict\\\";var n=r(39898),i=r(92770),a=r(71828),o=r(24255),s=r(11506).version,l=new DOMParser;function u(t){this.container=t.container,this.element=document.createElement(\\\"div\\\"),this.update(t.graphInfo,t.buttons),this.container.appendChild(this.element)}var c=u.prototype;c.update=function(t,e){this.graphInfo=t;var r=this.graphInfo._context,n=this.graphInfo._fullLayout,i=\\\"modebar-\\\"+n._uid;this.element.setAttribute(\\\"id\\\",i),this._uid=i,this.element.className=\\\"modebar\\\",\\\"hover\\\"===r.displayModeBar&&(this.element.className+=\\\" modebar--hover ease-bg\\\"),\\\"v\\\"===n.modebar.orientation&&(this.element.className+=\\\" vertical\\\",e=e.reverse());var o=n.modebar,s=\\\"hover\\\"===r.displayModeBar?\\\".js-plotly-plot .plotly:hover \\\":\\\"\\\";a.deleteRelatedStyleRule(i),a.addRelatedStyleRule(i,s+\\\"#\\\"+i+\\\" .modebar-group\\\",\\\"background-color: \\\"+o.bgcolor),a.addRelatedStyleRule(i,\\\"#\\\"+i+\\\" .modebar-btn .icon path\\\",\\\"fill: \\\"+o.color),a.addRelatedStyleRule(i,\\\"#\\\"+i+\\\" .modebar-btn:hover .icon path\\\",\\\"fill: \\\"+o.activecolor),a.addRelatedStyleRule(i,\\\"#\\\"+i+\\\" .modebar-btn.active .icon path\\\",\\\"fill: \\\"+o.activecolor);var l=!this.hasButtons(e),u=this.hasLogo!==r.displaylogo,c=this.locale!==r.locale;if(this.locale=r.locale,(l||u||c)&&(this.removeAllButtons(),this.updateButtons(e),r.watermark||r.displaylogo)){var f=this.getLogo();r.watermark&&(f.className=f.className+\\\" watermark\\\"),\\\"v\\\"===n.modebar.orientation?this.element.insertBefore(f,this.element.childNodes[0]):this.element.appendChild(f),this.hasLogo=!0}this.updateActiveButton()},c.updateButtons=function(t){var e=this;this.buttons=t,this.buttonElements=[],this.buttonsNames=[],this.buttons.forEach((function(t){var r=e.createGroup();t.forEach((function(t){var n=t.name;if(!n)throw new Error(\\\"must provide button 'name' in button config\\\");if(-1!==e.buttonsNames.indexOf(n))throw new Error(\\\"button name '\\\"+n+\\\"' is taken\\\");e.buttonsNames.push(n);var i=e.createButton(t);e.buttonElements.push(i),r.appendChild(i)})),e.element.appendChild(r)}))},c.createGroup=function(){var t=document.createElement(\\\"div\\\");return t.className=\\\"modebar-group\\\",t},c.createButton=function(t){var e=this,r=document.createElement(\\\"a\\\");r.setAttribute(\\\"rel\\\",\\\"tooltip\\\"),r.className=\\\"modebar-btn\\\";var i=t.title;void 0===i?i=t.name:\\\"function\\\"==typeof i&&(i=i(this.graphInfo)),(i||0===i)&&r.setAttribute(\\\"data-title\\\",i),void 0!==t.attr&&r.setAttribute(\\\"data-attr\\\",t.attr);var a=t.val;if(void 0!==a&&(\\\"function\\\"==typeof a&&(a=a(this.graphInfo)),r.setAttribute(\\\"data-val\\\",a)),\\\"function\\\"!=typeof t.click)throw new Error(\\\"must provide button 'click' function in button config\\\");r.addEventListener(\\\"click\\\",(function(r){t.click(e.graphInfo,r),e.updateActiveButton(r.currentTarget)})),r.setAttribute(\\\"data-toggle\\\",t.toggle||!1),t.toggle&&n.select(r).classed(\\\"active\\\",!0);var s=t.icon;return\\\"function\\\"==typeof s?r.appendChild(s()):r.appendChild(this.createIcon(s||o.question)),r.setAttribute(\\\"data-gravity\\\",t.gravity||\\\"n\\\"),r},c.createIcon=function(t){var e,r=i(t.height)?Number(t.height):t.ascent-t.descent,n=\\\"http://www.w3.org/2000/svg\\\";if(t.path){(e=document.createElementNS(n,\\\"svg\\\")).setAttribute(\\\"viewBox\\\",[0,0,t.width,r].join(\\\" \\\")),e.setAttribute(\\\"class\\\",\\\"icon\\\");var a=document.createElementNS(n,\\\"path\\\");a.setAttribute(\\\"d\\\",t.path),t.transform?a.setAttribute(\\\"transform\\\",t.transform):void 0!==t.ascent&&a.setAttribute(\\\"transform\\\",\\\"matrix(1 0 0 -1 0 \\\"+t.ascent+\\\")\\\"),e.appendChild(a)}return t.svg&&(e=l.parseFromString(t.svg,\\\"application/xml\\\").childNodes[0]),e.setAttribute(\\\"height\\\",\\\"1em\\\"),e.setAttribute(\\\"width\\\",\\\"1em\\\"),e},c.updateActiveButton=function(t){var e=this.graphInfo._fullLayout,r=void 0!==t?t.getAttribute(\\\"data-attr\\\"):null;this.buttonElements.forEach((function(t){var i=t.getAttribute(\\\"data-val\\\")||!0,o=t.getAttribute(\\\"data-attr\\\"),s=\\\"true\\\"===t.getAttribute(\\\"data-toggle\\\"),l=n.select(t);if(s)o===r&&l.classed(\\\"active\\\",!l.classed(\\\"active\\\"));else{var u=null===o?o:a.nestedProperty(e,o).get();l.classed(\\\"active\\\",u===i)}}))},c.hasButtons=function(t){var e=this.buttons;if(!e)return!1;if(t.length!==e.length)return!1;for(var r=0;r<t.length;++r){if(t[r].length!==e[r].length)return!1;for(var n=0;n<t[r].length;n++)if(t[r][n].name!==e[r][n].name)return!1}return!0},c.getLogo=function(){var t=this.createGroup(),e=document.createElement(\\\"a\\\");return e.href=\\\"https://plotly.com/\\\",e.target=\\\"_blank\\\",e.setAttribute(\\\"data-title\\\",a._(this.graphInfo,\\\"Produced with Plotly.js\\\")+\\\" (v\\\"+s+\\\")\\\"),e.className=\\\"modebar-btn plotlyjsicon modebar-btn--logo\\\",e.appendChild(this.createIcon(o.newplotlylogo)),t.appendChild(e),t},c.removeAllButtons=function(){for(;this.element.firstChild;)this.element.removeChild(this.element.firstChild);this.hasLogo=!1},c.destroy=function(){a.removeElement(this.container.querySelector(\\\".modebar\\\")),a.deleteRelatedStyleRule(this._uid)},t.exports=function(t,e){var r=t._fullLayout,i=new u({graphInfo:t,container:r._modebardiv.node(),buttons:e});return r._privateplot&&n.select(i.element).append(\\\"span\\\").classed(\\\"badge-private float--left\\\",!0).text(\\\"PRIVATE\\\"),i}},37113:function(t,e,r){\\\"use strict\\\";var n=r(41940),i=r(22399),a=(0,r(44467).templatedArray)(\\\"button\\\",{visible:{valType:\\\"boolean\\\",dflt:!0,editType:\\\"plot\\\"},step:{valType:\\\"enumerated\\\",values:[\\\"month\\\",\\\"year\\\",\\\"day\\\",\\\"hour\\\",\\\"minute\\\",\\\"second\\\",\\\"all\\\"],dflt:\\\"month\\\",editType:\\\"plot\\\"},stepmode:{valType:\\\"enumerated\\\",values:[\\\"backward\\\",\\\"todate\\\"],dflt:\\\"backward\\\",editType:\\\"plot\\\"},count:{valType:\\\"number\\\",min:0,dflt:1,editType:\\\"plot\\\"},label:{valType:\\\"string\\\",editType:\\\"plot\\\"},editType:\\\"plot\\\"});t.exports={visible:{valType:\\\"boolean\\\",editType:\\\"plot\\\"},buttons:a,x:{valType:\\\"number\\\",min:-2,max:3,editType:\\\"plot\\\"},xanchor:{valType:\\\"enumerated\\\",values:[\\\"auto\\\",\\\"left\\\",\\\"center\\\",\\\"right\\\"],dflt:\\\"left\\\",editType:\\\"plot\\\"},y:{valType:\\\"number\\\",min:-2,max:3,editType:\\\"plot\\\"},yanchor:{valType:\\\"enumerated\\\",values:[\\\"auto\\\",\\\"top\\\",\\\"middle\\\",\\\"bottom\\\"],dflt:\\\"bottom\\\",editType:\\\"plot\\\"},font:n({editType:\\\"plot\\\"}),bgcolor:{valType:\\\"color\\\",dflt:i.lightLine,editType:\\\"plot\\\"},activecolor:{valType:\\\"color\\\",editType:\\\"plot\\\"},bordercolor:{valType:\\\"color\\\",dflt:i.defaultLine,editType:\\\"plot\\\"},borderwidth:{valType:\\\"number\\\",min:0,dflt:0,editType:\\\"plot\\\"},editType:\\\"plot\\\"}},89573:function(t){\\\"use strict\\\";t.exports={yPad:.02,minButtonWidth:30,rx:3,ry:3,lightAmount:25,darkAmount:10}},28674:function(t,e,r){\\\"use strict\\\";var n=r(71828),i=r(7901),a=r(44467),o=r(85501),s=r(37113),l=r(89573);function u(t,e,r,i){var a=i.calendar;function o(r,i){return n.coerce(t,e,s.buttons,r,i)}if(o(\\\"visible\\\")){var l=o(\\\"step\\\");\\\"all\\\"!==l&&(!a||\\\"gregorian\\\"===a||\\\"month\\\"!==l&&\\\"year\\\"!==l?o(\\\"stepmode\\\"):e.stepmode=\\\"backward\\\",o(\\\"count\\\")),o(\\\"label\\\")}}t.exports=function(t,e,r,c,f){var h=t.rangeselector||{},p=a.newContainer(e,\\\"rangeselector\\\");function d(t,e){return n.coerce(h,p,s,t,e)}if(d(\\\"visible\\\",o(h,p,{name:\\\"buttons\\\",handleItemDefaults:u,calendar:f}).length>0)){var v=function(t,e,r){for(var n=r.filter((function(r){return e[r].anchor===t._id})),i=0,a=0;a<n.length;a++){var o=e[n[a]].domain;o&&(i=Math.max(o[1],i))}return[t.domain[0],i+l.yPad]}(e,r,c);d(\\\"x\\\",v[0]),d(\\\"y\\\",v[1]),n.noneOrAll(t,e,[\\\"x\\\",\\\"y\\\"]),d(\\\"xanchor\\\"),d(\\\"yanchor\\\"),n.coerceFont(d,\\\"font\\\",r.font);var g=d(\\\"bgcolor\\\");d(\\\"activecolor\\\",i.contrast(g,l.lightAmount,l.darkAmount)),d(\\\"bordercolor\\\"),d(\\\"borderwidth\\\")}}},21598:function(t,e,r){\\\"use strict\\\";var n=r(39898),i=r(73972),a=r(74875),o=r(7901),s=r(91424),l=r(71828),u=l.strTranslate,c=r(63893),f=r(41675),h=r(18783),p=h.LINE_SPACING,d=h.FROM_TL,v=h.FROM_BR,g=r(89573),y=r(70565);function m(t){return t._id}function x(t,e,r){var n=l.ensureSingle(t,\\\"rect\\\",\\\"selector-rect\\\",(function(t){t.attr(\\\"shape-rendering\\\",\\\"crispEdges\\\")}));n.attr({rx:g.rx,ry:g.ry}),n.call(o.stroke,e.bordercolor).call(o.fill,function(t,e){return e._isActive||e._isHovered?t.activecolor:t.bgcolor}(e,r)).style(\\\"stroke-width\\\",e.borderwidth+\\\"px\\\")}function b(t,e,r,n){var i,a;l.ensureSingle(t,\\\"text\\\",\\\"selector-text\\\",(function(t){t.attr(\\\"text-anchor\\\",\\\"middle\\\")})).call(s.font,e.font).text((i=r,a=n._fullLayout._meta,i.label?a?l.templateString(i.label,a):i.label:\\\"all\\\"===i.step?\\\"all\\\":i.count+i.step.charAt(0))).call((function(t){c.convertToTspans(t,n)}))}t.exports=function(t){var e=t._fullLayout._infolayer.selectAll(\\\".rangeselector\\\").data(function(t){for(var e=f.list(t,\\\"x\\\",!0),r=[],n=0;n<e.length;n++){var i=e[n];i.rangeselector&&i.rangeselector.visible&&r.push(i)}return r}(t),m);e.enter().append(\\\"g\\\").classed(\\\"rangeselector\\\",!0),e.exit().remove(),e.style({cursor:\\\"pointer\\\",\\\"pointer-events\\\":\\\"all\\\"}),e.each((function(e){var r=n.select(this),o=e,f=o.rangeselector,h=r.selectAll(\\\"g.button\\\").data(l.filterVisible(f.buttons));h.enter().append(\\\"g\\\").classed(\\\"button\\\",!0),h.exit().remove(),h.each((function(e){var r=n.select(this),a=y(o,e);e._isActive=function(t,e,r){if(\\\"all\\\"===e.step)return!0===t.autorange;var n=Object.keys(r);return t.range[0]===r[n[0]]&&t.range[1]===r[n[1]]}(o,e,a),r.call(x,f,e),r.call(b,f,e,t),r.on(\\\"click\\\",(function(){t._dragged||i.call(\\\"_guiRelayout\\\",t,a)})),r.on(\\\"mouseover\\\",(function(){e._isHovered=!0,r.call(x,f,e)})),r.on(\\\"mouseout\\\",(function(){e._isHovered=!1,r.call(x,f,e)}))})),function(t,e,r,i,o){var f=0,h=0,y=r.borderwidth;e.each((function(){var t=n.select(this).select(\\\".selector-text\\\"),e=r.font.size*p,i=Math.max(e*c.lineCount(t),16)+3;h=Math.max(h,i)})),e.each((function(){var t=n.select(this),e=t.select(\\\".selector-rect\\\"),i=t.select(\\\".selector-text\\\"),a=i.node()&&s.bBox(i.node()).width,o=r.font.size*p,l=c.lineCount(i),d=Math.max(a+10,g.minButtonWidth);t.attr(\\\"transform\\\",u(y+f,y)),e.attr({x:0,y:0,width:d,height:h}),c.positionText(i,d/2,h/2-(l-1)*o/2+3),f+=d+5}));var m=t._fullLayout._size,x=m.l+m.w*r.x,b=m.t+m.h*(1-r.y),_=\\\"left\\\";l.isRightAnchor(r)&&(x-=f,_=\\\"right\\\"),l.isCenterAnchor(r)&&(x-=f/2,_=\\\"center\\\");var w=\\\"top\\\";l.isBottomAnchor(r)&&(b-=h,w=\\\"bottom\\\"),l.isMiddleAnchor(r)&&(b-=h/2,w=\\\"middle\\\"),f=Math.ceil(f),h=Math.ceil(h),x=Math.round(x),b=Math.round(b),a.autoMargin(t,i+\\\"-range-selector\\\",{x:r.x,y:r.y,l:f*d[_],r:f*v[_],b:h*v[w],t:h*d[w]}),o.attr(\\\"transform\\\",u(x,b))}(t,h,f,o._name,r)}))}},70565:function(t,e,r){\\\"use strict\\\";var n=r(81041),i=r(71828).titleCase;t.exports=function(t,e){var r=t._name,a={};if(\\\"all\\\"===e.step)a[r+\\\".autorange\\\"]=!0;else{var o=function(t,e){var r,a=t.range,o=new Date(t.r2l(a[1])),s=e.step,l=n[\\\"utc\\\"+i(s)],u=e.count;switch(e.stepmode){case\\\"backward\\\":r=t.l2r(+l.offset(o,-u));break;case\\\"todate\\\":var c=l.offset(o,-u);r=t.l2r(+l.ceil(c))}return[r,a[1]]}(t,e);a[r+\\\".range[0]\\\"]=o[0],a[r+\\\".range[1]\\\"]=o[1]}return a}},97218:function(t,e,r){\\\"use strict\\\";t.exports={moduleType:\\\"component\\\",name:\\\"rangeselector\\\",schema:{subplots:{xaxis:{rangeselector:r(37113)}}},layoutAttributes:r(37113),handleDefaults:r(28674),draw:r(21598)}},75148:function(t,e,r){\\\"use strict\\\";var n=r(22399);t.exports={bgcolor:{valType:\\\"color\\\",dflt:n.background,editType:\\\"plot\\\"},bordercolor:{valType:\\\"color\\\",dflt:n.defaultLine,editType:\\\"plot\\\"},borderwidth:{valType:\\\"integer\\\",dflt:0,min:0,editType:\\\"plot\\\"},autorange:{valType:\\\"boolean\\\",dflt:!0,editType:\\\"calc\\\",impliedEdits:{\\\"range[0]\\\":void 0,\\\"range[1]\\\":void 0}},range:{valType:\\\"info_array\\\",items:[{valType:\\\"any\\\",editType:\\\"calc\\\",impliedEdits:{\\\"^autorange\\\":!1}},{valType:\\\"any\\\",editType:\\\"calc\\\",impliedEdits:{\\\"^autorange\\\":!1}}],editType:\\\"calc\\\",impliedEdits:{autorange:!1}},thickness:{valType:\\\"number\\\",dflt:.15,min:0,max:1,editType:\\\"plot\\\"},visible:{valType:\\\"boolean\\\",dflt:!0,editType:\\\"calc\\\"},editType:\\\"calc\\\"}},88443:function(t,e,r){\\\"use strict\\\";var n=r(41675).list,i=r(71739).getAutoRange,a=r(73251);t.exports=function(t){for(var e=n(t,\\\"x\\\",!0),r=0;r<e.length;r++){var o=e[r],s=o[a.name];s&&s.visible&&s.autorange&&(s._input.autorange=!0,s._input.range=s.range=i(t,o))}}},73251:function(t){\\\"use strict\\\";t.exports={name:\\\"rangeslider\\\",containerClassName:\\\"rangeslider-container\\\",bgClassName:\\\"rangeslider-bg\\\",rangePlotClassName:\\\"rangeslider-rangeplot\\\",maskMinClassName:\\\"rangeslider-mask-min\\\",maskMaxClassName:\\\"rangeslider-mask-max\\\",slideBoxClassName:\\\"rangeslider-slidebox\\\",grabberMinClassName:\\\"rangeslider-grabber-min\\\",grabAreaMinClassName:\\\"rangeslider-grabarea-min\\\",handleMinClassName:\\\"rangeslider-handle-min\\\",grabberMaxClassName:\\\"rangeslider-grabber-max\\\",grabAreaMaxClassName:\\\"rangeslider-grabarea-max\\\",handleMaxClassName:\\\"rangeslider-handle-max\\\",maskMinOppAxisClassName:\\\"rangeslider-mask-min-opp-axis\\\",maskMaxOppAxisClassName:\\\"rangeslider-mask-max-opp-axis\\\",maskColor:\\\"rgba(0,0,0,0.4)\\\",maskOppAxisColor:\\\"rgba(0,0,0,0.2)\\\",slideBoxFill:\\\"transparent\\\",slideBoxCursor:\\\"ew-resize\\\",grabAreaFill:\\\"transparent\\\",grabAreaCursor:\\\"col-resize\\\",grabAreaWidth:10,handleWidth:4,handleRadius:1,handleStrokeWidth:1,extraPad:15}},26377:function(t,e,r){\\\"use strict\\\";var n=r(71828),i=r(44467),a=r(41675),o=r(75148),s=r(47850);t.exports=function(t,e,r){var l=t[r],u=e[r];if(l.rangeslider||e._requestRangeslider[u._id]){n.isPlainObject(l.rangeslider)||(l.rangeslider={});var c,f,h=l.rangeslider,p=i.newContainer(u,\\\"rangeslider\\\");if(_(\\\"visible\\\")){_(\\\"bgcolor\\\",e.plot_bgcolor),_(\\\"bordercolor\\\"),_(\\\"borderwidth\\\"),_(\\\"thickness\\\"),_(\\\"autorange\\\",!u.isValidRange(h.range)),_(\\\"range\\\");var d=e._subplots;if(d)for(var v=d.cartesian.filter((function(t){return t.substr(0,t.indexOf(\\\"y\\\"))===a.name2id(r)})).map((function(t){return t.substr(t.indexOf(\\\"y\\\"),t.length)})),g=n.simpleMap(v,a.id2name),y=0;y<g.length;y++){var m=g[y];c=h[m]||{},f=i.newContainer(p,m,\\\"yaxis\\\");var x,b=e[m];c.range&&b.isValidRange(c.range)&&(x=\\\"fixed\\\"),\\\"match\\\"!==w(\\\"rangemode\\\",x)&&w(\\\"range\\\",b.range.slice())}p._input=h}}function _(t,e){return n.coerce(h,p,o,t,e)}function w(t,e){return n.coerce(c,f,s,t,e)}}},72413:function(t,e,r){\\\"use strict\\\";var n=r(39898),i=r(73972),a=r(74875),o=r(71828),s=o.strTranslate,l=r(91424),u=r(7901),c=r(92998),f=r(93612),h=r(41675),p=r(28569),d=r(6964),v=r(73251);function g(t,e,r,n){var i=o.ensureSingle(t,\\\"rect\\\",v.bgClassName,(function(t){t.attr({x:0,y:0,\\\"shape-rendering\\\":\\\"crispEdges\\\"})})),a=n.borderwidth%2==0?n.borderwidth:n.borderwidth-1,c=-n._offsetShift,f=l.crispRound(e,n.borderwidth);i.attr({width:n._width+a,height:n._height+a,transform:s(c,c),\\\"stroke-width\\\":f}).call(u.stroke,n.bordercolor).call(u.fill,n.bgcolor)}function y(t,e,r,n){var i=e._fullLayout;o.ensureSingleById(i._topdefs,\\\"clipPath\\\",n._clipId,(function(t){t.append(\\\"rect\\\").attr({x:0,y:0})})).select(\\\"rect\\\").attr({width:n._width,height:n._height})}function m(t,e,r,i){var s,u=e.calcdata,c=t.selectAll(\\\"g.\\\"+v.rangePlotClassName).data(r._subplotsWith,o.identity);c.enter().append(\\\"g\\\").attr(\\\"class\\\",(function(t){return v.rangePlotClassName+\\\" \\\"+t})).call(l.setClipUrl,i._clipId,e),c.order(),c.exit().remove(),c.each((function(t,o){var l=n.select(this),c=0===o,p=h.getFromId(e,t,\\\"y\\\"),d=p._name,v=i[d],g={data:[],layout:{xaxis:{type:r.type,domain:[0,1],range:i.range.slice(),calendar:r.calendar},width:i._width,height:i._height,margin:{t:0,b:0,l:0,r:0}},_context:e._context};r.rangebreaks&&(g.layout.xaxis.rangebreaks=r.rangebreaks),g.layout[d]={type:p.type,domain:[0,1],range:\\\"match\\\"!==v.rangemode?v.range.slice():p.range.slice(),calendar:p.calendar},p.rangebreaks&&(g.layout[d].rangebreaks=p.rangebreaks),a.supplyDefaults(g);var y=g._fullLayout.xaxis,m=g._fullLayout[d];y.clearCalc(),y.setScale(),m.clearCalc(),m.setScale();var x={id:t,plotgroup:l,xaxis:y,yaxis:m,isRangePlot:!0};c?s=x:(x.mainplot=\\\"xy\\\",x.mainplotinfo=s),f.rangePlot(e,x,function(t,e){for(var r=[],n=0;n<t.length;n++){var i=t[n],a=i[0].trace;a.xaxis+a.yaxis===e&&r.push(i)}return r}(u,t))}))}function x(t,e,r,n,i){o.ensureSingle(t,\\\"rect\\\",v.maskMinClassName,(function(t){t.attr({x:0,y:0,\\\"shape-rendering\\\":\\\"crispEdges\\\"})})).attr(\\\"height\\\",n._height).call(u.fill,v.maskColor),o.ensureSingle(t,\\\"rect\\\",v.maskMaxClassName,(function(t){t.attr({y:0,\\\"shape-rendering\\\":\\\"crispEdges\\\"})})).attr(\\\"height\\\",n._height).call(u.fill,v.maskColor),\\\"match\\\"!==i.rangemode&&(o.ensureSingle(t,\\\"rect\\\",v.maskMinOppAxisClassName,(function(t){t.attr({y:0,\\\"shape-rendering\\\":\\\"crispEdges\\\"})})).attr(\\\"width\\\",n._width).call(u.fill,v.maskOppAxisColor),o.ensureSingle(t,\\\"rect\\\",v.maskMaxOppAxisClassName,(function(t){t.attr({y:0,\\\"shape-rendering\\\":\\\"crispEdges\\\"})})).attr(\\\"width\\\",n._width).style(\\\"border-top\\\",v.maskOppBorder).call(u.fill,v.maskOppAxisColor))}function b(t,e,r,n){e._context.staticPlot||o.ensureSingle(t,\\\"rect\\\",v.slideBoxClassName,(function(t){t.attr({y:0,cursor:v.slideBoxCursor,\\\"shape-rendering\\\":\\\"crispEdges\\\"})})).attr({height:n._height,fill:v.slideBoxFill})}function _(t,e,r,n){var i=o.ensureSingle(t,\\\"g\\\",v.grabberMinClassName),a=o.ensureSingle(t,\\\"g\\\",v.grabberMaxClassName),s={x:0,width:v.handleWidth,rx:v.handleRadius,fill:u.background,stroke:u.defaultLine,\\\"stroke-width\\\":v.handleStrokeWidth,\\\"shape-rendering\\\":\\\"crispEdges\\\"},l={y:Math.round(n._height/4),height:Math.round(n._height/2)};o.ensureSingle(i,\\\"rect\\\",v.handleMinClassName,(function(t){t.attr(s)})).attr(l),o.ensureSingle(a,\\\"rect\\\",v.handleMaxClassName,(function(t){t.attr(s)})).attr(l);var c={width:v.grabAreaWidth,x:0,y:0,fill:v.grabAreaFill,cursor:e._context.staticPlot?void 0:v.grabAreaCursor};o.ensureSingle(i,\\\"rect\\\",v.grabAreaMinClassName,(function(t){t.attr(c)})).attr(\\\"height\\\",n._height),o.ensureSingle(a,\\\"rect\\\",v.grabAreaMaxClassName,(function(t){t.attr(c)})).attr(\\\"height\\\",n._height)}t.exports=function(t){for(var e=t._fullLayout,r=e._rangeSliderData,a=0;a<r.length;a++){var l=r[a][v.name];l._clipId=l._id+\\\"-\\\"+e._uid}var u=e._infolayer.selectAll(\\\"g.\\\"+v.containerClassName).data(r,(function(t){return t._name}));u.exit().each((function(t){var r=t[v.name];e._topdefs.select(\\\"#\\\"+r._clipId).remove()})).remove(),0!==r.length&&(u.enter().append(\\\"g\\\").classed(v.containerClassName,!0).attr(\\\"pointer-events\\\",\\\"all\\\"),u.each((function(r){var a=n.select(this),l=r[v.name],u=e[h.id2name(r.anchor)],f=l[h.id2name(r.anchor)];if(l.range){var w,T=o.simpleMap(l.range,r.r2l),k=o.simpleMap(r.range,r.r2l);w=k[0]<k[1]?[Math.min(T[0],k[0]),Math.max(T[1],k[1])]:[Math.max(T[0],k[0]),Math.min(T[1],k[1])],l.range=l._input.range=o.simpleMap(w,r.l2r)}r.cleanRange(\\\"rangeslider.range\\\");var A=e._size,M=r.domain;l._width=A.w*(M[1]-M[0]);var S=Math.round(A.l+A.w*M[0]),E=Math.round(A.t+A.h*(1-r._counterDomainMin)+(\\\"bottom\\\"===r.side?r._depth:0)+l._offsetShift+v.extraPad);a.attr(\\\"transform\\\",s(S,E)),l._rl=o.simpleMap(l.range,r.r2l);var L=l._rl[0],C=l._rl[1],P=C-L;if(l.p2d=function(t){return t/l._width*P+L},l.d2p=function(t){return(t-L)/P*l._width},r.rangebreaks){var O=r.locateBreaks(L,C);if(O.length){var I,D,z=0;for(I=0;I<O.length;I++)z+=(D=O[I]).max-D.min;var R=l._width/(C-L-z),F=[-R*L];for(I=0;I<O.length;I++)D=O[I],F.push(F[F.length-1]-R*(D.max-D.min));for(l.d2p=function(t){for(var e=F[0],r=0;r<O.length;r++){var n=O[r];if(t>=n.max)e=F[r+1];else if(t<n.min)break}return e+R*t},I=0;I<O.length;I++)(D=O[I]).pmin=l.d2p(D.min),D.pmax=l.d2p(D.max);l.p2d=function(t){for(var e=F[0],r=0;r<O.length;r++){var n=O[r];if(t>=n.pmax)e=F[r+1];else if(t<n.pmin)break}return(t-e)/R}}}if(\\\"match\\\"!==f.rangemode){var B=u.r2l(f.range[0]),N=u.r2l(f.range[1])-B;l.d2pOppAxis=function(t){return(t-B)/N*l._height}}a.call(g,t,r,l).call(y,t,r,l).call(m,t,r,l).call(x,t,r,l,f).call(b,t,r,l).call(_,t,r,l),function(t,e,r,a){if(!e._context.staticPlot){var s=t.select(\\\"rect.\\\"+v.slideBoxClassName).node(),l=t.select(\\\"rect.\\\"+v.grabAreaMinClassName).node(),u=t.select(\\\"rect.\\\"+v.grabAreaMaxClassName).node();t.on(\\\"mousedown\\\",c),t.on(\\\"touchstart\\\",c)}function c(){var c=n.event,f=c.target,h=c.clientX||c.touches[0].clientX,v=h-t.node().getBoundingClientRect().left,g=a.d2p(r._rl[0]),y=a.d2p(r._rl[1]),m=p.coverSlip();function x(t){var c,p,x,b=+(t.clientX||t.touches[0].clientX)-h;switch(f){case s:if(x=\\\"ew-resize\\\",g+b>r._length||y+b<0)return;c=g+b,p=y+b;break;case l:if(x=\\\"col-resize\\\",g+b>r._length)return;c=g+b,p=y;break;case u:if(x=\\\"col-resize\\\",y+b<0)return;c=g,p=y+b;break;default:x=\\\"ew-resize\\\",c=v,p=v+b}if(p<c){var _=p;p=c,c=_}a._pixelMin=c,a._pixelMax=p,d(n.select(m),x),function(t,e,r,n){function a(t){return r.l2r(o.constrain(t,n._rl[0],n._rl[1]))}var s=a(n.p2d(n._pixelMin)),l=a(n.p2d(n._pixelMax));window.requestAnimationFrame((function(){i.call(\\\"_guiRelayout\\\",e,r._name+\\\".range\\\",[s,l])}))}(0,e,r,a)}function b(){m.removeEventListener(\\\"mousemove\\\",x),m.removeEventListener(\\\"mouseup\\\",b),this.removeEventListener(\\\"touchmove\\\",x),this.removeEventListener(\\\"touchend\\\",b),o.removeElement(m)}this.addEventListener(\\\"touchmove\\\",x),this.addEventListener(\\\"touchend\\\",b),m.addEventListener(\\\"mousemove\\\",x),m.addEventListener(\\\"mouseup\\\",b)}}(a,t,r,l),function(t,e,r,n,i,a){var l=v.handleWidth/2;function u(t){return o.constrain(t,0,n._width)}function c(t){return o.constrain(t,0,n._height)}function f(t){return o.constrain(t,-l,n._width+l)}var h=u(n.d2p(r._rl[0])),p=u(n.d2p(r._rl[1]));if(t.select(\\\"rect.\\\"+v.slideBoxClassName).attr(\\\"x\\\",h).attr(\\\"width\\\",p-h),t.select(\\\"rect.\\\"+v.maskMinClassName).attr(\\\"width\\\",h),t.select(\\\"rect.\\\"+v.maskMaxClassName).attr(\\\"x\\\",p).attr(\\\"width\\\",n._width-p),\\\"match\\\"!==a.rangemode){var d=n._height-c(n.d2pOppAxis(i._rl[1])),g=n._height-c(n.d2pOppAxis(i._rl[0]));t.select(\\\"rect.\\\"+v.maskMinOppAxisClassName).attr(\\\"x\\\",h).attr(\\\"height\\\",d).attr(\\\"width\\\",p-h),t.select(\\\"rect.\\\"+v.maskMaxOppAxisClassName).attr(\\\"x\\\",h).attr(\\\"y\\\",g).attr(\\\"height\\\",n._height-g).attr(\\\"width\\\",p-h),t.select(\\\"rect.\\\"+v.slideBoxClassName).attr(\\\"y\\\",d).attr(\\\"height\\\",g-d)}var y=.5,m=Math.round(f(h-l))-y,x=Math.round(f(p-l))+y;t.select(\\\"g.\\\"+v.grabberMinClassName).attr(\\\"transform\\\",s(m,y)),t.select(\\\"g.\\\"+v.grabberMaxClassName).attr(\\\"transform\\\",s(x,y))}(a,0,r,l,u,f),\\\"bottom\\\"===r.side&&c.draw(t,r._id+\\\"title\\\",{propContainer:r,propName:r._name+\\\".title\\\",placeholder:e._dfltTitle.x,attributes:{x:r._offset+r._length/2,y:E+l._height+l._offsetShift+10+1.5*r.title.font.size,\\\"text-anchor\\\":\\\"middle\\\"}})})))}},549:function(t,e,r){\\\"use strict\\\";var n=r(41675),i=r(63893),a=r(73251),o=r(18783).LINE_SPACING,s=a.name;function l(t){var e=t&&t[s];return e&&e.visible}e.isVisible=l,e.makeData=function(t){var e=n.list({_fullLayout:t},\\\"x\\\",!0),r=t.margin,i=[];if(!t._has(\\\"gl2d\\\"))for(var a=0;a<e.length;a++){var o=e[a];if(l(o)){i.push(o);var u=o[s];u._id=s+o._id,u._height=(t.height-r.b-r.t)*u.thickness,u._offsetShift=Math.floor(u.borderwidth/2)}}t._rangeSliderData=i},e.autoMarginOpts=function(t,e){var r=t._fullLayout,n=e[s],l=e._id.charAt(0),u=0,c=0;return\\\"bottom\\\"===e.side&&(u=e._depth,e.title.text!==r._dfltTitle[l]&&(c=1.5*e.title.font.size+10+n._offsetShift,c+=(e.title.text.match(i.BR_TAG_ALL)||[]).length*e.title.font.size*o)),{x:0,y:e._counterDomainMin,l:0,r:0,t:0,b:n._height+u+Math.max(r.margin.b,c),pad:a.extraPad+2*n._offsetShift}}},13137:function(t,e,r){\\\"use strict\\\";var n=r(71828),i=r(75148),a=r(47850),o=r(549);t.exports={moduleType:\\\"component\\\",name:\\\"rangeslider\\\",schema:{subplots:{xaxis:{rangeslider:n.extendFlat({},i,{yaxis:a})}}},layoutAttributes:r(75148),handleDefaults:r(26377),calcAutorange:r(88443),draw:r(72413),isVisible:o.isVisible,makeData:o.makeData,autoMarginOpts:o.autoMarginOpts}},47850:function(t){\\\"use strict\\\";t.exports={_isSubplotObj:!0,rangemode:{valType:\\\"enumerated\\\",values:[\\\"auto\\\",\\\"fixed\\\",\\\"match\\\"],dflt:\\\"match\\\",editType:\\\"calc\\\"},range:{valType:\\\"info_array\\\",items:[{valType:\\\"any\\\",editType:\\\"plot\\\"},{valType:\\\"any\\\",editType:\\\"plot\\\"}],editType:\\\"plot\\\"},editType:\\\"calc\\\"}},8389:function(t,e,r){\\\"use strict\\\";var n=r(50215),i=r(82196).line,a=r(79952).P,o=r(1426).extendFlat,s=r(30962).overrideAll,l=r(44467).templatedArray;r(24695),t.exports=s(l(\\\"selection\\\",{type:{valType:\\\"enumerated\\\",values:[\\\"rect\\\",\\\"path\\\"]},xref:o({},n.xref,{}),yref:o({},n.yref,{}),x0:{valType:\\\"any\\\"},x1:{valType:\\\"any\\\"},y0:{valType:\\\"any\\\"},y1:{valType:\\\"any\\\"},path:{valType:\\\"string\\\",editType:\\\"arraydraw\\\"},opacity:{valType:\\\"number\\\",min:0,max:1,dflt:.7,editType:\\\"arraydraw\\\"},line:{color:i.color,width:o({},i.width,{min:1,dflt:1}),dash:o({},a,{dflt:\\\"dot\\\"})}}),\\\"arraydraw\\\",\\\"from-root\\\")},34122:function(t){\\\"use strict\\\";t.exports={BENDPX:1.5,MINSELECT:12,SELECTDELAY:100,SELECTID:\\\"-select\\\"}},59402:function(t,e,r){\\\"use strict\\\";var n=r(71828),i=r(89298),a=r(85501),o=r(8389),s=r(30477);function l(t,e,r){function a(r,i){return n.coerce(t,e,o,r,i)}var l=a(\\\"path\\\"),u=\\\"path\\\"!==a(\\\"type\\\",l?\\\"path\\\":\\\"rect\\\");u&&delete e.path,a(\\\"opacity\\\"),a(\\\"line.color\\\"),a(\\\"line.width\\\"),a(\\\"line.dash\\\");for(var c=[\\\"x\\\",\\\"y\\\"],f=0;f<2;f++){var h,p,d,v=c[f],g={_fullLayout:r},y=i.coerceRef(t,e,g,v);if((h=i.getFromId(g,y))._selectionIndices.push(e._index),d=s.rangeToShapePosition(h),p=s.shapePositionToRange(h),u){var m=v+\\\"0\\\",x=v+\\\"1\\\",b=t[m],_=t[x];t[m]=p(t[m],!0),t[x]=p(t[x],!0),i.coercePosition(e,g,a,y,m),i.coercePosition(e,g,a,y,x);var w=e[m],T=e[x];void 0!==w&&void 0!==T&&(e[m]=d(w),e[x]=d(T),t[m]=b,t[x]=_)}}u&&n.noneOrAll(t,e,[\\\"x0\\\",\\\"x1\\\",\\\"y0\\\",\\\"y1\\\"])}t.exports=function(t,e){a(t,e,{name:\\\"selections\\\",handleItemDefaults:l});for(var r=e.selections,n=0;n<r.length;n++){var i=r[n];i&&void 0===i.path&&(void 0!==i.x0&&void 0!==i.x1&&void 0!==i.y0&&void 0!==i.y1||(e.selections[n]=null))}}},32485:function(t,e,r){\\\"use strict\\\";var n=r(60165).readPaths,i=r(42359),a=r(51873).clearOutlineControllers,o=r(7901),s=r(91424),l=r(44467).arrayEditor,u=r(30477),c=u.getPathString;function f(t){var e=t._fullLayout;for(var r in a(t),e._selectionLayer.selectAll(\\\"path\\\").remove(),e._plots){var n=e._plots[r].selectionLayer;n&&n.selectAll(\\\"path\\\").remove()}for(var i=0;i<e.selections.length;i++)p(t,i)}function h(t){return t._context.editSelection}function p(t,e){t._fullLayout._paperdiv.selectAll('.selectionlayer [data-index=\\\"'+e+'\\\"]').remove();var r=u.makeSelectionsOptionsAndPlotinfo(t,e),a=r.options,p=r.plotinfo;a._input&&function(r){var u=c(t,a),g={\\\"data-index\\\":e,\\\"fill-rule\\\":\\\"evenodd\\\",d:u},y=a.opacity,m=\\\"rgba(0,0,0,0)\\\",x=a.line.color||o.contrast(t._fullLayout.plot_bgcolor),b=a.line.width,_=a.line.dash;b||(b=5,_=\\\"solid\\\");var w=h(t)&&t._fullLayout._activeSelectionIndex===e;w&&(m=t._fullLayout.activeselection.fillcolor,y=t._fullLayout.activeselection.opacity);for(var T=[],k=1;k>=0;k--){var A=r.append(\\\"path\\\").attr(g).style(\\\"opacity\\\",k?.1:y).call(o.stroke,x).call(o.fill,m).call(s.dashLine,k?\\\"solid\\\":_,k?4+b:b);if(d(A,t,a),w){var M=l(t.layout,\\\"selections\\\",a);A.style({cursor:\\\"move\\\"});var S={element:A.node(),plotinfo:p,gd:t,editHelpers:M,isActiveSelection:!0},E=n(u,t);i(E,A,S)}else A.style(\\\"pointer-events\\\",k?\\\"all\\\":\\\"none\\\");T[k]=A}var L=T[0];T[1].node().addEventListener(\\\"click\\\",(function(){return function(t,e){if(h(t)){var r=+e.node().getAttribute(\\\"data-index\\\");if(r>=0){if(r===t._fullLayout._activeSelectionIndex)return void v(t);t._fullLayout._activeSelectionIndex=r,t._fullLayout._deactivateSelection=v,f(t)}}}(t,L)}))}(t._fullLayout._selectionLayer)}function d(t,e,r){var n=r.xref+r.yref;s.setClipUrl(t,\\\"clip\\\"+e._fullLayout._uid+n,e)}function v(t){h(t)&&t._fullLayout._activeSelectionIndex>=0&&(a(t),delete t._fullLayout._activeSelectionIndex,f(t))}t.exports={draw:f,drawOne:p,activateLastSelection:function(t){if(h(t)){var e=t._fullLayout.selections.length-1;t._fullLayout._activeSelectionIndex=e,t._fullLayout._deactivateSelection=v,f(t)}}}},53777:function(t,e,r){\\\"use strict\\\";var n=r(79952).P,i=r(1426).extendFlat;t.exports={newselection:{mode:{valType:\\\"enumerated\\\",values:[\\\"immediate\\\",\\\"gradual\\\"],dflt:\\\"immediate\\\",editType:\\\"none\\\"},line:{color:{valType:\\\"color\\\",editType:\\\"none\\\"},width:{valType:\\\"number\\\",min:1,dflt:1,editType:\\\"none\\\"},dash:i({},n,{dflt:\\\"dot\\\",editType:\\\"none\\\"}),editType:\\\"none\\\"},editType:\\\"none\\\"},activeselection:{fillcolor:{valType:\\\"color\\\",dflt:\\\"rgba(0,0,0,0)\\\",editType:\\\"none\\\"},opacity:{valType:\\\"number\\\",min:0,max:1,dflt:.5,editType:\\\"none\\\"},editType:\\\"none\\\"}}},90849:function(t){\\\"use strict\\\";t.exports=function(t,e,r){r(\\\"newselection.mode\\\"),r(\\\"newselection.line.width\\\")&&(r(\\\"newselection.line.color\\\"),r(\\\"newselection.line.dash\\\")),r(\\\"activeselection.fillcolor\\\"),r(\\\"activeselection.opacity\\\")}},35855:function(t,e,r){\\\"use strict\\\";var n=r(64505).selectMode,i=r(51873).clearOutline,a=r(60165),o=a.readPaths,s=a.writePaths,l=a.fixDatesForPaths;t.exports=function(t,e){if(t.length){var r=t[0][0];if(r){var a=r.getAttribute(\\\"d\\\"),u=e.gd,c=u._fullLayout.newselection,f=e.plotinfo,h=f.xaxis,p=f.yaxis,d=e.isActiveSelection,v=e.dragmode,g=(u.layout||{}).selections||[];if(!n(v)&&void 0!==d){var y=u._fullLayout._activeSelectionIndex;if(y<g.length)switch(u._fullLayout.selections[y].type){case\\\"rect\\\":v=\\\"select\\\";break;case\\\"path\\\":v=\\\"lasso\\\"}}var m,x=o(a,u,f,d),b={xref:h._id,yref:p._id,opacity:c.opacity,line:{color:c.line.color,width:c.line.width,dash:c.line.dash}};1===x.length&&(m=x[0]),m&&5===m.length&&\\\"select\\\"===v?(b.type=\\\"rect\\\",b.x0=m[0][1],b.y0=m[0][2],b.x1=m[2][1],b.y1=m[2][2]):(b.type=\\\"path\\\",h&&p&&l(x,h,p),b.path=s(x),m=null),i(u);for(var _=e.editHelpers,w=(_||{}).modifyItem,T=[],k=0;k<g.length;k++){var A=u._fullLayout.selections[k];if(A){if(T[k]=A._input,void 0!==d&&k===u._fullLayout._activeSelectionIndex){var M=b;switch(A.type){case\\\"rect\\\":w(\\\"x0\\\",M.x0),w(\\\"x1\\\",M.x1),w(\\\"y0\\\",M.y0),w(\\\"y1\\\",M.y1);break;case\\\"path\\\":w(\\\"path\\\",M.path)}}}else T[k]=A}return void 0===d?(T.push(b),T):_?_.getUpdateObj():{}}}}},75549:function(t,e,r){\\\"use strict\\\";var n=r(71828).strTranslate;function i(t,e){switch(t.type){case\\\"log\\\":return t.p2d(e);case\\\"date\\\":return t.p2r(e,0,t.calendar);default:return t.p2r(e)}}t.exports={p2r:i,r2p:function(t,e){switch(t.type){case\\\"log\\\":return t.d2p(e);case\\\"date\\\":return t.r2p(e,0,t.calendar);default:return t.r2p(e)}},axValue:function(t){var e=\\\"y\\\"===t._id.charAt(0)?1:0;return function(r){return i(t,r[e])}},getTransform:function(t){return n(t.xaxis._offset,t.yaxis._offset)}}},47322:function(t,e,r){\\\"use strict\\\";var n=r(32485),i=r(3937);t.exports={moduleType:\\\"component\\\",name:\\\"selections\\\",layoutAttributes:r(8389),supplyLayoutDefaults:r(59402),supplyDrawNewSelectionDefaults:r(90849),includeBasePlot:r(76325)(\\\"selections\\\"),draw:n.draw,drawOne:n.drawOne,reselect:i.reselect,prepSelect:i.prepSelect,clearOutline:i.clearOutline,clearSelectionsCache:i.clearSelectionsCache,selectOnClick:i.selectOnClick}},3937:function(t,e,r){\\\"use strict\\\";var n=r(52142),i=r(38258),a=r(73972),o=r(91424).dashStyle,s=r(7901),l=r(30211),u=r(23469).makeEventData,c=r(64505),f=c.freeMode,h=c.rectMode,p=c.drawMode,d=c.openMode,v=c.selectMode,g=r(30477),y=r(21459),m=r(42359),x=r(51873).clearOutline,b=r(60165),_=b.handleEllipse,w=b.readPaths,T=r(90551).newShapes,k=r(35855),A=r(32485).activateLastSelection,M=r(71828),S=M.sorterAsc,E=r(61082),L=r(79990),C=r(41675).getFromId,P=r(33306),O=r(61549).redrawReglTraces,I=r(34122),D=I.MINSELECT,z=E.filter,R=E.tester,F=r(75549),B=F.p2r,N=F.axValue,j=F.getTransform;function U(t){return void 0!==t.subplot}function V(t,e,r,n,i,a,o){var s,l,u,c,f,h,p,v,g,y=e._hoverdata,x=e._fullLayout.clickmode.indexOf(\\\"event\\\")>-1,b=[];if(function(t){return t&&Array.isArray(t)&&!0!==t[0].hoverOnBox}(y)){Z(t,e,a);var _=function(t,e){var r,n,i=t[0],a=-1,o=[];for(n=0;n<e.length;n++)if(r=e[n],i.fullData._expandedIndex===r.cd[0].trace._expandedIndex){if(!0===i.hoverOnBox)break;void 0!==i.pointNumber?a=i.pointNumber:void 0!==i.binNumber&&(a=i.binNumber,o=i.pointNumbers);break}return{pointNumber:a,pointNumbers:o,searchInfo:r}}(y,s=X(e,r,n,i));if(_.pointNumbers.length>0?function(t,e){var r,n,i,a=[];for(i=0;i<t.length;i++)(r=t[i]).cd[0].trace.selectedpoints&&r.cd[0].trace.selectedpoints.length>0&&a.push(r);if(1===a.length&&a[0]===e.searchInfo&&(n=e.searchInfo.cd[0].trace).selectedpoints.length===e.pointNumbers.length){for(i=0;i<e.pointNumbers.length;i++)if(n.selectedpoints.indexOf(e.pointNumbers[i])<0)return!1;return!0}return!1}(s,_):function(t){var e,r,n=0;for(r=0;r<t.length;r++)if((e=t[r].cd[0].trace).selectedpoints){if(e.selectedpoints.length>1)return!1;if((n+=e.selectedpoints.length)>1)return!1}return 1===n}(s)&&(h=K(_))){for(o&&o.remove(),g=0;g<s.length;g++)(l=s[g])._module.selectPoints(l,!1);$(e,s),Y(a),x&&ht(e)}else{for(p=t.shiftKey&&(void 0!==h?h:K(_)),u=function(t,e,r){return{pointNumber:t,searchInfo:e,subtract:!!r}}(_.pointNumber,_.searchInfo,p),c=G(a.selectionDefs.concat([u])),g=0;g<s.length;g++)if(f=tt(s[g]._module.selectPoints(s[g],c),s[g]),b.length)for(var w=0;w<f.length;w++)b.push(f[w]);else b=f;if($(e,s,v={points:b}),u&&a&&a.selectionDefs.push(u),o){var T=a.mergedPolygons,k=d(a.dragmode);m(et(T,k),o,a)}x&&ft(e,v)}}}function H(t){return\\\"pointNumber\\\"in t&&\\\"searchInfo\\\"in t}function q(t){return{xmin:0,xmax:0,ymin:0,ymax:0,pts:[],contains:function(e,r,n,i){var a=t.searchInfo.cd[0].trace._expandedIndex;return i.cd[0].trace._expandedIndex===a&&n===t.pointNumber},isRect:!1,degenerate:!1,subtract:!!t.subtract}}function G(t){if(t.length){for(var e=[],r=H(t[0])?0:t[0][0][0],n=r,i=H(t[0])?0:t[0][0][1],a=i,o=0;o<t.length;o++)if(H(t[o]))e.push(q(t[o]));else{var s=R(t[o]);s.subtract=!!t[o].subtract,e.push(s),r=Math.min(r,s.xmin),n=Math.max(n,s.xmax),i=Math.min(i,s.ymin),a=Math.max(a,s.ymax)}return{xmin:r,xmax:n,ymin:i,ymax:a,pts:[],contains:function(t,r,n,i){for(var a=!1,o=0;o<e.length;o++)e[o].contains(t,r,n,i)&&(a=!e[o].subtract);return a},isRect:!1,degenerate:!1}}}function Z(t,e,r){var n=e._fullLayout,i=r.plotinfo,a=r.dragmode,o=n._lastSelectedSubplot&&n._lastSelectedSubplot===i.id,s=(t.shiftKey||t.altKey)&&!(p(a)&&d(a));o&&s&&i.selection&&i.selection.selectionDefs&&!r.selectionDefs?(r.selectionDefs=i.selection.selectionDefs,r.mergedPolygons=i.selection.mergedPolygons):s&&i.selection||Y(r),o||(x(e),n._lastSelectedSubplot=i.id)}function Y(t,e){var r=t.dragmode,n=t.plotinfo,i=t.gd;(function(t){return t._fullLayout._activeShapeIndex>=0})(i)&&i._fullLayout._deactivateShape(i),function(t){return t._fullLayout._activeSelectionIndex>=0}(i)&&i._fullLayout._deactivateSelection(i);var o=i._fullLayout._zoomlayer,s=p(r),l=v(r);if(s||l){var u,c,f=o.selectAll(\\\".select-outline-\\\"+n.id);f&&i._fullLayout._outlining&&(s&&(u=T(f,t)),u&&a.call(\\\"_guiRelayout\\\",i,{shapes:u}),l&&!U(t)&&(c=k(f,t)),c&&(i._fullLayout._noEmitSelectedAtStart=!0,a.call(\\\"_guiRelayout\\\",i,{selections:c}).then((function(){e&&A(i)}))),i._fullLayout._outlining=!1)}n.selection={},n.selection.selectionDefs=t.selectionDefs=[],n.selection.mergedPolygons=t.mergedPolygons=[]}function W(t){return t._id}function X(t,e,r,n){if(!t.calcdata)return[];var i,a,o,s=[],l=e.map(W),u=r.map(W);for(o=0;o<t.calcdata.length;o++)if(!0===(a=(i=t.calcdata[o])[0].trace).visible&&a._module&&a._module.selectPoints)if(!U({subplot:n})||a.subplot!==n&&a.geo!==n)if(\\\"splom\\\"===a.type){if(a._xaxes[l[0]]&&a._yaxes[u[0]]){var c=J(a._module,i,e[0],r[0]);c.scene=t._fullLayout._splomScenes[a.uid],s.push(c)}}else if(\\\"sankey\\\"===a.type){var f=J(a._module,i,e[0],r[0]);s.push(f)}else{if(-1===l.indexOf(a.xaxis))continue;if(-1===u.indexOf(a.yaxis))continue;s.push(J(a._module,i,C(t,a.xaxis),C(t,a.yaxis)))}else s.push(J(a._module,i,e[0],r[0]));return s}function J(t,e,r,n){return{_module:t,cd:e,xaxis:r,yaxis:n}}function K(t){var e=t.searchInfo.cd[0].trace,r=t.pointNumber,n=t.pointNumbers,i=n.length>0?n[0]:r;return!!e.selectedpoints&&e.selectedpoints.indexOf(i)>-1}function $(t,e,r){var n,i;for(n=0;n<e.length;n++){var o=e[n].cd[0].trace._fullInput,s=t._fullLayout._tracePreGUI[o.uid]||{};void 0===s.selectedpoints&&(s.selectedpoints=o._input.selectedpoints||null)}if(r){var l=r.points||[];for(n=0;n<e.length;n++)(i=e[n].cd[0].trace)._input.selectedpoints=i._fullInput.selectedpoints=[],i._fullInput!==i&&(i.selectedpoints=[]);for(var u=0;u<l.length;u++){var c=l[u],f=c.data,h=c.fullData,p=c.pointIndex,d=c.pointIndices;d?([].push.apply(f.selectedpoints,d),i._fullInput!==i&&[].push.apply(h.selectedpoints,d)):(f.selectedpoints.push(p),i._fullInput!==i&&h.selectedpoints.push(p))}}else for(n=0;n<e.length;n++)delete(i=e[n].cd[0].trace).selectedpoints,delete i._input.selectedpoints,i._fullInput!==i&&delete i._fullInput.selectedpoints;!function(t,e){for(var r=!1,n=0;n<e.length;n++){var i=e[n],o=i.cd;a.traceIs(o[0].trace,\\\"regl\\\")&&(r=!0);var s=i._module,l=s.styleOnSelect||s.style;l&&(l(t,o,o[0].node3),o[0].nodeRangePlot3&&l(t,o,o[0].nodeRangePlot3))}r&&(P(t),O(t))}(t,e)}function Q(t,e,r){for(var i=(r?n.difference:n.union)({regions:t},{regions:[e]}).regions.reverse(),a=0;a<i.length;a++){var o=i[a];o.subtract=st(o,i.slice(0,a))}return i}function tt(t,e){if(Array.isArray(t))for(var r=e.cd,n=e.cd[0].trace,i=0;i<t.length;i++)t[i]=u(t[i],n,r);return t}function et(t,e){for(var r=[],n=0;n<t.length;n++){r[n]=[];for(var i=0;i<t[n].length;i++){r[n][i]=[],r[n][i][0]=i?\\\"L\\\":\\\"M\\\";for(var a=0;a<t[n][i].length;a++)r[n][i].push(t[n][i][a])}e||r[n].push([\\\"Z\\\",r[n][0][1],r[n][0][2]])}return r}function rt(t,e){for(var r,n,i=[],a=[],o=0;o<e.length;o++){var s=e[o];n=s._module.selectPoints(s,t),a.push(n),r=tt(n,s),i=i.concat(r)}return i}function nt(t,e,r,n,i){var a,o,s,l=!!n;i&&(a=i.plotinfo,o=i.xaxes[0]._id,s=i.yaxes[0]._id);var u=[],c=[],f=ot(t),h=t._fullLayout;if(a){var d=h._zoomlayer,g=h.dragmode,y=p(g),m=v(g);if(y||m){var x=C(t,o,\\\"x\\\"),b=C(t,s,\\\"y\\\");if(x&&b){var _=d.selectAll(\\\".select-outline-\\\"+a.id);if(_&&t._fullLayout._outlining&&_.length){for(var T=_[0][0].getAttribute(\\\"d\\\"),k=w(T,t,a),A=[],M=0;M<k.length;M++){for(var S=k[M],E=[],L=0;L<S.length;L++)E.push([lt(x,S[L][1]),lt(b,S[L][2])]);E.xref=o,E.yref=s,E.subtract=st(E,A),A.push(E)}f=f.concat(A)}}}}var P=o&&s?[o+s]:h._subplots.cartesian;!function(t){var e=t.calcdata;if(e)for(var r=0;r<e.length;r++){var n=e[r][0].trace,i=t._fullLayout._splomScenes;if(i){var a=i[n.uid];a&&(a.selectBatch=[])}}}(t);for(var O={},I=0;I<P.length;I++){var D=P[I],z=D.indexOf(\\\"y\\\"),R=D.slice(0,z),F=D.slice(z),B=o&&s?r:void 0;if(B=at(f,R,F,B)){var N=n;if(!l){var j=C(t,R,\\\"x\\\"),U=C(t,F,\\\"y\\\");N=X(t,[j],[U],D);for(var V=0;V<N.length;V++){var H=N[V],q=H.cd[0],G=q.trace;if(\\\"scattergl\\\"===H._module.name&&!q.t.xpx){var Z=G.x,Y=G.y,W=G._length;q.t.xpx=[],q.t.ypx=[];for(var J=0;J<W;J++)q.t.xpx[J]=j.c2p(Z[J]),q.t.ypx[J]=U.c2p(Y[J])}\\\"splom\\\"===H._module.name&&(O[G.uid]||(O[G.uid]=!0))}}var K=rt(B,N);u=u.concat(K),c=c.concat(N)}}var Q={points:u};$(t,c,Q);var tt=h.clickmode.indexOf(\\\"event\\\")>-1&&e;if(!a&&e){var et=ot(t,!0);if(et.length){var nt=et[0].xref,pt=et[0].yref;if(nt&&pt){var dt=ut(et);ct([C(t,nt,\\\"x\\\"),C(t,pt,\\\"y\\\")])(Q,dt)}}t._fullLayout._noEmitSelectedAtStart?t._fullLayout._noEmitSelectedAtStart=!1:tt&&ft(t,Q),h._reselect=!1}if(!a&&h._deselect){var vt=h._deselect;(function(t,e,r){for(var n=0;n<r.length;n++){var i=r[n];if(i.xaxis&&i.xaxis._id===t&&i.yaxis&&i.yaxis._id===e)return!0}return!1})(o=vt.xref,s=vt.yref,c)||it(t,o,s,n),tt&&(Q.points.length?ft(t,Q):ht(t)),h._deselect=!1}return{eventData:Q,selectionTesters:r}}function it(t,e,r,n){n=X(t,[C(t,e,\\\"x\\\")],[C(t,r,\\\"y\\\")],e+r);for(var i=0;i<n.length;i++){var a=n[i];a._module.selectPoints(a,!1)}$(t,n)}function at(t,e,r,n){for(var i,a=0;a<t.length;a++){var o=t[a];e===o.xref&&r===o.yref&&(i?n=G(i=Q(i,o,!!o.subtract)):(i=[o],n=R(o)))}return n}function ot(t,e){for(var r=[],n=t._fullLayout,i=n.selections,a=i.length,o=0;o<a;o++)if(!e||o===n._activeSelectionIndex){var s=i[o];if(s){var l,u,c,f,h,p=s.xref,d=s.yref,v=C(t,p,\\\"x\\\"),m=C(t,d,\\\"y\\\");if(\\\"rect\\\"===s.type){h=[];var x=lt(v,s.x0),b=lt(v,s.x1),_=lt(m,s.y0),w=lt(m,s.y1);h=[[x,_],[x,w],[b,w],[b,_]],l=Math.min(x,b),u=Math.max(x,b),c=Math.min(_,w),f=Math.max(_,w),h.xmin=l,h.xmax=u,h.ymin=c,h.ymax=f,h.xref=p,h.yref=d,h.subtract=!1,h.isRect=!0,r.push(h)}else if(\\\"path\\\"===s.type)for(var T=s.path.split(\\\"Z\\\"),k=[],A=0;A<T.length;A++){var M=T[A];if(M){M+=\\\"Z\\\";var S=g.extractPathCoords(M,y.paramIsX,\\\"raw\\\"),E=g.extractPathCoords(M,y.paramIsY,\\\"raw\\\");l=1/0,u=-1/0,c=1/0,f=-1/0,h=[];for(var L=0;L<S.length;L++){var P=lt(v,S[L]),O=lt(m,E[L]);h.push([P,O]),l=Math.min(P,l),u=Math.max(P,u),c=Math.min(O,c),f=Math.max(O,f)}h.xmin=l,h.xmax=u,h.ymin=c,h.ymax=f,h.xref=p,h.yref=d,h.subtract=st(h,k),k.push(h),r.push(h)}}}}return r}function st(t,e){for(var r=!1,n=0;n<e.length;n++)for(var a=e[n],o=0;o<t.length;o++)if(i(t[o],a)){r=!r;break}return r}function lt(t,e){return\\\"date\\\"===t.type&&(e=e.replace(\\\"_\\\",\\\" \\\")),\\\"log\\\"===t.type?t.c2p(e):t.r2p(e,null,t.calendar)}function ut(t){for(var e=t.length,r=[],n=0;n<e;n++){var i=t[n];r=(r=r.concat(i)).concat([i[0]])}return(a=r).isRect=5===a.length&&a[0][0]===a[4][0]&&a[0][1]===a[4][1]&&a[0][0]===a[1][0]&&a[2][0]===a[3][0]&&a[0][1]===a[3][1]&&a[1][1]===a[2][1]||a[0][1]===a[1][1]&&a[2][1]===a[3][1]&&a[0][0]===a[3][0]&&a[1][0]===a[2][0],a.isRect&&(a.xmin=Math.min(a[0][0],a[2][0]),a.xmax=Math.max(a[0][0],a[2][0]),a.ymin=Math.min(a[0][1],a[2][1]),a.ymax=Math.max(a[0][1],a[2][1])),a;var a}function ct(t){return function(e,r){for(var n,i,a=0;a<t.length;a++){var o=t[a],s=o._id,l=s.charAt(0);if(r.isRect){n||(n={});var u=r[l+\\\"min\\\"],c=r[l+\\\"max\\\"];void 0!==u&&void 0!==c&&(n[s]=[B(o,u),B(o,c)].sort(S))}else i||(i={}),i[s]=r.map(N(o))}n&&(e.range=n),i&&(e.lassoPoints=i)}}function ft(t,e){e&&(e.selections=(t.layout||{}).selections||[]),t.emit(\\\"plotly_selected\\\",e)}function ht(t){t.emit(\\\"plotly_deselect\\\",null)}t.exports={reselect:nt,prepSelect:function(t,e,r,n,i){var u=!U(n),c=f(i),g=h(i),y=d(i),x=p(i),b=v(i),w=\\\"drawcircle\\\"===i,T=\\\"drawline\\\"===i||w,k=n.gd,A=k._fullLayout,S=b&&\\\"immediate\\\"===A.newselection.mode&&u,E=A._zoomlayer,C=n.element.getBoundingClientRect(),P=n.plotinfo,O=j(P),F=e-C.left,B=r-C.top;A._calcInverseTransform(k);var N=M.apply3DTransform(A._invTransform)(F,B);F=N[0],B=N[1];var H,q,W,J,K,tt,at,ot=A._invScaleX,st=A._invScaleY,lt=F,pt=B,dt=\\\"M\\\"+F+\\\",\\\"+B,vt=n.xaxes[0],gt=n.yaxes[0],yt=vt._length,mt=gt._length,xt=t.altKey&&!(p(i)&&y);Z(t,k,n),c&&(H=z([[F,B]],I.BENDPX));var bt=E.selectAll(\\\"path.select-outline-\\\"+P.id).data([1]),_t=x?A.newshape:A.newselection;x&&(n.hasText=_t.label.text||_t.label.texttemplate);var wt=x&&!y?_t.fillcolor:\\\"rgba(0,0,0,0)\\\",Tt=_t.line.color||(u?s.contrast(k._fullLayout.plot_bgcolor):\\\"#7f7f7f\\\");bt.enter().append(\\\"path\\\").attr(\\\"class\\\",\\\"select-outline select-outline-\\\"+P.id).style({opacity:x?_t.opacity/2:1,\\\"stroke-dasharray\\\":o(_t.line.dash,_t.line.width),\\\"stroke-width\\\":_t.line.width+\\\"px\\\",\\\"shape-rendering\\\":\\\"crispEdges\\\"}).call(s.stroke,Tt).call(s.fill,wt).attr(\\\"fill-rule\\\",\\\"evenodd\\\").classed(\\\"cursor-move\\\",!!x).attr(\\\"transform\\\",O).attr(\\\"d\\\",dt+\\\"Z\\\");var kt=E.append(\\\"path\\\").attr(\\\"class\\\",\\\"zoombox-corners\\\").style({fill:s.background,stroke:s.defaultLine,\\\"stroke-width\\\":1}).attr(\\\"transform\\\",O).attr(\\\"d\\\",\\\"M0,0Z\\\");if(x&&n.hasText){var At=E.select(\\\".label-temp\\\");At.empty()&&(At=E.append(\\\"g\\\").classed(\\\"label-temp\\\",!0).classed(\\\"select-outline\\\",!0).style({opacity:.8}))}var Mt=A._uid+I.SELECTID,St=[],Et=X(k,n.xaxes,n.yaxes,n.subplot);S&&!t.shiftKey&&(n._clearSubplotSelections=function(){if(u){var t=vt._id,e=gt._id;it(k,t,e,Et);for(var r=(k.layout||{}).selections||[],n=[],i=!1,o=0;o<r.length;o++){var s=A.selections[o];s.xref!==t||s.yref!==e?n.push(r[o]):i=!0}i&&(k._fullLayout._noEmitSelectedAtStart=!0,a.call(\\\"_guiRelayout\\\",k,{selections:n}))}});var Lt=function(t){return t.plotinfo.fillRangeItems||ct(t.xaxes.concat(t.yaxes))}(n);n.moveFn=function(t,e){n._clearSubplotSelections&&(n._clearSubplotSelections(),n._clearSubplotSelections=void 0),lt=Math.max(0,Math.min(yt,ot*t+F)),pt=Math.max(0,Math.min(mt,st*e+B));var r=Math.abs(lt-F),i=Math.abs(pt-B);if(g){var a,o,s;if(b){var l=A.selectdirection;switch(a=\\\"any\\\"===l?i<Math.min(.6*r,D)?\\\"h\\\":r<Math.min(.6*i,D)?\\\"v\\\":\\\"d\\\":l){case\\\"h\\\":o=w?mt/2:0,s=mt;break;case\\\"v\\\":o=w?yt/2:0,s=yt}}if(x)switch(A.newshape.drawdirection){case\\\"vertical\\\":a=\\\"h\\\",o=w?mt/2:0,s=mt;break;case\\\"horizontal\\\":a=\\\"v\\\",o=w?yt/2:0,s=yt;break;case\\\"ortho\\\":r<i?(a=\\\"h\\\",o=B,s=pt):(a=\\\"v\\\",o=F,s=lt);break;default:a=\\\"d\\\"}\\\"h\\\"===a?((J=T?_(w,[lt,o],[lt,s]):[[F,o],[F,s],[lt,s],[lt,o]]).xmin=T?lt:Math.min(F,lt),J.xmax=T?lt:Math.max(F,lt),J.ymin=Math.min(o,s),J.ymax=Math.max(o,s),kt.attr(\\\"d\\\",\\\"M\\\"+J.xmin+\\\",\\\"+(B-D)+\\\"h-4v\\\"+2*D+\\\"h4ZM\\\"+(J.xmax-1)+\\\",\\\"+(B-D)+\\\"h4v\\\"+2*D+\\\"h-4Z\\\")):\\\"v\\\"===a?((J=T?_(w,[o,pt],[s,pt]):[[o,B],[o,pt],[s,pt],[s,B]]).xmin=Math.min(o,s),J.xmax=Math.max(o,s),J.ymin=T?pt:Math.min(B,pt),J.ymax=T?pt:Math.max(B,pt),kt.attr(\\\"d\\\",\\\"M\\\"+(F-D)+\\\",\\\"+J.ymin+\\\"v-4h\\\"+2*D+\\\"v4ZM\\\"+(F-D)+\\\",\\\"+(J.ymax-1)+\\\"v4h\\\"+2*D+\\\"v-4Z\\\")):\\\"d\\\"===a&&((J=T?_(w,[F,B],[lt,pt]):[[F,B],[F,pt],[lt,pt],[lt,B]]).xmin=Math.min(F,lt),J.xmax=Math.max(F,lt),J.ymin=Math.min(B,pt),J.ymax=Math.max(B,pt),kt.attr(\\\"d\\\",\\\"M0,0Z\\\"))}else c&&(H.addPt([lt,pt]),J=H.filtered);if(n.selectionDefs&&n.selectionDefs.length?(W=Q(n.mergedPolygons,J,xt),J.subtract=xt,q=G(n.selectionDefs.concat([J]))):(W=[J],q=R(J)),m(et(W,y),bt,n),b){var u,f=nt(k,!1),h=f.eventData?f.eventData.points.slice():[];f=nt(k,!1,q,Et,n),q=f.selectionTesters,at=f.eventData,u=H?H.filtered:ut(W),L.throttle(Mt,I.SELECTDELAY,(function(){for(var t=(St=rt(q,Et)).slice(),e=0;e<h.length;e++){for(var r=h[e],n=!1,i=0;i<t.length;i++)if(t[i].curveNumber===r.curveNumber&&t[i].pointNumber===r.pointNumber){n=!0;break}n||t.push(r)}t.length&&(at||(at={}),at.points=t),Lt(at,u),function(t,e){t.emit(\\\"plotly_selecting\\\",e)}(k,at)}))}},n.clickFn=function(t,e){if(kt.remove(),k._fullLayout._activeShapeIndex>=0)k._fullLayout._deactivateShape(k);else if(!x){var r=A.clickmode;L.done(Mt).then((function(){if(L.clear(Mt),2===t){for(bt.remove(),K=0;K<Et.length;K++)(tt=Et[K])._module.selectPoints(tt,!1);if($(k,Et),Y(n),ht(k),Et.length){var i=Et[0].xaxis,o=Et[0].yaxis;if(i&&o){for(var s=[],u=k._fullLayout.selections,c=0;c<u.length;c++){var f=u[c];f&&(f.xref===i._id&&f.yref===o._id||s.push(f))}s.length<u.length&&(k._fullLayout._noEmitSelectedAtStart=!0,a.call(\\\"_guiRelayout\\\",k,{selections:s}))}}}else r.indexOf(\\\"select\\\")>-1&&V(e,k,n.xaxes,n.yaxes,n.subplot,n,bt),\\\"event\\\"===r&&ft(k,void 0);l.click(k,e)})).catch(M.error)}},n.doneFn=function(){kt.remove(),L.done(Mt).then((function(){L.clear(Mt),!S&&J&&n.selectionDefs&&(J.subtract=xt,n.selectionDefs.push(J),n.mergedPolygons.length=0,[].push.apply(n.mergedPolygons,W)),(S||x)&&Y(n,S),n.doneFnCompleted&&n.doneFnCompleted(St),b&&ft(k,at)})).catch(M.error)}},clearOutline:x,clearSelectionsCache:Y,selectOnClick:V}},89827:function(t,e,r){\\\"use strict\\\";var n=r(50215),i=r(41940),a=r(82196).line,o=r(79952).P,s=r(1426).extendFlat,l=r(44467).templatedArray,u=(r(24695),r(5386).R),c=r(37281);t.exports=l(\\\"shape\\\",{visible:{valType:\\\"boolean\\\",dflt:!0,editType:\\\"calc+arraydraw\\\"},type:{valType:\\\"enumerated\\\",values:[\\\"circle\\\",\\\"rect\\\",\\\"path\\\",\\\"line\\\"],editType:\\\"calc+arraydraw\\\"},layer:{valType:\\\"enumerated\\\",values:[\\\"below\\\",\\\"above\\\"],dflt:\\\"above\\\",editType:\\\"arraydraw\\\"},xref:s({},n.xref,{}),xsizemode:{valType:\\\"enumerated\\\",values:[\\\"scaled\\\",\\\"pixel\\\"],dflt:\\\"scaled\\\",editType:\\\"calc+arraydraw\\\"},xanchor:{valType:\\\"any\\\",editType:\\\"calc+arraydraw\\\"},x0:{valType:\\\"any\\\",editType:\\\"calc+arraydraw\\\"},x1:{valType:\\\"any\\\",editType:\\\"calc+arraydraw\\\"},yref:s({},n.yref,{}),ysizemode:{valType:\\\"enumerated\\\",values:[\\\"scaled\\\",\\\"pixel\\\"],dflt:\\\"scaled\\\",editType:\\\"calc+arraydraw\\\"},yanchor:{valType:\\\"any\\\",editType:\\\"calc+arraydraw\\\"},y0:{valType:\\\"any\\\",editType:\\\"calc+arraydraw\\\"},y1:{valType:\\\"any\\\",editType:\\\"calc+arraydraw\\\"},path:{valType:\\\"string\\\",editType:\\\"calc+arraydraw\\\"},opacity:{valType:\\\"number\\\",min:0,max:1,dflt:1,editType:\\\"arraydraw\\\"},line:{color:s({},a.color,{editType:\\\"arraydraw\\\"}),width:s({},a.width,{editType:\\\"calc+arraydraw\\\"}),dash:s({},o,{editType:\\\"arraydraw\\\"}),editType:\\\"calc+arraydraw\\\"},fillcolor:{valType:\\\"color\\\",dflt:\\\"rgba(0,0,0,0)\\\",editType:\\\"arraydraw\\\"},fillrule:{valType:\\\"enumerated\\\",values:[\\\"evenodd\\\",\\\"nonzero\\\"],dflt:\\\"evenodd\\\",editType:\\\"arraydraw\\\"},editable:{valType:\\\"boolean\\\",dflt:!1,editType:\\\"calc+arraydraw\\\"},label:{text:{valType:\\\"string\\\",dflt:\\\"\\\",editType:\\\"arraydraw\\\"},texttemplate:u({},{keys:Object.keys(c)}),font:i({editType:\\\"calc+arraydraw\\\",colorEditType:\\\"arraydraw\\\"}),textposition:{valType:\\\"enumerated\\\",values:[\\\"top left\\\",\\\"top center\\\",\\\"top right\\\",\\\"middle left\\\",\\\"middle center\\\",\\\"middle right\\\",\\\"bottom left\\\",\\\"bottom center\\\",\\\"bottom right\\\",\\\"start\\\",\\\"middle\\\",\\\"end\\\"],editType:\\\"arraydraw\\\"},textangle:{valType:\\\"angle\\\",dflt:\\\"auto\\\",editType:\\\"calc+arraydraw\\\"},xanchor:{valType:\\\"enumerated\\\",values:[\\\"auto\\\",\\\"left\\\",\\\"center\\\",\\\"right\\\"],dflt:\\\"auto\\\",editType:\\\"calc+arraydraw\\\"},yanchor:{valType:\\\"enumerated\\\",values:[\\\"top\\\",\\\"middle\\\",\\\"bottom\\\"],editType:\\\"calc+arraydraw\\\"},padding:{valType:\\\"number\\\",dflt:3,min:0,editType:\\\"arraydraw\\\"},editType:\\\"arraydraw\\\"},editType:\\\"arraydraw\\\"})},5627:function(t,e,r){\\\"use strict\\\";var n=r(71828),i=r(89298),a=r(21459),o=r(30477);function s(t){return u(t.line.width,t.xsizemode,t.x0,t.x1,t.path,!1)}function l(t){return u(t.line.width,t.ysizemode,t.y0,t.y1,t.path,!0)}function u(t,e,r,i,s,l){var u=t/2,c=l;if(\\\"pixel\\\"===e){var f=s?o.extractPathCoords(s,l?a.paramIsY:a.paramIsX):[r,i],h=n.aggNums(Math.max,null,f),p=n.aggNums(Math.min,null,f),d=p<0?Math.abs(p)+u:u,v=h>0?h+u:u;return{ppad:u,ppadplus:c?d:v,ppadminus:c?v:d}}return{ppad:u}}function c(t,e,r,n,i){var s=\\\"category\\\"===t.type||\\\"multicategory\\\"===t.type?t.r2c:t.d2c;if(void 0!==e)return[s(e),s(r)];if(n){var l,u,c,f,h=1/0,p=-1/0,d=n.match(a.segmentRE);for(\\\"date\\\"===t.type&&(s=o.decodeDate(s)),l=0;l<d.length;l++)void 0!==(u=i[d[l].charAt(0)].drawn)&&(!(c=d[l].substr(1).match(a.paramRE))||c.length<u||((f=s(c[u]))<h&&(h=f),f>p&&(p=f)));return p>=h?[h,p]:void 0}}t.exports=function(t){var e=t._fullLayout,r=n.filterVisible(e.shapes);if(r.length&&t._fullData.length)for(var o=0;o<r.length;o++){var u,f,h=r[o];h._extremes={};var p=i.getRefType(h.xref),d=i.getRefType(h.yref);if(\\\"paper\\\"!==h.xref&&\\\"domain\\\"!==p){var v=\\\"pixel\\\"===h.xsizemode?h.xanchor:h.x0,g=\\\"pixel\\\"===h.xsizemode?h.xanchor:h.x1;(f=c(u=i.getFromId(t,h.xref),v,g,h.path,a.paramIsX))&&(h._extremes[u._id]=i.findExtremes(u,f,s(h)))}if(\\\"paper\\\"!==h.yref&&\\\"domain\\\"!==d){var y=\\\"pixel\\\"===h.ysizemode?h.yanchor:h.y0,m=\\\"pixel\\\"===h.ysizemode?h.yanchor:h.y1;(f=c(u=i.getFromId(t,h.yref),y,m,h.path,a.paramIsY))&&(h._extremes[u._id]=i.findExtremes(u,f,l(h)))}}}},21459:function(t){\\\"use strict\\\";t.exports={segmentRE:/[MLHVQCTSZ][^MLHVQCTSZ]*/g,paramRE:/[^\\\\s,]+/g,paramIsX:{M:{0:!0,drawn:0},L:{0:!0,drawn:0},H:{0:!0,drawn:0},V:{},Q:{0:!0,2:!0,drawn:2},C:{0:!0,2:!0,4:!0,drawn:4},T:{0:!0,drawn:0},S:{0:!0,2:!0,drawn:2},Z:{}},paramIsY:{M:{1:!0,drawn:1},L:{1:!0,drawn:1},H:{},V:{0:!0,drawn:0},Q:{1:!0,3:!0,drawn:3},C:{1:!0,3:!0,5:!0,drawn:5},T:{1:!0,drawn:1},S:{1:!0,3:!0,drawn:5},Z:{}},numParams:{M:2,L:2,H:1,V:1,Q:4,C:6,T:2,S:4,Z:0}}},84726:function(t,e,r){\\\"use strict\\\";var n=r(71828),i=r(89298),a=r(85501),o=r(89827),s=r(30477);function l(t,e,r){function a(r,i){return n.coerce(t,e,o,r,i)}if(a(\\\"visible\\\")){var l=a(\\\"path\\\"),u=a(\\\"type\\\",l?\\\"path\\\":\\\"rect\\\"),c=\\\"path\\\"!==u;c&&delete e.path,a(\\\"editable\\\"),a(\\\"layer\\\"),a(\\\"opacity\\\"),a(\\\"fillcolor\\\"),a(\\\"fillrule\\\"),a(\\\"line.width\\\")&&(a(\\\"line.color\\\"),a(\\\"line.dash\\\"));for(var f=a(\\\"xsizemode\\\"),h=a(\\\"ysizemode\\\"),p=[\\\"x\\\",\\\"y\\\"],d=0;d<2;d++){var v,g,y,m=p[d],x=m+\\\"anchor\\\",b=\\\"x\\\"===m?f:h,_={_fullLayout:r},w=i.coerceRef(t,e,_,m,void 0,\\\"paper\\\");if(\\\"range\\\"===i.getRefType(w)?((v=i.getFromId(_,w))._shapeIndices.push(e._index),y=s.rangeToShapePosition(v),g=s.shapePositionToRange(v)):g=y=n.identity,c){var T=m+\\\"0\\\",k=m+\\\"1\\\",A=t[T],M=t[k];t[T]=g(t[T],!0),t[k]=g(t[k],!0),\\\"pixel\\\"===b?(a(T,0),a(k,10)):(i.coercePosition(e,_,a,w,T,.25),i.coercePosition(e,_,a,w,k,.75)),e[T]=y(e[T]),e[k]=y(e[k]),t[T]=A,t[k]=M}if(\\\"pixel\\\"===b){var S=t[x];t[x]=g(t[x],!0),i.coercePosition(e,_,a,w,x,.25),e[x]=y(e[x]),t[x]=S}}c&&n.noneOrAll(t,e,[\\\"x0\\\",\\\"x1\\\",\\\"y0\\\",\\\"y1\\\"]);var E,L,C=\\\"line\\\"===u;if(c&&(E=a(\\\"label.texttemplate\\\")),E||(L=a(\\\"label.text\\\")),L||E){a(\\\"label.textangle\\\");var P=a(\\\"label.textposition\\\",C?\\\"middle\\\":\\\"middle center\\\");a(\\\"label.xanchor\\\"),a(\\\"label.yanchor\\\",function(t,e){return t?\\\"bottom\\\":-1!==e.indexOf(\\\"top\\\")?\\\"top\\\":-1!==e.indexOf(\\\"bottom\\\")?\\\"bottom\\\":\\\"middle\\\"}(C,P)),a(\\\"label.padding\\\"),n.coerceFont(a,\\\"label.font\\\",r.font)}}}t.exports=function(t,e){a(t,e,{name:\\\"shapes\\\",handleItemDefaults:l})}},48100:function(t,e,r){\\\"use strict\\\";var n=r(71828),i=r(89298),a=r(63893),o=r(91424),s=r(60165).readPaths,l=r(30477),u=l.getPathString,c=r(37281),f=r(18783).FROM_TL;t.exports=function(t,e,r,h){if(h.selectAll(\\\".shape-label\\\").remove(),r.label.text||r.label.texttemplate){var p;if(r.label.texttemplate){var d={};if(\\\"path\\\"!==r.type){var v=i.getFromId(t,r.xref),g=i.getFromId(t,r.yref);for(var y in c){var m=c[y](r,v,g);void 0!==m&&(d[y]=m)}}p=n.texttemplateStringForShapes(r.label.texttemplate,{},t._fullLayout._d3locale,d)}else p=r.label.text;var x,b,_,w,T={\\\"data-index\\\":e},k=r.label.font,A=h.append(\\\"g\\\").attr(T).classed(\\\"shape-label\\\",!0).append(\\\"text\\\").attr({\\\"data-notex\\\":1}).classed(\\\"shape-label-text\\\",!0).text(p);if(r.path){var M=u(t,r),S=s(M,t);x=1/0,_=1/0,b=-1/0,w=-1/0;for(var E=0;E<S.length;E++)for(var L=0;L<S[E].length;L++)for(var C=S[E][L],P=1;P<C.length;P+=2){var O=C[P],I=C[P+1];x=Math.min(x,O),b=Math.max(b,O),_=Math.min(_,I),w=Math.max(w,I)}}else{var D=i.getFromId(t,r.xref),z=i.getRefType(r.xref),R=i.getFromId(t,r.yref),F=i.getRefType(r.yref),B=l.getDataToPixel(t,D,!1,z),N=l.getDataToPixel(t,R,!0,F);x=B(r.x0),b=B(r.x1),_=N(r.y0),w=N(r.y1)}var j=r.label.textangle;\\\"auto\\\"===j&&(j=\\\"line\\\"===r.type?function(t,e,r,n){var i,a;return a=Math.abs(r-t),i=r>=t?e-n:n-e,-180/Math.PI*Math.atan2(i,a)}(x,_,b,w):0),A.call((function(e){return e.call(o.font,k).attr({}),a.convertToTspans(e,t),e}));var U=function(t,e,r,n,i,a,o){var s,l,u,c,h=i.label.textposition,p=i.label.textangle,d=i.label.padding,v=i.type,g=Math.PI/180*a,y=Math.sin(g),m=Math.cos(g),x=i.label.xanchor,b=i.label.yanchor;if(\\\"line\\\"===v){\\\"start\\\"===h?(s=t,l=e):\\\"end\\\"===h?(s=r,l=n):(s=(t+r)/2,l=(e+n)/2),\\\"auto\\\"===x&&(x=\\\"start\\\"===h?\\\"auto\\\"===p?r>t?\\\"left\\\":r<t?\\\"right\\\":\\\"center\\\":r>t?\\\"right\\\":r<t?\\\"left\\\":\\\"center\\\":\\\"end\\\"===h?\\\"auto\\\"===p?r>t?\\\"right\\\":r<t?\\\"left\\\":\\\"center\\\":r>t?\\\"left\\\":r<t?\\\"right\\\":\\\"center\\\":\\\"center\\\");var _={bottom:-1,middle:0,top:1};if(\\\"auto\\\"===p){var w=_[b];u=-d*y*w,c=d*m*w}else u=d*{left:1,center:0,right:-1}[x],c=d*_[b];s+=u,l+=c}else u=d+3,-1!==h.indexOf(\\\"right\\\")?(s=Math.max(t,r)-u,\\\"auto\\\"===x&&(x=\\\"right\\\")):-1!==h.indexOf(\\\"left\\\")?(s=Math.min(t,r)+u,\\\"auto\\\"===x&&(x=\\\"left\\\")):(s=(t+r)/2,\\\"auto\\\"===x&&(x=\\\"center\\\")),l=-1!==h.indexOf(\\\"top\\\")?Math.min(e,n):-1!==h.indexOf(\\\"bottom\\\")?Math.max(e,n):(e+n)/2,c=d,\\\"bottom\\\"===b?l-=c:\\\"top\\\"===b&&(l+=c);var T=f[b],k=i.label.font.size,A=o.height;return{textx:s+(A*T-k)*y,texty:l+-(A*T-k)*m,xanchor:x}}(x,_,b,w,r,j,o.bBox(A.node())),V=U.textx,H=U.texty,q=U.xanchor;A.attr({\\\"text-anchor\\\":{left:\\\"start\\\",center:\\\"middle\\\",right:\\\"end\\\"}[q],y:H,x:V,transform:\\\"rotate(\\\"+j+\\\",\\\"+V+\\\",\\\"+H+\\\")\\\"}).call(a.positionText,V,H)}}},42359:function(t,e,r){\\\"use strict\\\";var n=r(71828).strTranslate,i=r(28569),a=r(64505),o=a.drawMode,s=a.selectMode,l=r(73972),u=r(7901),c=r(89995),f=c.i000,h=c.i090,p=c.i180,d=c.i270,v=r(51873).clearOutlineControllers,g=r(60165),y=g.pointsOnRectangle,m=g.pointsOnEllipse,x=g.writePaths,b=r(90551).newShapes,_=r(90551).createShapeObj,w=r(35855),T=r(48100);function k(t,e){var r,n,i,a=t[e][1],o=t[e][2],s=t.length;return n=t[r=(e+1)%s][1],i=t[r][2],n===a&&i===o&&(n=t[r=(e+2)%s][1],i=t[r][2]),[r,n,i]}t.exports=function t(e,r,a,c){c||(c=0);var g=a.gd;function A(){t(e,r,a,c++),(m(e[0])||a.hasText)&&M({redrawing:!0})}function M(t){var e={};void 0!==a.isActiveShape&&(a.isActiveShape=!1,e=b(r,a)),void 0!==a.isActiveSelection&&(a.isActiveSelection=!1,e=w(r,a),g._fullLayout._reselect=!0),Object.keys(e).length&&l.call((t||{}).redrawing?\\\"relayout\\\":\\\"_guiRelayout\\\",g,e)}var S,E,L,C,P,O=g._fullLayout._zoomlayer,I=a.dragmode,D=o(I),z=s(I);if((D||z)&&(g._fullLayout._outlining=!0),v(g),r.attr(\\\"d\\\",x(e)),c||!a.isActiveShape&&!a.isActiveSelection||(P=function(t,e){for(var r=0;r<e.length;r++){var n=e[r];t[r]=[];for(var i=0;i<n.length;i++){t[r][i]=[];for(var a=0;a<n[i].length;a++)t[r][i][a]=n[i][a]}}return t}([],e),function(t){S=[];for(var r=0;r<e.length;r++){var o=e[r],s=y(o),l=!s&&m(o);S[r]=[];for(var c=o.length,v=0;v<c;v++)if(\\\"Z\\\"!==o[v][0]&&(!l||v===f||v===h||v===p||v===d)){var x,b=s&&a.isActiveSelection;b&&(x=k(o,v));var _=o[v][1],w=o[v][2],T=t.append(b?\\\"rect\\\":\\\"circle\\\").attr(\\\"data-i\\\",r).attr(\\\"data-j\\\",v).style({fill:u.background,stroke:u.defaultLine,\\\"stroke-width\\\":1,\\\"shape-rendering\\\":\\\"crispEdges\\\"});if(b){var A=x[1]-_,M=x[2]-w,E=M?5:Math.max(Math.min(25,Math.abs(A)-5),5),L=A?5:Math.max(Math.min(25,Math.abs(M)-5),5);T.classed(M?\\\"cursor-ew-resize\\\":\\\"cursor-ns-resize\\\",!0).attr(\\\"width\\\",E).attr(\\\"height\\\",L).attr(\\\"x\\\",_-E/2).attr(\\\"y\\\",w-L/2).attr(\\\"transform\\\",n(A/2,M/2))}else T.classed(\\\"cursor-grab\\\",!0).attr(\\\"r\\\",5).attr(\\\"cx\\\",_).attr(\\\"cy\\\",w);S[r][v]={element:T.node(),gd:g,prepFn:B,doneFn:j,clickFn:U},i.init(S[r][v])}}}(O.append(\\\"g\\\").attr(\\\"class\\\",\\\"outline-controllers\\\")),function(){if(E=[],e.length){E[0]={element:r[0][0],gd:g,prepFn:H,doneFn:q,clickFn:G},i.init(E[0])}}()),D&&a.hasText){var R=O.select(\\\".label-temp\\\"),F=_(r,a,a.dragmode);T(g,\\\"label-temp\\\",F,R)}function B(t){L=+t.srcElement.getAttribute(\\\"data-i\\\"),C=+t.srcElement.getAttribute(\\\"data-j\\\"),S[L][C].moveFn=N}function N(t,r){if(e.length){var n=P[L][C][1],i=P[L][C][2],o=e[L],s=o.length;if(y(o)){var l=t,u=r;a.isActiveSelection&&(k(o,C)[1]===o[C][1]?u=0:l=0);for(var c=0;c<s;c++)if(c!==C){var f=o[c];f[1]===o[C][1]&&(f[1]=n+l),f[2]===o[C][2]&&(f[2]=i+u)}if(o[C][1]=n+l,o[C][2]=i+u,!y(o))for(var h=0;h<s;h++)for(var p=0;p<o[h].length;p++)o[h][p]=P[L][h][p]}else o[C][1]=n+t,o[C][2]=i+r;A()}}function j(){M()}function U(t,r){if(2===t){L=+r.srcElement.getAttribute(\\\"data-i\\\"),C=+r.srcElement.getAttribute(\\\"data-j\\\");var n=e[L];y(n)||m(n)||function(){if(e.length&&e[L]&&e[L].length){for(var t=[],r=0;r<e[L].length;r++)r!==C&&t.push(e[L][r]);t.length>1&&(2!==t.length||\\\"Z\\\"!==t[1][0])&&(0===C&&(t[0][0]=\\\"M\\\"),e[L]=t,A(),M())}}()}}function V(t,r){!function(t,r){if(e.length)for(var n=0;n<e.length;n++)for(var i=0;i<e[n].length;i++)for(var a=0;a+2<e[n][i].length;a+=2)e[n][i][a+1]=P[n][i][a+1]+t,e[n][i][a+2]=P[n][i][a+2]+r}(t,r),A()}function H(t){(L=+t.srcElement.getAttribute(\\\"data-i\\\"))||(L=0),E[L].moveFn=V}function q(){M()}function G(t){2===t&&function(t){if(s(t._fullLayout.dragmode)){v(t);var e=t._fullLayout._activeSelectionIndex,r=(t.layout||{}).selections||[];if(e<r.length){for(var n=[],i=0;i<r.length;i++)i!==e&&n.push(r[i]);delete t._fullLayout._activeSelectionIndex;var a=t._fullLayout.selections[e];t._fullLayout._deselect={xref:a.xref,yref:a.yref},l.call(\\\"_guiRelayout\\\",t,{selections:n})}}}(g)}}},34031:function(t,e,r){\\\"use strict\\\";var n=r(39898),i=r(73972),a=r(71828),o=r(89298),s=r(60165).readPaths,l=r(42359),u=r(48100),c=r(51873).clearOutlineControllers,f=r(7901),h=r(91424),p=r(44467).arrayEditor,d=r(28569),v=r(6964),g=r(21459),y=r(30477),m=y.getPathString;function x(t){var e=t._fullLayout;for(var r in e._shapeUpperLayer.selectAll(\\\"path\\\").remove(),e._shapeLowerLayer.selectAll(\\\"path\\\").remove(),e._shapeUpperLayer.selectAll(\\\"text\\\").remove(),e._shapeLowerLayer.selectAll(\\\"text\\\").remove(),e._plots){var n=e._plots[r].shapelayer;n&&(n.selectAll(\\\"path\\\").remove(),n.selectAll(\\\"text\\\").remove())}for(var i=0;i<e.shapes.length;i++)e.shapes[i].visible&&w(t,i)}function b(t){return!!t._fullLayout._outlining}function _(t){return!t._context.edits.shapePosition}function w(t,e){t._fullLayout._paperdiv.selectAll('.shapelayer [data-index=\\\"'+e+'\\\"]').remove();var r=y.makeShapesOptionsAndPlotinfo(t,e),c=r.options,w=r.plotinfo;function M(r){var M=m(t,c),S={\\\"data-index\\\":e,\\\"fill-rule\\\":c.fillrule,d:M},E=c.opacity,L=c.fillcolor,C=c.line.width?c.line.color:\\\"rgba(0,0,0,0)\\\",P=c.line.width,O=c.line.dash;P||!0!==c.editable||(P=5,O=\\\"solid\\\");var I=\\\"Z\\\"!==M[M.length-1],D=_(t)&&c.editable&&t._fullLayout._activeShapeIndex===e;D&&(L=I?\\\"rgba(0,0,0,0)\\\":t._fullLayout.activeshape.fillcolor,E=t._fullLayout.activeshape.opacity);var z,R=r.append(\\\"g\\\").classed(\\\"shape-group\\\",!0).attr({\\\"data-index\\\":e}),F=R.append(\\\"path\\\").attr(S).style(\\\"opacity\\\",E).call(f.stroke,C).call(f.fill,L).call(h.dashLine,O,P);if(T(R,t,c),u(t,e,c,R),(D||t._context.edits.shapePosition)&&(z=p(t.layout,\\\"shapes\\\",c)),D){F.style({cursor:\\\"move\\\"});var B={element:F.node(),plotinfo:w,gd:t,editHelpers:z,hasText:c.label.text||c.label.texttemplate,isActiveShape:!0},N=s(M,t);l(N,F,B)}else t._context.edits.shapePosition?function(t,e,r,s,l,c){var f,p,x,_,w,A,M,S,E,L,C,P,O,I,D,z,R=10,F=10,B=\\\"pixel\\\"===r.xsizemode,N=\\\"pixel\\\"===r.ysizemode,j=\\\"line\\\"===r.type,U=\\\"path\\\"===r.type,V=c.modifyItem,H=n.select(e.node().parentNode),q=o.getFromId(t,r.xref),G=o.getRefType(r.xref),Z=o.getFromId(t,r.yref),Y=o.getRefType(r.yref),W=y.getDataToPixel(t,q,!1,G),X=y.getDataToPixel(t,Z,!0,Y),J=y.getPixelToData(t,q,!1,G),K=y.getPixelToData(t,Z,!0,Y),$=j?function(){var t=10,n=Math.max(r.line.width,t),i=l.append(\\\"g\\\").attr(\\\"data-index\\\",s).attr(\\\"drag-helper\\\",!0);i.append(\\\"path\\\").attr(\\\"d\\\",e.attr(\\\"d\\\")).style({cursor:\\\"move\\\",\\\"stroke-width\\\":n,\\\"stroke-opacity\\\":\\\"0\\\"});var a={\\\"fill-opacity\\\":\\\"0\\\"},o=Math.max(n/2,t);return i.append(\\\"circle\\\").attr({\\\"data-line-point\\\":\\\"start-point\\\",cx:B?W(r.xanchor)+r.x0:W(r.x0),cy:N?X(r.yanchor)-r.y0:X(r.y0),r:o}).style(a).classed(\\\"cursor-grab\\\",!0),i.append(\\\"circle\\\").attr({\\\"data-line-point\\\":\\\"end-point\\\",cx:B?W(r.xanchor)+r.x1:W(r.x1),cy:N?X(r.yanchor)-r.y1:X(r.y1),r:o}).style(a).classed(\\\"cursor-grab\\\",!0),i}():e,Q={element:$.node(),gd:t,prepFn:function(n){b(t)||(B&&(w=W(r.xanchor)),N&&(A=X(r.yanchor)),\\\"path\\\"===r.type?D=r.path:(f=B?r.x0:W(r.x0),p=N?r.y0:X(r.y0),x=B?r.x1:W(r.x1),_=N?r.y1:X(r.y1)),f<x?(E=f,O=\\\"x0\\\",L=x,I=\\\"x1\\\"):(E=x,O=\\\"x1\\\",L=f,I=\\\"x0\\\"),!N&&p<_||N&&p>_?(M=p,C=\\\"y0\\\",S=_,P=\\\"y1\\\"):(M=_,C=\\\"y1\\\",S=p,P=\\\"y0\\\"),tt(n),nt(l,r),function(t,e,r){var n=e.xref,i=e.yref,a=o.getFromId(r,n),s=o.getFromId(r,i),l=\\\"\\\";\\\"paper\\\"===n||a.autorange||(l+=n),\\\"paper\\\"===i||s.autorange||(l+=i),h.setClipUrl(t,l?\\\"clip\\\"+r._fullLayout._uid+l:null,r)}(e,r,t),Q.moveFn=\\\"move\\\"===z?et:rt,Q.altKey=n.altKey)},doneFn:function(){b(t)||(v(e),it(l),T(e,t,r),i.call(\\\"_guiRelayout\\\",t,c.getUpdateObj()))},clickFn:function(){b(t)||it(l)}};function tt(r){if(b(t))z=null;else if(j)z=\\\"path\\\"===r.target.tagName?\\\"move\\\":\\\"start-point\\\"===r.target.attributes[\\\"data-line-point\\\"].value?\\\"resize-over-start-point\\\":\\\"resize-over-end-point\\\";else{var n=Q.element.getBoundingClientRect(),i=n.right-n.left,a=n.bottom-n.top,o=r.clientX-n.left,s=r.clientY-n.top,l=!U&&i>R&&a>F&&!r.shiftKey?d.getCursor(o/i,1-s/a):\\\"move\\\";v(e,l),z=l.split(\\\"-\\\")[0]}}function et(n,i){if(\\\"path\\\"===r.type){var a=function(t){return t},o=a,c=a;B?V(\\\"xanchor\\\",r.xanchor=J(w+n)):(o=function(t){return J(W(t)+n)},q&&\\\"date\\\"===q.type&&(o=y.encodeDate(o))),N?V(\\\"yanchor\\\",r.yanchor=K(A+i)):(c=function(t){return K(X(t)+i)},Z&&\\\"date\\\"===Z.type&&(c=y.encodeDate(c))),V(\\\"path\\\",r.path=k(D,o,c))}else B?V(\\\"xanchor\\\",r.xanchor=J(w+n)):(V(\\\"x0\\\",r.x0=J(f+n)),V(\\\"x1\\\",r.x1=J(x+n))),N?V(\\\"yanchor\\\",r.yanchor=K(A+i)):(V(\\\"y0\\\",r.y0=K(p+i)),V(\\\"y1\\\",r.y1=K(_+i)));e.attr(\\\"d\\\",m(t,r)),nt(l,r),u(t,s,r,H)}function rt(n,i){if(U){var a=function(t){return t},o=a,c=a;B?V(\\\"xanchor\\\",r.xanchor=J(w+n)):(o=function(t){return J(W(t)+n)},q&&\\\"date\\\"===q.type&&(o=y.encodeDate(o))),N?V(\\\"yanchor\\\",r.yanchor=K(A+i)):(c=function(t){return K(X(t)+i)},Z&&\\\"date\\\"===Z.type&&(c=y.encodeDate(c))),V(\\\"path\\\",r.path=k(D,o,c))}else if(j){if(\\\"resize-over-start-point\\\"===z){var h=f+n,d=N?p-i:p+i;V(\\\"x0\\\",r.x0=B?h:J(h)),V(\\\"y0\\\",r.y0=N?d:K(d))}else if(\\\"resize-over-end-point\\\"===z){var v=x+n,g=N?_-i:_+i;V(\\\"x1\\\",r.x1=B?v:J(v)),V(\\\"y1\\\",r.y1=N?g:K(g))}}else{var b=function(t){return-1!==z.indexOf(t)},T=b(\\\"n\\\"),G=b(\\\"s\\\"),Y=b(\\\"w\\\"),$=b(\\\"e\\\"),Q=T?M+i:M,tt=G?S+i:S,et=Y?E+n:E,rt=$?L+n:L;N&&(T&&(Q=M-i),G&&(tt=S-i)),(!N&&tt-Q>F||N&&Q-tt>F)&&(V(C,r[C]=N?Q:K(Q)),V(P,r[P]=N?tt:K(tt))),rt-et>R&&(V(O,r[O]=B?et:J(et)),V(I,r[I]=B?rt:J(rt)))}e.attr(\\\"d\\\",m(t,r)),nt(l,r),u(t,s,r,H)}function nt(t,e){(B||N)&&function(){var r=\\\"path\\\"!==e.type,n=t.selectAll(\\\".visual-cue\\\").data([0]);n.enter().append(\\\"path\\\").attr({fill:\\\"#fff\\\",\\\"fill-rule\\\":\\\"evenodd\\\",stroke:\\\"#000\\\",\\\"stroke-width\\\":1}).classed(\\\"visual-cue\\\",!0);var i=W(B?e.xanchor:a.midRange(r?[e.x0,e.x1]:y.extractPathCoords(e.path,g.paramIsX))),o=X(N?e.yanchor:a.midRange(r?[e.y0,e.y1]:y.extractPathCoords(e.path,g.paramIsY)));if(i=y.roundPositionForSharpStrokeRendering(i,1),o=y.roundPositionForSharpStrokeRendering(o,1),B&&N){var s=\\\"M\\\"+(i-1-1)+\\\",\\\"+(o-1-1)+\\\"h-8v2h8 v8h2v-8 h8v-2h-8 v-8h-2 Z\\\";n.attr(\\\"d\\\",s)}else if(B){var l=\\\"M\\\"+(i-1-1)+\\\",\\\"+(o-9-1)+\\\"v18 h2 v-18 Z\\\";n.attr(\\\"d\\\",l)}else{var u=\\\"M\\\"+(i-9-1)+\\\",\\\"+(o-1-1)+\\\"h18 v2 h-18 Z\\\";n.attr(\\\"d\\\",u)}}()}function it(t){t.selectAll(\\\".visual-cue\\\").remove()}d.init(Q),$.node().onmousemove=tt}(t,F,c,e,r,z):!0===c.editable&&F.style(\\\"pointer-events\\\",I||f.opacity(L)*E<=.5?\\\"stroke\\\":\\\"all\\\");F.node().addEventListener(\\\"click\\\",(function(){return function(t,e){if(_(t)){var r=+e.node().getAttribute(\\\"data-index\\\");if(r>=0){if(r===t._fullLayout._activeShapeIndex)return void A(t);t._fullLayout._activeShapeIndex=r,t._fullLayout._deactivateShape=A,x(t)}}}(t,F)}))}c._input&&!1!==c.visible&&(\\\"below\\\"!==c.layer?M(t._fullLayout._shapeUpperLayer):\\\"paper\\\"===c.xref||\\\"paper\\\"===c.yref?M(t._fullLayout._shapeLowerLayer):w._hadPlotinfo?M((w.mainplotinfo||w).shapelayer):M(t._fullLayout._shapeLowerLayer))}function T(t,e,r){var n=(r.xref+r.yref).replace(/paper/g,\\\"\\\").replace(/[xyz][1-9]* *domain/g,\\\"\\\");h.setClipUrl(t,n?\\\"clip\\\"+e._fullLayout._uid+n:null,e)}function k(t,e,r){return t.replace(g.segmentRE,(function(t){var n=0,i=t.charAt(0),a=g.paramIsX[i],o=g.paramIsY[i],s=g.numParams[i];return i+t.substr(1).replace(g.paramRE,(function(t){return n>=s||(a[n]?t=e(t):o[n]&&(t=r(t)),n++),t}))}))}function A(t){_(t)&&t._fullLayout._activeShapeIndex>=0&&(c(t),delete t._fullLayout._activeShapeIndex,x(t))}t.exports={draw:x,drawOne:w,eraseActiveShape:function(t){if(_(t)){c(t);var e=t._fullLayout._activeShapeIndex,r=(t.layout||{}).shapes||[];if(e<r.length){for(var n=[],a=0;a<r.length;a++)a!==e&&n.push(r[a]);delete t._fullLayout._activeShapeIndex,i.call(\\\"_guiRelayout\\\",t,{shapes:n})}}},drawLabel:u}},29241:function(t,e,r){\\\"use strict\\\";var n=r(41940),i=r(79952).P,a=r(1426).extendFlat,o=r(5386).R,s=r(37281);t.exports={newshape:{line:{color:{valType:\\\"color\\\",editType:\\\"none\\\"},width:{valType:\\\"number\\\",min:0,dflt:4,editType:\\\"none\\\"},dash:a({},i,{dflt:\\\"solid\\\",editType:\\\"none\\\"}),editType:\\\"none\\\"},fillcolor:{valType:\\\"color\\\",dflt:\\\"rgba(0,0,0,0)\\\",editType:\\\"none\\\"},fillrule:{valType:\\\"enumerated\\\",values:[\\\"evenodd\\\",\\\"nonzero\\\"],dflt:\\\"evenodd\\\",editType:\\\"none\\\"},opacity:{valType:\\\"number\\\",min:0,max:1,dflt:1,editType:\\\"none\\\"},layer:{valType:\\\"enumerated\\\",values:[\\\"below\\\",\\\"above\\\"],dflt:\\\"above\\\",editType:\\\"none\\\"},drawdirection:{valType:\\\"enumerated\\\",values:[\\\"ortho\\\",\\\"horizontal\\\",\\\"vertical\\\",\\\"diagonal\\\"],dflt:\\\"diagonal\\\",editType:\\\"none\\\"},label:{text:{valType:\\\"string\\\",dflt:\\\"\\\",editType:\\\"none\\\"},texttemplate:o({newshape:!0,editType:\\\"none\\\"},{keys:Object.keys(s)}),font:n({editType:\\\"none\\\"}),textposition:{valType:\\\"enumerated\\\",values:[\\\"top left\\\",\\\"top center\\\",\\\"top right\\\",\\\"middle left\\\",\\\"middle center\\\",\\\"middle right\\\",\\\"bottom left\\\",\\\"bottom center\\\",\\\"bottom right\\\",\\\"start\\\",\\\"middle\\\",\\\"end\\\"],editType:\\\"none\\\"},textangle:{valType:\\\"angle\\\",dflt:\\\"auto\\\",editType:\\\"none\\\"},xanchor:{valType:\\\"enumerated\\\",values:[\\\"auto\\\",\\\"left\\\",\\\"center\\\",\\\"right\\\"],dflt:\\\"auto\\\",editType:\\\"none\\\"},yanchor:{valType:\\\"enumerated\\\",values:[\\\"top\\\",\\\"middle\\\",\\\"bottom\\\"],editType:\\\"none\\\"},padding:{valType:\\\"number\\\",dflt:3,min:0,editType:\\\"none\\\"},editType:\\\"none\\\"},editType:\\\"none\\\"},activeshape:{fillcolor:{valType:\\\"color\\\",dflt:\\\"rgb(255,0,255)\\\",editType:\\\"none\\\"},opacity:{valType:\\\"number\\\",min:0,max:1,dflt:.5,editType:\\\"none\\\"},editType:\\\"none\\\"}}},89995:function(t){\\\"use strict\\\";t.exports={CIRCLE_SIDES:32,i000:0,i090:8,i180:16,i270:24,cos45:Math.cos(Math.PI/4),sin45:Math.sin(Math.PI/4),SQRT2:Math.sqrt(2)}},45547:function(t,e,r){\\\"use strict\\\";var n=r(7901),i=r(71828);t.exports=function(t,e,r){if(r(\\\"newshape.drawdirection\\\"),r(\\\"newshape.layer\\\"),r(\\\"newshape.fillcolor\\\"),r(\\\"newshape.fillrule\\\"),r(\\\"newshape.opacity\\\"),r(\\\"newshape.line.width\\\")){var a=(t||{}).plot_bgcolor||\\\"#FFF\\\";r(\\\"newshape.line.color\\\",n.contrast(a)),r(\\\"newshape.line.dash\\\")}var o=\\\"drawline\\\"===t.dragmode,s=r(\\\"newshape.label.text\\\"),l=r(\\\"newshape.label.texttemplate\\\");if(s||l){r(\\\"newshape.label.textangle\\\");var u=r(\\\"newshape.label.textposition\\\",o?\\\"middle\\\":\\\"middle center\\\");r(\\\"newshape.label.xanchor\\\"),r(\\\"newshape.label.yanchor\\\",function(t,e){return t?\\\"bottom\\\":-1!==e.indexOf(\\\"top\\\")?\\\"top\\\":-1!==e.indexOf(\\\"bottom\\\")?\\\"bottom\\\":\\\"middle\\\"}(o,u)),r(\\\"newshape.label.padding\\\"),i.coerceFont(r,\\\"newshape.label.font\\\",e.font)}r(\\\"activeshape.fillcolor\\\"),r(\\\"activeshape.opacity\\\")}},60165:function(t,e,r){\\\"use strict\\\";var n=r(95616),i=r(89995),a=i.CIRCLE_SIDES,o=i.SQRT2,s=r(75549),l=s.p2r,u=s.r2p,c=[0,3,4,5,6,1,2],f=[0,3,4,1,2];function h(t,e){return Math.abs(t-e)<=1e-6}function p(t,e){var r=e[1]-t[1],n=e[2]-t[2];return Math.sqrt(r*r+n*n)}e.writePaths=function(t){var e=t.length;if(!e)return\\\"M0,0Z\\\";for(var r=\\\"\\\",n=0;n<e;n++)for(var i=t[n].length,a=0;a<i;a++){var o=t[n][a][0];if(\\\"Z\\\"===o)r+=\\\"Z\\\";else for(var s=t[n][a].length,l=0;l<s;l++){var u=l;\\\"Q\\\"===o||\\\"S\\\"===o?u=f[l]:\\\"C\\\"===o&&(u=c[l]),r+=t[n][a][u],l>0&&l<s-1&&(r+=\\\",\\\")}}return r},e.readPaths=function(t,e,r,i){var o,s,c,f=n(t),h=[],p=-1,d=0,v=0,g=function(){s=d,c=v};g();for(var y=0;y<f.length;y++){var m,x,b,_,w=[],T=f[y][0],k=T;switch(T){case\\\"M\\\":h[++p]=[],d=+f[y][1],v=+f[y][2],w.push([k,d,v]),g();break;case\\\"Q\\\":case\\\"S\\\":m=+f[y][1],b=+f[y][2],d=+f[y][3],v=+f[y][4],w.push([k,d,v,m,b]);break;case\\\"C\\\":m=+f[y][1],b=+f[y][2],x=+f[y][3],_=+f[y][4],d=+f[y][5],v=+f[y][6],w.push([k,d,v,m,b,x,_]);break;case\\\"T\\\":case\\\"L\\\":d=+f[y][1],v=+f[y][2],w.push([k,d,v]);break;case\\\"H\\\":k=\\\"L\\\",d=+f[y][1],w.push([k,d,v]);break;case\\\"V\\\":k=\\\"L\\\",v=+f[y][1],w.push([k,d,v]);break;case\\\"A\\\":k=\\\"L\\\";var A=+f[y][1],M=+f[y][2];+f[y][4]||(A=-A,M=-M);var S=d-A,E=v;for(o=1;o<=a/2;o++){var L=2*Math.PI*o/a;w.push([k,S+A*Math.cos(L),E+M*Math.sin(L)])}break;case\\\"Z\\\":d===s&&v===c||(d=s,v=c,w.push([k,d,v]))}for(var C=(r||{}).domain,P=e._fullLayout._size,O=r&&\\\"pixel\\\"===r.xsizemode,I=r&&\\\"pixel\\\"===r.ysizemode,D=!1===i,z=0;z<w.length;z++){for(o=0;o+2<7;o+=2){var R=w[z][o+1],F=w[z][o+2];void 0!==R&&void 0!==F&&(d=R,v=F,r&&(r.xaxis&&r.xaxis.p2r?(D&&(R-=r.xaxis._offset),R=O?u(r.xaxis,r.xanchor)+R:l(r.xaxis,R)):(D&&(R-=P.l),C?R=C.x[0]+R/P.w:R/=P.w),r.yaxis&&r.yaxis.p2r?(D&&(F-=r.yaxis._offset),F=I?u(r.yaxis,r.yanchor)-F:l(r.yaxis,F)):(D&&(F-=P.t),F=C?C.y[1]-F/P.h:1-F/P.h)),w[z][o+1]=R,w[z][o+2]=F)}h[p].push(w[z].slice())}}return h},e.pointsOnRectangle=function(t){if(5!==t.length)return!1;for(var e=1;e<3;e++){if(!h(t[0][e]-t[1][e],t[3][e]-t[2][e]))return!1;if(!h(t[0][e]-t[3][e],t[1][e]-t[2][e]))return!1}return!(!h(t[0][1],t[1][1])&&!h(t[0][1],t[3][1])||!(p(t[0],t[1])*p(t[0],t[3])))},e.pointsOnEllipse=function(t){var e=t.length;if(e!==a+1)return!1;e=a;for(var r=0;r<e;r++){var n=(2*e-r)%e,i=(e/2+n)%e,o=(e/2+r)%e;if(!h(p(t[r],t[o]),p(t[n],t[i])))return!1}return!0},e.handleEllipse=function(t,r,n){if(!t)return[r,n];var i=e.ellipseOver({x0:r[0],y0:r[1],x1:n[0],y1:n[1]}),s=(i.x1+i.x0)/2,l=(i.y1+i.y0)/2,u=(i.x1-i.x0)/2,c=(i.y1-i.y0)/2;u||(u=c/=o),c||(c=u/=o);for(var f=[],h=0;h<a;h++){var p=2*h*Math.PI/a;f.push([s+u*Math.cos(p),l+c*Math.sin(p)])}return f},e.ellipseOver=function(t){var e=t.x0,r=t.y0,n=t.x1,i=t.y1,a=n-e,s=i-r,l=((e-=a)+n)/2,u=((r-=s)+i)/2;return{x0:l-(a*=o),y0:u-(s*=o),x1:l+a,y1:u+s}},e.fixDatesForPaths=function(t,e,r){var n=\\\"date\\\"===e.type,i=\\\"date\\\"===r.type;if(!n&&!i)return t;for(var a=0;a<t.length;a++)for(var o=0;o<t[a].length;o++)for(var s=0;s+2<t[a][o].length;s+=2)n&&(t[a][o][s+1]=t[a][o][s+1].replace(\\\" \\\",\\\"_\\\")),i&&(t[a][o][s+2]=t[a][o][s+2].replace(\\\" \\\",\\\"_\\\"));return t}},90551:function(t,e,r){\\\"use strict\\\";var n=r(64505),i=n.drawMode,a=n.openMode,o=r(89995),s=o.i000,l=o.i090,u=o.i180,c=o.i270,f=o.cos45,h=o.sin45,p=r(75549),d=p.p2r,v=p.r2p,g=r(51873).clearOutline,y=r(60165),m=y.readPaths,x=y.writePaths,b=y.ellipseOver,_=y.fixDatesForPaths;function w(t,e,r){var n,i=t[0][0],o=e.gd,p=i.getAttribute(\\\"d\\\"),g=o._fullLayout.newshape,y=e.plotinfo,w=e.isActiveShape,T=y.xaxis,k=y.yaxis,A=!!y.domain||!y.xaxis,M=!!y.domain||!y.yaxis,S=a(r),E=m(p,o,y,w),L={editable:!0,label:g.label,xref:A?\\\"paper\\\":T._id,yref:M?\\\"paper\\\":k._id,layer:g.layer,opacity:g.opacity,line:{color:g.line.color,width:g.line.width,dash:g.line.dash}};if(S||(L.fillcolor=g.fillcolor,L.fillrule=g.fillrule),1===E.length&&(n=E[0]),n&&5===n.length&&\\\"drawrect\\\"===r)L.type=\\\"rect\\\",L.x0=n[0][1],L.y0=n[0][2],L.x1=n[2][1],L.y1=n[2][2];else if(n&&\\\"drawline\\\"===r)L.type=\\\"line\\\",L.x0=n[0][1],L.y0=n[0][2],L.x1=n[1][1],L.y1=n[1][2];else if(n&&\\\"drawcircle\\\"===r){L.type=\\\"circle\\\";var C=n[s][1],P=n[l][1],O=n[u][1],I=n[c][1],D=n[s][2],z=n[l][2],R=n[u][2],F=n[c][2],B=y.xaxis&&(\\\"date\\\"===y.xaxis.type||\\\"log\\\"===y.xaxis.type),N=y.yaxis&&(\\\"date\\\"===y.yaxis.type||\\\"log\\\"===y.yaxis.type);B&&(C=v(y.xaxis,C),P=v(y.xaxis,P),O=v(y.xaxis,O),I=v(y.xaxis,I)),N&&(D=v(y.yaxis,D),z=v(y.yaxis,z),R=v(y.yaxis,R),F=v(y.yaxis,F));var j=(P+I)/2,U=(D+R)/2,V=b({x0:j,y0:U,x1:j+(I-P+O-C)/2*f,y1:U+(F-z+R-D)/2*h});B&&(V.x0=d(y.xaxis,V.x0),V.x1=d(y.xaxis,V.x1)),N&&(V.y0=d(y.yaxis,V.y0),V.y1=d(y.yaxis,V.y1)),L.x0=V.x0,L.y0=V.y0,L.x1=V.x1,L.y1=V.y1}else L.type=\\\"path\\\",T&&k&&_(E,T,k),L.path=x(E),n=null;return L}t.exports={newShapes:function(t,e){if(t.length&&t[0][0]){var r=e.gd,n=e.isActiveShape,a=e.dragmode,o=(r.layout||{}).shapes||[];if(!i(a)&&void 0!==n){var s=r._fullLayout._activeShapeIndex;if(s<o.length)switch(r._fullLayout.shapes[s].type){case\\\"rect\\\":a=\\\"drawrect\\\";break;case\\\"circle\\\":a=\\\"drawcircle\\\";break;case\\\"line\\\":a=\\\"drawline\\\";break;case\\\"path\\\":var l=o[s].path||\\\"\\\";a=\\\"Z\\\"===l[l.length-1]?\\\"drawclosedpath\\\":\\\"drawopenpath\\\"}}var u=w(t,e,a);g(r);for(var c=e.editHelpers,f=(c||{}).modifyItem,h=[],p=0;p<o.length;p++){var d=r._fullLayout.shapes[p];if(h[p]=d._input,void 0!==n&&p===r._fullLayout._activeShapeIndex){var v=u;switch(d.type){case\\\"line\\\":case\\\"rect\\\":case\\\"circle\\\":f(\\\"x0\\\",v.x0),f(\\\"x1\\\",v.x1),f(\\\"y0\\\",v.y0),f(\\\"y1\\\",v.y1);break;case\\\"path\\\":f(\\\"path\\\",v.path)}}}return void 0===n?(h.push(u),h):c?c.getUpdateObj():{}}},createShapeObj:w}},51873:function(t){\\\"use strict\\\";t.exports={clearOutlineControllers:function(t){var e=t._fullLayout._zoomlayer;e&&e.selectAll(\\\".outline-controllers\\\").remove()},clearOutline:function(t){var e=t._fullLayout._zoomlayer;e&&e.selectAll(\\\".select-outline\\\").remove(),t._fullLayout._outlining=!1}}},30477:function(t,e,r){\\\"use strict\\\";var n=r(21459),i=r(71828),a=r(89298);e.rangeToShapePosition=function(t){return\\\"log\\\"===t.type?t.r2d:function(t){return t}},e.shapePositionToRange=function(t){return\\\"log\\\"===t.type?t.d2r:function(t){return t}},e.decodeDate=function(t){return function(e){return e.replace&&(e=e.replace(\\\"_\\\",\\\" \\\")),t(e)}},e.encodeDate=function(t){return function(e){return t(e).replace(\\\" \\\",\\\"_\\\")}},e.extractPathCoords=function(t,e,r){var a=[];return t.match(n.segmentRE).forEach((function(t){var o=e[t.charAt(0)].drawn;if(void 0!==o){var s=t.substr(1).match(n.paramRE);if(s&&!(s.length<o)){var l=s[o],u=r?l:i.cleanNumber(l);a.push(u)}}})),a},e.getDataToPixel=function(t,r,n,i){var a,o=t._fullLayout._size;if(r)if(\\\"domain\\\"===i)a=function(t){return r._length*(n?1-t:t)+r._offset};else{var s=e.shapePositionToRange(r);a=function(t){return r._offset+r.r2p(s(t,!0))},\\\"date\\\"===r.type&&(a=e.decodeDate(a))}else a=n?function(t){return o.t+o.h*(1-t)}:function(t){return o.l+o.w*t};return a},e.getPixelToData=function(t,r,n,i){var a,o=t._fullLayout._size;if(r)if(\\\"domain\\\"===i)a=function(t){var e=(t-r._offset)/r._length;return n?1-e:e};else{var s=e.rangeToShapePosition(r);a=function(t){return s(r.p2r(t-r._offset))}}else a=n?function(t){return 1-(t-o.t)/o.h}:function(t){return(t-o.l)/o.w};return a},e.roundPositionForSharpStrokeRendering=function(t,e){var r=1===Math.round(e%2),n=Math.round(t);return r?n+.5:n},e.makeShapesOptionsAndPlotinfo=function(t,e){var r=t._fullLayout.shapes[e]||{},n=t._fullLayout._plots[r.xref+r.yref];return n?n._hadPlotinfo=!0:(n={},r.xref&&\\\"paper\\\"!==r.xref&&(n.xaxis=t._fullLayout[r.xref+\\\"axis\\\"]),r.yref&&\\\"paper\\\"!==r.yref&&(n.yaxis=t._fullLayout[r.yref+\\\"axis\\\"])),n.xsizemode=r.xsizemode,n.ysizemode=r.ysizemode,n.xanchor=r.xanchor,n.yanchor=r.yanchor,{options:r,plotinfo:n}},e.makeSelectionsOptionsAndPlotinfo=function(t,e){var r=t._fullLayout.selections[e]||{},n=t._fullLayout._plots[r.xref+r.yref];return n?n._hadPlotinfo=!0:(n={},r.xref&&(n.xaxis=t._fullLayout[r.xref+\\\"axis\\\"]),r.yref&&(n.yaxis=t._fullLayout[r.yref+\\\"axis\\\"])),{options:r,plotinfo:n}},e.getPathString=function(t,r){var o,s,l,u,c,f,h,p,d=r.type,v=a.getRefType(r.xref),g=a.getRefType(r.yref),y=a.getFromId(t,r.xref),m=a.getFromId(t,r.yref),x=t._fullLayout._size;if(y?\\\"domain\\\"===v?s=function(t){return y._offset+y._length*t}:(o=e.shapePositionToRange(y),s=function(t){return y._offset+y.r2p(o(t,!0))}):s=function(t){return x.l+x.w*t},m?\\\"domain\\\"===g?u=function(t){return m._offset+m._length*(1-t)}:(l=e.shapePositionToRange(m),u=function(t){return m._offset+m.r2p(l(t,!0))}):u=function(t){return x.t+x.h*(1-t)},\\\"path\\\"===d)return y&&\\\"date\\\"===y.type&&(s=e.decodeDate(s)),m&&\\\"date\\\"===m.type&&(u=e.decodeDate(u)),function(t,e,r){var a=t.path,o=t.xsizemode,s=t.ysizemode,l=t.xanchor,u=t.yanchor;return a.replace(n.segmentRE,(function(t){var a=0,c=t.charAt(0),f=n.paramIsX[c],h=n.paramIsY[c],p=n.numParams[c],d=t.substr(1).replace(n.paramRE,(function(t){return f[a]?t=\\\"pixel\\\"===o?e(l)+Number(t):e(t):h[a]&&(t=\\\"pixel\\\"===s?r(u)-Number(t):r(t)),++a>p&&(t=\\\"X\\\"),t}));return a>p&&(d=d.replace(/[\\\\s,]*X.*/,\\\"\\\"),i.log(\\\"Ignoring extra params in segment \\\"+t)),c+d}))}(r,s,u);if(\\\"pixel\\\"===r.xsizemode){var b=s(r.xanchor);c=b+r.x0,f=b+r.x1}else c=s(r.x0),f=s(r.x1);if(\\\"pixel\\\"===r.ysizemode){var _=u(r.yanchor);h=_-r.y0,p=_-r.y1}else h=u(r.y0),p=u(r.y1);if(\\\"line\\\"===d)return\\\"M\\\"+c+\\\",\\\"+h+\\\"L\\\"+f+\\\",\\\"+p;if(\\\"rect\\\"===d)return\\\"M\\\"+c+\\\",\\\"+h+\\\"H\\\"+f+\\\"V\\\"+p+\\\"H\\\"+c+\\\"Z\\\";var w=(c+f)/2,T=(h+p)/2,k=Math.abs(w-c),A=Math.abs(T-h),M=\\\"A\\\"+k+\\\",\\\"+A,S=w+k+\\\",\\\"+T;return\\\"M\\\"+S+M+\\\" 0 1,1 \\\"+w+\\\",\\\"+(T-A)+M+\\\" 0 0,1 \\\"+S+\\\"Z\\\"}},89853:function(t,e,r){\\\"use strict\\\";var n=r(34031);t.exports={moduleType:\\\"component\\\",name:\\\"shapes\\\",layoutAttributes:r(89827),supplyLayoutDefaults:r(84726),supplyDrawNewShapeDefaults:r(45547),includeBasePlot:r(76325)(\\\"shapes\\\"),calcAutorange:r(5627),draw:n.draw,drawOne:n.drawOne}},37281:function(t){\\\"use strict\\\";function e(t,e){return e?e.d2l(t):t}function r(t,e){return e?e.l2d(t):t}function n(t,r){return e(t.x1,r)-e(t.x0,r)}function i(t,r,n){return e(t.y1,n)-e(t.y0,n)}t.exports={x0:function(t){return t.x0},x1:function(t){return t.x1},y0:function(t){return t.y0},y1:function(t){return t.y1},slope:function(t,e,r){return\\\"line\\\"!==t.type?void 0:i(t,0,r)/n(t,e)},dx:n,dy:i,width:function(t,e){return Math.abs(n(t,e))},height:function(t,e,r){return Math.abs(i(t,0,r))},length:function(t,e,r){return\\\"line\\\"!==t.type?void 0:Math.sqrt(Math.pow(n(t,e),2)+Math.pow(i(t,0,r),2))},xcenter:function(t,n){return r((e(t.x1,n)+e(t.x0,n))/2,n)},ycenter:function(t,n,i){return r((e(t.y1,i)+e(t.y0,i))/2,i)}}},75067:function(t,e,r){\\\"use strict\\\";var n=r(41940),i=r(35025),a=r(1426).extendDeepAll,o=r(30962).overrideAll,s=r(85594),l=r(44467).templatedArray,u=r(98292),c=l(\\\"step\\\",{visible:{valType:\\\"boolean\\\",dflt:!0},method:{valType:\\\"enumerated\\\",values:[\\\"restyle\\\",\\\"relayout\\\",\\\"animate\\\",\\\"update\\\",\\\"skip\\\"],dflt:\\\"restyle\\\"},args:{valType:\\\"info_array\\\",freeLength:!0,items:[{valType:\\\"any\\\"},{valType:\\\"any\\\"},{valType:\\\"any\\\"}]},label:{valType:\\\"string\\\"},value:{valType:\\\"string\\\"},execute:{valType:\\\"boolean\\\",dflt:!0}});t.exports=o(l(\\\"slider\\\",{visible:{valType:\\\"boolean\\\",dflt:!0},active:{valType:\\\"number\\\",min:0,dflt:0},steps:c,lenmode:{valType:\\\"enumerated\\\",values:[\\\"fraction\\\",\\\"pixels\\\"],dflt:\\\"fraction\\\"},len:{valType:\\\"number\\\",min:0,dflt:1},x:{valType:\\\"number\\\",min:-2,max:3,dflt:0},pad:a(i({editType:\\\"arraydraw\\\"}),{},{t:{dflt:20}}),xanchor:{valType:\\\"enumerated\\\",values:[\\\"auto\\\",\\\"left\\\",\\\"center\\\",\\\"right\\\"],dflt:\\\"left\\\"},y:{valType:\\\"number\\\",min:-2,max:3,dflt:0},yanchor:{valType:\\\"enumerated\\\",values:[\\\"auto\\\",\\\"top\\\",\\\"middle\\\",\\\"bottom\\\"],dflt:\\\"top\\\"},transition:{duration:{valType:\\\"number\\\",min:0,dflt:150},easing:{valType:\\\"enumerated\\\",values:s.transition.easing.values,dflt:\\\"cubic-in-out\\\"}},currentvalue:{visible:{valType:\\\"boolean\\\",dflt:!0},xanchor:{valType:\\\"enumerated\\\",values:[\\\"left\\\",\\\"center\\\",\\\"right\\\"],dflt:\\\"left\\\"},offset:{valType:\\\"number\\\",dflt:10},prefix:{valType:\\\"string\\\"},suffix:{valType:\\\"string\\\"},font:n({})},font:n({}),activebgcolor:{valType:\\\"color\\\",dflt:u.gripBgActiveColor},bgcolor:{valType:\\\"color\\\",dflt:u.railBgColor},bordercolor:{valType:\\\"color\\\",dflt:u.railBorderColor},borderwidth:{valType:\\\"number\\\",min:0,dflt:u.railBorderWidth},ticklen:{valType:\\\"number\\\",min:0,dflt:u.tickLength},tickcolor:{valType:\\\"color\\\",dflt:u.tickColor},tickwidth:{valType:\\\"number\\\",min:0,dflt:1},minorticklen:{valType:\\\"number\\\",min:0,dflt:u.minorTickLength}}),\\\"arraydraw\\\",\\\"from-root\\\")},98292:function(t){\\\"use strict\\\";t.exports={name:\\\"sliders\\\",containerClassName:\\\"slider-container\\\",groupClassName:\\\"slider-group\\\",inputAreaClass:\\\"slider-input-area\\\",railRectClass:\\\"slider-rail-rect\\\",railTouchRectClass:\\\"slider-rail-touch-rect\\\",gripRectClass:\\\"slider-grip-rect\\\",tickRectClass:\\\"slider-tick-rect\\\",inputProxyClass:\\\"slider-input-proxy\\\",labelsClass:\\\"slider-labels\\\",labelGroupClass:\\\"slider-label-group\\\",labelClass:\\\"slider-label\\\",currentValueClass:\\\"slider-current-value\\\",railHeight:5,menuIndexAttrName:\\\"slider-active-index\\\",autoMarginIdRoot:\\\"slider-\\\",minWidth:30,minHeight:30,textPadX:40,arrowOffsetX:4,railRadius:2,railWidth:5,railBorder:4,railBorderWidth:1,railBorderColor:\\\"#bec8d9\\\",railBgColor:\\\"#f8fafc\\\",railInset:8,stepInset:10,gripRadius:10,gripWidth:20,gripHeight:20,gripBorder:20,gripBorderWidth:1,gripBorderColor:\\\"#bec8d9\\\",gripBgColor:\\\"#f6f8fa\\\",gripBgActiveColor:\\\"#dbdde0\\\",labelPadding:8,labelOffset:0,tickWidth:1,tickColor:\\\"#333\\\",tickOffset:25,tickLength:7,minorTickOffset:25,minorTickColor:\\\"#333\\\",minorTickLength:4,currentValuePadding:8,currentValueInset:0}},12343:function(t,e,r){\\\"use strict\\\";var n=r(71828),i=r(85501),a=r(75067),o=r(98292).name,s=a.steps;function l(t,e,r){function o(r,i){return n.coerce(t,e,a,r,i)}for(var s=i(t,e,{name:\\\"steps\\\",handleItemDefaults:u}),l=0,c=0;c<s.length;c++)s[c].visible&&l++;if(l<2?e.visible=!1:o(\\\"visible\\\")){e._stepCount=l;var f=e._visibleSteps=n.filterVisible(s);(s[o(\\\"active\\\")]||{}).visible||(e.active=f[0]._index),o(\\\"x\\\"),o(\\\"y\\\"),n.noneOrAll(t,e,[\\\"x\\\",\\\"y\\\"]),o(\\\"xanchor\\\"),o(\\\"yanchor\\\"),o(\\\"len\\\"),o(\\\"lenmode\\\"),o(\\\"pad.t\\\"),o(\\\"pad.r\\\"),o(\\\"pad.b\\\"),o(\\\"pad.l\\\"),n.coerceFont(o,\\\"font\\\",r.font),o(\\\"currentvalue.visible\\\")&&(o(\\\"currentvalue.xanchor\\\"),o(\\\"currentvalue.prefix\\\"),o(\\\"currentvalue.suffix\\\"),o(\\\"currentvalue.offset\\\"),n.coerceFont(o,\\\"currentvalue.font\\\",e.font)),o(\\\"transition.duration\\\"),o(\\\"transition.easing\\\"),o(\\\"bgcolor\\\"),o(\\\"activebgcolor\\\"),o(\\\"bordercolor\\\"),o(\\\"borderwidth\\\"),o(\\\"ticklen\\\"),o(\\\"tickwidth\\\"),o(\\\"tickcolor\\\"),o(\\\"minorticklen\\\")}}function u(t,e){function r(r,i){return n.coerce(t,e,s,r,i)}if(\\\"skip\\\"===t.method||Array.isArray(t.args)?r(\\\"visible\\\"):e.visible=!1){r(\\\"method\\\"),r(\\\"args\\\");var i=r(\\\"label\\\",\\\"step-\\\"+e._index);r(\\\"value\\\",i),r(\\\"execute\\\")}}t.exports=function(t,e){i(t,e,{name:o,handleItemDefaults:l})}},44504:function(t,e,r){\\\"use strict\\\";var n=r(39898),i=r(74875),a=r(7901),o=r(91424),s=r(71828),l=s.strTranslate,u=r(63893),c=r(44467).arrayEditor,f=r(98292),h=r(18783),p=h.LINE_SPACING,d=h.FROM_TL,v=h.FROM_BR;function g(t){return f.autoMarginIdRoot+t._index}function y(t){return t._index}function m(t,e){var r=o.tester.selectAll(\\\"g.\\\"+f.labelGroupClass).data(e._visibleSteps);r.enter().append(\\\"g\\\").classed(f.labelGroupClass,!0);var a=0,l=0;r.each((function(t){var r=_(n.select(this),{step:t},e).node();if(r){var i=o.bBox(r);l=Math.max(l,i.height),a=Math.max(a,i.width)}})),r.remove();var c=e._dims={};c.inputAreaWidth=Math.max(f.railWidth,f.gripHeight);var h=t._fullLayout._size;c.lx=h.l+h.w*e.x,c.ly=h.t+h.h*(1-e.y),\\\"fraction\\\"===e.lenmode?c.outerLength=Math.round(h.w*e.len):c.outerLength=e.len,c.inputAreaStart=0,c.inputAreaLength=Math.round(c.outerLength-e.pad.l-e.pad.r);var p=(c.inputAreaLength-2*f.stepInset)/(e._stepCount-1),y=a+f.labelPadding;if(c.labelStride=Math.max(1,Math.ceil(y/p)),c.labelHeight=l,c.currentValueMaxWidth=0,c.currentValueHeight=0,c.currentValueTotalHeight=0,c.currentValueMaxLines=1,e.currentvalue.visible){var m=o.tester.append(\\\"g\\\");r.each((function(t){var r=x(m,e,t.label),n=r.node()&&o.bBox(r.node())||{width:0,height:0},i=u.lineCount(r);c.currentValueMaxWidth=Math.max(c.currentValueMaxWidth,Math.ceil(n.width)),c.currentValueHeight=Math.max(c.currentValueHeight,Math.ceil(n.height)),c.currentValueMaxLines=Math.max(c.currentValueMaxLines,i)})),c.currentValueTotalHeight=c.currentValueHeight+e.currentvalue.offset,m.remove()}c.height=c.currentValueTotalHeight+f.tickOffset+e.ticklen+f.labelOffset+c.labelHeight+e.pad.t+e.pad.b;var b=\\\"left\\\";s.isRightAnchor(e)&&(c.lx-=c.outerLength,b=\\\"right\\\"),s.isCenterAnchor(e)&&(c.lx-=c.outerLength/2,b=\\\"center\\\");var w=\\\"top\\\";s.isBottomAnchor(e)&&(c.ly-=c.height,w=\\\"bottom\\\"),s.isMiddleAnchor(e)&&(c.ly-=c.height/2,w=\\\"middle\\\"),c.outerLength=Math.ceil(c.outerLength),c.height=Math.ceil(c.height),c.lx=Math.round(c.lx),c.ly=Math.round(c.ly);var T={y:e.y,b:c.height*v[w],t:c.height*d[w]};\\\"fraction\\\"===e.lenmode?(T.l=0,T.xl=e.x-e.len*d[b],T.r=0,T.xr=e.x+e.len*v[b]):(T.x=e.x,T.l=c.outerLength*d[b],T.r=c.outerLength*v[b]),i.autoMargin(t,g(e),T)}function x(t,e,r){if(e.currentvalue.visible){var n,i,a=e._dims;switch(e.currentvalue.xanchor){case\\\"right\\\":n=a.inputAreaLength-f.currentValueInset-a.currentValueMaxWidth,i=\\\"left\\\";break;case\\\"center\\\":n=.5*a.inputAreaLength,i=\\\"middle\\\";break;default:n=f.currentValueInset,i=\\\"left\\\"}var l=s.ensureSingle(t,\\\"text\\\",f.labelClass,(function(t){t.attr({\\\"text-anchor\\\":i,\\\"data-notex\\\":1})})),c=e.currentvalue.prefix?e.currentvalue.prefix:\\\"\\\";if(\\\"string\\\"==typeof r)c+=r;else{var h=e.steps[e.active].label,d=e._gd._fullLayout._meta;d&&(h=s.templateString(h,d)),c+=h}e.currentvalue.suffix&&(c+=e.currentvalue.suffix),l.call(o.font,e.currentvalue.font).text(c).call(u.convertToTspans,e._gd);var v=u.lineCount(l),g=(a.currentValueMaxLines+1-v)*e.currentvalue.font.size*p;return u.positionText(l,n,g),l}}function b(t,e,r){s.ensureSingle(t,\\\"rect\\\",f.gripRectClass,(function(n){n.call(A,e,t,r).style(\\\"pointer-events\\\",\\\"all\\\")})).attr({width:f.gripWidth,height:f.gripHeight,rx:f.gripRadius,ry:f.gripRadius}).call(a.stroke,r.bordercolor).call(a.fill,r.bgcolor).style(\\\"stroke-width\\\",r.borderwidth+\\\"px\\\")}function _(t,e,r){var n=s.ensureSingle(t,\\\"text\\\",f.labelClass,(function(t){t.attr({\\\"text-anchor\\\":\\\"middle\\\",\\\"data-notex\\\":1})})),i=e.step.label,a=r._gd._fullLayout._meta;return a&&(i=s.templateString(i,a)),n.call(o.font,r.font).text(i).call(u.convertToTspans,r._gd),n}function w(t,e){var r=s.ensureSingle(t,\\\"g\\\",f.labelsClass),i=e._dims,a=r.selectAll(\\\"g.\\\"+f.labelGroupClass).data(i.labelSteps);a.enter().append(\\\"g\\\").classed(f.labelGroupClass,!0),a.exit().remove(),a.each((function(t){var r=n.select(this);r.call(_,t,e),o.setTranslate(r,E(e,t.fraction),f.tickOffset+e.ticklen+e.font.size*p+f.labelOffset+i.currentValueTotalHeight)}))}function T(t,e,r,n,i){var a=Math.round(n*(r._stepCount-1)),o=r._visibleSteps[a]._index;o!==r.active&&k(t,e,r,o,!0,i)}function k(t,e,r,n,a,o){var s=r.active;r.active=n,c(t.layout,f.name,r).applyUpdate(\\\"active\\\",n);var l=r.steps[r.active];e.call(S,r,o),e.call(x,r),t.emit(\\\"plotly_sliderchange\\\",{slider:r,step:r.steps[r.active],interaction:a,previousActive:s}),l&&l.method&&a&&(e._nextMethod?(e._nextMethod.step=l,e._nextMethod.doCallback=a,e._nextMethod.doTransition=o):(e._nextMethod={step:l,doCallback:a,doTransition:o},e._nextMethodRaf=window.requestAnimationFrame((function(){var r=e._nextMethod.step;r.method&&(r.execute&&i.executeAPICommand(t,r.method,r.args),e._nextMethod=null,e._nextMethodRaf=null)}))))}function A(t,e,r){if(!e._context.staticPlot){var i=r.node(),o=n.select(e);t.on(\\\"mousedown\\\",l),t.on(\\\"touchstart\\\",l)}function s(){return r.data()[0]}function l(){var t=s();e.emit(\\\"plotly_sliderstart\\\",{slider:t});var l=r.select(\\\".\\\"+f.gripRectClass);n.event.stopPropagation(),n.event.preventDefault(),l.call(a.fill,t.activebgcolor);var u=L(t,n.mouse(i)[0]);function c(){var t=s(),a=L(t,n.mouse(i)[0]);T(e,r,t,a,!1)}function h(){var t=s();t._dragging=!1,l.call(a.fill,t.bgcolor),o.on(\\\"mouseup\\\",null),o.on(\\\"mousemove\\\",null),o.on(\\\"touchend\\\",null),o.on(\\\"touchmove\\\",null),e.emit(\\\"plotly_sliderend\\\",{slider:t,step:t.steps[t.active]})}T(e,r,t,u,!0),t._dragging=!0,o.on(\\\"mousemove\\\",c),o.on(\\\"touchmove\\\",c),o.on(\\\"mouseup\\\",h),o.on(\\\"touchend\\\",h)}}function M(t,e){var r=t.selectAll(\\\"rect.\\\"+f.tickRectClass).data(e._visibleSteps),i=e._dims;r.enter().append(\\\"rect\\\").classed(f.tickRectClass,!0),r.exit().remove(),r.attr({width:e.tickwidth+\\\"px\\\",\\\"shape-rendering\\\":\\\"crispEdges\\\"}),r.each((function(t,r){var s=r%i.labelStride==0,l=n.select(this);l.attr({height:s?e.ticklen:e.minorticklen}).call(a.fill,e.tickcolor),o.setTranslate(l,E(e,r/(e._stepCount-1))-.5*e.tickwidth,(s?f.tickOffset:f.minorTickOffset)+i.currentValueTotalHeight)}))}function S(t,e,r){for(var n=t.select(\\\"rect.\\\"+f.gripRectClass),i=0,a=0;a<e._stepCount;a++)if(e._visibleSteps[a]._index===e.active){i=a;break}var o=E(e,i/(e._stepCount-1));if(!e._invokingCommand){var s=n;r&&e.transition.duration>0&&(s=s.transition().duration(e.transition.duration).ease(e.transition.easing)),s.attr(\\\"transform\\\",l(o-.5*f.gripWidth,e._dims.currentValueTotalHeight))}}function E(t,e){var r=t._dims;return r.inputAreaStart+f.stepInset+(r.inputAreaLength-2*f.stepInset)*Math.min(1,Math.max(0,e))}function L(t,e){var r=t._dims;return Math.min(1,Math.max(0,(e-f.stepInset-r.inputAreaStart)/(r.inputAreaLength-2*f.stepInset-2*r.inputAreaStart)))}function C(t,e,r){var n=r._dims,i=s.ensureSingle(t,\\\"rect\\\",f.railTouchRectClass,(function(n){n.call(A,e,t,r).style(\\\"pointer-events\\\",\\\"all\\\")}));i.attr({width:n.inputAreaLength,height:Math.max(n.inputAreaWidth,f.tickOffset+r.ticklen+n.labelHeight)}).call(a.fill,r.bgcolor).attr(\\\"opacity\\\",0),o.setTranslate(i,0,n.currentValueTotalHeight)}function P(t,e){var r=e._dims,n=r.inputAreaLength-2*f.railInset,i=s.ensureSingle(t,\\\"rect\\\",f.railRectClass);i.attr({width:n,height:f.railWidth,rx:f.railRadius,ry:f.railRadius,\\\"shape-rendering\\\":\\\"crispEdges\\\"}).call(a.stroke,e.bordercolor).call(a.fill,e.bgcolor).style(\\\"stroke-width\\\",e.borderwidth+\\\"px\\\"),o.setTranslate(i,f.railInset,.5*(r.inputAreaWidth-f.railWidth)+r.currentValueTotalHeight)}t.exports=function(t){var e=t._context.staticPlot,r=t._fullLayout,a=function(t,e){for(var r=t[f.name],n=[],i=0;i<r.length;i++){var a=r[i];a.visible&&(a._gd=e,n.push(a))}return n}(r,t),s=r._infolayer.selectAll(\\\"g.\\\"+f.containerClassName).data(a.length>0?[0]:[]);function l(e){e._commandObserver&&(e._commandObserver.remove(),delete e._commandObserver),i.autoMargin(t,g(e))}if(s.enter().append(\\\"g\\\").classed(f.containerClassName,!0).style(\\\"cursor\\\",e?null:\\\"ew-resize\\\"),s.exit().each((function(){n.select(this).selectAll(\\\"g.\\\"+f.groupClassName).each(l)})).remove(),0!==a.length){var u=s.selectAll(\\\"g.\\\"+f.groupClassName).data(a,y);u.enter().append(\\\"g\\\").classed(f.groupClassName,!0),u.exit().each(l).remove();for(var c=0;c<a.length;c++){var h=a[c];m(t,h)}u.each((function(e){var r=n.select(this);!function(t){var e=t._dims;e.labelSteps=[];for(var r=t._stepCount,n=0;n<r;n+=e.labelStride)e.labelSteps.push({fraction:n/(r-1),step:t._visibleSteps[n]})}(e),i.manageCommandObserver(t,e,e._visibleSteps,(function(e){var n=r.data()[0];n.active!==e.index&&(n._dragging||k(t,r,n,e.index,!1,!0))})),function(t,e,r){(r.steps[r.active]||{}).visible||(r.active=r._visibleSteps[0]._index),e.call(x,r).call(P,r).call(w,r).call(M,r).call(C,t,r).call(b,t,r);var n=r._dims;o.setTranslate(e,n.lx+r.pad.l,n.ly+r.pad.t),e.call(S,r,!1),e.call(x,r)}(t,n.select(this),e)}))}}},23243:function(t,e,r){\\\"use strict\\\";var n=r(98292);t.exports={moduleType:\\\"component\\\",name:n.name,layoutAttributes:r(75067),supplyLayoutDefaults:r(12343),draw:r(44504)}},92998:function(t,e,r){\\\"use strict\\\";var n=r(39898),i=r(92770),a=r(74875),o=r(73972),s=r(71828),l=s.strTranslate,u=r(91424),c=r(7901),f=r(63893),h=r(37822),p=r(18783).OPPOSITE_SIDE,d=/ [XY][0-9]* /;t.exports={draw:function(t,e,r){var v,g=r.propContainer,y=r.propName,m=r.placeholder,x=r.traceIndex,b=r.avoid||{},_=r.attributes,w=r.transform,T=r.containerGroup,k=t._fullLayout,A=1,M=!1,S=g.title,E=(S&&S.text?S.text:\\\"\\\").trim(),L=S&&S.font?S.font:{},C=L.family,P=L.size,O=L.color;\\\"title.text\\\"===y?v=\\\"titleText\\\":-1!==y.indexOf(\\\"axis\\\")?v=\\\"axisTitleText\\\":y.indexOf(!0)&&(v=\\\"colorbarTitleText\\\");var I=t._context.edits[v];\\\"\\\"===E?A=0:E.replace(d,\\\" % \\\")===m.replace(d,\\\" % \\\")&&(A=.2,M=!0,I||(E=\\\"\\\")),r._meta?E=s.templateString(E,r._meta):k._meta&&(E=s.templateString(E,k._meta));var D,z=E||I;T||(T=s.ensureSingle(k._infolayer,\\\"g\\\",\\\"g-\\\"+e),D=k._hColorbarMoveTitle);var R=T.selectAll(\\\"text\\\").data(z?[0]:[]);if(R.enter().append(\\\"text\\\"),R.text(E).attr(\\\"class\\\",e),R.exit().remove(),!z)return T;function F(t){s.syncOrAsync([B,N],t)}function B(e){var r;return!w&&D&&(w={}),w?(r=\\\"\\\",w.rotate&&(r+=\\\"rotate(\\\"+[w.rotate,_.x,_.y]+\\\")\\\"),(w.offset||D)&&(r+=l(0,(w.offset||0)-(D||0)))):r=null,e.attr(\\\"transform\\\",r),e.style({\\\"font-family\\\":C,\\\"font-size\\\":n.round(P,2)+\\\"px\\\",fill:c.rgb(O),opacity:A*c.opacity(O),\\\"font-weight\\\":a.fontWeight}).attr(_).call(f.convertToTspans,t),a.previousPromises(t)}function N(e){var r=n.select(e.node().parentNode);if(b&&b.selection&&b.side&&E){r.attr(\\\"transform\\\",null);var a=p[b.side],o=\\\"left\\\"===b.side||\\\"top\\\"===b.side?-1:1,c=i(b.pad)?b.pad:2,f=u.bBox(r.node()),h={t:0,b:0,l:0,r:0},d=t._fullLayout._reservedMargin;for(var v in d)for(var y in d[v]){var m=d[v][y];h[y]=Math.max(h[y],m)}var x={left:h.l,top:h.t,right:k.width-h.r,bottom:k.height-h.b},_=b.maxShift||o*(x[b.side]-f[b.side]),w=0;if(_<0)w=_;else{var T=b.offsetLeft||0,A=b.offsetTop||0;f.left-=T,f.right-=T,f.top-=A,f.bottom-=A,b.selection.each((function(){var t=u.bBox(this);s.bBoxIntersect(f,t,c)&&(w=Math.max(w,o*(t[b.side]-f[a])+c))})),w=Math.min(_,w),g._titleScoot=Math.abs(w)}if(w>0||_<0){var M={left:[-w,0],right:[w,0],top:[0,-w],bottom:[0,w]}[b.side];r.attr(\\\"transform\\\",l(M[0],M[1]))}}}return R.call(F),I&&(E?R.on(\\\".opacity\\\",null):(A=0,M=!0,R.text(m).on(\\\"mouseover.opacity\\\",(function(){n.select(this).transition().duration(h.SHOW_PLACEHOLDER).style(\\\"opacity\\\",1)})).on(\\\"mouseout.opacity\\\",(function(){n.select(this).transition().duration(h.HIDE_PLACEHOLDER).style(\\\"opacity\\\",0)}))),R.call(f.makeEditable,{gd:t}).on(\\\"edit\\\",(function(e){void 0!==x?o.call(\\\"_guiRestyle\\\",t,y,e,x):o.call(\\\"_guiRelayout\\\",t,y,e)})).on(\\\"cancel\\\",(function(){this.text(this.attr(\\\"data-unformatted\\\")).call(F)})).on(\\\"input\\\",(function(t){this.text(t||\\\" \\\").call(f.positionText,_.x,_.y)}))),R.classed(\\\"js-placeholder\\\",M),T}}},7163:function(t,e,r){\\\"use strict\\\";var n=r(41940),i=r(22399),a=r(1426).extendFlat,o=r(30962).overrideAll,s=r(35025),l=r(44467).templatedArray,u=l(\\\"button\\\",{visible:{valType:\\\"boolean\\\"},method:{valType:\\\"enumerated\\\",values:[\\\"restyle\\\",\\\"relayout\\\",\\\"animate\\\",\\\"update\\\",\\\"skip\\\"],dflt:\\\"restyle\\\"},args:{valType:\\\"info_array\\\",freeLength:!0,items:[{valType:\\\"any\\\"},{valType:\\\"any\\\"},{valType:\\\"any\\\"}]},args2:{valType:\\\"info_array\\\",freeLength:!0,items:[{valType:\\\"any\\\"},{valType:\\\"any\\\"},{valType:\\\"any\\\"}]},label:{valType:\\\"string\\\",dflt:\\\"\\\"},execute:{valType:\\\"boolean\\\",dflt:!0}});t.exports=o(l(\\\"updatemenu\\\",{_arrayAttrRegexps:[/^updatemenus\\\\[(0|[1-9][0-9]+)\\\\]\\\\.buttons/],visible:{valType:\\\"boolean\\\"},type:{valType:\\\"enumerated\\\",values:[\\\"dropdown\\\",\\\"buttons\\\"],dflt:\\\"dropdown\\\"},direction:{valType:\\\"enumerated\\\",values:[\\\"left\\\",\\\"right\\\",\\\"up\\\",\\\"down\\\"],dflt:\\\"down\\\"},active:{valType:\\\"integer\\\",min:-1,dflt:0},showactive:{valType:\\\"boolean\\\",dflt:!0},buttons:u,x:{valType:\\\"number\\\",min:-2,max:3,dflt:-.05},xanchor:{valType:\\\"enumerated\\\",values:[\\\"auto\\\",\\\"left\\\",\\\"center\\\",\\\"right\\\"],dflt:\\\"right\\\"},y:{valType:\\\"number\\\",min:-2,max:3,dflt:1},yanchor:{valType:\\\"enumerated\\\",values:[\\\"auto\\\",\\\"top\\\",\\\"middle\\\",\\\"bottom\\\"],dflt:\\\"top\\\"},pad:a(s({editType:\\\"arraydraw\\\"}),{}),font:n({}),bgcolor:{valType:\\\"color\\\"},bordercolor:{valType:\\\"color\\\",dflt:i.borderLine},borderwidth:{valType:\\\"number\\\",min:0,dflt:1,editType:\\\"arraydraw\\\"}}),\\\"arraydraw\\\",\\\"from-root\\\")},75909:function(t){\\\"use strict\\\";t.exports={name:\\\"updatemenus\\\",containerClassName:\\\"updatemenu-container\\\",headerGroupClassName:\\\"updatemenu-header-group\\\",headerClassName:\\\"updatemenu-header\\\",headerArrowClassName:\\\"updatemenu-header-arrow\\\",dropdownButtonGroupClassName:\\\"updatemenu-dropdown-button-group\\\",dropdownButtonClassName:\\\"updatemenu-dropdown-button\\\",buttonClassName:\\\"updatemenu-button\\\",itemRectClassName:\\\"updatemenu-item-rect\\\",itemTextClassName:\\\"updatemenu-item-text\\\",menuIndexAttrName:\\\"updatemenu-active-index\\\",autoMarginIdRoot:\\\"updatemenu-\\\",blankHeaderOpts:{label:\\\"  \\\"},minWidth:30,minHeight:30,textPadX:24,arrowPadX:16,rx:2,ry:2,textOffsetX:12,textOffsetY:3,arrowOffsetX:4,gapButtonHeader:5,gapButton:2,activeColor:\\\"#F4FAFF\\\",hoverColor:\\\"#F4FAFF\\\",arrowSymbol:{left:\\\"◄\\\",right:\\\"►\\\",up:\\\"▲\\\",down:\\\"▼\\\"}}},64897:function(t,e,r){\\\"use strict\\\";var n=r(71828),i=r(85501),a=r(7163),o=r(75909).name,s=a.buttons;function l(t,e,r){function o(r,i){return n.coerce(t,e,a,r,i)}o(\\\"visible\\\",i(t,e,{name:\\\"buttons\\\",handleItemDefaults:u}).length>0)&&(o(\\\"active\\\"),o(\\\"direction\\\"),o(\\\"type\\\"),o(\\\"showactive\\\"),o(\\\"x\\\"),o(\\\"y\\\"),n.noneOrAll(t,e,[\\\"x\\\",\\\"y\\\"]),o(\\\"xanchor\\\"),o(\\\"yanchor\\\"),o(\\\"pad.t\\\"),o(\\\"pad.r\\\"),o(\\\"pad.b\\\"),o(\\\"pad.l\\\"),n.coerceFont(o,\\\"font\\\",r.font),o(\\\"bgcolor\\\",r.paper_bgcolor),o(\\\"bordercolor\\\"),o(\\\"borderwidth\\\"))}function u(t,e){function r(r,i){return n.coerce(t,e,s,r,i)}r(\\\"visible\\\",\\\"skip\\\"===t.method||Array.isArray(t.args))&&(r(\\\"method\\\"),r(\\\"args\\\"),r(\\\"args2\\\"),r(\\\"label\\\"),r(\\\"execute\\\"))}t.exports=function(t,e){i(t,e,{name:o,handleItemDefaults:l})}},13689:function(t,e,r){\\\"use strict\\\";var n=r(39898),i=r(74875),a=r(7901),o=r(91424),s=r(71828),l=r(63893),u=r(44467).arrayEditor,c=r(18783).LINE_SPACING,f=r(75909),h=r(25849);function p(t){return t._index}function d(t,e){return+t.attr(f.menuIndexAttrName)===e._index}function v(t,e,r,n,i,a,o,s){e.active=o,u(t.layout,f.name,e).applyUpdate(\\\"active\\\",o),\\\"buttons\\\"===e.type?y(t,n,null,null,e):\\\"dropdown\\\"===e.type&&(i.attr(f.menuIndexAttrName,\\\"-1\\\"),g(t,n,i,a,e),s||y(t,n,i,a,e))}function g(t,e,r,n,i){var a=s.ensureSingle(e,\\\"g\\\",f.headerClassName,(function(t){t.style(\\\"pointer-events\\\",\\\"all\\\")})),l=i._dims,u=i.active,c=i.buttons[u]||f.blankHeaderOpts,h={y:i.pad.t,yPad:0,x:i.pad.l,xPad:0,index:0},p={width:l.headerWidth,height:l.headerHeight};a.call(m,i,c,t).call(M,i,h,p),s.ensureSingle(e,\\\"text\\\",f.headerArrowClassName,(function(t){t.attr(\\\"text-anchor\\\",\\\"end\\\").call(o.font,i.font).text(f.arrowSymbol[i.direction])})).attr({x:l.headerWidth-f.arrowOffsetX+i.pad.l,y:l.headerHeight/2+f.textOffsetY+i.pad.t}),a.on(\\\"click\\\",(function(){r.call(S,String(d(r,i)?-1:i._index)),y(t,e,r,n,i)})),a.on(\\\"mouseover\\\",(function(){a.call(w)})),a.on(\\\"mouseout\\\",(function(){a.call(T,i)})),o.setTranslate(e,l.lx,l.ly)}function y(t,e,r,a,o){r||(r=e).attr(\\\"pointer-events\\\",\\\"all\\\");var l=function(t){return-1==+t.attr(f.menuIndexAttrName)}(r)&&\\\"buttons\\\"!==o.type?[]:o.buttons,u=\\\"dropdown\\\"===o.type?f.dropdownButtonClassName:f.buttonClassName,c=r.selectAll(\\\"g.\\\"+u).data(s.filterVisible(l)),h=c.enter().append(\\\"g\\\").classed(u,!0),p=c.exit();\\\"dropdown\\\"===o.type?(h.attr(\\\"opacity\\\",\\\"0\\\").transition().attr(\\\"opacity\\\",\\\"1\\\"),p.transition().attr(\\\"opacity\\\",\\\"0\\\").remove()):p.remove();var d=0,g=0,y=o._dims,x=-1!==[\\\"up\\\",\\\"down\\\"].indexOf(o.direction);\\\"dropdown\\\"===o.type&&(x?g=y.headerHeight+f.gapButtonHeader:d=y.headerWidth+f.gapButtonHeader),\\\"dropdown\\\"===o.type&&\\\"up\\\"===o.direction&&(g=-f.gapButtonHeader+f.gapButton-y.openHeight),\\\"dropdown\\\"===o.type&&\\\"left\\\"===o.direction&&(d=-f.gapButtonHeader+f.gapButton-y.openWidth);var b={x:y.lx+d+o.pad.l,y:y.ly+g+o.pad.t,yPad:f.gapButton,xPad:f.gapButton,index:0},k={l:b.x+o.borderwidth,t:b.y+o.borderwidth};c.each((function(s,l){var u=n.select(this);u.call(m,o,s,t).call(M,o,b),u.on(\\\"click\\\",(function(){n.event.defaultPrevented||(s.execute&&(s.args2&&o.active===l?(v(t,o,0,e,r,a,-1),i.executeAPICommand(t,s.method,s.args2)):(v(t,o,0,e,r,a,l),i.executeAPICommand(t,s.method,s.args))),t.emit(\\\"plotly_buttonclicked\\\",{menu:o,button:s,active:o.active}))})),u.on(\\\"mouseover\\\",(function(){u.call(w)})),u.on(\\\"mouseout\\\",(function(){u.call(T,o),c.call(_,o)}))})),c.call(_,o),x?(k.w=Math.max(y.openWidth,y.headerWidth),k.h=b.y-k.t):(k.w=b.x-k.l,k.h=Math.max(y.openHeight,y.headerHeight)),k.direction=o.direction,a&&(c.size()?function(t,e,r,n,i,a){var o,s,l,u=i.direction,c=\\\"up\\\"===u||\\\"down\\\"===u,h=i._dims,p=i.active;if(c)for(s=0,l=0;l<p;l++)s+=h.heights[l]+f.gapButton;else for(o=0,l=0;l<p;l++)o+=h.widths[l]+f.gapButton;n.enable(a,o,s),n.hbar&&n.hbar.attr(\\\"opacity\\\",\\\"0\\\").transition().attr(\\\"opacity\\\",\\\"1\\\"),n.vbar&&n.vbar.attr(\\\"opacity\\\",\\\"0\\\").transition().attr(\\\"opacity\\\",\\\"1\\\")}(0,0,0,a,o,k):function(t){var e=!!t.hbar,r=!!t.vbar;e&&t.hbar.transition().attr(\\\"opacity\\\",\\\"0\\\").each(\\\"end\\\",(function(){e=!1,r||t.disable()})),r&&t.vbar.transition().attr(\\\"opacity\\\",\\\"0\\\").each(\\\"end\\\",(function(){r=!1,e||t.disable()}))}(a))}function m(t,e,r,n){t.call(x,e).call(b,e,r,n)}function x(t,e){s.ensureSingle(t,\\\"rect\\\",f.itemRectClassName,(function(t){t.attr({rx:f.rx,ry:f.ry,\\\"shape-rendering\\\":\\\"crispEdges\\\"})})).call(a.stroke,e.bordercolor).call(a.fill,e.bgcolor).style(\\\"stroke-width\\\",e.borderwidth+\\\"px\\\")}function b(t,e,r,n){var i=s.ensureSingle(t,\\\"text\\\",f.itemTextClassName,(function(t){t.attr({\\\"text-anchor\\\":\\\"start\\\",\\\"data-notex\\\":1})})),a=r.label,u=n._fullLayout._meta;u&&(a=s.templateString(a,u)),i.call(o.font,e.font).text(a).call(l.convertToTspans,n)}function _(t,e){var r=e.active;t.each((function(t,i){var o=n.select(this);i===r&&e.showactive&&o.select(\\\"rect.\\\"+f.itemRectClassName).call(a.fill,f.activeColor)}))}function w(t){t.select(\\\"rect.\\\"+f.itemRectClassName).call(a.fill,f.hoverColor)}function T(t,e){t.select(\\\"rect.\\\"+f.itemRectClassName).call(a.fill,e.bgcolor)}function k(t,e){var r=e._dims={width1:0,height1:0,heights:[],widths:[],totalWidth:0,totalHeight:0,openWidth:0,openHeight:0,lx:0,ly:0},a=o.tester.selectAll(\\\"g.\\\"+f.dropdownButtonClassName).data(s.filterVisible(e.buttons));a.enter().append(\\\"g\\\").classed(f.dropdownButtonClassName,!0);var u=-1!==[\\\"up\\\",\\\"down\\\"].indexOf(e.direction);a.each((function(i,a){var s=n.select(this);s.call(m,e,i,t);var h=s.select(\\\".\\\"+f.itemTextClassName),p=h.node()&&o.bBox(h.node()).width,d=Math.max(p+f.textPadX,f.minWidth),v=e.font.size*c,g=l.lineCount(h),y=Math.max(v*g,f.minHeight)+f.textOffsetY;y=Math.ceil(y),d=Math.ceil(d),r.widths[a]=d,r.heights[a]=y,r.height1=Math.max(r.height1,y),r.width1=Math.max(r.width1,d),u?(r.totalWidth=Math.max(r.totalWidth,d),r.openWidth=r.totalWidth,r.totalHeight+=y+f.gapButton,r.openHeight+=y+f.gapButton):(r.totalWidth+=d+f.gapButton,r.openWidth+=d+f.gapButton,r.totalHeight=Math.max(r.totalHeight,y),r.openHeight=r.totalHeight)})),u?r.totalHeight-=f.gapButton:r.totalWidth-=f.gapButton,r.headerWidth=r.width1+f.arrowPadX,r.headerHeight=r.height1,\\\"dropdown\\\"===e.type&&(u?(r.width1+=f.arrowPadX,r.totalHeight=r.height1):r.totalWidth=r.width1,r.totalWidth+=f.arrowPadX),a.remove();var h=r.totalWidth+e.pad.l+e.pad.r,p=r.totalHeight+e.pad.t+e.pad.b,d=t._fullLayout._size;r.lx=d.l+d.w*e.x,r.ly=d.t+d.h*(1-e.y);var v=\\\"left\\\";s.isRightAnchor(e)&&(r.lx-=h,v=\\\"right\\\"),s.isCenterAnchor(e)&&(r.lx-=h/2,v=\\\"center\\\");var g=\\\"top\\\";s.isBottomAnchor(e)&&(r.ly-=p,g=\\\"bottom\\\"),s.isMiddleAnchor(e)&&(r.ly-=p/2,g=\\\"middle\\\"),r.totalWidth=Math.ceil(r.totalWidth),r.totalHeight=Math.ceil(r.totalHeight),r.lx=Math.round(r.lx),r.ly=Math.round(r.ly),i.autoMargin(t,A(e),{x:e.x,y:e.y,l:h*({right:1,center:.5}[v]||0),r:h*({left:1,center:.5}[v]||0),b:p*({top:1,middle:.5}[g]||0),t:p*({bottom:1,middle:.5}[g]||0)})}function A(t){return f.autoMarginIdRoot+t._index}function M(t,e,r,n){n=n||{};var i=t.select(\\\".\\\"+f.itemRectClassName),a=t.select(\\\".\\\"+f.itemTextClassName),s=e.borderwidth,u=r.index,h=e._dims;o.setTranslate(t,s+r.x,s+r.y);var p=-1!==[\\\"up\\\",\\\"down\\\"].indexOf(e.direction),d=n.height||(p?h.heights[u]:h.height1);i.attr({x:0,y:0,width:n.width||(p?h.width1:h.widths[u]),height:d});var v=e.font.size*c,g=(l.lineCount(a)-1)*v/2;l.positionText(a,f.textOffsetX,d/2-g+f.textOffsetY),p?r.y+=h.heights[u]+r.yPad:r.x+=h.widths[u]+r.xPad,r.index++}function S(t,e){t.attr(f.menuIndexAttrName,e||\\\"-1\\\").selectAll(\\\"g.\\\"+f.dropdownButtonClassName).remove()}t.exports=function(t){var e=t._fullLayout,r=s.filterVisible(e[f.name]);function a(e){i.autoMargin(t,A(e))}var o=e._menulayer.selectAll(\\\"g.\\\"+f.containerClassName).data(r.length>0?[0]:[]);if(o.enter().append(\\\"g\\\").classed(f.containerClassName,!0).style(\\\"cursor\\\",\\\"pointer\\\"),o.exit().each((function(){n.select(this).selectAll(\\\"g.\\\"+f.headerGroupClassName).each(a)})).remove(),0!==r.length){var l=o.selectAll(\\\"g.\\\"+f.headerGroupClassName).data(r,p);l.enter().append(\\\"g\\\").classed(f.headerGroupClassName,!0);for(var u=s.ensureSingle(o,\\\"g\\\",f.dropdownButtonGroupClassName,(function(t){t.style(\\\"pointer-events\\\",\\\"all\\\")})),c=0;c<r.length;c++){var m=r[c];k(t,m)}var x=\\\"updatemenus\\\"+e._uid,b=new h(t,u,x);l.enter().size()&&(u.node().parentNode.appendChild(u.node()),u.call(S)),l.exit().each((function(t){u.call(S),a(t)})).remove(),l.each((function(e){var r=n.select(this),a=\\\"dropdown\\\"===e.type?u:null;i.manageCommandObserver(t,e,e.buttons,(function(n){v(t,e,e.buttons[n.index],r,a,b,n.index,!0)})),\\\"dropdown\\\"===e.type?(g(t,r,u,b,e),d(u,e)&&y(t,r,u,b,e)):y(t,r,null,null,e)}))}}},20763:function(t,e,r){\\\"use strict\\\";var n=r(75909);t.exports={moduleType:\\\"component\\\",name:n.name,layoutAttributes:r(7163),supplyLayoutDefaults:r(64897),draw:r(13689)}},25849:function(t,e,r){\\\"use strict\\\";t.exports=s;var n=r(39898),i=r(7901),a=r(91424),o=r(71828);function s(t,e,r){this.gd=t,this.container=e,this.id=r,this.position=null,this.translateX=null,this.translateY=null,this.hbar=null,this.vbar=null,this.bg=this.container.selectAll(\\\"rect.scrollbox-bg\\\").data([0]),this.bg.exit().on(\\\".drag\\\",null).on(\\\"wheel\\\",null).remove(),this.bg.enter().append(\\\"rect\\\").classed(\\\"scrollbox-bg\\\",!0).style(\\\"pointer-events\\\",\\\"all\\\").attr({opacity:0,x:0,y:0,width:0,height:0})}s.barWidth=2,s.barLength=20,s.barRadius=2,s.barPad=1,s.barColor=\\\"#808BA4\\\",s.prototype.enable=function(t,e,r){var o=this.gd._fullLayout,l=o.width,u=o.height;this.position=t;var c,f,h,p,d=this.position.l,v=this.position.w,g=this.position.t,y=this.position.h,m=this.position.direction,x=\\\"down\\\"===m,b=\\\"left\\\"===m,_=\\\"up\\\"===m,w=v,T=y;x||b||\\\"right\\\"===m||_||(this.position.direction=\\\"down\\\",x=!0),x||_?(f=(c=d)+w,x?(h=g,T=(p=Math.min(h+T,u))-h):T=(p=g+T)-(h=Math.max(p-T,0))):(p=(h=g)+T,b?w=(f=d+w)-(c=Math.max(f-w,0)):(c=d,w=(f=Math.min(c+w,l))-c)),this._box={l:c,t:h,w:w,h:T};var k=v>w,A=s.barLength+2*s.barPad,M=s.barWidth+2*s.barPad,S=d,E=g+y;E+M>u&&(E=u-M);var L=this.container.selectAll(\\\"rect.scrollbar-horizontal\\\").data(k?[0]:[]);L.exit().on(\\\".drag\\\",null).remove(),L.enter().append(\\\"rect\\\").classed(\\\"scrollbar-horizontal\\\",!0).call(i.fill,s.barColor),k?(this.hbar=L.attr({rx:s.barRadius,ry:s.barRadius,x:S,y:E,width:A,height:M}),this._hbarXMin=S+A/2,this._hbarTranslateMax=w-A):(delete this.hbar,delete this._hbarXMin,delete this._hbarTranslateMax);var C=y>T,P=s.barWidth+2*s.barPad,O=s.barLength+2*s.barPad,I=d+v,D=g;I+P>l&&(I=l-P);var z=this.container.selectAll(\\\"rect.scrollbar-vertical\\\").data(C?[0]:[]);z.exit().on(\\\".drag\\\",null).remove(),z.enter().append(\\\"rect\\\").classed(\\\"scrollbar-vertical\\\",!0).call(i.fill,s.barColor),C?(this.vbar=z.attr({rx:s.barRadius,ry:s.barRadius,x:I,y:D,width:P,height:O}),this._vbarYMin=D+O/2,this._vbarTranslateMax=T-O):(delete this.vbar,delete this._vbarYMin,delete this._vbarTranslateMax);var R=this.id,F=c-.5,B=C?f+P+.5:f+.5,N=h-.5,j=k?p+M+.5:p+.5,U=o._topdefs.selectAll(\\\"#\\\"+R).data(k||C?[0]:[]);if(U.exit().remove(),U.enter().append(\\\"clipPath\\\").attr(\\\"id\\\",R).append(\\\"rect\\\"),k||C?(this._clipRect=U.select(\\\"rect\\\").attr({x:Math.floor(F),y:Math.floor(N),width:Math.ceil(B)-Math.floor(F),height:Math.ceil(j)-Math.floor(N)}),this.container.call(a.setClipUrl,R,this.gd),this.bg.attr({x:d,y:g,width:v,height:y})):(this.bg.attr({width:0,height:0}),this.container.on(\\\"wheel\\\",null).on(\\\".drag\\\",null).call(a.setClipUrl,null),delete this._clipRect),k||C){var V=n.behavior.drag().on(\\\"dragstart\\\",(function(){n.event.sourceEvent.preventDefault()})).on(\\\"drag\\\",this._onBoxDrag.bind(this));this.container.on(\\\"wheel\\\",null).on(\\\"wheel\\\",this._onBoxWheel.bind(this)).on(\\\".drag\\\",null).call(V);var H=n.behavior.drag().on(\\\"dragstart\\\",(function(){n.event.sourceEvent.preventDefault(),n.event.sourceEvent.stopPropagation()})).on(\\\"drag\\\",this._onBarDrag.bind(this));k&&this.hbar.on(\\\".drag\\\",null).call(H),C&&this.vbar.on(\\\".drag\\\",null).call(H)}this.setTranslate(e,r)},s.prototype.disable=function(){(this.hbar||this.vbar)&&(this.bg.attr({width:0,height:0}),this.container.on(\\\"wheel\\\",null).on(\\\".drag\\\",null).call(a.setClipUrl,null),delete this._clipRect),this.hbar&&(this.hbar.on(\\\".drag\\\",null),this.hbar.remove(),delete this.hbar,delete this._hbarXMin,delete this._hbarTranslateMax),this.vbar&&(this.vbar.on(\\\".drag\\\",null),this.vbar.remove(),delete this.vbar,delete this._vbarYMin,delete this._vbarTranslateMax)},s.prototype._onBoxDrag=function(){var t=this.translateX,e=this.translateY;this.hbar&&(t-=n.event.dx),this.vbar&&(e-=n.event.dy),this.setTranslate(t,e)},s.prototype._onBoxWheel=function(){var t=this.translateX,e=this.translateY;this.hbar&&(t+=n.event.deltaY),this.vbar&&(e+=n.event.deltaY),this.setTranslate(t,e)},s.prototype._onBarDrag=function(){var t=this.translateX,e=this.translateY;if(this.hbar){var r=t+this._hbarXMin,i=r+this._hbarTranslateMax;t=(o.constrain(n.event.x,r,i)-r)/(i-r)*(this.position.w-this._box.w)}if(this.vbar){var a=e+this._vbarYMin,s=a+this._vbarTranslateMax;e=(o.constrain(n.event.y,a,s)-a)/(s-a)*(this.position.h-this._box.h)}this.setTranslate(t,e)},s.prototype.setTranslate=function(t,e){var r=this.position.w-this._box.w,n=this.position.h-this._box.h;if(t=o.constrain(t||0,0,r),e=o.constrain(e||0,0,n),this.translateX=t,this.translateY=e,this.container.call(a.setTranslate,this._box.l-this.position.l-t,this._box.t-this.position.t-e),this._clipRect&&this._clipRect.attr({x:Math.floor(this.position.l+t-.5),y:Math.floor(this.position.t+e-.5)}),this.hbar){var i=t/r;this.hbar.call(a.setTranslate,t+i*this._hbarTranslateMax,e)}if(this.vbar){var s=e/n;this.vbar.call(a.setTranslate,t,e+s*this._vbarTranslateMax)}}},18783:function(t){\\\"use strict\\\";t.exports={FROM_BL:{left:0,center:.5,right:1,bottom:0,middle:.5,top:1},FROM_TL:{left:0,center:.5,right:1,bottom:1,middle:.5,top:0},FROM_BR:{left:1,center:.5,right:0,bottom:0,middle:.5,top:1},LINE_SPACING:1.3,CAP_SHIFT:.7,MID_SHIFT:.35,OPPOSITE_SIDE:{left:\\\"right\\\",right:\\\"left\\\",top:\\\"bottom\\\",bottom:\\\"top\\\"}}},24695:function(t){\\\"use strict\\\";t.exports={axisRefDescription:function(t,e,r){return[\\\"If set to a\\\",t,\\\"axis id (e.g. *\\\"+t+\\\"* or\\\",\\\"*\\\"+t+\\\"2*), the `\\\"+t+\\\"` position refers to a\\\",t,\\\"coordinate. If set to *paper*, the `\\\"+t+\\\"`\\\",\\\"position refers to the distance from the\\\",e,\\\"of the plotting\\\",\\\"area in normalized coordinates where *0* (*1*) corresponds to the\\\",e,\\\"(\\\"+r+\\\"). If set to a\\\",t,\\\"axis ID followed by\\\",\\\"*domain* (separated by a space), the position behaves like for\\\",\\\"*paper*, but refers to the distance in fractions of the domain\\\",\\\"length from the\\\",e,\\\"of the domain of that axis: e.g.,\\\",\\\"*\\\"+t+\\\"2 domain* refers to the domain of the second\\\",t,\\\" axis and a\\\",t,\\\"position of 0.5 refers to the\\\",\\\"point between the\\\",e,\\\"and the\\\",r,\\\"of the domain of the\\\",\\\"second\\\",t,\\\"axis.\\\"].join(\\\" \\\")}}},22372:function(t){\\\"use strict\\\";t.exports={INCREASING:{COLOR:\\\"#3D9970\\\",SYMBOL:\\\"▲\\\"},DECREASING:{COLOR:\\\"#FF4136\\\",SYMBOL:\\\"▼\\\"}}},31562:function(t){\\\"use strict\\\";t.exports={FORMAT_LINK:\\\"https://github.com/d3/d3-format/tree/v1.4.5#d3-format\\\",DATE_FORMAT_LINK:\\\"https://github.com/d3/d3-time-format/tree/v2.2.3#locale_format\\\"}},74808:function(t){\\\"use strict\\\";t.exports={COMPARISON_OPS:[\\\"=\\\",\\\"!=\\\",\\\"<\\\",\\\">=\\\",\\\">\\\",\\\"<=\\\"],COMPARISON_OPS2:[\\\"=\\\",\\\"<\\\",\\\">=\\\",\\\">\\\",\\\"<=\\\"],INTERVAL_OPS:[\\\"[]\\\",\\\"()\\\",\\\"[)\\\",\\\"(]\\\",\\\"][\\\",\\\")(\\\",\\\"](\\\",\\\")[\\\"],SET_OPS:[\\\"{}\\\",\\\"}{\\\"],CONSTRAINT_REDUCTION:{\\\"=\\\":\\\"=\\\",\\\"<\\\":\\\"<\\\",\\\"<=\\\":\\\"<\\\",\\\">\\\":\\\">\\\",\\\">=\\\":\\\">\\\",\\\"[]\\\":\\\"[]\\\",\\\"()\\\":\\\"[]\\\",\\\"[)\\\":\\\"[]\\\",\\\"(]\\\":\\\"[]\\\",\\\"][\\\":\\\"][\\\",\\\")(\\\":\\\"][\\\",\\\"](\\\":\\\"][\\\",\\\")[\\\":\\\"][\\\"}}},29659:function(t){\\\"use strict\\\";t.exports={solid:[[],0],dot:[[.5,1],200],dash:[[.5,1],50],longdash:[[.5,1],10],dashdot:[[.5,.625,.875,1],50],longdashdot:[[.5,.7,.8,1],10]}},87381:function(t){\\\"use strict\\\";t.exports={circle:\\\"●\\\",\\\"circle-open\\\":\\\"○\\\",square:\\\"■\\\",\\\"square-open\\\":\\\"□\\\",diamond:\\\"◆\\\",\\\"diamond-open\\\":\\\"◇\\\",cross:\\\"+\\\",x:\\\"❌\\\"}},37822:function(t){\\\"use strict\\\";t.exports={SHOW_PLACEHOLDER:100,HIDE_PLACEHOLDER:1e3,DESELECTDIM:.2}},50606:function(t){\\\"use strict\\\";t.exports={BADNUM:void 0,FP_SAFE:1e-4*Number.MAX_VALUE,ONEMAXYEAR:316224e5,ONEAVGYEAR:315576e5,ONEMINYEAR:31536e6,ONEMAXQUARTER:79488e5,ONEAVGQUARTER:78894e5,ONEMINQUARTER:76896e5,ONEMAXMONTH:26784e5,ONEAVGMONTH:26298e5,ONEMINMONTH:24192e5,ONEWEEK:6048e5,ONEDAY:864e5,ONEHOUR:36e5,ONEMIN:6e4,ONESEC:1e3,EPOCHJD:2440587.5,ALMOST_EQUAL:.999999,LOG_CLIP:10,MINUS_SIGN:\\\"−\\\"}},32396:function(t,e){\\\"use strict\\\";e.CSS_DECLARATIONS=[[\\\"image-rendering\\\",\\\"optimizeSpeed\\\"],[\\\"image-rendering\\\",\\\"-moz-crisp-edges\\\"],[\\\"image-rendering\\\",\\\"-o-crisp-edges\\\"],[\\\"image-rendering\\\",\\\"-webkit-optimize-contrast\\\"],[\\\"image-rendering\\\",\\\"optimize-contrast\\\"],[\\\"image-rendering\\\",\\\"crisp-edges\\\"],[\\\"image-rendering\\\",\\\"pixelated\\\"]],e.STYLE=e.CSS_DECLARATIONS.map((function(t){return t.join(\\\": \\\")+\\\"; \\\"})).join(\\\"\\\")},77922:function(t,e){\\\"use strict\\\";e.xmlns=\\\"http://www.w3.org/2000/xmlns/\\\",e.svg=\\\"http://www.w3.org/2000/svg\\\",e.xlink=\\\"http://www.w3.org/1999/xlink\\\",e.svgAttrs={xmlns:e.svg,\\\"xmlns:xlink\\\":e.xlink}},8729:function(t,e,r){\\\"use strict\\\";e.version=r(11506).version,r(7417),r(98847);for(var n=r(73972),i=e.register=n.register,a=r(10641),o=Object.keys(a),s=0;s<o.length;s++){var l=o[s];\\\"_\\\"!==l.charAt(0)&&(e[l]=a[l]),i({moduleType:\\\"apiMethod\\\",name:l,fn:a[l]})}i(r(67368)),i([r(2199),r(30211),r(32745),r(2468),r(47322),r(89853),r(68804),r(20763),r(23243),r(13137),r(97218),r(83312),r(37369),r(21081),r(12311),r(64168)]),i([r(92177),r(37815)]),window.PlotlyLocales&&Array.isArray(window.PlotlyLocales)&&(i(window.PlotlyLocales),delete window.PlotlyLocales),e.Icons=r(24255);var u=r(30211),c=r(74875);e.Plots={resize:c.resize,graphJson:c.graphJson,sendDataToCloud:c.sendDataToCloud},e.Fx={hover:u.hover,unhover:u.unhover,loneHover:u.loneHover,loneUnhover:u.loneUnhover},e.Snapshot=r(44511),e.PlotSchema=r(86281)},24255:function(t){\\\"use strict\\\";t.exports={undo:{width:857.1,height:1e3,path:\\\"m857 350q0-87-34-166t-91-137-137-92-166-34q-96 0-183 41t-147 114q-4 6-4 13t5 11l76 77q6 5 14 5 9-1 13-7 41-53 100-82t126-29q58 0 110 23t92 61 61 91 22 111-22 111-61 91-92 61-110 23q-55 0-105-20t-90-57l77-77q17-16 8-38-10-23-33-23h-250q-15 0-25 11t-11 25v250q0 24 22 33 22 10 39-8l72-72q60 57 137 88t159 31q87 0 166-34t137-92 91-137 34-166z\\\",transform:\\\"matrix(1 0 0 -1 0 850)\\\"},home:{width:928.6,height:1e3,path:\\\"m786 296v-267q0-15-11-26t-25-10h-214v214h-143v-214h-214q-15 0-25 10t-11 26v267q0 1 0 2t0 2l321 264 321-264q1-1 1-4z m124 39l-34-41q-5-5-12-6h-2q-7 0-12 3l-386 322-386-322q-7-4-13-4-7 2-12 7l-35 41q-4 5-3 13t6 12l401 334q18 15 42 15t43-15l136-114v109q0 8 5 13t13 5h107q8 0 13-5t5-13v-227l122-102q5-5 6-12t-4-13z\\\",transform:\\\"matrix(1 0 0 -1 0 850)\\\"},\\\"camera-retro\\\":{width:1e3,height:1e3,path:\\\"m518 386q0 8-5 13t-13 5q-37 0-63-27t-26-63q0-8 5-13t13-5 12 5 5 13q0 23 16 38t38 16q8 0 13 5t5 13z m125-73q0-59-42-101t-101-42-101 42-42 101 42 101 101 42 101-42 42-101z m-572-320h858v71h-858v-71z m643 320q0 89-62 152t-152 62-151-62-63-152 63-151 151-63 152 63 62 151z m-571 358h214v72h-214v-72z m-72-107h858v143h-462l-36-71h-360v-72z m929 143v-714q0-30-21-51t-50-21h-858q-29 0-50 21t-21 51v714q0 30 21 51t50 21h858q29 0 50-21t21-51z\\\",transform:\\\"matrix(1 0 0 -1 0 850)\\\"},zoombox:{width:1e3,height:1e3,path:\\\"m1000-25l-250 251c40 63 63 138 63 218 0 224-182 406-407 406-224 0-406-182-406-406s183-406 407-406c80 0 155 22 218 62l250-250 125 125z m-812 250l0 438 437 0 0-438-437 0z m62 375l313 0 0-312-313 0 0 312z\\\",transform:\\\"matrix(1 0 0 -1 0 850)\\\"},pan:{width:1e3,height:1e3,path:\\\"m1000 350l-187 188 0-125-250 0 0 250 125 0-188 187-187-187 125 0 0-250-250 0 0 125-188-188 186-187 0 125 252 0 0-250-125 0 187-188 188 188-125 0 0 250 250 0 0-126 187 188z\\\",transform:\\\"matrix(1 0 0 -1 0 850)\\\"},zoom_plus:{width:875,height:1e3,path:\\\"m1 787l0-875 875 0 0 875-875 0z m687-500l-187 0 0-187-125 0 0 187-188 0 0 125 188 0 0 187 125 0 0-187 187 0 0-125z\\\",transform:\\\"matrix(1 0 0 -1 0 850)\\\"},zoom_minus:{width:875,height:1e3,path:\\\"m0 788l0-876 875 0 0 876-875 0z m688-500l-500 0 0 125 500 0 0-125z\\\",transform:\\\"matrix(1 0 0 -1 0 850)\\\"},autoscale:{width:1e3,height:1e3,path:\\\"m250 850l-187 0-63 0 0-62 0-188 63 0 0 188 187 0 0 62z m688 0l-188 0 0-62 188 0 0-188 62 0 0 188 0 62-62 0z m-875-938l0 188-63 0 0-188 0-62 63 0 187 0 0 62-187 0z m875 188l0-188-188 0 0-62 188 0 62 0 0 62 0 188-62 0z m-125 188l-1 0-93-94-156 156 156 156 92-93 2 0 0 250-250 0 0-2 93-92-156-156-156 156 94 92 0 2-250 0 0-250 0 0 93 93 157-156-157-156-93 94 0 0 0-250 250 0 0 0-94 93 156 157 156-157-93-93 0 0 250 0 0 250z\\\",transform:\\\"matrix(1 0 0 -1 0 850)\\\"},tooltip_basic:{width:1500,height:1e3,path:\\\"m375 725l0 0-375-375 375-374 0-1 1125 0 0 750-1125 0z\\\",transform:\\\"matrix(1 0 0 -1 0 850)\\\"},tooltip_compare:{width:1125,height:1e3,path:\\\"m187 786l0 2-187-188 188-187 0 0 937 0 0 373-938 0z m0-499l0 1-187-188 188-188 0 0 937 0 0 376-938-1z\\\",transform:\\\"matrix(1 0 0 -1 0 850)\\\"},plotlylogo:{width:1542,height:1e3,path:\\\"m0-10h182v-140h-182v140z m228 146h183v-286h-183v286z m225 714h182v-1000h-182v1000z m225-285h182v-715h-182v715z m225 142h183v-857h-183v857z m231-428h182v-429h-182v429z m225-291h183v-138h-183v138z\\\",transform:\\\"matrix(1 0 0 -1 0 850)\\\"},\\\"z-axis\\\":{width:1e3,height:1e3,path:\\\"m833 5l-17 108v41l-130-65 130-66c0 0 0 38 0 39 0-1 36-14 39-25 4-15-6-22-16-30-15-12-39-16-56-20-90-22-187-23-279-23-261 0-341 34-353 59 3 60 228 110 228 110-140-8-351-35-351-116 0-120 293-142 474-142 155 0 477 22 477 142 0 50-74 79-163 96z m-374 94c-58-5-99-21-99-40 0-24 65-43 144-43 79 0 143 19 143 43 0 19-42 34-98 40v216h87l-132 135-133-135h88v-216z m167 515h-136v1c16 16 31 34 46 52l84 109v54h-230v-71h124v-1c-16-17-28-32-44-51l-89-114v-51h245v72z\\\",transform:\\\"matrix(1 0 0 -1 0 850)\\\"},\\\"3d_rotate\\\":{width:1e3,height:1e3,path:\\\"m922 660c-5 4-9 7-14 11-359 263-580-31-580-31l-102 28 58-400c0 1 1 1 2 2 118 108 351 249 351 249s-62 27-100 42c88 83 222 183 347 122 16-8 30-17 44-27-2 1-4 2-6 4z m36-329c0 0 64 229-88 296-62 27-124 14-175-11 157-78 225-208 249-266 8-19 11-31 11-31 2 5 6 15 11 32-5-13-8-20-8-20z m-775-239c70-31 117-50 198-32-121 80-199 346-199 346l-96-15-58-12c0 0 55-226 155-287z m603 133l-317-139c0 0 4-4 19-14 7-5 24-15 24-15s-177-147-389 4c235-287 536-112 536-112l31-22 100 299-4-1z m-298-153c6-4 14-9 24-15 0 0-17 10-24 15z\\\",transform:\\\"matrix(1 0 0 -1 0 850)\\\"},camera:{width:1e3,height:1e3,path:\\\"m500 450c-83 0-150-67-150-150 0-83 67-150 150-150 83 0 150 67 150 150 0 83-67 150-150 150z m400 150h-120c-16 0-34 13-39 29l-31 93c-6 15-23 28-40 28h-340c-16 0-34-13-39-28l-31-94c-6-15-23-28-40-28h-120c-55 0-100-45-100-100v-450c0-55 45-100 100-100h800c55 0 100 45 100 100v450c0 55-45 100-100 100z m-400-550c-138 0-250 112-250 250 0 138 112 250 250 250 138 0 250-112 250-250 0-138-112-250-250-250z m365 380c-19 0-35 16-35 35 0 19 16 35 35 35 19 0 35-16 35-35 0-19-16-35-35-35z\\\",transform:\\\"matrix(1 0 0 -1 0 850)\\\"},movie:{width:1e3,height:1e3,path:\\\"m938 413l-188-125c0 37-17 71-44 94 64 38 107 107 107 187 0 121-98 219-219 219-121 0-219-98-219-219 0-61 25-117 66-156h-115c30 33 49 76 49 125 0 103-84 187-187 187s-188-84-188-187c0-57 26-107 65-141-38-22-65-62-65-109v-250c0-70 56-126 125-126h500c69 0 125 56 125 126l188-126c34 0 62 28 62 63v375c0 35-28 63-62 63z m-750 0c-69 0-125 56-125 125s56 125 125 125 125-56 125-125-56-125-125-125z m406-1c-87 0-157 70-157 157 0 86 70 156 157 156s156-70 156-156-70-157-156-157z\\\",transform:\\\"matrix(1 0 0 -1 0 850)\\\"},question:{width:857.1,height:1e3,path:\\\"m500 82v107q0 8-5 13t-13 5h-107q-8 0-13-5t-5-13v-107q0-8 5-13t13-5h107q8 0 13 5t5 13z m143 375q0 49-31 91t-77 65-95 23q-136 0-207-119-9-14 4-24l74-55q4-4 10-4 9 0 14 7 30 38 48 51 19 14 48 14 27 0 48-15t21-33q0-21-11-34t-38-25q-35-16-65-48t-29-70v-20q0-8 5-13t13-5h107q8 0 13 5t5 13q0 10 12 27t30 28q18 10 28 16t25 19 25 27 16 34 7 45z m214-107q0-117-57-215t-156-156-215-58-216 58-155 156-58 215 58 215 155 156 216 58 215-58 156-156 57-215z\\\",transform:\\\"matrix(1 0 0 -1 0 850)\\\"},disk:{width:857.1,height:1e3,path:\\\"m214-7h429v214h-429v-214z m500 0h72v500q0 8-6 21t-11 20l-157 156q-5 6-19 12t-22 5v-232q0-22-15-38t-38-16h-322q-22 0-37 16t-16 38v232h-72v-714h72v232q0 22 16 38t37 16h465q22 0 38-16t15-38v-232z m-214 518v178q0 8-5 13t-13 5h-107q-7 0-13-5t-5-13v-178q0-8 5-13t13-5h107q7 0 13 5t5 13z m357-18v-518q0-22-15-38t-38-16h-750q-23 0-38 16t-16 38v750q0 22 16 38t38 16h517q23 0 50-12t42-26l156-157q16-15 27-42t11-49z\\\",transform:\\\"matrix(1 0 0 -1 0 850)\\\"},drawopenpath:{width:70,height:70,path:\\\"M33.21,85.65a7.31,7.31,0,0,1-2.59-.48c-8.16-3.11-9.27-19.8-9.88-41.3-.1-3.58-.19-6.68-.35-9-.15-2.1-.67-3.48-1.43-3.79-2.13-.88-7.91,2.32-12,5.86L3,32.38c1.87-1.64,11.55-9.66,18.27-6.9,2.13.87,4.75,3.14,5.17,9,.17,2.43.26,5.59.36,9.25a224.17,224.17,0,0,0,1.5,23.4c1.54,10.76,4,12.22,4.48,12.4.84.32,2.79-.46,5.76-3.59L43,80.07C41.53,81.57,37.68,85.64,33.21,85.65ZM74.81,69a11.34,11.34,0,0,0,6.09-6.72L87.26,44.5,74.72,32,56.9,38.35c-2.37.86-5.57,3.42-6.61,6L38.65,72.14l8.42,8.43ZM55,46.27a7.91,7.91,0,0,1,3.64-3.17l14.8-5.3,8,8L76.11,60.6l-.06.19a6.37,6.37,0,0,1-3,3.43L48.25,74.59,44.62,71Zm16.57,7.82A6.9,6.9,0,1,0,64.64,61,6.91,6.91,0,0,0,71.54,54.09Zm-4.05,0a2.85,2.85,0,1,1-2.85-2.85A2.86,2.86,0,0,1,67.49,54.09Zm-4.13,5.22L60.5,56.45,44.26,72.7l2.86,2.86ZM97.83,35.67,84.14,22l-8.57,8.57L89.26,44.24Zm-13.69-8,8,8-2.85,2.85-8-8Z\\\",transform:\\\"matrix(1 0 0 1 -15 -15)\\\"},drawclosedpath:{width:90,height:90,path:\\\"M88.41,21.12a26.56,26.56,0,0,0-36.18,0l-2.07,2-2.07-2a26.57,26.57,0,0,0-36.18,0,23.74,23.74,0,0,0,0,34.8L48,90.12a3.22,3.22,0,0,0,4.42,0l36-34.21a23.73,23.73,0,0,0,0-34.79ZM84,51.24,50.16,83.35,16.35,51.25a17.28,17.28,0,0,1,0-25.47,20,20,0,0,1,27.3,0l4.29,4.07a3.23,3.23,0,0,0,4.44,0l4.29-4.07a20,20,0,0,1,27.3,0,17.27,17.27,0,0,1,0,25.46ZM66.76,47.68h-33v6.91h33ZM53.35,35H46.44V68h6.91Z\\\",transform:\\\"matrix(1 0 0 1 -5 -5)\\\"},lasso:{width:1031,height:1e3,path:\\\"m1018 538c-36 207-290 336-568 286-277-48-473-256-436-463 10-57 36-108 76-151-13-66 11-137 68-183 34-28 75-41 114-42l-55-70 0 0c-2-1-3-2-4-3-10-14-8-34 5-45 14-11 34-8 45 4 1 1 2 3 2 5l0 0 113 140c16 11 31 24 45 40 4 3 6 7 8 11 48-3 100 0 151 9 278 48 473 255 436 462z m-624-379c-80 14-149 48-197 96 42 42 109 47 156 9 33-26 47-66 41-105z m-187-74c-19 16-33 37-39 60 50-32 109-55 174-68-42-25-95-24-135 8z m360 75c-34-7-69-9-102-8 8 62-16 128-68 170-73 59-175 54-244-5-9 20-16 40-20 61-28 159 121 317 333 354s407-60 434-217c28-159-121-318-333-355z\\\",transform:\\\"matrix(1 0 0 -1 0 850)\\\"},selectbox:{width:1e3,height:1e3,path:\\\"m0 850l0-143 143 0 0 143-143 0z m286 0l0-143 143 0 0 143-143 0z m285 0l0-143 143 0 0 143-143 0z m286 0l0-143 143 0 0 143-143 0z m-857-286l0-143 143 0 0 143-143 0z m857 0l0-143 143 0 0 143-143 0z m-857-285l0-143 143 0 0 143-143 0z m857 0l0-143 143 0 0 143-143 0z m-857-286l0-143 143 0 0 143-143 0z m286 0l0-143 143 0 0 143-143 0z m285 0l0-143 143 0 0 143-143 0z m286 0l0-143 143 0 0 143-143 0z\\\",transform:\\\"matrix(1 0 0 -1 0 850)\\\"},drawline:{width:70,height:70,path:\\\"M60.64,62.3a11.29,11.29,0,0,0,6.09-6.72l6.35-17.72L60.54,25.31l-17.82,6.4c-2.36.86-5.57,3.41-6.6,6L24.48,65.5l8.42,8.42ZM40.79,39.63a7.89,7.89,0,0,1,3.65-3.17l14.79-5.31,8,8L61.94,54l-.06.19a6.44,6.44,0,0,1-3,3.43L34.07,68l-3.62-3.63Zm16.57,7.81a6.9,6.9,0,1,0-6.89,6.9A6.9,6.9,0,0,0,57.36,47.44Zm-4,0a2.86,2.86,0,1,1-2.85-2.85A2.86,2.86,0,0,1,53.32,47.44Zm-4.13,5.22L46.33,49.8,30.08,66.05l2.86,2.86ZM83.65,29,70,15.34,61.4,23.9,75.09,37.59ZM70,21.06l8,8-2.84,2.85-8-8ZM87,80.49H10.67V87H87Z\\\",transform:\\\"matrix(1 0 0 1 -15 -15)\\\"},drawrect:{width:80,height:80,path:\\\"M78,22V79H21V22H78m9-9H12V88H87V13ZM68,46.22H31V54H68ZM53,32H45.22V69H53Z\\\",transform:\\\"matrix(1 0 0 1 -10 -10)\\\"},drawcircle:{width:80,height:80,path:\\\"M50,84.72C26.84,84.72,8,69.28,8,50.3S26.84,15.87,50,15.87,92,31.31,92,50.3,73.16,84.72,50,84.72Zm0-60.59c-18.6,0-33.74,11.74-33.74,26.17S31.4,76.46,50,76.46,83.74,64.72,83.74,50.3,68.6,24.13,50,24.13Zm17.15,22h-34v7.11h34Zm-13.8-13H46.24v34h7.11Z\\\",transform:\\\"matrix(1 0 0 1 -10 -10)\\\"},eraseshape:{width:80,height:80,path:\\\"M82.77,78H31.85L6,49.57,31.85,21.14H82.77a8.72,8.72,0,0,1,8.65,8.77V69.24A8.72,8.72,0,0,1,82.77,78ZM35.46,69.84H82.77a.57.57,0,0,0,.49-.6V29.91a.57.57,0,0,0-.49-.61H35.46L17,49.57Zm32.68-34.7-24,24,5,5,24-24Zm-19,.53-5,5,24,24,5-5Z\\\",transform:\\\"matrix(1 0 0 1 -10 -10)\\\"},spikeline:{width:1e3,height:1e3,path:\\\"M512 409c0-57-46-104-103-104-57 0-104 47-104 104 0 57 47 103 104 103 57 0 103-46 103-103z m-327-39l92 0 0 92-92 0z m-185 0l92 0 0 92-92 0z m370-186l92 0 0 93-92 0z m0-184l92 0 0 92-92 0z\\\",transform:\\\"matrix(1.5 0 0 -1.5 0 850)\\\"},pencil:{width:1792,height:1792,path:\\\"M491 1536l91-91-235-235-91 91v107h128v128h107zm523-928q0-22-22-22-10 0-17 7l-542 542q-7 7-7 17 0 22 22 22 10 0 17-7l542-542q7-7 7-17zm-54-192l416 416-832 832h-416v-416zm683 96q0 53-37 90l-166 166-416-416 166-165q36-38 90-38 53 0 91 38l235 234q37 39 37 91z\\\",transform:\\\"matrix(1 0 0 1 0 1)\\\"},newplotlylogo:{name:\\\"newplotlylogo\\\",svg:[\\\"<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 132 132'>\\\",\\\"<defs>\\\",\\\" <style>\\\",\\\"  .cls-0{fill:#000;}\\\",\\\"  .cls-1{fill:#FFF;}\\\",\\\"  .cls-2{fill:#F26;}\\\",\\\"  .cls-3{fill:#D69;}\\\",\\\"  .cls-4{fill:#BAC;}\\\",\\\"  .cls-5{fill:#9EF;}\\\",\\\" </style>\\\",\\\"</defs>\\\",\\\" <title>plotly-logomark</title>\\\",\\\" <g id='symbol'>\\\",\\\"  <rect class='cls-0' x='0' y='0' width='132' height='132' rx='18' ry='18'/>\\\",\\\"  <circle class='cls-5' cx='102' cy='30' r='6'/>\\\",\\\"  <circle class='cls-4' cx='78' cy='30' r='6'/>\\\",\\\"  <circle class='cls-4' cx='78' cy='54' r='6'/>\\\",\\\"  <circle class='cls-3' cx='54' cy='30' r='6'/>\\\",\\\"  <circle class='cls-2' cx='30' cy='30' r='6'/>\\\",\\\"  <circle class='cls-2' cx='30' cy='54' r='6'/>\\\",\\\"  <path class='cls-1' d='M30,72a6,6,0,0,0-6,6v24a6,6,0,0,0,12,0V78A6,6,0,0,0,30,72Z'/>\\\",\\\"  <path class='cls-1' d='M78,72a6,6,0,0,0-6,6v24a6,6,0,0,0,12,0V78A6,6,0,0,0,78,72Z'/>\\\",\\\"  <path class='cls-1' d='M54,48a6,6,0,0,0-6,6v48a6,6,0,0,0,12,0V54A6,6,0,0,0,54,48Z'/>\\\",\\\"  <path class='cls-1' d='M102,48a6,6,0,0,0-6,6v48a6,6,0,0,0,12,0V54A6,6,0,0,0,102,48Z'/>\\\",\\\" </g>\\\",\\\"</svg>\\\"].join(\\\"\\\")}}},99863:function(t,e){\\\"use strict\\\";e.isLeftAnchor=function(t){return\\\"left\\\"===t.xanchor||\\\"auto\\\"===t.xanchor&&t.x<=1/3},e.isCenterAnchor=function(t){return\\\"center\\\"===t.xanchor||\\\"auto\\\"===t.xanchor&&t.x>1/3&&t.x<2/3},e.isRightAnchor=function(t){return\\\"right\\\"===t.xanchor||\\\"auto\\\"===t.xanchor&&t.x>=2/3},e.isTopAnchor=function(t){return\\\"top\\\"===t.yanchor||\\\"auto\\\"===t.yanchor&&t.y>=2/3},e.isMiddleAnchor=function(t){return\\\"middle\\\"===t.yanchor||\\\"auto\\\"===t.yanchor&&t.y>1/3&&t.y<2/3},e.isBottomAnchor=function(t){return\\\"bottom\\\"===t.yanchor||\\\"auto\\\"===t.yanchor&&t.y<=1/3}},26348:function(t,e,r){\\\"use strict\\\";var n=r(64872),i=n.mod,a=n.modHalf,o=Math.PI,s=2*o;function l(t){return Math.abs(t[1]-t[0])>s-1e-14}function u(t,e){return a(e-t,s)}function c(t,e){if(l(e))return!0;var r,n;e[0]<e[1]?(r=e[0],n=e[1]):(r=e[1],n=e[0]),(r=i(r,s))>(n=i(n,s))&&(n+=s);var a=i(t,s),o=a+s;return a>=r&&a<=n||o>=r&&o<=n}function f(t,e,r,n,i,a,u){i=i||0,a=a||0;var c,f,h,p,d,v=l([r,n]);function g(t,e){return[t*Math.cos(e)+i,a-t*Math.sin(e)]}v?(c=0,f=o,h=s):r<n?(c=r,h=n):(c=n,h=r),t<e?(p=t,d=e):(p=e,d=t);var y,m=Math.abs(h-c)<=o?0:1;function x(t,e,r){return\\\"A\\\"+[t,t]+\\\" \\\"+[0,m,r]+\\\" \\\"+g(t,e)}return v?y=null===p?\\\"M\\\"+g(d,c)+x(d,f,0)+x(d,h,0)+\\\"Z\\\":\\\"M\\\"+g(p,c)+x(p,f,0)+x(p,h,0)+\\\"ZM\\\"+g(d,c)+x(d,f,1)+x(d,h,1)+\\\"Z\\\":null===p?(y=\\\"M\\\"+g(d,c)+x(d,h,0),u&&(y+=\\\"L0,0Z\\\")):y=\\\"M\\\"+g(p,c)+\\\"L\\\"+g(d,c)+x(d,h,0)+\\\"L\\\"+g(p,h)+x(p,c,1)+\\\"Z\\\",y}t.exports={deg2rad:function(t){return t/180*o},rad2deg:function(t){return t/o*180},angleDelta:u,angleDist:function(t,e){return Math.abs(u(t,e))},isFullCircle:l,isAngleInsideSector:c,isPtInsideSector:function(t,e,r,n){return!!c(e,n)&&(r[0]<r[1]?(i=r[0],a=r[1]):(i=r[1],a=r[0]),t>=i&&t<=a);var i,a},pathArc:function(t,e,r,n,i){return f(null,t,e,r,n,i,0)},pathSector:function(t,e,r,n,i){return f(null,t,e,r,n,i,1)},pathAnnulus:function(t,e,r,n,i,a){return f(t,e,r,n,i,a,1)}}},73627:function(t,e){\\\"use strict\\\";var r=Array.isArray,n=ArrayBuffer,i=DataView;function a(t){return n.isView(t)&&!(t instanceof i)}function o(t){return r(t)||a(t)}function s(t,e,r){if(o(t)){if(o(t[0])){for(var n=r,i=0;i<t.length;i++)n=e(n,t[i].length);return n}return t.length}return 0}e.isTypedArray=a,e.isArrayOrTypedArray=o,e.isArray1D=function(t){return!o(t[0])},e.ensureArray=function(t,e){return r(t)||(t=[]),t.length=e,t},e.concat=function(){var t,e,n,i,a,o,s,l,u=[],c=!0,f=0;for(n=0;n<arguments.length;n++)(o=(i=arguments[n]).length)&&(e?u.push(i):(e=i,a=o),r(i)?t=!1:(c=!1,f?t!==i.constructor&&(t=!1):t=i.constructor),f+=o);if(!f)return[];if(!u.length)return e;if(c)return e.concat.apply(e,u);if(t){for((s=new t(f)).set(e),n=0;n<u.length;n++)i=u[n],s.set(i,a),a+=i.length;return s}for(s=new Array(f),l=0;l<e.length;l++)s[l]=e[l];for(n=0;n<u.length;n++){for(i=u[n],l=0;l<i.length;l++)s[a+l]=i[l];a+=l}return s},e.maxRowLength=function(t){return s(t,Math.max,0)},e.minRowLength=function(t){return s(t,Math.min,1/0)}},95218:function(t,e,r){\\\"use strict\\\";var n=r(92770),i=r(50606).BADNUM,a=/^['\\\"%,$#\\\\s']+|[, ]|['\\\"%,$#\\\\s']+$/g;t.exports=function(t){return\\\"string\\\"==typeof t&&(t=t.replace(a,\\\"\\\")),n(t)?Number(t):i}},33306:function(t){\\\"use strict\\\";t.exports=function(t){var e=t._fullLayout;e._glcanvas&&e._glcanvas.size()&&e._glcanvas.each((function(t){t.regl&&t.regl.clear({color:!0,depth:!0})}))}},86367:function(t){\\\"use strict\\\";t.exports=function(t){t._responsiveChartHandler&&(window.removeEventListener(\\\"resize\\\",t._responsiveChartHandler),delete t._responsiveChartHandler)}},96554:function(t,e,r){\\\"use strict\\\";var n=r(92770),i=r(84267),a=r(9012),o=r(63282),s=r(7901),l=r(37822).DESELECTDIM,u=r(65487),c=r(30587).counter,f=r(64872).modHalf,h=r(73627).isArrayOrTypedArray;function p(t,r){var n=e.valObjectMeta[r.valType];if(r.arrayOk&&h(t))return!0;if(n.validateFunction)return n.validateFunction(t,r);var i={},a=i,o={set:function(t){a=t}};return n.coerceFunction(t,o,i,r),a!==i}e.valObjectMeta={data_array:{coerceFunction:function(t,e,r){h(t)?e.set(t):void 0!==r&&e.set(r)}},enumerated:{coerceFunction:function(t,e,r,n){n.coerceNumber&&(t=+t),-1===n.values.indexOf(t)?e.set(r):e.set(t)},validateFunction:function(t,e){e.coerceNumber&&(t=+t);for(var r=e.values,n=0;n<r.length;n++){var i=String(r[n]);if(\\\"/\\\"===i.charAt(0)&&\\\"/\\\"===i.charAt(i.length-1)){if(new RegExp(i.substr(1,i.length-2)).test(t))return!0}else if(t===r[n])return!0}return!1}},boolean:{coerceFunction:function(t,e,r){!0===t||!1===t?e.set(t):e.set(r)}},number:{coerceFunction:function(t,e,r,i){!n(t)||void 0!==i.min&&t<i.min||void 0!==i.max&&t>i.max?e.set(r):e.set(+t)}},integer:{coerceFunction:function(t,e,r,i){t%1||!n(t)||void 0!==i.min&&t<i.min||void 0!==i.max&&t>i.max?e.set(r):e.set(+t)}},string:{coerceFunction:function(t,e,r,n){if(\\\"string\\\"!=typeof t){var i=\\\"number\\\"==typeof t;!0!==n.strict&&i?e.set(String(t)):e.set(r)}else n.noBlank&&!t?e.set(r):e.set(t)}},color:{coerceFunction:function(t,e,r){i(t).isValid()?e.set(t):e.set(r)}},colorlist:{coerceFunction:function(t,e,r){Array.isArray(t)&&t.length&&t.every((function(t){return i(t).isValid()}))?e.set(t):e.set(r)}},colorscale:{coerceFunction:function(t,e,r){e.set(o.get(t,r))}},angle:{coerceFunction:function(t,e,r){\\\"auto\\\"===t?e.set(\\\"auto\\\"):n(t)?e.set(f(+t,360)):e.set(r)}},subplotid:{coerceFunction:function(t,e,r,n){var i=n.regex||c(r);\\\"string\\\"==typeof t&&i.test(t)?e.set(t):e.set(r)},validateFunction:function(t,e){var r=e.dflt;return t===r||\\\"string\\\"==typeof t&&!!c(r).test(t)}},flaglist:{coerceFunction:function(t,e,r,n){if(-1===(n.extras||[]).indexOf(t))if(\\\"string\\\"==typeof t){for(var i=t.split(\\\"+\\\"),a=0;a<i.length;){var o=i[a];-1===n.flags.indexOf(o)||i.indexOf(o)<a?i.splice(a,1):a++}i.length?e.set(i.join(\\\"+\\\")):e.set(r)}else e.set(r);else e.set(t)}},any:{coerceFunction:function(t,e,r){void 0===t?e.set(r):e.set(t)}},info_array:{coerceFunction:function(t,r,n,i){function a(t,r,n){var i,a={set:function(t){i=t}};return void 0===n&&(n=r.dflt),e.valObjectMeta[r.valType].coerceFunction(t,a,n,r),i}var o=2===i.dimensions||\\\"1-2\\\"===i.dimensions&&Array.isArray(t)&&Array.isArray(t[0]);if(Array.isArray(t)){var s,l,u,c,f,h,p=i.items,d=[],v=Array.isArray(p),g=v&&o&&Array.isArray(p[0]),y=o&&v&&!g,m=v&&!y?p.length:t.length;if(n=Array.isArray(n)?n:[],o)for(s=0;s<m;s++)for(d[s]=[],u=Array.isArray(t[s])?t[s]:[],f=y?p.length:v?p[s].length:u.length,l=0;l<f;l++)c=y?p[l]:v?p[s][l]:p,void 0!==(h=a(u[l],c,(n[s]||[])[l]))&&(d[s][l]=h);else for(s=0;s<m;s++)void 0!==(h=a(t[s],v?p[s]:p,n[s]))&&(d[s]=h);r.set(d)}else r.set(n)},validateFunction:function(t,e){if(!Array.isArray(t))return!1;var r=e.items,n=Array.isArray(r),i=2===e.dimensions;if(!e.freeLength&&t.length!==r.length)return!1;for(var a=0;a<t.length;a++)if(i){if(!Array.isArray(t[a])||!e.freeLength&&t[a].length!==r[a].length)return!1;for(var o=0;o<t[a].length;o++)if(!p(t[a][o],n?r[a][o]:r))return!1}else if(!p(t[a],n?r[a]:r))return!1;return!0}}},e.coerce=function(t,r,n,i,a){var o=u(n,i).get(),s=u(t,i),l=u(r,i),c=s.get(),f=r._template;if(void 0===c&&f&&(c=u(f,i).get(),f=0),void 0===a&&(a=o.dflt),o.arrayOk&&h(c))return l.set(c),c;var d=e.valObjectMeta[o.valType].coerceFunction;d(c,l,a,o);var v=l.get();return f&&v===a&&!p(c,o)&&(d(c=u(f,i).get(),l,a,o),v=l.get()),v},e.coerce2=function(t,r,n,i,a){var o=u(t,i),s=e.coerce(t,r,n,i,a);return null!=o.get()&&s},e.coerceFont=function(t,e,r){var n={};return r=r||{},n.family=t(e+\\\".family\\\",r.family),n.size=t(e+\\\".size\\\",r.size),n.color=t(e+\\\".color\\\",r.color),n},e.coercePattern=function(t,e,r,n){if(t(e+\\\".shape\\\")){t(e+\\\".solidity\\\"),t(e+\\\".size\\\");var i=\\\"overlay\\\"===t(e+\\\".fillmode\\\");if(!n){var a=t(e+\\\".bgcolor\\\",i?r:void 0);t(e+\\\".fgcolor\\\",i?s.contrast(a):r)}t(e+\\\".fgopacity\\\",i?.5:1)}},e.coerceHoverinfo=function(t,r,n){var i,o=r._module.attributes,s=o.hoverinfo?o:a,l=s.hoverinfo;if(1===n._dataLength){var u=\\\"all\\\"===l.dflt?l.flags.slice():l.dflt.split(\\\"+\\\");u.splice(u.indexOf(\\\"name\\\"),1),i=u.join(\\\"+\\\")}return e.coerce(t,r,s,\\\"hoverinfo\\\",i)},e.coerceSelectionMarkerOpacity=function(t,e){if(t.marker){var r,n,i=t.marker.opacity;void 0!==i&&(h(i)||t.selected||t.unselected||(r=i,n=l*i),e(\\\"selected.marker.opacity\\\",r),e(\\\"unselected.marker.opacity\\\",n))}},e.validate=p},41631:function(t,e,r){\\\"use strict\\\";var n,i,a=r(84096).i$,o=r(92770),s=r(47769),l=r(64872).mod,u=r(50606),c=u.BADNUM,f=u.ONEDAY,h=u.ONEHOUR,p=u.ONEMIN,d=u.ONESEC,v=u.EPOCHJD,g=r(73972),y=r(84096).g0,m=/^\\\\s*(-?\\\\d\\\\d\\\\d\\\\d|\\\\d\\\\d)(-(\\\\d?\\\\d)(-(\\\\d?\\\\d)([ Tt]([01]?\\\\d|2[0-3])(:([0-5]\\\\d)(:([0-5]\\\\d(\\\\.\\\\d+)?))?(Z|z|[+\\\\-]\\\\d\\\\d(:?\\\\d\\\\d)?)?)?)?)?)?\\\\s*$/m,x=/^\\\\s*(-?\\\\d\\\\d\\\\d\\\\d|\\\\d\\\\d)(-(\\\\d?\\\\di?)(-(\\\\d?\\\\d)([ Tt]([01]?\\\\d|2[0-3])(:([0-5]\\\\d)(:([0-5]\\\\d(\\\\.\\\\d+)?))?(Z|z|[+\\\\-]\\\\d\\\\d(:?\\\\d\\\\d)?)?)?)?)?)?\\\\s*$/m,b=(new Date).getFullYear()-70;function _(t){return t&&g.componentsRegistry.calendars&&\\\"string\\\"==typeof t&&\\\"gregorian\\\"!==t}function w(t,e){return String(t+Math.pow(10,e)).substr(1)}e.dateTick0=function(t,r){var n=function(t,e){return _(t)?e?g.getComponentMethod(\\\"calendars\\\",\\\"CANONICAL_SUNDAY\\\")[t]:g.getComponentMethod(\\\"calendars\\\",\\\"CANONICAL_TICK\\\")[t]:e?\\\"2000-01-02\\\":\\\"2000-01-01\\\"}(t,!!r);if(r<2)return n;var i=e.dateTime2ms(n,t);return i+=f*(r-1),e.ms2DateTime(i,0,t)},e.dfltRange=function(t){return _(t)?g.getComponentMethod(\\\"calendars\\\",\\\"DFLTRANGE\\\")[t]:[\\\"2000-01-01\\\",\\\"2001-01-01\\\"]},e.isJSDate=function(t){return\\\"object\\\"==typeof t&&null!==t&&\\\"function\\\"==typeof t.getTime},e.dateTime2ms=function(t,r){if(e.isJSDate(t)){var a=t.getTimezoneOffset()*p,o=(t.getUTCMinutes()-t.getMinutes())*p+(t.getUTCSeconds()-t.getSeconds())*d+(t.getUTCMilliseconds()-t.getMilliseconds());if(o){var s=3*p;a=a-s/2+l(o-a+s/2,s)}return(t=Number(t)-a)>=n&&t<=i?t:c}if(\\\"string\\\"!=typeof t&&\\\"number\\\"!=typeof t)return c;t=String(t);var u=_(r),y=t.charAt(0);!u||\\\"G\\\"!==y&&\\\"g\\\"!==y||(t=t.substr(1),r=\\\"\\\");var w=u&&\\\"chinese\\\"===r.substr(0,7),T=t.match(w?x:m);if(!T)return c;var k=T[1],A=T[3]||\\\"1\\\",M=Number(T[5]||1),S=Number(T[7]||0),E=Number(T[9]||0),L=Number(T[11]||0);if(u){if(2===k.length)return c;var C;k=Number(k);try{var P=g.getComponentMethod(\\\"calendars\\\",\\\"getCal\\\")(r);if(w){var O=\\\"i\\\"===A.charAt(A.length-1);A=parseInt(A,10),C=P.newDate(k,P.toMonthIndex(k,A,O),M)}else C=P.newDate(k,Number(A),M)}catch(t){return c}return C?(C.toJD()-v)*f+S*h+E*p+L*d:c}k=2===k.length?(Number(k)+2e3-b)%100+b:Number(k),A-=1;var I=new Date(Date.UTC(2e3,A,M,S,E));return I.setUTCFullYear(k),I.getUTCMonth()!==A||I.getUTCDate()!==M?c:I.getTime()+L*d},n=e.MIN_MS=e.dateTime2ms(\\\"-9999\\\"),i=e.MAX_MS=e.dateTime2ms(\\\"9999-12-31 23:59:59.9999\\\"),e.isDateTime=function(t,r){return e.dateTime2ms(t,r)!==c};var T=90*f,k=3*h,A=5*p;function M(t,e,r,n,i){if((e||r||n||i)&&(t+=\\\" \\\"+w(e,2)+\\\":\\\"+w(r,2),(n||i)&&(t+=\\\":\\\"+w(n,2),i))){for(var a=4;i%10==0;)a-=1,i/=10;t+=\\\".\\\"+w(i,a)}return t}e.ms2DateTime=function(t,e,r){if(\\\"number\\\"!=typeof t||!(t>=n&&t<=i))return c;e||(e=0);var a,o,s,u,m,x,b=Math.floor(10*l(t+.05,1)),w=Math.round(t-b/10);if(_(r)){var S=Math.floor(w/f)+v,E=Math.floor(l(t,f));try{a=g.getComponentMethod(\\\"calendars\\\",\\\"getCal\\\")(r).fromJD(S).formatDate(\\\"yyyy-mm-dd\\\")}catch(t){a=y(\\\"G%Y-%m-%d\\\")(new Date(w))}if(\\\"-\\\"===a.charAt(0))for(;a.length<11;)a=\\\"-0\\\"+a.substr(1);else for(;a.length<10;)a=\\\"0\\\"+a;o=e<T?Math.floor(E/h):0,s=e<T?Math.floor(E%h/p):0,u=e<k?Math.floor(E%p/d):0,m=e<A?E%d*10+b:0}else x=new Date(w),a=y(\\\"%Y-%m-%d\\\")(x),o=e<T?x.getUTCHours():0,s=e<T?x.getUTCMinutes():0,u=e<k?x.getUTCSeconds():0,m=e<A?10*x.getUTCMilliseconds()+b:0;return M(a,o,s,u,m)},e.ms2DateTimeLocal=function(t){if(!(t>=n+f&&t<=i-f))return c;var e=Math.floor(10*l(t+.05,1)),r=new Date(Math.round(t-e/10));return M(a(\\\"%Y-%m-%d\\\")(r),r.getHours(),r.getMinutes(),r.getSeconds(),10*r.getUTCMilliseconds()+e)},e.cleanDate=function(t,r,n){if(t===c)return r;if(e.isJSDate(t)||\\\"number\\\"==typeof t&&isFinite(t)){if(_(n))return s.error(\\\"JS Dates and milliseconds are incompatible with world calendars\\\",t),r;if(!(t=e.ms2DateTimeLocal(+t))&&void 0!==r)return r}else if(!e.isDateTime(t,n))return s.error(\\\"unrecognized date\\\",t),r;return t};var S=/%\\\\d?f/g,E=/%h/g,L={1:\\\"1\\\",2:\\\"1\\\",3:\\\"2\\\",4:\\\"2\\\"};function C(t,e,r,n){t=t.replace(S,(function(t){var r=Math.min(+t.charAt(1)||6,6);return(e/1e3%1+2).toFixed(r).substr(2).replace(/0+$/,\\\"\\\")||\\\"0\\\"}));var i=new Date(Math.floor(e+.05));if(t=t.replace(E,(function(){return L[r(\\\"%q\\\")(i)]})),_(n))try{t=g.getComponentMethod(\\\"calendars\\\",\\\"worldCalFmt\\\")(t,e,n)}catch(t){return\\\"Invalid\\\"}return r(t)(i)}var P=[59,59.9,59.99,59.999,59.9999];e.formatDate=function(t,e,r,n,i,a){if(i=_(i)&&i,!e)if(\\\"y\\\"===r)e=a.year;else if(\\\"m\\\"===r)e=a.month;else{if(\\\"d\\\"!==r)return function(t,e){var r=l(t+.05,f),n=w(Math.floor(r/h),2)+\\\":\\\"+w(l(Math.floor(r/p),60),2);if(\\\"M\\\"!==e){o(e)||(e=0);var i=(100+Math.min(l(t/d,60),P[e])).toFixed(e).substr(1);e>0&&(i=i.replace(/0+$/,\\\"\\\").replace(/[\\\\.]$/,\\\"\\\")),n+=\\\":\\\"+i}return n}(t,r)+\\\"\\\\n\\\"+C(a.dayMonthYear,t,n,i);e=a.dayMonth+\\\"\\\\n\\\"+a.year}return C(e,t,n,i)};var O=3*f;e.incrementMonth=function(t,e,r){r=_(r)&&r;var n=l(t,f);if(t=Math.round(t-n),r)try{var i=Math.round(t/f)+v,a=g.getComponentMethod(\\\"calendars\\\",\\\"getCal\\\")(r),o=a.fromJD(i);return e%12?a.add(o,e,\\\"m\\\"):a.add(o,e/12,\\\"y\\\"),(o.toJD()-v)*f+n}catch(e){s.error(\\\"invalid ms \\\"+t+\\\" in calendar \\\"+r)}var u=new Date(t+O);return u.setUTCMonth(u.getUTCMonth()+e)+n-O},e.findExactDates=function(t,e){for(var r,n,i=0,a=0,s=0,l=0,u=_(e)&&g.getComponentMethod(\\\"calendars\\\",\\\"getCal\\\")(e),c=0;c<t.length;c++)if(n=t[c],o(n)){if(!(n%f))if(u)try{1===(r=u.fromJD(n/f+v)).day()?1===r.month()?i++:a++:s++}catch(t){}else 1===(r=new Date(n)).getUTCDate()?0===r.getUTCMonth()?i++:a++:s++}else l++;s+=a+=i;var h=t.length-l;return{exactYears:i/h,exactMonths:a/h,exactDays:s/h}}},24401:function(t,e,r){\\\"use strict\\\";var n=r(39898),i=r(47769),a=r(35657),o=r(79576);function s(t){var e=t&&t.parentNode;e&&e.removeChild(t)}function l(t,e,r){var n=\\\"plotly.js-style-\\\"+t,a=document.getElementById(n);a||((a=document.createElement(\\\"style\\\")).setAttribute(\\\"id\\\",n),a.appendChild(document.createTextNode(\\\"\\\")),document.head.appendChild(a));var o=a.sheet;o.insertRule?o.insertRule(e+\\\"{\\\"+r+\\\"}\\\",0):o.addRule?o.addRule(e,r,0):i.warn(\\\"addStyleRule failed\\\")}function u(t){var e=window.getComputedStyle(t,null),r=e.getPropertyValue(\\\"-webkit-transform\\\")||e.getPropertyValue(\\\"-moz-transform\\\")||e.getPropertyValue(\\\"-ms-transform\\\")||e.getPropertyValue(\\\"-o-transform\\\")||e.getPropertyValue(\\\"transform\\\");return\\\"none\\\"===r?null:r.replace(\\\"matrix\\\",\\\"\\\").replace(\\\"3d\\\",\\\"\\\").slice(1,-1).split(\\\",\\\").map((function(t){return+t}))}function c(t){for(var e=[];f(t);)e.push(t),t=t.parentNode;return e}function f(t){return t&&(t instanceof Element||t instanceof HTMLElement)}t.exports={getGraphDiv:function(t){var e;if(\\\"string\\\"==typeof t){if(null===(e=document.getElementById(t)))throw new Error(\\\"No DOM element with id '\\\"+t+\\\"' exists on the page.\\\");return e}if(null==t)throw new Error(\\\"DOM element provided is null or undefined\\\");return t},isPlotDiv:function(t){var e=n.select(t);return e.node()instanceof HTMLElement&&e.size()&&e.classed(\\\"js-plotly-plot\\\")},removeElement:s,addStyleRule:function(t,e){l(\\\"global\\\",t,e)},addRelatedStyleRule:l,deleteRelatedStyleRule:function(t){var e=\\\"plotly.js-style-\\\"+t,r=document.getElementById(e);r&&s(r)},getFullTransformMatrix:function(t){var e=c(t),r=[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1];return e.forEach((function(t){var e=u(t);if(e){var n=a.convertCssMatrix(e);r=o.multiply(r,r,n)}})),r},getElementTransformMatrix:u,getElementAndAncestors:c,equalDomRects:function(t,e){return t&&e&&t.top===e.top&&t.left===e.left&&t.right===e.right&&t.bottom===e.bottom}}},11086:function(t,e,r){\\\"use strict\\\";var n=r(15398).EventEmitter,i={init:function(t){if(t._ev instanceof n)return t;var e=new n,r=new n;return t._ev=e,t._internalEv=r,t.on=e.on.bind(e),t.once=e.once.bind(e),t.removeListener=e.removeListener.bind(e),t.removeAllListeners=e.removeAllListeners.bind(e),t._internalOn=r.on.bind(r),t._internalOnce=r.once.bind(r),t._removeInternalListener=r.removeListener.bind(r),t._removeAllInternalListeners=r.removeAllListeners.bind(r),t.emit=function(n,i){\\\"undefined\\\"!=typeof jQuery&&jQuery(t).trigger(n,i),e.emit(n,i),r.emit(n,i)},t},triggerHandler:function(t,e,r){var n,i;\\\"undefined\\\"!=typeof jQuery&&(n=jQuery(t).triggerHandler(e,r));var a=t._ev;if(!a)return n;var o,s=a._events[e];if(!s)return n;function l(t){return t.listener?(a.removeListener(e,t.listener),t.fired?void 0:(t.fired=!0,t.listener.apply(a,[r]))):t.apply(a,[r])}for(s=Array.isArray(s)?s:[s],o=0;o<s.length-1;o++)l(s[o]);return i=l(s[o]),void 0!==n?n:i},purge:function(t){return delete t._ev,delete t.on,delete t.once,delete t.removeListener,delete t.removeAllListeners,delete t.emit,delete t._ev,delete t._internalEv,delete t._internalOn,delete t._internalOnce,delete t._removeInternalListener,delete t._removeAllInternalListeners,t}};t.exports=i},1426:function(t,e,r){\\\"use strict\\\";var n=r(41965),i=Array.isArray;function a(t,e,r,o){var s,l,u,c,f,h,p,d=t[0],v=t.length;if(2===v&&i(d)&&i(t[1])&&0===d.length){if(p=function(t,e){var r,n;for(r=0;r<t.length;r++){if(null!==(n=t[r])&&\\\"object\\\"==typeof n)return!1;void 0!==n&&(e[r]=n)}return!0}(t[1],d),p)return d;d.splice(0,d.length)}for(var g=1;g<v;g++)for(l in s=t[g])u=d[l],c=s[l],o&&i(c)?d[l]=c:e&&c&&(n(c)||(f=i(c)))?(f?(f=!1,h=u&&i(u)?u:[]):h=u&&n(u)?u:{},d[l]=a([h,c],e,r,o)):(void 0!==c||r)&&(d[l]=c);return d}e.extendFlat=function(){return a(arguments,!1,!1,!1)},e.extendDeep=function(){return a(arguments,!0,!1,!1)},e.extendDeepAll=function(){return a(arguments,!0,!0,!1)},e.extendDeepNoArrays=function(){return a(arguments,!0,!1,!0)}},75744:function(t){\\\"use strict\\\";t.exports=function(t){for(var e={},r=[],n=0,i=0;i<t.length;i++){var a=t[i];1!==e[a]&&(e[a]=1,r[n++]=a)}return r}},76756:function(t){\\\"use strict\\\";function e(t){return!0===t.visible}function r(t){var e=t[0].trace;return!0===e.visible&&0!==e._length}t.exports=function(t){for(var n,i=(n=t,Array.isArray(n)&&Array.isArray(n[0])&&n[0][0]&&n[0][0].trace?r:e),a=[],o=0;o<t.length;o++){var s=t[o];i(s)&&a.push(s)}return a}},41327:function(t,e,r){\\\"use strict\\\";var n=r(39898),i=r(24138),a=r(30774),o=r(29261),s=r(85268),l=r(23389),u=r(47769),c=r(41965),f=r(65487),h=r(61082),p=Object.keys(i),d={\\\"ISO-3\\\":l,\\\"USA-states\\\":l,\\\"country names\\\":function(t){for(var e=0;e<p.length;e++){var r=p[e];if(new RegExp(i[r]).test(t.trim().toLowerCase()))return r}return u.log(\\\"Unrecognized country name: \\\"+t+\\\".\\\"),!1}};function v(t){var e=t.geojson,r=window.PlotlyGeoAssets||{},n=\\\"string\\\"==typeof e?r[e]:e;return c(n)?n:(u.error(\\\"Oops ... something went wrong when fetching \\\"+e),!1)}t.exports={locationToFeature:function(t,e,r){if(!e||\\\"string\\\"!=typeof e)return!1;var n,i,a,o=d[t](e);if(o){if(\\\"USA-states\\\"===t)for(n=[],a=0;a<r.length;a++)(i=r[a]).properties&&i.properties.gu&&\\\"USA\\\"===i.properties.gu&&n.push(i);else n=r;for(a=0;a<n.length;a++)if((i=n[a]).id===o)return i;u.log([\\\"Location with id\\\",o,\\\"does not have a matching topojson feature at this resolution.\\\"].join(\\\" \\\"))}return!1},feature2polygons:function(t){var e,r,n,i,a=t.geometry,o=a.coordinates,s=t.id,l=[];function u(t){for(var e=0;e<t.length-1;e++)if(t[e][0]>0&&t[e+1][0]<0)return e;return null}switch(e=\\\"RUS\\\"===s||\\\"FJI\\\"===s?function(t){var e;if(null===u(t))e=t;else for(e=new Array(t.length),i=0;i<t.length;i++)e[i]=[t[i][0]<0?t[i][0]+360:t[i][0],t[i][1]];l.push(h.tester(e))}:\\\"ATA\\\"===s?function(t){var e=u(t);if(null===e)return l.push(h.tester(t));var r=new Array(t.length+1),n=0;for(i=0;i<t.length;i++)i>e?r[n++]=[t[i][0]+360,t[i][1]]:i===e?(r[n++]=t[i],r[n++]=[t[i][0],-90]):r[n++]=t[i];var a=h.tester(r);a.pts.pop(),l.push(a)}:function(t){l.push(h.tester(t))},a.type){case\\\"MultiPolygon\\\":for(r=0;r<o.length;r++)for(n=0;n<o[r].length;n++)e(o[r][n]);break;case\\\"Polygon\\\":for(r=0;r<o.length;r++)e(o[r])}return l},getTraceGeojson:v,extractTraceFeature:function(t){var e=t[0].trace,r=v(e);if(!r)return!1;var n,i={},s=[];for(n=0;n<e._length;n++){var l=t[n];(l.loc||0===l.loc)&&(i[l.loc]=l)}function c(t){var r=f(t,e.featureidkey||\\\"id\\\").get(),n=i[r];if(n){var l=t.geometry;if(\\\"Polygon\\\"===l.type||\\\"MultiPolygon\\\"===l.type){var c={type:\\\"Feature\\\",id:r,geometry:l,properties:{}};c.properties.ct=function(t){var e,r=t.geometry;if(\\\"MultiPolygon\\\"===r.type)for(var n=r.coordinates,i=0,s=0;s<n.length;s++){var l={type:\\\"Polygon\\\",coordinates:n[s]},u=a.default(l);u>i&&(i=u,e=l)}else e=r;return o.default(e).geometry.coordinates}(c),n.fIn=t,n.fOut=c,s.push(c)}else u.log([\\\"Location\\\",n.loc,\\\"does not have a valid GeoJSON geometry.\\\",\\\"Traces with locationmode *geojson-id* only support\\\",\\\"*Polygon* and *MultiPolygon* geometries.\\\"].join(\\\" \\\"))}delete i[r]}switch(r.type){case\\\"FeatureCollection\\\":var h=r.features;for(n=0;n<h.length;n++)c(h[n]);break;case\\\"Feature\\\":c(r);break;default:return u.warn([\\\"Invalid GeoJSON type\\\",(r.type||\\\"none\\\")+\\\".\\\",\\\"Traces with locationmode *geojson-id* only support\\\",\\\"*FeatureCollection* and *Feature* types.\\\"].join(\\\" \\\")),!1}for(var p in i)u.log([\\\"Location *\\\"+p+\\\"*\\\",\\\"does not have a matching feature with id-key\\\",\\\"*\\\"+e.featureidkey+\\\"*.\\\"].join(\\\" \\\"));return s},fetchTraceGeoData:function(t){var e=window.PlotlyGeoAssets||{},r=[];function i(t){return new Promise((function(r,i){n.json(t,(function(n,a){if(n){delete e[t];var o=404===n.status?'GeoJSON at URL \\\"'+t+'\\\" does not exist.':\\\"Unexpected error while fetching from \\\"+t;return i(new Error(o))}return e[t]=a,r(a)}))}))}function a(t){return new Promise((function(r,n){var i=0,a=setInterval((function(){return e[t]&&\\\"pending\\\"!==e[t]?(clearInterval(a),r(e[t])):i>100?(clearInterval(a),n(\\\"Unexpected error while fetching from \\\"+t)):void i++}),50)}))}for(var o=0;o<t.length;o++){var s=t[o][0].trace.geojson;\\\"string\\\"==typeof s&&(e[s]?\\\"pending\\\"===e[s]&&r.push(a(s)):(e[s]=\\\"pending\\\",r.push(i(s))))}return r},computeBbox:function(t){return s.default(t)}}},18214:function(t,e,r){\\\"use strict\\\";var n=r(50606).BADNUM;e.calcTraceToLineCoords=function(t){for(var e=t[0].trace.connectgaps,r=[],i=[],a=0;a<t.length;a++){var o=t[a].lonlat;o[0]!==n?i.push(o):!e&&i.length>0&&(r.push(i),i=[])}return i.length>0&&r.push(i),r},e.makeLine=function(t){return 1===t.length?{type:\\\"LineString\\\",coordinates:t[0]}:{type:\\\"MultiLineString\\\",coordinates:t}},e.makePolygon=function(t){if(1===t.length)return{type:\\\"Polygon\\\",coordinates:t};for(var e=new Array(t.length),r=0;r<t.length;r++)e[r]=[t[r]];return{type:\\\"MultiPolygon\\\",coordinates:e}},e.makeBlank=function(){return{type:\\\"Point\\\",coordinates:[]}}},87642:function(t,e,r){\\\"use strict\\\";var n,i,a,o=r(64872).mod;function s(t,e,r,n,i,a,o,s){var l=r-t,u=i-t,c=o-i,f=n-e,h=a-e,p=s-a,d=l*p-c*f;if(0===d)return null;var v=(u*p-c*h)/d,g=(u*f-l*h)/d;return g<0||g>1||v<0||v>1?null:{x:t+l*v,y:e+f*v}}function l(t,e,r,n,i){var a=n*t+i*e;if(a<0)return n*n+i*i;if(a>r){var o=n-t,s=i-e;return o*o+s*s}var l=n*e-i*t;return l*l/r}e.segmentsIntersect=s,e.segmentDistance=function(t,e,r,n,i,a,o,u){if(s(t,e,r,n,i,a,o,u))return 0;var c=r-t,f=n-e,h=o-i,p=u-a,d=c*c+f*f,v=h*h+p*p,g=Math.min(l(c,f,d,i-t,a-e),l(c,f,d,o-t,u-e),l(h,p,v,t-i,e-a),l(h,p,v,r-i,n-a));return Math.sqrt(g)},e.getTextLocation=function(t,e,r,s){if(t===i&&s===a||(n={},i=t,a=s),n[r])return n[r];var l=t.getPointAtLength(o(r-s/2,e)),u=t.getPointAtLength(o(r+s/2,e)),c=Math.atan((u.y-l.y)/(u.x-l.x)),f=t.getPointAtLength(o(r,e)),h={x:(4*f.x+l.x+u.x)/6,y:(4*f.y+l.y+u.y)/6,theta:c};return n[r]=h,h},e.clearLocationCache=function(){i=null},e.getVisibleSegment=function(t,e,r){var n,i,a=e.left,o=e.right,s=e.top,l=e.bottom,u=0,c=t.getTotalLength(),f=c;function h(e){var r=t.getPointAtLength(e);0===e?n=r:e===c&&(i=r);var u=r.x<a?a-r.x:r.x>o?r.x-o:0,f=r.y<s?s-r.y:r.y>l?r.y-l:0;return Math.sqrt(u*u+f*f)}for(var p=h(u);p;){if((u+=p+r)>f)return;p=h(u)}for(p=h(f);p;){if(u>(f-=p+r))return;p=h(f)}return{min:u,max:f,len:f-u,total:c,isClosed:0===u&&f===c&&Math.abs(n.x-i.x)<.1&&Math.abs(n.y-i.y)<.1}},e.findPointOnPath=function(t,e,r,n){for(var i,a,o,s=(n=n||{}).pathLength||t.getTotalLength(),l=n.tolerance||.001,u=n.iterationLimit||30,c=t.getPointAtLength(0)[r]>t.getPointAtLength(s)[r]?-1:1,f=0,h=0,p=s;f<u;){if(i=(h+p)/2,o=(a=t.getPointAtLength(i))[r]-e,Math.abs(o)<l)return a;c*o>0?p=i:h=i,f++}return a}},81697:function(t,e,r){\\\"use strict\\\";var n=r(92770),i=r(84267),a=r(25075),o=r(21081),s=r(22399).defaultLine,l=r(73627).isArrayOrTypedArray,u=a(s);function c(t,e){var r=t;return r[3]*=e,r}function f(t){if(n(t))return u;var e=a(t);return e.length?e:u}function h(t){return n(t)?t:1}t.exports={formatColor:function(t,e,r){var n,i,s,p,d,v=t.color,g=l(v),y=l(e),m=o.extractOpts(t),x=[];if(n=void 0!==m.colorscale?o.makeColorScaleFuncFromTrace(t):f,i=g?function(t,e){return void 0===t[e]?u:a(n(t[e]))}:f,s=y?function(t,e){return void 0===t[e]?1:h(t[e])}:h,g||y)for(var b=0;b<r;b++)p=i(v,b),d=s(e,b),x[b]=c(p,d);else x=c(a(v),e);return x},parseColorScale:function(t){var e=o.extractOpts(t),r=e.colorscale;return e.reversescale&&(r=o.flipScale(e.colorscale)),r.map((function(t){var e=t[0],r=i(t[1]).toRgb();return{index:e,rgb:[r.r,r.g,r.b,r.a]}}))}}},28984:function(t,e,r){\\\"use strict\\\";var n=r(23389);function i(t){return[t]}t.exports={keyFun:function(t){return t.key},repeat:i,descend:n,wrap:i,unwrap:function(t){return t[0]}}},23389:function(t){\\\"use strict\\\";t.exports=function(t){return t}},39240:function(t){\\\"use strict\\\";t.exports=function(t,e){if(!e)return t;var r=1/Math.abs(e),n=r>1?(r*t+r*e)/r:t+e,i=String(n).length;if(i>16){var a=String(e).length;if(i>=String(t).length+a){var o=parseFloat(n).toPrecision(12);-1===o.indexOf(\\\"e+\\\")&&(n=+o)}}return n}},71828:function(t,e,r){\\\"use strict\\\";var n=r(39898),i=r(84096).g0,a=r(60721).WU,o=r(92770),s=r(50606),l=s.FP_SAFE,u=-l,c=s.BADNUM,f=t.exports={};f.adjustFormat=function(t){return!t||/^\\\\d[.]\\\\df/.test(t)||/[.]\\\\d%/.test(t)?t:\\\"0.f\\\"===t?\\\"~f\\\":/^\\\\d%/.test(t)?\\\"~%\\\":/^\\\\ds/.test(t)?\\\"~s\\\":!/^[~,.0$]/.test(t)&&/[&fps]/.test(t)?\\\"~\\\"+t:t};var h={};f.warnBadFormat=function(t){var e=String(t);h[e]||(h[e]=1,f.warn('encountered bad format: \\\"'+e+'\\\"'))},f.noFormat=function(t){return String(t)},f.numberFormat=function(t){var e;try{e=a(f.adjustFormat(t))}catch(e){return f.warnBadFormat(t),f.noFormat}return e},f.nestedProperty=r(65487),f.keyedContainer=r(66636),f.relativeAttr=r(6962),f.isPlainObject=r(41965),f.toLogRange=r(58163),f.relinkPrivateKeys=r(51332);var p=r(73627);f.isTypedArray=p.isTypedArray,f.isArrayOrTypedArray=p.isArrayOrTypedArray,f.isArray1D=p.isArray1D,f.ensureArray=p.ensureArray,f.concat=p.concat,f.maxRowLength=p.maxRowLength,f.minRowLength=p.minRowLength;var d=r(64872);f.mod=d.mod,f.modHalf=d.modHalf;var v=r(96554);f.valObjectMeta=v.valObjectMeta,f.coerce=v.coerce,f.coerce2=v.coerce2,f.coerceFont=v.coerceFont,f.coercePattern=v.coercePattern,f.coerceHoverinfo=v.coerceHoverinfo,f.coerceSelectionMarkerOpacity=v.coerceSelectionMarkerOpacity,f.validate=v.validate;var g=r(41631);f.dateTime2ms=g.dateTime2ms,f.isDateTime=g.isDateTime,f.ms2DateTime=g.ms2DateTime,f.ms2DateTimeLocal=g.ms2DateTimeLocal,f.cleanDate=g.cleanDate,f.isJSDate=g.isJSDate,f.formatDate=g.formatDate,f.incrementMonth=g.incrementMonth,f.dateTick0=g.dateTick0,f.dfltRange=g.dfltRange,f.findExactDates=g.findExactDates,f.MIN_MS=g.MIN_MS,f.MAX_MS=g.MAX_MS;var y=r(65888);f.findBin=y.findBin,f.sorterAsc=y.sorterAsc,f.sorterDes=y.sorterDes,f.distinctVals=y.distinctVals,f.roundUp=y.roundUp,f.sort=y.sort,f.findIndexOfMin=y.findIndexOfMin,f.sortObjectKeys=r(78607);var m=r(80038);f.aggNums=m.aggNums,f.len=m.len,f.mean=m.mean,f.median=m.median,f.midRange=m.midRange,f.variance=m.variance,f.stdev=m.stdev,f.interp=m.interp;var x=r(35657);f.init2dArray=x.init2dArray,f.transposeRagged=x.transposeRagged,f.dot=x.dot,f.translationMatrix=x.translationMatrix,f.rotationMatrix=x.rotationMatrix,f.rotationXYMatrix=x.rotationXYMatrix,f.apply3DTransform=x.apply3DTransform,f.apply2DTransform=x.apply2DTransform,f.apply2DTransform2=x.apply2DTransform2,f.convertCssMatrix=x.convertCssMatrix,f.inverseTransformMatrix=x.inverseTransformMatrix;var b=r(26348);f.deg2rad=b.deg2rad,f.rad2deg=b.rad2deg,f.angleDelta=b.angleDelta,f.angleDist=b.angleDist,f.isFullCircle=b.isFullCircle,f.isAngleInsideSector=b.isAngleInsideSector,f.isPtInsideSector=b.isPtInsideSector,f.pathArc=b.pathArc,f.pathSector=b.pathSector,f.pathAnnulus=b.pathAnnulus;var _=r(99863);f.isLeftAnchor=_.isLeftAnchor,f.isCenterAnchor=_.isCenterAnchor,f.isRightAnchor=_.isRightAnchor,f.isTopAnchor=_.isTopAnchor,f.isMiddleAnchor=_.isMiddleAnchor,f.isBottomAnchor=_.isBottomAnchor;var w=r(87642);f.segmentsIntersect=w.segmentsIntersect,f.segmentDistance=w.segmentDistance,f.getTextLocation=w.getTextLocation,f.clearLocationCache=w.clearLocationCache,f.getVisibleSegment=w.getVisibleSegment,f.findPointOnPath=w.findPointOnPath;var T=r(1426);f.extendFlat=T.extendFlat,f.extendDeep=T.extendDeep,f.extendDeepAll=T.extendDeepAll,f.extendDeepNoArrays=T.extendDeepNoArrays;var k=r(47769);f.log=k.log,f.warn=k.warn,f.error=k.error;var A=r(30587);f.counterRegex=A.counter;var M=r(79990);f.throttle=M.throttle,f.throttleDone=M.done,f.clearThrottle=M.clear;var S=r(24401);function E(t){var e={};for(var r in t)for(var n=t[r],i=0;i<n.length;i++)e[n[i]]=+r;return e}f.getGraphDiv=S.getGraphDiv,f.isPlotDiv=S.isPlotDiv,f.removeElement=S.removeElement,f.addStyleRule=S.addStyleRule,f.addRelatedStyleRule=S.addRelatedStyleRule,f.deleteRelatedStyleRule=S.deleteRelatedStyleRule,f.getFullTransformMatrix=S.getFullTransformMatrix,f.getElementTransformMatrix=S.getElementTransformMatrix,f.getElementAndAncestors=S.getElementAndAncestors,f.equalDomRects=S.equalDomRects,f.clearResponsive=r(86367),f.preserveDrawingBuffer=r(45142),f.makeTraceGroups=r(77310),f._=r(15867),f.notifier=r(75046),f.filterUnique=r(75744),f.filterVisible=r(76756),f.pushUnique=r(75138),f.increment=r(39240),f.cleanNumber=r(95218),f.ensureNumber=function(t){return o(t)?(t=Number(t))>l||t<u?c:t:c},f.isIndex=function(t,e){return!(void 0!==e&&t>=e)&&o(t)&&t>=0&&t%1==0},f.noop=r(64213),f.identity=r(23389),f.repeat=function(t,e){for(var r=new Array(e),n=0;n<e;n++)r[n]=t;return r},f.swapAttrs=function(t,e,r,n){r||(r=\\\"x\\\"),n||(n=\\\"y\\\");for(var i=0;i<e.length;i++){var a=e[i],o=f.nestedProperty(t,a.replace(\\\"?\\\",r)),s=f.nestedProperty(t,a.replace(\\\"?\\\",n)),l=o.get();o.set(s.get()),s.set(l)}},f.raiseToTop=function(t){t.parentNode.appendChild(t)},f.cancelTransition=function(t){return t.transition().duration(0)},f.constrain=function(t,e,r){return e>r?Math.max(r,Math.min(e,t)):Math.max(e,Math.min(r,t))},f.bBoxIntersect=function(t,e,r){return r=r||0,t.left<=e.right+r&&e.left<=t.right+r&&t.top<=e.bottom+r&&e.top<=t.bottom+r},f.simpleMap=function(t,e,r,n,i){for(var a=t.length,o=new Array(a),s=0;s<a;s++)o[s]=e(t[s],r,n,i);return o},f.randstr=function t(e,r,n,i){if(n||(n=16),void 0===r&&(r=24),r<=0)return\\\"0\\\";var a,o,s=Math.log(Math.pow(2,r))/Math.log(n),l=\\\"\\\";for(a=2;s===1/0;a*=2)s=Math.log(Math.pow(2,r/a))/Math.log(n)*a;var u=s-Math.floor(s);for(a=0;a<Math.floor(s);a++)l=Math.floor(Math.random()*n).toString(n)+l;u&&(o=Math.pow(n,u),l=Math.floor(Math.random()*o).toString(n)+l);var c=parseInt(l,n);return e&&e[l]||c!==1/0&&c>=Math.pow(2,r)?i>10?(f.warn(\\\"randstr failed uniqueness\\\"),l):t(e,r,n,(i||0)+1):l},f.OptionControl=function(t,e){t||(t={}),e||(e=\\\"opt\\\");var r={optionList:[],_newoption:function(n){n[e]=t,r[n.name]=n,r.optionList.push(n)}};return r[\\\"_\\\"+e]=t,r},f.smooth=function(t,e){if((e=Math.round(e)||0)<2)return t;var r,n,i,a,o=t.length,s=2*o,l=2*e-1,u=new Array(l),c=new Array(o);for(r=0;r<l;r++)u[r]=(1-Math.cos(Math.PI*(r+1)/e))/(2*e);for(r=0;r<o;r++){for(a=0,n=0;n<l;n++)(i=r+n+1-e)<-o?i-=s*Math.round(i/s):i>=s&&(i-=s*Math.floor(i/s)),i<0?i=-1-i:i>=o&&(i=s-1-i),a+=t[i]*u[n];c[r]=a}return c},f.syncOrAsync=function(t,e,r){var n;function i(){return f.syncOrAsync(t,e,r)}for(;t.length;)if((n=(0,t.splice(0,1)[0])(e))&&n.then)return n.then(i);return r&&r(e)},f.stripTrailingSlash=function(t){return\\\"/\\\"===t.substr(-1)?t.substr(0,t.length-1):t},f.noneOrAll=function(t,e,r){if(t){var n,i=!1,a=!0;for(n=0;n<r.length;n++)null!=t[r[n]]?i=!0:a=!1;if(i&&!a)for(n=0;n<r.length;n++)t[r[n]]=e[r[n]]}},f.mergeArray=function(t,e,r,n){var i=\\\"function\\\"==typeof n;if(f.isArrayOrTypedArray(t))for(var a=Math.min(t.length,e.length),o=0;o<a;o++){var s=t[o];e[o][r]=i?n(s):s}},f.mergeArrayCastPositive=function(t,e,r){return f.mergeArray(t,e,r,(function(t){var e=+t;return isFinite(e)&&e>0?e:0}))},f.fillArray=function(t,e,r,n){if(n=n||f.identity,f.isArrayOrTypedArray(t))for(var i=0;i<e.length;i++)e[i][r]=n(t[i])},f.castOption=function(t,e,r,n){n=n||f.identity;var i=f.nestedProperty(t,r).get();return f.isArrayOrTypedArray(i)?Array.isArray(e)&&f.isArrayOrTypedArray(i[e[0]])?n(i[e[0]][e[1]]):n(i[e]):i},f.extractOption=function(t,e,r,n){if(r in t)return t[r];var i=f.nestedProperty(e,n).get();return Array.isArray(i)?void 0:i},f.tagSelected=function(t,e,r){var n,i,a=e.selectedpoints,o=e._indexToPoints;o&&(n=E(o));for(var s=0;s<a.length;s++){var l=a[s];if(f.isIndex(l)||f.isArrayOrTypedArray(l)&&f.isIndex(l[0])&&f.isIndex(l[1])){var u=n?n[l]:l,c=r?r[u]:u;void 0!==(i=c)&&i<t.length&&(t[c].selected=1)}}},f.selIndices2selPoints=function(t){var e=t.selectedpoints,r=t._indexToPoints;if(r){for(var n=E(r),i=[],a=0;a<e.length;a++){var o=e[a];if(f.isIndex(o)){var s=n[o];f.isIndex(s)&&i.push(s)}}return i}return e},f.getTargetArray=function(t,e){var r=e.target;if(\\\"string\\\"==typeof r&&r){var n=f.nestedProperty(t,r).get();return!!Array.isArray(n)&&n}return!!Array.isArray(r)&&r},f.minExtend=function t(e,r,n){var i={};\\\"object\\\"!=typeof r&&(r={});var a,o,s,l=\\\"pieLike\\\"===n?-1:3,u=Object.keys(e);for(a=0;a<u.length;a++)s=e[o=u[a]],\\\"_\\\"!==o.charAt(0)&&\\\"function\\\"!=typeof s&&(\\\"module\\\"===o?i[o]=s:Array.isArray(s)?i[o]=\\\"colorscale\\\"===o||-1===l?s.slice():s.slice(0,l):f.isTypedArray(s)?i[o]=-1===l?s.subarray():s.subarray(0,l):i[o]=s&&\\\"object\\\"==typeof s?t(e[o],r[o],n):s);for(u=Object.keys(r),a=0;a<u.length;a++)\\\"object\\\"==typeof(s=r[o=u[a]])&&o in i&&\\\"object\\\"==typeof i[o]||(i[o]=s);return i},f.titleCase=function(t){return t.charAt(0).toUpperCase()+t.substr(1)},f.containsAny=function(t,e){for(var r=0;r<e.length;r++)if(-1!==t.indexOf(e[r]))return!0;return!1},f.isIE=function(){return void 0!==window.navigator.msSaveBlob};var L=/Version\\\\/[\\\\d\\\\.]+.*Safari/;f.isSafari=function(){return L.test(window.navigator.userAgent)};var C=/iPad|iPhone|iPod/;f.isIOS=function(){return C.test(window.navigator.userAgent)};var P=/Firefox\\\\/(\\\\d+)\\\\.\\\\d+/;f.getFirefoxVersion=function(){var t=P.exec(window.navigator.userAgent);if(t&&2===t.length){var e=parseInt(t[1]);if(!isNaN(e))return e}return null},f.isD3Selection=function(t){return t instanceof n.selection},f.ensureSingle=function(t,e,r,n){var i=t.select(e+(r?\\\".\\\"+r:\\\"\\\"));if(i.size())return i;var a=t.append(e);return r&&a.classed(r,!0),n&&a.call(n),a},f.ensureSingleById=function(t,e,r,n){var i=t.select(e+\\\"#\\\"+r);if(i.size())return i;var a=t.append(e).attr(\\\"id\\\",r);return n&&a.call(n),a},f.objectFromPath=function(t,e){for(var r,n=t.split(\\\".\\\"),i=r={},a=0;a<n.length;a++){var o=n[a],s=null,l=n[a].match(/(.*)\\\\[([0-9]+)\\\\]/);l?(o=l[1],s=l[2],r=r[o]=[],a===n.length-1?r[s]=e:r[s]={},r=r[s]):(a===n.length-1?r[o]=e:r[o]={},r=r[o])}return i};var O=/^([^\\\\[\\\\.]+)\\\\.(.+)?/,I=/^([^\\\\.]+)\\\\[([0-9]+)\\\\](\\\\.)?(.+)?/;f.expandObjectPaths=function(t){var e,r,n,i,a,o,s;if(\\\"object\\\"==typeof t&&!Array.isArray(t))for(r in t)t.hasOwnProperty(r)&&((e=r.match(O))?(i=t[r],n=e[1],delete t[r],t[n]=f.extendDeepNoArrays(t[n]||{},f.objectFromPath(r,f.expandObjectPaths(i))[n])):(e=r.match(I))?(i=t[r],n=e[1],a=parseInt(e[2]),delete t[r],t[n]=t[n]||[],\\\".\\\"===e[3]?(s=e[4],o=t[n][a]=t[n][a]||{},f.extendDeepNoArrays(o,f.objectFromPath(s,f.expandObjectPaths(i)))):t[n][a]=f.expandObjectPaths(i)):t[r]=f.expandObjectPaths(t[r]));return t},f.numSeparate=function(t,e,r){if(r||(r=!1),\\\"string\\\"!=typeof e||0===e.length)throw new Error(\\\"Separator string required for formatting!\\\");\\\"number\\\"==typeof t&&(t=String(t));var n=/(\\\\d+)(\\\\d{3})/,i=e.charAt(0),a=e.charAt(1),o=t.split(\\\".\\\"),s=o[0],l=o.length>1?i+o[1]:\\\"\\\";if(a&&(o.length>1||s.length>4||r))for(;n.test(s);)s=s.replace(n,\\\"$1\\\"+a+\\\"$2\\\");return s+l},f.TEMPLATE_STRING_REGEX=/%{([^\\\\s%{}:]*)([:|\\\\|][^}]*)?}/g;var D=/^\\\\w*$/;f.templateString=function(t,e){var r={};return t.replace(f.TEMPLATE_STRING_REGEX,(function(t,n){var i;return D.test(n)?i=e[n]:(r[n]=r[n]||f.nestedProperty(e,n).get,i=r[n]()),f.isValidTextValue(i)?i:\\\"\\\"}))};var z={max:10,count:0,name:\\\"hovertemplate\\\"};f.hovertemplateString=function(){return j.apply(z,arguments)};var R={max:10,count:0,name:\\\"texttemplate\\\"};f.texttemplateString=function(){return j.apply(R,arguments)};var F=/^(\\\\S+)([\\\\*\\\\/])(-?\\\\d+(\\\\.\\\\d+)?)$/,B={max:10,count:0,name:\\\"texttemplate\\\",parseMultDiv:!0};f.texttemplateStringForShapes=function(){return j.apply(B,arguments)};var N=/^[:|\\\\|]/;function j(t,e,r){var n=this,a=arguments;e||(e={});var o={};return t.replace(f.TEMPLATE_STRING_REGEX,(function(t,s,l){var u=\\\"_xother\\\"===s||\\\"_yother\\\"===s,c=\\\"_xother_\\\"===s||\\\"_yother_\\\"===s,h=\\\"xother_\\\"===s||\\\"yother_\\\"===s,p=\\\"xother\\\"===s||\\\"yother\\\"===s||u||h||c,d=s;(u||c)&&(d=d.substring(1)),(h||c)&&(d=d.substring(0,d.length-1));var v,g,y,m=null,x=null;if(n.parseMultDiv){var b=function(t){var e=t.match(F);return e?{key:e[1],op:e[2],number:Number(e[3])}:{key:t,op:null,number:null}}(d);d=b.key,m=b.op,x=b.number}if(p){if(void 0===(v=e[d]))return\\\"\\\"}else for(y=3;y<a.length;y++)if(g=a[y]){if(g.hasOwnProperty(d)){v=g[d];break}if(D.test(d)||(v=f.nestedProperty(g,d).get(),(v=o[d]||f.nestedProperty(g,d).get())&&(o[d]=v)),void 0!==v)break}if(void 0!==v&&(\\\"*\\\"===m&&(v*=x),\\\"/\\\"===m&&(v/=x)),void 0===v&&n)return n.count<n.max&&(f.warn(\\\"Variable '\\\"+d+\\\"' in \\\"+n.name+\\\" could not be found!\\\"),v=t),n.count===n.max&&f.warn(\\\"Too many \\\"+n.name+\\\" warnings - additional warnings will be suppressed\\\"),n.count++,t;if(l){var _;if(\\\":\\\"===l[0]&&(v=(_=r?r.numberFormat:f.numberFormat)(l.replace(N,\\\"\\\"))(v)),\\\"|\\\"===l[0]){_=r?r.timeFormat:i;var w=f.dateTime2ms(v);v=f.formatDate(w,l.replace(N,\\\"\\\"),!1,_)}}else{var T=d+\\\"Label\\\";e.hasOwnProperty(T)&&(v=e[T])}return p&&(v=\\\"(\\\"+v+\\\")\\\",(u||c)&&(v=\\\" \\\"+v),(h||c)&&(v+=\\\" \\\")),v}))}f.subplotSort=function(t,e){for(var r=Math.min(t.length,e.length)+1,n=0,i=0,a=0;a<r;a++){var o=t.charCodeAt(a)||0,s=e.charCodeAt(a)||0,l=o>=48&&o<=57,u=s>=48&&s<=57;if(l&&(n=10*n+o-48),u&&(i=10*i+s-48),!l||!u){if(n!==i)return n-i;if(o!==s)return o-s}}return i-n};var U=2e9;f.seedPseudoRandom=function(){U=2e9},f.pseudoRandom=function(){var t=U;return U=(69069*U+1)%4294967296,Math.abs(U-t)<429496729?f.pseudoRandom():U/4294967296},f.fillText=function(t,e,r){var n=Array.isArray(r)?function(t){r.push(t)}:function(t){r.text=t},i=f.extractOption(t,e,\\\"htx\\\",\\\"hovertext\\\");if(f.isValidTextValue(i))return n(i);var a=f.extractOption(t,e,\\\"tx\\\",\\\"text\\\");return f.isValidTextValue(a)?n(a):void 0},f.isValidTextValue=function(t){return t||0===t},f.formatPercent=function(t,e){e=e||0;for(var r=(Math.round(100*t*Math.pow(10,e))*Math.pow(.1,e)).toFixed(e)+\\\"%\\\",n=0;n<e;n++)-1!==r.indexOf(\\\".\\\")&&(r=(r=r.replace(\\\"0%\\\",\\\"%\\\")).replace(\\\".%\\\",\\\"%\\\"));return r},f.isHidden=function(t){var e=window.getComputedStyle(t).display;return!e||\\\"none\\\"===e},f.strTranslate=function(t,e){return t||e?\\\"translate(\\\"+t+\\\",\\\"+e+\\\")\\\":\\\"\\\"},f.strRotate=function(t){return t?\\\"rotate(\\\"+t+\\\")\\\":\\\"\\\"},f.strScale=function(t){return 1!==t?\\\"scale(\\\"+t+\\\")\\\":\\\"\\\"},f.getTextTransform=function(t){var e=t.noCenter,r=t.textX,n=t.textY,i=t.targetX,a=t.targetY,o=t.anchorX||0,s=t.anchorY||0,l=t.rotate,u=t.scale;return u?u>1&&(u=1):u=0,f.strTranslate(i-u*(r+o),a-u*(n+s))+f.strScale(u)+(l?\\\"rotate(\\\"+l+(e?\\\"\\\":\\\" \\\"+r+\\\" \\\"+n)+\\\")\\\":\\\"\\\")},f.setTransormAndDisplay=function(t,e){t.attr(\\\"transform\\\",f.getTextTransform(e)),t.style(\\\"display\\\",e.scale?null:\\\"none\\\")},f.ensureUniformFontSize=function(t,e){var r=f.extendFlat({},e);return r.size=Math.max(e.size,t._fullLayout.uniformtext.minsize||0),r},f.join2=function(t,e,r){var n=t.length;return n>1?t.slice(0,-1).join(e)+r+t[n-1]:t.join(e)},f.bigFont=function(t){return Math.round(1.2*t)};var V=f.getFirefoxVersion(),H=null!==V&&V<86;f.getPositionFromD3Event=function(){return H?[n.event.layerX,n.event.layerY]:[n.event.offsetX,n.event.offsetY]}},41965:function(t){\\\"use strict\\\";t.exports=function(t){return window&&window.process&&window.process.versions?\\\"[object Object]\\\"===Object.prototype.toString.call(t):\\\"[object Object]\\\"===Object.prototype.toString.call(t)&&Object.getPrototypeOf(t).hasOwnProperty(\\\"hasOwnProperty\\\")}},66636:function(t,e,r){\\\"use strict\\\";var n=r(65487),i=/^\\\\w*$/;t.exports=function(t,e,r,a){var o,s,l;r=r||\\\"name\\\",a=a||\\\"value\\\";var u={};e&&e.length?(l=n(t,e),s=l.get()):s=t,e=e||\\\"\\\";var c={};if(s)for(o=0;o<s.length;o++)c[s[o][r]]=o;var f=i.test(a),h={set:function(t,e){var i=null===e?4:0;if(!s){if(!l||4===i)return;s=[],l.set(s)}var o=c[t];if(void 0===o){if(4===i)return;i|=3,o=s.length,c[t]=o}else e!==(f?s[o][a]:n(s[o],a).get())&&(i|=2);var p=s[o]=s[o]||{};return p[r]=t,f?p[a]=e:n(p,a).set(e),null!==e&&(i&=-5),u[o]=u[o]|i,h},get:function(t){if(s){var e=c[t];return void 0===e?void 0:f?s[e][a]:n(s[e],a).get()}},rename:function(t,e){var n=c[t];return void 0===n||(u[n]=1|u[n],c[e]=n,delete c[t],s[n][r]=e),h},remove:function(t){var e=c[t];if(void 0===e)return h;var i=s[e];if(Object.keys(i).length>2)return u[e]=2|u[e],h.set(t,null);if(f){for(o=e;o<s.length;o++)u[o]=3|u[o];for(o=e;o<s.length;o++)c[s[o][r]]--;s.splice(e,1),delete c[t]}else n(i,a).set(null),u[e]=6|u[e];return h},constructUpdate:function(){for(var t,i,o={},l=Object.keys(u),c=0;c<l.length;c++)i=l[c],t=e+\\\"[\\\"+i+\\\"]\\\",s[i]?(1&u[i]&&(o[t+\\\".\\\"+r]=s[i][r]),2&u[i]&&(o[t+\\\".\\\"+a]=f?4&u[i]?null:s[i][a]:4&u[i]?null:n(s[i],a).get())):o[t]=null;return o}};return h}},15867:function(t,e,r){\\\"use strict\\\";var n=r(73972);t.exports=function(t,e){for(var r=t._context.locale,i=0;i<2;i++){for(var a=t._context.locales,o=0;o<2;o++){var s=(a[r]||{}).dictionary;if(s){var l=s[e];if(l)return l}a=n.localeRegistry}var u=r.split(\\\"-\\\")[0];if(u===r)break;r=u}return e}},47769:function(t,e,r){\\\"use strict\\\";var n=r(72075).dfltConfig,i=r(75046),a=t.exports={};a.log=function(){var t;if(n.logging>1){var e=[\\\"LOG:\\\"];for(t=0;t<arguments.length;t++)e.push(arguments[t]);console.trace.apply(console,e)}if(n.notifyOnLogging>1){var r=[];for(t=0;t<arguments.length;t++)r.push(arguments[t]);i(r.join(\\\"<br>\\\"),\\\"long\\\")}},a.warn=function(){var t;if(n.logging>0){var e=[\\\"WARN:\\\"];for(t=0;t<arguments.length;t++)e.push(arguments[t]);console.trace.apply(console,e)}if(n.notifyOnLogging>0){var r=[];for(t=0;t<arguments.length;t++)r.push(arguments[t]);i(r.join(\\\"<br>\\\"),\\\"stick\\\")}},a.error=function(){var t;if(n.logging>0){var e=[\\\"ERROR:\\\"];for(t=0;t<arguments.length;t++)e.push(arguments[t]);console.error.apply(console,e)}if(n.notifyOnLogging>0){var r=[];for(t=0;t<arguments.length;t++)r.push(arguments[t]);i(r.join(\\\"<br>\\\"),\\\"stick\\\")}}},77310:function(t,e,r){\\\"use strict\\\";var n=r(39898);t.exports=function(t,e,r){var i=t.selectAll(\\\"g.\\\"+r.replace(/\\\\s/g,\\\".\\\")).data(e,(function(t){return t[0].trace.uid}));i.exit().remove(),i.enter().append(\\\"g\\\").attr(\\\"class\\\",r),i.order();var a=t.classed(\\\"rangeplot\\\")?\\\"nodeRangePlot3\\\":\\\"node3\\\";return i.each((function(t){t[0][a]=n.select(this)})),i}},35657:function(t,e,r){\\\"use strict\\\";var n=r(79576);e.init2dArray=function(t,e){for(var r=new Array(t),n=0;n<t;n++)r[n]=new Array(e);return r},e.transposeRagged=function(t){var e,r,n=0,i=t.length;for(e=0;e<i;e++)n=Math.max(n,t[e].length);var a=new Array(n);for(e=0;e<n;e++)for(a[e]=new Array(i),r=0;r<i;r++)a[e][r]=t[r][e];return a},e.dot=function(t,r){if(!t.length||!r.length||t.length!==r.length)return null;var n,i,a=t.length;if(t[0].length)for(n=new Array(a),i=0;i<a;i++)n[i]=e.dot(t[i],r);else if(r[0].length){var o=e.transposeRagged(r);for(n=new Array(o.length),i=0;i<o.length;i++)n[i]=e.dot(t,o[i])}else for(n=0,i=0;i<a;i++)n+=t[i]*r[i];return n},e.translationMatrix=function(t,e){return[[1,0,t],[0,1,e],[0,0,1]]},e.rotationMatrix=function(t){var e=t*Math.PI/180;return[[Math.cos(e),-Math.sin(e),0],[Math.sin(e),Math.cos(e),0],[0,0,1]]},e.rotationXYMatrix=function(t,r,n){return e.dot(e.dot(e.translationMatrix(r,n),e.rotationMatrix(t)),e.translationMatrix(-r,-n))},e.apply3DTransform=function(t){return function(){var r=arguments,n=1===arguments.length?r[0]:[r[0],r[1],r[2]||0];return e.dot(t,[n[0],n[1],n[2],1]).slice(0,3)}},e.apply2DTransform=function(t){return function(){var r=arguments;3===r.length&&(r=r[0]);var n=1===arguments.length?r[0]:[r[0],r[1]];return e.dot(t,[n[0],n[1],1]).slice(0,2)}},e.apply2DTransform2=function(t){var r=e.apply2DTransform(t);return function(t){return r(t.slice(0,2)).concat(r(t.slice(2,4)))}},e.convertCssMatrix=function(t){if(t){var e=t.length;if(16===e)return t;if(6===e)return[t[0],t[1],0,0,t[2],t[3],0,0,0,0,1,0,t[4],t[5],0,1]}return[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1]},e.inverseTransformMatrix=function(t){var e=[];return n.invert(e,t),[[e[0],e[1],e[2],e[3]],[e[4],e[5],e[6],e[7]],[e[8],e[9],e[10],e[11]],[e[12],e[13],e[14],e[15]]]}},64872:function(t){\\\"use strict\\\";t.exports={mod:function(t,e){var r=t%e;return r<0?r+e:r},modHalf:function(t,e){return Math.abs(t)>e/2?t-Math.round(t/e)*e:t}}},65487:function(t,e,r){\\\"use strict\\\";var n=r(92770),i=r(73627).isArrayOrTypedArray;function a(t,e){return function(){var r,n,o,s,l,u=t;for(s=0;s<e.length-1;s++){if(-1===(r=e[s])){for(n=!0,o=[],l=0;l<u.length;l++)o[l]=a(u[l],e.slice(s+1))(),o[l]!==o[0]&&(n=!1);return n?o[0]:o}if(\\\"number\\\"==typeof r&&!i(u))return;if(\\\"object\\\"!=typeof(u=u[r])||null===u)return}if(\\\"object\\\"==typeof u&&null!==u&&null!==(o=u[e[s]]))return o}}t.exports=function(t,e){if(n(e))e=String(e);else if(\\\"string\\\"!=typeof e||\\\"[-1]\\\"===e.substr(e.length-4))throw\\\"bad property string\\\";for(var r,i,o,s=0,u=e.split(\\\".\\\");s<u.length;){if(r=String(u[s]).match(/^([^\\\\[\\\\]]*)((\\\\[\\\\-?[0-9]*\\\\])+)$/)){if(r[1])u[s]=r[1];else{if(0!==s)throw\\\"bad property string\\\";u.splice(0,1)}for(i=r[2].substr(1,r[2].length-2).split(\\\"][\\\"),o=0;o<i.length;o++)s++,u.splice(s,0,Number(i[o]))}s++}return\\\"object\\\"!=typeof t?function(t,e,r){return{set:function(){throw\\\"bad container\\\"},get:function(){},astr:e,parts:r,obj:t}}(t,e,u):{set:l(t,u,e),get:a(t,u),astr:e,parts:u,obj:t}};var o=/(^|\\\\.)args\\\\[/;function s(t,e){return void 0===t||null===t&&!e.match(o)}function l(t,e,r){return function(n){var a,o,l=t,h=\\\"\\\",p=[[t,h]],d=s(n,r);for(o=0;o<e.length-1;o++){if(\\\"number\\\"==typeof(a=e[o])&&!i(l))throw\\\"array index but container is not an array\\\";if(-1===a){if(d=!c(l,e.slice(o+1),n,r))break;return}if(!f(l,a,e[o+1],d))break;if(\\\"object\\\"!=typeof(l=l[a])||null===l)throw\\\"container is not an object\\\";h=u(h,a),p.push([l,h])}if(d){if(o===e.length-1&&(delete l[e[o]],Array.isArray(l)&&+e[o]==l.length-1))for(;l.length&&void 0===l[l.length-1];)l.pop()}else l[e[o]]=n}}function u(t,e){var r=e;return n(e)?r=\\\"[\\\"+e+\\\"]\\\":t&&(r=\\\".\\\"+e),t+r}function c(t,e,r,n){var a,o=i(r),u=!0,c=r,h=n.replace(\\\"-1\\\",0),p=!o&&s(r,h),d=e[0];for(a=0;a<t.length;a++)h=n.replace(\\\"-1\\\",a),o&&(p=s(c=r[a%r.length],h)),p&&(u=!1),f(t,a,d,p)&&l(t[a],e,n.replace(\\\"-1\\\",a))(c);return u}function f(t,e,r,n){if(void 0===t[e]){if(n)return!1;t[e]=\\\"number\\\"==typeof r?[]:{}}return!0}},64213:function(t){\\\"use strict\\\";t.exports=function(){}},75046:function(t,e,r){\\\"use strict\\\";var n=r(39898),i=r(92770),a=[];t.exports=function(t,e){if(-1===a.indexOf(t)){a.push(t);var r=1e3;i(e)?r=e:\\\"long\\\"===e&&(r=3e3);var o=n.select(\\\"body\\\").selectAll(\\\".plotly-notifier\\\").data([0]);o.enter().append(\\\"div\\\").classed(\\\"plotly-notifier\\\",!0),o.selectAll(\\\".notifier-note\\\").data(a).enter().append(\\\"div\\\").classed(\\\"notifier-note\\\",!0).style(\\\"opacity\\\",0).each((function(t){var i=n.select(this);i.append(\\\"button\\\").classed(\\\"notifier-close\\\",!0).html(\\\"&times;\\\").on(\\\"click\\\",(function(){i.transition().call(s)}));for(var a=i.append(\\\"p\\\"),o=t.split(/<br\\\\s*\\\\/?>/g),l=0;l<o.length;l++)l&&a.append(\\\"br\\\"),a.append(\\\"span\\\").text(o[l]);\\\"stick\\\"===e?i.transition().duration(350).style(\\\"opacity\\\",1):i.transition().duration(700).style(\\\"opacity\\\",1).transition().delay(r).call(s)}))}function s(t){t.duration(700).style(\\\"opacity\\\",0).each(\\\"end\\\",(function(t){var e=a.indexOf(t);-1!==e&&a.splice(e,1),n.select(this).remove()}))}}},39918:function(t,e,r){\\\"use strict\\\";var n=r(6964),i=\\\"data-savedcursor\\\";t.exports=function(t,e){var r=t.attr(i);if(e){if(!r){for(var a=(t.attr(\\\"class\\\")||\\\"\\\").split(\\\" \\\"),o=0;o<a.length;o++){var s=a[o];0===s.indexOf(\\\"cursor-\\\")&&t.attr(i,s.substr(7)).classed(s,!1)}t.attr(i)||t.attr(i,\\\"!!\\\")}n(t,e)}else r&&(t.attr(i,null),\\\"!!\\\"===r?n(t):n(t,r))}},61082:function(t,e,r){\\\"use strict\\\";var n=r(35657).dot,i=r(50606).BADNUM,a=t.exports={};a.tester=function(t){var e,r=t.slice(),n=r[0][0],a=n,o=r[0][1],s=o;for(r[r.length-1][0]===r[0][0]&&r[r.length-1][1]===r[0][1]||r.push(r[0]),e=1;e<r.length;e++)n=Math.min(n,r[e][0]),a=Math.max(a,r[e][0]),o=Math.min(o,r[e][1]),s=Math.max(s,r[e][1]);var l,u=!1;5===r.length&&(r[0][0]===r[1][0]?r[2][0]===r[3][0]&&r[0][1]===r[3][1]&&r[1][1]===r[2][1]&&(u=!0,l=function(t){return t[0]===r[0][0]}):r[0][1]===r[1][1]&&r[2][1]===r[3][1]&&r[0][0]===r[3][0]&&r[1][0]===r[2][0]&&(u=!0,l=function(t){return t[1]===r[0][1]}));var c=!0,f=r[0];for(e=1;e<r.length;e++)if(f[0]!==r[e][0]||f[1]!==r[e][1]){c=!1;break}return{xmin:n,xmax:a,ymin:o,ymax:s,pts:r,contains:u?function(t,e){var r=t[0],u=t[1];return!(r===i||r<n||r>a||u===i||u<o||u>s||e&&l(t))}:function(t,e){var l=t[0],u=t[1];if(l===i||l<n||l>a||u===i||u<o||u>s)return!1;var c,f,h,p,d,v=r.length,g=r[0][0],y=r[0][1],m=0;for(c=1;c<v;c++)if(f=g,h=y,g=r[c][0],y=r[c][1],!(l<(p=Math.min(f,g))||l>Math.max(f,g)||u>Math.max(h,y)))if(u<Math.min(h,y))l!==p&&m++;else{if(u===(d=g===f?u:h+(l-f)*(y-h)/(g-f)))return 1!==c||!e;u<=d&&l!==p&&m++}return m%2==1},isRect:u,degenerate:c}},a.isSegmentBent=function(t,e,r,i){var a,o,s,l=t[e],u=[t[r][0]-l[0],t[r][1]-l[1]],c=n(u,u),f=Math.sqrt(c),h=[-u[1]/f,u[0]/f];for(a=e+1;a<r;a++)if(o=[t[a][0]-l[0],t[a][1]-l[1]],(s=n(o,u))<0||s>c||Math.abs(n(o,h))>i)return!0;return!1},a.filter=function(t,e){var r=[t[0]],n=0,i=0;function o(o){t.push(o);var s=r.length,l=n;r.splice(i+1);for(var u=l+1;u<t.length;u++)(u===t.length-1||a.isSegmentBent(t,l,u+1,e))&&(r.push(t[u]),r.length<s-2&&(n=u,i=r.length-1),l=u)}return t.length>1&&o(t.pop()),{addPt:o,raw:t,filtered:r}}},79749:function(t,e,r){\\\"use strict\\\";var n=r(58617),i=r(98580);t.exports=function(t,e,a){var o=t._fullLayout,s=!0;return o._glcanvas.each((function(n){if(n.regl)n.regl.preloadCachedCode(a);else if(!n.pick||o._has(\\\"parcoords\\\")){try{n.regl=i({canvas:this,attributes:{antialias:!n.pick,preserveDrawingBuffer:!0},pixelRatio:t._context.plotGlPixelRatio||r.g.devicePixelRatio,extensions:e||[],cachedCode:a||{}})}catch(t){s=!1}n.regl||(s=!1),s&&this.addEventListener(\\\"webglcontextlost\\\",(function(e){t&&t.emit&&t.emit(\\\"plotly_webglcontextlost\\\",{event:e,layer:n.key})}),!1)}})),s||n({container:o._glcontainer.node()}),s}},45142:function(t,e,r){\\\"use strict\\\";var n=r(92770),i=r(35791);t.exports=function(t){var e;if(\\\"string\\\"!=typeof(e=t&&t.hasOwnProperty(\\\"userAgent\\\")?t.userAgent:function(){var t;return\\\"undefined\\\"!=typeof navigator&&(t=navigator.userAgent),t&&t.headers&&\\\"string\\\"==typeof t.headers[\\\"user-agent\\\"]&&(t=t.headers[\\\"user-agent\\\"]),t}()))return!0;var r=i({ua:{headers:{\\\"user-agent\\\":e}},tablet:!0,featureDetect:!1});if(!r)for(var a=e.split(\\\" \\\"),o=1;o<a.length;o++)if(-1!==a[o].indexOf(\\\"Safari\\\"))for(var s=o-1;s>-1;s--){var l=a[s];if(\\\"Version/\\\"===l.substr(0,8)){var u=l.substr(8).split(\\\".\\\")[0];if(n(u)&&(u=+u),u>=13)return!0}}return r}},75138:function(t){\\\"use strict\\\";t.exports=function(t,e){if(e instanceof RegExp){for(var r=e.toString(),n=0;n<t.length;n++)if(t[n]instanceof RegExp&&t[n].toString()===r)return t;t.push(e)}else!e&&0!==e||-1!==t.indexOf(e)||t.push(e);return t}},10847:function(t,e,r){\\\"use strict\\\";var n=r(71828),i=r(72075).dfltConfig,a={add:function(t,e,r,n,a){var o,s;t.undoQueue=t.undoQueue||{index:0,queue:[],sequence:!1},s=t.undoQueue.index,t.autoplay?t.undoQueue.inSequence||(t.autoplay=!1):(!t.undoQueue.sequence||t.undoQueue.beginSequence?(o={undo:{calls:[],args:[]},redo:{calls:[],args:[]}},t.undoQueue.queue.splice(s,t.undoQueue.queue.length-s,o),t.undoQueue.index+=1):o=t.undoQueue.queue[s-1],t.undoQueue.beginSequence=!1,o&&(o.undo.calls.unshift(e),o.undo.args.unshift(r),o.redo.calls.push(n),o.redo.args.push(a)),t.undoQueue.queue.length>i.queueLength&&(t.undoQueue.queue.shift(),t.undoQueue.index--))},startSequence:function(t){t.undoQueue=t.undoQueue||{index:0,queue:[],sequence:!1},t.undoQueue.sequence=!0,t.undoQueue.beginSequence=!0},stopSequence:function(t){t.undoQueue=t.undoQueue||{index:0,queue:[],sequence:!1},t.undoQueue.sequence=!1,t.undoQueue.beginSequence=!1},undo:function(t){var e,r;if(!(void 0===t.undoQueue||isNaN(t.undoQueue.index)||t.undoQueue.index<=0)){for(t.undoQueue.index--,e=t.undoQueue.queue[t.undoQueue.index],t.undoQueue.inSequence=!0,r=0;r<e.undo.calls.length;r++)a.plotDo(t,e.undo.calls[r],e.undo.args[r]);t.undoQueue.inSequence=!1,t.autoplay=!1}},redo:function(t){var e,r;if(!(void 0===t.undoQueue||isNaN(t.undoQueue.index)||t.undoQueue.index>=t.undoQueue.queue.length)){for(e=t.undoQueue.queue[t.undoQueue.index],t.undoQueue.inSequence=!0,r=0;r<e.redo.calls.length;r++)a.plotDo(t,e.redo.calls[r],e.redo.args[r]);t.undoQueue.inSequence=!1,t.autoplay=!1,t.undoQueue.index++}},plotDo:function(t,e,r){t.autoplay=!0,r=function(t,e){for(var r,i=[],a=0;a<e.length;a++)r=e[a],i[a]=r===t?r:\\\"object\\\"==typeof r?Array.isArray(r)?n.extendDeep([],r):n.extendDeepAll({},r):r;return i}(t,r),e.apply(null,r)}};t.exports=a},30587:function(t,e){\\\"use strict\\\";e.counter=function(t,e,r,n){var i=(e||\\\"\\\")+(r?\\\"\\\":\\\"$\\\"),a=!1===n?\\\"\\\":\\\"^\\\";return\\\"xy\\\"===t?new RegExp(a+\\\"x([2-9]|[1-9][0-9]+)?y([2-9]|[1-9][0-9]+)?\\\"+i):new RegExp(a+t+\\\"([2-9]|[1-9][0-9]+)?\\\"+i)}},6962:function(t){\\\"use strict\\\";var e=/^(.*)(\\\\.[^\\\\.\\\\[\\\\]]+|\\\\[\\\\d\\\\])$/,r=/^[^\\\\.\\\\[\\\\]]+$/;t.exports=function(t,n){for(;n;){var i=t.match(e);if(i)t=i[1];else{if(!t.match(r))throw new Error(\\\"bad relativeAttr call:\\\"+[t,n]);t=\\\"\\\"}if(\\\"^\\\"!==n.charAt(0))break;n=n.slice(1)}return t&&\\\"[\\\"!==n.charAt(0)?t+\\\".\\\"+n:t+n}},51332:function(t,e,r){\\\"use strict\\\";var n=r(73627).isArrayOrTypedArray,i=r(41965);t.exports=function t(e,r){for(var a in r){var o=r[a],s=e[a];if(s!==o)if(\\\"_\\\"===a.charAt(0)||\\\"function\\\"==typeof o){if(a in e)continue;e[a]=o}else if(n(o)&&n(s)&&i(o[0])){if(\\\"customdata\\\"===a||\\\"ids\\\"===a)continue;for(var l=Math.min(o.length,s.length),u=0;u<l;u++)s[u]!==o[u]&&i(o[u])&&i(s[u])&&t(s[u],o[u])}else i(o)&&i(s)&&(t(s,o),Object.keys(s).length||delete e[a])}}},65888:function(t,e,r){\\\"use strict\\\";var n=r(92770),i=r(47769),a=r(23389),o=r(50606).BADNUM,s=1e-9;function l(t,e){return t<e}function u(t,e){return t<=e}function c(t,e){return t>e}function f(t,e){return t>=e}e.findBin=function(t,e,r){if(n(e.start))return r?Math.ceil((t-e.start)/e.size-s)-1:Math.floor((t-e.start)/e.size+s);var a,o,h=0,p=e.length,d=0,v=p>1?(e[p-1]-e[0])/(p-1):1;for(o=v>=0?r?l:u:r?f:c,t+=v*s*(r?-1:1)*(v>=0?1:-1);h<p&&d++<100;)o(e[a=Math.floor((h+p)/2)],t)?h=a+1:p=a;return d>90&&i.log(\\\"Long binary search...\\\"),h-1},e.sorterAsc=function(t,e){return t-e},e.sorterDes=function(t,e){return e-t},e.distinctVals=function(t){var r,n=t.slice();for(n.sort(e.sorterAsc),r=n.length-1;r>-1&&n[r]===o;r--);for(var i,a=n[r]-n[0]||1,s=a/(r||1)/1e4,l=[],u=0;u<=r;u++){var c=n[u],f=c-i;void 0===i?(l.push(c),i=c):f>s&&(a=Math.min(a,f),l.push(c),i=c)}return{vals:l,minDiff:a}},e.roundUp=function(t,e,r){for(var n,i=0,a=e.length-1,o=0,s=r?0:1,l=r?1:0,u=r?Math.ceil:Math.floor;i<a&&o++<100;)e[n=u((i+a)/2)]<=t?i=n+s:a=n-l;return e[i]},e.sort=function(t,e){for(var r=0,n=0,i=1;i<t.length;i++){var a=e(t[i],t[i-1]);if(a<0?r=1:a>0&&(n=1),r&&n)return t.sort(e)}return n?t:t.reverse()},e.findIndexOfMin=function(t,e){e=e||a;for(var r,n=1/0,i=0;i<t.length;i++){var o=e(t[i]);o<n&&(n=o,r=i)}return r}},6964:function(t){\\\"use strict\\\";t.exports=function(t,e){(t.attr(\\\"class\\\")||\\\"\\\").split(\\\" \\\").forEach((function(e){0===e.indexOf(\\\"cursor-\\\")&&t.classed(e,!1)})),e&&t.classed(\\\"cursor-\\\"+e,!0)}},58617:function(t,e,r){\\\"use strict\\\";var n=r(7901),i=function(){};t.exports=function(t){for(var e in t)\\\"function\\\"==typeof t[e]&&(t[e]=i);t.destroy=function(){t.container.parentNode.removeChild(t.container)};var r=document.createElement(\\\"div\\\");r.className=\\\"no-webgl\\\",r.style.cursor=\\\"pointer\\\",r.style.fontSize=\\\"24px\\\",r.style.color=n.defaults[0],r.style.position=\\\"absolute\\\",r.style.left=r.style.top=\\\"0px\\\",r.style.width=r.style.height=\\\"100%\\\",r.style[\\\"background-color\\\"]=n.lightLine,r.style[\\\"z-index\\\"]=30;var a=document.createElement(\\\"p\\\");return a.textContent=\\\"WebGL is not supported by your browser - visit https://get.webgl.org for more info\\\",a.style.position=\\\"relative\\\",a.style.top=\\\"50%\\\",a.style.left=\\\"50%\\\",a.style.height=\\\"30%\\\",a.style.width=\\\"50%\\\",a.style.margin=\\\"-15% 0 0 -25%\\\",r.appendChild(a),t.container.appendChild(r),t.container.style.background=\\\"#FFFFFF\\\",t.container.onclick=function(){window.open(\\\"https://get.webgl.org\\\")},!1}},78607:function(t){\\\"use strict\\\";t.exports=function(t){return Object.keys(t).sort()}},80038:function(t,e,r){\\\"use strict\\\";var n=r(92770),i=r(73627).isArrayOrTypedArray;e.aggNums=function(t,r,a,o){var s,l;if((!o||o>a.length)&&(o=a.length),n(r)||(r=!1),i(a[0])){for(l=new Array(o),s=0;s<o;s++)l[s]=e.aggNums(t,r,a[s]);a=l}for(s=0;s<o;s++)n(r)?n(a[s])&&(r=t(+r,+a[s])):r=a[s];return r},e.len=function(t){return e.aggNums((function(t){return t+1}),0,t)},e.mean=function(t,r){return r||(r=e.len(t)),e.aggNums((function(t,e){return t+e}),0,t)/r},e.midRange=function(t){if(void 0!==t&&0!==t.length)return(e.aggNums(Math.max,null,t)+e.aggNums(Math.min,null,t))/2},e.variance=function(t,r,i){return r||(r=e.len(t)),n(i)||(i=e.mean(t,r)),e.aggNums((function(t,e){return t+Math.pow(e-i,2)}),0,t)/r},e.stdev=function(t,r,n){return Math.sqrt(e.variance(t,r,n))},e.median=function(t){var r=t.slice().sort();return e.interp(r,.5)},e.interp=function(t,e){if(!n(e))throw\\\"n should be a finite number\\\";if((e=e*t.length-.5)<0)return t[0];if(e>t.length-1)return t[t.length-1];var r=e%1;return r*t[Math.ceil(e)]+(1-r)*t[Math.floor(e)]}},78614:function(t,e,r){\\\"use strict\\\";var n=r(25075);t.exports=function(t){return t?n(t):[0,0,0,1]}},3883:function(t,e,r){\\\"use strict\\\";var n=r(32396),i=r(91424),a=r(71828),o=null;t.exports=function(){if(null!==o)return o;o=!1;var t=a.isIE()||a.isSafari()||a.isIOS();if(window.navigator.userAgent&&!t){var e=Array.from(n.CSS_DECLARATIONS).reverse(),r=window.CSS&&window.CSS.supports||window.supportsCSS;if(\\\"function\\\"==typeof r)o=e.some((function(t){return r.apply(null,t)}));else{var s=i.tester.append(\\\"image\\\").attr(\\\"style\\\",n.STYLE),l=window.getComputedStyle(s.node()).imageRendering;o=e.some((function(t){var e=t[1];return l===e||l===e.toLowerCase()})),s.remove()}}return o}},63893:function(t,e,r){\\\"use strict\\\";var n=r(39898),i=r(71828),a=i.strTranslate,o=r(77922),s=r(18783).LINE_SPACING,l=/([^$]*)([$]+[^$]*[$]+)([^$]*)/;e.convertToTspans=function(t,r,g){var S=t.text(),E=!t.attr(\\\"data-notex\\\")&&r&&r._context.typesetMath&&\\\"undefined\\\"!=typeof MathJax&&S.match(l),P=n.select(t.node().parentNode);if(!P.empty()){var O=t.attr(\\\"class\\\")?t.attr(\\\"class\\\").split(\\\" \\\")[0]:\\\"text\\\";return O+=\\\"-math\\\",P.selectAll(\\\"svg.\\\"+O).remove(),P.selectAll(\\\"g.\\\"+O+\\\"-group\\\").remove(),t.style(\\\"display\\\",null).attr({\\\"data-unformatted\\\":S,\\\"data-math\\\":\\\"N\\\"}),E?(r&&r._promises||[]).push(new Promise((function(e){t.style(\\\"display\\\",\\\"none\\\");var r=parseInt(t.node().style.fontSize,10),o={fontSize:r};!function(t,e,r){var a,o,s,l,h=parseInt((MathJax.version||\\\"\\\").split(\\\".\\\")[0]);if(2===h||3===h){var p=function(){var r=\\\"math-output-\\\"+i.randstr({},64),a=(l=n.select(\\\"body\\\").append(\\\"div\\\").attr({id:r}).style({visibility:\\\"hidden\\\",position:\\\"absolute\\\",\\\"font-size\\\":e.fontSize+\\\"px\\\"}).text(t.replace(u,\\\"\\\\\\\\lt \\\").replace(c,\\\"\\\\\\\\gt \\\"))).node();return 2===h?MathJax.Hub.Typeset(a):MathJax.typeset([a])},d=function(){var e=l.select(2===h?\\\".MathJax_SVG\\\":\\\".MathJax\\\"),a=!e.empty()&&l.select(\\\"svg\\\").node();if(a){var o,s=a.getBoundingClientRect();o=2===h?n.select(\\\"body\\\").select(\\\"#MathJax_SVG_glyphs\\\"):e.select(\\\"defs\\\"),r(e,o,s)}else i.log(\\\"There was an error in the tex syntax.\\\",t),r();l.remove()};2===h?MathJax.Hub.Queue((function(){return o=i.extendDeepAll({},MathJax.Hub.config),s=MathJax.Hub.processSectionDelay,void 0!==MathJax.Hub.processSectionDelay&&(MathJax.Hub.processSectionDelay=0),MathJax.Hub.Config({messageStyle:\\\"none\\\",tex2jax:{inlineMath:f},displayAlign:\\\"left\\\"})}),(function(){if(\\\"SVG\\\"!==(a=MathJax.Hub.config.menuSettings.renderer))return MathJax.Hub.setRenderer(\\\"SVG\\\")}),p,d,(function(){if(\\\"SVG\\\"!==a)return MathJax.Hub.setRenderer(a)}),(function(){return void 0!==s&&(MathJax.Hub.processSectionDelay=s),MathJax.Hub.Config(o)})):3===h&&(o=i.extendDeepAll({},MathJax.config),MathJax.config.tex||(MathJax.config.tex={}),MathJax.config.tex.inlineMath=f,\\\"svg\\\"!==(a=MathJax.config.startup.output)&&(MathJax.config.startup.output=\\\"svg\\\"),MathJax.startup.defaultReady(),MathJax.startup.promise.then((function(){p(),d(),\\\"svg\\\"!==a&&(MathJax.config.startup.output=a),MathJax.config=o})))}else i.warn(\\\"No MathJax version:\\\",MathJax.version)}(E[2],o,(function(n,i,o){P.selectAll(\\\"svg.\\\"+O).remove(),P.selectAll(\\\"g.\\\"+O+\\\"-group\\\").remove();var s=n&&n.select(\\\"svg\\\");if(!s||!s.node())return I(),void e();var l=P.append(\\\"g\\\").classed(O+\\\"-group\\\",!0).attr({\\\"pointer-events\\\":\\\"none\\\",\\\"data-unformatted\\\":S,\\\"data-math\\\":\\\"Y\\\"});l.node().appendChild(s.node()),i&&i.node()&&s.node().insertBefore(i.node().cloneNode(!0),s.node().firstChild);var u=o.width,c=o.height;s.attr({class:O,height:c,preserveAspectRatio:\\\"xMinYMin meet\\\"}).style({overflow:\\\"visible\\\",\\\"pointer-events\\\":\\\"none\\\"});var f=t.node().style.fill||\\\"black\\\",h=s.select(\\\"g\\\");h.attr({fill:f,stroke:f});var p=h.node().getBoundingClientRect(),d=p.width,v=p.height;(d>u||v>c)&&(s.style(\\\"overflow\\\",\\\"hidden\\\"),d=(p=s.node().getBoundingClientRect()).width,v=p.height);var y=+t.attr(\\\"x\\\"),m=+t.attr(\\\"y\\\"),x=-(r||t.node().getBoundingClientRect().height)/4;if(\\\"y\\\"===O[0])l.attr({transform:\\\"rotate(\\\"+[-90,y,m]+\\\")\\\"+a(-d/2,x-v/2)});else if(\\\"l\\\"===O[0])m=x-v/2;else if(\\\"a\\\"===O[0]&&0!==O.indexOf(\\\"atitle\\\"))y=0,m=x;else{var b=t.attr(\\\"text-anchor\\\");y-=d*(\\\"middle\\\"===b?.5:\\\"end\\\"===b?1:0),m=m+x-v/2}s.attr({x:y,y:m}),g&&g.call(t,l),e(l)}))}))):I(),t}function I(){P.empty()||(O=t.attr(\\\"class\\\")+\\\"-math\\\",P.select(\\\"svg.\\\"+O).remove()),t.text(\\\"\\\").style(\\\"white-space\\\",\\\"pre\\\");var r=function(t,e){e=e.replace(y,\\\" \\\");var r,a=!1,l=[],u=-1;function c(){u++;var e=document.createElementNS(o.svg,\\\"tspan\\\");n.select(e).attr({class:\\\"line\\\",dy:u*s+\\\"em\\\"}),t.appendChild(e),r=e;var i=l;if(l=[{node:e}],i.length>1)for(var a=1;a<i.length;a++)f(i[a])}function f(t){var e,i=t.type,a={};if(\\\"a\\\"===i){e=\\\"a\\\";var s=t.target,u=t.href,c=t.popup;u&&(a={\\\"xlink:xlink:show\\\":\\\"_blank\\\"===s||\\\"_\\\"!==s.charAt(0)?\\\"new\\\":\\\"replace\\\",target:s,\\\"xlink:xlink:href\\\":u},c&&(a.onclick='window.open(this.href.baseVal,this.target.baseVal,\\\"'+c+'\\\");return false;'))}else e=\\\"tspan\\\";t.style&&(a.style=t.style);var f=document.createElementNS(o.svg,e);if(\\\"sup\\\"===i||\\\"sub\\\"===i){g(r,v),r.appendChild(f);var h=document.createElementNS(o.svg,\\\"tspan\\\");g(h,v),n.select(h).attr(\\\"dy\\\",d[i]),a.dy=p[i],r.appendChild(f),r.appendChild(h)}else r.appendChild(f);n.select(f).attr(a),r=t.node=f,l.push(t)}function g(t,e){t.appendChild(document.createTextNode(e))}function S(t){if(1!==l.length){var n=l.pop();t!==n.type&&i.log(\\\"Start tag <\\\"+n.type+\\\"> doesnt match end tag <\\\"+t+\\\">. Pretending it did match.\\\",e),r=l[l.length-1].node}else i.log(\\\"Ignoring unexpected end tag </\\\"+t+\\\">.\\\",e)}b.test(e)?c():(r=t,l=[{node:t}]);for(var E=e.split(m),P=0;P<E.length;P++){var O=E[P],I=O.match(x),D=I&&I[2].toLowerCase(),z=h[D];if(\\\"br\\\"===D)c();else if(void 0===z)g(r,L(O));else if(I[1])S(D);else{var R=I[4],F={type:D},B=A(R,_);if(B?(B=B.replace(M,\\\"$1 fill:\\\"),z&&(B+=\\\";\\\"+z)):z&&(B=z),B&&(F.style=B),\\\"a\\\"===D){a=!0;var N=A(R,w);if(N){var j=C(N);j&&(F.href=j,F.target=A(R,T)||\\\"_blank\\\",F.popup=A(R,k))}}f(F)}}return a}(t.node(),S);r&&t.style(\\\"pointer-events\\\",\\\"all\\\"),e.positionText(t),g&&g.call(t)}};var u=/(<|&lt;|&#60;)/g,c=/(>|&gt;|&#62;)/g,f=[[\\\"$\\\",\\\"$\\\"],[\\\"\\\\\\\\(\\\",\\\"\\\\\\\\)\\\"]],h={sup:\\\"font-size:70%\\\",sub:\\\"font-size:70%\\\",b:\\\"font-weight:bold\\\",i:\\\"font-style:italic\\\",a:\\\"cursor:pointer\\\",span:\\\"\\\",em:\\\"font-style:italic;font-weight:bold\\\"},p={sub:\\\"0.3em\\\",sup:\\\"-0.6em\\\"},d={sub:\\\"-0.21em\\\",sup:\\\"0.42em\\\"},v=\\\"​\\\",g=[\\\"http:\\\",\\\"https:\\\",\\\"mailto:\\\",\\\"\\\",void 0,\\\":\\\"],y=e.NEWLINES=/(\\\\r\\\\n?|\\\\n)/g,m=/(<[^<>]*>)/,x=/<(\\\\/?)([^ >]*)(\\\\s+(.*))?>/i,b=/<br(\\\\s+.*)?>/i;e.BR_TAG_ALL=/<br(\\\\s+.*)?>/gi;var _=/(^|[\\\\s\\\"'])style\\\\s*=\\\\s*(\\\"([^\\\"]*);?\\\"|'([^']*);?')/i,w=/(^|[\\\\s\\\"'])href\\\\s*=\\\\s*(\\\"([^\\\"]*)\\\"|'([^']*)')/i,T=/(^|[\\\\s\\\"'])target\\\\s*=\\\\s*(\\\"([^\\\"\\\\s]*)\\\"|'([^'\\\\s]*)')/i,k=/(^|[\\\\s\\\"'])popup\\\\s*=\\\\s*(\\\"([\\\\w=,]*)\\\"|'([\\\\w=,]*)')/i;function A(t,e){if(!t)return null;var r=t.match(e),n=r&&(r[3]||r[4]);return n&&L(n)}var M=/(^|;)\\\\s*color:/;e.plainText=function(t,e){for(var r=void 0!==(e=e||{}).len&&-1!==e.len?e.len:1/0,n=void 0!==e.allowedTags?e.allowedTags:[\\\"br\\\"],i=t.split(m),a=[],o=\\\"\\\",s=0,l=0;l<i.length;l++){var u=i[l],c=u.match(x),f=c&&c[2].toLowerCase();if(f)-1!==n.indexOf(f)&&(a.push(u),o=f);else{var h=u.length;if(s+h<r)a.push(u),s+=h;else if(s<r){var p=r-s;o&&(\\\"br\\\"!==o||p<=3||h<=3)&&a.pop(),r>3?a.push(u.substr(0,p-3)+\\\"...\\\"):a.push(u.substr(0,p));break}o=\\\"\\\"}}return a.join(\\\"\\\")};var S={mu:\\\"μ\\\",amp:\\\"&\\\",lt:\\\"<\\\",gt:\\\">\\\",nbsp:\\\" \\\",times:\\\"×\\\",plusmn:\\\"±\\\",deg:\\\"°\\\"},E=/&(#\\\\d+|#x[\\\\da-fA-F]+|[a-z]+);/g;function L(t){return t.replace(E,(function(t,e){return(\\\"#\\\"===e.charAt(0)?function(t){if(!(t>1114111)){var e=String.fromCodePoint;if(e)return e(t);var r=String.fromCharCode;return t<=65535?r(t):r(55232+(t>>10),t%1024+56320)}}(\\\"x\\\"===e.charAt(1)?parseInt(e.substr(2),16):parseInt(e.substr(1),10)):S[e])||t}))}function C(t){var e=encodeURI(decodeURI(t)),r=document.createElement(\\\"a\\\"),n=document.createElement(\\\"a\\\");r.href=t,n.href=e;var i=r.protocol,a=n.protocol;return-1!==g.indexOf(i)&&-1!==g.indexOf(a)?e:\\\"\\\"}function P(t,e,r){var n,a,o,s=r.horizontalAlign,l=r.verticalAlign||\\\"top\\\",u=t.node().getBoundingClientRect(),c=e.node().getBoundingClientRect();return a=\\\"bottom\\\"===l?function(){return u.bottom-n.height}:\\\"middle\\\"===l?function(){return u.top+(u.height-n.height)/2}:function(){return u.top},o=\\\"right\\\"===s?function(){return u.right-n.width}:\\\"center\\\"===s?function(){return u.left+(u.width-n.width)/2}:function(){return u.left},function(){n=this.node().getBoundingClientRect();var t=o()-c.left,e=a()-c.top,s=r.gd||{};if(r.gd){s._fullLayout._calcInverseTransform(s);var l=i.apply3DTransform(s._fullLayout._invTransform)(t,e);t=l[0],e=l[1]}return this.style({top:e+\\\"px\\\",left:t+\\\"px\\\",\\\"z-index\\\":1e3}),this}}e.convertEntities=L,e.sanitizeHTML=function(t){t=t.replace(y,\\\" \\\");for(var e=document.createElement(\\\"p\\\"),r=e,i=[],a=t.split(m),o=0;o<a.length;o++){var s=a[o],l=s.match(x),u=l&&l[2].toLowerCase();if(u in h)if(l[1])i.length&&(r=i.pop());else{var c=l[4],f=A(c,_),p=f?{style:f}:{};if(\\\"a\\\"===u){var d=A(c,w);if(d){var v=C(d);if(v){p.href=v;var g=A(c,T);g&&(p.target=g)}}}var b=document.createElement(u);r.appendChild(b),n.select(b).attr(p),r=b,i.push(b)}else r.appendChild(document.createTextNode(L(s)))}return e.innerHTML},e.lineCount=function(t){return t.selectAll(\\\"tspan.line\\\").size()||1},e.positionText=function(t,e,r){return t.each((function(){var t=n.select(this);function i(e,r){return void 0===r?null===(r=t.attr(e))&&(t.attr(e,0),r=0):t.attr(e,r),r}var a=i(\\\"x\\\",e),o=i(\\\"y\\\",r);\\\"text\\\"===this.nodeName&&t.selectAll(\\\"tspan.line\\\").attr({x:a,y:o})}))};var O=\\\"1px \\\";e.makeTextShadow=function(t){return O+O+O+t+\\\", -\\\"+O+\\\"-\\\"+O+O+t+\\\", \\\"+O+\\\"-\\\"+O+O+t+\\\", -\\\"+O+O+O+t},e.makeEditable=function(t,e){var r=e.gd,i=e.delegate,a=n.dispatch(\\\"edit\\\",\\\"input\\\",\\\"cancel\\\"),o=i||t;if(t.style({\\\"pointer-events\\\":i?\\\"none\\\":\\\"all\\\"}),1!==t.size())throw new Error(\\\"boo\\\");function s(){var i,s,u,c,f;i=n.select(r).select(\\\".svg-container\\\"),s=i.append(\\\"div\\\"),u=t.node().style,c=parseFloat(u.fontSize||12),void 0===(f=e.text)&&(f=t.attr(\\\"data-unformatted\\\")),s.classed(\\\"plugin-editable editable\\\",!0).style({position:\\\"absolute\\\",\\\"font-family\\\":u.fontFamily||\\\"Arial\\\",\\\"font-size\\\":c,color:e.fill||u.fill||\\\"black\\\",opacity:1,\\\"background-color\\\":e.background||\\\"transparent\\\",outline:\\\"#ffffff33 1px solid\\\",margin:[-c/8+1,0,0,-1].join(\\\"px \\\")+\\\"px\\\",padding:\\\"0\\\",\\\"box-sizing\\\":\\\"border-box\\\"}).attr({contenteditable:!0}).text(f).call(P(t,i,e)).on(\\\"blur\\\",(function(){r._editing=!1,t.text(this.textContent).style({opacity:1});var e,i=n.select(this).attr(\\\"class\\\");(e=i?\\\".\\\"+i.split(\\\" \\\")[0]+\\\"-math-group\\\":\\\"[class*=-math-group]\\\")&&n.select(t.node().parentNode).select(e).style({opacity:0});var o=this.textContent;n.select(this).transition().duration(0).remove(),n.select(document).on(\\\"mouseup\\\",null),a.edit.call(t,o)})).on(\\\"focus\\\",(function(){var t=this;r._editing=!0,n.select(document).on(\\\"mouseup\\\",(function(){if(n.event.target===t)return!1;document.activeElement===s.node()&&s.node().blur()}))})).on(\\\"keyup\\\",(function(){27===n.event.which?(r._editing=!1,t.style({opacity:1}),n.select(this).style({opacity:0}).on(\\\"blur\\\",(function(){return!1})).transition().remove(),a.cancel.call(t,this.textContent)):(a.input.call(t,this.textContent),n.select(this).call(P(t,i,e)))})).on(\\\"keydown\\\",(function(){13===n.event.which&&this.blur()})).call(l),t.style({opacity:0});var h,p=o.attr(\\\"class\\\");(h=p?\\\".\\\"+p.split(\\\" \\\")[0]+\\\"-math-group\\\":\\\"[class*=-math-group]\\\")&&n.select(t.node().parentNode).select(h).style({opacity:0})}function l(t){var e=t.node(),r=document.createRange();r.selectNodeContents(e);var n=window.getSelection();n.removeAllRanges(),n.addRange(r),e.focus()}return e.immediate?s():o.on(\\\"click\\\",s),n.rebind(t,a,\\\"on\\\")}},79990:function(t,e){\\\"use strict\\\";var r={};function n(t){t&&null!==t.timer&&(clearTimeout(t.timer),t.timer=null)}e.throttle=function(t,e,i){var a=r[t],o=Date.now();if(!a){for(var s in r)r[s].ts<o-6e4&&delete r[s];a=r[t]={ts:0,timer:null}}function l(){i(),a.ts=Date.now(),a.onDone&&(a.onDone(),a.onDone=null)}n(a),o>a.ts+e?l():a.timer=setTimeout((function(){l(),a.timer=null}),e)},e.done=function(t){var e=r[t];return e&&e.timer?new Promise((function(t){var r=e.onDone;e.onDone=function(){r&&r(),t(),e.onDone=null}})):Promise.resolve()},e.clear=function(t){if(t)n(r[t]),delete r[t];else for(var i in r)e.clear(i)}},58163:function(t,e,r){\\\"use strict\\\";var n=r(92770);t.exports=function(t,e){if(t>0)return Math.log(t)/Math.LN10;var r=Math.log(Math.min(e[0],e[1]))/Math.LN10;return n(r)||(r=Math.log(Math.max(e[0],e[1]))/Math.LN10-6),r}},90973:function(t,e,r){\\\"use strict\\\";var n=t.exports={},i=r(78776).locationmodeToLayer,a=r(96892).zL;n.getTopojsonName=function(t){return[t.scope.replace(/ /g,\\\"-\\\"),\\\"_\\\",t.resolution.toString(),\\\"m\\\"].join(\\\"\\\")},n.getTopojsonPath=function(t,e){return t+e+\\\".json\\\"},n.getTopojsonFeatures=function(t,e){var r=i[t.locationmode],n=e.objects[r];return a(e,n).features}},37815:function(t){\\\"use strict\\\";t.exports={moduleType:\\\"locale\\\",name:\\\"en-US\\\",dictionary:{\\\"Click to enter Colorscale title\\\":\\\"Click to enter Colorscale title\\\"},format:{date:\\\"%m/%d/%Y\\\"}}},92177:function(t){\\\"use strict\\\";t.exports={moduleType:\\\"locale\\\",name:\\\"en\\\",dictionary:{\\\"Click to enter Colorscale title\\\":\\\"Click to enter Colourscale title\\\"},format:{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\\\"],periods:[\\\"AM\\\",\\\"PM\\\"],dateTime:\\\"%a %b %e %X %Y\\\",date:\\\"%d/%m/%Y\\\",time:\\\"%H:%M:%S\\\",decimal:\\\".\\\",thousands:\\\",\\\",grouping:[3],currency:[\\\"$\\\",\\\"\\\"],year:\\\"%Y\\\",month:\\\"%b %Y\\\",dayMonth:\\\"%b %-d\\\",dayMonthYear:\\\"%b %-d, %Y\\\"}}},14458:function(t,e,r){\\\"use strict\\\";var n=r(73972);t.exports=function(t){for(var e,r,i=n.layoutArrayContainers,a=n.layoutArrayRegexes,o=t.split(\\\"[\\\")[0],s=0;s<a.length;s++)if((r=t.match(a[s]))&&0===r.index){e=r[0];break}if(e||(e=i[i.indexOf(o)]),!e)return!1;var l=t.substr(e.length);return l?!!(r=l.match(/^\\\\[(0|[1-9][0-9]*)\\\\](\\\\.(.+))?$/))&&{array:e,index:Number(r[1]),property:r[3]||\\\"\\\"}:{array:e,index:\\\"\\\",property:\\\"\\\"}}},30962:function(t,e,r){\\\"use strict\\\";var n=r(71828),i=n.extendFlat,a=n.isPlainObject,o={valType:\\\"flaglist\\\",extras:[\\\"none\\\"],flags:[\\\"calc\\\",\\\"clearAxisTypes\\\",\\\"plot\\\",\\\"style\\\",\\\"markerSize\\\",\\\"colorbars\\\"]},s={valType:\\\"flaglist\\\",extras:[\\\"none\\\"],flags:[\\\"calc\\\",\\\"plot\\\",\\\"legend\\\",\\\"ticks\\\",\\\"axrange\\\",\\\"layoutstyle\\\",\\\"modebar\\\",\\\"camera\\\",\\\"arraydraw\\\",\\\"colorbars\\\"]},l=o.flags.slice().concat([\\\"fullReplot\\\"]),u=s.flags.slice().concat(\\\"layoutReplot\\\");function c(t){for(var e={},r=0;r<t.length;r++)e[t[r]]=!1;return e}function f(t,e,r){var n=i({},t);for(var o in n){var s=n[o];a(s)&&(n[o]=h(s,e,0,o))}return\\\"from-root\\\"===r&&(n.editType=e),n}function h(t,e,r,n){if(t.valType){var a=i({},t);if(a.editType=e,Array.isArray(t.items)){a.items=new Array(t.items.length);for(var o=0;o<t.items.length;o++)a.items[o]=h(t.items[o],e)}return a}return f(t,e,\\\"_\\\"===n.charAt(0)?\\\"nested\\\":\\\"from-root\\\")}t.exports={traces:o,layout:s,traceFlags:function(){return c(l)},layoutFlags:function(){return c(u)},update:function(t,e){var r=e.editType;if(r&&\\\"none\\\"!==r)for(var n=r.split(\\\"+\\\"),i=0;i<n.length;i++)t[n[i]]=!0},overrideAll:f}},58377:function(t,e,r){\\\"use strict\\\";var n=r(92770),i=r(27812),a=r(73972),o=r(71828),s=r(74875),l=r(41675),u=r(7901),c=l.cleanId,f=l.getFromTrace,h=a.traceIs;function p(t,e){var r=t[e],n=e.charAt(0);r&&\\\"paper\\\"!==r&&(t[e]=c(r,n,!0))}function d(t){function e(e,r){var n=t[e],i=t.title&&t.title[r];n&&!i&&(t.title||(t.title={}),t.title[r]=t[e],delete t[e])}t&&(\\\"string\\\"!=typeof t.title&&\\\"number\\\"!=typeof t.title||(t.title={text:t.title}),e(\\\"titlefont\\\",\\\"font\\\"),e(\\\"titleposition\\\",\\\"position\\\"),e(\\\"titleside\\\",\\\"side\\\"),e(\\\"titleoffset\\\",\\\"offset\\\"))}function v(t){if(!o.isPlainObject(t))return!1;var e=t.name;return delete t.name,delete t.showlegend,(\\\"string\\\"==typeof e||\\\"number\\\"==typeof e)&&String(e)}function g(t,e,r,n){if(r&&!n)return t;if(n&&!r)return e;if(!t.trim())return e;if(!e.trim())return t;var i,a=Math.min(t.length,e.length);for(i=0;i<a&&t.charAt(i)===e.charAt(i);i++);return t.substr(0,i).trim()}function y(t){var e=\\\"middle\\\",r=\\\"center\\\";return\\\"string\\\"==typeof t&&(-1!==t.indexOf(\\\"top\\\")?e=\\\"top\\\":-1!==t.indexOf(\\\"bottom\\\")&&(e=\\\"bottom\\\"),-1!==t.indexOf(\\\"left\\\")?r=\\\"left\\\":-1!==t.indexOf(\\\"right\\\")&&(r=\\\"right\\\")),e+\\\" \\\"+r}function m(t,e){return e in t&&\\\"object\\\"==typeof t[e]&&0===Object.keys(t[e]).length}e.clearPromiseQueue=function(t){Array.isArray(t._promises)&&t._promises.length>0&&o.log(\\\"Clearing previous rejected promises from queue.\\\"),t._promises=[]},e.cleanLayout=function(t){var r,n;t||(t={}),t.xaxis1&&(t.xaxis||(t.xaxis=t.xaxis1),delete t.xaxis1),t.yaxis1&&(t.yaxis||(t.yaxis=t.yaxis1),delete t.yaxis1),t.scene1&&(t.scene||(t.scene=t.scene1),delete t.scene1);var a=(s.subplotsRegistry.cartesian||{}).attrRegex,l=(s.subplotsRegistry.polar||{}).attrRegex,f=(s.subplotsRegistry.ternary||{}).attrRegex,h=(s.subplotsRegistry.gl3d||{}).attrRegex,v=Object.keys(t);for(r=0;r<v.length;r++){var g=v[r];if(a&&a.test(g)){var y=t[g];y.anchor&&\\\"free\\\"!==y.anchor&&(y.anchor=c(y.anchor)),y.overlaying&&(y.overlaying=c(y.overlaying)),y.type||(y.isdate?y.type=\\\"date\\\":y.islog?y.type=\\\"log\\\":!1===y.isdate&&!1===y.islog&&(y.type=\\\"linear\\\")),\\\"withzero\\\"!==y.autorange&&\\\"tozero\\\"!==y.autorange||(y.autorange=!0,y.rangemode=\\\"tozero\\\"),delete y.islog,delete y.isdate,delete y.categories,m(y,\\\"domain\\\")&&delete y.domain,void 0!==y.autotick&&(void 0===y.tickmode&&(y.tickmode=y.autotick?\\\"auto\\\":\\\"linear\\\"),delete y.autotick),d(y)}else if(l&&l.test(g))d(t[g].radialaxis);else if(f&&f.test(g)){var x=t[g];d(x.aaxis),d(x.baxis),d(x.caxis)}else if(h&&h.test(g)){var b=t[g],_=b.cameraposition;if(Array.isArray(_)&&4===_[0].length){var w=_[0],T=_[1],k=_[2],A=i([],w),M=[];for(n=0;n<3;++n)M[n]=T[n]+k*A[2+4*n];b.camera={eye:{x:M[0],y:M[1],z:M[2]},center:{x:T[0],y:T[1],z:T[2]},up:{x:0,y:0,z:1}},delete b.cameraposition}d(b.xaxis),d(b.yaxis),d(b.zaxis)}}var S=Array.isArray(t.annotations)?t.annotations.length:0;for(r=0;r<S;r++){var E=t.annotations[r];o.isPlainObject(E)&&(E.ref&&(\\\"paper\\\"===E.ref?(E.xref=\\\"paper\\\",E.yref=\\\"paper\\\"):\\\"data\\\"===E.ref&&(E.xref=\\\"x\\\",E.yref=\\\"y\\\"),delete E.ref),p(E,\\\"xref\\\"),p(E,\\\"yref\\\"))}var L=Array.isArray(t.shapes)?t.shapes.length:0;for(r=0;r<L;r++){var C=t.shapes[r];o.isPlainObject(C)&&(p(C,\\\"xref\\\"),p(C,\\\"yref\\\"))}var P=Array.isArray(t.images)?t.images.length:0;for(r=0;r<P;r++){var O=t.images[r];o.isPlainObject(O)&&(p(O,\\\"xref\\\"),p(O,\\\"yref\\\"))}var I=t.legend;return I&&(I.x>3?(I.x=1.02,I.xanchor=\\\"left\\\"):I.x<-2&&(I.x=-.02,I.xanchor=\\\"right\\\"),I.y>3?(I.y=1.02,I.yanchor=\\\"bottom\\\"):I.y<-2&&(I.y=-.02,I.yanchor=\\\"top\\\")),d(t),\\\"rotate\\\"===t.dragmode&&(t.dragmode=\\\"orbit\\\"),u.clean(t),t.template&&t.template.layout&&e.cleanLayout(t.template.layout),t},e.cleanData=function(t){for(var r=0;r<t.length;r++){var n,i=t[r];if(\\\"histogramy\\\"===i.type&&\\\"xbins\\\"in i&&!(\\\"ybins\\\"in i)&&(i.ybins=i.xbins,delete i.xbins),i.error_y&&\\\"opacity\\\"in i.error_y){var l=u.defaults,f=i.error_y.color||(h(i,\\\"bar\\\")?u.defaultLine:l[r%l.length]);i.error_y.color=u.addOpacity(u.rgb(f),u.opacity(f)*i.error_y.opacity),delete i.error_y.opacity}if(\\\"bardir\\\"in i&&(\\\"h\\\"!==i.bardir||!h(i,\\\"bar\\\")&&\\\"histogram\\\"!==i.type.substr(0,9)||(i.orientation=\\\"h\\\",e.swapXYData(i)),delete i.bardir),\\\"histogramy\\\"===i.type&&e.swapXYData(i),\\\"histogramx\\\"!==i.type&&\\\"histogramy\\\"!==i.type||(i.type=\\\"histogram\\\"),\\\"scl\\\"in i&&!(\\\"colorscale\\\"in i)&&(i.colorscale=i.scl,delete i.scl),\\\"reversescl\\\"in i&&!(\\\"reversescale\\\"in i)&&(i.reversescale=i.reversescl,delete i.reversescl),i.xaxis&&(i.xaxis=c(i.xaxis,\\\"x\\\")),i.yaxis&&(i.yaxis=c(i.yaxis,\\\"y\\\")),h(i,\\\"gl3d\\\")&&i.scene&&(i.scene=s.subplotsRegistry.gl3d.cleanId(i.scene)),!h(i,\\\"pie-like\\\")&&!h(i,\\\"bar-like\\\"))if(Array.isArray(i.textposition))for(n=0;n<i.textposition.length;n++)i.textposition[n]=y(i.textposition[n]);else i.textposition&&(i.textposition=y(i.textposition));var p=a.getModule(i);if(p&&p.colorbar){var x=p.colorbar.container,b=x?i[x]:i;b&&b.colorscale&&(\\\"YIGnBu\\\"===b.colorscale&&(b.colorscale=\\\"YlGnBu\\\"),\\\"YIOrRd\\\"===b.colorscale&&(b.colorscale=\\\"YlOrRd\\\"))}if(\\\"surface\\\"===i.type&&o.isPlainObject(i.contours)){var _=[\\\"x\\\",\\\"y\\\",\\\"z\\\"];for(n=0;n<_.length;n++){var w=i.contours[_[n]];o.isPlainObject(w)&&(w.highlightColor&&(w.highlightcolor=w.highlightColor,delete w.highlightColor),w.highlightWidth&&(w.highlightwidth=w.highlightWidth,delete w.highlightWidth))}}if(\\\"candlestick\\\"===i.type||\\\"ohlc\\\"===i.type){var T=!1!==(i.increasing||{}).showlegend,k=!1!==(i.decreasing||{}).showlegend,A=v(i.increasing),M=v(i.decreasing);if(!1!==A&&!1!==M){var S=g(A,M,T,k);S&&(i.name=S)}else!A&&!M||i.name||(i.name=A||M)}if(Array.isArray(i.transforms)){var E=i.transforms;for(n=0;n<E.length;n++){var L=E[n];if(o.isPlainObject(L))switch(L.type){case\\\"filter\\\":L.filtersrc&&(L.target=L.filtersrc,delete L.filtersrc),L.calendar&&(L.valuecalendar||(L.valuecalendar=L.calendar),delete L.calendar);break;case\\\"groupby\\\":if(L.styles=L.styles||L.style,L.styles&&!Array.isArray(L.styles)){var C=L.styles,P=Object.keys(C);L.styles=[];for(var O=0;O<P.length;O++)L.styles.push({target:P[O],value:C[P[O]]})}}}}m(i,\\\"line\\\")&&delete i.line,\\\"marker\\\"in i&&(m(i.marker,\\\"line\\\")&&delete i.marker.line,m(i,\\\"marker\\\")&&delete i.marker),u.clean(i),i.autobinx&&(delete i.autobinx,delete i.xbins),i.autobiny&&(delete i.autobiny,delete i.ybins),d(i),i.colorbar&&d(i.colorbar),i.marker&&i.marker.colorbar&&d(i.marker.colorbar),i.line&&i.line.colorbar&&d(i.line.colorbar),i.aaxis&&d(i.aaxis),i.baxis&&d(i.baxis)}},e.swapXYData=function(t){var e;if(o.swapAttrs(t,[\\\"?\\\",\\\"?0\\\",\\\"d?\\\",\\\"?bins\\\",\\\"nbins?\\\",\\\"autobin?\\\",\\\"?src\\\",\\\"error_?\\\"]),Array.isArray(t.z)&&Array.isArray(t.z[0])&&(t.transpose?delete t.transpose:t.transpose=!0),t.error_x&&t.error_y){var r=t.error_y,n=\\\"copy_ystyle\\\"in r?r.copy_ystyle:!(r.color||r.thickness||r.width);o.swapAttrs(t,[\\\"error_?.copy_ystyle\\\"]),n&&o.swapAttrs(t,[\\\"error_?.color\\\",\\\"error_?.thickness\\\",\\\"error_?.width\\\"])}if(\\\"string\\\"==typeof t.hoverinfo){var i=t.hoverinfo.split(\\\"+\\\");for(e=0;e<i.length;e++)\\\"x\\\"===i[e]?i[e]=\\\"y\\\":\\\"y\\\"===i[e]&&(i[e]=\\\"x\\\");t.hoverinfo=i.join(\\\"+\\\")}},e.coerceTraceIndices=function(t,e){if(n(e))return[e];if(!Array.isArray(e)||!e.length)return t.data.map((function(t,e){return e}));if(Array.isArray(e)){for(var r=[],i=0;i<e.length;i++)o.isIndex(e[i],t.data.length)?r.push(e[i]):o.warn(\\\"trace index (\\\",e[i],\\\") is not a number or is out of bounds\\\");return r}return e},e.manageArrayContainers=function(t,e,r){var i=t.obj,a=t.parts,s=a.length,l=a[s-1],u=n(l);if(u&&null===e){var c=a.slice(0,s-1).join(\\\".\\\");o.nestedProperty(i,c).get().splice(l,1)}else u&&void 0===t.get()?(void 0===t.get()&&(r[t.astr]=null),t.set(e)):t.set(e)};var x=/(\\\\.[^\\\\[\\\\]\\\\.]+|\\\\[[^\\\\[\\\\]\\\\.]+\\\\])$/;function b(t){var e=t.search(x);if(e>0)return t.substr(0,e)}e.hasParent=function(t,e){for(var r=b(e);r;){if(r in t)return!0;r=b(r)}return!1};var _=[\\\"x\\\",\\\"y\\\",\\\"z\\\"];e.clearAxisTypes=function(t,e,r){for(var n=0;n<e.length;n++)for(var i=t._fullData[n],a=0;a<3;a++){var s=f(t,i,_[a]);if(s&&\\\"log\\\"!==s.type){var l=s._name,u=s._id.substr(1);if(\\\"scene\\\"===u.substr(0,5)){if(void 0!==r[u])continue;l=u+\\\".\\\"+l}var c=l+\\\".type\\\";void 0===r[l]&&void 0===r[c]&&o.nestedProperty(t.layout,c).set(null)}}}},10641:function(t,e,r){\\\"use strict\\\";var n=r(72391);e._doPlot=n._doPlot,e.newPlot=n.newPlot,e.restyle=n.restyle,e.relayout=n.relayout,e.redraw=n.redraw,e.update=n.update,e._guiRestyle=n._guiRestyle,e._guiRelayout=n._guiRelayout,e._guiUpdate=n._guiUpdate,e._storeDirectGUIEdit=n._storeDirectGUIEdit,e.react=n.react,e.extendTraces=n.extendTraces,e.prependTraces=n.prependTraces,e.addTraces=n.addTraces,e.deleteTraces=n.deleteTraces,e.moveTraces=n.moveTraces,e.purge=n.purge,e.addFrames=n.addFrames,e.deleteFrames=n.deleteFrames,e.animate=n.animate,e.setPlotConfig=n.setPlotConfig,e.toImage=r(403),e.validate=r(84936),e.downloadImage=r(7239);var i=r(96318);e.makeTemplate=i.makeTemplate,e.validateTemplate=i.validateTemplate},6611:function(t,e,r){\\\"use strict\\\";var n=r(41965),i=r(64213),a=r(47769),o=r(65888).sorterAsc,s=r(73972);e.containerArrayMatch=r(14458);var l=e.isAddVal=function(t){return\\\"add\\\"===t||n(t)},u=e.isRemoveVal=function(t){return null===t||\\\"remove\\\"===t};e.applyContainerArrayChanges=function(t,e,r,n,c){var f=e.astr,h=s.getComponentMethod(f,\\\"supplyLayoutDefaults\\\"),p=s.getComponentMethod(f,\\\"draw\\\"),d=s.getComponentMethod(f,\\\"drawOne\\\"),v=n.replot||n.recalc||h===i||p===i,g=t.layout,y=t._fullLayout;if(r[\\\"\\\"]){Object.keys(r).length>1&&a.warn(\\\"Full array edits are incompatible with other edits\\\",f);var m=r[\\\"\\\"][\\\"\\\"];if(u(m))e.set(null);else{if(!Array.isArray(m))return a.warn(\\\"Unrecognized full array edit value\\\",f,m),!0;e.set(m)}return!v&&(h(g,y),p(t),!0)}var x,b,_,w,T,k,A,M,S=Object.keys(r).map(Number).sort(o),E=e.get(),L=E||[],C=c(y,f).get(),P=[],O=-1,I=L.length;for(x=0;x<S.length;x++)if(w=r[_=S[x]],T=Object.keys(w),k=w[\\\"\\\"],A=l(k),_<0||_>L.length-(A?0:1))a.warn(\\\"index out of range\\\",f,_);else if(void 0!==k)T.length>1&&a.warn(\\\"Insertion & removal are incompatible with edits to the same index.\\\",f,_),u(k)?P.push(_):A?(\\\"add\\\"===k&&(k={}),L.splice(_,0,k),C&&C.splice(_,0,{})):a.warn(\\\"Unrecognized full object edit value\\\",f,_,k),-1===O&&(O=_);else for(b=0;b<T.length;b++)M=f+\\\"[\\\"+_+\\\"].\\\",c(L[_],T[b],M).set(w[T[b]]);for(x=P.length-1;x>=0;x--)L.splice(P[x],1),C&&C.splice(P[x],1);if(L.length?E||e.set(L):e.set(null),v)return!1;if(h(g,y),d!==i){var D;if(-1===O)D=S;else{for(I=Math.max(L.length,I),D=[],x=0;x<S.length&&!((_=S[x])>=O);x++)D.push(_);for(x=O;x<I;x++)D.push(x)}for(x=0;x<D.length;x++)d(t,D[x])}else p(t);return!0}},72391:function(t,e,r){\\\"use strict\\\";var n=r(39898),i=r(92770),a=r(57035),o=r(71828),s=o.nestedProperty,l=r(11086),u=r(10847),c=r(73972),f=r(86281),h=r(74875),p=r(89298),d=r(91424),v=r(7901),g=r(4305).initInteractions,y=r(77922),m=r(47322).clearOutline,x=r(72075).dfltConfig,b=r(6611),_=r(58377),w=r(61549),T=r(30962),k=r(85555).AX_NAME_PATTERN,A=0;function M(t){var e=t._fullLayout;e._redrawFromAutoMarginCount?e._redrawFromAutoMarginCount--:t.emit(\\\"plotly_afterplot\\\")}function S(t,e){try{t._fullLayout._paper.style(\\\"background\\\",e)}catch(t){o.error(t)}}function E(t,e){S(t,v.combine(e,\\\"white\\\"))}function L(t,e){if(!t._context){t._context=o.extendDeep({},x);var r=n.select(\\\"base\\\");t._context._baseUrl=r.size()&&r.attr(\\\"href\\\")?window.location.href.split(\\\"#\\\")[0]:\\\"\\\"}var i,s,l,u=t._context;if(e){for(s=Object.keys(e),i=0;i<s.length;i++)\\\"editable\\\"!==(l=s[i])&&\\\"edits\\\"!==l&&l in u&&(\\\"setBackground\\\"===l&&\\\"opaque\\\"===e[l]?u[l]=E:u[l]=e[l]);e.plot3dPixelRatio&&!u.plotGlPixelRatio&&(u.plotGlPixelRatio=u.plot3dPixelRatio);var c=e.editable;if(void 0!==c)for(u.editable=c,s=Object.keys(u.edits),i=0;i<s.length;i++)u.edits[s[i]]=c;if(e.edits)for(s=Object.keys(e.edits),i=0;i<s.length;i++)(l=s[i])in u.edits&&(u.edits[l]=e.edits[l]);u._exportedPlot=e._exportedPlot}u.staticPlot&&(u.editable=!1,u.edits={},u.autosizable=!1,u.scrollZoom=!1,u.doubleClick=!1,u.showTips=!1,u.showLink=!1,u.displayModeBar=!1),\\\"hover\\\"!==u.displayModeBar||a||(u.displayModeBar=!0),\\\"transparent\\\"!==u.setBackground&&\\\"function\\\"==typeof u.setBackground||(u.setBackground=S),u._hasZeroHeight=u._hasZeroHeight||0===t.clientHeight,u._hasZeroWidth=u._hasZeroWidth||0===t.clientWidth;var f=u.scrollZoom,h=u._scrollZoom={};if(!0===f)h.cartesian=1,h.gl3d=1,h.geo=1,h.mapbox=1;else if(\\\"string\\\"==typeof f){var p=f.split(\\\"+\\\");for(i=0;i<p.length;i++)h[p[i]]=1}else!1!==f&&(h.gl3d=1,h.geo=1,h.mapbox=1)}function C(t,e){var r,n,i=e+1,a=[];for(r=0;r<t.length;r++)(n=t[r])<0?a.push(i+n):a.push(n);return a}function P(t,e,r){var n,i;for(n=0;n<e.length;n++){if((i=e[n])!==parseInt(i,10))throw new Error(\\\"all values in \\\"+r+\\\" must be integers\\\");if(i>=t.data.length||i<-t.data.length)throw new Error(r+\\\" must be valid indices for gd.data.\\\");if(e.indexOf(i,n+1)>-1||i>=0&&e.indexOf(-t.data.length+i)>-1||i<0&&e.indexOf(t.data.length+i)>-1)throw new Error(\\\"each index in \\\"+r+\\\" must be unique.\\\")}}function O(t,e,r){if(!Array.isArray(t.data))throw new Error(\\\"gd.data must be an array.\\\");if(void 0===e)throw new Error(\\\"currentIndices is a required argument.\\\");if(Array.isArray(e)||(e=[e]),P(t,e,\\\"currentIndices\\\"),void 0===r||Array.isArray(r)||(r=[r]),void 0!==r&&P(t,r,\\\"newIndices\\\"),void 0!==r&&e.length!==r.length)throw new Error(\\\"current and new indices must be of equal length.\\\")}function I(t,e,r,n,a){!function(t,e,r,n){var i=o.isPlainObject(n);if(!Array.isArray(t.data))throw new Error(\\\"gd.data must be an array\\\");if(!o.isPlainObject(e))throw new Error(\\\"update must be a key:value object\\\");if(void 0===r)throw new Error(\\\"indices must be an integer or array of integers\\\");for(var a in P(t,r,\\\"indices\\\"),e){if(!Array.isArray(e[a])||e[a].length!==r.length)throw new Error(\\\"attribute \\\"+a+\\\" must be an array of length equal to indices array length\\\");if(i&&(!(a in n)||!Array.isArray(n[a])||n[a].length!==e[a].length))throw new Error(\\\"when maxPoints is set as a key:value object it must contain a 1:1 corrispondence with the keys and number of traces in the update object\\\")}}(t,e,r,n);for(var l=function(t,e,r,n){var a,l,u,c,f,h=o.isPlainObject(n),p=[];for(var d in Array.isArray(r)||(r=[r]),r=C(r,t.data.length-1),e)for(var v=0;v<r.length;v++){if(a=t.data[r[v]],l=(u=s(a,d)).get(),c=e[d][v],!o.isArrayOrTypedArray(c))throw new Error(\\\"attribute: \\\"+d+\\\" index: \\\"+v+\\\" must be an array\\\");if(!o.isArrayOrTypedArray(l))throw new Error(\\\"cannot extend missing or non-array attribute: \\\"+d);if(l.constructor!==c.constructor)throw new Error(\\\"cannot extend array with an array of a different type: \\\"+d);f=h?n[d][v]:n,i(f)||(f=-1),p.push({prop:u,target:l,insert:c,maxp:Math.floor(f)})}return p}(t,e,r,n),u={},c={},f=0;f<l.length;f++){var h=l[f].prop,p=l[f].maxp,d=a(l[f].target,l[f].insert,p);h.set(d[0]),Array.isArray(u[h.astr])||(u[h.astr]=[]),u[h.astr].push(d[1]),Array.isArray(c[h.astr])||(c[h.astr]=[]),c[h.astr].push(l[f].target.length)}return{update:u,maxPoints:c}}function D(t,e){var r=new t.constructor(t.length+e.length);return r.set(t),r.set(e,t.length),r}function z(t,r,n,i){t=o.getGraphDiv(t),_.clearPromiseQueue(t);var a={};if(\\\"string\\\"==typeof r)a[r]=n;else{if(!o.isPlainObject(r))return o.warn(\\\"Restyle fail.\\\",r,n,i),Promise.reject();a=o.extendFlat({},r),void 0===i&&(i=n)}Object.keys(a).length&&(t.changed=!0);var s=_.coerceTraceIndices(t,i),l=N(t,a,s),c=l.flags;c.calc&&(t.calcdata=void 0),c.clearAxisTypes&&_.clearAxisTypes(t,s,{});var f=[];c.fullReplot?f.push(e._doPlot):(f.push(h.previousPromises),h.supplyDefaults(t),c.markerSize&&(h.doCalcdata(t),H(f)),c.style&&f.push(w.doTraceStyle),c.colorbars&&f.push(w.doColorBars),f.push(M)),f.push(h.rehover,h.redrag,h.reselect),u.add(t,z,[t,l.undoit,l.traces],z,[t,l.redoit,l.traces]);var p=o.syncOrAsync(f,t);return p&&p.then||(p=Promise.resolve()),p.then((function(){return t.emit(\\\"plotly_restyle\\\",l.eventData),t}))}function R(t){return void 0===t?null:t}function F(t,e){return e?function(e,r,n){var i=s(e,r),a=i.set;return i.set=function(e){B((n||\\\"\\\")+r,i.get(),e,t),a(e)},i}:s}function B(t,e,r,n){if(Array.isArray(e)||Array.isArray(r))for(var i=Array.isArray(e)?e:[],a=Array.isArray(r)?r:[],s=Math.max(i.length,a.length),l=0;l<s;l++)B(t+\\\"[\\\"+l+\\\"]\\\",i[l],a[l],n);else if(o.isPlainObject(e)||o.isPlainObject(r)){var u=o.isPlainObject(e)?e:{},c=o.isPlainObject(r)?r:{},f=o.extendFlat({},u,c);for(var h in f)B(t+\\\".\\\"+h,u[h],c[h],n)}else void 0===n[t]&&(n[t]=R(e))}function N(t,e,r){var n,i=t._fullLayout,a=t._fullData,l=t.data,u=i._guiEditing,d=F(i._preGUI,u),v=o.extendDeepAll({},e);j(e);var g,y=T.traceFlags(),m={},x={};function b(){return r.map((function(){}))}function w(t){var e=p.id2name(t);-1===g.indexOf(e)&&g.push(e)}function k(t){return\\\"LAYOUT\\\"+t+\\\".autorange\\\"}function A(t){return\\\"LAYOUT\\\"+t+\\\".range\\\"}function M(t){for(var e=t;e<a.length;e++)if(a[e]._input===l[t])return a[e]}function S(n,a,o){if(Array.isArray(n))n.forEach((function(t){S(t,a,o)}));else if(!(n in e)&&!_.hasParent(e,n)){var s;if(\\\"LAYOUT\\\"===n.substr(0,6))s=d(t.layout,n.replace(\\\"LAYOUT\\\",\\\"\\\"));else{var c=r[o];s=F(i._tracePreGUI[M(c)._fullInput.uid],u)(l[c],n)}n in x||(x[n]=b()),void 0===x[n][o]&&(x[n][o]=R(s.get())),void 0!==a&&s.set(a)}}function E(t){return function(e){return a[e][t]}}function L(t){return function(e,n){return!1===e?a[r[n]][t]:null}}for(var C in e){if(_.hasParent(e,C))throw new Error(\\\"cannot set \\\"+C+\\\" and a parent attribute simultaneously\\\");var P,O,I,D,z,B,N=e[C];if(\\\"autobinx\\\"!==C&&\\\"autobiny\\\"!==C||(C=C.charAt(C.length-1)+\\\"bins\\\",N=Array.isArray(N)?N.map(L(C)):!1===N?r.map(E(C)):null),m[C]=N,\\\"LAYOUT\\\"!==C.substr(0,6)){for(x[C]=b(),n=0;n<r.length;n++)if(P=l[r[n]],O=M(r[n]),D=(I=F(i._tracePreGUI[O._fullInput.uid],u)(P,C)).get(),void 0!==(z=Array.isArray(N)?N[n%N.length]:N)){var U=I.parts[I.parts.length-1],V=C.substr(0,C.length-U.length-1),H=V?V+\\\".\\\":\\\"\\\",q=V?s(O,V).get():O;if((B=f.getTraceValObject(O,I.parts))&&B.impliedEdits&&null!==z)for(var G in B.impliedEdits)S(o.relativeAttr(C,G),B.impliedEdits[G],n);else if(\\\"thicknessmode\\\"!==U&&\\\"lenmode\\\"!==U||D===z||\\\"fraction\\\"!==z&&\\\"pixels\\\"!==z||!q){if(\\\"type\\\"===C&&(\\\"pie\\\"===z!=(\\\"pie\\\"===D)||\\\"funnelarea\\\"===z!=(\\\"funnelarea\\\"===D))){var Z=\\\"x\\\",Y=\\\"y\\\";\\\"bar\\\"!==z&&\\\"bar\\\"!==D||\\\"h\\\"!==P.orientation||(Z=\\\"y\\\",Y=\\\"x\\\"),o.swapAttrs(P,[\\\"?\\\",\\\"?src\\\"],\\\"labels\\\",Z),o.swapAttrs(P,[\\\"d?\\\",\\\"?0\\\"],\\\"label\\\",Z),o.swapAttrs(P,[\\\"?\\\",\\\"?src\\\"],\\\"values\\\",Y),\\\"pie\\\"===D||\\\"funnelarea\\\"===D?(s(P,\\\"marker.color\\\").set(s(P,\\\"marker.colors\\\").get()),i._pielayer.selectAll(\\\"g.trace\\\").remove()):c.traceIs(P,\\\"cartesian\\\")&&s(P,\\\"marker.colors\\\").set(s(P,\\\"marker.color\\\").get())}}else{var W=i._size,X=q.orient,J=\\\"top\\\"===X||\\\"bottom\\\"===X;if(\\\"thicknessmode\\\"===U){var K=J?W.h:W.w;S(H+\\\"thickness\\\",q.thickness*(\\\"fraction\\\"===z?1/K:K),n)}else{var $=J?W.w:W.h;S(H+\\\"len\\\",q.len*(\\\"fraction\\\"===z?1/$:$),n)}}if(x[C][n]=R(D),-1!==[\\\"swapxy\\\",\\\"swapxyaxes\\\",\\\"orientation\\\",\\\"orientationaxes\\\"].indexOf(C)){if(\\\"orientation\\\"===C){I.set(z);var Q=P.x&&!P.y?\\\"h\\\":\\\"v\\\";if((I.get()||Q)===O.orientation)continue}else\\\"orientationaxes\\\"===C&&(P.orientation={v:\\\"h\\\",h:\\\"v\\\"}[O.orientation]);_.swapXYData(P),y.calc=y.clearAxisTypes=!0}else-1!==h.dataArrayContainers.indexOf(I.parts[0])?(_.manageArrayContainers(I,z,x),y.calc=!0):(B?B.arrayOk&&!c.traceIs(O,\\\"regl\\\")&&(o.isArrayOrTypedArray(z)||o.isArrayOrTypedArray(D))?y.calc=!0:T.update(y,B):y.calc=!0,I.set(z))}if(-1!==[\\\"swapxyaxes\\\",\\\"orientationaxes\\\"].indexOf(C)&&p.swap(t,r),\\\"orientationaxes\\\"===C){var tt=s(t.layout,\\\"hovermode\\\"),et=tt.get();\\\"x\\\"===et?tt.set(\\\"y\\\"):\\\"y\\\"===et?tt.set(\\\"x\\\"):\\\"x unified\\\"===et?tt.set(\\\"y unified\\\"):\\\"y unified\\\"===et&&tt.set(\\\"x unified\\\")}if(-1!==[\\\"orientation\\\",\\\"type\\\"].indexOf(C)){for(g=[],n=0;n<r.length;n++){var rt=l[r[n]];c.traceIs(rt,\\\"cartesian\\\")&&(w(rt.xaxis||\\\"x\\\"),w(rt.yaxis||\\\"y\\\"))}S(g.map(k),!0,0),S(g.map(A),[0,1],0)}}else I=d(t.layout,C.replace(\\\"LAYOUT\\\",\\\"\\\")),x[C]=[R(I.get())],I.set(Array.isArray(N)?N[0]:N),y.calc=!0}return(y.calc||y.plot)&&(y.fullReplot=!0),{flags:y,undoit:x,redoit:m,traces:r,eventData:o.extendDeepNoArrays([],[v,r])}}function j(t){var e,r,n,i=o.counterRegex(\\\"axis\\\",\\\".title\\\",!1,!1),a=/colorbar\\\\.title$/,s=Object.keys(t);for(e=0;e<s.length;e++)r=s[e],n=t[r],\\\"title\\\"!==r&&!i.test(r)&&!a.test(r)||\\\"string\\\"!=typeof n&&\\\"number\\\"!=typeof n?r.indexOf(\\\"titlefont\\\")>-1&&-1===r.indexOf(\\\"grouptitlefont\\\")?l(r,r.replace(\\\"titlefont\\\",\\\"title.font\\\")):r.indexOf(\\\"titleposition\\\")>-1?l(r,r.replace(\\\"titleposition\\\",\\\"title.position\\\")):r.indexOf(\\\"titleside\\\")>-1?l(r,r.replace(\\\"titleside\\\",\\\"title.side\\\")):r.indexOf(\\\"titleoffset\\\")>-1&&l(r,r.replace(\\\"titleoffset\\\",\\\"title.offset\\\")):l(r,r.replace(\\\"title\\\",\\\"title.text\\\"));function l(e,r){t[r]=t[e],delete t[e]}}function U(t,e,r){t=o.getGraphDiv(t),_.clearPromiseQueue(t);var n={};if(\\\"string\\\"==typeof e)n[e]=r;else{if(!o.isPlainObject(e))return o.warn(\\\"Relayout fail.\\\",e,r),Promise.reject();n=o.extendFlat({},e)}Object.keys(n).length&&(t.changed=!0);var i=Y(t,n),a=i.flags;a.calc&&(t.calcdata=void 0);var s=[h.previousPromises];a.layoutReplot?s.push(w.layoutReplot):Object.keys(n).length&&(V(t,a,i)||h.supplyDefaults(t),a.legend&&s.push(w.doLegend),a.layoutstyle&&s.push(w.layoutStyles),a.axrange&&H(s,i.rangesAltered),a.ticks&&s.push(w.doTicksRelayout),a.modebar&&s.push(w.doModeBar),a.camera&&s.push(w.doCamera),a.colorbars&&s.push(w.doColorBars),s.push(M)),s.push(h.rehover,h.redrag,h.reselect),u.add(t,U,[t,i.undoit],U,[t,i.redoit]);var l=o.syncOrAsync(s,t);return l&&l.then||(l=Promise.resolve(t)),l.then((function(){return t.emit(\\\"plotly_relayout\\\",i.eventData),t}))}function V(t,e,r){var n=t._fullLayout;if(!e.axrange)return!1;for(var i in e)if(\\\"axrange\\\"!==i&&e[i])return!1;for(var a in r.rangesAltered){var o=p.id2name(a),s=t.layout[o],l=n[o];if(l.autorange=s.autorange,s.range&&(l.range=s.range.slice()),l.cleanRange(),l._matchGroup)for(var u in l._matchGroup)if(u!==a){var c=n[p.id2name(u)];c.autorange=l.autorange,c.range=l.range.slice(),c._input.range=l.range.slice()}}return!0}function H(t,e){var r=e?function(t){var r=[];for(var n in e){var i=p.getFromId(t,n);if(r.push(n),-1!==(i.ticklabelposition||\\\"\\\").indexOf(\\\"inside\\\")&&i._anchorAxis&&r.push(i._anchorAxis._id),i._matchGroup)for(var a in i._matchGroup)e[a]||r.push(a)}return p.draw(t,r,{skipTitle:!0})}:function(t){return p.draw(t,\\\"redraw\\\")};t.push(m,w.doAutoRangeAndConstraints,r,w.drawData,w.finalDraw)}var q=/^[xyz]axis[0-9]*\\\\.range(\\\\[[0|1]\\\\])?$/,G=/^[xyz]axis[0-9]*\\\\.autorange$/,Z=/^[xyz]axis[0-9]*\\\\.domain(\\\\[[0|1]\\\\])?$/;function Y(t,e){var r,n,i,a=t.layout,l=t._fullLayout,u=l._guiEditing,h=F(l._preGUI,u),d=Object.keys(e),v=p.list(t),g=o.extendDeepAll({},e),y={};for(j(e),d=Object.keys(e),n=0;n<d.length;n++)if(0===d[n].indexOf(\\\"allaxes\\\")){for(i=0;i<v.length;i++){var m=v[i]._id.substr(1),x=-1!==m.indexOf(\\\"scene\\\")?m+\\\".\\\":\\\"\\\",w=d[n].replace(\\\"allaxes\\\",x+v[i]._name);e[w]||(e[w]=e[d[n]])}delete e[d[n]]}var A=T.layoutFlags(),M={},S={};function E(t,r){if(Array.isArray(t))t.forEach((function(t){E(t,r)}));else if(!(t in e)&&!_.hasParent(e,t)){var n=h(a,t);t in S||(S[t]=R(n.get())),void 0!==r&&n.set(r)}}var L,C={};function P(t){var e=p.name2id(t.split(\\\".\\\")[0]);return C[e]=1,e}for(var O in e){if(_.hasParent(e,O))throw new Error(\\\"cannot set \\\"+O+\\\" and a parent attribute simultaneously\\\");for(var I=h(a,O),D=e[O],z=I.parts.length-1;z>0&&\\\"string\\\"!=typeof I.parts[z];)z--;var B=I.parts[z],N=I.parts[z-1]+\\\".\\\"+B,U=I.parts.slice(0,z).join(\\\".\\\"),V=s(t.layout,U).get(),H=s(l,U).get(),Y=I.get();if(void 0!==D){M[O]=D,S[O]=\\\"reverse\\\"===B?D:R(Y);var X=f.getLayoutValObject(l,I.parts);if(X&&X.impliedEdits&&null!==D)for(var J in X.impliedEdits)E(o.relativeAttr(O,J),X.impliedEdits[J]);if(-1!==[\\\"width\\\",\\\"height\\\"].indexOf(O))if(D){E(\\\"autosize\\\",null);var K=\\\"height\\\"===O?\\\"width\\\":\\\"height\\\";E(K,l[K])}else l[O]=t._initialAutoSize[O];else if(\\\"autosize\\\"===O)E(\\\"width\\\",D?null:l.width),E(\\\"height\\\",D?null:l.height);else if(N.match(q))P(N),s(l,U+\\\"._inputRange\\\").set(null);else if(N.match(G)){P(N),s(l,U+\\\"._inputRange\\\").set(null);var $=s(l,U).get();$._inputDomain&&($._input.domain=$._inputDomain.slice())}else N.match(Z)&&s(l,U+\\\"._inputDomain\\\").set(null);if(\\\"type\\\"===B){L=V;var Q=\\\"linear\\\"===H.type&&\\\"log\\\"===D,tt=\\\"log\\\"===H.type&&\\\"linear\\\"===D;if(Q||tt){if(L&&L.range)if(H.autorange)Q&&(L.range=L.range[1]>L.range[0]?[1,2]:[2,1]);else{var et=L.range[0],rt=L.range[1];Q?(et<=0&&rt<=0&&E(U+\\\".autorange\\\",!0),et<=0?et=rt/1e6:rt<=0&&(rt=et/1e6),E(U+\\\".range[0]\\\",Math.log(et)/Math.LN10),E(U+\\\".range[1]\\\",Math.log(rt)/Math.LN10)):(E(U+\\\".range[0]\\\",Math.pow(10,et)),E(U+\\\".range[1]\\\",Math.pow(10,rt)))}else E(U+\\\".autorange\\\",!0);Array.isArray(l._subplots.polar)&&l._subplots.polar.length&&l[I.parts[0]]&&\\\"radialaxis\\\"===I.parts[1]&&delete l[I.parts[0]]._subplot.viewInitial[\\\"radialaxis.range\\\"],c.getComponentMethod(\\\"annotations\\\",\\\"convertCoords\\\")(t,H,D,E),c.getComponentMethod(\\\"images\\\",\\\"convertCoords\\\")(t,H,D,E)}else E(U+\\\".autorange\\\",!0),E(U+\\\".range\\\",null);s(l,U+\\\"._inputRange\\\").set(null)}else if(B.match(k)){var nt=s(l,O).get(),it=(D||{}).type;it&&\\\"-\\\"!==it||(it=\\\"linear\\\"),c.getComponentMethod(\\\"annotations\\\",\\\"convertCoords\\\")(t,nt,it,E),c.getComponentMethod(\\\"images\\\",\\\"convertCoords\\\")(t,nt,it,E)}var at=b.containerArrayMatch(O);if(at){r=at.array,n=at.index;var ot=at.property,st=X||{editType:\\\"calc\\\"};\\\"\\\"!==n&&\\\"\\\"===ot&&(b.isAddVal(D)?S[O]=null:b.isRemoveVal(D)?S[O]=(s(a,r).get()||[])[n]:o.warn(\\\"unrecognized full object value\\\",e)),T.update(A,st),y[r]||(y[r]={});var lt=y[r][n];lt||(lt=y[r][n]={}),lt[ot]=D,delete e[O]}else\\\"reverse\\\"===B?(V.range?V.range.reverse():(E(U+\\\".autorange\\\",!0),V.range=[1,0]),H.autorange?A.calc=!0:A.plot=!0):(\\\"dragmode\\\"===O&&(!1===D&&!1!==Y||!1!==D&&!1===Y)||l._has(\\\"scatter-like\\\")&&l._has(\\\"regl\\\")&&\\\"dragmode\\\"===O&&(\\\"lasso\\\"===D||\\\"select\\\"===D)&&\\\"lasso\\\"!==Y&&\\\"select\\\"!==Y||l._has(\\\"gl2d\\\")?A.plot=!0:X?T.update(A,X):A.calc=!0,I.set(D))}}for(r in y)b.applyContainerArrayChanges(t,h(a,r),y[r],A,h)||(A.plot=!0);for(var ut in C){var ct=(L=p.getFromId(t,ut))&&L._constraintGroup;if(ct)for(var ft in A.calc=!0,ct)C[ft]||(p.getFromId(t,ft)._constraintShrinkable=!0)}return(W(t)||e.height||e.width)&&(A.plot=!0),(A.plot||A.calc)&&(A.layoutReplot=!0),{flags:A,rangesAltered:C,undoit:S,redoit:M,eventData:g}}function W(t){var e=t._fullLayout,r=e.width,n=e.height;return t.layout.autosize&&h.plotAutoSize(t,t.layout,e),e.width!==r||e.height!==n}function X(t,r,n,i){t=o.getGraphDiv(t),_.clearPromiseQueue(t),o.isPlainObject(r)||(r={}),o.isPlainObject(n)||(n={}),Object.keys(r).length&&(t.changed=!0),Object.keys(n).length&&(t.changed=!0);var a=_.coerceTraceIndices(t,i),s=N(t,o.extendFlat({},r),a),l=s.flags,c=Y(t,o.extendFlat({},n)),f=c.flags;(l.calc||f.calc)&&(t.calcdata=void 0),l.clearAxisTypes&&_.clearAxisTypes(t,a,n);var p=[];f.layoutReplot?p.push(w.layoutReplot):l.fullReplot?p.push(e._doPlot):(p.push(h.previousPromises),V(t,f,c)||h.supplyDefaults(t),l.style&&p.push(w.doTraceStyle),(l.colorbars||f.colorbars)&&p.push(w.doColorBars),f.legend&&p.push(w.doLegend),f.layoutstyle&&p.push(w.layoutStyles),f.axrange&&H(p,c.rangesAltered),f.ticks&&p.push(w.doTicksRelayout),f.modebar&&p.push(w.doModeBar),f.camera&&p.push(w.doCamera),p.push(M)),p.push(h.rehover,h.redrag,h.reselect),u.add(t,X,[t,s.undoit,c.undoit,s.traces],X,[t,s.redoit,c.redoit,s.traces]);var d=o.syncOrAsync(p,t);return d&&d.then||(d=Promise.resolve(t)),d.then((function(){return t.emit(\\\"plotly_update\\\",{data:s.eventData,layout:c.eventData}),t}))}function J(t){return function(e){e._fullLayout._guiEditing=!0;var r=t.apply(null,arguments);return e._fullLayout._guiEditing=!1,r}}var K=[{pattern:/^hiddenlabels/,attr:\\\"legend.uirevision\\\"},{pattern:/^((x|y)axis\\\\d*)\\\\.((auto)?range|title\\\\.text)/},{pattern:/axis\\\\d*\\\\.showspikes$/,attr:\\\"modebar.uirevision\\\"},{pattern:/(hover|drag)mode$/,attr:\\\"modebar.uirevision\\\"},{pattern:/^(scene\\\\d*)\\\\.camera/},{pattern:/^(geo\\\\d*)\\\\.(projection|center|fitbounds)/},{pattern:/^(ternary\\\\d*\\\\.[abc]axis)\\\\.(min|title\\\\.text)$/},{pattern:/^(polar\\\\d*\\\\.radialaxis)\\\\.((auto)?range|angle|title\\\\.text)/},{pattern:/^(polar\\\\d*\\\\.angularaxis)\\\\.rotation/},{pattern:/^(mapbox\\\\d*)\\\\.(center|zoom|bearing|pitch)/},{pattern:/^legend\\\\.(x|y)$/,attr:\\\"editrevision\\\"},{pattern:/^(shapes|annotations)/,attr:\\\"editrevision\\\"},{pattern:/^title\\\\.text$/,attr:\\\"editrevision\\\"}],$=[{pattern:/^selectedpoints$/,attr:\\\"selectionrevision\\\"},{pattern:/(^|value\\\\.)visible$/,attr:\\\"legend.uirevision\\\"},{pattern:/^dimensions\\\\[\\\\d+\\\\]\\\\.constraintrange/},{pattern:/^node\\\\.(x|y|groups)/},{pattern:/^level$/},{pattern:/(^|value\\\\.)name$/},{pattern:/colorbar\\\\.title\\\\.text$/},{pattern:/colorbar\\\\.(x|y)$/,attr:\\\"editrevision\\\"}];function Q(t,e){for(var r=0;r<e.length;r++){var n=e[r],i=t.match(n.pattern);if(i){var a=i[1]||\\\"\\\";return{head:a,tail:t.substr(a.length+1),attr:n.attr}}}}function tt(t,e){var r=s(e,t).get();if(void 0!==r)return r;var n=t.split(\\\".\\\");for(n.pop();n.length>1;)if(n.pop(),void 0!==(r=s(e,n.join(\\\".\\\")+\\\".uirevision\\\").get()))return r;return e.uirevision}function et(t,e){for(var r=0;r<e.length;r++)if(e[r]._fullInput.uid===t)return r;return-1}function rt(t,e,r){for(var n=0;n<e.length;n++)if(e[n].uid===t)return n;return!e[r]||e[r].uid?-1:r}function nt(t,e){var r=o.isPlainObject(t),n=Array.isArray(t);return r||n?(r&&o.isPlainObject(e)||n&&Array.isArray(e))&&JSON.stringify(t)===JSON.stringify(e):t===e}function it(t,e,r,n){var i,a,l,u=n.getValObject,c=n.flags,f=n.immutable,h=n.inArray,p=n.arrayIndex;function d(){var t=i.editType;h&&-1!==t.indexOf(\\\"arraydraw\\\")?o.pushUnique(c.arrays[h],p):(T.update(c,i),\\\"none\\\"!==t&&c.nChanges++,n.transition&&i.anim&&c.nChangesAnim++,(q.test(l)||G.test(l))&&(c.rangesAltered[r[0]]=1),Z.test(l)&&s(e,\\\"_inputDomain\\\").set(null),\\\"datarevision\\\"===a&&(c.newDataRevision=1))}function v(t){return\\\"data_array\\\"===t.valType||t.arrayOk}for(a in t){if(c.calc&&!n.transition)return;var g=t[a],y=e[a],m=r.concat(a);if(l=m.join(\\\".\\\"),\\\"_\\\"!==a.charAt(0)&&\\\"function\\\"!=typeof g&&g!==y){if((\\\"tick0\\\"===a||\\\"dtick\\\"===a)&&\\\"geo\\\"!==r[0]){var x=e.tickmode;if(\\\"auto\\\"===x||\\\"array\\\"===x||!x)continue}if((\\\"range\\\"!==a||!e.autorange)&&(\\\"zmin\\\"!==a&&\\\"zmax\\\"!==a||\\\"contourcarpet\\\"!==e.type)&&(i=u(m))&&(!i._compareAsJSON||JSON.stringify(g)!==JSON.stringify(y))){var b,_=i.valType,w=v(i),k=Array.isArray(g),A=Array.isArray(y);if(k&&A){var M=\\\"_input_\\\"+a,S=t[M],E=e[M];if(Array.isArray(S)&&S===E)continue}if(void 0===y)w&&k?c.calc=!0:d();else if(i._isLinkedToArray){var L=[],C=!1;h||(c.arrays[a]=L);var P=Math.min(g.length,y.length),O=Math.max(g.length,y.length);if(P!==O){if(\\\"arraydraw\\\"!==i.editType){d();continue}C=!0}for(b=0;b<P;b++)it(g[b],y[b],m.concat(b),o.extendFlat({inArray:a,arrayIndex:b},n));if(C)for(b=P;b<O;b++)L.push(b)}else!_&&o.isPlainObject(g)?it(g,y,m,n):w?k&&A?(f&&(c.calc=!0),(f||n.newDataRevision)&&d()):k!==A?c.calc=!0:d():k&&A&&g.length===y.length&&String(g)===String(y)||d()}}}for(a in e)if(!(a in t)&&\\\"_\\\"!==a.charAt(0)&&\\\"function\\\"!=typeof e[a]){if(v(i=u(r.concat(a)))&&Array.isArray(e[a]))return void(c.calc=!0);d()}}function at(t,e){var r;for(r in t)if(\\\"_\\\"!==r.charAt(0)){var n=t[r],i=e[r];if(n!==i)if(o.isPlainObject(n)&&o.isPlainObject(i)){if(at(n,i))return!0}else{if(!Array.isArray(n)||!Array.isArray(i))return!0;if(n.length!==i.length)return!0;for(var a=0;a<n.length;a++)if(n[a]!==i[a]){if(!o.isPlainObject(n[a])||!o.isPlainObject(i[a]))return!0;if(at(n[a],i[a]))return!0}}}}function ot(t){var e=t._fullLayout,r=t.getBoundingClientRect();if(!o.equalDomRects(r,e._lastBBox)){var n=e._invTransform=o.inverseTransformMatrix(o.getFullTransformMatrix(t));e._invScaleX=Math.sqrt(n[0][0]*n[0][0]+n[0][1]*n[0][1]+n[0][2]*n[0][2]),e._invScaleY=Math.sqrt(n[1][0]*n[1][0]+n[1][1]*n[1][1]+n[1][2]*n[1][2]),e._lastBBox=r}}e.animate=function(t,e,r){if(t=o.getGraphDiv(t),!o.isPlotDiv(t))throw new Error(\\\"This element is not a Plotly plot: \\\"+t+\\\". It's likely that you've failed to create a plot before animating it. For more details, see https://plotly.com/javascript/animations/\\\");var n=t._transitionData;n._frameQueue||(n._frameQueue=[]);var i=(r=h.supplyAnimationDefaults(r)).transition,a=r.frame;function s(t){return Array.isArray(i)?t>=i.length?i[0]:i[t]:i}function l(t){return Array.isArray(a)?t>=a.length?a[0]:a[t]:a}function u(t,e){var r=0;return function(){if(t&&++r===e)return t()}}return void 0===n._frameWaitingCnt&&(n._frameWaitingCnt=0),new Promise((function(a,c){function f(){t.emit(\\\"plotly_animating\\\"),n._lastFrameAt=-1/0,n._timeToNext=0,n._runningTransitions=0,n._currentFrame=null;var e=function(){n._animationRaf=window.requestAnimationFrame(e),Date.now()-n._lastFrameAt>n._timeToNext&&function(){n._currentFrame&&n._currentFrame.onComplete&&n._currentFrame.onComplete();var e=n._currentFrame=n._frameQueue.shift();if(e){var r=e.name?e.name.toString():null;t._fullLayout._currentFrame=r,n._lastFrameAt=Date.now(),n._timeToNext=e.frameOpts.duration,h.transition(t,e.frame.data,e.frame.layout,_.coerceTraceIndices(t,e.frame.traces),e.frameOpts,e.transitionOpts).then((function(){e.onComplete&&e.onComplete()})),t.emit(\\\"plotly_animatingframe\\\",{name:r,frame:e.frame,animation:{frame:e.frameOpts,transition:e.transitionOpts}})}else t.emit(\\\"plotly_animated\\\"),window.cancelAnimationFrame(n._animationRaf),n._animationRaf=null}()};e()}var p,d,v=0;function g(t){return Array.isArray(i)?v>=i.length?t.transitionOpts=i[v]:t.transitionOpts=i[0]:t.transitionOpts=i,v++,t}var y=[],m=null==e,x=Array.isArray(e);if(m||x||!o.isPlainObject(e)){if(m||-1!==[\\\"string\\\",\\\"number\\\"].indexOf(typeof e))for(p=0;p<n._frames.length;p++)(d=n._frames[p])&&(m||String(d.group)===String(e))&&y.push({type:\\\"byname\\\",name:String(d.name),data:g({name:d.name})});else if(x)for(p=0;p<e.length;p++){var b=e[p];-1!==[\\\"number\\\",\\\"string\\\"].indexOf(typeof b)?(b=String(b),y.push({type:\\\"byname\\\",name:b,data:g({name:b})})):o.isPlainObject(b)&&y.push({type:\\\"object\\\",data:g(o.extendFlat({},b))})}}else y.push({type:\\\"object\\\",data:g(o.extendFlat({},e))});for(p=0;p<y.length;p++)if(\\\"byname\\\"===(d=y[p]).type&&!n._frameHash[d.data.name])return o.warn('animate failure: frame not found: \\\"'+d.data.name+'\\\"'),void c();-1!==[\\\"next\\\",\\\"immediate\\\"].indexOf(r.mode)&&function(){if(0!==n._frameQueue.length){for(;n._frameQueue.length;){var e=n._frameQueue.pop();e.onInterrupt&&e.onInterrupt()}t.emit(\\\"plotly_animationinterrupted\\\",[])}}(),\\\"reverse\\\"===r.direction&&y.reverse();var w=t._fullLayout._currentFrame;if(w&&r.fromcurrent){var T=-1;for(p=0;p<y.length;p++)if(\\\"byname\\\"===(d=y[p]).type&&d.name===w){T=p;break}if(T>0&&T<y.length-1){var k=[];for(p=0;p<y.length;p++)d=y[p],(\\\"byname\\\"!==y[p].type||p>T)&&k.push(d);y=k}}y.length>0?function(e){if(0!==e.length){for(var i=0;i<e.length;i++){var o;o=\\\"byname\\\"===e[i].type?h.computeFrame(t,e[i].name):e[i].data;var p=l(i),d=s(i);d.duration=Math.min(d.duration,p.duration);var v={frame:o,name:e[i].name,frameOpts:p,transitionOpts:d};i===e.length-1&&(v.onComplete=u(a,2),v.onInterrupt=c),n._frameQueue.push(v)}\\\"immediate\\\"===r.mode&&(n._lastFrameAt=-1/0),n._animationRaf||f()}}(y):(t.emit(\\\"plotly_animated\\\"),a())}))},e.addFrames=function(t,e,r){if(t=o.getGraphDiv(t),null==e)return Promise.resolve();if(!o.isPlotDiv(t))throw new Error(\\\"This element is not a Plotly plot: \\\"+t+\\\". It's likely that you've failed to create a plot before adding frames. For more details, see https://plotly.com/javascript/animations/\\\");var n,i,a,s,l=t._transitionData._frames,c=t._transitionData._frameHash;if(!Array.isArray(e))throw new Error(\\\"addFrames failure: frameList must be an Array of frame definitions\\\"+e);var f=l.length+2*e.length,p=[],d={};for(n=e.length-1;n>=0;n--)if(o.isPlainObject(e[n])){var v=e[n].name,g=(c[v]||d[v]||{}).name,y=e[n].name,m=c[g]||d[g];g&&y&&\\\"number\\\"==typeof y&&m&&A<5&&(A++,o.warn('addFrames: overwriting frame \\\"'+(c[g]||d[g]).name+'\\\" with a frame whose name of type \\\"number\\\" also equates to \\\"'+g+'\\\". This is valid but may potentially lead to unexpected behavior since all plotly.js frame names are stored internally as strings.'),5===A&&o.warn(\\\"addFrames: This API call has yielded too many of these warnings. For the rest of this call, further warnings about numeric frame names will be suppressed.\\\")),d[v]={name:v},p.push({frame:h.supplyFrameDefaults(e[n]),index:r&&void 0!==r[n]&&null!==r[n]?r[n]:f+n})}p.sort((function(t,e){return t.index>e.index?-1:t.index<e.index?1:0}));var x=[],b=[],_=l.length;for(n=p.length-1;n>=0;n--){if(\\\"number\\\"==typeof(i=p[n].frame).name&&o.warn(\\\"Warning: addFrames accepts frames with numeric names, but the numbers areimplicitly cast to strings\\\"),!i.name)for(;c[i.name=\\\"frame \\\"+t._transitionData._counter++];);if(c[i.name]){for(a=0;a<l.length&&(l[a]||{}).name!==i.name;a++);x.push({type:\\\"replace\\\",index:a,value:i}),b.unshift({type:\\\"replace\\\",index:a,value:l[a]})}else s=Math.max(0,Math.min(p[n].index,_)),x.push({type:\\\"insert\\\",index:s,value:i}),b.unshift({type:\\\"delete\\\",index:s}),_++}var w=h.modifyFrames,T=h.modifyFrames,k=[t,b],M=[t,x];return u&&u.add(t,w,k,T,M),h.modifyFrames(t,x)},e.deleteFrames=function(t,e){if(t=o.getGraphDiv(t),!o.isPlotDiv(t))throw new Error(\\\"This element is not a Plotly plot: \\\"+t);var r,n,i=t._transitionData._frames,a=[],s=[];if(!e)for(e=[],r=0;r<i.length;r++)e.push(r);for((e=e.slice()).sort(),r=e.length-1;r>=0;r--)n=e[r],a.push({type:\\\"delete\\\",index:n}),s.unshift({type:\\\"insert\\\",index:n,value:i[n]});var l=h.modifyFrames,c=h.modifyFrames,f=[t,s],p=[t,a];return u&&u.add(t,l,f,c,p),h.modifyFrames(t,a)},e.addTraces=function t(r,n,i){r=o.getGraphDiv(r);var a,s,l=[],c=e.deleteTraces,f=t,h=[r,l],p=[r,n];for(function(t,e,r){var n,i;if(!Array.isArray(t.data))throw new Error(\\\"gd.data must be an array.\\\");if(void 0===e)throw new Error(\\\"traces must be defined.\\\");for(Array.isArray(e)||(e=[e]),n=0;n<e.length;n++)if(\\\"object\\\"!=typeof(i=e[n])||Array.isArray(i)||null===i)throw new Error(\\\"all values in traces array must be non-array objects\\\");if(void 0===r||Array.isArray(r)||(r=[r]),void 0!==r&&r.length!==e.length)throw new Error(\\\"if indices is specified, traces.length must equal indices.length\\\")}(r,n,i),Array.isArray(n)||(n=[n]),n=n.map((function(t){return o.extendFlat({},t)})),_.cleanData(n),a=0;a<n.length;a++)r.data.push(n[a]);for(a=0;a<n.length;a++)l.push(-n.length+a);if(void 0===i)return s=e.redraw(r),u.add(r,c,h,f,p),s;Array.isArray(i)||(i=[i]);try{O(r,l,i)}catch(t){throw r.data.splice(r.data.length-n.length,n.length),t}return u.startSequence(r),u.add(r,c,h,f,p),s=e.moveTraces(r,l,i),u.stopSequence(r),s},e.deleteTraces=function t(r,n){r=o.getGraphDiv(r);var i,a,s=[],l=e.addTraces,c=t,f=[r,s,n],h=[r,n];if(void 0===n)throw new Error(\\\"indices must be an integer or array of integers.\\\");for(Array.isArray(n)||(n=[n]),P(r,n,\\\"indices\\\"),(n=C(n,r.data.length-1)).sort(o.sorterDes),i=0;i<n.length;i+=1)a=r.data.splice(n[i],1)[0],s.push(a);var p=e.redraw(r);return u.add(r,l,f,c,h),p},e.extendTraces=function t(r,n,i,a){var s=I(r=o.getGraphDiv(r),n,i,a,(function(t,e,r){var n,i;if(o.isTypedArray(t))if(r<0){var a=new t.constructor(0),s=D(t,e);r<0?(n=s,i=a):(n=a,i=s)}else if(n=new t.constructor(r),i=new t.constructor(t.length+e.length-r),r===e.length)n.set(e),i.set(t);else if(r<e.length){var l=e.length-r;n.set(e.subarray(l)),i.set(t),i.set(e.subarray(0,l),t.length)}else{var u=r-e.length,c=t.length-u;n.set(t.subarray(c)),n.set(e,u),i.set(t.subarray(0,c))}else n=t.concat(e),i=r>=0&&r<n.length?n.splice(0,n.length-r):[];return[n,i]})),l=e.redraw(r),c=[r,s.update,i,s.maxPoints];return u.add(r,e.prependTraces,c,t,arguments),l},e.moveTraces=function t(r,n,i){var a,s=[],l=[],c=t,f=t,h=[r=o.getGraphDiv(r),i,n],p=[r,n,i];if(O(r,n,i),n=Array.isArray(n)?n:[n],void 0===i)for(i=[],a=0;a<n.length;a++)i.push(-n.length+a);for(i=Array.isArray(i)?i:[i],n=C(n,r.data.length-1),i=C(i,r.data.length-1),a=0;a<r.data.length;a++)-1===n.indexOf(a)&&s.push(r.data[a]);for(a=0;a<n.length;a++)l.push({newIndex:i[a],trace:r.data[n[a]]});for(l.sort((function(t,e){return t.newIndex-e.newIndex})),a=0;a<l.length;a+=1)s.splice(l[a].newIndex,0,l[a].trace);r.data=s;var d=e.redraw(r);return u.add(r,c,h,f,p),d},e.prependTraces=function t(r,n,i,a){var s=I(r=o.getGraphDiv(r),n,i,a,(function(t,e,r){var n,i;if(o.isTypedArray(t))if(r<=0){var a=new t.constructor(0),s=D(e,t);r<0?(n=s,i=a):(n=a,i=s)}else if(n=new t.constructor(r),i=new t.constructor(t.length+e.length-r),r===e.length)n.set(e),i.set(t);else if(r<e.length){var l=e.length-r;n.set(e.subarray(0,l)),i.set(e.subarray(l)),i.set(t,l)}else{var u=r-e.length;n.set(e),n.set(t.subarray(0,u),e.length),i.set(t.subarray(u))}else n=e.concat(t),i=r>=0&&r<n.length?n.splice(r,n.length):[];return[n,i]})),l=e.redraw(r),c=[r,s.update,i,s.maxPoints];return u.add(r,e.extendTraces,c,t,arguments),l},e.newPlot=function(t,r,n,i){return t=o.getGraphDiv(t),h.cleanPlot([],{},t._fullData||[],t._fullLayout||{}),h.purge(t),e._doPlot(t,r,n,i)},e._doPlot=function(t,r,i,a){var s;if(t=o.getGraphDiv(t),l.init(t),o.isPlainObject(r)){var u=r;r=u.data,i=u.layout,a=u.config,s=u.frames}if(!1===l.triggerHandler(t,\\\"plotly_beforeplot\\\",[r,i,a]))return Promise.reject();r||i||o.isPlotDiv(t)||o.warn(\\\"Calling _doPlot as if redrawing but this container doesn't yet have a plot.\\\",t),L(t,a),i||(i={}),n.select(t).classed(\\\"js-plotly-plot\\\",!0),d.makeTester(),Array.isArray(t._promises)||(t._promises=[]);var f=0===(t.data||[]).length&&Array.isArray(r);Array.isArray(r)&&(_.cleanData(r),f?t.data=r:t.data.push.apply(t.data,r),t.empty=!1),t.layout&&!f||(t.layout=_.cleanLayout(i)),h.supplyDefaults(t);var v=t._fullLayout,m=v._has(\\\"cartesian\\\");v._replotting=!0,(f||v._shouldCreateBgLayer)&&(function(t){var e=n.select(t),r=t._fullLayout;if(r._calcInverseTransform=ot,r._calcInverseTransform(t),r._container=e.selectAll(\\\".plot-container\\\").data([0]),r._container.enter().insert(\\\"div\\\",\\\":first-child\\\").classed(\\\"plot-container\\\",!0).classed(\\\"plotly\\\",!0),r._paperdiv=r._container.selectAll(\\\".svg-container\\\").data([0]),r._paperdiv.enter().append(\\\"div\\\").classed(\\\"user-select-none\\\",!0).classed(\\\"svg-container\\\",!0).style(\\\"position\\\",\\\"relative\\\"),r._glcontainer=r._paperdiv.selectAll(\\\".gl-container\\\").data([{}]),r._glcontainer.enter().append(\\\"div\\\").classed(\\\"gl-container\\\",!0),r._paperdiv.selectAll(\\\".main-svg\\\").remove(),r._paperdiv.select(\\\".modebar-container\\\").remove(),r._paper=r._paperdiv.insert(\\\"svg\\\",\\\":first-child\\\").classed(\\\"main-svg\\\",!0),r._toppaper=r._paperdiv.append(\\\"svg\\\").classed(\\\"main-svg\\\",!0),r._modebardiv=r._paperdiv.append(\\\"div\\\"),delete r._modeBar,r._hoverpaper=r._paperdiv.append(\\\"svg\\\").classed(\\\"main-svg\\\",!0),!r._uid){var i={};n.selectAll(\\\"defs\\\").each((function(){this.id&&(i[this.id.split(\\\"-\\\")[1]]=1)})),r._uid=o.randstr(i)}r._paperdiv.selectAll(\\\".main-svg\\\").attr(y.svgAttrs),r._defs=r._paper.append(\\\"defs\\\").attr(\\\"id\\\",\\\"defs-\\\"+r._uid),r._clips=r._defs.append(\\\"g\\\").classed(\\\"clips\\\",!0),r._topdefs=r._toppaper.append(\\\"defs\\\").attr(\\\"id\\\",\\\"topdefs-\\\"+r._uid),r._topclips=r._topdefs.append(\\\"g\\\").classed(\\\"clips\\\",!0),r._bgLayer=r._paper.append(\\\"g\\\").classed(\\\"bglayer\\\",!0),r._draggers=r._paper.append(\\\"g\\\").classed(\\\"draglayer\\\",!0);var a=r._paper.append(\\\"g\\\").classed(\\\"layer-below\\\",!0);r._imageLowerLayer=a.append(\\\"g\\\").classed(\\\"imagelayer\\\",!0),r._shapeLowerLayer=a.append(\\\"g\\\").classed(\\\"shapelayer\\\",!0),r._cartesianlayer=r._paper.append(\\\"g\\\").classed(\\\"cartesianlayer\\\",!0),r._polarlayer=r._paper.append(\\\"g\\\").classed(\\\"polarlayer\\\",!0),r._smithlayer=r._paper.append(\\\"g\\\").classed(\\\"smithlayer\\\",!0),r._ternarylayer=r._paper.append(\\\"g\\\").classed(\\\"ternarylayer\\\",!0),r._geolayer=r._paper.append(\\\"g\\\").classed(\\\"geolayer\\\",!0),r._funnelarealayer=r._paper.append(\\\"g\\\").classed(\\\"funnelarealayer\\\",!0),r._pielayer=r._paper.append(\\\"g\\\").classed(\\\"pielayer\\\",!0),r._iciclelayer=r._paper.append(\\\"g\\\").classed(\\\"iciclelayer\\\",!0),r._treemaplayer=r._paper.append(\\\"g\\\").classed(\\\"treemaplayer\\\",!0),r._sunburstlayer=r._paper.append(\\\"g\\\").classed(\\\"sunburstlayer\\\",!0),r._indicatorlayer=r._toppaper.append(\\\"g\\\").classed(\\\"indicatorlayer\\\",!0),r._glimages=r._paper.append(\\\"g\\\").classed(\\\"glimages\\\",!0);var s=r._toppaper.append(\\\"g\\\").classed(\\\"layer-above\\\",!0);r._imageUpperLayer=s.append(\\\"g\\\").classed(\\\"imagelayer\\\",!0),r._shapeUpperLayer=s.append(\\\"g\\\").classed(\\\"shapelayer\\\",!0),r._selectionLayer=r._toppaper.append(\\\"g\\\").classed(\\\"selectionlayer\\\",!0),r._infolayer=r._toppaper.append(\\\"g\\\").classed(\\\"infolayer\\\",!0),r._menulayer=r._toppaper.append(\\\"g\\\").classed(\\\"menulayer\\\",!0),r._zoomlayer=r._toppaper.append(\\\"g\\\").classed(\\\"zoomlayer\\\",!0),r._hoverlayer=r._hoverpaper.append(\\\"g\\\").classed(\\\"hoverlayer\\\",!0),r._modebardiv.classed(\\\"modebar-container\\\",!0).style(\\\"position\\\",\\\"absolute\\\").style(\\\"top\\\",\\\"0px\\\").style(\\\"right\\\",\\\"0px\\\"),t.emit(\\\"plotly_framework\\\")}(t),v._shouldCreateBgLayer&&delete v._shouldCreateBgLayer),d.initGradients(t),d.initPatterns(t),f&&p.saveShowSpikeInitial(t);var x=!t.calcdata||t.calcdata.length!==(t._fullData||[]).length;x&&h.doCalcdata(t);for(var b=0;b<t.calcdata.length;b++)t.calcdata[b][0].trace=t._fullData[b];t._context.responsive?t._responsiveChartHandler||(t._responsiveChartHandler=function(){o.isHidden(t)||h.resize(t)},window.addEventListener(\\\"resize\\\",t._responsiveChartHandler)):o.clearResponsive(t);var T=o.extendFlat({},v._size),k=0;function A(){if(h.clearAutoMarginIds(t),w.drawMarginPushers(t),p.allowAutoMargin(t),t._fullLayout.title.text&&t._fullLayout.title.automargin&&h.allowAutoMargin(t,\\\"title.automargin\\\"),v._has(\\\"pie\\\"))for(var e=t._fullData,r=0;r<e.length;r++){var n=e[r];\\\"pie\\\"===n.type&&n.automargin&&h.allowAutoMargin(t,\\\"pie.\\\"+n.uid+\\\".automargin\\\")}return h.doAutoMargin(t),h.previousPromises(t)}function S(){t._transitioning||(w.doAutoRangeAndConstraints(t),f&&p.saveRangeInitial(t),c.getComponentMethod(\\\"rangeslider\\\",\\\"calcAutorange\\\")(t))}var E=[h.previousPromises,function(){if(s)return e.addFrames(t,s)},function e(){for(var r=v._basePlotModules,n=0;n<r.length;n++)r[n].drawFramework&&r[n].drawFramework(t);!v._glcanvas&&v._has(\\\"gl\\\")&&(v._glcanvas=v._glcontainer.selectAll(\\\".gl-canvas\\\").data([{key:\\\"contextLayer\\\",context:!0,pick:!1},{key:\\\"focusLayer\\\",context:!1,pick:!1},{key:\\\"pickLayer\\\",context:!1,pick:!0}],(function(t){return t.key})),v._glcanvas.enter().append(\\\"canvas\\\").attr(\\\"class\\\",(function(t){return\\\"gl-canvas gl-canvas-\\\"+t.key.replace(\\\"Layer\\\",\\\"\\\")})).style({position:\\\"absolute\\\",top:0,left:0,overflow:\\\"visible\\\",\\\"pointer-events\\\":\\\"none\\\"}));var i=t._context.plotGlPixelRatio;if(v._glcanvas){v._glcanvas.attr(\\\"width\\\",v.width*i).attr(\\\"height\\\",v.height*i).style(\\\"width\\\",v.width+\\\"px\\\").style(\\\"height\\\",v.height+\\\"px\\\");var a=v._glcanvas.data()[0].regl;if(a&&(Math.floor(v.width*i)!==a._gl.drawingBufferWidth||Math.floor(v.height*i)!==a._gl.drawingBufferHeight)){var s=\\\"WebGL context buffer and canvas dimensions do not match due to browser/WebGL bug.\\\";if(!k)return o.log(s+\\\" Clearing graph and plotting again.\\\"),h.cleanPlot([],{},t._fullData,v),h.supplyDefaults(t),v=t._fullLayout,h.doCalcdata(t),k++,e();o.error(s)}}return\\\"h\\\"===v.modebar.orientation?v._modebardiv.style(\\\"height\\\",null).style(\\\"width\\\",\\\"100%\\\"):v._modebardiv.style(\\\"width\\\",null).style(\\\"height\\\",v.height+\\\"px\\\"),h.previousPromises(t)},A,function(){if(h.didMarginChange(T,v._size))return o.syncOrAsync([A,w.layoutStyles],t)}];m&&E.push((function(){if(x)return o.syncOrAsync([c.getComponentMethod(\\\"shapes\\\",\\\"calcAutorange\\\"),c.getComponentMethod(\\\"annotations\\\",\\\"calcAutorange\\\"),S],t);S()})),E.push(w.layoutStyles),m&&E.push((function(){return p.draw(t,f?\\\"\\\":\\\"redraw\\\")}),(function(t){t._fullLayout._insideTickLabelsAutorange&&U(t,t._fullLayout._insideTickLabelsAutorange).then((function(){t._fullLayout._insideTickLabelsAutorange=void 0}))})),E.push(w.drawData,w.finalDraw,g,h.addLinks,h.rehover,h.redrag,h.reselect,h.doAutoMargin,(function(t){t._fullLayout._insideTickLabelsAutorange&&f&&p.saveRangeInitial(t,!0)}),h.previousPromises);var C=o.syncOrAsync(E,t);return C&&C.then||(C=Promise.resolve()),C.then((function(){return M(t),t}))},e.purge=function(t){var e=(t=o.getGraphDiv(t))._fullLayout||{},r=t._fullData||[];return h.cleanPlot([],{},r,e),h.purge(t),l.purge(t),e._container&&e._container.remove(),delete t._context,t},e.react=function(t,r,n,i){var a,l;t=o.getGraphDiv(t),_.clearPromiseQueue(t);var u=t._fullData,p=t._fullLayout;if(o.isPlotDiv(t)&&u&&p){if(o.isPlainObject(r)){var d=r;r=d.data,n=d.layout,i=d.config,a=d.frames}var v=!1;if(i){var g=o.extendDeep({},t._context);t._context=void 0,L(t,i),v=at(g,t._context)}t.data=r||[],_.cleanData(t.data),t.layout=n||{},_.cleanLayout(t.layout),function(t,e,r,n){var i,a,l,u,c,f,h,p,d,v,g=n._preGUI,y=[],m={},x={};for(i in g){if(c=Q(i,K)){if(d=c.head,v=c.tail,a=c.attr||d+\\\".uirevision\\\",(u=(l=s(n,a).get())&&tt(a,e))&&u===l){if(null===(f=g[i])&&(f=void 0),nt(p=(h=s(e,i)).get(),f)){void 0===p&&\\\"autorange\\\"===v&&y.push(d),h.set(R(s(n,i).get()));continue}if(\\\"autorange\\\"===v||\\\"range[\\\"===v.substr(0,6)){var b=g[d+\\\".range[0]\\\"],_=g[d+\\\".range[1]\\\"],w=g[d+\\\".autorange\\\"];if(w||null===w&&null===b&&null===_){if(!(d in m)){var T=s(e,d).get();m[d]=T&&(T.autorange||!1!==T.autorange&&(!T.range||2!==T.range.length))}if(m[d]){h.set(R(s(n,i).get()));continue}}}}}else o.warn(\\\"unrecognized GUI edit: \\\"+i);delete g[i],c&&\\\"range[\\\"===c.tail.substr(0,6)&&(x[c.head]=1)}for(var k=0;k<y.length;k++){var A=y[k];if(x[A]){var M=s(e,A).get();M&&delete M.autorange}}var S=n._tracePreGUI;for(var E in S){var L,C=S[E],P=null;for(i in C){if(!P){var O=et(E,r);if(O<0){delete S[E];break}var I=rt(E,t,(L=r[O]._fullInput).index);if(I<0){delete S[E];break}P=t[I]}if(c=Q(i,$)){if(c.attr?u=(l=s(n,c.attr).get())&&tt(c.attr,e):(l=L.uirevision,void 0===(u=P.uirevision)&&(u=e.uirevision)),u&&u===l&&(null===(f=C[i])&&(f=void 0),nt(p=(h=s(P,i)).get(),f))){h.set(R(s(L,i).get()));continue}}else o.warn(\\\"unrecognized GUI edit: \\\"+i+\\\" in trace uid \\\"+E);delete C[i]}}}(t.data,t.layout,u,p),h.supplyDefaults(t,{skipUpdateCalc:!0});var y=t._fullData,m=t._fullLayout,x=void 0===m.datarevision,b=m.transition,k=function(t,e,r,n,i){var a=T.layoutFlags();return a.arrays={},a.rangesAltered={},a.nChanges=0,a.nChangesAnim=0,it(e,r,[],{getValObject:function(t){return f.getLayoutValObject(r,t)},flags:a,immutable:n,transition:i,gd:t}),(a.plot||a.calc)&&(a.layoutReplot=!0),i&&a.nChanges&&a.nChangesAnim&&(a.anim=a.nChanges===a.nChangesAnim?\\\"all\\\":\\\"some\\\"),a}(t,p,m,x,b),A=k.newDataRevision,S=function(t,e,r,n,i,a){var o=e.length===r.length;if(!i&&!o)return{fullReplot:!0,calc:!0};var s,l,u=T.traceFlags();u.arrays={},u.nChanges=0,u.nChangesAnim=0;var c={getValObject:function(t){var e=f.getTraceValObject(l,t);return!l._module.animatable&&e.anim&&(e.anim=!1),e},flags:u,immutable:n,transition:i,newDataRevision:a,gd:t},p={};for(s=0;s<e.length;s++)if(r[s]){if(l=r[s]._fullInput,h.hasMakesDataTransform(l)&&(l=r[s]),p[l.uid])continue;p[l.uid]=1,it(e[s]._fullInput,l,[],c)}return(u.calc||u.plot)&&(u.fullReplot=!0),i&&u.nChanges&&u.nChangesAnim&&(u.anim=u.nChanges===u.nChangesAnim&&o?\\\"all\\\":\\\"some\\\"),u}(t,u,y,x,b,A);if(W(t)&&(k.layoutReplot=!0),S.calc||k.calc){t.calcdata=void 0;for(var E=Object.getOwnPropertyNames(m),C=0;C<E.length;C++){var P=E[C],O=P.substring(0,5);if(\\\"xaxis\\\"===O||\\\"yaxis\\\"===O){var I=m[P]._emptyCategories;I&&I()}}}else h.supplyDefaultsUpdateCalc(t.calcdata,y);var D=[];if(a&&(t._transitionData={},h.createTransitionData(t),D.push((function(){return e.addFrames(t,a)}))),m.transition&&!v&&(S.anim||k.anim))k.ticks&&D.push(w.doTicksRelayout),h.doCalcdata(t),w.doAutoRangeAndConstraints(t),D.push((function(){return h.transitionFromReact(t,S,k,p)}));else if(S.fullReplot||k.layoutReplot||v)t._fullLayout._skipDefaults=!0,D.push(e._doPlot);else{for(var z in k.arrays){var F=k.arrays[z];if(F.length){var B=c.getComponentMethod(z,\\\"drawOne\\\");if(B!==o.noop)for(var N=0;N<F.length;N++)B(t,F[N]);else{var j=c.getComponentMethod(z,\\\"draw\\\");if(j===o.noop)throw new Error(\\\"cannot draw components: \\\"+z);j(t)}}}D.push(h.previousPromises),S.style&&D.push(w.doTraceStyle),(S.colorbars||k.colorbars)&&D.push(w.doColorBars),k.legend&&D.push(w.doLegend),k.layoutstyle&&D.push(w.layoutStyles),k.axrange&&H(D),k.ticks&&D.push(w.doTicksRelayout),k.modebar&&D.push(w.doModeBar),k.camera&&D.push(w.doCamera),D.push(M)}D.push(h.rehover,h.redrag,h.reselect),(l=o.syncOrAsync(D,t))&&l.then||(l=Promise.resolve(t))}else l=e.newPlot(t,r,n,i);return l.then((function(){return t.emit(\\\"plotly_react\\\",{data:r,layout:n}),t}))},e.redraw=function(t){if(t=o.getGraphDiv(t),!o.isPlotDiv(t))throw new Error(\\\"This element is not a Plotly plot: \\\"+t);return _.cleanData(t.data),_.cleanLayout(t.layout),t.calcdata=void 0,e._doPlot(t).then((function(){return t.emit(\\\"plotly_redraw\\\"),t}))},e.relayout=U,e.restyle=z,e.setPlotConfig=function(t){return o.extendFlat(x,t)},e.update=X,e._guiRelayout=J(U),e._guiRestyle=J(z),e._guiUpdate=J(X),e._storeDirectGUIEdit=function(t,e,r){for(var n in r)B(n,s(t,n).get(),r[n],e)}},72075:function(t){\\\"use strict\\\";var e={staticPlot:{valType:\\\"boolean\\\",dflt:!1},typesetMath:{valType:\\\"boolean\\\",dflt:!0},plotlyServerURL:{valType:\\\"string\\\",dflt:\\\"\\\"},editable:{valType:\\\"boolean\\\",dflt:!1},edits:{annotationPosition:{valType:\\\"boolean\\\",dflt:!1},annotationTail:{valType:\\\"boolean\\\",dflt:!1},annotationText:{valType:\\\"boolean\\\",dflt:!1},axisTitleText:{valType:\\\"boolean\\\",dflt:!1},colorbarPosition:{valType:\\\"boolean\\\",dflt:!1},colorbarTitleText:{valType:\\\"boolean\\\",dflt:!1},legendPosition:{valType:\\\"boolean\\\",dflt:!1},legendText:{valType:\\\"boolean\\\",dflt:!1},shapePosition:{valType:\\\"boolean\\\",dflt:!1},titleText:{valType:\\\"boolean\\\",dflt:!1}},editSelection:{valType:\\\"boolean\\\",dflt:!0},autosizable:{valType:\\\"boolean\\\",dflt:!1},responsive:{valType:\\\"boolean\\\",dflt:!1},fillFrame:{valType:\\\"boolean\\\",dflt:!1},frameMargins:{valType:\\\"number\\\",dflt:0,min:0,max:.5},scrollZoom:{valType:\\\"flaglist\\\",flags:[\\\"cartesian\\\",\\\"gl3d\\\",\\\"geo\\\",\\\"mapbox\\\"],extras:[!0,!1],dflt:\\\"gl3d+geo+mapbox\\\"},doubleClick:{valType:\\\"enumerated\\\",values:[!1,\\\"reset\\\",\\\"autosize\\\",\\\"reset+autosize\\\"],dflt:\\\"reset+autosize\\\"},doubleClickDelay:{valType:\\\"number\\\",dflt:300,min:0},showAxisDragHandles:{valType:\\\"boolean\\\",dflt:!0},showAxisRangeEntryBoxes:{valType:\\\"boolean\\\",dflt:!0},showTips:{valType:\\\"boolean\\\",dflt:!0},showLink:{valType:\\\"boolean\\\",dflt:!1},linkText:{valType:\\\"string\\\",dflt:\\\"Edit chart\\\",noBlank:!0},sendData:{valType:\\\"boolean\\\",dflt:!0},showSources:{valType:\\\"any\\\",dflt:!1},displayModeBar:{valType:\\\"enumerated\\\",values:[\\\"hover\\\",!0,!1],dflt:\\\"hover\\\"},showSendToCloud:{valType:\\\"boolean\\\",dflt:!1},showEditInChartStudio:{valType:\\\"boolean\\\",dflt:!1},modeBarButtonsToRemove:{valType:\\\"any\\\",dflt:[]},modeBarButtonsToAdd:{valType:\\\"any\\\",dflt:[]},modeBarButtons:{valType:\\\"any\\\",dflt:!1},toImageButtonOptions:{valType:\\\"any\\\",dflt:{}},displaylogo:{valType:\\\"boolean\\\",dflt:!0},watermark:{valType:\\\"boolean\\\",dflt:!1},plotGlPixelRatio:{valType:\\\"number\\\",dflt:2,min:1,max:4},setBackground:{valType:\\\"any\\\",dflt:\\\"transparent\\\"},topojsonURL:{valType:\\\"string\\\",noBlank:!0,dflt:\\\"https://cdn.plot.ly/\\\"},mapboxAccessToken:{valType:\\\"string\\\",dflt:null},logging:{valType:\\\"integer\\\",min:0,max:2,dflt:1},notifyOnLogging:{valType:\\\"integer\\\",min:0,max:2,dflt:0},queueLength:{valType:\\\"integer\\\",min:0,dflt:0},globalTransforms:{valType:\\\"any\\\",dflt:[]},locale:{valType:\\\"string\\\",dflt:\\\"en-US\\\"},locales:{valType:\\\"any\\\",dflt:{}}},r={};!function t(e,r){for(var n in e){var i=e[n];i.valType?r[n]=i.dflt:(r[n]||(r[n]={}),t(i,r[n]))}}(e,r),t.exports={configAttributes:e,dfltConfig:r}},86281:function(t,e,r){\\\"use strict\\\";var n=r(73972),i=r(71828),a=r(9012),o=r(10820),s=r(31391),l=r(85594),u=r(72075).configAttributes,c=r(30962),f=i.extendDeepAll,h=i.isPlainObject,p=i.isArrayOrTypedArray,d=i.nestedProperty,v=i.valObjectMeta,g=\\\"_isSubplotObj\\\",y=\\\"_isLinkedToArray\\\",m=\\\"_deprecated\\\",x=[g,y,\\\"_arrayAttrRegexps\\\",m];function b(t,e,r){if(!t)return!1;if(t._isLinkedToArray)if(_(e[r]))r++;else if(r<e.length)return!1;for(;r<e.length;r++){var n=t[e[r]];if(!h(n))break;if(t=n,r===e.length-1)break;if(t._isLinkedToArray){if(!_(e[++r]))return!1}else if(\\\"info_array\\\"===t.valType){var i=e[++r];if(!_(i))return!1;var a=t.items;if(Array.isArray(a)){if(i>=a.length)return!1;if(2===t.dimensions){if(r++,e.length===r)return t;var o=e[r];if(!_(o))return!1;t=a[i][o]}else t=a[i]}else t=a}}return t}function _(t){return t===Math.round(t)&&t>=0}function w(){var t,e,r={};for(t in f(r,o),n.subplotsRegistry)if((e=n.subplotsRegistry[t]).layoutAttributes)if(Array.isArray(e.attr))for(var i=0;i<e.attr.length;i++)k(r,e,e.attr[i]);else k(r,e,\\\"subplot\\\"===e.attr?e.name:e.attr);for(t in n.componentsRegistry){var a=(e=n.componentsRegistry[t]).schema;if(a&&(a.subplots||a.layout)){var s=a.subplots;if(s&&s.xaxis&&!s.yaxis)for(var l in s.xaxis)delete r.yaxis[l];delete r.xaxis.shift,delete r.xaxis.autoshift}else\\\"colorscale\\\"===e.name?f(r,e.layoutAttributes):e.layoutAttributes&&A(r,e.layoutAttributes,e.name)}return{layoutAttributes:T(r)}}function T(t){return function(t){e.crawl(t,(function(t,r,n){e.isValObject(t)?!0!==t.arrayOk&&\\\"data_array\\\"!==t.valType||(n[r+\\\"src\\\"]={valType:\\\"string\\\",editType:\\\"none\\\"}):h(t)&&(t.role=\\\"object\\\")}))}(t),function(t){e.crawl(t,(function(t,e,r){if(t){var n=t[y];n&&(delete t[y],r[e]={items:{}},r[e].items[n]=t,r[e].role=\\\"object\\\")}}))}(t),function(t){!function t(e){for(var r in e)if(h(e[r]))t(e[r]);else if(Array.isArray(e[r]))for(var n=0;n<e[r].length;n++)t(e[r][n]);else e[r]instanceof RegExp&&(e[r]=e[r].toString())}(t)}(t),t}function k(t,e,r){var n=d(t,r),i=f({},e.layoutAttributes);i[g]=!0,n.set(i)}function A(t,e,r){var n=d(t,r);n.set(f(n.get()||{},e))}e.IS_SUBPLOT_OBJ=g,e.IS_LINKED_TO_ARRAY=y,e.DEPRECATED=m,e.UNDERSCORE_ATTRS=x,e.get=function(){var t={};n.allTypes.forEach((function(r){t[r]=function(t){var r,i;i=(r=n.modules[t]._module).basePlotModule;var o={type:null},s=f({},a),l=f({},r.attributes);e.crawl(l,(function(t,e,r,n,i){d(s,i).set(void 0),void 0===t&&d(l,i).set(void 0)})),f(o,s),n.traceIs(t,\\\"noOpacity\\\")&&delete o.opacity,n.traceIs(t,\\\"showLegend\\\")||(delete o.showlegend,delete o.legendgroup),n.traceIs(t,\\\"noHover\\\")&&(delete o.hoverinfo,delete o.hoverlabel),r.selectPoints||delete o.selectedpoints,f(o,l),i.attributes&&f(o,i.attributes),o.type=t;var u={meta:r.meta||{},categories:r.categories||{},animatable:Boolean(r.animatable),type:t,attributes:T(o)};if(r.layoutAttributes){var c={};f(c,r.layoutAttributes),u.layoutAttributes=T(c)}return r.animatable||e.crawl(u,(function(t){e.isValObject(t)&&\\\"anim\\\"in t&&delete t.anim})),u}(r)}));var r,i={};return Object.keys(n.transformsRegistry).forEach((function(t){i[t]=function(t){var e=n.transformsRegistry[t],r=f({},e.attributes);return Object.keys(n.componentsRegistry).forEach((function(e){var i=n.componentsRegistry[e];i.schema&&i.schema.transforms&&i.schema.transforms[t]&&Object.keys(i.schema.transforms[t]).forEach((function(e){A(r,i.schema.transforms[t][e],e)}))})),{attributes:T(r)}}(t)})),{defs:{valObjects:v,metaKeys:x.concat([\\\"description\\\",\\\"role\\\",\\\"editType\\\",\\\"impliedEdits\\\"]),editType:{traces:c.traces,layout:c.layout},impliedEdits:{}},traces:t,layout:w(),transforms:i,frames:(r={frames:f({},s)},T(r),r.frames),animation:T(l),config:T(u)}},e.crawl=function(t,r,n,i){var a=n||0;i=i||\\\"\\\",Object.keys(t).forEach((function(n){var o=t[n];if(-1===x.indexOf(n)){var s=(i?i+\\\".\\\":\\\"\\\")+n;r(o,n,t,a,s),e.isValObject(o)||h(o)&&\\\"impliedEdits\\\"!==n&&e.crawl(o,r,a+1,s)}}))},e.isValObject=function(t){return t&&void 0!==t.valType},e.findArrayAttributes=function(t){var r,n,i=[],o=[],s=[];function l(t,e,n,i){o=o.slice(0,i).concat([e]),s=s.slice(0,i).concat([t&&t._isLinkedToArray]),t&&(\\\"data_array\\\"===t.valType||!0===t.arrayOk)&&(\\\"colorbar\\\"!==o[i-1]||\\\"ticktext\\\"!==e&&\\\"tickvals\\\"!==e)&&u(r,0,\\\"\\\")}function u(t,e,r){var a=t[o[e]],l=r+o[e];if(e===o.length-1)p(a)&&i.push(n+l);else if(s[e]){if(Array.isArray(a))for(var c=0;c<a.length;c++)h(a[c])&&u(a[c],e+1,l+\\\"[\\\"+c+\\\"].\\\")}else h(a)&&u(a,e+1,l+\\\".\\\")}r=t,n=\\\"\\\",e.crawl(a,l),t._module&&t._module.attributes&&e.crawl(t._module.attributes,l);var c=t.transforms;if(c)for(var f=0;f<c.length;f++){var d=c[f],v=d._module;v&&(n=\\\"transforms[\\\"+f+\\\"].\\\",r=d,e.crawl(v.attributes,l))}return i},e.getTraceValObject=function(t,e){var r,i,o=e[0],s=1;if(\\\"transforms\\\"===o){if(1===e.length)return a.transforms;var l=t.transforms;if(!Array.isArray(l)||!l.length)return!1;var u=e[1];if(!_(u)||u>=l.length)return!1;i=(r=(n.transformsRegistry[l[u].type]||{}).attributes)&&r[e[2]],s=3}else{var c=t._module;if(c||(c=(n.modules[t.type||a.type.dflt]||{})._module),!c)return!1;if(!(i=(r=c.attributes)&&r[o])){var f=c.basePlotModule;f&&f.attributes&&(i=f.attributes[o])}i||(i=a[o])}return b(i,e,s)},e.getLayoutValObject=function(t,e){var r=function(t,e){var r,i,a,s,l=t._basePlotModules;if(l){var u;for(r=0;r<l.length;r++){if((a=l[r]).attrRegex&&a.attrRegex.test(e)){if(a.layoutAttrOverrides)return a.layoutAttrOverrides;!u&&a.layoutAttributes&&(u=a.layoutAttributes)}var c=a.baseLayoutAttrOverrides;if(c&&e in c)return c[e]}if(u)return u}var f=t._modules;if(f)for(r=0;r<f.length;r++)if((s=f[r].layoutAttributes)&&e in s)return s[e];for(i in n.componentsRegistry){if(\\\"colorscale\\\"===(a=n.componentsRegistry[i]).name&&0===e.indexOf(\\\"coloraxis\\\"))return a.layoutAttributes[e];if(!a.schema&&e===a.name)return a.layoutAttributes}return e in o&&o[e]}(t,e[0]);return b(r,e,1)}},44467:function(t,e,r){\\\"use strict\\\";var n=r(71828),i=r(9012),a=\\\"templateitemname\\\",o={name:{valType:\\\"string\\\",editType:\\\"none\\\"}};function s(t){return t&&\\\"string\\\"==typeof t}function l(t){var e=t.length-1;return\\\"s\\\"!==t.charAt(e)&&n.warn(\\\"bad argument to arrayDefaultKey: \\\"+t),t.substr(0,t.length-1)+\\\"defaults\\\"}o[a]={valType:\\\"string\\\",editType:\\\"calc\\\"},e.templatedArray=function(t,e){return e._isLinkedToArray=t,e.name=o.name,e[a]=o[a],e},e.traceTemplater=function(t){var e,r,a={};for(e in t)r=t[e],Array.isArray(r)&&r.length&&(a[e]=0);return{newTrace:function(o){var s={type:e=n.coerce(o,{},i,\\\"type\\\"),_template:null};if(e in a){r=t[e];var l=a[e]%r.length;a[e]++,s._template=r[l]}return s}}},e.newContainer=function(t,e,r){var i=t._template,a=i&&(i[e]||r&&i[r]);return n.isPlainObject(a)||(a=null),t[e]={_template:a}},e.arrayTemplater=function(t,e,r){var n=t._template,i=n&&n[l(e)],o=n&&n[e];Array.isArray(o)&&o.length||(o=[]);var u={};return{newItem:function(t){var e={name:t.name,_input:t},n=e[a]=t[a];if(!s(n))return e._template=i,e;for(var l=0;l<o.length;l++){var c=o[l];if(c.name===n)return u[n]=1,e._template=c,e}return e[r]=t[r]||!1,e._template=!1,e},defaultItems:function(){for(var t=[],e=0;e<o.length;e++){var r=o[e],n=r.name;if(s(n)&&!u[n]){var i={_template:r,name:n,_input:{_templateitemname:n}};i[a]=r[a],t.push(i),u[n]=1}}return t}}},e.arrayDefaultKey=l,e.arrayEditor=function(t,e,r){var i=(n.nestedProperty(t,e).get()||[]).length,o=r._index,s=o>=i&&(r._input||{})._templateitemname;s&&(o=i);var l,u=e+\\\"[\\\"+o+\\\"]\\\";function c(){l={},s&&(l[u]={},l[u][a]=s)}function f(t,e){s?n.nestedProperty(l[u],t).set(e):l[u+\\\".\\\"+t]=e}function h(){var t=l;return c(),t}return c(),{modifyBase:function(t,e){l[t]=e},modifyItem:f,getUpdateObj:h,applyUpdate:function(e,r){e&&f(e,r);var i=h();for(var a in i)n.nestedProperty(t,a).set(i[a])}}}},61549:function(t,e,r){\\\"use strict\\\";var n=r(39898),i=r(73972),a=r(74875),o=r(71828),s=r(63893),l=r(33306),u=r(7901),c=r(91424),f=r(92998),h=r(64168),p=r(89298),d=r(18783),v=r(99082),g=v.enforce,y=v.clean,m=r(71739).doAutoRange,x=\\\"start\\\";function b(t,e,r){for(var n=0;n<r.length;n++){var i=r[n][0],a=r[n][1];if(!(i[0]>=t[1]||i[1]<=t[0])&&a[0]<e[1]&&a[1]>e[0])return!0}return!1}function _(t){var r,i,s,l,f,v,g=t._fullLayout,y=g._size,m=y.p,x=p.list(t,\\\"\\\",!0);if(g._paperdiv.style({width:t._context.responsive&&g.autosize&&!t._context._hasZeroWidth&&!t.layout.width?\\\"100%\\\":g.width+\\\"px\\\",height:t._context.responsive&&g.autosize&&!t._context._hasZeroHeight&&!t.layout.height?\\\"100%\\\":g.height+\\\"px\\\"}).selectAll(\\\".main-svg\\\").call(c.setSize,g.width,g.height),t._context.setBackground(t,g.paper_bgcolor),e.drawMainTitle(t),h.manage(t),!g._has(\\\"cartesian\\\"))return a.previousPromises(t);function _(t,e,r){var n=t._lw/2;return\\\"x\\\"===t._id.charAt(0)?e?\\\"top\\\"===r?e._offset-m-n:e._offset+e._length+m+n:y.t+y.h*(1-(t.position||0))+n%1:e?\\\"right\\\"===r?e._offset+e._length+m+n:e._offset-m-n:y.l+y.w*(t.position||0)+n%1}for(r=0;r<x.length;r++){var T=(l=x[r])._anchorAxis;l._linepositions={},l._lw=c.crispRound(t,l.linewidth,1),l._mainLinePosition=_(l,T,l.side),l._mainMirrorPosition=l.mirror&&T?_(l,T,d.OPPOSITE_SIDE[l.side]):null}var A=[],M=[],S=[],E=1===u.opacity(g.paper_bgcolor)&&1===u.opacity(g.plot_bgcolor)&&g.paper_bgcolor===g.plot_bgcolor;for(i in g._plots)if((s=g._plots[i]).mainplot)s.bg&&s.bg.remove(),s.bg=void 0;else{var L=s.xaxis.domain,C=s.yaxis.domain,P=s.plotgroup;if(b(L,C,S)){var O=P.node(),I=s.bg=o.ensureSingle(P,\\\"rect\\\",\\\"bg\\\");O.insertBefore(I.node(),O.childNodes[0]),M.push(i)}else P.select(\\\"rect.bg\\\").remove(),S.push([L,C]),E||(A.push(i),M.push(i))}var D,z,R,F,B,N,j,U,V,H,q,G,Z,Y=g._bgLayer.selectAll(\\\".bg\\\").data(A);for(Y.enter().append(\\\"rect\\\").classed(\\\"bg\\\",!0),Y.exit().remove(),Y.each((function(t){g._plots[t].bg=n.select(this)})),r=0;r<M.length;r++)s=g._plots[M[r]],f=s.xaxis,v=s.yaxis,s.bg&&void 0!==f._offset&&void 0!==v._offset&&s.bg.call(c.setRect,f._offset-m,v._offset-m,f._length+2*m,v._length+2*m).call(u.fill,g.plot_bgcolor).style(\\\"stroke-width\\\",0);if(!g._hasOnlyLargeSploms)for(i in g._plots){s=g._plots[i],f=s.xaxis,v=s.yaxis;var W,X,J=s.clipId=\\\"clip\\\"+g._uid+i+\\\"plot\\\",K=o.ensureSingleById(g._clips,\\\"clipPath\\\",J,(function(t){t.classed(\\\"plotclip\\\",!0).append(\\\"rect\\\")}));s.clipRect=K.select(\\\"rect\\\").attr({width:f._length,height:v._length}),c.setTranslate(s.plot,f._offset,v._offset),s._hasClipOnAxisFalse?(W=null,X=J):(W=J,X=null),c.setClipUrl(s.plot,W,t),s.layerClipId=X}function $(t){return\\\"M\\\"+D+\\\",\\\"+t+\\\"H\\\"+z}function Q(t){return\\\"M\\\"+f._offset+\\\",\\\"+t+\\\"h\\\"+f._length}function tt(t){return\\\"M\\\"+t+\\\",\\\"+U+\\\"V\\\"+j}function et(t){return void 0!==v._shift&&(t+=v._shift),\\\"M\\\"+t+\\\",\\\"+v._offset+\\\"v\\\"+v._length}function rt(t,e,r){if(!t.showline||i!==t._mainSubplot)return\\\"\\\";if(!t._anchorAxis)return r(t._mainLinePosition);var n=e(t._mainLinePosition);return t.mirror&&(n+=e(t._mainMirrorPosition)),n}for(i in g._plots){s=g._plots[i],f=s.xaxis,v=s.yaxis;var nt=\\\"M0,0\\\";w(f,i)&&(B=k(f,\\\"left\\\",v,x),D=f._offset-(B?m+B:0),N=k(f,\\\"right\\\",v,x),z=f._offset+f._length+(N?m+N:0),R=_(f,v,\\\"bottom\\\"),F=_(f,v,\\\"top\\\"),!(Z=!f._anchorAxis||i!==f._mainSubplot)||\\\"allticks\\\"!==f.mirror&&\\\"all\\\"!==f.mirror||(f._linepositions[i]=[R,F]),nt=rt(f,$,Q),Z&&f.showline&&(\\\"all\\\"===f.mirror||\\\"allticks\\\"===f.mirror)&&(nt+=$(R)+$(F)),s.xlines.style(\\\"stroke-width\\\",f._lw+\\\"px\\\").call(u.stroke,f.showline?f.linecolor:\\\"rgba(0,0,0,0)\\\")),s.xlines.attr(\\\"d\\\",nt);var it=\\\"M0,0\\\";w(v,i)&&(q=k(v,\\\"bottom\\\",f,x),j=v._offset+v._length+(q?m:0),G=k(v,\\\"top\\\",f,x),U=v._offset-(G?m:0),V=_(v,f,\\\"left\\\"),H=_(v,f,\\\"right\\\"),!(Z=!v._anchorAxis||i!==v._mainSubplot)||\\\"allticks\\\"!==v.mirror&&\\\"all\\\"!==v.mirror||(v._linepositions[i]=[V,H]),it=rt(v,tt,et),Z&&v.showline&&(\\\"all\\\"===v.mirror||\\\"allticks\\\"===v.mirror)&&(it+=tt(V)+tt(H)),s.ylines.style(\\\"stroke-width\\\",v._lw+\\\"px\\\").call(u.stroke,v.showline?v.linecolor:\\\"rgba(0,0,0,0)\\\")),s.ylines.attr(\\\"d\\\",it)}return p.makeClipPaths(t),a.previousPromises(t)}function w(t,e){return(t.ticks||t.showline)&&(e===t._mainSubplot||\\\"all\\\"===t.mirror||\\\"allticks\\\"===t.mirror)}function T(t,e,r){if(!r.showline||!r._lw)return!1;if(\\\"all\\\"===r.mirror||\\\"allticks\\\"===r.mirror)return!0;var n=r._anchorAxis;if(!n)return!1;var i=d.FROM_BL[e];return r.side===e?n.domain[i]===t.domain[i]:r.mirror&&n.domain[1-i]===t.domain[1-i]}function k(t,e,r,n){if(T(t,e,r))return r._lw;for(var i=0;i<n.length;i++){var a=n[i];if(a._mainAxis===r._mainAxis&&T(t,e,a))return a._lw}return 0}e.layoutStyles=function(t){return o.syncOrAsync([a.doAutoMargin,_],t)},e.drawMainTitle=function(t){var e,r=t._fullLayout.title,i=t._fullLayout,l=function(t){var e=t.title,r=\\\"middle\\\";return o.isRightAnchor(e)?r=\\\"end\\\":o.isLeftAnchor(e)&&(r=x),r}(i),u=function(t){var e=t.title,r=\\\"0em\\\";return o.isTopAnchor(e)?r=d.CAP_SHIFT+\\\"em\\\":o.isMiddleAnchor(e)&&(r=d.MID_SHIFT+\\\"em\\\"),r}(i),h=function(t,e){var r=t.title,n=t._size,i=0;return\\\"0em\\\"!==e&&e?e===d.CAP_SHIFT+\\\"em\\\"&&(i=r.pad.t):i=-r.pad.b,\\\"auto\\\"===r.y?n.t/2:\\\"paper\\\"===r.yref?n.t+n.h-n.h*r.y+i:t.height-t.height*r.y+i}(i,u),p=function(t,e){var r=t.title,n=t._size,i=0;return e===x?i=r.pad.l:\\\"end\\\"===e&&(i=-r.pad.r),\\\"paper\\\"===r.xref?n.l+n.w*r.x+i:t.width*r.x+i}(i,l);if(f.draw(t,\\\"gtitle\\\",{propContainer:i,propName:\\\"title.text\\\",placeholder:i._dfltTitle.plot,attributes:{x:p,y:h,\\\"text-anchor\\\":l,dy:u}}),r.text&&r.automargin){var v=n.selectAll(\\\".gtitle\\\"),g=c.bBox(v.node()).height,y=function(t,e,r){var n=e.y,i=e.yanchor,a=n>.5?\\\"t\\\":\\\"b\\\",o=t._fullLayout.margin[a],s=0;return\\\"paper\\\"===e.yref?s=r+e.pad.t+e.pad.b:\\\"container\\\"===e.yref&&(s=function(t,e,r,n,i){var a=0;return\\\"middle\\\"===r&&(a+=i/2),\\\"t\\\"===t?(\\\"top\\\"===r&&(a+=i),a+=n-e*n):(\\\"bottom\\\"===r&&(a+=i),a+=e*n),a}(a,n,i,t._fullLayout.height,r)+e.pad.t+e.pad.b),s>o?s:0}(t,r,g);y>0&&(function(t,e,r,n){var i=\\\"title.automargin\\\",s=t._fullLayout.title,l=s.y>.5?\\\"t\\\":\\\"b\\\",u={x:s.x,y:s.y,t:0,b:0},c={};\\\"paper\\\"===s.yref&&function(t,e,r,n,i){var a=\\\"paper\\\"===e.yref?t._fullLayout._size.h:t._fullLayout.height,s=o.isTopAnchor(e)?n:n-i,l=\\\"b\\\"===r?a-s:s;return!(o.isTopAnchor(e)&&\\\"t\\\"===r||o.isBottomAnchor(e)&&\\\"b\\\"===r)&&l<i}(t,s,l,e,n)?u[l]=r:\\\"container\\\"===s.yref&&(c[l]=r,t._fullLayout._reservedMargin[i]=c),a.allowAutoMargin(t,i),a.autoMargin(t,i,u)}(t,h,y,g),v.attr({x:p,y:h,\\\"text-anchor\\\":l,dy:(e=r.yanchor,\\\"top\\\"===e?d.CAP_SHIFT+.3+\\\"em\\\":\\\"bottom\\\"===e?\\\"-0.3em\\\":d.MID_SHIFT+\\\"em\\\")}).call(s.positionText,p,h))}},e.doTraceStyle=function(t){var r,n=t.calcdata,o=[];for(r=0;r<n.length;r++){var s=n[r],u=s[0]||{},c=u.trace||{},f=c._module||{},h=f.arraysToCalcdata;h&&h(s,c);var p=f.editStyle;p&&o.push({fn:p,cd0:u})}if(o.length){for(r=0;r<o.length;r++){var d=o[r];d.fn(t,d.cd0)}l(t),e.redrawReglTraces(t)}return a.style(t),i.getComponentMethod(\\\"legend\\\",\\\"draw\\\")(t),a.previousPromises(t)},e.doColorBars=function(t){return i.getComponentMethod(\\\"colorbar\\\",\\\"draw\\\")(t),a.previousPromises(t)},e.layoutReplot=function(t){var e=t.layout;return t.layout=void 0,i.call(\\\"_doPlot\\\",t,\\\"\\\",e)},e.doLegend=function(t){return i.getComponentMethod(\\\"legend\\\",\\\"draw\\\")(t),a.previousPromises(t)},e.doTicksRelayout=function(t){return p.draw(t,\\\"redraw\\\"),t._fullLayout._hasOnlyLargeSploms&&(i.subplotsRegistry.splom.updateGrid(t),l(t),e.redrawReglTraces(t)),e.drawMainTitle(t),a.previousPromises(t)},e.doModeBar=function(t){var e=t._fullLayout;h.manage(t);for(var r=0;r<e._basePlotModules.length;r++){var n=e._basePlotModules[r].updateFx;n&&n(t)}return a.previousPromises(t)},e.doCamera=function(t){for(var e=t._fullLayout,r=e._subplots.gl3d,n=0;n<r.length;n++){var i=e[r[n]];i._scene.setViewport(i)}},e.drawData=function(t){var r=t._fullLayout;l(t);for(var n=r._basePlotModules,o=0;o<n.length;o++)n[o].plot(t);return e.redrawReglTraces(t),a.style(t),i.getComponentMethod(\\\"selections\\\",\\\"draw\\\")(t),i.getComponentMethod(\\\"shapes\\\",\\\"draw\\\")(t),i.getComponentMethod(\\\"annotations\\\",\\\"draw\\\")(t),i.getComponentMethod(\\\"images\\\",\\\"draw\\\")(t),r._replotting=!1,a.previousPromises(t)},e.redrawReglTraces=function(t){var e=t._fullLayout;if(e._has(\\\"regl\\\")){var r,n,i=t._fullData,a=[],s=[];for(e._hasOnlyLargeSploms&&e._splomGrid.draw(),r=0;r<i.length;r++){var l=i[r];!0===l.visible&&0!==l._length&&(\\\"splom\\\"===l.type?e._splomScenes[l.uid].draw():\\\"scattergl\\\"===l.type?o.pushUnique(a,l.xaxis+l.yaxis):\\\"scatterpolargl\\\"===l.type&&o.pushUnique(s,l.subplot))}for(r=0;r<a.length;r++)(n=e._plots[a[r]])._scene&&n._scene.draw();for(r=0;r<s.length;r++)(n=e[s[r]]._subplot)._scene&&n._scene.draw()}},e.doAutoRangeAndConstraints=function(t){for(var e,r=p.list(t,\\\"\\\",!0),n={},i=0;i<r.length;i++)if(!n[(e=r[i])._id]){n[e._id]=1,y(t,e),m(t,e);var a=e._matchGroup;if(a)for(var o in a){var s=p.getFromId(t,o);m(t,s,e.range),n[o]=1}}g(t)},e.finalDraw=function(t){i.getComponentMethod(\\\"rangeslider\\\",\\\"draw\\\")(t),i.getComponentMethod(\\\"rangeselector\\\",\\\"draw\\\")(t)},e.drawMarginPushers=function(t){i.getComponentMethod(\\\"legend\\\",\\\"draw\\\")(t),i.getComponentMethod(\\\"rangeselector\\\",\\\"draw\\\")(t),i.getComponentMethod(\\\"sliders\\\",\\\"draw\\\")(t),i.getComponentMethod(\\\"updatemenus\\\",\\\"draw\\\")(t),i.getComponentMethod(\\\"colorbar\\\",\\\"draw\\\")(t)}},96318:function(t,e,r){\\\"use strict\\\";var n=r(71828),i=n.isPlainObject,a=r(86281),o=r(74875),s=r(9012),l=r(44467),u=r(72075).dfltConfig;function c(t,e){t=n.extendDeep({},t);var r,a,o=Object.keys(t).sort();function s(e,r,n){if(i(r)&&i(e))c(e,r);else if(Array.isArray(r)&&Array.isArray(e)){var o=l.arrayTemplater({_template:t},n);for(a=0;a<r.length;a++){var s=r[a],u=o.newItem(s)._template;u&&c(u,s)}var f=o.defaultItems();for(a=0;a<f.length;a++)r.push(f[a]._template);for(a=0;a<r.length;a++)delete r[a].templateitemname}}for(r=0;r<o.length;r++){var u=o[r],h=t[u];if(u in e?s(h,e[u],u):e[u]=h,f(u)===u)for(var p in e){var d=f(p);p===d||d!==u||p in t||s(h,e[p],u)}}}function f(t){return t.replace(/[0-9]+$/,\\\"\\\")}function h(t,e,r,a,o){var s=o&&r(o);for(var u in t){var c=t[u],p=v(t,u,a),d=v(t,u,o),g=r(d);if(!g){var y=f(u);y!==u&&(g=r(d=v(t,y,o)))}if(!(s&&s===g||!g||g._noTemplating||\\\"data_array\\\"===g.valType||g.arrayOk&&Array.isArray(c)))if(!g.valType&&i(c))h(c,e,r,p,d);else if(g._isLinkedToArray&&Array.isArray(c))for(var m=!1,x=0,b={},_=0;_<c.length;_++){var w=c[_];if(i(w)){var T=w.name;if(T)b[T]||(h(w,e,r,v(c,x,p),v(c,x,d)),x++,b[T]=1);else if(!m){var k=v(t,l.arrayDefaultKey(u),a),A=v(c,x,p);h(w,e,r,A,v(c,x,d));var M=n.nestedProperty(e,A);n.nestedProperty(e,k).set(M.get()),M.set(null),m=!0}}}else n.nestedProperty(e,p).set(c)}}function p(t,e){return a.getLayoutValObject(t,n.nestedProperty({},e).parts)}function d(t,e){return a.getTraceValObject(t,n.nestedProperty({},e).parts)}function v(t,e,r){return r?Array.isArray(t)?r+\\\"[\\\"+e+\\\"]\\\":r+\\\".\\\"+e:e}function g(t){for(var e=0;e<t.length;e++)if(i(t[e]))return!0}function y(t){var e;switch(t.code){case\\\"data\\\":e=\\\"The template has no key data.\\\";break;case\\\"layout\\\":e=\\\"The template has no key layout.\\\";break;case\\\"missing\\\":e=t.path?\\\"There are no templates for item \\\"+t.path+\\\" with name \\\"+t.templateitemname:\\\"There are no templates for trace \\\"+t.index+\\\", of type \\\"+t.traceType+\\\".\\\";break;case\\\"unused\\\":e=t.path?\\\"The template item at \\\"+t.path+\\\" was not used in constructing the plot.\\\":t.dataCount?\\\"Some of the templates of type \\\"+t.traceType+\\\" were not used. The template has \\\"+t.templateCount+\\\" traces, the data only has \\\"+t.dataCount+\\\" of this type.\\\":\\\"The template has \\\"+t.templateCount+\\\" traces of type \\\"+t.traceType+\\\" but there are none in the data.\\\";break;case\\\"reused\\\":e=\\\"Some of the templates of type \\\"+t.traceType+\\\" were used more than once. The template has \\\"+t.templateCount+\\\" traces, the data has \\\"+t.dataCount+\\\" of this type.\\\"}return t.msg=e,t}e.makeTemplate=function(t){t=n.isPlainObject(t)?t:n.getGraphDiv(t),t=n.extendDeep({_context:u},{data:t.data,layout:t.layout}),o.supplyDefaults(t);var e=t.data||[],r=t.layout||{};r._basePlotModules=t._fullLayout._basePlotModules,r._modules=t._fullLayout._modules;var a={data:{},layout:{}};e.forEach((function(t){var e={};h(t,e,d.bind(null,t));var r=n.coerce(t,{},s,\\\"type\\\"),i=a.data[r];i||(i=a.data[r]=[]),i.push(e)})),h(r,a.layout,p.bind(null,r)),delete a.layout.template;var l=r.template;if(i(l)){var f,v,g,y,m,x,b=l.layout;i(b)&&c(b,a.layout);var _=l.data;if(i(_)){for(v in a.data)if(g=_[v],Array.isArray(g)){for(x=(m=a.data[v]).length,y=g.length,f=0;f<x;f++)c(g[f%y],m[f]);for(f=x;f<y;f++)m.push(n.extendDeep({},g[f]))}for(v in _)v in a.data||(a.data[v]=n.extendDeep([],_[v]))}}return a},e.validateTemplate=function(t,e){var r=n.extendDeep({},{_context:u,data:t.data,layout:t.layout}),a=r.layout||{};i(e)||(e=a.template||{});var s=e.layout,l=e.data,c=[];r.layout=a,r.layout.template=e,o.supplyDefaults(r);var h=r._fullLayout,p=r._fullData,d={};if(i(s)?(function t(e,r){for(var n in e)if(\\\"_\\\"!==n.charAt(0)&&i(e[n])){var a,o=f(n),s=[];for(a=0;a<r.length;a++)s.push(v(e,n,r[a])),o!==n&&s.push(v(e,o,r[a]));for(a=0;a<s.length;a++)d[s[a]]=1;t(e[n],s)}}(h,[\\\"layout\\\"]),function t(e,r){for(var n in e)if(-1===n.indexOf(\\\"defaults\\\")&&i(e[n])){var a=v(e,n,r);d[a]?t(e[n],a):c.push({code:\\\"unused\\\",path:a})}}(s,\\\"layout\\\")):c.push({code:\\\"layout\\\"}),i(l)){for(var m,x={},b=0;b<p.length;b++){var _=p[b];x[m=_.type]=(x[m]||0)+1,_._fullInput._template||c.push({code:\\\"missing\\\",index:_._fullInput.index,traceType:m})}for(m in l){var w=l[m].length,T=x[m]||0;w>T?c.push({code:\\\"unused\\\",traceType:m,templateCount:w,dataCount:T}):T>w&&c.push({code:\\\"reused\\\",traceType:m,templateCount:w,dataCount:T})}}else c.push({code:\\\"data\\\"});if(function t(e,r){for(var n in e)if(\\\"_\\\"!==n.charAt(0)){var a=e[n],o=v(e,n,r);i(a)?(Array.isArray(e)&&!1===a._template&&a.templateitemname&&c.push({code:\\\"missing\\\",path:o,templateitemname:a.templateitemname}),t(a,o)):Array.isArray(a)&&g(a)&&t(a,o)}}({data:p,layout:h},\\\"\\\"),c.length)return c.map(y)}},403:function(t,e,r){\\\"use strict\\\";var n=r(92770),i=r(72391),a=r(74875),o=r(71828),s=r(25095),l=r(5900),u=r(70942),c=r(11506).version,f={format:{valType:\\\"enumerated\\\",values:[\\\"png\\\",\\\"jpeg\\\",\\\"webp\\\",\\\"svg\\\",\\\"full-json\\\"],dflt:\\\"png\\\"},width:{valType:\\\"number\\\",min:1},height:{valType:\\\"number\\\",min:1},scale:{valType:\\\"number\\\",min:0,dflt:1},setBackground:{valType:\\\"any\\\",dflt:!1},imageDataOnly:{valType:\\\"boolean\\\",dflt:!1}};t.exports=function(t,e){var r,h,p,d;function v(t){return!(t in e)||o.validate(e[t],f[t])}if(e=e||{},o.isPlainObject(t)?(r=t.data||[],h=t.layout||{},p=t.config||{},d={}):(t=o.getGraphDiv(t),r=o.extendDeep([],t.data),h=o.extendDeep({},t.layout),p=t._context,d=t._fullLayout||{}),!v(\\\"width\\\")&&null!==e.width||!v(\\\"height\\\")&&null!==e.height)throw new Error(\\\"Height and width should be pixel values.\\\");if(!v(\\\"format\\\"))throw new Error(\\\"Export format is not \\\"+o.join2(f.format.values,\\\", \\\",\\\" or \\\")+\\\".\\\");var g={};function y(t,r){return o.coerce(e,g,f,t,r)}var m=y(\\\"format\\\"),x=y(\\\"width\\\"),b=y(\\\"height\\\"),_=y(\\\"scale\\\"),w=y(\\\"setBackground\\\"),T=y(\\\"imageDataOnly\\\"),k=document.createElement(\\\"div\\\");k.style.position=\\\"absolute\\\",k.style.left=\\\"-5000px\\\",document.body.appendChild(k);var A=o.extendFlat({},h);x?A.width=x:null===e.width&&n(d.width)&&(A.width=d.width),b?A.height=b:null===e.height&&n(d.height)&&(A.height=d.height);var M=o.extendFlat({},p,{_exportedPlot:!0,staticPlot:!0,setBackground:w}),S=s.getRedrawFunc(k);function E(){return new Promise((function(t){setTimeout(t,s.getDelay(k._fullLayout))}))}function L(){return new Promise((function(t,e){var r=l(k,m,_),n=k._fullLayout.width,f=k._fullLayout.height;function h(){i.purge(k),document.body.removeChild(k)}if(\\\"full-json\\\"===m){var p=a.graphJson(k,!1,\\\"keepdata\\\",\\\"object\\\",!0,!0);return p.version=c,p=JSON.stringify(p),h(),t(T?p:s.encodeJSON(p))}if(h(),\\\"svg\\\"===m)return t(T?r:s.encodeSVG(r));var d=document.createElement(\\\"canvas\\\");d.id=o.randstr(),u({format:m,width:n,height:f,scale:_,canvas:d,svg:r,promise:!0}).then(t).catch(e)}))}return new Promise((function(t,e){i.newPlot(k,r,A,M).then(S).then(E).then(L).then((function(e){t(function(t){return T?t.replace(s.IMAGE_URL_PREFIX,\\\"\\\"):t}(e))})).catch((function(t){e(t)}))}))}},84936:function(t,e,r){\\\"use strict\\\";var n=r(71828),i=r(74875),a=r(86281),o=r(72075).dfltConfig,s=n.isPlainObject,l=Array.isArray,u=n.isArrayOrTypedArray;function c(t,e,r,i,a,o){o=o||[];for(var f=Object.keys(t),h=0;h<f.length;h++){var g=f[h];if(\\\"transforms\\\"!==g){var y=o.slice();y.push(g);var m=t[g],x=e[g],b=v(r,g),_=(b||{}).valType,w=\\\"info_array\\\"===_,T=\\\"colorscale\\\"===_,k=(b||{}).items;if(d(r,g))if(s(m)&&s(x)&&\\\"any\\\"!==_)c(m,x,b,i,a,y);else if(w&&l(m)){m.length>x.length&&i.push(p(\\\"unused\\\",a,y.concat(x.length)));var A,M,S,E,L,C=x.length,P=Array.isArray(k);if(P&&(C=Math.min(C,k.length)),2===b.dimensions)for(M=0;M<C;M++)if(l(m[M])){m[M].length>x[M].length&&i.push(p(\\\"unused\\\",a,y.concat(M,x[M].length)));var O=x[M].length;for(A=0;A<(P?Math.min(O,k[M].length):O);A++)S=P?k[M][A]:k,E=m[M][A],L=x[M][A],n.validate(E,S)?L!==E&&L!==+E&&i.push(p(\\\"dynamic\\\",a,y.concat(M,A),E,L)):i.push(p(\\\"value\\\",a,y.concat(M,A),E))}else i.push(p(\\\"array\\\",a,y.concat(M),m[M]));else for(M=0;M<C;M++)S=P?k[M]:k,E=m[M],L=x[M],n.validate(E,S)?L!==E&&L!==+E&&i.push(p(\\\"dynamic\\\",a,y.concat(M),E,L)):i.push(p(\\\"value\\\",a,y.concat(M),E))}else if(b.items&&!w&&l(m)){var I,D,z=k[Object.keys(k)[0]],R=[];for(I=0;I<x.length;I++){var F=x[I]._index||I;if((D=y.slice()).push(F),s(m[F])&&s(x[I])){R.push(F);var B=m[F],N=x[I];s(B)&&!1!==B.visible&&!1===N.visible?i.push(p(\\\"invisible\\\",a,D)):c(B,N,z,i,a,D)}}for(I=0;I<m.length;I++)(D=y.slice()).push(I),s(m[I])?-1===R.indexOf(I)&&i.push(p(\\\"unused\\\",a,D)):i.push(p(\\\"object\\\",a,D,m[I]))}else!s(m)&&s(x)?i.push(p(\\\"object\\\",a,y,m)):u(m)||!u(x)||w||T?g in e?n.validate(m,b)?\\\"enumerated\\\"===b.valType&&(b.coerceNumber&&m!==+x||m!==x)&&i.push(p(\\\"dynamic\\\",a,y,m,x)):i.push(p(\\\"value\\\",a,y,m)):i.push(p(\\\"unused\\\",a,y,m)):i.push(p(\\\"array\\\",a,y,m));else i.push(p(\\\"schema\\\",a,y))}}return i}t.exports=function(t,e){void 0===t&&(t=[]),void 0===e&&(e={});var r,u,f=a.get(),h=[],d={_context:n.extendFlat({},o)};l(t)?(d.data=n.extendDeep([],t),r=t):(d.data=[],r=[],h.push(p(\\\"array\\\",\\\"data\\\"))),s(e)?(d.layout=n.extendDeep({},e),u=e):(d.layout={},u={},arguments.length>1&&h.push(p(\\\"object\\\",\\\"layout\\\"))),i.supplyDefaults(d);for(var v=d._fullData,g=r.length,y=0;y<g;y++){var m=r[y],x=[\\\"data\\\",y];if(s(m)){var b=v[y],_=b.type,w=f.traces[_].attributes;w.type={valType:\\\"enumerated\\\",values:[_]},!1===b.visible&&!1!==m.visible&&h.push(p(\\\"invisible\\\",x)),c(m,b,w,h,x);var T=m.transforms,k=b.transforms;if(T){l(T)||h.push(p(\\\"array\\\",x,[\\\"transforms\\\"])),x.push(\\\"transforms\\\");for(var A=0;A<T.length;A++){var M=[\\\"transforms\\\",A],S=T[A].type;if(s(T[A])){var E=f.transforms[S]?f.transforms[S].attributes:{};E.type={valType:\\\"enumerated\\\",values:Object.keys(f.transforms)},c(T[A],k[A],E,h,x,M)}else h.push(p(\\\"object\\\",x,M))}}}else h.push(p(\\\"object\\\",x))}var L=d._fullLayout,C=function(t,e){for(var r=t.layout.layoutAttributes,i=0;i<e.length;i++){var a=e[i],o=t.traces[a.type],s=o.layoutAttributes;s&&(a.subplot?n.extendFlat(r[o.attributes.subplot.dflt],s):n.extendFlat(r,s))}return r}(f,v);return c(u,L,C,h,\\\"layout\\\"),0===h.length?void 0:h};var f={object:function(t,e){return(\\\"layout\\\"===t&&\\\"\\\"===e?\\\"The layout argument\\\":\\\"data\\\"===t[0]&&\\\"\\\"===e?\\\"Trace \\\"+t[1]+\\\" in the data argument\\\":h(t)+\\\"key \\\"+e)+\\\" must be linked to an object container\\\"},array:function(t,e){return(\\\"data\\\"===t?\\\"The data argument\\\":h(t)+\\\"key \\\"+e)+\\\" must be linked to an array container\\\"},schema:function(t,e){return h(t)+\\\"key \\\"+e+\\\" is not part of the schema\\\"},unused:function(t,e,r){var n=s(r)?\\\"container\\\":\\\"key\\\";return h(t)+n+\\\" \\\"+e+\\\" did not get coerced\\\"},dynamic:function(t,e,r,n){return[h(t)+\\\"key\\\",e,\\\"(set to '\\\"+r+\\\"')\\\",\\\"got reset to\\\",\\\"'\\\"+n+\\\"'\\\",\\\"during defaults.\\\"].join(\\\" \\\")},invisible:function(t,e){return(e?h(t)+\\\"item \\\"+e:\\\"Trace \\\"+t[1])+\\\" got defaulted to be not visible\\\"},value:function(t,e,r){return[h(t)+\\\"key \\\"+e,\\\"is set to an invalid value (\\\"+r+\\\")\\\"].join(\\\" \\\")}};function h(t){return l(t)?\\\"In data trace \\\"+t[1]+\\\", \\\":\\\"In \\\"+t+\\\", \\\"}function p(t,e,r,i,a){var o,s;r=r||\\\"\\\",l(e)?(o=e[0],s=e[1]):(o=e,s=null);var u=function(t){if(!l(t))return String(t);for(var e=\\\"\\\",r=0;r<t.length;r++){var n=t[r];\\\"number\\\"==typeof n?e=e.substr(0,e.length-1)+\\\"[\\\"+n+\\\"]\\\":e+=n,r<t.length-1&&(e+=\\\".\\\")}return e}(r),c=f[t](e,u,i,a);return n.log(c),{code:t,container:o,trace:s,path:r,astr:u,msg:c}}function d(t,e){var r=y(e),n=r.keyMinusId,i=r.id;return!!(n in t&&t[n]._isSubplotObj&&i)||e in t}function v(t,e){return e in t?t[e]:t[y(e).keyMinusId]}var g=n.counterRegex(\\\"([a-z]+)\\\");function y(t){var e=t.match(g);return{keyMinusId:e&&e[1],id:e&&e[2]}}},85594:function(t){\\\"use strict\\\";t.exports={mode:{valType:\\\"enumerated\\\",dflt:\\\"afterall\\\",values:[\\\"immediate\\\",\\\"next\\\",\\\"afterall\\\"]},direction:{valType:\\\"enumerated\\\",values:[\\\"forward\\\",\\\"reverse\\\"],dflt:\\\"forward\\\"},fromcurrent:{valType:\\\"boolean\\\",dflt:!1},frame:{duration:{valType:\\\"number\\\",min:0,dflt:500},redraw:{valType:\\\"boolean\\\",dflt:!0}},transition:{duration:{valType:\\\"number\\\",min:0,dflt:500,editType:\\\"none\\\"},easing:{valType:\\\"enumerated\\\",dflt:\\\"cubic-in-out\\\",values:[\\\"linear\\\",\\\"quad\\\",\\\"cubic\\\",\\\"sin\\\",\\\"exp\\\",\\\"circle\\\",\\\"elastic\\\",\\\"back\\\",\\\"bounce\\\",\\\"linear-in\\\",\\\"quad-in\\\",\\\"cubic-in\\\",\\\"sin-in\\\",\\\"exp-in\\\",\\\"circle-in\\\",\\\"elastic-in\\\",\\\"back-in\\\",\\\"bounce-in\\\",\\\"linear-out\\\",\\\"quad-out\\\",\\\"cubic-out\\\",\\\"sin-out\\\",\\\"exp-out\\\",\\\"circle-out\\\",\\\"elastic-out\\\",\\\"back-out\\\",\\\"bounce-out\\\",\\\"linear-in-out\\\",\\\"quad-in-out\\\",\\\"cubic-in-out\\\",\\\"sin-in-out\\\",\\\"exp-in-out\\\",\\\"circle-in-out\\\",\\\"elastic-in-out\\\",\\\"back-in-out\\\",\\\"bounce-in-out\\\"],editType:\\\"none\\\"},ordering:{valType:\\\"enumerated\\\",values:[\\\"layout first\\\",\\\"traces first\\\"],dflt:\\\"layout first\\\",editType:\\\"none\\\"}}}},85501:function(t,e,r){\\\"use strict\\\";var n=r(71828),i=r(44467);t.exports=function(t,e,r){var a,o,s=r.name,l=r.inclusionAttr||\\\"visible\\\",u=e[s],c=n.isArrayOrTypedArray(t[s])?t[s]:[],f=e[s]=[],h=i.arrayTemplater(e,s,l);for(a=0;a<c.length;a++){var p=c[a];n.isPlainObject(p)?o=h.newItem(p):(o=h.newItem({}))[l]=!1,o._index=a,!1!==o[l]&&r.handleItemDefaults(p,o,e,r),f.push(o)}var d=h.defaultItems();for(a=0;a<d.length;a++)(o=d[a])._index=f.length,r.handleItemDefaults({},o,e,r,{}),f.push(o);if(n.isArrayOrTypedArray(u)){var v=Math.min(u.length,f.length);for(a=0;a<v;a++)n.relinkPrivateKeys(f[a],u[a])}return f}},9012:function(t,e,r){\\\"use strict\\\";var n=r(41940),i=r(77914);t.exports={type:{valType:\\\"enumerated\\\",values:[],dflt:\\\"scatter\\\",editType:\\\"calc+clearAxisTypes\\\",_noTemplating:!0},visible:{valType:\\\"enumerated\\\",values:[!0,!1,\\\"legendonly\\\"],dflt:!0,editType:\\\"calc\\\"},showlegend:{valType:\\\"boolean\\\",dflt:!0,editType:\\\"style\\\"},legend:{valType:\\\"subplotid\\\",dflt:\\\"legend\\\",editType:\\\"style\\\"},legendgroup:{valType:\\\"string\\\",dflt:\\\"\\\",editType:\\\"style\\\"},legendgrouptitle:{text:{valType:\\\"string\\\",dflt:\\\"\\\",editType:\\\"style\\\"},font:n({editType:\\\"style\\\"}),editType:\\\"style\\\"},legendrank:{valType:\\\"number\\\",dflt:1e3,editType:\\\"style\\\"},legendwidth:{valType:\\\"number\\\",min:0,editType:\\\"style\\\"},opacity:{valType:\\\"number\\\",min:0,max:1,dflt:1,editType:\\\"style\\\"},name:{valType:\\\"string\\\",editType:\\\"style\\\"},uid:{valType:\\\"string\\\",editType:\\\"plot\\\",anim:!0},ids:{valType:\\\"data_array\\\",editType:\\\"calc\\\",anim:!0},customdata:{valType:\\\"data_array\\\",editType:\\\"calc\\\"},meta:{valType:\\\"any\\\",arrayOk:!0,editType:\\\"plot\\\"},selectedpoints:{valType:\\\"any\\\",editType:\\\"calc\\\"},hoverinfo:{valType:\\\"flaglist\\\",flags:[\\\"x\\\",\\\"y\\\",\\\"z\\\",\\\"text\\\",\\\"name\\\"],extras:[\\\"all\\\",\\\"none\\\",\\\"skip\\\"],arrayOk:!0,dflt:\\\"all\\\",editType:\\\"none\\\"},hoverlabel:i.hoverlabel,stream:{token:{valType:\\\"string\\\",noBlank:!0,strict:!0,editType:\\\"calc\\\"},maxpoints:{valType:\\\"number\\\",min:0,max:1e4,dflt:500,editType:\\\"calc\\\"},editType:\\\"calc\\\"},transforms:{_isLinkedToArray:\\\"transform\\\",editType:\\\"calc\\\"},uirevision:{valType:\\\"any\\\",editType:\\\"none\\\"}}},42973:function(t,e,r){\\\"use strict\\\";var n=r(92770),i=r(71828),a=i.dateTime2ms,o=i.incrementMonth,s=r(50606).ONEAVGMONTH;t.exports=function(t,e,r,i){if(\\\"date\\\"!==e.type)return{vals:i};var l=t[r+\\\"periodalignment\\\"];if(!l)return{vals:i};var u,c=t[r+\\\"period\\\"];if(n(c)){if((c=+c)<=0)return{vals:i}}else if(\\\"string\\\"==typeof c&&\\\"M\\\"===c.charAt(0)){var f=+c.substring(1);if(!(f>0&&Math.round(f)===f))return{vals:i};u=f}for(var h=e.calendar,p=\\\"start\\\"===l,d=\\\"end\\\"===l,v=t[r+\\\"period0\\\"],g=a(v,h)||0,y=[],m=[],x=[],b=i.length,_=0;_<b;_++){var w,T,k,A=i[_];if(u){for(w=Math.round((A-g)/(u*s)),k=o(g,u*w,h);k>A;)k=o(k,-u,h);for(;k<=A;)k=o(k,u,h);T=o(k,-u,h)}else{for(k=g+(w=Math.round((A-g)/c))*c;k>A;)k-=c;for(;k<=A;)k+=c;T=k-c}y[_]=p?T:d?k:(T+k)/2,m[_]=T,x[_]=k}return{vals:y,starts:m,ends:x}}},89502:function(t){\\\"use strict\\\";t.exports={xaxis:{valType:\\\"subplotid\\\",dflt:\\\"x\\\",editType:\\\"calc+clearAxisTypes\\\"},yaxis:{valType:\\\"subplotid\\\",dflt:\\\"y\\\",editType:\\\"calc+clearAxisTypes\\\"}}},71739:function(t,e,r){\\\"use strict\\\";var n=r(39898),i=r(92770),a=r(71828),o=r(50606).FP_SAFE,s=r(73972),l=r(91424),u=r(41675),c=u.getFromId,f=u.isLinked;function h(t,e){var r,n,i=[],o=t._fullLayout,s=d(o,e,0),l=d(o,e,1),u=g(t,e),c=u.min,f=u.max;if(0===c.length||0===f.length)return a.simpleMap(e.range,e.r2l);var h=c[0].val,v=f[0].val;for(r=1;r<c.length&&h===v;r++)h=Math.min(h,c[r].val);for(r=1;r<f.length&&h===v;r++)v=Math.max(v,f[r].val);var y=!1;if(e.range){var m=a.simpleMap(e.range,e.r2l);y=m[1]<m[0]}\\\"reversed\\\"===e.autorange&&(y=!0,e.autorange=!0);var x,b,_,w,T,k,A=e.rangemode,M=\\\"tozero\\\"===A,S=\\\"nonnegative\\\"===A,E=e._length,L=E/10,C=0;for(r=0;r<c.length;r++)for(x=c[r],n=0;n<f.length;n++)(k=(b=f[n]).val-x.val-p(e,x.val,b.val))>0&&((T=E-s(x)-l(b))>L?k/T>C&&(_=x,w=b,C=k/T):k/E>C&&(_={val:x.val,nopad:1},w={val:b.val,nopad:1},C=k/E));if(h===v){var P=h-1,O=h+1;if(M)if(0===h)i=[0,1];else{var I=(h>0?f:c).reduce((function(t,e){return Math.max(t,l(e))}),0),D=h/(1-Math.min(.5,I/E));i=h>0?[0,D]:[D,0]}else i=S?[Math.max(0,P),Math.max(1,O)]:[P,O]}else M?(_.val>=0&&(_={val:0,nopad:1}),w.val<=0&&(w={val:0,nopad:1})):S&&(_.val-C*s(_)<0&&(_={val:0,nopad:1}),w.val<=0&&(w={val:1,nopad:1})),C=(w.val-_.val-p(e,x.val,b.val))/(E-s(_)-l(w)),i=[_.val-C*s(_),w.val+C*l(w)];return y&&i.reverse(),a.simpleMap(i,e.l2r||Number)}function p(t,e,r){var n=0;if(t.rangebreaks)for(var i=t.locateBreaks(e,r),a=0;a<i.length;a++){var o=i[a];n+=o.max-o.min}return n}function d(t,e,r){var i=.05*e._length,o=e._anchorAxis||{};if(-1!==(e.ticklabelposition||\\\"\\\").indexOf(\\\"inside\\\")||-1!==(o.ticklabelposition||\\\"\\\").indexOf(\\\"inside\\\")){var s=\\\"reversed\\\"===e.autorange;if(!s){var u=a.simpleMap(e.range,e.r2l);s=u[1]<u[0]}s&&(r=!r)}var c=0;return f(t,e._id)||(c=function(t,e,r){var i=0,o=\\\"x\\\"===e._id.charAt(0);for(var s in t._plots){var u=t._plots[s];if(e._id===u.xaxis._id||e._id===u.yaxis._id){var c=(o?u.yaxis:u.xaxis)||{};if(-1!==(c.ticklabelposition||\\\"\\\").indexOf(\\\"inside\\\")&&(!r&&(\\\"left\\\"===c.side||\\\"bottom\\\"===c.side)||r&&(\\\"top\\\"===c.side||\\\"right\\\"===c.side))){if(c._vals){var f=a.deg2rad(c._tickAngles[c._id+\\\"tick\\\"]||0),h=Math.abs(Math.cos(f)),p=Math.abs(Math.sin(f));if(!c._vals[0].bb){var d=c._id+\\\"tick\\\";c._selections[d].each((function(t){var e=n.select(this);e.select(\\\".text-math-group\\\").empty()&&(t.bb=l.bBox(e.node()))}))}for(var g=0;g<c._vals.length;g++){var y=c._vals[g].bb;if(y){var m=2*v+y.width,x=2*v+y.height;i=Math.max(i,o?Math.max(m*h,x*p):Math.max(x*h,m*p))}}}\\\"inside\\\"===c.ticks&&\\\"inside\\\"===c.ticklabelposition&&(i+=c.ticklen||0)}}}return i}(t,e,r)),i=Math.max(c,i),\\\"domain\\\"===e.constrain&&e._inputDomain&&(i*=(e._inputDomain[1]-e._inputDomain[0])/(e.domain[1]-e.domain[0])),function(t){return t.nopad?0:t.pad+(t.extrapad?i:c)}}t.exports={getAutoRange:h,makePadFn:d,doAutoRange:function(t,e,r){if(e.setScale(),e.autorange){e.range=r?r.slice():h(t,e),e._r=e.range.slice(),e._rl=a.simpleMap(e._r,e.r2l);var n=e._input,i={};i[e._attr+\\\".range\\\"]=e.range,i[e._attr+\\\".autorange\\\"]=e.autorange,s.call(\\\"_storeDirectGUIEdit\\\",t.layout,t._fullLayout._preGUI,i),n.range=e.range.slice(),n.autorange=e.autorange}var o=e._anchorAxis;if(o&&o.rangeslider){var l=o.rangeslider[e._name];l&&\\\"auto\\\"===l.rangemode&&(l.range=h(t,e)),o._input.rangeslider[e._name]=a.extendFlat({},l)}},findExtremes:function(t,e,r){r||(r={}),t._m||t.setScale();var n,a,s,l,u,c,f,h,p,d=[],v=[],g=e.length,x=r.padded||!1,_=r.tozero&&(\\\"linear\\\"===t.type||\\\"-\\\"===t.type),w=\\\"log\\\"===t.type,T=!1,k=r.vpadLinearized||!1;function A(t){if(Array.isArray(t))return T=!0,function(e){return Math.max(Number(t[e]||0),0)};var e=Math.max(Number(t||0),0);return function(){return e}}var M=A((t._m>0?r.ppadplus:r.ppadminus)||r.ppad||0),S=A((t._m>0?r.ppadminus:r.ppadplus)||r.ppad||0),E=A(r.vpadplus||r.vpad),L=A(r.vpadminus||r.vpad);if(!T){if(h=1/0,p=-1/0,w)for(n=0;n<g;n++)(a=e[n])<h&&a>0&&(h=a),a>p&&a<o&&(p=a);else for(n=0;n<g;n++)(a=e[n])<h&&a>-o&&(h=a),a>p&&a<o&&(p=a);e=[h,p],g=2}var C={tozero:_,extrapad:x};function P(r){s=e[r],i(s)&&(c=M(r),f=S(r),k?(l=t.c2l(s)-L(r),u=t.c2l(s)+E(r)):(h=s-L(r),p=s+E(r),w&&h<p/10&&(h=p/10),l=t.c2l(h),u=t.c2l(p)),_&&(l=Math.min(0,l),u=Math.max(0,u)),b(l)&&y(d,l,f,C),b(u)&&m(v,u,c,C))}var O=Math.min(6,g);for(n=0;n<O;n++)P(n);for(n=g-1;n>=O;n--)P(n);return{min:d,max:v,opts:r}},concatExtremes:g};var v=3;function g(t,e,r){var n,i,a,o=e._id,s=t._fullData,l=t._fullLayout,u=[],f=[];function h(t,e){for(n=0;n<e.length;n++){var r=t[e[n]],s=(r._extremes||{})[o];if(!0===r.visible&&s){for(i=0;i<s.min.length;i++)a=s.min[i],y(u,a.val,a.pad,{extrapad:a.extrapad});for(i=0;i<s.max.length;i++)a=s.max[i],m(f,a.val,a.pad,{extrapad:a.extrapad})}}}if(h(s,e._traceIndices),h(l.annotations||[],e._annIndices||[]),h(l.shapes||[],e._shapeIndices||[]),e._matchGroup&&!r)for(var p in e._matchGroup)if(p!==e._id){var d=c(t,p),v=g(t,d,!0),x=e._length/d._length;for(i=0;i<v.min.length;i++)a=v.min[i],y(u,a.val,a.pad*x,{extrapad:a.extrapad});for(i=0;i<v.max.length;i++)a=v.max[i],m(f,a.val,a.pad*x,{extrapad:a.extrapad})}return{min:u,max:f}}function y(t,e,r,n){x(t,e,r,n,_)}function m(t,e,r,n){x(t,e,r,n,w)}function x(t,e,r,n,i){for(var a=n.tozero,o=n.extrapad,s=!0,l=0;l<t.length&&s;l++){var u=t[l];if(i(u.val,e)&&u.pad>=r&&(u.extrapad||!o)){s=!1;break}i(e,u.val)&&u.pad<=r&&(o||!u.extrapad)&&(t.splice(l,1),l--)}if(s){var c=a&&0===e;t.push({val:e,pad:c?0:r,extrapad:!c&&o})}}function b(t){return i(t)&&Math.abs(t)<o}function _(t,e){return t<=e}function w(t,e){return t>=e}},89298:function(t,e,r){\\\"use strict\\\";var n=r(39898),i=r(92770),a=r(74875),o=r(73972),s=r(71828),l=s.strTranslate,u=r(63893),c=r(92998),f=r(7901),h=r(91424),p=r(13838),d=r(66287),v=r(50606),g=v.ONEMAXYEAR,y=v.ONEAVGYEAR,m=v.ONEMINYEAR,x=v.ONEMAXQUARTER,b=v.ONEAVGQUARTER,_=v.ONEMINQUARTER,w=v.ONEMAXMONTH,T=v.ONEAVGMONTH,k=v.ONEMINMONTH,A=v.ONEWEEK,M=v.ONEDAY,S=M/2,E=v.ONEHOUR,L=v.ONEMIN,C=v.ONESEC,P=v.MINUS_SIGN,O=v.BADNUM,I={K:\\\"zeroline\\\"},D={K:\\\"gridline\\\",L:\\\"path\\\"},z={K:\\\"minor-gridline\\\",L:\\\"path\\\"},R={K:\\\"tick\\\",L:\\\"path\\\"},F={K:\\\"tick\\\",L:\\\"text\\\"},B={width:[\\\"x\\\",\\\"r\\\",\\\"l\\\",\\\"xl\\\",\\\"xr\\\"],height:[\\\"y\\\",\\\"t\\\",\\\"b\\\",\\\"yt\\\",\\\"yb\\\"],right:[\\\"r\\\",\\\"xr\\\"],left:[\\\"l\\\",\\\"xl\\\"],top:[\\\"t\\\",\\\"yt\\\"],bottom:[\\\"b\\\",\\\"yb\\\"]},N=r(18783),j=N.MID_SHIFT,U=N.CAP_SHIFT,V=N.LINE_SPACING,H=N.OPPOSITE_SIDE,q=t.exports={};q.setConvert=r(21994);var G=r(4322),Z=r(41675),Y=Z.idSort,W=Z.isLinked;q.id2name=Z.id2name,q.name2id=Z.name2id,q.cleanId=Z.cleanId,q.list=Z.list,q.listIds=Z.listIds,q.getFromId=Z.getFromId,q.getFromTrace=Z.getFromTrace;var X=r(71739);q.getAutoRange=X.getAutoRange,q.findExtremes=X.findExtremes;var J=1e-4;function K(t){var e=(t[1]-t[0])*J;return[t[0]-e,t[1]+e]}q.coerceRef=function(t,e,r,n,i,a){var o=n.charAt(n.length-1),l=r._fullLayout._subplots[o+\\\"axis\\\"],u=n+\\\"ref\\\",c={};return i||(i=l[0]||(\\\"string\\\"==typeof a?a:a[0])),a||(a=i),l=l.concat(l.map((function(t){return t+\\\" domain\\\"}))),c[u]={valType:\\\"enumerated\\\",values:l.concat(a?\\\"string\\\"==typeof a?[a]:a:[]),dflt:i},s.coerce(t,e,c,u)},q.getRefType=function(t){return void 0===t?t:\\\"paper\\\"===t?\\\"paper\\\":\\\"pixel\\\"===t?\\\"pixel\\\":/( domain)$/.test(t)?\\\"domain\\\":\\\"range\\\"},q.coercePosition=function(t,e,r,n,i,a){var o,l;if(\\\"range\\\"!==q.getRefType(n))o=s.ensureNumber,l=r(i,a);else{var u=q.getFromId(e,n);l=r(i,a=u.fraction2r(a)),o=u.cleanPos}t[i]=o(l)},q.cleanPosition=function(t,e,r){return(\\\"paper\\\"===r||\\\"pixel\\\"===r?s.ensureNumber:q.getFromId(e,r).cleanPos)(t)},q.redrawComponents=function(t,e){e=e||q.listIds(t);var r=t._fullLayout;function n(n,i,a,s){for(var l=o.getComponentMethod(n,i),u={},c=0;c<e.length;c++)for(var f=r[q.id2name(e[c])][a],h=0;h<f.length;h++){var p=f[h];if(!u[p]&&(l(t,p),u[p]=1,s))return}}n(\\\"annotations\\\",\\\"drawOne\\\",\\\"_annIndices\\\"),n(\\\"shapes\\\",\\\"drawOne\\\",\\\"_shapeIndices\\\"),n(\\\"images\\\",\\\"draw\\\",\\\"_imgIndices\\\",!0),n(\\\"selections\\\",\\\"drawOne\\\",\\\"_selectionIndices\\\")};var $=q.getDataConversions=function(t,e,r,n){var i,a=\\\"x\\\"===r||\\\"y\\\"===r||\\\"z\\\"===r?r:n;if(Array.isArray(a)){if(i={type:G(n,void 0,{autotypenumbers:t._fullLayout.autotypenumbers}),_categories:[]},q.setConvert(i),\\\"category\\\"===i.type)for(var o=0;o<n.length;o++)i.d2c(n[o])}else i=q.getFromTrace(t,e,a);return i?{d2c:i.d2c,c2d:i.c2d}:\\\"ids\\\"===a?{d2c:tt,c2d:tt}:{d2c:Q,c2d:Q}};function Q(t){return+t}function tt(t){return String(t)}function et(t,e){return Math.abs((t/e+.5)%1-.5)<.001}function rt(t,e){return Math.abs(t/e-1)<.001}function nt(t){return+t.substring(1)}function it(t,e){return t.rangebreaks&&(e=e.filter((function(e){return t.maskBreaks(e.x)!==O}))),e}function at(t){var e=t._mainAxis,r=[];if(e._vals)for(var n=0;n<e._vals.length;n++)if(!e._vals[n].noTick){var i=e.l2p(e._vals[n].x),a=t.p2l(i),o=q.tickText(t,a);e._vals[n].minor&&(o.minor=!0,o.text=\\\"\\\"),r.push(o)}return it(t,r)}function ot(t){var e=K(s.simpleMap(t.range,t.r2l)),r=Math.min(e[0],e[1]),n=Math.max(e[0],e[1]),i=\\\"category\\\"===t.type?t.d2l_noadd:t.d2l;\\\"log\\\"===t.type&&\\\"L\\\"!==String(t.dtick).charAt(0)&&(t.dtick=\\\"L\\\"+Math.pow(10,Math.floor(Math.min(t.range[0],t.range[1]))-1));for(var a=[],o=0;o<=1;o++)if(!o||t.minor){var l=o?t.minor.tickvals:t.tickvals,u=o?[]:t.ticktext;if(l){Array.isArray(u)||(u=[]);for(var c=0;c<l.length;c++){var f=i(l[c]);if(f>r&&f<n){var h=void 0===u[c]?q.tickText(t,f):gt(t,f,String(u[c]));o&&(h.minor=!0,h.text=\\\"\\\"),a.push(h)}}}}return it(t,a)}q.getDataToCoordFunc=function(t,e,r,n){return $(t,e,r,n).d2c},q.counterLetter=function(t){var e=t.charAt(0);return\\\"x\\\"===e?\\\"y\\\":\\\"y\\\"===e?\\\"x\\\":void 0},q.minDtick=function(t,e,r,n){-1===[\\\"log\\\",\\\"category\\\",\\\"multicategory\\\"].indexOf(t.type)&&n?void 0===t._minDtick?(t._minDtick=e,t._forceTick0=r):t._minDtick&&((t._minDtick/e+1e-6)%1<2e-6&&((r-t._forceTick0)/e%1+1.000001)%1<2e-6?(t._minDtick=e,t._forceTick0=r):((e/t._minDtick+1e-6)%1>2e-6||((r-t._forceTick0)/t._minDtick%1+1.000001)%1>2e-6)&&(t._minDtick=0)):t._minDtick=0},q.saveRangeInitial=function(t,e){for(var r=q.list(t,\\\"\\\",!0),n=!1,i=0;i<r.length;i++){var a=r[i],o=void 0===a._rangeInitial,s=o||!(a.range[0]===a._rangeInitial[0]&&a.range[1]===a._rangeInitial[1]);(o&&!1===a.autorange||e&&s)&&(a._rangeInitial=a.range.slice(),n=!0)}return n},q.saveShowSpikeInitial=function(t,e){for(var r=q.list(t,\\\"\\\",!0),n=!1,i=\\\"on\\\",a=0;a<r.length;a++){var o=r[a],s=void 0===o._showSpikeInitial,l=s||!(o.showspikes===o._showspikes);(s||e&&l)&&(o._showSpikeInitial=o.showspikes,n=!0),\\\"on\\\"!==i||o.showspikes||(i=\\\"off\\\")}return t._fullLayout._cartesianSpikesEnabled=i,n},q.autoBin=function(t,e,r,n,a,o){var l,u=s.aggNums(Math.min,null,t),c=s.aggNums(Math.max,null,t);if(\\\"category\\\"===e.type||\\\"multicategory\\\"===e.type)return{start:u-.5,end:c+.5,size:Math.max(1,Math.round(o)||1),_dataSpan:c-u};if(a||(a=e.calendar),l=\\\"log\\\"===e.type?{type:\\\"linear\\\",range:[u,c]}:{type:e.type,range:s.simpleMap([u,c],e.c2r,0,a),calendar:a},q.setConvert(l),o=o&&d.dtick(o,l.type))l.dtick=o,l.tick0=d.tick0(void 0,l.type,a);else{var f;if(r)f=(c-u)/r;else{var h=s.distinctVals(t),p=Math.pow(10,Math.floor(Math.log(h.minDiff)/Math.LN10)),v=p*s.roundUp(h.minDiff/p,[.9,1.9,4.9,9.9],!0);f=Math.max(v,2*s.stdev(t)/Math.pow(t.length,n?.25:.4)),i(f)||(f=1)}q.autoTicks(l,f)}var g,y=l.dtick,m=q.tickIncrement(q.tickFirst(l),y,\\\"reverse\\\",a);if(\\\"number\\\"==typeof y)m=function(t,e,r,n,a){var o=0,s=0,l=0,u=0;function c(e){return(1+100*(e-t)/r.dtick)%100<2}for(var f=0;f<e.length;f++)e[f]%1==0?l++:i(e[f])||u++,c(e[f])&&o++,c(e[f]+r.dtick/2)&&s++;var h=e.length-u;if(l===h&&\\\"date\\\"!==r.type)r.dtick<1?t=n-.5*r.dtick:(t-=.5)+r.dtick<n&&(t+=r.dtick);else if(s<.1*h&&(o>.3*h||c(n)||c(a))){var p=r.dtick/2;t+=t+p<n?p:-p}return t}(m,t,l,u,c),g=m+(1+Math.floor((c-m)/y))*y;else for(\\\"M\\\"===l.dtick.charAt(0)&&(m=function(t,e,r,n,i){var a=s.findExactDates(e,i);if(a.exactDays>.8){var o=Number(r.substr(1));a.exactYears>.8&&o%12==0?t=q.tickIncrement(t,\\\"M6\\\",\\\"reverse\\\")+1.5*M:a.exactMonths>.8?t=q.tickIncrement(t,\\\"M1\\\",\\\"reverse\\\")+15.5*M:t-=S;var l=q.tickIncrement(t,r);if(l<=n)return l}return t}(m,t,y,u,a)),g=m;g<=c;)g=q.tickIncrement(g,y,!1,a);return{start:e.c2r(m,0,a),end:e.c2r(g,0,a),size:y,_dataSpan:c-u}},q.prepMinorTicks=function(t,e,r){if(!e.minor.dtick){delete t.dtick;var n,a=e.dtick&&i(e._tmin);if(a){var o=q.tickIncrement(e._tmin,e.dtick,!0);n=[e._tmin,.99*o+.01*e._tmin]}else{var l=s.simpleMap(e.range,e.r2l);n=[l[0],.8*l[0]+.2*l[1]]}if(t.range=s.simpleMap(n,e.l2r),t._isMinor=!0,q.prepTicks(t,r),a){var u=i(e.dtick),c=i(t.dtick),f=u?e.dtick:+e.dtick.substring(1),h=c?t.dtick:+t.dtick.substring(1);u&&c?et(f,h)?f===2*A&&h===2*M&&(t.dtick=A):f===2*A&&h===3*M?t.dtick=A:f!==A||(e._input.minor||{}).nticks?rt(f/h,2.5)?t.dtick=f/2:t.dtick=f:t.dtick=M:\\\"M\\\"===String(e.dtick).charAt(0)?c?t.dtick=\\\"M1\\\":et(f,h)?f>=12&&2===h&&(t.dtick=\\\"M3\\\"):t.dtick=e.dtick:\\\"L\\\"===String(t.dtick).charAt(0)?\\\"L\\\"===String(e.dtick).charAt(0)?et(f,h)||(t.dtick=rt(f/h,2.5)?e.dtick/2:e.dtick):t.dtick=\\\"D1\\\":\\\"D2\\\"===t.dtick&&+e.dtick>1&&(t.dtick=1)}t.range=e.range}void 0===e.minor._tick0Init&&(t.tick0=e.tick0)},q.prepTicks=function(t,e){var r=s.simpleMap(t.range,t.r2l,void 0,void 0,e);if(\\\"auto\\\"===t.tickmode||!t.dtick){var n,a=t.nticks;a||(\\\"category\\\"===t.type||\\\"multicategory\\\"===t.type?(n=t.tickfont?s.bigFont(t.tickfont.size||12):15,a=t._length/n):(n=\\\"y\\\"===t._id.charAt(0)?40:80,a=s.constrain(t._length/n,4,9)+1),\\\"radialaxis\\\"===t._name&&(a*=2)),t.minor&&\\\"array\\\"!==t.minor.tickmode||\\\"array\\\"===t.tickmode&&(a*=100),t._roughDTick=Math.abs(r[1]-r[0])/a,q.autoTicks(t,t._roughDTick),t._minDtick>0&&t.dtick<2*t._minDtick&&(t.dtick=t._minDtick,t.tick0=t.l2r(t._forceTick0))}\\\"period\\\"===t.ticklabelmode&&function(t){var e;function r(){return!(i(t.dtick)||\\\"M\\\"!==t.dtick.charAt(0))}var n=r(),a=q.getTickFormat(t);if(a){var o=t._dtickInit!==t.dtick;/%[fLQsSMX]/.test(a)||(/%[HI]/.test(a)?(e=E,o&&!n&&t.dtick<E&&(t.dtick=E)):/%p/.test(a)?(e=S,o&&!n&&t.dtick<S&&(t.dtick=S)):/%[Aadejuwx]/.test(a)?(e=M,o&&!n&&t.dtick<M&&(t.dtick=M)):/%[UVW]/.test(a)?(e=A,o&&!n&&t.dtick<A&&(t.dtick=A)):/%[Bbm]/.test(a)?(e=T,o&&(n?nt(t.dtick)<1:t.dtick<k)&&(t.dtick=\\\"M1\\\")):/%[q]/.test(a)?(e=b,o&&(n?nt(t.dtick)<3:t.dtick<_)&&(t.dtick=\\\"M3\\\")):/%[Yy]/.test(a)&&(e=y,o&&(n?nt(t.dtick)<12:t.dtick<m)&&(t.dtick=\\\"M12\\\")))}(n=r())&&t.tick0===t._dowTick0&&(t.tick0=t._rawTick0),t._definedDelta=e}(t),t.tick0||(t.tick0=\\\"date\\\"===t.type?\\\"2000-01-01\\\":0),\\\"date\\\"===t.type&&t.dtick<.1&&(t.dtick=.1),vt(t)},q.calcTicks=function(t,e){for(var r,n,a=t.type,o=t.calendar,l=t.ticklabelstep,u=\\\"period\\\"===t.ticklabelmode,c=s.simpleMap(t.range,t.r2l,void 0,void 0,e),f=c[1]<c[0],h=Math.min(c[0],c[1]),p=Math.max(c[0],c[1]),d=Math.max(1e3,t._length||0),v=[],L=[],C=[],P=[],I=t.minor&&(t.minor.ticks||t.minor.showgrid),D=1;D>=(I?0:1);D--){var z=!D;D?(t._dtickInit=t.dtick,t._tick0Init=t.tick0):(t.minor._dtickInit=t.minor.dtick,t.minor._tick0Init=t.minor.tick0);var R=D?t:s.extendFlat({},t,t.minor);if(z?q.prepMinorTicks(R,t,e):q.prepTicks(R,e),\\\"array\\\"!==R.tickmode)if(\\\"sync\\\"!==R.tickmode){var F=K(c),B=F[0],N=F[1],j=i(R.dtick),U=\\\"log\\\"===a&&!(j||\\\"L\\\"===R.dtick.charAt(0)),V=q.tickFirst(R,e);if(D){if(t._tmin=V,V<B!==f)break;\\\"category\\\"!==a&&\\\"multicategory\\\"!==a||(N=f?Math.max(-.5,N):Math.min(t._categories.length-.5,N))}var H,G,Z=null,Y=V;D&&(j?G=t.dtick:\\\"date\\\"===a?\\\"string\\\"==typeof t.dtick&&\\\"M\\\"===t.dtick.charAt(0)&&(G=T*t.dtick.substring(1)):G=t._roughDTick,H=Math.round((t.r2l(Y)-t.r2l(t.tick0))/G)-1);var W=R.dtick;for(R.rangebreaks&&R._tick0Init!==R.tick0&&(Y=zt(Y,t),f||(Y=q.tickIncrement(Y,W,!f,o))),D&&u&&(Y=q.tickIncrement(Y,W,!f,o),H--);f?Y>=N:Y<=N;Y=q.tickIncrement(Y,W,f,o)){if(D&&H++,R.rangebreaks&&!f){if(Y<B)continue;if(R.maskBreaks(Y)===O&&zt(Y,R)>=p)break}if(C.length>d||Y===Z)break;Z=Y;var X={value:Y};D?(U&&Y!==(0|Y)&&(X.simpleLabel=!0),l>1&&H%l&&(X.skipLabel=!0),C.push(X)):(X.minor=!0,P.push(X))}}else C=[],v=at(t);else D?(C=[],v=ot(t)):(P=[],L=ot(t))}if(I&&!(\\\"inside\\\"===t.minor.ticks&&\\\"outside\\\"===t.ticks||\\\"outside\\\"===t.minor.ticks&&\\\"inside\\\"===t.ticks)){for(var J=C.map((function(t){return t.value})),$=[],Q=0;Q<P.length;Q++){var tt=P[Q],et=tt.value;if(-1===J.indexOf(et)){for(var rt=!1,nt=0;!rt&&nt<C.length;nt++)1e7+C[nt].value===1e7+et&&(rt=!0);rt||$.push(tt)}}P=$}if(u&&function(t,e,r){for(var n=0;n<t.length;n++){var i=t[n].value,a=n,o=n+1;n<t.length-1?(a=n,o=n+1):n>0?(a=n-1,o=n):(a=n,o=n);var s,l=t[a].value,u=t[o].value,c=Math.abs(u-l),f=r||c,h=0;f>=m?h=c>=m&&c<=g?c:y:r===b&&f>=_?h=c>=_&&c<=x?c:b:f>=k?h=c>=k&&c<=w?c:T:r===A&&f>=A?h=A:f>=M?h=M:r===S&&f>=S?h=S:r===E&&f>=E&&(h=E),h>=c&&(h=c,s=!0);var p=i+h;if(e.rangebreaks&&h>0){for(var d=0,v=0;v<84;v++){var L=(v+.5)/84;e.maskBreaks(i*(1-L)+L*p)!==O&&d++}(h*=d/84)||(t[n].drop=!0),s&&c>A&&(h=c)}(h>0||0===n)&&(t[n].periodX=i+h/2)}}(C,t,t._definedDelta),t.rangebreaks){var it=\\\"y\\\"===t._id.charAt(0),st=1;\\\"auto\\\"===t.tickmode&&(st=t.tickfont?t.tickfont.size:12);var lt=NaN;for(r=C.length-1;r>-1;r--)if(C[r].drop)C.splice(r,1);else{C[r].value=zt(C[r].value,t);var ut=t.c2p(C[r].value);(it?lt>ut-st:lt<ut+st)?C.splice(f?r+1:r,1):lt=ut}}Dt(t)&&360===Math.abs(c[1]-c[0])&&C.pop(),t._tmax=(C[C.length-1]||{}).value,t._prevDateHead=\\\"\\\",t._inCalcTicks=!0;var ct,ft,ht=function(e){e.text=\\\"\\\",t._prevDateHead=n};for(C=C.concat(P),r=0;r<C.length;r++){var pt=C[r].minor,dt=C[r].value;pt?L.push({x:dt,minor:!0}):(n=t._prevDateHead,ct=q.tickText(t,dt,!1,C[r].simpleLabel),void 0!==(ft=C[r].periodX)&&(ct.periodX=ft,(ft>p||ft<h)&&(ft>p&&(ct.periodX=p),ft<h&&(ct.periodX=h),ht(ct))),C[r].skipLabel&&ht(ct),v.push(ct))}return v=v.concat(L),t._inCalcTicks=!1,u&&v.length&&(v[0].noTick=!0),v};var st=[2,5,10],lt=[1,2,3,6,12],ut=[1,2,5,10,15,30],ct=[1,2,3,7,14],ft=[-.046,0,.301,.477,.602,.699,.778,.845,.903,.954,1],ht=[-.301,0,.301,.699,1],pt=[15,30,45,90,180];function dt(t,e,r){return e*s.roundUp(t/e,r)}function vt(t){var e=t.dtick;if(t._tickexponent=0,i(e)||\\\"string\\\"==typeof e||(e=1),\\\"category\\\"!==t.type&&\\\"multicategory\\\"!==t.type||(t._tickround=null),\\\"date\\\"===t.type){var r=t.r2l(t.tick0),n=t.l2r(r).replace(/(^-|i)/g,\\\"\\\"),a=n.length;if(\\\"M\\\"===String(e).charAt(0))a>10||\\\"01-01\\\"!==n.substr(5)?t._tickround=\\\"d\\\":t._tickround=+e.substr(1)%12==0?\\\"y\\\":\\\"m\\\";else if(e>=M&&a<=10||e>=15*M)t._tickround=\\\"d\\\";else if(e>=L&&a<=16||e>=E)t._tickround=\\\"M\\\";else if(e>=C&&a<=19||e>=L)t._tickround=\\\"S\\\";else{var o=t.l2r(r+e).replace(/^-/,\\\"\\\").length;t._tickround=Math.max(a,o)-20,t._tickround<0&&(t._tickround=4)}}else if(i(e)||\\\"L\\\"===e.charAt(0)){var s=t.range.map(t.r2d||Number);i(e)||(e=Number(e.substr(1))),t._tickround=2-Math.floor(Math.log(e)/Math.LN10+.01);var l=Math.max(Math.abs(s[0]),Math.abs(s[1])),u=Math.floor(Math.log(l)/Math.LN10+.01),c=void 0===t.minexponent?3:t.minexponent;Math.abs(u)>c&&(mt(t.exponentformat)&&!xt(u)?t._tickexponent=3*Math.round((u-1)/3):t._tickexponent=u)}else t._tickround=null}function gt(t,e,r){var n=t.tickfont||{};return{x:e,dx:0,dy:0,text:r||\\\"\\\",fontSize:n.size,font:n.family,fontColor:n.color}}q.autoTicks=function(t,e,r){var n;function a(t){return Math.pow(t,Math.floor(Math.log(e)/Math.LN10))}if(\\\"date\\\"===t.type){t.tick0=s.dateTick0(t.calendar,0);var o=2*e;if(o>y)e/=y,n=a(10),t.dtick=\\\"M\\\"+12*dt(e,n,st);else if(o>T)e/=T,t.dtick=\\\"M\\\"+dt(e,1,lt);else if(o>M){if(t.dtick=dt(e,M,t._hasDayOfWeekBreaks?[1,2,7,14]:ct),!r){var l=q.getTickFormat(t),u=\\\"period\\\"===t.ticklabelmode;u&&(t._rawTick0=t.tick0),/%[uVW]/.test(l)?t.tick0=s.dateTick0(t.calendar,2):t.tick0=s.dateTick0(t.calendar,1),u&&(t._dowTick0=t.tick0)}}else o>E?t.dtick=dt(e,E,lt):o>L?t.dtick=dt(e,L,ut):o>C?t.dtick=dt(e,C,ut):(n=a(10),t.dtick=dt(e,n,st))}else if(\\\"log\\\"===t.type){t.tick0=0;var c=s.simpleMap(t.range,t.r2l);if(t._isMinor&&(e*=1.5),e>.7)t.dtick=Math.ceil(e);else if(Math.abs(c[1]-c[0])<1){var f=1.5*Math.abs((c[1]-c[0])/e);e=Math.abs(Math.pow(10,c[1])-Math.pow(10,c[0]))/f,n=a(10),t.dtick=\\\"L\\\"+dt(e,n,st)}else t.dtick=e>.3?\\\"D2\\\":\\\"D1\\\"}else\\\"category\\\"===t.type||\\\"multicategory\\\"===t.type?(t.tick0=0,t.dtick=Math.ceil(Math.max(e,1))):Dt(t)?(t.tick0=0,n=1,t.dtick=dt(e,n,pt)):(t.tick0=0,n=a(10),t.dtick=dt(e,n,st));if(0===t.dtick&&(t.dtick=1),!i(t.dtick)&&\\\"string\\\"!=typeof t.dtick){var h=t.dtick;throw t.dtick=1,\\\"ax.dtick error: \\\"+String(h)}},q.tickIncrement=function(t,e,r,a){var o=r?-1:1;if(i(e))return s.increment(t,o*e);var l=e.charAt(0),u=o*Number(e.substr(1));if(\\\"M\\\"===l)return s.incrementMonth(t,u,a);if(\\\"L\\\"===l)return Math.log(Math.pow(10,t)+u)/Math.LN10;if(\\\"D\\\"===l){var c=\\\"D2\\\"===e?ht:ft,f=t+.01*o,h=s.roundUp(s.mod(f,1),c,r);return Math.floor(f)+Math.log(n.round(Math.pow(10,h),1))/Math.LN10}throw\\\"unrecognized dtick \\\"+String(e)},q.tickFirst=function(t,e){var r=t.r2l||Number,a=s.simpleMap(t.range,r,void 0,void 0,e),o=a[1]<a[0],l=o?Math.floor:Math.ceil,u=K(a)[0],c=t.dtick,f=r(t.tick0);if(i(c)){var h=l((u-f)/c)*c+f;return\\\"category\\\"!==t.type&&\\\"multicategory\\\"!==t.type||(h=s.constrain(h,0,t._categories.length-1)),h}var p=c.charAt(0),d=Number(c.substr(1));if(\\\"M\\\"===p){for(var v,g,y,m=0,x=f;m<10;){if(((v=q.tickIncrement(x,c,o,t.calendar))-u)*(x-u)<=0)return o?Math.min(x,v):Math.max(x,v);g=(u-(x+v)/2)/(v-x),y=p+(Math.abs(Math.round(g))||1)*d,x=q.tickIncrement(x,y,g<0?!o:o,t.calendar),m++}return s.error(\\\"tickFirst did not converge\\\",t),x}if(\\\"L\\\"===p)return Math.log(l((Math.pow(10,u)-f)/d)*d+f)/Math.LN10;if(\\\"D\\\"===p){var b=\\\"D2\\\"===c?ht:ft,_=s.roundUp(s.mod(u,1),b,o);return Math.floor(u)+Math.log(n.round(Math.pow(10,_),1))/Math.LN10}throw\\\"unrecognized dtick \\\"+String(c)},q.tickText=function(t,e,r,n){var a,o=gt(t,e),l=\\\"array\\\"===t.tickmode,u=r||l,c=t.type,f=\\\"category\\\"===c?t.d2l_noadd:t.d2l;if(l&&Array.isArray(t.ticktext)){var h=s.simpleMap(t.range,t.r2l),p=(Math.abs(h[1]-h[0])-(t._lBreaks||0))/1e4;for(a=0;a<t.ticktext.length&&!(Math.abs(e-f(t.tickvals[a]))<p);a++);if(a<t.ticktext.length)return o.text=String(t.ticktext[a]),o}function d(n){if(void 0===n)return!0;if(r)return\\\"none\\\"===n;var i={first:t._tmin,last:t._tmax}[n];return\\\"all\\\"!==n&&e!==i}var v=r?\\\"never\\\":\\\"none\\\"!==t.exponentformat&&d(t.showexponent)?\\\"hide\\\":\\\"\\\";if(\\\"date\\\"===c?function(t,e,r,n){var a=t._tickround,o=r&&t.hoverformat||q.getTickFormat(t);n&&(a=i(a)?4:{y:\\\"m\\\",m:\\\"d\\\",d:\\\"M\\\",M:\\\"S\\\",S:4}[a]);var l,u=s.formatDate(e.x,o,a,t._dateFormat,t.calendar,t._extraFormat),c=u.indexOf(\\\"\\\\n\\\");if(-1!==c&&(l=u.substr(c+1),u=u.substr(0,c)),n&&(\\\"00:00:00\\\"===u||\\\"00:00\\\"===u?(u=l,l=\\\"\\\"):8===u.length&&(u=u.replace(/:00$/,\\\"\\\"))),l)if(r)\\\"d\\\"===a?u+=\\\", \\\"+l:u=l+(u?\\\", \\\"+u:\\\"\\\");else if(t._inCalcTicks&&t._prevDateHead===l){var f=Rt(t),h=t._trueSide||t.side;(!f&&\\\"top\\\"===h||f&&\\\"bottom\\\"===h)&&(u+=\\\"<br> \\\")}else t._prevDateHead=l,u+=\\\"<br>\\\"+l;e.text=u}(t,o,r,u):\\\"log\\\"===c?function(t,e,r,n,a){var o=t.dtick,l=e.x,u=t.tickformat,c=\\\"string\\\"==typeof o&&o.charAt(0);if(\\\"never\\\"===a&&(a=\\\"\\\"),n&&\\\"L\\\"!==c&&(o=\\\"L3\\\",c=\\\"L\\\"),u||\\\"L\\\"===c)e.text=bt(Math.pow(10,l),t,a,n);else if(i(o)||\\\"D\\\"===c&&s.mod(l+.01,1)<.1){var f=Math.round(l),h=Math.abs(f),p=t.exponentformat;\\\"power\\\"===p||mt(p)&&xt(f)?(e.text=0===f?1:1===f?\\\"10\\\":\\\"10<sup>\\\"+(f>1?\\\"\\\":P)+h+\\\"</sup>\\\",e.fontSize*=1.25):(\\\"e\\\"===p||\\\"E\\\"===p)&&h>2?e.text=\\\"1\\\"+p+(f>0?\\\"+\\\":P)+h:(e.text=bt(Math.pow(10,l),t,\\\"\\\",\\\"fakehover\\\"),\\\"D1\\\"===o&&\\\"y\\\"===t._id.charAt(0)&&(e.dy-=e.fontSize/6))}else{if(\\\"D\\\"!==c)throw\\\"unrecognized dtick \\\"+String(o);e.text=String(Math.round(Math.pow(10,s.mod(l,1)))),e.fontSize*=.75}if(\\\"D1\\\"===t.dtick){var d=String(e.text).charAt(0);\\\"0\\\"!==d&&\\\"1\\\"!==d||(\\\"y\\\"===t._id.charAt(0)?e.dx-=e.fontSize/4:(e.dy+=e.fontSize/2,e.dx+=(t.range[1]>t.range[0]?1:-1)*e.fontSize*(l<0?.5:.25)))}}(t,o,0,u,v):\\\"category\\\"===c?function(t,e){var r=t._categories[Math.round(e.x)];void 0===r&&(r=\\\"\\\"),e.text=String(r)}(t,o):\\\"multicategory\\\"===c?function(t,e,r){var n=Math.round(e.x),i=t._categories[n]||[],a=void 0===i[1]?\\\"\\\":String(i[1]),o=void 0===i[0]?\\\"\\\":String(i[0]);r?e.text=o+\\\" - \\\"+a:(e.text=a,e.text2=o)}(t,o,r):Dt(t)?function(t,e,r,n,i){if(\\\"radians\\\"!==t.thetaunit||r)e.text=bt(e.x,t,i,n);else{var a=e.x/180;if(0===a)e.text=\\\"0\\\";else{var o=function(t){function e(t,e){return Math.abs(t-e)<=1e-6}var r=function(t){for(var r=1;!e(Math.round(t*r)/r,t);)r*=10;return r}(t),n=t*r,i=Math.abs(function t(r,n){return e(n,0)?r:t(n,r%n)}(n,r));return[Math.round(n/i),Math.round(r/i)]}(a);if(o[1]>=100)e.text=bt(s.deg2rad(e.x),t,i,n);else{var l=e.x<0;1===o[1]?1===o[0]?e.text=\\\"π\\\":e.text=o[0]+\\\"π\\\":e.text=[\\\"<sup>\\\",o[0],\\\"</sup>\\\",\\\"⁄\\\",\\\"<sub>\\\",o[1],\\\"</sub>\\\",\\\"π\\\"].join(\\\"\\\"),l&&(e.text=P+e.text)}}}}(t,o,r,u,v):function(t,e,r,n,i){\\\"never\\\"===i?i=\\\"\\\":\\\"all\\\"===t.showexponent&&Math.abs(e.x/t.dtick)<1e-6&&(i=\\\"hide\\\"),e.text=bt(e.x,t,i,n)}(t,o,0,u,v),n||(t.tickprefix&&!d(t.showtickprefix)&&(o.text=t.tickprefix+o.text),t.ticksuffix&&!d(t.showticksuffix)&&(o.text+=t.ticksuffix)),t.labelalias&&t.labelalias.hasOwnProperty(o.text)){var g=t.labelalias[o.text];\\\"string\\\"==typeof g&&(o.text=g)}if(\\\"boundaries\\\"===t.tickson||t.showdividers){var y=function(e){var r=t.l2p(e);return r>=0&&r<=t._length?e:null};o.xbnd=[y(o.x-.5),y(o.x+t.dtick-.5)]}return o},q.hoverLabelText=function(t,e,r){r&&(t=s.extendFlat({},t,{hoverformat:r}));var n=Array.isArray(e)?e[0]:e,i=Array.isArray(e)?e[1]:void 0;if(void 0!==i&&i!==n)return q.hoverLabelText(t,n,r)+\\\" - \\\"+q.hoverLabelText(t,i,r);var a=\\\"log\\\"===t.type&&n<=0,o=q.tickText(t,t.c2l(a?-n:n),\\\"hover\\\").text;return a?0===n?\\\"0\\\":P+o:o};var yt=[\\\"f\\\",\\\"p\\\",\\\"n\\\",\\\"μ\\\",\\\"m\\\",\\\"\\\",\\\"k\\\",\\\"M\\\",\\\"G\\\",\\\"T\\\"];function mt(t){return\\\"SI\\\"===t||\\\"B\\\"===t}function xt(t){return t>14||t<-15}function bt(t,e,r,n){var a=t<0,o=e._tickround,l=r||e.exponentformat||\\\"B\\\",u=e._tickexponent,c=q.getTickFormat(e),f=e.separatethousands;if(n){var h={exponentformat:l,minexponent:e.minexponent,dtick:\\\"none\\\"===e.showexponent?e.dtick:i(t)&&Math.abs(t)||1,range:\\\"none\\\"===e.showexponent?e.range.map(e.r2d):[0,t||1]};vt(h),o=(Number(h._tickround)||0)+4,u=h._tickexponent,e.hoverformat&&(c=e.hoverformat)}if(c)return e._numFormat(c)(t).replace(/-/g,P);var p,d=Math.pow(10,-o)/2;if(\\\"none\\\"===l&&(u=0),(t=Math.abs(t))<d)t=\\\"0\\\",a=!1;else{if(t+=d,u&&(t*=Math.pow(10,-u),o+=u),0===o)t=String(Math.floor(t));else if(o<0){t=(t=String(Math.round(t))).substr(0,t.length+o);for(var v=o;v<0;v++)t+=\\\"0\\\"}else{var g=(t=String(t)).indexOf(\\\".\\\")+1;g&&(t=t.substr(0,g+o).replace(/\\\\.?0+$/,\\\"\\\"))}t=s.numSeparate(t,e._separators,f)}return u&&\\\"hide\\\"!==l&&(mt(l)&&xt(u)&&(l=\\\"power\\\"),p=u<0?P+-u:\\\"power\\\"!==l?\\\"+\\\"+u:String(u),\\\"e\\\"===l||\\\"E\\\"===l?t+=l+p:\\\"power\\\"===l?t+=\\\"×10<sup>\\\"+p+\\\"</sup>\\\":\\\"B\\\"===l&&9===u?t+=\\\"B\\\":mt(l)&&(t+=yt[u/3+5])),a?P+t:t}function _t(t,e){if(t){var r=Object.keys(B).reduce((function(t,r){return-1!==e.indexOf(r)&&B[r].forEach((function(e){t[e]=1})),t}),{});Object.keys(t).forEach((function(e){r[e]||(1===e.length?t[e]=0:delete t[e])}))}}function wt(t,e){for(var r=[],n={},i=0;i<e.length;i++){var a=e[i];n[a.text2]?n[a.text2].push(a.x):n[a.text2]=[a.x]}for(var o in n)r.push(gt(t,s.interp(n[o],.5),o));return r}function Tt(t){return void 0!==t.periodX?t.periodX:t.x}function kt(t){return[t.text,t.x,t.axInfo,t.font,t.fontSize,t.fontColor].join(\\\"_\\\")}function At(t){var e=t.title.font.size,r=(t.title.text.match(u.BR_TAG_ALL)||[]).length;return t.title.hasOwnProperty(\\\"standoff\\\")?r?e*(U+r*V):e*U:r?e*(r+1)*V:e}function Mt(t,e){var r=t.l2p(e);return r>1&&r<t._length-1}function St(t){var e=n.select(t),r=e.select(\\\".text-math-group\\\");return r.empty()?e.select(\\\"text\\\"):r}function Et(t){return t._id+\\\".automargin\\\"}function Lt(t){return Et(t)+\\\".mirror\\\"}function Ct(t){return t._id+\\\".rangeslider\\\"}function Pt(t,e){for(var r=0;r<e.length;r++)-1===t.indexOf(e[r])&&t.push(e[r])}function Ot(t,e,r){var n,i,a=[],o=[],l=t.layout;for(n=0;n<e.length;n++)a.push(q.getFromId(t,e[n]));for(n=0;n<r.length;n++)o.push(q.getFromId(t,r[n]));var u=Object.keys(p),c=[\\\"anchor\\\",\\\"domain\\\",\\\"overlaying\\\",\\\"position\\\",\\\"side\\\",\\\"tickangle\\\",\\\"editType\\\"],f=[\\\"linear\\\",\\\"log\\\"];for(n=0;n<u.length;n++){var h=u[n],d=a[0][h],v=o[0][h],g=!0,y=!1,m=!1;if(\\\"_\\\"!==h.charAt(0)&&\\\"function\\\"!=typeof d&&-1===c.indexOf(h)){for(i=1;i<a.length&&g;i++){var x=a[i][h];\\\"type\\\"===h&&-1!==f.indexOf(d)&&-1!==f.indexOf(x)&&d!==x?y=!0:x!==d&&(g=!1)}for(i=1;i<o.length&&g;i++){var b=o[i][h];\\\"type\\\"===h&&-1!==f.indexOf(v)&&-1!==f.indexOf(b)&&v!==b?m=!0:o[i][h]!==v&&(g=!1)}g&&(y&&(l[a[0]._name].type=\\\"linear\\\"),m&&(l[o[0]._name].type=\\\"linear\\\"),It(l,h,a,o,t._fullLayout._dfltTitle))}}for(n=0;n<t._fullLayout.annotations.length;n++){var _=t._fullLayout.annotations[n];-1!==e.indexOf(_.xref)&&-1!==r.indexOf(_.yref)&&s.swapAttrs(l.annotations[n],[\\\"?\\\"])}}function It(t,e,r,n,i){var a,o=s.nestedProperty,l=o(t[r[0]._name],e).get(),u=o(t[n[0]._name],e).get();for(\\\"title\\\"===e&&(l&&l.text===i.x&&(l.text=i.y),u&&u.text===i.y&&(u.text=i.x)),a=0;a<r.length;a++)o(t,r[a]._name+\\\".\\\"+e).set(u);for(a=0;a<n.length;a++)o(t,n[a]._name+\\\".\\\"+e).set(l)}function Dt(t){return\\\"angularaxis\\\"===t._id}function zt(t,e){for(var r=e._rangebreaks.length,n=0;n<r;n++){var i=e._rangebreaks[n];if(t>=i.min&&t<i.max)return i.max}return t}function Rt(t){return-1!==(t.ticklabelposition||\\\"\\\").indexOf(\\\"inside\\\")}function Ft(t,e){Rt(t._anchorAxis||{})&&t._hideCounterAxisInsideTickLabels&&t._hideCounterAxisInsideTickLabels(e)}function Bt(t,e,r,n){var i,a=\\\"free\\\"===t.anchor||void 0!==t.overlaying&&!1!==t.overlaying?t.overlaying:t._id;i=n?\\\"right\\\"===t.side?e:-e:e,a in r||(r[a]={}),t.side in r[a]||(r[a][t.side]=0),r[a][t.side]+=i}q.getTickFormat=function(t){var e,r,n,i,a,o,s,l;function u(t){return\\\"string\\\"!=typeof t?t:Number(t.replace(\\\"M\\\",\\\"\\\"))*T}function c(t,e){var r=[\\\"L\\\",\\\"D\\\"];if(typeof t==typeof e){if(\\\"number\\\"==typeof t)return t-e;var n=r.indexOf(t.charAt(0)),i=r.indexOf(e.charAt(0));return n===i?Number(t.replace(/(L|D)/g,\\\"\\\"))-Number(e.replace(/(L|D)/g,\\\"\\\")):n-i}return\\\"number\\\"==typeof t?1:-1}function f(t,e){var r=null===e[0],n=null===e[1],i=c(t,e[0])>=0,a=c(t,e[1])<=0;return(r||i)&&(n||a)}if(t.tickformatstops&&t.tickformatstops.length>0)switch(t.type){case\\\"date\\\":case\\\"linear\\\":for(e=0;e<t.tickformatstops.length;e++)if((n=t.tickformatstops[e]).enabled&&(i=t.dtick,a=n.dtickrange,o=void 0,s=void 0,l=void 0,o=u||function(t){return t},s=a[0],l=a[1],(!s&&\\\"number\\\"!=typeof s||o(s)<=o(i))&&(!l&&\\\"number\\\"!=typeof l||o(l)>=o(i)))){r=n;break}break;case\\\"log\\\":for(e=0;e<t.tickformatstops.length;e++)if((n=t.tickformatstops[e]).enabled&&f(t.dtick,n.dtickrange)){r=n;break}}return r?r.value:t.tickformat},q.getSubplots=function(t,e){var r=t._fullLayout._subplots,n=r.cartesian.concat(r.gl2d||[]),i=e?q.findSubplotsWithAxis(n,e):n;return i.sort((function(t,e){var r=t.substr(1).split(\\\"y\\\"),n=e.substr(1).split(\\\"y\\\");return r[0]===n[0]?+r[1]-+n[1]:+r[0]-+n[0]})),i},q.findSubplotsWithAxis=function(t,e){for(var r=new RegExp(\\\"x\\\"===e._id.charAt(0)?\\\"^\\\"+e._id+\\\"y\\\":e._id+\\\"$\\\"),n=[],i=0;i<t.length;i++){var a=t[i];r.test(a)&&n.push(a)}return n},q.makeClipPaths=function(t){var e=t._fullLayout;if(!e._hasOnlyLargeSploms){var r,i,a={_offset:0,_length:e.width,_id:\\\"\\\"},o={_offset:0,_length:e.height,_id:\\\"\\\"},s=q.list(t,\\\"x\\\",!0),l=q.list(t,\\\"y\\\",!0),u=[];for(r=0;r<s.length;r++)for(u.push({x:s[r],y:o}),i=0;i<l.length;i++)0===r&&u.push({x:a,y:l[i]}),u.push({x:s[r],y:l[i]});var c=e._clips.selectAll(\\\".axesclip\\\").data(u,(function(t){return t.x._id+t.y._id}));c.enter().append(\\\"clipPath\\\").classed(\\\"axesclip\\\",!0).attr(\\\"id\\\",(function(t){return\\\"clip\\\"+e._uid+t.x._id+t.y._id})).append(\\\"rect\\\"),c.exit().remove(),c.each((function(t){n.select(this).select(\\\"rect\\\").attr({x:t.x._offset||0,y:t.y._offset||0,width:t.x._length||1,height:t.y._length||1})}))}},q.draw=function(t,e,r){var n=t._fullLayout;\\\"redraw\\\"===e&&n._paper.selectAll(\\\"g.subplot\\\").each((function(t){var e=t[0],r=n._plots[e];if(r){var i=r.xaxis,a=r.yaxis;r.xaxislayer.selectAll(\\\".\\\"+i._id+\\\"tick\\\").remove(),r.yaxislayer.selectAll(\\\".\\\"+a._id+\\\"tick\\\").remove(),r.xaxislayer.selectAll(\\\".\\\"+i._id+\\\"tick2\\\").remove(),r.yaxislayer.selectAll(\\\".\\\"+a._id+\\\"tick2\\\").remove(),r.xaxislayer.selectAll(\\\".\\\"+i._id+\\\"divider\\\").remove(),r.yaxislayer.selectAll(\\\".\\\"+a._id+\\\"divider\\\").remove(),r.minorGridlayer&&r.minorGridlayer.selectAll(\\\"path\\\").remove(),r.gridlayer&&r.gridlayer.selectAll(\\\"path\\\").remove(),r.zerolinelayer&&r.zerolinelayer.selectAll(\\\"path\\\").remove(),n._infolayer.select(\\\".g-\\\"+i._id+\\\"title\\\").remove(),n._infolayer.select(\\\".g-\\\"+a._id+\\\"title\\\").remove()}}));var i=e&&\\\"redraw\\\"!==e?e:q.listIds(t),a=q.list(t).filter((function(t){return t.autoshift})).map((function(t){return t.overlaying}));i.map((function(e){var r=q.getFromId(t,e);if(\\\"sync\\\"===r.tickmode&&r.overlaying){var n=i.findIndex((function(t){return t===r.overlaying}));n>=0&&i.unshift(i.splice(n,1).shift())}}));var o={false:{left:0,right:0}};return s.syncOrAsync(i.map((function(e){return function(){if(e){var n=q.getFromId(t,e);r||(r={}),r.axShifts=o,r.overlayingShiftedAx=a;var i=q.drawOne(t,n,r);return n._shiftPusher&&Bt(n,n._fullDepth||0,o,!0),n._r=n.range.slice(),n._rl=s.simpleMap(n._r,n.r2l),i}}})))},q.drawOne=function(t,e,r){var n,i,l,u=(r=r||{}).axShifts||{},p=r.overlayingShiftedAx||[];e.setScale();var d=t._fullLayout,v=e._id,g=v.charAt(0),y=q.counterLetter(v),m=d._plots[e._mainSubplot];if(m){if(e._shiftPusher=e.autoshift||-1!==p.indexOf(e._id)||-1!==p.indexOf(e.overlaying),e._shiftPusher&\\\"free\\\"===e.anchor){var x=e.linewidth/2||0;\\\"inside\\\"===e.ticks&&(x+=e.ticklen),Bt(e,x,u,!0),Bt(e,e.shift||0,u,!1)}!0===r.skipTitle&&void 0!==e._shift||(e._shift=function(t,e){return t.autoshift?e[t.overlaying][t.side]:t.shift||0}(e,u));var b=m[g+\\\"axislayer\\\"],_=e._mainLinePosition,w=_+=e._shift,T=e._mainMirrorPosition,k=e._vals=q.calcTicks(e),A=[e.mirror,w,T].join(\\\"_\\\");for(n=0;n<k.length;n++)k[n].axInfo=A;e._selections={},e._tickAngles&&(e._prevTickAngles=e._tickAngles),e._tickAngles={},e._depth=null;var M={};if(e.visible){var S,E,L=q.makeTransTickFn(e),C=q.makeTransTickLabelFn(e),P=\\\"inside\\\"===e.ticks,O=\\\"outside\\\"===e.ticks;if(\\\"boundaries\\\"===e.tickson){var I=function(t,e){var r,n=[],i=function(t,e){var r=t.xbnd[e];null!==r&&n.push(s.extendFlat({},t,{x:r}))};if(e.length){for(r=0;r<e.length;r++)i(e[r],0);i(e[r-1],1)}return n}(0,k);E=q.clipEnds(e,I),S=P?E:I}else E=q.clipEnds(e,k),S=P&&\\\"period\\\"!==e.ticklabelmode?E:k;var D,z=e._gridVals=E,R=function(t,e){var r,n,i=[],a=e.length&&e[e.length-1].x<e[0].x,o=function(t,e){var r=t.xbnd[e];null!==r&&i.push(s.extendFlat({},t,{x:r}))};if(t.showdividers&&e.length){for(r=0;r<e.length;r++){var l=e[r];l.text2!==n&&o(l,a?1:0),n=l.text2}o(e[r-1],a?0:1)}return i}(e,k);if(!d._hasOnlyLargeSploms){var F=e._subplotsWith,B={};for(n=0;n<F.length;n++){i=F[n];var N=(l=d._plots[i])[y+\\\"axis\\\"],j=N._mainAxis._id;if(!B[j]){B[j]=1;var U=\\\"x\\\"===g?\\\"M0,\\\"+N._offset+\\\"v\\\"+N._length:\\\"M\\\"+N._offset+\\\",0h\\\"+N._length;q.drawGrid(t,e,{vals:z,counterAxis:N,layer:l.gridlayer.select(\\\".\\\"+v),minorLayer:l.minorGridlayer.select(\\\".\\\"+v),path:U,transFn:L}),q.drawZeroLine(t,e,{counterAxis:N,layer:l.zerolinelayer,path:U,transFn:L})}}}var G=q.getTickSigns(e),Z=q.getTickSigns(e,\\\"minor\\\");if(e.ticks||e.minor&&e.minor.ticks){var Y,W,X,J,K=q.makeTickPath(e,w,G[2]),$=q.makeTickPath(e,w,Z[2],{minor:!0});if(e._anchorAxis&&e.mirror&&!0!==e.mirror?(Y=q.makeTickPath(e,T,G[3]),W=q.makeTickPath(e,T,Z[3],{minor:!0}),X=K+Y,J=$+W):(Y=\\\"\\\",W=\\\"\\\",X=K,J=$),e.showdividers&&O&&\\\"boundaries\\\"===e.tickson){var Q={};for(n=0;n<R.length;n++)Q[R[n].x]=1;D=function(t){return Q[t.x]?Y:X}}else D=function(t){return t.minor?J:X}}if(q.drawTicks(t,e,{vals:S,layer:b,path:D,transFn:L}),\\\"allticks\\\"===e.mirror){var tt=Object.keys(e._linepositions||{});for(n=0;n<tt.length;n++){i=tt[n],l=d._plots[i];var et=e._linepositions[i]||[],rt=et[0],nt=et[1],it=et[2],at=q.makeTickPath(e,rt,it?G[0]:Z[0],{minor:it})+q.makeTickPath(e,nt,it?G[1]:Z[1],{minor:it});q.drawTicks(t,e,{vals:S,layer:l[g+\\\"axislayer\\\"],path:at,transFn:L})}}var ot=[];if(ot.push((function(){return q.drawLabels(t,e,{vals:k,layer:b,plotinfo:l,transFn:C,labelFns:q.makeLabelFns(e,w)})})),\\\"multicategory\\\"===e.type){var st={x:2,y:10}[g];ot.push((function(){var r={x:\\\"height\\\",y:\\\"width\\\"}[g],n=ut()[r]+st+(e._tickAngles[v+\\\"tick\\\"]?e.tickfont.size*V:0);return q.drawLabels(t,e,{vals:wt(e,k),layer:b,cls:v+\\\"tick2\\\",repositionOnUpdate:!0,secondary:!0,transFn:L,labelFns:q.makeLabelFns(e,w+n*G[4])})})),ot.push((function(){return e._depth=G[4]*(ut(\\\"tick2\\\")[e.side]-w),function(t,e,r){var n=e._id+\\\"divider\\\",i=r.vals,a=r.layer.selectAll(\\\"path.\\\"+n).data(i,kt);a.exit().remove(),a.enter().insert(\\\"path\\\",\\\":first-child\\\").classed(n,1).classed(\\\"crisp\\\",1).call(f.stroke,e.dividercolor).style(\\\"stroke-width\\\",h.crispRound(t,e.dividerwidth,1)+\\\"px\\\"),a.attr(\\\"transform\\\",r.transFn).attr(\\\"d\\\",r.path)}(t,e,{vals:R,layer:b,path:q.makeTickPath(e,w,G[4],{len:e._depth}),transFn:L})}))}else e.title.hasOwnProperty(\\\"standoff\\\")&&ot.push((function(){e._depth=G[4]*(ut()[e.side]-w)}));var lt=o.getComponentMethod(\\\"rangeslider\\\",\\\"isVisible\\\")(e);return r.skipTitle||lt&&\\\"bottom\\\"===e.side||ot.push((function(){return function(t,e){var r,n=t._fullLayout,i=e._id,a=i.charAt(0),o=e.title.font.size;if(e.title.hasOwnProperty(\\\"standoff\\\"))r=e._depth+e.title.standoff+At(e);else{var s=Rt(e);if(\\\"multicategory\\\"===e.type)r=e._depth;else{var l=1.5*o;s&&(l=.5*o,\\\"outside\\\"===e.ticks&&(l+=e.ticklen)),r=10+l+(e.linewidth?e.linewidth-1:0)}s||(r+=\\\"x\\\"===a?\\\"top\\\"===e.side?o*(e.showticklabels?1:0):o*(e.showticklabels?1.5:.5):\\\"right\\\"===e.side?o*(e.showticklabels?1:.5):o*(e.showticklabels?.5:0))}var u,f,p,d,v=q.getPxPosition(t,e);if(\\\"x\\\"===a?(f=e._offset+e._length/2,p=\\\"top\\\"===e.side?v-r:v+r):(p=e._offset+e._length/2,f=\\\"right\\\"===e.side?v+r:v-r,u={rotate:\\\"-90\\\",offset:0}),\\\"multicategory\\\"!==e.type){var g=e._selections[e._id+\\\"tick\\\"];if(d={selection:g,side:e.side},g&&g.node()&&g.node().parentNode){var y=h.getTranslate(g.node().parentNode);d.offsetLeft=y.x,d.offsetTop=y.y}e.title.hasOwnProperty(\\\"standoff\\\")&&(d.pad=0)}return e._titleStandoff=r,c.draw(t,i+\\\"title\\\",{propContainer:e,propName:e._name+\\\".title.text\\\",placeholder:n._dfltTitle[a],avoid:d,transform:u,attributes:{x:f,y:p,\\\"text-anchor\\\":\\\"middle\\\"}})}(t,e)})),ot.push((function(){var r,n,i,s,l=e.side.charAt(0),u=H[e.side].charAt(0),c=q.getPxPosition(t,e),f=O?e.ticklen:0;(e.automargin||lt||e._shiftPusher)&&(\\\"multicategory\\\"===e.type?r=ut(\\\"tick2\\\"):(r=ut(),\\\"x\\\"===g&&\\\"b\\\"===l&&(e._depth=Math.max(r.width>0?r.bottom-c:0,f))));var h=0,p=0;if(e._shiftPusher&&(h=Math.max(f,r.height>0?\\\"l\\\"===l?c-r.left:r.right-c:0),e.title.text!==d._dfltTitle[g]&&(p=(e._titleStandoff||0)+(e._titleScoot||0),\\\"l\\\"===l&&(p+=At(e))),e._fullDepth=Math.max(h,p)),e.automargin){n={x:0,y:0,r:0,l:0,t:0,b:0};var v=[0,1],m=\\\"number\\\"==typeof e._shift?e._shift:0;if(\\\"x\\\"===g){if(\\\"b\\\"===l?n[l]=e._depth:(n[l]=e._depth=Math.max(r.width>0?c-r.top:0,f),v.reverse()),r.width>0){var x=r.right-(e._offset+e._length);x>0&&(n.xr=1,n.r=x);var b=e._offset-r.left;b>0&&(n.xl=0,n.l=b)}}else if(\\\"l\\\"===l?(e._depth=Math.max(r.height>0?c-r.left:0,f),n[l]=e._depth-m):(e._depth=Math.max(r.height>0?r.right-c:0,f),n[l]=e._depth+m,v.reverse()),r.height>0){var _=r.bottom-(e._offset+e._length);_>0&&(n.yb=0,n.b=_);var w=e._offset-r.top;w>0&&(n.yt=1,n.t=w)}n[y]=\\\"free\\\"===e.anchor?e.position:e._anchorAxis.domain[v[0]],e.title.text!==d._dfltTitle[g]&&(n[l]+=At(e)+(e.title.standoff||0)),e.mirror&&\\\"free\\\"!==e.anchor&&((i={x:0,y:0,r:0,l:0,t:0,b:0})[u]=e.linewidth,e.mirror&&!0!==e.mirror&&(i[u]+=f),!0===e.mirror||\\\"ticks\\\"===e.mirror?i[y]=e._anchorAxis.domain[v[1]]:\\\"all\\\"!==e.mirror&&\\\"allticks\\\"!==e.mirror||(i[y]=[e._counterDomainMin,e._counterDomainMax][v[1]]))}lt&&(s=o.getComponentMethod(\\\"rangeslider\\\",\\\"autoMarginOpts\\\")(t,e)),\\\"string\\\"==typeof e.automargin&&(_t(n,e.automargin),_t(i,e.automargin)),a.autoMargin(t,Et(e),n),a.autoMargin(t,Lt(e),i),a.autoMargin(t,Ct(e),s)})),s.syncOrAsync(ot)}}function ut(t){var r=v+(t||\\\"tick\\\");return M[r]||(M[r]=function(t,e){var r,n,i,a;return t._selections[e].size()?(r=1/0,n=-1/0,i=1/0,a=-1/0,t._selections[e].each((function(){var t=St(this),e=h.bBox(t.node().parentNode);r=Math.min(r,e.top),n=Math.max(n,e.bottom),i=Math.min(i,e.left),a=Math.max(a,e.right)}))):(r=0,n=0,i=0,a=0),{top:r,bottom:n,left:i,right:a,height:n-r,width:a-i}}(e,r)),M[r]}},q.getTickSigns=function(t,e){var r=t._id.charAt(0),n={x:\\\"top\\\",y:\\\"right\\\"}[r],i=t.side===n?1:-1,a=[-1,1,i,-i];return\\\"inside\\\"!==(e?(t.minor||{}).ticks:t.ticks)==(\\\"x\\\"===r)&&(a=a.map((function(t){return-t}))),t.side&&a.push({l:-1,t:-1,r:1,b:1}[t.side.charAt(0)]),a},q.makeTransTickFn=function(t){return\\\"x\\\"===t._id.charAt(0)?function(e){return l(t._offset+t.l2p(e.x),0)}:function(e){return l(0,t._offset+t.l2p(e.x))}},q.makeTransTickLabelFn=function(t){var e=function(t){var e=t.ticklabelposition||\\\"\\\",r=function(t){return-1!==e.indexOf(t)},n=r(\\\"top\\\"),i=r(\\\"left\\\"),a=r(\\\"right\\\"),o=r(\\\"bottom\\\"),s=r(\\\"inside\\\"),l=o||i||n||a;if(!l&&!s)return[0,0];var u=t.side,c=l?(t.tickwidth||0)/2:0,f=3,h=t.tickfont?t.tickfont.size:12;return(o||n)&&(c+=h*U,f+=(t.linewidth||0)/2),(i||a)&&(c+=(t.linewidth||0)/2,f+=3),s&&\\\"top\\\"===u&&(f-=h*(1-U)),(i||n)&&(c=-c),\\\"bottom\\\"!==u&&\\\"right\\\"!==u||(f=-f),[l?c:0,s?f:0]}(t),r=e[0],n=e[1];return\\\"x\\\"===t._id.charAt(0)?function(e){return l(r+t._offset+t.l2p(Tt(e)),n)}:function(e){return l(n,r+t._offset+t.l2p(Tt(e)))}},q.makeTickPath=function(t,e,r,n){n||(n={});var i=n.minor;if(i&&!t.minor)return\\\"\\\";var a=void 0!==n.len?n.len:i?t.minor.ticklen:t.ticklen,o=t._id.charAt(0),s=(t.linewidth||1)/2;return\\\"x\\\"===o?\\\"M0,\\\"+(e+s*r)+\\\"v\\\"+a*r:\\\"M\\\"+(e+s*r)+\\\",0h\\\"+a*r},q.makeLabelFns=function(t,e,r){var n=t.ticklabelposition||\\\"\\\",a=function(t){return-1!==n.indexOf(t)},o=a(\\\"top\\\"),l=a(\\\"left\\\"),u=a(\\\"right\\\"),c=a(\\\"bottom\\\")||l||o||u,f=a(\\\"inside\\\"),h=\\\"inside\\\"===n&&\\\"inside\\\"===t.ticks||!f&&\\\"outside\\\"===t.ticks&&\\\"boundaries\\\"!==t.tickson,p=0,d=0,v=h?t.ticklen:0;if(f?v*=-1:c&&(v=0),h&&(p+=v,r)){var g=s.deg2rad(r);p=v*Math.cos(g)+1,d=v*Math.sin(g)}t.showticklabels&&(h||t.showline)&&(p+=.2*t.tickfont.size);var y,m,x,b,_,w={labelStandoff:p+=(t.linewidth||1)/2*(f?-1:1),labelShift:d},T=0,k=t.side,A=t._id.charAt(0),M=t.tickangle;if(\\\"x\\\"===A)b=(_=!f&&\\\"bottom\\\"===k||f&&\\\"top\\\"===k)?1:-1,f&&(b*=-1),y=d*b,m=e+p*b,x=_?1:-.2,90===Math.abs(M)&&(f?x+=j:x=-90===M&&\\\"bottom\\\"===k?U:90===M&&\\\"top\\\"===k?j:.5,T=j/2*(M/90)),w.xFn=function(t){return t.dx+y+T*t.fontSize},w.yFn=function(t){return t.dy+m+t.fontSize*x},w.anchorFn=function(t,e){if(c){if(l)return\\\"end\\\";if(u)return\\\"start\\\"}return i(e)&&0!==e&&180!==e?e*b<0!==f?\\\"end\\\":\\\"start\\\":\\\"middle\\\"},w.heightFn=function(e,r,n){return r<-60||r>60?-.5*n:\\\"top\\\"===t.side!==f?-n:0};else if(\\\"y\\\"===A){if(b=(_=!f&&\\\"left\\\"===k||f&&\\\"right\\\"===k)?1:-1,f&&(b*=-1),y=p,m=d*b,x=0,f||90!==Math.abs(M)||(x=-90===M&&\\\"left\\\"===k||90===M&&\\\"right\\\"===k?U:.5),f){var S=i(M)?+M:0;if(0!==S){var E=s.deg2rad(S);T=Math.abs(Math.sin(E))*U*b,x=0}}w.xFn=function(t){return t.dx+e-(y+t.fontSize*x)*b+T*t.fontSize},w.yFn=function(t){return t.dy+m+t.fontSize*j},w.anchorFn=function(t,e){return i(e)&&90===Math.abs(e)?\\\"middle\\\":_?\\\"end\\\":\\\"start\\\"},w.heightFn=function(e,r,n){return\\\"right\\\"===t.side&&(r*=-1),r<-30?-n:r<30?-.5*n:0}}return w},q.drawTicks=function(t,e,r){r=r||{};var i=e._id+\\\"tick\\\",a=[].concat(e.minor&&e.minor.ticks?r.vals.filter((function(t){return t.minor&&!t.noTick})):[]).concat(e.ticks?r.vals.filter((function(t){return!t.minor&&!t.noTick})):[]),o=r.layer.selectAll(\\\"path.\\\"+i).data(a,kt);o.exit().remove(),o.enter().append(\\\"path\\\").classed(i,1).classed(\\\"ticks\\\",1).classed(\\\"crisp\\\",!1!==r.crisp).each((function(t){return f.stroke(n.select(this),t.minor?e.minor.tickcolor:e.tickcolor)})).style(\\\"stroke-width\\\",(function(r){return h.crispRound(t,r.minor?e.minor.tickwidth:e.tickwidth,1)+\\\"px\\\"})).attr(\\\"d\\\",r.path).style(\\\"display\\\",null),Ft(e,[R]),o.attr(\\\"transform\\\",r.transFn)},q.drawGrid=function(t,e,r){if(r=r||{},\\\"sync\\\"!==e.tickmode){var i=e._id+\\\"grid\\\",a=e.minor&&e.minor.showgrid,o=a?r.vals.filter((function(t){return t.minor})):[],s=e.showgrid?r.vals.filter((function(t){return!t.minor})):[],l=r.counterAxis;if(l&&q.shouldShowZeroLine(t,e,l))for(var u=\\\"array\\\"===e.tickmode,c=0;c<s.length;c++){var p=s[c].x;if(u?!p:Math.abs(p)<e.dtick/100){if(s=s.slice(0,c).concat(s.slice(c+1)),!u)break;c--}}e._gw=h.crispRound(t,e.gridwidth,1);for(var d=a?h.crispRound(t,e.minor.gridwidth,1):0,v=r.layer,g=r.minorLayer,y=1;y>=0;y--){var m=y?v:g;if(m){var x=m.selectAll(\\\"path.\\\"+i).data(y?s:o,kt);x.exit().remove(),x.enter().append(\\\"path\\\").classed(i,1).classed(\\\"crisp\\\",!1!==r.crisp),x.attr(\\\"transform\\\",r.transFn).attr(\\\"d\\\",r.path).each((function(t){return f.stroke(n.select(this),t.minor?e.minor.gridcolor:e.gridcolor||\\\"#ddd\\\")})).style(\\\"stroke-dasharray\\\",(function(t){return h.dashStyle(t.minor?e.minor.griddash:e.griddash,t.minor?e.minor.gridwidth:e.gridwidth)})).style(\\\"stroke-width\\\",(function(t){return(t.minor?d:e._gw)+\\\"px\\\"})).style(\\\"display\\\",null),\\\"function\\\"==typeof r.path&&x.attr(\\\"d\\\",r.path)}}Ft(e,[D,z])}},q.drawZeroLine=function(t,e,r){r=r||r;var n=e._id+\\\"zl\\\",i=q.shouldShowZeroLine(t,e,r.counterAxis),a=r.layer.selectAll(\\\"path.\\\"+n).data(i?[{x:0,id:e._id}]:[]);a.exit().remove(),a.enter().append(\\\"path\\\").classed(n,1).classed(\\\"zl\\\",1).classed(\\\"crisp\\\",!1!==r.crisp).each((function(){r.layer.selectAll(\\\"path\\\").sort((function(t,e){return Y(t.id,e.id)}))})),a.attr(\\\"transform\\\",r.transFn).attr(\\\"d\\\",r.path).call(f.stroke,e.zerolinecolor||f.defaultLine).style(\\\"stroke-width\\\",h.crispRound(t,e.zerolinewidth,e._gw||1)+\\\"px\\\").style(\\\"display\\\",null),Ft(e,[I])},q.drawLabels=function(t,e,r){r=r||{};var a=t._fullLayout,o=e._id,c=o.charAt(0),f=r.cls||o+\\\"tick\\\",p=r.vals.filter((function(t){return t.text})),d=r.labelFns,v=r.secondary?0:e.tickangle,g=(e._prevTickAngles||{})[f],y=r.layer.selectAll(\\\"g.\\\"+f).data(e.showticklabels?p:[],kt),m=[];function x(t,a){t.each((function(t){var o=n.select(this),s=o.select(\\\".text-math-group\\\"),c=d.anchorFn(t,a),f=r.transFn.call(o.node(),t)+(i(a)&&0!=+a?\\\" rotate(\\\"+a+\\\",\\\"+d.xFn(t)+\\\",\\\"+(d.yFn(t)-t.fontSize/2)+\\\")\\\":\\\"\\\"),p=u.lineCount(o),v=V*t.fontSize,g=d.heightFn(t,i(a)?+a:0,(p-1)*v);if(g&&(f+=l(0,g)),s.empty()){var y=o.select(\\\"text\\\");y.attr({transform:f,\\\"text-anchor\\\":c}),y.style(\\\"opacity\\\",1),e._adjustTickLabelsOverflow&&e._adjustTickLabelsOverflow()}else{var m=h.bBox(s.node()).width*{end:-.5,start:.5}[c];s.attr(\\\"transform\\\",f+l(m,0))}}))}y.enter().append(\\\"g\\\").classed(f,1).append(\\\"text\\\").attr(\\\"text-anchor\\\",\\\"middle\\\").each((function(e){var r=n.select(this),i=t._promises.length;r.call(u.positionText,d.xFn(e),d.yFn(e)).call(h.font,e.font,e.fontSize,e.fontColor).text(e.text).call(u.convertToTspans,t),t._promises[i]?m.push(t._promises.pop().then((function(){x(r,v)}))):x(r,v)})),Ft(e,[F]),y.exit().remove(),r.repositionOnUpdate&&y.each((function(t){n.select(this).select(\\\"text\\\").call(u.positionText,d.xFn(t),d.yFn(t))})),e._adjustTickLabelsOverflow=function(){var r=e.ticklabeloverflow;if(r&&\\\"allow\\\"!==r){var i=-1!==r.indexOf(\\\"hide\\\"),o=\\\"x\\\"===e._id.charAt(0),l=0,u=o?t._fullLayout.width:t._fullLayout.height;if(-1!==r.indexOf(\\\"domain\\\")){var c=s.simpleMap(e.range,e.r2l);l=e.l2p(c[0])+e._offset,u=e.l2p(c[1])+e._offset}var f=Math.min(l,u),p=Math.max(l,u),d=e.side,v=1/0,g=-1/0;for(var m in y.each((function(t){var r=n.select(this);if(r.select(\\\".text-math-group\\\").empty()){var a=h.bBox(r.node()),s=0;o?(a.right>p||a.left<f)&&(s=1):(a.bottom>p||a.top+(e.tickangle?0:t.fontSize/4)<f)&&(s=1);var l=r.select(\\\"text\\\");s?i&&l.style(\\\"opacity\\\",0):(l.style(\\\"opacity\\\",1),v=\\\"bottom\\\"===d||\\\"right\\\"===d?Math.min(v,o?a.top:a.left):-1/0,g=\\\"top\\\"===d||\\\"left\\\"===d?Math.max(g,o?a.bottom:a.right):1/0)}})),a._plots){var x=a._plots[m];if(e._id===x.xaxis._id||e._id===x.yaxis._id){var b=o?x.yaxis:x.xaxis;b&&(b[\\\"_visibleLabelMin_\\\"+e._id]=v,b[\\\"_visibleLabelMax_\\\"+e._id]=g)}}}},e._hideCounterAxisInsideTickLabels=function(t){var r=\\\"x\\\"===e._id.charAt(0),i=[];for(var o in a._plots){var s=a._plots[o];e._id!==s.xaxis._id&&e._id!==s.yaxis._id||i.push(r?s.yaxis:s.xaxis)}i.forEach((function(r,i){r&&Rt(r)&&(t||[I,z,D,R,F]).forEach((function(t){var o=\\\"tick\\\"===t.K&&\\\"text\\\"===t.L&&\\\"period\\\"===e.ticklabelmode,s=a._plots[e._mainSubplot];(t.K===I.K?s.zerolinelayer.selectAll(\\\".\\\"+e._id+\\\"zl\\\"):t.K===z.K?s.minorGridlayer.selectAll(\\\".\\\"+e._id):t.K===D.K?s.gridlayer.selectAll(\\\".\\\"+e._id):s[e._id.charAt(0)+\\\"axislayer\\\"]).each((function(){var a=n.select(this);t.L&&(a=a.selectAll(t.L)),a.each((function(a){var s=e.l2p(o?Tt(a):a.x)+e._offset,l=n.select(this);s<e[\\\"_visibleLabelMax_\\\"+r._id]&&s>e[\\\"_visibleLabelMin_\\\"+r._id]?l.style(\\\"display\\\",\\\"none\\\"):\\\"tick\\\"!==t.K||i||l.style(\\\"display\\\",null)}))}))}))}))},x(y,g+1?g:v);var b=null;e._selections&&(e._selections[f]=y);var _=[function(){return m.length&&Promise.all(m)}];e.automargin&&a._redrawFromAutoMarginCount&&90===g?(b=90,_.push((function(){x(y,g)}))):_.push((function(){if(x(y,v),p.length&&\\\"x\\\"===c&&!i(v)&&(\\\"log\\\"!==e.type||\\\"D\\\"!==String(e.dtick).charAt(0))){b=0;var t,n=0,a=[];if(y.each((function(t){n=Math.max(n,t.fontSize);var r=e.l2p(t.x),i=St(this),o=h.bBox(i.node());a.push({top:0,bottom:10,height:10,left:r-o.width/2,right:r+o.width/2+2,width:o.width+2})})),\\\"boundaries\\\"!==e.tickson&&!e.showdividers||r.secondary){var o=p.length,l=Math.abs((p[o-1].x-p[0].x)*e._m)/(o-1),u=e.ticklabelposition||\\\"\\\",f=function(t){return-1!==u.indexOf(t)},d=f(\\\"top\\\"),g=f(\\\"left\\\"),m=f(\\\"right\\\"),_=f(\\\"bottom\\\")||g||d||m?(e.tickwidth||0)+6:0,w=l<2.5*n||\\\"multicategory\\\"===e.type||\\\"realaxis\\\"===e._name;for(t=0;t<a.length-1;t++)if(s.bBoxIntersect(a[t],a[t+1],_)){b=w?90:30;break}}else{var T=2;for(e.ticks&&(T+=e.tickwidth/2),t=0;t<a.length;t++){var k=p[t].xbnd,A=a[t];if(null!==k[0]&&A.left-e.l2p(k[0])<T||null!==k[1]&&e.l2p(k[1])-A.right<T){b=90;break}}}b&&x(y,b)}})),e._tickAngles&&_.push((function(){e._tickAngles[f]=null===b?i(v)?v:0:b}));var w=e._anchorAxis;w&&w.autorange&&Rt(e)&&!W(a,e._id)&&(a._insideTickLabelsAutorange||(a._insideTickLabelsAutorange={}),a._insideTickLabelsAutorange[w._name+\\\".autorange\\\"]=w.autorange,_.push((function(){y.each((function(t,r){var n=St(this);n.select(\\\".text-math-group\\\").empty()&&(e._vals[r].bb=h.bBox(n.node()))}))})));var T=s.syncOrAsync(_);return T&&T.then&&t._promises.push(T),T},q.getPxPosition=function(t,e){var r,n=t._fullLayout._size,i=e._id.charAt(0),a=e.side;return\\\"free\\\"!==e.anchor?r=e._anchorAxis:\\\"x\\\"===i?r={_offset:n.t+(1-(e.position||0))*n.h,_length:0}:\\\"y\\\"===i&&(r={_offset:n.l+(e.position||0)*n.w+e._shift,_length:0}),\\\"top\\\"===a||\\\"left\\\"===a?r._offset:\\\"bottom\\\"===a||\\\"right\\\"===a?r._offset+r._length:void 0},q.shouldShowZeroLine=function(t,e,r){var n=s.simpleMap(e.range,e.r2l);return n[0]*n[1]<=0&&e.zeroline&&(\\\"linear\\\"===e.type||\\\"-\\\"===e.type)&&!(e.rangebreaks&&e.maskBreaks(0)===O)&&(Mt(e,0)||!function(t,e,r,n){var i=r._mainAxis;if(i){var a=t._fullLayout,o=e._id.charAt(0),s=q.counterLetter(e._id),l=e._offset+(Math.abs(n[0])<Math.abs(n[1])==(\\\"x\\\"===o)?0:e._length),u=a._plots[r._mainSubplot];if(!(u.mainplotinfo||u).overlays.length)return p(r);for(var c=q.list(t,s),f=0;f<c.length;f++){var h=c[f];if(h._mainAxis===i&&p(h))return!0}}function p(t){if(!t.showline||!t.linewidth)return!1;var r=Math.max((t.linewidth+e.zerolinewidth)/2,1);function n(t){return\\\"number\\\"==typeof t&&Math.abs(t-l)<r}if(n(t._mainLinePosition)||n(t._mainMirrorPosition))return!0;var i=t._linepositions||{};for(var a in i)if(n(i[a][0])||n(i[a][1]))return!0}}(t,e,r,n)||function(t,e){for(var r=t._fullData,n=e._mainSubplot,i=e._id.charAt(0),a=0;a<r.length;a++){var s=r[a];if(!0===s.visible&&s.xaxis+s.yaxis===n){if(o.traceIs(s,\\\"bar-like\\\")&&s.orientation==={x:\\\"h\\\",y:\\\"v\\\"}[i])return!0;if(s.fill&&s.fill.charAt(s.fill.length-1)===i)return!0}}return!1}(t,e))},q.clipEnds=function(t,e){return e.filter((function(e){return Mt(t,e.x)}))},q.allowAutoMargin=function(t){for(var e=q.list(t,\\\"\\\",!0),r=0;r<e.length;r++){var n=e[r];n.automargin&&(a.allowAutoMargin(t,Et(n)),n.mirror&&a.allowAutoMargin(t,Lt(n))),o.getComponentMethod(\\\"rangeslider\\\",\\\"isVisible\\\")(n)&&a.allowAutoMargin(t,Ct(n))}},q.swap=function(t,e){for(var r=function(t,e){var r,n,i=[];for(r=0;r<e.length;r++){var a=[],o=t._fullData[e[r]].xaxis,s=t._fullData[e[r]].yaxis;if(o&&s){for(n=0;n<i.length;n++)-1===i[n].x.indexOf(o)&&-1===i[n].y.indexOf(s)||a.push(n);if(a.length){var l,u=i[a[0]];if(a.length>1)for(n=1;n<a.length;n++)l=i[a[n]],Pt(u.x,l.x),Pt(u.y,l.y);Pt(u.x,[o]),Pt(u.y,[s])}else i.push({x:[o],y:[s]})}}return i}(t,e),n=0;n<r.length;n++)Ot(t,r[n].x,r[n].y)}},4322:function(t,e,r){\\\"use strict\\\";var n=r(92770),i=r(71828),a=r(50606).BADNUM,o=i.isArrayOrTypedArray,s=i.isDateTime,l=i.cleanNumber,u=Math.round;function c(t,e){return e?n(t):\\\"number\\\"==typeof t}function f(t){return Math.max(1,(t-1)/1e3)}t.exports=function(t,e,r){var i=t,h=r.noMultiCategory;if(o(i)&&!i.length)return\\\"-\\\";if(!h&&function(t){return o(t[0])&&o(t[1])}(i))return\\\"multicategory\\\";if(h&&Array.isArray(i[0])){for(var p=[],d=0;d<i.length;d++)if(o(i[d]))for(var v=0;v<i[d].length;v++)p.push(i[d][v]);i=p}if(function(t,e){for(var r=t.length,i=f(r),a=0,o=0,l={},c=0;c<r;c+=i){var h=t[u(c)],p=String(h);l[p]||(l[p]=1,s(h,e)&&a++,n(h)&&o++)}return a>2*o}(i,e))return\\\"date\\\";var g=\\\"strict\\\"!==r.autotypenumbers;return function(t,e){for(var r=t.length,n=f(r),i=0,o=0,s={},c=0;c<r;c+=n){var h=t[u(c)],p=String(h);if(!s[p]){s[p]=1;var d=typeof h;\\\"boolean\\\"===d?o++:(e?l(h)!==a:\\\"number\\\"===d)?i++:\\\"string\\\"===d&&o++}}return o>2*i}(i,g)?\\\"category\\\":function(t,e){for(var r=t.length,n=0;n<r;n++)if(c(t[n],e))return!0;return!1}(i,g)?\\\"linear\\\":\\\"-\\\"}},71453:function(t,e,r){\\\"use strict\\\";var n=r(92770),i=r(73972),a=r(71828),o=r(44467),s=r(85501),l=r(13838),u=r(26218),c=r(38701),f=r(96115),h=r(89426),p=r(15258),d=r(92128),v=r(21994),g=r(85555).WEEKDAY_PATTERN,y=r(85555).HOUR_PATTERN;function m(t,e,r){function i(r,n){return a.coerce(t,e,l.rangebreaks,r,n)}if(i(\\\"enabled\\\")){var o=i(\\\"bounds\\\");if(o&&o.length>=2){var s,u,c=\\\"\\\";if(2===o.length)for(s=0;s<2;s++)if(u=b(o[s])){c=g;break}var f=i(\\\"pattern\\\",c);if(f===g)for(s=0;s<2;s++)(u=b(o[s]))&&(e.bounds[s]=o[s]=u-1);if(f)for(s=0;s<2;s++)switch(u=o[s],f){case g:if(!n(u))return void(e.enabled=!1);if((u=+u)!==Math.floor(u)||u<0||u>=7)return void(e.enabled=!1);e.bounds[s]=o[s]=u;break;case y:if(!n(u))return void(e.enabled=!1);if((u=+u)<0||u>24)return void(e.enabled=!1);e.bounds[s]=o[s]=u}if(!1===r.autorange){var h=r.range;if(h[0]<h[1]){if(o[0]<h[0]&&o[1]>h[1])return void(e.enabled=!1)}else if(o[0]>h[0]&&o[1]<h[1])return void(e.enabled=!1)}}else{var p=i(\\\"values\\\");if(!p||!p.length)return void(e.enabled=!1);i(\\\"dvalue\\\")}}}t.exports=function(t,e,r,n,y){var x,b=n.letter,_=n.font||{},w=n.splomStash||{},T=r(\\\"visible\\\",!n.visibleDflt),k=e._template||{},A=e.type||k.type||\\\"-\\\";\\\"date\\\"===A&&(i.getComponentMethod(\\\"calendars\\\",\\\"handleDefaults\\\")(t,e,\\\"calendar\\\",n.calendar),n.noTicklabelmode||(x=r(\\\"ticklabelmode\\\")));var M=\\\"\\\";n.noTicklabelposition&&\\\"multicategory\\\"!==A||(M=a.coerce(t,e,{ticklabelposition:{valType:\\\"enumerated\\\",dflt:\\\"outside\\\",values:\\\"period\\\"===x?[\\\"outside\\\",\\\"inside\\\"]:\\\"x\\\"===b?[\\\"outside\\\",\\\"inside\\\",\\\"outside left\\\",\\\"inside left\\\",\\\"outside right\\\",\\\"inside right\\\"]:[\\\"outside\\\",\\\"inside\\\",\\\"outside top\\\",\\\"inside top\\\",\\\"outside bottom\\\",\\\"inside bottom\\\"]}},\\\"ticklabelposition\\\")),n.noTicklabeloverflow||r(\\\"ticklabeloverflow\\\",-1!==M.indexOf(\\\"inside\\\")?\\\"hide past domain\\\":\\\"category\\\"===A||\\\"multicategory\\\"===A?\\\"allow\\\":\\\"hide past div\\\"),v(e,y);var S=!e.isValidRange(t.range);S&&n.reverseDflt&&(S=\\\"reversed\\\"),!r(\\\"autorange\\\",S)||\\\"linear\\\"!==A&&\\\"-\\\"!==A||r(\\\"rangemode\\\"),r(\\\"range\\\"),e.cleanRange(),p(t,e,r,n),\\\"category\\\"===A||n.noHover||r(\\\"hoverformat\\\");var E=r(\\\"color\\\"),L=E!==l.color.dflt?E:_.color,C=w.label||y._dfltTitle[b];if(h(t,e,r,A,n),!T)return e;r(\\\"title.text\\\",C),a.coerceFont(r,\\\"title.font\\\",{family:_.family,size:a.bigFont(_.size),color:L}),u(t,e,r,A);var P=n.hasMinor;if(P&&(o.newContainer(e,\\\"minor\\\"),u(t,e,r,A,{isMinor:!0})),f(t,e,r,A,n),c(t,e,r,n),P){var O=n.isMinor;n.isMinor=!0,c(t,e,r,n),n.isMinor=O}d(t,e,r,{dfltColor:E,bgColor:n.bgColor,showGrid:n.showGrid,hasMinor:P,attributes:l}),!P||e.minor.ticks||e.minor.showgrid||delete e.minor,(e.showline||e.ticks)&&r(\\\"mirror\\\");var I,D=\\\"multicategory\\\"===A;if(n.noTickson||\\\"category\\\"!==A&&!D||!e.ticks&&!e.showgrid||(D&&(I=\\\"boundaries\\\"),\\\"boundaries\\\"===r(\\\"tickson\\\",I)&&delete e.ticklabelposition),D&&r(\\\"showdividers\\\")&&(r(\\\"dividercolor\\\"),r(\\\"dividerwidth\\\")),\\\"date\\\"===A)if(s(t,e,{name:\\\"rangebreaks\\\",inclusionAttr:\\\"enabled\\\",handleItemDefaults:m}),e.rangebreaks.length){for(var z=0;z<e.rangebreaks.length;z++)if(e.rangebreaks[z].pattern===g){e._hasDayOfWeekBreaks=!0;break}if(v(e,y),y._has(\\\"scattergl\\\")||y._has(\\\"splom\\\"))for(var R=0;R<n.data.length;R++){var F=n.data[R];\\\"scattergl\\\"!==F.type&&\\\"splom\\\"!==F.type||(F.visible=!1,a.warn(F.type+\\\" traces do not work on axes with rangebreaks. Setting trace \\\"+F.index+\\\" to `visible: false`.\\\"))}}else delete e.rangebreaks;return e};var x={sun:1,mon:2,tue:3,wed:4,thu:5,fri:6,sat:7};function b(t){if(\\\"string\\\"==typeof t)return x[t.substr(0,3).toLowerCase()]}},12663:function(t,e,r){\\\"use strict\\\";var n=r(31562),i=n.FORMAT_LINK,a=n.DATE_FORMAT_LINK;function o(t,e){return[\\\"Sets the \\\"+t+\\\" formatting rule\\\"+(e?\\\"for `\\\"+e+\\\"` \\\":\\\"\\\"),\\\"using d3 formatting mini-languages\\\",\\\"which are very similar to those in Python. For numbers, see: \\\"+i+\\\".\\\"].join(\\\" \\\")}function s(t,e){return o(t,e)+[\\\" And for dates see: \\\"+a+\\\".\\\",\\\"We add two items to d3's date formatter:\\\",\\\"*%h* for half of the year as a decimal number as well as\\\",\\\"*%{n}f* for fractional seconds\\\",\\\"with n digits. For example, *2016-10-13 09:15:23.456* with tickformat\\\",\\\"*%H~%M~%S.%2f* would display *09~15~23.46*\\\"].join(\\\" \\\")}t.exports={axisHoverFormat:function(t,e){return{valType:\\\"string\\\",dflt:\\\"\\\",editType:\\\"none\\\",description:(e?o:s)(\\\"hover text\\\",t)+[\\\"By default the values are formatted using \\\"+(e?\\\"generic number format\\\":\\\"`\\\"+t+\\\"axis.hoverformat`\\\")+\\\".\\\"].join(\\\" \\\")}},descriptionOnlyNumbers:o,descriptionWithDates:s}},41675:function(t,e,r){\\\"use strict\\\";var n=r(73972),i=r(85555);function a(t,e){if(e&&e.length)for(var r=0;r<e.length;r++)if(e[r][t])return!0;return!1}e.id2name=function(t){if(\\\"string\\\"==typeof t&&t.match(i.AX_ID_PATTERN)){var e=t.split(\\\" \\\")[0].substr(1);return\\\"1\\\"===e&&(e=\\\"\\\"),t.charAt(0)+\\\"axis\\\"+e}},e.name2id=function(t){if(t.match(i.AX_NAME_PATTERN)){var e=t.substr(5);return\\\"1\\\"===e&&(e=\\\"\\\"),t.charAt(0)+e}},e.cleanId=function(t,e,r){var n=/( domain)$/.test(t);if(\\\"string\\\"==typeof t&&t.match(i.AX_ID_PATTERN)&&(!e||t.charAt(0)===e)&&(!n||r)){var a=t.split(\\\" \\\")[0].substr(1).replace(/^0+/,\\\"\\\");return\\\"1\\\"===a&&(a=\\\"\\\"),t.charAt(0)+a+(n&&r?\\\" domain\\\":\\\"\\\")}},e.list=function(t,r,n){var i=t._fullLayout;if(!i)return[];var a,o=e.listIds(t,r),s=new Array(o.length);for(a=0;a<o.length;a++){var l=o[a];s[a]=i[l.charAt(0)+\\\"axis\\\"+l.substr(1)]}if(!n){var u=i._subplots.gl3d||[];for(a=0;a<u.length;a++){var c=i[u[a]];r?s.push(c[r+\\\"axis\\\"]):s.push(c.xaxis,c.yaxis,c.zaxis)}}return s},e.listIds=function(t,e){var r=t._fullLayout;if(!r)return[];var n=r._subplots;return e?n[e+\\\"axis\\\"]:n.xaxis.concat(n.yaxis)},e.getFromId=function(t,r,n){var i=t._fullLayout;return r=void 0===r||\\\"string\\\"!=typeof r?r:r.replace(\\\" domain\\\",\\\"\\\"),\\\"x\\\"===n?r=r.replace(/y[0-9]*/,\\\"\\\"):\\\"y\\\"===n&&(r=r.replace(/x[0-9]*/,\\\"\\\")),i[e.id2name(r)]},e.getFromTrace=function(t,r,i){var a=t._fullLayout,o=null;if(n.traceIs(r,\\\"gl3d\\\")){var s=r.scene;\\\"scene\\\"===s.substr(0,5)&&(o=a[s][i+\\\"axis\\\"])}else o=e.getFromId(t,r[i+\\\"axis\\\"]||i);return o},e.idSort=function(t,e){var r=t.charAt(0),n=e.charAt(0);return r!==n?r>n?1:-1:+(t.substr(1)||1)-+(e.substr(1)||1)},e.ref2id=function(t){return!!/^[xyz]/.test(t)&&t.split(\\\" \\\")[0]},e.isLinked=function(t,e){return a(e,t._axisMatchGroups)||a(e,t._axisConstraintGroups)}},15258:function(t){\\\"use strict\\\";t.exports=function(t,e,r,n){if(\\\"category\\\"===e.type){var i,a=t.categoryarray,o=Array.isArray(a)&&a.length>0;o&&(i=\\\"array\\\");var s,l=r(\\\"categoryorder\\\",i);\\\"array\\\"===l&&(s=r(\\\"categoryarray\\\")),o||\\\"array\\\"!==l||(l=e.categoryorder=\\\"trace\\\"),\\\"trace\\\"===l?e._initialCategories=[]:\\\"array\\\"===l?e._initialCategories=s.slice():(s=function(t,e){var r,n,i,a=e.dataAttr||t._id.charAt(0),o={};if(e.axData)r=e.axData;else for(r=[],n=0;n<e.data.length;n++){var s=e.data[n];s[a+\\\"axis\\\"]===t._id&&r.push(s)}for(n=0;n<r.length;n++){var l=r[n][a];for(i=0;i<l.length;i++){var u=l[i];null!=u&&(o[u]=1)}}return Object.keys(o)}(e,n).sort(),\\\"category ascending\\\"===l?e._initialCategories=s:\\\"category descending\\\"===l&&(e._initialCategories=s.reverse()))}}},66287:function(t,e,r){\\\"use strict\\\";var n=r(92770),i=r(71828),a=r(50606),o=a.ONEDAY,s=a.ONEWEEK;e.dtick=function(t,e){var r=\\\"log\\\"===e,i=\\\"date\\\"===e,a=\\\"category\\\"===e,s=i?o:1;if(!t)return s;if(n(t))return(t=Number(t))<=0?s:a?Math.max(1,Math.round(t)):i?Math.max(.1,t):t;if(\\\"string\\\"!=typeof t||!i&&!r)return s;var l=t.charAt(0),u=t.substr(1);return(u=n(u)?Number(u):0)<=0||!(i&&\\\"M\\\"===l&&u===Math.round(u)||r&&\\\"L\\\"===l||r&&\\\"D\\\"===l&&(1===u||2===u))?s:t},e.tick0=function(t,e,r,a){return\\\"date\\\"===e?i.cleanDate(t,i.dateTick0(r,a%s==0?1:0)):\\\"D1\\\"!==a&&\\\"D2\\\"!==a?n(t)?Number(t):0:void 0}},85555:function(t,e,r){\\\"use strict\\\";var n=r(30587).counter;t.exports={idRegex:{x:n(\\\"x\\\",\\\"( domain)?\\\"),y:n(\\\"y\\\",\\\"( domain)?\\\")},attrRegex:n(\\\"[xy]axis\\\"),xAxisMatch:n(\\\"xaxis\\\"),yAxisMatch:n(\\\"yaxis\\\"),AX_ID_PATTERN:/^[xyz][0-9]*( domain)?$/,AX_NAME_PATTERN:/^[xyz]axis[0-9]*$/,SUBPLOT_PATTERN:/^x([0-9]*)y([0-9]*)$/,HOUR_PATTERN:\\\"hour\\\",WEEKDAY_PATTERN:\\\"day of week\\\",MINDRAG:8,MINZOOM:20,DRAGGERSIZE:20,REDRAWDELAY:50,DFLTRANGEX:[-1,6],DFLTRANGEY:[-1,4],traceLayerClasses:[\\\"imagelayer\\\",\\\"heatmaplayer\\\",\\\"contourcarpetlayer\\\",\\\"contourlayer\\\",\\\"funnellayer\\\",\\\"waterfalllayer\\\",\\\"barlayer\\\",\\\"carpetlayer\\\",\\\"violinlayer\\\",\\\"boxlayer\\\",\\\"ohlclayer\\\",\\\"scattercarpetlayer\\\",\\\"scatterlayer\\\"],clipOnAxisFalseQuery:[\\\".scatterlayer\\\",\\\".barlayer\\\",\\\".funnellayer\\\",\\\".waterfalllayer\\\"],layerValue2layerClass:{\\\"above traces\\\":\\\"above\\\",\\\"below traces\\\":\\\"below\\\"}}},99082:function(t,e,r){\\\"use strict\\\";var n=r(71828),i=r(71739),a=r(41675).id2name,o=r(13838),s=r(42449),l=r(21994),u=r(50606).ALMOST_EQUAL,c=r(18783).FROM_BL;function f(t,e,r){var i=r.axIds,s=r.layoutOut,l=r.hasImage,u=s._axisConstraintGroups,c=s._axisMatchGroups,f=e._id,v=f.charAt(0),g=((s._splomAxes||{})[v]||{})[f]||{},y=e._id,m=\\\"x\\\"===y.charAt(0);function x(r,i){return n.coerce(t,e,o,r,i)}e._matchGroup=null,e._constraintGroup=null,x(\\\"constrain\\\",l?\\\"domain\\\":\\\"range\\\"),n.coerce(t,e,{constraintoward:{valType:\\\"enumerated\\\",values:m?[\\\"left\\\",\\\"center\\\",\\\"right\\\"]:[\\\"bottom\\\",\\\"middle\\\",\\\"top\\\"],dflt:m?\\\"center\\\":\\\"middle\\\"}},\\\"constraintoward\\\");var b,_,w=e.type,T=[];for(b=0;b<i.length;b++)(_=i[b])!==y&&s[a(_)].type===w&&T.push(_);var k=p(u,y);if(k){var A=[];for(b=0;b<T.length;b++)k[_=T[b]]||A.push(_);T=A}var M,S,E=T.length;E&&(t.matches||g.matches)&&(M=n.coerce(t,e,{matches:{valType:\\\"enumerated\\\",values:T,dflt:-1!==T.indexOf(g.matches)?g.matches:void 0}},\\\"matches\\\"));var L=l&&!m?e.anchor:void 0;if(E&&!M&&(t.scaleanchor||L)&&(S=n.coerce(t,e,{scaleanchor:{valType:\\\"enumerated\\\",values:T}},\\\"scaleanchor\\\",L)),M){e._matchGroup=d(c,y,M,1);var C=s[a(M)],P=h(s,e)/h(s,C);m!==(\\\"x\\\"===M.charAt(0))&&(P=(m?\\\"x\\\":\\\"y\\\")+P),d(u,y,M,P)}else t.matches&&-1!==i.indexOf(t.matches)&&n.warn(\\\"ignored \\\"+e._name+'.matches: \\\"'+t.matches+'\\\" to avoid an infinite loop');if(S){var O=x(\\\"scaleratio\\\");O||(O=e.scaleratio=1),d(u,y,S,O)}else t.scaleanchor&&-1!==i.indexOf(t.scaleanchor)&&n.warn(\\\"ignored \\\"+e._name+'.scaleanchor: \\\"'+t.scaleanchor+'\\\" to avoid either an infinite loop and possibly inconsistent scaleratios, or because this axis declares a *matches* constraint.')}function h(t,e){var r=e.domain;return r||(r=t[a(e.overlaying)].domain),r[1]-r[0]}function p(t,e){for(var r=0;r<t.length;r++)if(t[r][e])return t[r];return null}function d(t,e,r,n){var i,a,o,s,l,u=p(t,e);null===u?((u={})[e]=1,l=t.length,t.push(u)):l=t.indexOf(u);var c=Object.keys(u);for(i=0;i<t.length;i++)if(o=t[i],i!==l&&o[r]){var f=o[r];for(a=0;a<c.length;a++)o[s=c[a]]=v(f,v(n,u[s]));return void t.splice(l,1)}if(1!==n)for(a=0;a<c.length;a++){var h=c[a];u[h]=v(n,u[h])}u[r]=1}function v(t,e){var r,n,i=\\\"\\\",a=\\\"\\\";\\\"string\\\"==typeof t&&(r=(i=t.match(/^[xy]*/)[0]).length,t=+t.substr(r)),\\\"string\\\"==typeof e&&(n=(a=e.match(/^[xy]*/)[0]).length,e=+e.substr(n));var o=t*e;return r||n?r&&n&&i.charAt(0)!==a.charAt(0)?r===n?o:(r>n?i.substr(n):a.substr(r))+o:i+a+t*e:o}function g(t,e){for(var r=e._size,n=r.h/r.w,i={},a=Object.keys(t),o=0;o<a.length;o++){var s=a[o],l=t[s];if(\\\"string\\\"==typeof l){var u=l.match(/^[xy]*/)[0],c=u.length;l=+l.substr(c);for(var f=\\\"y\\\"===u.charAt(0)?n:1/n,h=0;h<c;h++)l*=f}i[s]=l}return i}function y(t,e){var r=t._inputDomain,n=c[t.constraintoward],i=r[0]+(r[1]-r[0])*n;t.domain=t._input.domain=[i+(r[0]-i)/e,i+(r[1]-i)/e],t.setScale()}e.handleDefaults=function(t,e,r){var i,o,s,u,c,h,p,d,v=r.axIds,g=r.axHasImage,y=e._axisConstraintGroups=[],m=e._axisMatchGroups=[];for(i=0;i<v.length;i++)f(c=t[u=a(v[i])],h=e[u],{axIds:v,layoutOut:e,hasImage:g[u]});function x(t,r){for(i=0;i<t.length;i++)for(s in o=t[i])e[a(s)][r]=o}for(x(m,\\\"_matchGroup\\\"),i=0;i<y.length;i++)for(s in o=y[i])if((h=e[a(s)]).fixedrange){for(var b in o){var _=a(b);!1===(t[_]||{}).fixedrange&&n.warn(\\\"fixedrange was specified as false for axis \\\"+_+\\\" but was overridden because another axis in its constraint group has fixedrange true\\\"),e[_].fixedrange=!0}break}for(i=0;i<y.length;){for(s in o=y[i]){(h=e[a(s)])._matchGroup&&Object.keys(h._matchGroup).length===Object.keys(o).length&&(y.splice(i,1),i--);break}i++}x(y,\\\"_constraintGroup\\\");var w=[\\\"constrain\\\",\\\"range\\\",\\\"autorange\\\",\\\"rangemode\\\",\\\"rangebreaks\\\",\\\"categoryorder\\\",\\\"categoryarray\\\"],T=!1,k=!1;function A(){d=h[p],\\\"rangebreaks\\\"===p&&(k=h._hasDayOfWeekBreaks)}for(i=0;i<m.length;i++){o=m[i];for(var M=0;M<w.length;M++){var S;for(s in p=w[M],d=null,o)if(c=t[u=a(s)],h=e[u],p in h){if(!h.matches&&(S=h,p in c)){A();break}null===d&&p in c&&A()}if(\\\"range\\\"===p&&d&&(T=!0),\\\"autorange\\\"===p&&null===d&&T&&(d=!1),null===d&&p in S&&(d=S[p]),null!==d)for(s in o)(h=e[a(s)])[p]=\\\"range\\\"===p?d.slice():d,\\\"rangebreaks\\\"===p&&(h._hasDayOfWeekBreaks=k,l(h,e))}}},e.enforce=function(t){var e,r,n,o,l,c,f,h,p=t._fullLayout,d=p._axisConstraintGroups||[];for(e=0;e<d.length;e++){n=g(d[e],p);var v=Object.keys(n),m=1/0,x=0,b=1/0,_={},w={},T=!1;for(r=0;r<v.length;r++)w[o=v[r]]=l=p[a(o)],l._inputDomain?l.domain=l._inputDomain.slice():l._inputDomain=l.domain.slice(),l._inputRange||(l._inputRange=l.range.slice()),l.setScale(),_[o]=c=Math.abs(l._m)/n[o],m=Math.min(m,c),\\\"domain\\\"!==l.constrain&&l._constraintShrinkable||(b=Math.min(b,c)),delete l._constraintShrinkable,x=Math.max(x,c),\\\"domain\\\"===l.constrain&&(T=!0);if(!(m>u*x)||T)for(r=0;r<v.length;r++)if(c=_[o=v[r]],f=(l=w[o]).constrain,c!==b||\\\"domain\\\"===f)if(h=c/b,\\\"range\\\"===f)s(l,h);else{var k=l._inputDomain,A=(l.domain[1]-l.domain[0])/(k[1]-k[0]),M=(l.r2l(l.range[1])-l.r2l(l.range[0]))/(l.r2l(l._inputRange[1])-l.r2l(l._inputRange[0]));if((h/=A)*M<1){l.domain=l._input.domain=k.slice(),s(l,h);continue}if(M<1&&(l.range=l._input.range=l._inputRange.slice(),h*=M),l.autorange){var S=l.r2l(l.range[0]),E=l.r2l(l.range[1]),L=(S+E)/2,C=L,P=L,O=Math.abs(E-L),I=L-O*h*1.0001,D=L+O*h*1.0001,z=i.makePadFn(p,l,0),R=i.makePadFn(p,l,1);y(l,h);var F,B,N=Math.abs(l._m),j=i.concatExtremes(t,l),U=j.min,V=j.max;for(B=0;B<U.length;B++)(F=U[B].val-z(U[B])/N)>I&&F<C&&(C=F);for(B=0;B<V.length;B++)(F=V[B].val+R(V[B])/N)<D&&F>P&&(P=F);h/=(P-C)/(2*O),C=l.l2r(C),P=l.l2r(P),l.range=l._input.range=S<E?[C,P]:[P,C]}y(l,h)}}},e.getAxisGroup=function(t,e){for(var r=t._axisMatchGroups,n=0;n<r.length;n++)if(r[n][e])return\\\"g\\\"+n;return e},e.clean=function(t,e){if(e._inputDomain){for(var r=!1,n=e._id,i=t._fullLayout._axisConstraintGroups,a=0;a<i.length;a++)if(i[a][n]){r=!0;break}r&&\\\"domain\\\"===e.constrain||(e._input.domain=e.domain=e._inputDomain,delete e._inputDomain)}}},29323:function(t,e,r){\\\"use strict\\\";var n=r(39898),i=r(71828),a=i.numberFormat,o=r(84267),s=r(38520),l=r(73972),u=i.strTranslate,c=r(63893),f=r(7901),h=r(91424),p=r(30211),d=r(89298),v=r(6964),g=r(28569),y=r(64505),m=y.selectingOrDrawing,x=y.freeMode,b=r(18783).FROM_TL,_=r(33306),w=r(61549).redrawReglTraces,T=r(74875),k=r(41675).getFromId,A=r(47322).prepSelect,M=r(47322).clearOutline,S=r(47322).selectOnClick,E=r(42449),L=r(85555),C=L.MINDRAG,P=L.MINZOOM,O=!0;function I(t,e,r,n){var a=i.ensureSingle(t.draglayer,e,r,(function(e){e.classed(\\\"drag\\\",!0).style({fill:\\\"transparent\\\",\\\"stroke-width\\\":0}).attr(\\\"data-subplot\\\",t.id)}));return a.call(v,n),a.node()}function D(t,e,r,i,a,o,s){var l=I(t,\\\"rect\\\",e,r);return n.select(l).call(h.setRect,i,a,o,s),l}function z(t,e){for(var r=0;r<t.length;r++)if(!t[r].fixedrange)return e;return\\\"\\\"}function R(t,e,r,n,i){for(var a=0;a<t.length;a++){var o=t[a];if(!o.fixedrange)if(o.rangebreaks){var s=\\\"y\\\"===o._id.charAt(0),l=s?1-e:e,u=s?1-r:r;n[o._name+\\\".range[0]\\\"]=o.l2r(o.p2l(l*o._length)),n[o._name+\\\".range[1]\\\"]=o.l2r(o.p2l(u*o._length))}else{var c=o._rl[0],f=o._rl[1]-c;n[o._name+\\\".range[0]\\\"]=o.l2r(c+f*e),n[o._name+\\\".range[1]\\\"]=o.l2r(c+f*r)}}if(i&&i.length){var h=(e+(1-r))/2;R(i,h,1-h,n,[])}}function F(t,e){for(var r=0;r<t.length;r++){var n=t[r];if(!n.fixedrange)if(n.rangebreaks){var i=n._length,a=(n.p2l(0+e)-n.p2l(0)+(n.p2l(i+e)-n.p2l(i)))/2;n.range=[n.l2r(n._rl[0]-a),n.l2r(n._rl[1]-a)]}else n.range=[n.l2r(n._rl[0]-e/n._m),n.l2r(n._rl[1]-e/n._m)]}}function B(t){return 1-(t>=0?Math.min(t,.9):1/(1/Math.max(t,-.3)+3.222))}function N(t,e,r,n,i){return t.append(\\\"path\\\").attr(\\\"class\\\",\\\"zoombox\\\").style({fill:e>.2?\\\"rgba(0,0,0,0)\\\":\\\"rgba(255,255,255,0)\\\",\\\"stroke-width\\\":0}).attr(\\\"transform\\\",u(r,n)).attr(\\\"d\\\",i+\\\"Z\\\")}function j(t,e,r){return t.append(\\\"path\\\").attr(\\\"class\\\",\\\"zoombox-corners\\\").style({fill:f.background,stroke:f.defaultLine,\\\"stroke-width\\\":1,opacity:0}).attr(\\\"transform\\\",u(e,r)).attr(\\\"d\\\",\\\"M0,0Z\\\")}function U(t,e,r,n,i,a){t.attr(\\\"d\\\",n+\\\"M\\\"+r.l+\\\",\\\"+r.t+\\\"v\\\"+r.h+\\\"h\\\"+r.w+\\\"v-\\\"+r.h+\\\"h-\\\"+r.w+\\\"Z\\\"),V(t,e,i,a)}function V(t,e,r,n){r||(t.transition().style(\\\"fill\\\",n>.2?\\\"rgba(0,0,0,0.4)\\\":\\\"rgba(255,255,255,0.3)\\\").duration(200),e.transition().style(\\\"opacity\\\",1).duration(200))}function H(t){n.select(t).selectAll(\\\".zoombox,.js-zoombox-backdrop,.js-zoombox-menu,.zoombox-corners\\\").remove()}function q(t){O&&t.data&&t._context.showTips&&(i.notifier(i._(t,\\\"Double-click to zoom back out\\\"),\\\"long\\\"),O=!1)}function G(t){var e=Math.floor(Math.min(t.b-t.t,t.r-t.l,P)/2);return\\\"M\\\"+(t.l-3.5)+\\\",\\\"+(t.t-.5+e)+\\\"h3v\\\"+-e+\\\"h\\\"+e+\\\"v-3h-\\\"+(e+3)+\\\"ZM\\\"+(t.r+3.5)+\\\",\\\"+(t.t-.5+e)+\\\"h-3v\\\"+-e+\\\"h\\\"+-e+\\\"v-3h\\\"+(e+3)+\\\"ZM\\\"+(t.r+3.5)+\\\",\\\"+(t.b+.5-e)+\\\"h-3v\\\"+e+\\\"h\\\"+-e+\\\"v3h\\\"+(e+3)+\\\"ZM\\\"+(t.l-3.5)+\\\",\\\"+(t.b+.5-e)+\\\"h3v\\\"+e+\\\"h\\\"+e+\\\"v3h-\\\"+(e+3)+\\\"Z\\\"}function Z(t,e,r,n,a){for(var o,s,l,u,c=!1,f={},h={},p=(a||{}).xaHash,d=(a||{}).yaHash,v=0;v<e.length;v++){var g=e[v];for(o in r)if(g[o]){for(l in g)a&&(p[l]||d[l])||(\\\"x\\\"===l.charAt(0)?r:n)[l]||(f[l]=o);for(s in n)a&&(p[s]||d[s])||!g[s]||(c=!0)}for(s in n)if(g[s])for(u in g)a&&(p[u]||d[u])||(\\\"x\\\"===u.charAt(0)?r:n)[u]||(h[u]=s)}c&&(i.extendFlat(f,h),h={});var y={},m=[];for(l in f){var x=k(t,l);m.push(x),y[x._id]=x}var b={},_=[];for(u in h){var w=k(t,u);_.push(w),b[w._id]=w}return{xaHash:y,yaHash:b,xaxes:m,yaxes:_,xLinks:f,yLinks:h,isSubplotConstrained:c}}function Y(t,e){if(s){var r=void 0!==t.onwheel?\\\"wheel\\\":\\\"mousewheel\\\";t._onwheel&&t.removeEventListener(r,t._onwheel),t._onwheel=e,t.addEventListener(r,e,{passive:!1})}else void 0!==t.onwheel?t.onwheel=e:void 0!==t.onmousewheel?t.onmousewheel=e:t.isAddedWheelEvent||(t.isAddedWheelEvent=!0,t.addEventListener(\\\"wheel\\\",e,{passive:!1}))}function W(t){var e=[];for(var r in t)e.push(t[r]);return e}t.exports={makeDragBox:function(t,e,r,s,u,f,v,y){var O,I,V,X,J,K,$,Q,tt,et,rt,nt,it,at,ot,st,lt,ut,ct,ft,ht,pt,dt,vt=t._fullLayout._zoomlayer,gt=v+y===\\\"nsew\\\",yt=1===(v+y).length;function mt(){if(O=e.xaxis,I=e.yaxis,tt=O._length,et=I._length,$=O._offset,Q=I._offset,(V={})[O._id]=O,(X={})[I._id]=I,v&&y)for(var r=e.overlays,n=0;n<r.length;n++){var i=r[n].xaxis;V[i._id]=i;var a=r[n].yaxis;X[a._id]=a}J=W(V),K=W(X),it=z(J,y),at=z(K,v),ot=!at&&!it,nt=Z(t,t._fullLayout._axisMatchGroups,V,X);var o=(rt=Z(t,t._fullLayout._axisConstraintGroups,V,X,nt)).isSubplotConstrained||nt.isSubplotConstrained;st=y||o,lt=v||o;var s=t._fullLayout;ut=s._has(\\\"scattergl\\\"),ct=s._has(\\\"splom\\\"),ft=s._has(\\\"svg\\\")}r+=e.yaxis._shift,mt();var xt=function(t,e,r){return t?\\\"nsew\\\"===t?r?\\\"\\\":\\\"pan\\\"===e?\\\"move\\\":\\\"crosshair\\\":t.toLowerCase()+\\\"-resize\\\":\\\"pointer\\\"}(at+it,t._fullLayout.dragmode,gt),bt=D(e,v+y+\\\"drag\\\",xt,r,s,u,f);if(ot&&!gt)return bt.onmousedown=null,bt.style.pointerEvents=\\\"none\\\",bt;var _t,wt,Tt,kt,At,Mt,St,Et,Lt,Ct,Pt={element:bt,gd:t,plotinfo:e};function Ot(){Pt.plotinfo.selection=!1,M(t)}function It(t,r){var i=Pt.gd;if(i._fullLayout._activeShapeIndex>=0)i._fullLayout._deactivateShape(i);else{var o=i._fullLayout.clickmode;if(H(i),2!==t||yt||qt(),gt)o.indexOf(\\\"select\\\")>-1&&S(r,i,J,K,e.id,Pt),o.indexOf(\\\"event\\\")>-1&&p.click(i,r,e.id);else if(1===t&&yt){var s=v?I:O,u=\\\"s\\\"===v||\\\"w\\\"===y?0:1,f=s._name+\\\".range[\\\"+u+\\\"]\\\",h=function(t,e){var r,n=t.range[e],i=Math.abs(n-t.range[1-e]);return\\\"date\\\"===t.type?n:\\\"log\\\"===t.type?(r=Math.ceil(Math.max(0,-Math.log(i)/Math.LN10))+3,a(\\\".\\\"+r+\\\"g\\\")(Math.pow(10,n))):(r=Math.floor(Math.log(Math.abs(n))/Math.LN10)-Math.floor(Math.log(i)/Math.LN10)+4,a(\\\".\\\"+String(r)+\\\"g\\\")(n))}(s,u),d=\\\"left\\\",g=\\\"middle\\\";if(s.fixedrange)return;v?(g=\\\"n\\\"===v?\\\"top\\\":\\\"bottom\\\",\\\"right\\\"===s.side&&(d=\\\"right\\\")):\\\"e\\\"===y&&(d=\\\"right\\\"),i._context.showAxisRangeEntryBoxes&&n.select(bt).call(c.makeEditable,{gd:i,immediate:!0,background:i._fullLayout.paper_bgcolor,text:String(h),fill:s.tickfont?s.tickfont.color:\\\"#444\\\",horizontalAlign:d,verticalAlign:g}).on(\\\"edit\\\",(function(t){var e=s.d2r(t);void 0!==e&&l.call(\\\"_guiRelayout\\\",i,f,e)}))}}}function Dt(e,r){if(t._transitioningWithDuration)return!1;var n=Math.max(0,Math.min(tt,pt*e+_t)),i=Math.max(0,Math.min(et,dt*r+wt)),a=Math.abs(n-_t),o=Math.abs(i-wt);function s(){St=\\\"\\\",Tt.r=Tt.l,Tt.t=Tt.b,Lt.attr(\\\"d\\\",\\\"M0,0Z\\\")}if(Tt.l=Math.min(_t,n),Tt.r=Math.max(_t,n),Tt.t=Math.min(wt,i),Tt.b=Math.max(wt,i),rt.isSubplotConstrained)a>P||o>P?(St=\\\"xy\\\",a/tt>o/et?(o=a*et/tt,wt>i?Tt.t=wt-o:Tt.b=wt+o):(a=o*tt/et,_t>n?Tt.l=_t-a:Tt.r=_t+a),Lt.attr(\\\"d\\\",G(Tt))):s();else if(nt.isSubplotConstrained)if(a>P||o>P){St=\\\"xy\\\";var l=Math.min(Tt.l/tt,(et-Tt.b)/et),u=Math.max(Tt.r/tt,(et-Tt.t)/et);Tt.l=l*tt,Tt.r=u*tt,Tt.b=(1-l)*et,Tt.t=(1-u)*et,Lt.attr(\\\"d\\\",G(Tt))}else s();else!at||o<Math.min(Math.max(.6*a,C),P)?a<C||!it?s():(Tt.t=0,Tt.b=et,St=\\\"x\\\",Lt.attr(\\\"d\\\",function(t,e){return\\\"M\\\"+(t.l-.5)+\\\",\\\"+(e-P-.5)+\\\"h-3v\\\"+(2*P+1)+\\\"h3ZM\\\"+(t.r+.5)+\\\",\\\"+(e-P-.5)+\\\"h3v\\\"+(2*P+1)+\\\"h-3Z\\\"}(Tt,wt))):!it||a<Math.min(.6*o,P)?(Tt.l=0,Tt.r=tt,St=\\\"y\\\",Lt.attr(\\\"d\\\",function(t,e){return\\\"M\\\"+(e-P-.5)+\\\",\\\"+(t.t-.5)+\\\"v-3h\\\"+(2*P+1)+\\\"v3ZM\\\"+(e-P-.5)+\\\",\\\"+(t.b+.5)+\\\"v3h\\\"+(2*P+1)+\\\"v-3Z\\\"}(Tt,_t))):(St=\\\"xy\\\",Lt.attr(\\\"d\\\",G(Tt)));Tt.w=Tt.r-Tt.l,Tt.h=Tt.b-Tt.t,St&&(Ct=!0),t._dragged=Ct,U(Et,Lt,Tt,At,Mt,kt),zt(),t.emit(\\\"plotly_relayouting\\\",ht),Mt=!0}function zt(){ht={},\\\"xy\\\"!==St&&\\\"x\\\"!==St||(R(J,Tt.l/tt,Tt.r/tt,ht,rt.xaxes),Vt(\\\"x\\\",ht)),\\\"xy\\\"!==St&&\\\"y\\\"!==St||(R(K,(et-Tt.b)/et,(et-Tt.t)/et,ht,rt.yaxes),Vt(\\\"y\\\",ht))}function Rt(){zt(),H(t),Gt(),q(t)}Pt.prepFn=function(e,r,n){var a=Pt.dragmode,s=t._fullLayout.dragmode;s!==a&&(Pt.dragmode=s),mt(),pt=t._fullLayout._invScaleX,dt=t._fullLayout._invScaleY,ot||(gt?e.shiftKey?\\\"pan\\\"===s?s=\\\"zoom\\\":m(s)||(s=\\\"pan\\\"):e.ctrlKey&&(s=\\\"pan\\\"):s=\\\"pan\\\"),x(s)?Pt.minDrag=1:Pt.minDrag=void 0,m(s)?(Pt.xaxes=J,Pt.yaxes=K,A(e,r,n,Pt,s)):(Pt.clickFn=It,m(a)&&Ot(),ot||(\\\"zoom\\\"===s?(Pt.moveFn=Dt,Pt.doneFn=Rt,Pt.minDrag=1,function(e,r,n){var a=bt.getBoundingClientRect();_t=r-a.left,wt=n-a.top,t._fullLayout._calcInverseTransform(t);var s=i.apply3DTransform(t._fullLayout._invTransform)(_t,wt);_t=s[0],wt=s[1],Tt={l:_t,r:_t,w:0,t:wt,b:wt,h:0},kt=t._hmpixcount?t._hmlumcount/t._hmpixcount:o(t._fullLayout.plot_bgcolor).getLuminance(),Mt=!1,St=\\\"xy\\\",Ct=!1,Et=N(vt,kt,$,Q,At=\\\"M0,0H\\\"+tt+\\\"V\\\"+et+\\\"H0V0\\\"),Lt=j(vt,$,Q)}(0,r,n)):\\\"pan\\\"===s&&(Pt.moveFn=Ut,Pt.doneFn=Gt))),t._fullLayout._redrag=function(){var e=t._dragdata;if(e&&e.element===bt){var r=t._fullLayout.dragmode;m(r)||(mt(),Zt([0,0,tt,et]),Pt.moveFn(e.dx,e.dy))}}},g.init(Pt);var Ft=[0,0,tt,et],Bt=null,Nt=L.REDRAWDELAY,jt=e.mainplot?t._fullLayout._plots[e.mainplot]:e;function Ut(e,r){if(e*=pt,r*=dt,!t._transitioningWithDuration){if(t._fullLayout._replotting=!0,\\\"ew\\\"===it||\\\"ns\\\"===at){var n=it?-e:0,i=at?-r:0;if(nt.isSubplotConstrained){if(it&&at){var a=(e/tt-r/et)/2;n=-(e=a*tt),i=-(r=-a*et)}at?n=-i*tt/et:i=-n*et/tt}return it&&(F(J,e),Vt(\\\"x\\\")),at&&(F(K,r),Vt(\\\"y\\\")),Zt([n,i,tt,et]),Ht(),void t.emit(\\\"plotly_relayouting\\\",ht)}var o,s,l=\\\"w\\\"===it==(\\\"n\\\"===at)?1:-1;if(it&&at&&(rt.isSubplotConstrained||nt.isSubplotConstrained)){var u=(e/tt+l*r/et)/2;e=u*tt,r=l*u*et}if(\\\"w\\\"===it?e=p(J,0,e):\\\"e\\\"===it?e=p(J,1,-e):it||(e=0),\\\"n\\\"===at?r=p(K,1,r):\\\"s\\\"===at?r=p(K,0,-r):at||(r=0),o=\\\"w\\\"===it?e:0,s=\\\"n\\\"===at?r:0,rt.isSubplotConstrained&&!nt.isSubplotConstrained||nt.isSubplotConstrained&&it&&at&&l>0){var c;if(nt.isSubplotConstrained||!it&&1===at.length){for(c=0;c<J.length;c++)J[c].range=J[c]._r.slice(),E(J[c],1-r/et);o=(e=r*tt/et)/2}if(nt.isSubplotConstrained||!at&&1===it.length){for(c=0;c<K.length;c++)K[c].range=K[c]._r.slice(),E(K[c],1-e/tt);s=(r=e*et/tt)/2}}nt.isSubplotConstrained&&at||Vt(\\\"x\\\"),nt.isSubplotConstrained&&it||Vt(\\\"y\\\");var f=tt-e,h=et-r;!nt.isSubplotConstrained||it&&at||(it?(s=o?0:e*et/tt,h=f*et/tt):(o=s?0:r*tt/et,f=h*tt/et)),Zt([o,s,f,h]),Ht(),t.emit(\\\"plotly_relayouting\\\",ht)}function p(t,e,r){for(var n,i,a=1-e,o=0;o<t.length;o++){var s=t[o];if(!s.fixedrange){n=s,i=s._rl[a]+(s._rl[e]-s._rl[a])/B(r/s._length);var l=s.l2r(i);!1!==l&&void 0!==l&&(s.range[e]=l)}}return n._length*(n._rl[e]-i)/(n._rl[e]-n._rl[a])}}function Vt(t,e){for(var r=nt.isSubplotConstrained?{x:K,y:J}[t]:nt[t+\\\"axes\\\"],n=nt.isSubplotConstrained?{x:J,y:K}[t]:[],i=0;i<r.length;i++){var a=r[i],o=a._id,s=nt.xLinks[o]||nt.yLinks[o],l=n[0]||V[s]||X[s];l&&(e?(e[a._name+\\\".range[0]\\\"]=e[l._name+\\\".range[0]\\\"],e[a._name+\\\".range[1]\\\"]=e[l._name+\\\".range[1]\\\"]):a.range=l.range.slice())}}function Ht(){var r,n=[];function i(t){for(r=0;r<t.length;r++)t[r].fixedrange||n.push(t[r]._id)}function a(t,e){for(r=0;r<t.length;r++){var i=t[r],a=i[e];i.fixedrange||\\\"sync\\\"!==a.tickmode||n.push(a._id)}}for(st&&(i(J),i(rt.xaxes),i(nt.xaxes),a(e.overlays,\\\"xaxis\\\")),lt&&(i(K),i(rt.yaxes),i(nt.yaxes),a(e.overlays,\\\"yaxis\\\")),ht={},r=0;r<n.length;r++){var o=n[r],s=k(t,o);d.drawOne(t,s,{skipTitle:!0}),ht[s._name+\\\".range[0]\\\"]=s.range[0],ht[s._name+\\\".range[1]\\\"]=s.range[1]}d.redrawComponents(t,n)}function qt(){if(!t._transitioningWithDuration){var e=t._context.doubleClick,r=[];it&&(r=r.concat(J)),at&&(r=r.concat(K)),nt.xaxes&&(r=r.concat(nt.xaxes)),nt.yaxes&&(r=r.concat(nt.yaxes));var n,i,a,o={};if(\\\"reset+autosize\\\"===e)for(e=\\\"autosize\\\",i=0;i<r.length;i++)if((n=r[i])._rangeInitial&&(n.range[0]!==n._rangeInitial[0]||n.range[1]!==n._rangeInitial[1])||!n._rangeInitial&&!n.autorange){e=\\\"reset\\\";break}if(\\\"autosize\\\"===e)for(i=0;i<r.length;i++)(n=r[i]).fixedrange||(o[n._name+\\\".autorange\\\"]=!0);else if(\\\"reset\\\"===e)for((it||rt.isSubplotConstrained)&&(r=r.concat(rt.xaxes)),at&&!rt.isSubplotConstrained&&(r=r.concat(rt.yaxes)),rt.isSubplotConstrained&&(it?at||(r=r.concat(K)):r=r.concat(J)),i=0;i<r.length;i++)(n=r[i]).fixedrange||(n._rangeInitial?(a=n._rangeInitial,o[n._name+\\\".range[0]\\\"]=a[0],o[n._name+\\\".range[1]\\\"]=a[1]):o[n._name+\\\".autorange\\\"]=!0);t.emit(\\\"plotly_doubleclick\\\",null),l.call(\\\"_guiRelayout\\\",t,o)}}function Gt(){Zt([0,0,tt,et]),i.syncOrAsync([T.previousPromises,function(){t._fullLayout._replotting=!1,l.call(\\\"_guiRelayout\\\",t,ht)}],t)}function Zt(e){var r,n,a,o,s=t._fullLayout,u=s._plots,c=s._subplots.cartesian;if(ct&&l.subplotsRegistry.splom.drag(t),ut)for(r=0;r<c.length;r++)if(a=(n=u[c[r]]).xaxis,o=n.yaxis,n._scene){var f=i.simpleMap(a.range,a.r2l),p=i.simpleMap(o.range,o.r2l);n._scene.update({range:[f[0],p[0],f[1],p[1]]})}if((ct||ut)&&(_(t),w(t)),ft){var d=e[2]/O._length,g=e[3]/I._length;for(r=0;r<c.length;r++){a=(n=u[c[r]]).xaxis,o=n.yaxis;var m,x,b,T,k=(st||nt.isSubplotConstrained)&&!a.fixedrange&&V[a._id],A=(lt||nt.isSubplotConstrained)&&!o.fixedrange&&X[o._id];if(k?(m=d,b=y||nt.isSubplotConstrained?e[0]:Xt(a,m)):nt.xaHash[a._id]?(m=d,b=e[0]*a._length/O._length):nt.yaHash[a._id]?(m=g,b=\\\"ns\\\"===at?-e[1]*a._length/I._length:Xt(a,m,{n:\\\"top\\\",s:\\\"bottom\\\"}[at])):b=Wt(a,m=Yt(a,d,g)),A?(x=g,T=v||nt.isSubplotConstrained?e[1]:Xt(o,x)):nt.yaHash[o._id]?(x=g,T=e[1]*o._length/I._length):nt.xaHash[o._id]?(x=d,T=\\\"ew\\\"===it?-e[0]*o._length/O._length:Xt(o,x,{e:\\\"right\\\",w:\\\"left\\\"}[it])):T=Wt(o,x=Yt(o,d,g)),m||x){m||(m=1),x||(x=1);var M=a._offset-b/m,S=o._offset-T/x;n.clipRect.call(h.setTranslate,b,T).call(h.setScale,m,x),n.plot.call(h.setTranslate,M,S).call(h.setScale,1/m,1/x),m===n.xScaleFactor&&x===n.yScaleFactor||(h.setPointGroupScale(n.zoomScalePts,m,x),h.setTextPointsScale(n.zoomScaleTxt,m,x)),h.hideOutsideRangePoints(n.clipOnAxisFalseTraces,n),n.xScaleFactor=m,n.yScaleFactor=x}}}}function Yt(t,e,r){return t.fixedrange?0:st&&rt.xaHash[t._id]?e:lt&&(rt.isSubplotConstrained?rt.xaHash:rt.yaHash)[t._id]?r:0}function Wt(t,e){return e?(t.range=t._r.slice(),E(t,e),Xt(t,e)):0}function Xt(t,e,r){return t._length*(1-e)*b[r||t.constraintoward||\\\"middle\\\"]}return v.length*y.length!=1&&Y(bt,(function(e){if(t._context._scrollZoom.cartesian||t._fullLayout._enablescrollzoom){if(Ot(),t._transitioningWithDuration)return e.preventDefault(),void e.stopPropagation();mt(),clearTimeout(Bt);var r=-e.deltaY;if(isFinite(r)||(r=e.wheelDelta/10),isFinite(r)){var n,a=Math.exp(-Math.min(Math.max(r,-20),20)/200),o=jt.draglayer.select(\\\".nsewdrag\\\").node().getBoundingClientRect(),s=(e.clientX-o.left)/o.width,l=(o.bottom-e.clientY)/o.height;if(st){for(y||(s=.5),n=0;n<J.length;n++)u(J[n],s,a);Vt(\\\"x\\\"),Ft[2]*=a,Ft[0]+=Ft[2]*s*(1/a-1)}if(lt){for(v||(l=.5),n=0;n<K.length;n++)u(K[n],l,a);Vt(\\\"y\\\"),Ft[3]*=a,Ft[1]+=Ft[3]*(1-l)*(1/a-1)}Zt(Ft),Ht(),t.emit(\\\"plotly_relayouting\\\",ht),Bt=setTimeout((function(){t._fullLayout&&(Ft=[0,0,tt,et],Gt())}),Nt),e.preventDefault()}else i.log(\\\"Did not find wheel motion attributes: \\\",e)}function u(t,e,r){if(!t.fixedrange){var n=i.simpleMap(t.range,t.r2l),a=n[0]+(n[1]-n[0])*e;t.range=n.map((function(e){return t.l2r(a+(e-a)*r)}))}}})),bt},makeDragger:I,makeRectDragger:D,makeZoombox:N,makeCorners:j,updateZoombox:U,xyCorners:G,transitionZoombox:V,removeZoombox:H,showDoubleClickNotifier:q,attachWheelEventHandler:Y}},4305:function(t,e,r){\\\"use strict\\\";var n=r(39898),i=r(30211),a=r(28569),o=r(6964),s=r(29323).makeDragBox,l=r(85555).DRAGGERSIZE;e.initInteractions=function(t){var r=t._fullLayout;if(t._context.staticPlot)n.select(t).selectAll(\\\".drag\\\").remove();else if(r._has(\\\"cartesian\\\")||r._has(\\\"splom\\\")){Object.keys(r._plots||{}).sort((function(t,e){if((r._plots[t].mainplot&&!0)===(r._plots[e].mainplot&&!0)){var n=t.split(\\\"y\\\"),i=e.split(\\\"y\\\");return n[0]===i[0]?Number(n[1]||1)-Number(i[1]||1):Number(n[0]||1)-Number(i[0]||1)}return r._plots[t].mainplot?1:-1})).forEach((function(e){var n=r._plots[e],o=n.xaxis,u=n.yaxis;if(!n.mainplot){var c=s(t,n,o._offset,u._offset,o._length,u._length,\\\"ns\\\",\\\"ew\\\");c.onmousemove=function(r){t._fullLayout._rehover=function(){t._fullLayout._hoversubplot===e&&t._fullLayout._plots[e]&&i.hover(t,r,e)},i.hover(t,r,e),t._fullLayout._lasthover=c,t._fullLayout._hoversubplot=e},c.onmouseout=function(e){t._dragging||(t._fullLayout._hoversubplot=null,a.unhover(t,e))},t._context.showAxisDragHandles&&(s(t,n,o._offset-l,u._offset-l,l,l,\\\"n\\\",\\\"w\\\"),s(t,n,o._offset+o._length,u._offset-l,l,l,\\\"n\\\",\\\"e\\\"),s(t,n,o._offset-l,u._offset+u._length,l,l,\\\"s\\\",\\\"w\\\"),s(t,n,o._offset+o._length,u._offset+u._length,l,l,\\\"s\\\",\\\"e\\\"))}if(t._context.showAxisDragHandles){if(e===o._mainSubplot){var f=o._mainLinePosition;\\\"top\\\"===o.side&&(f-=l),s(t,n,o._offset+.1*o._length,f,.8*o._length,l,\\\"\\\",\\\"ew\\\"),s(t,n,o._offset,f,.1*o._length,l,\\\"\\\",\\\"w\\\"),s(t,n,o._offset+.9*o._length,f,.1*o._length,l,\\\"\\\",\\\"e\\\")}if(e===u._mainSubplot){var h=u._mainLinePosition;\\\"right\\\"!==u.side&&(h-=l),s(t,n,h,u._offset+.1*u._length,l,.8*u._length,\\\"ns\\\",\\\"\\\"),s(t,n,h,u._offset+.9*u._length,l,.1*u._length,\\\"s\\\",\\\"\\\"),s(t,n,h,u._offset,l,.1*u._length,\\\"n\\\",\\\"\\\")}}}));var o=r._hoverlayer.node();o.onmousemove=function(e){e.target=t._fullLayout._lasthover,i.hover(t,e,r._hoversubplot)},o.onclick=function(e){e.target=t._fullLayout._lasthover,i.click(t,e)},o.onmousedown=function(e){t._fullLayout._lasthover.onmousedown(e)},e.updateFx(t)}},e.updateFx=function(t){var e=t._fullLayout,r=\\\"pan\\\"===e.dragmode?\\\"move\\\":\\\"crosshair\\\";o(e._draggers,r)}},76325:function(t,e,r){\\\"use strict\\\";var n=r(73972),i=r(71828),a=r(41675);t.exports=function(t){return function(e,r){var o=e[t];if(Array.isArray(o))for(var s=n.subplotsRegistry.cartesian,l=s.idRegex,u=r._subplots,c=u.xaxis,f=u.yaxis,h=u.cartesian,p=r._has(\\\"cartesian\\\")||r._has(\\\"gl2d\\\"),d=0;d<o.length;d++){var v=o[d];if(i.isPlainObject(v)){var g=a.cleanId(v.xref,\\\"x\\\",!1),y=a.cleanId(v.yref,\\\"y\\\",!1),m=l.x.test(g),x=l.y.test(y);if(m||x){p||i.pushUnique(r._basePlotModules,s);var b=!1;m&&-1===c.indexOf(g)&&(c.push(g),b=!0),x&&-1===f.indexOf(y)&&(f.push(y),b=!0),b&&m&&x&&h.push(g+y)}}}}}},93612:function(t,e,r){\\\"use strict\\\";var n=r(39898),i=r(73972),a=r(71828),o=r(74875),s=r(91424),l=r(27659).a0,u=r(41675),c=r(85555),f=r(77922),h=a.ensureSingle;function p(t,e,r){return a.ensureSingle(t,e,r,(function(t){t.datum(r)}))}function d(t,e,r,a,o){for(var u,f,h,p=c.traceLayerClasses,d=t._fullLayout,v=d._modules,g=[],y=[],m=0;m<v.length;m++){var x=(u=v[m]).name,b=i.modules[x].categories;if(b.svg){var _=u.layerName||x+\\\"layer\\\",w=u.plot;h=(f=l(r,w))[0],r=f[1],h.length&&g.push({i:p.indexOf(_),className:_,plotMethod:w,cdModule:h}),b.zoomScale&&y.push(\\\".\\\"+_)}}g.sort((function(t,e){return t.i-e.i}));var T=e.plot.selectAll(\\\"g.mlayer\\\").data(g,(function(t){return t.className}));if(T.enter().append(\\\"g\\\").attr(\\\"class\\\",(function(t){return t.className})).classed(\\\"mlayer\\\",!0).classed(\\\"rangeplot\\\",e.isRangePlot),T.exit().remove(),T.order(),T.each((function(r){var i=n.select(this),l=r.className;r.plotMethod(t,e,r.cdModule,i,a,o),-1===c.clipOnAxisFalseQuery.indexOf(\\\".\\\"+l)&&s.setClipUrl(i,e.layerClipId,t)})),d._has(\\\"scattergl\\\")&&(u=i.getModule(\\\"scattergl\\\"),h=l(r,u)[0],u.plot(t,e,h)),!t._context.staticPlot&&(e._hasClipOnAxisFalse&&(e.clipOnAxisFalseTraces=e.plot.selectAll(c.clipOnAxisFalseQuery.join(\\\",\\\")).selectAll(\\\".trace\\\")),y.length)){var k=e.plot.selectAll(y.join(\\\",\\\")).selectAll(\\\".trace\\\");e.zoomScalePts=k.selectAll(\\\"path.point\\\"),e.zoomScaleTxt=k.selectAll(\\\".textpoint\\\")}}function v(t,e){var r=e.plotgroup,n=e.id,i=c.layerValue2layerClass[e.xaxis.layer],a=c.layerValue2layerClass[e.yaxis.layer],o=t._fullLayout._hasOnlyLargeSploms;if(e.mainplot){var s=e.mainplotinfo,l=s.plotgroup,f=n+\\\"-x\\\",d=n+\\\"-y\\\";e.minorGridlayer=s.minorGridlayer,e.gridlayer=s.gridlayer,e.zerolinelayer=s.zerolinelayer,h(s.overlinesBelow,\\\"path\\\",f),h(s.overlinesBelow,\\\"path\\\",d),h(s.overaxesBelow,\\\"g\\\",f),h(s.overaxesBelow,\\\"g\\\",d),e.plot=h(s.overplot,\\\"g\\\",n),h(s.overlinesAbove,\\\"path\\\",f),h(s.overlinesAbove,\\\"path\\\",d),h(s.overaxesAbove,\\\"g\\\",f),h(s.overaxesAbove,\\\"g\\\",d),e.xlines=l.select(\\\".overlines-\\\"+i).select(\\\".\\\"+f),e.ylines=l.select(\\\".overlines-\\\"+a).select(\\\".\\\"+d),e.xaxislayer=l.select(\\\".overaxes-\\\"+i).select(\\\".\\\"+f),e.yaxislayer=l.select(\\\".overaxes-\\\"+a).select(\\\".\\\"+d)}else if(o)e.xlines=h(r,\\\"path\\\",\\\"xlines-above\\\"),e.ylines=h(r,\\\"path\\\",\\\"ylines-above\\\"),e.xaxislayer=h(r,\\\"g\\\",\\\"xaxislayer-above\\\"),e.yaxislayer=h(r,\\\"g\\\",\\\"yaxislayer-above\\\");else{var v=h(r,\\\"g\\\",\\\"layer-subplot\\\");e.shapelayer=h(v,\\\"g\\\",\\\"shapelayer\\\"),e.imagelayer=h(v,\\\"g\\\",\\\"imagelayer\\\"),e.minorGridlayer=h(r,\\\"g\\\",\\\"minor-gridlayer\\\"),e.gridlayer=h(r,\\\"g\\\",\\\"gridlayer\\\"),e.zerolinelayer=h(r,\\\"g\\\",\\\"zerolinelayer\\\"),h(r,\\\"path\\\",\\\"xlines-below\\\"),h(r,\\\"path\\\",\\\"ylines-below\\\"),e.overlinesBelow=h(r,\\\"g\\\",\\\"overlines-below\\\"),h(r,\\\"g\\\",\\\"xaxislayer-below\\\"),h(r,\\\"g\\\",\\\"yaxislayer-below\\\"),e.overaxesBelow=h(r,\\\"g\\\",\\\"overaxes-below\\\"),e.plot=h(r,\\\"g\\\",\\\"plot\\\"),e.overplot=h(r,\\\"g\\\",\\\"overplot\\\"),e.xlines=h(r,\\\"path\\\",\\\"xlines-above\\\"),e.ylines=h(r,\\\"path\\\",\\\"ylines-above\\\"),e.overlinesAbove=h(r,\\\"g\\\",\\\"overlines-above\\\"),h(r,\\\"g\\\",\\\"xaxislayer-above\\\"),h(r,\\\"g\\\",\\\"yaxislayer-above\\\"),e.overaxesAbove=h(r,\\\"g\\\",\\\"overaxes-above\\\"),e.xlines=r.select(\\\".xlines-\\\"+i),e.ylines=r.select(\\\".ylines-\\\"+a),e.xaxislayer=r.select(\\\".xaxislayer-\\\"+i),e.yaxislayer=r.select(\\\".yaxislayer-\\\"+a)}o||(p(e.minorGridlayer,\\\"g\\\",e.xaxis._id),p(e.minorGridlayer,\\\"g\\\",e.yaxis._id),e.minorGridlayer.selectAll(\\\"g\\\").map((function(t){return t[0]})).sort(u.idSort),p(e.gridlayer,\\\"g\\\",e.xaxis._id),p(e.gridlayer,\\\"g\\\",e.yaxis._id),e.gridlayer.selectAll(\\\"g\\\").map((function(t){return t[0]})).sort(u.idSort)),e.xlines.style(\\\"fill\\\",\\\"none\\\").classed(\\\"crisp\\\",!0),e.ylines.style(\\\"fill\\\",\\\"none\\\").classed(\\\"crisp\\\",!0)}function g(t,e){if(t){var r={};for(var i in t.each((function(t){var i=t[0];n.select(this).remove(),y(i,e),r[i]=!0})),e._plots)for(var a=e._plots[i].overlays||[],o=0;o<a.length;o++){var s=a[o];r[s.id]&&s.plot.selectAll(\\\".trace\\\").remove()}}}function y(t,e){e._draggers.selectAll(\\\"g.\\\"+t).remove(),e._defs.select(\\\"#clip\\\"+e._uid+t+\\\"plot\\\").remove()}e.name=\\\"cartesian\\\",e.attr=[\\\"xaxis\\\",\\\"yaxis\\\"],e.idRoot=[\\\"x\\\",\\\"y\\\"],e.idRegex=c.idRegex,e.attrRegex=c.attrRegex,e.attributes=r(89502),e.layoutAttributes=r(13838),e.supplyLayoutDefaults=r(86763),e.transitionAxes=r(66847),e.finalizeSubplots=function(t,e){var r,n,i,o=e._subplots,s=o.xaxis,l=o.yaxis,f=o.cartesian,h=f.concat(o.gl2d||[]),p={},d={};for(r=0;r<h.length;r++){var v=h[r].split(\\\"y\\\");p[v[0]]=1,d[\\\"y\\\"+v[1]]=1}for(r=0;r<s.length;r++)p[n=s[r]]||(i=(t[u.id2name(n)]||{}).anchor,c.idRegex.y.test(i)||(i=\\\"y\\\"),f.push(n+i),h.push(n+i),d[i]||(d[i]=1,a.pushUnique(l,i)));for(r=0;r<l.length;r++)d[i=l[r]]||(n=(t[u.id2name(i)]||{}).anchor,c.idRegex.x.test(n)||(n=\\\"x\\\"),f.push(n+i),h.push(n+i),p[n]||(p[n]=1,a.pushUnique(s,n)));if(!h.length){for(var g in n=\\\"\\\",i=\\\"\\\",t)c.attrRegex.test(g)&&(\\\"x\\\"===g.charAt(0)?(!n||+g.substr(5)<+n.substr(5))&&(n=g):(!i||+g.substr(5)<+i.substr(5))&&(i=g));n=n?u.name2id(n):\\\"x\\\",i=i?u.name2id(i):\\\"y\\\",s.push(n),l.push(i),f.push(n+i)}},e.plot=function(t,e,r,n){var i,a=t._fullLayout,o=a._subplots.cartesian,s=t.calcdata;if(!Array.isArray(e))for(e=[],i=0;i<s.length;i++)e.push(i);for(i=0;i<o.length;i++){for(var l,u=o[i],c=a._plots[u],f=[],h=0;h<s.length;h++){var p=s[h],v=p[0].trace;v.xaxis+v.yaxis===u&&((-1!==e.indexOf(v.index)||v.carpet)&&(l&&l[0].trace.xaxis+l[0].trace.yaxis===u&&-1!==[\\\"tonextx\\\",\\\"tonexty\\\",\\\"tonext\\\"].indexOf(v.fill)&&-1===f.indexOf(l)&&f.push(l),f.push(p)),l=p)}d(t,c,f,r,n)}},e.clean=function(t,e,r,n){var i,a,o,s=n._plots||{},l=e._plots||{},c=n._subplots||{};if(n._hasOnlyLargeSploms&&!e._hasOnlyLargeSploms)for(o in s)(i=s[o]).plotgroup&&i.plotgroup.remove();var f=n._has&&n._has(\\\"gl\\\"),h=e._has&&e._has(\\\"gl\\\");if(f&&!h)for(o in s)(i=s[o])._scene&&i._scene.destroy();if(c.xaxis&&c.yaxis){var p=u.listIds({_fullLayout:n});for(a=0;a<p.length;a++){var d=p[a];e[u.id2name(d)]||n._infolayer.selectAll(\\\".g-\\\"+d+\\\"title\\\").remove()}}var v=n._has&&n._has(\\\"cartesian\\\"),m=e._has&&e._has(\\\"cartesian\\\");if(v&&!m)g(n._cartesianlayer.selectAll(\\\".subplot\\\"),n),n._defs.selectAll(\\\".axesclip\\\").remove(),delete n._axisConstraintGroups,delete n._axisMatchGroups;else if(c.cartesian)for(a=0;a<c.cartesian.length;a++){var x=c.cartesian[a];if(!l[x]){var b=\\\".\\\"+x+\\\",.\\\"+x+\\\"-x,.\\\"+x+\\\"-y\\\";n._cartesianlayer.selectAll(b).remove(),y(x,n)}}},e.drawFramework=function(t){var e=t._fullLayout,r=function(t){var e,r,n,i,a,o,s=t._fullLayout,l=s._subplots.cartesian,u=l.length,c=[],f=[];for(e=0;e<u;e++){n=l[e],a=(i=s._plots[n]).xaxis,o=i.yaxis;var h=a._mainAxis,p=o._mainAxis,d=h._id+p._id,v=s._plots[d];i.overlays=[],d!==n&&v?(i.mainplot=d,i.mainplotinfo=v,f.push(n)):(i.mainplot=void 0,i.mainplotinfo=void 0,c.push(n))}for(e=0;e<f.length;e++)n=f[e],(i=s._plots[n]).mainplotinfo.overlays.push(i);var g=c.concat(f),y=new Array(u);for(e=0;e<u;e++){n=g[e],a=(i=s._plots[n]).xaxis,o=i.yaxis;var m=[n,a.layer,o.layer,a.overlaying||\\\"\\\",o.overlaying||\\\"\\\"];for(r=0;r<i.overlays.length;r++)m.push(i.overlays[r].id);y[e]=m}return y}(t),i=e._cartesianlayer.selectAll(\\\".subplot\\\").data(r,String);i.enter().append(\\\"g\\\").attr(\\\"class\\\",(function(t){return\\\"subplot \\\"+t[0]})),i.order(),i.exit().call(g,e),i.each((function(r){var i=r[0],a=e._plots[i];a.plotgroup=n.select(this),v(t,a),a.draglayer=h(e._draggers,\\\"g\\\",i)}))},e.rangePlot=function(t,e,r){v(t,e),d(t,e,r),o.style(t)},e.toSVG=function(t){var e=t._fullLayout._glimages,r=n.select(t).selectAll(\\\".svg-container\\\");r.filter((function(t,e){return e===r.size()-1})).selectAll(\\\".gl-canvas-context, .gl-canvas-focus\\\").each((function(){var t=this,r=t.toDataURL(\\\"image/png\\\");e.append(\\\"svg:image\\\").attr({xmlns:f.svg,\\\"xlink:href\\\":r,preserveAspectRatio:\\\"none\\\",x:0,y:0,width:t.style.width,height:t.style.height})}))},e.updateFx=r(4305).updateFx},13838:function(t,e,r){\\\"use strict\\\";var n=r(41940),i=r(22399),a=r(79952).P,o=r(1426).extendFlat,s=r(44467).templatedArray,l=r(12663).descriptionWithDates,u=r(50606).ONEDAY,c=r(85555),f=c.HOUR_PATTERN,h=c.WEEKDAY_PATTERN,p={valType:\\\"enumerated\\\",values:[\\\"auto\\\",\\\"linear\\\",\\\"array\\\"],editType:\\\"ticks\\\",impliedEdits:{tick0:void 0,dtick:void 0}},d=o({},p,{values:p.values.slice().concat([\\\"sync\\\"])});function v(t){return{valType:\\\"integer\\\",min:0,dflt:t?5:0,editType:\\\"ticks\\\"}}var g={valType:\\\"any\\\",editType:\\\"ticks\\\",impliedEdits:{tickmode:\\\"linear\\\"}},y={valType:\\\"any\\\",editType:\\\"ticks\\\",impliedEdits:{tickmode:\\\"linear\\\"}},m={valType:\\\"data_array\\\",editType:\\\"ticks\\\"},x={valType:\\\"enumerated\\\",values:[\\\"outside\\\",\\\"inside\\\",\\\"\\\"],editType:\\\"ticks\\\"};function b(t){var e={valType:\\\"number\\\",min:0,editType:\\\"ticks\\\"};return t||(e.dflt=5),e}function _(t){var e={valType:\\\"number\\\",min:0,editType:\\\"ticks\\\"};return t||(e.dflt=1),e}var w={valType:\\\"color\\\",dflt:i.defaultLine,editType:\\\"ticks\\\"},T={valType:\\\"color\\\",dflt:i.lightLine,editType:\\\"ticks\\\"};function k(t){var e={valType:\\\"number\\\",min:0,editType:\\\"ticks\\\"};return t||(e.dflt=1),e}var A=o({},a,{editType:\\\"ticks\\\"}),M={valType:\\\"boolean\\\",editType:\\\"ticks\\\"};t.exports={visible:{valType:\\\"boolean\\\",editType:\\\"plot\\\"},color:{valType:\\\"color\\\",dflt:i.defaultLine,editType:\\\"ticks\\\"},title:{text:{valType:\\\"string\\\",editType:\\\"ticks\\\"},font:n({editType:\\\"ticks\\\"}),standoff:{valType:\\\"number\\\",min:0,editType:\\\"ticks\\\"},editType:\\\"ticks\\\"},type:{valType:\\\"enumerated\\\",values:[\\\"-\\\",\\\"linear\\\",\\\"log\\\",\\\"date\\\",\\\"category\\\",\\\"multicategory\\\"],dflt:\\\"-\\\",editType:\\\"calc\\\",_noTemplating:!0},autotypenumbers:{valType:\\\"enumerated\\\",values:[\\\"convert types\\\",\\\"strict\\\"],dflt:\\\"convert types\\\",editType:\\\"calc\\\"},autorange:{valType:\\\"enumerated\\\",values:[!0,!1,\\\"reversed\\\"],dflt:!0,editType:\\\"axrange\\\",impliedEdits:{\\\"range[0]\\\":void 0,\\\"range[1]\\\":void 0}},rangemode:{valType:\\\"enumerated\\\",values:[\\\"normal\\\",\\\"tozero\\\",\\\"nonnegative\\\"],dflt:\\\"normal\\\",editType:\\\"plot\\\"},range:{valType:\\\"info_array\\\",items:[{valType:\\\"any\\\",editType:\\\"axrange\\\",impliedEdits:{\\\"^autorange\\\":!1},anim:!0},{valType:\\\"any\\\",editType:\\\"axrange\\\",impliedEdits:{\\\"^autorange\\\":!1},anim:!0}],editType:\\\"axrange\\\",impliedEdits:{autorange:!1},anim:!0},fixedrange:{valType:\\\"boolean\\\",dflt:!1,editType:\\\"calc\\\"},scaleanchor:{valType:\\\"enumerated\\\",values:[c.idRegex.x.toString(),c.idRegex.y.toString()],editType:\\\"plot\\\"},scaleratio:{valType:\\\"number\\\",min:0,dflt:1,editType:\\\"plot\\\"},constrain:{valType:\\\"enumerated\\\",values:[\\\"range\\\",\\\"domain\\\"],editType:\\\"plot\\\"},constraintoward:{valType:\\\"enumerated\\\",values:[\\\"left\\\",\\\"center\\\",\\\"right\\\",\\\"top\\\",\\\"middle\\\",\\\"bottom\\\"],editType:\\\"plot\\\"},matches:{valType:\\\"enumerated\\\",values:[c.idRegex.x.toString(),c.idRegex.y.toString()],editType:\\\"calc\\\"},rangebreaks:s(\\\"rangebreak\\\",{enabled:{valType:\\\"boolean\\\",dflt:!0,editType:\\\"calc\\\"},bounds:{valType:\\\"info_array\\\",items:[{valType:\\\"any\\\",editType:\\\"calc\\\"},{valType:\\\"any\\\",editType:\\\"calc\\\"}],editType:\\\"calc\\\"},pattern:{valType:\\\"enumerated\\\",values:[h,f,\\\"\\\"],editType:\\\"calc\\\"},values:{valType:\\\"info_array\\\",freeLength:!0,editType:\\\"calc\\\",items:{valType:\\\"any\\\",editType:\\\"calc\\\"}},dvalue:{valType:\\\"number\\\",editType:\\\"calc\\\",min:0,dflt:u},editType:\\\"calc\\\"}),tickmode:d,nticks:v(),tick0:g,dtick:y,ticklabelstep:{valType:\\\"integer\\\",min:1,dflt:1,editType:\\\"ticks\\\"},tickvals:m,ticktext:{valType:\\\"data_array\\\",editType:\\\"ticks\\\"},ticks:x,tickson:{valType:\\\"enumerated\\\",values:[\\\"labels\\\",\\\"boundaries\\\"],dflt:\\\"labels\\\",editType:\\\"ticks\\\"},ticklabelmode:{valType:\\\"enumerated\\\",values:[\\\"instant\\\",\\\"period\\\"],dflt:\\\"instant\\\",editType:\\\"ticks\\\"},ticklabelposition:{valType:\\\"enumerated\\\",values:[\\\"outside\\\",\\\"inside\\\",\\\"outside top\\\",\\\"inside top\\\",\\\"outside left\\\",\\\"inside left\\\",\\\"outside right\\\",\\\"inside right\\\",\\\"outside bottom\\\",\\\"inside bottom\\\"],dflt:\\\"outside\\\",editType:\\\"calc\\\"},ticklabeloverflow:{valType:\\\"enumerated\\\",values:[\\\"allow\\\",\\\"hide past div\\\",\\\"hide past domain\\\"],editType:\\\"calc\\\"},mirror:{valType:\\\"enumerated\\\",values:[!0,\\\"ticks\\\",!1,\\\"all\\\",\\\"allticks\\\"],dflt:!1,editType:\\\"ticks+layoutstyle\\\"},ticklen:b(),tickwidth:_(),tickcolor:w,showticklabels:{valType:\\\"boolean\\\",dflt:!0,editType:\\\"ticks\\\"},labelalias:{valType:\\\"any\\\",dflt:!1,editType:\\\"ticks\\\"},automargin:{valType:\\\"flaglist\\\",flags:[\\\"height\\\",\\\"width\\\",\\\"left\\\",\\\"right\\\",\\\"top\\\",\\\"bottom\\\"],extras:[!0,!1],dflt:!1,editType:\\\"ticks\\\"},showspikes:{valType:\\\"boolean\\\",dflt:!1,editType:\\\"modebar\\\"},spikecolor:{valType:\\\"color\\\",dflt:null,editType:\\\"none\\\"},spikethickness:{valType:\\\"number\\\",dflt:3,editType:\\\"none\\\"},spikedash:o({},a,{dflt:\\\"dash\\\",editType:\\\"none\\\"}),spikemode:{valType:\\\"flaglist\\\",flags:[\\\"toaxis\\\",\\\"across\\\",\\\"marker\\\"],dflt:\\\"toaxis\\\",editType:\\\"none\\\"},spikesnap:{valType:\\\"enumerated\\\",values:[\\\"data\\\",\\\"cursor\\\",\\\"hovered data\\\"],dflt:\\\"hovered data\\\",editType:\\\"none\\\"},tickfont:n({editType:\\\"ticks\\\"}),tickangle:{valType:\\\"angle\\\",dflt:\\\"auto\\\",editType:\\\"ticks\\\"},tickprefix:{valType:\\\"string\\\",dflt:\\\"\\\",editType:\\\"ticks\\\"},showtickprefix:{valType:\\\"enumerated\\\",values:[\\\"all\\\",\\\"first\\\",\\\"last\\\",\\\"none\\\"],dflt:\\\"all\\\",editType:\\\"ticks\\\"},ticksuffix:{valType:\\\"string\\\",dflt:\\\"\\\",editType:\\\"ticks\\\"},showticksuffix:{valType:\\\"enumerated\\\",values:[\\\"all\\\",\\\"first\\\",\\\"last\\\",\\\"none\\\"],dflt:\\\"all\\\",editType:\\\"ticks\\\"},showexponent:{valType:\\\"enumerated\\\",values:[\\\"all\\\",\\\"first\\\",\\\"last\\\",\\\"none\\\"],dflt:\\\"all\\\",editType:\\\"ticks\\\"},exponentformat:{valType:\\\"enumerated\\\",values:[\\\"none\\\",\\\"e\\\",\\\"E\\\",\\\"power\\\",\\\"SI\\\",\\\"B\\\"],dflt:\\\"B\\\",editType:\\\"ticks\\\"},minexponent:{valType:\\\"number\\\",dflt:3,min:0,editType:\\\"ticks\\\"},separatethousands:{valType:\\\"boolean\\\",dflt:!1,editType:\\\"ticks\\\"},tickformat:{valType:\\\"string\\\",dflt:\\\"\\\",editType:\\\"ticks\\\",description:l(\\\"tick label\\\")},tickformatstops:s(\\\"tickformatstop\\\",{enabled:{valType:\\\"boolean\\\",dflt:!0,editType:\\\"ticks\\\"},dtickrange:{valType:\\\"info_array\\\",items:[{valType:\\\"any\\\",editType:\\\"ticks\\\"},{valType:\\\"any\\\",editType:\\\"ticks\\\"}],editType:\\\"ticks\\\"},value:{valType:\\\"string\\\",dflt:\\\"\\\",editType:\\\"ticks\\\"},editType:\\\"ticks\\\"}),hoverformat:{valType:\\\"string\\\",dflt:\\\"\\\",editType:\\\"none\\\",description:l(\\\"hover text\\\")},showline:{valType:\\\"boolean\\\",dflt:!1,editType:\\\"ticks+layoutstyle\\\"},linecolor:{valType:\\\"color\\\",dflt:i.defaultLine,editType:\\\"layoutstyle\\\"},linewidth:{valType:\\\"number\\\",min:0,dflt:1,editType:\\\"ticks+layoutstyle\\\"},showgrid:M,gridcolor:T,gridwidth:k(),griddash:A,zeroline:{valType:\\\"boolean\\\",editType:\\\"ticks\\\"},zerolinecolor:{valType:\\\"color\\\",dflt:i.defaultLine,editType:\\\"ticks\\\"},zerolinewidth:{valType:\\\"number\\\",dflt:1,editType:\\\"ticks\\\"},showdividers:{valType:\\\"boolean\\\",dflt:!0,editType:\\\"ticks\\\"},dividercolor:{valType:\\\"color\\\",dflt:i.defaultLine,editType:\\\"ticks\\\"},dividerwidth:{valType:\\\"number\\\",dflt:1,editType:\\\"ticks\\\"},anchor:{valType:\\\"enumerated\\\",values:[\\\"free\\\",c.idRegex.x.toString(),c.idRegex.y.toString()],editType:\\\"plot\\\"},side:{valType:\\\"enumerated\\\",values:[\\\"top\\\",\\\"bottom\\\",\\\"left\\\",\\\"right\\\"],editType:\\\"plot\\\"},overlaying:{valType:\\\"enumerated\\\",values:[\\\"free\\\",c.idRegex.x.toString(),c.idRegex.y.toString()],editType:\\\"plot\\\"},minor:{tickmode:p,nticks:v(\\\"minor\\\"),tick0:g,dtick:y,tickvals:m,ticks:x,ticklen:b(\\\"minor\\\"),tickwidth:_(\\\"minor\\\"),tickcolor:w,gridcolor:T,gridwidth:k(\\\"minor\\\"),griddash:A,showgrid:M,editType:\\\"ticks\\\"},layer:{valType:\\\"enumerated\\\",values:[\\\"above traces\\\",\\\"below traces\\\"],dflt:\\\"above traces\\\",editType:\\\"plot\\\"},domain:{valType:\\\"info_array\\\",items:[{valType:\\\"number\\\",min:0,max:1,editType:\\\"plot\\\"},{valType:\\\"number\\\",min:0,max:1,editType:\\\"plot\\\"}],dflt:[0,1],editType:\\\"plot\\\"},position:{valType:\\\"number\\\",min:0,max:1,dflt:0,editType:\\\"plot\\\"},autoshift:{valType:\\\"boolean\\\",dflt:!1,editType:\\\"plot\\\"},shift:{valType:\\\"number\\\",editType:\\\"plot\\\"},categoryorder:{valType:\\\"enumerated\\\",values:[\\\"trace\\\",\\\"category ascending\\\",\\\"category descending\\\",\\\"array\\\",\\\"total ascending\\\",\\\"total descending\\\",\\\"min ascending\\\",\\\"min descending\\\",\\\"max ascending\\\",\\\"max descending\\\",\\\"sum ascending\\\",\\\"sum descending\\\",\\\"mean ascending\\\",\\\"mean descending\\\",\\\"median ascending\\\",\\\"median descending\\\"],dflt:\\\"trace\\\",editType:\\\"calc\\\"},categoryarray:{valType:\\\"data_array\\\",editType:\\\"calc\\\"},uirevision:{valType:\\\"any\\\",editType:\\\"none\\\"},editType:\\\"calc\\\",_deprecated:{autotick:{valType:\\\"boolean\\\",editType:\\\"ticks\\\"},title:{valType:\\\"string\\\",editType:\\\"ticks\\\"},titlefont:n({editType:\\\"ticks\\\"})}}},86763:function(t,e,r){\\\"use strict\\\";var n=r(71828),i=r(7901),a=r(23469).isUnifiedHover,o=r(98212),s=r(44467),l=r(10820),u=r(13838),c=r(951),f=r(71453),h=r(99082),p=r(52830),d=r(41675),v=d.id2name,g=d.name2id,y=r(85555).AX_ID_PATTERN,m=r(73972),x=m.traceIs,b=m.getComponentMethod;function _(t,e,r){Array.isArray(t[e])?t[e].push(r):t[e]=[r]}t.exports=function(t,e,r){var m,w,T=e.autotypenumbers,k={},A={},M={},S={},E={},L={},C={},P={},O={},I={};for(m=0;m<r.length;m++){var D=r[m];if(x(D,\\\"cartesian\\\")||x(D,\\\"gl2d\\\")){var z,R;if(D.xaxis)z=v(D.xaxis),_(k,z,D);else if(D.xaxes)for(w=0;w<D.xaxes.length;w++)_(k,v(D.xaxes[w]),D);if(D.yaxis)R=v(D.yaxis),_(k,R,D);else if(D.yaxes)for(w=0;w<D.yaxes.length;w++)_(k,v(D.yaxes[w]),D);\\\"funnel\\\"===D.type?\\\"h\\\"===D.orientation?(z&&(A[z]=!0),R&&(C[R]=!0)):R&&(M[R]=!0):\\\"image\\\"===D.type?(R&&(P[R]=!0),z&&(P[z]=!0)):(R&&(E[R]=!0,L[R]=!0),x(D,\\\"carpet\\\")&&(\\\"carpet\\\"!==D.type||D._cheater)||z&&(S[z]=!0)),\\\"carpet\\\"===D.type&&D._cheater&&z&&(A[z]=!0),x(D,\\\"2dMap\\\")&&(O[z]=!0,O[R]=!0),x(D,\\\"oriented\\\")&&(I[\\\"h\\\"===D.orientation?R:z]=!0)}}var F=e._subplots,B=F.xaxis,N=F.yaxis,j=n.simpleMap(B,v),U=n.simpleMap(N,v),V=j.concat(U),H=i.background;B.length&&N.length&&(H=n.coerce(t,e,l,\\\"plot_bgcolor\\\"));var q,G,Z,Y,W,X=i.combine(H,e.paper_bgcolor);function J(){var t=k[q]||[];W._traceIndices=t.map((function(t){return t._expandedIndex})),W._annIndices=[],W._shapeIndices=[],W._selectionIndices=[],W._imgIndices=[],W._subplotsWith=[],W._counterAxes=[],W._name=W._attr=q,W._id=G}function K(t,e){return n.coerce(Y,W,u,t,e)}function $(t,e){return n.coerce2(Y,W,u,t,e)}function Q(t){return\\\"x\\\"===t?N:B}function tt(e,r){for(var n=\\\"x\\\"===e?j:U,i=[],a=0;a<n.length;a++){var o=n[a];o===r||(t[o]||{}).overlaying||i.push(g(o))}return i}var et={x:Q(\\\"x\\\"),y:Q(\\\"y\\\")},rt=et.x.concat(et.y),nt={},it=[];function at(){var t=Y.matches;y.test(t)&&-1===rt.indexOf(t)&&(nt[t]=Y.type,it=Object.keys(nt))}var ot=o(t,e),st=a(ot);for(m=0;m<V.length;m++){q=V[m],G=g(q),Z=q.charAt(0),n.isPlainObject(t[q])||(t[q]={}),Y=t[q],W=s.newContainer(e,q,Z+\\\"axis\\\"),J();var lt=\\\"x\\\"===Z&&!S[q]&&A[q]||\\\"y\\\"===Z&&!E[q]&&M[q],ut=\\\"y\\\"===Z&&(!L[q]&&C[q]||P[q]),ct={hasMinor:!0,letter:Z,font:e.font,outerTicks:O[q],showGrid:!I[q],data:k[q]||[],bgColor:X,calendar:e.calendar,automargin:!0,visibleDflt:lt,reverseDflt:ut,autotypenumbersDflt:T,splomStash:((e._splomAxes||{})[Z]||{})[G]};K(\\\"uirevision\\\",e.uirevision),c(Y,W,K,ct),f(Y,W,K,ct,e);var ft=st&&Z===ot.charAt(0),ht=$(\\\"spikecolor\\\",st?W.color:void 0),pt=$(\\\"spikethickness\\\",st?1.5:void 0),dt=$(\\\"spikedash\\\",st?\\\"dot\\\":void 0),vt=$(\\\"spikemode\\\",st?\\\"across\\\":void 0),gt=$(\\\"spikesnap\\\");K(\\\"showspikes\\\",!!(ft||ht||pt||dt||vt||gt))||(delete W.spikecolor,delete W.spikethickness,delete W.spikedash,delete W.spikemode,delete W.spikesnap);var yt=v(Y.overlaying),mt=[0,1];if(void 0!==e[yt]){var xt=v(e[yt].anchor);void 0!==e[xt]&&(mt=e[xt].domain)}p(Y,W,K,{letter:Z,counterAxes:et[Z],overlayableAxes:tt(Z,q),grid:e.grid,overlayingDomain:mt}),K(\\\"title.standoff\\\"),at(),W._input=Y}for(m=0;m<it.length;){G=it[m++],Z=(q=v(G)).charAt(0),n.isPlainObject(t[q])||(t[q]={}),Y=t[q],W=s.newContainer(e,q,Z+\\\"axis\\\"),J();var bt={letter:Z,font:e.font,outerTicks:O[q],showGrid:!I[q],data:[],bgColor:X,calendar:e.calendar,automargin:!0,visibleDflt:!1,reverseDflt:!1,autotypenumbersDflt:T,splomStash:((e._splomAxes||{})[Z]||{})[G]};K(\\\"uirevision\\\",e.uirevision),W.type=nt[G]||\\\"linear\\\",f(Y,W,K,bt,e),p(Y,W,K,{letter:Z,counterAxes:et[Z],overlayableAxes:tt(Z,q),grid:e.grid}),K(\\\"fixedrange\\\"),at(),W._input=Y}var _t=b(\\\"rangeslider\\\",\\\"handleDefaults\\\"),wt=b(\\\"rangeselector\\\",\\\"handleDefaults\\\");for(m=0;m<j.length;m++)q=j[m],Y=t[q],W=e[q],_t(t,e,q),\\\"date\\\"===W.type&&wt(Y,W,e,U,W.calendar),K(\\\"fixedrange\\\");for(m=0;m<U.length;m++){q=U[m],Y=t[q],W=e[q];var Tt=e[v(W.anchor)];K(\\\"fixedrange\\\",b(\\\"rangeslider\\\",\\\"isVisible\\\")(Tt))}h.handleDefaults(t,e,{axIds:rt.concat(it).sort(d.idSort),axHasImage:P})}},92128:function(t,e,r){\\\"use strict\\\";var n=r(84267).mix,i=r(22399),a=r(71828);t.exports=function(t,e,r,o){var s=(o=o||{}).dfltColor;function l(r,n){return a.coerce2(t,e,o.attributes,r,n)}var u=l(\\\"linecolor\\\",s),c=l(\\\"linewidth\\\");r(\\\"showline\\\",o.showLine||!!u||!!c)||(delete e.linecolor,delete e.linewidth);var f=l(\\\"gridcolor\\\",n(s,o.bgColor,o.blend||i.lightFraction).toRgbString()),h=l(\\\"gridwidth\\\"),p=l(\\\"griddash\\\");if(r(\\\"showgrid\\\",o.showGrid||!!f||!!h||!!p)||(delete e.gridcolor,delete e.gridwidth,delete e.griddash),o.hasMinor){var d=l(\\\"minor.gridcolor\\\",n(e.gridcolor,o.bgColor,67).toRgbString()),v=l(\\\"minor.gridwidth\\\",e.gridwidth||1),g=l(\\\"minor.griddash\\\",e.griddash||\\\"solid\\\");r(\\\"minor.showgrid\\\",!!d||!!v||!!g)||(delete e.minor.gridcolor,delete e.minor.gridwidth,delete e.minor.griddash)}if(!o.noZeroLine){var y=l(\\\"zerolinecolor\\\",s),m=l(\\\"zerolinewidth\\\");r(\\\"zeroline\\\",o.showGrid||!!y||!!m)||(delete e.zerolinecolor,delete e.zerolinewidth)}}},52830:function(t,e,r){\\\"use strict\\\";var n=r(92770),i=r(71828);t.exports=function(t,e,r,a){var o,s,l,u,c,f,h=a.counterAxes||[],p=a.overlayableAxes||[],d=a.letter,v=a.grid,g=a.overlayingDomain;v&&(s=v._domains[d][v._axisMap[e._id]],o=v._anchors[e._id],s&&(l=v[d+\\\"side\\\"].split(\\\" \\\")[0],u=v.domain[d][\\\"right\\\"===l||\\\"top\\\"===l?1:0])),s=s||[0,1],o=o||(n(t.position)?\\\"free\\\":h[0]||\\\"free\\\"),l=l||(\\\"x\\\"===d?\\\"bottom\\\":\\\"left\\\"),u=u||0,c=0,f=!1;var y=i.coerce(t,e,{anchor:{valType:\\\"enumerated\\\",values:[\\\"free\\\"].concat(h),dflt:o}},\\\"anchor\\\"),m=i.coerce(t,e,{side:{valType:\\\"enumerated\\\",values:\\\"x\\\"===d?[\\\"bottom\\\",\\\"top\\\"]:[\\\"left\\\",\\\"right\\\"],dflt:l}},\\\"side\\\");\\\"free\\\"===y&&(\\\"y\\\"===d&&(r(\\\"autoshift\\\")&&(u=\\\"left\\\"===m?g[0]:g[1],f=!e.automargin||e.automargin,c=\\\"left\\\"===m?-3:3),r(\\\"shift\\\",c)),r(\\\"position\\\",u)),r(\\\"automargin\\\",f);var x=!1;if(p.length&&(x=i.coerce(t,e,{overlaying:{valType:\\\"enumerated\\\",values:[!1].concat(p),dflt:!1}},\\\"overlaying\\\")),!x){var b=r(\\\"domain\\\",s);b[0]>b[1]-1/4096&&(e.domain=s),i.noneOrAll(t.domain,e.domain,s),\\\"sync\\\"===e.tickmode&&(e.tickmode=\\\"auto\\\")}return r(\\\"layer\\\"),e}},89426:function(t,e,r){\\\"use strict\\\";var n=r(59652);t.exports=function(t,e,r,i,a){a||(a={});var o=a.tickSuffixDflt,s=n(t);r(\\\"tickprefix\\\")&&r(\\\"showtickprefix\\\",s),r(\\\"ticksuffix\\\",o)&&r(\\\"showticksuffix\\\",s)}},42449:function(t,e,r){\\\"use strict\\\";var n=r(18783).FROM_BL;t.exports=function(t,e,r){void 0===r&&(r=n[t.constraintoward||\\\"center\\\"]);var i=[t.r2l(t.range[0]),t.r2l(t.range[1])],a=i[0]+(i[1]-i[0])*r;t.range=t._input.range=[t.l2r(a+(i[0]-a)*e),t.l2r(a+(i[1]-a)*e)],t.setScale()}},21994:function(t,e,r){\\\"use strict\\\";var n=r(39898),i=r(84096).g0,a=r(71828),o=a.numberFormat,s=r(92770),l=a.cleanNumber,u=a.ms2DateTime,c=a.dateTime2ms,f=a.ensureNumber,h=a.isArrayOrTypedArray,p=r(50606),d=p.FP_SAFE,v=p.BADNUM,g=p.LOG_CLIP,y=p.ONEWEEK,m=p.ONEDAY,x=p.ONEHOUR,b=p.ONEMIN,_=p.ONESEC,w=r(41675),T=r(85555),k=T.HOUR_PATTERN,A=T.WEEKDAY_PATTERN;function M(t){return Math.pow(10,t)}function S(t){return null!=t}t.exports=function(t,e){e=e||{};var r=t._id||\\\"x\\\",p=r.charAt(0);function E(e,r){if(e>0)return Math.log(e)/Math.LN10;if(e<=0&&r&&t.range&&2===t.range.length){var n=t.range[0],i=t.range[1];return.5*(n+i-2*g*Math.abs(n-i))}return v}function L(e,r,n,i){if((i||{}).msUTC&&s(e))return+e;var o=c(e,n||t.calendar);if(o===v){if(!s(e))return v;e=+e;var l=Math.floor(10*a.mod(e+.05,1)),u=Math.round(e-l/10);o=c(new Date(u))+l/10}return o}function C(e,r,n){return u(e,r,n||t.calendar)}function P(e){return t._categories[Math.round(e)]}function O(e){if(S(e)){if(void 0===t._categoriesMap&&(t._categoriesMap={}),void 0!==t._categoriesMap[e])return t._categoriesMap[e];t._categories.push(\\\"number\\\"==typeof e?String(e):e);var r=t._categories.length-1;return t._categoriesMap[e]=r,r}return v}function I(e){if(t._categoriesMap)return t._categoriesMap[e]}function D(t){var e=I(t);return void 0!==e?e:s(t)?+t:void 0}function z(t){return s(t)?+t:I(t)}function R(t,e,r){return n.round(r+e*t,2)}function F(t,e,r){return(t-r)/e}var B=function(e){return s(e)?R(e,t._m,t._b):v},N=function(e){return F(e,t._m,t._b)};if(t.rangebreaks){var j=\\\"y\\\"===p;B=function(e){if(!s(e))return v;var r=t._rangebreaks.length;if(!r)return R(e,t._m,t._b);var n=j;t.range[0]>t.range[1]&&(n=!n);for(var i=n?-1:1,a=i*e,o=0,l=0;l<r;l++){var u=i*t._rangebreaks[l].min,c=i*t._rangebreaks[l].max;if(a<u)break;if(!(a>c)){o=a<(u+c)/2?l:l+1;break}o=l+1}var f=t._B[o]||0;return isFinite(f)?R(e,t._m2,f):0},N=function(e){var r=t._rangebreaks.length;if(!r)return F(e,t._m,t._b);for(var n=0,i=0;i<r&&!(e<t._rangebreaks[i].pmin);i++)e>t._rangebreaks[i].pmax&&(n=i+1);return F(e,t._m2,t._B[n])}}t.c2l=\\\"log\\\"===t.type?E:f,t.l2c=\\\"log\\\"===t.type?M:f,t.l2p=B,t.p2l=N,t.c2p=\\\"log\\\"===t.type?function(t,e){return B(E(t,e))}:B,t.p2c=\\\"log\\\"===t.type?function(t){return M(N(t))}:N,-1!==[\\\"linear\\\",\\\"-\\\"].indexOf(t.type)?(t.d2r=t.r2d=t.d2c=t.r2c=t.d2l=t.r2l=l,t.c2d=t.c2r=t.l2d=t.l2r=f,t.d2p=t.r2p=function(e){return t.l2p(l(e))},t.p2d=t.p2r=N,t.cleanPos=f):\\\"log\\\"===t.type?(t.d2r=t.d2l=function(t,e){return E(l(t),e)},t.r2d=t.r2c=function(t){return M(l(t))},t.d2c=t.r2l=l,t.c2d=t.l2r=f,t.c2r=E,t.l2d=M,t.d2p=function(e,r){return t.l2p(t.d2r(e,r))},t.p2d=function(t){return M(N(t))},t.r2p=function(e){return t.l2p(l(e))},t.p2r=N,t.cleanPos=f):\\\"date\\\"===t.type?(t.d2r=t.r2d=a.identity,t.d2c=t.r2c=t.d2l=t.r2l=L,t.c2d=t.c2r=t.l2d=t.l2r=C,t.d2p=t.r2p=function(e,r,n){return t.l2p(L(e,0,n))},t.p2d=t.p2r=function(t,e,r){return C(N(t),e,r)},t.cleanPos=function(e){return a.cleanDate(e,v,t.calendar)}):\\\"category\\\"===t.type?(t.d2c=t.d2l=O,t.r2d=t.c2d=t.l2d=P,t.d2r=t.d2l_noadd=D,t.r2c=function(e){var r=z(e);return void 0!==r?r:t.fraction2r(.5)},t.l2r=t.c2r=f,t.r2l=z,t.d2p=function(e){return t.l2p(t.r2c(e))},t.p2d=function(t){return P(N(t))},t.r2p=t.d2p,t.p2r=N,t.cleanPos=function(t){return\\\"string\\\"==typeof t&&\\\"\\\"!==t?t:f(t)}):\\\"multicategory\\\"===t.type&&(t.r2d=t.c2d=t.l2d=P,t.d2r=t.d2l_noadd=D,t.r2c=function(e){var r=D(e);return void 0!==r?r:t.fraction2r(.5)},t.r2c_just_indices=I,t.l2r=t.c2r=f,t.r2l=D,t.d2p=function(e){return t.l2p(t.r2c(e))},t.p2d=function(t){return P(N(t))},t.r2p=t.d2p,t.p2r=N,t.cleanPos=function(t){return Array.isArray(t)||\\\"string\\\"==typeof t&&\\\"\\\"!==t?t:f(t)},t.setupMultiCategory=function(n){var i,o,s=t._traceIndices,l=t._matchGroup;if(l&&0===t._categories.length)for(var u in l)if(u!==r){var c=e[w.id2name(u)];s=s.concat(c._traceIndices)}var f=[[0,{}],[0,{}]],d=[];for(i=0;i<s.length;i++){var v=n[s[i]];if(p in v){var g=v[p],y=v._length||a.minRowLength(g);if(h(g[0])&&h(g[1]))for(o=0;o<y;o++){var m=g[0][o],x=g[1][o];S(m)&&S(x)&&(d.push([m,x]),m in f[0][1]||(f[0][1][m]=f[0][0]++),x in f[1][1]||(f[1][1][x]=f[1][0]++))}}}for(d.sort((function(t,e){var r=f[0][1],n=r[t[0]]-r[e[0]];if(n)return n;var i=f[1][1];return i[t[1]]-i[e[1]]})),i=0;i<d.length;i++)O(d[i])}),t.fraction2r=function(e){var r=t.r2l(t.range[0]),n=t.r2l(t.range[1]);return t.l2r(r+e*(n-r))},t.r2fraction=function(e){var r=t.r2l(t.range[0]),n=t.r2l(t.range[1]);return(t.r2l(e)-r)/(n-r)},t.cleanRange=function(e,r){r||(r={}),e||(e=\\\"range\\\");var n,i,o=a.nestedProperty(t,e).get();if(i=(i=\\\"date\\\"===t.type?a.dfltRange(t.calendar):\\\"y\\\"===p?T.DFLTRANGEY:\\\"realaxis\\\"===t._name?[0,1]:r.dfltRange||T.DFLTRANGEX).slice(),\\\"tozero\\\"!==t.rangemode&&\\\"nonnegative\\\"!==t.rangemode||(i[0]=0),o&&2===o.length)for(\\\"date\\\"!==t.type||t.autorange||(o[0]=a.cleanDate(o[0],v,t.calendar),o[1]=a.cleanDate(o[1],v,t.calendar)),n=0;n<2;n++)if(\\\"date\\\"===t.type){if(!a.isDateTime(o[n],t.calendar)){t[e]=i;break}if(t.r2l(o[0])===t.r2l(o[1])){var l=a.constrain(t.r2l(o[0]),a.MIN_MS+1e3,a.MAX_MS-1e3);o[0]=t.l2r(l-1e3),o[1]=t.l2r(l+1e3);break}}else{if(!s(o[n])){if(!s(o[1-n])){t[e]=i;break}o[n]=o[1-n]*(n?10:.1)}if(o[n]<-d?o[n]=-d:o[n]>d&&(o[n]=d),o[0]===o[1]){var u=Math.max(1,Math.abs(1e-6*o[0]));o[0]-=u,o[1]+=u}}else a.nestedProperty(t,e).set(i)},t.setScale=function(r){var n=e._size;if(t.overlaying){var i=w.getFromId({_fullLayout:e},t.overlaying);t.domain=i.domain}var a=r&&t._r?\\\"_r\\\":\\\"range\\\",o=t.calendar;t.cleanRange(a);var s,l,u=t.r2l(t[a][0],o),c=t.r2l(t[a][1],o),f=\\\"y\\\"===p;if(f?(t._offset=n.t+(1-t.domain[1])*n.h,t._length=n.h*(t.domain[1]-t.domain[0]),t._m=t._length/(u-c),t._b=-t._m*c):(t._offset=n.l+t.domain[0]*n.w,t._length=n.w*(t.domain[1]-t.domain[0]),t._m=t._length/(c-u),t._b=-t._m*u),t._rangebreaks=[],t._lBreaks=0,t._m2=0,t._B=[],t.rangebreaks&&(t._rangebreaks=t.locateBreaks(Math.min(u,c),Math.max(u,c)),t._rangebreaks.length)){for(s=0;s<t._rangebreaks.length;s++)l=t._rangebreaks[s],t._lBreaks+=Math.abs(l.max-l.min);var h=f;u>c&&(h=!h),h&&t._rangebreaks.reverse();var d=h?-1:1;for(t._m2=d*t._length/(Math.abs(c-u)-t._lBreaks),t._B.push(-t._m2*(f?c:u)),s=0;s<t._rangebreaks.length;s++)l=t._rangebreaks[s],t._B.push(t._B[t._B.length-1]-d*t._m2*(l.max-l.min));for(s=0;s<t._rangebreaks.length;s++)(l=t._rangebreaks[s]).pmin=B(l.min),l.pmax=B(l.max)}if(!isFinite(t._m)||!isFinite(t._b)||t._length<0)throw e._replotting=!1,new Error(\\\"Something went wrong with axis scaling\\\")},t.maskBreaks=function(e){var r,n,i,o,s,u=t.rangebreaks||[];u._cachedPatterns||(u._cachedPatterns=u.map((function(e){return e.enabled&&e.bounds?a.simpleMap(e.bounds,e.pattern?l:t.d2c):null}))),u._cachedValues||(u._cachedValues=u.map((function(e){return e.enabled&&e.values?a.simpleMap(e.values,t.d2c).sort(a.sorterAsc):null})));for(var c=0;c<u.length;c++){var f=u[c];if(f.enabled)if(f.bounds){var h=f.pattern;switch(n=(r=u._cachedPatterns[c])[0],i=r[1],h){case A:o=(s=new Date(e)).getUTCDay(),n>i&&(i+=7,o<n&&(o+=7));break;case k:o=(s=new Date(e)).getUTCHours()+(s.getUTCMinutes()/60+s.getUTCSeconds()/3600+s.getUTCMilliseconds()/36e5),n>i&&(i+=24,o<n&&(o+=24));break;case\\\"\\\":o=e}if(o>=n&&o<i)return v}else for(var p=u._cachedValues[c],d=0;d<p.length;d++)if(i=(n=p[d])+f.dvalue,e>=n&&e<i)return v}return e},t.locateBreaks=function(e,r){var n,i,o,s,u=[];if(!t.rangebreaks)return u;var c=t.rangebreaks.slice().sort((function(t,e){return t.pattern===A&&e.pattern===k?-1:e.pattern===A&&t.pattern===k?1:0})),f=function(t,n){if((t=a.constrain(t,e,r))!==(n=a.constrain(n,e,r))){for(var i=!0,o=0;o<u.length;o++){var s=u[o];t<s.max&&n>=s.min&&(t<s.min&&(s.min=t),n>s.max&&(s.max=n),i=!1)}i&&u.push({min:t,max:n})}};for(n=0;n<c.length;n++){var h=c[n];if(h.enabled)if(h.bounds){var p=e,d=r;h.pattern&&(p=Math.floor(p)),o=(i=a.simpleMap(h.bounds,h.pattern?l:t.r2l))[0],s=i[1];var v,g,w=new Date(p);switch(h.pattern){case A:g=y,v=(s-o+(s<o?7:0))*m,p+=o*m-(w.getUTCDay()*m+w.getUTCHours()*x+w.getUTCMinutes()*b+w.getUTCSeconds()*_+w.getUTCMilliseconds());break;case k:g=m,v=(s-o+(s<o?24:0))*x,p+=o*x-(w.getUTCHours()*x+w.getUTCMinutes()*b+w.getUTCSeconds()*_+w.getUTCMilliseconds());break;default:p=Math.min(i[0],i[1]),v=g=(d=Math.max(i[0],i[1]))-p}for(var T=p;T<d;T+=g)f(T,T+v)}else for(var M=a.simpleMap(h.values,t.d2c),S=0;S<M.length;S++)f(o=M[S],s=o+h.dvalue)}return u.sort((function(t,e){return t.min-e.min})),u},t.makeCalcdata=function(e,r,n){var i,o,s,l,u=t.type,c=\\\"date\\\"===u&&e[r+\\\"calendar\\\"];if(r in e){if(i=e[r],l=e._length||a.minRowLength(i),a.isTypedArray(i)&&(\\\"linear\\\"===u||\\\"log\\\"===u)){if(l===i.length)return i;if(i.subarray)return i.subarray(0,l)}if(\\\"multicategory\\\"===u)return function(t,e){for(var r=new Array(e),n=0;n<e;n++){var i=(t[0]||[])[n],a=(t[1]||[])[n];r[n]=I([i,a])}return r}(i,l);for(o=new Array(l),s=0;s<l;s++)o[s]=t.d2c(i[s],0,c,n)}else{var f=r+\\\"0\\\"in e?t.d2c(e[r+\\\"0\\\"],0,c):0,h=e[\\\"d\\\"+r]?Number(e[\\\"d\\\"+r]):1;for(i=e[{x:\\\"y\\\",y:\\\"x\\\"}[r]],l=e._length||i.length,o=new Array(l),s=0;s<l;s++)o[s]=f+s*h}if(t.rangebreaks)for(s=0;s<l;s++)o[s]=t.maskBreaks(o[s]);return o},t.isValidRange=function(e){return Array.isArray(e)&&2===e.length&&s(t.r2l(e[0]))&&s(t.r2l(e[1]))},t.isPtWithinRange=function(e,r){var n=t.c2l(e[p],null,r),i=t.r2l(t.range[0]),a=t.r2l(t.range[1]);return i<a?i<=n&&n<=a:a<=n&&n<=i},t._emptyCategories=function(){t._categories=[],t._categoriesMap={}},t.clearCalc=function(){var r=t._matchGroup;if(r){var n=null,i=null;for(var a in r){var o=e[w.id2name(a)];if(o._categories){n=o._categories,i=o._categoriesMap;break}}n&&i?(t._categories=n,t._categoriesMap=i):t._emptyCategories()}else t._emptyCategories();if(t._initialCategories)for(var s=0;s<t._initialCategories.length;s++)O(t._initialCategories[s])},t.sortByInitialCategories=function(){var n=[];if(t._emptyCategories(),t._initialCategories)for(var i=0;i<t._initialCategories.length;i++)O(t._initialCategories[i]);n=n.concat(t._traceIndices);var a=t._matchGroup;for(var o in a)if(r!==o){var s=e[w.id2name(o)];s._categories=t._categories,s._categoriesMap=t._categoriesMap,n=n.concat(s._traceIndices)}return n};var U=e._d3locale;\\\"date\\\"===t.type&&(t._dateFormat=U?U.timeFormat:i,t._extraFormat=e._extraFormat),t._separators=e.separators,t._numFormat=U?U.numberFormat:o,delete t._minDtick,delete t._forceTick0}},59652:function(t){\\\"use strict\\\";t.exports=function(t){var e=[\\\"showexponent\\\",\\\"showtickprefix\\\",\\\"showticksuffix\\\"].filter((function(e){return void 0!==t[e]}));if(e.every((function(r){return t[r]===t[e[0]]}))||1===e.length)return t[e[0]]}},96115:function(t,e,r){\\\"use strict\\\";var n=r(71828),i=r(7901).contrast,a=r(13838),o=r(59652),s=r(85501);function l(t,e){function r(r,i){return n.coerce(t,e,a.tickformatstops,r,i)}r(\\\"enabled\\\")&&(r(\\\"dtickrange\\\"),r(\\\"value\\\"))}t.exports=function(t,e,r,u,c){c||(c={});var f=r(\\\"labelalias\\\");n.isPlainObject(f)||delete e.labelalias;var h=o(t);if(r(\\\"showticklabels\\\")){var p=c.font||{},d=e.color,v=-1!==(e.ticklabelposition||\\\"\\\").indexOf(\\\"inside\\\")?i(c.bgColor):d&&d!==a.color.dflt?d:p.color;if(n.coerceFont(r,\\\"tickfont\\\",{family:p.family,size:p.size,color:v}),c.noTicklabelstep||\\\"multicategory\\\"===u||\\\"log\\\"===u||r(\\\"ticklabelstep\\\"),c.noAng||r(\\\"tickangle\\\"),\\\"category\\\"!==u){var g=r(\\\"tickformat\\\");s(t,e,{name:\\\"tickformatstops\\\",inclusionAttr:\\\"enabled\\\",handleItemDefaults:l}),e.tickformatstops.length||delete e.tickformatstops,c.noExp||g||\\\"date\\\"===u||(r(\\\"showexponent\\\",h),r(\\\"exponentformat\\\"),r(\\\"minexponent\\\"),r(\\\"separatethousands\\\"))}}}},38701:function(t,e,r){\\\"use strict\\\";var n=r(71828),i=r(13838);t.exports=function(t,e,r,a){var o=a.isMinor,s=o?t.minor||{}:t,l=o?e.minor:e,u=o?i.minor:i,c=o?\\\"minor.\\\":\\\"\\\",f=n.coerce2(s,l,u,\\\"ticklen\\\",o?.6*(e.ticklen||5):void 0),h=n.coerce2(s,l,u,\\\"tickwidth\\\",o?e.tickwidth||1:void 0),p=n.coerce2(s,l,u,\\\"tickcolor\\\",(o?e.tickcolor:void 0)||l.color);r(c+\\\"ticks\\\",!o&&a.outerTicks||f||h||p?\\\"outside\\\":\\\"\\\")||(delete l.ticklen,delete l.tickwidth,delete l.tickcolor)}},26218:function(t,e,r){\\\"use strict\\\";var n=r(66287),i=r(71828).isArrayOrTypedArray;t.exports=function(t,e,r,a,o){o||(o={});var s=o.isMinor,l=s?t.minor||{}:t,u=s?e.minor:e,c=s?\\\"minor.\\\":\\\"\\\";function f(t){var e=l[t];return void 0!==e?e:(u._template||{})[t]}var h=f(\\\"tick0\\\"),p=f(\\\"dtick\\\"),d=f(\\\"tickvals\\\"),v=r(c+\\\"tickmode\\\",i(d)?\\\"array\\\":p?\\\"linear\\\":\\\"auto\\\");if(\\\"auto\\\"===v||\\\"sync\\\"===v)r(c+\\\"nticks\\\");else if(\\\"linear\\\"===v){var g=u.dtick=n.dtick(p,a);u.tick0=n.tick0(h,a,e.calendar,g)}else\\\"multicategory\\\"!==a&&(void 0===r(c+\\\"tickvals\\\")?u.tickmode=\\\"auto\\\":s||r(\\\"ticktext\\\"))}},66847:function(t,e,r){\\\"use strict\\\";var n=r(39898),i=r(73972),a=r(71828),o=r(91424),s=r(89298);t.exports=function(t,e,r,l){var u=t._fullLayout;if(0!==e.length){var c,f,h,p;l&&(c=l());var d=n.ease(r.easing);return t._transitionData._interruptCallbacks.push((function(){return window.cancelAnimationFrame(p),p=null,function(){for(var r={},n=0;n<e.length;n++){var a=e[n],o=a.plotinfo.xaxis,s=a.plotinfo.yaxis;a.xr0&&(r[o._name+\\\".range\\\"]=a.xr0.slice()),a.yr0&&(r[s._name+\\\".range\\\"]=a.yr0.slice())}return i.call(\\\"relayout\\\",t,r).then((function(){for(var t=0;t<e.length;t++)v(e[t].plotinfo)}))}()})),f=Date.now(),p=window.requestAnimationFrame((function n(){h=Date.now();for(var a=Math.min(1,(h-f)/r.duration),o=d(a),s=0;s<e.length;s++)g(e[s],o);h-f>r.duration?(function(){for(var r={},n=0;n<e.length;n++){var a=e[n],o=a.plotinfo.xaxis,s=a.plotinfo.yaxis;a.xr1&&(r[o._name+\\\".range\\\"]=a.xr1.slice()),a.yr1&&(r[s._name+\\\".range\\\"]=a.yr1.slice())}c&&c(),i.call(\\\"relayout\\\",t,r).then((function(){for(var t=0;t<e.length;t++)v(e[t].plotinfo)}))}(),p=window.cancelAnimationFrame(n)):p=window.requestAnimationFrame(n)})),Promise.resolve()}function v(t){var e=t.xaxis,r=t.yaxis;u._defs.select(\\\"#\\\"+t.clipId+\\\"> rect\\\").call(o.setTranslate,0,0).call(o.setScale,1,1),t.plot.call(o.setTranslate,e._offset,r._offset).call(o.setScale,1,1);var n=t.plot.selectAll(\\\".scatterlayer .trace\\\");n.selectAll(\\\".point\\\").call(o.setPointGroupScale,1,1),n.selectAll(\\\".textpoint\\\").call(o.setTextPointsScale,1,1),n.call(o.hideOutsideRangePoints,t)}function g(e,r){var n=e.plotinfo,i=n.xaxis,l=n.yaxis,u=i._length,c=l._length,f=!!e.xr1,h=!!e.yr1,p=[];if(f){var d=a.simpleMap(e.xr0,i.r2l),v=a.simpleMap(e.xr1,i.r2l),g=d[1]-d[0],y=v[1]-v[0];p[0]=(d[0]*(1-r)+r*v[0]-d[0])/(d[1]-d[0])*u,p[2]=u*(1-r+r*y/g),i.range[0]=i.l2r(d[0]*(1-r)+r*v[0]),i.range[1]=i.l2r(d[1]*(1-r)+r*v[1])}else p[0]=0,p[2]=u;if(h){var m=a.simpleMap(e.yr0,l.r2l),x=a.simpleMap(e.yr1,l.r2l),b=m[1]-m[0],_=x[1]-x[0];p[1]=(m[1]*(1-r)+r*x[1]-m[1])/(m[0]-m[1])*c,p[3]=c*(1-r+r*_/b),l.range[0]=i.l2r(m[0]*(1-r)+r*x[0]),l.range[1]=l.l2r(m[1]*(1-r)+r*x[1])}else p[1]=0,p[3]=c;s.drawOne(t,i,{skipTitle:!0}),s.drawOne(t,l,{skipTitle:!0}),s.redrawComponents(t,[i._id,l._id]);var w=f?u/p[2]:1,T=h?c/p[3]:1,k=f?p[0]:0,A=h?p[1]:0,M=f?p[0]/p[2]*u:0,S=h?p[1]/p[3]*c:0,E=i._offset-M,L=l._offset-S;n.clipRect.call(o.setTranslate,k,A).call(o.setScale,1/w,1/T),n.plot.call(o.setTranslate,E,L).call(o.setScale,w,T),o.setPointGroupScale(n.zoomScalePts,1/w,1/T),o.setTextPointsScale(n.zoomScaleTxt,1/w,1/T)}s.redrawComponents(t)}},951:function(t,e,r){\\\"use strict\\\";var n=r(73972).traceIs,i=r(4322);function a(t){return{v:\\\"x\\\",h:\\\"y\\\"}[t.orientation||\\\"v\\\"]}function o(t,e){var r=a(t),i=n(t,\\\"box-violin\\\"),o=n(t._fullInput||{},\\\"candlestick\\\");return i&&!o&&e===r&&void 0===t[r]&&void 0===t[r+\\\"0\\\"]}t.exports=function(t,e,r,s){r(\\\"autotypenumbers\\\",s.autotypenumbersDflt),\\\"-\\\"===r(\\\"type\\\",(s.splomStash||{}).type)&&(function(t,e){if(\\\"-\\\"===t.type){var r,s=t._id,l=s.charAt(0);-1!==s.indexOf(\\\"scene\\\")&&(s=l);var u=function(t,e,r){for(var n=0;n<t.length;n++){var i=t[n];if(\\\"splom\\\"===i.type&&i._length>0&&(i[\\\"_\\\"+r+\\\"axes\\\"]||{})[e])return i;if((i[r+\\\"axis\\\"]||r)===e){if(o(i,r))return i;if((i[r]||[]).length||i[r+\\\"0\\\"])return i}}}(e,s,l);if(u)if(\\\"histogram\\\"!==u.type||l!=={v:\\\"y\\\",h:\\\"x\\\"}[u.orientation||\\\"v\\\"]){var c=l+\\\"calendar\\\",f=u[c],h={noMultiCategory:!n(u,\\\"cartesian\\\")||n(u,\\\"noMultiCategory\\\")};if(\\\"box\\\"===u.type&&u._hasPreCompStats&&l==={h:\\\"x\\\",v:\\\"y\\\"}[u.orientation||\\\"v\\\"]&&(h.noMultiCategory=!0),h.autotypenumbers=t.autotypenumbers,o(u,l)){var p=a(u),d=[];for(r=0;r<e.length;r++){var v=e[r];n(v,\\\"box-violin\\\")&&(v[l+\\\"axis\\\"]||l)===s&&(void 0!==v[p]?d.push(v[p][0]):void 0!==v.name?d.push(v.name):d.push(\\\"text\\\"),v[c]!==f&&(f=void 0))}t.type=i(d,f,h)}else if(\\\"splom\\\"===u.type){var g=u.dimensions[u._axesDim[s]];g.visible&&(t.type=i(g.values,f,h))}else t.type=i(u[l]||[u[l+\\\"0\\\"]],f,h)}else t.type=\\\"linear\\\"}}(e,s.data),\\\"-\\\"===e.type?e.type=\\\"linear\\\":t.type=e.type)}},31137:function(t,e,r){\\\"use strict\\\";var n=r(73972),i=r(71828);function a(t,e,r){var n,a,o,s=!1;if(\\\"data\\\"===e.type)n=t._fullData[null!==e.traces?e.traces[0]:0];else{if(\\\"layout\\\"!==e.type)return!1;n=t._fullLayout}return a=i.nestedProperty(n,e.prop).get(),(o=r[e.type]=r[e.type]||{}).hasOwnProperty(e.prop)&&o[e.prop]!==a&&(s=!0),o[e.prop]=a,{changed:s,value:a}}function o(t,e){var r=[],n=e[0],a={};if(\\\"string\\\"==typeof n)a[n]=e[1];else{if(!i.isPlainObject(n))return r;a=n}return l(a,(function(t,e,n){r.push({type:\\\"layout\\\",prop:t,value:n})}),\\\"\\\",0),r}function s(t,e){var r,n,a,o,s=[];if(n=e[0],a=e[1],r=e[2],o={},\\\"string\\\"==typeof n)o[n]=a;else{if(!i.isPlainObject(n))return s;o=n,void 0===r&&(r=a)}return void 0===r&&(r=null),l(o,(function(e,n,i){var a,o;if(Array.isArray(i)){o=i.slice();var l=Math.min(o.length,t.data.length);r&&(l=Math.min(l,r.length)),a=[];for(var u=0;u<l;u++)a[u]=r?r[u]:u}else o=i,a=r?r.slice():null;if(null===a)Array.isArray(o)&&(o=o[0]);else if(Array.isArray(a)){if(!Array.isArray(o)){var c=o;o=[];for(var f=0;f<a.length;f++)o[f]=c}o.length=Math.min(a.length,o.length)}s.push({type:\\\"data\\\",prop:e,traces:a,value:o})}),\\\"\\\",0),s}function l(t,e,r,n){Object.keys(t).forEach((function(a){var o=t[a];if(\\\"_\\\"!==a[0]){var s=r+(n>0?\\\".\\\":\\\"\\\")+a;i.isPlainObject(o)?l(o,e,s,n+1):e(s,a,o)}}))}e.manageCommandObserver=function(t,r,n,o){var s={},l=!0;r&&r._commandObserver&&(s=r._commandObserver),s.cache||(s.cache={}),s.lookupTable={};var u=e.hasSimpleAPICommandBindings(t,n,s.lookupTable);if(r&&r._commandObserver){if(u)return s;if(r._commandObserver.remove)return r._commandObserver.remove(),r._commandObserver=null,s}if(u){a(t,u,s.cache),s.check=function(){if(l){var e=a(t,u,s.cache);return e.changed&&o&&void 0!==s.lookupTable[e.value]&&(s.disable(),Promise.resolve(o({value:e.value,type:u.type,prop:u.prop,traces:u.traces,index:s.lookupTable[e.value]})).then(s.enable,s.enable)),e.changed}};for(var c=[\\\"plotly_relayout\\\",\\\"plotly_redraw\\\",\\\"plotly_restyle\\\",\\\"plotly_update\\\",\\\"plotly_animatingframe\\\",\\\"plotly_afterplot\\\"],f=0;f<c.length;f++)t._internalOn(c[f],s.check);s.remove=function(){for(var e=0;e<c.length;e++)t._removeInternalListener(c[e],s.check)}}else i.log(\\\"Unable to automatically bind plot updates to API command\\\"),s.lookupTable={},s.remove=function(){};return s.disable=function(){l=!1},s.enable=function(){l=!0},r&&(r._commandObserver=s),s},e.hasSimpleAPICommandBindings=function(t,r,n){var i,a,o=r.length;for(i=0;i<o;i++){var s,l=r[i],u=l.method,c=l.args;if(Array.isArray(c)||(c=[]),!u)return!1;var f=e.computeAPICommandBindings(t,u,c);if(1!==f.length)return!1;if(a){if((s=f[0]).type!==a.type)return!1;if(s.prop!==a.prop)return!1;if(Array.isArray(a.traces)){if(!Array.isArray(s.traces))return!1;s.traces.sort();for(var h=0;h<a.traces.length;h++)if(a.traces[h]!==s.traces[h])return!1}else if(s.prop!==a.prop)return!1}else a=f[0],Array.isArray(a.traces)&&a.traces.sort();var p=(s=f[0]).value;if(Array.isArray(p)){if(1!==p.length)return!1;p=p[0]}n&&(n[p]=i)}return a},e.executeAPICommand=function(t,e,r){if(\\\"skip\\\"===e)return Promise.resolve();var a=n.apiMethodRegistry[e],o=[t];Array.isArray(r)||(r=[]);for(var s=0;s<r.length;s++)o.push(r[s]);return a.apply(null,o).catch((function(t){return i.warn(\\\"API call to Plotly.\\\"+e+\\\" rejected.\\\",t),Promise.reject(t)}))},e.computeAPICommandBindings=function(t,e,r){var n;switch(Array.isArray(r)||(r=[]),e){case\\\"restyle\\\":n=s(t,r);break;case\\\"relayout\\\":n=o(0,r);break;case\\\"update\\\":n=s(t,[r[0],r[2]]).concat(o(0,[r[1]]));break;case\\\"animate\\\":n=function(t,e){return Array.isArray(e[0])&&1===e[0].length&&-1!==[\\\"string\\\",\\\"number\\\"].indexOf(typeof e[0][0])?[{type:\\\"layout\\\",prop:\\\"_currentFrame\\\",value:e[0][0].toString()}]:[]}(0,r);break;default:n=[]}return n}},27670:function(t,e,r){\\\"use strict\\\";var n=r(1426).extendFlat;e.Y=function(t,e){e=e||{};var r={valType:\\\"info_array\\\",editType:(t=t||{}).editType,items:[{valType:\\\"number\\\",min:0,max:1,editType:t.editType},{valType:\\\"number\\\",min:0,max:1,editType:t.editType}],dflt:[0,1]},i=(t.name&&t.name,t.trace,e.description&&e.description,{x:n({},r,{}),y:n({},r,{}),editType:t.editType});return t.noGridCell||(i.row={valType:\\\"integer\\\",min:0,dflt:0,editType:t.editType},i.column={valType:\\\"integer\\\",min:0,dflt:0,editType:t.editType}),i},e.c=function(t,e,r,n){var i=n&&n.x||[0,1],a=n&&n.y||[0,1],o=e.grid;if(o){var s=r(\\\"domain.column\\\");void 0!==s&&(s<o.columns?i=o._domains.x[s]:delete t.domain.column);var l=r(\\\"domain.row\\\");void 0!==l&&(l<o.rows?a=o._domains.y[l]:delete t.domain.row)}var u=r(\\\"domain.x\\\",i),c=r(\\\"domain.y\\\",a);u[0]<u[1]||(t.domain.x=i.slice()),c[0]<c[1]||(t.domain.y=a.slice())}},41940:function(t){\\\"use strict\\\";t.exports=function(t){var e=t.editType,r=t.colorEditType;void 0===r&&(r=e);var n={family:{valType:\\\"string\\\",noBlank:!0,strict:!0,editType:e},size:{valType:\\\"number\\\",min:1,editType:e},color:{valType:\\\"color\\\",editType:r},editType:e};return t.autoSize&&(n.size.dflt=\\\"auto\\\"),t.autoColor&&(n.color.dflt=\\\"auto\\\"),t.arrayOk&&(n.family.arrayOk=!0,n.size.arrayOk=!0,n.color.arrayOk=!0),n}},31391:function(t){\\\"use strict\\\";t.exports={_isLinkedToArray:\\\"frames_entry\\\",group:{valType:\\\"string\\\"},name:{valType:\\\"string\\\"},traces:{valType:\\\"any\\\"},baseframe:{valType:\\\"string\\\"},data:{valType:\\\"any\\\"},layout:{valType:\\\"any\\\"}}},78776:function(t,e){\\\"use strict\\\";e.projNames={airy:\\\"airy\\\",aitoff:\\\"aitoff\\\",\\\"albers usa\\\":\\\"albersUsa\\\",albers:\\\"albers\\\",august:\\\"august\\\",\\\"azimuthal equal area\\\":\\\"azimuthalEqualArea\\\",\\\"azimuthal equidistant\\\":\\\"azimuthalEquidistant\\\",baker:\\\"baker\\\",bertin1953:\\\"bertin1953\\\",boggs:\\\"boggs\\\",bonne:\\\"bonne\\\",bottomley:\\\"bottomley\\\",bromley:\\\"bromley\\\",collignon:\\\"collignon\\\",\\\"conic conformal\\\":\\\"conicConformal\\\",\\\"conic equal area\\\":\\\"conicEqualArea\\\",\\\"conic equidistant\\\":\\\"conicEquidistant\\\",craig:\\\"craig\\\",craster:\\\"craster\\\",\\\"cylindrical equal area\\\":\\\"cylindricalEqualArea\\\",\\\"cylindrical stereographic\\\":\\\"cylindricalStereographic\\\",eckert1:\\\"eckert1\\\",eckert2:\\\"eckert2\\\",eckert3:\\\"eckert3\\\",eckert4:\\\"eckert4\\\",eckert5:\\\"eckert5\\\",eckert6:\\\"eckert6\\\",eisenlohr:\\\"eisenlohr\\\",equirectangular:\\\"equirectangular\\\",fahey:\\\"fahey\\\",\\\"foucaut sinusoidal\\\":\\\"foucautSinusoidal\\\",foucaut:\\\"foucaut\\\",ginzburg4:\\\"ginzburg4\\\",ginzburg5:\\\"ginzburg5\\\",ginzburg6:\\\"ginzburg6\\\",ginzburg8:\\\"ginzburg8\\\",ginzburg9:\\\"ginzburg9\\\",gnomonic:\\\"gnomonic\\\",\\\"gringorten quincuncial\\\":\\\"gringortenQuincuncial\\\",gringorten:\\\"gringorten\\\",guyou:\\\"guyou\\\",hammer:\\\"hammer\\\",hill:\\\"hill\\\",homolosine:\\\"homolosine\\\",hufnagel:\\\"hufnagel\\\",hyperelliptical:\\\"hyperelliptical\\\",kavrayskiy7:\\\"kavrayskiy7\\\",lagrange:\\\"lagrange\\\",larrivee:\\\"larrivee\\\",laskowski:\\\"laskowski\\\",loximuthal:\\\"loximuthal\\\",mercator:\\\"mercator\\\",miller:\\\"miller\\\",mollweide:\\\"mollweide\\\",\\\"mt flat polar parabolic\\\":\\\"mtFlatPolarParabolic\\\",\\\"mt flat polar quartic\\\":\\\"mtFlatPolarQuartic\\\",\\\"mt flat polar sinusoidal\\\":\\\"mtFlatPolarSinusoidal\\\",\\\"natural earth\\\":\\\"naturalEarth\\\",\\\"natural earth1\\\":\\\"naturalEarth1\\\",\\\"natural earth2\\\":\\\"naturalEarth2\\\",\\\"nell hammer\\\":\\\"nellHammer\\\",nicolosi:\\\"nicolosi\\\",orthographic:\\\"orthographic\\\",patterson:\\\"patterson\\\",\\\"peirce quincuncial\\\":\\\"peirceQuincuncial\\\",polyconic:\\\"polyconic\\\",\\\"rectangular polyconic\\\":\\\"rectangularPolyconic\\\",robinson:\\\"robinson\\\",satellite:\\\"satellite\\\",\\\"sinu mollweide\\\":\\\"sinuMollweide\\\",sinusoidal:\\\"sinusoidal\\\",stereographic:\\\"stereographic\\\",times:\\\"times\\\",\\\"transverse mercator\\\":\\\"transverseMercator\\\",\\\"van der grinten\\\":\\\"vanDerGrinten\\\",\\\"van der grinten2\\\":\\\"vanDerGrinten2\\\",\\\"van der grinten3\\\":\\\"vanDerGrinten3\\\",\\\"van der grinten4\\\":\\\"vanDerGrinten4\\\",wagner4:\\\"wagner4\\\",wagner6:\\\"wagner6\\\",wiechel:\\\"wiechel\\\",\\\"winkel tripel\\\":\\\"winkel3\\\",winkel3:\\\"winkel3\\\"},e.axesNames=[\\\"lonaxis\\\",\\\"lataxis\\\"],e.lonaxisSpan={orthographic:180,\\\"azimuthal equal area\\\":360,\\\"azimuthal equidistant\\\":360,\\\"conic conformal\\\":180,gnomonic:160,stereographic:180,\\\"transverse mercator\\\":180,\\\"*\\\":360},e.lataxisSpan={\\\"conic conformal\\\":150,stereographic:179.5,\\\"*\\\":180},e.scopeDefaults={world:{lonaxisRange:[-180,180],lataxisRange:[-90,90],projType:\\\"equirectangular\\\",projRotate:[0,0,0]},usa:{lonaxisRange:[-180,-50],lataxisRange:[15,80],projType:\\\"albers usa\\\"},europe:{lonaxisRange:[-30,60],lataxisRange:[30,85],projType:\\\"conic conformal\\\",projRotate:[15,0,0],projParallels:[0,60]},asia:{lonaxisRange:[22,160],lataxisRange:[-15,55],projType:\\\"mercator\\\",projRotate:[0,0,0]},africa:{lonaxisRange:[-30,60],lataxisRange:[-40,40],projType:\\\"mercator\\\",projRotate:[0,0,0]},\\\"north america\\\":{lonaxisRange:[-180,-45],lataxisRange:[5,85],projType:\\\"conic conformal\\\",projRotate:[-100,0,0],projParallels:[29.5,45.5]},\\\"south america\\\":{lonaxisRange:[-100,-30],lataxisRange:[-60,15],projType:\\\"mercator\\\",projRotate:[0,0,0]}},e.clipPad=.001,e.precision=.1,e.landColor=\\\"#F0DC82\\\",e.waterColor=\\\"#3399FF\\\",e.locationmodeToLayer={\\\"ISO-3\\\":\\\"countries\\\",\\\"USA-states\\\":\\\"subunits\\\",\\\"country names\\\":\\\"countries\\\"},e.sphereSVG={type:\\\"Sphere\\\"},e.fillLayers={ocean:1,land:1,lakes:1},e.lineLayers={subunits:1,countries:1,coastlines:1,rivers:1,frame:1},e.layers=[\\\"bg\\\",\\\"ocean\\\",\\\"land\\\",\\\"lakes\\\",\\\"subunits\\\",\\\"countries\\\",\\\"coastlines\\\",\\\"rivers\\\",\\\"lataxis\\\",\\\"lonaxis\\\",\\\"frame\\\",\\\"backplot\\\",\\\"frontplot\\\"],e.layersForChoropleth=[\\\"bg\\\",\\\"ocean\\\",\\\"land\\\",\\\"subunits\\\",\\\"countries\\\",\\\"coastlines\\\",\\\"lataxis\\\",\\\"lonaxis\\\",\\\"frame\\\",\\\"backplot\\\",\\\"rivers\\\",\\\"lakes\\\",\\\"frontplot\\\"],e.layerNameToAdjective={ocean:\\\"ocean\\\",land:\\\"land\\\",lakes:\\\"lake\\\",subunits:\\\"subunit\\\",countries:\\\"country\\\",coastlines:\\\"coastline\\\",rivers:\\\"river\\\",frame:\\\"frame\\\"}},69082:function(t,e,r){\\\"use strict\\\";var n=r(39898),i=r(27362),a=i.geoPath,o=i.geoDistance,s=r(65704),l=r(73972),u=r(71828),c=u.strTranslate,f=r(7901),h=r(91424),p=r(30211),d=r(74875),v=r(89298),g=r(71739).getAutoRange,y=r(28569),m=r(47322).prepSelect,x=r(47322).clearOutline,b=r(47322).selectOnClick,_=r(74455),w=r(78776),T=r(41327),k=r(90973),A=r(96892).zL;function M(t){this.id=t.id,this.graphDiv=t.graphDiv,this.container=t.container,this.topojsonURL=t.topojsonURL,this.isStatic=t.staticPlot,this.topojsonName=null,this.topojson=null,this.projection=null,this.scope=null,this.viewInitial=null,this.fitScale=null,this.bounds=null,this.midPt=null,this.hasChoropleth=!1,this.traceHash={},this.layers={},this.basePaths={},this.dataPaths={},this.dataPoints={},this.clipDef=null,this.clipRect=null,this.bgRect=null,this.makeFramework()}var S=M.prototype;function E(t,e){var r=w.clipPad,n=t[0]+r,i=t[1]-r,a=e[0]+r,o=e[1]-r;n>0&&i<0&&(i+=360);var s=(i-n)/4;return{type:\\\"Polygon\\\",coordinates:[[[n,a],[n,o],[n+s,o],[n+2*s,o],[n+3*s,o],[i,o],[i,a],[i-s,a],[i-2*s,a],[i-3*s,a],[n,a]]]}}t.exports=function(t){return new M(t)},S.plot=function(t,e,r,n){var i=this;if(n)return i.update(t,e,!0);i._geoCalcData=t,i._fullLayout=e;var a=e[this.id],o=[],s=!1;for(var l in w.layerNameToAdjective)if(\\\"frame\\\"!==l&&a[\\\"show\\\"+l]){s=!0;break}for(var u=!1,c=0;c<t.length;c++){var f=t[0][0].trace;f._geo=i,f.locationmode&&(s=!0);var h=f.marker;if(h){var p=h.angle,d=h.angleref;(p||\\\"north\\\"===d||\\\"previous\\\"===d)&&(u=!0)}}if(this._hasMarkerAngles=u,s){var v=k.getTopojsonName(a);null!==i.topojson&&v===i.topojsonName||(i.topojsonName=v,void 0===PlotlyGeoAssets.topojson[i.topojsonName]&&o.push(i.fetchTopojson()))}o=o.concat(T.fetchTraceGeoData(t)),r.push(new Promise((function(r,n){Promise.all(o).then((function(){i.topojson=PlotlyGeoAssets.topojson[i.topojsonName],i.update(t,e),r()})).catch(n)})))},S.fetchTopojson=function(){var t=this,e=k.getTopojsonPath(t.topojsonURL,t.topojsonName);return new Promise((function(r,i){n.json(e,(function(n,a){if(n)return 404===n.status?i(new Error([\\\"plotly.js could not find topojson file at\\\",e+\\\".\\\",\\\"Make sure the *topojsonURL* plot config option\\\",\\\"is set properly.\\\"].join(\\\" \\\"))):i(new Error([\\\"unexpected error while fetching topojson file at\\\",e].join(\\\" \\\")));PlotlyGeoAssets.topojson[t.topojsonName]=a,r()}))}))},S.update=function(t,e,r){var n=e[this.id];this.hasChoropleth=!1;for(var i=0;i<t.length;i++){var a=t[i],o=a[0].trace;\\\"choropleth\\\"===o.type&&(this.hasChoropleth=!0),!0===o.visible&&o._length>0&&o._module.calcGeoJSON(a,e)}if(!r){if(this.updateProjection(t,e))return;this.viewInitial&&this.scope===n.scope||this.saveViewInitial(n)}this.scope=n.scope,this.updateBaseLayers(e,n),this.updateDims(e,n),this.updateFx(e,n),d.generalUpdatePerTraceModule(this.graphDiv,this,t,n);var s=this.layers.frontplot.select(\\\".scatterlayer\\\");this.dataPoints.point=s.selectAll(\\\".point\\\"),this.dataPoints.text=s.selectAll(\\\"text\\\"),this.dataPaths.line=s.selectAll(\\\".js-line\\\");var l=this.layers.backplot.select(\\\".choroplethlayer\\\");this.dataPaths.choropleth=l.selectAll(\\\"path\\\"),this._render()},S.updateProjection=function(t,e){var r=this.graphDiv,n=e[this.id],l=e._size,c=n.domain,f=n.projection,h=n.lonaxis,p=n.lataxis,d=h._ax,v=p._ax,y=this.projection=function(t){var e=t.projection,r=e.type,n=w.projNames[r];n=\\\"geo\\\"+u.titleCase(n);for(var l=(i[n]||s[n])(),c=t._isSatellite?180*Math.acos(1/e.distance)/Math.PI:t._isClipped?w.lonaxisSpan[r]/2:null,f=[\\\"center\\\",\\\"rotate\\\",\\\"parallels\\\",\\\"clipExtent\\\"],h=function(t){return t?l:[]},p=0;p<f.length;p++){var d=f[p];\\\"function\\\"!=typeof l[d]&&(l[d]=h)}return l.isLonLatOverEdges=function(t){if(null===l(t))return!0;if(c){var e=l.rotate();return o(t,[-e[0],-e[1]])>c*Math.PI/180}return!1},l.getPath=function(){return a().projection(l)},l.getBounds=function(t){return l.getPath().bounds(t)},l.precision(w.precision),t._isSatellite&&l.tilt(e.tilt).distance(e.distance),c&&l.clipAngle(c-w.clipPad),l}(n),m=[[l.l+l.w*c.x[0],l.t+l.h*(1-c.y[1])],[l.l+l.w*c.x[1],l.t+l.h*(1-c.y[0])]],x=n.center||{},b=f.rotation||{},_=h.range||[],T=p.range||[];if(n.fitbounds){d._length=m[1][0]-m[0][0],v._length=m[1][1]-m[0][1],d.range=g(r,d),v.range=g(r,v);var k=(d.range[0]+d.range[1])/2,A=(v.range[0]+v.range[1])/2;if(n._isScoped)x={lon:k,lat:A};else if(n._isClipped){x={lon:k,lat:A},b={lon:k,lat:A,roll:b.roll};var M=f.type,S=w.lonaxisSpan[M]/2||180,L=w.lataxisSpan[M]/2||90;_=[k-S,k+S],T=[A-L,A+L]}else x={lon:k,lat:A},b={lon:k,lat:b.lat,roll:b.roll}}y.center([x.lon-b.lon,x.lat-b.lat]).rotate([-b.lon,-b.lat,b.roll]).parallels(f.parallels);var C=E(_,T);y.fitExtent(m,C);var P=this.bounds=y.getBounds(C),O=this.fitScale=y.scale(),I=y.translate();if(n.fitbounds){var D=y.getBounds(E(d.range,v.range)),z=Math.min((P[1][0]-P[0][0])/(D[1][0]-D[0][0]),(P[1][1]-P[0][1])/(D[1][1]-D[0][1]));isFinite(z)?y.scale(z*O):u.warn(\\\"Something went wrong during\\\"+this.id+\\\"fitbounds computations.\\\")}else y.scale(f.scale*O);var R=this.midPt=[(P[0][0]+P[1][0])/2,(P[0][1]+P[1][1])/2];if(y.translate([I[0]+(R[0]-I[0]),I[1]+(R[1]-I[1])]).clipExtent(P),n._isAlbersUsa){var F=y([x.lon,x.lat]),B=y.translate();y.translate([B[0]-(F[0]-B[0]),B[1]-(F[1]-B[1])])}},S.updateBaseLayers=function(t,e){var r=this,i=r.topojson,a=r.layers,o=r.basePaths;function s(t){return\\\"lonaxis\\\"===t||\\\"lataxis\\\"===t}function l(t){return Boolean(w.lineLayers[t])}function u(t){return Boolean(w.fillLayers[t])}var c=(this.hasChoropleth?w.layersForChoropleth:w.layers).filter((function(t){return l(t)||u(t)?e[\\\"show\\\"+t]:!s(t)||e[t].showgrid})),p=r.framework.selectAll(\\\".layer\\\").data(c,String);p.exit().each((function(t){delete a[t],delete o[t],n.select(this).remove()})),p.enter().append(\\\"g\\\").attr(\\\"class\\\",(function(t){return\\\"layer \\\"+t})).each((function(t){var e=a[t]=n.select(this);\\\"bg\\\"===t?r.bgRect=e.append(\\\"rect\\\").style(\\\"pointer-events\\\",\\\"all\\\"):s(t)?o[t]=e.append(\\\"path\\\").style(\\\"fill\\\",\\\"none\\\"):\\\"backplot\\\"===t?e.append(\\\"g\\\").classed(\\\"choroplethlayer\\\",!0):\\\"frontplot\\\"===t?e.append(\\\"g\\\").classed(\\\"scatterlayer\\\",!0):l(t)?o[t]=e.append(\\\"path\\\").style(\\\"fill\\\",\\\"none\\\").style(\\\"stroke-miterlimit\\\",2):u(t)&&(o[t]=e.append(\\\"path\\\").style(\\\"stroke\\\",\\\"none\\\"))})),p.order(),p.each((function(r){var n=o[r],a=w.layerNameToAdjective[r];\\\"frame\\\"===r?n.datum(w.sphereSVG):l(r)||u(r)?n.datum(A(i,i.objects[r])):s(r)&&n.datum(function(t,e,r){var n,i,a,o=e[t],s=w.scopeDefaults[e.scope];\\\"lonaxis\\\"===t?(n=s.lonaxisRange,i=s.lataxisRange,a=function(t,e){return[t,e]}):\\\"lataxis\\\"===t&&(n=s.lataxisRange,i=s.lonaxisRange,a=function(t,e){return[e,t]});var l={type:\\\"linear\\\",range:[n[0],n[1]-1e-6],tick0:o.tick0,dtick:o.dtick};v.setConvert(l,r);var u=v.calcTicks(l);e.isScoped||\\\"lonaxis\\\"!==t||u.pop();for(var c=u.length,f=new Array(c),h=0;h<c;h++)for(var p=u[h].x,d=f[h]=[],g=i[0];g<i[1]+2.5;g+=2.5)d.push(a(p,g));return{type:\\\"MultiLineString\\\",coordinates:f}}(r,e,t)).call(f.stroke,e[r].gridcolor).call(h.dashLine,e[r].griddash,e[r].gridwidth),l(r)?n.call(f.stroke,e[a+\\\"color\\\"]).call(h.dashLine,\\\"\\\",e[a+\\\"width\\\"]):u(r)&&n.call(f.fill,e[a+\\\"color\\\"])}))},S.updateDims=function(t,e){var r=this.bounds,n=(e.framewidth||0)/2,i=r[0][0]-n,a=r[0][1]-n,o=r[1][0]-i+n,s=r[1][1]-a+n;h.setRect(this.clipRect,i,a,o,s),this.bgRect.call(h.setRect,i,a,o,s).call(f.fill,e.bgcolor),this.xaxis._offset=i,this.xaxis._length=o,this.yaxis._offset=a,this.yaxis._length=s},S.updateFx=function(t,e){var r=this,i=r.graphDiv,a=r.bgRect,o=t.dragmode,s=t.clickmode;if(!r.isStatic){var c={element:r.bgRect.node(),gd:i,plotinfo:{id:r.id,xaxis:r.xaxis,yaxis:r.yaxis,fillRangeItems:function(t,e){e.isRect?(t.range={})[r.id]=[f([e.xmin,e.ymin]),f([e.xmax,e.ymax])]:(t.lassoPoints={})[r.id]=e.map(f)}},xaxes:[r.xaxis],yaxes:[r.yaxis],subplot:r.id,clickFn:function(t){2===t&&x(i)}};\\\"pan\\\"===o?(a.node().onmousedown=null,a.call(_(r,e)),a.on(\\\"dblclick.zoom\\\",(function(){var t=r.viewInitial,e={};for(var n in t)e[r.id+\\\".\\\"+n]=t[n];l.call(\\\"_guiRelayout\\\",i,e),i.emit(\\\"plotly_doubleclick\\\",null)})),i._context._scrollZoom.geo||a.on(\\\"wheel.zoom\\\",null)):\\\"select\\\"!==o&&\\\"lasso\\\"!==o||(a.on(\\\".zoom\\\",null),c.prepFn=function(t,e,r){m(t,e,r,c,o)},y.init(c)),a.on(\\\"mousemove\\\",(function(){var t=r.projection.invert(u.getPositionFromD3Event());if(!t)return y.unhover(i,n.event);r.xaxis.p2c=function(){return t[0]},r.yaxis.p2c=function(){return t[1]},p.hover(i,n.event,r.id)})),a.on(\\\"mouseout\\\",(function(){i._dragging||y.unhover(i,n.event)})),a.on(\\\"click\\\",(function(){\\\"select\\\"!==o&&\\\"lasso\\\"!==o&&(s.indexOf(\\\"select\\\")>-1&&b(n.event,i,[r.xaxis],[r.yaxis],r.id,c),s.indexOf(\\\"event\\\")>-1&&p.click(i,n.event))}))}function f(t){return r.projection.invert([t[0]+r.xaxis._offset,t[1]+r.yaxis._offset])}},S.makeFramework=function(){var t=this,e=t.graphDiv,r=e._fullLayout,i=\\\"clip\\\"+r._uid+t.id;t.clipDef=r._clips.append(\\\"clipPath\\\").attr(\\\"id\\\",i),t.clipRect=t.clipDef.append(\\\"rect\\\"),t.framework=n.select(t.container).append(\\\"g\\\").attr(\\\"class\\\",\\\"geo \\\"+t.id).call(h.setClipUrl,i,e),t.project=function(e){var r=t.projection(e);return r?[r[0]-t.xaxis._offset,r[1]-t.yaxis._offset]:[null,null]},t.xaxis={_id:\\\"x\\\",c2p:function(e){return t.project(e)[0]}},t.yaxis={_id:\\\"y\\\",c2p:function(e){return t.project(e)[1]}},t.mockAxis={type:\\\"linear\\\",showexponent:\\\"all\\\",exponentformat:\\\"B\\\"},v.setConvert(t.mockAxis,r)},S.saveViewInitial=function(t){var e,r=t.center||{},n=t.projection,i=n.rotation||{};this.viewInitial={fitbounds:t.fitbounds,\\\"projection.scale\\\":n.scale},e=t._isScoped?{\\\"center.lon\\\":r.lon,\\\"center.lat\\\":r.lat}:t._isClipped?{\\\"projection.rotation.lon\\\":i.lon,\\\"projection.rotation.lat\\\":i.lat}:{\\\"center.lon\\\":r.lon,\\\"center.lat\\\":r.lat,\\\"projection.rotation.lon\\\":i.lon},u.extendFlat(this.viewInitial,e)},S.render=function(t){this._hasMarkerAngles&&t?this.plot(this._geoCalcData,this._fullLayout,[],!0):this._render()},S._render=function(){var t,e=this.projection,r=e.getPath();function n(t){var r=e(t.lonlat);return r?c(r[0],r[1]):null}function i(t){return e.isLonLatOverEdges(t.lonlat)?\\\"none\\\":null}for(t in this.basePaths)this.basePaths[t].attr(\\\"d\\\",r);for(t in this.dataPaths)this.dataPaths[t].attr(\\\"d\\\",(function(t){return r(t.geojson)}));for(t in this.dataPoints)this.dataPoints[t].attr(\\\"display\\\",i).attr(\\\"transform\\\",n)}},44622:function(t,e,r){\\\"use strict\\\";var n=r(27659).AU,i=r(71828).counterRegex,a=r(69082),o=\\\"geo\\\",s=i(o),l={};l[o]={valType:\\\"subplotid\\\",dflt:o,editType:\\\"calc\\\"},t.exports={attr:o,name:o,idRoot:o,idRegex:s,attrRegex:s,attributes:l,layoutAttributes:r(77519),supplyLayoutDefaults:r(82161),plot:function(t){for(var e=t._fullLayout,r=t.calcdata,i=e._subplots[o],s=0;s<i.length;s++){var l=i[s],u=n(r,o,l),c=e[l]._subplot;c||(c=a({id:l,graphDiv:t,container:e._geolayer.node(),topojsonURL:t._context.topojsonURL,staticPlot:t._context.staticPlot}),e[l]._subplot=c),c.plot(u,e,t._promises)}},updateFx:function(t){for(var e=t._fullLayout,r=e._subplots[o],n=0;n<r.length;n++){var i=e[r[n]];i._subplot.updateFx(e,i)}},clean:function(t,e,r,n){for(var i=n._subplots[o]||[],a=0;a<i.length;a++){var s=i[a],l=n[s]._subplot;!e[s]&&l&&(l.framework.remove(),l.clipDef.remove())}}}},77519:function(t,e,r){\\\"use strict\\\";var n=r(22399),i=r(27670).Y,a=r(79952).P,o=r(78776),s=r(30962).overrideAll,l=r(78607),u={range:{valType:\\\"info_array\\\",items:[{valType:\\\"number\\\"},{valType:\\\"number\\\"}]},showgrid:{valType:\\\"boolean\\\",dflt:!1},tick0:{valType:\\\"number\\\",dflt:0},dtick:{valType:\\\"number\\\"},gridcolor:{valType:\\\"color\\\",dflt:n.lightLine},gridwidth:{valType:\\\"number\\\",min:0,dflt:1},griddash:a};(t.exports=s({domain:i({name:\\\"geo\\\"},{}),fitbounds:{valType:\\\"enumerated\\\",values:[!1,\\\"locations\\\",\\\"geojson\\\"],dflt:!1,editType:\\\"plot\\\"},resolution:{valType:\\\"enumerated\\\",values:[110,50],dflt:110,coerceNumber:!0},scope:{valType:\\\"enumerated\\\",values:l(o.scopeDefaults),dflt:\\\"world\\\"},projection:{type:{valType:\\\"enumerated\\\",values:l(o.projNames)},rotation:{lon:{valType:\\\"number\\\"},lat:{valType:\\\"number\\\"},roll:{valType:\\\"number\\\"}},tilt:{valType:\\\"number\\\",dflt:0},distance:{valType:\\\"number\\\",min:1.001,dflt:2},parallels:{valType:\\\"info_array\\\",items:[{valType:\\\"number\\\"},{valType:\\\"number\\\"}]},scale:{valType:\\\"number\\\",min:0,dflt:1}},center:{lon:{valType:\\\"number\\\"},lat:{valType:\\\"number\\\"}},visible:{valType:\\\"boolean\\\",dflt:!0},showcoastlines:{valType:\\\"boolean\\\"},coastlinecolor:{valType:\\\"color\\\",dflt:n.defaultLine},coastlinewidth:{valType:\\\"number\\\",min:0,dflt:1},showland:{valType:\\\"boolean\\\",dflt:!1},landcolor:{valType:\\\"color\\\",dflt:o.landColor},showocean:{valType:\\\"boolean\\\",dflt:!1},oceancolor:{valType:\\\"color\\\",dflt:o.waterColor},showlakes:{valType:\\\"boolean\\\",dflt:!1},lakecolor:{valType:\\\"color\\\",dflt:o.waterColor},showrivers:{valType:\\\"boolean\\\",dflt:!1},rivercolor:{valType:\\\"color\\\",dflt:o.waterColor},riverwidth:{valType:\\\"number\\\",min:0,dflt:1},showcountries:{valType:\\\"boolean\\\"},countrycolor:{valType:\\\"color\\\",dflt:n.defaultLine},countrywidth:{valType:\\\"number\\\",min:0,dflt:1},showsubunits:{valType:\\\"boolean\\\"},subunitcolor:{valType:\\\"color\\\",dflt:n.defaultLine},subunitwidth:{valType:\\\"number\\\",min:0,dflt:1},showframe:{valType:\\\"boolean\\\"},framecolor:{valType:\\\"color\\\",dflt:n.defaultLine},framewidth:{valType:\\\"number\\\",min:0,dflt:1},bgcolor:{valType:\\\"color\\\",dflt:n.background},lonaxis:u,lataxis:u},\\\"plot\\\",\\\"from-root\\\")).uirevision={valType:\\\"any\\\",editType:\\\"none\\\"}},82161:function(t,e,r){\\\"use strict\\\";var n=r(71828),i=r(49119),a=r(27659).NG,o=r(78776),s=r(77519),l=o.axesNames;function u(t,e,r,i){var s=a(i.fullData,\\\"geo\\\",i.id).map((function(t){return t._expandedIndex})),u=r(\\\"resolution\\\"),c=r(\\\"scope\\\"),f=o.scopeDefaults[c],h=r(\\\"projection.type\\\",f.projType),p=e._isAlbersUsa=\\\"albers usa\\\"===h;p&&(c=e.scope=\\\"usa\\\");var d=e._isScoped=\\\"world\\\"!==c,v=e._isSatellite=\\\"satellite\\\"===h,g=e._isConic=-1!==h.indexOf(\\\"conic\\\")||\\\"albers\\\"===h,y=e._isClipped=!!o.lonaxisSpan[h];if(!1===t.visible){var m=n.extendDeep({},e._template);m.showcoastlines=!1,m.showcountries=!1,m.showframe=!1,m.showlakes=!1,m.showland=!1,m.showocean=!1,m.showrivers=!1,m.showsubunits=!1,m.lonaxis&&(m.lonaxis.showgrid=!1),m.lataxis&&(m.lataxis.showgrid=!1),e._template=m}for(var x=r(\\\"visible\\\"),b=0;b<l.length;b++){var _,w=l[b],T=[30,10][b];if(d)_=f[w+\\\"Range\\\"];else{var k=o[w+\\\"Span\\\"],A=(k[h]||k[\\\"*\\\"])/2,M=r(\\\"projection.rotation.\\\"+w.substr(0,3),f.projRotate[b]);_=[M-A,M+A]}var S=r(w+\\\".range\\\",_);r(w+\\\".tick0\\\"),r(w+\\\".dtick\\\",T),r(w+\\\".showgrid\\\",!!x&&void 0)&&(r(w+\\\".gridcolor\\\"),r(w+\\\".gridwidth\\\"),r(w+\\\".griddash\\\")),e[w]._ax={type:\\\"linear\\\",_id:w.slice(0,3),_traceIndices:s,setScale:n.identity,c2l:n.identity,r2l:n.identity,autorange:!0,range:S.slice(),_m:1,_input:{}}}var E=e.lonaxis.range,L=e.lataxis.range,C=E[0],P=E[1];C>0&&P<0&&(P+=360);var O,I,D,z=(C+P)/2;if(!p){var R=d?f.projRotate:[z,0,0];O=r(\\\"projection.rotation.lon\\\",R[0]),r(\\\"projection.rotation.lat\\\",R[1]),r(\\\"projection.rotation.roll\\\",R[2]),r(\\\"showcoastlines\\\",!d&&x)&&(r(\\\"coastlinecolor\\\"),r(\\\"coastlinewidth\\\")),r(\\\"showocean\\\",!!x&&void 0)&&r(\\\"oceancolor\\\")}p?(I=-96.6,D=38.7):(I=d?z:O,D=(L[0]+L[1])/2),r(\\\"center.lon\\\",I),r(\\\"center.lat\\\",D),v&&(r(\\\"projection.tilt\\\"),r(\\\"projection.distance\\\")),g&&r(\\\"projection.parallels\\\",f.projParallels||[0,60]),r(\\\"projection.scale\\\"),r(\\\"showland\\\",!!x&&void 0)&&r(\\\"landcolor\\\"),r(\\\"showlakes\\\",!!x&&void 0)&&r(\\\"lakecolor\\\"),r(\\\"showrivers\\\",!!x&&void 0)&&(r(\\\"rivercolor\\\"),r(\\\"riverwidth\\\")),r(\\\"showcountries\\\",d&&\\\"usa\\\"!==c&&x)&&(r(\\\"countrycolor\\\"),r(\\\"countrywidth\\\")),(\\\"usa\\\"===c||\\\"north america\\\"===c&&50===u)&&(r(\\\"showsubunits\\\",x),r(\\\"subunitcolor\\\"),r(\\\"subunitwidth\\\")),d||r(\\\"showframe\\\",x)&&(r(\\\"framecolor\\\"),r(\\\"framewidth\\\")),r(\\\"bgcolor\\\"),r(\\\"fitbounds\\\")&&(delete e.projection.scale,d?(delete e.center.lon,delete e.center.lat):y?(delete e.center.lon,delete e.center.lat,delete e.projection.rotation.lon,delete e.projection.rotation.lat,delete e.lonaxis.range,delete e.lataxis.range):(delete e.center.lon,delete e.center.lat,delete e.projection.rotation.lon))}t.exports=function(t,e,r){i(t,e,r,{type:\\\"geo\\\",attributes:s,handleDefaults:u,fullData:r,partition:\\\"y\\\"})}},74455:function(t,e,r){\\\"use strict\\\";var n=r(39898),i=r(71828),a=r(73972),o=Math.PI/180,s=180/Math.PI,l={cursor:\\\"pointer\\\"},u={cursor:\\\"auto\\\"};function c(t,e){return n.behavior.zoom().translate(e.translate()).scale(e.scale())}function f(t,e,r){var n=t.id,o=t.graphDiv,s=o.layout,l=s[n],u=o._fullLayout,c=u[n],f={},h={};function p(t,e){f[n+\\\".\\\"+t]=i.nestedProperty(l,t).get(),a.call(\\\"_storeDirectGUIEdit\\\",s,u._preGUI,f);var r=i.nestedProperty(c,t);r.get()!==e&&(r.set(e),i.nestedProperty(l,t).set(e),h[n+\\\".\\\"+t]=e)}r(p),p(\\\"projection.scale\\\",e.scale()/t.fitScale),p(\\\"fitbounds\\\",!1),o.emit(\\\"plotly_relayout\\\",h)}function h(t,e){var r=c(0,e);function i(r){var n=e.invert(t.midPt);r(\\\"center.lon\\\",n[0]),r(\\\"center.lat\\\",n[1])}return r.on(\\\"zoomstart\\\",(function(){n.select(this).style(l)})).on(\\\"zoom\\\",(function(){e.scale(n.event.scale).translate(n.event.translate),t.render(!0);var r=e.invert(t.midPt);t.graphDiv.emit(\\\"plotly_relayouting\\\",{\\\"geo.projection.scale\\\":e.scale()/t.fitScale,\\\"geo.center.lon\\\":r[0],\\\"geo.center.lat\\\":r[1]})})).on(\\\"zoomend\\\",(function(){n.select(this).style(u),f(t,e,i)})),r}function p(t,e){var r,i,a,o,s,h,p,d,v,g=c(0,e);function y(t){return e.invert(t)}function m(r){var n=e.rotate(),i=e.invert(t.midPt);r(\\\"projection.rotation.lon\\\",-n[0]),r(\\\"center.lon\\\",i[0]),r(\\\"center.lat\\\",i[1])}return g.on(\\\"zoomstart\\\",(function(){n.select(this).style(l),r=n.mouse(this),i=e.rotate(),a=e.translate(),o=i,s=y(r)})).on(\\\"zoom\\\",(function(){if(h=n.mouse(this),function(t){var r=y(t);if(!r)return!0;var n=e(r);return Math.abs(n[0]-t[0])>2||Math.abs(n[1]-t[1])>2}(r))return g.scale(e.scale()),void g.translate(e.translate());e.scale(n.event.scale),e.translate([a[0],n.event.translate[1]]),s?y(h)&&(d=y(h),p=[o[0]+(d[0]-s[0]),i[1],i[2]],e.rotate(p),o=p):s=y(r=h),v=!0,t.render(!0);var l=e.rotate(),u=e.invert(t.midPt);t.graphDiv.emit(\\\"plotly_relayouting\\\",{\\\"geo.projection.scale\\\":e.scale()/t.fitScale,\\\"geo.center.lon\\\":u[0],\\\"geo.center.lat\\\":u[1],\\\"geo.projection.rotation.lon\\\":-l[0]})})).on(\\\"zoomend\\\",(function(){n.select(this).style(u),v&&f(t,e,m)})),g}function d(t,e){var r,i={r:e.rotate(),k:e.scale()},a=c(0,e),h=function(t){for(var e=0,r=arguments.length,i=[];++e<r;)i.push(arguments[e]);var a=n.dispatch.apply(null,i);return a.of=function(e,r){return function(i){var o;try{o=i.sourceEvent=n.event,i.target=t,n.event=i,a[i.type].apply(e,r)}finally{n.event=o}}},a}(a,\\\"zoomstart\\\",\\\"zoom\\\",\\\"zoomend\\\"),p=0,d=a.on;function y(t){var r=e.rotate();t(\\\"projection.rotation.lon\\\",-r[0]),t(\\\"projection.rotation.lat\\\",-r[1])}return a.on(\\\"zoomstart\\\",(function(){n.select(this).style(l);var t,u,c,f,y,b,_,w,T,k,A,M=n.mouse(this),S=e.rotate(),E=S,L=e.translate(),C=(u=.5*(t=S)[0]*o,c=.5*t[1]*o,f=.5*t[2]*o,y=Math.sin(u),b=Math.cos(u),_=Math.sin(c),w=Math.cos(c),T=Math.sin(f),[b*w*(k=Math.cos(f))+y*_*T,y*w*k-b*_*T,b*_*k+y*w*T,b*w*T-y*_*k]);r=v(e,M),d.call(a,\\\"zoom\\\",(function(){var t,a,o,l,u,c,f,p,d,y,b=n.mouse(this);if(e.scale(i.k=n.event.scale),r){if(v(e,b)){e.rotate(S).translate(L);var _=v(e,b),w=function(t,e){if(t&&e){var r=function(t,e){return[t[1]*e[2]-t[2]*e[1],t[2]*e[0]-t[0]*e[2],t[0]*e[1]-t[1]*e[0]]}(t,e),n=Math.sqrt(x(r,r)),i=.5*Math.acos(Math.max(-1,Math.min(1,x(t,e)))),a=Math.sin(i)/n;return n&&[Math.cos(i),r[2]*a,-r[1]*a,r[0]*a]}}(r,_),T=function(t){return[Math.atan2(2*(t[0]*t[1]+t[2]*t[3]),1-2*(t[1]*t[1]+t[2]*t[2]))*s,Math.asin(Math.max(-1,Math.min(1,2*(t[0]*t[2]-t[3]*t[1]))))*s,Math.atan2(2*(t[0]*t[3]+t[1]*t[2]),1-2*(t[2]*t[2]+t[3]*t[3]))*s]}((o=(t=C)[0],l=t[1],u=t[2],c=t[3],[o*(f=(a=w)[0])-l*(p=a[1])-u*(d=a[2])-c*(y=a[3]),o*p+l*f+u*y-c*d,o*d-l*y+u*f+c*p,o*y+l*d-u*p+c*f])),k=i.r=function(t,e,r){var n=m(e,2,t[0]);n=m(n,1,t[1]),n=m(n,0,t[2]-r[2]);var i,a,o=e[0],l=e[1],u=e[2],c=n[0],f=n[1],h=n[2],p=Math.atan2(l,o)*s,d=Math.sqrt(o*o+l*l);Math.abs(f)>d?(a=(f>0?90:-90)-p,i=0):(a=Math.asin(f/d)*s-p,i=Math.sqrt(d*d-f*f));var v=180-a-2*p,y=(Math.atan2(h,c)-Math.atan2(u,i))*s,x=(Math.atan2(h,c)-Math.atan2(u,-i))*s;return g(r[0],r[1],a,y)<=g(r[0],r[1],v,x)?[a,y,r[2]]:[v,x,r[2]]}(T,r,E);isFinite(k[0])&&isFinite(k[1])&&isFinite(k[2])||(k=E),e.rotate(k),E=k}}else r=v(e,M=b);h.of(this,arguments)({type:\\\"zoom\\\"})})),A=h.of(this,arguments),p++||A({type:\\\"zoomstart\\\"})})).on(\\\"zoomend\\\",(function(){var r;n.select(this).style(u),d.call(a,\\\"zoom\\\",null),r=h.of(this,arguments),--p||r({type:\\\"zoomend\\\"}),f(t,e,y)})).on(\\\"zoom.redraw\\\",(function(){t.render(!0);var r=e.rotate();t.graphDiv.emit(\\\"plotly_relayouting\\\",{\\\"geo.projection.scale\\\":e.scale()/t.fitScale,\\\"geo.projection.rotation.lon\\\":-r[0],\\\"geo.projection.rotation.lat\\\":-r[1]})})),n.rebind(a,h,\\\"on\\\")}function v(t,e){var r=t.invert(e);return r&&isFinite(r[0])&&isFinite(r[1])&&function(t){var e=t[0]*o,r=t[1]*o,n=Math.cos(r);return[n*Math.cos(e),n*Math.sin(e),Math.sin(r)]}(r)}function g(t,e,r,n){var i=y(r-t),a=y(n-e);return Math.sqrt(i*i+a*a)}function y(t){return(t%360+540)%360-180}function m(t,e,r){var n=r*o,i=t.slice(),a=0===e?1:0,s=2===e?1:2,l=Math.cos(n),u=Math.sin(n);return i[a]=t[a]*l-t[s]*u,i[s]=t[s]*l+t[a]*u,i}function x(t,e){for(var r=0,n=0,i=t.length;n<i;++n)r+=t[n]*e[n];return r}t.exports=function(t,e){var r=t.projection;return(e._isScoped?h:e._isClipped?d:p)(t,r)}},27659:function(t,e,r){\\\"use strict\\\";var n=r(73972),i=r(85555).SUBPLOT_PATTERN;e.AU=function(t,e,r){var i=n.subplotsRegistry[e];if(!i)return[];for(var a=i.attr,o=[],s=0;s<t.length;s++){var l=t[s];l[0].trace[a]===r&&o.push(l)}return o},e.a0=function(t,e){var r,i=[],a=[];if(!(r=\\\"string\\\"==typeof e?n.getModule(e).plot:\\\"function\\\"==typeof e?e:e.plot))return[i,t];for(var o=0;o<t.length;o++){var s=t[o],l=s[0].trace;!0===l.visible&&0!==l._length&&(l._module.plot===r?i.push(s):a.push(s))}return[i,a]},e.NG=function(t,e,r){if(!n.subplotsRegistry[e])return[];var a,o,s,l=n.subplotsRegistry[e].attr,u=[];if(\\\"gl2d\\\"===e){var c=r.match(i);o=\\\"x\\\"+c[1],s=\\\"y\\\"+c[2]}for(var f=0;f<t.length;f++)a=t[f],\\\"gl2d\\\"===e&&n.traceIs(a,\\\"gl2d\\\")?a[l[0]]===o&&a[l[1]]===s&&u.push(a):a[l]===r&&u.push(a);return u}},75071:function(t,e,r){\\\"use strict\\\";var n=r(16825),i=r(1195),a=r(48956),o=r(85555),s=r(38520);function l(t,e){this.element=t,this.plot=e,this.mouseListener=null,this.wheelListener=null,this.lastInputTime=Date.now(),this.lastPos=[0,0],this.boxEnabled=!1,this.boxInited=!1,this.boxStart=[0,0],this.boxEnd=[0,0],this.dragStart=[0,0]}t.exports=function(t){var e=t.mouseContainer,r=t.glplot,u=new l(e,r);function c(){t.xaxis.autorange=!1,t.yaxis.autorange=!1}function f(e,n,i){var a,s,l=t.calcDataBox(),f=r.viewBox,h=u.lastPos[0],p=u.lastPos[1],d=o.MINDRAG*r.pixelRatio,v=o.MINZOOM*r.pixelRatio;function g(e,r,n){var i=Math.min(r,n),a=Math.max(r,n);i!==a?(l[e]=i,l[e+2]=a,u.dataBox=l,t.setRanges(l)):(t.selectBox.selectBox=[0,0,1,1],t.glplot.setDirty())}switch(n*=r.pixelRatio,i*=r.pixelRatio,i=f[3]-f[1]-i,t.fullLayout.dragmode){case\\\"zoom\\\":if(e){var y=n/(f[2]-f[0])*(l[2]-l[0])+l[0],m=i/(f[3]-f[1])*(l[3]-l[1])+l[1];u.boxInited||(u.boxStart[0]=y,u.boxStart[1]=m,u.dragStart[0]=n,u.dragStart[1]=i),u.boxEnd[0]=y,u.boxEnd[1]=m,u.boxInited=!0,u.boxEnabled||u.boxStart[0]===u.boxEnd[0]&&u.boxStart[1]===u.boxEnd[1]||(u.boxEnabled=!0);var x=Math.abs(u.dragStart[0]-n)<v,b=Math.abs(u.dragStart[1]-i)<v;if(!function(){for(var e=t.graphDiv._fullLayout._axisConstraintGroups,r=t.xaxis._id,n=t.yaxis._id,i=0;i<e.length;i++)if(-1!==e[i][r]){if(-1!==e[i][n])return!0;break}return!1}()||x&&b)x&&(u.boxEnd[0]=u.boxStart[0]),b&&(u.boxEnd[1]=u.boxStart[1]);else{a=u.boxEnd[0]-u.boxStart[0],s=u.boxEnd[1]-u.boxStart[1];var _=(l[3]-l[1])/(l[2]-l[0]);Math.abs(a*_)>Math.abs(s)?(u.boxEnd[1]=u.boxStart[1]+Math.abs(a)*_*(s>=0?1:-1),u.boxEnd[1]<l[1]?(u.boxEnd[1]=l[1],u.boxEnd[0]=u.boxStart[0]+(l[1]-u.boxStart[1])/Math.abs(_)):u.boxEnd[1]>l[3]&&(u.boxEnd[1]=l[3],u.boxEnd[0]=u.boxStart[0]+(l[3]-u.boxStart[1])/Math.abs(_))):(u.boxEnd[0]=u.boxStart[0]+Math.abs(s)/_*(a>=0?1:-1),u.boxEnd[0]<l[0]?(u.boxEnd[0]=l[0],u.boxEnd[1]=u.boxStart[1]+(l[0]-u.boxStart[0])*Math.abs(_)):u.boxEnd[0]>l[2]&&(u.boxEnd[0]=l[2],u.boxEnd[1]=u.boxStart[1]+(l[2]-u.boxStart[0])*Math.abs(_)))}}else u.boxEnabled?(a=u.boxStart[0]!==u.boxEnd[0],s=u.boxStart[1]!==u.boxEnd[1],a||s?(a&&(g(0,u.boxStart[0],u.boxEnd[0]),t.xaxis.autorange=!1),s&&(g(1,u.boxStart[1],u.boxEnd[1]),t.yaxis.autorange=!1),t.relayoutCallback()):t.glplot.setDirty(),u.boxEnabled=!1,u.boxInited=!1):u.boxInited&&(u.boxInited=!1);break;case\\\"pan\\\":u.boxEnabled=!1,u.boxInited=!1,e?(u.panning||(u.dragStart[0]=n,u.dragStart[1]=i),Math.abs(u.dragStart[0]-n)<d&&(n=u.dragStart[0]),Math.abs(u.dragStart[1]-i)<d&&(i=u.dragStart[1]),a=(h-n)*(l[2]-l[0])/(r.viewBox[2]-r.viewBox[0]),s=(p-i)*(l[3]-l[1])/(r.viewBox[3]-r.viewBox[1]),l[0]+=a,l[2]+=a,l[1]+=s,l[3]+=s,t.setRanges(l),u.panning=!0,u.lastInputTime=Date.now(),c(),t.cameraChanged(),t.handleAnnotations()):u.panning&&(u.panning=!1,t.relayoutCallback())}u.lastPos[0]=n,u.lastPos[1]=i}return u.mouseListener=n(e,f),e.addEventListener(\\\"touchstart\\\",(function(t){var r=a(t.changedTouches[0],e);f(0,r[0],r[1]),f(1,r[0],r[1]),t.preventDefault()}),!!s&&{passive:!1}),e.addEventListener(\\\"touchmove\\\",(function(t){t.preventDefault();var r=a(t.changedTouches[0],e);f(1,r[0],r[1]),t.preventDefault()}),!!s&&{passive:!1}),e.addEventListener(\\\"touchend\\\",(function(t){f(0,u.lastPos[0],u.lastPos[1]),t.preventDefault()}),!!s&&{passive:!1}),u.wheelListener=i(e,(function(e,n){if(!t.scrollZoom)return!1;var i=t.calcDataBox(),a=r.viewBox,o=u.lastPos[0],s=u.lastPos[1],l=Math.exp(5*n/(a[3]-a[1])),f=o/(a[2]-a[0])*(i[2]-i[0])+i[0],h=s/(a[3]-a[1])*(i[3]-i[1])+i[1];return i[0]=(i[0]-f)*l+f,i[2]=(i[2]-f)*l+f,i[1]=(i[1]-h)*l+h,i[3]=(i[3]-h)*l+h,t.setRanges(i),u.lastInputTime=Date.now(),c(),t.cameraChanged(),t.handleAnnotations(),t.relayoutCallback(),!0}),!0),u}},82961:function(t,e,r){\\\"use strict\\\";var n=r(89298),i=r(78614);function a(t){this.scene=t,this.gl=t.gl,this.pixelRatio=t.pixelRatio,this.screenBox=[0,0,1,1],this.viewBox=[0,0,1,1],this.dataBox=[-1,-1,1,1],this.borderLineEnable=[!1,!1,!1,!1],this.borderLineWidth=[1,1,1,1],this.borderLineColor=[[0,0,0,1],[0,0,0,1],[0,0,0,1],[0,0,0,1]],this.ticks=[[],[]],this.tickEnable=[!0,!0,!1,!1],this.tickPad=[15,15,15,15],this.tickAngle=[0,0,0,0],this.tickColor=[[0,0,0,1],[0,0,0,1],[0,0,0,1],[0,0,0,1]],this.tickMarkLength=[0,0,0,0],this.tickMarkWidth=[0,0,0,0],this.tickMarkColor=[[0,0,0,1],[0,0,0,1],[0,0,0,1],[0,0,0,1]],this.labels=[\\\"x\\\",\\\"y\\\"],this.labelEnable=[!0,!0,!1,!1],this.labelAngle=[0,Math.PI/2,0,3*Math.PI/2],this.labelPad=[15,15,15,15],this.labelSize=[12,12],this.labelFont=[\\\"sans-serif\\\",\\\"sans-serif\\\"],this.labelColor=[[0,0,0,1],[0,0,0,1],[0,0,0,1],[0,0,0,1]],this.title=\\\"\\\",this.titleEnable=!0,this.titleCenter=[0,0,0,0],this.titleAngle=0,this.titleColor=[0,0,0,1],this.titleFont=\\\"sans-serif\\\",this.titleSize=18,this.gridLineEnable=[!0,!0],this.gridLineColor=[[0,0,0,.5],[0,0,0,.5]],this.gridLineWidth=[1,1],this.zeroLineEnable=[!0,!0],this.zeroLineWidth=[1,1],this.zeroLineColor=[[0,0,0,1],[0,0,0,1]],this.borderColor=[0,0,0,0],this.backgroundColor=[0,0,0,0],this.static=this.scene.staticPlot}var o=a.prototype,s=[\\\"xaxis\\\",\\\"yaxis\\\"];o.merge=function(t){var e,r,n,a,o,l,u,c,f,h,p;for(this.titleEnable=!1,this.backgroundColor=i(t.plot_bgcolor),h=0;h<2;++h){var d=(e=s[h]).charAt(0);for(n=(r=t[this.scene[e]._name]).title.text===this.scene.fullLayout._dfltTitle[d]?\\\"\\\":r.title.text,p=0;p<=2;p+=2)this.labelEnable[h+p]=!1,this.labels[h+p]=n,this.labelColor[h+p]=i(r.title.font.color),this.labelFont[h+p]=r.title.font.family,this.labelSize[h+p]=r.title.font.size,this.labelPad[h+p]=this.getLabelPad(e,r),this.tickEnable[h+p]=!1,this.tickColor[h+p]=i((r.tickfont||{}).color),this.tickAngle[h+p]=\\\"auto\\\"===r.tickangle?0:Math.PI*-r.tickangle/180,this.tickPad[h+p]=this.getTickPad(r),this.tickMarkLength[h+p]=0,this.tickMarkWidth[h+p]=r.tickwidth||0,this.tickMarkColor[h+p]=i(r.tickcolor),this.borderLineEnable[h+p]=!1,this.borderLineColor[h+p]=i(r.linecolor),this.borderLineWidth[h+p]=r.linewidth||0;u=this.hasSharedAxis(r),o=this.hasAxisInDfltPos(e,r)&&!u,l=this.hasAxisInAltrPos(e,r)&&!u,a=r.mirror||!1,c=u?-1!==String(a).indexOf(\\\"all\\\"):!!a,f=u?\\\"allticks\\\"===a:-1!==String(a).indexOf(\\\"ticks\\\"),o?this.labelEnable[h]=!0:l&&(this.labelEnable[h+2]=!0),o?this.tickEnable[h]=r.showticklabels:l&&(this.tickEnable[h+2]=r.showticklabels),(o||c)&&(this.borderLineEnable[h]=r.showline),(l||c)&&(this.borderLineEnable[h+2]=r.showline),(o||f)&&(this.tickMarkLength[h]=this.getTickMarkLength(r)),(l||f)&&(this.tickMarkLength[h+2]=this.getTickMarkLength(r)),this.gridLineEnable[h]=r.showgrid,this.gridLineColor[h]=i(r.gridcolor),this.gridLineWidth[h]=r.gridwidth,this.zeroLineEnable[h]=r.zeroline,this.zeroLineColor[h]=i(r.zerolinecolor),this.zeroLineWidth[h]=r.zerolinewidth}},o.hasSharedAxis=function(t){var e=this.scene,r=e.fullLayout._subplots.gl2d;return 0!==n.findSubplotsWithAxis(r,t).indexOf(e.id)},o.hasAxisInDfltPos=function(t,e){var r=e.side;return\\\"xaxis\\\"===t?\\\"bottom\\\"===r:\\\"yaxis\\\"===t?\\\"left\\\"===r:void 0},o.hasAxisInAltrPos=function(t,e){var r=e.side;return\\\"xaxis\\\"===t?\\\"top\\\"===r:\\\"yaxis\\\"===t?\\\"right\\\"===r:void 0},o.getLabelPad=function(t,e){var r=1.5,n=e.title.font.size,i=e.showticklabels;return\\\"xaxis\\\"===t?\\\"top\\\"===e.side?n*(r+(i?1:0))-10:n*(r+(i?.5:0))-10:\\\"yaxis\\\"===t?\\\"right\\\"===e.side?10+n*(r+(i?1:.5)):10+n*(r+(i?.5:0)):void 0},o.getTickPad=function(t){return\\\"outside\\\"===t.ticks?10+t.ticklen:15},o.getTickMarkLength=function(t){if(!t.ticks)return 0;var e=t.ticklen;return\\\"inside\\\"===t.ticks?-e:e},t.exports=function(t){return new a(t)}},4796:function(t,e,r){\\\"use strict\\\";var n=r(30962).overrideAll,i=r(92918),a=r(10820),o=r(77922),s=r(85555),l=r(93612),u=r(528),c=r(27659).NG;e.name=\\\"gl2d\\\",e.attr=[\\\"xaxis\\\",\\\"yaxis\\\"],e.idRoot=[\\\"x\\\",\\\"y\\\"],e.idRegex=s.idRegex,e.attrRegex=s.attrRegex,e.attributes=r(89502),e.supplyLayoutDefaults=function(t,e,r){e._has(\\\"cartesian\\\")||l.supplyLayoutDefaults(t,e,r)},e.layoutAttrOverrides=n(l.layoutAttributes,\\\"plot\\\",\\\"from-root\\\"),e.baseLayoutAttrOverrides=n({plot_bgcolor:a.plot_bgcolor,hoverlabel:u.hoverlabel},\\\"plot\\\",\\\"nested\\\"),e.plot=function(t){for(var e=t._fullLayout,r=t._fullData,n=e._subplots.gl2d,a=0;a<n.length;a++){var o=n[a],s=e._plots[o],l=c(r,\\\"gl2d\\\",o),u=s._scene2d;void 0===u&&(u=new i({id:o,graphDiv:t,container:t.querySelector(\\\".gl-container\\\"),staticPlot:t._context.staticPlot,plotGlPixelRatio:t._context.plotGlPixelRatio},e),s._scene2d=u),u.plot(l,t.calcdata,e,t.layout)}},e.clean=function(t,e,r,n){for(var i=n._subplots.gl2d||[],a=0;a<i.length;a++){var o=i[a],s=n._plots[o];s._scene2d&&0===c(t,\\\"gl2d\\\",o).length&&(s._scene2d.destroy(),delete n._plots[o])}l.clean.apply(this,arguments)},e.drawFramework=function(t){t._context.staticPlot||l.drawFramework(t)},e.toSVG=function(t){for(var e=t._fullLayout,r=e._subplots.gl2d,n=0;n<r.length;n++){var i=e._plots[r[n]]._scene2d,a=i.toImage(\\\"png\\\");e._glimages.append(\\\"svg:image\\\").attr({xmlns:o.svg,\\\"xlink:href\\\":a,x:0,y:0,width:\\\"100%\\\",height:\\\"100%\\\",preserveAspectRatio:\\\"none\\\"}),i.destroy()}},e.updateFx=function(t){for(var e=t._fullLayout,r=e._subplots.gl2d,n=0;n<r.length;n++)e._plots[r[n]]._scene2d.updateFx(e.dragmode)}},92918:function(t,e,r){\\\"use strict\\\";var n,i,a=r(73972),o=r(89298),s=r(30211),l=r(9330).gl_plot2d,u=r(9330).gl_spikes2d,c=r(9330).gl_select_box,f=r(40372),h=r(82961),p=r(75071),d=r(58617),v=r(99082),g=v.enforce,y=v.clean,m=r(71739).doAutoRange,x=r(64505),b=x.drawMode,_=x.selectMode,w=[\\\"xaxis\\\",\\\"yaxis\\\"],T=r(85555).SUBPLOT_PATTERN;function k(t,e){this.container=t.container,this.graphDiv=t.graphDiv,this.pixelRatio=t.plotGlPixelRatio||window.devicePixelRatio,this.id=t.id,this.staticPlot=!!t.staticPlot,this.scrollZoom=this.graphDiv._context._scrollZoom.cartesian,this.fullData=null,this.updateRefs(e),this.makeFramework(),this.stopped||(this.glplotOptions=h(this),this.glplotOptions.merge(e),this.glplot=l(this.glplotOptions),this.camera=p(this),this.traces={},this.spikes=u(this.glplot),this.selectBox=c(this.glplot,{innerFill:!1,outerFill:!0}),this.lastButtonState=0,this.pickResult=null,this.isMouseOver=!0,this.stopped=!1,this.redraw=this.draw.bind(this),this.redraw())}t.exports=k;var A=k.prototype;A.makeFramework=function(){if(this.staticPlot){if(!(i||(n=document.createElement(\\\"canvas\\\"),i=f({canvas:n,preserveDrawingBuffer:!1,premultipliedAlpha:!0,antialias:!0}))))throw new Error(\\\"Error creating static canvas/context for image server\\\");this.canvas=n,this.gl=i}else{var t=this.container.querySelector(\\\".gl-canvas-focus\\\"),e=f({canvas:t,preserveDrawingBuffer:!0,premultipliedAlpha:!0});if(!e)return d(this),void(this.stopped=!0);this.canvas=t,this.gl=e}var r=this.canvas;r.style.width=\\\"100%\\\",r.style.height=\\\"100%\\\",r.style.position=\\\"absolute\\\",r.style.top=\\\"0px\\\",r.style.left=\\\"0px\\\",r.style[\\\"pointer-events\\\"]=\\\"none\\\",this.updateSize(r);var a=this.svgContainer=document.createElementNS(\\\"http://www.w3.org/2000/svg\\\",\\\"svg\\\");a.style.position=\\\"absolute\\\",a.style.top=a.style.left=\\\"0px\\\",a.style.width=a.style.height=\\\"100%\\\",a.style[\\\"z-index\\\"]=20,a.style[\\\"pointer-events\\\"]=\\\"none\\\";var o=this.mouseContainer=document.createElement(\\\"div\\\");o.style.position=\\\"absolute\\\",o.style[\\\"pointer-events\\\"]=\\\"auto\\\",this.pickCanvas=this.container.querySelector(\\\".gl-canvas-pick\\\");var s=this.container;s.appendChild(a),s.appendChild(o);var l=this;o.addEventListener(\\\"mouseout\\\",(function(){l.isMouseOver=!1,l.unhover()})),o.addEventListener(\\\"mouseover\\\",(function(){l.isMouseOver=!0}))},A.toImage=function(t){t||(t=\\\"png\\\"),this.stopped=!0,this.staticPlot&&this.container.appendChild(n),this.updateSize(this.canvas);var e=this.glplot.gl,r=e.drawingBufferWidth,i=e.drawingBufferHeight;e.clearColor(1,1,1,0),e.clear(e.COLOR_BUFFER_BIT|e.DEPTH_BUFFER_BIT),this.glplot.setDirty(),this.glplot.draw(),e.bindFramebuffer(e.FRAMEBUFFER,null);var a=new Uint8Array(r*i*4);e.readPixels(0,0,r,i,e.RGBA,e.UNSIGNED_BYTE,a);for(var o=0,s=i-1;o<s;++o,--s)for(var l=0;l<r;++l)for(var u=0;u<4;++u){var c=a[4*(r*o+l)+u];a[4*(r*o+l)+u]=a[4*(r*s+l)+u],a[4*(r*s+l)+u]=c}var f=document.createElement(\\\"canvas\\\");f.width=r,f.height=i;var h,p=f.getContext(\\\"2d\\\",{willReadFrequently:!0}),d=p.createImageData(r,i);switch(d.data.set(a),p.putImageData(d,0,0),t){case\\\"jpeg\\\":h=f.toDataURL(\\\"image/jpeg\\\");break;case\\\"webp\\\":h=f.toDataURL(\\\"image/webp\\\");break;default:h=f.toDataURL(\\\"image/png\\\")}return this.staticPlot&&this.container.removeChild(n),h},A.updateSize=function(t){t||(t=this.canvas);var e=this.pixelRatio,r=this.fullLayout,n=r.width,i=r.height,a=0|Math.ceil(e*n),o=0|Math.ceil(e*i);return t.width===a&&t.height===o||(t.width=a,t.height=o),t},A.computeTickMarks=function(){this.xaxis.setScale(),this.yaxis.setScale();for(var t=[o.calcTicks(this.xaxis),o.calcTicks(this.yaxis)],e=0;e<2;++e)for(var r=0;r<t[e].length;++r)t[e][r].text=t[e][r].text+\\\"\\\";return t},A.updateRefs=function(t){this.fullLayout=t;var e=this.id.match(T),r=\\\"xaxis\\\"+e[1],n=\\\"yaxis\\\"+e[2];this.xaxis=this.fullLayout[r],this.yaxis=this.fullLayout[n]},A.relayoutCallback=function(){var t=this.graphDiv,e=this.xaxis,r=this.yaxis,n=t.layout,i={},o=i[e._name+\\\".range\\\"]=e.range.slice(),s=i[r._name+\\\".range\\\"]=r.range.slice();i[e._name+\\\".autorange\\\"]=e.autorange,i[r._name+\\\".autorange\\\"]=r.autorange,a.call(\\\"_storeDirectGUIEdit\\\",t.layout,t._fullLayout._preGUI,i);var l=n[e._name];l.range=o,l.autorange=e.autorange;var u=n[r._name];u.range=s,u.autorange=r.autorange,i.lastInputTime=this.camera.lastInputTime,t.emit(\\\"plotly_relayout\\\",i)},A.cameraChanged=function(){var t=this.camera;this.glplot.setDataBox(this.calcDataBox());var e=this.computeTickMarks();(function(t,e){for(var r=0;r<2;++r){var n=t[r],i=e[r];if(n.length!==i.length)return!0;for(var a=0;a<n.length;++a)if(n[a].x!==i[a].x)return!0}return!1})(e,this.glplotOptions.ticks)&&(this.glplotOptions.ticks=e,this.glplotOptions.dataBox=t.dataBox,this.glplot.update(this.glplotOptions),this.handleAnnotations())},A.handleAnnotations=function(){for(var t=this.graphDiv,e=this.fullLayout.annotations,r=0;r<e.length;r++){var n=e[r];n.xref===this.xaxis._id&&n.yref===this.yaxis._id&&a.getComponentMethod(\\\"annotations\\\",\\\"drawOne\\\")(t,r)}},A.destroy=function(){if(this.glplot){var t=this.traces;t&&Object.keys(t).map((function(e){t[e].dispose(),delete t[e]})),this.glplot.dispose(),this.container.removeChild(this.svgContainer),this.container.removeChild(this.mouseContainer),this.fullData=null,this.glplot=null,this.stopped=!0,this.camera.mouseListener.enabled=!1,this.mouseContainer.removeEventListener(\\\"wheel\\\",this.camera.wheelListener),this.camera=null}},A.plot=function(t,e,r){var n=this.glplot;this.updateRefs(r),this.xaxis.clearCalc(),this.yaxis.clearCalc(),this.updateTraces(t,e),this.updateFx(r.dragmode);var i=r.width,a=r.height;this.updateSize(this.canvas);var o=this.glplotOptions;o.merge(r),o.screenBox=[0,0,i,a];var s={_fullLayout:{_axisConstraintGroups:r._axisConstraintGroups,xaxis:this.xaxis,yaxis:this.yaxis,_size:r._size}};y(s,this.xaxis),y(s,this.yaxis);var l,u,c=r._size,f=this.xaxis.domain,h=this.yaxis.domain;for(o.viewBox=[c.l+f[0]*c.w,c.b+h[0]*c.h,i-c.r-(1-f[1])*c.w,a-c.t-(1-h[1])*c.h],this.mouseContainer.style.width=c.w*(f[1]-f[0])+\\\"px\\\",this.mouseContainer.style.height=c.h*(h[1]-h[0])+\\\"px\\\",this.mouseContainer.height=c.h*(h[1]-h[0]),this.mouseContainer.style.left=c.l+f[0]*c.w+\\\"px\\\",this.mouseContainer.style.top=c.t+(1-h[1])*c.h+\\\"px\\\",u=0;u<2;++u)(l=this[w[u]])._length=o.viewBox[u+2]-o.viewBox[u],m(this.graphDiv,l),l.setScale();g(s),o.ticks=this.computeTickMarks(),o.dataBox=this.calcDataBox(),o.merge(r),n.update(o),this.glplot.draw()},A.calcDataBox=function(){var t=this.xaxis,e=this.yaxis,r=t.range,n=e.range,i=t.r2l,a=e.r2l;return[i(r[0]),a(n[0]),i(r[1]),a(n[1])]},A.setRanges=function(t){var e=this.xaxis,r=this.yaxis,n=e.l2r,i=r.l2r;e.range=[n(t[0]),n(t[2])],r.range=[i(t[1]),i(t[3])]},A.updateTraces=function(t,e){var r,n,i,a=Object.keys(this.traces);this.fullData=t;t:for(r=0;r<a.length;r++){var o=a[r],s=this.traces[o];for(n=0;n<t.length;n++)if((i=t[n]).uid===o&&i.type===s.type)continue t;s.dispose(),delete this.traces[o]}for(r=0;r<t.length;r++){i=t[r];var l=e[r],u=this.traces[i.uid];u?u.update(i,l):(u=i._module.plot(this,i,l),this.traces[i.uid]=u)}this.glplot.objects.sort((function(t,e){return t._trace.index-e._trace.index}))},A.updateFx=function(t){_(t)||b(t)?(this.pickCanvas.style[\\\"pointer-events\\\"]=\\\"none\\\",this.mouseContainer.style[\\\"pointer-events\\\"]=\\\"none\\\"):(this.pickCanvas.style[\\\"pointer-events\\\"]=\\\"auto\\\",this.mouseContainer.style[\\\"pointer-events\\\"]=\\\"auto\\\"),this.mouseContainer.style.cursor=\\\"pan\\\"===t?\\\"move\\\":\\\"zoom\\\"===t?\\\"crosshair\\\":null},A.emitPointAction=function(t,e){for(var r,n=t.trace.uid,i=t.pointIndex,a=0;a<this.fullData.length;a++)this.fullData[a].uid===n&&(r=this.fullData[a]);var o={x:t.traceCoord[0],y:t.traceCoord[1],curveNumber:r.index,pointNumber:i,data:r._input,fullData:this.fullData,xaxis:this.xaxis,yaxis:this.yaxis};s.appendArrayPointValue(o,r,i),this.graphDiv.emit(e,{points:[o]})},A.draw=function(){if(!this.stopped){requestAnimationFrame(this.redraw);var t=this.glplot,e=this.camera,r=e.mouseListener,n=1===this.lastButtonState&&0===r.buttons,i=this.fullLayout;this.lastButtonState=r.buttons,this.cameraChanged();var a,o=r.x*t.pixelRatio,l=this.canvas.height-t.pixelRatio*r.y;if(e.boxEnabled&&\\\"zoom\\\"===i.dragmode){this.selectBox.enabled=!0;for(var u=this.selectBox.selectBox=[Math.min(e.boxStart[0],e.boxEnd[0]),Math.min(e.boxStart[1],e.boxEnd[1]),Math.max(e.boxStart[0],e.boxEnd[0]),Math.max(e.boxStart[1],e.boxEnd[1])],c=0;c<2;c++)e.boxStart[c]===e.boxEnd[c]&&(u[c]=t.dataBox[c],u[c+2]=t.dataBox[c+2]);t.setDirty()}else if(!e.panning&&this.isMouseOver){this.selectBox.enabled=!1;var f=i._size,h=this.xaxis.domain,p=this.yaxis.domain,d=(a=t.pick(o/t.pixelRatio+f.l+h[0]*f.w,l/t.pixelRatio-(f.t+(1-p[1])*f.h)))&&a.object._trace.handlePick(a);if(d&&n&&this.emitPointAction(d,\\\"plotly_click\\\"),a&&\\\"skip\\\"!==a.object._trace.hoverinfo&&i.hovermode&&d&&(!this.lastPickResult||this.lastPickResult.traceUid!==d.trace.uid||this.lastPickResult.dataCoord[0]!==d.dataCoord[0]||this.lastPickResult.dataCoord[1]!==d.dataCoord[1])){var v=d;this.lastPickResult={traceUid:d.trace?d.trace.uid:null,dataCoord:d.dataCoord.slice()},this.spikes.update({center:a.dataCoord}),v.screenCoord=[((t.viewBox[2]-t.viewBox[0])*(a.dataCoord[0]-t.dataBox[0])/(t.dataBox[2]-t.dataBox[0])+t.viewBox[0])/t.pixelRatio,(this.canvas.height-(t.viewBox[3]-t.viewBox[1])*(a.dataCoord[1]-t.dataBox[1])/(t.dataBox[3]-t.dataBox[1])-t.viewBox[1])/t.pixelRatio],this.emitPointAction(d,\\\"plotly_hover\\\");var g=this.fullData[v.trace.index]||{},y=v.pointIndex,m=s.castHoverinfo(g,i,y);if(m&&\\\"all\\\"!==m){var x=m.split(\\\"+\\\");-1===x.indexOf(\\\"x\\\")&&(v.traceCoord[0]=void 0),-1===x.indexOf(\\\"y\\\")&&(v.traceCoord[1]=void 0),-1===x.indexOf(\\\"z\\\")&&(v.traceCoord[2]=void 0),-1===x.indexOf(\\\"text\\\")&&(v.textLabel=void 0),-1===x.indexOf(\\\"name\\\")&&(v.name=void 0)}s.loneHover({x:v.screenCoord[0],y:v.screenCoord[1],xLabel:this.hoverFormatter(\\\"xaxis\\\",v.traceCoord[0]),yLabel:this.hoverFormatter(\\\"yaxis\\\",v.traceCoord[1]),zLabel:v.traceCoord[2],text:v.textLabel,name:v.name,color:s.castHoverOption(g,y,\\\"bgcolor\\\")||v.color,borderColor:s.castHoverOption(g,y,\\\"bordercolor\\\"),fontFamily:s.castHoverOption(g,y,\\\"font.family\\\"),fontSize:s.castHoverOption(g,y,\\\"font.size\\\"),fontColor:s.castHoverOption(g,y,\\\"font.color\\\"),nameLength:s.castHoverOption(g,y,\\\"namelength\\\"),textAlign:s.castHoverOption(g,y,\\\"align\\\")},{container:this.svgContainer,gd:this.graphDiv})}}a||this.unhover(),t.draw()}},A.unhover=function(){this.lastPickResult&&(this.spikes.update({}),this.lastPickResult=null,this.graphDiv.emit(\\\"plotly_unhover\\\"),s.loneUnhover(this.svgContainer))},A.hoverFormatter=function(t,e){if(void 0!==e){var r=this[t];return o.tickText(r,r.c2l(e),\\\"hover\\\").text}}},58547:function(t,e,r){\\\"use strict\\\";var n=r(30962).overrideAll,i=r(528),a=r(33539),o=r(27659).NG,s=r(71828),l=r(77922),u=\\\"gl3d\\\",c=\\\"scene\\\";e.name=u,e.attr=c,e.idRoot=c,e.idRegex=e.attrRegex=s.counterRegex(\\\"scene\\\"),e.attributes=r(59084),e.layoutAttributes=r(65500),e.baseLayoutAttrOverrides=n({hoverlabel:i.hoverlabel},\\\"plot\\\",\\\"nested\\\"),e.supplyLayoutDefaults=r(24682),e.plot=function(t){for(var e=t._fullLayout,r=t._fullData,n=e._subplots[u],i=0;i<n.length;i++){var s=n[i],l=o(r,u,s),c=e[s],f=c.camera,h=c._scene;h||(h=new a({id:s,graphDiv:t,container:t.querySelector(\\\".gl-container\\\"),staticPlot:t._context.staticPlot,plotGlPixelRatio:t._context.plotGlPixelRatio,camera:f},e),c._scene=h),h.viewInitial||(h.viewInitial={up:{x:f.up.x,y:f.up.y,z:f.up.z},eye:{x:f.eye.x,y:f.eye.y,z:f.eye.z},center:{x:f.center.x,y:f.center.y,z:f.center.z}}),h.plot(l,e,t.layout)}},e.clean=function(t,e,r,n){for(var i=n._subplots[u]||[],a=0;a<i.length;a++){var o=i[a];!e[o]&&n[o]._scene&&(n[o]._scene.destroy(),n._infolayer&&n._infolayer.selectAll(\\\".annotation-\\\"+o).remove())}},e.toSVG=function(t){for(var e=t._fullLayout,r=e._subplots[u],n=e._size,i=0;i<r.length;i++){var a=e[r[i]],o=a.domain,s=a._scene,c=s.toImage(\\\"png\\\");e._glimages.append(\\\"svg:image\\\").attr({xmlns:l.svg,\\\"xlink:href\\\":c,x:n.l+n.w*o.x[0],y:n.t+n.h*(1-o.y[1]),width:n.w*(o.x[1]-o.x[0]),height:n.h*(o.y[1]-o.y[0]),preserveAspectRatio:\\\"none\\\"}),s.destroy()}},e.cleanId=function(t){if(t.match(/^scene[0-9]*$/)){var e=t.substr(5);return\\\"1\\\"===e&&(e=\\\"\\\"),c+e}},e.updateFx=function(t){for(var e=t._fullLayout,r=e._subplots[u],n=0;n<r.length;n++)e[r[n]]._scene.updateFx(e.dragmode,e.hovermode)}},59084:function(t){\\\"use strict\\\";t.exports={scene:{valType:\\\"subplotid\\\",dflt:\\\"scene\\\",editType:\\\"calc+clearAxisTypes\\\"}}},77894:function(t,e,r){\\\"use strict\\\";var n=r(7901),i=r(13838),a=r(1426).extendFlat,o=r(30962).overrideAll;t.exports=o({visible:i.visible,showspikes:{valType:\\\"boolean\\\",dflt:!0},spikesides:{valType:\\\"boolean\\\",dflt:!0},spikethickness:{valType:\\\"number\\\",min:0,dflt:2},spikecolor:{valType:\\\"color\\\",dflt:n.defaultLine},showbackground:{valType:\\\"boolean\\\",dflt:!1},backgroundcolor:{valType:\\\"color\\\",dflt:\\\"rgba(204, 204, 204, 0.5)\\\"},showaxeslabels:{valType:\\\"boolean\\\",dflt:!0},color:i.color,categoryorder:i.categoryorder,categoryarray:i.categoryarray,title:{text:i.title.text,font:i.title.font},type:a({},i.type,{values:[\\\"-\\\",\\\"linear\\\",\\\"log\\\",\\\"date\\\",\\\"category\\\"]}),autotypenumbers:i.autotypenumbers,autorange:i.autorange,rangemode:i.rangemode,range:a({},i.range,{items:[{valType:\\\"any\\\",editType:\\\"plot\\\",impliedEdits:{\\\"^autorange\\\":!1}},{valType:\\\"any\\\",editType:\\\"plot\\\",impliedEdits:{\\\"^autorange\\\":!1}}],anim:!1}),tickmode:i.minor.tickmode,nticks:i.nticks,tick0:i.tick0,dtick:i.dtick,tickvals:i.tickvals,ticktext:i.ticktext,ticks:i.ticks,mirror:i.mirror,ticklen:i.ticklen,tickwidth:i.tickwidth,tickcolor:i.tickcolor,showticklabels:i.showticklabels,labelalias:i.labelalias,tickfont:i.tickfont,tickangle:i.tickangle,tickprefix:i.tickprefix,showtickprefix:i.showtickprefix,ticksuffix:i.ticksuffix,showticksuffix:i.showticksuffix,showexponent:i.showexponent,exponentformat:i.exponentformat,minexponent:i.minexponent,separatethousands:i.separatethousands,tickformat:i.tickformat,tickformatstops:i.tickformatstops,hoverformat:i.hoverformat,showline:i.showline,linecolor:i.linecolor,linewidth:i.linewidth,showgrid:i.showgrid,gridcolor:a({},i.gridcolor,{dflt:\\\"rgb(204, 204, 204)\\\"}),gridwidth:i.gridwidth,zeroline:i.zeroline,zerolinecolor:i.zerolinecolor,zerolinewidth:i.zerolinewidth,_deprecated:{title:i._deprecated.title,titlefont:i._deprecated.titlefont}},\\\"plot\\\",\\\"from-root\\\")},3277:function(t,e,r){\\\"use strict\\\";var n=r(84267).mix,i=r(71828),a=r(44467),o=r(77894),s=r(951),l=r(71453),u=[\\\"xaxis\\\",\\\"yaxis\\\",\\\"zaxis\\\"];t.exports=function(t,e,r){var c,f;function h(t,e){return i.coerce(c,f,o,t,e)}for(var p=0;p<u.length;p++){var d=u[p];c=t[d]||{},(f=a.newContainer(e,d))._id=d[0]+r.scene,f._name=d,s(c,f,h,r),l(c,f,h,{font:r.font,letter:d[0],data:r.data,showGrid:!0,noTickson:!0,noTicklabelmode:!0,noTicklabelstep:!0,noTicklabelposition:!0,noTicklabeloverflow:!0,bgColor:r.bgColor,calendar:r.calendar},r.fullLayout),h(\\\"gridcolor\\\",n(f.color,r.bgColor,72.72727272727273).toRgbString()),h(\\\"title.text\\\",d[0]),f.setScale=i.noop,h(\\\"showspikes\\\")&&(h(\\\"spikesides\\\"),h(\\\"spikethickness\\\"),h(\\\"spikecolor\\\",f.color)),h(\\\"showaxeslabels\\\"),h(\\\"showbackground\\\")&&h(\\\"backgroundcolor\\\")}}},30422:function(t,e,r){\\\"use strict\\\";var n=r(78614),i=r(71828),a=[\\\"xaxis\\\",\\\"yaxis\\\",\\\"zaxis\\\"];function o(){this.bounds=[[-10,-10,-10],[10,10,10]],this.ticks=[[],[],[]],this.tickEnable=[!0,!0,!0],this.tickFont=[\\\"sans-serif\\\",\\\"sans-serif\\\",\\\"sans-serif\\\"],this.tickSize=[12,12,12],this.tickAngle=[0,0,0],this.tickColor=[[0,0,0,1],[0,0,0,1],[0,0,0,1]],this.tickPad=[18,18,18],this.labels=[\\\"x\\\",\\\"y\\\",\\\"z\\\"],this.labelEnable=[!0,!0,!0],this.labelFont=[\\\"Open Sans\\\",\\\"Open Sans\\\",\\\"Open Sans\\\"],this.labelSize=[20,20,20],this.labelColor=[[0,0,0,1],[0,0,0,1],[0,0,0,1]],this.labelPad=[30,30,30],this.lineEnable=[!0,!0,!0],this.lineMirror=[!1,!1,!1],this.lineWidth=[1,1,1],this.lineColor=[[0,0,0,1],[0,0,0,1],[0,0,0,1]],this.lineTickEnable=[!0,!0,!0],this.lineTickMirror=[!1,!1,!1],this.lineTickLength=[10,10,10],this.lineTickWidth=[1,1,1],this.lineTickColor=[[0,0,0,1],[0,0,0,1],[0,0,0,1]],this.gridEnable=[!0,!0,!0],this.gridWidth=[1,1,1],this.gridColor=[[0,0,0,1],[0,0,0,1],[0,0,0,1]],this.zeroEnable=[!0,!0,!0],this.zeroLineColor=[[0,0,0,1],[0,0,0,1],[0,0,0,1]],this.zeroLineWidth=[2,2,2],this.backgroundEnable=[!0,!0,!0],this.backgroundColor=[[.8,.8,.8,.5],[.8,.8,.8,.5],[.8,.8,.8,.5]],this._defaultTickPad=this.tickPad.slice(),this._defaultLabelPad=this.labelPad.slice(),this._defaultLineTickLength=this.lineTickLength.slice()}o.prototype.merge=function(t,e){for(var r=this,o=0;o<3;++o){var s=e[a[o]];s.visible?(r.labels[o]=t._meta?i.templateString(s.title.text,t._meta):s.title.text,\\\"font\\\"in s.title&&(s.title.font.color&&(r.labelColor[o]=n(s.title.font.color)),s.title.font.family&&(r.labelFont[o]=s.title.font.family),s.title.font.size&&(r.labelSize[o]=s.title.font.size)),\\\"showline\\\"in s&&(r.lineEnable[o]=s.showline),\\\"linecolor\\\"in s&&(r.lineColor[o]=n(s.linecolor)),\\\"linewidth\\\"in s&&(r.lineWidth[o]=s.linewidth),\\\"showgrid\\\"in s&&(r.gridEnable[o]=s.showgrid),\\\"gridcolor\\\"in s&&(r.gridColor[o]=n(s.gridcolor)),\\\"gridwidth\\\"in s&&(r.gridWidth[o]=s.gridwidth),\\\"log\\\"===s.type?r.zeroEnable[o]=!1:\\\"zeroline\\\"in s&&(r.zeroEnable[o]=s.zeroline),\\\"zerolinecolor\\\"in s&&(r.zeroLineColor[o]=n(s.zerolinecolor)),\\\"zerolinewidth\\\"in s&&(r.zeroLineWidth[o]=s.zerolinewidth),\\\"ticks\\\"in s&&s.ticks?r.lineTickEnable[o]=!0:r.lineTickEnable[o]=!1,\\\"ticklen\\\"in s&&(r.lineTickLength[o]=r._defaultLineTickLength[o]=s.ticklen),\\\"tickcolor\\\"in s&&(r.lineTickColor[o]=n(s.tickcolor)),\\\"tickwidth\\\"in s&&(r.lineTickWidth[o]=s.tickwidth),\\\"tickangle\\\"in s&&(r.tickAngle[o]=\\\"auto\\\"===s.tickangle?-3600:Math.PI*-s.tickangle/180),\\\"showticklabels\\\"in s&&(r.tickEnable[o]=s.showticklabels),\\\"tickfont\\\"in s&&(s.tickfont.color&&(r.tickColor[o]=n(s.tickfont.color)),s.tickfont.family&&(r.tickFont[o]=s.tickfont.family),s.tickfont.size&&(r.tickSize[o]=s.tickfont.size)),\\\"mirror\\\"in s?-1!==[\\\"ticks\\\",\\\"all\\\",\\\"allticks\\\"].indexOf(s.mirror)?(r.lineTickMirror[o]=!0,r.lineMirror[o]=!0):!0===s.mirror?(r.lineTickMirror[o]=!1,r.lineMirror[o]=!0):(r.lineTickMirror[o]=!1,r.lineMirror[o]=!1):r.lineMirror[o]=!1,\\\"showbackground\\\"in s&&!1!==s.showbackground?(r.backgroundEnable[o]=!0,r.backgroundColor[o]=n(s.backgroundcolor)):r.backgroundEnable[o]=!1):(r.tickEnable[o]=!1,r.labelEnable[o]=!1,r.lineEnable[o]=!1,r.lineTickEnable[o]=!1,r.gridEnable[o]=!1,r.zeroEnable[o]=!1,r.backgroundEnable[o]=!1)}},t.exports=function(t,e){var r=new o;return r.merge(t,e),r}},24682:function(t,e,r){\\\"use strict\\\";var n=r(71828),i=r(7901),a=r(73972),o=r(49119),s=r(3277),l=r(65500),u=r(27659).NG,c=\\\"gl3d\\\";function f(t,e,r,n){for(var o=r(\\\"bgcolor\\\"),l=i.combine(o,n.paper_bgcolor),f=[\\\"up\\\",\\\"center\\\",\\\"eye\\\"],h=0;h<f.length;h++)r(\\\"camera.\\\"+f[h]+\\\".x\\\"),r(\\\"camera.\\\"+f[h]+\\\".y\\\"),r(\\\"camera.\\\"+f[h]+\\\".z\\\");r(\\\"camera.projection.type\\\");var p=!!r(\\\"aspectratio.x\\\")&&!!r(\\\"aspectratio.y\\\")&&!!r(\\\"aspectratio.z\\\"),d=r(\\\"aspectmode\\\",p?\\\"manual\\\":\\\"auto\\\");p||(t.aspectratio=e.aspectratio={x:1,y:1,z:1},\\\"manual\\\"===d&&(e.aspectmode=\\\"auto\\\"),t.aspectmode=e.aspectmode);var v=u(n.fullData,c,n.id);s(t,e,{font:n.font,scene:n.id,data:v,bgColor:l,calendar:n.calendar,autotypenumbersDflt:n.autotypenumbersDflt,fullLayout:n.fullLayout}),a.getComponentMethod(\\\"annotations3d\\\",\\\"handleDefaults\\\")(t,e,n);var g=n.getDfltFromLayout(\\\"dragmode\\\");if(!1!==g&&!g)if(g=\\\"orbit\\\",t.camera&&t.camera.up){var y=t.camera.up.x,m=t.camera.up.y,x=t.camera.up.z;0!==x&&(y&&m&&x?x/Math.sqrt(y*y+m*m+x*x)>.999&&(g=\\\"turntable\\\"):g=\\\"turntable\\\")}else g=\\\"turntable\\\";r(\\\"dragmode\\\",g),r(\\\"hovermode\\\",n.getDfltFromLayout(\\\"hovermode\\\"))}t.exports=function(t,e,r){var i=e._basePlotModules.length>1;o(t,e,r,{type:c,attributes:l,handleDefaults:f,fullLayout:e,font:e.font,fullData:r,getDfltFromLayout:function(e){if(!i)return n.validate(t[e],l[e])?t[e]:void 0},autotypenumbersDflt:e.autotypenumbers,paper_bgcolor:e.paper_bgcolor,calendar:e.calendar})}},65500:function(t,e,r){\\\"use strict\\\";var n=r(77894),i=r(27670).Y,a=r(1426).extendFlat,o=r(71828).counterRegex;function s(t,e,r){return{x:{valType:\\\"number\\\",dflt:t,editType:\\\"camera\\\"},y:{valType:\\\"number\\\",dflt:e,editType:\\\"camera\\\"},z:{valType:\\\"number\\\",dflt:r,editType:\\\"camera\\\"},editType:\\\"camera\\\"}}t.exports={_arrayAttrRegexps:[o(\\\"scene\\\",\\\".annotations\\\",!0)],bgcolor:{valType:\\\"color\\\",dflt:\\\"rgba(0,0,0,0)\\\",editType:\\\"plot\\\"},camera:{up:a(s(0,0,1),{}),center:a(s(0,0,0),{}),eye:a(s(1.25,1.25,1.25),{}),projection:{type:{valType:\\\"enumerated\\\",values:[\\\"perspective\\\",\\\"orthographic\\\"],dflt:\\\"perspective\\\",editType:\\\"calc\\\"},editType:\\\"calc\\\"},editType:\\\"camera\\\"},domain:i({name:\\\"scene\\\",editType:\\\"plot\\\"}),aspectmode:{valType:\\\"enumerated\\\",values:[\\\"auto\\\",\\\"cube\\\",\\\"data\\\",\\\"manual\\\"],dflt:\\\"auto\\\",editType:\\\"plot\\\",impliedEdits:{\\\"aspectratio.x\\\":void 0,\\\"aspectratio.y\\\":void 0,\\\"aspectratio.z\\\":void 0}},aspectratio:{x:{valType:\\\"number\\\",min:0,editType:\\\"plot\\\",impliedEdits:{\\\"^aspectmode\\\":\\\"manual\\\"}},y:{valType:\\\"number\\\",min:0,editType:\\\"plot\\\",impliedEdits:{\\\"^aspectmode\\\":\\\"manual\\\"}},z:{valType:\\\"number\\\",min:0,editType:\\\"plot\\\",impliedEdits:{\\\"^aspectmode\\\":\\\"manual\\\"}},editType:\\\"plot\\\",impliedEdits:{aspectmode:\\\"manual\\\"}},xaxis:n,yaxis:n,zaxis:n,dragmode:{valType:\\\"enumerated\\\",values:[\\\"orbit\\\",\\\"turntable\\\",\\\"zoom\\\",\\\"pan\\\",!1],editType:\\\"plot\\\"},hovermode:{valType:\\\"enumerated\\\",values:[\\\"closest\\\",!1],dflt:\\\"closest\\\",editType:\\\"modebar\\\"},uirevision:{valType:\\\"any\\\",editType:\\\"none\\\"},editType:\\\"plot\\\",_deprecated:{cameraposition:{valType:\\\"info_array\\\",editType:\\\"camera\\\"}}}},13133:function(t,e,r){\\\"use strict\\\";var n=r(78614),i=[\\\"xaxis\\\",\\\"yaxis\\\",\\\"zaxis\\\"];function a(){this.enabled=[!0,!0,!0],this.colors=[[0,0,0,1],[0,0,0,1],[0,0,0,1]],this.drawSides=[!0,!0,!0],this.lineWidth=[1,1,1]}a.prototype.merge=function(t){for(var e=0;e<3;++e){var r=t[i[e]];r.visible?(this.enabled[e]=r.showspikes,this.colors[e]=n(r.spikecolor),this.drawSides[e]=r.spikesides,this.lineWidth[e]=r.spikethickness):(this.enabled[e]=!1,this.drawSides[e]=!1)}},t.exports=function(t){var e=new a;return e.merge(t),e}},96085:function(t,e,r){\\\"use strict\\\";t.exports=function(t){for(var e=t.axesOptions,r=t.glplot.axesPixels,s=t.fullSceneLayout,l=[[],[],[]],u=0;u<3;++u){var c=s[a[u]];if(c._length=(r[u].hi-r[u].lo)*r[u].pixelsPerDataUnit/t.dataScale[u],Math.abs(c._length)===1/0||isNaN(c._length))l[u]=[];else{c._input_range=c.range.slice(),c.range[0]=r[u].lo/t.dataScale[u],c.range[1]=r[u].hi/t.dataScale[u],c._m=1/(t.dataScale[u]*r[u].pixelsPerDataUnit),c.range[0]===c.range[1]&&(c.range[0]-=1,c.range[1]+=1);var f=c.tickmode;if(\\\"auto\\\"===c.tickmode){c.tickmode=\\\"linear\\\";var h=c.nticks||i.constrain(c._length/40,4,9);n.autoTicks(c,Math.abs(c.range[1]-c.range[0])/h)}for(var p=n.calcTicks(c,{msUTC:!0}),d=0;d<p.length;++d)p[d].x=p[d].x*t.dataScale[u],\\\"date\\\"===c.type&&(p[d].text=p[d].text.replace(/\\\\<br\\\\>/g,\\\" \\\"));l[u]=p,c.tickmode=f}}for(e.ticks=l,u=0;u<3;++u)for(o[u]=.5*(t.glplot.bounds[0][u]+t.glplot.bounds[1][u]),d=0;d<2;++d)e.bounds[d][u]=t.glplot.bounds[d][u];t.contourLevels=function(t){for(var e=new Array(3),r=0;r<3;++r){for(var n=t[r],i=new Array(n.length),a=0;a<n.length;++a)i[a]=n[a].x;e[r]=i}return e}(l)};var n=r(89298),i=r(71828),a=[\\\"xaxis\\\",\\\"yaxis\\\",\\\"zaxis\\\"],o=[0,0,0]},63538:function(t){\\\"use strict\\\";function e(t,e){var r,n,i=[0,0,0,0];for(r=0;r<4;++r)for(n=0;n<4;++n)i[n]+=t[4*r+n]*e[r];return i}t.exports=function(t,r){return e(t.projection,e(t.view,e(t.model,[r[0],r[1],r[2],1])))}},33539:function(t,e,r){\\\"use strict\\\";var n,i,a=r(9330).gl_plot3d,o=a.createCamera,s=a.createScene,l=r(40372),u=r(38520),c=r(73972),f=r(71828),h=f.preserveDrawingBuffer(),p=r(89298),d=r(30211),v=r(78614),g=r(58617),y=r(63538),m=r(30422),x=r(13133),b=r(96085),_=!1;function w(t,e){var r=document.createElement(\\\"div\\\"),n=t.container;this.graphDiv=t.graphDiv;var i=document.createElementNS(\\\"http://www.w3.org/2000/svg\\\",\\\"svg\\\");i.style.position=\\\"absolute\\\",i.style.top=i.style.left=\\\"0px\\\",i.style.width=i.style.height=\\\"100%\\\",i.style[\\\"z-index\\\"]=20,i.style[\\\"pointer-events\\\"]=\\\"none\\\",r.appendChild(i),this.svgContainer=i,r.id=t.id,r.style.position=\\\"absolute\\\",r.style.top=r.style.left=\\\"0px\\\",r.style.width=r.style.height=\\\"100%\\\",n.appendChild(r),this.fullLayout=e,this.id=t.id||\\\"scene\\\",this.fullSceneLayout=e[this.id],this.plotArgs=[[],{},{}],this.axesOptions=m(e,e[this.id]),this.spikeOptions=x(e[this.id]),this.container=r,this.staticMode=!!t.staticPlot,this.pixelRatio=this.pixelRatio||t.plotGlPixelRatio||2,this.dataScale=[1,1,1],this.contourLevels=[[],[],[]],this.convertAnnotations=c.getComponentMethod(\\\"annotations3d\\\",\\\"convert\\\"),this.drawAnnotations=c.getComponentMethod(\\\"annotations3d\\\",\\\"draw\\\"),this.initializeGLPlot()}var T=w.prototype;T.prepareOptions=function(){var t=this,e={canvas:t.canvas,gl:t.gl,glOptions:{preserveDrawingBuffer:h,premultipliedAlpha:!0,antialias:!0},container:t.container,axes:t.axesOptions,spikes:t.spikeOptions,pickRadius:10,snapToData:!0,autoScale:!0,autoBounds:!1,cameraObject:t.camera,pixelRatio:t.pixelRatio};if(t.staticMode){if(!(i||(n=document.createElement(\\\"canvas\\\"),i=l({canvas:n,preserveDrawingBuffer:!0,premultipliedAlpha:!0,antialias:!0}))))throw new Error(\\\"error creating static canvas/context for image server\\\");e.gl=i,e.canvas=n}return e};var k=!0;T.tryCreatePlot=function(){var t=this,e=t.prepareOptions(),r=!0;try{t.glplot=s(e)}catch(n){if(t.staticMode||!k||h)r=!1;else{f.warn([\\\"webgl setup failed possibly due to\\\",\\\"false preserveDrawingBuffer config.\\\",\\\"The mobile/tablet device may not be detected by is-mobile module.\\\",\\\"Enabling preserveDrawingBuffer in second attempt to create webgl scene...\\\"].join(\\\" \\\"));try{h=e.glOptions.preserveDrawingBuffer=!0,t.glplot=s(e)}catch(t){h=e.glOptions.preserveDrawingBuffer=!1,r=!1}}}return k=!1,r},T.initializeGLCamera=function(){var t=this,e=t.fullSceneLayout.camera,r=\\\"orthographic\\\"===e.projection.type;t.camera=o(t.container,{center:[e.center.x,e.center.y,e.center.z],eye:[e.eye.x,e.eye.y,e.eye.z],up:[e.up.x,e.up.y,e.up.z],_ortho:r,zoomMin:.01,zoomMax:100,mode:\\\"orbit\\\"})},T.initializeGLPlot=function(){var t=this;if(t.initializeGLCamera(),!t.tryCreatePlot())return g(t);t.traces={},t.make4thDimension();var e=t.graphDiv,r=e.layout,n=function(){var e={};return t.isCameraChanged(r)&&(e[t.id+\\\".camera\\\"]=t.getCamera()),t.isAspectChanged(r)&&(e[t.id+\\\".aspectratio\\\"]=t.glplot.getAspectratio(),\\\"manual\\\"!==r[t.id].aspectmode&&(t.fullSceneLayout.aspectmode=r[t.id].aspectmode=e[t.id+\\\".aspectmode\\\"]=\\\"manual\\\")),e},i=function(t){if(!1!==t.fullSceneLayout.dragmode){var e=n();t.saveLayout(r),t.graphDiv.emit(\\\"plotly_relayout\\\",e)}};return t.glplot.canvas&&(t.glplot.canvas.addEventListener(\\\"mouseup\\\",(function(){i(t)})),t.glplot.canvas.addEventListener(\\\"touchstart\\\",(function(){_=!0})),t.glplot.canvas.addEventListener(\\\"wheel\\\",(function(r){if(e._context._scrollZoom.gl3d){if(t.camera._ortho){var n=r.deltaX>r.deltaY?1.1:1/1.1,a=t.glplot.getAspectratio();t.glplot.setAspectratio({x:n*a.x,y:n*a.y,z:n*a.z})}i(t)}}),!!u&&{passive:!1}),t.glplot.canvas.addEventListener(\\\"mousemove\\\",(function(){if(!1!==t.fullSceneLayout.dragmode&&0!==t.camera.mouseListener.buttons){var e=n();t.graphDiv.emit(\\\"plotly_relayouting\\\",e)}})),t.staticMode||t.glplot.canvas.addEventListener(\\\"webglcontextlost\\\",(function(r){e&&e.emit&&e.emit(\\\"plotly_webglcontextlost\\\",{event:r,layer:t.id})}),!1)),t.glplot.oncontextloss=function(){t.recoverContext()},t.glplot.onrender=function(){t.render()},!0},T.render=function(){var t,e=this,r=e.graphDiv,n=e.svgContainer,i=e.container.getBoundingClientRect();r._fullLayout._calcInverseTransform(r);var a=r._fullLayout._invScaleX,o=r._fullLayout._invScaleY,s=i.width*a,l=i.height*o;n.setAttributeNS(null,\\\"viewBox\\\",\\\"0 0 \\\"+s+\\\" \\\"+l),n.setAttributeNS(null,\\\"width\\\",s),n.setAttributeNS(null,\\\"height\\\",l),b(e),e.glplot.axes.update(e.axesOptions);for(var u=Object.keys(e.traces),c=null,h=e.glplot.selection,v=0;v<u.length;++v)\\\"skip\\\"!==(t=e.traces[u[v]]).data.hoverinfo&&t.handlePick(h)&&(c=t),t.setContourLevels&&t.setContourLevels();function g(t,r,n){var i=e.fullSceneLayout[t+\\\"axis\\\"];return\\\"log\\\"!==i.type&&(r=i.d2l(r)),p.hoverLabelText(i,r,n)}if(null!==c){var m=y(e.glplot.cameraParams,h.dataCoordinate);t=c.data;var x,w=r._fullData[t.index],T=h.index,k={xLabel:g(\\\"x\\\",h.traceCoordinate[0],t.xhoverformat),yLabel:g(\\\"y\\\",h.traceCoordinate[1],t.yhoverformat),zLabel:g(\\\"z\\\",h.traceCoordinate[2],t.zhoverformat)},A=d.castHoverinfo(w,e.fullLayout,T),M=(A||\\\"\\\").split(\\\"+\\\"),S=A&&\\\"all\\\"===A;w.hovertemplate||S||(-1===M.indexOf(\\\"x\\\")&&(k.xLabel=void 0),-1===M.indexOf(\\\"y\\\")&&(k.yLabel=void 0),-1===M.indexOf(\\\"z\\\")&&(k.zLabel=void 0),-1===M.indexOf(\\\"text\\\")&&(h.textLabel=void 0),-1===M.indexOf(\\\"name\\\")&&(c.name=void 0));var E=[];\\\"cone\\\"===t.type||\\\"streamtube\\\"===t.type?(k.uLabel=g(\\\"x\\\",h.traceCoordinate[3],t.uhoverformat),(S||-1!==M.indexOf(\\\"u\\\"))&&E.push(\\\"u: \\\"+k.uLabel),k.vLabel=g(\\\"y\\\",h.traceCoordinate[4],t.vhoverformat),(S||-1!==M.indexOf(\\\"v\\\"))&&E.push(\\\"v: \\\"+k.vLabel),k.wLabel=g(\\\"z\\\",h.traceCoordinate[5],t.whoverformat),(S||-1!==M.indexOf(\\\"w\\\"))&&E.push(\\\"w: \\\"+k.wLabel),k.normLabel=h.traceCoordinate[6].toPrecision(3),(S||-1!==M.indexOf(\\\"norm\\\"))&&E.push(\\\"norm: \\\"+k.normLabel),\\\"streamtube\\\"===t.type&&(k.divergenceLabel=h.traceCoordinate[7].toPrecision(3),(S||-1!==M.indexOf(\\\"divergence\\\"))&&E.push(\\\"divergence: \\\"+k.divergenceLabel)),h.textLabel&&E.push(h.textLabel),x=E.join(\\\"<br>\\\")):\\\"isosurface\\\"===t.type||\\\"volume\\\"===t.type?(k.valueLabel=p.hoverLabelText(e._mockAxis,e._mockAxis.d2l(h.traceCoordinate[3]),t.valuehoverformat),E.push(\\\"value: \\\"+k.valueLabel),h.textLabel&&E.push(h.textLabel),x=E.join(\\\"<br>\\\")):x=h.textLabel;var L={x:h.traceCoordinate[0],y:h.traceCoordinate[1],z:h.traceCoordinate[2],data:w._input,fullData:w,curveNumber:w.index,pointNumber:T};d.appendArrayPointValue(L,w,T),t._module.eventData&&(L=w._module.eventData(L,h,w,{},T));var C={points:[L]};if(e.fullSceneLayout.hovermode){var P=[];d.loneHover({trace:w,x:(.5+.5*m[0]/m[3])*s,y:(.5-.5*m[1]/m[3])*l,xLabel:k.xLabel,yLabel:k.yLabel,zLabel:k.zLabel,text:x,name:c.name,color:d.castHoverOption(w,T,\\\"bgcolor\\\")||c.color,borderColor:d.castHoverOption(w,T,\\\"bordercolor\\\"),fontFamily:d.castHoverOption(w,T,\\\"font.family\\\"),fontSize:d.castHoverOption(w,T,\\\"font.size\\\"),fontColor:d.castHoverOption(w,T,\\\"font.color\\\"),nameLength:d.castHoverOption(w,T,\\\"namelength\\\"),textAlign:d.castHoverOption(w,T,\\\"align\\\"),hovertemplate:f.castOption(w,T,\\\"hovertemplate\\\"),hovertemplateLabels:f.extendFlat({},L,k),eventData:[L]},{container:n,gd:r,inOut_bbox:P}),L.bbox=P[0]}h.distance<5&&(h.buttons||_)?r.emit(\\\"plotly_click\\\",C):r.emit(\\\"plotly_hover\\\",C),this.oldEventData=C}else d.loneUnhover(n),this.oldEventData&&r.emit(\\\"plotly_unhover\\\",this.oldEventData),this.oldEventData=void 0;e.drawAnnotations(e)},T.recoverContext=function(){var t=this;t.glplot.dispose();var e=function(){t.glplot.gl.isContextLost()?requestAnimationFrame(e):t.initializeGLPlot()?t.plot.apply(t,t.plotArgs):f.error(\\\"Catastrophic and unrecoverable WebGL error. Context lost.\\\")};requestAnimationFrame(e)};var A=[\\\"xaxis\\\",\\\"yaxis\\\",\\\"zaxis\\\"];function M(t,e,r){for(var n=t.fullSceneLayout,i=0;i<3;i++){var a=A[i],o=a.charAt(0),s=n[a],l=e[o],u=e[o+\\\"calendar\\\"],c=e[\\\"_\\\"+o+\\\"length\\\"];if(f.isArrayOrTypedArray(l))for(var h,p=0;p<(c||l.length);p++)if(f.isArrayOrTypedArray(l[p]))for(var d=0;d<l[p].length;++d)h=s.d2l(l[p][d],0,u),!isNaN(h)&&isFinite(h)&&(r[0][i]=Math.min(r[0][i],h),r[1][i]=Math.max(r[1][i],h));else h=s.d2l(l[p],0,u),!isNaN(h)&&isFinite(h)&&(r[0][i]=Math.min(r[0][i],h),r[1][i]=Math.max(r[1][i],h));else r[0][i]=Math.min(r[0][i],0),r[1][i]=Math.max(r[1][i],c-1)}}T.plot=function(t,e,r){var n=this;if(n.plotArgs=[t,e,r],!n.glplot.contextLost){var i,a,o,s,l,u,c=e[n.id],f=r[n.id];n.fullLayout=e,n.fullSceneLayout=c,n.axesOptions.merge(e,c),n.spikeOptions.merge(c),n.setViewport(c),n.updateFx(c.dragmode,c.hovermode),n.camera.enableWheel=n.graphDiv._context._scrollZoom.gl3d,n.glplot.setClearColor(v(c.bgcolor)),n.setConvert(l),t?Array.isArray(t)||(t=[t]):t=[];var h=[[1/0,1/0,1/0],[-1/0,-1/0,-1/0]];for(o=0;o<t.length;++o)!0===(i=t[o]).visible&&0!==i._length&&M(this,i,h);!function(t,e){for(var r=t.fullSceneLayout,n=r.annotations||[],i=0;i<3;i++)for(var a=A[i],o=a.charAt(0),s=r[a],l=0;l<n.length;l++){var u=n[l];if(u.visible){var c=s.r2l(u[o]);!isNaN(c)&&isFinite(c)&&(e[0][i]=Math.min(e[0][i],c),e[1][i]=Math.max(e[1][i],c))}}}(this,h);var p=[1,1,1];for(s=0;s<3;++s)h[1][s]===h[0][s]?p[s]=1:p[s]=1/(h[1][s]-h[0][s]);for(n.dataScale=p,n.convertAnnotations(this),o=0;o<t.length;++o)!0===(i=t[o]).visible&&0!==i._length&&((a=n.traces[i.uid])?a.data.type===i.type?a.update(i):(a.dispose(),a=i._module.plot(this,i),n.traces[i.uid]=a):(a=i._module.plot(this,i),n.traces[i.uid]=a),a.name=i.name);var d=Object.keys(n.traces);t:for(o=0;o<d.length;++o){for(s=0;s<t.length;++s)if(t[s].uid===d[o]&&!0===t[s].visible&&0!==t[s]._length)continue t;(a=n.traces[d[o]]).dispose(),delete n.traces[d[o]]}n.glplot.objects.sort((function(t,e){return t._trace.data.index-e._trace.data.index}));var g,y=[[0,0,0],[0,0,0]],m=[],x={};for(o=0;o<3;++o){if((u=(l=c[A[o]]).type)in x?(x[u].acc*=p[o],x[u].count+=1):x[u]={acc:p[o],count:1},l.autorange){y[0][o]=1/0,y[1][o]=-1/0;var b=n.glplot.objects,_=n.fullSceneLayout.annotations||[],w=l._name.charAt(0);for(s=0;s<b.length;s++){var T=b[s],k=T.bounds,S=T._trace.data._pad||0;\\\"ErrorBars\\\"===T.constructor.name&&l._lowerLogErrorBound?y[0][o]=Math.min(y[0][o],l._lowerLogErrorBound):y[0][o]=Math.min(y[0][o],k[0][o]/p[o]-S),y[1][o]=Math.max(y[1][o],k[1][o]/p[o]+S)}for(s=0;s<_.length;s++){var E=_[s];if(E.visible){var L=l.r2l(E[w]);y[0][o]=Math.min(y[0][o],L),y[1][o]=Math.max(y[1][o],L)}}if(\\\"rangemode\\\"in l&&\\\"tozero\\\"===l.rangemode&&(y[0][o]=Math.min(y[0][o],0),y[1][o]=Math.max(y[1][o],0)),y[0][o]>y[1][o])y[0][o]=-1,y[1][o]=1;else{var C=y[1][o]-y[0][o];y[0][o]-=C/32,y[1][o]+=C/32}if(\\\"reversed\\\"===l.autorange){var P=y[0][o];y[0][o]=y[1][o],y[1][o]=P}}else{var O=l.range;y[0][o]=l.r2l(O[0]),y[1][o]=l.r2l(O[1])}y[0][o]===y[1][o]&&(y[0][o]-=1,y[1][o]+=1),m[o]=y[1][o]-y[0][o],n.glplot.setBounds(o,{min:y[0][o]*p[o],max:y[1][o]*p[o]})}var I=c.aspectmode;if(\\\"cube\\\"===I)g=[1,1,1];else if(\\\"manual\\\"===I){var D=c.aspectratio;g=[D.x,D.y,D.z]}else{if(\\\"auto\\\"!==I&&\\\"data\\\"!==I)throw new Error(\\\"scene.js aspectRatio was not one of the enumerated types\\\");var z=[1,1,1];for(o=0;o<3;++o){var R=x[u=(l=c[A[o]]).type];z[o]=Math.pow(R.acc,1/R.count)/p[o]}g=\\\"data\\\"===I||Math.max.apply(null,z)/Math.min.apply(null,z)<=4?z:[1,1,1]}c.aspectratio.x=f.aspectratio.x=g[0],c.aspectratio.y=f.aspectratio.y=g[1],c.aspectratio.z=f.aspectratio.z=g[2],n.glplot.setAspectratio(c.aspectratio),n.viewInitial.aspectratio||(n.viewInitial.aspectratio={x:c.aspectratio.x,y:c.aspectratio.y,z:c.aspectratio.z}),n.viewInitial.aspectmode||(n.viewInitial.aspectmode=c.aspectmode);var F=c.domain||null,B=e._size||null;if(F&&B){var N=n.container.style;N.position=\\\"absolute\\\",N.left=B.l+F.x[0]*B.w+\\\"px\\\",N.top=B.t+(1-F.y[1])*B.h+\\\"px\\\",N.width=B.w*(F.x[1]-F.x[0])+\\\"px\\\",N.height=B.h*(F.y[1]-F.y[0])+\\\"px\\\"}n.glplot.redraw()}},T.destroy=function(){var t=this;t.glplot&&(t.camera.mouseListener.enabled=!1,t.container.removeEventListener(\\\"wheel\\\",t.camera.wheelListener),t.camera=null,t.glplot.dispose(),t.container.parentNode.removeChild(t.container),t.glplot=null)},T.getCamera=function(){var t,e=this;return e.camera.view.recalcMatrix(e.camera.view.lastT()),{up:{x:(t=e.camera).up[0],y:t.up[1],z:t.up[2]},center:{x:t.center[0],y:t.center[1],z:t.center[2]},eye:{x:t.eye[0],y:t.eye[1],z:t.eye[2]},projection:{type:!0===t._ortho?\\\"orthographic\\\":\\\"perspective\\\"}}},T.setViewport=function(t){var e,r=this,n=t.camera;r.camera.lookAt.apply(this,[[(e=n).eye.x,e.eye.y,e.eye.z],[e.center.x,e.center.y,e.center.z],[e.up.x,e.up.y,e.up.z]]),r.glplot.setAspectratio(t.aspectratio),\\\"orthographic\\\"===n.projection.type!==r.camera._ortho&&(r.glplot.redraw(),r.glplot.clearRGBA(),r.glplot.dispose(),r.initializeGLPlot())},T.isCameraChanged=function(t){var e=this.getCamera(),r=f.nestedProperty(t,this.id+\\\".camera\\\").get();function n(t,e,r,n){var i=[\\\"up\\\",\\\"center\\\",\\\"eye\\\"],a=[\\\"x\\\",\\\"y\\\",\\\"z\\\"];return e[i[r]]&&t[i[r]][a[n]]===e[i[r]][a[n]]}var i=!1;if(void 0===r)i=!0;else{for(var a=0;a<3;a++)for(var o=0;o<3;o++)if(!n(e,r,a,o)){i=!0;break}(!r.projection||e.projection&&e.projection.type!==r.projection.type)&&(i=!0)}return i},T.isAspectChanged=function(t){var e=this.glplot.getAspectratio(),r=f.nestedProperty(t,this.id+\\\".aspectratio\\\").get();return void 0===r||r.x!==e.x||r.y!==e.y||r.z!==e.z},T.saveLayout=function(t){var e,r,n,i,a,o,s=this,l=s.fullLayout,u=s.isCameraChanged(t),h=s.isAspectChanged(t),p=u||h;if(p){var d={};u&&(e=s.getCamera(),n=(r=f.nestedProperty(t,s.id+\\\".camera\\\")).get(),d[s.id+\\\".camera\\\"]=n),h&&(i=s.glplot.getAspectratio(),o=(a=f.nestedProperty(t,s.id+\\\".aspectratio\\\")).get(),d[s.id+\\\".aspectratio\\\"]=o),c.call(\\\"_storeDirectGUIEdit\\\",t,l._preGUI,d),u&&(r.set(e),f.nestedProperty(l,s.id+\\\".camera\\\").set(e)),h&&(a.set(i),f.nestedProperty(l,s.id+\\\".aspectratio\\\").set(i),s.glplot.redraw())}return p},T.updateFx=function(t,e){var r=this,n=r.camera;if(n)if(\\\"orbit\\\"===t)n.mode=\\\"orbit\\\",n.keyBindingMode=\\\"rotate\\\";else if(\\\"turntable\\\"===t){n.up=[0,0,1],n.mode=\\\"turntable\\\",n.keyBindingMode=\\\"rotate\\\";var i=r.graphDiv,a=i._fullLayout,o=r.fullSceneLayout.camera,s=o.up.x,l=o.up.y,u=o.up.z;if(u/Math.sqrt(s*s+l*l+u*u)<.999){var h=r.id+\\\".camera.up\\\",p={x:0,y:0,z:1},d={};d[h]=p;var v=i.layout;c.call(\\\"_storeDirectGUIEdit\\\",v,a._preGUI,d),o.up=p,f.nestedProperty(v,h).set(p)}}else n.keyBindingMode=t;r.fullSceneLayout.hovermode=e},T.toImage=function(t){var e=this;t||(t=\\\"png\\\"),e.staticMode&&e.container.appendChild(n),e.glplot.redraw();var r=e.glplot.gl,i=r.drawingBufferWidth,a=r.drawingBufferHeight;r.bindFramebuffer(r.FRAMEBUFFER,null);var o=new Uint8Array(i*a*4);r.readPixels(0,0,i,a,r.RGBA,r.UNSIGNED_BYTE,o),function(t,e,r){for(var n=0,i=r-1;n<i;++n,--i)for(var a=0;a<e;++a)for(var o=0;o<4;++o){var s=4*(e*n+a)+o,l=4*(e*i+a)+o,u=t[s];t[s]=t[l],t[l]=u}}(o,i,a),function(t,e,r){for(var n=0;n<r;++n)for(var i=0;i<e;++i){var a=4*(e*n+i),o=t[a+3];if(o>0)for(var s=255/o,l=0;l<3;++l)t[a+l]=Math.min(s*t[a+l],255)}}(o,i,a);var s=document.createElement(\\\"canvas\\\");s.width=i,s.height=a;var l,u=s.getContext(\\\"2d\\\",{willReadFrequently:!0}),c=u.createImageData(i,a);switch(c.data.set(o),u.putImageData(c,0,0),t){case\\\"jpeg\\\":l=s.toDataURL(\\\"image/jpeg\\\");break;case\\\"webp\\\":l=s.toDataURL(\\\"image/webp\\\");break;default:l=s.toDataURL(\\\"image/png\\\")}return e.staticMode&&e.container.removeChild(n),l},T.setConvert=function(){for(var t=0;t<3;t++){var e=this.fullSceneLayout[A[t]];p.setConvert(e,this.fullLayout),e.setScale=f.noop}},T.make4thDimension=function(){var t=this,e=t.graphDiv._fullLayout;t._mockAxis={type:\\\"linear\\\",showexponent:\\\"all\\\",exponentformat:\\\"B\\\"},p.setConvert(t._mockAxis,e)},t.exports=w},90060:function(t){\\\"use strict\\\";t.exports=function(t,e,r,n){n=n||t.length;for(var i=new Array(n),a=0;a<n;a++)i[a]=[t[a],e[a],r[a]];return i}},10820:function(t,e,r){\\\"use strict\\\";var n=r(41940),i=r(85594),a=r(22399),o=r(29241),s=r(53777),l=r(35025),u=r(1426).extendFlat,c=n({editType:\\\"calc\\\"});c.family.dflt='\\\"Open Sans\\\", verdana, arial, sans-serif',c.size.dflt=12,c.color.dflt=a.defaultLine,t.exports={font:c,title:{text:{valType:\\\"string\\\",editType:\\\"layoutstyle\\\"},font:n({editType:\\\"layoutstyle\\\"}),xref:{valType:\\\"enumerated\\\",dflt:\\\"container\\\",values:[\\\"container\\\",\\\"paper\\\"],editType:\\\"layoutstyle\\\"},yref:{valType:\\\"enumerated\\\",dflt:\\\"container\\\",values:[\\\"container\\\",\\\"paper\\\"],editType:\\\"layoutstyle\\\"},x:{valType:\\\"number\\\",min:0,max:1,dflt:.5,editType:\\\"layoutstyle\\\"},y:{valType:\\\"number\\\",min:0,max:1,dflt:\\\"auto\\\",editType:\\\"layoutstyle\\\"},xanchor:{valType:\\\"enumerated\\\",dflt:\\\"auto\\\",values:[\\\"auto\\\",\\\"left\\\",\\\"center\\\",\\\"right\\\"],editType:\\\"layoutstyle\\\"},yanchor:{valType:\\\"enumerated\\\",dflt:\\\"auto\\\",values:[\\\"auto\\\",\\\"top\\\",\\\"middle\\\",\\\"bottom\\\"],editType:\\\"layoutstyle\\\"},pad:u(l({editType:\\\"layoutstyle\\\"}),{}),automargin:{valType:\\\"boolean\\\",dflt:!1,editType:\\\"plot\\\"},editType:\\\"layoutstyle\\\"},uniformtext:{mode:{valType:\\\"enumerated\\\",values:[!1,\\\"hide\\\",\\\"show\\\"],dflt:!1,editType:\\\"plot\\\"},minsize:{valType:\\\"number\\\",min:0,dflt:0,editType:\\\"plot\\\"},editType:\\\"plot\\\"},autosize:{valType:\\\"boolean\\\",dflt:!1,editType:\\\"none\\\"},width:{valType:\\\"number\\\",min:10,dflt:700,editType:\\\"plot\\\"},height:{valType:\\\"number\\\",min:10,dflt:450,editType:\\\"plot\\\"},minreducedwidth:{valType:\\\"number\\\",min:2,dflt:64,editType:\\\"plot\\\"},minreducedheight:{valType:\\\"number\\\",min:2,dflt:64,editType:\\\"plot\\\"},margin:{l:{valType:\\\"number\\\",min:0,dflt:80,editType:\\\"plot\\\"},r:{valType:\\\"number\\\",min:0,dflt:80,editType:\\\"plot\\\"},t:{valType:\\\"number\\\",min:0,dflt:100,editType:\\\"plot\\\"},b:{valType:\\\"number\\\",min:0,dflt:80,editType:\\\"plot\\\"},pad:{valType:\\\"number\\\",min:0,dflt:0,editType:\\\"plot\\\"},autoexpand:{valType:\\\"boolean\\\",dflt:!0,editType:\\\"plot\\\"},editType:\\\"plot\\\"},computed:{valType:\\\"any\\\",editType:\\\"none\\\"},paper_bgcolor:{valType:\\\"color\\\",dflt:a.background,editType:\\\"plot\\\"},plot_bgcolor:{valType:\\\"color\\\",dflt:a.background,editType:\\\"layoutstyle\\\"},autotypenumbers:{valType:\\\"enumerated\\\",values:[\\\"convert types\\\",\\\"strict\\\"],dflt:\\\"convert types\\\",editType:\\\"calc\\\"},separators:{valType:\\\"string\\\",editType:\\\"plot\\\"},hidesources:{valType:\\\"boolean\\\",dflt:!1,editType:\\\"plot\\\"},showlegend:{valType:\\\"boolean\\\",editType:\\\"legend\\\"},colorway:{valType:\\\"colorlist\\\",dflt:a.defaults,editType:\\\"calc\\\"},datarevision:{valType:\\\"any\\\",editType:\\\"calc\\\"},uirevision:{valType:\\\"any\\\",editType:\\\"none\\\"},editrevision:{valType:\\\"any\\\",editType:\\\"none\\\"},selectionrevision:{valType:\\\"any\\\",editType:\\\"none\\\"},template:{valType:\\\"any\\\",editType:\\\"calc\\\"},newshape:o.newshape,activeshape:o.activeshape,newselection:s.newselection,activeselection:s.activeselection,meta:{valType:\\\"any\\\",arrayOk:!0,editType:\\\"plot\\\"},transition:u({},i.transition,{editType:\\\"none\\\"}),_deprecated:{title:{valType:\\\"string\\\",editType:\\\"layoutstyle\\\"},titlefont:n({editType:\\\"layoutstyle\\\"})}}},77734:function(t,e,r){\\\"use strict\\\";var n=r(78607),i=\\\"1.10.1\\\",a='© <a target=\\\"_blank\\\" href=\\\"https://www.openstreetmap.org/copyright\\\">OpenStreetMap</a> contributors',o=['© <a target=\\\"_blank\\\" href=\\\"https://carto.com/\\\">Carto</a>',a].join(\\\" \\\"),s=['Map tiles by <a target=\\\"_blank\\\" href=\\\"https://stamen.com\\\">Stamen Design</a>','under <a target=\\\"_blank\\\" href=\\\"https://creativecommons.org/licenses/by/3.0\\\">CC BY 3.0</a>',\\\"|\\\",'Data by <a target=\\\"_blank\\\" href=\\\"https://openstreetmap.org\\\">OpenStreetMap</a> contributors','under <a target=\\\"_blank\\\" href=\\\"https://www.openstreetmap.org/copyright\\\">ODbL</a>'].join(\\\" \\\"),l={\\\"open-street-map\\\":{id:\\\"osm\\\",version:8,sources:{\\\"plotly-osm-tiles\\\":{type:\\\"raster\\\",attribution:a,tiles:[\\\"https://a.tile.openstreetmap.org/{z}/{x}/{y}.png\\\",\\\"https://b.tile.openstreetmap.org/{z}/{x}/{y}.png\\\"],tileSize:256}},layers:[{id:\\\"plotly-osm-tiles\\\",type:\\\"raster\\\",source:\\\"plotly-osm-tiles\\\",minzoom:0,maxzoom:22}]},\\\"white-bg\\\":{id:\\\"white-bg\\\",version:8,sources:{},layers:[{id:\\\"white-bg\\\",type:\\\"background\\\",paint:{\\\"background-color\\\":\\\"#FFFFFF\\\"},minzoom:0,maxzoom:22}]},\\\"carto-positron\\\":{id:\\\"carto-positron\\\",version:8,sources:{\\\"plotly-carto-positron\\\":{type:\\\"raster\\\",attribution:o,tiles:[\\\"https://cartodb-basemaps-c.global.ssl.fastly.net/light_all/{z}/{x}/{y}.png\\\"],tileSize:256}},layers:[{id:\\\"plotly-carto-positron\\\",type:\\\"raster\\\",source:\\\"plotly-carto-positron\\\",minzoom:0,maxzoom:22}]},\\\"carto-darkmatter\\\":{id:\\\"carto-darkmatter\\\",version:8,sources:{\\\"plotly-carto-darkmatter\\\":{type:\\\"raster\\\",attribution:o,tiles:[\\\"https://cartodb-basemaps-c.global.ssl.fastly.net/dark_all/{z}/{x}/{y}.png\\\"],tileSize:256}},layers:[{id:\\\"plotly-carto-darkmatter\\\",type:\\\"raster\\\",source:\\\"plotly-carto-darkmatter\\\",minzoom:0,maxzoom:22}]},\\\"stamen-terrain\\\":{id:\\\"stamen-terrain\\\",version:8,sources:{\\\"plotly-stamen-terrain\\\":{type:\\\"raster\\\",attribution:s,tiles:[\\\"https://stamen-tiles.a.ssl.fastly.net/terrain/{z}/{x}/{y}.png\\\"],tileSize:256}},layers:[{id:\\\"plotly-stamen-terrain\\\",type:\\\"raster\\\",source:\\\"plotly-stamen-terrain\\\",minzoom:0,maxzoom:22}]},\\\"stamen-toner\\\":{id:\\\"stamen-toner\\\",version:8,sources:{\\\"plotly-stamen-toner\\\":{type:\\\"raster\\\",attribution:s,tiles:[\\\"https://stamen-tiles.a.ssl.fastly.net/toner/{z}/{x}/{y}.png\\\"],tileSize:256}},layers:[{id:\\\"plotly-stamen-toner\\\",type:\\\"raster\\\",source:\\\"plotly-stamen-toner\\\",minzoom:0,maxzoom:22}]},\\\"stamen-watercolor\\\":{id:\\\"stamen-watercolor\\\",version:8,sources:{\\\"plotly-stamen-watercolor\\\":{type:\\\"raster\\\",attribution:['Map tiles by <a target=\\\"_blank\\\" href=\\\"https://stamen.com\\\">Stamen Design</a>','under <a target=\\\"_blank\\\" href=\\\"https://creativecommons.org/licenses/by/3.0\\\">CC BY 3.0</a>',\\\"|\\\",'Data by <a target=\\\"_blank\\\" href=\\\"https://openstreetmap.org\\\">OpenStreetMap</a> contributors','under <a target=\\\"_blank\\\" href=\\\"https://creativecommons.org/licenses/by-sa/3.0\\\">CC BY SA</a>'].join(\\\" \\\"),tiles:[\\\"https://stamen-tiles.a.ssl.fastly.net/watercolor/{z}/{x}/{y}.png\\\"],tileSize:256}},layers:[{id:\\\"plotly-stamen-watercolor\\\",type:\\\"raster\\\",source:\\\"plotly-stamen-watercolor\\\",minzoom:0,maxzoom:22}]}},u=n(l);t.exports={requiredVersion:i,styleUrlPrefix:\\\"mapbox://styles/mapbox/\\\",styleUrlSuffix:\\\"v9\\\",styleValuesMapbox:[\\\"basic\\\",\\\"streets\\\",\\\"outdoors\\\",\\\"light\\\",\\\"dark\\\",\\\"satellite\\\",\\\"satellite-streets\\\"],styleValueDflt:\\\"basic\\\",stylesNonMapbox:l,styleValuesNonMapbox:u,traceLayerPrefix:\\\"plotly-trace-layer-\\\",layoutLayerPrefix:\\\"plotly-layout-layer-\\\",wrongVersionErrorMsg:[\\\"Your custom plotly.js bundle is not using the correct mapbox-gl version\\\",\\\"Please install mapbox-gl@\\\"+i+\\\".\\\"].join(\\\"\\\\n\\\"),noAccessTokenErrorMsg:[\\\"Missing Mapbox access token.\\\",\\\"Mapbox trace type require a Mapbox access token to be registered.\\\",\\\"For example:\\\",\\\"  Plotly.newPlot(gd, data, layout, { mapboxAccessToken: 'my-access-token' });\\\",\\\"More info here: https://www.mapbox.com/help/define-access-token/\\\"].join(\\\"\\\\n\\\"),missingStyleErrorMsg:[\\\"No valid mapbox style found, please set `mapbox.style` to one of:\\\",u.join(\\\", \\\"),\\\"or register a Mapbox access token to use a Mapbox-served style.\\\"].join(\\\"\\\\n\\\"),multipleTokensErrorMsg:[\\\"Set multiple mapbox access token across different mapbox subplot,\\\",\\\"using first token found as mapbox-gl does not allow multipleaccess tokens on the same page.\\\"].join(\\\"\\\\n\\\"),mapOnErrorMsg:\\\"Mapbox error.\\\",mapboxLogo:{path0:\\\"m 10.5,1.24 c -5.11,0 -9.25,4.15 -9.25,9.25 0,5.1 4.15,9.25 9.25,9.25 5.1,0 9.25,-4.15 9.25,-9.25 0,-5.11 -4.14,-9.25 -9.25,-9.25 z m 4.39,11.53 c -1.93,1.93 -4.78,2.31 -6.7,2.31 -0.7,0 -1.41,-0.05 -2.1,-0.16 0,0 -1.02,-5.64 2.14,-8.81 0.83,-0.83 1.95,-1.28 3.13,-1.28 1.27,0 2.49,0.51 3.39,1.42 1.84,1.84 1.89,4.75 0.14,6.52 z\\\",path1:\\\"M 10.5,-0.01 C 4.7,-0.01 0,4.7 0,10.49 c 0,5.79 4.7,10.5 10.5,10.5 5.8,0 10.5,-4.7 10.5,-10.5 C 20.99,4.7 16.3,-0.01 10.5,-0.01 Z m 0,19.75 c -5.11,0 -9.25,-4.15 -9.25,-9.25 0,-5.1 4.14,-9.26 9.25,-9.26 5.11,0 9.25,4.15 9.25,9.25 0,5.13 -4.14,9.26 -9.25,9.26 z\\\",path2:\\\"M 14.74,6.25 C 12.9,4.41 9.98,4.35 8.23,6.1 5.07,9.27 6.09,14.91 6.09,14.91 c 0,0 5.64,1.02 8.81,-2.14 C 16.64,11 16.59,8.09 14.74,6.25 Z m -2.27,4.09 -0.91,1.87 -0.9,-1.87 -1.86,-0.91 1.86,-0.9 0.9,-1.87 0.91,1.87 1.86,0.9 z\\\",polygon:\\\"11.56,12.21 10.66,10.34 8.8,9.43 10.66,8.53 11.56,6.66 12.47,8.53 14.33,9.43 12.47,10.34\\\"},styleRules:{map:\\\"overflow:hidden;position:relative;\\\",\\\"missing-css\\\":\\\"display:none;\\\",canary:\\\"background-color:salmon;\\\",\\\"ctrl-bottom-left\\\":\\\"position: absolute; pointer-events: none; z-index: 2; bottom: 0; left: 0;\\\",\\\"ctrl-bottom-right\\\":\\\"position: absolute; pointer-events: none; z-index: 2; right: 0; bottom: 0;\\\",ctrl:\\\"clear: both; pointer-events: auto; transform: translate(0, 0);\\\",\\\"ctrl-attrib.mapboxgl-compact .mapboxgl-ctrl-attrib-inner\\\":\\\"display: none;\\\",\\\"ctrl-attrib.mapboxgl-compact:hover .mapboxgl-ctrl-attrib-inner\\\":\\\"display: block; margin-top:2px\\\",\\\"ctrl-attrib.mapboxgl-compact:hover\\\":\\\"padding: 2px 24px 2px 4px; visibility: visible; margin-top: 6px;\\\",\\\"ctrl-attrib.mapboxgl-compact::after\\\":'content: \\\"\\\"; cursor: pointer; position: absolute; background-image: url(\\\\'data:image/svg+xml;charset=utf-8,%3Csvg viewBox=\\\"0 0 20 20\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\"%3E %3Cpath fill=\\\"%23333333\\\" fill-rule=\\\"evenodd\\\" d=\\\"M4,10a6,6 0 1,0 12,0a6,6 0 1,0 -12,0 M9,7a1,1 0 1,0 2,0a1,1 0 1,0 -2,0 M9,10a1,1 0 1,1 2,0l0,3a1,1 0 1,1 -2,0\\\"/%3E %3C/svg%3E\\\\'); background-color: rgba(255, 255, 255, 0.5); width: 24px; height: 24px; box-sizing: border-box; border-radius: 12px;',\\\"ctrl-attrib.mapboxgl-compact\\\":\\\"min-height: 20px; padding: 0; margin: 10px; position: relative; background-color: #fff; border-radius: 3px 12px 12px 3px;\\\",\\\"ctrl-bottom-right > .mapboxgl-ctrl-attrib.mapboxgl-compact::after\\\":\\\"bottom: 0; right: 0\\\",\\\"ctrl-bottom-left > .mapboxgl-ctrl-attrib.mapboxgl-compact::after\\\":\\\"bottom: 0; left: 0\\\",\\\"ctrl-bottom-left .mapboxgl-ctrl\\\":\\\"margin: 0 0 10px 10px; float: left;\\\",\\\"ctrl-bottom-right .mapboxgl-ctrl\\\":\\\"margin: 0 10px 10px 0; float: right;\\\",\\\"ctrl-attrib\\\":\\\"color: rgba(0, 0, 0, 0.75); text-decoration: none; font-size: 12px\\\",\\\"ctrl-attrib a\\\":\\\"color: rgba(0, 0, 0, 0.75); text-decoration: none; font-size: 12px\\\",\\\"ctrl-attrib a:hover\\\":\\\"color: inherit; text-decoration: underline;\\\",\\\"ctrl-attrib .mapbox-improve-map\\\":\\\"font-weight: bold; margin-left: 2px;\\\",\\\"attrib-empty\\\":\\\"display: none;\\\",\\\"ctrl-logo\\\":'display:block; width: 21px; height: 21px; background-image: url(\\\\'data:image/svg+xml;charset=utf-8,%3C?xml version=\\\"1.0\\\" encoding=\\\"utf-8\\\"?%3E %3Csvg version=\\\"1.1\\\" id=\\\"Layer_1\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\" xmlns:xlink=\\\"http://www.w3.org/1999/xlink\\\" x=\\\"0px\\\" y=\\\"0px\\\" viewBox=\\\"0 0 21 21\\\" style=\\\"enable-background:new 0 0 21 21;\\\" xml:space=\\\"preserve\\\"%3E%3Cg transform=\\\"translate(0,0.01)\\\"%3E%3Cpath d=\\\"m 10.5,1.24 c -5.11,0 -9.25,4.15 -9.25,9.25 0,5.1 4.15,9.25 9.25,9.25 5.1,0 9.25,-4.15 9.25,-9.25 0,-5.11 -4.14,-9.25 -9.25,-9.25 z m 4.39,11.53 c -1.93,1.93 -4.78,2.31 -6.7,2.31 -0.7,0 -1.41,-0.05 -2.1,-0.16 0,0 -1.02,-5.64 2.14,-8.81 0.83,-0.83 1.95,-1.28 3.13,-1.28 1.27,0 2.49,0.51 3.39,1.42 1.84,1.84 1.89,4.75 0.14,6.52 z\\\" style=\\\"opacity:0.9;fill:%23ffffff;enable-background:new\\\" class=\\\"st0\\\"/%3E%3Cpath d=\\\"M 10.5,-0.01 C 4.7,-0.01 0,4.7 0,10.49 c 0,5.79 4.7,10.5 10.5,10.5 5.8,0 10.5,-4.7 10.5,-10.5 C 20.99,4.7 16.3,-0.01 10.5,-0.01 Z m 0,19.75 c -5.11,0 -9.25,-4.15 -9.25,-9.25 0,-5.1 4.14,-9.26 9.25,-9.26 5.11,0 9.25,4.15 9.25,9.25 0,5.13 -4.14,9.26 -9.25,9.26 z\\\" style=\\\"opacity:0.35;enable-background:new\\\" class=\\\"st1\\\"/%3E%3Cpath d=\\\"M 14.74,6.25 C 12.9,4.41 9.98,4.35 8.23,6.1 5.07,9.27 6.09,14.91 6.09,14.91 c 0,0 5.64,1.02 8.81,-2.14 C 16.64,11 16.59,8.09 14.74,6.25 Z m -2.27,4.09 -0.91,1.87 -0.9,-1.87 -1.86,-0.91 1.86,-0.9 0.9,-1.87 0.91,1.87 1.86,0.9 z\\\" style=\\\"opacity:0.35;enable-background:new\\\" class=\\\"st1\\\"/%3E%3Cpolygon points=\\\"11.56,12.21 10.66,10.34 8.8,9.43 10.66,8.53 11.56,6.66 12.47,8.53 14.33,9.43 12.47,10.34 \\\" style=\\\"opacity:0.9;fill:%23ffffff;enable-background:new\\\" class=\\\"st0\\\"/%3E%3C/g%3E%3C/svg%3E\\\\')'}}},13056:function(t,e,r){\\\"use strict\\\";var n=r(71828);t.exports=function(t,e){var r=t.split(\\\" \\\"),i=r[0],a=r[1],o=n.isArrayOrTypedArray(e)?n.mean(e):e,s=.5+o/100,l=1.5+o/100,u=[\\\"\\\",\\\"\\\"],c=[0,0];switch(i){case\\\"top\\\":u[0]=\\\"top\\\",c[1]=-l;break;case\\\"bottom\\\":u[0]=\\\"bottom\\\",c[1]=l}switch(a){case\\\"left\\\":u[1]=\\\"right\\\",c[0]=-s;break;case\\\"right\\\":u[1]=\\\"left\\\",c[0]=s}return{anchor:u[0]&&u[1]?u.join(\\\"-\\\"):u[0]?u[0]:u[1]?u[1]:\\\"center\\\",offset:c}}},50101:function(t,e,r){\\\"use strict\\\";var n=r(44517),i=r(71828),a=i.strTranslate,o=i.strScale,s=r(27659).AU,l=r(77922),u=r(39898),c=r(91424),f=r(63893),h=r(10481),p=\\\"mapbox\\\",d=e.constants=r(77734);function v(t){return\\\"string\\\"==typeof t&&(-1!==d.styleValuesMapbox.indexOf(t)||0===t.indexOf(\\\"mapbox://\\\"))}e.name=p,e.attr=\\\"subplot\\\",e.idRoot=p,e.idRegex=e.attrRegex=i.counterRegex(p),e.attributes={subplot:{valType:\\\"subplotid\\\",dflt:\\\"mapbox\\\",editType:\\\"calc\\\"}},e.layoutAttributes=r(23585),e.supplyLayoutDefaults=r(77882),e.plot=function(t){var e=t._fullLayout,r=t.calcdata,a=e._subplots[p];if(n.version!==d.requiredVersion)throw new Error(d.wrongVersionErrorMsg);var o=function(t,e){var r=t._fullLayout;if(\\\"\\\"===t._context.mapboxAccessToken)return\\\"\\\";for(var n=[],a=[],o=!1,s=!1,l=0;l<e.length;l++){var u=r[e[l]],c=u.accesstoken;v(u.style)&&(c?i.pushUnique(n,c):(v(u._input.style)&&(i.error(\\\"Uses Mapbox map style, but did not set an access token.\\\"),o=!0),s=!0)),c&&i.pushUnique(a,c)}if(s){var f=o?d.noAccessTokenErrorMsg:d.missingStyleErrorMsg;throw i.error(f),new Error(f)}return n.length?(n.length>1&&i.warn(d.multipleTokensErrorMsg),n[0]):(a.length&&i.log([\\\"Listed mapbox access token(s)\\\",a.join(\\\",\\\"),\\\"but did not use a Mapbox map style, ignoring token(s).\\\"].join(\\\" \\\")),\\\"\\\")}(t,a);n.accessToken=o;for(var l=0;l<a.length;l++){var u=a[l],c=s(r,p,u),f=e[u],g=f._subplot;g||(g=new h(t,u),e[u]._subplot=g),g.viewInitial||(g.viewInitial={center:i.extendFlat({},f.center),zoom:f.zoom,bearing:f.bearing,pitch:f.pitch}),g.plot(c,e,t._promises)}},e.clean=function(t,e,r,n){for(var i=n._subplots[p]||[],a=0;a<i.length;a++){var o=i[a];!e[o]&&n[o]._subplot&&n[o]._subplot.destroy()}},e.toSVG=function(t){for(var e=t._fullLayout,r=e._subplots[p],n=e._size,i=0;i<r.length;i++){var s=e[r[i]],h=s.domain,v=s._subplot.toImage(\\\"png\\\");e._glimages.append(\\\"svg:image\\\").attr({xmlns:l.svg,\\\"xlink:href\\\":v,x:n.l+n.w*h.x[0],y:n.t+n.h*(1-h.y[1]),width:n.w*(h.x[1]-h.x[0]),height:n.h*(h.y[1]-h.y[0]),preserveAspectRatio:\\\"none\\\"});var g=u.select(s._subplot.div);if(null!==g.select(\\\".mapboxgl-ctrl-logo\\\").node().offsetParent){var y=e._glimages.append(\\\"g\\\");y.attr(\\\"transform\\\",a(n.l+n.w*h.x[0]+10,n.t+n.h*(1-h.y[0])-31)),y.append(\\\"path\\\").attr(\\\"d\\\",d.mapboxLogo.path0).style({opacity:.9,fill:\\\"#ffffff\\\",\\\"enable-background\\\":\\\"new\\\"}),y.append(\\\"path\\\").attr(\\\"d\\\",d.mapboxLogo.path1).style(\\\"opacity\\\",.35).style(\\\"enable-background\\\",\\\"new\\\"),y.append(\\\"path\\\").attr(\\\"d\\\",d.mapboxLogo.path2).style(\\\"opacity\\\",.35).style(\\\"enable-background\\\",\\\"new\\\"),y.append(\\\"polygon\\\").attr(\\\"points\\\",d.mapboxLogo.polygon).style({opacity:.9,fill:\\\"#ffffff\\\",\\\"enable-background\\\":\\\"new\\\"})}var m=g.select(\\\".mapboxgl-ctrl-attrib\\\").text().replace(\\\"Improve this map\\\",\\\"\\\"),x=e._glimages.append(\\\"g\\\"),b=x.append(\\\"text\\\");b.text(m).classed(\\\"static-attribution\\\",!0).attr({\\\"font-size\\\":12,\\\"font-family\\\":\\\"Arial\\\",color:\\\"rgba(0, 0, 0, 0.75)\\\",\\\"text-anchor\\\":\\\"end\\\",\\\"data-unformatted\\\":m});var _=c.bBox(b.node()),w=n.w*(h.x[1]-h.x[0]);if(_.width>w/2){var T=m.split(\\\"|\\\").join(\\\"<br>\\\");b.text(T).attr(\\\"data-unformatted\\\",T).call(f.convertToTspans,t),_=c.bBox(b.node())}b.attr(\\\"transform\\\",a(-3,8-_.height)),x.insert(\\\"rect\\\",\\\".static-attribution\\\").attr({x:-_.width-6,y:-_.height-3,width:_.width+6,height:_.height+3,fill:\\\"rgba(255, 255, 255, 0.75)\\\"});var k=1;_.width+6>w&&(k=w/(_.width+6));var A=[n.l+n.w*h.x[1],n.t+n.h*(1-h.y[0])];x.attr(\\\"transform\\\",a(A[0],A[1])+o(k))}},e.updateFx=function(t){for(var e=t._fullLayout,r=e._subplots[p],n=0;n<r.length;n++)e[r[n]]._subplot.updateFx(e)}},67911:function(t,e,r){\\\"use strict\\\";var n=r(71828),i=r(63893).sanitizeHTML,a=r(13056),o=r(77734);function s(t,e){this.subplot=t,this.uid=t.uid+\\\"-\\\"+e,this.index=e,this.idSource=\\\"source-\\\"+this.uid,this.idLayer=o.layoutLayerPrefix+this.uid,this.sourceType=null,this.source=null,this.layerType=null,this.below=null,this.visible=!1}var l=s.prototype;function u(t){if(!t.visible)return!1;var e=t.source;if(Array.isArray(e)&&e.length>0){for(var r=0;r<e.length;r++)if(\\\"string\\\"!=typeof e[r]||0===e[r].length)return!1;return!0}return n.isPlainObject(e)||\\\"string\\\"==typeof e&&e.length>0}function c(t){var e={},r={};switch(t.type){case\\\"circle\\\":n.extendFlat(r,{\\\"circle-radius\\\":t.circle.radius,\\\"circle-color\\\":t.color,\\\"circle-opacity\\\":t.opacity});break;case\\\"line\\\":n.extendFlat(r,{\\\"line-width\\\":t.line.width,\\\"line-color\\\":t.color,\\\"line-opacity\\\":t.opacity,\\\"line-dasharray\\\":t.line.dash});break;case\\\"fill\\\":n.extendFlat(r,{\\\"fill-color\\\":t.color,\\\"fill-outline-color\\\":t.fill.outlinecolor,\\\"fill-opacity\\\":t.opacity});break;case\\\"symbol\\\":var i=t.symbol,o=a(i.textposition,i.iconsize);n.extendFlat(e,{\\\"icon-image\\\":i.icon+\\\"-15\\\",\\\"icon-size\\\":i.iconsize/10,\\\"text-field\\\":i.text,\\\"text-size\\\":i.textfont.size,\\\"text-anchor\\\":o.anchor,\\\"text-offset\\\":o.offset,\\\"symbol-placement\\\":i.placement}),n.extendFlat(r,{\\\"icon-color\\\":t.color,\\\"text-color\\\":i.textfont.color,\\\"text-opacity\\\":t.opacity});break;case\\\"raster\\\":n.extendFlat(r,{\\\"raster-fade-duration\\\":0,\\\"raster-opacity\\\":t.opacity})}return{layout:e,paint:r}}l.update=function(t){this.visible?this.needsNewImage(t)?this.updateImage(t):this.needsNewSource(t)?(this.removeLayer(),this.updateSource(t),this.updateLayer(t)):this.needsNewLayer(t)?this.updateLayer(t):this.updateStyle(t):(this.updateSource(t),this.updateLayer(t)),this.visible=u(t)},l.needsNewImage=function(t){return this.subplot.map.getSource(this.idSource)&&\\\"image\\\"===this.sourceType&&\\\"image\\\"===t.sourcetype&&(this.source!==t.source||JSON.stringify(this.coordinates)!==JSON.stringify(t.coordinates))},l.needsNewSource=function(t){return this.sourceType!==t.sourcetype||JSON.stringify(this.source)!==JSON.stringify(t.source)||this.layerType!==t.type},l.needsNewLayer=function(t){return this.layerType!==t.type||this.below!==this.subplot.belowLookup[\\\"layout-\\\"+this.index]},l.lookupBelow=function(){return this.subplot.belowLookup[\\\"layout-\\\"+this.index]},l.updateImage=function(t){this.subplot.map.getSource(this.idSource).updateImage({url:t.source,coordinates:t.coordinates});var e=this.findFollowingMapboxLayerId(this.lookupBelow());null!==e&&this.subplot.map.moveLayer(this.idLayer,e)},l.updateSource=function(t){var e=this.subplot.map;if(e.getSource(this.idSource)&&e.removeSource(this.idSource),this.sourceType=t.sourcetype,this.source=t.source,u(t)){var r=function(t){var e,r=t.sourcetype,n=t.source,a={type:r};return\\\"geojson\\\"===r?e=\\\"data\\\":\\\"vector\\\"===r?e=\\\"string\\\"==typeof n?\\\"url\\\":\\\"tiles\\\":\\\"raster\\\"===r?(e=\\\"tiles\\\",a.tileSize=256):\\\"image\\\"===r&&(e=\\\"url\\\",a.coordinates=t.coordinates),a[e]=n,t.sourceattribution&&(a.attribution=i(t.sourceattribution)),a}(t);e.addSource(this.idSource,r)}},l.findFollowingMapboxLayerId=function(t){if(\\\"traces\\\"===t)for(var e=this.subplot.getMapLayers(),r=0;r<e.length;r++){var n=e[r].id;if(\\\"string\\\"==typeof n&&0===n.indexOf(o.traceLayerPrefix)){t=n;break}}return t},l.updateLayer=function(t){var e=this.subplot,r=c(t),n=this.lookupBelow(),i=this.findFollowingMapboxLayerId(n);this.removeLayer(),u(t)&&e.addLayer({id:this.idLayer,source:this.idSource,\\\"source-layer\\\":t.sourcelayer||\\\"\\\",type:t.type,minzoom:t.minzoom,maxzoom:t.maxzoom,layout:r.layout,paint:r.paint},i),this.layerType=t.type,this.below=n},l.updateStyle=function(t){if(u(t)){var e=c(t);this.subplot.setOptions(this.idLayer,\\\"setLayoutProperty\\\",e.layout),this.subplot.setOptions(this.idLayer,\\\"setPaintProperty\\\",e.paint)}},l.removeLayer=function(){var t=this.subplot.map;t.getLayer(this.idLayer)&&t.removeLayer(this.idLayer)},l.dispose=function(){var t=this.subplot.map;t.getLayer(this.idLayer)&&t.removeLayer(this.idLayer),t.getSource(this.idSource)&&t.removeSource(this.idSource)},t.exports=function(t,e,r){var n=new s(t,e);return n.update(r),n}},23585:function(t,e,r){\\\"use strict\\\";var n=r(71828),i=r(7901).defaultLine,a=r(27670).Y,o=r(41940),s=r(82196).textposition,l=r(30962).overrideAll,u=r(44467).templatedArray,c=r(77734),f=o({});f.family.dflt=\\\"Open Sans Regular, Arial Unicode MS Regular\\\",(t.exports=l({_arrayAttrRegexps:[n.counterRegex(\\\"mapbox\\\",\\\".layers\\\",!0)],domain:a({name:\\\"mapbox\\\"}),accesstoken:{valType:\\\"string\\\",noBlank:!0,strict:!0},style:{valType:\\\"any\\\",values:c.styleValuesMapbox.concat(c.styleValuesNonMapbox),dflt:c.styleValueDflt},center:{lon:{valType:\\\"number\\\",dflt:0},lat:{valType:\\\"number\\\",dflt:0}},zoom:{valType:\\\"number\\\",dflt:1},bearing:{valType:\\\"number\\\",dflt:0},pitch:{valType:\\\"number\\\",dflt:0},bounds:{west:{valType:\\\"number\\\"},east:{valType:\\\"number\\\"},south:{valType:\\\"number\\\"},north:{valType:\\\"number\\\"}},layers:u(\\\"layer\\\",{visible:{valType:\\\"boolean\\\",dflt:!0},sourcetype:{valType:\\\"enumerated\\\",values:[\\\"geojson\\\",\\\"vector\\\",\\\"raster\\\",\\\"image\\\"],dflt:\\\"geojson\\\"},source:{valType:\\\"any\\\"},sourcelayer:{valType:\\\"string\\\",dflt:\\\"\\\"},sourceattribution:{valType:\\\"string\\\"},type:{valType:\\\"enumerated\\\",values:[\\\"circle\\\",\\\"line\\\",\\\"fill\\\",\\\"symbol\\\",\\\"raster\\\"],dflt:\\\"circle\\\"},coordinates:{valType:\\\"any\\\"},below:{valType:\\\"string\\\"},color:{valType:\\\"color\\\",dflt:i},opacity:{valType:\\\"number\\\",min:0,max:1,dflt:1},minzoom:{valType:\\\"number\\\",min:0,max:24,dflt:0},maxzoom:{valType:\\\"number\\\",min:0,max:24,dflt:24},circle:{radius:{valType:\\\"number\\\",dflt:15}},line:{width:{valType:\\\"number\\\",dflt:2},dash:{valType:\\\"data_array\\\"}},fill:{outlinecolor:{valType:\\\"color\\\",dflt:i}},symbol:{icon:{valType:\\\"string\\\",dflt:\\\"marker\\\"},iconsize:{valType:\\\"number\\\",dflt:10},text:{valType:\\\"string\\\",dflt:\\\"\\\"},placement:{valType:\\\"enumerated\\\",values:[\\\"point\\\",\\\"line\\\",\\\"line-center\\\"],dflt:\\\"point\\\"},textfont:f,textposition:n.extendFlat({},s,{arrayOk:!1})}})},\\\"plot\\\",\\\"from-root\\\")).uirevision={valType:\\\"any\\\",editType:\\\"none\\\"}},77882:function(t,e,r){\\\"use strict\\\";var n=r(71828),i=r(49119),a=r(85501),o=r(23585);function s(t,e,r,n){r(\\\"accesstoken\\\",n.accessToken),r(\\\"style\\\"),r(\\\"center.lon\\\"),r(\\\"center.lat\\\"),r(\\\"zoom\\\"),r(\\\"bearing\\\"),r(\\\"pitch\\\");var i=r(\\\"bounds.west\\\"),o=r(\\\"bounds.east\\\"),s=r(\\\"bounds.south\\\"),u=r(\\\"bounds.north\\\");void 0!==i&&void 0!==o&&void 0!==s&&void 0!==u||delete e.bounds,a(t,e,{name:\\\"layers\\\",handleItemDefaults:l}),e._input=t}function l(t,e){function r(r,i){return n.coerce(t,e,o.layers,r,i)}if(r(\\\"visible\\\")){var i,a=r(\\\"sourcetype\\\"),s=\\\"raster\\\"===a||\\\"image\\\"===a;r(\\\"source\\\"),r(\\\"sourceattribution\\\"),\\\"vector\\\"===a&&r(\\\"sourcelayer\\\"),\\\"image\\\"===a&&r(\\\"coordinates\\\"),s&&(i=\\\"raster\\\");var l=r(\\\"type\\\",i);s&&\\\"raster\\\"!==l&&(l=e.type=\\\"raster\\\",n.log(\\\"Source types *raster* and *image* must drawn *raster* layer type.\\\")),r(\\\"below\\\"),r(\\\"color\\\"),r(\\\"opacity\\\"),r(\\\"minzoom\\\"),r(\\\"maxzoom\\\"),\\\"circle\\\"===l&&r(\\\"circle.radius\\\"),\\\"line\\\"===l&&(r(\\\"line.width\\\"),r(\\\"line.dash\\\")),\\\"fill\\\"===l&&r(\\\"fill.outlinecolor\\\"),\\\"symbol\\\"===l&&(r(\\\"symbol.icon\\\"),r(\\\"symbol.iconsize\\\"),r(\\\"symbol.text\\\"),n.coerceFont(r,\\\"symbol.textfont\\\"),r(\\\"symbol.textposition\\\"),r(\\\"symbol.placement\\\"))}}t.exports=function(t,e,r){i(t,e,r,{type:\\\"mapbox\\\",attributes:o,handleDefaults:s,partition:\\\"y\\\",accessToken:e._mapboxAccessToken})}},10481:function(t,e,r){\\\"use strict\\\";var n=r(44517),i=r(71828),a=r(41327),o=r(73972),s=r(89298),l=r(28569),u=r(30211),c=r(64505),f=c.drawMode,h=c.selectMode,p=r(47322).prepSelect,d=r(47322).clearOutline,v=r(47322).clearSelectionsCache,g=r(47322).selectOnClick,y=r(77734),m=r(67911);function x(t,e){this.id=e,this.gd=t;var r=t._fullLayout,n=t._context;this.container=r._glcontainer.node(),this.isStatic=n.staticPlot,this.uid=r._uid+\\\"-\\\"+this.id,this.div=null,this.xaxis=null,this.yaxis=null,this.createFramework(r),this.map=null,this.accessToken=null,this.styleObj=null,this.traceHash={},this.layerList=[],this.belowLookup={},this.dragging=!1,this.wheeling=!1}var b=x.prototype;b.plot=function(t,e,r){var n,i=this,a=e[i.id];i.map&&a.accesstoken!==i.accessToken&&(i.map.remove(),i.map=null,i.styleObj=null,i.traceHash={},i.layerList=[]),n=i.map?new Promise((function(r,n){i.updateMap(t,e,r,n)})):new Promise((function(r,n){i.createMap(t,e,r,n)})),r.push(n)},b.createMap=function(t,e,r,i){var o=this,s=e[o.id],l=o.styleObj=w(s.style);o.accessToken=s.accesstoken;var u=s.bounds,c=u?[[u.west,u.south],[u.east,u.north]]:null,f=o.map=new n.Map({container:o.div,style:l.style,center:k(s.center),zoom:s.zoom,bearing:s.bearing,pitch:s.pitch,maxBounds:c,interactive:!o.isStatic,preserveDrawingBuffer:o.isStatic,doubleClickZoom:!1,boxZoom:!1,attributionControl:!1}).addControl(new n.AttributionControl({compact:!0}));f._canvas.style.left=\\\"0px\\\",f._canvas.style.top=\\\"0px\\\",o.rejectOnError(i),o.isStatic||o.initFx(t,e);var h=[];h.push(new Promise((function(t){f.once(\\\"load\\\",t)}))),h=h.concat(a.fetchTraceGeoData(t)),Promise.all(h).then((function(){o.fillBelowLookup(t,e),o.updateData(t),o.updateLayout(e),o.resolveOnRender(r)})).catch(i)},b.updateMap=function(t,e,r,n){var i=this,o=i.map,s=e[this.id];i.rejectOnError(n);var l=[],u=w(s.style);JSON.stringify(i.styleObj)!==JSON.stringify(u)&&(i.styleObj=u,o.setStyle(u.style),i.traceHash={},l.push(new Promise((function(t){o.once(\\\"styledata\\\",t)})))),l=l.concat(a.fetchTraceGeoData(t)),Promise.all(l).then((function(){i.fillBelowLookup(t,e),i.updateData(t),i.updateLayout(e),i.resolveOnRender(r)})).catch(n)},b.fillBelowLookup=function(t,e){var r,n,i=e[this.id].layers,a=this.belowLookup={},o=!1;for(r=0;r<t.length;r++){var s=t[r][0].trace,l=s._module;\\\"string\\\"==typeof s.below?n=s.below:l.getBelow&&(n=l.getBelow(s,this)),\\\"\\\"===n&&(o=!0),a[\\\"trace-\\\"+s.uid]=n||\\\"\\\"}for(r=0;r<i.length;r++){var u=i[r];n=\\\"string\\\"==typeof u.below?u.below:o?\\\"traces\\\":\\\"\\\",a[\\\"layout-\\\"+r]=n}var c,f,h={};for(c in a)h[n=a[c]]?h[n].push(c):h[n]=[c];for(n in h){var p=h[n];if(p.length>1)for(r=0;r<p.length;r++)0===(c=p[r]).indexOf(\\\"trace-\\\")?(f=c.split(\\\"trace-\\\")[1],this.traceHash[f]&&(this.traceHash[f].below=null)):0===c.indexOf(\\\"layout-\\\")&&(f=c.split(\\\"layout-\\\")[1],this.layerList[f]&&(this.layerList[f].below=null))}};var _={choroplethmapbox:0,densitymapbox:1,scattermapbox:2};function w(t){var e={};return i.isPlainObject(t)?(e.id=t.id,e.style=t):\\\"string\\\"==typeof t?(e.id=t,-1!==y.styleValuesMapbox.indexOf(t)?e.style=T(t):y.stylesNonMapbox[t]?e.style=y.stylesNonMapbox[t]:e.style=t):(e.id=y.styleValueDflt,e.style=T(y.styleValueDflt)),e.transition={duration:0,delay:0},e}function T(t){return y.styleUrlPrefix+t+\\\"-\\\"+y.styleUrlSuffix}function k(t){return[t.lon,t.lat]}b.updateData=function(t){var e,r,n,i,a=this.traceHash,o=t.slice().sort((function(t,e){return _[t[0].trace.type]-_[e[0].trace.type]}));for(n=0;n<o.length;n++){var s=o[n],l=!1;(e=a[(r=s[0].trace).uid])&&(e.type===r.type?(e.update(s),l=!0):e.dispose()),!l&&r._module&&(a[r.uid]=r._module.plot(this,s))}var u=Object.keys(a);t:for(n=0;n<u.length;n++){var c=u[n];for(i=0;i<t.length;i++)if(c===(r=t[i][0].trace).uid)continue t;(e=a[c]).dispose(),delete a[c]}},b.updateLayout=function(t){var e=this.map,r=t[this.id];this.dragging||this.wheeling||(e.setCenter(k(r.center)),e.setZoom(r.zoom),e.setBearing(r.bearing),e.setPitch(r.pitch)),this.updateLayers(t),this.updateFramework(t),this.updateFx(t),this.map.resize(),this.gd._context._scrollZoom.mapbox?e.scrollZoom.enable():e.scrollZoom.disable()},b.resolveOnRender=function(t){var e=this.map;e.on(\\\"render\\\",(function r(){e.loaded()&&(e.off(\\\"render\\\",r),setTimeout(t,10))}))},b.rejectOnError=function(t){var e=this.map;function r(){t(new Error(y.mapOnErrorMsg))}e.once(\\\"error\\\",r),e.once(\\\"style.error\\\",r),e.once(\\\"source.error\\\",r),e.once(\\\"tile.error\\\",r),e.once(\\\"layer.error\\\",r)},b.createFramework=function(t){var e=this,r=e.div=document.createElement(\\\"div\\\");r.id=e.uid,r.style.position=\\\"absolute\\\",e.container.appendChild(r),e.xaxis={_id:\\\"x\\\",c2p:function(t){return e.project(t).x}},e.yaxis={_id:\\\"y\\\",c2p:function(t){return e.project(t).y}},e.updateFramework(t),e.mockAxis={type:\\\"linear\\\",showexponent:\\\"all\\\",exponentformat:\\\"B\\\"},s.setConvert(e.mockAxis,t)},b.initFx=function(t,e){var r=this,n=r.gd,i=r.map;function a(){u.loneUnhover(e._hoverlayer)}function s(){var t=r.getView();n.emit(\\\"plotly_relayouting\\\",r.getViewEditsWithDerived(t))}i.on(\\\"moveend\\\",(function(t){if(r.map){var e=n._fullLayout;if(t.originalEvent||r.wheeling){var i=e[r.id];o.call(\\\"_storeDirectGUIEdit\\\",n.layout,e._preGUI,r.getViewEdits(i));var a=r.getView();i._input.center=i.center=a.center,i._input.zoom=i.zoom=a.zoom,i._input.bearing=i.bearing=a.bearing,i._input.pitch=i.pitch=a.pitch,n.emit(\\\"plotly_relayout\\\",r.getViewEditsWithDerived(a))}t.originalEvent&&\\\"mouseup\\\"===t.originalEvent.type?r.dragging=!1:r.wheeling&&(r.wheeling=!1),e._rehover&&e._rehover()}})),i.on(\\\"wheel\\\",(function(){r.wheeling=!0})),i.on(\\\"mousemove\\\",(function(t){var e=r.div.getBoundingClientRect(),a=[t.originalEvent.offsetX,t.originalEvent.offsetY];t.target.getBoundingClientRect=function(){return e},r.xaxis.p2c=function(){return i.unproject(a).lng},r.yaxis.p2c=function(){return i.unproject(a).lat},n._fullLayout._rehover=function(){n._fullLayout._hoversubplot===r.id&&n._fullLayout[r.id]&&u.hover(n,t,r.id)},u.hover(n,t,r.id),n._fullLayout._hoversubplot=r.id})),i.on(\\\"dragstart\\\",(function(){r.dragging=!0,a()})),i.on(\\\"zoomstart\\\",a),i.on(\\\"mouseout\\\",(function(){n._fullLayout._hoversubplot=null})),i.on(\\\"drag\\\",s),i.on(\\\"zoom\\\",s),i.on(\\\"dblclick\\\",(function(){var t=n._fullLayout[r.id];o.call(\\\"_storeDirectGUIEdit\\\",n.layout,n._fullLayout._preGUI,r.getViewEdits(t));var e=r.viewInitial;i.setCenter(k(e.center)),i.setZoom(e.zoom),i.setBearing(e.bearing),i.setPitch(e.pitch);var a=r.getView();t._input.center=t.center=a.center,t._input.zoom=t.zoom=a.zoom,t._input.bearing=t.bearing=a.bearing,t._input.pitch=t.pitch=a.pitch,n.emit(\\\"plotly_doubleclick\\\",null),n.emit(\\\"plotly_relayout\\\",r.getViewEditsWithDerived(a))})),r.clearOutline=function(){v(r.dragOptions),d(r.dragOptions.gd)},r.onClickInPanFn=function(t){return function(e){var i=n._fullLayout.clickmode;i.indexOf(\\\"select\\\")>-1&&g(e.originalEvent,n,[r.xaxis],[r.yaxis],r.id,t),i.indexOf(\\\"event\\\")>-1&&u.click(n,e.originalEvent)}}},b.updateFx=function(t){var e=this,r=e.map,n=e.gd;if(!e.isStatic){var a,o=t.dragmode;a=function(t,r){r.isRect?(t.range={})[e.id]=[u([r.xmin,r.ymin]),u([r.xmax,r.ymax])]:(t.lassoPoints={})[e.id]=r.map(u)};var s=e.dragOptions;e.dragOptions=i.extendDeep(s||{},{dragmode:t.dragmode,element:e.div,gd:n,plotinfo:{id:e.id,domain:t[e.id].domain,xaxis:e.xaxis,yaxis:e.yaxis,fillRangeItems:a},xaxes:[e.xaxis],yaxes:[e.yaxis],subplot:e.id}),r.off(\\\"click\\\",e.onClickInPanHandler),h(o)||f(o)?(r.dragPan.disable(),r.on(\\\"zoomstart\\\",e.clearOutline),e.dragOptions.prepFn=function(t,r,n){p(t,r,n,e.dragOptions,o)},l.init(e.dragOptions)):(r.dragPan.enable(),r.off(\\\"zoomstart\\\",e.clearOutline),e.div.onmousedown=null,e.div.ontouchstart=null,e.div.removeEventListener(\\\"touchstart\\\",e.div._ontouchstart),e.onClickInPanHandler=e.onClickInPanFn(e.dragOptions),r.on(\\\"click\\\",e.onClickInPanHandler))}function u(t){var r=e.map.unproject(t);return[r.lng,r.lat]}},b.updateFramework=function(t){var e=t[this.id].domain,r=t._size,n=this.div.style;n.width=r.w*(e.x[1]-e.x[0])+\\\"px\\\",n.height=r.h*(e.y[1]-e.y[0])+\\\"px\\\",n.left=r.l+e.x[0]*r.w+\\\"px\\\",n.top=r.t+(1-e.y[1])*r.h+\\\"px\\\",this.xaxis._offset=r.l+e.x[0]*r.w,this.xaxis._length=r.w*(e.x[1]-e.x[0]),this.yaxis._offset=r.t+(1-e.y[1])*r.h,this.yaxis._length=r.h*(e.y[1]-e.y[0])},b.updateLayers=function(t){var e,r=t[this.id].layers,n=this.layerList;if(r.length!==n.length){for(e=0;e<n.length;e++)n[e].dispose();for(n=this.layerList=[],e=0;e<r.length;e++)n.push(m(this,e,r[e]))}else for(e=0;e<r.length;e++)n[e].update(r[e])},b.destroy=function(){this.map&&(this.map.remove(),this.map=null,this.container.removeChild(this.div))},b.toImage=function(){return this.map.stop(),this.map.getCanvas().toDataURL()},b.setOptions=function(t,e,r){for(var n in r)this.map[e](t,n,r[n])},b.getMapLayers=function(){return this.map.getStyle().layers},b.addLayer=function(t,e){var r=this.map;if(\\\"string\\\"==typeof e){if(\\\"\\\"===e)return void r.addLayer(t,e);for(var n=this.getMapLayers(),a=0;a<n.length;a++)if(e===n[a].id)return void r.addLayer(t,e);i.warn([\\\"Trying to add layer with *below* value\\\",e,\\\"referencing a layer that does not exist\\\",\\\"or that does not yet exist.\\\"].join(\\\" \\\"))}r.addLayer(t)},b.project=function(t){return this.map.project(new n.LngLat(t[0],t[1]))},b.getView=function(){var t=this.map,e=t.getCenter(),r={lon:e.lng,lat:e.lat},n=t.getCanvas(),i=parseInt(n.style.width),a=parseInt(n.style.height);return{center:r,zoom:t.getZoom(),bearing:t.getBearing(),pitch:t.getPitch(),_derived:{coordinates:[t.unproject([0,0]).toArray(),t.unproject([i,0]).toArray(),t.unproject([i,a]).toArray(),t.unproject([0,a]).toArray()]}}},b.getViewEdits=function(t){for(var e=this.id,r=[\\\"center\\\",\\\"zoom\\\",\\\"bearing\\\",\\\"pitch\\\"],n={},i=0;i<r.length;i++){var a=r[i];n[e+\\\".\\\"+a]=t[a]}return n},b.getViewEditsWithDerived=function(t){var e=this.id,r=this.getViewEdits(t);return r[e+\\\"._derived\\\"]=t._derived,r},t.exports=x},35025:function(t){\\\"use strict\\\";t.exports=function(t){var e=t.editType;return{t:{valType:\\\"number\\\",dflt:0,editType:e},r:{valType:\\\"number\\\",dflt:0,editType:e},b:{valType:\\\"number\\\",dflt:0,editType:e},l:{valType:\\\"number\\\",dflt:0,editType:e},editType:e}}},74875:function(t,e,r){\\\"use strict\\\";var n=r(39898),i=r(84096).Dq,a=r(60721).FF,o=r(92770),s=r(73972),l=r(86281),u=r(44467),c=r(71828),f=r(7901),h=r(50606).BADNUM,p=r(41675),d=r(51873).clearOutline,v=r(21479),g=r(85594),y=r(31391),m=r(27659).a0,x=c.relinkPrivateKeys,b=c._,_=t.exports={};c.extendFlat(_,s),_.attributes=r(9012),_.attributes.type.values=_.allTypes,_.fontAttrs=r(41940),_.layoutAttributes=r(10820),_.fontWeight=\\\"normal\\\";var w=_.transformsRegistry,T=r(31137);_.executeAPICommand=T.executeAPICommand,_.computeAPICommandBindings=T.computeAPICommandBindings,_.manageCommandObserver=T.manageCommandObserver,_.hasSimpleAPICommandBindings=T.hasSimpleAPICommandBindings,_.redrawText=function(t){return t=c.getGraphDiv(t),new Promise((function(e){setTimeout((function(){t._fullLayout&&(s.getComponentMethod(\\\"annotations\\\",\\\"draw\\\")(t),s.getComponentMethod(\\\"legend\\\",\\\"draw\\\")(t),s.getComponentMethod(\\\"colorbar\\\",\\\"draw\\\")(t),e(_.previousPromises(t)))}),300)}))},_.resize=function(t){var e;t=c.getGraphDiv(t);var r=new Promise((function(r,n){t&&!c.isHidden(t)||n(new Error(\\\"Resize must be passed a displayed plot div element.\\\")),t._redrawTimer&&clearTimeout(t._redrawTimer),t._resolveResize&&(e=t._resolveResize),t._resolveResize=r,t._redrawTimer=setTimeout((function(){if(!t.layout||t.layout.width&&t.layout.height||c.isHidden(t))r(t);else{delete t.layout.width,delete t.layout.height;var e=t.changed;t.autoplay=!0,s.call(\\\"relayout\\\",t,{autosize:!0}).then((function(){t.changed=e,t._resolveResize===r&&(delete t._resolveResize,r(t))}))}}),100)}));return e&&e(r),r},_.previousPromises=function(t){if((t._promises||[]).length)return Promise.all(t._promises).then((function(){t._promises=[]}))},_.addLinks=function(t){if(t._context.showLink||t._context.showSources){var e=t._fullLayout,r=c.ensureSingle(e._paper,\\\"text\\\",\\\"js-plot-link-container\\\",(function(t){t.style({\\\"font-family\\\":'\\\"Open Sans\\\", Arial, sans-serif',\\\"font-size\\\":\\\"12px\\\",fill:f.defaultLine,\\\"pointer-events\\\":\\\"all\\\"}).each((function(){var t=n.select(this);t.append(\\\"tspan\\\").classed(\\\"js-link-to-tool\\\",!0),t.append(\\\"tspan\\\").classed(\\\"js-link-spacer\\\",!0),t.append(\\\"tspan\\\").classed(\\\"js-sourcelinks\\\",!0)}))})),i=r.node(),a={y:e._paper.attr(\\\"height\\\")-9};document.body.contains(i)&&i.getComputedTextLength()>=e.width-20?(a[\\\"text-anchor\\\"]=\\\"start\\\",a.x=5):(a[\\\"text-anchor\\\"]=\\\"end\\\",a.x=e._paper.attr(\\\"width\\\")-7),r.attr(a);var o=r.select(\\\".js-link-to-tool\\\"),s=r.select(\\\".js-link-spacer\\\"),l=r.select(\\\".js-sourcelinks\\\");t._context.showSources&&t._context.showSources(t),t._context.showLink&&function(t,e){e.text(\\\"\\\");var r=e.append(\\\"a\\\").attr({\\\"xlink:xlink:href\\\":\\\"#\\\",class:\\\"link--impt link--embedview\\\",\\\"font-weight\\\":\\\"bold\\\"}).text(t._context.linkText+\\\" \\\"+String.fromCharCode(187));if(t._context.sendData)r.on(\\\"click\\\",(function(){_.sendDataToCloud(t)}));else{var n=window.location.pathname.split(\\\"/\\\"),i=window.location.search;r.attr({\\\"xlink:xlink:show\\\":\\\"new\\\",\\\"xlink:xlink:href\\\":\\\"/\\\"+n[2].split(\\\".\\\")[0]+\\\"/\\\"+n[1]+i})}}(t,o),s.text(o.text()&&l.text()?\\\" - \\\":\\\"\\\")}},_.sendDataToCloud=function(t){var e=(window.PLOTLYENV||{}).BASE_URL||t._context.plotlyServerURL;if(e){t.emit(\\\"plotly_beforeexport\\\");var r=n.select(t).append(\\\"div\\\").attr(\\\"id\\\",\\\"hiddenform\\\").style(\\\"display\\\",\\\"none\\\"),i=r.append(\\\"form\\\").attr({action:e+\\\"/external\\\",method:\\\"post\\\",target:\\\"_blank\\\"});return i.append(\\\"input\\\").attr({type:\\\"text\\\",name:\\\"data\\\"}).node().value=_.graphJson(t,!1,\\\"keepdata\\\"),i.node().submit(),r.remove(),t.emit(\\\"plotly_afterexport\\\"),!1}};var k=[\\\"days\\\",\\\"shortDays\\\",\\\"months\\\",\\\"shortMonths\\\",\\\"periods\\\",\\\"dateTime\\\",\\\"date\\\",\\\"time\\\",\\\"decimal\\\",\\\"thousands\\\",\\\"grouping\\\",\\\"currency\\\"],A=[\\\"year\\\",\\\"month\\\",\\\"dayMonth\\\",\\\"dayMonthYear\\\"];function M(t,e){var r=t._context.locale;r||(r=\\\"en-US\\\");var n=!1,i={};function a(t){for(var r=!0,a=0;a<e.length;a++){var o=e[a];i[o]||(t[o]?i[o]=t[o]:r=!1)}r&&(n=!0)}for(var o=0;o<2;o++){for(var l=t._context.locales,u=0;u<2;u++){var c=(l[r]||{}).format;if(c&&(a(c),n))break;l=s.localeRegistry}var f=r.split(\\\"-\\\")[0];if(n||f===r)break;r=f}return n||a(s.localeRegistry.en.format),i}function S(t,e){var r={_fullLayout:e},n=\\\"x\\\"===t._id.charAt(0),i=t._mainAxis._anchorAxis,a=\\\"\\\",o=\\\"\\\",s=\\\"\\\";if(i&&(s=i._mainAxis._id,a=n?t._id+s:s+t._id),!a||!e._plots[a]){a=\\\"\\\";for(var l=t._counterAxes,u=0;u<l.length;u++){var c=l[u],f=n?t._id+c:c+t._id;o||(o=f);var h=p.getFromId(r,c);if(s&&h.overlaying===s){a=f;break}}}return a||o}function E(t){var e=t.transforms;if(Array.isArray(e)&&e.length)for(var r=0;r<e.length;r++){var n=e[r],i=n._module||w[n.type];if(i&&i.makesData)return!0}return!1}function L(t,e,r,n){for(var i=t.transforms,a=[t],o=0;o<i.length;o++){var s=i[o],l=w[s.type];l&&l.transform&&(a=l.transform(a,{transform:s,fullTrace:t,fullData:e,layout:r,fullLayout:n,transformIndex:o}))}return a}function C(t){return\\\"string\\\"==typeof t&&\\\"px\\\"===t.substr(t.length-2)&&parseFloat(t)}function P(t){var e=t.margin;if(!t._size){var r=t._size={l:Math.round(e.l),r:Math.round(e.r),t:Math.round(e.t),b:Math.round(e.b),p:Math.round(e.pad)};r.w=Math.round(t.width)-r.l-r.r,r.h=Math.round(t.height)-r.t-r.b}t._pushmargin||(t._pushmargin={}),t._pushmarginIds||(t._pushmarginIds={}),t._reservedMargin||(t._reservedMargin={})}_.supplyDefaults=function(t,e){var r=e&&e.skipUpdateCalc,n=t._fullLayout||{};if(n._skipDefaults)delete n._skipDefaults;else{var o,l=t._fullLayout={},u=t.layout||{},f=t._fullData||[],h=t._fullData=[],p=t.data||[],v=t.calcdata||[],g=t._context||{};t._transitionData||_.createTransitionData(t),l._dfltTitle={plot:b(t,\\\"Click to enter Plot title\\\"),x:b(t,\\\"Click to enter X axis title\\\"),y:b(t,\\\"Click to enter Y axis title\\\"),colorbar:b(t,\\\"Click to enter Colorscale title\\\"),annotation:b(t,\\\"new text\\\")},l._traceWord=b(t,\\\"trace\\\");var y=M(t,k);if(l._mapboxAccessToken=g.mapboxAccessToken,n._initialAutoSizeIsDone){var m=n.width,w=n.height;_.supplyLayoutGlobalDefaults(u,l,y),u.width||(l.width=m),u.height||(l.height=w),_.sanitizeMargins(l)}else{_.supplyLayoutGlobalDefaults(u,l,y);var T=!u.width||!u.height,S=l.autosize,E=g.autosizable;T&&(S||E)?_.plotAutoSize(t,u,l):T&&_.sanitizeMargins(l),!S&&T&&(u.width=l.width,u.height=l.height)}l._d3locale=function(t,e){return t.decimal=e.charAt(0),t.thousands=e.charAt(1),{numberFormat:function(e){try{e=a(t).format(c.adjustFormat(e))}catch(t){return c.warnBadFormat(e),c.noFormat}return e},timeFormat:i(t).utcFormat}}(y,l.separators),l._extraFormat=M(t,A),l._initialAutoSizeIsDone=!0,l._dataLength=p.length,l._modules=[],l._visibleModules=[],l._basePlotModules=[];var L=l._subplots=function(){var t,e,r=s.collectableSubplotTypes,n={};if(!r){r=[];var i=s.subplotsRegistry;for(var a in i){var o=i[a].attr;if(o&&(r.push(a),Array.isArray(o)))for(e=0;e<o.length;e++)c.pushUnique(r,o[e])}}for(t=0;t<r.length;t++)n[r[t]]=[];return n}(),C=l._splomAxes={x:{},y:{}},O=l._splomSubplots={};l._splomGridDflt={},l._scatterStackOpts={},l._firstScatter={},l._alignmentOpts={},l._colorAxes={},l._requestRangeslider={},l._traceUids=function(t,e){var r,n,i=e.length,a=[];for(r=0;r<t.length;r++){var o=t[r]._fullInput;o!==n&&a.push(o),n=o}var s=a.length,l=new Array(i),u={};function f(t,e){l[e]=t,u[t]=1}function h(t,e){if(t&&\\\"string\\\"==typeof t&&!u[t])return f(t,e),!0}for(r=0;r<i;r++){var p=e[r].uid;\\\"number\\\"==typeof p&&(p=String(p)),h(p,r)||r<s&&h(a[r].uid,r)||f(c.randstr(u),r)}return l}(f,p),l._globalTransforms=(t._context||{}).globalTransforms,_.supplyDataDefaults(p,h,u,l);var I=Object.keys(C.x),D=Object.keys(C.y);if(I.length>1&&D.length>1){for(s.getComponentMethod(\\\"grid\\\",\\\"sizeDefaults\\\")(u,l),o=0;o<I.length;o++)c.pushUnique(L.xaxis,I[o]);for(o=0;o<D.length;o++)c.pushUnique(L.yaxis,D[o]);for(var z in O)c.pushUnique(L.cartesian,z)}if(l._has=_._hasPlotType.bind(l),f.length===h.length)for(o=0;o<h.length;o++)x(h[o],f[o]);_.supplyLayoutModuleDefaults(u,l,h,t._transitionData);var R=l._visibleModules,F=[];for(o=0;o<R.length;o++){var B=R[o].crossTraceDefaults;B&&c.pushUnique(F,B)}for(o=0;o<F.length;o++)F[o](h,l);l._hasOnlyLargeSploms=1===l._basePlotModules.length&&\\\"splom\\\"===l._basePlotModules[0].name&&I.length>15&&D.length>15&&0===l.shapes.length&&0===l.images.length,_.linkSubplots(h,l,f,n),_.cleanPlot(h,l,f,n);var N=!(!n._has||!n._has(\\\"gl2d\\\")),j=!(!l._has||!l._has(\\\"gl2d\\\")),U=!(!n._has||!n._has(\\\"cartesian\\\"))||N,V=!(!l._has||!l._has(\\\"cartesian\\\"))||j;U&&!V?n._bgLayer.remove():V&&!U&&(l._shouldCreateBgLayer=!0),n._zoomlayer&&!t._dragging&&d({_fullLayout:n}),function(t,e){var r,n=[];e.meta&&(r=e._meta={meta:e.meta,layout:{meta:e.meta}});for(var i=0;i<t.length;i++){var a=t[i];a.meta?n[a.index]=a._meta={meta:a.meta}:e.meta&&(a._meta={meta:e.meta}),e.meta&&(a._meta.layout={meta:e.meta})}n.length&&(r||(r=e._meta={}),r.data=n)}(h,l),x(l,n),s.getComponentMethod(\\\"colorscale\\\",\\\"crossTraceDefaults\\\")(h,l),l._preGUI||(l._preGUI={}),l._tracePreGUI||(l._tracePreGUI={});var H,q=l._tracePreGUI,G={};for(H in q)G[H]=\\\"old\\\";for(o=0;o<h.length;o++)G[H=h[o]._fullInput.uid]||(q[H]={}),G[H]=\\\"new\\\";for(H in G)\\\"old\\\"===G[H]&&delete q[H];P(l),s.getComponentMethod(\\\"rangeslider\\\",\\\"makeData\\\")(l),r||v.length!==h.length||_.supplyDefaultsUpdateCalc(v,h)}},_.supplyDefaultsUpdateCalc=function(t,e){for(var r=0;r<e.length;r++){var n=e[r],i=(t[r]||[])[0];if(i&&i.trace){var a=i.trace;if(a._hasCalcTransform){var o,s,l,u=a._arrayAttrs;for(o=0;o<u.length;o++)s=u[o],l=c.nestedProperty(a,s).get().slice(),c.nestedProperty(n,s).set(l)}i.trace=n}}},_.createTransitionData=function(t){t._transitionData||(t._transitionData={}),t._transitionData._frames||(t._transitionData._frames=[]),t._transitionData._frameHash||(t._transitionData._frameHash={}),t._transitionData._counter||(t._transitionData._counter=0),t._transitionData._interruptCallbacks||(t._transitionData._interruptCallbacks=[])},_._hasPlotType=function(t){var e,r=this._basePlotModules||[];for(e=0;e<r.length;e++)if(r[e].name===t)return!0;var n=this._modules||[];for(e=0;e<n.length;e++){var i=n[e].name;if(i===t)return!0;var a=s.modules[i];if(a&&a.categories[t])return!0}return!1},_.cleanPlot=function(t,e,r,n){var i,a,o=n._basePlotModules||[];for(i=0;i<o.length;i++){var s=o[i];s.clean&&s.clean(t,e,r,n)}var l=n._has&&n._has(\\\"gl\\\"),u=e._has&&e._has(\\\"gl\\\");l&&!u&&void 0!==n._glcontainer&&(n._glcontainer.selectAll(\\\".gl-canvas\\\").remove(),n._glcontainer.selectAll(\\\".no-webgl\\\").remove(),n._glcanvas=null);var c=!!n._infolayer;t:for(i=0;i<r.length;i++){var f=r[i].uid;for(a=0;a<t.length;a++)if(f===t[a].uid)continue t;c&&n._infolayer.select(\\\".cb\\\"+f).remove()}},_.linkSubplots=function(t,e,r,n){var i,a,o=n._plots||{},l=e._plots={},u=e._subplots,f={_fullData:t,_fullLayout:e},h=u.cartesian.concat(u.gl2d||[]);for(i=0;i<h.length;i++){var d,v=h[i],g=o[v],y=p.getFromId(f,v,\\\"x\\\"),m=p.getFromId(f,v,\\\"y\\\");for(g?d=l[v]=g:(d=l[v]={}).id=v,y._counterAxes.push(m._id),m._counterAxes.push(y._id),y._subplotsWith.push(v),m._subplotsWith.push(v),d.xaxis=y,d.yaxis=m,d._hasClipOnAxisFalse=!1,a=0;a<t.length;a++){var x=t[a];if(x.xaxis===d.xaxis._id&&x.yaxis===d.yaxis._id&&!1===x.cliponaxis){d._hasClipOnAxisFalse=!0;break}}}var b,_=p.list(f,null,!0);for(i=0;i<_.length;i++){var w=null;(b=_[i]).overlaying&&(w=p.getFromId(f,b.overlaying))&&w.overlaying&&(b.overlaying=!1,w=null),b._mainAxis=w||b,w&&(b.domain=w.domain.slice()),b._anchorAxis=\\\"free\\\"===b.anchor?null:p.getFromId(f,b.anchor)}for(i=0;i<_.length;i++)if((b=_[i])._counterAxes.sort(p.idSort),b._subplotsWith.sort(c.subplotSort),b._mainSubplot=S(b,e),b._counterAxes.length&&(b.spikemode&&-1!==b.spikemode.indexOf(\\\"across\\\")||b.automargin&&b.mirror&&\\\"free\\\"!==b.anchor||s.getComponentMethod(\\\"rangeslider\\\",\\\"isVisible\\\")(b))){var T=1,k=0;for(a=0;a<b._counterAxes.length;a++){var A=p.getFromId(f,b._counterAxes[a]);T=Math.min(T,A.domain[0]),k=Math.max(k,A.domain[1])}T<k&&(b._counterDomainMin=T,b._counterDomainMax=k)}},_.clearExpandedTraceDefaultColors=function(t){var e,r,n;for(r=[],(e=t._module._colorAttrs)||(t._module._colorAttrs=e=[],l.crawl(t._module.attributes,(function(t,n,i,a){r[a]=n,r.length=a+1,\\\"color\\\"===t.valType&&void 0===t.dflt&&e.push(r.join(\\\".\\\"))}))),n=0;n<e.length;n++)c.nestedProperty(t,\\\"_input.\\\"+e[n]).get()||c.nestedProperty(t,e[n]).set(null)},_.supplyDataDefaults=function(t,e,r,n){var i,a,o,l=n._modules,f=n._visibleModules,h=n._basePlotModules,p=0,d=0;function v(t){e.push(t);var r=t._module;r&&(c.pushUnique(l,r),!0===t.visible&&c.pushUnique(f,r),c.pushUnique(h,t._module.basePlotModule),p++,!1!==t._input.visible&&d++)}n._transformModules=[];var g={},y=[],m=(r.template||{}).data||{},b=u.traceTemplater(m);for(i=0;i<t.length;i++){if(o=t[i],(a=b.newTrace(o)).uid=n._traceUids[i],_.supplyTraceDefaults(o,a,d,n,i),a.index=i,a._input=o,a._expandedIndex=p,a.transforms&&a.transforms.length)for(var w=!1!==o.visible&&!1===a.visible,T=L(a,e,r,n),k=0;k<T.length;k++){var A=T[k],M={_template:a._template,type:a.type,uid:a.uid+k};w&&!1===A.visible&&delete A.visible,_.supplyTraceDefaults(A,M,p,n,i),x(M,A),M.index=i,M._input=o,M._fullInput=a,M._expandedIndex=p,M._expandedInput=A,v(M)}else a._fullInput=a,a._expandedInput=a,v(a);s.traceIs(a,\\\"carpetAxis\\\")&&(g[a.carpet]=a),s.traceIs(a,\\\"carpetDependent\\\")&&y.push(i)}for(i=0;i<y.length;i++)if((a=e[y[i]]).visible){var S=g[a.carpet];a._carpet=S,S&&S.visible?(a.xaxis=S.xaxis,a.yaxis=S.yaxis):a.visible=!1}},_.supplyAnimationDefaults=function(t){var e;t=t||{};var r={};function n(e,n){return c.coerce(t||{},r,g,e,n)}if(n(\\\"mode\\\"),n(\\\"direction\\\"),n(\\\"fromcurrent\\\"),Array.isArray(t.frame))for(r.frame=[],e=0;e<t.frame.length;e++)r.frame[e]=_.supplyAnimationFrameDefaults(t.frame[e]||{});else r.frame=_.supplyAnimationFrameDefaults(t.frame||{});if(Array.isArray(t.transition))for(r.transition=[],e=0;e<t.transition.length;e++)r.transition[e]=_.supplyAnimationTransitionDefaults(t.transition[e]||{});else r.transition=_.supplyAnimationTransitionDefaults(t.transition||{});return r},_.supplyAnimationFrameDefaults=function(t){var e={};function r(r,n){return c.coerce(t||{},e,g.frame,r,n)}return r(\\\"duration\\\"),r(\\\"redraw\\\"),e},_.supplyAnimationTransitionDefaults=function(t){var e={};function r(r,n){return c.coerce(t||{},e,g.transition,r,n)}return r(\\\"duration\\\"),r(\\\"easing\\\"),e},_.supplyFrameDefaults=function(t){var e={};function r(r,n){return c.coerce(t,e,y,r,n)}return r(\\\"group\\\"),r(\\\"name\\\"),r(\\\"traces\\\"),r(\\\"baseframe\\\"),r(\\\"data\\\"),r(\\\"layout\\\"),e},_.supplyTraceDefaults=function(t,e,r,n,i){var a,o=n.colorway||f.defaults,l=o[r%o.length];function u(r,n){return c.coerce(t,e,_.attributes,r,n)}var h=u(\\\"visible\\\");u(\\\"type\\\"),u(\\\"name\\\",n._traceWord+\\\" \\\"+i),u(\\\"uirevision\\\",n.uirevision);var p=_.getModule(e);if(e._module=p,p){var d=p.basePlotModule,v=d.attr,g=d.attributes;if(v&&g){var y=n._subplots,m=\\\"\\\";if(h||\\\"gl2d\\\"!==d.name){if(Array.isArray(v))for(a=0;a<v.length;a++){var x=v[a],b=c.coerce(t,e,g,x);y[x]&&c.pushUnique(y[x],b),m+=b}else m=c.coerce(t,e,g,v);y[d.name]&&c.pushUnique(y[d.name],m)}}}return h&&(u(\\\"customdata\\\"),u(\\\"ids\\\"),u(\\\"meta\\\"),s.traceIs(e,\\\"showLegend\\\")?(c.coerce(t,e,p.attributes.showlegend?p.attributes:_.attributes,\\\"showlegend\\\"),u(\\\"legend\\\"),u(\\\"legendwidth\\\"),u(\\\"legendgroup\\\"),u(\\\"legendgrouptitle.text\\\"),u(\\\"legendrank\\\"),e._dfltShowLegend=!0):e._dfltShowLegend=!1,p&&p.supplyDefaults(t,e,l,n),s.traceIs(e,\\\"noOpacity\\\")||u(\\\"opacity\\\"),s.traceIs(e,\\\"notLegendIsolatable\\\")&&(e.visible=!!e.visible),s.traceIs(e,\\\"noHover\\\")||(e.hovertemplate||c.coerceHoverinfo(t,e,n),\\\"parcats\\\"!==e.type&&s.getComponentMethod(\\\"fx\\\",\\\"supplyDefaults\\\")(t,e,l,n)),p&&p.selectPoints&&u(\\\"selectedpoints\\\"),_.supplyTransformDefaults(t,e,n)),e},_.hasMakesDataTransform=E,_.supplyTransformDefaults=function(t,e,r){if(e._length||E(t)){var n=r._globalTransforms||[],i=r._transformModules||[];if(Array.isArray(t.transforms)||0!==n.length)for(var a=t.transforms||[],o=n.concat(a),s=e.transforms=[],l=0;l<o.length;l++){var u,f=o[l],h=f.type,p=w[h],d=!(f._module&&f._module===p),v=p&&\\\"function\\\"==typeof p.transform;p||c.warn(\\\"Unrecognized transform type \\\"+h+\\\".\\\"),p&&p.supplyDefaults&&(d||v)?((u=p.supplyDefaults(f,e,r,t)).type=h,u._module=p,c.pushUnique(i,p)):u=c.extendFlat({},f),s.push(u)}}},_.supplyLayoutGlobalDefaults=function(t,e,r){function n(r,n){return c.coerce(t,e,_.layoutAttributes,r,n)}var i=t.template;c.isPlainObject(i)&&(e.template=i,e._template=i.layout,e._dataTemplate=i.data),n(\\\"autotypenumbers\\\");var a=c.coerceFont(n,\\\"font\\\"),o=a.size;c.coerceFont(n,\\\"title.font\\\",c.extendFlat({},a,{size:Math.round(1.4*o)})),n(\\\"title.text\\\",e._dfltTitle.plot),n(\\\"title.xref\\\");var l=n(\\\"title.yref\\\");n(\\\"title.pad.t\\\"),n(\\\"title.pad.r\\\"),n(\\\"title.pad.b\\\"),n(\\\"title.pad.l\\\");var u=n(\\\"title.automargin\\\");n(\\\"title.x\\\"),n(\\\"title.xanchor\\\"),n(\\\"title.y\\\"),n(\\\"title.yanchor\\\"),u&&(\\\"paper\\\"===l&&(0!==e.title.y&&(e.title.y=1),\\\"auto\\\"===e.title.yanchor&&(e.title.yanchor=0===e.title.y?\\\"top\\\":\\\"bottom\\\")),\\\"container\\\"===l&&(\\\"auto\\\"===e.title.y&&(e.title.y=1),\\\"auto\\\"===e.title.yanchor&&(e.title.yanchor=e.title.y<.5?\\\"bottom\\\":\\\"top\\\"))),n(\\\"uniformtext.mode\\\")&&n(\\\"uniformtext.minsize\\\"),n(\\\"autosize\\\",!(t.width&&t.height)),n(\\\"width\\\"),n(\\\"height\\\"),n(\\\"minreducedwidth\\\"),n(\\\"minreducedheight\\\"),n(\\\"margin.l\\\"),n(\\\"margin.r\\\"),n(\\\"margin.t\\\"),n(\\\"margin.b\\\"),n(\\\"margin.pad\\\"),n(\\\"margin.autoexpand\\\"),t.width&&t.height&&_.sanitizeMargins(e),s.getComponentMethod(\\\"grid\\\",\\\"sizeDefaults\\\")(t,e),n(\\\"paper_bgcolor\\\"),n(\\\"separators\\\",r.decimal+r.thousands),n(\\\"hidesources\\\"),n(\\\"colorway\\\"),n(\\\"datarevision\\\");var f=n(\\\"uirevision\\\");n(\\\"editrevision\\\",f),n(\\\"selectionrevision\\\",f),s.getComponentMethod(\\\"modebar\\\",\\\"supplyLayoutDefaults\\\")(t,e),s.getComponentMethod(\\\"shapes\\\",\\\"supplyDrawNewShapeDefaults\\\")(t,e,n),s.getComponentMethod(\\\"selections\\\",\\\"supplyDrawNewSelectionDefaults\\\")(t,e,n),n(\\\"meta\\\"),c.isPlainObject(t.transition)&&(n(\\\"transition.duration\\\"),n(\\\"transition.easing\\\"),n(\\\"transition.ordering\\\")),s.getComponentMethod(\\\"calendars\\\",\\\"handleDefaults\\\")(t,e,\\\"calendar\\\"),s.getComponentMethod(\\\"fx\\\",\\\"supplyLayoutGlobalDefaults\\\")(t,e,n),c.coerce(t,e,v,\\\"scattermode\\\")},_.plotAutoSize=function(t,e,r){var n,i,a=t._context||{},s=a.frameMargins,l=c.isPlotDiv(t);if(l&&t.emit(\\\"plotly_autosize\\\"),a.fillFrame)n=window.innerWidth,i=window.innerHeight,document.body.style.overflow=\\\"hidden\\\";else{var u=l?window.getComputedStyle(t):{};if(n=C(u.width)||C(u.maxWidth)||r.width,i=C(u.height)||C(u.maxHeight)||r.height,o(s)&&s>0){var f=1-2*s;n=Math.round(f*n),i=Math.round(f*i)}}var h=_.layoutAttributes.width.min,p=_.layoutAttributes.height.min;n<h&&(n=h),i<p&&(i=p);var d=!e.width&&Math.abs(r.width-n)>1,v=!e.height&&Math.abs(r.height-i)>1;(v||d)&&(d&&(r.width=n),v&&(r.height=i)),t._initialAutoSize||(t._initialAutoSize={width:n,height:i}),_.sanitizeMargins(r)},_.supplyLayoutModuleDefaults=function(t,e,r,n){var i,a,o,l=s.componentsRegistry,u=e._basePlotModules,f=s.subplotsRegistry.cartesian;for(i in l)(o=l[i]).includeBasePlot&&o.includeBasePlot(t,e);for(var h in u.length||u.push(f),e._has(\\\"cartesian\\\")&&(s.getComponentMethod(\\\"grid\\\",\\\"contentDefaults\\\")(t,e),f.finalizeSubplots(t,e)),e._subplots)e._subplots[h].sort(c.subplotSort);for(a=0;a<u.length;a++)(o=u[a]).supplyLayoutDefaults&&o.supplyLayoutDefaults(t,e,r);var p=e._modules;for(a=0;a<p.length;a++)(o=p[a]).supplyLayoutDefaults&&o.supplyLayoutDefaults(t,e,r);var d=e._transformModules;for(a=0;a<d.length;a++)(o=d[a]).supplyLayoutDefaults&&o.supplyLayoutDefaults(t,e,r,n);for(i in l)(o=l[i]).supplyLayoutDefaults&&o.supplyLayoutDefaults(t,e,r)},_.purge=function(t){var e=t._fullLayout||{};void 0!==e._glcontainer&&(e._glcontainer.selectAll(\\\".gl-canvas\\\").remove(),e._glcontainer.remove(),e._glcanvas=null),e._modeBar&&e._modeBar.destroy(),t._transitionData&&(t._transitionData._interruptCallbacks&&(t._transitionData._interruptCallbacks.length=0),t._transitionData._animationRaf&&window.cancelAnimationFrame(t._transitionData._animationRaf)),c.clearThrottle(),c.clearResponsive(t),delete t.data,delete t.layout,delete t._fullData,delete t._fullLayout,delete t.calcdata,delete t.empty,delete t.fid,delete t.undoqueue,delete t.undonum,delete t.autoplay,delete t.changed,delete t._promises,delete t._redrawTimer,delete t._hmlumcount,delete t._hmpixcount,delete t._transitionData,delete t._transitioning,delete t._initialAutoSize,delete t._transitioningWithDuration,delete t._dragging,delete t._dragged,delete t._dragdata,delete t._hoverdata,delete t._snapshotInProgress,delete t._editing,delete t._mouseDownTime,delete t._legendMouseDownTime,t.removeAllListeners&&t.removeAllListeners()},_.style=function(t){var e,r=t._fullLayout._visibleModules,n=[];for(e=0;e<r.length;e++){var i=r[e];i.style&&c.pushUnique(n,i.style)}for(e=0;e<n.length;e++)n[e](t)},_.sanitizeMargins=function(t){if(t&&t.margin){var e,r=t.width,n=t.height,i=t.margin,a=r-(i.l+i.r),o=n-(i.t+i.b);a<0&&(e=(r-1)/(i.l+i.r),i.l=Math.floor(e*i.l),i.r=Math.floor(e*i.r)),o<0&&(e=(n-1)/(i.t+i.b),i.t=Math.floor(e*i.t),i.b=Math.floor(e*i.b))}},_.clearAutoMarginIds=function(t){t._fullLayout._pushmarginIds={}},_.allowAutoMargin=function(t,e){t._fullLayout._pushmarginIds[e]=1},_.autoMargin=function(t,e,r){var n=t._fullLayout,i=n.width,a=n.height,o=n.margin,s=n.minreducedwidth,l=n.minreducedheight,u=c.constrain(i-o.l-o.r,2,s),f=c.constrain(a-o.t-o.b,2,l),h=Math.max(0,i-u),p=Math.max(0,a-f),d=n._pushmargin,v=n._pushmarginIds;if(!1!==o.autoexpand){if(r){var g=r.pad;if(void 0===g&&(g=Math.min(12,o.l,o.r,o.t,o.b)),h){var y=(r.l+r.r)/h;y>1&&(r.l/=y,r.r/=y)}if(p){var m=(r.t+r.b)/p;m>1&&(r.t/=m,r.b/=m)}var x=void 0!==r.xl?r.xl:r.x,b=void 0!==r.xr?r.xr:r.x,w=void 0!==r.yt?r.yt:r.y,T=void 0!==r.yb?r.yb:r.y;d[e]={l:{val:x,size:r.l+g},r:{val:b,size:r.r+g},b:{val:T,size:r.b+g},t:{val:w,size:r.t+g}},v[e]=1}else delete d[e],delete v[e];if(!n._replotting)return _.doAutoMargin(t)}},_.doAutoMargin=function(t){var e=t._fullLayout,r=e.width,n=e.height;e._size||(e._size={}),P(e);var i=e._size,a=e.margin,l={t:0,b:0,l:0,r:0},u=c.extendFlat({},i),f=a.l,h=a.r,d=a.t,v=a.b,g=e._pushmargin,y=e._pushmarginIds,m=e.minreducedwidth,x=e.minreducedheight;if(!1!==a.autoexpand){for(var b in g)y[b]||delete g[b];var w=t._fullLayout._reservedMargin;for(var T in w)for(var k in w[T]){var A=w[T][k];l[k]=Math.max(l[k],A)}for(var M in g.base={l:{val:0,size:f},r:{val:1,size:h},t:{val:1,size:d},b:{val:0,size:v}},l){var S=0;for(var E in g)\\\"base\\\"!==E&&o(g[E][M].size)&&(S=g[E][M].size>S?g[E][M].size:S);var L=Math.max(0,a[M]-S);l[M]=Math.max(0,l[M]-L)}for(var C in g){var O=g[C].l||{},I=g[C].b||{},D=O.val,z=O.size,R=I.val,F=I.size,B=r-l.r-l.l,N=n-l.t-l.b;for(var j in g){if(o(z)&&g[j].r){var U=g[j].r.val,V=g[j].r.size;if(U>D){var H=(z*U+(V-B)*D)/(U-D),q=(V*(1-D)+(z-B)*(1-U))/(U-D);H+q>f+h&&(f=H,h=q)}}if(o(F)&&g[j].t){var G=g[j].t.val,Z=g[j].t.size;if(G>R){var Y=(F*G+(Z-N)*R)/(G-R),W=(Z*(1-R)+(F-N)*(1-G))/(G-R);Y+W>v+d&&(v=Y,d=W)}}}}}var X=c.constrain(r-a.l-a.r,2,m),J=c.constrain(n-a.t-a.b,2,x),K=Math.max(0,r-X),$=Math.max(0,n-J);if(K){var Q=(f+h)/K;Q>1&&(f/=Q,h/=Q)}if($){var tt=(v+d)/$;tt>1&&(v/=tt,d/=tt)}if(i.l=Math.round(f)+l.l,i.r=Math.round(h)+l.r,i.t=Math.round(d)+l.t,i.b=Math.round(v)+l.b,i.p=Math.round(a.pad),i.w=Math.round(r)-i.l-i.r,i.h=Math.round(n)-i.t-i.b,!e._replotting&&(_.didMarginChange(u,i)||function(t){if(\\\"_redrawFromAutoMarginCount\\\"in t._fullLayout)return!1;var e=p.list(t,\\\"\\\",!0);for(var r in e)if(e[r].autoshift||e[r].shift)return!0;return!1}(t))){\\\"_redrawFromAutoMarginCount\\\"in e?e._redrawFromAutoMarginCount++:e._redrawFromAutoMarginCount=1;var et=3*(1+Object.keys(y).length);if(e._redrawFromAutoMarginCount<et)return s.call(\\\"_doPlot\\\",t);e._size=u,c.warn(\\\"Too many auto-margin redraws.\\\")}!function(t){var e=p.list(t,\\\"\\\",!0);[\\\"_adjustTickLabelsOverflow\\\",\\\"_hideCounterAxisInsideTickLabels\\\"].forEach((function(t){for(var r=0;r<e.length;r++){var n=e[r][t];n&&n()}}))}(t)};var O=[\\\"l\\\",\\\"r\\\",\\\"t\\\",\\\"b\\\",\\\"p\\\",\\\"w\\\",\\\"h\\\"];function I(t,e,r){var n=!1,i=[_.previousPromises,function(){if(t._transitionData)return t._transitioning=!1,function(t){var e=Promise.resolve();if(!t)return e;for(;t.length;)e=e.then(t.shift());return e}(t._transitionData._interruptCallbacks)},r.prepareFn,_.rehover,_.reselect,function(){return t.emit(\\\"plotly_transitioning\\\",[]),new Promise((function(i){t._transitioning=!0,e.duration>0&&(t._transitioningWithDuration=!0),t._transitionData._interruptCallbacks.push((function(){n=!0})),r.redraw&&t._transitionData._interruptCallbacks.push((function(){return s.call(\\\"redraw\\\",t)})),t._transitionData._interruptCallbacks.push((function(){t.emit(\\\"plotly_transitioninterrupted\\\",[])}));var a=0,o=0;function l(){return a++,function(){var e;o++,n||o!==a||(e=i,t._transitionData&&(function(t){if(t)for(;t.length;)t.shift()}(t._transitionData._interruptCallbacks),Promise.resolve().then((function(){if(r.redraw)return s.call(\\\"redraw\\\",t)})).then((function(){t._transitioning=!1,t._transitioningWithDuration=!1,t.emit(\\\"plotly_transitioned\\\",[])})).then(e)))}}r.runFn(l),setTimeout(l())}))}],a=c.syncOrAsync(i,t);return a&&a.then||(a=Promise.resolve()),a.then((function(){return t}))}_.didMarginChange=function(t,e){for(var r=0;r<O.length;r++){var n=O[r],i=t[n],a=e[n];if(!o(i)||Math.abs(a-i)>1)return!0}return!1},_.graphJson=function(t,e,r,n,i,a){(i&&e&&!t._fullData||i&&!e&&!t._fullLayout)&&_.supplyDefaults(t);var o=i?t._fullData:t.data,s=i?t._fullLayout:t.layout,l=(t._transitionData||{})._frames;function u(t,e){if(\\\"function\\\"==typeof t)return e?\\\"_function_\\\":null;if(c.isPlainObject(t)){var n,i={};return Object.keys(t).sort().forEach((function(a){if(-1===[\\\"_\\\",\\\"[\\\"].indexOf(a.charAt(0)))if(\\\"function\\\"!=typeof t[a]){if(\\\"keepdata\\\"===r){if(\\\"src\\\"===a.substr(a.length-3))return}else if(\\\"keepstream\\\"===r){if(\\\"string\\\"==typeof(n=t[a+\\\"src\\\"])&&n.indexOf(\\\":\\\")>0&&!c.isPlainObject(t.stream))return}else if(\\\"keepall\\\"!==r&&\\\"string\\\"==typeof(n=t[a+\\\"src\\\"])&&n.indexOf(\\\":\\\")>0)return;i[a]=u(t[a],e)}else e&&(i[a]=\\\"_function\\\")})),i}return Array.isArray(t)?t.map((function(t){return u(t,e)})):c.isTypedArray(t)?c.simpleMap(t,c.identity):c.isJSDate(t)?c.ms2DateTimeLocal(+t):t}var f={data:(o||[]).map((function(t){var r=u(t);return e&&delete r.fit,r}))};if(!e&&(f.layout=u(s),i)){var h=s._size;f.layout.computed={margin:{b:h.b,l:h.l,r:h.r,t:h.t}}}return l&&(f.frames=u(l)),a&&(f.config=u(t._context,!0)),\\\"object\\\"===n?f:JSON.stringify(f)},_.modifyFrames=function(t,e){var r,n,i,a=t._transitionData._frames,o=t._transitionData._frameHash;for(r=0;r<e.length;r++)switch((n=e[r]).type){case\\\"replace\\\":i=n.value;var s=(a[n.index]||{}).name,l=i.name;a[n.index]=o[l]=i,l!==s&&(delete o[s],o[l]=i);break;case\\\"insert\\\":o[(i=n.value).name]=i,a.splice(n.index,0,i);break;case\\\"delete\\\":delete o[(i=a[n.index]).name],a.splice(n.index,1)}return Promise.resolve()},_.computeFrame=function(t,e){var r,n,i,a,o=t._transitionData._frameHash;if(!e)throw new Error(\\\"computeFrame must be given a string frame name\\\");var s=o[e.toString()];if(!s)return!1;for(var l=[s],u=[s.name];s.baseframe&&(s=o[s.baseframe.toString()])&&-1===u.indexOf(s.name);)l.push(s),u.push(s.name);for(var c={};s=l.pop();)if(s.layout&&(c.layout=_.extendLayout(c.layout,s.layout)),s.data){if(c.data||(c.data=[]),!(n=s.traces))for(n=[],r=0;r<s.data.length;r++)n[r]=r;for(c.traces||(c.traces=[]),r=0;r<s.data.length;r++)null!=(i=n[r])&&(-1===(a=c.traces.indexOf(i))&&(a=c.data.length,c.traces[a]=i),c.data[a]=_.extendTrace(c.data[a],s.data[r]))}return c},_.recomputeFrameHash=function(t){for(var e=t._transitionData._frameHash={},r=t._transitionData._frames,n=0;n<r.length;n++){var i=r[n];i&&i.name&&(e[i.name]=i)}},_.extendObjectWithContainers=function(t,e,r){var n,i,a,o,s,l,u,f=c.extendDeepNoArrays({},e||{}),h=c.expandObjectPaths(f),p={};if(r&&r.length)for(a=0;a<r.length;a++)void 0===(i=(n=c.nestedProperty(h,r[a])).get())?c.nestedProperty(p,r[a]).set(null):(n.set(null),c.nestedProperty(p,r[a]).set(i));if(t=c.extendDeepNoArrays(t||{},h),r&&r.length)for(a=0;a<r.length;a++)if(l=c.nestedProperty(p,r[a]).get()){for(u=(s=c.nestedProperty(t,r[a])).get(),Array.isArray(u)||(u=[],s.set(u)),o=0;o<l.length;o++){var d=l[o];u[o]=null===d?null:_.extendObjectWithContainers(u[o],d)}s.set(u)}return t},_.dataArrayContainers=[\\\"transforms\\\",\\\"dimensions\\\"],_.layoutArrayContainers=s.layoutArrayContainers,_.extendTrace=function(t,e){return _.extendObjectWithContainers(t,e,_.dataArrayContainers)},_.extendLayout=function(t,e){return _.extendObjectWithContainers(t,e,_.layoutArrayContainers)},_.transition=function(t,e,r,n,i,a){var o={redraw:i.redraw},s={},l=[];return o.prepareFn=function(){for(var i=Array.isArray(e)?e.length:0,a=n.slice(0,i),o=0;o<a.length;o++){var u=a[o],f=t._fullData[u]._module;if(f){if(f.animatable){var h=f.basePlotModule.name;s[h]||(s[h]=[]),s[h].push(u)}t.data[a[o]]=_.extendTrace(t.data[a[o]],e[o])}}var p=c.expandObjectPaths(c.extendDeepNoArrays({},r)),d=/^[xy]axis[0-9]*$/;for(var v in p)d.test(v)&&delete p[v].range;_.extendLayout(t.layout,p),delete t.calcdata,_.supplyDefaults(t),_.doCalcdata(t);var g=c.expandObjectPaths(r);if(g){var y=t._fullLayout._plots;for(var m in y){var x=y[m],b=x.xaxis,w=x.yaxis,T=b.range.slice(),k=w.range.slice(),A=null,M=null,S=null,E=null;Array.isArray(g[b._name+\\\".range\\\"])?A=g[b._name+\\\".range\\\"].slice():Array.isArray((g[b._name]||{}).range)&&(A=g[b._name].range.slice()),Array.isArray(g[w._name+\\\".range\\\"])?M=g[w._name+\\\".range\\\"].slice():Array.isArray((g[w._name]||{}).range)&&(M=g[w._name].range.slice()),T&&A&&(b.r2l(T[0])!==b.r2l(A[0])||b.r2l(T[1])!==b.r2l(A[1]))&&(S={xr0:T,xr1:A}),k&&M&&(w.r2l(k[0])!==w.r2l(M[0])||w.r2l(k[1])!==w.r2l(M[1]))&&(E={yr0:k,yr1:M}),(S||E)&&l.push(c.extendFlat({plotinfo:x},S,E))}}return Promise.resolve()},o.runFn=function(e){var n,i,o=t._fullLayout._basePlotModules,u=l.length;if(r)for(i=0;i<o.length;i++)o[i].transitionAxes&&o[i].transitionAxes(t,l,a,e);for(var f in u?((n=c.extendFlat({},a)).duration=0,delete s.cartesian):n=a,s){var h=s[f];t._fullData[h[0]]._module.basePlotModule.plot(t,h,n,e)}},I(t,a,o)},_.transitionFromReact=function(t,e,r,n){var i=t._fullLayout,a=i.transition,o={},s=[];return o.prepareFn=function(){var t=i._plots;for(var a in o.redraw=!1,\\\"some\\\"===e.anim&&(o.redraw=!0),\\\"some\\\"===r.anim&&(o.redraw=!0),t){var l=t[a],u=l.xaxis,f=l.yaxis,h=n[u._name].range.slice(),p=n[f._name].range.slice(),d=u.range.slice(),v=f.range.slice();u.setScale(),f.setScale();var g=null,y=null;u.r2l(h[0])===u.r2l(d[0])&&u.r2l(h[1])===u.r2l(d[1])||(g={xr0:h,xr1:d}),f.r2l(p[0])===f.r2l(v[0])&&f.r2l(p[1])===f.r2l(v[1])||(y={yr0:p,yr1:v}),(g||y)&&s.push(c.extendFlat({plotinfo:l},g,y))}return Promise.resolve()},o.runFn=function(r){for(var n,i,o,l=t._fullData,u=t._fullLayout._basePlotModules,f=[],h=0;h<l.length;h++)f.push(h);function p(){if(t._fullLayout)for(var e=0;e<u.length;e++)u[e].transitionAxes&&u[e].transitionAxes(t,s,n,r)}function d(){if(t._fullLayout)for(var e=0;e<u.length;e++)u[e].plot(t,o,i,r)}s.length&&e.anim?\\\"traces first\\\"===a.ordering?(n=c.extendFlat({},a,{duration:0}),o=f,i=a,setTimeout(p,a.duration),d()):(n=a,o=null,i=c.extendFlat({},a,{duration:0}),setTimeout(d,n.duration),p()):s.length?(n=a,p()):e.anim&&(o=f,i=a,d())},I(t,a,o)},_.doCalcdata=function(t,e){var r,n,i,a,o=p.list(t),u=t._fullData,f=t._fullLayout,d=new Array(u.length),v=(t.calcdata||[]).slice();for(t.calcdata=d,f._numBoxes=0,f._numViolins=0,f._violinScaleGroupStats={},t._hmpixcount=0,t._hmlumcount=0,f._piecolormap={},f._sunburstcolormap={},f._treemapcolormap={},f._iciclecolormap={},f._funnelareacolormap={},i=0;i<u.length;i++)Array.isArray(e)&&-1===e.indexOf(i)&&(d[i]=v[i]);for(i=0;i<u.length;i++)(r=u[i])._arrayAttrs=l.findArrayAttributes(r),r._extremes={};var g=f._subplots.polar||[];for(i=0;i<g.length;i++)o.push(f[g[i]].radialaxis,f[g[i]].angularaxis);for(var y in f._colorAxes){var m=f[y];!1!==m.cauto&&(delete m.cmin,delete m.cmax)}var x=!1;function b(e){if(r=u[e],n=r._module,!0===r.visible&&r.transforms){if(n&&n.calc){var i=n.calc(t,r);i[0]&&i[0].t&&i[0].t._scene&&delete i[0].t._scene.dirty}for(a=0;a<r.transforms.length;a++){var o=r.transforms[a];(n=w[o.type])&&n.calcTransform&&(r._hasCalcTransform=!0,x=!0,n.calcTransform(t,r,o))}}}function _(e,i){if(r=u[e],!!(n=r._module).isContainer===i){var o=[];if(!0===r.visible&&0!==r._length){delete r._indexToPoints;var s=r.transforms||[];for(a=s.length-1;a>=0;a--)if(s[a].enabled){r._indexToPoints=s[a]._indexToPoints;break}n&&n.calc&&(o=n.calc(t,r))}Array.isArray(o)&&o[0]||(o=[{x:h,y:h}]),o[0].t||(o[0].t={}),o[0].trace=r,d[e]=o}}for(z(o,u,f),i=0;i<u.length;i++)_(i,!0);for(i=0;i<u.length;i++)b(i);for(x&&z(o,u,f),i=0;i<u.length;i++)_(i,!0);for(i=0;i<u.length;i++)_(i,!1);R(t);var T=function(t,e){var r,n,i,a,o,l=[];function u(t,r,n){var i=r._id.charAt(0);if(\\\"histogram2dcontour\\\"===t){var a=r._counterAxes[0],o=p.getFromId(e,a),s=\\\"x\\\"===i||\\\"x\\\"===a&&\\\"category\\\"===o.type,l=\\\"y\\\"===i||\\\"y\\\"===a&&\\\"category\\\"===o.type;return function(t,e){return 0===t||0===e||s&&t===n[e].length-1||l&&e===n.length-1?-1:(\\\"y\\\"===i?e:t)-1}}return function(t,e){return\\\"y\\\"===i?e:t}}var f={min:function(t){return c.aggNums(Math.min,null,t)},max:function(t){return c.aggNums(Math.max,null,t)},sum:function(t){return c.aggNums((function(t,e){return t+e}),null,t)},total:function(t){return c.aggNums((function(t,e){return t+e}),null,t)},mean:function(t){return c.mean(t)},median:function(t){return c.median(t)}};for(r=0;r<t.length;r++){var h=t[r];if(\\\"category\\\"===h.type){var d=h.categoryorder.match(D);if(d){var v=d[1],g=d[2],y=h._id.charAt(0),m=\\\"x\\\"===y,x=[];for(n=0;n<h._categories.length;n++)x.push([h._categories[n],[]]);for(n=0;n<h._traceIndices.length;n++){var b=h._traceIndices[n],_=e._fullData[b];if(!0===_.visible){var w=_.type;s.traceIs(_,\\\"histogram\\\")&&(delete _._xautoBinFinished,delete _._yautoBinFinished);var T=\\\"splom\\\"===w,k=\\\"scattergl\\\"===w,A=e.calcdata[b];for(i=0;i<A.length;i++){var M,S,E=A[i];if(T){var L=_._axesDim[h._id];if(!m){var C=_._diag[L][0];C&&(h=e._fullLayout[p.id2name(C)])}var P=E.trace.dimensions[L].values;for(a=0;a<P.length;a++)for(M=h._categoriesMap[P[a]],o=0;o<E.trace.dimensions.length;o++)if(o!==L){var O=E.trace.dimensions[o];x[M][1].push(O.values[a])}}else if(k){for(a=0;a<E.t.x.length;a++)m?(M=E.t.x[a],S=E.t.y[a]):(M=E.t.y[a],S=E.t.x[a]),x[M][1].push(S);E.t&&E.t._scene&&delete E.t._scene.dirty}else if(E.hasOwnProperty(\\\"z\\\")){S=E.z;var I=u(_.type,h,S);for(a=0;a<S.length;a++)for(o=0;o<S[a].length;o++)(M=I(o,a))+1&&x[M][1].push(S[a][o])}else for(void 0===(M=E.p)&&(M=E[y]),void 0===(S=E.s)&&(S=E.v),void 0===S&&(S=m?E.y:E.x),Array.isArray(S)||(S=void 0===S?[]:[S]),a=0;a<S.length;a++)x[M][1].push(S[a])}}}h._categoriesValue=x;var z=[];for(n=0;n<x.length;n++)z.push([x[n][0],f[v](x[n][1])]);z.sort((function(t,e){return t[1]-e[1]})),h._categoriesAggregatedValue=z,h._initialCategories=z.map((function(t){return t[0]})),\\\"descending\\\"===g&&h._initialCategories.reverse(),l=l.concat(h.sortByInitialCategories())}}}return l}(o,t);if(T.length){for(f._numBoxes=0,f._numViolins=0,i=0;i<T.length;i++)_(T[i],!0);for(i=0;i<T.length;i++)_(T[i],!1);R(t)}s.getComponentMethod(\\\"fx\\\",\\\"calc\\\")(t),s.getComponentMethod(\\\"errorbars\\\",\\\"calc\\\")(t)};var D=/(total|sum|min|max|mean|median) (ascending|descending)/;function z(t,e,r){var n={};function i(t){t.clearCalc(),\\\"multicategory\\\"===t.type&&t.setupMultiCategory(e),n[t._id]=1}c.simpleMap(t,i);for(var a=r._axisMatchGroups||[],o=0;o<a.length;o++)for(var s in a[o])n[s]||i(r[p.id2name(s)])}function R(t){var e,r,n,i=t._fullLayout,a=i._visibleModules,o={};for(r=0;r<a.length;r++){var s=a[r],l=s.crossTraceCalc;if(l){var u=s.basePlotModule.name;o[u]?c.pushUnique(o[u],l):o[u]=[l]}}for(n in o){var f=o[n],h=i._subplots[n];if(Array.isArray(h))for(e=0;e<h.length;e++){var p=h[e],d=\\\"cartesian\\\"===n?i._plots[p]:i[p];for(r=0;r<f.length;r++)f[r](t,d,p)}else for(r=0;r<f.length;r++)f[r](t)}}_.rehover=function(t){t._fullLayout._rehover&&t._fullLayout._rehover()},_.redrag=function(t){t._fullLayout._redrag&&t._fullLayout._redrag()},_.reselect=function(t){var e=t._fullLayout,r=(t.layout||{}).selections,n=e._previousSelections;e._previousSelections=r;var i=e._reselect||JSON.stringify(r)!==JSON.stringify(n);s.getComponentMethod(\\\"selections\\\",\\\"reselect\\\")(t,i)},_.generalUpdatePerTraceModule=function(t,e,r,n){var i,a=e.traceHash,o={};for(i=0;i<r.length;i++){var s=r[i],l=s[0].trace;l.visible&&(o[l.type]=o[l.type]||[],o[l.type].push(s))}for(var u in a)if(!o[u]){var f=a[u][0];f[0].trace.visible=!1,o[u]=[f]}for(var h in o){var p=o[h];p[0][0].trace._module.plot(t,e,c.filterVisible(p),n)}e.traceHash=o},_.plotBasePlot=function(t,e,r,n,i){var a=s.getModule(t),o=m(e.calcdata,a)[0];a.plot(e,o,n,i)},_.cleanBasePlot=function(t,e,r,n,i){var a=i._has&&i._has(t),o=r._has&&r._has(t);a&&!o&&i[\\\"_\\\"+t+\\\"layer\\\"].selectAll(\\\"g.trace\\\").remove()}},9813:function(t){\\\"use strict\\\";t.exports={attr:\\\"subplot\\\",name:\\\"polar\\\",axisNames:[\\\"angularaxis\\\",\\\"radialaxis\\\"],axisName2dataArray:{angularaxis:\\\"theta\\\",radialaxis:\\\"r\\\"},layerNames:[\\\"draglayer\\\",\\\"plotbg\\\",\\\"backplot\\\",\\\"angular-grid\\\",\\\"radial-grid\\\",\\\"frontplot\\\",\\\"angular-line\\\",\\\"radial-line\\\",\\\"angular-axis\\\",\\\"radial-axis\\\"],radialDragBoxSize:50,angularDragBoxSize:30,cornerLen:25,cornerHalfWidth:2,MINDRAG:8,MINZOOM:20,OFFEDGE:20}},10869:function(t,e,r){\\\"use strict\\\";var n=r(71828),i=r(61082).tester,a=n.findIndexOfMin,o=n.isAngleInsideSector,s=n.angleDelta,l=n.angleDist;function u(t,e,r,n){var i,a,o=n[0],s=n[1],l=f(Math.sin(e)-Math.sin(t)),u=f(Math.cos(e)-Math.cos(t)),c=Math.tan(r),h=f(1/c),p=l/u,d=s-p*o;return h?l&&u?a=c*(i=d/(c-p)):u?(i=s*h,a=s):(i=o,a=o*c):l&&u?(i=0,a=d):u?(i=0,a=s):i=a=NaN,[i,a]}function c(t,e,r,i){return n.isFullCircle([e,r])?function(t,e){var r,n=e.length,i=new Array(n+1);for(r=0;r<n;r++){var a=e[r];i[r]=[t*Math.cos(a),t*Math.sin(a)]}return i[r]=i[0].slice(),i}(t,i):function(t,e,r,i){var s,c,f=i.length,h=[];function p(e){return[t*Math.cos(e),t*Math.sin(e)]}function d(t,e,r){return u(t,e,r,p(t))}function v(t){return n.mod(t,f)}function g(t){return o(t,[e,r])}var y=a(i,(function(t){return g(t)?l(t,e):1/0})),m=d(i[y],i[v(y-1)],e);for(h.push(m),s=y,c=0;c<f;s++,c++){var x=i[v(s)];if(!g(x))break;h.push(p(x))}var b=a(i,(function(t){return g(t)?l(t,r):1/0})),_=d(i[b],i[v(b+1)],r);return h.push(_),h.push([0,0]),h.push(h[0].slice()),h}(t,e,r,i)}function f(t){return Math.abs(t)>1e-10?t:0}function h(t,e,r){e=e||0,r=r||0;for(var n=t.length,i=new Array(n),a=0;a<n;a++){var o=t[a];i[a]=[e+o[0],r-o[1]]}return i}t.exports={isPtInsidePolygon:function(t,e,r,n,a){if(!o(e,n))return!1;var s,l;r[0]<r[1]?(s=r[0],l=r[1]):(s=r[1],l=r[0]);var u=i(c(s,n[0],n[1],a)),f=i(c(l,n[0],n[1],a)),h=[t*Math.cos(e),t*Math.sin(e)];return f.contains(h)&&!u.contains(h)},findPolygonOffset:function(t,e,r,n){for(var i=1/0,a=1/0,o=c(t,e,r,n),s=0;s<o.length;s++){var l=o[s];i=Math.min(i,l[0]),a=Math.min(a,-l[1])}return[i,a]},findEnclosingVertexAngles:function(t,e){var r=a(e,(function(e){var r=s(e,t);return r>0?r:1/0})),i=n.mod(r+1,e.length);return[e[r],e[i]]},findIntersectionXY:u,findXYatLength:function(t,e,r,n){var i=-e*r,a=e*e+1,o=2*(e*i-r),s=i*i+r*r-t*t,l=Math.sqrt(o*o-4*a*s),u=(-o+l)/(2*a),c=(-o-l)/(2*a);return[[u,e*u+i+n],[c,e*c+i+n]]},clampTiny:f,pathPolygon:function(t,e,r,n,i,a){return\\\"M\\\"+h(c(t,e,r,n),i,a).join(\\\"L\\\")},pathPolygonAnnulus:function(t,e,r,n,i,a,o){var s,l;t<e?(s=t,l=e):(s=e,l=t);var u=h(c(s,r,n,i),a,o);return\\\"M\\\"+h(c(l,r,n,i),a,o).reverse().join(\\\"L\\\")+\\\"M\\\"+u.join(\\\"L\\\")}}},23580:function(t,e,r){\\\"use strict\\\";var n=r(27659).AU,i=r(71828).counterRegex,a=r(77997),o=r(9813),s=o.attr,l=o.name,u=i(l),c={};c[s]={valType:\\\"subplotid\\\",dflt:l,editType:\\\"calc\\\"},t.exports={attr:s,name:l,idRoot:l,idRegex:u,attrRegex:u,attributes:c,layoutAttributes:r(73812),supplyLayoutDefaults:r(68993),plot:function(t){for(var e=t._fullLayout,r=t.calcdata,i=e._subplots[l],o=0;o<i.length;o++){var s=i[o],u=n(r,l,s),c=e[s]._subplot;c||(c=a(t,s),e[s]._subplot=c),c.plot(u,e,t._promises)}},clean:function(t,e,r,n){for(var i=n._subplots[l]||[],a=n._has&&n._has(\\\"gl\\\"),o=e._has&&e._has(\\\"gl\\\"),s=a&&!o,u=0;u<i.length;u++){var c=i[u],f=n[c]._subplot;if(!e[c]&&f)for(var h in f.framework.remove(),f.layers[\\\"radial-axis-title\\\"].remove(),f.clipPaths)f.clipPaths[h].remove();s&&f._scene&&(f._scene.destroy(),f._scene=null)}},toSVG:r(93612).toSVG}},73812:function(t,e,r){\\\"use strict\\\";var n=r(22399),i=r(13838),a=r(27670).Y,o=r(71828).extendFlat,s=r(30962).overrideAll,l=s({color:i.color,showline:o({},i.showline,{dflt:!0}),linecolor:i.linecolor,linewidth:i.linewidth,showgrid:o({},i.showgrid,{dflt:!0}),gridcolor:i.gridcolor,gridwidth:i.gridwidth,griddash:i.griddash},\\\"plot\\\",\\\"from-root\\\"),u=s({tickmode:i.minor.tickmode,nticks:i.nticks,tick0:i.tick0,dtick:i.dtick,tickvals:i.tickvals,ticktext:i.ticktext,ticks:i.ticks,ticklen:i.ticklen,tickwidth:i.tickwidth,tickcolor:i.tickcolor,ticklabelstep:i.ticklabelstep,showticklabels:i.showticklabels,labelalias:i.labelalias,showtickprefix:i.showtickprefix,tickprefix:i.tickprefix,showticksuffix:i.showticksuffix,ticksuffix:i.ticksuffix,showexponent:i.showexponent,exponentformat:i.exponentformat,minexponent:i.minexponent,separatethousands:i.separatethousands,tickfont:i.tickfont,tickangle:i.tickangle,tickformat:i.tickformat,tickformatstops:i.tickformatstops,layer:i.layer},\\\"plot\\\",\\\"from-root\\\"),c={visible:o({},i.visible,{dflt:!0}),type:o({},i.type,{values:[\\\"-\\\",\\\"linear\\\",\\\"log\\\",\\\"date\\\",\\\"category\\\"]}),autotypenumbers:i.autotypenumbers,autorange:o({},i.autorange,{editType:\\\"plot\\\"}),rangemode:{valType:\\\"enumerated\\\",values:[\\\"tozero\\\",\\\"nonnegative\\\",\\\"normal\\\"],dflt:\\\"tozero\\\",editType:\\\"calc\\\"},range:o({},i.range,{items:[{valType:\\\"any\\\",editType:\\\"plot\\\",impliedEdits:{\\\"^autorange\\\":!1}},{valType:\\\"any\\\",editType:\\\"plot\\\",impliedEdits:{\\\"^autorange\\\":!1}}],editType:\\\"plot\\\"}),categoryorder:i.categoryorder,categoryarray:i.categoryarray,angle:{valType:\\\"angle\\\",editType:\\\"plot\\\"},side:{valType:\\\"enumerated\\\",values:[\\\"clockwise\\\",\\\"counterclockwise\\\"],dflt:\\\"clockwise\\\",editType:\\\"plot\\\"},title:{text:o({},i.title.text,{editType:\\\"plot\\\",dflt:\\\"\\\"}),font:o({},i.title.font,{editType:\\\"plot\\\"}),editType:\\\"plot\\\"},hoverformat:i.hoverformat,uirevision:{valType:\\\"any\\\",editType:\\\"none\\\"},editType:\\\"calc\\\",_deprecated:{title:i._deprecated.title,titlefont:i._deprecated.titlefont}};o(c,l,u);var f={visible:o({},i.visible,{dflt:!0}),type:{valType:\\\"enumerated\\\",values:[\\\"-\\\",\\\"linear\\\",\\\"category\\\"],dflt:\\\"-\\\",editType:\\\"calc\\\",_noTemplating:!0},autotypenumbers:i.autotypenumbers,categoryorder:i.categoryorder,categoryarray:i.categoryarray,thetaunit:{valType:\\\"enumerated\\\",values:[\\\"radians\\\",\\\"degrees\\\"],dflt:\\\"degrees\\\",editType:\\\"calc\\\"},period:{valType:\\\"number\\\",editType:\\\"calc\\\",min:0},direction:{valType:\\\"enumerated\\\",values:[\\\"counterclockwise\\\",\\\"clockwise\\\"],dflt:\\\"counterclockwise\\\",editType:\\\"calc\\\"},rotation:{valType:\\\"angle\\\",editType:\\\"calc\\\"},hoverformat:i.hoverformat,uirevision:{valType:\\\"any\\\",editType:\\\"none\\\"},editType:\\\"calc\\\"};o(f,l,u),t.exports={domain:a({name:\\\"polar\\\",editType:\\\"plot\\\"}),sector:{valType:\\\"info_array\\\",items:[{valType:\\\"number\\\",editType:\\\"plot\\\"},{valType:\\\"number\\\",editType:\\\"plot\\\"}],dflt:[0,360],editType:\\\"plot\\\"},hole:{valType:\\\"number\\\",min:0,max:1,dflt:0,editType:\\\"plot\\\"},bgcolor:{valType:\\\"color\\\",editType:\\\"plot\\\",dflt:n.background},radialaxis:c,angularaxis:f,gridshape:{valType:\\\"enumerated\\\",values:[\\\"circular\\\",\\\"linear\\\"],dflt:\\\"circular\\\",editType:\\\"plot\\\"},uirevision:{valType:\\\"any\\\",editType:\\\"none\\\"},editType:\\\"calc\\\"}},68993:function(t,e,r){\\\"use strict\\\";var n=r(71828),i=r(7901),a=r(44467),o=r(49119),s=r(27659).NG,l=r(26218),u=r(38701),c=r(96115),f=r(89426),h=r(15258),p=r(92128),d=r(4322),v=r(73812),g=r(12101),y=r(9813),m=y.axisNames;function x(t,e,r,o){var d=r(\\\"bgcolor\\\");o.bgColor=i.combine(d,o.paper_bgcolor);var x=r(\\\"sector\\\");r(\\\"hole\\\");var _,w=s(o.fullData,y.name,o.id),T=o.layoutOut;function k(t,e){return r(_+\\\".\\\"+t,e)}for(var A=0;A<m.length;A++){_=m[A],n.isPlainObject(t[_])||(t[_]={});var M=t[_],S=a.newContainer(e,_);S._id=S._name=_,S._attr=o.id+\\\".\\\"+_,S._traceIndices=w.map((function(t){return t._expandedIndex}));var E=y.axisName2dataArray[_],L=b(M,S,k,w,E,o);h(M,S,k,{axData:w,dataAttr:E});var C=k(\\\"visible\\\");switch(g(S,e,T),k(\\\"uirevision\\\",e.uirevision),S._m=1,_){case\\\"radialaxis\\\":var P=k(\\\"autorange\\\",!S.isValidRange(M.range));M.autorange=P,!P||\\\"linear\\\"!==L&&\\\"-\\\"!==L||k(\\\"rangemode\\\"),\\\"reversed\\\"===P&&(S._m=-1),k(\\\"range\\\"),S.cleanRange(\\\"range\\\",{dfltRange:[0,1]});break;case\\\"angularaxis\\\":if(\\\"date\\\"===L){n.log(\\\"Polar plots do not support date angular axes yet.\\\");for(var O=0;O<w.length;O++)w[O].visible=!1;L=M.type=S.type=\\\"linear\\\"}k(\\\"linear\\\"===L?\\\"thetaunit\\\":\\\"period\\\");var I=k(\\\"direction\\\");k(\\\"rotation\\\",{counterclockwise:0,clockwise:90}[I])}if(f(M,S,k,S.type,{tickSuffixDflt:\\\"degrees\\\"===S.thetaunit?\\\"°\\\":void 0}),C){var D,z,R,F,B=o.font||{};z=(D=k(\\\"color\\\"))===M.color?D:B.color,R=B.size,F=B.family,l(M,S,k,S.type),c(M,S,k,S.type,{font:{color:z,size:R,family:F}}),u(M,S,k,{outerTicks:!0}),p(M,S,k,{dfltColor:D,bgColor:o.bgColor,blend:60,showLine:!0,showGrid:!0,noZeroLine:!0,attributes:v[_]}),k(\\\"layer\\\"),\\\"radialaxis\\\"===_&&(k(\\\"side\\\"),k(\\\"angle\\\",x[0]),k(\\\"title.text\\\"),n.coerceFont(k,\\\"title.font\\\",{color:z,size:n.bigFont(R),family:F}))}\\\"category\\\"!==L&&k(\\\"hoverformat\\\"),S._input=M}\\\"category\\\"===e.angularaxis.type&&r(\\\"gridshape\\\")}function b(t,e,r,n,i,a){var o=r(\\\"autotypenumbers\\\",a.autotypenumbersDflt);if(\\\"-\\\"===r(\\\"type\\\")){for(var s,l=0;l<n.length;l++)if(n[l].visible){s=n[l];break}s&&s[i]&&(e.type=d(s[i],\\\"gregorian\\\",{noMultiCategory:!0,autotypenumbers:o})),\\\"-\\\"===e.type?e.type=\\\"linear\\\":t.type=e.type}return e.type}t.exports=function(t,e,r){o(t,e,r,{type:y.name,attributes:v,handleDefaults:x,font:e.font,autotypenumbersDflt:e.autotypenumbers,paper_bgcolor:e.paper_bgcolor,fullData:r,layoutOut:e})}},77997:function(t,e,r){\\\"use strict\\\";var n=r(39898),i=r(84267),a=r(73972),o=r(71828),s=o.strRotate,l=o.strTranslate,u=r(7901),c=r(91424),f=r(74875),h=r(89298),p=r(21994),d=r(12101),v=r(71739).doAutoRange,g=r(29323),y=r(28569),m=r(30211),x=r(92998),b=r(47322).prepSelect,_=r(47322).selectOnClick,w=r(47322).clearOutline,T=r(6964),k=r(33306),A=r(61549).redrawReglTraces,M=r(18783).MID_SHIFT,S=r(9813),E=r(10869),L=r(23893),C=L.smith,P=L.reactanceArc,O=L.resistanceArc,I=L.smithTransform,D=o._,z=o.mod,R=o.deg2rad,F=o.rad2deg;function B(t,e,r){this.isSmith=r||!1,this.id=e,this.gd=t,this._hasClipOnAxisFalse=null,this.vangles=null,this.radialAxisAngle=null,this.traceHash={},this.layers={},this.clipPaths={},this.clipIds={},this.viewInitial={};var n=t._fullLayout,i=\\\"clip\\\"+n._uid+e;this.clipIds.forTraces=i+\\\"-for-traces\\\",this.clipPaths.forTraces=n._clips.append(\\\"clipPath\\\").attr(\\\"id\\\",this.clipIds.forTraces),this.clipPaths.forTraces.append(\\\"path\\\"),this.framework=n[\\\"_\\\"+(r?\\\"smith\\\":\\\"polar\\\")+\\\"layer\\\"].append(\\\"g\\\").attr(\\\"class\\\",e),this.getHole=function(t){return this.isSmith?0:t.hole},this.getSector=function(t){return this.isSmith?[0,360]:t.sector},this.getRadial=function(t){return this.isSmith?t.realaxis:t.radialaxis},this.getAngular=function(t){return this.isSmith?t.imaginaryaxis:t.angularaxis},r||(this.radialTickLayout=null,this.angularTickLayout=null)}var N=B.prototype;function j(t){var e=t.ticks+String(t.ticklen)+String(t.showticklabels);return\\\"side\\\"in t&&(e+=t.side),e}function U(t,e){return e[o.findIndexOfMin(e,(function(e){return o.angleDist(t,e)}))]}function V(t,e,r){return e?(t.attr(\\\"display\\\",null),t.attr(r)):t&&t.attr(\\\"display\\\",\\\"none\\\"),t}t.exports=function(t,e,r){return new B(t,e,r)},N.plot=function(t,e){for(var r=this,n=e[r.id],i=!1,a=0;a<t.length;a++)if(!1===t[a][0].trace.cliponaxis){i=!0;break}r._hasClipOnAxisFalse=i,r.updateLayers(e,n),r.updateLayout(e,n),f.generalUpdatePerTraceModule(r.gd,r,t,n),r.updateFx(e,n),r.isSmith&&(delete n.realaxis.range,delete n.imaginaryaxis.range)},N.updateLayers=function(t,e){var r=this,i=r.isSmith,a=r.layers,o=r.getRadial(e),s=r.getAngular(e),l=S.layerNames,u=l.indexOf(\\\"frontplot\\\"),c=l.slice(0,u),f=\\\"below traces\\\"===s.layer,h=\\\"below traces\\\"===o.layer;f&&c.push(\\\"angular-line\\\"),h&&c.push(\\\"radial-line\\\"),f&&c.push(\\\"angular-axis\\\"),h&&c.push(\\\"radial-axis\\\"),c.push(\\\"frontplot\\\"),f||c.push(\\\"angular-line\\\"),h||c.push(\\\"radial-line\\\"),f||c.push(\\\"angular-axis\\\"),h||c.push(\\\"radial-axis\\\");var p=(i?\\\"smith\\\":\\\"polar\\\")+\\\"sublayer\\\",d=r.framework.selectAll(\\\".\\\"+p).data(c,String);d.enter().append(\\\"g\\\").attr(\\\"class\\\",(function(t){return p+\\\" \\\"+t})).each((function(t){var e=a[t]=n.select(this);switch(t){case\\\"frontplot\\\":i||e.append(\\\"g\\\").classed(\\\"barlayer\\\",!0),e.append(\\\"g\\\").classed(\\\"scatterlayer\\\",!0);break;case\\\"backplot\\\":e.append(\\\"g\\\").classed(\\\"maplayer\\\",!0);break;case\\\"plotbg\\\":a.bg=e.append(\\\"path\\\");break;case\\\"radial-grid\\\":case\\\"angular-grid\\\":e.style(\\\"fill\\\",\\\"none\\\");break;case\\\"radial-line\\\":e.append(\\\"line\\\").style(\\\"fill\\\",\\\"none\\\");break;case\\\"angular-line\\\":e.append(\\\"path\\\").style(\\\"fill\\\",\\\"none\\\")}})),d.order()},N.updateLayout=function(t,e){var r=this,n=r.layers,i=t._size,a=r.getRadial(e),o=r.getAngular(e),s=e.domain.x,f=e.domain.y;r.xOffset=i.l+i.w*s[0],r.yOffset=i.t+i.h*(1-f[1]);var h=r.xLength=i.w*(s[1]-s[0]),p=r.yLength=i.h*(f[1]-f[0]),d=r.getSector(e);r.sectorInRad=d.map(R);var v,g,y,m,x,b=r.sectorBBox=function(t){var e,r=t[0],n=t[1]-r,i=z(r,360),a=i+n,o=Math.cos(R(i)),s=Math.sin(R(i)),l=Math.cos(R(a)),u=Math.sin(R(a));return e=i<=90&&a>=90||i>90&&a>=450?1:s<=0&&u<=0?0:Math.max(s,u),[i<=180&&a>=180||i>180&&a>=540?-1:o>=0&&l>=0?0:Math.min(o,l),i<=270&&a>=270||i>270&&a>=630?-1:s>=0&&u>=0?0:Math.min(s,u),a>=360?1:o<=0&&l<=0?0:Math.max(o,l),e]}(d),_=b[2]-b[0],w=b[3]-b[1],T=p/h,k=Math.abs(w/_);T>k?(v=h,x=(p-(g=h*k))/i.h/2,y=[s[0],s[1]],m=[f[0]+x,f[1]-x]):(g=p,x=(h-(v=p/k))/i.w/2,y=[s[0]+x,s[1]-x],m=[f[0],f[1]]),r.xLength2=v,r.yLength2=g,r.xDomain2=y,r.yDomain2=m;var A,M=r.xOffset2=i.l+i.w*y[0],S=r.yOffset2=i.t+i.h*(1-m[1]),E=r.radius=v/_,L=r.innerRadius=r.getHole(e)*E,C=r.cx=M-E*b[0],P=r.cy=S+E*b[3],O=r.cxx=C-M,I=r.cyy=P-S,D=a.side;\\\"counterclockwise\\\"===D?(A=D,D=\\\"top\\\"):\\\"clockwise\\\"===D&&(A=D,D=\\\"bottom\\\"),r.radialAxis=r.mockAxis(t,e,a,{_id:\\\"x\\\",side:D,_trueSide:A,domain:[L/i.w,E/i.w]}),r.angularAxis=r.mockAxis(t,e,o,{side:\\\"right\\\",domain:[0,Math.PI],autorange:!1}),r.doAutoRange(t,e),r.updateAngularAxis(t,e),r.updateRadialAxis(t,e),r.updateRadialAxisTitle(t,e),r.xaxis=r.mockCartesianAxis(t,e,{_id:\\\"x\\\",domain:y}),r.yaxis=r.mockCartesianAxis(t,e,{_id:\\\"y\\\",domain:m});var F=r.pathSubplot();r.clipPaths.forTraces.select(\\\"path\\\").attr(\\\"d\\\",F).attr(\\\"transform\\\",l(O,I)),n.frontplot.attr(\\\"transform\\\",l(M,S)).call(c.setClipUrl,r._hasClipOnAxisFalse?null:r.clipIds.forTraces,r.gd),n.bg.attr(\\\"d\\\",F).attr(\\\"transform\\\",l(C,P)).call(u.fill,e.bgcolor)},N.mockAxis=function(t,e,r,n){var i=o.extendFlat({},r,n);return d(i,e,t),i},N.mockCartesianAxis=function(t,e,r){var n=this,i=n.isSmith,a=r._id,s=o.extendFlat({type:\\\"linear\\\"},r);p(s,t);var l={x:[0,2],y:[1,3]};return s.setRange=function(){var t=n.sectorBBox,r=l[a],i=n.radialAxis._rl,o=(i[1]-i[0])/(1-n.getHole(e));s.range=[t[r[0]]*o,t[r[1]]*o]},s.isPtWithinRange=\\\"x\\\"!==a||i?function(){return!0}:function(t){return n.isPtInside(t)},s.setRange(),s.setScale(),s},N.doAutoRange=function(t,e){var r=this,n=r.gd,i=r.radialAxis,a=r.getRadial(e);v(n,i);var o=i.range;a.range=o.slice(),a._input.range=o.slice(),i._rl=[i.r2l(o[0],null,\\\"gregorian\\\"),i.r2l(o[1],null,\\\"gregorian\\\")]},N.updateRadialAxis=function(t,e){var r=this,n=r.gd,i=r.layers,a=r.radius,c=r.innerRadius,f=r.cx,p=r.cy,d=r.getRadial(e),v=z(r.getSector(e)[0],360),g=r.radialAxis,y=c<a,m=r.isSmith;m||(r.fillViewInitialKey(\\\"radialaxis.angle\\\",d.angle),r.fillViewInitialKey(\\\"radialaxis.range\\\",g.range.slice()),g.setGeometry()),\\\"auto\\\"===g.tickangle&&v>90&&v<=270&&(g.tickangle=180);var x=m?function(t){var e=I(r,C([t.x,0]));return l(e[0]-f,e[1]-p)}:function(t){return l(g.l2p(t.x)+c,0)},b=m?function(t){return O(r,t.x,-1/0,1/0)}:function(t){return r.pathArc(g.r2p(t.x)+c)},_=j(d);if(r.radialTickLayout!==_&&(i[\\\"radial-axis\\\"].selectAll(\\\".xtick\\\").remove(),r.radialTickLayout=_),y){g.setScale();var w=0,T=m?(g.tickvals||[]).filter((function(t){return t>=0})).map((function(t){return h.tickText(g,t,!0,!1)})):h.calcTicks(g),k=m?T:h.clipEnds(g,T),A=h.getTickSigns(g)[2];m&&((\\\"top\\\"===g.ticks&&\\\"bottom\\\"===g.side||\\\"bottom\\\"===g.ticks&&\\\"top\\\"===g.side)&&(A=-A),\\\"top\\\"===g.ticks&&\\\"top\\\"===g.side&&(w=-g.ticklen),\\\"bottom\\\"===g.ticks&&\\\"bottom\\\"===g.side&&(w=g.ticklen)),h.drawTicks(n,g,{vals:T,layer:i[\\\"radial-axis\\\"],path:h.makeTickPath(g,0,A),transFn:x,crisp:!1}),h.drawGrid(n,g,{vals:k,layer:i[\\\"radial-grid\\\"],path:b,transFn:o.noop,crisp:!1}),h.drawLabels(n,g,{vals:T,layer:i[\\\"radial-axis\\\"],transFn:x,labelFns:h.makeLabelFns(g,w)})}var M=r.radialAxisAngle=r.vangles?F(U(R(d.angle),r.vangles)):d.angle,S=l(f,p),E=S+s(-M);V(i[\\\"radial-axis\\\"],y&&(d.showticklabels||d.ticks),{transform:E}),V(i[\\\"radial-grid\\\"],y&&d.showgrid,{transform:m?\\\"\\\":S}),V(i[\\\"radial-line\\\"].select(\\\"line\\\"),y&&d.showline,{x1:m?-a:c,y1:0,x2:a,y2:0,transform:E}).attr(\\\"stroke-width\\\",d.linewidth).call(u.stroke,d.linecolor)},N.updateRadialAxisTitle=function(t,e,r){if(!this.isSmith){var n=this,i=n.gd,a=n.radius,o=n.cx,s=n.cy,l=n.getRadial(e),u=n.id+\\\"title\\\",f=0;if(l.title){var h=c.bBox(n.layers[\\\"radial-axis\\\"].node()).height,p=l.title.font.size,d=l.side;f=\\\"top\\\"===d?p:\\\"counterclockwise\\\"===d?-(h+.4*p):h+.8*p}var v=void 0!==r?r:n.radialAxisAngle,g=R(v),y=Math.cos(g),m=Math.sin(g),b=o+a/2*y+f*m,_=s-a/2*m+f*y;n.layers[\\\"radial-axis-title\\\"]=x.draw(i,u,{propContainer:l,propName:n.id+\\\".radialaxis.title\\\",placeholder:D(i,\\\"Click to enter radial axis title\\\"),attributes:{x:b,y:_,\\\"text-anchor\\\":\\\"middle\\\"},transform:{rotate:-v}})}},N.updateAngularAxis=function(t,e){var r=this,n=r.gd,i=r.layers,a=r.radius,c=r.innerRadius,f=r.cx,p=r.cy,d=r.getAngular(e),v=r.angularAxis,g=r.isSmith;g||(r.fillViewInitialKey(\\\"angularaxis.rotation\\\",d.rotation),v.setGeometry(),v.setScale());var y=g?function(t){var e=I(r,C([0,t.x]));return Math.atan2(e[0]-f,e[1]-p)-Math.PI/2}:function(t){return v.t2g(t.x)};\\\"linear\\\"===v.type&&\\\"radians\\\"===v.thetaunit&&(v.tick0=F(v.tick0),v.dtick=F(v.dtick));var m=function(t){return l(f+a*Math.cos(t),p-a*Math.sin(t))},x=g?function(t){var e=I(r,C([0,t.x]));return l(e[0],e[1])}:function(t){return m(y(t))},b=g?function(t){var e=I(r,C([0,t.x])),n=Math.atan2(e[0]-f,e[1]-p)-Math.PI/2;return l(e[0],e[1])+s(-F(n))}:function(t){var e=y(t);return m(e)+s(-F(e))},_=g?function(t){return P(r,t.x,0,1/0)}:function(t){var e=y(t),r=Math.cos(e),n=Math.sin(e);return\\\"M\\\"+[f+c*r,p-c*n]+\\\"L\\\"+[f+a*r,p-a*n]},w=h.makeLabelFns(v,0).labelStandoff,T={xFn:function(t){var e=y(t);return Math.cos(e)*w},yFn:function(t){var e=y(t),r=Math.sin(e)>0?.2:1;return-Math.sin(e)*(w+t.fontSize*r)+Math.abs(Math.cos(e))*(t.fontSize*M)},anchorFn:function(t){var e=y(t),r=Math.cos(e);return Math.abs(r)<.1?\\\"middle\\\":r>0?\\\"start\\\":\\\"end\\\"},heightFn:function(t,e,r){var n=y(t);return-.5*(1+Math.sin(n))*r}},k=j(d);r.angularTickLayout!==k&&(i[\\\"angular-axis\\\"].selectAll(\\\".\\\"+v._id+\\\"tick\\\").remove(),r.angularTickLayout=k);var A,S=g?[1/0].concat(v.tickvals||[]).map((function(t){return h.tickText(v,t,!0,!1)})):h.calcTicks(v);if(g&&(S[0].text=\\\"∞\\\",S[0].fontSize*=1.75),\\\"linear\\\"===e.gridshape?(A=S.map(y),o.angleDelta(A[0],A[1])<0&&(A=A.slice().reverse())):A=null,r.vangles=A,\\\"category\\\"===v.type&&(S=S.filter((function(t){return o.isAngleInsideSector(y(t),r.sectorInRad)}))),v.visible){var E=\\\"inside\\\"===v.ticks?-1:1,L=(v.linewidth||1)/2;h.drawTicks(n,v,{vals:S,layer:i[\\\"angular-axis\\\"],path:\\\"M\\\"+E*L+\\\",0h\\\"+E*v.ticklen,transFn:b,crisp:!1}),h.drawGrid(n,v,{vals:S,layer:i[\\\"angular-grid\\\"],path:_,transFn:o.noop,crisp:!1}),h.drawLabels(n,v,{vals:S,layer:i[\\\"angular-axis\\\"],repositionOnUpdate:!0,transFn:x,labelFns:T})}V(i[\\\"angular-line\\\"].select(\\\"path\\\"),d.showline,{d:r.pathSubplot(),transform:l(f,p)}).attr(\\\"stroke-width\\\",d.linewidth).call(u.stroke,d.linecolor)},N.updateFx=function(t,e){this.gd._context.staticPlot||(!this.isSmith&&(this.updateAngularDrag(t),this.updateRadialDrag(t,e,0),this.updateRadialDrag(t,e,1)),this.updateHoverAndMainDrag(t))},N.updateHoverAndMainDrag=function(t){var e,r,s=this,u=s.isSmith,c=s.gd,f=s.layers,h=t._zoomlayer,p=S.MINZOOM,d=S.OFFEDGE,v=s.radius,x=s.innerRadius,T=s.cx,k=s.cy,A=s.cxx,M=s.cyy,L=s.sectorInRad,C=s.vangles,P=s.radialAxis,O=E.clampTiny,I=E.findXYatLength,D=E.findEnclosingVertexAngles,z=S.cornerHalfWidth,R=S.cornerLen/2,F=g.makeDragger(f,\\\"path\\\",\\\"maindrag\\\",!1===t.dragmode?\\\"none\\\":\\\"crosshair\\\");n.select(F).attr(\\\"d\\\",s.pathSubplot()).attr(\\\"transform\\\",l(T,k)),F.onmousemove=function(t){m.hover(c,t,s.id),c._fullLayout._lasthover=F,c._fullLayout._hoversubplot=s.id},F.onmouseout=function(t){c._dragging||y.unhover(c,t)};var B,N,j,U,V,H,q,G,Z,Y={element:F,gd:c,subplot:s.id,plotinfo:{id:s.id,xaxis:s.xaxis,yaxis:s.yaxis},xaxes:[s.xaxis],yaxes:[s.yaxis]};function W(t,e){return Math.sqrt(t*t+e*e)}function X(t,e){return W(t-A,e-M)}function J(t,e){return Math.atan2(M-e,t-A)}function K(t,e){return[t*Math.cos(e),t*Math.sin(-e)]}function $(t,e){if(0===t)return s.pathSector(2*z);var r=R/t,n=e-r,i=e+r,a=Math.max(0,Math.min(t,v)),o=a-z,l=a+z;return\\\"M\\\"+K(o,n)+\\\"A\\\"+[o,o]+\\\" 0,0,0 \\\"+K(o,i)+\\\"L\\\"+K(l,i)+\\\"A\\\"+[l,l]+\\\" 0,0,1 \\\"+K(l,n)+\\\"Z\\\"}function Q(t,e,r){if(0===t)return s.pathSector(2*z);var n,i,a=K(t,e),o=K(t,r),l=O((a[0]+o[0])/2),u=O((a[1]+o[1])/2);if(l&&u){var c=u/l,f=-1/c,h=I(z,c,l,u);n=I(R,f,h[0][0],h[0][1]),i=I(R,f,h[1][0],h[1][1])}else{var p,d;u?(p=R,d=z):(p=z,d=R),n=[[l-p,u-d],[l+p,u-d]],i=[[l-p,u+d],[l+p,u+d]]}return\\\"M\\\"+n.join(\\\"L\\\")+\\\"L\\\"+i.reverse().join(\\\"L\\\")+\\\"Z\\\"}function tt(t,e){return e=Math.max(Math.min(e,v),x),t<d?t=0:v-t<d?t=v:e<d?e=0:v-e<d&&(e=v),Math.abs(e-t)>p?(t<e?(j=t,U=e):(j=e,U=t),!0):(j=null,U=null,!1)}function et(t,e){t=t||V,e=e||\\\"M0,0Z\\\",G.attr(\\\"d\\\",t),Z.attr(\\\"d\\\",e),g.transitionZoombox(G,Z,H,q),H=!0;var r={};ot(r),c.emit(\\\"plotly_relayouting\\\",r)}function rt(t,n){var i,a,o=B+(t*=e),l=N+(n*=r),u=X(B,N),c=Math.min(X(o,l),v),f=J(B,N);tt(u,c)&&(i=V+s.pathSector(U),j&&(i+=s.pathSector(j)),a=$(j,f)+$(U,f)),et(i,a)}function nt(t,e,r,n){var i=E.findIntersectionXY(r,n,r,[t-A,M-e]);return W(i[0],i[1])}function it(t,e){var r,n,i=B+t,a=N+e,o=J(B,N),l=J(i,a),u=D(o,C),c=D(l,C);tt(nt(B,N,u[0],u[1]),Math.min(nt(i,a,c[0],c[1]),v))&&(r=V+s.pathSector(U),j&&(r+=s.pathSector(j)),n=[Q(j,u[0],u[1]),Q(U,u[0],u[1])].join(\\\" \\\")),et(r,n)}function at(){if(g.removeZoombox(c),null!==j&&null!==U){var t={};ot(t),g.showDoubleClickNotifier(c),a.call(\\\"_guiRelayout\\\",c,t)}}function ot(t){var e=P._rl,r=(e[1]-e[0])/(1-x/v)/v,n=[e[0]+(j-x)*r,e[0]+(U-x)*r];t[s.id+\\\".radialaxis.range\\\"]=n}function st(t,e){var r=c._fullLayout.clickmode;if(g.removeZoombox(c),2===t){var n={};for(var i in s.viewInitial)n[s.id+\\\".\\\"+i]=s.viewInitial[i];c.emit(\\\"plotly_doubleclick\\\",null),a.call(\\\"_guiRelayout\\\",c,n)}r.indexOf(\\\"select\\\")>-1&&1===t&&_(e,c,[s.xaxis],[s.yaxis],s.id,Y),r.indexOf(\\\"event\\\")>-1&&m.click(c,e,s.id)}Y.prepFn=function(t,n,a){var l=c._fullLayout.dragmode,f=F.getBoundingClientRect();c._fullLayout._calcInverseTransform(c);var p=c._fullLayout._invTransform;e=c._fullLayout._invScaleX,r=c._fullLayout._invScaleY;var d=o.apply3DTransform(p)(n-f.left,a-f.top);if(B=d[0],N=d[1],C){var y=E.findPolygonOffset(v,L[0],L[1],C);B+=A+y[0],N+=M+y[1]}switch(l){case\\\"zoom\\\":Y.clickFn=st,u||(Y.moveFn=C?it:rt,Y.doneFn=at,function(){j=null,U=null,V=s.pathSubplot(),H=!1;var t=c._fullLayout[s.id];q=i(t.bgcolor).getLuminance(),(G=g.makeZoombox(h,q,T,k,V)).attr(\\\"fill-rule\\\",\\\"evenodd\\\"),Z=g.makeCorners(h,T,k),w(c)}());break;case\\\"select\\\":case\\\"lasso\\\":b(t,n,a,Y,l)}},y.init(Y)},N.updateRadialDrag=function(t,e,r){var i=this,u=i.gd,c=i.layers,f=i.radius,h=i.innerRadius,p=i.cx,d=i.cy,v=i.radialAxis,m=S.radialDragBoxSize,x=m/2;if(v.visible){var b,_,T,M=R(i.radialAxisAngle),E=v._rl,L=E[0],C=E[1],P=E[r],O=.75*(E[1]-E[0])/(1-i.getHole(e))/f;r?(b=p+(f+x)*Math.cos(M),_=d-(f+x)*Math.sin(M),T=\\\"radialdrag\\\"):(b=p+(h-x)*Math.cos(M),_=d-(h-x)*Math.sin(M),T=\\\"radialdrag-inner\\\");var I,D,z,B=g.makeRectDragger(c,T,\\\"crosshair\\\",-x,-x,m,m),N={element:B,gd:u};!1===t.dragmode&&(N.dragmode=!1),V(n.select(B),v.visible&&h<f,{transform:l(b,_)}),N.prepFn=function(){I=null,D=null,z=null,N.moveFn=j,N.doneFn=H,w(u)},N.clampFn=function(t,e){return Math.sqrt(t*t+e*e)<S.MINDRAG&&(t=0,e=0),[t,e]},y.init(N)}function j(t,e){if(I)I(t,e);else{var n=[t,-e],a=[Math.cos(M),Math.sin(M)],s=Math.abs(o.dot(n,a)/Math.sqrt(o.dot(n,n)));isNaN(s)||(I=s<.5?q:G)}var l={};!function(t){null!==D?t[i.id+\\\".radialaxis.angle\\\"]=D:null!==z&&(t[i.id+\\\".radialaxis.range[\\\"+r+\\\"]\\\"]=z)}(l),u.emit(\\\"plotly_relayouting\\\",l)}function H(){null!==D?a.call(\\\"_guiRelayout\\\",u,i.id+\\\".radialaxis.angle\\\",D):null!==z&&a.call(\\\"_guiRelayout\\\",u,i.id+\\\".radialaxis.range[\\\"+r+\\\"]\\\",z)}function q(t,e){if(0!==r){var n=b+t,a=_+e;D=Math.atan2(d-a,n-p),i.vangles&&(D=U(D,i.vangles)),D=F(D);var o=l(p,d)+s(-D);c[\\\"radial-axis\\\"].attr(\\\"transform\\\",o),c[\\\"radial-line\\\"].select(\\\"line\\\").attr(\\\"transform\\\",o);var u=i.gd._fullLayout,f=u[i.id];i.updateRadialAxisTitle(u,f,D)}}function G(t,e){var n=o.dot([t,-e],[Math.cos(M),Math.sin(M)]);if(z=P-O*n,O>0==(r?z>L:z<C)){var s=u._fullLayout,l=s[i.id];v.range[r]=z,v._rl[r]=z,i.updateRadialAxis(s,l),i.xaxis.setRange(),i.xaxis.setScale(),i.yaxis.setRange(),i.yaxis.setScale();var c=!1;for(var f in i.traceHash){var h=i.traceHash[f],p=o.filterVisible(h);h[0][0].trace._module.plot(u,i,p,l),a.traceIs(f,\\\"gl\\\")&&p.length&&(c=!0)}c&&(k(u),A(u))}else z=null}},N.updateAngularDrag=function(t){var e=this,r=e.gd,i=e.layers,u=e.radius,f=e.angularAxis,h=e.cx,p=e.cy,d=e.cxx,v=e.cyy,m=S.angularDragBoxSize,x=g.makeDragger(i,\\\"path\\\",\\\"angulardrag\\\",!1===t.dragmode?\\\"none\\\":\\\"move\\\"),b={element:x,gd:r};function _(t,e){return Math.atan2(v+m-e,t-d-m)}!1===t.dragmode?b.dragmode=!1:n.select(x).attr(\\\"d\\\",e.pathAnnulus(u,u+m)).attr(\\\"transform\\\",l(h,p)).call(T,\\\"move\\\");var M,E,L,C,P,O,I=i.frontplot.select(\\\".scatterlayer\\\").selectAll(\\\".trace\\\"),D=I.selectAll(\\\".point\\\"),z=I.selectAll(\\\".textpoint\\\");function R(u,g){var y=e.gd._fullLayout,m=y[e.id],x=_(M+u*t._invScaleX,E+g*t._invScaleY),b=F(x-O);if(C=L+b,i.frontplot.attr(\\\"transform\\\",l(e.xOffset2,e.yOffset2)+s([-b,d,v])),e.vangles){P=e.radialAxisAngle+b;var w=l(h,p)+s(-b),T=l(h,p)+s(-P);i.bg.attr(\\\"transform\\\",w),i[\\\"radial-grid\\\"].attr(\\\"transform\\\",w),i[\\\"radial-axis\\\"].attr(\\\"transform\\\",T),i[\\\"radial-line\\\"].select(\\\"line\\\").attr(\\\"transform\\\",T),e.updateRadialAxisTitle(y,m,P)}else e.clipPaths.forTraces.select(\\\"path\\\").attr(\\\"transform\\\",l(d,v)+s(b));D.each((function(){var t=n.select(this),e=c.getTranslate(t);t.attr(\\\"transform\\\",l(e.x,e.y)+s([b]))})),z.each((function(){var t=n.select(this),e=t.select(\\\"text\\\"),r=c.getTranslate(t);t.attr(\\\"transform\\\",s([b,e.attr(\\\"x\\\"),e.attr(\\\"y\\\")])+l(r.x,r.y))})),f.rotation=o.modHalf(C,360),e.updateAngularAxis(y,m),e._hasClipOnAxisFalse&&!o.isFullCircle(e.sectorInRad)&&I.call(c.hideOutsideRangePoints,e);var S=!1;for(var R in e.traceHash)if(a.traceIs(R,\\\"gl\\\")){var N=e.traceHash[R],j=o.filterVisible(N);N[0][0].trace._module.plot(r,e,j,m),j.length&&(S=!0)}S&&(k(r),A(r));var U={};B(U),r.emit(\\\"plotly_relayouting\\\",U)}function B(t){t[e.id+\\\".angularaxis.rotation\\\"]=C,e.vangles&&(t[e.id+\\\".radialaxis.angle\\\"]=P)}function N(){z.select(\\\"text\\\").attr(\\\"transform\\\",null);var t={};B(t),a.call(\\\"_guiRelayout\\\",r,t)}b.prepFn=function(n,i,a){var s=t[e.id];L=s.angularaxis.rotation;var l=x.getBoundingClientRect();M=i-l.left,E=a-l.top,r._fullLayout._calcInverseTransform(r);var u=o.apply3DTransform(t._invTransform)(M,E);M=u[0],E=u[1],O=_(M,E),b.moveFn=R,b.doneFn=N,w(r)},e.vangles&&!o.isFullCircle(e.sectorInRad)&&(b.prepFn=o.noop,T(n.select(x),null)),y.init(b)},N.isPtInside=function(t){if(this.isSmith)return!0;var e=this.sectorInRad,r=this.vangles,n=this.angularAxis.c2g(t.theta),i=this.radialAxis,a=i.c2l(t.r),s=i._rl;return(r?E.isPtInsidePolygon:o.isPtInsideSector)(a,n,s,e,r)},N.pathArc=function(t){var e=this.sectorInRad,r=this.vangles;return(r?E.pathPolygon:o.pathArc)(t,e[0],e[1],r)},N.pathSector=function(t){var e=this.sectorInRad,r=this.vangles;return(r?E.pathPolygon:o.pathSector)(t,e[0],e[1],r)},N.pathAnnulus=function(t,e){var r=this.sectorInRad,n=this.vangles;return(n?E.pathPolygonAnnulus:o.pathAnnulus)(t,e,r[0],r[1],n)},N.pathSubplot=function(){var t=this.innerRadius,e=this.radius;return t?this.pathAnnulus(t,e):this.pathSector(e)},N.fillViewInitialKey=function(t,e){t in this.viewInitial||(this.viewInitial[t]=e)}},12101:function(t,e,r){\\\"use strict\\\";var n=r(71828),i=r(21994),a=n.deg2rad,o=n.rad2deg;t.exports=function(t,e,r){switch(i(t,r),t._id){case\\\"x\\\":case\\\"radialaxis\\\":!function(t,e){var r=e._subplot;t.setGeometry=function(){var e=t._rl[0],n=t._rl[1],i=r.innerRadius,a=(r.radius-i)/(n-e),o=i/a,s=e>n?function(t){return t<=0}:function(t){return t>=0};t.c2g=function(r){var n=t.c2l(r)-e;return(s(n)?n:0)+o},t.g2c=function(r){return t.l2c(r+e-o)},t.g2p=function(t){return t*a},t.c2p=function(e){return t.g2p(t.c2g(e))}}}(t,e);break;case\\\"angularaxis\\\":!function(t,e){var r=t.type;if(\\\"linear\\\"===r){var i=t.d2c,s=t.c2d;t.d2c=function(t,e){return function(t,e){return\\\"degrees\\\"===e?a(t):t}(i(t),e)},t.c2d=function(t,e){return s(function(t,e){return\\\"degrees\\\"===e?o(t):t}(t,e))}}t.makeCalcdata=function(e,i){var a,o,s=e[i],l=e._length,u=function(r){return t.d2c(r,e.thetaunit)};if(s){if(n.isTypedArray(s)&&\\\"linear\\\"===r){if(l===s.length)return s;if(s.subarray)return s.subarray(0,l)}for(a=new Array(l),o=0;o<l;o++)a[o]=u(s[o])}else{var c=i+\\\"0\\\",f=\\\"d\\\"+i,h=c in e?u(e[c]):0,p=e[f]?u(e[f]):(t.period||2*Math.PI)/l;for(a=new Array(l),o=0;o<l;o++)a[o]=h+o*p}return a},t.setGeometry=function(){var i,s,l,u,c=e.sector,f=c.map(a),h={clockwise:-1,counterclockwise:1}[t.direction],p=a(t.rotation),d=function(t){return h*t+p},v=function(t){return(t-p)/h};switch(r){case\\\"linear\\\":s=i=n.identity,u=a,l=o,t.range=n.isFullCircle(f)?[c[0],c[0]+360]:f.map(v).map(o);break;case\\\"category\\\":var g=t._categories.length,y=t.period?Math.max(t.period,g):g;0===y&&(y=1),s=u=function(t){return 2*t*Math.PI/y},i=l=function(t){return t*y/Math.PI/2},t.range=[0,y]}t.c2g=function(t){return d(s(t))},t.g2c=function(t){return i(v(t))},t.t2g=function(t){return d(u(t))},t.g2t=function(t){return l(v(t))}}}(t,e)}}},39779:function(t){\\\"use strict\\\";t.exports={attr:\\\"subplot\\\",name:\\\"smith\\\",axisNames:[\\\"realaxis\\\",\\\"imaginaryaxis\\\"],axisName2dataArray:{imaginaryaxis:\\\"imag\\\",realaxis:\\\"real\\\"}}},23893:function(t){\\\"use strict\\\";function e(t){return t<0?-1:t>0?1:0}function r(t){var e=t[0],r=t[1];if(!isFinite(e)||!isFinite(r))return[1,0];var n=(e+1)*(e+1)+r*r;return[(e*e+r*r-1)/n,2*r/n]}function n(t,e){var r=e[0],n=e[1];return[r*t.radius+t.cx,-n*t.radius+t.cy]}function i(t,e){return e*t.radius}t.exports={smith:r,reactanceArc:function(t,e,a,o){var s=n(t,r([a,e])),l=s[0],u=s[1],c=n(t,r([o,e])),f=c[0],h=c[1];if(0===e)return[\\\"M\\\"+l+\\\",\\\"+u,\\\"L\\\"+f+\\\",\\\"+h].join(\\\" \\\");var p=i(t,1/Math.abs(e));return[\\\"M\\\"+l+\\\",\\\"+u,\\\"A\\\"+p+\\\",\\\"+p+\\\" 0 0,\\\"+(e<0?1:0)+\\\" \\\"+f+\\\",\\\"+h].join(\\\" \\\")},resistanceArc:function(t,a,o,s){var l=i(t,1/(a+1)),u=n(t,r([a,o])),c=u[0],f=u[1],h=n(t,r([a,s])),p=h[0],d=h[1];if(e(o)!==e(s)){var v=n(t,r([a,0]));return[\\\"M\\\"+c+\\\",\\\"+f,\\\"A\\\"+l+\\\",\\\"+l+\\\" 0 0,\\\"+(0<o?0:1)+\\\" \\\"+v[0]+\\\",\\\"+v[1],\\\"A\\\"+l+\\\",\\\"+l+\\\" 0 0,\\\"+(s<0?0:1)+p+\\\",\\\"+d].join(\\\" \\\")}return[\\\"M\\\"+c+\\\",\\\"+f,\\\"A\\\"+l+\\\",\\\"+l+\\\" 0 0,\\\"+(s<o?0:1)+\\\" \\\"+p+\\\",\\\"+d].join(\\\" \\\")},smithTransform:n}},7504:function(t,e,r){\\\"use strict\\\";var n=r(27659).AU,i=r(71828).counterRegex,a=r(77997),o=r(39779),s=o.attr,l=o.name,u=i(l),c={};c[s]={valType:\\\"subplotid\\\",dflt:l,editType:\\\"calc\\\"},t.exports={attr:s,name:l,idRoot:l,idRegex:u,attrRegex:u,attributes:c,layoutAttributes:r(33419),supplyLayoutDefaults:r(9558),plot:function(t){for(var e=t._fullLayout,r=t.calcdata,i=e._subplots[l],o=0;o<i.length;o++){var s=i[o],u=n(r,l,s),c=e[s]._subplot;c||(c=a(t,s,!0),e[s]._subplot=c),c.plot(u,e,t._promises)}},clean:function(t,e,r,n){for(var i=n._subplots[l]||[],a=0;a<i.length;a++){var o=i[a],s=n[o]._subplot;if(!e[o]&&s)for(var u in s.framework.remove(),s.clipPaths)s.clipPaths[u].remove()}},toSVG:r(93612).toSVG}},33419:function(t,e,r){\\\"use strict\\\";var n=r(22399),i=r(13838),a=r(27670).Y,o=r(71828).extendFlat,s=r(30962).overrideAll,l=s({color:i.color,showline:o({},i.showline,{dflt:!0}),linecolor:i.linecolor,linewidth:i.linewidth,showgrid:o({},i.showgrid,{dflt:!0}),gridcolor:i.gridcolor,gridwidth:i.gridwidth,griddash:i.griddash},\\\"plot\\\",\\\"from-root\\\"),u=s({ticklen:i.ticklen,tickwidth:o({},i.tickwidth,{dflt:2}),tickcolor:i.tickcolor,showticklabels:i.showticklabels,labelalias:i.labelalias,showtickprefix:i.showtickprefix,tickprefix:i.tickprefix,showticksuffix:i.showticksuffix,ticksuffix:i.ticksuffix,tickfont:i.tickfont,tickformat:i.tickformat,hoverformat:i.hoverformat,layer:i.layer},\\\"plot\\\",\\\"from-root\\\"),c=o({visible:o({},i.visible,{dflt:!0}),tickvals:{dflt:[.2,.5,1,2,5],valType:\\\"data_array\\\",editType:\\\"plot\\\"},tickangle:o({},i.tickangle,{dflt:90}),ticks:{valType:\\\"enumerated\\\",values:[\\\"top\\\",\\\"bottom\\\",\\\"\\\"],editType:\\\"ticks\\\"},side:{valType:\\\"enumerated\\\",values:[\\\"top\\\",\\\"bottom\\\"],dflt:\\\"top\\\",editType:\\\"plot\\\"},editType:\\\"calc\\\"},l,u),f=o({visible:o({},i.visible,{dflt:!0}),tickvals:{valType:\\\"data_array\\\",editType:\\\"plot\\\"},ticks:i.ticks,editType:\\\"calc\\\"},l,u);t.exports={domain:a({name:\\\"smith\\\",editType:\\\"plot\\\"}),bgcolor:{valType:\\\"color\\\",editType:\\\"plot\\\",dflt:n.background},realaxis:c,imaginaryaxis:f,editType:\\\"calc\\\"}},9558:function(t,e,r){\\\"use strict\\\";var n,i,a,o=r(71828),s=r(7901),l=r(44467),u=r(49119),c=r(27659).NG,f=r(89426),h=r(96115),p=r(92128),d=r(21994),v=r(33419),g=r(39779),y=g.axisNames,m=(n=function(t){return t.slice().reverse().map((function(t){return-t})).concat([0]).concat(t)},i=String,a={},function(t){var e=i?i(t):t;if(e in a)return a[e];var r=n(t);return a[e]=r,r});function x(t,e,r,n){var i=r(\\\"bgcolor\\\");n.bgColor=s.combine(i,n.paper_bgcolor);var a,u=c(n.fullData,g.name,n.id),x=n.layoutOut;function b(t,e){return r(a+\\\".\\\"+t,e)}for(var _=0;_<y.length;_++){a=y[_],o.isPlainObject(t[a])||(t[a]={});var w=t[a],T=l.newContainer(e,a);T._id=T._name=a,T._attr=n.id+\\\".\\\"+a,T._traceIndices=u.map((function(t){return t._expandedIndex}));var k=b(\\\"visible\\\");if(T.type=\\\"linear\\\",d(T,x),f(w,T,b,T.type),k){var A,M,S,E,L=\\\"realaxis\\\"===a;L&&b(\\\"side\\\"),L?b(\\\"tickvals\\\"):b(\\\"tickvals\\\",m(e.realaxis.tickvals||v.realaxis.tickvals.dflt));var C=n.font||{};k&&(M=(A=b(\\\"color\\\"))===w.color?A:C.color,S=C.size,E=C.family),h(w,T,b,T.type,{noTicklabelstep:!0,noAng:!L,noExp:!0,font:{color:M,size:S,family:E}}),o.coerce2(t,e,v,a+\\\".ticklen\\\"),o.coerce2(t,e,v,a+\\\".tickwidth\\\"),o.coerce2(t,e,v,a+\\\".tickcolor\\\",e.color),b(\\\"ticks\\\")||(delete e[a].ticklen,delete e[a].tickwidth,delete e[a].tickcolor),p(w,T,b,{dfltColor:A,bgColor:n.bgColor,blend:60,showLine:!0,showGrid:!0,noZeroLine:!0,attributes:v[a]}),b(\\\"layer\\\")}b(\\\"hoverformat\\\"),delete T.type,T._input=w}}t.exports=function(t,e,r){u(t,e,r,{noUirevision:!0,type:g.name,attributes:v,handleDefaults:x,font:e.font,paper_bgcolor:e.paper_bgcolor,fullData:r,layoutOut:e})}},49119:function(t,e,r){\\\"use strict\\\";var n=r(71828),i=r(44467),a=r(27670).c;t.exports=function(t,e,r,o){var s,l,u=o.type,c=o.attributes,f=o.handleDefaults,h=o.partition||\\\"x\\\",p=e._subplots[u],d=p.length,v=d&&p[0].replace(/\\\\d+$/,\\\"\\\");function g(t,e){return n.coerce(s,l,c,t,e)}for(var y=0;y<d;y++){var m=p[y];s=t[m]?t[m]:t[m]={},l=i.newContainer(e,m,v),o.noUirevision||g(\\\"uirevision\\\",e.uirevision);var x={};x[h]=[y/d,(y+1)/d],a(l,e,g,x),o.id=m,f(s,l,g,o)}}},5386:function(t,e,r){\\\"use strict\\\";var n=r(31562);function i(t){var e=t.description?\\\" \\\"+t.description:\\\"\\\",r=t.keys||[];if(r.length>0){for(var n=[],i=0;i<r.length;i++)n[i]=\\\"`\\\"+r[i]+\\\"`\\\";e+=\\\"Finally, the template string has access to \\\",e=1===r.length?e+\\\"variable \\\"+n[0]:e+\\\"variables \\\"+n.slice(0,-1).join(\\\", \\\")+\\\" and \\\"+n.slice(-1)+\\\".\\\"}return e}n.FORMAT_LINK,n.DATE_FORMAT_LINK,e.fF=function(t,e){t=t||{},i(e=e||{});var r={valType:\\\"string\\\",dflt:\\\"\\\",editType:t.editType||\\\"none\\\"};return!1!==t.arrayOk&&(r.arrayOk=!0),r},e.si=function(t,e){t=t||{},i(e=e||{});var r={valType:\\\"string\\\",dflt:\\\"\\\",editType:t.editType||\\\"calc\\\"};return!1!==t.arrayOk&&(r.arrayOk=!0),r},e.R=function(t,e){return e=e||{},(t=t||{}).newshape,i(e),{valType:\\\"string\\\",dflt:\\\"\\\",editType:t.editType||\\\"arraydraw\\\"}}},61639:function(t,e,r){\\\"use strict\\\";var n=r(64380),i=r(27659).AU,a=r(71828).counterRegex,o=\\\"ternary\\\";e.name=o;var s=e.attr=\\\"subplot\\\";e.idRoot=o,e.idRegex=e.attrRegex=a(o),(e.attributes={})[s]={valType:\\\"subplotid\\\",dflt:\\\"ternary\\\",editType:\\\"calc\\\"},e.layoutAttributes=r(81367),e.supplyLayoutDefaults=r(25369),e.plot=function(t){for(var e=t._fullLayout,r=t.calcdata,a=e._subplots[o],s=0;s<a.length;s++){var l=a[s],u=i(r,o,l),c=e[l]._subplot;c||(c=new n({id:l,graphDiv:t,container:e._ternarylayer.node()},e),e[l]._subplot=c),c.plot(u,e,t._promises)}},e.clean=function(t,e,r,n){for(var i=n._subplots[o]||[],a=0;a<i.length;a++){var s=i[a],l=n[s]._subplot;!e[s]&&l&&(l.plotContainer.remove(),l.clipDef.remove(),l.clipDefRelative.remove(),l.layers[\\\"a-title\\\"].remove(),l.layers[\\\"b-title\\\"].remove(),l.layers[\\\"c-title\\\"].remove())}}},81367:function(t,e,r){\\\"use strict\\\";var n=r(22399),i=r(27670).Y,a=r(13838),o=r(30962).overrideAll,s=r(1426).extendFlat,l={title:{text:a.title.text,font:a.title.font},color:a.color,tickmode:a.minor.tickmode,nticks:s({},a.nticks,{dflt:6,min:1}),tick0:a.tick0,dtick:a.dtick,tickvals:a.tickvals,ticktext:a.ticktext,ticks:a.ticks,ticklen:a.ticklen,tickwidth:a.tickwidth,tickcolor:a.tickcolor,ticklabelstep:a.ticklabelstep,showticklabels:a.showticklabels,labelalias:a.labelalias,showtickprefix:a.showtickprefix,tickprefix:a.tickprefix,showticksuffix:a.showticksuffix,ticksuffix:a.ticksuffix,showexponent:a.showexponent,exponentformat:a.exponentformat,minexponent:a.minexponent,separatethousands:a.separatethousands,tickfont:a.tickfont,tickangle:a.tickangle,tickformat:a.tickformat,tickformatstops:a.tickformatstops,hoverformat:a.hoverformat,showline:s({},a.showline,{dflt:!0}),linecolor:a.linecolor,linewidth:a.linewidth,showgrid:s({},a.showgrid,{dflt:!0}),gridcolor:a.gridcolor,gridwidth:a.gridwidth,griddash:a.griddash,layer:a.layer,min:{valType:\\\"number\\\",dflt:0,min:0},_deprecated:{title:a._deprecated.title,titlefont:a._deprecated.titlefont}},u=t.exports=o({domain:i({name:\\\"ternary\\\"}),bgcolor:{valType:\\\"color\\\",dflt:n.background},sum:{valType:\\\"number\\\",dflt:1,min:0},aaxis:l,baxis:l,caxis:l},\\\"plot\\\",\\\"from-root\\\");u.uirevision={valType:\\\"any\\\",editType:\\\"none\\\"},u.aaxis.uirevision=u.baxis.uirevision=u.caxis.uirevision={valType:\\\"any\\\",editType:\\\"none\\\"}},25369:function(t,e,r){\\\"use strict\\\";var n=r(7901),i=r(44467),a=r(71828),o=r(49119),s=r(96115),l=r(89426),u=r(38701),c=r(26218),f=r(92128),h=r(81367),p=[\\\"aaxis\\\",\\\"baxis\\\",\\\"caxis\\\"];function d(t,e,r,a){var o,s,l,u=r(\\\"bgcolor\\\"),c=r(\\\"sum\\\");a.bgColor=n.combine(u,a.paper_bgcolor);for(var f=0;f<p.length;f++)s=t[o=p[f]]||{},(l=i.newContainer(e,o))._name=o,v(s,l,a,e);var h=e.aaxis,d=e.baxis,g=e.caxis;h.min+d.min+g.min>=c&&(h.min=0,d.min=0,g.min=0,t.aaxis&&delete t.aaxis.min,t.baxis&&delete t.baxis.min,t.caxis&&delete t.caxis.min)}function v(t,e,r,n){var i=h[e._name];function o(r,n){return a.coerce(t,e,i,r,n)}o(\\\"uirevision\\\",n.uirevision),e.type=\\\"linear\\\";var p=o(\\\"color\\\"),d=p!==i.color.dflt?p:r.font.color,v=e._name.charAt(0).toUpperCase(),g=\\\"Component \\\"+v,y=o(\\\"title.text\\\",g);e._hovertitle=y===g?y:v,a.coerceFont(o,\\\"title.font\\\",{family:r.font.family,size:a.bigFont(r.font.size),color:d}),o(\\\"min\\\"),c(t,e,o,\\\"linear\\\"),l(t,e,o,\\\"linear\\\"),s(t,e,o,\\\"linear\\\"),u(t,e,o,{outerTicks:!0}),o(\\\"showticklabels\\\")&&(a.coerceFont(o,\\\"tickfont\\\",{family:r.font.family,size:r.font.size,color:d}),o(\\\"tickangle\\\"),o(\\\"tickformat\\\")),f(t,e,o,{dfltColor:p,bgColor:r.bgColor,blend:60,showLine:!0,showGrid:!0,noZeroLine:!0,attributes:i}),o(\\\"hoverformat\\\"),o(\\\"layer\\\")}t.exports=function(t,e,r){o(t,e,r,{type:\\\"ternary\\\",attributes:h,handleDefaults:d,font:e.font,paper_bgcolor:e.paper_bgcolor})}},64380:function(t,e,r){\\\"use strict\\\";var n=r(39898),i=r(84267),a=r(73972),o=r(71828),s=o.strTranslate,l=o._,u=r(7901),c=r(91424),f=r(21994),h=r(1426).extendFlat,p=r(74875),d=r(89298),v=r(28569),g=r(30211),y=r(64505),m=y.freeMode,x=y.rectMode,b=r(92998),_=r(47322).prepSelect,w=r(47322).selectOnClick,T=r(47322).clearOutline,k=r(47322).clearSelectionsCache,A=r(85555);function M(t,e){this.id=t.id,this.graphDiv=t.graphDiv,this.init(e),this.makeFramework(e),this.aTickLayout=null,this.bTickLayout=null,this.cTickLayout=null}t.exports=M;var S=M.prototype;S.init=function(t){this.container=t._ternarylayer,this.defs=t._defs,this.layoutId=t._uid,this.traceHash={},this.layers={}},S.plot=function(t,e){var r=this,n=e[r.id],i=e._size;r._hasClipOnAxisFalse=!1;for(var a=0;a<t.length;a++)if(!1===t[a][0].trace.cliponaxis){r._hasClipOnAxisFalse=!0;break}r.updateLayers(n),r.adjustLayout(n,i),p.generalUpdatePerTraceModule(r.graphDiv,r,t,n),r.layers.plotbg.select(\\\"path\\\").call(u.fill,n.bgcolor)},S.makeFramework=function(t){var e=this,r=e.graphDiv,n=t[e.id],i=e.clipId=\\\"clip\\\"+e.layoutId+e.id,a=e.clipIdRelative=\\\"clip-relative\\\"+e.layoutId+e.id;e.clipDef=o.ensureSingleById(t._clips,\\\"clipPath\\\",i,(function(t){t.append(\\\"path\\\").attr(\\\"d\\\",\\\"M0,0Z\\\")})),e.clipDefRelative=o.ensureSingleById(t._clips,\\\"clipPath\\\",a,(function(t){t.append(\\\"path\\\").attr(\\\"d\\\",\\\"M0,0Z\\\")})),e.plotContainer=o.ensureSingle(e.container,\\\"g\\\",e.id),e.updateLayers(n),c.setClipUrl(e.layers.backplot,i,r),c.setClipUrl(e.layers.grids,i,r)},S.updateLayers=function(t){var e=this.layers,r=[\\\"draglayer\\\",\\\"plotbg\\\",\\\"backplot\\\",\\\"grids\\\"];\\\"below traces\\\"===t.aaxis.layer&&r.push(\\\"aaxis\\\",\\\"aline\\\"),\\\"below traces\\\"===t.baxis.layer&&r.push(\\\"baxis\\\",\\\"bline\\\"),\\\"below traces\\\"===t.caxis.layer&&r.push(\\\"caxis\\\",\\\"cline\\\"),r.push(\\\"frontplot\\\"),\\\"above traces\\\"===t.aaxis.layer&&r.push(\\\"aaxis\\\",\\\"aline\\\"),\\\"above traces\\\"===t.baxis.layer&&r.push(\\\"baxis\\\",\\\"bline\\\"),\\\"above traces\\\"===t.caxis.layer&&r.push(\\\"caxis\\\",\\\"cline\\\");var i=this.plotContainer.selectAll(\\\"g.toplevel\\\").data(r,String),a=[\\\"agrid\\\",\\\"bgrid\\\",\\\"cgrid\\\"];i.enter().append(\\\"g\\\").attr(\\\"class\\\",(function(t){return\\\"toplevel \\\"+t})).each((function(t){var r=n.select(this);e[t]=r,\\\"frontplot\\\"===t?r.append(\\\"g\\\").classed(\\\"scatterlayer\\\",!0):\\\"backplot\\\"===t?r.append(\\\"g\\\").classed(\\\"maplayer\\\",!0):\\\"plotbg\\\"===t?r.append(\\\"path\\\").attr(\\\"d\\\",\\\"M0,0Z\\\"):\\\"aline\\\"===t||\\\"bline\\\"===t||\\\"cline\\\"===t?r.append(\\\"path\\\"):\\\"grids\\\"===t&&a.forEach((function(t){e[t]=r.append(\\\"g\\\").classed(\\\"grid \\\"+t,!0)}))})),i.order()};var E=Math.sqrt(4/3);S.adjustLayout=function(t,e){var r,n,i,a,o,l,p=this,d=t.domain,v=(d.x[0]+d.x[1])/2,g=(d.y[0]+d.y[1])/2,y=d.x[1]-d.x[0],m=d.y[1]-d.y[0],x=y*e.w,b=m*e.h,_=t.sum,w=t.aaxis.min,T=t.baxis.min,k=t.caxis.min;x>E*b?i=(a=b)*E:a=(i=x)/E,o=y*i/x,l=m*a/b,r=e.l+e.w*v-i/2,n=e.t+e.h*(1-g)-a/2,p.x0=r,p.y0=n,p.w=i,p.h=a,p.sum=_,p.xaxis={type:\\\"linear\\\",range:[w+2*k-_,_-w-2*T],domain:[v-o/2,v+o/2],_id:\\\"x\\\"},f(p.xaxis,p.graphDiv._fullLayout),p.xaxis.setScale(),p.xaxis.isPtWithinRange=function(t){return t.a>=p.aaxis.range[0]&&t.a<=p.aaxis.range[1]&&t.b>=p.baxis.range[1]&&t.b<=p.baxis.range[0]&&t.c>=p.caxis.range[1]&&t.c<=p.caxis.range[0]},p.yaxis={type:\\\"linear\\\",range:[w,_-T-k],domain:[g-l/2,g+l/2],_id:\\\"y\\\"},f(p.yaxis,p.graphDiv._fullLayout),p.yaxis.setScale(),p.yaxis.isPtWithinRange=function(){return!0};var A=p.yaxis.domain[0],M=p.aaxis=h({},t.aaxis,{range:[w,_-T-k],side:\\\"left\\\",tickangle:(+t.aaxis.tickangle||0)-30,domain:[A,A+l*E],anchor:\\\"free\\\",position:0,_id:\\\"y\\\",_length:i});f(M,p.graphDiv._fullLayout),M.setScale();var S=p.baxis=h({},t.baxis,{range:[_-w-k,T],side:\\\"bottom\\\",domain:p.xaxis.domain,anchor:\\\"free\\\",position:0,_id:\\\"x\\\",_length:i});f(S,p.graphDiv._fullLayout),S.setScale();var L=p.caxis=h({},t.caxis,{range:[_-w-T,k],side:\\\"right\\\",tickangle:(+t.caxis.tickangle||0)+30,domain:[A,A+l*E],anchor:\\\"free\\\",position:0,_id:\\\"y\\\",_length:i});f(L,p.graphDiv._fullLayout),L.setScale();var C=\\\"M\\\"+r+\\\",\\\"+(n+a)+\\\"h\\\"+i+\\\"l-\\\"+i/2+\\\",-\\\"+a+\\\"Z\\\";p.clipDef.select(\\\"path\\\").attr(\\\"d\\\",C),p.layers.plotbg.select(\\\"path\\\").attr(\\\"d\\\",C);var P=\\\"M0,\\\"+a+\\\"h\\\"+i+\\\"l-\\\"+i/2+\\\",-\\\"+a+\\\"Z\\\";p.clipDefRelative.select(\\\"path\\\").attr(\\\"d\\\",P);var O=s(r,n);p.plotContainer.selectAll(\\\".scatterlayer,.maplayer\\\").attr(\\\"transform\\\",O),p.clipDefRelative.select(\\\"path\\\").attr(\\\"transform\\\",null);var I=s(r-S._offset,n+a);p.layers.baxis.attr(\\\"transform\\\",I),p.layers.bgrid.attr(\\\"transform\\\",I);var D=s(r+i/2,n)+\\\"rotate(30)\\\"+s(0,-M._offset);p.layers.aaxis.attr(\\\"transform\\\",D),p.layers.agrid.attr(\\\"transform\\\",D);var z=s(r+i/2,n)+\\\"rotate(-30)\\\"+s(0,-L._offset);p.layers.caxis.attr(\\\"transform\\\",z),p.layers.cgrid.attr(\\\"transform\\\",z),p.drawAxes(!0),p.layers.aline.select(\\\"path\\\").attr(\\\"d\\\",M.showline?\\\"M\\\"+r+\\\",\\\"+(n+a)+\\\"l\\\"+i/2+\\\",-\\\"+a:\\\"M0,0\\\").call(u.stroke,M.linecolor||\\\"#000\\\").style(\\\"stroke-width\\\",(M.linewidth||0)+\\\"px\\\"),p.layers.bline.select(\\\"path\\\").attr(\\\"d\\\",S.showline?\\\"M\\\"+r+\\\",\\\"+(n+a)+\\\"h\\\"+i:\\\"M0,0\\\").call(u.stroke,S.linecolor||\\\"#000\\\").style(\\\"stroke-width\\\",(S.linewidth||0)+\\\"px\\\"),p.layers.cline.select(\\\"path\\\").attr(\\\"d\\\",L.showline?\\\"M\\\"+(r+i/2)+\\\",\\\"+n+\\\"l\\\"+i/2+\\\",\\\"+a:\\\"M0,0\\\").call(u.stroke,L.linecolor||\\\"#000\\\").style(\\\"stroke-width\\\",(L.linewidth||0)+\\\"px\\\"),p.graphDiv._context.staticPlot||p.initInteractions(),c.setClipUrl(p.layers.frontplot,p._hasClipOnAxisFalse?null:p.clipId,p.graphDiv)},S.drawAxes=function(t){var e=this,r=e.graphDiv,n=e.id.substr(7)+\\\"title\\\",i=e.layers,a=e.aaxis,o=e.baxis,s=e.caxis;if(e.drawAx(a),e.drawAx(o),e.drawAx(s),t){var u=Math.max(a.showticklabels?a.tickfont.size/2:0,(s.showticklabels?.75*s.tickfont.size:0)+(\\\"outside\\\"===s.ticks?.87*s.ticklen:0)),c=(o.showticklabels?o.tickfont.size:0)+(\\\"outside\\\"===o.ticks?o.ticklen:0)+3;i[\\\"a-title\\\"]=b.draw(r,\\\"a\\\"+n,{propContainer:a,propName:e.id+\\\".aaxis.title\\\",placeholder:l(r,\\\"Click to enter Component A title\\\"),attributes:{x:e.x0+e.w/2,y:e.y0-a.title.font.size/3-u,\\\"text-anchor\\\":\\\"middle\\\"}}),i[\\\"b-title\\\"]=b.draw(r,\\\"b\\\"+n,{propContainer:o,propName:e.id+\\\".baxis.title\\\",placeholder:l(r,\\\"Click to enter Component B title\\\"),attributes:{x:e.x0-c,y:e.y0+e.h+.83*o.title.font.size+c,\\\"text-anchor\\\":\\\"middle\\\"}}),i[\\\"c-title\\\"]=b.draw(r,\\\"c\\\"+n,{propContainer:s,propName:e.id+\\\".caxis.title\\\",placeholder:l(r,\\\"Click to enter Component C title\\\"),attributes:{x:e.x0+e.w+c,y:e.y0+e.h+.83*s.title.font.size+c,\\\"text-anchor\\\":\\\"middle\\\"}})}},S.drawAx=function(t){var e,r=this,n=r.graphDiv,i=t._name,a=i.charAt(0),s=t._id,l=r.layers[i],u=a+\\\"tickLayout\\\",c=(e=t).ticks+String(e.ticklen)+String(e.showticklabels);r[u]!==c&&(l.selectAll(\\\".\\\"+s+\\\"tick\\\").remove(),r[u]=c),t.setScale();var f=d.calcTicks(t),h=d.clipEnds(t,f),p=d.makeTransTickFn(t),v=d.getTickSigns(t)[2],g=o.deg2rad(30),y=v*(t.linewidth||1)/2,m=v*t.ticklen,x=r.w,b=r.h,_=\\\"b\\\"===a?\\\"M0,\\\"+y+\\\"l\\\"+Math.sin(g)*m+\\\",\\\"+Math.cos(g)*m:\\\"M\\\"+y+\\\",0l\\\"+Math.cos(g)*m+\\\",\\\"+-Math.sin(g)*m,w={a:\\\"M0,0l\\\"+b+\\\",-\\\"+x/2,b:\\\"M0,0l-\\\"+x/2+\\\",-\\\"+b,c:\\\"M0,0l-\\\"+b+\\\",\\\"+x/2}[a];d.drawTicks(n,t,{vals:\\\"inside\\\"===t.ticks?h:f,layer:l,path:_,transFn:p,crisp:!1}),d.drawGrid(n,t,{vals:h,layer:r.layers[a+\\\"grid\\\"],path:w,transFn:p,crisp:!1}),d.drawLabels(n,t,{vals:f,layer:l,transFn:p,labelFns:d.makeLabelFns(t,0,30)})};var L=A.MINZOOM/2+.87,C=\\\"m-0.87,.5h\\\"+L+\\\"v3h-\\\"+(L+5.2)+\\\"l\\\"+(L/2+2.6)+\\\",-\\\"+(.87*L+4.5)+\\\"l2.6,1.5l-\\\"+L/2+\\\",\\\"+.87*L+\\\"Z\\\",P=\\\"m0.87,.5h-\\\"+L+\\\"v3h\\\"+(L+5.2)+\\\"l-\\\"+(L/2+2.6)+\\\",-\\\"+(.87*L+4.5)+\\\"l-2.6,1.5l\\\"+L/2+\\\",\\\"+.87*L+\\\"Z\\\",O=\\\"m0,1l\\\"+L/2+\\\",\\\"+.87*L+\\\"l2.6,-1.5l-\\\"+(L/2+2.6)+\\\",-\\\"+(.87*L+4.5)+\\\"l-\\\"+(L/2+2.6)+\\\",\\\"+(.87*L+4.5)+\\\"l2.6,1.5l\\\"+L/2+\\\",-\\\"+.87*L+\\\"Z\\\",I=!0;function D(t){n.select(t).selectAll(\\\".zoombox,.js-zoombox-backdrop,.js-zoombox-menu,.zoombox-corners\\\").remove()}S.clearOutline=function(){k(this.dragOptions),T(this.dragOptions.gd)},S.initInteractions=function(){var t,e,r,n,f,h,p,d,y,b,T,k,M=this,S=M.layers.plotbg.select(\\\"path\\\").node(),L=M.graphDiv,z=L._fullLayout._zoomlayer;function R(t){var e={};return e[M.id+\\\".aaxis.min\\\"]=t.a,e[M.id+\\\".baxis.min\\\"]=t.b,e[M.id+\\\".caxis.min\\\"]=t.c,e}function F(t,e){var r=L._fullLayout.clickmode;D(L),2===t&&(L.emit(\\\"plotly_doubleclick\\\",null),a.call(\\\"_guiRelayout\\\",L,R({a:0,b:0,c:0}))),r.indexOf(\\\"select\\\")>-1&&1===t&&w(e,L,[M.xaxis],[M.yaxis],M.id,M.dragOptions),r.indexOf(\\\"event\\\")>-1&&g.click(L,e,M.id)}function B(t,e){return 1-e/M.h}function N(t,e){return 1-(t+(M.h-e)/Math.sqrt(3))/M.w}function j(t,e){return(t-(M.h-e)/Math.sqrt(3))/M.w}function U(i,a){var o=r+i*t,s=n+a*e,l=Math.max(0,Math.min(1,B(0,n),B(0,s))),u=Math.max(0,Math.min(1,N(r,n),N(o,s))),c=Math.max(0,Math.min(1,j(r,n),j(o,s))),v=(l/2+c)*M.w,g=(1-l/2-u)*M.w,m=(v+g)/2,x=g-v,_=(1-l)*M.h,w=_-x/E;x<A.MINZOOM?(p=f,T.attr(\\\"d\\\",y),k.attr(\\\"d\\\",\\\"M0,0Z\\\")):(p={a:f.a+l*h,b:f.b+u*h,c:f.c+c*h},T.attr(\\\"d\\\",y+\\\"M\\\"+v+\\\",\\\"+_+\\\"H\\\"+g+\\\"L\\\"+m+\\\",\\\"+w+\\\"L\\\"+v+\\\",\\\"+_+\\\"Z\\\"),k.attr(\\\"d\\\",\\\"M\\\"+r+\\\",\\\"+n+\\\"m0.5,0.5h5v-2h-5v-5h-2v5h-5v2h5v5h2ZM\\\"+v+\\\",\\\"+_+C+\\\"M\\\"+g+\\\",\\\"+_+P+\\\"M\\\"+m+\\\",\\\"+w+O)),b||(T.transition().style(\\\"fill\\\",d>.2?\\\"rgba(0,0,0,0.4)\\\":\\\"rgba(255,255,255,0.3)\\\").duration(200),k.transition().style(\\\"opacity\\\",1).duration(200),b=!0),L.emit(\\\"plotly_relayouting\\\",R(p))}function V(){D(L),p!==f&&(a.call(\\\"_guiRelayout\\\",L,R(p)),I&&L.data&&L._context.showTips&&(o.notifier(l(L,\\\"Double-click to zoom back out\\\"),\\\"long\\\"),I=!1))}function H(t,e){var r=t/M.xaxis._m,n=e/M.yaxis._m,i=[(p={a:f.a-n,b:f.b+(r+n)/2,c:f.c-(r-n)/2}).a,p.b,p.c].sort(o.sorterAsc),a=i.indexOf(p.a),l=i.indexOf(p.b),u=i.indexOf(p.c);i[0]<0&&(i[1]+i[0]/2<0?(i[2]+=i[0]+i[1],i[0]=i[1]=0):(i[2]+=i[0]/2,i[1]+=i[0]/2,i[0]=0),p={a:i[a],b:i[l],c:i[u]},e=(f.a-p.a)*M.yaxis._m,t=(f.c-p.c-f.b+p.b)*M.xaxis._m);var h=s(M.x0+t,M.y0+e);M.plotContainer.selectAll(\\\".scatterlayer,.maplayer\\\").attr(\\\"transform\\\",h);var d=s(-t,-e);M.clipDefRelative.select(\\\"path\\\").attr(\\\"transform\\\",d),M.aaxis.range=[p.a,M.sum-p.b-p.c],M.baxis.range=[M.sum-p.a-p.c,p.b],M.caxis.range=[M.sum-p.a-p.b,p.c],M.drawAxes(!1),M._hasClipOnAxisFalse&&M.plotContainer.select(\\\".scatterlayer\\\").selectAll(\\\".trace\\\").call(c.hideOutsideRangePoints,M),L.emit(\\\"plotly_relayouting\\\",R(p))}function q(){a.call(\\\"_guiRelayout\\\",L,R(p))}this.dragOptions={element:S,gd:L,plotinfo:{id:M.id,domain:L._fullLayout[M.id].domain,xaxis:M.xaxis,yaxis:M.yaxis},subplot:M.id,prepFn:function(a,l,c){M.dragOptions.xaxes=[M.xaxis],M.dragOptions.yaxes=[M.yaxis],t=L._fullLayout._invScaleX,e=L._fullLayout._invScaleY;var v=M.dragOptions.dragmode=L._fullLayout.dragmode;m(v)?M.dragOptions.minDrag=1:M.dragOptions.minDrag=void 0,\\\"zoom\\\"===v?(M.dragOptions.moveFn=U,M.dragOptions.clickFn=F,M.dragOptions.doneFn=V,function(t,e,a){var l=S.getBoundingClientRect();r=e-l.left,n=a-l.top,L._fullLayout._calcInverseTransform(L);var c=L._fullLayout._invTransform,v=o.apply3DTransform(c)(r,n);r=v[0],n=v[1],f={a:M.aaxis.range[0],b:M.baxis.range[1],c:M.caxis.range[1]},p=f,h=M.aaxis.range[1]-f.a,d=i(M.graphDiv._fullLayout[M.id].bgcolor).getLuminance(),y=\\\"M0,\\\"+M.h+\\\"L\\\"+M.w/2+\\\", 0L\\\"+M.w+\\\",\\\"+M.h+\\\"Z\\\",b=!1,T=z.append(\\\"path\\\").attr(\\\"class\\\",\\\"zoombox\\\").attr(\\\"transform\\\",s(M.x0,M.y0)).style({fill:d>.2?\\\"rgba(0,0,0,0)\\\":\\\"rgba(255,255,255,0)\\\",\\\"stroke-width\\\":0}).attr(\\\"d\\\",y),k=z.append(\\\"path\\\").attr(\\\"class\\\",\\\"zoombox-corners\\\").attr(\\\"transform\\\",s(M.x0,M.y0)).style({fill:u.background,stroke:u.defaultLine,\\\"stroke-width\\\":1,opacity:0}).attr(\\\"d\\\",\\\"M0,0Z\\\"),M.clearOutline(L)}(0,l,c)):\\\"pan\\\"===v?(M.dragOptions.moveFn=H,M.dragOptions.clickFn=F,M.dragOptions.doneFn=q,f={a:M.aaxis.range[0],b:M.baxis.range[1],c:M.caxis.range[1]},p=f,M.clearOutline(L)):(x(v)||m(v))&&_(a,l,c,M.dragOptions,v)}},S.onmousemove=function(t){g.hover(L,t,M.id),L._fullLayout._lasthover=S,L._fullLayout._hoversubplot=M.id},S.onmouseout=function(t){L._dragging||v.unhover(L,t)},v.init(this.dragOptions)}},73972:function(t,e,r){\\\"use strict\\\";var n=r(47769),i=r(64213),a=r(75138),o=r(41965),s=r(24401).addStyleRule,l=r(1426),u=r(9012),c=r(10820),f=l.extendFlat,h=l.extendDeepAll;function p(t){var r=t.name,i=t.categories,a=t.meta;if(e.modules[r])n.log(\\\"Type \\\"+r+\\\" already registered\\\");else{e.subplotsRegistry[t.basePlotModule.name]||function(t){var r=t.name;if(e.subplotsRegistry[r])n.log(\\\"Plot type \\\"+r+\\\" already registered.\\\");else for(var i in y(t),e.subplotsRegistry[r]=t,e.componentsRegistry)b(i,t.name)}(t.basePlotModule);for(var o={},l=0;l<i.length;l++)o[i[l]]=!0,e.allCategories[i[l]]=!0;for(var u in e.modules[r]={_module:t,categories:o},a&&Object.keys(a).length&&(e.modules[r].meta=a),e.allTypes.push(r),e.componentsRegistry)m(u,r);t.layoutAttributes&&f(e.traceLayoutAttributes,t.layoutAttributes);var c=t.basePlotModule,h=c.name;if(\\\"mapbox\\\"===h){var p=c.constants.styleRules;for(var d in p)s(\\\".js-plotly-plot .plotly .mapboxgl-\\\"+d,p[d])}\\\"geo\\\"!==h&&\\\"mapbox\\\"!==h||void 0!==window.PlotlyGeoAssets||(window.PlotlyGeoAssets={topojson:{}})}}function d(t){if(\\\"string\\\"!=typeof t.name)throw new Error(\\\"Component module *name* must be a string.\\\");var r=t.name;for(var n in e.componentsRegistry[r]=t,t.layoutAttributes&&(t.layoutAttributes._isLinkedToArray&&a(e.layoutArrayContainers,r),y(t)),e.modules)m(r,n);for(var i in e.subplotsRegistry)b(r,i);for(var o in e.transformsRegistry)x(r,o);t.schema&&t.schema.layout&&h(c,t.schema.layout)}function v(t){if(\\\"string\\\"!=typeof t.name)throw new Error(\\\"Transform module *name* must be a string.\\\");var r=\\\"Transform module \\\"+t.name,i=\\\"function\\\"==typeof t.transform,a=\\\"function\\\"==typeof t.calcTransform;if(!i&&!a)throw new Error(r+\\\" is missing a *transform* or *calcTransform* method.\\\");for(var s in i&&a&&n.log([r+\\\" has both a *transform* and *calcTransform* methods.\\\",\\\"Please note that all *transform* methods are executed\\\",\\\"before all *calcTransform* methods.\\\"].join(\\\" \\\")),o(t.attributes)||n.log(r+\\\" registered without an *attributes* object.\\\"),\\\"function\\\"!=typeof t.supplyDefaults&&n.log(r+\\\" registered without a *supplyDefaults* method.\\\"),e.transformsRegistry[t.name]=t,e.componentsRegistry)x(s,t.name)}function g(t){var r=t.name,n=r.split(\\\"-\\\")[0],i=t.dictionary,a=t.format,o=i&&Object.keys(i).length,s=a&&Object.keys(a).length,l=e.localeRegistry,u=l[r];if(u||(l[r]=u={}),n!==r){var c=l[n];c||(l[n]=c={}),o&&c.dictionary===u.dictionary&&(c.dictionary=i),s&&c.format===u.format&&(c.format=a)}o&&(u.dictionary=i),s&&(u.format=a)}function y(t){if(t.layoutAttributes){var r=t.layoutAttributes._arrayAttrRegexps;if(r)for(var n=0;n<r.length;n++)a(e.layoutArrayRegexes,r[n])}}function m(t,r){var n=e.componentsRegistry[t].schema;if(n&&n.traces){var i=n.traces[r];i&&h(e.modules[r]._module.attributes,i)}}function x(t,r){var n=e.componentsRegistry[t].schema;if(n&&n.transforms){var i=n.transforms[r];i&&h(e.transformsRegistry[r].attributes,i)}}function b(t,r){var n=e.componentsRegistry[t].schema;if(n&&n.subplots){var i=e.subplotsRegistry[r],a=i.layoutAttributes,o=\\\"subplot\\\"===i.attr?i.name:i.attr;Array.isArray(o)&&(o=o[0]);var s=n.subplots[o];a&&s&&h(a,s)}}function _(t){return\\\"object\\\"==typeof t&&(t=t.type),t}e.modules={},e.allCategories={},e.allTypes=[],e.subplotsRegistry={},e.transformsRegistry={},e.componentsRegistry={},e.layoutArrayContainers=[],e.layoutArrayRegexes=[],e.traceLayoutAttributes={},e.localeRegistry={},e.apiMethodRegistry={},e.collectableSubplotTypes=null,e.register=function(t){if(e.collectableSubplotTypes=null,!t)throw new Error(\\\"No argument passed to Plotly.register.\\\");t&&!Array.isArray(t)&&(t=[t]);for(var r=0;r<t.length;r++){var n=t[r];if(!n)throw new Error(\\\"Invalid module was attempted to be registered!\\\");switch(n.moduleType){case\\\"trace\\\":p(n);break;case\\\"transform\\\":v(n);break;case\\\"component\\\":d(n);break;case\\\"locale\\\":g(n);break;case\\\"apiMethod\\\":var i=n.name;e.apiMethodRegistry[i]=n.fn;break;default:throw new Error(\\\"Invalid module was attempted to be registered!\\\")}}},e.getModule=function(t){var r=e.modules[_(t)];return!!r&&r._module},e.traceIs=function(t,r){if(\\\"various\\\"===(t=_(t)))return!1;var i=e.modules[t];return i||(t&&n.log(\\\"Unrecognized trace type \\\"+t+\\\".\\\"),i=e.modules[u.type.dflt]),!!i.categories[r]},e.getTransformIndices=function(t,e){for(var r=[],n=t.transforms||[],i=0;i<n.length;i++)n[i].type===e&&r.push(i);return r},e.hasTransform=function(t,e){for(var r=t.transforms||[],n=0;n<r.length;n++)if(r[n].type===e)return!0;return!1},e.getComponentMethod=function(t,r){var n=e.componentsRegistry[t];return n&&n[r]||i},e.call=function(){var t=arguments[0],r=[].slice.call(arguments,1);return e.apiMethodRegistry[t].apply(null,r)}},61914:function(t,e,r){\\\"use strict\\\";var n=r(73972),i=r(71828),a=i.extendFlat,o=i.extendDeep;function s(t){var e;switch(t){case\\\"themes__thumb\\\":e={autosize:!0,width:150,height:150,title:{text:\\\"\\\"},showlegend:!1,margin:{l:5,r:5,t:5,b:5,pad:0},annotations:[]};break;case\\\"thumbnail\\\":e={title:{text:\\\"\\\"},hidesources:!0,showlegend:!1,borderwidth:0,bordercolor:\\\"\\\",margin:{l:1,r:1,t:1,b:1,pad:0},annotations:[]};break;default:e={}}return e}t.exports=function(t,e){var r,i,l=t.data,u=t.layout,c=o([],l),f=o({},u,s(e.tileClass)),h=t._context||{};if(e.width&&(f.width=e.width),e.height&&(f.height=e.height),\\\"thumbnail\\\"===e.tileClass||\\\"themes__thumb\\\"===e.tileClass){f.annotations=[];var p=Object.keys(f);for(r=0;r<p.length;r++)i=p[r],[\\\"xaxis\\\",\\\"yaxis\\\",\\\"zaxis\\\"].indexOf(i.slice(0,5))>-1&&(f[p[r]].title={text:\\\"\\\"});for(r=0;r<c.length;r++){var d=c[r];d.showscale=!1,d.marker&&(d.marker.showscale=!1),n.traceIs(d,\\\"pie-like\\\")&&(d.textposition=\\\"none\\\")}}if(Array.isArray(e.annotations))for(r=0;r<e.annotations.length;r++)f.annotations.push(e.annotations[r]);var v=Object.keys(f).filter((function(t){return t.match(/^scene\\\\d*$/)}));if(v.length){var g={};for(\\\"thumbnail\\\"===e.tileClass&&(g={title:{text:\\\"\\\"},showaxeslabels:!1,showticklabels:!1,linetickenable:!1}),r=0;r<v.length;r++){var y=f[v[r]];y.xaxis||(y.xaxis={}),y.yaxis||(y.yaxis={}),y.zaxis||(y.zaxis={}),a(y.xaxis,g),a(y.yaxis,g),a(y.zaxis,g),y._scene=null}}var m=document.createElement(\\\"div\\\");e.tileClass&&(m.className=e.tileClass);var x={gd:m,td:m,layout:f,data:c,config:{staticPlot:void 0===e.staticPlot||e.staticPlot,plotGlPixelRatio:void 0===e.plotGlPixelRatio?2:e.plotGlPixelRatio,displaylogo:e.displaylogo||!1,showLink:e.showLink||!1,showTips:e.showTips||!1,mapboxAccessToken:h.mapboxAccessToken}};return\\\"transparent\\\"!==e.setBackground&&(x.config.setBackground=e.setBackground||\\\"opaque\\\"),x.gd.defaultLayout=s(e.tileClass),x}},7239:function(t,e,r){\\\"use strict\\\";var n=r(71828),i=r(403),a=r(22435),o=r(25095);t.exports=function(t,e){var r;return n.isPlainObject(t)||(r=n.getGraphDiv(t)),(e=e||{}).format=e.format||\\\"png\\\",e.width=e.width||null,e.height=e.height||null,e.imageDataOnly=!0,new Promise((function(s,l){r&&r._snapshotInProgress&&l(new Error(\\\"Snapshotting already in progress.\\\")),n.isIE()&&\\\"svg\\\"!==e.format&&l(new Error(o.MSG_IE_BAD_FORMAT)),r&&(r._snapshotInProgress=!0);var u=i(t,e),c=e.filename||t.fn||\\\"newplot\\\";c+=\\\".\\\"+e.format.replace(\\\"-\\\",\\\".\\\"),u.then((function(t){return r&&(r._snapshotInProgress=!1),a(t,c,e.format)})).then((function(t){s(t)})).catch((function(t){r&&(r._snapshotInProgress=!1),l(t)}))}))}},22435:function(t,e,r){\\\"use strict\\\";var n=r(71828),i=r(25095);t.exports=function(t,e,r){var a=document.createElement(\\\"a\\\"),o=\\\"download\\\"in a;return new Promise((function(s,l){var u,c;if(n.isIE())return u=i.createBlob(t,\\\"svg\\\"),window.navigator.msSaveBlob(u,e),u=null,s(e);if(o)return u=i.createBlob(t,r),c=i.createObjectURL(u),a.href=c,a.download=e,document.body.appendChild(a),a.click(),document.body.removeChild(a),i.revokeObjectURL(c),u=null,s(e);if(n.isSafari()){var f=\\\"svg\\\"===r?\\\",\\\":\\\";base64,\\\";return i.octetStream(f+encodeURIComponent(t)),s(e)}l(new Error(\\\"download error\\\"))}))}},25095:function(t,e,r){\\\"use strict\\\";var n=r(73972);e.getDelay=function(t){return t._has&&(t._has(\\\"gl3d\\\")||t._has(\\\"gl2d\\\")||t._has(\\\"mapbox\\\"))?500:0},e.getRedrawFunc=function(t){return function(){n.getComponentMethod(\\\"colorbar\\\",\\\"draw\\\")(t)}},e.encodeSVG=function(t){return\\\"data:image/svg+xml,\\\"+encodeURIComponent(t)},e.encodeJSON=function(t){return\\\"data:application/json,\\\"+encodeURIComponent(t)};var i=window.URL||window.webkitURL;e.createObjectURL=function(t){return i.createObjectURL(t)},e.revokeObjectURL=function(t){return i.revokeObjectURL(t)},e.createBlob=function(t,e){if(\\\"svg\\\"===e)return new window.Blob([t],{type:\\\"image/svg+xml;charset=utf-8\\\"});if(\\\"full-json\\\"===e)return new window.Blob([t],{type:\\\"application/json;charset=utf-8\\\"});var r=function(t){for(var e=t.length,r=new ArrayBuffer(e),n=new Uint8Array(r),i=0;i<e;i++)n[i]=t.charCodeAt(i);return r}(window.atob(t));return new window.Blob([r],{type:\\\"image/\\\"+e})},e.octetStream=function(t){document.location.href=\\\"data:application/octet-stream\\\"+t},e.IMAGE_URL_PREFIX=/^data:image\\\\/\\\\w+;base64,/,e.MSG_IE_BAD_FORMAT=\\\"Sorry IE does not support downloading from canvas. Try {format:'svg'} instead.\\\"},44511:function(t,e,r){\\\"use strict\\\";var n=r(25095),i={getDelay:n.getDelay,getRedrawFunc:n.getRedrawFunc,clone:r(61914),toSVG:r(5900),svgToImg:r(70942),toImage:r(56395),downloadImage:r(7239)};t.exports=i},70942:function(t,e,r){\\\"use strict\\\";var n=r(71828),i=r(15398).EventEmitter,a=r(25095);t.exports=function(t){var e=t.emitter||new i,r=new Promise((function(i,o){var s=window.Image,l=t.svg,u=t.format||\\\"png\\\";if(n.isIE()&&\\\"svg\\\"!==u){var c=new Error(a.MSG_IE_BAD_FORMAT);return o(c),t.promise?r:e.emit(\\\"error\\\",c)}var f,h,p=t.canvas,d=t.scale||1,v=t.width||300,g=t.height||150,y=d*v,m=d*g,x=p.getContext(\\\"2d\\\",{willReadFrequently:!0}),b=new s;\\\"svg\\\"===u||n.isSafari()?h=a.encodeSVG(l):(f=a.createBlob(l,\\\"svg\\\"),h=a.createObjectURL(f)),p.width=y,p.height=m,b.onload=function(){var r;switch(f=null,a.revokeObjectURL(h),\\\"svg\\\"!==u&&x.drawImage(b,0,0,y,m),u){case\\\"jpeg\\\":r=p.toDataURL(\\\"image/jpeg\\\");break;case\\\"png\\\":r=p.toDataURL(\\\"image/png\\\");break;case\\\"webp\\\":r=p.toDataURL(\\\"image/webp\\\");break;case\\\"svg\\\":r=h;break;default:var n=\\\"Image format is not jpeg, png, svg or webp.\\\";if(o(new Error(n)),!t.promise)return e.emit(\\\"error\\\",n)}i(r),t.promise||e.emit(\\\"success\\\",r)},b.onerror=function(r){if(f=null,a.revokeObjectURL(h),o(r),!t.promise)return e.emit(\\\"error\\\",r)},b.src=h}));return t.promise?r:e}},56395:function(t,e,r){\\\"use strict\\\";var n=r(15398).EventEmitter,i=r(73972),a=r(71828),o=r(25095),s=r(61914),l=r(5900),u=r(70942);t.exports=function(t,e){var r=new n,c=s(t,{format:\\\"png\\\"}),f=c.gd;f.style.position=\\\"absolute\\\",f.style.left=\\\"-5000px\\\",document.body.appendChild(f);var h=o.getRedrawFunc(f);return i.call(\\\"_doPlot\\\",f,c.data,c.layout,c.config).then(h).then((function(){var t=o.getDelay(f._fullLayout);setTimeout((function(){var t=l(f),n=document.createElement(\\\"canvas\\\");n.id=a.randstr(),(r=u({format:e.format,width:f._fullLayout.width,height:f._fullLayout.height,canvas:n,emitter:r,svg:t})).clean=function(){f&&document.body.removeChild(f)}}),t)})).catch((function(t){r.emit(\\\"error\\\",t)})),r}},5900:function(t,e,r){\\\"use strict\\\";var n=r(39898),i=r(71828),a=r(91424),o=r(7901),s=r(77922),l=/\\\"/g,u=\\\"TOBESTRIPPED\\\",c=new RegExp('(\\\"'+u+\\\")|(\\\"+u+'\\\")',\\\"g\\\");t.exports=function(t,e,r){var f,h=t._fullLayout,p=h._paper,d=h._toppaper,v=h.width,g=h.height;p.insert(\\\"rect\\\",\\\":first-child\\\").call(a.setRect,0,0,v,g).call(o.fill,h.paper_bgcolor);var y=h._basePlotModules||[];for(f=0;f<y.length;f++){var m=y[f];m.toSVG&&m.toSVG(t)}if(d){var x=d.node().childNodes,b=Array.prototype.slice.call(x);for(f=0;f<b.length;f++){var _=b[f];_.childNodes.length&&p.node().appendChild(_)}}h._draggers&&h._draggers.remove(),p.node().style.background=\\\"\\\",p.selectAll(\\\"text\\\").attr({\\\"data-unformatted\\\":null,\\\"data-math\\\":null}).each((function(){var t=n.select(this);if(\\\"hidden\\\"!==this.style.visibility&&\\\"none\\\"!==this.style.display){t.style({visibility:null,display:null});var e=this.style.fontFamily;e&&-1!==e.indexOf('\\\"')&&t.style(\\\"font-family\\\",e.replace(l,u))}else t.remove()})),p.selectAll(\\\".gradient_filled,.pattern_filled\\\").each((function(){var t=n.select(this),e=this.style.fill;e&&-1!==e.indexOf(\\\"url(\\\")&&t.style(\\\"fill\\\",e.replace(l,u));var r=this.style.stroke;r&&-1!==r.indexOf(\\\"url(\\\")&&t.style(\\\"stroke\\\",r.replace(l,u))})),\\\"pdf\\\"!==e&&\\\"eps\\\"!==e||p.selectAll(\\\"#MathJax_SVG_glyphs path\\\").attr(\\\"stroke-width\\\",0),p.node().setAttributeNS(s.xmlns,\\\"xmlns\\\",s.svg),p.node().setAttributeNS(s.xmlns,\\\"xmlns:xlink\\\",s.xlink),\\\"svg\\\"===e&&r&&(p.attr(\\\"width\\\",r*v),p.attr(\\\"height\\\",r*g),p.attr(\\\"viewBox\\\",\\\"0 0 \\\"+v+\\\" \\\"+g));var w=(new window.XMLSerializer).serializeToString(p.node());return w=(w=(w=function(t){var e=n.select(\\\"body\\\").append(\\\"div\\\").style({display:\\\"none\\\"}).html(\\\"\\\"),r=t.replace(/(&[^;]*;)/gi,(function(t){return\\\"&lt;\\\"===t?\\\"&#60;\\\":\\\"&rt;\\\"===t?\\\"&#62;\\\":-1!==t.indexOf(\\\"<\\\")||-1!==t.indexOf(\\\">\\\")?\\\"\\\":e.html(t).text()}));return e.remove(),r}(w)).replace(/&(?!\\\\w+;|\\\\#[0-9]+;| \\\\#x[0-9A-F]+;)/g,\\\"&amp;\\\")).replace(c,\\\"'\\\"),i.isIE()&&(w=(w=(w=w.replace(/\\\"/gi,\\\"'\\\")).replace(/(\\\\('#)([^']*)('\\\\))/gi,'(\\\"#$2\\\")')).replace(/(\\\\\\\\')/gi,'\\\"')),w}},75341:function(t,e,r){\\\"use strict\\\";var n=r(71828);t.exports=function(t,e){for(var r=0;r<t.length;r++)t[r].i=r;n.mergeArray(e.text,t,\\\"tx\\\"),n.mergeArray(e.hovertext,t,\\\"htx\\\");var i=e.marker;if(i){n.mergeArray(i.opacity,t,\\\"mo\\\",!0),n.mergeArray(i.color,t,\\\"mc\\\");var a=i.line;a&&(n.mergeArray(a.color,t,\\\"mlc\\\"),n.mergeArrayCastPositive(a.width,t,\\\"mlw\\\"))}}},1486:function(t,e,r){\\\"use strict\\\";var n=r(82196),i=r(12663).axisHoverFormat,a=r(5386).fF,o=r(5386).si,s=r(50693),l=r(41940),u=r(97313),c=r(79952).u,f=r(1426).extendFlat,h=l({editType:\\\"calc\\\",arrayOk:!0,colorEditType:\\\"style\\\"}),p=f({},n.marker.line.width,{dflt:0}),d=f({width:p,editType:\\\"calc\\\"},s(\\\"marker.line\\\")),v=f({line:d,editType:\\\"calc\\\"},s(\\\"marker\\\"),{opacity:{valType:\\\"number\\\",arrayOk:!0,dflt:1,min:0,max:1,editType:\\\"style\\\"},pattern:c});t.exports={x:n.x,x0:n.x0,dx:n.dx,y:n.y,y0:n.y0,dy:n.dy,xperiod:n.xperiod,yperiod:n.yperiod,xperiod0:n.xperiod0,yperiod0:n.yperiod0,xperiodalignment:n.xperiodalignment,yperiodalignment:n.yperiodalignment,xhoverformat:i(\\\"x\\\"),yhoverformat:i(\\\"y\\\"),text:n.text,texttemplate:o({editType:\\\"plot\\\"},{keys:u.eventDataKeys}),hovertext:n.hovertext,hovertemplate:a({},{keys:u.eventDataKeys}),textposition:{valType:\\\"enumerated\\\",values:[\\\"inside\\\",\\\"outside\\\",\\\"auto\\\",\\\"none\\\"],dflt:\\\"auto\\\",arrayOk:!0,editType:\\\"calc\\\"},insidetextanchor:{valType:\\\"enumerated\\\",values:[\\\"end\\\",\\\"middle\\\",\\\"start\\\"],dflt:\\\"end\\\",editType:\\\"plot\\\"},textangle:{valType:\\\"angle\\\",dflt:\\\"auto\\\",editType:\\\"plot\\\"},textfont:f({},h,{}),insidetextfont:f({},h,{}),outsidetextfont:f({},h,{}),constraintext:{valType:\\\"enumerated\\\",values:[\\\"inside\\\",\\\"outside\\\",\\\"both\\\",\\\"none\\\"],dflt:\\\"both\\\",editType:\\\"calc\\\"},cliponaxis:f({},n.cliponaxis,{}),orientation:{valType:\\\"enumerated\\\",values:[\\\"v\\\",\\\"h\\\"],editType:\\\"calc+clearAxisTypes\\\"},base:{valType:\\\"any\\\",dflt:null,arrayOk:!0,editType:\\\"calc\\\"},offset:{valType:\\\"number\\\",dflt:null,arrayOk:!0,editType:\\\"calc\\\"},width:{valType:\\\"number\\\",dflt:null,min:0,arrayOk:!0,editType:\\\"calc\\\"},marker:v,offsetgroup:n.offsetgroup,alignmentgroup:n.alignmentgroup,selected:{marker:{opacity:n.selected.marker.opacity,color:n.selected.marker.color,editType:\\\"style\\\"},textfont:n.selected.textfont,editType:\\\"style\\\"},unselected:{marker:{opacity:n.unselected.marker.opacity,color:n.unselected.marker.color,editType:\\\"style\\\"},textfont:n.unselected.textfont,editType:\\\"style\\\"},_deprecated:{bardir:{valType:\\\"enumerated\\\",editType:\\\"calc\\\",values:[\\\"v\\\",\\\"h\\\"]}}}},92290:function(t,e,r){\\\"use strict\\\";var n=r(89298),i=r(42973),a=r(52075).hasColorscale,o=r(78803),s=r(75341),l=r(66279);t.exports=function(t,e){var r,u,c,f,h,p,d=n.getFromId(t,e.xaxis||\\\"x\\\"),v=n.getFromId(t,e.yaxis||\\\"y\\\"),g={msUTC:!(!e.base&&0!==e.base)};\\\"h\\\"===e.orientation?(r=d.makeCalcdata(e,\\\"x\\\",g),c=v.makeCalcdata(e,\\\"y\\\"),f=i(e,v,\\\"y\\\",c),h=!!e.yperiodalignment,p=\\\"y\\\"):(r=v.makeCalcdata(e,\\\"y\\\",g),c=d.makeCalcdata(e,\\\"x\\\"),f=i(e,d,\\\"x\\\",c),h=!!e.xperiodalignment,p=\\\"x\\\"),u=f.vals;for(var y=Math.min(u.length,r.length),m=new Array(y),x=0;x<y;x++)m[x]={p:u[x],s:r[x]},h&&(m[x].orig_p=c[x],m[x][p+\\\"End\\\"]=f.ends[x],m[x][p+\\\"Start\\\"]=f.starts[x]),e.ids&&(m[x].id=String(e.ids[x]));return a(e,\\\"marker\\\")&&o(t,e,{vals:e.marker.color,containerStr:\\\"marker\\\",cLetter:\\\"c\\\"}),a(e,\\\"marker.line\\\")&&o(t,e,{vals:e.marker.line.color,containerStr:\\\"marker.line\\\",cLetter:\\\"c\\\"}),s(m,e),l(m,e),m}},97313:function(t){\\\"use strict\\\";t.exports={TEXTPAD:3,eventDataKeys:[\\\"value\\\",\\\"label\\\"]}},11661:function(t,e,r){\\\"use strict\\\";var n=r(92770),i=r(71828).isArrayOrTypedArray,a=r(50606).BADNUM,o=r(73972),s=r(89298),l=r(99082).getAxisGroup,u=r(61546);function c(t,e,r,o,c){if(o.length){var b,_,w,T;switch(function(t,e){var r,a;for(r=0;r<e.length;r++){var o,s=e[r],l=s[0].trace,u=\\\"funnel\\\"===l.type?l._base:l.base,c=\\\"h\\\"===l.orientation?l.xcalendar:l.ycalendar,f=\\\"category\\\"===t.type||\\\"multicategory\\\"===t.type?function(){return null}:t.d2c;if(i(u)){for(a=0;a<Math.min(u.length,s.length);a++)o=f(u[a],0,c),n(o)?(s[a].b=+o,s[a].hasB=1):s[a].b=0;for(;a<s.length;a++)s[a].b=0}else{o=f(u,0,c);var h=n(o);for(o=h?o:0,a=0;a<s.length;a++)s[a].b=o,h&&(s[a].hasB=1)}}}(r,o),c.mode){case\\\"overlay\\\":f(e,r,o,c);break;case\\\"group\\\":for(b=[],_=[],w=0;w<o.length;w++)void 0===(T=o[w])[0].trace.offset?_.push(T):b.push(T);_.length&&function(t,e,r,n,i){var o=new u(n,{posAxis:e,sepNegVal:!1,overlapNoMerge:!i.norm});(function(t,e,r,n){for(var i=t._fullLayout,a=r.positions,o=r.distinctPositions,s=r.minDiff,u=r.traces,c=u.length,f=a.length!==o.length,h=s*(1-n.gap),g=l(i,e._id)+u[0][0].trace.orientation,y=i._alignmentOpts[g]||{},m=0;m<c;m++){var x,b,_=u[m],w=_[0].trace,T=y[w.alignmentgroup]||{},k=Object.keys(T.offsetGroups||{}).length,A=(x=k?h/k:f?h/c:h)*(1-(n.groupgap||0));b=k?((2*w._offsetIndex+1-k)*x-A)/2:f?((2*m+1-c)*x-A)/2:-A/2;var M=_[0].t;M.barwidth=A,M.poffset=b,M.bargroupwidth=h,M.bardelta=s}r.binWidth=u[0][0].t.barwidth/100,p(r),d(e,r),v(e,r,f)})(t,e,o,i),function(t,e){for(var r=t.traces,n=0;n<r.length;n++){var i=r[n];if(void 0===i[0].trace.base)for(var o=new u([i],{posAxis:e,sepNegVal:!0,overlapNoMerge:!0}),s=0;s<i.length;s++){var l=i[s];if(l.p!==a){var c=o.put(l.p,l.b+l.s);c&&(l.b=c)}}}}(o,e),i.norm?(y(o),m(r,o,i)):g(r,o)}(t,e,r,_,c),b.length&&f(e,r,b,c);break;case\\\"stack\\\":case\\\"relative\\\":for(b=[],_=[],w=0;w<o.length;w++)void 0===(T=o[w])[0].trace.base?_.push(T):b.push(T);_.length&&function(t,e,r,n,i){var o=new u(n,{posAxis:e,sepNegVal:\\\"relative\\\"===i.mode,overlapNoMerge:!(i.norm||\\\"stack\\\"===i.mode||\\\"relative\\\"===i.mode)});h(e,o,i),function(t,e,r){var n,i,o,l,u,c,f=x(t),h=e.traces;for(l=0;l<h.length;l++)if(\\\"funnel\\\"===(i=(n=h[l])[0].trace).type)for(u=0;u<n.length;u++)(c=n[u]).s!==a&&e.put(c.p,-.5*c.s);for(l=0;l<h.length;l++){o=\\\"funnel\\\"===(i=(n=h[l])[0].trace).type;var p=[];for(u=0;u<n.length;u++)if((c=n[u]).s!==a){var d;d=o?c.s:c.s+c.b;var v=e.put(c.p,d),g=v+d;c.b=v,c[f]=g,r.norm||(p.push(g),c.hasB&&p.push(v))}r.norm||(i._extremes[t._id]=s.findExtremes(t,p,{tozero:!0,padded:!0}))}}(r,o,i);for(var l=0;l<n.length;l++)for(var c=n[l],f=0;f<c.length;f++){var p=c[f];p.s!==a&&p.b+p.s===o.get(p.p,p.s)&&(p._outmost=!0)}i.norm&&m(r,o,i)}(0,e,r,_,c),b.length&&f(e,r,b,c)}!function(t,e){var r,i,a,o=x(e),s={},l=1/0,u=-1/0;for(r=0;r<t.length;r++)for(a=t[r],i=0;i<a.length;i++){var c=a[i].p;n(c)&&(l=Math.min(l,c),u=Math.max(u,c))}var f=1e4/(u-l),h=s.round=function(t){return String(Math.round(f*(t-l)))};for(r=0;r<t.length;r++){(a=t[r])[0].t.extents=s;var p=a[0].t.poffset,d=Array.isArray(p);for(i=0;i<a.length;i++){var v=a[i],g=v[o]-v.w/2;if(n(g)){var y=v[o]+v.w/2,m=h(v.p);s[m]?s[m]=[Math.min(g,s[m][0]),Math.max(y,s[m][1])]:s[m]=[g,y]}v.p0=v.p+(d?p[i]:p),v.p1=v.p0+v.w,v.s0=v.b,v.s1=v.s0+v.s}}}(o,e)}}function f(t,e,r,n){for(var i=0;i<r.length;i++){var a=r[i],o=new u([a],{posAxis:t,sepNegVal:!1,overlapNoMerge:!n.norm});h(t,o,n),n.norm?(y(o),m(e,o,n)):g(e,o)}}function h(t,e,r){for(var n=e.minDiff,i=e.traces,a=n*(1-r.gap),o=a*(1-(r.groupgap||0)),s=-o/2,l=0;l<i.length;l++){var u=i[l][0].t;u.barwidth=o,u.poffset=s,u.bargroupwidth=a,u.bardelta=n}e.binWidth=i[0][0].t.barwidth/100,p(e),d(t,e),v(t,e)}function p(t){var e,r,a=t.traces;for(e=0;e<a.length;e++){var o,s=a[e],l=s[0],u=l.trace,c=l.t,f=u._offset||u.offset,h=c.poffset;if(i(f)){for(o=Array.prototype.slice.call(f,0,s.length),r=0;r<o.length;r++)n(o[r])||(o[r]=h);for(r=o.length;r<s.length;r++)o.push(h);c.poffset=o}else void 0!==f&&(c.poffset=f);var p=u._width||u.width,d=c.barwidth;if(i(p)){var v=Array.prototype.slice.call(p,0,s.length);for(r=0;r<v.length;r++)n(v[r])||(v[r]=d);for(r=v.length;r<s.length;r++)v.push(d);if(c.barwidth=v,void 0===f){for(o=[],r=0;r<s.length;r++)o.push(h+(d-v[r])/2);c.poffset=o}}else void 0!==p&&(c.barwidth=p,void 0===f&&(c.poffset=h+(d-p)/2))}}function d(t,e){for(var r=e.traces,n=x(t),i=0;i<r.length;i++)for(var a=r[i],o=a[0].t,s=o.poffset,l=Array.isArray(s),u=o.barwidth,c=Array.isArray(u),f=0;f<a.length;f++){var h=a[f],p=h.w=c?u[f]:u;void 0===h.p&&(h.p=h[n],h[\\\"orig_\\\"+n]=h[n]);var d=(l?s[f]:s)+p/2;h[n]=h.p+d}}function v(t,e,r){var n=e.traces,i=e.minDiff/2;s.minDtick(t,e.minDiff,e.distinctPositions[0],r);for(var a=0;a<n.length;a++){var o,l,u,c,f=n[a],h=f[0],p=h.trace,d=[];for(c=0;c<f.length;c++)l=(o=f[c]).p-i,u=o.p+i,d.push(l,u);if(p.width||p.offset){var v=h.t,g=v.poffset,y=v.barwidth,m=Array.isArray(g),x=Array.isArray(y);for(c=0;c<f.length;c++){o=f[c];var b=m?g[c]:g,_=x?y[c]:y;u=(l=o.p+b)+_,d.push(l,u)}}p._extremes[t._id]=s.findExtremes(t,d,{padded:!1})}}function g(t,e){for(var r=e.traces,n=x(t),i=0;i<r.length;i++){for(var a=r[i],o=a[0].trace,l=\\\"scatter\\\"===o.type,u=\\\"v\\\"===o.orientation,c=[],f=!1,h=0;h<a.length;h++){var p=a[h],d=l?0:p.b,v=l?u?p.y:p.x:d+p.s;p[n]=v,c.push(v),p.hasB&&c.push(d),p.hasB&&p.b||(f=!0)}o._extremes[t._id]=s.findExtremes(t,c,{tozero:f,padded:!0})}}function y(t){for(var e=t.traces,r=0;r<e.length;r++)for(var n=e[r],i=0;i<n.length;i++){var o=n[i];o.s!==a&&t.put(o.p,o.b+o.s)}}function m(t,e,r){var i=e.traces,o=x(t),l=\\\"fraction\\\"===r.norm?1:100,u=l/1e9,c=t.l2c(t.c2l(0)),f=\\\"stack\\\"===r.mode?l:c;function h(e){return n(t.c2l(e))&&(e<c-u||e>f+u||!n(c))}for(var p=0;p<i.length;p++){for(var d=i[p],v=d[0].trace,g=[],y=!1,m=!1,b=0;b<d.length;b++){var _=d[b];if(_.s!==a){var w=Math.abs(l/e.get(_.p,_.s));_.b*=w,_.s*=w;var T=_.b,k=T+_.s;_[o]=k,g.push(k),m=m||h(k),_.hasB&&(g.push(T),m=m||h(T)),_.hasB&&_.b||(y=!0)}}v._extremes[t._id]=s.findExtremes(t,g,{tozero:y,padded:m})}}function x(t){return t._id.charAt(0)}t.exports={crossTraceCalc:function(t,e){for(var r=e.xaxis,n=e.yaxis,i=t._fullLayout,a=t._fullData,s=t.calcdata,l=[],u=[],f=0;f<a.length;f++){var h=a[f];if(!0===h.visible&&o.traceIs(h,\\\"bar\\\")&&h.xaxis===r._id&&h.yaxis===n._id&&(\\\"h\\\"===h.orientation?l.push(s[f]):u.push(s[f]),h._computePh))for(var p=t.calcdata[f],d=0;d<p.length;d++)\\\"function\\\"==typeof p[d].ph0&&(p[d].ph0=p[d].ph0()),\\\"function\\\"==typeof p[d].ph1&&(p[d].ph1=p[d].ph1())}var v={xCat:\\\"category\\\"===r.type||\\\"multicategory\\\"===r.type,yCat:\\\"category\\\"===n.type||\\\"multicategory\\\"===n.type,mode:i.barmode,norm:i.barnorm,gap:i.bargap,groupgap:i.bargroupgap};c(t,r,n,u,v),c(t,n,r,l,v)},setGroupPositions:c}},90769:function(t,e,r){\\\"use strict\\\";var n=r(71828),i=r(7901),a=r(73972),o=r(67513),s=r(73927),l=r(98340),u=r(26125),c=r(1486),f=n.coerceFont;function h(t,e,r,i,a,o){var s=!(!1===(o=o||{}).moduleHasSelected),l=!(!1===o.moduleHasUnselected),u=!(!1===o.moduleHasConstrain),c=!(!1===o.moduleHasCliponaxis),h=!(!1===o.moduleHasTextangle),p=!(!1===o.moduleHasInsideanchor),d=!!o.hasPathbar,v=Array.isArray(a)||\\\"auto\\\"===a,g=v||\\\"inside\\\"===a,y=v||\\\"outside\\\"===a;if(g||y){var m=f(i,\\\"textfont\\\",r.font),x=n.extendFlat({},m),b=!(t.textfont&&t.textfont.color);if(b&&delete x.color,f(i,\\\"insidetextfont\\\",x),d){var _=n.extendFlat({},m);b&&delete _.color,f(i,\\\"pathbar.textfont\\\",_)}y&&f(i,\\\"outsidetextfont\\\",m),s&&i(\\\"selected.textfont.color\\\"),l&&i(\\\"unselected.textfont.color\\\"),u&&i(\\\"constraintext\\\"),c&&i(\\\"cliponaxis\\\"),h&&i(\\\"textangle\\\"),i(\\\"texttemplate\\\")}g&&p&&i(\\\"insidetextanchor\\\")}t.exports={supplyDefaults:function(t,e,r,u){function f(r,i){return n.coerce(t,e,c,r,i)}if(o(t,e,u,f)){s(t,e,u,f),f(\\\"xhoverformat\\\"),f(\\\"yhoverformat\\\"),f(\\\"orientation\\\",e.x&&!e.y?\\\"h\\\":\\\"v\\\"),f(\\\"base\\\"),f(\\\"offset\\\"),f(\\\"width\\\"),f(\\\"text\\\"),f(\\\"hovertext\\\"),f(\\\"hovertemplate\\\");var p=f(\\\"textposition\\\");h(t,0,u,f,p,{moduleHasSelected:!0,moduleHasUnselected:!0,moduleHasConstrain:!0,moduleHasCliponaxis:!0,moduleHasTextangle:!0,moduleHasInsideanchor:!0}),l(t,e,f,r,u);var d=(e.marker.line||{}).color,v=a.getComponentMethod(\\\"errorbars\\\",\\\"supplyDefaults\\\");v(t,e,d||i.defaultLine,{axis:\\\"y\\\"}),v(t,e,d||i.defaultLine,{axis:\\\"x\\\",inherit:\\\"y\\\"}),n.coerceSelectionMarkerOpacity(e,f)}else e.visible=!1},crossTraceDefaults:function(t,e){var r,i;function a(t){return n.coerce(i._input,i,c,t)}if(\\\"group\\\"===e.barmode)for(var o=0;o<t.length;o++)\\\"bar\\\"===(i=t[o]).type&&(r=i._input,u(r,i,e,a))},handleText:h}},58065:function(t){\\\"use strict\\\";t.exports=function(t,e,r){return t.x=\\\"xVal\\\"in e?e.xVal:e.x,t.y=\\\"yVal\\\"in e?e.yVal:e.y,e.xa&&(t.xaxis=e.xa),e.ya&&(t.yaxis=e.ya),\\\"h\\\"===r.orientation?(t.label=t.y,t.value=t.x):(t.label=t.x,t.value=t.y),t}},69383:function(t,e,r){\\\"use strict\\\";var n=r(92770),i=r(84267),a=r(71828).isArrayOrTypedArray;e.coerceString=function(t,e,r){if(\\\"string\\\"==typeof e){if(e||!t.noBlank)return e}else if((\\\"number\\\"==typeof e||!0===e)&&!t.strict)return String(e);return void 0!==r?r:t.dflt},e.coerceNumber=function(t,e,r){if(n(e)){e=+e;var i=t.min,a=t.max;if(!(void 0!==i&&e<i||void 0!==a&&e>a))return e}return void 0!==r?r:t.dflt},e.coerceColor=function(t,e,r){return i(e).isValid()?e:void 0!==r?r:t.dflt},e.coerceEnumerated=function(t,e,r){return t.coerceNumber&&(e=+e),-1!==t.values.indexOf(e)?e:void 0!==r?r:t.dflt},e.getValue=function(t,e){var r;return Array.isArray(t)?e<t.length&&(r=t[e]):r=t,r},e.getLineWidth=function(t,e){return 0<e.mlw?e.mlw:a(t.marker.line.width)?0:t.marker.line.width}},95423:function(t,e,r){\\\"use strict\\\";var n=r(30211),i=r(73972),a=r(7901),o=r(71828).fillText,s=r(69383).getLineWidth,l=r(89298).hoverLabelText,u=r(50606).BADNUM;function c(t,e,r,i,a){var s,c,f,h,p,d,v,g=t.cd,y=g[0].trace,m=g[0].t,x=\\\"closest\\\"===i,b=\\\"waterfall\\\"===y.type,_=t.maxHoverDistance,w=t.maxSpikeDistance;\\\"h\\\"===y.orientation?(s=r,c=e,f=\\\"y\\\",h=\\\"x\\\",p=D,d=O):(s=e,c=r,f=\\\"x\\\",h=\\\"y\\\",d=D,p=O);var T=y[f+\\\"period\\\"],k=x||T;function A(t){return S(t,-1)}function M(t){return S(t,1)}function S(t,e){var r=t.w;return t[f]+e*r/2}function E(t){return t[f+\\\"End\\\"]-t[f+\\\"Start\\\"]}var L=x?A:T?function(t){return t.p-E(t)/2}:function(t){return Math.min(A(t),t.p-m.bardelta/2)},C=x?M:T?function(t){return t.p+E(t)/2}:function(t){return Math.max(M(t),t.p+m.bardelta/2)};function P(t,e,r){return a.finiteRange&&(r=0),n.inbox(t-s,e-s,r+Math.min(1,Math.abs(e-t)/v)-1)}function O(t){return P(L(t),C(t),_)}function I(t){var e=t[h];if(b){var r=Math.abs(t.rawS)||0;c>0?e+=r:c<0&&(e-=r)}return e}function D(t){var e=c,r=t.b,i=I(t);return n.inbox(r-e,i-e,_+(i-e)/(i-r)-1)}var z=t[f+\\\"a\\\"],R=t[h+\\\"a\\\"];v=Math.abs(z.r2c(z.range[1])-z.r2c(z.range[0]));var F=n.getDistanceFunction(i,p,d,(function(t){return(p(t)+d(t))/2}));if(n.getClosest(g,F,t),!1!==t.index&&g[t.index].p!==u){k||(L=function(t){return Math.min(A(t),t.p-m.bargroupwidth/2)},C=function(t){return Math.max(M(t),t.p+m.bargroupwidth/2)});var B=g[t.index],N=y.base?B.b+B.s:B.s;t[h+\\\"0\\\"]=t[h+\\\"1\\\"]=R.c2p(B[h],!0),t[h+\\\"LabelVal\\\"]=N;var j=m.extents[m.extents.round(B.p)];t[f+\\\"0\\\"]=z.c2p(x?L(B):j[0],!0),t[f+\\\"1\\\"]=z.c2p(x?C(B):j[1],!0);var U=void 0!==B.orig_p;return t[f+\\\"LabelVal\\\"]=U?B.orig_p:B.p,t.labelLabel=l(z,t[f+\\\"LabelVal\\\"],y[f+\\\"hoverformat\\\"]),t.valueLabel=l(R,t[h+\\\"LabelVal\\\"],y[h+\\\"hoverformat\\\"]),t.baseLabel=l(R,B.b,y[h+\\\"hoverformat\\\"]),t.spikeDistance=(function(t){var e=c,r=t.b,i=I(t);return n.inbox(r-e,i-e,w+(i-e)/(i-r)-1)}(B)+function(t){return P(A(t),M(t),w)}(B))/2,t[f+\\\"Spike\\\"]=z.c2p(B.p,!0),o(B,y,t),t.hovertemplate=y.hovertemplate,t}}function f(t,e){var r=e.mcc||t.marker.color,n=e.mlcc||t.marker.line.color,i=s(t,e);return a.opacity(r)?r:a.opacity(n)&&i?n:void 0}t.exports={hoverPoints:function(t,e,r,n,a){var o=c(t,e,r,n,a);if(o){var s=o.cd,l=s[0].trace,u=s[o.index];return o.color=f(l,u),i.getComponentMethod(\\\"errorbars\\\",\\\"hoverInfo\\\")(u,l,o),[o]}},hoverOnBars:c,getTraceColor:f}},60822:function(t,e,r){\\\"use strict\\\";t.exports={attributes:r(1486),layoutAttributes:r(43641),supplyDefaults:r(90769).supplyDefaults,crossTraceDefaults:r(90769).crossTraceDefaults,supplyLayoutDefaults:r(13957),calc:r(92290),crossTraceCalc:r(11661).crossTraceCalc,colorbar:r(4898),arraysToCalcdata:r(75341),plot:r(17295).plot,style:r(16688).style,styleOnSelect:r(16688).styleOnSelect,hoverPoints:r(95423).hoverPoints,eventData:r(58065),selectPoints:r(81974),moduleType:\\\"trace\\\",name:\\\"bar\\\",basePlotModule:r(93612),categories:[\\\"bar-like\\\",\\\"cartesian\\\",\\\"svg\\\",\\\"bar\\\",\\\"oriented\\\",\\\"errorBarsOK\\\",\\\"showLegend\\\",\\\"zoomScale\\\"],animatable:!0,meta:{}}},43641:function(t){\\\"use strict\\\";t.exports={barmode:{valType:\\\"enumerated\\\",values:[\\\"stack\\\",\\\"group\\\",\\\"overlay\\\",\\\"relative\\\"],dflt:\\\"group\\\",editType:\\\"calc\\\"},barnorm:{valType:\\\"enumerated\\\",values:[\\\"\\\",\\\"fraction\\\",\\\"percent\\\"],dflt:\\\"\\\",editType:\\\"calc\\\"},bargap:{valType:\\\"number\\\",min:0,max:1,editType:\\\"calc\\\"},bargroupgap:{valType:\\\"number\\\",min:0,max:1,dflt:0,editType:\\\"calc\\\"}}},13957:function(t,e,r){\\\"use strict\\\";var n=r(73972),i=r(89298),a=r(71828),o=r(43641);t.exports=function(t,e,r){function s(r,n){return a.coerce(t,e,o,r,n)}for(var l=!1,u=!1,c=!1,f={},h=s(\\\"barmode\\\"),p=0;p<r.length;p++){var d=r[p];if(n.traceIs(d,\\\"bar\\\")&&d.visible){if(l=!0,\\\"group\\\"===h){var v=d.xaxis+d.yaxis;f[v]&&(c=!0),f[v]=!0}d.visible&&\\\"histogram\\\"===d.type&&\\\"category\\\"!==i.getFromId({_fullLayout:e},d[\\\"v\\\"===d.orientation?\\\"xaxis\\\":\\\"yaxis\\\"]).type&&(u=!0)}}l?(\\\"overlay\\\"!==h&&s(\\\"barnorm\\\"),s(\\\"bargap\\\",u&&!c?0:.2),s(\\\"bargroupgap\\\")):delete e.barmode}},17295:function(t,e,r){\\\"use strict\\\";var n=r(39898),i=r(92770),a=r(71828),o=r(63893),s=r(7901),l=r(91424),u=r(73972),c=r(89298).tickText,f=r(72597),h=f.recordMinTextSize,p=f.clearMinTextSize,d=r(16688),v=r(69383),g=r(97313),y=r(1486),m=y.text,x=y.textposition,b=r(23469).appendArrayPointValue,_=g.TEXTPAD;function w(t){return t.id}function T(t){if(t.ids)return w}function k(t,e){return t<e?1:-1}function A(t,e,r,n){var i;return!e.uniformtext.mode&&M(r)?(n&&(i=n()),t.transition().duration(r.duration).ease(r.easing).each(\\\"end\\\",(function(){i&&i()})).each(\\\"interrupt\\\",(function(){i&&i()}))):t}function M(t){return t&&t.duration>0}function S(t){return\\\"auto\\\"===t?0:t}function E(t,e){var r=Math.PI/180*e,n=Math.abs(Math.sin(r)),i=Math.abs(Math.cos(r));return{x:t.width*i+t.height*n,y:t.width*n+t.height*i}}function L(t,e,r,n,i,a){var o=!!a.isHorizontal,s=!!a.constrained,l=a.angle||0,u=a.anchor||\\\"end\\\",c=\\\"end\\\"===u,f=\\\"start\\\"===u,h=((a.leftToRight||0)+1)/2,p=1-h,d=i.width,v=i.height,g=Math.abs(e-t),y=Math.abs(n-r),m=g>2*_&&y>2*_?_:0;g-=2*m,y-=2*m;var x=S(l);\\\"auto\\\"!==l||d<=g&&v<=y||!(d>g||v>y)||(d>y||v>g)&&d<v==g<y||(x+=90);var b=E(i,x),w=1;s&&(w=Math.min(1,g/b.x,y/b.y));var T=i.left*p+i.right*h,A=(i.top+i.bottom)/2,M=(t+_)*p+(e-_)*h,L=(r+n)/2,C=0,P=0;if(f||c){var O=(o?b.x:b.y)/2,I=o?k(t,e):k(r,n);o?f?(M=t+I*m,C=-I*O):(M=e-I*m,C=I*O):f?(L=r+I*m,P=-I*O):(L=n-I*m,P=I*O)}return{textX:T,textY:A,targetX:M,targetY:L,anchorX:C,anchorY:P,scale:w,rotate:x}}t.exports={plot:function(t,e,r,f,g,y){var w=e.xaxis,C=e.yaxis,P=t._fullLayout,O=t._context.staticPlot;g||(g={mode:P.barmode,norm:P.barmode,gap:P.bargap,groupgap:P.bargroupgap},p(\\\"bar\\\",P));var I=a.makeTraceGroups(f,r,\\\"trace bars\\\").each((function(r){var u=n.select(this),f=r[0].trace,p=\\\"waterfall\\\"===f.type,I=\\\"funnel\\\"===f.type,D=\\\"bar\\\"===f.type||I,z=0;p&&f.connector.visible&&\\\"between\\\"===f.connector.mode&&(z=f.connector.line.width/2);var R=\\\"h\\\"===f.orientation,F=M(g),B=a.ensureSingle(u,\\\"g\\\",\\\"points\\\"),N=T(f),j=B.selectAll(\\\"g.point\\\").data(a.identity,N);j.enter().append(\\\"g\\\").classed(\\\"point\\\",!0),j.exit().remove(),j.each((function(u,p){var T,M,I=n.select(this),B=function(t,e,r,n){var i=[],a=[],o=n?e:r,s=n?r:e;return i[0]=o.c2p(t.s0,!0),a[0]=s.c2p(t.p0,!0),i[1]=o.c2p(t.s1,!0),a[1]=s.c2p(t.p1,!0),n?[i,a]:[a,i]}(u,w,C,R),N=B[0][0],j=B[0][1],U=B[1][0],V=B[1][1],H=0==(R?j-N:V-U);if(H&&D&&v.getLineWidth(f,u)&&(H=!1),H||(H=!(i(N)&&i(j)&&i(U)&&i(V))),u.isBlank=H,H&&(R?j=N:V=U),z&&!H&&(R?(N-=k(N,j)*z,j+=k(N,j)*z):(U-=k(U,V)*z,V+=k(U,V)*z)),\\\"waterfall\\\"===f.type){if(!H){var q=f[u.dir].marker;T=q.line.width,M=q.color}}else T=v.getLineWidth(f,u),M=u.mc||f.marker.color;function G(t){var e=n.round(T/2%1,2);return 0===g.gap&&0===g.groupgap?n.round(Math.round(t)-e,2):t}if(!t._context.staticPlot){var Z=s.opacity(M)<1||T>.01?G:function(t,e,r){return r&&t===e?t:Math.abs(t-e)>=2?G(t):t>e?Math.ceil(t):Math.floor(t)};N=Z(N,j,R),j=Z(j,N,R),U=Z(U,V,!R),V=Z(V,U,!R)}var Y=A(a.ensureSingle(I,\\\"path\\\"),P,g,y);if(Y.style(\\\"vector-effect\\\",O?\\\"none\\\":\\\"non-scaling-stroke\\\").attr(\\\"d\\\",isNaN((j-N)*(V-U))||H&&t._context.staticPlot?\\\"M0,0Z\\\":\\\"M\\\"+N+\\\",\\\"+U+\\\"V\\\"+V+\\\"H\\\"+j+\\\"V\\\"+U+\\\"Z\\\").call(l.setClipUrl,e.layerClipId,t),!P.uniformtext.mode&&F){var W=l.makePointStyleFns(f);l.singlePointStyle(u,Y,f,W,t)}!function(t,e,r,n,i,s,u,f,p,g,y){var w,T=e.xaxis,M=e.yaxis,C=t._fullLayout;function P(e,r,n){return a.ensureSingle(e,\\\"text\\\").text(r).attr({class:\\\"bartext bartext-\\\"+w,\\\"text-anchor\\\":\\\"middle\\\",\\\"data-notex\\\":1}).call(l.font,n).call(o.convertToTspans,t)}var O=n[0].trace,I=\\\"h\\\"===O.orientation,D=function(t,e,r,n,i){var o,s=e[0].trace;return o=s.texttemplate?function(t,e,r,n,i){var o=e[0].trace,s=a.castOption(o,r,\\\"texttemplate\\\");if(!s)return\\\"\\\";var l,u,f,h,p=\\\"histogram\\\"===o.type,d=\\\"waterfall\\\"===o.type,v=\\\"funnel\\\"===o.type,g=\\\"h\\\"===o.orientation;function y(t){return c(h,h.c2l(t),!0).text}g?(l=\\\"y\\\",u=i,f=\\\"x\\\",h=n):(l=\\\"x\\\",u=n,f=\\\"y\\\",h=i);var m,x=e[r],_={};_.label=x.p,_.labelLabel=_[l+\\\"Label\\\"]=(m=x.p,c(u,u.c2l(m),!0).text);var w=a.castOption(o,x.i,\\\"text\\\");(0===w||w)&&(_.text=w),_.value=x.s,_.valueLabel=_[f+\\\"Label\\\"]=y(x.s);var T={};b(T,o,x.i),(p||void 0===T.x)&&(T.x=g?_.value:_.label),(p||void 0===T.y)&&(T.y=g?_.label:_.value),(p||void 0===T.xLabel)&&(T.xLabel=g?_.valueLabel:_.labelLabel),(p||void 0===T.yLabel)&&(T.yLabel=g?_.labelLabel:_.valueLabel),d&&(_.delta=+x.rawS||x.s,_.deltaLabel=y(_.delta),_.final=x.v,_.finalLabel=y(_.final),_.initial=_.final-_.delta,_.initialLabel=y(_.initial)),v&&(_.value=x.s,_.valueLabel=y(_.value),_.percentInitial=x.begR,_.percentInitialLabel=a.formatPercent(x.begR),_.percentPrevious=x.difR,_.percentPreviousLabel=a.formatPercent(x.difR),_.percentTotal=x.sumR,_.percenTotalLabel=a.formatPercent(x.sumR));var k=a.castOption(o,x.i,\\\"customdata\\\");return k&&(_.customdata=k),a.texttemplateString(s,_,t._d3locale,T,_,o._meta||{})}(t,e,r,n,i):s.textinfo?function(t,e,r,n){var i=t[0].trace,o=\\\"h\\\"===i.orientation,s=\\\"waterfall\\\"===i.type,l=\\\"funnel\\\"===i.type;function u(t){return c(o?r:n,+t,!0).text}var f,h,p=i.textinfo,d=t[e],v=p.split(\\\"+\\\"),g=[],y=function(t){return-1!==v.indexOf(t)};if(y(\\\"label\\\")&&g.push((h=t[e].p,c(o?n:r,h,!0).text)),y(\\\"text\\\")&&(0===(f=a.castOption(i,d.i,\\\"text\\\"))||f)&&g.push(f),s){var m=+d.rawS||d.s,x=d.v,b=x-m;y(\\\"initial\\\")&&g.push(u(b)),y(\\\"delta\\\")&&g.push(u(m)),y(\\\"final\\\")&&g.push(u(x))}if(l){y(\\\"value\\\")&&g.push(u(d.s));var _=0;y(\\\"percent initial\\\")&&_++,y(\\\"percent previous\\\")&&_++,y(\\\"percent total\\\")&&_++;var w=_>1;y(\\\"percent initial\\\")&&(f=a.formatPercent(d.begR),w&&(f+=\\\" of initial\\\"),g.push(f)),y(\\\"percent previous\\\")&&(f=a.formatPercent(d.difR),w&&(f+=\\\" of previous\\\"),g.push(f)),y(\\\"percent total\\\")&&(f=a.formatPercent(d.sumR),w&&(f+=\\\" of total\\\"),g.push(f))}return g.join(\\\"<br>\\\")}(e,r,n,i):v.getValue(s.text,r),v.coerceString(m,o)}(C,n,i,T,M);w=function(t,e){var r=v.getValue(t.textposition,e);return v.coerceEnumerated(x,r)}(O,i);var z=\\\"stack\\\"===g.mode||\\\"relative\\\"===g.mode,R=n[i],F=!z||R._outmost;if(D&&\\\"none\\\"!==w&&(!R.isBlank&&s!==u&&f!==p||\\\"auto\\\"!==w&&\\\"inside\\\"!==w)){var B=C.font,N=d.getBarColor(n[i],O),j=d.getInsideTextFont(O,i,B,N),U=d.getOutsideTextFont(O,i,B),V=r.datum();I?\\\"log\\\"===T.type&&V.s0<=0&&(s=T.range[0]<T.range[1]?0:T._length):\\\"log\\\"===M.type&&V.s0<=0&&(f=M.range[0]<M.range[1]?M._length:0);var H,q,G,Z,Y,W=Math.abs(u-s)-2*_,X=Math.abs(p-f)-2*_;if(\\\"outside\\\"===w&&(F||R.hasB||(w=\\\"inside\\\")),\\\"auto\\\"===w&&(F?(w=\\\"inside\\\",H=P(r,D,Y=a.ensureUniformFontSize(t,j)),G=(q=l.bBox(H.node())).width,Z=q.height,G>0&&Z>0&&(G<=W&&Z<=X||G<=X&&Z<=W||(I?W>=G*(X/Z):X>=Z*(W/G)))?w=\\\"inside\\\":(w=\\\"outside\\\",H.remove(),H=null)):w=\\\"inside\\\"),!H){var J=(H=P(r,D,Y=a.ensureUniformFontSize(t,\\\"outside\\\"===w?U:j))).attr(\\\"transform\\\");if(H.attr(\\\"transform\\\",\\\"\\\"),G=(q=l.bBox(H.node())).width,Z=q.height,H.attr(\\\"transform\\\",J),G<=0||Z<=0)return void H.remove()}var K,$=O.textangle;K=\\\"outside\\\"===w?function(t,e,r,n,i,a){var o,s=!!a.isHorizontal,l=!!a.constrained,u=a.angle||0,c=i.width,f=i.height,h=Math.abs(e-t),p=Math.abs(n-r);o=s?p>2*_?_:0:h>2*_?_:0;var d=1;l&&(d=s?Math.min(1,p/f):Math.min(1,h/c));var v=S(u),g=E(i,v),y=(s?g.x:g.y)/2,m=(i.left+i.right)/2,x=(i.top+i.bottom)/2,b=(t+e)/2,w=(r+n)/2,T=0,A=0,M=s?k(e,t):k(r,n);return s?(b=e-M*o,T=M*y):(w=n+M*o,A=-M*y),{textX:m,textY:x,targetX:b,targetY:w,anchorX:T,anchorY:A,scale:d,rotate:v}}(s,u,f,p,q,{isHorizontal:I,constrained:\\\"both\\\"===O.constraintext||\\\"outside\\\"===O.constraintext,angle:$}):L(s,u,f,p,q,{isHorizontal:I,constrained:\\\"both\\\"===O.constraintext||\\\"inside\\\"===O.constraintext,angle:$,anchor:O.insidetextanchor}),K.fontSize=Y.size,h(\\\"histogram\\\"===O.type?\\\"bar\\\":O.type,K,C),R.transform=K;var Q=A(H,C,g,y);a.setTransormAndDisplay(Q,K)}else r.select(\\\"text\\\").remove()}(t,e,I,r,p,N,j,U,V,g,y),e.layerClipId&&l.hideOutsideRangePoint(u,I.select(\\\"text\\\"),w,C,f.xcalendar,f.ycalendar)}));var U=!1===f.cliponaxis;l.setClipUrl(u,U?null:e.layerClipId,t)}));u.getComponentMethod(\\\"errorbars\\\",\\\"plot\\\")(t,I,e,g)},toMoveInsideBar:L}},81974:function(t){\\\"use strict\\\";function e(t,e,r,n,i){var a=e.c2p(n?t.s0:t.p0,!0),o=e.c2p(n?t.s1:t.p1,!0),s=r.c2p(n?t.p0:t.s0,!0),l=r.c2p(n?t.p1:t.s1,!0);return i?[(a+o)/2,(s+l)/2]:n?[o,(s+l)/2]:[(a+o)/2,l]}t.exports=function(t,r){var n,i=t.cd,a=t.xaxis,o=t.yaxis,s=i[0].trace,l=\\\"funnel\\\"===s.type,u=\\\"h\\\"===s.orientation,c=[];if(!1===r)for(n=0;n<i.length;n++)i[n].selected=0;else for(n=0;n<i.length;n++){var f=i[n],h=\\\"ct\\\"in f?f.ct:e(f,a,o,u,l);r.contains(h,!1,n,t)?(c.push({pointNumber:n,x:a.c2d(f.x),y:o.c2d(f.y)}),f.selected=1):f.selected=0}return c}},61546:function(t,e,r){\\\"use strict\\\";t.exports=i;var n=r(71828).distinctVals;function i(t,e){this.traces=t,this.sepNegVal=e.sepNegVal,this.overlapNoMerge=e.overlapNoMerge;for(var r=1/0,i=e.posAxis._id.charAt(0),a=[],o=0;o<t.length;o++){for(var s=t[o],l=0;l<s.length;l++){var u=s[l],c=u.p;void 0===c&&(c=u[i]),void 0!==c&&a.push(c)}s[0]&&s[0].width1&&(r=Math.min(s[0].width1,r))}this.positions=a;var f=n(a);this.distinctPositions=f.vals,1===f.vals.length&&r!==1/0?this.minDiff=r:this.minDiff=Math.min(f.minDiff,r);var h=(e.posAxis||{}).type;\\\"category\\\"!==h&&\\\"multicategory\\\"!==h||(this.minDiff=1),this.binWidth=this.minDiff,this.bins={}}i.prototype.put=function(t,e){var r=this.getLabel(t,e),n=this.bins[r]||0;return this.bins[r]=n+e,n},i.prototype.get=function(t,e){var r=this.getLabel(t,e);return this.bins[r]||0},i.prototype.getLabel=function(t,e){return(e<0&&this.sepNegVal?\\\"v\\\":\\\"^\\\")+(this.overlapNoMerge?t:Math.round(t/this.binWidth))}},16688:function(t,e,r){\\\"use strict\\\";var n=r(39898),i=r(7901),a=r(91424),o=r(71828),s=r(73972),l=r(72597).resizeText,u=r(1486),c=u.textfont,f=u.insidetextfont,h=u.outsidetextfont,p=r(69383);function d(t,e,r){a.pointStyle(t.selectAll(\\\"path\\\"),e,r),v(t,e,r)}function v(t,e,r){t.selectAll(\\\"text\\\").each((function(t){var i=n.select(this),s=o.ensureUniformFontSize(r,g(i,t,e,r));a.font(i,s)}))}function g(t,e,r,n){var i=n._fullLayout.font,a=r.textfont;if(t.classed(\\\"bartext-inside\\\")){var o=_(e,r);a=m(r,e.i,i,o)}else t.classed(\\\"bartext-outside\\\")&&(a=x(r,e.i,i));return a}function y(t,e,r){return b(c,t.textfont,e,r)}function m(t,e,r,n){var a=y(t,e,r);return(void 0===t._input.textfont||void 0===t._input.textfont.color||Array.isArray(t.textfont.color)&&void 0===t.textfont.color[e])&&(a={color:i.contrast(n),family:a.family,size:a.size}),b(f,t.insidetextfont,e,a)}function x(t,e,r){var n=y(t,e,r);return b(h,t.outsidetextfont,e,n)}function b(t,e,r,n){e=e||{};var i=p.getValue(e.family,r),a=p.getValue(e.size,r),o=p.getValue(e.color,r);return{family:p.coerceString(t.family,i,n.family),size:p.coerceNumber(t.size,a,n.size),color:p.coerceColor(t.color,o,n.color)}}function _(t,e){return\\\"waterfall\\\"===e.type?e[t.dir].marker.color:t.mcc||t.mc||e.marker.color}t.exports={style:function(t){var e=n.select(t).selectAll(\\\"g.barlayer\\\").selectAll(\\\"g.trace\\\");l(t,e,\\\"bar\\\");var r=e.size(),i=t._fullLayout;e.style(\\\"opacity\\\",(function(t){return t[0].trace.opacity})).each((function(t){(\\\"stack\\\"===i.barmode&&r>1||0===i.bargap&&0===i.bargroupgap&&!t[0].trace.marker.line.width)&&n.select(this).attr(\\\"shape-rendering\\\",\\\"crispEdges\\\")})),e.selectAll(\\\"g.points\\\").each((function(e){d(n.select(this),e[0].trace,t)})),s.getComponentMethod(\\\"errorbars\\\",\\\"style\\\")(e)},styleTextPoints:v,styleOnSelect:function(t,e,r){var i=e[0].trace;i.selectedpoints?function(t,e,r){a.selectedPointStyle(t.selectAll(\\\"path\\\"),e),function(t,e,r){t.each((function(t){var i,s=n.select(this);if(t.selected){i=o.ensureUniformFontSize(r,g(s,t,e,r));var l=e.selected.textfont&&e.selected.textfont.color;l&&(i.color=l),a.font(s,i)}else a.selectedTextStyle(s,e)}))}(t.selectAll(\\\"text\\\"),e,r)}(r,i,t):(d(r,i,t),s.getComponentMethod(\\\"errorbars\\\",\\\"style\\\")(r))},getInsideTextFont:m,getOutsideTextFont:x,getBarColor:_,resizeText:l}},98340:function(t,e,r){\\\"use strict\\\";var n=r(7901),i=r(52075).hasColorscale,a=r(1586),o=r(71828).coercePattern;t.exports=function(t,e,r,s,l){var u=r(\\\"marker.color\\\",s),c=i(t,\\\"marker\\\");c&&a(t,e,l,r,{prefix:\\\"marker.\\\",cLetter:\\\"c\\\"}),r(\\\"marker.line.color\\\",n.defaultLine),i(t,\\\"marker.line\\\")&&a(t,e,l,r,{prefix:\\\"marker.line.\\\",cLetter:\\\"c\\\"}),r(\\\"marker.line.width\\\"),r(\\\"marker.opacity\\\"),o(r,\\\"marker.pattern\\\",u,c),r(\\\"selected.marker.color\\\"),r(\\\"unselected.marker.color\\\")}},72597:function(t,e,r){\\\"use strict\\\";var n=r(39898),i=r(71828);function a(t){return\\\"_\\\"+t+\\\"Text_minsize\\\"}t.exports={recordMinTextSize:function(t,e,r){if(r.uniformtext.mode){var n=a(t),i=r.uniformtext.minsize,o=e.scale*e.fontSize;e.hide=o<i,r[n]=r[n]||1/0,e.hide||(r[n]=Math.min(r[n],Math.max(o,i)))}},clearMinTextSize:function(t,e){e[a(t)]=void 0},resizeText:function(t,e,r){var a=t._fullLayout,o=a[\\\"_\\\"+r+\\\"Text_minsize\\\"];if(o){var s,l=\\\"hide\\\"===a.uniformtext.mode;switch(r){case\\\"funnelarea\\\":case\\\"pie\\\":case\\\"sunburst\\\":s=\\\"g.slice\\\";break;case\\\"treemap\\\":case\\\"icicle\\\":s=\\\"g.slice, g.pathbar\\\";break;default:s=\\\"g.points > g.point\\\"}e.selectAll(s).each((function(t){var e=t.transform;if(e){e.scale=l&&e.hide?0:o/e.fontSize;var r=n.select(this).select(\\\"text\\\");i.setTransormAndDisplay(r,e)}}))}}}},55023:function(t,e,r){\\\"use strict\\\";var n=r(5386).fF,i=r(1426).extendFlat,a=r(81245),o=r(1486);t.exports={r:a.r,theta:a.theta,r0:a.r0,dr:a.dr,theta0:a.theta0,dtheta:a.dtheta,thetaunit:a.thetaunit,base:i({},o.base,{}),offset:i({},o.offset,{}),width:i({},o.width,{}),text:i({},o.text,{}),hovertext:i({},o.hovertext,{}),marker:o.marker,hoverinfo:a.hoverinfo,hovertemplate:n(),selected:o.selected,unselected:o.unselected}},74692:function(t,e,r){\\\"use strict\\\";var n=r(52075).hasColorscale,i=r(78803),a=r(75341),o=r(11661).setGroupPositions,s=r(66279),l=r(73972).traceIs,u=r(71828).extendFlat;t.exports={calc:function(t,e){for(var r=t._fullLayout,o=e.subplot,l=r[o].radialaxis,u=r[o].angularaxis,c=l.makeCalcdata(e,\\\"r\\\"),f=u.makeCalcdata(e,\\\"theta\\\"),h=e._length,p=new Array(h),d=c,v=f,g=0;g<h;g++)p[g]={p:v[g],s:d[g]};function y(t){var r=e[t];void 0!==r&&(e[\\\"_\\\"+t]=Array.isArray(r)?u.makeCalcdata(e,t):u.d2c(r,e.thetaunit))}return\\\"linear\\\"===u.type&&(y(\\\"width\\\"),y(\\\"offset\\\")),n(e,\\\"marker\\\")&&i(t,e,{vals:e.marker.color,containerStr:\\\"marker\\\",cLetter:\\\"c\\\"}),n(e,\\\"marker.line\\\")&&i(t,e,{vals:e.marker.line.color,containerStr:\\\"marker.line\\\",cLetter:\\\"c\\\"}),a(p,e),s(p,e),p},crossTraceCalc:function(t,e,r){for(var n=t.calcdata,i=[],a=0;a<n.length;a++){var s=n[a],c=s[0].trace;!0===c.visible&&l(c,\\\"bar\\\")&&c.subplot===r&&i.push(s)}var f=u({},e.radialaxis,{_id:\\\"x\\\"}),h=e.angularaxis;o(t,h,f,i,{mode:e.barmode,norm:e.barnorm,gap:e.bargap,groupgap:e.bargroupgap})}}},6135:function(t,e,r){\\\"use strict\\\";var n=r(71828),i=r(22184).handleRThetaDefaults,a=r(98340),o=r(55023);t.exports=function(t,e,r,s){function l(r,i){return n.coerce(t,e,o,r,i)}i(t,e,s,l)?(l(\\\"thetaunit\\\"),l(\\\"base\\\"),l(\\\"offset\\\"),l(\\\"width\\\"),l(\\\"text\\\"),l(\\\"hovertext\\\"),l(\\\"hovertemplate\\\"),a(t,e,l,r,s),n.coerceSelectionMarkerOpacity(e,l)):e.visible=!1}},27379:function(t,e,r){\\\"use strict\\\";var n=r(30211),i=r(71828),a=r(95423).getTraceColor,o=i.fillText,s=r(59150).makeHoverPointText,l=r(10869).isPtInsidePolygon;t.exports=function(t,e,r){var u=t.cd,c=u[0].trace,f=t.subplot,h=f.radialAxis,p=f.angularAxis,d=f.vangles,v=d?l:i.isPtInsideSector,g=t.maxHoverDistance,y=p._period||2*Math.PI,m=Math.abs(h.g2p(Math.sqrt(e*e+r*r))),x=Math.atan2(r,e);if(h.range[0]>h.range[1]&&(x+=Math.PI),n.getClosest(u,(function(t){return v(m,x,[t.rp0,t.rp1],[t.thetag0,t.thetag1],d)?g+Math.min(1,Math.abs(t.thetag1-t.thetag0)/y)-1+(t.rp1-m)/(t.rp1-t.rp0)-1:1/0}),t),!1!==t.index){var b=u[t.index];t.x0=t.x1=b.ct[0],t.y0=t.y1=b.ct[1];var _=i.extendFlat({},b,{r:b.s,theta:b.p});return o(b,c,t),s(_,c,f,t),t.hovertemplate=c.hovertemplate,t.color=a(c,b),t.xLabelVal=t.yLabelVal=void 0,b.s<0&&(t.idealAlign=\\\"left\\\"),[t]}}},23381:function(t,e,r){\\\"use strict\\\";t.exports={moduleType:\\\"trace\\\",name:\\\"barpolar\\\",basePlotModule:r(23580),categories:[\\\"polar\\\",\\\"bar\\\",\\\"showLegend\\\"],attributes:r(55023),layoutAttributes:r(40151),supplyDefaults:r(6135),supplyLayoutDefaults:r(19860),calc:r(74692).calc,crossTraceCalc:r(74692).crossTraceCalc,plot:r(60173),colorbar:r(4898),formatLabels:r(98608),style:r(16688).style,styleOnSelect:r(16688).styleOnSelect,hoverPoints:r(27379),selectPoints:r(81974),meta:{}}},40151:function(t){\\\"use strict\\\";t.exports={barmode:{valType:\\\"enumerated\\\",values:[\\\"stack\\\",\\\"overlay\\\"],dflt:\\\"stack\\\",editType:\\\"calc\\\"},bargap:{valType:\\\"number\\\",dflt:.1,min:0,max:1,editType:\\\"calc\\\"}}},19860:function(t,e,r){\\\"use strict\\\";var n=r(71828),i=r(40151);t.exports=function(t,e,r){var a,o={};function s(r,o){return n.coerce(t[a]||{},e[a],i,r,o)}for(var l=0;l<r.length;l++){var u=r[l];\\\"barpolar\\\"===u.type&&!0===u.visible&&(o[a=u.subplot]||(s(\\\"barmode\\\"),s(\\\"bargap\\\"),o[a]=1))}}},60173:function(t,e,r){\\\"use strict\\\";var n=r(39898),i=r(92770),a=r(71828),o=r(91424),s=r(10869);t.exports=function(t,e,r){var l=t._context.staticPlot,u=e.xaxis,c=e.yaxis,f=e.radialAxis,h=e.angularAxis,p=function(t){var e=t.cxx,r=t.cyy;return t.vangles?function(n,i,o,l){var u,c;a.angleDelta(o,l)>0?(u=o,c=l):(u=l,c=o);var f=[s.findEnclosingVertexAngles(u,t.vangles)[0],(u+c)/2,s.findEnclosingVertexAngles(c,t.vangles)[1]];return s.pathPolygonAnnulus(n,i,u,c,f,e,r)}:function(t,n,i,o){return a.pathAnnulus(t,n,i,o,e,r)}}(e),d=e.layers.frontplot.select(\\\"g.barlayer\\\");a.makeTraceGroups(d,r,\\\"trace bars\\\").each((function(){var r=n.select(this),s=a.ensureSingle(r,\\\"g\\\",\\\"points\\\").selectAll(\\\"g.point\\\").data(a.identity);s.enter().append(\\\"g\\\").style(\\\"vector-effect\\\",l?\\\"none\\\":\\\"non-scaling-stroke\\\").style(\\\"stroke-miterlimit\\\",2).classed(\\\"point\\\",!0),s.exit().remove(),s.each((function(t){var e,r=n.select(this),o=t.rp0=f.c2p(t.s0),s=t.rp1=f.c2p(t.s1),l=t.thetag0=h.c2g(t.p0),d=t.thetag1=h.c2g(t.p1);if(i(o)&&i(s)&&i(l)&&i(d)&&o!==s&&l!==d){var v=f.c2g(t.s1),g=(l+d)/2;t.ct=[u.c2p(v*Math.cos(g)),c.c2p(v*Math.sin(g))],e=p(o,s,l,d)}else e=\\\"M0,0Z\\\";a.ensureSingle(r,\\\"path\\\").attr(\\\"d\\\",e)})),o.setClipUrl(r,e._hasClipOnAxisFalse?e.clipIds.forTraces:null,t)}))}},53522:function(t,e,r){\\\"use strict\\\";var n=r(82196),i=r(1486),a=r(22399),o=r(12663).axisHoverFormat,s=r(5386).fF,l=r(1426).extendFlat,u=n.marker,c=u.line;t.exports={y:{valType:\\\"data_array\\\",editType:\\\"calc+clearAxisTypes\\\"},x:{valType:\\\"data_array\\\",editType:\\\"calc+clearAxisTypes\\\"},x0:{valType:\\\"any\\\",editType:\\\"calc+clearAxisTypes\\\"},y0:{valType:\\\"any\\\",editType:\\\"calc+clearAxisTypes\\\"},dx:{valType:\\\"number\\\",editType:\\\"calc\\\"},dy:{valType:\\\"number\\\",editType:\\\"calc\\\"},xperiod:n.xperiod,yperiod:n.yperiod,xperiod0:n.xperiod0,yperiod0:n.yperiod0,xperiodalignment:n.xperiodalignment,yperiodalignment:n.yperiodalignment,xhoverformat:o(\\\"x\\\"),yhoverformat:o(\\\"y\\\"),name:{valType:\\\"string\\\",editType:\\\"calc+clearAxisTypes\\\"},q1:{valType:\\\"data_array\\\",editType:\\\"calc+clearAxisTypes\\\"},median:{valType:\\\"data_array\\\",editType:\\\"calc+clearAxisTypes\\\"},q3:{valType:\\\"data_array\\\",editType:\\\"calc+clearAxisTypes\\\"},lowerfence:{valType:\\\"data_array\\\",editType:\\\"calc\\\"},upperfence:{valType:\\\"data_array\\\",editType:\\\"calc\\\"},notched:{valType:\\\"boolean\\\",editType:\\\"calc\\\"},notchwidth:{valType:\\\"number\\\",min:0,max:.5,dflt:.25,editType:\\\"calc\\\"},notchspan:{valType:\\\"data_array\\\",editType:\\\"calc\\\"},boxpoints:{valType:\\\"enumerated\\\",values:[\\\"all\\\",\\\"outliers\\\",\\\"suspectedoutliers\\\",!1],editType:\\\"calc\\\"},jitter:{valType:\\\"number\\\",min:0,max:1,editType:\\\"calc\\\"},pointpos:{valType:\\\"number\\\",min:-2,max:2,editType:\\\"calc\\\"},boxmean:{valType:\\\"enumerated\\\",values:[!0,\\\"sd\\\",!1],editType:\\\"calc\\\"},mean:{valType:\\\"data_array\\\",editType:\\\"calc\\\"},sd:{valType:\\\"data_array\\\",editType:\\\"calc\\\"},orientation:{valType:\\\"enumerated\\\",values:[\\\"v\\\",\\\"h\\\"],editType:\\\"calc+clearAxisTypes\\\"},quartilemethod:{valType:\\\"enumerated\\\",values:[\\\"linear\\\",\\\"exclusive\\\",\\\"inclusive\\\"],dflt:\\\"linear\\\",editType:\\\"calc\\\"},width:{valType:\\\"number\\\",min:0,dflt:0,editType:\\\"calc\\\"},marker:{outliercolor:{valType:\\\"color\\\",dflt:\\\"rgba(0, 0, 0, 0)\\\",editType:\\\"style\\\"},symbol:l({},u.symbol,{arrayOk:!1,editType:\\\"plot\\\"}),opacity:l({},u.opacity,{arrayOk:!1,dflt:1,editType:\\\"style\\\"}),angle:l({},u.angle,{arrayOk:!1,editType:\\\"calc\\\"}),size:l({},u.size,{arrayOk:!1,editType:\\\"calc\\\"}),color:l({},u.color,{arrayOk:!1,editType:\\\"style\\\"}),line:{color:l({},c.color,{arrayOk:!1,dflt:a.defaultLine,editType:\\\"style\\\"}),width:l({},c.width,{arrayOk:!1,dflt:0,editType:\\\"style\\\"}),outliercolor:{valType:\\\"color\\\",editType:\\\"style\\\"},outlierwidth:{valType:\\\"number\\\",min:0,dflt:1,editType:\\\"style\\\"},editType:\\\"style\\\"},editType:\\\"plot\\\"},line:{color:{valType:\\\"color\\\",editType:\\\"style\\\"},width:{valType:\\\"number\\\",min:0,dflt:2,editType:\\\"style\\\"},editType:\\\"plot\\\"},fillcolor:n.fillcolor,whiskerwidth:{valType:\\\"number\\\",min:0,max:1,dflt:.5,editType:\\\"calc\\\"},offsetgroup:i.offsetgroup,alignmentgroup:i.alignmentgroup,selected:{marker:n.selected.marker,editType:\\\"style\\\"},unselected:{marker:n.unselected.marker,editType:\\\"style\\\"},text:l({},n.text,{}),hovertext:l({},n.hovertext,{}),hovertemplate:s({}),hoveron:{valType:\\\"flaglist\\\",flags:[\\\"boxes\\\",\\\"points\\\"],dflt:\\\"boxes+points\\\",editType:\\\"style\\\"}}},48518:function(t,e,r){\\\"use strict\\\";var n=r(92770),i=r(89298),a=r(42973),o=r(71828),s=r(50606).BADNUM,l=o._;t.exports=function(t,e){var r,u,m,x,b,_,w,T=t._fullLayout,k=i.getFromId(t,e.xaxis||\\\"x\\\"),A=i.getFromId(t,e.yaxis||\\\"y\\\"),M=[],S=\\\"violin\\\"===e.type?\\\"_numViolins\\\":\\\"_numBoxes\\\";\\\"h\\\"===e.orientation?(m=k,x=\\\"x\\\",b=A,_=\\\"y\\\",w=!!e.yperiodalignment):(m=A,x=\\\"y\\\",b=k,_=\\\"x\\\",w=!!e.xperiodalignment);var E,L,C,P,O,I,D=function(t,e,r,i){var s,l=e+\\\"0\\\"in t;if(e in t||l&&\\\"d\\\"+e in t){var u=r.makeCalcdata(t,e);return[a(t,r,e,u).vals,u]}s=l?t[e+\\\"0\\\"]:\\\"name\\\"in t&&(\\\"category\\\"===r.type||n(t.name)&&-1!==[\\\"linear\\\",\\\"log\\\"].indexOf(r.type)||o.isDateTime(t.name)&&\\\"date\\\"===r.type)?t.name:i;for(var c=\\\"multicategory\\\"===r.type?r.r2c_just_indices(s):r.d2c(s,0,t[e+\\\"calendar\\\"]),f=t._length,h=new Array(f),p=0;p<f;p++)h[p]=c;return[h]}(e,_,b,T[S]),z=D[0],R=D[1],F=o.distinctVals(z,b),B=F.vals,N=F.minDiff/2,j=\\\"all\\\"===(e.boxpoints||e.points)?o.identity:function(t){return t.v<E.lf||t.v>E.uf};if(e._hasPreCompStats){var U=e[x],V=function(t){return m.d2c((e[t]||[])[r])},H=1/0,q=-1/0;for(r=0;r<e._length;r++){var G=z[r];if(n(G)){if((E={}).pos=E[_]=G,w&&R&&(E.orig_p=R[r]),E.q1=V(\\\"q1\\\"),E.med=V(\\\"median\\\"),E.q3=V(\\\"q3\\\"),L=[],U&&o.isArrayOrTypedArray(U[r]))for(u=0;u<U[r].length;u++)(I=m.d2c(U[r][u]))!==s&&(c(O={v:I,i:[r,u]},e,[r,u]),L.push(O));if(E.pts=L.sort(f),P=(C=E[x]=L.map(h)).length,E.med!==s&&E.q1!==s&&E.q3!==s&&E.med>=E.q1&&E.q3>=E.med){var Z=V(\\\"lowerfence\\\");E.lf=Z!==s&&Z<=E.q1?Z:p(E,C,P);var Y=V(\\\"upperfence\\\");E.uf=Y!==s&&Y>=E.q3?Y:d(E,C,P);var W=V(\\\"mean\\\");E.mean=W!==s?W:P?o.mean(C,P):(E.q1+E.q3)/2;var X=V(\\\"sd\\\");E.sd=W!==s&&X>=0?X:P?o.stdev(C,P,E.mean):E.q3-E.q1,E.lo=v(E),E.uo=g(E);var J=V(\\\"notchspan\\\");J=J!==s&&J>0?J:y(E,P),E.ln=E.med-J,E.un=E.med+J;var K=E.lf,$=E.uf;e.boxpoints&&C.length&&(K=Math.min(K,C[0]),$=Math.max($,C[P-1])),e.notched&&(K=Math.min(K,E.ln),$=Math.max($,E.un)),E.min=K,E.max=$}else{var Q;o.warn([\\\"Invalid input - make sure that q1 <= median <= q3\\\",\\\"q1 = \\\"+E.q1,\\\"median = \\\"+E.med,\\\"q3 = \\\"+E.q3].join(\\\"\\\\n\\\")),Q=E.med!==s?E.med:E.q1!==s?E.q3!==s?(E.q1+E.q3)/2:E.q1:E.q3!==s?E.q3:0,E.med=Q,E.q1=E.q3=Q,E.lf=E.uf=Q,E.mean=E.sd=Q,E.ln=E.un=Q,E.min=E.max=Q}H=Math.min(H,E.min),q=Math.max(q,E.max),E.pts2=L.filter(j),M.push(E)}}e._extremes[m._id]=i.findExtremes(m,[H,q],{padded:!0})}else{var tt=m.makeCalcdata(e,x),et=function(t,e){for(var r=t.length,n=new Array(r+1),i=0;i<r;i++)n[i]=t[i]-e;return n[r]=t[r-1]+e,n}(B,N),rt=B.length,nt=function(t){for(var e=new Array(t),r=0;r<t;r++)e[r]=[];return e}(rt);for(r=0;r<e._length;r++)if(I=tt[r],n(I)){var it=o.findBin(z[r],et);it>=0&&it<rt&&(c(O={v:I,i:r},e,r),nt[it].push(O))}var at=1/0,ot=-1/0,st=e.quartilemethod,lt=\\\"exclusive\\\"===st,ut=\\\"inclusive\\\"===st;for(r=0;r<rt;r++)if(nt[r].length>0){var ct,ft;(E={}).pos=E[_]=B[r],L=E.pts=nt[r].sort(f),P=(C=E[x]=L.map(h)).length,E.min=C[0],E.max=C[P-1],E.mean=o.mean(C,P),E.sd=o.stdev(C,P,E.mean),E.med=o.interp(C,.5),P%2&&(lt||ut)?(lt?(ct=C.slice(0,P/2),ft=C.slice(P/2+1)):ut&&(ct=C.slice(0,P/2+1),ft=C.slice(P/2)),E.q1=o.interp(ct,.5),E.q3=o.interp(ft,.5)):(E.q1=o.interp(C,.25),E.q3=o.interp(C,.75)),E.lf=p(E,C,P),E.uf=d(E,C,P),E.lo=v(E),E.uo=g(E);var ht=y(E,P);E.ln=E.med-ht,E.un=E.med+ht,at=Math.min(at,E.ln),ot=Math.max(ot,E.un),E.pts2=L.filter(j),M.push(E)}e._extremes[m._id]=i.findExtremes(m,e.notched?tt.concat([at,ot]):tt,{padded:!0})}return function(t,e){if(o.isArrayOrTypedArray(e.selectedpoints))for(var r=0;r<t.length;r++){for(var n=t[r].pts||[],i={},a=0;a<n.length;a++)i[n[a].i]=a;o.tagSelected(n,e,i)}}(M,e),M.length>0?(M[0].t={num:T[S],dPos:N,posLetter:_,valLetter:x,labels:{med:l(t,\\\"median:\\\"),min:l(t,\\\"min:\\\"),q1:l(t,\\\"q1:\\\"),q3:l(t,\\\"q3:\\\"),max:l(t,\\\"max:\\\"),mean:\\\"sd\\\"===e.boxmean?l(t,\\\"mean ± σ:\\\"):l(t,\\\"mean:\\\"),lf:l(t,\\\"lower fence:\\\"),uf:l(t,\\\"upper fence:\\\")}},T[S]++,M):[{t:{empty:!0}}]};var u={text:\\\"tx\\\",hovertext:\\\"htx\\\"};function c(t,e,r){for(var n in u)o.isArrayOrTypedArray(e[n])&&(Array.isArray(r)?o.isArrayOrTypedArray(e[n][r[0]])&&(t[u[n]]=e[n][r[0]][r[1]]):t[u[n]]=e[n][r])}function f(t,e){return t.v-e.v}function h(t){return t.v}function p(t,e,r){return 0===r?t.q1:Math.min(t.q1,e[Math.min(o.findBin(2.5*t.q1-1.5*t.q3,e,!0)+1,r-1)])}function d(t,e,r){return 0===r?t.q3:Math.max(t.q3,e[Math.max(o.findBin(2.5*t.q3-1.5*t.q1,e),0)])}function v(t){return 4*t.q1-3*t.q3}function g(t){return 4*t.q3-3*t.q1}function y(t,e){return 0===e?0:1.57*(t.q3-t.q1)/Math.sqrt(e)}},37188:function(t,e,r){\\\"use strict\\\";var n=r(89298),i=r(71828),a=r(99082).getAxisGroup,o=[\\\"v\\\",\\\"h\\\"];function s(t,e,r,o){var s,l,u,c=e.calcdata,f=e._fullLayout,h=o._id,p=h.charAt(0),d=[],v=0;for(s=0;s<r.length;s++)for(u=c[r[s]],l=0;l<u.length;l++)d.push(o.c2l(u[l].pos,!0)),v+=(u[l].pts2||[]).length;if(d.length){var g=i.distinctVals(d);\\\"category\\\"!==o.type&&\\\"multicategory\\\"!==o.type||(g.minDiff=1);var y=g.minDiff/2;n.minDtick(o,g.minDiff,g.vals[0],!0);var m=f[\\\"violin\\\"===t?\\\"_numViolins\\\":\\\"_numBoxes\\\"],x=\\\"group\\\"===f[t+\\\"mode\\\"]&&m>1,b=1-f[t+\\\"gap\\\"],_=1-f[t+\\\"groupgap\\\"];for(s=0;s<r.length;s++){var w,T,k,A,M,S,E=(u=c[r[s]])[0].trace,L=u[0].t,C=E.width,P=E.side;if(C)w=T=A=C/2,k=0;else if(w=y,x){var O=a(f,o._id)+E.orientation,I=(f._alignmentOpts[O]||{})[E.alignmentgroup]||{},D=Object.keys(I.offsetGroups||{}).length,z=D||m;T=w*b*_/z,k=2*w*(((D?E._offsetIndex:L.num)+.5)/z-.5)*b,A=w*b/z}else T=w*b*_,k=0,A=w;L.dPos=w,L.bPos=k,L.bdPos=T,L.wHover=A;var R,F,B,N,j,U,V=k+T,H=Boolean(C);if(\\\"positive\\\"===P?(M=w*(C?1:.5),R=V,S=R=k):\\\"negative\\\"===P?(M=R=k,S=w*(C?1:.5),F=V):(M=S=w,R=F=V),(E.boxpoints||E.points)&&v>0){var q=E.pointpos,G=E.jitter,Z=E.marker.size/2,Y=0;q+G>=0&&((Y=V*(q+G))>M?(H=!0,j=Z,B=Y):Y>R&&(j=Z,B=M)),Y<=M&&(B=M);var W=0;q-G<=0&&((W=-V*(q-G))>S?(H=!0,U=Z,N=W):W>F&&(U=Z,N=S)),W<=S&&(N=S)}else B=M,N=S;var X=new Array(u.length);for(l=0;l<u.length;l++)X[l]=u[l].pos;E._extremes[h]=n.findExtremes(o,X,{padded:H,vpadminus:N,vpadplus:B,vpadLinearized:!0,ppadminus:{x:U,y:j}[p],ppadplus:{x:j,y:U}[p]})}}}t.exports={crossTraceCalc:function(t,e){for(var r=t.calcdata,n=e.xaxis,i=e.yaxis,a=0;a<o.length;a++){for(var l=o[a],u=\\\"h\\\"===l?i:n,c=[],f=0;f<r.length;f++){var h=r[f],p=h[0].t,d=h[0].trace;!0!==d.visible||\\\"box\\\"!==d.type&&\\\"candlestick\\\"!==d.type||p.empty||(d.orientation||\\\"v\\\")!==l||d.xaxis!==n._id||d.yaxis!==i._id||c.push(f)}s(\\\"box\\\",t,c,u)}},setPositionOffset:s}},36411:function(t,e,r){\\\"use strict\\\";var n=r(71828),i=r(73972),a=r(7901),o=r(73927),s=r(26125),l=r(4322),u=r(53522);function c(t,e,r,a){function o(t){var e=0;return t&&t.length&&(e+=1,n.isArrayOrTypedArray(t[0])&&t[0].length&&(e+=1)),e}function s(e){return n.validate(t[e],u[e])}var c,f=r(\\\"y\\\"),h=r(\\\"x\\\");if(\\\"box\\\"===e.type){var p=r(\\\"q1\\\"),d=r(\\\"median\\\"),v=r(\\\"q3\\\");e._hasPreCompStats=p&&p.length&&d&&d.length&&v&&v.length,c=Math.min(n.minRowLength(p),n.minRowLength(d),n.minRowLength(v))}var g,y,m=o(f),x=o(h),b=m&&n.minRowLength(f),_=x&&n.minRowLength(h),w=a.calendar,T={autotypenumbers:a.autotypenumbers};if(e._hasPreCompStats)switch(String(x)+String(m)){case\\\"00\\\":var k=s(\\\"x0\\\")||s(\\\"dx\\\");g=!s(\\\"y0\\\")&&!s(\\\"dy\\\")||k?\\\"v\\\":\\\"h\\\",y=c;break;case\\\"10\\\":g=\\\"v\\\",y=Math.min(c,_);break;case\\\"20\\\":g=\\\"h\\\",y=Math.min(c,h.length);break;case\\\"01\\\":g=\\\"h\\\",y=Math.min(c,b);break;case\\\"02\\\":g=\\\"v\\\",y=Math.min(c,f.length);break;case\\\"12\\\":g=\\\"v\\\",y=Math.min(c,_,f.length);break;case\\\"21\\\":g=\\\"h\\\",y=Math.min(c,h.length,b);break;case\\\"11\\\":y=0;break;case\\\"22\\\":var A,M=!1;for(A=0;A<h.length;A++)if(\\\"category\\\"===l(h[A],w,T)){M=!0;break}if(M)g=\\\"v\\\",y=Math.min(c,_,f.length);else{for(A=0;A<f.length;A++)if(\\\"category\\\"===l(f[A],w,T)){M=!0;break}M?(g=\\\"h\\\",y=Math.min(c,h.length,b)):(g=\\\"v\\\",y=Math.min(c,_,f.length))}}else m>0?(g=\\\"v\\\",y=x>0?Math.min(_,b):Math.min(b)):x>0?(g=\\\"h\\\",y=Math.min(_)):y=0;if(y){e._length=y;var S=r(\\\"orientation\\\",g);e._hasPreCompStats?\\\"v\\\"===S&&0===x?(r(\\\"x0\\\",0),r(\\\"dx\\\",1)):\\\"h\\\"===S&&0===m&&(r(\\\"y0\\\",0),r(\\\"dy\\\",1)):\\\"v\\\"===S&&0===x?r(\\\"x0\\\"):\\\"h\\\"===S&&0===m&&r(\\\"y0\\\"),i.getComponentMethod(\\\"calendars\\\",\\\"handleTraceDefaults\\\")(t,e,[\\\"x\\\",\\\"y\\\"],a)}else e.visible=!1}function f(t,e,r,i){var a=i.prefix,o=n.coerce2(t,e,u,\\\"marker.outliercolor\\\"),s=r(\\\"marker.line.outliercolor\\\"),l=\\\"outliers\\\";e._hasPreCompStats?l=\\\"all\\\":(o||s)&&(l=\\\"suspectedoutliers\\\");var c=r(a+\\\"points\\\",l);c?(r(\\\"jitter\\\",\\\"all\\\"===c?.3:0),r(\\\"pointpos\\\",\\\"all\\\"===c?-1.5:0),r(\\\"marker.symbol\\\"),r(\\\"marker.opacity\\\"),r(\\\"marker.size\\\"),r(\\\"marker.angle\\\"),r(\\\"marker.color\\\",e.line.color),r(\\\"marker.line.color\\\"),r(\\\"marker.line.width\\\"),\\\"suspectedoutliers\\\"===c&&(r(\\\"marker.line.outliercolor\\\",e.marker.color),r(\\\"marker.line.outlierwidth\\\")),r(\\\"selected.marker.color\\\"),r(\\\"unselected.marker.color\\\"),r(\\\"selected.marker.size\\\"),r(\\\"unselected.marker.size\\\"),r(\\\"text\\\"),r(\\\"hovertext\\\")):delete e.marker;var f=r(\\\"hoveron\\\");\\\"all\\\"!==f&&-1===f.indexOf(\\\"points\\\")||r(\\\"hovertemplate\\\"),n.coerceSelectionMarkerOpacity(e,r)}t.exports={supplyDefaults:function(t,e,r,i){function s(r,i){return n.coerce(t,e,u,r,i)}if(c(t,e,s,i),!1!==e.visible){o(t,e,i,s),s(\\\"xhoverformat\\\"),s(\\\"yhoverformat\\\");var l=e._hasPreCompStats;l&&(s(\\\"lowerfence\\\"),s(\\\"upperfence\\\")),s(\\\"line.color\\\",(t.marker||{}).color||r),s(\\\"line.width\\\"),s(\\\"fillcolor\\\",a.addOpacity(e.line.color,.5));var h=!1;if(l){var p=s(\\\"mean\\\"),d=s(\\\"sd\\\");p&&p.length&&(h=!0,d&&d.length&&(h=\\\"sd\\\"))}s(\\\"boxmean\\\",h),s(\\\"whiskerwidth\\\"),s(\\\"width\\\"),s(\\\"quartilemethod\\\");var v=!1;if(l){var g=s(\\\"notchspan\\\");g&&g.length&&(v=!0)}else n.validate(t.notchwidth,u.notchwidth)&&(v=!0);s(\\\"notched\\\",v)&&s(\\\"notchwidth\\\"),f(t,e,s,{prefix:\\\"box\\\"})}},crossTraceDefaults:function(t,e){var r,i;function a(t){return n.coerce(i._input,i,u,t)}for(var o=0;o<t.length;o++){var l=(i=t[o]).type;\\\"box\\\"!==l&&\\\"violin\\\"!==l||(r=i._input,\\\"group\\\"===e[l+\\\"mode\\\"]&&s(r,i,e,a))}},handleSampleDefaults:c,handlePointsDefaults:f}},74907:function(t){\\\"use strict\\\";t.exports=function(t,e){return e.hoverOnBox&&(t.hoverOnBox=e.hoverOnBox),\\\"xVal\\\"in e&&(t.x=e.xVal),\\\"yVal\\\"in e&&(t.y=e.yVal),e.xa&&(t.xaxis=e.xa),e.ya&&(t.yaxis=e.ya),t}},41868:function(t,e,r){\\\"use strict\\\";var n=r(89298),i=r(71828),a=r(30211),o=r(7901),s=i.fillText;function l(t,e,r,s){var l,u,c,f,h,p,d,v,g,y,m,x,b,_,w=t.cd,T=t.xa,k=t.ya,A=w[0].trace,M=w[0].t,S=\\\"violin\\\"===A.type,E=M.bdPos,L=M.wHover,C=function(t){return c.c2l(t.pos)+M.bPos-c.c2l(p)};S&&\\\"both\\\"!==A.side?(\\\"positive\\\"===A.side&&(g=function(t){var e=C(t);return a.inbox(e,e+L,y)},x=E,b=0),\\\"negative\\\"===A.side&&(g=function(t){var e=C(t);return a.inbox(e-L,e,y)},x=0,b=E)):(g=function(t){var e=C(t);return a.inbox(e-L,e+L,y)},x=b=E),_=S?function(t){return a.inbox(t.span[0]-h,t.span[1]-h,y)}:function(t){return a.inbox(t.min-h,t.max-h,y)},\\\"h\\\"===A.orientation?(h=e,p=r,d=_,v=g,l=\\\"y\\\",c=k,u=\\\"x\\\",f=T):(h=r,p=e,d=g,v=_,l=\\\"x\\\",c=T,u=\\\"y\\\",f=k);var P=Math.min(1,E/Math.abs(c.r2c(c.range[1])-c.r2c(c.range[0])));function O(t){return(d(t)+v(t))/2}y=t.maxHoverDistance-P,m=t.maxSpikeDistance-P;var I=a.getDistanceFunction(s,d,v,O);if(a.getClosest(w,I,t),!1===t.index)return[];var D=w[t.index],z=A.line.color,R=(A.marker||{}).color;o.opacity(z)&&A.line.width?t.color=z:o.opacity(R)&&A.boxpoints?t.color=R:t.color=A.fillcolor,t[l+\\\"0\\\"]=c.c2p(D.pos+M.bPos-b,!0),t[l+\\\"1\\\"]=c.c2p(D.pos+M.bPos+x,!0),t[l+\\\"LabelVal\\\"]=void 0!==D.orig_p?D.orig_p:D.pos;var F=l+\\\"Spike\\\";t.spikeDistance=O(D)*m/y,t[F]=c.c2p(D.pos,!0);var B=A.boxmean||(A.meanline||{}).visible,N=A.boxpoints||A.points,j=N&&B?[\\\"max\\\",\\\"uf\\\",\\\"q3\\\",\\\"med\\\",\\\"mean\\\",\\\"q1\\\",\\\"lf\\\",\\\"min\\\"]:N&&!B?[\\\"max\\\",\\\"uf\\\",\\\"q3\\\",\\\"med\\\",\\\"q1\\\",\\\"lf\\\",\\\"min\\\"]:!N&&B?[\\\"max\\\",\\\"q3\\\",\\\"med\\\",\\\"mean\\\",\\\"q1\\\",\\\"min\\\"]:[\\\"max\\\",\\\"q3\\\",\\\"med\\\",\\\"q1\\\",\\\"min\\\"],U=f.range[1]<f.range[0];A.orientation===(U?\\\"v\\\":\\\"h\\\")&&j.reverse();for(var V=t.spikeDistance,H=t[F],q=[],G=0;G<j.length;G++){var Z=j[G];if(Z in D){var Y=D[Z],W=f.c2p(Y,!0),X=i.extendFlat({},t);X.attr=Z,X[u+\\\"0\\\"]=X[u+\\\"1\\\"]=W,X[u+\\\"LabelVal\\\"]=Y,X[u+\\\"Label\\\"]=(M.labels?M.labels[Z]+\\\" \\\":\\\"\\\")+n.hoverLabelText(f,Y,A[u+\\\"hoverformat\\\"]),X.hoverOnBox=!0,\\\"mean\\\"===Z&&\\\"sd\\\"in D&&\\\"sd\\\"===A.boxmean&&(X[u+\\\"err\\\"]=D.sd),X.hovertemplate=!1,q.push(X)}}t.name=\\\"\\\",t.spikeDistance=void 0,t[F]=void 0;for(var J=0;J<q.length;J++)\\\"med\\\"!==q[J].attr?(q[J].name=\\\"\\\",q[J].spikeDistance=void 0,q[J][F]=void 0):(q[J].spikeDistance=V,q[J][F]=H);return q}function u(t,e,r){for(var n,o,l,u=t.cd,c=t.xa,f=t.ya,h=u[0].trace,p=c.c2p(e),d=f.c2p(r),v=a.quadrature((function(t){var e=Math.max(3,t.mrc||0);return Math.max(Math.abs(c.c2p(t.x)-p)-e,1-3/e)}),(function(t){var e=Math.max(3,t.mrc||0);return Math.max(Math.abs(f.c2p(t.y)-d)-e,1-3/e)})),g=!1,y=0;y<u.length;y++){o=u[y];for(var m=0;m<(o.pts||[]).length;m++){var x=v(l=o.pts[m]);x<=t.distance&&(t.distance=x,g=[y,m])}}if(!g)return!1;l=(o=u[g[0]]).pts[g[1]];var b=c.c2p(l.x,!0),_=f.c2p(l.y,!0),w=l.mrc||1;n=i.extendFlat({},t,{index:l.i,color:(h.marker||{}).color,name:h.name,x0:b-w,x1:b+w,y0:_-w,y1:_+w,spikeDistance:t.distance,hovertemplate:h.hovertemplate});var T,k=o.orig_p,A=void 0!==k?k:o.pos;return\\\"h\\\"===h.orientation?(T=f,n.xLabelVal=l.x,n.yLabelVal=A):(T=c,n.xLabelVal=A,n.yLabelVal=l.y),n[T._id.charAt(0)+\\\"Spike\\\"]=T.c2p(o.pos,!0),s(l,h,n),n}t.exports={hoverPoints:function(t,e,r,n){var i,a=t.cd[0].trace.hoveron,o=[];return-1!==a.indexOf(\\\"boxes\\\")&&(o=o.concat(l(t,e,r,n))),-1!==a.indexOf(\\\"points\\\")&&(i=u(t,e,r)),\\\"closest\\\"===n?i?[i]:o:i?(o.push(i),o):o},hoverOnBoxes:l,hoverOnPoints:u}},83832:function(t,e,r){\\\"use strict\\\";t.exports={attributes:r(53522),layoutAttributes:r(40094),supplyDefaults:r(36411).supplyDefaults,crossTraceDefaults:r(36411).crossTraceDefaults,supplyLayoutDefaults:r(4199).supplyLayoutDefaults,calc:r(48518),crossTraceCalc:r(37188).crossTraceCalc,plot:r(86047).plot,style:r(58063).style,styleOnSelect:r(58063).styleOnSelect,hoverPoints:r(41868).hoverPoints,eventData:r(74907),selectPoints:r(24626),moduleType:\\\"trace\\\",name:\\\"box\\\",basePlotModule:r(93612),categories:[\\\"cartesian\\\",\\\"svg\\\",\\\"symbols\\\",\\\"oriented\\\",\\\"box-violin\\\",\\\"showLegend\\\",\\\"boxLayout\\\",\\\"zoomScale\\\"],meta:{}}},40094:function(t){\\\"use strict\\\";t.exports={boxmode:{valType:\\\"enumerated\\\",values:[\\\"group\\\",\\\"overlay\\\"],dflt:\\\"overlay\\\",editType:\\\"calc\\\"},boxgap:{valType:\\\"number\\\",min:0,max:1,dflt:.3,editType:\\\"calc\\\"},boxgroupgap:{valType:\\\"number\\\",min:0,max:1,dflt:.3,editType:\\\"calc\\\"}}},4199:function(t,e,r){\\\"use strict\\\";var n=r(73972),i=r(71828),a=r(40094);function o(t,e,r,i,a){for(var o=a+\\\"Layout\\\",s=!1,l=0;l<r.length;l++){var u=r[l];if(n.traceIs(u,o)){s=!0;break}}s&&(i(a+\\\"mode\\\"),i(a+\\\"gap\\\"),i(a+\\\"groupgap\\\"))}t.exports={supplyLayoutDefaults:function(t,e,r){o(0,0,r,(function(r,n){return i.coerce(t,e,a,r,n)}),\\\"box\\\")},_supply:o}},86047:function(t,e,r){\\\"use strict\\\";var n=r(39898),i=r(71828),a=r(91424);function o(t,e,r,a,o){var s,l,u=\\\"h\\\"===r.orientation,c=e.val,f=e.pos,h=!!f.rangebreaks,p=a.bPos,d=a.wdPos||0,v=a.bPosPxOffset||0,g=r.whiskerwidth||0,y=r.notched||!1,m=y?1-2*r.notchwidth:1;Array.isArray(a.bdPos)?(s=a.bdPos[0],l=a.bdPos[1]):(s=a.bdPos,l=a.bdPos);var x=t.selectAll(\\\"path.box\\\").data(\\\"violin\\\"!==r.type||r.box.visible?i.identity:[]);x.enter().append(\\\"path\\\").style(\\\"vector-effect\\\",o?\\\"none\\\":\\\"non-scaling-stroke\\\").attr(\\\"class\\\",\\\"box\\\"),x.exit().remove(),x.each((function(t){if(t.empty)return\\\"M0,0Z\\\";var e=f.c2l(t.pos+p,!0),a=f.l2p(e-s)+v,o=f.l2p(e+l)+v,x=h?(a+o)/2:f.l2p(e)+v,b=r.whiskerwidth,_=h?a*b+(1-b)*x:f.l2p(e-d)+v,w=h?o*b+(1-b)*x:f.l2p(e+d)+v,T=f.l2p(e-s*m)+v,k=f.l2p(e+l*m)+v,A=c.c2p(t.q1,!0),M=c.c2p(t.q3,!0),S=i.constrain(c.c2p(t.med,!0),Math.min(A,M)+1,Math.max(A,M)-1),E=void 0===t.lf||!1===r.boxpoints,L=c.c2p(E?t.min:t.lf,!0),C=c.c2p(E?t.max:t.uf,!0),P=c.c2p(t.ln,!0),O=c.c2p(t.un,!0);u?n.select(this).attr(\\\"d\\\",\\\"M\\\"+S+\\\",\\\"+T+\\\"V\\\"+k+\\\"M\\\"+A+\\\",\\\"+a+\\\"V\\\"+o+(y?\\\"H\\\"+P+\\\"L\\\"+S+\\\",\\\"+k+\\\"L\\\"+O+\\\",\\\"+o:\\\"\\\")+\\\"H\\\"+M+\\\"V\\\"+a+(y?\\\"H\\\"+O+\\\"L\\\"+S+\\\",\\\"+T+\\\"L\\\"+P+\\\",\\\"+a:\\\"\\\")+\\\"ZM\\\"+A+\\\",\\\"+x+\\\"H\\\"+L+\\\"M\\\"+M+\\\",\\\"+x+\\\"H\\\"+C+(0===g?\\\"\\\":\\\"M\\\"+L+\\\",\\\"+_+\\\"V\\\"+w+\\\"M\\\"+C+\\\",\\\"+_+\\\"V\\\"+w)):n.select(this).attr(\\\"d\\\",\\\"M\\\"+T+\\\",\\\"+S+\\\"H\\\"+k+\\\"M\\\"+a+\\\",\\\"+A+\\\"H\\\"+o+(y?\\\"V\\\"+P+\\\"L\\\"+k+\\\",\\\"+S+\\\"L\\\"+o+\\\",\\\"+O:\\\"\\\")+\\\"V\\\"+M+\\\"H\\\"+a+(y?\\\"V\\\"+O+\\\"L\\\"+T+\\\",\\\"+S+\\\"L\\\"+a+\\\",\\\"+P:\\\"\\\")+\\\"ZM\\\"+x+\\\",\\\"+A+\\\"V\\\"+L+\\\"M\\\"+x+\\\",\\\"+M+\\\"V\\\"+C+(0===g?\\\"\\\":\\\"M\\\"+_+\\\",\\\"+L+\\\"H\\\"+w+\\\"M\\\"+_+\\\",\\\"+C+\\\"H\\\"+w))}))}function s(t,e,r,n){var o=e.x,s=e.y,l=n.bdPos,u=n.bPos,c=r.boxpoints||r.points;i.seedPseudoRandom();var f=t.selectAll(\\\"g.points\\\").data(c?function(t){return t.forEach((function(t){t.t=n,t.trace=r})),t}:[]);f.enter().append(\\\"g\\\").attr(\\\"class\\\",\\\"points\\\"),f.exit().remove();var h=f.selectAll(\\\"path\\\").data((function(t){var e,n,a=t.pts2,o=Math.max((t.max-t.min)/10,t.q3-t.q1),s=1e-9*o,f=.01*o,h=[],p=0;if(r.jitter){if(0===o)for(p=1,h=new Array(a.length),e=0;e<a.length;e++)h[e]=1;else for(e=0;e<a.length;e++){var d=Math.max(0,e-5),v=a[d].v,g=Math.min(a.length-1,e+5),y=a[g].v;\\\"all\\\"!==c&&(a[e].v<t.lf?y=Math.min(y,t.lf):v=Math.max(v,t.uf));var m=Math.sqrt(f*(g-d)/(y-v+s))||0;m=i.constrain(Math.abs(m),0,1),h.push(m),p=Math.max(m,p)}n=2*r.jitter/(p||1)}for(e=0;e<a.length;e++){var x=a[e],b=x.v,_=r.jitter?n*h[e]*(i.pseudoRandom()-.5):0,w=t.pos+u+l*(r.pointpos+_);\\\"h\\\"===r.orientation?(x.y=w,x.x=b):(x.x=w,x.y=b),\\\"suspectedoutliers\\\"===c&&b<t.uo&&b>t.lo&&(x.so=!0)}return a}));h.enter().append(\\\"path\\\").classed(\\\"point\\\",!0),h.exit().remove(),h.call(a.translatePoints,o,s)}function l(t,e,r,a){var o,s,l=e.val,u=e.pos,c=!!u.rangebreaks,f=a.bPos,h=a.bPosPxOffset||0,p=r.boxmean||(r.meanline||{}).visible;Array.isArray(a.bdPos)?(o=a.bdPos[0],s=a.bdPos[1]):(o=a.bdPos,s=a.bdPos);var d=t.selectAll(\\\"path.mean\\\").data(\\\"box\\\"===r.type&&r.boxmean||\\\"violin\\\"===r.type&&r.box.visible&&r.meanline.visible?i.identity:[]);d.enter().append(\\\"path\\\").attr(\\\"class\\\",\\\"mean\\\").style({fill:\\\"none\\\",\\\"vector-effect\\\":\\\"non-scaling-stroke\\\"}),d.exit().remove(),d.each((function(t){var e=u.c2l(t.pos+f,!0),i=u.l2p(e-o)+h,a=u.l2p(e+s)+h,d=c?(i+a)/2:u.l2p(e)+h,v=l.c2p(t.mean,!0),g=l.c2p(t.mean-t.sd,!0),y=l.c2p(t.mean+t.sd,!0);\\\"h\\\"===r.orientation?n.select(this).attr(\\\"d\\\",\\\"M\\\"+v+\\\",\\\"+i+\\\"V\\\"+a+(\\\"sd\\\"===p?\\\"m0,0L\\\"+g+\\\",\\\"+d+\\\"L\\\"+v+\\\",\\\"+i+\\\"L\\\"+y+\\\",\\\"+d+\\\"Z\\\":\\\"\\\")):n.select(this).attr(\\\"d\\\",\\\"M\\\"+i+\\\",\\\"+v+\\\"H\\\"+a+(\\\"sd\\\"===p?\\\"m0,0L\\\"+d+\\\",\\\"+g+\\\"L\\\"+i+\\\",\\\"+v+\\\"L\\\"+d+\\\",\\\"+y+\\\"Z\\\":\\\"\\\"))}))}t.exports={plot:function(t,e,r,a){var u=t._context.staticPlot,c=e.xaxis,f=e.yaxis;i.makeTraceGroups(a,r,\\\"trace boxes\\\").each((function(t){var e,r,i=n.select(this),a=t[0],h=a.t,p=a.trace;h.wdPos=h.bdPos*p.whiskerwidth,!0!==p.visible||h.empty?i.remove():(\\\"h\\\"===p.orientation?(e=f,r=c):(e=c,r=f),o(i,{pos:e,val:r},p,h,u),s(i,{x:c,y:f},p,h),l(i,{pos:e,val:r},p,h))}))},plotBoxAndWhiskers:o,plotPoints:s,plotBoxMean:l}},24626:function(t){\\\"use strict\\\";t.exports=function(t,e){var r,n,i=t.cd,a=t.xaxis,o=t.yaxis,s=[];if(!1===e)for(r=0;r<i.length;r++)for(n=0;n<(i[r].pts||[]).length;n++)i[r].pts[n].selected=0;else for(r=0;r<i.length;r++)for(n=0;n<(i[r].pts||[]).length;n++){var l=i[r].pts[n],u=a.c2p(l.x),c=o.c2p(l.y);e.contains([u,c],null,l.i,t)?(s.push({pointNumber:l.i,x:a.c2d(l.x),y:o.c2d(l.y)}),l.selected=1):l.selected=0}return s}},58063:function(t,e,r){\\\"use strict\\\";var n=r(39898),i=r(7901),a=r(91424);t.exports={style:function(t,e,r){var o=r||n.select(t).selectAll(\\\"g.trace.boxes\\\");o.style(\\\"opacity\\\",(function(t){return t[0].trace.opacity})),o.each((function(e){var r=n.select(this),o=e[0].trace,s=o.line.width;function l(t,e,r,n){t.style(\\\"stroke-width\\\",e+\\\"px\\\").call(i.stroke,r).call(i.fill,n)}var u=r.selectAll(\\\"path.box\\\");if(\\\"candlestick\\\"===o.type)u.each((function(t){if(!t.empty){var e=n.select(this),r=o[t.dir];l(e,r.line.width,r.line.color,r.fillcolor),e.style(\\\"opacity\\\",o.selectedpoints&&!t.selected?.3:1)}}));else{l(u,s,o.line.color,o.fillcolor),r.selectAll(\\\"path.mean\\\").style({\\\"stroke-width\\\":s,\\\"stroke-dasharray\\\":2*s+\\\"px,\\\"+s+\\\"px\\\"}).call(i.stroke,o.line.color);var c=r.selectAll(\\\"path.point\\\");a.pointStyle(c,o,t)}}))},styleOnSelect:function(t,e,r){var n=e[0].trace,i=r.selectAll(\\\"path.point\\\");n.selectedpoints?a.selectedPointStyle(i,n):a.pointStyle(i,n,t)}}},75343:function(t,e,r){\\\"use strict\\\";var n=r(71828).extendFlat,i=r(12663).axisHoverFormat,a=r(2522),o=r(53522);function s(t){return{line:{color:n({},o.line.color,{dflt:t}),width:o.line.width,editType:\\\"style\\\"},fillcolor:o.fillcolor,editType:\\\"style\\\"}}t.exports={xperiod:a.xperiod,xperiod0:a.xperiod0,xperiodalignment:a.xperiodalignment,xhoverformat:i(\\\"x\\\"),yhoverformat:i(\\\"y\\\"),x:a.x,open:a.open,high:a.high,low:a.low,close:a.close,line:{width:n({},o.line.width,{}),editType:\\\"style\\\"},increasing:s(a.increasing.line.color.dflt),decreasing:s(a.decreasing.line.color.dflt),text:a.text,hovertext:a.hovertext,whiskerwidth:n({},o.whiskerwidth,{dflt:0}),hoverlabel:a.hoverlabel}},41197:function(t,e,r){\\\"use strict\\\";var n=r(71828),i=r(89298),a=r(42973),o=r(3485).calcCommon;function s(t,e,r,n){return{min:r,q1:Math.min(t,n),med:n,q3:Math.max(t,n),max:e}}t.exports=function(t,e){var r=t._fullLayout,l=i.getFromId(t,e.xaxis),u=i.getFromId(t,e.yaxis),c=l.makeCalcdata(e,\\\"x\\\"),f=a(e,l,\\\"x\\\",c).vals,h=o(t,e,c,f,u,s);return h.length?(n.extendFlat(h[0].t,{num:r._numBoxes,dPos:n.distinctVals(f).minDiff/2,posLetter:\\\"x\\\",valLetter:\\\"y\\\"}),r._numBoxes++,h):[{t:{empty:!0}}]}},1026:function(t,e,r){\\\"use strict\\\";var n=r(71828),i=r(7901),a=r(14555),o=r(73927),s=r(75343);function l(t,e,r,n){var a=r(n+\\\".line.color\\\");r(n+\\\".line.width\\\",e.line.width),r(n+\\\".fillcolor\\\",i.addOpacity(a,.5))}t.exports=function(t,e,r,i){function u(r,i){return n.coerce(t,e,s,r,i)}a(t,e,u,i)?(o(t,e,i,u,{x:!0}),u(\\\"xhoverformat\\\"),u(\\\"yhoverformat\\\"),u(\\\"line.width\\\"),l(0,e,u,\\\"increasing\\\"),l(0,e,u,\\\"decreasing\\\"),u(\\\"text\\\"),u(\\\"hovertext\\\"),u(\\\"whiskerwidth\\\"),i._requestRangeslider[e.xaxis]=!0):e.visible=!1}},91815:function(t,e,r){\\\"use strict\\\";t.exports={moduleType:\\\"trace\\\",name:\\\"candlestick\\\",basePlotModule:r(93612),categories:[\\\"cartesian\\\",\\\"svg\\\",\\\"showLegend\\\",\\\"candlestick\\\",\\\"boxLayout\\\"],meta:{},attributes:r(75343),layoutAttributes:r(40094),supplyLayoutDefaults:r(4199).supplyLayoutDefaults,crossTraceCalc:r(37188).crossTraceCalc,supplyDefaults:r(1026),calc:r(41197),plot:r(86047).plot,layerName:\\\"boxlayer\\\",style:r(58063).style,hoverPoints:r(66449).hoverPoints,selectPoints:r(67324)}},13145:function(t,e,r){\\\"use strict\\\";var n=r(11500),i=r(44467);t.exports=function(t,e,r,a,o){a(\\\"a\\\")||(a(\\\"da\\\"),a(\\\"a0\\\")),a(\\\"b\\\")||(a(\\\"db\\\"),a(\\\"b0\\\")),function(t,e,r,a){[\\\"aaxis\\\",\\\"baxis\\\"].forEach((function(o){var s=o.charAt(0),l=t[o]||{},u=i.newContainer(e,o),c={noTicklabelstep:!0,tickfont:\\\"x\\\",id:s+\\\"axis\\\",letter:s,font:e.font,name:o,data:t[s],calendar:e.calendar,dfltColor:a,bgColor:r.paper_bgcolor,autotypenumbersDflt:r.autotypenumbers,fullLayout:r};n(l,u,c),u._categories=u._categories||[],t[o]||\\\"-\\\"===l.type||(t[o]={type:l.type})}))}(t,e,r,o)}},402:function(t,e,r){\\\"use strict\\\";var n=r(71828).isArrayOrTypedArray;function i(t,e){if(!n(t)||e>=10)return null;for(var r=1/0,a=-1/0,o=t.length,s=0;s<o;s++){var l=t[s];if(n(l)){var u=i(l,e+1);u&&(r=Math.min(u[0],r),a=Math.max(u[1],a))}else r=Math.min(l,r),a=Math.max(l,a)}return[r,a]}t.exports=function(t){return i(t,0)}},99798:function(t,e,r){\\\"use strict\\\";var n=r(41940),i=r(1928),a=r(22399),o=n({editType:\\\"calc\\\"});o.family.dflt='\\\"Open Sans\\\", verdana, arial, sans-serif',o.size.dflt=12,o.color.dflt=a.defaultLine,t.exports={carpet:{valType:\\\"string\\\",editType:\\\"calc\\\"},x:{valType:\\\"data_array\\\",editType:\\\"calc+clearAxisTypes\\\"},y:{valType:\\\"data_array\\\",editType:\\\"calc+clearAxisTypes\\\"},a:{valType:\\\"data_array\\\",editType:\\\"calc\\\"},a0:{valType:\\\"number\\\",dflt:0,editType:\\\"calc\\\"},da:{valType:\\\"number\\\",dflt:1,editType:\\\"calc\\\"},b:{valType:\\\"data_array\\\",editType:\\\"calc\\\"},b0:{valType:\\\"number\\\",dflt:0,editType:\\\"calc\\\"},db:{valType:\\\"number\\\",dflt:1,editType:\\\"calc\\\"},cheaterslope:{valType:\\\"number\\\",dflt:1,editType:\\\"calc\\\"},aaxis:i,baxis:i,font:o,color:{valType:\\\"color\\\",dflt:a.defaultLine,editType:\\\"plot\\\"},transforms:void 0}},4536:function(t,e,r){\\\"use strict\\\";var n=r(71828).isArrayOrTypedArray;t.exports=function(t,e,r,i){var a,o,s,l,u,c,f,h,p,d,v,g,y,m=n(r)?\\\"a\\\":\\\"b\\\",x=(\\\"a\\\"===m?t.aaxis:t.baxis).smoothing,b=\\\"a\\\"===m?t.a2i:t.b2j,_=\\\"a\\\"===m?r:i,w=\\\"a\\\"===m?i:r,T=\\\"a\\\"===m?e.a.length:e.b.length,k=\\\"a\\\"===m?e.b.length:e.a.length,A=Math.floor(\\\"a\\\"===m?t.b2j(w):t.a2i(w)),M=\\\"a\\\"===m?function(e){return t.evalxy([],e,A)}:function(e){return t.evalxy([],A,e)};x&&(s=Math.max(0,Math.min(k-2,A)),l=A-s,o=\\\"a\\\"===m?function(e,r){return t.dxydi([],e,s,r,l)}:function(e,r){return t.dxydj([],s,e,l,r)});var S=b(_[0]),E=b(_[1]),L=S<E?1:-1,C=1e-8*(E-S),P=L>0?Math.floor:Math.ceil,O=L>0?Math.ceil:Math.floor,I=L>0?Math.min:Math.max,D=L>0?Math.max:Math.min,z=P(S+C),R=O(E-C),F=[[f=M(S)]];for(a=z;a*L<R*L;a+=L)u=[],v=D(S,a),y=(g=I(E,a+L))-v,c=Math.max(0,Math.min(T-2,Math.floor(.5*(v+g)))),h=M(g),x&&(p=o(c,v-c),d=o(c,g-c),u.push([f[0]+p[0]/3*y,f[1]+p[1]/3*y]),u.push([h[0]-d[0]/3*y,h[1]-d[1]/3*y])),u.push(h),F.push(u),f=h;return F}},1928:function(t,e,r){\\\"use strict\\\";var n=r(41940),i=r(22399),a=r(13838),o=r(12663).descriptionWithDates,s=r(30962).overrideAll,l=r(79952).P,u=r(1426).extendFlat;t.exports={color:{valType:\\\"color\\\",editType:\\\"calc\\\"},smoothing:{valType:\\\"number\\\",dflt:1,min:0,max:1.3,editType:\\\"calc\\\"},title:{text:{valType:\\\"string\\\",dflt:\\\"\\\",editType:\\\"calc\\\"},font:n({editType:\\\"calc\\\"}),offset:{valType:\\\"number\\\",dflt:10,editType:\\\"calc\\\"},editType:\\\"calc\\\"},type:{valType:\\\"enumerated\\\",values:[\\\"-\\\",\\\"linear\\\",\\\"date\\\",\\\"category\\\"],dflt:\\\"-\\\",editType:\\\"calc\\\"},autotypenumbers:a.autotypenumbers,autorange:{valType:\\\"enumerated\\\",values:[!0,!1,\\\"reversed\\\"],dflt:!0,editType:\\\"calc\\\"},rangemode:{valType:\\\"enumerated\\\",values:[\\\"normal\\\",\\\"tozero\\\",\\\"nonnegative\\\"],dflt:\\\"normal\\\",editType:\\\"calc\\\"},range:{valType:\\\"info_array\\\",editType:\\\"calc\\\",items:[{valType:\\\"any\\\",editType:\\\"calc\\\"},{valType:\\\"any\\\",editType:\\\"calc\\\"}]},fixedrange:{valType:\\\"boolean\\\",dflt:!1,editType:\\\"calc\\\"},cheatertype:{valType:\\\"enumerated\\\",values:[\\\"index\\\",\\\"value\\\"],dflt:\\\"value\\\",editType:\\\"calc\\\"},tickmode:{valType:\\\"enumerated\\\",values:[\\\"linear\\\",\\\"array\\\"],dflt:\\\"array\\\",editType:\\\"calc\\\"},nticks:{valType:\\\"integer\\\",min:0,dflt:0,editType:\\\"calc\\\"},tickvals:{valType:\\\"data_array\\\",editType:\\\"calc\\\"},ticktext:{valType:\\\"data_array\\\",editType:\\\"calc\\\"},showticklabels:{valType:\\\"enumerated\\\",values:[\\\"start\\\",\\\"end\\\",\\\"both\\\",\\\"none\\\"],dflt:\\\"start\\\",editType:\\\"calc\\\"},labelalias:u({},a.labelalias,{editType:\\\"calc\\\"}),tickfont:n({editType:\\\"calc\\\"}),tickangle:{valType:\\\"angle\\\",dflt:\\\"auto\\\",editType:\\\"calc\\\"},tickprefix:{valType:\\\"string\\\",dflt:\\\"\\\",editType:\\\"calc\\\"},showtickprefix:{valType:\\\"enumerated\\\",values:[\\\"all\\\",\\\"first\\\",\\\"last\\\",\\\"none\\\"],dflt:\\\"all\\\",editType:\\\"calc\\\"},ticksuffix:{valType:\\\"string\\\",dflt:\\\"\\\",editType:\\\"calc\\\"},showticksuffix:{valType:\\\"enumerated\\\",values:[\\\"all\\\",\\\"first\\\",\\\"last\\\",\\\"none\\\"],dflt:\\\"all\\\",editType:\\\"calc\\\"},showexponent:{valType:\\\"enumerated\\\",values:[\\\"all\\\",\\\"first\\\",\\\"last\\\",\\\"none\\\"],dflt:\\\"all\\\",editType:\\\"calc\\\"},exponentformat:{valType:\\\"enumerated\\\",values:[\\\"none\\\",\\\"e\\\",\\\"E\\\",\\\"power\\\",\\\"SI\\\",\\\"B\\\"],dflt:\\\"B\\\",editType:\\\"calc\\\"},minexponent:{valType:\\\"number\\\",dflt:3,min:0,editType:\\\"calc\\\"},separatethousands:{valType:\\\"boolean\\\",dflt:!1,editType:\\\"calc\\\"},tickformat:{valType:\\\"string\\\",dflt:\\\"\\\",editType:\\\"calc\\\",description:o(\\\"tick label\\\")},tickformatstops:s(a.tickformatstops,\\\"calc\\\",\\\"from-root\\\"),categoryorder:{valType:\\\"enumerated\\\",values:[\\\"trace\\\",\\\"category ascending\\\",\\\"category descending\\\",\\\"array\\\"],dflt:\\\"trace\\\",editType:\\\"calc\\\"},categoryarray:{valType:\\\"data_array\\\",editType:\\\"calc\\\"},labelpadding:{valType:\\\"integer\\\",dflt:10,editType:\\\"calc\\\"},labelprefix:{valType:\\\"string\\\",editType:\\\"calc\\\"},labelsuffix:{valType:\\\"string\\\",dflt:\\\"\\\",editType:\\\"calc\\\"},showline:{valType:\\\"boolean\\\",dflt:!1,editType:\\\"calc\\\"},linecolor:{valType:\\\"color\\\",dflt:i.defaultLine,editType:\\\"calc\\\"},linewidth:{valType:\\\"number\\\",min:0,dflt:1,editType:\\\"calc\\\"},gridcolor:{valType:\\\"color\\\",editType:\\\"calc\\\"},gridwidth:{valType:\\\"number\\\",min:0,dflt:1,editType:\\\"calc\\\"},griddash:u({},l,{editType:\\\"calc\\\"}),showgrid:{valType:\\\"boolean\\\",dflt:!0,editType:\\\"calc\\\"},minorgridcount:{valType:\\\"integer\\\",min:0,dflt:0,editType:\\\"calc\\\"},minorgridwidth:{valType:\\\"number\\\",min:0,dflt:1,editType:\\\"calc\\\"},minorgriddash:u({},l,{editType:\\\"calc\\\"}),minorgridcolor:{valType:\\\"color\\\",dflt:i.lightLine,editType:\\\"calc\\\"},startline:{valType:\\\"boolean\\\",editType:\\\"calc\\\"},startlinecolor:{valType:\\\"color\\\",editType:\\\"calc\\\"},startlinewidth:{valType:\\\"number\\\",dflt:1,editType:\\\"calc\\\"},endline:{valType:\\\"boolean\\\",editType:\\\"calc\\\"},endlinewidth:{valType:\\\"number\\\",dflt:1,editType:\\\"calc\\\"},endlinecolor:{valType:\\\"color\\\",editType:\\\"calc\\\"},tick0:{valType:\\\"number\\\",min:0,dflt:0,editType:\\\"calc\\\"},dtick:{valType:\\\"number\\\",min:0,dflt:1,editType:\\\"calc\\\"},arraytick0:{valType:\\\"integer\\\",min:0,dflt:0,editType:\\\"calc\\\"},arraydtick:{valType:\\\"integer\\\",min:1,dflt:1,editType:\\\"calc\\\"},_deprecated:{title:{valType:\\\"string\\\",editType:\\\"calc\\\"},titlefont:n({editType:\\\"calc\\\"}),titleoffset:{valType:\\\"number\\\",dflt:10,editType:\\\"calc\\\"}},editType:\\\"calc\\\"}},11500:function(t,e,r){\\\"use strict\\\";var n=r(99798),i=r(7901).addOpacity,a=r(73972),o=r(71828),s=r(26218),l=r(96115),u=r(89426),c=r(15258),f=r(21994),h=r(4322);t.exports=function(t,e,r){var p=r.letter,d=r.font||{},v=n[p+\\\"axis\\\"];function g(r,n){return o.coerce(t,e,v,r,n)}function y(r,n){return o.coerce2(t,e,v,r,n)}r.name&&(e._name=r.name,e._id=r.name),g(\\\"autotypenumbers\\\",r.autotypenumbersDflt);var m=g(\\\"type\\\");\\\"-\\\"===m&&(r.data&&function(t,e){if(\\\"-\\\"===t.type){var r=t._id.charAt(0),n=t[r+\\\"calendar\\\"];t.type=h(e,n,{autotypenumbers:t.autotypenumbers})}}(e,r.data),\\\"-\\\"===e.type?e.type=\\\"linear\\\":m=t.type=e.type),g(\\\"smoothing\\\"),g(\\\"cheatertype\\\"),g(\\\"showticklabels\\\"),g(\\\"labelprefix\\\",p+\\\" = \\\"),g(\\\"labelsuffix\\\"),g(\\\"showtickprefix\\\"),g(\\\"showticksuffix\\\"),g(\\\"separatethousands\\\"),g(\\\"tickformat\\\"),g(\\\"exponentformat\\\"),g(\\\"minexponent\\\"),g(\\\"showexponent\\\"),g(\\\"categoryorder\\\"),g(\\\"tickmode\\\"),g(\\\"tickvals\\\"),g(\\\"ticktext\\\"),g(\\\"tick0\\\"),g(\\\"dtick\\\"),\\\"array\\\"===e.tickmode&&(g(\\\"arraytick0\\\"),g(\\\"arraydtick\\\")),g(\\\"labelpadding\\\"),e._hovertitle=p,\\\"date\\\"===m&&a.getComponentMethod(\\\"calendars\\\",\\\"handleDefaults\\\")(t,e,\\\"calendar\\\",r.calendar),f(e,r.fullLayout),e.c2p=o.identity;var x=g(\\\"color\\\",r.dfltColor),b=x===t.color?x:d.color;g(\\\"title.text\\\")&&(o.coerceFont(g,\\\"title.font\\\",{family:d.family,size:o.bigFont(d.size),color:b}),g(\\\"title.offset\\\")),g(\\\"tickangle\\\"),g(\\\"autorange\\\",!e.isValidRange(t.range))&&g(\\\"rangemode\\\"),g(\\\"range\\\"),e.cleanRange(),g(\\\"fixedrange\\\"),s(t,e,g,m),u(t,e,g,m,r),l(t,e,g,m,r),c(t,e,g,{data:r.data,dataAttr:p});var _=y(\\\"gridcolor\\\",i(x,.3)),w=y(\\\"gridwidth\\\"),T=y(\\\"griddash\\\"),k=g(\\\"showgrid\\\");k||(delete e.gridcolor,delete e.gridwidth,delete e.griddash);var A=y(\\\"startlinecolor\\\",x),M=y(\\\"startlinewidth\\\",w);g(\\\"startline\\\",e.showgrid||!!A||!!M)||(delete e.startlinecolor,delete e.startlinewidth);var S=y(\\\"endlinecolor\\\",x),E=y(\\\"endlinewidth\\\",w);return g(\\\"endline\\\",e.showgrid||!!S||!!E)||(delete e.endlinecolor,delete e.endlinewidth),k?(g(\\\"minorgridcount\\\"),g(\\\"minorgridwidth\\\",w),g(\\\"minorgriddash\\\",T),g(\\\"minorgridcolor\\\",i(_,.06)),e.minorgridcount||(delete e.minorgridwidth,delete e.minorgriddash,delete e.minorgridcolor)):(delete e.gridcolor,delete e.gridwidth,delete e.griddash),\\\"none\\\"===e.showticklabels&&(delete e.tickfont,delete e.tickangle,delete e.showexponent,delete e.exponentformat,delete e.minexponent,delete e.tickformat,delete e.showticksuffix,delete e.showtickprefix),e.showticksuffix||delete e.ticksuffix,e.showtickprefix||delete e.tickprefix,g(\\\"tickmode\\\"),e}},25281:function(t,e,r){\\\"use strict\\\";var n=r(89298),i=r(71828).isArray1D,a=r(53824),o=r(402),s=r(20347),l=r(83311),u=r(44807),c=r(4742),f=r(72505),h=r(68296),p=r(11435);t.exports=function(t,e){var r=n.getFromId(t,e.xaxis),d=n.getFromId(t,e.yaxis),v=e.aaxis,g=e.baxis,y=e.x,m=e.y,x=[];y&&i(y)&&x.push(\\\"x\\\"),m&&i(m)&&x.push(\\\"y\\\"),x.length&&h(e,v,g,\\\"a\\\",\\\"b\\\",x);var b=e._a=e._a||e.a,_=e._b=e._b||e.b;y=e._x||e.x,m=e._y||e.y;var w={};if(e._cheater){var T=\\\"index\\\"===v.cheatertype?b.length:b,k=\\\"index\\\"===g.cheatertype?_.length:_;y=a(T,k,e.cheaterslope)}e._x=y=c(y),e._y=m=c(m),f(y,b,_),f(m,b,_),p(e),e.setScale();var A=o(y),M=o(m),S=.5*(A[1]-A[0]),E=.5*(A[1]+A[0]),L=.5*(M[1]-M[0]),C=.5*(M[1]+M[0]),P=1.3;return A=[E-S*P,E+S*P],M=[C-L*P,C+L*P],e._extremes[r._id]=n.findExtremes(r,A,{padded:!0}),e._extremes[d._id]=n.findExtremes(d,M,{padded:!0}),s(e,\\\"a\\\",\\\"b\\\"),s(e,\\\"b\\\",\\\"a\\\"),l(e,v),l(e,g),w.clipsegments=u(e._xctrl,e._yctrl,v,g),w.x=y,w.y=m,w.a=b,w.b=_,[w]}},44807:function(t){\\\"use strict\\\";t.exports=function(t,e,r,n){var i,a,o,s=[],l=!!r.smoothing,u=!!n.smoothing,c=t[0].length-1,f=t.length-1;for(i=0,a=[],o=[];i<=c;i++)a[i]=t[0][i],o[i]=e[0][i];for(s.push({x:a,y:o,bicubic:l}),i=0,a=[],o=[];i<=f;i++)a[i]=t[i][c],o[i]=e[i][c];for(s.push({x:a,y:o,bicubic:u}),i=c,a=[],o=[];i>=0;i--)a[c-i]=t[f][i],o[c-i]=e[f][i];for(s.push({x:a,y:o,bicubic:l}),i=f,a=[],o=[];i>=0;i--)a[f-i]=t[i][0],o[f-i]=e[i][0];return s.push({x:a,y:o,bicubic:u}),s}},20347:function(t,e,r){\\\"use strict\\\";var n=r(89298),i=r(1426).extendFlat;t.exports=function(t,e,r){var a,o,s,l,u,c,f,h,p,d,v,g,y,m,x=t[\\\"_\\\"+e],b=t[e+\\\"axis\\\"],_=b._gridlines=[],w=b._minorgridlines=[],T=b._boundarylines=[],k=t[\\\"_\\\"+r],A=t[r+\\\"axis\\\"];\\\"array\\\"===b.tickmode&&(b.tickvals=x.slice());var M=t._xctrl,S=t._yctrl,E=M[0].length,L=M.length,C=t._a.length,P=t._b.length;n.prepTicks(b),\\\"array\\\"===b.tickmode&&delete b.tickvals;var O=b.smoothing?3:1;function I(n){var i,a,o,s,l,u,c,f,p,d,v,g,y=[],m=[],x={};if(\\\"b\\\"===e)for(a=t.b2j(n),o=Math.floor(Math.max(0,Math.min(P-2,a))),s=a-o,x.length=P,x.crossLength=C,x.xy=function(e){return t.evalxy([],e,a)},x.dxy=function(e,r){return t.dxydi([],e,o,r,s)},i=0;i<C;i++)u=Math.min(C-2,i),c=i-u,f=t.evalxy([],i,a),A.smoothing&&i>0&&(p=t.dxydi([],i-1,o,0,s),y.push(l[0]+p[0]/3),m.push(l[1]+p[1]/3),d=t.dxydi([],i-1,o,1,s),y.push(f[0]-d[0]/3),m.push(f[1]-d[1]/3)),y.push(f[0]),m.push(f[1]),l=f;else for(i=t.a2i(n),u=Math.floor(Math.max(0,Math.min(C-2,i))),c=i-u,x.length=C,x.crossLength=P,x.xy=function(e){return t.evalxy([],i,e)},x.dxy=function(e,r){return t.dxydj([],u,e,c,r)},a=0;a<P;a++)o=Math.min(P-2,a),s=a-o,f=t.evalxy([],i,a),A.smoothing&&a>0&&(v=t.dxydj([],u,a-1,c,0),y.push(l[0]+v[0]/3),m.push(l[1]+v[1]/3),g=t.dxydj([],u,a-1,c,1),y.push(f[0]-g[0]/3),m.push(f[1]-g[1]/3)),y.push(f[0]),m.push(f[1]),l=f;return x.axisLetter=e,x.axis=b,x.crossAxis=A,x.value=n,x.constvar=r,x.index=h,x.x=y,x.y=m,x.smoothing=A.smoothing,x}function D(n){var i,a,o,s,l,u=[],c=[],f={};if(f.length=x.length,f.crossLength=k.length,\\\"b\\\"===e)for(o=Math.max(0,Math.min(P-2,n)),l=Math.min(1,Math.max(0,n-o)),f.xy=function(e){return t.evalxy([],e,n)},f.dxy=function(e,r){return t.dxydi([],e,o,r,l)},i=0;i<E;i++)u[i]=M[n*O][i],c[i]=S[n*O][i];else for(a=Math.max(0,Math.min(C-2,n)),s=Math.min(1,Math.max(0,n-a)),f.xy=function(e){return t.evalxy([],n,e)},f.dxy=function(e,r){return t.dxydj([],a,e,s,r)},i=0;i<L;i++)u[i]=M[i][n*O],c[i]=S[i][n*O];return f.axisLetter=e,f.axis=b,f.crossAxis=A,f.value=x[n],f.constvar=r,f.index=n,f.x=u,f.y=c,f.smoothing=A.smoothing,f}if(\\\"array\\\"===b.tickmode){for(l=5e-15,c=(u=[Math.floor((x.length-1-b.arraytick0)/b.arraydtick*(1+l)),Math.ceil(-b.arraytick0/b.arraydtick/(1+l))].sort((function(t,e){return t-e})))[0]-1,f=u[1]+1,h=c;h<f;h++)(o=b.arraytick0+b.arraydtick*h)<0||o>x.length-1||_.push(i(D(o),{color:b.gridcolor,width:b.gridwidth,dash:b.griddash}));for(h=c;h<f;h++)if(s=b.arraytick0+b.arraydtick*h,v=Math.min(s+b.arraydtick,x.length-1),!(s<0||s>x.length-1||v<0||v>x.length-1))for(g=x[s],y=x[v],a=0;a<b.minorgridcount;a++)(m=v-s)<=0||(d=g+(y-g)*(a+1)/(b.minorgridcount+1)*(b.arraydtick/m))<x[0]||d>x[x.length-1]||w.push(i(I(d),{color:b.minorgridcolor,width:b.minorgridwidth,dash:b.minorgriddash}));b.startline&&T.push(i(D(0),{color:b.startlinecolor,width:b.startlinewidth})),b.endline&&T.push(i(D(x.length-1),{color:b.endlinecolor,width:b.endlinewidth}))}else{for(l=5e-15,c=(u=[Math.floor((x[x.length-1]-b.tick0)/b.dtick*(1+l)),Math.ceil((x[0]-b.tick0)/b.dtick/(1+l))].sort((function(t,e){return t-e})))[0],f=u[1],h=c;h<=f;h++)p=b.tick0+b.dtick*h,_.push(i(I(p),{color:b.gridcolor,width:b.gridwidth,dash:b.griddash}));for(h=c-1;h<f+1;h++)for(p=b.tick0+b.dtick*h,a=0;a<b.minorgridcount;a++)(d=p+b.dtick*(a+1)/(b.minorgridcount+1))<x[0]||d>x[x.length-1]||w.push(i(I(d),{color:b.minorgridcolor,width:b.minorgridwidth,dash:b.minorgriddash}));b.startline&&T.push(i(I(x[0]),{color:b.startlinecolor,width:b.startlinewidth})),b.endline&&T.push(i(I(x[x.length-1]),{color:b.endlinecolor,width:b.endlinewidth}))}}},83311:function(t,e,r){\\\"use strict\\\";var n=r(89298),i=r(1426).extendFlat;t.exports=function(t,e){var r,a,o,s=e._labels=[],l=e._gridlines;for(r=0;r<l.length;r++)o=l[r],-1!==[\\\"start\\\",\\\"both\\\"].indexOf(e.showticklabels)&&(a=n.tickText(e,o.value),i(a,{prefix:void 0,suffix:void 0,endAnchor:!0,xy:o.xy(0),dxy:o.dxy(0,0),axis:o.axis,length:o.crossAxis.length,font:o.axis.tickfont,isFirst:0===r,isLast:r===l.length-1}),s.push(a)),-1!==[\\\"end\\\",\\\"both\\\"].indexOf(e.showticklabels)&&(a=n.tickText(e,o.value),i(a,{endAnchor:!1,xy:o.xy(o.crossLength-1),dxy:o.dxy(o.crossLength-2,1),axis:o.axis,length:o.crossAxis.length,font:o.axis.tickfont,isFirst:0===r,isLast:r===l.length-1}),s.push(a))}},42048:function(t){\\\"use strict\\\";t.exports=function(t,e,r,n){var i=t[0]-e[0],a=t[1]-e[1],o=r[0]-e[0],s=r[1]-e[1],l=Math.pow(i*i+a*a,.25),u=Math.pow(o*o+s*s,.25),c=(u*u*i-l*l*o)*n,f=(u*u*a-l*l*s)*n,h=u*(l+u)*3,p=l*(l+u)*3;return[[e[0]+(h&&c/h),e[1]+(h&&f/h)],[e[0]-(p&&c/p),e[1]-(p&&f/p)]]}},53824:function(t,e,r){\\\"use strict\\\";var n=r(71828).isArrayOrTypedArray;t.exports=function(t,e,r){var i,a,o,s,l,u,c=[],f=n(t)?t.length:t,h=n(e)?e.length:e,p=n(t)?t:null,d=n(e)?e:null;p&&(o=(p.length-1)/(p[p.length-1]-p[0])/(f-1)),d&&(s=(d.length-1)/(d[d.length-1]-d[0])/(h-1));var v=1/0,g=-1/0;for(a=0;a<h;a++)for(c[a]=[],l=d?(d[a]-d[0])*s:a/(h-1),i=0;i<f;i++)u=(p?(p[i]-p[0])*o:i/(f-1))-l*r,v=Math.min(u,v),g=Math.max(u,g),c[a][i]=u;var y=1/(g-v),m=-v*y;for(a=0;a<h;a++)for(i=0;i<f;i++)c[a][i]=y*c[a][i]+m;return c}},45664:function(t,e,r){\\\"use strict\\\";var n=r(42048),i=r(71828).ensureArray;function a(t,e,r){var n=-.5*r[0]+1.5*e[0],i=-.5*r[1]+1.5*e[1];return[(2*n+t[0])/3,(2*i+t[1])/3]}t.exports=function(t,e,r,o,s,l){var u,c,f,h,p,d,v,g,y,m,x=r[0].length,b=r.length,_=s?3*x-2:x,w=l?3*b-2:b;for(t=i(t,w),e=i(e,w),f=0;f<w;f++)t[f]=i(t[f],_),e[f]=i(e[f],_);for(c=0,h=0;c<b;c++,h+=l?3:1)for(p=t[h],d=e[h],v=r[c],g=o[c],u=0,f=0;u<x;u++,f+=s?3:1)p[f]=v[u],d[f]=g[u];if(s)for(c=0,h=0;c<b;c++,h+=l?3:1){for(u=1,f=3;u<x-1;u++,f+=3)y=n([r[c][u-1],o[c][u-1]],[r[c][u],o[c][u]],[r[c][u+1],o[c][u+1]],s),t[h][f-1]=y[0][0],e[h][f-1]=y[0][1],t[h][f+1]=y[1][0],e[h][f+1]=y[1][1];m=a([t[h][0],e[h][0]],[t[h][2],e[h][2]],[t[h][3],e[h][3]]),t[h][1]=m[0],e[h][1]=m[1],m=a([t[h][_-1],e[h][_-1]],[t[h][_-3],e[h][_-3]],[t[h][_-4],e[h][_-4]]),t[h][_-2]=m[0],e[h][_-2]=m[1]}if(l)for(f=0;f<_;f++){for(h=3;h<w-3;h+=3)y=n([t[h-3][f],e[h-3][f]],[t[h][f],e[h][f]],[t[h+3][f],e[h+3][f]],l),t[h-1][f]=y[0][0],e[h-1][f]=y[0][1],t[h+1][f]=y[1][0],e[h+1][f]=y[1][1];m=a([t[0][f],e[0][f]],[t[2][f],e[2][f]],[t[3][f],e[3][f]]),t[1][f]=m[0],e[1][f]=m[1],m=a([t[w-1][f],e[w-1][f]],[t[w-3][f],e[w-3][f]],[t[w-4][f],e[w-4][f]]),t[w-2][f]=m[0],e[w-2][f]=m[1]}if(s&&l)for(h=1;h<w;h+=(h+1)%3==0?2:1){for(f=3;f<_-3;f+=3)y=n([t[h][f-3],e[h][f-3]],[t[h][f],e[h][f]],[t[h][f+3],e[h][f+3]],s),t[h][f-1]=.5*(t[h][f-1]+y[0][0]),e[h][f-1]=.5*(e[h][f-1]+y[0][1]),t[h][f+1]=.5*(t[h][f+1]+y[1][0]),e[h][f+1]=.5*(e[h][f+1]+y[1][1]);m=a([t[h][0],e[h][0]],[t[h][2],e[h][2]],[t[h][3],e[h][3]]),t[h][1]=.5*(t[h][1]+m[0]),e[h][1]=.5*(e[h][1]+m[1]),m=a([t[h][_-1],e[h][_-1]],[t[h][_-3],e[h][_-3]],[t[h][_-4],e[h][_-4]]),t[h][_-2]=.5*(t[h][_-2]+m[0]),e[h][_-2]=.5*(e[h][_-2]+m[1])}return[t,e]}},35509:function(t){\\\"use strict\\\";t.exports={RELATIVE_CULL_TOLERANCE:1e-6}},54495:function(t){\\\"use strict\\\";t.exports=function(t,e,r){return e&&r?function(e,r,n,i,a){var o,s,l,u,c,f;e||(e=[]),r*=3,n*=3;var h=i*i,p=1-i,d=p*p,v=p*i*2,g=-3*d,y=3*(d-v),m=3*(v-h),x=3*h,b=a*a,_=b*a,w=1-a,T=w*w,k=T*w;for(f=0;f<t.length;f++)o=g*(c=t[f])[n][r]+y*c[n][r+1]+m*c[n][r+2]+x*c[n][r+3],s=g*c[n+1][r]+y*c[n+1][r+1]+m*c[n+1][r+2]+x*c[n+1][r+3],l=g*c[n+2][r]+y*c[n+2][r+1]+m*c[n+2][r+2]+x*c[n+2][r+3],u=g*c[n+3][r]+y*c[n+3][r+1]+m*c[n+3][r+2]+x*c[n+3][r+3],e[f]=k*o+3*(T*a*s+w*b*l)+_*u;return e}:e?function(e,r,n,i,a){var o,s,l,u;e||(e=[]),r*=3;var c=i*i,f=1-i,h=f*f,p=f*i*2,d=-3*h,v=3*(h-p),g=3*(p-c),y=3*c,m=1-a;for(l=0;l<t.length;l++)o=d*(u=t[l])[n][r]+v*u[n][r+1]+g*u[n][r+2]+y*u[n][r+3],s=d*u[n+1][r]+v*u[n+1][r+1]+g*u[n+1][r+2]+y*u[n+1][r+3],e[l]=m*o+a*s;return e}:r?function(e,r,n,i,a){var o,s,l,u,c,f;e||(e=[]),n*=3;var h=a*a,p=h*a,d=1-a,v=d*d,g=v*d;for(c=0;c<t.length;c++)o=(f=t[c])[n][r+1]-f[n][r],s=f[n+1][r+1]-f[n+1][r],l=f[n+2][r+1]-f[n+2][r],u=f[n+3][r+1]-f[n+3][r],e[c]=g*o+3*(v*a*s+d*h*l)+p*u;return e}:function(e,r,n,i,a){var o,s,l,u;e||(e=[]);var c=1-a;for(l=0;l<t.length;l++)o=(u=t[l])[n][r+1]-u[n][r],s=u[n+1][r+1]-u[n+1][r],e[l]=c*o+a*s;return e}}},73057:function(t){\\\"use strict\\\";t.exports=function(t,e,r){return e&&r?function(e,r,n,i,a){var o,s,l,u,c,f;e||(e=[]),r*=3,n*=3;var h=i*i,p=h*i,d=1-i,v=d*d,g=v*d,y=a*a,m=1-a,x=m*m,b=m*a*2,_=-3*x,w=3*(x-b),T=3*(b-y),k=3*y;for(f=0;f<t.length;f++)o=_*(c=t[f])[n][r]+w*c[n+1][r]+T*c[n+2][r]+k*c[n+3][r],s=_*c[n][r+1]+w*c[n+1][r+1]+T*c[n+2][r+1]+k*c[n+3][r+1],l=_*c[n][r+2]+w*c[n+1][r+2]+T*c[n+2][r+2]+k*c[n+3][r+2],u=_*c[n][r+3]+w*c[n+1][r+3]+T*c[n+2][r+3]+k*c[n+3][r+3],e[f]=g*o+3*(v*i*s+d*h*l)+p*u;return e}:e?function(e,r,n,i,a){var o,s,l,u,c,f;e||(e=[]),r*=3;var h=a*a,p=h*a,d=1-a,v=d*d,g=v*d;for(c=0;c<t.length;c++)o=(f=t[c])[n+1][r]-f[n][r],s=f[n+1][r+1]-f[n][r+1],l=f[n+1][r+2]-f[n][r+2],u=f[n+1][r+3]-f[n][r+3],e[c]=g*o+3*(v*a*s+d*h*l)+p*u;return e}:r?function(e,r,n,i,a){var o,s,l,u;e||(e=[]),n*=3;var c=1-i,f=a*a,h=1-a,p=h*h,d=h*a*2,v=-3*p,g=3*(p-d),y=3*(d-f),m=3*f;for(l=0;l<t.length;l++)o=v*(u=t[l])[n][r]+g*u[n+1][r]+y*u[n+2][r]+m*u[n+3][r],s=v*u[n][r+1]+g*u[n+1][r+1]+y*u[n+2][r+1]+m*u[n+3][r+1],e[l]=c*o+i*s;return e}:function(e,r,n,i,a){var o,s,l,u;e||(e=[]);var c=1-i;for(l=0;l<t.length;l++)o=(u=t[l])[n+1][r]-u[n][r],s=u[n+1][r+1]-u[n][r+1],e[l]=c*o+i*s;return e}}},20349:function(t){\\\"use strict\\\";t.exports=function(t,e,r,n,i){var a=e-2,o=r-2;return n&&i?function(e,r,n){var i,s,l,u,c,f;e||(e=[]);var h=Math.max(0,Math.min(Math.floor(r),a)),p=Math.max(0,Math.min(Math.floor(n),o)),d=Math.max(0,Math.min(1,r-h)),v=Math.max(0,Math.min(1,n-p));h*=3,p*=3;var g=d*d,y=g*d,m=1-d,x=m*m,b=x*m,_=v*v,w=_*v,T=1-v,k=T*T,A=k*T;for(f=0;f<t.length;f++)i=b*(c=t[f])[p][h]+3*(x*d*c[p][h+1]+m*g*c[p][h+2])+y*c[p][h+3],s=b*c[p+1][h]+3*(x*d*c[p+1][h+1]+m*g*c[p+1][h+2])+y*c[p+1][h+3],l=b*c[p+2][h]+3*(x*d*c[p+2][h+1]+m*g*c[p+2][h+2])+y*c[p+2][h+3],u=b*c[p+3][h]+3*(x*d*c[p+3][h+1]+m*g*c[p+3][h+2])+y*c[p+3][h+3],e[f]=A*i+3*(k*v*s+T*_*l)+w*u;return e}:n?function(e,r,n){e||(e=[]);var i,s,l,u,c,f,h=Math.max(0,Math.min(Math.floor(r),a)),p=Math.max(0,Math.min(Math.floor(n),o)),d=Math.max(0,Math.min(1,r-h)),v=Math.max(0,Math.min(1,n-p));h*=3;var g=d*d,y=g*d,m=1-d,x=m*m,b=x*m,_=1-v;for(c=0;c<t.length;c++)i=_*(f=t[c])[p][h]+v*f[p+1][h],s=_*f[p][h+1]+v*f[p+1][h+1],l=_*f[p][h+2]+v*f[p+1][h+1],u=_*f[p][h+3]+v*f[p+1][h+1],e[c]=b*i+3*(x*d*s+m*g*l)+y*u;return e}:i?function(e,r,n){e||(e=[]);var i,s,l,u,c,f,h=Math.max(0,Math.min(Math.floor(r),a)),p=Math.max(0,Math.min(Math.floor(n),o)),d=Math.max(0,Math.min(1,r-h)),v=Math.max(0,Math.min(1,n-p));p*=3;var g=v*v,y=g*v,m=1-v,x=m*m,b=x*m,_=1-d;for(c=0;c<t.length;c++)i=_*(f=t[c])[p][h]+d*f[p][h+1],s=_*f[p+1][h]+d*f[p+1][h+1],l=_*f[p+2][h]+d*f[p+2][h+1],u=_*f[p+3][h]+d*f[p+3][h+1],e[c]=b*i+3*(x*v*s+m*g*l)+y*u;return e}:function(e,r,n){e||(e=[]);var i,s,l,u,c=Math.max(0,Math.min(Math.floor(r),a)),f=Math.max(0,Math.min(Math.floor(n),o)),h=Math.max(0,Math.min(1,r-c)),p=Math.max(0,Math.min(1,n-f)),d=1-p,v=1-h;for(l=0;l<t.length;l++)i=v*(u=t[l])[f][c]+h*u[f][c+1],s=v*u[f+1][c]+h*u[f+1][c+1],e[l]=d*i+p*s;return e}}},92087:function(t,e,r){\\\"use strict\\\";var n=r(71828),i=r(19237),a=r(13145),o=r(99798),s=r(22399);t.exports=function(t,e,r,l){function u(r,i){return n.coerce(t,e,o,r,i)}e._clipPathId=\\\"clip\\\"+e.uid+\\\"carpet\\\";var c=u(\\\"color\\\",s.defaultLine);n.coerceFont(u,\\\"font\\\"),u(\\\"carpet\\\"),a(t,e,l,u,c),e.a&&e.b?(e.a.length<3&&(e.aaxis.smoothing=0),e.b.length<3&&(e.baxis.smoothing=0),i(t,e,u)||(e.visible=!1),e._cheater&&u(\\\"cheaterslope\\\")):e.visible=!1}},21462:function(t,e,r){\\\"use strict\\\";t.exports={attributes:r(99798),supplyDefaults:r(92087),plot:r(89740),calc:r(25281),animatable:!0,isContainer:!0,moduleType:\\\"trace\\\",name:\\\"carpet\\\",basePlotModule:r(93612),categories:[\\\"cartesian\\\",\\\"svg\\\",\\\"carpet\\\",\\\"carpetAxis\\\",\\\"notLegendIsolatable\\\",\\\"noMultiCategory\\\",\\\"noHover\\\",\\\"noSortingByValue\\\"],meta:{}}},22882:function(t){\\\"use strict\\\";t.exports=function(t,e){for(var r,n=t._fullData.length,i=0;i<n;i++){var a=t._fullData[i];if(a.index!==e.index&&\\\"carpet\\\"===a.type&&(r||(r=a),a.carpet===e.carpet))return a}return r}},67961:function(t){\\\"use strict\\\";t.exports=function(t,e,r){if(0===t.length)return\\\"\\\";var n,i=[],a=r?3:1;for(n=0;n<t.length;n+=a)i.push(t[n]+\\\",\\\"+e[n]),r&&n<t.length-a&&(i.push(\\\"C\\\"),i.push([t[n+1]+\\\",\\\"+e[n+1],t[n+2]+\\\",\\\"+e[n+2]+\\\" \\\"].join(\\\" \\\")));return i.join(r?\\\"\\\":\\\"L\\\")}},27669:function(t,e,r){\\\"use strict\\\";var n=r(71828).isArrayOrTypedArray;t.exports=function(t,e,r){var i;for(n(t)?t.length>e.length&&(t=t.slice(0,e.length)):t=[],i=0;i<e.length;i++)t[i]=r(e[i]);return t}},11651:function(t){\\\"use strict\\\";t.exports=function(t,e,r,n,i,a){var o=i[0]*t.dpdx(e),s=i[1]*t.dpdy(r),l=1,u=1;if(a){var c=Math.sqrt(i[0]*i[0]+i[1]*i[1]),f=Math.sqrt(a[0]*a[0]+a[1]*a[1]),h=(i[0]*a[0]+i[1]*a[1])/c/f;u=Math.max(0,h)}var p=180*Math.atan2(s,o)/Math.PI;return p<-90?(p+=180,l=-l):p>90&&(p-=180,l=-l),{angle:p,flip:l,p:t.c2p(n,e,r),offsetMultplier:u}}},89740:function(t,e,r){\\\"use strict\\\";var n=r(39898),i=r(91424),a=r(27669),o=r(67961),s=r(11651),l=r(63893),u=r(71828),c=u.strRotate,f=u.strTranslate,h=r(18783);function p(t,e,r,s,l,u,c){var f=\\\"const-\\\"+l+\\\"-lines\\\",h=r.selectAll(\\\".\\\"+f).data(u);h.enter().append(\\\"path\\\").classed(f,!0).style(\\\"vector-effect\\\",c?\\\"none\\\":\\\"non-scaling-stroke\\\"),h.each((function(r){var s=r,l=s.x,u=s.y,c=a([],l,t.c2p),f=a([],u,e.c2p),h=\\\"M\\\"+o(c,f,s.smoothing);n.select(this).attr(\\\"d\\\",h).style(\\\"stroke-width\\\",s.width).style(\\\"stroke\\\",s.color).style(\\\"stroke-dasharray\\\",i.dashStyle(s.dash,s.width)).style(\\\"fill\\\",\\\"none\\\")})),h.exit().remove()}function d(t,e,r,a,o,u,h,p){var d=u.selectAll(\\\"text.\\\"+p).data(h);d.enter().append(\\\"text\\\").classed(p,!0);var v=0,g={};return d.each((function(o,u){var h;if(\\\"auto\\\"===o.axis.tickangle)h=s(a,e,r,o.xy,o.dxy);else{var p=(o.axis.tickangle+180)*Math.PI/180;h=s(a,e,r,o.xy,[Math.cos(p),Math.sin(p)])}u||(g={angle:h.angle,flip:h.flip});var d=(o.endAnchor?-1:1)*h.flip,y=n.select(this).attr({\\\"text-anchor\\\":d>0?\\\"start\\\":\\\"end\\\",\\\"data-notex\\\":1}).call(i.font,o.font).text(o.text).call(l.convertToTspans,t),m=i.bBox(this);y.attr(\\\"transform\\\",f(h.p[0],h.p[1])+c(h.angle)+f(o.axis.labelpadding*d,.3*m.height)),v=Math.max(v,m.width+o.axis.labelpadding)})),d.exit().remove(),g.maxExtent=v,g}t.exports=function(t,e,r,i){var l=t._context.staticPlot,c=e.xaxis,f=e.yaxis,h=t._fullLayout._clips;u.makeTraceGroups(i,r,\\\"trace\\\").each((function(e){var r=n.select(this),i=e[0],v=i.trace,g=v.aaxis,m=v.baxis,x=u.ensureSingle(r,\\\"g\\\",\\\"minorlayer\\\"),b=u.ensureSingle(r,\\\"g\\\",\\\"majorlayer\\\"),_=u.ensureSingle(r,\\\"g\\\",\\\"boundarylayer\\\"),w=u.ensureSingle(r,\\\"g\\\",\\\"labellayer\\\");r.style(\\\"opacity\\\",v.opacity),p(c,f,b,0,\\\"a\\\",g._gridlines,!0),p(c,f,b,0,\\\"b\\\",m._gridlines,!0),p(c,f,x,0,\\\"a\\\",g._minorgridlines,!0),p(c,f,x,0,\\\"b\\\",m._minorgridlines,!0),p(c,f,_,0,\\\"a-boundary\\\",g._boundarylines,l),p(c,f,_,0,\\\"b-boundary\\\",m._boundarylines,l);var T=d(t,c,f,v,0,w,g._labels,\\\"a-label\\\"),k=d(t,c,f,v,0,w,m._labels,\\\"b-label\\\");!function(t,e,r,n,i,a,o,l){var c,f,h,p,d=u.aggNums(Math.min,null,r.a),v=u.aggNums(Math.max,null,r.a),g=u.aggNums(Math.min,null,r.b),m=u.aggNums(Math.max,null,r.b);c=.5*(d+v),f=g,h=r.ab2xy(c,f,!0),p=r.dxyda_rough(c,f),void 0===o.angle&&u.extendFlat(o,s(r,i,a,h,r.dxydb_rough(c,f))),y(t,e,r,0,h,p,r.aaxis,i,a,o,\\\"a-title\\\"),c=d,f=.5*(g+m),h=r.ab2xy(c,f,!0),p=r.dxydb_rough(c,f),void 0===l.angle&&u.extendFlat(l,s(r,i,a,h,r.dxyda_rough(c,f))),y(t,e,r,0,h,p,r.baxis,i,a,l,\\\"b-title\\\")}(t,w,v,0,c,f,T,k),function(t,e,r,n,i){var s,l,c,f,h=r.select(\\\"#\\\"+t._clipPathId);h.size()||(h=r.append(\\\"clipPath\\\").classed(\\\"carpetclip\\\",!0));var p=u.ensureSingle(h,\\\"path\\\",\\\"carpetboundary\\\"),d=e.clipsegments,v=[];for(f=0;f<d.length;f++)s=d[f],l=a([],s.x,n.c2p),c=a([],s.y,i.c2p),v.push(o(l,c,s.bicubic));var g=\\\"M\\\"+v.join(\\\"L\\\")+\\\"Z\\\";h.attr(\\\"id\\\",t._clipPathId),p.attr(\\\"d\\\",g)}(v,i,h,c,f)}))};var v=h.LINE_SPACING,g=(1-h.MID_SHIFT)/v+1;function y(t,e,r,a,o,u,h,p,d,y,m){var x=[];h.title.text&&x.push(h.title.text);var b=e.selectAll(\\\"text.\\\"+m).data(x),_=y.maxExtent;b.enter().append(\\\"text\\\").classed(m,!0),b.each((function(){var e=s(r,p,d,o,u);-1===[\\\"start\\\",\\\"both\\\"].indexOf(h.showticklabels)&&(_=0);var a=h.title.font.size;_+=a+h.title.offset;var m=(y.angle+(y.flip<0?180:0)-e.angle+450)%360,x=m>90&&m<270,b=n.select(this);b.text(h.title.text).call(l.convertToTspans,t),x&&(_=(-l.lineCount(b)+g)*v*a-_),b.attr(\\\"transform\\\",f(e.p[0],e.p[1])+c(e.angle)+f(0,_)).attr(\\\"text-anchor\\\",\\\"middle\\\").call(i.font,h.title.font)})),b.exit().remove()}},11435:function(t,e,r){\\\"use strict\\\";var n=r(35509),i=r(65888).findBin,a=r(45664),o=r(20349),s=r(54495),l=r(73057);t.exports=function(t){var e=t._a,r=t._b,u=e.length,c=r.length,f=t.aaxis,h=t.baxis,p=e[0],d=e[u-1],v=r[0],g=r[c-1],y=e[e.length-1]-e[0],m=r[r.length-1]-r[0],x=y*n.RELATIVE_CULL_TOLERANCE,b=m*n.RELATIVE_CULL_TOLERANCE;p-=x,d+=x,v-=b,g+=b,t.isVisible=function(t,e){return t>p&&t<d&&e>v&&e<g},t.isOccluded=function(t,e){return t<p||t>d||e<v||e>g},t.setScale=function(){var e=t._x,r=t._y,n=a(t._xctrl,t._yctrl,e,r,f.smoothing,h.smoothing);t._xctrl=n[0],t._yctrl=n[1],t.evalxy=o([t._xctrl,t._yctrl],u,c,f.smoothing,h.smoothing),t.dxydi=s([t._xctrl,t._yctrl],f.smoothing,h.smoothing),t.dxydj=l([t._xctrl,t._yctrl],f.smoothing,h.smoothing)},t.i2a=function(t){var r=Math.max(0,Math.floor(t[0]),u-2),n=t[0]-r;return(1-n)*e[r]+n*e[r+1]},t.j2b=function(t){var e=Math.max(0,Math.floor(t[1]),u-2),n=t[1]-e;return(1-n)*r[e]+n*r[e+1]},t.ij2ab=function(e){return[t.i2a(e[0]),t.j2b(e[1])]},t.a2i=function(t){var r=Math.max(0,Math.min(i(t,e),u-2)),n=e[r],a=e[r+1];return Math.max(0,Math.min(u-1,r+(t-n)/(a-n)))},t.b2j=function(t){var e=Math.max(0,Math.min(i(t,r),c-2)),n=r[e],a=r[e+1];return Math.max(0,Math.min(c-1,e+(t-n)/(a-n)))},t.ab2ij=function(e){return[t.a2i(e[0]),t.b2j(e[1])]},t.i2c=function(e,r){return t.evalxy([],e,r)},t.ab2xy=function(n,i,a){if(!a&&(n<e[0]||n>e[u-1]|i<r[0]||i>r[c-1]))return[!1,!1];var o=t.a2i(n),s=t.b2j(i),l=t.evalxy([],o,s);if(a){var f,h,p,d,v=0,g=0,y=[];n<e[0]?(f=0,h=0,v=(n-e[0])/(e[1]-e[0])):n>e[u-1]?(f=u-2,h=1,v=(n-e[u-1])/(e[u-1]-e[u-2])):h=o-(f=Math.max(0,Math.min(u-2,Math.floor(o)))),i<r[0]?(p=0,d=0,g=(i-r[0])/(r[1]-r[0])):i>r[c-1]?(p=c-2,d=1,g=(i-r[c-1])/(r[c-1]-r[c-2])):d=s-(p=Math.max(0,Math.min(c-2,Math.floor(s)))),v&&(t.dxydi(y,f,p,h,d),l[0]+=y[0]*v,l[1]+=y[1]*v),g&&(t.dxydj(y,f,p,h,d),l[0]+=y[0]*g,l[1]+=y[1]*g)}return l},t.c2p=function(t,e,r){return[e.c2p(t[0]),r.c2p(t[1])]},t.p2x=function(t,e,r){return[e.p2c(t[0]),r.p2c(t[1])]},t.dadi=function(t){var r=Math.max(0,Math.min(e.length-2,t));return e[r+1]-e[r]},t.dbdj=function(t){var e=Math.max(0,Math.min(r.length-2,t));return r[e+1]-r[e]},t.dxyda=function(e,r,n,i){var a=t.dxydi(null,e,r,n,i),o=t.dadi(e,n);return[a[0]/o,a[1]/o]},t.dxydb=function(e,r,n,i){var a=t.dxydj(null,e,r,n,i),o=t.dbdj(r,i);return[a[0]/o,a[1]/o]},t.dxyda_rough=function(e,r,n){var i=y*(n||.1),a=t.ab2xy(e+i,r,!0),o=t.ab2xy(e-i,r,!0);return[.5*(a[0]-o[0])/i,.5*(a[1]-o[1])/i]},t.dxydb_rough=function(e,r,n){var i=m*(n||.1),a=t.ab2xy(e,r+i,!0),o=t.ab2xy(e,r-i,!0);return[.5*(a[0]-o[0])/i,.5*(a[1]-o[1])/i]},t.dpdx=function(t){return t._m},t.dpdy=function(t){return t._m}}},72505:function(t,e,r){\\\"use strict\\\";var n=r(71828);t.exports=function(t,e,r){var i,a,o,s=[],l=[],u=t[0].length,c=t.length;function f(e,r){var n,i=0,a=0;return e>0&&void 0!==(n=t[r][e-1])&&(a++,i+=n),e<u-1&&void 0!==(n=t[r][e+1])&&(a++,i+=n),r>0&&void 0!==(n=t[r-1][e])&&(a++,i+=n),r<c-1&&void 0!==(n=t[r+1][e])&&(a++,i+=n),i/Math.max(1,a)}var h,p,d,v,g,y,m,x,b,_,w,T=0;for(i=0;i<u;i++)for(a=0;a<c;a++)void 0===t[a][i]&&(s.push(i),l.push(a),t[a][i]=f(i,a)),T=Math.max(T,Math.abs(t[a][i]));if(!s.length)return t;var k=0,A=0,M=s.length;do{for(k=0,o=0;o<M;o++){i=s[o],a=l[o];var S,E,L,C,P,O,I=0,D=0;0===i?(L=e[P=Math.min(u-1,2)],C=e[1],S=t[a][P],D+=(E=t[a][1])+(E-S)*(e[0]-C)/(C-L),I++):i===u-1&&(L=e[P=Math.max(0,u-3)],C=e[u-2],S=t[a][P],D+=(E=t[a][u-2])+(E-S)*(e[u-1]-C)/(C-L),I++),(0===i||i===u-1)&&a>0&&a<c-1&&(h=r[a+1]-r[a],D+=((p=r[a]-r[a-1])*t[a+1][i]+h*t[a-1][i])/(p+h),I++),0===a?(L=r[O=Math.min(c-1,2)],C=r[1],S=t[O][i],D+=(E=t[1][i])+(E-S)*(r[0]-C)/(C-L),I++):a===c-1&&(L=r[O=Math.max(0,c-3)],C=r[c-2],S=t[O][i],D+=(E=t[c-2][i])+(E-S)*(r[c-1]-C)/(C-L),I++),(0===a||a===c-1)&&i>0&&i<u-1&&(h=e[i+1]-e[i],D+=((p=e[i]-e[i-1])*t[a][i+1]+h*t[a][i-1])/(p+h),I++),I?D/=I:(d=e[i+1]-e[i],v=e[i]-e[i-1],x=(g=r[a+1]-r[a])*(y=r[a]-r[a-1])*(g+y),D=((m=d*v*(d+v))*(y*t[a+1][i]+g*t[a-1][i])+x*(v*t[a][i+1]+d*t[a][i-1]))/(x*(v+d)+m*(y+g))),k+=(_=(b=D-t[a][i])/T)*_,w=I?0:.85,t[a][i]+=b*(1+w)}k=Math.sqrt(k)}while(A++<100&&k>1e-5);return n.log(\\\"Smoother converged to\\\",k,\\\"after\\\",A,\\\"iterations\\\"),t}},19237:function(t,e,r){\\\"use strict\\\";var n=r(71828).isArray1D;t.exports=function(t,e,r){var i=r(\\\"x\\\"),a=i&&i.length,o=r(\\\"y\\\"),s=o&&o.length;if(!a&&!s)return!1;if(e._cheater=!i,a&&!n(i)||s&&!n(o))e._length=null;else{var l=a?i.length:1/0;s&&(l=Math.min(l,o.length)),e.a&&e.a.length&&(l=Math.min(l,e.a.length)),e.b&&e.b.length&&(l=Math.min(l,e.b.length)),e._length=l}return!0}},69568:function(t,e,r){\\\"use strict\\\";var n=r(5386).fF,i=r(19316),a=r(50693),o=r(9012),s=r(22399).defaultLine,l=r(1426).extendFlat,u=i.marker.line;t.exports=l({locations:{valType:\\\"data_array\\\",editType:\\\"calc\\\"},locationmode:i.locationmode,z:{valType:\\\"data_array\\\",editType:\\\"calc\\\"},geojson:l({},i.geojson,{}),featureidkey:i.featureidkey,text:l({},i.text,{}),hovertext:l({},i.hovertext,{}),marker:{line:{color:l({},u.color,{dflt:s}),width:l({},u.width,{dflt:1}),editType:\\\"calc\\\"},opacity:{valType:\\\"number\\\",arrayOk:!0,min:0,max:1,dflt:1,editType:\\\"style\\\"},editType:\\\"calc\\\"},selected:{marker:{opacity:i.selected.marker.opacity,editType:\\\"plot\\\"},editType:\\\"plot\\\"},unselected:{marker:{opacity:i.unselected.marker.opacity,editType:\\\"plot\\\"},editType:\\\"plot\\\"},hoverinfo:l({},o.hoverinfo,{editType:\\\"calc\\\",flags:[\\\"location\\\",\\\"z\\\",\\\"text\\\",\\\"name\\\"]}),hovertemplate:n(),showlegend:l({},o.showlegend,{dflt:!1})},a(\\\"\\\",{cLetter:\\\"z\\\",editTypeOverride:\\\"calc\\\"}))},38675:function(t,e,r){\\\"use strict\\\";var n=r(92770),i=r(50606).BADNUM,a=r(78803),o=r(75225),s=r(66279);function l(t){return t&&\\\"string\\\"==typeof t}t.exports=function(t,e){var r,u=e._length,c=new Array(u);r=e.geojson?function(t){return l(t)||n(t)}:l;for(var f=0;f<u;f++){var h=c[f]={},p=e.locations[f],d=e.z[f];r(p)&&n(d)?(h.loc=p,h.z=d):(h.loc=null,h.z=i),h.index=f}return o(c,e),a(t,e,{vals:e.z,containerStr:\\\"\\\",cLetter:\\\"z\\\"}),s(c,e),c}},61869:function(t,e,r){\\\"use strict\\\";var n=r(71828),i=r(1586),a=r(69568);t.exports=function(t,e,r,o){function s(r,i){return n.coerce(t,e,a,r,i)}var l=s(\\\"locations\\\"),u=s(\\\"z\\\");if(l&&l.length&&n.isArrayOrTypedArray(u)&&u.length){e._length=Math.min(l.length,u.length);var c,f=s(\\\"geojson\\\");(\\\"string\\\"==typeof f&&\\\"\\\"!==f||n.isPlainObject(f))&&(c=\\\"geojson-id\\\"),\\\"geojson-id\\\"===s(\\\"locationmode\\\",c)&&s(\\\"featureidkey\\\"),s(\\\"text\\\"),s(\\\"hovertext\\\"),s(\\\"hovertemplate\\\"),s(\\\"marker.line.width\\\")&&s(\\\"marker.line.color\\\"),s(\\\"marker.opacity\\\"),i(t,e,o,s,{prefix:\\\"\\\",cLetter:\\\"z\\\"}),n.coerceSelectionMarkerOpacity(e,s)}else e.visible=!1}},92069:function(t){\\\"use strict\\\";t.exports=function(t,e,r,n,i){t.location=e.location,t.z=e.z;var a=n[i];return a.fIn&&a.fIn.properties&&(t.properties=a.fIn.properties),t.ct=a.ct,t}},42300:function(t,e,r){\\\"use strict\\\";var n=r(89298),i=r(69568),a=r(71828).fillText;t.exports=function(t,e,r){var o,s,l,u,c=t.cd,f=c[0].trace,h=t.subplot,p=[e,r],d=[e+360,r];for(s=0;s<c.length;s++)if(u=!1,(o=c[s])._polygons){for(l=0;l<o._polygons.length;l++)o._polygons[l].contains(p)&&(u=!u),o._polygons[l].contains(d)&&(u=!u);if(u)break}if(u&&o)return t.x0=t.x1=t.xa.c2p(o.ct),t.y0=t.y1=t.ya.c2p(o.ct),t.index=o.index,t.location=o.loc,t.z=o.z,t.zLabel=n.tickText(h.mockAxis,h.mockAxis.c2l(o.z),\\\"hover\\\").text,t.hovertemplate=o.hovertemplate,function(t,e,r){if(!e.hovertemplate){var n=r.hi||e.hoverinfo,o=String(r.loc),s=\\\"all\\\"===n?i.hoverinfo.flags:n.split(\\\"+\\\"),l=-1!==s.indexOf(\\\"name\\\"),u=-1!==s.indexOf(\\\"location\\\"),c=-1!==s.indexOf(\\\"z\\\"),f=-1!==s.indexOf(\\\"text\\\"),h=[];!l&&u?t.nameOverride=o:(l&&(t.nameOverride=e.name),u&&h.push(o)),c&&h.push(t.zLabel),f&&a(r,e,h),t.extraText=h.join(\\\"<br>\\\")}}(t,f,o),[t]}},51319:function(t,e,r){\\\"use strict\\\";t.exports={attributes:r(69568),supplyDefaults:r(61869),colorbar:r(61243),calc:r(38675),calcGeoJSON:r(99841).calcGeoJSON,plot:r(99841).plot,style:r(99636).style,styleOnSelect:r(99636).styleOnSelect,hoverPoints:r(42300),eventData:r(92069),selectPoints:r(81253),moduleType:\\\"trace\\\",name:\\\"choropleth\\\",basePlotModule:r(44622),categories:[\\\"geo\\\",\\\"noOpacity\\\",\\\"showLegend\\\"],meta:{}}},99841:function(t,e,r){\\\"use strict\\\";var n=r(39898),i=r(71828),a=r(41327),o=r(90973).getTopojsonFeatures,s=r(71739).findExtremes,l=r(99636).style;t.exports={calcGeoJSON:function(t,e){for(var r=t[0].trace,n=e[r.geo],i=n._subplot,l=r.locationmode,u=r._length,c=\\\"geojson-id\\\"===l?a.extractTraceFeature(t):o(r,i.topojson),f=[],h=[],p=0;p<u;p++){var d=t[p],v=\\\"geojson-id\\\"===l?d.fOut:a.locationToFeature(l,d.loc,c);if(v){d.geojson=v,d.ct=v.properties.ct,d._polygons=a.feature2polygons(v);var g=a.computeBbox(v);f.push(g[0],g[2]),h.push(g[1],g[3])}else d.geojson=null}if(\\\"geojson\\\"===n.fitbounds&&\\\"geojson-id\\\"===l){var y=a.computeBbox(a.getTraceGeojson(r));f=[y[0],y[2]],h=[y[1],y[3]]}var m={padded:!0};r._extremes.lon=s(n.lonaxis._ax,f,m),r._extremes.lat=s(n.lataxis._ax,h,m)},plot:function(t,e,r){var a=e.layers.backplot.select(\\\".choroplethlayer\\\");i.makeTraceGroups(a,r,\\\"trace choropleth\\\").each((function(e){var r=n.select(this).selectAll(\\\"path.choroplethlocation\\\").data(i.identity);r.enter().append(\\\"path\\\").classed(\\\"choroplethlocation\\\",!0),r.exit().remove(),l(t,e)}))}}},81253:function(t){\\\"use strict\\\";t.exports=function(t,e){var r,n,i,a,o,s=t.cd,l=t.xaxis,u=t.yaxis,c=[];if(!1===e)for(r=0;r<s.length;r++)s[r].selected=0;else for(r=0;r<s.length;r++)(i=(n=s[r]).ct)&&(a=l.c2p(i),o=u.c2p(i),e.contains([a,o],null,r,t)?(c.push({pointNumber:r,lon:i[0],lat:i[1]}),n.selected=1):n.selected=0);return c}},99636:function(t,e,r){\\\"use strict\\\";var n=r(39898),i=r(7901),a=r(91424),o=r(21081);function s(t,e){var r=e[0].trace,s=e[0].node3.selectAll(\\\".choroplethlocation\\\"),l=r.marker||{},u=l.line||{},c=o.makeColorScaleFuncFromTrace(r);s.each((function(t){n.select(this).attr(\\\"fill\\\",c(t.z)).call(i.stroke,t.mlc||u.color).call(a.dashLine,\\\"\\\",t.mlw||u.width||0).style(\\\"opacity\\\",l.opacity)})),a.selectedPointStyle(s,r)}t.exports={style:function(t,e){e&&s(0,e)},styleOnSelect:function(t,e){var r=e[0].node3,n=e[0].trace;n.selectedpoints?a.selectedPointStyle(r.selectAll(\\\".choroplethlocation\\\"),n):s(0,e)}}},64496:function(t,e,r){\\\"use strict\\\";var n=r(69568),i=r(50693),a=r(5386).fF,o=r(9012),s=r(1426).extendFlat;t.exports=s({locations:{valType:\\\"data_array\\\",editType:\\\"calc\\\"},z:{valType:\\\"data_array\\\",editType:\\\"calc\\\"},geojson:{valType:\\\"any\\\",editType:\\\"calc\\\"},featureidkey:s({},n.featureidkey,{}),below:{valType:\\\"string\\\",editType:\\\"plot\\\"},text:n.text,hovertext:n.hovertext,marker:{line:{color:s({},n.marker.line.color,{editType:\\\"plot\\\"}),width:s({},n.marker.line.width,{editType:\\\"plot\\\"}),editType:\\\"calc\\\"},opacity:s({},n.marker.opacity,{editType:\\\"plot\\\"}),editType:\\\"calc\\\"},selected:{marker:{opacity:s({},n.selected.marker.opacity,{editType:\\\"plot\\\"}),editType:\\\"plot\\\"},editType:\\\"plot\\\"},unselected:{marker:{opacity:s({},n.unselected.marker.opacity,{editType:\\\"plot\\\"}),editType:\\\"plot\\\"},editType:\\\"plot\\\"},hoverinfo:n.hoverinfo,hovertemplate:a({},{keys:[\\\"properties\\\"]}),showlegend:s({},o.showlegend,{dflt:!1})},i(\\\"\\\",{cLetter:\\\"z\\\",editTypeOverride:\\\"calc\\\"}))},82004:function(t,e,r){\\\"use strict\\\";var n=r(92770),i=r(71828),a=r(21081),o=r(91424),s=r(18214).makeBlank,l=r(41327);function u(t){var e,r=t[0].trace,n=r._opts;if(r.selectedpoints){for(var a=o.makeSelectedPointStyleFns(r),s=0;s<t.length;s++){var l=t[s];l.fOut&&(l.fOut.properties.mo2=a.selectedOpacityFn(l))}e={type:\\\"identity\\\",property:\\\"mo2\\\"}}else e=i.isArrayOrTypedArray(r.marker.opacity)?{type:\\\"identity\\\",property:\\\"mo\\\"}:r.marker.opacity;return i.extendFlat(n.fill.paint,{\\\"fill-opacity\\\":e}),i.extendFlat(n.line.paint,{\\\"line-opacity\\\":e}),n}t.exports={convert:function(t){var e=t[0].trace,r=!0===e.visible&&0!==e._length,o={layout:{visibility:\\\"none\\\"},paint:{}},c={layout:{visibility:\\\"none\\\"},paint:{}},f=e._opts={fill:o,line:c,geojson:s()};if(!r)return f;var h=l.extractTraceFeature(t);if(!h)return f;var p,d,v,g=a.makeColorScaleFuncFromTrace(e),y=e.marker,m=y.line||{};i.isArrayOrTypedArray(y.opacity)&&(p=function(t){var e=t.mo;return n(e)?+i.constrain(e,0,1):0}),i.isArrayOrTypedArray(m.color)&&(d=function(t){return t.mlc}),i.isArrayOrTypedArray(m.width)&&(v=function(t){return t.mlw});for(var x=0;x<t.length;x++){var b=t[x],_=b.fOut;if(_){var w=_.properties;w.fc=g(b.z),p&&(w.mo=p(b)),d&&(w.mlc=d(b)),v&&(w.mlw=v(b)),b.ct=w.ct,b._polygons=l.feature2polygons(_)}}var T=p?{type:\\\"identity\\\",property:\\\"mo\\\"}:y.opacity;return i.extendFlat(o.paint,{\\\"fill-color\\\":{type:\\\"identity\\\",property:\\\"fc\\\"},\\\"fill-opacity\\\":T}),i.extendFlat(c.paint,{\\\"line-color\\\":d?{type:\\\"identity\\\",property:\\\"mlc\\\"}:m.color,\\\"line-width\\\":v?{type:\\\"identity\\\",property:\\\"mlw\\\"}:m.width,\\\"line-opacity\\\":T}),o.layout.visibility=\\\"visible\\\",c.layout.visibility=\\\"visible\\\",f.geojson={type:\\\"FeatureCollection\\\",features:h},u(t),f},convertOnSelect:u}},22654:function(t,e,r){\\\"use strict\\\";var n=r(71828),i=r(1586),a=r(64496);t.exports=function(t,e,r,o){function s(r,i){return n.coerce(t,e,a,r,i)}var l=s(\\\"locations\\\"),u=s(\\\"z\\\"),c=s(\\\"geojson\\\");n.isArrayOrTypedArray(l)&&l.length&&n.isArrayOrTypedArray(u)&&u.length&&(\\\"string\\\"==typeof c&&\\\"\\\"!==c||n.isPlainObject(c))?(s(\\\"featureidkey\\\"),e._length=Math.min(l.length,u.length),s(\\\"below\\\"),s(\\\"text\\\"),s(\\\"hovertext\\\"),s(\\\"hovertemplate\\\"),s(\\\"marker.line.width\\\")&&s(\\\"marker.line.color\\\"),s(\\\"marker.opacity\\\"),i(t,e,o,s,{prefix:\\\"\\\",cLetter:\\\"z\\\"}),n.coerceSelectionMarkerOpacity(e,s)):e.visible=!1}},57516:function(t,e,r){\\\"use strict\\\";t.exports={attributes:r(64496),supplyDefaults:r(22654),colorbar:r(61243),calc:r(38675),plot:r(7852),hoverPoints:r(42300),eventData:r(92069),selectPoints:r(81253),styleOnSelect:function(t,e){e&&e[0].trace._glTrace.updateOnSelect(e)},getBelow:function(t,e){for(var r=e.getMapLayers(),n=r.length-2;n>=0;n--){var i=r[n].id;if(\\\"string\\\"==typeof i&&0===i.indexOf(\\\"water\\\"))for(var a=n+1;a<r.length;a++)if(\\\"string\\\"==typeof(i=r[a].id)&&-1===i.indexOf(\\\"plotly-\\\"))return i}},moduleType:\\\"trace\\\",name:\\\"choroplethmapbox\\\",basePlotModule:r(50101),categories:[\\\"mapbox\\\",\\\"gl\\\",\\\"noOpacity\\\",\\\"showLegend\\\"],meta:{hr_name:\\\"choropleth_mapbox\\\"}}},7852:function(t,e,r){\\\"use strict\\\";var n=r(82004).convert,i=r(82004).convertOnSelect,a=r(77734).traceLayerPrefix;function o(t,e){this.type=\\\"choroplethmapbox\\\",this.subplot=t,this.uid=e,this.sourceId=\\\"source-\\\"+e,this.layerList=[[\\\"fill\\\",a+e+\\\"-fill\\\"],[\\\"line\\\",a+e+\\\"-line\\\"]],this.below=null}var s=o.prototype;s.update=function(t){this._update(n(t)),t[0].trace._glTrace=this},s.updateOnSelect=function(t){this._update(i(t))},s._update=function(t){var e=this.subplot,r=this.layerList,n=e.belowLookup[\\\"trace-\\\"+this.uid];e.map.getSource(this.sourceId).setData(t.geojson),n!==this.below&&(this._removeLayers(),this._addLayers(t,n),this.below=n);for(var i=0;i<r.length;i++){var a=r[i],o=a[0],s=a[1],l=t[o];e.setOptions(s,\\\"setLayoutProperty\\\",l.layout),\\\"visible\\\"===l.layout.visibility&&e.setOptions(s,\\\"setPaintProperty\\\",l.paint)}},s._addLayers=function(t,e){for(var r=this.subplot,n=this.layerList,i=this.sourceId,a=0;a<n.length;a++){var o=n[a],s=o[0],l=t[s];r.addLayer({type:s,id:o[1],source:i,layout:l.layout,paint:l.paint},e)}},s._removeLayers=function(){for(var t=this.subplot.map,e=this.layerList,r=e.length-1;r>=0;r--)t.removeLayer(e[r][1])},s.dispose=function(){var t=this.subplot.map;this._removeLayers(),t.removeSource(this.sourceId)},t.exports=function(t,e){var r=e[0].trace,i=new o(t,r.uid),a=i.sourceId,s=n(e),l=i.below=t.belowLookup[\\\"trace-\\\"+r.uid];return t.map.addSource(a,{type:\\\"geojson\\\",data:s.geojson}),i._addLayers(s,l),e[0].trace._glTrace=i,i}},12674:function(t,e,r){\\\"use strict\\\";var n=r(50693),i=r(12663).axisHoverFormat,a=r(5386).fF,o=r(2418),s=r(9012),l=r(1426).extendFlat,u={x:{valType:\\\"data_array\\\",editType:\\\"calc+clearAxisTypes\\\"},y:{valType:\\\"data_array\\\",editType:\\\"calc+clearAxisTypes\\\"},z:{valType:\\\"data_array\\\",editType:\\\"calc+clearAxisTypes\\\"},u:{valType:\\\"data_array\\\",editType:\\\"calc\\\"},v:{valType:\\\"data_array\\\",editType:\\\"calc\\\"},w:{valType:\\\"data_array\\\",editType:\\\"calc\\\"},sizemode:{valType:\\\"enumerated\\\",values:[\\\"scaled\\\",\\\"absolute\\\"],editType:\\\"calc\\\",dflt:\\\"scaled\\\"},sizeref:{valType:\\\"number\\\",editType:\\\"calc\\\",min:0},anchor:{valType:\\\"enumerated\\\",editType:\\\"calc\\\",values:[\\\"tip\\\",\\\"tail\\\",\\\"cm\\\",\\\"center\\\"],dflt:\\\"cm\\\"},text:{valType:\\\"string\\\",dflt:\\\"\\\",arrayOk:!0,editType:\\\"calc\\\"},hovertext:{valType:\\\"string\\\",dflt:\\\"\\\",arrayOk:!0,editType:\\\"calc\\\"},hovertemplate:a({editType:\\\"calc\\\"},{keys:[\\\"norm\\\"]}),uhoverformat:i(\\\"u\\\",1),vhoverformat:i(\\\"v\\\",1),whoverformat:i(\\\"w\\\",1),xhoverformat:i(\\\"x\\\"),yhoverformat:i(\\\"y\\\"),zhoverformat:i(\\\"z\\\"),showlegend:l({},s.showlegend,{dflt:!1})};l(u,n(\\\"\\\",{colorAttr:\\\"u/v/w norm\\\",showScaleDflt:!0,editTypeOverride:\\\"calc\\\"})),[\\\"opacity\\\",\\\"lightposition\\\",\\\"lighting\\\"].forEach((function(t){u[t]=o[t]})),u.hoverinfo=l({},s.hoverinfo,{editType:\\\"calc\\\",flags:[\\\"x\\\",\\\"y\\\",\\\"z\\\",\\\"u\\\",\\\"v\\\",\\\"w\\\",\\\"norm\\\",\\\"text\\\",\\\"name\\\"],dflt:\\\"x+y+z+norm+text+name\\\"}),u.transforms=void 0,t.exports=u},31371:function(t,e,r){\\\"use strict\\\";var n=r(78803);t.exports=function(t,e){for(var r=e.u,i=e.v,a=e.w,o=Math.min(e.x.length,e.y.length,e.z.length,r.length,i.length,a.length),s=-1/0,l=1/0,u=0;u<o;u++){var c=r[u],f=i[u],h=a[u],p=Math.sqrt(c*c+f*f+h*h);s=Math.max(s,p),l=Math.min(l,p)}e._len=o,e._normMax=s,n(t,e,{vals:[l,s],containerStr:\\\"\\\",cLetter:\\\"c\\\"})}},5453:function(t,e,r){\\\"use strict\\\";var n=r(9330).gl_cone3d,i=r(9330).gl_cone3d.createConeMesh,a=r(71828).simpleMap,o=r(81697).parseColorScale,s=r(21081).extractOpts,l=r(90060);function u(t,e){this.scene=t,this.uid=e,this.mesh=null,this.data=null}var c=u.prototype;c.handlePick=function(t){if(t.object===this.mesh){var e=t.index=t.data.index,r=this.data.x[e],n=this.data.y[e],i=this.data.z[e],a=this.data.u[e],o=this.data.v[e],s=this.data.w[e];t.traceCoordinate=[r,n,i,a,o,s,Math.sqrt(a*a+o*o+s*s)];var l=this.data.hovertext||this.data.text;return Array.isArray(l)&&void 0!==l[e]?t.textLabel=l[e]:l&&(t.textLabel=l),!0}};var f={xaxis:0,yaxis:1,zaxis:2},h={tip:1,tail:0,cm:.25,center:.5},p={tip:1,tail:1,cm:.75,center:.5};function d(t,e){var r=t.fullSceneLayout,i=t.dataScale,u={};function c(t,e){var n=r[e],o=i[f[e]];return a(t,(function(t){return n.d2l(t)*o}))}u.vectors=l(c(e.u,\\\"xaxis\\\"),c(e.v,\\\"yaxis\\\"),c(e.w,\\\"zaxis\\\"),e._len),u.positions=l(c(e.x,\\\"xaxis\\\"),c(e.y,\\\"yaxis\\\"),c(e.z,\\\"zaxis\\\"),e._len);var d=s(e);u.colormap=o(e),u.vertexIntensityBounds=[d.min/e._normMax,d.max/e._normMax],u.coneOffset=h[e.anchor],\\\"scaled\\\"===e.sizemode?u.coneSize=e.sizeref||.5:u.coneSize=e.sizeref&&e._normMax?e.sizeref/e._normMax:.5;var v=n(u),g=e.lightposition;return v.lightPosition=[g.x,g.y,g.z],v.ambient=e.lighting.ambient,v.diffuse=e.lighting.diffuse,v.specular=e.lighting.specular,v.roughness=e.lighting.roughness,v.fresnel=e.lighting.fresnel,v.opacity=e.opacity,e._pad=p[e.anchor]*v.vectorScale*v.coneScale*e._normMax,v}c.update=function(t){this.data=t;var e=d(this.scene,t);this.mesh.update(e)},c.dispose=function(){this.scene.glplot.remove(this.mesh),this.mesh.dispose()},t.exports=function(t,e){var r=t.glplot.gl,n=d(t,e),a=i(r,n),o=new u(t,e.uid);return o.mesh=a,o.data=e,a._trace=o,t.glplot.add(a),o}},91750:function(t,e,r){\\\"use strict\\\";var n=r(71828),i=r(1586),a=r(12674);t.exports=function(t,e,r,o){function s(r,i){return n.coerce(t,e,a,r,i)}var l=s(\\\"u\\\"),u=s(\\\"v\\\"),c=s(\\\"w\\\"),f=s(\\\"x\\\"),h=s(\\\"y\\\"),p=s(\\\"z\\\");l&&l.length&&u&&u.length&&c&&c.length&&f&&f.length&&h&&h.length&&p&&p.length?(s(\\\"sizeref\\\"),s(\\\"sizemode\\\"),s(\\\"anchor\\\"),s(\\\"lighting.ambient\\\"),s(\\\"lighting.diffuse\\\"),s(\\\"lighting.specular\\\"),s(\\\"lighting.roughness\\\"),s(\\\"lighting.fresnel\\\"),s(\\\"lightposition.x\\\"),s(\\\"lightposition.y\\\"),s(\\\"lightposition.z\\\"),i(t,e,o,s,{prefix:\\\"\\\",cLetter:\\\"c\\\"}),s(\\\"text\\\"),s(\\\"hovertext\\\"),s(\\\"hovertemplate\\\"),s(\\\"uhoverformat\\\"),s(\\\"vhoverformat\\\"),s(\\\"whoverformat\\\"),s(\\\"xhoverformat\\\"),s(\\\"yhoverformat\\\"),s(\\\"zhoverformat\\\"),e._length=null):e.visible=!1}},98128:function(t,e,r){\\\"use strict\\\";t.exports={moduleType:\\\"trace\\\",name:\\\"cone\\\",basePlotModule:r(58547),categories:[\\\"gl3d\\\",\\\"showLegend\\\"],attributes:r(12674),supplyDefaults:r(91750),colorbar:{min:\\\"cmin\\\",max:\\\"cmax\\\"},calc:r(31371),plot:r(5453),eventData:function(t,e){return t.norm=e.traceCoordinate[6],t},meta:{}}},70600:function(t,e,r){\\\"use strict\\\";var n=r(21606),i=r(82196),a=r(12663),o=a.axisHoverFormat,s=a.descriptionOnlyNumbers,l=r(50693),u=r(79952).P,c=r(41940),f=r(1426).extendFlat,h=r(74808),p=h.COMPARISON_OPS2,d=h.INTERVAL_OPS,v=i.line;t.exports=f({z:n.z,x:n.x,x0:n.x0,dx:n.dx,y:n.y,y0:n.y0,dy:n.dy,xperiod:n.xperiod,yperiod:n.yperiod,xperiod0:i.xperiod0,yperiod0:i.yperiod0,xperiodalignment:n.xperiodalignment,yperiodalignment:n.yperiodalignment,text:n.text,hovertext:n.hovertext,transpose:n.transpose,xtype:n.xtype,ytype:n.ytype,xhoverformat:o(\\\"x\\\"),yhoverformat:o(\\\"y\\\"),zhoverformat:o(\\\"z\\\",1),hovertemplate:n.hovertemplate,texttemplate:f({},n.texttemplate,{}),textfont:f({},n.textfont,{}),hoverongaps:n.hoverongaps,connectgaps:f({},n.connectgaps,{}),fillcolor:{valType:\\\"color\\\",editType:\\\"calc\\\"},autocontour:{valType:\\\"boolean\\\",dflt:!0,editType:\\\"calc\\\",impliedEdits:{\\\"contours.start\\\":void 0,\\\"contours.end\\\":void 0,\\\"contours.size\\\":void 0}},ncontours:{valType:\\\"integer\\\",dflt:15,min:1,editType:\\\"calc\\\"},contours:{type:{valType:\\\"enumerated\\\",values:[\\\"levels\\\",\\\"constraint\\\"],dflt:\\\"levels\\\",editType:\\\"calc\\\"},start:{valType:\\\"number\\\",dflt:null,editType:\\\"plot\\\",impliedEdits:{\\\"^autocontour\\\":!1}},end:{valType:\\\"number\\\",dflt:null,editType:\\\"plot\\\",impliedEdits:{\\\"^autocontour\\\":!1}},size:{valType:\\\"number\\\",dflt:null,min:0,editType:\\\"plot\\\",impliedEdits:{\\\"^autocontour\\\":!1}},coloring:{valType:\\\"enumerated\\\",values:[\\\"fill\\\",\\\"heatmap\\\",\\\"lines\\\",\\\"none\\\"],dflt:\\\"fill\\\",editType:\\\"calc\\\"},showlines:{valType:\\\"boolean\\\",dflt:!0,editType:\\\"plot\\\"},showlabels:{valType:\\\"boolean\\\",dflt:!1,editType:\\\"plot\\\"},labelfont:c({editType:\\\"plot\\\",colorEditType:\\\"style\\\"}),labelformat:{valType:\\\"string\\\",dflt:\\\"\\\",editType:\\\"plot\\\",description:s(\\\"contour label\\\")},operation:{valType:\\\"enumerated\\\",values:[].concat(p).concat(d),dflt:\\\"=\\\",editType:\\\"calc\\\"},value:{valType:\\\"any\\\",dflt:0,editType:\\\"calc\\\"},editType:\\\"calc\\\",impliedEdits:{autocontour:!1}},line:{color:f({},v.color,{editType:\\\"style+colorbars\\\"}),width:{valType:\\\"number\\\",min:0,editType:\\\"style+colorbars\\\"},dash:u,smoothing:f({},v.smoothing,{}),editType:\\\"plot\\\"}},l(\\\"\\\",{cLetter:\\\"z\\\",autoColorDflt:!1,editTypeOverride:\\\"calc\\\"}))},27529:function(t,e,r){\\\"use strict\\\";var n=r(21081),i=r(90757),a=r(18670),o=r(53572);t.exports=function(t,e){var r=i(t,e),s=r[0].z;a(e,s);var l,u=e.contours,c=n.extractOpts(e);if(\\\"heatmap\\\"===u.coloring&&c.auto&&!1===e.autocontour){var f=u.start,h=o(u),p=u.size||1,d=Math.floor((h-f)/p)+1;isFinite(p)||(p=1,d=1);var v=f-p/2;l=[v,v+d*p]}else l=s;return n.calc(t,e,{vals:l,cLetter:\\\"z\\\"}),r}},20083:function(t){\\\"use strict\\\";t.exports=function(t,e){var r,n=t[0],i=n.z;switch(e.type){case\\\"levels\\\":var a=Math.min(i[0][0],i[0][1]);for(r=0;r<t.length;r++){var o=t[r];o.prefixBoundary=!o.edgepaths.length&&(a>o.level||o.starts.length&&a===o.level)}break;case\\\"constraint\\\":if(n.prefixBoundary=!1,n.edgepaths.length)return;var s=n.x.length,l=n.y.length,u=-1/0,c=1/0;for(r=0;r<l;r++)c=Math.min(c,i[r][0]),c=Math.min(c,i[r][s-1]),u=Math.max(u,i[r][0]),u=Math.max(u,i[r][s-1]);for(r=1;r<s-1;r++)c=Math.min(c,i[0][r]),c=Math.min(c,i[l-1][r]),u=Math.max(u,i[0][r]),u=Math.max(u,i[l-1][r]);var f,h,p=e.value;switch(e._operation){case\\\">\\\":p>u&&(n.prefixBoundary=!0);break;case\\\"<\\\":(p<c||n.starts.length&&p===c)&&(n.prefixBoundary=!0);break;case\\\"[]\\\":f=Math.min(p[0],p[1]),((h=Math.max(p[0],p[1]))<c||f>u||n.starts.length&&h===c)&&(n.prefixBoundary=!0);break;case\\\"][\\\":f=Math.min(p[0],p[1]),h=Math.max(p[0],p[1]),f<c&&h>u&&(n.prefixBoundary=!0)}}}},90654:function(t,e,r){\\\"use strict\\\";var n=r(21081),i=r(86068),a=r(53572);t.exports={min:\\\"zmin\\\",max:\\\"zmax\\\",calc:function(t,e,r){var o=e.contours,s=e.line,l=o.size||1,u=o.coloring,c=i(e,{isColorbar:!0});if(\\\"heatmap\\\"===u){var f=n.extractOpts(e);r._fillgradient=f.reversescale?n.flipScale(f.colorscale):f.colorscale,r._zrange=[f.min,f.max]}else\\\"fill\\\"===u&&(r._fillcolor=c);r._line={color:\\\"lines\\\"===u?c:s.color,width:!1!==o.showlines?s.width:0,dash:s.dash},r._levels={start:o.start,end:a(o),size:l}}}},36914:function(t){\\\"use strict\\\";t.exports={BOTTOMSTART:[1,9,13,104,713],TOPSTART:[4,6,7,104,713],LEFTSTART:[8,12,14,208,1114],RIGHTSTART:[2,3,11,208,1114],NEWDELTA:[null,[-1,0],[0,-1],[-1,0],[1,0],null,[0,-1],[-1,0],[0,1],[0,1],null,[0,1],[1,0],[1,0],[0,-1]],CHOOSESADDLE:{104:[4,1],208:[2,8],713:[7,13],1114:[11,14]},SADDLEREMAINDER:{1:4,2:8,4:1,7:13,8:2,11:14,13:7,14:11},LABELDISTANCE:2,LABELINCREASE:10,LABELMIN:3,LABELMAX:10,LABELOPTIMIZER:{EDGECOST:1,ANGLECOST:1,NEIGHBORCOST:5,SAMELEVELFACTOR:10,SAMELEVELDISTANCE:5,MAXCOST:100,INITIALSEARCHPOINTS:10,ITERATIONS:5}}},83179:function(t,e,r){\\\"use strict\\\";var n=r(92770),i=r(14523),a=r(7901),o=a.addOpacity,s=a.opacity,l=r(74808),u=l.CONSTRAINT_REDUCTION,c=l.COMPARISON_OPS2;t.exports=function(t,e,r,a,l,f){var h,p,d,v=e.contours,g=r(\\\"contours.operation\\\");v._operation=u[g],function(t,e){var r;-1===c.indexOf(e.operation)?(t(\\\"contours.value\\\",[0,1]),Array.isArray(e.value)?e.value.length>2?e.value=e.value.slice(2):0===e.length?e.value=[0,1]:e.length<2?(r=parseFloat(e.value[0]),e.value=[r,r+1]):e.value=[parseFloat(e.value[0]),parseFloat(e.value[1])]:n(e.value)&&(r=parseFloat(e.value),e.value=[r,r+1])):(t(\\\"contours.value\\\",0),n(e.value)||(Array.isArray(e.value)?e.value=parseFloat(e.value[0]):e.value=0))}(r,v),\\\"=\\\"===g?h=v.showlines=!0:(h=r(\\\"contours.showlines\\\"),d=r(\\\"fillcolor\\\",o((t.line||{}).color||l,.5))),h&&(p=r(\\\"line.color\\\",d&&s(d)?o(e.fillcolor,1):l),r(\\\"line.width\\\",2),r(\\\"line.dash\\\")),r(\\\"line.smoothing\\\"),i(r,a,p,f)}},64237:function(t,e,r){\\\"use strict\\\";var n=r(74808),i=r(92770);function a(t,e){var r,a=Array.isArray(e);function o(t){return i(t)?+t:null}return-1!==n.COMPARISON_OPS2.indexOf(t)?r=o(a?e[0]:e):-1!==n.INTERVAL_OPS.indexOf(t)?r=a?[o(e[0]),o(e[1])]:[o(e),o(e)]:-1!==n.SET_OPS.indexOf(t)&&(r=a?e.map(o):[o(e)]),r}function o(t){return function(e){e=a(t,e);var r=Math.min(e[0],e[1]),n=Math.max(e[0],e[1]);return{start:r,end:n,size:n-r}}}function s(t){return function(e){return{start:e=a(t,e),end:1/0,size:1/0}}}t.exports={\\\"[]\\\":o(\\\"[]\\\"),\\\"][\\\":o(\\\"][\\\"),\\\">\\\":s(\\\">\\\"),\\\"<\\\":s(\\\"<\\\"),\\\"=\\\":s(\\\"=\\\")}},67217:function(t){\\\"use strict\\\";t.exports=function(t,e,r,n){var i=n(\\\"contours.start\\\"),a=n(\\\"contours.end\\\"),o=!1===i||!1===a,s=r(\\\"contours.size\\\");!(o?e.autocontour=!0:r(\\\"autocontour\\\",!1))&&s||r(\\\"ncontours\\\")}},84857:function(t,e,r){\\\"use strict\\\";var n=r(71828);function i(t){return n.extendFlat({},t,{edgepaths:n.extendDeep([],t.edgepaths),paths:n.extendDeep([],t.paths),starts:n.extendDeep([],t.starts)})}t.exports=function(t,e){var r,a,o,s=function(t){return t.reverse()},l=function(t){return t};switch(e){case\\\"=\\\":case\\\"<\\\":return t;case\\\">\\\":for(1!==t.length&&n.warn(\\\"Contour data invalid for the specified inequality operation.\\\"),a=t[0],r=0;r<a.edgepaths.length;r++)a.edgepaths[r]=s(a.edgepaths[r]);for(r=0;r<a.paths.length;r++)a.paths[r]=s(a.paths[r]);for(r=0;r<a.starts.length;r++)a.starts[r]=s(a.starts[r]);return t;case\\\"][\\\":var u=s;s=l,l=u;case\\\"[]\\\":for(2!==t.length&&n.warn(\\\"Contour data invalid for the specified inequality range operation.\\\"),a=i(t[0]),o=i(t[1]),r=0;r<a.edgepaths.length;r++)a.edgepaths[r]=s(a.edgepaths[r]);for(r=0;r<a.paths.length;r++)a.paths[r]=s(a.paths[r]);for(r=0;r<a.starts.length;r++)a.starts[r]=s(a.starts[r]);for(;o.edgepaths.length;)a.edgepaths.push(l(o.edgepaths.shift()));for(;o.paths.length;)a.paths.push(l(o.paths.shift()));for(;o.starts.length;)a.starts.push(l(o.starts.shift()));return[a]}}},13031:function(t,e,r){\\\"use strict\\\";var n=r(71828),i=r(67684),a=r(73927),o=r(83179),s=r(67217),l=r(8724),u=r(58623),c=r(70600);t.exports=function(t,e,r,f){function h(r,i){return n.coerce(t,e,c,r,i)}if(i(t,e,h,f)){a(t,e,f,h),h(\\\"xhoverformat\\\"),h(\\\"yhoverformat\\\"),h(\\\"text\\\"),h(\\\"hovertext\\\"),h(\\\"hoverongaps\\\"),h(\\\"hovertemplate\\\");var p=\\\"constraint\\\"===h(\\\"contours.type\\\");h(\\\"connectgaps\\\",n.isArray1D(e.z)),p?o(t,e,h,f,r):(s(t,e,h,(function(r){return n.coerce2(t,e,c,r)})),l(t,e,h,f)),e.contours&&\\\"heatmap\\\"===e.contours.coloring&&u(h,f)}else e.visible=!1}},87558:function(t,e,r){\\\"use strict\\\";var n=r(71828),i=r(64237),a=r(53572);t.exports=function(t,e,r){for(var o=\\\"constraint\\\"===t.type?i[t._operation](t.value):t,s=o.size,l=[],u=a(o),c=r.trace._carpetTrace,f=c?{xaxis:c.aaxis,yaxis:c.baxis,x:r.a,y:r.b}:{xaxis:e.xaxis,yaxis:e.yaxis,x:r.x,y:r.y},h=o.start;h<u;h+=s)if(l.push(n.extendFlat({level:h,crossings:{},starts:[],edgepaths:[],paths:[],z:r.z,smoothing:r.trace.line.smoothing},f)),l.length>1e3){n.warn(\\\"Too many contours, clipping at 1000\\\",t);break}return l}},53572:function(t){\\\"use strict\\\";t.exports=function(t){return t.end+t.size/1e6}},81696:function(t,e,r){\\\"use strict\\\";var n=r(71828),i=r(36914);function a(t,e,r,n){return Math.abs(t[0]-e[0])<r&&Math.abs(t[1]-e[1])<n}function o(t,e,r,o,l){var u,c=e.join(\\\",\\\"),f=t.crossings[c],h=function(t,e,r){var n=0,a=0;return t>20&&e?208===t||1114===t?n=0===r[0]?1:-1:a=0===r[1]?1:-1:-1!==i.BOTTOMSTART.indexOf(t)?a=1:-1!==i.LEFTSTART.indexOf(t)?n=1:-1!==i.TOPSTART.indexOf(t)?a=-1:n=-1,[n,a]}(f,r,e),p=[s(t,e,[-h[0],-h[1]])],d=t.z.length,v=t.z[0].length,g=e.slice(),y=h.slice();for(u=0;u<1e4;u++){if(f>20?(f=i.CHOOSESADDLE[f][(h[0]||h[1])<0?0:1],t.crossings[c]=i.SADDLEREMAINDER[f]):delete t.crossings[c],!(h=i.NEWDELTA[f])){n.log(\\\"Found bad marching index:\\\",f,e,t.level);break}p.push(s(t,e,h)),e[0]+=h[0],e[1]+=h[1],c=e.join(\\\",\\\"),a(p[p.length-1],p[p.length-2],o,l)&&p.pop();var m=h[0]&&(e[0]<0||e[0]>v-2)||h[1]&&(e[1]<0||e[1]>d-2);if(e[0]===g[0]&&e[1]===g[1]&&h[0]===y[0]&&h[1]===y[1]||r&&m)break;f=t.crossings[c]}1e4===u&&n.log(\\\"Infinite loop in contour?\\\");var x,b,_,w,T,k,A,M,S,E,L,C,P,O,I,D=a(p[0],p[p.length-1],o,l),z=0,R=.2*t.smoothing,F=[],B=0;for(u=1;u<p.length;u++)C=p[u],P=p[u-1],void 0,void 0,O=C[2]-P[2],I=C[3]-P[3],z+=A=Math.sqrt(O*O+I*I),F.push(A);var N=z/F.length*R;function j(t){return p[t%p.length]}for(u=p.length-2;u>=B;u--)if((x=F[u])<N){for(_=0,b=u-1;b>=B&&x+F[b]<N;b--)x+=F[b];if(D&&u===p.length-2)for(_=0;_<b&&x+F[_]<N;_++)x+=F[_];T=u-b+_+1,k=Math.floor((u+b+_+2)/2),w=D||u!==p.length-2?D||-1!==b?T%2?j(k):[(j(k)[0]+j(k+1)[0])/2,(j(k)[1]+j(k+1)[1])/2]:p[0]:p[p.length-1],p.splice(b+1,u-b+1,w),u=b+1,_&&(B=_),D&&(u===p.length-2?p[_]=p[p.length-1]:0===u&&(p[p.length-1]=p[0]))}for(p.splice(0,B),u=0;u<p.length;u++)p[u].length=2;if(!(p.length<2))if(D)p.pop(),t.paths.push(p);else{r||n.log(\\\"Unclosed interior contour?\\\",t.level,g.join(\\\",\\\"),p.join(\\\"L\\\"));var U=!1;for(M=0;M<t.edgepaths.length;M++)if(E=t.edgepaths[M],!U&&a(E[0],p[p.length-1],o,l)){p.pop(),U=!0;var V=!1;for(S=0;S<t.edgepaths.length;S++)if(a((L=t.edgepaths[S])[L.length-1],p[0],o,l)){V=!0,p.shift(),t.edgepaths.splice(M,1),S===M?t.paths.push(p.concat(L)):(S>M&&S--,t.edgepaths[S]=L.concat(p,E));break}V||(t.edgepaths[M]=p.concat(E))}for(M=0;M<t.edgepaths.length&&!U;M++)a((E=t.edgepaths[M])[E.length-1],p[0],o,l)&&(p.shift(),t.edgepaths[M]=E.concat(p),U=!0);U||t.edgepaths.push(p)}}function s(t,e,r){var n=e[0]+Math.max(r[0],0),i=e[1]+Math.max(r[1],0),a=t.z[i][n],o=t.xaxis,s=t.yaxis;if(r[1]){var l=(t.level-a)/(t.z[i][n+1]-a),u=(1!==l?(1-l)*o.c2l(t.x[n]):0)+(0!==l?l*o.c2l(t.x[n+1]):0);return[o.c2p(o.l2c(u),!0),s.c2p(t.y[i],!0),n+l,i]}var c=(t.level-a)/(t.z[i+1][n]-a),f=(1!==c?(1-c)*s.c2l(t.y[i]):0)+(0!==c?c*s.c2l(t.y[i+1]):0);return[o.c2p(t.x[n],!0),s.c2p(s.l2c(f),!0),n,i+c]}t.exports=function(t,e,r){var i,a,s,l;for(e=e||.01,r=r||.01,a=0;a<t.length;a++){for(s=t[a],l=0;l<s.starts.length;l++)o(s,s.starts[l],\\\"edge\\\",e,r);for(i=0;Object.keys(s.crossings).length&&i<1e4;)i++,o(s,Object.keys(s.crossings)[0].split(\\\",\\\").map(Number),void 0,e,r);1e4===i&&n.log(\\\"Infinite loop in contour?\\\")}}},52421:function(t,e,r){\\\"use strict\\\";var n=r(7901),i=r(46248);t.exports=function(t,e,r,a,o){o||(o={}),o.isContour=!0;var s=i(t,e,r,a,o);return s&&s.forEach((function(t){var e=t.trace;\\\"constraint\\\"===e.contours.type&&(e.fillcolor&&n.opacity(e.fillcolor)?t.color=n.addOpacity(e.fillcolor,1):e.contours.showlines&&n.opacity(e.line.color)&&(t.color=n.addOpacity(e.line.color,1)))})),s}},99442:function(t,e,r){\\\"use strict\\\";t.exports={attributes:r(70600),supplyDefaults:r(13031),calc:r(27529),plot:r(29854).plot,style:r(84426),colorbar:r(90654),hoverPoints:r(52421),moduleType:\\\"trace\\\",name:\\\"contour\\\",basePlotModule:r(93612),categories:[\\\"cartesian\\\",\\\"svg\\\",\\\"2dMap\\\",\\\"contour\\\",\\\"showLegend\\\"],meta:{}}},14523:function(t,e,r){\\\"use strict\\\";var n=r(71828);t.exports=function(t,e,r,i){if(i||(i={}),t(\\\"contours.showlabels\\\")){var a=e.font;n.coerceFont(t,\\\"contours.labelfont\\\",{family:a.family,size:a.size,color:r}),t(\\\"contours.labelformat\\\")}!1!==i.hasHover&&t(\\\"zhoverformat\\\")}},86068:function(t,e,r){\\\"use strict\\\";var n=r(39898),i=r(21081),a=r(53572);t.exports=function(t){var e=t.contours,r=e.start,o=a(e),s=e.size||1,l=Math.floor((o-r)/s)+1,u=\\\"lines\\\"===e.coloring?0:1,c=i.extractOpts(t);isFinite(s)||(s=1,l=1);var f,h,p=c.reversescale?i.flipScale(c.colorscale):c.colorscale,d=p.length,v=new Array(d),g=new Array(d);if(\\\"heatmap\\\"===e.coloring){var y=c.min,m=c.max;for(h=0;h<d;h++)f=p[h],v[h]=f[0]*(m-y)+y,g[h]=f[1];var x=n.extent([y,m,e.start,e.start+s*(l-1)]),b=x[y<m?0:1],_=x[y<m?1:0];b!==y&&(v.splice(0,0,b),g.splice(0,0,g[0])),_!==m&&(v.push(_),g.push(g[g.length-1]))}else for(h=0;h<d;h++)f=p[h],v[h]=(f[0]*(l+u-1)-u/2)*s+r,g[h]=f[1];return i.makeColorScaleFunc({domain:v,range:g},{noNumericCheck:!0})}},87678:function(t,e,r){\\\"use strict\\\";var n=r(36914);function i(t,e){var r=(e[0][0]>t?0:1)+(e[0][1]>t?0:2)+(e[1][1]>t?0:4)+(e[1][0]>t?0:8);return 5===r||10===r?t>(e[0][0]+e[0][1]+e[1][0]+e[1][1])/4?5===r?713:1114:5===r?104:208:15===r?0:r}t.exports=function(t){var e,r,a,o,s,l,u,c,f,h=t[0].z,p=h.length,d=h[0].length,v=2===p||2===d;for(r=0;r<p-1;r++)for(o=[],0===r&&(o=o.concat(n.BOTTOMSTART)),r===p-2&&(o=o.concat(n.TOPSTART)),e=0;e<d-1;e++)for(a=o.slice(),0===e&&(a=a.concat(n.LEFTSTART)),e===d-2&&(a=a.concat(n.RIGHTSTART)),s=e+\\\",\\\"+r,l=[[h[r][e],h[r][e+1]],[h[r+1][e],h[r+1][e+1]]],f=0;f<t.length;f++)(u=i((c=t[f]).level,l))&&(c.crossings[s]=u,-1!==a.indexOf(u)&&(c.starts.push([e,r]),v&&-1!==a.indexOf(u,a.indexOf(u)+1)&&c.starts.push([e,r])))}},29854:function(t,e,r){\\\"use strict\\\";var n=r(39898),i=r(71828),a=r(91424),o=r(21081),s=r(63893),l=r(89298),u=r(21994),c=r(50347),f=r(87678),h=r(81696),p=r(87558),d=r(84857),v=r(20083),g=r(36914),y=g.LABELOPTIMIZER;function m(t,e){var r,n,o,s,l,u,c,f=\\\"\\\",h=0,p=t.edgepaths.map((function(t,e){return e})),d=!0;function v(t){return Math.abs(t[1]-e[2][1])<.01}function g(t){return Math.abs(t[0]-e[0][0])<.01}function y(t){return Math.abs(t[0]-e[2][0])<.01}for(;p.length;){for(u=a.smoothopen(t.edgepaths[h],t.smoothing),f+=d?u:u.replace(/^M/,\\\"L\\\"),p.splice(p.indexOf(h),1),r=t.edgepaths[h][t.edgepaths[h].length-1],s=-1,o=0;o<4;o++){if(!r){i.log(\\\"Missing end?\\\",h,t);break}for(c=r,Math.abs(c[1]-e[0][1])<.01&&!y(r)?n=e[1]:g(r)?n=e[0]:v(r)?n=e[3]:y(r)&&(n=e[2]),l=0;l<t.edgepaths.length;l++){var m=t.edgepaths[l][0];Math.abs(r[0]-n[0])<.01?Math.abs(r[0]-m[0])<.01&&(m[1]-r[1])*(n[1]-m[1])>=0&&(n=m,s=l):Math.abs(r[1]-n[1])<.01?Math.abs(r[1]-m[1])<.01&&(m[0]-r[0])*(n[0]-m[0])>=0&&(n=m,s=l):i.log(\\\"endpt to newendpt is not vert. or horz.\\\",r,n,m)}if(r=n,s>=0)break;f+=\\\"L\\\"+n}if(s===t.edgepaths.length){i.log(\\\"unclosed perimeter path\\\");break}h=s,(d=-1===p.indexOf(h))&&(h=p[0],f+=\\\"Z\\\")}for(h=0;h<t.paths.length;h++)f+=a.smoothclosed(t.paths[h],t.smoothing);return f}function x(t,e,r,n){var a=e.width/2,o=e.height/2,s=t.x,l=t.y,u=t.theta,c=Math.cos(u)*a,f=Math.sin(u)*a,h=(s>n.center?n.right-s:s-n.left)/(c+Math.abs(Math.sin(u)*o)),p=(l>n.middle?n.bottom-l:l-n.top)/(Math.abs(f)+Math.cos(u)*o);if(h<1||p<1)return 1/0;var d=y.EDGECOST*(1/(h-1)+1/(p-1));d+=y.ANGLECOST*u*u;for(var v=s-c,g=l-f,m=s+c,x=l+f,b=0;b<r.length;b++){var _=r[b],w=Math.cos(_.theta)*_.width/2,T=Math.sin(_.theta)*_.width/2,k=2*i.segmentDistance(v,g,m,x,_.x-w,_.y-T,_.x+w,_.y+T)/(e.height+_.height),A=_.level===e.level,M=A?y.SAMELEVELDISTANCE:1;if(k<=M)return 1/0;d+=y.NEIGHBORCOST*(A?y.SAMELEVELFACTOR:1)/(k-M)}return d}function b(t){var e,r,n=t.trace._emptypoints,i=[],a=t.z.length,o=t.z[0].length,s=[];for(e=0;e<o;e++)s.push(1);for(e=0;e<a;e++)i.push(s.slice());for(e=0;e<n.length;e++)i[(r=n[e])[0]][r[1]]=0;return t.zmask=i,i}e.plot=function(t,r,o,s){var l=r.xaxis,u=r.yaxis;i.makeTraceGroups(s,o,\\\"contour\\\").each((function(o){var s=n.select(this),y=o[0],x=y.trace,_=y.x,w=y.y,T=x.contours,k=p(T,r,y),A=i.ensureSingle(s,\\\"g\\\",\\\"heatmapcoloring\\\"),M=[];\\\"heatmap\\\"===T.coloring&&(M=[o]),c(t,r,M,A),f(k),h(k);var S=l.c2p(_[0],!0),E=l.c2p(_[_.length-1],!0),L=u.c2p(w[0],!0),C=u.c2p(w[w.length-1],!0),P=[[S,C],[E,C],[E,L],[S,L]],O=k;\\\"constraint\\\"===T.type&&(O=d(k,T._operation)),function(t,e,r){var n=i.ensureSingle(t,\\\"g\\\",\\\"contourbg\\\").selectAll(\\\"path\\\").data(\\\"fill\\\"===r.coloring?[0]:[]);n.enter().append(\\\"path\\\"),n.exit().remove(),n.attr(\\\"d\\\",\\\"M\\\"+e.join(\\\"L\\\")+\\\"Z\\\").style(\\\"stroke\\\",\\\"none\\\")}(s,P,T),function(t,e,r,a){var o=\\\"fill\\\"===a.coloring||\\\"constraint\\\"===a.type&&\\\"=\\\"!==a._operation,s=\\\"M\\\"+r.join(\\\"L\\\")+\\\"Z\\\";o&&v(e,a);var l=i.ensureSingle(t,\\\"g\\\",\\\"contourfill\\\").selectAll(\\\"path\\\").data(o?e:[]);l.enter().append(\\\"path\\\"),l.exit().remove(),l.each((function(t){var e=(t.prefixBoundary?s:\\\"\\\")+m(t,r);e?n.select(this).attr(\\\"d\\\",e).style(\\\"stroke\\\",\\\"none\\\"):n.select(this).remove()}))}(s,O,P,T),function(t,r,o,s,l){var u=o._context.staticPlot,c=i.ensureSingle(t,\\\"g\\\",\\\"contourlines\\\"),f=!1!==l.showlines,h=l.showlabels,p=f&&h,d=e.createLines(c,f||h,r,u),v=e.createLineClip(c,p,o,s.trace.uid),y=t.selectAll(\\\"g.contourlabels\\\").data(h?[0]:[]);if(y.exit().remove(),y.enter().append(\\\"g\\\").classed(\\\"contourlabels\\\",!0),h){var m=[],x=[];i.clearLocationCache();var b=e.labelFormatter(o,s),_=a.tester.append(\\\"text\\\").attr(\\\"data-notex\\\",1).call(a.font,l.labelfont),w=r[0].xaxis,T=r[0].yaxis,k=w._length,A=T._length,M=w.range,S=T.range,E=i.aggNums(Math.min,null,s.x),L=i.aggNums(Math.max,null,s.x),C=i.aggNums(Math.min,null,s.y),P=i.aggNums(Math.max,null,s.y),O=Math.max(w.c2p(E,!0),0),I=Math.min(w.c2p(L,!0),k),D=Math.max(T.c2p(P,!0),0),z=Math.min(T.c2p(C,!0),A),R={};M[0]<M[1]?(R.left=O,R.right=I):(R.left=I,R.right=O),S[0]<S[1]?(R.top=D,R.bottom=z):(R.top=z,R.bottom=D),R.middle=(R.top+R.bottom)/2,R.center=(R.left+R.right)/2,m.push([[R.left,R.top],[R.right,R.top],[R.right,R.bottom],[R.left,R.bottom]]);var F=Math.sqrt(k*k+A*A),B=g.LABELDISTANCE*F/Math.max(1,r.length/g.LABELINCREASE);d.each((function(t){var r=e.calcTextOpts(t.level,b,_,o);n.select(this).selectAll(\\\"path\\\").each((function(){var t=i.getVisibleSegment(this,R,r.height/2);if(t&&!(t.len<(r.width+r.height)*g.LABELMIN))for(var n=Math.min(Math.ceil(t.len/B),g.LABELMAX),a=0;a<n;a++){var o=e.findBestTextLocation(this,t,r,x,R);if(!o)break;e.addLabelData(o,r,x,m)}}))})),_.remove(),e.drawLabels(y,x,o,v,p?m:null)}h&&!f&&d.remove()}(s,k,t,y,T),function(t,e,r,n,o){var s=n.trace,l=r._fullLayout._clips,u=\\\"clip\\\"+s.uid,c=l.selectAll(\\\"#\\\"+u).data(s.connectgaps?[]:[0]);if(c.enter().append(\\\"clipPath\\\").classed(\\\"contourclip\\\",!0).attr(\\\"id\\\",u),c.exit().remove(),!1===s.connectgaps){var p={level:.9,crossings:{},starts:[],edgepaths:[],paths:[],xaxis:e.xaxis,yaxis:e.yaxis,x:n.x,y:n.y,z:b(n),smoothing:0};f([p]),h([p]),v([p],{type:\\\"levels\\\"}),i.ensureSingle(c,\\\"path\\\",\\\"\\\").attr(\\\"d\\\",(p.prefixBoundary?\\\"M\\\"+o.join(\\\"L\\\")+\\\"Z\\\":\\\"\\\")+m(p,o))}else u=null;a.setClipUrl(t,u,r)}(s,r,t,y,P)}))},e.createLines=function(t,e,r,n){var i=r[0].smoothing,o=t.selectAll(\\\"g.contourlevel\\\").data(e?r:[]);if(o.exit().remove(),o.enter().append(\\\"g\\\").classed(\\\"contourlevel\\\",!0),e){var s=o.selectAll(\\\"path.openline\\\").data((function(t){return t.pedgepaths||t.edgepaths}));s.exit().remove(),s.enter().append(\\\"path\\\").classed(\\\"openline\\\",!0),s.attr(\\\"d\\\",(function(t){return a.smoothopen(t,i)})).style(\\\"stroke-miterlimit\\\",1).style(\\\"vector-effect\\\",n?\\\"none\\\":\\\"non-scaling-stroke\\\");var l=o.selectAll(\\\"path.closedline\\\").data((function(t){return t.ppaths||t.paths}));l.exit().remove(),l.enter().append(\\\"path\\\").classed(\\\"closedline\\\",!0),l.attr(\\\"d\\\",(function(t){return a.smoothclosed(t,i)})).style(\\\"stroke-miterlimit\\\",1).style(\\\"vector-effect\\\",n?\\\"none\\\":\\\"non-scaling-stroke\\\")}return o},e.createLineClip=function(t,e,r,n){var i=e?\\\"clipline\\\"+n:null,o=r._fullLayout._clips.selectAll(\\\"#\\\"+i).data(e?[0]:[]);return o.exit().remove(),o.enter().append(\\\"clipPath\\\").classed(\\\"contourlineclip\\\",!0).attr(\\\"id\\\",i),a.setClipUrl(t,i,r),o},e.labelFormatter=function(t,e){var r=t._fullLayout,n=e.trace,i=n.contours,a={type:\\\"linear\\\",_id:\\\"ycontour\\\",showexponent:\\\"all\\\",exponentformat:\\\"B\\\"};if(i.labelformat)a.tickformat=i.labelformat,u(a,r);else{var s=o.extractOpts(n);if(s&&s.colorbar&&s.colorbar._axis)a=s.colorbar._axis;else{if(\\\"constraint\\\"===i.type){var c=i.value;Array.isArray(c)?a.range=[c[0],c[c.length-1]]:a.range=[c,c]}else a.range=[i.start,i.end],a.nticks=(i.end-i.start)/i.size;a.range[0]===a.range[1]&&(a.range[1]+=a.range[0]||1),a.nticks||(a.nticks=1e3),u(a,r),l.prepTicks(a),a._tmin=null,a._tmax=null}}return function(t){return l.tickText(a,t).text}},e.calcTextOpts=function(t,e,r,n){var i=e(t);r.text(i).call(s.convertToTspans,n);var o=r.node(),l=a.bBox(o,!0);return{text:i,width:l.width,height:l.height,fontSize:+o.style[\\\"font-size\\\"].replace(\\\"px\\\",\\\"\\\"),level:t,dy:(l.top+l.bottom)/2}},e.findBestTextLocation=function(t,e,r,n,a){var o,s,l,u,c,f=r.width;e.isClosed?(s=e.len/y.INITIALSEARCHPOINTS,o=e.min+s/2,l=e.max):(s=(e.len-f)/(y.INITIALSEARCHPOINTS+1),o=e.min+s+f/2,l=e.max-(s+f)/2);for(var h=1/0,p=0;p<y.ITERATIONS;p++){for(var d=o;d<l;d+=s){var v=i.getTextLocation(t,e.total,d,f),g=x(v,r,n,a);g<h&&(h=g,c=v,u=d)}if(h>2*y.MAXCOST)break;p&&(s/=2),l=(o=u-s/2)+1.5*s}if(h<=y.MAXCOST)return c},e.addLabelData=function(t,e,r,n){var i=e.fontSize,a=e.width+i/3,o=Math.max(0,e.height-i/3),s=t.x,l=t.y,u=t.theta,c=Math.sin(u),f=Math.cos(u),h=function(t,e){return[s+t*f-e*c,l+t*c+e*f]},p=[h(-a/2,-o/2),h(-a/2,o/2),h(a/2,o/2),h(a/2,-o/2)];r.push({text:e.text,x:s,y:l,dy:e.dy,theta:u,level:e.level,width:a,height:o}),n.push(p)},e.drawLabels=function(t,e,r,a,o){var l=t.selectAll(\\\"text\\\").data(e,(function(t){return t.text+\\\",\\\"+t.x+\\\",\\\"+t.y+\\\",\\\"+t.theta}));if(l.exit().remove(),l.enter().append(\\\"text\\\").attr({\\\"data-notex\\\":1,\\\"text-anchor\\\":\\\"middle\\\"}).each((function(t){var e=t.x+Math.sin(t.theta)*t.dy,i=t.y-Math.cos(t.theta)*t.dy;n.select(this).text(t.text).attr({x:e,y:i,transform:\\\"rotate(\\\"+180*t.theta/Math.PI+\\\" \\\"+e+\\\" \\\"+i+\\\")\\\"}).call(s.convertToTspans,r)})),o){for(var u=\\\"\\\",c=0;c<o.length;c++)u+=\\\"M\\\"+o[c].join(\\\"L\\\")+\\\"Z\\\";i.ensureSingle(a,\\\"path\\\",\\\"\\\").attr(\\\"d\\\",u)}}},18670:function(t,e,r){\\\"use strict\\\";var n=r(89298),i=r(71828);function a(t,e,r){var i={type:\\\"linear\\\",range:[t,e]};return n.autoTicks(i,(e-t)/(r||15)),i}t.exports=function(t,e){var r=t.contours;if(t.autocontour){var o=t.zmin,s=t.zmax;(t.zauto||void 0===o)&&(o=i.aggNums(Math.min,null,e)),(t.zauto||void 0===s)&&(s=i.aggNums(Math.max,null,e));var l=a(o,s,t.ncontours);r.size=l.dtick,r.start=n.tickFirst(l),l.range.reverse(),r.end=n.tickFirst(l),r.start===o&&(r.start+=r.size),r.end===s&&(r.end-=r.size),r.start>r.end&&(r.start=r.end=(r.start+r.end)/2),t._input.contours||(t._input.contours={}),i.extendFlat(t._input.contours,{start:r.start,end:r.end,size:r.size}),t._input.autocontour=!0}else if(\\\"constraint\\\"!==r.type){var u,c=r.start,f=r.end,h=t._input.contours;c>f&&(r.start=h.start=f,f=r.end=h.end=c,c=r.start),r.size>0||(u=c===f?1:a(c,f,t.ncontours).dtick,h.size=r.size=u)}}},84426:function(t,e,r){\\\"use strict\\\";var n=r(39898),i=r(91424),a=r(70035),o=r(86068);t.exports=function(t){var e=n.select(t).selectAll(\\\"g.contour\\\");e.style(\\\"opacity\\\",(function(t){return t[0].trace.opacity})),e.each((function(t){var e=n.select(this),r=t[0].trace,a=r.contours,s=r.line,l=a.size||1,u=a.start,c=\\\"constraint\\\"===a.type,f=!c&&\\\"lines\\\"===a.coloring,h=!c&&\\\"fill\\\"===a.coloring,p=f||h?o(r):null;e.selectAll(\\\"g.contourlevel\\\").each((function(t){n.select(this).selectAll(\\\"path\\\").call(i.lineGroupStyle,s.width,f?p(t.level):s.color,s.dash)}));var d=a.labelfont;if(e.selectAll(\\\"g.contourlabels text\\\").each((function(t){i.font(n.select(this),{family:d.family,size:d.size,color:d.color||(f?p(t.level):s.color)})})),c)e.selectAll(\\\"g.contourfill path\\\").style(\\\"fill\\\",r.fillcolor);else if(h){var v;e.selectAll(\\\"g.contourfill path\\\").style(\\\"fill\\\",(function(t){return void 0===v&&(v=t.level),p(t.level+.5*l)})),void 0===v&&(v=u),e.selectAll(\\\"g.contourbg path\\\").style(\\\"fill\\\",p(v-.5*l))}})),a(t)}},8724:function(t,e,r){\\\"use strict\\\";var n=r(1586),i=r(14523);t.exports=function(t,e,r,a,o){var s,l=r(\\\"contours.coloring\\\"),u=\\\"\\\";\\\"fill\\\"===l&&(s=r(\\\"contours.showlines\\\")),!1!==s&&(\\\"lines\\\"!==l&&(u=r(\\\"line.color\\\",\\\"#000\\\")),r(\\\"line.width\\\",.5),r(\\\"line.dash\\\")),\\\"none\\\"!==l&&(!0!==t.showlegend&&(e.showlegend=!1),e._dfltShowLegend=!1,n(t,e,a,r,{prefix:\\\"\\\",cLetter:\\\"z\\\"})),r(\\\"line.smoothing\\\"),i(r,a,u,o)}},88085:function(t,e,r){\\\"use strict\\\";var n=r(21606),i=r(70600),a=r(50693),o=r(1426).extendFlat,s=i.contours;t.exports=o({carpet:{valType:\\\"string\\\",editType:\\\"calc\\\"},z:n.z,a:n.x,a0:n.x0,da:n.dx,b:n.y,b0:n.y0,db:n.dy,text:n.text,hovertext:n.hovertext,transpose:n.transpose,atype:n.xtype,btype:n.ytype,fillcolor:i.fillcolor,autocontour:i.autocontour,ncontours:i.ncontours,contours:{type:s.type,start:s.start,end:s.end,size:s.size,coloring:{valType:\\\"enumerated\\\",values:[\\\"fill\\\",\\\"lines\\\",\\\"none\\\"],dflt:\\\"fill\\\",editType:\\\"calc\\\"},showlines:s.showlines,showlabels:s.showlabels,labelfont:s.labelfont,labelformat:s.labelformat,operation:s.operation,value:s.value,editType:\\\"calc\\\",impliedEdits:{autocontour:!1}},line:{color:i.line.color,width:i.line.width,dash:i.line.dash,smoothing:i.line.smoothing,editType:\\\"plot\\\"},transforms:void 0},a(\\\"\\\",{cLetter:\\\"z\\\",autoColorDflt:!1}))},59885:function(t,e,r){\\\"use strict\\\";var n=r(78803),i=r(71828),a=r(68296),o=r(4742),s=r(824),l=r(43907),u=r(70769),c=r(75005),f=r(22882),h=r(18670);t.exports=function(t,e){var r=e._carpetTrace=f(t,e);if(r&&r.visible&&\\\"legendonly\\\"!==r.visible){if(!e.a||!e.b){var p=t.data[r.index],d=t.data[e.index];d.a||(d.a=p.a),d.b||(d.b=p.b),c(d,e,e._defaultColor,t._fullLayout)}var v=function(t,e){var r,c,f,h,p,d,v,g=e._carpetTrace,y=g.aaxis,m=g.baxis;y._minDtick=0,m._minDtick=0,i.isArray1D(e.z)&&a(e,y,m,\\\"a\\\",\\\"b\\\",[\\\"z\\\"]),r=e._a=e._a||e.a,h=e._b=e._b||e.b,r=r?y.makeCalcdata(e,\\\"_a\\\"):[],h=h?m.makeCalcdata(e,\\\"_b\\\"):[],c=e.a0||0,f=e.da||1,p=e.b0||0,d=e.db||1,v=e._z=o(e._z||e.z,e.transpose),e._emptypoints=l(v),s(v,e._emptypoints);var x=i.maxRowLength(v),b=\\\"scaled\\\"===e.xtype?\\\"\\\":r,_=u(e,b,c,f,x,y),w=\\\"scaled\\\"===e.ytype?\\\"\\\":h,T={a:_,b:u(e,w,p,d,v.length,m),z:v};return\\\"levels\\\"===e.contours.type&&\\\"none\\\"!==e.contours.coloring&&n(t,e,{vals:v,containerStr:\\\"\\\",cLetter:\\\"z\\\"}),[T]}(t,e);return h(e,e._z),v}}},75005:function(t,e,r){\\\"use strict\\\";var n=r(71828),i=r(67684),a=r(88085),o=r(83179),s=r(67217),l=r(8724);t.exports=function(t,e,r,u){function c(r,i){return n.coerce(t,e,a,r,i)}if(c(\\\"carpet\\\"),t.a&&t.b){if(!i(t,e,c,u,\\\"a\\\",\\\"b\\\"))return void(e.visible=!1);c(\\\"text\\\"),\\\"constraint\\\"===c(\\\"contours.type\\\")?o(t,e,c,u,r,{hasHover:!1}):(s(t,e,c,(function(r){return n.coerce2(t,e,a,r)})),l(t,e,c,u,{hasHover:!1}))}else e._defaultColor=r,e._length=null}},93740:function(t,e,r){\\\"use strict\\\";t.exports={attributes:r(88085),supplyDefaults:r(75005),colorbar:r(90654),calc:r(59885),plot:r(51048),style:r(84426),moduleType:\\\"trace\\\",name:\\\"contourcarpet\\\",basePlotModule:r(93612),categories:[\\\"cartesian\\\",\\\"svg\\\",\\\"carpet\\\",\\\"contour\\\",\\\"symbols\\\",\\\"showLegend\\\",\\\"hasLines\\\",\\\"carpetDependent\\\",\\\"noHover\\\",\\\"noSortingByValue\\\"],meta:{}}},51048:function(t,e,r){\\\"use strict\\\";var n=r(39898),i=r(27669),a=r(67961),o=r(91424),s=r(71828),l=r(87678),u=r(81696),c=r(29854),f=r(36914),h=r(84857),p=r(87558),d=r(20083),v=r(22882),g=r(4536);function y(t,e,r){var n=t.getPointAtLength(e),i=t.getPointAtLength(r),a=i.x-n.x,o=i.y-n.y,s=Math.sqrt(a*a+o*o);return[a/s,o/s]}function m(t){var e=Math.sqrt(t[0]*t[0]+t[1]*t[1]);return[t[0]/e,t[1]/e]}function x(t,e){var r=Math.abs(t[0]*e[0]+t[1]*e[1]);return Math.sqrt(1-r*r)/r}t.exports=function(t,e,r,b){var _=e.xaxis,w=e.yaxis;s.makeTraceGroups(b,r,\\\"contour\\\").each((function(r){var b=n.select(this),T=r[0],k=T.trace,A=k._carpetTrace=v(t,k),M=t.calcdata[A.index][0];if(A.visible&&\\\"legendonly\\\"!==A.visible){var S=T.a,E=T.b,L=k.contours,C=p(L,e,T),P=\\\"constraint\\\"===L.type,O=L._operation,I=P?\\\"=\\\"===O?\\\"lines\\\":\\\"fill\\\":L.coloring,D=[[S[0],E[E.length-1]],[S[S.length-1],E[E.length-1]],[S[S.length-1],E[0]],[S[0],E[0]]];l(C);var z=1e-8*(S[S.length-1]-S[0]),R=1e-8*(E[E.length-1]-E[0]);u(C,z,R);var F,B,N,j,U=C;\\\"constraint\\\"===L.type&&(U=h(C,O)),function(t,e){var r,n,i,a,o,s,l,u,c;for(r=0;r<t.length;r++){for(o=(a=t[r]).pedgepaths=[],s=a.ppaths=[],n=0;n<a.edgepaths.length;n++){for(c=a.edgepaths[n],l=[],i=0;i<c.length;i++)l[i]=e(c[i]);o.push(l)}for(n=0;n<a.paths.length;n++){for(c=a.paths[n],u=[],i=0;i<c.length;i++)u[i]=e(c[i]);s.push(u)}}}(C,q);var V=[];for(j=M.clipsegments.length-1;j>=0;j--)F=M.clipsegments[j],B=i([],F.x,_.c2p),N=i([],F.y,w.c2p),B.reverse(),N.reverse(),V.push(a(B,N,F.bicubic));var H=\\\"M\\\"+V.join(\\\"L\\\")+\\\"Z\\\";!function(t,e,r,n,o,l){var u,c,f,h,p=s.ensureSingle(t,\\\"g\\\",\\\"contourbg\\\").selectAll(\\\"path\\\").data(\\\"fill\\\"!==l||o?[]:[0]);p.enter().append(\\\"path\\\"),p.exit().remove();var d=[];for(h=0;h<e.length;h++)u=e[h],c=i([],u.x,r.c2p),f=i([],u.y,n.c2p),d.push(a(c,f,u.bicubic));p.attr(\\\"d\\\",\\\"M\\\"+d.join(\\\"L\\\")+\\\"Z\\\").style(\\\"stroke\\\",\\\"none\\\")}(b,M.clipsegments,_,w,P,I),function(t,e,r,i,a,l,u,c,f,h,p){var v=\\\"fill\\\"===h;v&&d(a,t.contours);var y=s.ensureSingle(e,\\\"g\\\",\\\"contourfill\\\").selectAll(\\\"path\\\").data(v?a:[]);y.enter().append(\\\"path\\\"),y.exit().remove(),y.each((function(t){var e=(t.prefixBoundary?p:\\\"\\\")+function(t,e,r,n,i,a,l,u){var c,f,h,p,d,v,y,m=\\\"\\\",x=e.edgepaths.map((function(t,e){return e})),b=!0,_=1e-4*Math.abs(r[0][0]-r[2][0]),w=1e-4*Math.abs(r[0][1]-r[2][1]);function T(t){return Math.abs(t[1]-r[0][1])<w}function k(t){return Math.abs(t[1]-r[2][1])<w}function A(t){return Math.abs(t[0]-r[0][0])<_}function M(t){return Math.abs(t[0]-r[2][0])<_}function S(t,e){var r,n,o,s,c=\\\"\\\";for(T(t)&&!M(t)||k(t)&&!A(t)?(s=i.aaxis,o=g(i,a,[t[0],e[0]],.5*(t[1]+e[1]))):(s=i.baxis,o=g(i,a,.5*(t[0]+e[0]),[t[1],e[1]])),r=1;r<o.length;r++)for(c+=s.smoothing?\\\"C\\\":\\\"L\\\",n=0;n<o[r].length;n++){var f=o[r][n];c+=[l.c2p(f[0]),u.c2p(f[1])]+\\\" \\\"}return c}for(c=0,f=null;x.length;){var E=e.edgepaths[c][0];for(f&&(m+=S(f,E)),y=o.smoothopen(e.edgepaths[c].map(n),e.smoothing),m+=b?y:y.replace(/^M/,\\\"L\\\"),x.splice(x.indexOf(c),1),f=e.edgepaths[c][e.edgepaths[c].length-1],d=-1,p=0;p<4;p++){if(!f){s.log(\\\"Missing end?\\\",c,e);break}for(T(f)&&!M(f)?h=r[1]:A(f)?h=r[0]:k(f)?h=r[3]:M(f)&&(h=r[2]),v=0;v<e.edgepaths.length;v++){var L=e.edgepaths[v][0];Math.abs(f[0]-h[0])<_?Math.abs(f[0]-L[0])<_&&(L[1]-f[1])*(h[1]-L[1])>=0&&(h=L,d=v):Math.abs(f[1]-h[1])<w?Math.abs(f[1]-L[1])<w&&(L[0]-f[0])*(h[0]-L[0])>=0&&(h=L,d=v):s.log(\\\"endpt to newendpt is not vert. or horz.\\\",f,h,L)}if(d>=0)break;m+=S(f,h),f=h}if(d===e.edgepaths.length){s.log(\\\"unclosed perimeter path\\\");break}c=d,(b=-1===x.indexOf(c))&&(c=x[0],m+=S(f,h)+\\\"Z\\\",f=null)}for(c=0;c<e.paths.length;c++)m+=o.smoothclosed(e.paths[c].map(n),e.smoothing);return m}(0,t,l,u,c,f,r,i);e?n.select(this).attr(\\\"d\\\",e).style(\\\"stroke\\\",\\\"none\\\"):n.select(this).remove()}))}(k,b,_,w,U,D,q,A,M,I,H),function(t,e,r,i,a,l,u){var h=r._context.staticPlot,p=s.ensureSingle(t,\\\"g\\\",\\\"contourlines\\\"),d=!1!==a.showlines,v=a.showlabels,g=d&&v,b=c.createLines(p,d||v,e,h),_=c.createLineClip(p,g,r,i.trace.uid),w=t.selectAll(\\\"g.contourlabels\\\").data(v?[0]:[]);if(w.exit().remove(),w.enter().append(\\\"g\\\").classed(\\\"contourlabels\\\",!0),v){var T=l.xaxis,k=l.yaxis,A=T._length,M=k._length,S=[[[0,0],[A,0],[A,M],[0,M]]],E=[];s.clearLocationCache();var L=c.labelFormatter(r,i),C=o.tester.append(\\\"text\\\").attr(\\\"data-notex\\\",1).call(o.font,a.labelfont),P={left:0,right:A,center:A/2,top:0,bottom:M,middle:M/2},O=Math.sqrt(A*A+M*M),I=f.LABELDISTANCE*O/Math.max(1,e.length/f.LABELINCREASE);b.each((function(t){var e=c.calcTextOpts(t.level,L,C,r);n.select(this).selectAll(\\\"path\\\").each((function(r){var n=this,i=s.getVisibleSegment(n,P,e.height/2);if(i&&(function(t,e,r,n,i,a){for(var o,s=0;s<r.pedgepaths.length;s++)e===r.pedgepaths[s]&&(o=r.edgepaths[s]);if(o){var l=i.a[0],u=i.a[i.a.length-1],c=i.b[0],f=i.b[i.b.length-1],h=y(t,0,1),p=y(t,n.total,n.total-1),d=g(o[0],h),v=n.total-g(o[o.length-1],p);n.min<d&&(n.min=d),n.max>v&&(n.max=v),n.len=n.max-n.min}function g(t,e){var r,n=0,o=.1;return(Math.abs(t[0]-l)<o||Math.abs(t[0]-u)<o)&&(r=m(i.dxydb_rough(t[0],t[1],o)),n=Math.max(n,a*x(e,r)/2)),(Math.abs(t[1]-c)<o||Math.abs(t[1]-f)<o)&&(r=m(i.dxyda_rough(t[0],t[1],o)),n=Math.max(n,a*x(e,r)/2)),n}}(n,r,t,i,u,e.height),!(i.len<(e.width+e.height)*f.LABELMIN)))for(var a=Math.min(Math.ceil(i.len/I),f.LABELMAX),o=0;o<a;o++){var l=c.findBestTextLocation(n,i,e,E,P);if(!l)break;c.addLabelData(l,e,E,S)}}))})),C.remove(),c.drawLabels(w,E,r,_,g?S:null)}v&&!d&&b.remove()}(b,C,t,T,L,e,A),o.setClipUrl(b,A._clipPathId,t)}function q(t){var e=A.ab2xy(t[0],t[1],!0);return[_.c2p(e[0]),w.c2p(e[1])]}}))}},64096:function(t,e,r){\\\"use strict\\\";var n=r(50693),i=r(5386).fF,a=r(9012),o=r(99181),s=r(1426).extendFlat;t.exports=s({lon:o.lon,lat:o.lat,z:{valType:\\\"data_array\\\",editType:\\\"calc\\\"},radius:{valType:\\\"number\\\",editType:\\\"plot\\\",arrayOk:!0,min:1,dflt:30},below:{valType:\\\"string\\\",editType:\\\"plot\\\"},text:o.text,hovertext:o.hovertext,hoverinfo:s({},a.hoverinfo,{flags:[\\\"lon\\\",\\\"lat\\\",\\\"z\\\",\\\"text\\\",\\\"name\\\"]}),hovertemplate:i(),showlegend:s({},a.showlegend,{dflt:!1})},n(\\\"\\\",{cLetter:\\\"z\\\",editTypeOverride:\\\"calc\\\"}))},85070:function(t,e,r){\\\"use strict\\\";var n=r(92770),i=r(71828).isArrayOrTypedArray,a=r(50606).BADNUM,o=r(78803),s=r(71828)._;t.exports=function(t,e){for(var r=e._length,l=new Array(r),u=e.z,c=i(u)&&u.length,f=0;f<r;f++){var h=l[f]={},p=e.lon[f],d=e.lat[f];if(h.lonlat=n(p)&&n(d)?[+p,+d]:[a,a],c){var v=u[f];h.z=n(v)?v:a}}return o(t,e,{vals:c?u:[0,1],containerStr:\\\"\\\",cLetter:\\\"z\\\"}),r&&(l[0].t={labels:{lat:s(t,\\\"lat:\\\")+\\\" \\\",lon:s(t,\\\"lon:\\\")+\\\" \\\"}}),l}},52414:function(t,e,r){\\\"use strict\\\";var n=r(92770),i=r(71828),a=r(7901),o=r(21081),s=r(50606).BADNUM,l=r(18214).makeBlank;t.exports=function(t){var e=t[0].trace,r=!0===e.visible&&0!==e._length,u=e._opts={heatmap:{layout:{visibility:\\\"none\\\"},paint:{}},geojson:l()};if(!r)return u;var c,f=[],h=e.z,p=e.radius,d=i.isArrayOrTypedArray(h)&&h.length,v=i.isArrayOrTypedArray(p);for(c=0;c<t.length;c++){var g=t[c],y=g.lonlat;if(y[0]!==s){var m={};if(d){var x=g.z;m.z=x!==s?x:0}v&&(m.r=n(p[c])&&p[c]>0?+p[c]:0),f.push({type:\\\"Feature\\\",geometry:{type:\\\"Point\\\",coordinates:y},properties:m})}}var b=o.extractOpts(e),_=b.reversescale?o.flipScale(b.colorscale):b.colorscale,w=_[0][1],T=[\\\"interpolate\\\",[\\\"linear\\\"],[\\\"heatmap-density\\\"],0,a.opacity(w)<1?w:a.addOpacity(w,0)];for(c=1;c<_.length;c++)T.push(_[c][0],_[c][1]);var k=[\\\"interpolate\\\",[\\\"linear\\\"],[\\\"get\\\",\\\"z\\\"],b.min,0,b.max,1];return i.extendFlat(u.heatmap.paint,{\\\"heatmap-weight\\\":d?k:1/(b.max-b.min),\\\"heatmap-color\\\":T,\\\"heatmap-radius\\\":v?{type:\\\"identity\\\",property:\\\"r\\\"}:e.radius,\\\"heatmap-opacity\\\":e.opacity}),u.geojson={type:\\\"FeatureCollection\\\",features:f},u.heatmap.layout.visibility=\\\"visible\\\",u}},79429:function(t,e,r){\\\"use strict\\\";var n=r(71828),i=r(1586),a=r(64096);t.exports=function(t,e,r,o){function s(r,i){return n.coerce(t,e,a,r,i)}var l=s(\\\"lon\\\")||[],u=s(\\\"lat\\\")||[],c=Math.min(l.length,u.length);c?(e._length=c,s(\\\"z\\\"),s(\\\"radius\\\"),s(\\\"below\\\"),s(\\\"text\\\"),s(\\\"hovertext\\\"),s(\\\"hovertemplate\\\"),i(t,e,o,s,{prefix:\\\"\\\",cLetter:\\\"z\\\"})):e.visible=!1}},62474:function(t){\\\"use strict\\\";t.exports=function(t,e){return t.lon=e.lon,t.lat=e.lat,t.z=e.z,t}},84684:function(t,e,r){\\\"use strict\\\";var n=r(89298),i=r(28178).hoverPoints,a=r(28178).getExtraText;t.exports=function(t,e,r){var o=i(t,e,r);if(o){var s=o[0],l=s.cd,u=l[0].trace,c=l[s.index];if(delete s.color,\\\"z\\\"in c){var f=s.subplot.mockAxis;s.z=c.z,s.zLabel=n.tickText(f,f.c2l(c.z),\\\"hover\\\").text}return s.extraText=a(u,c,l[0].t.labels),[s]}}},93814:function(t,e,r){\\\"use strict\\\";t.exports={attributes:r(64096),supplyDefaults:r(79429),colorbar:r(61243),formatLabels:r(15636),calc:r(85070),plot:r(7336),hoverPoints:r(84684),eventData:r(62474),getBelow:function(t,e){for(var r=e.getMapLayers(),n=0;n<r.length;n++){var i=r[n],a=i.id;if(\\\"symbol\\\"===i.type&&\\\"string\\\"==typeof a&&-1===a.indexOf(\\\"plotly-\\\"))return a}},moduleType:\\\"trace\\\",name:\\\"densitymapbox\\\",basePlotModule:r(50101),categories:[\\\"mapbox\\\",\\\"gl\\\",\\\"showLegend\\\"],meta:{hr_name:\\\"density_mapbox\\\"}}},7336:function(t,e,r){\\\"use strict\\\";var n=r(52414),i=r(77734).traceLayerPrefix;function a(t,e){this.type=\\\"densitymapbox\\\",this.subplot=t,this.uid=e,this.sourceId=\\\"source-\\\"+e,this.layerList=[[\\\"heatmap\\\",i+e+\\\"-heatmap\\\"]],this.below=null}var o=a.prototype;o.update=function(t){var e=this.subplot,r=this.layerList,i=n(t),a=e.belowLookup[\\\"trace-\\\"+this.uid];e.map.getSource(this.sourceId).setData(i.geojson),a!==this.below&&(this._removeLayers(),this._addLayers(i,a),this.below=a);for(var o=0;o<r.length;o++){var s=r[o],l=s[0],u=s[1],c=i[l];e.setOptions(u,\\\"setLayoutProperty\\\",c.layout),\\\"visible\\\"===c.layout.visibility&&e.setOptions(u,\\\"setPaintProperty\\\",c.paint)}},o._addLayers=function(t,e){for(var r=this.subplot,n=this.layerList,i=this.sourceId,a=0;a<n.length;a++){var o=n[a],s=o[0],l=t[s];r.addLayer({type:s,id:o[1],source:i,layout:l.layout,paint:l.paint},e)}},o._removeLayers=function(){for(var t=this.subplot.map,e=this.layerList,r=e.length-1;r>=0;r--)t.removeLayer(e[r][1])},o.dispose=function(){var t=this.subplot.map;this._removeLayers(),t.removeSource(this.sourceId)},t.exports=function(t,e){var r=e[0].trace,i=new a(t,r.uid),o=i.sourceId,s=n(e),l=i.below=t.belowLookup[\\\"trace-\\\"+r.uid];return t.map.addSource(o,{type:\\\"geojson\\\",data:s.geojson}),i._addLayers(s,l),i}},49789:function(t,e,r){\\\"use strict\\\";var n=r(71828);t.exports=function(t,e){for(var r=0;r<t.length;r++)t[r].i=r;n.mergeArray(e.text,t,\\\"tx\\\"),n.mergeArray(e.hovertext,t,\\\"htx\\\");var i=e.marker;if(i){n.mergeArray(i.opacity,t,\\\"mo\\\"),n.mergeArray(i.color,t,\\\"mc\\\");var a=i.line;a&&(n.mergeArray(a.color,t,\\\"mlc\\\"),n.mergeArrayCastPositive(a.width,t,\\\"mlw\\\"))}}},1285:function(t,e,r){\\\"use strict\\\";var n,i=r(1486),a=r(82196).line,o=r(9012),s=r(12663).axisHoverFormat,l=r(5386).fF,u=r(5386).si,c=r(18517),f=r(1426).extendFlat,h=r(7901);t.exports={x:i.x,x0:i.x0,dx:i.dx,y:i.y,y0:i.y0,dy:i.dy,xperiod:i.xperiod,yperiod:i.yperiod,xperiod0:i.xperiod0,yperiod0:i.yperiod0,xperiodalignment:i.xperiodalignment,yperiodalignment:i.yperiodalignment,xhoverformat:s(\\\"x\\\"),yhoverformat:s(\\\"y\\\"),hovertext:i.hovertext,hovertemplate:l({},{keys:c.eventDataKeys}),hoverinfo:f({},o.hoverinfo,{flags:[\\\"name\\\",\\\"x\\\",\\\"y\\\",\\\"text\\\",\\\"percent initial\\\",\\\"percent previous\\\",\\\"percent total\\\"]}),textinfo:{valType:\\\"flaglist\\\",flags:[\\\"label\\\",\\\"text\\\",\\\"percent initial\\\",\\\"percent previous\\\",\\\"percent total\\\",\\\"value\\\"],extras:[\\\"none\\\"],editType:\\\"plot\\\",arrayOk:!1},texttemplate:u({editType:\\\"plot\\\"},{keys:c.eventDataKeys.concat([\\\"label\\\",\\\"value\\\"])}),text:i.text,textposition:i.textposition,insidetextanchor:f({},i.insidetextanchor,{dflt:\\\"middle\\\"}),textangle:f({},i.textangle,{dflt:0}),textfont:i.textfont,insidetextfont:i.insidetextfont,outsidetextfont:i.outsidetextfont,constraintext:i.constraintext,cliponaxis:i.cliponaxis,orientation:f({},i.orientation,{}),offset:f({},i.offset,{arrayOk:!1}),width:f({},i.width,{arrayOk:!1}),marker:(n=f({},i.marker),delete n.pattern,n),connector:{fillcolor:{valType:\\\"color\\\",editType:\\\"style\\\"},line:{color:f({},a.color,{dflt:h.defaultLine}),width:f({},a.width,{dflt:0,editType:\\\"plot\\\"}),dash:a.dash,editType:\\\"style\\\"},visible:{valType:\\\"boolean\\\",dflt:!0,editType:\\\"plot\\\"},editType:\\\"plot\\\"},offsetgroup:i.offsetgroup,alignmentgroup:i.alignmentgroup}},9532:function(t,e,r){\\\"use strict\\\";var n=r(89298),i=r(42973),a=r(49789),o=r(66279),s=r(50606).BADNUM;function l(t){return t===s?0:t}t.exports=function(t,e){var r,u,c,f,h,p,d,v,g=n.getFromId(t,e.xaxis||\\\"x\\\"),y=n.getFromId(t,e.yaxis||\\\"y\\\");\\\"h\\\"===e.orientation?(r=g.makeCalcdata(e,\\\"x\\\"),c=y.makeCalcdata(e,\\\"y\\\"),f=i(e,y,\\\"y\\\",c),h=!!e.yperiodalignment,p=\\\"y\\\"):(r=y.makeCalcdata(e,\\\"y\\\"),c=g.makeCalcdata(e,\\\"x\\\"),f=i(e,g,\\\"x\\\",c),h=!!e.xperiodalignment,p=\\\"x\\\"),u=f.vals;var m,x=Math.min(u.length,r.length),b=new Array(x);for(e._base=[],d=0;d<x;d++){r[d]<0&&(r[d]=s);var _=!1;r[d]!==s&&d+1<x&&r[d+1]!==s&&(_=!0),v=b[d]={p:u[d],s:r[d],cNext:_},e._base[d]=-.5*v.s,h&&(b[d].orig_p=c[d],b[d][p+\\\"End\\\"]=f.ends[d],b[d][p+\\\"Start\\\"]=f.starts[d]),e.ids&&(v.id=String(e.ids[d])),0===d&&(b[0].vTotal=0),b[0].vTotal+=l(v.s),v.begR=l(v.s)/l(b[0].s)}for(d=0;d<x;d++)(v=b[d]).s!==s&&(v.sumR=v.s/b[0].vTotal,v.difR=void 0!==m?v.s/m:1,m=v.s);return a(b,e),o(b,e),b}},18517:function(t){\\\"use strict\\\";t.exports={eventDataKeys:[\\\"percentInitial\\\",\\\"percentPrevious\\\",\\\"percentTotal\\\"]}},8984:function(t,e,r){\\\"use strict\\\";var n=r(11661).setGroupPositions;t.exports=function(t,e){var r,i,a=t._fullLayout,o=t._fullData,s=t.calcdata,l=e.xaxis,u=e.yaxis,c=[],f=[],h=[];for(i=0;i<o.length;i++){var p=o[i],d=\\\"h\\\"===p.orientation;!0===p.visible&&p.xaxis===l._id&&p.yaxis===u._id&&\\\"funnel\\\"===p.type&&(r=s[i],d?h.push(r):f.push(r),c.push(r))}var v={mode:a.funnelmode,norm:a.funnelnorm,gap:a.funnelgap,groupgap:a.funnelgroupgap};for(n(t,l,u,f,v),n(t,u,l,h,v),i=0;i<c.length;i++){r=c[i];for(var g=0;g<r.length;g++)g+1<r.length&&(r[g].nextP0=r[g+1].p0,r[g].nextS0=r[g+1].s0,r[g].nextP1=r[g+1].p1,r[g].nextS1=r[g+1].s1)}}},26199:function(t,e,r){\\\"use strict\\\";var n=r(71828),i=r(26125),a=r(90769).handleText,o=r(67513),s=r(73927),l=r(1285),u=r(7901);t.exports={supplyDefaults:function(t,e,r,i){function c(r,i){return n.coerce(t,e,l,r,i)}if(o(t,e,i,c)){s(t,e,i,c),c(\\\"xhoverformat\\\"),c(\\\"yhoverformat\\\"),c(\\\"orientation\\\",e.y&&!e.x?\\\"v\\\":\\\"h\\\"),c(\\\"offset\\\"),c(\\\"width\\\");var f=c(\\\"text\\\");c(\\\"hovertext\\\"),c(\\\"hovertemplate\\\");var h=c(\\\"textposition\\\");a(t,e,i,c,h,{moduleHasSelected:!1,moduleHasUnselected:!1,moduleHasConstrain:!0,moduleHasCliponaxis:!0,moduleHasTextangle:!0,moduleHasInsideanchor:!0}),\\\"none\\\"===e.textposition||e.texttemplate||c(\\\"textinfo\\\",Array.isArray(f)?\\\"text+value\\\":\\\"value\\\");var p=c(\\\"marker.color\\\",r);c(\\\"marker.line.color\\\",u.defaultLine),c(\\\"marker.line.width\\\"),c(\\\"connector.visible\\\")&&(c(\\\"connector.fillcolor\\\",function(t){var e=n.isArrayOrTypedArray(t)?\\\"#000\\\":t;return u.addOpacity(e,.5*u.opacity(e))}(p)),c(\\\"connector.line.width\\\")&&(c(\\\"connector.line.color\\\"),c(\\\"connector.line.dash\\\")))}else e.visible=!1},crossTraceDefaults:function(t,e){var r,a;function o(t){return n.coerce(a._input,a,l,t)}if(\\\"group\\\"===e.funnelmode)for(var s=0;s<t.length;s++)r=(a=t[s])._input,i(r,a,e,o)}}},34598:function(t){\\\"use strict\\\";t.exports=function(t,e){return t.x=\\\"xVal\\\"in e?e.xVal:e.x,t.y=\\\"yVal\\\"in e?e.yVal:e.y,\\\"percentInitial\\\"in e&&(t.percentInitial=e.percentInitial),\\\"percentPrevious\\\"in e&&(t.percentPrevious=e.percentPrevious),\\\"percentTotal\\\"in e&&(t.percentTotal=e.percentTotal),e.xa&&(t.xaxis=e.xa),e.ya&&(t.yaxis=e.ya),t}},63341:function(t,e,r){\\\"use strict\\\";var n=r(7901).opacity,i=r(95423).hoverOnBars,a=r(71828).formatPercent;t.exports=function(t,e,r,o,s){var l=i(t,e,r,o,s);if(l){var u=l.cd,c=u[0].trace,f=\\\"h\\\"===c.orientation,h=u[l.index];l[(f?\\\"x\\\":\\\"y\\\")+\\\"LabelVal\\\"]=h.s,l.percentInitial=h.begR,l.percentInitialLabel=a(h.begR,1),l.percentPrevious=h.difR,l.percentPreviousLabel=a(h.difR,1),l.percentTotal=h.sumR,l.percentTotalLabel=a(h.sumR,1);var p=h.hi||c.hoverinfo,d=[];if(p&&\\\"none\\\"!==p&&\\\"skip\\\"!==p){var v=\\\"all\\\"===p,g=p.split(\\\"+\\\"),y=function(t){return v||-1!==g.indexOf(t)};y(\\\"percent initial\\\")&&d.push(l.percentInitialLabel+\\\" of initial\\\"),y(\\\"percent previous\\\")&&d.push(l.percentPreviousLabel+\\\" of previous\\\"),y(\\\"percent total\\\")&&d.push(l.percentTotalLabel+\\\" of total\\\")}return l.extraText=d.join(\\\"<br>\\\"),l.color=function(t,e){var r=t.marker,i=e.mc||r.color,a=e.mlc||r.line.color,o=e.mlw||r.line.width;return n(i)?i:n(a)&&o?a:void 0}(c,h),[l]}}},51759:function(t,e,r){\\\"use strict\\\";t.exports={attributes:r(1285),layoutAttributes:r(10440),supplyDefaults:r(26199).supplyDefaults,crossTraceDefaults:r(26199).crossTraceDefaults,supplyLayoutDefaults:r(93138),calc:r(9532),crossTraceCalc:r(8984),plot:r(80461),style:r(68266).style,hoverPoints:r(63341),eventData:r(34598),selectPoints:r(81974),moduleType:\\\"trace\\\",name:\\\"funnel\\\",basePlotModule:r(93612),categories:[\\\"bar-like\\\",\\\"cartesian\\\",\\\"svg\\\",\\\"oriented\\\",\\\"showLegend\\\",\\\"zoomScale\\\"],meta:{}}},10440:function(t){\\\"use strict\\\";t.exports={funnelmode:{valType:\\\"enumerated\\\",values:[\\\"stack\\\",\\\"group\\\",\\\"overlay\\\"],dflt:\\\"stack\\\",editType:\\\"calc\\\"},funnelgap:{valType:\\\"number\\\",min:0,max:1,editType:\\\"calc\\\"},funnelgroupgap:{valType:\\\"number\\\",min:0,max:1,dflt:0,editType:\\\"calc\\\"}}},93138:function(t,e,r){\\\"use strict\\\";var n=r(71828),i=r(10440);t.exports=function(t,e,r){var a=!1;function o(r,a){return n.coerce(t,e,i,r,a)}for(var s=0;s<r.length;s++){var l=r[s];if(l.visible&&\\\"funnel\\\"===l.type){a=!0;break}}a&&(o(\\\"funnelmode\\\"),o(\\\"funnelgap\\\",.2),o(\\\"funnelgroupgap\\\"))}},80461:function(t,e,r){\\\"use strict\\\";var n=r(39898),i=r(71828),a=r(91424),o=r(50606).BADNUM,s=r(17295),l=r(72597).clearMinTextSize;function u(t,e,r,n){var i=[],a=[],o=n?e:r,s=n?r:e;return i[0]=o.c2p(t.s0,!0),a[0]=s.c2p(t.p0,!0),i[1]=o.c2p(t.s1,!0),a[1]=s.c2p(t.p1,!0),i[2]=o.c2p(t.nextS0,!0),a[2]=s.c2p(t.nextP0,!0),i[3]=o.c2p(t.nextS1,!0),a[3]=s.c2p(t.nextP1,!0),n?[i,a]:[a,i]}t.exports=function(t,e,r,c){var f=t._fullLayout;l(\\\"funnel\\\",f),function(t,e,r,s){var l=e.xaxis,c=e.yaxis;i.makeTraceGroups(s,r,\\\"trace bars\\\").each((function(r){var s=n.select(this),f=r[0].trace,h=i.ensureSingle(s,\\\"g\\\",\\\"regions\\\");if(f.connector&&f.connector.visible){var p=\\\"h\\\"===f.orientation,d=h.selectAll(\\\"g.region\\\").data(i.identity);d.enter().append(\\\"g\\\").classed(\\\"region\\\",!0),d.exit().remove();var v=d.size();d.each((function(r,s){if(s===v-1||r.cNext){var f=u(r,l,c,p),h=f[0],d=f[1],g=\\\"\\\";h[0]!==o&&d[0]!==o&&h[1]!==o&&d[1]!==o&&h[2]!==o&&d[2]!==o&&h[3]!==o&&d[3]!==o&&(g+=p?\\\"M\\\"+h[0]+\\\",\\\"+d[1]+\\\"L\\\"+h[2]+\\\",\\\"+d[2]+\\\"H\\\"+h[3]+\\\"L\\\"+h[1]+\\\",\\\"+d[1]+\\\"Z\\\":\\\"M\\\"+h[1]+\\\",\\\"+d[1]+\\\"L\\\"+h[2]+\\\",\\\"+d[3]+\\\"V\\\"+d[2]+\\\"L\\\"+h[1]+\\\",\\\"+d[0]+\\\"Z\\\"),\\\"\\\"===g&&(g=\\\"M0,0Z\\\"),i.ensureSingle(n.select(this),\\\"path\\\").attr(\\\"d\\\",g).call(a.setClipUrl,e.layerClipId,t)}}))}else h.remove()}))}(t,e,r,c),function(t,e,r,o){var s=e.xaxis,l=e.yaxis;i.makeTraceGroups(o,r,\\\"trace bars\\\").each((function(r){var o=n.select(this),c=r[0].trace,f=i.ensureSingle(o,\\\"g\\\",\\\"lines\\\");if(c.connector&&c.connector.visible&&c.connector.line.width){var h=\\\"h\\\"===c.orientation,p=f.selectAll(\\\"g.line\\\").data(i.identity);p.enter().append(\\\"g\\\").classed(\\\"line\\\",!0),p.exit().remove();var d=p.size();p.each((function(r,o){if(o===d-1||r.cNext){var c=u(r,s,l,h),f=c[0],p=c[1],v=\\\"\\\";void 0!==f[3]&&void 0!==p[3]&&(h?(v+=\\\"M\\\"+f[0]+\\\",\\\"+p[1]+\\\"L\\\"+f[2]+\\\",\\\"+p[2],v+=\\\"M\\\"+f[1]+\\\",\\\"+p[1]+\\\"L\\\"+f[3]+\\\",\\\"+p[2]):(v+=\\\"M\\\"+f[1]+\\\",\\\"+p[1]+\\\"L\\\"+f[2]+\\\",\\\"+p[3],v+=\\\"M\\\"+f[1]+\\\",\\\"+p[0]+\\\"L\\\"+f[2]+\\\",\\\"+p[2])),\\\"\\\"===v&&(v=\\\"M0,0Z\\\"),i.ensureSingle(n.select(this),\\\"path\\\").attr(\\\"d\\\",v).call(a.setClipUrl,e.layerClipId,t)}}))}else f.remove()}))}(t,e,r,c),s.plot(t,e,r,c,{mode:f.funnelmode,norm:f.funnelmode,gap:f.funnelgap,groupgap:f.funnelgroupgap})}},68266:function(t,e,r){\\\"use strict\\\";var n=r(39898),i=r(91424),a=r(7901),o=r(37822).DESELECTDIM,s=r(16688),l=r(72597).resizeText,u=s.styleTextPoints;t.exports={style:function(t,e,r){var s=r||n.select(t).selectAll(\\\"g.funnellayer\\\").selectAll(\\\"g.trace\\\");l(t,s,\\\"funnel\\\"),s.style(\\\"opacity\\\",(function(t){return t[0].trace.opacity})),s.each((function(e){var r=n.select(this),s=e[0].trace;r.selectAll(\\\".point > path\\\").each((function(t){if(!t.isBlank){var e=s.marker;n.select(this).call(a.fill,t.mc||e.color).call(a.stroke,t.mlc||e.line.color).call(i.dashLine,e.line.dash,t.mlw||e.line.width).style(\\\"opacity\\\",s.selectedpoints&&!t.selected?o:1)}})),u(r,s,t),r.selectAll(\\\".regions\\\").each((function(){n.select(this).selectAll(\\\"path\\\").style(\\\"stroke-width\\\",0).call(a.fill,s.connector.fillcolor)})),r.selectAll(\\\".lines\\\").each((function(){var t=s.connector.line;i.lineGroupStyle(n.select(this).selectAll(\\\"path\\\"),t.width,t.color,t.dash)}))}))}}},86807:function(t,e,r){\\\"use strict\\\";var n=r(34e3),i=r(9012),a=r(27670).Y,o=r(5386).fF,s=r(5386).si,l=r(1426).extendFlat;t.exports={labels:n.labels,label0:n.label0,dlabel:n.dlabel,values:n.values,marker:{colors:n.marker.colors,line:{color:l({},n.marker.line.color,{dflt:null}),width:l({},n.marker.line.width,{dflt:1}),editType:\\\"calc\\\"},pattern:n.marker.pattern,editType:\\\"calc\\\"},text:n.text,hovertext:n.hovertext,scalegroup:l({},n.scalegroup,{}),textinfo:l({},n.textinfo,{flags:[\\\"label\\\",\\\"text\\\",\\\"value\\\",\\\"percent\\\"]}),texttemplate:s({editType:\\\"plot\\\"},{keys:[\\\"label\\\",\\\"color\\\",\\\"value\\\",\\\"text\\\",\\\"percent\\\"]}),hoverinfo:l({},i.hoverinfo,{flags:[\\\"label\\\",\\\"text\\\",\\\"value\\\",\\\"percent\\\",\\\"name\\\"]}),hovertemplate:o({},{keys:[\\\"label\\\",\\\"color\\\",\\\"value\\\",\\\"text\\\",\\\"percent\\\"]}),textposition:l({},n.textposition,{values:[\\\"inside\\\",\\\"none\\\"],dflt:\\\"inside\\\"}),textfont:n.textfont,insidetextfont:n.insidetextfont,title:{text:n.title.text,font:n.title.font,position:l({},n.title.position,{values:[\\\"top left\\\",\\\"top center\\\",\\\"top right\\\"],dflt:\\\"top center\\\"}),editType:\\\"plot\\\"},domain:a({name:\\\"funnelarea\\\",trace:!0,editType:\\\"calc\\\"}),aspectratio:{valType:\\\"number\\\",min:0,dflt:1,editType:\\\"plot\\\"},baseratio:{valType:\\\"number\\\",min:0,max:1,dflt:.333,editType:\\\"plot\\\"}}},6452:function(t,e,r){\\\"use strict\\\";var n=r(74875);e.name=\\\"funnelarea\\\",e.plot=function(t,r,i,a){n.plotBasePlot(e.name,t,r,i,a)},e.clean=function(t,r,i,a){n.cleanBasePlot(e.name,t,r,i,a)}},89574:function(t,e,r){\\\"use strict\\\";var n=r(32354);t.exports={calc:function(t,e){return n.calc(t,e)},crossTraceCalc:function(t){n.crossTraceCalc(t,{type:\\\"funnelarea\\\"})}}},86282:function(t,e,r){\\\"use strict\\\";var n=r(71828),i=r(86807),a=r(27670).c,o=r(90769).handleText,s=r(37434).handleLabelsAndValues,l=r(37434).handleMarkerDefaults;t.exports=function(t,e,r,u){function c(r,a){return n.coerce(t,e,i,r,a)}var f=c(\\\"labels\\\"),h=c(\\\"values\\\"),p=s(f,h),d=p.len;if(e._hasLabels=p.hasLabels,e._hasValues=p.hasValues,!e._hasLabels&&e._hasValues&&(c(\\\"label0\\\"),c(\\\"dlabel\\\")),d){e._length=d,l(t,e,u,c),c(\\\"scalegroup\\\");var v,g=c(\\\"text\\\"),y=c(\\\"texttemplate\\\");if(y||(v=c(\\\"textinfo\\\",Array.isArray(g)?\\\"text+percent\\\":\\\"percent\\\")),c(\\\"hovertext\\\"),c(\\\"hovertemplate\\\"),y||v&&\\\"none\\\"!==v){var m=c(\\\"textposition\\\");o(t,e,u,c,m,{moduleHasSelected:!1,moduleHasUnselected:!1,moduleHasConstrain:!1,moduleHasCliponaxis:!1,moduleHasTextangle:!1,moduleHasInsideanchor:!1})}a(e,u,c),c(\\\"title.text\\\")&&(c(\\\"title.position\\\"),n.coerceFont(c,\\\"title.font\\\",u.font)),c(\\\"aspectratio\\\"),c(\\\"baseratio\\\")}else e.visible=!1}},10421:function(t,e,r){\\\"use strict\\\";t.exports={moduleType:\\\"trace\\\",name:\\\"funnelarea\\\",basePlotModule:r(6452),categories:[\\\"pie-like\\\",\\\"funnelarea\\\",\\\"showLegend\\\"],attributes:r(86807),layoutAttributes:r(80097),supplyDefaults:r(86282),supplyLayoutDefaults:r(57402),calc:r(89574).calc,crossTraceCalc:r(89574).crossTraceCalc,plot:r(79187),style:r(71858),styleOne:r(63463),meta:{}}},80097:function(t,e,r){\\\"use strict\\\";var n=r(92774).hiddenlabels;t.exports={hiddenlabels:n,funnelareacolorway:{valType:\\\"colorlist\\\",editType:\\\"calc\\\"},extendfunnelareacolors:{valType:\\\"boolean\\\",dflt:!0,editType:\\\"calc\\\"}}},57402:function(t,e,r){\\\"use strict\\\";var n=r(71828),i=r(80097);t.exports=function(t,e){function r(r,a){return n.coerce(t,e,i,r,a)}r(\\\"hiddenlabels\\\"),r(\\\"funnelareacolorway\\\",e.colorway),r(\\\"extendfunnelareacolors\\\")}},79187:function(t,e,r){\\\"use strict\\\";var n=r(39898),i=r(91424),a=r(71828),o=a.strScale,s=a.strTranslate,l=r(63893),u=r(17295).toMoveInsideBar,c=r(72597),f=c.recordMinTextSize,h=c.clearMinTextSize,p=r(53581),d=r(14575),v=d.attachFxHandlers,g=d.determineInsideTextFont,y=d.layoutAreas,m=d.prerenderTitles,x=d.positionTitleOutside,b=d.formatSliceLabel;function _(t,e){return\\\"l\\\"+(e[0]-t[0])+\\\",\\\"+(e[1]-t[1])}t.exports=function(t,e){var r=t._context.staticPlot,c=t._fullLayout;h(\\\"funnelarea\\\",c),m(e,t),y(e,c._size),a.makeTraceGroups(c._funnelarealayer,e,\\\"trace\\\").each((function(e){var h=n.select(this),d=e[0],y=d.trace;!function(t){if(t.length){var e=t[0],r=e.trace,n=r.aspectratio,i=r.baseratio;i>.999&&(i=.999);var a,o,s,l=Math.pow(i,2),u=e.vTotal,c=u,f=u*l/(1-l)/u,h=[];for(h.push(E()),o=t.length-1;o>-1;o--)if(!(s=t[o]).hidden){var p=s.v/c;f+=p,h.push(E())}var d=1/0,v=-1/0;for(o=0;o<h.length;o++)a=h[o],d=Math.min(d,a[1]),v=Math.max(v,a[1]);for(o=0;o<h.length;o++)h[o][1]-=(v+d)/2;var g=h[h.length-1][0],y=e.r,m=(v-d)/2,x=y/g,b=y/m*n;for(e.r=b*m,o=0;o<h.length;o++)h[o][0]*=x,h[o][1]*=b;var _,w,T=[-(a=h[0])[0],a[1]],k=[a[0],a[1]],A=0;for(o=t.length-1;o>-1;o--)if(!(s=t[o]).hidden){var M=h[A+=1][0],S=h[A][1];s.TL=[-M,S],s.TR=[M,S],s.BL=T,s.BR=k,s.pxmid=(_=s.TR,w=s.BR,[.5*(_[0]+w[0]),.5*(_[1]+w[1])]),T=s.TL,k=s.TR}}function E(){var t,e={x:t=Math.sqrt(f),y:-t};return[e.x,e.y]}}(e),h.each((function(){var h=n.select(this).selectAll(\\\"g.slice\\\").data(e);h.enter().append(\\\"g\\\").classed(\\\"slice\\\",!0),h.exit().remove(),h.each((function(o,s){if(o.hidden)n.select(this).selectAll(\\\"path,g\\\").remove();else{o.pointNumber=o.i,o.curveNumber=y.index;var h=d.cx,m=d.cy,x=n.select(this),w=x.selectAll(\\\"path.surface\\\").data([o]);w.enter().append(\\\"path\\\").classed(\\\"surface\\\",!0).style({\\\"pointer-events\\\":r?\\\"none\\\":\\\"all\\\"}),x.call(v,t,e);var T=\\\"M\\\"+(h+o.TR[0])+\\\",\\\"+(m+o.TR[1])+_(o.TR,o.BR)+_(o.BR,o.BL)+_(o.BL,o.TL)+\\\"Z\\\";w.attr(\\\"d\\\",T),b(t,o,d);var k=p.castOption(y.textposition,o.pts),A=x.selectAll(\\\"g.slicetext\\\").data(o.text&&\\\"none\\\"!==k?[0]:[]);A.enter().append(\\\"g\\\").classed(\\\"slicetext\\\",!0),A.exit().remove(),A.each((function(){var r=a.ensureSingle(n.select(this),\\\"text\\\",\\\"\\\",(function(t){t.attr(\\\"data-notex\\\",1)})),p=a.ensureUniformFontSize(t,g(y,o,c.font));r.text(o.text).attr({class:\\\"slicetext\\\",transform:\\\"\\\",\\\"text-anchor\\\":\\\"middle\\\"}).call(i.font,p).call(l.convertToTspans,t);var d,v,x,b=i.bBox(r.node()),_=Math.min(o.BL[1],o.BR[1])+m,w=Math.max(o.TL[1],o.TR[1])+m;v=Math.max(o.TL[0],o.BL[0])+h,x=Math.min(o.TR[0],o.BR[0])+h,(d=u(v,x,_,w,b,{isHorizontal:!0,constrained:!0,angle:0,anchor:\\\"middle\\\"})).fontSize=p.size,f(y.type,d,c),e[s].transform=d,a.setTransormAndDisplay(r,d)}))}}));var m=n.select(this).selectAll(\\\"g.titletext\\\").data(y.title.text?[0]:[]);m.enter().append(\\\"g\\\").classed(\\\"titletext\\\",!0),m.exit().remove(),m.each((function(){var e=a.ensureSingle(n.select(this),\\\"text\\\",\\\"\\\",(function(t){t.attr(\\\"data-notex\\\",1)})),r=y.title.text;y._meta&&(r=a.templateString(r,y._meta)),e.text(r).attr({class:\\\"titletext\\\",transform:\\\"\\\",\\\"text-anchor\\\":\\\"middle\\\"}).call(i.font,y.title.font).call(l.convertToTspans,t);var u=x(d,c._size);e.attr(\\\"transform\\\",s(u.x,u.y)+o(Math.min(1,u.scale))+s(u.tx,u.ty))}))}))}))}},71858:function(t,e,r){\\\"use strict\\\";var n=r(39898),i=r(63463),a=r(72597).resizeText;t.exports=function(t){var e=t._fullLayout._funnelarealayer.selectAll(\\\".trace\\\");a(t,e,\\\"funnelarea\\\"),e.each((function(e){var r=e[0].trace,a=n.select(this);a.style({opacity:r.opacity}),a.selectAll(\\\"path.surface\\\").each((function(e){n.select(this).call(i,e,r,t)}))}))}},21606:function(t,e,r){\\\"use strict\\\";var n=r(82196),i=r(9012),a=r(41940),o=r(12663).axisHoverFormat,s=r(5386).fF,l=r(5386).si,u=r(50693),c=r(1426).extendFlat;t.exports=c({z:{valType:\\\"data_array\\\",editType:\\\"calc\\\"},x:c({},n.x,{impliedEdits:{xtype:\\\"array\\\"}}),x0:c({},n.x0,{impliedEdits:{xtype:\\\"scaled\\\"}}),dx:c({},n.dx,{impliedEdits:{xtype:\\\"scaled\\\"}}),y:c({},n.y,{impliedEdits:{ytype:\\\"array\\\"}}),y0:c({},n.y0,{impliedEdits:{ytype:\\\"scaled\\\"}}),dy:c({},n.dy,{impliedEdits:{ytype:\\\"scaled\\\"}}),xperiod:c({},n.xperiod,{impliedEdits:{xtype:\\\"scaled\\\"}}),yperiod:c({},n.yperiod,{impliedEdits:{ytype:\\\"scaled\\\"}}),xperiod0:c({},n.xperiod0,{impliedEdits:{xtype:\\\"scaled\\\"}}),yperiod0:c({},n.yperiod0,{impliedEdits:{ytype:\\\"scaled\\\"}}),xperiodalignment:c({},n.xperiodalignment,{impliedEdits:{xtype:\\\"scaled\\\"}}),yperiodalignment:c({},n.yperiodalignment,{impliedEdits:{ytype:\\\"scaled\\\"}}),text:{valType:\\\"data_array\\\",editType:\\\"calc\\\"},hovertext:{valType:\\\"data_array\\\",editType:\\\"calc\\\"},transpose:{valType:\\\"boolean\\\",dflt:!1,editType:\\\"calc\\\"},xtype:{valType:\\\"enumerated\\\",values:[\\\"array\\\",\\\"scaled\\\"],editType:\\\"calc+clearAxisTypes\\\"},ytype:{valType:\\\"enumerated\\\",values:[\\\"array\\\",\\\"scaled\\\"],editType:\\\"calc+clearAxisTypes\\\"},zsmooth:{valType:\\\"enumerated\\\",values:[\\\"fast\\\",\\\"best\\\",!1],dflt:!1,editType:\\\"calc\\\"},hoverongaps:{valType:\\\"boolean\\\",dflt:!0,editType:\\\"none\\\"},connectgaps:{valType:\\\"boolean\\\",editType:\\\"calc\\\"},xgap:{valType:\\\"number\\\",dflt:0,min:0,editType:\\\"plot\\\"},ygap:{valType:\\\"number\\\",dflt:0,min:0,editType:\\\"plot\\\"},xhoverformat:o(\\\"x\\\"),yhoverformat:o(\\\"y\\\"),zhoverformat:o(\\\"z\\\",1),hovertemplate:s(),texttemplate:l({arrayOk:!1,editType:\\\"plot\\\"},{keys:[\\\"x\\\",\\\"y\\\",\\\"z\\\",\\\"text\\\"]}),textfont:a({editType:\\\"plot\\\",autoSize:!0,autoColor:!0,colorEditType:\\\"style\\\"}),showlegend:c({},i.showlegend,{dflt:!1})},{transforms:void 0},u(\\\"\\\",{cLetter:\\\"z\\\",autoColorDflt:!1}))},90757:function(t,e,r){\\\"use strict\\\";var n=r(73972),i=r(71828),a=r(89298),o=r(42973),s=r(17562),l=r(78803),u=r(68296),c=r(4742),f=r(824),h=r(43907),p=r(70769),d=r(50606).BADNUM;function v(t){for(var e=[],r=t.length,n=0;n<r;n++){var i=t[n];i!==d&&e.push(i)}return e}t.exports=function(t,e){var r,g,y,m,x,b,_,w,T,k,A,M=a.getFromId(t,e.xaxis||\\\"x\\\"),S=a.getFromId(t,e.yaxis||\\\"y\\\"),E=n.traceIs(e,\\\"contour\\\"),L=n.traceIs(e,\\\"histogram\\\"),C=n.traceIs(e,\\\"gl2d\\\"),P=E?\\\"best\\\":e.zsmooth;if(M._minDtick=0,S._minDtick=0,L)m=(A=s(t,e)).orig_x,r=A.x,g=A.x0,y=A.dx,w=A.orig_y,x=A.y,b=A.y0,_=A.dy,T=A.z;else{var O=e.z;i.isArray1D(O)?(u(e,M,S,\\\"x\\\",\\\"y\\\",[\\\"z\\\"]),r=e._x,x=e._y,O=e._z):(m=e.x?M.makeCalcdata(e,\\\"x\\\"):[],w=e.y?S.makeCalcdata(e,\\\"y\\\"):[],r=o(e,M,\\\"x\\\",m).vals,x=o(e,S,\\\"y\\\",w).vals,e._x=r,e._y=x),g=e.x0,y=e.dx,b=e.y0,_=e.dy,T=c(O,e,M,S)}function I(t){P=e._input.zsmooth=e.zsmooth=!1,i.warn('cannot use zsmooth: \\\"fast\\\": '+t)}function D(t){if(t.length>1){var e=(t[t.length-1]-t[0])/(t.length-1),r=Math.abs(e/100);for(k=0;k<t.length-1;k++)if(Math.abs(t[k+1]-t[k]-e)>r)return!1}return!0}(M.rangebreaks||S.rangebreaks)&&(T=function(t,e,r){for(var n=[],i=-1,a=0;a<r.length;a++)if(e[a]!==d){n[++i]=[];for(var o=0;o<r[a].length;o++)t[o]!==d&&n[i].push(r[a][o])}return n}(r,x,T),L||(r=v(r),x=v(x),e._x=r,e._y=x)),L||!E&&!e.connectgaps||(e._emptypoints=h(T),f(T,e._emptypoints)),e._islinear=!1,\\\"log\\\"===M.type||\\\"log\\\"===S.type?\\\"fast\\\"===P&&I(\\\"log axis found\\\"):D(r)?D(x)?e._islinear=!0:\\\"fast\\\"===P&&I(\\\"y scale is not linear\\\"):\\\"fast\\\"===P&&I(\\\"x scale is not linear\\\");var z=i.maxRowLength(T),R=\\\"scaled\\\"===e.xtype?\\\"\\\":r,F=p(e,R,g,y,z,M),B=\\\"scaled\\\"===e.ytype?\\\"\\\":x,N=p(e,B,b,_,T.length,S);C||(e._extremes[M._id]=a.findExtremes(M,F),e._extremes[S._id]=a.findExtremes(S,N));var j={x:F,y:N,z:T,text:e._text||e.text,hovertext:e._hovertext||e.hovertext};if(e.xperiodalignment&&m&&(j.orig_x=m),e.yperiodalignment&&w&&(j.orig_y=w),R&&R.length===F.length-1&&(j.xCenter=R),B&&B.length===N.length-1&&(j.yCenter=B),L&&(j.xRanges=A.xRanges,j.yRanges=A.yRanges,j.pts=A.pts),E||l(t,e,{vals:T,cLetter:\\\"z\\\"}),E&&e.contours&&\\\"heatmap\\\"===e.contours.coloring){var U={type:\\\"contour\\\"===e.type?\\\"heatmap\\\":\\\"histogram2d\\\",xcalendar:e.xcalendar,ycalendar:e.ycalendar};j.xfill=p(U,R,g,y,z,M),j.yfill=p(U,B,b,_,T.length,S)}return[j]}},4742:function(t,e,r){\\\"use strict\\\";var n=r(92770),i=r(71828),a=r(50606).BADNUM;t.exports=function(t,e,r,o){var s,l,u,c,f,h;function p(t){if(n(t))return+t}if(e&&e.transpose){for(s=0,f=0;f<t.length;f++)s=Math.max(s,t[f].length);if(0===s)return!1;u=function(t){return t.length},c=function(t,e,r){return(t[r]||[])[e]}}else s=t.length,u=function(t,e){return t[e].length},c=function(t,e,r){return(t[e]||[])[r]};var d=function(t,e,r){return e===a||r===a?a:c(t,e,r)};function v(t){if(e&&\\\"carpet\\\"!==e.type&&\\\"contourcarpet\\\"!==e.type&&t&&\\\"category\\\"===t.type&&e[\\\"_\\\"+t._id.charAt(0)].length){var r=t._id.charAt(0),n={},o=e[\\\"_\\\"+r+\\\"CategoryMap\\\"]||e[r];for(f=0;f<o.length;f++)n[o[f]]=f;return function(e){var r=n[t._categories[e]];return r+1?r:a}}return i.identity}var g=v(r),y=v(o);o&&\\\"category\\\"===o.type&&(s=o._categories.length);var m=new Array(s);for(f=0;f<s;f++)for(l=r&&\\\"category\\\"===r.type?r._categories.length:u(t,f),m[f]=new Array(l),h=0;h<l;h++)m[f][h]=p(d(t,y(f),g(h)));return m}},61243:function(t){\\\"use strict\\\";t.exports={min:\\\"zmin\\\",max:\\\"zmax\\\"}},68296:function(t,e,r){\\\"use strict\\\";var n=r(71828),i=r(50606).BADNUM,a=r(42973);t.exports=function(t,e,r,o,s,l){var u=t._length,c=e.makeCalcdata(t,o),f=r.makeCalcdata(t,s);c=a(t,e,o,c).vals,f=a(t,r,s,f).vals;var h,p,d,v,g=t.text,y=void 0!==g&&n.isArray1D(g),m=t.hovertext,x=void 0!==m&&n.isArray1D(m),b=n.distinctVals(c),_=b.vals,w=n.distinctVals(f),T=w.vals,k=[],A=T.length,M=_.length;for(h=0;h<l.length;h++)k[h]=n.init2dArray(A,M);y&&(d=n.init2dArray(A,M)),x&&(v=n.init2dArray(A,M));var S=n.init2dArray(A,M);for(h=0;h<u;h++)if(c[h]!==i&&f[h]!==i){var E=n.findBin(c[h]+b.minDiff/2,_),L=n.findBin(f[h]+w.minDiff/2,T);for(p=0;p<l.length;p++){var C=t[l[p]];k[p][L][E]=C[h],S[L][E]=h}y&&(d[L][E]=g[h]),x&&(v[L][E]=m[h])}for(t[\\\"_\\\"+o]=_,t[\\\"_\\\"+s]=T,p=0;p<l.length;p++)t[\\\"_\\\"+l[p]]=k[p];y&&(t._text=d),x&&(t._hovertext=v),e&&\\\"category\\\"===e.type&&(t[\\\"_\\\"+o+\\\"CategoryMap\\\"]=_.map((function(t){return e._categories[t]}))),r&&\\\"category\\\"===r.type&&(t[\\\"_\\\"+s+\\\"CategoryMap\\\"]=T.map((function(t){return r._categories[t]}))),t._after2before=S}},76382:function(t,e,r){\\\"use strict\\\";var n=r(71828),i=r(67684),a=r(58623),o=r(73927),s=r(49901),l=r(1586),u=r(21606);t.exports=function(t,e,r,c){function f(r,i){return n.coerce(t,e,u,r,i)}i(t,e,f,c)?(o(t,e,c,f),f(\\\"xhoverformat\\\"),f(\\\"yhoverformat\\\"),f(\\\"text\\\"),f(\\\"hovertext\\\"),f(\\\"hovertemplate\\\"),a(f,c),s(t,e,f,c),f(\\\"hoverongaps\\\"),f(\\\"connectgaps\\\",n.isArray1D(e.z)&&!1!==e.zsmooth),l(t,e,c,f,{prefix:\\\"\\\",cLetter:\\\"z\\\"})):e.visible=!1}},43907:function(t,e,r){\\\"use strict\\\";var n=r(71828).maxRowLength;t.exports=function(t){var e,r,i,a,o,s,l,u,c=[],f={},h=[],p=t[0],d=[],v=[0,0,0],g=n(t);for(r=0;r<t.length;r++)for(e=d,d=p,p=t[r+1]||[],i=0;i<g;i++)void 0===d[i]&&((s=(void 0!==d[i-1]?1:0)+(void 0!==d[i+1]?1:0)+(void 0!==e[i]?1:0)+(void 0!==p[i]?1:0))?(0===r&&s++,0===i&&s++,r===t.length-1&&s++,i===d.length-1&&s++,s<4&&(f[[r,i]]=[r,i,s]),c.push([r,i,s])):h.push([r,i]));for(;h.length;){for(l={},u=!1,o=h.length-1;o>=0;o--)(s=((f[[(r=(a=h[o])[0])-1,i=a[1]]]||v)[2]+(f[[r+1,i]]||v)[2]+(f[[r,i-1]]||v)[2]+(f[[r,i+1]]||v)[2])/20)&&(l[a]=[r,i,s],h.splice(o,1),u=!0);if(!u)throw\\\"findEmpties iterated with no new neighbors\\\";for(a in l)f[a]=l[a],c.push(l[a])}return c.sort((function(t,e){return e[2]-t[2]}))}},46248:function(t,e,r){\\\"use strict\\\";var n=r(30211),i=r(71828),a=r(89298),o=r(21081).extractOpts;t.exports=function(t,e,r,s,l){l||(l={});var u,c,f,h,p=l.isContour,d=t.cd[0],v=d.trace,g=t.xa,y=t.ya,m=d.x,x=d.y,b=d.z,_=d.xCenter,w=d.yCenter,T=d.zmask,k=v.zhoverformat,A=m,M=x;if(!1!==t.index){try{f=Math.round(t.index[1]),h=Math.round(t.index[0])}catch(e){return void i.error(\\\"Error hovering on heatmap, pointNumber must be [row,col], found:\\\",t.index)}if(f<0||f>=b[0].length||h<0||h>b.length)return}else{if(n.inbox(e-m[0],e-m[m.length-1],0)>0||n.inbox(r-x[0],r-x[x.length-1],0)>0)return;if(p){var S;for(A=[2*m[0]-m[1]],S=1;S<m.length;S++)A.push((m[S]+m[S-1])/2);for(A.push([2*m[m.length-1]-m[m.length-2]]),M=[2*x[0]-x[1]],S=1;S<x.length;S++)M.push((x[S]+x[S-1])/2);M.push([2*x[x.length-1]-x[x.length-2]])}f=Math.max(0,Math.min(A.length-2,i.findBin(e,A))),h=Math.max(0,Math.min(M.length-2,i.findBin(r,M)))}var E,L,C=g.c2p(m[f]),P=g.c2p(m[f+1]),O=y.c2p(x[h]),I=y.c2p(x[h+1]);p?(E=d.orig_x||m,L=d.orig_y||x,P=C,u=E[f],I=O,c=L[h]):(E=d.orig_x||_||m,L=d.orig_y||w||x,u=_?E[f]:(E[f]+E[f+1])/2,c=w?L[h]:(L[h]+L[h+1])/2,g&&\\\"category\\\"===g.type&&(u=m[f]),y&&\\\"category\\\"===y.type&&(c=x[h]),v.zsmooth&&(C=P=g.c2p(u),O=I=y.c2p(c)));var D=b[h][f];if(T&&!T[h][f]&&(D=void 0),void 0!==D||v.hoverongaps){var z;Array.isArray(d.hovertext)&&Array.isArray(d.hovertext[h])?z=d.hovertext[h][f]:Array.isArray(d.text)&&Array.isArray(d.text[h])&&(z=d.text[h][f]);var R=o(v),F={type:\\\"linear\\\",range:[R.min,R.max],hoverformat:k,_separators:g._separators,_numFormat:g._numFormat},B=a.tickText(F,D,\\\"hover\\\").text;return[i.extendFlat(t,{index:v._after2before?v._after2before[h][f]:[h,f],distance:t.maxHoverDistance,spikeDistance:t.maxSpikeDistance,x0:C,x1:P,y0:O,y1:I,xLabelVal:u,yLabelVal:c,zLabelVal:D,zLabel:B,text:z})]}}},92165:function(t,e,r){\\\"use strict\\\";t.exports={attributes:r(21606),supplyDefaults:r(76382),calc:r(90757),plot:r(50347),colorbar:r(61243),style:r(70035),hoverPoints:r(46248),moduleType:\\\"trace\\\",name:\\\"heatmap\\\",basePlotModule:r(93612),categories:[\\\"cartesian\\\",\\\"svg\\\",\\\"2dMap\\\",\\\"showLegend\\\"],meta:{}}},824:function(t,e,r){\\\"use strict\\\";var n=r(71828),i=[[-1,0],[1,0],[0,-1],[0,1]];function a(t){return.5-.25*Math.min(1,.5*t)}function o(t,e,r){var n,a,o,s,l,u,c,f,h,p,d,v,g,y=0;for(s=0;s<e.length;s++){for(a=(n=e[s])[0],o=n[1],d=t[a][o],p=0,h=0,l=0;l<4;l++)(c=t[a+(u=i[l])[0]])&&void 0!==(f=c[o+u[1]])&&(0===p?v=g=f:(v=Math.min(v,f),g=Math.max(g,f)),h++,p+=f);if(0===h)throw\\\"iterateInterp2d order is wrong: no defined neighbors\\\";t[a][o]=p/h,void 0===d?h<4&&(y=1):(t[a][o]=(1+r)*t[a][o]-r*d,g>v&&(y=Math.max(y,Math.abs(t[a][o]-d)/(g-v))))}return y}t.exports=function(t,e){var r,i=1;for(o(t,e),r=0;r<e.length&&!(e[r][2]<4);r++);for(e=e.slice(r),r=0;r<100&&i>.01;r++)i=o(t,e,a(i));return i>.01&&n.log(\\\"interp2d didn't converge quickly\\\",i),t}},58623:function(t,e,r){\\\"use strict\\\";var n=r(71828);t.exports=function(t,e){t(\\\"texttemplate\\\");var r=n.extendFlat({},e.font,{color:\\\"auto\\\",size:\\\"auto\\\"});n.coerceFont(t,\\\"textfont\\\",r)}},70769:function(t,e,r){\\\"use strict\\\";var n=r(73972),i=r(71828).isArrayOrTypedArray;t.exports=function(t,e,r,a,o,s){var l,u,c,f=[],h=n.traceIs(t,\\\"contour\\\"),p=n.traceIs(t,\\\"histogram\\\"),d=n.traceIs(t,\\\"gl2d\\\");if(i(e)&&e.length>1&&!p&&\\\"category\\\"!==s.type){var v=e.length;if(!(v<=o))return h?e.slice(0,o):e.slice(0,o+1);if(h||d)f=e.slice(0,o);else if(1===o)f=[e[0]-.5,e[0]+.5];else{for(f=[1.5*e[0]-.5*e[1]],c=1;c<v;c++)f.push(.5*(e[c-1]+e[c]));f.push(1.5*e[v-1]-.5*e[v-2])}if(v<o){var g=f[f.length-1],y=g-f[f.length-2];for(c=v;c<o;c++)g+=y,f.push(g)}}else{var m=t[s._id.charAt(0)+\\\"calendar\\\"];for(l=p?s.r2c(r,0,m):i(e)&&1===e.length?e[0]:void 0===r?0:(\\\"log\\\"===s.type?s.d2c:s.r2c)(r,0,m),u=a||1,c=h||d?0:-.5;c<o;c++)f.push(l+u*c)}return f}},50347:function(t,e,r){\\\"use strict\\\";var n=r(39898),i=r(84267),a=r(73972),o=r(91424),s=r(89298),l=r(71828),u=r(63893),c=r(8225),f=r(7901),h=r(21081).extractOpts,p=r(21081).makeColorScaleFuncFromTrace,d=r(77922),v=r(18783).LINE_SPACING,g=r(3883),y=r(32396).STYLE,m=\\\"heatmap-label\\\";function x(t){return t.selectAll(\\\"g.\\\"+m)}function b(t){x(t).remove()}function _(t,e){var r=e.length-2,n=l.constrain(l.findBin(t,e),0,r),i=e[n],a=e[n+1],o=l.constrain(n+(t-i)/(a-i)-.5,0,r),s=Math.round(o),u=Math.abs(o-s);return o&&o!==r&&u?{bin0:s,frac:u,bin1:Math.round(s+u/(o-s))}:{bin0:s,bin1:s,frac:0}}function w(t,e){var r=e.length-1,n=l.constrain(l.findBin(t,e),0,r),i=e[n],a=(t-i)/(e[n+1]-i)||0;return a<=0?{bin0:n,bin1:n,frac:0}:a<.5?{bin0:n,bin1:n+1,frac:a}:{bin0:n+1,bin1:n,frac:1-a}}function T(t,e,r){t[e]=r[0],t[e+1]=r[1],t[e+2]=r[2],t[e+3]=Math.round(255*r[3])}t.exports=function(t,e,r,k){var A=e.xaxis,M=e.yaxis;l.makeTraceGroups(k,r,\\\"hm\\\").each((function(e){var r,k,S,E,L,C,P,O,I=n.select(this),D=e[0],z=D.trace,R=z.xgap||0,F=z.ygap||0,B=D.z,N=D.x,j=D.y,U=D.xCenter,V=D.yCenter,H=a.traceIs(z,\\\"contour\\\"),q=H?\\\"best\\\":z.zsmooth,G=B.length,Z=l.maxRowLength(B),Y=!1,W=!1;for(C=0;void 0===r&&C<N.length-1;)r=A.c2p(N[C]),C++;for(C=N.length-1;void 0===k&&C>0;)k=A.c2p(N[C]),C--;for(k<r&&(S=k,k=r,r=S,Y=!0),C=0;void 0===E&&C<j.length-1;)E=M.c2p(j[C]),C++;for(C=j.length-1;void 0===L&&C>0;)L=M.c2p(j[C]),C--;L<E&&(S=E,E=L,L=S,W=!0),H&&(U=N,V=j,N=D.xfill,j=D.yfill);var X=\\\"default\\\";if(q?X=\\\"best\\\"===q?\\\"smooth\\\":\\\"fast\\\":z._islinear&&0===R&&0===F&&g()&&(X=\\\"fast\\\"),\\\"fast\\\"!==X){var J=\\\"best\\\"===q?0:.5;r=Math.max(-J*A._length,r),k=Math.min((1+J)*A._length,k),E=Math.max(-J*M._length,E),L=Math.min((1+J)*M._length,L)}var K,$,Q=Math.round(k-r),tt=Math.round(L-E);if(r>=A._length||k<=0||E>=M._length||L<=0)return I.selectAll(\\\"image\\\").data([]).exit().remove(),void b(I);\\\"fast\\\"===X?(K=Z,$=G):(K=Q,$=tt);var et=document.createElement(\\\"canvas\\\");et.width=K,et.height=$;var rt,nt,it=et.getContext(\\\"2d\\\"),at=p(z,{noNumericCheck:!0,returnArray:!0});\\\"fast\\\"===X?(rt=Y?function(t){return Z-1-t}:l.identity,nt=W?function(t){return G-1-t}:l.identity):(rt=function(t){return l.constrain(Math.round(A.c2p(N[t])-r),0,Q)},nt=function(t){return l.constrain(Math.round(M.c2p(j[t])-E),0,tt)});var ot,st,lt,ut,ct=nt(0),ft=[ct,ct],ht=Y?0:1,pt=W?0:1,dt=0,vt=0,gt=0,yt=0;function mt(t,e){if(void 0!==t){var r=at(t);return r[0]=Math.round(r[0]),r[1]=Math.round(r[1]),r[2]=Math.round(r[2]),dt+=e,vt+=r[0]*e,gt+=r[1]*e,yt+=r[2]*e,r}return[0,0,0,0]}function xt(t,e,r,n){var i=t[r.bin0];if(void 0===i)return mt(void 0,1);var a,o=t[r.bin1],s=e[r.bin0],l=e[r.bin1],u=o-i||0,c=s-i||0;return a=void 0===o?void 0===l?0:void 0===s?2*(l-i):2*(2*l-s-i)/3:void 0===l?void 0===s?0:2*(2*i-o-s)/3:void 0===s?2*(2*l-o-i)/3:l+i-o-s,mt(i+r.frac*u+n.frac*(c+r.frac*a))}if(\\\"default\\\"!==X){var bt,_t=0;try{bt=new Uint8Array(K*$*4)}catch(t){bt=new Array(K*$*4)}if(\\\"smooth\\\"===X){var wt,Tt,kt,At=U||N,Mt=V||j,St=new Array(At.length),Et=new Array(Mt.length),Lt=new Array(Q),Ct=U?w:_,Pt=V?w:_;for(C=0;C<At.length;C++)St[C]=Math.round(A.c2p(At[C])-r);for(C=0;C<Mt.length;C++)Et[C]=Math.round(M.c2p(Mt[C])-E);for(C=0;C<Q;C++)Lt[C]=Ct(C,St);for(P=0;P<tt;P++)for(Tt=B[(wt=Pt(P,Et)).bin0],kt=B[wt.bin1],C=0;C<Q;C++,_t+=4)T(bt,_t,ut=xt(Tt,kt,Lt[C],wt))}else for(P=0;P<G;P++)for(lt=B[P],ft=nt(P),C=0;C<Z;C++)ut=mt(lt[C],1),T(bt,_t=4*(ft*Z+rt(C)),ut);var Ot=it.createImageData(K,$);try{Ot.data.set(bt)}catch(t){var It=Ot.data,Dt=It.length;for(P=0;P<Dt;P++)It[P]=bt[P]}it.putImageData(Ot,0,0)}else{var zt=Math.floor(R/2),Rt=Math.floor(F/2);for(P=0;P<G;P++)if(lt=B[P],ft.reverse(),ft[pt]=nt(P+1),ft[0]!==ft[1]&&void 0!==ft[0]&&void 0!==ft[1])for(ot=[st=rt(0),st],C=0;C<Z;C++)ot.reverse(),ot[ht]=rt(C+1),ot[0]!==ot[1]&&void 0!==ot[0]&&void 0!==ot[1]&&(ut=mt(lt[C],(ot[1]-ot[0])*(ft[1]-ft[0])),it.fillStyle=\\\"rgba(\\\"+ut.join(\\\",\\\")+\\\")\\\",it.fillRect(ot[0]+zt,ft[0]+Rt,ot[1]-ot[0]-R,ft[1]-ft[0]-F))}vt=Math.round(vt/dt),gt=Math.round(gt/dt),yt=Math.round(yt/dt);var Ft=i(\\\"rgb(\\\"+vt+\\\",\\\"+gt+\\\",\\\"+yt+\\\")\\\");t._hmpixcount=(t._hmpixcount||0)+dt,t._hmlumcount=(t._hmlumcount||0)+dt*Ft.getLuminance();var Bt=I.selectAll(\\\"image\\\").data(e);Bt.enter().append(\\\"svg:image\\\").attr({xmlns:d.svg,preserveAspectRatio:\\\"none\\\"}),Bt.attr({height:tt,width:Q,x:r,y:E,\\\"xlink:href\\\":et.toDataURL(\\\"image/png\\\")}),\\\"fast\\\"!==X||q||Bt.attr(\\\"style\\\",y),b(I);var Nt=z.texttemplate;if(Nt){var jt=h(z),Ut={type:\\\"linear\\\",range:[jt.min,jt.max],_separators:A._separators,_numFormat:A._numFormat},Vt=\\\"histogram2dcontour\\\"===z.type,Ht=\\\"contour\\\"===z.type,qt=Ht?G-1:G,Gt=Ht?1:0,Zt=Ht?Z-1:Z,Yt=[];for(C=Ht?1:0;C<qt;C++){var Wt;if(Ht)Wt=D.y[C];else if(Vt){if(0===C||C===G-1)continue;Wt=D.y[C]}else if(D.yCenter)Wt=D.yCenter[C];else{if(C+1===G&&void 0===D.y[C+1])continue;Wt=(D.y[C]+D.y[C+1])/2}var Xt=Math.round(M.c2p(Wt));if(!(0>Xt||Xt>M._length))for(P=Gt;P<Zt;P++){var Jt;if(Ht)Jt=D.x[P];else if(Vt){if(0===P||P===Z-1)continue;Jt=D.x[P]}else if(D.xCenter)Jt=D.xCenter[P];else{if(P+1===Z&&void 0===D.x[P+1])continue;Jt=(D.x[P]+D.x[P+1])/2}var Kt=Math.round(A.c2p(Jt));if(!(0>Kt||Kt>A._length)){var $t=c({x:Jt,y:Wt},z,t._fullLayout);$t.x=Jt,$t.y=Wt;var Qt=D.z[C][P];void 0===Qt?($t.z=\\\"\\\",$t.zLabel=\\\"\\\"):($t.z=Qt,$t.zLabel=s.tickText(Ut,Qt,\\\"hover\\\").text);var te=D.text&&D.text[C]&&D.text[C][P];void 0!==te&&!1!==te||(te=\\\"\\\"),$t.text=te;var ee=l.texttemplateString(Nt,$t,t._fullLayout._d3locale,$t,z._meta||{});if(ee){var re=ee.split(\\\"<br>\\\"),ne=re.length,ie=0;for(O=0;O<ne;O++)ie=Math.max(ie,re[O].length);Yt.push({l:ne,c:ie,t:ee,x:Kt,y:Xt,z:Qt})}}}}var ae=z.textfont,oe=ae.family,se=ae.size,le=t._fullLayout.font.size;if(!se||\\\"auto\\\"===se){var ue=1/0,ce=1/0,fe=0,he=0;for(O=0;O<Yt.length;O++){var pe=Yt[O];if(fe=Math.max(fe,pe.l),he=Math.max(he,pe.c),O<Yt.length-1){var de=Yt[O+1],ve=Math.abs(de.x-pe.x),ge=Math.abs(de.y-pe.y);ve&&(ue=Math.min(ue,ve)),ge&&(ce=Math.min(ce,ge))}}isFinite(ue)&&isFinite(ce)?(ue-=R,ce-=F,ue/=he,ce/=fe,ue/=v/2,ce/=v,se=Math.min(Math.floor(ue),Math.floor(ce),le)):se=le}if(se<=0||!isFinite(se))return;x(I).data(Yt).enter().append(\\\"g\\\").classed(m,1).append(\\\"text\\\").attr(\\\"text-anchor\\\",\\\"middle\\\").each((function(e){var r=n.select(this),i=ae.color;i&&\\\"auto\\\"!==i||(i=f.contrast(\\\"rgba(\\\"+at(e.z).join()+\\\")\\\")),r.attr(\\\"data-notex\\\",1).call(u.positionText,function(t){return t.x}(e),function(t){return t.y-se*(t.l*v/2-1)}(e)).call(o.font,oe,se,i).text(e.t).call(u.convertToTspans,t)}))}}))}},70035:function(t,e,r){\\\"use strict\\\";var n=r(39898);t.exports=function(t){n.select(t).selectAll(\\\".hm image\\\").style(\\\"opacity\\\",(function(t){return t.trace.opacity}))}},49901:function(t){\\\"use strict\\\";t.exports=function(t,e,r){!1===r(\\\"zsmooth\\\")&&(r(\\\"xgap\\\"),r(\\\"ygap\\\")),r(\\\"zhoverformat\\\")}},67684:function(t,e,r){\\\"use strict\\\";var n=r(92770),i=r(71828),a=r(73972);function o(t,e){var r=e(t);return\\\"scaled\\\"===(r?e(t+\\\"type\\\",\\\"array\\\"):\\\"scaled\\\")&&(e(t+\\\"0\\\"),e(\\\"d\\\"+t)),r}t.exports=function(t,e,r,s,l,u){var c,f,h=r(\\\"z\\\");if(l=l||\\\"x\\\",u=u||\\\"y\\\",void 0===h||!h.length)return 0;if(i.isArray1D(t.z)){c=r(l),f=r(u);var p=i.minRowLength(c),d=i.minRowLength(f);if(0===p||0===d)return 0;e._length=Math.min(p,d,h.length)}else{if(c=o(l,r),f=o(u,r),!function(t){for(var e,r=!0,a=!1,o=!1,s=0;s<t.length;s++){if(e=t[s],!i.isArrayOrTypedArray(e)){r=!1;break}e.length>0&&(a=!0);for(var l=0;l<e.length;l++)if(n(e[l])){o=!0;break}}return r&&a&&o}(h))return 0;r(\\\"transpose\\\"),e._length=null}return\\\"heatmapgl\\\"===t.type||a.getComponentMethod(\\\"calendars\\\",\\\"handleTraceDefaults\\\")(t,e,[l,u],s),!0}},16063:function(t,e,r){\\\"use strict\\\";for(var n=r(21606),i=r(50693),a=r(1426).extendFlat,o=r(30962).overrideAll,s=[\\\"z\\\",\\\"x\\\",\\\"x0\\\",\\\"dx\\\",\\\"y\\\",\\\"y0\\\",\\\"dy\\\",\\\"text\\\",\\\"transpose\\\",\\\"xtype\\\",\\\"ytype\\\"],l={},u=0;u<s.length;u++){var c=s[u];l[c]=n[c]}l.zsmooth={valType:\\\"enumerated\\\",values:[\\\"fast\\\",!1],dflt:\\\"fast\\\",editType:\\\"calc\\\"},a(l,i(\\\"\\\",{cLetter:\\\"z\\\",autoColorDflt:!1})),t.exports=o(l,\\\"calc\\\",\\\"nested\\\")},59560:function(t,e,r){\\\"use strict\\\";var n=r(9330).gl_heatmap2d,i=r(89298),a=r(78614);function o(t,e){this.scene=t,this.uid=e,this.type=\\\"heatmapgl\\\",this.name=\\\"\\\",this.hoverinfo=\\\"all\\\",this.xData=[],this.yData=[],this.zData=[],this.textLabels=[],this.idToIndex=[],this.bounds=[0,0,0,0],this.options={zsmooth:\\\"fast\\\",z:[],x:[],y:[],shape:[0,0],colorLevels:[0],colorValues:[0,0,0,1]},this.heatmap=n(t.glplot,this.options),this.heatmap._trace=this}var s=o.prototype;s.handlePick=function(t){var e=this.options,r=e.shape,n=t.pointId,i=n%r[0],a=Math.floor(n/r[0]),o=n;return{trace:this,dataCoord:t.dataCoord,traceCoord:[e.x[i],e.y[a],e.z[o]],textLabel:this.textLabels[n],name:this.name,pointIndex:[a,i],hoverinfo:this.hoverinfo}},s.update=function(t,e){var r=e[0];this.index=t.index,this.name=t.name,this.hoverinfo=t.hoverinfo;var n=r.z;this.options.z=[].concat.apply([],n);var o=n[0].length,s=n.length;this.options.shape=[o,s],this.options.x=r.x,this.options.y=r.y,this.options.zsmooth=t.zsmooth;var l=function(t){for(var e=t.colorscale,r=t.zmin,n=t.zmax,i=e.length,o=new Array(i),s=new Array(4*i),l=0;l<i;l++){var u=e[l],c=a(u[1]);o[l]=r+u[0]*(n-r);for(var f=0;f<4;f++)s[4*l+f]=c[f]}return{colorLevels:o,colorValues:s}}(t);this.options.colorLevels=l.colorLevels,this.options.colorValues=l.colorValues,this.textLabels=[].concat.apply([],t.text),this.heatmap.update(this.options);var u,c,f=this.scene.xaxis,h=this.scene.yaxis;!1===t.zsmooth&&(u={ppad:r.x[1]-r.x[0]},c={ppad:r.y[1]-r.y[0]}),t._extremes[f._id]=i.findExtremes(f,r.x,u),t._extremes[h._id]=i.findExtremes(h,r.y,c)},s.dispose=function(){this.heatmap.dispose()},t.exports=function(t,e,r){var n=new o(t,e.uid);return n.update(e,r),n}},19600:function(t,e,r){\\\"use strict\\\";var n=r(71828),i=r(67684),a=r(1586),o=r(16063);t.exports=function(t,e,r,s){function l(r,i){return n.coerce(t,e,o,r,i)}i(t,e,l,s)?(l(\\\"text\\\"),l(\\\"zsmooth\\\"),a(t,e,s,l,{prefix:\\\"\\\",cLetter:\\\"z\\\"})):e.visible=!1}},3325:function(t,e,r){\\\"use strict\\\";[\\\"*heatmapgl* trace is deprecated!\\\",\\\"Please consider switching to the *heatmap* or *image* trace types.\\\",\\\"Alternatively you could contribute/sponsor rewriting this trace type\\\",\\\"based on cartesian features and using regl framework.\\\"].join(\\\" \\\"),t.exports={attributes:r(16063),supplyDefaults:r(19600),colorbar:r(61243),calc:r(90757),plot:r(59560),moduleType:\\\"trace\\\",name:\\\"heatmapgl\\\",basePlotModule:r(4796),categories:[\\\"gl\\\",\\\"gl2d\\\",\\\"2dMap\\\"],meta:{}}},7745:function(t,e,r){\\\"use strict\\\";var n=r(1486),i=r(12663).axisHoverFormat,a=r(5386).fF,o=r(5386).si,s=r(41940),l=r(17656),u=r(72406),c=r(1426).extendFlat;t.exports={x:{valType:\\\"data_array\\\",editType:\\\"calc+clearAxisTypes\\\"},y:{valType:\\\"data_array\\\",editType:\\\"calc+clearAxisTypes\\\"},xhoverformat:i(\\\"x\\\"),yhoverformat:i(\\\"y\\\"),text:c({},n.text,{}),hovertext:c({},n.hovertext,{}),orientation:n.orientation,histfunc:{valType:\\\"enumerated\\\",values:[\\\"count\\\",\\\"sum\\\",\\\"avg\\\",\\\"min\\\",\\\"max\\\"],dflt:\\\"count\\\",editType:\\\"calc\\\"},histnorm:{valType:\\\"enumerated\\\",values:[\\\"\\\",\\\"percent\\\",\\\"probability\\\",\\\"density\\\",\\\"probability density\\\"],dflt:\\\"\\\",editType:\\\"calc\\\"},cumulative:{enabled:{valType:\\\"boolean\\\",dflt:!1,editType:\\\"calc\\\"},direction:{valType:\\\"enumerated\\\",values:[\\\"increasing\\\",\\\"decreasing\\\"],dflt:\\\"increasing\\\",editType:\\\"calc\\\"},currentbin:{valType:\\\"enumerated\\\",values:[\\\"include\\\",\\\"exclude\\\",\\\"half\\\"],dflt:\\\"include\\\",editType:\\\"calc\\\"},editType:\\\"calc\\\"},nbinsx:{valType:\\\"integer\\\",min:0,dflt:0,editType:\\\"calc\\\"},xbins:l(\\\"x\\\",!0),nbinsy:{valType:\\\"integer\\\",min:0,dflt:0,editType:\\\"calc\\\"},ybins:l(\\\"y\\\",!0),autobinx:{valType:\\\"boolean\\\",dflt:null,editType:\\\"calc\\\"},autobiny:{valType:\\\"boolean\\\",dflt:null,editType:\\\"calc\\\"},bingroup:{valType:\\\"string\\\",dflt:\\\"\\\",editType:\\\"calc\\\"},hovertemplate:a({},{keys:u.eventDataKeys}),texttemplate:o({arrayOk:!1,editType:\\\"plot\\\"},{keys:[\\\"label\\\",\\\"value\\\"]}),textposition:c({},n.textposition,{arrayOk:!1}),textfont:s({arrayOk:!1,editType:\\\"plot\\\",colorEditType:\\\"style\\\"}),outsidetextfont:s({arrayOk:!1,editType:\\\"plot\\\",colorEditType:\\\"style\\\"}),insidetextfont:s({arrayOk:!1,editType:\\\"plot\\\",colorEditType:\\\"style\\\"}),insidetextanchor:n.insidetextanchor,textangle:n.textangle,cliponaxis:n.cliponaxis,constraintext:n.constraintext,marker:n.marker,offsetgroup:n.offsetgroup,alignmentgroup:n.alignmentgroup,selected:n.selected,unselected:n.unselected,_deprecated:{bardir:n._deprecated.bardir}}},42174:function(t){\\\"use strict\\\";t.exports=function(t,e){for(var r=t.length,n=0,i=0;i<r;i++)e[i]?(t[i]/=e[i],n+=t[i]):t[i]=null;return n}},17656:function(t){\\\"use strict\\\";t.exports=function(t,e){return{start:{valType:\\\"any\\\",editType:\\\"calc\\\"},end:{valType:\\\"any\\\",editType:\\\"calc\\\"},size:{valType:\\\"any\\\",editType:\\\"calc\\\"},editType:\\\"calc\\\"}}},59575:function(t,e,r){\\\"use strict\\\";var n=r(92770);t.exports={count:function(t,e,r){return r[t]++,1},sum:function(t,e,r,i){var a=i[e];return n(a)?(a=Number(a),r[t]+=a,a):0},avg:function(t,e,r,i,a){var o=i[e];return n(o)&&(o=Number(o),r[t]+=o,a[t]++),0},min:function(t,e,r,i){var a=i[e];if(n(a)){if(a=Number(a),!n(r[t]))return r[t]=a,a;if(r[t]>a){var o=a-r[t];return r[t]=a,o}}return 0},max:function(t,e,r,i){var a=i[e];if(n(a)){if(a=Number(a),!n(r[t]))return r[t]=a,a;if(r[t]<a){var o=a-r[t];return r[t]=a,o}}return 0}}},40965:function(t,e,r){\\\"use strict\\\";var n=r(50606),i=n.ONEAVGYEAR,a=n.ONEAVGMONTH,o=n.ONEDAY,s=n.ONEHOUR,l=n.ONEMIN,u=n.ONESEC,c=r(89298).tickIncrement;function f(t,e,r,n){if(t*e<=0)return 1/0;for(var i=Math.abs(e-t),a=\\\"date\\\"===r.type,o=h(i,a),s=0;s<10;s++){var l=h(80*o,a);if(o===l)break;if(!p(l,t,e,a,r,n))break;o=l}return o}function h(t,e){return e&&t>u?t>o?t>1.1*i?i:t>1.1*a?a:o:t>s?s:t>l?l:u:Math.pow(10,Math.floor(Math.log(t)/Math.LN10))}function p(t,e,r,n,a,s){if(n&&t>o){var l=d(e,a,s),u=d(r,a,s),c=t===i?0:1;return l[c]!==u[c]}return Math.floor(r/t)-Math.floor(e/t)>.1}function d(t,e,r){var n=e.c2d(t,i,r).split(\\\"-\\\");return\\\"\\\"===n[0]&&(n.unshift(),n[0]=\\\"-\\\"+n[0]),n}t.exports=function(t,e,r,n,a){var s,l,u=-1.1*e,h=-.1*e,p=t-h,d=r[0],v=r[1],g=Math.min(f(d+h,d+p,n,a),f(v+h,v+p,n,a)),y=Math.min(f(d+u,d+h,n,a),f(v+u,v+h,n,a));if(g>y&&y<Math.abs(v-d)/4e3?(s=g,l=!1):(s=Math.min(g,y),l=!0),\\\"date\\\"===n.type&&s>o){var m=s===i?1:6,x=s===i?\\\"M12\\\":\\\"M1\\\";return function(e,r){var o=n.c2d(e,i,a),s=o.indexOf(\\\"-\\\",m);s>0&&(o=o.substr(0,s));var u=n.d2c(o,0,a);if(u<e){var f=c(u,x,!1,a);(u+f)/2<e+t&&(u=f)}return r&&l?c(u,x,!0,a):u}}return function(e,r){var n=s*Math.round(e/s);return n+s/10<e&&n+.9*s<e+t&&(n+=s),r&&l&&(n-=s),n}}},72138:function(t,e,r){\\\"use strict\\\";var n=r(92770),i=r(71828),a=r(73972),o=r(89298),s=r(75341),l=r(59575),u=r(36362),c=r(42174),f=r(40965);function h(t,e,r,s,l){var u,c,f,p,d,v,g,y=s+\\\"bins\\\",m=t._fullLayout,x=e[\\\"_\\\"+s+\\\"bingroup\\\"],b=m._histogramBinOpts[x],_=\\\"overlay\\\"===m.barmode,w=function(t){return r.r2c(t,0,p)},T=function(t){return r.c2r(t,0,p)},k=\\\"date\\\"===r.type?function(t){return t||0===t?i.cleanDate(t,null,p):null}:function(t){return n(t)?Number(t):null};function A(t,e,r){e[t+\\\"Found\\\"]?(e[t]=k(e[t]),null===e[t]&&(e[t]=r[t])):(v[t]=e[t]=r[t],i.nestedProperty(c[0],y+\\\".\\\"+t).set(r[t]))}if(e[\\\"_\\\"+s+\\\"autoBinFinished\\\"])delete e[\\\"_\\\"+s+\\\"autoBinFinished\\\"];else{c=b.traces;var M=[],S=!0,E=!1,L=!1;for(u=0;u<c.length;u++)if((f=c[u]).visible){var C=b.dirs[u];d=f[\\\"_\\\"+C+\\\"pos0\\\"]=r.makeCalcdata(f,C),M=i.concat(M,d),delete f[\\\"_\\\"+s+\\\"autoBinFinished\\\"],!0===e.visible&&(S?S=!1:(delete f._autoBin,f[\\\"_\\\"+s+\\\"autoBinFinished\\\"]=1),a.traceIs(f,\\\"2dMap\\\")&&(E=!0),\\\"histogram2dcontour\\\"===f.type&&(L=!0))}p=c[0][s+\\\"calendar\\\"];var P=o.autoBin(M,r,b.nbins,E,p,b.sizeFound&&b.size),O=c[0]._autoBin={};if(v=O[b.dirs[0]]={},L&&(b.size||(P.start=T(o.tickIncrement(w(P.start),P.size,!0,p))),void 0===b.end&&(P.end=T(o.tickIncrement(w(P.end),P.size,!1,p)))),_&&!a.traceIs(e,\\\"2dMap\\\")&&0===P._dataSpan&&\\\"category\\\"!==r.type&&\\\"multicategory\\\"!==r.type){if(l)return[P,d,!0];P=function(t,e,r,n,a){var o,s,l,u=t._fullLayout,c=function(t,e){for(var r=e.xaxis,n=e.yaxis,i=e.orientation,a=[],o=t._fullData,s=0;s<o.length;s++){var l=o[s];\\\"histogram\\\"===l.type&&!0===l.visible&&l.orientation===i&&l.xaxis===r&&l.yaxis===n&&a.push(l)}return a}(t,e),f=!1,p=1/0,d=[e];for(o=0;o<c.length;o++)if((s=c[o])===e)f=!0;else if(f){var v=h(t,s,r,n,!0),g=v[0],y=v[2];s[\\\"_\\\"+n+\\\"autoBinFinished\\\"]=1,s[\\\"_\\\"+n+\\\"pos0\\\"]=v[1],y?d.push(s):p=Math.min(p,g.size)}else l=u._histogramBinOpts[s[\\\"_\\\"+n+\\\"bingroup\\\"]],p=Math.min(p,l.size||s[a].size);var m=new Array(d.length);for(o=0;o<d.length;o++)for(var x=d[o][\\\"_\\\"+n+\\\"pos0\\\"],b=0;b<x.length;b++)if(void 0!==x[b]){m[o]=x[b];break}for(isFinite(p)||(p=i.distinctVals(m).minDiff),o=0;o<d.length;o++){var _=(s=d[o])[n+\\\"calendar\\\"],w={start:r.c2r(m[o]-p/2,0,_),end:r.c2r(m[o]+p/2,0,_),size:p};s._input[a]=s[a]=w,(l=u._histogramBinOpts[s[\\\"_\\\"+n+\\\"bingroup\\\"]])&&i.extendFlat(l,w)}return e[a]}(t,e,r,s,y)}(g=f.cumulative||{}).enabled&&\\\"include\\\"!==g.currentbin&&(\\\"decreasing\\\"===g.direction?P.start=T(o.tickIncrement(w(P.start),P.size,!0,p)):P.end=T(o.tickIncrement(w(P.end),P.size,!1,p))),b.size=P.size,b.sizeFound||(v.size=P.size,i.nestedProperty(c[0],y+\\\".size\\\").set(P.size)),A(\\\"start\\\",b,P),A(\\\"end\\\",b,P)}d=e[\\\"_\\\"+s+\\\"pos0\\\"],delete e[\\\"_\\\"+s+\\\"pos0\\\"];var I=e._input[y]||{},D=i.extendFlat({},b),z=b.start,R=r.r2l(I.start),F=void 0!==R;if((b.startFound||F)&&R!==r.r2l(z)){var B=F?R:i.aggNums(Math.min,null,d),N={type:\\\"category\\\"===r.type||\\\"multicategory\\\"===r.type?\\\"linear\\\":r.type,r2l:r.r2l,dtick:b.size,tick0:z,calendar:p,range:[B,o.tickIncrement(B,b.size,!1,p)].map(r.l2r)},j=o.tickFirst(N);j>r.r2l(B)&&(j=o.tickIncrement(j,b.size,!0,p)),D.start=r.l2r(j),F||i.nestedProperty(e,y+\\\".start\\\").set(D.start)}var U=b.end,V=r.r2l(I.end),H=void 0!==V;if((b.endFound||H)&&V!==r.r2l(U)){var q=H?V:i.aggNums(Math.max,null,d);D.end=r.l2r(q),H||i.nestedProperty(e,y+\\\".start\\\").set(D.end)}var G=\\\"autobin\\\"+s;return!1===e._input[G]&&(e._input[y]=i.extendFlat({},e[y]||{}),delete e._input[G],delete e[G]),[D,d]}t.exports={calc:function(t,e){var r,a,p,d,v=[],g=[],y=\\\"h\\\"===e.orientation,m=o.getFromId(t,y?e.yaxis:e.xaxis),x=y?\\\"y\\\":\\\"x\\\",b={x:\\\"y\\\",y:\\\"x\\\"}[x],_=e[x+\\\"calendar\\\"],w=e.cumulative,T=h(t,e,m,x),k=T[0],A=T[1],M=\\\"string\\\"==typeof k.size,S=[],E=M?S:k,L=[],C=[],P=[],O=0,I=e.histnorm,D=e.histfunc,z=-1!==I.indexOf(\\\"density\\\");w.enabled&&z&&(I=I.replace(/ ?density$/,\\\"\\\"),z=!1);var R,F=\\\"max\\\"===D||\\\"min\\\"===D?null:0,B=l.count,N=u[I],j=!1,U=function(t){return m.r2c(t,0,_)};for(i.isArrayOrTypedArray(e[b])&&\\\"count\\\"!==D&&(R=e[b],j=\\\"avg\\\"===D,B=l[D]),r=U(k.start),p=U(k.end)+(r-o.tickIncrement(r,k.size,!1,_))/1e6;r<p&&v.length<1e6&&(a=o.tickIncrement(r,k.size,!1,_),v.push((r+a)/2),g.push(F),P.push([]),S.push(r),z&&L.push(1/(a-r)),j&&C.push(0),!(a<=r));)r=a;S.push(r),M||\\\"date\\\"!==m.type||(E={start:U(E.start),end:U(E.end),size:E.size}),t._fullLayout._roundFnOpts||(t._fullLayout._roundFnOpts={});var V=e[\\\"_\\\"+x+\\\"bingroup\\\"],H={leftGap:1/0,rightGap:1/0};V&&(t._fullLayout._roundFnOpts[V]||(t._fullLayout._roundFnOpts[V]=H),H=t._fullLayout._roundFnOpts[V]);var q,G=g.length,Z=!0,Y=H.leftGap,W=H.rightGap,X={};for(r=0;r<A.length;r++){var J=A[r];(d=i.findBin(J,E))>=0&&d<G&&(O+=B(d,r,g,R,C),Z&&P[d].length&&J!==A[P[d][0]]&&(Z=!1),P[d].push(r),X[r]=d,Y=Math.min(Y,J-S[d]),W=Math.min(W,S[d+1]-J))}H.leftGap=Y,H.rightGap=W,Z||(q=function(e,r){return function(){var n=t._fullLayout._roundFnOpts[V];return f(n.leftGap,n.rightGap,S,m,_)(e,r)}}),j&&(O=c(g,C)),N&&N(g,O,L),w.enabled&&function(t,e,r){var n,i,a;function o(e){a=t[e],t[e]/=2}function s(e){i=t[e],t[e]=a+i/2,a+=i}if(\\\"half\\\"===r)if(\\\"increasing\\\"===e)for(o(0),n=1;n<t.length;n++)s(n);else for(o(t.length-1),n=t.length-2;n>=0;n--)s(n);else if(\\\"increasing\\\"===e){for(n=1;n<t.length;n++)t[n]+=t[n-1];\\\"exclude\\\"===r&&(t.unshift(0),t.pop())}else{for(n=t.length-2;n>=0;n--)t[n]+=t[n+1];\\\"exclude\\\"===r&&(t.push(0),t.shift())}}(g,w.direction,w.currentbin);var K=Math.min(v.length,g.length),$=[],Q=0,tt=K-1;for(r=0;r<K;r++)if(g[r]){Q=r;break}for(r=K-1;r>=Q;r--)if(g[r]){tt=r;break}for(r=Q;r<=tt;r++)if(n(v[r])&&n(g[r])){var et={p:v[r],s:g[r],b:0};w.enabled||(et.pts=P[r],Z?et.ph0=et.ph1=P[r].length?A[P[r][0]]:v[r]:(e._computePh=!0,et.ph0=q(S[r]),et.ph1=q(S[r+1],!0))),$.push(et)}return 1===$.length&&($[0].width1=o.tickIncrement($[0].p,k.size,!1,_)-$[0].p),s($,e),i.isArrayOrTypedArray(e.selectedpoints)&&i.tagSelected($,e,X),$},calcAllAutoBins:h}},72406:function(t){\\\"use strict\\\";t.exports={eventDataKeys:[\\\"binNumber\\\"]}},82222:function(t,e,r){\\\"use strict\\\";var n=r(71828),i=r(41675),a=r(73972).traceIs,o=r(26125),s=n.nestedProperty,l=r(99082).getAxisGroup,u=[{aStr:{x:\\\"xbins.start\\\",y:\\\"ybins.start\\\"},name:\\\"start\\\"},{aStr:{x:\\\"xbins.end\\\",y:\\\"ybins.end\\\"},name:\\\"end\\\"},{aStr:{x:\\\"xbins.size\\\",y:\\\"ybins.size\\\"},name:\\\"size\\\"},{aStr:{x:\\\"nbinsx\\\",y:\\\"nbinsy\\\"},name:\\\"nbins\\\"}],c=[\\\"x\\\",\\\"y\\\"];t.exports=function(t,e){var r,f,h,p,d,v,g,y=e._histogramBinOpts={},m=[],x={},b=[];function _(t,e){return n.coerce(r._input,r,r._module.attributes,t,e)}function w(t){return\\\"v\\\"===t.orientation?\\\"x\\\":\\\"y\\\"}function T(t,r,a){var o=t.uid+\\\"__\\\"+a;r||(r=o);var s=function(t,r){return i.getFromTrace({_fullLayout:e},t,r).type}(t,a),l=t[a+\\\"calendar\\\"]||\\\"\\\",u=y[r],c=!0;u&&(s===u.axType&&l===u.calendar?(c=!1,u.traces.push(t),u.dirs.push(a)):(r=o,s!==u.axType&&n.warn([\\\"Attempted to group the bins of trace\\\",t.index,\\\"set on a\\\",\\\"type:\\\"+s,\\\"axis\\\",\\\"with bins on\\\",\\\"type:\\\"+u.axType,\\\"axis.\\\"].join(\\\" \\\")),l!==u.calendar&&n.warn([\\\"Attempted to group the bins of trace\\\",t.index,\\\"set with a\\\",l,\\\"calendar\\\",\\\"with bins\\\",u.calendar?\\\"on a \\\"+u.calendar+\\\" calendar\\\":\\\"w/o a set calendar\\\"].join(\\\" \\\")))),c&&(y[r]={traces:[t],dirs:[a],axType:s,calendar:t[a+\\\"calendar\\\"]||\\\"\\\"}),t[\\\"_\\\"+a+\\\"bingroup\\\"]=r}for(d=0;d<t.length;d++)r=t[d],a(r,\\\"histogram\\\")&&(m.push(r),delete r._xautoBinFinished,delete r._yautoBinFinished,a(r,\\\"2dMap\\\")||o(r._input,r,e,_));var k=e._alignmentOpts||{};for(d=0;d<m.length;d++){if(r=m[d],h=\\\"\\\",!a(r,\\\"2dMap\\\")){if(p=w(r),\\\"group\\\"===e.barmode&&r.alignmentgroup){var A=r[p+\\\"axis\\\"],M=l(e,A)+r.orientation;(k[M]||{})[r.alignmentgroup]&&(h=M)}h||\\\"overlay\\\"===e.barmode||(h=l(e,r.xaxis)+l(e,r.yaxis)+w(r))}h?(x[h]||(x[h]=[]),x[h].push(r)):b.push(r)}for(h in x)if(1!==(f=x[h]).length){var S=!1;for(f.length&&(r=f[0],S=_(\\\"bingroup\\\")),h=S||h,d=0;d<f.length;d++){var E=(r=f[d])._input.bingroup;E&&E!==h&&n.warn([\\\"Trace\\\",r.index,\\\"must match\\\",\\\"within bingroup\\\",h+\\\".\\\",\\\"Ignoring its bingroup:\\\",E,\\\"setting.\\\"].join(\\\" \\\")),r.bingroup=h,T(r,h,w(r))}}else b.push(f[0]);for(d=0;d<b.length;d++){r=b[d];var L=_(\\\"bingroup\\\");if(a(r,\\\"2dMap\\\"))for(g=0;g<2;g++){var C=_((p=c[g])+\\\"bingroup\\\",L?L+\\\"__\\\"+p:null);T(r,C,p)}else T(r,L,w(r))}for(h in y){var P=y[h];for(f=P.traces,v=0;v<u.length;v++){var O,I,D=u[v],z=D.name;if(\\\"nbins\\\"!==z||!P.sizeFound){for(d=0;d<f.length;d++){if(r=f[d],p=P.dirs[d],O=D.aStr[p],void 0!==s(r._input,O).get()){P[z]=_(O),P[z+\\\"Found\\\"]=!0;break}(I=(r._autoBin||{})[p]||{})[z]&&s(r,O).set(I[z])}if(\\\"start\\\"===z||\\\"end\\\"===z)for(;d<f.length;d++)(r=f[d])[\\\"_\\\"+p+\\\"bingroup\\\"]&&_(O,(I=(r._autoBin||{})[p]||{})[z]);\\\"nbins\\\"!==z||P.sizeFound||P.nbinsFound||(r=f[0],P[z]=_(O))}}}}},11385:function(t,e,r){\\\"use strict\\\";var n=r(73972),i=r(71828),a=r(7901),o=r(90769).handleText,s=r(98340),l=r(7745);t.exports=function(t,e,r,u){function c(r,n){return i.coerce(t,e,l,r,n)}var f=c(\\\"x\\\"),h=c(\\\"y\\\");c(\\\"cumulative.enabled\\\")&&(c(\\\"cumulative.direction\\\"),c(\\\"cumulative.currentbin\\\")),c(\\\"text\\\");var p=c(\\\"textposition\\\");o(t,e,u,c,p,{moduleHasSelected:!0,moduleHasUnselected:!0,moduleHasConstrain:!0,moduleHasCliponaxis:!0,moduleHasTextangle:!0,moduleHasInsideanchor:!0}),c(\\\"hovertext\\\"),c(\\\"hovertemplate\\\"),c(\\\"xhoverformat\\\"),c(\\\"yhoverformat\\\");var d=c(\\\"orientation\\\",h&&!f?\\\"h\\\":\\\"v\\\"),v=\\\"v\\\"===d?\\\"x\\\":\\\"y\\\",g=\\\"v\\\"===d?\\\"y\\\":\\\"x\\\",y=f&&h?Math.min(i.minRowLength(f)&&i.minRowLength(h)):i.minRowLength(e[v]||[]);if(y){e._length=y,n.getComponentMethod(\\\"calendars\\\",\\\"handleTraceDefaults\\\")(t,e,[\\\"x\\\",\\\"y\\\"],u),e[g]&&c(\\\"histfunc\\\"),c(\\\"histnorm\\\"),c(\\\"autobin\\\"+v),s(t,e,c,r,u),i.coerceSelectionMarkerOpacity(e,c);var m=(e.marker.line||{}).color,x=n.getComponentMethod(\\\"errorbars\\\",\\\"supplyDefaults\\\");x(t,e,m||a.defaultLine,{axis:\\\"y\\\"}),x(t,e,m||a.defaultLine,{axis:\\\"x\\\",inherit:\\\"y\\\"})}else e.visible=!1}},84402:function(t){\\\"use strict\\\";t.exports=function(t,e,r,n,i){if(t.x=\\\"xVal\\\"in e?e.xVal:e.x,t.y=\\\"yVal\\\"in e?e.yVal:e.y,\\\"zLabelVal\\\"in e&&(t.z=e.zLabelVal),e.xa&&(t.xaxis=e.xa),e.ya&&(t.yaxis=e.ya),!(r.cumulative||{}).enabled){var a,o=Array.isArray(i)?n[0].pts[i[0]][i[1]]:n[i].pts;if(t.pointNumbers=o,t.binNumber=t.pointNumber,delete t.pointNumber,delete t.pointIndex,r._indexToPoints){a=[];for(var s=0;s<o.length;s++)a=a.concat(r._indexToPoints[o[s]])}else a=o;t.pointIndices=a}return t}},76440:function(t,e,r){\\\"use strict\\\";var n=r(95423).hoverPoints,i=r(89298).hoverLabelText;t.exports=function(t,e,r,a,o){var s=n(t,e,r,a,o);if(s){var l=(t=s[0]).cd[t.index],u=t.cd[0].trace;if(!u.cumulative.enabled){var c=\\\"h\\\"===u.orientation?\\\"y\\\":\\\"x\\\";t[c+\\\"Label\\\"]=i(t[c+\\\"a\\\"],[l.ph0,l.ph1],u[c+\\\"hoverformat\\\"])}return s}}},36071:function(t,e,r){\\\"use strict\\\";t.exports={attributes:r(7745),layoutAttributes:r(43641),supplyDefaults:r(11385),crossTraceDefaults:r(82222),supplyLayoutDefaults:r(13957),calc:r(72138).calc,crossTraceCalc:r(11661).crossTraceCalc,plot:r(17295).plot,layerName:\\\"barlayer\\\",style:r(16688).style,styleOnSelect:r(16688).styleOnSelect,colorbar:r(4898),hoverPoints:r(76440),selectPoints:r(81974),eventData:r(84402),moduleType:\\\"trace\\\",name:\\\"histogram\\\",basePlotModule:r(93612),categories:[\\\"bar-like\\\",\\\"cartesian\\\",\\\"svg\\\",\\\"bar\\\",\\\"histogram\\\",\\\"oriented\\\",\\\"errorBarsOK\\\",\\\"showLegend\\\"],meta:{}}},36362:function(t){\\\"use strict\\\";t.exports={percent:function(t,e){for(var r=t.length,n=100/e,i=0;i<r;i++)t[i]*=n},probability:function(t,e){for(var r=t.length,n=0;n<r;n++)t[n]/=e},density:function(t,e,r,n){var i=t.length;n=n||1;for(var a=0;a<i;a++)t[a]*=r[a]*n},\\\"probability density\\\":function(t,e,r,n){var i=t.length;n&&(e/=n);for(var a=0;a<i;a++)t[a]*=r[a]/e}}},35361:function(t,e,r){\\\"use strict\\\";var n=r(7745),i=r(17656),a=r(21606),o=r(9012),s=r(12663).axisHoverFormat,l=r(5386).fF,u=r(5386).si,c=r(50693),f=r(1426).extendFlat;t.exports=f({x:n.x,y:n.y,z:{valType:\\\"data_array\\\",editType:\\\"calc\\\"},marker:{color:{valType:\\\"data_array\\\",editType:\\\"calc\\\"},editType:\\\"calc\\\"},histnorm:n.histnorm,histfunc:n.histfunc,nbinsx:n.nbinsx,xbins:i(\\\"x\\\"),nbinsy:n.nbinsy,ybins:i(\\\"y\\\"),autobinx:n.autobinx,autobiny:n.autobiny,bingroup:f({},n.bingroup,{}),xbingroup:f({},n.bingroup,{}),ybingroup:f({},n.bingroup,{}),xgap:a.xgap,ygap:a.ygap,zsmooth:a.zsmooth,xhoverformat:s(\\\"x\\\"),yhoverformat:s(\\\"y\\\"),zhoverformat:s(\\\"z\\\",1),hovertemplate:l({},{keys:\\\"z\\\"}),texttemplate:u({arrayOk:!1,editType:\\\"plot\\\"},{keys:\\\"z\\\"}),textfont:a.textfont,showlegend:f({},o.showlegend,{dflt:!1})},c(\\\"\\\",{cLetter:\\\"z\\\",autoColorDflt:!1}))},17562:function(t,e,r){\\\"use strict\\\";var n=r(71828),i=r(89298),a=r(59575),o=r(36362),s=r(42174),l=r(40965),u=r(72138).calcAllAutoBins;function c(t,e,r,n){var i,a=new Array(t);if(n)for(i=0;i<t;i++)a[i]=1/(e[i+1]-e[i]);else{var o=1/r;for(i=0;i<t;i++)a[i]=o}return a}function f(t,e){return{start:t(e.start),end:t(e.end),size:e.size}}function h(t,e,r,n,i,a){var o,s=t.length-1,u=new Array(s),c=l(r,n,t,i,a);for(o=0;o<s;o++){var f=(e||[])[o];u[o]=void 0===f?[c(t[o]),c(t[o+1],!0)]:[f,f]}return u}t.exports=function(t,e){var r,l,p,d,v=i.getFromId(t,e.xaxis),g=i.getFromId(t,e.yaxis),y=e.xcalendar,m=e.ycalendar,x=function(t){return v.r2c(t,0,y)},b=function(t){return g.r2c(t,0,m)},_=u(t,e,v,\\\"x\\\"),w=_[0],T=_[1],k=u(t,e,g,\\\"y\\\"),A=k[0],M=k[1],S=e._length;T.length>S&&T.splice(S,T.length-S),M.length>S&&M.splice(S,M.length-S);var E=[],L=[],C=[],P=\\\"string\\\"==typeof w.size,O=\\\"string\\\"==typeof A.size,I=[],D=[],z=P?I:w,R=O?D:A,F=0,B=[],N=[],j=e.histnorm,U=e.histfunc,V=-1!==j.indexOf(\\\"density\\\"),H=\\\"max\\\"===U||\\\"min\\\"===U?null:0,q=a.count,G=o[j],Z=!1,Y=[],W=[],X=\\\"z\\\"in e?e.z:\\\"marker\\\"in e&&Array.isArray(e.marker.color)?e.marker.color:\\\"\\\";X&&\\\"count\\\"!==U&&(Z=\\\"avg\\\"===U,q=a[U]);var J=w.size,K=x(w.start),$=x(w.end)+(K-i.tickIncrement(K,J,!1,y))/1e6;for(r=K;r<$;r=i.tickIncrement(r,J,!1,y))L.push(H),I.push(r),Z&&C.push(0);I.push(r);var Q,tt=L.length,et=(r-K)/tt,rt=(Q=K+et/2,v.c2r(Q,0,y)),nt=A.size,it=b(A.start),at=b(A.end)+(it-i.tickIncrement(it,nt,!1,m))/1e6;for(r=it;r<at;r=i.tickIncrement(r,nt,!1,m)){E.push(L.slice()),D.push(r);var ot=new Array(tt);for(l=0;l<tt;l++)ot[l]=[];N.push(ot),Z&&B.push(C.slice())}D.push(r);var st=E.length,lt=(r-it)/st,ut=function(t){return g.c2r(t,0,m)}(it+lt/2);V&&(Y=c(L.length,z,et,P),W=c(E.length,R,lt,O)),P||\\\"date\\\"!==v.type||(z=f(x,z)),O||\\\"date\\\"!==g.type||(R=f(b,R));var ct=!0,ft=!0,ht=new Array(tt),pt=new Array(st),dt=1/0,vt=1/0,gt=1/0,yt=1/0;for(r=0;r<S;r++){var mt=T[r],xt=M[r];p=n.findBin(mt,z),d=n.findBin(xt,R),p>=0&&p<tt&&d>=0&&d<st&&(F+=q(p,r,E[d],X,B[d]),N[d][p].push(r),ct&&(void 0===ht[p]?ht[p]=mt:ht[p]!==mt&&(ct=!1)),ft&&(void 0===pt[d]?pt[d]=xt:pt[d]!==xt&&(ft=!1)),dt=Math.min(dt,mt-I[p]),vt=Math.min(vt,I[p+1]-mt),gt=Math.min(gt,xt-D[d]),yt=Math.min(yt,D[d+1]-xt))}if(Z)for(d=0;d<st;d++)F+=s(E[d],B[d]);if(G)for(d=0;d<st;d++)G(E[d],F,Y,W[d]);return{x:T,xRanges:h(I,ct&&ht,dt,vt,v,y),x0:rt,dx:et,y:M,yRanges:h(D,ft&&pt,gt,yt,g,m),y0:ut,dy:lt,z:E,pts:N}}},93888:function(t,e,r){\\\"use strict\\\";var n=r(71828),i=r(75238),a=r(49901),o=r(1586),s=r(58623),l=r(35361);t.exports=function(t,e,r,u){function c(r,i){return n.coerce(t,e,l,r,i)}i(t,e,c,u),!1!==e.visible&&(a(t,e,c,u),o(t,e,u,c,{prefix:\\\"\\\",cLetter:\\\"z\\\"}),c(\\\"hovertemplate\\\"),s(c,u),c(\\\"xhoverformat\\\"),c(\\\"yhoverformat\\\"))}},76128:function(t,e,r){\\\"use strict\\\";var n=r(46248),i=r(89298).hoverLabelText;t.exports=function(t,e,r,a,o){var s=n(t,e,r,a,o);if(s){var l=(t=s[0]).index,u=l[0],c=l[1],f=t.cd[0],h=f.trace,p=f.xRanges[c],d=f.yRanges[u];return t.xLabel=i(t.xa,[p[0],p[1]],h.xhoverformat),t.yLabel=i(t.ya,[d[0],d[1]],h.yhoverformat),s}}},43905:function(t,e,r){\\\"use strict\\\";t.exports={attributes:r(35361),supplyDefaults:r(93888),crossTraceDefaults:r(82222),calc:r(90757),plot:r(50347),layerName:\\\"heatmaplayer\\\",colorbar:r(61243),style:r(70035),hoverPoints:r(76128),eventData:r(84402),moduleType:\\\"trace\\\",name:\\\"histogram2d\\\",basePlotModule:r(93612),categories:[\\\"cartesian\\\",\\\"svg\\\",\\\"2dMap\\\",\\\"histogram\\\",\\\"showLegend\\\"],meta:{}}},75238:function(t,e,r){\\\"use strict\\\";var n=r(73972),i=r(71828);t.exports=function(t,e,r,a){var o=r(\\\"x\\\"),s=r(\\\"y\\\"),l=i.minRowLength(o),u=i.minRowLength(s);l&&u?(e._length=Math.min(l,u),n.getComponentMethod(\\\"calendars\\\",\\\"handleTraceDefaults\\\")(t,e,[\\\"x\\\",\\\"y\\\"],a),(r(\\\"z\\\")||r(\\\"marker.color\\\"))&&r(\\\"histfunc\\\"),r(\\\"histnorm\\\"),r(\\\"autobinx\\\"),r(\\\"autobiny\\\")):e.visible=!1}},99066:function(t,e,r){\\\"use strict\\\";var n=r(35361),i=r(70600),a=r(50693),o=r(12663).axisHoverFormat,s=r(1426).extendFlat;t.exports=s({x:n.x,y:n.y,z:n.z,marker:n.marker,histnorm:n.histnorm,histfunc:n.histfunc,nbinsx:n.nbinsx,xbins:n.xbins,nbinsy:n.nbinsy,ybins:n.ybins,autobinx:n.autobinx,autobiny:n.autobiny,bingroup:n.bingroup,xbingroup:n.xbingroup,ybingroup:n.ybingroup,autocontour:i.autocontour,ncontours:i.ncontours,contours:i.contours,line:{color:i.line.color,width:s({},i.line.width,{dflt:.5}),dash:i.line.dash,smoothing:i.line.smoothing,editType:\\\"plot\\\"},xhoverformat:o(\\\"x\\\"),yhoverformat:o(\\\"y\\\"),zhoverformat:o(\\\"z\\\",1),hovertemplate:n.hovertemplate,texttemplate:i.texttemplate,textfont:i.textfont},a(\\\"\\\",{cLetter:\\\"z\\\",editTypeOverride:\\\"calc\\\"}))},62654:function(t,e,r){\\\"use strict\\\";var n=r(71828),i=r(75238),a=r(67217),o=r(8724),s=r(58623),l=r(99066);t.exports=function(t,e,r,u){function c(r,i){return n.coerce(t,e,l,r,i)}i(t,e,c,u),!1!==e.visible&&(a(t,e,c,(function(r){return n.coerce2(t,e,l,r)})),o(t,e,c,u),c(\\\"xhoverformat\\\"),c(\\\"yhoverformat\\\"),c(\\\"hovertemplate\\\"),e.contours&&\\\"heatmap\\\"===e.contours.coloring&&s(c,u))}},35902:function(t,e,r){\\\"use strict\\\";t.exports={attributes:r(99066),supplyDefaults:r(62654),crossTraceDefaults:r(82222),calc:r(27529),plot:r(29854).plot,layerName:\\\"contourlayer\\\",style:r(84426),colorbar:r(90654),hoverPoints:r(52421),moduleType:\\\"trace\\\",name:\\\"histogram2dcontour\\\",basePlotModule:r(93612),categories:[\\\"cartesian\\\",\\\"svg\\\",\\\"2dMap\\\",\\\"contour\\\",\\\"histogram\\\",\\\"showLegend\\\"],meta:{}}},46291:function(t,e,r){\\\"use strict\\\";var n=r(5386).fF,i=r(5386).si,a=r(50693),o=r(27670).Y,s=r(34e3),l=r(57564),u=r(45802),c=r(43473),f=r(1426).extendFlat,h=r(79952).u;t.exports={labels:l.labels,parents:l.parents,values:l.values,branchvalues:l.branchvalues,count:l.count,level:l.level,maxdepth:l.maxdepth,tiling:{orientation:{valType:\\\"enumerated\\\",values:[\\\"v\\\",\\\"h\\\"],dflt:\\\"h\\\",editType:\\\"plot\\\"},flip:u.tiling.flip,pad:{valType:\\\"number\\\",min:0,dflt:0,editType:\\\"plot\\\"},editType:\\\"calc\\\"},marker:f({colors:l.marker.colors,line:l.marker.line,pattern:h,editType:\\\"calc\\\"},a(\\\"marker\\\",{colorAttr:\\\"colors\\\",anim:!1})),leaf:l.leaf,pathbar:u.pathbar,text:s.text,textinfo:l.textinfo,texttemplate:i({editType:\\\"plot\\\"},{keys:c.eventDataKeys.concat([\\\"label\\\",\\\"value\\\"])}),hovertext:s.hovertext,hoverinfo:l.hoverinfo,hovertemplate:n({},{keys:c.eventDataKeys}),textfont:s.textfont,insidetextfont:s.insidetextfont,outsidetextfont:u.outsidetextfont,textposition:u.textposition,sort:s.sort,root:l.root,domain:o({name:\\\"icicle\\\",trace:!0,editType:\\\"calc\\\"})}},96346:function(t,e,r){\\\"use strict\\\";var n=r(74875);e.name=\\\"icicle\\\",e.plot=function(t,r,i,a){n.plotBasePlot(e.name,t,r,i,a)},e.clean=function(t,r,i,a){n.cleanBasePlot(e.name,t,r,i,a)}},46584:function(t,e,r){\\\"use strict\\\";var n=r(52147);e.y=function(t,e){return n.calc(t,e)},e.T=function(t){return n._runCrossTraceCalc(\\\"icicle\\\",t)}},56524:function(t,e,r){\\\"use strict\\\";var n=r(71828),i=r(46291),a=r(7901),o=r(27670).c,s=r(90769).handleText,l=r(97313).TEXTPAD,u=r(37434).handleMarkerDefaults,c=r(21081),f=c.hasColorscale,h=c.handleDefaults;t.exports=function(t,e,r,c){function p(r,a){return n.coerce(t,e,i,r,a)}var d=p(\\\"labels\\\"),v=p(\\\"parents\\\");if(d&&d.length&&v&&v.length){var g=p(\\\"values\\\");g&&g.length?p(\\\"branchvalues\\\"):p(\\\"count\\\"),p(\\\"level\\\"),p(\\\"maxdepth\\\"),p(\\\"tiling.orientation\\\"),p(\\\"tiling.flip\\\"),p(\\\"tiling.pad\\\");var y=p(\\\"text\\\");p(\\\"texttemplate\\\"),e.texttemplate||p(\\\"textinfo\\\",Array.isArray(y)?\\\"text+label\\\":\\\"label\\\"),p(\\\"hovertext\\\"),p(\\\"hovertemplate\\\");var m=p(\\\"pathbar.visible\\\");s(t,e,c,p,\\\"auto\\\",{hasPathbar:m,moduleHasSelected:!1,moduleHasUnselected:!1,moduleHasConstrain:!1,moduleHasCliponaxis:!1,moduleHasTextangle:!1,moduleHasInsideanchor:!1}),p(\\\"textposition\\\"),u(t,e,c,p);var x=e._hasColorscale=f(t,\\\"marker\\\",\\\"colors\\\")||(t.marker||{}).coloraxis;x&&h(t,e,c,p,{prefix:\\\"marker.\\\",cLetter:\\\"c\\\"}),p(\\\"leaf.opacity\\\",x?1:.7),e._hovered={marker:{line:{width:2,color:a.contrast(c.paper_bgcolor)}}},m&&(p(\\\"pathbar.thickness\\\",e.pathbar.textfont.size+2*l),p(\\\"pathbar.side\\\"),p(\\\"pathbar.edgeshape\\\")),p(\\\"sort\\\"),p(\\\"root.color\\\"),o(e,c,p),e._length=null}else e.visible=!1}},90666:function(t,e,r){\\\"use strict\\\";var n=r(39898),i=r(71828),a=r(91424),o=r(63893),s=r(21538),l=r(82454).styleOne,u=r(43473),c=r(2791),f=r(83523),h=r(24714).formatSliceLabel,p=!1;t.exports=function(t,e,r,d,v){var g=v.width,y=v.height,m=v.viewX,x=v.viewY,b=v.pathSlice,_=v.toMoveInsideSlice,w=v.strTransform,T=v.hasTransition,k=v.handleSlicesExit,A=v.makeUpdateSliceInterpolator,M=v.makeUpdateTextInterpolator,S=v.prevEntry,E=t._context.staticPlot,L=t._fullLayout,C=e[0].trace,P=-1!==C.textposition.indexOf(\\\"left\\\"),O=-1!==C.textposition.indexOf(\\\"right\\\"),I=-1!==C.textposition.indexOf(\\\"bottom\\\"),D=s(r,[g,y],{flipX:C.tiling.flip.indexOf(\\\"x\\\")>-1,flipY:C.tiling.flip.indexOf(\\\"y\\\")>-1,orientation:C.tiling.orientation,pad:{inner:C.tiling.pad},maxDepth:C._maxDepth}).descendants(),z=1/0,R=-1/0;D.forEach((function(t){var e=t.depth;e>=C._maxDepth?(t.x0=t.x1=(t.x0+t.x1)/2,t.y0=t.y1=(t.y0+t.y1)/2):(z=Math.min(z,e),R=Math.max(R,e))})),d=d.data(D,c.getPtId),C._maxVisibleLayers=isFinite(R)?R-z+1:0,d.enter().append(\\\"g\\\").classed(\\\"slice\\\",!0),k(d,p,{},[g,y],b),d.order();var F=null;if(T&&S){var B=c.getPtId(S);d.each((function(t){null===F&&c.getPtId(t)===B&&(F={x0:t.x0,x1:t.x1,y0:t.y0,y1:t.y1})}))}var N=function(){return F||{x0:0,x1:g,y0:0,y1:y}},j=d;return T&&(j=j.transition().each(\\\"end\\\",(function(){var e=n.select(this);c.setSliceCursor(e,t,{hideOnRoot:!0,hideOnLeaves:!1,isTransitioning:!1})}))),j.each((function(s){s._x0=m(s.x0),s._x1=m(s.x1),s._y0=x(s.y0),s._y1=x(s.y1),s._hoverX=m(s.x1-C.tiling.pad),s._hoverY=x(I?s.y1-C.tiling.pad/2:s.y0+C.tiling.pad/2);var d=n.select(this),v=i.ensureSingle(d,\\\"path\\\",\\\"surface\\\",(function(t){t.style(\\\"pointer-events\\\",E?\\\"none\\\":\\\"all\\\")}));T?v.transition().attrTween(\\\"d\\\",(function(t){var e=A(t,p,N(),[g,y],{orientation:C.tiling.orientation,flipX:C.tiling.flip.indexOf(\\\"x\\\")>-1,flipY:C.tiling.flip.indexOf(\\\"y\\\")>-1});return function(t){return b(e(t))}})):v.attr(\\\"d\\\",b),d.call(f,r,t,e,{styleOne:l,eventDataKeys:u.eventDataKeys,transitionTime:u.CLICK_TRANSITION_TIME,transitionEasing:u.CLICK_TRANSITION_EASING}).call(c.setSliceCursor,t,{isTransitioning:t._transitioning}),v.call(l,s,C,t,{hovered:!1}),s.x0===s.x1||s.y0===s.y1?s._text=\\\"\\\":s._text=h(s,r,C,e,L)||\\\"\\\";var k=i.ensureSingle(d,\\\"g\\\",\\\"slicetext\\\"),S=i.ensureSingle(k,\\\"text\\\",\\\"\\\",(function(t){t.attr(\\\"data-notex\\\",1)})),D=i.ensureUniformFontSize(t,c.determineTextFont(C,s,L.font));S.text(s._text||\\\" \\\").classed(\\\"slicetext\\\",!0).attr(\\\"text-anchor\\\",O?\\\"end\\\":P?\\\"start\\\":\\\"middle\\\").call(a.font,D).call(o.convertToTspans,t),s.textBB=a.bBox(S.node()),s.transform=_(s,{fontSize:D.size}),s.transform.fontSize=D.size,T?S.transition().attrTween(\\\"transform\\\",(function(t){var e=M(t,p,N(),[g,y]);return function(t){return w(e(t))}})):S.attr(\\\"transform\\\",w(s))})),F}},69816:function(t,e,r){\\\"use strict\\\";t.exports={moduleType:\\\"trace\\\",name:\\\"icicle\\\",basePlotModule:r(96346),categories:[],animatable:!0,attributes:r(46291),layoutAttributes:r(92894),supplyDefaults:r(56524),supplyLayoutDefaults:r(21070),calc:r(46584).y,crossTraceCalc:r(46584).T,plot:r(85596),style:r(82454).style,colorbar:r(4898),meta:{}}},92894:function(t){\\\"use strict\\\";t.exports={iciclecolorway:{valType:\\\"colorlist\\\",editType:\\\"calc\\\"},extendiciclecolors:{valType:\\\"boolean\\\",dflt:!0,editType:\\\"calc\\\"}}},21070:function(t,e,r){\\\"use strict\\\";var n=r(71828),i=r(92894);t.exports=function(t,e){function r(r,a){return n.coerce(t,e,i,r,a)}r(\\\"iciclecolorway\\\",e.colorway),r(\\\"extendiciclecolors\\\")}},21538:function(t,e,r){\\\"use strict\\\";var n=r(674),i=r(14102);t.exports=function(t,e,r){var a=r.flipX,o=r.flipY,s=\\\"h\\\"===r.orientation,l=r.maxDepth,u=e[0],c=e[1];l&&(u=(t.height+1)*e[0]/Math.min(t.height+1,l),c=(t.height+1)*e[1]/Math.min(t.height+1,l));var f=n.partition().padding(r.pad.inner).size(s?[e[1],u]:[e[0],c])(t);return(s||a||o)&&i(f,e,{swapXY:s,flipX:a,flipY:o}),f}},85596:function(t,e,r){\\\"use strict\\\";var n=r(80694),i=r(90666);t.exports=function(t,e,r,a){return n(t,e,r,a,{type:\\\"icicle\\\",drawDescendants:i})}},82454:function(t,e,r){\\\"use strict\\\";var n=r(39898),i=r(7901),a=r(71828),o=r(72597).resizeText,s=r(43467);function l(t,e,r,n){var o=e.data.data,l=!e.children,u=o.i,c=a.castOption(r,u,\\\"marker.line.color\\\")||i.defaultLine,f=a.castOption(r,u,\\\"marker.line.width\\\")||0;t.call(s,e,r,n).style(\\\"stroke-width\\\",f).call(i.stroke,c).style(\\\"opacity\\\",l?r.leaf.opacity:null)}t.exports={style:function(t){var e=t._fullLayout._iciclelayer.selectAll(\\\".trace\\\");o(t,e,\\\"icicle\\\"),e.each((function(e){var r=n.select(this),i=e[0].trace;r.style(\\\"opacity\\\",i.opacity),r.selectAll(\\\"path.surface\\\").each((function(e){n.select(this).call(l,e,i,t)}))}))},styleOne:l}},17230:function(t,e,r){\\\"use strict\\\";for(var n=r(9012),i=r(5386).fF,a=r(1426).extendFlat,o=r(51877).colormodel,s=[\\\"rgb\\\",\\\"rgba\\\",\\\"rgba256\\\",\\\"hsl\\\",\\\"hsla\\\"],l=[],u=[],c=0;c<s.length;c++){var f=o[s[c]];l.push(\\\"For the `\\\"+s[c]+\\\"` colormodel, it is [\\\"+(f.zminDflt||f.min).join(\\\", \\\")+\\\"].\\\"),u.push(\\\"For the `\\\"+s[c]+\\\"` colormodel, it is [\\\"+(f.zmaxDflt||f.max).join(\\\", \\\")+\\\"].\\\")}t.exports=a({source:{valType:\\\"string\\\",editType:\\\"calc\\\"},z:{valType:\\\"data_array\\\",editType:\\\"calc\\\"},colormodel:{valType:\\\"enumerated\\\",values:s,editType:\\\"calc\\\"},zsmooth:{valType:\\\"enumerated\\\",values:[\\\"fast\\\",!1],dflt:!1,editType:\\\"plot\\\"},zmin:{valType:\\\"info_array\\\",items:[{valType:\\\"number\\\",editType:\\\"calc\\\"},{valType:\\\"number\\\",editType:\\\"calc\\\"},{valType:\\\"number\\\",editType:\\\"calc\\\"},{valType:\\\"number\\\",editType:\\\"calc\\\"}],editType:\\\"calc\\\"},zmax:{valType:\\\"info_array\\\",items:[{valType:\\\"number\\\",editType:\\\"calc\\\"},{valType:\\\"number\\\",editType:\\\"calc\\\"},{valType:\\\"number\\\",editType:\\\"calc\\\"},{valType:\\\"number\\\",editType:\\\"calc\\\"}],editType:\\\"calc\\\"},x0:{valType:\\\"any\\\",dflt:0,editType:\\\"calc+clearAxisTypes\\\"},y0:{valType:\\\"any\\\",dflt:0,editType:\\\"calc+clearAxisTypes\\\"},dx:{valType:\\\"number\\\",dflt:1,editType:\\\"calc\\\"},dy:{valType:\\\"number\\\",dflt:1,editType:\\\"calc\\\"},text:{valType:\\\"data_array\\\",editType:\\\"plot\\\"},hovertext:{valType:\\\"data_array\\\",editType:\\\"plot\\\"},hoverinfo:a({},n.hoverinfo,{flags:[\\\"x\\\",\\\"y\\\",\\\"z\\\",\\\"color\\\",\\\"name\\\",\\\"text\\\"],dflt:\\\"x+y+z+text+name\\\"}),hovertemplate:i({},{keys:[\\\"z\\\",\\\"color\\\",\\\"colormodel\\\"]}),transforms:void 0})},71113:function(t,e,r){\\\"use strict\\\";var n=r(71828),i=r(51877),a=r(92770),o=r(89298),s=r(71828).maxRowLength,l=r(67395).A;function u(t,e,r,i){return function(a){return n.constrain((a-t)*e,r,i)}}function c(t,e){return function(r){return n.constrain(r,t,e)}}t.exports=function(t,e){var r,n;if(e._hasZ)r=e.z.length,n=s(e.z);else if(e._hasSource){var f=l(e.source);r=f.height,n=f.width}var h,p=o.getFromId(t,e.xaxis||\\\"x\\\"),d=o.getFromId(t,e.yaxis||\\\"y\\\"),v=p.d2c(e.x0)-e.dx/2,g=d.d2c(e.y0)-e.dy/2,y=[v,v+n*e.dx],m=[g,g+r*e.dy];if(p&&\\\"log\\\"===p.type)for(h=0;h<n;h++)y.push(v+h*e.dx);if(d&&\\\"log\\\"===d.type)for(h=0;h<r;h++)m.push(g+h*e.dy);return e._extremes[p._id]=o.findExtremes(p,y),e._extremes[d._id]=o.findExtremes(d,m),e._scaler=function(t){var e=i.colormodel[t.colormodel],r=(e.colormodel||t.colormodel).length;t._sArray=[];for(var n=0;n<r;n++)e.min[n]!==t.zmin[n]||e.max[n]!==t.zmax[n]?t._sArray.push(u(t.zmin[n],(e.max[n]-e.min[n])/(t.zmax[n]-t.zmin[n]),e.min[n],e.max[n])):t._sArray.push(c(e.min[n],e.max[n]));return function(e){for(var n=e.slice(0,r),i=0;i<r;i++){var o=n[i];if(!a(o))return!1;n[i]=t._sArray[i](o)}return n}}(e),[{x0:v,y0:g,z:e.z,w:n,h:r}]}},51877:function(t){\\\"use strict\\\";t.exports={colormodel:{rgb:{min:[0,0,0],max:[255,255,255],fmt:function(t){return t.slice(0,3)},suffix:[\\\"\\\",\\\"\\\",\\\"\\\"]},rgba:{min:[0,0,0,0],max:[255,255,255,1],fmt:function(t){return t.slice(0,4)},suffix:[\\\"\\\",\\\"\\\",\\\"\\\",\\\"\\\"]},rgba256:{colormodel:\\\"rgba\\\",zminDflt:[0,0,0,0],zmaxDflt:[255,255,255,255],min:[0,0,0,0],max:[255,255,255,1],fmt:function(t){return t.slice(0,4)},suffix:[\\\"\\\",\\\"\\\",\\\"\\\",\\\"\\\"]},hsl:{min:[0,0,0],max:[360,100,100],fmt:function(t){var e=t.slice(0,3);return e[1]=e[1]+\\\"%\\\",e[2]=e[2]+\\\"%\\\",e},suffix:[\\\"°\\\",\\\"%\\\",\\\"%\\\"]},hsla:{min:[0,0,0,0],max:[360,100,100,1],fmt:function(t){var e=t.slice(0,4);return e[1]=e[1]+\\\"%\\\",e[2]=e[2]+\\\"%\\\",e},suffix:[\\\"°\\\",\\\"%\\\",\\\"%\\\",\\\"\\\"]}}}},13245:function(t,e,r){\\\"use strict\\\";var n=r(71828),i=r(17230),a=r(51877),o=r(25095).IMAGE_URL_PREFIX;t.exports=function(t,e){function r(r,a){return n.coerce(t,e,i,r,a)}r(\\\"source\\\"),e.source&&!e.source.match(o)&&delete e.source,e._hasSource=!!e.source;var s,l=r(\\\"z\\\");e._hasZ=!(void 0===l||!l.length||!l[0]||!l[0].length),e._hasZ||e._hasSource?(r(\\\"x0\\\"),r(\\\"y0\\\"),r(\\\"dx\\\"),r(\\\"dy\\\"),e._hasZ?(r(\\\"colormodel\\\",\\\"rgb\\\"),r(\\\"zmin\\\",(s=a.colormodel[e.colormodel]).zminDflt||s.min),r(\\\"zmax\\\",s.zmaxDflt||s.max)):e._hasSource&&(e.colormodel=\\\"rgba256\\\",s=a.colormodel[e.colormodel],e.zmin=s.zminDflt,e.zmax=s.zmaxDflt),r(\\\"zsmooth\\\"),r(\\\"text\\\"),r(\\\"hovertext\\\"),r(\\\"hovertemplate\\\"),e._length=null):e.visible=!1}},30835:function(t){\\\"use strict\\\";t.exports=function(t,e){return\\\"xVal\\\"in e&&(t.x=e.xVal),\\\"yVal\\\"in e&&(t.y=e.yVal),e.xa&&(t.xaxis=e.xa),e.ya&&(t.yaxis=e.ya),t.color=e.color,t.colormodel=e.trace.colormodel,t.z||(t.z=e.color),t}},67395:function(t,e,r){\\\"use strict\\\";var n=r(33575),i=r(25095).IMAGE_URL_PREFIX,a=r(12856).Buffer;e.A=function(t){var e=t.replace(i,\\\"\\\"),r=new a(e,\\\"base64\\\");return n(r)}},28749:function(t,e,r){\\\"use strict\\\";var n=r(30211),i=r(71828),a=r(51877);t.exports=function(t,e,r){var o=t.cd[0],s=o.trace,l=t.xa,u=t.ya;if(!(n.inbox(e-o.x0,e-(o.x0+o.w*s.dx),0)>0||n.inbox(r-o.y0,r-(o.y0+o.h*s.dy),0)>0)){var c,f=Math.floor((e-o.x0)/s.dx),h=Math.floor(Math.abs(r-o.y0)/s.dy);if(s._hasZ?c=o.z[h][f]:s._hasSource&&(c=s._canvas.el.getContext(\\\"2d\\\",{willReadFrequently:!0}).getImageData(f,h,1,1).data),c){var p,d=o.hi||s.hoverinfo;if(d){var v=d.split(\\\"+\\\");-1!==v.indexOf(\\\"all\\\")&&(v=[\\\"color\\\"]),-1!==v.indexOf(\\\"color\\\")&&(p=!0)}var g,y=a.colormodel[s.colormodel],m=y.colormodel||s.colormodel,x=m.length,b=s._scaler(c),_=y.suffix,w=[];(s.hovertemplate||p)&&(w.push(\\\"[\\\"+[b[0]+_[0],b[1]+_[1],b[2]+_[2]].join(\\\", \\\")),4===x&&w.push(\\\", \\\"+b[3]+_[3]),w.push(\\\"]\\\"),w=w.join(\\\"\\\"),t.extraText=m.toUpperCase()+\\\": \\\"+w),Array.isArray(s.hovertext)&&Array.isArray(s.hovertext[h])?g=s.hovertext[h][f]:Array.isArray(s.text)&&Array.isArray(s.text[h])&&(g=s.text[h][f]);var T=u.c2p(o.y0+(h+.5)*s.dy),k=o.x0+(f+.5)*s.dx,A=o.y0+(h+.5)*s.dy,M=\\\"[\\\"+c.slice(0,s.colormodel.length).join(\\\", \\\")+\\\"]\\\";return[i.extendFlat(t,{index:[h,f],x0:l.c2p(o.x0+f*s.dx),x1:l.c2p(o.x0+(f+1)*s.dx),y0:T,y1:T,color:b,xVal:k,xLabelVal:k,yVal:A,yLabelVal:A,zLabelVal:M,text:g,hovertemplateLabels:{zLabel:M,colorLabel:w,\\\"color[0]Label\\\":b[0]+_[0],\\\"color[1]Label\\\":b[1]+_[1],\\\"color[2]Label\\\":b[2]+_[2],\\\"color[3]Label\\\":b[3]+_[3]}})]}}}},94507:function(t,e,r){\\\"use strict\\\";t.exports={attributes:r(17230),supplyDefaults:r(13245),calc:r(71113),plot:r(60775),style:r(12826),hoverPoints:r(28749),eventData:r(30835),moduleType:\\\"trace\\\",name:\\\"image\\\",basePlotModule:r(93612),categories:[\\\"cartesian\\\",\\\"svg\\\",\\\"2dMap\\\",\\\"noSortingByValue\\\"],animatable:!1,meta:{}}},60775:function(t,e,r){\\\"use strict\\\";var n=r(39898),i=r(71828),a=i.strTranslate,o=r(77922),s=r(51877),l=r(3883),u=r(32396).STYLE;t.exports=function(t,e,r,c){var f=e.xaxis,h=e.yaxis,p=!t._context._exportedPlot&&l();i.makeTraceGroups(c,r,\\\"im\\\").each((function(e){var r=n.select(this),l=e[0],c=l.trace,d=(\\\"fast\\\"===c.zsmooth||!1===c.zsmooth&&p)&&!c._hasZ&&c._hasSource&&\\\"linear\\\"===f.type&&\\\"linear\\\"===h.type;c._realImage=d;var v,g,y,m,x,b,_=l.z,w=l.x0,T=l.y0,k=l.w,A=l.h,M=c.dx,S=c.dy;for(b=0;void 0===v&&b<k;)v=f.c2p(w+b*M),b++;for(b=k;void 0===g&&b>0;)g=f.c2p(w+b*M),b--;for(b=0;void 0===m&&b<A;)m=h.c2p(T+b*S),b++;for(b=A;void 0===x&&b>0;)x=h.c2p(T+b*S),b--;g<v&&(y=g,g=v,v=y),x<m&&(y=m,m=x,x=y),d||(v=Math.max(-.5*f._length,v),g=Math.min(1.5*f._length,g),m=Math.max(-.5*h._length,m),x=Math.min(1.5*h._length,x));var E=Math.round(g-v),L=Math.round(x-m);if(E<=0||L<=0)r.selectAll(\\\"image\\\").data([]).exit().remove();else{var C=r.selectAll(\\\"image\\\").data([e]);C.enter().append(\\\"svg:image\\\").attr({xmlns:o.svg,preserveAspectRatio:\\\"none\\\"}),C.exit().remove();var P=!1===c.zsmooth?u:\\\"\\\";if(d){var O=i.simpleMap(f.range,f.r2l),I=i.simpleMap(h.range,h.r2l),D=O[1]<O[0],z=I[1]>I[0];if(D||z){var R=v+E/2,F=m+L/2;P+=\\\"transform:\\\"+a(R+\\\"px\\\",F+\\\"px\\\")+\\\"scale(\\\"+(D?-1:1)+\\\",\\\"+(z?-1:1)+\\\")\\\"+a(-R+\\\"px\\\",-F+\\\"px\\\")+\\\";\\\"}}C.attr(\\\"style\\\",P);var B=new Promise((function(t){if(c._hasZ)t();else if(c._hasSource)if(c._canvas&&c._canvas.el.width===k&&c._canvas.el.height===A&&c._canvas.source===c.source)t();else{var e=document.createElement(\\\"canvas\\\");e.width=k,e.height=A;var r=e.getContext(\\\"2d\\\",{willReadFrequently:!0});c._image=c._image||new Image;var n=c._image;n.onload=function(){r.drawImage(n,0,0),c._canvas={el:e,source:c.source},t()},n.setAttribute(\\\"src\\\",c.source)}})).then((function(){var t,e;if(c._hasZ)e=N((function(t,e){return _[e][t]})),t=e.toDataURL(\\\"image/png\\\");else if(c._hasSource)if(d)t=c.source;else{var r=c._canvas.el.getContext(\\\"2d\\\",{willReadFrequently:!0}).getImageData(0,0,k,A).data;e=N((function(t,e){var n=4*(e*k+t);return[r[n],r[n+1],r[n+2],r[n+3]]})),t=e.toDataURL(\\\"image/png\\\")}C.attr({\\\"xlink:href\\\":t,height:L,width:E,x:v,y:m})}));t._promises.push(B)}function N(t){var e=document.createElement(\\\"canvas\\\");e.width=E,e.height=L;var r,n=e.getContext(\\\"2d\\\",{willReadFrequently:!0}),a=function(t){return i.constrain(Math.round(f.c2p(w+t*M)-v),0,E)},o=function(t){return i.constrain(Math.round(h.c2p(T+t*S)-m),0,L)},u=s.colormodel[c.colormodel],p=u.colormodel||c.colormodel,d=u.fmt;for(b=0;b<l.w;b++){var g=a(b),y=a(b+1);if(y!==g&&!isNaN(y)&&!isNaN(g))for(var x=0;x<l.h;x++){var _=o(x),k=o(x+1);k===_||isNaN(k)||isNaN(_)||!t(b,x)||(r=c._scaler(t(b,x)),n.fillStyle=r?p+\\\"(\\\"+d(r).join(\\\",\\\")+\\\")\\\":\\\"rgba(0,0,0,0)\\\",n.fillRect(g,_,y-g,k-_))}}return e}}))}},12826:function(t,e,r){\\\"use strict\\\";var n=r(39898);t.exports=function(t){n.select(t).selectAll(\\\".im image\\\").style(\\\"opacity\\\",(function(t){return t[0].trace.opacity}))}},54846:function(t,e,r){\\\"use strict\\\";var n=r(1426).extendFlat,i=r(1426).extendDeep,a=r(30962).overrideAll,o=r(41940),s=r(22399),l=r(27670).Y,u=r(13838),c=r(44467).templatedArray,f=r(22372),h=r(12663).descriptionOnlyNumbers,p=o({editType:\\\"plot\\\",colorEditType:\\\"plot\\\"}),d={color:{valType:\\\"color\\\",editType:\\\"plot\\\"},line:{color:{valType:\\\"color\\\",dflt:s.defaultLine,editType:\\\"plot\\\"},width:{valType:\\\"number\\\",min:0,dflt:0,editType:\\\"plot\\\"},editType:\\\"calc\\\"},thickness:{valType:\\\"number\\\",min:0,max:1,dflt:1,editType:\\\"plot\\\"},editType:\\\"calc\\\"},v={valType:\\\"info_array\\\",items:[{valType:\\\"number\\\",editType:\\\"plot\\\"},{valType:\\\"number\\\",editType:\\\"plot\\\"}],editType:\\\"plot\\\"},g=c(\\\"step\\\",i({},d,{range:v}));t.exports={mode:{valType:\\\"flaglist\\\",editType:\\\"calc\\\",flags:[\\\"number\\\",\\\"delta\\\",\\\"gauge\\\"],dflt:\\\"number\\\"},value:{valType:\\\"number\\\",editType:\\\"calc\\\",anim:!0},align:{valType:\\\"enumerated\\\",values:[\\\"left\\\",\\\"center\\\",\\\"right\\\"],editType:\\\"plot\\\"},domain:l({name:\\\"indicator\\\",trace:!0,editType:\\\"calc\\\"}),title:{text:{valType:\\\"string\\\",editType:\\\"plot\\\"},align:{valType:\\\"enumerated\\\",values:[\\\"left\\\",\\\"center\\\",\\\"right\\\"],editType:\\\"plot\\\"},font:n({},p,{}),editType:\\\"plot\\\"},number:{valueformat:{valType:\\\"string\\\",dflt:\\\"\\\",editType:\\\"plot\\\",description:h(\\\"value\\\")},font:n({},p,{}),prefix:{valType:\\\"string\\\",dflt:\\\"\\\",editType:\\\"plot\\\"},suffix:{valType:\\\"string\\\",dflt:\\\"\\\",editType:\\\"plot\\\"},editType:\\\"plot\\\"},delta:{reference:{valType:\\\"number\\\",editType:\\\"calc\\\"},position:{valType:\\\"enumerated\\\",values:[\\\"top\\\",\\\"bottom\\\",\\\"left\\\",\\\"right\\\"],dflt:\\\"bottom\\\",editType:\\\"plot\\\"},relative:{valType:\\\"boolean\\\",editType:\\\"plot\\\",dflt:!1},valueformat:{valType:\\\"string\\\",editType:\\\"plot\\\",description:h(\\\"value\\\")},increasing:{symbol:{valType:\\\"string\\\",dflt:f.INCREASING.SYMBOL,editType:\\\"plot\\\"},color:{valType:\\\"color\\\",dflt:f.INCREASING.COLOR,editType:\\\"plot\\\"},editType:\\\"plot\\\"},decreasing:{symbol:{valType:\\\"string\\\",dflt:f.DECREASING.SYMBOL,editType:\\\"plot\\\"},color:{valType:\\\"color\\\",dflt:f.DECREASING.COLOR,editType:\\\"plot\\\"},editType:\\\"plot\\\"},font:n({},p,{}),prefix:{valType:\\\"string\\\",dflt:\\\"\\\",editType:\\\"plot\\\"},suffix:{valType:\\\"string\\\",dflt:\\\"\\\",editType:\\\"plot\\\"},editType:\\\"calc\\\"},gauge:{shape:{valType:\\\"enumerated\\\",editType:\\\"plot\\\",dflt:\\\"angular\\\",values:[\\\"angular\\\",\\\"bullet\\\"]},bar:i({},d,{color:{dflt:\\\"green\\\"}}),bgcolor:{valType:\\\"color\\\",editType:\\\"plot\\\"},bordercolor:{valType:\\\"color\\\",dflt:s.defaultLine,editType:\\\"plot\\\"},borderwidth:{valType:\\\"number\\\",min:0,dflt:1,editType:\\\"plot\\\"},axis:a({range:v,visible:n({},u.visible,{dflt:!0}),tickmode:u.minor.tickmode,nticks:u.nticks,tick0:u.tick0,dtick:u.dtick,tickvals:u.tickvals,ticktext:u.ticktext,ticks:n({},u.ticks,{dflt:\\\"outside\\\"}),ticklen:u.ticklen,tickwidth:u.tickwidth,tickcolor:u.tickcolor,ticklabelstep:u.ticklabelstep,showticklabels:u.showticklabels,labelalias:u.labelalias,tickfont:o({}),tickangle:u.tickangle,tickformat:u.tickformat,tickformatstops:u.tickformatstops,tickprefix:u.tickprefix,showtickprefix:u.showtickprefix,ticksuffix:u.ticksuffix,showticksuffix:u.showticksuffix,separatethousands:u.separatethousands,exponentformat:u.exponentformat,minexponent:u.minexponent,showexponent:u.showexponent,editType:\\\"plot\\\"},\\\"plot\\\"),steps:g,threshold:{line:{color:n({},d.line.color,{}),width:n({},d.line.width,{dflt:1}),editType:\\\"plot\\\"},thickness:n({},d.thickness,{dflt:.85}),value:{valType:\\\"number\\\",editType:\\\"calc\\\",dflt:!1},editType:\\\"plot\\\"},editType:\\\"plot\\\"}}},15970:function(t,e,r){\\\"use strict\\\";var n=r(74875);e.name=\\\"indicator\\\",e.plot=function(t,r,i,a){n.plotBasePlot(e.name,t,r,i,a)},e.clean=function(t,r,i,a){n.cleanBasePlot(e.name,t,r,i,a)}},24667:function(t){\\\"use strict\\\";t.exports={calc:function(t,e){var r=[],n=e.value;\\\"number\\\"!=typeof e._lastValue&&(e._lastValue=e.value);var i=e._lastValue,a=i;return e._hasDelta&&\\\"number\\\"==typeof e.delta.reference&&(a=e.delta.reference),r[0]={y:n,lastY:i,delta:n-a,relativeDelta:(n-a)/a},r}}},84577:function(t){\\\"use strict\\\";t.exports={defaultNumberFontSize:80,bulletNumberDomainSize:.25,bulletPadding:.025,innerRadius:.75,valueThickness:.5,titlePadding:5,horizontalPadding:10}},94425:function(t,e,r){\\\"use strict\\\";var n=r(71828),i=r(54846),a=r(27670).c,o=r(44467),s=r(85501),l=r(84577),u=r(26218),c=r(38701),f=r(96115),h=r(89426);function p(t,e){function r(r,a){return n.coerce(t,e,i.gauge.steps,r,a)}r(\\\"color\\\"),r(\\\"line.color\\\"),r(\\\"line.width\\\"),r(\\\"range\\\"),r(\\\"thickness\\\")}t.exports={supplyDefaults:function(t,e,r,d){function v(r,a){return n.coerce(t,e,i,r,a)}a(e,d,v),v(\\\"mode\\\"),e._hasNumber=-1!==e.mode.indexOf(\\\"number\\\"),e._hasDelta=-1!==e.mode.indexOf(\\\"delta\\\"),e._hasGauge=-1!==e.mode.indexOf(\\\"gauge\\\");var g=v(\\\"value\\\");e._range=[0,\\\"number\\\"==typeof g?1.5*g:1];var y,m,x,b,_,w,T=new Array(2);function k(t,e){return n.coerce(x,b,i.gauge,t,e)}function A(t,e){return n.coerce(_,w,i.gauge.axis,t,e)}if(e._hasNumber&&(v(\\\"number.valueformat\\\"),v(\\\"number.font.color\\\",d.font.color),v(\\\"number.font.family\\\",d.font.family),v(\\\"number.font.size\\\"),void 0===e.number.font.size&&(e.number.font.size=l.defaultNumberFontSize,T[0]=!0),v(\\\"number.prefix\\\"),v(\\\"number.suffix\\\"),y=e.number.font.size),e._hasDelta&&(v(\\\"delta.font.color\\\",d.font.color),v(\\\"delta.font.family\\\",d.font.family),v(\\\"delta.font.size\\\"),void 0===e.delta.font.size&&(e.delta.font.size=(e._hasNumber?.5:1)*(y||l.defaultNumberFontSize),T[1]=!0),v(\\\"delta.reference\\\",e.value),v(\\\"delta.relative\\\"),v(\\\"delta.valueformat\\\",e.delta.relative?\\\"2%\\\":\\\"\\\"),v(\\\"delta.increasing.symbol\\\"),v(\\\"delta.increasing.color\\\"),v(\\\"delta.decreasing.symbol\\\"),v(\\\"delta.decreasing.color\\\"),v(\\\"delta.position\\\"),v(\\\"delta.prefix\\\"),v(\\\"delta.suffix\\\"),m=e.delta.font.size),e._scaleNumbers=(!e._hasNumber||T[0])&&(!e._hasDelta||T[1])||!1,v(\\\"title.font.color\\\",d.font.color),v(\\\"title.font.family\\\",d.font.family),v(\\\"title.font.size\\\",.25*(y||m||l.defaultNumberFontSize)),v(\\\"title.text\\\"),e._hasGauge){(x=t.gauge)||(x={}),b=o.newContainer(e,\\\"gauge\\\"),k(\\\"shape\\\"),(e._isBullet=\\\"bullet\\\"===e.gauge.shape)||v(\\\"title.align\\\",\\\"center\\\"),(e._isAngular=\\\"angular\\\"===e.gauge.shape)||v(\\\"align\\\",\\\"center\\\"),k(\\\"bgcolor\\\",d.paper_bgcolor),k(\\\"borderwidth\\\"),k(\\\"bordercolor\\\"),k(\\\"bar.color\\\"),k(\\\"bar.line.color\\\"),k(\\\"bar.line.width\\\"),k(\\\"bar.thickness\\\",l.valueThickness*(\\\"bullet\\\"===e.gauge.shape?.5:1)),s(x,b,{name:\\\"steps\\\",handleItemDefaults:p}),k(\\\"threshold.value\\\"),k(\\\"threshold.thickness\\\"),k(\\\"threshold.line.width\\\"),k(\\\"threshold.line.color\\\"),_={},x&&(_=x.axis||{}),w=o.newContainer(b,\\\"axis\\\"),A(\\\"visible\\\"),e._range=A(\\\"range\\\",e._range);var M={outerTicks:!0};u(_,w,A,\\\"linear\\\"),h(_,w,A,\\\"linear\\\",M),f(_,w,A,\\\"linear\\\",M),c(_,w,A,M)}else v(\\\"title.align\\\",\\\"center\\\"),v(\\\"align\\\",\\\"center\\\"),e._isAngular=e._isBullet=!1;e._length=null}}},15154:function(t,e,r){\\\"use strict\\\";t.exports={moduleType:\\\"trace\\\",name:\\\"indicator\\\",basePlotModule:r(15970),categories:[\\\"svg\\\",\\\"noOpacity\\\",\\\"noHover\\\"],animatable:!0,attributes:r(54846),supplyDefaults:r(94425).supplyDefaults,calc:r(24667).calc,plot:r(75634),meta:{}}},75634:function(t,e,r){\\\"use strict\\\";var n=r(39898),i=r(81684).sX,a=r(81684).k4,o=r(71828),s=o.strScale,l=o.strTranslate,u=o.rad2deg,c=r(18783).MID_SHIFT,f=r(91424),h=r(84577),p=r(63893),d=r(89298),v=r(71453),g=r(52830),y=r(13838),m=r(7901),x={left:\\\"start\\\",center:\\\"middle\\\",right:\\\"end\\\"},b={left:0,center:.5,right:1},_=/[yzafpnµmkMGTPEZY]/;function w(t){return t&&t.duration>0}function T(t){t.each((function(t){m.stroke(n.select(this),t.line.color)})).each((function(t){m.fill(n.select(this),t.color)})).style(\\\"stroke-width\\\",(function(t){return t.line.width}))}function k(t,e,r){var n=t._fullLayout,i=o.extendFlat({type:\\\"linear\\\",ticks:\\\"outside\\\",range:r,showline:!0},e),a={type:\\\"linear\\\",_id:\\\"x\\\"+e._id},s={letter:\\\"x\\\",font:n.font,noHover:!0,noTickson:!0};function l(t,e){return o.coerce(i,a,y,t,e)}return v(i,a,l,s,n),g(i,a,l,s),a}function A(t,e,r){return[Math.min(e/t.width,r/t.height),t,e+\\\"x\\\"+r]}function M(t,e,r,i){var a=document.createElementNS(\\\"http://www.w3.org/2000/svg\\\",\\\"text\\\"),o=n.select(a);return o.text(t).attr(\\\"x\\\",0).attr(\\\"y\\\",0).attr(\\\"text-anchor\\\",r).attr(\\\"data-unformatted\\\",t).call(p.convertToTspans,i).call(f.font,e),f.bBox(o.node())}function S(t,e,r,n,i,a){var s=\\\"_cache\\\"+e;t[s]&&t[s].key===i||(t[s]={key:i,value:r});var l=o.aggNums(a,null,[t[s].value,n],2);return t[s].value=l,l}t.exports=function(t,e,r,v){var g,y=t._fullLayout;w(r)&&v&&(g=v()),o.makeTraceGroups(y._indicatorlayer,e,\\\"trace\\\").each((function(e){var v,E,L,C,P,O=e[0].trace,I=n.select(this),D=O._hasGauge,z=O._isAngular,R=O._isBullet,F=O.domain,B={w:y._size.w*(F.x[1]-F.x[0]),h:y._size.h*(F.y[1]-F.y[0]),l:y._size.l+y._size.w*F.x[0],r:y._size.r+y._size.w*(1-F.x[1]),t:y._size.t+y._size.h*(1-F.y[1]),b:y._size.b+y._size.h*F.y[0]},N=B.l+B.w/2,j=B.t+B.h/2,U=Math.min(B.w/2,B.h),V=h.innerRadius*U,H=O.align||\\\"center\\\";if(E=j,D){if(z&&(v=N,E=j+U/2,L=function(t){return function(t,e){return[e/Math.sqrt(t.width/2*(t.width/2)+t.height*t.height),t,e]}(t,.9*V)}),R){var q=h.bulletPadding,G=1-h.bulletNumberDomainSize+q;v=B.l+(G+(1-G)*b[H])*B.w,L=function(t){return A(t,(h.bulletNumberDomainSize-q)*B.w,B.h)}}}else v=B.l+b[H]*B.w,L=function(t){return A(t,B.w,B.h)};!function(t,e,r,i){var u,c,h,v=r[0].trace,g=i.numbersX,y=i.numbersY,T=v.align||\\\"center\\\",A=x[T],E=i.transitionOpts,L=i.onComplete,C=o.ensureSingle(e,\\\"g\\\",\\\"numbers\\\"),P=[];v._hasNumber&&P.push(\\\"number\\\"),v._hasDelta&&(P.push(\\\"delta\\\"),\\\"left\\\"===v.delta.position&&P.reverse());var O=C.selectAll(\\\"text\\\").data(P);function I(e,r,n,i){if(!e.match(\\\"s\\\")||n>=0==i>=0||r(n).slice(-1).match(_)||r(i).slice(-1).match(_))return r;var a=e.slice().replace(\\\"s\\\",\\\"f\\\").replace(/\\\\d+/,(function(t){return parseInt(t)-1})),o=k(t,{tickformat:a});return function(t){return Math.abs(t)<1?d.tickText(o,t).text:r(t)}}O.enter().append(\\\"text\\\"),O.attr(\\\"text-anchor\\\",(function(){return A})).attr(\\\"class\\\",(function(t){return t})).attr(\\\"x\\\",null).attr(\\\"y\\\",null).attr(\\\"dx\\\",null).attr(\\\"dy\\\",null),O.exit().remove();var D,z=v.mode+v.align;if(v._hasDelta&&(D=function(){var e=k(t,{tickformat:v.delta.valueformat},v._range);e.setScale(),d.prepTicks(e);var i=function(t){return d.tickText(e,t).text},o=v.delta.suffix,s=v.delta.prefix,l=function(t){return v.delta.relative?t.relativeDelta:t.delta},u=function(t,e){return 0===t||\\\"number\\\"!=typeof t||isNaN(t)?\\\"-\\\":(t>0?v.delta.increasing.symbol:v.delta.decreasing.symbol)+s+e(t)+o},h=function(t){return t.delta>=0?v.delta.increasing.color:v.delta.decreasing.color};void 0===v._deltaLastValue&&(v._deltaLastValue=l(r[0]));var g=C.select(\\\"text.delta\\\");function y(){g.text(u(l(r[0]),i)).call(m.fill,h(r[0])).call(p.convertToTspans,t)}return g.call(f.font,v.delta.font).call(m.fill,h({delta:v._deltaLastValue})),w(E)?g.transition().duration(E.duration).ease(E.easing).tween(\\\"text\\\",(function(){var t=n.select(this),e=l(r[0]),o=v._deltaLastValue,s=I(v.delta.valueformat,i,o,e),c=a(o,e);return v._deltaLastValue=e,function(e){t.text(u(c(e),s)),t.call(m.fill,h({delta:c(e)}))}})).each(\\\"end\\\",(function(){y(),L&&L()})).each(\\\"interrupt\\\",(function(){y(),L&&L()})):y(),c=M(u(l(r[0]),i),v.delta.font,A,t),g}(),z+=v.delta.position+v.delta.font.size+v.delta.font.family+v.delta.valueformat,z+=v.delta.increasing.symbol+v.delta.decreasing.symbol,h=c),v._hasNumber&&(function(){var e=k(t,{tickformat:v.number.valueformat},v._range);e.setScale(),d.prepTicks(e);var i=function(t){return d.tickText(e,t).text},o=v.number.suffix,s=v.number.prefix,l=C.select(\\\"text.number\\\");function c(){var e=\\\"number\\\"==typeof r[0].y?s+i(r[0].y)+o:\\\"-\\\";l.text(e).call(f.font,v.number.font).call(p.convertToTspans,t)}w(E)?l.transition().duration(E.duration).ease(E.easing).each(\\\"end\\\",(function(){c(),L&&L()})).each(\\\"interrupt\\\",(function(){c(),L&&L()})).attrTween(\\\"text\\\",(function(){var t=n.select(this),e=a(r[0].lastY,r[0].y);v._lastValue=r[0].y;var l=I(v.number.valueformat,i,r[0].lastY,r[0].y);return function(r){t.text(s+l(e(r))+o)}})):c(),u=M(s+i(r[0].y)+o,v.number.font,A,t)}(),z+=v.number.font.size+v.number.font.family+v.number.valueformat+v.number.suffix+v.number.prefix,h=u),v._hasDelta&&v._hasNumber){var R,F,B=[(u.left+u.right)/2,(u.top+u.bottom)/2],N=[(c.left+c.right)/2,(c.top+c.bottom)/2],j=.75*v.delta.font.size;\\\"left\\\"===v.delta.position&&(R=S(v,\\\"deltaPos\\\",0,-1*(u.width*b[v.align]+c.width*(1-b[v.align])+j),z,Math.min),F=B[1]-N[1],h={width:u.width+c.width+j,height:Math.max(u.height,c.height),left:c.left+R,right:u.right,top:Math.min(u.top,c.top+F),bottom:Math.max(u.bottom,c.bottom+F)}),\\\"right\\\"===v.delta.position&&(R=S(v,\\\"deltaPos\\\",0,u.width*(1-b[v.align])+c.width*b[v.align]+j,z,Math.max),F=B[1]-N[1],h={width:u.width+c.width+j,height:Math.max(u.height,c.height),left:u.left,right:c.right+R,top:Math.min(u.top,c.top+F),bottom:Math.max(u.bottom,c.bottom+F)}),\\\"bottom\\\"===v.delta.position&&(R=null,F=c.height,h={width:Math.max(u.width,c.width),height:u.height+c.height,left:Math.min(u.left,c.left),right:Math.max(u.right,c.right),top:u.bottom-u.height,bottom:u.bottom+c.height}),\\\"top\\\"===v.delta.position&&(R=null,F=u.top,h={width:Math.max(u.width,c.width),height:u.height+c.height,left:Math.min(u.left,c.left),right:Math.max(u.right,c.right),top:u.bottom-u.height-c.height,bottom:u.bottom}),D.attr({dx:R,dy:F})}(v._hasNumber||v._hasDelta)&&C.attr(\\\"transform\\\",(function(){var t=i.numbersScaler(h);z+=t[2];var e,r=S(v,\\\"numbersScale\\\",1,t[0],z,Math.min);v._scaleNumbers||(r=1),e=v._isAngular?y-r*h.bottom:y-r*(h.top+h.bottom)/2,v._numbersTop=r*h.top+e;var n=h[T];\\\"center\\\"===T&&(n=(h.left+h.right)/2);var a=g-r*n;return a=S(v,\\\"numbersTranslate\\\",0,a,z,Math.max),l(a,e)+s(r)}))}(t,I,e,{numbersX:v,numbersY:E,numbersScaler:L,transitionOpts:r,onComplete:g}),D&&(C={range:O.gauge.axis.range,color:O.gauge.bgcolor,line:{color:O.gauge.bordercolor,width:0},thickness:1},P={range:O.gauge.axis.range,color:\\\"rgba(0, 0, 0, 0)\\\",line:{color:O.gauge.bordercolor,width:O.gauge.borderwidth},thickness:1});var Z=I.selectAll(\\\"g.angular\\\").data(z?e:[]);Z.exit().remove();var Y=I.selectAll(\\\"g.angularaxis\\\").data(z?e:[]);Y.exit().remove(),z&&function(t,e,r,a){var o,s,f,h,p=r[0].trace,v=a.size,g=a.radius,y=a.innerRadius,m=a.gaugeBg,x=a.gaugeOutline,b=[v.l+v.w/2,v.t+v.h/2+g/2],_=a.gauge,A=a.layer,M=a.transitionOpts,S=a.onComplete,E=Math.PI/2;function L(t){var e=p.gauge.axis.range[0],r=(t-e)/(p.gauge.axis.range[1]-e)*Math.PI-E;return r<-E?-E:r>E?E:r}function C(t){return n.svg.arc().innerRadius((y+g)/2-t/2*(g-y)).outerRadius((y+g)/2+t/2*(g-y)).startAngle(-E)}function P(t){t.attr(\\\"d\\\",(function(t){return C(t.thickness).startAngle(L(t.range[0])).endAngle(L(t.range[1]))()}))}_.enter().append(\\\"g\\\").classed(\\\"angular\\\",!0),_.attr(\\\"transform\\\",l(b[0],b[1])),A.enter().append(\\\"g\\\").classed(\\\"angularaxis\\\",!0).classed(\\\"crisp\\\",!0),A.selectAll(\\\"g.xangularaxistick,path,text\\\").remove(),(o=k(t,p.gauge.axis)).type=\\\"linear\\\",o.range=p.gauge.axis.range,o._id=\\\"xangularaxis\\\",o.ticklabeloverflow=\\\"allow\\\",o.setScale();var O=function(t){return(o.range[0]-t.x)/(o.range[1]-o.range[0])*Math.PI+Math.PI},I={},D=d.makeLabelFns(o,0).labelStandoff;I.xFn=function(t){var e=O(t);return Math.cos(e)*D},I.yFn=function(t){var e=O(t),r=Math.sin(e)>0?.2:1;return-Math.sin(e)*(D+t.fontSize*r)+Math.abs(Math.cos(e))*(t.fontSize*c)},I.anchorFn=function(t){var e=O(t),r=Math.cos(e);return Math.abs(r)<.1?\\\"middle\\\":r>0?\\\"start\\\":\\\"end\\\"},I.heightFn=function(t,e,r){var n=O(t);return-.5*(1+Math.sin(n))*r};var z=function(t){return l(b[0]+g*Math.cos(t),b[1]-g*Math.sin(t))};f=function(t){return z(O(t))};if(s=d.calcTicks(o),h=d.getTickSigns(o)[2],o.visible){h=\\\"inside\\\"===o.ticks?-1:1;var R=(o.linewidth||1)/2;d.drawTicks(t,o,{vals:s,layer:A,path:\\\"M\\\"+h*R+\\\",0h\\\"+h*o.ticklen,transFn:function(t){var e=O(t);return z(e)+\\\"rotate(\\\"+-u(e)+\\\")\\\"}}),d.drawLabels(t,o,{vals:s,layer:A,transFn:f,labelFns:I})}var F=[m].concat(p.gauge.steps),B=_.selectAll(\\\"g.bg-arc\\\").data(F);B.enter().append(\\\"g\\\").classed(\\\"bg-arc\\\",!0).append(\\\"path\\\"),B.select(\\\"path\\\").call(P).call(T),B.exit().remove();var N=C(p.gauge.bar.thickness),j=_.selectAll(\\\"g.value-arc\\\").data([p.gauge.bar]);j.enter().append(\\\"g\\\").classed(\\\"value-arc\\\",!0).append(\\\"path\\\");var U,V,H,q=j.select(\\\"path\\\");w(M)?(q.transition().duration(M.duration).ease(M.easing).each(\\\"end\\\",(function(){S&&S()})).each(\\\"interrupt\\\",(function(){S&&S()})).attrTween(\\\"d\\\",(U=N,V=L(r[0].lastY),H=L(r[0].y),function(){var t=i(V,H);return function(e){return U.endAngle(t(e))()}})),p._lastValue=r[0].y):q.attr(\\\"d\\\",\\\"number\\\"==typeof r[0].y?N.endAngle(L(r[0].y)):\\\"M0,0Z\\\"),q.call(T),j.exit().remove(),F=[];var G=p.gauge.threshold.value;(G||0===G)&&F.push({range:[G,G],color:p.gauge.threshold.color,line:{color:p.gauge.threshold.line.color,width:p.gauge.threshold.line.width},thickness:p.gauge.threshold.thickness});var Z=_.selectAll(\\\"g.threshold-arc\\\").data(F);Z.enter().append(\\\"g\\\").classed(\\\"threshold-arc\\\",!0).append(\\\"path\\\"),Z.select(\\\"path\\\").call(P).call(T),Z.exit().remove();var Y=_.selectAll(\\\"g.gauge-outline\\\").data([x]);Y.enter().append(\\\"g\\\").classed(\\\"gauge-outline\\\",!0).append(\\\"path\\\"),Y.select(\\\"path\\\").call(P).call(T),Y.exit().remove()}(t,0,e,{radius:U,innerRadius:V,gauge:Z,layer:Y,size:B,gaugeBg:C,gaugeOutline:P,transitionOpts:r,onComplete:g});var W=I.selectAll(\\\"g.bullet\\\").data(R?e:[]);W.exit().remove();var X=I.selectAll(\\\"g.bulletaxis\\\").data(R?e:[]);X.exit().remove(),R&&function(t,e,r,n){var i,a,o,s,u,c=r[0].trace,f=n.gauge,p=n.layer,v=n.gaugeBg,g=n.gaugeOutline,y=n.size,x=c.domain,b=n.transitionOpts,_=n.onComplete;f.enter().append(\\\"g\\\").classed(\\\"bullet\\\",!0),f.attr(\\\"transform\\\",l(y.l,y.t)),p.enter().append(\\\"g\\\").classed(\\\"bulletaxis\\\",!0).classed(\\\"crisp\\\",!0),p.selectAll(\\\"g.xbulletaxistick,path,text\\\").remove();var A=y.h,M=c.gauge.bar.thickness*A,S=x.x[0],E=x.x[0]+(x.x[1]-x.x[0])*(c._hasNumber||c._hasDelta?1-h.bulletNumberDomainSize:1);function L(t){t.attr(\\\"width\\\",(function(t){return Math.max(0,i.c2p(t.range[1])-i.c2p(t.range[0]))})).attr(\\\"x\\\",(function(t){return i.c2p(t.range[0])})).attr(\\\"y\\\",(function(t){return.5*(1-t.thickness)*A})).attr(\\\"height\\\",(function(t){return t.thickness*A}))}(i=k(t,c.gauge.axis))._id=\\\"xbulletaxis\\\",i.domain=[S,E],i.setScale(),a=d.calcTicks(i),o=d.makeTransTickFn(i),s=d.getTickSigns(i)[2],u=y.t+y.h,i.visible&&(d.drawTicks(t,i,{vals:\\\"inside\\\"===i.ticks?d.clipEnds(i,a):a,layer:p,path:d.makeTickPath(i,u,s),transFn:o}),d.drawLabels(t,i,{vals:a,layer:p,transFn:o,labelFns:d.makeLabelFns(i,u)}));var C=[v].concat(c.gauge.steps),P=f.selectAll(\\\"g.bg-bullet\\\").data(C);P.enter().append(\\\"g\\\").classed(\\\"bg-bullet\\\",!0).append(\\\"rect\\\"),P.select(\\\"rect\\\").call(L).call(T),P.exit().remove();var O=f.selectAll(\\\"g.value-bullet\\\").data([c.gauge.bar]);O.enter().append(\\\"g\\\").classed(\\\"value-bullet\\\",!0).append(\\\"rect\\\"),O.select(\\\"rect\\\").attr(\\\"height\\\",M).attr(\\\"y\\\",(A-M)/2).call(T),w(b)?O.select(\\\"rect\\\").transition().duration(b.duration).ease(b.easing).each(\\\"end\\\",(function(){_&&_()})).each(\\\"interrupt\\\",(function(){_&&_()})).attr(\\\"width\\\",Math.max(0,i.c2p(Math.min(c.gauge.axis.range[1],r[0].y)))):O.select(\\\"rect\\\").attr(\\\"width\\\",\\\"number\\\"==typeof r[0].y?Math.max(0,i.c2p(Math.min(c.gauge.axis.range[1],r[0].y))):0),O.exit().remove();var I=r.filter((function(){return c.gauge.threshold.value||0===c.gauge.threshold.value})),D=f.selectAll(\\\"g.threshold-bullet\\\").data(I);D.enter().append(\\\"g\\\").classed(\\\"threshold-bullet\\\",!0).append(\\\"line\\\"),D.select(\\\"line\\\").attr(\\\"x1\\\",i.c2p(c.gauge.threshold.value)).attr(\\\"x2\\\",i.c2p(c.gauge.threshold.value)).attr(\\\"y1\\\",(1-c.gauge.threshold.thickness)/2*A).attr(\\\"y2\\\",(1-(1-c.gauge.threshold.thickness)/2)*A).call(m.stroke,c.gauge.threshold.line.color).style(\\\"stroke-width\\\",c.gauge.threshold.line.width),D.exit().remove();var z=f.selectAll(\\\"g.gauge-outline\\\").data([g]);z.enter().append(\\\"g\\\").classed(\\\"gauge-outline\\\",!0).append(\\\"rect\\\"),z.select(\\\"rect\\\").call(L).call(T),z.exit().remove()}(t,0,e,{gauge:W,layer:X,size:B,gaugeBg:C,gaugeOutline:P,transitionOpts:r,onComplete:g});var J=I.selectAll(\\\"text.title\\\").data(e);J.exit().remove(),J.enter().append(\\\"text\\\").classed(\\\"title\\\",!0),J.attr(\\\"text-anchor\\\",(function(){return R?x.right:x[O.title.align]})).text(O.title.text).call(f.font,O.title.font).call(p.convertToTspans,t),J.attr(\\\"transform\\\",(function(){var t,e=B.l+B.w*b[O.title.align],r=h.titlePadding,n=f.bBox(J.node());return D?(z&&(t=O.gauge.axis.visible?f.bBox(Y.node()).top-r-n.bottom:B.t+B.h/2-U/2-n.bottom-r),R&&(t=E-(n.top+n.bottom)/2,e=B.l-h.bulletPadding*B.w)):t=O._numbersTop-r-n.bottom,l(e,t)}))}))}},16249:function(t,e,r){\\\"use strict\\\";var n=r(50693),i=r(12663).axisHoverFormat,a=r(5386).fF,o=r(2418),s=r(9012),l=r(1426).extendFlat,u=r(30962).overrideAll,c=t.exports=u(l({x:{valType:\\\"data_array\\\"},y:{valType:\\\"data_array\\\"},z:{valType:\\\"data_array\\\"},value:{valType:\\\"data_array\\\"},isomin:{valType:\\\"number\\\"},isomax:{valType:\\\"number\\\"},surface:{show:{valType:\\\"boolean\\\",dflt:!0},count:{valType:\\\"integer\\\",dflt:2,min:1},fill:{valType:\\\"number\\\",min:0,max:1,dflt:1},pattern:{valType:\\\"flaglist\\\",flags:[\\\"A\\\",\\\"B\\\",\\\"C\\\",\\\"D\\\",\\\"E\\\"],extras:[\\\"all\\\",\\\"odd\\\",\\\"even\\\"],dflt:\\\"all\\\"}},spaceframe:{show:{valType:\\\"boolean\\\",dflt:!1},fill:{valType:\\\"number\\\",min:0,max:1,dflt:.15}},slices:{x:{show:{valType:\\\"boolean\\\",dflt:!1},locations:{valType:\\\"data_array\\\",dflt:[]},fill:{valType:\\\"number\\\",min:0,max:1,dflt:1}},y:{show:{valType:\\\"boolean\\\",dflt:!1},locations:{valType:\\\"data_array\\\",dflt:[]},fill:{valType:\\\"number\\\",min:0,max:1,dflt:1}},z:{show:{valType:\\\"boolean\\\",dflt:!1},locations:{valType:\\\"data_array\\\",dflt:[]},fill:{valType:\\\"number\\\",min:0,max:1,dflt:1}}},caps:{x:{show:{valType:\\\"boolean\\\",dflt:!0},fill:{valType:\\\"number\\\",min:0,max:1,dflt:1}},y:{show:{valType:\\\"boolean\\\",dflt:!0},fill:{valType:\\\"number\\\",min:0,max:1,dflt:1}},z:{show:{valType:\\\"boolean\\\",dflt:!0},fill:{valType:\\\"number\\\",min:0,max:1,dflt:1}}},text:{valType:\\\"string\\\",dflt:\\\"\\\",arrayOk:!0},hovertext:{valType:\\\"string\\\",dflt:\\\"\\\",arrayOk:!0},hovertemplate:a(),xhoverformat:i(\\\"x\\\"),yhoverformat:i(\\\"y\\\"),zhoverformat:i(\\\"z\\\"),valuehoverformat:i(\\\"value\\\",1),showlegend:l({},s.showlegend,{dflt:!1})},n(\\\"\\\",{colorAttr:\\\"`value`\\\",showScaleDflt:!0,editTypeOverride:\\\"calc\\\"}),{opacity:o.opacity,lightposition:o.lightposition,lighting:o.lighting,flatshading:o.flatshading,contour:o.contour,hoverinfo:l({},s.hoverinfo)}),\\\"calc\\\",\\\"nested\\\");c.flatshading.dflt=!0,c.lighting.facenormalsepsilon.dflt=0,c.x.editType=c.y.editType=c.z.editType=c.value.editType=\\\"calc+clearAxisTypes\\\",c.transforms=void 0},56959:function(t,e,r){\\\"use strict\\\";var n=r(78803),i=r(88489).processGrid,a=r(88489).filter;t.exports=function(t,e){e._len=Math.min(e.x.length,e.y.length,e.z.length,e.value.length),e._x=a(e.x,e._len),e._y=a(e.y,e._len),e._z=a(e.z,e._len),e._value=a(e.value,e._len);var r=i(e);e._gridFill=r.fill,e._Xs=r.Xs,e._Ys=r.Ys,e._Zs=r.Zs,e._len=r.len;for(var o=1/0,s=-1/0,l=0;l<e._len;l++){var u=e._value[l];o=Math.min(o,u),s=Math.max(s,u)}e._minValues=o,e._maxValues=s,e._vMin=void 0===e.isomin||null===e.isomin?o:e.isomin,e._vMax=void 0===e.isomax||null===e.isomin?s:e.isomax,n(t,e,{vals:[e._vMin,e._vMax],containerStr:\\\"\\\",cLetter:\\\"c\\\"})}},22674:function(t,e,r){\\\"use strict\\\";var n=r(9330).gl_mesh3d,i=r(81697).parseColorScale,a=r(78614),o=r(21081).extractOpts,s=r(90060),l=function(t,e){for(var r=e.length-1;r>0;r--){var n=Math.min(e[r],e[r-1]),i=Math.max(e[r],e[r-1]);if(i>n&&n<t&&t<=i)return{id:r,distRatio:(i-t)/(i-n)}}return{id:0,distRatio:0}};function u(t,e,r){this.scene=t,this.uid=r,this.mesh=e,this.name=\\\"\\\",this.data=null,this.showContour=!1}var c=u.prototype;c.handlePick=function(t){if(t.object===this.mesh){var e=t.data.index,r=this.data._meshX[e],n=this.data._meshY[e],i=this.data._meshZ[e],a=this.data._Ys.length,o=this.data._Zs.length,s=l(r,this.data._Xs).id,u=l(n,this.data._Ys).id,c=l(i,this.data._Zs).id,f=t.index=c+o*u+o*a*s;t.traceCoordinate=[this.data._meshX[f],this.data._meshY[f],this.data._meshZ[f],this.data._value[f]];var h=this.data.hovertext||this.data.text;return Array.isArray(h)&&void 0!==h[f]?t.textLabel=h[f]:h&&(t.textLabel=h),!0}},c.update=function(t){var e=this.scene,r=e.fullSceneLayout;function n(t,e,r,n){return e.map((function(e){return t.d2l(e,0,n)*r}))}this.data=h(t);var l={positions:s(n(r.xaxis,t._meshX,e.dataScale[0],t.xcalendar),n(r.yaxis,t._meshY,e.dataScale[1],t.ycalendar),n(r.zaxis,t._meshZ,e.dataScale[2],t.zcalendar)),cells:s(t._meshI,t._meshJ,t._meshK),lightPosition:[t.lightposition.x,t.lightposition.y,t.lightposition.z],ambient:t.lighting.ambient,diffuse:t.lighting.diffuse,specular:t.lighting.specular,roughness:t.lighting.roughness,fresnel:t.lighting.fresnel,vertexNormalsEpsilon:t.lighting.vertexnormalsepsilon,faceNormalsEpsilon:t.lighting.facenormalsepsilon,opacity:t.opacity,contourEnable:t.contour.show,contourColor:a(t.contour.color).slice(0,3),contourWidth:t.contour.width,useFacetNormals:t.flatshading},u=o(t);l.vertexIntensity=t._meshIntensity,l.vertexIntensityBounds=[u.min,u.max],l.colormap=i(t),this.mesh.update(l)},c.dispose=function(){this.scene.glplot.remove(this.mesh),this.mesh.dispose()};var f=[\\\"xyz\\\",\\\"xzy\\\",\\\"yxz\\\",\\\"yzx\\\",\\\"zxy\\\",\\\"zyx\\\"];function h(t){t._meshI=[],t._meshJ=[],t._meshK=[];var e,r,n,i,a,o,s,u=t.surface.show,c=t.spaceframe.show,h=t.surface.fill,p=t.spaceframe.fill,d=!1,v=!1,g=0,y=t._Xs,m=t._Ys,x=t._Zs,b=y.length,_=m.length,w=x.length,T=f.indexOf(t._gridFill.replace(/-/g,\\\"\\\").replace(/\\\\+/g,\\\"\\\")),k=function(t,e,r){switch(T){case 5:return r+w*e+w*_*t;case 4:return r+w*t+w*b*e;case 3:return e+_*r+_*w*t;case 2:return e+_*t+_*b*r;case 1:return t+b*r+b*w*e;default:return t+b*e+b*_*r}},A=t._minValues,M=t._maxValues,S=t._vMin,E=t._vMax;function L(t,e,s){for(var l=o.length,u=r;u<l;u++)if(t===n[u]&&e===i[u]&&s===a[u])return u;return-1}function C(){r=e}function P(){n=[],i=[],a=[],o=[],e=0,C()}function O(t,r,s,l){return n.push(t),i.push(r),a.push(s),o.push(l),++e-1}function I(t,e,r){for(var n=[],i=0;i<t.length;i++)n[i]=t[i]*(1-r)+r*e[i];return n}function D(t){s=t}function z(t,e){return\\\"all\\\"===t||null===t||t.indexOf(e)>-1}function R(t,e){return null===t?e:t}function F(e,r,n){C();var i,a,o,l=[r],u=[n];if(s>=1)l=[r],u=[n];else if(s>0){var c=function(t,e){var r=t[0],n=t[1],i=t[2],a=function(t,e,r){for(var n=[],i=0;i<t.length;i++)n[i]=(t[i]+e[i]+r[i])/3;return n}(r,n,i),o=Math.sqrt(1-s),l=I(a,r,o),u=I(a,n,o),c=I(a,i,o),f=e[0],h=e[1],p=e[2];return{xyzv:[[r,n,u],[u,l,r],[n,i,c],[c,u,n],[i,r,l],[l,c,i]],abc:[[f,h,-1],[-1,-1,f],[h,p,-1],[-1,-1,h],[p,f,-1],[-1,-1,p]]}}(r,n);l=c.xyzv,u=c.abc}for(var f=0;f<l.length;f++){r=l[f],n=u[f];for(var h=[],p=0;p<3;p++){var d=r[p][0],v=r[p][1],y=r[p][2],m=r[p][3],x=n[p]>-1?n[p]:L(d,v,y);h[p]=x>-1?x:O(d,v,y,R(e,m))}i=h[0],a=h[1],o=h[2],t._meshI.push(i),t._meshJ.push(a),t._meshK.push(o),++g}}function B(t,e,r,n){var i=t[3];i<r&&(i=r),i>n&&(i=n);for(var a=(t[3]-i)/(t[3]-e[3]+1e-9),o=[],s=0;s<4;s++)o[s]=(1-a)*t[s]+a*e[s];return o}function N(t,e,r){return t>=e&&t<=r}function j(t){var e=.001*(E-S);return t>=S-e&&t<=E+e}function U(e){for(var r=[],n=0;n<4;n++){var i=e[n];r.push([t._x[i],t._y[i],t._z[i],t._value[i]])}return r}var V=3;function H(t,e,r,n,i,a){a||(a=1),r=[-1,-1,-1];var o=!1,s=[N(e[0][3],n,i),N(e[1][3],n,i),N(e[2][3],n,i)];if(!s[0]&&!s[1]&&!s[2])return!1;var l=function(t,e,r){return j(e[0][3])&&j(e[1][3])&&j(e[2][3])?(F(t,e,r),!0):a<V&&H(t,e,r,S,E,++a)};if(s[0]&&s[1]&&s[2])return l(t,e,r)||o;var u=!1;return[[0,1,2],[2,0,1],[1,2,0]].forEach((function(a){if(s[a[0]]&&s[a[1]]&&!s[a[2]]){var c=e[a[0]],f=e[a[1]],h=e[a[2]],p=B(h,c,n,i),d=B(h,f,n,i);o=l(t,[d,p,c],[-1,-1,r[a[0]]])||o,o=l(t,[c,f,d],[r[a[0]],r[a[1]],-1])||o,u=!0}})),u||[[0,1,2],[1,2,0],[2,0,1]].forEach((function(a){if(s[a[0]]&&!s[a[1]]&&!s[a[2]]){var c=e[a[0]],f=e[a[1]],h=e[a[2]],p=B(f,c,n,i),d=B(h,c,n,i);o=l(t,[d,p,c],[-1,-1,r[a[0]]])||o,u=!0}})),o}function q(t,e,r,n){var i=!1,a=U(e),o=[N(a[0][3],r,n),N(a[1][3],r,n),N(a[2][3],r,n),N(a[3][3],r,n)];if(!(o[0]||o[1]||o[2]||o[3]))return i;if(o[0]&&o[1]&&o[2]&&o[3])return v&&(i=function(t,e,r){var n=function(n,i,a){F(t,[e[n],e[i],e[a]],[r[n],r[i],r[a]])};n(0,1,2),n(3,0,1),n(2,3,0),n(1,2,3)}(t,a,e)||i),i;var s=!1;return[[0,1,2,3],[3,0,1,2],[2,3,0,1],[1,2,3,0]].forEach((function(l){if(o[l[0]]&&o[l[1]]&&o[l[2]]&&!o[l[3]]){var u=a[l[0]],c=a[l[1]],f=a[l[2]],h=a[l[3]];if(v)i=F(t,[u,c,f],[e[l[0]],e[l[1]],e[l[2]]])||i;else{var p=B(h,u,r,n),d=B(h,c,r,n),g=B(h,f,r,n);i=F(null,[p,d,g],[-1,-1,-1])||i}s=!0}})),s||([[0,1,2,3],[1,2,3,0],[2,3,0,1],[3,0,1,2],[0,2,3,1],[1,3,2,0]].forEach((function(l){if(o[l[0]]&&o[l[1]]&&!o[l[2]]&&!o[l[3]]){var u=a[l[0]],c=a[l[1]],f=a[l[2]],h=a[l[3]],p=B(f,u,r,n),d=B(f,c,r,n),g=B(h,c,r,n),y=B(h,u,r,n);v?(i=F(t,[u,y,p],[e[l[0]],-1,-1])||i,i=F(t,[c,d,g],[e[l[1]],-1,-1])||i):i=function(t,e,r){var n=function(t,n,i){F(null,[e[t],e[n],e[i]],[r[t],r[n],r[i]])};n(0,1,2),n(2,3,0)}(0,[p,d,g,y],[-1,-1,-1,-1])||i,s=!0}})),s||[[0,1,2,3],[1,2,3,0],[2,3,0,1],[3,0,1,2]].forEach((function(l){if(o[l[0]]&&!o[l[1]]&&!o[l[2]]&&!o[l[3]]){var u=a[l[0]],c=a[l[1]],f=a[l[2]],h=a[l[3]],p=B(c,u,r,n),d=B(f,u,r,n),g=B(h,u,r,n);v?(i=F(t,[u,p,d],[e[l[0]],-1,-1])||i,i=F(t,[u,d,g],[e[l[0]],-1,-1])||i,i=F(t,[u,g,p],[e[l[0]],-1,-1])||i):i=F(null,[p,d,g],[-1,-1,-1])||i,s=!0}}))),i}function G(t,e,r,n,i,a,o,s,l,u,c){var f=!1;return d&&(z(t,\\\"A\\\")&&(f=q(null,[e,r,n,a],u,c)||f),z(t,\\\"B\\\")&&(f=q(null,[r,n,i,l],u,c)||f),z(t,\\\"C\\\")&&(f=q(null,[r,a,o,l],u,c)||f),z(t,\\\"D\\\")&&(f=q(null,[n,a,s,l],u,c)||f),z(t,\\\"E\\\")&&(f=q(null,[r,n,a,l],u,c)||f)),v&&(f=q(t,[r,n,a,l],u,c)||f),f}function Z(t,e,r,n,i,a,o,s){return[!0===s[0]||H(t,U([e,r,n]),[e,r,n],a,o),!0===s[1]||H(t,U([n,i,e]),[n,i,e],a,o)]}function Y(t,e,r,n,i,a,o,s,l){return s?Z(t,e,r,i,n,a,o,l):Z(t,r,i,n,e,a,o,l)}function W(t,e,r,n,i,a,o){var s,l,u,c,f=!1,h=function(){f=H(t,[s,l,u],[-1,-1,-1],i,a)||f,f=H(t,[u,c,s],[-1,-1,-1],i,a)||f},p=o[0],d=o[1],v=o[2];return p&&(s=I(U([k(e,r-0,n-0)])[0],U([k(e-1,r-0,n-0)])[0],p),l=I(U([k(e,r-0,n-1)])[0],U([k(e-1,r-0,n-1)])[0],p),u=I(U([k(e,r-1,n-1)])[0],U([k(e-1,r-1,n-1)])[0],p),c=I(U([k(e,r-1,n-0)])[0],U([k(e-1,r-1,n-0)])[0],p),h()),d&&(s=I(U([k(e-0,r,n-0)])[0],U([k(e-0,r-1,n-0)])[0],d),l=I(U([k(e-0,r,n-1)])[0],U([k(e-0,r-1,n-1)])[0],d),u=I(U([k(e-1,r,n-1)])[0],U([k(e-1,r-1,n-1)])[0],d),c=I(U([k(e-1,r,n-0)])[0],U([k(e-1,r-1,n-0)])[0],d),h()),v&&(s=I(U([k(e-0,r-0,n)])[0],U([k(e-0,r-0,n-1)])[0],v),l=I(U([k(e-0,r-1,n)])[0],U([k(e-0,r-1,n-1)])[0],v),u=I(U([k(e-1,r-1,n)])[0],U([k(e-1,r-1,n-1)])[0],v),c=I(U([k(e-1,r-0,n)])[0],U([k(e-1,r-0,n-1)])[0],v),h()),f}function X(t,e,r,n,i,a,o,s,l,u,c,f){var h=t;return f?(d&&\\\"even\\\"===t&&(h=null),G(h,e,r,n,i,a,o,s,l,u,c)):(d&&\\\"odd\\\"===t&&(h=null),G(h,l,s,o,a,i,n,r,e,u,c))}function J(t,e,r,n,i){for(var a=[],o=0,s=0;s<e.length;s++)for(var l=e[s],u=1;u<w;u++)for(var c=1;c<_;c++)a.push(Y(t,k(l,c-1,u-1),k(l,c-1,u),k(l,c,u-1),k(l,c,u),r,n,(l+c+u)%2,i&&i[o]?i[o]:[])),o++;return a}function K(t,e,r,n,i){for(var a=[],o=0,s=0;s<e.length;s++)for(var l=e[s],u=1;u<b;u++)for(var c=1;c<w;c++)a.push(Y(t,k(u-1,l,c-1),k(u,l,c-1),k(u-1,l,c),k(u,l,c),r,n,(u+l+c)%2,i&&i[o]?i[o]:[])),o++;return a}function $(t,e,r,n,i){for(var a=[],o=0,s=0;s<e.length;s++)for(var l=e[s],u=1;u<_;u++)for(var c=1;c<b;c++)a.push(Y(t,k(c-1,u-1,l),k(c-1,u,l),k(c,u-1,l),k(c,u,l),r,n,(c+u+l)%2,i&&i[o]?i[o]:[])),o++;return a}function Q(t,e,r){for(var n=1;n<w;n++)for(var i=1;i<_;i++)for(var a=1;a<b;a++)X(t,k(a-1,i-1,n-1),k(a-1,i-1,n),k(a-1,i,n-1),k(a-1,i,n),k(a,i-1,n-1),k(a,i-1,n),k(a,i,n-1),k(a,i,n),e,r,(a+i+n)%2)}function tt(t,e,r,n,i,a){for(var o=[],s=0,l=0;l<e.length;l++)for(var u=e[l],c=1;c<w;c++)for(var f=1;f<_;f++)o.push(W(t,u,f,c,r,n,i[l],a&&a[s]&&a[s])),s++;return o}function et(t,e,r,n,i,a){for(var o=[],s=0,l=0;l<e.length;l++)for(var u=e[l],c=1;c<b;c++)for(var f=1;f<w;f++)o.push(W(t,c,u,f,r,n,i[l],a&&a[s]&&a[s])),s++;return o}function rt(t,e,r,n,i,a){for(var o=[],s=0,l=0;l<e.length;l++)for(var u=e[l],c=1;c<_;c++)for(var f=1;f<b;f++)o.push(W(t,f,c,u,r,n,i[l],a&&a[s]&&a[s])),s++;return o}function nt(t,e){for(var r=[],n=t;n<e;n++)r.push(n);return r}return function(){P(),function(){for(var e=0;e<b;e++)for(var r=0;r<_;r++)for(var n=0;n<w;n++){var i=k(e,r,n);O(t._x[i],t._y[i],t._z[i],t._value[i])}}();var e=null;if(c&&p&&(D(p),v=!0,Q(e,S,E),v=!1),u&&h){D(h);for(var r=t.surface.pattern,s=t.surface.count,f=0;f<s;f++){var T=1===s?.5:f/(s-1),L=(1-T)*S+T*E,C=Math.abs(L-A)>Math.abs(L-M)?[A,L]:[L,M];d=!0,Q(r,C[0],C[1]),d=!1}}var I=[[Math.min(S,M),Math.max(S,M)],[Math.min(A,E),Math.max(A,E)]];[\\\"x\\\",\\\"y\\\",\\\"z\\\"].forEach((function(r){for(var n=[],i=0;i<I.length;i++){var a=0,o=I[i][0],s=I[i][1],u=t.slices[r];if(u.show&&u.fill){D(u.fill);var c=[],f=[],h=[];if(u.locations.length)for(var p=0;p<u.locations.length;p++){var d=l(u.locations[p],\\\"x\\\"===r?y:\\\"y\\\"===r?m:x);0===d.distRatio?c.push(d.id):d.id>0&&(f.push(d.id),\\\"x\\\"===r?h.push([d.distRatio,0,0]):\\\"y\\\"===r?h.push([0,d.distRatio,0]):h.push([0,0,d.distRatio]))}else c=nt(1,\\\"x\\\"===r?b-1:\\\"y\\\"===r?_-1:w-1);f.length>0&&(n[a]=\\\"x\\\"===r?tt(e,f,o,s,h,n[a]):\\\"y\\\"===r?et(e,f,o,s,h,n[a]):rt(e,f,o,s,h,n[a]),a++),c.length>0&&(n[a]=\\\"x\\\"===r?J(e,c,o,s,n[a]):\\\"y\\\"===r?K(e,c,o,s,n[a]):$(e,c,o,s,n[a]),a++)}var v=t.caps[r];v.show&&v.fill&&(D(v.fill),n[a]=\\\"x\\\"===r?J(e,[0,b-1],o,s,n[a]):\\\"y\\\"===r?K(e,[0,_-1],o,s,n[a]):$(e,[0,w-1],o,s,n[a]),a++)}})),0===g&&P(),t._meshX=n,t._meshY=i,t._meshZ=a,t._meshIntensity=o,t._Xs=y,t._Ys=m,t._Zs=x}(),t}t.exports={findNearestOnAxis:l,generateIsoMeshes:h,createIsosurfaceTrace:function(t,e){var r=t.glplot.gl,i=n({gl:r}),a=new u(t,i,e.uid);return i._trace=a,a.update(e),t.glplot.add(i),a}}},82738:function(t,e,r){\\\"use strict\\\";var n=r(71828),i=r(73972),a=r(16249),o=r(1586);function s(t,e,r,n,a){var s=a(\\\"isomin\\\"),l=a(\\\"isomax\\\");null!=l&&null!=s&&s>l&&(e.isomin=null,e.isomax=null);var u=a(\\\"x\\\"),c=a(\\\"y\\\"),f=a(\\\"z\\\"),h=a(\\\"value\\\");u&&u.length&&c&&c.length&&f&&f.length&&h&&h.length?(i.getComponentMethod(\\\"calendars\\\",\\\"handleTraceDefaults\\\")(t,e,[\\\"x\\\",\\\"y\\\",\\\"z\\\"],n),a(\\\"valuehoverformat\\\"),[\\\"x\\\",\\\"y\\\",\\\"z\\\"].forEach((function(t){a(t+\\\"hoverformat\\\");var e=\\\"caps.\\\"+t;a(e+\\\".show\\\")&&a(e+\\\".fill\\\");var r=\\\"slices.\\\"+t;a(r+\\\".show\\\")&&(a(r+\\\".fill\\\"),a(r+\\\".locations\\\"))})),a(\\\"spaceframe.show\\\")&&a(\\\"spaceframe.fill\\\"),a(\\\"surface.show\\\")&&(a(\\\"surface.count\\\"),a(\\\"surface.fill\\\"),a(\\\"surface.pattern\\\")),a(\\\"contour.show\\\")&&(a(\\\"contour.color\\\"),a(\\\"contour.width\\\")),[\\\"text\\\",\\\"hovertext\\\",\\\"hovertemplate\\\",\\\"lighting.ambient\\\",\\\"lighting.diffuse\\\",\\\"lighting.specular\\\",\\\"lighting.roughness\\\",\\\"lighting.fresnel\\\",\\\"lighting.vertexnormalsepsilon\\\",\\\"lighting.facenormalsepsilon\\\",\\\"lightposition.x\\\",\\\"lightposition.y\\\",\\\"lightposition.z\\\",\\\"flatshading\\\",\\\"opacity\\\"].forEach((function(t){a(t)})),o(t,e,n,a,{prefix:\\\"\\\",cLetter:\\\"c\\\"}),e._length=null):e.visible=!1}t.exports={supplyDefaults:function(t,e,r,i){s(t,e,0,i,(function(r,i){return n.coerce(t,e,a,r,i)}))},supplyIsoDefaults:s}},64943:function(t,e,r){\\\"use strict\\\";t.exports={attributes:r(16249),supplyDefaults:r(82738).supplyDefaults,calc:r(56959),colorbar:{min:\\\"cmin\\\",max:\\\"cmax\\\"},plot:r(22674).createIsosurfaceTrace,moduleType:\\\"trace\\\",name:\\\"isosurface\\\",basePlotModule:r(58547),categories:[\\\"gl3d\\\",\\\"showLegend\\\"],meta:{}}},2418:function(t,e,r){\\\"use strict\\\";var n=r(50693),i=r(12663).axisHoverFormat,a=r(5386).fF,o=r(54532),s=r(9012),l=r(1426).extendFlat;t.exports=l({x:{valType:\\\"data_array\\\",editType:\\\"calc+clearAxisTypes\\\"},y:{valType:\\\"data_array\\\",editType:\\\"calc+clearAxisTypes\\\"},z:{valType:\\\"data_array\\\",editType:\\\"calc+clearAxisTypes\\\"},i:{valType:\\\"data_array\\\",editType:\\\"calc\\\"},j:{valType:\\\"data_array\\\",editType:\\\"calc\\\"},k:{valType:\\\"data_array\\\",editType:\\\"calc\\\"},text:{valType:\\\"string\\\",dflt:\\\"\\\",arrayOk:!0,editType:\\\"calc\\\"},hovertext:{valType:\\\"string\\\",dflt:\\\"\\\",arrayOk:!0,editType:\\\"calc\\\"},hovertemplate:a({editType:\\\"calc\\\"}),xhoverformat:i(\\\"x\\\"),yhoverformat:i(\\\"y\\\"),zhoverformat:i(\\\"z\\\"),delaunayaxis:{valType:\\\"enumerated\\\",values:[\\\"x\\\",\\\"y\\\",\\\"z\\\"],dflt:\\\"z\\\",editType:\\\"calc\\\"},alphahull:{valType:\\\"number\\\",dflt:-1,editType:\\\"calc\\\"},intensity:{valType:\\\"data_array\\\",editType:\\\"calc\\\"},intensitymode:{valType:\\\"enumerated\\\",values:[\\\"vertex\\\",\\\"cell\\\"],dflt:\\\"vertex\\\",editType:\\\"calc\\\"},color:{valType:\\\"color\\\",editType:\\\"calc\\\"},vertexcolor:{valType:\\\"data_array\\\",editType:\\\"calc\\\"},facecolor:{valType:\\\"data_array\\\",editType:\\\"calc\\\"},transforms:void 0},n(\\\"\\\",{colorAttr:\\\"`intensity`\\\",showScaleDflt:!0,editTypeOverride:\\\"calc\\\"}),{opacity:o.opacity,flatshading:{valType:\\\"boolean\\\",dflt:!1,editType:\\\"calc\\\"},contour:{show:l({},o.contours.x.show,{}),color:o.contours.x.color,width:o.contours.x.width,editType:\\\"calc\\\"},lightposition:{x:l({},o.lightposition.x,{dflt:1e5}),y:l({},o.lightposition.y,{dflt:1e5}),z:l({},o.lightposition.z,{dflt:0}),editType:\\\"calc\\\"},lighting:l({vertexnormalsepsilon:{valType:\\\"number\\\",min:0,max:1,dflt:1e-12,editType:\\\"calc\\\"},facenormalsepsilon:{valType:\\\"number\\\",min:0,max:1,dflt:1e-6,editType:\\\"calc\\\"},editType:\\\"calc\\\"},o.lighting),hoverinfo:l({},s.hoverinfo,{editType:\\\"calc\\\"}),showlegend:l({},s.showlegend,{dflt:!1})})},82932:function(t,e,r){\\\"use strict\\\";var n=r(78803);t.exports=function(t,e){e.intensity&&n(t,e,{vals:e.intensity,containerStr:\\\"\\\",cLetter:\\\"c\\\"})}},91134:function(t,e,r){\\\"use strict\\\";var n=r(9330).gl_mesh3d,i=r(9330).delaunay_triangulate,a=r(9330).alpha_shape,o=r(9330).convex_hull,s=r(81697).parseColorScale,l=r(78614),u=r(21081).extractOpts,c=r(90060);function f(t,e,r){this.scene=t,this.uid=r,this.mesh=e,this.name=\\\"\\\",this.color=\\\"#fff\\\",this.data=null,this.showContour=!1}var h=f.prototype;function p(t){for(var e=[],r=t.length,n=0;n<r;n++)e[n]=l(t[n]);return e}function d(t,e,r,n){for(var i=[],a=e.length,o=0;o<a;o++)i[o]=t.d2l(e[o],0,n)*r;return i}function v(t){for(var e=[],r=t.length,n=0;n<r;n++)e[n]=Math.round(t[n]);return e}function g(t,e){for(var r=t.length,n=0;n<r;n++)if(t[n]<=-.5||t[n]>=e-.5)return!1;return!0}h.handlePick=function(t){if(t.object===this.mesh){var e=t.index=t.data.index;t.data._cellCenter?t.traceCoordinate=t.data.dataCoordinate:t.traceCoordinate=[this.data.x[e],this.data.y[e],this.data.z[e]];var r=this.data.hovertext||this.data.text;return Array.isArray(r)&&void 0!==r[e]?t.textLabel=r[e]:r&&(t.textLabel=r),!0}},h.update=function(t){var e=this.scene,r=e.fullSceneLayout;this.data=t;var n,f=t.x.length,h=c(d(r.xaxis,t.x,e.dataScale[0],t.xcalendar),d(r.yaxis,t.y,e.dataScale[1],t.ycalendar),d(r.zaxis,t.z,e.dataScale[2],t.zcalendar));if(t.i&&t.j&&t.k){if(t.i.length!==t.j.length||t.j.length!==t.k.length||!g(t.i,f)||!g(t.j,f)||!g(t.k,f))return;n=c(v(t.i),v(t.j),v(t.k))}else n=0===t.alphahull?o(h):t.alphahull>0?a(t.alphahull,h):function(t,e){for(var r=[\\\"x\\\",\\\"y\\\",\\\"z\\\"].indexOf(t),n=[],a=e.length,o=0;o<a;o++)n[o]=[e[o][(r+1)%3],e[o][(r+2)%3]];return i(n)}(t.delaunayaxis,h);var y={positions:h,cells:n,lightPosition:[t.lightposition.x,t.lightposition.y,t.lightposition.z],ambient:t.lighting.ambient,diffuse:t.lighting.diffuse,specular:t.lighting.specular,roughness:t.lighting.roughness,fresnel:t.lighting.fresnel,vertexNormalsEpsilon:t.lighting.vertexnormalsepsilon,faceNormalsEpsilon:t.lighting.facenormalsepsilon,opacity:t.opacity,contourEnable:t.contour.show,contourColor:l(t.contour.color).slice(0,3),contourWidth:t.contour.width,useFacetNormals:t.flatshading};if(t.intensity){var m=u(t);this.color=\\\"#fff\\\";var x=t.intensitymode;y[x+\\\"Intensity\\\"]=t.intensity,y[x+\\\"IntensityBounds\\\"]=[m.min,m.max],y.colormap=s(t)}else t.vertexcolor?(this.color=t.vertexcolor[0],y.vertexColors=p(t.vertexcolor)):t.facecolor?(this.color=t.facecolor[0],y.cellColors=p(t.facecolor)):(this.color=t.color,y.meshColor=l(t.color));this.mesh.update(y)},h.dispose=function(){this.scene.glplot.remove(this.mesh),this.mesh.dispose()},t.exports=function(t,e){var r=t.glplot.gl,i=n({gl:r}),a=new f(t,i,e.uid);return i._trace=a,a.update(e),t.glplot.add(i),a}},58669:function(t,e,r){\\\"use strict\\\";var n=r(73972),i=r(71828),a=r(1586),o=r(2418);t.exports=function(t,e,r,s){function l(r,n){return i.coerce(t,e,o,r,n)}function u(t){var e=t.map((function(t){var e=l(t);return e&&i.isArrayOrTypedArray(e)?e:null}));return e.every((function(t){return t&&t.length===e[0].length}))&&e}u([\\\"x\\\",\\\"y\\\",\\\"z\\\"])?(u([\\\"i\\\",\\\"j\\\",\\\"k\\\"]),(!e.i||e.j&&e.k)&&(!e.j||e.k&&e.i)&&(!e.k||e.i&&e.j)?(n.getComponentMethod(\\\"calendars\\\",\\\"handleTraceDefaults\\\")(t,e,[\\\"x\\\",\\\"y\\\",\\\"z\\\"],s),[\\\"lighting.ambient\\\",\\\"lighting.diffuse\\\",\\\"lighting.specular\\\",\\\"lighting.roughness\\\",\\\"lighting.fresnel\\\",\\\"lighting.vertexnormalsepsilon\\\",\\\"lighting.facenormalsepsilon\\\",\\\"lightposition.x\\\",\\\"lightposition.y\\\",\\\"lightposition.z\\\",\\\"flatshading\\\",\\\"alphahull\\\",\\\"delaunayaxis\\\",\\\"opacity\\\"].forEach((function(t){l(t)})),l(\\\"contour.show\\\")&&(l(\\\"contour.color\\\"),l(\\\"contour.width\\\")),\\\"intensity\\\"in t?(l(\\\"intensity\\\"),l(\\\"intensitymode\\\"),a(t,e,s,l,{prefix:\\\"\\\",cLetter:\\\"c\\\"})):(e.showscale=!1,\\\"facecolor\\\"in t?l(\\\"facecolor\\\"):\\\"vertexcolor\\\"in t?l(\\\"vertexcolor\\\"):l(\\\"color\\\",r)),l(\\\"text\\\"),l(\\\"hovertext\\\"),l(\\\"hovertemplate\\\"),l(\\\"xhoverformat\\\"),l(\\\"yhoverformat\\\"),l(\\\"zhoverformat\\\"),e._length=null):e.visible=!1):e.visible=!1}},21164:function(t,e,r){\\\"use strict\\\";t.exports={attributes:r(2418),supplyDefaults:r(58669),calc:r(82932),colorbar:{min:\\\"cmin\\\",max:\\\"cmax\\\"},plot:r(91134),moduleType:\\\"trace\\\",name:\\\"mesh3d\\\",basePlotModule:r(58547),categories:[\\\"gl3d\\\",\\\"showLegend\\\"],meta:{}}},2522:function(t,e,r){\\\"use strict\\\";var n=r(71828).extendFlat,i=r(82196),a=r(12663).axisHoverFormat,o=r(79952).P,s=r(77914),l=r(22372),u=l.INCREASING.COLOR,c=l.DECREASING.COLOR,f=i.line;function h(t){return{line:{color:n({},f.color,{dflt:t}),width:f.width,dash:o,editType:\\\"style\\\"},editType:\\\"style\\\"}}t.exports={xperiod:i.xperiod,xperiod0:i.xperiod0,xperiodalignment:i.xperiodalignment,xhoverformat:a(\\\"x\\\"),yhoverformat:a(\\\"y\\\"),x:{valType:\\\"data_array\\\",editType:\\\"calc+clearAxisTypes\\\"},open:{valType:\\\"data_array\\\",editType:\\\"calc\\\"},high:{valType:\\\"data_array\\\",editType:\\\"calc\\\"},low:{valType:\\\"data_array\\\",editType:\\\"calc\\\"},close:{valType:\\\"data_array\\\",editType:\\\"calc\\\"},line:{width:n({},f.width,{}),dash:n({},o,{}),editType:\\\"style\\\"},increasing:h(u),decreasing:h(c),text:{valType:\\\"string\\\",dflt:\\\"\\\",arrayOk:!0,editType:\\\"calc\\\"},hovertext:{valType:\\\"string\\\",dflt:\\\"\\\",arrayOk:!0,editType:\\\"calc\\\"},tickwidth:{valType:\\\"number\\\",min:0,max:.5,dflt:.3,editType:\\\"calc\\\"},hoverlabel:n({},s.hoverlabel,{split:{valType:\\\"boolean\\\",dflt:!1,editType:\\\"style\\\"}})}},3485:function(t,e,r){\\\"use strict\\\";var n=r(71828),i=n._,a=r(89298),o=r(42973),s=r(50606).BADNUM;function l(t,e,r,n){return{o:t,h:e,l:r,c:n}}function u(t,e,r,o,l,u){for(var c=l.makeCalcdata(e,\\\"open\\\"),f=l.makeCalcdata(e,\\\"high\\\"),h=l.makeCalcdata(e,\\\"low\\\"),p=l.makeCalcdata(e,\\\"close\\\"),d=Array.isArray(e.text),v=Array.isArray(e.hovertext),g=!0,y=null,m=!!e.xperiodalignment,x=[],b=0;b<o.length;b++){var _=o[b],w=c[b],T=f[b],k=h[b],A=p[b];if(_!==s&&w!==s&&T!==s&&k!==s&&A!==s){A===w?null!==y&&A!==y&&(g=A>y):g=A>w,y=A;var M=u(w,T,k,A);M.pos=_,M.yc=(w+A)/2,M.i=b,M.dir=g?\\\"increasing\\\":\\\"decreasing\\\",M.x=M.pos,M.y=[k,T],m&&(M.orig_p=r[b]),d&&(M.tx=e.text[b]),v&&(M.htx=e.hovertext[b]),x.push(M)}else x.push({pos:_,empty:!0})}return e._extremes[l._id]=a.findExtremes(l,n.concat(h,f),{padded:!0}),x.length&&(x[0].t={labels:{open:i(t,\\\"open:\\\")+\\\" \\\",high:i(t,\\\"high:\\\")+\\\" \\\",low:i(t,\\\"low:\\\")+\\\" \\\",close:i(t,\\\"close:\\\")+\\\" \\\"}}),x}t.exports={calc:function(t,e){var r=a.getFromId(t,e.xaxis),i=a.getFromId(t,e.yaxis),s=function(t,e,r){var i=r._minDiff;if(!i){var a,s=t._fullData,l=[];for(i=1/0,a=0;a<s.length;a++){var u=s[a];if(\\\"ohlc\\\"===u.type&&!0===u.visible&&u.xaxis===e._id){l.push(u);var c=e.makeCalcdata(u,\\\"x\\\");u._origX=c;var f=o(r,e,\\\"x\\\",c).vals;u._xcalc=f;var h=n.distinctVals(f).minDiff;h&&isFinite(h)&&(i=Math.min(i,h))}}for(i===1/0&&(i=1),a=0;a<l.length;a++)l[a]._minDiff=i}return i*r.tickwidth}(t,r,e),c=e._minDiff;e._minDiff=null;var f=e._origX;e._origX=null;var h=e._xcalc;e._xcalc=null;var p=u(t,e,f,h,i,l);return e._extremes[r._id]=a.findExtremes(r,h,{vpad:c/2}),p.length?(n.extendFlat(p[0].t,{wHover:c/2,tickLen:s}),p):[{t:{empty:!0}}]},calcCommon:u}},16169:function(t,e,r){\\\"use strict\\\";var n=r(71828),i=r(14555),a=r(73927),o=r(2522);function s(t,e,r,n){r(n+\\\".line.color\\\"),r(n+\\\".line.width\\\",e.line.width),r(n+\\\".line.dash\\\",e.line.dash)}t.exports=function(t,e,r,l){function u(r,i){return n.coerce(t,e,o,r,i)}i(t,e,u,l)?(a(t,e,l,u,{x:!0}),u(\\\"xhoverformat\\\"),u(\\\"yhoverformat\\\"),u(\\\"line.width\\\"),u(\\\"line.dash\\\"),s(0,e,u,\\\"increasing\\\"),s(0,e,u,\\\"decreasing\\\"),u(\\\"text\\\"),u(\\\"hovertext\\\"),u(\\\"tickwidth\\\"),l._requestRangeslider[e.xaxis]=!0):e.visible=!1}},66449:function(t,e,r){\\\"use strict\\\";var n=r(89298),i=r(71828),a=r(30211),o=r(7901),s=r(71828).fillText,l=r(22372),u={increasing:l.INCREASING.SYMBOL,decreasing:l.DECREASING.SYMBOL};function c(t,e,r,n){var i,s,l=t.cd,u=t.xa,c=l[0].trace,f=l[0].t,h=c.type,p=\\\"ohlc\\\"===h?\\\"l\\\":\\\"min\\\",d=\\\"ohlc\\\"===h?\\\"h\\\":\\\"max\\\",v=f.bPos||0,g=function(t){return t.pos+v-e},y=f.bdPos||f.tickLen,m=f.wHover,x=Math.min(1,y/Math.abs(u.r2c(u.range[1])-u.r2c(u.range[0])));function b(t){var e=g(t);return a.inbox(e-m,e+m,i)}function _(t){var e=t[p],n=t[d];return e===n||a.inbox(e-r,n-r,i)}function w(t){return(b(t)+_(t))/2}i=t.maxHoverDistance-x,s=t.maxSpikeDistance-x;var T=a.getDistanceFunction(n,b,_,w);if(a.getClosest(l,T,t),!1===t.index)return null;var k=l[t.index];if(k.empty)return null;var A=c[k.dir],M=A.line.color;return o.opacity(M)&&A.line.width?t.color=M:t.color=A.fillcolor,t.x0=u.c2p(k.pos+v-y,!0),t.x1=u.c2p(k.pos+v+y,!0),t.xLabelVal=void 0!==k.orig_p?k.orig_p:k.pos,t.spikeDistance=w(k)*s/i,t.xSpike=u.c2p(k.pos,!0),t}function f(t,e,r,a){var o=t.cd,s=t.ya,l=o[0].trace,u=o[0].t,f=[],h=c(t,e,r,a);if(!h)return[];var p=o[h.index].hi||l.hoverinfo,d=p.split(\\\"+\\\");if(\\\"all\\\"!==p&&-1===d.indexOf(\\\"y\\\"))return[];for(var v=[\\\"high\\\",\\\"open\\\",\\\"close\\\",\\\"low\\\"],g={},y=0;y<v.length;y++){var m,x=v[y],b=l[x][h.index],_=s.c2p(b,!0);b in g?(m=g[b]).yLabel+=\\\"<br>\\\"+u.labels[x]+n.hoverLabelText(s,b,l.yhoverformat):((m=i.extendFlat({},h)).y0=m.y1=_,m.yLabelVal=b,m.yLabel=u.labels[x]+n.hoverLabelText(s,b,l.yhoverformat),m.name=\\\"\\\",f.push(m),g[b]=m)}return f}function h(t,e,r,i){var a=t.cd,o=t.ya,l=a[0].trace,f=a[0].t,h=c(t,e,r,i);if(!h)return[];var p=a[h.index],d=h.index=p.i,v=p.dir;function g(t){return f.labels[t]+n.hoverLabelText(o,l[t][d],l.yhoverformat)}var y=p.hi||l.hoverinfo,m=y.split(\\\"+\\\"),x=\\\"all\\\"===y,b=x||-1!==m.indexOf(\\\"y\\\"),_=x||-1!==m.indexOf(\\\"text\\\"),w=b?[g(\\\"open\\\"),g(\\\"high\\\"),g(\\\"low\\\"),g(\\\"close\\\")+\\\"  \\\"+u[v]]:[];return _&&s(p,l,w),h.extraText=w.join(\\\"<br>\\\"),h.y0=h.y1=o.c2p(p.yc,!0),[h]}t.exports={hoverPoints:function(t,e,r,n){return t.cd[0].trace.hoverlabel.split?f(t,e,r,n):h(t,e,r,n)},hoverSplit:f,hoverOnPoints:h}},54186:function(t,e,r){\\\"use strict\\\";t.exports={moduleType:\\\"trace\\\",name:\\\"ohlc\\\",basePlotModule:r(93612),categories:[\\\"cartesian\\\",\\\"svg\\\",\\\"showLegend\\\"],meta:{},attributes:r(2522),supplyDefaults:r(16169),calc:r(3485).calc,plot:r(72314),style:r(53101),hoverPoints:r(66449).hoverPoints,selectPoints:r(67324)}},14555:function(t,e,r){\\\"use strict\\\";var n=r(73972),i=r(71828);t.exports=function(t,e,r,a){var o=r(\\\"x\\\"),s=r(\\\"open\\\"),l=r(\\\"high\\\"),u=r(\\\"low\\\"),c=r(\\\"close\\\");if(r(\\\"hoverlabel.split\\\"),n.getComponentMethod(\\\"calendars\\\",\\\"handleTraceDefaults\\\")(t,e,[\\\"x\\\"],a),s&&l&&u&&c){var f=Math.min(s.length,l.length,u.length,c.length);return o&&(f=Math.min(f,i.minRowLength(o))),e._length=f,f}}},72314:function(t,e,r){\\\"use strict\\\";var n=r(39898),i=r(71828);t.exports=function(t,e,r,a){var o=e.yaxis,s=e.xaxis,l=!!s.rangebreaks;i.makeTraceGroups(a,r,\\\"trace ohlc\\\").each((function(t){var e=n.select(this),r=t[0],a=r.t;if(!0!==r.trace.visible||a.empty)e.remove();else{var u=a.tickLen,c=e.selectAll(\\\"path\\\").data(i.identity);c.enter().append(\\\"path\\\"),c.exit().remove(),c.attr(\\\"d\\\",(function(t){if(t.empty)return\\\"M0,0Z\\\";var e=s.c2p(t.pos-u,!0),r=s.c2p(t.pos+u,!0),n=l?(e+r)/2:s.c2p(t.pos,!0);return\\\"M\\\"+e+\\\",\\\"+o.c2p(t.o,!0)+\\\"H\\\"+n+\\\"M\\\"+n+\\\",\\\"+o.c2p(t.h,!0)+\\\"V\\\"+o.c2p(t.l,!0)+\\\"M\\\"+r+\\\",\\\"+o.c2p(t.c,!0)+\\\"H\\\"+n}))}}))}},67324:function(t){\\\"use strict\\\";t.exports=function(t,e){var r,n=t.cd,i=t.xaxis,a=t.yaxis,o=[],s=n[0].t.bPos||0;if(!1===e)for(r=0;r<n.length;r++)n[r].selected=0;else for(r=0;r<n.length;r++){var l=n[r];e.contains([i.c2p(l.pos+s),a.c2p(l.yc)],null,l.i,t)?(o.push({pointNumber:l.i,x:i.c2d(l.pos),y:a.c2d(l.yc)}),l.selected=1):l.selected=0}return o}},53101:function(t,e,r){\\\"use strict\\\";var n=r(39898),i=r(91424),a=r(7901);t.exports=function(t,e,r){var o=r||n.select(t).selectAll(\\\"g.ohlclayer\\\").selectAll(\\\"g.trace\\\");o.style(\\\"opacity\\\",(function(t){return t[0].trace.opacity})),o.each((function(t){var e=t[0].trace;n.select(this).selectAll(\\\"path\\\").each((function(t){if(!t.empty){var r=e[t.dir].line;n.select(this).style(\\\"fill\\\",\\\"none\\\").call(a.stroke,r.color).call(i.dashLine,r.dash,r.width).style(\\\"opacity\\\",e.selectedpoints&&!t.selected?.3:1)}}))}))}},99506:function(t,e,r){\\\"use strict\\\";var n=r(1426).extendFlat,i=r(9012),a=r(41940),o=r(50693),s=r(5386).fF,l=r(27670).Y,u=n({editType:\\\"calc\\\"},o(\\\"line\\\",{editTypeOverride:\\\"calc\\\"}),{shape:{valType:\\\"enumerated\\\",values:[\\\"linear\\\",\\\"hspline\\\"],dflt:\\\"linear\\\",editType:\\\"plot\\\"},hovertemplate:s({editType:\\\"plot\\\",arrayOk:!1},{keys:[\\\"count\\\",\\\"probability\\\"]})});t.exports={domain:l({name:\\\"parcats\\\",trace:!0,editType:\\\"calc\\\"}),hoverinfo:n({},i.hoverinfo,{flags:[\\\"count\\\",\\\"probability\\\"],editType:\\\"plot\\\",arrayOk:!1}),hoveron:{valType:\\\"enumerated\\\",values:[\\\"category\\\",\\\"color\\\",\\\"dimension\\\"],dflt:\\\"category\\\",editType:\\\"plot\\\"},hovertemplate:s({editType:\\\"plot\\\",arrayOk:!1},{keys:[\\\"count\\\",\\\"probability\\\",\\\"category\\\",\\\"categorycount\\\",\\\"colorcount\\\",\\\"bandcolorcount\\\"]}),arrangement:{valType:\\\"enumerated\\\",values:[\\\"perpendicular\\\",\\\"freeform\\\",\\\"fixed\\\"],dflt:\\\"perpendicular\\\",editType:\\\"plot\\\"},bundlecolors:{valType:\\\"boolean\\\",dflt:!0,editType:\\\"plot\\\"},sortpaths:{valType:\\\"enumerated\\\",values:[\\\"forward\\\",\\\"backward\\\"],dflt:\\\"forward\\\",editType:\\\"plot\\\"},labelfont:a({editType:\\\"calc\\\"}),tickfont:a({editType:\\\"calc\\\"}),dimensions:{_isLinkedToArray:\\\"dimension\\\",label:{valType:\\\"string\\\",editType:\\\"calc\\\"},categoryorder:{valType:\\\"enumerated\\\",values:[\\\"trace\\\",\\\"category ascending\\\",\\\"category descending\\\",\\\"array\\\"],dflt:\\\"trace\\\",editType:\\\"calc\\\"},categoryarray:{valType:\\\"data_array\\\",editType:\\\"calc\\\"},ticktext:{valType:\\\"data_array\\\",editType:\\\"calc\\\"},values:{valType:\\\"data_array\\\",dflt:[],editType:\\\"calc\\\"},displayindex:{valType:\\\"integer\\\",editType:\\\"calc\\\"},editType:\\\"calc\\\",visible:{valType:\\\"boolean\\\",dflt:!0,editType:\\\"calc\\\"}},line:u,counts:{valType:\\\"number\\\",min:0,dflt:1,arrayOk:!0,editType:\\\"calc\\\"},customdata:void 0,hoverlabel:void 0,ids:void 0,legend:void 0,legendgroup:void 0,legendrank:void 0,opacity:void 0,selectedpoints:void 0,showlegend:void 0}},27677:function(t,e,r){\\\"use strict\\\";var n=r(27659).a0,i=r(45784),a=\\\"parcats\\\";e.name=a,e.plot=function(t,e,r,o){var s=n(t.calcdata,a);if(s.length){var l=s[0];i(t,l,r,o)}},e.clean=function(t,e,r,n){var i=n._has&&n._has(\\\"parcats\\\"),a=e._has&&e._has(\\\"parcats\\\");i&&!a&&n._paperdiv.selectAll(\\\".parcats\\\").remove()}},28699:function(t,e,r){\\\"use strict\\\";var n=r(28984).wrap,i=r(52075).hasColorscale,a=r(78803),o=r(75744),s=r(91424),l=r(71828),u=r(92770);function c(t,e,r){t.valueInds.push(e),t.count+=r}function f(t,e,r){return{categoryInds:t,color:e,rawColor:r,valueInds:[],count:0}}function h(t,e,r){t.valueInds.push(e),t.count+=r}t.exports=function(t,e){var r=l.filterVisible(e.dimensions);if(0===r.length)return[];var p,d,v,g=r.map((function(t){var e;if(\\\"trace\\\"===t.categoryorder)e=null;else if(\\\"array\\\"===t.categoryorder)e=t.categoryarray;else{e=o(t.values);for(var r=!0,n=0;n<e.length;n++)if(!u(e[n])){r=!1;break}e.sort(r?l.sorterAsc:void 0),\\\"category descending\\\"===t.categoryorder&&(e=e.reverse())}return function(t,e){e=null==e?[]:e.map((function(t){return t}));var r={},n={},i=[];e.forEach((function(t,e){r[t]=0,n[t]=e}));for(var a=0;a<t.length;a++){var o,s=t[a];void 0===r[s]?(r[s]=1,o=e.push(s)-1,n[s]=o):(r[s]++,o=n[s]),i.push(o)}var l=e.map((function(t){return r[t]}));return{uniqueValues:e,uniqueCounts:l,inds:i}}(t.values,e)}));p=l.isArrayOrTypedArray(e.counts)?e.counts:[e.counts],function(t){var e,r=t.map((function(t){return t.displayindex}));if(function(t){for(var e=new Array(t.length),r=0;r<t.length;r++){if(t[r]<0||t[r]>=t.length)return!1;if(void 0!==e[t[r]])return!1;e[t[r]]=!0}return!0}(r))for(e=0;e<t.length;e++)t[e]._displayindex=t[e].displayindex;else for(e=0;e<t.length;e++)t[e]._displayindex=e}(r),r.forEach((function(t,e){!function(t,e){t._categoryarray=e.uniqueValues,null===t.ticktext||void 0===t.ticktext?t._ticktext=[]:t._ticktext=t.ticktext.slice();for(var r=t._ticktext.length;r<e.uniqueValues.length;r++)t._ticktext.push(e.uniqueValues[r])}(t,g[e])}));var y,m=e.line;m?(i(e,\\\"line\\\")&&a(t,e,{vals:e.line.color,containerStr:\\\"line\\\",cLetter:\\\"c\\\"}),y=s.tryColorscale(m)):y=l.identity;var x,b,_,w,T,k=r[0].values.length,A={},M=g.map((function(t){return t.inds}));for(v=0,x=0;x<k;x++){var S=[];for(b=0;b<M.length;b++)S.push(M[b][x]);d=p[x%p.length],v+=d;var E=(_=x,w=void 0,T=void 0,l.isArrayOrTypedArray(m.color)?T=w=m.color[_%m.color.length]:w=m.color,{color:y(w),rawColor:T}),L=S+\\\"-\\\"+E.rawColor;void 0===A[L]&&(A[L]=f(S,E.color,E.rawColor)),h(A[L],x,d)}var C,P=r.map((function(t,e){return function(t,e,r,n,i){return{dimensionInd:t,containerInd:e,displayInd:r,dimensionLabel:n,count:i,categories:[],dragX:null}}(e,t._index,t._displayindex,t.label,v)}));for(x=0;x<k;x++)for(d=p[x%p.length],b=0;b<P.length;b++){var O=P[b].containerInd,I=g[b].inds[x],D=P[b].categories;if(void 0===D[I]){var z=e.dimensions[O]._categoryarray[I],R=e.dimensions[O]._ticktext[I];D[I]={dimensionInd:b,categoryInd:C=I,categoryValue:z,displayInd:C,categoryLabel:R,valueInds:[],count:0,dragY:null}}c(D[I],x,d)}return n(function(t,e,r){var n=t.map((function(t){return t.categories.length})).reduce((function(t,e){return Math.max(t,e)}));return{dimensions:t,paths:e,trace:void 0,maxCats:n,count:r}}(P,A,v))}},14647:function(t,e,r){\\\"use strict\\\";var n=r(71828),i=r(52075).hasColorscale,a=r(1586),o=r(27670).c,s=r(85501),l=r(99506),u=r(94397);function c(t,e){function r(r,i){return n.coerce(t,e,l.dimensions,r,i)}var i=r(\\\"values\\\"),a=r(\\\"visible\\\");if(i&&i.length||(a=e.visible=!1),a){r(\\\"label\\\"),r(\\\"displayindex\\\",e._index);var o,s=t.categoryarray,u=Array.isArray(s)&&s.length>0;u&&(o=\\\"array\\\");var c=r(\\\"categoryorder\\\",o);\\\"array\\\"===c?(r(\\\"categoryarray\\\"),r(\\\"ticktext\\\")):(delete t.categoryarray,delete t.ticktext),u||\\\"array\\\"!==c||(e.categoryorder=\\\"trace\\\")}}t.exports=function(t,e,r,f){function h(r,i){return n.coerce(t,e,l,r,i)}var p=s(t,e,{name:\\\"dimensions\\\",handleItemDefaults:c}),d=function(t,e,r,o,s){s(\\\"line.shape\\\"),s(\\\"line.hovertemplate\\\");var l=s(\\\"line.color\\\",o.colorway[0]);if(i(t,\\\"line\\\")&&n.isArrayOrTypedArray(l)){if(l.length)return s(\\\"line.colorscale\\\"),a(t,e,o,s,{prefix:\\\"line.\\\",cLetter:\\\"c\\\"}),l.length;e.line.color=r}return 1/0}(t,e,r,f,h);o(e,f,h),Array.isArray(p)&&p.length||(e.visible=!1),u(e,p,\\\"values\\\",d),h(\\\"hoveron\\\"),h(\\\"hovertemplate\\\"),h(\\\"arrangement\\\"),h(\\\"bundlecolors\\\"),h(\\\"sortpaths\\\"),h(\\\"counts\\\");var v={family:f.font.family,size:Math.round(f.font.size),color:f.font.color};n.coerceFont(h,\\\"labelfont\\\",v);var g={family:f.font.family,size:Math.round(f.font.size/1.2),color:f.font.color};n.coerceFont(h,\\\"tickfont\\\",g)}},94873:function(t,e,r){\\\"use strict\\\";t.exports={attributes:r(99506),supplyDefaults:r(14647),calc:r(28699),plot:r(45784),colorbar:{container:\\\"line\\\",min:\\\"cmin\\\",max:\\\"cmax\\\"},moduleType:\\\"trace\\\",name:\\\"parcats\\\",basePlotModule:r(27677),categories:[\\\"noOpacity\\\"],meta:{}}},45460:function(t,e,r){\\\"use strict\\\";var n=r(39898),i=r(81684).k4,a=r(72391),o=r(30211),s=r(71828),l=s.strTranslate,u=r(91424),c=r(84267),f=r(63893);function h(t,e,r,i){var a=e._context.staticPlot,o=t.map(F.bind(0,e,r)),c=i.selectAll(\\\"g.parcatslayer\\\").data([null]);c.enter().append(\\\"g\\\").attr(\\\"class\\\",\\\"parcatslayer\\\").style(\\\"pointer-events\\\",a?\\\"none\\\":\\\"all\\\");var h=c.selectAll(\\\"g.trace.parcats\\\").data(o,p),m=h.enter().append(\\\"g\\\").attr(\\\"class\\\",\\\"trace parcats\\\");h.attr(\\\"transform\\\",(function(t){return l(t.x,t.y)})),m.append(\\\"g\\\").attr(\\\"class\\\",\\\"paths\\\");var x=h.select(\\\"g.paths\\\").selectAll(\\\"path.path\\\").data((function(t){return t.paths}),p);x.attr(\\\"fill\\\",(function(t){return t.model.color}));var w=x.enter().append(\\\"path\\\").attr(\\\"class\\\",\\\"path\\\").attr(\\\"stroke-opacity\\\",0).attr(\\\"fill\\\",(function(t){return t.model.color})).attr(\\\"fill-opacity\\\",0);_(w),x.attr(\\\"d\\\",(function(t){return t.svgD})),w.empty()||x.sort(v),x.exit().remove(),x.on(\\\"mouseover\\\",g).on(\\\"mouseout\\\",y).on(\\\"click\\\",b),m.append(\\\"g\\\").attr(\\\"class\\\",\\\"dimensions\\\");var A=h.select(\\\"g.dimensions\\\").selectAll(\\\"g.dimension\\\").data((function(t){return t.dimensions}),p);A.enter().append(\\\"g\\\").attr(\\\"class\\\",\\\"dimension\\\"),A.attr(\\\"transform\\\",(function(t){return l(t.x,0)})),A.exit().remove();var M=A.selectAll(\\\"g.category\\\").data((function(t){return t.categories}),p),S=M.enter().append(\\\"g\\\").attr(\\\"class\\\",\\\"category\\\");M.attr(\\\"transform\\\",(function(t){return l(0,t.y)})),S.append(\\\"rect\\\").attr(\\\"class\\\",\\\"catrect\\\").attr(\\\"pointer-events\\\",\\\"none\\\"),M.select(\\\"rect.catrect\\\").attr(\\\"fill\\\",\\\"none\\\").attr(\\\"width\\\",(function(t){return t.width})).attr(\\\"height\\\",(function(t){return t.height})),T(S);var E=M.selectAll(\\\"rect.bandrect\\\").data((function(t){return t.bands}),p);E.each((function(){s.raiseToTop(this)})),E.attr(\\\"fill\\\",(function(t){return t.color}));var D=E.enter().append(\\\"rect\\\").attr(\\\"class\\\",\\\"bandrect\\\").attr(\\\"stroke-opacity\\\",0).attr(\\\"fill\\\",(function(t){return t.color})).attr(\\\"fill-opacity\\\",0);E.attr(\\\"fill\\\",(function(t){return t.color})).attr(\\\"width\\\",(function(t){return t.width})).attr(\\\"height\\\",(function(t){return t.height})).attr(\\\"y\\\",(function(t){return t.y})).attr(\\\"cursor\\\",(function(t){return\\\"fixed\\\"===t.parcatsViewModel.arrangement?\\\"default\\\":\\\"perpendicular\\\"===t.parcatsViewModel.arrangement?\\\"ns-resize\\\":\\\"move\\\"})),k(D),E.exit().remove(),S.append(\\\"text\\\").attr(\\\"class\\\",\\\"catlabel\\\").attr(\\\"pointer-events\\\",\\\"none\\\");var z=e._fullLayout.paper_bgcolor;M.select(\\\"text.catlabel\\\").attr(\\\"text-anchor\\\",(function(t){return d(t)?\\\"start\\\":\\\"end\\\"})).attr(\\\"alignment-baseline\\\",\\\"middle\\\").style(\\\"text-shadow\\\",f.makeTextShadow(z)).style(\\\"fill\\\",\\\"rgb(0, 0, 0)\\\").attr(\\\"x\\\",(function(t){return d(t)?t.width+5:-5})).attr(\\\"y\\\",(function(t){return t.height/2})).text((function(t){return t.model.categoryLabel})).each((function(t){u.font(n.select(this),t.parcatsViewModel.categorylabelfont),f.convertToTspans(n.select(this),e)})),S.append(\\\"text\\\").attr(\\\"class\\\",\\\"dimlabel\\\"),M.select(\\\"text.dimlabel\\\").attr(\\\"text-anchor\\\",\\\"middle\\\").attr(\\\"alignment-baseline\\\",\\\"baseline\\\").attr(\\\"cursor\\\",(function(t){return\\\"fixed\\\"===t.parcatsViewModel.arrangement?\\\"default\\\":\\\"ew-resize\\\"})).attr(\\\"x\\\",(function(t){return t.width/2})).attr(\\\"y\\\",-5).text((function(t,e){return 0===e?t.parcatsViewModel.model.dimensions[t.model.dimensionInd].dimensionLabel:null})).each((function(t){u.font(n.select(this),t.parcatsViewModel.labelfont)})),M.selectAll(\\\"rect.bandrect\\\").on(\\\"mouseover\\\",L).on(\\\"mouseout\\\",C),M.exit().remove(),A.call(n.behavior.drag().origin((function(t){return{x:t.x,y:0}})).on(\\\"dragstart\\\",P).on(\\\"drag\\\",O).on(\\\"dragend\\\",I)),h.each((function(t){t.traceSelection=n.select(this),t.pathSelection=n.select(this).selectAll(\\\"g.paths\\\").selectAll(\\\"path.path\\\"),t.dimensionSelection=n.select(this).selectAll(\\\"g.dimensions\\\").selectAll(\\\"g.dimension\\\")})),h.exit().remove()}function p(t){return t.key}function d(t){var e=t.parcatsViewModel.dimensions.length,r=t.parcatsViewModel.dimensions[e-1].model.dimensionInd;return t.model.dimensionInd===r}function v(t,e){return t.model.rawColor>e.model.rawColor?1:t.model.rawColor<e.model.rawColor?-1:0}function g(t){if(!t.parcatsViewModel.dragDimension&&-1===t.parcatsViewModel.hoverinfoItems.indexOf(\\\"skip\\\")){s.raiseToTop(this),w(n.select(this));var e=m(t),r=x(t);if(t.parcatsViewModel.graphDiv.emit(\\\"plotly_hover\\\",{points:e,event:n.event,constraints:r}),-1===t.parcatsViewModel.hoverinfoItems.indexOf(\\\"none\\\")){var i,a,l,u=n.mouse(this)[0],f=t.parcatsViewModel.graphDiv,h=t.parcatsViewModel.trace,p=f._fullLayout,d=p._paperdiv.node().getBoundingClientRect(),v=t.parcatsViewModel.graphDiv.getBoundingClientRect();for(l=0;l<t.leftXs.length-1;l++)if(t.leftXs[l]+t.dimWidths[l]-2<=u&&u<=t.leftXs[l+1]+2){var g=t.parcatsViewModel.dimensions[l],y=t.parcatsViewModel.dimensions[l+1];i=(g.x+g.width+y.x)/2,a=(t.topYs[l]+t.topYs[l+1]+t.height)/2;break}var b=t.parcatsViewModel.x+i,_=t.parcatsViewModel.y+a,T=c.mostReadable(t.model.color,[\\\"black\\\",\\\"white\\\"]),k=t.model.count,A=k/t.parcatsViewModel.model.count,M={countLabel:k,probabilityLabel:A.toFixed(3)},S=[];-1!==t.parcatsViewModel.hoverinfoItems.indexOf(\\\"count\\\")&&S.push([\\\"Count:\\\",M.countLabel].join(\\\" \\\")),-1!==t.parcatsViewModel.hoverinfoItems.indexOf(\\\"probability\\\")&&S.push([\\\"P:\\\",M.probabilityLabel].join(\\\" \\\"));var E=S.join(\\\"<br>\\\"),L=n.mouse(f)[0];o.loneHover({trace:h,x:b-d.left+v.left,y:_-d.top+v.top,text:E,color:t.model.color,borderColor:\\\"black\\\",fontFamily:'Monaco, \\\"Courier New\\\", monospace',fontSize:10,fontColor:T,idealAlign:L<b?\\\"right\\\":\\\"left\\\",hovertemplate:(h.line||{}).hovertemplate,hovertemplateLabels:M,eventData:[{data:h._input,fullData:h,count:k,probability:A}]},{container:p._hoverlayer.node(),outerContainer:p._paper.node(),gd:f})}}}function y(t){if(!t.parcatsViewModel.dragDimension&&(_(n.select(this)),o.loneUnhover(t.parcatsViewModel.graphDiv._fullLayout._hoverlayer.node()),t.parcatsViewModel.pathSelection.sort(v),-1===t.parcatsViewModel.hoverinfoItems.indexOf(\\\"skip\\\"))){var e=m(t),r=x(t);t.parcatsViewModel.graphDiv.emit(\\\"plotly_unhover\\\",{points:e,event:n.event,constraints:r})}}function m(t){for(var e=[],r=D(t.parcatsViewModel),n=0;n<t.model.valueInds.length;n++){var i=t.model.valueInds[n];e.push({curveNumber:r,pointNumber:i})}return e}function x(t){for(var e={},r=t.parcatsViewModel.model.dimensions,n=0;n<r.length;n++){var i=r[n],a=i.categories[t.model.categoryInds[n]];e[i.containerInd]=a.categoryValue}return void 0!==t.model.rawColor&&(e.color=t.model.rawColor),e}function b(t){if(-1===t.parcatsViewModel.hoverinfoItems.indexOf(\\\"skip\\\")){var e=m(t),r=x(t);t.parcatsViewModel.graphDiv.emit(\\\"plotly_click\\\",{points:e,event:n.event,constraints:r})}}function _(t){t.attr(\\\"fill\\\",(function(t){return t.model.color})).attr(\\\"fill-opacity\\\",.6).attr(\\\"stroke\\\",\\\"lightgray\\\").attr(\\\"stroke-width\\\",.2).attr(\\\"stroke-opacity\\\",1)}function w(t){t.attr(\\\"fill-opacity\\\",.8).attr(\\\"stroke\\\",(function(t){return c.mostReadable(t.model.color,[\\\"black\\\",\\\"white\\\"])})).attr(\\\"stroke-width\\\",.3)}function T(t){t.select(\\\"rect.catrect\\\").attr(\\\"stroke\\\",\\\"black\\\").attr(\\\"stroke-width\\\",1).attr(\\\"stroke-opacity\\\",1)}function k(t){t.attr(\\\"stroke\\\",\\\"black\\\").attr(\\\"stroke-width\\\",.2).attr(\\\"stroke-opacity\\\",1).attr(\\\"fill-opacity\\\",1)}function A(t){var e=t.parcatsViewModel.pathSelection,r=t.categoryViewModel.model.dimensionInd,n=t.categoryViewModel.model.categoryInd;return e.filter((function(e){return e.model.categoryInds[r]===n&&e.model.color===t.color}))}function M(t,e,r){var i=n.select(t).datum(),a=i.categoryViewModel.model,o=i.parcatsViewModel.graphDiv,s=n.select(t.parentNode).selectAll(\\\"rect.bandrect\\\"),l=[];s.each((function(t){A(t).each((function(t){Array.prototype.push.apply(l,m(t))}))}));var u={};u[a.dimensionInd]=a.categoryValue,o.emit(e,{points:l,event:r,constraints:u})}function S(t,e,r){var i=n.select(t).datum(),a=i.categoryViewModel.model,o=i.parcatsViewModel.graphDiv,s=A(i),l=[];s.each((function(t){Array.prototype.push.apply(l,m(t))}));var u={};u[a.dimensionInd]=a.categoryValue,void 0!==i.rawColor&&(u.color=i.rawColor),o.emit(e,{points:l,event:r,constraints:u})}function E(t,e,r){t._fullLayout._calcInverseTransform(t);var i,a,o=t._fullLayout._invScaleX,s=t._fullLayout._invScaleY,l=n.select(r.parentNode).select(\\\"rect.catrect\\\"),u=l.node().getBoundingClientRect(),c=l.datum(),f=c.parcatsViewModel,h=f.model.dimensions[c.model.dimensionInd],p=f.trace,d=u.top+u.height/2;f.dimensions.length>1&&h.displayInd===f.dimensions.length-1?(i=u.left,a=\\\"left\\\"):(i=u.left+u.width,a=\\\"right\\\");var v=c.model.count,g=c.model.categoryLabel,y=v/c.parcatsViewModel.model.count,m={countLabel:v,categoryLabel:g,probabilityLabel:y.toFixed(3)},x=[];-1!==c.parcatsViewModel.hoverinfoItems.indexOf(\\\"count\\\")&&x.push([\\\"Count:\\\",m.countLabel].join(\\\" \\\")),-1!==c.parcatsViewModel.hoverinfoItems.indexOf(\\\"probability\\\")&&x.push([\\\"P(\\\"+m.categoryLabel+\\\"):\\\",m.probabilityLabel].join(\\\" \\\"));var b=x.join(\\\"<br>\\\");return{trace:p,x:o*(i-e.left),y:s*(d-e.top),text:b,color:\\\"lightgray\\\",borderColor:\\\"black\\\",fontFamily:'Monaco, \\\"Courier New\\\", monospace',fontSize:12,fontColor:\\\"black\\\",idealAlign:a,hovertemplate:p.hovertemplate,hovertemplateLabels:m,eventData:[{data:p._input,fullData:p,count:v,category:g,probability:y}]}}function L(t){if(!t.parcatsViewModel.dragDimension&&-1===t.parcatsViewModel.hoverinfoItems.indexOf(\\\"skip\\\")){if(n.mouse(this)[1]<-1)return;var e,r=t.parcatsViewModel.graphDiv,i=r._fullLayout,a=i._paperdiv.node().getBoundingClientRect(),l=t.parcatsViewModel.hoveron,u=this;\\\"color\\\"===l?(function(t){var e=n.select(t).datum(),r=A(e);w(r),r.each((function(){s.raiseToTop(this)})),n.select(t.parentNode).selectAll(\\\"rect.bandrect\\\").filter((function(t){return t.color===e.color})).each((function(){s.raiseToTop(this),n.select(this).attr(\\\"stroke\\\",\\\"black\\\").attr(\\\"stroke-width\\\",1.5)}))}(u),S(u,\\\"plotly_hover\\\",n.event)):(function(t){n.select(t.parentNode).selectAll(\\\"rect.bandrect\\\").each((function(t){var e=A(t);w(e),e.each((function(){s.raiseToTop(this)}))})),n.select(t.parentNode).select(\\\"rect.catrect\\\").attr(\\\"stroke\\\",\\\"black\\\").attr(\\\"stroke-width\\\",2.5)}(u),M(u,\\\"plotly_hover\\\",n.event)),-1===t.parcatsViewModel.hoverinfoItems.indexOf(\\\"none\\\")&&(\\\"category\\\"===l?e=E(r,a,u):\\\"color\\\"===l?e=function(t,e,r){t._fullLayout._calcInverseTransform(t);var i,a,o=t._fullLayout._invScaleX,s=t._fullLayout._invScaleY,l=r.getBoundingClientRect(),u=n.select(r).datum(),f=u.categoryViewModel,h=f.parcatsViewModel,p=h.model.dimensions[f.model.dimensionInd],d=h.trace,v=l.y+l.height/2;h.dimensions.length>1&&p.displayInd===h.dimensions.length-1?(i=l.left,a=\\\"left\\\"):(i=l.left+l.width,a=\\\"right\\\");var g=f.model.categoryLabel,y=u.parcatsViewModel.model.count,m=0;u.categoryViewModel.bands.forEach((function(t){t.color===u.color&&(m+=t.count)}));var x=f.model.count,b=0;h.pathSelection.each((function(t){t.model.color===u.color&&(b+=t.model.count)}));var _=m/y,w=m/b,T=m/x,k={countLabel:y,categoryLabel:g,probabilityLabel:_.toFixed(3)},A=[];-1!==f.parcatsViewModel.hoverinfoItems.indexOf(\\\"count\\\")&&A.push([\\\"Count:\\\",k.countLabel].join(\\\" \\\")),-1!==f.parcatsViewModel.hoverinfoItems.indexOf(\\\"probability\\\")&&(A.push(\\\"P(color ∩ \\\"+g+\\\"): \\\"+k.probabilityLabel),A.push(\\\"P(\\\"+g+\\\" | color): \\\"+w.toFixed(3)),A.push(\\\"P(color | \\\"+g+\\\"): \\\"+T.toFixed(3)));var M=A.join(\\\"<br>\\\"),S=c.mostReadable(u.color,[\\\"black\\\",\\\"white\\\"]);return{trace:d,x:o*(i-e.left),y:s*(v-e.top),text:M,color:u.color,borderColor:\\\"black\\\",fontFamily:'Monaco, \\\"Courier New\\\", monospace',fontColor:S,fontSize:10,idealAlign:a,hovertemplate:d.hovertemplate,hovertemplateLabels:k,eventData:[{data:d._input,fullData:d,category:g,count:y,probability:_,categorycount:x,colorcount:b,bandcolorcount:m}]}}(r,a,u):\\\"dimension\\\"===l&&(e=function(t,e,r){var i=[];return n.select(r.parentNode.parentNode).selectAll(\\\"g.category\\\").select(\\\"rect.catrect\\\").each((function(){i.push(E(t,e,this))})),i}(r,a,u)),e&&o.loneHover(e,{container:i._hoverlayer.node(),outerContainer:i._paper.node(),gd:r}))}}function C(t){var e=t.parcatsViewModel;e.dragDimension||(_(e.pathSelection),T(e.dimensionSelection.selectAll(\\\"g.category\\\")),k(e.dimensionSelection.selectAll(\\\"g.category\\\").selectAll(\\\"rect.bandrect\\\")),o.loneUnhover(e.graphDiv._fullLayout._hoverlayer.node()),e.pathSelection.sort(v),-1!==e.hoverinfoItems.indexOf(\\\"skip\\\"))||(\\\"color\\\"===t.parcatsViewModel.hoveron?S(this,\\\"plotly_unhover\\\",n.event):M(this,\\\"plotly_unhover\\\",n.event))}function P(t){\\\"fixed\\\"!==t.parcatsViewModel.arrangement&&(t.dragDimensionDisplayInd=t.model.displayInd,t.initialDragDimensionDisplayInds=t.parcatsViewModel.model.dimensions.map((function(t){return t.displayInd})),t.dragHasMoved=!1,t.dragCategoryDisplayInd=null,n.select(this).selectAll(\\\"g.category\\\").select(\\\"rect.catrect\\\").each((function(e){var r=n.mouse(this)[0],i=n.mouse(this)[1];-2<=r&&r<=e.width+2&&-2<=i&&i<=e.height+2&&(t.dragCategoryDisplayInd=e.model.displayInd,t.initialDragCategoryDisplayInds=t.model.categories.map((function(t){return t.displayInd})),e.model.dragY=e.y,s.raiseToTop(this.parentNode),n.select(this.parentNode).selectAll(\\\"rect.bandrect\\\").each((function(e){e.y<i&&i<=e.y+e.height&&(t.potentialClickBand=this)})))})),t.parcatsViewModel.dragDimension=t,o.loneUnhover(t.parcatsViewModel.graphDiv._fullLayout._hoverlayer.node()))}function O(t){if(\\\"fixed\\\"!==t.parcatsViewModel.arrangement&&(t.dragHasMoved=!0,null!==t.dragDimensionDisplayInd)){var e=t.dragDimensionDisplayInd,r=e-1,i=e+1,a=t.parcatsViewModel.dimensions[e];if(null!==t.dragCategoryDisplayInd){var o=a.categories[t.dragCategoryDisplayInd];o.model.dragY+=n.event.dy;var s=o.model.dragY,l=o.model.displayInd,u=a.categories,c=u[l-1],f=u[l+1];void 0!==c&&s<c.y+c.height/2&&(o.model.displayInd=c.model.displayInd,c.model.displayInd=l),void 0!==f&&s+o.height>f.y+f.height/2&&(o.model.displayInd=f.model.displayInd,f.model.displayInd=l),t.dragCategoryDisplayInd=o.model.displayInd}if(null===t.dragCategoryDisplayInd||\\\"freeform\\\"===t.parcatsViewModel.arrangement){a.model.dragX=n.event.x;var h=t.parcatsViewModel.dimensions[r],p=t.parcatsViewModel.dimensions[i];void 0!==h&&a.model.dragX<h.x+h.width&&(a.model.displayInd=h.model.displayInd,h.model.displayInd=e),void 0!==p&&a.model.dragX+a.width>p.x&&(a.model.displayInd=p.model.displayInd,p.model.displayInd=t.dragDimensionDisplayInd),t.dragDimensionDisplayInd=a.model.displayInd}j(t.parcatsViewModel),N(t.parcatsViewModel),R(t.parcatsViewModel),z(t.parcatsViewModel)}}function I(t){if(\\\"fixed\\\"!==t.parcatsViewModel.arrangement&&null!==t.dragDimensionDisplayInd){n.select(this).selectAll(\\\"text\\\").attr(\\\"font-weight\\\",\\\"normal\\\");var e={},r=D(t.parcatsViewModel),i=t.parcatsViewModel.model.dimensions.map((function(t){return t.displayInd})),o=t.initialDragDimensionDisplayInds.some((function(t,e){return t!==i[e]}));o&&i.forEach((function(r,n){var i=t.parcatsViewModel.model.dimensions[n].containerInd;e[\\\"dimensions[\\\"+i+\\\"].displayindex\\\"]=r}));var s=!1;if(null!==t.dragCategoryDisplayInd){var l=t.model.categories.map((function(t){return t.displayInd}));if(s=t.initialDragCategoryDisplayInds.some((function(t,e){return t!==l[e]}))){var u=t.model.categories.slice().sort((function(t,e){return t.displayInd-e.displayInd})),c=u.map((function(t){return t.categoryValue})),f=u.map((function(t){return t.categoryLabel}));e[\\\"dimensions[\\\"+t.model.containerInd+\\\"].categoryarray\\\"]=[c],e[\\\"dimensions[\\\"+t.model.containerInd+\\\"].ticktext\\\"]=[f],e[\\\"dimensions[\\\"+t.model.containerInd+\\\"].categoryorder\\\"]=\\\"array\\\"}}-1===t.parcatsViewModel.hoverinfoItems.indexOf(\\\"skip\\\")&&!t.dragHasMoved&&t.potentialClickBand&&(\\\"color\\\"===t.parcatsViewModel.hoveron?S(t.potentialClickBand,\\\"plotly_click\\\",n.event.sourceEvent):M(t.potentialClickBand,\\\"plotly_click\\\",n.event.sourceEvent)),t.model.dragX=null,null!==t.dragCategoryDisplayInd&&(t.parcatsViewModel.dimensions[t.dragDimensionDisplayInd].categories[t.dragCategoryDisplayInd].model.dragY=null,t.dragCategoryDisplayInd=null),t.dragDimensionDisplayInd=null,t.parcatsViewModel.dragDimension=null,t.dragHasMoved=null,t.potentialClickBand=null,j(t.parcatsViewModel),N(t.parcatsViewModel),n.transition().duration(300).ease(\\\"cubic-in-out\\\").each((function(){R(t.parcatsViewModel,!0),z(t.parcatsViewModel,!0)})).each(\\\"end\\\",(function(){(o||s)&&a.restyle(t.parcatsViewModel.graphDiv,e,[r])}))}}function D(t){for(var e,r=t.graphDiv._fullData,n=0;n<r.length;n++)if(t.key===r[n].uid){e=n;break}return e}function z(t,e){var r;void 0===e&&(e=!1),t.pathSelection.data((function(t){return t.paths}),p),(r=t.pathSelection,e?r.transition():r).attr(\\\"d\\\",(function(t){return t.svgD}))}function R(t,e){function r(t){return e?t.transition():t}void 0===e&&(e=!1),t.dimensionSelection.data((function(t){return t.dimensions}),p);var i=t.dimensionSelection.selectAll(\\\"g.category\\\").data((function(t){return t.categories}),p);r(t.dimensionSelection).attr(\\\"transform\\\",(function(t){return l(t.x,0)})),r(i).attr(\\\"transform\\\",(function(t){return l(0,t.y)})),i.select(\\\".dimlabel\\\").text((function(t,e){return 0===e?t.parcatsViewModel.model.dimensions[t.model.dimensionInd].dimensionLabel:null})),i.select(\\\".catlabel\\\").attr(\\\"text-anchor\\\",(function(t){return d(t)?\\\"start\\\":\\\"end\\\"})).attr(\\\"x\\\",(function(t){return d(t)?t.width+5:-5})).each((function(t){var e,r;d(t)?(e=t.width+5,r=\\\"start\\\"):(e=-5,r=\\\"end\\\"),n.select(this).selectAll(\\\"tspan\\\").attr(\\\"x\\\",e).attr(\\\"text-anchor\\\",r)}));var a=i.selectAll(\\\"rect.bandrect\\\").data((function(t){return t.bands}),p),o=a.enter().append(\\\"rect\\\").attr(\\\"class\\\",\\\"bandrect\\\").attr(\\\"cursor\\\",\\\"move\\\").attr(\\\"stroke-opacity\\\",0).attr(\\\"fill\\\",(function(t){return t.color})).attr(\\\"fill-opacity\\\",0);a.attr(\\\"fill\\\",(function(t){return t.color})).attr(\\\"width\\\",(function(t){return t.width})).attr(\\\"height\\\",(function(t){return t.height})).attr(\\\"y\\\",(function(t){return t.y})),k(o),a.each((function(){s.raiseToTop(this)})),a.exit().remove()}function F(t,e,r){var n,i=r[0],a=e.margin||{l:80,r:80,t:100,b:80},o=i.trace,s=o.domain,l=e.width,u=e.height,c=Math.floor(l*(s.x[1]-s.x[0])),f=Math.floor(u*(s.y[1]-s.y[0])),h=s.x[0]*l+a.l,p=e.height-s.y[1]*e.height+a.t,d=o.line.shape;n=\\\"all\\\"===o.hoverinfo?[\\\"count\\\",\\\"probability\\\"]:(o.hoverinfo||\\\"\\\").split(\\\"+\\\");var v={trace:o,key:o.uid,model:i,x:h,y:p,width:c,height:f,hoveron:o.hoveron,hoverinfoItems:n,arrangement:o.arrangement,bundlecolors:o.bundlecolors,sortpaths:o.sortpaths,labelfont:o.labelfont,categorylabelfont:o.tickfont,pathShape:d,dragDimension:null,margin:a,paths:[],dimensions:[],graphDiv:t,traceSelection:null,pathSelection:null,dimensionSelection:null};return i.dimensions&&(j(v),N(v)),v}function B(t,e,r,n,a){var o,s,l=[],u=[];for(s=0;s<r.length-1;s++)o=i(r[s]+t[s],t[s+1]),l.push(o(a)),u.push(o(1-a));var c=\\\"M \\\"+t[0]+\\\",\\\"+e[0];for(c+=\\\"l\\\"+r[0]+\\\",0 \\\",s=1;s<r.length;s++)c+=\\\"C\\\"+l[s-1]+\\\",\\\"+e[s-1]+\\\" \\\"+u[s-1]+\\\",\\\"+e[s]+\\\" \\\"+t[s]+\\\",\\\"+e[s],c+=\\\"l\\\"+r[s]+\\\",0 \\\";for(c+=\\\"l0,\\\"+n+\\\" \\\",c+=\\\"l -\\\"+r[r.length-1]+\\\",0 \\\",s=r.length-2;s>=0;s--)c+=\\\"C\\\"+u[s]+\\\",\\\"+(e[s+1]+n)+\\\" \\\"+l[s]+\\\",\\\"+(e[s]+n)+\\\" \\\"+(t[s]+r[s])+\\\",\\\"+(e[s]+n),c+=\\\"l-\\\"+r[s]+\\\",0 \\\";return c+\\\"Z\\\"}function N(t){var e=t.dimensions,r=t.model,n=e.map((function(t){return t.categories.map((function(t){return t.y}))})),i=t.model.dimensions.map((function(t){return t.categories.map((function(t){return t.displayInd}))})),a=t.model.dimensions.map((function(t){return t.displayInd})),o=t.dimensions.map((function(t){return t.model.dimensionInd})),s=e.map((function(t){return t.x})),l=e.map((function(t){return t.width})),u=[];for(var c in r.paths)r.paths.hasOwnProperty(c)&&u.push(r.paths[c]);function f(t){var e=t.categoryInds.map((function(t,e){return i[e][t]}));return o.map((function(t){return e[t]}))}u.sort((function(e,r){var n=f(e),i=f(r);return\\\"backward\\\"===t.sortpaths&&(n.reverse(),i.reverse()),n.push(e.valueInds[0]),i.push(r.valueInds[0]),t.bundlecolors&&(n.unshift(e.rawColor),i.unshift(r.rawColor)),n<i?-1:n>i?1:0}));for(var h=new Array(u.length),p=e[0].model.count,d=e[0].categories.map((function(t){return t.height})).reduce((function(t,e){return t+e})),v=0;v<u.length;v++){var g,y=u[v];g=p>0?d*(y.count/p):0;for(var m,x=new Array(n.length),b=0;b<y.categoryInds.length;b++){var _=y.categoryInds[b],w=i[b][_],T=a[b];x[T]=n[T][w],n[T][w]+=g;var k=t.dimensions[T].categories[w],A=k.bands.length,M=k.bands[A-1];if(void 0===M||y.rawColor!==M.rawColor){var S=void 0===M?0:M.y+M.height;k.bands.push({key:S,color:y.color,rawColor:y.rawColor,height:g,width:k.width,count:y.count,y:S,categoryViewModel:k,parcatsViewModel:t})}else{var E=k.bands[A-1];E.height+=g,E.count+=y.count}}m=\\\"hspline\\\"===t.pathShape?B(s,x,l,g,.5):B(s,x,l,g,0),h[v]={key:y.valueInds[0],model:y,height:g,leftXs:s,topYs:x,dimWidths:l,svgD:m,parcatsViewModel:t}}t.paths=h}function j(t){var e=t.model.dimensions.map((function(t){return{displayInd:t.displayInd,dimensionInd:t.dimensionInd}}));e.sort((function(t,e){return t.displayInd-e.displayInd}));var r=[];for(var n in e){var i=e[n].dimensionInd,a=t.model.dimensions[i];r.push(U(t,a))}t.dimensions=r}function U(t,e){var r,n=t.model.dimensions.length,i=e.displayInd;r=40+(n>1?(t.width-80-16)/(n-1):0)*i;var a,o,s,l,u,c=[],f=t.model.maxCats,h=e.categories.length,p=e.count,d=t.height-8*(f-1),v=8*(f-h)/2,g=e.categories.map((function(t){return{displayInd:t.displayInd,categoryInd:t.categoryInd}}));for(g.sort((function(t,e){return t.displayInd-e.displayInd})),u=0;u<h;u++)l=g[u].categoryInd,o=e.categories[l],a=p>0?o.count/p*d:0,s={key:o.valueInds[0],model:o,width:16,height:a,y:null!==o.dragY?o.dragY:v,bands:[],parcatsViewModel:t},v=v+a+8,c.push(s);return{key:e.dimensionInd,x:null!==e.dragX?e.dragX:r,y:0,width:16,model:e,categories:c,parcatsViewModel:t,dragCategoryDisplayInd:null,dragDimensionDisplayInd:null,initialDragDimensionDisplayInds:null,initialDragCategoryDisplayInds:null,dragHasMoved:null,potentialClickBand:null}}t.exports=function(t,e,r,n){h(r,t,n,e)}},45784:function(t,e,r){\\\"use strict\\\";var n=r(45460);t.exports=function(t,e,r,i){var a=t._fullLayout,o=a._paper,s=a._size;n(t,o,e,{width:s.w,height:s.h,margin:{t:s.t,r:s.r,b:s.b,l:s.l}},r,i)}},73362:function(t,e,r){\\\"use strict\\\";var n=r(50693),i=r(13838),a=r(41940),o=r(27670).Y,s=r(1426).extendFlat,l=r(44467).templatedArray;t.exports={domain:o({name:\\\"parcoords\\\",trace:!0,editType:\\\"plot\\\"}),labelangle:{valType:\\\"angle\\\",dflt:0,editType:\\\"plot\\\"},labelside:{valType:\\\"enumerated\\\",values:[\\\"top\\\",\\\"bottom\\\"],dflt:\\\"top\\\",editType:\\\"plot\\\"},labelfont:a({editType:\\\"plot\\\"}),tickfont:a({editType:\\\"plot\\\"}),rangefont:a({editType:\\\"plot\\\"}),dimensions:l(\\\"dimension\\\",{label:{valType:\\\"string\\\",editType:\\\"plot\\\"},tickvals:s({},i.tickvals,{editType:\\\"plot\\\"}),ticktext:s({},i.ticktext,{editType:\\\"plot\\\"}),tickformat:s({},i.tickformat,{editType:\\\"plot\\\"}),visible:{valType:\\\"boolean\\\",dflt:!0,editType:\\\"plot\\\"},range:{valType:\\\"info_array\\\",items:[{valType:\\\"number\\\",editType:\\\"plot\\\"},{valType:\\\"number\\\",editType:\\\"plot\\\"}],editType:\\\"plot\\\"},constraintrange:{valType:\\\"info_array\\\",freeLength:!0,dimensions:\\\"1-2\\\",items:[{valType:\\\"any\\\",editType:\\\"plot\\\"},{valType:\\\"any\\\",editType:\\\"plot\\\"}],editType:\\\"plot\\\"},multiselect:{valType:\\\"boolean\\\",dflt:!0,editType:\\\"plot\\\"},values:{valType:\\\"data_array\\\",editType:\\\"calc\\\"},editType:\\\"calc\\\"}),line:s({editType:\\\"calc\\\"},n(\\\"line\\\",{colorscaleDflt:\\\"Viridis\\\",autoColorDflt:!1,editTypeOverride:\\\"calc\\\"})),unselected:{line:{color:{valType:\\\"color\\\",dflt:\\\"#7f7f7f\\\",editType:\\\"plot\\\"},opacity:{valType:\\\"number\\\",min:0,max:1,dflt:\\\"auto\\\",editType:\\\"plot\\\"},editType:\\\"plot\\\"},editType:\\\"plot\\\"}}},57920:function(t,e,r){\\\"use strict\\\";var n=r(25706),i=r(39898),a=r(28984).keyFun,o=r(28984).repeat,s=r(71828).sorterAsc,l=r(71828).strTranslate,u=n.bar.snapRatio;function c(t,e){return t*(1-u)+e*u}var f=n.bar.snapClose;function h(t,e){return t*(1-f)+e*f}function p(t,e,r,n){if(function(t,e){for(var r=0;r<e.length;r++)if(t>=e[r][0]&&t<=e[r][1])return!0;return!1}(r,n))return r;var i=t?-1:1,a=0,o=e.length-1;if(i<0){var s=a;a=o,o=s}for(var l=e[a],u=l,f=a;i*f<i*o;f+=i){var p=f+i,d=e[p];if(i*r<i*h(l,d))return c(l,u);if(i*r<i*d||p===o)return c(d,l);u=l,l=d}}function d(t){t.attr(\\\"x\\\",-n.bar.captureWidth/2).attr(\\\"width\\\",n.bar.captureWidth)}function v(t){t.attr(\\\"visibility\\\",\\\"visible\\\").style(\\\"visibility\\\",\\\"visible\\\").attr(\\\"fill\\\",\\\"yellow\\\").attr(\\\"opacity\\\",0)}function g(t){if(!t.brush.filterSpecified)return\\\"0,\\\"+t.height;for(var e,r,n,i=y(t.brush.filter.getConsolidated(),t.height),a=[0],o=i.length?i[0][0]:null,s=0;s<i.length;s++)r=(e=i[s])[1]-e[0],a.push(o),a.push(r),(n=s+1)<i.length&&(o=i[n][0]-e[1]);return a.push(t.height),a}function y(t,e){return t.map((function(t){return t.map((function(t){return Math.max(0,t*e)})).sort(s)}))}function m(){i.select(document.body).style(\\\"cursor\\\",null)}function x(t){t.attr(\\\"stroke-dasharray\\\",g)}function b(t,e){var r=i.select(t).selectAll(\\\".highlight, .highlight-shadow\\\");x(e?r.transition().duration(n.bar.snapDuration).each(\\\"end\\\",e):r)}function _(t,e){var r,i=t.brush,a=NaN,o={};if(i.filterSpecified){var s=t.height,l=i.filter.getConsolidated(),u=y(l,s),c=NaN,f=NaN,h=NaN;for(r=0;r<=u.length;r++){var p=u[r];if(p&&p[0]<=e&&e<=p[1]){c=r;break}if(f=r?r-1:NaN,p&&p[0]>e){h=r;break}}if(a=c,isNaN(a)&&(a=isNaN(f)||isNaN(h)?isNaN(f)?h:f:e-u[f][1]<u[h][0]-e?f:h),!isNaN(a)){var d=u[a],v=function(t,e){var r=n.bar.handleHeight;if(!(e>t[1]+r||e<t[0]-r))return e>=.9*t[1]+.1*t[0]?\\\"n\\\":e<=.9*t[0]+.1*t[1]?\\\"s\\\":\\\"ns\\\"}(d,e);v&&(o.interval=l[a],o.intervalPix=d,o.region=v)}}if(t.ordinal&&!o.region){var g=t.unitTickvals,m=t.unitToPaddedPx.invert(e);for(r=0;r<g.length;r++){var x=[.25*g[Math.max(r-1,0)]+.75*g[r],.25*g[Math.min(r+1,g.length-1)]+.75*g[r]];if(m>=x[0]&&m<=x[1]){o.clickableOrdinalRange=x;break}}}return o}function w(t,e){i.event.sourceEvent.stopPropagation();var r=e.height-i.mouse(t)[1]-2*n.verticalPadding,a=e.brush.svgBrush;a.wasDragged=!0,a._dragging=!0,a.grabbingBar?a.newExtent=[r-a.grabPoint,r+a.barLength-a.grabPoint].map(e.unitToPaddedPx.invert):a.newExtent=[a.startExtent,e.unitToPaddedPx.invert(r)].sort(s),e.brush.filterSpecified=!0,a.extent=a.stayingIntervals.concat([a.newExtent]),a.brushCallback(e),b(t.parentNode)}function T(t,e){var r=_(e,e.height-i.mouse(t)[1]-2*n.verticalPadding),a=\\\"crosshair\\\";r.clickableOrdinalRange?a=\\\"pointer\\\":r.region&&(a=r.region+\\\"-resize\\\"),i.select(document.body).style(\\\"cursor\\\",a)}function k(t){t.on(\\\"mousemove\\\",(function(t){i.event.preventDefault(),t.parent.inBrushDrag||T(this,t)})).on(\\\"mouseleave\\\",(function(t){t.parent.inBrushDrag||m()})).call(i.behavior.drag().on(\\\"dragstart\\\",(function(t){!function(t,e){i.event.sourceEvent.stopPropagation();var r=e.height-i.mouse(t)[1]-2*n.verticalPadding,a=e.unitToPaddedPx.invert(r),o=e.brush,s=_(e,r),l=s.interval,u=o.svgBrush;if(u.wasDragged=!1,u.grabbingBar=\\\"ns\\\"===s.region,u.grabbingBar){var c=l.map(e.unitToPaddedPx);u.grabPoint=r-c[0]-n.verticalPadding,u.barLength=c[1]-c[0]}u.clickableOrdinalRange=s.clickableOrdinalRange,u.stayingIntervals=e.multiselect&&o.filterSpecified?o.filter.getConsolidated():[],l&&(u.stayingIntervals=u.stayingIntervals.filter((function(t){return t[0]!==l[0]&&t[1]!==l[1]}))),u.startExtent=s.region?l[\\\"s\\\"===s.region?1:0]:a,e.parent.inBrushDrag=!0,u.brushStartCallback()}(this,t)})).on(\\\"drag\\\",(function(t){w(this,t)})).on(\\\"dragend\\\",(function(t){!function(t,e){var r=e.brush,n=r.filter,a=r.svgBrush;a._dragging||(T(t,e),w(t,e),e.brush.svgBrush.wasDragged=!1),a._dragging=!1,i.event.sourceEvent.stopPropagation();var o=a.grabbingBar;if(a.grabbingBar=!1,a.grabLocation=void 0,e.parent.inBrushDrag=!1,m(),!a.wasDragged)return a.wasDragged=void 0,a.clickableOrdinalRange?r.filterSpecified&&e.multiselect?a.extent.push(a.clickableOrdinalRange):(a.extent=[a.clickableOrdinalRange],r.filterSpecified=!0):o?(a.extent=a.stayingIntervals,0===a.extent.length&&M(r)):M(r),a.brushCallback(e),b(t.parentNode),void a.brushEndCallback(r.filterSpecified?n.getConsolidated():[]);var s=function(){n.set(n.getConsolidated())};if(e.ordinal){var l=e.unitTickvals;l[l.length-1]<l[0]&&l.reverse(),a.newExtent=[p(0,l,a.newExtent[0],a.stayingIntervals),p(1,l,a.newExtent[1],a.stayingIntervals)];var u=a.newExtent[1]>a.newExtent[0];a.extent=a.stayingIntervals.concat(u?[a.newExtent]:[]),a.extent.length||M(r),a.brushCallback(e),u?b(t.parentNode,s):(s(),b(t.parentNode))}else s();a.brushEndCallback(r.filterSpecified?n.getConsolidated():[])}(this,t)})))}function A(t,e){return t[0]-e[0]}function M(t){t.filterSpecified=!1,t.svgBrush.extent=[[-1/0,1/0]]}function S(t){for(var e,r=t.slice(),n=[],i=r.shift();i;){for(e=i.slice();(i=r.shift())&&i[0]<=e[1];)e[1]=Math.max(e[1],i[1]);n.push(e)}return 1===n.length&&n[0][0]>n[0][1]&&(n=[]),n}t.exports={makeBrush:function(t,e,r,n,i,a){var o,l=function(){var t,e,r=[];return{set:function(n){1===(r=n.map((function(t){return t.slice().sort(s)})).sort(A)).length&&r[0][0]===-1/0&&r[0][1]===1/0&&(r=[[0,-1]]),t=S(r),e=r.reduce((function(t,e){return[Math.min(t[0],e[0]),Math.max(t[1],e[1])]}),[1/0,-1/0])},get:function(){return r.slice()},getConsolidated:function(){return t},getBounds:function(){return e}}}();return l.set(r),{filter:l,filterSpecified:e,svgBrush:{extent:[],brushStartCallback:n,brushCallback:(o=i,function(t){var e=t.brush,r=function(t){return t.svgBrush.extent.map((function(t){return t.slice()}))}(e),n=r.slice();e.filter.set(n),o()}),brushEndCallback:a}}},ensureAxisBrush:function(t,e,r){var i=t.selectAll(\\\".\\\"+n.cn.axisBrush).data(o,a);i.enter().append(\\\"g\\\").classed(n.cn.axisBrush,!0),function(t,e,r){var i=r._context.staticPlot,a=t.selectAll(\\\".background\\\").data(o);a.enter().append(\\\"rect\\\").classed(\\\"background\\\",!0).call(d).call(v).style(\\\"pointer-events\\\",i?\\\"none\\\":\\\"auto\\\").attr(\\\"transform\\\",l(0,n.verticalPadding)),a.call(k).attr(\\\"height\\\",(function(t){return t.height-n.verticalPadding}));var s=t.selectAll(\\\".highlight-shadow\\\").data(o);s.enter().append(\\\"line\\\").classed(\\\"highlight-shadow\\\",!0).attr(\\\"x\\\",-n.bar.width/2).attr(\\\"stroke-width\\\",n.bar.width+n.bar.strokeWidth).attr(\\\"stroke\\\",e).attr(\\\"opacity\\\",n.bar.strokeOpacity).attr(\\\"stroke-linecap\\\",\\\"butt\\\"),s.attr(\\\"y1\\\",(function(t){return t.height})).call(x);var u=t.selectAll(\\\".highlight\\\").data(o);u.enter().append(\\\"line\\\").classed(\\\"highlight\\\",!0).attr(\\\"x\\\",-n.bar.width/2).attr(\\\"stroke-width\\\",n.bar.width-n.bar.strokeWidth).attr(\\\"stroke\\\",n.bar.fillColor).attr(\\\"opacity\\\",n.bar.fillOpacity).attr(\\\"stroke-linecap\\\",\\\"butt\\\"),u.attr(\\\"y1\\\",(function(t){return t.height})).call(x)}(i,e,r)},cleanRanges:function(t,e){if(Array.isArray(t[0])?(t=t.map((function(t){return t.sort(s)})),t=e.multiselect?S(t.sort(A)):[t[0]]):t=[t.sort(s)],e.tickvals){var r=e.tickvals.slice().sort(s);if(!(t=t.map((function(t){var e=[p(0,r,t[0],[]),p(1,r,t[1],[])];if(e[1]>e[0])return e})).filter((function(t){return t}))).length)return}return t.length>1?t:t[0]}}},71791:function(t,e,r){\\\"use strict\\\";t.exports={attributes:r(73362),supplyDefaults:r(3633),calc:r(24639),colorbar:{container:\\\"line\\\",min:\\\"cmin\\\",max:\\\"cmax\\\"},moduleType:\\\"trace\\\",name:\\\"parcoords\\\",basePlotModule:r(49351),categories:[\\\"gl\\\",\\\"regl\\\",\\\"noOpacity\\\",\\\"noHover\\\"],meta:{}}},49351:function(t,e,r){\\\"use strict\\\";var n=r(39898),i=r(27659).a0,a=r(21341),o=r(77922);e.name=\\\"parcoords\\\",e.plot=function(t){var e=i(t.calcdata,\\\"parcoords\\\")[0];e.length&&a(t,e)},e.clean=function(t,e,r,n){var i=n._has&&n._has(\\\"parcoords\\\"),a=e._has&&e._has(\\\"parcoords\\\");i&&!a&&(n._paperdiv.selectAll(\\\".parcoords\\\").remove(),n._glimages.selectAll(\\\"*\\\").remove())},e.toSVG=function(t){var e=t._fullLayout._glimages,r=n.select(t).selectAll(\\\".svg-container\\\");r.filter((function(t,e){return e===r.size()-1})).selectAll(\\\".gl-canvas-context, .gl-canvas-focus\\\").each((function(){var t=this,r=t.toDataURL(\\\"image/png\\\");e.append(\\\"svg:image\\\").attr({xmlns:o.svg,\\\"xlink:href\\\":r,preserveAspectRatio:\\\"none\\\",x:0,y:0,width:t.style.width,height:t.style.height})})),window.setTimeout((function(){n.selectAll(\\\"#filterBarPattern\\\").attr(\\\"id\\\",\\\"filterBarPattern\\\")}),60)}},24639:function(t,e,r){\\\"use strict\\\";var n=r(71828).isArrayOrTypedArray,i=r(21081),a=r(28984).wrap;t.exports=function(t,e){var r,o;return i.hasColorscale(e,\\\"line\\\")&&n(e.line.color)?(r=e.line.color,o=i.extractOpts(e.line).colorscale,i.calc(t,e,{vals:r,containerStr:\\\"line\\\",cLetter:\\\"c\\\"})):(r=function(t){for(var e=new Array(t),r=0;r<t;r++)e[r]=.5;return e}(e._length),o=[[0,e.line.color],[1,e.line.color]]),a({lineColor:r,cscale:o})}},25706:function(t){\\\"use strict\\\";t.exports={maxDimensionCount:60,overdrag:45,verticalPadding:2,tickDistance:50,canvasPixelRatio:1,blockLineCount:5e3,layers:[\\\"contextLineLayer\\\",\\\"focusLineLayer\\\",\\\"pickLineLayer\\\"],axisTitleOffset:28,axisExtentOffset:10,bar:{width:4,captureWidth:10,fillColor:\\\"magenta\\\",fillOpacity:1,snapDuration:150,snapRatio:.25,snapClose:.01,strokeOpacity:1,strokeWidth:1,handleHeight:8,handleOpacity:1,handleOverlap:0},cn:{axisExtentText:\\\"axis-extent-text\\\",parcoordsLineLayers:\\\"parcoords-line-layers\\\",parcoordsLineLayer:\\\"parcoords-lines\\\",parcoords:\\\"parcoords\\\",parcoordsControlView:\\\"parcoords-control-view\\\",yAxis:\\\"y-axis\\\",axisOverlays:\\\"axis-overlays\\\",axis:\\\"axis\\\",axisHeading:\\\"axis-heading\\\",axisTitle:\\\"axis-title\\\",axisExtent:\\\"axis-extent\\\",axisExtentTop:\\\"axis-extent-top\\\",axisExtentTopText:\\\"axis-extent-top-text\\\",axisExtentBottom:\\\"axis-extent-bottom\\\",axisExtentBottomText:\\\"axis-extent-bottom-text\\\",axisBrush:\\\"axis-brush\\\"},id:{filterBarPattern:\\\"filter-bar-pattern\\\"}}},3633:function(t,e,r){\\\"use strict\\\";var n=r(71828),i=r(52075).hasColorscale,a=r(1586),o=r(27670).c,s=r(85501),l=r(89298),u=r(73362),c=r(57920),f=r(25706).maxDimensionCount,h=r(94397);function p(t,e,r,i){function a(r,i){return n.coerce(t,e,u.dimensions,r,i)}var o=a(\\\"values\\\"),s=a(\\\"visible\\\");if(o&&o.length||(s=e.visible=!1),s){a(\\\"label\\\"),a(\\\"tickvals\\\"),a(\\\"ticktext\\\"),a(\\\"tickformat\\\");var f=a(\\\"range\\\");e._ax={_id:\\\"y\\\",type:\\\"linear\\\",showexponent:\\\"all\\\",exponentformat:\\\"B\\\",range:f},l.setConvert(e._ax,i.layout),a(\\\"multiselect\\\");var h=a(\\\"constraintrange\\\");h&&(e.constraintrange=c.cleanRanges(h,e))}}t.exports=function(t,e,r,l){function c(r,i){return n.coerce(t,e,u,r,i)}var d=t.dimensions;Array.isArray(d)&&d.length>f&&(n.log(\\\"parcoords traces support up to \\\"+f+\\\" dimensions at the moment\\\"),d.splice(f));var v=s(t,e,{name:\\\"dimensions\\\",layout:l,handleItemDefaults:p}),g=function(t,e,r,o,s){var l=s(\\\"line.color\\\",r);if(i(t,\\\"line\\\")&&n.isArrayOrTypedArray(l)){if(l.length)return s(\\\"line.colorscale\\\"),a(t,e,o,s,{prefix:\\\"line.\\\",cLetter:\\\"c\\\"}),l.length;e.line.color=r}return 1/0}(t,e,r,l,c);o(e,l,c),Array.isArray(v)&&v.length||(e.visible=!1),h(e,v,\\\"values\\\",g);var y={family:l.font.family,size:Math.round(l.font.size/1.2),color:l.font.color};n.coerceFont(c,\\\"labelfont\\\",y),n.coerceFont(c,\\\"tickfont\\\",y),n.coerceFont(c,\\\"rangefont\\\",y),c(\\\"labelangle\\\"),c(\\\"labelside\\\"),c(\\\"unselected.line.color\\\"),c(\\\"unselected.line.opacity\\\")}},1602:function(t,e,r){\\\"use strict\\\";var n=r(71828).isTypedArray;e.convertTypedArray=function(t){return n(t)?Array.prototype.slice.call(t):t},e.isOrdinal=function(t){return!!t.tickvals},e.isVisible=function(t){return t.visible||!(\\\"visible\\\"in t)}},67618:function(t,e,r){\\\"use strict\\\";var n=r(71791);n.plot=r(21341),t.exports=n},83398:function(t,e,r){\\\"use strict\\\";var n=r(56068),i=n([\\\"precision highp float;\\\\n#define GLSLIFY 1\\\\n\\\\nvarying vec4 fragColor;\\\\n\\\\nattribute vec4 p01_04, p05_08, p09_12, p13_16,\\\\n               p17_20, p21_24, p25_28, p29_32,\\\\n               p33_36, p37_40, p41_44, p45_48,\\\\n               p49_52, p53_56, p57_60, colors;\\\\n\\\\nuniform mat4 dim0A, dim1A, dim0B, dim1B, dim0C, dim1C, dim0D, dim1D,\\\\n             loA, hiA, loB, hiB, loC, hiC, loD, hiD;\\\\n\\\\nuniform vec2 resolution, viewBoxPos, viewBoxSize;\\\\nuniform float maskHeight;\\\\nuniform float drwLayer; // 0: context, 1: focus, 2: pick\\\\nuniform vec4 contextColor;\\\\nuniform sampler2D maskTexture, palette;\\\\n\\\\nbool isPick    = (drwLayer > 1.5);\\\\nbool isContext = (drwLayer < 0.5);\\\\n\\\\nconst vec4 ZEROS = vec4(0.0, 0.0, 0.0, 0.0);\\\\nconst vec4 UNITS = vec4(1.0, 1.0, 1.0, 1.0);\\\\n\\\\nfloat val(mat4 p, mat4 v) {\\\\n    return dot(matrixCompMult(p, v) * UNITS, UNITS);\\\\n}\\\\n\\\\nfloat axisY(float ratio, mat4 A, mat4 B, mat4 C, mat4 D) {\\\\n    float y1 = val(A, dim0A) + val(B, dim0B) + val(C, dim0C) + val(D, dim0D);\\\\n    float y2 = val(A, dim1A) + val(B, dim1B) + val(C, dim1C) + val(D, dim1D);\\\\n    return y1 * (1.0 - ratio) + y2 * ratio;\\\\n}\\\\n\\\\nint iMod(int a, int b) {\\\\n    return a - b * (a / b);\\\\n}\\\\n\\\\nbool fOutside(float p, float lo, float hi) {\\\\n    return (lo < hi) && (lo > p || p > hi);\\\\n}\\\\n\\\\nbool vOutside(vec4 p, vec4 lo, vec4 hi) {\\\\n    return (\\\\n        fOutside(p[0], lo[0], hi[0]) ||\\\\n        fOutside(p[1], lo[1], hi[1]) ||\\\\n        fOutside(p[2], lo[2], hi[2]) ||\\\\n        fOutside(p[3], lo[3], hi[3])\\\\n    );\\\\n}\\\\n\\\\nbool mOutside(mat4 p, mat4 lo, mat4 hi) {\\\\n    return (\\\\n        vOutside(p[0], lo[0], hi[0]) ||\\\\n        vOutside(p[1], lo[1], hi[1]) ||\\\\n        vOutside(p[2], lo[2], hi[2]) ||\\\\n        vOutside(p[3], lo[3], hi[3])\\\\n    );\\\\n}\\\\n\\\\nbool outsideBoundingBox(mat4 A, mat4 B, mat4 C, mat4 D) {\\\\n    return mOutside(A, loA, hiA) ||\\\\n           mOutside(B, loB, hiB) ||\\\\n           mOutside(C, loC, hiC) ||\\\\n           mOutside(D, loD, hiD);\\\\n}\\\\n\\\\nbool outsideRasterMask(mat4 A, mat4 B, mat4 C, mat4 D) {\\\\n    mat4 pnts[4];\\\\n    pnts[0] = A;\\\\n    pnts[1] = B;\\\\n    pnts[2] = C;\\\\n    pnts[3] = D;\\\\n\\\\n    for(int i = 0; i < 4; ++i) {\\\\n        for(int j = 0; j < 4; ++j) {\\\\n            for(int k = 0; k < 4; ++k) {\\\\n                if(0 == iMod(\\\\n                    int(255.0 * texture2D(maskTexture,\\\\n                        vec2(\\\\n                            (float(i * 2 + j / 2) + 0.5) / 8.0,\\\\n                            (pnts[i][j][k] * (maskHeight - 1.0) + 1.0) / maskHeight\\\\n                        ))[3]\\\\n                    ) / int(pow(2.0, float(iMod(j * 4 + k, 8)))),\\\\n                    2\\\\n                )) return true;\\\\n            }\\\\n        }\\\\n    }\\\\n    return false;\\\\n}\\\\n\\\\nvec4 position(bool isContext, float v, mat4 A, mat4 B, mat4 C, mat4 D) {\\\\n    float x = 0.5 * sign(v) + 0.5;\\\\n    float y = axisY(x, A, B, C, D);\\\\n    float z = 1.0 - abs(v);\\\\n\\\\n    z += isContext ? 0.0 : 2.0 * float(\\\\n        outsideBoundingBox(A, B, C, D) ||\\\\n        outsideRasterMask(A, B, C, D)\\\\n    );\\\\n\\\\n    return vec4(\\\\n        2.0 * (vec2(x, y) * viewBoxSize + viewBoxPos) / resolution - 1.0,\\\\n        z,\\\\n        1.0\\\\n    );\\\\n}\\\\n\\\\nvoid main() {\\\\n    mat4 A = mat4(p01_04, p05_08, p09_12, p13_16);\\\\n    mat4 B = mat4(p17_20, p21_24, p25_28, p29_32);\\\\n    mat4 C = mat4(p33_36, p37_40, p41_44, p45_48);\\\\n    mat4 D = mat4(p49_52, p53_56, p57_60, ZEROS);\\\\n\\\\n    float v = colors[3];\\\\n\\\\n    gl_Position = position(isContext, v, A, B, C, D);\\\\n\\\\n    fragColor =\\\\n        isContext ? vec4(contextColor) :\\\\n        isPick ? vec4(colors.rgb, 1.0) : texture2D(palette, vec2(abs(v), 0.5));\\\\n}\\\\n\\\"]),a=n([\\\"precision highp float;\\\\n#define GLSLIFY 1\\\\n\\\\nvarying vec4 fragColor;\\\\n\\\\nvoid main() {\\\\n    gl_FragColor = fragColor;\\\\n}\\\\n\\\"]),o=r(25706).maxDimensionCount,s=r(71828),l=1e-6,u=new Uint8Array(4),c=new Uint8Array(4),f={shape:[256,1],format:\\\"rgba\\\",type:\\\"uint8\\\",mag:\\\"nearest\\\",min:\\\"nearest\\\"};function h(t,e,r,n,i){var a=t._gl;a.enable(a.SCISSOR_TEST),a.scissor(e,r,n,i),t.clear({color:[0,0,0,0],depth:1})}function p(t,e,r,n,i,a){var o=a.key;r.drawCompleted||(function(t){t.read({x:0,y:0,width:1,height:1,data:u})}(t),r.drawCompleted=!0),function s(l){var u=Math.min(n,i-l*n);0===l&&(window.cancelAnimationFrame(r.currentRafs[o]),delete r.currentRafs[o],h(t,a.scissorX,a.scissorY,a.scissorWidth,a.viewBoxSize[1])),r.clearOnly||(a.count=2*u,a.offset=2*l*n,e(a),l*n+u<i&&(r.currentRafs[o]=window.requestAnimationFrame((function(){s(l+1)}))),r.drawCompleted=!1)}(0)}function d(t,e){for(var r=new Array(256),n=0;n<256;n++)r[n]=t(n/255).concat(e);return r}function v(t,e){return(t>>>8*e)%256/255}function g(t,e,r){for(var n=new Array(8*e),i=0,a=0;a<e;a++)for(var o=0;o<2;o++)for(var s=0;s<4;s++){var l=4*t+s,u=r[64*a+l];63===l&&0===o&&(u*=-1),n[i++]=u}return n}function y(t){var e=\\\"0\\\"+t;return e.substr(e.length-2)}function m(t){return t<o?\\\"p\\\"+y(t+1)+\\\"_\\\"+y(t+4):\\\"colors\\\"}function x(t,e,r,n,i,a,o,l,u,c,f,h,p,d){for(var v=[[],[]],g=0;g<64;g++)v[0][g]=g===i?1:0,v[1][g]=g===a?1:0;o*=d,l*=d,u*=d,c*=d;var y=t.lines.canvasOverdrag*d,m=t.domain,x=t.canvasWidth*d,b=t.canvasHeight*d,_=t.pad.l*d,w=t.pad.b*d,T=t.layoutHeight*d,k=t.layoutWidth*d,A=t.deselectedLines.color,M=t.deselectedLines.opacity;return s.extendFlat({key:f,resolution:[x,b],viewBoxPos:[o+y,l],viewBoxSize:[u,c],i0:i,i1:a,dim0A:v[0].slice(0,16),dim0B:v[0].slice(16,32),dim0C:v[0].slice(32,48),dim0D:v[0].slice(48,64),dim1A:v[1].slice(0,16),dim1B:v[1].slice(16,32),dim1C:v[1].slice(32,48),dim1D:v[1].slice(48,64),drwLayer:h,contextColor:[A[0]/255,A[1]/255,A[2]/255,\\\"auto\\\"!==M?A[3]*M:Math.max(1/255,Math.pow(1/t.lines.color.length,1/3))],scissorX:(n===e?0:o+y)+(_-y)+k*m.x[0],scissorWidth:(n===r?x-o+y:u+.5)+(n===e?o+y:0),scissorY:l+w+T*m.y[0],scissorHeight:c,viewportX:_-y+k*m.x[0],viewportY:w+T*m.y[0],viewportWidth:x,viewportHeight:b},p)}function b(t){var e=2047,r=Math.max(0,Math.floor(t[0]*e),0),n=Math.min(e,Math.ceil(t[1]*e),e);return[Math.min(r,n),Math.max(r,n)]}t.exports=function(t,e){var r,n,u,y,_,w=e.context,T=e.pick,k=e.regl,A=k._gl,M=A.getParameter(A.ALIASED_LINE_WIDTH_RANGE),S=Math.max(M[0],Math.min(M[1],e.viewModel.plotGlPixelRatio)),E={currentRafs:{},drawCompleted:!0,clearOnly:!1},L=function(t){for(var e={},r=0;r<=o;r+=4)e[m(r)]=t.buffer({usage:\\\"dynamic\\\",type:\\\"float\\\",data:new Uint8Array(0)});return e}(k),C=k.texture(f),P=[];I(e);var O=k({profile:!1,blend:{enable:w,func:{srcRGB:\\\"src alpha\\\",dstRGB:\\\"one minus src alpha\\\",srcAlpha:1,dstAlpha:1},equation:{rgb:\\\"add\\\",alpha:\\\"add\\\"},color:[0,0,0,0]},depth:{enable:!w,mask:!0,func:\\\"less\\\",range:[0,1]},cull:{enable:!0,face:\\\"back\\\"},scissor:{enable:!0,box:{x:k.prop(\\\"scissorX\\\"),y:k.prop(\\\"scissorY\\\"),width:k.prop(\\\"scissorWidth\\\"),height:k.prop(\\\"scissorHeight\\\")}},viewport:{x:k.prop(\\\"viewportX\\\"),y:k.prop(\\\"viewportY\\\"),width:k.prop(\\\"viewportWidth\\\"),height:k.prop(\\\"viewportHeight\\\")},dither:!1,vert:i,frag:a,primitive:\\\"lines\\\",lineWidth:S,attributes:L,uniforms:{resolution:k.prop(\\\"resolution\\\"),viewBoxPos:k.prop(\\\"viewBoxPos\\\"),viewBoxSize:k.prop(\\\"viewBoxSize\\\"),dim0A:k.prop(\\\"dim0A\\\"),dim1A:k.prop(\\\"dim1A\\\"),dim0B:k.prop(\\\"dim0B\\\"),dim1B:k.prop(\\\"dim1B\\\"),dim0C:k.prop(\\\"dim0C\\\"),dim1C:k.prop(\\\"dim1C\\\"),dim0D:k.prop(\\\"dim0D\\\"),dim1D:k.prop(\\\"dim1D\\\"),loA:k.prop(\\\"loA\\\"),hiA:k.prop(\\\"hiA\\\"),loB:k.prop(\\\"loB\\\"),hiB:k.prop(\\\"hiB\\\"),loC:k.prop(\\\"loC\\\"),hiC:k.prop(\\\"hiC\\\"),loD:k.prop(\\\"loD\\\"),hiD:k.prop(\\\"hiD\\\"),palette:C,contextColor:k.prop(\\\"contextColor\\\"),maskTexture:k.prop(\\\"maskTexture\\\"),drwLayer:k.prop(\\\"drwLayer\\\"),maskHeight:k.prop(\\\"maskHeight\\\")},offset:k.prop(\\\"offset\\\"),count:k.prop(\\\"count\\\")});function I(t){r=t.model,n=t.viewModel,u=n.dimensions.slice(),y=u[0]?u[0].values.length:0;var e=r.lines,i=T?e.color.map((function(t,r){return r/e.color.length})):e.color,a=function(t,e,r){for(var n,i=new Array(t*(o+4)),a=0,s=0;s<t;s++){for(var u=0;u<o;u++)i[a++]=u<e.length?e[u].paddedUnitValues[s]:.5;i[a++]=v(s,2),i[a++]=v(s,1),i[a++]=v(s,0),i[a++]=(n=r[s],Math.max(l,Math.min(.999999,n)))}return i}(y,u,i);!function(t,e,r){for(var n=0;n<=o;n+=4)t[m(n)](g(n/4,e,r))}(L,y,a),w||T||(C=k.texture(s.extendFlat({data:d(r.unitToColor,255)},f)))}return{render:function(t,e,n){var i,a,o,s=t.length,l=1/0,c=-1/0;for(i=0;i<s;i++)t[i].dim0.canvasX<l&&(l=t[i].dim0.canvasX,a=i),t[i].dim1.canvasX>c&&(c=t[i].dim1.canvasX,o=i);0===s&&h(k,0,0,r.canvasWidth,r.canvasHeight);var f=function(t){var e,r,n,i=[[],[]];for(n=0;n<64;n++){var a=!t&&n<u.length?u[n].brush.filter.getBounds():[-1/0,1/0];i[0][n]=a[0],i[1][n]=a[1]}var o=new Array(16384);for(e=0;e<16384;e++)o[e]=255;if(!t)for(e=0;e<u.length;e++){var s=e%8,l=(e-s)/8,c=Math.pow(2,s),f=u[e].brush.filter.get();if(!(f.length<2)){var h=b(f[0])[1];for(r=1;r<f.length;r++){var p=b(f[r]);for(n=h+1;n<p[0];n++)o[8*n+l]&=~c;h=Math.max(h,p[1])}}}var d={shape:[8,2048],format:\\\"alpha\\\",type:\\\"uint8\\\",mag:\\\"nearest\\\",min:\\\"nearest\\\",data:o};return _?_(d):_=k.texture(d),{maskTexture:_,maskHeight:2048,loA:i[0].slice(0,16),loB:i[0].slice(16,32),loC:i[0].slice(32,48),loD:i[0].slice(48,64),hiA:i[1].slice(0,16),hiB:i[1].slice(16,32),hiC:i[1].slice(32,48),hiD:i[1].slice(48,64)}}(w);for(i=0;i<s;i++){var d=t[i],v=d.dim0.crossfilterDimensionIndex,g=d.dim1.crossfilterDimensionIndex,m=d.canvasX,A=d.canvasY,M=m+d.panelSizeX,S=d.plotGlPixelRatio;if(e||!P[v]||P[v][0]!==m||P[v][1]!==M){P[v]=[m,M];var L=x(r,a,o,i,v,g,m,A,d.panelSizeX,d.panelSizeY,d.dim0.crossfilterDimensionIndex,w?0:T?2:1,f,S);E.clearOnly=n;var C=e?r.lines.blockLineCount:y;p(k,O,E,C,y,L)}}},readPixel:function(t,e){return k.read({x:t,y:e,width:1,height:1,data:c}),c},readPixels:function(t,e,r,n){var i=new Uint8Array(4*r*n);return k.read({x:t,y:e,width:r,height:n,data:i}),i},destroy:function(){for(var e in t.style[\\\"pointer-events\\\"]=\\\"none\\\",C.destroy(),_&&_.destroy(),L)L[e].destroy()},update:I}}},94397:function(t){\\\"use strict\\\";t.exports=function(t,e,r,n){var i,a;for(n||(n=1/0),i=0;i<e.length;i++)(a=e[i]).visible&&(n=Math.min(n,a[r].length));for(n===1/0&&(n=0),t._length=n,i=0;i<e.length;i++)(a=e[i]).visible&&(a._length=n);return n}},17171:function(t,e,r){\\\"use strict\\\";var n=r(39898),i=r(71828),a=i.numberFormat,o=r(36652),s=r(89298),l=i.strRotate,u=i.strTranslate,c=r(63893),f=r(91424),h=r(21081),p=r(28984),d=p.keyFun,v=p.repeat,g=p.unwrap,y=r(1602),m=r(25706),x=r(57920),b=r(83398);function _(t,e,r){return i.aggNums(t,null,e,r)}function w(t,e){return k(_(Math.min,t,e),_(Math.max,t,e))}function T(t){var e=t.range;return e?k(e[0],e[1]):w(t.values,t._length)}function k(t,e){return!isNaN(t)&&isFinite(t)||(t=0),!isNaN(e)&&isFinite(e)||(e=0),t===e&&(0===t?(t-=1,e+=1):(t*=.9,e*=1.1)),[t,e]}function A(t,e,r,i,o){var s,l,u=T(r);return i?n.scale.ordinal().domain(i.map((s=a(r.tickformat),l=o,l?function(t,e){var r=l[e];return null==r?s(t):r}:s))).range(i.map((function(r){var n=(r-u[0])/(u[1]-u[0]);return t-e+n*(2*e-t)}))):n.scale.linear().domain(u).range([t-e,e])}function M(t){if(t.tickvals){var e=T(t);return n.scale.ordinal().domain(t.tickvals).range(t.tickvals.map((function(t){return(t-e[0])/(e[1]-e[0])})))}}function S(t){var e=t.map((function(t){return t[0]})),r=t.map((function(t){var e=o(t[1]);return n.rgb(\\\"rgb(\\\"+e[0]+\\\",\\\"+e[1]+\\\",\\\"+e[2]+\\\")\\\")})),i=\\\"rgb\\\".split(\\\"\\\").map((function(t){return n.scale.linear().clamp(!0).domain(e).range(r.map((i=t,function(t){return t[i]})));var i}));return function(t){return i.map((function(e){return e(t)}))}}function E(t){return t.dimensions.some((function(t){return t.brush.filterSpecified}))}function L(t,e,r){var a=g(e),s=a.trace,l=y.convertTypedArray(a.lineColor),u=s.line,c={color:o(s.unselected.line.color),opacity:s.unselected.line.opacity},f=h.extractOpts(u),p=f.reversescale?h.flipScale(a.cscale):a.cscale,d=s.domain,v=s.dimensions,x=t.width,b=s.labelangle,_=s.labelside,w=s.labelfont,k=s.tickfont,A=s.rangefont,M=i.extendDeepNoArrays({},u,{color:l.map(n.scale.linear().domain(T({values:l,range:[f.min,f.max],_length:s._length}))),blockLineCount:m.blockLineCount,canvasOverdrag:m.overdrag*m.canvasPixelRatio}),E=Math.floor(x*(d.x[1]-d.x[0])),L=Math.floor(t.height*(d.y[1]-d.y[0])),C=t.margin||{l:80,r:80,t:100,b:80},P=E,O=L;return{key:r,colCount:v.filter(y.isVisible).length,dimensions:v,tickDistance:m.tickDistance,unitToColor:S(p),lines:M,deselectedLines:c,labelAngle:b,labelSide:_,labelFont:w,tickFont:k,rangeFont:A,layoutWidth:x,layoutHeight:t.height,domain:d,translateX:d.x[0]*x,translateY:t.height-d.y[1]*t.height,pad:C,canvasWidth:P*m.canvasPixelRatio+2*M.canvasOverdrag,canvasHeight:O*m.canvasPixelRatio,width:P,height:O,canvasPixelRatio:m.canvasPixelRatio}}function C(t,e,r){var o=r.width,s=r.height,l=r.dimensions,u=r.canvasPixelRatio,c=function(t){return o*t/Math.max(1,r.colCount-1)},f=m.verticalPadding/s,h=function(t,e){return n.scale.linear().range([e,t-e])}(s,m.verticalPadding),p={key:r.key,xScale:c,model:r,inBrushDrag:!1},d={};return p.dimensions=l.filter(y.isVisible).map((function(o,l){var v=function(t,e){return n.scale.linear().domain(T(t)).range([e,1-e])}(o,f),g=d[o.label];d[o.label]=(g||0)+1;var b=o.label+(g?\\\"__\\\"+g:\\\"\\\"),_=o.constraintrange,w=_&&_.length;w&&!Array.isArray(_[0])&&(_=[_]);var k=w?_.map((function(t){return t.map(v)})):[[-1/0,1/0]],S=o.values;S.length>o._length&&(S=S.slice(0,o._length));var L,C=o.tickvals;function P(t,e){return{val:t,text:L[e]}}function O(t,e){return t.val-e.val}if(Array.isArray(C)&&C.length){L=o.ticktext,Array.isArray(L)&&L.length?L.length>C.length?L=L.slice(0,C.length):C.length>L.length&&(C=C.slice(0,L.length)):L=C.map(a(o.tickformat));for(var I=1;I<C.length;I++)if(C[I]<C[I-1]){for(var D=C.map(P).sort(O),z=0;z<C.length;z++)C[z]=D[z].val,L[z]=D[z].text;break}}else C=void 0;return S=y.convertTypedArray(S),{key:b,label:o.label,tickFormat:o.tickformat,tickvals:C,ticktext:L,ordinal:y.isOrdinal(o),multiselect:o.multiselect,xIndex:l,crossfilterDimensionIndex:l,visibleIndex:o._index,height:s,values:S,paddedUnitValues:S.map(v),unitTickvals:C&&C.map(v),xScale:c,x:c(l),canvasX:c(l)*u,unitToPaddedPx:h,domainScale:A(s,m.verticalPadding,o,C,L),ordinalScale:M(o),parent:p,model:r,brush:x.makeBrush(t,w,k,(function(){t.linePickActive(!1)}),(function(){var e=p;e.focusLayer&&e.focusLayer.render(e.panels,!0);var r=E(e);!t.contextShown()&&r?(e.contextLayer&&e.contextLayer.render(e.panels,!0),t.contextShown(!0)):t.contextShown()&&!r&&(e.contextLayer&&e.contextLayer.render(e.panels,!0,!0),t.contextShown(!1))}),(function(r){if(p.focusLayer.render(p.panels,!0),p.pickLayer&&p.pickLayer.render(p.panels,!0),t.linePickActive(!0),e&&e.filterChanged){var n=v.invert,a=r.map((function(t){return t.map(n).sort(i.sorterAsc)})).sort((function(t,e){return t[0]-e[0]}));e.filterChanged(p.key,o._index,a)}}))}})),p}function P(t){t.classed(m.cn.axisExtentText,!0).attr(\\\"text-anchor\\\",\\\"middle\\\").style(\\\"cursor\\\",\\\"default\\\")}function O(t,e){var r=\\\"top\\\"===e?1:-1,n=t*Math.PI/180;return{dir:r,dx:Math.sin(n),dy:Math.cos(n),degrees:t}}function I(t,e,r){for(var n=e.panels||(e.panels=[]),i=t.data(),a=0;a<i.length-1;a++){var o=n[a]||(n[a]={}),s=i[a],l=i[a+1];o.dim0=s,o.dim1=l,o.canvasX=s.canvasX,o.panelSizeX=l.canvasX-s.canvasX,o.panelSizeY=e.model.canvasHeight,o.y=0,o.canvasY=0,o.plotGlPixelRatio=r}}function D(t,e){return s.tickText(t._ax,e,!1).text}function z(t,e){if(t.ordinal)return\\\"\\\";var r=t.domainScale.domain(),n=r[e?r.length-1:0];return D(t.model.dimensions[t.visibleIndex],n)}t.exports=function(t,e,r,a){var o=t._context.staticPlot,h=t._fullLayout,p=h._toppaper,_=h._glcontainer,T=t._context.plotGlPixelRatio,A=t._fullLayout.paper_bgcolor;!function(t){for(var e=0;e<t.length;e++)for(var r=0;r<t[e].length;r++)for(var n=t[e][r].trace,i=n.dimensions,a=0;a<i.length;a++){var o=i[a].values,l=i[a]._ax;l&&(l.range?l.range=k(l.range[0],l.range[1]):l.range=w(o,n._length),l.dtick||(l.dtick=.01*(Math.abs(l.range[1]-l.range[0])||1)),l.tickformat=i[a].tickformat,s.calcTicks(l),l.cleanRange())}}(e);var M,S,R=(M=!0,S=!1,{linePickActive:function(t){return arguments.length?M=!!t:M},contextShown:function(t){return arguments.length?S=!!t:S}}),F=e.filter((function(t){return g(t).trace.visible})).map(L.bind(0,r)).map(C.bind(0,R,a));_.each((function(t,e){return i.extendFlat(t,F[e])}));var B=_.selectAll(\\\".gl-canvas\\\").each((function(t){t.viewModel=F[0],t.viewModel.plotGlPixelRatio=T,t.viewModel.paperColor=A,t.model=t.viewModel?t.viewModel.model:null})),N=null;B.filter((function(t){return t.pick})).style(\\\"pointer-events\\\",o?\\\"none\\\":\\\"auto\\\").on(\\\"mousemove\\\",(function(t){if(R.linePickActive()&&t.lineLayer&&a&&a.hover){var e=n.event,r=this.width,i=this.height,o=n.mouse(this),s=o[0],l=o[1];if(s<0||l<0||s>=r||l>=i)return;var u=t.lineLayer.readPixel(s,i-1-l),c=0!==u[3],f=c?u[2]+256*(u[1]+256*u[0]):null,h={x:s,y:l,clientX:e.clientX,clientY:e.clientY,dataIndex:t.model.key,curveNumber:f};f!==N&&(c?a.hover(h):a.unhover&&a.unhover(h),N=f)}})),B.style(\\\"opacity\\\",(function(t){return t.pick?0:1})),p.style(\\\"background\\\",\\\"rgba(255, 255, 255, 0)\\\");var j=p.selectAll(\\\".\\\"+m.cn.parcoords).data(F,d);j.exit().remove(),j.enter().append(\\\"g\\\").classed(m.cn.parcoords,!0).style(\\\"shape-rendering\\\",\\\"crispEdges\\\").style(\\\"pointer-events\\\",\\\"none\\\"),j.attr(\\\"transform\\\",(function(t){return u(t.model.translateX,t.model.translateY)}));var U=j.selectAll(\\\".\\\"+m.cn.parcoordsControlView).data(v,d);U.enter().append(\\\"g\\\").classed(m.cn.parcoordsControlView,!0),U.attr(\\\"transform\\\",(function(t){return u(t.model.pad.l,t.model.pad.t)}));var V=U.selectAll(\\\".\\\"+m.cn.yAxis).data((function(t){return t.dimensions}),d);V.enter().append(\\\"g\\\").classed(m.cn.yAxis,!0),U.each((function(t){I(V,t,T)})),B.each((function(t){if(t.viewModel){!t.lineLayer||a?t.lineLayer=b(this,t):t.lineLayer.update(t),(t.key||0===t.key)&&(t.viewModel[t.key]=t.lineLayer);var e=!t.context||a;t.lineLayer.render(t.viewModel.panels,e)}})),V.attr(\\\"transform\\\",(function(t){return u(t.xScale(t.xIndex),0)})),V.call(n.behavior.drag().origin((function(t){return t})).on(\\\"drag\\\",(function(t){var e=t.parent;R.linePickActive(!1),t.x=Math.max(-m.overdrag,Math.min(t.model.width+m.overdrag,n.event.x)),t.canvasX=t.x*t.model.canvasPixelRatio,V.sort((function(t,e){return t.x-e.x})).each((function(e,r){e.xIndex=r,e.x=t===e?e.x:e.xScale(e.xIndex),e.canvasX=e.x*e.model.canvasPixelRatio})),I(V,e,T),V.filter((function(e){return 0!==Math.abs(t.xIndex-e.xIndex)})).attr(\\\"transform\\\",(function(t){return u(t.xScale(t.xIndex),0)})),n.select(this).attr(\\\"transform\\\",u(t.x,0)),V.each((function(r,n,i){i===t.parent.key&&(e.dimensions[n]=r)})),e.contextLayer&&e.contextLayer.render(e.panels,!1,!E(e)),e.focusLayer.render&&e.focusLayer.render(e.panels)})).on(\\\"dragend\\\",(function(t){var e=t.parent;t.x=t.xScale(t.xIndex),t.canvasX=t.x*t.model.canvasPixelRatio,I(V,e,T),n.select(this).attr(\\\"transform\\\",(function(t){return u(t.x,0)})),e.contextLayer&&e.contextLayer.render(e.panels,!1,!E(e)),e.focusLayer&&e.focusLayer.render(e.panels),e.pickLayer&&e.pickLayer.render(e.panels,!0),R.linePickActive(!0),a&&a.axesMoved&&a.axesMoved(e.key,e.dimensions.map((function(t){return t.crossfilterDimensionIndex})))}))),V.exit().remove();var H=V.selectAll(\\\".\\\"+m.cn.axisOverlays).data(v,d);H.enter().append(\\\"g\\\").classed(m.cn.axisOverlays,!0),H.selectAll(\\\".\\\"+m.cn.axis).remove();var q=H.selectAll(\\\".\\\"+m.cn.axis).data(v,d);q.enter().append(\\\"g\\\").classed(m.cn.axis,!0),q.each((function(t){var e=t.model.height/t.model.tickDistance,r=t.domainScale,i=r.domain();n.select(this).call(n.svg.axis().orient(\\\"left\\\").tickSize(4).outerTickSize(2).ticks(e,t.tickFormat).tickValues(t.ordinal?i:null).tickFormat((function(e){return y.isOrdinal(t)?e:D(t.model.dimensions[t.visibleIndex],e)})).scale(r)),f.font(q.selectAll(\\\"text\\\"),t.model.tickFont)})),q.selectAll(\\\".domain, .tick>line\\\").attr(\\\"fill\\\",\\\"none\\\").attr(\\\"stroke\\\",\\\"black\\\").attr(\\\"stroke-opacity\\\",.25).attr(\\\"stroke-width\\\",\\\"1px\\\"),q.selectAll(\\\"text\\\").style(\\\"text-shadow\\\",c.makeTextShadow(A)).style(\\\"cursor\\\",\\\"default\\\");var G=H.selectAll(\\\".\\\"+m.cn.axisHeading).data(v,d);G.enter().append(\\\"g\\\").classed(m.cn.axisHeading,!0);var Z=G.selectAll(\\\".\\\"+m.cn.axisTitle).data(v,d);Z.enter().append(\\\"text\\\").classed(m.cn.axisTitle,!0).attr(\\\"text-anchor\\\",\\\"middle\\\").style(\\\"cursor\\\",\\\"ew-resize\\\").style(\\\"pointer-events\\\",o?\\\"none\\\":\\\"auto\\\"),Z.text((function(t){return t.label})).each((function(e){var r=n.select(this);f.font(r,e.model.labelFont),c.convertToTspans(r,t)})).attr(\\\"transform\\\",(function(t){var e=O(t.model.labelAngle,t.model.labelSide),r=m.axisTitleOffset;return(e.dir>0?\\\"\\\":u(0,2*r+t.model.height))+l(e.degrees)+u(-r*e.dx,-r*e.dy)})).attr(\\\"text-anchor\\\",(function(t){var e=O(t.model.labelAngle,t.model.labelSide);return 2*Math.abs(e.dx)>Math.abs(e.dy)?e.dir*e.dx<0?\\\"start\\\":\\\"end\\\":\\\"middle\\\"}));var Y=H.selectAll(\\\".\\\"+m.cn.axisExtent).data(v,d);Y.enter().append(\\\"g\\\").classed(m.cn.axisExtent,!0);var W=Y.selectAll(\\\".\\\"+m.cn.axisExtentTop).data(v,d);W.enter().append(\\\"g\\\").classed(m.cn.axisExtentTop,!0),W.attr(\\\"transform\\\",u(0,-m.axisExtentOffset));var X=W.selectAll(\\\".\\\"+m.cn.axisExtentTopText).data(v,d);X.enter().append(\\\"text\\\").classed(m.cn.axisExtentTopText,!0).call(P),X.text((function(t){return z(t,!0)})).each((function(t){f.font(n.select(this),t.model.rangeFont)}));var J=Y.selectAll(\\\".\\\"+m.cn.axisExtentBottom).data(v,d);J.enter().append(\\\"g\\\").classed(m.cn.axisExtentBottom,!0),J.attr(\\\"transform\\\",(function(t){return u(0,t.model.height+m.axisExtentOffset)}));var K=J.selectAll(\\\".\\\"+m.cn.axisExtentBottomText).data(v,d);K.enter().append(\\\"text\\\").classed(m.cn.axisExtentBottomText,!0).attr(\\\"dy\\\",\\\"0.75em\\\").call(P),K.text((function(t){return z(t,!1)})).each((function(t){f.font(n.select(this),t.model.rangeFont)})),x.ensureAxisBrush(H,A,t)}},21341:function(t,e,r){\\\"use strict\\\";var n=r(17171),i=r(79749),a=r(1602).isVisible,o={};function s(t,e,r){var n=e.indexOf(r),i=t.indexOf(n);return-1===i&&(i+=e.length),i}(t.exports=function(t,e){var r=t._fullLayout;if(i(t,[],o)){var l={},u={},c={},f={},h=r._size;e.forEach((function(e,r){var n=e[0].trace;c[r]=n.index;var i=f[r]=n._fullInput.index;l[r]=t.data[i].dimensions,u[r]=t.data[i].dimensions.slice()})),n(t,e,{width:h.w,height:h.h,margin:{t:h.t,r:h.r,b:h.b,l:h.l}},{filterChanged:function(e,n,i){var a=u[e][n],o=i.map((function(t){return t.slice()})),s=\\\"dimensions[\\\"+n+\\\"].constraintrange\\\",l=r._tracePreGUI[t._fullData[c[e]]._fullInput.uid];if(void 0===l[s]){var h=a.constraintrange;l[s]=h||null}var p=t._fullData[c[e]].dimensions[n];o.length?(1===o.length&&(o=o[0]),a.constraintrange=o,p.constraintrange=o.slice(),o=[o]):(delete a.constraintrange,delete p.constraintrange,o=null);var d={};d[s]=o,t.emit(\\\"plotly_restyle\\\",[d,[f[e]]])},hover:function(e){t.emit(\\\"plotly_hover\\\",e)},unhover:function(e){t.emit(\\\"plotly_unhover\\\",e)},axesMoved:function(e,r){var n=function(t,e){return function(r,n){return s(t,e,r)-s(t,e,n)}}(r,u[e].filter(a));l[e].sort(n),u[e].filter((function(t){return!a(t)})).sort((function(t){return u[e].indexOf(t)})).forEach((function(t){l[e].splice(l[e].indexOf(t),1),l[e].splice(u[e].indexOf(t),0,t)})),t.emit(\\\"plotly_restyle\\\",[{dimensions:[l[e]]},[f[e]]])}})}}).reglPrecompiled=o},34e3:function(t,e,r){\\\"use strict\\\";var n=r(9012),i=r(27670).Y,a=r(41940),o=r(22399),s=r(5386).fF,l=r(5386).si,u=r(1426).extendFlat,c=r(79952).u,f=a({editType:\\\"plot\\\",arrayOk:!0,colorEditType:\\\"plot\\\"});t.exports={labels:{valType:\\\"data_array\\\",editType:\\\"calc\\\"},label0:{valType:\\\"number\\\",dflt:0,editType:\\\"calc\\\"},dlabel:{valType:\\\"number\\\",dflt:1,editType:\\\"calc\\\"},values:{valType:\\\"data_array\\\",editType:\\\"calc\\\"},marker:{colors:{valType:\\\"data_array\\\",editType:\\\"calc\\\"},line:{color:{valType:\\\"color\\\",dflt:o.defaultLine,arrayOk:!0,editType:\\\"style\\\"},width:{valType:\\\"number\\\",min:0,dflt:0,arrayOk:!0,editType:\\\"style\\\"},editType:\\\"calc\\\"},pattern:c,editType:\\\"calc\\\"},text:{valType:\\\"data_array\\\",editType:\\\"plot\\\"},hovertext:{valType:\\\"string\\\",dflt:\\\"\\\",arrayOk:!0,editType:\\\"style\\\"},scalegroup:{valType:\\\"string\\\",dflt:\\\"\\\",editType:\\\"calc\\\"},textinfo:{valType:\\\"flaglist\\\",flags:[\\\"label\\\",\\\"text\\\",\\\"value\\\",\\\"percent\\\"],extras:[\\\"none\\\"],editType:\\\"calc\\\"},hoverinfo:u({},n.hoverinfo,{flags:[\\\"label\\\",\\\"text\\\",\\\"value\\\",\\\"percent\\\",\\\"name\\\"]}),hovertemplate:s({},{keys:[\\\"label\\\",\\\"color\\\",\\\"value\\\",\\\"percent\\\",\\\"text\\\"]}),texttemplate:l({editType:\\\"plot\\\"},{keys:[\\\"label\\\",\\\"color\\\",\\\"value\\\",\\\"percent\\\",\\\"text\\\"]}),textposition:{valType:\\\"enumerated\\\",values:[\\\"inside\\\",\\\"outside\\\",\\\"auto\\\",\\\"none\\\"],dflt:\\\"auto\\\",arrayOk:!0,editType:\\\"plot\\\"},textfont:u({},f,{}),insidetextorientation:{valType:\\\"enumerated\\\",values:[\\\"horizontal\\\",\\\"radial\\\",\\\"tangential\\\",\\\"auto\\\"],dflt:\\\"auto\\\",editType:\\\"plot\\\"},insidetextfont:u({},f,{}),outsidetextfont:u({},f,{}),automargin:{valType:\\\"boolean\\\",dflt:!1,editType:\\\"plot\\\"},title:{text:{valType:\\\"string\\\",dflt:\\\"\\\",editType:\\\"plot\\\"},font:u({},f,{}),position:{valType:\\\"enumerated\\\",values:[\\\"top left\\\",\\\"top center\\\",\\\"top right\\\",\\\"middle center\\\",\\\"bottom left\\\",\\\"bottom center\\\",\\\"bottom right\\\"],editType:\\\"plot\\\"},editType:\\\"plot\\\"},domain:i({name:\\\"pie\\\",trace:!0,editType:\\\"calc\\\"}),hole:{valType:\\\"number\\\",min:0,max:1,dflt:0,editType:\\\"calc\\\"},sort:{valType:\\\"boolean\\\",dflt:!0,editType:\\\"calc\\\"},direction:{valType:\\\"enumerated\\\",values:[\\\"clockwise\\\",\\\"counterclockwise\\\"],dflt:\\\"counterclockwise\\\",editType:\\\"calc\\\"},rotation:{valType:\\\"angle\\\",dflt:0,editType:\\\"calc\\\"},pull:{valType:\\\"number\\\",min:0,max:1,dflt:0,arrayOk:!0,editType:\\\"calc\\\"},_deprecated:{title:{valType:\\\"string\\\",dflt:\\\"\\\",editType:\\\"calc\\\"},titlefont:u({},f,{}),titleposition:{valType:\\\"enumerated\\\",values:[\\\"top left\\\",\\\"top center\\\",\\\"top right\\\",\\\"middle center\\\",\\\"bottom left\\\",\\\"bottom center\\\",\\\"bottom right\\\"],editType:\\\"calc\\\"}}}},13584:function(t,e,r){\\\"use strict\\\";var n=r(74875);e.name=\\\"pie\\\",e.plot=function(t,r,i,a){n.plotBasePlot(e.name,t,r,i,a)},e.clean=function(t,r,i,a){n.cleanBasePlot(e.name,t,r,i,a)}},32354:function(t,e,r){\\\"use strict\\\";var n=r(92770),i=r(84267),a=r(7901),o={};function s(t){return function(e,r){return!!e&&!!(e=i(e)).isValid()&&(e=a.addOpacity(e,e.getAlpha()),t[r]||(t[r]=e),e)}}function l(t,e){var r,n=JSON.stringify(t),a=e[n];if(!a){for(a=t.slice(),r=0;r<t.length;r++)a.push(i(t[r]).lighten(20).toHexString());for(r=0;r<t.length;r++)a.push(i(t[r]).darken(20).toHexString());e[n]=a}return a}t.exports={calc:function(t,e){var r,i,a=[],o=t._fullLayout,l=o.hiddenlabels||[],u=e.labels,c=e.marker.colors||[],f=e.values,h=e._length,p=e._hasValues&&h;if(e.dlabel)for(u=new Array(h),r=0;r<h;r++)u[r]=String(e.label0+r*e.dlabel);var d={},v=s(o[\\\"_\\\"+e.type+\\\"colormap\\\"]),g=0,y=!1;for(r=0;r<h;r++){var m,x,b;if(p){if(m=f[r],!n(m))continue;m=+m}else m=1;void 0!==(x=u[r])&&\\\"\\\"!==x||(x=r);var _=d[x=String(x)];void 0===_?(d[x]=a.length,(b=-1!==l.indexOf(x))||(g+=m),a.push({v:m,label:x,color:v(c[r],x),i:r,pts:[r],hidden:b})):(y=!0,(i=a[_]).v+=m,i.pts.push(r),i.hidden||(g+=m),!1===i.color&&c[r]&&(i.color=v(c[r],x)))}return a=a.filter((function(t){return t.v>=0})),(\\\"funnelarea\\\"===e.type?y:e.sort)&&a.sort((function(t,e){return e.v-t.v})),a[0]&&(a[0].vTotal=g),a},crossTraceCalc:function(t,e){var r=(e||{}).type;r||(r=\\\"pie\\\");var n=t._fullLayout,i=t.calcdata,a=n[r+\\\"colorway\\\"],s=n[\\\"_\\\"+r+\\\"colormap\\\"];n[\\\"extend\\\"+r+\\\"colors\\\"]&&(a=l(a,o));for(var u=0,c=0;c<i.length;c++){var f=i[c];if(f[0].trace.type===r)for(var h=0;h<f.length;h++){var p=f[h];!1===p.color&&(s[p.label]?p.color=s[p.label]:(s[p.label]=p.color=a[u%a.length],u++))}}},makePullColorFn:s,generateExtendedColors:l}},37434:function(t,e,r){\\\"use strict\\\";var n=r(92770),i=r(71828),a=r(34e3),o=r(27670).c,s=r(90769).handleText,l=r(71828).coercePattern;function u(t,e){var r=Array.isArray(t),a=i.isArrayOrTypedArray(e),o=Math.min(r?t.length:1/0,a?e.length:1/0);if(isFinite(o)||(o=0),o&&a){for(var s,l=0;l<o;l++){var u=e[l];if(n(u)&&u>0){s=!0;break}}s||(o=0)}return{hasLabels:r,hasValues:a,len:o}}function c(t,e,r,n,i){n(\\\"marker.line.width\\\")&&n(\\\"marker.line.color\\\",i?void 0:r.paper_bgcolor);var a=n(\\\"marker.colors\\\");l(n,\\\"marker.pattern\\\",a),t.marker&&!e.marker.pattern.fgcolor&&(e.marker.pattern.fgcolor=t.marker.colors),e.marker.pattern.bgcolor||(e.marker.pattern.bgcolor=r.paper_bgcolor)}t.exports={handleLabelsAndValues:u,handleMarkerDefaults:c,supplyDefaults:function(t,e,r,n){function l(r,n){return i.coerce(t,e,a,r,n)}var f=u(l(\\\"labels\\\"),l(\\\"values\\\")),h=f.len;if(e._hasLabels=f.hasLabels,e._hasValues=f.hasValues,!e._hasLabels&&e._hasValues&&(l(\\\"label0\\\"),l(\\\"dlabel\\\")),h){e._length=h,c(t,e,n,l,!0),l(\\\"scalegroup\\\");var p,d=l(\\\"text\\\"),v=l(\\\"texttemplate\\\");if(v||(p=l(\\\"textinfo\\\",Array.isArray(d)?\\\"text+percent\\\":\\\"percent\\\")),l(\\\"hovertext\\\"),l(\\\"hovertemplate\\\"),v||p&&\\\"none\\\"!==p){var g=l(\\\"textposition\\\");s(t,e,n,l,g,{moduleHasSelected:!1,moduleHasUnselected:!1,moduleHasConstrain:!1,moduleHasCliponaxis:!1,moduleHasTextangle:!1,moduleHasInsideanchor:!1}),(Array.isArray(g)||\\\"auto\\\"===g||\\\"outside\\\"===g)&&l(\\\"automargin\\\"),(\\\"inside\\\"===g||\\\"auto\\\"===g||Array.isArray(g))&&l(\\\"insidetextorientation\\\")}o(e,n,l);var y=l(\\\"hole\\\");if(l(\\\"title.text\\\")){var m=l(\\\"title.position\\\",y?\\\"middle center\\\":\\\"top center\\\");y||\\\"middle center\\\"!==m||(e.title.position=\\\"top center\\\"),i.coerceFont(l,\\\"title.font\\\",n.font)}l(\\\"sort\\\"),l(\\\"direction\\\"),l(\\\"rotation\\\"),l(\\\"pull\\\")}else e.visible=!1}}},20007:function(t,e,r){\\\"use strict\\\";var n=r(23469).appendArrayMultiPointValues;t.exports=function(t,e){var r={curveNumber:e.index,pointNumbers:t.pts,data:e._input,fullData:e,label:t.label,color:t.color,value:t.v,percent:t.percent,text:t.text,bbox:t.bbox,v:t.v};return 1===t.pts.length&&(r.pointNumber=r.i=t.pts[0]),n(r,e,t.pts),\\\"funnelarea\\\"===e.type&&(delete r.v,delete r.i),r}},22209:function(t,e,r){\\\"use strict\\\";var n=r(91424),i=r(7901);t.exports=function(t,e,r,a){var o=r.marker.pattern;o&&o.shape?n.pointStyle(t,r,a,e):i.fill(t,e.color)}},53581:function(t,e,r){\\\"use strict\\\";var n=r(71828);function i(t){return-1!==t.indexOf(\\\"e\\\")?t.replace(/[.]?0+e/,\\\"e\\\"):-1!==t.indexOf(\\\".\\\")?t.replace(/[.]?0+$/,\\\"\\\"):t}e.formatPiePercent=function(t,e){var r=i((100*t).toPrecision(3));return n.numSeparate(r,e)+\\\"%\\\"},e.formatPieValue=function(t,e){var r=i(t.toPrecision(10));return n.numSeparate(r,e)},e.getFirstFilled=function(t,e){if(Array.isArray(t))for(var r=0;r<e.length;r++){var n=t[e[r]];if(n||0===n||\\\"\\\"===n)return n}},e.castOption=function(t,r){return Array.isArray(t)?e.getFirstFilled(t,r):t||void 0},e.getRotationAngle=function(t){return(\\\"auto\\\"===t?0:t)*Math.PI/180}},58810:function(t,e,r){\\\"use strict\\\";t.exports={attributes:r(34e3),supplyDefaults:r(37434).supplyDefaults,supplyLayoutDefaults:r(92097),layoutAttributes:r(92774),calc:r(32354).calc,crossTraceCalc:r(32354).crossTraceCalc,plot:r(14575).plot,style:r(68357),styleOne:r(63463),moduleType:\\\"trace\\\",name:\\\"pie\\\",basePlotModule:r(13584),categories:[\\\"pie-like\\\",\\\"pie\\\",\\\"showLegend\\\"],meta:{}}},92774:function(t){\\\"use strict\\\";t.exports={hiddenlabels:{valType:\\\"data_array\\\",editType:\\\"calc\\\"},piecolorway:{valType:\\\"colorlist\\\",editType:\\\"calc\\\"},extendpiecolors:{valType:\\\"boolean\\\",dflt:!0,editType:\\\"calc\\\"}}},92097:function(t,e,r){\\\"use strict\\\";var n=r(71828),i=r(92774);t.exports=function(t,e){function r(r,a){return n.coerce(t,e,i,r,a)}r(\\\"hiddenlabels\\\"),r(\\\"piecolorway\\\",e.colorway),r(\\\"extendpiecolors\\\")}},14575:function(t,e,r){\\\"use strict\\\";var n=r(39898),i=r(74875),a=r(30211),o=r(7901),s=r(91424),l=r(71828),u=l.strScale,c=l.strTranslate,f=r(63893),h=r(72597),p=h.recordMinTextSize,d=h.clearMinTextSize,v=r(97313).TEXTPAD,g=r(53581),y=r(20007),m=r(71828).isValidTextValue;function x(t,e,r){var i=r[0],o=i.cx,s=i.cy,u=i.trace,c=\\\"funnelarea\\\"===u.type;\\\"_hasHoverLabel\\\"in u||(u._hasHoverLabel=!1),\\\"_hasHoverEvent\\\"in u||(u._hasHoverEvent=!1),t.on(\\\"mouseover\\\",(function(t){var r=e._fullLayout,f=e._fullData[u.index];if(!e._dragging&&!1!==r.hovermode){var h=f.hoverinfo;if(Array.isArray(h)&&(h=a.castHoverinfo({hoverinfo:[g.castOption(h,t.pts)],_module:u._module},r,0)),\\\"all\\\"===h&&(h=\\\"label+text+value+percent+name\\\"),f.hovertemplate||\\\"none\\\"!==h&&\\\"skip\\\"!==h&&h){var p=t.rInscribed||0,d=o+t.pxmid[0]*(1-p),v=s+t.pxmid[1]*(1-p),m=r.separators,x=[];if(h&&-1!==h.indexOf(\\\"label\\\")&&x.push(t.label),t.text=g.castOption(f.hovertext||f.text,t.pts),h&&-1!==h.indexOf(\\\"text\\\")){var b=t.text;l.isValidTextValue(b)&&x.push(b)}t.value=t.v,t.valueLabel=g.formatPieValue(t.v,m),h&&-1!==h.indexOf(\\\"value\\\")&&x.push(t.valueLabel),t.percent=t.v/i.vTotal,t.percentLabel=g.formatPiePercent(t.percent,m),h&&-1!==h.indexOf(\\\"percent\\\")&&x.push(t.percentLabel);var _=f.hoverlabel,w=_.font,T=[];a.loneHover({trace:u,x0:d-p*i.r,x1:d+p*i.r,y:v,_x0:c?o+t.TL[0]:d-p*i.r,_x1:c?o+t.TR[0]:d+p*i.r,_y0:c?s+t.TL[1]:v-p*i.r,_y1:c?s+t.BL[1]:v+p*i.r,text:x.join(\\\"<br>\\\"),name:f.hovertemplate||-1!==h.indexOf(\\\"name\\\")?f.name:void 0,idealAlign:t.pxmid[0]<0?\\\"left\\\":\\\"right\\\",color:g.castOption(_.bgcolor,t.pts)||t.color,borderColor:g.castOption(_.bordercolor,t.pts),fontFamily:g.castOption(w.family,t.pts),fontSize:g.castOption(w.size,t.pts),fontColor:g.castOption(w.color,t.pts),nameLength:g.castOption(_.namelength,t.pts),textAlign:g.castOption(_.align,t.pts),hovertemplate:g.castOption(f.hovertemplate,t.pts),hovertemplateLabels:t,eventData:[y(t,f)]},{container:r._hoverlayer.node(),outerContainer:r._paper.node(),gd:e,inOut_bbox:T}),t.bbox=T[0],u._hasHoverLabel=!0}u._hasHoverEvent=!0,e.emit(\\\"plotly_hover\\\",{points:[y(t,f)],event:n.event})}})),t.on(\\\"mouseout\\\",(function(t){var r=e._fullLayout,i=e._fullData[u.index],o=n.select(this).datum();u._hasHoverEvent&&(t.originalEvent=n.event,e.emit(\\\"plotly_unhover\\\",{points:[y(o,i)],event:n.event}),u._hasHoverEvent=!1),u._hasHoverLabel&&(a.loneUnhover(r._hoverlayer.node()),u._hasHoverLabel=!1)})),t.on(\\\"click\\\",(function(t){var r=e._fullLayout,i=e._fullData[u.index];e._dragging||!1===r.hovermode||(e._hoverdata=[y(t,i)],a.click(e,n.event))}))}function b(t,e,r){var n=g.castOption(t.insidetextfont.color,e.pts);!n&&t._input.textfont&&(n=g.castOption(t._input.textfont.color,e.pts));var i=g.castOption(t.insidetextfont.family,e.pts)||g.castOption(t.textfont.family,e.pts)||r.family,a=g.castOption(t.insidetextfont.size,e.pts)||g.castOption(t.textfont.size,e.pts)||r.size;return{color:n||o.contrast(e.color),family:i,size:a}}function _(t,e){for(var r,n,i=0;i<t.length;i++)if((n=(r=t[i][0]).trace).title.text){var a=n.title.text;n._meta&&(a=l.templateString(a,n._meta));var o=s.tester.append(\\\"text\\\").attr(\\\"data-notex\\\",1).text(a).call(s.font,n.title.font).call(f.convertToTspans,e),u=s.bBox(o.node(),!0);r.titleBox={width:u.width,height:u.height},o.remove()}}function w(t,e,r){var n=r.r||e.rpx1,i=e.rInscribed;if(e.startangle===e.stopangle)return{rCenter:1-i,scale:0,rotate:0,textPosAngle:0};var a,o=e.ring,s=1===o&&Math.abs(e.startangle-e.stopangle)===2*Math.PI,l=e.halfangle,u=e.midangle,c=r.trace.insidetextorientation,f=\\\"horizontal\\\"===c,h=\\\"tangential\\\"===c,p=\\\"radial\\\"===c,d=\\\"auto\\\"===c,v=[];if(!d){var g,y=function(r,i){if(function(t,e){var r=t.startangle,n=t.stopangle;return r>e&&e>n||r<e&&e<n}(e,r)){var s=Math.abs(r-e.startangle),l=Math.abs(r-e.stopangle),u=s<l?s:l;(a=\\\"tan\\\"===i?k(t,n,o,u,0):T(t,n,o,u,Math.PI/2)).textPosAngle=r,v.push(a)}};if(f||h){for(g=4;g>=-4;g-=2)y(Math.PI*g,\\\"tan\\\");for(g=4;g>=-4;g-=2)y(Math.PI*(g+1),\\\"tan\\\")}if(f||p){for(g=4;g>=-4;g-=2)y(Math.PI*(g+1.5),\\\"rad\\\");for(g=4;g>=-4;g-=2)y(Math.PI*(g+.5),\\\"rad\\\")}}if(s||d||f){var m=Math.sqrt(t.width*t.width+t.height*t.height);if((a={scale:i*n*2/m,rCenter:1-i,rotate:0}).textPosAngle=(e.startangle+e.stopangle)/2,a.scale>=1)return a;v.push(a)}(d||p)&&((a=T(t,n,o,l,u)).textPosAngle=(e.startangle+e.stopangle)/2,v.push(a)),(d||h)&&((a=k(t,n,o,l,u)).textPosAngle=(e.startangle+e.stopangle)/2,v.push(a));for(var x=0,b=0,_=0;_<v.length;_++){var w=v[_].scale;if(b<w&&(b=w,x=_),!d&&b>=1)break}return v[x]}function T(t,e,r,n,i){e=Math.max(0,e-2*v);var a=t.width/t.height,o=S(a,n,e,r);return{scale:2*o/t.height,rCenter:A(a,o/e),rotate:M(i)}}function k(t,e,r,n,i){e=Math.max(0,e-2*v);var a=t.height/t.width,o=S(a,n,e,r);return{scale:2*o/t.width,rCenter:A(a,o/e),rotate:M(i+Math.PI/2)}}function A(t,e){return Math.cos(e)-t*e}function M(t){return(180/Math.PI*t+720)%180-90}function S(t,e,r,n){var i=t+1/(2*Math.tan(e));return r*Math.min(1/(Math.sqrt(i*i+.5)+i),n/(Math.sqrt(t*t+n/2)+t))}function E(t,e){return t.v!==e.vTotal||e.trace.hole?Math.min(1/(1+1/Math.sin(t.halfangle)),t.ring/2):1}function L(t,e){var r=e.pxmid[0],n=e.pxmid[1],i=t.width/2,a=t.height/2;return r<0&&(i*=-1),n<0&&(a*=-1),{scale:1,rCenter:1,rotate:0,x:i+Math.abs(a)*(i>0?1:-1)/2,y:a/(1+r*r/(n*n)),outside:!0}}function C(t,e){var r,n,i,a=t.trace,o={x:t.cx,y:t.cy},s={tx:0,ty:0};s.ty+=a.title.font.size,i=O(a),-1!==a.title.position.indexOf(\\\"top\\\")?(o.y-=(1+i)*t.r,s.ty-=t.titleBox.height):-1!==a.title.position.indexOf(\\\"bottom\\\")&&(o.y+=(1+i)*t.r);var l,u=t.r/(void 0===(l=t.trace.aspectratio)?1:l),c=e.w*(a.domain.x[1]-a.domain.x[0])/2;return-1!==a.title.position.indexOf(\\\"left\\\")?(c+=u,o.x-=(1+i)*u,s.tx+=t.titleBox.width/2):-1!==a.title.position.indexOf(\\\"center\\\")?c*=2:-1!==a.title.position.indexOf(\\\"right\\\")&&(c+=u,o.x+=(1+i)*u,s.tx-=t.titleBox.width/2),r=c/t.titleBox.width,n=P(t,e)/t.titleBox.height,{x:o.x,y:o.y,scale:Math.min(r,n),tx:s.tx,ty:s.ty}}function P(t,e){var r=t.trace,n=e.h*(r.domain.y[1]-r.domain.y[0]);return Math.min(t.titleBox.height,n/2)}function O(t){var e,r=t.pull;if(!r)return 0;if(Array.isArray(r))for(r=0,e=0;e<t.pull.length;e++)t.pull[e]>r&&(r=t.pull[e]);return r}function I(t,e){for(var r=[],n=0;n<t.length;n++){var i=t[n][0],a=i.trace,o=a.domain,s=e.w*(o.x[1]-o.x[0]),l=e.h*(o.y[1]-o.y[0]);a.title.text&&\\\"middle center\\\"!==a.title.position&&(l-=P(i,e));var u=s/2,c=l/2;\\\"funnelarea\\\"!==a.type||a.scalegroup||(c/=a.aspectratio),i.r=Math.min(u,c)/(1+O(a)),i.cx=e.l+e.w*(a.domain.x[1]+a.domain.x[0])/2,i.cy=e.t+e.h*(1-a.domain.y[0])-l/2,a.title.text&&-1!==a.title.position.indexOf(\\\"bottom\\\")&&(i.cy-=P(i,e)),a.scalegroup&&-1===r.indexOf(a.scalegroup)&&r.push(a.scalegroup)}!function(t,e){for(var r,n,i,a=0;a<e.length;a++){var o=1/0,s=e[a];for(n=0;n<t.length;n++)if((i=(r=t[n][0]).trace).scalegroup===s){var l;if(\\\"pie\\\"===i.type)l=r.r*r.r;else if(\\\"funnelarea\\\"===i.type){var u,c;i.aspectratio>1?c=(u=r.r)/i.aspectratio:u=(c=r.r)*i.aspectratio,l=(u*=(1+i.baseratio)/2)*c}o=Math.min(o,l/r.vTotal)}for(n=0;n<t.length;n++)if((i=(r=t[n][0]).trace).scalegroup===s){var f=o*r.vTotal;\\\"funnelarea\\\"===i.type&&(f/=(1+i.baseratio)/2,f/=i.aspectratio),r.r=Math.sqrt(f)}}}(t,r)}function D(t,e){return[t*Math.sin(e),-t*Math.cos(e)]}function z(t,e,r){var n=t._fullLayout,i=r.trace,a=i.texttemplate,o=i.textinfo;if(!a&&o&&\\\"none\\\"!==o){var s,u=o.split(\\\"+\\\"),c=function(t){return-1!==u.indexOf(t)},f=c(\\\"label\\\"),h=c(\\\"text\\\"),p=c(\\\"value\\\"),d=c(\\\"percent\\\"),v=n.separators;if(s=f?[e.label]:[],h){var y=g.getFirstFilled(i.text,e.pts);m(y)&&s.push(y)}p&&s.push(g.formatPieValue(e.v,v)),d&&s.push(g.formatPiePercent(e.v/r.vTotal,v)),e.text=s.join(\\\"<br>\\\")}if(a){var x=l.castOption(i,e.i,\\\"texttemplate\\\");if(x){var b=function(t){return{label:t.label,value:t.v,valueLabel:g.formatPieValue(t.v,n.separators),percent:t.v/r.vTotal,percentLabel:g.formatPiePercent(t.v/r.vTotal,n.separators),color:t.color,text:t.text,customdata:l.castOption(i,t.i,\\\"customdata\\\")}}(e),_=g.getFirstFilled(i.text,e.pts);(m(_)||\\\"\\\"===_)&&(b.text=_),e.text=l.texttemplateString(x,b,t._fullLayout._d3locale,b,i._meta||{})}else e.text=\\\"\\\"}}function R(t,e){var r=t.rotate*Math.PI/180,n=Math.cos(r),i=Math.sin(r),a=(e.left+e.right)/2,o=(e.top+e.bottom)/2;t.textX=a*n-o*i,t.textY=a*i+o*n,t.noCenter=!0}t.exports={plot:function(t,e){var r=t._context.staticPlot,a=t._fullLayout,h=a._size;d(\\\"pie\\\",a),_(e,t),I(e,h);var v=l.makeTraceGroups(a._pielayer,e,\\\"trace\\\").each((function(e){var d=n.select(this),v=e[0],y=v.trace;!function(t){var e,r,n,i=t[0],a=i.r,o=i.trace,s=g.getRotationAngle(o.rotation),l=2*Math.PI/i.vTotal,u=\\\"px0\\\",c=\\\"px1\\\";if(\\\"counterclockwise\\\"===o.direction){for(e=0;e<t.length&&t[e].hidden;e++);if(e===t.length)return;s+=l*t[e].v,l*=-1,u=\\\"px1\\\",c=\\\"px0\\\"}for(n=D(a,s),e=0;e<t.length;e++)(r=t[e]).hidden||(r[u]=n,r.startangle=s,s+=l*r.v/2,r.pxmid=D(a,s),r.midangle=s,n=D(a,s+=l*r.v/2),r.stopangle=s,r[c]=n,r.largeArc=r.v>i.vTotal/2?1:0,r.halfangle=Math.PI*Math.min(r.v/i.vTotal,.5),r.ring=1-o.hole,r.rInscribed=E(r,i))}(e),d.attr(\\\"stroke-linejoin\\\",\\\"round\\\"),d.each((function(){var m=n.select(this).selectAll(\\\"g.slice\\\").data(e);m.enter().append(\\\"g\\\").classed(\\\"slice\\\",!0),m.exit().remove();var _=[[[],[]],[[],[]]],T=!1;m.each((function(i,o){if(i.hidden)n.select(this).selectAll(\\\"path,g\\\").remove();else{i.pointNumber=i.i,i.curveNumber=y.index,_[i.pxmid[1]<0?0:1][i.pxmid[0]<0?0:1].push(i);var u=v.cx,c=v.cy,h=n.select(this),d=h.selectAll(\\\"path.surface\\\").data([i]);if(d.enter().append(\\\"path\\\").classed(\\\"surface\\\",!0).style({\\\"pointer-events\\\":r?\\\"none\\\":\\\"all\\\"}),h.call(x,t,e),y.pull){var m=+g.castOption(y.pull,i.pts)||0;m>0&&(u+=m*i.pxmid[0],c+=m*i.pxmid[1])}i.cxFinal=u,i.cyFinal=c;var k=y.hole;if(i.v===v.vTotal){var A=\\\"M\\\"+(u+i.px0[0])+\\\",\\\"+(c+i.px0[1])+P(i.px0,i.pxmid,!0,1)+P(i.pxmid,i.px0,!0,1)+\\\"Z\\\";k?d.attr(\\\"d\\\",\\\"M\\\"+(u+k*i.px0[0])+\\\",\\\"+(c+k*i.px0[1])+P(i.px0,i.pxmid,!1,k)+P(i.pxmid,i.px0,!1,k)+\\\"Z\\\"+A):d.attr(\\\"d\\\",A)}else{var M=P(i.px0,i.px1,!0,1);if(k){var S=1-k;d.attr(\\\"d\\\",\\\"M\\\"+(u+k*i.px1[0])+\\\",\\\"+(c+k*i.px1[1])+P(i.px1,i.px0,!1,k)+\\\"l\\\"+S*i.px0[0]+\\\",\\\"+S*i.px0[1]+M+\\\"Z\\\")}else d.attr(\\\"d\\\",\\\"M\\\"+u+\\\",\\\"+c+\\\"l\\\"+i.px0[0]+\\\",\\\"+i.px0[1]+M+\\\"Z\\\")}z(t,i,v);var E=g.castOption(y.textposition,i.pts),C=h.selectAll(\\\"g.slicetext\\\").data(i.text&&\\\"none\\\"!==E?[0]:[]);C.enter().append(\\\"g\\\").classed(\\\"slicetext\\\",!0),C.exit().remove(),C.each((function(){var r=l.ensureSingle(n.select(this),\\\"text\\\",\\\"\\\",(function(t){t.attr(\\\"data-notex\\\",1)})),h=l.ensureUniformFontSize(t,\\\"outside\\\"===E?function(t,e,r){return{color:g.castOption(t.outsidetextfont.color,e.pts)||g.castOption(t.textfont.color,e.pts)||r.color,family:g.castOption(t.outsidetextfont.family,e.pts)||g.castOption(t.textfont.family,e.pts)||r.family,size:g.castOption(t.outsidetextfont.size,e.pts)||g.castOption(t.textfont.size,e.pts)||r.size}}(y,i,a.font):b(y,i,a.font));r.text(i.text).attr({class:\\\"slicetext\\\",transform:\\\"\\\",\\\"text-anchor\\\":\\\"middle\\\"}).call(s.font,h).call(f.convertToTspans,t);var d,m=s.bBox(r.node());if(\\\"outside\\\"===E)d=L(m,i);else if(d=w(m,i,v),\\\"auto\\\"===E&&d.scale<1){var x=l.ensureUniformFontSize(t,y.outsidetextfont);r.call(s.font,x),d=L(m=s.bBox(r.node()),i)}var _=d.textPosAngle,k=void 0===_?i.pxmid:D(v.r,_);if(d.targetX=u+k[0]*d.rCenter+(d.x||0),d.targetY=c+k[1]*d.rCenter+(d.y||0),R(d,m),d.outside){var A=d.targetY;i.yLabelMin=A-m.height/2,i.yLabelMid=A,i.yLabelMax=A+m.height/2,i.labelExtraX=0,i.labelExtraY=0,T=!0}d.fontSize=h.size,p(y.type,d,a),e[o].transform=d,l.setTransormAndDisplay(r,d)}))}function P(t,e,r,n){var a=n*(e[0]-t[0]),o=n*(e[1]-t[1]);return\\\"a\\\"+n*v.r+\\\",\\\"+n*v.r+\\\" 0 \\\"+i.largeArc+(r?\\\" 1 \\\":\\\" 0 \\\")+a+\\\",\\\"+o}}));var k=n.select(this).selectAll(\\\"g.titletext\\\").data(y.title.text?[0]:[]);if(k.enter().append(\\\"g\\\").classed(\\\"titletext\\\",!0),k.exit().remove(),k.each((function(){var e,r=l.ensureSingle(n.select(this),\\\"text\\\",\\\"\\\",(function(t){t.attr(\\\"data-notex\\\",1)})),i=y.title.text;y._meta&&(i=l.templateString(i,y._meta)),r.text(i).attr({class:\\\"titletext\\\",transform:\\\"\\\",\\\"text-anchor\\\":\\\"middle\\\"}).call(s.font,y.title.font).call(f.convertToTspans,t),e=\\\"middle center\\\"===y.title.position?function(t){var e=Math.sqrt(t.titleBox.width*t.titleBox.width+t.titleBox.height*t.titleBox.height);return{x:t.cx,y:t.cy,scale:t.trace.hole*t.r*2/e,tx:0,ty:-t.titleBox.height/2+t.trace.title.font.size}}(v):C(v,h),r.attr(\\\"transform\\\",c(e.x,e.y)+u(Math.min(1,e.scale))+c(e.tx,e.ty))})),T&&function(t,e){var r,n,i,a,o,s,l,u,c,f,h,p,d;function v(t,e){return t.pxmid[1]-e.pxmid[1]}function y(t,e){return e.pxmid[1]-t.pxmid[1]}function m(t,r){r||(r={});var i,u,c,h,p=r.labelExtraY+(n?r.yLabelMax:r.yLabelMin),d=n?t.yLabelMin:t.yLabelMax,v=n?t.yLabelMax:t.yLabelMin,y=t.cyFinal+o(t.px0[1],t.px1[1]),m=p-d;if(m*l>0&&(t.labelExtraY=m),Array.isArray(e.pull))for(u=0;u<f.length;u++)(c=f[u])===t||(g.castOption(e.pull,t.pts)||0)>=(g.castOption(e.pull,c.pts)||0)||((t.pxmid[1]-c.pxmid[1])*l>0?(m=c.cyFinal+o(c.px0[1],c.px1[1])-d-t.labelExtraY)*l>0&&(t.labelExtraY+=m):(v+t.labelExtraY-y)*l>0&&(i=3*s*Math.abs(u-f.indexOf(t)),(h=c.cxFinal+a(c.px0[0],c.px1[0])+i-(t.cxFinal+t.pxmid[0])-t.labelExtraX)*s>0&&(t.labelExtraX+=h)))}for(n=0;n<2;n++)for(i=n?v:y,o=n?Math.max:Math.min,l=n?1:-1,r=0;r<2;r++){for(a=r?Math.max:Math.min,s=r?1:-1,(u=t[n][r]).sort(i),c=t[1-n][r],f=c.concat(u),p=[],h=0;h<u.length;h++)void 0!==u[h].yLabelMid&&p.push(u[h]);for(d=!1,h=0;n&&h<c.length;h++)if(void 0!==c[h].yLabelMid){d=c[h];break}for(h=0;h<p.length;h++){var x=h&&p[h-1];d&&!h&&(x=d),m(p[h],x)}}}(_,y),function(t,e){t.each((function(t){var r=n.select(this);if(t.labelExtraX||t.labelExtraY){var i=r.select(\\\"g.slicetext text\\\");t.transform.targetX+=t.labelExtraX,t.transform.targetY+=t.labelExtraY,l.setTransormAndDisplay(i,t.transform);var a=t.cxFinal+t.pxmid[0],s=\\\"M\\\"+a+\\\",\\\"+(t.cyFinal+t.pxmid[1]),u=(t.yLabelMax-t.yLabelMin)*(t.pxmid[0]<0?-1:1)/4;if(t.labelExtraX){var c=t.labelExtraX*t.pxmid[1]/t.pxmid[0],f=t.yLabelMid+t.labelExtraY-(t.cyFinal+t.pxmid[1]);Math.abs(c)>Math.abs(f)?s+=\\\"l\\\"+f*t.pxmid[0]/t.pxmid[1]+\\\",\\\"+f+\\\"H\\\"+(a+t.labelExtraX+u):s+=\\\"l\\\"+t.labelExtraX+\\\",\\\"+c+\\\"v\\\"+(f-c)+\\\"h\\\"+u}else s+=\\\"V\\\"+(t.yLabelMid+t.labelExtraY)+\\\"h\\\"+u;l.ensureSingle(r,\\\"path\\\",\\\"textline\\\").call(o.stroke,e.outsidetextfont.color).attr({\\\"stroke-width\\\":Math.min(2,e.outsidetextfont.size/8),d:s,fill:\\\"none\\\"})}else r.select(\\\"path.textline\\\").remove()}))}(m,y),T&&y.automargin){var A=s.bBox(d.node()),M=y.domain,S=h.w*(M.x[1]-M.x[0]),E=h.h*(M.y[1]-M.y[0]),P=(.5*S-v.r)/h.w,O=(.5*E-v.r)/h.h;i.autoMargin(t,\\\"pie.\\\"+y.uid+\\\".automargin\\\",{xl:M.x[0]-P,xr:M.x[1]+P,yb:M.y[0]-O,yt:M.y[1]+O,l:Math.max(v.cx-v.r-A.left,0),r:Math.max(A.right-(v.cx+v.r),0),b:Math.max(A.bottom-(v.cy+v.r),0),t:Math.max(v.cy-v.r-A.top,0),pad:5})}}))}));setTimeout((function(){v.selectAll(\\\"tspan\\\").each((function(){var t=n.select(this);t.attr(\\\"dy\\\")&&t.attr(\\\"dy\\\",t.attr(\\\"dy\\\"))}))}),0)},formatSliceLabel:z,transformInsideText:w,determineInsideTextFont:b,positionTitleOutside:C,prerenderTitles:_,layoutAreas:I,attachFxHandlers:x,computeTransform:R}},68357:function(t,e,r){\\\"use strict\\\";var n=r(39898),i=r(63463),a=r(72597).resizeText;t.exports=function(t){var e=t._fullLayout._pielayer.selectAll(\\\".trace\\\");a(t,e,\\\"pie\\\"),e.each((function(e){var r=e[0].trace,a=n.select(this);a.style({opacity:r.opacity}),a.selectAll(\\\"path.surface\\\").each((function(e){n.select(this).call(i,e,r,t)}))}))}},63463:function(t,e,r){\\\"use strict\\\";var n=r(7901),i=r(53581).castOption,a=r(22209);t.exports=function(t,e,r,o){var s=r.marker.line,l=i(s.color,e.pts)||n.defaultLine,u=i(s.width,e.pts)||0;t.call(a,e,r,o).style(\\\"stroke-width\\\",u).call(n.stroke,l)}},10959:function(t,e,r){\\\"use strict\\\";var n=r(82196);t.exports={x:n.x,y:n.y,xy:{valType:\\\"data_array\\\",editType:\\\"calc\\\"},indices:{valType:\\\"data_array\\\",editType:\\\"calc\\\"},xbounds:{valType:\\\"data_array\\\",editType:\\\"calc\\\"},ybounds:{valType:\\\"data_array\\\",editType:\\\"calc\\\"},text:n.text,marker:{color:{valType:\\\"color\\\",arrayOk:!1,editType:\\\"calc\\\"},opacity:{valType:\\\"number\\\",min:0,max:1,dflt:1,arrayOk:!1,editType:\\\"calc\\\"},blend:{valType:\\\"boolean\\\",dflt:null,editType:\\\"calc\\\"},sizemin:{valType:\\\"number\\\",min:.1,max:2,dflt:.5,editType:\\\"calc\\\"},sizemax:{valType:\\\"number\\\",min:.1,dflt:20,editType:\\\"calc\\\"},border:{color:{valType:\\\"color\\\",arrayOk:!1,editType:\\\"calc\\\"},arearatio:{valType:\\\"number\\\",min:0,max:1,dflt:0,editType:\\\"calc\\\"},editType:\\\"calc\\\"},editType:\\\"calc\\\"},transforms:void 0}},42743:function(t,e,r){\\\"use strict\\\";var n=r(9330).gl_pointcloud2d,i=r(78614),a=r(71739).findExtremes,o=r(34603);function s(t,e){this.scene=t,this.uid=e,this.type=\\\"pointcloud\\\",this.pickXData=[],this.pickYData=[],this.xData=[],this.yData=[],this.textLabels=[],this.color=\\\"rgb(0, 0, 0)\\\",this.name=\\\"\\\",this.hoverinfo=\\\"all\\\",this.idToIndex=new Int32Array(0),this.bounds=[0,0,0,0],this.pointcloudOptions={positions:new Float32Array(0),idToIndex:this.idToIndex,sizemin:.5,sizemax:12,color:[0,0,0,1],areaRatio:1,borderColor:[0,0,0,1]},this.pointcloud=n(t.glplot,this.pointcloudOptions),this.pointcloud._trace=this}var l=s.prototype;l.handlePick=function(t){var e=this.idToIndex[t.pointId];return{trace:this,dataCoord:t.dataCoord,traceCoord:this.pickXYData?[this.pickXYData[2*e],this.pickXYData[2*e+1]]:[this.pickXData[e],this.pickYData[e]],textLabel:Array.isArray(this.textLabels)?this.textLabels[e]:this.textLabels,color:this.color,name:this.name,pointIndex:e,hoverinfo:this.hoverinfo}},l.update=function(t){this.index=t.index,this.textLabels=t.text,this.name=t.name,this.hoverinfo=t.hoverinfo,this.bounds=[1/0,1/0,-1/0,-1/0],this.updateFast(t),this.color=o(t,{})},l.updateFast=function(t){var e,r,n,o,s,l,u=this.xData=this.pickXData=t.x,c=this.yData=this.pickYData=t.y,f=this.pickXYData=t.xy,h=t.xbounds&&t.ybounds,p=t.indices,d=this.bounds;if(f){if(n=f,e=f.length>>>1,h)d[0]=t.xbounds[0],d[2]=t.xbounds[1],d[1]=t.ybounds[0],d[3]=t.ybounds[1];else for(l=0;l<e;l++)o=n[2*l],s=n[2*l+1],o<d[0]&&(d[0]=o),o>d[2]&&(d[2]=o),s<d[1]&&(d[1]=s),s>d[3]&&(d[3]=s);if(p)r=p;else for(r=new Int32Array(e),l=0;l<e;l++)r[l]=l}else for(e=u.length,n=new Float32Array(2*e),r=new Int32Array(e),l=0;l<e;l++)o=u[l],s=c[l],r[l]=l,n[2*l]=o,n[2*l+1]=s,o<d[0]&&(d[0]=o),o>d[2]&&(d[2]=o),s<d[1]&&(d[1]=s),s>d[3]&&(d[3]=s);this.idToIndex=r,this.pointcloudOptions.idToIndex=r,this.pointcloudOptions.positions=n;var v=i(t.marker.color),g=i(t.marker.border.color),y=t.opacity*t.marker.opacity;v[3]*=y,this.pointcloudOptions.color=v;var m=t.marker.blend;null===m&&(m=u.length<100||c.length<100),this.pointcloudOptions.blend=m,g[3]*=y,this.pointcloudOptions.borderColor=g;var x=t.marker.sizemin,b=Math.max(t.marker.sizemax,t.marker.sizemin);this.pointcloudOptions.sizeMin=x,this.pointcloudOptions.sizeMax=b,this.pointcloudOptions.areaRatio=t.marker.border.arearatio,this.pointcloud.update(this.pointcloudOptions);var _=this.scene.xaxis,w=this.scene.yaxis,T=b/2||.5;t._extremes[_._id]=a(_,[d[0],d[2]],{ppad:T}),t._extremes[w._id]=a(w,[d[1],d[3]],{ppad:T})},l.dispose=function(){this.pointcloud.dispose()},t.exports=function(t,e){var r=new s(t,e.uid);return r.update(e),r}},33876:function(t,e,r){\\\"use strict\\\";var n=r(71828),i=r(10959);t.exports=function(t,e,r){function a(r,a){return n.coerce(t,e,i,r,a)}a(\\\"x\\\"),a(\\\"y\\\"),a(\\\"xbounds\\\"),a(\\\"ybounds\\\"),t.xy&&t.xy instanceof Float32Array&&(e.xy=t.xy),t.indices&&t.indices instanceof Int32Array&&(e.indices=t.indices),a(\\\"text\\\"),a(\\\"marker.color\\\",r),a(\\\"marker.opacity\\\"),a(\\\"marker.blend\\\"),a(\\\"marker.sizemin\\\"),a(\\\"marker.sizemax\\\"),a(\\\"marker.border.color\\\",r),a(\\\"marker.border.arearatio\\\"),e._length=null}},20593:function(t,e,r){\\\"use strict\\\";[\\\"*pointcloud* trace is deprecated!\\\",\\\"Please consider switching to the *scattergl* trace type.\\\"].join(\\\" \\\"),t.exports={attributes:r(10959),supplyDefaults:r(33876),calc:r(36563),plot:r(42743),moduleType:\\\"trace\\\",name:\\\"pointcloud\\\",basePlotModule:r(4796),categories:[\\\"gl\\\",\\\"gl2d\\\",\\\"showLegend\\\"],meta:{}}},39953:function(t,e,r){\\\"use strict\\\";var n=r(41940),i=r(9012),a=r(22399),o=r(77914),s=r(27670).Y,l=r(5386).fF,u=r(50693),c=r(44467).templatedArray,f=r(12663).descriptionOnlyNumbers,h=r(1426).extendFlat,p=r(30962).overrideAll;(t.exports=p({hoverinfo:h({},i.hoverinfo,{flags:[],arrayOk:!1}),hoverlabel:o.hoverlabel,domain:s({name:\\\"sankey\\\",trace:!0}),orientation:{valType:\\\"enumerated\\\",values:[\\\"v\\\",\\\"h\\\"],dflt:\\\"h\\\"},valueformat:{valType:\\\"string\\\",dflt:\\\".3s\\\",description:f(\\\"value\\\")},valuesuffix:{valType:\\\"string\\\",dflt:\\\"\\\"},arrangement:{valType:\\\"enumerated\\\",values:[\\\"snap\\\",\\\"perpendicular\\\",\\\"freeform\\\",\\\"fixed\\\"],dflt:\\\"snap\\\"},textfont:n({}),customdata:void 0,node:{label:{valType:\\\"data_array\\\",dflt:[]},groups:{valType:\\\"info_array\\\",impliedEdits:{x:[],y:[]},dimensions:2,freeLength:!0,dflt:[],items:{valType:\\\"number\\\",editType:\\\"calc\\\"}},x:{valType:\\\"data_array\\\",dflt:[]},y:{valType:\\\"data_array\\\",dflt:[]},color:{valType:\\\"color\\\",arrayOk:!0},customdata:{valType:\\\"data_array\\\",editType:\\\"calc\\\"},line:{color:{valType:\\\"color\\\",dflt:a.defaultLine,arrayOk:!0},width:{valType:\\\"number\\\",min:0,dflt:.5,arrayOk:!0}},pad:{valType:\\\"number\\\",arrayOk:!1,min:0,dflt:20},thickness:{valType:\\\"number\\\",arrayOk:!1,min:1,dflt:20},hoverinfo:{valType:\\\"enumerated\\\",values:[\\\"all\\\",\\\"none\\\",\\\"skip\\\"],dflt:\\\"all\\\"},hoverlabel:o.hoverlabel,hovertemplate:l({},{keys:[\\\"value\\\",\\\"label\\\"]})},link:{arrowlen:{valType:\\\"number\\\",min:0,dflt:0},label:{valType:\\\"data_array\\\",dflt:[]},color:{valType:\\\"color\\\",arrayOk:!0},customdata:{valType:\\\"data_array\\\",editType:\\\"calc\\\"},line:{color:{valType:\\\"color\\\",dflt:a.defaultLine,arrayOk:!0},width:{valType:\\\"number\\\",min:0,dflt:0,arrayOk:!0}},source:{valType:\\\"data_array\\\",dflt:[]},target:{valType:\\\"data_array\\\",dflt:[]},value:{valType:\\\"data_array\\\",dflt:[]},hoverinfo:{valType:\\\"enumerated\\\",values:[\\\"all\\\",\\\"none\\\",\\\"skip\\\"],dflt:\\\"all\\\"},hoverlabel:o.hoverlabel,hovertemplate:l({},{keys:[\\\"value\\\",\\\"label\\\"]}),colorscales:c(\\\"concentrationscales\\\",{editType:\\\"calc\\\",label:{valType:\\\"string\\\",editType:\\\"calc\\\",dflt:\\\"\\\"},cmax:{valType:\\\"number\\\",editType:\\\"calc\\\",dflt:1},cmin:{valType:\\\"number\\\",editType:\\\"calc\\\",dflt:0},colorscale:h(u().colorscale,{dflt:[[0,\\\"white\\\"],[1,\\\"black\\\"]]})})}},\\\"calc\\\",\\\"nested\\\")).transforms=void 0},75536:function(t,e,r){\\\"use strict\\\";var n=r(30962).overrideAll,i=r(27659).a0,a=r(60436),o=r(528),s=r(6964),l=r(28569),u=r(47322).prepSelect,c=r(71828),f=r(73972),h=\\\"sankey\\\";function p(t,e){var r=t._fullData[e],n=t._fullLayout,i=n.dragmode,a=\\\"pan\\\"===n.dragmode?\\\"move\\\":\\\"crosshair\\\",o=r._bgRect;if(o&&\\\"pan\\\"!==i&&\\\"zoom\\\"!==i){s(o,a);var h={_id:\\\"x\\\",c2p:c.identity,_offset:r._sankey.translateX,_length:r._sankey.width},p={_id:\\\"y\\\",c2p:c.identity,_offset:r._sankey.translateY,_length:r._sankey.height},d={gd:t,element:o.node(),plotinfo:{id:e,xaxis:h,yaxis:p,fillRangeItems:c.noop},subplot:e,xaxes:[h],yaxes:[p],doneFnCompleted:function(r){var n,i=t._fullData[e],a=i.node.groups.slice(),o=[];function s(t){for(var e=i._sankey.graph.nodes,r=0;r<e.length;r++)if(e[r].pointNumber===t)return e[r]}for(var l=0;l<r.length;l++){var u=s(r[l].pointNumber);if(u)if(u.group){for(var c=0;c<u.childrenNodes.length;c++)o.push(u.childrenNodes[c].pointNumber);a[u.pointNumber-i.node._count]=!1}else o.push(u.pointNumber)}n=a.filter(Boolean).concat([o]),f.call(\\\"_guiRestyle\\\",t,{\\\"node.groups\\\":[n]},e)},prepFn:function(t,e,r){u(t,e,r,d,i)}};l.init(d)}}e.name=h,e.baseLayoutAttrOverrides=n({hoverlabel:o.hoverlabel},\\\"plot\\\",\\\"nested\\\"),e.plot=function(t){var r=i(t.calcdata,h)[0];a(t,r),e.updateFx(t)},e.clean=function(t,e,r,n){var i=n._has&&n._has(h),a=e._has&&e._has(h);i&&!a&&(n._paperdiv.selectAll(\\\".sankey\\\").remove(),n._paperdiv.selectAll(\\\".bgsankey\\\").remove())},e.updateFx=function(t){for(var e=0;e<t._fullData.length;e++)p(t,e)}},92930:function(t,e,r){\\\"use strict\\\";var n=r(68664),i=r(71828),a=r(28984).wrap,o=i.isArrayOrTypedArray,s=i.isIndex,l=r(21081);t.exports=function(t,e){var r=function(t){var e,r=t.node,a=t.link,u=[],c=o(a.color),f=o(a.customdata),h={},p={},d=a.colorscales.length;for(e=0;e<d;e++){var v=a.colorscales[e],g=l.extractScale(v,{cLetter:\\\"c\\\"}),y=l.makeColorScaleFunc(g);p[v.label]=y}var m=0;for(e=0;e<a.value.length;e++)a.source[e]>m&&(m=a.source[e]),a.target[e]>m&&(m=a.target[e]);var x,b=m+1;t.node._count=b;var _=t.node.groups,w={};for(e=0;e<_.length;e++){var T=_[e];for(x=0;x<T.length;x++){var k=T[x],A=b+e;w.hasOwnProperty(k)?i.warn(\\\"Node \\\"+k+\\\" is already part of a group.\\\"):w[k]=A}}var M={source:[],target:[]};for(e=0;e<a.value.length;e++){var S=a.value[e],E=a.source[e],L=a.target[e];if(S>0&&s(E,b)&&s(L,b)&&(!w.hasOwnProperty(E)||!w.hasOwnProperty(L)||w[E]!==w[L])){w.hasOwnProperty(L)&&(L=w[L]),w.hasOwnProperty(E)&&(E=w[E]),L=+L,h[E=+E]=h[L]=!0;var C=\\\"\\\";a.label&&a.label[e]&&(C=a.label[e]);var P=null;C&&p.hasOwnProperty(C)&&(P=p[C]),u.push({pointNumber:e,label:C,color:c?a.color[e]:a.color,customdata:f?a.customdata[e]:a.customdata,concentrationscale:P,source:E,target:L,value:+S}),M.source.push(E),M.target.push(L)}}var O=b+_.length,I=o(r.color),D=o(r.customdata),z=[];for(e=0;e<O;e++)if(h[e]){var R=r.label[e];z.push({group:e>b-1,childrenNodes:[],pointNumber:e,label:R,color:I?r.color[e]:r.color,customdata:D?r.customdata[e]:r.customdata})}var F=!1;return function(t,e,r){for(var a=i.init2dArray(t,0),o=0;o<Math.min(e.length,r.length);o++)if(i.isIndex(e[o],t)&&i.isIndex(r[o],t)){if(e[o]===r[o])return!0;a[e[o]].push(r[o])}return n(a).components.some((function(t){return t.length>1}))}(O,M.source,M.target)&&(F=!0),{circular:F,links:u,nodes:z,groups:_,groupLookup:w}}(e);return a({circular:r.circular,_nodes:r.nodes,_links:r.links,_groups:r.groups,_groupLookup:r.groupLookup})}},85247:function(t){\\\"use strict\\\";t.exports={nodeTextOffsetHorizontal:4,nodeTextOffsetVertical:3,nodePadAcross:10,sankeyIterations:50,forceIterations:5,forceTicksPerFrame:10,duration:500,ease:\\\"linear\\\",cn:{sankey:\\\"sankey\\\",sankeyLinks:\\\"sankey-links\\\",sankeyLink:\\\"sankey-link\\\",sankeyNodeSet:\\\"sankey-node-set\\\",sankeyNode:\\\"sankey-node\\\",nodeRect:\\\"node-rect\\\",nodeLabel:\\\"node-label\\\"}}},26857:function(t,e,r){\\\"use strict\\\";var n=r(71828),i=r(39953),a=r(7901),o=r(84267),s=r(27670).c,l=r(38048),u=r(44467),c=r(85501);function f(t,e){function r(r,a){return n.coerce(t,e,i.link.colorscales,r,a)}r(\\\"label\\\"),r(\\\"cmin\\\"),r(\\\"cmax\\\"),r(\\\"colorscale\\\")}t.exports=function(t,e,r,h){function p(r,a){return n.coerce(t,e,i,r,a)}var d=n.extendDeep(h.hoverlabel,t.hoverlabel),v=t.node,g=u.newContainer(e,\\\"node\\\");function y(t,e){return n.coerce(v,g,i.node,t,e)}y(\\\"label\\\"),y(\\\"groups\\\"),y(\\\"x\\\"),y(\\\"y\\\"),y(\\\"pad\\\"),y(\\\"thickness\\\"),y(\\\"line.color\\\"),y(\\\"line.width\\\"),y(\\\"hoverinfo\\\",t.hoverinfo),l(v,g,y,d),y(\\\"hovertemplate\\\");var m=h.colorway;y(\\\"color\\\",g.label.map((function(t,e){return a.addOpacity(function(t){return m[t%m.length]}(e),.8)}))),y(\\\"customdata\\\");var x=t.link||{},b=u.newContainer(e,\\\"link\\\");function _(t,e){return n.coerce(x,b,i.link,t,e)}_(\\\"label\\\"),_(\\\"arrowlen\\\"),_(\\\"source\\\"),_(\\\"target\\\"),_(\\\"value\\\"),_(\\\"line.color\\\"),_(\\\"line.width\\\"),_(\\\"hoverinfo\\\",t.hoverinfo),l(x,b,_,d),_(\\\"hovertemplate\\\");var w,T=o(h.paper_bgcolor).getLuminance()<.333?\\\"rgba(255, 255, 255, 0.6)\\\":\\\"rgba(0, 0, 0, 0.2)\\\";_(\\\"color\\\",n.repeat(T,b.value.length)),_(\\\"customdata\\\"),c(x,b,{name:\\\"colorscales\\\",handleItemDefaults:f}),s(e,h,p),p(\\\"orientation\\\"),p(\\\"valueformat\\\"),p(\\\"valuesuffix\\\"),g.x.length&&g.y.length&&(w=\\\"freeform\\\"),p(\\\"arrangement\\\",w),n.coerceFont(p,\\\"textfont\\\",n.extendFlat({},h.font)),e._length=null}},29396:function(t,e,r){\\\"use strict\\\";t.exports={attributes:r(39953),supplyDefaults:r(26857),calc:r(92930),plot:r(60436),moduleType:\\\"trace\\\",name:\\\"sankey\\\",basePlotModule:r(75536),selectPoints:r(84564),categories:[\\\"noOpacity\\\"],meta:{}}},60436:function(t,e,r){\\\"use strict\\\";var n=r(39898),i=r(71828),a=i.numberFormat,o=r(3393),s=r(30211),l=r(7901),u=r(85247).cn,c=i._;function f(t){return\\\"\\\"!==t}function h(t,e){return t.filter((function(t){return t.key===e.traceId}))}function p(t,e){n.select(t).select(\\\"path\\\").style(\\\"fill-opacity\\\",e),n.select(t).select(\\\"rect\\\").style(\\\"fill-opacity\\\",e)}function d(t){n.select(t).select(\\\"text.name\\\").style(\\\"fill\\\",\\\"black\\\")}function v(t){return function(e){return-1!==t.node.sourceLinks.indexOf(e.link)||-1!==t.node.targetLinks.indexOf(e.link)}}function g(t){return function(e){return-1!==e.node.sourceLinks.indexOf(t.link)||-1!==e.node.targetLinks.indexOf(t.link)}}function y(t,e,r){e&&r&&h(r,e).selectAll(\\\".\\\"+u.sankeyLink).filter(v(e)).call(x.bind(0,e,r,!1))}function m(t,e,r){e&&r&&h(r,e).selectAll(\\\".\\\"+u.sankeyLink).filter(v(e)).call(b.bind(0,e,r,!1))}function x(t,e,r,n){var i=n.datum().link.label;n.style(\\\"fill-opacity\\\",(function(t){if(!t.link.concentrationscale)return.4})),i&&h(e,t).selectAll(\\\".\\\"+u.sankeyLink).filter((function(t){return t.link.label===i})).style(\\\"fill-opacity\\\",(function(t){if(!t.link.concentrationscale)return.4})),r&&h(e,t).selectAll(\\\".\\\"+u.sankeyNode).filter(g(t)).call(y)}function b(t,e,r,n){var i=n.datum().link.label;n.style(\\\"fill-opacity\\\",(function(t){return t.tinyColorAlpha})),i&&h(e,t).selectAll(\\\".\\\"+u.sankeyLink).filter((function(t){return t.link.label===i})).style(\\\"fill-opacity\\\",(function(t){return t.tinyColorAlpha})),r&&h(e,t).selectAll(u.sankeyNode).filter(g(t)).call(m)}function _(t,e){var r=t.hoverlabel||{},n=i.nestedProperty(r,e).get();return!Array.isArray(n)&&n}t.exports=function(t,e){for(var r=t._fullLayout,i=r._paper,h=r._size,v=0;v<t._fullData.length;v++)if(t._fullData[v].visible&&t._fullData[v].type===u.sankey&&!t._fullData[v]._viewInitial){var g=t._fullData[v].node;t._fullData[v]._viewInitial={node:{groups:g.groups.slice(),x:g.x.slice(),y:g.y.slice()}}}var w=c(t,\\\"source:\\\")+\\\" \\\",T=c(t,\\\"target:\\\")+\\\" \\\",k=c(t,\\\"concentration:\\\")+\\\" \\\",A=c(t,\\\"incoming flow count:\\\")+\\\" \\\",M=c(t,\\\"outgoing flow count:\\\")+\\\" \\\";o(t,i,e,{width:h.w,height:h.h,margin:{t:h.t,r:h.r,b:h.b,l:h.l}},{linkEvents:{hover:function(e,r,i){!1!==t._fullLayout.hovermode&&(n.select(e).call(x.bind(0,r,i,!0)),\\\"skip\\\"!==r.link.trace.link.hoverinfo&&(r.link.fullData=r.link.trace,t.emit(\\\"plotly_hover\\\",{event:n.event,points:[r.link]})))},follow:function(e,i){if(!1!==t._fullLayout.hovermode){var o=i.link.trace.link;if(\\\"none\\\"!==o.hoverinfo&&\\\"skip\\\"!==o.hoverinfo){for(var u=[],c=0,h=0;h<i.flow.links.length;h++){var v=i.flow.links[h];if(\\\"closest\\\"!==t._fullLayout.hovermode||i.link.pointNumber===v.pointNumber){i.link.pointNumber===v.pointNumber&&(c=h),v.fullData=v.trace,o=i.link.trace.link;var g=m(v),y={valueLabel:a(i.valueFormat)(v.value)+i.valueSuffix};u.push({x:g[0],y:g[1],name:y.valueLabel,text:[v.label||\\\"\\\",w+v.source.label,T+v.target.label,v.concentrationscale?k+a(\\\"%0.2f\\\")(v.flow.labelConcentration):\\\"\\\"].filter(f).join(\\\"<br>\\\"),color:_(o,\\\"bgcolor\\\")||l.addOpacity(v.color,1),borderColor:_(o,\\\"bordercolor\\\"),fontFamily:_(o,\\\"font.family\\\"),fontSize:_(o,\\\"font.size\\\"),fontColor:_(o,\\\"font.color\\\"),nameLength:_(o,\\\"namelength\\\"),textAlign:_(o,\\\"align\\\"),idealAlign:n.event.x<g[0]?\\\"right\\\":\\\"left\\\",hovertemplate:o.hovertemplate,hovertemplateLabels:y,eventData:[v]})}}s.loneHover(u,{container:r._hoverlayer.node(),outerContainer:r._paper.node(),gd:t,anchorIndex:c}).each((function(){i.link.concentrationscale||p(this,.65),d(this)}))}}function m(t){var e,r;t.circular?(e=(t.circularPathData.leftInnerExtent+t.circularPathData.rightInnerExtent)/2,r=t.circularPathData.verticalFullExtent):(e=(t.source.x1+t.target.x0)/2,r=(t.y0+t.y1)/2);var n=[e,r];return\\\"v\\\"===t.trace.orientation&&n.reverse(),n[0]+=i.parent.translateX,n[1]+=i.parent.translateY,n}},unhover:function(e,i,a){!1!==t._fullLayout.hovermode&&(n.select(e).call(b.bind(0,i,a,!0)),\\\"skip\\\"!==i.link.trace.link.hoverinfo&&(i.link.fullData=i.link.trace,t.emit(\\\"plotly_unhover\\\",{event:n.event,points:[i.link]})),s.loneUnhover(r._hoverlayer.node()))},select:function(e,r){var i=r.link;i.originalEvent=n.event,t._hoverdata=[i],s.click(t,{target:!0})}},nodeEvents:{hover:function(e,r,i){!1!==t._fullLayout.hovermode&&(n.select(e).call(y,r,i),\\\"skip\\\"!==r.node.trace.node.hoverinfo&&(r.node.fullData=r.node.trace,t.emit(\\\"plotly_hover\\\",{event:n.event,points:[r.node]})))},follow:function(e,i){if(!1!==t._fullLayout.hovermode){var o=i.node.trace.node;if(\\\"none\\\"!==o.hoverinfo&&\\\"skip\\\"!==o.hoverinfo){var l=n.select(e).select(\\\".\\\"+u.nodeRect),c=t._fullLayout._paperdiv.node().getBoundingClientRect(),h=l.node().getBoundingClientRect(),v=h.left-2-c.left,g=h.right+2-c.left,y=h.top+h.height/4-c.top,m={valueLabel:a(i.valueFormat)(i.node.value)+i.valueSuffix};i.node.fullData=i.node.trace,t._fullLayout._calcInverseTransform(t);var x=t._fullLayout._invScaleX,b=t._fullLayout._invScaleY,w=s.loneHover({x0:x*v,x1:x*g,y:b*y,name:a(i.valueFormat)(i.node.value)+i.valueSuffix,text:[i.node.label,A+i.node.targetLinks.length,M+i.node.sourceLinks.length].filter(f).join(\\\"<br>\\\"),color:_(o,\\\"bgcolor\\\")||i.tinyColorHue,borderColor:_(o,\\\"bordercolor\\\"),fontFamily:_(o,\\\"font.family\\\"),fontSize:_(o,\\\"font.size\\\"),fontColor:_(o,\\\"font.color\\\"),nameLength:_(o,\\\"namelength\\\"),textAlign:_(o,\\\"align\\\"),idealAlign:\\\"left\\\",hovertemplate:o.hovertemplate,hovertemplateLabels:m,eventData:[i.node]},{container:r._hoverlayer.node(),outerContainer:r._paper.node(),gd:t});p(w,.85),d(w)}}},unhover:function(e,i,a){!1!==t._fullLayout.hovermode&&(n.select(e).call(m,i,a),\\\"skip\\\"!==i.node.trace.node.hoverinfo&&(i.node.fullData=i.node.trace,t.emit(\\\"plotly_unhover\\\",{event:n.event,points:[i.node]})),s.loneUnhover(r._hoverlayer.node()))},select:function(e,r,i){var a=r.node;a.originalEvent=n.event,t._hoverdata=[a],n.select(e).call(m,r,i),s.click(t,{target:!0})}}})}},3393:function(t,e,r){\\\"use strict\\\";var n=r(49887),i=r(81684).k4,a=r(39898),o=r(30838),s=r(86781),l=r(85247),u=r(84267),c=r(7901),f=r(91424),h=r(71828),p=h.strTranslate,d=h.strRotate,v=r(28984),g=v.keyFun,y=v.repeat,m=v.unwrap,x=r(63893),b=r(73972),_=r(18783),w=_.CAP_SHIFT,T=_.LINE_SPACING;function k(t,e,r){var n,i=m(e),a=i.trace,c=a.domain,f=\\\"h\\\"===a.orientation,p=a.node.pad,d=a.node.thickness,v=t.width*(c.x[1]-c.x[0]),g=t.height*(c.y[1]-c.y[0]),y=i._nodes,x=i._links,b=i.circular;(n=b?s.sankeyCircular().circularLinkGap(0):o.sankey()).iterations(l.sankeyIterations).size(f?[v,g]:[g,v]).nodeWidth(d).nodePadding(p).nodeId((function(t){return t.pointNumber})).nodes(y).links(x);var _,w,T,k=n();for(var A in n.nodePadding()<p&&h.warn(\\\"node.pad was reduced to \\\",n.nodePadding(),\\\" to fit within the figure.\\\"),i._groupLookup){var M,S=parseInt(i._groupLookup[A]);for(_=0;_<k.nodes.length;_++)if(k.nodes[_].pointNumber===S){M=k.nodes[_];break}if(M){var E={pointNumber:parseInt(A),x0:M.x0,x1:M.x1,y0:M.y0,y1:M.y1,partOfGroup:!0,sourceLinks:[],targetLinks:[]};k.nodes.unshift(E),M.childrenNodes.unshift(E)}}if(function(){for(_=0;_<k.nodes.length;_++){var t,e,r=k.nodes[_],n={};for(w=0;w<r.targetLinks.length;w++)t=(e=r.targetLinks[w]).source.pointNumber+\\\":\\\"+e.target.pointNumber,n.hasOwnProperty(t)||(n[t]=[]),n[t].push(e);var i=Object.keys(n);for(w=0;w<i.length;w++){var a=n[t=i[w]],o=0,s={};for(T=0;T<a.length;T++)s[(e=a[T]).label]||(s[e.label]=0),s[e.label]+=e.value,o+=e.value;for(T=0;T<a.length;T++)(e=a[T]).flow={value:o,labelConcentration:s[e.label]/o,concentration:e.value/o,links:a},e.concentrationscale&&(e.color=u(e.concentrationscale(e.flow.labelConcentration)))}var l=0;for(w=0;w<r.sourceLinks.length;w++)l+=r.sourceLinks[w].value;for(w=0;w<r.sourceLinks.length;w++)(e=r.sourceLinks[w]).concentrationOut=e.value/l;var c=0;for(w=0;w<r.targetLinks.length;w++)c+=r.targetLinks[w].value;for(w=0;w<r.targetLinks.length;w++)(e=r.targetLinks[w]).concenrationIn=e.value/c}}(),a.node.x.length&&a.node.y.length){for(_=0;_<Math.min(a.node.x.length,a.node.y.length,k.nodes.length);_++)if(a.node.x[_]&&a.node.y[_]){var L=[a.node.x[_]*v,a.node.y[_]*g];k.nodes[_].x0=L[0]-d/2,k.nodes[_].x1=L[0]+d/2;var C=k.nodes[_].y1-k.nodes[_].y0;k.nodes[_].y0=L[1]-C/2,k.nodes[_].y1=L[1]+C/2}\\\"snap\\\"===a.arrangement&&function(t){var e,r,n=t.map((function(t,e){return{x0:t.x0,index:e}})).sort((function(t,e){return t.x0-e.x0})),i=[],a=-1,o=-1/0;for(_=0;_<n.length;_++){var s=t[n[_].index];s.x0>o+d&&(a+=1,e=s.x0),o=s.x0,i[a]||(i[a]=[]),i[a].push(s),r=e-s.x0,s.x0+=r,s.x1+=r}return i}(y=k.nodes).forEach((function(t){var e,r,n,i=0,a=t.length;for(t.sort((function(t,e){return t.y0-e.y0})),n=0;n<a;++n)(e=t[n]).y0>=i||(r=i-e.y0)>1e-6&&(e.y0+=r,e.y1+=r),i=e.y1+p})),n.update(k)}return{circular:b,key:r,trace:a,guid:h.randstr(),horizontal:f,width:v,height:g,nodePad:a.node.pad,nodeLineColor:a.node.line.color,nodeLineWidth:a.node.line.width,linkLineColor:a.link.line.color,linkLineWidth:a.link.line.width,linkArrowLength:a.link.arrowlen,valueFormat:a.valueformat,valueSuffix:a.valuesuffix,textFont:a.textfont,translateX:c.x[0]*t.width+t.margin.l,translateY:t.height-c.y[1]*t.height+t.margin.t,dragParallel:f?g:v,dragPerpendicular:f?v:g,arrangement:a.arrangement,sankey:n,graph:k,forceLayouts:{},interactionState:{dragInProgress:!1,hovered:!1}}}function A(t,e,r){var n=u(e.color),i=e.source.label+\\\"|\\\"+e.target.label+\\\"__\\\"+r;return e.trace=t.trace,e.curveNumber=t.trace.index,{circular:t.circular,key:i,traceId:t.key,pointNumber:e.pointNumber,link:e,tinyColorHue:c.tinyRGB(n),tinyColorAlpha:n.getAlpha(),linkPath:M,linkLineColor:t.linkLineColor,linkLineWidth:t.linkLineWidth,linkArrowLength:t.linkArrowLength,valueFormat:t.valueFormat,valueSuffix:t.valueSuffix,sankey:t.sankey,parent:t,interactionState:t.interactionState,flow:e.flow}}function M(){return function(t){var e=t.linkArrowLength;if(t.link.circular)return function(t,e){var r=t.width/2,n=t.circularPathData;return\\\"top\\\"===t.circularLinkType?\\\"M \\\"+(n.targetX-e)+\\\" \\\"+(n.targetY+r)+\\\" L\\\"+(n.rightInnerExtent-e)+\\\" \\\"+(n.targetY+r)+\\\"A\\\"+(n.rightLargeArcRadius+r)+\\\" \\\"+(n.rightSmallArcRadius+r)+\\\" 0 0 1 \\\"+(n.rightFullExtent-r-e)+\\\" \\\"+(n.targetY-n.rightSmallArcRadius)+\\\"L\\\"+(n.rightFullExtent-r-e)+\\\" \\\"+n.verticalRightInnerExtent+\\\"A\\\"+(n.rightLargeArcRadius+r)+\\\" \\\"+(n.rightLargeArcRadius+r)+\\\" 0 0 1 \\\"+(n.rightInnerExtent-e)+\\\" \\\"+(n.verticalFullExtent-r)+\\\"L\\\"+n.leftInnerExtent+\\\" \\\"+(n.verticalFullExtent-r)+\\\"A\\\"+(n.leftLargeArcRadius+r)+\\\" \\\"+(n.leftLargeArcRadius+r)+\\\" 0 0 1 \\\"+(n.leftFullExtent+r)+\\\" \\\"+n.verticalLeftInnerExtent+\\\"L\\\"+(n.leftFullExtent+r)+\\\" \\\"+(n.sourceY-n.leftSmallArcRadius)+\\\"A\\\"+(n.leftLargeArcRadius+r)+\\\" \\\"+(n.leftSmallArcRadius+r)+\\\" 0 0 1 \\\"+n.leftInnerExtent+\\\" \\\"+(n.sourceY+r)+\\\"L\\\"+n.sourceX+\\\" \\\"+(n.sourceY+r)+\\\"L\\\"+n.sourceX+\\\" \\\"+(n.sourceY-r)+\\\"L\\\"+n.leftInnerExtent+\\\" \\\"+(n.sourceY-r)+\\\"A\\\"+(n.leftLargeArcRadius-r)+\\\" \\\"+(n.leftSmallArcRadius-r)+\\\" 0 0 0 \\\"+(n.leftFullExtent-r)+\\\" \\\"+(n.sourceY-n.leftSmallArcRadius)+\\\"L\\\"+(n.leftFullExtent-r)+\\\" \\\"+n.verticalLeftInnerExtent+\\\"A\\\"+(n.leftLargeArcRadius-r)+\\\" \\\"+(n.leftLargeArcRadius-r)+\\\" 0 0 0 \\\"+n.leftInnerExtent+\\\" \\\"+(n.verticalFullExtent+r)+\\\"L\\\"+(n.rightInnerExtent-e)+\\\" \\\"+(n.verticalFullExtent+r)+\\\"A\\\"+(n.rightLargeArcRadius-r)+\\\" \\\"+(n.rightLargeArcRadius-r)+\\\" 0 0 0 \\\"+(n.rightFullExtent+r-e)+\\\" \\\"+n.verticalRightInnerExtent+\\\"L\\\"+(n.rightFullExtent+r-e)+\\\" \\\"+(n.targetY-n.rightSmallArcRadius)+\\\"A\\\"+(n.rightLargeArcRadius-r)+\\\" \\\"+(n.rightSmallArcRadius-r)+\\\" 0 0 0 \\\"+(n.rightInnerExtent-e)+\\\" \\\"+(n.targetY-r)+\\\"L\\\"+(n.targetX-e)+\\\" \\\"+(n.targetY-r)+(e>0?\\\"L\\\"+n.targetX+\\\" \\\"+n.targetY:\\\"\\\")+\\\"Z\\\":\\\"M \\\"+(n.targetX-e)+\\\" \\\"+(n.targetY-r)+\\\" L\\\"+(n.rightInnerExtent-e)+\\\" \\\"+(n.targetY-r)+\\\"A\\\"+(n.rightLargeArcRadius+r)+\\\" \\\"+(n.rightSmallArcRadius+r)+\\\" 0 0 0 \\\"+(n.rightFullExtent-r-e)+\\\" \\\"+(n.targetY+n.rightSmallArcRadius)+\\\"L\\\"+(n.rightFullExtent-r-e)+\\\" \\\"+n.verticalRightInnerExtent+\\\"A\\\"+(n.rightLargeArcRadius+r)+\\\" \\\"+(n.rightLargeArcRadius+r)+\\\" 0 0 0 \\\"+(n.rightInnerExtent-e)+\\\" \\\"+(n.verticalFullExtent+r)+\\\"L\\\"+n.leftInnerExtent+\\\" \\\"+(n.verticalFullExtent+r)+\\\"A\\\"+(n.leftLargeArcRadius+r)+\\\" \\\"+(n.leftLargeArcRadius+r)+\\\" 0 0 0 \\\"+(n.leftFullExtent+r)+\\\" \\\"+n.verticalLeftInnerExtent+\\\"L\\\"+(n.leftFullExtent+r)+\\\" \\\"+(n.sourceY+n.leftSmallArcRadius)+\\\"A\\\"+(n.leftLargeArcRadius+r)+\\\" \\\"+(n.leftSmallArcRadius+r)+\\\" 0 0 0 \\\"+n.leftInnerExtent+\\\" \\\"+(n.sourceY-r)+\\\"L\\\"+n.sourceX+\\\" \\\"+(n.sourceY-r)+\\\"L\\\"+n.sourceX+\\\" \\\"+(n.sourceY+r)+\\\"L\\\"+n.leftInnerExtent+\\\" \\\"+(n.sourceY+r)+\\\"A\\\"+(n.leftLargeArcRadius-r)+\\\" \\\"+(n.leftSmallArcRadius-r)+\\\" 0 0 1 \\\"+(n.leftFullExtent-r)+\\\" \\\"+(n.sourceY+n.leftSmallArcRadius)+\\\"L\\\"+(n.leftFullExtent-r)+\\\" \\\"+n.verticalLeftInnerExtent+\\\"A\\\"+(n.leftLargeArcRadius-r)+\\\" \\\"+(n.leftLargeArcRadius-r)+\\\" 0 0 1 \\\"+n.leftInnerExtent+\\\" \\\"+(n.verticalFullExtent-r)+\\\"L\\\"+(n.rightInnerExtent-e)+\\\" \\\"+(n.verticalFullExtent-r)+\\\"A\\\"+(n.rightLargeArcRadius-r)+\\\" \\\"+(n.rightLargeArcRadius-r)+\\\" 0 0 1 \\\"+(n.rightFullExtent+r-e)+\\\" \\\"+n.verticalRightInnerExtent+\\\"L\\\"+(n.rightFullExtent+r-e)+\\\" \\\"+(n.targetY+n.rightSmallArcRadius)+\\\"A\\\"+(n.rightLargeArcRadius-r)+\\\" \\\"+(n.rightSmallArcRadius-r)+\\\" 0 0 1 \\\"+(n.rightInnerExtent-e)+\\\" \\\"+(n.targetY+r)+\\\"L\\\"+(n.targetX-e)+\\\" \\\"+(n.targetY+r)+(e>0?\\\"L\\\"+n.targetX+\\\" \\\"+n.targetY:\\\"\\\")+\\\"Z\\\"}(t.link,e);var r=Math.abs((t.link.target.x0-t.link.source.x1)/2);e>r&&(e=r);var n=t.link.source.x1,a=t.link.target.x0-e,o=i(n,a),s=o(.5),l=o(.5),u=t.link.y0-t.link.width/2,c=t.link.y0+t.link.width/2,f=t.link.y1-t.link.width/2,h=t.link.y1+t.link.width/2,p=\\\"M\\\"+n+\\\",\\\"+u,d=\\\"C\\\"+s+\\\",\\\"+u+\\\" \\\"+l+\\\",\\\"+f+\\\" \\\"+a+\\\",\\\"+f,v=\\\"C\\\"+l+\\\",\\\"+h+\\\" \\\"+s+\\\",\\\"+c+\\\" \\\"+n+\\\",\\\"+c,g=e>0?\\\"L\\\"+(a+e)+\\\",\\\"+(f+t.link.width/2):\\\"\\\";return p+d+(g+=\\\"L\\\"+a+\\\",\\\"+h)+v+\\\"Z\\\"}}function S(t,e){var r=u(e.color),n=l.nodePadAcross,i=t.nodePad/2;e.dx=e.x1-e.x0,e.dy=e.y1-e.y0;var a=e.dx,o=Math.max(.5,e.dy),s=\\\"node_\\\"+e.pointNumber;return e.group&&(s=h.randstr()),e.trace=t.trace,e.curveNumber=t.trace.index,{index:e.pointNumber,key:s,partOfGroup:e.partOfGroup||!1,group:e.group,traceId:t.key,trace:t.trace,node:e,nodePad:t.nodePad,nodeLineColor:t.nodeLineColor,nodeLineWidth:t.nodeLineWidth,textFont:t.textFont,size:t.horizontal?t.height:t.width,visibleWidth:Math.ceil(a),visibleHeight:o,zoneX:-n,zoneY:-i,zoneWidth:a+2*n,zoneHeight:o+2*i,labelY:t.horizontal?e.dy/2+1:e.dx/2+1,left:1===e.originalLayer,sizeAcross:t.width,forceLayouts:t.forceLayouts,horizontal:t.horizontal,darkBackground:r.getBrightness()<=128,tinyColorHue:c.tinyRGB(r),tinyColorAlpha:r.getAlpha(),valueFormat:t.valueFormat,valueSuffix:t.valueSuffix,sankey:t.sankey,graph:t.graph,arrangement:t.arrangement,uniqueNodeLabelPathId:[t.guid,t.key,s].join(\\\"_\\\"),interactionState:t.interactionState,figure:t}}function E(t){t.attr(\\\"transform\\\",(function(t){return p(t.node.x0.toFixed(3),t.node.y0.toFixed(3))}))}function L(t){t.call(E)}function C(t,e){t.call(L),e.attr(\\\"d\\\",M())}function P(t){t.attr(\\\"width\\\",(function(t){return t.node.x1-t.node.x0})).attr(\\\"height\\\",(function(t){return t.visibleHeight}))}function O(t){return t.link.width>1||t.linkLineWidth>0}function I(t){return p(t.translateX,t.translateY)+(t.horizontal?\\\"matrix(1 0 0 1 0 0)\\\":\\\"matrix(0 1 1 0 0 0)\\\")}function D(t,e,r){t.on(\\\".basic\\\",null).on(\\\"mouseover.basic\\\",(function(t){t.interactionState.dragInProgress||t.partOfGroup||(r.hover(this,t,e),t.interactionState.hovered=[this,t])})).on(\\\"mousemove.basic\\\",(function(t){t.interactionState.dragInProgress||t.partOfGroup||(r.follow(this,t),t.interactionState.hovered=[this,t])})).on(\\\"mouseout.basic\\\",(function(t){t.interactionState.dragInProgress||t.partOfGroup||(r.unhover(this,t,e),t.interactionState.hovered=!1)})).on(\\\"click.basic\\\",(function(t){t.interactionState.hovered&&(r.unhover(this,t,e),t.interactionState.hovered=!1),t.interactionState.dragInProgress||t.partOfGroup||r.select(this,t,e)}))}function z(t,e,r,i){var o=a.behavior.drag().origin((function(t){return{x:t.node.x0+t.visibleWidth/2,y:t.node.y0+t.visibleHeight/2}})).on(\\\"dragstart\\\",(function(a){if(\\\"fixed\\\"!==a.arrangement&&(h.ensureSingle(i._fullLayout._infolayer,\\\"g\\\",\\\"dragcover\\\",(function(t){i._fullLayout._dragCover=t})),h.raiseToTop(this),a.interactionState.dragInProgress=a.node,F(a.node),a.interactionState.hovered&&(r.nodeEvents.unhover.apply(0,a.interactionState.hovered),a.interactionState.hovered=!1),\\\"snap\\\"===a.arrangement)){var o=a.traceId+\\\"|\\\"+a.key;a.forceLayouts[o]?a.forceLayouts[o].alpha(1):function(t,e,r,i){!function(t){for(var e=0;e<t.length;e++)t[e].y=(t[e].y0+t[e].y1)/2,t[e].x=(t[e].x0+t[e].x1)/2}(r.graph.nodes);var a=r.graph.nodes.filter((function(t){return t.originalX===r.node.originalX})).filter((function(t){return!t.partOfGroup}));r.forceLayouts[e]=n.forceSimulation(a).alphaDecay(0).force(\\\"collide\\\",n.forceCollide().radius((function(t){return t.dy/2+r.nodePad/2})).strength(1).iterations(l.forceIterations)).force(\\\"constrain\\\",function(t,e,r,n){return function(){for(var t=0,i=0;i<r.length;i++){var a=r[i];a===n.interactionState.dragInProgress?(a.x=a.lastDraggedX,a.y=a.lastDraggedY):(a.vx=(a.originalX-a.x)/l.forceTicksPerFrame,a.y=Math.min(n.size-a.dy/2,Math.max(a.dy/2,a.y))),t=Math.max(t,Math.abs(a.vx),Math.abs(a.vy))}!n.interactionState.dragInProgress&&t<.1&&n.forceLayouts[e].alpha()>0&&n.forceLayouts[e].alpha(0)}}(0,e,a,r)).stop()}(0,o,a),function(t,e,r,n,i){window.requestAnimationFrame((function a(){var o;for(o=0;o<l.forceTicksPerFrame;o++)r.forceLayouts[n].tick();if(function(t){for(var e=0;e<t.length;e++)t[e].y0=t[e].y-t[e].dy/2,t[e].y1=t[e].y0+t[e].dy,t[e].x0=t[e].x-t[e].dx/2,t[e].x1=t[e].x0+t[e].dx}(r.graph.nodes),r.sankey.update(r.graph),C(t.filter(B(r)),e),r.forceLayouts[n].alpha()>0)window.requestAnimationFrame(a);else{var s=r.node.originalX;r.node.x0=s-r.visibleWidth/2,r.node.x1=s+r.visibleWidth/2,R(r,i)}}))}(t,e,a,o,i)}})).on(\\\"drag\\\",(function(r){if(\\\"fixed\\\"!==r.arrangement){var n=a.event.x,i=a.event.y;\\\"snap\\\"===r.arrangement?(r.node.x0=n-r.visibleWidth/2,r.node.x1=n+r.visibleWidth/2,r.node.y0=i-r.visibleHeight/2,r.node.y1=i+r.visibleHeight/2):(\\\"freeform\\\"===r.arrangement&&(r.node.x0=n-r.visibleWidth/2,r.node.x1=n+r.visibleWidth/2),i=Math.max(0,Math.min(r.size-r.visibleHeight/2,i)),r.node.y0=i-r.visibleHeight/2,r.node.y1=i+r.visibleHeight/2),F(r.node),\\\"snap\\\"!==r.arrangement&&(r.sankey.update(r.graph),C(t.filter(B(r)),e))}})).on(\\\"dragend\\\",(function(t){if(\\\"fixed\\\"!==t.arrangement){t.interactionState.dragInProgress=!1;for(var e=0;e<t.node.childrenNodes.length;e++)t.node.childrenNodes[e].x=t.node.x,t.node.childrenNodes[e].y=t.node.y;\\\"snap\\\"!==t.arrangement&&R(t,i)}}));t.on(\\\".drag\\\",null).call(o)}function R(t,e){for(var r=[],n=[],i=0;i<t.graph.nodes.length;i++){var a=(t.graph.nodes[i].x0+t.graph.nodes[i].x1)/2,o=(t.graph.nodes[i].y0+t.graph.nodes[i].y1)/2;r.push(a/t.figure.width),n.push(o/t.figure.height)}b.call(\\\"_guiRestyle\\\",e,{\\\"node.x\\\":[r],\\\"node.y\\\":[n]},t.trace.index).then((function(){e._fullLayout._dragCover&&e._fullLayout._dragCover.remove()}))}function F(t){t.lastDraggedX=t.x0+t.dx/2,t.lastDraggedY=t.y0+t.dy/2}function B(t){return function(e){return e.node.originalX===t.node.originalX}}t.exports=function(t,e,r,n,i){var o=t._context.staticPlot,s=!1;h.ensureSingle(t._fullLayout._infolayer,\\\"g\\\",\\\"first-render\\\",(function(){s=!0}));var v=t._fullLayout._dragCover,b=r.filter((function(t){return m(t).trace.visible})).map(k.bind(null,n)),_=e.selectAll(\\\".\\\"+l.cn.sankey).data(b,g);_.exit().remove(),_.enter().append(\\\"g\\\").classed(l.cn.sankey,!0).style(\\\"box-sizing\\\",\\\"content-box\\\").style(\\\"position\\\",\\\"absolute\\\").style(\\\"left\\\",0).style(\\\"shape-rendering\\\",\\\"geometricPrecision\\\").style(\\\"pointer-events\\\",o?\\\"none\\\":\\\"auto\\\").attr(\\\"transform\\\",I),_.each((function(e,r){t._fullData[r]._sankey=e;var n=\\\"bgsankey-\\\"+e.trace.uid+\\\"-\\\"+r;h.ensureSingle(t._fullLayout._draggers,\\\"rect\\\",n),t._fullData[r]._bgRect=a.select(\\\".\\\"+n),t._fullData[r]._bgRect.style(\\\"pointer-events\\\",o?\\\"none\\\":\\\"all\\\").attr(\\\"width\\\",e.width).attr(\\\"height\\\",e.height).attr(\\\"x\\\",e.translateX).attr(\\\"y\\\",e.translateY).classed(\\\"bgsankey\\\",!0).style({fill:\\\"transparent\\\",\\\"stroke-width\\\":0})})),_.transition().ease(l.ease).duration(l.duration).attr(\\\"transform\\\",I);var L=_.selectAll(\\\".\\\"+l.cn.sankeyLinks).data(y,g);L.enter().append(\\\"g\\\").classed(l.cn.sankeyLinks,!0).style(\\\"fill\\\",\\\"none\\\");var C=L.selectAll(\\\".\\\"+l.cn.sankeyLink).data((function(t){return t.graph.links.filter((function(t){return t.value})).map(A.bind(null,t))}),g);C.enter().append(\\\"path\\\").classed(l.cn.sankeyLink,!0).call(D,_,i.linkEvents),C.style(\\\"stroke\\\",(function(t){return O(t)?c.tinyRGB(u(t.linkLineColor)):t.tinyColorHue})).style(\\\"stroke-opacity\\\",(function(t){return O(t)?c.opacity(t.linkLineColor):t.tinyColorAlpha})).style(\\\"fill\\\",(function(t){return t.tinyColorHue})).style(\\\"fill-opacity\\\",(function(t){return t.tinyColorAlpha})).style(\\\"stroke-width\\\",(function(t){return O(t)?t.linkLineWidth:1})).attr(\\\"d\\\",M()),C.style(\\\"opacity\\\",(function(){return t._context.staticPlot||s||v?1:0})).transition().ease(l.ease).duration(l.duration).style(\\\"opacity\\\",1),C.exit().transition().ease(l.ease).duration(l.duration).style(\\\"opacity\\\",0).remove();var R=_.selectAll(\\\".\\\"+l.cn.sankeyNodeSet).data(y,g);R.enter().append(\\\"g\\\").classed(l.cn.sankeyNodeSet,!0),R.style(\\\"cursor\\\",(function(t){switch(t.arrangement){case\\\"fixed\\\":return\\\"default\\\";case\\\"perpendicular\\\":return\\\"ns-resize\\\";default:return\\\"move\\\"}}));var F=R.selectAll(\\\".\\\"+l.cn.sankeyNode).data((function(t){var e=t.graph.nodes;return function(t){var e,r=[];for(e=0;e<t.length;e++)t[e].originalX=(t[e].x0+t[e].x1)/2,t[e].originalY=(t[e].y0+t[e].y1)/2,-1===r.indexOf(t[e].originalX)&&r.push(t[e].originalX);for(r.sort((function(t,e){return t-e})),e=0;e<t.length;e++)t[e].originalLayerIndex=r.indexOf(t[e].originalX),t[e].originalLayer=t[e].originalLayerIndex/(r.length-1)}(e),e.map(S.bind(null,t))}),g);F.enter().append(\\\"g\\\").classed(l.cn.sankeyNode,!0).call(E).style(\\\"opacity\\\",(function(e){return!t._context.staticPlot&&!s||e.partOfGroup?0:1})),F.call(D,_,i.nodeEvents).call(z,C,i,t),F.transition().ease(l.ease).duration(l.duration).call(E).style(\\\"opacity\\\",(function(t){return t.partOfGroup?0:1})),F.exit().transition().ease(l.ease).duration(l.duration).style(\\\"opacity\\\",0).remove();var B=F.selectAll(\\\".\\\"+l.cn.nodeRect).data(y);B.enter().append(\\\"rect\\\").classed(l.cn.nodeRect,!0).call(P),B.style(\\\"stroke-width\\\",(function(t){return t.nodeLineWidth})).style(\\\"stroke\\\",(function(t){return c.tinyRGB(u(t.nodeLineColor))})).style(\\\"stroke-opacity\\\",(function(t){return c.opacity(t.nodeLineColor)})).style(\\\"fill\\\",(function(t){return t.tinyColorHue})).style(\\\"fill-opacity\\\",(function(t){return t.tinyColorAlpha})),B.transition().ease(l.ease).duration(l.duration).call(P);var N=F.selectAll(\\\".\\\"+l.cn.nodeLabel).data(y);N.enter().append(\\\"text\\\").classed(l.cn.nodeLabel,!0).style(\\\"cursor\\\",\\\"default\\\"),N.attr(\\\"data-notex\\\",1).text((function(t){return t.node.label})).each((function(e){var r=a.select(this);f.font(r,e.textFont),x.convertToTspans(r,t)})).style(\\\"text-shadow\\\",x.makeTextShadow(t._fullLayout.paper_bgcolor)).attr(\\\"text-anchor\\\",(function(t){return t.horizontal&&t.left?\\\"end\\\":\\\"start\\\"})).attr(\\\"transform\\\",(function(t){var e=a.select(this),r=x.lineCount(e),n=t.textFont.size*((r-1)*T-w),i=t.nodeLineWidth/2+3,o=((t.horizontal?t.visibleHeight:t.visibleWidth)-n)/2;t.horizontal&&(t.left?i=-i:i+=t.visibleWidth);var s=t.horizontal?\\\"\\\":\\\"scale(-1,1)\\\"+d(90);return p(t.horizontal?i:o,t.horizontal?o:i)+s})),N.transition().ease(l.ease).duration(l.duration)}},84564:function(t){\\\"use strict\\\";t.exports=function(t,e){for(var r=[],n=t.cd[0].trace,i=n._sankey.graph.nodes,a=0;a<i.length;a++){var o=i[a];if(!o.partOfGroup){var s=[(o.x0+o.x1)/2,(o.y0+o.y1)/2];\\\"v\\\"===n.orientation&&s.reverse(),e&&e.contains(s,!1,a,t)&&r.push({pointNumber:o.pointNumber})}}return r}},75225:function(t,e,r){\\\"use strict\\\";var n=r(71828);t.exports=function(t,e){for(var r=0;r<t.length;r++)t[r].i=r;n.mergeArray(e.text,t,\\\"tx\\\"),n.mergeArray(e.texttemplate,t,\\\"txt\\\"),n.mergeArray(e.hovertext,t,\\\"htx\\\"),n.mergeArray(e.customdata,t,\\\"data\\\"),n.mergeArray(e.textposition,t,\\\"tp\\\"),e.textfont&&(n.mergeArrayCastPositive(e.textfont.size,t,\\\"ts\\\"),n.mergeArray(e.textfont.color,t,\\\"tc\\\"),n.mergeArray(e.textfont.family,t,\\\"tf\\\"));var i=e.marker;if(i){n.mergeArrayCastPositive(i.size,t,\\\"ms\\\"),n.mergeArrayCastPositive(i.opacity,t,\\\"mo\\\"),n.mergeArray(i.symbol,t,\\\"mx\\\"),n.mergeArray(i.angle,t,\\\"ma\\\"),n.mergeArray(i.standoff,t,\\\"mf\\\"),n.mergeArray(i.color,t,\\\"mc\\\");var a=i.line;i.line&&(n.mergeArray(a.color,t,\\\"mlc\\\"),n.mergeArrayCastPositive(a.width,t,\\\"mlw\\\"));var o=i.gradient;o&&\\\"none\\\"!==o.type&&(n.mergeArray(o.type,t,\\\"mgt\\\"),n.mergeArray(o.color,t,\\\"mgc\\\"))}}},82196:function(t,e,r){\\\"use strict\\\";var n=r(12663).axisHoverFormat,i=r(5386).si,a=r(5386).fF,o=r(50693),s=r(41940),l=r(79952).P,u=r(79952).u,c=r(91424),f=r(47581),h=r(1426).extendFlat;t.exports={x:{valType:\\\"data_array\\\",editType:\\\"calc+clearAxisTypes\\\",anim:!0},x0:{valType:\\\"any\\\",dflt:0,editType:\\\"calc+clearAxisTypes\\\",anim:!0},dx:{valType:\\\"number\\\",dflt:1,editType:\\\"calc\\\",anim:!0},y:{valType:\\\"data_array\\\",editType:\\\"calc+clearAxisTypes\\\",anim:!0},y0:{valType:\\\"any\\\",dflt:0,editType:\\\"calc+clearAxisTypes\\\",anim:!0},dy:{valType:\\\"number\\\",dflt:1,editType:\\\"calc\\\",anim:!0},xperiod:{valType:\\\"any\\\",dflt:0,editType:\\\"calc\\\"},yperiod:{valType:\\\"any\\\",dflt:0,editType:\\\"calc\\\"},xperiod0:{valType:\\\"any\\\",editType:\\\"calc\\\"},yperiod0:{valType:\\\"any\\\",editType:\\\"calc\\\"},xperiodalignment:{valType:\\\"enumerated\\\",values:[\\\"start\\\",\\\"middle\\\",\\\"end\\\"],dflt:\\\"middle\\\",editType:\\\"calc\\\"},yperiodalignment:{valType:\\\"enumerated\\\",values:[\\\"start\\\",\\\"middle\\\",\\\"end\\\"],dflt:\\\"middle\\\",editType:\\\"calc\\\"},xhoverformat:n(\\\"x\\\"),yhoverformat:n(\\\"y\\\"),offsetgroup:{valType:\\\"string\\\",dflt:\\\"\\\",editType:\\\"calc\\\"},alignmentgroup:{valType:\\\"string\\\",dflt:\\\"\\\",editType:\\\"calc\\\"},stackgroup:{valType:\\\"string\\\",dflt:\\\"\\\",editType:\\\"calc\\\"},orientation:{valType:\\\"enumerated\\\",values:[\\\"v\\\",\\\"h\\\"],editType:\\\"calc\\\"},groupnorm:{valType:\\\"enumerated\\\",values:[\\\"\\\",\\\"fraction\\\",\\\"percent\\\"],dflt:\\\"\\\",editType:\\\"calc\\\"},stackgaps:{valType:\\\"enumerated\\\",values:[\\\"infer zero\\\",\\\"interpolate\\\"],dflt:\\\"infer zero\\\",editType:\\\"calc\\\"},text:{valType:\\\"string\\\",dflt:\\\"\\\",arrayOk:!0,editType:\\\"calc\\\"},texttemplate:i({},{}),hovertext:{valType:\\\"string\\\",dflt:\\\"\\\",arrayOk:!0,editType:\\\"style\\\"},mode:{valType:\\\"flaglist\\\",flags:[\\\"lines\\\",\\\"markers\\\",\\\"text\\\"],extras:[\\\"none\\\"],editType:\\\"calc\\\"},hoveron:{valType:\\\"flaglist\\\",flags:[\\\"points\\\",\\\"fills\\\"],editType:\\\"style\\\"},hovertemplate:a({},{keys:f.eventDataKeys}),line:{color:{valType:\\\"color\\\",editType:\\\"style\\\",anim:!0},width:{valType:\\\"number\\\",min:0,dflt:2,editType:\\\"style\\\",anim:!0},shape:{valType:\\\"enumerated\\\",values:[\\\"linear\\\",\\\"spline\\\",\\\"hv\\\",\\\"vh\\\",\\\"hvh\\\",\\\"vhv\\\"],dflt:\\\"linear\\\",editType:\\\"plot\\\"},smoothing:{valType:\\\"number\\\",min:0,max:1.3,dflt:1,editType:\\\"plot\\\"},dash:h({},l,{editType:\\\"style\\\"}),backoff:{valType:\\\"number\\\",min:0,dflt:\\\"auto\\\",arrayOk:!0,editType:\\\"plot\\\"},simplify:{valType:\\\"boolean\\\",dflt:!0,editType:\\\"plot\\\"},editType:\\\"plot\\\"},connectgaps:{valType:\\\"boolean\\\",dflt:!1,editType:\\\"calc\\\"},cliponaxis:{valType:\\\"boolean\\\",dflt:!0,editType:\\\"plot\\\"},fill:{valType:\\\"enumerated\\\",values:[\\\"none\\\",\\\"tozeroy\\\",\\\"tozerox\\\",\\\"tonexty\\\",\\\"tonextx\\\",\\\"toself\\\",\\\"tonext\\\"],editType:\\\"calc\\\"},fillcolor:{valType:\\\"color\\\",editType:\\\"style\\\",anim:!0},fillpattern:u,marker:h({symbol:{valType:\\\"enumerated\\\",values:c.symbolList,dflt:\\\"circle\\\",arrayOk:!0,editType:\\\"style\\\"},opacity:{valType:\\\"number\\\",min:0,max:1,arrayOk:!0,editType:\\\"style\\\",anim:!0},angle:{valType:\\\"angle\\\",dflt:0,arrayOk:!0,editType:\\\"plot\\\",anim:!1},angleref:{valType:\\\"enumerated\\\",values:[\\\"previous\\\",\\\"up\\\"],dflt:\\\"up\\\",editType:\\\"plot\\\",anim:!1},standoff:{valType:\\\"number\\\",min:0,dflt:0,arrayOk:!0,editType:\\\"plot\\\",anim:!0},size:{valType:\\\"number\\\",min:0,dflt:6,arrayOk:!0,editType:\\\"calc\\\",anim:!0},maxdisplayed:{valType:\\\"number\\\",min:0,dflt:0,editType:\\\"plot\\\"},sizeref:{valType:\\\"number\\\",dflt:1,editType:\\\"calc\\\"},sizemin:{valType:\\\"number\\\",min:0,dflt:0,editType:\\\"calc\\\"},sizemode:{valType:\\\"enumerated\\\",values:[\\\"diameter\\\",\\\"area\\\"],dflt:\\\"diameter\\\",editType:\\\"calc\\\"},line:h({width:{valType:\\\"number\\\",min:0,arrayOk:!0,editType:\\\"style\\\",anim:!0},editType:\\\"calc\\\"},o(\\\"marker.line\\\",{anim:!0})),gradient:{type:{valType:\\\"enumerated\\\",values:[\\\"radial\\\",\\\"horizontal\\\",\\\"vertical\\\",\\\"none\\\"],arrayOk:!0,dflt:\\\"none\\\",editType:\\\"calc\\\"},color:{valType:\\\"color\\\",arrayOk:!0,editType:\\\"calc\\\"},editType:\\\"calc\\\"},editType:\\\"calc\\\"},o(\\\"marker\\\",{anim:!0})),selected:{marker:{opacity:{valType:\\\"number\\\",min:0,max:1,editType:\\\"style\\\"},color:{valType:\\\"color\\\",editType:\\\"style\\\"},size:{valType:\\\"number\\\",min:0,editType:\\\"style\\\"},editType:\\\"style\\\"},textfont:{color:{valType:\\\"color\\\",editType:\\\"style\\\"},editType:\\\"style\\\"},editType:\\\"style\\\"},unselected:{marker:{opacity:{valType:\\\"number\\\",min:0,max:1,editType:\\\"style\\\"},color:{valType:\\\"color\\\",editType:\\\"style\\\"},size:{valType:\\\"number\\\",min:0,editType:\\\"style\\\"},editType:\\\"style\\\"},textfont:{color:{valType:\\\"color\\\",editType:\\\"style\\\"},editType:\\\"style\\\"},editType:\\\"style\\\"},textposition:{valType:\\\"enumerated\\\",values:[\\\"top left\\\",\\\"top center\\\",\\\"top right\\\",\\\"middle left\\\",\\\"middle center\\\",\\\"middle right\\\",\\\"bottom left\\\",\\\"bottom center\\\",\\\"bottom right\\\"],dflt:\\\"middle center\\\",arrayOk:!0,editType:\\\"calc\\\"},textfont:s({editType:\\\"calc\\\",colorEditType:\\\"style\\\",arrayOk:!0})}},47761:function(t,e,r){\\\"use strict\\\";var n=r(92770),i=r(71828),a=r(89298),o=r(42973),s=r(50606).BADNUM,l=r(34098),u=r(36922),c=r(75225),f=r(66279);function h(t,e,r,n,i,o,s){var u=e._length,c=t._fullLayout,f=r._id,h=n._id,p=c._firstScatter[v(e)]===e.uid,d=(g(e,c,r,n)||{}).orientation,y=e.fill;r._minDtick=0,n._minDtick=0;var m={padded:!0},x={padded:!0};s&&(m.ppad=x.ppad=s);var b=u<2||i[0]!==i[u-1]||o[0]!==o[u-1];b&&(\\\"tozerox\\\"===y||\\\"tonextx\\\"===y&&(p||\\\"h\\\"===d))?m.tozero=!0:(e.error_y||{}).visible||\\\"tonexty\\\"!==y&&\\\"tozeroy\\\"!==y&&(l.hasMarkers(e)||l.hasText(e))||(m.padded=!1,m.ppad=0),b&&(\\\"tozeroy\\\"===y||\\\"tonexty\\\"===y&&(p||\\\"v\\\"===d))?x.tozero=!0:\\\"tonextx\\\"!==y&&\\\"tozerox\\\"!==y||(x.padded=!1),f&&(e._extremes[f]=a.findExtremes(r,i,m)),h&&(e._extremes[h]=a.findExtremes(n,o,x))}function p(t,e){if(l.hasMarkers(t)){var r,n=t.marker,o=1.6*(t.marker.sizeref||1);if(r=\\\"area\\\"===t.marker.sizemode?function(t){return Math.max(Math.sqrt((t||0)/o),3)}:function(t){return Math.max((t||0)/o,3)},i.isArrayOrTypedArray(n.size)){var s={type:\\\"linear\\\"};a.setConvert(s);for(var u=s.makeCalcdata(t.marker,\\\"size\\\"),c=new Array(e),f=0;f<e;f++)c[f]=r(u[f]);return c}return r(n.size)}}function d(t,e){var r=v(e),n=t._firstScatter;n[r]||(n[r]=e.uid)}function v(t){var e=t.stackgroup;return t.xaxis+t.yaxis+t.type+(e?\\\"-\\\"+e:\\\"\\\")}function g(t,e,r,n){var i=t.stackgroup;if(i){var a=e._scatterStackOpts[r._id+n._id][i],o=\\\"v\\\"===a.orientation?n:r;return\\\"linear\\\"===o.type||\\\"log\\\"===o.type?a:void 0}}t.exports={calc:function(t,e){var r,l,v,y,m,x,b=t._fullLayout,_=e._xA=a.getFromId(t,e.xaxis||\\\"x\\\",\\\"x\\\"),w=e._yA=a.getFromId(t,e.yaxis||\\\"y\\\",\\\"y\\\"),T=_.makeCalcdata(e,\\\"x\\\"),k=w.makeCalcdata(e,\\\"y\\\"),A=o(e,_,\\\"x\\\",T),M=o(e,w,\\\"y\\\",k),S=A.vals,E=M.vals,L=e._length,C=new Array(L),P=e.ids,O=g(e,b,_,w),I=!1;d(b,e);var D,z=\\\"x\\\",R=\\\"y\\\";O?(i.pushUnique(O.traceIndices,e._expandedIndex),(r=\\\"v\\\"===O.orientation)?(R=\\\"s\\\",D=\\\"x\\\"):(z=\\\"s\\\",D=\\\"y\\\"),m=\\\"interpolate\\\"===O.stackgaps):h(t,e,_,w,S,E,p(e,L));var F=!!e.xperiodalignment,B=!!e.yperiodalignment;for(l=0;l<L;l++){var N=C[l]={},j=n(S[l]),U=n(E[l]);j&&U?(N[z]=S[l],N[R]=E[l],F&&(N.orig_x=T[l],N.xEnd=A.ends[l],N.xStart=A.starts[l]),B&&(N.orig_y=k[l],N.yEnd=M.ends[l],N.yStart=M.starts[l])):O&&(r?j:U)?(N[D]=r?S[l]:E[l],N.gap=!0,m?(N.s=s,I=!0):N.s=0):N[z]=N[R]=s,P&&(N.id=String(P[l]))}if(c(C,e),u(t,e),f(C,e),O){for(l=0;l<C.length;)C[l][D]===s?C.splice(l,1):l++;if(i.sort(C,(function(t,e){return t[D]-e[D]||t.i-e.i})),I){for(l=0;l<C.length-1&&C[l].gap;)l++;for((x=C[l].s)||(x=C[l].s=0),v=0;v<l;v++)C[v].s=x;for(y=C.length-1;y>l&&C[y].gap;)y--;for(x=C[y].s,v=C.length-1;v>y;v--)C[v].s=x;for(;l<y;)if(C[++l].gap){for(v=l+1;C[v].gap;)v++;for(var V=C[l-1][D],H=C[l-1].s,q=(C[v].s-H)/(C[v][D]-V);l<v;)C[l].s=H+(C[l][D]-V)*q,l++}}}return C},calcMarkerSize:p,calcAxisExpansion:h,setFirstScatter:d,getStackOpts:g}},66279:function(t,e,r){\\\"use strict\\\";var n=r(71828);t.exports=function(t,e){n.isArrayOrTypedArray(e.selectedpoints)&&n.tagSelected(t,e)}},36922:function(t,e,r){\\\"use strict\\\";var n=r(52075).hasColorscale,i=r(78803),a=r(34098);t.exports=function(t,e){a.hasLines(e)&&n(e,\\\"line\\\")&&i(t,e,{vals:e.line.color,containerStr:\\\"line\\\",cLetter:\\\"c\\\"}),a.hasMarkers(e)&&(n(e,\\\"marker\\\")&&i(t,e,{vals:e.marker.color,containerStr:\\\"marker\\\",cLetter:\\\"c\\\"}),n(e,\\\"marker.line\\\")&&i(t,e,{vals:e.marker.line.color,containerStr:\\\"marker.line\\\",cLetter:\\\"c\\\"}))}},47581:function(t){\\\"use strict\\\";t.exports={PTS_LINESONLY:20,minTolerance:.2,toleranceGrowth:10,maxScreensAway:20,eventDataKeys:[]}},72626:function(t,e,r){\\\"use strict\\\";var n=r(47761),i=r(11661).setGroupPositions;function a(t,e,r,n,i,a,o){i[n]=!0;var s={i:null,gap:!0,s:0};if(s[o]=r,t.splice(e,0,s),e&&r===t[e-1][o]){var l=t[e-1];s.s=l.s,s.i=l.i,s.gap=l.gap}else a&&(s.s=function(t,e,r,n){var i=t[e-1],a=t[e+1];return a?i?i.s+(a.s-i.s)*(r-i[n])/(a[n]-i[n]):a.s:i.s}(t,e,r,o));e||(t[0].t=t[1].t,t[0].trace=t[1].trace,delete t[1].t,delete t[1].trace)}t.exports=function(t,e){\\\"group\\\"===t._fullLayout.scattermode&&function(t,e){for(var r=e.xaxis,n=e.yaxis,a=t._fullLayout,o=t._fullData,s=t.calcdata,l=[],u=[],c=0;c<o.length;c++){var f=o[c];!0===f.visible&&\\\"scatter\\\"===f.type&&f.xaxis===r._id&&f.yaxis===n._id&&(\\\"h\\\"===f.orientation?l.push(s[c]):\\\"v\\\"===f.orientation&&u.push(s[c]))}var h={mode:a.scattermode,gap:a.scattergap};i(t,r,n,u,h),i(t,n,r,l,h)}(t,e);var r=e.xaxis,o=e.yaxis,s=r._id+o._id,l=t._fullLayout._scatterStackOpts[s];if(l){var u,c,f,h,p,d,v,g,y,m,x,b,_,w,T,k=t.calcdata;for(var A in l){var M=(m=l[A]).traceIndices;if(M.length){for(x=\\\"interpolate\\\"===m.stackgaps,b=m.groupnorm,\\\"v\\\"===m.orientation?(_=\\\"x\\\",w=\\\"y\\\"):(_=\\\"y\\\",w=\\\"x\\\"),T=new Array(M.length),u=0;u<T.length;u++)T[u]=!1;d=k[M[0]];var S=new Array(d.length);for(u=0;u<d.length;u++)S[u]=d[u][_];for(u=1;u<M.length;u++){for(p=k[M[u]],c=f=0;c<p.length;c++){for(v=p[c][_];v>S[f]&&f<S.length;f++)a(p,c,S[f],u,T,x,_),c++;if(v!==S[f]){for(h=0;h<u;h++)a(k[M[h]],f,v,h,T,x,_);S.splice(f,0,v)}f++}for(;f<S.length;f++)a(p,c,S[f],u,T,x,_),c++}var E=S.length;for(c=0;c<d.length;c++){for(g=d[c][w]=d[c].s,u=1;u<M.length;u++)(p=k[M[u]])[0].trace._rawLength=p[0].trace._length,p[0].trace._length=E,g+=p[c].s,p[c][w]=g;if(b)for(y=(\\\"fraction\\\"===b?g:g/100)||1,u=0;u<M.length;u++){var L=k[M[u]][c];L[w]/=y,L.sNorm=L.s/y}}for(u=0;u<M.length;u++){var C=(p=k[M[u]])[0].trace,P=n.calcMarkerSize(C,C._rawLength),O=Array.isArray(P);if(P&&T[u]||O){var I=P;for(P=new Array(E),c=0;c<E;c++)P[c]=p[c].gap?0:O?I[p[c].i]:I}var D=new Array(E),z=new Array(E);for(c=0;c<E;c++)D[c]=p[c].x,z[c]=p[c].y;n.calcAxisExpansion(t,C,r,o,D,z,P),p[0].t.orientation=m.orientation}}}}}},34936:function(t,e,r){\\\"use strict\\\";var n=r(71828),i=r(26125),a=r(82196);t.exports=function(t,e){var r,o,s;function l(t){return n.coerce(o._input,o,a,t)}if(\\\"group\\\"===e.scattermode)for(s=0;s<t.length;s++)\\\"scatter\\\"===(o=t[s]).type&&(r=o._input,i(r,o,e,l));for(s=0;s<t.length;s++){var u=t[s];if(\\\"scatter\\\"===u.type){var c=u.fill;if(\\\"none\\\"!==c&&\\\"toself\\\"!==c&&(u.opacity=void 0,\\\"tonexty\\\"===c||\\\"tonextx\\\"===c))for(var f=s-1;f>=0;f--){var h=t[f];if(\\\"scatter\\\"===h.type&&h.xaxis===u.xaxis&&h.yaxis===u.yaxis){h.opacity=void 0;break}}}}}},17438:function(t,e,r){\\\"use strict\\\";var n=r(71828),i=r(73972),a=r(82196),o=r(47581),s=r(34098),l=r(67513),u=r(73927),c=r(565),f=r(49508),h=r(11058),p=r(94039),d=r(82410),v=r(28908),g=r(71828).coercePattern;t.exports=function(t,e,r,y){function m(r,i){return n.coerce(t,e,a,r,i)}var x=l(t,e,y,m);if(x||(e.visible=!1),e.visible){u(t,e,y,m),m(\\\"xhoverformat\\\"),m(\\\"yhoverformat\\\");var b=c(t,e,y,m);\\\"group\\\"===y.scattermode&&void 0===e.orientation&&m(\\\"orientation\\\",\\\"v\\\");var _=!b&&x<o.PTS_LINESONLY?\\\"lines+markers\\\":\\\"lines\\\";m(\\\"text\\\"),m(\\\"hovertext\\\"),m(\\\"mode\\\",_),s.hasLines(e)&&(h(t,e,r,y,m,{backoff:!0}),p(t,e,m),m(\\\"connectgaps\\\"),m(\\\"line.simplify\\\")),s.hasMarkers(e)&&f(t,e,r,y,m,{gradient:!0}),s.hasText(e)&&(m(\\\"texttemplate\\\"),d(t,e,y,m));var w=[];(s.hasMarkers(e)||s.hasText(e))&&(m(\\\"cliponaxis\\\"),m(\\\"marker.maxdisplayed\\\"),w.push(\\\"points\\\")),m(\\\"fill\\\",b?b.fillDflt:\\\"none\\\"),\\\"none\\\"!==e.fill&&(v(t,e,r,m),s.hasLines(e)||p(t,e,m),g(m,\\\"fillpattern\\\",e.fillcolor,!1));var T=(e.line||{}).color,k=(e.marker||{}).color;\\\"tonext\\\"!==e.fill&&\\\"toself\\\"!==e.fill||w.push(\\\"fills\\\"),m(\\\"hoveron\\\",w.join(\\\"+\\\")||\\\"points\\\"),\\\"fills\\\"!==e.hoveron&&m(\\\"hovertemplate\\\");var A=i.getComponentMethod(\\\"errorbars\\\",\\\"supplyDefaults\\\");A(t,e,T||k||r,{axis:\\\"y\\\"}),A(t,e,T||k||r,{axis:\\\"x\\\",inherit:\\\"y\\\"}),n.coerceSelectionMarkerOpacity(e,m)}}},28908:function(t,e,r){\\\"use strict\\\";var n=r(7901),i=r(71828).isArrayOrTypedArray;t.exports=function(t,e,r,a){var o=!1;if(e.marker){var s=e.marker.color,l=(e.marker.line||{}).color;s&&!i(s)?o=s:l&&!i(l)&&(o=l)}a(\\\"fillcolor\\\",n.addOpacity((e.line||{}).color||o||r,.5))}},8225:function(t,e,r){\\\"use strict\\\";var n=r(89298);t.exports=function(t,e,r){var i={},a={_fullLayout:r},o=n.getFromTrace(a,e,\\\"x\\\"),s=n.getFromTrace(a,e,\\\"y\\\"),l=t.orig_x;void 0===l&&(l=t.x);var u=t.orig_y;return void 0===u&&(u=t.y),i.xLabel=n.tickText(o,o.c2l(l),!0).text,i.yLabel=n.tickText(s,s.c2l(u),!0).text,i}},34603:function(t,e,r){\\\"use strict\\\";var n=r(7901),i=r(34098);t.exports=function(t,e){var r,a;if(\\\"lines\\\"===t.mode)return(r=t.line.color)&&n.opacity(r)?r:t.fillcolor;if(\\\"none\\\"===t.mode)return t.fill?t.fillcolor:\\\"\\\";var o=e.mcc||(t.marker||{}).color,s=e.mlcc||((t.marker||{}).line||{}).color;return(a=o&&n.opacity(o)?o:s&&n.opacity(s)&&(e.mlw||((t.marker||{}).line||{}).width)?s:\\\"\\\")?n.opacity(a)<.3?n.addOpacity(a,.3):a:(r=(t.line||{}).color)&&n.opacity(r)&&i.hasLines(t)&&t.line.width?r:t.fillcolor}},26125:function(t,e,r){\\\"use strict\\\";var n=r(99082).getAxisGroup;t.exports=function(t,e,r,i){var a=e.orientation,o=e[{v:\\\"x\\\",h:\\\"y\\\"}[a]+\\\"axis\\\"],s=n(r,o)+a,l=r._alignmentOpts||{},u=i(\\\"alignmentgroup\\\"),c=l[s];c||(c=l[s]={});var f=c[u];f?f.traces.push(e):f=c[u]={traces:[e],alignmentIndex:Object.keys(c).length,offsetGroups:{}};var h=i(\\\"offsetgroup\\\"),p=f.offsetGroups,d=p[h];h&&(d||(d=p[h]={offsetIndex:Object.keys(p).length}),e._offsetIndex=d.offsetIndex)}},33720:function(t,e,r){\\\"use strict\\\";var n=r(71828),i=r(30211),a=r(73972),o=r(34603),s=r(7901),l=n.fillText;t.exports=function(t,e,r,u){var c=t.cd,f=c[0].trace,h=t.xa,p=t.ya,d=h.c2p(e),v=p.c2p(r),g=[d,v],y=f.hoveron||\\\"\\\",m=-1!==f.mode.indexOf(\\\"markers\\\")?3:.5,x=!!f.xperiodalignment,b=!!f.yperiodalignment;if(-1!==y.indexOf(\\\"points\\\")){var _=function(t){var e=Math.max(m,t.mrc||0),r=h.c2p(t.x)-d,n=p.c2p(t.y)-v;return Math.max(Math.sqrt(r*r+n*n)-e,1-m/e)},w=i.getDistanceFunction(u,(function(t){if(x){var e=h.c2p(t.xStart),r=h.c2p(t.xEnd);return d>=Math.min(e,r)&&d<=Math.max(e,r)?0:1/0}var n=Math.max(3,t.mrc||0),i=1-1/n,a=Math.abs(h.c2p(t.x)-d);return a<n?i*a/n:a-n+i}),(function(t){if(b){var e=p.c2p(t.yStart),r=p.c2p(t.yEnd);return v>=Math.min(e,r)&&v<=Math.max(e,r)?0:1/0}var n=Math.max(3,t.mrc||0),i=1-1/n,a=Math.abs(p.c2p(t.y)-v);return a<n?i*a/n:a-n+i}),_);if(i.getClosest(c,w,t),!1!==t.index){var T=c[t.index],k=h.c2p(T.x,!0),A=p.c2p(T.y,!0),M=T.mrc||1;t.index=T.i;var S=c[0].t.orientation,E=S&&(T.sNorm||T.s),L=\\\"h\\\"===S?E:void 0!==T.orig_x?T.orig_x:T.x,C=\\\"v\\\"===S?E:void 0!==T.orig_y?T.orig_y:T.y;return n.extendFlat(t,{color:o(f,T),x0:k-M,x1:k+M,xLabelVal:L,y0:A-M,y1:A+M,yLabelVal:C,spikeDistance:_(T),hovertemplate:f.hovertemplate}),l(T,f,t),a.getComponentMethod(\\\"errorbars\\\",\\\"hoverInfo\\\")(T,f,t),[t]}}if(-1!==y.indexOf(\\\"fills\\\")&&f._polygons){var P,O,I,D,z,R,F,B,N,j=f._polygons,U=[],V=!1,H=1/0,q=-1/0,G=1/0,Z=-1/0;for(P=0;P<j.length;P++)(I=j[P]).contains(g)&&(V=!V,U.push(I),G=Math.min(G,I.ymin),Z=Math.max(Z,I.ymax));if(V){var Y=((G=Math.max(G,0))+(Z=Math.min(Z,p._length)))/2;for(P=0;P<U.length;P++)for(D=U[P].pts,O=1;O<D.length;O++)(B=D[O-1][1])>Y!=(N=D[O][1])>=Y&&(R=D[O-1][0],F=D[O][0],N-B&&(z=R+(F-R)*(Y-B)/(N-B),H=Math.min(H,z),q=Math.max(q,z)));H=Math.max(H,0),q=Math.min(q,h._length);var W=s.defaultLine;return s.opacity(f.fillcolor)?W=f.fillcolor:s.opacity((f.line||{}).color)&&(W=f.line.color),n.extendFlat(t,{distance:t.maxHoverDistance,x0:H,x1:q,y0:Y,y1:Y,color:W,hovertemplate:!1}),delete t.index,f.text&&!Array.isArray(f.text)?t.text=String(f.text):t.text=f.name,[t]}}}},67368:function(t,e,r){\\\"use strict\\\";var n=r(34098);t.exports={hasLines:n.hasLines,hasMarkers:n.hasMarkers,hasText:n.hasText,isBubble:n.isBubble,attributes:r(82196),layoutAttributes:r(21479),supplyDefaults:r(17438),crossTraceDefaults:r(34936),supplyLayoutDefaults:r(79334),calc:r(47761).calc,crossTraceCalc:r(72626),arraysToCalcdata:r(75225),plot:r(32663),colorbar:r(4898),formatLabels:r(8225),style:r(16296).style,styleOnSelect:r(16296).styleOnSelect,hoverPoints:r(33720),selectPoints:r(98002),animatable:!0,moduleType:\\\"trace\\\",name:\\\"scatter\\\",basePlotModule:r(93612),categories:[\\\"cartesian\\\",\\\"svg\\\",\\\"symbols\\\",\\\"errorBarsOK\\\",\\\"showLegend\\\",\\\"scatter-like\\\",\\\"zoomScale\\\"],meta:{}}},21479:function(t){\\\"use strict\\\";t.exports={scattermode:{valType:\\\"enumerated\\\",values:[\\\"group\\\",\\\"overlay\\\"],dflt:\\\"overlay\\\",editType:\\\"calc\\\"},scattergap:{valType:\\\"number\\\",min:0,max:1,editType:\\\"calc\\\"}}},79334:function(t,e,r){\\\"use strict\\\";var n=r(71828),i=r(21479);t.exports=function(t,e){var r,a=\\\"group\\\"===e.barmode;\\\"group\\\"===e.scattermode&&(\\\"scattergap\\\",r=a?e.bargap:.2,n.coerce(t,e,i,\\\"scattergap\\\",r))}},11058:function(t,e,r){\\\"use strict\\\";var n=r(71828).isArrayOrTypedArray,i=r(52075).hasColorscale,a=r(1586);t.exports=function(t,e,r,o,s,l){l||(l={});var u=(t.marker||{}).color;s(\\\"line.color\\\",r),i(t,\\\"line\\\")?a(t,e,o,s,{prefix:\\\"line.\\\",cLetter:\\\"c\\\"}):s(\\\"line.color\\\",!n(u)&&u||r),s(\\\"line.width\\\"),l.noDash||s(\\\"line.dash\\\"),l.backoff&&s(\\\"line.backoff\\\")}},34621:function(t,e,r){\\\"use strict\\\";var n=r(91424),i=r(50606),a=i.BADNUM,o=i.LOG_CLIP,s=o+.5,l=o-.5,u=r(71828),c=u.segmentsIntersect,f=u.constrain,h=r(47581);t.exports=function(t,e){var r,i,o,p,d,v,g,y,m,x,b,_,w,T,k,A,M,S,E=e.trace||{},L=e.xaxis,C=e.yaxis,P=\\\"log\\\"===L.type,O=\\\"log\\\"===C.type,I=L._length,D=C._length,z=e.backoff,R=E.marker,F=e.connectGaps,B=e.baseTolerance,N=e.shape,j=\\\"linear\\\"===N,U=E.fill&&\\\"none\\\"!==E.fill,V=[],H=h.minTolerance,q=t.length,G=new Array(q),Z=0;function Y(r){var n=t[r];if(!n)return!1;var i=e.linearized?L.l2p(n.x):L.c2p(n.x),o=e.linearized?C.l2p(n.y):C.c2p(n.y);if(i===a){if(P&&(i=L.c2p(n.x,!0)),i===a)return!1;O&&o===a&&(i*=Math.abs(L._m*D*(L._m>0?s:l)/(C._m*I*(C._m>0?s:l)))),i*=1e3}if(o===a){if(O&&(o=C.c2p(n.y,!0)),o===a)return!1;o*=1e3}return[i,o]}function W(t,e,r,n){var i=r-t,a=n-e,o=.5-t,s=.5-e,l=i*i+a*a,u=i*o+a*s;if(u>0&&u<l){var c=o*a-s*i;if(c*c<l)return!0}}function X(t,e){var r=t[0]/I,n=t[1]/D,i=Math.max(0,-r,r-1,-n,n-1);return i&&void 0!==M&&W(r,n,M,S)&&(i=0),i&&e&&W(r,n,e[0]/I,e[1]/D)&&(i=0),(1+h.toleranceGrowth*i)*B}function J(t,e){var r=t[0]-e[0],n=t[1]-e[1];return Math.sqrt(r*r+n*n)}var K,$,Q,tt,et,rt,nt,it=h.maxScreensAway,at=-I*it,ot=I*(1+it),st=-D*it,lt=D*(1+it),ut=[[at,st,ot,st],[ot,st,ot,lt],[ot,lt,at,lt],[at,lt,at,st]];function ct(t){if(t[0]<at||t[0]>ot||t[1]<st||t[1]>lt)return[f(t[0],at,ot),f(t[1],st,lt)]}function ft(t,e){return t[0]===e[0]&&(t[0]===at||t[0]===ot)||t[1]===e[1]&&(t[1]===st||t[1]===lt)||void 0}function ht(t,e,r){return function(n,i){var a=ct(n),o=ct(i),s=[];if(a&&o&&ft(a,o))return s;a&&s.push(a),o&&s.push(o);var l=2*u.constrain((n[t]+i[t])/2,e,r)-((a||n)[t]+(o||i)[t]);return l&&((a&&o?l>0==a[t]>o[t]?a:o:a||o)[t]+=l),s}}function pt(t){var e=t[0],r=t[1],n=e===G[Z-1][0],i=r===G[Z-1][1];if(!n||!i)if(Z>1){var a=e===G[Z-2][0],o=r===G[Z-2][1];n&&(e===at||e===ot)&&a?o?Z--:G[Z-1]=t:i&&(r===st||r===lt)&&o?a?Z--:G[Z-1]=t:G[Z++]=t}else G[Z++]=t}function dt(t){G[Z-1][0]!==t[0]&&G[Z-1][1]!==t[1]&&pt([Q,tt]),pt(t),et=null,Q=tt=0}\\\"linear\\\"===N||\\\"spline\\\"===N?nt=function(t,e){for(var r=[],n=0,i=0;i<4;i++){var a=ut[i],o=c(t[0],t[1],e[0],e[1],a[0],a[1],a[2],a[3]);o&&(!n||Math.abs(o.x-r[0][0])>1||Math.abs(o.y-r[0][1])>1)&&(o=[o.x,o.y],n&&J(o,t)<J(r[0],t)?r.unshift(o):r.push(o),n++)}return r}:\\\"hv\\\"===N||\\\"vh\\\"===N?nt=function(t,e){var r=[],n=ct(t),i=ct(e);return n&&i&&ft(n,i)||(n&&r.push(n),i&&r.push(i)),r}:\\\"hvh\\\"===N?nt=ht(0,at,ot):\\\"vhv\\\"===N&&(nt=ht(1,st,lt));var vt=u.isArrayOrTypedArray(R);function gt(e){if(e&&z&&(e.i=r,e.d=t,e.trace=E,e.marker=vt?R[e.i]:R,e.backoff=z),M=e[0]/I,S=e[1]/D,K=e[0]<at?at:e[0]>ot?ot:0,$=e[1]<st?st:e[1]>lt?lt:0,K||$){if(Z)if(et){var n=nt(et,e);n.length>1&&(dt(n[0]),G[Z++]=n[1])}else rt=nt(G[Z-1],e)[0],G[Z++]=rt;else G[Z++]=[K||e[0],$||e[1]];var i=G[Z-1];K&&$&&(i[0]!==K||i[1]!==$)?(et&&(Q!==K&&tt!==$?pt(Q&&tt?(a=et,s=(o=e)[0]-a[0],l=(o[1]-a[1])/s,(a[1]*o[0]-o[1]*a[0])/s>0?[l>0?at:ot,lt]:[l>0?ot:at,st]):[Q||K,tt||$]):Q&&tt&&pt([Q,tt])),pt([K,$])):Q-K&&tt-$&&pt([K||Q,$||tt]),et=e,Q=K,tt=$}else et&&dt(nt(et,e)[0]),G[Z++]=e;var a,o,s,l}for(r=0;r<q;r++)if(i=Y(r)){for(Z=0,et=null,gt(i),r++;r<q;r++){if(!(p=Y(r))){if(F)continue;break}if(j&&e.simplify){var yt=Y(r+1);if(x=J(p,i),U&&(0===Z||Z===q-1)||!(x<X(p,yt)*H)){for(y=[(p[0]-i[0])/x,(p[1]-i[1])/x],d=i,b=x,_=T=k=0,g=!1,o=p,r++;r<t.length;r++){if(v=yt,yt=Y(r+1),!v){if(F)continue;break}if(A=(m=[v[0]-i[0],v[1]-i[1]])[0]*y[1]-m[1]*y[0],T=Math.min(T,A),(k=Math.max(k,A))-T>X(v,yt))break;o=v,(w=m[0]*y[0]+m[1]*y[1])>b?(b=w,p=v,g=!1):w<_&&(_=w,d=v,g=!0)}if(g?(gt(p),o!==d&&gt(d)):(d!==i&&gt(d),o!==p&&gt(p)),gt(o),r>=t.length||!v)break;gt(v),i=v}}else gt(p)}et&&pt([Q||et[0],tt||et[1]]),V.push(G.slice(0,Z))}var mt=N.slice(N.length-1);if(z&&\\\"h\\\"!==mt&&\\\"v\\\"!==mt){for(var xt=!1,bt=-1,_t=[],wt=0;wt<V.length;wt++)for(var Tt=0;Tt<V[wt].length-1;Tt++){var kt=V[wt][Tt],At=V[wt][Tt+1],Mt=n.applyBackoff(At,kt);Mt[0]===At[0]&&Mt[1]===At[1]||(xt=!0),_t[bt+1]||(_t[++bt]=[kt,[Mt[0],Mt[1]]])}return xt?_t:V}return V}},94039:function(t){\\\"use strict\\\";t.exports=function(t,e,r){\\\"spline\\\"===r(\\\"line.shape\\\")&&r(\\\"line.smoothing\\\")}},68687:function(t){\\\"use strict\\\";var e={tonextx:1,tonexty:1,tonext:1};t.exports=function(t,r,n){var i,a,o,s,l,u={},c=!1,f=-1,h=0,p=-1;for(a=0;a<n.length;a++)(o=(i=n[a][0].trace).stackgroup||\\\"\\\")?o in u?l=u[o]:(l=u[o]=h,h++):i.fill in e&&p>=0?l=p:(l=p=h,h++),l<f&&(c=!0),i._groupIndex=f=l;var d=n.slice();c&&d.sort((function(t,e){var r=t[0].trace,n=e[0].trace;return r._groupIndex-n._groupIndex||r.index-n.index}));var v={};for(a=0;a<d.length;a++)o=(i=d[a][0].trace).stackgroup||\\\"\\\",!0===i.visible?(i._nexttrace=null,i.fill in e&&(s=v[o],i._prevtrace=s||null,s&&(s._nexttrace=i)),i._ownfill=i.fill&&(\\\"tozero\\\"===i.fill.substr(0,6)||\\\"toself\\\"===i.fill||\\\"to\\\"===i.fill.substr(0,2)&&!i._prevtrace),v[o]=i):i._prevtrace=i._nexttrace=i._ownfill=null;return d}},39984:function(t,e,r){\\\"use strict\\\";var n=r(92770);t.exports=function(t,e){e||(e=2);var r=t.marker,i=r.sizeref||1,a=r.sizemin||0,o=\\\"area\\\"===r.sizemode?function(t){return Math.sqrt(t/i)}:function(t){return t/i};return function(t){var r=o(t/e);return n(r)&&r>0?Math.max(r,a):0}}},4898:function(t){\\\"use strict\\\";t.exports={container:\\\"marker\\\",min:\\\"cmin\\\",max:\\\"cmax\\\"}},49508:function(t,e,r){\\\"use strict\\\";var n=r(7901),i=r(52075).hasColorscale,a=r(1586),o=r(34098);t.exports=function(t,e,r,s,l,u){var c=o.isBubble(t),f=(t.line||{}).color;u=u||{},f&&(r=f),l(\\\"marker.symbol\\\"),l(\\\"marker.opacity\\\",c?.7:1),l(\\\"marker.size\\\"),u.noAngle||(l(\\\"marker.angle\\\"),u.noAngleRef||l(\\\"marker.angleref\\\"),u.noStandOff||l(\\\"marker.standoff\\\")),l(\\\"marker.color\\\",r),i(t,\\\"marker\\\")&&a(t,e,s,l,{prefix:\\\"marker.\\\",cLetter:\\\"c\\\"}),u.noSelect||(l(\\\"selected.marker.color\\\"),l(\\\"unselected.marker.color\\\"),l(\\\"selected.marker.size\\\"),l(\\\"unselected.marker.size\\\")),u.noLine||(l(\\\"marker.line.color\\\",f&&!Array.isArray(f)&&e.marker.color!==f?f:c?n.background:n.defaultLine),i(t,\\\"marker.line\\\")&&a(t,e,s,l,{prefix:\\\"marker.line.\\\",cLetter:\\\"c\\\"}),l(\\\"marker.line.width\\\",c?1:0)),c&&(l(\\\"marker.sizeref\\\"),l(\\\"marker.sizemin\\\"),l(\\\"marker.sizemode\\\")),u.gradient&&\\\"none\\\"!==l(\\\"marker.gradient.type\\\")&&l(\\\"marker.gradient.color\\\")}},73927:function(t,e,r){\\\"use strict\\\";var n=r(71828).dateTick0,i=r(50606).ONEWEEK;function a(t,e){return n(e,t%i==0?1:0)}t.exports=function(t,e,r,n,i){if(i||(i={x:!0,y:!0}),i.x){var o=n(\\\"xperiod\\\");o&&(n(\\\"xperiod0\\\",a(o,e.xcalendar)),n(\\\"xperiodalignment\\\"))}if(i.y){var s=n(\\\"yperiod\\\");s&&(n(\\\"yperiod0\\\",a(s,e.ycalendar)),n(\\\"yperiodalignment\\\"))}}},32663:function(t,e,r){\\\"use strict\\\";var n=r(39898),i=r(73972),a=r(71828),o=a.ensureSingle,s=a.identity,l=r(91424),u=r(34098),c=r(34621),f=r(68687),h=r(61082).tester;function p(t,e,r,f,p,d,v){var g,y=t._context.staticPlot;!function(t,e,r,i,o){var s=r.xaxis,l=r.yaxis,c=n.extent(a.simpleMap(s.range,s.r2c)),f=n.extent(a.simpleMap(l.range,l.r2c)),h=i[0].trace;if(u.hasMarkers(h)){var p=h.marker.maxdisplayed;if(0!==p){var d=i.filter((function(t){return t.x>=c[0]&&t.x<=c[1]&&t.y>=f[0]&&t.y<=f[1]})),v=Math.ceil(d.length/p),g=0;o.forEach((function(t,r){var n=t[0].trace;u.hasMarkers(n)&&n.marker.maxdisplayed>0&&r<e&&g++}));var y=Math.round(g*v/3+Math.floor(g/3)*v/7.1);i.forEach((function(t){delete t.vis})),d.forEach((function(t,e){0===Math.round((e+y)%v)&&(t.vis=!0)}))}}}(0,e,r,f,p);var m=!!v&&v.duration>0;function x(t){return m?t.transition():t}var b=r.xaxis,_=r.yaxis,w=f[0].trace,T=w.line,k=n.select(d),A=o(k,\\\"g\\\",\\\"errorbars\\\"),M=o(k,\\\"g\\\",\\\"lines\\\"),S=o(k,\\\"g\\\",\\\"points\\\"),E=o(k,\\\"g\\\",\\\"text\\\");if(i.getComponentMethod(\\\"errorbars\\\",\\\"plot\\\")(t,A,r,v),!0===w.visible){var L,C;x(k).style(\\\"opacity\\\",w.opacity);var P=w.fill.charAt(w.fill.length-1);\\\"x\\\"!==P&&\\\"y\\\"!==P&&(P=\\\"\\\"),f[0][r.isRangePlot?\\\"nodeRangePlot3\\\":\\\"node3\\\"]=k;var O,I,D=\\\"\\\",z=[],R=w._prevtrace;R&&(D=R._prevRevpath||\\\"\\\",C=R._nextFill,z=R._polygons);var F,B,N,j,U,V,H,q=\\\"\\\",G=\\\"\\\",Z=[],Y=a.noop;if(L=w._ownFill,u.hasLines(w)||\\\"none\\\"!==w.fill){for(C&&C.datum(f),-1!==[\\\"hv\\\",\\\"vh\\\",\\\"hvh\\\",\\\"vhv\\\"].indexOf(T.shape)?(F=l.steps(T.shape),B=l.steps(T.shape.split(\\\"\\\").reverse().join(\\\"\\\"))):F=B=\\\"spline\\\"===T.shape?function(t){var e=t[t.length-1];return t.length>1&&t[0][0]===e[0]&&t[0][1]===e[1]?l.smoothclosed(t.slice(1),T.smoothing):l.smoothopen(t,T.smoothing)}:function(t){return\\\"M\\\"+t.join(\\\"L\\\")},N=function(t){return B(t.reverse())},Z=c(f,{xaxis:b,yaxis:_,trace:w,connectGaps:w.connectgaps,baseTolerance:Math.max(T.width||1,3)/4,shape:T.shape,backoff:T.backoff,simplify:T.simplify,fill:w.fill}),H=w._polygons=new Array(Z.length),g=0;g<Z.length;g++)w._polygons[g]=h(Z[g]);Z.length&&(j=Z[0][0],V=(U=Z[Z.length-1])[U.length-1]),Y=function(t){return function(e){if(O=F(e),I=N(e),q?P?(q+=\\\"L\\\"+O.substr(1),G=I+\\\"L\\\"+G.substr(1)):(q+=\\\"Z\\\"+O,G=I+\\\"Z\\\"+G):(q=O,G=I),u.hasLines(w)){var r=n.select(this);if(r.datum(f),t)x(r.style(\\\"opacity\\\",0).attr(\\\"d\\\",O).call(l.lineGroupStyle)).style(\\\"opacity\\\",1);else{var i=x(r);i.attr(\\\"d\\\",O),l.singleLineStyle(f,i)}}}}}var W=M.selectAll(\\\".js-line\\\").data(Z);x(W.exit()).style(\\\"opacity\\\",0).remove(),W.each(Y(!1)),W.enter().append(\\\"path\\\").classed(\\\"js-line\\\",!0).style(\\\"vector-effect\\\",y?\\\"none\\\":\\\"non-scaling-stroke\\\").call(l.lineGroupStyle).each(Y(!0)),l.setClipUrl(W,r.layerClipId,t),Z.length?(L?(L.datum(f),j&&V&&(P?(\\\"y\\\"===P?j[1]=V[1]=_.c2p(0,!0):\\\"x\\\"===P&&(j[0]=V[0]=b.c2p(0,!0)),x(L).attr(\\\"d\\\",\\\"M\\\"+V+\\\"L\\\"+j+\\\"L\\\"+q.substr(1)).call(l.singleFillStyle,t)):x(L).attr(\\\"d\\\",q+\\\"Z\\\").call(l.singleFillStyle,t))):C&&(\\\"tonext\\\"===w.fill.substr(0,6)&&q&&D?(\\\"tonext\\\"===w.fill?x(C).attr(\\\"d\\\",q+\\\"Z\\\"+D+\\\"Z\\\").call(l.singleFillStyle,t):x(C).attr(\\\"d\\\",q+\\\"L\\\"+D.substr(1)+\\\"Z\\\").call(l.singleFillStyle,t),w._polygons=w._polygons.concat(z)):(J(C),w._polygons=null)),w._prevRevpath=G,w._prevPolygons=H):(L?J(L):C&&J(C),w._polygons=w._prevRevpath=w._prevPolygons=null),S.datum(f),E.datum(f),function(e,i,a){var o,c=a[0].trace,f=u.hasMarkers(c),h=u.hasText(c),p=et(c),d=rt,v=rt;if(f||h){var g=s,y=c.stackgroup,w=y&&\\\"infer zero\\\"===t._fullLayout._scatterStackOpts[b._id+_._id][y].stackgaps;c.marker.maxdisplayed||c._needsCull?g=w?$:K:y&&!w&&(g=Q),f&&(d=g),h&&(v=g)}var T,k=(o=e.selectAll(\\\"path.point\\\").data(d,p)).enter().append(\\\"path\\\").classed(\\\"point\\\",!0);m&&k.call(l.pointStyle,c,t).call(l.translatePoints,b,_).style(\\\"opacity\\\",0).transition().style(\\\"opacity\\\",1),o.order(),f&&(T=l.makePointStyleFns(c)),o.each((function(e){var i=n.select(this),a=x(i);l.translatePoint(e,a,b,_)?(l.singlePointStyle(e,a,c,T,t),r.layerClipId&&l.hideOutsideRangePoint(e,a,b,_,c.xcalendar,c.ycalendar),c.customdata&&i.classed(\\\"plotly-customdata\\\",null!==e.data&&void 0!==e.data)):a.remove()})),m?o.exit().transition().style(\\\"opacity\\\",0).remove():o.exit().remove(),(o=i.selectAll(\\\"g\\\").data(v,p)).enter().append(\\\"g\\\").classed(\\\"textpoint\\\",!0).append(\\\"text\\\"),o.order(),o.each((function(t){var e=n.select(this),i=x(e.select(\\\"text\\\"));l.translatePoint(t,i,b,_)?r.layerClipId&&l.hideOutsideRangePoint(t,e,b,_,c.xcalendar,c.ycalendar):e.remove()})),o.selectAll(\\\"text\\\").call(l.textPointStyle,c,t).each((function(t){var e=b.c2p(t.x),r=_.c2p(t.y);n.select(this).selectAll(\\\"tspan.line\\\").each((function(){x(n.select(this)).attr({x:e,y:r})}))})),o.exit().remove()}(S,E,f);var X=!1===w.cliponaxis?null:r.layerClipId;l.setClipUrl(S,X,t),l.setClipUrl(E,X,t)}function J(t){x(t).attr(\\\"d\\\",\\\"M0,0Z\\\")}function K(t){return t.filter((function(t){return!t.gap&&t.vis}))}function $(t){return t.filter((function(t){return t.vis}))}function Q(t){return t.filter((function(t){return!t.gap}))}function tt(t){return t.id}function et(t){if(t.ids)return tt}function rt(){return!1}}t.exports=function(t,e,r,i,a,u){var c,h,d=!a,v=!!a&&a.duration>0,g=f(t,e,r);(c=i.selectAll(\\\"g.trace\\\").data(g,(function(t){return t[0].trace.uid}))).enter().append(\\\"g\\\").attr(\\\"class\\\",(function(t){return\\\"trace scatter trace\\\"+t[0].trace.uid})).style(\\\"stroke-miterlimit\\\",2),c.order(),function(t,e,r){e.each((function(e){var i=o(n.select(this),\\\"g\\\",\\\"fills\\\");l.setClipUrl(i,r.layerClipId,t);var a=e[0].trace,u=[];a._ownfill&&u.push(\\\"_ownFill\\\"),a._nexttrace&&u.push(\\\"_nextFill\\\");var c=i.selectAll(\\\"g\\\").data(u,s);c.enter().append(\\\"g\\\"),c.exit().each((function(t){a[t]=null})).remove(),c.order().each((function(t){a[t]=o(n.select(this),\\\"path\\\",\\\"js-fill\\\")}))}))}(t,c,e),v?(u&&(h=u()),n.transition().duration(a.duration).ease(a.easing).each(\\\"end\\\",(function(){h&&h()})).each(\\\"interrupt\\\",(function(){h&&h()})).each((function(){i.selectAll(\\\"g.trace\\\").each((function(r,n){p(t,n,e,r,g,this,a)}))}))):c.each((function(r,n){p(t,n,e,r,g,this,a)})),d&&c.exit().remove(),i.selectAll(\\\"path:not([d])\\\").remove()}},98002:function(t,e,r){\\\"use strict\\\";var n=r(34098);t.exports=function(t,e){var r,i,a,o,s=t.cd,l=t.xaxis,u=t.yaxis,c=[],f=s[0].trace;if(!n.hasMarkers(f)&&!n.hasText(f))return[];if(!1===e)for(r=0;r<s.length;r++)s[r].selected=0;else for(r=0;r<s.length;r++)i=s[r],a=l.c2p(i.x),o=u.c2p(i.y),null!==i.i&&e.contains([a,o],!1,r,t)?(c.push({pointNumber:i.i,x:l.c2d(i.x),y:u.c2d(i.y)}),i.selected=1):i.selected=0;return c}},565:function(t){\\\"use strict\\\";var e=[\\\"orientation\\\",\\\"groupnorm\\\",\\\"stackgaps\\\"];t.exports=function(t,r,n,i){var a=n._scatterStackOpts,o=i(\\\"stackgroup\\\");if(o){var s=r.xaxis+r.yaxis,l=a[s];l||(l=a[s]={});var u=l[o],c=!1;u?u.traces.push(r):(u=l[o]={traceIndices:[],traces:[r]},c=!0);for(var f={orientation:r.x&&!r.y?\\\"h\\\":\\\"v\\\"},h=0;h<e.length;h++){var p=e[h],d=p+\\\"Found\\\";if(!u[d]){var v=void 0!==t[p],g=\\\"orientation\\\"===p;if((v||c)&&(u[p]=i(p,f[p]),g&&(u.fillDflt=\\\"h\\\"===u[p]?\\\"tonextx\\\":\\\"tonexty\\\"),v&&(u[d]=!0,!c&&(delete u.traces[0][p],g))))for(var y=0;y<u.traces.length-1;y++){var m=u.traces[y];m._input.fill!==m.fill&&(m.fill=u.fillDflt)}}}return u}}},16296:function(t,e,r){\\\"use strict\\\";var n=r(39898),i=r(91424),a=r(73972);function o(t,e,r){i.pointStyle(t.selectAll(\\\"path.point\\\"),e,r)}function s(t,e,r){i.textPointStyle(t.selectAll(\\\"text\\\"),e,r)}t.exports={style:function(t){var e=n.select(t).selectAll(\\\"g.trace.scatter\\\");e.style(\\\"opacity\\\",(function(t){return t[0].trace.opacity})),e.selectAll(\\\"g.points\\\").each((function(e){o(n.select(this),e.trace||e[0].trace,t)})),e.selectAll(\\\"g.text\\\").each((function(e){s(n.select(this),e.trace||e[0].trace,t)})),e.selectAll(\\\"g.trace path.js-line\\\").call(i.lineGroupStyle),e.selectAll(\\\"g.trace path.js-fill\\\").call(i.fillGroupStyle,t),a.getComponentMethod(\\\"errorbars\\\",\\\"style\\\")(e)},stylePoints:o,styleText:s,styleOnSelect:function(t,e,r){var n=e[0].trace;n.selectedpoints?(i.selectedPointStyle(r.selectAll(\\\"path.point\\\"),n),i.selectedTextStyle(r.selectAll(\\\"text\\\"),n)):(o(r,n,t),s(r,n,t))}}},34098:function(t,e,r){\\\"use strict\\\";var n=r(71828);t.exports={hasLines:function(t){return t.visible&&t.mode&&-1!==t.mode.indexOf(\\\"lines\\\")},hasMarkers:function(t){return t.visible&&(t.mode&&-1!==t.mode.indexOf(\\\"markers\\\")||\\\"splom\\\"===t.type)},hasText:function(t){return t.visible&&t.mode&&-1!==t.mode.indexOf(\\\"text\\\")},isBubble:function(t){return n.isPlainObject(t.marker)&&n.isArrayOrTypedArray(t.marker.size)}}},82410:function(t,e,r){\\\"use strict\\\";var n=r(71828);t.exports=function(t,e,r,i,a){a=a||{},i(\\\"textposition\\\"),n.coerceFont(i,\\\"textfont\\\",r.font),a.noSelect||(i(\\\"selected.textfont.color\\\"),i(\\\"unselected.textfont.color\\\"))}},67513:function(t,e,r){\\\"use strict\\\";var n=r(71828),i=r(73972);t.exports=function(t,e,r,a){var o,s=a(\\\"x\\\"),l=a(\\\"y\\\");if(i.getComponentMethod(\\\"calendars\\\",\\\"handleTraceDefaults\\\")(t,e,[\\\"x\\\",\\\"y\\\"],r),s){var u=n.minRowLength(s);l?o=Math.min(u,n.minRowLength(l)):(o=u,a(\\\"y0\\\"),a(\\\"dy\\\"))}else{if(!l)return 0;o=n.minRowLength(l),a(\\\"x0\\\"),a(\\\"dx\\\")}return e._length=o,o}},44542:function(t,e,r){\\\"use strict\\\";var n=r(82196),i=r(50693),a=r(12663).axisHoverFormat,o=r(5386).fF,s=r(5386).si,l=r(9012),u=r(29659),c=r(87381),f=r(1426).extendFlat,h=r(30962).overrideAll,p=r(78607),d=n.line,v=n.marker,g=v.line,y=f({width:d.width,dash:{valType:\\\"enumerated\\\",values:p(u),dflt:\\\"solid\\\"}},i(\\\"line\\\")),m=t.exports=h({x:n.x,y:n.y,z:{valType:\\\"data_array\\\"},text:f({},n.text,{}),texttemplate:s({},{}),hovertext:f({},n.hovertext,{}),hovertemplate:o(),xhoverformat:a(\\\"x\\\"),yhoverformat:a(\\\"y\\\"),zhoverformat:a(\\\"z\\\"),mode:f({},n.mode,{dflt:\\\"lines+markers\\\"}),surfaceaxis:{valType:\\\"enumerated\\\",values:[-1,0,1,2],dflt:-1},surfacecolor:{valType:\\\"color\\\"},projection:{x:{show:{valType:\\\"boolean\\\",dflt:!1},opacity:{valType:\\\"number\\\",min:0,max:1,dflt:1},scale:{valType:\\\"number\\\",min:0,max:10,dflt:2/3}},y:{show:{valType:\\\"boolean\\\",dflt:!1},opacity:{valType:\\\"number\\\",min:0,max:1,dflt:1},scale:{valType:\\\"number\\\",min:0,max:10,dflt:2/3}},z:{show:{valType:\\\"boolean\\\",dflt:!1},opacity:{valType:\\\"number\\\",min:0,max:1,dflt:1},scale:{valType:\\\"number\\\",min:0,max:10,dflt:2/3}}},connectgaps:n.connectgaps,line:y,marker:f({symbol:{valType:\\\"enumerated\\\",values:p(c),dflt:\\\"circle\\\",arrayOk:!0},size:f({},v.size,{dflt:8}),sizeref:v.sizeref,sizemin:v.sizemin,sizemode:v.sizemode,opacity:f({},v.opacity,{arrayOk:!1}),colorbar:v.colorbar,line:f({width:f({},g.width,{arrayOk:!1})},i(\\\"marker.line\\\"))},i(\\\"marker\\\")),textposition:f({},n.textposition,{dflt:\\\"top center\\\"}),textfont:{color:n.textfont.color,size:n.textfont.size,family:f({},n.textfont.family,{arrayOk:!1})},opacity:l.opacity,hoverinfo:f({},l.hoverinfo)},\\\"calc\\\",\\\"nested\\\");m.x.editType=m.y.editType=m.z.editType=\\\"calc+clearAxisTypes\\\"},36563:function(t,e,r){\\\"use strict\\\";var n=r(75225),i=r(36922);t.exports=function(t,e){var r=[{x:!1,y:!1,trace:e,t:{}}];return n(r,e),i(t,e),r}},67336:function(t,e,r){\\\"use strict\\\";var n=r(73972);function i(t,e,r,i){if(!e||!e.visible)return null;for(var a=n.getComponentMethod(\\\"errorbars\\\",\\\"makeComputeError\\\")(e),o=new Array(t.length),s=0;s<t.length;s++){var l=a(+t[s],s);if(\\\"log\\\"===i.type){var u=i.c2l(t[s]),c=t[s]-l[0],f=t[s]+l[1];if(o[s]=[(i.c2l(c,!0)-u)*r,(i.c2l(f,!0)-u)*r],c>0){var h=i.c2l(c);i._lowerLogErrorBound||(i._lowerLogErrorBound=h),i._lowerErrorBound=Math.min(i._lowerLogErrorBound,h)}}else o[s]=[-l[0]*r,l[1]*r]}return o}t.exports=function(t,e,r){var n=[i(t.x,t.error_x,e[0],r.xaxis),i(t.y,t.error_y,e[1],r.yaxis),i(t.z,t.error_z,e[2],r.zaxis)],a=function(t){for(var e=0;e<t.length;e++)if(t[e])return t[e].length;return 0}(n);if(0===a)return null;for(var o=new Array(a),s=0;s<a;s++){for(var l=[[0,0,0],[0,0,0]],u=0;u<3;u++)if(n[u])for(var c=0;c<2;c++)l[c][u]=n[u][s][c];o[s]=l}return o}},58925:function(t,e,r){\\\"use strict\\\";var n=r(9330).gl_line3d,i=r(9330).gl_scatter3d,a=r(9330).gl_error3d,o=r(9330).gl_mesh3d,s=r(9330).delaunay_triangulate,l=r(71828),u=r(78614),c=r(81697).formatColor,f=r(39984),h=r(29659),p=r(87381),d=r(89298),v=r(23469).appendArrayPointValue,g=r(67336);function y(t,e){this.scene=t,this.uid=e,this.linePlot=null,this.scatterPlot=null,this.errorBars=null,this.textMarkers=null,this.delaunayMesh=null,this.color=null,this.mode=\\\"\\\",this.dataPoints=[],this.axesBounds=[[-1/0,-1/0,-1/0],[1/0,1/0,1/0]],this.textLabels=null,this.data=null}var m=y.prototype;function x(t){return null==t?0:t.indexOf(\\\"left\\\")>-1?-1:t.indexOf(\\\"right\\\")>-1?1:0}function b(t){return null==t?0:t.indexOf(\\\"top\\\")>-1?-1:t.indexOf(\\\"bottom\\\")>-1?1:0}function _(t,e){return e(4*t)}function w(t){return p[t]}function T(t,e,r,n,i){var a=null;if(l.isArrayOrTypedArray(t)){a=[];for(var o=0;o<e;o++)void 0===t[o]?a[o]=n:a[o]=r(t[o],i)}else a=r(t,l.identity);return a}function k(t){if(l.isArrayOrTypedArray(t)){var e=t[0];return l.isArrayOrTypedArray(e)&&(t=e),\\\"rgb(\\\"+t.slice(0,3).map((function(t){return Math.round(255*t)}))+\\\")\\\"}return null}function A(t){return l.isArrayOrTypedArray(t)?4===t.length&&\\\"number\\\"==typeof t[0]?k(t):t.map(k):null}m.handlePick=function(t){if(t.object&&(t.object===this.linePlot||t.object===this.delaunayMesh||t.object===this.textMarkers||t.object===this.scatterPlot)){var e=t.index=t.data.index;return t.object.highlight&&t.object.highlight(null),this.scatterPlot&&(t.object=this.scatterPlot,this.scatterPlot.highlight(t.data)),t.textLabel=\\\"\\\",this.textLabels&&(Array.isArray(this.textLabels)?(this.textLabels[e]||0===this.textLabels[e])&&(t.textLabel=this.textLabels[e]):t.textLabel=this.textLabels),t.traceCoordinate=[this.data.x[e],this.data.y[e],this.data.z[e]],!0}},m.update=function(t){var e,r,p,y,m=this.scene.glplot.gl,k=h.solid;this.data=t;var M=function(t,e){var r,n,i,a,o,s,h=[],p=t.fullSceneLayout,y=t.dataScale,m=p.xaxis,k=p.yaxis,A=p.zaxis,M=e.marker,S=e.line,E=e.x||[],L=e.y||[],C=e.z||[],P=E.length,O=e.xcalendar,I=e.ycalendar,D=e.zcalendar;for(o=0;o<P;o++)r=m.d2l(E[o],0,O)*y[0],n=k.d2l(L[o],0,I)*y[1],i=A.d2l(C[o],0,D)*y[2],h[o]=[r,n,i];if(Array.isArray(e.text))s=e.text;else if(void 0!==e.text)for(s=new Array(P),o=0;o<P;o++)s[o]=e.text;function z(t,e){var r=p[t];return d.tickText(r,r.d2l(e),!0).text}var R=e.texttemplate;if(R){var F=t.fullLayout._d3locale,B=Array.isArray(R),N=B?Math.min(R.length,P):P,j=B?function(t){return R[t]}:function(){return R};for(s=new Array(N),o=0;o<N;o++){var U={x:E[o],y:L[o],z:C[o]},V={xLabel:z(\\\"xaxis\\\",E[o]),yLabel:z(\\\"yaxis\\\",L[o]),zLabel:z(\\\"zaxis\\\",C[o])},H={};v(H,e,o);var q=e._meta||{};s[o]=l.texttemplateString(j(o),V,F,H,U,q)}}if(a={position:h,mode:e.mode,text:s},\\\"line\\\"in e&&(a.lineColor=c(S,1,P),a.lineWidth=S.width,a.lineDashes=S.dash),\\\"marker\\\"in e){var G=f(e);a.scatterColor=c(M,1,P),a.scatterSize=T(M.size,P,_,20,G),a.scatterMarker=T(M.symbol,P,w,\\\"●\\\"),a.scatterLineWidth=M.line.width,a.scatterLineColor=c(M.line,1,P),a.scatterAngle=0}\\\"textposition\\\"in e&&(a.textOffset=function(t){var e=[0,0];if(Array.isArray(t))for(var r=0;r<t.length;r++)e[r]=[0,0],t[r]&&(e[r][0]=x(t[r]),e[r][1]=b(t[r]));else e[0]=x(t),e[1]=b(t);return e}(e.textposition),a.textColor=c(e.textfont,1,P),a.textSize=T(e.textfont.size,P,l.identity,12),a.textFont=e.textfont.family,a.textAngle=0);var Z=[\\\"x\\\",\\\"y\\\",\\\"z\\\"];for(a.project=[!1,!1,!1],a.projectScale=[1,1,1],a.projectOpacity=[1,1,1],o=0;o<3;++o){var Y=e.projection[Z[o]];(a.project[o]=Y.show)&&(a.projectOpacity[o]=Y.opacity,a.projectScale[o]=Y.scale)}a.errorBounds=g(e,y,p);var W=function(t){for(var e=[0,0,0],r=[[0,0,0],[0,0,0],[0,0,0]],n=[1,1,1],i=0;i<3;i++){var a=t[i];a&&!1!==a.copy_zstyle&&!1!==t[2].visible&&(a=t[2]),a&&a.visible&&(e[i]=a.width/2,r[i]=u(a.color),n[i]=a.thickness)}return{capSize:e,color:r,lineWidth:n}}([e.error_x,e.error_y,e.error_z]);return a.errorColor=W.color,a.errorLineWidth=W.lineWidth,a.errorCapSize=W.capSize,a.delaunayAxis=e.surfaceaxis,a.delaunayColor=u(e.surfacecolor),a}(this.scene,t);\\\"mode\\\"in M&&(this.mode=M.mode),\\\"lineDashes\\\"in M&&M.lineDashes in h&&(k=h[M.lineDashes]),this.color=A(M.scatterColor)||A(M.lineColor),this.dataPoints=M.position,e={gl:this.scene.glplot.gl,position:M.position,color:M.lineColor,lineWidth:M.lineWidth||1,dashes:k[0],dashScale:k[1],opacity:t.opacity,connectGaps:t.connectgaps},-1!==this.mode.indexOf(\\\"lines\\\")?this.linePlot?this.linePlot.update(e):(this.linePlot=n(e),this.linePlot._trace=this,this.scene.glplot.add(this.linePlot)):this.linePlot&&(this.scene.glplot.remove(this.linePlot),this.linePlot.dispose(),this.linePlot=null);var S=t.opacity;if(t.marker&&void 0!==t.marker.opacity&&(S*=t.marker.opacity),r={gl:this.scene.glplot.gl,position:M.position,color:M.scatterColor,size:M.scatterSize,glyph:M.scatterMarker,opacity:S,orthographic:!0,lineWidth:M.scatterLineWidth,lineColor:M.scatterLineColor,project:M.project,projectScale:M.projectScale,projectOpacity:M.projectOpacity},-1!==this.mode.indexOf(\\\"markers\\\")?this.scatterPlot?this.scatterPlot.update(r):(this.scatterPlot=i(r),this.scatterPlot._trace=this,this.scatterPlot.highlightScale=1,this.scene.glplot.add(this.scatterPlot)):this.scatterPlot&&(this.scene.glplot.remove(this.scatterPlot),this.scatterPlot.dispose(),this.scatterPlot=null),y={gl:this.scene.glplot.gl,position:M.position,glyph:M.text,color:M.textColor,size:M.textSize,angle:M.textAngle,alignment:M.textOffset,font:M.textFont,orthographic:!0,lineWidth:0,project:!1,opacity:t.opacity},this.textLabels=t.hovertext||t.text,-1!==this.mode.indexOf(\\\"text\\\")?this.textMarkers?this.textMarkers.update(y):(this.textMarkers=i(y),this.textMarkers._trace=this,this.textMarkers.highlightScale=1,this.scene.glplot.add(this.textMarkers)):this.textMarkers&&(this.scene.glplot.remove(this.textMarkers),this.textMarkers.dispose(),this.textMarkers=null),p={gl:this.scene.glplot.gl,position:M.position,color:M.errorColor,error:M.errorBounds,lineWidth:M.errorLineWidth,capSize:M.errorCapSize,opacity:t.opacity},this.errorBars?M.errorBounds?this.errorBars.update(p):(this.scene.glplot.remove(this.errorBars),this.errorBars.dispose(),this.errorBars=null):M.errorBounds&&(this.errorBars=a(p),this.errorBars._trace=this,this.scene.glplot.add(this.errorBars)),M.delaunayAxis>=0){var E=function(t,e,r){var n,i=(r+1)%3,a=(r+2)%3,o=[],l=[];for(n=0;n<t.length;++n){var u=t[n];!isNaN(u[i])&&isFinite(u[i])&&!isNaN(u[a])&&isFinite(u[a])&&(o.push([u[i],u[a]]),l.push(n))}var c=s(o);for(n=0;n<c.length;++n)for(var f=c[n],h=0;h<f.length;++h)f[h]=l[f[h]];return{positions:t,cells:c,meshColor:e}}(M.position,M.delaunayColor,M.delaunayAxis);E.opacity=t.opacity,this.delaunayMesh?this.delaunayMesh.update(E):(E.gl=m,this.delaunayMesh=o(E),this.delaunayMesh._trace=this,this.scene.glplot.add(this.delaunayMesh))}else this.delaunayMesh&&(this.scene.glplot.remove(this.delaunayMesh),this.delaunayMesh.dispose(),this.delaunayMesh=null)},m.dispose=function(){this.linePlot&&(this.scene.glplot.remove(this.linePlot),this.linePlot.dispose()),this.scatterPlot&&(this.scene.glplot.remove(this.scatterPlot),this.scatterPlot.dispose()),this.errorBars&&(this.scene.glplot.remove(this.errorBars),this.errorBars.dispose()),this.textMarkers&&(this.scene.glplot.remove(this.textMarkers),this.textMarkers.dispose()),this.delaunayMesh&&(this.scene.glplot.remove(this.delaunayMesh),this.delaunayMesh.dispose())},t.exports=function(t,e){var r=new y(t,e.uid);return r.update(e),r}},21428:function(t,e,r){\\\"use strict\\\";var n=r(73972),i=r(71828),a=r(34098),o=r(49508),s=r(11058),l=r(82410),u=r(44542);t.exports=function(t,e,r,c){function f(r,n){return i.coerce(t,e,u,r,n)}var h=function(t,e,r,i){var a=0,o=r(\\\"x\\\"),s=r(\\\"y\\\"),l=r(\\\"z\\\");return n.getComponentMethod(\\\"calendars\\\",\\\"handleTraceDefaults\\\")(t,e,[\\\"x\\\",\\\"y\\\",\\\"z\\\"],i),o&&s&&l&&(a=Math.min(o.length,s.length,l.length),e._length=e._xlength=e._ylength=e._zlength=a),a}(t,e,f,c);if(h){f(\\\"text\\\"),f(\\\"hovertext\\\"),f(\\\"hovertemplate\\\"),f(\\\"xhoverformat\\\"),f(\\\"yhoverformat\\\"),f(\\\"zhoverformat\\\"),f(\\\"mode\\\"),a.hasLines(e)&&(f(\\\"connectgaps\\\"),s(t,e,r,c,f)),a.hasMarkers(e)&&o(t,e,r,c,f,{noSelect:!0,noAngle:!0}),a.hasText(e)&&(f(\\\"texttemplate\\\"),l(t,e,c,f,{noSelect:!0}));var p=(e.line||{}).color,d=(e.marker||{}).color;f(\\\"surfaceaxis\\\")>=0&&f(\\\"surfacecolor\\\",p||d);for(var v=[\\\"x\\\",\\\"y\\\",\\\"z\\\"],g=0;g<3;++g){var y=\\\"projection.\\\"+v[g];f(y+\\\".show\\\")&&(f(y+\\\".opacity\\\"),f(y+\\\".scale\\\"))}var m=n.getComponentMethod(\\\"errorbars\\\",\\\"supplyDefaults\\\");m(t,e,p||d||r,{axis:\\\"z\\\"}),m(t,e,p||d||r,{axis:\\\"y\\\",inherit:\\\"z\\\"}),m(t,e,p||d||r,{axis:\\\"x\\\",inherit:\\\"z\\\"})}else e.visible=!1}},13551:function(t,e,r){\\\"use strict\\\";t.exports={plot:r(58925),attributes:r(44542),markerSymbols:r(87381),supplyDefaults:r(21428),colorbar:[{container:\\\"marker\\\",min:\\\"cmin\\\",max:\\\"cmax\\\"},{container:\\\"line\\\",min:\\\"cmin\\\",max:\\\"cmax\\\"}],calc:r(36563),moduleType:\\\"trace\\\",name:\\\"scatter3d\\\",basePlotModule:r(58547),categories:[\\\"gl3d\\\",\\\"symbols\\\",\\\"showLegend\\\",\\\"scatter-like\\\"],meta:{}}},97001:function(t,e,r){\\\"use strict\\\";var n=r(82196),i=r(9012),a=r(5386).fF,o=r(5386).si,s=r(50693),l=r(1426).extendFlat,u=n.marker,c=n.line,f=u.line;t.exports={carpet:{valType:\\\"string\\\",editType:\\\"calc\\\"},a:{valType:\\\"data_array\\\",editType:\\\"calc\\\"},b:{valType:\\\"data_array\\\",editType:\\\"calc\\\"},mode:l({},n.mode,{dflt:\\\"markers\\\"}),text:l({},n.text,{}),texttemplate:o({editType:\\\"plot\\\"},{keys:[\\\"a\\\",\\\"b\\\",\\\"text\\\"]}),hovertext:l({},n.hovertext,{}),line:{color:c.color,width:c.width,dash:c.dash,backoff:c.backoff,shape:l({},c.shape,{values:[\\\"linear\\\",\\\"spline\\\"]}),smoothing:c.smoothing,editType:\\\"calc\\\"},connectgaps:n.connectgaps,fill:l({},n.fill,{values:[\\\"none\\\",\\\"toself\\\",\\\"tonext\\\"],dflt:\\\"none\\\"}),fillcolor:n.fillcolor,marker:l({symbol:u.symbol,opacity:u.opacity,maxdisplayed:u.maxdisplayed,angle:u.angle,angleref:u.angleref,standoff:u.standoff,size:u.size,sizeref:u.sizeref,sizemin:u.sizemin,sizemode:u.sizemode,line:l({width:f.width,editType:\\\"calc\\\"},s(\\\"marker.line\\\")),gradient:u.gradient,editType:\\\"calc\\\"},s(\\\"marker\\\")),textfont:n.textfont,textposition:n.textposition,selected:n.selected,unselected:n.unselected,hoverinfo:l({},i.hoverinfo,{flags:[\\\"a\\\",\\\"b\\\",\\\"text\\\",\\\"name\\\"]}),hoveron:n.hoveron,hovertemplate:a()}},34618:function(t,e,r){\\\"use strict\\\";var n=r(92770),i=r(36922),a=r(75225),o=r(66279),s=r(47761).calcMarkerSize,l=r(22882);t.exports=function(t,e){var r=e._carpetTrace=l(t,e);if(r&&r.visible&&\\\"legendonly\\\"!==r.visible){var u;e.xaxis=r.xaxis,e.yaxis=r.yaxis;var c,f,h=e._length,p=new Array(h),d=!1;for(u=0;u<h;u++)if(c=e.a[u],f=e.b[u],n(c)&&n(f)){var v=r.ab2xy(+c,+f,!0),g=r.isVisible(+c,+f);g||(d=!0),p[u]={x:v[0],y:v[1],a:c,b:f,vis:g}}else p[u]={x:!1,y:!1};return e._needsCull=d,p[0].carpet=r,p[0].trace=e,s(e,h),i(t,e),a(p,e),o(p,e),p}}},98965:function(t,e,r){\\\"use strict\\\";var n=r(71828),i=r(47581),a=r(34098),o=r(49508),s=r(11058),l=r(94039),u=r(82410),c=r(28908),f=r(97001);t.exports=function(t,e,r,h){function p(r,i){return n.coerce(t,e,f,r,i)}p(\\\"carpet\\\"),e.xaxis=\\\"x\\\",e.yaxis=\\\"y\\\";var d=p(\\\"a\\\"),v=p(\\\"b\\\"),g=Math.min(d.length,v.length);if(g){e._length=g,p(\\\"text\\\"),p(\\\"texttemplate\\\"),p(\\\"hovertext\\\"),p(\\\"mode\\\",g<i.PTS_LINESONLY?\\\"lines+markers\\\":\\\"lines\\\"),a.hasLines(e)&&(s(t,e,r,h,p,{backoff:!0}),l(t,e,p),p(\\\"connectgaps\\\")),a.hasMarkers(e)&&o(t,e,r,h,p,{gradient:!0}),a.hasText(e)&&u(t,e,h,p);var y=[];(a.hasMarkers(e)||a.hasText(e))&&(p(\\\"marker.maxdisplayed\\\"),y.push(\\\"points\\\")),p(\\\"fill\\\"),\\\"none\\\"!==e.fill&&(c(t,e,r,p),a.hasLines(e)||l(t,e,p)),\\\"tonext\\\"!==e.fill&&\\\"toself\\\"!==e.fill||y.push(\\\"fills\\\"),\\\"fills\\\"!==p(\\\"hoveron\\\",y.join(\\\"+\\\")||\\\"points\\\")&&p(\\\"hovertemplate\\\"),n.coerceSelectionMarkerOpacity(e,p)}else e.visible=!1}},16165:function(t){\\\"use strict\\\";t.exports=function(t,e,r,n,i){var a=n[i];return t.a=a.a,t.b=a.b,t.y=a.y,t}},48953:function(t){\\\"use strict\\\";t.exports=function(t,e){var r={},n=e._carpet,i=n.ab2ij([t.a,t.b]),a=Math.floor(i[0]),o=i[0]-a,s=Math.floor(i[1]),l=i[1]-s,u=n.evalxy([],a,s,o,l);return r.yLabel=u[1].toFixed(3),r}},22931:function(t,e,r){\\\"use strict\\\";var n=r(33720),i=r(71828).fillText;t.exports=function(t,e,r,a){var o=n(t,e,r,a);if(o&&!1!==o[0].index){var s=o[0];if(void 0===s.index){var l=1-s.y0/t.ya._length,u=t.xa._length,c=u*l/2,f=u-c;return s.x0=Math.max(Math.min(s.x0,f),c),s.x1=Math.max(Math.min(s.x1,f),c),o}var h=s.cd[s.index];s.a=h.a,s.b=h.b,s.xLabelVal=void 0,s.yLabelVal=void 0;var p=s.trace,d=p._carpet,v=p._module.formatLabels(h,p);s.yLabel=v.yLabel,delete s.text;var g=[];if(!p.hovertemplate){var y=(h.hi||p.hoverinfo).split(\\\"+\\\");-1!==y.indexOf(\\\"all\\\")&&(y=[\\\"a\\\",\\\"b\\\",\\\"text\\\"]),-1!==y.indexOf(\\\"a\\\")&&m(d.aaxis,h.a),-1!==y.indexOf(\\\"b\\\")&&m(d.baxis,h.b),g.push(\\\"y: \\\"+s.yLabel),-1!==y.indexOf(\\\"text\\\")&&i(h,p,g),s.extraText=g.join(\\\"<br>\\\")}return o}function m(t,e){var r;r=t.labelprefix&&t.labelprefix.length>0?t.labelprefix.replace(/ = $/,\\\"\\\"):t._hovertitle,g.push(r+\\\": \\\"+e.toFixed(3)+t.labelsuffix)}}},46858:function(t,e,r){\\\"use strict\\\";t.exports={attributes:r(97001),supplyDefaults:r(98965),colorbar:r(4898),formatLabels:r(48953),calc:r(34618),plot:r(1913),style:r(16296).style,styleOnSelect:r(16296).styleOnSelect,hoverPoints:r(22931),selectPoints:r(98002),eventData:r(16165),moduleType:\\\"trace\\\",name:\\\"scattercarpet\\\",basePlotModule:r(93612),categories:[\\\"svg\\\",\\\"carpet\\\",\\\"symbols\\\",\\\"showLegend\\\",\\\"carpetDependent\\\",\\\"zoomScale\\\"],meta:{}}},1913:function(t,e,r){\\\"use strict\\\";var n=r(32663),i=r(89298),a=r(91424);t.exports=function(t,e,r,o){var s,l,u,c=r[0][0].carpet,f=i.getFromId(t,c.xaxis||\\\"x\\\"),h=i.getFromId(t,c.yaxis||\\\"y\\\"),p={xaxis:f,yaxis:h,plot:e.plot};for(s=0;s<r.length;s++)(l=r[s][0].trace)._xA=f,l._yA=h;for(n(t,p,r,o),s=0;s<r.length;s++)l=r[s][0].trace,u=o.selectAll(\\\"g.trace\\\"+l.uid+\\\" .js-line\\\"),a.setClipUrl(u,r[s][0].carpet._clipPathId,t)}},19316:function(t,e,r){\\\"use strict\\\";var n=r(5386).fF,i=r(5386).si,a=r(82196),o=r(9012),s=r(50693),l=r(79952).P,u=r(1426).extendFlat,c=r(30962).overrideAll,f=a.marker,h=a.line,p=f.line;t.exports=c({lon:{valType:\\\"data_array\\\"},lat:{valType:\\\"data_array\\\"},locations:{valType:\\\"data_array\\\"},locationmode:{valType:\\\"enumerated\\\",values:[\\\"ISO-3\\\",\\\"USA-states\\\",\\\"country names\\\",\\\"geojson-id\\\"],dflt:\\\"ISO-3\\\"},geojson:{valType:\\\"any\\\",editType:\\\"calc\\\"},featureidkey:{valType:\\\"string\\\",editType:\\\"calc\\\",dflt:\\\"id\\\"},mode:u({},a.mode,{dflt:\\\"markers\\\"}),text:u({},a.text,{}),texttemplate:i({editType:\\\"plot\\\"},{keys:[\\\"lat\\\",\\\"lon\\\",\\\"location\\\",\\\"text\\\"]}),hovertext:u({},a.hovertext,{}),textfont:a.textfont,textposition:a.textposition,line:{color:h.color,width:h.width,dash:l},connectgaps:a.connectgaps,marker:u({symbol:f.symbol,opacity:f.opacity,angle:f.angle,angleref:u({},f.angleref,{values:[\\\"previous\\\",\\\"up\\\",\\\"north\\\"]}),standoff:f.standoff,size:f.size,sizeref:f.sizeref,sizemin:f.sizemin,sizemode:f.sizemode,colorbar:f.colorbar,line:u({width:p.width},s(\\\"marker.line\\\")),gradient:f.gradient},s(\\\"marker\\\")),fill:{valType:\\\"enumerated\\\",values:[\\\"none\\\",\\\"toself\\\"],dflt:\\\"none\\\"},fillcolor:a.fillcolor,selected:a.selected,unselected:a.unselected,hoverinfo:u({},o.hoverinfo,{flags:[\\\"lon\\\",\\\"lat\\\",\\\"location\\\",\\\"text\\\",\\\"name\\\"]}),hovertemplate:n()},\\\"calc\\\",\\\"nested\\\")},84622:function(t,e,r){\\\"use strict\\\";var n=r(92770),i=r(50606).BADNUM,a=r(36922),o=r(75225),s=r(66279),l=r(71828)._;function u(t){return t&&\\\"string\\\"==typeof t}t.exports=function(t,e){var r,c=Array.isArray(e.locations),f=c?e.locations.length:e._length,h=new Array(f);r=e.geojson?function(t){return u(t)||n(t)}:u;for(var p=0;p<f;p++){var d=h[p]={};if(c){var v=e.locations[p];d.loc=r(v)?v:null}else{var g=e.lon[p],y=e.lat[p];n(g)&&n(y)?d.lonlat=[+g,+y]:d.lonlat=[i,i]}}return o(h,e),a(t,e),s(h,e),f&&(h[0].t={labels:{lat:l(t,\\\"lat:\\\")+\\\" \\\",lon:l(t,\\\"lon:\\\")+\\\" \\\"}}),h}},10659:function(t,e,r){\\\"use strict\\\";var n=r(71828),i=r(34098),a=r(49508),o=r(11058),s=r(82410),l=r(28908),u=r(19316);t.exports=function(t,e,r,c){function f(r,i){return n.coerce(t,e,u,r,i)}var h,p=f(\\\"locations\\\");if(p&&p.length){var d,v=f(\\\"geojson\\\");(\\\"string\\\"==typeof v&&\\\"\\\"!==v||n.isPlainObject(v))&&(d=\\\"geojson-id\\\"),\\\"geojson-id\\\"===f(\\\"locationmode\\\",d)&&f(\\\"featureidkey\\\"),h=p.length}else{var g=f(\\\"lon\\\")||[],y=f(\\\"lat\\\")||[];h=Math.min(g.length,y.length)}h?(e._length=h,f(\\\"text\\\"),f(\\\"hovertext\\\"),f(\\\"hovertemplate\\\"),f(\\\"mode\\\"),i.hasLines(e)&&(o(t,e,r,c,f),f(\\\"connectgaps\\\")),i.hasMarkers(e)&&a(t,e,r,c,f,{gradient:!0}),i.hasText(e)&&(f(\\\"texttemplate\\\"),s(t,e,c,f)),f(\\\"fill\\\"),\\\"none\\\"!==e.fill&&l(t,e,r,f),n.coerceSelectionMarkerOpacity(e,f)):e.visible=!1}},84084:function(t){\\\"use strict\\\";t.exports=function(t,e,r,n,i){t.lon=e.lon,t.lat=e.lat,t.location=e.loc?e.loc:null;var a=n[i];return a.fIn&&a.fIn.properties&&(t.properties=a.fIn.properties),t}},82719:function(t,e,r){\\\"use strict\\\";var n=r(89298);t.exports=function(t,e,r){var i={},a=r[e.geo]._subplot.mockAxis,o=t.lonlat;return i.lonLabel=n.tickText(a,a.c2l(o[0]),!0).text,i.latLabel=n.tickText(a,a.c2l(o[1]),!0).text,i}},14977:function(t,e,r){\\\"use strict\\\";var n=r(30211),i=r(50606).BADNUM,a=r(34603),o=r(71828).fillText,s=r(19316);t.exports=function(t,e,r){var l=t.cd,u=l[0].trace,c=t.xa,f=t.ya,h=t.subplot,p=h.projection.isLonLatOverEdges,d=h.project;if(n.getClosest(l,(function(t){var n=t.lonlat;if(n[0]===i)return 1/0;if(p(n))return 1/0;var a=d(n),o=d([e,r]),s=Math.abs(a[0]-o[0]),l=Math.abs(a[1]-o[1]),u=Math.max(3,t.mrc||0);return Math.max(Math.sqrt(s*s+l*l)-u,1-3/u)}),t),!1!==t.index){var v=l[t.index],g=v.lonlat,y=[c.c2p(g),f.c2p(g)],m=v.mrc||1;t.x0=y[0]-m,t.x1=y[0]+m,t.y0=y[1]-m,t.y1=y[1]+m,t.loc=v.loc,t.lon=g[0],t.lat=g[1];var x={};x[u.geo]={_subplot:h};var b=u._module.formatLabels(v,u,x);return t.lonLabel=b.lonLabel,t.latLabel=b.latLabel,t.color=a(u,v),t.extraText=function(t,e,r,n){if(!t.hovertemplate){var i=e.hi||t.hoverinfo,a=\\\"all\\\"===i?s.hoverinfo.flags:i.split(\\\"+\\\"),l=-1!==a.indexOf(\\\"location\\\")&&Array.isArray(t.locations),u=-1!==a.indexOf(\\\"lon\\\"),c=-1!==a.indexOf(\\\"lat\\\"),f=-1!==a.indexOf(\\\"text\\\"),h=[];return l?h.push(e.loc):u&&c?h.push(\\\"(\\\"+p(r.latLabel)+\\\", \\\"+p(r.lonLabel)+\\\")\\\"):u?h.push(n.lon+p(r.lonLabel)):c&&h.push(n.lat+p(r.latLabel)),f&&o(e,t,h),h.join(\\\"<br>\\\")}function p(t){return t+\\\"°\\\"}}(u,v,t,l[0].t.labels),t.hovertemplate=u.hovertemplate,[t]}}},17988:function(t,e,r){\\\"use strict\\\";t.exports={attributes:r(19316),supplyDefaults:r(10659),colorbar:r(4898),formatLabels:r(82719),calc:r(84622),calcGeoJSON:r(89171).calcGeoJSON,plot:r(89171).plot,style:r(33095),styleOnSelect:r(16296).styleOnSelect,hoverPoints:r(14977),eventData:r(84084),selectPoints:r(20548),moduleType:\\\"trace\\\",name:\\\"scattergeo\\\",basePlotModule:r(44622),categories:[\\\"geo\\\",\\\"symbols\\\",\\\"showLegend\\\",\\\"scatter-like\\\"],meta:{}}},89171:function(t,e,r){\\\"use strict\\\";var n=r(39898),i=r(71828),a=r(90973).getTopojsonFeatures,o=r(18214),s=r(41327),l=r(71739).findExtremes,u=r(50606).BADNUM,c=r(47761).calcMarkerSize,f=r(34098),h=r(33095);t.exports={calcGeoJSON:function(t,e){var r,n,i=t[0].trace,o=e[i.geo],f=o._subplot,h=i._length;if(Array.isArray(i.locations)){var p=i.locationmode,d=\\\"geojson-id\\\"===p?s.extractTraceFeature(t):a(i,f.topojson);for(r=0;r<h;r++){n=t[r];var v=\\\"geojson-id\\\"===p?n.fOut:s.locationToFeature(p,n.loc,d);n.lonlat=v?v.properties.ct:[u,u]}}var g,y,m={padded:!0};if(\\\"geojson\\\"===o.fitbounds&&\\\"geojson-id\\\"===i.locationmode){var x=s.computeBbox(s.getTraceGeojson(i));g=[x[0],x[2]],y=[x[1],x[3]]}else{for(g=new Array(h),y=new Array(h),r=0;r<h;r++)n=t[r],g[r]=n.lonlat[0],y[r]=n.lonlat[1];m.ppad=c(i,h)}i._extremes.lon=l(o.lonaxis._ax,g,m),i._extremes.lat=l(o.lataxis._ax,y,m)},plot:function(t,e,r){var a=e.layers.frontplot.select(\\\".scatterlayer\\\"),s=i.makeTraceGroups(a,r,\\\"trace scattergeo\\\");function l(t,e){t.lonlat[0]===u&&n.select(e).remove()}s.selectAll(\\\"*\\\").remove(),s.each((function(e){var r=n.select(this),a=e[0].trace;if(f.hasLines(a)||\\\"none\\\"!==a.fill){var s=o.calcTraceToLineCoords(e),u=\\\"none\\\"!==a.fill?o.makePolygon(s):o.makeLine(s);r.selectAll(\\\"path.js-line\\\").data([{geojson:u,trace:a}]).enter().append(\\\"path\\\").classed(\\\"js-line\\\",!0).style(\\\"stroke-miterlimit\\\",2)}f.hasMarkers(a)&&r.selectAll(\\\"path.point\\\").data(i.identity).enter().append(\\\"path\\\").classed(\\\"point\\\",!0).each((function(t){l(t,this)})),f.hasText(a)&&r.selectAll(\\\"g\\\").data(i.identity).enter().append(\\\"g\\\").append(\\\"text\\\").each((function(t){l(t,this)})),h(t,e)}))}}},20548:function(t,e,r){\\\"use strict\\\";var n=r(34098),i=r(50606).BADNUM;t.exports=function(t,e){var r,a,o,s,l,u=t.cd,c=t.xaxis,f=t.yaxis,h=[],p=u[0].trace;if(!n.hasMarkers(p)&&!n.hasText(p))return[];if(!1===e)for(l=0;l<u.length;l++)u[l].selected=0;else for(l=0;l<u.length;l++)(a=(r=u[l]).lonlat)[0]!==i&&(o=c.c2p(a),s=f.c2p(a),e.contains([o,s],null,l,t)?(h.push({pointNumber:l,lon:a[0],lat:a[1]}),r.selected=1):r.selected=0);return h}},33095:function(t,e,r){\\\"use strict\\\";var n=r(39898),i=r(91424),a=r(7901),o=r(16296),s=o.stylePoints,l=o.styleText;t.exports=function(t,e){e&&function(t,e){var r=e[0].trace,o=e[0].node3;o.style(\\\"opacity\\\",e[0].trace.opacity),s(o,r,t),l(o,r,t),o.selectAll(\\\"path.js-line\\\").style(\\\"fill\\\",\\\"none\\\").each((function(t){var e=n.select(this),r=t.trace,o=r.line||{};e.call(a.stroke,o.color).call(i.dashLine,o.dash||\\\"\\\",o.width||0),\\\"none\\\"!==r.fill&&e.call(a.fill,r.fillcolor)}))}(t,e)}},42341:function(t,e,r){\\\"use strict\\\";var n=r(9012),i=r(82196),a=r(12663).axisHoverFormat,o=r(50693),s=r(78607),l=r(1426).extendFlat,u=r(30962).overrideAll,c=r(78232).DASHES,f=i.line,h=i.marker,p=h.line,d=t.exports=u({x:i.x,x0:i.x0,dx:i.dx,y:i.y,y0:i.y0,dy:i.dy,xperiod:i.xperiod,yperiod:i.yperiod,xperiod0:i.xperiod0,yperiod0:i.yperiod0,xperiodalignment:i.xperiodalignment,yperiodalignment:i.yperiodalignment,xhoverformat:a(\\\"x\\\"),yhoverformat:a(\\\"y\\\"),text:i.text,hovertext:i.hovertext,textposition:i.textposition,textfont:i.textfont,mode:{valType:\\\"flaglist\\\",flags:[\\\"lines\\\",\\\"markers\\\",\\\"text\\\"],extras:[\\\"none\\\"]},line:{color:f.color,width:f.width,shape:{valType:\\\"enumerated\\\",values:[\\\"linear\\\",\\\"hv\\\",\\\"vh\\\",\\\"hvh\\\",\\\"vhv\\\"],dflt:\\\"linear\\\",editType:\\\"plot\\\"},dash:{valType:\\\"enumerated\\\",values:s(c),dflt:\\\"solid\\\"}},marker:l({},o(\\\"marker\\\"),{symbol:h.symbol,angle:h.angle,size:h.size,sizeref:h.sizeref,sizemin:h.sizemin,sizemode:h.sizemode,opacity:h.opacity,colorbar:h.colorbar,line:l({},o(\\\"marker.line\\\"),{width:p.width})}),connectgaps:i.connectgaps,fill:l({},i.fill,{dflt:\\\"none\\\"}),fillcolor:i.fillcolor,selected:{marker:i.selected.marker,textfont:i.selected.textfont},unselected:{marker:i.unselected.marker,textfont:i.unselected.textfont},opacity:n.opacity},\\\"calc\\\",\\\"nested\\\");d.x.editType=d.y.editType=d.x0.editType=d.y0.editType=\\\"calc+clearAxisTypes\\\",d.hovertemplate=i.hovertemplate,d.texttemplate=i.texttemplate},72156:function(t,e,r){\\\"use strict\\\";var n=r(20794);t.exports={moduleType:\\\"trace\\\",name:\\\"scattergl\\\",basePlotModule:r(93612),categories:[\\\"gl\\\",\\\"regl\\\",\\\"cartesian\\\",\\\"symbols\\\",\\\"errorBarsOK\\\",\\\"showLegend\\\",\\\"scatter-like\\\"],attributes:r(42341),supplyDefaults:r(47148),crossTraceDefaults:r(34936),colorbar:r(4898),formatLabels:r(68101),calc:r(45032),hoverPoints:n.hoverPoints,selectPoints:r(58147),meta:{}}},45032:function(t,e,r){\\\"use strict\\\";var n=r(88294),i=r(71828),a=r(41675),o=r(71739).findExtremes,s=r(42973),l=r(47761),u=l.calcMarkerSize,c=l.calcAxisExpansion,f=l.setFirstScatter,h=r(36922),p=r(19635),d=r(38967),v=r(50606).BADNUM,g=r(78232).TOO_MANY_POINTS;function y(t,e,r){var n=t._extremes[e._id],i=o(e,r._bnds,{padded:!0});n.min=n.min.concat(i.min),n.max=n.max.concat(i.max)}t.exports=function(t,e){var r,o=t._fullLayout,l=e._xA=a.getFromId(t,e.xaxis,\\\"x\\\"),m=e._yA=a.getFromId(t,e.yaxis,\\\"y\\\"),x=o._plots[e.xaxis+e.yaxis],b=e._length,_=b>=g,w=2*b,T={},k=l.makeCalcdata(e,\\\"x\\\"),A=m.makeCalcdata(e,\\\"y\\\"),M=s(e,l,\\\"x\\\",k),S=s(e,m,\\\"y\\\",A),E=M.vals,L=S.vals;e._x=E,e._y=L,e.xperiodalignment&&(e._origX=k,e._xStarts=M.starts,e._xEnds=M.ends),e.yperiodalignment&&(e._origY=A,e._yStarts=S.starts,e._yEnds=S.ends);var C=new Array(w),P=new Array(b);for(r=0;r<b;r++)C[2*r]=E[r]===v?NaN:E[r],C[2*r+1]=L[r]===v?NaN:L[r],P[r]=r;if(\\\"log\\\"===l.type)for(r=0;r<w;r+=2)C[r]=l.c2l(C[r]);if(\\\"log\\\"===m.type)for(r=1;r<w;r+=2)C[r]=m.c2l(C[r]);_&&\\\"log\\\"!==l.type&&\\\"log\\\"!==m.type?T.tree=n(C):T.ids=P,h(t,e);var O,I=function(t,e,r,n,a,o){var s=p.style(t,r);if(s.marker&&(s.marker.positions=n),s.line&&n.length>1&&i.extendFlat(s.line,p.linePositions(t,r,n)),s.errorX||s.errorY){var l=p.errorBarPositions(t,r,n,a,o);s.errorX&&i.extendFlat(s.errorX,l.x),s.errorY&&i.extendFlat(s.errorY,l.y)}return s.text&&(i.extendFlat(s.text,{positions:n},p.textPosition(t,r,s.text,s.marker)),i.extendFlat(s.textSel,{positions:n},p.textPosition(t,r,s.text,s.markerSel)),i.extendFlat(s.textUnsel,{positions:n},p.textPosition(t,r,s.text,s.markerUnsel))),s}(t,0,e,C,E,L),D=d(t,x);return f(o,e),_?I.marker&&(O=I.marker.sizeAvg||Math.max(I.marker.size,3)):O=u(e,b),c(t,e,l,m,E,L,O),I.errorX&&y(e,l,I.errorX),I.errorY&&y(e,m,I.errorY),I.fill&&!D.fill2d&&(D.fill2d=!0),I.marker&&!D.scatter2d&&(D.scatter2d=!0),I.line&&!D.line2d&&(D.line2d=!0),!I.errorX&&!I.errorY||D.error2d||(D.error2d=!0),I.text&&!D.glText&&(D.glText=!0),I.marker&&(I.marker.snap=b),D.lineOptions.push(I.line),D.errorXOptions.push(I.errorX),D.errorYOptions.push(I.errorY),D.fillOptions.push(I.fill),D.markerOptions.push(I.marker),D.markerSelectedOptions.push(I.markerSel),D.markerUnselectedOptions.push(I.markerUnsel),D.textOptions.push(I.text),D.textSelectedOptions.push(I.textSel),D.textUnselectedOptions.push(I.textUnsel),D.selectBatch.push([]),D.unselectBatch.push([]),T._scene=D,T.index=D.count,T.x=E,T.y=L,T.positions=C,D.count++,[{x:!1,y:!1,t:T,trace:e}]}},78232:function(t){\\\"use strict\\\";t.exports={TOO_MANY_POINTS:1e5,SYMBOL_SDF_SIZE:200,SYMBOL_SIZE:20,SYMBOL_STROKE:1,DOT_RE:/-dot/,OPEN_RE:/-open/,DASHES:{solid:[1],dot:[1,1],dash:[4,1],longdash:[8,1],dashdot:[4,1,1,1],longdashdot:[8,1,1,1]}}},19635:function(t,e,r){\\\"use strict\\\";var n=r(92770),i=r(82019),a=r(25075),o=r(73972),s=r(71828),l=r(91424),u=r(41675),c=r(81697).formatColor,f=r(34098),h=r(39984),p=r(68645),d=r(78232),v=r(37822).DESELECTDIM,g={start:1,left:1,end:-1,right:-1,middle:0,center:0,bottom:1,top:-1},y=r(23469).appendArrayPointValue;function m(t,e){var r,i=t._fullLayout,a=e._length,o=e.textfont,l=e.textposition,u=Array.isArray(l)?l:[l],c=o.color,f=o.size,h=o.family,p={},d=t._context.plotGlPixelRatio,v=e.texttemplate;if(v){p.text=[];var g=i._d3locale,m=Array.isArray(v),x=m?Math.min(v.length,a):a,b=m?function(t){return v[t]}:function(){return v};for(r=0;r<x;r++){var _={i:r},w=e._module.formatLabels(_,e,i),T={};y(T,e,r);var k=e._meta||{};p.text.push(s.texttemplateString(b(r),w,g,T,_,k))}}else Array.isArray(e.text)&&e.text.length<a?p.text=e.text.slice():p.text=e.text;if(Array.isArray(p.text))for(r=p.text.length;r<a;r++)p.text[r]=\\\"\\\";for(p.opacity=e.opacity,p.font={},p.align=[],p.baseline=[],r=0;r<u.length;r++){var A=u[r].split(/\\\\s+/);switch(A[1]){case\\\"left\\\":p.align.push(\\\"right\\\");break;case\\\"right\\\":p.align.push(\\\"left\\\");break;default:p.align.push(A[1])}switch(A[0]){case\\\"top\\\":p.baseline.push(\\\"bottom\\\");break;case\\\"bottom\\\":p.baseline.push(\\\"top\\\");break;default:p.baseline.push(A[0])}}if(Array.isArray(c))for(p.color=new Array(a),r=0;r<a;r++)p.color[r]=c[r];else p.color=c;if(s.isArrayOrTypedArray(f)||Array.isArray(h))for(p.font=new Array(a),r=0;r<a;r++){var M=p.font[r]={};M.size=(s.isTypedArray(f)?f[r]:Array.isArray(f)?n(f[r])?f[r]:0:f)*d,M.family=Array.isArray(h)?h[r]:h}else p.font={size:f*d,family:h};return p}function x(t,e){var r,n,i=e._length,o=e.marker,l={},u=s.isArrayOrTypedArray(o.symbol),f=s.isArrayOrTypedArray(o.angle),d=s.isArrayOrTypedArray(o.color),v=s.isArrayOrTypedArray(o.line.color),g=s.isArrayOrTypedArray(o.opacity),y=s.isArrayOrTypedArray(o.size),m=s.isArrayOrTypedArray(o.line.width);if(u||(n=p.isOpenSymbol(o.symbol)),u||d||v||g||f){l.symbols=new Array(i),l.angles=new Array(i),l.colors=new Array(i),l.borderColors=new Array(i);var x=o.symbol,b=o.angle,_=c(o,o.opacity,i),w=c(o.line,o.opacity,i);if(!Array.isArray(w[0])){var T=w;for(w=Array(i),r=0;r<i;r++)w[r]=T}if(!Array.isArray(_[0])){var k=_;for(_=Array(i),r=0;r<i;r++)_[r]=k}if(!Array.isArray(x)){var A=x;for(x=Array(i),r=0;r<i;r++)x[r]=A}if(!Array.isArray(b)){var M=b;for(b=Array(i),r=0;r<i;r++)b[r]=M}for(l.symbols=x,l.angles=b,l.colors=_,l.borderColors=w,r=0;r<i;r++)u&&(n=p.isOpenSymbol(o.symbol[r])),n&&(w[r]=_[r].slice(),_[r]=_[r].slice(),_[r][3]=0);for(l.opacity=e.opacity,l.markers=new Array(i),r=0;r<i;r++)l.markers[r]=E({mx:l.symbols[r],ma:l.angles[r]},e)}else n?(l.color=a(o.color,\\\"uint8\\\"),l.color[3]=0,l.borderColor=a(o.color,\\\"uint8\\\")):(l.color=a(o.color,\\\"uint8\\\"),l.borderColor=a(o.line.color,\\\"uint8\\\")),l.opacity=e.opacity*o.opacity,l.marker=E({mx:o.symbol,ma:o.angle},e);var S,L=h(e,1);if(y||m){var C,P=l.sizes=new Array(i),O=l.borderSizes=new Array(i),I=0;if(y){for(r=0;r<i;r++)P[r]=L(o.size[r]),I+=P[r];C=I/i}else for(S=L(o.size),r=0;r<i;r++)P[r]=S;if(m)for(r=0;r<i;r++)O[r]=o.line.width[r];else for(S=o.line.width,r=0;r<i;r++)O[r]=S;l.sizeAvg=C}else l.size=L(o&&o.size||10),l.borderSizes=L(o.line.width);return l}function b(t,e,r){var n=e.marker,i={};return r?(r.marker&&r.marker.symbol?i=x(0,s.extendFlat({},n,r.marker)):r.marker&&(r.marker.size&&(i.size=r.marker.size),r.marker.color&&(i.colors=r.marker.color),void 0!==r.marker.opacity&&(i.opacity=r.marker.opacity)),i):i}function _(t,e,r){var n={};if(!r)return n;if(r.textfont){var i={opacity:1,text:e.text,texttemplate:e.texttemplate,textposition:e.textposition,textfont:s.extendFlat({},e.textfont)};r.textfont&&s.extendFlat(i.textfont,r.textfont),n=m(t,i)}return n}function w(t,e,r){var n={capSize:2*e.width*r,lineWidth:e.thickness*r,color:e.color};return e.copy_ystyle&&(n=t.error_y),n}var T=d.SYMBOL_SDF_SIZE,k=d.SYMBOL_SIZE,A=d.SYMBOL_STROKE,M={},S=l.symbolFuncs[0](.05*k);function E(t,e){var r,n,a=t.mx;if(\\\"circle\\\"===a)return null;var o=l.symbolNumber(a),s=l.symbolFuncs[o%100],u=!!l.symbolNoDot[o%100],c=!!l.symbolNoFill[o%100],f=p.isDotSymbol(a);if(t.ma&&(a+=\\\"_\\\"+t.ma),M[a])return M[a];var h=l.getMarkerAngle(t,e);return r=f&&!u?s(1.1*k,h)+S:s(k,h),n=i(r,{w:T,h:T,viewBox:[-k,-k,k,k],stroke:c?A:-A}),M[a]=n,n||null}t.exports={style:function(t,e){var r,n={marker:void 0,markerSel:void 0,markerUnsel:void 0,line:void 0,fill:void 0,errorX:void 0,errorY:void 0,text:void 0,textSel:void 0,textUnsel:void 0},i=t._context.plotGlPixelRatio;if(!0!==e.visible)return n;if(f.hasText(e)&&(n.text=m(t,e),n.textSel=_(t,e,e.selected),n.textUnsel=_(t,e,e.unselected)),f.hasMarkers(e)&&(n.marker=x(0,e),n.markerSel=b(0,e,e.selected),n.markerUnsel=b(0,e,e.unselected),!e.unselected&&s.isArrayOrTypedArray(e.marker.opacity))){var a=e.marker.opacity;for(n.markerUnsel.opacity=new Array(a.length),r=0;r<a.length;r++)n.markerUnsel.opacity[r]=v*a[r]}if(f.hasLines(e)){n.line={overlay:!0,thickness:e.line.width*i,color:e.line.color,opacity:e.opacity};var o=(d.DASHES[e.line.dash]||[1]).slice();for(r=0;r<o.length;++r)o[r]*=e.line.width*i;n.line.dashes=o}return e.error_x&&e.error_x.visible&&(n.errorX=w(e,e.error_x,i)),e.error_y&&e.error_y.visible&&(n.errorY=w(e,e.error_y,i)),e.fill&&\\\"none\\\"!==e.fill&&(n.fill={closed:!0,fill:e.fillcolor,thickness:0}),n},markerStyle:x,markerSelection:b,linePositions:function(t,e,r){var n,i,a=r.length,o=a/2;if(f.hasLines(e)&&o)if(\\\"hv\\\"===e.line.shape){for(n=[],i=0;i<o-1;i++)isNaN(r[2*i])||isNaN(r[2*i+1])?n.push(NaN,NaN,NaN,NaN):(n.push(r[2*i],r[2*i+1]),isNaN(r[2*i+2])||isNaN(r[2*i+3])?n.push(NaN,NaN):n.push(r[2*i+2],r[2*i+1]));n.push(r[a-2],r[a-1])}else if(\\\"hvh\\\"===e.line.shape){for(n=[],i=0;i<o-1;i++)if(isNaN(r[2*i])||isNaN(r[2*i+1])||isNaN(r[2*i+2])||isNaN(r[2*i+3]))isNaN(r[2*i])||isNaN(r[2*i+1])?n.push(NaN,NaN):n.push(r[2*i],r[2*i+1]),n.push(NaN,NaN);else{var s=(r[2*i]+r[2*i+2])/2;n.push(r[2*i],r[2*i+1],s,r[2*i+1],s,r[2*i+3])}n.push(r[a-2],r[a-1])}else if(\\\"vhv\\\"===e.line.shape){for(n=[],i=0;i<o-1;i++)if(isNaN(r[2*i])||isNaN(r[2*i+1])||isNaN(r[2*i+2])||isNaN(r[2*i+3]))isNaN(r[2*i])||isNaN(r[2*i+1])?n.push(NaN,NaN):n.push(r[2*i],r[2*i+1]),n.push(NaN,NaN);else{var l=(r[2*i+1]+r[2*i+3])/2;n.push(r[2*i],r[2*i+1],r[2*i],l,r[2*i+2],l)}n.push(r[a-2],r[a-1])}else if(\\\"vh\\\"===e.line.shape){for(n=[],i=0;i<o-1;i++)isNaN(r[2*i])||isNaN(r[2*i+1])?n.push(NaN,NaN,NaN,NaN):(n.push(r[2*i],r[2*i+1]),isNaN(r[2*i+2])||isNaN(r[2*i+3])?n.push(NaN,NaN):n.push(r[2*i],r[2*i+3]));n.push(r[a-2],r[a-1])}else n=r;var u=!1;for(i=0;i<n.length;i++)if(isNaN(n[i])){u=!0;break}var c=u||n.length>d.TOO_MANY_POINTS||f.hasMarkers(e)?\\\"rect\\\":\\\"round\\\";if(u&&e.connectgaps){var h=n[0],p=n[1];for(i=0;i<n.length;i+=2)isNaN(n[i])||isNaN(n[i+1])?(n[i]=h,n[i+1]=p):(h=n[i],p=n[i+1])}return{join:c,positions:n}},errorBarPositions:function(t,e,r,i,a){var s=o.getComponentMethod(\\\"errorbars\\\",\\\"makeComputeError\\\"),l=u.getFromId(t,e.xaxis,\\\"x\\\"),c=u.getFromId(t,e.yaxis,\\\"y\\\"),f=r.length/2,h={};function p(t,i){var a=i._id.charAt(0),o=e[\\\"error_\\\"+a];if(o&&o.visible&&(\\\"linear\\\"===i.type||\\\"log\\\"===i.type)){for(var l=s(o),u={x:0,y:1}[a],c={x:[0,1,2,3],y:[2,3,0,1]}[a],p=new Float64Array(4*f),d=1/0,v=-1/0,g=0,y=0;g<f;g++,y+=4){var m=t[g];if(n(m)){var x=r[2*g+u],b=l(m,g),_=b[0],w=b[1];if(n(_)&&n(w)){var T=m-_,k=m+w;p[y+c[0]]=x-i.c2l(T),p[y+c[1]]=i.c2l(k)-x,p[y+c[2]]=0,p[y+c[3]]=0,d=Math.min(d,m-_),v=Math.max(v,m+w)}}}h[a]={positions:r,errors:p,_bnds:[d,v]}}}return p(i,l),p(a,c),h},textPosition:function(t,e,r,n){var i,a=e._length,o={};if(f.hasMarkers(e)){var s=r.font,l=r.align,u=r.baseline;for(o.offset=new Array(a),i=0;i<a;i++){var c=n.sizes?n.sizes[i]:n.size,h=Array.isArray(s)?s[i].size:s.size,p=Array.isArray(l)?l.length>1?l[i]:l[0]:l,d=Array.isArray(u)?u.length>1?u[i]:u[0]:u,v=g[p],y=g[d],m=c?c/.8+1:0,x=-y*m-.5*y;o.offset[i]=[v*m/h,x/h]}}return o}}},47148:function(t,e,r){\\\"use strict\\\";var n=r(71828),i=r(73972),a=r(68645),o=r(42341),s=r(47581),l=r(34098),u=r(67513),c=r(73927),f=r(49508),h=r(11058),p=r(28908),d=r(82410);t.exports=function(t,e,r,v){function g(r,i){return n.coerce(t,e,o,r,i)}var y=!!t.marker&&a.isOpenSymbol(t.marker.symbol),m=l.isBubble(t),x=u(t,e,v,g);if(x){c(t,e,v,g),g(\\\"xhoverformat\\\"),g(\\\"yhoverformat\\\");var b=x<s.PTS_LINESONLY?\\\"lines+markers\\\":\\\"lines\\\";g(\\\"text\\\"),g(\\\"hovertext\\\"),g(\\\"hovertemplate\\\"),g(\\\"mode\\\",b),l.hasLines(e)&&(g(\\\"connectgaps\\\"),h(t,e,r,v,g),g(\\\"line.shape\\\")),l.hasMarkers(e)&&(f(t,e,r,v,g,{noAngleRef:!0,noStandOff:!0}),g(\\\"marker.line.width\\\",y||m?1:0)),l.hasText(e)&&(g(\\\"texttemplate\\\"),d(t,e,v,g));var _=(e.line||{}).color,w=(e.marker||{}).color;g(\\\"fill\\\"),\\\"none\\\"!==e.fill&&p(t,e,r,g);var T=i.getComponentMethod(\\\"errorbars\\\",\\\"supplyDefaults\\\");T(t,e,_||w||r,{axis:\\\"y\\\"}),T(t,e,_||w||r,{axis:\\\"x\\\",inherit:\\\"y\\\"}),n.coerceSelectionMarkerOpacity(e,g)}else e.visible=!1}},5345:function(t,e,r){\\\"use strict\\\";var n=r(71828),i=r(7901),a=r(37822).DESELECTDIM;t.exports={styleTextSelection:function(t){var e,r,o=t[0],s=o.trace,l=o.t,u=l._scene,c=l.index,f=u.selectBatch[c],h=u.unselectBatch[c],p=u.textOptions[c],d=u.textSelectedOptions[c]||{},v=u.textUnselectedOptions[c]||{},g=n.extendFlat({},p);if(f.length||h.length){var y=d.color,m=v.color,x=p.color,b=Array.isArray(x);for(g.color=new Array(s._length),e=0;e<f.length;e++)r=f[e],g.color[r]=y||(b?x[r]:x);for(e=0;e<h.length;e++){r=h[e];var _=b?x[r]:x;g.color[r]=m||(y?_:i.addOpacity(_,a))}}u.glText[c].update(g)}}},68101:function(t,e,r){\\\"use strict\\\";var n=r(8225);t.exports=function(t,e,r){var i=t.i;return\\\"x\\\"in t||(t.x=e._x[i]),\\\"y\\\"in t||(t.y=e._y[i]),n(t,e,r)}},68645:function(t,e,r){\\\"use strict\\\";var n=r(78232);e.isOpenSymbol=function(t){return\\\"string\\\"==typeof t?n.OPEN_RE.test(t):t%200>100},e.isDotSymbol=function(t){return\\\"string\\\"==typeof t?n.DOT_RE.test(t):t>200}},20794:function(t,e,r){\\\"use strict\\\";var n=r(73972),i=r(71828),a=r(34603);function o(t,e,r,o){var s=t.xa,l=t.ya,u=t.distance,c=t.dxy,f=t.index,h={pointNumber:f,x:e[f],y:r[f]};h.tx=Array.isArray(o.text)?o.text[f]:o.text,h.htx=Array.isArray(o.hovertext)?o.hovertext[f]:o.hovertext,h.data=Array.isArray(o.customdata)?o.customdata[f]:o.customdata,h.tp=Array.isArray(o.textposition)?o.textposition[f]:o.textposition;var p=o.textfont;p&&(h.ts=i.isArrayOrTypedArray(p.size)?p.size[f]:p.size,h.tc=Array.isArray(p.color)?p.color[f]:p.color,h.tf=Array.isArray(p.family)?p.family[f]:p.family);var d=o.marker;d&&(h.ms=i.isArrayOrTypedArray(d.size)?d.size[f]:d.size,h.mo=i.isArrayOrTypedArray(d.opacity)?d.opacity[f]:d.opacity,h.mx=i.isArrayOrTypedArray(d.symbol)?d.symbol[f]:d.symbol,h.ma=i.isArrayOrTypedArray(d.angle)?d.angle[f]:d.angle,h.mc=i.isArrayOrTypedArray(d.color)?d.color[f]:d.color);var v=d&&d.line;v&&(h.mlc=Array.isArray(v.color)?v.color[f]:v.color,h.mlw=i.isArrayOrTypedArray(v.width)?v.width[f]:v.width);var g=d&&d.gradient;g&&\\\"none\\\"!==g.type&&(h.mgt=Array.isArray(g.type)?g.type[f]:g.type,h.mgc=Array.isArray(g.color)?g.color[f]:g.color);var y=s.c2p(h.x,!0),m=l.c2p(h.y,!0),x=h.mrc||1,b=o.hoverlabel;b&&(h.hbg=Array.isArray(b.bgcolor)?b.bgcolor[f]:b.bgcolor,h.hbc=Array.isArray(b.bordercolor)?b.bordercolor[f]:b.bordercolor,h.hts=i.isArrayOrTypedArray(b.font.size)?b.font.size[f]:b.font.size,h.htc=Array.isArray(b.font.color)?b.font.color[f]:b.font.color,h.htf=Array.isArray(b.font.family)?b.font.family[f]:b.font.family,h.hnl=i.isArrayOrTypedArray(b.namelength)?b.namelength[f]:b.namelength);var _=o.hoverinfo;_&&(h.hi=Array.isArray(_)?_[f]:_);var w=o.hovertemplate;w&&(h.ht=Array.isArray(w)?w[f]:w);var T={};T[t.index]=h;var k=o._origX,A=o._origY,M=i.extendFlat({},t,{color:a(o,h),x0:y-x,x1:y+x,xLabelVal:k?k[f]:h.x,y0:m-x,y1:m+x,yLabelVal:A?A[f]:h.y,cd:T,distance:u,spikeDistance:c,hovertemplate:h.ht});return h.htx?M.text=h.htx:h.tx?M.text=h.tx:o.text&&(M.text=o.text),i.fillText(h,o,M),n.getComponentMethod(\\\"errorbars\\\",\\\"hoverInfo\\\")(h,o,M),M}t.exports={hoverPoints:function(t,e,r,n){var i,a,s,l,u,c,f,h,p,d,v=t.cd,g=v[0].t,y=v[0].trace,m=t.xa,x=t.ya,b=g.x,_=g.y,w=m.c2p(e),T=x.c2p(r),k=t.distance;if(g.tree){var A=m.p2c(w-k),M=m.p2c(w+k),S=x.p2c(T-k),E=x.p2c(T+k);i=\\\"x\\\"===n?g.tree.range(Math.min(A,M),Math.min(x._rl[0],x._rl[1]),Math.max(A,M),Math.max(x._rl[0],x._rl[1])):g.tree.range(Math.min(A,M),Math.min(S,E),Math.max(A,M),Math.max(S,E))}else i=g.ids;var L=k;if(\\\"x\\\"===n){var C=!!y.xperiodalignment,P=!!y.yperiodalignment;for(c=0;c<i.length;c++){if(l=b[a=i[c]],f=Math.abs(m.c2p(l)-w),C){var O=m.c2p(y._xStarts[a]),I=m.c2p(y._xEnds[a]);f=w>=Math.min(O,I)&&w<=Math.max(O,I)?0:1/0}if(f<L){if(L=f,u=_[a],h=x.c2p(u)-T,P){var D=x.c2p(y._yStarts[a]),z=x.c2p(y._yEnds[a]);h=T>=Math.min(D,z)&&T<=Math.max(D,z)?0:1/0}d=Math.sqrt(f*f+h*h),s=i[c]}}}else for(c=i.length-1;c>-1;c--)l=b[a=i[c]],u=_[a],f=m.c2p(l)-w,h=x.c2p(u)-T,(p=Math.sqrt(f*f+h*h))<L&&(L=d=p,s=a);return t.index=s,t.distance=L,t.dxy=d,void 0===s?[t]:[o(t,b,_,y)]},calcHover:o}},68868:function(t,e,r){\\\"use strict\\\";var n=r(72156);n.plot=r(26787),t.exports=n},26787:function(t,e,r){\\\"use strict\\\";var n=r(11870),i=r(46075),a=r(3593),o=r(42505),s=r(71828),l=r(64505).selectMode,u=r(79749),c=r(34098),f=r(68687),h=r(5345).styleTextSelection,p={};function d(t,e,r,n){var i=t._size,a=t.width*n,o=t.height*n,s=i.l*n,l=i.b*n,u=i.r*n,c=i.t*n,f=i.w*n,h=i.h*n;return[s+e.domain[0]*f,l+r.domain[0]*h,a-u-(1-e.domain[1])*f,o-c-(1-r.domain[1])*h]}(t.exports=function(t,e,r){if(r.length){var v,g,y=t._fullLayout,m=e._scene,x=e.xaxis,b=e.yaxis;if(m)if(u(t,[\\\"ANGLE_instanced_arrays\\\",\\\"OES_element_index_uint\\\"],p)){var _=m.count,w=y._glcanvas.data()[0].regl;if(f(t,e,r),m.dirty){if(!0===m.error2d&&(m.error2d=a(w)),!0===m.line2d&&(m.line2d=i(w)),!0===m.scatter2d&&(m.scatter2d=n(w)),!0===m.fill2d&&(m.fill2d=i(w)),!0===m.glText)for(m.glText=new Array(_),v=0;v<_;v++)m.glText[v]=new o(w);if(m.glText){if(_>m.glText.length){var T=_-m.glText.length;for(v=0;v<T;v++)m.glText.push(new o(w))}else if(_<m.glText.length){var k=m.glText.length-_;m.glText.splice(_,k).forEach((function(t){t.destroy()}))}for(v=0;v<_;v++)m.glText[v].update(m.textOptions[v])}if(m.line2d&&(m.line2d.update(m.lineOptions),m.lineOptions=m.lineOptions.map((function(t){if(t&&t.positions){for(var e=t.positions,r=0;r<e.length&&(isNaN(e[r])||isNaN(e[r+1]));)r+=2;for(var n=e.length-2;n>r&&(isNaN(e[n])||isNaN(e[n+1]));)n-=2;t.positions=e.slice(r,n+2)}return t})),m.line2d.update(m.lineOptions)),m.error2d){var A=(m.errorXOptions||[]).concat(m.errorYOptions||[]);m.error2d.update(A)}m.scatter2d&&m.scatter2d.update(m.markerOptions),m.fillOrder=s.repeat(null,_),m.fill2d&&(m.fillOptions=m.fillOptions.map((function(t,e){var n=r[e];if(t&&n&&n[0]&&n[0].trace){var i,a,o=n[0],s=o.trace,l=o.t,u=m.lineOptions[e],c=[];s._ownfill&&c.push(e),s._nexttrace&&c.push(e+1),c.length&&(m.fillOrder[e]=c);var f,h,p=[],d=u&&u.positions||l.positions;if(\\\"tozeroy\\\"===s.fill){for(f=0;f<d.length&&isNaN(d[f+1]);)f+=2;for(h=d.length-2;h>f&&isNaN(d[h+1]);)h-=2;0!==d[f+1]&&(p=[d[f],0]),p=p.concat(d.slice(f,h+2)),0!==d[h+1]&&(p=p.concat([d[h],0]))}else if(\\\"tozerox\\\"===s.fill){for(f=0;f<d.length&&isNaN(d[f]);)f+=2;for(h=d.length-2;h>f&&isNaN(d[h]);)h-=2;0!==d[f]&&(p=[0,d[f+1]]),p=p.concat(d.slice(f,h+2)),0!==d[h]&&(p=p.concat([0,d[h+1]]))}else if(\\\"toself\\\"===s.fill||\\\"tonext\\\"===s.fill){for(p=[],i=0,t.splitNull=!0,a=0;a<d.length;a+=2)(isNaN(d[a])||isNaN(d[a+1]))&&((p=p.concat(d.slice(i,a))).push(d[i],d[i+1]),p.push(null,null),i=a+2);p=p.concat(d.slice(i)),i&&p.push(d[i],d[i+1])}else{var v=s._nexttrace;if(v){var g=m.lineOptions[e+1];if(g){var y=g.positions;if(\\\"tonexty\\\"===s.fill){for(p=d.slice(),e=Math.floor(y.length/2);e--;){var x=y[2*e],b=y[2*e+1];isNaN(x)||isNaN(b)||p.push(x,b)}t.fill=v.fillcolor}}}}if(s._prevtrace&&\\\"tonext\\\"===s._prevtrace.fill){var _=m.lineOptions[e-1].positions,w=p.length/2,T=[i=w];for(a=0;a<_.length;a+=2)(isNaN(_[a])||isNaN(_[a+1]))&&(T.push(a/2+w+1),i=a+2);p=p.concat(_),t.hole=T}return t.fillmode=s.fill,t.opacity=s.opacity,t.positions=p,t}})),m.fill2d.update(m.fillOptions))}var M=y.dragmode,S=l(M),E=y.clickmode.indexOf(\\\"select\\\")>-1;for(v=0;v<_;v++){var L=r[v][0],C=L.trace,P=L.t,O=P.index,I=C._length,D=P.x,z=P.y;if(C.selectedpoints||S||E){if(S||(S=!0),C.selectedpoints){var R=m.selectBatch[O]=s.selIndices2selPoints(C),F={};for(g=0;g<R.length;g++)F[R[g]]=1;var B=[];for(g=0;g<I;g++)F[g]||B.push(g);m.unselectBatch[O]=B}var N=P.xpx=new Array(I),j=P.ypx=new Array(I);for(g=0;g<I;g++)N[g]=x.c2p(D[g]),j[g]=b.c2p(z[g])}else P.xpx=P.ypx=null}if(S){if(m.select2d||(m.select2d=n(y._glcanvas.data()[1].regl)),m.scatter2d){var U=new Array(_);for(v=0;v<_;v++)U[v]=m.selectBatch[v].length||m.unselectBatch[v].length?m.markerUnselectedOptions[v]:{};m.scatter2d.update(U)}m.select2d&&(m.select2d.update(m.markerOptions),m.select2d.update(m.markerSelectedOptions)),m.glText&&r.forEach((function(t){var e=((t||[])[0]||{}).trace||{};c.hasText(e)&&h(t)}))}else m.scatter2d&&m.scatter2d.update(m.markerOptions);var V={viewport:d(y,x,b,t._context.plotGlPixelRatio),range:[(x._rl||x.range)[0],(b._rl||b.range)[0],(x._rl||x.range)[1],(b._rl||b.range)[1]]},H=s.repeat(V,m.count);m.fill2d&&m.fill2d.update(H),m.line2d&&m.line2d.update(H),m.error2d&&m.error2d.update(H.concat(H)),m.scatter2d&&m.scatter2d.update(H),m.select2d&&m.select2d.update(H),m.glText&&m.glText.forEach((function(t){t.update(V)}))}else m.init()}}).reglPrecompiled=p},38967:function(t,e,r){\\\"use strict\\\";var n=r(71828);t.exports=function(t,e){var r=e._scene,i={count:0,dirty:!0,lineOptions:[],fillOptions:[],markerOptions:[],markerSelectedOptions:[],markerUnselectedOptions:[],errorXOptions:[],errorYOptions:[],textOptions:[],textSelectedOptions:[],textUnselectedOptions:[],selectBatch:[],unselectBatch:[]},a={fill2d:!1,scatter2d:!1,error2d:!1,line2d:!1,glText:!1,select2d:!1};return e._scene||((r=e._scene={}).init=function(){n.extendFlat(r,a,i)},r.init(),r.update=function(t){var e=n.repeat(t,r.count);if(r.fill2d&&r.fill2d.update(e),r.scatter2d&&r.scatter2d.update(e),r.line2d&&r.line2d.update(e),r.error2d&&r.error2d.update(e.concat(e)),r.select2d&&r.select2d.update(e),r.glText)for(var i=0;i<r.count;i++)r.glText[i].update(t)},r.draw=function(){for(var t=r.count,e=r.fill2d,i=r.error2d,a=r.line2d,o=r.scatter2d,s=r.glText,l=r.select2d,u=r.selectBatch,c=r.unselectBatch,f=0;f<t;f++){if(e&&r.fillOrder[f]&&e.draw(r.fillOrder[f]),a&&r.lineOptions[f]&&a.draw(f),i&&(r.errorXOptions[f]&&i.draw(f),r.errorYOptions[f]&&i.draw(f+t)),o&&r.markerOptions[f])if(c[f].length){var h=n.repeat([],r.count);h[f]=c[f],o.draw(h)}else u[f].length||o.draw(f);s[f]&&r.textOptions[f]&&s[f].render()}l&&l.draw(u),r.dirty=!1},r.destroy=function(){r.fill2d&&r.fill2d.destroy&&r.fill2d.destroy(),r.scatter2d&&r.scatter2d.destroy&&r.scatter2d.destroy(),r.error2d&&r.error2d.destroy&&r.error2d.destroy(),r.line2d&&r.line2d.destroy&&r.line2d.destroy(),r.select2d&&r.select2d.destroy&&r.select2d.destroy(),r.glText&&r.glText.forEach((function(t){t.destroy&&t.destroy()})),r.lineOptions=null,r.fillOptions=null,r.markerOptions=null,r.markerSelectedOptions=null,r.markerUnselectedOptions=null,r.errorXOptions=null,r.errorYOptions=null,r.textOptions=null,r.textSelectedOptions=null,r.textUnselectedOptions=null,r.selectBatch=null,r.unselectBatch=null,e._scene=null}),r.dirty||n.extendFlat(r,i),r}},58147:function(t,e,r){\\\"use strict\\\";var n=r(34098),i=r(5345).styleTextSelection;t.exports=function(t,e){var r=t.cd,a=t.xaxis,o=t.yaxis,s=[],l=r[0].trace,u=r[0].t,c=l._length,f=u.x,h=u.y,p=u._scene,d=u.index;if(!p)return s;var v=n.hasText(l),g=n.hasMarkers(l),y=!g&&!v;if(!0!==l.visible||y)return s;var m=[],x=[];if(!1!==e&&!e.degenerate)for(var b=0;b<c;b++)e.contains([u.xpx[b],u.ypx[b]],!1,b,t)?(m.push(b),s.push({pointNumber:b,x:a.c2d(f[b]),y:o.c2d(h[b])})):x.push(b);if(g){var _=p.scatter2d;if(m.length||x.length){if(!p.selectBatch[d].length&&!p.unselectBatch[d].length){var w=new Array(p.count);w[d]=p.markerUnselectedOptions[d],_.update.apply(_,w)}}else{var T=new Array(p.count);T[d]=p.markerOptions[d],_.update.apply(_,T)}}return p.selectBatch[d]=m,p.unselectBatch[d]=x,v&&i(r),s}},99181:function(t,e,r){\\\"use strict\\\";var n=r(5386).fF,i=r(5386).si,a=r(19316),o=r(82196),s=r(23585),l=r(9012),u=r(50693),c=r(1426).extendFlat,f=r(30962).overrideAll,h=r(23585),p=a.line,d=a.marker;t.exports=f({lon:a.lon,lat:a.lat,cluster:{enabled:{valType:\\\"boolean\\\"},maxzoom:c({},h.layers.maxzoom,{}),step:{valType:\\\"number\\\",arrayOk:!0,dflt:-1,min:-1},size:{valType:\\\"number\\\",arrayOk:!0,dflt:20,min:0},color:{valType:\\\"color\\\",arrayOk:!0},opacity:c({},d.opacity,{dflt:1})},mode:c({},o.mode,{dflt:\\\"markers\\\"}),text:c({},o.text,{}),texttemplate:i({editType:\\\"plot\\\"},{keys:[\\\"lat\\\",\\\"lon\\\",\\\"text\\\"]}),hovertext:c({},o.hovertext,{}),line:{color:p.color,width:p.width},connectgaps:o.connectgaps,marker:c({symbol:{valType:\\\"string\\\",dflt:\\\"circle\\\",arrayOk:!0},angle:{valType:\\\"number\\\",dflt:\\\"auto\\\",arrayOk:!0},allowoverlap:{valType:\\\"boolean\\\",dflt:!1},opacity:d.opacity,size:d.size,sizeref:d.sizeref,sizemin:d.sizemin,sizemode:d.sizemode},u(\\\"marker\\\")),fill:a.fill,fillcolor:o.fillcolor,textfont:s.layers.symbol.textfont,textposition:s.layers.symbol.textposition,below:{valType:\\\"string\\\"},selected:{marker:o.selected.marker},unselected:{marker:o.unselected.marker},hoverinfo:c({},l.hoverinfo,{flags:[\\\"lon\\\",\\\"lat\\\",\\\"text\\\",\\\"name\\\"]}),hovertemplate:n()},\\\"calc\\\",\\\"nested\\\")},15790:function(t,e,r){\\\"use strict\\\";var n=r(92770),i=r(71828),a=r(50606).BADNUM,o=r(18214),s=r(21081),l=r(91424),u=r(39984),c=r(34098),f=r(13056),h=r(23469).appendArrayPointValue,p=r(63893).NEWLINES,d=r(63893).BR_TAG_ALL;function v(t){return{type:t,geojson:o.makeBlank(),layout:{visibility:\\\"none\\\"},filter:null,paint:{}}}function g(t,e){return i.isArrayOrTypedArray(t)?e?function(e){return n(t[e])?+t[e]:0}:function(e){return t[e]}:t?function(){return t}:y}function y(){return\\\"\\\"}function m(t){return t[0]===a}function x(t,e){var r;if(i.isArrayOrTypedArray(t)&&i.isArrayOrTypedArray(e)){r=[\\\"step\\\",[\\\"get\\\",\\\"point_count\\\"],t[0]];for(var n=1;n<t.length;n++)r.push(e[n-1],t[n])}else r=t;return r}t.exports=function(t,e){var r,a=e[0].trace,b=!0===a.visible&&0!==a._length,_=\\\"none\\\"!==a.fill,w=c.hasLines(a),T=c.hasMarkers(a),k=c.hasText(a),A=T&&\\\"circle\\\"===a.marker.symbol,M=T&&\\\"circle\\\"!==a.marker.symbol,S=a.cluster&&a.cluster.enabled,E=v(\\\"fill\\\"),L=v(\\\"line\\\"),C=v(\\\"circle\\\"),P=v(\\\"symbol\\\"),O={fill:E,line:L,circle:C,symbol:P};if(!b)return O;if((_||w)&&(r=o.calcTraceToLineCoords(e)),_&&(E.geojson=o.makePolygon(r),E.layout.visibility=\\\"visible\\\",i.extendFlat(E.paint,{\\\"fill-color\\\":a.fillcolor})),w&&(L.geojson=o.makeLine(r),L.layout.visibility=\\\"visible\\\",i.extendFlat(L.paint,{\\\"line-width\\\":a.line.width,\\\"line-color\\\":a.line.color,\\\"line-opacity\\\":a.opacity})),A){var I=function(t){var e,r,a,o,c=t[0].trace,f=c.marker,h=c.selectedpoints,p=i.isArrayOrTypedArray(f.color),d=i.isArrayOrTypedArray(f.size),v=i.isArrayOrTypedArray(f.opacity);function g(t){return c.opacity*t}p&&(r=s.hasColorscale(c,\\\"marker\\\")?s.makeColorScaleFuncFromTrace(f):i.identity),d&&(a=u(c)),v&&(o=function(t){return g(n(t)?+i.constrain(t,0,1):0)});var y,x,b=[];for(e=0;e<t.length;e++){var _=t[e],w=_.lonlat;if(!m(w)){var T={};r&&(T.mcc=_.mcc=r(_.mc)),a&&(T.mrc=_.mrc=a(_.ms)),o&&(T.mo=o(_.mo)),h&&(T.selected=_.selected||0),b.push({type:\\\"Feature\\\",id:e+1,geometry:{type:\\\"Point\\\",coordinates:w},properties:T})}}if(h)for(y=l.makeSelectedPointStyleFns(c),e=0;e<b.length;e++){var k=b[e].properties;y.selectedOpacityFn&&(k.mo=g(y.selectedOpacityFn(k))),y.selectedColorFn&&(k.mcc=y.selectedColorFn(k)),y.selectedSizeFn&&(k.mrc=y.selectedSizeFn(k))}return{geojson:{type:\\\"FeatureCollection\\\",features:b},mcc:p||y&&y.selectedColorFn?{type:\\\"identity\\\",property:\\\"mcc\\\"}:f.color,mrc:d||y&&y.selectedSizeFn?{type:\\\"identity\\\",property:\\\"mrc\\\"}:(x=f.size,x/2),mo:v||y&&y.selectedOpacityFn?{type:\\\"identity\\\",property:\\\"mo\\\"}:g(f.opacity)}}(e);C.geojson=I.geojson,C.layout.visibility=\\\"visible\\\",S&&(C.filter=[\\\"!\\\",[\\\"has\\\",\\\"point_count\\\"]],O.cluster={type:\\\"circle\\\",filter:[\\\"has\\\",\\\"point_count\\\"],layout:{visibility:\\\"visible\\\"},paint:{\\\"circle-color\\\":x(a.cluster.color,a.cluster.step),\\\"circle-radius\\\":x(a.cluster.size,a.cluster.step),\\\"circle-opacity\\\":x(a.cluster.opacity,a.cluster.step)}},O.clusterCount={type:\\\"symbol\\\",filter:[\\\"has\\\",\\\"point_count\\\"],paint:{},layout:{\\\"text-field\\\":\\\"{point_count_abbreviated}\\\",\\\"text-font\\\":[\\\"Open Sans Regular\\\",\\\"Arial Unicode MS Regular\\\"],\\\"text-size\\\":12}}),i.extendFlat(C.paint,{\\\"circle-color\\\":I.mcc,\\\"circle-radius\\\":I.mrc,\\\"circle-opacity\\\":I.mo})}if(A&&S&&(C.filter=[\\\"!\\\",[\\\"has\\\",\\\"point_count\\\"]]),(M||k)&&(P.geojson=function(t,e){for(var r=e._fullLayout,n=t[0].trace,a=n.marker||{},o=a.symbol,s=a.angle,l=\\\"circle\\\"!==o?g(o):y,u=\\\"auto\\\"!==s?g(s,!0):y,f=c.hasText(n)?g(n.text):y,v=[],x=0;x<t.length;x++){var b=t[x];if(!m(b.lonlat)){var _,w=n.texttemplate;if(w){var T=Array.isArray(w)?w[x]||\\\"\\\":w,k=n._module.formatLabels(b,n,r),A={};h(A,n,b.i);var M=n._meta||{};_=i.texttemplateString(T,k,r._d3locale,A,b,M)}else _=f(x);_&&(_=_.replace(p,\\\"\\\").replace(d,\\\"\\\\n\\\")),v.push({type:\\\"Feature\\\",geometry:{type:\\\"Point\\\",coordinates:b.lonlat},properties:{symbol:l(x),angle:u(x),text:_}})}}return{type:\\\"FeatureCollection\\\",features:v}}(e,t),i.extendFlat(P.layout,{visibility:\\\"visible\\\",\\\"icon-image\\\":\\\"{symbol}-15\\\",\\\"text-field\\\":\\\"{text}\\\"}),M&&(i.extendFlat(P.layout,{\\\"icon-size\\\":a.marker.size/10}),\\\"angle\\\"in a.marker&&\\\"auto\\\"!==a.marker.angle&&i.extendFlat(P.layout,{\\\"icon-rotate\\\":{type:\\\"identity\\\",property:\\\"angle\\\"},\\\"icon-rotation-alignment\\\":\\\"map\\\"}),P.layout[\\\"icon-allow-overlap\\\"]=a.marker.allowoverlap,i.extendFlat(P.paint,{\\\"icon-opacity\\\":a.opacity*a.marker.opacity,\\\"icon-color\\\":a.marker.color})),k)){var D=(a.marker||{}).size,z=f(a.textposition,D);i.extendFlat(P.layout,{\\\"text-size\\\":a.textfont.size,\\\"text-anchor\\\":z.anchor,\\\"text-offset\\\":z.offset}),i.extendFlat(P.paint,{\\\"text-color\\\":a.textfont.color,\\\"text-opacity\\\":a.opacity})}return O}},76645:function(t,e,r){\\\"use strict\\\";var n=r(71828),i=r(34098),a=r(49508),o=r(11058),s=r(82410),l=r(28908),u=r(99181);t.exports=function(t,e,r,c){function f(r,i){return n.coerce(t,e,u,r,i)}function h(r,i){return n.coerce2(t,e,u,r,i)}var p=function(t,e,r){var n=r(\\\"lon\\\")||[],i=r(\\\"lat\\\")||[],a=Math.min(n.length,i.length);return e._length=a,a}(0,e,f);if(p){if(f(\\\"text\\\"),f(\\\"texttemplate\\\"),f(\\\"hovertext\\\"),f(\\\"hovertemplate\\\"),f(\\\"mode\\\"),f(\\\"below\\\"),i.hasLines(e)&&(o(t,e,r,c,f,{noDash:!0}),f(\\\"connectgaps\\\")),i.hasMarkers(e)){a(t,e,r,c,f,{noLine:!0,noAngle:!0}),f(\\\"marker.allowoverlap\\\"),f(\\\"marker.angle\\\");var d=e.marker;\\\"circle\\\"!==d.symbol&&(n.isArrayOrTypedArray(d.size)&&(d.size=d.size[0]),n.isArrayOrTypedArray(d.color)&&(d.color=d.color[0]))}var v=h(\\\"cluster.maxzoom\\\"),g=h(\\\"cluster.step\\\"),y=h(\\\"cluster.color\\\",e.marker&&e.marker.color||r),m=h(\\\"cluster.size\\\"),x=h(\\\"cluster.opacity\\\");f(\\\"cluster.enabled\\\",!1!==v||!1!==g||!1!==y||!1!==m||!1!==x),i.hasText(e)&&s(t,e,c,f,{noSelect:!0}),f(\\\"fill\\\"),\\\"none\\\"!==e.fill&&l(t,e,r,f),n.coerceSelectionMarkerOpacity(e,f)}else e.visible=!1}},53353:function(t){\\\"use strict\\\";t.exports=function(t,e){return t.lon=e.lon,t.lat=e.lat,t}},15636:function(t,e,r){\\\"use strict\\\";var n=r(89298);t.exports=function(t,e,r){var i={},a=r[e.subplot]._subplot.mockAxis,o=t.lonlat;return i.lonLabel=n.tickText(a,a.c2l(o[0]),!0).text,i.latLabel=n.tickText(a,a.c2l(o[1]),!0).text,i}},28178:function(t,e,r){\\\"use strict\\\";var n=r(30211),i=r(71828),a=r(34603),o=i.fillText,s=r(50606).BADNUM,l=r(77734).traceLayerPrefix;function u(t,e,r){if(!t.hovertemplate){var n=(e.hi||t.hoverinfo).split(\\\"+\\\"),i=-1!==n.indexOf(\\\"all\\\"),a=-1!==n.indexOf(\\\"lon\\\"),s=-1!==n.indexOf(\\\"lat\\\"),l=e.lonlat,u=[];return i||a&&s?u.push(\\\"(\\\"+c(l[1])+\\\", \\\"+c(l[0])+\\\")\\\"):a?u.push(r.lon+c(l[0])):s&&u.push(r.lat+c(l[1])),(i||-1!==n.indexOf(\\\"text\\\"))&&o(e,t,u),u.join(\\\"<br>\\\")}function c(t){return t+\\\"°\\\"}}t.exports={hoverPoints:function(t,e,r){var o=t.cd,c=o[0].trace,f=t.xa,h=t.ya,p=t.subplot,d=[],v=l+c.uid+\\\"-circle\\\",g=c.cluster&&c.cluster.enabled;if(g){var y=p.map.queryRenderedFeatures(null,{layers:[v]});d=y.map((function(t){return t.id}))}var m=360*(e>=0?Math.floor((e+180)/360):Math.ceil((e-180)/360)),x=e-m;if(n.getClosest(o,(function(t){var e=t.lonlat;if(e[0]===s)return 1/0;if(g&&-1===d.indexOf(t.i+1))return 1/0;var n=i.modHalf(e[0],360),a=e[1],o=p.project([n,a]),l=o.x-f.c2p([x,a]),u=o.y-h.c2p([n,r]),c=Math.max(3,t.mrc||0);return Math.max(Math.sqrt(l*l+u*u)-c,1-3/c)}),t),!1!==t.index){var b=o[t.index],_=b.lonlat,w=[i.modHalf(_[0],360)+m,_[1]],T=f.c2p(w),k=h.c2p(w),A=b.mrc||1;t.x0=T-A,t.x1=T+A,t.y0=k-A,t.y1=k+A;var M={};M[c.subplot]={_subplot:p};var S=c._module.formatLabels(b,c,M);return t.lonLabel=S.lonLabel,t.latLabel=S.latLabel,t.color=a(c,b),t.extraText=u(c,b,o[0].t.labels),t.hovertemplate=c.hovertemplate,[t]}},getExtraText:u}},20467:function(t,e,r){\\\"use strict\\\";t.exports={attributes:r(99181),supplyDefaults:r(76645),colorbar:r(4898),formatLabels:r(15636),calc:r(84622),plot:r(86951),hoverPoints:r(28178).hoverPoints,eventData:r(53353),selectPoints:r(86387),styleOnSelect:function(t,e){e&&e[0].trace._glTrace.update(e)},moduleType:\\\"trace\\\",name:\\\"scattermapbox\\\",basePlotModule:r(50101),categories:[\\\"mapbox\\\",\\\"gl\\\",\\\"symbols\\\",\\\"showLegend\\\",\\\"scatter-like\\\"],meta:{}}},86951:function(t,e,r){\\\"use strict\\\";var n=r(71828),i=r(15790),a=r(77734).traceLayerPrefix,o={cluster:[\\\"cluster\\\",\\\"clusterCount\\\",\\\"circle\\\"],nonCluster:[\\\"fill\\\",\\\"line\\\",\\\"circle\\\",\\\"symbol\\\"]};function s(t,e,r,n){this.type=\\\"scattermapbox\\\",this.subplot=t,this.uid=e,this.clusterEnabled=r,this.isHidden=n,this.sourceIds={fill:\\\"source-\\\"+e+\\\"-fill\\\",line:\\\"source-\\\"+e+\\\"-line\\\",circle:\\\"source-\\\"+e+\\\"-circle\\\",symbol:\\\"source-\\\"+e+\\\"-symbol\\\",cluster:\\\"source-\\\"+e+\\\"-circle\\\",clusterCount:\\\"source-\\\"+e+\\\"-circle\\\"},this.layerIds={fill:a+e+\\\"-fill\\\",line:a+e+\\\"-line\\\",circle:a+e+\\\"-circle\\\",symbol:a+e+\\\"-symbol\\\",cluster:a+e+\\\"-cluster\\\",clusterCount:a+e+\\\"-cluster-count\\\"},this.below=null}var l=s.prototype;l.addSource=function(t,e,r){var i={type:\\\"geojson\\\",data:e.geojson};r&&r.enabled&&n.extendFlat(i,{cluster:!0,clusterMaxZoom:r.maxzoom});var a=this.subplot.map.getSource(this.sourceIds[t]);a?a.setData(e.geojson):this.subplot.map.addSource(this.sourceIds[t],i)},l.setSourceData=function(t,e){this.subplot.map.getSource(this.sourceIds[t]).setData(e.geojson)},l.addLayer=function(t,e,r){var n={type:e.type,id:this.layerIds[t],source:this.sourceIds[t],layout:e.layout,paint:e.paint};e.filter&&(n.filter=e.filter);for(var i,a=this.layerIds[t],o=this.subplot.getMapLayers(),s=0;s<o.length;s++)if(o[s].id===a){i=!0;break}i?(this.subplot.setOptions(a,\\\"setLayoutProperty\\\",n.layout),\\\"visible\\\"===n.layout.visibility&&this.subplot.setOptions(a,\\\"setPaintProperty\\\",n.paint)):this.subplot.addLayer(n,r)},l.update=function(t){var e=t[0].trace,r=this.subplot,n=r.map,a=i(r.gd,t),s=r.belowLookup[\\\"trace-\\\"+this.uid],l=!(!e.cluster||!e.cluster.enabled),u=!!this.clusterEnabled,c=this;function f(t){u?function(t){for(var e=o.cluster,r=e.length-1;r>=0;r--){var i=e[r];n.removeLayer(c.layerIds[i])}t||n.removeSource(c.sourceIds.circle)}(t):function(t){for(var e=o.nonCluster,r=e.length-1;r>=0;r--){var i=e[r];n.removeLayer(c.layerIds[i]),t||n.removeSource(c.sourceIds[i])}}(t)}function h(t){l?function(t){t||c.addSource(\\\"circle\\\",a.circle,e.cluster);for(var r=o.cluster,n=0;n<r.length;n++){var i=r[n],l=a[i];c.addLayer(i,l,s)}}(t):function(t){for(var e=o.nonCluster,r=0;r<e.length;r++){var n=e[r],i=a[n];t||c.addSource(n,i),c.addLayer(n,i,s)}}(t)}function p(){for(var t=l?o.cluster:o.nonCluster,e=0;e<t.length;e++){var n=t[e],i=a[n];i&&(r.setOptions(c.layerIds[n],\\\"setLayoutProperty\\\",i.layout),\\\"visible\\\"===i.layout.visibility&&(\\\"cluster\\\"!==n&&c.setSourceData(n,i),r.setOptions(c.layerIds[n],\\\"setPaintProperty\\\",i.paint)))}}var d=this.isHidden,v=!0!==e.visible;v?d||f():d?v||h():u!==l?(f(),h()):this.below!==s?(f(!0),h(!0),p()):p(),this.clusterEnabled=l,this.isHidden=v,this.below=s,t[0].trace._glTrace=this},l.dispose=function(){for(var t=this.subplot.map,e=this.clusterEnabled?o.cluster:o.nonCluster,r=e.length-1;r>=0;r--){var n=e[r];t.removeLayer(this.layerIds[n]),t.removeSource(this.sourceIds[n])}},t.exports=function(t,e){var r,n,a,l=e[0].trace,u=l.cluster&&l.cluster.enabled,c=!0!==l.visible,f=new s(t,l.uid,u,c),h=i(t.gd,e),p=f.below=t.belowLookup[\\\"trace-\\\"+l.uid];if(u)for(f.addSource(\\\"circle\\\",h.circle,l.cluster),r=0;r<o.cluster.length;r++)a=h[n=o.cluster[r]],f.addLayer(n,a,p);else for(r=0;r<o.nonCluster.length;r++)a=h[n=o.nonCluster[r]],f.addSource(n,a,l.cluster),f.addLayer(n,a,p);return e[0].trace._glTrace=f,f}},86387:function(t,e,r){\\\"use strict\\\";var n=r(71828),i=r(34098),a=r(50606).BADNUM;t.exports=function(t,e){var r,o=t.cd,s=t.xaxis,l=t.yaxis,u=[],c=o[0].trace;if(!i.hasMarkers(c))return[];if(!1===e)for(r=0;r<o.length;r++)o[r].selected=0;else for(r=0;r<o.length;r++){var f=o[r],h=f.lonlat;if(h[0]!==a){var p=[n.modHalf(h[0],360),h[1]],d=[s.c2p(p),l.c2p(p)];e.contains(d,null,r,t)?(u.push({pointNumber:r,lon:h[0],lat:h[1]}),f.selected=1):f.selected=0}}return u}},81245:function(t,e,r){\\\"use strict\\\";var n=r(5386).fF,i=r(5386).si,a=r(1426).extendFlat,o=r(82196),s=r(9012),l=o.line;t.exports={mode:o.mode,r:{valType:\\\"data_array\\\",editType:\\\"calc+clearAxisTypes\\\"},theta:{valType:\\\"data_array\\\",editType:\\\"calc+clearAxisTypes\\\"},r0:{valType:\\\"any\\\",dflt:0,editType:\\\"calc+clearAxisTypes\\\"},dr:{valType:\\\"number\\\",dflt:1,editType:\\\"calc\\\"},theta0:{valType:\\\"any\\\",dflt:0,editType:\\\"calc+clearAxisTypes\\\"},dtheta:{valType:\\\"number\\\",editType:\\\"calc\\\"},thetaunit:{valType:\\\"enumerated\\\",values:[\\\"radians\\\",\\\"degrees\\\",\\\"gradians\\\"],dflt:\\\"degrees\\\",editType:\\\"calc+clearAxisTypes\\\"},text:o.text,texttemplate:i({editType:\\\"plot\\\"},{keys:[\\\"r\\\",\\\"theta\\\",\\\"text\\\"]}),hovertext:o.hovertext,line:{color:l.color,width:l.width,dash:l.dash,backoff:l.backoff,shape:a({},l.shape,{values:[\\\"linear\\\",\\\"spline\\\"]}),smoothing:l.smoothing,editType:\\\"calc\\\"},connectgaps:o.connectgaps,marker:o.marker,cliponaxis:a({},o.cliponaxis,{dflt:!1}),textposition:o.textposition,textfont:o.textfont,fill:a({},o.fill,{values:[\\\"none\\\",\\\"toself\\\",\\\"tonext\\\"],dflt:\\\"none\\\"}),fillcolor:o.fillcolor,hoverinfo:a({},s.hoverinfo,{flags:[\\\"r\\\",\\\"theta\\\",\\\"text\\\",\\\"name\\\"]}),hoveron:o.hoveron,hovertemplate:n(),selected:o.selected,unselected:o.unselected}},26442:function(t,e,r){\\\"use strict\\\";var n=r(92770),i=r(50606).BADNUM,a=r(89298),o=r(36922),s=r(75225),l=r(66279),u=r(47761).calcMarkerSize;t.exports=function(t,e){for(var r=t._fullLayout,c=e.subplot,f=r[c].radialaxis,h=r[c].angularaxis,p=f.makeCalcdata(e,\\\"r\\\"),d=h.makeCalcdata(e,\\\"theta\\\"),v=e._length,g=new Array(v),y=0;y<v;y++){var m=p[y],x=d[y],b=g[y]={};n(m)&&n(x)?(b.r=m,b.theta=x):b.r=i}var _=u(e,v);return e._extremes.x=a.findExtremes(f,p,{ppad:_}),o(t,e),s(g,e),l(g,e),g}},22184:function(t,e,r){\\\"use strict\\\";var n=r(71828),i=r(34098),a=r(49508),o=r(11058),s=r(94039),l=r(82410),u=r(28908),c=r(47581).PTS_LINESONLY,f=r(81245);function h(t,e,r,n){var i,a=n(\\\"r\\\"),o=n(\\\"theta\\\");if(a)o?i=Math.min(a.length,o.length):(i=a.length,n(\\\"theta0\\\"),n(\\\"dtheta\\\"));else{if(!o)return 0;i=e.theta.length,n(\\\"r0\\\"),n(\\\"dr\\\")}return e._length=i,i}t.exports={handleRThetaDefaults:h,supplyDefaults:function(t,e,r,p){function d(r,i){return n.coerce(t,e,f,r,i)}var v=h(0,e,0,d);if(v){d(\\\"thetaunit\\\"),d(\\\"mode\\\",v<c?\\\"lines+markers\\\":\\\"lines\\\"),d(\\\"text\\\"),d(\\\"hovertext\\\"),\\\"fills\\\"!==e.hoveron&&d(\\\"hovertemplate\\\"),i.hasLines(e)&&(o(t,e,r,p,d,{backoff:!0}),s(t,e,d),d(\\\"connectgaps\\\")),i.hasMarkers(e)&&a(t,e,r,p,d,{gradient:!0}),i.hasText(e)&&(d(\\\"texttemplate\\\"),l(t,e,p,d));var g=[];(i.hasMarkers(e)||i.hasText(e))&&(d(\\\"cliponaxis\\\"),d(\\\"marker.maxdisplayed\\\"),g.push(\\\"points\\\")),d(\\\"fill\\\"),\\\"none\\\"!==e.fill&&(u(t,e,r,d),i.hasLines(e)||s(t,e,d)),\\\"tonext\\\"!==e.fill&&\\\"toself\\\"!==e.fill||g.push(\\\"fills\\\"),d(\\\"hoveron\\\",g.join(\\\"+\\\")||\\\"points\\\"),n.coerceSelectionMarkerOpacity(e,d)}else e.visible=!1}}},98608:function(t,e,r){\\\"use strict\\\";var n=r(71828),i=r(89298);t.exports=function(t,e,r){var a,o,s={},l=r[e.subplot]._subplot;l?(a=l.radialAxis,o=l.angularAxis):(a=(l=r[e.subplot]).radialaxis,o=l.angularaxis);var u=a.c2l(t.r);s.rLabel=i.tickText(a,u,!0).text;var c=\\\"degrees\\\"===o.thetaunit?n.rad2deg(t.theta):t.theta;return s.thetaLabel=i.tickText(o,c,!0).text,s}},59150:function(t,e,r){\\\"use strict\\\";var n=r(33720);function i(t,e,r,n){var i=r.radialAxis,a=r.angularAxis;i._hovertitle=\\\"r\\\",a._hovertitle=\\\"θ\\\";var o={};o[e.subplot]={_subplot:r};var s=e._module.formatLabels(t,e,o);n.rLabel=s.rLabel,n.thetaLabel=s.thetaLabel;var l=t.hi||e.hoverinfo,u=[];function c(t,e){u.push(t._hovertitle+\\\": \\\"+e)}if(!e.hovertemplate){var f=l.split(\\\"+\\\");-1!==f.indexOf(\\\"all\\\")&&(f=[\\\"r\\\",\\\"theta\\\",\\\"text\\\"]),-1!==f.indexOf(\\\"r\\\")&&c(i,n.rLabel),-1!==f.indexOf(\\\"theta\\\")&&c(a,n.thetaLabel),-1!==f.indexOf(\\\"text\\\")&&n.text&&(u.push(n.text),delete n.text),n.extraText=u.join(\\\"<br>\\\")}}t.exports={hoverPoints:function(t,e,r,a){var o=n(t,e,r,a);if(o&&!1!==o[0].index){var s=o[0];if(void 0===s.index)return o;var l=t.subplot,u=s.cd[s.index],c=s.trace;if(l.isPtInside(u))return s.xLabelVal=void 0,s.yLabelVal=void 0,i(u,c,l,s),s.hovertemplate=c.hovertemplate,o}},makeHoverPointText:i}},91271:function(t,e,r){\\\"use strict\\\";t.exports={moduleType:\\\"trace\\\",name:\\\"scatterpolar\\\",basePlotModule:r(23580),categories:[\\\"polar\\\",\\\"symbols\\\",\\\"showLegend\\\",\\\"scatter-like\\\"],attributes:r(81245),supplyDefaults:r(22184).supplyDefaults,colorbar:r(4898),formatLabels:r(98608),calc:r(26442),plot:r(45162),style:r(16296).style,styleOnSelect:r(16296).styleOnSelect,hoverPoints:r(59150).hoverPoints,selectPoints:r(98002),meta:{}}},45162:function(t,e,r){\\\"use strict\\\";var n=r(32663),i=r(50606).BADNUM;t.exports=function(t,e,r){for(var a=e.layers.frontplot.select(\\\"g.scatterlayer\\\"),o=e.xaxis,s=e.yaxis,l={xaxis:o,yaxis:s,plot:e.framework,layerClipId:e._hasClipOnAxisFalse?e.clipIds.forTraces:null},u=e.radialAxis,c=e.angularAxis,f=0;f<r.length;f++)for(var h=r[f],p=0;p<h.length;p++){0===p&&(h[0].trace._xA=o,h[0].trace._yA=s);var d=h[p],v=d.r;if(v===i)d.x=d.y=i;else{var g=u.c2g(v),y=c.c2g(d.theta);d.x=g*Math.cos(y),d.y=g*Math.sin(y)}}n(t,l,r,a)}},53286:function(t,e,r){\\\"use strict\\\";var n=r(81245),i=r(42341),a=r(5386).si;t.exports={mode:n.mode,r:n.r,theta:n.theta,r0:n.r0,dr:n.dr,theta0:n.theta0,dtheta:n.dtheta,thetaunit:n.thetaunit,text:n.text,texttemplate:a({editType:\\\"plot\\\"},{keys:[\\\"r\\\",\\\"theta\\\",\\\"text\\\"]}),hovertext:n.hovertext,hovertemplate:n.hovertemplate,line:i.line,connectgaps:i.connectgaps,marker:i.marker,fill:i.fill,fillcolor:i.fillcolor,textposition:i.textposition,textfont:i.textfont,hoverinfo:n.hoverinfo,selected:n.selected,unselected:n.unselected}},65746:function(t,e,r){\\\"use strict\\\";t.exports={moduleType:\\\"trace\\\",name:\\\"scatterpolargl\\\",basePlotModule:r(23580),categories:[\\\"gl\\\",\\\"regl\\\",\\\"polar\\\",\\\"symbols\\\",\\\"showLegend\\\",\\\"scatter-like\\\"],attributes:r(53286),supplyDefaults:r(75485),colorbar:r(4898),formatLabels:r(46255),calc:r(37499),hoverPoints:r(29347).hoverPoints,selectPoints:r(58147),meta:{}}},37499:function(t,e,r){\\\"use strict\\\";var n=r(36922),i=r(47761).calcMarkerSize,a=r(19635),o=r(89298),s=r(78232).TOO_MANY_POINTS;t.exports=function(t,e){var r=t._fullLayout,l=e.subplot,u=r[l].radialaxis,c=r[l].angularaxis,f=e._r=u.makeCalcdata(e,\\\"r\\\"),h=e._theta=c.makeCalcdata(e,\\\"theta\\\"),p=e._length,d={};p<f.length&&(f=f.slice(0,p)),p<h.length&&(h=h.slice(0,p)),d.r=f,d.theta=h,n(t,e);var v,g=d.opts=a.style(t,e);return p<s?v=i(e,p):g.marker&&(v=2*(g.marker.sizeAvg||Math.max(g.marker.size,3))),e._extremes.x=o.findExtremes(u,f,{ppad:v}),[{x:!1,y:!1,t:d,trace:e}]}},75485:function(t,e,r){\\\"use strict\\\";var n=r(71828),i=r(34098),a=r(22184).handleRThetaDefaults,o=r(49508),s=r(11058),l=r(82410),u=r(28908),c=r(47581).PTS_LINESONLY,f=r(53286);t.exports=function(t,e,r,h){function p(r,i){return n.coerce(t,e,f,r,i)}var d=a(t,e,h,p);d?(p(\\\"thetaunit\\\"),p(\\\"mode\\\",d<c?\\\"lines+markers\\\":\\\"lines\\\"),p(\\\"text\\\"),p(\\\"hovertext\\\"),\\\"fills\\\"!==e.hoveron&&p(\\\"hovertemplate\\\"),i.hasLines(e)&&(s(t,e,r,h,p),p(\\\"connectgaps\\\")),i.hasMarkers(e)&&o(t,e,r,h,p,{noAngleRef:!0,noStandOff:!0}),i.hasText(e)&&(p(\\\"texttemplate\\\"),l(t,e,h,p)),p(\\\"fill\\\"),\\\"none\\\"!==e.fill&&u(t,e,r,p),n.coerceSelectionMarkerOpacity(e,p)):e.visible=!1}},46255:function(t,e,r){\\\"use strict\\\";var n=r(98608);t.exports=function(t,e,r){var i=t.i;return\\\"r\\\"in t||(t.r=e._r[i]),\\\"theta\\\"in t||(t.theta=e._theta[i]),n(t,e,r)}},29347:function(t,e,r){\\\"use strict\\\";var n=r(20794),i=r(59150).makeHoverPointText;t.exports={hoverPoints:function(t,e,r,a){var o=t.cd[0].t,s=o.r,l=o.theta,u=n.hoverPoints(t,e,r,a);if(u&&!1!==u[0].index){var c=u[0];if(void 0===c.index)return u;var f=t.subplot,h=c.cd[c.index],p=c.trace;if(h.r=s[c.index],h.theta=l[c.index],f.isPtInside(h))return c.xLabelVal=void 0,c.yLabelVal=void 0,i(h,p,f,c),u}}}},21461:function(t,e,r){\\\"use strict\\\";var n=r(65746);n.plot=r(49741),t.exports=n},49741:function(t,e,r){\\\"use strict\\\";var n=r(88294),i=r(92770),a=r(26787),o=r(38967),s=r(19635),l=r(71828),u=r(78232).TOO_MANY_POINTS;t.exports=function(t,e,r){if(r.length){var c=e.radialAxis,f=e.angularAxis,h=o(t,e);return r.forEach((function(r){if(r&&r[0]&&r[0].trace){var a,o=r[0],p=o.trace,d=o.t,v=p._length,g=d.r,y=d.theta,m=d.opts,x=g.slice(),b=y.slice();for(a=0;a<g.length;a++)e.isPtInside({r:g[a],theta:y[a]})||(x[a]=NaN,b[a]=NaN);var _=new Array(2*v),w=Array(v),T=Array(v);for(a=0;a<v;a++){var k,A,M=x[a];if(i(M)){var S=c.c2g(M),E=f.c2g(b[a],p.thetaunit);k=S*Math.cos(E),A=S*Math.sin(E)}else k=A=NaN;w[a]=_[2*a]=k,T[a]=_[2*a+1]=A}d.tree=n(_),m.marker&&v>=u&&(m.marker.cluster=d.tree),m.marker&&(m.markerSel.positions=m.markerUnsel.positions=m.marker.positions=_),m.line&&_.length>1&&l.extendFlat(m.line,s.linePositions(t,p,_)),m.text&&(l.extendFlat(m.text,{positions:_},s.textPosition(t,p,m.text,m.marker)),l.extendFlat(m.textSel,{positions:_},s.textPosition(t,p,m.text,m.markerSel)),l.extendFlat(m.textUnsel,{positions:_},s.textPosition(t,p,m.text,m.markerUnsel))),m.fill&&!h.fill2d&&(h.fill2d=!0),m.marker&&!h.scatter2d&&(h.scatter2d=!0),m.line&&!h.line2d&&(h.line2d=!0),m.text&&!h.glText&&(h.glText=!0),h.lineOptions.push(m.line),h.fillOptions.push(m.fill),h.markerOptions.push(m.marker),h.markerSelectedOptions.push(m.markerSel),h.markerUnselectedOptions.push(m.markerUnsel),h.textOptions.push(m.text),h.textSelectedOptions.push(m.textSel),h.textUnselectedOptions.push(m.textUnsel),h.selectBatch.push([]),h.unselectBatch.push([]),d.x=w,d.y=T,d.rawx=w,d.rawy=T,d.r=g,d.theta=y,d.positions=_,d._scene=h,d.index=h.count,h.count++}})),a(t,e,r)}},t.exports.reglPrecompiled={}},48300:function(t,e,r){\\\"use strict\\\";var n=r(5386).fF,i=r(5386).si,a=r(1426).extendFlat,o=r(82196),s=r(9012),l=o.line;t.exports={mode:o.mode,real:{valType:\\\"data_array\\\",editType:\\\"calc+clearAxisTypes\\\"},imag:{valType:\\\"data_array\\\",editType:\\\"calc+clearAxisTypes\\\"},text:o.text,texttemplate:i({editType:\\\"plot\\\"},{keys:[\\\"real\\\",\\\"imag\\\",\\\"text\\\"]}),hovertext:o.hovertext,line:{color:l.color,width:l.width,dash:l.dash,backoff:l.backoff,shape:a({},l.shape,{values:[\\\"linear\\\",\\\"spline\\\"]}),smoothing:l.smoothing,editType:\\\"calc\\\"},connectgaps:o.connectgaps,marker:o.marker,cliponaxis:a({},o.cliponaxis,{dflt:!1}),textposition:o.textposition,textfont:o.textfont,fill:a({},o.fill,{values:[\\\"none\\\",\\\"toself\\\",\\\"tonext\\\"],dflt:\\\"none\\\"}),fillcolor:o.fillcolor,hoverinfo:a({},s.hoverinfo,{flags:[\\\"real\\\",\\\"imag\\\",\\\"text\\\",\\\"name\\\"]}),hoveron:o.hoveron,hovertemplate:n(),selected:o.selected,unselected:o.unselected}},30621:function(t,e,r){\\\"use strict\\\";var n=r(92770),i=r(50606).BADNUM,a=r(36922),o=r(75225),s=r(66279),l=r(47761).calcMarkerSize;t.exports=function(t,e){for(var r=t._fullLayout,u=e.subplot,c=r[u].realaxis,f=r[u].imaginaryaxis,h=c.makeCalcdata(e,\\\"real\\\"),p=f.makeCalcdata(e,\\\"imag\\\"),d=e._length,v=new Array(d),g=0;g<d;g++){var y=h[g],m=p[g],x=v[g]={};n(y)&&n(m)?(x.real=y,x.imag=m):x.real=i}return l(e,d),a(t,e),o(v,e),s(v,e),v}},65269:function(t,e,r){\\\"use strict\\\";var n=r(71828),i=r(34098),a=r(49508),o=r(11058),s=r(94039),l=r(82410),u=r(28908),c=r(47581).PTS_LINESONLY,f=r(48300);t.exports=function(t,e,r,h){function p(r,i){return n.coerce(t,e,f,r,i)}var d=function(t,e,r,n){var i,a=n(\\\"real\\\"),o=n(\\\"imag\\\");return a&&o&&(i=Math.min(a.length,o.length)),e._length=i,i}(0,e,0,p);if(d){p(\\\"mode\\\",d<c?\\\"lines+markers\\\":\\\"lines\\\"),p(\\\"text\\\"),p(\\\"hovertext\\\"),\\\"fills\\\"!==e.hoveron&&p(\\\"hovertemplate\\\"),i.hasLines(e)&&(o(t,e,r,h,p,{backoff:!0}),s(t,e,p),p(\\\"connectgaps\\\")),i.hasMarkers(e)&&a(t,e,r,h,p,{gradient:!0}),i.hasText(e)&&(p(\\\"texttemplate\\\"),l(t,e,h,p));var v=[];(i.hasMarkers(e)||i.hasText(e))&&(p(\\\"cliponaxis\\\"),p(\\\"marker.maxdisplayed\\\"),v.push(\\\"points\\\")),p(\\\"fill\\\"),\\\"none\\\"!==e.fill&&(u(t,e,r,p),i.hasLines(e)||s(t,e,p)),\\\"tonext\\\"!==e.fill&&\\\"toself\\\"!==e.fill||v.push(\\\"fills\\\"),p(\\\"hoveron\\\",v.join(\\\"+\\\")||\\\"points\\\"),n.coerceSelectionMarkerOpacity(e,p)}else e.visible=!1}},62047:function(t,e,r){\\\"use strict\\\";var n=r(89298);t.exports=function(t,e,r){var i={},a=r[e.subplot]._subplot;return i.realLabel=n.tickText(a.radialAxis,t.real,!0).text,i.imagLabel=n.tickText(a.angularAxis,t.imag,!0).text,i}},11350:function(t,e,r){\\\"use strict\\\";var n=r(33720);function i(t,e,r,n){var i=r.radialAxis,a=r.angularAxis;i._hovertitle=\\\"real\\\",a._hovertitle=\\\"imag\\\";var o={};o[e.subplot]={_subplot:r};var s=e._module.formatLabels(t,e,o);n.realLabel=s.realLabel,n.imagLabel=s.imagLabel;var l=t.hi||e.hoverinfo,u=[];function c(t,e){u.push(t._hovertitle+\\\": \\\"+e)}if(!e.hovertemplate){var f=l.split(\\\"+\\\");-1!==f.indexOf(\\\"all\\\")&&(f=[\\\"real\\\",\\\"imag\\\",\\\"text\\\"]),-1!==f.indexOf(\\\"real\\\")&&c(i,n.realLabel),-1!==f.indexOf(\\\"imag\\\")&&c(a,n.imagLabel),-1!==f.indexOf(\\\"text\\\")&&n.text&&(u.push(n.text),delete n.text),n.extraText=u.join(\\\"<br>\\\")}}t.exports={hoverPoints:function(t,e,r,a){var o=n(t,e,r,a);if(o&&!1!==o[0].index){var s=o[0];if(void 0===s.index)return o;var l=t.subplot,u=s.cd[s.index],c=s.trace;if(l.isPtInside(u))return s.xLabelVal=void 0,s.yLabelVal=void 0,i(u,c,l,s),s.hovertemplate=c.hovertemplate,o}},makeHoverPointText:i}},85956:function(t,e,r){\\\"use strict\\\";t.exports={moduleType:\\\"trace\\\",name:\\\"scattersmith\\\",basePlotModule:r(7504),categories:[\\\"smith\\\",\\\"symbols\\\",\\\"showLegend\\\",\\\"scatter-like\\\"],attributes:r(48300),supplyDefaults:r(65269),colorbar:r(4898),formatLabels:r(62047),calc:r(30621),plot:r(12480),style:r(16296).style,styleOnSelect:r(16296).styleOnSelect,hoverPoints:r(11350).hoverPoints,selectPoints:r(98002),meta:{}}},12480:function(t,e,r){\\\"use strict\\\";var n=r(32663),i=r(50606).BADNUM,a=r(23893).smith;t.exports=function(t,e,r){for(var o=e.layers.frontplot.select(\\\"g.scatterlayer\\\"),s=e.xaxis,l=e.yaxis,u={xaxis:s,yaxis:l,plot:e.framework,layerClipId:e._hasClipOnAxisFalse?e.clipIds.forTraces:null},c=0;c<r.length;c++)for(var f=r[c],h=0;h<f.length;h++){0===h&&(f[0].trace._xA=s,f[0].trace._yA=l);var p=f[h],d=p.real;if(d===i)p.x=p.y=i;else{var v=a([d,p.imag]);p.x=v[0],p.y=v[1]}}n(t,u,r,o)}},50413:function(t,e,r){\\\"use strict\\\";var n=r(5386).fF,i=r(5386).si,a=r(82196),o=r(9012),s=r(50693),l=r(79952).P,u=r(1426).extendFlat,c=a.marker,f=a.line,h=c.line;t.exports={a:{valType:\\\"data_array\\\",editType:\\\"calc\\\"},b:{valType:\\\"data_array\\\",editType:\\\"calc\\\"},c:{valType:\\\"data_array\\\",editType:\\\"calc\\\"},sum:{valType:\\\"number\\\",dflt:0,min:0,editType:\\\"calc\\\"},mode:u({},a.mode,{dflt:\\\"markers\\\"}),text:u({},a.text,{}),texttemplate:i({editType:\\\"plot\\\"},{keys:[\\\"a\\\",\\\"b\\\",\\\"c\\\",\\\"text\\\"]}),hovertext:u({},a.hovertext,{}),line:{color:f.color,width:f.width,dash:l,backoff:f.backoff,shape:u({},f.shape,{values:[\\\"linear\\\",\\\"spline\\\"]}),smoothing:f.smoothing,editType:\\\"calc\\\"},connectgaps:a.connectgaps,cliponaxis:a.cliponaxis,fill:u({},a.fill,{values:[\\\"none\\\",\\\"toself\\\",\\\"tonext\\\"],dflt:\\\"none\\\"}),fillcolor:a.fillcolor,marker:u({symbol:c.symbol,opacity:c.opacity,angle:c.angle,angleref:c.angleref,standoff:c.standoff,maxdisplayed:c.maxdisplayed,size:c.size,sizeref:c.sizeref,sizemin:c.sizemin,sizemode:c.sizemode,line:u({width:h.width,editType:\\\"calc\\\"},s(\\\"marker.line\\\")),gradient:c.gradient,editType:\\\"calc\\\"},s(\\\"marker\\\")),textfont:a.textfont,textposition:a.textposition,selected:a.selected,unselected:a.unselected,hoverinfo:u({},o.hoverinfo,{flags:[\\\"a\\\",\\\"b\\\",\\\"c\\\",\\\"text\\\",\\\"name\\\"]}),hoveron:a.hoveron,hovertemplate:n()}},54337:function(t,e,r){\\\"use strict\\\";var n=r(92770),i=r(36922),a=r(75225),o=r(66279),s=r(47761).calcMarkerSize,l=[\\\"a\\\",\\\"b\\\",\\\"c\\\"],u={a:[\\\"b\\\",\\\"c\\\"],b:[\\\"a\\\",\\\"c\\\"],c:[\\\"a\\\",\\\"b\\\"]};t.exports=function(t,e){var r,c,f,h,p,d,v=t._fullLayout[e.subplot].sum,g=e.sum||v,y={a:e.a,b:e.b,c:e.c};for(r=0;r<l.length;r++)if(!y[f=l[r]]){for(p=y[u[f][0]],d=y[u[f][1]],h=new Array(p.length),c=0;c<p.length;c++)h[c]=g-p[c]-d[c];y[f]=h}var m,x,b,_,w,T,k=e._length,A=new Array(k);for(r=0;r<k;r++)m=y.a[r],x=y.b[r],b=y.c[r],n(m)&&n(x)&&n(b)?(1!=(_=v/((m=+m)+(x=+x)+(b=+b)))&&(m*=_,x*=_,b*=_),T=m,w=b-x,A[r]={x:w,y:T,a:m,b:x,c:b}):A[r]={x:!1,y:!1};return s(e,k),i(t,e),a(A,e),o(A,e),A}},46008:function(t,e,r){\\\"use strict\\\";var n=r(71828),i=r(47581),a=r(34098),o=r(49508),s=r(11058),l=r(94039),u=r(82410),c=r(28908),f=r(50413);t.exports=function(t,e,r,h){function p(r,i){return n.coerce(t,e,f,r,i)}var d,v=p(\\\"a\\\"),g=p(\\\"b\\\"),y=p(\\\"c\\\");if(v?(d=v.length,g?(d=Math.min(d,g.length),y&&(d=Math.min(d,y.length))):d=y?Math.min(d,y.length):0):g&&y&&(d=Math.min(g.length,y.length)),d){e._length=d,p(\\\"sum\\\"),p(\\\"text\\\"),p(\\\"hovertext\\\"),\\\"fills\\\"!==e.hoveron&&p(\\\"hovertemplate\\\"),p(\\\"mode\\\",d<i.PTS_LINESONLY?\\\"lines+markers\\\":\\\"lines\\\"),a.hasLines(e)&&(s(t,e,r,h,p,{backoff:!0}),l(t,e,p),p(\\\"connectgaps\\\")),a.hasMarkers(e)&&o(t,e,r,h,p,{gradient:!0}),a.hasText(e)&&(p(\\\"texttemplate\\\"),u(t,e,h,p));var m=[];(a.hasMarkers(e)||a.hasText(e))&&(p(\\\"cliponaxis\\\"),p(\\\"marker.maxdisplayed\\\"),m.push(\\\"points\\\")),p(\\\"fill\\\"),\\\"none\\\"!==e.fill&&(c(t,e,r,p),a.hasLines(e)||l(t,e,p)),\\\"tonext\\\"!==e.fill&&\\\"toself\\\"!==e.fill||m.push(\\\"fills\\\"),p(\\\"hoveron\\\",m.join(\\\"+\\\")||\\\"points\\\"),n.coerceSelectionMarkerOpacity(e,p)}else e.visible=!1}},4524:function(t){\\\"use strict\\\";t.exports=function(t,e,r,n,i){if(e.xa&&(t.xaxis=e.xa),e.ya&&(t.yaxis=e.ya),n[i]){var a=n[i];t.a=a.a,t.b=a.b,t.c=a.c}else t.a=e.a,t.b=e.b,t.c=e.c;return t}},93645:function(t,e,r){\\\"use strict\\\";var n=r(89298);t.exports=function(t,e,r){var i={},a=r[e.subplot]._subplot;return i.aLabel=n.tickText(a.aaxis,t.a,!0).text,i.bLabel=n.tickText(a.baxis,t.b,!0).text,i.cLabel=n.tickText(a.caxis,t.c,!0).text,i}},47250:function(t,e,r){\\\"use strict\\\";var n=r(33720);t.exports=function(t,e,r,i){var a=n(t,e,r,i);if(a&&!1!==a[0].index){var o=a[0];if(void 0===o.index){var s=1-o.y0/t.ya._length,l=t.xa._length,u=l*s/2,c=l-u;return o.x0=Math.max(Math.min(o.x0,c),u),o.x1=Math.max(Math.min(o.x1,c),u),a}var f=o.cd[o.index],h=o.trace,p=o.subplot;o.a=f.a,o.b=f.b,o.c=f.c,o.xLabelVal=void 0,o.yLabelVal=void 0;var d={};d[h.subplot]={_subplot:p};var v=h._module.formatLabels(f,h,d);o.aLabel=v.aLabel,o.bLabel=v.bLabel,o.cLabel=v.cLabel;var g=f.hi||h.hoverinfo,y=[];if(!h.hovertemplate){var m=g.split(\\\"+\\\");-1!==m.indexOf(\\\"all\\\")&&(m=[\\\"a\\\",\\\"b\\\",\\\"c\\\"]),-1!==m.indexOf(\\\"a\\\")&&x(p.aaxis,o.aLabel),-1!==m.indexOf(\\\"b\\\")&&x(p.baxis,o.bLabel),-1!==m.indexOf(\\\"c\\\")&&x(p.caxis,o.cLabel)}return o.extraText=y.join(\\\"<br>\\\"),o.hovertemplate=h.hovertemplate,a}function x(t,e){y.push(t._hovertitle+\\\": \\\"+e)}}},52979:function(t,e,r){\\\"use strict\\\";t.exports={attributes:r(50413),supplyDefaults:r(46008),colorbar:r(4898),formatLabels:r(93645),calc:r(54337),plot:r(7507),style:r(16296).style,styleOnSelect:r(16296).styleOnSelect,hoverPoints:r(47250),selectPoints:r(98002),eventData:r(4524),moduleType:\\\"trace\\\",name:\\\"scatterternary\\\",basePlotModule:r(61639),categories:[\\\"ternary\\\",\\\"symbols\\\",\\\"showLegend\\\",\\\"scatter-like\\\"],meta:{}}},7507:function(t,e,r){\\\"use strict\\\";var n=r(32663);t.exports=function(t,e,r){var i=e.plotContainer;i.select(\\\".scatterlayer\\\").selectAll(\\\"*\\\").remove();for(var a=e.xaxis,o=e.yaxis,s={xaxis:a,yaxis:o,plot:i,layerClipId:e._hasClipOnAxisFalse?e.clipIdRelative:null},l=e.layers.frontplot.select(\\\"g.scatterlayer\\\"),u=0;u<r.length;u++){var c=r[u];c.length&&(c[0].trace._xA=a,c[0].trace._yA=o)}n(t,s,r,l)}},46880:function(t,e,r){\\\"use strict\\\";var n=r(82196),i=r(50693),a=r(12663).axisHoverFormat,o=r(5386).fF,s=r(42341),l=r(85555).idRegex,u=r(44467).templatedArray,c=r(1426).extendFlat,f=n.marker,h=f.line,p=c(i(\\\"marker.line\\\",{editTypeOverride:\\\"calc\\\"}),{width:c({},h.width,{editType:\\\"calc\\\"}),editType:\\\"calc\\\"}),d=c(i(\\\"marker\\\"),{symbol:f.symbol,angle:f.angle,size:c({},f.size,{editType:\\\"markerSize\\\"}),sizeref:f.sizeref,sizemin:f.sizemin,sizemode:f.sizemode,opacity:f.opacity,colorbar:f.colorbar,line:p,editType:\\\"calc\\\"});function v(t){return{valType:\\\"info_array\\\",freeLength:!0,editType:\\\"calc\\\",items:{valType:\\\"subplotid\\\",regex:l[t],editType:\\\"plot\\\"}}}d.color.editType=d.cmin.editType=d.cmax.editType=\\\"style\\\",t.exports={dimensions:u(\\\"dimension\\\",{visible:{valType:\\\"boolean\\\",dflt:!0,editType:\\\"calc\\\"},label:{valType:\\\"string\\\",editType:\\\"calc\\\"},values:{valType:\\\"data_array\\\",editType:\\\"calc+clearAxisTypes\\\"},axis:{type:{valType:\\\"enumerated\\\",values:[\\\"linear\\\",\\\"log\\\",\\\"date\\\",\\\"category\\\"],editType:\\\"calc+clearAxisTypes\\\"},matches:{valType:\\\"boolean\\\",dflt:!1,editType:\\\"calc\\\"},editType:\\\"calc+clearAxisTypes\\\"},editType:\\\"calc+clearAxisTypes\\\"}),text:c({},s.text,{}),hovertext:c({},s.hovertext,{}),hovertemplate:o(),xhoverformat:a(\\\"x\\\"),yhoverformat:a(\\\"y\\\"),marker:d,xaxes:v(\\\"x\\\"),yaxes:v(\\\"y\\\"),diagonal:{visible:{valType:\\\"boolean\\\",dflt:!0,editType:\\\"calc\\\"},editType:\\\"calc\\\"},showupperhalf:{valType:\\\"boolean\\\",dflt:!0,editType:\\\"calc\\\"},showlowerhalf:{valType:\\\"boolean\\\",dflt:!0,editType:\\\"calc\\\"},selected:{marker:s.selected.marker,editType:\\\"calc\\\"},unselected:{marker:s.unselected.marker,editType:\\\"calc\\\"},opacity:s.opacity}},65017:function(t,e,r){\\\"use strict\\\";var n=r(73972),i=r(83312);t.exports={moduleType:\\\"trace\\\",name:\\\"splom\\\",categories:[\\\"gl\\\",\\\"regl\\\",\\\"cartesian\\\",\\\"symbols\\\",\\\"showLegend\\\",\\\"scatter-like\\\"],attributes:r(46880),supplyDefaults:r(25784),colorbar:r(4898),calc:r(87625),plot:r(79410),hoverPoints:r(8567).hoverPoints,selectPoints:r(8689),editStyle:r(28801),meta:{}},n.register(i)},16947:function(t,e,r){\\\"use strict\\\";var n=r(46075),i=r(73972),a=r(79749),o=r(27659).a0,s=r(93612),l=r(41675).getFromId,u=r(89298).shouldShowZeroLine,c=\\\"splom\\\",f={};function h(t,e,r){for(var n=r.matrixOptions.data.length,i=e._visibleDims,a=r.viewOpts.ranges=new Array(n),o=0;o<i.length;o++){var s=i[o],u=a[o]=new Array(4),c=l(t,e._diag[s][0]);c&&(u[0]=c.r2l(c.range[0]),u[2]=c.r2l(c.range[1]));var f=l(t,e._diag[s][1]);f&&(u[1]=f.r2l(f.range[0]),u[3]=f.r2l(f.range[1]))}r.selectBatch.length||r.unselectBatch.length?r.matrix.update({ranges:a},{ranges:a}):r.matrix.update({ranges:a})}function p(t){var e=t._fullLayout,r=e._glcanvas.data()[0].regl,i=e._splomGrid;i||(i=e._splomGrid=n(r)),i.update(function(t){var e,r=t._context.plotGlPixelRatio,n=t._fullLayout,i=n._size,a=[0,0,n.width*r,n.height*r],o={};function s(t,e,n,i,s,l){n*=r,i*=r,s*=r,l*=r;var u=e[t+\\\"color\\\"],c=e[t+\\\"width\\\"],f=String(u+c);f in o?o[f].data.push(NaN,NaN,n,i,s,l):o[f]={data:[n,i,s,l],join:\\\"rect\\\",thickness:c*r,color:u,viewport:a,range:a,overlay:!1}}for(e in n._splomSubplots){var l,c,f=n._plots[e],h=f.xaxis,p=f.yaxis,d=h._gridVals,v=p._gridVals,g=h._offset,y=h._length,m=p._length,x=i.b+p.domain[0]*i.h,b=-p._m,_=-b*p.r2l(p.range[0],p.calendar);if(h.showgrid)for(e=0;e<d.length;e++)l=g+h.l2p(d[e].x),s(\\\"grid\\\",h,l,x,l,x+m);if(p.showgrid)for(e=0;e<v.length;e++)s(\\\"grid\\\",p,g,c=x+_+b*v[e].x,g+y,c);u(t,h,p)&&(l=g+h.l2p(0),s(\\\"zeroline\\\",h,l,x,l,x+m)),u(t,p,h)&&s(\\\"zeroline\\\",p,g,c=x+_+0,g+y,c)}var w=[];for(e in o)w.push(o[e]);return w}(t))}t.exports={name:c,attr:s.attr,attrRegex:s.attrRegex,layoutAttributes:s.layoutAttributes,supplyLayoutDefaults:s.supplyLayoutDefaults,drawFramework:s.drawFramework,plot:function(t){var e=t._fullLayout,r=i.getModule(c),n=o(t.calcdata,r)[0];a(t,[\\\"ANGLE_instanced_arrays\\\",\\\"OES_element_index_uint\\\"],f)&&(e._hasOnlyLargeSploms&&p(t),r.plot(t,{},n))},drag:function(t){var e=t.calcdata,r=t._fullLayout;r._hasOnlyLargeSploms&&p(t);for(var n=0;n<e.length;n++){var i=e[n][0].trace,a=r._splomScenes[i.uid];\\\"splom\\\"===i.type&&a&&a.matrix&&h(t,i,a)}},updateGrid:p,clean:function(t,e,r,n){var i,a={};if(n._splomScenes){for(i=0;i<t.length;i++){var o=t[i];\\\"splom\\\"===o.type&&(a[o.uid]=1)}for(i=0;i<r.length;i++){var l=r[i];if(!a[l.uid]){var u=n._splomScenes[l.uid];u&&u.destroy&&u.destroy(),n._splomScenes[l.uid]=null,delete n._splomScenes[l.uid]}}}0===Object.keys(n._splomScenes||{}).length&&delete n._splomScenes,n._splomGrid&&!e._hasOnlyLargeSploms&&n._hasOnlyLargeSploms&&(n._splomGrid.destroy(),n._splomGrid=null,delete n._splomGrid),s.clean(t,e,r,n)},updateFx:s.updateFx,toSVG:s.toSVG,reglPrecompiled:f}},87625:function(t,e,r){\\\"use strict\\\";var n=r(71828),i=r(41675),a=r(47761).calcMarkerSize,o=r(47761).calcAxisExpansion,s=r(36922),l=r(19635).markerSelection,u=r(19635).markerStyle,c=r(10164),f=r(50606).BADNUM,h=r(78232).TOO_MANY_POINTS;t.exports=function(t,e){var r,p,d,v,g,y,m=e.dimensions,x=e._length,b={},_=b.cdata=[],w=b.data=[],T=e._visibleDims=[];function k(t,r){for(var i=t.makeCalcdata({v:r.values,vcalendar:e.calendar},\\\"v\\\"),a=0;a<i.length;a++)i[a]=i[a]===f?NaN:i[a];_.push(i),w.push(\\\"log\\\"===t.type?n.simpleMap(i,t.c2l):i)}for(r=0;r<m.length;r++)if((d=m[r]).visible){if(v=i.getFromId(t,e._diag[r][0]),g=i.getFromId(t,e._diag[r][1]),v&&g&&v.type!==g.type){n.log(\\\"Skipping splom dimension \\\"+r+\\\" with conflicting axis types\\\");continue}v?(k(v,d),g&&\\\"category\\\"===g.type&&(g._categories=v._categories.slice())):k(g,d),T.push(r)}for(s(t,e),n.extendFlat(b,u(t,e)),y=_.length*x>h?b.sizeAvg||Math.max(b.size,3):a(e,x),p=0;p<T.length;p++)d=m[r=T[p]],v=i.getFromId(t,e._diag[r][0])||{},g=i.getFromId(t,e._diag[r][1])||{},o(t,e,v,g,_[p],_[p],y);var A=c(t,e);return A.matrix||(A.matrix=!0),A.matrixOptions=b,A.selectedOptions=l(t,e,e.selected),A.unselectedOptions=l(t,e,e.unselected),[{x:!1,y:!1,t:{},trace:e}]}},25784:function(t,e,r){\\\"use strict\\\";var n=r(71828),i=r(85501),a=r(46880),o=r(34098),s=r(49508),l=r(94397),u=r(68645).isOpenSymbol;function c(t,e){function r(r,i){return n.coerce(t,e,a.dimensions,r,i)}r(\\\"label\\\");var i=r(\\\"values\\\");i&&i.length?r(\\\"visible\\\"):e.visible=!1,r(\\\"axis.type\\\"),r(\\\"axis.matches\\\")}t.exports=function(t,e,r,f){function h(r,i){return n.coerce(t,e,a,r,i)}var p=i(t,e,{name:\\\"dimensions\\\",handleItemDefaults:c}),d=h(\\\"diagonal.visible\\\"),v=h(\\\"showupperhalf\\\"),g=h(\\\"showlowerhalf\\\");if(l(e,p,\\\"values\\\")&&(d||v||g)){h(\\\"text\\\"),h(\\\"hovertext\\\"),h(\\\"hovertemplate\\\"),h(\\\"xhoverformat\\\"),h(\\\"yhoverformat\\\"),s(t,e,r,f,h,{noAngleRef:!0,noStandOff:!0});var y=u(e.marker.symbol),m=o.isBubble(e);h(\\\"marker.line.width\\\",y||m?1:0),function(t,e,r,n){var i,a,o=e.dimensions,s=o.length,l=e.showupperhalf,u=e.showlowerhalf,c=e.diagonal.visible,f=new Array(s),h=new Array(s);for(i=0;i<s;i++){var p=i?i+1:\\\"\\\";f[i]=\\\"x\\\"+p,h[i]=\\\"y\\\"+p}var d=n(\\\"xaxes\\\",f),v=n(\\\"yaxes\\\",h),g=e._diag=new Array(s);e._xaxes={},e._yaxes={};var y=[],m=[];function x(t,n,i,a){if(t){var o=t.charAt(0),s=r._splomAxes[o];if(e[\\\"_\\\"+o+\\\"axes\\\"][t]=1,a.push(t),!(t in s)){var l=s[t]={};i&&(l.label=i.label||\\\"\\\",i.visible&&i.axis&&(i.axis.type&&(l.type=i.axis.type),i.axis.matches&&(l.matches=n)))}}}var b=!c&&!u,_=!c&&!l;for(e._axesDim={},i=0;i<s;i++){var w=o[i],T=0===i,k=i===s-1,A=T&&b||k&&_?void 0:d[i],M=T&&_||k&&b?void 0:v[i];x(A,M,w,y),x(M,A,w,m),g[i]=[A,M],e._axesDim[A]=i,e._axesDim[M]=i}for(i=0;i<y.length;i++)for(a=0;a<m.length;a++){var S=y[i]+m[a];i>a&&l||i<a&&u?r._splomSubplots[S]=1:i!==a||!c&&u&&l||(r._splomSubplots[S]=1)}(!u||!c&&l&&u)&&(r._splomGridDflt.xside=\\\"bottom\\\",r._splomGridDflt.yside=\\\"left\\\")}(0,e,f,h),n.coerceSelectionMarkerOpacity(e,h)}else e.visible=!1}},28801:function(t,e,r){\\\"use strict\\\";var n=r(71828),i=r(36922),a=r(19635).markerStyle;t.exports=function(t,e){var r=e.trace,o=t._fullLayout._splomScenes[r.uid];if(o){i(t,r),n.extendFlat(o.matrixOptions,a(t,r));var s=n.extendFlat({},o.matrixOptions,o.viewOpts);o.matrix.update(s,null)}}},35948:function(t,e){\\\"use strict\\\";e.getDimIndex=function(t,e){for(var r=e._id,n={x:0,y:1}[r.charAt(0)],i=t._visibleDims,a=0;a<i.length;a++){var o=i[a];if(t._diag[o][n]===r)return a}return!1}},8567:function(t,e,r){\\\"use strict\\\";var n=r(35948),i=r(20794).calcHover;t.exports={hoverPoints:function(t,e,r){var a=t.cd[0].trace,o=t.scene.matrixOptions.cdata,s=t.xa,l=t.ya,u=s.c2p(e),c=l.c2p(r),f=t.distance,h=n.getDimIndex(a,s),p=n.getDimIndex(a,l);if(!1===h||!1===p)return[t];for(var d,v,g=o[h],y=o[p],m=f,x=0;x<g.length;x++){var b=g[x],_=y[x],w=s.c2p(b)-u,T=l.c2p(_)-c,k=Math.sqrt(w*w+T*T);k<m&&(m=v=k,d=x)}return t.index=d,t.distance=m,t.dxy=v,void 0===d?[t]:[i(t,g,y,a)]}}},6419:function(t,e,r){\\\"use strict\\\";var n=r(65017);n.basePlotModule=r(16947),t.exports=n},79410:function(t,e,r){\\\"use strict\\\";var n=r(60487),i=r(71828),a=r(41675),o=r(64505).selectMode;function s(t,e){var r,s,l,u,c,f=t._fullLayout,h=f._size,p=e.trace,d=e.t,v=f._splomScenes[p.uid],g=v.matrixOptions,y=g.cdata,m=f._glcanvas.data()[0].regl,x=f.dragmode;if(0!==y.length){g.lower=p.showupperhalf,g.upper=p.showlowerhalf,g.diagonal=p.diagonal.visible;var b=p._visibleDims,_=y.length,w=v.viewOpts={};for(w.ranges=new Array(_),w.domains=new Array(_),c=0;c<b.length;c++){l=b[c];var T=w.ranges[c]=new Array(4),k=w.domains[c]=new Array(4);(r=a.getFromId(t,p._diag[l][0]))&&(T[0]=r._rl[0],T[2]=r._rl[1],k[0]=r.domain[0],k[2]=r.domain[1]),(s=a.getFromId(t,p._diag[l][1]))&&(T[1]=s._rl[0],T[3]=s._rl[1],k[1]=s.domain[0],k[3]=s.domain[1])}var A=t._context.plotGlPixelRatio,M=h.l*A,S=h.b*A,E=h.w*A,L=h.h*A;w.viewport=[M,S,E+M,L+S],!0===v.matrix&&(v.matrix=n(m));var C=f.clickmode.indexOf(\\\"select\\\")>-1,P=!0;if(o(x)||p.selectedpoints||C){var O=p._length;if(p.selectedpoints){v.selectBatch=p.selectedpoints;var I=p.selectedpoints,D={};for(l=0;l<I.length;l++)D[I[l]]=!0;var z=[];for(l=0;l<O;l++)D[l]||z.push(l);v.unselectBatch=z}var R=d.xpx=new Array(_),F=d.ypx=new Array(_);for(c=0;c<b.length;c++){if(l=b[c],r=a.getFromId(t,p._diag[l][0]))for(R[c]=new Array(O),u=0;u<O;u++)R[c][u]=r.c2p(y[c][u]);if(s=a.getFromId(t,p._diag[l][1]))for(F[c]=new Array(O),u=0;u<O;u++)F[c][u]=s.c2p(y[c][u])}if(v.selectBatch.length||v.unselectBatch.length){var B=i.extendFlat({},g,v.unselectedOptions,w),N=i.extendFlat({},g,v.selectedOptions,w);v.matrix.update(B,N),P=!1}}else d.xpx=d.ypx=null;if(P){var j=i.extendFlat({},g,w);v.matrix.update(j,null)}}}t.exports=function(t,e,r){if(r.length)for(var n=0;n<r.length;n++)s(t,r[n][0])}},10164:function(t,e,r){\\\"use strict\\\";var n=r(71828);t.exports=function(t,e){var r=t._fullLayout,i=e.uid,a=r._splomScenes;a||(a=r._splomScenes={});var o={dirty:!0,selectBatch:[],unselectBatch:[]},s=a[e.uid];return s||((s=a[i]=n.extendFlat({},o,{matrix:!1,selectBatch:[],unselectBatch:[]})).draw=function(){s.matrix&&s.matrix.draw&&(s.selectBatch.length||s.unselectBatch.length?s.matrix.draw(s.unselectBatch,s.selectBatch):s.matrix.draw()),s.dirty=!1},s.destroy=function(){s.matrix&&s.matrix.destroy&&s.matrix.destroy(),s.matrixOptions=null,s.selectBatch=null,s.unselectBatch=null,s=null}),s.dirty||n.extendFlat(s,o),s}},8689:function(t,e,r){\\\"use strict\\\";var n=r(71828),i=n.pushUnique,a=r(34098),o=r(35948);t.exports=function(t,e){var r=t.cd,s=r[0].trace,l=r[0].t,u=t.scene,c=u.matrixOptions.cdata,f=t.xaxis,h=t.yaxis,p=[];if(!u)return p;var d=!a.hasMarkers(s)&&!a.hasText(s);if(!0!==s.visible||d)return p;var v=o.getDimIndex(s,f),g=o.getDimIndex(s,h);if(!1===v||!1===g)return p;var y=l.xpx[v],m=l.ypx[g],x=c[v],b=c[g],_=(t.scene.selectBatch||[]).slice(),w=[];if(!1!==e&&!e.degenerate)for(var T=0;T<x.length;T++)e.contains([y[T],m[T]],null,T,t)?(p.push({pointNumber:T,x:x[T],y:b[T]}),i(_,T)):-1!==_.indexOf(T)?i(_,T):w.push(T);var k=u.matrixOptions;return _.length||w.length?u.selectBatch.length||u.unselectBatch.length||u.matrix.update(u.unselectedOptions,n.extendFlat({},k,u.selectedOptions,u.viewOpts)):u.matrix.update(k,null),u.selectBatch=_,u.unselectBatch=w,p}},21850:function(t,e,r){\\\"use strict\\\";var n=r(50693),i=r(12663).axisHoverFormat,a=r(5386).fF,o=r(2418),s=r(9012),l=r(1426).extendFlat,u={x:{valType:\\\"data_array\\\",editType:\\\"calc+clearAxisTypes\\\"},y:{valType:\\\"data_array\\\",editType:\\\"calc+clearAxisTypes\\\"},z:{valType:\\\"data_array\\\",editType:\\\"calc+clearAxisTypes\\\"},u:{valType:\\\"data_array\\\",editType:\\\"calc\\\"},v:{valType:\\\"data_array\\\",editType:\\\"calc\\\"},w:{valType:\\\"data_array\\\",editType:\\\"calc\\\"},starts:{x:{valType:\\\"data_array\\\",editType:\\\"calc\\\"},y:{valType:\\\"data_array\\\",editType:\\\"calc\\\"},z:{valType:\\\"data_array\\\",editType:\\\"calc\\\"},editType:\\\"calc\\\"},maxdisplayed:{valType:\\\"integer\\\",min:0,dflt:1e3,editType:\\\"calc\\\"},sizeref:{valType:\\\"number\\\",editType:\\\"calc\\\",min:0,dflt:1},text:{valType:\\\"string\\\",dflt:\\\"\\\",editType:\\\"calc\\\"},hovertext:{valType:\\\"string\\\",dflt:\\\"\\\",editType:\\\"calc\\\"},hovertemplate:a({editType:\\\"calc\\\"},{keys:[\\\"tubex\\\",\\\"tubey\\\",\\\"tubez\\\",\\\"tubeu\\\",\\\"tubev\\\",\\\"tubew\\\",\\\"norm\\\",\\\"divergence\\\"]}),uhoverformat:i(\\\"u\\\",1),vhoverformat:i(\\\"v\\\",1),whoverformat:i(\\\"w\\\",1),xhoverformat:i(\\\"x\\\"),yhoverformat:i(\\\"y\\\"),zhoverformat:i(\\\"z\\\"),showlegend:l({},s.showlegend,{dflt:!1})};l(u,n(\\\"\\\",{colorAttr:\\\"u/v/w norm\\\",showScaleDflt:!0,editTypeOverride:\\\"calc\\\"})),[\\\"opacity\\\",\\\"lightposition\\\",\\\"lighting\\\"].forEach((function(t){u[t]=o[t]})),u.hoverinfo=l({},s.hoverinfo,{editType:\\\"calc\\\",flags:[\\\"x\\\",\\\"y\\\",\\\"z\\\",\\\"u\\\",\\\"v\\\",\\\"w\\\",\\\"norm\\\",\\\"divergence\\\",\\\"text\\\",\\\"name\\\"],dflt:\\\"x+y+z+norm+text+name\\\"}),u.transforms=void 0,t.exports=u},88489:function(t,e,r){\\\"use strict\\\";var n=r(71828),i=r(78803);function a(t){var e,r,i,a,s,l,u,c,f,h,p,d,v=t._x,g=t._y,y=t._z,m=t._len,x=-1/0,b=1/0,_=-1/0,w=1/0,T=-1/0,k=1/0,A=\\\"\\\";for(m&&(u=v[0],f=g[0],p=y[0]),m>1&&(c=v[m-1],h=g[m-1],d=y[m-1]),e=0;e<m;e++)x=Math.max(x,v[e]),b=Math.min(b,v[e]),_=Math.max(_,g[e]),w=Math.min(w,g[e]),T=Math.max(T,y[e]),k=Math.min(k,y[e]),a||v[e]===u||(a=!0,A+=\\\"x\\\"),s||g[e]===f||(s=!0,A+=\\\"y\\\"),l||y[e]===p||(l=!0,A+=\\\"z\\\");a||(A+=\\\"x\\\"),s||(A+=\\\"y\\\"),l||(A+=\\\"z\\\");var M=o(t._x),S=o(t._y),E=o(t._z);A=(A=(A=A.replace(\\\"x\\\",(u>c?\\\"-\\\":\\\"+\\\")+\\\"x\\\")).replace(\\\"y\\\",(f>h?\\\"-\\\":\\\"+\\\")+\\\"y\\\")).replace(\\\"z\\\",(p>d?\\\"-\\\":\\\"+\\\")+\\\"z\\\");var L=function(){m=0,M=[],S=[],E=[]};(!m||m<M.length*S.length*E.length)&&L();var C=function(t){return\\\"x\\\"===t?v:\\\"y\\\"===t?g:y},P=function(t){return\\\"x\\\"===t?M:\\\"y\\\"===t?S:E},O=function(t){return t[m-1]<t[0]?-1:1},I=C(A[1]),D=C(A[3]),z=C(A[5]),R=P(A[1]).length,F=P(A[3]).length,B=P(A[5]).length,N=!1,j=function(t,e,r){return R*(F*t+e)+r},U=O(C(A[1])),V=O(C(A[3])),H=O(C(A[5]));for(e=0;e<B-1;e++){for(r=0;r<F-1;r++){for(i=0;i<R-1;i++){var q=j(e,r,i),G=j(e,r,i+1),Z=j(e,r+1,i),Y=j(e+1,r,i);if(I[q]*U<I[G]*U&&D[q]*V<D[Z]*V&&z[q]*H<z[Y]*H||(N=!0),N)break}if(N)break}if(N)break}return N&&(n.warn(\\\"Encountered arbitrary coordinates! Unable to input data grid.\\\"),L()),{xMin:b,yMin:w,zMin:k,xMax:x,yMax:_,zMax:T,Xs:M,Ys:S,Zs:E,len:m,fill:A}}function o(t){return n.distinctVals(t).vals}function s(t,e){if(void 0===e&&(e=t.length),n.isTypedArray(t))return t.subarray(0,e);for(var r=[],i=0;i<e;i++)r[i]=+t[i];return r}t.exports={calc:function(t,e){e._len=Math.min(e.u.length,e.v.length,e.w.length,e.x.length,e.y.length,e.z.length),e._u=s(e.u,e._len),e._v=s(e.v,e._len),e._w=s(e.w,e._len),e._x=s(e.x,e._len),e._y=s(e.y,e._len),e._z=s(e.z,e._len);var r=a(e);e._gridFill=r.fill,e._Xs=r.Xs,e._Ys=r.Ys,e._Zs=r.Zs,e._len=r.len;var n,o,l,u=0;e.starts&&(n=s(e.starts.x||[]),o=s(e.starts.y||[]),l=s(e.starts.z||[]),u=Math.min(n.length,o.length,l.length)),e._startsX=n||[],e._startsY=o||[],e._startsZ=l||[];var c,f=0,h=1/0;for(c=0;c<e._len;c++){var p=e._u[c],d=e._v[c],v=e._w[c],g=Math.sqrt(p*p+d*d+v*v);f=Math.max(f,g),h=Math.min(h,g)}for(i(t,e,{vals:[h,f],containerStr:\\\"\\\",cLetter:\\\"c\\\"}),c=0;c<u;c++){var y=n[c];r.xMax=Math.max(r.xMax,y),r.xMin=Math.min(r.xMin,y);var m=o[c];r.yMax=Math.max(r.yMax,m),r.yMin=Math.min(r.yMin,m);var x=l[c];r.zMax=Math.max(r.zMax,x),r.zMin=Math.min(r.zMin,x)}e._slen=u,e._normMax=f,e._xbnds=[r.xMin,r.xMax],e._ybnds=[r.yMin,r.yMax],e._zbnds=[r.zMin,r.zMax]},filter:s,processGrid:a}},90154:function(t,e,r){\\\"use strict\\\";var n=r(9330).gl_streamtube3d,i=n.createTubeMesh,a=r(71828),o=r(81697).parseColorScale,s=r(21081).extractOpts,l=r(90060),u={xaxis:0,yaxis:1,zaxis:2};function c(t,e){this.scene=t,this.uid=e,this.mesh=null,this.data=null}var f=c.prototype;function h(t){var e=t.length;return e>2?t.slice(1,e-1):2===e?[(t[0]+t[1])/2]:t}function p(t){var e=t.length;return 1===e?[.5,.5]:[t[1]-t[0],t[e-1]-t[e-2]]}function d(t,e){var r=t.fullSceneLayout,i=t.dataScale,c=e._len,f={};function d(t,e){var n=r[e],o=i[u[e]];return a.simpleMap(t,(function(t){return n.d2l(t)*o}))}if(f.vectors=l(d(e._u,\\\"xaxis\\\"),d(e._v,\\\"yaxis\\\"),d(e._w,\\\"zaxis\\\"),c),!c)return{positions:[],cells:[]};var v=d(e._Xs,\\\"xaxis\\\"),g=d(e._Ys,\\\"yaxis\\\"),y=d(e._Zs,\\\"zaxis\\\");if(f.meshgrid=[v,g,y],f.gridFill=e._gridFill,e._slen)f.startingPositions=l(d(e._startsX,\\\"xaxis\\\"),d(e._startsY,\\\"yaxis\\\"),d(e._startsZ,\\\"zaxis\\\"));else{for(var m=g[0],x=h(v),b=h(y),_=new Array(x.length*b.length),w=0,T=0;T<x.length;T++)for(var k=0;k<b.length;k++)_[w++]=[x[T],m,b[k]];f.startingPositions=_}f.colormap=o(e),f.tubeSize=e.sizeref,f.maxLength=e.maxdisplayed;var A=d(e._xbnds,\\\"xaxis\\\"),M=d(e._ybnds,\\\"yaxis\\\"),S=d(e._zbnds,\\\"zaxis\\\"),E=p(v),L=p(g),C=p(y),P=[[A[0]-E[0],M[0]-L[0],S[0]-C[0]],[A[1]+E[1],M[1]+L[1],S[1]+C[1]]],O=n(f,P),I=s(e);O.vertexIntensityBounds=[I.min/e._normMax,I.max/e._normMax];var D=e.lightposition;return O.lightPosition=[D.x,D.y,D.z],O.ambient=e.lighting.ambient,O.diffuse=e.lighting.diffuse,O.specular=e.lighting.specular,O.roughness=e.lighting.roughness,O.fresnel=e.lighting.fresnel,O.opacity=e.opacity,e._pad=O.tubeScale*e.sizeref*2,O}f.handlePick=function(t){var e=this.scene.fullSceneLayout,r=this.scene.dataScale;function n(t,n){var i=e[n],a=r[u[n]];return i.l2c(t)/a}if(t.object===this.mesh){var i=t.data.position,a=t.data.velocity;return t.traceCoordinate=[n(i[0],\\\"xaxis\\\"),n(i[1],\\\"yaxis\\\"),n(i[2],\\\"zaxis\\\"),n(a[0],\\\"xaxis\\\"),n(a[1],\\\"yaxis\\\"),n(a[2],\\\"zaxis\\\"),t.data.intensity*this.data._normMax,t.data.divergence],t.textLabel=this.data.hovertext||this.data.text,!0}},f.update=function(t){this.data=t;var e=d(this.scene,t);this.mesh.update(e)},f.dispose=function(){this.scene.glplot.remove(this.mesh),this.mesh.dispose()},t.exports=function(t,e){var r=t.glplot.gl,n=d(t,e),a=i(r,n),o=new c(t,e.uid);return o.mesh=a,o.data=e,a._trace=o,t.glplot.add(a),o}},22459:function(t,e,r){\\\"use strict\\\";var n=r(71828),i=r(1586),a=r(21850);t.exports=function(t,e,r,o){function s(r,i){return n.coerce(t,e,a,r,i)}var l=s(\\\"u\\\"),u=s(\\\"v\\\"),c=s(\\\"w\\\"),f=s(\\\"x\\\"),h=s(\\\"y\\\"),p=s(\\\"z\\\");l&&l.length&&u&&u.length&&c&&c.length&&f&&f.length&&h&&h.length&&p&&p.length?(s(\\\"starts.x\\\"),s(\\\"starts.y\\\"),s(\\\"starts.z\\\"),s(\\\"maxdisplayed\\\"),s(\\\"sizeref\\\"),s(\\\"lighting.ambient\\\"),s(\\\"lighting.diffuse\\\"),s(\\\"lighting.specular\\\"),s(\\\"lighting.roughness\\\"),s(\\\"lighting.fresnel\\\"),s(\\\"lightposition.x\\\"),s(\\\"lightposition.y\\\"),s(\\\"lightposition.z\\\"),i(t,e,o,s,{prefix:\\\"\\\",cLetter:\\\"c\\\"}),s(\\\"text\\\"),s(\\\"hovertext\\\"),s(\\\"hovertemplate\\\"),s(\\\"uhoverformat\\\"),s(\\\"vhoverformat\\\"),s(\\\"whoverformat\\\"),s(\\\"xhoverformat\\\"),s(\\\"yhoverformat\\\"),s(\\\"zhoverformat\\\"),e._length=null):e.visible=!1}},61510:function(t,e,r){\\\"use strict\\\";t.exports={moduleType:\\\"trace\\\",name:\\\"streamtube\\\",basePlotModule:r(58547),categories:[\\\"gl3d\\\",\\\"showLegend\\\"],attributes:r(21850),supplyDefaults:r(22459),colorbar:{min:\\\"cmin\\\",max:\\\"cmax\\\"},calc:r(88489).calc,plot:r(90154),eventData:function(t,e){return t.tubex=t.x,t.tubey=t.y,t.tubez=t.z,t.tubeu=e.traceCoordinate[3],t.tubev=e.traceCoordinate[4],t.tubew=e.traceCoordinate[5],t.norm=e.traceCoordinate[6],t.divergence=e.traceCoordinate[7],delete t.x,delete t.y,delete t.z,t},meta:{}}},57564:function(t,e,r){\\\"use strict\\\";var n=r(9012),i=r(5386).fF,a=r(5386).si,o=r(50693),s=r(27670).Y,l=r(34e3),u=r(7055),c=r(1426).extendFlat,f=r(79952).u;t.exports={labels:{valType:\\\"data_array\\\",editType:\\\"calc\\\"},parents:{valType:\\\"data_array\\\",editType:\\\"calc\\\"},values:{valType:\\\"data_array\\\",editType:\\\"calc\\\"},branchvalues:{valType:\\\"enumerated\\\",values:[\\\"remainder\\\",\\\"total\\\"],dflt:\\\"remainder\\\",editType:\\\"calc\\\"},count:{valType:\\\"flaglist\\\",flags:[\\\"branches\\\",\\\"leaves\\\"],dflt:\\\"leaves\\\",editType:\\\"calc\\\"},level:{valType:\\\"any\\\",editType:\\\"plot\\\",anim:!0},maxdepth:{valType:\\\"integer\\\",editType:\\\"plot\\\",dflt:-1},marker:c({colors:{valType:\\\"data_array\\\",editType:\\\"calc\\\"},line:{color:c({},l.marker.line.color,{dflt:null}),width:c({},l.marker.line.width,{dflt:1}),editType:\\\"calc\\\"},pattern:f,editType:\\\"calc\\\"},o(\\\"marker\\\",{colorAttr:\\\"colors\\\",anim:!1})),leaf:{opacity:{valType:\\\"number\\\",editType:\\\"style\\\",min:0,max:1},editType:\\\"plot\\\"},text:l.text,textinfo:{valType:\\\"flaglist\\\",flags:[\\\"label\\\",\\\"text\\\",\\\"value\\\",\\\"current path\\\",\\\"percent root\\\",\\\"percent entry\\\",\\\"percent parent\\\"],extras:[\\\"none\\\"],editType:\\\"plot\\\"},texttemplate:a({editType:\\\"plot\\\"},{keys:u.eventDataKeys.concat([\\\"label\\\",\\\"value\\\"])}),hovertext:l.hovertext,hoverinfo:c({},n.hoverinfo,{flags:[\\\"label\\\",\\\"text\\\",\\\"value\\\",\\\"name\\\",\\\"current path\\\",\\\"percent root\\\",\\\"percent entry\\\",\\\"percent parent\\\"],dflt:\\\"label+text+value+name\\\"}),hovertemplate:i({},{keys:u.eventDataKeys}),textfont:l.textfont,insidetextorientation:l.insidetextorientation,insidetextfont:l.insidetextfont,outsidetextfont:c({},l.outsidetextfont,{}),rotation:{valType:\\\"angle\\\",dflt:0,editType:\\\"plot\\\"},sort:l.sort,root:{color:{valType:\\\"color\\\",editType:\\\"calc\\\",dflt:\\\"rgba(0,0,0,0)\\\"},editType:\\\"calc\\\"},domain:s({name:\\\"sunburst\\\",trace:!0,editType:\\\"calc\\\"})}},66888:function(t,e,r){\\\"use strict\\\";var n=r(74875);e.name=\\\"sunburst\\\",e.plot=function(t,r,i,a){n.plotBasePlot(e.name,t,r,i,a)},e.clean=function(t,r,i,a){n.cleanBasePlot(e.name,t,r,i,a)}},52147:function(t,e,r){\\\"use strict\\\";var n=r(674),i=r(92770),a=r(71828),o=r(21081).makeColorScaleFuncFromTrace,s=r(32354).makePullColorFn,l=r(32354).generateExtendedColors,u=r(21081).calc,c=r(50606).ALMOST_EQUAL,f={},h={},p={};function d(t,e,r){var n=0,i=t.children;if(i){for(var a=i.length,o=0;o<a;o++)n+=d(i[o],e,r);r.branches&&n++}else r.leaves&&n++;return t.value=t.data.data.value=n,e._values||(e._values=[]),e._values[t.data.data.i]=n,n}e.calc=function(t,e){var r,l,f,h,p,v,g=t._fullLayout,y=e.ids,m=a.isArrayOrTypedArray(y),x=e.labels,b=e.parents,_=e.values,w=a.isArrayOrTypedArray(_),T=[],k={},A={},M=function(t){return t||\\\"number\\\"==typeof t},S=function(t){return!w||i(_[t])&&_[t]>=0};m?(r=Math.min(y.length,b.length),l=function(t){return M(y[t])&&S(t)},f=function(t){return String(y[t])}):(r=Math.min(x.length,b.length),l=function(t){return M(x[t])&&S(t)},f=function(t){return String(x[t])}),w&&(r=Math.min(r,_.length));for(var E=0;E<r;E++)if(l(E)){var L=f(E),C=M(b[E])?String(b[E]):\\\"\\\",P={i:E,id:L,pid:C,label:M(x[E])?String(x[E]):\\\"\\\"};w&&(P.v=+_[E]),T.push(P),p=L,k[h=C]?k[h].push(p):k[h]=[p],A[p]=1}if(k[\\\"\\\"]){if(k[\\\"\\\"].length>1){for(var O=a.randstr(),I=0;I<T.length;I++)\\\"\\\"===T[I].pid&&(T[I].pid=O);T.unshift({hasMultipleRoots:!0,id:O,pid:\\\"\\\",label:\\\"\\\"})}}else{var D,z=[];for(D in k)A[D]||z.push(D);if(1!==z.length)return a.warn([\\\"Multiple implied roots, cannot build\\\",e.type,\\\"hierarchy of\\\",e.name+\\\".\\\",\\\"These roots include:\\\",z.join(\\\", \\\")].join(\\\" \\\"));D=z[0],T.unshift({hasImpliedRoot:!0,id:D,pid:\\\"\\\",label:D})}try{v=n.stratify().id((function(t){return t.id})).parentId((function(t){return t.pid}))(T)}catch(t){return a.warn([\\\"Failed to build\\\",e.type,\\\"hierarchy of\\\",e.name+\\\".\\\",\\\"Error:\\\",t.message].join(\\\" \\\"))}var R=n.hierarchy(v),F=!1;if(w)switch(e.branchvalues){case\\\"remainder\\\":R.sum((function(t){return t.data.v}));break;case\\\"total\\\":R.each((function(t){var r=t.data.data,n=r.v;if(t.children){var i=t.children.reduce((function(t,e){return t+e.data.data.v}),0);if((r.hasImpliedRoot||r.hasMultipleRoots)&&(n=i),n<i*c)return F=!0,a.warn([\\\"Total value for node\\\",t.data.data.id,\\\"of\\\",e.name,\\\"is smaller than the sum of its children.\\\",\\\"\\\\nparent value =\\\",n,\\\"\\\\nchildren sum =\\\",i].join(\\\" \\\"))}t.value=n}))}else d(R,e,{branches:-1!==e.count.indexOf(\\\"branches\\\"),leaves:-1!==e.count.indexOf(\\\"leaves\\\")});if(!F){var B,N;e.sort&&R.sort((function(t,e){return e.value-t.value}));var j=e.marker.colors||[],U=!!j.length;return e._hasColorscale?(U||(j=w?e.values:e._values),u(t,e,{vals:j,containerStr:\\\"marker\\\",cLetter:\\\"c\\\"}),N=o(e.marker)):B=s(g[\\\"_\\\"+e.type+\\\"colormap\\\"]),R.each((function(t){var r=t.data.data;r.color=e._hasColorscale?N(j[r.i]):B(j[r.i],r.id)})),T[0].hierarchy=R,T}},e._runCrossTraceCalc=function(t,e){var r=e._fullLayout,n=e.calcdata,i=r[t+\\\"colorway\\\"],a=r[\\\"_\\\"+t+\\\"colormap\\\"];r[\\\"extend\\\"+t+\\\"colors\\\"]&&(i=l(i,\\\"icicle\\\"===t?p:\\\"treemap\\\"===t?h:f));var o,s=0;function u(t){var e=t.data.data,r=e.id;!1===e.color&&(a[r]?e.color=a[r]:t.parent?t.parent.parent?e.color=t.parent.data.data.color:(a[r]=e.color=i[s%i.length],s++):e.color=o)}for(var c=0;c<n.length;c++){var d=n[c][0];d.trace.type===t&&d.hierarchy&&(o=d.trace.root.color,d.hierarchy.each(u))}},e.crossTraceCalc=function(t){return e._runCrossTraceCalc(\\\"sunburst\\\",t)}},7055:function(t){\\\"use strict\\\";t.exports={CLICK_TRANSITION_TIME:750,CLICK_TRANSITION_EASING:\\\"linear\\\",eventDataKeys:[\\\"currentPath\\\",\\\"root\\\",\\\"entry\\\",\\\"percentRoot\\\",\\\"percentEntry\\\",\\\"percentParent\\\"]}},17094:function(t,e,r){\\\"use strict\\\";var n=r(71828),i=r(57564),a=r(27670).c,o=r(90769).handleText,s=r(37434).handleMarkerDefaults,l=r(21081),u=l.hasColorscale,c=l.handleDefaults;t.exports=function(t,e,r,l){function f(r,a){return n.coerce(t,e,i,r,a)}var h=f(\\\"labels\\\"),p=f(\\\"parents\\\");if(h&&h.length&&p&&p.length){var d=f(\\\"values\\\");d&&d.length?f(\\\"branchvalues\\\"):f(\\\"count\\\"),f(\\\"level\\\"),f(\\\"maxdepth\\\"),s(t,e,l,f);var v=e._hasColorscale=u(t,\\\"marker\\\",\\\"colors\\\")||(t.marker||{}).coloraxis;v&&c(t,e,l,f,{prefix:\\\"marker.\\\",cLetter:\\\"c\\\"}),f(\\\"leaf.opacity\\\",v?1:.7);var g=f(\\\"text\\\");f(\\\"texttemplate\\\"),e.texttemplate||f(\\\"textinfo\\\",Array.isArray(g)?\\\"text+label\\\":\\\"label\\\"),f(\\\"hovertext\\\"),f(\\\"hovertemplate\\\"),o(t,e,l,f,\\\"auto\\\",{moduleHasSelected:!1,moduleHasUnselected:!1,moduleHasConstrain:!1,moduleHasCliponaxis:!1,moduleHasTextangle:!1,moduleHasInsideanchor:!1}),f(\\\"insidetextorientation\\\"),f(\\\"sort\\\"),f(\\\"rotation\\\"),f(\\\"root.color\\\"),a(e,l,f),e._length=null}else e.visible=!1}},43467:function(t,e,r){\\\"use strict\\\";var n=r(91424),i=r(7901);t.exports=function(t,e,r,a,o){var s=e.data.data,l=s.i,u=o||s.color;if(l>=0){e.i=s.i;var c=r.marker;c.pattern&&c.colors&&c.pattern.shape||(c.color=u,e.color=u),n.pointStyle(t,r,a,e)}else i.fill(t,u)}},83523:function(t,e,r){\\\"use strict\\\";var n=r(39898),i=r(73972),a=r(23469).appendArrayPointValue,o=r(30211),s=r(71828),l=r(11086),u=r(2791),c=r(53581).formatPieValue;function f(t,e,r){for(var n=t.data.data,i={curveNumber:e.index,pointNumber:n.i,data:e._input,fullData:e},o=0;o<r.length;o++){var s=r[o];s in t&&(i[s]=t[s])}return\\\"parentString\\\"in t&&!u.isHierarchyRoot(t)&&(i.parent=t.parentString),a(i,e,n.i),i}t.exports=function(t,e,r,a,h){var p=a[0],d=p.trace,v=p.hierarchy,g=\\\"sunburst\\\"===d.type,y=\\\"treemap\\\"===d.type||\\\"icicle\\\"===d.type;\\\"_hasHoverLabel\\\"in d||(d._hasHoverLabel=!1),\\\"_hasHoverEvent\\\"in d||(d._hasHoverEvent=!1),t.on(\\\"mouseover\\\",(function(i){var a=r._fullLayout;if(!r._dragging&&!1!==a.hovermode){var l,m=r._fullData[d.index],x=i.data.data,b=x.i,_=u.isHierarchyRoot(i),w=u.getParent(v,i),T=u.getValue(i),k=function(t){return s.castOption(m,b,t)},A=k(\\\"hovertemplate\\\"),M=o.castHoverinfo(m,a,b),S=a.separators;if(A||M&&\\\"none\\\"!==M&&\\\"skip\\\"!==M){var E,L;g&&(E=p.cx+i.pxmid[0]*(1-i.rInscribed),L=p.cy+i.pxmid[1]*(1-i.rInscribed)),y&&(E=i._hoverX,L=i._hoverY);var C,P={},O=[],I=[],D=function(t){return-1!==O.indexOf(t)};M&&(O=\\\"all\\\"===M?m._module.attributes.hoverinfo.flags:M.split(\\\"+\\\")),P.label=x.label,D(\\\"label\\\")&&P.label&&I.push(P.label),x.hasOwnProperty(\\\"v\\\")&&(P.value=x.v,P.valueLabel=c(P.value,S),D(\\\"value\\\")&&I.push(P.valueLabel)),P.currentPath=i.currentPath=u.getPath(i.data),D(\\\"current path\\\")&&!_&&I.push(P.currentPath);var z=[],R=function(){-1===z.indexOf(C)&&(I.push(C),z.push(C))};P.percentParent=i.percentParent=T/u.getValue(w),P.parent=i.parentString=u.getPtLabel(w),D(\\\"percent parent\\\")&&(C=u.formatPercent(P.percentParent,S)+\\\" of \\\"+P.parent,R()),P.percentEntry=i.percentEntry=T/u.getValue(e),P.entry=i.entry=u.getPtLabel(e),!D(\\\"percent entry\\\")||_||i.onPathbar||(C=u.formatPercent(P.percentEntry,S)+\\\" of \\\"+P.entry,R()),P.percentRoot=i.percentRoot=T/u.getValue(v),P.root=i.root=u.getPtLabel(v),D(\\\"percent root\\\")&&!_&&(C=u.formatPercent(P.percentRoot,S)+\\\" of \\\"+P.root,R()),P.text=k(\\\"hovertext\\\")||k(\\\"text\\\"),D(\\\"text\\\")&&(C=P.text,s.isValidTextValue(C)&&I.push(C)),l=[f(i,m,h.eventDataKeys)];var F={trace:m,y:L,_x0:i._x0,_x1:i._x1,_y0:i._y0,_y1:i._y1,text:I.join(\\\"<br>\\\"),name:A||D(\\\"name\\\")?m.name:void 0,color:k(\\\"hoverlabel.bgcolor\\\")||x.color,borderColor:k(\\\"hoverlabel.bordercolor\\\"),fontFamily:k(\\\"hoverlabel.font.family\\\"),fontSize:k(\\\"hoverlabel.font.size\\\"),fontColor:k(\\\"hoverlabel.font.color\\\"),nameLength:k(\\\"hoverlabel.namelength\\\"),textAlign:k(\\\"hoverlabel.align\\\"),hovertemplate:A,hovertemplateLabels:P,eventData:l};g&&(F.x0=E-i.rInscribed*i.rpx1,F.x1=E+i.rInscribed*i.rpx1,F.idealAlign=i.pxmid[0]<0?\\\"left\\\":\\\"right\\\"),y&&(F.x=E,F.idealAlign=E<0?\\\"left\\\":\\\"right\\\");var B=[];o.loneHover(F,{container:a._hoverlayer.node(),outerContainer:a._paper.node(),gd:r,inOut_bbox:B}),l[0].bbox=B[0],d._hasHoverLabel=!0}if(y){var N=t.select(\\\"path.surface\\\");h.styleOne(N,i,m,r,{hovered:!0})}d._hasHoverEvent=!0,r.emit(\\\"plotly_hover\\\",{points:l||[f(i,m,h.eventDataKeys)],event:n.event})}})),t.on(\\\"mouseout\\\",(function(e){var i=r._fullLayout,a=r._fullData[d.index],s=n.select(this).datum();if(d._hasHoverEvent&&(e.originalEvent=n.event,r.emit(\\\"plotly_unhover\\\",{points:[f(s,a,h.eventDataKeys)],event:n.event}),d._hasHoverEvent=!1),d._hasHoverLabel&&(o.loneUnhover(i._hoverlayer.node()),d._hasHoverLabel=!1),y){var l=t.select(\\\"path.surface\\\");h.styleOne(l,s,a,r,{hovered:!1})}})),t.on(\\\"click\\\",(function(t){var e=r._fullLayout,a=r._fullData[d.index],s=g&&(u.isHierarchyRoot(t)||u.isLeaf(t)),c=u.getPtId(t),p=u.isEntry(t)?u.findEntryWithChild(v,c):u.findEntryWithLevel(v,c),y=u.getPtId(p),m={points:[f(t,a,h.eventDataKeys)],event:n.event};s||(m.nextLevel=y);var x=l.triggerHandler(r,\\\"plotly_\\\"+d.type+\\\"click\\\",m);if(!1!==x&&e.hovermode&&(r._hoverdata=[f(t,a,h.eventDataKeys)],o.click(r,n.event)),!s&&!1!==x&&!r._dragging&&!r._transitioning){i.call(\\\"_storeDirectGUIEdit\\\",a,e._tracePreGUI[a.uid],{level:a.level});var b={data:[{level:y}],traces:[d.index]},_={frame:{redraw:!1,duration:h.transitionTime},transition:{duration:h.transitionTime,easing:h.transitionEasing},mode:\\\"immediate\\\",fromcurrent:!0};o.loneUnhover(e._hoverlayer.node()),i.call(\\\"animate\\\",r,b,_)}}))}},2791:function(t,e,r){\\\"use strict\\\";var n=r(71828),i=r(7901),a=r(6964),o=r(53581);function s(t){return t.data.data.pid}e.findEntryWithLevel=function(t,r){var n;return r&&t.eachAfter((function(t){if(e.getPtId(t)===r)return n=t.copy()})),n||t},e.findEntryWithChild=function(t,r){var n;return t.eachAfter((function(t){for(var i=t.children||[],a=0;a<i.length;a++){var o=i[a];if(e.getPtId(o)===r)return n=t.copy()}})),n||t},e.isEntry=function(t){return!t.parent},e.isLeaf=function(t){return!t.children},e.getPtId=function(t){return t.data.data.id},e.getPtLabel=function(t){return t.data.data.label},e.getValue=function(t){return t.value},e.isHierarchyRoot=function(t){return\\\"\\\"===s(t)},e.setSliceCursor=function(t,r,n){var i=n.isTransitioning;if(!i){var o=t.datum();i=n.hideOnRoot&&e.isHierarchyRoot(o)||n.hideOnLeaves&&e.isLeaf(o)}a(t,i?null:\\\"pointer\\\")},e.getInsideTextFontKey=function(t,e,r,i,a){var o=(a||{}).onPathbar?\\\"pathbar.textfont\\\":\\\"insidetextfont\\\",s=r.data.data.i;return n.castOption(e,s,o+\\\".\\\"+t)||n.castOption(e,s,\\\"textfont.\\\"+t)||i.size},e.getOutsideTextFontKey=function(t,e,r,i){var a=r.data.data.i;return n.castOption(e,a,\\\"outsidetextfont.\\\"+t)||n.castOption(e,a,\\\"textfont.\\\"+t)||i.size},e.isOutsideText=function(t,r){return!t._hasColorscale&&e.isHierarchyRoot(r)},e.determineTextFont=function(t,r,a,o){return e.isOutsideText(t,r)?function(t,r,n){return{color:e.getOutsideTextFontKey(\\\"color\\\",t,r,n),family:e.getOutsideTextFontKey(\\\"family\\\",t,r,n),size:e.getOutsideTextFontKey(\\\"size\\\",t,r,n)}}(t,r,a):function(t,r,a,o){var s=(o||{}).onPathbar,l=r.data.data,u=l.i,c=n.castOption(t,u,(s?\\\"pathbar.textfont\\\":\\\"insidetextfont\\\")+\\\".color\\\");return!c&&t._input.textfont&&(c=n.castOption(t._input,u,\\\"textfont.color\\\")),{color:c||i.contrast(l.color),family:e.getInsideTextFontKey(\\\"family\\\",t,r,a,o),size:e.getInsideTextFontKey(\\\"size\\\",t,r,a,o)}}(t,r,a,o)},e.hasTransition=function(t){return!!(t&&t.duration>0)},e.getMaxDepth=function(t){return t.maxdepth>=0?t.maxdepth:1/0},e.isHeader=function(t,r){return!(e.isLeaf(t)||t.depth===r._maxDepth-1)},e.getParent=function(t,r){return e.findEntryWithLevel(t,s(r))},e.listPath=function(t,r){var n=t.parent;if(!n)return[];var i=r?[n.data[r]]:[n];return e.listPath(n,r).concat(i)},e.getPath=function(t){return e.listPath(t,\\\"label\\\").join(\\\"/\\\")+\\\"/\\\"},e.formatValue=o.formatPieValue,e.formatPercent=function(t,e){var r=n.formatPercent(t,0);return\\\"0%\\\"===r&&(r=o.formatPiePercent(t,e)),r}},87619:function(t,e,r){\\\"use strict\\\";t.exports={moduleType:\\\"trace\\\",name:\\\"sunburst\\\",basePlotModule:r(66888),categories:[],animatable:!0,attributes:r(57564),layoutAttributes:r(2654),supplyDefaults:r(17094),supplyLayoutDefaults:r(57034),calc:r(52147).calc,crossTraceCalc:r(52147).crossTraceCalc,plot:r(24714).plot,style:r(29969).style,colorbar:r(4898),meta:{}}},2654:function(t){\\\"use strict\\\";t.exports={sunburstcolorway:{valType:\\\"colorlist\\\",editType:\\\"calc\\\"},extendsunburstcolors:{valType:\\\"boolean\\\",dflt:!0,editType:\\\"calc\\\"}}},57034:function(t,e,r){\\\"use strict\\\";var n=r(71828),i=r(2654);t.exports=function(t,e){function r(r,a){return n.coerce(t,e,i,r,a)}r(\\\"sunburstcolorway\\\",e.colorway),r(\\\"extendsunburstcolors\\\")}},24714:function(t,e,r){\\\"use strict\\\";var n=r(39898),i=r(674),a=r(81684).sX,o=r(91424),s=r(71828),l=r(63893),u=r(72597),c=u.recordMinTextSize,f=u.clearMinTextSize,h=r(14575),p=r(53581).getRotationAngle,d=h.computeTransform,v=h.transformInsideText,g=r(29969).styleOne,y=r(16688).resizeText,m=r(83523),x=r(7055),b=r(2791);function _(t,r,u,f){var h=t._context.staticPlot,y=t._fullLayout,_=!y.uniformtext.mode&&b.hasTransition(f),T=n.select(u).selectAll(\\\"g.slice\\\"),k=r[0],A=k.trace,M=k.hierarchy,S=b.findEntryWithLevel(M,A.level),E=b.getMaxDepth(A),L=y._size,C=A.domain,P=L.w*(C.x[1]-C.x[0]),O=L.h*(C.y[1]-C.y[0]),I=.5*Math.min(P,O),D=k.cx=L.l+L.w*(C.x[1]+C.x[0])/2,z=k.cy=L.t+L.h*(1-C.y[0])-O/2;if(!S)return T.remove();var R=null,F={};_&&T.each((function(t){F[b.getPtId(t)]={rpx0:t.rpx0,rpx1:t.rpx1,x0:t.x0,x1:t.x1,transform:t.transform},!R&&b.isEntry(t)&&(R=t)}));var B=function(t){return i.partition().size([2*Math.PI,t.height+1])(t)}(S).descendants(),N=S.height+1,j=0,U=E;k.hasMultipleRoots&&b.isHierarchyRoot(S)&&(B=B.slice(1),N-=1,j=1,U+=1),B=B.filter((function(t){return t.y1<=U}));var V=p(A.rotation);V&&B.forEach((function(t){t.x0+=V,t.x1+=V}));var H=Math.min(N,E),q=function(t){return(t-j)/H*I},G=function(t,e){return[t*Math.cos(e),-t*Math.sin(e)]},Z=function(t){return s.pathAnnulus(t.rpx0,t.rpx1,t.x0,t.x1,D,z)},Y=function(t){return D+w(t)[0]*(t.transform.rCenter||0)+(t.transform.x||0)},W=function(t){return z+w(t)[1]*(t.transform.rCenter||0)+(t.transform.y||0)};(T=T.data(B,b.getPtId)).enter().append(\\\"g\\\").classed(\\\"slice\\\",!0),_?T.exit().transition().each((function(){var t=n.select(this);t.select(\\\"path.surface\\\").transition().attrTween(\\\"d\\\",(function(t){var e=function(t){var e,r=b.getPtId(t),n=F[r],i=F[b.getPtId(S)];if(i){var o=(t.x1>i.x1?2*Math.PI:0)+V;e=t.rpx1<i.rpx1?{x0:t.x0,x1:t.x1,rpx0:0,rpx1:0}:{x0:o,x1:o,rpx0:t.rpx0,rpx1:t.rpx1}}else{var s,l=b.getPtId(t.parent);T.each((function(t){if(b.getPtId(t)===l)return s=t}));var u,c=s.children;c.forEach((function(t,e){if(b.getPtId(t)===r)return u=e}));var f=c.length,h=a(s.x0,s.x1);e={rpx0:I,rpx1:I,x0:h(u/f),x1:h((u+1)/f)}}return a(n,e)}(t);return function(t){return Z(e(t))}})),t.select(\\\"g.slicetext\\\").attr(\\\"opacity\\\",0)})).remove():T.exit().remove(),T.order();var X=null;if(_&&R){var J=b.getPtId(R);T.each((function(t){null===X&&b.getPtId(t)===J&&(X=t.x1)}))}var K=T;function $(t){var e=t.parent,r=F[b.getPtId(e)],n={};if(r){var i=e.children,o=i.indexOf(t),s=i.length,l=a(r.x0,r.x1);n.x0=l(o/s),n.x1=l(o/s)}else n.x0=n.x1=0;return n}_&&(K=K.transition().each(\\\"end\\\",(function(){var e=n.select(this);b.setSliceCursor(e,t,{hideOnRoot:!0,hideOnLeaves:!0,isTransitioning:!1})}))),K.each((function(i){var u=n.select(this),f=s.ensureSingle(u,\\\"path\\\",\\\"surface\\\",(function(t){t.style(\\\"pointer-events\\\",h?\\\"none\\\":\\\"all\\\")}));i.rpx0=q(i.y0),i.rpx1=q(i.y1),i.xmid=(i.x0+i.x1)/2,i.pxmid=G(i.rpx1,i.xmid),i.midangle=-(i.xmid-Math.PI/2),i.startangle=-(i.x0-Math.PI/2),i.stopangle=-(i.x1-Math.PI/2),i.halfangle=.5*Math.min(s.angleDelta(i.x0,i.x1)||Math.PI,Math.PI),i.ring=1-i.rpx0/i.rpx1,i.rInscribed=function(t){return 0===t.rpx0&&s.isFullCircle([t.x0,t.x1])?1:Math.max(0,Math.min(1/(1+1/Math.sin(t.halfangle)),t.ring/2))}(i),_?f.transition().attrTween(\\\"d\\\",(function(t){var e=function(t){var e,r=F[b.getPtId(t)],n={x0:t.x0,x1:t.x1,rpx0:t.rpx0,rpx1:t.rpx1};if(r)e=r;else if(R)if(t.parent)if(X){var i=(t.x1>X?2*Math.PI:0)+V;e={x0:i,x1:i}}else e={rpx0:I,rpx1:I},s.extendFlat(e,$(t));else e={rpx0:0,rpx1:0};else e={x0:V,x1:V};return a(e,n)}(t);return function(t){return Z(e(t))}})):f.attr(\\\"d\\\",Z),u.call(m,S,t,r,{eventDataKeys:x.eventDataKeys,transitionTime:x.CLICK_TRANSITION_TIME,transitionEasing:x.CLICK_TRANSITION_EASING}).call(b.setSliceCursor,t,{hideOnRoot:!0,hideOnLeaves:!0,isTransitioning:t._transitioning}),f.call(g,i,A,t);var p=s.ensureSingle(u,\\\"g\\\",\\\"slicetext\\\"),w=s.ensureSingle(p,\\\"text\\\",\\\"\\\",(function(t){t.attr(\\\"data-notex\\\",1)})),T=s.ensureUniformFontSize(t,b.determineTextFont(A,i,y.font));w.text(e.formatSliceLabel(i,S,A,r,y)).classed(\\\"slicetext\\\",!0).attr(\\\"text-anchor\\\",\\\"middle\\\").call(o.font,T).call(l.convertToTspans,t);var M=o.bBox(w.node());i.transform=v(M,i,k),i.transform.targetX=Y(i),i.transform.targetY=W(i);var E=function(t,e){var r=t.transform;return d(r,e),r.fontSize=T.size,c(A.type,r,y),s.getTextTransform(r)};_?w.transition().attrTween(\\\"transform\\\",(function(t){var e=function(t){var e,r=F[b.getPtId(t)],n=t.transform;if(r)e=r;else if(e={rpx1:t.rpx1,transform:{textPosAngle:n.textPosAngle,scale:0,rotate:n.rotate,rCenter:n.rCenter,x:n.x,y:n.y}},R)if(t.parent)if(X){var i=t.x1>X?2*Math.PI:0;e.x0=e.x1=i}else s.extendFlat(e,$(t));else e.x0=e.x1=V;else e.x0=e.x1=V;var o=a(e.transform.textPosAngle,t.transform.textPosAngle),l=a(e.rpx1,t.rpx1),u=a(e.x0,t.x0),f=a(e.x1,t.x1),h=a(e.transform.scale,n.scale),p=a(e.transform.rotate,n.rotate),d=0===n.rCenter?3:0===e.transform.rCenter?1/3:1,v=a(e.transform.rCenter,n.rCenter);return function(t){var e=l(t),r=u(t),i=f(t),a=function(t){return v(Math.pow(t,d))}(t),s={pxmid:G(e,(r+i)/2),rpx1:e,transform:{textPosAngle:o(t),rCenter:a,x:n.x,y:n.y}};return c(A.type,n,y),{transform:{targetX:Y(s),targetY:W(s),scale:h(t),rotate:p(t),rCenter:a}}}}(t);return function(t){return E(e(t),M)}})):w.attr(\\\"transform\\\",E(i,M))}))}function w(t){return e=t.rpx1,r=t.transform.textPosAngle,[e*Math.sin(r),-e*Math.cos(r)];var e,r}e.plot=function(t,e,r,i){var a,o,s=t._fullLayout,l=s._sunburstlayer,u=!r,c=!s.uniformtext.mode&&b.hasTransition(r);f(\\\"sunburst\\\",s),(a=l.selectAll(\\\"g.trace.sunburst\\\").data(e,(function(t){return t[0].trace.uid}))).enter().append(\\\"g\\\").classed(\\\"trace\\\",!0).classed(\\\"sunburst\\\",!0).attr(\\\"stroke-linejoin\\\",\\\"round\\\"),a.order(),c?(i&&(o=i()),n.transition().duration(r.duration).ease(r.easing).each(\\\"end\\\",(function(){o&&o()})).each(\\\"interrupt\\\",(function(){o&&o()})).each((function(){l.selectAll(\\\"g.trace\\\").each((function(e){_(t,e,this,r)}))}))):(a.each((function(e){_(t,e,this,r)})),s.uniformtext.mode&&y(t,s._sunburstlayer.selectAll(\\\".trace\\\"),\\\"sunburst\\\")),u&&a.exit().remove()},e.formatSliceLabel=function(t,e,r,n,i){var a=r.texttemplate,o=r.textinfo;if(!(a||o&&\\\"none\\\"!==o))return\\\"\\\";var l=i.separators,u=n[0],c=t.data.data,f=u.hierarchy,h=b.isHierarchyRoot(t),p=b.getParent(f,t),d=b.getValue(t);if(!a){var v,g=o.split(\\\"+\\\"),y=function(t){return-1!==g.indexOf(t)},m=[];if(y(\\\"label\\\")&&c.label&&m.push(c.label),c.hasOwnProperty(\\\"v\\\")&&y(\\\"value\\\")&&m.push(b.formatValue(c.v,l)),!h){y(\\\"current path\\\")&&m.push(b.getPath(t.data));var x=0;y(\\\"percent parent\\\")&&x++,y(\\\"percent entry\\\")&&x++,y(\\\"percent root\\\")&&x++;var _=x>1;if(x){var w,T=function(t){v=b.formatPercent(w,l),_&&(v+=\\\" of \\\"+t),m.push(v)};y(\\\"percent parent\\\")&&!h&&(w=d/b.getValue(p),T(\\\"parent\\\")),y(\\\"percent entry\\\")&&(w=d/b.getValue(e),T(\\\"entry\\\")),y(\\\"percent root\\\")&&(w=d/b.getValue(f),T(\\\"root\\\"))}}return y(\\\"text\\\")&&(v=s.castOption(r,c.i,\\\"text\\\"),s.isValidTextValue(v)&&m.push(v)),m.join(\\\"<br>\\\")}var k=s.castOption(r,c.i,\\\"texttemplate\\\");if(!k)return\\\"\\\";var A={};c.label&&(A.label=c.label),c.hasOwnProperty(\\\"v\\\")&&(A.value=c.v,A.valueLabel=b.formatValue(c.v,l)),A.currentPath=b.getPath(t.data),h||(A.percentParent=d/b.getValue(p),A.percentParentLabel=b.formatPercent(A.percentParent,l),A.parent=b.getPtLabel(p)),A.percentEntry=d/b.getValue(e),A.percentEntryLabel=b.formatPercent(A.percentEntry,l),A.entry=b.getPtLabel(e),A.percentRoot=d/b.getValue(f),A.percentRootLabel=b.formatPercent(A.percentRoot,l),A.root=b.getPtLabel(f),c.hasOwnProperty(\\\"color\\\")&&(A.color=c.color);var M=s.castOption(r,c.i,\\\"text\\\");return(s.isValidTextValue(M)||\\\"\\\"===M)&&(A.text=M),A.customdata=s.castOption(r,c.i,\\\"customdata\\\"),s.texttemplateString(k,A,i._d3locale,A,r._meta||{})}},29969:function(t,e,r){\\\"use strict\\\";var n=r(39898),i=r(7901),a=r(71828),o=r(72597).resizeText,s=r(43467);function l(t,e,r,n){var o=e.data.data,l=!e.children,u=o.i,c=a.castOption(r,u,\\\"marker.line.color\\\")||i.defaultLine,f=a.castOption(r,u,\\\"marker.line.width\\\")||0;t.call(s,e,r,n).style(\\\"stroke-width\\\",f).call(i.stroke,c).style(\\\"opacity\\\",l?r.leaf.opacity:null)}t.exports={style:function(t){var e=t._fullLayout._sunburstlayer.selectAll(\\\".trace\\\");o(t,e,\\\"sunburst\\\"),e.each((function(e){var r=n.select(this),i=e[0].trace;r.style(\\\"opacity\\\",i.opacity),r.selectAll(\\\"path.surface\\\").each((function(e){n.select(this).call(l,e,i,t)}))}))},styleOne:l}},54532:function(t,e,r){\\\"use strict\\\";var n=r(7901),i=r(50693),a=r(12663).axisHoverFormat,o=r(5386).fF,s=r(9012),l=r(1426).extendFlat,u=r(30962).overrideAll;function c(t){return{show:{valType:\\\"boolean\\\",dflt:!1},start:{valType:\\\"number\\\",dflt:null,editType:\\\"plot\\\"},end:{valType:\\\"number\\\",dflt:null,editType:\\\"plot\\\"},size:{valType:\\\"number\\\",dflt:null,min:0,editType:\\\"plot\\\"},project:{x:{valType:\\\"boolean\\\",dflt:!1},y:{valType:\\\"boolean\\\",dflt:!1},z:{valType:\\\"boolean\\\",dflt:!1}},color:{valType:\\\"color\\\",dflt:n.defaultLine},usecolormap:{valType:\\\"boolean\\\",dflt:!1},width:{valType:\\\"number\\\",min:1,max:16,dflt:2},highlight:{valType:\\\"boolean\\\",dflt:!0},highlightcolor:{valType:\\\"color\\\",dflt:n.defaultLine},highlightwidth:{valType:\\\"number\\\",min:1,max:16,dflt:2}}}var f=t.exports=u(l({z:{valType:\\\"data_array\\\"},x:{valType:\\\"data_array\\\"},y:{valType:\\\"data_array\\\"},text:{valType:\\\"string\\\",dflt:\\\"\\\",arrayOk:!0},hovertext:{valType:\\\"string\\\",dflt:\\\"\\\",arrayOk:!0},hovertemplate:o(),xhoverformat:a(\\\"x\\\"),yhoverformat:a(\\\"y\\\"),zhoverformat:a(\\\"z\\\"),connectgaps:{valType:\\\"boolean\\\",dflt:!1,editType:\\\"calc\\\"},surfacecolor:{valType:\\\"data_array\\\"}},i(\\\"\\\",{colorAttr:\\\"z or surfacecolor\\\",showScaleDflt:!0,autoColorDflt:!1,editTypeOverride:\\\"calc\\\"}),{contours:{x:c(),y:c(),z:c()},hidesurface:{valType:\\\"boolean\\\",dflt:!1},lightposition:{x:{valType:\\\"number\\\",min:-1e5,max:1e5,dflt:10},y:{valType:\\\"number\\\",min:-1e5,max:1e5,dflt:1e4},z:{valType:\\\"number\\\",min:-1e5,max:1e5,dflt:0}},lighting:{ambient:{valType:\\\"number\\\",min:0,max:1,dflt:.8},diffuse:{valType:\\\"number\\\",min:0,max:1,dflt:.8},specular:{valType:\\\"number\\\",min:0,max:2,dflt:.05},roughness:{valType:\\\"number\\\",min:0,max:1,dflt:.5},fresnel:{valType:\\\"number\\\",min:0,max:5,dflt:.2}},opacity:{valType:\\\"number\\\",min:0,max:1,dflt:1},opacityscale:{valType:\\\"any\\\",editType:\\\"calc\\\"},_deprecated:{zauto:l({},i.zauto,{}),zmin:l({},i.zmin,{}),zmax:l({},i.zmax,{})},hoverinfo:l({},s.hoverinfo),showlegend:l({},s.showlegend,{dflt:!1})}),\\\"calc\\\",\\\"nested\\\");f.x.editType=f.y.editType=f.z.editType=\\\"calc+clearAxisTypes\\\",f.transforms=void 0},18396:function(t,e,r){\\\"use strict\\\";var n=r(78803);t.exports=function(t,e){e.surfacecolor?n(t,e,{vals:e.surfacecolor,containerStr:\\\"\\\",cLetter:\\\"c\\\"}):n(t,e,{vals:e.z,containerStr:\\\"\\\",cLetter:\\\"c\\\"})}},43768:function(t,e,r){\\\"use strict\\\";var n=r(9330).gl_surface3d,i=r(9330).ndarray,a=r(9330).ndarray_linear_interpolate.d2,o=r(824),s=r(43907),l=r(71828).isArrayOrTypedArray,u=r(81697).parseColorScale,c=r(78614),f=r(21081).extractOpts;function h(t,e,r){this.scene=t,this.uid=r,this.surface=e,this.data=null,this.showContour=[!1,!1,!1],this.contourStart=[null,null,null],this.contourEnd=[null,null,null],this.contourSize=[0,0,0],this.minValues=[1/0,1/0,1/0],this.maxValues=[-1/0,-1/0,-1/0],this.dataScaleX=1,this.dataScaleY=1,this.refineData=!0,this.objectOffset=[0,0,0]}var p=h.prototype;p.getXat=function(t,e,r,n){var i=l(this.data.x)?l(this.data.x[0])?this.data.x[e][t]:this.data.x[t]:t;return void 0===r?i:n.d2l(i,0,r)},p.getYat=function(t,e,r,n){var i=l(this.data.y)?l(this.data.y[0])?this.data.y[e][t]:this.data.y[e]:e;return void 0===r?i:n.d2l(i,0,r)},p.getZat=function(t,e,r,n){var i=this.data.z[e][t];return null===i&&this.data.connectgaps&&this.data._interpolatedZ&&(i=this.data._interpolatedZ[e][t]),void 0===r?i:n.d2l(i,0,r)},p.handlePick=function(t){if(t.object===this.surface){var e=(t.data.index[0]-1)/this.dataScaleX-1,r=(t.data.index[1]-1)/this.dataScaleY-1,n=Math.max(Math.min(Math.round(e),this.data.z[0].length-1),0),i=Math.max(Math.min(Math.round(r),this.data._ylength-1),0);t.index=[n,i],t.traceCoordinate=[this.getXat(n,i),this.getYat(n,i),this.getZat(n,i)],t.dataCoordinate=[this.getXat(n,i,this.data.xcalendar,this.scene.fullSceneLayout.xaxis),this.getYat(n,i,this.data.ycalendar,this.scene.fullSceneLayout.yaxis),this.getZat(n,i,this.data.zcalendar,this.scene.fullSceneLayout.zaxis)];for(var a=0;a<3;a++){null!=t.dataCoordinate[a]&&(t.dataCoordinate[a]*=this.scene.dataScale[a])}var o=this.data.hovertext||this.data.text;return Array.isArray(o)&&o[i]&&void 0!==o[i][n]?t.textLabel=o[i][n]:t.textLabel=o||\\\"\\\",t.data.dataCoordinate=t.dataCoordinate.slice(),this.surface.highlight(t.data),this.scene.glplot.spikes.position=t.dataCoordinate,!0}};var d=[2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97,101,103,107,109,113,127,131,137,139,149,151,157,163,167,173,179,181,191,193,197,199,211,223,227,229,233,239,241,251,257,263,269,271,277,281,283,293,307,311,313,317,331,337,347,349,353,359,367,373,379,383,389,397,401,409,419,421,431,433,439,443,449,457,461,463,467,479,487,491,499,503,509,521,523,541,547,557,563,569,571,577,587,593,599,601,607,613,617,619,631,641,643,647,653,659,661,673,677,683,691,701,709,719,727,733,739,743,751,757,761,769,773,787,797,809,811,821,823,827,829,839,853,857,859,863,877,881,883,887,907,911,919,929,937,941,947,953,967,971,977,983,991,997,1009,1013,1019,1021,1031,1033,1039,1049,1051,1061,1063,1069,1087,1091,1093,1097,1103,1109,1117,1123,1129,1151,1153,1163,1171,1181,1187,1193,1201,1213,1217,1223,1229,1231,1237,1249,1259,1277,1279,1283,1289,1291,1297,1301,1303,1307,1319,1321,1327,1361,1367,1373,1381,1399,1409,1423,1427,1429,1433,1439,1447,1451,1453,1459,1471,1481,1483,1487,1489,1493,1499,1511,1523,1531,1543,1549,1553,1559,1567,1571,1579,1583,1597,1601,1607,1609,1613,1619,1621,1627,1637,1657,1663,1667,1669,1693,1697,1699,1709,1721,1723,1733,1741,1747,1753,1759,1777,1783,1787,1789,1801,1811,1823,1831,1847,1861,1867,1871,1873,1877,1879,1889,1901,1907,1913,1931,1933,1949,1951,1973,1979,1987,1993,1997,1999,2003,2011,2017,2027,2029,2039,2053,2063,2069,2081,2083,2087,2089,2099,2111,2113,2129,2131,2137,2141,2143,2153,2161,2179,2203,2207,2213,2221,2237,2239,2243,2251,2267,2269,2273,2281,2287,2293,2297,2309,2311,2333,2339,2341,2347,2351,2357,2371,2377,2381,2383,2389,2393,2399,2411,2417,2423,2437,2441,2447,2459,2467,2473,2477,2503,2521,2531,2539,2543,2549,2551,2557,2579,2591,2593,2609,2617,2621,2633,2647,2657,2659,2663,2671,2677,2683,2687,2689,2693,2699,2707,2711,2713,2719,2729,2731,2741,2749,2753,2767,2777,2789,2791,2797,2801,2803,2819,2833,2837,2843,2851,2857,2861,2879,2887,2897,2903,2909,2917,2927,2939,2953,2957,2963,2969,2971,2999];function v(t,e){if(t<e)return 0;for(var r=0;0===Math.floor(t%e);)t/=e,r++;return r}function g(t){for(var e=[],r=0;r<d.length;r++){var n=d[r];e.push(v(t,n))}return e}function y(t){for(var e=g(t),r=t,n=0;n<d.length;n++)if(e[n]>0){r=d[n];break}return r}function m(t,e){if(!(t<1||e<1)){for(var r=g(t),n=g(e),i=1,a=0;a<d.length;a++)i*=Math.pow(d[a],Math.max(r[a],n[a]));return i}}p.calcXnums=function(t){var e,r=[];for(e=1;e<t;e++){var n=this.getXat(e-1,0),i=this.getXat(e,0);r[e-1]=i!==n&&null!=n&&null!=i?Math.abs(i-n):0}var a=0;for(e=1;e<t;e++)a+=r[e-1];for(e=1;e<t;e++)0===r[e-1]?r[e-1]=1:r[e-1]=Math.round(a/r[e-1]);return r},p.calcYnums=function(t){var e,r=[];for(e=1;e<t;e++){var n=this.getYat(0,e-1),i=this.getYat(0,e);r[e-1]=i!==n&&null!=n&&null!=i?Math.abs(i-n):0}var a=0;for(e=1;e<t;e++)a+=r[e-1];for(e=1;e<t;e++)0===r[e-1]?r[e-1]=1:r[e-1]=Math.round(a/r[e-1]);return r};var x=[1,2,4,6,12,24,36,48,60,120,180,240,360,720,840,1260],b=x[9],_=x[13];function w(t,e,r){var n=r[8]+r[2]*e[0]+r[5]*e[1];return t[0]=(r[6]+r[0]*e[0]+r[3]*e[1])/n,t[1]=(r[7]+r[1]*e[0]+r[4]*e[1])/n,t}function T(t,e,r){return function(t,e,r,n){for(var i=[0,0],o=t.shape[0],s=t.shape[1],l=0;l<o;l++)for(var u=0;u<s;u++)r(i,[l,u],n),t.set(l,u,a(e,i[0],i[1]))}(t,e,w,r),t}function k(t,e){for(var r=!1,n=0;n<t.length;n++)if(e===t[n]){r=!0;break}!1===r&&t.push(e)}p.estimateScale=function(t,e){for(var r=1+function(t){if(0!==t.length){for(var e=1,r=0;r<t.length;r++)e=m(e,t[r]);return e}}(0===e?this.calcXnums(t):this.calcYnums(t));r<b;)r*=2;for(;r>_;)r--,r/=y(r),++r<b&&(r=_);var n=Math.round(r/t);return n>1?n:1},p.refineCoords=function(t){for(var e=this.dataScaleX,r=this.dataScaleY,n=t[0].shape[0],a=t[0].shape[1],o=0|Math.floor(t[0].shape[0]*e+1),s=0|Math.floor(t[0].shape[1]*r+1),l=1+n+1,u=1+a+1,c=i(new Float32Array(l*u),[l,u]),f=[1/e,0,0,0,1/r,0,0,0,1],h=0;h<t.length;++h){this.surface.padField(c,t[h]);var p=i(new Float32Array(o*s),[o,s]);T(p,c,f),t[h]=p}},p.setContourLevels=function(){var t,e,r,n=[[],[],[]],i=[!1,!1,!1],a=!1;for(t=0;t<3;++t)if(this.showContour[t]&&(a=!0,this.contourSize[t]>0&&null!==this.contourStart[t]&&null!==this.contourEnd[t]&&this.contourEnd[t]>this.contourStart[t]))for(i[t]=!0,e=this.contourStart[t];e<this.contourEnd[t];e+=this.contourSize[t])r=e*this.scene.dataScale[t],k(n[t],r);if(a){var o=[[],[],[]];for(t=0;t<3;++t)this.showContour[t]&&(o[t]=i[t]?n[t]:this.scene.contourLevels[t]);this.surface.update({levels:o})}},p.update=function(t){var e,r,n,a,l=this.scene,h=l.fullSceneLayout,p=this.surface,d=u(t),v=l.dataScale,g=t.z[0].length,y=t._ylength,m=l.contourLevels;this.data=t;var x=[];for(e=0;e<3;e++)for(x[e]=[],r=0;r<g;r++)x[e][r]=[];for(r=0;r<g;r++)for(n=0;n<y;n++)x[0][r][n]=this.getXat(r,n,t.xcalendar,h.xaxis),x[1][r][n]=this.getYat(r,n,t.ycalendar,h.yaxis),x[2][r][n]=this.getZat(r,n,t.zcalendar,h.zaxis);if(t.connectgaps)for(t._emptypoints=s(x[2]),o(x[2],t._emptypoints),t._interpolatedZ=[],r=0;r<g;r++)for(t._interpolatedZ[r]=[],n=0;n<y;n++)t._interpolatedZ[r][n]=x[2][r][n];for(e=0;e<3;e++)for(r=0;r<g;r++)for(n=0;n<y;n++)null==(a=x[e][r][n])?x[e][r][n]=NaN:a=x[e][r][n]*=v[e];for(e=0;e<3;e++)for(r=0;r<g;r++)for(n=0;n<y;n++)null!=(a=x[e][r][n])&&(this.minValues[e]>a&&(this.minValues[e]=a),this.maxValues[e]<a&&(this.maxValues[e]=a));for(e=0;e<3;e++)this.objectOffset[e]=.5*(this.minValues[e]+this.maxValues[e]);for(e=0;e<3;e++)for(r=0;r<g;r++)for(n=0;n<y;n++)null!=(a=x[e][r][n])&&(x[e][r][n]-=this.objectOffset[e]);var b=[i(new Float32Array(g*y),[g,y]),i(new Float32Array(g*y),[g,y]),i(new Float32Array(g*y),[g,y])];for(e=0;e<3;e++)for(r=0;r<g;r++)for(n=0;n<y;n++)b[e].set(r,n,x[e][r][n]);x=[];var w={colormap:d,levels:[[],[],[]],showContour:[!0,!0,!0],showSurface:!t.hidesurface,contourProject:[[!1,!1,!1],[!1,!1,!1],[!1,!1,!1]],contourWidth:[1,1,1],contourColor:[[1,1,1,1],[1,1,1,1],[1,1,1,1]],contourTint:[1,1,1],dynamicColor:[[1,1,1,1],[1,1,1,1],[1,1,1,1]],dynamicWidth:[1,1,1],dynamicTint:[1,1,1],opacityscale:t.opacityscale,opacity:t.opacity},T=f(t);if(w.intensityBounds=[T.min,T.max],t.surfacecolor){var k=i(new Float32Array(g*y),[g,y]);for(r=0;r<g;r++)for(n=0;n<y;n++)k.set(r,n,t.surfacecolor[n][r]);b.push(k)}else w.intensityBounds[0]*=v[2],w.intensityBounds[1]*=v[2];(_<b[0].shape[0]||_<b[0].shape[1])&&(this.refineData=!1),!0===this.refineData&&(this.dataScaleX=this.estimateScale(b[0].shape[0],0),this.dataScaleY=this.estimateScale(b[0].shape[1],1),1===this.dataScaleX&&1===this.dataScaleY||this.refineCoords(b)),t.surfacecolor&&(w.intensity=b.pop());var A=[!0,!0,!0],M=[\\\"x\\\",\\\"y\\\",\\\"z\\\"];for(e=0;e<3;++e){var S=t.contours[M[e]];A[e]=S.highlight,w.showContour[e]=S.show||S.highlight,w.showContour[e]&&(w.contourProject[e]=[S.project.x,S.project.y,S.project.z],S.show?(this.showContour[e]=!0,w.levels[e]=m[e],p.highlightColor[e]=w.contourColor[e]=c(S.color),S.usecolormap?p.highlightTint[e]=w.contourTint[e]=0:p.highlightTint[e]=w.contourTint[e]=1,w.contourWidth[e]=S.width,this.contourStart[e]=S.start,this.contourEnd[e]=S.end,this.contourSize[e]=S.size):(this.showContour[e]=!1,this.contourStart[e]=null,this.contourEnd[e]=null,this.contourSize[e]=0),S.highlight&&(w.dynamicColor[e]=c(S.highlightcolor),w.dynamicWidth[e]=S.highlightwidth))}(function(t){var e=t[0].rgb,r=t[t.length-1].rgb;return e[0]===r[0]&&e[1]===r[1]&&e[2]===r[2]&&e[3]===r[3]})(d)&&(w.vertexColor=!0),w.objectOffset=this.objectOffset,w.coords=b,p.update(w),p.visible=t.visible,p.enableDynamic=A,p.enableHighlight=A,p.snapToData=!0,\\\"lighting\\\"in t&&(p.ambientLight=t.lighting.ambient,p.diffuseLight=t.lighting.diffuse,p.specularLight=t.lighting.specular,p.roughness=t.lighting.roughness,p.fresnel=t.lighting.fresnel),\\\"lightposition\\\"in t&&(p.lightPosition=[t.lightposition.x,t.lightposition.y,t.lightposition.z])},p.dispose=function(){this.scene.glplot.remove(this.surface),this.surface.dispose()},t.exports=function(t,e){var r=t.glplot.gl,i=n({gl:r}),a=new h(t,i,e.uid);return i._trace=a,a.update(e),t.glplot.add(i),a}},91831:function(t,e,r){\\\"use strict\\\";var n=r(73972),i=r(71828),a=r(1586),o=r(54532);function s(t,e,r,n){var i=n(\\\"opacityscale\\\");\\\"max\\\"===i?e.opacityscale=[[0,.1],[1,1]]:\\\"min\\\"===i?e.opacityscale=[[0,1],[1,.1]]:\\\"extremes\\\"===i?e.opacityscale=function(t,e){for(var r=[],n=0;n<32;n++){var i=n/31,a=.1+.9*(1-Math.pow(Math.sin(1*i*Math.PI),2));r.push([i,Math.max(0,Math.min(1,a))])}return r}():function(t){var e=0;if(!Array.isArray(t)||t.length<2)return!1;if(!t[0]||!t[t.length-1])return!1;if(0!=+t[0][0]||1!=+t[t.length-1][0])return!1;for(var r=0;r<t.length;r++){var n=t[r];if(2!==n.length||+n[0]<e)return!1;e=+n[0]}return!0}(i)||(e.opacityscale=void 0)}function l(t,e,r){e in t&&!(r in t)&&(t[r]=t[e])}t.exports={supplyDefaults:function(t,e,r,u){var c,f;function h(r,n){return i.coerce(t,e,o,r,n)}var p=h(\\\"x\\\"),d=h(\\\"y\\\"),v=h(\\\"z\\\");if(!v||!v.length||p&&p.length<1||d&&d.length<1)e.visible=!1;else{e._xlength=Array.isArray(p)&&i.isArrayOrTypedArray(p[0])?v.length:v[0].length,e._ylength=v.length,n.getComponentMethod(\\\"calendars\\\",\\\"handleTraceDefaults\\\")(t,e,[\\\"x\\\",\\\"y\\\",\\\"z\\\"],u),h(\\\"text\\\"),h(\\\"hovertext\\\"),h(\\\"hovertemplate\\\"),h(\\\"xhoverformat\\\"),h(\\\"yhoverformat\\\"),h(\\\"zhoverformat\\\"),[\\\"lighting.ambient\\\",\\\"lighting.diffuse\\\",\\\"lighting.specular\\\",\\\"lighting.roughness\\\",\\\"lighting.fresnel\\\",\\\"lightposition.x\\\",\\\"lightposition.y\\\",\\\"lightposition.z\\\",\\\"hidesurface\\\",\\\"connectgaps\\\",\\\"opacity\\\"].forEach((function(t){h(t)}));var g=h(\\\"surfacecolor\\\"),y=[\\\"x\\\",\\\"y\\\",\\\"z\\\"];for(c=0;c<3;++c){var m=\\\"contours.\\\"+y[c],x=h(m+\\\".show\\\"),b=h(m+\\\".highlight\\\");if(x||b)for(f=0;f<3;++f)h(m+\\\".project.\\\"+y[f]);x&&(h(m+\\\".color\\\"),h(m+\\\".width\\\"),h(m+\\\".usecolormap\\\")),b&&(h(m+\\\".highlightcolor\\\"),h(m+\\\".highlightwidth\\\")),h(m+\\\".start\\\"),h(m+\\\".end\\\"),h(m+\\\".size\\\")}g||(l(t,\\\"zmin\\\",\\\"cmin\\\"),l(t,\\\"zmax\\\",\\\"cmax\\\"),l(t,\\\"zauto\\\",\\\"cauto\\\")),a(t,e,u,h,{prefix:\\\"\\\",cLetter:\\\"c\\\"}),s(0,e,0,h),e._length=null}},opacityscaleDefaults:s}},93601:function(t,e,r){\\\"use strict\\\";t.exports={attributes:r(54532),supplyDefaults:r(91831).supplyDefaults,colorbar:{min:\\\"cmin\\\",max:\\\"cmax\\\"},calc:r(18396),plot:r(43768),moduleType:\\\"trace\\\",name:\\\"surface\\\",basePlotModule:r(58547),categories:[\\\"gl3d\\\",\\\"2dMap\\\",\\\"showLegend\\\"],meta:{}}},44464:function(t,e,r){\\\"use strict\\\";var n=r(50215),i=r(1426).extendFlat,a=r(30962).overrideAll,o=r(41940),s=r(27670).Y,l=r(12663).descriptionOnlyNumbers;(t.exports=a({domain:s({name:\\\"table\\\",trace:!0}),columnwidth:{valType:\\\"number\\\",arrayOk:!0,dflt:null},columnorder:{valType:\\\"data_array\\\"},header:{values:{valType:\\\"data_array\\\",dflt:[]},format:{valType:\\\"data_array\\\",dflt:[],description:l(\\\"cell value\\\")},prefix:{valType:\\\"string\\\",arrayOk:!0,dflt:null},suffix:{valType:\\\"string\\\",arrayOk:!0,dflt:null},height:{valType:\\\"number\\\",dflt:28},align:i({},n.align,{arrayOk:!0}),line:{width:{valType:\\\"number\\\",arrayOk:!0,dflt:1},color:{valType:\\\"color\\\",arrayOk:!0,dflt:\\\"grey\\\"}},fill:{color:{valType:\\\"color\\\",arrayOk:!0,dflt:\\\"white\\\"}},font:i({},o({arrayOk:!0}))},cells:{values:{valType:\\\"data_array\\\",dflt:[]},format:{valType:\\\"data_array\\\",dflt:[],description:l(\\\"cell value\\\")},prefix:{valType:\\\"string\\\",arrayOk:!0,dflt:null},suffix:{valType:\\\"string\\\",arrayOk:!0,dflt:null},height:{valType:\\\"number\\\",dflt:20},align:i({},n.align,{arrayOk:!0}),line:{width:{valType:\\\"number\\\",arrayOk:!0,dflt:1},color:{valType:\\\"color\\\",arrayOk:!0,dflt:\\\"grey\\\"}},fill:{color:{valType:\\\"color\\\",arrayOk:!0,dflt:\\\"white\\\"}},font:i({},o({arrayOk:!0}))}},\\\"calc\\\",\\\"from-root\\\")).transforms=void 0},99469:function(t,e,r){\\\"use strict\\\";var n=r(27659).a0,i=r(36736),a=\\\"table\\\";e.name=a,e.plot=function(t){var e=n(t.calcdata,a)[0];e.length&&i(t,e)},e.clean=function(t,e,r,n){var i=n._has&&n._has(a),o=e._has&&e._has(a);i&&!o&&n._paperdiv.selectAll(\\\".table\\\").remove()}},76333:function(t,e,r){\\\"use strict\\\";var n=r(28984).wrap;t.exports=function(){return n({})}},49850:function(t){\\\"use strict\\\";t.exports={cellPad:8,columnExtentOffset:10,columnTitleOffset:28,emptyHeaderHeight:16,latexCheck:/^\\\\$.*\\\\$$/,goldenRatio:1.618,lineBreaker:\\\"<br>\\\",maxDimensionCount:60,overdrag:45,releaseTransitionDuration:120,releaseTransitionEase:\\\"cubic-out\\\",scrollbarCaptureWidth:18,scrollbarHideDelay:1e3,scrollbarHideDuration:1e3,scrollbarOffset:5,scrollbarWidth:8,transitionDuration:100,transitionEase:\\\"cubic-out\\\",uplift:5,wrapSpacer:\\\" \\\",wrapSplitCharacter:\\\" \\\",cn:{table:\\\"table\\\",tableControlView:\\\"table-control-view\\\",scrollBackground:\\\"scroll-background\\\",yColumn:\\\"y-column\\\",columnBlock:\\\"column-block\\\",scrollAreaClip:\\\"scroll-area-clip\\\",scrollAreaClipRect:\\\"scroll-area-clip-rect\\\",columnBoundary:\\\"column-boundary\\\",columnBoundaryClippath:\\\"column-boundary-clippath\\\",columnBoundaryRect:\\\"column-boundary-rect\\\",columnCells:\\\"column-cells\\\",columnCell:\\\"column-cell\\\",cellRect:\\\"cell-rect\\\",cellText:\\\"cell-text\\\",cellTextHolder:\\\"cell-text-holder\\\",scrollbarKit:\\\"scrollbar-kit\\\",scrollbar:\\\"scrollbar\\\",scrollbarSlider:\\\"scrollbar-slider\\\",scrollbarGlyph:\\\"scrollbar-glyph\\\",scrollbarCaptureZone:\\\"scrollbar-capture-zone\\\"}}},51018:function(t,e,r){\\\"use strict\\\";var n=r(49850),i=r(1426).extendFlat,a=r(92770);function o(t){if(Array.isArray(t)){for(var e=0,r=0;r<t.length;r++)e=Math.max(e,o(t[r]));return e}return t}function s(t,e){return t+e}function l(t){var e,r=t.slice(),n=1/0,i=0;for(e=0;e<r.length;e++)Array.isArray(r[e])||(r[e]=[r[e]]),n=Math.min(n,r[e].length),i=Math.max(i,r[e].length);if(n!==i)for(e=0;e<r.length;e++){var a=i-r[e].length;a&&(r[e]=r[e].concat(u(a)))}return r}function u(t){for(var e=new Array(t),r=0;r<t;r++)e[r]=\\\"\\\";return e}function c(t){return t.calcdata.columns.reduce((function(e,r){return r.xIndex<t.xIndex?e+r.columnWidth:e}),0)}function f(t,e){return Object.keys(t).map((function(r){return i({},t[r],{auxiliaryBlocks:e})}))}function h(t,e){for(var r,n={},i=0,a=0,o={firstRowIndex:null,lastRowIndex:null,rows:[]},s=0,l=0,u=0;u<t.length;u++)r=t[u],o.rows.push({rowIndex:u,rowHeight:r}),((a+=r)>=e||u===t.length-1)&&(n[i]=o,o.key=l++,o.firstRowIndex=s,o.lastRowIndex=u,o={firstRowIndex:null,lastRowIndex:null,rows:[]},i+=a,s=u+1,a=0);return n}t.exports=function(t,e){var r=l(e.cells.values),p=function(t){return t.slice(e.header.values.length,t.length)},d=l(e.header.values);d.length&&!d[0].length&&(d[0]=[\\\"\\\"],d=l(d));var v=d.concat(p(r).map((function(){return u((d[0]||[\\\"\\\"]).length)}))),g=e.domain,y=Math.floor(t._fullLayout._size.w*(g.x[1]-g.x[0])),m=Math.floor(t._fullLayout._size.h*(g.y[1]-g.y[0])),x=e.header.values.length?v[0].map((function(){return e.header.height})):[n.emptyHeaderHeight],b=r.length?r[0].map((function(){return e.cells.height})):[],_=x.reduce(s,0),w=h(b,m-_+n.uplift),T=f(h(x,_),[]),k=f(w,T),A={},M=e._fullInput.columnorder.concat(p(r.map((function(t,e){return e})))),S=v.map((function(t,r){var n=Array.isArray(e.columnwidth)?e.columnwidth[Math.min(r,e.columnwidth.length-1)]:e.columnwidth;return a(n)?Number(n):1})),E=S.reduce(s,0);S=S.map((function(t){return t/E*y}));var L=Math.max(o(e.header.line.width),o(e.cells.line.width)),C={key:e.uid+t._context.staticPlot,translateX:g.x[0]*t._fullLayout._size.w,translateY:t._fullLayout._size.h*(1-g.y[1]),size:t._fullLayout._size,width:y,maxLineWidth:L,height:m,columnOrder:M,groupHeight:m,rowBlocks:k,headerRowBlocks:T,scrollY:0,cells:i({},e.cells,{values:r}),headerCells:i({},e.header,{values:v}),gdColumns:v.map((function(t){return t[0]})),gdColumnsOriginalOrder:v.map((function(t){return t[0]})),prevPages:[0,0],scrollbarState:{scrollbarScrollInProgress:!1},columns:v.map((function(t,e){var r=A[t];return A[t]=(r||0)+1,{key:t+\\\"__\\\"+A[t],label:t,specIndex:e,xIndex:M[e],xScale:c,x:void 0,calcdata:void 0,columnWidth:S[e]}}))};return C.columns.forEach((function(t){t.calcdata=C,t.x=c(t)})),C}},56269:function(t,e,r){\\\"use strict\\\";var n=r(1426).extendFlat;e.splitToPanels=function(t){var e=[0,0],r=n({},t,{key:\\\"header\\\",type:\\\"header\\\",page:0,prevPages:e,currentRepaint:[null,null],dragHandle:!0,values:t.calcdata.headerCells.values[t.specIndex],rowBlocks:t.calcdata.headerRowBlocks,calcdata:n({},t.calcdata,{cells:t.calcdata.headerCells})});return[n({},t,{key:\\\"cells1\\\",type:\\\"cells\\\",page:0,prevPages:e,currentRepaint:[null,null],dragHandle:!1,values:t.calcdata.cells.values[t.specIndex],rowBlocks:t.calcdata.rowBlocks}),n({},t,{key:\\\"cells2\\\",type:\\\"cells\\\",page:1,prevPages:e,currentRepaint:[null,null],dragHandle:!1,values:t.calcdata.cells.values[t.specIndex],rowBlocks:t.calcdata.rowBlocks}),r]},e.splitToCells=function(t){var e=function(t){var e=t.rowBlocks[t.page],r=e?e.rows[0].rowIndex:0;return[r,e?r+e.rows.length:0]}(t);return(t.values||[]).slice(e[0],e[1]).map((function(r,n){return{keyWithinBlock:n+(\\\"string\\\"==typeof r&&r.match(/[<$&> ]/)?\\\"_keybuster_\\\"+Math.random():\\\"\\\"),key:e[0]+n,column:t,calcdata:t.calcdata,page:t.page,rowBlocks:t.rowBlocks,value:r}}))}},39754:function(t,e,r){\\\"use strict\\\";var n=r(71828),i=r(44464),a=r(27670).c;t.exports=function(t,e,r,o){function s(r,a){return n.coerce(t,e,i,r,a)}a(e,o,s),s(\\\"columnwidth\\\"),s(\\\"header.values\\\"),s(\\\"header.format\\\"),s(\\\"header.align\\\"),s(\\\"header.prefix\\\"),s(\\\"header.suffix\\\"),s(\\\"header.height\\\"),s(\\\"header.line.width\\\"),s(\\\"header.line.color\\\"),s(\\\"header.fill.color\\\"),n.coerceFont(s,\\\"header.font\\\",n.extendFlat({},o.font)),function(t,e){for(var r=t.columnorder||[],n=t.header.values.length,i=r.slice(0,n),a=i.slice().sort((function(t,e){return t-e})),o=i.map((function(t){return a.indexOf(t)})),s=o.length;s<n;s++)o.push(s);e(\\\"columnorder\\\",o)}(e,s),s(\\\"cells.values\\\"),s(\\\"cells.format\\\"),s(\\\"cells.align\\\"),s(\\\"cells.prefix\\\"),s(\\\"cells.suffix\\\"),s(\\\"cells.height\\\"),s(\\\"cells.line.width\\\"),s(\\\"cells.line.color\\\"),s(\\\"cells.fill.color\\\"),n.coerceFont(s,\\\"cells.font\\\",n.extendFlat({},o.font)),e._length=null}},96595:function(t,e,r){\\\"use strict\\\";t.exports={attributes:r(44464),supplyDefaults:r(39754),calc:r(76333),plot:r(36736),moduleType:\\\"trace\\\",name:\\\"table\\\",basePlotModule:r(99469),categories:[\\\"noOpacity\\\"],meta:{}}},36736:function(t,e,r){\\\"use strict\\\";var n=r(49850),i=r(39898),a=r(71828).numberFormat,o=r(28984),s=r(91424),l=r(63893),u=r(71828).raiseToTop,c=r(71828).strTranslate,f=r(71828).cancelTransition,h=r(51018),p=r(56269),d=r(7901);function v(t){return Math.ceil(t.calcdata.maxLineWidth/2)}function g(t,e){return\\\"clip\\\"+t._fullLayout._uid+\\\"_scrollAreaBottomClip_\\\"+e.key}function y(t,e){return\\\"clip\\\"+t._fullLayout._uid+\\\"_columnBoundaryClippath_\\\"+e.calcdata.key+\\\"_\\\"+e.specIndex}function m(t){return[].concat.apply([],t.map((function(t){return t}))).map((function(t){return t.__data__}))}function x(t,e,r){var a=t.selectAll(\\\".\\\"+n.cn.scrollbarKit).data(o.repeat,o.keyFun);a.enter().append(\\\"g\\\").classed(n.cn.scrollbarKit,!0).style(\\\"shape-rendering\\\",\\\"geometricPrecision\\\"),a.each((function(t){var e=t.scrollbarState;e.totalHeight=function(t){var e=t.rowBlocks;return z(e,e.length-1)+(e.length?R(e[e.length-1],1/0):1)}(t),e.scrollableAreaHeight=t.groupHeight-S(t),e.currentlyVisibleHeight=Math.min(e.totalHeight,e.scrollableAreaHeight),e.ratio=e.currentlyVisibleHeight/e.totalHeight,e.barLength=Math.max(e.ratio*e.currentlyVisibleHeight,n.goldenRatio*n.scrollbarWidth),e.barWiggleRoom=e.currentlyVisibleHeight-e.barLength,e.wiggleRoom=Math.max(0,e.totalHeight-e.scrollableAreaHeight),e.topY=0===e.barWiggleRoom?0:t.scrollY/e.wiggleRoom*e.barWiggleRoom,e.bottomY=e.topY+e.barLength,e.dragMultiplier=e.wiggleRoom/e.barWiggleRoom})).attr(\\\"transform\\\",(function(t){var e=t.width+n.scrollbarWidth/2+n.scrollbarOffset;return c(e,S(t))}));var s=a.selectAll(\\\".\\\"+n.cn.scrollbar).data(o.repeat,o.keyFun);s.enter().append(\\\"g\\\").classed(n.cn.scrollbar,!0);var l=s.selectAll(\\\".\\\"+n.cn.scrollbarSlider).data(o.repeat,o.keyFun);l.enter().append(\\\"g\\\").classed(n.cn.scrollbarSlider,!0),l.attr(\\\"transform\\\",(function(t){return c(0,t.scrollbarState.topY||0)}));var u=l.selectAll(\\\".\\\"+n.cn.scrollbarGlyph).data(o.repeat,o.keyFun);u.enter().append(\\\"line\\\").classed(n.cn.scrollbarGlyph,!0).attr(\\\"stroke\\\",\\\"black\\\").attr(\\\"stroke-width\\\",n.scrollbarWidth).attr(\\\"stroke-linecap\\\",\\\"round\\\").attr(\\\"y1\\\",n.scrollbarWidth/2),u.attr(\\\"y2\\\",(function(t){return t.scrollbarState.barLength-n.scrollbarWidth/2})).attr(\\\"stroke-opacity\\\",(function(t){return t.columnDragInProgress||!t.scrollbarState.barWiggleRoom||r?0:.4})),u.transition().delay(0).duration(0),u.transition().delay(n.scrollbarHideDelay).duration(n.scrollbarHideDuration).attr(\\\"stroke-opacity\\\",0);var f=s.selectAll(\\\".\\\"+n.cn.scrollbarCaptureZone).data(o.repeat,o.keyFun);f.enter().append(\\\"line\\\").classed(n.cn.scrollbarCaptureZone,!0).attr(\\\"stroke\\\",\\\"white\\\").attr(\\\"stroke-opacity\\\",.01).attr(\\\"stroke-width\\\",n.scrollbarCaptureWidth).attr(\\\"stroke-linecap\\\",\\\"butt\\\").attr(\\\"y1\\\",0).on(\\\"mousedown\\\",(function(r){var n=i.event.y,a=this.getBoundingClientRect(),o=r.scrollbarState,s=n-a.top,l=i.scale.linear().domain([0,o.scrollableAreaHeight]).range([0,o.totalHeight]).clamp(!0);o.topY<=s&&s<=o.bottomY||L(e,t,null,l(s-o.barLength/2))(r)})).call(i.behavior.drag().origin((function(t){return i.event.stopPropagation(),t.scrollbarState.scrollbarScrollInProgress=!0,t})).on(\\\"drag\\\",L(e,t)).on(\\\"dragend\\\",(function(){}))),f.attr(\\\"y2\\\",(function(t){return t.scrollbarState.scrollableAreaHeight})),e._context.staticPlot&&(u.remove(),f.remove())}function b(t,e,r,a){var l=function(t){var e=t.selectAll(\\\".\\\"+n.cn.columnCells).data(o.repeat,o.keyFun);return e.enter().append(\\\"g\\\").classed(n.cn.columnCells,!0),e.exit().remove(),e}(r),u=function(t){var e=t.selectAll(\\\".\\\"+n.cn.columnCell).data(p.splitToCells,(function(t){return t.keyWithinBlock}));return e.enter().append(\\\"g\\\").classed(n.cn.columnCell,!0),e.exit().remove(),e}(l);!function(t){t.each((function(t,e){var r=t.calcdata.cells.font,n=t.column.specIndex,i={size:T(r.size,n,e),color:T(r.color,n,e),family:T(r.family,n,e)};t.rowNumber=t.key,t.align=T(t.calcdata.cells.align,n,e),t.cellBorderWidth=T(t.calcdata.cells.line.width,n,e),t.font=i}))}(u);var c=function(t){var e=t.selectAll(\\\".\\\"+n.cn.cellRect).data(o.repeat,(function(t){return t.keyWithinBlock}));return e.enter().append(\\\"rect\\\").classed(n.cn.cellRect,!0),e}(u);!function(t){t.attr(\\\"width\\\",(function(t){return t.column.columnWidth})).attr(\\\"stroke-width\\\",(function(t){return t.cellBorderWidth})).each((function(t){var e=i.select(this);d.stroke(e,T(t.calcdata.cells.line.color,t.column.specIndex,t.rowNumber)),d.fill(e,T(t.calcdata.cells.fill.color,t.column.specIndex,t.rowNumber))}))}(c);var f=function(t){var e=t.selectAll(\\\".\\\"+n.cn.cellTextHolder).data(o.repeat,(function(t){return t.keyWithinBlock}));return e.enter().append(\\\"g\\\").classed(n.cn.cellTextHolder,!0).style(\\\"shape-rendering\\\",\\\"geometricPrecision\\\"),e}(u),h=function(t){var e=t.selectAll(\\\".\\\"+n.cn.cellText).data(o.repeat,(function(t){return t.keyWithinBlock}));return e.enter().append(\\\"text\\\").classed(n.cn.cellText,!0).style(\\\"cursor\\\",(function(){return\\\"auto\\\"})).on(\\\"mousedown\\\",(function(){i.event.stopPropagation()})),e}(f);!function(t){t.each((function(t){s.font(i.select(this),t.font)}))}(h),_(h,e,a,t),D(u)}function _(t,e,r,o){t.text((function(t){var e=t.column.specIndex,r=t.rowNumber,i=t.value,o=\\\"string\\\"==typeof i,s=o&&i.match(/<br>/i),l=!o||s;t.mayHaveMarkup=o&&i.match(/[<&>]/);var u,c=\\\"string\\\"==typeof(u=i)&&u.match(n.latexCheck);t.latex=c;var f,h,p=c?\\\"\\\":T(t.calcdata.cells.prefix,e,r)||\\\"\\\",d=c?\\\"\\\":T(t.calcdata.cells.suffix,e,r)||\\\"\\\",v=c?null:T(t.calcdata.cells.format,e,r)||null,g=p+(v?a(v)(t.value):t.value)+d;if(t.wrappingNeeded=!t.wrapped&&!l&&!c&&(f=w(g)),t.cellHeightMayIncrease=s||c||t.mayHaveMarkup||(void 0===f?w(g):f),t.needsConvertToTspans=t.mayHaveMarkup||t.wrappingNeeded||t.latex,t.wrappingNeeded){var y=(\\\" \\\"===n.wrapSplitCharacter?g.replace(/<a href=/gi,\\\"<a_href=\\\"):g).split(n.wrapSplitCharacter),m=\\\" \\\"===n.wrapSplitCharacter?y.map((function(t){return t.replace(/<a_href=/gi,\\\"<a href=\\\")})):y;t.fragments=m.map((function(t){return{text:t,width:null}})),t.fragments.push({fragment:n.wrapSpacer,width:null}),h=m.join(n.lineBreaker)+n.lineBreaker+n.wrapSpacer}else delete t.fragments,h=g;return h})).attr(\\\"dy\\\",(function(t){return t.needsConvertToTspans?0:\\\"0.75em\\\"})).each((function(t){var a=this,s=i.select(a),u=t.wrappingNeeded?P:O;t.needsConvertToTspans?l.convertToTspans(s,o,u(r,a,e,o,t)):i.select(a.parentNode).attr(\\\"transform\\\",(function(t){return c(I(t),n.cellPad)})).attr(\\\"text-anchor\\\",(function(t){return{left:\\\"start\\\",center:\\\"middle\\\",right:\\\"end\\\"}[t.align]}))}))}function w(t){return-1!==t.indexOf(n.wrapSplitCharacter)}function T(t,e,r){if(Array.isArray(t)){var n=t[Math.min(e,t.length-1)];return Array.isArray(n)?n[Math.min(r,n.length-1)]:n}return t}function k(t,e,r){t.transition().ease(n.releaseTransitionEase).duration(n.releaseTransitionDuration).attr(\\\"transform\\\",c(e.x,r))}function A(t){return\\\"cells\\\"===t.type}function M(t){return\\\"header\\\"===t.type}function S(t){return(t.rowBlocks.length?t.rowBlocks[0].auxiliaryBlocks:[]).reduce((function(t,e){return t+R(e,1/0)}),0)}function E(t,e,r){var n=m(e)[0];if(void 0!==n){var i=n.rowBlocks,a=n.calcdata,o=z(i,i.length),s=n.calcdata.groupHeight-S(n),l=a.scrollY=Math.max(0,Math.min(o-s,a.scrollY)),u=function(t,e,r){for(var n=[],i=0,a=0;a<t.length;a++){for(var o=t[a],s=o.rows,l=0,u=0;u<s.length;u++)l+=s[u].rowHeight;o.allRowsHeight=l,e<i+l&&e+r>i&&n.push(a),i+=l}return n}(i,l,s);1===u.length&&(u[0]===i.length-1?u.unshift(u[0]-1):u.push(u[0]+1)),u[0]%2&&u.reverse(),e.each((function(t,e){t.page=u[e],t.scrollY=l})),e.attr(\\\"transform\\\",(function(t){var e=z(t.rowBlocks,t.page)-t.scrollY;return c(0,e)})),t&&(C(t,r,e,u,n.prevPages,n,0),C(t,r,e,u,n.prevPages,n,1),x(r,t))}}function L(t,e,r,a){return function(o){var s=o.calcdata?o.calcdata:o,l=e.filter((function(t){return s.key===t.key})),u=r||s.scrollbarState.dragMultiplier,c=s.scrollY;s.scrollY=void 0===a?s.scrollY+u*i.event.dy:a;var f=l.selectAll(\\\".\\\"+n.cn.yColumn).selectAll(\\\".\\\"+n.cn.columnBlock).filter(A);return E(t,f,l),s.scrollY===c}}function C(t,e,r,n,i,a,o){n[o]!==i[o]&&(clearTimeout(a.currentRepaint[o]),a.currentRepaint[o]=setTimeout((function(){var a=r.filter((function(t,e){return e===o&&n[e]!==i[e]}));b(t,e,a,r),i[o]=n[o]})))}function P(t,e,r,a){return function(){var o=i.select(e.parentNode);o.each((function(t){var e=t.fragments;o.selectAll(\\\"tspan.line\\\").each((function(t,r){e[r].width=this.getComputedTextLength()}));var r,i,a=e[e.length-1].width,s=e.slice(0,-1),l=[],u=0,c=t.column.columnWidth-2*n.cellPad;for(t.value=\\\"\\\";s.length;)u+(i=(r=s.shift()).width+a)>c&&(t.value+=l.join(n.wrapSpacer)+n.lineBreaker,l=[],u=0),l.push(r.text),u+=i;u&&(t.value+=l.join(n.wrapSpacer)),t.wrapped=!0})),o.selectAll(\\\"tspan.line\\\").remove(),_(o.select(\\\".\\\"+n.cn.cellText),r,t,a),i.select(e.parentNode.parentNode).call(D)}}function O(t,e,r,a,o){return function(){if(!o.settledY){var s=i.select(e.parentNode),l=B(o),u=o.key-l.firstRowIndex,f=l.rows[u].rowHeight,h=o.cellHeightMayIncrease?e.parentNode.getBoundingClientRect().height+2*n.cellPad:f,p=Math.max(h,f);p-l.rows[u].rowHeight&&(l.rows[u].rowHeight=p,t.selectAll(\\\".\\\"+n.cn.columnCell).call(D),E(null,t.filter(A),0),x(r,a,!0)),s.attr(\\\"transform\\\",(function(){var t=this,e=t.parentNode.getBoundingClientRect(),r=i.select(t.parentNode).select(\\\".\\\"+n.cn.cellRect).node().getBoundingClientRect(),a=t.transform.baseVal.consolidate(),s=r.top-e.top+(a?a.matrix.f:n.cellPad);return c(I(o,i.select(t.parentNode).select(\\\".\\\"+n.cn.cellTextHolder).node().getBoundingClientRect().width),s)})),o.settledY=!0}}}function I(t,e){switch(t.align){case\\\"left\\\":default:return n.cellPad;case\\\"right\\\":return t.column.columnWidth-(e||0)-n.cellPad;case\\\"center\\\":return(t.column.columnWidth-(e||0))/2}}function D(t){t.attr(\\\"transform\\\",(function(t){var e=t.rowBlocks[0].auxiliaryBlocks.reduce((function(t,e){return t+R(e,1/0)}),0),r=R(B(t),t.key);return c(0,r+e)})).selectAll(\\\".\\\"+n.cn.cellRect).attr(\\\"height\\\",(function(t){return(e=B(t),r=t.key,e.rows[r-e.firstRowIndex]).rowHeight;var e,r}))}function z(t,e){for(var r=0,n=e-1;n>=0;n--)r+=F(t[n]);return r}function R(t,e){for(var r=0,n=0;n<t.rows.length&&t.rows[n].rowIndex<e;n++)r+=t.rows[n].rowHeight;return r}function F(t){var e=t.allRowsHeight;if(void 0!==e)return e;for(var r=0,n=0;n<t.rows.length;n++)r+=t.rows[n].rowHeight;return t.allRowsHeight=r,r}function B(t){return t.rowBlocks[t.page]}t.exports=function(t,e){var r=!t._context.staticPlot,a=t._fullLayout._paper.selectAll(\\\".\\\"+n.cn.table).data(e.map((function(e){var r=o.unwrap(e).trace;return h(t,r)})),o.keyFun);a.exit().remove(),a.enter().append(\\\"g\\\").classed(n.cn.table,!0).attr(\\\"overflow\\\",\\\"visible\\\").style(\\\"box-sizing\\\",\\\"content-box\\\").style(\\\"position\\\",\\\"absolute\\\").style(\\\"left\\\",0).style(\\\"overflow\\\",\\\"visible\\\").style(\\\"shape-rendering\\\",\\\"crispEdges\\\").style(\\\"pointer-events\\\",\\\"all\\\"),a.attr(\\\"width\\\",(function(t){return t.width+t.size.l+t.size.r})).attr(\\\"height\\\",(function(t){return t.height+t.size.t+t.size.b})).attr(\\\"transform\\\",(function(t){return c(t.translateX,t.translateY)}));var l=a.selectAll(\\\".\\\"+n.cn.tableControlView).data(o.repeat,o.keyFun),d=l.enter().append(\\\"g\\\").classed(n.cn.tableControlView,!0).style(\\\"box-sizing\\\",\\\"content-box\\\");if(r){var _=\\\"onwheel\\\"in document?\\\"wheel\\\":\\\"mousewheel\\\";d.on(\\\"mousemove\\\",(function(e){l.filter((function(t){return e===t})).call(x,t)})).on(_,(function(e){if(!e.scrollbarState.wheeling){e.scrollbarState.wheeling=!0;var r=e.scrollY+i.event.deltaY;L(t,l,null,r)(e)||(i.event.stopPropagation(),i.event.preventDefault()),e.scrollbarState.wheeling=!1}})).call(x,t,!0)}l.attr(\\\"transform\\\",(function(t){return c(t.size.l,t.size.t)}));var w=l.selectAll(\\\".\\\"+n.cn.scrollBackground).data(o.repeat,o.keyFun);w.enter().append(\\\"rect\\\").classed(n.cn.scrollBackground,!0).attr(\\\"fill\\\",\\\"none\\\"),w.attr(\\\"width\\\",(function(t){return t.width})).attr(\\\"height\\\",(function(t){return t.height})),l.each((function(e){s.setClipUrl(i.select(this),g(t,e),t)}));var T=l.selectAll(\\\".\\\"+n.cn.yColumn).data((function(t){return t.columns}),o.keyFun);T.enter().append(\\\"g\\\").classed(n.cn.yColumn,!0),T.exit().remove(),T.attr(\\\"transform\\\",(function(t){return c(t.x,0)})),r&&T.call(i.behavior.drag().origin((function(e){return k(i.select(this),e,-n.uplift),u(this),e.calcdata.columnDragInProgress=!0,x(l.filter((function(t){return e.calcdata.key===t.key})),t),e})).on(\\\"drag\\\",(function(t){var e=i.select(this),r=function(e){return(t===e?i.event.x:e.x)+e.columnWidth/2};t.x=Math.max(-n.overdrag,Math.min(t.calcdata.width+n.overdrag-t.columnWidth,i.event.x)),m(T).filter((function(e){return e.calcdata.key===t.calcdata.key})).sort((function(t,e){return r(t)-r(e)})).forEach((function(e,r){e.xIndex=r,e.x=t===e?e.x:e.xScale(e)})),T.filter((function(e){return t!==e})).transition().ease(n.transitionEase).duration(n.transitionDuration).attr(\\\"transform\\\",(function(t){return c(t.x,0)})),e.call(f).attr(\\\"transform\\\",c(t.x,-n.uplift))})).on(\\\"dragend\\\",(function(e){var r=i.select(this),n=e.calcdata;e.x=e.xScale(e),e.calcdata.columnDragInProgress=!1,k(r,e,0),function(t,e,r){var n=e.gdColumnsOriginalOrder;e.gdColumns.sort((function(t,e){return r[n.indexOf(t)]-r[n.indexOf(e)]})),e.columnorder=r,t.emit(\\\"plotly_restyle\\\")}(t,n,n.columns.map((function(t){return t.xIndex})))}))),T.each((function(e){s.setClipUrl(i.select(this),y(t,e),t)}));var S=T.selectAll(\\\".\\\"+n.cn.columnBlock).data(p.splitToPanels,o.keyFun);S.enter().append(\\\"g\\\").classed(n.cn.columnBlock,!0).attr(\\\"id\\\",(function(t){return t.key})),S.style(\\\"cursor\\\",(function(t){return t.dragHandle?\\\"ew-resize\\\":t.calcdata.scrollbarState.barWiggleRoom?\\\"ns-resize\\\":\\\"default\\\"}));var C=S.filter(M),P=S.filter(A);r&&P.call(i.behavior.drag().origin((function(t){return i.event.stopPropagation(),t})).on(\\\"drag\\\",L(t,l,-1)).on(\\\"dragend\\\",(function(){}))),b(t,l,C,S),b(t,l,P,S);var O=l.selectAll(\\\".\\\"+n.cn.scrollAreaClip).data(o.repeat,o.keyFun);O.enter().append(\\\"clipPath\\\").classed(n.cn.scrollAreaClip,!0).attr(\\\"id\\\",(function(e){return g(t,e)}));var I=O.selectAll(\\\".\\\"+n.cn.scrollAreaClipRect).data(o.repeat,o.keyFun);I.enter().append(\\\"rect\\\").classed(n.cn.scrollAreaClipRect,!0).attr(\\\"x\\\",-n.overdrag).attr(\\\"y\\\",-n.uplift).attr(\\\"fill\\\",\\\"none\\\"),I.attr(\\\"width\\\",(function(t){return t.width+2*n.overdrag})).attr(\\\"height\\\",(function(t){return t.height+n.uplift})),T.selectAll(\\\".\\\"+n.cn.columnBoundary).data(o.repeat,o.keyFun).enter().append(\\\"g\\\").classed(n.cn.columnBoundary,!0);var D=T.selectAll(\\\".\\\"+n.cn.columnBoundaryClippath).data(o.repeat,o.keyFun);D.enter().append(\\\"clipPath\\\").classed(n.cn.columnBoundaryClippath,!0),D.attr(\\\"id\\\",(function(e){return y(t,e)}));var z=D.selectAll(\\\".\\\"+n.cn.columnBoundaryRect).data(o.repeat,o.keyFun);z.enter().append(\\\"rect\\\").classed(n.cn.columnBoundaryRect,!0).attr(\\\"fill\\\",\\\"none\\\"),z.attr(\\\"width\\\",(function(t){return t.columnWidth+2*v(t)})).attr(\\\"height\\\",(function(t){return t.calcdata.height+2*v(t)+n.uplift})).attr(\\\"x\\\",(function(t){return-v(t)})).attr(\\\"y\\\",(function(t){return-v(t)})),E(null,P,l)}},45802:function(t,e,r){\\\"use strict\\\";var n=r(5386).fF,i=r(5386).si,a=r(50693),o=r(27670).Y,s=r(34e3),l=r(57564),u=r(43473),c=r(1426).extendFlat,f=r(79952).u;t.exports={labels:l.labels,parents:l.parents,values:l.values,branchvalues:l.branchvalues,count:l.count,level:l.level,maxdepth:l.maxdepth,tiling:{packing:{valType:\\\"enumerated\\\",values:[\\\"squarify\\\",\\\"binary\\\",\\\"dice\\\",\\\"slice\\\",\\\"slice-dice\\\",\\\"dice-slice\\\"],dflt:\\\"squarify\\\",editType:\\\"plot\\\"},squarifyratio:{valType:\\\"number\\\",min:1,dflt:1,editType:\\\"plot\\\"},flip:{valType:\\\"flaglist\\\",flags:[\\\"x\\\",\\\"y\\\"],dflt:\\\"\\\",editType:\\\"plot\\\"},pad:{valType:\\\"number\\\",min:0,dflt:3,editType:\\\"plot\\\"},editType:\\\"calc\\\"},marker:c({pad:{t:{valType:\\\"number\\\",min:0,editType:\\\"plot\\\"},l:{valType:\\\"number\\\",min:0,editType:\\\"plot\\\"},r:{valType:\\\"number\\\",min:0,editType:\\\"plot\\\"},b:{valType:\\\"number\\\",min:0,editType:\\\"plot\\\"},editType:\\\"calc\\\"},colors:l.marker.colors,pattern:f,depthfade:{valType:\\\"enumerated\\\",values:[!0,!1,\\\"reversed\\\"],editType:\\\"style\\\"},line:l.marker.line,cornerradius:{valType:\\\"number\\\",min:0,dflt:0,editType:\\\"plot\\\"},editType:\\\"calc\\\"},a(\\\"marker\\\",{colorAttr:\\\"colors\\\",anim:!1})),pathbar:{visible:{valType:\\\"boolean\\\",dflt:!0,editType:\\\"plot\\\"},side:{valType:\\\"enumerated\\\",values:[\\\"top\\\",\\\"bottom\\\"],dflt:\\\"top\\\",editType:\\\"plot\\\"},edgeshape:{valType:\\\"enumerated\\\",values:[\\\">\\\",\\\"<\\\",\\\"|\\\",\\\"/\\\",\\\"\\\\\\\\\\\"],dflt:\\\">\\\",editType:\\\"plot\\\"},thickness:{valType:\\\"number\\\",min:12,editType:\\\"plot\\\"},textfont:c({},s.textfont,{}),editType:\\\"calc\\\"},text:s.text,textinfo:l.textinfo,texttemplate:i({editType:\\\"plot\\\"},{keys:u.eventDataKeys.concat([\\\"label\\\",\\\"value\\\"])}),hovertext:s.hovertext,hoverinfo:l.hoverinfo,hovertemplate:n({},{keys:u.eventDataKeys}),textfont:s.textfont,insidetextfont:s.insidetextfont,outsidetextfont:c({},s.outsidetextfont,{}),textposition:{valType:\\\"enumerated\\\",values:[\\\"top left\\\",\\\"top center\\\",\\\"top right\\\",\\\"middle left\\\",\\\"middle center\\\",\\\"middle right\\\",\\\"bottom left\\\",\\\"bottom center\\\",\\\"bottom right\\\"],dflt:\\\"top left\\\",editType:\\\"plot\\\"},sort:s.sort,root:l.root,domain:o({name:\\\"treemap\\\",trace:!0,editType:\\\"calc\\\"})}},78018:function(t,e,r){\\\"use strict\\\";var n=r(74875);e.name=\\\"treemap\\\",e.plot=function(t,r,i,a){n.plotBasePlot(e.name,t,r,i,a)},e.clean=function(t,r,i,a){n.cleanBasePlot(e.name,t,r,i,a)}},65039:function(t,e,r){\\\"use strict\\\";var n=r(52147);e.y=function(t,e){return n.calc(t,e)},e.T=function(t){return n._runCrossTraceCalc(\\\"treemap\\\",t)}},43473:function(t){\\\"use strict\\\";t.exports={CLICK_TRANSITION_TIME:750,CLICK_TRANSITION_EASING:\\\"poly\\\",eventDataKeys:[\\\"currentPath\\\",\\\"root\\\",\\\"entry\\\",\\\"percentRoot\\\",\\\"percentEntry\\\",\\\"percentParent\\\"],gapWithPathbar:1}},91174:function(t,e,r){\\\"use strict\\\";var n=r(71828),i=r(45802),a=r(7901),o=r(27670).c,s=r(90769).handleText,l=r(97313).TEXTPAD,u=r(37434).handleMarkerDefaults,c=r(21081),f=c.hasColorscale,h=c.handleDefaults;t.exports=function(t,e,r,c){function p(r,a){return n.coerce(t,e,i,r,a)}var d=p(\\\"labels\\\"),v=p(\\\"parents\\\");if(d&&d.length&&v&&v.length){var g=p(\\\"values\\\");g&&g.length?p(\\\"branchvalues\\\"):p(\\\"count\\\"),p(\\\"level\\\"),p(\\\"maxdepth\\\"),\\\"squarify\\\"===p(\\\"tiling.packing\\\")&&p(\\\"tiling.squarifyratio\\\"),p(\\\"tiling.flip\\\"),p(\\\"tiling.pad\\\");var y=p(\\\"text\\\");p(\\\"texttemplate\\\"),e.texttemplate||p(\\\"textinfo\\\",Array.isArray(y)?\\\"text+label\\\":\\\"label\\\"),p(\\\"hovertext\\\"),p(\\\"hovertemplate\\\");var m=p(\\\"pathbar.visible\\\");s(t,e,c,p,\\\"auto\\\",{hasPathbar:m,moduleHasSelected:!1,moduleHasUnselected:!1,moduleHasConstrain:!1,moduleHasCliponaxis:!1,moduleHasTextangle:!1,moduleHasInsideanchor:!1}),p(\\\"textposition\\\");var x=-1!==e.textposition.indexOf(\\\"bottom\\\");u(t,e,c,p),(e._hasColorscale=f(t,\\\"marker\\\",\\\"colors\\\")||(t.marker||{}).coloraxis)?h(t,e,c,p,{prefix:\\\"marker.\\\",cLetter:\\\"c\\\"}):p(\\\"marker.depthfade\\\",!(e.marker.colors||[]).length);var b=2*e.textfont.size;p(\\\"marker.pad.t\\\",x?b/4:b),p(\\\"marker.pad.l\\\",b/4),p(\\\"marker.pad.r\\\",b/4),p(\\\"marker.pad.b\\\",x?b:b/4),p(\\\"marker.cornerradius\\\"),e._hovered={marker:{line:{width:2,color:a.contrast(c.paper_bgcolor)}}},m&&(p(\\\"pathbar.thickness\\\",e.pathbar.textfont.size+2*l),p(\\\"pathbar.side\\\"),p(\\\"pathbar.edgeshape\\\")),p(\\\"sort\\\"),p(\\\"root.color\\\"),o(e,c,p),e._length=null}else e.visible=!1}},80694:function(t,e,r){\\\"use strict\\\";var n=r(39898),i=r(2791),a=r(72597).clearMinTextSize,o=r(16688).resizeText,s=r(46650);t.exports=function(t,e,r,l,u){var c,f,h=u.type,p=u.drawDescendants,d=t._fullLayout,v=d[\\\"_\\\"+h+\\\"layer\\\"],g=!r;a(h,d),(c=v.selectAll(\\\"g.trace.\\\"+h).data(e,(function(t){return t[0].trace.uid}))).enter().append(\\\"g\\\").classed(\\\"trace\\\",!0).classed(h,!0),c.order(),!d.uniformtext.mode&&i.hasTransition(r)?(l&&(f=l()),n.transition().duration(r.duration).ease(r.easing).each(\\\"end\\\",(function(){f&&f()})).each(\\\"interrupt\\\",(function(){f&&f()})).each((function(){v.selectAll(\\\"g.trace\\\").each((function(e){s(t,e,this,r,p)}))}))):(c.each((function(e){s(t,e,this,r,p)})),d.uniformtext.mode&&o(t,v.selectAll(\\\".trace\\\"),h)),g&&c.exit().remove()}},66209:function(t,e,r){\\\"use strict\\\";var n=r(39898),i=r(71828),a=r(91424),o=r(63893),s=r(37210),l=r(96362).styleOne,u=r(43473),c=r(2791),f=r(83523),h=!0;t.exports=function(t,e,r,p,d){var v=d.barDifY,g=d.width,y=d.height,m=d.viewX,x=d.viewY,b=d.pathSlice,_=d.toMoveInsideSlice,w=d.strTransform,T=d.hasTransition,k=d.handleSlicesExit,A=d.makeUpdateSliceInterpolator,M=d.makeUpdateTextInterpolator,S={},E=t._context.staticPlot,L=t._fullLayout,C=e[0],P=C.trace,O=C.hierarchy,I=g/P._entryDepth,D=c.listPath(r.data,\\\"id\\\"),z=s(O.copy(),[g,y],{packing:\\\"dice\\\",pad:{inner:0,top:0,left:0,right:0,bottom:0}}).descendants();(z=z.filter((function(t){var e=D.indexOf(t.data.id);return-1!==e&&(t.x0=I*e,t.x1=I*(e+1),t.y0=v,t.y1=v+y,t.onPathbar=!0,!0)}))).reverse(),(p=p.data(z,c.getPtId)).enter().append(\\\"g\\\").classed(\\\"pathbar\\\",!0),k(p,h,S,[g,y],b),p.order();var R=p;T&&(R=R.transition().each(\\\"end\\\",(function(){var e=n.select(this);c.setSliceCursor(e,t,{hideOnRoot:!1,hideOnLeaves:!1,isTransitioning:!1})}))),R.each((function(s){s._x0=m(s.x0),s._x1=m(s.x1),s._y0=x(s.y0),s._y1=x(s.y1),s._hoverX=m(s.x1-Math.min(g,y)/2),s._hoverY=x(s.y1-y/2);var p=n.select(this),d=i.ensureSingle(p,\\\"path\\\",\\\"surface\\\",(function(t){t.style(\\\"pointer-events\\\",E?\\\"none\\\":\\\"all\\\")}));T?d.transition().attrTween(\\\"d\\\",(function(t){var e=A(t,h,S,[g,y]);return function(t){return b(e(t))}})):d.attr(\\\"d\\\",b),p.call(f,r,t,e,{styleOne:l,eventDataKeys:u.eventDataKeys,transitionTime:u.CLICK_TRANSITION_TIME,transitionEasing:u.CLICK_TRANSITION_EASING}).call(c.setSliceCursor,t,{hideOnRoot:!1,hideOnLeaves:!1,isTransitioning:t._transitioning}),d.call(l,s,P,t,{hovered:!1}),s._text=(c.getPtLabel(s)||\\\"\\\").split(\\\"<br>\\\").join(\\\" \\\")||\\\"\\\";var v=i.ensureSingle(p,\\\"g\\\",\\\"slicetext\\\"),k=i.ensureSingle(v,\\\"text\\\",\\\"\\\",(function(t){t.attr(\\\"data-notex\\\",1)})),C=i.ensureUniformFontSize(t,c.determineTextFont(P,s,L.font,{onPathbar:!0}));k.text(s._text||\\\" \\\").classed(\\\"slicetext\\\",!0).attr(\\\"text-anchor\\\",\\\"start\\\").call(a.font,C).call(o.convertToTspans,t),s.textBB=a.bBox(k.node()),s.transform=_(s,{fontSize:C.size,onPathbar:!0}),s.transform.fontSize=C.size,T?k.transition().attrTween(\\\"transform\\\",(function(t){var e=M(t,h,S,[g,y]);return function(t){return w(e(t))}})):k.attr(\\\"transform\\\",w(s))}))}},52583:function(t,e,r){\\\"use strict\\\";var n=r(39898),i=r(71828),a=r(91424),o=r(63893),s=r(37210),l=r(96362).styleOne,u=r(43473),c=r(2791),f=r(83523),h=r(24714).formatSliceLabel,p=!1;t.exports=function(t,e,r,d,v){var g=v.width,y=v.height,m=v.viewX,x=v.viewY,b=v.pathSlice,_=v.toMoveInsideSlice,w=v.strTransform,T=v.hasTransition,k=v.handleSlicesExit,A=v.makeUpdateSliceInterpolator,M=v.makeUpdateTextInterpolator,S=v.prevEntry,E=t._context.staticPlot,L=t._fullLayout,C=e[0].trace,P=-1!==C.textposition.indexOf(\\\"left\\\"),O=-1!==C.textposition.indexOf(\\\"right\\\"),I=-1!==C.textposition.indexOf(\\\"bottom\\\"),D=!I&&!C.marker.pad.t||I&&!C.marker.pad.b,z=s(r,[g,y],{packing:C.tiling.packing,squarifyratio:C.tiling.squarifyratio,flipX:C.tiling.flip.indexOf(\\\"x\\\")>-1,flipY:C.tiling.flip.indexOf(\\\"y\\\")>-1,pad:{inner:C.tiling.pad,top:C.marker.pad.t,left:C.marker.pad.l,right:C.marker.pad.r,bottom:C.marker.pad.b}}).descendants(),R=1/0,F=-1/0;z.forEach((function(t){var e=t.depth;e>=C._maxDepth?(t.x0=t.x1=(t.x0+t.x1)/2,t.y0=t.y1=(t.y0+t.y1)/2):(R=Math.min(R,e),F=Math.max(F,e))})),d=d.data(z,c.getPtId),C._maxVisibleLayers=isFinite(F)?F-R+1:0,d.enter().append(\\\"g\\\").classed(\\\"slice\\\",!0),k(d,p,{},[g,y],b),d.order();var B=null;if(T&&S){var N=c.getPtId(S);d.each((function(t){null===B&&c.getPtId(t)===N&&(B={x0:t.x0,x1:t.x1,y0:t.y0,y1:t.y1})}))}var j=function(){return B||{x0:0,x1:g,y0:0,y1:y}},U=d;return T&&(U=U.transition().each(\\\"end\\\",(function(){var e=n.select(this);c.setSliceCursor(e,t,{hideOnRoot:!0,hideOnLeaves:!1,isTransitioning:!1})}))),U.each((function(s){var d=c.isHeader(s,C);s._x0=m(s.x0),s._x1=m(s.x1),s._y0=x(s.y0),s._y1=x(s.y1),s._hoverX=m(s.x1-C.marker.pad.r),s._hoverY=x(I?s.y1-C.marker.pad.b/2:s.y0+C.marker.pad.t/2);var v=n.select(this),k=i.ensureSingle(v,\\\"path\\\",\\\"surface\\\",(function(t){t.style(\\\"pointer-events\\\",E?\\\"none\\\":\\\"all\\\")}));T?k.transition().attrTween(\\\"d\\\",(function(t){var e=A(t,p,j(),[g,y]);return function(t){return b(e(t))}})):k.attr(\\\"d\\\",b),v.call(f,r,t,e,{styleOne:l,eventDataKeys:u.eventDataKeys,transitionTime:u.CLICK_TRANSITION_TIME,transitionEasing:u.CLICK_TRANSITION_EASING}).call(c.setSliceCursor,t,{isTransitioning:t._transitioning}),k.call(l,s,C,t,{hovered:!1}),s.x0===s.x1||s.y0===s.y1?s._text=\\\"\\\":s._text=d?D?\\\"\\\":c.getPtLabel(s)||\\\"\\\":h(s,r,C,e,L)||\\\"\\\";var S=i.ensureSingle(v,\\\"g\\\",\\\"slicetext\\\"),z=i.ensureSingle(S,\\\"text\\\",\\\"\\\",(function(t){t.attr(\\\"data-notex\\\",1)})),R=i.ensureUniformFontSize(t,c.determineTextFont(C,s,L.font));z.text(s._text||\\\" \\\").classed(\\\"slicetext\\\",!0).attr(\\\"text-anchor\\\",O?\\\"end\\\":P||d?\\\"start\\\":\\\"middle\\\").call(a.font,R).call(o.convertToTspans,t),s.textBB=a.bBox(z.node()),s.transform=_(s,{fontSize:R.size,isHeader:d}),s.transform.fontSize=R.size,T?z.transition().attrTween(\\\"transform\\\",(function(t){var e=M(t,p,j(),[g,y]);return function(t){return w(e(t))}})):z.attr(\\\"transform\\\",w(s))})),B}},14102:function(t){\\\"use strict\\\";t.exports=function t(e,r,n){var i;n.swapXY&&(i=e.x0,e.x0=e.y0,e.y0=i,i=e.x1,e.x1=e.y1,e.y1=i),n.flipX&&(i=e.x0,e.x0=r[0]-e.x1,e.x1=r[0]-i),n.flipY&&(i=e.y0,e.y0=r[1]-e.y1,e.y1=r[1]-i);var a=e.children;if(a)for(var o=0;o<a.length;o++)t(a[o],r,n)}},70954:function(t,e,r){\\\"use strict\\\";t.exports={moduleType:\\\"trace\\\",name:\\\"treemap\\\",basePlotModule:r(78018),categories:[],animatable:!0,attributes:r(45802),layoutAttributes:r(55479),supplyDefaults:r(91174),supplyLayoutDefaults:r(77182),calc:r(65039).y,crossTraceCalc:r(65039).T,plot:r(5893),style:r(96362).style,colorbar:r(4898),meta:{}}},55479:function(t){\\\"use strict\\\";t.exports={treemapcolorway:{valType:\\\"colorlist\\\",editType:\\\"calc\\\"},extendtreemapcolors:{valType:\\\"boolean\\\",dflt:!0,editType:\\\"calc\\\"}}},77182:function(t,e,r){\\\"use strict\\\";var n=r(71828),i=r(55479);t.exports=function(t,e){function r(r,a){return n.coerce(t,e,i,r,a)}r(\\\"treemapcolorway\\\",e.colorway),r(\\\"extendtreemapcolors\\\")}},37210:function(t,e,r){\\\"use strict\\\";var n=r(674),i=r(14102);t.exports=function(t,e,r){var a,o=r.flipX,s=r.flipY,l=\\\"dice-slice\\\"===r.packing,u=r.pad[s?\\\"bottom\\\":\\\"top\\\"],c=r.pad[o?\\\"right\\\":\\\"left\\\"],f=r.pad[o?\\\"left\\\":\\\"right\\\"],h=r.pad[s?\\\"top\\\":\\\"bottom\\\"];l&&(a=c,c=u,u=a,a=f,f=h,h=a);var p=n.treemap().tile(function(t,e){switch(t){case\\\"squarify\\\":return n.treemapSquarify.ratio(e);case\\\"binary\\\":return n.treemapBinary;case\\\"dice\\\":return n.treemapDice;case\\\"slice\\\":return n.treemapSlice;default:return n.treemapSliceDice}}(r.packing,r.squarifyratio)).paddingInner(r.pad.inner).paddingLeft(c).paddingRight(f).paddingTop(u).paddingBottom(h).size(l?[e[1],e[0]]:e)(t);return(l||o||s)&&i(p,e,{swapXY:l,flipX:o,flipY:s}),p}},5893:function(t,e,r){\\\"use strict\\\";var n=r(80694),i=r(52583);t.exports=function(t,e,r,a){return n(t,e,r,a,{type:\\\"treemap\\\",drawDescendants:i})}},46650:function(t,e,r){\\\"use strict\\\";var n=r(39898),i=r(81684).sX,a=r(2791),o=r(71828),s=r(97313).TEXTPAD,l=r(17295).toMoveInsideBar,u=r(72597).recordMinTextSize,c=r(43473),f=r(66209);function h(t){return a.isHierarchyRoot(t)?\\\"\\\":a.getPtId(t)}t.exports=function(t,e,r,p,d){var v=t._fullLayout,g=e[0],y=g.trace,m=\\\"icicle\\\"===y.type,x=g.hierarchy,b=a.findEntryWithLevel(x,y.level),_=n.select(r),w=_.selectAll(\\\"g.pathbar\\\"),T=_.selectAll(\\\"g.slice\\\");if(!b)return w.remove(),void T.remove();var k=a.isHierarchyRoot(b),A=!v.uniformtext.mode&&a.hasTransition(p),M=a.getMaxDepth(y),S=v._size,E=y.domain,L=S.w*(E.x[1]-E.x[0]),C=S.h*(E.y[1]-E.y[0]),P=L,O=y.pathbar.thickness,I=y.marker.line.width+c.gapWithPathbar,D=y.pathbar.visible?y.pathbar.side.indexOf(\\\"bottom\\\")>-1?C+I:-(O+I):0,z={x0:P,x1:P,y0:D,y1:D+O},R=function(t,e,r){var n=y.tiling.pad,i=function(t){return t-n<=e.x0},a=function(t){return t+n>=e.x1},o=function(t){return t-n<=e.y0},s=function(t){return t+n>=e.y1};return t.x0===e.x0&&t.x1===e.x1&&t.y0===e.y0&&t.y1===e.y1?{x0:t.x0,x1:t.x1,y0:t.y0,y1:t.y1}:{x0:i(t.x0-n)?0:a(t.x0-n)?r[0]:t.x0,x1:i(t.x1+n)?0:a(t.x1+n)?r[0]:t.x1,y0:o(t.y0-n)?0:s(t.y0-n)?r[1]:t.y0,y1:o(t.y1+n)?0:s(t.y1+n)?r[1]:t.y1}},F=null,B={},N={},j=null,U=function(t,e){return e?B[h(t)]:N[h(t)]};g.hasMultipleRoots&&k&&M++,y._maxDepth=M,y._backgroundColor=v.paper_bgcolor,y._entryDepth=b.data.depth,y._atRootLevel=k;var V=-L/2+S.l+S.w*(E.x[1]+E.x[0])/2,H=-C/2+S.t+S.h*(1-(E.y[1]+E.y[0])/2),q=function(t){return V+t},G=function(t){return H+t},Z=G(0),Y=q(0),W=function(t){return Y+t},X=function(t){return Z+t};function J(t,e){return t+\\\",\\\"+e}var K=W(0),$=function(t){t.x=Math.max(K,t.x)},Q=y.pathbar.edgeshape,tt=y[m?\\\"tiling\\\":\\\"marker\\\"].pad,et=function(t){return-1!==y.textposition.indexOf(t)},rt=et(\\\"top\\\"),nt=et(\\\"left\\\"),it=et(\\\"right\\\"),at=et(\\\"bottom\\\"),ot=function(t,e){var r=t.x0,n=t.x1,i=t.y0,a=t.y1,o=t.textBB,c=rt||e.isHeader&&!at?\\\"start\\\":at?\\\"end\\\":\\\"middle\\\",f=et(\\\"right\\\"),h=et(\\\"left\\\")||e.onPathbar?-1:f?1:0;if(e.isHeader){if((r+=(m?tt:tt.l)-s)>=(n-=(m?tt:tt.r)-s)){var p=(r+n)/2;r=p,n=p}var d;at?i<(d=a-(m?tt:tt.b))&&d<a&&(i=d):i<(d=i+(m?tt:tt.t))&&d<a&&(a=d)}var g=l(r,n,i,a,o,{isHorizontal:!1,constrained:!0,angle:0,anchor:c,leftToRight:h});return g.fontSize=e.fontSize,g.targetX=q(g.targetX),g.targetY=G(g.targetY),isNaN(g.targetX)||isNaN(g.targetY)?{}:(r!==n&&i!==a&&u(y.type,g,v),{scale:g.scale,rotate:g.rotate,textX:g.textX,textY:g.textY,anchorX:g.anchorX,anchorY:g.anchorY,targetX:g.targetX,targetY:g.targetY})},st=function(t,e){for(var r,n=0,i=t;!r&&n<M;)n++,(i=i.parent)?r=U(i,e):n=M;return r||{}},lt=function(t,e,r,n,a){var s,l=U(t,e);if(l)s=l;else if(e)s=z;else if(F)if(t.parent){var u=j||r;u&&!e?s=R(t,u,n):(s={},o.extendFlat(s,st(t,e)))}else s=o.extendFlat({},t),m&&(\\\"h\\\"===a.orientation?a.flipX?s.x0=t.x1:s.x1=0:a.flipY?s.y0=t.y1:s.y1=0);else s={};return i(s,{x0:t.x0,x1:t.x1,y0:t.y0,y1:t.y1})},ut=function(t,e,r,n){var s=U(t,e),l={},c=function(t,e,r,n){if(e)return B[h(x)]||z;var i=N[y.level]||r;return function(t){return t.data.depth-b.data.depth<M}(t)?R(t,i,n):{}}(t,e,r,n);o.extendFlat(l,{transform:ot({x0:c.x0,x1:c.x1,y0:c.y0,y1:c.y1,textBB:t.textBB,_text:t._text},{isHeader:a.isHeader(t,y)})}),s?l=s:t.parent&&o.extendFlat(l,st(t,e));var f=t.transform;return t.x0!==t.x1&&t.y0!==t.y1&&u(y.type,f,v),i(l,{transform:{scale:f.scale,rotate:f.rotate,textX:f.textX,textY:f.textY,anchorX:f.anchorX,anchorY:f.anchorY,targetX:f.targetX,targetY:f.targetY}})},ct=function(t,e,r,a,o){var s=a[0],l=a[1];A?t.exit().transition().each((function(){var t=n.select(this);t.select(\\\"path.surface\\\").transition().attrTween(\\\"d\\\",(function(t){var r=function(t,e,r,n){var a,o=U(t,e);if(e)a=z;else{var s=U(b,e);a=s?R(t,s,n):{}}return i(o,a)}(t,e,0,[s,l]);return function(t){return o(r(t))}})),t.select(\\\"g.slicetext\\\").attr(\\\"opacity\\\",0)})).remove():t.exit().remove()},ft=function(t){var e=t.transform;return t.x0!==t.x1&&t.y0!==t.y1&&u(y.type,e,v),o.getTextTransform({textX:e.textX,textY:e.textY,anchorX:e.anchorX,anchorY:e.anchorY,targetX:e.targetX,targetY:e.targetY,scale:e.scale,rotate:e.rotate})};A&&(w.each((function(t){B[h(t)]={x0:t.x0,x1:t.x1,y0:t.y0,y1:t.y1},t.transform&&(B[h(t)].transform={textX:t.transform.textX,textY:t.transform.textY,anchorX:t.transform.anchorX,anchorY:t.transform.anchorY,targetX:t.transform.targetX,targetY:t.transform.targetY,scale:t.transform.scale,rotate:t.transform.rotate})})),T.each((function(t){N[h(t)]={x0:t.x0,x1:t.x1,y0:t.y0,y1:t.y1},t.transform&&(N[h(t)].transform={textX:t.transform.textX,textY:t.transform.textY,anchorX:t.transform.anchorX,anchorY:t.transform.anchorY,targetX:t.transform.targetX,targetY:t.transform.targetY,scale:t.transform.scale,rotate:t.transform.rotate}),!F&&a.isEntry(t)&&(F=t)}))),j=d(t,e,b,T,{width:L,height:C,viewX:q,viewY:G,pathSlice:function(t){var e=q(t.x0),r=q(t.x1),n=G(t.y0),i=G(t.y1),a=r-e,o=i-n;if(!a||!o)return\\\"\\\";var s=y.marker.cornerradius||0,l=Math.min(s,a/2,o/2);l&&t.data&&t.data.data&&t.data.data.label&&(rt&&(l=Math.min(l,tt.t)),nt&&(l=Math.min(l,tt.l)),it&&(l=Math.min(l,tt.r)),at&&(l=Math.min(l,tt.b)));var u=function(t,e){return l?\\\"a\\\"+J(l,l)+\\\" 0 0 1 \\\"+J(t,e):\\\"\\\"};return\\\"M\\\"+J(e,n+l)+u(l,-l)+\\\"L\\\"+J(r-l,n)+u(l,l)+\\\"L\\\"+J(r,i-l)+u(-l,l)+\\\"L\\\"+J(e+l,i)+u(-l,-l)+\\\"Z\\\"},toMoveInsideSlice:ot,prevEntry:F,makeUpdateSliceInterpolator:lt,makeUpdateTextInterpolator:ut,handleSlicesExit:ct,hasTransition:A,strTransform:ft}),y.pathbar.visible?f(t,e,b,w,{barDifY:D,width:P,height:O,viewX:W,viewY:X,pathSlice:function(t){var e=W(Math.max(Math.min(t.x0,t.x0),0)),r=W(Math.min(Math.max(t.x1,t.x1),P)),n=X(t.y0),i=X(t.y1),a=O/2,o={},s={};o.x=e,s.x=r,o.y=s.y=(n+i)/2;var l={x:e,y:n},u={x:r,y:n},c={x:r,y:i},f={x:e,y:i};return\\\">\\\"===Q?(l.x-=a,u.x-=a,c.x-=a,f.x-=a):\\\"/\\\"===Q?(c.x-=a,f.x-=a,o.x-=a/2,s.x-=a/2):\\\"\\\\\\\\\\\"===Q?(l.x-=a,u.x-=a,o.x-=a/2,s.x-=a/2):\\\"<\\\"===Q&&(o.x-=a,s.x-=a),$(l),$(f),$(o),$(u),$(c),$(s),\\\"M\\\"+J(l.x,l.y)+\\\"L\\\"+J(u.x,u.y)+\\\"L\\\"+J(s.x,s.y)+\\\"L\\\"+J(c.x,c.y)+\\\"L\\\"+J(f.x,f.y)+\\\"L\\\"+J(o.x,o.y)+\\\"Z\\\"},toMoveInsideSlice:ot,makeUpdateSliceInterpolator:lt,makeUpdateTextInterpolator:ut,handleSlicesExit:ct,hasTransition:A,strTransform:ft}):w.remove()}},96362:function(t,e,r){\\\"use strict\\\";var n=r(39898),i=r(7901),a=r(71828),o=r(2791),s=r(72597).resizeText,l=r(43467);function u(t,e,r,n,s){var u,c,f=(s||{}).hovered,h=e.data.data,p=h.i,d=h.color,v=o.isHierarchyRoot(e),g=1;if(f)u=r._hovered.marker.line.color,c=r._hovered.marker.line.width;else if(v&&d===r.root.color)g=100,u=\\\"rgba(0,0,0,0)\\\",c=0;else if(u=a.castOption(r,p,\\\"marker.line.color\\\")||i.defaultLine,c=a.castOption(r,p,\\\"marker.line.width\\\")||0,!r._hasColorscale&&!e.onPathbar){var y=r.marker.depthfade;if(y){var m,x=i.combine(i.addOpacity(r._backgroundColor,.75),d);if(!0===y){var b=o.getMaxDepth(r);m=isFinite(b)?o.isLeaf(e)?0:r._maxVisibleLayers-(e.data.depth-r._entryDepth):e.data.height+1}else m=e.data.depth-r._entryDepth,r._atRootLevel||m++;if(m>0)for(var _=0;_<m;_++){var w=.5*_/m;d=i.combine(i.addOpacity(x,w),d)}}}t.call(l,e,r,n,d).style(\\\"stroke-width\\\",c).call(i.stroke,u).style(\\\"opacity\\\",g)}t.exports={style:function(t){var e=t._fullLayout._treemaplayer.selectAll(\\\".trace\\\");s(t,e,\\\"treemap\\\"),e.each((function(e){var r=n.select(this),i=e[0].trace;r.style(\\\"opacity\\\",i.opacity),r.selectAll(\\\"path.surface\\\").each((function(e){n.select(this).call(u,e,i,t,{hovered:!1})}))}))},styleOne:u}},68875:function(t,e,r){\\\"use strict\\\";var n=r(53522),i=r(1426).extendFlat,a=r(12663).axisHoverFormat;t.exports={y:n.y,x:n.x,x0:n.x0,y0:n.y0,xhoverformat:a(\\\"x\\\"),yhoverformat:a(\\\"y\\\"),name:i({},n.name,{}),orientation:i({},n.orientation,{}),bandwidth:{valType:\\\"number\\\",min:0,editType:\\\"calc\\\"},scalegroup:{valType:\\\"string\\\",dflt:\\\"\\\",editType:\\\"calc\\\"},scalemode:{valType:\\\"enumerated\\\",values:[\\\"width\\\",\\\"count\\\"],dflt:\\\"width\\\",editType:\\\"calc\\\"},spanmode:{valType:\\\"enumerated\\\",values:[\\\"soft\\\",\\\"hard\\\",\\\"manual\\\"],dflt:\\\"soft\\\",editType:\\\"calc\\\"},span:{valType:\\\"info_array\\\",items:[{valType:\\\"any\\\",editType:\\\"calc\\\"},{valType:\\\"any\\\",editType:\\\"calc\\\"}],editType:\\\"calc\\\"},line:{color:{valType:\\\"color\\\",editType:\\\"style\\\"},width:{valType:\\\"number\\\",min:0,dflt:2,editType:\\\"style\\\"},editType:\\\"plot\\\"},fillcolor:n.fillcolor,points:i({},n.boxpoints,{}),jitter:i({},n.jitter,{}),pointpos:i({},n.pointpos,{}),width:i({},n.width,{}),marker:n.marker,text:n.text,hovertext:n.hovertext,hovertemplate:n.hovertemplate,quartilemethod:n.quartilemethod,box:{visible:{valType:\\\"boolean\\\",dflt:!1,editType:\\\"plot\\\"},width:{valType:\\\"number\\\",min:0,max:1,dflt:.25,editType:\\\"plot\\\"},fillcolor:{valType:\\\"color\\\",editType:\\\"style\\\"},line:{color:{valType:\\\"color\\\",editType:\\\"style\\\"},width:{valType:\\\"number\\\",min:0,editType:\\\"style\\\"},editType:\\\"style\\\"},editType:\\\"plot\\\"},meanline:{visible:{valType:\\\"boolean\\\",dflt:!1,editType:\\\"plot\\\"},color:{valType:\\\"color\\\",editType:\\\"style\\\"},width:{valType:\\\"number\\\",min:0,editType:\\\"style\\\"},editType:\\\"plot\\\"},side:{valType:\\\"enumerated\\\",values:[\\\"both\\\",\\\"positive\\\",\\\"negative\\\"],dflt:\\\"both\\\",editType:\\\"calc\\\"},offsetgroup:n.offsetgroup,alignmentgroup:n.alignmentgroup,selected:n.selected,unselected:n.unselected,hoveron:{valType:\\\"flaglist\\\",flags:[\\\"violins\\\",\\\"points\\\",\\\"kde\\\"],dflt:\\\"violins+points+kde\\\",extras:[\\\"all\\\"],editType:\\\"style\\\"}}},38603:function(t,e,r){\\\"use strict\\\";var n=r(71828),i=r(89298),a=r(48518),o=r(60168),s=r(50606).BADNUM;function l(t,e,r){var i=e.max-e.min;if(!i)return t.bandwidth?t.bandwidth:0;if(t.bandwidth)return Math.max(t.bandwidth,i/1e4);var a=r.length,o=n.stdev(r,a-1,e.mean);return Math.max(function(t,e,r){return 1.059*Math.min(e,r/1.349)*Math.pow(t,-.2)}(a,o,e.q3-e.q1),i/100)}function u(t,e,r,n){var a,o=t.spanmode,l=t.span||[],u=[e.min,e.max],c=[e.min-2*n,e.max+2*n];function f(n){var i=l[n],a=\\\"multicategory\\\"===r.type?r.r2c(i):r.d2c(i,0,t[e.valLetter+\\\"calendar\\\"]);return a===s?c[n]:a}var h={type:\\\"linear\\\",range:a=\\\"soft\\\"===o?c:\\\"hard\\\"===o?u:[f(0),f(1)]};return i.setConvert(h),h.cleanRange(),a}t.exports=function(t,e){var r=a(t,e);if(r[0].t.empty)return r;for(var s=t._fullLayout,c=i.getFromId(t,e[\\\"h\\\"===e.orientation?\\\"xaxis\\\":\\\"yaxis\\\"]),f=1/0,h=-1/0,p=0,d=0,v=0;v<r.length;v++){var g=r[v],y=g.pts.map(o.extractVal),m=g.bandwidth=l(e,g,y),x=g.span=u(e,g,c,m);if(g.min===g.max&&0===m)x=g.span=[g.min,g.max],g.density=[{v:1,t:x[0]}],g.bandwidth=m,p=Math.max(p,1);else{var b=x[1]-x[0],_=Math.ceil(b/(m/3)),w=b/_;if(!isFinite(w)||!isFinite(_))return n.error(\\\"Something went wrong with computing the violin span\\\"),r[0].t.empty=!0,r;var T=o.makeKDE(g,e,y);g.density=new Array(_);for(var k=0,A=x[0];A<x[1]+w/2;k++,A+=w){var M=T(A);g.density[k]={v:M,t:A},p=Math.max(p,M)}}d=Math.max(d,y.length),f=Math.min(f,x[0]),h=Math.max(h,x[1])}var S=i.findExtremes(c,[f,h],{padded:!0});if(e._extremes[c._id]=S,e.width)r[0].t.maxKDE=p;else{var E=s._violinScaleGroupStats,L=e.scalegroup,C=E[L];C?(C.maxKDE=Math.max(C.maxKDE,p),C.maxCount=Math.max(C.maxCount,d)):E[L]={maxKDE:p,maxCount:d}}return r[0].t.labels.kde=n._(t,\\\"kde:\\\"),r}},86403:function(t,e,r){\\\"use strict\\\";var n=r(37188).setPositionOffset,i=[\\\"v\\\",\\\"h\\\"];t.exports=function(t,e){for(var r=t.calcdata,a=e.xaxis,o=e.yaxis,s=0;s<i.length;s++){for(var l=i[s],u=\\\"h\\\"===l?o:a,c=[],f=0;f<r.length;f++){var h=r[f],p=h[0].t,d=h[0].trace;!0!==d.visible||\\\"violin\\\"!==d.type||p.empty||d.orientation!==l||d.xaxis!==a._id||d.yaxis!==o._id||c.push(f)}n(\\\"violin\\\",t,c,u)}}},15899:function(t,e,r){\\\"use strict\\\";var n=r(71828),i=r(7901),a=r(36411),o=r(68875);t.exports=function(t,e,r,s){function l(r,i){return n.coerce(t,e,o,r,i)}function u(r,i){return n.coerce2(t,e,o,r,i)}if(a.handleSampleDefaults(t,e,l,s),!1!==e.visible){l(\\\"bandwidth\\\"),l(\\\"side\\\"),l(\\\"width\\\")||(l(\\\"scalegroup\\\",e.name),l(\\\"scalemode\\\"));var c,f=l(\\\"span\\\");Array.isArray(f)&&(c=\\\"manual\\\"),l(\\\"spanmode\\\",c);var h=l(\\\"line.color\\\",(t.marker||{}).color||r),p=l(\\\"line.width\\\"),d=l(\\\"fillcolor\\\",i.addOpacity(e.line.color,.5));a.handlePointsDefaults(t,e,l,{prefix:\\\"\\\"});var v=u(\\\"box.width\\\"),g=u(\\\"box.fillcolor\\\",d),y=u(\\\"box.line.color\\\",h),m=u(\\\"box.line.width\\\",p);l(\\\"box.visible\\\",Boolean(v||g||y||m))||(e.box={visible:!1});var x=u(\\\"meanline.color\\\",h),b=u(\\\"meanline.width\\\",p);l(\\\"meanline.visible\\\",Boolean(x||b))||(e.meanline={visible:!1}),l(\\\"quartilemethod\\\")}}},60168:function(t,e,r){\\\"use strict\\\";var n=r(71828),i=function(t){return 1/Math.sqrt(2*Math.PI)*Math.exp(-.5*t*t)};e.makeKDE=function(t,e,r){var n=r.length,a=i,o=t.bandwidth,s=1/(n*o);return function(t){for(var e=0,i=0;i<n;i++)e+=a((t-r[i])/o);return s*e}},e.getPositionOnKdePath=function(t,e,r){var i,a;\\\"h\\\"===e.orientation?(i=\\\"y\\\",a=\\\"x\\\"):(i=\\\"x\\\",a=\\\"y\\\");var o=n.findPointOnPath(t.path,r,a,{pathLength:t.pathLength}),s=t.posCenterPx,l=o[i];return[l,\\\"both\\\"===e.side?2*s-l:s]},e.getKdeValue=function(t,r,n){var i=t.pts.map(e.extractVal);return e.makeKDE(t,r,i)(n)/t.posDensityScale},e.extractVal=function(t){return t.v}},57634:function(t,e,r){\\\"use strict\\\";var n=r(7901),i=r(71828),a=r(89298),o=r(41868),s=r(60168);t.exports=function(t,e,r,l,u){u||(u={});var c,f,h=u.hoverLayer,p=t.cd,d=p[0].trace,v=d.hoveron,g=-1!==v.indexOf(\\\"violins\\\"),y=-1!==v.indexOf(\\\"kde\\\"),m=[];if(g||y){var x=o.hoverOnBoxes(t,e,r,l);if(y&&x.length>0){var b,_,w,T,k,A=t.xa,M=t.ya;\\\"h\\\"===d.orientation?(k=e,b=\\\"y\\\",w=M,_=\\\"x\\\",T=A):(k=r,b=\\\"x\\\",w=A,_=\\\"y\\\",T=M);var S=p[t.index];if(k>=S.span[0]&&k<=S.span[1]){var E=i.extendFlat({},t),L=T.c2p(k,!0),C=s.getKdeValue(S,d,k),P=s.getPositionOnKdePath(S,d,L),O=w._offset,I=w._length;E[b+\\\"0\\\"]=P[0],E[b+\\\"1\\\"]=P[1],E[_+\\\"0\\\"]=E[_+\\\"1\\\"]=L,E[_+\\\"Label\\\"]=_+\\\": \\\"+a.hoverLabelText(T,k,d[_+\\\"hoverformat\\\"])+\\\", \\\"+p[0].t.labels.kde+\\\" \\\"+C.toFixed(3);for(var D=0,z=0;z<x.length;z++)if(\\\"med\\\"===x[z].attr){D=z;break}E.spikeDistance=x[D].spikeDistance;var R=b+\\\"Spike\\\";E[R]=x[D][R],x[D].spikeDistance=void 0,x[D][R]=void 0,E.hovertemplate=!1,m.push(E),(f={})[b+\\\"1\\\"]=i.constrain(O+P[0],O,O+I),f[b+\\\"2\\\"]=i.constrain(O+P[1],O,O+I),f[_+\\\"1\\\"]=f[_+\\\"2\\\"]=T._offset+L}}g&&(m=m.concat(x))}-1!==v.indexOf(\\\"points\\\")&&(c=o.hoverOnPoints(t,e,r));var F=h.selectAll(\\\".violinline-\\\"+d.uid).data(f?[0]:[]);return F.enter().append(\\\"line\\\").classed(\\\"violinline-\\\"+d.uid,!0).attr(\\\"stroke-width\\\",1.5),F.exit().remove(),F.attr(f).call(n.stroke,t.color),\\\"closest\\\"===l?c?[c]:m:c?(m.push(c),m):m}},47462:function(t,e,r){\\\"use strict\\\";t.exports={attributes:r(68875),layoutAttributes:r(9228),supplyDefaults:r(15899),crossTraceDefaults:r(36411).crossTraceDefaults,supplyLayoutDefaults:r(33598),calc:r(38603),crossTraceCalc:r(86403),plot:r(28443),style:r(31847),styleOnSelect:r(16296).styleOnSelect,hoverPoints:r(57634),selectPoints:r(24626),moduleType:\\\"trace\\\",name:\\\"violin\\\",basePlotModule:r(93612),categories:[\\\"cartesian\\\",\\\"svg\\\",\\\"symbols\\\",\\\"oriented\\\",\\\"box-violin\\\",\\\"showLegend\\\",\\\"violinLayout\\\",\\\"zoomScale\\\"],meta:{}}},9228:function(t,e,r){\\\"use strict\\\";var n=r(40094),i=r(71828).extendFlat;t.exports={violinmode:i({},n.boxmode,{}),violingap:i({},n.boxgap,{}),violingroupgap:i({},n.boxgroupgap,{})}},33598:function(t,e,r){\\\"use strict\\\";var n=r(71828),i=r(9228),a=r(4199);t.exports=function(t,e,r){a._supply(t,e,r,(function(r,a){return n.coerce(t,e,i,r,a)}),\\\"violin\\\")}},28443:function(t,e,r){\\\"use strict\\\";var n=r(39898),i=r(71828),a=r(91424),o=r(86047),s=r(34621),l=r(60168);t.exports=function(t,e,r,u){var c=t._context.staticPlot,f=t._fullLayout,h=e.xaxis,p=e.yaxis;function d(t,e){var r=s(t,{xaxis:h,yaxis:p,trace:e,connectGaps:!0,baseTolerance:.75,shape:\\\"spline\\\",simplify:!0,linearized:!0});return a.smoothopen(r[0],1)}i.makeTraceGroups(u,r,\\\"trace violins\\\").each((function(t){var r=n.select(this),a=t[0],s=a.t,u=a.trace;if(!0!==u.visible||s.empty)r.remove();else{var v=s.bPos,g=s.bdPos,y=e[s.valLetter+\\\"axis\\\"],m=e[s.posLetter+\\\"axis\\\"],x=\\\"both\\\"===u.side,b=x||\\\"positive\\\"===u.side,_=x||\\\"negative\\\"===u.side,w=r.selectAll(\\\"path.violin\\\").data(i.identity);w.enter().append(\\\"path\\\").style(\\\"vector-effect\\\",c?\\\"none\\\":\\\"non-scaling-stroke\\\").attr(\\\"class\\\",\\\"violin\\\"),w.exit().remove(),w.each((function(t){var e,r,i,a,o,l,c,h,p=n.select(this),w=t.density,T=w.length,k=m.c2l(t.pos+v,!0),A=m.l2p(k);if(u.width)e=s.maxKDE/g;else{var M=f._violinScaleGroupStats[u.scalegroup];e=\\\"count\\\"===u.scalemode?M.maxKDE/g*(M.maxCount/t.pts.length):M.maxKDE/g}if(b){for(c=new Array(T),o=0;o<T;o++)(h=c[o]={})[s.posLetter]=k+w[o].v/e,h[s.valLetter]=y.c2l(w[o].t,!0);r=d(c,u)}if(_){for(c=new Array(T),l=0,o=T-1;l<T;l++,o--)(h=c[l]={})[s.posLetter]=k-w[o].v/e,h[s.valLetter]=y.c2l(w[o].t,!0);i=d(c,u)}if(x)a=r+\\\"L\\\"+i.substr(1)+\\\"Z\\\";else{var S=[A,y.c2p(w[0].t)],E=[A,y.c2p(w[T-1].t)];\\\"h\\\"===u.orientation&&(S.reverse(),E.reverse()),a=b?\\\"M\\\"+S+\\\"L\\\"+r.substr(1)+\\\"L\\\"+E:\\\"M\\\"+E+\\\"L\\\"+i.substr(1)+\\\"L\\\"+S}p.attr(\\\"d\\\",a),t.posCenterPx=A,t.posDensityScale=e*g,t.path=p.node(),t.pathLength=t.path.getTotalLength()/(x?2:1)}));var T,k,A,M=u.box,S=M.width,E=(M.line||{}).width;x?(T=g*S,k=0):b?(T=[0,g*S/2],k=E*{x:1,y:-1}[s.posLetter]):(T=[g*S/2,0],k=E*{x:-1,y:1}[s.posLetter]),o.plotBoxAndWhiskers(r,{pos:m,val:y},u,{bPos:v,bdPos:T,bPosPxOffset:k}),o.plotBoxMean(r,{pos:m,val:y},u,{bPos:v,bdPos:T,bPosPxOffset:k}),!u.box.visible&&u.meanline.visible&&(A=i.identity);var L=r.selectAll(\\\"path.meanline\\\").data(A||[]);L.enter().append(\\\"path\\\").attr(\\\"class\\\",\\\"meanline\\\").style(\\\"fill\\\",\\\"none\\\").style(\\\"vector-effect\\\",c?\\\"none\\\":\\\"non-scaling-stroke\\\"),L.exit().remove(),L.each((function(t){var e=y.c2p(t.mean,!0),r=l.getPositionOnKdePath(t,u,e);n.select(this).attr(\\\"d\\\",\\\"h\\\"===u.orientation?\\\"M\\\"+e+\\\",\\\"+r[0]+\\\"V\\\"+r[1]:\\\"M\\\"+r[0]+\\\",\\\"+e+\\\"H\\\"+r[1])})),o.plotPoints(r,{x:h,y:p},u,s)}}))}},31847:function(t,e,r){\\\"use strict\\\";var n=r(39898),i=r(7901),a=r(16296).stylePoints;t.exports=function(t){var e=n.select(t).selectAll(\\\"g.trace.violins\\\");e.style(\\\"opacity\\\",(function(t){return t[0].trace.opacity})),e.each((function(e){var r=e[0].trace,o=n.select(this),s=r.box||{},l=s.line||{},u=r.meanline||{},c=u.width;o.selectAll(\\\"path.violin\\\").style(\\\"stroke-width\\\",r.line.width+\\\"px\\\").call(i.stroke,r.line.color).call(i.fill,r.fillcolor),o.selectAll(\\\"path.box\\\").style(\\\"stroke-width\\\",l.width+\\\"px\\\").call(i.stroke,l.color).call(i.fill,s.fillcolor);var f={\\\"stroke-width\\\":c+\\\"px\\\",\\\"stroke-dasharray\\\":2*c+\\\"px,\\\"+c+\\\"px\\\"};o.selectAll(\\\"path.mean\\\").style(f).call(i.stroke,u.color),o.selectAll(\\\"path.meanline\\\").style(f).call(i.stroke,u.color),a(o,r,t)}))}},16336:function(t,e,r){\\\"use strict\\\";var n=r(50693),i=r(16249),a=r(54532),o=r(9012),s=r(1426).extendFlat,l=r(30962).overrideAll,u=t.exports=l(s({x:i.x,y:i.y,z:i.z,value:i.value,isomin:i.isomin,isomax:i.isomax,surface:i.surface,spaceframe:{show:{valType:\\\"boolean\\\",dflt:!1},fill:{valType:\\\"number\\\",min:0,max:1,dflt:1}},slices:i.slices,caps:i.caps,text:i.text,hovertext:i.hovertext,xhoverformat:i.xhoverformat,yhoverformat:i.yhoverformat,zhoverformat:i.zhoverformat,valuehoverformat:i.valuehoverformat,hovertemplate:i.hovertemplate},n(\\\"\\\",{colorAttr:\\\"`value`\\\",showScaleDflt:!0,editTypeOverride:\\\"calc\\\"}),{colorbar:i.colorbar,opacity:i.opacity,opacityscale:a.opacityscale,lightposition:i.lightposition,lighting:i.lighting,flatshading:i.flatshading,contour:i.contour,hoverinfo:s({},o.hoverinfo),showlegend:s({},o.showlegend,{dflt:!1})}),\\\"calc\\\",\\\"nested\\\");u.x.editType=u.y.editType=u.z.editType=u.value.editType=\\\"calc+clearAxisTypes\\\",u.transforms=void 0},64809:function(t,e,r){\\\"use strict\\\";var n=r(9330).gl_mesh3d,i=r(81697).parseColorScale,a=r(78614),o=r(21081).extractOpts,s=r(90060),l=r(22674).findNearestOnAxis,u=r(22674).generateIsoMeshes;function c(t,e,r){this.scene=t,this.uid=r,this.mesh=e,this.name=\\\"\\\",this.data=null,this.showContour=!1}var f=c.prototype;f.handlePick=function(t){if(t.object===this.mesh){var e=t.data.index,r=this.data._meshX[e],n=this.data._meshY[e],i=this.data._meshZ[e],a=this.data._Ys.length,o=this.data._Zs.length,s=l(r,this.data._Xs).id,u=l(n,this.data._Ys).id,c=l(i,this.data._Zs).id,f=t.index=c+o*u+o*a*s;t.traceCoordinate=[this.data._meshX[f],this.data._meshY[f],this.data._meshZ[f],this.data._value[f]];var h=this.data.hovertext||this.data.text;return Array.isArray(h)&&void 0!==h[f]?t.textLabel=h[f]:h&&(t.textLabel=h),!0}},f.update=function(t){var e=this.scene,r=e.fullSceneLayout;function n(t,e,r,n){return e.map((function(e){return t.d2l(e,0,n)*r}))}this.data=u(t);var l={positions:s(n(r.xaxis,t._meshX,e.dataScale[0],t.xcalendar),n(r.yaxis,t._meshY,e.dataScale[1],t.ycalendar),n(r.zaxis,t._meshZ,e.dataScale[2],t.zcalendar)),cells:s(t._meshI,t._meshJ,t._meshK),lightPosition:[t.lightposition.x,t.lightposition.y,t.lightposition.z],ambient:t.lighting.ambient,diffuse:t.lighting.diffuse,specular:t.lighting.specular,roughness:t.lighting.roughness,fresnel:t.lighting.fresnel,vertexNormalsEpsilon:t.lighting.vertexnormalsepsilon,faceNormalsEpsilon:t.lighting.facenormalsepsilon,opacity:t.opacity,opacityscale:t.opacityscale,contourEnable:t.contour.show,contourColor:a(t.contour.color).slice(0,3),contourWidth:t.contour.width,useFacetNormals:t.flatshading},c=o(t);l.vertexIntensity=t._meshIntensity,l.vertexIntensityBounds=[c.min,c.max],l.colormap=i(t),this.mesh.update(l)},f.dispose=function(){this.scene.glplot.remove(this.mesh),this.mesh.dispose()},t.exports=function(t,e){var r=t.glplot.gl,i=n({gl:r}),a=new c(t,i,e.uid);return i._trace=a,a.update(e),t.glplot.add(i),a}},47651:function(t,e,r){\\\"use strict\\\";var n=r(71828),i=r(16336),a=r(82738).supplyIsoDefaults,o=r(91831).opacityscaleDefaults;t.exports=function(t,e,r,s){function l(r,a){return n.coerce(t,e,i,r,a)}a(t,e,r,s,l),o(t,e,s,l)}},17659:function(t,e,r){\\\"use strict\\\";t.exports={attributes:r(16336),supplyDefaults:r(47651),calc:r(56959),colorbar:{min:\\\"cmin\\\",max:\\\"cmax\\\"},plot:r(64809),moduleType:\\\"trace\\\",name:\\\"volume\\\",basePlotModule:r(58547),categories:[\\\"gl3d\\\",\\\"showLegend\\\"],meta:{}}},43037:function(t,e,r){\\\"use strict\\\";var n=r(1486),i=r(82196).line,a=r(9012),o=r(12663).axisHoverFormat,s=r(5386).fF,l=r(5386).si,u=r(48334),c=r(1426).extendFlat,f=r(7901);function h(t){return{marker:{color:c({},n.marker.color,{arrayOk:!1,editType:\\\"style\\\"}),line:{color:c({},n.marker.line.color,{arrayOk:!1,editType:\\\"style\\\"}),width:c({},n.marker.line.width,{arrayOk:!1,editType:\\\"style\\\"}),editType:\\\"style\\\"},editType:\\\"style\\\"},editType:\\\"style\\\"}}t.exports={measure:{valType:\\\"data_array\\\",dflt:[],editType:\\\"calc\\\"},base:{valType:\\\"number\\\",dflt:null,arrayOk:!1,editType:\\\"calc\\\"},x:n.x,x0:n.x0,dx:n.dx,y:n.y,y0:n.y0,dy:n.dy,xperiod:n.xperiod,yperiod:n.yperiod,xperiod0:n.xperiod0,yperiod0:n.yperiod0,xperiodalignment:n.xperiodalignment,yperiodalignment:n.yperiodalignment,xhoverformat:o(\\\"x\\\"),yhoverformat:o(\\\"y\\\"),hovertext:n.hovertext,hovertemplate:s({},{keys:u.eventDataKeys}),hoverinfo:c({},a.hoverinfo,{flags:[\\\"name\\\",\\\"x\\\",\\\"y\\\",\\\"text\\\",\\\"initial\\\",\\\"delta\\\",\\\"final\\\"]}),textinfo:{valType:\\\"flaglist\\\",flags:[\\\"label\\\",\\\"text\\\",\\\"initial\\\",\\\"delta\\\",\\\"final\\\"],extras:[\\\"none\\\"],editType:\\\"plot\\\",arrayOk:!1},texttemplate:l({editType:\\\"plot\\\"},{keys:u.eventDataKeys.concat([\\\"label\\\"])}),text:n.text,textposition:n.textposition,insidetextanchor:n.insidetextanchor,textangle:n.textangle,textfont:n.textfont,insidetextfont:n.insidetextfont,outsidetextfont:n.outsidetextfont,constraintext:n.constraintext,cliponaxis:n.cliponaxis,orientation:n.orientation,offset:n.offset,width:n.width,increasing:h(),decreasing:h(),totals:h(),connector:{line:{color:c({},i.color,{dflt:f.defaultLine}),width:c({},i.width,{editType:\\\"plot\\\"}),dash:i.dash,editType:\\\"plot\\\"},mode:{valType:\\\"enumerated\\\",values:[\\\"spanning\\\",\\\"between\\\"],dflt:\\\"between\\\",editType:\\\"plot\\\"},visible:{valType:\\\"boolean\\\",dflt:!0,editType:\\\"plot\\\"},editType:\\\"plot\\\"},offsetgroup:n.offsetgroup,alignmentgroup:n.alignmentgroup}},52752:function(t,e,r){\\\"use strict\\\";var n=r(89298),i=r(42973),a=r(71828).mergeArray,o=r(66279),s=r(50606).BADNUM;function l(t){return\\\"a\\\"===t||\\\"absolute\\\"===t}function u(t){return\\\"t\\\"===t||\\\"total\\\"===t}t.exports=function(t,e){var r,c,f,h,p,d,v=n.getFromId(t,e.xaxis||\\\"x\\\"),g=n.getFromId(t,e.yaxis||\\\"y\\\");\\\"h\\\"===e.orientation?(r=v.makeCalcdata(e,\\\"x\\\"),f=g.makeCalcdata(e,\\\"y\\\"),h=i(e,g,\\\"y\\\",f),p=!!e.yperiodalignment,d=\\\"y\\\"):(r=g.makeCalcdata(e,\\\"y\\\"),f=v.makeCalcdata(e,\\\"x\\\"),h=i(e,v,\\\"x\\\",f),p=!!e.xperiodalignment,d=\\\"x\\\"),c=h.vals;for(var y,m=Math.min(c.length,r.length),x=new Array(m),b=0,_=!1,w=0;w<m;w++){var T=r[w]||0,k=!1;(r[w]!==s||u(e.measure[w])||l(e.measure[w]))&&w+1<m&&(r[w+1]!==s||u(e.measure[w+1])||l(e.measure[w+1]))&&(k=!0);var A=x[w]={i:w,p:c[w],s:T,rawS:T,cNext:k};l(e.measure[w])?(b=A.s,A.isSum=!0,A.dir=\\\"totals\\\",A.s=b):u(e.measure[w])?(A.isSum=!0,A.dir=\\\"totals\\\",A.s=b):(A.isSum=!1,A.dir=A.rawS<0?\\\"decreasing\\\":\\\"increasing\\\",y=A.s,A.s=b+y,b+=y),\\\"totals\\\"===A.dir&&(_=!0),p&&(x[w].orig_p=f[w],x[w][d+\\\"End\\\"]=h.ends[w],x[w][d+\\\"Start\\\"]=h.starts[w]),e.ids&&(A.id=String(e.ids[w])),A.v=(e.base||0)+b}return x.length&&(x[0].hasTotals=_),a(e.text,x,\\\"tx\\\"),a(e.hovertext,x,\\\"htx\\\"),o(x,e),x}},48334:function(t){\\\"use strict\\\";t.exports={eventDataKeys:[\\\"initial\\\",\\\"delta\\\",\\\"final\\\"]}},70766:function(t,e,r){\\\"use strict\\\";var n=r(11661).setGroupPositions;t.exports=function(t,e){var r,i,a=t._fullLayout,o=t._fullData,s=t.calcdata,l=e.xaxis,u=e.yaxis,c=[],f=[],h=[];for(i=0;i<o.length;i++){var p=o[i];!0===p.visible&&p.xaxis===l._id&&p.yaxis===u._id&&\\\"waterfall\\\"===p.type&&(r=s[i],\\\"h\\\"===p.orientation?h.push(r):f.push(r),c.push(r))}var d={mode:a.waterfallmode,norm:a.waterfallnorm,gap:a.waterfallgap,groupgap:a.waterfallgroupgap};for(n(t,l,u,f,d),n(t,u,l,h,d),i=0;i<c.length;i++){r=c[i];for(var v=0;v<r.length;v++){var g=r[v];!1===g.isSum&&(g.s0+=0===v?0:r[v-1].s),v+1<r.length&&(r[v].nextP0=r[v+1].p0,r[v].nextS0=r[v+1].s0)}}}},83266:function(t,e,r){\\\"use strict\\\";var n=r(71828),i=r(26125),a=r(90769).handleText,o=r(67513),s=r(73927),l=r(43037),u=r(7901),c=r(22372),f=c.INCREASING.COLOR,h=c.DECREASING.COLOR;function p(t,e,r){t(e+\\\".marker.color\\\",r),t(e+\\\".marker.line.color\\\",u.defaultLine),t(e+\\\".marker.line.width\\\")}t.exports={supplyDefaults:function(t,e,r,i){function u(r,i){return n.coerce(t,e,l,r,i)}if(o(t,e,i,u)){s(t,e,i,u),u(\\\"xhoverformat\\\"),u(\\\"yhoverformat\\\"),u(\\\"measure\\\"),u(\\\"orientation\\\",e.x&&!e.y?\\\"h\\\":\\\"v\\\"),u(\\\"base\\\"),u(\\\"offset\\\"),u(\\\"width\\\"),u(\\\"text\\\"),u(\\\"hovertext\\\"),u(\\\"hovertemplate\\\");var c=u(\\\"textposition\\\");a(t,e,i,u,c,{moduleHasSelected:!1,moduleHasUnselected:!1,moduleHasConstrain:!0,moduleHasCliponaxis:!0,moduleHasTextangle:!0,moduleHasInsideanchor:!0}),\\\"none\\\"!==e.textposition&&(u(\\\"texttemplate\\\"),e.texttemplate||u(\\\"textinfo\\\")),p(u,\\\"increasing\\\",f),p(u,\\\"decreasing\\\",h),p(u,\\\"totals\\\",\\\"#4499FF\\\"),u(\\\"connector.visible\\\")&&(u(\\\"connector.mode\\\"),u(\\\"connector.line.width\\\")&&(u(\\\"connector.line.color\\\"),u(\\\"connector.line.dash\\\")))}else e.visible=!1},crossTraceDefaults:function(t,e){var r,a;function o(t){return n.coerce(a._input,a,l,t)}if(\\\"group\\\"===e.waterfallmode)for(var s=0;s<t.length;s++)r=(a=t[s])._input,i(r,a,e,o)}}},58593:function(t){\\\"use strict\\\";t.exports=function(t,e){return t.x=\\\"xVal\\\"in e?e.xVal:e.x,t.y=\\\"yVal\\\"in e?e.yVal:e.y,\\\"initial\\\"in e&&(t.initial=e.initial),\\\"delta\\\"in e&&(t.delta=e.delta),\\\"final\\\"in e&&(t.final=e.final),e.xa&&(t.xaxis=e.xa),e.ya&&(t.yaxis=e.ya),t}},61326:function(t,e,r){\\\"use strict\\\";var n=r(89298).hoverLabelText,i=r(7901).opacity,a=r(95423).hoverOnBars,o=r(22372),s=o.INCREASING.SYMBOL,l=o.DECREASING.SYMBOL;t.exports=function(t,e,r,o,u){var c=a(t,e,r,o,u);if(c){var f=c.cd,h=f[0].trace,p=\\\"h\\\"===h.orientation,d=p?\\\"x\\\":\\\"y\\\",v=p?t.xa:t.ya,g=f[c.index],y=g.isSum?g.b+g.s:g.rawS;if(!g.isSum){c.initial=g.b+g.s-y,c.delta=y,c.final=c.initial+c.delta;var m=k(Math.abs(c.delta));c.deltaLabel=y<0?\\\"(\\\"+m+\\\")\\\":m,c.finalLabel=k(c.final),c.initialLabel=k(c.initial)}var x=g.hi||h.hoverinfo,b=[];if(x&&\\\"none\\\"!==x&&\\\"skip\\\"!==x){var _=\\\"all\\\"===x,w=x.split(\\\"+\\\"),T=function(t){return _||-1!==w.indexOf(t)};g.isSum||(!T(\\\"final\\\")||T(p?\\\"x\\\":\\\"y\\\")||b.push(c.finalLabel),T(\\\"delta\\\")&&(y<0?b.push(c.deltaLabel+\\\" \\\"+l):b.push(c.deltaLabel+\\\" \\\"+s)),T(\\\"initial\\\")&&b.push(\\\"Initial: \\\"+c.initialLabel))}return b.length&&(c.extraText=b.join(\\\"<br>\\\")),c.color=function(t,e){var r=t[e.dir].marker,n=r.color,a=r.line.color,o=r.line.width;return i(n)?n:i(a)&&o?a:void 0}(h,g),[c]}function k(t){return n(v,t,h[d+\\\"hoverformat\\\"])}}},19990:function(t,e,r){\\\"use strict\\\";t.exports={attributes:r(43037),layoutAttributes:r(13494),supplyDefaults:r(83266).supplyDefaults,crossTraceDefaults:r(83266).crossTraceDefaults,supplyLayoutDefaults:r(5176),calc:r(52752),crossTraceCalc:r(70766),plot:r(30436),style:r(55750).style,hoverPoints:r(61326),eventData:r(58593),selectPoints:r(81974),moduleType:\\\"trace\\\",name:\\\"waterfall\\\",basePlotModule:r(93612),categories:[\\\"bar-like\\\",\\\"cartesian\\\",\\\"svg\\\",\\\"oriented\\\",\\\"showLegend\\\",\\\"zoomScale\\\"],meta:{}}},13494:function(t){\\\"use strict\\\";t.exports={waterfallmode:{valType:\\\"enumerated\\\",values:[\\\"group\\\",\\\"overlay\\\"],dflt:\\\"group\\\",editType:\\\"calc\\\"},waterfallgap:{valType:\\\"number\\\",min:0,max:1,editType:\\\"calc\\\"},waterfallgroupgap:{valType:\\\"number\\\",min:0,max:1,dflt:0,editType:\\\"calc\\\"}}},5176:function(t,e,r){\\\"use strict\\\";var n=r(71828),i=r(13494);t.exports=function(t,e,r){var a=!1;function o(r,a){return n.coerce(t,e,i,r,a)}for(var s=0;s<r.length;s++){var l=r[s];if(l.visible&&\\\"waterfall\\\"===l.type){a=!0;break}}a&&(o(\\\"waterfallmode\\\"),o(\\\"waterfallgap\\\",.2),o(\\\"waterfallgroupgap\\\"))}},30436:function(t,e,r){\\\"use strict\\\";var n=r(39898),i=r(71828),a=r(91424),o=r(50606).BADNUM,s=r(17295),l=r(72597).clearMinTextSize;t.exports=function(t,e,r,u){var c=t._fullLayout;l(\\\"waterfall\\\",c),s.plot(t,e,r,u,{mode:c.waterfallmode,norm:c.waterfallmode,gap:c.waterfallgap,groupgap:c.waterfallgroupgap}),function(t,e,r,s){var l=e.xaxis,u=e.yaxis;i.makeTraceGroups(s,r,\\\"trace bars\\\").each((function(r){var s=n.select(this),c=r[0].trace,f=i.ensureSingle(s,\\\"g\\\",\\\"lines\\\");if(c.connector&&c.connector.visible){var h=\\\"h\\\"===c.orientation,p=c.connector.mode,d=f.selectAll(\\\"g.line\\\").data(i.identity);d.enter().append(\\\"g\\\").classed(\\\"line\\\",!0),d.exit().remove();var v=d.size();d.each((function(r,s){if(s===v-1||r.cNext){var c=function(t,e,r,n){var i=[],a=[],o=n?e:r,s=n?r:e;return i[0]=o.c2p(t.s0,!0),a[0]=s.c2p(t.p0,!0),i[1]=o.c2p(t.s1,!0),a[1]=s.c2p(t.p1,!0),i[2]=o.c2p(t.nextS0,!0),a[2]=s.c2p(t.nextP0,!0),n?[i,a]:[a,i]}(r,l,u,h),f=c[0],d=c[1],g=\\\"\\\";f[0]!==o&&d[0]!==o&&f[1]!==o&&d[1]!==o&&(\\\"spanning\\\"===p&&!r.isSum&&s>0&&(g+=h?\\\"M\\\"+f[0]+\\\",\\\"+d[1]+\\\"V\\\"+d[0]:\\\"M\\\"+f[1]+\\\",\\\"+d[0]+\\\"H\\\"+f[0]),\\\"between\\\"!==p&&(r.isSum||s<v-1)&&(g+=h?\\\"M\\\"+f[1]+\\\",\\\"+d[0]+\\\"V\\\"+d[1]:\\\"M\\\"+f[0]+\\\",\\\"+d[1]+\\\"H\\\"+f[1]),f[2]!==o&&d[2]!==o&&(g+=h?\\\"M\\\"+f[1]+\\\",\\\"+d[1]+\\\"V\\\"+d[2]:\\\"M\\\"+f[1]+\\\",\\\"+d[1]+\\\"H\\\"+f[2])),\\\"\\\"===g&&(g=\\\"M0,0Z\\\"),i.ensureSingle(n.select(this),\\\"path\\\").attr(\\\"d\\\",g).call(a.setClipUrl,e.layerClipId,t)}}))}else f.remove()}))}(t,e,r,u)}},55750:function(t,e,r){\\\"use strict\\\";var n=r(39898),i=r(91424),a=r(7901),o=r(37822).DESELECTDIM,s=r(16688),l=r(72597).resizeText,u=s.styleTextPoints;t.exports={style:function(t,e,r){var s=r||n.select(t).selectAll(\\\"g.waterfalllayer\\\").selectAll(\\\"g.trace\\\");l(t,s,\\\"waterfall\\\"),s.style(\\\"opacity\\\",(function(t){return t[0].trace.opacity})),s.each((function(e){var r=n.select(this),s=e[0].trace;r.selectAll(\\\".point > path\\\").each((function(t){if(!t.isBlank){var e=s[t.dir].marker;n.select(this).call(a.fill,e.color).call(a.stroke,e.line.color).call(i.dashLine,e.line.dash,e.line.width).style(\\\"opacity\\\",s.selectedpoints&&!t.selected?o:1)}})),u(r,s,t),r.selectAll(\\\".lines\\\").each((function(){var t=s.connector.line;i.lineGroupStyle(n.select(this).selectAll(\\\"path\\\"),t.width,t.color,t.dash)}))}))}}},82887:function(t,e,r){\\\"use strict\\\";var n=r(89298),i=r(71828),a=r(86281),o=r(79344).p,s=r(50606).BADNUM;e.moduleType=\\\"transform\\\",e.name=\\\"aggregate\\\";var l=e.attributes={enabled:{valType:\\\"boolean\\\",dflt:!0,editType:\\\"calc\\\"},groups:{valType:\\\"string\\\",strict:!0,noBlank:!0,arrayOk:!0,dflt:\\\"x\\\",editType:\\\"calc\\\"},aggregations:{_isLinkedToArray:\\\"aggregation\\\",target:{valType:\\\"string\\\",editType:\\\"calc\\\"},func:{valType:\\\"enumerated\\\",values:[\\\"count\\\",\\\"sum\\\",\\\"avg\\\",\\\"median\\\",\\\"mode\\\",\\\"rms\\\",\\\"stddev\\\",\\\"min\\\",\\\"max\\\",\\\"first\\\",\\\"last\\\",\\\"change\\\",\\\"range\\\"],dflt:\\\"first\\\",editType:\\\"calc\\\"},funcmode:{valType:\\\"enumerated\\\",values:[\\\"sample\\\",\\\"population\\\"],dflt:\\\"sample\\\",editType:\\\"calc\\\"},enabled:{valType:\\\"boolean\\\",dflt:!0,editType:\\\"calc\\\"},editType:\\\"calc\\\"},editType:\\\"calc\\\"},u=l.aggregations;function c(t,e,r,a){if(a.enabled){for(var o=a.target,l=i.nestedProperty(e,o),u=l.get(),c=function(t,e){var r=t.func,n=e.d2c,a=e.c2d;switch(r){case\\\"count\\\":return f;case\\\"first\\\":return h;case\\\"last\\\":return p;case\\\"sum\\\":return function(t,e){for(var r=0,i=0;i<e.length;i++){var o=n(t[e[i]]);o!==s&&(r+=o)}return a(r)};case\\\"avg\\\":return function(t,e){for(var r=0,i=0,o=0;o<e.length;o++){var l=n(t[e[o]]);l!==s&&(r+=l,i++)}return i?a(r/i):s};case\\\"min\\\":return function(t,e){for(var r=1/0,i=0;i<e.length;i++){var o=n(t[e[i]]);o!==s&&(r=Math.min(r,o))}return r===1/0?s:a(r)};case\\\"max\\\":return function(t,e){for(var r=-1/0,i=0;i<e.length;i++){var o=n(t[e[i]]);o!==s&&(r=Math.max(r,o))}return r===-1/0?s:a(r)};case\\\"range\\\":return function(t,e){for(var r=1/0,i=-1/0,o=0;o<e.length;o++){var l=n(t[e[o]]);l!==s&&(r=Math.min(r,l),i=Math.max(i,l))}return i===-1/0||r===1/0?s:a(i-r)};case\\\"change\\\":return function(t,e){var r=n(t[e[0]]),i=n(t[e[e.length-1]]);return r===s||i===s?s:a(i-r)};case\\\"median\\\":return function(t,e){for(var r=[],o=0;o<e.length;o++){var l=n(t[e[o]]);l!==s&&r.push(l)}if(!r.length)return s;r.sort(i.sorterAsc);var u=(r.length-1)/2;return a((r[Math.floor(u)]+r[Math.ceil(u)])/2)};case\\\"mode\\\":return function(t,e){for(var r={},i=0,o=s,l=0;l<e.length;l++){var u=n(t[e[l]]);if(u!==s){var c=r[u]=(r[u]||0)+1;c>i&&(i=c,o=u)}}return i?a(o):s};case\\\"rms\\\":return function(t,e){for(var r=0,i=0,o=0;o<e.length;o++){var l=n(t[e[o]]);l!==s&&(r+=l*l,i++)}return i?a(Math.sqrt(r/i)):s};case\\\"stddev\\\":return function(e,r){var i,a=0,o=0,l=1,u=s;for(i=0;i<r.length&&u===s;i++)u=n(e[r[i]]);if(u===s)return s;for(;i<r.length;i++){var c=n(e[r[i]]);if(c!==s){var f=c-u;a+=f,o+=f*f,l++}}var h=\\\"sample\\\"===t.funcmode?l-1:l;return h?Math.sqrt((o-a*a/l)/h):0}}}(a,n.getDataConversions(t,e,o,u)),d=new Array(r.length),v=0;v<r.length;v++)d[v]=c(u,r[v]);l.set(d),\\\"count\\\"===a.func&&i.pushUnique(e._arrayAttrs,o)}}function f(t,e){return e.length}function h(t,e){return t[e[0]]}function p(t,e){return t[e[e.length-1]]}e.supplyDefaults=function(t,e){var r,n={};function o(e,r){return i.coerce(t,n,l,e,r)}if(!o(\\\"enabled\\\"))return n;var s=a.findArrayAttributes(e),c={};for(r=0;r<s.length;r++)c[s[r]]=1;var f=o(\\\"groups\\\");if(!Array.isArray(f)){if(!c[f])return n.enabled=!1,n;c[f]=0}var h,p=t.aggregations||[],d=n.aggregations=new Array(p.length);function v(t,e){return i.coerce(p[r],h,u,t,e)}for(r=0;r<p.length;r++){h={_index:r};var g=v(\\\"target\\\"),y=v(\\\"func\\\");v(\\\"enabled\\\")&&g&&(c[g]||\\\"count\\\"===y&&void 0===c[g])?(\\\"stddev\\\"===y&&v(\\\"funcmode\\\"),c[g]=0,d[r]=h):d[r]={enabled:!1,_index:r}}for(r=0;r<s.length;r++)c[s[r]]&&d.push({target:s[r],func:u.func.dflt,enabled:!0,_index:-1});return n},e.calcTransform=function(t,e,r){if(r.enabled){var n=r.groups,a=i.getTargetArray(e,{target:n});if(a){var s,l,u,f,h={},p={},d=[],v=o(e.transforms,r),g=a.length;for(e._length&&(g=Math.min(g,e._length)),s=0;s<g;s++)void 0===(u=h[l=a[s]])?(h[l]=d.length,f=[s],d.push(f),p[h[l]]=v(s)):(d[u].push(s),p[h[l]]=(p[h[l]]||[]).concat(v(s)));r._indexToPoints=p;var y=r.aggregations;for(s=0;s<y.length;s++)c(t,e,d,y[s]);\\\"string\\\"==typeof n&&c(t,e,d,{target:n,func:\\\"first\\\",enabled:!0}),e._length=d.length}}}},14382:function(t,e,r){\\\"use strict\\\";var n=r(71828),i=r(73972),a=r(89298),o=r(79344).p,s=r(74808),l=s.COMPARISON_OPS,u=s.INTERVAL_OPS,c=s.SET_OPS;e.moduleType=\\\"transform\\\",e.name=\\\"filter\\\",e.attributes={enabled:{valType:\\\"boolean\\\",dflt:!0,editType:\\\"calc\\\"},target:{valType:\\\"string\\\",strict:!0,noBlank:!0,arrayOk:!0,dflt:\\\"x\\\",editType:\\\"calc\\\"},operation:{valType:\\\"enumerated\\\",values:[].concat(l).concat(u).concat(c),dflt:\\\"=\\\",editType:\\\"calc\\\"},value:{valType:\\\"any\\\",dflt:0,editType:\\\"calc\\\"},preservegaps:{valType:\\\"boolean\\\",dflt:!1,editType:\\\"calc\\\"},editType:\\\"calc\\\"},e.supplyDefaults=function(t){var r={};function a(i,a){return n.coerce(t,r,e.attributes,i,a)}if(a(\\\"enabled\\\")){var o=a(\\\"target\\\");if(n.isArrayOrTypedArray(o)&&0===o.length)return r.enabled=!1,r;a(\\\"preservegaps\\\"),a(\\\"operation\\\"),a(\\\"value\\\");var s=i.getComponentMethod(\\\"calendars\\\",\\\"handleDefaults\\\");s(t,r,\\\"valuecalendar\\\",null),s(t,r,\\\"targetcalendar\\\",null)}return r},e.calcTransform=function(t,e,r){if(r.enabled){var i=n.getTargetArray(e,r);if(i){var s=r.target,f=i.length;e._length&&(f=Math.min(f,e._length));var h=r.targetcalendar,p=e._arrayAttrs,d=r.preservegaps;if(\\\"string\\\"==typeof s){var v=n.nestedProperty(e,s+\\\"calendar\\\").get();v&&(h=v)}var g,y,m=function(t,e,r){var n=t.operation,i=t.value,a=Array.isArray(i);function o(t){return-1!==t.indexOf(n)}var s,f=function(r){return e(r,0,t.valuecalendar)},h=function(t){return e(t,0,r)};switch(o(l)?s=f(a?i[0]:i):o(u)?s=a?[f(i[0]),f(i[1])]:[f(i),f(i)]:o(c)&&(s=a?i.map(f):[f(i)]),n){case\\\"=\\\":return function(t){return h(t)===s};case\\\"!=\\\":return function(t){return h(t)!==s};case\\\"<\\\":return function(t){return h(t)<s};case\\\"<=\\\":return function(t){return h(t)<=s};case\\\">\\\":return function(t){return h(t)>s};case\\\">=\\\":return function(t){return h(t)>=s};case\\\"[]\\\":return function(t){var e=h(t);return e>=s[0]&&e<=s[1]};case\\\"()\\\":return function(t){var e=h(t);return e>s[0]&&e<s[1]};case\\\"[)\\\":return function(t){var e=h(t);return e>=s[0]&&e<s[1]};case\\\"(]\\\":return function(t){var e=h(t);return e>s[0]&&e<=s[1]};case\\\"][\\\":return function(t){var e=h(t);return e<=s[0]||e>=s[1]};case\\\")(\\\":return function(t){var e=h(t);return e<s[0]||e>s[1]};case\\\"](\\\":return function(t){var e=h(t);return e<=s[0]||e>s[1]};case\\\")[\\\":return function(t){var e=h(t);return e<s[0]||e>=s[1]};case\\\"{}\\\":return function(t){return-1!==s.indexOf(h(t))};case\\\"}{\\\":return function(t){return-1===s.indexOf(h(t))}}}(r,a.getDataToCoordFunc(t,e,s,i),h),x={},b={},_=0;d?(g=function(t){x[t.astr]=n.extendDeep([],t.get()),t.set(new Array(f))},y=function(t,e){var r=x[t.astr][e];t.get()[e]=r}):(g=function(t){x[t.astr]=n.extendDeep([],t.get()),t.set([])},y=function(t,e){var r=x[t.astr][e];t.get().push(r)}),k(g);for(var w=o(e.transforms,r),T=0;T<f;T++)m(i[T])?(k(y,T),b[_++]=w(T)):d&&_++;r._indexToPoints=b,e._length=_}}function k(t,r){for(var i=0;i<p.length;i++)t(n.nestedProperty(e,p[i]),r)}}},43102:function(t,e,r){\\\"use strict\\\";var n=r(71828),i=r(86281),a=r(74875),o=r(79344).p;function s(t,e){var r,s,l,u,c,f,h,p,d,v,g=e.transform,y=e.transformIndex,m=t.transforms[y].groups,x=o(t.transforms,g);if(!n.isArrayOrTypedArray(m)||0===m.length)return[t];var b=n.filterUnique(m),_=new Array(b.length),w=m.length,T=i.findArrayAttributes(t),k=g.styles||[],A={};for(r=0;r<k.length;r++)A[k[r].target]=k[r].value;g.styles&&(v=n.keyedContainer(g,\\\"styles\\\",\\\"target\\\",\\\"value.name\\\"));var M={},S={};for(r=0;r<b.length;r++){M[f=b[r]]=r,S[f]=0,(h=_[r]=n.extendDeepNoArrays({},t))._group=f,h.transforms[y]._indexToPoints={};var E=null;for(v&&(E=v.get(f)),h.name=E||\\\"\\\"===E?E:n.templateString(g.nameformat,{trace:t.name,group:f}),p=h.transforms,h.transforms=[],s=0;s<p.length;s++)h.transforms[s]=n.extendDeepNoArrays({},p[s]);for(s=0;s<T.length;s++)n.nestedProperty(h,T[s]).set([])}for(l=0;l<T.length;l++){for(u=T[l],s=0,d=[];s<b.length;s++)d[s]=n.nestedProperty(_[s],u).get();for(c=n.nestedProperty(t,u).get(),s=0;s<w;s++)d[M[m[s]]].push(c[s])}for(s=0;s<w;s++)(h=_[M[m[s]]]).transforms[y]._indexToPoints[S[m[s]]]=x(s),S[m[s]]++;for(r=0;r<b.length;r++)f=b[r],h=_[r],a.clearExpandedTraceDefaultColors(h),h=n.extendDeepNoArrays(h,A[f]||{});return _}e.moduleType=\\\"transform\\\",e.name=\\\"groupby\\\",e.attributes={enabled:{valType:\\\"boolean\\\",dflt:!0,editType:\\\"calc\\\"},groups:{valType:\\\"data_array\\\",dflt:[],editType:\\\"calc\\\"},nameformat:{valType:\\\"string\\\",editType:\\\"calc\\\"},styles:{_isLinkedToArray:\\\"style\\\",target:{valType:\\\"string\\\",editType:\\\"calc\\\"},value:{valType:\\\"any\\\",dflt:{},editType:\\\"calc\\\",_compareAsJSON:!0},editType:\\\"calc\\\"},editType:\\\"calc\\\"},e.supplyDefaults=function(t,r,i){var a,o={};function s(r,i){return n.coerce(t,o,e.attributes,r,i)}if(!s(\\\"enabled\\\"))return o;s(\\\"groups\\\"),s(\\\"nameformat\\\",i._dataLength>1?\\\"%{group} (%{trace})\\\":\\\"%{group}\\\");var l=t.styles,u=o.styles=[];if(l)for(a=0;a<l.length;a++){var c=u[a]={};n.coerce(l[a],u[a],e.attributes.styles,\\\"target\\\");var f=n.coerce(l[a],u[a],e.attributes.styles,\\\"value\\\");n.isPlainObject(f)?c.value=n.extendDeep({},f):f&&delete c.value}return o},e.transform=function(t,e){var r,n,i,a=[];for(n=0;n<t.length;n++)for(r=s(t[n],e),i=0;i<r.length;i++)a.push(r[i]);return a}},79344:function(t,e){\\\"use strict\\\";e.p=function(t,e){for(var r,n,i=0;i<t.length&&(r=t[i])!==e;i++)r._indexToPoints&&!1!==r.enabled&&(n=r._indexToPoints);var a=n?function(t){return n[t]}:function(t){return[t]};return a}},32275:function(t,e,r){\\\"use strict\\\";var n=r(71828),i=r(89298),a=r(79344).p,o=r(50606).BADNUM;e.moduleType=\\\"transform\\\",e.name=\\\"sort\\\",e.attributes={enabled:{valType:\\\"boolean\\\",dflt:!0,editType:\\\"calc\\\"},target:{valType:\\\"string\\\",strict:!0,noBlank:!0,arrayOk:!0,dflt:\\\"x\\\",editType:\\\"calc\\\"},order:{valType:\\\"enumerated\\\",values:[\\\"ascending\\\",\\\"descending\\\"],dflt:\\\"ascending\\\",editType:\\\"calc\\\"},editType:\\\"calc\\\"},e.supplyDefaults=function(t){var r={};function i(i,a){return n.coerce(t,r,e.attributes,i,a)}return i(\\\"enabled\\\")&&(i(\\\"target\\\"),i(\\\"order\\\")),r},e.calcTransform=function(t,e,r){if(r.enabled){var s=n.getTargetArray(e,r);if(s){var l=r.target,u=s.length;e._length&&(u=Math.min(u,e._length));var c,f,h=e._arrayAttrs,p=function(t,e,r,n){var i,a=new Array(n),s=new Array(n);for(i=0;i<n;i++)a[i]={v:e[i],i:i};for(a.sort(function(t,e){switch(t.order){case\\\"ascending\\\":return function(t,r){var n=e(t.v),i=e(r.v);return n===o?1:i===o?-1:n-i};case\\\"descending\\\":return function(t,r){var n=e(t.v),i=e(r.v);return n===o?1:i===o?-1:i-n}}}(t,r)),i=0;i<n;i++)s[i]=a[i].i;return s}(r,s,i.getDataToCoordFunc(t,e,l,s),u),d=a(e.transforms,r),v={};for(c=0;c<h.length;c++){var g=n.nestedProperty(e,h[c]),y=g.get(),m=new Array(u);for(f=0;f<u;f++)m[f]=y[p[f]];g.set(m)}for(f=0;f<u;f++)v[f]=d(p[f]);r._indexToPoints=v,e._length=u}}}},11506:function(t,e){\\\"use strict\\\";e.version=\\\"2.24.1\\\"},9330:function(t,e,r){var n,i=r(90386);self,n=function(){return function(){var t={7386:function(t,e,r){t.exports={alpha_shape:r(2350),convex_hull:r(5537),delaunay_triangulate:r(4419),gl_cone3d:r(1140),gl_error3d:r(3110),gl_heatmap2d:r(6386),gl_line3d:r(6086),gl_mesh3d:r(8116),gl_plot2d:r(2117),gl_plot3d:r(1059),gl_pointcloud2d:r(8271),gl_scatter3d:r(2182),gl_select_box:r(6623),gl_spikes2d:r(3050),gl_streamtube3d:r(7307),gl_surface3d:r(3754),ndarray:r(5050),ndarray_linear_interpolate:r(3581)}},2146:function(t,e,r){\\\"use strict\\\";function n(t,e){for(var r=0;r<e.length;r++){var n=e[r];n.enumerable=n.enumerable||!1,n.configurable=!0,\\\"value\\\"in n&&(n.writable=!0),Object.defineProperty(t,n.key,n)}}function i(t,e){return i=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(t,e){return t.__proto__=e,t},i(t,e)}function a(t){if(void 0===t)throw new ReferenceError(\\\"this hasn't been initialised - super() hasn't been called\\\");return t}function o(t){return o=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(t){return t.__proto__||Object.getPrototypeOf(t)},o(t)}function s(t){return s=\\\"function\\\"==typeof Symbol&&\\\"symbol\\\"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&\\\"function\\\"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?\\\"symbol\\\":typeof t},s(t)}var l=r(3910),u=r(3187),c=\\\"function\\\"==typeof Symbol&&\\\"function\\\"==typeof Symbol.for?Symbol.for(\\\"nodejs.util.inspect.custom\\\"):null;e.lW=p,e.h2=50;var f=2147483647;function h(t){if(t>f)throw new RangeError('The value \\\"'+t+'\\\" is invalid for option \\\"size\\\"');var e=new Uint8Array(t);return Object.setPrototypeOf(e,p.prototype),e}function p(t,e,r){if(\\\"number\\\"==typeof t){if(\\\"string\\\"==typeof e)throw new TypeError('The \\\"string\\\" argument must be of type string. Received type number');return g(t)}return d(t,e,r)}function d(t,e,r){if(\\\"string\\\"==typeof t)return function(t,e){if(\\\"string\\\"==typeof e&&\\\"\\\"!==e||(e=\\\"utf8\\\"),!p.isEncoding(e))throw new TypeError(\\\"Unknown encoding: \\\"+e);var r=0|b(t,e),n=h(r),i=n.write(t,e);return i!==r&&(n=n.slice(0,i)),n}(t,e);if(ArrayBuffer.isView(t))return function(t){if(tt(t,Uint8Array)){var e=new Uint8Array(t);return m(e.buffer,e.byteOffset,e.byteLength)}return y(t)}(t);if(null==t)throw new TypeError(\\\"The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type \\\"+s(t));if(tt(t,ArrayBuffer)||t&&tt(t.buffer,ArrayBuffer))return m(t,e,r);if(\\\"undefined\\\"!=typeof SharedArrayBuffer&&(tt(t,SharedArrayBuffer)||t&&tt(t.buffer,SharedArrayBuffer)))return m(t,e,r);if(\\\"number\\\"==typeof t)throw new TypeError('The \\\"value\\\" argument must not be of type number. Received type number');var n=t.valueOf&&t.valueOf();if(null!=n&&n!==t)return p.from(n,e,r);var i=function(t){if(p.isBuffer(t)){var e=0|x(t.length),r=h(e);return 0===r.length||t.copy(r,0,0,e),r}return void 0!==t.length?\\\"number\\\"!=typeof t.length||et(t.length)?h(0):y(t):\\\"Buffer\\\"===t.type&&Array.isArray(t.data)?y(t.data):void 0}(t);if(i)return i;if(\\\"undefined\\\"!=typeof Symbol&&null!=Symbol.toPrimitive&&\\\"function\\\"==typeof t[Symbol.toPrimitive])return p.from(t[Symbol.toPrimitive](\\\"string\\\"),e,r);throw new TypeError(\\\"The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type \\\"+s(t))}function v(t){if(\\\"number\\\"!=typeof t)throw new TypeError('\\\"size\\\" argument must be of type number');if(t<0)throw new RangeError('The value \\\"'+t+'\\\" is invalid for option \\\"size\\\"')}function g(t){return v(t),h(t<0?0:0|x(t))}function y(t){for(var e=t.length<0?0:0|x(t.length),r=h(e),n=0;n<e;n+=1)r[n]=255&t[n];return r}function m(t,e,r){if(e<0||t.byteLength<e)throw new RangeError('\\\"offset\\\" is outside of buffer bounds');if(t.byteLength<e+(r||0))throw new RangeError('\\\"length\\\" is outside of buffer bounds');var n;return n=void 0===e&&void 0===r?new Uint8Array(t):void 0===r?new Uint8Array(t,e):new Uint8Array(t,e,r),Object.setPrototypeOf(n,p.prototype),n}function x(t){if(t>=f)throw new RangeError(\\\"Attempt to allocate Buffer larger than maximum size: 0x\\\"+f.toString(16)+\\\" bytes\\\");return 0|t}function b(t,e){if(p.isBuffer(t))return t.length;if(ArrayBuffer.isView(t)||tt(t,ArrayBuffer))return t.byteLength;if(\\\"string\\\"!=typeof t)throw new TypeError('The \\\"string\\\" argument must be one of type string, Buffer, or ArrayBuffer. Received type '+s(t));var r=t.length,n=arguments.length>2&&!0===arguments[2];if(!n&&0===r)return 0;for(var i=!1;;)switch(e){case\\\"ascii\\\":case\\\"latin1\\\":case\\\"binary\\\":return r;case\\\"utf8\\\":case\\\"utf-8\\\":return K(t).length;case\\\"ucs2\\\":case\\\"ucs-2\\\":case\\\"utf16le\\\":case\\\"utf-16le\\\":return 2*r;case\\\"hex\\\":return r>>>1;case\\\"base64\\\":return $(t).length;default:if(i)return n?-1:K(t).length;e=(\\\"\\\"+e).toLowerCase(),i=!0}}function _(t,e,r){var n=!1;if((void 0===e||e<0)&&(e=0),e>this.length)return\\\"\\\";if((void 0===r||r>this.length)&&(r=this.length),r<=0)return\\\"\\\";if((r>>>=0)<=(e>>>=0))return\\\"\\\";for(t||(t=\\\"utf8\\\");;)switch(t){case\\\"hex\\\":return z(this,e,r);case\\\"utf8\\\":case\\\"utf-8\\\":return P(this,e,r);case\\\"ascii\\\":return I(this,e,r);case\\\"latin1\\\":case\\\"binary\\\":return D(this,e,r);case\\\"base64\\\":return C(this,e,r);case\\\"ucs2\\\":case\\\"ucs-2\\\":case\\\"utf16le\\\":case\\\"utf-16le\\\":return R(this,e,r);default:if(n)throw new TypeError(\\\"Unknown encoding: \\\"+t);t=(t+\\\"\\\").toLowerCase(),n=!0}}function w(t,e,r){var n=t[e];t[e]=t[r],t[r]=n}function T(t,e,r,n,i){if(0===t.length)return-1;if(\\\"string\\\"==typeof r?(n=r,r=0):r>2147483647?r=2147483647:r<-2147483648&&(r=-2147483648),et(r=+r)&&(r=i?0:t.length-1),r<0&&(r=t.length+r),r>=t.length){if(i)return-1;r=t.length-1}else if(r<0){if(!i)return-1;r=0}if(\\\"string\\\"==typeof e&&(e=p.from(e,n)),p.isBuffer(e))return 0===e.length?-1:k(t,e,r,n,i);if(\\\"number\\\"==typeof e)return e&=255,\\\"function\\\"==typeof Uint8Array.prototype.indexOf?i?Uint8Array.prototype.indexOf.call(t,e,r):Uint8Array.prototype.lastIndexOf.call(t,e,r):k(t,[e],r,n,i);throw new TypeError(\\\"val must be string, number or Buffer\\\")}function k(t,e,r,n,i){var a,o=1,s=t.length,l=e.length;if(void 0!==n&&(\\\"ucs2\\\"===(n=String(n).toLowerCase())||\\\"ucs-2\\\"===n||\\\"utf16le\\\"===n||\\\"utf-16le\\\"===n)){if(t.length<2||e.length<2)return-1;o=2,s/=2,l/=2,r/=2}function u(t,e){return 1===o?t[e]:t.readUInt16BE(e*o)}if(i){var c=-1;for(a=r;a<s;a++)if(u(t,a)===u(e,-1===c?0:a-c)){if(-1===c&&(c=a),a-c+1===l)return c*o}else-1!==c&&(a-=a-c),c=-1}else for(r+l>s&&(r=s-l),a=r;a>=0;a--){for(var f=!0,h=0;h<l;h++)if(u(t,a+h)!==u(e,h)){f=!1;break}if(f)return a}return-1}function A(t,e,r,n){r=Number(r)||0;var i=t.length-r;n?(n=Number(n))>i&&(n=i):n=i;var a,o=e.length;for(n>o/2&&(n=o/2),a=0;a<n;++a){var s=parseInt(e.substr(2*a,2),16);if(et(s))return a;t[r+a]=s}return a}function M(t,e,r,n){return Q(K(e,t.length-r),t,r,n)}function S(t,e,r,n){return Q(function(t){for(var e=[],r=0;r<t.length;++r)e.push(255&t.charCodeAt(r));return e}(e),t,r,n)}function E(t,e,r,n){return Q($(e),t,r,n)}function L(t,e,r,n){return Q(function(t,e){for(var r,n,i,a=[],o=0;o<t.length&&!((e-=2)<0);++o)n=(r=t.charCodeAt(o))>>8,i=r%256,a.push(i),a.push(n);return a}(e,t.length-r),t,r,n)}function C(t,e,r){return 0===e&&r===t.length?l.fromByteArray(t):l.fromByteArray(t.slice(e,r))}function P(t,e,r){r=Math.min(t.length,r);for(var n=[],i=e;i<r;){var a=t[i],o=null,s=a>239?4:a>223?3:a>191?2:1;if(i+s<=r){var l=void 0,u=void 0,c=void 0,f=void 0;switch(s){case 1:a<128&&(o=a);break;case 2:128==(192&(l=t[i+1]))&&(f=(31&a)<<6|63&l)>127&&(o=f);break;case 3:l=t[i+1],u=t[i+2],128==(192&l)&&128==(192&u)&&(f=(15&a)<<12|(63&l)<<6|63&u)>2047&&(f<55296||f>57343)&&(o=f);break;case 4:l=t[i+1],u=t[i+2],c=t[i+3],128==(192&l)&&128==(192&u)&&128==(192&c)&&(f=(15&a)<<18|(63&l)<<12|(63&u)<<6|63&c)>65535&&f<1114112&&(o=f)}}null===o?(o=65533,s=1):o>65535&&(o-=65536,n.push(o>>>10&1023|55296),o=56320|1023&o),n.push(o),i+=s}return function(t){var e=t.length;if(e<=O)return String.fromCharCode.apply(String,t);for(var r=\\\"\\\",n=0;n<e;)r+=String.fromCharCode.apply(String,t.slice(n,n+=O));return r}(n)}p.TYPED_ARRAY_SUPPORT=function(){try{var t=new Uint8Array(1),e={foo:function(){return 42}};return Object.setPrototypeOf(e,Uint8Array.prototype),Object.setPrototypeOf(t,e),42===t.foo()}catch(t){return!1}}(),p.TYPED_ARRAY_SUPPORT||\\\"undefined\\\"==typeof console||\\\"function\\\"!=typeof console.error||console.error(\\\"This browser lacks typed array (Uint8Array) support which is required by `buffer` v5.x. Use `buffer` v4.x if you require old browser support.\\\"),Object.defineProperty(p.prototype,\\\"parent\\\",{enumerable:!0,get:function(){if(p.isBuffer(this))return this.buffer}}),Object.defineProperty(p.prototype,\\\"offset\\\",{enumerable:!0,get:function(){if(p.isBuffer(this))return this.byteOffset}}),p.poolSize=8192,p.from=function(t,e,r){return d(t,e,r)},Object.setPrototypeOf(p.prototype,Uint8Array.prototype),Object.setPrototypeOf(p,Uint8Array),p.alloc=function(t,e,r){return function(t,e,r){return v(t),t<=0?h(t):void 0!==e?\\\"string\\\"==typeof r?h(t).fill(e,r):h(t).fill(e):h(t)}(t,e,r)},p.allocUnsafe=function(t){return g(t)},p.allocUnsafeSlow=function(t){return g(t)},p.isBuffer=function(t){return null!=t&&!0===t._isBuffer&&t!==p.prototype},p.compare=function(t,e){if(tt(t,Uint8Array)&&(t=p.from(t,t.offset,t.byteLength)),tt(e,Uint8Array)&&(e=p.from(e,e.offset,e.byteLength)),!p.isBuffer(t)||!p.isBuffer(e))throw new TypeError('The \\\"buf1\\\", \\\"buf2\\\" arguments must be one of type Buffer or Uint8Array');if(t===e)return 0;for(var r=t.length,n=e.length,i=0,a=Math.min(r,n);i<a;++i)if(t[i]!==e[i]){r=t[i],n=e[i];break}return r<n?-1:n<r?1:0},p.isEncoding=function(t){switch(String(t).toLowerCase()){case\\\"hex\\\":case\\\"utf8\\\":case\\\"utf-8\\\":case\\\"ascii\\\":case\\\"latin1\\\":case\\\"binary\\\":case\\\"base64\\\":case\\\"ucs2\\\":case\\\"ucs-2\\\":case\\\"utf16le\\\":case\\\"utf-16le\\\":return!0;default:return!1}},p.concat=function(t,e){if(!Array.isArray(t))throw new TypeError('\\\"list\\\" argument must be an Array of Buffers');if(0===t.length)return p.alloc(0);var r;if(void 0===e)for(e=0,r=0;r<t.length;++r)e+=t[r].length;var n=p.allocUnsafe(e),i=0;for(r=0;r<t.length;++r){var a=t[r];if(tt(a,Uint8Array))i+a.length>n.length?(p.isBuffer(a)||(a=p.from(a)),a.copy(n,i)):Uint8Array.prototype.set.call(n,a,i);else{if(!p.isBuffer(a))throw new TypeError('\\\"list\\\" argument must be an Array of Buffers');a.copy(n,i)}i+=a.length}return n},p.byteLength=b,p.prototype._isBuffer=!0,p.prototype.swap16=function(){var t=this.length;if(t%2!=0)throw new RangeError(\\\"Buffer size must be a multiple of 16-bits\\\");for(var e=0;e<t;e+=2)w(this,e,e+1);return this},p.prototype.swap32=function(){var t=this.length;if(t%4!=0)throw new RangeError(\\\"Buffer size must be a multiple of 32-bits\\\");for(var e=0;e<t;e+=4)w(this,e,e+3),w(this,e+1,e+2);return this},p.prototype.swap64=function(){var t=this.length;if(t%8!=0)throw new RangeError(\\\"Buffer size must be a multiple of 64-bits\\\");for(var e=0;e<t;e+=8)w(this,e,e+7),w(this,e+1,e+6),w(this,e+2,e+5),w(this,e+3,e+4);return this},p.prototype.toString=function(){var t=this.length;return 0===t?\\\"\\\":0===arguments.length?P(this,0,t):_.apply(this,arguments)},p.prototype.toLocaleString=p.prototype.toString,p.prototype.equals=function(t){if(!p.isBuffer(t))throw new TypeError(\\\"Argument must be a Buffer\\\");return this===t||0===p.compare(this,t)},p.prototype.inspect=function(){var t=\\\"\\\",r=e.h2;return t=this.toString(\\\"hex\\\",0,r).replace(/(.{2})/g,\\\"$1 \\\").trim(),this.length>r&&(t+=\\\" ... \\\"),\\\"<Buffer \\\"+t+\\\">\\\"},c&&(p.prototype[c]=p.prototype.inspect),p.prototype.compare=function(t,e,r,n,i){if(tt(t,Uint8Array)&&(t=p.from(t,t.offset,t.byteLength)),!p.isBuffer(t))throw new TypeError('The \\\"target\\\" argument must be one of type Buffer or Uint8Array. Received type '+s(t));if(void 0===e&&(e=0),void 0===r&&(r=t?t.length:0),void 0===n&&(n=0),void 0===i&&(i=this.length),e<0||r>t.length||n<0||i>this.length)throw new RangeError(\\\"out of range index\\\");if(n>=i&&e>=r)return 0;if(n>=i)return-1;if(e>=r)return 1;if(this===t)return 0;for(var a=(i>>>=0)-(n>>>=0),o=(r>>>=0)-(e>>>=0),l=Math.min(a,o),u=this.slice(n,i),c=t.slice(e,r),f=0;f<l;++f)if(u[f]!==c[f]){a=u[f],o=c[f];break}return a<o?-1:o<a?1:0},p.prototype.includes=function(t,e,r){return-1!==this.indexOf(t,e,r)},p.prototype.indexOf=function(t,e,r){return T(this,t,e,r,!0)},p.prototype.lastIndexOf=function(t,e,r){return T(this,t,e,r,!1)},p.prototype.write=function(t,e,r,n){if(void 0===e)n=\\\"utf8\\\",r=this.length,e=0;else if(void 0===r&&\\\"string\\\"==typeof e)n=e,r=this.length,e=0;else{if(!isFinite(e))throw new Error(\\\"Buffer.write(string, encoding, offset[, length]) is no longer supported\\\");e>>>=0,isFinite(r)?(r>>>=0,void 0===n&&(n=\\\"utf8\\\")):(n=r,r=void 0)}var i=this.length-e;if((void 0===r||r>i)&&(r=i),t.length>0&&(r<0||e<0)||e>this.length)throw new RangeError(\\\"Attempt to write outside buffer bounds\\\");n||(n=\\\"utf8\\\");for(var a=!1;;)switch(n){case\\\"hex\\\":return A(this,t,e,r);case\\\"utf8\\\":case\\\"utf-8\\\":return M(this,t,e,r);case\\\"ascii\\\":case\\\"latin1\\\":case\\\"binary\\\":return S(this,t,e,r);case\\\"base64\\\":return E(this,t,e,r);case\\\"ucs2\\\":case\\\"ucs-2\\\":case\\\"utf16le\\\":case\\\"utf-16le\\\":return L(this,t,e,r);default:if(a)throw new TypeError(\\\"Unknown encoding: \\\"+n);n=(\\\"\\\"+n).toLowerCase(),a=!0}},p.prototype.toJSON=function(){return{type:\\\"Buffer\\\",data:Array.prototype.slice.call(this._arr||this,0)}};var O=4096;function I(t,e,r){var n=\\\"\\\";r=Math.min(t.length,r);for(var i=e;i<r;++i)n+=String.fromCharCode(127&t[i]);return n}function D(t,e,r){var n=\\\"\\\";r=Math.min(t.length,r);for(var i=e;i<r;++i)n+=String.fromCharCode(t[i]);return n}function z(t,e,r){var n=t.length;(!e||e<0)&&(e=0),(!r||r<0||r>n)&&(r=n);for(var i=\\\"\\\",a=e;a<r;++a)i+=rt[t[a]];return i}function R(t,e,r){for(var n=t.slice(e,r),i=\\\"\\\",a=0;a<n.length-1;a+=2)i+=String.fromCharCode(n[a]+256*n[a+1]);return i}function F(t,e,r){if(t%1!=0||t<0)throw new RangeError(\\\"offset is not uint\\\");if(t+e>r)throw new RangeError(\\\"Trying to access beyond buffer length\\\")}function B(t,e,r,n,i,a){if(!p.isBuffer(t))throw new TypeError('\\\"buffer\\\" argument must be a Buffer instance');if(e>i||e<a)throw new RangeError('\\\"value\\\" argument is out of bounds');if(r+n>t.length)throw new RangeError(\\\"Index out of range\\\")}function N(t,e,r,n,i){Y(e,n,i,t,r,7);var a=Number(e&BigInt(4294967295));t[r++]=a,a>>=8,t[r++]=a,a>>=8,t[r++]=a,a>>=8,t[r++]=a;var o=Number(e>>BigInt(32)&BigInt(4294967295));return t[r++]=o,o>>=8,t[r++]=o,o>>=8,t[r++]=o,o>>=8,t[r++]=o,r}function j(t,e,r,n,i){Y(e,n,i,t,r,7);var a=Number(e&BigInt(4294967295));t[r+7]=a,a>>=8,t[r+6]=a,a>>=8,t[r+5]=a,a>>=8,t[r+4]=a;var o=Number(e>>BigInt(32)&BigInt(4294967295));return t[r+3]=o,o>>=8,t[r+2]=o,o>>=8,t[r+1]=o,o>>=8,t[r]=o,r+8}function U(t,e,r,n,i,a){if(r+n>t.length)throw new RangeError(\\\"Index out of range\\\");if(r<0)throw new RangeError(\\\"Index out of range\\\")}function V(t,e,r,n,i){return e=+e,r>>>=0,i||U(t,0,r,4),u.write(t,e,r,n,23,4),r+4}function H(t,e,r,n,i){return e=+e,r>>>=0,i||U(t,0,r,8),u.write(t,e,r,n,52,8),r+8}p.prototype.slice=function(t,e){var r=this.length;(t=~~t)<0?(t+=r)<0&&(t=0):t>r&&(t=r),(e=void 0===e?r:~~e)<0?(e+=r)<0&&(e=0):e>r&&(e=r),e<t&&(e=t);var n=this.subarray(t,e);return Object.setPrototypeOf(n,p.prototype),n},p.prototype.readUintLE=p.prototype.readUIntLE=function(t,e,r){t>>>=0,e>>>=0,r||F(t,e,this.length);for(var n=this[t],i=1,a=0;++a<e&&(i*=256);)n+=this[t+a]*i;return n},p.prototype.readUintBE=p.prototype.readUIntBE=function(t,e,r){t>>>=0,e>>>=0,r||F(t,e,this.length);for(var n=this[t+--e],i=1;e>0&&(i*=256);)n+=this[t+--e]*i;return n},p.prototype.readUint8=p.prototype.readUInt8=function(t,e){return t>>>=0,e||F(t,1,this.length),this[t]},p.prototype.readUint16LE=p.prototype.readUInt16LE=function(t,e){return t>>>=0,e||F(t,2,this.length),this[t]|this[t+1]<<8},p.prototype.readUint16BE=p.prototype.readUInt16BE=function(t,e){return t>>>=0,e||F(t,2,this.length),this[t]<<8|this[t+1]},p.prototype.readUint32LE=p.prototype.readUInt32LE=function(t,e){return t>>>=0,e||F(t,4,this.length),(this[t]|this[t+1]<<8|this[t+2]<<16)+16777216*this[t+3]},p.prototype.readUint32BE=p.prototype.readUInt32BE=function(t,e){return t>>>=0,e||F(t,4,this.length),16777216*this[t]+(this[t+1]<<16|this[t+2]<<8|this[t+3])},p.prototype.readBigUInt64LE=nt((function(t){W(t>>>=0,\\\"offset\\\");var e=this[t],r=this[t+7];void 0!==e&&void 0!==r||X(t,this.length-8);var n=e+this[++t]*Math.pow(2,8)+this[++t]*Math.pow(2,16)+this[++t]*Math.pow(2,24),i=this[++t]+this[++t]*Math.pow(2,8)+this[++t]*Math.pow(2,16)+r*Math.pow(2,24);return BigInt(n)+(BigInt(i)<<BigInt(32))})),p.prototype.readBigUInt64BE=nt((function(t){W(t>>>=0,\\\"offset\\\");var e=this[t],r=this[t+7];void 0!==e&&void 0!==r||X(t,this.length-8);var n=e*Math.pow(2,24)+this[++t]*Math.pow(2,16)+this[++t]*Math.pow(2,8)+this[++t],i=this[++t]*Math.pow(2,24)+this[++t]*Math.pow(2,16)+this[++t]*Math.pow(2,8)+r;return(BigInt(n)<<BigInt(32))+BigInt(i)})),p.prototype.readIntLE=function(t,e,r){t>>>=0,e>>>=0,r||F(t,e,this.length);for(var n=this[t],i=1,a=0;++a<e&&(i*=256);)n+=this[t+a]*i;return n>=(i*=128)&&(n-=Math.pow(2,8*e)),n},p.prototype.readIntBE=function(t,e,r){t>>>=0,e>>>=0,r||F(t,e,this.length);for(var n=e,i=1,a=this[t+--n];n>0&&(i*=256);)a+=this[t+--n]*i;return a>=(i*=128)&&(a-=Math.pow(2,8*e)),a},p.prototype.readInt8=function(t,e){return t>>>=0,e||F(t,1,this.length),128&this[t]?-1*(255-this[t]+1):this[t]},p.prototype.readInt16LE=function(t,e){t>>>=0,e||F(t,2,this.length);var r=this[t]|this[t+1]<<8;return 32768&r?4294901760|r:r},p.prototype.readInt16BE=function(t,e){t>>>=0,e||F(t,2,this.length);var r=this[t+1]|this[t]<<8;return 32768&r?4294901760|r:r},p.prototype.readInt32LE=function(t,e){return t>>>=0,e||F(t,4,this.length),this[t]|this[t+1]<<8|this[t+2]<<16|this[t+3]<<24},p.prototype.readInt32BE=function(t,e){return t>>>=0,e||F(t,4,this.length),this[t]<<24|this[t+1]<<16|this[t+2]<<8|this[t+3]},p.prototype.readBigInt64LE=nt((function(t){W(t>>>=0,\\\"offset\\\");var e=this[t],r=this[t+7];void 0!==e&&void 0!==r||X(t,this.length-8);var n=this[t+4]+this[t+5]*Math.pow(2,8)+this[t+6]*Math.pow(2,16)+(r<<24);return(BigInt(n)<<BigInt(32))+BigInt(e+this[++t]*Math.pow(2,8)+this[++t]*Math.pow(2,16)+this[++t]*Math.pow(2,24))})),p.prototype.readBigInt64BE=nt((function(t){W(t>>>=0,\\\"offset\\\");var e=this[t],r=this[t+7];void 0!==e&&void 0!==r||X(t,this.length-8);var n=(e<<24)+this[++t]*Math.pow(2,16)+this[++t]*Math.pow(2,8)+this[++t];return(BigInt(n)<<BigInt(32))+BigInt(this[++t]*Math.pow(2,24)+this[++t]*Math.pow(2,16)+this[++t]*Math.pow(2,8)+r)})),p.prototype.readFloatLE=function(t,e){return t>>>=0,e||F(t,4,this.length),u.read(this,t,!0,23,4)},p.prototype.readFloatBE=function(t,e){return t>>>=0,e||F(t,4,this.length),u.read(this,t,!1,23,4)},p.prototype.readDoubleLE=function(t,e){return t>>>=0,e||F(t,8,this.length),u.read(this,t,!0,52,8)},p.prototype.readDoubleBE=function(t,e){return t>>>=0,e||F(t,8,this.length),u.read(this,t,!1,52,8)},p.prototype.writeUintLE=p.prototype.writeUIntLE=function(t,e,r,n){t=+t,e>>>=0,r>>>=0,n||B(this,t,e,r,Math.pow(2,8*r)-1,0);var i=1,a=0;for(this[e]=255&t;++a<r&&(i*=256);)this[e+a]=t/i&255;return e+r},p.prototype.writeUintBE=p.prototype.writeUIntBE=function(t,e,r,n){t=+t,e>>>=0,r>>>=0,n||B(this,t,e,r,Math.pow(2,8*r)-1,0);var i=r-1,a=1;for(this[e+i]=255&t;--i>=0&&(a*=256);)this[e+i]=t/a&255;return e+r},p.prototype.writeUint8=p.prototype.writeUInt8=function(t,e,r){return t=+t,e>>>=0,r||B(this,t,e,1,255,0),this[e]=255&t,e+1},p.prototype.writeUint16LE=p.prototype.writeUInt16LE=function(t,e,r){return t=+t,e>>>=0,r||B(this,t,e,2,65535,0),this[e]=255&t,this[e+1]=t>>>8,e+2},p.prototype.writeUint16BE=p.prototype.writeUInt16BE=function(t,e,r){return t=+t,e>>>=0,r||B(this,t,e,2,65535,0),this[e]=t>>>8,this[e+1]=255&t,e+2},p.prototype.writeUint32LE=p.prototype.writeUInt32LE=function(t,e,r){return t=+t,e>>>=0,r||B(this,t,e,4,4294967295,0),this[e+3]=t>>>24,this[e+2]=t>>>16,this[e+1]=t>>>8,this[e]=255&t,e+4},p.prototype.writeUint32BE=p.prototype.writeUInt32BE=function(t,e,r){return t=+t,e>>>=0,r||B(this,t,e,4,4294967295,0),this[e]=t>>>24,this[e+1]=t>>>16,this[e+2]=t>>>8,this[e+3]=255&t,e+4},p.prototype.writeBigUInt64LE=nt((function(t){return N(this,t,arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,BigInt(0),BigInt(\\\"0xffffffffffffffff\\\"))})),p.prototype.writeBigUInt64BE=nt((function(t){return j(this,t,arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,BigInt(0),BigInt(\\\"0xffffffffffffffff\\\"))})),p.prototype.writeIntLE=function(t,e,r,n){if(t=+t,e>>>=0,!n){var i=Math.pow(2,8*r-1);B(this,t,e,r,i-1,-i)}var a=0,o=1,s=0;for(this[e]=255&t;++a<r&&(o*=256);)t<0&&0===s&&0!==this[e+a-1]&&(s=1),this[e+a]=(t/o>>0)-s&255;return e+r},p.prototype.writeIntBE=function(t,e,r,n){if(t=+t,e>>>=0,!n){var i=Math.pow(2,8*r-1);B(this,t,e,r,i-1,-i)}var a=r-1,o=1,s=0;for(this[e+a]=255&t;--a>=0&&(o*=256);)t<0&&0===s&&0!==this[e+a+1]&&(s=1),this[e+a]=(t/o>>0)-s&255;return e+r},p.prototype.writeInt8=function(t,e,r){return t=+t,e>>>=0,r||B(this,t,e,1,127,-128),t<0&&(t=255+t+1),this[e]=255&t,e+1},p.prototype.writeInt16LE=function(t,e,r){return t=+t,e>>>=0,r||B(this,t,e,2,32767,-32768),this[e]=255&t,this[e+1]=t>>>8,e+2},p.prototype.writeInt16BE=function(t,e,r){return t=+t,e>>>=0,r||B(this,t,e,2,32767,-32768),this[e]=t>>>8,this[e+1]=255&t,e+2},p.prototype.writeInt32LE=function(t,e,r){return t=+t,e>>>=0,r||B(this,t,e,4,2147483647,-2147483648),this[e]=255&t,this[e+1]=t>>>8,this[e+2]=t>>>16,this[e+3]=t>>>24,e+4},p.prototype.writeInt32BE=function(t,e,r){return t=+t,e>>>=0,r||B(this,t,e,4,2147483647,-2147483648),t<0&&(t=4294967295+t+1),this[e]=t>>>24,this[e+1]=t>>>16,this[e+2]=t>>>8,this[e+3]=255&t,e+4},p.prototype.writeBigInt64LE=nt((function(t){return N(this,t,arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,-BigInt(\\\"0x8000000000000000\\\"),BigInt(\\\"0x7fffffffffffffff\\\"))})),p.prototype.writeBigInt64BE=nt((function(t){return j(this,t,arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,-BigInt(\\\"0x8000000000000000\\\"),BigInt(\\\"0x7fffffffffffffff\\\"))})),p.prototype.writeFloatLE=function(t,e,r){return V(this,t,e,!0,r)},p.prototype.writeFloatBE=function(t,e,r){return V(this,t,e,!1,r)},p.prototype.writeDoubleLE=function(t,e,r){return H(this,t,e,!0,r)},p.prototype.writeDoubleBE=function(t,e,r){return H(this,t,e,!1,r)},p.prototype.copy=function(t,e,r,n){if(!p.isBuffer(t))throw new TypeError(\\\"argument should be a Buffer\\\");if(r||(r=0),n||0===n||(n=this.length),e>=t.length&&(e=t.length),e||(e=0),n>0&&n<r&&(n=r),n===r)return 0;if(0===t.length||0===this.length)return 0;if(e<0)throw new RangeError(\\\"targetStart out of bounds\\\");if(r<0||r>=this.length)throw new RangeError(\\\"Index out of range\\\");if(n<0)throw new RangeError(\\\"sourceEnd out of bounds\\\");n>this.length&&(n=this.length),t.length-e<n-r&&(n=t.length-e+r);var i=n-r;return this===t&&\\\"function\\\"==typeof Uint8Array.prototype.copyWithin?this.copyWithin(e,r,n):Uint8Array.prototype.set.call(t,this.subarray(r,n),e),i},p.prototype.fill=function(t,e,r,n){if(\\\"string\\\"==typeof t){if(\\\"string\\\"==typeof e?(n=e,e=0,r=this.length):\\\"string\\\"==typeof r&&(n=r,r=this.length),void 0!==n&&\\\"string\\\"!=typeof n)throw new TypeError(\\\"encoding must be a string\\\");if(\\\"string\\\"==typeof n&&!p.isEncoding(n))throw new TypeError(\\\"Unknown encoding: \\\"+n);if(1===t.length){var i=t.charCodeAt(0);(\\\"utf8\\\"===n&&i<128||\\\"latin1\\\"===n)&&(t=i)}}else\\\"number\\\"==typeof t?t&=255:\\\"boolean\\\"==typeof t&&(t=Number(t));if(e<0||this.length<e||this.length<r)throw new RangeError(\\\"Out of range index\\\");if(r<=e)return this;var a;if(e>>>=0,r=void 0===r?this.length:r>>>0,t||(t=0),\\\"number\\\"==typeof t)for(a=e;a<r;++a)this[a]=t;else{var o=p.isBuffer(t)?t:p.from(t,n),s=o.length;if(0===s)throw new TypeError('The value \\\"'+t+'\\\" is invalid for argument \\\"value\\\"');for(a=0;a<r-e;++a)this[a+e]=o[a%s]}return this};var q={};function G(t,e,r){q[t]=function(r){!function(t,e){if(\\\"function\\\"!=typeof e&&null!==e)throw new TypeError(\\\"Super expression must either be null or a function\\\");t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,writable:!0,configurable:!0}}),Object.defineProperty(t,\\\"prototype\\\",{writable:!1}),e&&i(t,e)}(p,r);var l,u,c,f,h=(c=p,f=function(){if(\\\"undefined\\\"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if(\\\"function\\\"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(t){return!1}}(),function(){var t,e=o(c);if(f){var r=o(this).constructor;t=Reflect.construct(e,arguments,r)}else t=e.apply(this,arguments);return function(t,e){if(e&&(\\\"object\\\"===s(e)||\\\"function\\\"==typeof e))return e;if(void 0!==e)throw new TypeError(\\\"Derived constructors may only return object or undefined\\\");return a(t)}(this,t)});function p(){var r;return function(t,e){if(!(t instanceof e))throw new TypeError(\\\"Cannot call a class as a function\\\")}(this,p),r=h.call(this),Object.defineProperty(a(r),\\\"message\\\",{value:e.apply(a(r),arguments),writable:!0,configurable:!0}),r.name=\\\"\\\".concat(r.name,\\\" [\\\").concat(t,\\\"]\\\"),r.stack,delete r.name,r}return l=p,(u=[{key:\\\"code\\\",get:function(){return t},set:function(t){Object.defineProperty(this,\\\"code\\\",{configurable:!0,enumerable:!0,value:t,writable:!0})}},{key:\\\"toString\\\",value:function(){return\\\"\\\".concat(this.name,\\\" [\\\").concat(t,\\\"]: \\\").concat(this.message)}}])&&n(l.prototype,u),Object.defineProperty(l,\\\"prototype\\\",{writable:!1}),p}(r)}function Z(t){for(var e=\\\"\\\",r=t.length,n=\\\"-\\\"===t[0]?1:0;r>=n+4;r-=3)e=\\\"_\\\".concat(t.slice(r-3,r)).concat(e);return\\\"\\\".concat(t.slice(0,r)).concat(e)}function Y(t,e,r,n,i,a){if(t>r||t<e){var o,s=\\\"bigint\\\"==typeof e?\\\"n\\\":\\\"\\\";throw o=a>3?0===e||e===BigInt(0)?\\\">= 0\\\".concat(s,\\\" and < 2\\\").concat(s,\\\" ** \\\").concat(8*(a+1)).concat(s):\\\">= -(2\\\".concat(s,\\\" ** \\\").concat(8*(a+1)-1).concat(s,\\\") and < 2 ** \\\")+\\\"\\\".concat(8*(a+1)-1).concat(s):\\\">= \\\".concat(e).concat(s,\\\" and <= \\\").concat(r).concat(s),new q.ERR_OUT_OF_RANGE(\\\"value\\\",o,t)}!function(t,e,r){W(e,\\\"offset\\\"),void 0!==t[e]&&void 0!==t[e+r]||X(e,t.length-(r+1))}(n,i,a)}function W(t,e){if(\\\"number\\\"!=typeof t)throw new q.ERR_INVALID_ARG_TYPE(e,\\\"number\\\",t)}function X(t,e,r){if(Math.floor(t)!==t)throw W(t,r),new q.ERR_OUT_OF_RANGE(r||\\\"offset\\\",\\\"an integer\\\",t);if(e<0)throw new q.ERR_BUFFER_OUT_OF_BOUNDS;throw new q.ERR_OUT_OF_RANGE(r||\\\"offset\\\",\\\">= \\\".concat(r?1:0,\\\" and <= \\\").concat(e),t)}G(\\\"ERR_BUFFER_OUT_OF_BOUNDS\\\",(function(t){return t?\\\"\\\".concat(t,\\\" is outside of buffer bounds\\\"):\\\"Attempt to access memory outside buffer bounds\\\"}),RangeError),G(\\\"ERR_INVALID_ARG_TYPE\\\",(function(t,e){return'The \\\"'.concat(t,'\\\" argument must be of type number. Received type ').concat(s(e))}),TypeError),G(\\\"ERR_OUT_OF_RANGE\\\",(function(t,e,r){var n='The value of \\\"'.concat(t,'\\\" is out of range.'),i=r;return Number.isInteger(r)&&Math.abs(r)>Math.pow(2,32)?i=Z(String(r)):\\\"bigint\\\"==typeof r&&(i=String(r),(r>Math.pow(BigInt(2),BigInt(32))||r<-Math.pow(BigInt(2),BigInt(32)))&&(i=Z(i)),i+=\\\"n\\\"),n+\\\" It must be \\\".concat(e,\\\". Received \\\").concat(i)}),RangeError);var J=/[^+/0-9A-Za-z-_]/g;function K(t,e){var r;e=e||1/0;for(var n=t.length,i=null,a=[],o=0;o<n;++o){if((r=t.charCodeAt(o))>55295&&r<57344){if(!i){if(r>56319){(e-=3)>-1&&a.push(239,191,189);continue}if(o+1===n){(e-=3)>-1&&a.push(239,191,189);continue}i=r;continue}if(r<56320){(e-=3)>-1&&a.push(239,191,189),i=r;continue}r=65536+(i-55296<<10|r-56320)}else i&&(e-=3)>-1&&a.push(239,191,189);if(i=null,r<128){if((e-=1)<0)break;a.push(r)}else if(r<2048){if((e-=2)<0)break;a.push(r>>6|192,63&r|128)}else if(r<65536){if((e-=3)<0)break;a.push(r>>12|224,r>>6&63|128,63&r|128)}else{if(!(r<1114112))throw new Error(\\\"Invalid code point\\\");if((e-=4)<0)break;a.push(r>>18|240,r>>12&63|128,r>>6&63|128,63&r|128)}}return a}function $(t){return l.toByteArray(function(t){if((t=(t=t.split(\\\"=\\\")[0]).trim().replace(J,\\\"\\\")).length<2)return\\\"\\\";for(;t.length%4!=0;)t+=\\\"=\\\";return t}(t))}function Q(t,e,r,n){var i;for(i=0;i<n&&!(i+r>=e.length||i>=t.length);++i)e[i+r]=t[i];return i}function tt(t,e){return t instanceof e||null!=t&&null!=t.constructor&&null!=t.constructor.name&&t.constructor.name===e.name}function et(t){return t!=t}var rt=function(){for(var t=\\\"0123456789abcdef\\\",e=new Array(256),r=0;r<16;++r)for(var n=16*r,i=0;i<16;++i)e[n+i]=t[r]+t[i];return e}();function nt(t){return\\\"undefined\\\"==typeof BigInt?it:t}function it(){throw new Error(\\\"BigInt not supported\\\")}},2321:function(t){\\\"use strict\\\";t.exports=i,t.exports.isMobile=i,t.exports.default=i;var e=/(android|bb\\\\d+|meego).+mobile|armv7l|avantgo|bada\\\\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\\\\/|plucker|pocket|psp|series[46]0|samsungbrowser.*mobile|symbian|treo|up\\\\.(browser|link)|vodafone|wap|windows (ce|phone)|xda|xiino/i,r=/CrOS/,n=/android|ipad|playbook|silk/i;function i(t){t||(t={});var i=t.ua;if(i||\\\"undefined\\\"==typeof navigator||(i=navigator.userAgent),i&&i.headers&&\\\"string\\\"==typeof i.headers[\\\"user-agent\\\"]&&(i=i.headers[\\\"user-agent\\\"]),\\\"string\\\"!=typeof i)return!1;var a=e.test(i)&&!r.test(i)||!!t.tablet&&n.test(i);return!a&&t.tablet&&t.featureDetect&&navigator&&navigator.maxTouchPoints>1&&-1!==i.indexOf(\\\"Macintosh\\\")&&-1!==i.indexOf(\\\"Safari\\\")&&(a=!0),a}},3910:function(t,e){\\\"use strict\\\";e.byteLength=function(t){var e=s(t),r=e[0],n=e[1];return 3*(r+n)/4-n},e.toByteArray=function(t){var e,r,a=s(t),o=a[0],l=a[1],u=new i(function(t,e,r){return 3*(e+r)/4-r}(0,o,l)),c=0,f=l>0?o-4:o;for(r=0;r<f;r+=4)e=n[t.charCodeAt(r)]<<18|n[t.charCodeAt(r+1)]<<12|n[t.charCodeAt(r+2)]<<6|n[t.charCodeAt(r+3)],u[c++]=e>>16&255,u[c++]=e>>8&255,u[c++]=255&e;return 2===l&&(e=n[t.charCodeAt(r)]<<2|n[t.charCodeAt(r+1)]>>4,u[c++]=255&e),1===l&&(e=n[t.charCodeAt(r)]<<10|n[t.charCodeAt(r+1)]<<4|n[t.charCodeAt(r+2)]>>2,u[c++]=e>>8&255,u[c++]=255&e),u},e.fromByteArray=function(t){for(var e,n=t.length,i=n%3,a=[],o=16383,s=0,u=n-i;s<u;s+=o)a.push(l(t,s,s+o>u?u:s+o));return 1===i?(e=t[n-1],a.push(r[e>>2]+r[e<<4&63]+\\\"==\\\")):2===i&&(e=(t[n-2]<<8)+t[n-1],a.push(r[e>>10]+r[e>>4&63]+r[e<<2&63]+\\\"=\\\")),a.join(\\\"\\\")};for(var r=[],n=[],i=\\\"undefined\\\"!=typeof Uint8Array?Uint8Array:Array,a=\\\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\\\",o=0;o<64;++o)r[o]=a[o],n[a.charCodeAt(o)]=o;function s(t){var e=t.length;if(e%4>0)throw new Error(\\\"Invalid string. Length must be a multiple of 4\\\");var r=t.indexOf(\\\"=\\\");return-1===r&&(r=e),[r,r===e?0:4-r%4]}function l(t,e,n){for(var i,a,o=[],s=e;s<n;s+=3)i=(t[s]<<16&16711680)+(t[s+1]<<8&65280)+(255&t[s+2]),o.push(r[(a=i)>>18&63]+r[a>>12&63]+r[a>>6&63]+r[63&a]);return o.join(\\\"\\\")}n[\\\"-\\\".charCodeAt(0)]=62,n[\\\"_\\\".charCodeAt(0)]=63},3187:function(t,e){e.read=function(t,e,r,n,i){var a,o,s=8*i-n-1,l=(1<<s)-1,u=l>>1,c=-7,f=r?i-1:0,h=r?-1:1,p=t[e+f];for(f+=h,a=p&(1<<-c)-1,p>>=-c,c+=s;c>0;a=256*a+t[e+f],f+=h,c-=8);for(o=a&(1<<-c)-1,a>>=-c,c+=n;c>0;o=256*o+t[e+f],f+=h,c-=8);if(0===a)a=1-u;else{if(a===l)return o?NaN:1/0*(p?-1:1);o+=Math.pow(2,n),a-=u}return(p?-1:1)*o*Math.pow(2,a-n)},e.write=function(t,e,r,n,i,a){var o,s,l,u=8*a-i-1,c=(1<<u)-1,f=c>>1,h=23===i?Math.pow(2,-24)-Math.pow(2,-77):0,p=n?0:a-1,d=n?1:-1,v=e<0||0===e&&1/e<0?1:0;for(e=Math.abs(e),isNaN(e)||e===1/0?(s=isNaN(e)?1:0,o=c):(o=Math.floor(Math.log(e)/Math.LN2),e*(l=Math.pow(2,-o))<1&&(o--,l*=2),(e+=o+f>=1?h/l:h*Math.pow(2,1-f))*l>=2&&(o++,l/=2),o+f>=c?(s=0,o=c):o+f>=1?(s=(e*l-1)*Math.pow(2,i),o+=f):(s=e*Math.pow(2,f-1)*Math.pow(2,i),o=0));i>=8;t[r+p]=255&s,p+=d,s/=256,i-=8);for(o=o<<i|s,u+=i;u>0;t[r+p]=255&o,p+=d,o/=256,u-=8);t[r+p-d]|=128*v}},1152:function(t,e,r){\\\"use strict\\\";t.exports=function(t){var e=(t=t||{}).eye||[0,0,1],r=t.center||[0,0,0],s=t.up||[0,1,0],l=t.distanceLimits||[0,1/0],u=t.mode||\\\"turntable\\\",c=n(),f=i(),h=a();return c.setDistanceLimits(l[0],l[1]),c.lookAt(0,e,r,s),f.setDistanceLimits(l[0],l[1]),f.lookAt(0,e,r,s),h.setDistanceLimits(l[0],l[1]),h.lookAt(0,e,r,s),new o({turntable:c,orbit:f,matrix:h},u)};var n=r(3440),i=r(7774),a=r(9298);function o(t,e){this._controllerNames=Object.keys(t),this._controllerList=this._controllerNames.map((function(e){return t[e]})),this._mode=e,this._active=t[e],this._active||(this._mode=\\\"turntable\\\",this._active=t.turntable),this.modes=this._controllerNames,this.computedMatrix=this._active.computedMatrix,this.computedEye=this._active.computedEye,this.computedUp=this._active.computedUp,this.computedCenter=this._active.computedCenter,this.computedRadius=this._active.computedRadius}var s=o.prototype;s.flush=function(t){for(var e=this._controllerList,r=0;r<e.length;++r)e[r].flush(t)},s.idle=function(t){for(var e=this._controllerList,r=0;r<e.length;++r)e[r].idle(t)},s.lookAt=function(t,e,r,n){for(var i=this._controllerList,a=0;a<i.length;++a)i[a].lookAt(t,e,r,n)},s.rotate=function(t,e,r,n){for(var i=this._controllerList,a=0;a<i.length;++a)i[a].rotate(t,e,r,n)},s.pan=function(t,e,r,n){for(var i=this._controllerList,a=0;a<i.length;++a)i[a].pan(t,e,r,n)},s.translate=function(t,e,r,n){for(var i=this._controllerList,a=0;a<i.length;++a)i[a].translate(t,e,r,n)},s.setMatrix=function(t,e){for(var r=this._controllerList,n=0;n<r.length;++n)r[n].setMatrix(t,e)},s.setDistanceLimits=function(t,e){for(var r=this._controllerList,n=0;n<r.length;++n)r[n].setDistanceLimits(t,e)},s.setDistance=function(t,e){for(var r=this._controllerList,n=0;n<r.length;++n)r[n].setDistance(t,e)},s.recalcMatrix=function(t){this._active.recalcMatrix(t)},s.getDistance=function(t){return this._active.getDistance(t)},s.getDistanceLimits=function(t){return this._active.getDistanceLimits(t)},s.lastT=function(){return this._active.lastT()},s.setMode=function(t){if(t!==this._mode){var e=this._controllerNames.indexOf(t);if(!(e<0)){var r=this._active,n=this._controllerList[e],i=Math.max(r.lastT(),n.lastT());r.recalcMatrix(i),n.setMatrix(i,r.computedMatrix),this._active=n,this._mode=t,this.computedMatrix=this._active.computedMatrix,this.computedEye=this._active.computedEye,this.computedUp=this._active.computedUp,this.computedCenter=this._active.computedCenter,this.computedRadius=this._active.computedRadius}}},s.getMode=function(){return this._mode}},8126:function(t,e,r){\\\"use strict\\\";var n=\\\"undefined\\\"==typeof WeakMap?r(5346):WeakMap,i=r(5827),a=r(2944),o=new n;t.exports=function(t){var e=o.get(t),r=e&&(e._triangleBuffer.handle||e._triangleBuffer.buffer);if(!r||!t.isBuffer(r)){var n=i(t,new Float32Array([-1,-1,-1,4,4,-1]));(e=a(t,[{buffer:n,type:t.FLOAT,size:2}]))._triangleBuffer=n,o.set(t,e)}e.bind(),t.drawArrays(t.TRIANGLES,0,3),e.unbind()}},8008:function(t,e,r){var n=r(4930);t.exports=function(t,e,r){e=\\\"number\\\"==typeof e?e:1,r=r||\\\": \\\";var i=t.split(/\\\\r?\\\\n/),a=String(i.length+e-1).length;return i.map((function(t,i){var o=i+e,s=String(o).length;return n(o,a-s)+r+t})).join(\\\"\\\\n\\\")}},2153:function(t,e,r){\\\"use strict\\\";t.exports=function(t){var e=t.length;if(0===e)return[];if(1===e)return[0];for(var r=t[0].length,n=[t[0]],a=[0],o=1;o<e;++o)if(n.push(t[o]),i(n,r)){if(a.push(o),a.length===r+1)return a}else n.pop();return a};var n=r(417);function i(t,e){for(var r=new Array(e+1),i=0;i<t.length;++i)r[i]=t[i];for(i=0;i<=t.length;++i){for(var a=t.length;a<=e;++a){for(var o=new Array(e),s=0;s<e;++s)o[s]=Math.pow(a+1-i,s);r[a]=o}if(n.apply(void 0,r))return!0}return!1}},4653:function(t,e,r){\\\"use strict\\\";t.exports=function(t,e){return n(e).filter((function(r){for(var n=new Array(r.length),a=0;a<r.length;++a)n[a]=e[r[a]];return i(n)*t<1}))};var n=r(4419),i=r(1778)},2350:function(t,e,r){t.exports=function(t,e){return i(n(t,e))};var n=r(4653),i=r(8691)},7896:function(t){t.exports=function(t){return atob(t)}},957:function(t,e,r){\\\"use strict\\\";t.exports=function(t,e){for(var r=e.length,a=new Array(r+1),o=0;o<r;++o){for(var s=new Array(r+1),l=0;l<=r;++l)s[l]=t[l][o];a[o]=s}for(a[r]=new Array(r+1),o=0;o<=r;++o)a[r][o]=1;var u=new Array(r+1);for(o=0;o<r;++o)u[o]=e[o];u[r]=1;var c=n(a,u),f=i(c[r+1]);0===f&&(f=1);var h=new Array(r+1);for(o=0;o<=r;++o)h[o]=i(c[o])/f;return h};var n=r(6606);function i(t){for(var e=0,r=0;r<t.length;++r)e+=t[r];return e}},1539:function(t,e,r){\\\"use strict\\\";var n=r(8524);t.exports=function(t,e){return n(t[0].mul(e[1]).add(e[0].mul(t[1])),t[1].mul(e[1]))}},8846:function(t){\\\"use strict\\\";t.exports=function(t,e){return t[0].mul(e[1]).cmp(e[0].mul(t[1]))}},9189:function(t,e,r){\\\"use strict\\\";var n=r(8524);t.exports=function(t,e){return n(t[0].mul(e[1]),t[1].mul(e[0]))}},5125:function(t,e,r){\\\"use strict\\\";var n=r(234),i=r(3218),a=r(5514),o=r(2813),s=r(8524),l=r(9189);t.exports=function t(e,r){if(n(e))return r?l(e,t(r)):[e[0].clone(),e[1].clone()];var u,c,f=0;if(i(e))u=e.clone();else if(\\\"string\\\"==typeof e)u=o(e);else{if(0===e)return[a(0),a(1)];if(e===Math.floor(e))u=a(e);else{for(;e!==Math.floor(e);)e*=Math.pow(2,256),f-=256;u=a(e)}}if(n(r))u.mul(r[1]),c=r[0].clone();else if(i(r))c=r.clone();else if(\\\"string\\\"==typeof r)c=o(r);else if(r)if(r===Math.floor(r))c=a(r);else{for(;r!==Math.floor(r);)r*=Math.pow(2,256),f+=256;c=a(r)}else c=a(1);return f>0?u=u.ushln(f):f<0&&(c=c.ushln(-f)),s(u,c)}},234:function(t,e,r){\\\"use strict\\\";var n=r(3218);t.exports=function(t){return Array.isArray(t)&&2===t.length&&n(t[0])&&n(t[1])}},4275:function(t,e,r){\\\"use strict\\\";var n=r(1928);t.exports=function(t){return t.cmp(new n(0))}},9958:function(t,e,r){\\\"use strict\\\";var n=r(4275);t.exports=function(t){var e=t.length,r=t.words,i=0;if(1===e)i=r[0];else if(2===e)i=r[0]+67108864*r[1];else for(var a=0;a<e;a++)i+=r[a]*Math.pow(67108864,a);return n(t)*i}},1112:function(t,e,r){\\\"use strict\\\";var n=r(8362),i=r(2288).countTrailingZeros;t.exports=function(t){var e=i(n.lo(t));if(e<32)return e;var r=i(n.hi(t));return r>20?52:r+32}},3218:function(t,e,r){\\\"use strict\\\";r(1928),t.exports=function(t){return t&&\\\"object\\\"==typeof t&&Boolean(t.words)}},5514:function(t,e,r){\\\"use strict\\\";var n=r(1928),i=r(8362);t.exports=function(t){var e=i.exponent(t);return e<52?new n(t):new n(t*Math.pow(2,52-e)).ushln(e-52)}},8524:function(t,e,r){\\\"use strict\\\";var n=r(5514),i=r(4275);t.exports=function(t,e){var r=i(t),a=i(e);if(0===r)return[n(0),n(1)];if(0===a)return[n(0),n(0)];a<0&&(t=t.neg(),e=e.neg());var o=t.gcd(e);return o.cmpn(1)?[t.div(o),e.div(o)]:[t,e]}},2813:function(t,e,r){\\\"use strict\\\";var n=r(1928);t.exports=function(t){return new n(t)}},3962:function(t,e,r){\\\"use strict\\\";var n=r(8524);t.exports=function(t,e){return n(t[0].mul(e[0]),t[1].mul(e[1]))}},4951:function(t,e,r){\\\"use strict\\\";var n=r(4275);t.exports=function(t){return n(t[0])*n(t[1])}},4354:function(t,e,r){\\\"use strict\\\";var n=r(8524);t.exports=function(t,e){return n(t[0].mul(e[1]).sub(t[1].mul(e[0])),t[1].mul(e[1]))}},7999:function(t,e,r){\\\"use strict\\\";var n=r(9958),i=r(1112);t.exports=function(t){var e=t[0],r=t[1];if(0===e.cmpn(0))return 0;var a=e.abs().divmod(r.abs()),o=a.div,s=n(o),l=a.mod,u=e.negative!==r.negative?-1:1;if(0===l.cmpn(0))return u*s;if(s){var c=i(s)+4;return u*(s+(h=n(l.ushln(c).divRound(r)))*Math.pow(2,-c))}var f=r.bitLength()-l.bitLength()+53,h=n(l.ushln(f).divRound(r));return f<1023?u*h*Math.pow(2,-f):u*(h*=Math.pow(2,-1023))*Math.pow(2,1023-f)}},5070:function(t){\\\"use strict\\\";function e(t,e,r,n,i){for(var a=i+1;n<=i;){var o=n+i>>>1,s=t[o];(void 0!==r?r(s,e):s-e)>=0?(a=o,i=o-1):n=o+1}return a}function r(t,e,r,n,i){for(var a=i+1;n<=i;){var o=n+i>>>1,s=t[o];(void 0!==r?r(s,e):s-e)>0?(a=o,i=o-1):n=o+1}return a}function n(t,e,r,n,i){for(var a=n-1;n<=i;){var o=n+i>>>1,s=t[o];(void 0!==r?r(s,e):s-e)<0?(a=o,n=o+1):i=o-1}return a}function i(t,e,r,n,i){for(var a=n-1;n<=i;){var o=n+i>>>1,s=t[o];(void 0!==r?r(s,e):s-e)<=0?(a=o,n=o+1):i=o-1}return a}function a(t,e,r,n,i){for(;n<=i;){var a=n+i>>>1,o=t[a],s=void 0!==r?r(o,e):o-e;if(0===s)return a;s<=0?n=a+1:i=a-1}return-1}function o(t,e,r,n,i,a){return\\\"function\\\"==typeof r?a(t,e,r,void 0===n?0:0|n,void 0===i?t.length-1:0|i):a(t,e,void 0,void 0===r?0:0|r,void 0===n?t.length-1:0|n)}t.exports={ge:function(t,r,n,i,a){return o(t,r,n,i,a,e)},gt:function(t,e,n,i,a){return o(t,e,n,i,a,r)},lt:function(t,e,r,i,a){return o(t,e,r,i,a,n)},le:function(t,e,r,n,a){return o(t,e,r,n,a,i)},eq:function(t,e,r,n,i){return o(t,e,r,n,i,a)}}},2288:function(t,e){\\\"use strict\\\";function r(t){var e=32;return(t&=-t)&&e--,65535&t&&(e-=16),16711935&t&&(e-=8),252645135&t&&(e-=4),858993459&t&&(e-=2),1431655765&t&&(e-=1),e}e.INT_BITS=32,e.INT_MAX=2147483647,e.INT_MIN=-1<<31,e.sign=function(t){return(t>0)-(t<0)},e.abs=function(t){var e=t>>31;return(t^e)-e},e.min=function(t,e){return e^(t^e)&-(t<e)},e.max=function(t,e){return t^(t^e)&-(t<e)},e.isPow2=function(t){return!(t&t-1||!t)},e.log2=function(t){var e,r;return e=(t>65535)<<4,e|=r=((t>>>=e)>255)<<3,e|=r=((t>>>=r)>15)<<2,(e|=r=((t>>>=r)>3)<<1)|(t>>>=r)>>1},e.log10=function(t){return t>=1e9?9:t>=1e8?8:t>=1e7?7:t>=1e6?6:t>=1e5?5:t>=1e4?4:t>=1e3?3:t>=100?2:t>=10?1:0},e.popCount=function(t){return 16843009*((t=(858993459&(t-=t>>>1&1431655765))+(t>>>2&858993459))+(t>>>4)&252645135)>>>24},e.countTrailingZeros=r,e.nextPow2=function(t){return t+=0===t,--t,t|=t>>>1,t|=t>>>2,t|=t>>>4,1+((t|=t>>>8)|t>>>16)},e.prevPow2=function(t){return t|=t>>>1,t|=t>>>2,t|=t>>>4,t|=t>>>8,(t|=t>>>16)-(t>>>1)},e.parity=function(t){return t^=t>>>16,t^=t>>>8,t^=t>>>4,27030>>>(t&=15)&1};var n=new Array(256);!function(t){for(var e=0;e<256;++e){var r=e,n=e,i=7;for(r>>>=1;r;r>>>=1)n<<=1,n|=1&r,--i;t[e]=n<<i&255}}(n),e.reverse=function(t){return n[255&t]<<24|n[t>>>8&255]<<16|n[t>>>16&255]<<8|n[t>>>24&255]},e.interleave2=function(t,e){return(t=1431655765&((t=858993459&((t=252645135&((t=16711935&((t&=65535)|t<<8))|t<<4))|t<<2))|t<<1))|(e=1431655765&((e=858993459&((e=252645135&((e=16711935&((e&=65535)|e<<8))|e<<4))|e<<2))|e<<1))<<1},e.deinterleave2=function(t,e){return(t=65535&((t=16711935&((t=252645135&((t=858993459&((t=t>>>e&1431655765)|t>>>1))|t>>>2))|t>>>4))|t>>>16))<<16>>16},e.interleave3=function(t,e,r){return t=1227133513&((t=3272356035&((t=251719695&((t=4278190335&((t&=1023)|t<<16))|t<<8))|t<<4))|t<<2),(t|=(e=1227133513&((e=3272356035&((e=251719695&((e=4278190335&((e&=1023)|e<<16))|e<<8))|e<<4))|e<<2))<<1)|(r=1227133513&((r=3272356035&((r=251719695&((r=4278190335&((r&=1023)|r<<16))|r<<8))|r<<4))|r<<2))<<2},e.deinterleave3=function(t,e){return(t=1023&((t=4278190335&((t=251719695&((t=3272356035&((t=t>>>e&1227133513)|t>>>2))|t>>>4))|t>>>8))|t>>>16))<<22>>22},e.nextCombination=function(t){var e=t|t-1;return e+1|(~e&-~e)-1>>>r(t)+1}},1928:function(t,e,r){!function(t,e){\\\"use strict\\\";function n(t,e){if(!t)throw new Error(e||\\\"Assertion failed\\\")}function i(t,e){t.super_=e;var r=function(){};r.prototype=e.prototype,t.prototype=new r,t.prototype.constructor=t}function a(t,e,r){if(a.isBN(t))return t;this.negative=0,this.words=null,this.length=0,this.red=null,null!==t&&(\\\"le\\\"!==e&&\\\"be\\\"!==e||(r=e,e=10),this._init(t||0,e||10,r||\\\"be\\\"))}var o;\\\"object\\\"==typeof t?t.exports=a:e.BN=a,a.BN=a,a.wordSize=26;try{o=\\\"undefined\\\"!=typeof window&&void 0!==window.Buffer?window.Buffer:r(6601).Buffer}catch(t){}function s(t,e){var r=t.charCodeAt(e);return r>=65&&r<=70?r-55:r>=97&&r<=102?r-87:r-48&15}function l(t,e,r){var n=s(t,r);return r-1>=e&&(n|=s(t,r-1)<<4),n}function u(t,e,r,n){for(var i=0,a=Math.min(t.length,r),o=e;o<a;o++){var s=t.charCodeAt(o)-48;i*=n,i+=s>=49?s-49+10:s>=17?s-17+10:s}return i}a.isBN=function(t){return t instanceof a||null!==t&&\\\"object\\\"==typeof t&&t.constructor.wordSize===a.wordSize&&Array.isArray(t.words)},a.max=function(t,e){return t.cmp(e)>0?t:e},a.min=function(t,e){return t.cmp(e)<0?t:e},a.prototype._init=function(t,e,r){if(\\\"number\\\"==typeof t)return this._initNumber(t,e,r);if(\\\"object\\\"==typeof t)return this._initArray(t,e,r);\\\"hex\\\"===e&&(e=16),n(e===(0|e)&&e>=2&&e<=36);var i=0;\\\"-\\\"===(t=t.toString().replace(/\\\\s+/g,\\\"\\\"))[0]&&(i++,this.negative=1),i<t.length&&(16===e?this._parseHex(t,i,r):(this._parseBase(t,e,i),\\\"le\\\"===r&&this._initArray(this.toArray(),e,r)))},a.prototype._initNumber=function(t,e,r){t<0&&(this.negative=1,t=-t),t<67108864?(this.words=[67108863&t],this.length=1):t<4503599627370496?(this.words=[67108863&t,t/67108864&67108863],this.length=2):(n(t<9007199254740992),this.words=[67108863&t,t/67108864&67108863,1],this.length=3),\\\"le\\\"===r&&this._initArray(this.toArray(),e,r)},a.prototype._initArray=function(t,e,r){if(n(\\\"number\\\"==typeof t.length),t.length<=0)return this.words=[0],this.length=1,this;this.length=Math.ceil(t.length/3),this.words=new Array(this.length);for(var i=0;i<this.length;i++)this.words[i]=0;var a,o,s=0;if(\\\"be\\\"===r)for(i=t.length-1,a=0;i>=0;i-=3)o=t[i]|t[i-1]<<8|t[i-2]<<16,this.words[a]|=o<<s&67108863,this.words[a+1]=o>>>26-s&67108863,(s+=24)>=26&&(s-=26,a++);else if(\\\"le\\\"===r)for(i=0,a=0;i<t.length;i+=3)o=t[i]|t[i+1]<<8|t[i+2]<<16,this.words[a]|=o<<s&67108863,this.words[a+1]=o>>>26-s&67108863,(s+=24)>=26&&(s-=26,a++);return this.strip()},a.prototype._parseHex=function(t,e,r){this.length=Math.ceil((t.length-e)/6),this.words=new Array(this.length);for(var n=0;n<this.length;n++)this.words[n]=0;var i,a=0,o=0;if(\\\"be\\\"===r)for(n=t.length-1;n>=e;n-=2)i=l(t,e,n)<<a,this.words[o]|=67108863&i,a>=18?(a-=18,o+=1,this.words[o]|=i>>>26):a+=8;else for(n=(t.length-e)%2==0?e+1:e;n<t.length;n+=2)i=l(t,e,n)<<a,this.words[o]|=67108863&i,a>=18?(a-=18,o+=1,this.words[o]|=i>>>26):a+=8;this.strip()},a.prototype._parseBase=function(t,e,r){this.words=[0],this.length=1;for(var n=0,i=1;i<=67108863;i*=e)n++;n--,i=i/e|0;for(var a=t.length-r,o=a%n,s=Math.min(a,a-o)+r,l=0,c=r;c<s;c+=n)l=u(t,c,c+n,e),this.imuln(i),this.words[0]+l<67108864?this.words[0]+=l:this._iaddn(l);if(0!==o){var f=1;for(l=u(t,c,t.length,e),c=0;c<o;c++)f*=e;this.imuln(f),this.words[0]+l<67108864?this.words[0]+=l:this._iaddn(l)}this.strip()},a.prototype.copy=function(t){t.words=new Array(this.length);for(var e=0;e<this.length;e++)t.words[e]=this.words[e];t.length=this.length,t.negative=this.negative,t.red=this.red},a.prototype.clone=function(){var t=new a(null);return this.copy(t),t},a.prototype._expand=function(t){for(;this.length<t;)this.words[this.length++]=0;return this},a.prototype.strip=function(){for(;this.length>1&&0===this.words[this.length-1];)this.length--;return this._normSign()},a.prototype._normSign=function(){return 1===this.length&&0===this.words[0]&&(this.negative=0),this},a.prototype.inspect=function(){return(this.red?\\\"<BN-R: \\\":\\\"<BN: \\\")+this.toString(16)+\\\">\\\"};var c=[\\\"\\\",\\\"0\\\",\\\"00\\\",\\\"000\\\",\\\"0000\\\",\\\"00000\\\",\\\"000000\\\",\\\"0000000\\\",\\\"00000000\\\",\\\"000000000\\\",\\\"0000000000\\\",\\\"00000000000\\\",\\\"000000000000\\\",\\\"0000000000000\\\",\\\"00000000000000\\\",\\\"000000000000000\\\",\\\"0000000000000000\\\",\\\"00000000000000000\\\",\\\"000000000000000000\\\",\\\"0000000000000000000\\\",\\\"00000000000000000000\\\",\\\"000000000000000000000\\\",\\\"0000000000000000000000\\\",\\\"00000000000000000000000\\\",\\\"000000000000000000000000\\\",\\\"0000000000000000000000000\\\"],f=[0,0,25,16,12,11,10,9,8,8,7,7,7,7,6,6,6,6,6,6,6,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5],h=[0,0,33554432,43046721,16777216,48828125,60466176,40353607,16777216,43046721,1e7,19487171,35831808,62748517,7529536,11390625,16777216,24137569,34012224,47045881,64e6,4084101,5153632,6436343,7962624,9765625,11881376,14348907,17210368,20511149,243e5,28629151,33554432,39135393,45435424,52521875,60466176];function p(t,e,r){r.negative=e.negative^t.negative;var n=t.length+e.length|0;r.length=n,n=n-1|0;var i=0|t.words[0],a=0|e.words[0],o=i*a,s=67108863&o,l=o/67108864|0;r.words[0]=s;for(var u=1;u<n;u++){for(var c=l>>>26,f=67108863&l,h=Math.min(u,e.length-1),p=Math.max(0,u-t.length+1);p<=h;p++){var d=u-p|0;c+=(o=(i=0|t.words[d])*(a=0|e.words[p])+f)/67108864|0,f=67108863&o}r.words[u]=0|f,l=0|c}return 0!==l?r.words[u]=0|l:r.length--,r.strip()}a.prototype.toString=function(t,e){var r;if(e=0|e||1,16===(t=t||10)||\\\"hex\\\"===t){r=\\\"\\\";for(var i=0,a=0,o=0;o<this.length;o++){var s=this.words[o],l=(16777215&(s<<i|a)).toString(16);r=0!=(a=s>>>24-i&16777215)||o!==this.length-1?c[6-l.length]+l+r:l+r,(i+=2)>=26&&(i-=26,o--)}for(0!==a&&(r=a.toString(16)+r);r.length%e!=0;)r=\\\"0\\\"+r;return 0!==this.negative&&(r=\\\"-\\\"+r),r}if(t===(0|t)&&t>=2&&t<=36){var u=f[t],p=h[t];r=\\\"\\\";var d=this.clone();for(d.negative=0;!d.isZero();){var v=d.modn(p).toString(t);r=(d=d.idivn(p)).isZero()?v+r:c[u-v.length]+v+r}for(this.isZero()&&(r=\\\"0\\\"+r);r.length%e!=0;)r=\\\"0\\\"+r;return 0!==this.negative&&(r=\\\"-\\\"+r),r}n(!1,\\\"Base should be between 2 and 36\\\")},a.prototype.toNumber=function(){var t=this.words[0];return 2===this.length?t+=67108864*this.words[1]:3===this.length&&1===this.words[2]?t+=4503599627370496+67108864*this.words[1]:this.length>2&&n(!1,\\\"Number can only safely store up to 53 bits\\\"),0!==this.negative?-t:t},a.prototype.toJSON=function(){return this.toString(16)},a.prototype.toBuffer=function(t,e){return n(void 0!==o),this.toArrayLike(o,t,e)},a.prototype.toArray=function(t,e){return this.toArrayLike(Array,t,e)},a.prototype.toArrayLike=function(t,e,r){var i=this.byteLength(),a=r||Math.max(1,i);n(i<=a,\\\"byte array longer than desired length\\\"),n(a>0,\\\"Requested array length <= 0\\\"),this.strip();var o,s,l=\\\"le\\\"===e,u=new t(a),c=this.clone();if(l){for(s=0;!c.isZero();s++)o=c.andln(255),c.iushrn(8),u[s]=o;for(;s<a;s++)u[s]=0}else{for(s=0;s<a-i;s++)u[s]=0;for(s=0;!c.isZero();s++)o=c.andln(255),c.iushrn(8),u[a-s-1]=o}return u},Math.clz32?a.prototype._countBits=function(t){return 32-Math.clz32(t)}:a.prototype._countBits=function(t){var e=t,r=0;return e>=4096&&(r+=13,e>>>=13),e>=64&&(r+=7,e>>>=7),e>=8&&(r+=4,e>>>=4),e>=2&&(r+=2,e>>>=2),r+e},a.prototype._zeroBits=function(t){if(0===t)return 26;var e=t,r=0;return 0==(8191&e)&&(r+=13,e>>>=13),0==(127&e)&&(r+=7,e>>>=7),0==(15&e)&&(r+=4,e>>>=4),0==(3&e)&&(r+=2,e>>>=2),0==(1&e)&&r++,r},a.prototype.bitLength=function(){var t=this.words[this.length-1],e=this._countBits(t);return 26*(this.length-1)+e},a.prototype.zeroBits=function(){if(this.isZero())return 0;for(var t=0,e=0;e<this.length;e++){var r=this._zeroBits(this.words[e]);if(t+=r,26!==r)break}return t},a.prototype.byteLength=function(){return Math.ceil(this.bitLength()/8)},a.prototype.toTwos=function(t){return 0!==this.negative?this.abs().inotn(t).iaddn(1):this.clone()},a.prototype.fromTwos=function(t){return this.testn(t-1)?this.notn(t).iaddn(1).ineg():this.clone()},a.prototype.isNeg=function(){return 0!==this.negative},a.prototype.neg=function(){return this.clone().ineg()},a.prototype.ineg=function(){return this.isZero()||(this.negative^=1),this},a.prototype.iuor=function(t){for(;this.length<t.length;)this.words[this.length++]=0;for(var e=0;e<t.length;e++)this.words[e]=this.words[e]|t.words[e];return this.strip()},a.prototype.ior=function(t){return n(0==(this.negative|t.negative)),this.iuor(t)},a.prototype.or=function(t){return this.length>t.length?this.clone().ior(t):t.clone().ior(this)},a.prototype.uor=function(t){return this.length>t.length?this.clone().iuor(t):t.clone().iuor(this)},a.prototype.iuand=function(t){var e;e=this.length>t.length?t:this;for(var r=0;r<e.length;r++)this.words[r]=this.words[r]&t.words[r];return this.length=e.length,this.strip()},a.prototype.iand=function(t){return n(0==(this.negative|t.negative)),this.iuand(t)},a.prototype.and=function(t){return this.length>t.length?this.clone().iand(t):t.clone().iand(this)},a.prototype.uand=function(t){return this.length>t.length?this.clone().iuand(t):t.clone().iuand(this)},a.prototype.iuxor=function(t){var e,r;this.length>t.length?(e=this,r=t):(e=t,r=this);for(var n=0;n<r.length;n++)this.words[n]=e.words[n]^r.words[n];if(this!==e)for(;n<e.length;n++)this.words[n]=e.words[n];return this.length=e.length,this.strip()},a.prototype.ixor=function(t){return n(0==(this.negative|t.negative)),this.iuxor(t)},a.prototype.xor=function(t){return this.length>t.length?this.clone().ixor(t):t.clone().ixor(this)},a.prototype.uxor=function(t){return this.length>t.length?this.clone().iuxor(t):t.clone().iuxor(this)},a.prototype.inotn=function(t){n(\\\"number\\\"==typeof t&&t>=0);var e=0|Math.ceil(t/26),r=t%26;this._expand(e),r>0&&e--;for(var i=0;i<e;i++)this.words[i]=67108863&~this.words[i];return r>0&&(this.words[i]=~this.words[i]&67108863>>26-r),this.strip()},a.prototype.notn=function(t){return this.clone().inotn(t)},a.prototype.setn=function(t,e){n(\\\"number\\\"==typeof t&&t>=0);var r=t/26|0,i=t%26;return this._expand(r+1),this.words[r]=e?this.words[r]|1<<i:this.words[r]&~(1<<i),this.strip()},a.prototype.iadd=function(t){var e,r,n;if(0!==this.negative&&0===t.negative)return this.negative=0,e=this.isub(t),this.negative^=1,this._normSign();if(0===this.negative&&0!==t.negative)return t.negative=0,e=this.isub(t),t.negative=1,e._normSign();this.length>t.length?(r=this,n=t):(r=t,n=this);for(var i=0,a=0;a<n.length;a++)e=(0|r.words[a])+(0|n.words[a])+i,this.words[a]=67108863&e,i=e>>>26;for(;0!==i&&a<r.length;a++)e=(0|r.words[a])+i,this.words[a]=67108863&e,i=e>>>26;if(this.length=r.length,0!==i)this.words[this.length]=i,this.length++;else if(r!==this)for(;a<r.length;a++)this.words[a]=r.words[a];return this},a.prototype.add=function(t){var e;return 0!==t.negative&&0===this.negative?(t.negative=0,e=this.sub(t),t.negative^=1,e):0===t.negative&&0!==this.negative?(this.negative=0,e=t.sub(this),this.negative=1,e):this.length>t.length?this.clone().iadd(t):t.clone().iadd(this)},a.prototype.isub=function(t){if(0!==t.negative){t.negative=0;var e=this.iadd(t);return t.negative=1,e._normSign()}if(0!==this.negative)return this.negative=0,this.iadd(t),this.negative=1,this._normSign();var r,n,i=this.cmp(t);if(0===i)return this.negative=0,this.length=1,this.words[0]=0,this;i>0?(r=this,n=t):(r=t,n=this);for(var a=0,o=0;o<n.length;o++)a=(e=(0|r.words[o])-(0|n.words[o])+a)>>26,this.words[o]=67108863&e;for(;0!==a&&o<r.length;o++)a=(e=(0|r.words[o])+a)>>26,this.words[o]=67108863&e;if(0===a&&o<r.length&&r!==this)for(;o<r.length;o++)this.words[o]=r.words[o];return this.length=Math.max(this.length,o),r!==this&&(this.negative=1),this.strip()},a.prototype.sub=function(t){return this.clone().isub(t)};var d=function(t,e,r){var n,i,a,o=t.words,s=e.words,l=r.words,u=0,c=0|o[0],f=8191&c,h=c>>>13,p=0|o[1],d=8191&p,v=p>>>13,g=0|o[2],y=8191&g,m=g>>>13,x=0|o[3],b=8191&x,_=x>>>13,w=0|o[4],T=8191&w,k=w>>>13,A=0|o[5],M=8191&A,S=A>>>13,E=0|o[6],L=8191&E,C=E>>>13,P=0|o[7],O=8191&P,I=P>>>13,D=0|o[8],z=8191&D,R=D>>>13,F=0|o[9],B=8191&F,N=F>>>13,j=0|s[0],U=8191&j,V=j>>>13,H=0|s[1],q=8191&H,G=H>>>13,Z=0|s[2],Y=8191&Z,W=Z>>>13,X=0|s[3],J=8191&X,K=X>>>13,$=0|s[4],Q=8191&$,tt=$>>>13,et=0|s[5],rt=8191&et,nt=et>>>13,it=0|s[6],at=8191&it,ot=it>>>13,st=0|s[7],lt=8191&st,ut=st>>>13,ct=0|s[8],ft=8191&ct,ht=ct>>>13,pt=0|s[9],dt=8191&pt,vt=pt>>>13;r.negative=t.negative^e.negative,r.length=19;var gt=(u+(n=Math.imul(f,U))|0)+((8191&(i=(i=Math.imul(f,V))+Math.imul(h,U)|0))<<13)|0;u=((a=Math.imul(h,V))+(i>>>13)|0)+(gt>>>26)|0,gt&=67108863,n=Math.imul(d,U),i=(i=Math.imul(d,V))+Math.imul(v,U)|0,a=Math.imul(v,V);var yt=(u+(n=n+Math.imul(f,q)|0)|0)+((8191&(i=(i=i+Math.imul(f,G)|0)+Math.imul(h,q)|0))<<13)|0;u=((a=a+Math.imul(h,G)|0)+(i>>>13)|0)+(yt>>>26)|0,yt&=67108863,n=Math.imul(y,U),i=(i=Math.imul(y,V))+Math.imul(m,U)|0,a=Math.imul(m,V),n=n+Math.imul(d,q)|0,i=(i=i+Math.imul(d,G)|0)+Math.imul(v,q)|0,a=a+Math.imul(v,G)|0;var mt=(u+(n=n+Math.imul(f,Y)|0)|0)+((8191&(i=(i=i+Math.imul(f,W)|0)+Math.imul(h,Y)|0))<<13)|0;u=((a=a+Math.imul(h,W)|0)+(i>>>13)|0)+(mt>>>26)|0,mt&=67108863,n=Math.imul(b,U),i=(i=Math.imul(b,V))+Math.imul(_,U)|0,a=Math.imul(_,V),n=n+Math.imul(y,q)|0,i=(i=i+Math.imul(y,G)|0)+Math.imul(m,q)|0,a=a+Math.imul(m,G)|0,n=n+Math.imul(d,Y)|0,i=(i=i+Math.imul(d,W)|0)+Math.imul(v,Y)|0,a=a+Math.imul(v,W)|0;var xt=(u+(n=n+Math.imul(f,J)|0)|0)+((8191&(i=(i=i+Math.imul(f,K)|0)+Math.imul(h,J)|0))<<13)|0;u=((a=a+Math.imul(h,K)|0)+(i>>>13)|0)+(xt>>>26)|0,xt&=67108863,n=Math.imul(T,U),i=(i=Math.imul(T,V))+Math.imul(k,U)|0,a=Math.imul(k,V),n=n+Math.imul(b,q)|0,i=(i=i+Math.imul(b,G)|0)+Math.imul(_,q)|0,a=a+Math.imul(_,G)|0,n=n+Math.imul(y,Y)|0,i=(i=i+Math.imul(y,W)|0)+Math.imul(m,Y)|0,a=a+Math.imul(m,W)|0,n=n+Math.imul(d,J)|0,i=(i=i+Math.imul(d,K)|0)+Math.imul(v,J)|0,a=a+Math.imul(v,K)|0;var bt=(u+(n=n+Math.imul(f,Q)|0)|0)+((8191&(i=(i=i+Math.imul(f,tt)|0)+Math.imul(h,Q)|0))<<13)|0;u=((a=a+Math.imul(h,tt)|0)+(i>>>13)|0)+(bt>>>26)|0,bt&=67108863,n=Math.imul(M,U),i=(i=Math.imul(M,V))+Math.imul(S,U)|0,a=Math.imul(S,V),n=n+Math.imul(T,q)|0,i=(i=i+Math.imul(T,G)|0)+Math.imul(k,q)|0,a=a+Math.imul(k,G)|0,n=n+Math.imul(b,Y)|0,i=(i=i+Math.imul(b,W)|0)+Math.imul(_,Y)|0,a=a+Math.imul(_,W)|0,n=n+Math.imul(y,J)|0,i=(i=i+Math.imul(y,K)|0)+Math.imul(m,J)|0,a=a+Math.imul(m,K)|0,n=n+Math.imul(d,Q)|0,i=(i=i+Math.imul(d,tt)|0)+Math.imul(v,Q)|0,a=a+Math.imul(v,tt)|0;var _t=(u+(n=n+Math.imul(f,rt)|0)|0)+((8191&(i=(i=i+Math.imul(f,nt)|0)+Math.imul(h,rt)|0))<<13)|0;u=((a=a+Math.imul(h,nt)|0)+(i>>>13)|0)+(_t>>>26)|0,_t&=67108863,n=Math.imul(L,U),i=(i=Math.imul(L,V))+Math.imul(C,U)|0,a=Math.imul(C,V),n=n+Math.imul(M,q)|0,i=(i=i+Math.imul(M,G)|0)+Math.imul(S,q)|0,a=a+Math.imul(S,G)|0,n=n+Math.imul(T,Y)|0,i=(i=i+Math.imul(T,W)|0)+Math.imul(k,Y)|0,a=a+Math.imul(k,W)|0,n=n+Math.imul(b,J)|0,i=(i=i+Math.imul(b,K)|0)+Math.imul(_,J)|0,a=a+Math.imul(_,K)|0,n=n+Math.imul(y,Q)|0,i=(i=i+Math.imul(y,tt)|0)+Math.imul(m,Q)|0,a=a+Math.imul(m,tt)|0,n=n+Math.imul(d,rt)|0,i=(i=i+Math.imul(d,nt)|0)+Math.imul(v,rt)|0,a=a+Math.imul(v,nt)|0;var wt=(u+(n=n+Math.imul(f,at)|0)|0)+((8191&(i=(i=i+Math.imul(f,ot)|0)+Math.imul(h,at)|0))<<13)|0;u=((a=a+Math.imul(h,ot)|0)+(i>>>13)|0)+(wt>>>26)|0,wt&=67108863,n=Math.imul(O,U),i=(i=Math.imul(O,V))+Math.imul(I,U)|0,a=Math.imul(I,V),n=n+Math.imul(L,q)|0,i=(i=i+Math.imul(L,G)|0)+Math.imul(C,q)|0,a=a+Math.imul(C,G)|0,n=n+Math.imul(M,Y)|0,i=(i=i+Math.imul(M,W)|0)+Math.imul(S,Y)|0,a=a+Math.imul(S,W)|0,n=n+Math.imul(T,J)|0,i=(i=i+Math.imul(T,K)|0)+Math.imul(k,J)|0,a=a+Math.imul(k,K)|0,n=n+Math.imul(b,Q)|0,i=(i=i+Math.imul(b,tt)|0)+Math.imul(_,Q)|0,a=a+Math.imul(_,tt)|0,n=n+Math.imul(y,rt)|0,i=(i=i+Math.imul(y,nt)|0)+Math.imul(m,rt)|0,a=a+Math.imul(m,nt)|0,n=n+Math.imul(d,at)|0,i=(i=i+Math.imul(d,ot)|0)+Math.imul(v,at)|0,a=a+Math.imul(v,ot)|0;var Tt=(u+(n=n+Math.imul(f,lt)|0)|0)+((8191&(i=(i=i+Math.imul(f,ut)|0)+Math.imul(h,lt)|0))<<13)|0;u=((a=a+Math.imul(h,ut)|0)+(i>>>13)|0)+(Tt>>>26)|0,Tt&=67108863,n=Math.imul(z,U),i=(i=Math.imul(z,V))+Math.imul(R,U)|0,a=Math.imul(R,V),n=n+Math.imul(O,q)|0,i=(i=i+Math.imul(O,G)|0)+Math.imul(I,q)|0,a=a+Math.imul(I,G)|0,n=n+Math.imul(L,Y)|0,i=(i=i+Math.imul(L,W)|0)+Math.imul(C,Y)|0,a=a+Math.imul(C,W)|0,n=n+Math.imul(M,J)|0,i=(i=i+Math.imul(M,K)|0)+Math.imul(S,J)|0,a=a+Math.imul(S,K)|0,n=n+Math.imul(T,Q)|0,i=(i=i+Math.imul(T,tt)|0)+Math.imul(k,Q)|0,a=a+Math.imul(k,tt)|0,n=n+Math.imul(b,rt)|0,i=(i=i+Math.imul(b,nt)|0)+Math.imul(_,rt)|0,a=a+Math.imul(_,nt)|0,n=n+Math.imul(y,at)|0,i=(i=i+Math.imul(y,ot)|0)+Math.imul(m,at)|0,a=a+Math.imul(m,ot)|0,n=n+Math.imul(d,lt)|0,i=(i=i+Math.imul(d,ut)|0)+Math.imul(v,lt)|0,a=a+Math.imul(v,ut)|0;var kt=(u+(n=n+Math.imul(f,ft)|0)|0)+((8191&(i=(i=i+Math.imul(f,ht)|0)+Math.imul(h,ft)|0))<<13)|0;u=((a=a+Math.imul(h,ht)|0)+(i>>>13)|0)+(kt>>>26)|0,kt&=67108863,n=Math.imul(B,U),i=(i=Math.imul(B,V))+Math.imul(N,U)|0,a=Math.imul(N,V),n=n+Math.imul(z,q)|0,i=(i=i+Math.imul(z,G)|0)+Math.imul(R,q)|0,a=a+Math.imul(R,G)|0,n=n+Math.imul(O,Y)|0,i=(i=i+Math.imul(O,W)|0)+Math.imul(I,Y)|0,a=a+Math.imul(I,W)|0,n=n+Math.imul(L,J)|0,i=(i=i+Math.imul(L,K)|0)+Math.imul(C,J)|0,a=a+Math.imul(C,K)|0,n=n+Math.imul(M,Q)|0,i=(i=i+Math.imul(M,tt)|0)+Math.imul(S,Q)|0,a=a+Math.imul(S,tt)|0,n=n+Math.imul(T,rt)|0,i=(i=i+Math.imul(T,nt)|0)+Math.imul(k,rt)|0,a=a+Math.imul(k,nt)|0,n=n+Math.imul(b,at)|0,i=(i=i+Math.imul(b,ot)|0)+Math.imul(_,at)|0,a=a+Math.imul(_,ot)|0,n=n+Math.imul(y,lt)|0,i=(i=i+Math.imul(y,ut)|0)+Math.imul(m,lt)|0,a=a+Math.imul(m,ut)|0,n=n+Math.imul(d,ft)|0,i=(i=i+Math.imul(d,ht)|0)+Math.imul(v,ft)|0,a=a+Math.imul(v,ht)|0;var At=(u+(n=n+Math.imul(f,dt)|0)|0)+((8191&(i=(i=i+Math.imul(f,vt)|0)+Math.imul(h,dt)|0))<<13)|0;u=((a=a+Math.imul(h,vt)|0)+(i>>>13)|0)+(At>>>26)|0,At&=67108863,n=Math.imul(B,q),i=(i=Math.imul(B,G))+Math.imul(N,q)|0,a=Math.imul(N,G),n=n+Math.imul(z,Y)|0,i=(i=i+Math.imul(z,W)|0)+Math.imul(R,Y)|0,a=a+Math.imul(R,W)|0,n=n+Math.imul(O,J)|0,i=(i=i+Math.imul(O,K)|0)+Math.imul(I,J)|0,a=a+Math.imul(I,K)|0,n=n+Math.imul(L,Q)|0,i=(i=i+Math.imul(L,tt)|0)+Math.imul(C,Q)|0,a=a+Math.imul(C,tt)|0,n=n+Math.imul(M,rt)|0,i=(i=i+Math.imul(M,nt)|0)+Math.imul(S,rt)|0,a=a+Math.imul(S,nt)|0,n=n+Math.imul(T,at)|0,i=(i=i+Math.imul(T,ot)|0)+Math.imul(k,at)|0,a=a+Math.imul(k,ot)|0,n=n+Math.imul(b,lt)|0,i=(i=i+Math.imul(b,ut)|0)+Math.imul(_,lt)|0,a=a+Math.imul(_,ut)|0,n=n+Math.imul(y,ft)|0,i=(i=i+Math.imul(y,ht)|0)+Math.imul(m,ft)|0,a=a+Math.imul(m,ht)|0;var Mt=(u+(n=n+Math.imul(d,dt)|0)|0)+((8191&(i=(i=i+Math.imul(d,vt)|0)+Math.imul(v,dt)|0))<<13)|0;u=((a=a+Math.imul(v,vt)|0)+(i>>>13)|0)+(Mt>>>26)|0,Mt&=67108863,n=Math.imul(B,Y),i=(i=Math.imul(B,W))+Math.imul(N,Y)|0,a=Math.imul(N,W),n=n+Math.imul(z,J)|0,i=(i=i+Math.imul(z,K)|0)+Math.imul(R,J)|0,a=a+Math.imul(R,K)|0,n=n+Math.imul(O,Q)|0,i=(i=i+Math.imul(O,tt)|0)+Math.imul(I,Q)|0,a=a+Math.imul(I,tt)|0,n=n+Math.imul(L,rt)|0,i=(i=i+Math.imul(L,nt)|0)+Math.imul(C,rt)|0,a=a+Math.imul(C,nt)|0,n=n+Math.imul(M,at)|0,i=(i=i+Math.imul(M,ot)|0)+Math.imul(S,at)|0,a=a+Math.imul(S,ot)|0,n=n+Math.imul(T,lt)|0,i=(i=i+Math.imul(T,ut)|0)+Math.imul(k,lt)|0,a=a+Math.imul(k,ut)|0,n=n+Math.imul(b,ft)|0,i=(i=i+Math.imul(b,ht)|0)+Math.imul(_,ft)|0,a=a+Math.imul(_,ht)|0;var St=(u+(n=n+Math.imul(y,dt)|0)|0)+((8191&(i=(i=i+Math.imul(y,vt)|0)+Math.imul(m,dt)|0))<<13)|0;u=((a=a+Math.imul(m,vt)|0)+(i>>>13)|0)+(St>>>26)|0,St&=67108863,n=Math.imul(B,J),i=(i=Math.imul(B,K))+Math.imul(N,J)|0,a=Math.imul(N,K),n=n+Math.imul(z,Q)|0,i=(i=i+Math.imul(z,tt)|0)+Math.imul(R,Q)|0,a=a+Math.imul(R,tt)|0,n=n+Math.imul(O,rt)|0,i=(i=i+Math.imul(O,nt)|0)+Math.imul(I,rt)|0,a=a+Math.imul(I,nt)|0,n=n+Math.imul(L,at)|0,i=(i=i+Math.imul(L,ot)|0)+Math.imul(C,at)|0,a=a+Math.imul(C,ot)|0,n=n+Math.imul(M,lt)|0,i=(i=i+Math.imul(M,ut)|0)+Math.imul(S,lt)|0,a=a+Math.imul(S,ut)|0,n=n+Math.imul(T,ft)|0,i=(i=i+Math.imul(T,ht)|0)+Math.imul(k,ft)|0,a=a+Math.imul(k,ht)|0;var Et=(u+(n=n+Math.imul(b,dt)|0)|0)+((8191&(i=(i=i+Math.imul(b,vt)|0)+Math.imul(_,dt)|0))<<13)|0;u=((a=a+Math.imul(_,vt)|0)+(i>>>13)|0)+(Et>>>26)|0,Et&=67108863,n=Math.imul(B,Q),i=(i=Math.imul(B,tt))+Math.imul(N,Q)|0,a=Math.imul(N,tt),n=n+Math.imul(z,rt)|0,i=(i=i+Math.imul(z,nt)|0)+Math.imul(R,rt)|0,a=a+Math.imul(R,nt)|0,n=n+Math.imul(O,at)|0,i=(i=i+Math.imul(O,ot)|0)+Math.imul(I,at)|0,a=a+Math.imul(I,ot)|0,n=n+Math.imul(L,lt)|0,i=(i=i+Math.imul(L,ut)|0)+Math.imul(C,lt)|0,a=a+Math.imul(C,ut)|0,n=n+Math.imul(M,ft)|0,i=(i=i+Math.imul(M,ht)|0)+Math.imul(S,ft)|0,a=a+Math.imul(S,ht)|0;var Lt=(u+(n=n+Math.imul(T,dt)|0)|0)+((8191&(i=(i=i+Math.imul(T,vt)|0)+Math.imul(k,dt)|0))<<13)|0;u=((a=a+Math.imul(k,vt)|0)+(i>>>13)|0)+(Lt>>>26)|0,Lt&=67108863,n=Math.imul(B,rt),i=(i=Math.imul(B,nt))+Math.imul(N,rt)|0,a=Math.imul(N,nt),n=n+Math.imul(z,at)|0,i=(i=i+Math.imul(z,ot)|0)+Math.imul(R,at)|0,a=a+Math.imul(R,ot)|0,n=n+Math.imul(O,lt)|0,i=(i=i+Math.imul(O,ut)|0)+Math.imul(I,lt)|0,a=a+Math.imul(I,ut)|0,n=n+Math.imul(L,ft)|0,i=(i=i+Math.imul(L,ht)|0)+Math.imul(C,ft)|0,a=a+Math.imul(C,ht)|0;var Ct=(u+(n=n+Math.imul(M,dt)|0)|0)+((8191&(i=(i=i+Math.imul(M,vt)|0)+Math.imul(S,dt)|0))<<13)|0;u=((a=a+Math.imul(S,vt)|0)+(i>>>13)|0)+(Ct>>>26)|0,Ct&=67108863,n=Math.imul(B,at),i=(i=Math.imul(B,ot))+Math.imul(N,at)|0,a=Math.imul(N,ot),n=n+Math.imul(z,lt)|0,i=(i=i+Math.imul(z,ut)|0)+Math.imul(R,lt)|0,a=a+Math.imul(R,ut)|0,n=n+Math.imul(O,ft)|0,i=(i=i+Math.imul(O,ht)|0)+Math.imul(I,ft)|0,a=a+Math.imul(I,ht)|0;var Pt=(u+(n=n+Math.imul(L,dt)|0)|0)+((8191&(i=(i=i+Math.imul(L,vt)|0)+Math.imul(C,dt)|0))<<13)|0;u=((a=a+Math.imul(C,vt)|0)+(i>>>13)|0)+(Pt>>>26)|0,Pt&=67108863,n=Math.imul(B,lt),i=(i=Math.imul(B,ut))+Math.imul(N,lt)|0,a=Math.imul(N,ut),n=n+Math.imul(z,ft)|0,i=(i=i+Math.imul(z,ht)|0)+Math.imul(R,ft)|0,a=a+Math.imul(R,ht)|0;var Ot=(u+(n=n+Math.imul(O,dt)|0)|0)+((8191&(i=(i=i+Math.imul(O,vt)|0)+Math.imul(I,dt)|0))<<13)|0;u=((a=a+Math.imul(I,vt)|0)+(i>>>13)|0)+(Ot>>>26)|0,Ot&=67108863,n=Math.imul(B,ft),i=(i=Math.imul(B,ht))+Math.imul(N,ft)|0,a=Math.imul(N,ht);var It=(u+(n=n+Math.imul(z,dt)|0)|0)+((8191&(i=(i=i+Math.imul(z,vt)|0)+Math.imul(R,dt)|0))<<13)|0;u=((a=a+Math.imul(R,vt)|0)+(i>>>13)|0)+(It>>>26)|0,It&=67108863;var Dt=(u+(n=Math.imul(B,dt))|0)+((8191&(i=(i=Math.imul(B,vt))+Math.imul(N,dt)|0))<<13)|0;return u=((a=Math.imul(N,vt))+(i>>>13)|0)+(Dt>>>26)|0,Dt&=67108863,l[0]=gt,l[1]=yt,l[2]=mt,l[3]=xt,l[4]=bt,l[5]=_t,l[6]=wt,l[7]=Tt,l[8]=kt,l[9]=At,l[10]=Mt,l[11]=St,l[12]=Et,l[13]=Lt,l[14]=Ct,l[15]=Pt,l[16]=Ot,l[17]=It,l[18]=Dt,0!==u&&(l[19]=u,r.length++),r};function v(t,e,r){return(new g).mulp(t,e,r)}function g(t,e){this.x=t,this.y=e}Math.imul||(d=p),a.prototype.mulTo=function(t,e){var r,n=this.length+t.length;return r=10===this.length&&10===t.length?d(this,t,e):n<63?p(this,t,e):n<1024?function(t,e,r){r.negative=e.negative^t.negative,r.length=t.length+e.length;for(var n=0,i=0,a=0;a<r.length-1;a++){var o=i;i=0;for(var s=67108863&n,l=Math.min(a,e.length-1),u=Math.max(0,a-t.length+1);u<=l;u++){var c=a-u,f=(0|t.words[c])*(0|e.words[u]),h=67108863&f;s=67108863&(h=h+s|0),i+=(o=(o=o+(f/67108864|0)|0)+(h>>>26)|0)>>>26,o&=67108863}r.words[a]=s,n=o,o=i}return 0!==n?r.words[a]=n:r.length--,r.strip()}(this,t,e):v(this,t,e),r},g.prototype.makeRBT=function(t){for(var e=new Array(t),r=a.prototype._countBits(t)-1,n=0;n<t;n++)e[n]=this.revBin(n,r,t);return e},g.prototype.revBin=function(t,e,r){if(0===t||t===r-1)return t;for(var n=0,i=0;i<e;i++)n|=(1&t)<<e-i-1,t>>=1;return n},g.prototype.permute=function(t,e,r,n,i,a){for(var o=0;o<a;o++)n[o]=e[t[o]],i[o]=r[t[o]]},g.prototype.transform=function(t,e,r,n,i,a){this.permute(a,t,e,r,n,i);for(var o=1;o<i;o<<=1)for(var s=o<<1,l=Math.cos(2*Math.PI/s),u=Math.sin(2*Math.PI/s),c=0;c<i;c+=s)for(var f=l,h=u,p=0;p<o;p++){var d=r[c+p],v=n[c+p],g=r[c+p+o],y=n[c+p+o],m=f*g-h*y;y=f*y+h*g,g=m,r[c+p]=d+g,n[c+p]=v+y,r[c+p+o]=d-g,n[c+p+o]=v-y,p!==s&&(m=l*f-u*h,h=l*h+u*f,f=m)}},g.prototype.guessLen13b=function(t,e){var r=1|Math.max(e,t),n=1&r,i=0;for(r=r/2|0;r;r>>>=1)i++;return 1<<i+1+n},g.prototype.conjugate=function(t,e,r){if(!(r<=1))for(var n=0;n<r/2;n++){var i=t[n];t[n]=t[r-n-1],t[r-n-1]=i,i=e[n],e[n]=-e[r-n-1],e[r-n-1]=-i}},g.prototype.normalize13b=function(t,e){for(var r=0,n=0;n<e/2;n++){var i=8192*Math.round(t[2*n+1]/e)+Math.round(t[2*n]/e)+r;t[n]=67108863&i,r=i<67108864?0:i/67108864|0}return t},g.prototype.convert13b=function(t,e,r,i){for(var a=0,o=0;o<e;o++)a+=0|t[o],r[2*o]=8191&a,a>>>=13,r[2*o+1]=8191&a,a>>>=13;for(o=2*e;o<i;++o)r[o]=0;n(0===a),n(0==(-8192&a))},g.prototype.stub=function(t){for(var e=new Array(t),r=0;r<t;r++)e[r]=0;return e},g.prototype.mulp=function(t,e,r){var n=2*this.guessLen13b(t.length,e.length),i=this.makeRBT(n),a=this.stub(n),o=new Array(n),s=new Array(n),l=new Array(n),u=new Array(n),c=new Array(n),f=new Array(n),h=r.words;h.length=n,this.convert13b(t.words,t.length,o,n),this.convert13b(e.words,e.length,u,n),this.transform(o,a,s,l,n,i),this.transform(u,a,c,f,n,i);for(var p=0;p<n;p++){var d=s[p]*c[p]-l[p]*f[p];l[p]=s[p]*f[p]+l[p]*c[p],s[p]=d}return this.conjugate(s,l,n),this.transform(s,l,h,a,n,i),this.conjugate(h,a,n),this.normalize13b(h,n),r.negative=t.negative^e.negative,r.length=t.length+e.length,r.strip()},a.prototype.mul=function(t){var e=new a(null);return e.words=new Array(this.length+t.length),this.mulTo(t,e)},a.prototype.mulf=function(t){var e=new a(null);return e.words=new Array(this.length+t.length),v(this,t,e)},a.prototype.imul=function(t){return this.clone().mulTo(t,this)},a.prototype.imuln=function(t){n(\\\"number\\\"==typeof t),n(t<67108864);for(var e=0,r=0;r<this.length;r++){var i=(0|this.words[r])*t,a=(67108863&i)+(67108863&e);e>>=26,e+=i/67108864|0,e+=a>>>26,this.words[r]=67108863&a}return 0!==e&&(this.words[r]=e,this.length++),this},a.prototype.muln=function(t){return this.clone().imuln(t)},a.prototype.sqr=function(){return this.mul(this)},a.prototype.isqr=function(){return this.imul(this.clone())},a.prototype.pow=function(t){var e=function(t){for(var e=new Array(t.bitLength()),r=0;r<e.length;r++){var n=r/26|0,i=r%26;e[r]=(t.words[n]&1<<i)>>>i}return e}(t);if(0===e.length)return new a(1);for(var r=this,n=0;n<e.length&&0===e[n];n++,r=r.sqr());if(++n<e.length)for(var i=r.sqr();n<e.length;n++,i=i.sqr())0!==e[n]&&(r=r.mul(i));return r},a.prototype.iushln=function(t){n(\\\"number\\\"==typeof t&&t>=0);var e,r=t%26,i=(t-r)/26,a=67108863>>>26-r<<26-r;if(0!==r){var o=0;for(e=0;e<this.length;e++){var s=this.words[e]&a,l=(0|this.words[e])-s<<r;this.words[e]=l|o,o=s>>>26-r}o&&(this.words[e]=o,this.length++)}if(0!==i){for(e=this.length-1;e>=0;e--)this.words[e+i]=this.words[e];for(e=0;e<i;e++)this.words[e]=0;this.length+=i}return this.strip()},a.prototype.ishln=function(t){return n(0===this.negative),this.iushln(t)},a.prototype.iushrn=function(t,e,r){var i;n(\\\"number\\\"==typeof t&&t>=0),i=e?(e-e%26)/26:0;var a=t%26,o=Math.min((t-a)/26,this.length),s=67108863^67108863>>>a<<a,l=r;if(i-=o,i=Math.max(0,i),l){for(var u=0;u<o;u++)l.words[u]=this.words[u];l.length=o}if(0===o);else if(this.length>o)for(this.length-=o,u=0;u<this.length;u++)this.words[u]=this.words[u+o];else this.words[0]=0,this.length=1;var c=0;for(u=this.length-1;u>=0&&(0!==c||u>=i);u--){var f=0|this.words[u];this.words[u]=c<<26-a|f>>>a,c=f&s}return l&&0!==c&&(l.words[l.length++]=c),0===this.length&&(this.words[0]=0,this.length=1),this.strip()},a.prototype.ishrn=function(t,e,r){return n(0===this.negative),this.iushrn(t,e,r)},a.prototype.shln=function(t){return this.clone().ishln(t)},a.prototype.ushln=function(t){return this.clone().iushln(t)},a.prototype.shrn=function(t){return this.clone().ishrn(t)},a.prototype.ushrn=function(t){return this.clone().iushrn(t)},a.prototype.testn=function(t){n(\\\"number\\\"==typeof t&&t>=0);var e=t%26,r=(t-e)/26,i=1<<e;return!(this.length<=r||!(this.words[r]&i))},a.prototype.imaskn=function(t){n(\\\"number\\\"==typeof t&&t>=0);var e=t%26,r=(t-e)/26;if(n(0===this.negative,\\\"imaskn works only with positive numbers\\\"),this.length<=r)return this;if(0!==e&&r++,this.length=Math.min(r,this.length),0!==e){var i=67108863^67108863>>>e<<e;this.words[this.length-1]&=i}return this.strip()},a.prototype.maskn=function(t){return this.clone().imaskn(t)},a.prototype.iaddn=function(t){return n(\\\"number\\\"==typeof t),n(t<67108864),t<0?this.isubn(-t):0!==this.negative?1===this.length&&(0|this.words[0])<t?(this.words[0]=t-(0|this.words[0]),this.negative=0,this):(this.negative=0,this.isubn(t),this.negative=1,this):this._iaddn(t)},a.prototype._iaddn=function(t){this.words[0]+=t;for(var e=0;e<this.length&&this.words[e]>=67108864;e++)this.words[e]-=67108864,e===this.length-1?this.words[e+1]=1:this.words[e+1]++;return this.length=Math.max(this.length,e+1),this},a.prototype.isubn=function(t){if(n(\\\"number\\\"==typeof t),n(t<67108864),t<0)return this.iaddn(-t);if(0!==this.negative)return this.negative=0,this.iaddn(t),this.negative=1,this;if(this.words[0]-=t,1===this.length&&this.words[0]<0)this.words[0]=-this.words[0],this.negative=1;else for(var e=0;e<this.length&&this.words[e]<0;e++)this.words[e]+=67108864,this.words[e+1]-=1;return this.strip()},a.prototype.addn=function(t){return this.clone().iaddn(t)},a.prototype.subn=function(t){return this.clone().isubn(t)},a.prototype.iabs=function(){return this.negative=0,this},a.prototype.abs=function(){return this.clone().iabs()},a.prototype._ishlnsubmul=function(t,e,r){var i,a,o=t.length+r;this._expand(o);var s=0;for(i=0;i<t.length;i++){a=(0|this.words[i+r])+s;var l=(0|t.words[i])*e;s=((a-=67108863&l)>>26)-(l/67108864|0),this.words[i+r]=67108863&a}for(;i<this.length-r;i++)s=(a=(0|this.words[i+r])+s)>>26,this.words[i+r]=67108863&a;if(0===s)return this.strip();for(n(-1===s),s=0,i=0;i<this.length;i++)s=(a=-(0|this.words[i])+s)>>26,this.words[i]=67108863&a;return this.negative=1,this.strip()},a.prototype._wordDiv=function(t,e){var r=(this.length,t.length),n=this.clone(),i=t,o=0|i.words[i.length-1];0!=(r=26-this._countBits(o))&&(i=i.ushln(r),n.iushln(r),o=0|i.words[i.length-1]);var s,l=n.length-i.length;if(\\\"mod\\\"!==e){(s=new a(null)).length=l+1,s.words=new Array(s.length);for(var u=0;u<s.length;u++)s.words[u]=0}var c=n.clone()._ishlnsubmul(i,1,l);0===c.negative&&(n=c,s&&(s.words[l]=1));for(var f=l-1;f>=0;f--){var h=67108864*(0|n.words[i.length+f])+(0|n.words[i.length+f-1]);for(h=Math.min(h/o|0,67108863),n._ishlnsubmul(i,h,f);0!==n.negative;)h--,n.negative=0,n._ishlnsubmul(i,1,f),n.isZero()||(n.negative^=1);s&&(s.words[f]=h)}return s&&s.strip(),n.strip(),\\\"div\\\"!==e&&0!==r&&n.iushrn(r),{div:s||null,mod:n}},a.prototype.divmod=function(t,e,r){return n(!t.isZero()),this.isZero()?{div:new a(0),mod:new a(0)}:0!==this.negative&&0===t.negative?(s=this.neg().divmod(t,e),\\\"mod\\\"!==e&&(i=s.div.neg()),\\\"div\\\"!==e&&(o=s.mod.neg(),r&&0!==o.negative&&o.iadd(t)),{div:i,mod:o}):0===this.negative&&0!==t.negative?(s=this.divmod(t.neg(),e),\\\"mod\\\"!==e&&(i=s.div.neg()),{div:i,mod:s.mod}):0!=(this.negative&t.negative)?(s=this.neg().divmod(t.neg(),e),\\\"div\\\"!==e&&(o=s.mod.neg(),r&&0!==o.negative&&o.isub(t)),{div:s.div,mod:o}):t.length>this.length||this.cmp(t)<0?{div:new a(0),mod:this}:1===t.length?\\\"div\\\"===e?{div:this.divn(t.words[0]),mod:null}:\\\"mod\\\"===e?{div:null,mod:new a(this.modn(t.words[0]))}:{div:this.divn(t.words[0]),mod:new a(this.modn(t.words[0]))}:this._wordDiv(t,e);var i,o,s},a.prototype.div=function(t){return this.divmod(t,\\\"div\\\",!1).div},a.prototype.mod=function(t){return this.divmod(t,\\\"mod\\\",!1).mod},a.prototype.umod=function(t){return this.divmod(t,\\\"mod\\\",!0).mod},a.prototype.divRound=function(t){var e=this.divmod(t);if(e.mod.isZero())return e.div;var r=0!==e.div.negative?e.mod.isub(t):e.mod,n=t.ushrn(1),i=t.andln(1),a=r.cmp(n);return a<0||1===i&&0===a?e.div:0!==e.div.negative?e.div.isubn(1):e.div.iaddn(1)},a.prototype.modn=function(t){n(t<=67108863);for(var e=(1<<26)%t,r=0,i=this.length-1;i>=0;i--)r=(e*r+(0|this.words[i]))%t;return r},a.prototype.idivn=function(t){n(t<=67108863);for(var e=0,r=this.length-1;r>=0;r--){var i=(0|this.words[r])+67108864*e;this.words[r]=i/t|0,e=i%t}return this.strip()},a.prototype.divn=function(t){return this.clone().idivn(t)},a.prototype.egcd=function(t){n(0===t.negative),n(!t.isZero());var e=this,r=t.clone();e=0!==e.negative?e.umod(t):e.clone();for(var i=new a(1),o=new a(0),s=new a(0),l=new a(1),u=0;e.isEven()&&r.isEven();)e.iushrn(1),r.iushrn(1),++u;for(var c=r.clone(),f=e.clone();!e.isZero();){for(var h=0,p=1;0==(e.words[0]&p)&&h<26;++h,p<<=1);if(h>0)for(e.iushrn(h);h-- >0;)(i.isOdd()||o.isOdd())&&(i.iadd(c),o.isub(f)),i.iushrn(1),o.iushrn(1);for(var d=0,v=1;0==(r.words[0]&v)&&d<26;++d,v<<=1);if(d>0)for(r.iushrn(d);d-- >0;)(s.isOdd()||l.isOdd())&&(s.iadd(c),l.isub(f)),s.iushrn(1),l.iushrn(1);e.cmp(r)>=0?(e.isub(r),i.isub(s),o.isub(l)):(r.isub(e),s.isub(i),l.isub(o))}return{a:s,b:l,gcd:r.iushln(u)}},a.prototype._invmp=function(t){n(0===t.negative),n(!t.isZero());var e=this,r=t.clone();e=0!==e.negative?e.umod(t):e.clone();for(var i,o=new a(1),s=new a(0),l=r.clone();e.cmpn(1)>0&&r.cmpn(1)>0;){for(var u=0,c=1;0==(e.words[0]&c)&&u<26;++u,c<<=1);if(u>0)for(e.iushrn(u);u-- >0;)o.isOdd()&&o.iadd(l),o.iushrn(1);for(var f=0,h=1;0==(r.words[0]&h)&&f<26;++f,h<<=1);if(f>0)for(r.iushrn(f);f-- >0;)s.isOdd()&&s.iadd(l),s.iushrn(1);e.cmp(r)>=0?(e.isub(r),o.isub(s)):(r.isub(e),s.isub(o))}return(i=0===e.cmpn(1)?o:s).cmpn(0)<0&&i.iadd(t),i},a.prototype.gcd=function(t){if(this.isZero())return t.abs();if(t.isZero())return this.abs();var e=this.clone(),r=t.clone();e.negative=0,r.negative=0;for(var n=0;e.isEven()&&r.isEven();n++)e.iushrn(1),r.iushrn(1);for(;;){for(;e.isEven();)e.iushrn(1);for(;r.isEven();)r.iushrn(1);var i=e.cmp(r);if(i<0){var a=e;e=r,r=a}else if(0===i||0===r.cmpn(1))break;e.isub(r)}return r.iushln(n)},a.prototype.invm=function(t){return this.egcd(t).a.umod(t)},a.prototype.isEven=function(){return 0==(1&this.words[0])},a.prototype.isOdd=function(){return 1==(1&this.words[0])},a.prototype.andln=function(t){return this.words[0]&t},a.prototype.bincn=function(t){n(\\\"number\\\"==typeof t);var e=t%26,r=(t-e)/26,i=1<<e;if(this.length<=r)return this._expand(r+1),this.words[r]|=i,this;for(var a=i,o=r;0!==a&&o<this.length;o++){var s=0|this.words[o];a=(s+=a)>>>26,s&=67108863,this.words[o]=s}return 0!==a&&(this.words[o]=a,this.length++),this},a.prototype.isZero=function(){return 1===this.length&&0===this.words[0]},a.prototype.cmpn=function(t){var e,r=t<0;if(0!==this.negative&&!r)return-1;if(0===this.negative&&r)return 1;if(this.strip(),this.length>1)e=1;else{r&&(t=-t),n(t<=67108863,\\\"Number is too big\\\");var i=0|this.words[0];e=i===t?0:i<t?-1:1}return 0!==this.negative?0|-e:e},a.prototype.cmp=function(t){if(0!==this.negative&&0===t.negative)return-1;if(0===this.negative&&0!==t.negative)return 1;var e=this.ucmp(t);return 0!==this.negative?0|-e:e},a.prototype.ucmp=function(t){if(this.length>t.length)return 1;if(this.length<t.length)return-1;for(var e=0,r=this.length-1;r>=0;r--){var n=0|this.words[r],i=0|t.words[r];if(n!==i){n<i?e=-1:n>i&&(e=1);break}}return e},a.prototype.gtn=function(t){return 1===this.cmpn(t)},a.prototype.gt=function(t){return 1===this.cmp(t)},a.prototype.gten=function(t){return this.cmpn(t)>=0},a.prototype.gte=function(t){return this.cmp(t)>=0},a.prototype.ltn=function(t){return-1===this.cmpn(t)},a.prototype.lt=function(t){return-1===this.cmp(t)},a.prototype.lten=function(t){return this.cmpn(t)<=0},a.prototype.lte=function(t){return this.cmp(t)<=0},a.prototype.eqn=function(t){return 0===this.cmpn(t)},a.prototype.eq=function(t){return 0===this.cmp(t)},a.red=function(t){return new T(t)},a.prototype.toRed=function(t){return n(!this.red,\\\"Already a number in reduction context\\\"),n(0===this.negative,\\\"red works only with positives\\\"),t.convertTo(this)._forceRed(t)},a.prototype.fromRed=function(){return n(this.red,\\\"fromRed works only with numbers in reduction context\\\"),this.red.convertFrom(this)},a.prototype._forceRed=function(t){return this.red=t,this},a.prototype.forceRed=function(t){return n(!this.red,\\\"Already a number in reduction context\\\"),this._forceRed(t)},a.prototype.redAdd=function(t){return n(this.red,\\\"redAdd works only with red numbers\\\"),this.red.add(this,t)},a.prototype.redIAdd=function(t){return n(this.red,\\\"redIAdd works only with red numbers\\\"),this.red.iadd(this,t)},a.prototype.redSub=function(t){return n(this.red,\\\"redSub works only with red numbers\\\"),this.red.sub(this,t)},a.prototype.redISub=function(t){return n(this.red,\\\"redISub works only with red numbers\\\"),this.red.isub(this,t)},a.prototype.redShl=function(t){return n(this.red,\\\"redShl works only with red numbers\\\"),this.red.shl(this,t)},a.prototype.redMul=function(t){return n(this.red,\\\"redMul works only with red numbers\\\"),this.red._verify2(this,t),this.red.mul(this,t)},a.prototype.redIMul=function(t){return n(this.red,\\\"redMul works only with red numbers\\\"),this.red._verify2(this,t),this.red.imul(this,t)},a.prototype.redSqr=function(){return n(this.red,\\\"redSqr works only with red numbers\\\"),this.red._verify1(this),this.red.sqr(this)},a.prototype.redISqr=function(){return n(this.red,\\\"redISqr works only with red numbers\\\"),this.red._verify1(this),this.red.isqr(this)},a.prototype.redSqrt=function(){return n(this.red,\\\"redSqrt works only with red numbers\\\"),this.red._verify1(this),this.red.sqrt(this)},a.prototype.redInvm=function(){return n(this.red,\\\"redInvm works only with red numbers\\\"),this.red._verify1(this),this.red.invm(this)},a.prototype.redNeg=function(){return n(this.red,\\\"redNeg works only with red numbers\\\"),this.red._verify1(this),this.red.neg(this)},a.prototype.redPow=function(t){return n(this.red&&!t.red,\\\"redPow(normalNum)\\\"),this.red._verify1(this),this.red.pow(this,t)};var y={k256:null,p224:null,p192:null,p25519:null};function m(t,e){this.name=t,this.p=new a(e,16),this.n=this.p.bitLength(),this.k=new a(1).iushln(this.n).isub(this.p),this.tmp=this._tmp()}function x(){m.call(this,\\\"k256\\\",\\\"ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f\\\")}function b(){m.call(this,\\\"p224\\\",\\\"ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001\\\")}function _(){m.call(this,\\\"p192\\\",\\\"ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff\\\")}function w(){m.call(this,\\\"25519\\\",\\\"7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed\\\")}function T(t){if(\\\"string\\\"==typeof t){var e=a._prime(t);this.m=e.p,this.prime=e}else n(t.gtn(1),\\\"modulus must be greater than 1\\\"),this.m=t,this.prime=null}function k(t){T.call(this,t),this.shift=this.m.bitLength(),this.shift%26!=0&&(this.shift+=26-this.shift%26),this.r=new a(1).iushln(this.shift),this.r2=this.imod(this.r.sqr()),this.rinv=this.r._invmp(this.m),this.minv=this.rinv.mul(this.r).isubn(1).div(this.m),this.minv=this.minv.umod(this.r),this.minv=this.r.sub(this.minv)}m.prototype._tmp=function(){var t=new a(null);return t.words=new Array(Math.ceil(this.n/13)),t},m.prototype.ireduce=function(t){var e,r=t;do{this.split(r,this.tmp),e=(r=(r=this.imulK(r)).iadd(this.tmp)).bitLength()}while(e>this.n);var n=e<this.n?-1:r.ucmp(this.p);return 0===n?(r.words[0]=0,r.length=1):n>0?r.isub(this.p):void 0!==r.strip?r.strip():r._strip(),r},m.prototype.split=function(t,e){t.iushrn(this.n,0,e)},m.prototype.imulK=function(t){return t.imul(this.k)},i(x,m),x.prototype.split=function(t,e){for(var r=4194303,n=Math.min(t.length,9),i=0;i<n;i++)e.words[i]=t.words[i];if(e.length=n,t.length<=9)return t.words[0]=0,void(t.length=1);var a=t.words[9];for(e.words[e.length++]=a&r,i=10;i<t.length;i++){var o=0|t.words[i];t.words[i-10]=(o&r)<<4|a>>>22,a=o}a>>>=22,t.words[i-10]=a,0===a&&t.length>10?t.length-=10:t.length-=9},x.prototype.imulK=function(t){t.words[t.length]=0,t.words[t.length+1]=0,t.length+=2;for(var e=0,r=0;r<t.length;r++){var n=0|t.words[r];e+=977*n,t.words[r]=67108863&e,e=64*n+(e/67108864|0)}return 0===t.words[t.length-1]&&(t.length--,0===t.words[t.length-1]&&t.length--),t},i(b,m),i(_,m),i(w,m),w.prototype.imulK=function(t){for(var e=0,r=0;r<t.length;r++){var n=19*(0|t.words[r])+e,i=67108863&n;n>>>=26,t.words[r]=i,e=n}return 0!==e&&(t.words[t.length++]=e),t},a._prime=function(t){if(y[t])return y[t];var e;if(\\\"k256\\\"===t)e=new x;else if(\\\"p224\\\"===t)e=new b;else if(\\\"p192\\\"===t)e=new _;else{if(\\\"p25519\\\"!==t)throw new Error(\\\"Unknown prime \\\"+t);e=new w}return y[t]=e,e},T.prototype._verify1=function(t){n(0===t.negative,\\\"red works only with positives\\\"),n(t.red,\\\"red works only with red numbers\\\")},T.prototype._verify2=function(t,e){n(0==(t.negative|e.negative),\\\"red works only with positives\\\"),n(t.red&&t.red===e.red,\\\"red works only with red numbers\\\")},T.prototype.imod=function(t){return this.prime?this.prime.ireduce(t)._forceRed(this):t.umod(this.m)._forceRed(this)},T.prototype.neg=function(t){return t.isZero()?t.clone():this.m.sub(t)._forceRed(this)},T.prototype.add=function(t,e){this._verify2(t,e);var r=t.add(e);return r.cmp(this.m)>=0&&r.isub(this.m),r._forceRed(this)},T.prototype.iadd=function(t,e){this._verify2(t,e);var r=t.iadd(e);return r.cmp(this.m)>=0&&r.isub(this.m),r},T.prototype.sub=function(t,e){this._verify2(t,e);var r=t.sub(e);return r.cmpn(0)<0&&r.iadd(this.m),r._forceRed(this)},T.prototype.isub=function(t,e){this._verify2(t,e);var r=t.isub(e);return r.cmpn(0)<0&&r.iadd(this.m),r},T.prototype.shl=function(t,e){return this._verify1(t),this.imod(t.ushln(e))},T.prototype.imul=function(t,e){return this._verify2(t,e),this.imod(t.imul(e))},T.prototype.mul=function(t,e){return this._verify2(t,e),this.imod(t.mul(e))},T.prototype.isqr=function(t){return this.imul(t,t.clone())},T.prototype.sqr=function(t){return this.mul(t,t)},T.prototype.sqrt=function(t){if(t.isZero())return t.clone();var e=this.m.andln(3);if(n(e%2==1),3===e){var r=this.m.add(new a(1)).iushrn(2);return this.pow(t,r)}for(var i=this.m.subn(1),o=0;!i.isZero()&&0===i.andln(1);)o++,i.iushrn(1);n(!i.isZero());var s=new a(1).toRed(this),l=s.redNeg(),u=this.m.subn(1).iushrn(1),c=this.m.bitLength();for(c=new a(2*c*c).toRed(this);0!==this.pow(c,u).cmp(l);)c.redIAdd(l);for(var f=this.pow(c,i),h=this.pow(t,i.addn(1).iushrn(1)),p=this.pow(t,i),d=o;0!==p.cmp(s);){for(var v=p,g=0;0!==v.cmp(s);g++)v=v.redSqr();n(g<d);var y=this.pow(f,new a(1).iushln(d-g-1));h=h.redMul(y),f=y.redSqr(),p=p.redMul(f),d=g}return h},T.prototype.invm=function(t){var e=t._invmp(this.m);return 0!==e.negative?(e.negative=0,this.imod(e).redNeg()):this.imod(e)},T.prototype.pow=function(t,e){if(e.isZero())return new a(1).toRed(this);if(0===e.cmpn(1))return t.clone();var r=new Array(16);r[0]=new a(1).toRed(this),r[1]=t;for(var n=2;n<r.length;n++)r[n]=this.mul(r[n-1],t);var i=r[0],o=0,s=0,l=e.bitLength()%26;for(0===l&&(l=26),n=e.length-1;n>=0;n--){for(var u=e.words[n],c=l-1;c>=0;c--){var f=u>>c&1;i!==r[0]&&(i=this.sqr(i)),0!==f||0!==o?(o<<=1,o|=f,(4==++s||0===n&&0===c)&&(i=this.mul(i,r[o]),s=0,o=0)):s=0}l=26}return i},T.prototype.convertTo=function(t){var e=t.umod(this.m);return e===t?e.clone():e},T.prototype.convertFrom=function(t){var e=t.clone();return e.red=null,e},a.mont=function(t){return new k(t)},i(k,T),k.prototype.convertTo=function(t){return this.imod(t.ushln(this.shift))},k.prototype.convertFrom=function(t){var e=this.imod(t.mul(this.rinv));return e.red=null,e},k.prototype.imul=function(t,e){if(t.isZero()||e.isZero())return t.words[0]=0,t.length=1,t;var r=t.imul(e),n=r.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m),i=r.isub(n).iushrn(this.shift),a=i;return i.cmp(this.m)>=0?a=i.isub(this.m):i.cmpn(0)<0&&(a=i.iadd(this.m)),a._forceRed(this)},k.prototype.mul=function(t,e){if(t.isZero()||e.isZero())return new a(0)._forceRed(this);var r=t.mul(e),n=r.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m),i=r.isub(n).iushrn(this.shift),o=i;return i.cmp(this.m)>=0?o=i.isub(this.m):i.cmpn(0)<0&&(o=i.iadd(this.m)),o._forceRed(this)},k.prototype.invm=function(t){return this.imod(t._invmp(this.m).mul(this.r2))._forceRed(this)}}(t=r.nmd(t),this)},2692:function(t){\\\"use strict\\\";t.exports=function(t){var e,r,n,i=t.length,a=0;for(e=0;e<i;++e)a+=t[e].length;var o=new Array(a),s=0;for(e=0;e<i;++e){var l=t[e],u=l.length;for(r=0;r<u;++r){var c=o[s++]=new Array(u-1),f=0;for(n=0;n<u;++n)n!==r&&(c[f++]=l[n]);if(1&r){var h=c[1];c[1]=c[0],c[0]=h}}}return o}},2569:function(t,e,r){\\\"use strict\\\";t.exports=function(t,e,r){switch(arguments.length){case 1:return n=[],u(i=t,i,c,!0),n;case 2:return\\\"function\\\"==typeof e?u(t,t,e,!0):function(t,e){return n=[],u(t,e,c,!1),n}(t,e);case 3:return u(t,e,r,!1);default:throw new Error(\\\"box-intersect: Invalid arguments\\\")}var i};var n,i=r(5306),a=r(1390),o=r(2337);function s(t,e){for(var r=0;r<t;++r)if(!(e[r]<=e[r+t]))return!0;return!1}function l(t,e,r,n){for(var i=0,a=0,o=0,l=t.length;o<l;++o){var u=t[o];if(!s(e,u)){for(var c=0;c<2*e;++c)r[i++]=u[c];n[a++]=o}}return a}function u(t,e,r,n){var s=t.length,u=e.length;if(!(s<=0||u<=0)){var c=t[0].length>>>1;if(!(c<=0)){var f,h=i.mallocDouble(2*c*s),p=i.mallocInt32(s);if((s=l(t,c,h,p))>0){if(1===c&&n)a.init(s),f=a.sweepComplete(c,r,0,s,h,p,0,s,h,p);else{var d=i.mallocDouble(2*c*u),v=i.mallocInt32(u);(u=l(e,c,d,v))>0&&(a.init(s+u),f=1===c?a.sweepBipartite(c,r,0,s,h,p,0,u,d,v):o(c,r,n,s,h,p,u,d,v),i.free(d),i.free(v))}i.free(h),i.free(p)}return f}}}function c(t,e){n.push([t,e])}},7333:function(t,e){\\\"use strict\\\";function r(t){return t?function(t,e,r,n,i,a,o,s,l,u,c){return i-n>l-s?function(t,e,r,n,i,a,o,s,l,u,c){for(var f=2*t,h=n,p=f*n;h<i;++h,p+=f){var d=a[e+p],v=a[e+p+t],g=o[h];t:for(var y=s,m=f*s;y<l;++y,m+=f){var x=u[e+m],b=u[e+m+t],_=c[y];if(!(b<d||v<x)){for(var w=e+1;w<t;++w){var T=a[w+p],k=a[w+t+p],A=u[w+m],M=u[w+t+m];if(k<A||M<T)continue t}var S=r(g,_);if(void 0!==S)return S}}}}(t,e,r,n,i,a,o,s,l,u,c):function(t,e,r,n,i,a,o,s,l,u,c){for(var f=2*t,h=s,p=f*s;h<l;++h,p+=f){var d=u[e+p],v=u[e+p+t],g=c[h];t:for(var y=n,m=f*n;y<i;++y,m+=f){var x=a[e+m],b=a[e+m+t],_=o[y];if(!(v<x||b<d)){for(var w=e+1;w<t;++w){var T=a[w+m],k=a[w+t+m],A=u[w+p],M=u[w+t+p];if(k<A||M<T)continue t}var S=r(_,g);if(void 0!==S)return S}}}}(t,e,r,n,i,a,o,s,l,u,c)}:function(t,e,r,n,i,a,o,s,l,u,c,f){return a-i>u-l?n?function(t,e,r,n,i,a,o,s,l,u,c){for(var f=2*t,h=n,p=f*n;h<i;++h,p+=f){var d=a[e+p],v=a[e+p+t],g=o[h];t:for(var y=s,m=f*s;y<l;++y,m+=f){var x=u[e+m],b=c[y];if(!(x<=d||v<x)){for(var _=e+1;_<t;++_){var w=a[_+p],T=a[_+t+p],k=u[_+m],A=u[_+t+m];if(T<k||A<w)continue t}var M=r(b,g);if(void 0!==M)return M}}}}(t,e,r,i,a,o,s,l,u,c,f):function(t,e,r,n,i,a,o,s,l,u,c){for(var f=2*t,h=n,p=f*n;h<i;++h,p+=f){var d=a[e+p],v=a[e+p+t],g=o[h];t:for(var y=s,m=f*s;y<l;++y,m+=f){var x=u[e+m],b=c[y];if(!(x<d||v<x)){for(var _=e+1;_<t;++_){var w=a[_+p],T=a[_+t+p],k=u[_+m],A=u[_+t+m];if(T<k||A<w)continue t}var M=r(g,b);if(void 0!==M)return M}}}}(t,e,r,i,a,o,s,l,u,c,f):n?function(t,e,r,n,i,a,o,s,l,u,c){for(var f=2*t,h=s,p=f*s;h<l;++h,p+=f){var d=u[e+p],v=c[h];t:for(var g=n,y=f*n;g<i;++g,y+=f){var m=a[e+y],x=a[e+y+t],b=o[g];if(!(d<=m||x<d)){for(var _=e+1;_<t;++_){var w=a[_+y],T=a[_+t+y],k=u[_+p],A=u[_+t+p];if(T<k||A<w)continue t}var M=r(v,b);if(void 0!==M)return M}}}}(t,e,r,i,a,o,s,l,u,c,f):function(t,e,r,n,i,a,o,s,l,u,c){for(var f=2*t,h=s,p=f*s;h<l;++h,p+=f){var d=u[e+p],v=c[h];t:for(var g=n,y=f*n;g<i;++g,y+=f){var m=a[e+y],x=a[e+y+t],b=o[g];if(!(d<m||x<d)){for(var _=e+1;_<t;++_){var w=a[_+y],T=a[_+t+y],k=u[_+p],A=u[_+t+p];if(T<k||A<w)continue t}var M=r(b,v);if(void 0!==M)return M}}}}(t,e,r,i,a,o,s,l,u,c,f)}}e.partial=r(!1),e.full=r(!0)},2337:function(t,e,r){\\\"use strict\\\";t.exports=function(t,e,r,a,c,S,E,L,C){!function(t,e){var r=8*i.log2(e+1)*(t+1)|0,a=i.nextPow2(b*r);w.length<a&&(n.free(w),w=n.mallocInt32(a));var o=i.nextPow2(_*r);T.length<o&&(n.free(T),T=n.mallocDouble(o))}(t,a+E);var P,O=0,I=2*t;for(k(O++,0,0,a,0,E,r?16:0,-1/0,1/0),r||k(O++,0,0,E,0,a,1,-1/0,1/0);O>0;){var D=(O-=1)*b,z=w[D],R=w[D+1],F=w[D+2],B=w[D+3],N=w[D+4],j=w[D+5],U=O*_,V=T[U],H=T[U+1],q=1&j,G=!!(16&j),Z=c,Y=S,W=L,X=C;if(q&&(Z=L,Y=C,W=c,X=S),!(2&j&&R>=(F=g(t,z,R,F,Z,Y,H))||4&j&&(R=y(t,z,R,F,Z,Y,V))>=F)){var J=F-R,K=N-B;if(G){if(t*J*(J+K)<p){if(void 0!==(P=l.scanComplete(t,z,e,R,F,Z,Y,B,N,W,X)))return P;continue}}else{if(t*Math.min(J,K)<f){if(void 0!==(P=o(t,z,e,q,R,F,Z,Y,B,N,W,X)))return P;continue}if(t*J*K<h){if(void 0!==(P=l.scanBipartite(t,z,e,q,R,F,Z,Y,B,N,W,X)))return P;continue}}var $=d(t,z,R,F,Z,Y,V,H);if(R<$)if(t*($-R)<f){if(void 0!==(P=s(t,z+1,e,R,$,Z,Y,B,N,W,X)))return P}else if(z===t-2){if(void 0!==(P=q?l.sweepBipartite(t,e,B,N,W,X,R,$,Z,Y):l.sweepBipartite(t,e,R,$,Z,Y,B,N,W,X)))return P}else k(O++,z+1,R,$,B,N,q,-1/0,1/0),k(O++,z+1,B,N,R,$,1^q,-1/0,1/0);if($<F){var Q=u(t,z,B,N,W,X),tt=W[I*Q+z],et=v(t,z,Q,N,W,X,tt);if(et<N&&k(O++,z,$,F,et,N,(4|q)+(G?16:0),tt,H),B<Q&&k(O++,z,$,F,B,Q,(2|q)+(G?16:0),V,tt),Q+1===et){if(void 0!==(P=G?M(t,z,e,$,F,Z,Y,Q,W,X[Q]):A(t,z,e,q,$,F,Z,Y,Q,W,X[Q])))return P}else if(Q<et){var rt;if(G){if($<(rt=m(t,z,$,F,Z,Y,tt))){var nt=v(t,z,$,rt,Z,Y,tt);if(z===t-2){if($<nt&&void 0!==(P=l.sweepComplete(t,e,$,nt,Z,Y,Q,et,W,X)))return P;if(nt<rt&&void 0!==(P=l.sweepBipartite(t,e,nt,rt,Z,Y,Q,et,W,X)))return P}else $<nt&&k(O++,z+1,$,nt,Q,et,16,-1/0,1/0),nt<rt&&(k(O++,z+1,nt,rt,Q,et,0,-1/0,1/0),k(O++,z+1,Q,et,nt,rt,1,-1/0,1/0))}}else $<(rt=q?x(t,z,$,F,Z,Y,tt):m(t,z,$,F,Z,Y,tt))&&(z===t-2?P=q?l.sweepBipartite(t,e,Q,et,W,X,$,rt,Z,Y):l.sweepBipartite(t,e,$,rt,Z,Y,Q,et,W,X):(k(O++,z+1,$,rt,Q,et,q,-1/0,1/0),k(O++,z+1,Q,et,$,rt,1^q,-1/0,1/0)))}}}}};var n=r(5306),i=r(2288),a=r(7333),o=a.partial,s=a.full,l=r(1390),u=r(2464),c=r(122),f=128,h=1<<22,p=1<<22,d=c(\\\"!(lo>=p0)&&!(p1>=hi)\\\"),v=c(\\\"lo===p0\\\"),g=c(\\\"lo<p0\\\"),y=c(\\\"hi<=p0\\\"),m=c(\\\"lo<=p0&&p0<=hi\\\"),x=c(\\\"lo<p0&&p0<=hi\\\"),b=6,_=2,w=n.mallocInt32(1024),T=n.mallocDouble(1024);function k(t,e,r,n,i,a,o,s,l){var u=b*t;w[u]=e,w[u+1]=r,w[u+2]=n,w[u+3]=i,w[u+4]=a,w[u+5]=o;var c=_*t;T[c]=s,T[c+1]=l}function A(t,e,r,n,i,a,o,s,l,u,c){var f=2*t,h=l*f,p=u[h+e];t:for(var d=i,v=i*f;d<a;++d,v+=f){var g=o[v+e],y=o[v+e+t];if(!(p<g||y<p||n&&p===g)){for(var m,x=s[d],b=e+1;b<t;++b){g=o[v+b],y=o[v+b+t];var _=u[h+b],w=u[h+b+t];if(y<_||w<g)continue t}if(void 0!==(m=n?r(c,x):r(x,c)))return m}}}function M(t,e,r,n,i,a,o,s,l,u){var c=2*t,f=s*c,h=l[f+e];t:for(var p=n,d=n*c;p<i;++p,d+=c){var v=o[p];if(v!==u){var g=a[d+e],y=a[d+e+t];if(!(h<g||y<h)){for(var m=e+1;m<t;++m){g=a[d+m],y=a[d+m+t];var x=l[f+m],b=l[f+m+t];if(y<x||b<g)continue t}var _=r(v,u);if(void 0!==_)return _}}}}},2464:function(t,e,r){\\\"use strict\\\";t.exports=function(t,e,r,o,s,l){if(o<=r+1)return r;for(var u=r,c=o,f=o+r>>>1,h=2*t,p=f,d=s[h*f+e];u<c;){if(c-u<i){a(t,e,u,c,s,l),d=s[h*f+e];break}var v=c-u,g=Math.random()*v+u|0,y=s[h*g+e],m=Math.random()*v+u|0,x=s[h*m+e],b=Math.random()*v+u|0,_=s[h*b+e];y<=x?_>=x?(p=m,d=x):y>=_?(p=g,d=y):(p=b,d=_):x>=_?(p=m,d=x):_>=y?(p=g,d=y):(p=b,d=_);for(var w=h*(c-1),T=h*p,k=0;k<h;++k,++w,++T){var A=s[w];s[w]=s[T],s[T]=A}var M=l[c-1];for(l[c-1]=l[p],l[p]=M,w=h*(c-1),T=h*(p=n(t,e,u,c-1,s,l,d)),k=0;k<h;++k,++w,++T)A=s[w],s[w]=s[T],s[T]=A;if(M=l[c-1],l[c-1]=l[p],l[p]=M,f<p){for(c=p-1;u<c&&s[h*(c-1)+e]===d;)c-=1;c+=1}else{if(!(p<f))break;for(u=p+1;u<c&&s[h*u+e]===d;)u+=1}}return n(t,e,r,f,s,l,s[h*f+e])};var n=r(122)(\\\"lo<p0\\\"),i=8;function a(t,e,r,n,i,a){for(var o=2*t,s=o*(r+1)+e,l=r+1;l<n;++l,s+=o)for(var u=i[s],c=l,f=o*(l-1);c>r&&i[f+e]>u;--c,f-=o){for(var h=f,p=f+o,d=0;d<o;++d,++h,++p){var v=i[h];i[h]=i[p],i[p]=v}var g=a[c];a[c]=a[c-1],a[c-1]=g}}},122:function(t){\\\"use strict\\\";t.exports=function(t){return e[t]};var e={\\\"lo===p0\\\":function(t,e,r,n,i,a,o){for(var s=2*t,l=s*r,u=l,c=r,f=e,h=r;n>h;++h,l+=s)if(i[l+f]===o)if(c===h)c+=1,u+=s;else{for(var p=0;s>p;++p){var d=i[l+p];i[l+p]=i[u],i[u++]=d}var v=a[h];a[h]=a[c],a[c++]=v}return c},\\\"lo<p0\\\":function(t,e,r,n,i,a,o){for(var s=2*t,l=s*r,u=l,c=r,f=e,h=r;n>h;++h,l+=s)if(i[l+f]<o)if(c===h)c+=1,u+=s;else{for(var p=0;s>p;++p){var d=i[l+p];i[l+p]=i[u],i[u++]=d}var v=a[h];a[h]=a[c],a[c++]=v}return c},\\\"lo<=p0\\\":function(t,e,r,n,i,a,o){for(var s=2*t,l=s*r,u=l,c=r,f=t+e,h=r;n>h;++h,l+=s)if(i[l+f]<=o)if(c===h)c+=1,u+=s;else{for(var p=0;s>p;++p){var d=i[l+p];i[l+p]=i[u],i[u++]=d}var v=a[h];a[h]=a[c],a[c++]=v}return c},\\\"hi<=p0\\\":function(t,e,r,n,i,a,o){for(var s=2*t,l=s*r,u=l,c=r,f=t+e,h=r;n>h;++h,l+=s)if(i[l+f]<=o)if(c===h)c+=1,u+=s;else{for(var p=0;s>p;++p){var d=i[l+p];i[l+p]=i[u],i[u++]=d}var v=a[h];a[h]=a[c],a[c++]=v}return c},\\\"lo<p0&&p0<=hi\\\":function(t,e,r,n,i,a,o){for(var s=2*t,l=s*r,u=l,c=r,f=e,h=t+e,p=r;n>p;++p,l+=s){var d=i[l+f],v=i[l+h];if(d<o&&o<=v)if(c===p)c+=1,u+=s;else{for(var g=0;s>g;++g){var y=i[l+g];i[l+g]=i[u],i[u++]=y}var m=a[p];a[p]=a[c],a[c++]=m}}return c},\\\"lo<=p0&&p0<=hi\\\":function(t,e,r,n,i,a,o){for(var s=2*t,l=s*r,u=l,c=r,f=e,h=t+e,p=r;n>p;++p,l+=s){var d=i[l+f],v=i[l+h];if(d<=o&&o<=v)if(c===p)c+=1,u+=s;else{for(var g=0;s>g;++g){var y=i[l+g];i[l+g]=i[u],i[u++]=y}var m=a[p];a[p]=a[c],a[c++]=m}}return c},\\\"!(lo>=p0)&&!(p1>=hi)\\\":function(t,e,r,n,i,a,o,s){for(var l=2*t,u=l*r,c=u,f=r,h=e,p=t+e,d=r;n>d;++d,u+=l){var v=i[u+h],g=i[u+p];if(!(v>=o||s>=g))if(f===d)f+=1,c+=l;else{for(var y=0;l>y;++y){var m=i[u+y];i[u+y]=i[c],i[c++]=m}var x=a[d];a[d]=a[f],a[f++]=x}}return f}}},309:function(t){\\\"use strict\\\";t.exports=function(t,n){n<=4*e?r(0,n-1,t):u(0,n-1,t)};var e=32;function r(t,e,r){for(var n=2*(t+1),i=t+1;i<=e;++i){for(var a=r[n++],o=r[n++],s=i,l=n-2;s-- >t;){var u=r[l-2],c=r[l-1];if(u<a)break;if(u===a&&c<o)break;r[l]=u,r[l+1]=c,l-=2}r[l]=a,r[l+1]=o}}function n(t,e,r){e*=2;var n=r[t*=2],i=r[t+1];r[t]=r[e],r[t+1]=r[e+1],r[e]=n,r[e+1]=i}function i(t,e,r){e*=2,r[t*=2]=r[e],r[t+1]=r[e+1]}function a(t,e,r,n){e*=2,r*=2;var i=n[t*=2],a=n[t+1];n[t]=n[e],n[t+1]=n[e+1],n[e]=n[r],n[e+1]=n[r+1],n[r]=i,n[r+1]=a}function o(t,e,r,n,i){e*=2,i[t*=2]=i[e],i[e]=r,i[t+1]=i[e+1],i[e+1]=n}function s(t,e,r){e*=2;var n=r[t*=2],i=r[e];return!(n<i)&&(n!==i||r[t+1]>r[e+1])}function l(t,e,r,n){var i=n[t*=2];return i<e||i===e&&n[t+1]<r}function u(t,c,f){var h=(c-t+1)/6|0,p=t+h,d=c-h,v=t+c>>1,g=v-h,y=v+h,m=p,x=g,b=v,_=y,w=d,T=t+1,k=c-1,A=0;s(m,x,f)&&(A=m,m=x,x=A),s(_,w,f)&&(A=_,_=w,w=A),s(m,b,f)&&(A=m,m=b,b=A),s(x,b,f)&&(A=x,x=b,b=A),s(m,_,f)&&(A=m,m=_,_=A),s(b,_,f)&&(A=b,b=_,_=A),s(x,w,f)&&(A=x,x=w,w=A),s(x,b,f)&&(A=x,x=b,b=A),s(_,w,f)&&(A=_,_=w,w=A);for(var M=f[2*x],S=f[2*x+1],E=f[2*_],L=f[2*_+1],C=2*m,P=2*b,O=2*w,I=2*p,D=2*v,z=2*d,R=0;R<2;++R){var F=f[C+R],B=f[P+R],N=f[O+R];f[I+R]=F,f[D+R]=B,f[z+R]=N}i(g,t,f),i(y,c,f);for(var j=T;j<=k;++j)if(l(j,M,S,f))j!==T&&n(j,T,f),++T;else if(!l(j,E,L,f))for(;;){if(l(k,E,L,f)){l(k,M,S,f)?(a(j,T,k,f),++T,--k):(n(j,k,f),--k);break}if(--k<j)break}o(t,T-1,M,S,f),o(c,k+1,E,L,f),T-2-t<=e?r(t,T-2,f):u(t,T-2,f),c-(k+2)<=e?r(k+2,c,f):u(k+2,c,f),k-T<=e?r(T,k,f):u(T,k,f)}},1390:function(t,e,r){\\\"use strict\\\";t.exports={init:function(t){var e=i.nextPow2(t);l.length<e&&(n.free(l),l=n.mallocInt32(e)),u.length<e&&(n.free(u),u=n.mallocInt32(e)),c.length<e&&(n.free(c),c=n.mallocInt32(e)),f.length<e&&(n.free(f),f=n.mallocInt32(e)),h.length<e&&(n.free(h),h=n.mallocInt32(e)),p.length<e&&(n.free(p),p=n.mallocInt32(e));var r=8*e;d.length<r&&(n.free(d),d=n.mallocDouble(r))},sweepBipartite:function(t,e,r,n,i,s,h,p,y,m){for(var x=0,b=2*t,_=t-1,w=b-1,T=r;T<n;++T){var k=s[T],A=b*T;d[x++]=i[A+_],d[x++]=-(k+1),d[x++]=i[A+w],d[x++]=k}for(T=h;T<p;++T){k=m[T]+o;var M=b*T;d[x++]=y[M+_],d[x++]=-k,d[x++]=y[M+w],d[x++]=k}var S=x>>>1;a(d,S);var E=0,L=0;for(T=0;T<S;++T){var C=0|d[2*T+1];if(C>=o)v(c,f,L--,C=C-o|0);else if(C>=0)v(l,u,E--,C);else if(C<=-o){C=-C-o|0;for(var P=0;P<E;++P)if(void 0!==(O=e(l[P],C)))return O;g(c,f,L++,C)}else{for(C=-C-1|0,P=0;P<L;++P){var O;if(void 0!==(O=e(C,c[P])))return O}g(l,u,E++,C)}}},sweepComplete:function(t,e,r,n,i,o,s,y,m,x){for(var b=0,_=2*t,w=t-1,T=_-1,k=r;k<n;++k){var A=o[k]+1<<1,M=_*k;d[b++]=i[M+w],d[b++]=-A,d[b++]=i[M+T],d[b++]=A}for(k=s;k<y;++k){A=x[k]+1<<1;var S=_*k;d[b++]=m[S+w],d[b++]=1|-A,d[b++]=m[S+T],d[b++]=1|A}var E=b>>>1;a(d,E);var L=0,C=0,P=0;for(k=0;k<E;++k){var O=0|d[2*k+1],I=1&O;if(k<E-1&&O>>1==d[2*k+3]>>1&&(I=2,k+=1),O<0){for(var D=-(O>>1)-1,z=0;z<P;++z)if(void 0!==(R=e(h[z],D)))return R;if(0!==I)for(z=0;z<L;++z)if(void 0!==(R=e(l[z],D)))return R;if(1!==I)for(z=0;z<C;++z){var R;if(void 0!==(R=e(c[z],D)))return R}0===I?g(l,u,L++,D):1===I?g(c,f,C++,D):2===I&&g(h,p,P++,D)}else D=(O>>1)-1,0===I?v(l,u,L--,D):1===I?v(c,f,C--,D):2===I&&v(h,p,P--,D)}},scanBipartite:function(t,e,r,n,i,s,c,f,h,p,y,m){var x=0,b=2*t,_=e,w=e+t,T=1,k=1;n?k=o:T=o;for(var A=i;A<s;++A){var M=A+T,S=b*A;d[x++]=c[S+_],d[x++]=-M,d[x++]=c[S+w],d[x++]=M}for(A=h;A<p;++A){M=A+k;var E=b*A;d[x++]=y[E+_],d[x++]=-M}var L=x>>>1;a(d,L);var C=0;for(A=0;A<L;++A){var P=0|d[2*A+1];if(P<0){var O=!1;if((M=-P)>=o?(O=!n,M-=o):(O=!!n,M-=1),O)g(l,u,C++,M);else{var I=m[M],D=b*M,z=y[D+e+1],R=y[D+e+1+t];t:for(var F=0;F<C;++F){var B=l[F],N=b*B;if(!(R<c[N+e+1]||c[N+e+1+t]<z)){for(var j=e+2;j<t;++j)if(y[D+j+t]<c[N+j]||c[N+j+t]<y[D+j])continue t;var U,V=f[B];if(void 0!==(U=n?r(I,V):r(V,I)))return U}}}}else v(l,u,C--,P-T)}},scanComplete:function(t,e,r,n,i,s,u,c,f,h,p){for(var v=0,g=2*t,y=e,m=e+t,x=n;x<i;++x){var b=x+o,_=g*x;d[v++]=s[_+y],d[v++]=-b,d[v++]=s[_+m],d[v++]=b}for(x=c;x<f;++x){b=x+1;var w=g*x;d[v++]=h[w+y],d[v++]=-b}var T=v>>>1;a(d,T);var k=0;for(x=0;x<T;++x){var A=0|d[2*x+1];if(A<0)if((b=-A)>=o)l[k++]=b-o;else{var M=p[b-=1],S=g*b,E=h[S+e+1],L=h[S+e+1+t];t:for(var C=0;C<k;++C){var P=l[C],O=u[P];if(O===M)break;var I=g*P;if(!(L<s[I+e+1]||s[I+e+1+t]<E)){for(var D=e+2;D<t;++D)if(h[S+D+t]<s[I+D]||s[I+D+t]<h[S+D])continue t;var z=r(O,M);if(void 0!==z)return z}}}else{for(b=A-o,C=k-1;C>=0;--C)if(l[C]===b){for(D=C+1;D<k;++D)l[D-1]=l[D];break}--k}}}};var n=r(5306),i=r(2288),a=r(309),o=1<<28,s=1024,l=n.mallocInt32(s),u=n.mallocInt32(s),c=n.mallocInt32(s),f=n.mallocInt32(s),h=n.mallocInt32(s),p=n.mallocInt32(s),d=n.mallocDouble(8192);function v(t,e,r,n){var i=e[n],a=t[r-1];t[i]=a,e[a]=i}function g(t,e,r,n){t[r]=n,e[n]=r}},7761:function(t,e,r){\\\"use strict\\\";var n=r(9971),i=r(743),a=r(2161),o=r(7098);function s(t){return[Math.min(t[0],t[1]),Math.max(t[0],t[1])]}function l(t,e){return t[0]-e[0]||t[1]-e[1]}function u(t,e,r){return e in t?t[e]:r}t.exports=function(t,e,r){Array.isArray(e)?(r=r||{},e=e||[]):(r=e||{},e=[]);var c=!!u(r,\\\"delaunay\\\",!0),f=!!u(r,\\\"interior\\\",!0),h=!!u(r,\\\"exterior\\\",!0),p=!!u(r,\\\"infinity\\\",!1);if(!f&&!h||0===t.length)return[];var d=n(t,e);if(c||f!==h||p){for(var v=i(t.length,function(t){return t.map(s).sort(l)}(e)),g=0;g<d.length;++g){var y=d[g];v.addTriangle(y[0],y[1],y[2])}return c&&a(t,v),h?f?p?o(v,0,p):v.cells():o(v,1,p):o(v,-1)}return d}},2161:function(t,e,r){\\\"use strict\\\";var n=r(2227)[4];function i(t,e,r,i,a,o){var s=e.opposite(i,a);if(!(s<0)){if(a<i){var l=i;i=a,a=l,l=o,o=s,s=l}e.isConstraint(i,a)||n(t[i],t[a],t[o],t[s])<0&&r.push(i,a)}}r(5070),t.exports=function(t,e){for(var r=[],a=t.length,o=e.stars,s=0;s<a;++s)for(var l=o[s],u=1;u<l.length;u+=2)if(!((p=l[u])<s||e.isConstraint(s,p))){for(var c=l[u-1],f=-1,h=1;h<l.length;h+=2)if(l[h-1]===p){f=l[h];break}f<0||n(t[s],t[p],t[c],t[f])<0&&r.push(s,p)}for(;r.length>0;){for(var p=r.pop(),d=(c=-1,f=-1,l=o[s=r.pop()],1);d<l.length;d+=2){var v=l[d-1],g=l[d];v===p?f=g:g===p&&(c=v)}c<0||f<0||n(t[s],t[p],t[c],t[f])>=0||(e.flip(s,p),i(t,e,r,c,s,f),i(t,e,r,s,f,c),i(t,e,r,f,p,c),i(t,e,r,p,c,f))}}},7098:function(t,e,r){\\\"use strict\\\";var n,i=r(5070);function a(t,e,r,n,i,a,o){this.cells=t,this.neighbor=e,this.flags=n,this.constraint=r,this.active=i,this.next=a,this.boundary=o}function o(t,e){return t[0]-e[0]||t[1]-e[1]||t[2]-e[2]}t.exports=function(t,e,r){var n=function(t,e){for(var r=t.cells(),n=r.length,i=0;i<n;++i){var s=(y=r[i])[0],l=y[1],u=y[2];l<u?l<s&&(y[0]=l,y[1]=u,y[2]=s):u<s&&(y[0]=u,y[1]=s,y[2]=l)}r.sort(o);var c=new Array(n);for(i=0;i<c.length;++i)c[i]=0;var f=[],h=[],p=new Array(3*n),d=new Array(3*n),v=null;e&&(v=[]);var g=new a(r,p,d,c,f,h,v);for(i=0;i<n;++i)for(var y=r[i],m=0;m<3;++m){s=y[m],l=y[(m+1)%3];var x=p[3*i+m]=g.locate(l,s,t.opposite(l,s)),b=d[3*i+m]=t.isConstraint(s,l);x<0&&(b?h.push(i):(f.push(i),c[i]=1),e&&v.push([l,s,-1]))}return g}(t,r);if(0===e)return r?n.cells.concat(n.boundary):n.cells;for(var i=1,s=n.active,l=n.next,u=n.flags,c=n.cells,f=n.constraint,h=n.neighbor;s.length>0||l.length>0;){for(;s.length>0;){var p=s.pop();if(u[p]!==-i){u[p]=i,c[p];for(var d=0;d<3;++d){var v=h[3*p+d];v>=0&&0===u[v]&&(f[3*p+d]?l.push(v):(s.push(v),u[v]=i))}}}var g=l;l=s,s=g,l.length=0,i=-i}var y=function(t,e,r){for(var n=0,i=0;i<t.length;++i)e[i]===r&&(t[n++]=t[i]);return t.length=n,t}(c,u,e);return r?y.concat(n.boundary):y},a.prototype.locate=(n=[0,0,0],function(t,e,r){var a=t,s=e,l=r;return e<r?e<t&&(a=e,s=r,l=t):r<t&&(a=r,s=t,l=e),a<0?-1:(n[0]=a,n[1]=s,n[2]=l,i.eq(this.cells,n,o))})},9971:function(t,e,r){\\\"use strict\\\";var n=r(5070),i=r(417)[3];function a(t,e,r,n,i){this.a=t,this.b=e,this.idx=r,this.lowerIds=n,this.upperIds=i}function o(t,e,r,n){this.a=t,this.b=e,this.type=r,this.idx=n}function s(t,e){var r=t.a[0]-e.a[0]||t.a[1]-e.a[1]||t.type-e.type;return r||(0!==t.type&&(r=i(t.a,t.b,e.b))?r:t.idx-e.idx)}function l(t,e){return i(t.a,t.b,e)}function u(t,e,r,a,o){for(var s=n.lt(e,a,l),u=n.gt(e,a,l),c=s;c<u;++c){for(var f=e[c],h=f.lowerIds,p=h.length;p>1&&i(r[h[p-2]],r[h[p-1]],a)>0;)t.push([h[p-1],h[p-2],o]),p-=1;h.length=p,h.push(o);var d=f.upperIds;for(p=d.length;p>1&&i(r[d[p-2]],r[d[p-1]],a)<0;)t.push([d[p-2],d[p-1],o]),p-=1;d.length=p,d.push(o)}}function c(t,e){var r;return(r=t.a[0]<e.a[0]?i(t.a,t.b,e.a):i(e.b,e.a,t.a))?r:(r=e.b[0]<t.b[0]?i(t.a,t.b,e.b):i(e.b,e.a,t.b))||t.idx-e.idx}function f(t,e,r){var i=n.le(t,r,c),o=t[i],s=o.upperIds,l=s[s.length-1];o.upperIds=[l],t.splice(i+1,0,new a(r.a,r.b,r.idx,[l],s))}function h(t,e,r){var i=r.a;r.a=r.b,r.b=i;var a=n.eq(t,r,c),o=t[a];t[a-1].upperIds=o.upperIds,t.splice(a,1)}t.exports=function(t,e){for(var r=t.length,n=e.length,i=[],l=0;l<r;++l)i.push(new o(t[l],null,0,l));for(l=0;l<n;++l){var c=e[l],p=t[c[0]],d=t[c[1]];p[0]<d[0]?i.push(new o(p,d,2,l),new o(d,p,1,l)):p[0]>d[0]&&i.push(new o(d,p,2,l),new o(p,d,1,l))}i.sort(s);for(var v=i[0].a[0]-(1+Math.abs(i[0].a[0]))*Math.pow(2,-52),g=[new a([v,1],[v,0],-1,[],[],[],[])],y=[],m=(l=0,i.length);l<m;++l){var x=i[l],b=x.type;0===b?u(y,g,t,x.a,x.idx):2===b?f(g,0,x):h(g,0,x)}return y}},743:function(t,e,r){\\\"use strict\\\";var n=r(5070);function i(t,e){this.stars=t,this.edges=e}t.exports=function(t,e){for(var r=new Array(t),n=0;n<t;++n)r[n]=[];return new i(r,e)};var a=i.prototype;function o(t,e,r){for(var n=1,i=t.length;n<i;n+=2)if(t[n-1]===e&&t[n]===r)return t[n-1]=t[i-2],t[n]=t[i-1],void(t.length=i-2)}a.isConstraint=function(){var t=[0,0];function e(t,e){return t[0]-e[0]||t[1]-e[1]}return function(r,i){return t[0]=Math.min(r,i),t[1]=Math.max(r,i),n.eq(this.edges,t,e)>=0}}(),a.removeTriangle=function(t,e,r){var n=this.stars;o(n[t],e,r),o(n[e],r,t),o(n[r],t,e)},a.addTriangle=function(t,e,r){var n=this.stars;n[t].push(e,r),n[e].push(r,t),n[r].push(t,e)},a.opposite=function(t,e){for(var r=this.stars[e],n=1,i=r.length;n<i;n+=2)if(r[n]===t)return r[n-1];return-1},a.flip=function(t,e){var r=this.opposite(t,e),n=this.opposite(e,t);this.removeTriangle(t,e,r),this.removeTriangle(e,t,n),this.addTriangle(t,n,r),this.addTriangle(e,r,n)},a.edges=function(){for(var t=this.stars,e=[],r=0,n=t.length;r<n;++r)for(var i=t[r],a=0,o=i.length;a<o;a+=2)e.push([i[a],i[a+1]]);return e},a.cells=function(){for(var t=this.stars,e=[],r=0,n=t.length;r<n;++r)for(var i=t[r],a=0,o=i.length;a<o;a+=2){var s=i[a],l=i[a+1];r<Math.min(s,l)&&e.push([r,s,l])}return e}},9887:function(t){\\\"use strict\\\";t.exports=function(t){for(var e=1,r=1;r<t.length;++r)for(var n=0;n<r;++n)if(t[r]<t[n])e=-e;else if(t[n]===t[r])return 0;return e}},9243:function(t,e,r){\\\"use strict\\\";var n=r(3094),i=r(6606);function a(t,e){for(var r=0,n=t.length,i=0;i<n;++i)r+=t[i]*e[i];return r}function o(t){var e=t.length;if(0===e)return[];t[0].length;var r=n([t.length+1,t.length+1],1),o=n([t.length+1],1);r[e][e]=0;for(var s=0;s<e;++s){for(var l=0;l<=s;++l)r[l][s]=r[s][l]=2*a(t[s],t[l]);o[s]=a(t[s],t[s])}var u=i(r,o),c=0,f=u[e+1];for(s=0;s<f.length;++s)c+=f[s];var h=new Array(e);for(s=0;s<e;++s){f=u[s];var p=0;for(l=0;l<f.length;++l)p+=f[l];h[s]=p/c}return h}function s(t){if(0===t.length)return[];for(var e=t[0].length,r=n([e]),i=o(t),a=0;a<t.length;++a)for(var s=0;s<e;++s)r[s]+=t[a][s]*i[a];return r}s.barycenetric=o,t.exports=s},1778:function(t,e,r){t.exports=function(t){for(var e=n(t),r=0,i=0;i<t.length;++i)for(var a=t[i],o=0;o<e.length;++o)r+=Math.pow(a[o]-e[o],2);return Math.sqrt(r/t.length)};var n=r(9243)},197:function(t,e,r){\\\"use strict\\\";t.exports=function(t,e,r){var n;if(r){n=e;for(var i=new Array(e.length),a=0;a<e.length;++a){var o=e[a];i[a]=[o[0],o[1],r[a]]}e=i}for(var s=function(t,e,r){var n=d(t,[],p(t));return y(e,n,r),!!n}(t,e,!!r);m(t,e,!!r);)s=!0;if(r&&s)for(n.length=0,r.length=0,a=0;a<e.length;++a)o=e[a],n.push([o[0],o[1]]),r.push(o[2]);return s};var n=r(1731),i=r(2569),a=r(4434),o=r(5125),s=r(8846),l=r(7999),u=r(2826),c=r(8551),f=r(5528);function h(t){var e=l(t);return[c(e,-1/0),c(e,1/0)]}function p(t){for(var e=new Array(t.length),r=0;r<t.length;++r){var n=t[r];e[r]=[c(n[0],-1/0),c(n[1],-1/0),c(n[0],1/0),c(n[1],1/0)]}return e}function d(t,e,r){for(var a=e.length,o=new n(a),s=[],l=0;l<e.length;++l){var u=e[l],f=h(u[0]),p=h(u[1]);s.push([c(f[0],-1/0),c(p[0],-1/0),c(f[1],1/0),c(p[1],1/0)])}i(s,(function(t,e){o.link(t,e)}));var d=!0,v=new Array(a);for(l=0;l<a;++l)(y=o.find(l))!==l&&(d=!1,t[y]=[Math.min(t[l][0],t[y][0]),Math.min(t[l][1],t[y][1])]);if(d)return null;var g=0;for(l=0;l<a;++l){var y;(y=o.find(l))===l?(v[l]=g,t[g++]=t[l]):v[l]=-1}for(t.length=g,l=0;l<a;++l)v[l]<0&&(v[l]=v[o.find(l)]);return v}function v(t,e){return t[0]-e[0]||t[1]-e[1]}function g(t,e){return t[0]-e[0]||t[1]-e[1]||(t[2]<e[2]?-1:t[2]>e[2]?1:0)}function y(t,e,r){if(0!==t.length){if(e)for(var n=0;n<t.length;++n){var i=e[(o=t[n])[0]],a=e[o[1]];o[0]=Math.min(i,a),o[1]=Math.max(i,a)}else for(n=0;n<t.length;++n){var o;i=(o=t[n])[0],a=o[1],o[0]=Math.min(i,a),o[1]=Math.max(i,a)}r?t.sort(g):t.sort(v);var s=1;for(n=1;n<t.length;++n){var l=t[n-1],u=t[n];(u[0]!==l[0]||u[1]!==l[1]||r&&u[2]!==l[2])&&(t[s++]=u)}t.length=s}}function m(t,e,r){var n=function(t,e){for(var r=new Array(e.length),n=0;n<e.length;++n){var i=e[n],a=t[i[0]],o=t[i[1]];r[n]=[c(Math.min(a[0],o[0]),-1/0),c(Math.min(a[1],o[1]),-1/0),c(Math.max(a[0],o[0]),1/0),c(Math.max(a[1],o[1]),1/0)]}return r}(t,e),h=function(t,e,r){var n=[];return i(r,(function(r,i){var o=e[r],s=e[i];if(o[0]!==s[0]&&o[0]!==s[1]&&o[1]!==s[0]&&o[1]!==s[1]){var l=t[o[0]],u=t[o[1]],c=t[s[0]],f=t[s[1]];a(l,u,c,f)&&n.push([r,i])}})),n}(t,e,n),v=function(t,e,r,n){var o=[];return i(r,n,(function(r,n){var i=e[r];if(i[0]!==n&&i[1]!==n){var s=t[n],l=t[i[0]],u=t[i[1]];a(l,u,s,s)&&o.push([r,n])}})),o}(t,e,n,p(t)),g=function(t,e,r,n,i){var a,c,h=t.map((function(t){return[o(t[0]),o(t[1])]}));for(a=0;a<r.length;++a){var p=r[a];c=p[0];var d=p[1],v=e[c],g=e[d],y=f(u(t[v[0]]),u(t[v[1]]),u(t[g[0]]),u(t[g[1]]));if(y){var m=t.length;t.push([l(y[0]),l(y[1])]),h.push(y),n.push([c,m],[d,m])}}for(n.sort((function(t,e){if(t[0]!==e[0])return t[0]-e[0];var r=h[t[1]],n=h[e[1]];return s(r[0],n[0])||s(r[1],n[1])})),a=n.length-1;a>=0;--a){var x=e[c=(S=n[a])[0]],b=x[0],_=x[1],w=t[b],T=t[_];if((w[0]-T[0]||w[1]-T[1])<0){var k=b;b=_,_=k}x[0]=b;var A,M=x[1]=S[1];for(i&&(A=x[2]);a>0&&n[a-1][0]===c;){var S,E=(S=n[--a])[1];i?e.push([M,E,A]):e.push([M,E]),M=E}i?e.push([M,_,A]):e.push([M,_])}return h}(t,e,h,v,r),m=d(t,g);return y(e,m,r),!!m||h.length>0||v.length>0}},5528:function(t,e,r){\\\"use strict\\\";t.exports=function(t,e,r,n){var a=s(e,t),f=s(n,r),h=c(a,f);if(0===o(h))return null;var p=c(f,s(t,r)),d=i(p,h),v=u(a,d);return l(t,v)};var n=r(3962),i=r(9189),a=r(4354),o=r(4951),s=r(6695),l=r(7584),u=r(4469);function c(t,e){return a(n(t[0],e[1]),n(t[1],e[0]))}},5692:function(t){t.exports={jet:[{index:0,rgb:[0,0,131]},{index:.125,rgb:[0,60,170]},{index:.375,rgb:[5,255,255]},{index:.625,rgb:[255,255,0]},{index:.875,rgb:[250,0,0]},{index:1,rgb:[128,0,0]}],hsv:[{index:0,rgb:[255,0,0]},{index:.169,rgb:[253,255,2]},{index:.173,rgb:[247,255,2]},{index:.337,rgb:[0,252,4]},{index:.341,rgb:[0,252,10]},{index:.506,rgb:[1,249,255]},{index:.671,rgb:[2,0,253]},{index:.675,rgb:[8,0,253]},{index:.839,rgb:[255,0,251]},{index:.843,rgb:[255,0,245]},{index:1,rgb:[255,0,6]}],hot:[{index:0,rgb:[0,0,0]},{index:.3,rgb:[230,0,0]},{index:.6,rgb:[255,210,0]},{index:1,rgb:[255,255,255]}],spring:[{index:0,rgb:[255,0,255]},{index:1,rgb:[255,255,0]}],summer:[{index:0,rgb:[0,128,102]},{index:1,rgb:[255,255,102]}],autumn:[{index:0,rgb:[255,0,0]},{index:1,rgb:[255,255,0]}],winter:[{index:0,rgb:[0,0,255]},{index:1,rgb:[0,255,128]}],bone:[{index:0,rgb:[0,0,0]},{index:.376,rgb:[84,84,116]},{index:.753,rgb:[169,200,200]},{index:1,rgb:[255,255,255]}],copper:[{index:0,rgb:[0,0,0]},{index:.804,rgb:[255,160,102]},{index:1,rgb:[255,199,127]}],greys:[{index:0,rgb:[0,0,0]},{index:1,rgb:[255,255,255]}],yignbu:[{index:0,rgb:[8,29,88]},{index:.125,rgb:[37,52,148]},{index:.25,rgb:[34,94,168]},{index:.375,rgb:[29,145,192]},{index:.5,rgb:[65,182,196]},{index:.625,rgb:[127,205,187]},{index:.75,rgb:[199,233,180]},{index:.875,rgb:[237,248,217]},{index:1,rgb:[255,255,217]}],greens:[{index:0,rgb:[0,68,27]},{index:.125,rgb:[0,109,44]},{index:.25,rgb:[35,139,69]},{index:.375,rgb:[65,171,93]},{index:.5,rgb:[116,196,118]},{index:.625,rgb:[161,217,155]},{index:.75,rgb:[199,233,192]},{index:.875,rgb:[229,245,224]},{index:1,rgb:[247,252,245]}],yiorrd:[{index:0,rgb:[128,0,38]},{index:.125,rgb:[189,0,38]},{index:.25,rgb:[227,26,28]},{index:.375,rgb:[252,78,42]},{index:.5,rgb:[253,141,60]},{index:.625,rgb:[254,178,76]},{index:.75,rgb:[254,217,118]},{index:.875,rgb:[255,237,160]},{index:1,rgb:[255,255,204]}],bluered:[{index:0,rgb:[0,0,255]},{index:1,rgb:[255,0,0]}],rdbu:[{index:0,rgb:[5,10,172]},{index:.35,rgb:[106,137,247]},{index:.5,rgb:[190,190,190]},{index:.6,rgb:[220,170,132]},{index:.7,rgb:[230,145,90]},{index:1,rgb:[178,10,28]}],picnic:[{index:0,rgb:[0,0,255]},{index:.1,rgb:[51,153,255]},{index:.2,rgb:[102,204,255]},{index:.3,rgb:[153,204,255]},{index:.4,rgb:[204,204,255]},{index:.5,rgb:[255,255,255]},{index:.6,rgb:[255,204,255]},{index:.7,rgb:[255,153,255]},{index:.8,rgb:[255,102,204]},{index:.9,rgb:[255,102,102]},{index:1,rgb:[255,0,0]}],rainbow:[{index:0,rgb:[150,0,90]},{index:.125,rgb:[0,0,200]},{index:.25,rgb:[0,25,255]},{index:.375,rgb:[0,152,255]},{index:.5,rgb:[44,255,150]},{index:.625,rgb:[151,255,0]},{index:.75,rgb:[255,234,0]},{index:.875,rgb:[255,111,0]},{index:1,rgb:[255,0,0]}],portland:[{index:0,rgb:[12,51,131]},{index:.25,rgb:[10,136,186]},{index:.5,rgb:[242,211,56]},{index:.75,rgb:[242,143,56]},{index:1,rgb:[217,30,30]}],blackbody:[{index:0,rgb:[0,0,0]},{index:.2,rgb:[230,0,0]},{index:.4,rgb:[230,210,0]},{index:.7,rgb:[255,255,255]},{index:1,rgb:[160,200,255]}],earth:[{index:0,rgb:[0,0,130]},{index:.1,rgb:[0,180,180]},{index:.2,rgb:[40,210,40]},{index:.4,rgb:[230,230,50]},{index:.6,rgb:[120,70,20]},{index:1,rgb:[255,255,255]}],electric:[{index:0,rgb:[0,0,0]},{index:.15,rgb:[30,0,100]},{index:.4,rgb:[120,0,100]},{index:.6,rgb:[160,90,0]},{index:.8,rgb:[230,200,0]},{index:1,rgb:[255,250,220]}],alpha:[{index:0,rgb:[255,255,255,0]},{index:1,rgb:[255,255,255,1]}],viridis:[{index:0,rgb:[68,1,84]},{index:.13,rgb:[71,44,122]},{index:.25,rgb:[59,81,139]},{index:.38,rgb:[44,113,142]},{index:.5,rgb:[33,144,141]},{index:.63,rgb:[39,173,129]},{index:.75,rgb:[92,200,99]},{index:.88,rgb:[170,220,50]},{index:1,rgb:[253,231,37]}],inferno:[{index:0,rgb:[0,0,4]},{index:.13,rgb:[31,12,72]},{index:.25,rgb:[85,15,109]},{index:.38,rgb:[136,34,106]},{index:.5,rgb:[186,54,85]},{index:.63,rgb:[227,89,51]},{index:.75,rgb:[249,140,10]},{index:.88,rgb:[249,201,50]},{index:1,rgb:[252,255,164]}],magma:[{index:0,rgb:[0,0,4]},{index:.13,rgb:[28,16,68]},{index:.25,rgb:[79,18,123]},{index:.38,rgb:[129,37,129]},{index:.5,rgb:[181,54,122]},{index:.63,rgb:[229,80,100]},{index:.75,rgb:[251,135,97]},{index:.88,rgb:[254,194,135]},{index:1,rgb:[252,253,191]}],plasma:[{index:0,rgb:[13,8,135]},{index:.13,rgb:[75,3,161]},{index:.25,rgb:[125,3,168]},{index:.38,rgb:[168,34,150]},{index:.5,rgb:[203,70,121]},{index:.63,rgb:[229,107,93]},{index:.75,rgb:[248,148,65]},{index:.88,rgb:[253,195,40]},{index:1,rgb:[240,249,33]}],warm:[{index:0,rgb:[125,0,179]},{index:.13,rgb:[172,0,187]},{index:.25,rgb:[219,0,170]},{index:.38,rgb:[255,0,130]},{index:.5,rgb:[255,63,74]},{index:.63,rgb:[255,123,0]},{index:.75,rgb:[234,176,0]},{index:.88,rgb:[190,228,0]},{index:1,rgb:[147,255,0]}],cool:[{index:0,rgb:[125,0,179]},{index:.13,rgb:[116,0,218]},{index:.25,rgb:[98,74,237]},{index:.38,rgb:[68,146,231]},{index:.5,rgb:[0,204,197]},{index:.63,rgb:[0,247,146]},{index:.75,rgb:[0,255,88]},{index:.88,rgb:[40,255,8]},{index:1,rgb:[147,255,0]}],\\\"rainbow-soft\\\":[{index:0,rgb:[125,0,179]},{index:.1,rgb:[199,0,180]},{index:.2,rgb:[255,0,121]},{index:.3,rgb:[255,108,0]},{index:.4,rgb:[222,194,0]},{index:.5,rgb:[150,255,0]},{index:.6,rgb:[0,255,55]},{index:.7,rgb:[0,246,150]},{index:.8,rgb:[50,167,222]},{index:.9,rgb:[103,51,235]},{index:1,rgb:[124,0,186]}],bathymetry:[{index:0,rgb:[40,26,44]},{index:.13,rgb:[59,49,90]},{index:.25,rgb:[64,76,139]},{index:.38,rgb:[63,110,151]},{index:.5,rgb:[72,142,158]},{index:.63,rgb:[85,174,163]},{index:.75,rgb:[120,206,163]},{index:.88,rgb:[187,230,172]},{index:1,rgb:[253,254,204]}],cdom:[{index:0,rgb:[47,15,62]},{index:.13,rgb:[87,23,86]},{index:.25,rgb:[130,28,99]},{index:.38,rgb:[171,41,96]},{index:.5,rgb:[206,67,86]},{index:.63,rgb:[230,106,84]},{index:.75,rgb:[242,149,103]},{index:.88,rgb:[249,193,135]},{index:1,rgb:[254,237,176]}],chlorophyll:[{index:0,rgb:[18,36,20]},{index:.13,rgb:[25,63,41]},{index:.25,rgb:[24,91,59]},{index:.38,rgb:[13,119,72]},{index:.5,rgb:[18,148,80]},{index:.63,rgb:[80,173,89]},{index:.75,rgb:[132,196,122]},{index:.88,rgb:[175,221,162]},{index:1,rgb:[215,249,208]}],density:[{index:0,rgb:[54,14,36]},{index:.13,rgb:[89,23,80]},{index:.25,rgb:[110,45,132]},{index:.38,rgb:[120,77,178]},{index:.5,rgb:[120,113,213]},{index:.63,rgb:[115,151,228]},{index:.75,rgb:[134,185,227]},{index:.88,rgb:[177,214,227]},{index:1,rgb:[230,241,241]}],\\\"freesurface-blue\\\":[{index:0,rgb:[30,4,110]},{index:.13,rgb:[47,14,176]},{index:.25,rgb:[41,45,236]},{index:.38,rgb:[25,99,212]},{index:.5,rgb:[68,131,200]},{index:.63,rgb:[114,156,197]},{index:.75,rgb:[157,181,203]},{index:.88,rgb:[200,208,216]},{index:1,rgb:[241,237,236]}],\\\"freesurface-red\\\":[{index:0,rgb:[60,9,18]},{index:.13,rgb:[100,17,27]},{index:.25,rgb:[142,20,29]},{index:.38,rgb:[177,43,27]},{index:.5,rgb:[192,87,63]},{index:.63,rgb:[205,125,105]},{index:.75,rgb:[216,162,148]},{index:.88,rgb:[227,199,193]},{index:1,rgb:[241,237,236]}],oxygen:[{index:0,rgb:[64,5,5]},{index:.13,rgb:[106,6,15]},{index:.25,rgb:[144,26,7]},{index:.38,rgb:[168,64,3]},{index:.5,rgb:[188,100,4]},{index:.63,rgb:[206,136,11]},{index:.75,rgb:[220,174,25]},{index:.88,rgb:[231,215,44]},{index:1,rgb:[248,254,105]}],par:[{index:0,rgb:[51,20,24]},{index:.13,rgb:[90,32,35]},{index:.25,rgb:[129,44,34]},{index:.38,rgb:[159,68,25]},{index:.5,rgb:[182,99,19]},{index:.63,rgb:[199,134,22]},{index:.75,rgb:[212,171,35]},{index:.88,rgb:[221,210,54]},{index:1,rgb:[225,253,75]}],phase:[{index:0,rgb:[145,105,18]},{index:.13,rgb:[184,71,38]},{index:.25,rgb:[186,58,115]},{index:.38,rgb:[160,71,185]},{index:.5,rgb:[110,97,218]},{index:.63,rgb:[50,123,164]},{index:.75,rgb:[31,131,110]},{index:.88,rgb:[77,129,34]},{index:1,rgb:[145,105,18]}],salinity:[{index:0,rgb:[42,24,108]},{index:.13,rgb:[33,50,162]},{index:.25,rgb:[15,90,145]},{index:.38,rgb:[40,118,137]},{index:.5,rgb:[59,146,135]},{index:.63,rgb:[79,175,126]},{index:.75,rgb:[120,203,104]},{index:.88,rgb:[193,221,100]},{index:1,rgb:[253,239,154]}],temperature:[{index:0,rgb:[4,35,51]},{index:.13,rgb:[23,51,122]},{index:.25,rgb:[85,59,157]},{index:.38,rgb:[129,79,143]},{index:.5,rgb:[175,95,130]},{index:.63,rgb:[222,112,101]},{index:.75,rgb:[249,146,66]},{index:.88,rgb:[249,196,65]},{index:1,rgb:[232,250,91]}],turbidity:[{index:0,rgb:[34,31,27]},{index:.13,rgb:[65,50,41]},{index:.25,rgb:[98,69,52]},{index:.38,rgb:[131,89,57]},{index:.5,rgb:[161,112,59]},{index:.63,rgb:[185,140,66]},{index:.75,rgb:[202,174,88]},{index:.88,rgb:[216,209,126]},{index:1,rgb:[233,246,171]}],\\\"velocity-blue\\\":[{index:0,rgb:[17,32,64]},{index:.13,rgb:[35,52,116]},{index:.25,rgb:[29,81,156]},{index:.38,rgb:[31,113,162]},{index:.5,rgb:[50,144,169]},{index:.63,rgb:[87,173,176]},{index:.75,rgb:[149,196,189]},{index:.88,rgb:[203,221,211]},{index:1,rgb:[254,251,230]}],\\\"velocity-green\\\":[{index:0,rgb:[23,35,19]},{index:.13,rgb:[24,64,38]},{index:.25,rgb:[11,95,45]},{index:.38,rgb:[39,123,35]},{index:.5,rgb:[95,146,12]},{index:.63,rgb:[152,165,18]},{index:.75,rgb:[201,186,69]},{index:.88,rgb:[233,216,137]},{index:1,rgb:[255,253,205]}],cubehelix:[{index:0,rgb:[0,0,0]},{index:.07,rgb:[22,5,59]},{index:.13,rgb:[60,4,105]},{index:.2,rgb:[109,1,135]},{index:.27,rgb:[161,0,147]},{index:.33,rgb:[210,2,142]},{index:.4,rgb:[251,11,123]},{index:.47,rgb:[255,29,97]},{index:.53,rgb:[255,54,69]},{index:.6,rgb:[255,85,46]},{index:.67,rgb:[255,120,34]},{index:.73,rgb:[255,157,37]},{index:.8,rgb:[241,191,57]},{index:.87,rgb:[224,220,93]},{index:.93,rgb:[218,241,142]},{index:1,rgb:[227,253,198]}]}},9156:function(t,e,r){\\\"use strict\\\";var n=r(5692),i=r(3578);function a(t){return[t[0]/255,t[1]/255,t[2]/255,t[3]]}function o(t){for(var e,r=\\\"#\\\",n=0;n<3;++n)r+=(\\\"00\\\"+(e=(e=t[n]).toString(16))).substr(e.length);return r}function s(t){return\\\"rgba(\\\"+t.join(\\\",\\\")+\\\")\\\"}t.exports=function(t){var e,r,l,u,c,f,h,p,d,v;if(t||(t={}),p=(t.nshades||72)-1,h=t.format||\\\"hex\\\",(f=t.colormap)||(f=\\\"jet\\\"),\\\"string\\\"==typeof f){if(f=f.toLowerCase(),!n[f])throw Error(f+\\\" not a supported colorscale\\\");c=n[f]}else{if(!Array.isArray(f))throw Error(\\\"unsupported colormap option\\\",f);c=f.slice()}if(c.length>p+1)throw new Error(f+\\\" map requires nshades to be at least size \\\"+c.length);d=Array.isArray(t.alpha)?2!==t.alpha.length?[1,1]:t.alpha.slice():\\\"number\\\"==typeof t.alpha?[t.alpha,t.alpha]:[1,1],e=c.map((function(t){return Math.round(t.index*p)})),d[0]=Math.min(Math.max(d[0],0),1),d[1]=Math.min(Math.max(d[1],0),1);var g=c.map((function(t,e){var r=c[e].index,n=c[e].rgb.slice();return 4===n.length&&n[3]>=0&&n[3]<=1||(n[3]=d[0]+(d[1]-d[0])*r),n})),y=[];for(v=0;v<e.length-1;++v){u=e[v+1]-e[v],r=g[v],l=g[v+1];for(var m=0;m<u;m++){var x=m/u;y.push([Math.round(i(r[0],l[0],x)),Math.round(i(r[1],l[1],x)),Math.round(i(r[2],l[2],x)),i(r[3],l[3],x)])}}return y.push(c[c.length-1].rgb.concat(d[1])),\\\"hex\\\"===h?y=y.map(o):\\\"rgbaString\\\"===h?y=y.map(s):\\\"float\\\"===h&&(y=y.map(a)),y}},9398:function(t,e,r){\\\"use strict\\\";t.exports=function(t,e,r,a){var o=n(e,r,a);if(0===o){var s=i(n(t,e,r)),u=i(n(t,e,a));if(s===u){if(0===s){var c=l(t,e,r);return c===l(t,e,a)?0:c?1:-1}return 0}return 0===u?s>0||l(t,e,a)?-1:1:0===s?u>0||l(t,e,r)?1:-1:i(u-s)}var f=n(t,e,r);return f>0?o>0&&n(t,e,a)>0?1:-1:f<0?o>0||n(t,e,a)>0?1:-1:n(t,e,a)>0||l(t,e,r)?1:-1};var n=r(417),i=r(7538),a=r(87),o=r(2019),s=r(9662);function l(t,e,r){var n=a(t[0],-e[0]),i=a(t[1],-e[1]),l=a(r[0],-e[0]),u=a(r[1],-e[1]),c=s(o(n,l),o(i,u));return c[c.length-1]>=0}},7538:function(t){\\\"use strict\\\";t.exports=function(t){return t<0?-1:t>0?1:0}},9209:function(t){t.exports=function(t,n){var i=t.length,a=t.length-n.length;if(a)return a;switch(i){case 0:return 0;case 1:return t[0]-n[0];case 2:return t[0]+t[1]-n[0]-n[1]||e(t[0],t[1])-e(n[0],n[1]);case 3:var o=t[0]+t[1],s=n[0]+n[1];if(a=o+t[2]-(s+n[2]))return a;var l=e(t[0],t[1]),u=e(n[0],n[1]);return e(l,t[2])-e(u,n[2])||e(l+t[2],o)-e(u+n[2],s);case 4:var c=t[0],f=t[1],h=t[2],p=t[3],d=n[0],v=n[1],g=n[2],y=n[3];return c+f+h+p-(d+v+g+y)||e(c,f,h,p)-e(d,v,g,y,d)||e(c+f,c+h,c+p,f+h,f+p,h+p)-e(d+v,d+g,d+y,v+g,v+y,g+y)||e(c+f+h,c+f+p,c+h+p,f+h+p)-e(d+v+g,d+v+y,d+g+y,v+g+y);default:for(var m=t.slice().sort(r),x=n.slice().sort(r),b=0;b<i;++b)if(a=m[b]-x[b])return a;return 0}};var e=Math.min;function r(t,e){return t-e}},1284:function(t,e,r){\\\"use strict\\\";var n=r(9209),i=r(9887);t.exports=function(t,e){return n(t,e)||i(t)-i(e)}},5537:function(t,e,r){\\\"use strict\\\";var n=r(8950),i=r(8722),a=r(3332);t.exports=function(t){var e=t.length;if(0===e)return[];if(1===e)return[[0]];var r=t[0].length;return 0===r?[]:1===r?n(t):2===r?i(t):a(t,r)}},8950:function(t){\\\"use strict\\\";t.exports=function(t){for(var e=0,r=0,n=1;n<t.length;++n)t[n][0]<t[e][0]&&(e=n),t[n][0]>t[r][0]&&(r=n);return e<r?[[e],[r]]:e>r?[[r],[e]]:[[e]]}},8722:function(t,e,r){\\\"use strict\\\";t.exports=function(t){var e=n(t),r=e.length;if(r<=2)return[];for(var i=new Array(r),a=e[r-1],o=0;o<r;++o){var s=e[o];i[o]=[a,s],a=s}return i};var n=r(3266)},3332:function(t,e,r){\\\"use strict\\\";t.exports=function(t,e){try{return n(t,!0)}catch(o){var r=i(t);if(r.length<=e)return[];var a=function(t,e){for(var r=t.length,n=new Array(r),i=0;i<e.length;++i)n[i]=t[e[i]];var a=e.length;for(i=0;i<r;++i)e.indexOf(i)<0&&(n[a++]=t[i]);return n}(t,r);return function(t,e){for(var r=t.length,n=e.length,i=0;i<r;++i)for(var a=t[i],o=0;o<a.length;++o){var s=a[o];if(s<n)a[o]=e[s];else{s-=n;for(var l=0;l<n;++l)s>=e[l]&&(s+=1);a[o]=s}}return t}(n(a,!0),r)}};var n=r(2183),i=r(2153)},9680:function(t){\\\"use strict\\\";t.exports=function(t,e,r,n,i,a){var o=i-1,s=i*i,l=o*o,u=(1+2*i)*l,c=i*l,f=s*(3-2*i),h=s*o;if(t.length){a||(a=new Array(t.length));for(var p=t.length-1;p>=0;--p)a[p]=u*t[p]+c*e[p]+f*r[p]+h*n[p];return a}return u*t+c*e+f*r+h*n},t.exports.derivative=function(t,e,r,n,i,a){var o=6*i*i-6*i,s=3*i*i-4*i+1,l=-6*i*i+6*i,u=3*i*i-2*i;if(t.length){a||(a=new Array(t.length));for(var c=t.length-1;c>=0;--c)a[c]=o*t[c]+s*e[c]+l*r[c]+u*n[c];return a}return o*t+s*e+l*r[c]+u*n}},4419:function(t,e,r){\\\"use strict\\\";var n=r(2183),i=r(1215);function a(t,e){this.point=t,this.index=e}function o(t,e){for(var r=t.point,n=e.point,i=r.length,a=0;a<i;++a){var o=n[a]-r[a];if(o)return o}return 0}t.exports=function(t,e){var r=t.length;if(0===r)return[];var s=t[0].length;if(s<1)return[];if(1===s)return function(t,e,r){if(1===t)return r?[[-1,0]]:[];var n=e.map((function(t,e){return[t[0],e]}));n.sort((function(t,e){return t[0]-e[0]}));for(var i=new Array(t-1),a=1;a<t;++a){var o=n[a-1],s=n[a];i[a-1]=[o[1],s[1]]}return r&&i.push([-1,i[0][1]],[i[t-1][1],-1]),i}(r,t,e);for(var l=new Array(r),u=1,c=0;c<r;++c){for(var f=t[c],h=new Array(s+1),p=0,d=0;d<s;++d){var v=f[d];h[d]=v,p+=v*v}h[s]=p,l[c]=new a(h,c),u=Math.max(p,u)}i(l,o),r=l.length;var g=new Array(r+s+1),y=new Array(r+s+1),m=(s+1)*(s+1)*u,x=new Array(s+1);for(c=0;c<=s;++c)x[c]=0;for(x[s]=m,g[0]=x.slice(),y[0]=-1,c=0;c<=s;++c)(h=x.slice())[c]=1,g[c+1]=h,y[c+1]=-1;for(c=0;c<r;++c){var b=l[c];g[c+s+1]=b.point,y[c+s+1]=b.index}var _=n(g,!1);if(_=e?_.filter((function(t){for(var e=0,r=0;r<=s;++r){var n=y[t[r]];if(n<0&&++e>=2)return!1;t[r]=n}return!0})):_.filter((function(t){for(var e=0;e<=s;++e){var r=y[t[e]];if(r<0)return!1;t[e]=r}return!0})),1&s)for(c=0;c<_.length;++c)h=(b=_[c])[0],b[0]=b[1],b[1]=h;return _}},8362:function(t){var e=!1;if(\\\"undefined\\\"!=typeof Float64Array){var r=new Float64Array(1),n=new Uint32Array(r.buffer);r[0]=1,e=!0,1072693248===n[1]?(t.exports=function(t){return r[0]=t,[n[0],n[1]]},t.exports.pack=function(t,e){return n[0]=t,n[1]=e,r[0]},t.exports.lo=function(t){return r[0]=t,n[0]},t.exports.hi=function(t){return r[0]=t,n[1]}):1072693248===n[0]?(t.exports=function(t){return r[0]=t,[n[1],n[0]]},t.exports.pack=function(t,e){return n[1]=t,n[0]=e,r[0]},t.exports.lo=function(t){return r[0]=t,n[1]},t.exports.hi=function(t){return r[0]=t,n[0]}):e=!1}if(!e){var i=new Buffer(8);t.exports=function(t){return i.writeDoubleLE(t,0,!0),[i.readUInt32LE(0,!0),i.readUInt32LE(4,!0)]},t.exports.pack=function(t,e){return i.writeUInt32LE(t,0,!0),i.writeUInt32LE(e,4,!0),i.readDoubleLE(0,!0)},t.exports.lo=function(t){return i.writeDoubleLE(t,0,!0),i.readUInt32LE(0,!0)},t.exports.hi=function(t){return i.writeDoubleLE(t,0,!0),i.readUInt32LE(4,!0)}}t.exports.sign=function(e){return t.exports.hi(e)>>>31},t.exports.exponent=function(e){return(t.exports.hi(e)<<1>>>21)-1023},t.exports.fraction=function(e){var r=t.exports.lo(e),n=t.exports.hi(e),i=1048575&n;return 2146435072&n&&(i+=1<<20),[r,i]},t.exports.denormalized=function(e){return!(2146435072&t.exports.hi(e))}},3094:function(t){\\\"use strict\\\";function e(t,r,n){var i=0|t[n];if(i<=0)return[];var a,o=new Array(i);if(n===t.length-1)for(a=0;a<i;++a)o[a]=r;else for(a=0;a<i;++a)o[a]=e(t,r,n+1);return o}t.exports=function(t,r){switch(void 0===r&&(r=0),typeof t){case\\\"number\\\":if(t>0)return function(t,e){var r,n;for(r=new Array(t),n=0;n<t;++n)r[n]=e;return r}(0|t,r);break;case\\\"object\\\":if(\\\"number\\\"==typeof t.length)return e(t,r,0)}return[]}},8348:function(t,e,r){\\\"use strict\\\";t.exports=function(t,e){var r=t.length;if(\\\"number\\\"!=typeof e){e=0;for(var i=0;i<r;++i){var a=t[i];e=Math.max(e,a[0],a[1])}e=1+(0|e)}e|=0;var o=new Array(e);for(i=0;i<e;++i)o[i]=[];for(i=0;i<r;++i)o[(a=t[i])[0]].push(a[1]),o[a[1]].push(a[0]);for(var s=0;s<e;++s)n(o[s],(function(t,e){return t-e}));return o};var n=r(1215)},5795:function(t){\\\"use strict\\\";t.exports=function(t,e,r){var n=e||0,i=r||1;return[[t[12]+t[0],t[13]+t[1],t[14]+t[2],t[15]+t[3]],[t[12]-t[0],t[13]-t[1],t[14]-t[2],t[15]-t[3]],[t[12]+t[4],t[13]+t[5],t[14]+t[6],t[15]+t[7]],[t[12]-t[4],t[13]-t[5],t[14]-t[6],t[15]-t[7]],[n*t[12]+t[8],n*t[13]+t[9],n*t[14]+t[10],n*t[15]+t[11]],[i*t[12]-t[8],i*t[13]-t[9],i*t[14]-t[10],i*t[15]-t[11]]]}},8444:function(t,e,r){\\\"use strict\\\";t.exports=function(t,e,r){switch(arguments.length){case 0:return new o([0],[0],0);case 1:return\\\"number\\\"==typeof t?new o(n=l(t),n,0):new o(t,l(t.length),0);case 2:var n;if(\\\"number\\\"==typeof e)return new o(t,n=l(t.length),+e);r=0;case 3:if(t.length!==e.length)throw new Error(\\\"state and velocity lengths must match\\\");return new o(t,e,r)}};var n=r(9680),i=r(5070);function a(t,e,r){return Math.min(e,Math.max(t,r))}function o(t,e,r){this.dimension=t.length,this.bounds=[new Array(this.dimension),new Array(this.dimension)];for(var n=0;n<this.dimension;++n)this.bounds[0][n]=-1/0,this.bounds[1][n]=1/0;this._state=t.slice().reverse(),this._velocity=e.slice().reverse(),this._time=[r],this._scratch=[t.slice(),t.slice(),t.slice(),t.slice(),t.slice()]}var s=o.prototype;function l(t){for(var e=new Array(t),r=0;r<t;++r)e[r]=0;return e}s.flush=function(t){var e=i.gt(this._time,t)-1;e<=0||(this._time.splice(0,e),this._state.splice(0,e*this.dimension),this._velocity.splice(0,e*this.dimension))},s.curve=function(t){var e=this._time,r=e.length,o=i.le(e,t),s=this._scratch[0],l=this._state,u=this._velocity,c=this.dimension,f=this.bounds;if(o<0)for(var h=c-1,p=0;p<c;++p,--h)s[p]=l[h];else if(o>=r-1){h=l.length-1;var d=t-e[r-1];for(p=0;p<c;++p,--h)s[p]=l[h]+d*u[h]}else{h=c*(o+1)-1;var v=e[o],g=e[o+1]-v||1,y=this._scratch[1],m=this._scratch[2],x=this._scratch[3],b=this._scratch[4],_=!0;for(p=0;p<c;++p,--h)y[p]=l[h],x[p]=u[h]*g,m[p]=l[h+c],b[p]=u[h+c]*g,_=_&&y[p]===m[p]&&x[p]===b[p]&&0===x[p];if(_)for(p=0;p<c;++p)s[p]=y[p];else n(y,x,m,b,(t-v)/g,s)}var w=f[0],T=f[1];for(p=0;p<c;++p)s[p]=a(w[p],T[p],s[p]);return s},s.dcurve=function(t){var e=this._time,r=e.length,a=i.le(e,t),o=this._scratch[0],s=this._state,l=this._velocity,u=this.dimension;if(a>=r-1)for(var c=s.length-1,f=(e[r-1],0);f<u;++f,--c)o[f]=l[c];else{c=u*(a+1)-1;var h=e[a],p=e[a+1]-h||1,d=this._scratch[1],v=this._scratch[2],g=this._scratch[3],y=this._scratch[4],m=!0;for(f=0;f<u;++f,--c)d[f]=s[c],g[f]=l[c]*p,v[f]=s[c+u],y[f]=l[c+u]*p,m=m&&d[f]===v[f]&&g[f]===y[f]&&0===g[f];if(m)for(f=0;f<u;++f)o[f]=0;else for(n.derivative(d,g,v,y,(t-h)/p,o),f=0;f<u;++f)o[f]/=p}return o},s.lastT=function(){var t=this._time;return t[t.length-1]},s.stable=function(){for(var t=this._velocity,e=t.length,r=this.dimension-1;r>=0;--r)if(t[--e])return!1;return!0},s.jump=function(t){var e=this.lastT(),r=this.dimension;if(!(t<e||arguments.length!==r+1)){var n=this._state,i=this._velocity,o=n.length-this.dimension,s=this.bounds,l=s[0],u=s[1];this._time.push(e,t);for(var c=0;c<2;++c)for(var f=0;f<r;++f)n.push(n[o++]),i.push(0);for(this._time.push(t),f=r;f>0;--f)n.push(a(l[f-1],u[f-1],arguments[f])),i.push(0)}},s.push=function(t){var e=this.lastT(),r=this.dimension;if(!(t<e||arguments.length!==r+1)){var n=this._state,i=this._velocity,o=n.length-this.dimension,s=t-e,l=this.bounds,u=l[0],c=l[1],f=s>1e-6?1/s:0;this._time.push(t);for(var h=r;h>0;--h){var p=a(u[h-1],c[h-1],arguments[h]);n.push(p),i.push((p-n[o++])*f)}}},s.set=function(t){var e=this.dimension;if(!(t<this.lastT()||arguments.length!==e+1)){var r=this._state,n=this._velocity,i=this.bounds,o=i[0],s=i[1];this._time.push(t);for(var l=e;l>0;--l)r.push(a(o[l-1],s[l-1],arguments[l])),n.push(0)}},s.move=function(t){var e=this.lastT(),r=this.dimension;if(!(t<=e||arguments.length!==r+1)){var n=this._state,i=this._velocity,o=n.length-this.dimension,s=this.bounds,l=s[0],u=s[1],c=t-e,f=c>1e-6?1/c:0;this._time.push(t);for(var h=r;h>0;--h){var p=arguments[h];n.push(a(l[h-1],u[h-1],n[o++]+p)),i.push(p*f)}}},s.idle=function(t){var e=this.lastT();if(!(t<e)){var r=this.dimension,n=this._state,i=this._velocity,o=n.length-r,s=this.bounds,l=s[0],u=s[1],c=t-e;this._time.push(t);for(var f=r-1;f>=0;--f)n.push(a(l[f],u[f],n[o]+c*i[o])),i.push(0),o+=1}}},7080:function(t){\\\"use strict\\\";function e(t,e,r,n,i,a){this._color=t,this.key=e,this.value=r,this.left=n,this.right=i,this._count=a}function r(t){return new e(t._color,t.key,t.value,t.left,t.right,t._count)}function n(t,r){return new e(t,r.key,r.value,r.left,r.right,r._count)}function i(t){t._count=1+(t.left?t.left._count:0)+(t.right?t.right._count:0)}function a(t,e){this._compare=t,this.root=e}t.exports=function(t){return new a(t||p,null)};var o=a.prototype;function s(t,e){var r;return e.left&&(r=s(t,e.left))?r:(r=t(e.key,e.value))||(e.right?s(t,e.right):void 0)}function l(t,e,r,n){if(e(t,n.key)<=0){var i;if(n.left&&(i=l(t,e,r,n.left)))return i;if(i=r(n.key,n.value))return i}if(n.right)return l(t,e,r,n.right)}function u(t,e,r,n,i){var a,o=r(t,i.key),s=r(e,i.key);if(o<=0){if(i.left&&(a=u(t,e,r,n,i.left)))return a;if(s>0&&(a=n(i.key,i.value)))return a}if(s>0&&i.right)return u(t,e,r,n,i.right)}function c(t,e){this.tree=t,this._stack=e}Object.defineProperty(o,\\\"keys\\\",{get:function(){var t=[];return this.forEach((function(e,r){t.push(e)})),t}}),Object.defineProperty(o,\\\"values\\\",{get:function(){var t=[];return this.forEach((function(e,r){t.push(r)})),t}}),Object.defineProperty(o,\\\"length\\\",{get:function(){return this.root?this.root._count:0}}),o.insert=function(t,r){for(var o=this._compare,s=this.root,l=[],u=[];s;){var c=o(t,s.key);l.push(s),u.push(c),s=c<=0?s.left:s.right}l.push(new e(0,t,r,null,null,1));for(var f=l.length-2;f>=0;--f)s=l[f],u[f]<=0?l[f]=new e(s._color,s.key,s.value,l[f+1],s.right,s._count+1):l[f]=new e(s._color,s.key,s.value,s.left,l[f+1],s._count+1);for(f=l.length-1;f>1;--f){var h=l[f-1];if(s=l[f],1===h._color||1===s._color)break;var p=l[f-2];if(p.left===h)if(h.left===s){if(!(d=p.right)||0!==d._color){p._color=0,p.left=h.right,h._color=1,h.right=p,l[f-2]=h,l[f-1]=s,i(p),i(h),f>=3&&((v=l[f-3]).left===p?v.left=h:v.right=h);break}h._color=1,p.right=n(1,d),p._color=0,f-=1}else{if(!(d=p.right)||0!==d._color){h.right=s.left,p._color=0,p.left=s.right,s._color=1,s.left=h,s.right=p,l[f-2]=s,l[f-1]=h,i(p),i(h),i(s),f>=3&&((v=l[f-3]).left===p?v.left=s:v.right=s);break}h._color=1,p.right=n(1,d),p._color=0,f-=1}else if(h.right===s){if(!(d=p.left)||0!==d._color){p._color=0,p.right=h.left,h._color=1,h.left=p,l[f-2]=h,l[f-1]=s,i(p),i(h),f>=3&&((v=l[f-3]).right===p?v.right=h:v.left=h);break}h._color=1,p.left=n(1,d),p._color=0,f-=1}else{var d;if(!(d=p.left)||0!==d._color){var v;h.left=s.right,p._color=0,p.right=s.left,s._color=1,s.right=h,s.left=p,l[f-2]=s,l[f-1]=h,i(p),i(h),i(s),f>=3&&((v=l[f-3]).right===p?v.right=s:v.left=s);break}h._color=1,p.left=n(1,d),p._color=0,f-=1}}return l[0]._color=1,new a(o,l[0])},o.forEach=function(t,e,r){if(this.root)switch(arguments.length){case 1:return s(t,this.root);case 2:return l(e,this._compare,t,this.root);case 3:if(this._compare(e,r)>=0)return;return u(e,r,this._compare,t,this.root)}},Object.defineProperty(o,\\\"begin\\\",{get:function(){for(var t=[],e=this.root;e;)t.push(e),e=e.left;return new c(this,t)}}),Object.defineProperty(o,\\\"end\\\",{get:function(){for(var t=[],e=this.root;e;)t.push(e),e=e.right;return new c(this,t)}}),o.at=function(t){if(t<0)return new c(this,[]);for(var e=this.root,r=[];;){if(r.push(e),e.left){if(t<e.left._count){e=e.left;continue}t-=e.left._count}if(!t)return new c(this,r);if(t-=1,!e.right)break;if(t>=e.right._count)break;e=e.right}return new c(this,[])},o.ge=function(t){for(var e=this._compare,r=this.root,n=[],i=0;r;){var a=e(t,r.key);n.push(r),a<=0&&(i=n.length),r=a<=0?r.left:r.right}return n.length=i,new c(this,n)},o.gt=function(t){for(var e=this._compare,r=this.root,n=[],i=0;r;){var a=e(t,r.key);n.push(r),a<0&&(i=n.length),r=a<0?r.left:r.right}return n.length=i,new c(this,n)},o.lt=function(t){for(var e=this._compare,r=this.root,n=[],i=0;r;){var a=e(t,r.key);n.push(r),a>0&&(i=n.length),r=a<=0?r.left:r.right}return n.length=i,new c(this,n)},o.le=function(t){for(var e=this._compare,r=this.root,n=[],i=0;r;){var a=e(t,r.key);n.push(r),a>=0&&(i=n.length),r=a<0?r.left:r.right}return n.length=i,new c(this,n)},o.find=function(t){for(var e=this._compare,r=this.root,n=[];r;){var i=e(t,r.key);if(n.push(r),0===i)return new c(this,n);r=i<=0?r.left:r.right}return new c(this,[])},o.remove=function(t){var e=this.find(t);return e?e.remove():this},o.get=function(t){for(var e=this._compare,r=this.root;r;){var n=e(t,r.key);if(0===n)return r.value;r=n<=0?r.left:r.right}};var f=c.prototype;function h(t,e){t.key=e.key,t.value=e.value,t.left=e.left,t.right=e.right,t._color=e._color,t._count=e._count}function p(t,e){return t<e?-1:t>e?1:0}Object.defineProperty(f,\\\"valid\\\",{get:function(){return this._stack.length>0}}),Object.defineProperty(f,\\\"node\\\",{get:function(){return this._stack.length>0?this._stack[this._stack.length-1]:null},enumerable:!0}),f.clone=function(){return new c(this.tree,this._stack.slice())},f.remove=function(){var t=this._stack;if(0===t.length)return this.tree;var o=new Array(t.length),s=t[t.length-1];o[o.length-1]=new e(s._color,s.key,s.value,s.left,s.right,s._count);for(var l=t.length-2;l>=0;--l)(s=t[l]).left===t[l+1]?o[l]=new e(s._color,s.key,s.value,o[l+1],s.right,s._count):o[l]=new e(s._color,s.key,s.value,s.left,o[l+1],s._count);if((s=o[o.length-1]).left&&s.right){var u=o.length;for(s=s.left;s.right;)o.push(s),s=s.right;var c=o[u-1];for(o.push(new e(s._color,c.key,c.value,s.left,s.right,s._count)),o[u-1].key=s.key,o[u-1].value=s.value,l=o.length-2;l>=u;--l)s=o[l],o[l]=new e(s._color,s.key,s.value,s.left,o[l+1],s._count);o[u-1].left=o[u]}if(0===(s=o[o.length-1])._color){var f=o[o.length-2];for(f.left===s?f.left=null:f.right===s&&(f.right=null),o.pop(),l=0;l<o.length;++l)o[l]._count--;return new a(this.tree._compare,o[0])}if(s.left||s.right){for(s.left?h(s,s.left):s.right&&h(s,s.right),s._color=1,l=0;l<o.length-1;++l)o[l]._count--;return new a(this.tree._compare,o[0])}if(1===o.length)return new a(this.tree._compare,null);for(l=0;l<o.length;++l)o[l]._count--;var p=o[o.length-2];return function(t){for(var e,a,o,s,l=t.length-1;l>=0;--l){if(e=t[l],0===l)return void(e._color=1);if((a=t[l-1]).left===e){if((o=a.right).right&&0===o.right._color)return s=(o=a.right=r(o)).right=r(o.right),a.right=o.left,o.left=a,o.right=s,o._color=a._color,e._color=1,a._color=1,s._color=1,i(a),i(o),l>1&&((u=t[l-2]).left===a?u.left=o:u.right=o),void(t[l-1]=o);if(o.left&&0===o.left._color)return s=(o=a.right=r(o)).left=r(o.left),a.right=s.left,o.left=s.right,s.left=a,s.right=o,s._color=a._color,a._color=1,o._color=1,e._color=1,i(a),i(o),i(s),l>1&&((u=t[l-2]).left===a?u.left=s:u.right=s),void(t[l-1]=s);if(1===o._color){if(0===a._color)return a._color=1,void(a.right=n(0,o));a.right=n(0,o);continue}o=r(o),a.right=o.left,o.left=a,o._color=a._color,a._color=0,i(a),i(o),l>1&&((u=t[l-2]).left===a?u.left=o:u.right=o),t[l-1]=o,t[l]=a,l+1<t.length?t[l+1]=e:t.push(e),l+=2}else{if((o=a.left).left&&0===o.left._color)return s=(o=a.left=r(o)).left=r(o.left),a.left=o.right,o.right=a,o.left=s,o._color=a._color,e._color=1,a._color=1,s._color=1,i(a),i(o),l>1&&((u=t[l-2]).right===a?u.right=o:u.left=o),void(t[l-1]=o);if(o.right&&0===o.right._color)return s=(o=a.left=r(o)).right=r(o.right),a.left=s.right,o.right=s.left,s.right=a,s.left=o,s._color=a._color,a._color=1,o._color=1,e._color=1,i(a),i(o),i(s),l>1&&((u=t[l-2]).right===a?u.right=s:u.left=s),void(t[l-1]=s);if(1===o._color){if(0===a._color)return a._color=1,void(a.left=n(0,o));a.left=n(0,o);continue}var u;o=r(o),a.left=o.right,o.right=a,o._color=a._color,a._color=0,i(a),i(o),l>1&&((u=t[l-2]).right===a?u.right=o:u.left=o),t[l-1]=o,t[l]=a,l+1<t.length?t[l+1]=e:t.push(e),l+=2}}}(o),p.left===s?p.left=null:p.right=null,new a(this.tree._compare,o[0])},Object.defineProperty(f,\\\"key\\\",{get:function(){if(this._stack.length>0)return this._stack[this._stack.length-1].key},enumerable:!0}),Object.defineProperty(f,\\\"value\\\",{get:function(){if(this._stack.length>0)return this._stack[this._stack.length-1].value},enumerable:!0}),Object.defineProperty(f,\\\"index\\\",{get:function(){var t=0,e=this._stack;if(0===e.length){var r=this.tree.root;return r?r._count:0}e[e.length-1].left&&(t=e[e.length-1].left._count);for(var n=e.length-2;n>=0;--n)e[n+1]===e[n].right&&(++t,e[n].left&&(t+=e[n].left._count));return t},enumerable:!0}),f.next=function(){var t=this._stack;if(0!==t.length){var e=t[t.length-1];if(e.right)for(e=e.right;e;)t.push(e),e=e.left;else for(t.pop();t.length>0&&t[t.length-1].right===e;)e=t[t.length-1],t.pop()}},Object.defineProperty(f,\\\"hasNext\\\",{get:function(){var t=this._stack;if(0===t.length)return!1;if(t[t.length-1].right)return!0;for(var e=t.length-1;e>0;--e)if(t[e-1].left===t[e])return!0;return!1}}),f.update=function(t){var r=this._stack;if(0===r.length)throw new Error(\\\"Can't update empty node!\\\");var n=new Array(r.length),i=r[r.length-1];n[n.length-1]=new e(i._color,i.key,t,i.left,i.right,i._count);for(var o=r.length-2;o>=0;--o)(i=r[o]).left===r[o+1]?n[o]=new e(i._color,i.key,i.value,n[o+1],i.right,i._count):n[o]=new e(i._color,i.key,i.value,i.left,n[o+1],i._count);return new a(this.tree._compare,n[0])},f.prev=function(){var t=this._stack;if(0!==t.length){var e=t[t.length-1];if(e.left)for(e=e.left;e;)t.push(e),e=e.right;else for(t.pop();t.length>0&&t[t.length-1].left===e;)e=t[t.length-1],t.pop()}},Object.defineProperty(f,\\\"hasPrev\\\",{get:function(){var t=this._stack;if(0===t.length)return!1;if(t[t.length-1].left)return!0;for(var e=t.length-1;e>0;--e)if(t[e-1].right===t[e])return!0;return!1}})},7453:function(t,e,r){\\\"use strict\\\";t.exports=function(t,e){var r=new c(t);return r.update(e),r};var n=r(9557),i=r(1681),a=r(1011),o=r(2864),s=r(8468),l=new Float32Array([1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1]);function u(t,e){return t[0]=e[0],t[1]=e[1],t[2]=e[2],t}function c(t){this.gl=t,this.pixelRatio=1,this.bounds=[[-10,-10,-10],[10,10,10]],this.ticks=[[],[],[]],this.autoTicks=!0,this.tickSpacing=[1,1,1],this.tickEnable=[!0,!0,!0],this.tickFont=[\\\"sans-serif\\\",\\\"sans-serif\\\",\\\"sans-serif\\\"],this.tickSize=[12,12,12],this.tickAngle=[0,0,0],this.tickAlign=[\\\"auto\\\",\\\"auto\\\",\\\"auto\\\"],this.tickColor=[[0,0,0,1],[0,0,0,1],[0,0,0,1]],this.tickPad=[10,10,10],this.lastCubeProps={cubeEdges:[0,0,0],axis:[0,0,0]},this.labels=[\\\"x\\\",\\\"y\\\",\\\"z\\\"],this.labelEnable=[!0,!0,!0],this.labelFont=\\\"sans-serif\\\",this.labelSize=[20,20,20],this.labelAngle=[0,0,0],this.labelAlign=[\\\"auto\\\",\\\"auto\\\",\\\"auto\\\"],this.labelColor=[[0,0,0,1],[0,0,0,1],[0,0,0,1]],this.labelPad=[10,10,10],this.lineEnable=[!0,!0,!0],this.lineMirror=[!1,!1,!1],this.lineWidth=[1,1,1],this.lineColor=[[0,0,0,1],[0,0,0,1],[0,0,0,1]],this.lineTickEnable=[!0,!0,!0],this.lineTickMirror=[!1,!1,!1],this.lineTickLength=[0,0,0],this.lineTickWidth=[1,1,1],this.lineTickColor=[[0,0,0,1],[0,0,0,1],[0,0,0,1]],this.gridEnable=[!0,!0,!0],this.gridWidth=[1,1,1],this.gridColor=[[0,0,0,1],[0,0,0,1],[0,0,0,1]],this.zeroEnable=[!0,!0,!0],this.zeroLineColor=[[0,0,0,1],[0,0,0,1],[0,0,0,1]],this.zeroLineWidth=[2,2,2],this.backgroundEnable=[!1,!1,!1],this.backgroundColor=[[.8,.8,.8,.5],[.8,.8,.8,.5],[.8,.8,.8,.5]],this._firstInit=!0,this._text=null,this._lines=null,this._background=a(t)}var f=c.prototype;function h(){this.primalOffset=[0,0,0],this.primalMinor=[0,0,0],this.mirrorOffset=[0,0,0],this.mirrorMinor=[0,0,0]}f.update=function(t){function e(e,r,n){if(n in t){var i,a=t[n],o=this[n];(e?Array.isArray(a)&&Array.isArray(a[0]):Array.isArray(a))?this[n]=i=[r(a[0]),r(a[1]),r(a[2])]:this[n]=i=[r(a),r(a),r(a)];for(var s=0;s<3;++s)if(i[s]!==o[s])return!0}return!1}t=t||{};var r,a=e.bind(this,!1,Number),o=e.bind(this,!1,Boolean),l=e.bind(this,!1,String),u=e.bind(this,!0,(function(t){if(Array.isArray(t)){if(3===t.length)return[+t[0],+t[1],+t[2],1];if(4===t.length)return[+t[0],+t[1],+t[2],+t[3]]}return[0,0,0,1]})),c=!1,f=!1;if(\\\"bounds\\\"in t)for(var h=t.bounds,p=0;p<2;++p)for(var d=0;d<3;++d)h[p][d]!==this.bounds[p][d]&&(f=!0),this.bounds[p][d]=h[p][d];if(\\\"ticks\\\"in t)for(r=t.ticks,c=!0,this.autoTicks=!1,p=0;p<3;++p)this.tickSpacing[p]=0;else a(\\\"tickSpacing\\\")&&(this.autoTicks=!0,f=!0);if(this._firstInit&&(\\\"ticks\\\"in t||\\\"tickSpacing\\\"in t||(this.autoTicks=!0),f=!0,c=!0,this._firstInit=!1),f&&this.autoTicks&&(r=s.create(this.bounds,this.tickSpacing),c=!0),c){for(p=0;p<3;++p)r[p].sort((function(t,e){return t.x-e.x}));s.equal(r,this.ticks)?c=!1:this.ticks=r}o(\\\"tickEnable\\\"),l(\\\"tickFont\\\")&&(c=!0),a(\\\"tickSize\\\"),a(\\\"tickAngle\\\"),a(\\\"tickPad\\\"),u(\\\"tickColor\\\");var v=l(\\\"labels\\\");l(\\\"labelFont\\\")&&(v=!0),o(\\\"labelEnable\\\"),a(\\\"labelSize\\\"),a(\\\"labelPad\\\"),u(\\\"labelColor\\\"),o(\\\"lineEnable\\\"),o(\\\"lineMirror\\\"),a(\\\"lineWidth\\\"),u(\\\"lineColor\\\"),o(\\\"lineTickEnable\\\"),o(\\\"lineTickMirror\\\"),a(\\\"lineTickLength\\\"),a(\\\"lineTickWidth\\\"),u(\\\"lineTickColor\\\"),o(\\\"gridEnable\\\"),a(\\\"gridWidth\\\"),u(\\\"gridColor\\\"),o(\\\"zeroEnable\\\"),u(\\\"zeroLineColor\\\"),a(\\\"zeroLineWidth\\\"),o(\\\"backgroundEnable\\\"),u(\\\"backgroundColor\\\"),this._text?this._text&&(v||c)&&this._text.update(this.bounds,this.labels,this.labelFont,this.ticks,this.tickFont):this._text=n(this.gl,this.bounds,this.labels,this.labelFont,this.ticks,this.tickFont),this._lines&&c&&(this._lines.dispose(),this._lines=null),this._lines||(this._lines=i(this.gl,this.bounds,this.ticks))};var p=[new h,new h,new h];function d(t,e,r,n,i){for(var a=t.primalOffset,o=t.primalMinor,s=t.mirrorOffset,l=t.mirrorMinor,u=n[e],c=0;c<3;++c)if(e!==c){var f=a,h=s,p=o,d=l;u&1<<c&&(f=s,h=a,p=l,d=o),f[c]=r[0][c],h[c]=r[1][c],i[c]>0?(p[c]=-1,d[c]=0):(p[c]=0,d[c]=1)}}var v=[0,0,0],g={model:l,view:l,projection:l,_ortho:!1};f.isOpaque=function(){return!0},f.isTransparent=function(){return!1},f.drawTransparent=function(t){};var y=[0,0,0],m=[0,0,0],x=[0,0,0];f.draw=function(t){t=t||g;for(var e=this.gl,r=t.model||l,n=t.view||l,i=t.projection||l,a=this.bounds,s=t._ortho||!1,c=o(r,n,i,a,s),f=c.cubeEdges,h=c.axis,b=n[12],_=n[13],w=n[14],T=n[15],k=(s?2:1)*this.pixelRatio*(i[3]*b+i[7]*_+i[11]*w+i[15]*T)/e.drawingBufferHeight,A=0;A<3;++A)this.lastCubeProps.cubeEdges[A]=f[A],this.lastCubeProps.axis[A]=h[A];var M=p;for(A=0;A<3;++A)d(p[A],A,this.bounds,f,h);e=this.gl;var S,E,L,C=v;for(A=0;A<3;++A)this.backgroundEnable[A]?C[A]=h[A]:C[A]=0;for(this._background.draw(r,n,i,a,C,this.backgroundColor),this._lines.bind(r,n,i,this),A=0;A<3;++A){var P=[0,0,0];h[A]>0?P[A]=a[1][A]:P[A]=a[0][A];for(var O=0;O<2;++O){var I=(A+1+O)%3,D=(A+1+(1^O))%3;this.gridEnable[I]&&this._lines.drawGrid(I,D,this.bounds,P,this.gridColor[I],this.gridWidth[I]*this.pixelRatio)}for(O=0;O<2;++O)I=(A+1+O)%3,D=(A+1+(1^O))%3,this.zeroEnable[D]&&Math.min(a[0][D],a[1][D])<=0&&Math.max(a[0][D],a[1][D])>=0&&this._lines.drawZero(I,D,this.bounds,P,this.zeroLineColor[D],this.zeroLineWidth[D]*this.pixelRatio)}for(A=0;A<3;++A){this.lineEnable[A]&&this._lines.drawAxisLine(A,this.bounds,M[A].primalOffset,this.lineColor[A],this.lineWidth[A]*this.pixelRatio),this.lineMirror[A]&&this._lines.drawAxisLine(A,this.bounds,M[A].mirrorOffset,this.lineColor[A],this.lineWidth[A]*this.pixelRatio);var z=u(y,M[A].primalMinor),R=u(m,M[A].mirrorMinor),F=this.lineTickLength;for(O=0;O<3;++O){var B=k/r[5*O];z[O]*=F[O]*B,R[O]*=F[O]*B}this.lineTickEnable[A]&&this._lines.drawAxisTicks(A,M[A].primalOffset,z,this.lineTickColor[A],this.lineTickWidth[A]*this.pixelRatio),this.lineTickMirror[A]&&this._lines.drawAxisTicks(A,M[A].mirrorOffset,R,this.lineTickColor[A],this.lineTickWidth[A]*this.pixelRatio)}function N(t){(L=[0,0,0])[t]=1}function j(t,e,r){var n=(t+1)%3,i=(t+2)%3,a=e[n],o=e[i],s=r[n],l=r[i];a>0&&l>0||a>0&&l<0||a<0&&l>0||a<0&&l<0?N(n):(o>0&&s>0||o>0&&s<0||o<0&&s>0||o<0&&s<0)&&N(i)}for(this._lines.unbind(),this._text.bind(r,n,i,this.pixelRatio),A=0;A<3;++A){var U=M[A].primalMinor,V=M[A].mirrorMinor,H=u(x,M[A].primalOffset);for(O=0;O<3;++O)this.lineTickEnable[A]&&(H[O]+=k*U[O]*Math.max(this.lineTickLength[O],0)/r[5*O]);var q=[0,0,0];if(q[A]=1,this.tickEnable[A]){for(-3600===this.tickAngle[A]?(this.tickAngle[A]=0,this.tickAlign[A]=\\\"auto\\\"):this.tickAlign[A]=-1,E=1,\\\"auto\\\"===(S=[this.tickAlign[A],.5,E])[0]?S[0]=0:S[0]=parseInt(\\\"\\\"+S[0]),L=[0,0,0],j(A,U,V),O=0;O<3;++O)H[O]+=k*U[O]*this.tickPad[O]/r[5*O];this._text.drawTicks(A,this.tickSize[A],this.tickAngle[A],H,this.tickColor[A],q,L,S)}if(this.labelEnable[A]){for(E=0,L=[0,0,0],this.labels[A].length>4&&(N(A),E=1),\\\"auto\\\"===(S=[this.labelAlign[A],.5,E])[0]?S[0]=0:S[0]=parseInt(\\\"\\\"+S[0]),O=0;O<3;++O)H[O]+=k*U[O]*this.labelPad[O]/r[5*O];H[A]+=.5*(a[0][A]+a[1][A]),this._text.drawLabel(A,this.labelSize[A],this.labelAngle[A],H,this.labelColor[A],[0,0,0],L,S)}}this._text.unbind()},f.dispose=function(){this._text.dispose(),this._lines.dispose(),this._background.dispose(),this._lines=null,this._text=null,this._background=null,this.gl=null}},1011:function(t,e,r){\\\"use strict\\\";t.exports=function(t){for(var e=[],r=[],s=0,l=0;l<3;++l)for(var u=(l+1)%3,c=(l+2)%3,f=[0,0,0],h=[0,0,0],p=-1;p<=1;p+=2){r.push(s,s+2,s+1,s+1,s+2,s+3),f[l]=p,h[l]=p;for(var d=-1;d<=1;d+=2){f[u]=d;for(var v=-1;v<=1;v+=2)f[c]=v,e.push(f[0],f[1],f[2],h[0],h[1],h[2]),s+=1}var g=u;u=c,c=g}var y=n(t,new Float32Array(e)),m=n(t,new Uint16Array(r),t.ELEMENT_ARRAY_BUFFER),x=i(t,[{buffer:y,type:t.FLOAT,size:3,offset:0,stride:24},{buffer:y,type:t.FLOAT,size:3,offset:12,stride:24}],m),b=a(t);return b.attributes.position.location=0,b.attributes.normal.location=1,new o(t,y,x,b)};var n=r(5827),i=r(2944),a=r(1943).bg;function o(t,e,r,n){this.gl=t,this.buffer=e,this.vao=r,this.shader=n}var s=o.prototype;s.draw=function(t,e,r,n,i,a){for(var o=!1,s=0;s<3;++s)o=o||i[s];if(o){var l=this.gl;l.enable(l.POLYGON_OFFSET_FILL),l.polygonOffset(1,2),this.shader.bind(),this.shader.uniforms={model:t,view:e,projection:r,bounds:n,enable:i,colors:a},this.vao.bind(),this.vao.draw(this.gl.TRIANGLES,36),this.vao.unbind(),l.disable(l.POLYGON_OFFSET_FILL)}},s.dispose=function(){this.vao.dispose(),this.buffer.dispose(),this.shader.dispose()}},2864:function(t,e,r){\\\"use strict\\\";t.exports=function(t,e,r,a,p){i(s,e,t),i(s,r,s);for(var m=0,x=0;x<2;++x){c[2]=a[x][2];for(var b=0;b<2;++b){c[1]=a[b][1];for(var _=0;_<2;++_)c[0]=a[_][0],h(l[m],c,s),m+=1}}var w=-1;for(x=0;x<8;++x){for(var T=l[x][3],k=0;k<3;++k)u[x][k]=l[x][k]/T;p&&(u[x][2]*=-1),T<0&&(w<0||u[x][2]<u[w][2])&&(w=x)}if(w<0){w=0;for(var A=0;A<3;++A){for(var M=(A+2)%3,S=(A+1)%3,E=-1,L=-1,C=0;C<2;++C){var P=(I=C<<A)+(C<<M)+(1-C<<S),O=I+(1-C<<M)+(C<<S);o(u[I],u[P],u[O],f)<0||(C?E=1:L=1)}if(E<0||L<0)L>E&&(w|=1<<A);else{for(C=0;C<2;++C){P=(I=C<<A)+(C<<M)+(1-C<<S),O=I+(1-C<<M)+(C<<S);var I,D=d([l[I],l[P],l[O],l[I+(1<<M)+(1<<S)]]);C?E=D:L=D}L>E&&(w|=1<<A)}}}var z=7^w,R=-1;for(x=0;x<8;++x)x!==w&&x!==z&&(R<0||u[R][1]>u[x][1])&&(R=x);var F=-1;for(x=0;x<3;++x)(N=R^1<<x)!==w&&N!==z&&(F<0&&(F=N),(S=u[N])[0]<u[F][0]&&(F=N));var B=-1;for(x=0;x<3;++x){var N;(N=R^1<<x)!==w&&N!==z&&N!==F&&(B<0&&(B=N),(S=u[N])[0]>u[B][0]&&(B=N))}var j=v;j[0]=j[1]=j[2]=0,j[n.log2(F^R)]=R&F,j[n.log2(R^B)]=R&B;var U=7^B;U===w||U===z?(U=7^F,j[n.log2(B^U)]=U&B):j[n.log2(F^U)]=U&F;var V=g,H=w;for(A=0;A<3;++A)V[A]=H&1<<A?-1:1;return y};var n=r(2288),i=r(104),a=r(4670),o=r(417),s=new Array(16),l=new Array(8),u=new Array(8),c=new Array(3),f=[0,0,0];function h(t,e,r){for(var n=0;n<4;++n){t[n]=r[12+n];for(var i=0;i<3;++i)t[n]+=e[i]*r[4*i+n]}}!function(){for(var t=0;t<8;++t)l[t]=[1,1,1,1],u[t]=[1,1,1]}();var p=[[0,0,1,0,0],[0,0,-1,1,0],[0,-1,0,1,0],[0,1,0,1,0],[-1,0,0,1,0],[1,0,0,1,0]];function d(t){for(var e=0;e<p.length;++e)if((t=a.positive(t,p[e])).length<3)return 0;var r=t[0],n=r[0]/r[3],i=r[1]/r[3],o=0;for(e=1;e+1<t.length;++e){var s=t[e],l=t[e+1],u=s[0]/s[3]-n,c=s[1]/s[3]-i,f=l[0]/l[3]-n,h=l[1]/l[3]-i;o+=Math.abs(u*h-c*f)}return o}var v=[1,1,1],g=[0,0,0],y={cubeEdges:v,axis:g}},1681:function(t,e,r){\\\"use strict\\\";t.exports=function(t,e,r){var o=[],s=[0,0,0],l=[0,0,0],u=[0,0,0],c=[0,0,0];o.push(0,0,1,0,1,1,0,0,-1,0,0,-1,0,1,1,0,1,-1);for(var f=0;f<3;++f){for(var h=o.length/3|0,d=0;d<r[f].length;++d){var v=+r[f][d].x;o.push(v,0,1,v,1,1,v,0,-1,v,0,-1,v,1,1,v,1,-1)}var g=o.length/3|0;s[f]=h,l[f]=g-h,h=o.length/3|0;for(var y=0;y<r[f].length;++y)v=+r[f][y].x,o.push(v,0,1,v,1,1,v,0,-1,v,0,-1,v,1,1,v,1,-1);g=o.length/3|0,u[f]=h,c[f]=g-h}var m=n(t,new Float32Array(o)),x=i(t,[{buffer:m,type:t.FLOAT,size:3,stride:0,offset:0}]),b=a(t);return b.attributes.position.location=0,new p(t,m,x,b,l,s,c,u)};var n=r(5827),i=r(2944),a=r(1943).j,o=[0,0,0],s=[0,0,0],l=[0,0,0],u=[0,0,0],c=[1,1];function f(t){return t[0]=t[1]=t[2]=0,t}function h(t,e){return t[0]=e[0],t[1]=e[1],t[2]=e[2],t}function p(t,e,r,n,i,a,o,s){this.gl=t,this.vertBuffer=e,this.vao=r,this.shader=n,this.tickCount=i,this.tickOffset=a,this.gridCount=o,this.gridOffset=s}var d=p.prototype;d.bind=function(t,e,r){this.shader.bind(),this.shader.uniforms.model=t,this.shader.uniforms.view=e,this.shader.uniforms.projection=r,c[0]=this.gl.drawingBufferWidth,c[1]=this.gl.drawingBufferHeight,this.shader.uniforms.screenShape=c,this.vao.bind()},d.unbind=function(){this.vao.unbind()},d.drawAxisLine=function(t,e,r,n,i){var a=f(s);this.shader.uniforms.majorAxis=s,a[t]=e[1][t]-e[0][t],this.shader.uniforms.minorAxis=a;var o,c=h(u,r);c[t]+=e[0][t],this.shader.uniforms.offset=c,this.shader.uniforms.lineWidth=i,this.shader.uniforms.color=n,(o=f(l))[(t+2)%3]=1,this.shader.uniforms.screenAxis=o,this.vao.draw(this.gl.TRIANGLES,6),(o=f(l))[(t+1)%3]=1,this.shader.uniforms.screenAxis=o,this.vao.draw(this.gl.TRIANGLES,6)},d.drawAxisTicks=function(t,e,r,n,i){if(this.tickCount[t]){var a=f(o);a[t]=1,this.shader.uniforms.majorAxis=a,this.shader.uniforms.offset=e,this.shader.uniforms.minorAxis=r,this.shader.uniforms.color=n,this.shader.uniforms.lineWidth=i;var s=f(l);s[t]=1,this.shader.uniforms.screenAxis=s,this.vao.draw(this.gl.TRIANGLES,this.tickCount[t],this.tickOffset[t])}},d.drawGrid=function(t,e,r,n,i,a){if(this.gridCount[t]){var c=f(s);c[e]=r[1][e]-r[0][e],this.shader.uniforms.minorAxis=c;var p=h(u,n);p[e]+=r[0][e],this.shader.uniforms.offset=p;var d=f(o);d[t]=1,this.shader.uniforms.majorAxis=d;var v=f(l);v[t]=1,this.shader.uniforms.screenAxis=v,this.shader.uniforms.lineWidth=a,this.shader.uniforms.color=i,this.vao.draw(this.gl.TRIANGLES,this.gridCount[t],this.gridOffset[t])}},d.drawZero=function(t,e,r,n,i,a){var o=f(s);this.shader.uniforms.majorAxis=o,o[t]=r[1][t]-r[0][t],this.shader.uniforms.minorAxis=o;var c=h(u,n);c[t]+=r[0][t],this.shader.uniforms.offset=c;var p=f(l);p[e]=1,this.shader.uniforms.screenAxis=p,this.shader.uniforms.lineWidth=a,this.shader.uniforms.color=i,this.vao.draw(this.gl.TRIANGLES,6)},d.dispose=function(){this.vao.dispose(),this.vertBuffer.dispose(),this.shader.dispose()}},1943:function(t,e,r){\\\"use strict\\\";var n=r(6832),i=r(5158),a=n([\\\"precision highp float;\\\\n#define GLSLIFY 1\\\\n\\\\nattribute vec3 position;\\\\n\\\\nuniform mat4 model, view, projection;\\\\nuniform vec3 offset, majorAxis, minorAxis, screenAxis;\\\\nuniform float lineWidth;\\\\nuniform vec2 screenShape;\\\\n\\\\nvec3 project(vec3 p) {\\\\n  vec4 pp = projection * view * model * vec4(p, 1.0);\\\\n  return pp.xyz / max(pp.w, 0.0001);\\\\n}\\\\n\\\\nvoid main() {\\\\n  vec3 major = position.x * majorAxis;\\\\n  vec3 minor = position.y * minorAxis;\\\\n\\\\n  vec3 vPosition = major + minor + offset;\\\\n  vec3 pPosition = project(vPosition);\\\\n  vec3 offset = project(vPosition + screenAxis * position.z);\\\\n\\\\n  vec2 screen = normalize((offset - pPosition).xy * screenShape) / screenShape;\\\\n\\\\n  gl_Position = vec4(pPosition + vec3(0.5 * screen * lineWidth, 0), 1.0);\\\\n}\\\\n\\\"]),o=n([\\\"precision highp float;\\\\n#define GLSLIFY 1\\\\n\\\\nuniform vec4 color;\\\\nvoid main() {\\\\n  gl_FragColor = color;\\\\n}\\\"]);e.j=function(t){return i(t,a,o,null,[{name:\\\"position\\\",type:\\\"vec3\\\"}])};var s=n([\\\"precision highp float;\\\\n#define GLSLIFY 1\\\\n\\\\nattribute vec3 position;\\\\n\\\\nuniform mat4 model, view, projection;\\\\nuniform vec3 offset, axis, alignDir, alignOpt;\\\\nuniform float scale, angle, pixelScale;\\\\nuniform vec2 resolution;\\\\n\\\\nvec3 project(vec3 p) {\\\\n  vec4 pp = projection * view * model * vec4(p, 1.0);\\\\n  return pp.xyz / max(pp.w, 0.0001);\\\\n}\\\\n\\\\nfloat computeViewAngle(vec3 a, vec3 b) {\\\\n  vec3 A = project(a);\\\\n  vec3 B = project(b);\\\\n\\\\n  return atan(\\\\n    (B.y - A.y) * resolution.y,\\\\n    (B.x - A.x) * resolution.x\\\\n  );\\\\n}\\\\n\\\\nconst float PI = 3.141592;\\\\nconst float TWO_PI = 2.0 * PI;\\\\nconst float HALF_PI = 0.5 * PI;\\\\nconst float ONE_AND_HALF_PI = 1.5 * PI;\\\\n\\\\nint option = int(floor(alignOpt.x + 0.001));\\\\nfloat hv_ratio =       alignOpt.y;\\\\nbool enableAlign =    (alignOpt.z != 0.0);\\\\n\\\\nfloat mod_angle(float a) {\\\\n  return mod(a, PI);\\\\n}\\\\n\\\\nfloat positive_angle(float a) {\\\\n  return mod_angle((a < 0.0) ?\\\\n    a + TWO_PI :\\\\n    a\\\\n  );\\\\n}\\\\n\\\\nfloat look_upwards(float a) {\\\\n  float b = positive_angle(a);\\\\n  return ((b > HALF_PI) && (b <= ONE_AND_HALF_PI)) ?\\\\n    b - PI :\\\\n    b;\\\\n}\\\\n\\\\nfloat look_horizontal_or_vertical(float a, float ratio) {\\\\n  // ratio controls the ratio between being horizontal to (vertical + horizontal)\\\\n  // if ratio is set to 0.5 then it is 50%, 50%.\\\\n  // when using a higher ratio e.g. 0.75 the result would\\\\n  // likely be more horizontal than vertical.\\\\n\\\\n  float b = positive_angle(a);\\\\n\\\\n  return\\\\n    (b < (      ratio) * HALF_PI) ? 0.0 :\\\\n    (b < (2.0 - ratio) * HALF_PI) ? -HALF_PI :\\\\n    (b < (2.0 + ratio) * HALF_PI) ? 0.0 :\\\\n    (b < (4.0 - ratio) * HALF_PI) ? HALF_PI :\\\\n                                    0.0;\\\\n}\\\\n\\\\nfloat roundTo(float a, float b) {\\\\n  return float(b * floor((a + 0.5 * b) / b));\\\\n}\\\\n\\\\nfloat look_round_n_directions(float a, int n) {\\\\n  float b = positive_angle(a);\\\\n  float div = TWO_PI / float(n);\\\\n  float c = roundTo(b, div);\\\\n  return look_upwards(c);\\\\n}\\\\n\\\\nfloat applyAlignOption(float rawAngle, float delta) {\\\\n  return\\\\n    (option >  2) ? look_round_n_directions(rawAngle + delta, option) :       // option 3-n: round to n directions\\\\n    (option == 2) ? look_horizontal_or_vertical(rawAngle + delta, hv_ratio) : // horizontal or vertical\\\\n    (option == 1) ? rawAngle + delta :       // use free angle, and flip to align with one direction of the axis\\\\n    (option == 0) ? look_upwards(rawAngle) : // use free angle, and stay upwards\\\\n    (option ==-1) ? 0.0 :                    // useful for backward compatibility, all texts remains horizontal\\\\n                    rawAngle;                // otherwise return back raw input angle\\\\n}\\\\n\\\\nbool isAxisTitle = (axis.x == 0.0) &&\\\\n                   (axis.y == 0.0) &&\\\\n                   (axis.z == 0.0);\\\\n\\\\nvoid main() {\\\\n  //Compute world offset\\\\n  float axisDistance = position.z;\\\\n  vec3 dataPosition = axisDistance * axis + offset;\\\\n\\\\n  float beta = angle; // i.e. user defined attributes for each tick\\\\n\\\\n  float axisAngle;\\\\n  float clipAngle;\\\\n  float flip;\\\\n\\\\n  if (enableAlign) {\\\\n    axisAngle = (isAxisTitle) ? HALF_PI :\\\\n                      computeViewAngle(dataPosition, dataPosition + axis);\\\\n    clipAngle = computeViewAngle(dataPosition, dataPosition + alignDir);\\\\n\\\\n    axisAngle += (sin(axisAngle) < 0.0) ? PI : 0.0;\\\\n    clipAngle += (sin(clipAngle) < 0.0) ? PI : 0.0;\\\\n\\\\n    flip = (dot(vec2(cos(axisAngle), sin(axisAngle)),\\\\n                vec2(sin(clipAngle),-cos(clipAngle))) > 0.0) ? 1.0 : 0.0;\\\\n\\\\n    beta += applyAlignOption(clipAngle, flip * PI);\\\\n  }\\\\n\\\\n  //Compute plane offset\\\\n  vec2 planeCoord = position.xy * pixelScale;\\\\n\\\\n  mat2 planeXform = scale * mat2(\\\\n     cos(beta), sin(beta),\\\\n    -sin(beta), cos(beta)\\\\n  );\\\\n\\\\n  vec2 viewOffset = 2.0 * planeXform * planeCoord / resolution;\\\\n\\\\n  //Compute clip position\\\\n  vec3 clipPosition = project(dataPosition);\\\\n\\\\n  //Apply text offset in clip coordinates\\\\n  clipPosition += vec3(viewOffset, 0.0);\\\\n\\\\n  //Done\\\\n  gl_Position = vec4(clipPosition, 1.0);\\\\n}\\\"]),l=n([\\\"precision highp float;\\\\n#define GLSLIFY 1\\\\n\\\\nuniform vec4 color;\\\\nvoid main() {\\\\n  gl_FragColor = color;\\\\n}\\\"]);e.f=function(t){return i(t,s,l,null,[{name:\\\"position\\\",type:\\\"vec3\\\"}])};var u=n([\\\"precision highp float;\\\\n#define GLSLIFY 1\\\\n\\\\nattribute vec3 position;\\\\nattribute vec3 normal;\\\\n\\\\nuniform mat4 model, view, projection;\\\\nuniform vec3 enable;\\\\nuniform vec3 bounds[2];\\\\n\\\\nvarying vec3 colorChannel;\\\\n\\\\nvoid main() {\\\\n\\\\n  vec3 signAxis = sign(bounds[1] - bounds[0]);\\\\n\\\\n  vec3 realNormal = signAxis * normal;\\\\n\\\\n  if(dot(realNormal, enable) > 0.0) {\\\\n    vec3 minRange = min(bounds[0], bounds[1]);\\\\n    vec3 maxRange = max(bounds[0], bounds[1]);\\\\n    vec3 nPosition = mix(minRange, maxRange, 0.5 * (position + 1.0));\\\\n    gl_Position = projection * view * model * vec4(nPosition, 1.0);\\\\n  } else {\\\\n    gl_Position = vec4(0,0,0,0);\\\\n  }\\\\n\\\\n  colorChannel = abs(realNormal);\\\\n}\\\"]),c=n([\\\"precision highp float;\\\\n#define GLSLIFY 1\\\\n\\\\nuniform vec4 colors[3];\\\\n\\\\nvarying vec3 colorChannel;\\\\n\\\\nvoid main() {\\\\n  gl_FragColor = colorChannel.x * colors[0] +\\\\n                 colorChannel.y * colors[1] +\\\\n                 colorChannel.z * colors[2];\\\\n}\\\"]);e.bg=function(t){return i(t,u,c,null,[{name:\\\"position\\\",type:\\\"vec3\\\"},{name:\\\"normal\\\",type:\\\"vec3\\\"}])}},9557:function(t,e,r){\\\"use strict\\\";t.exports=function(t,e,r,i,o,l){var u=n(t),f=a(t,[{buffer:u,size:3}]),h=s(t);h.attributes.position.location=0;var p=new c(t,h,u,f);return p.update(e,r,i,o,l),p};var n=r(5827),a=r(2944),o=r(875),s=r(1943).f,l=window||i.global||{},u=l.__TEXT_CACHE||{};function c(t,e,r,n){this.gl=t,this.shader=e,this.buffer=r,this.vao=n,this.tickOffset=this.tickCount=this.labelOffset=this.labelCount=null}l.__TEXT_CACHE={};var f=c.prototype,h=[0,0];f.bind=function(t,e,r,n){this.vao.bind(),this.shader.bind();var i=this.shader.uniforms;i.model=t,i.view=e,i.projection=r,i.pixelScale=n,h[0]=this.gl.drawingBufferWidth,h[1]=this.gl.drawingBufferHeight,this.shader.uniforms.resolution=h},f.unbind=function(){this.vao.unbind()},f.update=function(t,e,r,n,i){var a=[];function s(t,e,r,n,i,s){var l=u[r];l||(l=u[r]={});var c=l[e];c||(c=l[e]=function(t,e){try{return o(t,e)}catch(e){return console.warn('error vectorizing text:\\\"'+t+'\\\" error:',e),{cells:[],positions:[]}}}(e,{triangles:!0,font:r,textAlign:\\\"center\\\",textBaseline:\\\"middle\\\",lineSpacing:i,styletags:s}));for(var f=(n||12)/12,h=c.positions,p=c.cells,d=0,v=p.length;d<v;++d)for(var g=p[d],y=2;y>=0;--y){var m=h[g[y]];a.push(f*m[0],-f*m[1],t)}}for(var l=[0,0,0],c=[0,0,0],f=[0,0,0],h=[0,0,0],p={breaklines:!0,bolds:!0,italics:!0,subscripts:!0,superscripts:!0},d=0;d<3;++d){f[d]=a.length/3|0,s(.5*(t[0][d]+t[1][d]),e[d],r[d],12,1.25,p),h[d]=(a.length/3|0)-f[d],l[d]=a.length/3|0;for(var v=0;v<n[d].length;++v)n[d][v].text&&s(n[d][v].x,n[d][v].text,n[d][v].font||i,n[d][v].fontSize||12,1.25,p);c[d]=(a.length/3|0)-l[d]}this.buffer.update(a),this.tickOffset=l,this.tickCount=c,this.labelOffset=f,this.labelCount=h},f.drawTicks=function(t,e,r,n,i,a,o,s){this.tickCount[t]&&(this.shader.uniforms.axis=a,this.shader.uniforms.color=i,this.shader.uniforms.angle=r,this.shader.uniforms.scale=e,this.shader.uniforms.offset=n,this.shader.uniforms.alignDir=o,this.shader.uniforms.alignOpt=s,this.vao.draw(this.gl.TRIANGLES,this.tickCount[t],this.tickOffset[t]))},f.drawLabel=function(t,e,r,n,i,a,o,s){this.labelCount[t]&&(this.shader.uniforms.axis=a,this.shader.uniforms.color=i,this.shader.uniforms.angle=r,this.shader.uniforms.scale=e,this.shader.uniforms.offset=n,this.shader.uniforms.alignDir=o,this.shader.uniforms.alignOpt=s,this.vao.draw(this.gl.TRIANGLES,this.labelCount[t],this.labelOffset[t]))},f.dispose=function(){this.shader.dispose(),this.vao.dispose(),this.buffer.dispose()}},8468:function(t,e){\\\"use strict\\\";function r(t,e){var r=t+\\\"\\\",n=r.indexOf(\\\".\\\"),i=0;n>=0&&(i=r.length-n-1);var a=Math.pow(10,i),o=Math.round(t*e*a),s=o+\\\"\\\";if(s.indexOf(\\\"e\\\")>=0)return s;var l=o/a,u=o%a;o<0?(l=0|-Math.ceil(l),u=0|-u):(l=0|Math.floor(l),u|=0);var c=\\\"\\\"+l;if(o<0&&(c=\\\"-\\\"+c),i){for(var f=\\\"\\\"+u;f.length<i;)f=\\\"0\\\"+f;return c+\\\".\\\"+f}return c}e.create=function(t,e){for(var n=[],i=0;i<3;++i){for(var a=[],o=(t[0][i],t[1][i],0);o*e[i]<=t[1][i];++o)a.push({x:o*e[i],text:r(e[i],o)});for(o=-1;o*e[i]>=t[0][i];--o)a.push({x:o*e[i],text:r(e[i],o)});n.push(a)}return n},e.equal=function(t,e){for(var r=0;r<3;++r){if(t[r].length!==e[r].length)return!1;for(var n=0;n<t[r].length;++n){var i=t[r][n],a=e[r][n];if(i.x!==a.x||i.text!==a.text||i.font!==a.font||i.fontColor!==a.fontColor||i.fontSize!==a.fontSize||i.dx!==a.dx||i.dy!==a.dy)return!1}}return!0}},2771:function(t,e,r){\\\"use strict\\\";t.exports=function(t,e,r,l,f){var h=e.model||u,p=e.view||u,y=e.projection||u,m=e._ortho||!1,x=t.bounds,b=(f=f||a(h,p,y,x,m)).axis;o(c,p,h),o(c,y,c);for(var _=v,w=0;w<3;++w)_[w].lo=1/0,_[w].hi=-1/0,_[w].pixelsPerDataUnit=1/0;var T=n(s(c,c));s(c,c);for(var k=0;k<3;++k){var A=(k+1)%3,M=(k+2)%3,S=g;t:for(w=0;w<2;++w){var E=[];if(b[k]<0!=!!w){S[k]=x[w][k];for(var L=0;L<2;++L){S[A]=x[L^w][A];for(var C=0;C<2;++C)S[M]=x[C^L^w][M],E.push(S.slice())}var P=m?5:4;for(L=P;L===P;++L){if(0===E.length)continue t;E=i.positive(E,T[L])}for(L=0;L<E.length;++L){M=E[L];var O=d(g,c,M,r,l);for(C=0;C<3;++C)_[C].lo=Math.min(_[C].lo,M[C]),_[C].hi=Math.max(_[C].hi,M[C]),C!==k&&(_[C].pixelsPerDataUnit=Math.min(_[C].pixelsPerDataUnit,Math.abs(O[C])))}}}}return _};var n=r(5795),i=r(4670),a=r(2864),o=r(104),s=r(2142),l=r(6342),u=new Float32Array([1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1]),c=new Float32Array(16);function f(t,e,r){this.lo=t,this.hi=e,this.pixelsPerDataUnit=r}var h=[0,0,0,1],p=[0,0,0,1];function d(t,e,r,n,i){for(var a=0;a<3;++a){for(var o=h,s=p,u=0;u<3;++u)s[u]=o[u]=r[u];s[3]=o[3]=1,s[a]+=1,l(s,s,e),s[3]<0&&(t[a]=1/0),o[a]-=1,l(o,o,e),o[3]<0&&(t[a]=1/0);var c=(o[0]/o[3]-s[0]/s[3])*n,f=(o[1]/o[3]-s[1]/s[3])*i;t[a]=.25*Math.sqrt(c*c+f*f)}return t}var v=[new f(1/0,-1/0,1/0),new f(1/0,-1/0,1/0),new f(1/0,-1/0,1/0)],g=[0,0,0]},5827:function(t,e,r){\\\"use strict\\\";var n=r(5306),i=r(7498),a=r(5050),o=[\\\"uint8\\\",\\\"uint8_clamped\\\",\\\"uint16\\\",\\\"uint32\\\",\\\"int8\\\",\\\"int16\\\",\\\"int32\\\",\\\"float32\\\"];function s(t,e,r,n,i){this.gl=t,this.type=e,this.handle=r,this.length=n,this.usage=i}var l=s.prototype;function u(t,e,r,n,i,a){var o=i.length*i.BYTES_PER_ELEMENT;if(a<0)return t.bufferData(e,i,n),o;if(o+a>r)throw new Error(\\\"gl-buffer: If resizing buffer, must not specify offset\\\");return t.bufferSubData(e,a,i),r}function c(t,e){for(var r=n.malloc(t.length,e),i=t.length,a=0;a<i;++a)r[a]=t[a];return r}l.bind=function(){this.gl.bindBuffer(this.type,this.handle)},l.unbind=function(){this.gl.bindBuffer(this.type,null)},l.dispose=function(){this.gl.deleteBuffer(this.handle)},l.update=function(t,e){if(\\\"number\\\"!=typeof e&&(e=-1),this.bind(),\\\"object\\\"==typeof t&&void 0!==t.shape){var r=t.dtype;if(o.indexOf(r)<0&&(r=\\\"float32\\\"),this.type===this.gl.ELEMENT_ARRAY_BUFFER&&(r=gl.getExtension(\\\"OES_element_index_uint\\\")&&\\\"uint16\\\"!==r?\\\"uint32\\\":\\\"uint16\\\"),r===t.dtype&&function(t,e){for(var r=1,n=e.length-1;n>=0;--n){if(e[n]!==r)return!1;r*=t[n]}return!0}(t.shape,t.stride))0===t.offset&&t.data.length===t.shape[0]?this.length=u(this.gl,this.type,this.length,this.usage,t.data,e):this.length=u(this.gl,this.type,this.length,this.usage,t.data.subarray(t.offset,t.shape[0]),e);else{var s=n.malloc(t.size,r),l=a(s,t.shape);i.assign(l,t),this.length=u(this.gl,this.type,this.length,this.usage,e<0?s:s.subarray(0,t.size),e),n.free(s)}}else if(Array.isArray(t)){var f;f=this.type===this.gl.ELEMENT_ARRAY_BUFFER?c(t,\\\"uint16\\\"):c(t,\\\"float32\\\"),this.length=u(this.gl,this.type,this.length,this.usage,e<0?f:f.subarray(0,t.length),e),n.free(f)}else if(\\\"object\\\"==typeof t&&\\\"number\\\"==typeof t.length)this.length=u(this.gl,this.type,this.length,this.usage,t,e);else{if(\\\"number\\\"!=typeof t&&void 0!==t)throw new Error(\\\"gl-buffer: Invalid data type\\\");if(e>=0)throw new Error(\\\"gl-buffer: Cannot specify offset when resizing buffer\\\");(t|=0)<=0&&(t=1),this.gl.bufferData(this.type,0|t,this.usage),this.length=t}},t.exports=function(t,e,r,n){if(r=r||t.ARRAY_BUFFER,n=n||t.DYNAMIC_DRAW,r!==t.ARRAY_BUFFER&&r!==t.ELEMENT_ARRAY_BUFFER)throw new Error(\\\"gl-buffer: Invalid type for webgl buffer, must be either gl.ARRAY_BUFFER or gl.ELEMENT_ARRAY_BUFFER\\\");if(n!==t.DYNAMIC_DRAW&&n!==t.STATIC_DRAW&&n!==t.STREAM_DRAW)throw new Error(\\\"gl-buffer: Invalid usage for buffer, must be either gl.DYNAMIC_DRAW, gl.STATIC_DRAW or gl.STREAM_DRAW\\\");var i=t.createBuffer(),a=new s(t,r,i,0,n);return a.update(e),a}},1140:function(t,e,r){\\\"use strict\\\";var n=r(2858);t.exports=function(t,e){var r=t.positions,i=t.vectors,a={positions:[],vertexIntensity:[],vertexIntensityBounds:t.vertexIntensityBounds,vectors:[],cells:[],coneOffset:t.coneOffset,colormap:t.colormap};if(0===t.positions.length)return e&&(e[0]=[0,0,0],e[1]=[0,0,0]),a;for(var o=0,s=1/0,l=-1/0,u=1/0,c=-1/0,f=1/0,h=-1/0,p=null,d=null,v=[],g=1/0,y=!1,m=0;m<r.length;m++){var x=r[m];s=Math.min(x[0],s),l=Math.max(x[0],l),u=Math.min(x[1],u),c=Math.max(x[1],c),f=Math.min(x[2],f),h=Math.max(x[2],h);var b=i[m];if(n.length(b)>o&&(o=n.length(b)),m){var _=2*n.distance(p,x)/(n.length(d)+n.length(b));_?(g=Math.min(g,_),y=!1):y=!0}y||(p=x,d=b),v.push(b)}var w=[s,u,f],T=[l,c,h];e&&(e[0]=w,e[1]=T),0===o&&(o=1);var k=1/o;isFinite(g)||(g=1),a.vectorScale=g;var A=t.coneSize||.5;t.absoluteConeSize&&(A=t.absoluteConeSize*k),a.coneScale=A,m=0;for(var M=0;m<r.length;m++)for(var S=(x=r[m])[0],E=x[1],L=x[2],C=v[m],P=n.length(C)*k,O=0;O<8;O++){a.positions.push([S,E,L,M++]),a.positions.push([S,E,L,M++]),a.positions.push([S,E,L,M++]),a.positions.push([S,E,L,M++]),a.positions.push([S,E,L,M++]),a.positions.push([S,E,L,M++]),a.vectors.push(C),a.vectors.push(C),a.vectors.push(C),a.vectors.push(C),a.vectors.push(C),a.vectors.push(C),a.vertexIntensity.push(P,P,P),a.vertexIntensity.push(P,P,P);var I=a.positions.length;a.cells.push([I-6,I-5,I-4],[I-3,I-2,I-1])}return a};var i=r(7234);t.exports.createMesh=r(5028),t.exports.createConeMesh=function(e,r){return t.exports.createMesh(e,r,{shaders:i,traceType:\\\"cone\\\"})}},5028:function(t,e,r){\\\"use strict\\\";var n=r(5158),i=r(5827),a=r(2944),o=r(8931),s=r(104),l=r(7437),u=r(5050),c=r(9156),f=[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1];function h(t,e,r,n,i,a,o,s,l,u,c){this.gl=t,this.pixelRatio=1,this.cells=[],this.positions=[],this.intensity=[],this.texture=e,this.dirty=!0,this.triShader=r,this.pickShader=n,this.trianglePositions=i,this.triangleVectors=a,this.triangleColors=s,this.triangleUVs=l,this.triangleIds=o,this.triangleVAO=u,this.triangleCount=0,this.pickId=1,this.bounds=[[1/0,1/0,1/0],[-1/0,-1/0,-1/0]],this.clipBounds=[[-1/0,-1/0,-1/0],[1/0,1/0,1/0]],this.lightPosition=[1e5,1e5,0],this.ambientLight=.8,this.diffuseLight=.8,this.specularLight=2,this.roughness=.5,this.fresnel=1.5,this.opacity=1,this.traceType=c,this.tubeScale=1,this.coneScale=2,this.vectorScale=1,this.coneOffset=.25,this._model=f,this._view=f,this._projection=f,this._resolution=[1,1]}var p=h.prototype;p.isOpaque=function(){return this.opacity>=1},p.isTransparent=function(){return this.opacity<1},p.pickSlots=1,p.setPickBase=function(t){this.pickId=t},p.update=function(t){t=t||{};var e=this.gl;this.dirty=!0,\\\"lightPosition\\\"in t&&(this.lightPosition=t.lightPosition),\\\"opacity\\\"in t&&(this.opacity=t.opacity),\\\"ambient\\\"in t&&(this.ambientLight=t.ambient),\\\"diffuse\\\"in t&&(this.diffuseLight=t.diffuse),\\\"specular\\\"in t&&(this.specularLight=t.specular),\\\"roughness\\\"in t&&(this.roughness=t.roughness),\\\"fresnel\\\"in t&&(this.fresnel=t.fresnel),void 0!==t.tubeScale&&(this.tubeScale=t.tubeScale),void 0!==t.vectorScale&&(this.vectorScale=t.vectorScale),void 0!==t.coneScale&&(this.coneScale=t.coneScale),void 0!==t.coneOffset&&(this.coneOffset=t.coneOffset),t.colormap&&(this.texture.shape=[256,256],this.texture.minFilter=e.LINEAR_MIPMAP_LINEAR,this.texture.magFilter=e.LINEAR,this.texture.setPixels(function(t){for(var e=c({colormap:t,nshades:256,format:\\\"rgba\\\"}),r=new Uint8Array(1024),n=0;n<256;++n){for(var i=e[n],a=0;a<3;++a)r[4*n+a]=i[a];r[4*n+3]=255*i[3]}return u(r,[256,256,4],[4,0,1])}(t.colormap)),this.texture.generateMipmap());var r=t.cells,n=t.positions,i=t.vectors;if(n&&r&&i){var a=[],o=[],s=[],l=[],f=[];this.cells=r,this.positions=n,this.vectors=i;var h=t.meshColor||[1,1,1,1],p=t.vertexIntensity,d=1/0,v=-1/0;if(p)if(t.vertexIntensityBounds)d=+t.vertexIntensityBounds[0],v=+t.vertexIntensityBounds[1];else for(var g=0;g<p.length;++g){var y=p[g];d=Math.min(d,y),v=Math.max(v,y)}else for(g=0;g<n.length;++g)y=n[g][2],d=Math.min(d,y),v=Math.max(v,y);for(this.intensity=p||function(t){for(var e=t.length,r=new Array(e),n=0;n<e;++n)r[n]=t[n][2];return r}(n),this.bounds=[[1/0,1/0,1/0],[-1/0,-1/0,-1/0]],g=0;g<n.length;++g)for(var m=n[g],x=0;x<3;++x)!isNaN(m[x])&&isFinite(m[x])&&(this.bounds[0][x]=Math.min(this.bounds[0][x],m[x]),this.bounds[1][x]=Math.max(this.bounds[1][x],m[x]));var b=0;t:for(g=0;g<r.length;++g){var _=r[g];if(3===_.length){for(x=0;x<3;++x){m=n[T=_[x]];for(var w=0;w<3;++w)if(isNaN(m[w])||!isFinite(m[w]))continue t}for(x=0;x<3;++x){var T;m=n[T=_[2-x]],a.push(m[0],m[1],m[2],m[3]);var k=i[T];o.push(k[0],k[1],k[2],k[3]||0);var A,M=h;3===M.length?s.push(M[0],M[1],M[2],1):s.push(M[0],M[1],M[2],M[3]),A=p?[(p[T]-d)/(v-d),0]:[(m[2]-d)/(v-d),0],l.push(A[0],A[1]),f.push(g)}b+=1}}this.triangleCount=b,this.trianglePositions.update(a),this.triangleVectors.update(o),this.triangleColors.update(s),this.triangleUVs.update(l),this.triangleIds.update(new Uint32Array(f))}},p.drawTransparent=p.draw=function(t){t=t||{};for(var e=this.gl,r=t.model||f,n=t.view||f,i=t.projection||f,a=[[-1e6,-1e6,-1e6],[1e6,1e6,1e6]],o=0;o<3;++o)a[0][o]=Math.max(a[0][o],this.clipBounds[0][o]),a[1][o]=Math.min(a[1][o],this.clipBounds[1][o]);var u={model:r,view:n,projection:i,inverseModel:f.slice(),clipBounds:a,kambient:this.ambientLight,kdiffuse:this.diffuseLight,kspecular:this.specularLight,roughness:this.roughness,fresnel:this.fresnel,eyePosition:[0,0,0],lightPosition:[0,0,0],opacity:this.opacity,tubeScale:this.tubeScale,vectorScale:this.vectorScale,coneScale:this.coneScale,coneOffset:this.coneOffset,texture:0};u.inverseModel=l(u.inverseModel,u.model),e.disable(e.CULL_FACE),this.texture.bind(0);var c=new Array(16);for(s(c,u.view,u.model),s(c,u.projection,c),l(c,c),o=0;o<3;++o)u.eyePosition[o]=c[12+o]/c[15];var h=c[15];for(o=0;o<3;++o)h+=this.lightPosition[o]*c[4*o+3];for(o=0;o<3;++o){for(var p=c[12+o],d=0;d<3;++d)p+=c[4*d+o]*this.lightPosition[d];u.lightPosition[o]=p/h}if(this.triangleCount>0){var v=this.triShader;v.bind(),v.uniforms=u,this.triangleVAO.bind(),e.drawArrays(e.TRIANGLES,0,3*this.triangleCount),this.triangleVAO.unbind()}},p.drawPick=function(t){t=t||{};for(var e=this.gl,r=t.model||f,n=t.view||f,i=t.projection||f,a=[[-1e6,-1e6,-1e6],[1e6,1e6,1e6]],o=0;o<3;++o)a[0][o]=Math.max(a[0][o],this.clipBounds[0][o]),a[1][o]=Math.min(a[1][o],this.clipBounds[1][o]);this._model=[].slice.call(r),this._view=[].slice.call(n),this._projection=[].slice.call(i),this._resolution=[e.drawingBufferWidth,e.drawingBufferHeight];var s={model:r,view:n,projection:i,clipBounds:a,tubeScale:this.tubeScale,vectorScale:this.vectorScale,coneScale:this.coneScale,coneOffset:this.coneOffset,pickId:this.pickId/255},l=this.pickShader;l.bind(),l.uniforms=s,this.triangleCount>0&&(this.triangleVAO.bind(),e.drawArrays(e.TRIANGLES,0,3*this.triangleCount),this.triangleVAO.unbind())},p.pick=function(t){if(!t)return null;if(t.id!==this.pickId)return null;var e=t.value[0]+256*t.value[1]+65536*t.value[2],r=this.cells[e],n=this.positions[r[1]].slice(0,3),i={position:n,dataCoordinate:n,index:Math.floor(r[1]/48)};return\\\"cone\\\"===this.traceType?i.index=Math.floor(r[1]/48):\\\"streamtube\\\"===this.traceType&&(i.intensity=this.intensity[r[1]],i.velocity=this.vectors[r[1]].slice(0,3),i.divergence=this.vectors[r[1]][3],i.index=e),i},p.dispose=function(){this.texture.dispose(),this.triShader.dispose(),this.pickShader.dispose(),this.triangleVAO.dispose(),this.trianglePositions.dispose(),this.triangleVectors.dispose(),this.triangleColors.dispose(),this.triangleUVs.dispose(),this.triangleIds.dispose()},t.exports=function(t,e,r){var s=r.shaders;1===arguments.length&&(t=(e=t).gl);var l=function(t,e){var r=n(t,e.meshShader.vertex,e.meshShader.fragment,null,e.meshShader.attributes);return r.attributes.position.location=0,r.attributes.color.location=2,r.attributes.uv.location=3,r.attributes.vector.location=4,r}(t,s),c=function(t,e){var r=n(t,e.pickShader.vertex,e.pickShader.fragment,null,e.pickShader.attributes);return r.attributes.position.location=0,r.attributes.id.location=1,r.attributes.vector.location=4,r}(t,s),f=o(t,u(new Uint8Array([255,255,255,255]),[1,1,4]));f.generateMipmap(),f.minFilter=t.LINEAR_MIPMAP_LINEAR,f.magFilter=t.LINEAR;var p=i(t),d=i(t),v=i(t),g=i(t),y=i(t),m=new h(t,f,l,c,p,d,y,v,g,a(t,[{buffer:p,type:t.FLOAT,size:4},{buffer:y,type:t.UNSIGNED_BYTE,size:4,normalized:!0},{buffer:v,type:t.FLOAT,size:4},{buffer:g,type:t.FLOAT,size:2},{buffer:d,type:t.FLOAT,size:4}]),r.traceType||\\\"cone\\\");return m.update(e),m}},7234:function(t,e,r){var n=r(6832),i=n([\\\"precision highp float;\\\\n\\\\nprecision highp float;\\\\n#define GLSLIFY 1\\\\n\\\\nvec3 getOrthogonalVector(vec3 v) {\\\\n  // Return up-vector for only-z vector.\\\\n  // Return ax + by + cz = 0, a point that lies on the plane that has v as a normal and that isn't (0,0,0).\\\\n  // From the above if-statement we have ||a|| > 0  U  ||b|| > 0.\\\\n  // Assign z = 0, x = -b, y = a:\\\\n  // a*-b + b*a + c*0 = -ba + ba + 0 = 0\\\\n  if (v.x*v.x > v.z*v.z || v.y*v.y > v.z*v.z) {\\\\n    return normalize(vec3(-v.y, v.x, 0.0));\\\\n  } else {\\\\n    return normalize(vec3(0.0, v.z, -v.y));\\\\n  }\\\\n}\\\\n\\\\n// Calculate the cone vertex and normal at the given index.\\\\n//\\\\n// The returned vertex is for a cone with its top at origin and height of 1.0,\\\\n// pointing in the direction of the vector attribute.\\\\n//\\\\n// Each cone is made up of a top vertex, a center base vertex and base perimeter vertices.\\\\n// These vertices are used to make up the triangles of the cone by the following:\\\\n//   segment + 0 top vertex\\\\n//   segment + 1 perimeter vertex a+1\\\\n//   segment + 2 perimeter vertex a\\\\n//   segment + 3 center base vertex\\\\n//   segment + 4 perimeter vertex a\\\\n//   segment + 5 perimeter vertex a+1\\\\n// Where segment is the number of the radial segment * 6 and a is the angle at that radial segment.\\\\n// To go from index to segment, floor(index / 6)\\\\n// To go from segment to angle, 2*pi * (segment/segmentCount)\\\\n// To go from index to segment index, index - (segment*6)\\\\n//\\\\nvec3 getConePosition(vec3 d, float rawIndex, float coneOffset, out vec3 normal) {\\\\n\\\\n  const float segmentCount = 8.0;\\\\n\\\\n  float index = rawIndex - floor(rawIndex /\\\\n    (segmentCount * 6.0)) *\\\\n    (segmentCount * 6.0);\\\\n\\\\n  float segment = floor(0.001 + index/6.0);\\\\n  float segmentIndex = index - (segment*6.0);\\\\n\\\\n  normal = -normalize(d);\\\\n\\\\n  if (segmentIndex > 2.99 && segmentIndex < 3.01) {\\\\n    return mix(vec3(0.0), -d, coneOffset);\\\\n  }\\\\n\\\\n  float nextAngle = (\\\\n    (segmentIndex > 0.99 &&  segmentIndex < 1.01) ||\\\\n    (segmentIndex > 4.99 &&  segmentIndex < 5.01)\\\\n  ) ? 1.0 : 0.0;\\\\n  float angle = 2.0 * 3.14159 * ((segment + nextAngle) / segmentCount);\\\\n\\\\n  vec3 v1 = mix(d, vec3(0.0), coneOffset);\\\\n  vec3 v2 = v1 - d;\\\\n\\\\n  vec3 u = getOrthogonalVector(d);\\\\n  vec3 v = normalize(cross(u, d));\\\\n\\\\n  vec3 x = u * cos(angle) * length(d)*0.25;\\\\n  vec3 y = v * sin(angle) * length(d)*0.25;\\\\n  vec3 v3 = v2 + x + y;\\\\n  if (segmentIndex < 3.0) {\\\\n    vec3 tx = u * sin(angle);\\\\n    vec3 ty = v * -cos(angle);\\\\n    vec3 tangent = tx + ty;\\\\n    normal = normalize(cross(v3 - v1, tangent));\\\\n  }\\\\n\\\\n  if (segmentIndex == 0.0) {\\\\n    return mix(d, vec3(0.0), coneOffset);\\\\n  }\\\\n  return v3;\\\\n}\\\\n\\\\nattribute vec3 vector;\\\\nattribute vec4 color, position;\\\\nattribute vec2 uv;\\\\n\\\\nuniform float vectorScale, coneScale, coneOffset;\\\\nuniform mat4 model, view, projection, inverseModel;\\\\nuniform vec3 eyePosition, lightPosition;\\\\n\\\\nvarying vec3 f_normal, f_lightDirection, f_eyeDirection, f_data, f_position;\\\\nvarying vec4 f_color;\\\\nvarying vec2 f_uv;\\\\n\\\\nvoid main() {\\\\n  // Scale the vector magnitude to stay constant with\\\\n  // model & view changes.\\\\n  vec3 normal;\\\\n  vec3 XYZ = getConePosition(mat3(model) * ((vectorScale * coneScale) * vector), position.w, coneOffset, normal);\\\\n  vec4 conePosition = model * vec4(position.xyz, 1.0) + vec4(XYZ, 0.0);\\\\n\\\\n  //Lighting geometry parameters\\\\n  vec4 cameraCoordinate = view * conePosition;\\\\n  cameraCoordinate.xyz /= cameraCoordinate.w;\\\\n  f_lightDirection = lightPosition - cameraCoordinate.xyz;\\\\n  f_eyeDirection   = eyePosition - cameraCoordinate.xyz;\\\\n  f_normal = normalize((vec4(normal, 0.0) * inverseModel).xyz);\\\\n\\\\n  // vec4 m_position  = model * vec4(conePosition, 1.0);\\\\n  vec4 t_position  = view * conePosition;\\\\n  gl_Position      = projection * t_position;\\\\n\\\\n  f_color          = color;\\\\n  f_data           = conePosition.xyz;\\\\n  f_position       = position.xyz;\\\\n  f_uv             = uv;\\\\n}\\\\n\\\"]),a=n([\\\"#extension GL_OES_standard_derivatives : enable\\\\n\\\\nprecision highp float;\\\\n#define GLSLIFY 1\\\\n\\\\nfloat beckmannDistribution(float x, float roughness) {\\\\n  float NdotH = max(x, 0.0001);\\\\n  float cos2Alpha = NdotH * NdotH;\\\\n  float tan2Alpha = (cos2Alpha - 1.0) / cos2Alpha;\\\\n  float roughness2 = roughness * roughness;\\\\n  float denom = 3.141592653589793 * roughness2 * cos2Alpha * cos2Alpha;\\\\n  return exp(tan2Alpha / roughness2) / denom;\\\\n}\\\\n\\\\nfloat cookTorranceSpecular(\\\\n  vec3 lightDirection,\\\\n  vec3 viewDirection,\\\\n  vec3 surfaceNormal,\\\\n  float roughness,\\\\n  float fresnel) {\\\\n\\\\n  float VdotN = max(dot(viewDirection, surfaceNormal), 0.0);\\\\n  float LdotN = max(dot(lightDirection, surfaceNormal), 0.0);\\\\n\\\\n  //Half angle vector\\\\n  vec3 H = normalize(lightDirection + viewDirection);\\\\n\\\\n  //Geometric term\\\\n  float NdotH = max(dot(surfaceNormal, H), 0.0);\\\\n  float VdotH = max(dot(viewDirection, H), 0.000001);\\\\n  float LdotH = max(dot(lightDirection, H), 0.000001);\\\\n  float G1 = (2.0 * NdotH * VdotN) / VdotH;\\\\n  float G2 = (2.0 * NdotH * LdotN) / LdotH;\\\\n  float G = min(1.0, min(G1, G2));\\\\n  \\\\n  //Distribution term\\\\n  float D = beckmannDistribution(NdotH, roughness);\\\\n\\\\n  //Fresnel term\\\\n  float F = pow(1.0 - VdotN, fresnel);\\\\n\\\\n  //Multiply terms and done\\\\n  return  G * F * D / max(3.14159265 * VdotN, 0.000001);\\\\n}\\\\n\\\\nbool outOfRange(float a, float b, float p) {\\\\n  return ((p > max(a, b)) || \\\\n          (p < min(a, b)));\\\\n}\\\\n\\\\nbool outOfRange(vec2 a, vec2 b, vec2 p) {\\\\n  return (outOfRange(a.x, b.x, p.x) ||\\\\n          outOfRange(a.y, b.y, p.y));\\\\n}\\\\n\\\\nbool outOfRange(vec3 a, vec3 b, vec3 p) {\\\\n  return (outOfRange(a.x, b.x, p.x) ||\\\\n          outOfRange(a.y, b.y, p.y) ||\\\\n          outOfRange(a.z, b.z, p.z));\\\\n}\\\\n\\\\nbool outOfRange(vec4 a, vec4 b, vec4 p) {\\\\n  return outOfRange(a.xyz, b.xyz, p.xyz);\\\\n}\\\\n\\\\nuniform vec3 clipBounds[2];\\\\nuniform float roughness, fresnel, kambient, kdiffuse, kspecular, opacity;\\\\nuniform sampler2D texture;\\\\n\\\\nvarying vec3 f_normal, f_lightDirection, f_eyeDirection, f_data, f_position;\\\\nvarying vec4 f_color;\\\\nvarying vec2 f_uv;\\\\n\\\\nvoid main() {\\\\n  if (outOfRange(clipBounds[0], clipBounds[1], f_position)) discard;\\\\n  vec3 N = normalize(f_normal);\\\\n  vec3 L = normalize(f_lightDirection);\\\\n  vec3 V = normalize(f_eyeDirection);\\\\n\\\\n  if(gl_FrontFacing) {\\\\n    N = -N;\\\\n  }\\\\n\\\\n  float specular = min(1.0, max(0.0, cookTorranceSpecular(L, V, N, roughness, fresnel)));\\\\n  float diffuse  = min(kambient + kdiffuse * max(dot(N, L), 0.0), 1.0);\\\\n\\\\n  vec4 surfaceColor = f_color * texture2D(texture, f_uv);\\\\n  vec4 litColor = surfaceColor.a * vec4(diffuse * surfaceColor.rgb + kspecular * vec3(1,1,1) * specular,  1.0);\\\\n\\\\n  gl_FragColor = litColor * opacity;\\\\n}\\\\n\\\"]),o=n([\\\"precision highp float;\\\\n\\\\nprecision highp float;\\\\n#define GLSLIFY 1\\\\n\\\\nvec3 getOrthogonalVector(vec3 v) {\\\\n  // Return up-vector for only-z vector.\\\\n  // Return ax + by + cz = 0, a point that lies on the plane that has v as a normal and that isn't (0,0,0).\\\\n  // From the above if-statement we have ||a|| > 0  U  ||b|| > 0.\\\\n  // Assign z = 0, x = -b, y = a:\\\\n  // a*-b + b*a + c*0 = -ba + ba + 0 = 0\\\\n  if (v.x*v.x > v.z*v.z || v.y*v.y > v.z*v.z) {\\\\n    return normalize(vec3(-v.y, v.x, 0.0));\\\\n  } else {\\\\n    return normalize(vec3(0.0, v.z, -v.y));\\\\n  }\\\\n}\\\\n\\\\n// Calculate the cone vertex and normal at the given index.\\\\n//\\\\n// The returned vertex is for a cone with its top at origin and height of 1.0,\\\\n// pointing in the direction of the vector attribute.\\\\n//\\\\n// Each cone is made up of a top vertex, a center base vertex and base perimeter vertices.\\\\n// These vertices are used to make up the triangles of the cone by the following:\\\\n//   segment + 0 top vertex\\\\n//   segment + 1 perimeter vertex a+1\\\\n//   segment + 2 perimeter vertex a\\\\n//   segment + 3 center base vertex\\\\n//   segment + 4 perimeter vertex a\\\\n//   segment + 5 perimeter vertex a+1\\\\n// Where segment is the number of the radial segment * 6 and a is the angle at that radial segment.\\\\n// To go from index to segment, floor(index / 6)\\\\n// To go from segment to angle, 2*pi * (segment/segmentCount)\\\\n// To go from index to segment index, index - (segment*6)\\\\n//\\\\nvec3 getConePosition(vec3 d, float rawIndex, float coneOffset, out vec3 normal) {\\\\n\\\\n  const float segmentCount = 8.0;\\\\n\\\\n  float index = rawIndex - floor(rawIndex /\\\\n    (segmentCount * 6.0)) *\\\\n    (segmentCount * 6.0);\\\\n\\\\n  float segment = floor(0.001 + index/6.0);\\\\n  float segmentIndex = index - (segment*6.0);\\\\n\\\\n  normal = -normalize(d);\\\\n\\\\n  if (segmentIndex > 2.99 && segmentIndex < 3.01) {\\\\n    return mix(vec3(0.0), -d, coneOffset);\\\\n  }\\\\n\\\\n  float nextAngle = (\\\\n    (segmentIndex > 0.99 &&  segmentIndex < 1.01) ||\\\\n    (segmentIndex > 4.99 &&  segmentIndex < 5.01)\\\\n  ) ? 1.0 : 0.0;\\\\n  float angle = 2.0 * 3.14159 * ((segment + nextAngle) / segmentCount);\\\\n\\\\n  vec3 v1 = mix(d, vec3(0.0), coneOffset);\\\\n  vec3 v2 = v1 - d;\\\\n\\\\n  vec3 u = getOrthogonalVector(d);\\\\n  vec3 v = normalize(cross(u, d));\\\\n\\\\n  vec3 x = u * cos(angle) * length(d)*0.25;\\\\n  vec3 y = v * sin(angle) * length(d)*0.25;\\\\n  vec3 v3 = v2 + x + y;\\\\n  if (segmentIndex < 3.0) {\\\\n    vec3 tx = u * sin(angle);\\\\n    vec3 ty = v * -cos(angle);\\\\n    vec3 tangent = tx + ty;\\\\n    normal = normalize(cross(v3 - v1, tangent));\\\\n  }\\\\n\\\\n  if (segmentIndex == 0.0) {\\\\n    return mix(d, vec3(0.0), coneOffset);\\\\n  }\\\\n  return v3;\\\\n}\\\\n\\\\nattribute vec4 vector;\\\\nattribute vec4 position;\\\\nattribute vec4 id;\\\\n\\\\nuniform mat4 model, view, projection;\\\\nuniform float vectorScale, coneScale, coneOffset;\\\\n\\\\nvarying vec3 f_position;\\\\nvarying vec4 f_id;\\\\n\\\\nvoid main() {\\\\n  vec3 normal;\\\\n  vec3 XYZ = getConePosition(mat3(model) * ((vectorScale * coneScale) * vector.xyz), position.w, coneOffset, normal);\\\\n  vec4 conePosition = model * vec4(position.xyz, 1.0) + vec4(XYZ, 0.0);\\\\n  gl_Position = projection * view * conePosition;\\\\n  f_id        = id;\\\\n  f_position  = position.xyz;\\\\n}\\\\n\\\"]),s=n([\\\"precision highp float;\\\\n#define GLSLIFY 1\\\\n\\\\nbool outOfRange(float a, float b, float p) {\\\\n  return ((p > max(a, b)) || \\\\n          (p < min(a, b)));\\\\n}\\\\n\\\\nbool outOfRange(vec2 a, vec2 b, vec2 p) {\\\\n  return (outOfRange(a.x, b.x, p.x) ||\\\\n          outOfRange(a.y, b.y, p.y));\\\\n}\\\\n\\\\nbool outOfRange(vec3 a, vec3 b, vec3 p) {\\\\n  return (outOfRange(a.x, b.x, p.x) ||\\\\n          outOfRange(a.y, b.y, p.y) ||\\\\n          outOfRange(a.z, b.z, p.z));\\\\n}\\\\n\\\\nbool outOfRange(vec4 a, vec4 b, vec4 p) {\\\\n  return outOfRange(a.xyz, b.xyz, p.xyz);\\\\n}\\\\n\\\\nuniform vec3  clipBounds[2];\\\\nuniform float pickId;\\\\n\\\\nvarying vec3 f_position;\\\\nvarying vec4 f_id;\\\\n\\\\nvoid main() {\\\\n  if (outOfRange(clipBounds[0], clipBounds[1], f_position)) discard;\\\\n\\\\n  gl_FragColor = vec4(pickId, f_id.xyz);\\\\n}\\\"]);e.meshShader={vertex:i,fragment:a,attributes:[{name:\\\"position\\\",type:\\\"vec4\\\"},{name:\\\"color\\\",type:\\\"vec4\\\"},{name:\\\"uv\\\",type:\\\"vec2\\\"},{name:\\\"vector\\\",type:\\\"vec3\\\"}]},e.pickShader={vertex:o,fragment:s,attributes:[{name:\\\"position\\\",type:\\\"vec4\\\"},{name:\\\"id\\\",type:\\\"vec4\\\"},{name:\\\"vector\\\",type:\\\"vec3\\\"}]}},1950:function(t){t.exports={0:\\\"NONE\\\",1:\\\"ONE\\\",2:\\\"LINE_LOOP\\\",3:\\\"LINE_STRIP\\\",4:\\\"TRIANGLES\\\",5:\\\"TRIANGLE_STRIP\\\",6:\\\"TRIANGLE_FAN\\\",256:\\\"DEPTH_BUFFER_BIT\\\",512:\\\"NEVER\\\",513:\\\"LESS\\\",514:\\\"EQUAL\\\",515:\\\"LEQUAL\\\",516:\\\"GREATER\\\",517:\\\"NOTEQUAL\\\",518:\\\"GEQUAL\\\",519:\\\"ALWAYS\\\",768:\\\"SRC_COLOR\\\",769:\\\"ONE_MINUS_SRC_COLOR\\\",770:\\\"SRC_ALPHA\\\",771:\\\"ONE_MINUS_SRC_ALPHA\\\",772:\\\"DST_ALPHA\\\",773:\\\"ONE_MINUS_DST_ALPHA\\\",774:\\\"DST_COLOR\\\",775:\\\"ONE_MINUS_DST_COLOR\\\",776:\\\"SRC_ALPHA_SATURATE\\\",1024:\\\"STENCIL_BUFFER_BIT\\\",1028:\\\"FRONT\\\",1029:\\\"BACK\\\",1032:\\\"FRONT_AND_BACK\\\",1280:\\\"INVALID_ENUM\\\",1281:\\\"INVALID_VALUE\\\",1282:\\\"INVALID_OPERATION\\\",1285:\\\"OUT_OF_MEMORY\\\",1286:\\\"INVALID_FRAMEBUFFER_OPERATION\\\",2304:\\\"CW\\\",2305:\\\"CCW\\\",2849:\\\"LINE_WIDTH\\\",2884:\\\"CULL_FACE\\\",2885:\\\"CULL_FACE_MODE\\\",2886:\\\"FRONT_FACE\\\",2928:\\\"DEPTH_RANGE\\\",2929:\\\"DEPTH_TEST\\\",2930:\\\"DEPTH_WRITEMASK\\\",2931:\\\"DEPTH_CLEAR_VALUE\\\",2932:\\\"DEPTH_FUNC\\\",2960:\\\"STENCIL_TEST\\\",2961:\\\"STENCIL_CLEAR_VALUE\\\",2962:\\\"STENCIL_FUNC\\\",2963:\\\"STENCIL_VALUE_MASK\\\",2964:\\\"STENCIL_FAIL\\\",2965:\\\"STENCIL_PASS_DEPTH_FAIL\\\",2966:\\\"STENCIL_PASS_DEPTH_PASS\\\",2967:\\\"STENCIL_REF\\\",2968:\\\"STENCIL_WRITEMASK\\\",2978:\\\"VIEWPORT\\\",3024:\\\"DITHER\\\",3042:\\\"BLEND\\\",3088:\\\"SCISSOR_BOX\\\",3089:\\\"SCISSOR_TEST\\\",3106:\\\"COLOR_CLEAR_VALUE\\\",3107:\\\"COLOR_WRITEMASK\\\",3317:\\\"UNPACK_ALIGNMENT\\\",3333:\\\"PACK_ALIGNMENT\\\",3379:\\\"MAX_TEXTURE_SIZE\\\",3386:\\\"MAX_VIEWPORT_DIMS\\\",3408:\\\"SUBPIXEL_BITS\\\",3410:\\\"RED_BITS\\\",3411:\\\"GREEN_BITS\\\",3412:\\\"BLUE_BITS\\\",3413:\\\"ALPHA_BITS\\\",3414:\\\"DEPTH_BITS\\\",3415:\\\"STENCIL_BITS\\\",3553:\\\"TEXTURE_2D\\\",4352:\\\"DONT_CARE\\\",4353:\\\"FASTEST\\\",4354:\\\"NICEST\\\",5120:\\\"BYTE\\\",5121:\\\"UNSIGNED_BYTE\\\",5122:\\\"SHORT\\\",5123:\\\"UNSIGNED_SHORT\\\",5124:\\\"INT\\\",5125:\\\"UNSIGNED_INT\\\",5126:\\\"FLOAT\\\",5386:\\\"INVERT\\\",5890:\\\"TEXTURE\\\",6401:\\\"STENCIL_INDEX\\\",6402:\\\"DEPTH_COMPONENT\\\",6406:\\\"ALPHA\\\",6407:\\\"RGB\\\",6408:\\\"RGBA\\\",6409:\\\"LUMINANCE\\\",6410:\\\"LUMINANCE_ALPHA\\\",7680:\\\"KEEP\\\",7681:\\\"REPLACE\\\",7682:\\\"INCR\\\",7683:\\\"DECR\\\",7936:\\\"VENDOR\\\",7937:\\\"RENDERER\\\",7938:\\\"VERSION\\\",9728:\\\"NEAREST\\\",9729:\\\"LINEAR\\\",9984:\\\"NEAREST_MIPMAP_NEAREST\\\",9985:\\\"LINEAR_MIPMAP_NEAREST\\\",9986:\\\"NEAREST_MIPMAP_LINEAR\\\",9987:\\\"LINEAR_MIPMAP_LINEAR\\\",10240:\\\"TEXTURE_MAG_FILTER\\\",10241:\\\"TEXTURE_MIN_FILTER\\\",10242:\\\"TEXTURE_WRAP_S\\\",10243:\\\"TEXTURE_WRAP_T\\\",10497:\\\"REPEAT\\\",10752:\\\"POLYGON_OFFSET_UNITS\\\",16384:\\\"COLOR_BUFFER_BIT\\\",32769:\\\"CONSTANT_COLOR\\\",32770:\\\"ONE_MINUS_CONSTANT_COLOR\\\",32771:\\\"CONSTANT_ALPHA\\\",32772:\\\"ONE_MINUS_CONSTANT_ALPHA\\\",32773:\\\"BLEND_COLOR\\\",32774:\\\"FUNC_ADD\\\",32777:\\\"BLEND_EQUATION_RGB\\\",32778:\\\"FUNC_SUBTRACT\\\",32779:\\\"FUNC_REVERSE_SUBTRACT\\\",32819:\\\"UNSIGNED_SHORT_4_4_4_4\\\",32820:\\\"UNSIGNED_SHORT_5_5_5_1\\\",32823:\\\"POLYGON_OFFSET_FILL\\\",32824:\\\"POLYGON_OFFSET_FACTOR\\\",32854:\\\"RGBA4\\\",32855:\\\"RGB5_A1\\\",32873:\\\"TEXTURE_BINDING_2D\\\",32926:\\\"SAMPLE_ALPHA_TO_COVERAGE\\\",32928:\\\"SAMPLE_COVERAGE\\\",32936:\\\"SAMPLE_BUFFERS\\\",32937:\\\"SAMPLES\\\",32938:\\\"SAMPLE_COVERAGE_VALUE\\\",32939:\\\"SAMPLE_COVERAGE_INVERT\\\",32968:\\\"BLEND_DST_RGB\\\",32969:\\\"BLEND_SRC_RGB\\\",32970:\\\"BLEND_DST_ALPHA\\\",32971:\\\"BLEND_SRC_ALPHA\\\",33071:\\\"CLAMP_TO_EDGE\\\",33170:\\\"GENERATE_MIPMAP_HINT\\\",33189:\\\"DEPTH_COMPONENT16\\\",33306:\\\"DEPTH_STENCIL_ATTACHMENT\\\",33635:\\\"UNSIGNED_SHORT_5_6_5\\\",33648:\\\"MIRRORED_REPEAT\\\",33901:\\\"ALIASED_POINT_SIZE_RANGE\\\",33902:\\\"ALIASED_LINE_WIDTH_RANGE\\\",33984:\\\"TEXTURE0\\\",33985:\\\"TEXTURE1\\\",33986:\\\"TEXTURE2\\\",33987:\\\"TEXTURE3\\\",33988:\\\"TEXTURE4\\\",33989:\\\"TEXTURE5\\\",33990:\\\"TEXTURE6\\\",33991:\\\"TEXTURE7\\\",33992:\\\"TEXTURE8\\\",33993:\\\"TEXTURE9\\\",33994:\\\"TEXTURE10\\\",33995:\\\"TEXTURE11\\\",33996:\\\"TEXTURE12\\\",33997:\\\"TEXTURE13\\\",33998:\\\"TEXTURE14\\\",33999:\\\"TEXTURE15\\\",34e3:\\\"TEXTURE16\\\",34001:\\\"TEXTURE17\\\",34002:\\\"TEXTURE18\\\",34003:\\\"TEXTURE19\\\",34004:\\\"TEXTURE20\\\",34005:\\\"TEXTURE21\\\",34006:\\\"TEXTURE22\\\",34007:\\\"TEXTURE23\\\",34008:\\\"TEXTURE24\\\",34009:\\\"TEXTURE25\\\",34010:\\\"TEXTURE26\\\",34011:\\\"TEXTURE27\\\",34012:\\\"TEXTURE28\\\",34013:\\\"TEXTURE29\\\",34014:\\\"TEXTURE30\\\",34015:\\\"TEXTURE31\\\",34016:\\\"ACTIVE_TEXTURE\\\",34024:\\\"MAX_RENDERBUFFER_SIZE\\\",34041:\\\"DEPTH_STENCIL\\\",34055:\\\"INCR_WRAP\\\",34056:\\\"DECR_WRAP\\\",34067:\\\"TEXTURE_CUBE_MAP\\\",34068:\\\"TEXTURE_BINDING_CUBE_MAP\\\",34069:\\\"TEXTURE_CUBE_MAP_POSITIVE_X\\\",34070:\\\"TEXTURE_CUBE_MAP_NEGATIVE_X\\\",34071:\\\"TEXTURE_CUBE_MAP_POSITIVE_Y\\\",34072:\\\"TEXTURE_CUBE_MAP_NEGATIVE_Y\\\",34073:\\\"TEXTURE_CUBE_MAP_POSITIVE_Z\\\",34074:\\\"TEXTURE_CUBE_MAP_NEGATIVE_Z\\\",34076:\\\"MAX_CUBE_MAP_TEXTURE_SIZE\\\",34338:\\\"VERTEX_ATTRIB_ARRAY_ENABLED\\\",34339:\\\"VERTEX_ATTRIB_ARRAY_SIZE\\\",34340:\\\"VERTEX_ATTRIB_ARRAY_STRIDE\\\",34341:\\\"VERTEX_ATTRIB_ARRAY_TYPE\\\",34342:\\\"CURRENT_VERTEX_ATTRIB\\\",34373:\\\"VERTEX_ATTRIB_ARRAY_POINTER\\\",34466:\\\"NUM_COMPRESSED_TEXTURE_FORMATS\\\",34467:\\\"COMPRESSED_TEXTURE_FORMATS\\\",34660:\\\"BUFFER_SIZE\\\",34661:\\\"BUFFER_USAGE\\\",34816:\\\"STENCIL_BACK_FUNC\\\",34817:\\\"STENCIL_BACK_FAIL\\\",34818:\\\"STENCIL_BACK_PASS_DEPTH_FAIL\\\",34819:\\\"STENCIL_BACK_PASS_DEPTH_PASS\\\",34877:\\\"BLEND_EQUATION_ALPHA\\\",34921:\\\"MAX_VERTEX_ATTRIBS\\\",34922:\\\"VERTEX_ATTRIB_ARRAY_NORMALIZED\\\",34930:\\\"MAX_TEXTURE_IMAGE_UNITS\\\",34962:\\\"ARRAY_BUFFER\\\",34963:\\\"ELEMENT_ARRAY_BUFFER\\\",34964:\\\"ARRAY_BUFFER_BINDING\\\",34965:\\\"ELEMENT_ARRAY_BUFFER_BINDING\\\",34975:\\\"VERTEX_ATTRIB_ARRAY_BUFFER_BINDING\\\",35040:\\\"STREAM_DRAW\\\",35044:\\\"STATIC_DRAW\\\",35048:\\\"DYNAMIC_DRAW\\\",35632:\\\"FRAGMENT_SHADER\\\",35633:\\\"VERTEX_SHADER\\\",35660:\\\"MAX_VERTEX_TEXTURE_IMAGE_UNITS\\\",35661:\\\"MAX_COMBINED_TEXTURE_IMAGE_UNITS\\\",35663:\\\"SHADER_TYPE\\\",35664:\\\"FLOAT_VEC2\\\",35665:\\\"FLOAT_VEC3\\\",35666:\\\"FLOAT_VEC4\\\",35667:\\\"INT_VEC2\\\",35668:\\\"INT_VEC3\\\",35669:\\\"INT_VEC4\\\",35670:\\\"BOOL\\\",35671:\\\"BOOL_VEC2\\\",35672:\\\"BOOL_VEC3\\\",35673:\\\"BOOL_VEC4\\\",35674:\\\"FLOAT_MAT2\\\",35675:\\\"FLOAT_MAT3\\\",35676:\\\"FLOAT_MAT4\\\",35678:\\\"SAMPLER_2D\\\",35680:\\\"SAMPLER_CUBE\\\",35712:\\\"DELETE_STATUS\\\",35713:\\\"COMPILE_STATUS\\\",35714:\\\"LINK_STATUS\\\",35715:\\\"VALIDATE_STATUS\\\",35716:\\\"INFO_LOG_LENGTH\\\",35717:\\\"ATTACHED_SHADERS\\\",35718:\\\"ACTIVE_UNIFORMS\\\",35719:\\\"ACTIVE_UNIFORM_MAX_LENGTH\\\",35720:\\\"SHADER_SOURCE_LENGTH\\\",35721:\\\"ACTIVE_ATTRIBUTES\\\",35722:\\\"ACTIVE_ATTRIBUTE_MAX_LENGTH\\\",35724:\\\"SHADING_LANGUAGE_VERSION\\\",35725:\\\"CURRENT_PROGRAM\\\",36003:\\\"STENCIL_BACK_REF\\\",36004:\\\"STENCIL_BACK_VALUE_MASK\\\",36005:\\\"STENCIL_BACK_WRITEMASK\\\",36006:\\\"FRAMEBUFFER_BINDING\\\",36007:\\\"RENDERBUFFER_BINDING\\\",36048:\\\"FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE\\\",36049:\\\"FRAMEBUFFER_ATTACHMENT_OBJECT_NAME\\\",36050:\\\"FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL\\\",36051:\\\"FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE\\\",36053:\\\"FRAMEBUFFER_COMPLETE\\\",36054:\\\"FRAMEBUFFER_INCOMPLETE_ATTACHMENT\\\",36055:\\\"FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT\\\",36057:\\\"FRAMEBUFFER_INCOMPLETE_DIMENSIONS\\\",36061:\\\"FRAMEBUFFER_UNSUPPORTED\\\",36064:\\\"COLOR_ATTACHMENT0\\\",36096:\\\"DEPTH_ATTACHMENT\\\",36128:\\\"STENCIL_ATTACHMENT\\\",36160:\\\"FRAMEBUFFER\\\",36161:\\\"RENDERBUFFER\\\",36162:\\\"RENDERBUFFER_WIDTH\\\",36163:\\\"RENDERBUFFER_HEIGHT\\\",36164:\\\"RENDERBUFFER_INTERNAL_FORMAT\\\",36168:\\\"STENCIL_INDEX8\\\",36176:\\\"RENDERBUFFER_RED_SIZE\\\",36177:\\\"RENDERBUFFER_GREEN_SIZE\\\",36178:\\\"RENDERBUFFER_BLUE_SIZE\\\",36179:\\\"RENDERBUFFER_ALPHA_SIZE\\\",36180:\\\"RENDERBUFFER_DEPTH_SIZE\\\",36181:\\\"RENDERBUFFER_STENCIL_SIZE\\\",36194:\\\"RGB565\\\",36336:\\\"LOW_FLOAT\\\",36337:\\\"MEDIUM_FLOAT\\\",36338:\\\"HIGH_FLOAT\\\",36339:\\\"LOW_INT\\\",36340:\\\"MEDIUM_INT\\\",36341:\\\"HIGH_INT\\\",36346:\\\"SHADER_COMPILER\\\",36347:\\\"MAX_VERTEX_UNIFORM_VECTORS\\\",36348:\\\"MAX_VARYING_VECTORS\\\",36349:\\\"MAX_FRAGMENT_UNIFORM_VECTORS\\\",37440:\\\"UNPACK_FLIP_Y_WEBGL\\\",37441:\\\"UNPACK_PREMULTIPLY_ALPHA_WEBGL\\\",37442:\\\"CONTEXT_LOST_WEBGL\\\",37443:\\\"UNPACK_COLORSPACE_CONVERSION_WEBGL\\\",37444:\\\"BROWSER_DEFAULT_WEBGL\\\"}},6603:function(t,e,r){var n=r(1950);t.exports=function(t){return n[t]}},3110:function(t,e,r){\\\"use strict\\\";t.exports=function(t){var e=t.gl,r=n(e),o=i(e,[{buffer:r,type:e.FLOAT,size:3,offset:0,stride:40},{buffer:r,type:e.FLOAT,size:4,offset:12,stride:40},{buffer:r,type:e.FLOAT,size:3,offset:28,stride:40}]),l=a(e);l.attributes.position.location=0,l.attributes.color.location=1,l.attributes.offset.location=2;var u=new s(e,r,o,l);return u.update(t),u};var n=r(5827),i=r(2944),a=r(7667),o=[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1];function s(t,e,r,n){this.gl=t,this.shader=n,this.buffer=e,this.vao=r,this.pixelRatio=1,this.bounds=[[1/0,1/0,1/0],[-1/0,-1/0,-1/0]],this.clipBounds=[[-1/0,-1/0,-1/0],[1/0,1/0,1/0]],this.lineWidth=[1,1,1],this.capSize=[10,10,10],this.lineCount=[0,0,0],this.lineOffset=[0,0,0],this.opacity=1,this.hasAlpha=!1}var l=s.prototype;function u(t,e){for(var r=0;r<3;++r)t[0][r]=Math.min(t[0][r],e[r]),t[1][r]=Math.max(t[1][r],e[r])}l.isOpaque=function(){return!this.hasAlpha},l.isTransparent=function(){return this.hasAlpha},l.drawTransparent=l.draw=function(t){var e=this.gl,r=this.shader.uniforms;this.shader.bind();var n=r.view=t.view||o,i=r.projection=t.projection||o;r.model=t.model||o,r.clipBounds=this.clipBounds,r.opacity=this.opacity;var a=n[12],s=n[13],l=n[14],u=n[15],c=(t._ortho?2:1)*this.pixelRatio*(i[3]*a+i[7]*s+i[11]*l+i[15]*u)/e.drawingBufferHeight;this.vao.bind();for(var f=0;f<3;++f)e.lineWidth(this.lineWidth[f]*this.pixelRatio),r.capSize=this.capSize[f]*c,this.lineCount[f]&&e.drawArrays(e.LINES,this.lineOffset[f],this.lineCount[f]);this.vao.unbind()};var c=function(){for(var t=new Array(3),e=0;e<3;++e){for(var r=[],n=1;n<=2;++n)for(var i=-1;i<=1;i+=2){var a=[0,0,0];a[(n+e)%3]=i,r.push(a)}t[e]=r}return t}();function f(t,e,r,n){for(var i=c[n],a=0;a<i.length;++a){var o=i[a];t.push(e[0],e[1],e[2],r[0],r[1],r[2],r[3],o[0],o[1],o[2])}return i.length}l.update=function(t){\\\"lineWidth\\\"in(t=t||{})&&(this.lineWidth=t.lineWidth,Array.isArray(this.lineWidth)||(this.lineWidth=[this.lineWidth,this.lineWidth,this.lineWidth])),\\\"capSize\\\"in t&&(this.capSize=t.capSize,Array.isArray(this.capSize)||(this.capSize=[this.capSize,this.capSize,this.capSize])),this.hasAlpha=!1,\\\"opacity\\\"in t&&(this.opacity=+t.opacity,this.opacity<1&&(this.hasAlpha=!0));var e=t.color||[[0,0,0],[0,0,0],[0,0,0]],r=t.position,n=t.error;if(Array.isArray(e[0])||(e=[e,e,e]),r&&n){var i=[],a=r.length,o=0;this.bounds=[[1/0,1/0,1/0],[-1/0,-1/0,-1/0]],this.lineCount=[0,0,0];for(var s=0;s<3;++s){this.lineOffset[s]=o;t:for(var l=0;l<a;++l){for(var c=r[l],h=0;h<3;++h)if(isNaN(c[h])||!isFinite(c[h]))continue t;var p,d=n[l],v=e[s];Array.isArray(v[0])&&(v=e[l]),3===v.length?v=[v[0],v[1],v[2],1]:4===v.length&&(v=[v[0],v[1],v[2],v[3]],!this.hasAlpha&&v[3]<1&&(this.hasAlpha=!0)),isNaN(d[0][s])||isNaN(d[1][s])||(d[0][s]<0&&((p=c.slice())[s]+=d[0][s],i.push(c[0],c[1],c[2],v[0],v[1],v[2],v[3],0,0,0,p[0],p[1],p[2],v[0],v[1],v[2],v[3],0,0,0),u(this.bounds,p),o+=2+f(i,p,v,s)),d[1][s]>0&&((p=c.slice())[s]+=d[1][s],i.push(c[0],c[1],c[2],v[0],v[1],v[2],v[3],0,0,0,p[0],p[1],p[2],v[0],v[1],v[2],v[3],0,0,0),u(this.bounds,p),o+=2+f(i,p,v,s)))}this.lineCount[s]=o-this.lineOffset[s]}this.buffer.update(i)}},l.dispose=function(){this.shader.dispose(),this.buffer.dispose(),this.vao.dispose()}},7667:function(t,e,r){\\\"use strict\\\";var n=r(6832),i=r(5158),a=n([\\\"precision highp float;\\\\n#define GLSLIFY 1\\\\n\\\\nattribute vec3 position, offset;\\\\nattribute vec4 color;\\\\nuniform mat4 model, view, projection;\\\\nuniform float capSize;\\\\nvarying vec4 fragColor;\\\\nvarying vec3 fragPosition;\\\\n\\\\nvoid main() {\\\\n  vec4 worldPosition  = model * vec4(position, 1.0);\\\\n  worldPosition       = (worldPosition / worldPosition.w) + vec4(capSize * offset, 0.0);\\\\n  gl_Position         = projection * view * worldPosition;\\\\n  fragColor           = color;\\\\n  fragPosition        = position;\\\\n}\\\"]),o=n([\\\"precision highp float;\\\\n#define GLSLIFY 1\\\\n\\\\nbool outOfRange(float a, float b, float p) {\\\\n  return ((p > max(a, b)) || \\\\n          (p < min(a, b)));\\\\n}\\\\n\\\\nbool outOfRange(vec2 a, vec2 b, vec2 p) {\\\\n  return (outOfRange(a.x, b.x, p.x) ||\\\\n          outOfRange(a.y, b.y, p.y));\\\\n}\\\\n\\\\nbool outOfRange(vec3 a, vec3 b, vec3 p) {\\\\n  return (outOfRange(a.x, b.x, p.x) ||\\\\n          outOfRange(a.y, b.y, p.y) ||\\\\n          outOfRange(a.z, b.z, p.z));\\\\n}\\\\n\\\\nbool outOfRange(vec4 a, vec4 b, vec4 p) {\\\\n  return outOfRange(a.xyz, b.xyz, p.xyz);\\\\n}\\\\n\\\\nuniform vec3 clipBounds[2];\\\\nuniform float opacity;\\\\nvarying vec3 fragPosition;\\\\nvarying vec4 fragColor;\\\\n\\\\nvoid main() {\\\\n  if (\\\\n    outOfRange(clipBounds[0], clipBounds[1], fragPosition) ||\\\\n    fragColor.a * opacity == 0.\\\\n  ) discard;\\\\n\\\\n  gl_FragColor = opacity * fragColor;\\\\n}\\\"]);t.exports=function(t){return i(t,a,o,null,[{name:\\\"position\\\",type:\\\"vec3\\\"},{name:\\\"color\\\",type:\\\"vec4\\\"},{name:\\\"offset\\\",type:\\\"vec3\\\"}])}},4234:function(t,e,r){\\\"use strict\\\";var n=r(8931);t.exports=function(t,e,r,n){i||(i=t.FRAMEBUFFER_UNSUPPORTED,a=t.FRAMEBUFFER_INCOMPLETE_ATTACHMENT,o=t.FRAMEBUFFER_INCOMPLETE_DIMENSIONS,s=t.FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT);var u=t.getExtension(\\\"WEBGL_draw_buffers\\\");if(!l&&u&&function(t,e){var r=t.getParameter(e.MAX_COLOR_ATTACHMENTS_WEBGL);l=new Array(r+1);for(var n=0;n<=r;++n){for(var i=new Array(r),a=0;a<n;++a)i[a]=t.COLOR_ATTACHMENT0+a;for(a=n;a<r;++a)i[a]=t.NONE;l[n]=i}}(t,u),Array.isArray(e)&&(n=r,r=0|e[1],e=0|e[0]),\\\"number\\\"!=typeof e)throw new Error(\\\"gl-fbo: Missing shape parameter\\\");var c=t.getParameter(t.MAX_RENDERBUFFER_SIZE);if(e<0||e>c||r<0||r>c)throw new Error(\\\"gl-fbo: Parameters are too large for FBO\\\");var f=1;if(\\\"color\\\"in(n=n||{})){if((f=Math.max(0|n.color,0))<0)throw new Error(\\\"gl-fbo: Must specify a nonnegative number of colors\\\");if(f>1){if(!u)throw new Error(\\\"gl-fbo: Multiple draw buffer extension not supported\\\");if(f>t.getParameter(u.MAX_COLOR_ATTACHMENTS_WEBGL))throw new Error(\\\"gl-fbo: Context does not support \\\"+f+\\\" draw buffers\\\")}}var h=t.UNSIGNED_BYTE,p=t.getExtension(\\\"OES_texture_float\\\");if(n.float&&f>0){if(!p)throw new Error(\\\"gl-fbo: Context does not support floating point textures\\\");h=t.FLOAT}else n.preferFloat&&f>0&&p&&(h=t.FLOAT);var v=!0;\\\"depth\\\"in n&&(v=!!n.depth);var g=!1;return\\\"stencil\\\"in n&&(g=!!n.stencil),new d(t,e,r,h,f,v,g,u)};var i,a,o,s,l=null;function u(t){return[t.getParameter(t.FRAMEBUFFER_BINDING),t.getParameter(t.RENDERBUFFER_BINDING),t.getParameter(t.TEXTURE_BINDING_2D)]}function c(t,e){t.bindFramebuffer(t.FRAMEBUFFER,e[0]),t.bindRenderbuffer(t.RENDERBUFFER,e[1]),t.bindTexture(t.TEXTURE_2D,e[2])}function f(t){switch(t){case i:throw new Error(\\\"gl-fbo: Framebuffer unsupported\\\");case a:throw new Error(\\\"gl-fbo: Framebuffer incomplete attachment\\\");case o:throw new Error(\\\"gl-fbo: Framebuffer incomplete dimensions\\\");case s:throw new Error(\\\"gl-fbo: Framebuffer incomplete missing attachment\\\");default:throw new Error(\\\"gl-fbo: Framebuffer failed for unspecified reason\\\")}}function h(t,e,r,i,a,o){if(!i)return null;var s=n(t,e,r,a,i);return s.magFilter=t.NEAREST,s.minFilter=t.NEAREST,s.mipSamples=1,s.bind(),t.framebufferTexture2D(t.FRAMEBUFFER,o,t.TEXTURE_2D,s.handle,0),s}function p(t,e,r,n,i){var a=t.createRenderbuffer();return t.bindRenderbuffer(t.RENDERBUFFER,a),t.renderbufferStorage(t.RENDERBUFFER,n,e,r),t.framebufferRenderbuffer(t.FRAMEBUFFER,i,t.RENDERBUFFER,a),a}function d(t,e,r,n,i,a,o,s){this.gl=t,this._shape=[0|e,0|r],this._destroyed=!1,this._ext=s,this.color=new Array(i);for(var d=0;d<i;++d)this.color[d]=null;this._color_rb=null,this.depth=null,this._depth_rb=null,this._colorType=n,this._useDepth=a,this._useStencil=o;var v=this,g=[0|e,0|r];Object.defineProperties(g,{0:{get:function(){return v._shape[0]},set:function(t){return v.width=t}},1:{get:function(){return v._shape[1]},set:function(t){return v.height=t}}}),this._shapeVector=g,function(t){var e=u(t.gl),r=t.gl,n=t.handle=r.createFramebuffer(),i=t._shape[0],a=t._shape[1],o=t.color.length,s=t._ext,d=t._useStencil,v=t._useDepth,g=t._colorType;r.bindFramebuffer(r.FRAMEBUFFER,n);for(var y=0;y<o;++y)t.color[y]=h(r,i,a,g,r.RGBA,r.COLOR_ATTACHMENT0+y);0===o?(t._color_rb=p(r,i,a,r.RGBA4,r.COLOR_ATTACHMENT0),s&&s.drawBuffersWEBGL(l[0])):o>1&&s.drawBuffersWEBGL(l[o]);var m=r.getExtension(\\\"WEBGL_depth_texture\\\");m?d?t.depth=h(r,i,a,m.UNSIGNED_INT_24_8_WEBGL,r.DEPTH_STENCIL,r.DEPTH_STENCIL_ATTACHMENT):v&&(t.depth=h(r,i,a,r.UNSIGNED_SHORT,r.DEPTH_COMPONENT,r.DEPTH_ATTACHMENT)):v&&d?t._depth_rb=p(r,i,a,r.DEPTH_STENCIL,r.DEPTH_STENCIL_ATTACHMENT):v?t._depth_rb=p(r,i,a,r.DEPTH_COMPONENT16,r.DEPTH_ATTACHMENT):d&&(t._depth_rb=p(r,i,a,r.STENCIL_INDEX,r.STENCIL_ATTACHMENT));var x=r.checkFramebufferStatus(r.FRAMEBUFFER);if(x!==r.FRAMEBUFFER_COMPLETE){for(t._destroyed=!0,r.bindFramebuffer(r.FRAMEBUFFER,null),r.deleteFramebuffer(t.handle),t.handle=null,t.depth&&(t.depth.dispose(),t.depth=null),t._depth_rb&&(r.deleteRenderbuffer(t._depth_rb),t._depth_rb=null),y=0;y<t.color.length;++y)t.color[y].dispose(),t.color[y]=null;t._color_rb&&(r.deleteRenderbuffer(t._color_rb),t._color_rb=null),c(r,e),f(x)}c(r,e)}(this)}var v=d.prototype;function g(t,e,r){if(t._destroyed)throw new Error(\\\"gl-fbo: Can't resize destroyed FBO\\\");if(t._shape[0]!==e||t._shape[1]!==r){var n=t.gl,i=n.getParameter(n.MAX_RENDERBUFFER_SIZE);if(e<0||e>i||r<0||r>i)throw new Error(\\\"gl-fbo: Can't resize FBO, invalid dimensions\\\");t._shape[0]=e,t._shape[1]=r;for(var a=u(n),o=0;o<t.color.length;++o)t.color[o].shape=t._shape;t._color_rb&&(n.bindRenderbuffer(n.RENDERBUFFER,t._color_rb),n.renderbufferStorage(n.RENDERBUFFER,n.RGBA4,t._shape[0],t._shape[1])),t.depth&&(t.depth.shape=t._shape),t._depth_rb&&(n.bindRenderbuffer(n.RENDERBUFFER,t._depth_rb),t._useDepth&&t._useStencil?n.renderbufferStorage(n.RENDERBUFFER,n.DEPTH_STENCIL,t._shape[0],t._shape[1]):t._useDepth?n.renderbufferStorage(n.RENDERBUFFER,n.DEPTH_COMPONENT16,t._shape[0],t._shape[1]):t._useStencil&&n.renderbufferStorage(n.RENDERBUFFER,n.STENCIL_INDEX,t._shape[0],t._shape[1])),n.bindFramebuffer(n.FRAMEBUFFER,t.handle);var s=n.checkFramebufferStatus(n.FRAMEBUFFER);s!==n.FRAMEBUFFER_COMPLETE&&(t.dispose(),c(n,a),f(s)),c(n,a)}}Object.defineProperties(v,{shape:{get:function(){return this._destroyed?[0,0]:this._shapeVector},set:function(t){if(Array.isArray(t)||(t=[0|t,0|t]),2!==t.length)throw new Error(\\\"gl-fbo: Shape vector must be length 2\\\");var e=0|t[0],r=0|t[1];return g(this,e,r),[e,r]},enumerable:!1},width:{get:function(){return this._destroyed?0:this._shape[0]},set:function(t){return g(this,t|=0,this._shape[1]),t},enumerable:!1},height:{get:function(){return this._destroyed?0:this._shape[1]},set:function(t){return t|=0,g(this,this._shape[0],t),t},enumerable:!1}}),v.bind=function(){if(!this._destroyed){var t=this.gl;t.bindFramebuffer(t.FRAMEBUFFER,this.handle),t.viewport(0,0,this._shape[0],this._shape[1])}},v.dispose=function(){if(!this._destroyed){this._destroyed=!0;var t=this.gl;t.deleteFramebuffer(this.handle),this.handle=null,this.depth&&(this.depth.dispose(),this.depth=null),this._depth_rb&&(t.deleteRenderbuffer(this._depth_rb),this._depth_rb=null);for(var e=0;e<this.color.length;++e)this.color[e].dispose(),this.color[e]=null;this._color_rb&&(t.deleteRenderbuffer(this._color_rb),this._color_rb=null)}}},3530:function(t,e,r){var n=r(8974).sprintf,i=r(6603),a=r(9365),o=r(8008);t.exports=function(t,e,r){\\\"use strict\\\";var s=a(e)||\\\"of unknown name (see npm glsl-shader-name)\\\",l=\\\"unknown type\\\";void 0!==r&&(l=r===i.FRAGMENT_SHADER?\\\"fragment\\\":\\\"vertex\\\");for(var u=n(\\\"Error compiling %s shader %s:\\\\n\\\",l,s),c=n(\\\"%s%s\\\",u,t),f=t.split(\\\"\\\\n\\\"),h={},p=0;p<f.length;p++){var d=f[p];if(\\\"\\\"!==d&&\\\"\\\\0\\\"!==d){var v=parseInt(d.split(\\\":\\\")[2]);if(isNaN(v))throw new Error(n(\\\"Could not parse error: %s\\\",d));h[v]=d}}var g=o(e).split(\\\"\\\\n\\\");for(p=0;p<g.length;p++)if((h[p+3]||h[p+2]||h[p+1])&&(u+=g[p]+\\\"\\\\n\\\",h[p+1])){var y=h[p+1];y=y.substr(y.split(\\\":\\\",3).join(\\\":\\\").length+1).trim(),u+=n(\\\"^^^ %s\\\\n\\\\n\\\",y)}return{long:u.trim(),short:c.trim()}}},6386:function(t,e,r){\\\"use strict\\\";t.exports=function(t,e){var r=t.gl,n=new u(t,o(r,l.vertex,l.fragment),o(r,l.pickVertex,l.pickFragment),s(r),s(r),s(r),s(r));return n.update(e),t.addObject(n),n};var n=r(5070),i=r(9560),a=r(5306),o=r(5158),s=r(5827),l=r(1292);function u(t,e,r,n,i,a,o){this.plot=t,this.shader=e,this.pickShader=r,this.positionBuffer=n,this.weightBuffer=i,this.colorBuffer=a,this.idBuffer=o,this.xData=[],this.yData=[],this.shape=[0,0],this.bounds=[1/0,1/0,-1/0,-1/0],this.pickOffset=0}var c,f=u.prototype,h=[0,0,1,0,0,1,1,0,1,1,0,1];f.draw=(c=[1,0,0,0,1,0,0,0,1],function(){var t=this.plot,e=this.shader,r=this.bounds,n=this.numVertices;if(!(n<=0)){var i=t.gl,a=t.dataBox,o=r[2]-r[0],s=r[3]-r[1],l=a[2]-a[0],u=a[3]-a[1];c[0]=2*o/l,c[4]=2*s/u,c[6]=2*(r[0]-a[0])/l-1,c[7]=2*(r[1]-a[1])/u-1,e.bind();var f=e.uniforms;f.viewTransform=c,f.shape=this.shape;var h=e.attributes;this.positionBuffer.bind(),h.position.pointer(),this.weightBuffer.bind(),h.weight.pointer(i.UNSIGNED_BYTE,!1),this.colorBuffer.bind(),h.color.pointer(i.UNSIGNED_BYTE,!0),i.drawArrays(i.TRIANGLES,0,n)}}),f.drawPick=function(){var t=[1,0,0,0,1,0,0,0,1],e=[0,0,0,0];return function(r){var n=this.plot,i=this.pickShader,a=this.bounds,o=this.numVertices;if(!(o<=0)){var s=n.gl,l=n.dataBox,u=a[2]-a[0],c=a[3]-a[1],f=l[2]-l[0],h=l[3]-l[1];t[0]=2*u/f,t[4]=2*c/h,t[6]=2*(a[0]-l[0])/f-1,t[7]=2*(a[1]-l[1])/h-1;for(var p=0;p<4;++p)e[p]=r>>8*p&255;this.pickOffset=r,i.bind();var d=i.uniforms;d.viewTransform=t,d.pickOffset=e,d.shape=this.shape;var v=i.attributes;return this.positionBuffer.bind(),v.position.pointer(),this.weightBuffer.bind(),v.weight.pointer(s.UNSIGNED_BYTE,!1),this.idBuffer.bind(),v.pickId.pointer(s.UNSIGNED_BYTE,!1),s.drawArrays(s.TRIANGLES,0,o),r+this.shape[0]*this.shape[1]}}}(),f.pick=function(t,e,r){var n=this.pickOffset,i=this.shape[0]*this.shape[1];if(r<n||r>=n+i)return null;var a=r-n,o=this.xData,s=this.yData;return{object:this,pointId:a,dataCoord:[o[a%this.shape[0]],s[a/this.shape[0]|0]]}},f.update=function(t){var e=(t=t||{}).shape||[0,0],r=t.x||i(e[0]),o=t.y||i(e[1]),s=t.z||new Float32Array(e[0]*e[1]),l=!1!==t.zsmooth;this.xData=r,this.yData=o;var u,c,f,p,d=t.colorLevels||[0],v=t.colorValues||[0,0,0,1],g=d.length,y=this.bounds;l?(u=y[0]=r[0],c=y[1]=o[0],f=y[2]=r[r.length-1],p=y[3]=o[o.length-1]):(u=y[0]=r[0]+(r[1]-r[0])/2,c=y[1]=o[0]+(o[1]-o[0])/2,f=y[2]=r[r.length-1]+(r[r.length-1]-r[r.length-2])/2,p=y[3]=o[o.length-1]+(o[o.length-1]-o[o.length-2])/2);var m=1/(f-u),x=1/(p-c),b=e[0],_=e[1];this.shape=[b,_];var w=(l?(b-1)*(_-1):b*_)*(h.length>>>1);this.numVertices=w;for(var T=a.mallocUint8(4*w),k=a.mallocFloat32(2*w),A=a.mallocUint8(2*w),M=a.mallocUint32(w),S=0,E=l?b-1:b,L=l?_-1:_,C=0;C<L;++C){var P,O;l?(P=x*(o[C]-c),O=x*(o[C+1]-c)):(P=C<_-1?x*(o[C]-(o[C+1]-o[C])/2-c):x*(o[C]-(o[C]-o[C-1])/2-c),O=C<_-1?x*(o[C]+(o[C+1]-o[C])/2-c):x*(o[C]+(o[C]-o[C-1])/2-c));for(var I=0;I<E;++I){var D,z;l?(D=m*(r[I]-u),z=m*(r[I+1]-u)):(D=I<b-1?m*(r[I]-(r[I+1]-r[I])/2-u):m*(r[I]-(r[I]-r[I-1])/2-u),z=I<b-1?m*(r[I]+(r[I+1]-r[I])/2-u):m*(r[I]+(r[I]-r[I-1])/2-u));for(var R=0;R<h.length;R+=2){var F,B,N,j,U=h[R],V=h[R+1],H=s[l?(C+V)*b+(I+U):C*b+I],q=n.le(d,H);if(q<0)F=v[0],B=v[1],N=v[2],j=v[3];else if(q===g-1)F=v[4*g-4],B=v[4*g-3],N=v[4*g-2],j=v[4*g-1];else{var G=(H-d[q])/(d[q+1]-d[q]),Z=1-G,Y=4*q,W=4*(q+1);F=Z*v[Y]+G*v[W],B=Z*v[Y+1]+G*v[W+1],N=Z*v[Y+2]+G*v[W+2],j=Z*v[Y+3]+G*v[W+3]}T[4*S]=255*F,T[4*S+1]=255*B,T[4*S+2]=255*N,T[4*S+3]=255*j,k[2*S]=.5*D+.5*z,k[2*S+1]=.5*P+.5*O,A[2*S]=U,A[2*S+1]=V,M[S]=C*b+I,S+=1}}}this.positionBuffer.update(k),this.weightBuffer.update(A),this.colorBuffer.update(T),this.idBuffer.update(M),a.free(k),a.free(T),a.free(A),a.free(M)},f.dispose=function(){this.shader.dispose(),this.pickShader.dispose(),this.positionBuffer.dispose(),this.weightBuffer.dispose(),this.colorBuffer.dispose(),this.idBuffer.dispose(),this.plot.removeObject(this)}},1292:function(t,e,r){\\\"use strict\\\";var n=r(6832);t.exports={fragment:n([\\\"precision lowp float;\\\\n#define GLSLIFY 1\\\\nvarying vec4 fragColor;\\\\nvoid main() {\\\\n  gl_FragColor = vec4(fragColor.rgb * fragColor.a, fragColor.a);\\\\n}\\\\n\\\"]),vertex:n([\\\"precision mediump float;\\\\n#define GLSLIFY 1\\\\n\\\\nattribute vec2 position;\\\\nattribute vec4 color;\\\\nattribute vec2 weight;\\\\n\\\\nuniform vec2 shape;\\\\nuniform mat3 viewTransform;\\\\n\\\\nvarying vec4 fragColor;\\\\n\\\\nvoid main() {\\\\n  vec3 vPosition = viewTransform * vec3( position + (weight-.5)/(shape-1.) , 1.0);\\\\n  fragColor = color;\\\\n  gl_Position = vec4(vPosition.xy, 0, vPosition.z);\\\\n}\\\\n\\\"]),pickFragment:n([\\\"precision mediump float;\\\\n#define GLSLIFY 1\\\\n\\\\nvarying vec4 fragId;\\\\nvarying vec2 vWeight;\\\\n\\\\nuniform vec2 shape;\\\\nuniform vec4 pickOffset;\\\\n\\\\nvoid main() {\\\\n  vec2 d = step(.5, vWeight);\\\\n  vec4 id = fragId + pickOffset;\\\\n  id.x += d.x + d.y*shape.x;\\\\n\\\\n  id.y += floor(id.x / 256.0);\\\\n  id.x -= floor(id.x / 256.0) * 256.0;\\\\n\\\\n  id.z += floor(id.y / 256.0);\\\\n  id.y -= floor(id.y / 256.0) * 256.0;\\\\n\\\\n  id.w += floor(id.z / 256.0);\\\\n  id.z -= floor(id.z / 256.0) * 256.0;\\\\n\\\\n  gl_FragColor = id/255.;\\\\n}\\\\n\\\"]),pickVertex:n([\\\"precision mediump float;\\\\n#define GLSLIFY 1\\\\n\\\\nattribute vec2 position;\\\\nattribute vec4 pickId;\\\\nattribute vec2 weight;\\\\n\\\\nuniform vec2 shape;\\\\nuniform mat3 viewTransform;\\\\n\\\\nvarying vec4 fragId;\\\\nvarying vec2 vWeight;\\\\n\\\\nvoid main() {\\\\n  vWeight = weight;\\\\n\\\\n  fragId = pickId;\\\\n\\\\n  vec3 vPosition = viewTransform * vec3( position + (weight-.5)/(shape-1.) , 1.0);\\\\n  gl_Position = vec4(vPosition.xy, 0, vPosition.z);\\\\n}\\\\n\\\"])}},248:function(t,e,r){var n=r(6832),i=r(5158),a=n([\\\"precision highp float;\\\\n#define GLSLIFY 1\\\\n\\\\nattribute vec3 position, nextPosition;\\\\nattribute float arcLength, lineWidth;\\\\nattribute vec4 color;\\\\n\\\\nuniform vec2 screenShape;\\\\nuniform float pixelRatio;\\\\nuniform mat4 model, view, projection;\\\\n\\\\nvarying vec4 fragColor;\\\\nvarying vec3 worldPosition;\\\\nvarying float pixelArcLength;\\\\n\\\\nvec4 project(vec3 p) {\\\\n  return projection * view * model * vec4(p, 1.0);\\\\n}\\\\n\\\\nvoid main() {\\\\n  vec4 startPoint = project(position);\\\\n  vec4 endPoint   = project(nextPosition);\\\\n\\\\n  vec2 A = startPoint.xy / startPoint.w;\\\\n  vec2 B =   endPoint.xy /   endPoint.w;\\\\n\\\\n  float clipAngle = atan(\\\\n    (B.y - A.y) * screenShape.y,\\\\n    (B.x - A.x) * screenShape.x\\\\n  );\\\\n\\\\n  vec2 offset = 0.5 * pixelRatio * lineWidth * vec2(\\\\n    sin(clipAngle),\\\\n    -cos(clipAngle)\\\\n  ) / screenShape;\\\\n\\\\n  gl_Position = vec4(startPoint.xy + startPoint.w * offset, startPoint.zw);\\\\n\\\\n  worldPosition = position;\\\\n  pixelArcLength = arcLength;\\\\n  fragColor = color;\\\\n}\\\\n\\\"]),o=n([\\\"precision highp float;\\\\n#define GLSLIFY 1\\\\n\\\\nbool outOfRange(float a, float b, float p) {\\\\n  return ((p > max(a, b)) || \\\\n          (p < min(a, b)));\\\\n}\\\\n\\\\nbool outOfRange(vec2 a, vec2 b, vec2 p) {\\\\n  return (outOfRange(a.x, b.x, p.x) ||\\\\n          outOfRange(a.y, b.y, p.y));\\\\n}\\\\n\\\\nbool outOfRange(vec3 a, vec3 b, vec3 p) {\\\\n  return (outOfRange(a.x, b.x, p.x) ||\\\\n          outOfRange(a.y, b.y, p.y) ||\\\\n          outOfRange(a.z, b.z, p.z));\\\\n}\\\\n\\\\nbool outOfRange(vec4 a, vec4 b, vec4 p) {\\\\n  return outOfRange(a.xyz, b.xyz, p.xyz);\\\\n}\\\\n\\\\nuniform vec3      clipBounds[2];\\\\nuniform sampler2D dashTexture;\\\\nuniform float     dashScale;\\\\nuniform float     opacity;\\\\n\\\\nvarying vec3    worldPosition;\\\\nvarying float   pixelArcLength;\\\\nvarying vec4    fragColor;\\\\n\\\\nvoid main() {\\\\n  if (\\\\n    outOfRange(clipBounds[0], clipBounds[1], worldPosition) ||\\\\n    fragColor.a * opacity == 0.\\\\n  ) discard;\\\\n\\\\n  float dashWeight = texture2D(dashTexture, vec2(dashScale * pixelArcLength, 0)).r;\\\\n  if(dashWeight < 0.5) {\\\\n    discard;\\\\n  }\\\\n  gl_FragColor = fragColor * opacity;\\\\n}\\\\n\\\"]),s=n([\\\"precision highp float;\\\\n#define GLSLIFY 1\\\\n\\\\n#define FLOAT_MAX  1.70141184e38\\\\n#define FLOAT_MIN  1.17549435e-38\\\\n\\\\n// https://github.com/mikolalysenko/glsl-read-float/blob/master/index.glsl\\\\nvec4 packFloat(float v) {\\\\n  float av = abs(v);\\\\n\\\\n  //Handle special cases\\\\n  if(av < FLOAT_MIN) {\\\\n    return vec4(0.0, 0.0, 0.0, 0.0);\\\\n  } else if(v > FLOAT_MAX) {\\\\n    return vec4(127.0, 128.0, 0.0, 0.0) / 255.0;\\\\n  } else if(v < -FLOAT_MAX) {\\\\n    return vec4(255.0, 128.0, 0.0, 0.0) / 255.0;\\\\n  }\\\\n\\\\n  vec4 c = vec4(0,0,0,0);\\\\n\\\\n  //Compute exponent and mantissa\\\\n  float e = floor(log2(av));\\\\n  float m = av * pow(2.0, -e) - 1.0;\\\\n\\\\n  //Unpack mantissa\\\\n  c[1] = floor(128.0 * m);\\\\n  m -= c[1] / 128.0;\\\\n  c[2] = floor(32768.0 * m);\\\\n  m -= c[2] / 32768.0;\\\\n  c[3] = floor(8388608.0 * m);\\\\n\\\\n  //Unpack exponent\\\\n  float ebias = e + 127.0;\\\\n  c[0] = floor(ebias / 2.0);\\\\n  ebias -= c[0] * 2.0;\\\\n  c[1] += floor(ebias) * 128.0;\\\\n\\\\n  //Unpack sign bit\\\\n  c[0] += 128.0 * step(0.0, -v);\\\\n\\\\n  //Scale back to range\\\\n  return c / 255.0;\\\\n}\\\\n\\\\nbool outOfRange(float a, float b, float p) {\\\\n  return ((p > max(a, b)) || \\\\n          (p < min(a, b)));\\\\n}\\\\n\\\\nbool outOfRange(vec2 a, vec2 b, vec2 p) {\\\\n  return (outOfRange(a.x, b.x, p.x) ||\\\\n          outOfRange(a.y, b.y, p.y));\\\\n}\\\\n\\\\nbool outOfRange(vec3 a, vec3 b, vec3 p) {\\\\n  return (outOfRange(a.x, b.x, p.x) ||\\\\n          outOfRange(a.y, b.y, p.y) ||\\\\n          outOfRange(a.z, b.z, p.z));\\\\n}\\\\n\\\\nbool outOfRange(vec4 a, vec4 b, vec4 p) {\\\\n  return outOfRange(a.xyz, b.xyz, p.xyz);\\\\n}\\\\n\\\\nuniform float pickId;\\\\nuniform vec3 clipBounds[2];\\\\n\\\\nvarying vec3 worldPosition;\\\\nvarying float pixelArcLength;\\\\nvarying vec4 fragColor;\\\\n\\\\nvoid main() {\\\\n  if (outOfRange(clipBounds[0], clipBounds[1], worldPosition)) discard;\\\\n\\\\n  gl_FragColor = vec4(pickId/255.0, packFloat(pixelArcLength).xyz);\\\\n}\\\"]),l=[{name:\\\"position\\\",type:\\\"vec3\\\"},{name:\\\"nextPosition\\\",type:\\\"vec3\\\"},{name:\\\"arcLength\\\",type:\\\"float\\\"},{name:\\\"lineWidth\\\",type:\\\"float\\\"},{name:\\\"color\\\",type:\\\"vec4\\\"}];e.createShader=function(t){return i(t,a,o,null,l)},e.createPickShader=function(t){return i(t,a,s,null,l)}},6086:function(t,e,r){\\\"use strict\\\";t.exports=function(t){var e=t.gl||t.scene&&t.scene.gl,r=f(e);r.attributes.position.location=0,r.attributes.nextPosition.location=1,r.attributes.arcLength.location=2,r.attributes.lineWidth.location=3,r.attributes.color.location=4;var o=h(e);o.attributes.position.location=0,o.attributes.nextPosition.location=1,o.attributes.arcLength.location=2,o.attributes.lineWidth.location=3,o.attributes.color.location=4;for(var s=n(e),l=i(e,[{buffer:s,size:3,offset:0,stride:48},{buffer:s,size:3,offset:12,stride:48},{buffer:s,size:1,offset:24,stride:48},{buffer:s,size:1,offset:28,stride:48},{buffer:s,size:4,offset:32,stride:48}]),c=u(new Array(1024),[256,1,4]),p=0;p<1024;++p)c.data[p]=255;var d=a(e,c);d.wrap=e.REPEAT;var v=new y(e,r,o,s,l,d);return v.update(t),v};var n=r(5827),i=r(2944),a=r(8931),o=new Uint8Array(4),s=new Float32Array(o.buffer),l=r(5070),u=r(5050),c=r(248),f=c.createShader,h=c.createPickShader,p=[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1];function d(t,e){for(var r=0,n=0;n<3;++n){var i=t[n]-e[n];r+=i*i}return Math.sqrt(r)}function v(t){for(var e=[[-1e6,-1e6,-1e6],[1e6,1e6,1e6]],r=0;r<3;++r)e[0][r]=Math.max(t[0][r],e[0][r]),e[1][r]=Math.min(t[1][r],e[1][r]);return e}function g(t,e,r,n){this.arcLength=t,this.position=e,this.index=r,this.dataCoordinate=n}function y(t,e,r,n,i,a){this.gl=t,this.shader=e,this.pickShader=r,this.buffer=n,this.vao=i,this.clipBounds=[[-1/0,-1/0,-1/0],[1/0,1/0,1/0]],this.points=[],this.arcLength=[],this.vertexCount=0,this.bounds=[[0,0,0],[0,0,0]],this.pickId=0,this.lineWidth=1,this.texture=a,this.dashScale=1,this.opacity=1,this.hasAlpha=!1,this.dirty=!0,this.pixelRatio=1}var m=y.prototype;m.isTransparent=function(){return this.hasAlpha},m.isOpaque=function(){return!this.hasAlpha},m.pickSlots=1,m.setPickBase=function(t){this.pickId=t},m.drawTransparent=m.draw=function(t){if(this.vertexCount){var e=this.gl,r=this.shader,n=this.vao;r.bind(),r.uniforms={model:t.model||p,view:t.view||p,projection:t.projection||p,clipBounds:v(this.clipBounds),dashTexture:this.texture.bind(),dashScale:this.dashScale/this.arcLength[this.arcLength.length-1],opacity:this.opacity,screenShape:[e.drawingBufferWidth,e.drawingBufferHeight],pixelRatio:this.pixelRatio},n.bind(),n.draw(e.TRIANGLE_STRIP,this.vertexCount),n.unbind()}},m.drawPick=function(t){if(this.vertexCount){var e=this.gl,r=this.pickShader,n=this.vao;r.bind(),r.uniforms={model:t.model||p,view:t.view||p,projection:t.projection||p,pickId:this.pickId,clipBounds:v(this.clipBounds),screenShape:[e.drawingBufferWidth,e.drawingBufferHeight],pixelRatio:this.pixelRatio},n.bind(),n.draw(e.TRIANGLE_STRIP,this.vertexCount),n.unbind()}},m.update=function(t){var e,r;this.dirty=!0;var n=!!t.connectGaps;\\\"dashScale\\\"in t&&(this.dashScale=t.dashScale),this.hasAlpha=!1,\\\"opacity\\\"in t&&(this.opacity=+t.opacity,this.opacity<1&&(this.hasAlpha=!0));var i=[],a=[],o=[],s=0,c=0,f=[[1/0,1/0,1/0],[-1/0,-1/0,-1/0]],h=t.position||t.positions;if(h){var p=t.color||t.colors||[0,0,0,1],v=t.lineWidth||1,g=!1;t:for(e=1;e<h.length;++e){var y,m,x,b=h[e-1],_=h[e];for(a.push(s),o.push(b.slice()),r=0;r<3;++r){if(isNaN(b[r])||isNaN(_[r])||!isFinite(b[r])||!isFinite(_[r])){if(!n&&i.length>0){for(var w=0;w<24;++w)i.push(i[i.length-12]);c+=2,g=!0}continue t}f[0][r]=Math.min(f[0][r],b[r],_[r]),f[1][r]=Math.max(f[1][r],b[r],_[r])}Array.isArray(p[0])?(y=p.length>e-1?p[e-1]:p.length>0?p[p.length-1]:[0,0,0,1],m=p.length>e?p[e]:p.length>0?p[p.length-1]:[0,0,0,1]):y=m=p,3===y.length&&(y=[y[0],y[1],y[2],1]),3===m.length&&(m=[m[0],m[1],m[2],1]),!this.hasAlpha&&y[3]<1&&(this.hasAlpha=!0),x=Array.isArray(v)?v.length>e-1?v[e-1]:v.length>0?v[v.length-1]:[0,0,0,1]:v;var T=s;if(s+=d(b,_),g){for(r=0;r<2;++r)i.push(b[0],b[1],b[2],_[0],_[1],_[2],T,x,y[0],y[1],y[2],y[3]);c+=2,g=!1}i.push(b[0],b[1],b[2],_[0],_[1],_[2],T,x,y[0],y[1],y[2],y[3],b[0],b[1],b[2],_[0],_[1],_[2],T,-x,y[0],y[1],y[2],y[3],_[0],_[1],_[2],b[0],b[1],b[2],s,-x,m[0],m[1],m[2],m[3],_[0],_[1],_[2],b[0],b[1],b[2],s,x,m[0],m[1],m[2],m[3]),c+=4}}if(this.buffer.update(i),a.push(s),o.push(h[h.length-1].slice()),this.bounds=f,this.vertexCount=c,this.points=o,this.arcLength=a,\\\"dashes\\\"in t){var k=t.dashes.slice();for(k.unshift(0),e=1;e<k.length;++e)k[e]=k[e-1]+k[e];var A=u(new Array(1024),[256,1,4]);for(e=0;e<256;++e){for(r=0;r<4;++r)A.set(e,0,r,0);1&l.le(k,k[k.length-1]*e/255)?A.set(e,0,0,0):A.set(e,0,0,255)}this.texture.setPixels(A)}},m.dispose=function(){this.shader.dispose(),this.vao.dispose(),this.buffer.dispose()},m.pick=function(t){if(!t)return null;if(t.id!==this.pickId)return null;var e=function(t,e,r,n){return o[0]=0,o[1]=r,o[2]=e,o[3]=t,s[0]}(t.value[0],t.value[1],t.value[2]),r=l.le(this.arcLength,e);if(r<0)return null;if(r===this.arcLength.length-1)return new g(this.arcLength[this.arcLength.length-1],this.points[this.points.length-1].slice(),r);for(var n=this.points[r],i=this.points[Math.min(r+1,this.points.length-1)],a=(e-this.arcLength[r])/(this.arcLength[r+1]-this.arcLength[r]),u=1-a,c=[0,0,0],f=0;f<3;++f)c[f]=u*n[f]+a*i[f];var h=Math.min(a<.5?r:r+1,this.points.length-1);return new g(e,c,h,this.points[h])}},7332:function(t){t.exports=function(t){var e=new Float32Array(16);return e[0]=t[0],e[1]=t[1],e[2]=t[2],e[3]=t[3],e[4]=t[4],e[5]=t[5],e[6]=t[6],e[7]=t[7],e[8]=t[8],e[9]=t[9],e[10]=t[10],e[11]=t[11],e[12]=t[12],e[13]=t[13],e[14]=t[14],e[15]=t[15],e}},9823:function(t){t.exports=function(){var t=new Float32Array(16);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t}},7787:function(t){t.exports=function(t){var e=t[0],r=t[1],n=t[2],i=t[3],a=t[4],o=t[5],s=t[6],l=t[7],u=t[8],c=t[9],f=t[10],h=t[11],p=t[12],d=t[13],v=t[14],g=t[15];return(e*o-r*a)*(f*g-h*v)-(e*s-n*a)*(c*g-h*d)+(e*l-i*a)*(c*v-f*d)+(r*s-n*o)*(u*g-h*p)-(r*l-i*o)*(u*v-f*p)+(n*l-i*s)*(u*d-c*p)}},5950:function(t){t.exports=function(t,e){var r=e[0],n=e[1],i=e[2],a=e[3],o=r+r,s=n+n,l=i+i,u=r*o,c=n*o,f=n*s,h=i*o,p=i*s,d=i*l,v=a*o,g=a*s,y=a*l;return t[0]=1-f-d,t[1]=c+y,t[2]=h-g,t[3]=0,t[4]=c-y,t[5]=1-u-d,t[6]=p+v,t[7]=0,t[8]=h+g,t[9]=p-v,t[10]=1-u-f,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t}},7280:function(t){t.exports=function(t,e,r){var n=e[0],i=e[1],a=e[2],o=e[3],s=n+n,l=i+i,u=a+a,c=n*s,f=n*l,h=n*u,p=i*l,d=i*u,v=a*u,g=o*s,y=o*l,m=o*u;return t[0]=1-(p+v),t[1]=f+m,t[2]=h-y,t[3]=0,t[4]=f-m,t[5]=1-(c+v),t[6]=d+g,t[7]=0,t[8]=h+y,t[9]=d-g,t[10]=1-(c+p),t[11]=0,t[12]=r[0],t[13]=r[1],t[14]=r[2],t[15]=1,t}},9947:function(t){t.exports=function(t){return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t}},7437:function(t){t.exports=function(t,e){var r=e[0],n=e[1],i=e[2],a=e[3],o=e[4],s=e[5],l=e[6],u=e[7],c=e[8],f=e[9],h=e[10],p=e[11],d=e[12],v=e[13],g=e[14],y=e[15],m=r*s-n*o,x=r*l-i*o,b=r*u-a*o,_=n*l-i*s,w=n*u-a*s,T=i*u-a*l,k=c*v-f*d,A=c*g-h*d,M=c*y-p*d,S=f*g-h*v,E=f*y-p*v,L=h*y-p*g,C=m*L-x*E+b*S+_*M-w*A+T*k;return C?(C=1/C,t[0]=(s*L-l*E+u*S)*C,t[1]=(i*E-n*L-a*S)*C,t[2]=(v*T-g*w+y*_)*C,t[3]=(h*w-f*T-p*_)*C,t[4]=(l*M-o*L-u*A)*C,t[5]=(r*L-i*M+a*A)*C,t[6]=(g*b-d*T-y*x)*C,t[7]=(c*T-h*b+p*x)*C,t[8]=(o*E-s*M+u*k)*C,t[9]=(n*M-r*E-a*k)*C,t[10]=(d*w-v*b+y*m)*C,t[11]=(f*b-c*w-p*m)*C,t[12]=(s*A-o*S-l*k)*C,t[13]=(r*S-n*A+i*k)*C,t[14]=(v*x-d*_-g*m)*C,t[15]=(c*_-f*x+h*m)*C,t):null}},3012:function(t,e,r){var n=r(9947);t.exports=function(t,e,r,i){var a,o,s,l,u,c,f,h,p,d,v=e[0],g=e[1],y=e[2],m=i[0],x=i[1],b=i[2],_=r[0],w=r[1],T=r[2];return Math.abs(v-_)<1e-6&&Math.abs(g-w)<1e-6&&Math.abs(y-T)<1e-6?n(t):(f=v-_,h=g-w,p=y-T,a=x*(p*=d=1/Math.sqrt(f*f+h*h+p*p))-b*(h*=d),o=b*(f*=d)-m*p,s=m*h-x*f,(d=Math.sqrt(a*a+o*o+s*s))?(a*=d=1/d,o*=d,s*=d):(a=0,o=0,s=0),l=h*s-p*o,u=p*a-f*s,c=f*o-h*a,(d=Math.sqrt(l*l+u*u+c*c))?(l*=d=1/d,u*=d,c*=d):(l=0,u=0,c=0),t[0]=a,t[1]=l,t[2]=f,t[3]=0,t[4]=o,t[5]=u,t[6]=h,t[7]=0,t[8]=s,t[9]=c,t[10]=p,t[11]=0,t[12]=-(a*v+o*g+s*y),t[13]=-(l*v+u*g+c*y),t[14]=-(f*v+h*g+p*y),t[15]=1,t)}},104:function(t){t.exports=function(t,e,r){var n=e[0],i=e[1],a=e[2],o=e[3],s=e[4],l=e[5],u=e[6],c=e[7],f=e[8],h=e[9],p=e[10],d=e[11],v=e[12],g=e[13],y=e[14],m=e[15],x=r[0],b=r[1],_=r[2],w=r[3];return t[0]=x*n+b*s+_*f+w*v,t[1]=x*i+b*l+_*h+w*g,t[2]=x*a+b*u+_*p+w*y,t[3]=x*o+b*c+_*d+w*m,x=r[4],b=r[5],_=r[6],w=r[7],t[4]=x*n+b*s+_*f+w*v,t[5]=x*i+b*l+_*h+w*g,t[6]=x*a+b*u+_*p+w*y,t[7]=x*o+b*c+_*d+w*m,x=r[8],b=r[9],_=r[10],w=r[11],t[8]=x*n+b*s+_*f+w*v,t[9]=x*i+b*l+_*h+w*g,t[10]=x*a+b*u+_*p+w*y,t[11]=x*o+b*c+_*d+w*m,x=r[12],b=r[13],_=r[14],w=r[15],t[12]=x*n+b*s+_*f+w*v,t[13]=x*i+b*l+_*h+w*g,t[14]=x*a+b*u+_*p+w*y,t[15]=x*o+b*c+_*d+w*m,t}},5268:function(t){t.exports=function(t,e,r,n,i,a,o){var s=1/(e-r),l=1/(n-i),u=1/(a-o);return t[0]=-2*s,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=-2*l,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=2*u,t[11]=0,t[12]=(e+r)*s,t[13]=(i+n)*l,t[14]=(o+a)*u,t[15]=1,t}},1120:function(t){t.exports=function(t,e,r,n,i){var a=1/Math.tan(e/2),o=1/(n-i);return t[0]=a/r,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=a,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=(i+n)*o,t[11]=-1,t[12]=0,t[13]=0,t[14]=2*i*n*o,t[15]=0,t}},4422:function(t){t.exports=function(t,e,r,n){var i,a,o,s,l,u,c,f,h,p,d,v,g,y,m,x,b,_,w,T,k,A,M,S,E=n[0],L=n[1],C=n[2],P=Math.sqrt(E*E+L*L+C*C);return Math.abs(P)<1e-6?null:(E*=P=1/P,L*=P,C*=P,i=Math.sin(r),o=1-(a=Math.cos(r)),s=e[0],l=e[1],u=e[2],c=e[3],f=e[4],h=e[5],p=e[6],d=e[7],v=e[8],g=e[9],y=e[10],m=e[11],x=E*E*o+a,b=L*E*o+C*i,_=C*E*o-L*i,w=E*L*o-C*i,T=L*L*o+a,k=C*L*o+E*i,A=E*C*o+L*i,M=L*C*o-E*i,S=C*C*o+a,t[0]=s*x+f*b+v*_,t[1]=l*x+h*b+g*_,t[2]=u*x+p*b+y*_,t[3]=c*x+d*b+m*_,t[4]=s*w+f*T+v*k,t[5]=l*w+h*T+g*k,t[6]=u*w+p*T+y*k,t[7]=c*w+d*T+m*k,t[8]=s*A+f*M+v*S,t[9]=l*A+h*M+g*S,t[10]=u*A+p*M+y*S,t[11]=c*A+d*M+m*S,e!==t&&(t[12]=e[12],t[13]=e[13],t[14]=e[14],t[15]=e[15]),t)}},6109:function(t){t.exports=function(t,e,r){var n=Math.sin(r),i=Math.cos(r),a=e[4],o=e[5],s=e[6],l=e[7],u=e[8],c=e[9],f=e[10],h=e[11];return e!==t&&(t[0]=e[0],t[1]=e[1],t[2]=e[2],t[3]=e[3],t[12]=e[12],t[13]=e[13],t[14]=e[14],t[15]=e[15]),t[4]=a*i+u*n,t[5]=o*i+c*n,t[6]=s*i+f*n,t[7]=l*i+h*n,t[8]=u*i-a*n,t[9]=c*i-o*n,t[10]=f*i-s*n,t[11]=h*i-l*n,t}},7115:function(t){t.exports=function(t,e,r){var n=Math.sin(r),i=Math.cos(r),a=e[0],o=e[1],s=e[2],l=e[3],u=e[8],c=e[9],f=e[10],h=e[11];return e!==t&&(t[4]=e[4],t[5]=e[5],t[6]=e[6],t[7]=e[7],t[12]=e[12],t[13]=e[13],t[14]=e[14],t[15]=e[15]),t[0]=a*i-u*n,t[1]=o*i-c*n,t[2]=s*i-f*n,t[3]=l*i-h*n,t[8]=a*n+u*i,t[9]=o*n+c*i,t[10]=s*n+f*i,t[11]=l*n+h*i,t}},5240:function(t){t.exports=function(t,e,r){var n=Math.sin(r),i=Math.cos(r),a=e[0],o=e[1],s=e[2],l=e[3],u=e[4],c=e[5],f=e[6],h=e[7];return e!==t&&(t[8]=e[8],t[9]=e[9],t[10]=e[10],t[11]=e[11],t[12]=e[12],t[13]=e[13],t[14]=e[14],t[15]=e[15]),t[0]=a*i+u*n,t[1]=o*i+c*n,t[2]=s*i+f*n,t[3]=l*i+h*n,t[4]=u*i-a*n,t[5]=c*i-o*n,t[6]=f*i-s*n,t[7]=h*i-l*n,t}},3668:function(t){t.exports=function(t,e,r){var n=r[0],i=r[1],a=r[2];return t[0]=e[0]*n,t[1]=e[1]*n,t[2]=e[2]*n,t[3]=e[3]*n,t[4]=e[4]*i,t[5]=e[5]*i,t[6]=e[6]*i,t[7]=e[7]*i,t[8]=e[8]*a,t[9]=e[9]*a,t[10]=e[10]*a,t[11]=e[11]*a,t[12]=e[12],t[13]=e[13],t[14]=e[14],t[15]=e[15],t}},998:function(t){t.exports=function(t,e,r){var n,i,a,o,s,l,u,c,f,h,p,d,v=r[0],g=r[1],y=r[2];return e===t?(t[12]=e[0]*v+e[4]*g+e[8]*y+e[12],t[13]=e[1]*v+e[5]*g+e[9]*y+e[13],t[14]=e[2]*v+e[6]*g+e[10]*y+e[14],t[15]=e[3]*v+e[7]*g+e[11]*y+e[15]):(n=e[0],i=e[1],a=e[2],o=e[3],s=e[4],l=e[5],u=e[6],c=e[7],f=e[8],h=e[9],p=e[10],d=e[11],t[0]=n,t[1]=i,t[2]=a,t[3]=o,t[4]=s,t[5]=l,t[6]=u,t[7]=c,t[8]=f,t[9]=h,t[10]=p,t[11]=d,t[12]=n*v+s*g+f*y+e[12],t[13]=i*v+l*g+h*y+e[13],t[14]=a*v+u*g+p*y+e[14],t[15]=o*v+c*g+d*y+e[15]),t}},2142:function(t){t.exports=function(t,e){if(t===e){var r=e[1],n=e[2],i=e[3],a=e[6],o=e[7],s=e[11];t[1]=e[4],t[2]=e[8],t[3]=e[12],t[4]=r,t[6]=e[9],t[7]=e[13],t[8]=n,t[9]=a,t[11]=e[14],t[12]=i,t[13]=o,t[14]=s}else t[0]=e[0],t[1]=e[4],t[2]=e[8],t[3]=e[12],t[4]=e[1],t[5]=e[5],t[6]=e[9],t[7]=e[13],t[8]=e[2],t[9]=e[6],t[10]=e[10],t[11]=e[14],t[12]=e[3],t[13]=e[7],t[14]=e[11],t[15]=e[15];return t}},4340:function(t,e,r){\\\"use strict\\\";var n=r(957),i=r(7309);function a(t,e){for(var r=[0,0,0,0],n=0;n<4;++n)for(var i=0;i<4;++i)r[i]+=t[4*n+i]*e[n];return r}function o(t,e,r,n,i){for(var o=a(n,a(r,a(e,[t[0],t[1],t[2],1]))),s=0;s<3;++s)o[s]/=o[3];return[.5*i[0]*(1+o[0]),.5*i[1]*(1-o[1])]}function s(t,e){for(var r=[0,0,0],n=0;n<t.length;++n)for(var i=t[n],a=e[n],o=0;o<3;++o)r[o]+=a*i[o];return r}t.exports=function(t,e,r,a,l,u){if(1===t.length)return[0,t[0].slice()];for(var c=new Array(t.length),f=0;f<t.length;++f)c[f]=o(t[f],r,a,l,u);var h=0,p=1/0;for(f=0;f<c.length;++f){for(var d=0,v=0;v<2;++v)d+=Math.pow(c[f][v]-e[v],2);d<p&&(p=d,h=f)}var g=function(t,e){if(2===t.length){for(var r=0,a=0,o=0;o<2;++o)r+=Math.pow(e[o]-t[0][o],2),a+=Math.pow(e[o]-t[1][o],2);return(r=Math.sqrt(r))+(a=Math.sqrt(a))<1e-6?[1,0]:[a/(r+a),r/(a+r)]}if(3===t.length){var s=[0,0];return i(t[0],t[1],t[2],e,s),n(t,s)}return[]}(c,e),y=0;for(f=0;f<3;++f){if(g[f]<-.001||g[f]>1.0001)return null;y+=g[f]}return Math.abs(y-1)>.001?null:[h,s(t,g),g]}},2056:function(t,e,r){var n=r(6832),i=n([\\\"precision highp float;\\\\n#define GLSLIFY 1\\\\n\\\\nattribute vec3 position, normal;\\\\nattribute vec4 color;\\\\nattribute vec2 uv;\\\\n\\\\nuniform mat4 model\\\\n           , view\\\\n           , projection\\\\n           , inverseModel;\\\\nuniform vec3 eyePosition\\\\n           , lightPosition;\\\\n\\\\nvarying vec3 f_normal\\\\n           , f_lightDirection\\\\n           , f_eyeDirection\\\\n           , f_data;\\\\nvarying vec4 f_color;\\\\nvarying vec2 f_uv;\\\\n\\\\nvec4 project(vec3 p) {\\\\n  return projection * view * model * vec4(p, 1.0);\\\\n}\\\\n\\\\nvoid main() {\\\\n  gl_Position      = project(position);\\\\n\\\\n  //Lighting geometry parameters\\\\n  vec4 cameraCoordinate = view * vec4(position , 1.0);\\\\n  cameraCoordinate.xyz /= cameraCoordinate.w;\\\\n  f_lightDirection = lightPosition - cameraCoordinate.xyz;\\\\n  f_eyeDirection   = eyePosition - cameraCoordinate.xyz;\\\\n  f_normal  = normalize((vec4(normal, 0.0) * inverseModel).xyz);\\\\n\\\\n  f_color          = color;\\\\n  f_data           = position;\\\\n  f_uv             = uv;\\\\n}\\\\n\\\"]),a=n([\\\"#extension GL_OES_standard_derivatives : enable\\\\n\\\\nprecision highp float;\\\\n#define GLSLIFY 1\\\\n\\\\nfloat beckmannDistribution(float x, float roughness) {\\\\n  float NdotH = max(x, 0.0001);\\\\n  float cos2Alpha = NdotH * NdotH;\\\\n  float tan2Alpha = (cos2Alpha - 1.0) / cos2Alpha;\\\\n  float roughness2 = roughness * roughness;\\\\n  float denom = 3.141592653589793 * roughness2 * cos2Alpha * cos2Alpha;\\\\n  return exp(tan2Alpha / roughness2) / denom;\\\\n}\\\\n\\\\nfloat cookTorranceSpecular(\\\\n  vec3 lightDirection,\\\\n  vec3 viewDirection,\\\\n  vec3 surfaceNormal,\\\\n  float roughness,\\\\n  float fresnel) {\\\\n\\\\n  float VdotN = max(dot(viewDirection, surfaceNormal), 0.0);\\\\n  float LdotN = max(dot(lightDirection, surfaceNormal), 0.0);\\\\n\\\\n  //Half angle vector\\\\n  vec3 H = normalize(lightDirection + viewDirection);\\\\n\\\\n  //Geometric term\\\\n  float NdotH = max(dot(surfaceNormal, H), 0.0);\\\\n  float VdotH = max(dot(viewDirection, H), 0.000001);\\\\n  float LdotH = max(dot(lightDirection, H), 0.000001);\\\\n  float G1 = (2.0 * NdotH * VdotN) / VdotH;\\\\n  float G2 = (2.0 * NdotH * LdotN) / LdotH;\\\\n  float G = min(1.0, min(G1, G2));\\\\n  \\\\n  //Distribution term\\\\n  float D = beckmannDistribution(NdotH, roughness);\\\\n\\\\n  //Fresnel term\\\\n  float F = pow(1.0 - VdotN, fresnel);\\\\n\\\\n  //Multiply terms and done\\\\n  return  G * F * D / max(3.14159265 * VdotN, 0.000001);\\\\n}\\\\n\\\\n//#pragma glslify: beckmann = require(glsl-specular-beckmann) // used in gl-surface3d\\\\n\\\\nbool outOfRange(float a, float b, float p) {\\\\n  return ((p > max(a, b)) || \\\\n          (p < min(a, b)));\\\\n}\\\\n\\\\nbool outOfRange(vec2 a, vec2 b, vec2 p) {\\\\n  return (outOfRange(a.x, b.x, p.x) ||\\\\n          outOfRange(a.y, b.y, p.y));\\\\n}\\\\n\\\\nbool outOfRange(vec3 a, vec3 b, vec3 p) {\\\\n  return (outOfRange(a.x, b.x, p.x) ||\\\\n          outOfRange(a.y, b.y, p.y) ||\\\\n          outOfRange(a.z, b.z, p.z));\\\\n}\\\\n\\\\nbool outOfRange(vec4 a, vec4 b, vec4 p) {\\\\n  return outOfRange(a.xyz, b.xyz, p.xyz);\\\\n}\\\\n\\\\nuniform vec3 clipBounds[2];\\\\nuniform float roughness\\\\n            , fresnel\\\\n            , kambient\\\\n            , kdiffuse\\\\n            , kspecular;\\\\nuniform sampler2D texture;\\\\n\\\\nvarying vec3 f_normal\\\\n           , f_lightDirection\\\\n           , f_eyeDirection\\\\n           , f_data;\\\\nvarying vec4 f_color;\\\\nvarying vec2 f_uv;\\\\n\\\\nvoid main() {\\\\n  if (f_color.a == 0.0 ||\\\\n    outOfRange(clipBounds[0], clipBounds[1], f_data)\\\\n  ) discard;\\\\n\\\\n  vec3 N = normalize(f_normal);\\\\n  vec3 L = normalize(f_lightDirection);\\\\n  vec3 V = normalize(f_eyeDirection);\\\\n\\\\n  if(gl_FrontFacing) {\\\\n    N = -N;\\\\n  }\\\\n\\\\n  float specular = min(1.0, max(0.0, cookTorranceSpecular(L, V, N, roughness, fresnel)));\\\\n  //float specular = max(0.0, beckmann(L, V, N, roughness)); // used in gl-surface3d\\\\n\\\\n  float diffuse  = min(kambient + kdiffuse * max(dot(N, L), 0.0), 1.0);\\\\n\\\\n  vec4 surfaceColor = vec4(f_color.rgb, 1.0) * texture2D(texture, f_uv);\\\\n  vec4 litColor = surfaceColor.a * vec4(diffuse * surfaceColor.rgb + kspecular * vec3(1,1,1) * specular,  1.0);\\\\n\\\\n  gl_FragColor = litColor * f_color.a;\\\\n}\\\\n\\\"]),o=n([\\\"precision highp float;\\\\n#define GLSLIFY 1\\\\n\\\\nattribute vec3 position;\\\\nattribute vec4 color;\\\\nattribute vec2 uv;\\\\n\\\\nuniform mat4 model, view, projection;\\\\n\\\\nvarying vec4 f_color;\\\\nvarying vec3 f_data;\\\\nvarying vec2 f_uv;\\\\n\\\\nvoid main() {\\\\n  gl_Position = projection * view * model * vec4(position, 1.0);\\\\n  f_color = color;\\\\n  f_data  = position;\\\\n  f_uv    = uv;\\\\n}\\\"]),s=n([\\\"precision highp float;\\\\n#define GLSLIFY 1\\\\n\\\\nbool outOfRange(float a, float b, float p) {\\\\n  return ((p > max(a, b)) || \\\\n          (p < min(a, b)));\\\\n}\\\\n\\\\nbool outOfRange(vec2 a, vec2 b, vec2 p) {\\\\n  return (outOfRange(a.x, b.x, p.x) ||\\\\n          outOfRange(a.y, b.y, p.y));\\\\n}\\\\n\\\\nbool outOfRange(vec3 a, vec3 b, vec3 p) {\\\\n  return (outOfRange(a.x, b.x, p.x) ||\\\\n          outOfRange(a.y, b.y, p.y) ||\\\\n          outOfRange(a.z, b.z, p.z));\\\\n}\\\\n\\\\nbool outOfRange(vec4 a, vec4 b, vec4 p) {\\\\n  return outOfRange(a.xyz, b.xyz, p.xyz);\\\\n}\\\\n\\\\nuniform vec3 clipBounds[2];\\\\nuniform sampler2D texture;\\\\nuniform float opacity;\\\\n\\\\nvarying vec4 f_color;\\\\nvarying vec3 f_data;\\\\nvarying vec2 f_uv;\\\\n\\\\nvoid main() {\\\\n  if (outOfRange(clipBounds[0], clipBounds[1], f_data)) discard;\\\\n\\\\n  gl_FragColor = f_color * texture2D(texture, f_uv) * opacity;\\\\n}\\\"]),l=n([\\\"precision highp float;\\\\n#define GLSLIFY 1\\\\n\\\\nbool outOfRange(float a, float b, float p) {\\\\n  return ((p > max(a, b)) || \\\\n          (p < min(a, b)));\\\\n}\\\\n\\\\nbool outOfRange(vec2 a, vec2 b, vec2 p) {\\\\n  return (outOfRange(a.x, b.x, p.x) ||\\\\n          outOfRange(a.y, b.y, p.y));\\\\n}\\\\n\\\\nbool outOfRange(vec3 a, vec3 b, vec3 p) {\\\\n  return (outOfRange(a.x, b.x, p.x) ||\\\\n          outOfRange(a.y, b.y, p.y) ||\\\\n          outOfRange(a.z, b.z, p.z));\\\\n}\\\\n\\\\nbool outOfRange(vec4 a, vec4 b, vec4 p) {\\\\n  return outOfRange(a.xyz, b.xyz, p.xyz);\\\\n}\\\\n\\\\nattribute vec3 position;\\\\nattribute vec4 color;\\\\nattribute vec2 uv;\\\\nattribute float pointSize;\\\\n\\\\nuniform mat4 model, view, projection;\\\\nuniform vec3 clipBounds[2];\\\\n\\\\nvarying vec4 f_color;\\\\nvarying vec2 f_uv;\\\\n\\\\nvoid main() {\\\\n  if (outOfRange(clipBounds[0], clipBounds[1], position)) {\\\\n\\\\n    gl_Position = vec4(0.0, 0.0 ,0.0 ,0.0);\\\\n  } else {\\\\n    gl_Position = projection * view * model * vec4(position, 1.0);\\\\n  }\\\\n  gl_PointSize = pointSize;\\\\n  f_color = color;\\\\n  f_uv = uv;\\\\n}\\\"]),u=n([\\\"precision highp float;\\\\n#define GLSLIFY 1\\\\n\\\\nuniform sampler2D texture;\\\\nuniform float opacity;\\\\n\\\\nvarying vec4 f_color;\\\\nvarying vec2 f_uv;\\\\n\\\\nvoid main() {\\\\n  vec2 pointR = gl_PointCoord.xy - vec2(0.5, 0.5);\\\\n  if(dot(pointR, pointR) > 0.25) {\\\\n    discard;\\\\n  }\\\\n  gl_FragColor = f_color * texture2D(texture, f_uv) * opacity;\\\\n}\\\"]),c=n([\\\"precision highp float;\\\\n#define GLSLIFY 1\\\\n\\\\nattribute vec3 position;\\\\nattribute vec4 id;\\\\n\\\\nuniform mat4 model, view, projection;\\\\n\\\\nvarying vec3 f_position;\\\\nvarying vec4 f_id;\\\\n\\\\nvoid main() {\\\\n  gl_Position = projection * view * model * vec4(position, 1.0);\\\\n  f_id        = id;\\\\n  f_position  = position;\\\\n}\\\"]),f=n([\\\"precision highp float;\\\\n#define GLSLIFY 1\\\\n\\\\nbool outOfRange(float a, float b, float p) {\\\\n  return ((p > max(a, b)) || \\\\n          (p < min(a, b)));\\\\n}\\\\n\\\\nbool outOfRange(vec2 a, vec2 b, vec2 p) {\\\\n  return (outOfRange(a.x, b.x, p.x) ||\\\\n          outOfRange(a.y, b.y, p.y));\\\\n}\\\\n\\\\nbool outOfRange(vec3 a, vec3 b, vec3 p) {\\\\n  return (outOfRange(a.x, b.x, p.x) ||\\\\n          outOfRange(a.y, b.y, p.y) ||\\\\n          outOfRange(a.z, b.z, p.z));\\\\n}\\\\n\\\\nbool outOfRange(vec4 a, vec4 b, vec4 p) {\\\\n  return outOfRange(a.xyz, b.xyz, p.xyz);\\\\n}\\\\n\\\\nuniform vec3  clipBounds[2];\\\\nuniform float pickId;\\\\n\\\\nvarying vec3 f_position;\\\\nvarying vec4 f_id;\\\\n\\\\nvoid main() {\\\\n  if (outOfRange(clipBounds[0], clipBounds[1], f_position)) discard;\\\\n\\\\n  gl_FragColor = vec4(pickId, f_id.xyz);\\\\n}\\\"]),h=n([\\\"precision highp float;\\\\n#define GLSLIFY 1\\\\n\\\\nbool outOfRange(float a, float b, float p) {\\\\n  return ((p > max(a, b)) || \\\\n          (p < min(a, b)));\\\\n}\\\\n\\\\nbool outOfRange(vec2 a, vec2 b, vec2 p) {\\\\n  return (outOfRange(a.x, b.x, p.x) ||\\\\n          outOfRange(a.y, b.y, p.y));\\\\n}\\\\n\\\\nbool outOfRange(vec3 a, vec3 b, vec3 p) {\\\\n  return (outOfRange(a.x, b.x, p.x) ||\\\\n          outOfRange(a.y, b.y, p.y) ||\\\\n          outOfRange(a.z, b.z, p.z));\\\\n}\\\\n\\\\nbool outOfRange(vec4 a, vec4 b, vec4 p) {\\\\n  return outOfRange(a.xyz, b.xyz, p.xyz);\\\\n}\\\\n\\\\nattribute vec3  position;\\\\nattribute float pointSize;\\\\nattribute vec4  id;\\\\n\\\\nuniform mat4 model, view, projection;\\\\nuniform vec3 clipBounds[2];\\\\n\\\\nvarying vec3 f_position;\\\\nvarying vec4 f_id;\\\\n\\\\nvoid main() {\\\\n  if (outOfRange(clipBounds[0], clipBounds[1], position)) {\\\\n\\\\n    gl_Position = vec4(0.0, 0.0, 0.0, 0.0);\\\\n  } else {\\\\n    gl_Position  = projection * view * model * vec4(position, 1.0);\\\\n    gl_PointSize = pointSize;\\\\n  }\\\\n  f_id         = id;\\\\n  f_position   = position;\\\\n}\\\"]),p=n([\\\"precision highp float;\\\\n#define GLSLIFY 1\\\\n\\\\nattribute vec3 position;\\\\n\\\\nuniform mat4 model, view, projection;\\\\n\\\\nvoid main() {\\\\n  gl_Position = projection * view * model * vec4(position, 1.0);\\\\n}\\\"]),d=n([\\\"precision highp float;\\\\n#define GLSLIFY 1\\\\n\\\\nuniform vec3 contourColor;\\\\n\\\\nvoid main() {\\\\n  gl_FragColor = vec4(contourColor, 1.0);\\\\n}\\\\n\\\"]);e.meshShader={vertex:i,fragment:a,attributes:[{name:\\\"position\\\",type:\\\"vec3\\\"},{name:\\\"normal\\\",type:\\\"vec3\\\"},{name:\\\"color\\\",type:\\\"vec4\\\"},{name:\\\"uv\\\",type:\\\"vec2\\\"}]},e.wireShader={vertex:o,fragment:s,attributes:[{name:\\\"position\\\",type:\\\"vec3\\\"},{name:\\\"color\\\",type:\\\"vec4\\\"},{name:\\\"uv\\\",type:\\\"vec2\\\"}]},e.pointShader={vertex:l,fragment:u,attributes:[{name:\\\"position\\\",type:\\\"vec3\\\"},{name:\\\"color\\\",type:\\\"vec4\\\"},{name:\\\"uv\\\",type:\\\"vec2\\\"},{name:\\\"pointSize\\\",type:\\\"float\\\"}]},e.pickShader={vertex:c,fragment:f,attributes:[{name:\\\"position\\\",type:\\\"vec3\\\"},{name:\\\"id\\\",type:\\\"vec4\\\"}]},e.pointPickShader={vertex:h,fragment:f,attributes:[{name:\\\"position\\\",type:\\\"vec3\\\"},{name:\\\"pointSize\\\",type:\\\"float\\\"},{name:\\\"id\\\",type:\\\"vec4\\\"}]},e.contourShader={vertex:p,fragment:d,attributes:[{name:\\\"position\\\",type:\\\"vec3\\\"}]}},8116:function(t,e,r){\\\"use strict\\\";var n=r(5158),i=r(5827),a=r(2944),o=r(8931),s=r(115),l=r(104),u=r(7437),c=r(5050),f=r(9156),h=r(7212),p=r(5306),d=r(2056),v=r(4340),g=d.meshShader,y=d.wireShader,m=d.pointShader,x=d.pickShader,b=d.pointPickShader,_=d.contourShader,w=[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1];function T(t,e,r,n,i,a,o,s,l,u,c,f,h,p,d,v,g,y,m,x,b,_,T,k,A,M,S){this.gl=t,this.pixelRatio=1,this.cells=[],this.positions=[],this.intensity=[],this.texture=e,this.dirty=!0,this.triShader=r,this.lineShader=n,this.pointShader=i,this.pickShader=a,this.pointPickShader=o,this.contourShader=s,this.trianglePositions=l,this.triangleColors=c,this.triangleNormals=h,this.triangleUVs=f,this.triangleIds=u,this.triangleVAO=p,this.triangleCount=0,this.lineWidth=1,this.edgePositions=d,this.edgeColors=g,this.edgeUVs=y,this.edgeIds=v,this.edgeVAO=m,this.edgeCount=0,this.pointPositions=x,this.pointColors=_,this.pointUVs=T,this.pointSizes=k,this.pointIds=b,this.pointVAO=A,this.pointCount=0,this.contourLineWidth=1,this.contourPositions=M,this.contourVAO=S,this.contourCount=0,this.contourColor=[0,0,0],this.contourEnable=!0,this.pickVertex=!0,this.pickId=1,this.bounds=[[1/0,1/0,1/0],[-1/0,-1/0,-1/0]],this.clipBounds=[[-1/0,-1/0,-1/0],[1/0,1/0,1/0]],this.lightPosition=[1e5,1e5,0],this.ambientLight=.8,this.diffuseLight=.8,this.specularLight=2,this.roughness=.5,this.fresnel=1.5,this.opacity=1,this.hasAlpha=!1,this.opacityscale=!1,this._model=w,this._view=w,this._projection=w,this._resolution=[1,1]}var k=T.prototype;function A(t,e){if(!e)return 1;if(!e.length)return 1;for(var r=0;r<e.length;++r){if(e.length<2)return 1;if(e[r][0]===t)return e[r][1];if(e[r][0]>t&&r>0){var n=(e[r][0]-t)/(e[r][0]-e[r-1][0]);return e[r][1]*(1-n)+n*e[r-1][1]}}return 1}function M(t){var e=n(t,m.vertex,m.fragment);return e.attributes.position.location=0,e.attributes.color.location=2,e.attributes.uv.location=3,e.attributes.pointSize.location=4,e}function S(t){var e=n(t,x.vertex,x.fragment);return e.attributes.position.location=0,e.attributes.id.location=1,e}function E(t){var e=n(t,b.vertex,b.fragment);return e.attributes.position.location=0,e.attributes.id.location=1,e.attributes.pointSize.location=4,e}function L(t){var e=n(t,_.vertex,_.fragment);return e.attributes.position.location=0,e}k.isOpaque=function(){return!this.hasAlpha},k.isTransparent=function(){return this.hasAlpha},k.pickSlots=1,k.setPickBase=function(t){this.pickId=t},k.highlight=function(t){if(t&&this.contourEnable){for(var e=h(this.cells,this.intensity,t.intensity),r=e.cells,n=e.vertexIds,i=e.vertexWeights,a=r.length,o=p.mallocFloat32(6*a),s=0,l=0;l<a;++l)for(var u=r[l],c=0;c<2;++c){var f=u[0];2===u.length&&(f=u[c]);for(var d=n[f][0],v=n[f][1],g=i[f],y=1-g,m=this.positions[d],x=this.positions[v],b=0;b<3;++b)o[s++]=g*m[b]+y*x[b]}this.contourCount=s/3|0,this.contourPositions.update(o.subarray(0,s)),p.free(o)}else this.contourCount=0},k.update=function(t){t=t||{};var e=this.gl;this.dirty=!0,\\\"contourEnable\\\"in t&&(this.contourEnable=t.contourEnable),\\\"contourColor\\\"in t&&(this.contourColor=t.contourColor),\\\"lineWidth\\\"in t&&(this.lineWidth=t.lineWidth),\\\"lightPosition\\\"in t&&(this.lightPosition=t.lightPosition),this.hasAlpha=!1,\\\"opacity\\\"in t&&(this.opacity=t.opacity,this.opacity<1&&(this.hasAlpha=!0)),\\\"opacityscale\\\"in t&&(this.opacityscale=t.opacityscale,this.hasAlpha=!0),\\\"ambient\\\"in t&&(this.ambientLight=t.ambient),\\\"diffuse\\\"in t&&(this.diffuseLight=t.diffuse),\\\"specular\\\"in t&&(this.specularLight=t.specular),\\\"roughness\\\"in t&&(this.roughness=t.roughness),\\\"fresnel\\\"in t&&(this.fresnel=t.fresnel),t.texture?(this.texture.dispose(),this.texture=o(e,t.texture)):t.colormap&&(this.texture.shape=[256,256],this.texture.minFilter=e.LINEAR_MIPMAP_LINEAR,this.texture.magFilter=e.LINEAR,this.texture.setPixels(function(t,e){for(var r=f({colormap:t,nshades:256,format:\\\"rgba\\\"}),n=new Uint8Array(1024),i=0;i<256;++i){for(var a=r[i],o=0;o<3;++o)n[4*i+o]=a[o];n[4*i+3]=e?255*A(i/255,e):255*a[3]}return c(n,[256,256,4],[4,0,1])}(t.colormap,this.opacityscale)),this.texture.generateMipmap());var r=t.cells,n=t.positions;if(n&&r){var i=[],a=[],l=[],u=[],h=[],p=[],d=[],v=[],g=[],y=[],m=[],x=[],b=[],_=[];this.cells=r,this.positions=n;var w=t.vertexNormals,T=t.cellNormals,k=void 0===t.vertexNormalsEpsilon?1e-6:t.vertexNormalsEpsilon,M=void 0===t.faceNormalsEpsilon?1e-6:t.faceNormalsEpsilon;t.useFacetNormals&&!T&&(T=s.faceNormals(r,n,M)),T||w||(w=s.vertexNormals(r,n,k));var S=t.vertexColors,E=t.cellColors,L=t.meshColor||[1,1,1,1],C=t.vertexUVs,P=t.vertexIntensity,O=t.cellUVs,I=t.cellIntensity,D=1/0,z=-1/0;if(!C&&!O)if(P)if(t.vertexIntensityBounds)D=+t.vertexIntensityBounds[0],z=+t.vertexIntensityBounds[1];else for(var R=0;R<P.length;++R){var F=P[R];D=Math.min(D,F),z=Math.max(z,F)}else if(I)if(t.cellIntensityBounds)D=+t.cellIntensityBounds[0],z=+t.cellIntensityBounds[1];else for(R=0;R<I.length;++R)F=I[R],D=Math.min(D,F),z=Math.max(z,F);else for(R=0;R<n.length;++R)F=n[R][2],D=Math.min(D,F),z=Math.max(z,F);this.intensity=P||I||function(t){for(var e=t.length,r=new Array(e),n=0;n<e;++n)r[n]=t[n][2];return r}(n),this.pickVertex=!(I||E);var B=t.pointSizes,N=t.pointSize||1;for(this.bounds=[[1/0,1/0,1/0],[-1/0,-1/0,-1/0]],R=0;R<n.length;++R)for(var j=n[R],U=0;U<3;++U)!isNaN(j[U])&&isFinite(j[U])&&(this.bounds[0][U]=Math.min(this.bounds[0][U],j[U]),this.bounds[1][U]=Math.max(this.bounds[1][U],j[U]));var V=0,H=0,q=0;t:for(R=0;R<r.length;++R){var G=r[R];switch(G.length){case 1:for(j=n[Y=G[0]],U=0;U<3;++U)if(isNaN(j[U])||!isFinite(j[U]))continue t;y.push(j[0],j[1],j[2]),W=S?S[Y]:E?E[R]:L,this.opacityscale&&P?a.push(W[0],W[1],W[2],this.opacity*A((P[Y]-D)/(z-D),this.opacityscale)):3===W.length?m.push(W[0],W[1],W[2],this.opacity):(m.push(W[0],W[1],W[2],W[3]*this.opacity),W[3]<1&&(this.hasAlpha=!0)),X=C?C[Y]:P?[(P[Y]-D)/(z-D),0]:O?O[R]:I?[(I[R]-D)/(z-D),0]:[(j[2]-D)/(z-D),0],x.push(X[0],X[1]),B?b.push(B[Y]):b.push(N),_.push(R),q+=1;break;case 2:for(U=0;U<2;++U){j=n[Y=G[U]];for(var Z=0;Z<3;++Z)if(isNaN(j[Z])||!isFinite(j[Z]))continue t}for(U=0;U<2;++U)j=n[Y=G[U]],p.push(j[0],j[1],j[2]),W=S?S[Y]:E?E[R]:L,this.opacityscale&&P?a.push(W[0],W[1],W[2],this.opacity*A((P[Y]-D)/(z-D),this.opacityscale)):3===W.length?d.push(W[0],W[1],W[2],this.opacity):(d.push(W[0],W[1],W[2],W[3]*this.opacity),W[3]<1&&(this.hasAlpha=!0)),X=C?C[Y]:P?[(P[Y]-D)/(z-D),0]:O?O[R]:I?[(I[R]-D)/(z-D),0]:[(j[2]-D)/(z-D),0],v.push(X[0],X[1]),g.push(R);H+=1;break;case 3:for(U=0;U<3;++U)for(j=n[Y=G[U]],Z=0;Z<3;++Z)if(isNaN(j[Z])||!isFinite(j[Z]))continue t;for(U=0;U<3;++U){var Y,W,X,J;j=n[Y=G[2-U]],i.push(j[0],j[1],j[2]),(W=S?S[Y]:E?E[R]:L)?this.opacityscale&&P?a.push(W[0],W[1],W[2],this.opacity*A((P[Y]-D)/(z-D),this.opacityscale)):3===W.length?a.push(W[0],W[1],W[2],this.opacity):(a.push(W[0],W[1],W[2],W[3]*this.opacity),W[3]<1&&(this.hasAlpha=!0)):a.push(.5,.5,.5,1),X=C?C[Y]:P?[(P[Y]-D)/(z-D),0]:O?O[R]:I?[(I[R]-D)/(z-D),0]:[(j[2]-D)/(z-D),0],u.push(X[0],X[1]),J=w?w[Y]:T[R],l.push(J[0],J[1],J[2]),h.push(R)}V+=1}}this.pointCount=q,this.edgeCount=H,this.triangleCount=V,this.pointPositions.update(y),this.pointColors.update(m),this.pointUVs.update(x),this.pointSizes.update(b),this.pointIds.update(new Uint32Array(_)),this.edgePositions.update(p),this.edgeColors.update(d),this.edgeUVs.update(v),this.edgeIds.update(new Uint32Array(g)),this.trianglePositions.update(i),this.triangleColors.update(a),this.triangleUVs.update(u),this.triangleNormals.update(l),this.triangleIds.update(new Uint32Array(h))}},k.drawTransparent=k.draw=function(t){t=t||{};for(var e=this.gl,r=t.model||w,n=t.view||w,i=t.projection||w,a=[[-1e6,-1e6,-1e6],[1e6,1e6,1e6]],o=0;o<3;++o)a[0][o]=Math.max(a[0][o],this.clipBounds[0][o]),a[1][o]=Math.min(a[1][o],this.clipBounds[1][o]);var s={model:r,view:n,projection:i,inverseModel:w.slice(),clipBounds:a,kambient:this.ambientLight,kdiffuse:this.diffuseLight,kspecular:this.specularLight,roughness:this.roughness,fresnel:this.fresnel,eyePosition:[0,0,0],lightPosition:[0,0,0],contourColor:this.contourColor,texture:0};s.inverseModel=u(s.inverseModel,s.model),e.disable(e.CULL_FACE),this.texture.bind(0);var c=new Array(16);for(l(c,s.view,s.model),l(c,s.projection,c),u(c,c),o=0;o<3;++o)s.eyePosition[o]=c[12+o]/c[15];var f,h=c[15];for(o=0;o<3;++o)h+=this.lightPosition[o]*c[4*o+3];for(o=0;o<3;++o){for(var p=c[12+o],d=0;d<3;++d)p+=c[4*d+o]*this.lightPosition[d];s.lightPosition[o]=p/h}this.triangleCount>0&&((f=this.triShader).bind(),f.uniforms=s,this.triangleVAO.bind(),e.drawArrays(e.TRIANGLES,0,3*this.triangleCount),this.triangleVAO.unbind()),this.edgeCount>0&&this.lineWidth>0&&((f=this.lineShader).bind(),f.uniforms=s,this.edgeVAO.bind(),e.lineWidth(this.lineWidth*this.pixelRatio),e.drawArrays(e.LINES,0,2*this.edgeCount),this.edgeVAO.unbind()),this.pointCount>0&&((f=this.pointShader).bind(),f.uniforms=s,this.pointVAO.bind(),e.drawArrays(e.POINTS,0,this.pointCount),this.pointVAO.unbind()),this.contourEnable&&this.contourCount>0&&this.contourLineWidth>0&&((f=this.contourShader).bind(),f.uniforms=s,this.contourVAO.bind(),e.drawArrays(e.LINES,0,this.contourCount),this.contourVAO.unbind())},k.drawPick=function(t){t=t||{};for(var e=this.gl,r=t.model||w,n=t.view||w,i=t.projection||w,a=[[-1e6,-1e6,-1e6],[1e6,1e6,1e6]],o=0;o<3;++o)a[0][o]=Math.max(a[0][o],this.clipBounds[0][o]),a[1][o]=Math.min(a[1][o],this.clipBounds[1][o]);this._model=[].slice.call(r),this._view=[].slice.call(n),this._projection=[].slice.call(i),this._resolution=[e.drawingBufferWidth,e.drawingBufferHeight];var s,l={model:r,view:n,projection:i,clipBounds:a,pickId:this.pickId/255};(s=this.pickShader).bind(),s.uniforms=l,this.triangleCount>0&&(this.triangleVAO.bind(),e.drawArrays(e.TRIANGLES,0,3*this.triangleCount),this.triangleVAO.unbind()),this.edgeCount>0&&(this.edgeVAO.bind(),e.lineWidth(this.lineWidth*this.pixelRatio),e.drawArrays(e.LINES,0,2*this.edgeCount),this.edgeVAO.unbind()),this.pointCount>0&&((s=this.pointPickShader).bind(),s.uniforms=l,this.pointVAO.bind(),e.drawArrays(e.POINTS,0,this.pointCount),this.pointVAO.unbind())},k.pick=function(t){if(!t)return null;if(t.id!==this.pickId)return null;for(var e=t.value[0]+256*t.value[1]+65536*t.value[2],r=this.cells[e],n=this.positions,i=new Array(r.length),a=0;a<r.length;++a)i[a]=n[r[a]];var o=t.coord[0],s=t.coord[1];if(!this.pickVertex){var l=this.positions[r[0]],u=this.positions[r[1]],c=this.positions[r[2]],f=[(l[0]+u[0]+c[0])/3,(l[1]+u[1]+c[1])/3,(l[2]+u[2]+c[2])/3];return{_cellCenter:!0,position:[o,s],index:e,cell:r,cellId:e,intensity:this.intensity[e],dataCoordinate:f}}var h=v(i,[o*this.pixelRatio,this._resolution[1]-s*this.pixelRatio],this._model,this._view,this._projection,this._resolution);if(!h)return null;var p=h[2],d=0;for(a=0;a<r.length;++a)d+=p[a]*this.intensity[r[a]];return{position:h[1],index:r[h[0]],cell:r,cellId:e,intensity:d,dataCoordinate:this.positions[r[h[0]]]}},k.dispose=function(){this.texture.dispose(),this.triShader.dispose(),this.lineShader.dispose(),this.pointShader.dispose(),this.pickShader.dispose(),this.pointPickShader.dispose(),this.triangleVAO.dispose(),this.trianglePositions.dispose(),this.triangleColors.dispose(),this.triangleUVs.dispose(),this.triangleNormals.dispose(),this.triangleIds.dispose(),this.edgeVAO.dispose(),this.edgePositions.dispose(),this.edgeColors.dispose(),this.edgeUVs.dispose(),this.edgeIds.dispose(),this.pointVAO.dispose(),this.pointPositions.dispose(),this.pointColors.dispose(),this.pointUVs.dispose(),this.pointSizes.dispose(),this.pointIds.dispose(),this.contourVAO.dispose(),this.contourPositions.dispose(),this.contourShader.dispose()},t.exports=function(t,e){if(1===arguments.length&&(t=(e=t).gl),!(t.getExtension(\\\"OES_standard_derivatives\\\")||t.getExtension(\\\"MOZ_OES_standard_derivatives\\\")||t.getExtension(\\\"WEBKIT_OES_standard_derivatives\\\")))throw new Error(\\\"derivatives not supported\\\");var r=function(t){var e=n(t,g.vertex,g.fragment);return e.attributes.position.location=0,e.attributes.color.location=2,e.attributes.uv.location=3,e.attributes.normal.location=4,e}(t),s=function(t){var e=n(t,y.vertex,y.fragment);return e.attributes.position.location=0,e.attributes.color.location=2,e.attributes.uv.location=3,e}(t),l=M(t),u=S(t),f=E(t),h=L(t),p=o(t,c(new Uint8Array([255,255,255,255]),[1,1,4]));p.generateMipmap(),p.minFilter=t.LINEAR_MIPMAP_LINEAR,p.magFilter=t.LINEAR;var d=i(t),v=i(t),m=i(t),x=i(t),b=i(t),_=a(t,[{buffer:d,type:t.FLOAT,size:3},{buffer:b,type:t.UNSIGNED_BYTE,size:4,normalized:!0},{buffer:v,type:t.FLOAT,size:4},{buffer:m,type:t.FLOAT,size:2},{buffer:x,type:t.FLOAT,size:3}]),w=i(t),k=i(t),A=i(t),C=i(t),P=a(t,[{buffer:w,type:t.FLOAT,size:3},{buffer:C,type:t.UNSIGNED_BYTE,size:4,normalized:!0},{buffer:k,type:t.FLOAT,size:4},{buffer:A,type:t.FLOAT,size:2}]),O=i(t),I=i(t),D=i(t),z=i(t),R=i(t),F=a(t,[{buffer:O,type:t.FLOAT,size:3},{buffer:R,type:t.UNSIGNED_BYTE,size:4,normalized:!0},{buffer:I,type:t.FLOAT,size:4},{buffer:D,type:t.FLOAT,size:2},{buffer:z,type:t.FLOAT,size:1}]),B=i(t),N=new T(t,p,r,s,l,u,f,h,d,b,v,m,x,_,w,C,k,A,P,O,R,I,D,z,F,B,a(t,[{buffer:B,type:t.FLOAT,size:3}]));return N.update(e),N}},4554:function(t,e,r){\\\"use strict\\\";t.exports=function(t){var e=t.gl;return new o(t,n(e,[0,0,0,1,1,0,1,1]),i(e,a.boxVert,a.lineFrag))};var n=r(5827),i=r(5158),a=r(2709);function o(t,e,r){this.plot=t,this.vbo=e,this.shader=r}var s,l,u=o.prototype;u.bind=function(){var t=this.shader;this.vbo.bind(),this.shader.bind(),t.attributes.coord.pointer(),t.uniforms.screenBox=this.plot.screenBox},u.drawBox=(s=[0,0],l=[0,0],function(t,e,r,n,i){var a=this.plot,o=this.shader,u=a.gl;s[0]=t,s[1]=e,l[0]=r,l[1]=n,o.uniforms.lo=s,o.uniforms.hi=l,o.uniforms.color=i,u.drawArrays(u.TRIANGLE_STRIP,0,4)}),u.dispose=function(){this.vbo.dispose(),this.shader.dispose()}},3016:function(t,e,r){\\\"use strict\\\";t.exports=function(t){var e=t.gl;return new s(t,n(e),i(e,o.gridVert,o.gridFrag),i(e,o.tickVert,o.gridFrag))};var n=r(5827),i=r(5158),a=r(5070),o=r(2709);function s(t,e,r,n){this.plot=t,this.vbo=e,this.shader=r,this.tickShader=n,this.ticks=[[],[]]}function l(t,e){return t-e}var u,c,f,h,p,d=s.prototype;d.draw=(u=[0,0],c=[0,0],f=[0,0],function(){for(var t=this.plot,e=this.vbo,r=this.shader,n=this.ticks,i=t.gl,a=t._tickBounds,o=t.dataBox,s=t.viewBox,l=t.gridLineWidth,h=t.gridLineColor,p=t.gridLineEnable,d=t.pixelRatio,v=0;v<2;++v){var g=a[v],y=a[v+2]-g,m=.5*(o[v+2]+o[v]),x=o[v+2]-o[v];c[v]=2*y/x,u[v]=2*(g-m)/x}r.bind(),e.bind(),r.attributes.dataCoord.pointer(),r.uniforms.dataShift=u,r.uniforms.dataScale=c;var b=0;for(v=0;v<2;++v){f[0]=f[1]=0,f[v]=1,r.uniforms.dataAxis=f,r.uniforms.lineWidth=l[v]/(s[v+2]-s[v])*d,r.uniforms.color=h[v];var _=6*n[v].length;p[v]&&_&&i.drawArrays(i.TRIANGLES,b,_),b+=_}}),d.drawTickMarks=function(){var t=[0,0],e=[0,0],r=[1,0],n=[0,1],i=[0,0],o=[0,0];return function(){for(var s=this.plot,u=this.vbo,c=this.tickShader,f=this.ticks,h=s.gl,p=s._tickBounds,d=s.dataBox,v=s.viewBox,g=s.pixelRatio,y=s.screenBox,m=y[2]-y[0],x=y[3]-y[1],b=v[2]-v[0],_=v[3]-v[1],w=0;w<2;++w){var T=p[w],k=p[w+2]-T,A=.5*(d[w+2]+d[w]),M=d[w+2]-d[w];e[w]=2*k/M,t[w]=2*(T-A)/M}e[0]*=b/m,t[0]*=b/m,e[1]*=_/x,t[1]*=_/x,c.bind(),u.bind(),c.attributes.dataCoord.pointer();var S=c.uniforms;S.dataShift=t,S.dataScale=e;var E=s.tickMarkLength,L=s.tickMarkWidth,C=s.tickMarkColor,P=6*f[0].length,O=Math.min(a.ge(f[0],(d[0]-p[0])/(p[2]-p[0]),l),f[0].length),I=Math.min(a.gt(f[0],(d[2]-p[0])/(p[2]-p[0]),l),f[0].length),D=0+6*O,z=6*Math.max(0,I-O),R=Math.min(a.ge(f[1],(d[1]-p[1])/(p[3]-p[1]),l),f[1].length),F=Math.min(a.gt(f[1],(d[3]-p[1])/(p[3]-p[1]),l),f[1].length),B=P+6*R,N=6*Math.max(0,F-R);i[0]=2*(v[0]-E[1])/m-1,i[1]=(v[3]+v[1])/x-1,o[0]=E[1]*g/m,o[1]=L[1]*g/x,N&&(S.color=C[1],S.tickScale=o,S.dataAxis=n,S.screenOffset=i,h.drawArrays(h.TRIANGLES,B,N)),i[0]=(v[2]+v[0])/m-1,i[1]=2*(v[1]-E[0])/x-1,o[0]=L[0]*g/m,o[1]=E[0]*g/x,z&&(S.color=C[0],S.tickScale=o,S.dataAxis=r,S.screenOffset=i,h.drawArrays(h.TRIANGLES,D,z)),i[0]=2*(v[2]+E[3])/m-1,i[1]=(v[3]+v[1])/x-1,o[0]=E[3]*g/m,o[1]=L[3]*g/x,N&&(S.color=C[3],S.tickScale=o,S.dataAxis=n,S.screenOffset=i,h.drawArrays(h.TRIANGLES,B,N)),i[0]=(v[2]+v[0])/m-1,i[1]=2*(v[3]+E[2])/x-1,o[0]=L[2]*g/m,o[1]=E[2]*g/x,z&&(S.color=C[2],S.tickScale=o,S.dataAxis=r,S.screenOffset=i,h.drawArrays(h.TRIANGLES,D,z))}}(),d.update=(h=[1,1,-1,-1,1,-1],p=[1,-1,1,1,-1,-1],function(t){for(var e=t.ticks,r=t.bounds,n=new Float32Array(18*(e[0].length+e[1].length)),i=(this.plot.zeroLineEnable,0),a=[[],[]],o=0;o<2;++o)for(var s=a[o],l=e[o],u=r[o],c=r[o+2],f=0;f<l.length;++f){var d=(l[f].x-u)/(c-u);s.push(d);for(var v=0;v<6;++v)n[i++]=d,n[i++]=h[v],n[i++]=p[v]}this.ticks=a,this.vbo.update(n)}),d.dispose=function(){this.vbo.dispose(),this.shader.dispose(),this.tickShader.dispose()}},1154:function(t,e,r){\\\"use strict\\\";t.exports=function(t){var e=t.gl;return new o(t,n(e,[-1,-1,-1,1,1,-1,1,1]),i(e,a.lineVert,a.lineFrag))};var n=r(5827),i=r(5158),a=r(2709);function o(t,e,r){this.plot=t,this.vbo=e,this.shader=r}var s,l,u=o.prototype;u.bind=function(){var t=this.shader;this.vbo.bind(),this.shader.bind(),t.attributes.coord.pointer(),t.uniforms.screenBox=this.plot.screenBox},u.drawLine=(s=[0,0],l=[0,0],function(t,e,r,n,i,a){var o=this.plot,u=this.shader,c=o.gl;s[0]=t,s[1]=e,l[0]=r,l[1]=n,u.uniforms.start=s,u.uniforms.end=l,u.uniforms.width=i*o.pixelRatio,u.uniforms.color=a,c.drawArrays(c.TRIANGLE_STRIP,0,4)}),u.dispose=function(){this.vbo.dispose(),this.shader.dispose()}},2709:function(t,e,r){\\\"use strict\\\";var n=r(6832),i=n([\\\"precision lowp float;\\\\n#define GLSLIFY 1\\\\nuniform vec4 color;\\\\nvoid main() {\\\\n  gl_FragColor = vec4(color.xyz * color.w, color.w);\\\\n}\\\\n\\\"]);t.exports={lineVert:n([\\\"precision mediump float;\\\\n#define GLSLIFY 1\\\\n\\\\nattribute vec2 coord;\\\\n\\\\nuniform vec4 screenBox;\\\\nuniform vec2 start, end;\\\\nuniform float width;\\\\n\\\\nvec2 perp(vec2 v) {\\\\n  return vec2(v.y, -v.x);\\\\n}\\\\n\\\\nvec2 screen(vec2 v) {\\\\n  return 2.0 * (v - screenBox.xy) / (screenBox.zw - screenBox.xy) - 1.0;\\\\n}\\\\n\\\\nvoid main() {\\\\n  vec2 delta = normalize(perp(start - end));\\\\n  vec2 offset = mix(start, end, 0.5 * (coord.y+1.0));\\\\n  gl_Position = vec4(screen(offset + 0.5 * width * delta * coord.x), 0, 1);\\\\n}\\\\n\\\"]),lineFrag:i,textVert:n([\\\"#define GLSLIFY 1\\\\nattribute vec3 textCoordinate;\\\\n\\\\nuniform vec2 dataScale, dataShift, dataAxis, screenOffset, textScale;\\\\nuniform float angle;\\\\n\\\\nvoid main() {\\\\n  float dataOffset  = textCoordinate.z;\\\\n  vec2 glyphOffset  = textCoordinate.xy;\\\\n  mat2 glyphMatrix = mat2(cos(angle), sin(angle), -sin(angle), cos(angle));\\\\n  vec2 screenCoordinate = dataAxis * (dataScale * dataOffset + dataShift) +\\\\n    glyphMatrix * glyphOffset * textScale + screenOffset;\\\\n  gl_Position = vec4(screenCoordinate, 0, 1);\\\\n}\\\\n\\\"]),textFrag:i,gridVert:n([\\\"precision mediump float;\\\\n#define GLSLIFY 1\\\\n\\\\nattribute vec3 dataCoord;\\\\n\\\\nuniform vec2 dataAxis, dataShift, dataScale;\\\\nuniform float lineWidth;\\\\n\\\\nvoid main() {\\\\n  vec2 pos = dataAxis * (dataScale * dataCoord.x + dataShift);\\\\n  pos += 10.0 * dataCoord.y * vec2(dataAxis.y, -dataAxis.x) + dataCoord.z * lineWidth;\\\\n  gl_Position = vec4(pos, 0, 1);\\\\n}\\\\n\\\"]),gridFrag:i,boxVert:n([\\\"precision mediump float;\\\\n#define GLSLIFY 1\\\\n\\\\nattribute vec2 coord;\\\\n\\\\nuniform vec4 screenBox;\\\\nuniform vec2 lo, hi;\\\\n\\\\nvec2 screen(vec2 v) {\\\\n  return 2.0 * (v - screenBox.xy) / (screenBox.zw - screenBox.xy) - 1.0;\\\\n}\\\\n\\\\nvoid main() {\\\\n  gl_Position = vec4(screen(mix(lo, hi, coord)), 0, 1);\\\\n}\\\\n\\\"]),tickVert:n([\\\"precision mediump float;\\\\n#define GLSLIFY 1\\\\n\\\\nattribute vec3 dataCoord;\\\\n\\\\nuniform vec2 dataAxis, dataShift, dataScale, screenOffset, tickScale;\\\\n\\\\nvoid main() {\\\\n  vec2 pos = dataAxis * (dataScale * dataCoord.x + dataShift);\\\\n  gl_Position = vec4(pos + tickScale*dataCoord.yz + screenOffset, 0, 1);\\\\n}\\\\n\\\"])}},5613:function(t,e,r){\\\"use strict\\\";t.exports=function(t){var e=t.gl;return new l(t,n(e),i(e,s.textVert,s.textFrag))};var n=r(5827),i=r(5158),a=r(6946),o=r(5070),s=r(2709);function l(t,e,r){this.plot=t,this.vbo=e,this.shader=r,this.tickOffset=[[],[]],this.tickX=[[],[]],this.labelOffset=[0,0],this.labelCount=[0,0]}var u,c,f,h,p,d,v=l.prototype;v.drawTicks=(u=[0,0],c=[0,0],f=[0,0],function(t){var e=this.plot,r=this.shader,n=this.tickX[t],i=this.tickOffset[t],a=e.gl,s=e.viewBox,l=e.dataBox,h=e.screenBox,p=e.pixelRatio,d=e.tickEnable,v=e.tickPad,g=e.tickColor,y=e.tickAngle,m=e.labelEnable,x=e.labelPad,b=e.labelColor,_=e.labelAngle,w=this.labelOffset[t],T=this.labelCount[t],k=o.lt(n,l[t]),A=o.le(n,l[t+2]);u[0]=u[1]=0,u[t]=1,c[t]=(s[2+t]+s[t])/(h[2+t]-h[t])-1;var M=2/h[2+(1^t)]-h[1^t];c[1^t]=M*s[1^t]-1,d[t]&&(c[1^t]-=M*p*v[t],k<A&&i[A]>i[k]&&(r.uniforms.dataAxis=u,r.uniforms.screenOffset=c,r.uniforms.color=g[t],r.uniforms.angle=y[t],a.drawArrays(a.TRIANGLES,i[k],i[A]-i[k]))),m[t]&&T&&(c[1^t]-=M*p*x[t],r.uniforms.dataAxis=f,r.uniforms.screenOffset=c,r.uniforms.color=b[t],r.uniforms.angle=_[t],a.drawArrays(a.TRIANGLES,w,T)),c[1^t]=M*s[2+(1^t)]-1,d[t+2]&&(c[1^t]+=M*p*v[t+2],k<A&&i[A]>i[k]&&(r.uniforms.dataAxis=u,r.uniforms.screenOffset=c,r.uniforms.color=g[t+2],r.uniforms.angle=y[t+2],a.drawArrays(a.TRIANGLES,i[k],i[A]-i[k]))),m[t+2]&&T&&(c[1^t]+=M*p*x[t+2],r.uniforms.dataAxis=f,r.uniforms.screenOffset=c,r.uniforms.color=b[t+2],r.uniforms.angle=_[t+2],a.drawArrays(a.TRIANGLES,w,T))}),v.drawTitle=function(){var t=[0,0],e=[0,0];return function(){var r=this.plot,n=this.shader,i=r.gl,a=r.screenBox,o=r.titleCenter,s=r.titleAngle,l=r.titleColor,u=r.pixelRatio;if(this.titleCount){for(var c=0;c<2;++c)e[c]=2*(o[c]*u-a[c])/(a[2+c]-a[c])-1;n.bind(),n.uniforms.dataAxis=t,n.uniforms.screenOffset=e,n.uniforms.angle=s,n.uniforms.color=l,i.drawArrays(i.TRIANGLES,this.titleOffset,this.titleCount)}}}(),v.bind=(h=[0,0],p=[0,0],d=[0,0],function(){var t=this.plot,e=this.shader,r=t._tickBounds,n=t.dataBox,i=t.screenBox,a=t.viewBox;e.bind();for(var o=0;o<2;++o){var s=r[o],l=r[o+2]-s,u=.5*(n[o+2]+n[o]),c=n[o+2]-n[o],f=a[o],v=a[o+2]-f,g=i[o],y=i[o+2]-g;p[o]=2*l/c*v/y,h[o]=2*(s-u)/c*v/y}d[1]=2*t.pixelRatio/(i[3]-i[1]),d[0]=d[1]*(i[3]-i[1])/(i[2]-i[0]),e.uniforms.dataScale=p,e.uniforms.dataShift=h,e.uniforms.textScale=d,this.vbo.bind(),e.attributes.textCoordinate.pointer()}),v.update=function(t){var e,r,n,i,o,s=[],l=t.ticks,u=t.bounds;for(o=0;o<2;++o){var c=[Math.floor(s.length/3)],f=[-1/0],h=l[o];for(e=0;e<h.length;++e){var p=h[e],d=p.x,v=p.text,g=p.font||\\\"sans-serif\\\";i=p.fontSize||12;for(var y=1/(u[o+2]-u[o]),m=u[o],x=v.split(\\\"\\\\n\\\"),b=0;b<x.length;b++)for(n=a(g,x[b]).data,r=0;r<n.length;r+=2)s.push(n[r]*i,-n[r+1]*i-b*i*1.2,(d-m)*y);c.push(Math.floor(s.length/3)),f.push(d)}this.tickOffset[o]=c,this.tickX[o]=f}for(o=0;o<2;++o){for(this.labelOffset[o]=Math.floor(s.length/3),n=a(t.labelFont[o],t.labels[o],{textAlign:\\\"center\\\"}).data,i=t.labelSize[o],e=0;e<n.length;e+=2)s.push(n[e]*i,-n[e+1]*i,0);this.labelCount[o]=Math.floor(s.length/3)-this.labelOffset[o]}for(this.titleOffset=Math.floor(s.length/3),n=a(t.titleFont,t.title).data,i=t.titleSize,e=0;e<n.length;e+=2)s.push(n[e]*i,-n[e+1]*i,0);this.titleCount=Math.floor(s.length/3)-this.titleOffset,this.vbo.update(s)},v.dispose=function(){this.vbo.dispose(),this.shader.dispose()}},2117:function(t,e,r){\\\"use strict\\\";t.exports=function(t){var e=t.gl,r=new l(e,n(e,[e.drawingBufferWidth,e.drawingBufferHeight]));return r.grid=i(r),r.text=a(r),r.line=o(r),r.box=s(r),r.update(t),r};var n=r(2611),i=r(3016),a=r(5613),o=r(1154),s=r(4554);function l(t,e){this.gl=t,this.pickBuffer=e,this.screenBox=[0,0,t.drawingBufferWidth,t.drawingBufferHeight],this.viewBox=[0,0,0,0],this.dataBox=[-10,-10,10,10],this.gridLineEnable=[!0,!0],this.gridLineWidth=[1,1],this.gridLineColor=[[0,0,0,1],[0,0,0,1]],this.pixelRatio=1,this.tickMarkLength=[0,0,0,0],this.tickMarkWidth=[0,0,0,0],this.tickMarkColor=[[0,0,0,1],[0,0,0,1],[0,0,0,1],[0,0,0,1]],this.tickPad=[15,15,15,15],this.tickAngle=[0,0,0,0],this.tickEnable=[!0,!0,!0,!0],this.tickColor=[[0,0,0,1],[0,0,0,1],[0,0,0,1],[0,0,0,1]],this.labelPad=[15,15,15,15],this.labelAngle=[0,Math.PI/2,0,3*Math.PI/2],this.labelEnable=[!0,!0,!0,!0],this.labelColor=[[0,0,0,1],[0,0,0,1],[0,0,0,1],[0,0,0,1]],this.titleCenter=[0,0],this.titleEnable=!0,this.titleAngle=0,this.titleColor=[0,0,0,1],this.borderColor=[0,0,0,0],this.backgroundColor=[0,0,0,0],this.zeroLineEnable=[!0,!0],this.zeroLineWidth=[4,4],this.zeroLineColor=[[0,0,0,1],[0,0,0,1]],this.borderLineEnable=[!0,!0,!0,!0],this.borderLineWidth=[2,2,2,2],this.borderLineColor=[[0,0,0,1],[0,0,0,1],[0,0,0,1],[0,0,0,1]],this.grid=null,this.text=null,this.line=null,this.box=null,this.objects=[],this.overlays=[],this._tickBounds=[1/0,1/0,-1/0,-1/0],this.static=!1,this.dirty=!1,this.pickDirty=!1,this.pickDelay=120,this.pickRadius=10,this._pickTimeout=null,this._drawPick=this.drawPick.bind(this),this._depthCounter=0}var u=l.prototype;function c(t){for(var e=t.slice(),r=0;r<e.length;++r)e[r]=e[r].slice();return e}function f(t,e){return t.x-e.x}u.setDirty=function(){this.dirty=this.pickDirty=!0},u.setOverlayDirty=function(){this.dirty=!0},u.nextDepthValue=function(){return this._depthCounter++/65536},u.draw=function(){var t=this.gl,e=this.screenBox,r=this.viewBox,n=this.dataBox,i=this.pixelRatio,a=this.grid,o=this.line,s=this.text,l=this.objects;if(this._depthCounter=0,this.pickDirty&&(this._pickTimeout&&clearTimeout(this._pickTimeout),this.pickDirty=!1,this._pickTimeout=setTimeout(this._drawPick,this.pickDelay)),this.dirty){if(this.dirty=!1,t.bindFramebuffer(t.FRAMEBUFFER,null),t.enable(t.SCISSOR_TEST),t.disable(t.DEPTH_TEST),t.depthFunc(t.LESS),t.depthMask(!1),t.enable(t.BLEND),t.blendEquation(t.FUNC_ADD,t.FUNC_ADD),t.blendFunc(t.ONE,t.ONE_MINUS_SRC_ALPHA),this.borderColor){t.scissor(e[0],e[1],e[2]-e[0],e[3]-e[1]);var u=this.borderColor;t.clearColor(u[0]*u[3],u[1]*u[3],u[2]*u[3],u[3]),t.clear(t.COLOR_BUFFER_BIT|t.DEPTH_BUFFER_BIT)}t.scissor(r[0],r[1],r[2]-r[0],r[3]-r[1]),t.viewport(r[0],r[1],r[2]-r[0],r[3]-r[1]);var c=this.backgroundColor;t.clearColor(c[0]*c[3],c[1]*c[3],c[2]*c[3],c[3]),t.clear(t.COLOR_BUFFER_BIT),a.draw();var f=this.zeroLineEnable,h=this.zeroLineColor,p=this.zeroLineWidth;if(f[0]||f[1]){o.bind();for(var d=0;d<2;++d)if(f[d]&&n[d]<=0&&n[d+2]>=0){var v=e[d]-n[d]*(e[d+2]-e[d])/(n[d+2]-n[d]);0===d?o.drawLine(v,e[1],v,e[3],p[d],h[d]):o.drawLine(e[0],v,e[2],v,p[d],h[d])}}for(d=0;d<l.length;++d)l[d].draw();t.viewport(e[0],e[1],e[2]-e[0],e[3]-e[1]),t.scissor(e[0],e[1],e[2]-e[0],e[3]-e[1]),this.grid.drawTickMarks(),o.bind();var g=this.borderLineEnable,y=this.borderLineWidth,m=this.borderLineColor;for(g[1]&&o.drawLine(r[0],r[1]-.5*y[1]*i,r[0],r[3]+.5*y[3]*i,y[1],m[1]),g[0]&&o.drawLine(r[0]-.5*y[0]*i,r[1],r[2]+.5*y[2]*i,r[1],y[0],m[0]),g[3]&&o.drawLine(r[2],r[1]-.5*y[1]*i,r[2],r[3]+.5*y[3]*i,y[3],m[3]),g[2]&&o.drawLine(r[0]-.5*y[0]*i,r[3],r[2]+.5*y[2]*i,r[3],y[2],m[2]),s.bind(),d=0;d<2;++d)s.drawTicks(d);this.titleEnable&&s.drawTitle();var x=this.overlays;for(d=0;d<x.length;++d)x[d].draw();t.disable(t.SCISSOR_TEST),t.disable(t.BLEND),t.depthMask(!0)}},u.drawPick=function(){if(!this.static){var t=this.pickBuffer;this.gl,this._pickTimeout=null,t.begin();for(var e=1,r=this.objects,n=0;n<r.length;++n)e=r[n].drawPick(e);t.end()}},u.pick=function(t,e){if(!this.static){var r=this.pixelRatio,n=this.pickPixelRatio,i=this.viewBox,a=0|Math.round((t-i[0]/r)*n),o=0|Math.round((e-i[1]/r)*n),s=this.pickBuffer.query(a,o,this.pickRadius);if(!s)return null;for(var l=s.id+(s.value[0]<<8)+(s.value[1]<<16)+(s.value[2]<<24),u=this.objects,c=0;c<u.length;++c){var f=u[c].pick(a,o,l);if(f)return f}return null}},u.setScreenBox=function(t){var e=this.screenBox,r=this.pixelRatio;e[0]=0|Math.round(t[0]*r),e[1]=0|Math.round(t[1]*r),e[2]=0|Math.round(t[2]*r),e[3]=0|Math.round(t[3]*r),this.setDirty()},u.setDataBox=function(t){var e=this.dataBox;(e[0]!==t[0]||e[1]!==t[1]||e[2]!==t[2]||e[3]!==t[3])&&(e[0]=t[0],e[1]=t[1],e[2]=t[2],e[3]=t[3],this.setDirty())},u.setViewBox=function(t){var e=this.pixelRatio,r=this.viewBox;r[0]=0|Math.round(t[0]*e),r[1]=0|Math.round(t[1]*e),r[2]=0|Math.round(t[2]*e),r[3]=0|Math.round(t[3]*e);var n=this.pickPixelRatio;this.pickBuffer.shape=[0|Math.round((t[2]-t[0])*n),0|Math.round((t[3]-t[1])*n)],this.setDirty()},u.update=function(t){t=t||{};var e=this.gl;this.pixelRatio=t.pixelRatio||1;var r=this.pixelRatio;this.pickPixelRatio=Math.max(r,1),this.setScreenBox(t.screenBox||[0,0,e.drawingBufferWidth/r,e.drawingBufferHeight/r]),this.screenBox,this.setViewBox(t.viewBox||[.125*(this.screenBox[2]-this.screenBox[0])/r,.125*(this.screenBox[3]-this.screenBox[1])/r,.875*(this.screenBox[2]-this.screenBox[0])/r,.875*(this.screenBox[3]-this.screenBox[1])/r]);var n=this.viewBox,i=(n[2]-n[0])/(n[3]-n[1]);this.setDataBox(t.dataBox||[-10,-10/i,10,10/i]),this.borderColor=!1!==t.borderColor&&(t.borderColor||[0,0,0,0]).slice(),this.backgroundColor=(t.backgroundColor||[0,0,0,0]).slice(),this.gridLineEnable=(t.gridLineEnable||[!0,!0]).slice(),this.gridLineWidth=(t.gridLineWidth||[1,1]).slice(),this.gridLineColor=c(t.gridLineColor||[[.5,.5,.5,1],[.5,.5,.5,1]]),this.zeroLineEnable=(t.zeroLineEnable||[!0,!0]).slice(),this.zeroLineWidth=(t.zeroLineWidth||[4,4]).slice(),this.zeroLineColor=c(t.zeroLineColor||[[0,0,0,1],[0,0,0,1]]),this.tickMarkLength=(t.tickMarkLength||[0,0,0,0]).slice(),this.tickMarkWidth=(t.tickMarkWidth||[0,0,0,0]).slice(),this.tickMarkColor=c(t.tickMarkColor||[[0,0,0,1],[0,0,0,1],[0,0,0,1],[0,0,0,1]]),this.titleCenter=(t.titleCenter||[.5*(n[0]+n[2])/r,(n[3]+120)/r]).slice(),this.titleEnable=!(\\\"titleEnable\\\"in t)||!!t.titleEnable,this.titleAngle=t.titleAngle||0,this.titleColor=(t.titleColor||[0,0,0,1]).slice(),this.labelPad=(t.labelPad||[15,15,15,15]).slice(),this.labelAngle=(t.labelAngle||[0,Math.PI/2,0,3*Math.PI/2]).slice(),this.labelEnable=(t.labelEnable||[!0,!0,!0,!0]).slice(),this.labelColor=c(t.labelColor||[[0,0,0,1],[0,0,0,1],[0,0,0,1],[0,0,0,1]]),this.tickPad=(t.tickPad||[15,15,15,15]).slice(),this.tickAngle=(t.tickAngle||[0,0,0,0]).slice(),this.tickEnable=(t.tickEnable||[!0,!0,!0,!0]).slice(),this.tickColor=c(t.tickColor||[[0,0,0,1],[0,0,0,1],[0,0,0,1],[0,0,0,1]]),this.borderLineEnable=(t.borderLineEnable||[!0,!0,!0,!0]).slice(),this.borderLineWidth=(t.borderLineWidth||[2,2,2,2]).slice(),this.borderLineColor=c(t.borderLineColor||[[0,0,0,1],[0,0,0,1],[0,0,0,1],[0,0,0,1]]);var a=t.ticks||[[],[]],o=this._tickBounds;o[0]=o[1]=1/0,o[2]=o[3]=-1/0;for(var s=0;s<2;++s){var l=a[s].slice(0);0!==l.length&&(l.sort(f),o[s]=Math.min(o[s],l[0].x),o[s+2]=Math.max(o[s+2],l[l.length-1].x))}this.grid.update({bounds:o,ticks:a}),this.text.update({bounds:o,ticks:a,labels:t.labels||[\\\"x\\\",\\\"y\\\"],labelSize:t.labelSize||[12,12],labelFont:t.labelFont||[\\\"sans-serif\\\",\\\"sans-serif\\\"],title:t.title||\\\"\\\",titleSize:t.titleSize||18,titleFont:t.titleFont||\\\"sans-serif\\\"}),this.static=!!t.static,this.setDirty()},u.dispose=function(){this.box.dispose(),this.grid.dispose(),this.text.dispose(),this.line.dispose();for(var t=this.objects.length-1;t>=0;--t)this.objects[t].dispose();for(this.objects.length=0,t=this.overlays.length-1;t>=0;--t)this.overlays[t].dispose();this.overlays.length=0,this.gl=null},u.addObject=function(t){this.objects.indexOf(t)<0&&(this.objects.push(t),this.setDirty())},u.removeObject=function(t){for(var e=this.objects,r=0;r<e.length;++r)if(e[r]===t){e.splice(r,1),this.setDirty();break}},u.addOverlay=function(t){this.overlays.indexOf(t)<0&&(this.overlays.push(t),this.setOverlayDirty())},u.removeOverlay=function(t){for(var e=this.overlays,r=0;r<e.length;++r)if(e[r]===t){e.splice(r,1),this.setOverlayDirty();break}}},4296:function(t,e,r){\\\"use strict\\\";t.exports=function(t,e){t=t||document.body;var r=[.01,1/0];\\\"distanceLimits\\\"in(e=e||{})&&(r[0]=e.distanceLimits[0],r[1]=e.distanceLimits[1]),\\\"zoomMin\\\"in e&&(r[0]=e.zoomMin),\\\"zoomMax\\\"in e&&(r[1]=e.zoomMax);var u=i({center:e.center||[0,0,0],up:e.up||[0,1,0],eye:e.eye||[0,0,10],mode:e.mode||\\\"orbit\\\",distanceLimits:r}),c=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],f=0,h=t.clientWidth,p=t.clientHeight,d={keyBindingMode:\\\"rotate\\\",enableWheel:!0,view:u,element:t,delay:e.delay||16,rotateSpeed:e.rotateSpeed||1,zoomSpeed:e.zoomSpeed||1,translateSpeed:e.translateSpeed||1,flipX:!!e.flipX,flipY:!!e.flipY,modes:u.modes,_ortho:e._ortho||e.projection&&\\\"orthographic\\\"===e.projection.type||!1,tick:function(){var e=n(),r=this.delay,i=e-2*r;u.idle(e-r),u.recalcMatrix(i),u.flush(e-(100+2*r));for(var a=!0,o=u.computedMatrix,s=0;s<16;++s)a=a&&c[s]===o[s],c[s]=o[s];var l=t.clientWidth===h&&t.clientHeight===p;return h=t.clientWidth,p=t.clientHeight,a?!l:(f=Math.exp(u.computedRadius[0]),!0)},lookAt:function(t,e,r){u.lookAt(u.lastT(),t,e,r)},rotate:function(t,e,r){u.rotate(u.lastT(),t,e,r)},pan:function(t,e,r){u.pan(u.lastT(),t,e,r)},translate:function(t,e,r){u.translate(u.lastT(),t,e,r)}};return Object.defineProperties(d,{matrix:{get:function(){return u.computedMatrix},set:function(t){return u.setMatrix(u.lastT(),t),u.computedMatrix},enumerable:!0},mode:{get:function(){return u.getMode()},set:function(t){var e=u.computedUp.slice(),r=u.computedEye.slice(),i=u.computedCenter.slice();if(u.setMode(t),\\\"turntable\\\"===t){var a=n();u._active.lookAt(a,r,i,e),u._active.lookAt(a+500,r,i,[0,0,1]),u._active.flush(a)}return u.getMode()},enumerable:!0},center:{get:function(){return u.computedCenter},set:function(t){return u.lookAt(u.lastT(),null,t),u.computedCenter},enumerable:!0},eye:{get:function(){return u.computedEye},set:function(t){return u.lookAt(u.lastT(),t),u.computedEye},enumerable:!0},up:{get:function(){return u.computedUp},set:function(t){return u.lookAt(u.lastT(),null,null,t),u.computedUp},enumerable:!0},distance:{get:function(){return f},set:function(t){return u.setDistance(u.lastT(),t),t},enumerable:!0},distanceLimits:{get:function(){return u.getDistanceLimits(r)},set:function(t){return u.setDistanceLimits(t),t},enumerable:!0}}),t.addEventListener(\\\"contextmenu\\\",(function(t){return t.preventDefault(),!1})),d._lastX=-1,d._lastY=-1,d._lastMods={shift:!1,control:!1,alt:!1,meta:!1},d.enableMouseListeners=function(){function e(e,r,i,a){var o=d.keyBindingMode;if(!1!==o){var s=\\\"rotate\\\"===o,l=\\\"pan\\\"===o,c=\\\"zoom\\\"===o,h=!!a.control,p=!!a.alt,v=!!a.shift,g=!!(1&e),y=!!(2&e),m=!!(4&e),x=1/t.clientHeight,b=x*(r-d._lastX),_=x*(i-d._lastY),w=d.flipX?1:-1,T=d.flipY?1:-1,k=Math.PI*d.rotateSpeed,A=n();if(-1!==d._lastX&&-1!==d._lastY&&((s&&g&&!h&&!p&&!v||g&&!h&&!p&&v)&&u.rotate(A,w*k*b,-T*k*_,0),(l&&g&&!h&&!p&&!v||y||g&&h&&!p&&!v)&&u.pan(A,-d.translateSpeed*b*f,d.translateSpeed*_*f,0),c&&g&&!h&&!p&&!v||m||g&&!h&&p&&!v)){var M=-d.zoomSpeed*_/window.innerHeight*(A-u.lastT())*100;u.pan(A,0,0,f*(Math.exp(M)-1))}return d._lastX=r,d._lastY=i,d._lastMods=a,!0}}d.mouseListener=a(t,e),t.addEventListener(\\\"touchstart\\\",(function(r){var n=s(r.changedTouches[0],t);e(0,n[0],n[1],d._lastMods),e(1,n[0],n[1],d._lastMods)}),!!l&&{passive:!0}),t.addEventListener(\\\"touchmove\\\",(function(r){var n=s(r.changedTouches[0],t);e(1,n[0],n[1],d._lastMods),r.preventDefault()}),!!l&&{passive:!1}),t.addEventListener(\\\"touchend\\\",(function(t){e(0,d._lastX,d._lastY,d._lastMods)}),!!l&&{passive:!0}),d.wheelListener=o(t,(function(t,e){if(!1!==d.keyBindingMode&&d.enableWheel){var r=d.flipX?1:-1,i=d.flipY?1:-1,a=n();if(Math.abs(t)>Math.abs(e))u.rotate(a,0,0,-t*r*Math.PI*d.rotateSpeed/window.innerWidth);else if(!d._ortho){var o=-d.zoomSpeed*i*e/window.innerHeight*(a-u.lastT())/20;u.pan(a,0,0,f*(Math.exp(o)-1))}}}),!0)},d.enableMouseListeners(),d};var n=r(8161),i=r(1152),a=r(6145),o=r(6475),s=r(2565),l=r(5233)},8245:function(t,e,r){var n=r(6832),i=r(5158),a=n([\\\"precision mediump float;\\\\n#define GLSLIFY 1\\\\nattribute vec2 position;\\\\nvarying vec2 uv;\\\\nvoid main() {\\\\n  uv = position;\\\\n  gl_Position = vec4(position, 0, 1);\\\\n}\\\"]),o=n([\\\"precision mediump float;\\\\n#define GLSLIFY 1\\\\n\\\\nuniform sampler2D accumBuffer;\\\\nvarying vec2 uv;\\\\n\\\\nvoid main() {\\\\n  vec4 accum = texture2D(accumBuffer, 0.5 * (uv + 1.0));\\\\n  gl_FragColor = min(vec4(1,1,1,1), accum);\\\\n}\\\"]);t.exports=function(t){return i(t,a,o,null,[{name:\\\"position\\\",type:\\\"vec2\\\"}])}},1059:function(t,e,r){\\\"use strict\\\";var n=r(4296),i=r(7453),a=r(2771),o=r(6496),s=r(2611),l=r(4234),u=r(8126),c=r(6145),f=r(1120),h=r(5268),p=r(8245),d=r(2321)({tablet:!0,featureDetect:!0});function v(){this.mouse=[-1,-1],this.screen=null,this.distance=1/0,this.index=null,this.dataCoordinate=null,this.dataPosition=null,this.object=null,this.data=null}function g(t){var e=Math.round(Math.log(Math.abs(t))/Math.log(10));if(e<0){var r=Math.round(Math.pow(10,-e));return Math.ceil(t*r)/r}return e>0?(r=Math.round(Math.pow(10,e)),Math.ceil(t/r)*r):Math.ceil(t)}function y(t){return\\\"boolean\\\"!=typeof t||t}t.exports={createScene:function(t){(t=t||{}).camera=t.camera||{};var e=t.canvas;e||(e=document.createElement(\\\"canvas\\\"),t.container?t.container.appendChild(e):document.body.appendChild(e));var r=t.gl;if(r||(t.glOptions&&(d=!!t.glOptions.preserveDrawingBuffer),r=function(t,e){var r=null;try{(r=t.getContext(\\\"webgl\\\",e))||(r=t.getContext(\\\"experimental-webgl\\\",e))}catch(t){return null}return r}(e,t.glOptions||{premultipliedAlpha:!0,antialias:!0,preserveDrawingBuffer:d})),!r)throw new Error(\\\"webgl not supported\\\");var m=t.bounds||[[-10,-10,-10],[10,10,10]],x=new v,b=l(r,r.drawingBufferWidth,r.drawingBufferHeight,{preferFloat:!d}),_=p(r),w=t.cameraObject&&!0===t.cameraObject._ortho||t.camera.projection&&\\\"orthographic\\\"===t.camera.projection.type||!1,T={eye:t.camera.eye||[2,0,0],center:t.camera.center||[0,0,0],up:t.camera.up||[0,1,0],zoomMin:t.camera.zoomMax||.1,zoomMax:t.camera.zoomMin||100,mode:t.camera.mode||\\\"turntable\\\",_ortho:w},k=t.axes||{},A=i(r,k);A.enable=!k.disable;var M=t.spikes||{},S=o(r,M),E=[],L=[],C=[],P=[],O=!0,I=!0,D={view:null,projection:new Array(16),model:new Array(16),_ortho:!1},z=(I=!0,[r.drawingBufferWidth,r.drawingBufferHeight]),R=t.cameraObject||n(e,T),F={gl:r,contextLost:!1,pixelRatio:t.pixelRatio||1,canvas:e,selection:x,camera:R,axes:A,axesPixels:null,spikes:S,bounds:m,objects:E,shape:z,aspect:t.aspectRatio||[1,1,1],pickRadius:t.pickRadius||10,zNear:t.zNear||.01,zFar:t.zFar||1e3,fovy:t.fovy||Math.PI/4,clearColor:t.clearColor||[0,0,0,0],autoResize:y(t.autoResize),autoBounds:y(t.autoBounds),autoScale:!!t.autoScale,autoCenter:y(t.autoCenter),clipToBounds:y(t.clipToBounds),snapToData:!!t.snapToData,onselect:t.onselect||null,onrender:t.onrender||null,onclick:t.onclick||null,cameraParams:D,oncontextloss:null,mouseListener:null,_stopped:!1,getAspectratio:function(){return{x:this.aspect[0],y:this.aspect[1],z:this.aspect[2]}},setAspectratio:function(t){this.aspect[0]=t.x,this.aspect[1]=t.y,this.aspect[2]=t.z,I=!0},setBounds:function(t,e){this.bounds[0][t]=e.min,this.bounds[1][t]=e.max},setClearColor:function(t){this.clearColor=t},clearRGBA:function(){this.gl.clearColor(this.clearColor[0],this.clearColor[1],this.clearColor[2],this.clearColor[3]),this.gl.clear(this.gl.COLOR_BUFFER_BIT|this.gl.DEPTH_BUFFER_BIT)}},B=[r.drawingBufferWidth/F.pixelRatio|0,r.drawingBufferHeight/F.pixelRatio|0];function N(){if(!F._stopped&&F.autoResize){var t=e.parentNode,r=1,n=1;t&&t!==document.body?(r=t.clientWidth,n=t.clientHeight):(r=window.innerWidth,n=window.innerHeight);var i=0|Math.ceil(r*F.pixelRatio),a=0|Math.ceil(n*F.pixelRatio);if(i!==e.width||a!==e.height){e.width=i,e.height=a;var o=e.style;o.position=o.position||\\\"absolute\\\",o.left=\\\"0px\\\",o.top=\\\"0px\\\",o.width=r+\\\"px\\\",o.height=n+\\\"px\\\",O=!0}}}function j(){for(var t=E.length,e=P.length,n=0;n<e;++n)C[n]=0;t:for(n=0;n<t;++n){var i=E[n],a=i.pickSlots;if(a){for(var o=0;o<e;++o)if(C[o]+a<255){L[n]=o,i.setPickBase(C[o]+1),C[o]+=a;continue t}var l=s(r,z);L[n]=e,P.push(l),C.push(a),i.setPickBase(1),e+=1}else L[n]=-1}for(;e>0&&0===C[e-1];)C.pop(),P.pop().dispose()}function U(){if(F.contextLost)return!0;r.isContextLost()&&(F.contextLost=!0,F.mouseListener.enabled=!1,F.selection.object=null,F.oncontextloss&&F.oncontextloss())}F.autoResize&&N(),window.addEventListener(\\\"resize\\\",N),F.update=function(t){F._stopped||(t=t||{},O=!0,I=!0)},F.add=function(t){F._stopped||(t.axes=A,E.push(t),L.push(-1),O=!0,I=!0,j())},F.remove=function(t){if(!F._stopped){var e=E.indexOf(t);e<0||(E.splice(e,1),L.pop(),O=!0,I=!0,j())}},F.dispose=function(){if(!F._stopped&&(F._stopped=!0,window.removeEventListener(\\\"resize\\\",N),e.removeEventListener(\\\"webglcontextlost\\\",U),F.mouseListener.enabled=!1,!F.contextLost)){A.dispose(),S.dispose();for(var t=0;t<E.length;++t)E[t].dispose();for(b.dispose(),t=0;t<P.length;++t)P[t].dispose();_.dispose(),r=null,A=null,S=null,E=[]}},F._mouseRotating=!1,F._prevButtons=0,F.enableMouseListeners=function(){F.mouseListener=c(e,(function(t,e,r){if(!F._stopped){var n=P.length,i=E.length,a=x.object;x.distance=1/0,x.mouse[0]=e,x.mouse[1]=r,x.object=null,x.screen=null,x.dataCoordinate=x.dataPosition=null;var o=!1;if(t&&F._prevButtons)F._mouseRotating=!0;else{F._mouseRotating&&(I=!0),F._mouseRotating=!1;for(var s=0;s<n;++s){var l=P[s].query(e,B[1]-r-1,F.pickRadius);if(l){if(l.distance>x.distance)continue;for(var u=0;u<i;++u){var c=E[u];if(L[u]===s){var f=c.pick(l);f&&(x.buttons=t,x.screen=l.coord,x.distance=l.distance,x.object=c,x.index=f.distance,x.dataPosition=f.position,x.dataCoordinate=f.dataCoordinate,x.data=f,o=!0)}}}}}a&&a!==x.object&&(a.highlight&&a.highlight(null),O=!0),x.object&&(x.object.highlight&&x.object.highlight(x.data),O=!0),(o=o||x.object!==a)&&F.onselect&&F.onselect(x),1&t&&!(1&F._prevButtons)&&F.onclick&&F.onclick(x),F._prevButtons=t}}))},e.addEventListener(\\\"webglcontextlost\\\",U);var V=[[1/0,1/0,1/0],[-1/0,-1/0,-1/0]],H=[V[0].slice(),V[1].slice()];function q(){if(!U()){N();var t=F.camera.tick();D.view=F.camera.matrix,O=O||t,I=I||t,A.pixelRatio=F.pixelRatio,S.pixelRatio=F.pixelRatio;var e=E.length,n=V[0],i=V[1];n[0]=n[1]=n[2]=1/0,i[0]=i[1]=i[2]=-1/0;for(var o=0;o<e;++o){(C=E[o]).pixelRatio=F.pixelRatio,C.axes=F.axes,O=O||!!C.dirty,I=I||!!C.dirty;var s=C.bounds;if(s)for(var l=s[0],c=s[1],p=0;p<3;++p)n[p]=Math.min(n[p],l[p]),i[p]=Math.max(i[p],c[p])}var d=F.bounds;if(F.autoBounds)for(p=0;p<3;++p){if(i[p]<n[p])n[p]=-1,i[p]=1;else{n[p]===i[p]&&(n[p]-=1,i[p]+=1);var v=.05*(i[p]-n[p]);n[p]=n[p]-v,i[p]=i[p]+v}d[0][p]=n[p],d[1][p]=i[p]}var y=!1;for(p=0;p<3;++p)y=y||H[0][p]!==d[0][p]||H[1][p]!==d[1][p],H[0][p]=d[0][p],H[1][p]=d[1][p];if(I=I||y,O=O||y){if(y){var m=[0,0,0];for(o=0;o<3;++o)m[o]=g((d[1][o]-d[0][o])/10);A.autoTicks?A.update({bounds:d,tickSpacing:m}):A.update({bounds:d})}var T=r.drawingBufferWidth,k=r.drawingBufferHeight;for(z[0]=T,z[1]=k,B[0]=0|Math.max(T/F.pixelRatio,1),B[1]=0|Math.max(k/F.pixelRatio,1),function(t,e){var r=t.bounds,n=t.cameraParams,i=n.projection,a=n.model,o=t.gl.drawingBufferWidth,s=t.gl.drawingBufferHeight,l=t.zNear,u=t.zFar,c=t.fovy,p=o/s;e?(h(i,-p,p,-1,1,l,u),n._ortho=!0):(f(i,c,p,l,u),n._ortho=!1);for(var d=0;d<16;++d)a[d]=0;a[15]=1;var v=0;for(d=0;d<3;++d)v=Math.max(v,r[1][d]-r[0][d]);for(d=0;d<3;++d)t.autoScale?a[5*d]=t.aspect[d]/(r[1][d]-r[0][d]):a[5*d]=1/v,t.autoCenter&&(a[12+d]=.5*-a[5*d]*(r[0][d]+r[1][d]))}(F,w),o=0;o<e;++o)(C=E[o]).axesBounds=d,F.clipToBounds&&(C.clipBounds=d);x.object&&(F.snapToData?S.position=x.dataCoordinate:S.position=x.dataPosition,S.bounds=d),I&&(I=!1,function(){if(!U()){r.colorMask(!0,!0,!0,!0),r.depthMask(!0),r.disable(r.BLEND),r.enable(r.DEPTH_TEST),r.depthFunc(r.LEQUAL);for(var t=E.length,e=P.length,n=0;n<e;++n){var i=P[n];i.shape=B,i.begin();for(var a=0;a<t;++a)if(L[a]===n){var o=E[a];o.drawPick&&(o.pixelRatio=1,o.drawPick(D))}i.end()}}}()),F.axesPixels=a(F.axes,D,T,k),F.onrender&&F.onrender(),r.bindFramebuffer(r.FRAMEBUFFER,null),r.viewport(0,0,T,k),F.clearRGBA(),r.depthMask(!0),r.colorMask(!0,!0,!0,!0),r.enable(r.DEPTH_TEST),r.depthFunc(r.LEQUAL),r.disable(r.BLEND),r.disable(r.CULL_FACE);var M=!1;for(A.enable&&(M=M||A.isTransparent(),A.draw(D)),S.axes=A,x.object&&S.draw(D),r.disable(r.CULL_FACE),o=0;o<e;++o)(C=E[o]).axes=A,C.pixelRatio=F.pixelRatio,C.isOpaque&&C.isOpaque()&&C.draw(D),C.isTransparent&&C.isTransparent()&&(M=!0);if(M){for(b.shape=z,b.bind(),r.clear(r.DEPTH_BUFFER_BIT),r.colorMask(!1,!1,!1,!1),r.depthMask(!0),r.depthFunc(r.LESS),A.enable&&A.isTransparent()&&A.drawTransparent(D),o=0;o<e;++o)(C=E[o]).isOpaque&&C.isOpaque()&&C.draw(D);for(r.enable(r.BLEND),r.blendEquation(r.FUNC_ADD),r.blendFunc(r.ONE,r.ONE_MINUS_SRC_ALPHA),r.colorMask(!0,!0,!0,!0),r.depthMask(!1),r.clearColor(0,0,0,0),r.clear(r.COLOR_BUFFER_BIT),A.isTransparent()&&A.drawTransparent(D),o=0;o<e;++o){var C;(C=E[o]).isTransparent&&C.isTransparent()&&C.drawTransparent(D)}r.bindFramebuffer(r.FRAMEBUFFER,null),r.blendFunc(r.ONE,r.ONE_MINUS_SRC_ALPHA),r.disable(r.DEPTH_TEST),_.bind(),b.color[0].bind(0),_.uniforms.accumBuffer=0,u(r),r.disable(r.BLEND)}for(O=!1,o=0;o<e;++o)E[o].dirty=!1}}}return F.enableMouseListeners(),function t(){F._stopped||F.contextLost||(q(),requestAnimationFrame(t))}(),F.redraw=function(){F._stopped||(O=!0,q())},F},createCamera:n}},8023:function(t,e,r){var n=r(6832);e.pointVertex=n([\\\"precision mediump float;\\\\n#define GLSLIFY 1\\\\n\\\\nattribute vec2 position;\\\\n\\\\nuniform mat3 matrix;\\\\nuniform float pointSize;\\\\nuniform float pointCloud;\\\\n\\\\nhighp float rand(vec2 co) {\\\\n  highp float a = 12.9898;\\\\n  highp float b = 78.233;\\\\n  highp float c = 43758.5453;\\\\n  highp float d = dot(co.xy, vec2(a, b));\\\\n  highp float e = mod(d, 3.14);\\\\n  return fract(sin(e) * c);\\\\n}\\\\n\\\\nvoid main() {\\\\n  vec3 hgPosition = matrix * vec3(position, 1);\\\\n  gl_Position  = vec4(hgPosition.xy, 0, hgPosition.z);\\\\n    // if we don't jitter the point size a bit, overall point cloud\\\\n    // saturation 'jumps' on zooming, which is disturbing and confusing\\\\n  gl_PointSize = pointSize * ((19.5 + rand(position)) / 20.0);\\\\n  if(pointCloud != 0.0) { // pointCloud is truthy\\\\n    // get the same square surface as circle would be\\\\n    gl_PointSize *= 0.886;\\\\n  }\\\\n}\\\"]),e.pointFragment=n([\\\"precision mediump float;\\\\n#define GLSLIFY 1\\\\n\\\\nuniform vec4 color, borderColor;\\\\nuniform float centerFraction;\\\\nuniform float pointCloud;\\\\n\\\\nvoid main() {\\\\n  float radius;\\\\n  vec4 baseColor;\\\\n  if(pointCloud != 0.0) { // pointCloud is truthy\\\\n    if(centerFraction == 1.0) {\\\\n      gl_FragColor = color;\\\\n    } else {\\\\n      gl_FragColor = mix(borderColor, color, centerFraction);\\\\n    }\\\\n  } else {\\\\n    radius = length(2.0 * gl_PointCoord.xy - 1.0);\\\\n    if(radius > 1.0) {\\\\n      discard;\\\\n    }\\\\n    baseColor = mix(borderColor, color, step(radius, centerFraction));\\\\n    gl_FragColor = vec4(baseColor.rgb * baseColor.a, baseColor.a);\\\\n  }\\\\n}\\\\n\\\"]),e.pickVertex=n([\\\"precision mediump float;\\\\n#define GLSLIFY 1\\\\n\\\\nattribute vec2 position;\\\\nattribute vec4 pickId;\\\\n\\\\nuniform mat3 matrix;\\\\nuniform float pointSize;\\\\nuniform vec4 pickOffset;\\\\n\\\\nvarying vec4 fragId;\\\\n\\\\nvoid main() {\\\\n  vec3 hgPosition = matrix * vec3(position, 1);\\\\n  gl_Position  = vec4(hgPosition.xy, 0, hgPosition.z);\\\\n  gl_PointSize = pointSize;\\\\n\\\\n  vec4 id = pickId + pickOffset;\\\\n  id.y += floor(id.x / 256.0);\\\\n  id.x -= floor(id.x / 256.0) * 256.0;\\\\n\\\\n  id.z += floor(id.y / 256.0);\\\\n  id.y -= floor(id.y / 256.0) * 256.0;\\\\n\\\\n  id.w += floor(id.z / 256.0);\\\\n  id.z -= floor(id.z / 256.0) * 256.0;\\\\n\\\\n  fragId = id;\\\\n}\\\\n\\\"]),e.pickFragment=n([\\\"precision mediump float;\\\\n#define GLSLIFY 1\\\\n\\\\nvarying vec4 fragId;\\\\n\\\\nvoid main() {\\\\n  float radius = length(2.0 * gl_PointCoord.xy - 1.0);\\\\n  if(radius > 1.0) {\\\\n    discard;\\\\n  }\\\\n  gl_FragColor = fragId / 255.0;\\\\n}\\\\n\\\"])},8271:function(t,e,r){\\\"use strict\\\";var n=r(5158),i=r(5827),a=r(5306),o=r(8023);function s(t,e,r,n,i){this.plot=t,this.offsetBuffer=e,this.pickBuffer=r,this.shader=n,this.pickShader=i,this.sizeMin=.5,this.sizeMinCap=2,this.sizeMax=20,this.areaRatio=1,this.pointCount=0,this.color=[1,0,0,1],this.borderColor=[0,0,0,1],this.blend=!1,this.pickOffset=0,this.points=null}t.exports=function(t,e){var r=t.gl,a=new s(t,i(r),i(r),n(r,o.pointVertex,o.pointFragment),n(r,o.pickVertex,o.pickFragment));return a.update(e),t.addObject(a),a};var l,u,c=s.prototype;c.dispose=function(){this.shader.dispose(),this.pickShader.dispose(),this.offsetBuffer.dispose(),this.pickBuffer.dispose(),this.plot.removeObject(this)},c.update=function(t){var e;function r(e,r){return e in t?t[e]:r}t=t||{},this.sizeMin=r(\\\"sizeMin\\\",.5),this.sizeMax=r(\\\"sizeMax\\\",20),this.color=r(\\\"color\\\",[1,0,0,1]).slice(),this.areaRatio=r(\\\"areaRatio\\\",1),this.borderColor=r(\\\"borderColor\\\",[0,0,0,1]).slice(),this.blend=r(\\\"blend\\\",!1);var n=t.positions.length>>>1,i=t.positions instanceof Float32Array,o=t.idToIndex instanceof Int32Array&&t.idToIndex.length>=n,s=t.positions,l=i?s:a.mallocFloat32(s.length),u=o?t.idToIndex:a.mallocInt32(n);if(i||l.set(s),!o)for(l.set(s),e=0;e<n;e++)u[e]=e;this.points=s,this.offsetBuffer.update(l),this.pickBuffer.update(u),i||a.free(l),o||a.free(u),this.pointCount=n,this.pickOffset=0},c.unifiedDraw=(l=[1,0,0,0,1,0,0,0,1],u=[0,0,0,0],function(t){var e=void 0!==t,r=e?this.pickShader:this.shader,n=this.plot.gl,i=this.plot.dataBox;if(0===this.pointCount)return t;var a=i[2]-i[0],o=i[3]-i[1],s=function(t,e){var r,n=0,i=t.length>>>1;for(r=0;r<i;r++){var a=t[2*r],o=t[2*r+1];a>=e[0]&&a<=e[2]&&o>=e[1]&&o<=e[3]&&n++}return n}(this.points,i),c=this.plot.pickPixelRatio*Math.max(Math.min(this.sizeMinCap,this.sizeMin),Math.min(this.sizeMax,this.sizeMax/Math.pow(s,.33333)));l[0]=2/a,l[4]=2/o,l[6]=-2*i[0]/a-1,l[7]=-2*i[1]/o-1,this.offsetBuffer.bind(),r.bind(),r.attributes.position.pointer(),r.uniforms.matrix=l,r.uniforms.color=this.color,r.uniforms.borderColor=this.borderColor,r.uniforms.pointCloud=c<5,r.uniforms.pointSize=c,r.uniforms.centerFraction=Math.min(1,Math.max(0,Math.sqrt(1-this.areaRatio))),e&&(u[0]=255&t,u[1]=t>>8&255,u[2]=t>>16&255,u[3]=t>>24&255,this.pickBuffer.bind(),r.attributes.pickId.pointer(n.UNSIGNED_BYTE),r.uniforms.pickOffset=u,this.pickOffset=t);var f=n.getParameter(n.BLEND),h=n.getParameter(n.DITHER);return f&&!this.blend&&n.disable(n.BLEND),h&&n.disable(n.DITHER),n.drawArrays(n.POINTS,0,this.pointCount),f&&!this.blend&&n.enable(n.BLEND),h&&n.enable(n.DITHER),t+this.pointCount}),c.draw=c.unifiedDraw,c.drawPick=c.unifiedDraw,c.pick=function(t,e,r){var n=this.pickOffset,i=this.pointCount;if(r<n||r>=n+i)return null;var a=r-n,o=this.points;return{object:this,pointId:a,dataCoord:[o[2*a],o[2*a+1]]}}},6093:function(t){t.exports=function(t,e,r,n){var i,a,o,s,l,u=e[0],c=e[1],f=e[2],h=e[3],p=r[0],d=r[1],v=r[2],g=r[3];return(a=u*p+c*d+f*v+h*g)<0&&(a=-a,p=-p,d=-d,v=-v,g=-g),1-a>1e-6?(i=Math.acos(a),o=Math.sin(i),s=Math.sin((1-n)*i)/o,l=Math.sin(n*i)/o):(s=1-n,l=n),t[0]=s*u+l*p,t[1]=s*c+l*d,t[2]=s*f+l*v,t[3]=s*h+l*g,t}},8240:function(t){\\\"use strict\\\";t.exports=function(t){return t||0===t?t.toString():\\\"\\\"}},4123:function(t,e,r){\\\"use strict\\\";var n=r(875);t.exports=function(t,e,r){var a=i[e];if(a||(a=i[e]={}),t in a)return a[t];var o={textAlign:\\\"center\\\",textBaseline:\\\"middle\\\",lineHeight:1,font:e,lineSpacing:1.25,styletags:{breaklines:!0,bolds:!0,italics:!0,subscripts:!0,superscripts:!0},triangles:!0},s=n(t,o);o.triangles=!1;var l,u,c=n(t,o);if(r&&1!==r){for(l=0;l<s.positions.length;++l)for(u=0;u<s.positions[l].length;++u)s.positions[l][u]/=r;for(l=0;l<c.positions.length;++l)for(u=0;u<c.positions[l].length;++u)c.positions[l][u]/=r}var f=[[1/0,1/0],[-1/0,-1/0]],h=c.positions.length;for(l=0;l<h;++l){var p=c.positions[l];for(u=0;u<2;++u)f[0][u]=Math.min(f[0][u],p[u]),f[1][u]=Math.max(f[1][u],p[u])}return a[t]=[s,c,f]};var i={}},9282:function(t,e,r){var n=r(5158),i=r(6832),a=i([\\\"precision highp float;\\\\n#define GLSLIFY 1\\\\n\\\\nbool outOfRange(float a, float b, float p) {\\\\n  return ((p > max(a, b)) || \\\\n          (p < min(a, b)));\\\\n}\\\\n\\\\nbool outOfRange(vec2 a, vec2 b, vec2 p) {\\\\n  return (outOfRange(a.x, b.x, p.x) ||\\\\n          outOfRange(a.y, b.y, p.y));\\\\n}\\\\n\\\\nbool outOfRange(vec3 a, vec3 b, vec3 p) {\\\\n  return (outOfRange(a.x, b.x, p.x) ||\\\\n          outOfRange(a.y, b.y, p.y) ||\\\\n          outOfRange(a.z, b.z, p.z));\\\\n}\\\\n\\\\nbool outOfRange(vec4 a, vec4 b, vec4 p) {\\\\n  return outOfRange(a.xyz, b.xyz, p.xyz);\\\\n}\\\\n\\\\nattribute vec3 position;\\\\nattribute vec4 color;\\\\nattribute vec2 glyph;\\\\nattribute vec4 id;\\\\n\\\\nuniform vec4 highlightId;\\\\nuniform float highlightScale;\\\\nuniform mat4 model, view, projection;\\\\nuniform vec3 clipBounds[2];\\\\n\\\\nvarying vec4 interpColor;\\\\nvarying vec4 pickId;\\\\nvarying vec3 dataCoordinate;\\\\n\\\\nvoid main() {\\\\n  if (outOfRange(clipBounds[0], clipBounds[1], position)) {\\\\n\\\\n    gl_Position = vec4(0,0,0,0);\\\\n  } else {\\\\n    float scale = 1.0;\\\\n    if(distance(highlightId, id) < 0.0001) {\\\\n      scale = highlightScale;\\\\n    }\\\\n\\\\n    vec4 worldPosition = model * vec4(position, 1);\\\\n    vec4 viewPosition = view * worldPosition;\\\\n    viewPosition = viewPosition / viewPosition.w;\\\\n    vec4 clipPosition = projection * (viewPosition + scale * vec4(glyph.x, -glyph.y, 0, 0));\\\\n\\\\n    gl_Position = clipPosition;\\\\n    interpColor = color;\\\\n    pickId = id;\\\\n    dataCoordinate = position;\\\\n  }\\\\n}\\\"]),o=i([\\\"precision highp float;\\\\n#define GLSLIFY 1\\\\n\\\\nbool outOfRange(float a, float b, float p) {\\\\n  return ((p > max(a, b)) || \\\\n          (p < min(a, b)));\\\\n}\\\\n\\\\nbool outOfRange(vec2 a, vec2 b, vec2 p) {\\\\n  return (outOfRange(a.x, b.x, p.x) ||\\\\n          outOfRange(a.y, b.y, p.y));\\\\n}\\\\n\\\\nbool outOfRange(vec3 a, vec3 b, vec3 p) {\\\\n  return (outOfRange(a.x, b.x, p.x) ||\\\\n          outOfRange(a.y, b.y, p.y) ||\\\\n          outOfRange(a.z, b.z, p.z));\\\\n}\\\\n\\\\nbool outOfRange(vec4 a, vec4 b, vec4 p) {\\\\n  return outOfRange(a.xyz, b.xyz, p.xyz);\\\\n}\\\\n\\\\nattribute vec3 position;\\\\nattribute vec4 color;\\\\nattribute vec2 glyph;\\\\nattribute vec4 id;\\\\n\\\\nuniform mat4 model, view, projection;\\\\nuniform vec2 screenSize;\\\\nuniform vec3 clipBounds[2];\\\\nuniform float highlightScale, pixelRatio;\\\\nuniform vec4 highlightId;\\\\n\\\\nvarying vec4 interpColor;\\\\nvarying vec4 pickId;\\\\nvarying vec3 dataCoordinate;\\\\n\\\\nvoid main() {\\\\n  if (outOfRange(clipBounds[0], clipBounds[1], position)) {\\\\n\\\\n    gl_Position = vec4(0,0,0,0);\\\\n  } else {\\\\n    float scale = pixelRatio;\\\\n    if(distance(highlightId.bgr, id.bgr) < 0.001) {\\\\n      scale *= highlightScale;\\\\n    }\\\\n\\\\n    vec4 worldPosition = model * vec4(position, 1.0);\\\\n    vec4 viewPosition = view * worldPosition;\\\\n    vec4 clipPosition = projection * viewPosition;\\\\n    clipPosition /= clipPosition.w;\\\\n\\\\n    gl_Position = clipPosition + vec4(screenSize * scale * vec2(glyph.x, -glyph.y), 0.0, 0.0);\\\\n    interpColor = color;\\\\n    pickId = id;\\\\n    dataCoordinate = position;\\\\n  }\\\\n}\\\"]),s=i([\\\"precision highp float;\\\\n#define GLSLIFY 1\\\\n\\\\nbool outOfRange(float a, float b, float p) {\\\\n  return ((p > max(a, b)) || \\\\n          (p < min(a, b)));\\\\n}\\\\n\\\\nbool outOfRange(vec2 a, vec2 b, vec2 p) {\\\\n  return (outOfRange(a.x, b.x, p.x) ||\\\\n          outOfRange(a.y, b.y, p.y));\\\\n}\\\\n\\\\nbool outOfRange(vec3 a, vec3 b, vec3 p) {\\\\n  return (outOfRange(a.x, b.x, p.x) ||\\\\n          outOfRange(a.y, b.y, p.y) ||\\\\n          outOfRange(a.z, b.z, p.z));\\\\n}\\\\n\\\\nbool outOfRange(vec4 a, vec4 b, vec4 p) {\\\\n  return outOfRange(a.xyz, b.xyz, p.xyz);\\\\n}\\\\n\\\\nattribute vec3 position;\\\\nattribute vec4 color;\\\\nattribute vec2 glyph;\\\\nattribute vec4 id;\\\\n\\\\nuniform float highlightScale;\\\\nuniform vec4 highlightId;\\\\nuniform vec3 axes[2];\\\\nuniform mat4 model, view, projection;\\\\nuniform vec2 screenSize;\\\\nuniform vec3 clipBounds[2];\\\\nuniform float scale, pixelRatio;\\\\n\\\\nvarying vec4 interpColor;\\\\nvarying vec4 pickId;\\\\nvarying vec3 dataCoordinate;\\\\n\\\\nvoid main() {\\\\n  if (outOfRange(clipBounds[0], clipBounds[1], position)) {\\\\n\\\\n    gl_Position = vec4(0,0,0,0);\\\\n  } else {\\\\n    float lscale = pixelRatio * scale;\\\\n    if(distance(highlightId, id) < 0.0001) {\\\\n      lscale *= highlightScale;\\\\n    }\\\\n\\\\n    vec4 clipCenter   = projection * view * model * vec4(position, 1);\\\\n    vec3 dataPosition = position + 0.5*lscale*(axes[0] * glyph.x + axes[1] * glyph.y) * clipCenter.w * screenSize.y;\\\\n    vec4 clipPosition = projection * view * model * vec4(dataPosition, 1);\\\\n\\\\n    gl_Position = clipPosition;\\\\n    interpColor = color;\\\\n    pickId = id;\\\\n    dataCoordinate = dataPosition;\\\\n  }\\\\n}\\\\n\\\"]),l=i([\\\"precision highp float;\\\\n#define GLSLIFY 1\\\\n\\\\nbool outOfRange(float a, float b, float p) {\\\\n  return ((p > max(a, b)) || \\\\n          (p < min(a, b)));\\\\n}\\\\n\\\\nbool outOfRange(vec2 a, vec2 b, vec2 p) {\\\\n  return (outOfRange(a.x, b.x, p.x) ||\\\\n          outOfRange(a.y, b.y, p.y));\\\\n}\\\\n\\\\nbool outOfRange(vec3 a, vec3 b, vec3 p) {\\\\n  return (outOfRange(a.x, b.x, p.x) ||\\\\n          outOfRange(a.y, b.y, p.y) ||\\\\n          outOfRange(a.z, b.z, p.z));\\\\n}\\\\n\\\\nbool outOfRange(vec4 a, vec4 b, vec4 p) {\\\\n  return outOfRange(a.xyz, b.xyz, p.xyz);\\\\n}\\\\n\\\\nuniform vec3 fragClipBounds[2];\\\\nuniform float opacity;\\\\n\\\\nvarying vec4 interpColor;\\\\nvarying vec3 dataCoordinate;\\\\n\\\\nvoid main() {\\\\n  if (\\\\n    outOfRange(fragClipBounds[0], fragClipBounds[1], dataCoordinate) ||\\\\n    interpColor.a * opacity == 0.\\\\n  ) discard;\\\\n  gl_FragColor = interpColor * opacity;\\\\n}\\\\n\\\"]),u=i([\\\"precision highp float;\\\\n#define GLSLIFY 1\\\\n\\\\nbool outOfRange(float a, float b, float p) {\\\\n  return ((p > max(a, b)) || \\\\n          (p < min(a, b)));\\\\n}\\\\n\\\\nbool outOfRange(vec2 a, vec2 b, vec2 p) {\\\\n  return (outOfRange(a.x, b.x, p.x) ||\\\\n          outOfRange(a.y, b.y, p.y));\\\\n}\\\\n\\\\nbool outOfRange(vec3 a, vec3 b, vec3 p) {\\\\n  return (outOfRange(a.x, b.x, p.x) ||\\\\n          outOfRange(a.y, b.y, p.y) ||\\\\n          outOfRange(a.z, b.z, p.z));\\\\n}\\\\n\\\\nbool outOfRange(vec4 a, vec4 b, vec4 p) {\\\\n  return outOfRange(a.xyz, b.xyz, p.xyz);\\\\n}\\\\n\\\\nuniform vec3 fragClipBounds[2];\\\\nuniform float pickGroup;\\\\n\\\\nvarying vec4 pickId;\\\\nvarying vec3 dataCoordinate;\\\\n\\\\nvoid main() {\\\\n  if (outOfRange(fragClipBounds[0], fragClipBounds[1], dataCoordinate)) discard;\\\\n\\\\n  gl_FragColor = vec4(pickGroup, pickId.bgr);\\\\n}\\\"]),c=[{name:\\\"position\\\",type:\\\"vec3\\\"},{name:\\\"color\\\",type:\\\"vec4\\\"},{name:\\\"glyph\\\",type:\\\"vec2\\\"},{name:\\\"id\\\",type:\\\"vec4\\\"}],f={vertex:a,fragment:l,attributes:c},h={vertex:o,fragment:l,attributes:c},p={vertex:s,fragment:l,attributes:c},d={vertex:a,fragment:u,attributes:c},v={vertex:o,fragment:u,attributes:c},g={vertex:s,fragment:u,attributes:c};function y(t,e){var r=n(t,e),i=r.attributes;return i.position.location=0,i.color.location=1,i.glyph.location=2,i.id.location=3,r}e.createPerspective=function(t){return y(t,f)},e.createOrtho=function(t){return y(t,h)},e.createProject=function(t){return y(t,p)},e.createPickPerspective=function(t){return y(t,d)},e.createPickOrtho=function(t){return y(t,v)},e.createPickProject=function(t){return y(t,g)}},2182:function(t,e,r){\\\"use strict\\\";var n=r(3596),i=r(5827),a=r(2944),o=r(5306),s=r(104),l=r(9282),u=r(4123),c=r(8240),f=[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1];function h(t,e){var r=t[0],n=t[1],i=t[2],a=t[3];return t[0]=e[0]*r+e[4]*n+e[8]*i+e[12]*a,t[1]=e[1]*r+e[5]*n+e[9]*i+e[13]*a,t[2]=e[2]*r+e[6]*n+e[10]*i+e[14]*a,t[3]=e[3]*r+e[7]*n+e[11]*i+e[15]*a,t}function p(t,e,r,n){return h(n,n),h(n,n),h(n,n)}function d(t,e){this.index=t,this.dataCoordinate=this.position=e}function v(t){return!0===t||t>1?1:t}function g(t,e,r,n,i,a,o,s,l,u,c,f){this.gl=t,this.pixelRatio=1,this.shader=e,this.orthoShader=r,this.projectShader=n,this.pointBuffer=i,this.colorBuffer=a,this.glyphBuffer=o,this.idBuffer=s,this.vao=l,this.vertexCount=0,this.lineVertexCount=0,this.opacity=1,this.hasAlpha=!1,this.lineWidth=0,this.projectScale=[2/3,2/3,2/3],this.projectOpacity=[1,1,1],this.projectHasAlpha=!1,this.pickId=0,this.pickPerspectiveShader=u,this.pickOrthoShader=c,this.pickProjectShader=f,this.points=[],this._selectResult=new d(0,[0,0,0]),this.useOrtho=!0,this.bounds=[[1/0,1/0,1/0],[-1/0,-1/0,-1/0]],this.axesProject=[!0,!0,!0],this.axesBounds=[[-1/0,-1/0,-1/0],[1/0,1/0,1/0]],this.highlightId=[1,1,1,1],this.highlightScale=2,this.clipBounds=[[-1/0,-1/0,-1/0],[1/0,1/0,1/0]],this.dirty=!0}t.exports=function(t){var e=t.gl,r=l.createPerspective(e),n=l.createOrtho(e),o=l.createProject(e),s=l.createPickPerspective(e),u=l.createPickOrtho(e),c=l.createPickProject(e),f=i(e),h=i(e),p=i(e),d=i(e),v=new g(e,r,n,o,f,h,p,d,a(e,[{buffer:f,size:3,type:e.FLOAT},{buffer:h,size:4,type:e.FLOAT},{buffer:p,size:2,type:e.FLOAT},{buffer:d,size:4,type:e.UNSIGNED_BYTE,normalized:!0}]),s,u,c);return v.update(t),v};var y=g.prototype;y.pickSlots=1,y.setPickBase=function(t){this.pickId=t},y.isTransparent=function(){if(this.hasAlpha)return!0;for(var t=0;t<3;++t)if(this.axesProject[t]&&this.projectHasAlpha)return!0;return!1},y.isOpaque=function(){if(!this.hasAlpha)return!0;for(var t=0;t<3;++t)if(this.axesProject[t]&&!this.projectHasAlpha)return!0;return!1};var m=[0,0],x=[0,0,0],b=[0,0,0],_=[0,0,0,1],w=[0,0,0,1],T=f.slice(),k=[0,0,0],A=[[0,0,0],[0,0,0]];function M(t){return t[0]=t[1]=t[2]=0,t}function S(t,e){return t[0]=e[0],t[1]=e[1],t[2]=e[2],t[3]=1,t}function E(t,e,r,n){return t[0]=e[0],t[1]=e[1],t[2]=e[2],t[r]=n,t}var L=[[-1e8,-1e8,-1e8],[1e8,1e8,1e8]];function C(t,e,r,n,i,a,o){var l=r.gl;if((a===r.projectHasAlpha||o)&&function(t,e,r,n){var i,a=e.axesProject,o=e.gl,l=t.uniforms,u=r.model||f,c=r.view||f,h=r.projection||f,d=e.axesBounds,v=function(t){for(var e=A,r=0;r<2;++r)for(var n=0;n<3;++n)e[r][n]=Math.max(Math.min(t[r][n],1e8),-1e8);return e}(e.clipBounds);i=e.axes&&e.axes.lastCubeProps?e.axes.lastCubeProps.axis:[1,1,1],m[0]=2/o.drawingBufferWidth,m[1]=2/o.drawingBufferHeight,t.bind(),l.view=c,l.projection=h,l.screenSize=m,l.highlightId=e.highlightId,l.highlightScale=e.highlightScale,l.clipBounds=v,l.pickGroup=e.pickId/255,l.pixelRatio=n;for(var g=0;g<3;++g)if(a[g]){l.scale=e.projectScale[g],l.opacity=e.projectOpacity[g];for(var y=T,L=0;L<16;++L)y[L]=0;for(L=0;L<4;++L)y[5*L]=1;y[5*g]=0,i[g]<0?y[12+g]=d[0][g]:y[12+g]=d[1][g],s(y,u,y),l.model=y;var C=(g+1)%3,P=(g+2)%3,O=M(x),I=M(b);O[C]=1,I[P]=1;var D=p(0,0,0,S(_,O)),z=p(0,0,0,S(w,I));if(Math.abs(D[1])>Math.abs(z[1])){var R=D;D=z,z=R,R=O,O=I,I=R;var F=C;C=P,P=F}D[0]<0&&(O[C]=-1),z[1]>0&&(I[P]=-1);var B=0,N=0;for(L=0;L<4;++L)B+=Math.pow(u[4*C+L],2),N+=Math.pow(u[4*P+L],2);O[C]/=Math.sqrt(B),I[P]/=Math.sqrt(N),l.axes[0]=O,l.axes[1]=I,l.fragClipBounds[0]=E(k,v[0],g,-1e8),l.fragClipBounds[1]=E(k,v[1],g,1e8),e.vao.bind(),e.vao.draw(o.TRIANGLES,e.vertexCount),e.lineWidth>0&&(o.lineWidth(e.lineWidth*n),e.vao.draw(o.LINES,e.lineVertexCount,e.vertexCount)),e.vao.unbind()}}(e,r,n,i),a===r.hasAlpha||o){t.bind();var u=t.uniforms;u.model=n.model||f,u.view=n.view||f,u.projection=n.projection||f,m[0]=2/l.drawingBufferWidth,m[1]=2/l.drawingBufferHeight,u.screenSize=m,u.highlightId=r.highlightId,u.highlightScale=r.highlightScale,u.fragClipBounds=L,u.clipBounds=r.axes.bounds,u.opacity=r.opacity,u.pickGroup=r.pickId/255,u.pixelRatio=i,r.vao.bind(),r.vao.draw(l.TRIANGLES,r.vertexCount),r.lineWidth>0&&(l.lineWidth(r.lineWidth*i),r.vao.draw(l.LINES,r.lineVertexCount,r.vertexCount)),r.vao.unbind()}}function P(t,e,r,i){var a;a=Array.isArray(t)?e<t.length?t[e]:void 0:t,a=c(a);var o=!0;n(a)&&(a=\\\"▼\\\",o=!1);var s=u(a,r,i);return{mesh:s[0],lines:s[1],bounds:s[2],visible:o}}y.draw=function(t){C(this.useOrtho?this.orthoShader:this.shader,this.projectShader,this,t,this.pixelRatio,!1,!1)},y.drawTransparent=function(t){C(this.useOrtho?this.orthoShader:this.shader,this.projectShader,this,t,this.pixelRatio,!0,!1)},y.drawPick=function(t){C(this.useOrtho?this.pickOrthoShader:this.pickPerspectiveShader,this.pickProjectShader,this,t,1,!0,!0)},y.pick=function(t){if(!t)return null;if(t.id!==this.pickId)return null;var e=t.value[2]+(t.value[1]<<8)+(t.value[0]<<16);if(e>=this.pointCount||e<0)return null;var r=this.points[e],n=this._selectResult;n.index=e;for(var i=0;i<3;++i)n.position[i]=n.dataCoordinate[i]=r[i];return n},y.highlight=function(t){if(t){var e=t.index,r=255&e,n=e>>8&255,i=e>>16&255;this.highlightId=[r/255,n/255,i/255,0]}else this.highlightId=[1,1,1,1]},y.update=function(t){if(\\\"perspective\\\"in(t=t||{})&&(this.useOrtho=!t.perspective),\\\"orthographic\\\"in t&&(this.useOrtho=!!t.orthographic),\\\"lineWidth\\\"in t&&(this.lineWidth=t.lineWidth),\\\"project\\\"in t)if(Array.isArray(t.project))this.axesProject=t.project;else{var e=!!t.project;this.axesProject=[e,e,e]}if(\\\"projectScale\\\"in t)if(Array.isArray(t.projectScale))this.projectScale=t.projectScale.slice();else{var r=+t.projectScale;this.projectScale=[r,r,r]}if(this.projectHasAlpha=!1,\\\"projectOpacity\\\"in t){Array.isArray(t.projectOpacity)?this.projectOpacity=t.projectOpacity.slice():(r=+t.projectOpacity,this.projectOpacity=[r,r,r]);for(var n=0;n<3;++n)this.projectOpacity[n]=v(this.projectOpacity[n]),this.projectOpacity[n]<1&&(this.projectHasAlpha=!0)}this.hasAlpha=!1,\\\"opacity\\\"in t&&(this.opacity=v(t.opacity),this.opacity<1&&(this.hasAlpha=!0)),this.dirty=!0;var i,a,s=t.position,l=t.font||\\\"normal\\\",u=t.alignment||[0,0];if(2===u.length)i=u[0],a=u[1];else for(i=[],a=[],n=0;n<u.length;++n)i[n]=u[n][0],a[n]=u[n][1];var c=[1/0,1/0,1/0],f=[-1/0,-1/0,-1/0],h=t.glyph,p=t.color,d=t.size,g=t.angle,y=t.lineColor,m=-1,x=0,b=0,_=0;if(s.length){_=s.length;t:for(n=0;n<_;++n){for(var w=s[n],T=0;T<3;++T)if(isNaN(w[T])||!isFinite(w[T]))continue t;var k=(N=P(h,n,l,this.pixelRatio)).mesh,A=N.lines,M=N.bounds;x+=3*k.cells.length,b+=2*A.edges.length}}var S=x+b,E=o.mallocFloat(3*S),L=o.mallocFloat(4*S),C=o.mallocFloat(2*S),O=o.mallocUint32(S);if(S>0){var I=0,D=x,z=[0,0,0,1],R=[0,0,0,1],F=Array.isArray(p)&&Array.isArray(p[0]),B=Array.isArray(y)&&Array.isArray(y[0]);t:for(n=0;n<_;++n){for(m+=1,w=s[n],T=0;T<3;++T){if(isNaN(w[T])||!isFinite(w[T]))continue t;f[T]=Math.max(f[T],w[T]),c[T]=Math.min(c[T],w[T])}k=(N=P(h,n,l,this.pixelRatio)).mesh,A=N.lines,M=N.bounds;var N,j=N.visible;if(j)if(Array.isArray(p)){if(3===(U=F?n<p.length?p[n]:[0,0,0,0]:p).length){for(T=0;T<3;++T)z[T]=U[T];z[3]=1}else if(4===U.length){for(T=0;T<4;++T)z[T]=U[T];!this.hasAlpha&&U[3]<1&&(this.hasAlpha=!0)}}else z[0]=z[1]=z[2]=0,z[3]=1;else z=[1,1,1,0];if(j)if(Array.isArray(y)){var U;if(3===(U=B?n<y.length?y[n]:[0,0,0,0]:y).length){for(T=0;T<3;++T)R[T]=U[T];R[T]=1}else if(4===U.length){for(T=0;T<4;++T)R[T]=U[T];!this.hasAlpha&&U[3]<1&&(this.hasAlpha=!0)}}else R[0]=R[1]=R[2]=0,R[3]=1;else R=[1,1,1,0];var V=.5;j?Array.isArray(d)?V=n<d.length?+d[n]:12:d?V=+d:this.useOrtho&&(V=12):V=0;var H=0;Array.isArray(g)?H=n<g.length?+g[n]:0:g&&(H=+g);var q=Math.cos(H),G=Math.sin(H);for(w=s[n],T=0;T<3;++T)f[T]=Math.max(f[T],w[T]),c[T]=Math.min(c[T],w[T]);var Z=i,Y=a;Z=0,Array.isArray(i)?Z=n<i.length?i[n]:0:i&&(Z=i),Y=0,Array.isArray(a)?Y=n<a.length?a[n]:0:a&&(Y=a);var W=[Z*=Z>0?1-M[0][0]:Z<0?1+M[1][0]:1,Y*=Y>0?1-M[0][1]:Y<0?1+M[1][1]:1],X=k.cells||[],J=k.positions||[];for(T=0;T<X.length;++T)for(var K=X[T],$=0;$<3;++$){for(var Q=0;Q<3;++Q)E[3*I+Q]=w[Q];for(Q=0;Q<4;++Q)L[4*I+Q]=z[Q];O[I]=m;var tt=J[K[$]];C[2*I]=V*(q*tt[0]-G*tt[1]+W[0]),C[2*I+1]=V*(G*tt[0]+q*tt[1]+W[1]),I+=1}for(X=A.edges,J=A.positions,T=0;T<X.length;++T)for(K=X[T],$=0;$<2;++$){for(Q=0;Q<3;++Q)E[3*D+Q]=w[Q];for(Q=0;Q<4;++Q)L[4*D+Q]=R[Q];O[D]=m,tt=J[K[$]],C[2*D]=V*(q*tt[0]-G*tt[1]+W[0]),C[2*D+1]=V*(G*tt[0]+q*tt[1]+W[1]),D+=1}}}this.bounds=[c,f],this.points=s,this.pointCount=s.length,this.vertexCount=x,this.lineVertexCount=b,this.pointBuffer.update(E),this.colorBuffer.update(L),this.glyphBuffer.update(C),this.idBuffer.update(O),o.free(E),o.free(L),o.free(C),o.free(O)},y.dispose=function(){this.shader.dispose(),this.orthoShader.dispose(),this.pickPerspectiveShader.dispose(),this.pickOrthoShader.dispose(),this.vao.dispose(),this.pointBuffer.dispose(),this.colorBuffer.dispose(),this.glyphBuffer.dispose(),this.idBuffer.dispose()}},1884:function(t,e,r){\\\"use strict\\\";var n=r(6832);e.boxVertex=n([\\\"precision mediump float;\\\\n#define GLSLIFY 1\\\\n\\\\nattribute vec2 vertex;\\\\n\\\\nuniform vec2 cornerA, cornerB;\\\\n\\\\nvoid main() {\\\\n  gl_Position = vec4(mix(cornerA, cornerB, vertex), 0, 1);\\\\n}\\\\n\\\"]),e.boxFragment=n([\\\"precision mediump float;\\\\n#define GLSLIFY 1\\\\n\\\\nuniform vec4 color;\\\\n\\\\nvoid main() {\\\\n  gl_FragColor = color;\\\\n}\\\\n\\\"])},6623:function(t,e,r){\\\"use strict\\\";var n=r(5158),i=r(5827),a=r(1884);function o(t,e,r){this.plot=t,this.boxBuffer=e,this.boxShader=r,this.enabled=!0,this.selectBox=[1/0,1/0,-1/0,-1/0],this.borderColor=[0,0,0,1],this.innerFill=!1,this.innerColor=[0,0,0,.25],this.outerFill=!0,this.outerColor=[0,0,0,.5],this.borderWidth=10}t.exports=function(t,e){var r=t.gl,s=new o(t,i(r,[0,0,0,1,1,0,1,1]),n(r,a.boxVertex,a.boxFragment));return s.update(e),t.addOverlay(s),s};var s=o.prototype;s.draw=function(){if(this.enabled){var t=this.plot,e=this.selectBox,r=this.borderWidth,n=(this.innerFill,this.innerColor),i=(this.outerFill,this.outerColor),a=this.borderColor,o=t.box,s=t.screenBox,l=t.dataBox,u=t.viewBox,c=t.pixelRatio,f=(e[0]-l[0])*(u[2]-u[0])/(l[2]-l[0])+u[0],h=(e[1]-l[1])*(u[3]-u[1])/(l[3]-l[1])+u[1],p=(e[2]-l[0])*(u[2]-u[0])/(l[2]-l[0])+u[0],d=(e[3]-l[1])*(u[3]-u[1])/(l[3]-l[1])+u[1];if(f=Math.max(f,u[0]),h=Math.max(h,u[1]),p=Math.min(p,u[2]),d=Math.min(d,u[3]),!(p<f||d<h)){o.bind();var v=s[2]-s[0],g=s[3]-s[1];if(this.outerFill&&(o.drawBox(0,0,v,h,i),o.drawBox(0,h,f,d,i),o.drawBox(0,d,v,g,i),o.drawBox(p,h,v,d,i)),this.innerFill&&o.drawBox(f,h,p,d,n),r>0){var y=r*c;o.drawBox(f-y,h-y,p+y,h+y,a),o.drawBox(f-y,d-y,p+y,d+y,a),o.drawBox(f-y,h-y,f+y,d+y,a),o.drawBox(p-y,h-y,p+y,d+y,a)}}}},s.update=function(t){t=t||{},this.innerFill=!!t.innerFill,this.outerFill=!!t.outerFill,this.innerColor=(t.innerColor||[0,0,0,.5]).slice(),this.outerColor=(t.outerColor||[0,0,0,.5]).slice(),this.borderColor=(t.borderColor||[0,0,0,1]).slice(),this.borderWidth=t.borderWidth||0,this.selectBox=(t.selectBox||this.selectBox).slice()},s.dispose=function(){this.boxBuffer.dispose(),this.boxShader.dispose(),this.plot.removeOverlay(this)}},2611:function(t,e,r){\\\"use strict\\\";t.exports=function(t,e){var r=e[0],a=e[1];return new l(t,n(t,r,a,{}),i.mallocUint8(r*a*4))};var n=r(4234),i=r(5306),a=r(5050),o=r(2288).nextPow2;function s(t,e,r,n,i){this.coord=[t,e],this.id=r,this.value=n,this.distance=i}function l(t,e,r){this.gl=t,this.fbo=e,this.buffer=r,this._readTimeout=null;var n=this;this._readCallback=function(){n.gl&&(e.bind(),t.readPixels(0,0,e.shape[0],e.shape[1],t.RGBA,t.UNSIGNED_BYTE,n.buffer),n._readTimeout=null)}}var u=l.prototype;Object.defineProperty(u,\\\"shape\\\",{get:function(){return this.gl?this.fbo.shape.slice():[0,0]},set:function(t){if(this.gl){this.fbo.shape=t;var e=this.fbo.shape[0],r=this.fbo.shape[1];if(r*e*4>this.buffer.length){i.free(this.buffer);for(var n=this.buffer=i.mallocUint8(o(r*e*4)),a=0;a<r*e*4;++a)n[a]=255}return t}}}),u.begin=function(){var t=this.gl;this.shape,t&&(this.fbo.bind(),t.clearColor(1,1,1,1),t.clear(t.COLOR_BUFFER_BIT|t.DEPTH_BUFFER_BIT))},u.end=function(){var t=this.gl;t&&(t.bindFramebuffer(t.FRAMEBUFFER,null),this._readTimeout||clearTimeout(this._readTimeout),this._readTimeout=setTimeout(this._readCallback,1))},u.query=function(t,e,r){if(!this.gl)return null;var n=this.fbo.shape.slice();t|=0,e|=0,\\\"number\\\"!=typeof r&&(r=1);var i=0|Math.min(Math.max(t-r,0),n[0]),o=0|Math.min(Math.max(t+r,0),n[0]),l=0|Math.min(Math.max(e-r,0),n[1]),u=0|Math.min(Math.max(e+r,0),n[1]);if(o<=i||u<=l)return null;var c=[o-i,u-l],f=a(this.buffer,[c[0],c[1],4],[4,4*n[0],1],4*(i+n[0]*l)),h=function(t,e,r){for(var n=1e8,i=-1,a=-1,o=t.shape[0],s=t.shape[1],l=0;l<o;l++)for(var u=0;u<s;u++){var c=t.get(l,u,0),f=t.get(l,u,1),h=t.get(l,u,2),p=t.get(l,u,3);if(c<255||f<255||h<255||p<255){var d=e-l,v=r-u,g=d*d+v*v;g<n&&(n=g,i=l,a=u)}}return[i,a,n]}(f.hi(c[0],c[1],1),r,r),p=h[0],d=h[1];return p<0||Math.pow(this.radius,2)<h[2]?null:new s(p+i|0,d+l|0,f.get(p,d,0),[f.get(p,d,1),f.get(p,d,2),f.get(p,d,3)],Math.sqrt(h[2]))},u.dispose=function(){this.gl&&(this.fbo.dispose(),i.free(this.buffer),this.gl=null,this._readTimeout&&clearTimeout(this._readTimeout))}},5158:function(t,e,r){\\\"use strict\\\";var n=r(9016),i=r(4280),a=r(3984),o=r(1628),s=r(2631),l=r(9068);function u(t){this.gl=t,this.gl.lastAttribCount=0,this._vref=this._fref=this._relink=this.vertShader=this.fragShader=this.program=this.attributes=this.uniforms=this.types=null}var c=u.prototype;function f(t,e){return t.name<e.name?-1:1}c.bind=function(){var t;this.program||this._relink();var e=this.gl.getProgramParameter(this.program,this.gl.ACTIVE_ATTRIBUTES),r=this.gl.lastAttribCount;if(e>r)for(t=r;t<e;t++)this.gl.enableVertexAttribArray(t);else if(r>e)for(t=e;t<r;t++)this.gl.disableVertexAttribArray(t);this.gl.lastAttribCount=e,this.gl.useProgram(this.program)},c.dispose=function(){for(var t=this.gl.lastAttribCount,e=0;e<t;e++)this.gl.disableVertexAttribArray(e);this.gl.lastAttribCount=0,this._fref&&this._fref.dispose(),this._vref&&this._vref.dispose(),this.attributes=this.types=this.vertShader=this.fragShader=this.program=this._relink=this._fref=this._vref=null},c.update=function(t,e,r,u){if(!e||1===arguments.length){var c=t;t=c.vertex,e=c.fragment,r=c.uniforms,u=c.attributes}var h=this,p=h.gl,d=h._vref;h._vref=o.shader(p,p.VERTEX_SHADER,t),d&&d.dispose(),h.vertShader=h._vref.shader;var v=this._fref;if(h._fref=o.shader(p,p.FRAGMENT_SHADER,e),v&&v.dispose(),h.fragShader=h._fref.shader,!r||!u){var g=p.createProgram();if(p.attachShader(g,h.fragShader),p.attachShader(g,h.vertShader),p.linkProgram(g),!p.getProgramParameter(g,p.LINK_STATUS)){var y=p.getProgramInfoLog(g);throw new l(y,\\\"Error linking program:\\\"+y)}r=r||s.uniforms(p,g),u=u||s.attributes(p,g),p.deleteProgram(g)}(u=u.slice()).sort(f);var m,x=[],b=[],_=[];for(m=0;m<u.length;++m){var w=u[m];if(w.type.indexOf(\\\"mat\\\")>=0){for(var T=0|w.type.charAt(w.type.length-1),k=new Array(T),A=0;A<T;++A)k[A]=_.length,b.push(w.name+\\\"[\\\"+A+\\\"]\\\"),\\\"number\\\"==typeof w.location?_.push(w.location+A):Array.isArray(w.location)&&w.location.length===T&&\\\"number\\\"==typeof w.location[A]?_.push(0|w.location[A]):_.push(-1);x.push({name:w.name,type:w.type,locations:k})}else x.push({name:w.name,type:w.type,locations:[_.length]}),b.push(w.name),\\\"number\\\"==typeof w.location?_.push(0|w.location):_.push(-1)}var M=0;for(m=0;m<_.length;++m)if(_[m]<0){for(;_.indexOf(M)>=0;)M+=1;_[m]=M}var S=new Array(r.length);function E(){h.program=o.program(p,h._vref,h._fref,b,_);for(var t=0;t<r.length;++t)S[t]=p.getUniformLocation(h.program,r[t].name)}E(),h._relink=E,h.types={uniforms:a(r),attributes:a(u)},h.attributes=i(p,h,x,_),Object.defineProperty(h,\\\"uniforms\\\",n(p,h,r,S))},t.exports=function(t,e,r,n,i){var a=new u(t);return a.update(e,r,n,i),a}},9068:function(t){function e(t,e,r){this.shortMessage=e||\\\"\\\",this.longMessage=r||\\\"\\\",this.rawError=t||\\\"\\\",this.message=\\\"gl-shader: \\\"+(e||t||\\\"\\\")+(r?\\\"\\\\n\\\"+r:\\\"\\\"),this.stack=(new Error).stack}e.prototype=new Error,e.prototype.name=\\\"GLError\\\",e.prototype.constructor=e,t.exports=e},4280:function(t,e,r){\\\"use strict\\\";t.exports=function(t,e,r,i){for(var a={},o=0,u=r.length;o<u;++o){var c=r[o],f=c.name,h=c.type,p=c.locations;switch(h){case\\\"bool\\\":case\\\"int\\\":case\\\"float\\\":s(t,e,p[0],i,1,a,f);break;default:if(h.indexOf(\\\"vec\\\")>=0){if((d=h.charCodeAt(h.length-1)-48)<2||d>4)throw new n(\\\"\\\",\\\"Invalid data type for attribute \\\"+f+\\\": \\\"+h);s(t,e,p[0],i,d,a,f)}else{if(!(h.indexOf(\\\"mat\\\")>=0))throw new n(\\\"\\\",\\\"Unknown data type for attribute \\\"+f+\\\": \\\"+h);var d;if((d=h.charCodeAt(h.length-1)-48)<2||d>4)throw new n(\\\"\\\",\\\"Invalid data type for attribute \\\"+f+\\\": \\\"+h);l(t,e,p,i,d,a,f)}}}return a};var n=r(9068);function i(t,e,r,n,i,a){this._gl=t,this._wrapper=e,this._index=r,this._locations=n,this._dimension=i,this._constFunc=a}var a=i.prototype;a.pointer=function(t,e,r,n){var i=this,a=i._gl,o=i._locations[i._index];a.vertexAttribPointer(o,i._dimension,t||a.FLOAT,!!e,r||0,n||0),a.enableVertexAttribArray(o)},a.set=function(t,e,r,n){return this._constFunc(this._locations[this._index],t,e,r,n)},Object.defineProperty(a,\\\"location\\\",{get:function(){return this._locations[this._index]},set:function(t){return t!==this._locations[this._index]&&(this._locations[this._index]=0|t,this._wrapper.program=null),0|t}});var o=[function(t,e,r){return void 0===r.length?t.vertexAttrib1f(e,r):t.vertexAttrib1fv(e,r)},function(t,e,r,n){return void 0===r.length?t.vertexAttrib2f(e,r,n):t.vertexAttrib2fv(e,r)},function(t,e,r,n,i){return void 0===r.length?t.vertexAttrib3f(e,r,n,i):t.vertexAttrib3fv(e,r)},function(t,e,r,n,i,a){return void 0===r.length?t.vertexAttrib4f(e,r,n,i,a):t.vertexAttrib4fv(e,r)}];function s(t,e,r,n,a,s,l){var u=o[a],c=new i(t,e,r,n,a,u);Object.defineProperty(s,l,{set:function(e){return t.disableVertexAttribArray(n[r]),u(t,n[r],e),e},get:function(){return c},enumerable:!0})}function l(t,e,r,n,i,a,o){for(var l=new Array(i),u=new Array(i),c=0;c<i;++c)s(t,e,r[c],n,i,l,c),u[c]=l[c];Object.defineProperty(l,\\\"location\\\",{set:function(t){if(Array.isArray(t))for(var e=0;e<i;++e)u[e].location=t[e];else for(e=0;e<i;++e)u[e].location=t+e;return t},get:function(){for(var t=new Array(i),e=0;e<i;++e)t[e]=n[r[e]];return t},enumerable:!0}),l.pointer=function(e,a,o,s){e=e||t.FLOAT,a=!!a,o=o||i*i,s=s||0;for(var l=0;l<i;++l){var u=n[r[l]];t.vertexAttribPointer(u,i,e,a,o,s+l*i),t.enableVertexAttribArray(u)}};var f=new Array(i),h=t[\\\"vertexAttrib\\\"+i+\\\"fv\\\"];Object.defineProperty(a,o,{set:function(e){for(var a=0;a<i;++a){var o=n[r[a]];if(t.disableVertexAttribArray(o),Array.isArray(e[0]))h.call(t,o,e[a]);else{for(var s=0;s<i;++s)f[s]=e[i*a+s];h.call(t,o,f)}}return e},get:function(){return l},enumerable:!0})}},9016:function(t,e,r){\\\"use strict\\\";var n=r(3984),i=r(9068);function a(t){return function(){return t}}function o(t,e){for(var r=new Array(t),n=0;n<t;++n)r[n]=e;return r}t.exports=function(t,e,r,s){function l(e){return function(n){for(var a=u(\\\"\\\",e),o=0;o<a.length;++o){var l=a[o],c=l[0],f=l[1];if(s[f]){var h=n;if(\\\"string\\\"==typeof c&&(0===c.indexOf(\\\".\\\")||0===c.indexOf(\\\"[\\\"))){var p=c;if(0===c.indexOf(\\\".\\\")&&(p=c.slice(1)),p.indexOf(\\\"]\\\")===p.length-1){var d=p.indexOf(\\\"[\\\"),v=p.slice(0,d),g=p.slice(d+1,p.length-1);h=v?n[v][g]:n[g]}else h=n[p]}var y,m=r[f].type;switch(m){case\\\"bool\\\":case\\\"int\\\":case\\\"sampler2D\\\":case\\\"samplerCube\\\":t.uniform1i(s[f],h);break;case\\\"float\\\":t.uniform1f(s[f],h);break;default:var x=m.indexOf(\\\"vec\\\");if(!(0<=x&&x<=1&&m.length===4+x)){if(0===m.indexOf(\\\"mat\\\")&&4===m.length){if((y=m.charCodeAt(m.length-1)-48)<2||y>4)throw new i(\\\"\\\",\\\"Invalid uniform dimension type for matrix \\\"+name+\\\": \\\"+m);t[\\\"uniformMatrix\\\"+y+\\\"fv\\\"](s[f],!1,h);break}throw new i(\\\"\\\",\\\"Unknown uniform data type for \\\"+name+\\\": \\\"+m)}if((y=m.charCodeAt(m.length-1)-48)<2||y>4)throw new i(\\\"\\\",\\\"Invalid data type\\\");switch(m.charAt(0)){case\\\"b\\\":case\\\"i\\\":t[\\\"uniform\\\"+y+\\\"iv\\\"](s[f],h);break;case\\\"v\\\":t[\\\"uniform\\\"+y+\\\"fv\\\"](s[f],h);break;default:throw new i(\\\"\\\",\\\"Unrecognized data type for vector \\\"+name+\\\": \\\"+m)}}}}}}function u(t,e){if(\\\"object\\\"!=typeof e)return[[t,e]];var r=[];for(var n in e){var i=e[n],a=t;parseInt(n)+\\\"\\\"===n?a+=\\\"[\\\"+n+\\\"]\\\":a+=\\\".\\\"+n,\\\"object\\\"==typeof i?r.push.apply(r,u(a,i)):r.push([a,i])}return r}function c(t,e,n){if(\\\"object\\\"==typeof n){var u=f(n);Object.defineProperty(t,e,{get:a(u),set:l(n),enumerable:!0,configurable:!1})}else s[n]?Object.defineProperty(t,e,{get:(c=n,function(t,e,r){return t.getUniform(e.program,r[c])}),set:l(n),enumerable:!0,configurable:!1}):t[e]=function(t){switch(t){case\\\"bool\\\":return!1;case\\\"int\\\":case\\\"sampler2D\\\":case\\\"samplerCube\\\":case\\\"float\\\":return 0;default:var e=t.indexOf(\\\"vec\\\");if(0<=e&&e<=1&&t.length===4+e){if((r=t.charCodeAt(t.length-1)-48)<2||r>4)throw new i(\\\"\\\",\\\"Invalid data type\\\");return\\\"b\\\"===t.charAt(0)?o(r,!1):o(r,0)}if(0===t.indexOf(\\\"mat\\\")&&4===t.length){var r;if((r=t.charCodeAt(t.length-1)-48)<2||r>4)throw new i(\\\"\\\",\\\"Invalid uniform dimension type for matrix \\\"+name+\\\": \\\"+t);return o(r*r,0)}throw new i(\\\"\\\",\\\"Unknown uniform data type for \\\"+name+\\\": \\\"+t)}}(r[n].type);var c}function f(t){var e;if(Array.isArray(t)){e=new Array(t.length);for(var r=0;r<t.length;++r)c(e,r,t[r])}else for(var n in e={},t)c(e,n,t[n]);return e}var h=n(r,!0);return{get:a(f(h)),set:l(h),enumerable:!0,configurable:!0}}},3984:function(t){\\\"use strict\\\";t.exports=function(t,e){for(var r={},n=0;n<t.length;++n)for(var i=t[n].name.split(\\\".\\\"),a=r,o=0;o<i.length;++o){var s=i[o].split(\\\"[\\\");if(s.length>1){s[0]in a||(a[s[0]]=[]),a=a[s[0]];for(var l=1;l<s.length;++l){var u=parseInt(s[l]);l<s.length-1||o<i.length-1?(u in a||(l<s.length-1?a[u]=[]:a[u]={}),a=a[u]):a[u]=e?n:t[n].type}}else o<i.length-1?(s[0]in a||(a[s[0]]={}),a=a[s[0]]):a[s[0]]=e?n:t[n].type}return r}},2631:function(t,e){\\\"use strict\\\";e.uniforms=function(t,e){for(var r=t.getProgramParameter(e,t.ACTIVE_UNIFORMS),n=[],a=0;a<r;++a){var o=t.getActiveUniform(e,a);if(o){var s=i(t,o.type);if(o.size>1)for(var l=0;l<o.size;++l)n.push({name:o.name.replace(\\\"[0]\\\",\\\"[\\\"+l+\\\"]\\\"),type:s});else n.push({name:o.name,type:s})}}return n},e.attributes=function(t,e){for(var r=t.getProgramParameter(e,t.ACTIVE_ATTRIBUTES),n=[],a=0;a<r;++a){var o=t.getActiveAttrib(e,a);o&&n.push({name:o.name,type:i(t,o.type)})}return n};var r={FLOAT:\\\"float\\\",FLOAT_VEC2:\\\"vec2\\\",FLOAT_VEC3:\\\"vec3\\\",FLOAT_VEC4:\\\"vec4\\\",INT:\\\"int\\\",INT_VEC2:\\\"ivec2\\\",INT_VEC3:\\\"ivec3\\\",INT_VEC4:\\\"ivec4\\\",BOOL:\\\"bool\\\",BOOL_VEC2:\\\"bvec2\\\",BOOL_VEC3:\\\"bvec3\\\",BOOL_VEC4:\\\"bvec4\\\",FLOAT_MAT2:\\\"mat2\\\",FLOAT_MAT3:\\\"mat3\\\",FLOAT_MAT4:\\\"mat4\\\",SAMPLER_2D:\\\"sampler2D\\\",SAMPLER_CUBE:\\\"samplerCube\\\"},n=null;function i(t,e){if(!n){var i=Object.keys(r);n={};for(var a=0;a<i.length;++a){var o=i[a];n[t[o]]=r[o]}}return n[e]}},1628:function(t,e,r){\\\"use strict\\\";e.shader=function(t,e,r){return c(t).getShaderReference(e,r)},e.program=function(t,e,r,n,i){return c(t).getProgram(e,r,n,i)};var n=r(9068),i=r(3530),a=new(\\\"undefined\\\"==typeof WeakMap?r(4037):WeakMap),o=0;function s(t,e,r,n,i,a,o){this.id=t,this.src=e,this.type=r,this.shader=n,this.count=a,this.programs=[],this.cache=o}function l(t){this.gl=t,this.shaders=[{},{}],this.programs={}}s.prototype.dispose=function(){if(0==--this.count){for(var t=this.cache,e=t.gl,r=this.programs,n=0,i=r.length;n<i;++n){var a=t.programs[r[n]];a&&(delete t.programs[n],e.deleteProgram(a))}e.deleteShader(this.shader),delete t.shaders[this.type===e.FRAGMENT_SHADER|0][this.src]}};var u=l.prototype;function c(t){var e=a.get(t);return e||(e=new l(t),a.set(t,e)),e}u.getShaderReference=function(t,e){var r=this.gl,a=this.shaders[t===r.FRAGMENT_SHADER|0],l=a[e];if(l&&r.isShader(l.shader))l.count+=1;else{var u=function(t,e,r){var a=t.createShader(e);if(t.shaderSource(a,r),t.compileShader(a),!t.getShaderParameter(a,t.COMPILE_STATUS)){var o=t.getShaderInfoLog(a);try{var s=i(o,r,e)}catch(t){throw console.warn(\\\"Failed to format compiler error: \\\"+t),new n(o,\\\"Error compiling shader:\\\\n\\\"+o)}throw new n(o,s.short,s.long)}return a}(r,t,e);l=a[e]=new s(o++,e,t,u,[],1,this)}return l},u.getProgram=function(t,e,r,i){var a=[t.id,e.id,r.join(\\\":\\\"),i.join(\\\":\\\")].join(\\\"@\\\"),o=this.programs[a];return o&&this.gl.isProgram(o)||(this.programs[a]=o=function(t,e,r,i,a){var o=t.createProgram();t.attachShader(o,e),t.attachShader(o,r);for(var s=0;s<i.length;++s)t.bindAttribLocation(o,a[s],i[s]);if(t.linkProgram(o),!t.getProgramParameter(o,t.LINK_STATUS)){var l=t.getProgramInfoLog(o);throw new n(l,\\\"Error linking program: \\\"+l)}return o}(this.gl,t.shader,e.shader,r,i),t.programs.push(a),e.programs.push(a)),o}},3050:function(t){\\\"use strict\\\";function e(t){this.plot=t,this.enable=[!0,!0,!1,!1],this.width=[1,1,1,1],this.color=[[0,0,0,1],[0,0,0,1],[0,0,0,1],[0,0,0,1]],this.center=[1/0,1/0]}t.exports=function(t,r){var n=new e(t);return n.update(r),t.addOverlay(n),n};var r=e.prototype;r.update=function(t){t=t||{},this.enable=(t.enable||[!0,!0,!1,!1]).slice(),this.width=(t.width||[1,1,1,1]).slice(),this.color=(t.color||[[0,0,0,1],[0,0,0,1],[0,0,0,1],[0,0,0,1]]).map((function(t){return t.slice()})),this.center=(t.center||[1/0,1/0]).slice(),this.plot.setOverlayDirty()},r.draw=function(){var t=this.enable,e=this.width,r=this.color,n=this.center,i=this.plot,a=i.line,o=i.dataBox,s=i.viewBox;if(a.bind(),o[0]<=n[0]&&n[0]<=o[2]&&o[1]<=n[1]&&n[1]<=o[3]){var l=s[0]+(n[0]-o[0])/(o[2]-o[0])*(s[2]-s[0]),u=s[1]+(n[1]-o[1])/(o[3]-o[1])*(s[3]-s[1]);t[0]&&a.drawLine(l,u,s[0],u,e[0],r[0]),t[1]&&a.drawLine(l,u,l,s[1],e[1],r[1]),t[2]&&a.drawLine(l,u,s[2],u,e[2],r[2]),t[3]&&a.drawLine(l,u,l,s[3],e[3],r[3])}},r.dispose=function(){this.plot.removeOverlay(this)}},3540:function(t,e,r){\\\"use strict\\\";var n=r(6832),i=r(5158),a=n([\\\"precision mediump float;\\\\n#define GLSLIFY 1\\\\n\\\\nattribute vec3 position, color;\\\\nattribute float weight;\\\\n\\\\nuniform mat4 model, view, projection;\\\\nuniform vec3 coordinates[3];\\\\nuniform vec4 colors[3];\\\\nuniform vec2 screenShape;\\\\nuniform float lineWidth;\\\\n\\\\nvarying vec4 fragColor;\\\\n\\\\nvoid main() {\\\\n  vec3 vertexPosition = mix(coordinates[0],\\\\n    mix(coordinates[2], coordinates[1], 0.5 * (position + 1.0)), abs(position));\\\\n\\\\n  vec4 clipPos = projection * view * model * vec4(vertexPosition, 1.0);\\\\n  vec2 clipOffset = (projection * view * model * vec4(color, 0.0)).xy;\\\\n  vec2 delta = weight * clipOffset * screenShape;\\\\n  vec2 lineOffset = normalize(vec2(delta.y, -delta.x)) / screenShape;\\\\n\\\\n  gl_Position   = vec4(clipPos.xy + clipPos.w * 0.5 * lineWidth * lineOffset, clipPos.z, clipPos.w);\\\\n  fragColor     = color.x * colors[0] + color.y * colors[1] + color.z * colors[2];\\\\n}\\\\n\\\"]),o=n([\\\"precision mediump float;\\\\n#define GLSLIFY 1\\\\n\\\\nvarying vec4 fragColor;\\\\n\\\\nvoid main() {\\\\n  gl_FragColor = fragColor;\\\\n}\\\"]);t.exports=function(t){return i(t,a,o,null,[{name:\\\"position\\\",type:\\\"vec3\\\"},{name:\\\"color\\\",type:\\\"vec3\\\"},{name:\\\"weight\\\",type:\\\"float\\\"}])}},6496:function(t,e,r){\\\"use strict\\\";var n=r(5827),i=r(2944),a=r(3540);t.exports=function(t,e){var r=[];function o(t,e,n,i,a,o){var s=[t,e,n,0,0,0,1];s[i+3]=1,s[i]=a,r.push.apply(r,s),s[6]=-1,r.push.apply(r,s),s[i]=o,r.push.apply(r,s),r.push.apply(r,s),s[6]=1,r.push.apply(r,s),s[i]=a,r.push.apply(r,s)}o(0,0,0,0,0,1),o(0,0,0,1,0,1),o(0,0,0,2,0,1),o(1,0,0,1,-1,1),o(1,0,0,2,-1,1),o(0,1,0,0,-1,1),o(0,1,0,2,-1,1),o(0,0,1,0,-1,1),o(0,0,1,1,-1,1);var l=n(t,r),u=i(t,[{type:t.FLOAT,buffer:l,size:3,offset:0,stride:28},{type:t.FLOAT,buffer:l,size:3,offset:12,stride:28},{type:t.FLOAT,buffer:l,size:1,offset:24,stride:28}]),c=a(t);c.attributes.position.location=0,c.attributes.color.location=1,c.attributes.weight.location=2;var f=new s(t,l,u,c);return f.update(e),f};var o=[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1];function s(t,e,r,n){this.gl=t,this.buffer=e,this.vao=r,this.shader=n,this.pixelRatio=1,this.bounds=[[-1e3,-1e3,-1e3],[1e3,1e3,1e3]],this.position=[0,0,0],this.lineWidth=[2,2,2],this.colors=[[0,0,0,1],[0,0,0,1],[0,0,0,1]],this.enabled=[!0,!0,!0],this.drawSides=[!0,!0,!0],this.axes=null}var l=s.prototype,u=[0,0,0],c=[0,0,0],f=[0,0];l.isTransparent=function(){return!1},l.drawTransparent=function(t){},l.draw=function(t){var e=this.gl,r=this.vao,n=this.shader;r.bind(),n.bind();var i,a=t.model||o,s=t.view||o,l=t.projection||o;this.axes&&(i=this.axes.lastCubeProps.axis);for(var h=u,p=c,d=0;d<3;++d)i&&i[d]<0?(h[d]=this.bounds[0][d],p[d]=this.bounds[1][d]):(h[d]=this.bounds[1][d],p[d]=this.bounds[0][d]);for(f[0]=e.drawingBufferWidth,f[1]=e.drawingBufferHeight,n.uniforms.model=a,n.uniforms.view=s,n.uniforms.projection=l,n.uniforms.coordinates=[this.position,h,p],n.uniforms.colors=this.colors,n.uniforms.screenShape=f,d=0;d<3;++d)n.uniforms.lineWidth=this.lineWidth[d]*this.pixelRatio,this.enabled[d]&&(r.draw(e.TRIANGLES,6,6*d),this.drawSides[d]&&r.draw(e.TRIANGLES,12,18+12*d));r.unbind()},l.update=function(t){t&&(\\\"bounds\\\"in t&&(this.bounds=t.bounds),\\\"position\\\"in t&&(this.position=t.position),\\\"lineWidth\\\"in t&&(this.lineWidth=t.lineWidth),\\\"colors\\\"in t&&(this.colors=t.colors),\\\"enabled\\\"in t&&(this.enabled=t.enabled),\\\"drawSides\\\"in t&&(this.drawSides=t.drawSides))},l.dispose=function(){this.vao.dispose(),this.buffer.dispose(),this.shader.dispose()}},9578:function(t,e,r){var n=r(6832),i=n([\\\"precision highp float;\\\\n\\\\nprecision highp float;\\\\n#define GLSLIFY 1\\\\n\\\\nvec3 getOrthogonalVector(vec3 v) {\\\\n  // Return up-vector for only-z vector.\\\\n  // Return ax + by + cz = 0, a point that lies on the plane that has v as a normal and that isn't (0,0,0).\\\\n  // From the above if-statement we have ||a|| > 0  U  ||b|| > 0.\\\\n  // Assign z = 0, x = -b, y = a:\\\\n  // a*-b + b*a + c*0 = -ba + ba + 0 = 0\\\\n  if (v.x*v.x > v.z*v.z || v.y*v.y > v.z*v.z) {\\\\n    return normalize(vec3(-v.y, v.x, 0.0));\\\\n  } else {\\\\n    return normalize(vec3(0.0, v.z, -v.y));\\\\n  }\\\\n}\\\\n\\\\n// Calculate the tube vertex and normal at the given index.\\\\n//\\\\n// The returned vertex is for a tube ring with its center at origin, radius of length(d), pointing in the direction of d.\\\\n//\\\\n// Each tube segment is made up of a ring of vertices.\\\\n// These vertices are used to make up the triangles of the tube by connecting them together in the vertex array.\\\\n// The indexes of tube segments run from 0 to 8.\\\\n//\\\\nvec3 getTubePosition(vec3 d, float index, out vec3 normal) {\\\\n  float segmentCount = 8.0;\\\\n\\\\n  float angle = 2.0 * 3.14159 * (index / segmentCount);\\\\n\\\\n  vec3 u = getOrthogonalVector(d);\\\\n  vec3 v = normalize(cross(u, d));\\\\n\\\\n  vec3 x = u * cos(angle) * length(d);\\\\n  vec3 y = v * sin(angle) * length(d);\\\\n  vec3 v3 = x + y;\\\\n\\\\n  normal = normalize(v3);\\\\n\\\\n  return v3;\\\\n}\\\\n\\\\nattribute vec4 vector;\\\\nattribute vec4 color, position;\\\\nattribute vec2 uv;\\\\n\\\\nuniform float vectorScale, tubeScale;\\\\nuniform mat4 model, view, projection, inverseModel;\\\\nuniform vec3 eyePosition, lightPosition;\\\\n\\\\nvarying vec3 f_normal, f_lightDirection, f_eyeDirection, f_data, f_position;\\\\nvarying vec4 f_color;\\\\nvarying vec2 f_uv;\\\\n\\\\nvoid main() {\\\\n  // Scale the vector magnitude to stay constant with\\\\n  // model & view changes.\\\\n  vec3 normal;\\\\n  vec3 XYZ = getTubePosition(mat3(model) * (tubeScale * vector.w * normalize(vector.xyz)), position.w, normal);\\\\n  vec4 tubePosition = model * vec4(position.xyz, 1.0) + vec4(XYZ, 0.0);\\\\n\\\\n  //Lighting geometry parameters\\\\n  vec4 cameraCoordinate = view * tubePosition;\\\\n  cameraCoordinate.xyz /= cameraCoordinate.w;\\\\n  f_lightDirection = lightPosition - cameraCoordinate.xyz;\\\\n  f_eyeDirection   = eyePosition - cameraCoordinate.xyz;\\\\n  f_normal = normalize((vec4(normal, 0.0) * inverseModel).xyz);\\\\n\\\\n  // vec4 m_position  = model * vec4(tubePosition, 1.0);\\\\n  vec4 t_position  = view * tubePosition;\\\\n  gl_Position      = projection * t_position;\\\\n\\\\n  f_color          = color;\\\\n  f_data           = tubePosition.xyz;\\\\n  f_position       = position.xyz;\\\\n  f_uv             = uv;\\\\n}\\\\n\\\"]),a=n([\\\"#extension GL_OES_standard_derivatives : enable\\\\n\\\\nprecision highp float;\\\\n#define GLSLIFY 1\\\\n\\\\nfloat beckmannDistribution(float x, float roughness) {\\\\n  float NdotH = max(x, 0.0001);\\\\n  float cos2Alpha = NdotH * NdotH;\\\\n  float tan2Alpha = (cos2Alpha - 1.0) / cos2Alpha;\\\\n  float roughness2 = roughness * roughness;\\\\n  float denom = 3.141592653589793 * roughness2 * cos2Alpha * cos2Alpha;\\\\n  return exp(tan2Alpha / roughness2) / denom;\\\\n}\\\\n\\\\nfloat cookTorranceSpecular(\\\\n  vec3 lightDirection,\\\\n  vec3 viewDirection,\\\\n  vec3 surfaceNormal,\\\\n  float roughness,\\\\n  float fresnel) {\\\\n\\\\n  float VdotN = max(dot(viewDirection, surfaceNormal), 0.0);\\\\n  float LdotN = max(dot(lightDirection, surfaceNormal), 0.0);\\\\n\\\\n  //Half angle vector\\\\n  vec3 H = normalize(lightDirection + viewDirection);\\\\n\\\\n  //Geometric term\\\\n  float NdotH = max(dot(surfaceNormal, H), 0.0);\\\\n  float VdotH = max(dot(viewDirection, H), 0.000001);\\\\n  float LdotH = max(dot(lightDirection, H), 0.000001);\\\\n  float G1 = (2.0 * NdotH * VdotN) / VdotH;\\\\n  float G2 = (2.0 * NdotH * LdotN) / LdotH;\\\\n  float G = min(1.0, min(G1, G2));\\\\n  \\\\n  //Distribution term\\\\n  float D = beckmannDistribution(NdotH, roughness);\\\\n\\\\n  //Fresnel term\\\\n  float F = pow(1.0 - VdotN, fresnel);\\\\n\\\\n  //Multiply terms and done\\\\n  return  G * F * D / max(3.14159265 * VdotN, 0.000001);\\\\n}\\\\n\\\\nbool outOfRange(float a, float b, float p) {\\\\n  return ((p > max(a, b)) || \\\\n          (p < min(a, b)));\\\\n}\\\\n\\\\nbool outOfRange(vec2 a, vec2 b, vec2 p) {\\\\n  return (outOfRange(a.x, b.x, p.x) ||\\\\n          outOfRange(a.y, b.y, p.y));\\\\n}\\\\n\\\\nbool outOfRange(vec3 a, vec3 b, vec3 p) {\\\\n  return (outOfRange(a.x, b.x, p.x) ||\\\\n          outOfRange(a.y, b.y, p.y) ||\\\\n          outOfRange(a.z, b.z, p.z));\\\\n}\\\\n\\\\nbool outOfRange(vec4 a, vec4 b, vec4 p) {\\\\n  return outOfRange(a.xyz, b.xyz, p.xyz);\\\\n}\\\\n\\\\nuniform vec3 clipBounds[2];\\\\nuniform float roughness, fresnel, kambient, kdiffuse, kspecular, opacity;\\\\nuniform sampler2D texture;\\\\n\\\\nvarying vec3 f_normal, f_lightDirection, f_eyeDirection, f_data, f_position;\\\\nvarying vec4 f_color;\\\\nvarying vec2 f_uv;\\\\n\\\\nvoid main() {\\\\n  if (outOfRange(clipBounds[0], clipBounds[1], f_position)) discard;\\\\n  vec3 N = normalize(f_normal);\\\\n  vec3 L = normalize(f_lightDirection);\\\\n  vec3 V = normalize(f_eyeDirection);\\\\n\\\\n  if(gl_FrontFacing) {\\\\n    N = -N;\\\\n  }\\\\n\\\\n  float specular = min(1.0, max(0.0, cookTorranceSpecular(L, V, N, roughness, fresnel)));\\\\n  float diffuse  = min(kambient + kdiffuse * max(dot(N, L), 0.0), 1.0);\\\\n\\\\n  vec4 surfaceColor = f_color * texture2D(texture, f_uv);\\\\n  vec4 litColor = surfaceColor.a * vec4(diffuse * surfaceColor.rgb + kspecular * vec3(1,1,1) * specular,  1.0);\\\\n\\\\n  gl_FragColor = litColor * opacity;\\\\n}\\\\n\\\"]),o=n([\\\"precision highp float;\\\\n\\\\nprecision highp float;\\\\n#define GLSLIFY 1\\\\n\\\\nvec3 getOrthogonalVector(vec3 v) {\\\\n  // Return up-vector for only-z vector.\\\\n  // Return ax + by + cz = 0, a point that lies on the plane that has v as a normal and that isn't (0,0,0).\\\\n  // From the above if-statement we have ||a|| > 0  U  ||b|| > 0.\\\\n  // Assign z = 0, x = -b, y = a:\\\\n  // a*-b + b*a + c*0 = -ba + ba + 0 = 0\\\\n  if (v.x*v.x > v.z*v.z || v.y*v.y > v.z*v.z) {\\\\n    return normalize(vec3(-v.y, v.x, 0.0));\\\\n  } else {\\\\n    return normalize(vec3(0.0, v.z, -v.y));\\\\n  }\\\\n}\\\\n\\\\n// Calculate the tube vertex and normal at the given index.\\\\n//\\\\n// The returned vertex is for a tube ring with its center at origin, radius of length(d), pointing in the direction of d.\\\\n//\\\\n// Each tube segment is made up of a ring of vertices.\\\\n// These vertices are used to make up the triangles of the tube by connecting them together in the vertex array.\\\\n// The indexes of tube segments run from 0 to 8.\\\\n//\\\\nvec3 getTubePosition(vec3 d, float index, out vec3 normal) {\\\\n  float segmentCount = 8.0;\\\\n\\\\n  float angle = 2.0 * 3.14159 * (index / segmentCount);\\\\n\\\\n  vec3 u = getOrthogonalVector(d);\\\\n  vec3 v = normalize(cross(u, d));\\\\n\\\\n  vec3 x = u * cos(angle) * length(d);\\\\n  vec3 y = v * sin(angle) * length(d);\\\\n  vec3 v3 = x + y;\\\\n\\\\n  normal = normalize(v3);\\\\n\\\\n  return v3;\\\\n}\\\\n\\\\nattribute vec4 vector;\\\\nattribute vec4 position;\\\\nattribute vec4 id;\\\\n\\\\nuniform mat4 model, view, projection;\\\\nuniform float tubeScale;\\\\n\\\\nvarying vec3 f_position;\\\\nvarying vec4 f_id;\\\\n\\\\nvoid main() {\\\\n  vec3 normal;\\\\n  vec3 XYZ = getTubePosition(mat3(model) * (tubeScale * vector.w * normalize(vector.xyz)), position.w, normal);\\\\n  vec4 tubePosition = model * vec4(position.xyz, 1.0) + vec4(XYZ, 0.0);\\\\n\\\\n  gl_Position = projection * view * tubePosition;\\\\n  f_id        = id;\\\\n  f_position  = position.xyz;\\\\n}\\\\n\\\"]),s=n([\\\"precision highp float;\\\\n#define GLSLIFY 1\\\\n\\\\nbool outOfRange(float a, float b, float p) {\\\\n  return ((p > max(a, b)) || \\\\n          (p < min(a, b)));\\\\n}\\\\n\\\\nbool outOfRange(vec2 a, vec2 b, vec2 p) {\\\\n  return (outOfRange(a.x, b.x, p.x) ||\\\\n          outOfRange(a.y, b.y, p.y));\\\\n}\\\\n\\\\nbool outOfRange(vec3 a, vec3 b, vec3 p) {\\\\n  return (outOfRange(a.x, b.x, p.x) ||\\\\n          outOfRange(a.y, b.y, p.y) ||\\\\n          outOfRange(a.z, b.z, p.z));\\\\n}\\\\n\\\\nbool outOfRange(vec4 a, vec4 b, vec4 p) {\\\\n  return outOfRange(a.xyz, b.xyz, p.xyz);\\\\n}\\\\n\\\\nuniform vec3  clipBounds[2];\\\\nuniform float pickId;\\\\n\\\\nvarying vec3 f_position;\\\\nvarying vec4 f_id;\\\\n\\\\nvoid main() {\\\\n  if (outOfRange(clipBounds[0], clipBounds[1], f_position)) discard;\\\\n\\\\n  gl_FragColor = vec4(pickId, f_id.xyz);\\\\n}\\\"]);e.meshShader={vertex:i,fragment:a,attributes:[{name:\\\"position\\\",type:\\\"vec4\\\"},{name:\\\"color\\\",type:\\\"vec4\\\"},{name:\\\"uv\\\",type:\\\"vec2\\\"},{name:\\\"vector\\\",type:\\\"vec4\\\"}]},e.pickShader={vertex:o,fragment:s,attributes:[{name:\\\"position\\\",type:\\\"vec4\\\"},{name:\\\"id\\\",type:\\\"vec4\\\"},{name:\\\"vector\\\",type:\\\"vec4\\\"}]}},7307:function(t,e,r){\\\"use strict\\\";var n=r(2858),i=r(4020),a=[\\\"xyz\\\",\\\"xzy\\\",\\\"yxz\\\",\\\"yzx\\\",\\\"zxy\\\",\\\"zyx\\\"],o=function(t,e){var r,n=t.length;for(r=0;r<n;r++){var i=t[r];if(i===e)return r;if(i>e)return r-1}return r},s=function(t,e,r){return t<e?e:t>r?r:t},l=function(t){var e=1/0;t.sort((function(t,e){return t-e}));for(var r=t.length,n=1;n<r;n++){var i=Math.abs(t[n]-t[n-1]);i<e&&(e=i)}return e};t.exports=function(t,e){var r=t.startingPositions,u=t.maxLength||1e3,c=t.tubeSize||1,f=t.absoluteTubeSize,h=t.gridFill||\\\"+x+y+z\\\",p={};-1!==h.indexOf(\\\"-x\\\")&&(p.reversedX=!0),-1!==h.indexOf(\\\"-y\\\")&&(p.reversedY=!0),-1!==h.indexOf(\\\"-z\\\")&&(p.reversedZ=!0),p.filled=a.indexOf(h.replace(/-/g,\\\"\\\").replace(/\\\\+/g,\\\"\\\"));var d=t.getVelocity||function(e){return function(t,e,r){var i=e.vectors,a=e.meshgrid,l=t[0],u=t[1],c=t[2],f=a[0].length,h=a[1].length,p=a[2].length,d=o(a[0],l),v=o(a[1],u),g=o(a[2],c),y=d+1,m=v+1,x=g+1;if(d=s(d,0,f-1),y=s(y,0,f-1),v=s(v,0,h-1),m=s(m,0,h-1),g=s(g,0,p-1),x=s(x,0,p-1),d<0||v<0||g<0||y>f-1||m>h-1||x>p-1)return n.create();var b,_,w,T,k,A,M=a[0][d],S=a[0][y],E=a[1][v],L=a[1][m],C=a[2][g],P=(l-M)/(S-M),O=(u-E)/(L-E),I=(c-C)/(a[2][x]-C);switch(isFinite(P)||(P=.5),isFinite(O)||(O=.5),isFinite(I)||(I=.5),r.reversedX&&(d=f-1-d,y=f-1-y),r.reversedY&&(v=h-1-v,m=h-1-m),r.reversedZ&&(g=p-1-g,x=p-1-x),r.filled){case 5:k=g,A=x,w=v*p,T=m*p,b=d*p*h,_=y*p*h;break;case 4:k=g,A=x,b=d*p,_=y*p,w=v*p*f,T=m*p*f;break;case 3:w=v,T=m,k=g*h,A=x*h,b=d*h*p,_=y*h*p;break;case 2:w=v,T=m,b=d*h,_=y*h,k=g*h*f,A=x*h*f;break;case 1:b=d,_=y,k=g*f,A=x*f,w=v*f*p,T=m*f*p;break;default:b=d,_=y,w=v*f,T=m*f,k=g*f*h,A=x*f*h}var D=i[b+w+k],z=i[b+w+A],R=i[b+T+k],F=i[b+T+A],B=i[_+w+k],N=i[_+w+A],j=i[_+T+k],U=i[_+T+A],V=n.create(),H=n.create(),q=n.create(),G=n.create();n.lerp(V,D,B,P),n.lerp(H,z,N,P),n.lerp(q,R,j,P),n.lerp(G,F,U,P);var Z=n.create(),Y=n.create();n.lerp(Z,V,q,O),n.lerp(Y,H,G,O);var W=n.create();return n.lerp(W,Z,Y,I),W}(e,t,p)},v=t.getDivergence||function(t,e){var r=n.create(),i=1e-4;n.add(r,t,[i,0,0]);var a=d(r);n.subtract(a,a,e),n.scale(a,a,1/i),n.add(r,t,[0,i,0]);var o=d(r);n.subtract(o,o,e),n.scale(o,o,1/i),n.add(r,t,[0,0,i]);var s=d(r);return n.subtract(s,s,e),n.scale(s,s,1/i),n.add(r,a,o),n.add(r,r,s),r},g=[],y=e[0][0],m=e[0][1],x=e[0][2],b=e[1][0],_=e[1][1],w=e[1][2],T=function(t){var e=t[0],r=t[1],n=t[2];return!(e<y||e>b||r<m||r>_||n<x||n>w)},k=10*n.distance(e[0],e[1])/u,A=k*k,M=1,S=0,E=r.length;E>1&&(M=function(t){for(var e=[],r=[],n=[],i={},a={},o={},s=t.length,u=0;u<s;u++){var c=t[u],f=c[0],h=c[1],p=c[2];i[f]||(e.push(f),i[f]=!0),a[h]||(r.push(h),a[h]=!0),o[p]||(n.push(p),o[p]=!0)}var d=l(e),v=l(r),g=l(n),y=Math.min(d,v,g);return isFinite(y)?y:1}(r));for(var L=0;L<E;L++){var C=n.create();n.copy(C,r[L]);var P=[C],O=[],I=d(C),D=C;O.push(I);var z=[],R=v(C,I),F=n.length(R);isFinite(F)&&F>S&&(S=F),z.push(F),g.push({points:P,velocities:O,divergences:z});for(var B=0;B<100*u&&P.length<u&&T(C);){B++;var N=n.clone(I),j=n.squaredLength(N);if(0===j)break;j>A&&n.scale(N,N,k/Math.sqrt(j)),n.add(N,N,C),I=d(N),n.squaredDistance(D,N)-A>-1e-4*A&&(P.push(N),D=N,O.push(I),R=v(N,I),F=n.length(R),isFinite(F)&&F>S&&(S=F),z.push(F)),C=N}}var U=function(t,e,r,a){for(var o=0,s=0;s<t.length;s++)for(var l=t[s].velocities,u=0;u<l.length;u++)o=Math.max(o,n.length(l[u]));var c=t.map((function(t){return function(t,e,r,a){for(var o=t.points,s=t.velocities,l=t.divergences,u=[],c=[],f=[],h=[],p=[],d=[],v=0,g=0,y=i.create(),m=i.create(),x=0;x<o.length;x++){var b=o[x],_=s[x],w=l[x];0===e&&(w=.05*r),g=n.length(_)/a,y=i.create(),n.copy(y,_),y[3]=w;for(var T=0;T<8;T++)p[T]=[b[0],b[1],b[2],T];if(h.length>0)for(T=0;T<8;T++){var k=(T+1)%8;u.push(h[T],p[T],p[k],p[k],h[k],h[T]),f.push(m,y,y,y,m,m),d.push(v,g,g,g,v,v);var A=u.length;c.push([A-6,A-5,A-4],[A-3,A-2,A-1])}var M=h;h=p,p=M;var S=m;m=y,y=S;var E=v;v=g,g=E}return{positions:u,cells:c,vectors:f,vertexIntensity:d}}(t,r,a,o)})),f=[],h=[],p=[],d=[];for(s=0;s<c.length;s++){var v=c[s],g=f.length;for(f=f.concat(v.positions),p=p.concat(v.vectors),d=d.concat(v.vertexIntensity),u=0;u<v.cells.length;u++){var y=v.cells[u],m=[];h.push(m);for(var x=0;x<y.length;x++)m.push(y[x]+g)}}return{positions:f,cells:h,vectors:p,vertexIntensity:d,colormap:e}}(g,t.colormap,S,M);return f?U.tubeScale=f:(0===S&&(S=1),U.tubeScale=.5*c*M/S),U};var u=r(9578),c=r(1140).createMesh;t.exports.createTubeMesh=function(t,e){return c(t,e,{shaders:u,traceType:\\\"streamtube\\\"})}},9054:function(t,e,r){var n=r(5158),i=r(6832),a=i([\\\"precision highp float;\\\\n#define GLSLIFY 1\\\\n\\\\nattribute vec4 uv;\\\\nattribute vec3 f;\\\\nattribute vec3 normal;\\\\n\\\\nuniform vec3 objectOffset;\\\\nuniform mat4 model, view, projection, inverseModel;\\\\nuniform vec3 lightPosition, eyePosition;\\\\nuniform sampler2D colormap;\\\\n\\\\nvarying float value, kill;\\\\nvarying vec3 worldCoordinate;\\\\nvarying vec2 planeCoordinate;\\\\nvarying vec3 lightDirection, eyeDirection, surfaceNormal;\\\\nvarying vec4 vColor;\\\\n\\\\nvoid main() {\\\\n  vec3 localCoordinate = vec3(uv.zw, f.x);\\\\n  worldCoordinate = objectOffset + localCoordinate;\\\\n  vec4 worldPosition = model * vec4(worldCoordinate, 1.0);\\\\n  vec4 clipPosition = projection * view * worldPosition;\\\\n  gl_Position = clipPosition;\\\\n  kill = f.y;\\\\n  value = f.z;\\\\n  planeCoordinate = uv.xy;\\\\n\\\\n  vColor = texture2D(colormap, vec2(value, value));\\\\n\\\\n  //Lighting geometry parameters\\\\n  vec4 cameraCoordinate = view * worldPosition;\\\\n  cameraCoordinate.xyz /= cameraCoordinate.w;\\\\n  lightDirection = lightPosition - cameraCoordinate.xyz;\\\\n  eyeDirection   = eyePosition - cameraCoordinate.xyz;\\\\n  surfaceNormal  = normalize((vec4(normal,0) * inverseModel).xyz);\\\\n}\\\\n\\\"]),o=i([\\\"precision highp float;\\\\n#define GLSLIFY 1\\\\n\\\\nfloat beckmannDistribution(float x, float roughness) {\\\\n  float NdotH = max(x, 0.0001);\\\\n  float cos2Alpha = NdotH * NdotH;\\\\n  float tan2Alpha = (cos2Alpha - 1.0) / cos2Alpha;\\\\n  float roughness2 = roughness * roughness;\\\\n  float denom = 3.141592653589793 * roughness2 * cos2Alpha * cos2Alpha;\\\\n  return exp(tan2Alpha / roughness2) / denom;\\\\n}\\\\n\\\\nfloat beckmannSpecular(\\\\n  vec3 lightDirection,\\\\n  vec3 viewDirection,\\\\n  vec3 surfaceNormal,\\\\n  float roughness) {\\\\n  return beckmannDistribution(dot(surfaceNormal, normalize(lightDirection + viewDirection)), roughness);\\\\n}\\\\n\\\\nbool outOfRange(float a, float b, float p) {\\\\n  return ((p > max(a, b)) || \\\\n          (p < min(a, b)));\\\\n}\\\\n\\\\nbool outOfRange(vec2 a, vec2 b, vec2 p) {\\\\n  return (outOfRange(a.x, b.x, p.x) ||\\\\n          outOfRange(a.y, b.y, p.y));\\\\n}\\\\n\\\\nbool outOfRange(vec3 a, vec3 b, vec3 p) {\\\\n  return (outOfRange(a.x, b.x, p.x) ||\\\\n          outOfRange(a.y, b.y, p.y) ||\\\\n          outOfRange(a.z, b.z, p.z));\\\\n}\\\\n\\\\nbool outOfRange(vec4 a, vec4 b, vec4 p) {\\\\n  return outOfRange(a.xyz, b.xyz, p.xyz);\\\\n}\\\\n\\\\nuniform vec3 lowerBound, upperBound;\\\\nuniform float contourTint;\\\\nuniform vec4 contourColor;\\\\nuniform sampler2D colormap;\\\\nuniform vec3 clipBounds[2];\\\\nuniform float roughness, fresnel, kambient, kdiffuse, kspecular, opacity;\\\\nuniform float vertexColor;\\\\n\\\\nvarying float value, kill;\\\\nvarying vec3 worldCoordinate;\\\\nvarying vec3 lightDirection, eyeDirection, surfaceNormal;\\\\nvarying vec4 vColor;\\\\n\\\\nvoid main() {\\\\n  if (\\\\n    kill > 0.0 ||\\\\n    vColor.a == 0.0 ||\\\\n    outOfRange(clipBounds[0], clipBounds[1], worldCoordinate)\\\\n  ) discard;\\\\n\\\\n  vec3 N = normalize(surfaceNormal);\\\\n  vec3 V = normalize(eyeDirection);\\\\n  vec3 L = normalize(lightDirection);\\\\n\\\\n  if(gl_FrontFacing) {\\\\n    N = -N;\\\\n  }\\\\n\\\\n  float specular = max(beckmannSpecular(L, V, N, roughness), 0.);\\\\n  float diffuse  = min(kambient + kdiffuse * max(dot(N, L), 0.0), 1.0);\\\\n\\\\n  //decide how to interpolate color — in vertex or in fragment\\\\n  vec4 surfaceColor =\\\\n    step(vertexColor, .5) * texture2D(colormap, vec2(value, value)) +\\\\n    step(.5, vertexColor) * vColor;\\\\n\\\\n  vec4 litColor = surfaceColor.a * vec4(diffuse * surfaceColor.rgb + kspecular * vec3(1,1,1) * specular,  1.0);\\\\n\\\\n  gl_FragColor = mix(litColor, contourColor, contourTint) * opacity;\\\\n}\\\\n\\\"]),s=i([\\\"precision highp float;\\\\n#define GLSLIFY 1\\\\n\\\\nattribute vec4 uv;\\\\nattribute float f;\\\\n\\\\nuniform vec3 objectOffset;\\\\nuniform mat3 permutation;\\\\nuniform mat4 model, view, projection;\\\\nuniform float height, zOffset;\\\\nuniform sampler2D colormap;\\\\n\\\\nvarying float value, kill;\\\\nvarying vec3 worldCoordinate;\\\\nvarying vec2 planeCoordinate;\\\\nvarying vec3 lightDirection, eyeDirection, surfaceNormal;\\\\nvarying vec4 vColor;\\\\n\\\\nvoid main() {\\\\n  vec3 dataCoordinate = permutation * vec3(uv.xy, height);\\\\n  worldCoordinate = objectOffset + dataCoordinate;\\\\n  vec4 worldPosition = model * vec4(worldCoordinate, 1.0);\\\\n\\\\n  vec4 clipPosition = projection * view * worldPosition;\\\\n  clipPosition.z += zOffset;\\\\n\\\\n  gl_Position = clipPosition;\\\\n  value = f + objectOffset.z;\\\\n  kill = -1.0;\\\\n  planeCoordinate = uv.zw;\\\\n\\\\n  vColor = texture2D(colormap, vec2(value, value));\\\\n\\\\n  //Don't do lighting for contours\\\\n  surfaceNormal   = vec3(1,0,0);\\\\n  eyeDirection    = vec3(0,1,0);\\\\n  lightDirection  = vec3(0,0,1);\\\\n}\\\\n\\\"]),l=i([\\\"precision highp float;\\\\n#define GLSLIFY 1\\\\n\\\\nbool outOfRange(float a, float b, float p) {\\\\n  return ((p > max(a, b)) || \\\\n          (p < min(a, b)));\\\\n}\\\\n\\\\nbool outOfRange(vec2 a, vec2 b, vec2 p) {\\\\n  return (outOfRange(a.x, b.x, p.x) ||\\\\n          outOfRange(a.y, b.y, p.y));\\\\n}\\\\n\\\\nbool outOfRange(vec3 a, vec3 b, vec3 p) {\\\\n  return (outOfRange(a.x, b.x, p.x) ||\\\\n          outOfRange(a.y, b.y, p.y) ||\\\\n          outOfRange(a.z, b.z, p.z));\\\\n}\\\\n\\\\nbool outOfRange(vec4 a, vec4 b, vec4 p) {\\\\n  return outOfRange(a.xyz, b.xyz, p.xyz);\\\\n}\\\\n\\\\nuniform vec2 shape;\\\\nuniform vec3 clipBounds[2];\\\\nuniform float pickId;\\\\n\\\\nvarying float value, kill;\\\\nvarying vec3 worldCoordinate;\\\\nvarying vec2 planeCoordinate;\\\\nvarying vec3 surfaceNormal;\\\\n\\\\nvec2 splitFloat(float v) {\\\\n  float vh = 255.0 * v;\\\\n  float upper = floor(vh);\\\\n  float lower = fract(vh);\\\\n  return vec2(upper / 255.0, floor(lower * 16.0) / 16.0);\\\\n}\\\\n\\\\nvoid main() {\\\\n  if ((kill > 0.0) ||\\\\n      (outOfRange(clipBounds[0], clipBounds[1], worldCoordinate))) discard;\\\\n\\\\n  vec2 ux = splitFloat(planeCoordinate.x / shape.x);\\\\n  vec2 uy = splitFloat(planeCoordinate.y / shape.y);\\\\n  gl_FragColor = vec4(pickId, ux.x, uy.x, ux.y + (uy.y/16.0));\\\\n}\\\\n\\\"]);e.createShader=function(t){var e=n(t,a,o,null,[{name:\\\"uv\\\",type:\\\"vec4\\\"},{name:\\\"f\\\",type:\\\"vec3\\\"},{name:\\\"normal\\\",type:\\\"vec3\\\"}]);return e.attributes.uv.location=0,e.attributes.f.location=1,e.attributes.normal.location=2,e},e.createPickShader=function(t){var e=n(t,a,l,null,[{name:\\\"uv\\\",type:\\\"vec4\\\"},{name:\\\"f\\\",type:\\\"vec3\\\"},{name:\\\"normal\\\",type:\\\"vec3\\\"}]);return e.attributes.uv.location=0,e.attributes.f.location=1,e.attributes.normal.location=2,e},e.createContourShader=function(t){var e=n(t,s,o,null,[{name:\\\"uv\\\",type:\\\"vec4\\\"},{name:\\\"f\\\",type:\\\"float\\\"}]);return e.attributes.uv.location=0,e.attributes.f.location=1,e},e.createPickContourShader=function(t){var e=n(t,s,l,null,[{name:\\\"uv\\\",type:\\\"vec4\\\"},{name:\\\"f\\\",type:\\\"float\\\"}]);return e.attributes.uv.location=0,e.attributes.f.location=1,e}},3754:function(t,e,r){\\\"use strict\\\";t.exports=function(t){var e=t.gl,r=m(e),n=b(e),s=x(e),l=_(e),u=i(e),c=a(e,[{buffer:u,size:4,stride:w,offset:0},{buffer:u,size:3,stride:w,offset:16},{buffer:u,size:3,stride:w,offset:28}]),f=i(e),h=a(e,[{buffer:f,size:4,stride:20,offset:0},{buffer:f,size:1,stride:20,offset:16}]),p=i(e),d=a(e,[{buffer:p,size:2,type:e.FLOAT}]),v=o(e,1,S,e.RGBA,e.UNSIGNED_BYTE);v.minFilter=e.LINEAR,v.magFilter=e.LINEAR;var g=new E(e,[0,0],[[0,0,0],[0,0,0]],r,n,u,c,v,s,l,f,h,p,d,[0,0,0]),y={levels:[[],[],[]]};for(var T in t)y[T]=t[T];return y.colormap=y.colormap||\\\"jet\\\",g.update(y),g};var n=r(2288),i=r(5827),a=r(2944),o=r(8931),s=r(5306),l=r(9156),u=r(7498),c=r(7382),f=r(5050),h=r(4162),p=r(104),d=r(7437),v=r(5070),g=r(9144),y=r(9054),m=y.createShader,x=y.createContourShader,b=y.createPickShader,_=y.createPickContourShader,w=40,T=[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1],k=[[0,0],[0,1],[1,0],[1,1],[1,0],[0,1]],A=[[0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0]];function M(t,e,r,n,i){this.position=t,this.index=e,this.uv=r,this.level=n,this.dataCoordinate=i}!function(){for(var t=0;t<3;++t){var e=A[t],r=(t+2)%3;e[(t+1)%3+0]=1,e[r+3]=1,e[t+6]=1}}();var S=256;function E(t,e,r,n,i,a,o,l,u,c,h,p,d,v,g){this.gl=t,this.shape=e,this.bounds=r,this.objectOffset=g,this.intensityBounds=[],this._shader=n,this._pickShader=i,this._coordinateBuffer=a,this._vao=o,this._colorMap=l,this._contourShader=u,this._contourPickShader=c,this._contourBuffer=h,this._contourVAO=p,this._contourOffsets=[[],[],[]],this._contourCounts=[[],[],[]],this._vertexCount=0,this._pickResult=new M([0,0,0],[0,0],[0,0],[0,0,0],[0,0,0]),this._dynamicBuffer=d,this._dynamicVAO=v,this._dynamicOffsets=[0,0,0],this._dynamicCounts=[0,0,0],this.contourWidth=[1,1,1],this.contourLevels=[[1],[1],[1]],this.contourTint=[0,0,0],this.contourColor=[[.5,.5,.5,1],[.5,.5,.5,1],[.5,.5,.5,1]],this.showContour=!0,this.showSurface=!0,this.enableHighlight=[!0,!0,!0],this.highlightColor=[[0,0,0,1],[0,0,0,1],[0,0,0,1]],this.highlightTint=[1,1,1],this.highlightLevel=[-1,-1,-1],this.enableDynamic=[!0,!0,!0],this.dynamicLevel=[NaN,NaN,NaN],this.dynamicColor=[[0,0,0,1],[0,0,0,1],[0,0,0,1]],this.dynamicTint=[1,1,1],this.dynamicWidth=[1,1,1],this.axesBounds=[[1/0,1/0,1/0],[-1/0,-1/0,-1/0]],this.surfaceProject=[!1,!1,!1],this.contourProject=[[!1,!1,!1],[!1,!1,!1],[!1,!1,!1]],this.colorBounds=[!1,!1],this._field=[f(s.mallocFloat(1024),[0,0]),f(s.mallocFloat(1024),[0,0]),f(s.mallocFloat(1024),[0,0])],this.pickId=1,this.clipBounds=[[-1/0,-1/0,-1/0],[1/0,1/0,1/0]],this.snapToData=!1,this.pixelRatio=1,this.opacity=1,this.lightPosition=[10,1e4,0],this.ambientLight=.8,this.diffuseLight=.8,this.specularLight=2,this.roughness=.5,this.fresnel=1.5,this.vertexColor=0,this.dirty=!0}var L=E.prototype;L.genColormap=function(t,e){var r=!1,n=c([l({colormap:t,nshades:S,format:\\\"rgba\\\"}).map((function(t,n){var i=e?function(t,e){if(!e)return 1;if(!e.length)return 1;for(var r=0;r<e.length;++r){if(e.length<2)return 1;if(e[r][0]===t)return e[r][1];if(e[r][0]>t&&r>0){var n=(e[r][0]-t)/(e[r][0]-e[r-1][0]);return e[r][1]*(1-n)+n*e[r-1][1]}}return 1}(n/255,e):t[3];return i<1&&(r=!0),[t[0],t[1],t[2],255*i]}))]);return u.divseq(n,255),this.hasAlphaScale=r,n},L.isTransparent=function(){return this.opacity<1||this.hasAlphaScale},L.isOpaque=function(){return!this.isTransparent()},L.pickSlots=1,L.setPickBase=function(t){this.pickId=t};var C=[0,0,0],P={showSurface:!1,showContour:!1,projections:[T.slice(),T.slice(),T.slice()],clipBounds:[[[0,0,0],[0,0,0]],[[0,0,0],[0,0,0]],[[0,0,0],[0,0,0]]]};function O(t,e){var r,n,i,a=e.axes&&e.axes.lastCubeProps.axis||C,o=e.showSurface,s=e.showContour;for(r=0;r<3;++r)for(o=o||e.surfaceProject[r],n=0;n<3;++n)s=s||e.contourProject[r][n];for(r=0;r<3;++r){var l=P.projections[r];for(n=0;n<16;++n)l[n]=0;for(n=0;n<4;++n)l[5*n]=1;l[5*r]=0,l[12+r]=e.axesBounds[+(a[r]>0)][r],p(l,t.model,l);var u=P.clipBounds[r];for(i=0;i<2;++i)for(n=0;n<3;++n)u[i][n]=t.clipBounds[i][n];u[0][r]=-1e8,u[1][r]=1e8}return P.showSurface=o,P.showContour=s,P}var I={model:T,view:T,projection:T,inverseModel:T.slice(),lowerBound:[0,0,0],upperBound:[0,0,0],colorMap:0,clipBounds:[[0,0,0],[0,0,0]],height:0,contourTint:0,contourColor:[0,0,0,1],permutation:[1,0,0,0,1,0,0,0,1],zOffset:-1e-4,objectOffset:[0,0,0],kambient:1,kdiffuse:1,kspecular:1,lightPosition:[1e3,1e3,1e3],eyePosition:[0,0,0],roughness:1,fresnel:1,opacity:1,vertexColor:0},D=T.slice(),z=[1,0,0,0,1,0,0,0,1];function R(t,e){t=t||{};var r=this.gl;r.disable(r.CULL_FACE),this._colorMap.bind(0);var n=I;n.model=t.model||T,n.view=t.view||T,n.projection=t.projection||T,n.lowerBound=[this.bounds[0][0],this.bounds[0][1],this.colorBounds[0]||this.bounds[0][2]],n.upperBound=[this.bounds[1][0],this.bounds[1][1],this.colorBounds[1]||this.bounds[1][2]],n.objectOffset=this.objectOffset,n.contourColor=this.contourColor[0],n.inverseModel=d(n.inverseModel,n.model);for(var i=0;i<2;++i)for(var a=n.clipBounds[i],o=0;o<3;++o)a[o]=Math.min(Math.max(this.clipBounds[i][o],-1e8),1e8);n.kambient=this.ambientLight,n.kdiffuse=this.diffuseLight,n.kspecular=this.specularLight,n.roughness=this.roughness,n.fresnel=this.fresnel,n.opacity=this.opacity,n.height=0,n.permutation=z,n.vertexColor=this.vertexColor;var s=D;for(p(s,n.view,n.model),p(s,n.projection,s),d(s,s),i=0;i<3;++i)n.eyePosition[i]=s[12+i]/s[15];var l=s[15];for(i=0;i<3;++i)l+=this.lightPosition[i]*s[4*i+3];for(i=0;i<3;++i){var u=s[12+i];for(o=0;o<3;++o)u+=s[4*o+i]*this.lightPosition[o];n.lightPosition[i]=u/l}var c=O(n,this);if(c.showSurface){for(this._shader.bind(),this._shader.uniforms=n,this._vao.bind(),this.showSurface&&this._vertexCount&&this._vao.draw(r.TRIANGLES,this._vertexCount),i=0;i<3;++i)this.surfaceProject[i]&&this.vertexCount&&(this._shader.uniforms.model=c.projections[i],this._shader.uniforms.clipBounds=c.clipBounds[i],this._vao.draw(r.TRIANGLES,this._vertexCount));this._vao.unbind()}if(c.showContour){var f=this._contourShader;n.kambient=1,n.kdiffuse=0,n.kspecular=0,n.opacity=1,f.bind(),f.uniforms=n;var h=this._contourVAO;for(h.bind(),i=0;i<3;++i)for(f.uniforms.permutation=A[i],r.lineWidth(this.contourWidth[i]*this.pixelRatio),o=0;o<this.contourLevels[i].length;++o)o===this.highlightLevel[i]?(f.uniforms.contourColor=this.highlightColor[i],f.uniforms.contourTint=this.highlightTint[i]):0!==o&&o-1!==this.highlightLevel[i]||(f.uniforms.contourColor=this.contourColor[i],f.uniforms.contourTint=this.contourTint[i]),this._contourCounts[i][o]&&(f.uniforms.height=this.contourLevels[i][o],h.draw(r.LINES,this._contourCounts[i][o],this._contourOffsets[i][o]));for(i=0;i<3;++i)for(f.uniforms.model=c.projections[i],f.uniforms.clipBounds=c.clipBounds[i],o=0;o<3;++o)if(this.contourProject[i][o]){f.uniforms.permutation=A[o],r.lineWidth(this.contourWidth[o]*this.pixelRatio);for(var v=0;v<this.contourLevels[o].length;++v)v===this.highlightLevel[o]?(f.uniforms.contourColor=this.highlightColor[o],f.uniforms.contourTint=this.highlightTint[o]):0!==v&&v-1!==this.highlightLevel[o]||(f.uniforms.contourColor=this.contourColor[o],f.uniforms.contourTint=this.contourTint[o]),this._contourCounts[o][v]&&(f.uniforms.height=this.contourLevels[o][v],h.draw(r.LINES,this._contourCounts[o][v],this._contourOffsets[o][v]))}for(h.unbind(),(h=this._dynamicVAO).bind(),i=0;i<3;++i)if(0!==this._dynamicCounts[i])for(f.uniforms.model=n.model,f.uniforms.clipBounds=n.clipBounds,f.uniforms.permutation=A[i],r.lineWidth(this.dynamicWidth[i]*this.pixelRatio),f.uniforms.contourColor=this.dynamicColor[i],f.uniforms.contourTint=this.dynamicTint[i],f.uniforms.height=this.dynamicLevel[i],h.draw(r.LINES,this._dynamicCounts[i],this._dynamicOffsets[i]),o=0;o<3;++o)this.contourProject[o][i]&&(f.uniforms.model=c.projections[o],f.uniforms.clipBounds=c.clipBounds[o],h.draw(r.LINES,this._dynamicCounts[i],this._dynamicOffsets[i]));h.unbind()}}L.draw=function(t){return R.call(this,t,!1)},L.drawTransparent=function(t){return R.call(this,t,!0)};var F={model:T,view:T,projection:T,inverseModel:T,clipBounds:[[0,0,0],[0,0,0]],height:0,shape:[0,0],pickId:0,lowerBound:[0,0,0],upperBound:[0,0,0],zOffset:0,objectOffset:[0,0,0],permutation:[1,0,0,0,1,0,0,0,1],lightPosition:[0,0,0],eyePosition:[0,0,0]};function B(t,e){return Array.isArray(t)?[e(t[0]),e(t[1]),e(t[2])]:[e(t),e(t),e(t)]}function N(t){return Array.isArray(t)?3===t.length?[t[0],t[1],t[2],1]:[t[0],t[1],t[2],t[3]]:[0,0,0,1]}function j(t){if(Array.isArray(t)){if(Array.isArray(t))return[N(t[0]),N(t[1]),N(t[2])];var e=N(t);return[e.slice(),e.slice(),e.slice()]}}L.drawPick=function(t){t=t||{};var e=this.gl;e.disable(e.CULL_FACE);var r=F;r.model=t.model||T,r.view=t.view||T,r.projection=t.projection||T,r.shape=this._field[2].shape,r.pickId=this.pickId/255,r.lowerBound=this.bounds[0],r.upperBound=this.bounds[1],r.objectOffset=this.objectOffset,r.permutation=z;for(var n=0;n<2;++n)for(var i=r.clipBounds[n],a=0;a<3;++a)i[a]=Math.min(Math.max(this.clipBounds[n][a],-1e8),1e8);var o=O(r,this);if(o.showSurface){for(this._pickShader.bind(),this._pickShader.uniforms=r,this._vao.bind(),this._vao.draw(e.TRIANGLES,this._vertexCount),n=0;n<3;++n)this.surfaceProject[n]&&(this._pickShader.uniforms.model=o.projections[n],this._pickShader.uniforms.clipBounds=o.clipBounds[n],this._vao.draw(e.TRIANGLES,this._vertexCount));this._vao.unbind()}if(o.showContour){var s=this._contourPickShader;s.bind(),s.uniforms=r;var l=this._contourVAO;for(l.bind(),a=0;a<3;++a)for(e.lineWidth(this.contourWidth[a]*this.pixelRatio),s.uniforms.permutation=A[a],n=0;n<this.contourLevels[a].length;++n)this._contourCounts[a][n]&&(s.uniforms.height=this.contourLevels[a][n],l.draw(e.LINES,this._contourCounts[a][n],this._contourOffsets[a][n]));for(n=0;n<3;++n)for(s.uniforms.model=o.projections[n],s.uniforms.clipBounds=o.clipBounds[n],a=0;a<3;++a)if(this.contourProject[n][a]){s.uniforms.permutation=A[a],e.lineWidth(this.contourWidth[a]*this.pixelRatio);for(var u=0;u<this.contourLevels[a].length;++u)this._contourCounts[a][u]&&(s.uniforms.height=this.contourLevels[a][u],l.draw(e.LINES,this._contourCounts[a][u],this._contourOffsets[a][u]))}l.unbind()}},L.pick=function(t){if(!t)return null;if(t.id!==this.pickId)return null;var e=this._field[2].shape,r=this._pickResult,n=e[0]*(t.value[0]+(t.value[2]>>4)/16)/255,i=Math.floor(n),a=n-i,o=e[1]*(t.value[1]+(15&t.value[2])/16)/255,s=Math.floor(o),l=o-s;i+=1,s+=1;var u=r.position;u[0]=u[1]=u[2]=0;for(var c=0;c<2;++c)for(var f=c?a:1-a,h=0;h<2;++h)for(var p=i+c,d=s+h,g=f*(h?l:1-l),y=0;y<3;++y)u[y]+=this._field[y].get(p,d)*g;for(var m=this._pickResult.level,x=0;x<3;++x)if(m[x]=v.le(this.contourLevels[x],u[x]),m[x]<0)this.contourLevels[x].length>0&&(m[x]=0);else if(m[x]<this.contourLevels[x].length-1){var b=this.contourLevels[x][m[x]],_=this.contourLevels[x][m[x]+1];Math.abs(b-u[x])>Math.abs(_-u[x])&&(m[x]+=1)}for(r.index[0]=a<.5?i:i+1,r.index[1]=l<.5?s:s+1,r.uv[0]=n/e[0],r.uv[1]=o/e[1],y=0;y<3;++y)r.dataCoordinate[y]=this._field[y].get(r.index[0],r.index[1]);return r},L.padField=function(t,e){var r=e.shape.slice(),n=t.shape.slice();u.assign(t.lo(1,1).hi(r[0],r[1]),e),u.assign(t.lo(1).hi(r[0],1),e.hi(r[0],1)),u.assign(t.lo(1,n[1]-1).hi(r[0],1),e.lo(0,r[1]-1).hi(r[0],1)),u.assign(t.lo(0,1).hi(1,r[1]),e.hi(1)),u.assign(t.lo(n[0]-1,1).hi(1,r[1]),e.lo(r[0]-1)),t.set(0,0,e.get(0,0)),t.set(0,n[1]-1,e.get(0,r[1]-1)),t.set(n[0]-1,0,e.get(r[0]-1,0)),t.set(n[0]-1,n[1]-1,e.get(r[0]-1,r[1]-1))},L.update=function(t){t=t||{},this.objectOffset=t.objectOffset||this.objectOffset,this.dirty=!0,\\\"contourWidth\\\"in t&&(this.contourWidth=B(t.contourWidth,Number)),\\\"showContour\\\"in t&&(this.showContour=B(t.showContour,Boolean)),\\\"showSurface\\\"in t&&(this.showSurface=!!t.showSurface),\\\"contourTint\\\"in t&&(this.contourTint=B(t.contourTint,Boolean)),\\\"contourColor\\\"in t&&(this.contourColor=j(t.contourColor)),\\\"contourProject\\\"in t&&(this.contourProject=B(t.contourProject,(function(t){return B(t,Boolean)}))),\\\"surfaceProject\\\"in t&&(this.surfaceProject=t.surfaceProject),\\\"dynamicColor\\\"in t&&(this.dynamicColor=j(t.dynamicColor)),\\\"dynamicTint\\\"in t&&(this.dynamicTint=B(t.dynamicTint,Number)),\\\"dynamicWidth\\\"in t&&(this.dynamicWidth=B(t.dynamicWidth,Number)),\\\"opacity\\\"in t&&(this.opacity=t.opacity),\\\"opacityscale\\\"in t&&(this.opacityscale=t.opacityscale),\\\"colorBounds\\\"in t&&(this.colorBounds=t.colorBounds),\\\"vertexColor\\\"in t&&(this.vertexColor=t.vertexColor?1:0),\\\"colormap\\\"in t&&this._colorMap.setPixels(this.genColormap(t.colormap,this.opacityscale));var e=t.field||t.coords&&t.coords[2]||null,r=!1;if(e||(e=this._field[2].shape[0]||this._field[2].shape[2]?this._field[2].lo(1,1).hi(this._field[2].shape[0]-2,this._field[2].shape[1]-2):this._field[2].hi(0,0)),\\\"field\\\"in t||\\\"coords\\\"in t){var i=(e.shape[0]+2)*(e.shape[1]+2);i>this._field[2].data.length&&(s.freeFloat(this._field[2].data),this._field[2].data=s.mallocFloat(n.nextPow2(i))),this._field[2]=f(this._field[2].data,[e.shape[0]+2,e.shape[1]+2]),this.padField(this._field[2],e),this.shape=e.shape.slice();for(var a=this.shape,o=0;o<2;++o)this._field[2].size>this._field[o].data.length&&(s.freeFloat(this._field[o].data),this._field[o].data=s.mallocFloat(this._field[2].size)),this._field[o]=f(this._field[o].data,[a[0]+2,a[1]+2]);if(t.coords){var l=t.coords;if(!Array.isArray(l)||3!==l.length)throw new Error(\\\"gl-surface: invalid coordinates for x/y\\\");for(o=0;o<2;++o){var u=l[o];for(y=0;y<2;++y)if(u.shape[y]!==a[y])throw new Error(\\\"gl-surface: coords have incorrect shape\\\");this.padField(this._field[o],u)}}else if(t.ticks){var c=t.ticks;if(!Array.isArray(c)||2!==c.length)throw new Error(\\\"gl-surface: invalid ticks\\\");for(o=0;o<2;++o){var p=c[o];if((Array.isArray(p)||p.length)&&(p=f(p)),p.shape[0]!==a[o])throw new Error(\\\"gl-surface: invalid tick length\\\");var d=f(p.data,a);d.stride[o]=p.stride[0],d.stride[1^o]=0,this.padField(this._field[o],d)}}else{for(o=0;o<2;++o){var v=[0,0];v[o]=1,this._field[o]=f(this._field[o].data,[a[0]+2,a[1]+2],v,0)}this._field[0].set(0,0,0);for(var y=0;y<a[0];++y)this._field[0].set(y+1,0,y);for(this._field[0].set(a[0]+1,0,a[0]-1),this._field[1].set(0,0,0),y=0;y<a[1];++y)this._field[1].set(0,y+1,y);this._field[1].set(0,a[1]+1,a[1]-1)}var m=this._field,x=f(s.mallocFloat(3*m[2].size*2),[3,a[0]+2,a[1]+2,2]);for(o=0;o<3;++o)g(x.pick(o),m[o],\\\"mirror\\\");var b=f(s.mallocFloat(3*m[2].size),[a[0]+2,a[1]+2,3]);for(o=0;o<a[0]+2;++o)for(y=0;y<a[1]+2;++y){var _=x.get(0,o,y,0),w=x.get(0,o,y,1),T=x.get(1,o,y,0),A=x.get(1,o,y,1),M=x.get(2,o,y,0),S=x.get(2,o,y,1),E=T*S-A*M,L=M*w-S*_,C=_*A-w*T,P=Math.sqrt(E*E+L*L+C*C);P<1e-8?(P=Math.max(Math.abs(E),Math.abs(L),Math.abs(C)))<1e-8?(C=1,L=E=0,P=1):P=1/P:P=1/Math.sqrt(P),b.set(o,y,0,E*P),b.set(o,y,1,L*P),b.set(o,y,2,C*P)}s.free(x.data);var O=[1/0,1/0,1/0],I=[-1/0,-1/0,-1/0],D=1/0,z=-1/0,R=(a[0]-1)*(a[1]-1)*6,F=s.mallocFloat(n.nextPow2(10*R)),N=0,U=0;for(o=0;o<a[0]-1;++o)t:for(y=0;y<a[1]-1;++y){for(var V=0;V<2;++V)for(var H=0;H<2;++H)for(var q=0;q<3;++q){var G=this._field[q].get(1+o+V,1+y+H);if(isNaN(G)||!isFinite(G))continue t}for(q=0;q<6;++q){var Z=o+k[q][0],Y=y+k[q][1],W=this._field[0].get(Z+1,Y+1),X=this._field[1].get(Z+1,Y+1);G=this._field[2].get(Z+1,Y+1),E=b.get(Z+1,Y+1,0),L=b.get(Z+1,Y+1,1),C=b.get(Z+1,Y+1,2),t.intensity&&(J=t.intensity.get(Z,Y));var J=t.intensity?t.intensity.get(Z,Y):G+this.objectOffset[2];F[N++]=Z,F[N++]=Y,F[N++]=W,F[N++]=X,F[N++]=G,F[N++]=0,F[N++]=J,F[N++]=E,F[N++]=L,F[N++]=C,O[0]=Math.min(O[0],W+this.objectOffset[0]),O[1]=Math.min(O[1],X+this.objectOffset[1]),O[2]=Math.min(O[2],G+this.objectOffset[2]),D=Math.min(D,J),I[0]=Math.max(I[0],W+this.objectOffset[0]),I[1]=Math.max(I[1],X+this.objectOffset[1]),I[2]=Math.max(I[2],G+this.objectOffset[2]),z=Math.max(z,J),U+=1}}for(t.intensityBounds&&(D=+t.intensityBounds[0],z=+t.intensityBounds[1]),o=6;o<N;o+=10)F[o]=(F[o]-D)/(z-D);this._vertexCount=U,this._coordinateBuffer.update(F.subarray(0,N)),s.freeFloat(F),s.free(b.data),this.bounds=[O,I],this.intensity=t.intensity||this._field[2],this.intensityBounds[0]===D&&this.intensityBounds[1]===z||(r=!0),this.intensityBounds=[D,z]}if(\\\"levels\\\"in t){var K=t.levels;for(K=Array.isArray(K[0])?K.slice():[[],[],K],o=0;o<3;++o)K[o]=K[o].slice(),K[o].sort((function(t,e){return t-e}));for(o=0;o<3;++o)for(y=0;y<K[o].length;++y)K[o][y]-=this.objectOffset[o];t:for(o=0;o<3;++o){if(K[o].length!==this.contourLevels[o].length){r=!0;break}for(y=0;y<K[o].length;++y)if(K[o][y]!==this.contourLevels[o][y]){r=!0;break t}}this.contourLevels=K}if(r){m=this._field,a=this.shape;for(var $=[],Q=0;Q<3;++Q){var tt=this.contourLevels[Q],et=[],rt=[],nt=[0,0,0];for(o=0;o<tt.length;++o){var it=h(this._field[Q],tt[o]);et.push($.length/5|0),U=0;t:for(y=0;y<it.cells.length;++y){var at=it.cells[y];for(q=0;q<2;++q){var ot=it.positions[at[q]],st=ot[0],lt=0|Math.floor(st),ut=st-lt,ct=ot[1],ft=0|Math.floor(ct),ht=ct-ft,pt=!1;e:for(var dt=0;dt<3;++dt){nt[dt]=0;var vt=(Q+dt+1)%3;for(V=0;V<2;++V){var gt=V?ut:1-ut;for(Z=0|Math.min(Math.max(lt+V,0),a[0]),H=0;H<2;++H){var yt=H?ht:1-ht;if(Y=0|Math.min(Math.max(ft+H,0),a[1]),G=dt<2?this._field[vt].get(Z,Y):(this.intensity.get(Z,Y)-this.intensityBounds[0])/(this.intensityBounds[1]-this.intensityBounds[0]),!isFinite(G)||isNaN(G)){pt=!0;break e}var mt=gt*yt;nt[dt]+=mt*G}}}if(pt){if(q>0){for(var xt=0;xt<5;++xt)$.pop();U-=1}continue t}$.push(nt[0],nt[1],ot[0],ot[1],nt[2]),U+=1}}rt.push(U)}this._contourOffsets[Q]=et,this._contourCounts[Q]=rt}var bt=s.mallocFloat($.length);for(o=0;o<$.length;++o)bt[o]=$[o];this._contourBuffer.update(bt),s.freeFloat(bt)}},L.dispose=function(){this._shader.dispose(),this._vao.dispose(),this._coordinateBuffer.dispose(),this._colorMap.dispose(),this._contourBuffer.dispose(),this._contourVAO.dispose(),this._contourShader.dispose(),this._contourPickShader.dispose(),this._dynamicBuffer.dispose(),this._dynamicVAO.dispose();for(var t=0;t<3;++t)s.freeFloat(this._field[t].data)},L.highlight=function(t){var e,r;if(!t)return this._dynamicCounts=[0,0,0],this.dyanamicLevel=[NaN,NaN,NaN],void(this.highlightLevel=[-1,-1,-1]);for(e=0;e<3;++e)this.enableHighlight[e]?this.highlightLevel[e]=t.level[e]:this.highlightLevel[e]=-1;for(r=this.snapToData?t.dataCoordinate:t.position,e=0;e<3;++e)r[e]-=this.objectOffset[e];if(this.enableDynamic[0]&&r[0]!==this.dynamicLevel[0]||this.enableDynamic[1]&&r[1]!==this.dynamicLevel[1]||this.enableDynamic[2]&&r[2]!==this.dynamicLevel[2]){for(var n=0,i=this.shape,a=s.mallocFloat(12*i[0]*i[1]),o=0;o<3;++o)if(this.enableDynamic[o]){this.dynamicLevel[o]=r[o];var l=(o+1)%3,u=(o+2)%3,c=this._field[o],f=this._field[l],p=this._field[u],d=h(c,r[o]),v=d.cells,g=d.positions;for(this._dynamicOffsets[o]=n,e=0;e<v.length;++e)for(var y=v[e],m=0;m<2;++m){var x=g[y[m]],b=+x[0],_=0|b,w=0|Math.min(_+1,i[0]),T=b-_,k=1-T,A=+x[1],M=0|A,S=0|Math.min(M+1,i[1]),E=A-M,L=1-E,C=k*L,P=k*E,O=T*L,I=T*E,D=C*f.get(_,M)+P*f.get(_,S)+O*f.get(w,M)+I*f.get(w,S),z=C*p.get(_,M)+P*p.get(_,S)+O*p.get(w,M)+I*p.get(w,S);if(isNaN(D)||isNaN(z)){m&&(n-=1);break}a[2*n+0]=D,a[2*n+1]=z,n+=1}this._dynamicCounts[o]=n-this._dynamicOffsets[o]}else this.dynamicLevel[o]=NaN,this._dynamicCounts[o]=0;this._dynamicBuffer.update(a.subarray(0,2*n)),s.freeFloat(a)}}},8931:function(t,e,r){\\\"use strict\\\";var n=r(5050),i=r(7498),a=r(5306);t.exports=function(t){if(arguments.length<=1)throw new Error(\\\"gl-texture2d: Missing arguments for texture2d constructor\\\");if(o||function(t){o=[t.LINEAR,t.NEAREST_MIPMAP_LINEAR,t.LINEAR_MIPMAP_NEAREST,t.LINEAR_MIPMAP_NEAREST],s=[t.NEAREST,t.LINEAR,t.NEAREST_MIPMAP_NEAREST,t.NEAREST_MIPMAP_LINEAR,t.LINEAR_MIPMAP_NEAREST,t.LINEAR_MIPMAP_LINEAR],l=[t.REPEAT,t.CLAMP_TO_EDGE,t.MIRRORED_REPEAT]}(t),\\\"number\\\"==typeof arguments[1])return g(t,arguments[1],arguments[2],arguments[3]||t.RGBA,arguments[4]||t.UNSIGNED_BYTE);if(Array.isArray(arguments[1]))return g(t,0|arguments[1][0],0|arguments[1][1],arguments[2]||t.RGBA,arguments[3]||t.UNSIGNED_BYTE);if(\\\"object\\\"==typeof arguments[1]){var e=arguments[1],r=u(e)?e:e.raw;if(r)return function(t,e,r,n,i,a){var o=v(t);return t.texImage2D(t.TEXTURE_2D,0,i,i,a,e),new h(t,o,r,n,i,a)}(t,r,0|e.width,0|e.height,arguments[2]||t.RGBA,arguments[3]||t.UNSIGNED_BYTE);if(e.shape&&e.data&&e.stride)return function(t,e){var r=e.dtype,o=e.shape.slice(),s=t.getParameter(t.MAX_TEXTURE_SIZE);if(o[0]<0||o[0]>s||o[1]<0||o[1]>s)throw new Error(\\\"gl-texture2d: Invalid texture size\\\");var l=d(o,e.stride.slice()),u=0;\\\"float32\\\"===r?u=t.FLOAT:\\\"float64\\\"===r?(u=t.FLOAT,l=!1,r=\\\"float32\\\"):\\\"uint8\\\"===r?u=t.UNSIGNED_BYTE:(u=t.UNSIGNED_BYTE,l=!1,r=\\\"uint8\\\");var f,p,g=0;if(2===o.length)g=t.LUMINANCE,o=[o[0],o[1],1],e=n(e.data,o,[e.stride[0],e.stride[1],1],e.offset);else{if(3!==o.length)throw new Error(\\\"gl-texture2d: Invalid shape for texture\\\");if(1===o[2])g=t.ALPHA;else if(2===o[2])g=t.LUMINANCE_ALPHA;else if(3===o[2])g=t.RGB;else{if(4!==o[2])throw new Error(\\\"gl-texture2d: Invalid shape for pixel coords\\\");g=t.RGBA}}u!==t.FLOAT||t.getExtension(\\\"OES_texture_float\\\")||(u=t.UNSIGNED_BYTE,l=!1);var y=e.size;if(l)f=0===e.offset&&e.data.length===y?e.data:e.data.subarray(e.offset,e.offset+y);else{var m=[o[2],o[2]*o[0],1];p=a.malloc(y,r);var x=n(p,o,m,0);\\\"float32\\\"!==r&&\\\"float64\\\"!==r||u!==t.UNSIGNED_BYTE?i.assign(x,e):c(x,e),f=p.subarray(0,y)}var b=v(t);return t.texImage2D(t.TEXTURE_2D,0,g,o[0],o[1],0,g,u,f),l||a.free(p),new h(t,b,o[0],o[1],g,u)}(t,e)}throw new Error(\\\"gl-texture2d: Invalid arguments for texture2d constructor\\\")};var o=null,s=null,l=null;function u(t){return\\\"undefined\\\"!=typeof HTMLCanvasElement&&t instanceof HTMLCanvasElement||\\\"undefined\\\"!=typeof HTMLImageElement&&t instanceof HTMLImageElement||\\\"undefined\\\"!=typeof HTMLVideoElement&&t instanceof HTMLVideoElement||\\\"undefined\\\"!=typeof ImageData&&t instanceof ImageData}var c=function(t,e){i.muls(t,e,255)};function f(t,e,r){var n=t.gl,i=n.getParameter(n.MAX_TEXTURE_SIZE);if(e<0||e>i||r<0||r>i)throw new Error(\\\"gl-texture2d: Invalid texture size\\\");return t._shape=[e,r],t.bind(),n.texImage2D(n.TEXTURE_2D,0,t.format,e,r,0,t.format,t.type,null),t._mipLevels=[0],t}function h(t,e,r,n,i,a){this.gl=t,this.handle=e,this.format=i,this.type=a,this._shape=[r,n],this._mipLevels=[0],this._magFilter=t.NEAREST,this._minFilter=t.NEAREST,this._wrapS=t.CLAMP_TO_EDGE,this._wrapT=t.CLAMP_TO_EDGE,this._anisoSamples=1;var o=this,s=[this._wrapS,this._wrapT];Object.defineProperties(s,[{get:function(){return o._wrapS},set:function(t){return o.wrapS=t}},{get:function(){return o._wrapT},set:function(t){return o.wrapT=t}}]),this._wrapVector=s;var l=[this._shape[0],this._shape[1]];Object.defineProperties(l,[{get:function(){return o._shape[0]},set:function(t){return o.width=t}},{get:function(){return o._shape[1]},set:function(t){return o.height=t}}]),this._shapeVector=l}var p=h.prototype;function d(t,e){return 3===t.length?1===e[2]&&e[1]===t[0]*t[2]&&e[0]===t[2]:1===e[0]&&e[1]===t[0]}function v(t){var e=t.createTexture();return t.bindTexture(t.TEXTURE_2D,e),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_MIN_FILTER,t.NEAREST),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_MAG_FILTER,t.NEAREST),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_WRAP_S,t.CLAMP_TO_EDGE),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_WRAP_T,t.CLAMP_TO_EDGE),e}function g(t,e,r,n,i){var a=t.getParameter(t.MAX_TEXTURE_SIZE);if(e<0||e>a||r<0||r>a)throw new Error(\\\"gl-texture2d: Invalid texture shape\\\");if(i===t.FLOAT&&!t.getExtension(\\\"OES_texture_float\\\"))throw new Error(\\\"gl-texture2d: Floating point textures not supported on this platform\\\");var o=v(t);return t.texImage2D(t.TEXTURE_2D,0,n,e,r,0,n,i,null),new h(t,o,e,r,n,i)}Object.defineProperties(p,{minFilter:{get:function(){return this._minFilter},set:function(t){this.bind();var e=this.gl;if(this.type===e.FLOAT&&o.indexOf(t)>=0&&(e.getExtension(\\\"OES_texture_float_linear\\\")||(t=e.NEAREST)),s.indexOf(t)<0)throw new Error(\\\"gl-texture2d: Unknown filter mode \\\"+t);return e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MIN_FILTER,t),this._minFilter=t}},magFilter:{get:function(){return this._magFilter},set:function(t){this.bind();var e=this.gl;if(this.type===e.FLOAT&&o.indexOf(t)>=0&&(e.getExtension(\\\"OES_texture_float_linear\\\")||(t=e.NEAREST)),s.indexOf(t)<0)throw new Error(\\\"gl-texture2d: Unknown filter mode \\\"+t);return e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MAG_FILTER,t),this._magFilter=t}},mipSamples:{get:function(){return this._anisoSamples},set:function(t){var e=this._anisoSamples;if(this._anisoSamples=0|Math.max(t,1),e!==this._anisoSamples){var r=this.gl.getExtension(\\\"EXT_texture_filter_anisotropic\\\");r&&this.gl.texParameterf(this.gl.TEXTURE_2D,r.TEXTURE_MAX_ANISOTROPY_EXT,this._anisoSamples)}return this._anisoSamples}},wrapS:{get:function(){return this._wrapS},set:function(t){if(this.bind(),l.indexOf(t)<0)throw new Error(\\\"gl-texture2d: Unknown wrap mode \\\"+t);return this.gl.texParameteri(this.gl.TEXTURE_2D,this.gl.TEXTURE_WRAP_S,t),this._wrapS=t}},wrapT:{get:function(){return this._wrapT},set:function(t){if(this.bind(),l.indexOf(t)<0)throw new Error(\\\"gl-texture2d: Unknown wrap mode \\\"+t);return this.gl.texParameteri(this.gl.TEXTURE_2D,this.gl.TEXTURE_WRAP_T,t),this._wrapT=t}},wrap:{get:function(){return this._wrapVector},set:function(t){if(Array.isArray(t)||(t=[t,t]),2!==t.length)throw new Error(\\\"gl-texture2d: Must specify wrap mode for rows and columns\\\");for(var e=0;e<2;++e)if(l.indexOf(t[e])<0)throw new Error(\\\"gl-texture2d: Unknown wrap mode \\\"+t);this._wrapS=t[0],this._wrapT=t[1];var r=this.gl;return this.bind(),r.texParameteri(r.TEXTURE_2D,r.TEXTURE_WRAP_S,this._wrapS),r.texParameteri(r.TEXTURE_2D,r.TEXTURE_WRAP_T,this._wrapT),t}},shape:{get:function(){return this._shapeVector},set:function(t){if(Array.isArray(t)){if(2!==t.length)throw new Error(\\\"gl-texture2d: Invalid texture shape\\\")}else t=[0|t,0|t];return f(this,0|t[0],0|t[1]),[0|t[0],0|t[1]]}},width:{get:function(){return this._shape[0]},set:function(t){return f(this,t|=0,this._shape[1]),t}},height:{get:function(){return this._shape[1]},set:function(t){return t|=0,f(this,this._shape[0],t),t}}}),p.bind=function(t){var e=this.gl;return void 0!==t&&e.activeTexture(e.TEXTURE0+(0|t)),e.bindTexture(e.TEXTURE_2D,this.handle),void 0!==t?0|t:e.getParameter(e.ACTIVE_TEXTURE)-e.TEXTURE0},p.dispose=function(){this.gl.deleteTexture(this.handle)},p.generateMipmap=function(){this.bind(),this.gl.generateMipmap(this.gl.TEXTURE_2D);for(var t=Math.min(this._shape[0],this._shape[1]),e=0;t>0;++e,t>>>=1)this._mipLevels.indexOf(e)<0&&this._mipLevels.push(e)},p.setPixels=function(t,e,r,o){var s=this.gl;this.bind(),Array.isArray(e)?(o=r,r=0|e[1],e=0|e[0]):(e=e||0,r=r||0),o=o||0;var l=u(t)?t:t.raw;if(l)this._mipLevels.indexOf(o)<0?(s.texImage2D(s.TEXTURE_2D,0,this.format,this.format,this.type,l),this._mipLevels.push(o)):s.texSubImage2D(s.TEXTURE_2D,o,e,r,this.format,this.type,l);else{if(!(t.shape&&t.stride&&t.data))throw new Error(\\\"gl-texture2d: Unsupported data type\\\");if(t.shape.length<2||e+t.shape[1]>this._shape[1]>>>o||r+t.shape[0]>this._shape[0]>>>o||e<0||r<0)throw new Error(\\\"gl-texture2d: Texture dimensions are out of bounds\\\");!function(t,e,r,o,s,l,u,f){var h=f.dtype,p=f.shape.slice();if(p.length<2||p.length>3)throw new Error(\\\"gl-texture2d: Invalid ndarray, must be 2d or 3d\\\");var v=0,g=0,y=d(p,f.stride.slice());if(\\\"float32\\\"===h?v=t.FLOAT:\\\"float64\\\"===h?(v=t.FLOAT,y=!1,h=\\\"float32\\\"):\\\"uint8\\\"===h?v=t.UNSIGNED_BYTE:(v=t.UNSIGNED_BYTE,y=!1,h=\\\"uint8\\\"),2===p.length)g=t.LUMINANCE,p=[p[0],p[1],1],f=n(f.data,p,[f.stride[0],f.stride[1],1],f.offset);else{if(3!==p.length)throw new Error(\\\"gl-texture2d: Invalid shape for texture\\\");if(1===p[2])g=t.ALPHA;else if(2===p[2])g=t.LUMINANCE_ALPHA;else if(3===p[2])g=t.RGB;else{if(4!==p[2])throw new Error(\\\"gl-texture2d: Invalid shape for pixel coords\\\");g=t.RGBA}p[2]}if(g!==t.LUMINANCE&&g!==t.ALPHA||s!==t.LUMINANCE&&s!==t.ALPHA||(g=s),g!==s)throw new Error(\\\"gl-texture2d: Incompatible texture format for setPixels\\\");var m=f.size,x=u.indexOf(o)<0;if(x&&u.push(o),v===l&&y)0===f.offset&&f.data.length===m?x?t.texImage2D(t.TEXTURE_2D,o,s,p[0],p[1],0,s,l,f.data):t.texSubImage2D(t.TEXTURE_2D,o,e,r,p[0],p[1],s,l,f.data):x?t.texImage2D(t.TEXTURE_2D,o,s,p[0],p[1],0,s,l,f.data.subarray(f.offset,f.offset+m)):t.texSubImage2D(t.TEXTURE_2D,o,e,r,p[0],p[1],s,l,f.data.subarray(f.offset,f.offset+m));else{var b;b=l===t.FLOAT?a.mallocFloat32(m):a.mallocUint8(m);var _=n(b,p,[p[2],p[2]*p[0],1]);v===t.FLOAT&&l===t.UNSIGNED_BYTE?c(_,f):i.assign(_,f),x?t.texImage2D(t.TEXTURE_2D,o,s,p[0],p[1],0,s,l,b.subarray(0,m)):t.texSubImage2D(t.TEXTURE_2D,o,e,r,p[0],p[1],s,l,b.subarray(0,m)),l===t.FLOAT?a.freeFloat32(b):a.freeUint8(b)}}(s,e,r,o,this.format,this.type,this._mipLevels,t)}}},3056:function(t){\\\"use strict\\\";t.exports=function(t,e,r){e?e.bind():t.bindBuffer(t.ELEMENT_ARRAY_BUFFER,null);var n=0|t.getParameter(t.MAX_VERTEX_ATTRIBS);if(r){if(r.length>n)throw new Error(\\\"gl-vao: Too many vertex attributes\\\");for(var i=0;i<r.length;++i){var a=r[i];if(a.buffer){var o=a.buffer,s=a.size||4,l=a.type||t.FLOAT,u=!!a.normalized,c=a.stride||0,f=a.offset||0;o.bind(),t.enableVertexAttribArray(i),t.vertexAttribPointer(i,s,l,u,c,f)}else{if(\\\"number\\\"==typeof a)t.vertexAttrib1f(i,a);else if(1===a.length)t.vertexAttrib1f(i,a[0]);else if(2===a.length)t.vertexAttrib2f(i,a[0],a[1]);else if(3===a.length)t.vertexAttrib3f(i,a[0],a[1],a[2]);else{if(4!==a.length)throw new Error(\\\"gl-vao: Invalid vertex attribute\\\");t.vertexAttrib4f(i,a[0],a[1],a[2],a[3])}t.disableVertexAttribArray(i)}}for(;i<n;++i)t.disableVertexAttribArray(i)}else for(t.bindBuffer(t.ARRAY_BUFFER,null),i=0;i<n;++i)t.disableVertexAttribArray(i)}},7220:function(t,e,r){\\\"use strict\\\";var n=r(3056);function i(t){this.gl=t,this._elements=null,this._attributes=null,this._elementsType=t.UNSIGNED_SHORT}i.prototype.bind=function(){n(this.gl,this._elements,this._attributes)},i.prototype.update=function(t,e,r){this._elements=e,this._attributes=t,this._elementsType=r||this.gl.UNSIGNED_SHORT},i.prototype.dispose=function(){},i.prototype.unbind=function(){},i.prototype.draw=function(t,e,r){r=r||0;var n=this.gl;this._elements?n.drawElements(t,e,this._elementsType,r):n.drawArrays(t,r,e)},t.exports=function(t){return new i(t)}},3778:function(t,e,r){\\\"use strict\\\";var n=r(3056);function i(t,e,r,n,i,a){this.location=t,this.dimension=e,this.a=r,this.b=n,this.c=i,this.d=a}function a(t,e,r){this.gl=t,this._ext=e,this.handle=r,this._attribs=[],this._useElements=!1,this._elementsType=t.UNSIGNED_SHORT}i.prototype.bind=function(t){switch(this.dimension){case 1:t.vertexAttrib1f(this.location,this.a);break;case 2:t.vertexAttrib2f(this.location,this.a,this.b);break;case 3:t.vertexAttrib3f(this.location,this.a,this.b,this.c);break;case 4:t.vertexAttrib4f(this.location,this.a,this.b,this.c,this.d)}},a.prototype.bind=function(){this._ext.bindVertexArrayOES(this.handle);for(var t=0;t<this._attribs.length;++t)this._attribs[t].bind(this.gl)},a.prototype.unbind=function(){this._ext.bindVertexArrayOES(null)},a.prototype.dispose=function(){this._ext.deleteVertexArrayOES(this.handle)},a.prototype.update=function(t,e,r){if(this.bind(),n(this.gl,e,t),this.unbind(),this._attribs.length=0,t)for(var a=0;a<t.length;++a){var o=t[a];\\\"number\\\"==typeof o?this._attribs.push(new i(a,1,o)):Array.isArray(o)&&this._attribs.push(new i(a,o.length,o[0],o[1],o[2],o[3]))}this._useElements=!!e,this._elementsType=r||this.gl.UNSIGNED_SHORT},a.prototype.draw=function(t,e,r){r=r||0;var n=this.gl;this._useElements?n.drawElements(t,e,this._elementsType,r):n.drawArrays(t,r,e)},t.exports=function(t,e){return new a(t,e,e.createVertexArrayOES())}},2944:function(t,e,r){\\\"use strict\\\";var n=r(3778),i=r(7220);function a(t){this.bindVertexArrayOES=t.bindVertexArray.bind(t),this.createVertexArrayOES=t.createVertexArray.bind(t),this.deleteVertexArrayOES=t.deleteVertexArray.bind(t)}t.exports=function(t,e,r,o){var s,l=t.createVertexArray?new a(t):t.getExtension(\\\"OES_vertex_array_object\\\");return(s=l?n(t,l):i(t)).update(e,r,o),s}},2598:function(t){t.exports=function(t,e,r){return t[0]=e[0]+r[0],t[1]=e[1]+r[1],t[2]=e[2]+r[2],t}},5879:function(t,e,r){t.exports=function(t,e){var r=n(t[0],t[1],t[2]),o=n(e[0],e[1],e[2]);i(r,r),i(o,o);var s=a(r,o);return s>1?0:Math.acos(s)};var n=r(5415),i=r(899),a=r(9305)},8827:function(t){t.exports=function(t,e){return t[0]=Math.ceil(e[0]),t[1]=Math.ceil(e[1]),t[2]=Math.ceil(e[2]),t}},7622:function(t){t.exports=function(t){var e=new Float32Array(3);return e[0]=t[0],e[1]=t[1],e[2]=t[2],e}},8782:function(t){t.exports=function(t,e){return t[0]=e[0],t[1]=e[1],t[2]=e[2],t}},8501:function(t){t.exports=function(){var t=new Float32Array(3);return t[0]=0,t[1]=0,t[2]=0,t}},903:function(t){t.exports=function(t,e,r){var n=e[0],i=e[1],a=e[2],o=r[0],s=r[1],l=r[2];return t[0]=i*l-a*s,t[1]=a*o-n*l,t[2]=n*s-i*o,t}},5981:function(t,e,r){t.exports=r(8288)},8288:function(t){t.exports=function(t,e){var r=e[0]-t[0],n=e[1]-t[1],i=e[2]-t[2];return Math.sqrt(r*r+n*n+i*i)}},8629:function(t,e,r){t.exports=r(7979)},7979:function(t){t.exports=function(t,e,r){return t[0]=e[0]/r[0],t[1]=e[1]/r[1],t[2]=e[2]/r[2],t}},9305:function(t){t.exports=function(t,e){return t[0]*e[0]+t[1]*e[1]+t[2]*e[2]}},154:function(t){t.exports=1e-6},4932:function(t,e,r){t.exports=function(t,e){var r=t[0],i=t[1],a=t[2],o=e[0],s=e[1],l=e[2];return Math.abs(r-o)<=n*Math.max(1,Math.abs(r),Math.abs(o))&&Math.abs(i-s)<=n*Math.max(1,Math.abs(i),Math.abs(s))&&Math.abs(a-l)<=n*Math.max(1,Math.abs(a),Math.abs(l))};var n=r(154)},5777:function(t){t.exports=function(t,e){return t[0]===e[0]&&t[1]===e[1]&&t[2]===e[2]}},3306:function(t){t.exports=function(t,e){return t[0]=Math.floor(e[0]),t[1]=Math.floor(e[1]),t[2]=Math.floor(e[2]),t}},7447:function(t,e,r){t.exports=function(t,e,r,i,a,o){var s,l;for(e||(e=3),r||(r=0),l=i?Math.min(i*e+r,t.length):t.length,s=r;s<l;s+=e)n[0]=t[s],n[1]=t[s+1],n[2]=t[s+2],a(n,n,o),t[s]=n[0],t[s+1]=n[1],t[s+2]=n[2];return t};var n=r(8501)()},5415:function(t){t.exports=function(t,e,r){var n=new Float32Array(3);return n[0]=t,n[1]=e,n[2]=r,n}},2858:function(t,e,r){t.exports={EPSILON:r(154),create:r(8501),clone:r(7622),angle:r(5879),fromValues:r(5415),copy:r(8782),set:r(831),equals:r(4932),exactEquals:r(5777),add:r(2598),subtract:r(911),sub:r(8921),multiply:r(105),mul:r(5733),divide:r(7979),div:r(8629),min:r(3605),max:r(1716),floor:r(3306),ceil:r(8827),round:r(1624),scale:r(5685),scaleAndAdd:r(6722),distance:r(8288),dist:r(5981),squaredDistance:r(6403),sqrDist:r(5294),length:r(4693),len:r(1468),squaredLength:r(4337),sqrLen:r(3303),negate:r(435),inverse:r(2073),normalize:r(899),dot:r(9305),cross:r(903),lerp:r(1868),random:r(6660),transformMat4:r(3255),transformMat3:r(9908),transformQuat:r(6568),rotateX:r(392),rotateY:r(3222),rotateZ:r(3388),forEach:r(7447)}},2073:function(t){t.exports=function(t,e){return t[0]=1/e[0],t[1]=1/e[1],t[2]=1/e[2],t}},1468:function(t,e,r){t.exports=r(4693)},4693:function(t){t.exports=function(t){var e=t[0],r=t[1],n=t[2];return Math.sqrt(e*e+r*r+n*n)}},1868:function(t){t.exports=function(t,e,r,n){var i=e[0],a=e[1],o=e[2];return t[0]=i+n*(r[0]-i),t[1]=a+n*(r[1]-a),t[2]=o+n*(r[2]-o),t}},1716:function(t){t.exports=function(t,e,r){return t[0]=Math.max(e[0],r[0]),t[1]=Math.max(e[1],r[1]),t[2]=Math.max(e[2],r[2]),t}},3605:function(t){t.exports=function(t,e,r){return t[0]=Math.min(e[0],r[0]),t[1]=Math.min(e[1],r[1]),t[2]=Math.min(e[2],r[2]),t}},5733:function(t,e,r){t.exports=r(105)},105:function(t){t.exports=function(t,e,r){return t[0]=e[0]*r[0],t[1]=e[1]*r[1],t[2]=e[2]*r[2],t}},435:function(t){t.exports=function(t,e){return t[0]=-e[0],t[1]=-e[1],t[2]=-e[2],t}},899:function(t){t.exports=function(t,e){var r=e[0],n=e[1],i=e[2],a=r*r+n*n+i*i;return a>0&&(a=1/Math.sqrt(a),t[0]=e[0]*a,t[1]=e[1]*a,t[2]=e[2]*a),t}},6660:function(t){t.exports=function(t,e){e=e||1;var r=2*Math.random()*Math.PI,n=2*Math.random()-1,i=Math.sqrt(1-n*n)*e;return t[0]=Math.cos(r)*i,t[1]=Math.sin(r)*i,t[2]=n*e,t}},392:function(t){t.exports=function(t,e,r,n){var i=r[1],a=r[2],o=e[1]-i,s=e[2]-a,l=Math.sin(n),u=Math.cos(n);return t[0]=e[0],t[1]=i+o*u-s*l,t[2]=a+o*l+s*u,t}},3222:function(t){t.exports=function(t,e,r,n){var i=r[0],a=r[2],o=e[0]-i,s=e[2]-a,l=Math.sin(n),u=Math.cos(n);return t[0]=i+s*l+o*u,t[1]=e[1],t[2]=a+s*u-o*l,t}},3388:function(t){t.exports=function(t,e,r,n){var i=r[0],a=r[1],o=e[0]-i,s=e[1]-a,l=Math.sin(n),u=Math.cos(n);return t[0]=i+o*u-s*l,t[1]=a+o*l+s*u,t[2]=e[2],t}},1624:function(t){t.exports=function(t,e){return t[0]=Math.round(e[0]),t[1]=Math.round(e[1]),t[2]=Math.round(e[2]),t}},5685:function(t){t.exports=function(t,e,r){return t[0]=e[0]*r,t[1]=e[1]*r,t[2]=e[2]*r,t}},6722:function(t){t.exports=function(t,e,r,n){return t[0]=e[0]+r[0]*n,t[1]=e[1]+r[1]*n,t[2]=e[2]+r[2]*n,t}},831:function(t){t.exports=function(t,e,r,n){return t[0]=e,t[1]=r,t[2]=n,t}},5294:function(t,e,r){t.exports=r(6403)},3303:function(t,e,r){t.exports=r(4337)},6403:function(t){t.exports=function(t,e){var r=e[0]-t[0],n=e[1]-t[1],i=e[2]-t[2];return r*r+n*n+i*i}},4337:function(t){t.exports=function(t){var e=t[0],r=t[1],n=t[2];return e*e+r*r+n*n}},8921:function(t,e,r){t.exports=r(911)},911:function(t){t.exports=function(t,e,r){return t[0]=e[0]-r[0],t[1]=e[1]-r[1],t[2]=e[2]-r[2],t}},9908:function(t){t.exports=function(t,e,r){var n=e[0],i=e[1],a=e[2];return t[0]=n*r[0]+i*r[3]+a*r[6],t[1]=n*r[1]+i*r[4]+a*r[7],t[2]=n*r[2]+i*r[5]+a*r[8],t}},3255:function(t){t.exports=function(t,e,r){var n=e[0],i=e[1],a=e[2],o=r[3]*n+r[7]*i+r[11]*a+r[15];return o=o||1,t[0]=(r[0]*n+r[4]*i+r[8]*a+r[12])/o,t[1]=(r[1]*n+r[5]*i+r[9]*a+r[13])/o,t[2]=(r[2]*n+r[6]*i+r[10]*a+r[14])/o,t}},6568:function(t){t.exports=function(t,e,r){var n=e[0],i=e[1],a=e[2],o=r[0],s=r[1],l=r[2],u=r[3],c=u*n+s*a-l*i,f=u*i+l*n-o*a,h=u*a+o*i-s*n,p=-o*n-s*i-l*a;return t[0]=c*u+p*-o+f*-l-h*-s,t[1]=f*u+p*-s+h*-o-c*-l,t[2]=h*u+p*-l+c*-s-f*-o,t}},3433:function(t){t.exports=function(t,e,r){return t[0]=e[0]+r[0],t[1]=e[1]+r[1],t[2]=e[2]+r[2],t[3]=e[3]+r[3],t}},1413:function(t){t.exports=function(t){var e=new Float32Array(4);return e[0]=t[0],e[1]=t[1],e[2]=t[2],e[3]=t[3],e}},3470:function(t){t.exports=function(t,e){return t[0]=e[0],t[1]=e[1],t[2]=e[2],t[3]=e[3],t}},5313:function(t){t.exports=function(){var t=new Float32Array(4);return t[0]=0,t[1]=0,t[2]=0,t[3]=0,t}},5446:function(t){t.exports=function(t,e){var r=e[0]-t[0],n=e[1]-t[1],i=e[2]-t[2],a=e[3]-t[3];return Math.sqrt(r*r+n*n+i*i+a*a)}},205:function(t){t.exports=function(t,e,r){return t[0]=e[0]/r[0],t[1]=e[1]/r[1],t[2]=e[2]/r[2],t[3]=e[3]/r[3],t}},4242:function(t){t.exports=function(t,e){return t[0]*e[0]+t[1]*e[1]+t[2]*e[2]+t[3]*e[3]}},5680:function(t){t.exports=function(t,e,r,n){var i=new Float32Array(4);return i[0]=t,i[1]=e,i[2]=r,i[3]=n,i}},4020:function(t,e,r){t.exports={create:r(5313),clone:r(1413),fromValues:r(5680),copy:r(3470),set:r(6453),add:r(3433),subtract:r(2705),multiply:r(746),divide:r(205),min:r(2170),max:r(3030),scale:r(5510),scaleAndAdd:r(4224),distance:r(5446),squaredDistance:r(1542),length:r(8177),squaredLength:r(9037),negate:r(6459),inverse:r(8057),normalize:r(381),dot:r(4242),lerp:r(8746),random:r(3770),transformMat4:r(6342),transformQuat:r(5022)}},8057:function(t){t.exports=function(t,e){return t[0]=1/e[0],t[1]=1/e[1],t[2]=1/e[2],t[3]=1/e[3],t}},8177:function(t){t.exports=function(t){var e=t[0],r=t[1],n=t[2],i=t[3];return Math.sqrt(e*e+r*r+n*n+i*i)}},8746:function(t){t.exports=function(t,e,r,n){var i=e[0],a=e[1],o=e[2],s=e[3];return t[0]=i+n*(r[0]-i),t[1]=a+n*(r[1]-a),t[2]=o+n*(r[2]-o),t[3]=s+n*(r[3]-s),t}},3030:function(t){t.exports=function(t,e,r){return t[0]=Math.max(e[0],r[0]),t[1]=Math.max(e[1],r[1]),t[2]=Math.max(e[2],r[2]),t[3]=Math.max(e[3],r[3]),t}},2170:function(t){t.exports=function(t,e,r){return t[0]=Math.min(e[0],r[0]),t[1]=Math.min(e[1],r[1]),t[2]=Math.min(e[2],r[2]),t[3]=Math.min(e[3],r[3]),t}},746:function(t){t.exports=function(t,e,r){return t[0]=e[0]*r[0],t[1]=e[1]*r[1],t[2]=e[2]*r[2],t[3]=e[3]*r[3],t}},6459:function(t){t.exports=function(t,e){return t[0]=-e[0],t[1]=-e[1],t[2]=-e[2],t[3]=-e[3],t}},381:function(t){t.exports=function(t,e){var r=e[0],n=e[1],i=e[2],a=e[3],o=r*r+n*n+i*i+a*a;return o>0&&(o=1/Math.sqrt(o),t[0]=r*o,t[1]=n*o,t[2]=i*o,t[3]=a*o),t}},3770:function(t,e,r){var n=r(381),i=r(5510);t.exports=function(t,e){return e=e||1,t[0]=Math.random(),t[1]=Math.random(),t[2]=Math.random(),t[3]=Math.random(),n(t,t),i(t,t,e),t}},5510:function(t){t.exports=function(t,e,r){return t[0]=e[0]*r,t[1]=e[1]*r,t[2]=e[2]*r,t[3]=e[3]*r,t}},4224:function(t){t.exports=function(t,e,r,n){return t[0]=e[0]+r[0]*n,t[1]=e[1]+r[1]*n,t[2]=e[2]+r[2]*n,t[3]=e[3]+r[3]*n,t}},6453:function(t){t.exports=function(t,e,r,n,i){return t[0]=e,t[1]=r,t[2]=n,t[3]=i,t}},1542:function(t){t.exports=function(t,e){var r=e[0]-t[0],n=e[1]-t[1],i=e[2]-t[2],a=e[3]-t[3];return r*r+n*n+i*i+a*a}},9037:function(t){t.exports=function(t){var e=t[0],r=t[1],n=t[2],i=t[3];return e*e+r*r+n*n+i*i}},2705:function(t){t.exports=function(t,e,r){return t[0]=e[0]-r[0],t[1]=e[1]-r[1],t[2]=e[2]-r[2],t[3]=e[3]-r[3],t}},6342:function(t){t.exports=function(t,e,r){var n=e[0],i=e[1],a=e[2],o=e[3];return t[0]=r[0]*n+r[4]*i+r[8]*a+r[12]*o,t[1]=r[1]*n+r[5]*i+r[9]*a+r[13]*o,t[2]=r[2]*n+r[6]*i+r[10]*a+r[14]*o,t[3]=r[3]*n+r[7]*i+r[11]*a+r[15]*o,t}},5022:function(t){t.exports=function(t,e,r){var n=e[0],i=e[1],a=e[2],o=r[0],s=r[1],l=r[2],u=r[3],c=u*n+s*a-l*i,f=u*i+l*n-o*a,h=u*a+o*i-s*n,p=-o*n-s*i-l*a;return t[0]=c*u+p*-o+f*-l-h*-s,t[1]=f*u+p*-s+h*-o-c*-l,t[2]=h*u+p*-l+c*-s-f*-o,t[3]=e[3],t}},9365:function(t,e,r){var n=r(8096),i=r(7896);t.exports=function(t){for(var e=Array.isArray(t)?t:n(t),r=0;r<e.length;r++){var a=e[r];if(\\\"preprocessor\\\"===a.type){var o=a.data.match(/\\\\#define\\\\s+SHADER_NAME(_B64)?\\\\s+(.+)$/);if(o&&o[2]){var s=o[1],l=o[2];return(s?i(l):l).trim()}}}}},3193:function(t,e,r){t.exports=function(t){var e,r,T,k=0,A=0,M=l,S=[],E=[],L=1,C=0,P=0,O=!1,I=!1,D=\\\"\\\",z=a,R=n;\\\"300 es\\\"===(t=t||{}).version&&(z=s,R=o);var F={},B={};for(k=0;k<z.length;k++)F[z[k]]=!0;for(k=0;k<R.length;k++)B[R[k]]=!0;return function(t){return E=[],null!==t?function(t){var r;for(k=0,t.toString&&(t=t.toString()),D+=t.replace(/\\\\r\\\\n/g,\\\"\\\\n\\\"),T=D.length;e=D[k],k<T;){switch(r=k,M){case c:k=H();break;case f:case h:k=V();break;case p:k=q();break;case d:k=Y();break;case _:k=Z();break;case v:k=W();break;case u:k=X();break;case x:k=U();break;case l:k=j()}r!==k&&(\\\"\\\\n\\\"===D[r]?(C=0,++L):++C)}return A+=k,D=D.slice(k),E}(t):(S.length&&N(S.join(\\\"\\\")),M=b,N(\\\"(eof)\\\"),E)};function N(t){t.length&&E.push({type:w[M],data:t,position:P,line:L,column:C})}function j(){return S=S.length?[]:S,\\\"/\\\"===r&&\\\"*\\\"===e?(P=A+k-1,M=c,r=e,k+1):\\\"/\\\"===r&&\\\"/\\\"===e?(P=A+k-1,M=f,r=e,k+1):\\\"#\\\"===e?(M=h,P=A+k,k):/\\\\s/.test(e)?(M=x,P=A+k,k):(O=/\\\\d/.test(e),I=/[^\\\\w_]/.test(e),P=A+k,M=O?d:I?p:u,k)}function U(){return/[^\\\\s]/g.test(e)?(N(S.join(\\\"\\\")),M=l,k):(S.push(e),r=e,k+1)}function V(){return\\\"\\\\r\\\"!==e&&\\\"\\\\n\\\"!==e||\\\"\\\\\\\\\\\"===r?(S.push(e),r=e,k+1):(N(S.join(\\\"\\\")),M=l,k)}function H(){return\\\"/\\\"===e&&\\\"*\\\"===r?(S.push(e),N(S.join(\\\"\\\")),M=l,k+1):(S.push(e),r=e,k+1)}function q(){if(\\\".\\\"===r&&/\\\\d/.test(e))return M=v,k;if(\\\"/\\\"===r&&\\\"*\\\"===e)return M=c,k;if(\\\"/\\\"===r&&\\\"/\\\"===e)return M=f,k;if(\\\".\\\"===e&&S.length){for(;G(S););return M=v,k}if(\\\";\\\"===e||\\\")\\\"===e||\\\"(\\\"===e){if(S.length)for(;G(S););return N(e),M=l,k+1}var t=2===S.length&&\\\"=\\\"!==e;if(/[\\\\w_\\\\d\\\\s]/.test(e)||t){for(;G(S););return M=l,k}return S.push(e),r=e,k+1}function G(t){for(var e,r,n=0;;){if(e=i.indexOf(t.slice(0,t.length+n).join(\\\"\\\")),r=i[e],-1===e){if(n--+t.length>0)continue;r=t.slice(0,1).join(\\\"\\\")}return N(r),P+=r.length,(S=S.slice(r.length)).length}}function Z(){return/[^a-fA-F0-9]/.test(e)?(N(S.join(\\\"\\\")),M=l,k):(S.push(e),r=e,k+1)}function Y(){return\\\".\\\"===e||/[eE]/.test(e)?(S.push(e),M=v,r=e,k+1):\\\"x\\\"===e&&1===S.length&&\\\"0\\\"===S[0]?(M=_,S.push(e),r=e,k+1):/[^\\\\d]/.test(e)?(N(S.join(\\\"\\\")),M=l,k):(S.push(e),r=e,k+1)}function W(){return\\\"f\\\"===e&&(S.push(e),r=e,k+=1),/[eE]/.test(e)?(S.push(e),r=e,k+1):(\\\"-\\\"!==e&&\\\"+\\\"!==e||!/[eE]/.test(r))&&/[^\\\\d]/.test(e)?(N(S.join(\\\"\\\")),M=l,k):(S.push(e),r=e,k+1)}function X(){if(/[^\\\\d\\\\w_]/.test(e)){var t=S.join(\\\"\\\");return M=B[t]?m:F[t]?y:g,N(S.join(\\\"\\\")),M=l,k}return S.push(e),r=e,k+1}};var n=r(399),i=r(9746),a=r(9525),o=r(9458),s=r(3585),l=999,u=9999,c=0,f=1,h=2,p=3,d=4,v=5,g=6,y=7,m=8,x=9,b=10,_=11,w=[\\\"block-comment\\\",\\\"line-comment\\\",\\\"preprocessor\\\",\\\"operator\\\",\\\"integer\\\",\\\"float\\\",\\\"ident\\\",\\\"builtin\\\",\\\"keyword\\\",\\\"whitespace\\\",\\\"eof\\\",\\\"integer\\\"]},3585:function(t,e,r){var n=r(9525);n=n.slice().filter((function(t){return!/^(gl\\\\_|texture)/.test(t)})),t.exports=n.concat([\\\"gl_VertexID\\\",\\\"gl_InstanceID\\\",\\\"gl_Position\\\",\\\"gl_PointSize\\\",\\\"gl_FragCoord\\\",\\\"gl_FrontFacing\\\",\\\"gl_FragDepth\\\",\\\"gl_PointCoord\\\",\\\"gl_MaxVertexAttribs\\\",\\\"gl_MaxVertexUniformVectors\\\",\\\"gl_MaxVertexOutputVectors\\\",\\\"gl_MaxFragmentInputVectors\\\",\\\"gl_MaxVertexTextureImageUnits\\\",\\\"gl_MaxCombinedTextureImageUnits\\\",\\\"gl_MaxTextureImageUnits\\\",\\\"gl_MaxFragmentUniformVectors\\\",\\\"gl_MaxDrawBuffers\\\",\\\"gl_MinProgramTexelOffset\\\",\\\"gl_MaxProgramTexelOffset\\\",\\\"gl_DepthRangeParameters\\\",\\\"gl_DepthRange\\\",\\\"trunc\\\",\\\"round\\\",\\\"roundEven\\\",\\\"isnan\\\",\\\"isinf\\\",\\\"floatBitsToInt\\\",\\\"floatBitsToUint\\\",\\\"intBitsToFloat\\\",\\\"uintBitsToFloat\\\",\\\"packSnorm2x16\\\",\\\"unpackSnorm2x16\\\",\\\"packUnorm2x16\\\",\\\"unpackUnorm2x16\\\",\\\"packHalf2x16\\\",\\\"unpackHalf2x16\\\",\\\"outerProduct\\\",\\\"transpose\\\",\\\"determinant\\\",\\\"inverse\\\",\\\"texture\\\",\\\"textureSize\\\",\\\"textureProj\\\",\\\"textureLod\\\",\\\"textureOffset\\\",\\\"texelFetch\\\",\\\"texelFetchOffset\\\",\\\"textureProjOffset\\\",\\\"textureLodOffset\\\",\\\"textureProjLod\\\",\\\"textureProjLodOffset\\\",\\\"textureGrad\\\",\\\"textureGradOffset\\\",\\\"textureProjGrad\\\",\\\"textureProjGradOffset\\\"])},9525:function(t){t.exports=[\\\"abs\\\",\\\"acos\\\",\\\"all\\\",\\\"any\\\",\\\"asin\\\",\\\"atan\\\",\\\"ceil\\\",\\\"clamp\\\",\\\"cos\\\",\\\"cross\\\",\\\"dFdx\\\",\\\"dFdy\\\",\\\"degrees\\\",\\\"distance\\\",\\\"dot\\\",\\\"equal\\\",\\\"exp\\\",\\\"exp2\\\",\\\"faceforward\\\",\\\"floor\\\",\\\"fract\\\",\\\"gl_BackColor\\\",\\\"gl_BackLightModelProduct\\\",\\\"gl_BackLightProduct\\\",\\\"gl_BackMaterial\\\",\\\"gl_BackSecondaryColor\\\",\\\"gl_ClipPlane\\\",\\\"gl_ClipVertex\\\",\\\"gl_Color\\\",\\\"gl_DepthRange\\\",\\\"gl_DepthRangeParameters\\\",\\\"gl_EyePlaneQ\\\",\\\"gl_EyePlaneR\\\",\\\"gl_EyePlaneS\\\",\\\"gl_EyePlaneT\\\",\\\"gl_Fog\\\",\\\"gl_FogCoord\\\",\\\"gl_FogFragCoord\\\",\\\"gl_FogParameters\\\",\\\"gl_FragColor\\\",\\\"gl_FragCoord\\\",\\\"gl_FragData\\\",\\\"gl_FragDepth\\\",\\\"gl_FragDepthEXT\\\",\\\"gl_FrontColor\\\",\\\"gl_FrontFacing\\\",\\\"gl_FrontLightModelProduct\\\",\\\"gl_FrontLightProduct\\\",\\\"gl_FrontMaterial\\\",\\\"gl_FrontSecondaryColor\\\",\\\"gl_LightModel\\\",\\\"gl_LightModelParameters\\\",\\\"gl_LightModelProducts\\\",\\\"gl_LightProducts\\\",\\\"gl_LightSource\\\",\\\"gl_LightSourceParameters\\\",\\\"gl_MaterialParameters\\\",\\\"gl_MaxClipPlanes\\\",\\\"gl_MaxCombinedTextureImageUnits\\\",\\\"gl_MaxDrawBuffers\\\",\\\"gl_MaxFragmentUniformComponents\\\",\\\"gl_MaxLights\\\",\\\"gl_MaxTextureCoords\\\",\\\"gl_MaxTextureImageUnits\\\",\\\"gl_MaxTextureUnits\\\",\\\"gl_MaxVaryingFloats\\\",\\\"gl_MaxVertexAttribs\\\",\\\"gl_MaxVertexTextureImageUnits\\\",\\\"gl_MaxVertexUniformComponents\\\",\\\"gl_ModelViewMatrix\\\",\\\"gl_ModelViewMatrixInverse\\\",\\\"gl_ModelViewMatrixInverseTranspose\\\",\\\"gl_ModelViewMatrixTranspose\\\",\\\"gl_ModelViewProjectionMatrix\\\",\\\"gl_ModelViewProjectionMatrixInverse\\\",\\\"gl_ModelViewProjectionMatrixInverseTranspose\\\",\\\"gl_ModelViewProjectionMatrixTranspose\\\",\\\"gl_MultiTexCoord0\\\",\\\"gl_MultiTexCoord1\\\",\\\"gl_MultiTexCoord2\\\",\\\"gl_MultiTexCoord3\\\",\\\"gl_MultiTexCoord4\\\",\\\"gl_MultiTexCoord5\\\",\\\"gl_MultiTexCoord6\\\",\\\"gl_MultiTexCoord7\\\",\\\"gl_Normal\\\",\\\"gl_NormalMatrix\\\",\\\"gl_NormalScale\\\",\\\"gl_ObjectPlaneQ\\\",\\\"gl_ObjectPlaneR\\\",\\\"gl_ObjectPlaneS\\\",\\\"gl_ObjectPlaneT\\\",\\\"gl_Point\\\",\\\"gl_PointCoord\\\",\\\"gl_PointParameters\\\",\\\"gl_PointSize\\\",\\\"gl_Position\\\",\\\"gl_ProjectionMatrix\\\",\\\"gl_ProjectionMatrixInverse\\\",\\\"gl_ProjectionMatrixInverseTranspose\\\",\\\"gl_ProjectionMatrixTranspose\\\",\\\"gl_SecondaryColor\\\",\\\"gl_TexCoord\\\",\\\"gl_TextureEnvColor\\\",\\\"gl_TextureMatrix\\\",\\\"gl_TextureMatrixInverse\\\",\\\"gl_TextureMatrixInverseTranspose\\\",\\\"gl_TextureMatrixTranspose\\\",\\\"gl_Vertex\\\",\\\"greaterThan\\\",\\\"greaterThanEqual\\\",\\\"inversesqrt\\\",\\\"length\\\",\\\"lessThan\\\",\\\"lessThanEqual\\\",\\\"log\\\",\\\"log2\\\",\\\"matrixCompMult\\\",\\\"max\\\",\\\"min\\\",\\\"mix\\\",\\\"mod\\\",\\\"normalize\\\",\\\"not\\\",\\\"notEqual\\\",\\\"pow\\\",\\\"radians\\\",\\\"reflect\\\",\\\"refract\\\",\\\"sign\\\",\\\"sin\\\",\\\"smoothstep\\\",\\\"sqrt\\\",\\\"step\\\",\\\"tan\\\",\\\"texture2D\\\",\\\"texture2DLod\\\",\\\"texture2DProj\\\",\\\"texture2DProjLod\\\",\\\"textureCube\\\",\\\"textureCubeLod\\\",\\\"texture2DLodEXT\\\",\\\"texture2DProjLodEXT\\\",\\\"textureCubeLodEXT\\\",\\\"texture2DGradEXT\\\",\\\"texture2DProjGradEXT\\\",\\\"textureCubeGradEXT\\\"]},9458:function(t,e,r){var n=r(399);t.exports=n.slice().concat([\\\"layout\\\",\\\"centroid\\\",\\\"smooth\\\",\\\"case\\\",\\\"mat2x2\\\",\\\"mat2x3\\\",\\\"mat2x4\\\",\\\"mat3x2\\\",\\\"mat3x3\\\",\\\"mat3x4\\\",\\\"mat4x2\\\",\\\"mat4x3\\\",\\\"mat4x4\\\",\\\"uvec2\\\",\\\"uvec3\\\",\\\"uvec4\\\",\\\"samplerCubeShadow\\\",\\\"sampler2DArray\\\",\\\"sampler2DArrayShadow\\\",\\\"isampler2D\\\",\\\"isampler3D\\\",\\\"isamplerCube\\\",\\\"isampler2DArray\\\",\\\"usampler2D\\\",\\\"usampler3D\\\",\\\"usamplerCube\\\",\\\"usampler2DArray\\\",\\\"coherent\\\",\\\"restrict\\\",\\\"readonly\\\",\\\"writeonly\\\",\\\"resource\\\",\\\"atomic_uint\\\",\\\"noperspective\\\",\\\"patch\\\",\\\"sample\\\",\\\"subroutine\\\",\\\"common\\\",\\\"partition\\\",\\\"active\\\",\\\"filter\\\",\\\"image1D\\\",\\\"image2D\\\",\\\"image3D\\\",\\\"imageCube\\\",\\\"iimage1D\\\",\\\"iimage2D\\\",\\\"iimage3D\\\",\\\"iimageCube\\\",\\\"uimage1D\\\",\\\"uimage2D\\\",\\\"uimage3D\\\",\\\"uimageCube\\\",\\\"image1DArray\\\",\\\"image2DArray\\\",\\\"iimage1DArray\\\",\\\"iimage2DArray\\\",\\\"uimage1DArray\\\",\\\"uimage2DArray\\\",\\\"image1DShadow\\\",\\\"image2DShadow\\\",\\\"image1DArrayShadow\\\",\\\"image2DArrayShadow\\\",\\\"imageBuffer\\\",\\\"iimageBuffer\\\",\\\"uimageBuffer\\\",\\\"sampler1DArray\\\",\\\"sampler1DArrayShadow\\\",\\\"isampler1D\\\",\\\"isampler1DArray\\\",\\\"usampler1D\\\",\\\"usampler1DArray\\\",\\\"isampler2DRect\\\",\\\"usampler2DRect\\\",\\\"samplerBuffer\\\",\\\"isamplerBuffer\\\",\\\"usamplerBuffer\\\",\\\"sampler2DMS\\\",\\\"isampler2DMS\\\",\\\"usampler2DMS\\\",\\\"sampler2DMSArray\\\",\\\"isampler2DMSArray\\\",\\\"usampler2DMSArray\\\"])},399:function(t){t.exports=[\\\"precision\\\",\\\"highp\\\",\\\"mediump\\\",\\\"lowp\\\",\\\"attribute\\\",\\\"const\\\",\\\"uniform\\\",\\\"varying\\\",\\\"break\\\",\\\"continue\\\",\\\"do\\\",\\\"for\\\",\\\"while\\\",\\\"if\\\",\\\"else\\\",\\\"in\\\",\\\"out\\\",\\\"inout\\\",\\\"float\\\",\\\"int\\\",\\\"uint\\\",\\\"void\\\",\\\"bool\\\",\\\"true\\\",\\\"false\\\",\\\"discard\\\",\\\"return\\\",\\\"mat2\\\",\\\"mat3\\\",\\\"mat4\\\",\\\"vec2\\\",\\\"vec3\\\",\\\"vec4\\\",\\\"ivec2\\\",\\\"ivec3\\\",\\\"ivec4\\\",\\\"bvec2\\\",\\\"bvec3\\\",\\\"bvec4\\\",\\\"sampler1D\\\",\\\"sampler2D\\\",\\\"sampler3D\\\",\\\"samplerCube\\\",\\\"sampler1DShadow\\\",\\\"sampler2DShadow\\\",\\\"struct\\\",\\\"asm\\\",\\\"class\\\",\\\"union\\\",\\\"enum\\\",\\\"typedef\\\",\\\"template\\\",\\\"this\\\",\\\"packed\\\",\\\"goto\\\",\\\"switch\\\",\\\"default\\\",\\\"inline\\\",\\\"noinline\\\",\\\"volatile\\\",\\\"public\\\",\\\"static\\\",\\\"extern\\\",\\\"external\\\",\\\"interface\\\",\\\"long\\\",\\\"short\\\",\\\"double\\\",\\\"half\\\",\\\"fixed\\\",\\\"unsigned\\\",\\\"input\\\",\\\"output\\\",\\\"hvec2\\\",\\\"hvec3\\\",\\\"hvec4\\\",\\\"dvec2\\\",\\\"dvec3\\\",\\\"dvec4\\\",\\\"fvec2\\\",\\\"fvec3\\\",\\\"fvec4\\\",\\\"sampler2DRect\\\",\\\"sampler3DRect\\\",\\\"sampler2DRectShadow\\\",\\\"sizeof\\\",\\\"cast\\\",\\\"namespace\\\",\\\"using\\\"]},9746:function(t){t.exports=[\\\"<<=\\\",\\\">>=\\\",\\\"++\\\",\\\"--\\\",\\\"<<\\\",\\\">>\\\",\\\"<=\\\",\\\">=\\\",\\\"==\\\",\\\"!=\\\",\\\"&&\\\",\\\"||\\\",\\\"+=\\\",\\\"-=\\\",\\\"*=\\\",\\\"/=\\\",\\\"%=\\\",\\\"&=\\\",\\\"^^\\\",\\\"^=\\\",\\\"|=\\\",\\\"(\\\",\\\")\\\",\\\"[\\\",\\\"]\\\",\\\".\\\",\\\"!\\\",\\\"~\\\",\\\"*\\\",\\\"/\\\",\\\"%\\\",\\\"+\\\",\\\"-\\\",\\\"<\\\",\\\">\\\",\\\"&\\\",\\\"^\\\",\\\"|\\\",\\\"?\\\",\\\":\\\",\\\"=\\\",\\\",\\\",\\\";\\\",\\\"{\\\",\\\"}\\\"]},8096:function(t,e,r){var n=r(3193);t.exports=function(t,e){var r=n(e),i=[];return(i=i.concat(r(t))).concat(r(null))}},6832:function(t){t.exports=function(t){\\\"string\\\"==typeof t&&(t=[t]);for(var e=[].slice.call(arguments,1),r=[],n=0;n<t.length-1;n++)r.push(t[n],e[n]||\\\"\\\");return r.push(t[n]),r.join(\\\"\\\")}},5233:function(t,e,r){\\\"use strict\\\";var n=r(4846);t.exports=n&&function(){var t=!1;try{var e=Object.defineProperty({},\\\"passive\\\",{get:function(){t=!0}});window.addEventListener(\\\"test\\\",null,e),window.removeEventListener(\\\"test\\\",null,e)}catch(e){t=!1}return t}()},2183:function(t,e,r){\\\"use strict\\\";t.exports=function(t,e){var r=t.length;if(0===r)throw new Error(\\\"Must have at least d+1 points\\\");var i=t[0].length;if(r<=i)throw new Error(\\\"Must input at least d+1 points\\\");var o=t.slice(0,i+1),s=n.apply(void 0,o);if(0===s)throw new Error(\\\"Input not in general position\\\");for(var l=new Array(i+1),c=0;c<=i;++c)l[c]=c;s<0&&(l[0]=1,l[1]=0);var f=new a(l,new Array(i+1),!1),h=f.adjacent,p=new Array(i+2);for(c=0;c<=i;++c){for(var d=l.slice(),v=0;v<=i;++v)v===c&&(d[v]=-1);var g=d[0];d[0]=d[1],d[1]=g;var y=new a(d,new Array(i+1),!0);h[c]=y,p[c]=y}for(p[i+1]=f,c=0;c<=i;++c){d=h[c].vertices;var m=h[c].adjacent;for(v=0;v<=i;++v){var x=d[v];if(x<0)m[v]=f;else for(var b=0;b<=i;++b)h[b].vertices.indexOf(x)<0&&(m[v]=h[b])}}var _=new u(i,o,p),w=!!e;for(c=i+1;c<r;++c)_.insert(t[c],w);return _.boundary()};var n=r(417),i=r(8211).H;function a(t,e,r){this.vertices=t,this.adjacent=e,this.boundary=r,this.lastVisited=-1}function o(t,e,r){this.vertices=t,this.cell=e,this.index=r}function s(t,e){return i(t.vertices,e.vertices)}a.prototype.flip=function(){var t=this.vertices[0];this.vertices[0]=this.vertices[1],this.vertices[1]=t;var e=this.adjacent[0];this.adjacent[0]=this.adjacent[1],this.adjacent[1]=e};var l=[];function u(t,e,r){this.dimension=t,this.vertices=e,this.simplices=r,this.interior=r.filter((function(t){return!t.boundary})),this.tuple=new Array(t+1);for(var i=0;i<=t;++i)this.tuple[i]=this.vertices[i];var a,o=l[t];o||(o=l[t]=((a=n[t+1])||(a=n),function(t){return function(){var e=this.tuple;return t.apply(this,e)}}(a))),this.orient=o}var c=u.prototype;c.handleBoundaryDegeneracy=function(t,e){var r=this.dimension,n=this.vertices.length-1,i=this.tuple,a=this.vertices,o=[t];for(t.lastVisited=-n;o.length>0;)for(var s=(t=o.pop()).adjacent,l=0;l<=r;++l){var u=s[l];if(u.boundary&&!(u.lastVisited<=-n)){for(var c=u.vertices,f=0;f<=r;++f){var h=c[f];i[f]=h<0?e:a[h]}var p=this.orient();if(p>0)return u;u.lastVisited=-n,0===p&&o.push(u)}}return null},c.walk=function(t,e){var r=this.vertices.length-1,n=this.dimension,i=this.vertices,a=this.tuple,o=e?this.interior.length*Math.random()|0:this.interior.length-1,s=this.interior[o];t:for(;!s.boundary;){for(var l=s.vertices,u=s.adjacent,c=0;c<=n;++c)a[c]=i[l[c]];for(s.lastVisited=r,c=0;c<=n;++c){var f=u[c];if(!(f.lastVisited>=r)){var h=a[c];a[c]=t;var p=this.orient();if(a[c]=h,p<0){s=f;continue t}f.boundary?f.lastVisited=-r:f.lastVisited=r}}return}return s},c.addPeaks=function(t,e){var r=this.vertices.length-1,n=this.dimension,i=this.vertices,l=this.tuple,u=this.interior,c=this.simplices,f=[e];e.lastVisited=r,e.vertices[e.vertices.indexOf(-1)]=r,e.boundary=!1,u.push(e);for(var h=[];f.length>0;){var p=(e=f.pop()).vertices,d=e.adjacent,v=p.indexOf(r);if(!(v<0))for(var g=0;g<=n;++g)if(g!==v){var y=d[g];if(y.boundary&&!(y.lastVisited>=r)){var m=y.vertices;if(y.lastVisited!==-r){for(var x=0,b=0;b<=n;++b)m[b]<0?(x=b,l[b]=t):l[b]=i[m[b]];if(this.orient()>0){m[x]=r,y.boundary=!1,u.push(y),f.push(y),y.lastVisited=r;continue}y.lastVisited=-r}var _=y.adjacent,w=p.slice(),T=d.slice(),k=new a(w,T,!0);c.push(k);var A=_.indexOf(e);if(!(A<0))for(_[A]=k,T[v]=y,w[g]=-1,T[g]=e,d[g]=k,k.flip(),b=0;b<=n;++b){var M=w[b];if(!(M<0||M===r)){for(var S=new Array(n-1),E=0,L=0;L<=n;++L){var C=w[L];C<0||L===b||(S[E++]=C)}h.push(new o(S,k,b))}}}}}for(h.sort(s),g=0;g+1<h.length;g+=2){var P=h[g],O=h[g+1],I=P.index,D=O.index;I<0||D<0||(P.cell.adjacent[P.index]=O.cell,O.cell.adjacent[O.index]=P.cell)}},c.insert=function(t,e){var r=this.vertices;r.push(t);var n=this.walk(t,e);if(n){for(var i=this.dimension,a=this.tuple,o=0;o<=i;++o){var s=n.vertices[o];a[o]=s<0?t:r[s]}var l=this.orient(a);l<0||(0!==l||(n=this.handleBoundaryDegeneracy(n,t)))&&this.addPeaks(t,n)}},c.boundary=function(){for(var t=this.dimension,e=[],r=this.simplices,n=r.length,i=0;i<n;++i){var a=r[i];if(a.boundary){for(var o=new Array(t),s=a.vertices,l=0,u=0,c=0;c<=t;++c)s[c]>=0?o[l++]=s[c]:u=1&c;if(u===(1&t)){var f=o[0];o[0]=o[1],o[1]=f}e.push(o)}}return e}},9014:function(t,e,r){\\\"use strict\\\";var n=r(5070);function i(t,e,r,n,i){this.mid=t,this.left=e,this.right=r,this.leftPoints=n,this.rightPoints=i,this.count=(e?e.count:0)+(r?r.count:0)+n.length}t.exports=function(t){return t&&0!==t.length?new y(g(t)):new y(null)};var a=i.prototype;function o(t,e){t.mid=e.mid,t.left=e.left,t.right=e.right,t.leftPoints=e.leftPoints,t.rightPoints=e.rightPoints,t.count=e.count}function s(t,e){var r=g(e);t.mid=r.mid,t.left=r.left,t.right=r.right,t.leftPoints=r.leftPoints,t.rightPoints=r.rightPoints,t.count=r.count}function l(t,e){var r=t.intervals([]);r.push(e),s(t,r)}function u(t,e){var r=t.intervals([]),n=r.indexOf(e);return n<0?0:(r.splice(n,1),s(t,r),1)}function c(t,e,r){for(var n=0;n<t.length&&t[n][0]<=e;++n){var i=r(t[n]);if(i)return i}}function f(t,e,r){for(var n=t.length-1;n>=0&&t[n][1]>=e;--n){var i=r(t[n]);if(i)return i}}function h(t,e){for(var r=0;r<t.length;++r){var n=e(t[r]);if(n)return n}}function p(t,e){return t-e}function d(t,e){return t[0]-e[0]||t[1]-e[1]}function v(t,e){return t[1]-e[1]||t[0]-e[0]}function g(t){if(0===t.length)return null;for(var e=[],r=0;r<t.length;++r)e.push(t[r][0],t[r][1]);e.sort(p);var n=e[e.length>>1],a=[],o=[],s=[];for(r=0;r<t.length;++r){var l=t[r];l[1]<n?a.push(l):n<l[0]?o.push(l):s.push(l)}var u=s,c=s.slice();return u.sort(d),c.sort(v),new i(n,g(a),g(o),u,c)}function y(t){this.root=t}a.intervals=function(t){return t.push.apply(t,this.leftPoints),this.left&&this.left.intervals(t),this.right&&this.right.intervals(t),t},a.insert=function(t){var e=this.count-this.leftPoints.length;if(this.count+=1,t[1]<this.mid)this.left?4*(this.left.count+1)>3*(e+1)?l(this,t):this.left.insert(t):this.left=g([t]);else if(t[0]>this.mid)this.right?4*(this.right.count+1)>3*(e+1)?l(this,t):this.right.insert(t):this.right=g([t]);else{var r=n.ge(this.leftPoints,t,d),i=n.ge(this.rightPoints,t,v);this.leftPoints.splice(r,0,t),this.rightPoints.splice(i,0,t)}},a.remove=function(t){var e=this.count-this.leftPoints;if(t[1]<this.mid)return this.left?4*(this.right?this.right.count:0)>3*(e-1)?u(this,t):2===(s=this.left.remove(t))?(this.left=null,this.count-=1,1):(1===s&&(this.count-=1),s):0;if(t[0]>this.mid)return this.right?4*(this.left?this.left.count:0)>3*(e-1)?u(this,t):2===(s=this.right.remove(t))?(this.right=null,this.count-=1,1):(1===s&&(this.count-=1),s):0;if(1===this.count)return this.leftPoints[0]===t?2:0;if(1===this.leftPoints.length&&this.leftPoints[0]===t){if(this.left&&this.right){for(var r=this,i=this.left;i.right;)r=i,i=i.right;if(r===this)i.right=this.right;else{var a=this.left,s=this.right;r.count-=i.count,r.right=i.left,i.left=a,i.right=s}o(this,i),this.count=(this.left?this.left.count:0)+(this.right?this.right.count:0)+this.leftPoints.length}else this.left?o(this,this.left):o(this,this.right);return 1}for(a=n.ge(this.leftPoints,t,d);a<this.leftPoints.length&&this.leftPoints[a][0]===t[0];++a)if(this.leftPoints[a]===t)for(this.count-=1,this.leftPoints.splice(a,1),s=n.ge(this.rightPoints,t,v);s<this.rightPoints.length&&this.rightPoints[s][1]===t[1];++s)if(this.rightPoints[s]===t)return this.rightPoints.splice(s,1),1;return 0},a.queryPoint=function(t,e){return t<this.mid?this.left&&(r=this.left.queryPoint(t,e))?r:c(this.leftPoints,t,e):t>this.mid?this.right&&(r=this.right.queryPoint(t,e))?r:f(this.rightPoints,t,e):h(this.leftPoints,e);var r},a.queryInterval=function(t,e,r){var n;return t<this.mid&&this.left&&(n=this.left.queryInterval(t,e,r))||e>this.mid&&this.right&&(n=this.right.queryInterval(t,e,r))?n:e<this.mid?c(this.leftPoints,e,r):t>this.mid?f(this.rightPoints,t,r):h(this.leftPoints,r)};var m=y.prototype;m.insert=function(t){this.root?this.root.insert(t):this.root=new i(t[0],null,null,[t],[t])},m.remove=function(t){if(this.root){var e=this.root.remove(t);return 2===e&&(this.root=null),0!==e}return!1},m.queryPoint=function(t,e){if(this.root)return this.root.queryPoint(t,e)},m.queryInterval=function(t,e,r){if(t<=e&&this.root)return this.root.queryInterval(t,e,r)},Object.defineProperty(m,\\\"count\\\",{get:function(){return this.root?this.root.count:0}}),Object.defineProperty(m,\\\"intervals\\\",{get:function(){return this.root?this.root.intervals([]):[]}})},9560:function(t){\\\"use strict\\\";t.exports=function(t){for(var e=new Array(t),r=0;r<t;++r)e[r]=r;return e}},4846:function(t){t.exports=!0},4780:function(t){function e(t){return!!t.constructor&&\\\"function\\\"==typeof t.constructor.isBuffer&&t.constructor.isBuffer(t)}t.exports=function(t){return null!=t&&(e(t)||function(t){return\\\"function\\\"==typeof t.readFloatLE&&\\\"function\\\"==typeof t.slice&&e(t.slice(0,0))}(t)||!!t._isBuffer)}},3596:function(t){\\\"use strict\\\";t.exports=function(t){for(var e,r=t.length,n=0;n<r;n++)if(((e=t.charCodeAt(n))<9||e>13)&&32!==e&&133!==e&&160!==e&&5760!==e&&6158!==e&&(e<8192||e>8205)&&8232!==e&&8233!==e&&8239!==e&&8287!==e&&8288!==e&&12288!==e&&65279!==e)return!1;return!0}},3578:function(t){t.exports=function(t,e,r){return t*(1-r)+e*r}},7191:function(t,e,r){var n=r(4690),i=r(9823),a=r(7332),o=r(7787),s=r(7437),l=r(2142),u={length:r(4693),normalize:r(899),dot:r(9305),cross:r(903)},c=i(),f=i(),h=[0,0,0,0],p=[[0,0,0],[0,0,0],[0,0,0]],d=[0,0,0];function v(t,e,r,n,i){t[0]=e[0]*n+r[0]*i,t[1]=e[1]*n+r[1]*i,t[2]=e[2]*n+r[2]*i}t.exports=function(t,e,r,i,g,y){if(e||(e=[0,0,0]),r||(r=[0,0,0]),i||(i=[0,0,0]),g||(g=[0,0,0,1]),y||(y=[0,0,0,1]),!n(c,t))return!1;if(a(f,c),f[3]=0,f[7]=0,f[11]=0,f[15]=1,Math.abs(o(f)<1e-8))return!1;var m,x,b,_,w,T,k,A=c[3],M=c[7],S=c[11],E=c[12],L=c[13],C=c[14],P=c[15];if(0!==A||0!==M||0!==S){if(h[0]=A,h[1]=M,h[2]=S,h[3]=P,!s(f,f))return!1;l(f,f),m=g,b=f,_=(x=h)[0],w=x[1],T=x[2],k=x[3],m[0]=b[0]*_+b[4]*w+b[8]*T+b[12]*k,m[1]=b[1]*_+b[5]*w+b[9]*T+b[13]*k,m[2]=b[2]*_+b[6]*w+b[10]*T+b[14]*k,m[3]=b[3]*_+b[7]*w+b[11]*T+b[15]*k}else g[0]=g[1]=g[2]=0,g[3]=1;if(e[0]=E,e[1]=L,e[2]=C,function(t,e){t[0][0]=e[0],t[0][1]=e[1],t[0][2]=e[2],t[1][0]=e[4],t[1][1]=e[5],t[1][2]=e[6],t[2][0]=e[8],t[2][1]=e[9],t[2][2]=e[10]}(p,c),r[0]=u.length(p[0]),u.normalize(p[0],p[0]),i[0]=u.dot(p[0],p[1]),v(p[1],p[1],p[0],1,-i[0]),r[1]=u.length(p[1]),u.normalize(p[1],p[1]),i[0]/=r[1],i[1]=u.dot(p[0],p[2]),v(p[2],p[2],p[0],1,-i[1]),i[2]=u.dot(p[1],p[2]),v(p[2],p[2],p[1],1,-i[2]),r[2]=u.length(p[2]),u.normalize(p[2],p[2]),i[1]/=r[2],i[2]/=r[2],u.cross(d,p[1],p[2]),u.dot(p[0],d)<0)for(var O=0;O<3;O++)r[O]*=-1,p[O][0]*=-1,p[O][1]*=-1,p[O][2]*=-1;return y[0]=.5*Math.sqrt(Math.max(1+p[0][0]-p[1][1]-p[2][2],0)),y[1]=.5*Math.sqrt(Math.max(1-p[0][0]+p[1][1]-p[2][2],0)),y[2]=.5*Math.sqrt(Math.max(1-p[0][0]-p[1][1]+p[2][2],0)),y[3]=.5*Math.sqrt(Math.max(1+p[0][0]+p[1][1]+p[2][2],0)),p[2][1]>p[1][2]&&(y[0]=-y[0]),p[0][2]>p[2][0]&&(y[1]=-y[1]),p[1][0]>p[0][1]&&(y[2]=-y[2]),!0}},4690:function(t){t.exports=function(t,e){var r=e[15];if(0===r)return!1;for(var n=1/r,i=0;i<16;i++)t[i]=e[i]*n;return!0}},7649:function(t,e,r){var n=r(1868),i=r(1102),a=r(7191),o=r(7787),s=r(1116),l=f(),u=f(),c=f();function f(){return{translate:h(),scale:h(1),skew:h(),perspective:[0,0,0,1],quaternion:[0,0,0,1]}}function h(t){return[t||0,t||0,t||0]}t.exports=function(t,e,r,f){if(0===o(e)||0===o(r))return!1;var h=a(e,l.translate,l.scale,l.skew,l.perspective,l.quaternion),p=a(r,u.translate,u.scale,u.skew,u.perspective,u.quaternion);return!(!h||!p||(n(c.translate,l.translate,u.translate,f),n(c.skew,l.skew,u.skew,f),n(c.scale,l.scale,u.scale,f),n(c.perspective,l.perspective,u.perspective,f),s(c.quaternion,l.quaternion,u.quaternion,f),i(t,c.translate,c.scale,c.skew,c.perspective,c.quaternion),0))}},1102:function(t,e,r){var n={identity:r(9947),translate:r(998),multiply:r(104),create:r(9823),scale:r(3668),fromRotationTranslation:r(7280)},i=(n.create(),n.create());t.exports=function(t,e,r,a,o,s){return n.identity(t),n.fromRotationTranslation(t,s,e),t[3]=o[0],t[7]=o[1],t[11]=o[2],t[15]=o[3],n.identity(i),0!==a[2]&&(i[9]=a[2],n.multiply(t,t,i)),0!==a[1]&&(i[9]=0,i[8]=a[1],n.multiply(t,t,i)),0!==a[0]&&(i[8]=0,i[4]=a[0],n.multiply(t,t,i)),n.scale(t,t,r),t}},9298:function(t,e,r){\\\"use strict\\\";var n=r(5070),i=r(7649),a=r(7437),o=r(6109),s=r(7115),l=r(5240),u=r(3012),c=r(998),f=(r(3668),r(899)),h=[0,0,0];function p(t){this._components=t.slice(),this._time=[0],this.prevMatrix=t.slice(),this.nextMatrix=t.slice(),this.computedMatrix=t.slice(),this.computedInverse=t.slice(),this.computedEye=[0,0,0],this.computedUp=[0,0,0],this.computedCenter=[0,0,0],this.computedRadius=[0],this._limits=[-1/0,1/0]}t.exports=function(t){return new p((t=t||{}).matrix||[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1])};var d=p.prototype;d.recalcMatrix=function(t){var e=this._time,r=n.le(e,t),o=this.computedMatrix;if(!(r<0)){var s=this._components;if(r===e.length-1)for(var l=16*r,u=0;u<16;++u)o[u]=s[l++];else{var c=e[r+1]-e[r],h=(l=16*r,this.prevMatrix),p=!0;for(u=0;u<16;++u)h[u]=s[l++];var d=this.nextMatrix;for(u=0;u<16;++u)d[u]=s[l++],p=p&&h[u]===d[u];if(c<1e-6||p)for(u=0;u<16;++u)o[u]=h[u];else i(o,h,d,(t-e[r])/c)}var v=this.computedUp;v[0]=o[1],v[1]=o[5],v[2]=o[9],f(v,v);var g=this.computedInverse;a(g,o);var y=this.computedEye,m=g[15];y[0]=g[12]/m,y[1]=g[13]/m,y[2]=g[14]/m;var x=this.computedCenter,b=Math.exp(this.computedRadius[0]);for(u=0;u<3;++u)x[u]=y[u]-o[2+4*u]*b}},d.idle=function(t){if(!(t<this.lastT())){for(var e=this._components,r=e.length-16,n=0;n<16;++n)e.push(e[r++]);this._time.push(t)}},d.flush=function(t){var e=n.gt(this._time,t)-2;e<0||(this._time.splice(0,e),this._components.splice(0,16*e))},d.lastT=function(){return this._time[this._time.length-1]},d.lookAt=function(t,e,r,n){this.recalcMatrix(t),e=e||this.computedEye,r=r||h,n=n||this.computedUp,this.setMatrix(t,u(this.computedMatrix,e,r,n));for(var i=0,a=0;a<3;++a)i+=Math.pow(r[a]-e[a],2);i=Math.log(Math.sqrt(i)),this.computedRadius[0]=i},d.rotate=function(t,e,r,n){this.recalcMatrix(t);var i=this.computedInverse;e&&s(i,i,e),r&&o(i,i,r),n&&l(i,i,n),this.setMatrix(t,a(this.computedMatrix,i))};var v=[0,0,0];d.pan=function(t,e,r,n){v[0]=-(e||0),v[1]=-(r||0),v[2]=-(n||0),this.recalcMatrix(t);var i=this.computedInverse;c(i,i,v),this.setMatrix(t,a(i,i))},d.translate=function(t,e,r,n){v[0]=e||0,v[1]=r||0,v[2]=n||0,this.recalcMatrix(t);var i=this.computedMatrix;c(i,i,v),this.setMatrix(t,i)},d.setMatrix=function(t,e){if(!(t<this.lastT())){this._time.push(t);for(var r=0;r<16;++r)this._components.push(e[r])}},d.setDistance=function(t,e){this.computedRadius[0]=e},d.setDistanceLimits=function(t,e){var r=this._limits;r[0]=t,r[1]=e},d.getDistanceLimits=function(t){var e=this._limits;return t?(t[0]=e[0],t[1]=e[1],t):e}},3266:function(t,e,r){\\\"use strict\\\";t.exports=function(t){var e=t.length;if(e<3){for(var r=new Array(e),i=0;i<e;++i)r[i]=i;return 2===e&&t[0][0]===t[1][0]&&t[0][1]===t[1][1]?[0]:r}var a=new Array(e);for(i=0;i<e;++i)a[i]=i;a.sort((function(e,r){return t[e][0]-t[r][0]||t[e][1]-t[r][1]}));var o=[a[0],a[1]],s=[a[0],a[1]];for(i=2;i<e;++i){for(var l=a[i],u=t[l],c=o.length;c>1&&n(t[o[c-2]],t[o[c-1]],u)<=0;)c-=1,o.pop();for(o.push(l),c=s.length;c>1&&n(t[s[c-2]],t[s[c-1]],u)>=0;)c-=1,s.pop();s.push(l)}r=new Array(s.length+o.length-2);for(var f=0,h=(i=0,o.length);i<h;++i)r[f++]=o[i];for(var p=s.length-2;p>0;--p)r[f++]=s[p];return r};var n=r(417)[3]},6145:function(t,e,r){\\\"use strict\\\";t.exports=function(t,e){e||(e=t,t=window);var r=0,i=0,a=0,o={shift:!1,alt:!1,control:!1,meta:!1},s=!1;function l(t){var e=!1;return\\\"altKey\\\"in t&&(e=e||t.altKey!==o.alt,o.alt=!!t.altKey),\\\"shiftKey\\\"in t&&(e=e||t.shiftKey!==o.shift,o.shift=!!t.shiftKey),\\\"ctrlKey\\\"in t&&(e=e||t.ctrlKey!==o.control,o.control=!!t.ctrlKey),\\\"metaKey\\\"in t&&(e=e||t.metaKey!==o.meta,o.meta=!!t.metaKey),e}function u(t,s){var u=n.x(s),c=n.y(s);\\\"buttons\\\"in s&&(t=0|s.buttons),(t!==r||u!==i||c!==a||l(s))&&(r=0|t,i=u||0,a=c||0,e&&e(r,i,a,o))}function c(t){u(0,t)}function f(){(r||i||a||o.shift||o.alt||o.meta||o.control)&&(i=a=0,r=0,o.shift=o.alt=o.control=o.meta=!1,e&&e(0,0,0,o))}function h(t){l(t)&&e&&e(r,i,a,o)}function p(t){0===n.buttons(t)?u(0,t):u(r,t)}function d(t){u(r|n.buttons(t),t)}function v(t){u(r&~n.buttons(t),t)}function g(){s||(s=!0,t.addEventListener(\\\"mousemove\\\",p),t.addEventListener(\\\"mousedown\\\",d),t.addEventListener(\\\"mouseup\\\",v),t.addEventListener(\\\"mouseleave\\\",c),t.addEventListener(\\\"mouseenter\\\",c),t.addEventListener(\\\"mouseout\\\",c),t.addEventListener(\\\"mouseover\\\",c),t.addEventListener(\\\"blur\\\",f),t.addEventListener(\\\"keyup\\\",h),t.addEventListener(\\\"keydown\\\",h),t.addEventListener(\\\"keypress\\\",h),t!==window&&(window.addEventListener(\\\"blur\\\",f),window.addEventListener(\\\"keyup\\\",h),window.addEventListener(\\\"keydown\\\",h),window.addEventListener(\\\"keypress\\\",h)))}g();var y={element:t};return Object.defineProperties(y,{enabled:{get:function(){return s},set:function(e){e?g():s&&(s=!1,t.removeEventListener(\\\"mousemove\\\",p),t.removeEventListener(\\\"mousedown\\\",d),t.removeEventListener(\\\"mouseup\\\",v),t.removeEventListener(\\\"mouseleave\\\",c),t.removeEventListener(\\\"mouseenter\\\",c),t.removeEventListener(\\\"mouseout\\\",c),t.removeEventListener(\\\"mouseover\\\",c),t.removeEventListener(\\\"blur\\\",f),t.removeEventListener(\\\"keyup\\\",h),t.removeEventListener(\\\"keydown\\\",h),t.removeEventListener(\\\"keypress\\\",h),t!==window&&(window.removeEventListener(\\\"blur\\\",f),window.removeEventListener(\\\"keyup\\\",h),window.removeEventListener(\\\"keydown\\\",h),window.removeEventListener(\\\"keypress\\\",h)))},enumerable:!0},buttons:{get:function(){return r},enumerable:!0},x:{get:function(){return i},enumerable:!0},y:{get:function(){return a},enumerable:!0},mods:{get:function(){return o},enumerable:!0}}),y};var n=r(4110)},2565:function(t){var e={left:0,top:0};t.exports=function(t,r,n){r=r||t.currentTarget||t.srcElement,Array.isArray(n)||(n=[0,0]);var i,a=t.clientX||0,o=t.clientY||0,s=(i=r)===window||i===document||i===document.body?e:i.getBoundingClientRect();return n[0]=a-s.left,n[1]=o-s.top,n}},4110:function(t,e){\\\"use strict\\\";function r(t){return t.target||t.srcElement||window}e.buttons=function(t){if(\\\"object\\\"==typeof t){if(\\\"buttons\\\"in t)return t.buttons;if(\\\"which\\\"in t){if(2===(e=t.which))return 4;if(3===e)return 2;if(e>0)return 1<<e-1}else if(\\\"button\\\"in t){var e;if(1===(e=t.button))return 4;if(2===e)return 2;if(e>=0)return 1<<e}}return 0},e.element=r,e.x=function(t){if(\\\"object\\\"==typeof t){if(\\\"offsetX\\\"in t)return t.offsetX;var e=r(t).getBoundingClientRect();return t.clientX-e.left}return 0},e.y=function(t){if(\\\"object\\\"==typeof t){if(\\\"offsetY\\\"in t)return t.offsetY;var e=r(t).getBoundingClientRect();return t.clientY-e.top}return 0}},6475:function(t,e,r){\\\"use strict\\\";var n=r(14);t.exports=function(t,e,r){\\\"function\\\"==typeof t&&(r=!!e,e=t,t=window);var i=n(\\\"ex\\\",t),a=function(t){r&&t.preventDefault();var n=t.deltaX||0,a=t.deltaY||0,o=t.deltaZ||0,s=1;switch(t.deltaMode){case 1:s=i;break;case 2:s=window.innerHeight}if(a*=s,o*=s,(n*=s)||a||o)return e(n,a,o,t)};return t.addEventListener(\\\"wheel\\\",a),a}},9284:function(t,e,r){\\\"use strict\\\";var n=r(5306);t.exports=function(t){function e(t){throw new Error(\\\"ndarray-extract-contour: \\\"+t)}\\\"object\\\"!=typeof t&&e(\\\"Must specify arguments\\\");var r=t.order;Array.isArray(r)||e(\\\"Must specify order\\\");var a=t.arrayArguments||1;a<1&&e(\\\"Must have at least one array argument\\\"),(t.scalarArguments||0)<0&&e(\\\"Scalar arg count must be > 0\\\"),\\\"function\\\"!=typeof t.vertex&&e(\\\"Must specify vertex creation function\\\"),\\\"function\\\"!=typeof t.cell&&e(\\\"Must specify cell creation function\\\"),\\\"function\\\"!=typeof t.phase&&e(\\\"Must specify phase function\\\");for(var o=t.getters||[],s=new Array(a),l=0;l<a;++l)o.indexOf(l)>=0?s[l]=!0:s[l]=!1;return function(t,e,r,a,o,s){var l=[s,o].join(\\\",\\\");return(0,i[l])(t,e,r,n.mallocUint32,n.freeUint32)}(t.vertex,t.cell,t.phase,0,r,s)};var i={\\\"false,0,1\\\":function(t,e,r,n,i){return function(a,o,s,l){var u,c=0|a.shape[0],f=0|a.shape[1],h=a.data,p=0|a.offset,d=0|a.stride[0],v=0|a.stride[1],g=p,y=0|-d,m=0,x=0|-v,b=0,_=-d-v|0,w=0,T=0|d,k=v-d*c|0,A=0,M=0,S=0,E=2*c|0,L=n(E),C=n(E),P=0,O=0,I=-1,D=-1,z=0,R=0|-c,F=0|c,B=0,N=-c-1|0,j=c-1|0,U=0,V=0,H=0;for(A=0;A<c;++A)L[P++]=r(h[g],o,s,l),g+=T;if(g+=k,f>0){if(M=1,L[P++]=r(h[g],o,s,l),g+=T,c>0)for(A=1,u=h[g],O=L[P]=r(u,o,s,l),z=L[P+I],B=L[P+R],U=L[P+N],O===z&&O===B&&O===U||(m=h[g+y],b=h[g+x],w=h[g+_],t(A,M,u,m,b,w,O,z,B,U,o,s,l),V=C[P]=S++),P+=1,g+=T,A=2;A<c;++A)u=h[g],O=L[P]=r(u,o,s,l),z=L[P+I],B=L[P+R],U=L[P+N],O===z&&O===B&&O===U||(m=h[g+y],b=h[g+x],w=h[g+_],t(A,M,u,m,b,w,O,z,B,U,o,s,l),V=C[P]=S++,U!==z&&e(C[P+I],V,w,m,U,z,o,s,l)),P+=1,g+=T;for(g+=k,P=0,H=I,I=D,D=H,H=R,R=F,F=H,H=N,N=j,j=H,M=2;M<f;++M){if(L[P++]=r(h[g],o,s,l),g+=T,c>0)for(A=1,u=h[g],O=L[P]=r(u,o,s,l),z=L[P+I],B=L[P+R],U=L[P+N],O===z&&O===B&&O===U||(m=h[g+y],b=h[g+x],w=h[g+_],t(A,M,u,m,b,w,O,z,B,U,o,s,l),V=C[P]=S++,U!==B&&e(C[P+R],V,b,w,B,U,o,s,l)),P+=1,g+=T,A=2;A<c;++A)u=h[g],O=L[P]=r(u,o,s,l),z=L[P+I],B=L[P+R],U=L[P+N],O===z&&O===B&&O===U||(m=h[g+y],b=h[g+x],w=h[g+_],t(A,M,u,m,b,w,O,z,B,U,o,s,l),V=C[P]=S++,U!==B&&e(C[P+R],V,b,w,B,U,o,s,l),U!==z&&e(C[P+I],V,w,m,U,z,o,s,l)),P+=1,g+=T;1&M&&(P=0),H=I,I=D,D=H,H=R,R=F,F=H,H=N,N=j,j=H,g+=k}}i(C),i(L)}},\\\"false,1,0\\\":function(t,e,r,n,i){return function(a,o,s,l){var u,c=0|a.shape[0],f=0|a.shape[1],h=a.data,p=0|a.offset,d=0|a.stride[0],v=0|a.stride[1],g=p,y=0|-d,m=0,x=0|-v,b=0,_=-d-v|0,w=0,T=0|v,k=d-v*f|0,A=0,M=0,S=0,E=2*f|0,L=n(E),C=n(E),P=0,O=0,I=-1,D=-1,z=0,R=0|-f,F=0|f,B=0,N=-f-1|0,j=f-1|0,U=0,V=0,H=0;for(M=0;M<f;++M)L[P++]=r(h[g],o,s,l),g+=T;if(g+=k,c>0){if(A=1,L[P++]=r(h[g],o,s,l),g+=T,f>0)for(M=1,u=h[g],O=L[P]=r(u,o,s,l),B=L[P+R],z=L[P+I],U=L[P+N],O===B&&O===z&&O===U||(m=h[g+y],b=h[g+x],w=h[g+_],t(A,M,u,m,b,w,O,B,z,U,o,s,l),V=C[P]=S++),P+=1,g+=T,M=2;M<f;++M)u=h[g],O=L[P]=r(u,o,s,l),B=L[P+R],z=L[P+I],U=L[P+N],O===B&&O===z&&O===U||(m=h[g+y],b=h[g+x],w=h[g+_],t(A,M,u,m,b,w,O,B,z,U,o,s,l),V=C[P]=S++,U!==z&&e(C[P+I],V,b,w,z,U,o,s,l)),P+=1,g+=T;for(g+=k,P=0,H=R,R=F,F=H,H=I,I=D,D=H,H=N,N=j,j=H,A=2;A<c;++A){if(L[P++]=r(h[g],o,s,l),g+=T,f>0)for(M=1,u=h[g],O=L[P]=r(u,o,s,l),B=L[P+R],z=L[P+I],U=L[P+N],O===B&&O===z&&O===U||(m=h[g+y],b=h[g+x],w=h[g+_],t(A,M,u,m,b,w,O,B,z,U,o,s,l),V=C[P]=S++,U!==B&&e(C[P+R],V,w,m,U,B,o,s,l)),P+=1,g+=T,M=2;M<f;++M)u=h[g],O=L[P]=r(u,o,s,l),B=L[P+R],z=L[P+I],U=L[P+N],O===B&&O===z&&O===U||(m=h[g+y],b=h[g+x],w=h[g+_],t(A,M,u,m,b,w,O,B,z,U,o,s,l),V=C[P]=S++,U!==z&&e(C[P+I],V,b,w,z,U,o,s,l),U!==B&&e(C[P+R],V,w,m,U,B,o,s,l)),P+=1,g+=T;1&A&&(P=0),H=R,R=F,F=H,H=I,I=D,D=H,H=N,N=j,j=H,g+=k}}i(C),i(L)}}}},9144:function(t,e,r){\\\"use strict\\\";var n=r(3094),i={zero:function(t,e,r,n){var i=t[0];n|=0;var a=0,o=r[0];for(a=0;a<i;++a)e[n]=0,n+=o},fdTemplate1:function(t,e,r,n,i,a,o){var s=t[0],l=r[0],u=-1*l,c=l;n|=0,o|=0;var f=0,h=l,p=a[0];for(f=0;f<s;++f)i[o]=.5*(e[n+u]-e[n+c]),n+=h,o+=p},fdTemplate2:function(t,e,r,n,i,a,o,s,l,u){var c=t[0],f=t[1],h=r[0],p=r[1],d=a[0],v=a[1],g=l[0],y=l[1],m=-1*h,x=h,b=-1*p,_=p;n|=0,o|=0,u|=0;var w=0,T=0,k=p,A=h-f*p,M=v,S=d-f*v,E=y,L=g-f*y;for(T=0;T<c;++T){for(w=0;w<f;++w)i[o]=.5*(e[n+m]-e[n+x]),s[u]=.5*(e[n+b]-e[n+_]),n+=k,o+=M,u+=E;n+=A,o+=S,u+=L}}},a={cdiff:function(t){var e={};return function(r,n,i){var a=r.dtype,o=r.order,s=n.dtype,l=n.order,u=i.dtype,c=i.order,f=[a,o.join(),s,l.join(),u,c.join()].join(),h=e[f];return h||(e[f]=h=t([a,o,s,l,u,c])),h(r.shape.slice(0),r.data,r.stride,0|r.offset,n.data,n.stride,0|n.offset,i.data,i.stride,0|i.offset)}},zero:function(t){var e={};return function(r){var n=r.dtype,i=r.order,a=[n,i.join()].join(),o=e[a];return o||(e[a]=o=t([n,i])),o(r.shape.slice(0),r.data,r.stride,0|r.offset)}},fdTemplate1:function(t){var e={};return function(r,n){var i=r.dtype,a=r.order,o=n.dtype,s=n.order,l=[i,a.join(),o,s.join()].join(),u=e[l];return u||(e[l]=u=t([i,a,o,s])),u(r.shape.slice(0),r.data,r.stride,0|r.offset,n.data,n.stride,0|n.offset)}},fdTemplate2:function(t){var e={};return function(r,n,i){var a=r.dtype,o=r.order,s=n.dtype,l=n.order,u=i.dtype,c=i.order,f=[a,o.join(),s,l.join(),u,c.join()].join(),h=e[f];return h||(e[f]=h=t([a,o,s,l,u,c])),h(r.shape.slice(0),r.data,r.stride,0|r.offset,n.data,n.stride,0|n.offset,i.data,i.stride,0|i.offset)}}};function o(t){return(0,a[t.funcName])(s.bind(void 0,t))}function s(t){return i[t.funcName]}function l(t){return o({funcName:t.funcName})}var u={},c={},f=l({funcName:\\\"cdiff\\\"}),h=l({funcName:\\\"zero\\\"});function p(t){return t in u?u[t]:u[t]=l({funcName:\\\"fdTemplate\\\"+t})}function d(t,e,r,n){return function(t,i){var a=i.shape.slice();return a[0]>2&&a[1]>2&&n(i.pick(-1,-1).lo(1,1).hi(a[0]-2,a[1]-2),t.pick(-1,-1,0).lo(1,1).hi(a[0]-2,a[1]-2),t.pick(-1,-1,1).lo(1,1).hi(a[0]-2,a[1]-2)),a[1]>2&&(r(i.pick(0,-1).lo(1).hi(a[1]-2),t.pick(0,-1,1).lo(1).hi(a[1]-2)),e(t.pick(0,-1,0).lo(1).hi(a[1]-2))),a[1]>2&&(r(i.pick(a[0]-1,-1).lo(1).hi(a[1]-2),t.pick(a[0]-1,-1,1).lo(1).hi(a[1]-2)),e(t.pick(a[0]-1,-1,0).lo(1).hi(a[1]-2))),a[0]>2&&(r(i.pick(-1,0).lo(1).hi(a[0]-2),t.pick(-1,0,0).lo(1).hi(a[0]-2)),e(t.pick(-1,0,1).lo(1).hi(a[0]-2))),a[0]>2&&(r(i.pick(-1,a[1]-1).lo(1).hi(a[0]-2),t.pick(-1,a[1]-1,0).lo(1).hi(a[0]-2)),e(t.pick(-1,a[1]-1,1).lo(1).hi(a[0]-2))),t.set(0,0,0,0),t.set(0,0,1,0),t.set(a[0]-1,0,0,0),t.set(a[0]-1,0,1,0),t.set(0,a[1]-1,0,0),t.set(0,a[1]-1,1,0),t.set(a[0]-1,a[1]-1,0,0),t.set(a[0]-1,a[1]-1,1,0),t}}t.exports=function(t,e,r){return Array.isArray(r)||(r=n(e.dimension,\\\"string\\\"==typeof r?r:\\\"clamp\\\")),0===e.size?t:0===e.dimension?(t.set(0),t):function(t){var e=t.join();if(a=c[e])return a;for(var r=t.length,n=[f,h],i=1;i<=r;++i)n.push(p(i));var a=d.apply(void 0,n);return c[e]=a,a}(r)(t,e)}},3581:function(t){\\\"use strict\\\";function e(t,e){var r=Math.floor(e),n=e-r,i=0<=r&&r<t.shape[0],a=0<=r+1&&r+1<t.shape[0];return(1-n)*(i?+t.get(r):0)+n*(a?+t.get(r+1):0)}function r(t,e,r){var n=Math.floor(e),i=e-n,a=0<=n&&n<t.shape[0],o=0<=n+1&&n+1<t.shape[0],s=Math.floor(r),l=r-s,u=0<=s&&s<t.shape[1],c=0<=s+1&&s+1<t.shape[1],f=a&&u?t.get(n,s):0,h=a&&c?t.get(n,s+1):0;return(1-l)*((1-i)*f+i*(o&&u?t.get(n+1,s):0))+l*((1-i)*h+i*(o&&c?t.get(n+1,s+1):0))}function n(t,e,r,n){var i=Math.floor(e),a=e-i,o=0<=i&&i<t.shape[0],s=0<=i+1&&i+1<t.shape[0],l=Math.floor(r),u=r-l,c=0<=l&&l<t.shape[1],f=0<=l+1&&l+1<t.shape[1],h=Math.floor(n),p=n-h,d=0<=h&&h<t.shape[2],v=0<=h+1&&h+1<t.shape[2],g=o&&c&&d?t.get(i,l,h):0,y=o&&f&&d?t.get(i,l+1,h):0,m=s&&c&&d?t.get(i+1,l,h):0,x=s&&f&&d?t.get(i+1,l+1,h):0,b=o&&c&&v?t.get(i,l,h+1):0,_=o&&f&&v?t.get(i,l+1,h+1):0;return(1-p)*((1-u)*((1-a)*g+a*m)+u*((1-a)*y+a*x))+p*((1-u)*((1-a)*b+a*(s&&c&&v?t.get(i+1,l,h+1):0))+u*((1-a)*_+a*(s&&f&&v?t.get(i+1,l+1,h+1):0)))}function i(t){var e,r,n=0|t.shape.length,i=new Array(n),a=new Array(n),o=new Array(n),s=new Array(n);for(e=0;e<n;++e)r=+arguments[e+1],i[e]=Math.floor(r),a[e]=r-i[e],o[e]=0<=i[e]&&i[e]<t.shape[e],s[e]=0<=i[e]+1&&i[e]+1<t.shape[e];var l,u,c,f=0;t:for(e=0;e<1<<n;++e){for(u=1,c=t.offset,l=0;l<n;++l)if(e&1<<l){if(!s[l])continue t;u*=a[l],c+=t.stride[l]*(i[l]+1)}else{if(!o[l])continue t;u*=1-a[l],c+=t.stride[l]*i[l]}f+=u*t.data[c]}return f}t.exports=function(t,a,o,s){switch(t.shape.length){case 0:return 0;case 1:return e(t,a);case 2:return r(t,a,o);case 3:return n(t,a,o,s);default:return i.apply(void 0,arguments)}},t.exports.d1=e,t.exports.d2=r,t.exports.d3=n},7498:function(t,e){\\\"use strict\\\";var r={\\\"float64,2,1,0\\\":function(){return function(t,e,r,n,i){var a=t[0],o=t[1],s=t[2],l=r[0],u=r[1],c=r[2];n|=0;var f=0,h=0,p=0,d=c,v=u-s*c,g=l-o*u;for(p=0;p<a;++p){for(h=0;h<o;++h){for(f=0;f<s;++f)e[n]/=i,n+=d;n+=v}n+=g}}},\\\"uint8,2,0,1,float64,2,1,0\\\":function(){return function(t,e,r,n,i,a,o,s){for(var l=t[0],u=t[1],c=t[2],f=r[0],h=r[1],p=r[2],d=a[0],v=a[1],g=a[2],y=n|=0,m=o|=0,x=0|t[0];x>0;){x<64?(l=x,x=0):(l=64,x-=64);for(var b=0|t[1];b>0;){b<64?(u=b,b=0):(u=64,b-=64),n=y+x*f+b*h,o=m+x*d+b*v;var _=0,w=0,T=0,k=p,A=f-c*p,M=h-l*f,S=g,E=d-c*g,L=v-l*d;for(T=0;T<u;++T){for(w=0;w<l;++w){for(_=0;_<c;++_)e[n]=i[o]*s,n+=k,o+=S;n+=A,o+=E}n+=M,o+=L}}}}},\\\"float32,1,0,float32,1,0\\\":function(){return function(t,e,r,n,i,a,o){var s=t[0],l=t[1],u=r[0],c=r[1],f=a[0],h=a[1];n|=0,o|=0;var p=0,d=0,v=c,g=u-l*c,y=h,m=f-l*h;for(d=0;d<s;++d){for(p=0;p<l;++p)e[n]=i[o],n+=v,o+=y;n+=g,o+=m}}},\\\"float32,1,0,float32,0,1\\\":function(){return function(t,e,r,n,i,a,o){for(var s=t[0],l=t[1],u=r[0],c=r[1],f=a[0],h=a[1],p=n|=0,d=o|=0,v=0|t[1];v>0;){v<64?(l=v,v=0):(l=64,v-=64);for(var g=0|t[0];g>0;){g<64?(s=g,g=0):(s=64,g-=64),n=p+v*c+g*u,o=d+v*h+g*f;var y=0,m=0,x=c,b=u-l*c,_=h,w=f-l*h;for(m=0;m<s;++m){for(y=0;y<l;++y)e[n]=i[o],n+=x,o+=_;n+=b,o+=w}}}}},\\\"uint8,2,0,1,uint8,1,2,0\\\":function(){return function(t,e,r,n,i,a,o){for(var s=t[0],l=t[1],u=t[2],c=r[0],f=r[1],h=r[2],p=a[0],d=a[1],v=a[2],g=n|=0,y=o|=0,m=0|t[2];m>0;){m<64?(u=m,m=0):(u=64,m-=64);for(var x=0|t[0];x>0;){x<64?(s=x,x=0):(s=64,x-=64);for(var b=0|t[1];b>0;){b<64?(l=b,b=0):(l=64,b-=64),n=g+m*h+x*c+b*f,o=y+m*v+x*p+b*d;var _=0,w=0,T=0,k=h,A=c-u*h,M=f-s*c,S=v,E=p-u*v,L=d-s*p;for(T=0;T<l;++T){for(w=0;w<s;++w){for(_=0;_<u;++_)e[n]=i[o],n+=k,o+=S;n+=A,o+=E}n+=M,o+=L}}}}}},\\\"uint8,2,0,1,array,2,0,1\\\":function(){return function(t,e,r,n,i,a,o){var s=t[0],l=t[1],u=t[2],c=r[0],f=r[1],h=r[2],p=a[0],d=a[1],v=a[2];n|=0,o|=0;var g=0,y=0,m=0,x=h,b=c-u*h,_=f-s*c,w=v,T=p-u*v,k=d-s*p;for(m=0;m<l;++m){for(y=0;y<s;++y){for(g=0;g<u;++g)e[n]=i[o],n+=x,o+=w;n+=b,o+=T}n+=_,o+=k}}}},n=function(t,e){var n=e.join(\\\",\\\");return(0,r[n])()},i={mul:function(t){var e={};return function(r,n,i){var a=r.dtype,o=r.order,s=n.dtype,l=n.order,u=i.dtype,c=i.order,f=[a,o.join(),s,l.join(),u,c.join()].join(),h=e[f];return h||(e[f]=h=t([a,o,s,l,u,c])),h(r.shape.slice(0),r.data,r.stride,0|r.offset,n.data,n.stride,0|n.offset,i.data,i.stride,0|i.offset)}},muls:function(t){var e={};return function(r,n,i){var a=r.dtype,o=r.order,s=n.dtype,l=n.order,u=[a,o.join(),s,l.join()].join(),c=e[u];return c||(e[u]=c=t([a,o,s,l])),c(r.shape.slice(0),r.data,r.stride,0|r.offset,n.data,n.stride,0|n.offset,i)}},mulseq:function(t){var e={};return function(r,n){var i=r.dtype,a=r.order,o=[i,a.join()].join(),s=e[o];return s||(e[o]=s=t([i,a])),s(r.shape.slice(0),r.data,r.stride,0|r.offset,n)}},div:function(t){var e={};return function(r,n,i){var a=r.dtype,o=r.order,s=n.dtype,l=n.order,u=i.dtype,c=i.order,f=[a,o.join(),s,l.join(),u,c.join()].join(),h=e[f];return h||(e[f]=h=t([a,o,s,l,u,c])),h(r.shape.slice(0),r.data,r.stride,0|r.offset,n.data,n.stride,0|n.offset,i.data,i.stride,0|i.offset)}},divs:function(t){var e={};return function(r,n,i){var a=r.dtype,o=r.order,s=n.dtype,l=n.order,u=[a,o.join(),s,l.join()].join(),c=e[u];return c||(e[u]=c=t([a,o,s,l])),c(r.shape.slice(0),r.data,r.stride,0|r.offset,n.data,n.stride,0|n.offset,i)}},divseq:function(t){var e={};return function(r,n){var i=r.dtype,a=r.order,o=[i,a.join()].join(),s=e[o];return s||(e[o]=s=t([i,a])),s(r.shape.slice(0),r.data,r.stride,0|r.offset,n)}},assign:function(t){var e={};return function(r,n){var i=r.dtype,a=r.order,o=n.dtype,s=n.order,l=[i,a.join(),o,s.join()].join(),u=e[l];return u||(e[l]=u=t([i,a,o,s])),u(r.shape.slice(0),r.data,r.stride,0|r.offset,n.data,n.stride,0|n.offset)}}};function a(t){return e={funcName:t.funcName},(0,i[e.funcName])(n.bind(void 0,e));var e}var o={mul:\\\"*\\\",div:\\\"/\\\"};!function(){for(var t in o)e[t]=a({funcName:t}),e[t+\\\"s\\\"]=a({funcName:t+\\\"s\\\"}),e[t+\\\"seq\\\"]=a({funcName:t+\\\"seq\\\"})}(),e.assign=a({funcName:\\\"assign\\\"})},7382:function(t,e,r){\\\"use strict\\\";var n=r(5050),i=r(9262);t.exports=function(t,e){for(var r=[],a=t,o=1;Array.isArray(a);)r.push(a.length),o*=a.length,a=a[0];return 0===r.length?n():(e||(e=n(new Float64Array(o),r)),i(e,t),e)}},9262:function(t){\\\"use strict\\\";t.exports=function(t){var e={};return function(r,n){var i=r.dtype,a=r.order,o=[i,a.join()].join(),s=e[o];return s||(e[o]=s=t([i,a])),s(r.shape.slice(0),r.data,r.stride,0|r.offset,n)}}(function(){return function(t,e,r,n,i){var a=t[0],o=t[1],s=t[2],l=r[0],u=r[1],c=r[2],f=[0,0,0];n|=0;var h=0,p=0,d=0,v=c,g=u-s*c,y=l-o*u;for(d=0;d<a;++d){for(p=0;p<o;++p){for(h=0;h<s;++h){var m,x=i;for(m=0;m<f.length-1;++m)x=x[f[m]];e[n]=x[f[f.length-1]],n+=v,++f[2]}n+=g,f[2]-=s,++f[1]}n+=y,f[1]-=o,++f[0]}}}.bind(void 0,{funcName:\\\"convert\\\"}))},8139:function(t,e,r){\\\"use strict\\\";var n=r(5306);function i(t){return\\\"uint32\\\"===t?[n.mallocUint32,n.freeUint32]:null}var a={\\\"uint32,1,0\\\":function(t,e){return function(r,n,i,a,o,s,l,u,c,f,h){var p,d,v,g,y,m,x,b,_=r*o+a,w=t(u);for(p=r+1;p<=n;++p){for(d=p,v=_+=o,y=0,m=_,g=0;g<u;++g)w[y++]=i[m],m+=c;t:for(;d-- >r;){y=0,m=v-o;e:for(g=0;g<u;++g){if((x=i[m])<(b=w[y]))break t;if(x>b)break e;m+=f,y+=h}for(y=v,m=v-o,g=0;g<u;++g)i[y]=i[m],y+=c,m+=c;v-=o}for(y=v,m=0,g=0;g<u;++g)i[y]=w[m++],y+=c}e(w)}}},o={\\\"uint32,1,0\\\":function(t,e,r){return function n(i,a,o,s,l,u,c,f,h,p,d){var v,g,y,m,x,b,_,w,T,k,A,M,S,E,L,C,P,O,I,D,z,R,F,B,N,j=(a-i+1)/6|0,U=i+j,V=a-j,H=i+a>>1,q=H-j,G=H+j,Z=U,Y=q,W=H,X=G,J=V,K=i+1,$=a-1,Q=!0,tt=0,et=0,rt=0,nt=f,it=e(nt),at=e(nt);A=l*Z,M=l*Y,N=s;t:for(k=0;k<f;++k){if(w=M+N,(rt=o[_=A+N]-o[w])>0){g=Z,Z=Y,Y=g;break t}if(rt<0)break t;N+=p}A=l*X,M=l*J,N=s;t:for(k=0;k<f;++k){if(w=M+N,(rt=o[_=A+N]-o[w])>0){g=X,X=J,J=g;break t}if(rt<0)break t;N+=p}A=l*Z,M=l*W,N=s;t:for(k=0;k<f;++k){if(w=M+N,(rt=o[_=A+N]-o[w])>0){g=Z,Z=W,W=g;break t}if(rt<0)break t;N+=p}A=l*Y,M=l*W,N=s;t:for(k=0;k<f;++k){if(w=M+N,(rt=o[_=A+N]-o[w])>0){g=Y,Y=W,W=g;break t}if(rt<0)break t;N+=p}A=l*Z,M=l*X,N=s;t:for(k=0;k<f;++k){if(w=M+N,(rt=o[_=A+N]-o[w])>0){g=Z,Z=X,X=g;break t}if(rt<0)break t;N+=p}A=l*W,M=l*X,N=s;t:for(k=0;k<f;++k){if(w=M+N,(rt=o[_=A+N]-o[w])>0){g=W,W=X,X=g;break t}if(rt<0)break t;N+=p}A=l*Y,M=l*J,N=s;t:for(k=0;k<f;++k){if(w=M+N,(rt=o[_=A+N]-o[w])>0){g=Y,Y=J,J=g;break t}if(rt<0)break t;N+=p}A=l*Y,M=l*W,N=s;t:for(k=0;k<f;++k){if(w=M+N,(rt=o[_=A+N]-o[w])>0){g=Y,Y=W,W=g;break t}if(rt<0)break t;N+=p}A=l*X,M=l*J,N=s;t:for(k=0;k<f;++k){if(w=M+N,(rt=o[_=A+N]-o[w])>0){g=X,X=J,J=g;break t}if(rt<0)break t;N+=p}for(A=l*Z,M=l*Y,S=l*W,E=l*X,L=l*J,C=l*U,P=l*H,O=l*V,B=0,N=s,k=0;k<f;++k)_=A+N,w=M+N,T=S+N,I=E+N,D=L+N,z=C+N,R=P+N,F=O+N,it[B]=o[w],at[B]=o[I],Q=Q&&it[B]===at[B],y=o[_],m=o[T],x=o[D],o[z]=y,o[R]=m,o[F]=x,++B,N+=h;for(A=l*q,M=l*i,N=s,k=0;k<f;++k)w=M+N,o[_=A+N]=o[w],N+=h;for(A=l*G,M=l*a,N=s,k=0;k<f;++k)w=M+N,o[_=A+N]=o[w],N+=h;if(Q)for(b=K;b<=$;++b){for(_=s+b*l,B=0,k=0;k<f&&0==(rt=o[_]-it[B]);++k)B+=d,_+=p;if(0!==rt)if(rt<0){if(b!==K)for(A=l*b,M=l*K,N=s,k=0;k<f;++k)w=M+N,v=o[_=A+N],o[_]=o[w],o[w]=v,N+=h;++K}else for(;;){for(_=s+$*l,B=0,k=0;k<f&&0==(rt=o[_]-it[B]);++k)B+=d,_+=p;if(!(rt>0)){if(rt<0){for(A=l*b,M=l*K,S=l*$,N=s,k=0;k<f;++k)w=M+N,T=S+N,v=o[_=A+N],o[_]=o[w],o[w]=o[T],o[T]=v,N+=h;++K,--$;break}for(A=l*b,M=l*$,N=s,k=0;k<f;++k)w=M+N,v=o[_=A+N],o[_]=o[w],o[w]=v,N+=h;--$;break}$--}}else for(b=K;b<=$;++b){for(_=s+b*l,B=0,k=0;k<f&&0==(tt=o[_]-it[B]);++k)B+=d,_+=p;if(tt<0){if(b!==K)for(A=l*b,M=l*K,N=s,k=0;k<f;++k)w=M+N,v=o[_=A+N],o[_]=o[w],o[w]=v,N+=h;++K}else{for(_=s+b*l,B=0,k=0;k<f&&0==(et=o[_]-at[B]);++k)B+=d,_+=p;if(et>0)for(;;){for(_=s+$*l,B=0,k=0;k<f&&0==(rt=o[_]-at[B]);++k)B+=d,_+=p;if(!(rt>0)){for(_=s+$*l,B=0,k=0;k<f&&0==(rt=o[_]-it[B]);++k)B+=d,_+=p;if(rt<0){for(A=l*b,M=l*K,S=l*$,N=s,k=0;k<f;++k)w=M+N,T=S+N,v=o[_=A+N],o[_]=o[w],o[w]=o[T],o[T]=v,N+=h;++K,--$}else{for(A=l*b,M=l*$,N=s,k=0;k<f;++k)w=M+N,v=o[_=A+N],o[_]=o[w],o[w]=v,N+=h;--$}break}if(--$<b)break}}}for(A=l*i,M=l*(K-1),B=0,N=s,k=0;k<f;++k)w=M+N,o[_=A+N]=o[w],o[w]=it[B],++B,N+=h;for(A=l*a,M=l*($+1),B=0,N=s,k=0;k<f;++k)w=M+N,o[_=A+N]=o[w],o[w]=at[B],++B,N+=h;if(K-2-i<=32?t(i,K-2,o,s,l,u,c,f,h,p,d):n(i,K-2,o,s,l,u,c,f,h,p,d),a-($+2)<=32?t($+2,a,o,s,l,u,c,f,h,p,d):n($+2,a,o,s,l,u,c,f,h,p,d),Q)return r(it),void r(at);if(K<U&&$>V){t:for(;;){for(_=s+K*l,B=0,N=s,k=0;k<f;++k){if(o[_]!==it[B])break t;++B,_+=h}++K}t:for(;;){for(_=s+$*l,B=0,N=s,k=0;k<f;++k){if(o[_]!==at[B])break t;++B,_+=h}--$}for(b=K;b<=$;++b){for(_=s+b*l,B=0,k=0;k<f&&0==(tt=o[_]-it[B]);++k)B+=d,_+=p;if(0===tt){if(b!==K)for(A=l*b,M=l*K,N=s,k=0;k<f;++k)w=M+N,v=o[_=A+N],o[_]=o[w],o[w]=v,N+=h;++K}else{for(_=s+b*l,B=0,k=0;k<f&&0==(et=o[_]-at[B]);++k)B+=d,_+=p;if(0===et)for(;;){for(_=s+$*l,B=0,k=0;k<f&&0==(rt=o[_]-at[B]);++k)B+=d,_+=p;if(0!==rt){for(_=s+$*l,B=0,k=0;k<f&&0==(rt=o[_]-it[B]);++k)B+=d,_+=p;if(rt<0){for(A=l*b,M=l*K,S=l*$,N=s,k=0;k<f;++k)w=M+N,T=S+N,v=o[_=A+N],o[_]=o[w],o[w]=o[T],o[T]=v,N+=h;++K,--$}else{for(A=l*b,M=l*$,N=s,k=0;k<f;++k)w=M+N,v=o[_=A+N],o[_]=o[w],o[w]=v,N+=h;--$}break}if(--$<b)break}}}}r(it),r(at),$-K<=32?t(K,$,o,s,l,u,c,f,h,p,d):n(K,$,o,s,l,u,c,f,h,p,d)}}},s={\\\"uint32,1,0\\\":function(t,e){return function(r){var n=r.data,i=0|r.offset,a=r.shape,o=r.stride,s=0|o[0],l=0|a[0],u=0|o[1],c=0|a[1],f=u,h=u;l<=32?t(0,l-1,n,i,s,u,l,c,f,h,1):e(0,l-1,n,i,s,u,l,c,f,h,1)}}};t.exports=function(t,e){var r=[e,t].join(\\\",\\\"),n=s[r],l=function(t,e){var r=i(e),n=[e,t].join(\\\",\\\"),o=a[n];return r?o(r[0],r[1]):o()}(t,e),u=function(t,e,r){var n=i(e),a=[e,t].join(\\\",\\\"),s=o[a];return t.length>1&&n?s(r,n[0],n[1]):s(r)}(t,e,l);return n(l,u)}},8729:function(t,e,r){\\\"use strict\\\";var n=r(8139),i={};t.exports=function(t){var e=t.order,r=t.dtype,a=[e,r].join(\\\":\\\"),o=i[a];return o||(i[a]=o=n(e,r)),o(t),t}},5050:function(t,e,r){var n=r(4780),i=\\\"undefined\\\"!=typeof Float64Array;function a(t,e){return t[0]-e[0]}function o(){var t,e=this.stride,r=new Array(e.length);for(t=0;t<r.length;++t)r[t]=[Math.abs(e[t]),t];r.sort(a);var n=new Array(r.length);for(t=0;t<n.length;++t)n[t]=r[t][1];return n}var s={T:function(t){function e(t){this.data=t}var r=e.prototype;return r.dtype=t,r.index=function(){return-1},r.size=0,r.dimension=-1,r.shape=r.stride=r.order=[],r.lo=r.hi=r.transpose=r.step=function(){return new e(this.data)},r.get=r.set=function(){},r.pick=function(){return null},function(t){return new e(t)}},0:function(t,e){function r(t,e){this.data=t,this.offset=e}var n=r.prototype;return n.dtype=t,n.index=function(){return this.offset},n.dimension=0,n.size=1,n.shape=n.stride=n.order=[],n.lo=n.hi=n.transpose=n.step=function(){return new r(this.data,this.offset)},n.pick=function(){return e(this.data)},n.valueOf=n.get=function(){return\\\"generic\\\"===t?this.data.get(this.offset):this.data[this.offset]},n.set=function(e){return\\\"generic\\\"===t?this.data.set(this.offset,e):this.data[this.offset]=e},function(t,e,n,i){return new r(t,i)}},1:function(t,e,r){function n(t,e,r,n){this.data=t,this.shape=[e],this.stride=[r],this.offset=0|n}var i=n.prototype;return i.dtype=t,i.dimension=1,Object.defineProperty(i,\\\"size\\\",{get:function(){return this.shape[0]}}),i.order=[0],i.set=function(e,r){return\\\"generic\\\"===t?this.data.set(this.offset+this.stride[0]*e,r):this.data[this.offset+this.stride[0]*e]=r},i.get=function(e){return\\\"generic\\\"===t?this.data.get(this.offset+this.stride[0]*e):this.data[this.offset+this.stride[0]*e]},i.index=function(t){return this.offset+this.stride[0]*t},i.hi=function(t){return new n(this.data,\\\"number\\\"!=typeof t||t<0?this.shape[0]:0|t,this.stride[0],this.offset)},i.lo=function(t){var e=this.offset,r=0,i=this.shape[0],a=this.stride[0];return\\\"number\\\"==typeof t&&t>=0&&(e+=a*(r=0|t),i-=r),new n(this.data,i,a,e)},i.step=function(t){var e=this.shape[0],r=this.stride[0],i=this.offset,a=0,o=Math.ceil;return\\\"number\\\"==typeof t&&((a=0|t)<0?(i+=r*(e-1),e=o(-e/a)):e=o(e/a),r*=a),new n(this.data,e,r,i)},i.transpose=function(t){t=void 0===t?0:0|t;var e=this.shape,r=this.stride;return new n(this.data,e[t],r[t],this.offset)},i.pick=function(t){var r=[],n=[],i=this.offset;return\\\"number\\\"==typeof t&&t>=0?i=i+this.stride[0]*t|0:(r.push(this.shape[0]),n.push(this.stride[0])),(0,e[r.length+1])(this.data,r,n,i)},function(t,e,r,i){return new n(t,e[0],r[0],i)}},2:function(t,e,r){function n(t,e,r,n,i,a){this.data=t,this.shape=[e,r],this.stride=[n,i],this.offset=0|a}var i=n.prototype;return i.dtype=t,i.dimension=2,Object.defineProperty(i,\\\"size\\\",{get:function(){return this.shape[0]*this.shape[1]}}),Object.defineProperty(i,\\\"order\\\",{get:function(){return Math.abs(this.stride[0])>Math.abs(this.stride[1])?[1,0]:[0,1]}}),i.set=function(e,r,n){return\\\"generic\\\"===t?this.data.set(this.offset+this.stride[0]*e+this.stride[1]*r,n):this.data[this.offset+this.stride[0]*e+this.stride[1]*r]=n},i.get=function(e,r){return\\\"generic\\\"===t?this.data.get(this.offset+this.stride[0]*e+this.stride[1]*r):this.data[this.offset+this.stride[0]*e+this.stride[1]*r]},i.index=function(t,e){return this.offset+this.stride[0]*t+this.stride[1]*e},i.hi=function(t,e){return new n(this.data,\\\"number\\\"!=typeof t||t<0?this.shape[0]:0|t,\\\"number\\\"!=typeof e||e<0?this.shape[1]:0|e,this.stride[0],this.stride[1],this.offset)},i.lo=function(t,e){var r=this.offset,i=0,a=this.shape[0],o=this.shape[1],s=this.stride[0],l=this.stride[1];return\\\"number\\\"==typeof t&&t>=0&&(r+=s*(i=0|t),a-=i),\\\"number\\\"==typeof e&&e>=0&&(r+=l*(i=0|e),o-=i),new n(this.data,a,o,s,l,r)},i.step=function(t,e){var r=this.shape[0],i=this.shape[1],a=this.stride[0],o=this.stride[1],s=this.offset,l=0,u=Math.ceil;return\\\"number\\\"==typeof t&&((l=0|t)<0?(s+=a*(r-1),r=u(-r/l)):r=u(r/l),a*=l),\\\"number\\\"==typeof e&&((l=0|e)<0?(s+=o*(i-1),i=u(-i/l)):i=u(i/l),o*=l),new n(this.data,r,i,a,o,s)},i.transpose=function(t,e){t=void 0===t?0:0|t,e=void 0===e?1:0|e;var r=this.shape,i=this.stride;return new n(this.data,r[t],r[e],i[t],i[e],this.offset)},i.pick=function(t,r){var n=[],i=[],a=this.offset;return\\\"number\\\"==typeof t&&t>=0?a=a+this.stride[0]*t|0:(n.push(this.shape[0]),i.push(this.stride[0])),\\\"number\\\"==typeof r&&r>=0?a=a+this.stride[1]*r|0:(n.push(this.shape[1]),i.push(this.stride[1])),(0,e[n.length+1])(this.data,n,i,a)},function(t,e,r,i){return new n(t,e[0],e[1],r[0],r[1],i)}},3:function(t,e,r){function n(t,e,r,n,i,a,o,s){this.data=t,this.shape=[e,r,n],this.stride=[i,a,o],this.offset=0|s}var i=n.prototype;return i.dtype=t,i.dimension=3,Object.defineProperty(i,\\\"size\\\",{get:function(){return this.shape[0]*this.shape[1]*this.shape[2]}}),Object.defineProperty(i,\\\"order\\\",{get:function(){var t=Math.abs(this.stride[0]),e=Math.abs(this.stride[1]),r=Math.abs(this.stride[2]);return t>e?e>r?[2,1,0]:t>r?[1,2,0]:[1,0,2]:t>r?[2,0,1]:r>e?[0,1,2]:[0,2,1]}}),i.set=function(e,r,n,i){return\\\"generic\\\"===t?this.data.set(this.offset+this.stride[0]*e+this.stride[1]*r+this.stride[2]*n,i):this.data[this.offset+this.stride[0]*e+this.stride[1]*r+this.stride[2]*n]=i},i.get=function(e,r,n){return\\\"generic\\\"===t?this.data.get(this.offset+this.stride[0]*e+this.stride[1]*r+this.stride[2]*n):this.data[this.offset+this.stride[0]*e+this.stride[1]*r+this.stride[2]*n]},i.index=function(t,e,r){return this.offset+this.stride[0]*t+this.stride[1]*e+this.stride[2]*r},i.hi=function(t,e,r){return new n(this.data,\\\"number\\\"!=typeof t||t<0?this.shape[0]:0|t,\\\"number\\\"!=typeof e||e<0?this.shape[1]:0|e,\\\"number\\\"!=typeof r||r<0?this.shape[2]:0|r,this.stride[0],this.stride[1],this.stride[2],this.offset)},i.lo=function(t,e,r){var i=this.offset,a=0,o=this.shape[0],s=this.shape[1],l=this.shape[2],u=this.stride[0],c=this.stride[1],f=this.stride[2];return\\\"number\\\"==typeof t&&t>=0&&(i+=u*(a=0|t),o-=a),\\\"number\\\"==typeof e&&e>=0&&(i+=c*(a=0|e),s-=a),\\\"number\\\"==typeof r&&r>=0&&(i+=f*(a=0|r),l-=a),new n(this.data,o,s,l,u,c,f,i)},i.step=function(t,e,r){var i=this.shape[0],a=this.shape[1],o=this.shape[2],s=this.stride[0],l=this.stride[1],u=this.stride[2],c=this.offset,f=0,h=Math.ceil;return\\\"number\\\"==typeof t&&((f=0|t)<0?(c+=s*(i-1),i=h(-i/f)):i=h(i/f),s*=f),\\\"number\\\"==typeof e&&((f=0|e)<0?(c+=l*(a-1),a=h(-a/f)):a=h(a/f),l*=f),\\\"number\\\"==typeof r&&((f=0|r)<0?(c+=u*(o-1),o=h(-o/f)):o=h(o/f),u*=f),new n(this.data,i,a,o,s,l,u,c)},i.transpose=function(t,e,r){t=void 0===t?0:0|t,e=void 0===e?1:0|e,r=void 0===r?2:0|r;var i=this.shape,a=this.stride;return new n(this.data,i[t],i[e],i[r],a[t],a[e],a[r],this.offset)},i.pick=function(t,r,n){var i=[],a=[],o=this.offset;return\\\"number\\\"==typeof t&&t>=0?o=o+this.stride[0]*t|0:(i.push(this.shape[0]),a.push(this.stride[0])),\\\"number\\\"==typeof r&&r>=0?o=o+this.stride[1]*r|0:(i.push(this.shape[1]),a.push(this.stride[1])),\\\"number\\\"==typeof n&&n>=0?o=o+this.stride[2]*n|0:(i.push(this.shape[2]),a.push(this.stride[2])),(0,e[i.length+1])(this.data,i,a,o)},function(t,e,r,i){return new n(t,e[0],e[1],e[2],r[0],r[1],r[2],i)}},4:function(t,e,r){function n(t,e,r,n,i,a,o,s,l,u){this.data=t,this.shape=[e,r,n,i],this.stride=[a,o,s,l],this.offset=0|u}var i=n.prototype;return i.dtype=t,i.dimension=4,Object.defineProperty(i,\\\"size\\\",{get:function(){return this.shape[0]*this.shape[1]*this.shape[2]*this.shape[3]}}),Object.defineProperty(i,\\\"order\\\",{get:r}),i.set=function(e,r,n,i,a){return\\\"generic\\\"===t?this.data.set(this.offset+this.stride[0]*e+this.stride[1]*r+this.stride[2]*n+this.stride[3]*i,a):this.data[this.offset+this.stride[0]*e+this.stride[1]*r+this.stride[2]*n+this.stride[3]*i]=a},i.get=function(e,r,n,i){return\\\"generic\\\"===t?this.data.get(this.offset+this.stride[0]*e+this.stride[1]*r+this.stride[2]*n+this.stride[3]*i):this.data[this.offset+this.stride[0]*e+this.stride[1]*r+this.stride[2]*n+this.stride[3]*i]},i.index=function(t,e,r,n){return this.offset+this.stride[0]*t+this.stride[1]*e+this.stride[2]*r+this.stride[3]*n},i.hi=function(t,e,r,i){return new n(this.data,\\\"number\\\"!=typeof t||t<0?this.shape[0]:0|t,\\\"number\\\"!=typeof e||e<0?this.shape[1]:0|e,\\\"number\\\"!=typeof r||r<0?this.shape[2]:0|r,\\\"number\\\"!=typeof i||i<0?this.shape[3]:0|i,this.stride[0],this.stride[1],this.stride[2],this.stride[3],this.offset)},i.lo=function(t,e,r,i){var a=this.offset,o=0,s=this.shape[0],l=this.shape[1],u=this.shape[2],c=this.shape[3],f=this.stride[0],h=this.stride[1],p=this.stride[2],d=this.stride[3];return\\\"number\\\"==typeof t&&t>=0&&(a+=f*(o=0|t),s-=o),\\\"number\\\"==typeof e&&e>=0&&(a+=h*(o=0|e),l-=o),\\\"number\\\"==typeof r&&r>=0&&(a+=p*(o=0|r),u-=o),\\\"number\\\"==typeof i&&i>=0&&(a+=d*(o=0|i),c-=o),new n(this.data,s,l,u,c,f,h,p,d,a)},i.step=function(t,e,r,i){var a=this.shape[0],o=this.shape[1],s=this.shape[2],l=this.shape[3],u=this.stride[0],c=this.stride[1],f=this.stride[2],h=this.stride[3],p=this.offset,d=0,v=Math.ceil;return\\\"number\\\"==typeof t&&((d=0|t)<0?(p+=u*(a-1),a=v(-a/d)):a=v(a/d),u*=d),\\\"number\\\"==typeof e&&((d=0|e)<0?(p+=c*(o-1),o=v(-o/d)):o=v(o/d),c*=d),\\\"number\\\"==typeof r&&((d=0|r)<0?(p+=f*(s-1),s=v(-s/d)):s=v(s/d),f*=d),\\\"number\\\"==typeof i&&((d=0|i)<0?(p+=h*(l-1),l=v(-l/d)):l=v(l/d),h*=d),new n(this.data,a,o,s,l,u,c,f,h,p)},i.transpose=function(t,e,r,i){t=void 0===t?0:0|t,e=void 0===e?1:0|e,r=void 0===r?2:0|r,i=void 0===i?3:0|i;var a=this.shape,o=this.stride;return new n(this.data,a[t],a[e],a[r],a[i],o[t],o[e],o[r],o[i],this.offset)},i.pick=function(t,r,n,i){var a=[],o=[],s=this.offset;return\\\"number\\\"==typeof t&&t>=0?s=s+this.stride[0]*t|0:(a.push(this.shape[0]),o.push(this.stride[0])),\\\"number\\\"==typeof r&&r>=0?s=s+this.stride[1]*r|0:(a.push(this.shape[1]),o.push(this.stride[1])),\\\"number\\\"==typeof n&&n>=0?s=s+this.stride[2]*n|0:(a.push(this.shape[2]),o.push(this.stride[2])),\\\"number\\\"==typeof i&&i>=0?s=s+this.stride[3]*i|0:(a.push(this.shape[3]),o.push(this.stride[3])),(0,e[a.length+1])(this.data,a,o,s)},function(t,e,r,i){return new n(t,e[0],e[1],e[2],e[3],r[0],r[1],r[2],r[3],i)}},5:function(t,e,r){function n(t,e,r,n,i,a,o,s,l,u,c,f){this.data=t,this.shape=[e,r,n,i,a],this.stride=[o,s,l,u,c],this.offset=0|f}var i=n.prototype;return i.dtype=t,i.dimension=5,Object.defineProperty(i,\\\"size\\\",{get:function(){return this.shape[0]*this.shape[1]*this.shape[2]*this.shape[3]*this.shape[4]}}),Object.defineProperty(i,\\\"order\\\",{get:r}),i.set=function(e,r,n,i,a,o){return\\\"generic\\\"===t?this.data.set(this.offset+this.stride[0]*e+this.stride[1]*r+this.stride[2]*n+this.stride[3]*i+this.stride[4]*a,o):this.data[this.offset+this.stride[0]*e+this.stride[1]*r+this.stride[2]*n+this.stride[3]*i+this.stride[4]*a]=o},i.get=function(e,r,n,i,a){return\\\"generic\\\"===t?this.data.get(this.offset+this.stride[0]*e+this.stride[1]*r+this.stride[2]*n+this.stride[3]*i+this.stride[4]*a):this.data[this.offset+this.stride[0]*e+this.stride[1]*r+this.stride[2]*n+this.stride[3]*i+this.stride[4]*a]},i.index=function(t,e,r,n,i){return this.offset+this.stride[0]*t+this.stride[1]*e+this.stride[2]*r+this.stride[3]*n+this.stride[4]*i},i.hi=function(t,e,r,i,a){return new n(this.data,\\\"number\\\"!=typeof t||t<0?this.shape[0]:0|t,\\\"number\\\"!=typeof e||e<0?this.shape[1]:0|e,\\\"number\\\"!=typeof r||r<0?this.shape[2]:0|r,\\\"number\\\"!=typeof i||i<0?this.shape[3]:0|i,\\\"number\\\"!=typeof a||a<0?this.shape[4]:0|a,this.stride[0],this.stride[1],this.stride[2],this.stride[3],this.stride[4],this.offset)},i.lo=function(t,e,r,i,a){var o=this.offset,s=0,l=this.shape[0],u=this.shape[1],c=this.shape[2],f=this.shape[3],h=this.shape[4],p=this.stride[0],d=this.stride[1],v=this.stride[2],g=this.stride[3],y=this.stride[4];return\\\"number\\\"==typeof t&&t>=0&&(o+=p*(s=0|t),l-=s),\\\"number\\\"==typeof e&&e>=0&&(o+=d*(s=0|e),u-=s),\\\"number\\\"==typeof r&&r>=0&&(o+=v*(s=0|r),c-=s),\\\"number\\\"==typeof i&&i>=0&&(o+=g*(s=0|i),f-=s),\\\"number\\\"==typeof a&&a>=0&&(o+=y*(s=0|a),h-=s),new n(this.data,l,u,c,f,h,p,d,v,g,y,o)},i.step=function(t,e,r,i,a){var o=this.shape[0],s=this.shape[1],l=this.shape[2],u=this.shape[3],c=this.shape[4],f=this.stride[0],h=this.stride[1],p=this.stride[2],d=this.stride[3],v=this.stride[4],g=this.offset,y=0,m=Math.ceil;return\\\"number\\\"==typeof t&&((y=0|t)<0?(g+=f*(o-1),o=m(-o/y)):o=m(o/y),f*=y),\\\"number\\\"==typeof e&&((y=0|e)<0?(g+=h*(s-1),s=m(-s/y)):s=m(s/y),h*=y),\\\"number\\\"==typeof r&&((y=0|r)<0?(g+=p*(l-1),l=m(-l/y)):l=m(l/y),p*=y),\\\"number\\\"==typeof i&&((y=0|i)<0?(g+=d*(u-1),u=m(-u/y)):u=m(u/y),d*=y),\\\"number\\\"==typeof a&&((y=0|a)<0?(g+=v*(c-1),c=m(-c/y)):c=m(c/y),v*=y),new n(this.data,o,s,l,u,c,f,h,p,d,v,g)},i.transpose=function(t,e,r,i,a){t=void 0===t?0:0|t,e=void 0===e?1:0|e,r=void 0===r?2:0|r,i=void 0===i?3:0|i,a=void 0===a?4:0|a;var o=this.shape,s=this.stride;return new n(this.data,o[t],o[e],o[r],o[i],o[a],s[t],s[e],s[r],s[i],s[a],this.offset)},i.pick=function(t,r,n,i,a){var o=[],s=[],l=this.offset;return\\\"number\\\"==typeof t&&t>=0?l=l+this.stride[0]*t|0:(o.push(this.shape[0]),s.push(this.stride[0])),\\\"number\\\"==typeof r&&r>=0?l=l+this.stride[1]*r|0:(o.push(this.shape[1]),s.push(this.stride[1])),\\\"number\\\"==typeof n&&n>=0?l=l+this.stride[2]*n|0:(o.push(this.shape[2]),s.push(this.stride[2])),\\\"number\\\"==typeof i&&i>=0?l=l+this.stride[3]*i|0:(o.push(this.shape[3]),s.push(this.stride[3])),\\\"number\\\"==typeof a&&a>=0?l=l+this.stride[4]*a|0:(o.push(this.shape[4]),s.push(this.stride[4])),(0,e[o.length+1])(this.data,o,s,l)},function(t,e,r,i){return new n(t,e[0],e[1],e[2],e[3],e[4],r[0],r[1],r[2],r[3],r[4],i)}}};function l(t,e){var r=-1===e?\\\"T\\\":String(e),n=s[r];return-1===e?n(t):0===e?n(t,u[t][0]):n(t,u[t],o)}var u={generic:[],buffer:[],array:[],float32:[],float64:[],int8:[],int16:[],int32:[],uint8_clamped:[],uint8:[],uint16:[],uint32:[],bigint64:[],biguint64:[]};t.exports=function(t,e,r,a){if(void 0===t)return(0,u.array[0])([]);\\\"number\\\"==typeof t&&(t=[t]),void 0===e&&(e=[t.length]);var o=e.length;if(void 0===r){r=new Array(o);for(var s=o-1,c=1;s>=0;--s)r[s]=c,c*=e[s]}if(void 0===a)for(a=0,s=0;s<o;++s)r[s]<0&&(a-=(e[s]-1)*r[s]);for(var f=function(t){if(n(t))return\\\"buffer\\\";if(i)switch(Object.prototype.toString.call(t)){case\\\"[object Float64Array]\\\":return\\\"float64\\\";case\\\"[object Float32Array]\\\":return\\\"float32\\\";case\\\"[object Int8Array]\\\":return\\\"int8\\\";case\\\"[object Int16Array]\\\":return\\\"int16\\\";case\\\"[object Int32Array]\\\":return\\\"int32\\\";case\\\"[object Uint8ClampedArray]\\\":return\\\"uint8_clamped\\\";case\\\"[object Uint8Array]\\\":return\\\"uint8\\\";case\\\"[object Uint16Array]\\\":return\\\"uint16\\\";case\\\"[object Uint32Array]\\\":return\\\"uint32\\\";case\\\"[object BigInt64Array]\\\":return\\\"bigint64\\\";case\\\"[object BigUint64Array]\\\":return\\\"biguint64\\\"}return Array.isArray(t)?\\\"array\\\":\\\"generic\\\"}(t),h=u[f];h.length<=o+1;)h.push(l(f,h.length-1));return(0,h[o+1])(t,e,r,a)}},8551:function(t,e,r){\\\"use strict\\\";var n=r(8362),i=Math.pow(2,-1074),a=-1>>>0;t.exports=function(t,e){if(isNaN(t)||isNaN(e))return NaN;if(t===e)return t;if(0===t)return e<0?-i:i;var r=n.hi(t),o=n.lo(t);return e>t==t>0?o===a?(r+=1,o=0):o+=1:0===o?(o=a,r-=1):o-=1,n.pack(o,r)}},115:function(t,e){e.vertexNormals=function(t,e,r){for(var n=e.length,i=new Array(n),a=void 0===r?1e-6:r,o=0;o<n;++o)i[o]=[0,0,0];for(o=0;o<t.length;++o)for(var s=t[o],l=0,u=s[s.length-1],c=s[0],f=0;f<s.length;++f){l=u,u=c,c=s[(f+1)%s.length];for(var h=e[l],p=e[u],d=e[c],v=new Array(3),g=0,y=new Array(3),m=0,x=0;x<3;++x)v[x]=h[x]-p[x],g+=v[x]*v[x],y[x]=d[x]-p[x],m+=y[x]*y[x];if(g*m>a){var b=i[u],_=1/Math.sqrt(g*m);for(x=0;x<3;++x){var w=(x+1)%3,T=(x+2)%3;b[x]+=_*(y[w]*v[T]-y[T]*v[w])}}}for(o=0;o<n;++o){b=i[o];var k=0;for(x=0;x<3;++x)k+=b[x]*b[x];if(k>a)for(_=1/Math.sqrt(k),x=0;x<3;++x)b[x]*=_;else for(x=0;x<3;++x)b[x]=0}return i},e.faceNormals=function(t,e,r){for(var n=t.length,i=new Array(n),a=void 0===r?1e-6:r,o=0;o<n;++o){for(var s=t[o],l=new Array(3),u=0;u<3;++u)l[u]=e[s[u]];var c=new Array(3),f=new Array(3);for(u=0;u<3;++u)c[u]=l[1][u]-l[0][u],f[u]=l[2][u]-l[0][u];var h=new Array(3),p=0;for(u=0;u<3;++u){var d=(u+1)%3,v=(u+2)%3;h[u]=c[d]*f[v]-c[v]*f[d],p+=h[u]*h[u]}for(p=p>a?1/Math.sqrt(p):0,u=0;u<3;++u)h[u]*=p;i[o]=h}return i}},567:function(t){\\\"use strict\\\";t.exports=function(t,e,r,n,i,a,o,s,l,u){var c=e+a+u;if(f>0){var f=Math.sqrt(c+1);t[0]=.5*(o-l)/f,t[1]=.5*(s-n)/f,t[2]=.5*(r-a)/f,t[3]=.5*f}else{var h=Math.max(e,a,u);f=Math.sqrt(2*h-c+1),e>=h?(t[0]=.5*f,t[1]=.5*(i+r)/f,t[2]=.5*(s+n)/f,t[3]=.5*(o-l)/f):a>=h?(t[0]=.5*(r+i)/f,t[1]=.5*f,t[2]=.5*(l+o)/f,t[3]=.5*(s-n)/f):(t[0]=.5*(n+s)/f,t[1]=.5*(o+l)/f,t[2]=.5*f,t[3]=.5*(r-i)/f)}return t}},7774:function(t,e,r){\\\"use strict\\\";t.exports=function(t){var e=(t=t||{}).center||[0,0,0],r=t.rotation||[0,0,0,1],n=t.radius||1;e=[].slice.call(e,0,3),c(r=[].slice.call(r,0,4),r);var i=new f(r,e,Math.log(n));return i.setDistanceLimits(t.zoomMin,t.zoomMax),(\\\"eye\\\"in t||\\\"up\\\"in t)&&i.lookAt(0,t.eye,t.center,t.up),i};var n=r(8444),i=r(3012),a=r(5950),o=r(7437),s=r(567);function l(t,e,r){return Math.sqrt(Math.pow(t,2)+Math.pow(e,2)+Math.pow(r,2))}function u(t,e,r,n){return Math.sqrt(Math.pow(t,2)+Math.pow(e,2)+Math.pow(r,2)+Math.pow(n,2))}function c(t,e){var r=e[0],n=e[1],i=e[2],a=e[3],o=u(r,n,i,a);o>1e-6?(t[0]=r/o,t[1]=n/o,t[2]=i/o,t[3]=a/o):(t[0]=t[1]=t[2]=0,t[3]=1)}function f(t,e,r){this.radius=n([r]),this.center=n(e),this.rotation=n(t),this.computedRadius=this.radius.curve(0),this.computedCenter=this.center.curve(0),this.computedRotation=this.rotation.curve(0),this.computedUp=[.1,0,0],this.computedEye=[.1,0,0],this.computedMatrix=[.1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],this.recalcMatrix(0)}var h=f.prototype;h.lastT=function(){return Math.max(this.radius.lastT(),this.center.lastT(),this.rotation.lastT())},h.recalcMatrix=function(t){this.radius.curve(t),this.center.curve(t),this.rotation.curve(t);var e=this.computedRotation;c(e,e);var r=this.computedMatrix;a(r,e);var n=this.computedCenter,i=this.computedEye,o=this.computedUp,s=Math.exp(this.computedRadius[0]);i[0]=n[0]+s*r[2],i[1]=n[1]+s*r[6],i[2]=n[2]+s*r[10],o[0]=r[1],o[1]=r[5],o[2]=r[9];for(var l=0;l<3;++l){for(var u=0,f=0;f<3;++f)u+=r[l+4*f]*i[f];r[12+l]=-u}},h.getMatrix=function(t,e){this.recalcMatrix(t);var r=this.computedMatrix;if(e){for(var n=0;n<16;++n)e[n]=r[n];return e}return r},h.idle=function(t){this.center.idle(t),this.radius.idle(t),this.rotation.idle(t)},h.flush=function(t){this.center.flush(t),this.radius.flush(t),this.rotation.flush(t)},h.pan=function(t,e,r,n){e=e||0,r=r||0,n=n||0,this.recalcMatrix(t);var i=this.computedMatrix,a=i[1],o=i[5],s=i[9],u=l(a,o,s);a/=u,o/=u,s/=u;var c=i[0],f=i[4],h=i[8],p=c*a+f*o+h*s,d=l(c-=a*p,f-=o*p,h-=s*p);c/=d,f/=d,h/=d;var v=i[2],g=i[6],y=i[10],m=v*a+g*o+y*s,x=v*c+g*f+y*h,b=l(v-=m*a+x*c,g-=m*o+x*f,y-=m*s+x*h);v/=b,g/=b,y/=b;var _=c*e+a*r,w=f*e+o*r,T=h*e+s*r;this.center.move(t,_,w,T);var k=Math.exp(this.computedRadius[0]);k=Math.max(1e-4,k+n),this.radius.set(t,Math.log(k))},h.rotate=function(t,e,r,n){this.recalcMatrix(t),e=e||0,r=r||0;var i=this.computedMatrix,a=i[0],o=i[4],s=i[8],c=i[1],f=i[5],h=i[9],p=i[2],d=i[6],v=i[10],g=e*a+r*c,y=e*o+r*f,m=e*s+r*h,x=-(d*m-v*y),b=-(v*g-p*m),_=-(p*y-d*g),w=Math.sqrt(Math.max(0,1-Math.pow(x,2)-Math.pow(b,2)-Math.pow(_,2))),T=u(x,b,_,w);T>1e-6?(x/=T,b/=T,_/=T,w/=T):(x=b=_=0,w=1);var k=this.computedRotation,A=k[0],M=k[1],S=k[2],E=k[3],L=A*w+E*x+M*_-S*b,C=M*w+E*b+S*x-A*_,P=S*w+E*_+A*b-M*x,O=E*w-A*x-M*b-S*_;if(n){x=p,b=d,_=v;var I=Math.sin(n)/l(x,b,_);x*=I,b*=I,_*=I,O=O*(w=Math.cos(e))-(L=L*w+O*x+C*_-P*b)*x-(C=C*w+O*b+P*x-L*_)*b-(P=P*w+O*_+L*b-C*x)*_}var D=u(L,C,P,O);D>1e-6?(L/=D,C/=D,P/=D,O/=D):(L=C=P=0,O=1),this.rotation.set(t,L,C,P,O)},h.lookAt=function(t,e,r,n){this.recalcMatrix(t),r=r||this.computedCenter,e=e||this.computedEye,n=n||this.computedUp;var a=this.computedMatrix;i(a,e,r,n);var o=this.computedRotation;s(o,a[0],a[1],a[2],a[4],a[5],a[6],a[8],a[9],a[10]),c(o,o),this.rotation.set(t,o[0],o[1],o[2],o[3]);for(var l=0,u=0;u<3;++u)l+=Math.pow(r[u]-e[u],2);this.radius.set(t,.5*Math.log(Math.max(l,1e-6))),this.center.set(t,r[0],r[1],r[2])},h.translate=function(t,e,r,n){this.center.move(t,e||0,r||0,n||0)},h.setMatrix=function(t,e){var r=this.computedRotation;s(r,e[0],e[1],e[2],e[4],e[5],e[6],e[8],e[9],e[10]),c(r,r),this.rotation.set(t,r[0],r[1],r[2],r[3]);var n=this.computedMatrix;o(n,e);var i=n[15];if(Math.abs(i)>1e-6){var a=n[12]/i,l=n[13]/i,u=n[14]/i;this.recalcMatrix(t);var f=Math.exp(this.computedRadius[0]);this.center.set(t,a-n[2]*f,l-n[6]*f,u-n[10]*f),this.radius.idle(t)}else this.center.idle(t),this.radius.idle(t)},h.setDistance=function(t,e){e>0&&this.radius.set(t,Math.log(e))},h.setDistanceLimits=function(t,e){t=t>0?Math.log(t):-1/0,e=e>0?Math.log(e):1/0,e=Math.max(e,t),this.radius.bounds[0][0]=t,this.radius.bounds[1][0]=e},h.getDistanceLimits=function(t){var e=this.radius.bounds;return t?(t[0]=Math.exp(e[0][0]),t[1]=Math.exp(e[1][0]),t):[Math.exp(e[0][0]),Math.exp(e[1][0])]},h.toJSON=function(){return this.recalcMatrix(this.lastT()),{center:this.computedCenter.slice(),rotation:this.computedRotation.slice(),distance:Math.log(this.computedRadius[0]),zoomMin:this.radius.bounds[0][0],zoomMax:this.radius.bounds[1][0]}},h.fromJSON=function(t){var e=this.lastT(),r=t.center;r&&this.center.set(e,r[0],r[1],r[2]);var n=t.rotation;n&&this.rotation.set(e,n[0],n[1],n[2],n[3]);var i=t.distance;i&&i>0&&this.radius.set(e,Math.log(i)),this.setDistanceLimits(t.zoomMin,t.zoomMax)}},4930:function(t,e,r){\\\"use strict\\\";var n=r(6184);t.exports=function(t,e,r){return n(r=void 0!==r?r+\\\"\\\":\\\" \\\",e)+t}},4405:function(t){t.exports=function(t,e){e||(e=[0,\\\"\\\"]),t=String(t);var r=parseFloat(t,10);return e[0]=r,e[1]=t.match(/[\\\\d.\\\\-\\\\+]*\\\\s*(.*)/)[1]||\\\"\\\",e}},4166:function(t,e,r){\\\"use strict\\\";t.exports=function(t,e){for(var r=0|e.length,i=t.length,a=[new Array(r),new Array(r)],o=0;o<r;++o)a[0][o]=[],a[1][o]=[];for(o=0;o<i;++o){var s=t[o];a[0][s[0]].push(s),a[1][s[1]].push(s)}var l=[];for(o=0;o<r;++o)a[0][o].length+a[1][o].length===0&&l.push([o]);function u(t,e){var r=a[e][t[e]];r.splice(r.indexOf(t),1)}function c(t,r,i){for(var o,s,l,c=0;c<2;++c)if(a[c][r].length>0){o=a[c][r][0],l=c;break}s=o[1^l];for(var f=0;f<2;++f)for(var h=a[f][r],p=0;p<h.length;++p){var d=h[p],v=d[1^f];n(e[t],e[r],e[s],e[v])>0&&(o=d,s=v,l=f)}return i||o&&u(o,l),s}function f(t,r){var i=a[r][t][0],o=[t];u(i,r);for(var s=i[1^r];;){for(;s!==t;)o.push(s),s=c(o[o.length-2],s,!1);if(a[0][t].length+a[1][t].length===0)break;var l=o[o.length-1],f=t,h=o[1],p=c(l,f,!0);if(n(e[l],e[f],e[h],e[p])<0)break;o.push(t),s=c(l,f)}return o}function h(t,e){return e[1]===e[e.length-1]}for(o=0;o<r;++o)for(var p=0;p<2;++p){for(var d=[];a[p][o].length>0;){a[0][o].length;var v=f(o,p);h(0,v)?d.push.apply(d,v):(d.length>0&&l.push(d),d=v)}d.length>0&&l.push(d)}return l};var n=r(9398)},3959:function(t,e,r){\\\"use strict\\\";t.exports=function(t,e){for(var r=n(t,e.length),i=new Array(e.length),a=new Array(e.length),o=[],s=0;s<e.length;++s){var l=r[s].length;a[s]=l,i[s]=!0,l<=1&&o.push(s)}for(;o.length>0;){i[p=o.pop()]=!1;var u=r[p];for(s=0;s<u.length;++s){var c=u[s];0==--a[c]&&o.push(c)}}var f=new Array(e.length),h=[];for(s=0;s<e.length;++s)if(i[s]){var p=h.length;f[s]=p,h.push(e[s])}else f[s]=-1;var d=[];for(s=0;s<t.length;++s){var v=t[s];i[v[0]]&&i[v[1]]&&d.push([f[v[0]],f[v[1]]])}return[d,h]};var n=r(8348)},8040:function(t,e,r){\\\"use strict\\\";t.exports=function(t,e){var r=u(t,e);t=r[0];for(var f=(e=r[1]).length,h=(t.length,n(t,e.length)),p=0;p<f;++p)if(h[p].length%2==1)throw new Error(\\\"planar-graph-to-polyline: graph must be manifold\\\");var d=i(t,e),v=(d=d.filter((function(t){for(var r=t.length,n=[0],i=0;i<r;++i){var a=e[t[i]],l=e[t[(i+1)%r]],u=o(-a[0],a[1]),c=o(-a[0],l[1]),f=o(l[0],a[1]),h=o(l[0],l[1]);n=s(n,s(s(u,c),s(f,h)))}return n[n.length-1]>0}))).length,g=new Array(v),y=new Array(v);for(p=0;p<v;++p){g[p]=p;var m=new Array(v),x=d[p].map((function(t){return e[t]})),b=a([x]),_=0;t:for(var w=0;w<v;++w)if(m[w]=0,p!==w){for(var T=(H=d[w]).length,k=0;k<T;++k){var A=b(e[H[k]]);if(0!==A){A<0&&(m[w]=1,_+=1);continue t}}m[w]=1,_+=1}y[p]=[_,p,m]}for(y.sort((function(t,e){return e[0]-t[0]})),p=0;p<v;++p){var M=(m=y[p])[1],S=m[2];for(w=0;w<v;++w)S[w]&&(g[w]=M)}var E=function(t){for(var e=new Array(t),r=0;r<t;++r)e[r]=[];return e}(v);for(p=0;p<v;++p)E[p].push(g[p]),E[g[p]].push(p);var L={},C=c(f,!1);for(p=0;p<v;++p)for(T=(H=d[p]).length,w=0;w<T;++w){var P=H[w],O=H[(w+1)%T],I=Math.min(P,O)+\\\":\\\"+Math.max(P,O);if(I in L){var D=L[I];E[D].push(p),E[p].push(D),C[P]=C[O]=!0}else L[I]=p}function z(t){for(var e=t.length,r=0;r<e;++r)if(!C[t[r]])return!1;return!0}var R=[],F=c(v,-1);for(p=0;p<v;++p)g[p]!==p||z(d[p])?F[p]=-1:(R.push(p),F[p]=0);for(r=[];R.length>0;){var B=R.pop(),N=E[B];l(N,(function(t,e){return t-e}));var j,U=N.length,V=F[B];for(0===V&&(j=[H=d[B]]),p=0;p<U;++p){var H,q=N[p];F[q]>=0||(F[q]=1^V,R.push(q),0===V&&(z(H=d[q])||(H.reverse(),j.push(H))))}0===V&&r.push(j)}return r};var n=r(8348),i=r(4166),a=r(211),o=r(9660),s=r(9662),l=r(1215),u=r(3959);function c(t,e){for(var r=new Array(t),n=0;n<t;++n)r[n]=e;return r}},211:function(t,e,r){t.exports=function(t){for(var e=t.length,r=[],a=[],s=0;s<e;++s)for(var c=t[s],f=c.length,h=f-1,p=0;p<f;h=p++){var d=c[h],v=c[p];d[0]===v[0]?a.push([d,v]):r.push([d,v])}if(0===r.length)return 0===a.length?u:(g=l(a),function(t){return g(t[0],t[1])?0:1});var g,y=i(r),m=function(t,e){return function(r){var i=o.le(e,r[0]);if(i<0)return 1;var a=t[i];if(!a){if(!(i>0&&e[i]===r[0]))return 1;a=t[i-1]}for(var s=1;a;){var l=a.key,u=n(r,l[0],l[1]);if(l[0][0]<l[1][0])if(u<0)a=a.left;else{if(!(u>0))return 0;s=-1,a=a.right}else if(u>0)a=a.left;else{if(!(u<0))return 0;s=1,a=a.right}}return s}}(y.slabs,y.coordinates);return 0===a.length?m:function(t,e){return function(r){return t(r[0],r[1])?0:e(r)}}(l(a),m)};var n=r(417)[3],i=r(4385),a=r(9014),o=r(5070);function s(){return!0}function l(t){for(var e={},r=0;r<t.length;++r){var n=t[r],i=n[0][0],o=n[0][1],l=n[1][1],u=[Math.min(o,l),Math.max(o,l)];i in e?e[i].push(u):e[i]=[u]}var c={},f=Object.keys(e);for(r=0;r<f.length;++r){var h=e[f[r]];c[f[r]]=a(h)}return function(t){return function(e,r){var n=t[e];return!!n&&!!n.queryPoint(r,s)}}(c)}function u(t){return 1}},7309:function(t){\\\"use strict\\\";var e=new Float64Array(4),r=new Float64Array(4),n=new Float64Array(4);t.exports=function(t,i,a,o,s){e.length<o.length&&(e=new Float64Array(o.length),r=new Float64Array(o.length),n=new Float64Array(o.length));for(var l=0;l<o.length;++l)e[l]=t[l]-o[l],r[l]=i[l]-t[l],n[l]=a[l]-t[l];var u=0,c=0,f=0,h=0,p=0,d=0;for(l=0;l<o.length;++l){var v=r[l],g=n[l],y=e[l];u+=v*v,c+=v*g,f+=g*g,h+=y*v,p+=y*g,d+=y*y}var m,x,b,_,w,T=Math.abs(u*f-c*c),k=c*p-f*h,A=c*h-u*p;if(k+A<=T)if(k<0)A<0&&h<0?(A=0,-h>=u?(k=1,m=u+2*h+d):m=h*(k=-h/u)+d):(k=0,p>=0?(A=0,m=d):-p>=f?(A=1,m=f+2*p+d):m=p*(A=-p/f)+d);else if(A<0)A=0,h>=0?(k=0,m=d):-h>=u?(k=1,m=u+2*h+d):m=h*(k=-h/u)+d;else{var M=1/T;m=(k*=M)*(u*k+c*(A*=M)+2*h)+A*(c*k+f*A+2*p)+d}else k<0?(b=f+p)>(x=c+h)?(_=b-x)>=(w=u-2*c+f)?(k=1,A=0,m=u+2*h+d):m=(k=_/w)*(u*k+c*(A=1-k)+2*h)+A*(c*k+f*A+2*p)+d:(k=0,b<=0?(A=1,m=f+2*p+d):p>=0?(A=0,m=d):m=p*(A=-p/f)+d):A<0?(b=u+h)>(x=c+p)?(_=b-x)>=(w=u-2*c+f)?(A=1,k=0,m=f+2*p+d):m=(k=1-(A=_/w))*(u*k+c*A+2*h)+A*(c*k+f*A+2*p)+d:(A=0,b<=0?(k=1,m=u+2*h+d):h>=0?(k=0,m=d):m=h*(k=-h/u)+d):(_=f+p-c-h)<=0?(k=0,A=1,m=f+2*p+d):_>=(w=u-2*c+f)?(k=1,A=0,m=u+2*h+d):m=(k=_/w)*(u*k+c*(A=1-k)+2*h)+A*(c*k+f*A+2*p)+d;var S=1-k-A;for(l=0;l<o.length;++l)s[l]=S*t[l]+k*i[l]+A*a[l];return m<0?0:m}},1116:function(t,e,r){t.exports=r(6093)},7584:function(t,e,r){\\\"use strict\\\";var n=r(1539);t.exports=function(t,e){for(var r=t.length,i=new Array(r),a=0;a<r;++a)i[a]=n(t[a],e[a]);return i}},2826:function(t,e,r){\\\"use strict\\\";t.exports=function(t){for(var e=new Array(t.length),r=0;r<t.length;++r)e[r]=n(t[r]);return e};var n=r(5125)},4469:function(t,e,r){\\\"use strict\\\";var n=r(5125),i=r(3962);t.exports=function(t,e){for(var r=n(e),a=t.length,o=new Array(a),s=0;s<a;++s)o[s]=i(t[s],r);return o}},6695:function(t,e,r){\\\"use strict\\\";var n=r(4354);t.exports=function(t,e){for(var r=t.length,i=new Array(r),a=0;a<r;++a)i[a]=n(t[a],e[a]);return i}},7037:function(t,e,r){\\\"use strict\\\";var n=r(9209),i=r(1284),a=r(9887);t.exports=function(t){t.sort(i);for(var e=t.length,r=0,o=0;o<e;++o){var s=t[o],l=a(s);if(0!==l){if(r>0){var u=t[r-1];if(0===n(s,u)&&a(u)!==l){r-=1;continue}}t[r++]=s}}return t.length=r,t}},6184:function(t){\\\"use strict\\\";var e,r=\\\"\\\";t.exports=function(t,n){if(\\\"string\\\"!=typeof t)throw new TypeError(\\\"expected a string\\\");if(1===n)return t;if(2===n)return t+t;var i=t.length*n;if(e!==t||void 0===e)e=t,r=\\\"\\\";else if(r.length>=i)return r.substr(0,i);for(;i>r.length&&n>1;)1&n&&(r+=t),n>>=1,t+=t;return r=(r+=t).substr(0,i)}},8161:function(t,e,r){t.exports=r.g.performance&&r.g.performance.now?function(){return performance.now()}:Date.now||function(){return+new Date}},402:function(t){\\\"use strict\\\";t.exports=function(t){for(var e=t.length,r=t[t.length-1],n=e,i=e-2;i>=0;--i){var a=r;(l=(s=t[i])-((r=a+s)-a))&&(t[--n]=r,r=l)}var o=0;for(i=n;i<e;++i){var s,l;(l=(s=r)-((r=(a=t[i])+s)-a))&&(t[o++]=l)}return t[o++]=r,t.length=o,t}},8167:function(t,e,r){\\\"use strict\\\";var n=r(9660),i=r(9662),a=r(8289),o=r(402);function s(t,e,r,n){return function(e){return n(t(r(e[0][0],e[1][1]),r(-e[0][1],e[1][0])))}}function l(t,e,r,n){return function(i){return n(t(e(t(r(i[1][1],i[2][2]),r(-i[1][2],i[2][1])),i[0][0]),t(e(t(r(i[1][0],i[2][2]),r(-i[1][2],i[2][0])),-i[0][1]),e(t(r(i[1][0],i[2][1]),r(-i[1][1],i[2][0])),i[0][2]))))}}function u(t,e,r,n){return function(i){return n(t(t(e(t(e(t(r(i[2][2],i[3][3]),r(-i[2][3],i[3][2])),i[1][1]),t(e(t(r(i[2][1],i[3][3]),r(-i[2][3],i[3][1])),-i[1][2]),e(t(r(i[2][1],i[3][2]),r(-i[2][2],i[3][1])),i[1][3]))),i[0][0]),e(t(e(t(r(i[2][2],i[3][3]),r(-i[2][3],i[3][2])),i[1][0]),t(e(t(r(i[2][0],i[3][3]),r(-i[2][3],i[3][0])),-i[1][2]),e(t(r(i[2][0],i[3][2]),r(-i[2][2],i[3][0])),i[1][3]))),-i[0][1])),t(e(t(e(t(r(i[2][1],i[3][3]),r(-i[2][3],i[3][1])),i[1][0]),t(e(t(r(i[2][0],i[3][3]),r(-i[2][3],i[3][0])),-i[1][1]),e(t(r(i[2][0],i[3][1]),r(-i[2][1],i[3][0])),i[1][3]))),i[0][2]),e(t(e(t(r(i[2][1],i[3][2]),r(-i[2][2],i[3][1])),i[1][0]),t(e(t(r(i[2][0],i[3][2]),r(-i[2][2],i[3][0])),-i[1][1]),e(t(r(i[2][0],i[3][1]),r(-i[2][1],i[3][0])),i[1][2]))),-i[0][3]))))}}function c(t,e,r,n){return function(i){return n(t(t(e(t(t(e(t(e(t(r(i[3][3],i[4][4]),r(-i[3][4],i[4][3])),i[2][2]),t(e(t(r(i[3][2],i[4][4]),r(-i[3][4],i[4][2])),-i[2][3]),e(t(r(i[3][2],i[4][3]),r(-i[3][3],i[4][2])),i[2][4]))),i[1][1]),e(t(e(t(r(i[3][3],i[4][4]),r(-i[3][4],i[4][3])),i[2][1]),t(e(t(r(i[3][1],i[4][4]),r(-i[3][4],i[4][1])),-i[2][3]),e(t(r(i[3][1],i[4][3]),r(-i[3][3],i[4][1])),i[2][4]))),-i[1][2])),t(e(t(e(t(r(i[3][2],i[4][4]),r(-i[3][4],i[4][2])),i[2][1]),t(e(t(r(i[3][1],i[4][4]),r(-i[3][4],i[4][1])),-i[2][2]),e(t(r(i[3][1],i[4][2]),r(-i[3][2],i[4][1])),i[2][4]))),i[1][3]),e(t(e(t(r(i[3][2],i[4][3]),r(-i[3][3],i[4][2])),i[2][1]),t(e(t(r(i[3][1],i[4][3]),r(-i[3][3],i[4][1])),-i[2][2]),e(t(r(i[3][1],i[4][2]),r(-i[3][2],i[4][1])),i[2][3]))),-i[1][4]))),i[0][0]),e(t(t(e(t(e(t(r(i[3][3],i[4][4]),r(-i[3][4],i[4][3])),i[2][2]),t(e(t(r(i[3][2],i[4][4]),r(-i[3][4],i[4][2])),-i[2][3]),e(t(r(i[3][2],i[4][3]),r(-i[3][3],i[4][2])),i[2][4]))),i[1][0]),e(t(e(t(r(i[3][3],i[4][4]),r(-i[3][4],i[4][3])),i[2][0]),t(e(t(r(i[3][0],i[4][4]),r(-i[3][4],i[4][0])),-i[2][3]),e(t(r(i[3][0],i[4][3]),r(-i[3][3],i[4][0])),i[2][4]))),-i[1][2])),t(e(t(e(t(r(i[3][2],i[4][4]),r(-i[3][4],i[4][2])),i[2][0]),t(e(t(r(i[3][0],i[4][4]),r(-i[3][4],i[4][0])),-i[2][2]),e(t(r(i[3][0],i[4][2]),r(-i[3][2],i[4][0])),i[2][4]))),i[1][3]),e(t(e(t(r(i[3][2],i[4][3]),r(-i[3][3],i[4][2])),i[2][0]),t(e(t(r(i[3][0],i[4][3]),r(-i[3][3],i[4][0])),-i[2][2]),e(t(r(i[3][0],i[4][2]),r(-i[3][2],i[4][0])),i[2][3]))),-i[1][4]))),-i[0][1])),t(e(t(t(e(t(e(t(r(i[3][3],i[4][4]),r(-i[3][4],i[4][3])),i[2][1]),t(e(t(r(i[3][1],i[4][4]),r(-i[3][4],i[4][1])),-i[2][3]),e(t(r(i[3][1],i[4][3]),r(-i[3][3],i[4][1])),i[2][4]))),i[1][0]),e(t(e(t(r(i[3][3],i[4][4]),r(-i[3][4],i[4][3])),i[2][0]),t(e(t(r(i[3][0],i[4][4]),r(-i[3][4],i[4][0])),-i[2][3]),e(t(r(i[3][0],i[4][3]),r(-i[3][3],i[4][0])),i[2][4]))),-i[1][1])),t(e(t(e(t(r(i[3][1],i[4][4]),r(-i[3][4],i[4][1])),i[2][0]),t(e(t(r(i[3][0],i[4][4]),r(-i[3][4],i[4][0])),-i[2][1]),e(t(r(i[3][0],i[4][1]),r(-i[3][1],i[4][0])),i[2][4]))),i[1][3]),e(t(e(t(r(i[3][1],i[4][3]),r(-i[3][3],i[4][1])),i[2][0]),t(e(t(r(i[3][0],i[4][3]),r(-i[3][3],i[4][0])),-i[2][1]),e(t(r(i[3][0],i[4][1]),r(-i[3][1],i[4][0])),i[2][3]))),-i[1][4]))),i[0][2]),t(e(t(t(e(t(e(t(r(i[3][2],i[4][4]),r(-i[3][4],i[4][2])),i[2][1]),t(e(t(r(i[3][1],i[4][4]),r(-i[3][4],i[4][1])),-i[2][2]),e(t(r(i[3][1],i[4][2]),r(-i[3][2],i[4][1])),i[2][4]))),i[1][0]),e(t(e(t(r(i[3][2],i[4][4]),r(-i[3][4],i[4][2])),i[2][0]),t(e(t(r(i[3][0],i[4][4]),r(-i[3][4],i[4][0])),-i[2][2]),e(t(r(i[3][0],i[4][2]),r(-i[3][2],i[4][0])),i[2][4]))),-i[1][1])),t(e(t(e(t(r(i[3][1],i[4][4]),r(-i[3][4],i[4][1])),i[2][0]),t(e(t(r(i[3][0],i[4][4]),r(-i[3][4],i[4][0])),-i[2][1]),e(t(r(i[3][0],i[4][1]),r(-i[3][1],i[4][0])),i[2][4]))),i[1][2]),e(t(e(t(r(i[3][1],i[4][2]),r(-i[3][2],i[4][1])),i[2][0]),t(e(t(r(i[3][0],i[4][2]),r(-i[3][2],i[4][0])),-i[2][1]),e(t(r(i[3][0],i[4][1]),r(-i[3][1],i[4][0])),i[2][2]))),-i[1][4]))),-i[0][3]),e(t(t(e(t(e(t(r(i[3][2],i[4][3]),r(-i[3][3],i[4][2])),i[2][1]),t(e(t(r(i[3][1],i[4][3]),r(-i[3][3],i[4][1])),-i[2][2]),e(t(r(i[3][1],i[4][2]),r(-i[3][2],i[4][1])),i[2][3]))),i[1][0]),e(t(e(t(r(i[3][2],i[4][3]),r(-i[3][3],i[4][2])),i[2][0]),t(e(t(r(i[3][0],i[4][3]),r(-i[3][3],i[4][0])),-i[2][2]),e(t(r(i[3][0],i[4][2]),r(-i[3][2],i[4][0])),i[2][3]))),-i[1][1])),t(e(t(e(t(r(i[3][1],i[4][3]),r(-i[3][3],i[4][1])),i[2][0]),t(e(t(r(i[3][0],i[4][3]),r(-i[3][3],i[4][0])),-i[2][1]),e(t(r(i[3][0],i[4][1]),r(-i[3][1],i[4][0])),i[2][3]))),i[1][2]),e(t(e(t(r(i[3][1],i[4][2]),r(-i[3][2],i[4][1])),i[2][0]),t(e(t(r(i[3][0],i[4][2]),r(-i[3][2],i[4][0])),-i[2][1]),e(t(r(i[3][0],i[4][1]),r(-i[3][1],i[4][0])),i[2][2]))),-i[1][3]))),i[0][4])))))}}function f(t){return(2===t?s:3===t?l:4===t?u:5===t?c:void 0)(i,a,n,o)}var h=[function(){return[0]},function(t){return[t[0][0]]}];function p(t,e,r,n,i,a,o,s){return function(l){switch(l.length){case 0:return t(l);case 1:return e(l);case 2:return r(l);case 3:return n(l);case 4:return i(l);case 5:return a(l)}var u=o[l.length];return u||(u=o[l.length]=s(l.length)),u(l)}}!function(){for(;h.length<6;)h.push(f(h.length));t.exports=p.apply(void 0,h.concat([h,f]));for(var e=0;e<h.length;++e)t.exports[e]=h[e]}()},9130:function(t,e,r){\\\"use strict\\\";var n=r(9660),i=r(9662);t.exports=function(t,e){for(var r=n(t[0],e[0]),a=1;a<t.length;++a)r=i(r,n(t[a],e[a]));return r}},2227:function(t,e,r){\\\"use strict\\\";var n=r(9660),i=r(9662),a=r(4078),o=r(8289);function s(t){return(3===t?l:4===t?u:5===t?c:f)(i,a,n,o)}function l(t,e,r,n){return function(i,a,o){var s=r(i[0],i[0]),l=n(s,a[0]),u=n(s,o[0]),c=r(a[0],a[0]),f=n(c,i[0]),h=n(c,o[0]),p=r(o[0],o[0]),d=n(p,i[0]),v=n(p,a[0]),g=t(e(v,h),e(f,l)),y=e(d,u),m=e(g,y);return m[m.length-1]}}function u(t,e,r,n){return function(i,a,o,s){var l=t(r(i[0],i[0]),r(i[1],i[1])),u=n(l,a[0]),c=n(l,o[0]),f=n(l,s[0]),h=t(r(a[0],a[0]),r(a[1],a[1])),p=n(h,i[0]),d=n(h,o[0]),v=n(h,s[0]),g=t(r(o[0],o[0]),r(o[1],o[1])),y=n(g,i[0]),m=n(g,a[0]),x=n(g,s[0]),b=t(r(s[0],s[0]),r(s[1],s[1])),_=n(b,i[0]),w=n(b,a[0]),T=n(b,o[0]),k=t(t(n(e(T,x),a[1]),t(n(e(w,v),-o[1]),n(e(m,d),s[1]))),t(n(e(w,v),i[1]),t(n(e(_,f),-a[1]),n(e(p,u),s[1])))),A=t(t(n(e(T,x),i[1]),t(n(e(_,f),-o[1]),n(e(y,c),s[1]))),t(n(e(m,d),i[1]),t(n(e(y,c),-a[1]),n(e(p,u),o[1])))),M=e(k,A);return M[M.length-1]}}function c(t,e,r,n){return function(i,a,o,s,l){var u=t(r(i[0],i[0]),t(r(i[1],i[1]),r(i[2],i[2]))),c=n(u,a[0]),f=n(u,o[0]),h=n(u,s[0]),p=n(u,l[0]),d=t(r(a[0],a[0]),t(r(a[1],a[1]),r(a[2],a[2]))),v=n(d,i[0]),g=n(d,o[0]),y=n(d,s[0]),m=n(d,l[0]),x=t(r(o[0],o[0]),t(r(o[1],o[1]),r(o[2],o[2]))),b=n(x,i[0]),_=n(x,a[0]),w=n(x,s[0]),T=n(x,l[0]),k=t(r(s[0],s[0]),t(r(s[1],s[1]),r(s[2],s[2]))),A=n(k,i[0]),M=n(k,a[0]),S=n(k,o[0]),E=n(k,l[0]),L=t(r(l[0],l[0]),t(r(l[1],l[1]),r(l[2],l[2]))),C=n(L,i[0]),P=n(L,a[0]),O=n(L,o[0]),I=n(L,s[0]),D=t(t(t(n(t(n(e(I,E),o[1]),t(n(e(O,T),-s[1]),n(e(S,w),l[1]))),a[2]),t(n(t(n(e(I,E),a[1]),t(n(e(P,m),-s[1]),n(e(M,y),l[1]))),-o[2]),n(t(n(e(O,T),a[1]),t(n(e(P,m),-o[1]),n(e(_,g),l[1]))),s[2]))),t(n(t(n(e(S,w),a[1]),t(n(e(M,y),-o[1]),n(e(_,g),s[1]))),-l[2]),t(n(t(n(e(I,E),a[1]),t(n(e(P,m),-s[1]),n(e(M,y),l[1]))),i[2]),n(t(n(e(I,E),i[1]),t(n(e(C,p),-s[1]),n(e(A,h),l[1]))),-a[2])))),t(t(n(t(n(e(P,m),i[1]),t(n(e(C,p),-a[1]),n(e(v,c),l[1]))),s[2]),t(n(t(n(e(M,y),i[1]),t(n(e(A,h),-a[1]),n(e(v,c),s[1]))),-l[2]),n(t(n(e(S,w),a[1]),t(n(e(M,y),-o[1]),n(e(_,g),s[1]))),i[2]))),t(n(t(n(e(S,w),i[1]),t(n(e(A,h),-o[1]),n(e(b,f),s[1]))),-a[2]),t(n(t(n(e(M,y),i[1]),t(n(e(A,h),-a[1]),n(e(v,c),s[1]))),o[2]),n(t(n(e(_,g),i[1]),t(n(e(b,f),-a[1]),n(e(v,c),o[1]))),-s[2]))))),z=t(t(t(n(t(n(e(I,E),o[1]),t(n(e(O,T),-s[1]),n(e(S,w),l[1]))),i[2]),n(t(n(e(I,E),i[1]),t(n(e(C,p),-s[1]),n(e(A,h),l[1]))),-o[2])),t(n(t(n(e(O,T),i[1]),t(n(e(C,p),-o[1]),n(e(b,f),l[1]))),s[2]),n(t(n(e(S,w),i[1]),t(n(e(A,h),-o[1]),n(e(b,f),s[1]))),-l[2]))),t(t(n(t(n(e(O,T),a[1]),t(n(e(P,m),-o[1]),n(e(_,g),l[1]))),i[2]),n(t(n(e(O,T),i[1]),t(n(e(C,p),-o[1]),n(e(b,f),l[1]))),-a[2])),t(n(t(n(e(P,m),i[1]),t(n(e(C,p),-a[1]),n(e(v,c),l[1]))),o[2]),n(t(n(e(_,g),i[1]),t(n(e(b,f),-a[1]),n(e(v,c),o[1]))),-l[2])))),R=e(D,z);return R[R.length-1]}}function f(t,e,r,n){return function(i,a,o,s,l,u){var c=t(t(r(i[0],i[0]),r(i[1],i[1])),t(r(i[2],i[2]),r(i[3],i[3]))),f=n(c,a[0]),h=n(c,o[0]),p=n(c,s[0]),d=n(c,l[0]),v=n(c,u[0]),g=t(t(r(a[0],a[0]),r(a[1],a[1])),t(r(a[2],a[2]),r(a[3],a[3]))),y=n(g,i[0]),m=n(g,o[0]),x=n(g,s[0]),b=n(g,l[0]),_=n(g,u[0]),w=t(t(r(o[0],o[0]),r(o[1],o[1])),t(r(o[2],o[2]),r(o[3],o[3]))),T=n(w,i[0]),k=n(w,a[0]),A=n(w,s[0]),M=n(w,l[0]),S=n(w,u[0]),E=t(t(r(s[0],s[0]),r(s[1],s[1])),t(r(s[2],s[2]),r(s[3],s[3]))),L=n(E,i[0]),C=n(E,a[0]),P=n(E,o[0]),O=n(E,l[0]),I=n(E,u[0]),D=t(t(r(l[0],l[0]),r(l[1],l[1])),t(r(l[2],l[2]),r(l[3],l[3]))),z=n(D,i[0]),R=n(D,a[0]),F=n(D,o[0]),B=n(D,s[0]),N=n(D,u[0]),j=t(t(r(u[0],u[0]),r(u[1],u[1])),t(r(u[2],u[2]),r(u[3],u[3]))),U=n(j,i[0]),V=n(j,a[0]),H=n(j,o[0]),q=n(j,s[0]),G=n(j,l[0]),Z=t(t(t(n(t(t(n(t(n(e(G,N),s[1]),t(n(e(q,I),-l[1]),n(e(B,O),u[1]))),o[2]),n(t(n(e(G,N),o[1]),t(n(e(H,S),-l[1]),n(e(F,M),u[1]))),-s[2])),t(n(t(n(e(q,I),o[1]),t(n(e(H,S),-s[1]),n(e(P,A),u[1]))),l[2]),n(t(n(e(B,O),o[1]),t(n(e(F,M),-s[1]),n(e(P,A),l[1]))),-u[2]))),a[3]),t(n(t(t(n(t(n(e(G,N),s[1]),t(n(e(q,I),-l[1]),n(e(B,O),u[1]))),a[2]),n(t(n(e(G,N),a[1]),t(n(e(V,_),-l[1]),n(e(R,b),u[1]))),-s[2])),t(n(t(n(e(q,I),a[1]),t(n(e(V,_),-s[1]),n(e(C,x),u[1]))),l[2]),n(t(n(e(B,O),a[1]),t(n(e(R,b),-s[1]),n(e(C,x),l[1]))),-u[2]))),-o[3]),n(t(t(n(t(n(e(G,N),o[1]),t(n(e(H,S),-l[1]),n(e(F,M),u[1]))),a[2]),n(t(n(e(G,N),a[1]),t(n(e(V,_),-l[1]),n(e(R,b),u[1]))),-o[2])),t(n(t(n(e(H,S),a[1]),t(n(e(V,_),-o[1]),n(e(k,m),u[1]))),l[2]),n(t(n(e(F,M),a[1]),t(n(e(R,b),-o[1]),n(e(k,m),l[1]))),-u[2]))),s[3]))),t(t(n(t(t(n(t(n(e(q,I),o[1]),t(n(e(H,S),-s[1]),n(e(P,A),u[1]))),a[2]),n(t(n(e(q,I),a[1]),t(n(e(V,_),-s[1]),n(e(C,x),u[1]))),-o[2])),t(n(t(n(e(H,S),a[1]),t(n(e(V,_),-o[1]),n(e(k,m),u[1]))),s[2]),n(t(n(e(P,A),a[1]),t(n(e(C,x),-o[1]),n(e(k,m),s[1]))),-u[2]))),-l[3]),n(t(t(n(t(n(e(B,O),o[1]),t(n(e(F,M),-s[1]),n(e(P,A),l[1]))),a[2]),n(t(n(e(B,O),a[1]),t(n(e(R,b),-s[1]),n(e(C,x),l[1]))),-o[2])),t(n(t(n(e(F,M),a[1]),t(n(e(R,b),-o[1]),n(e(k,m),l[1]))),s[2]),n(t(n(e(P,A),a[1]),t(n(e(C,x),-o[1]),n(e(k,m),s[1]))),-l[2]))),u[3])),t(n(t(t(n(t(n(e(G,N),s[1]),t(n(e(q,I),-l[1]),n(e(B,O),u[1]))),a[2]),n(t(n(e(G,N),a[1]),t(n(e(V,_),-l[1]),n(e(R,b),u[1]))),-s[2])),t(n(t(n(e(q,I),a[1]),t(n(e(V,_),-s[1]),n(e(C,x),u[1]))),l[2]),n(t(n(e(B,O),a[1]),t(n(e(R,b),-s[1]),n(e(C,x),l[1]))),-u[2]))),i[3]),n(t(t(n(t(n(e(G,N),s[1]),t(n(e(q,I),-l[1]),n(e(B,O),u[1]))),i[2]),n(t(n(e(G,N),i[1]),t(n(e(U,v),-l[1]),n(e(z,d),u[1]))),-s[2])),t(n(t(n(e(q,I),i[1]),t(n(e(U,v),-s[1]),n(e(L,p),u[1]))),l[2]),n(t(n(e(B,O),i[1]),t(n(e(z,d),-s[1]),n(e(L,p),l[1]))),-u[2]))),-a[3])))),t(t(t(n(t(t(n(t(n(e(G,N),a[1]),t(n(e(V,_),-l[1]),n(e(R,b),u[1]))),i[2]),n(t(n(e(G,N),i[1]),t(n(e(U,v),-l[1]),n(e(z,d),u[1]))),-a[2])),t(n(t(n(e(V,_),i[1]),t(n(e(U,v),-a[1]),n(e(y,f),u[1]))),l[2]),n(t(n(e(R,b),i[1]),t(n(e(z,d),-a[1]),n(e(y,f),l[1]))),-u[2]))),s[3]),n(t(t(n(t(n(e(q,I),a[1]),t(n(e(V,_),-s[1]),n(e(C,x),u[1]))),i[2]),n(t(n(e(q,I),i[1]),t(n(e(U,v),-s[1]),n(e(L,p),u[1]))),-a[2])),t(n(t(n(e(V,_),i[1]),t(n(e(U,v),-a[1]),n(e(y,f),u[1]))),s[2]),n(t(n(e(C,x),i[1]),t(n(e(L,p),-a[1]),n(e(y,f),s[1]))),-u[2]))),-l[3])),t(n(t(t(n(t(n(e(B,O),a[1]),t(n(e(R,b),-s[1]),n(e(C,x),l[1]))),i[2]),n(t(n(e(B,O),i[1]),t(n(e(z,d),-s[1]),n(e(L,p),l[1]))),-a[2])),t(n(t(n(e(R,b),i[1]),t(n(e(z,d),-a[1]),n(e(y,f),l[1]))),s[2]),n(t(n(e(C,x),i[1]),t(n(e(L,p),-a[1]),n(e(y,f),s[1]))),-l[2]))),u[3]),n(t(t(n(t(n(e(q,I),o[1]),t(n(e(H,S),-s[1]),n(e(P,A),u[1]))),a[2]),n(t(n(e(q,I),a[1]),t(n(e(V,_),-s[1]),n(e(C,x),u[1]))),-o[2])),t(n(t(n(e(H,S),a[1]),t(n(e(V,_),-o[1]),n(e(k,m),u[1]))),s[2]),n(t(n(e(P,A),a[1]),t(n(e(C,x),-o[1]),n(e(k,m),s[1]))),-u[2]))),i[3]))),t(t(n(t(t(n(t(n(e(q,I),o[1]),t(n(e(H,S),-s[1]),n(e(P,A),u[1]))),i[2]),n(t(n(e(q,I),i[1]),t(n(e(U,v),-s[1]),n(e(L,p),u[1]))),-o[2])),t(n(t(n(e(H,S),i[1]),t(n(e(U,v),-o[1]),n(e(T,h),u[1]))),s[2]),n(t(n(e(P,A),i[1]),t(n(e(L,p),-o[1]),n(e(T,h),s[1]))),-u[2]))),-a[3]),n(t(t(n(t(n(e(q,I),a[1]),t(n(e(V,_),-s[1]),n(e(C,x),u[1]))),i[2]),n(t(n(e(q,I),i[1]),t(n(e(U,v),-s[1]),n(e(L,p),u[1]))),-a[2])),t(n(t(n(e(V,_),i[1]),t(n(e(U,v),-a[1]),n(e(y,f),u[1]))),s[2]),n(t(n(e(C,x),i[1]),t(n(e(L,p),-a[1]),n(e(y,f),s[1]))),-u[2]))),o[3])),t(n(t(t(n(t(n(e(H,S),a[1]),t(n(e(V,_),-o[1]),n(e(k,m),u[1]))),i[2]),n(t(n(e(H,S),i[1]),t(n(e(U,v),-o[1]),n(e(T,h),u[1]))),-a[2])),t(n(t(n(e(V,_),i[1]),t(n(e(U,v),-a[1]),n(e(y,f),u[1]))),o[2]),n(t(n(e(k,m),i[1]),t(n(e(T,h),-a[1]),n(e(y,f),o[1]))),-u[2]))),-s[3]),n(t(t(n(t(n(e(P,A),a[1]),t(n(e(C,x),-o[1]),n(e(k,m),s[1]))),i[2]),n(t(n(e(P,A),i[1]),t(n(e(L,p),-o[1]),n(e(T,h),s[1]))),-a[2])),t(n(t(n(e(C,x),i[1]),t(n(e(L,p),-a[1]),n(e(y,f),s[1]))),o[2]),n(t(n(e(k,m),i[1]),t(n(e(T,h),-a[1]),n(e(y,f),o[1]))),-s[2]))),u[3]))))),Y=t(t(t(n(t(t(n(t(n(e(G,N),s[1]),t(n(e(q,I),-l[1]),n(e(B,O),u[1]))),o[2]),n(t(n(e(G,N),o[1]),t(n(e(H,S),-l[1]),n(e(F,M),u[1]))),-s[2])),t(n(t(n(e(q,I),o[1]),t(n(e(H,S),-s[1]),n(e(P,A),u[1]))),l[2]),n(t(n(e(B,O),o[1]),t(n(e(F,M),-s[1]),n(e(P,A),l[1]))),-u[2]))),i[3]),t(n(t(t(n(t(n(e(G,N),s[1]),t(n(e(q,I),-l[1]),n(e(B,O),u[1]))),i[2]),n(t(n(e(G,N),i[1]),t(n(e(U,v),-l[1]),n(e(z,d),u[1]))),-s[2])),t(n(t(n(e(q,I),i[1]),t(n(e(U,v),-s[1]),n(e(L,p),u[1]))),l[2]),n(t(n(e(B,O),i[1]),t(n(e(z,d),-s[1]),n(e(L,p),l[1]))),-u[2]))),-o[3]),n(t(t(n(t(n(e(G,N),o[1]),t(n(e(H,S),-l[1]),n(e(F,M),u[1]))),i[2]),n(t(n(e(G,N),i[1]),t(n(e(U,v),-l[1]),n(e(z,d),u[1]))),-o[2])),t(n(t(n(e(H,S),i[1]),t(n(e(U,v),-o[1]),n(e(T,h),u[1]))),l[2]),n(t(n(e(F,M),i[1]),t(n(e(z,d),-o[1]),n(e(T,h),l[1]))),-u[2]))),s[3]))),t(t(n(t(t(n(t(n(e(q,I),o[1]),t(n(e(H,S),-s[1]),n(e(P,A),u[1]))),i[2]),n(t(n(e(q,I),i[1]),t(n(e(U,v),-s[1]),n(e(L,p),u[1]))),-o[2])),t(n(t(n(e(H,S),i[1]),t(n(e(U,v),-o[1]),n(e(T,h),u[1]))),s[2]),n(t(n(e(P,A),i[1]),t(n(e(L,p),-o[1]),n(e(T,h),s[1]))),-u[2]))),-l[3]),n(t(t(n(t(n(e(B,O),o[1]),t(n(e(F,M),-s[1]),n(e(P,A),l[1]))),i[2]),n(t(n(e(B,O),i[1]),t(n(e(z,d),-s[1]),n(e(L,p),l[1]))),-o[2])),t(n(t(n(e(F,M),i[1]),t(n(e(z,d),-o[1]),n(e(T,h),l[1]))),s[2]),n(t(n(e(P,A),i[1]),t(n(e(L,p),-o[1]),n(e(T,h),s[1]))),-l[2]))),u[3])),t(n(t(t(n(t(n(e(G,N),o[1]),t(n(e(H,S),-l[1]),n(e(F,M),u[1]))),a[2]),n(t(n(e(G,N),a[1]),t(n(e(V,_),-l[1]),n(e(R,b),u[1]))),-o[2])),t(n(t(n(e(H,S),a[1]),t(n(e(V,_),-o[1]),n(e(k,m),u[1]))),l[2]),n(t(n(e(F,M),a[1]),t(n(e(R,b),-o[1]),n(e(k,m),l[1]))),-u[2]))),i[3]),n(t(t(n(t(n(e(G,N),o[1]),t(n(e(H,S),-l[1]),n(e(F,M),u[1]))),i[2]),n(t(n(e(G,N),i[1]),t(n(e(U,v),-l[1]),n(e(z,d),u[1]))),-o[2])),t(n(t(n(e(H,S),i[1]),t(n(e(U,v),-o[1]),n(e(T,h),u[1]))),l[2]),n(t(n(e(F,M),i[1]),t(n(e(z,d),-o[1]),n(e(T,h),l[1]))),-u[2]))),-a[3])))),t(t(t(n(t(t(n(t(n(e(G,N),a[1]),t(n(e(V,_),-l[1]),n(e(R,b),u[1]))),i[2]),n(t(n(e(G,N),i[1]),t(n(e(U,v),-l[1]),n(e(z,d),u[1]))),-a[2])),t(n(t(n(e(V,_),i[1]),t(n(e(U,v),-a[1]),n(e(y,f),u[1]))),l[2]),n(t(n(e(R,b),i[1]),t(n(e(z,d),-a[1]),n(e(y,f),l[1]))),-u[2]))),o[3]),n(t(t(n(t(n(e(H,S),a[1]),t(n(e(V,_),-o[1]),n(e(k,m),u[1]))),i[2]),n(t(n(e(H,S),i[1]),t(n(e(U,v),-o[1]),n(e(T,h),u[1]))),-a[2])),t(n(t(n(e(V,_),i[1]),t(n(e(U,v),-a[1]),n(e(y,f),u[1]))),o[2]),n(t(n(e(k,m),i[1]),t(n(e(T,h),-a[1]),n(e(y,f),o[1]))),-u[2]))),-l[3])),t(n(t(t(n(t(n(e(F,M),a[1]),t(n(e(R,b),-o[1]),n(e(k,m),l[1]))),i[2]),n(t(n(e(F,M),i[1]),t(n(e(z,d),-o[1]),n(e(T,h),l[1]))),-a[2])),t(n(t(n(e(R,b),i[1]),t(n(e(z,d),-a[1]),n(e(y,f),l[1]))),o[2]),n(t(n(e(k,m),i[1]),t(n(e(T,h),-a[1]),n(e(y,f),o[1]))),-l[2]))),u[3]),n(t(t(n(t(n(e(B,O),o[1]),t(n(e(F,M),-s[1]),n(e(P,A),l[1]))),a[2]),n(t(n(e(B,O),a[1]),t(n(e(R,b),-s[1]),n(e(C,x),l[1]))),-o[2])),t(n(t(n(e(F,M),a[1]),t(n(e(R,b),-o[1]),n(e(k,m),l[1]))),s[2]),n(t(n(e(P,A),a[1]),t(n(e(C,x),-o[1]),n(e(k,m),s[1]))),-l[2]))),i[3]))),t(t(n(t(t(n(t(n(e(B,O),o[1]),t(n(e(F,M),-s[1]),n(e(P,A),l[1]))),i[2]),n(t(n(e(B,O),i[1]),t(n(e(z,d),-s[1]),n(e(L,p),l[1]))),-o[2])),t(n(t(n(e(F,M),i[1]),t(n(e(z,d),-o[1]),n(e(T,h),l[1]))),s[2]),n(t(n(e(P,A),i[1]),t(n(e(L,p),-o[1]),n(e(T,h),s[1]))),-l[2]))),-a[3]),n(t(t(n(t(n(e(B,O),a[1]),t(n(e(R,b),-s[1]),n(e(C,x),l[1]))),i[2]),n(t(n(e(B,O),i[1]),t(n(e(z,d),-s[1]),n(e(L,p),l[1]))),-a[2])),t(n(t(n(e(R,b),i[1]),t(n(e(z,d),-a[1]),n(e(y,f),l[1]))),s[2]),n(t(n(e(C,x),i[1]),t(n(e(L,p),-a[1]),n(e(y,f),s[1]))),-l[2]))),o[3])),t(n(t(t(n(t(n(e(F,M),a[1]),t(n(e(R,b),-o[1]),n(e(k,m),l[1]))),i[2]),n(t(n(e(F,M),i[1]),t(n(e(z,d),-o[1]),n(e(T,h),l[1]))),-a[2])),t(n(t(n(e(R,b),i[1]),t(n(e(z,d),-a[1]),n(e(y,f),l[1]))),o[2]),n(t(n(e(k,m),i[1]),t(n(e(T,h),-a[1]),n(e(y,f),o[1]))),-l[2]))),-s[3]),n(t(t(n(t(n(e(P,A),a[1]),t(n(e(C,x),-o[1]),n(e(k,m),s[1]))),i[2]),n(t(n(e(P,A),i[1]),t(n(e(L,p),-o[1]),n(e(T,h),s[1]))),-a[2])),t(n(t(n(e(C,x),i[1]),t(n(e(L,p),-a[1]),n(e(y,f),s[1]))),o[2]),n(t(n(e(k,m),i[1]),t(n(e(T,h),-a[1]),n(e(y,f),o[1]))),-s[2]))),l[3]))))),W=e(Z,Y);return W[W.length-1]}}var h=[function(){return 0},function(){return 0},function(){return 0}];function p(t){var e=h[t.length];return e||(e=h[t.length]=s(t.length)),e.apply(void 0,t)}function d(t,e,r,n,i,a,o,s){return function(e,r,l,u,c,f){switch(arguments.length){case 0:case 1:return 0;case 2:return n(e,r);case 3:return i(e,r,l);case 4:return a(e,r,l,u);case 5:return o(e,r,l,u,c);case 6:return s(e,r,l,u,c,f)}for(var h=new Array(arguments.length),p=0;p<arguments.length;++p)h[p]=arguments[p];return t(h)}}!function(){for(;h.length<=6;)h.push(s(h.length));t.exports=d.apply(void 0,[p].concat(h));for(var e=0;e<=6;++e)t.exports[e]=h[e]}()},6606:function(t,e,r){\\\"use strict\\\";var n=r(8167);function i(t){return(2===t?a:3===t?o:4===t?s:5===t?l:u)(t<6?n[t]:n)}function a(t){return function(e,r){return[t([[+r[0],+e[0][1]],[+r[1],+e[1][1]]]),t([[+e[0][0],+r[0]],[+e[1][0],+r[1]]]),t(e)]}}function o(t){return function(e,r){return[t([[+r[0],+e[0][1],+e[0][2]],[+r[1],+e[1][1],+e[1][2]],[+r[2],+e[2][1],+e[2][2]]]),t([[+e[0][0],+r[0],+e[0][2]],[+e[1][0],+r[1],+e[1][2]],[+e[2][0],+r[2],+e[2][2]]]),t([[+e[0][0],+e[0][1],+r[0]],[+e[1][0],+e[1][1],+r[1]],[+e[2][0],+e[2][1],+r[2]]]),t(e)]}}function s(t){return function(e,r){return[t([[+r[0],+e[0][1],+e[0][2],+e[0][3]],[+r[1],+e[1][1],+e[1][2],+e[1][3]],[+r[2],+e[2][1],+e[2][2],+e[2][3]],[+r[3],+e[3][1],+e[3][2],+e[3][3]]]),t([[+e[0][0],+r[0],+e[0][2],+e[0][3]],[+e[1][0],+r[1],+e[1][2],+e[1][3]],[+e[2][0],+r[2],+e[2][2],+e[2][3]],[+e[3][0],+r[3],+e[3][2],+e[3][3]]]),t([[+e[0][0],+e[0][1],+r[0],+e[0][3]],[+e[1][0],+e[1][1],+r[1],+e[1][3]],[+e[2][0],+e[2][1],+r[2],+e[2][3]],[+e[3][0],+e[3][1],+r[3],+e[3][3]]]),t([[+e[0][0],+e[0][1],+e[0][2],+r[0]],[+e[1][0],+e[1][1],+e[1][2],+r[1]],[+e[2][0],+e[2][1],+e[2][2],+r[2]],[+e[3][0],+e[3][1],+e[3][2],+r[3]]]),t(e)]}}function l(t){return function(e,r){return[t([[+r[0],+e[0][1],+e[0][2],+e[0][3],+e[0][4]],[+r[1],+e[1][1],+e[1][2],+e[1][3],+e[1][4]],[+r[2],+e[2][1],+e[2][2],+e[2][3],+e[2][4]],[+r[3],+e[3][1],+e[3][2],+e[3][3],+e[3][4]],[+r[4],+e[4][1],+e[4][2],+e[4][3],+e[4][4]]]),t([[+e[0][0],+r[0],+e[0][2],+e[0][3],+e[0][4]],[+e[1][0],+r[1],+e[1][2],+e[1][3],+e[1][4]],[+e[2][0],+r[2],+e[2][2],+e[2][3],+e[2][4]],[+e[3][0],+r[3],+e[3][2],+e[3][3],+e[3][4]],[+e[4][0],+r[4],+e[4][2],+e[4][3],+e[4][4]]]),t([[+e[0][0],+e[0][1],+r[0],+e[0][3],+e[0][4]],[+e[1][0],+e[1][1],+r[1],+e[1][3],+e[1][4]],[+e[2][0],+e[2][1],+r[2],+e[2][3],+e[2][4]],[+e[3][0],+e[3][1],+r[3],+e[3][3],+e[3][4]],[+e[4][0],+e[4][1],+r[4],+e[4][3],+e[4][4]]]),t([[+e[0][0],+e[0][1],+e[0][2],+r[0],+e[0][4]],[+e[1][0],+e[1][1],+e[1][2],+r[1],+e[1][4]],[+e[2][0],+e[2][1],+e[2][2],+r[2],+e[2][4]],[+e[3][0],+e[3][1],+e[3][2],+r[3],+e[3][4]],[+e[4][0],+e[4][1],+e[4][2],+r[4],+e[4][4]]]),t([[+e[0][0],+e[0][1],+e[0][2],+e[0][3],+r[0]],[+e[1][0],+e[1][1],+e[1][2],+e[1][3],+r[1]],[+e[2][0],+e[2][1],+e[2][2],+e[2][3],+r[2]],[+e[3][0],+e[3][1],+e[3][2],+e[3][3],+r[3]],[+e[4][0],+e[4][1],+e[4][2],+e[4][3],+r[4]]]),t(e)]}}function u(t){return function(e,r){return[t([[+r[0],+e[0][1],+e[0][2],+e[0][3],+e[0][4],+e[0][5]],[+r[1],+e[1][1],+e[1][2],+e[1][3],+e[1][4],+e[1][5]],[+r[2],+e[2][1],+e[2][2],+e[2][3],+e[2][4],+e[2][5]],[+r[3],+e[3][1],+e[3][2],+e[3][3],+e[3][4],+e[3][5]],[+r[4],+e[4][1],+e[4][2],+e[4][3],+e[4][4],+e[4][5]],[+r[5],+e[5][1],+e[5][2],+e[5][3],+e[5][4],+e[5][5]]]),t([[+e[0][0],+r[0],+e[0][2],+e[0][3],+e[0][4],+e[0][5]],[+e[1][0],+r[1],+e[1][2],+e[1][3],+e[1][4],+e[1][5]],[+e[2][0],+r[2],+e[2][2],+e[2][3],+e[2][4],+e[2][5]],[+e[3][0],+r[3],+e[3][2],+e[3][3],+e[3][4],+e[3][5]],[+e[4][0],+r[4],+e[4][2],+e[4][3],+e[4][4],+e[4][5]],[+e[5][0],+r[5],+e[5][2],+e[5][3],+e[5][4],+e[5][5]]]),t([[+e[0][0],+e[0][1],+r[0],+e[0][3],+e[0][4],+e[0][5]],[+e[1][0],+e[1][1],+r[1],+e[1][3],+e[1][4],+e[1][5]],[+e[2][0],+e[2][1],+r[2],+e[2][3],+e[2][4],+e[2][5]],[+e[3][0],+e[3][1],+r[3],+e[3][3],+e[3][4],+e[3][5]],[+e[4][0],+e[4][1],+r[4],+e[4][3],+e[4][4],+e[4][5]],[+e[5][0],+e[5][1],+r[5],+e[5][3],+e[5][4],+e[5][5]]]),t([[+e[0][0],+e[0][1],+e[0][2],+r[0],+e[0][4],+e[0][5]],[+e[1][0],+e[1][1],+e[1][2],+r[1],+e[1][4],+e[1][5]],[+e[2][0],+e[2][1],+e[2][2],+r[2],+e[2][4],+e[2][5]],[+e[3][0],+e[3][1],+e[3][2],+r[3],+e[3][4],+e[3][5]],[+e[4][0],+e[4][1],+e[4][2],+r[4],+e[4][4],+e[4][5]],[+e[5][0],+e[5][1],+e[5][2],+r[5],+e[5][4],+e[5][5]]]),t([[+e[0][0],+e[0][1],+e[0][2],+e[0][3],+r[0],+e[0][5]],[+e[1][0],+e[1][1],+e[1][2],+e[1][3],+r[1],+e[1][5]],[+e[2][0],+e[2][1],+e[2][2],+e[2][3],+r[2],+e[2][5]],[+e[3][0],+e[3][1],+e[3][2],+e[3][3],+r[3],+e[3][5]],[+e[4][0],+e[4][1],+e[4][2],+e[4][3],+r[4],+e[4][5]],[+e[5][0],+e[5][1],+e[5][2],+e[5][3],+r[5],+e[5][5]]]),t([[+e[0][0],+e[0][1],+e[0][2],+e[0][3],+e[0][4],+r[0]],[+e[1][0],+e[1][1],+e[1][2],+e[1][3],+e[1][4],+r[1]],[+e[2][0],+e[2][1],+e[2][2],+e[2][3],+e[2][4],+r[2]],[+e[3][0],+e[3][1],+e[3][2],+e[3][3],+e[3][4],+r[3]],[+e[4][0],+e[4][1],+e[4][2],+e[4][3],+e[4][4],+r[4]],[+e[5][0],+e[5][1],+e[5][2],+e[5][3],+e[5][4],+r[5]]]),t(e)]}}var c=[function(){return[[0]]},function(t,e){return[[e[0]],[t[0][0]]]}];function f(t,e,r,n,i,a,o,s){return function(l,u){switch(l.length){case 0:return t(l,u);case 1:return e(l,u);case 2:return r(l,u);case 3:return n(l,u);case 4:return i(l,u);case 5:return a(l,u)}var c=o[l.length];return c||(c=o[l.length]=s(l.length)),c(l,u)}}!function(){for(;c.length<6;)c.push(i(c.length));t.exports=f.apply(void 0,c.concat([c,i]));for(var e=0;e<6;++e)t.exports[e]=c[e]}()},417:function(t,e,r){\\\"use strict\\\";var n=r(9660),i=r(9662),a=r(8289),o=r(4078);function s(t,e,r,n){return function(r,i,a){var o=t(t(e(i[1],a[0]),e(-a[1],i[0])),t(e(r[1],i[0]),e(-i[1],r[0]))),s=t(e(r[1],a[0]),e(-a[1],r[0])),l=n(o,s);return l[l.length-1]}}function l(t,e,r,n){return function(i,a,o,s){var l=t(t(r(t(e(o[1],s[0]),e(-s[1],o[0])),a[2]),t(r(t(e(a[1],s[0]),e(-s[1],a[0])),-o[2]),r(t(e(a[1],o[0]),e(-o[1],a[0])),s[2]))),t(r(t(e(a[1],s[0]),e(-s[1],a[0])),i[2]),t(r(t(e(i[1],s[0]),e(-s[1],i[0])),-a[2]),r(t(e(i[1],a[0]),e(-a[1],i[0])),s[2])))),u=t(t(r(t(e(o[1],s[0]),e(-s[1],o[0])),i[2]),t(r(t(e(i[1],s[0]),e(-s[1],i[0])),-o[2]),r(t(e(i[1],o[0]),e(-o[1],i[0])),s[2]))),t(r(t(e(a[1],o[0]),e(-o[1],a[0])),i[2]),t(r(t(e(i[1],o[0]),e(-o[1],i[0])),-a[2]),r(t(e(i[1],a[0]),e(-a[1],i[0])),o[2])))),c=n(l,u);return c[c.length-1]}}function u(t,e,r,n){return function(i,a,o,s,l){var u=t(t(t(r(t(r(t(e(s[1],l[0]),e(-l[1],s[0])),o[2]),t(r(t(e(o[1],l[0]),e(-l[1],o[0])),-s[2]),r(t(e(o[1],s[0]),e(-s[1],o[0])),l[2]))),a[3]),t(r(t(r(t(e(s[1],l[0]),e(-l[1],s[0])),a[2]),t(r(t(e(a[1],l[0]),e(-l[1],a[0])),-s[2]),r(t(e(a[1],s[0]),e(-s[1],a[0])),l[2]))),-o[3]),r(t(r(t(e(o[1],l[0]),e(-l[1],o[0])),a[2]),t(r(t(e(a[1],l[0]),e(-l[1],a[0])),-o[2]),r(t(e(a[1],o[0]),e(-o[1],a[0])),l[2]))),s[3]))),t(r(t(r(t(e(o[1],s[0]),e(-s[1],o[0])),a[2]),t(r(t(e(a[1],s[0]),e(-s[1],a[0])),-o[2]),r(t(e(a[1],o[0]),e(-o[1],a[0])),s[2]))),-l[3]),t(r(t(r(t(e(s[1],l[0]),e(-l[1],s[0])),a[2]),t(r(t(e(a[1],l[0]),e(-l[1],a[0])),-s[2]),r(t(e(a[1],s[0]),e(-s[1],a[0])),l[2]))),i[3]),r(t(r(t(e(s[1],l[0]),e(-l[1],s[0])),i[2]),t(r(t(e(i[1],l[0]),e(-l[1],i[0])),-s[2]),r(t(e(i[1],s[0]),e(-s[1],i[0])),l[2]))),-a[3])))),t(t(r(t(r(t(e(a[1],l[0]),e(-l[1],a[0])),i[2]),t(r(t(e(i[1],l[0]),e(-l[1],i[0])),-a[2]),r(t(e(i[1],a[0]),e(-a[1],i[0])),l[2]))),s[3]),t(r(t(r(t(e(a[1],s[0]),e(-s[1],a[0])),i[2]),t(r(t(e(i[1],s[0]),e(-s[1],i[0])),-a[2]),r(t(e(i[1],a[0]),e(-a[1],i[0])),s[2]))),-l[3]),r(t(r(t(e(o[1],s[0]),e(-s[1],o[0])),a[2]),t(r(t(e(a[1],s[0]),e(-s[1],a[0])),-o[2]),r(t(e(a[1],o[0]),e(-o[1],a[0])),s[2]))),i[3]))),t(r(t(r(t(e(o[1],s[0]),e(-s[1],o[0])),i[2]),t(r(t(e(i[1],s[0]),e(-s[1],i[0])),-o[2]),r(t(e(i[1],o[0]),e(-o[1],i[0])),s[2]))),-a[3]),t(r(t(r(t(e(a[1],s[0]),e(-s[1],a[0])),i[2]),t(r(t(e(i[1],s[0]),e(-s[1],i[0])),-a[2]),r(t(e(i[1],a[0]),e(-a[1],i[0])),s[2]))),o[3]),r(t(r(t(e(a[1],o[0]),e(-o[1],a[0])),i[2]),t(r(t(e(i[1],o[0]),e(-o[1],i[0])),-a[2]),r(t(e(i[1],a[0]),e(-a[1],i[0])),o[2]))),-s[3]))))),c=t(t(t(r(t(r(t(e(s[1],l[0]),e(-l[1],s[0])),o[2]),t(r(t(e(o[1],l[0]),e(-l[1],o[0])),-s[2]),r(t(e(o[1],s[0]),e(-s[1],o[0])),l[2]))),i[3]),r(t(r(t(e(s[1],l[0]),e(-l[1],s[0])),i[2]),t(r(t(e(i[1],l[0]),e(-l[1],i[0])),-s[2]),r(t(e(i[1],s[0]),e(-s[1],i[0])),l[2]))),-o[3])),t(r(t(r(t(e(o[1],l[0]),e(-l[1],o[0])),i[2]),t(r(t(e(i[1],l[0]),e(-l[1],i[0])),-o[2]),r(t(e(i[1],o[0]),e(-o[1],i[0])),l[2]))),s[3]),r(t(r(t(e(o[1],s[0]),e(-s[1],o[0])),i[2]),t(r(t(e(i[1],s[0]),e(-s[1],i[0])),-o[2]),r(t(e(i[1],o[0]),e(-o[1],i[0])),s[2]))),-l[3]))),t(t(r(t(r(t(e(o[1],l[0]),e(-l[1],o[0])),a[2]),t(r(t(e(a[1],l[0]),e(-l[1],a[0])),-o[2]),r(t(e(a[1],o[0]),e(-o[1],a[0])),l[2]))),i[3]),r(t(r(t(e(o[1],l[0]),e(-l[1],o[0])),i[2]),t(r(t(e(i[1],l[0]),e(-l[1],i[0])),-o[2]),r(t(e(i[1],o[0]),e(-o[1],i[0])),l[2]))),-a[3])),t(r(t(r(t(e(a[1],l[0]),e(-l[1],a[0])),i[2]),t(r(t(e(i[1],l[0]),e(-l[1],i[0])),-a[2]),r(t(e(i[1],a[0]),e(-a[1],i[0])),l[2]))),o[3]),r(t(r(t(e(a[1],o[0]),e(-o[1],a[0])),i[2]),t(r(t(e(i[1],o[0]),e(-o[1],i[0])),-a[2]),r(t(e(i[1],a[0]),e(-a[1],i[0])),o[2]))),-l[3])))),f=n(u,c);return f[f.length-1]}}function c(t){return(3===t?s:4===t?l:u)(i,n,a,o)}var f=c(3),h=c(4),p=[function(){return 0},function(){return 0},function(t,e){return e[0]-t[0]},function(t,e,r){var n,i=(t[1]-r[1])*(e[0]-r[0]),a=(t[0]-r[0])*(e[1]-r[1]),o=i-a;if(i>0){if(a<=0)return o;n=i+a}else{if(!(i<0))return o;if(a>=0)return o;n=-(i+a)}var s=33306690738754716e-32*n;return o>=s||o<=-s?o:f(t,e,r)},function(t,e,r,n){var i=t[0]-n[0],a=e[0]-n[0],o=r[0]-n[0],s=t[1]-n[1],l=e[1]-n[1],u=r[1]-n[1],c=t[2]-n[2],f=e[2]-n[2],p=r[2]-n[2],d=a*u,v=o*l,g=o*s,y=i*u,m=i*l,x=a*s,b=c*(d-v)+f*(g-y)+p*(m-x),_=7771561172376103e-31*((Math.abs(d)+Math.abs(v))*Math.abs(c)+(Math.abs(g)+Math.abs(y))*Math.abs(f)+(Math.abs(m)+Math.abs(x))*Math.abs(p));return b>_||-b>_?b:h(t,e,r,n)}];function d(t){var e=p[t.length];return e||(e=p[t.length]=c(t.length)),e.apply(void 0,t)}function v(t,e,r,n,i,a,o){return function(e,r,s,l,u){switch(arguments.length){case 0:case 1:return 0;case 2:return n(e,r);case 3:return i(e,r,s);case 4:return a(e,r,s,l);case 5:return o(e,r,s,l,u)}for(var c=new Array(arguments.length),f=0;f<arguments.length;++f)c[f]=arguments[f];return t(c)}}!function(){for(;p.length<=5;)p.push(c(p.length));t.exports=v.apply(void 0,[d].concat(p));for(var e=0;e<=5;++e)t.exports[e]=p[e]}()},2019:function(t,e,r){\\\"use strict\\\";var n=r(9662),i=r(8289);t.exports=function(t,e){if(1===t.length)return i(e,t[0]);if(1===e.length)return i(t,e[0]);if(0===t.length||0===e.length)return[0];var r=[0];if(t.length<e.length)for(var a=0;a<t.length;++a)r=n(r,i(e,t[a]));else for(a=0;a<e.length;++a)r=n(r,i(t,e[a]));return r}},8289:function(t,e,r){\\\"use strict\\\";var n=r(9660),i=r(87);t.exports=function(t,e){var r=t.length;if(1===r){var a=n(t[0],e);return a[0]?a:[a[1]]}var o=new Array(2*r),s=[.1,.1],l=[.1,.1],u=0;n(t[0],e,s),s[0]&&(o[u++]=s[0]);for(var c=1;c<r;++c){n(t[c],e,l);var f=s[1];i(f,l[0],s),s[0]&&(o[u++]=s[0]);var h=l[1],p=s[1],d=h+p,v=p-(d-h);s[1]=d,v&&(o[u++]=v)}return s[1]&&(o[u++]=s[1]),0===u&&(o[u++]=0),o.length=u,o}},4434:function(t,e,r){\\\"use strict\\\";t.exports=function(t,e,r,i){var a=n(t,r,i),o=n(e,r,i);if(a>0&&o>0||a<0&&o<0)return!1;var s=n(r,t,e),l=n(i,t,e);return!(s>0&&l>0||s<0&&l<0)&&(0!==a||0!==o||0!==s||0!==l||function(t,e,r,n){for(var i=0;i<2;++i){var a=t[i],o=e[i],s=Math.min(a,o),l=Math.max(a,o),u=r[i],c=n[i],f=Math.min(u,c);if(Math.max(u,c)<s||l<f)return!1}return!0}(t,e,r,i))};var n=r(417)[3]},4078:function(t){\\\"use strict\\\";t.exports=function(t,e){var r=0|t.length,n=0|e.length;if(1===r&&1===n)return function(t,e){var r=t+e,n=r-t,i=t-(r-n)+(e-n);return i?[i,r]:[r]}(t[0],-e[0]);var i,a,o=new Array(r+n),s=0,l=0,u=0,c=Math.abs,f=t[l],h=c(f),p=-e[u],d=c(p);h<d?(a=f,(l+=1)<r&&(h=c(f=t[l]))):(a=p,(u+=1)<n&&(d=c(p=-e[u]))),l<r&&h<d||u>=n?(i=f,(l+=1)<r&&(h=c(f=t[l]))):(i=p,(u+=1)<n&&(d=c(p=-e[u])));for(var v,g,y=i+a,m=y-i,x=a-m,b=x,_=y;l<r&&u<n;)h<d?(i=f,(l+=1)<r&&(h=c(f=t[l]))):(i=p,(u+=1)<n&&(d=c(p=-e[u]))),(x=(a=b)-(m=(y=i+a)-i))&&(o[s++]=x),b=_-((v=_+y)-(g=v-_))+(y-g),_=v;for(;l<r;)(x=(a=b)-(m=(y=(i=f)+a)-i))&&(o[s++]=x),b=_-((v=_+y)-(g=v-_))+(y-g),_=v,(l+=1)<r&&(f=t[l]);for(;u<n;)(x=(a=b)-(m=(y=(i=p)+a)-i))&&(o[s++]=x),b=_-((v=_+y)-(g=v-_))+(y-g),_=v,(u+=1)<n&&(p=-e[u]);return b&&(o[s++]=b),_&&(o[s++]=_),s||(o[s++]=0),o.length=s,o}},9662:function(t){\\\"use strict\\\";t.exports=function(t,e){var r=0|t.length,n=0|e.length;if(1===r&&1===n)return function(t,e){var r=t+e,n=r-t,i=t-(r-n)+(e-n);return i?[i,r]:[r]}(t[0],e[0]);var i,a,o=new Array(r+n),s=0,l=0,u=0,c=Math.abs,f=t[l],h=c(f),p=e[u],d=c(p);h<d?(a=f,(l+=1)<r&&(h=c(f=t[l]))):(a=p,(u+=1)<n&&(d=c(p=e[u]))),l<r&&h<d||u>=n?(i=f,(l+=1)<r&&(h=c(f=t[l]))):(i=p,(u+=1)<n&&(d=c(p=e[u])));for(var v,g,y=i+a,m=y-i,x=a-m,b=x,_=y;l<r&&u<n;)h<d?(i=f,(l+=1)<r&&(h=c(f=t[l]))):(i=p,(u+=1)<n&&(d=c(p=e[u]))),(x=(a=b)-(m=(y=i+a)-i))&&(o[s++]=x),b=_-((v=_+y)-(g=v-_))+(y-g),_=v;for(;l<r;)(x=(a=b)-(m=(y=(i=f)+a)-i))&&(o[s++]=x),b=_-((v=_+y)-(g=v-_))+(y-g),_=v,(l+=1)<r&&(f=t[l]);for(;u<n;)(x=(a=b)-(m=(y=(i=p)+a)-i))&&(o[s++]=x),b=_-((v=_+y)-(g=v-_))+(y-g),_=v,(u+=1)<n&&(p=e[u]);return b&&(o[s++]=b),_&&(o[s++]=_),s||(o[s++]=0),o.length=s,o}},8691:function(t,e,r){\\\"use strict\\\";t.exports=function(t){return i(n(t))};var n=r(2692),i=r(7037)},7212:function(t,e,r){\\\"use strict\\\";t.exports=function(t,e,r,s){if(r=r||0,void 0===s&&(s=function(t){for(var e=t.length,r=0,n=0;n<e;++n)r=0|Math.max(r,t[n].length);return r-1}(t)),0===t.length||s<1)return{cells:[],vertexIds:[],vertexWeights:[]};var l=function(t,e){for(var r=t.length,n=i.mallocUint8(r),a=0;a<r;++a)n[a]=t[a]<e|0;return n}(e,+r),u=function(t,e){for(var r=t.length,o=e*(e+1)/2*r|0,s=i.mallocUint32(2*o),l=0,u=0;u<r;++u)for(var c=t[u],f=(e=c.length,0);f<e;++f)for(var h=0;h<f;++h){var p=c[h],d=c[f];s[l++]=0|Math.min(p,d),s[l++]=0|Math.max(p,d)}a(n(s,[l/2|0,2]));var v=2;for(u=2;u<l;u+=2)s[u-2]===s[u]&&s[u-1]===s[u+1]||(s[v++]=s[u],s[v++]=s[u+1]);return n(s,[v/2|0,2])}(t,s),c=function(t,e,r,a){for(var o=t.data,s=t.shape[0],l=i.mallocDouble(s),u=0,c=0;c<s;++c){var f=o[2*c],h=o[2*c+1];if(r[f]!==r[h]){var p=e[f],d=e[h];o[2*u]=f,o[2*u+1]=h,l[u++]=(d-a)/(d-p)}}return t.shape[0]=u,n(l,[u])}(u,e,l,+r),f=function(t,e){var r=i.mallocInt32(2*e),n=t.shape[0],a=t.data;r[0]=0;for(var o=0,s=0;s<n;++s){var l=a[2*s];if(l!==o){for(r[2*o+1]=s;++o<l;)r[2*o]=s,r[2*o+1]=s;r[2*o]=s}}for(r[2*o+1]=n;++o<e;)r[2*o]=r[2*o+1]=n;return r}(u,0|e.length),h=o(s)(t,u.data,f,l),p=function(t){for(var e=0|t.shape[0],r=t.data,n=new Array(e),i=0;i<e;++i)n[i]=[r[2*i],r[2*i+1]];return n}(u),d=[].slice.call(c.data,0,c.shape[0]);return i.free(l),i.free(u.data),i.free(c.data),i.free(f),{cells:h,vertexIds:p,vertexWeights:d}};var n=r(5050),i=r(5306),a=r(8729),o=r(1168)},1168:function(t){\\\"use strict\\\";t.exports=function(t){return e[t]()};var e=[function(){return function(t,e,r,n){for(var i=t.length,a=0;a<i;++a)t[a].length;return[]}},function(){function t(t,e,r,n){for(var i=0|Math.min(r,n),a=0|Math.max(r,n),o=t[2*i],s=t[2*i+1];o<s;){var l=o+s>>1,u=e[2*l+1];if(u===a)return l;a<u?s=l:o=l+1}return o}return function(e,r,n,i){for(var a=e.length,o=[],s=0;s<a;++s){var l=e[s];if(2===l.length){var u=(i[l[0]]<<0)+(i[l[1]]<<1);if(0===u||3===u)continue;switch(u){case 0:case 3:break;case 1:o.push([t(n,r,l[0],l[1])]);break;case 2:o.push([t(n,r,l[1],l[0])])}}}return o}},function(){function t(t,e,r,n){for(var i=0|Math.min(r,n),a=0|Math.max(r,n),o=t[2*i],s=t[2*i+1];o<s;){var l=o+s>>1,u=e[2*l+1];if(u===a)return l;a<u?s=l:o=l+1}return o}return function(e,r,n,i){for(var a=e.length,o=[],s=0;s<a;++s){var l=e[s],u=l.length;if(3===u){if(0==(c=(i[l[0]]<<0)+(i[l[1]]<<1)+(i[l[2]]<<2))||7===c)continue;switch(c){case 0:case 7:break;case 1:o.push([t(n,r,l[0],l[2]),t(n,r,l[0],l[1])]);break;case 2:o.push([t(n,r,l[1],l[0]),t(n,r,l[1],l[2])]);break;case 3:o.push([t(n,r,l[0],l[2]),t(n,r,l[1],l[2])]);break;case 4:o.push([t(n,r,l[2],l[1]),t(n,r,l[2],l[0])]);break;case 5:o.push([t(n,r,l[2],l[1]),t(n,r,l[0],l[1])]);break;case 6:o.push([t(n,r,l[1],l[0]),t(n,r,l[2],l[0])])}}else if(2===u){var c;if(0==(c=(i[l[0]]<<0)+(i[l[1]]<<1))||3===c)continue;switch(c){case 0:case 3:break;case 1:o.push([t(n,r,l[0],l[1])]);break;case 2:o.push([t(n,r,l[1],l[0])])}}}return o}},function(){function t(t,e,r,n){for(var i=0|Math.min(r,n),a=0|Math.max(r,n),o=t[2*i],s=t[2*i+1];o<s;){var l=o+s>>1,u=e[2*l+1];if(u===a)return l;a<u?s=l:o=l+1}return o}return function(e,r,n,i){for(var a=e.length,o=[],s=0;s<a;++s){var l=e[s],u=l.length;if(4===u){if(0==(c=(i[l[0]]<<0)+(i[l[1]]<<1)+(i[l[2]]<<2)+(i[l[3]]<<3))||15===c)continue;switch(c){case 0:case 15:break;case 1:o.push([t(n,r,l[0],l[1]),t(n,r,l[0],l[2]),t(n,r,l[0],l[3])]);break;case 2:o.push([t(n,r,l[1],l[2]),t(n,r,l[1],l[0]),t(n,r,l[1],l[3])]);break;case 3:o.push([t(n,r,l[1],l[2]),t(n,r,l[0],l[2]),t(n,r,l[0],l[3])],[t(n,r,l[1],l[3]),t(n,r,l[1],l[2]),t(n,r,l[0],l[3])]);break;case 4:o.push([t(n,r,l[2],l[0]),t(n,r,l[2],l[1]),t(n,r,l[2],l[3])]);break;case 5:o.push([t(n,r,l[0],l[1]),t(n,r,l[2],l[1]),t(n,r,l[0],l[3])],[t(n,r,l[2],l[1]),t(n,r,l[2],l[3]),t(n,r,l[0],l[3])]);break;case 6:o.push([t(n,r,l[2],l[0]),t(n,r,l[1],l[0]),t(n,r,l[1],l[3])],[t(n,r,l[2],l[3]),t(n,r,l[2],l[0]),t(n,r,l[1],l[3])]);break;case 7:o.push([t(n,r,l[0],l[3]),t(n,r,l[1],l[3]),t(n,r,l[2],l[3])]);break;case 8:o.push([t(n,r,l[3],l[1]),t(n,r,l[3],l[0]),t(n,r,l[3],l[2])]);break;case 9:o.push([t(n,r,l[3],l[1]),t(n,r,l[0],l[1]),t(n,r,l[0],l[2])],[t(n,r,l[3],l[2]),t(n,r,l[3],l[1]),t(n,r,l[0],l[2])]);break;case 10:o.push([t(n,r,l[1],l[0]),t(n,r,l[3],l[0]),t(n,r,l[1],l[2])],[t(n,r,l[3],l[0]),t(n,r,l[3],l[2]),t(n,r,l[1],l[2])]);break;case 11:o.push([t(n,r,l[1],l[2]),t(n,r,l[0],l[2]),t(n,r,l[3],l[2])]);break;case 12:o.push([t(n,r,l[3],l[0]),t(n,r,l[2],l[0]),t(n,r,l[2],l[1])],[t(n,r,l[3],l[1]),t(n,r,l[3],l[0]),t(n,r,l[2],l[1])]);break;case 13:o.push([t(n,r,l[0],l[1]),t(n,r,l[2],l[1]),t(n,r,l[3],l[1])]);break;case 14:o.push([t(n,r,l[2],l[0]),t(n,r,l[1],l[0]),t(n,r,l[3],l[0])])}}else if(3===u){if(0==(c=(i[l[0]]<<0)+(i[l[1]]<<1)+(i[l[2]]<<2))||7===c)continue;switch(c){case 0:case 7:break;case 1:o.push([t(n,r,l[0],l[2]),t(n,r,l[0],l[1])]);break;case 2:o.push([t(n,r,l[1],l[0]),t(n,r,l[1],l[2])]);break;case 3:o.push([t(n,r,l[0],l[2]),t(n,r,l[1],l[2])]);break;case 4:o.push([t(n,r,l[2],l[1]),t(n,r,l[2],l[0])]);break;case 5:o.push([t(n,r,l[2],l[1]),t(n,r,l[0],l[1])]);break;case 6:o.push([t(n,r,l[1],l[0]),t(n,r,l[2],l[0])])}}else if(2===u){var c;if(0==(c=(i[l[0]]<<0)+(i[l[1]]<<1))||3===c)continue;switch(c){case 0:case 3:break;case 1:o.push([t(n,r,l[0],l[1])]);break;case 2:o.push([t(n,r,l[1],l[0])])}}}return o}}]},8211:function(t,e,r){\\\"use strict\\\";r(2288),r(1731),e.H=function(t,e){var r=t.length,n=t.length-e.length,i=Math.min;if(n)return n;switch(r){case 0:return 0;case 1:return t[0]-e[0];case 2:return(s=t[0]+t[1]-e[0]-e[1])||i(t[0],t[1])-i(e[0],e[1]);case 3:var a=t[0]+t[1],o=e[0]+e[1];if(s=a+t[2]-(o+e[2]))return s;var s,l=i(t[0],t[1]),u=i(e[0],e[1]);return(s=i(l,t[2])-i(u,e[2]))||i(l+t[2],a)-i(u+e[2],o);default:var c=t.slice(0);c.sort();var f=e.slice(0);f.sort();for(var h=0;h<r;++h)if(n=c[h]-f[h])return n;return 0}}},9392:function(t,e){\\\"use strict\\\";function r(t){var e=32;return(t&=-t)&&e--,65535&t&&(e-=16),16711935&t&&(e-=8),252645135&t&&(e-=4),858993459&t&&(e-=2),1431655765&t&&(e-=1),e}e.INT_BITS=32,e.INT_MAX=2147483647,e.INT_MIN=-1<<31,e.sign=function(t){return(t>0)-(t<0)},e.abs=function(t){var e=t>>31;return(t^e)-e},e.min=function(t,e){return e^(t^e)&-(t<e)},e.max=function(t,e){return t^(t^e)&-(t<e)},e.isPow2=function(t){return!(t&t-1||!t)},e.log2=function(t){var e,r;return e=(t>65535)<<4,e|=r=((t>>>=e)>255)<<3,e|=r=((t>>>=r)>15)<<2,(e|=r=((t>>>=r)>3)<<1)|(t>>>=r)>>1},e.log10=function(t){return t>=1e9?9:t>=1e8?8:t>=1e7?7:t>=1e6?6:t>=1e5?5:t>=1e4?4:t>=1e3?3:t>=100?2:t>=10?1:0},e.popCount=function(t){return 16843009*((t=(858993459&(t-=t>>>1&1431655765))+(t>>>2&858993459))+(t>>>4)&252645135)>>>24},e.countTrailingZeros=r,e.nextPow2=function(t){return t+=0===t,--t,t|=t>>>1,t|=t>>>2,t|=t>>>4,1+((t|=t>>>8)|t>>>16)},e.prevPow2=function(t){return t|=t>>>1,t|=t>>>2,t|=t>>>4,t|=t>>>8,(t|=t>>>16)-(t>>>1)},e.parity=function(t){return t^=t>>>16,t^=t>>>8,t^=t>>>4,27030>>>(t&=15)&1};var n=new Array(256);!function(t){for(var e=0;e<256;++e){var r=e,n=e,i=7;for(r>>>=1;r;r>>>=1)n<<=1,n|=1&r,--i;t[e]=n<<i&255}}(n),e.reverse=function(t){return n[255&t]<<24|n[t>>>8&255]<<16|n[t>>>16&255]<<8|n[t>>>24&255]},e.interleave2=function(t,e){return(t=1431655765&((t=858993459&((t=252645135&((t=16711935&((t&=65535)|t<<8))|t<<4))|t<<2))|t<<1))|(e=1431655765&((e=858993459&((e=252645135&((e=16711935&((e&=65535)|e<<8))|e<<4))|e<<2))|e<<1))<<1},e.deinterleave2=function(t,e){return(t=65535&((t=16711935&((t=252645135&((t=858993459&((t=t>>>e&1431655765)|t>>>1))|t>>>2))|t>>>4))|t>>>16))<<16>>16},e.interleave3=function(t,e,r){return t=1227133513&((t=3272356035&((t=251719695&((t=4278190335&((t&=1023)|t<<16))|t<<8))|t<<4))|t<<2),(t|=(e=1227133513&((e=3272356035&((e=251719695&((e=4278190335&((e&=1023)|e<<16))|e<<8))|e<<4))|e<<2))<<1)|(r=1227133513&((r=3272356035&((r=251719695&((r=4278190335&((r&=1023)|r<<16))|r<<8))|r<<4))|r<<2))<<2},e.deinterleave3=function(t,e){return(t=1023&((t=4278190335&((t=251719695&((t=3272356035&((t=t>>>e&1227133513)|t>>>2))|t>>>4))|t>>>8))|t>>>16))<<22>>22},e.nextCombination=function(t){var e=t|t-1;return e+1|(~e&-~e)-1>>>r(t)+1}},6656:function(t,e,r){\\\"use strict\\\";var n=r(9392),i=r(9521);function a(t,e){var r=t.length,n=t.length-e.length,i=Math.min;if(n)return n;switch(r){case 0:return 0;case 1:return t[0]-e[0];case 2:return(s=t[0]+t[1]-e[0]-e[1])||i(t[0],t[1])-i(e[0],e[1]);case 3:var a=t[0]+t[1],o=e[0]+e[1];if(s=a+t[2]-(o+e[2]))return s;var s,l=i(t[0],t[1]),u=i(e[0],e[1]);return(s=i(l,t[2])-i(u,e[2]))||i(l+t[2],a)-i(u+e[2],o);default:var c=t.slice(0);c.sort();var f=e.slice(0);f.sort();for(var h=0;h<r;++h)if(n=c[h]-f[h])return n;return 0}}function o(t,e){return a(t[0],e[0])}function s(t,e){if(e){for(var r=t.length,n=new Array(r),i=0;i<r;++i)n[i]=[t[i],e[i]];for(n.sort(o),i=0;i<r;++i)t[i]=n[i][0],e[i]=n[i][1];return t}return t.sort(a),t}function l(t){if(0===t.length)return[];for(var e=1,r=t.length,n=1;n<r;++n){var i=t[n];if(a(i,t[n-1])){if(n===e){e++;continue}t[e++]=i}}return t.length=e,t}function u(t,e){for(var r=0,n=t.length-1,i=-1;r<=n;){var o=r+n>>1,s=a(t[o],e);s<=0?(0===s&&(i=o),r=o+1):s>0&&(n=o-1)}return i}function c(t,e){for(var r=new Array(t.length),i=0,o=r.length;i<o;++i)r[i]=[];for(var s=[],l=(i=0,e.length);i<l;++i)for(var c=e[i],f=c.length,h=1,p=1<<f;h<p;++h){s.length=n.popCount(h);for(var d=0,v=0;v<f;++v)h&1<<v&&(s[d++]=c[v]);var g=u(t,s);if(!(g<0))for(;r[g++].push(i),!(g>=t.length||0!==a(t[g],s)););}return r}function f(t,e){if(e<0)return[];for(var r=[],i=(1<<e+1)-1,a=0;a<t.length;++a)for(var o=t[a],l=i;l<1<<o.length;l=n.nextCombination(l)){for(var u=new Array(e+1),c=0,f=0;f<o.length;++f)l&1<<f&&(u[c++]=o[f]);r.push(u)}return s(r)}e.dimension=function(t){for(var e=0,r=Math.max,n=0,i=t.length;n<i;++n)e=r(e,t[n].length);return e-1},e.countVertices=function(t){for(var e=-1,r=Math.max,n=0,i=t.length;n<i;++n)for(var a=t[n],o=0,s=a.length;o<s;++o)e=r(e,a[o]);return e+1},e.cloneCells=function(t){for(var e=new Array(t.length),r=0,n=t.length;r<n;++r)e[r]=t[r].slice(0);return e},e.compareCells=a,e.normalize=s,e.unique=l,e.findCell=u,e.incidence=c,e.dual=function(t,e){if(!e)return c(l(f(t,0)),t);for(var r=new Array(e),n=0;n<e;++n)r[n]=[];n=0;for(var i=t.length;n<i;++n)for(var a=t[n],o=0,s=a.length;o<s;++o)r[a[o]].push(n);return r},e.explode=function(t){for(var e=[],r=0,n=t.length;r<n;++r)for(var i=t[r],a=0|i.length,o=1,l=1<<a;o<l;++o){for(var u=[],c=0;c<a;++c)o>>>c&1&&u.push(i[c]);e.push(u)}return s(e)},e.skeleton=f,e.boundary=function(t){for(var e=[],r=0,n=t.length;r<n;++r)for(var i=t[r],a=0,o=i.length;a<o;++a){for(var l=new Array(i.length-1),u=0,c=0;u<o;++u)u!==a&&(l[c++]=i[u]);e.push(l)}return s(e)},e.connectedComponents=function(t,e){return e?function(t,e){for(var r=new i(e),n=0;n<t.length;++n)for(var a=t[n],o=0;o<a.length;++o)for(var s=o+1;s<a.length;++s)r.link(a[o],a[s]);var l=[],u=r.ranks;for(n=0;n<u.length;++n)u[n]=-1;for(n=0;n<t.length;++n){var c=r.find(t[n][0]);u[c]<0?(u[c]=l.length,l.push([t[n].slice(0)])):l[u[c]].push(t[n].slice(0))}return l}(t,e):function(t){for(var e=l(s(f(t,0))),r=new i(e.length),n=0;n<t.length;++n)for(var a=t[n],o=0;o<a.length;++o)for(var c=u(e,[a[o]]),h=o+1;h<a.length;++h)r.link(c,u(e,[a[h]]));var p=[],d=r.ranks;for(n=0;n<d.length;++n)d[n]=-1;for(n=0;n<t.length;++n){var v=r.find(u(e,[t[n][0]]));d[v]<0?(d[v]=p.length,p.push([t[n].slice(0)])):p[d[v]].push(t[n].slice(0))}return p}(t)}},9521:function(t){\\\"use strict\\\";function e(t){this.roots=new Array(t),this.ranks=new Array(t);for(var e=0;e<t;++e)this.roots[e]=e,this.ranks[e]=0}t.exports=e,e.prototype.length=function(){return this.roots.length},e.prototype.makeSet=function(){var t=this.roots.length;return this.roots.push(t),this.ranks.push(0),t},e.prototype.find=function(t){for(var e=this.roots;e[t]!==t;){var r=e[t];e[t]=e[r],t=r}return t},e.prototype.link=function(t,e){var r=this.find(t),n=this.find(e);if(r!==n){var i=this.ranks,a=this.roots,o=i[r],s=i[n];o<s?a[r]=n:s<o?a[n]=r:(a[n]=r,++i[r])}}},8243:function(t,e,r){\\\"use strict\\\";t.exports=function(t,e,r){for(var a=e.length,o=t.length,s=new Array(a),l=new Array(a),u=new Array(a),c=new Array(a),f=0;f<a;++f)s[f]=l[f]=-1,u[f]=1/0,c[f]=!1;for(f=0;f<o;++f){var h=t[f];if(2!==h.length)throw new Error(\\\"Input must be a graph\\\");var p=h[1],d=h[0];-1!==l[d]?l[d]=-2:l[d]=p,-1!==s[p]?s[p]=-2:s[p]=d}function v(t){if(c[t])return 1/0;var r,i,a,o=s[t],u=l[t];return o<0||u<0?1/0:(r=e[t],i=e[o],a=e[u],Math.abs(n(r,i,a))/Math.sqrt(Math.pow(i[0]-a[0],2)+Math.pow(i[1]-a[1],2)))}function g(t,e){var r=k[t],n=k[e];k[t]=n,k[e]=r,A[r]=e,A[n]=t}function y(t){return u[k[t]]}function m(t){return 1&t?t-1>>1:(t>>1)-1}function x(t){for(var e=y(t);;){var r=e,n=2*t+1,i=2*(t+1),a=t;if(n<M){var o=y(n);o<r&&(a=n,r=o)}if(i<M&&y(i)<r&&(a=i),a===t)return t;g(t,a),t=a}}function b(t){for(var e=y(t);t>0;){var r=m(t);if(!(r>=0&&e<y(r)))return t;g(t,r),t=r}}function _(){if(M>0){var t=k[0];return g(0,M-1),M-=1,x(0),t}return-1}function w(t,e){var r=k[t];return u[r]===e?t:(u[r]=-1/0,b(t),_(),u[r]=e,b((M+=1)-1))}function T(t){if(!c[t]){c[t]=!0;var e=s[t],r=l[t];s[r]>=0&&(s[r]=e),l[e]>=0&&(l[e]=r),A[e]>=0&&w(A[e],v(e)),A[r]>=0&&w(A[r],v(r))}}var k=[],A=new Array(a);for(f=0;f<a;++f)(u[f]=v(f))<1/0?(A[f]=k.length,k.push(f)):A[f]=-1;var M=k.length;for(f=M>>1;f>=0;--f)x(f);for(;;){var S=_();if(S<0||u[S]>r)break;T(S)}var E=[];for(f=0;f<a;++f)c[f]||(A[f]=E.length,E.push(e[f].slice()));function L(t,e){if(t[e]<0)return e;var r=e,n=e;do{var i=t[n];if(!c[n]||i<0||i===n)break;if(i=t[n=i],!c[n]||i<0||i===n)break;n=i,r=t[r]}while(r!==n);for(var a=e;a!==n;a=t[a])t[a]=n;return n}E.length;var C=[];return t.forEach((function(t){var e=L(s,t[0]),r=L(l,t[1]);if(e>=0&&r>=0&&e!==r){var n=A[e],i=A[r];n!==i&&C.push([n,i])}})),i.unique(i.normalize(C)),{positions:E,edges:C}};var n=r(417),i=r(6656)},6638:function(t,e,r){\\\"use strict\\\";t.exports=function(t,e){var r,a,o,s;if(e[0][0]<e[1][0])r=e[0],a=e[1];else{if(!(e[0][0]>e[1][0]))return i(e,t);r=e[1],a=e[0]}if(t[0][0]<t[1][0])o=t[0],s=t[1];else{if(!(t[0][0]>t[1][0]))return-i(t,e);o=t[1],s=t[0]}var l=n(r,a,s),u=n(r,a,o);if(l<0){if(u<=0)return l}else if(l>0){if(u>=0)return l}else if(u)return u;if(l=n(s,o,a),u=n(s,o,r),l<0){if(u<=0)return l}else if(l>0){if(u>=0)return l}else if(u)return u;return a[0]-s[0]};var n=r(417);function i(t,e){var r,i,a,o;if(e[0][0]<e[1][0])r=e[0],i=e[1];else{if(!(e[0][0]>e[1][0])){var s=Math.min(t[0][1],t[1][1]),l=Math.max(t[0][1],t[1][1]),u=Math.min(e[0][1],e[1][1]),c=Math.max(e[0][1],e[1][1]);return l<u?l-u:s>c?s-c:l-c}r=e[1],i=e[0]}t[0][1]<t[1][1]?(a=t[0],o=t[1]):(a=t[1],o=t[0]);var f=n(i,r,a);return f||(f=n(i,r,o))||o-i}},4385:function(t,e,r){\\\"use strict\\\";t.exports=function(t){for(var e=t.length,r=2*e,n=new Array(r),a=0;a<e;++a){var l=t[a],u=l[0][0]<l[1][0];n[2*a]=new f(l[0][0],l,u,a),n[2*a+1]=new f(l[1][0],l,!u,a)}n.sort((function(t,e){var r=t.x-e.x;return r||(r=t.create-e.create)||Math.min(t.segment[0][1],t.segment[1][1])-Math.min(e.segment[0][1],e.segment[1][1])}));var h=i(o),p=[],d=[],v=[];for(a=0;a<r;){for(var g=n[a].x,y=[];a<r;){var m=n[a];if(m.x!==g)break;a+=1,m.segment[0][0]===m.x&&m.segment[1][0]===m.x?m.create&&(m.segment[0][1]<m.segment[1][1]?(y.push(new c(m.segment[0][1],m.index,!0,!0)),y.push(new c(m.segment[1][1],m.index,!1,!1))):(y.push(new c(m.segment[1][1],m.index,!0,!1)),y.push(new c(m.segment[0][1],m.index,!1,!0)))):h=m.create?h.insert(m.segment,m.index):h.remove(m.segment)}p.push(h.root),d.push(g),v.push(y)}return new s(p,d,v)};var n=r(5070),i=r(7080),a=r(417),o=r(6638);function s(t,e,r){this.slabs=t,this.coordinates=e,this.horizontal=r}function l(t,e){return t.y-e}function u(t,e){for(var r=null;t;){var n,i,o=t.key;o[0][0]<o[1][0]?(n=o[0],i=o[1]):(n=o[1],i=o[0]);var s=a(n,i,e);if(s<0)t=t.left;else if(s>0)if(e[0]!==o[1][0])r=t,t=t.right;else{if(l=u(t.right,e))return l;t=t.left}else{if(e[0]!==o[1][0])return t;var l;if(l=u(t.right,e))return l;t=t.left}}return r}function c(t,e,r,n){this.y=t,this.index=e,this.start=r,this.closed=n}function f(t,e,r,n){this.x=t,this.segment=e,this.create=r,this.index=n}s.prototype.castUp=function(t){var e=n.le(this.coordinates,t[0]);if(e<0)return-1;this.slabs[e];var r=u(this.slabs[e],t),i=-1;if(r&&(i=r.value),this.coordinates[e]===t[0]){var s=null;if(r&&(s=r.key),e>0){var c=u(this.slabs[e-1],t);c&&(s?o(c.key,s)>0&&(s=c.key,i=c.value):(i=c.value,s=c.key))}var f=this.horizontal[e];if(f.length>0){var h=n.ge(f,t[1],l);if(h<f.length){var p=f[h];if(t[1]===p.y){if(p.closed)return p.index;for(;h<f.length-1&&f[h+1].y===t[1];)if((p=f[h+=1]).closed)return p.index;if(p.y===t[1]&&!p.start){if((h+=1)>=f.length)return i;p=f[h]}}if(p.start)if(s){var d=a(s[0],s[1],[t[0],p.y]);s[0][0]>s[1][0]&&(d=-d),d>0&&(i=p.index)}else i=p.index;else p.y!==t[1]&&(i=p.index)}}}return i}},4670:function(t,e,r){\\\"use strict\\\";var n=r(9130),i=r(9662);function a(t,e){var r=i(n(t,e),[e[e.length-1]]);return r[r.length-1]}function o(t,e,r,n){var i=-e/(n-e);i<0?i=0:i>1&&(i=1);for(var a=1-i,o=t.length,s=new Array(o),l=0;l<o;++l)s[l]=i*t[l]+a*r[l];return s}t.exports=function(t,e){for(var r=[],n=[],i=a(t[t.length-1],e),s=t[t.length-1],l=t[0],u=0;u<t.length;++u,s=l){var c=a(l=t[u],e);if(i<0&&c>0||i>0&&c<0){var f=o(s,c,l,i);r.push(f),n.push(f.slice())}c<0?n.push(l.slice()):c>0?r.push(l.slice()):(r.push(l.slice()),n.push(l.slice())),i=c}return{positive:r,negative:n}},t.exports.positive=function(t,e){for(var r=[],n=a(t[t.length-1],e),i=t[t.length-1],s=t[0],l=0;l<t.length;++l,i=s){var u=a(s=t[l],e);(n<0&&u>0||n>0&&u<0)&&r.push(o(i,u,s,n)),u>=0&&r.push(s.slice()),n=u}return r},t.exports.negative=function(t,e){for(var r=[],n=a(t[t.length-1],e),i=t[t.length-1],s=t[0],l=0;l<t.length;++l,i=s){var u=a(s=t[l],e);(n<0&&u>0||n>0&&u<0)&&r.push(o(i,u,s,n)),u<=0&&r.push(s.slice()),n=u}return r}},8974:function(t,e,r){var n;!function(){\\\"use strict\\\";var i={not_string:/[^s]/,not_bool:/[^t]/,not_type:/[^T]/,not_primitive:/[^v]/,number:/[diefg]/,numeric_arg:/[bcdiefguxX]/,json:/[j]/,not_json:/[^j]/,text:/^[^\\\\x25]+/,modulo:/^\\\\x25{2}/,placeholder:/^\\\\x25(?:([1-9]\\\\d*)\\\\$|\\\\(([^)]+)\\\\))?(\\\\+)?(0|'[^$])?(-)?(\\\\d+)?(?:\\\\.(\\\\d+))?([b-gijostTuvxX])/,key:/^([a-z_][a-z_\\\\d]*)/i,key_access:/^\\\\.([a-z_][a-z_\\\\d]*)/i,index_access:/^\\\\[(\\\\d+)\\\\]/,sign:/^[+-]/};function a(t){return function(t,e){var r,n,o,s,l,u,c,f,h,p=1,d=t.length,v=\\\"\\\";for(n=0;n<d;n++)if(\\\"string\\\"==typeof t[n])v+=t[n];else if(\\\"object\\\"==typeof t[n]){if((s=t[n]).keys)for(r=e[p],o=0;o<s.keys.length;o++){if(null==r)throw new Error(a('[sprintf] Cannot access property \\\"%s\\\" of undefined value \\\"%s\\\"',s.keys[o],s.keys[o-1]));r=r[s.keys[o]]}else r=s.param_no?e[s.param_no]:e[p++];if(i.not_type.test(s.type)&&i.not_primitive.test(s.type)&&r instanceof Function&&(r=r()),i.numeric_arg.test(s.type)&&\\\"number\\\"!=typeof r&&isNaN(r))throw new TypeError(a(\\\"[sprintf] expecting number but found %T\\\",r));switch(i.number.test(s.type)&&(f=r>=0),s.type){case\\\"b\\\":r=parseInt(r,10).toString(2);break;case\\\"c\\\":r=String.fromCharCode(parseInt(r,10));break;case\\\"d\\\":case\\\"i\\\":r=parseInt(r,10);break;case\\\"j\\\":r=JSON.stringify(r,null,s.width?parseInt(s.width):0);break;case\\\"e\\\":r=s.precision?parseFloat(r).toExponential(s.precision):parseFloat(r).toExponential();break;case\\\"f\\\":r=s.precision?parseFloat(r).toFixed(s.precision):parseFloat(r);break;case\\\"g\\\":r=s.precision?String(Number(r.toPrecision(s.precision))):parseFloat(r);break;case\\\"o\\\":r=(parseInt(r,10)>>>0).toString(8);break;case\\\"s\\\":r=String(r),r=s.precision?r.substring(0,s.precision):r;break;case\\\"t\\\":r=String(!!r),r=s.precision?r.substring(0,s.precision):r;break;case\\\"T\\\":r=Object.prototype.toString.call(r).slice(8,-1).toLowerCase(),r=s.precision?r.substring(0,s.precision):r;break;case\\\"u\\\":r=parseInt(r,10)>>>0;break;case\\\"v\\\":r=r.valueOf(),r=s.precision?r.substring(0,s.precision):r;break;case\\\"x\\\":r=(parseInt(r,10)>>>0).toString(16);break;case\\\"X\\\":r=(parseInt(r,10)>>>0).toString(16).toUpperCase()}i.json.test(s.type)?v+=r:(!i.number.test(s.type)||f&&!s.sign?h=\\\"\\\":(h=f?\\\"+\\\":\\\"-\\\",r=r.toString().replace(i.sign,\\\"\\\")),u=s.pad_char?\\\"0\\\"===s.pad_char?\\\"0\\\":s.pad_char.charAt(1):\\\" \\\",c=s.width-(h+r).length,l=s.width&&c>0?u.repeat(c):\\\"\\\",v+=s.align?h+r+l:\\\"0\\\"===u?h+l+r:l+h+r)}return v}(function(t){if(s[t])return s[t];for(var e,r=t,n=[],a=0;r;){if(null!==(e=i.text.exec(r)))n.push(e[0]);else if(null!==(e=i.modulo.exec(r)))n.push(\\\"%\\\");else{if(null===(e=i.placeholder.exec(r)))throw new SyntaxError(\\\"[sprintf] unexpected placeholder\\\");if(e[2]){a|=1;var o=[],l=e[2],u=[];if(null===(u=i.key.exec(l)))throw new SyntaxError(\\\"[sprintf] failed to parse named argument key\\\");for(o.push(u[1]);\\\"\\\"!==(l=l.substring(u[0].length));)if(null!==(u=i.key_access.exec(l)))o.push(u[1]);else{if(null===(u=i.index_access.exec(l)))throw new SyntaxError(\\\"[sprintf] failed to parse named argument key\\\");o.push(u[1])}e[2]=o}else a|=2;if(3===a)throw new Error(\\\"[sprintf] mixing positional and named placeholders is not (yet) supported\\\");n.push({placeholder:e[0],param_no:e[1],keys:e[2],sign:e[3],pad_char:e[4],align:e[5],width:e[6],precision:e[7],type:e[8]})}r=r.substring(e[0].length)}return s[t]=n}(t),arguments)}function o(t,e){return a.apply(null,[t].concat(e||[]))}var s=Object.create(null);e.sprintf=a,e.vsprintf=o,\\\"undefined\\\"!=typeof window&&(window.sprintf=a,window.vsprintf=o,void 0===(n=function(){return{sprintf:a,vsprintf:o}}.call(e,r,e,t))||(t.exports=n))}()},4162:function(t,e,r){\\\"use strict\\\";t.exports=function(t,e){if(t.dimension<=0)return{positions:[],cells:[]};if(1===t.dimension)return function(t,e){for(var r=i(t,e),n=r.length,a=new Array(n),o=new Array(n),s=0;s<n;++s)a[s]=[r[s]],o[s]=[s];return{positions:a,cells:o}}(t,e);var r=t.order.join()+\\\"-\\\"+t.dtype,s=o[r];return e=+e||0,s||(s=o[r]=function(t,e){var r=t.length+\\\"d\\\",i=a[r];if(i)return i(n,t,e)}(t.order,t.dtype)),s(t,e)};var n=r(9284),i=r(9584),a={\\\"2d\\\":function(t,e,r){var n=t({order:e,scalarArguments:3,getters:\\\"generic\\\"===r?[0]:void 0,phase:function(t,e,r,n){return t>n|0},vertex:function(t,e,r,n,i,a,o,s,l,u,c,f,h){var p=(o<<0)+(s<<1)+(l<<2)+(u<<3)|0;if(0!==p&&15!==p)switch(p){case 0:case 15:c.push([t-.5,e-.5]);break;case 1:c.push([t-.25-.25*(n+r-2*h)/(r-n),e-.25-.25*(i+r-2*h)/(r-i)]);break;case 2:c.push([t-.75-.25*(-n-r+2*h)/(n-r),e-.25-.25*(a+n-2*h)/(n-a)]);break;case 3:c.push([t-.5,e-.5-.5*(i+r+a+n-4*h)/(r-i+n-a)]);break;case 4:c.push([t-.25-.25*(a+i-2*h)/(i-a),e-.75-.25*(-i-r+2*h)/(i-r)]);break;case 5:c.push([t-.5-.5*(n+r+a+i-4*h)/(r-n+i-a),e-.5]);break;case 6:c.push([t-.5-.25*(-n-r+a+i)/(n-r+i-a),e-.5-.25*(-i-r+a+n)/(i-r+n-a)]);break;case 7:c.push([t-.75-.25*(a+i-2*h)/(i-a),e-.75-.25*(a+n-2*h)/(n-a)]);break;case 8:c.push([t-.75-.25*(-a-i+2*h)/(a-i),e-.75-.25*(-a-n+2*h)/(a-n)]);break;case 9:c.push([t-.5-.25*(n+r+-a-i)/(r-n+a-i),e-.5-.25*(i+r+-a-n)/(r-i+a-n)]);break;case 10:c.push([t-.5-.5*(-n-r-a-i+4*h)/(n-r+a-i),e-.5]);break;case 11:c.push([t-.25-.25*(-a-i+2*h)/(a-i),e-.75-.25*(i+r-2*h)/(r-i)]);break;case 12:c.push([t-.5,e-.5-.5*(-i-r-a-n+4*h)/(i-r+a-n)]);break;case 13:c.push([t-.75-.25*(n+r-2*h)/(r-n),e-.25-.25*(-a-n+2*h)/(a-n)]);break;case 14:c.push([t-.25-.25*(-n-r+2*h)/(n-r),e-.25-.25*(-i-r+2*h)/(i-r)])}},cell:function(t,e,r,n,i,a,o,s,l){i?s.push([t,e]):s.push([e,t])}});return function(t,e){var r=[],i=[];return n(t,r,i,e),{positions:r,cells:i}}}},o={}},6946:function(t,e,r){\\\"use strict\\\";t.exports=function t(e,r,i){i=i||{};var a=o[e];a||(a=o[e]={\\\" \\\":{data:new Float32Array(0),shape:.2}});var s=a[r];if(!s)if(r.length<=1||!/\\\\d/.test(r))s=a[r]=function(t){for(var e=t.cells,r=t.positions,n=new Float32Array(6*e.length),i=0,a=0,o=0;o<e.length;++o)for(var s=e[o],l=0;l<3;++l){var u=r[s[l]];n[i++]=u[0],n[i++]=u[1]+1.4,a=Math.max(u[0],a)}return{data:n,shape:a}}(n(r,{triangles:!0,font:e,textAlign:i.textAlign||\\\"left\\\",textBaseline:\\\"alphabetic\\\",styletags:{breaklines:!0,bolds:!0,italics:!0,subscripts:!0,superscripts:!0}}));else{for(var l=r.split(/(\\\\d|\\\\s)/),u=new Array(l.length),c=0,f=0,h=0;h<l.length;++h)u[h]=t(e,l[h]),c+=u[h].data.length,f+=u[h].shape,h>0&&(f+=.02);var p=new Float32Array(c),d=0,v=-.5*f;for(h=0;h<u.length;++h){for(var g=u[h].data,y=0;y<g.length;y+=2)p[d++]=g[y]+v,p[d++]=g[y+1];v+=u[h].shape+.02}s=a[r]={data:p,shape:f}}return s};var n=r(875),a=window||i.global||{},o=a.__TEXT_CACHE||{};a.__TEXT_CACHE={}},14:function(t,e,r){\\\"use strict\\\";var n=r(4405);t.exports=o;var i=96;function a(t,e){var r=n(getComputedStyle(t).getPropertyValue(e));return r[0]*o(r[1],t)}function o(t,e){switch(e=e||document.body,t=(t||\\\"px\\\").trim().toLowerCase(),e!==window&&e!==document||(e=document.body),t){case\\\"%\\\":return e.clientHeight/100;case\\\"ch\\\":case\\\"ex\\\":return function(t,e){var r=document.createElement(\\\"div\\\");r.style[\\\"font-size\\\"]=\\\"128\\\"+t,e.appendChild(r);var n=a(r,\\\"font-size\\\")/128;return e.removeChild(r),n}(t,e);case\\\"em\\\":return a(e,\\\"font-size\\\");case\\\"rem\\\":return a(document.body,\\\"font-size\\\");case\\\"vw\\\":return window.innerWidth/100;case\\\"vh\\\":return window.innerHeight/100;case\\\"vmin\\\":return Math.min(window.innerWidth,window.innerHeight)/100;case\\\"vmax\\\":return Math.max(window.innerWidth,window.innerHeight)/100;case\\\"in\\\":return i;case\\\"cm\\\":return i/2.54;case\\\"mm\\\":return i/25.4;case\\\"pt\\\":return i/72;case\\\"pc\\\":return i/6}return 1}},3440:function(t,e,r){\\\"use strict\\\";t.exports=function(t){var e=(t=t||{}).center||[0,0,0],r=t.up||[0,1,0],n=t.right||f(r),i=t.radius||1,a=t.theta||0,c=t.phi||0;if(e=[].slice.call(e,0,3),r=[].slice.call(r,0,3),s(r,r),n=[].slice.call(n,0,3),s(n,n),\\\"eye\\\"in t){var p=t.eye,d=[p[0]-e[0],p[1]-e[1],p[2]-e[2]];o(n,d,r),u(n[0],n[1],n[2])<1e-6?n=f(r):s(n,n),i=u(d[0],d[1],d[2]);var v=l(r,d)/i,g=l(n,d)/i;c=Math.acos(v),a=Math.acos(g)}return i=Math.log(i),new h(t.zoomMin,t.zoomMax,e,r,n,i,a,c)};var n=r(8444),i=r(7437),a=r(4422),o=r(903),s=r(899),l=r(9305);function u(t,e,r){return Math.sqrt(Math.pow(t,2)+Math.pow(e,2)+Math.pow(r,2))}function c(t){return Math.min(1,Math.max(-1,t))}function f(t){var e=Math.abs(t[0]),r=Math.abs(t[1]),n=Math.abs(t[2]),i=[0,0,0];e>Math.max(r,n)?i[2]=1:r>Math.max(e,n)?i[0]=1:i[1]=1;for(var a=0,o=0,l=0;l<3;++l)a+=t[l]*t[l],o+=i[l]*t[l];for(l=0;l<3;++l)i[l]-=o/a*t[l];return s(i,i),i}function h(t,e,r,i,a,o,s,l){this.center=n(r),this.up=n(i),this.right=n(a),this.radius=n([o]),this.angle=n([s,l]),this.angle.bounds=[[-1/0,-Math.PI/2],[1/0,Math.PI/2]],this.setDistanceLimits(t,e),this.computedCenter=this.center.curve(0),this.computedUp=this.up.curve(0),this.computedRight=this.right.curve(0),this.computedRadius=this.radius.curve(0),this.computedAngle=this.angle.curve(0),this.computedToward=[0,0,0],this.computedEye=[0,0,0],this.computedMatrix=new Array(16);for(var u=0;u<16;++u)this.computedMatrix[u]=.5;this.recalcMatrix(0)}var p=h.prototype;p.setDistanceLimits=function(t,e){t=t>0?Math.log(t):-1/0,e=e>0?Math.log(e):1/0,e=Math.max(e,t),this.radius.bounds[0][0]=t,this.radius.bounds[1][0]=e},p.getDistanceLimits=function(t){var e=this.radius.bounds[0];return t?(t[0]=Math.exp(e[0][0]),t[1]=Math.exp(e[1][0]),t):[Math.exp(e[0][0]),Math.exp(e[1][0])]},p.recalcMatrix=function(t){this.center.curve(t),this.up.curve(t),this.right.curve(t),this.radius.curve(t),this.angle.curve(t);for(var e=this.computedUp,r=this.computedRight,n=0,i=0,a=0;a<3;++a)i+=e[a]*r[a],n+=e[a]*e[a];var l=Math.sqrt(n),c=0;for(a=0;a<3;++a)r[a]-=e[a]*i/n,c+=r[a]*r[a],e[a]/=l;var f=Math.sqrt(c);for(a=0;a<3;++a)r[a]/=f;var h=this.computedToward;o(h,e,r),s(h,h);var p=Math.exp(this.computedRadius[0]),d=this.computedAngle[0],v=this.computedAngle[1],g=Math.cos(d),y=Math.sin(d),m=Math.cos(v),x=Math.sin(v),b=this.computedCenter,_=g*m,w=y*m,T=x,k=-g*x,A=-y*x,M=m,S=this.computedEye,E=this.computedMatrix;for(a=0;a<3;++a){var L=_*r[a]+w*h[a]+T*e[a];E[4*a+1]=k*r[a]+A*h[a]+M*e[a],E[4*a+2]=L,E[4*a+3]=0}var C=E[1],P=E[5],O=E[9],I=E[2],D=E[6],z=E[10],R=P*z-O*D,F=O*I-C*z,B=C*D-P*I,N=u(R,F,B);for(R/=N,F/=N,B/=N,E[0]=R,E[4]=F,E[8]=B,a=0;a<3;++a)S[a]=b[a]+E[2+4*a]*p;for(a=0;a<3;++a){c=0;for(var j=0;j<3;++j)c+=E[a+4*j]*S[j];E[12+a]=-c}E[15]=1},p.getMatrix=function(t,e){this.recalcMatrix(t);var r=this.computedMatrix;if(e){for(var n=0;n<16;++n)e[n]=r[n];return e}return r};var d=[0,0,0];p.rotate=function(t,e,r,n){if(this.angle.move(t,e,r),n){this.recalcMatrix(t);var i=this.computedMatrix;d[0]=i[2],d[1]=i[6],d[2]=i[10];for(var o=this.computedUp,s=this.computedRight,l=this.computedToward,u=0;u<3;++u)i[4*u]=o[u],i[4*u+1]=s[u],i[4*u+2]=l[u];for(a(i,i,n,d),u=0;u<3;++u)o[u]=i[4*u],s[u]=i[4*u+1];this.up.set(t,o[0],o[1],o[2]),this.right.set(t,s[0],s[1],s[2])}},p.pan=function(t,e,r,n){e=e||0,r=r||0,n=n||0,this.recalcMatrix(t);var i=this.computedMatrix,a=(Math.exp(this.computedRadius[0]),i[1]),o=i[5],s=i[9],l=u(a,o,s);a/=l,o/=l,s/=l;var c=i[0],f=i[4],h=i[8],p=c*a+f*o+h*s,d=u(c-=a*p,f-=o*p,h-=s*p),v=(c/=d)*e+a*r,g=(f/=d)*e+o*r,y=(h/=d)*e+s*r;this.center.move(t,v,g,y);var m=Math.exp(this.computedRadius[0]);m=Math.max(1e-4,m+n),this.radius.set(t,Math.log(m))},p.translate=function(t,e,r,n){this.center.move(t,e||0,r||0,n||0)},p.setMatrix=function(t,e,r,n){var a=1;\\\"number\\\"==typeof r&&(a=0|r),(a<0||a>3)&&(a=1);var o=(a+2)%3;e||(this.recalcMatrix(t),e=this.computedMatrix);var s=e[a],l=e[a+4],f=e[a+8];if(n){var h=Math.abs(s),p=Math.abs(l),d=Math.abs(f),v=Math.max(h,p,d);h===v?(s=s<0?-1:1,l=f=0):d===v?(f=f<0?-1:1,s=l=0):(l=l<0?-1:1,s=f=0)}else{var g=u(s,l,f);s/=g,l/=g,f/=g}var y,m,x=e[o],b=e[o+4],_=e[o+8],w=x*s+b*l+_*f,T=u(x-=s*w,b-=l*w,_-=f*w),k=l*(_/=T)-f*(b/=T),A=f*(x/=T)-s*_,M=s*b-l*x,S=u(k,A,M);if(k/=S,A/=S,M/=S,this.center.jump(t,q,G,Z),this.radius.idle(t),this.up.jump(t,s,l,f),this.right.jump(t,x,b,_),2===a){var E=e[1],L=e[5],C=e[9],P=E*x+L*b+C*_,O=E*k+L*A+C*M;y=R<0?-Math.PI/2:Math.PI/2,m=Math.atan2(O,P)}else{var I=e[2],D=e[6],z=e[10],R=I*s+D*l+z*f,F=I*x+D*b+z*_,B=I*k+D*A+z*M;y=Math.asin(c(R)),m=Math.atan2(B,F)}this.angle.jump(t,m,y),this.recalcMatrix(t);var N=e[2],j=e[6],U=e[10],V=this.computedMatrix;i(V,e);var H=V[15],q=V[12]/H,G=V[13]/H,Z=V[14]/H,Y=Math.exp(this.computedRadius[0]);this.center.jump(t,q-N*Y,G-j*Y,Z-U*Y)},p.lastT=function(){return Math.max(this.center.lastT(),this.up.lastT(),this.right.lastT(),this.radius.lastT(),this.angle.lastT())},p.idle=function(t){this.center.idle(t),this.up.idle(t),this.right.idle(t),this.radius.idle(t),this.angle.idle(t)},p.flush=function(t){this.center.flush(t),this.up.flush(t),this.right.flush(t),this.radius.flush(t),this.angle.flush(t)},p.setDistance=function(t,e){e>0&&this.radius.set(t,Math.log(e))},p.lookAt=function(t,e,r,n){this.recalcMatrix(t),e=e||this.computedEye,r=r||this.computedCenter;var i=(n=n||this.computedUp)[0],a=n[1],o=n[2],s=u(i,a,o);if(!(s<1e-6)){i/=s,a/=s,o/=s;var l=e[0]-r[0],f=e[1]-r[1],h=e[2]-r[2],p=u(l,f,h);if(!(p<1e-6)){l/=p,f/=p,h/=p;var d=this.computedRight,v=d[0],g=d[1],y=d[2],m=i*v+a*g+o*y,x=u(v-=m*i,g-=m*a,y-=m*o);if(!(x<.01&&(x=u(v=a*h-o*f,g=o*l-i*h,y=i*f-a*l))<1e-6)){v/=x,g/=x,y/=x,this.up.set(t,i,a,o),this.right.set(t,v,g,y),this.center.set(t,r[0],r[1],r[2]),this.radius.set(t,Math.log(p));var b=a*y-o*g,_=o*v-i*y,w=i*g-a*v,T=u(b,_,w),k=i*l+a*f+o*h,A=v*l+g*f+y*h,M=(b/=T)*l+(_/=T)*f+(w/=T)*h,S=Math.asin(c(k)),E=Math.atan2(M,A),L=this.angle._state,C=L[L.length-1],P=L[L.length-2];C%=2*Math.PI;var O=Math.abs(C+2*Math.PI-E),I=Math.abs(C-E),D=Math.abs(C-2*Math.PI-E);O<I&&(C+=2*Math.PI),D<I&&(C-=2*Math.PI),this.angle.jump(this.angle.lastT(),C,P),this.angle.set(t,E,S)}}}}},9660:function(t){\\\"use strict\\\";t.exports=function(t,r,n){var i=t*r,a=e*t,o=a-(a-t),s=t-o,l=e*r,u=l-(l-r),c=r-u,f=s*c-(i-o*u-s*u-o*c);return n?(n[0]=f,n[1]=i,n):[f,i]};var e=+(Math.pow(2,27)+1)},87:function(t){\\\"use strict\\\";t.exports=function(t,e,r){var n=t+e,i=n-t,a=e-i,o=t-(n-i);return r?(r[0]=o+a,r[1]=n,r):[o+a,n]}},5306:function(t,e,r){\\\"use strict\\\";var n=r(2288),i=r(3094),a=r(2146).lW;r.g.__TYPEDARRAY_POOL||(r.g.__TYPEDARRAY_POOL={UINT8:i([32,0]),UINT16:i([32,0]),UINT32:i([32,0]),BIGUINT64:i([32,0]),INT8:i([32,0]),INT16:i([32,0]),INT32:i([32,0]),BIGINT64:i([32,0]),FLOAT:i([32,0]),DOUBLE:i([32,0]),DATA:i([32,0]),UINT8C:i([32,0]),BUFFER:i([32,0])});var o=\\\"undefined\\\"!=typeof Uint8ClampedArray,s=\\\"undefined\\\"!=typeof BigUint64Array,l=\\\"undefined\\\"!=typeof BigInt64Array,u=r.g.__TYPEDARRAY_POOL;u.UINT8C||(u.UINT8C=i([32,0])),u.BIGUINT64||(u.BIGUINT64=i([32,0])),u.BIGINT64||(u.BIGINT64=i([32,0])),u.BUFFER||(u.BUFFER=i([32,0]));var c=u.DATA,f=u.BUFFER;function h(t){if(t){var e=t.length||t.byteLength,r=n.log2(e);c[r].push(t)}}function p(t){t=n.nextPow2(t);var e=n.log2(t),r=c[e];return r.length>0?r.pop():new ArrayBuffer(t)}function d(t){return new Uint8Array(p(t),0,t)}function v(t){return new Uint16Array(p(2*t),0,t)}function g(t){return new Uint32Array(p(4*t),0,t)}function y(t){return new Int8Array(p(t),0,t)}function m(t){return new Int16Array(p(2*t),0,t)}function x(t){return new Int32Array(p(4*t),0,t)}function b(t){return new Float32Array(p(4*t),0,t)}function _(t){return new Float64Array(p(8*t),0,t)}function w(t){return o?new Uint8ClampedArray(p(t),0,t):d(t)}function T(t){return s?new BigUint64Array(p(8*t),0,t):null}function k(t){return l?new BigInt64Array(p(8*t),0,t):null}function A(t){return new DataView(p(t),0,t)}function M(t){t=n.nextPow2(t);var e=n.log2(t),r=f[e];return r.length>0?r.pop():new a(t)}e.free=function(t){if(a.isBuffer(t))f[n.log2(t.length)].push(t);else{if(\\\"[object ArrayBuffer]\\\"!==Object.prototype.toString.call(t)&&(t=t.buffer),!t)return;var e=t.length||t.byteLength,r=0|n.log2(e);c[r].push(t)}},e.freeUint8=e.freeUint16=e.freeUint32=e.freeBigUint64=e.freeInt8=e.freeInt16=e.freeInt32=e.freeBigInt64=e.freeFloat32=e.freeFloat=e.freeFloat64=e.freeDouble=e.freeUint8Clamped=e.freeDataView=function(t){h(t.buffer)},e.freeArrayBuffer=h,e.freeBuffer=function(t){f[n.log2(t.length)].push(t)},e.malloc=function(t,e){if(void 0===e||\\\"arraybuffer\\\"===e)return p(t);switch(e){case\\\"uint8\\\":return d(t);case\\\"uint16\\\":return v(t);case\\\"uint32\\\":return g(t);case\\\"int8\\\":return y(t);case\\\"int16\\\":return m(t);case\\\"int32\\\":return x(t);case\\\"float\\\":case\\\"float32\\\":return b(t);case\\\"double\\\":case\\\"float64\\\":return _(t);case\\\"uint8_clamped\\\":return w(t);case\\\"bigint64\\\":return k(t);case\\\"biguint64\\\":return T(t);case\\\"buffer\\\":return M(t);case\\\"data\\\":case\\\"dataview\\\":return A(t);default:return null}return null},e.mallocArrayBuffer=p,e.mallocUint8=d,e.mallocUint16=v,e.mallocUint32=g,e.mallocInt8=y,e.mallocInt16=m,e.mallocInt32=x,e.mallocFloat32=e.mallocFloat=b,e.mallocFloat64=e.mallocDouble=_,e.mallocUint8Clamped=w,e.mallocBigUint64=T,e.mallocBigInt64=k,e.mallocDataView=A,e.mallocBuffer=M,e.clearCache=function(){for(var t=0;t<32;++t)u.UINT8[t].length=0,u.UINT16[t].length=0,u.UINT32[t].length=0,u.INT8[t].length=0,u.INT16[t].length=0,u.INT32[t].length=0,u.FLOAT[t].length=0,u.DOUBLE[t].length=0,u.BIGUINT64[t].length=0,u.BIGINT64[t].length=0,u.UINT8C[t].length=0,c[t].length=0,f[t].length=0}},1731:function(t){\\\"use strict\\\";function e(t){this.roots=new Array(t),this.ranks=new Array(t);for(var e=0;e<t;++e)this.roots[e]=e,this.ranks[e]=0}t.exports=e;var r=e.prototype;Object.defineProperty(r,\\\"length\\\",{get:function(){return this.roots.length}}),r.makeSet=function(){var t=this.roots.length;return this.roots.push(t),this.ranks.push(0),t},r.find=function(t){for(var e=t,r=this.roots;r[t]!==t;)t=r[t];for(;r[e]!==t;){var n=r[e];r[e]=t,e=n}return t},r.link=function(t,e){var r=this.find(t),n=this.find(e);if(r!==n){var i=this.ranks,a=this.roots,o=i[r],s=i[n];o<s?a[r]=n:s<o?a[n]=r:(a[n]=r,++i[r])}}},1215:function(t){\\\"use strict\\\";t.exports=function(t,e,r){return 0===t.length?t:e?(r||t.sort(e),function(t,e){for(var r=1,n=t.length,i=t[0],a=t[0],o=1;o<n;++o)if(a=i,e(i=t[o],a)){if(o===r){r++;continue}t[r++]=i}return t.length=r,t}(t,e)):(r||t.sort(),function(t){for(var e=1,r=t.length,n=t[0],i=t[0],a=1;a<r;++a,i=n)if(i=n,(n=t[a])!==i){if(a===e){e++;continue}t[e++]=n}return t.length=e,t}(t))}},875:function(t,e,r){\\\"use strict\\\";t.exports=function(t,e){return\\\"object\\\"==typeof e&&null!==e||(e={}),n(t,e.canvas||i,e.context||a,e)};var n=r(712),i=null,a=null;\\\"undefined\\\"!=typeof document&&((i=document.createElement(\\\"canvas\\\")).width=8192,i.height=1024,a=i.getContext(\\\"2d\\\"))},712:function(t,e,r){t.exports=function(t,e,r,n){var a=64,o=1.25,s={breaklines:!1,bolds:!1,italics:!1,subscripts:!1,superscripts:!1};return n&&(n.size&&n.size>0&&(a=n.size),n.lineSpacing&&n.lineSpacing>0&&(o=n.lineSpacing),n.styletags&&n.styletags.breaklines&&(s.breaklines=!!n.styletags.breaklines),n.styletags&&n.styletags.bolds&&(s.bolds=!!n.styletags.bolds),n.styletags&&n.styletags.italics&&(s.italics=!!n.styletags.italics),n.styletags&&n.styletags.subscripts&&(s.subscripts=!!n.styletags.subscripts),n.styletags&&n.styletags.superscripts&&(s.superscripts=!!n.styletags.superscripts)),r.font=[n.fontStyle,n.fontVariant,n.fontWeight,a+\\\"px\\\",n.font].filter((function(t){return t})).join(\\\" \\\"),r.textAlign=\\\"start\\\",r.textBaseline=\\\"alphabetic\\\",r.direction=\\\"ltr\\\",w(function(t,e,r,n,a,o){r=r.replace(/\\\\n/g,\\\"\\\"),r=!0===o.breaklines?r.replace(/\\\\<br\\\\>/g,\\\"\\\\n\\\"):r.replace(/\\\\<br\\\\>/g,\\\" \\\");var s=\\\"\\\",l=[];for(T=0;T<r.length;++T)l[T]=s;!0===o.bolds&&(l=x(u,c,r,l)),!0===o.italics&&(l=x(f,h,r,l)),!0===o.superscripts&&(l=x(p,v,r,l)),!0===o.subscripts&&(l=x(g,m,r,l));var b=[],_=\\\"\\\";for(T=0;T<r.length;++T)null!==l[T]&&(_+=r[T],b.push(l[T]));var w,T,k,A,M,S=_.split(\\\"\\\\n\\\"),E=S.length,L=Math.round(a*n),C=n,P=2*n,O=0,I=E*L+P;t.height<I&&(t.height=I),e.fillStyle=\\\"#000\\\",e.fillRect(0,0,t.width,t.height),e.fillStyle=\\\"#fff\\\";var D=0,z=\\\"\\\";function R(){if(\\\"\\\"!==z){var t=e.measureText(z).width;e.fillText(z,C+k,P+A),k+=t}}function F(){return Math.round(M)+\\\"px \\\"}function B(t,r){var n=\\\"\\\"+e.font;if(!0===o.subscripts){var i=t.indexOf(y),a=r.indexOf(y),s=i>-1?parseInt(t[1+i]):0,l=a>-1?parseInt(r[1+a]):0;s!==l&&(n=n.replace(F(),\\\"?px \\\"),M*=Math.pow(.75,l-s),n=n.replace(\\\"?px \\\",F())),A+=.25*L*(l-s)}if(!0===o.superscripts){var u=t.indexOf(d),f=r.indexOf(d),p=u>-1?parseInt(t[1+u]):0,v=f>-1?parseInt(r[1+f]):0;p!==v&&(n=n.replace(F(),\\\"?px \\\"),M*=Math.pow(.75,v-p),n=n.replace(\\\"?px \\\",F())),A-=.25*L*(v-p)}if(!0===o.bolds){var g=t.indexOf(c)>-1,m=r.indexOf(c)>-1;!g&&m&&(n=x?n.replace(\\\"italic \\\",\\\"italic bold \\\"):\\\"bold \\\"+n),g&&!m&&(n=n.replace(\\\"bold \\\",\\\"\\\"))}if(!0===o.italics){var x=t.indexOf(h)>-1,b=r.indexOf(h)>-1;!x&&b&&(n=\\\"italic \\\"+n),x&&!b&&(n=n.replace(\\\"italic \\\",\\\"\\\"))}e.font=n}for(w=0;w<E;++w){var N=S[w]+\\\"\\\\n\\\";for(k=0,A=w*L,M=n,z=\\\"\\\",T=0;T<N.length;++T){var j=T+D<b.length?b[T+D]:b[b.length-1];s===j?z+=N[T]:(R(),z=N[T],void 0!==j&&(B(s,j),s=j))}R(),D+=N.length;var U=0|Math.round(k+2*C);O<U&&(O=U)}var V=O,H=P+L*E;return i(e.getImageData(0,0,V,H).data,[H,V,4]).pick(-1,-1,0).transpose(1,0)}(e,r,t,a,o,s),n,a)},t.exports.processPixels=w;var n=r(4162),i=r(5050),a=r(8243),o=r(197),s=r(7761),l=r(8040),u=\\\"b\\\",c=\\\"b|\\\",f=\\\"i\\\",h=\\\"i|\\\",p=\\\"sup\\\",d=\\\"+\\\",v=\\\"+1\\\",g=\\\"sub\\\",y=\\\"-\\\",m=\\\"-1\\\";function x(t,e,r,n){for(var i=\\\"<\\\"+t+\\\">\\\",a=\\\"</\\\"+t+\\\">\\\",o=i.length,s=a.length,l=e[0]===d||e[0]===y,u=0,c=-s;u>-1&&-1!==(u=r.indexOf(i,u))&&-1!==(c=r.indexOf(a,u+o))&&!(c<=u);){for(var f=u;f<c+s;++f)if(f<u+o||f>=c)n[f]=null,r=r.substr(0,f)+\\\" \\\"+r.substr(f+1);else if(null!==n[f]){var h=n[f].indexOf(e[0]);-1===h?n[f]+=e:l&&(n[f]=n[f].substr(0,h+1)+(1+parseInt(n[f][h+1]))+n[f].substr(h+2))}var p=u+o,v=r.substr(p,c-p).indexOf(i);u=-1!==v?v:c+s}return n}function b(t,e){var r=n(t,128);return e?a(r.cells,r.positions,.25):{edges:r.cells,positions:r.positions}}function _(t,e,r,n){var i=b(t,n),a=function(t,e,r){for(var n=e.textAlign||\\\"start\\\",i=e.textBaseline||\\\"alphabetic\\\",a=[1<<30,1<<30],o=[0,0],s=t.length,l=0;l<s;++l)for(var u=t[l],c=0;c<2;++c)a[c]=0|Math.min(a[c],u[c]),o[c]=0|Math.max(o[c],u[c]);var f=0;switch(n){case\\\"center\\\":f=-.5*(a[0]+o[0]);break;case\\\"right\\\":case\\\"end\\\":f=-o[0];break;case\\\"left\\\":case\\\"start\\\":f=-a[0];break;default:throw new Error(\\\"vectorize-text: Unrecognized textAlign: '\\\"+n+\\\"'\\\")}var h=0;switch(i){case\\\"hanging\\\":case\\\"top\\\":h=-a[1];break;case\\\"middle\\\":h=-.5*(a[1]+o[1]);break;case\\\"alphabetic\\\":case\\\"ideographic\\\":h=-3*r;break;case\\\"bottom\\\":h=-o[1];break;default:throw new Error(\\\"vectorize-text: Unrecoginized textBaseline: '\\\"+i+\\\"'\\\")}var p=1/r;return\\\"lineHeight\\\"in e?p*=+e.lineHeight:\\\"width\\\"in e?p=e.width/(o[0]-a[0]):\\\"height\\\"in e&&(p=e.height/(o[1]-a[1])),t.map((function(t){return[p*(t[0]+f),p*(t[1]+h)]}))}(i.positions,e,r),u=i.edges,c=\\\"ccw\\\"===e.orientation;if(o(a,u),e.polygons||e.polygon||e.polyline){for(var f=l(u,a),h=new Array(f.length),p=0;p<f.length;++p){for(var d=f[p],v=new Array(d.length),g=0;g<d.length;++g){for(var y=d[g],m=new Array(y.length),x=0;x<y.length;++x)m[x]=a[y[x]].slice();c&&m.reverse(),v[g]=m}h[p]=v}return h}return e.triangles||e.triangulate||e.triangle?{cells:s(a,u,{delaunay:!1,exterior:!1,interior:!0}),positions:a}:{edges:u,positions:a}}function w(t,e,r){try{return _(t,e,r,!0)}catch(t){}try{return _(t,e,r,!1)}catch(t){}return e.polygons||e.polyline||e.polygon?[]:e.triangles||e.triangulate||e.triangle?{cells:[],positions:[]}:{edges:[],positions:[]}}},5346:function(t){!function(){\\\"use strict\\\";if(\\\"undefined\\\"==typeof ses||!ses.ok||ses.ok()){\\\"undefined\\\"!=typeof ses&&(ses.weakMapPermitHostObjects=g);var e=!1;if(\\\"function\\\"==typeof WeakMap){var r=WeakMap;if(\\\"undefined\\\"!=typeof navigator&&/Firefox/.test(navigator.userAgent));else{var n=new r,i=Object.freeze({});if(n.set(i,1),1===n.get(i))return void(t.exports=WeakMap);e=!0}}Object.prototype.hasOwnProperty;var a=Object.getOwnPropertyNames,o=Object.defineProperty,s=Object.isExtensible,l=\\\"weakmap:\\\",u=l+\\\"ident:\\\"+Math.random()+\\\"___\\\";if(\\\"undefined\\\"!=typeof crypto&&\\\"function\\\"==typeof crypto.getRandomValues&&\\\"function\\\"==typeof ArrayBuffer&&\\\"function\\\"==typeof Uint8Array){var c=new ArrayBuffer(25),f=new Uint8Array(c);crypto.getRandomValues(f),u=l+\\\"rand:\\\"+Array.prototype.map.call(f,(function(t){return(t%36).toString(36)})).join(\\\"\\\")+\\\"___\\\"}if(o(Object,\\\"getOwnPropertyNames\\\",{value:function(t){return a(t).filter(y)}}),\\\"getPropertyNames\\\"in Object){var h=Object.getPropertyNames;o(Object,\\\"getPropertyNames\\\",{value:function(t){return h(t).filter(y)}})}!function(){var t=Object.freeze;o(Object,\\\"freeze\\\",{value:function(e){return m(e),t(e)}});var e=Object.seal;o(Object,\\\"seal\\\",{value:function(t){return m(t),e(t)}});var r=Object.preventExtensions;o(Object,\\\"preventExtensions\\\",{value:function(t){return m(t),r(t)}})}();var p=!1,d=0,v=function(){this instanceof v||b();var t=[],e=[],r=d++;return Object.create(v.prototype,{get___:{value:x((function(n,i){var a,o=m(n);return o?r in o?o[r]:i:(a=t.indexOf(n))>=0?e[a]:i}))},has___:{value:x((function(e){var n=m(e);return n?r in n:t.indexOf(e)>=0}))},set___:{value:x((function(n,i){var a,o=m(n);return o?o[r]=i:(a=t.indexOf(n))>=0?e[a]=i:(a=t.length,e[a]=i,t[a]=n),this}))},delete___:{value:x((function(n){var i,a,o=m(n);return o?r in o&&delete o[r]:!((i=t.indexOf(n))<0||(a=t.length-1,t[i]=void 0,e[i]=e[a],t[i]=t[a],t.length=a,e.length=a,0))}))}})};v.prototype=Object.create(Object.prototype,{get:{value:function(t,e){return this.get___(t,e)},writable:!0,configurable:!0},has:{value:function(t){return this.has___(t)},writable:!0,configurable:!0},set:{value:function(t,e){return this.set___(t,e)},writable:!0,configurable:!0},delete:{value:function(t){return this.delete___(t)},writable:!0,configurable:!0}}),\\\"function\\\"==typeof r?function(){function n(){this instanceof v||b();var t,n=new r,i=void 0,a=!1;return t=e?function(t,e){return n.set(t,e),n.has(t)||(i||(i=new v),i.set(t,e)),this}:function(t,e){if(a)try{n.set(t,e)}catch(r){i||(i=new v),i.set___(t,e)}else n.set(t,e);return this},Object.create(v.prototype,{get___:{value:x((function(t,e){return i?n.has(t)?n.get(t):i.get___(t,e):n.get(t,e)}))},has___:{value:x((function(t){return n.has(t)||!!i&&i.has___(t)}))},set___:{value:x(t)},delete___:{value:x((function(t){var e=!!n.delete(t);return i&&i.delete___(t)||e}))},permitHostObjects___:{value:x((function(t){if(t!==g)throw new Error(\\\"bogus call to permitHostObjects___\\\");a=!0}))}})}e&&\\\"undefined\\\"!=typeof Proxy&&(Proxy=void 0),n.prototype=v.prototype,t.exports=n,Object.defineProperty(WeakMap.prototype,\\\"constructor\\\",{value:WeakMap,enumerable:!1,configurable:!0,writable:!0})}():(\\\"undefined\\\"!=typeof Proxy&&(Proxy=void 0),t.exports=v)}function g(t){t.permitHostObjects___&&t.permitHostObjects___(g)}function y(t){return!(t.substr(0,8)==l&&\\\"___\\\"===t.substr(t.length-3))}function m(t){if(t!==Object(t))throw new TypeError(\\\"Not an object: \\\"+t);var e=t[u];if(e&&e.key===t)return e;if(s(t)){e={key:t};try{return o(t,u,{value:e,writable:!1,enumerable:!1,configurable:!1}),e}catch(t){return}}}function x(t){return t.prototype=null,Object.freeze(t)}function b(){p||\\\"undefined\\\"==typeof console||(p=!0,console.warn(\\\"WeakMap should be invoked as new WeakMap(), not WeakMap(). This will be an error in the future.\\\"))}}()},9222:function(t,e,r){var n=r(7178);t.exports=function(){var t={};return function(e){if((\\\"object\\\"!=typeof e||null===e)&&\\\"function\\\"!=typeof e)throw new Error(\\\"Weakmap-shim: Key must be object\\\");var r=e.valueOf(t);return r&&r.identity===t?r:n(e,t)}}},7178:function(t){t.exports=function(t,e){var r={identity:e},n=t.valueOf;return Object.defineProperty(t,\\\"valueOf\\\",{value:function(t){return t!==e?n.apply(this,arguments):r},writable:!0}),r}},4037:function(t,e,r){var n=r(9222);t.exports=function(){var t=n();return{get:function(e,r){var n=t(e);return n.hasOwnProperty(\\\"value\\\")?n.value:r},set:function(e,r){return t(e).value=r,this},has:function(e){return\\\"value\\\"in t(e)},delete:function(e){return delete t(e).value}}}},6183:function(t){\\\"use strict\\\";t.exports=function(t){var e={};return function(r,n,i){var a=r.dtype,o=r.order,s=[a,o.join()].join(),l=e[s];return l||(e[s]=l=t([a,o])),l(r.shape.slice(0),r.data,r.stride,0|r.offset,n,i)}}(function(){return function(t,e,r,n,i,a){var o=t[0],s=r[0],l=[0],u=s;n|=0;var c=0,f=s;for(c=0;c<o;++c){var h=e[n]-a,p=e[n+u]-a;h>=0!=p>=0&&i.push(l[0]+.5+.5*(h+p)/(h-p)),n+=f,++l[0]}}}.bind(void 0,{funcName:\\\"zeroCrossings\\\"}))},9584:function(t,e,r){\\\"use strict\\\";t.exports=function(t,e){var r=[];return e=+e||0,n(t.hi(t.shape[0]-1),r,e),r};var n=r(6183)},6601:function(){}},e={};function r(n){var i=e[n];if(void 0!==i)return i.exports;var a=e[n]={id:n,loaded:!1,exports:{}};return t[n].call(a.exports,a,a.exports,r),a.loaded=!0,a.exports}return r.g=function(){if(\\\"object\\\"==typeof globalThis)return globalThis;try{return this||new Function(\\\"return this\\\")()}catch(t){if(\\\"object\\\"==typeof window)return window}}(),r.nmd=function(t){return t.paths=[],t.children||(t.children=[]),t},r(7386)}()},t.exports=n()},12856:function(t,e,r){\\\"use strict\\\";function n(t,e){for(var r=0;r<e.length;r++){var n=e[r];n.enumerable=n.enumerable||!1,n.configurable=!0,\\\"value\\\"in n&&(n.writable=!0),Object.defineProperty(t,n.key,n)}}function i(t,e){return i=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(t,e){return t.__proto__=e,t},i(t,e)}function a(t){if(void 0===t)throw new ReferenceError(\\\"this hasn't been initialised - super() hasn't been called\\\");return t}function o(t){return o=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(t){return t.__proto__||Object.getPrototypeOf(t)},o(t)}function s(t){return s=\\\"function\\\"==typeof Symbol&&\\\"symbol\\\"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&\\\"function\\\"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?\\\"symbol\\\":typeof t},s(t)}var l=r(95341),u=r(95280),c=\\\"function\\\"==typeof Symbol&&\\\"function\\\"==typeof Symbol.for?Symbol.for(\\\"nodejs.util.inspect.custom\\\"):null;e.Buffer=p,e.SlowBuffer=function(t){return+t!=t&&(t=0),p.alloc(+t)},e.INSPECT_MAX_BYTES=50;var f=2147483647;function h(t){if(t>f)throw new RangeError('The value \\\"'+t+'\\\" is invalid for option \\\"size\\\"');var e=new Uint8Array(t);return Object.setPrototypeOf(e,p.prototype),e}function p(t,e,r){if(\\\"number\\\"==typeof t){if(\\\"string\\\"==typeof e)throw new TypeError('The \\\"string\\\" argument must be of type string. Received type number');return g(t)}return d(t,e,r)}function d(t,e,r){if(\\\"string\\\"==typeof t)return function(t,e){if(\\\"string\\\"==typeof e&&\\\"\\\"!==e||(e=\\\"utf8\\\"),!p.isEncoding(e))throw new TypeError(\\\"Unknown encoding: \\\"+e);var r=0|b(t,e),n=h(r),i=n.write(t,e);return i!==r&&(n=n.slice(0,i)),n}(t,e);if(ArrayBuffer.isView(t))return function(t){if(tt(t,Uint8Array)){var e=new Uint8Array(t);return m(e.buffer,e.byteOffset,e.byteLength)}return y(t)}(t);if(null==t)throw new TypeError(\\\"The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type \\\"+s(t));if(tt(t,ArrayBuffer)||t&&tt(t.buffer,ArrayBuffer))return m(t,e,r);if(\\\"undefined\\\"!=typeof SharedArrayBuffer&&(tt(t,SharedArrayBuffer)||t&&tt(t.buffer,SharedArrayBuffer)))return m(t,e,r);if(\\\"number\\\"==typeof t)throw new TypeError('The \\\"value\\\" argument must not be of type number. Received type number');var n=t.valueOf&&t.valueOf();if(null!=n&&n!==t)return p.from(n,e,r);var i=function(t){if(p.isBuffer(t)){var e=0|x(t.length),r=h(e);return 0===r.length||t.copy(r,0,0,e),r}return void 0!==t.length?\\\"number\\\"!=typeof t.length||et(t.length)?h(0):y(t):\\\"Buffer\\\"===t.type&&Array.isArray(t.data)?y(t.data):void 0}(t);if(i)return i;if(\\\"undefined\\\"!=typeof Symbol&&null!=Symbol.toPrimitive&&\\\"function\\\"==typeof t[Symbol.toPrimitive])return p.from(t[Symbol.toPrimitive](\\\"string\\\"),e,r);throw new TypeError(\\\"The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type \\\"+s(t))}function v(t){if(\\\"number\\\"!=typeof t)throw new TypeError('\\\"size\\\" argument must be of type number');if(t<0)throw new RangeError('The value \\\"'+t+'\\\" is invalid for option \\\"size\\\"')}function g(t){return v(t),h(t<0?0:0|x(t))}function y(t){for(var e=t.length<0?0:0|x(t.length),r=h(e),n=0;n<e;n+=1)r[n]=255&t[n];return r}function m(t,e,r){if(e<0||t.byteLength<e)throw new RangeError('\\\"offset\\\" is outside of buffer bounds');if(t.byteLength<e+(r||0))throw new RangeError('\\\"length\\\" is outside of buffer bounds');var n;return n=void 0===e&&void 0===r?new Uint8Array(t):void 0===r?new Uint8Array(t,e):new Uint8Array(t,e,r),Object.setPrototypeOf(n,p.prototype),n}function x(t){if(t>=f)throw new RangeError(\\\"Attempt to allocate Buffer larger than maximum size: 0x\\\"+f.toString(16)+\\\" bytes\\\");return 0|t}function b(t,e){if(p.isBuffer(t))return t.length;if(ArrayBuffer.isView(t)||tt(t,ArrayBuffer))return t.byteLength;if(\\\"string\\\"!=typeof t)throw new TypeError('The \\\"string\\\" argument must be one of type string, Buffer, or ArrayBuffer. Received type '+s(t));var r=t.length,n=arguments.length>2&&!0===arguments[2];if(!n&&0===r)return 0;for(var i=!1;;)switch(e){case\\\"ascii\\\":case\\\"latin1\\\":case\\\"binary\\\":return r;case\\\"utf8\\\":case\\\"utf-8\\\":return K(t).length;case\\\"ucs2\\\":case\\\"ucs-2\\\":case\\\"utf16le\\\":case\\\"utf-16le\\\":return 2*r;case\\\"hex\\\":return r>>>1;case\\\"base64\\\":return $(t).length;default:if(i)return n?-1:K(t).length;e=(\\\"\\\"+e).toLowerCase(),i=!0}}function _(t,e,r){var n=!1;if((void 0===e||e<0)&&(e=0),e>this.length)return\\\"\\\";if((void 0===r||r>this.length)&&(r=this.length),r<=0)return\\\"\\\";if((r>>>=0)<=(e>>>=0))return\\\"\\\";for(t||(t=\\\"utf8\\\");;)switch(t){case\\\"hex\\\":return z(this,e,r);case\\\"utf8\\\":case\\\"utf-8\\\":return P(this,e,r);case\\\"ascii\\\":return I(this,e,r);case\\\"latin1\\\":case\\\"binary\\\":return D(this,e,r);case\\\"base64\\\":return C(this,e,r);case\\\"ucs2\\\":case\\\"ucs-2\\\":case\\\"utf16le\\\":case\\\"utf-16le\\\":return R(this,e,r);default:if(n)throw new TypeError(\\\"Unknown encoding: \\\"+t);t=(t+\\\"\\\").toLowerCase(),n=!0}}function w(t,e,r){var n=t[e];t[e]=t[r],t[r]=n}function T(t,e,r,n,i){if(0===t.length)return-1;if(\\\"string\\\"==typeof r?(n=r,r=0):r>2147483647?r=2147483647:r<-2147483648&&(r=-2147483648),et(r=+r)&&(r=i?0:t.length-1),r<0&&(r=t.length+r),r>=t.length){if(i)return-1;r=t.length-1}else if(r<0){if(!i)return-1;r=0}if(\\\"string\\\"==typeof e&&(e=p.from(e,n)),p.isBuffer(e))return 0===e.length?-1:k(t,e,r,n,i);if(\\\"number\\\"==typeof e)return e&=255,\\\"function\\\"==typeof Uint8Array.prototype.indexOf?i?Uint8Array.prototype.indexOf.call(t,e,r):Uint8Array.prototype.lastIndexOf.call(t,e,r):k(t,[e],r,n,i);throw new TypeError(\\\"val must be string, number or Buffer\\\")}function k(t,e,r,n,i){var a,o=1,s=t.length,l=e.length;if(void 0!==n&&(\\\"ucs2\\\"===(n=String(n).toLowerCase())||\\\"ucs-2\\\"===n||\\\"utf16le\\\"===n||\\\"utf-16le\\\"===n)){if(t.length<2||e.length<2)return-1;o=2,s/=2,l/=2,r/=2}function u(t,e){return 1===o?t[e]:t.readUInt16BE(e*o)}if(i){var c=-1;for(a=r;a<s;a++)if(u(t,a)===u(e,-1===c?0:a-c)){if(-1===c&&(c=a),a-c+1===l)return c*o}else-1!==c&&(a-=a-c),c=-1}else for(r+l>s&&(r=s-l),a=r;a>=0;a--){for(var f=!0,h=0;h<l;h++)if(u(t,a+h)!==u(e,h)){f=!1;break}if(f)return a}return-1}function A(t,e,r,n){r=Number(r)||0;var i=t.length-r;n?(n=Number(n))>i&&(n=i):n=i;var a,o=e.length;for(n>o/2&&(n=o/2),a=0;a<n;++a){var s=parseInt(e.substr(2*a,2),16);if(et(s))return a;t[r+a]=s}return a}function M(t,e,r,n){return Q(K(e,t.length-r),t,r,n)}function S(t,e,r,n){return Q(function(t){for(var e=[],r=0;r<t.length;++r)e.push(255&t.charCodeAt(r));return e}(e),t,r,n)}function E(t,e,r,n){return Q($(e),t,r,n)}function L(t,e,r,n){return Q(function(t,e){for(var r,n,i,a=[],o=0;o<t.length&&!((e-=2)<0);++o)n=(r=t.charCodeAt(o))>>8,i=r%256,a.push(i),a.push(n);return a}(e,t.length-r),t,r,n)}function C(t,e,r){return 0===e&&r===t.length?l.fromByteArray(t):l.fromByteArray(t.slice(e,r))}function P(t,e,r){r=Math.min(t.length,r);for(var n=[],i=e;i<r;){var a=t[i],o=null,s=a>239?4:a>223?3:a>191?2:1;if(i+s<=r){var l=void 0,u=void 0,c=void 0,f=void 0;switch(s){case 1:a<128&&(o=a);break;case 2:128==(192&(l=t[i+1]))&&(f=(31&a)<<6|63&l)>127&&(o=f);break;case 3:l=t[i+1],u=t[i+2],128==(192&l)&&128==(192&u)&&(f=(15&a)<<12|(63&l)<<6|63&u)>2047&&(f<55296||f>57343)&&(o=f);break;case 4:l=t[i+1],u=t[i+2],c=t[i+3],128==(192&l)&&128==(192&u)&&128==(192&c)&&(f=(15&a)<<18|(63&l)<<12|(63&u)<<6|63&c)>65535&&f<1114112&&(o=f)}}null===o?(o=65533,s=1):o>65535&&(o-=65536,n.push(o>>>10&1023|55296),o=56320|1023&o),n.push(o),i+=s}return function(t){var e=t.length;if(e<=O)return String.fromCharCode.apply(String,t);for(var r=\\\"\\\",n=0;n<e;)r+=String.fromCharCode.apply(String,t.slice(n,n+=O));return r}(n)}e.kMaxLength=f,p.TYPED_ARRAY_SUPPORT=function(){try{var t=new Uint8Array(1),e={foo:function(){return 42}};return Object.setPrototypeOf(e,Uint8Array.prototype),Object.setPrototypeOf(t,e),42===t.foo()}catch(t){return!1}}(),p.TYPED_ARRAY_SUPPORT||\\\"undefined\\\"==typeof console||\\\"function\\\"!=typeof console.error||console.error(\\\"This browser lacks typed array (Uint8Array) support which is required by `buffer` v5.x. Use `buffer` v4.x if you require old browser support.\\\"),Object.defineProperty(p.prototype,\\\"parent\\\",{enumerable:!0,get:function(){if(p.isBuffer(this))return this.buffer}}),Object.defineProperty(p.prototype,\\\"offset\\\",{enumerable:!0,get:function(){if(p.isBuffer(this))return this.byteOffset}}),p.poolSize=8192,p.from=function(t,e,r){return d(t,e,r)},Object.setPrototypeOf(p.prototype,Uint8Array.prototype),Object.setPrototypeOf(p,Uint8Array),p.alloc=function(t,e,r){return function(t,e,r){return v(t),t<=0?h(t):void 0!==e?\\\"string\\\"==typeof r?h(t).fill(e,r):h(t).fill(e):h(t)}(t,e,r)},p.allocUnsafe=function(t){return g(t)},p.allocUnsafeSlow=function(t){return g(t)},p.isBuffer=function(t){return null!=t&&!0===t._isBuffer&&t!==p.prototype},p.compare=function(t,e){if(tt(t,Uint8Array)&&(t=p.from(t,t.offset,t.byteLength)),tt(e,Uint8Array)&&(e=p.from(e,e.offset,e.byteLength)),!p.isBuffer(t)||!p.isBuffer(e))throw new TypeError('The \\\"buf1\\\", \\\"buf2\\\" arguments must be one of type Buffer or Uint8Array');if(t===e)return 0;for(var r=t.length,n=e.length,i=0,a=Math.min(r,n);i<a;++i)if(t[i]!==e[i]){r=t[i],n=e[i];break}return r<n?-1:n<r?1:0},p.isEncoding=function(t){switch(String(t).toLowerCase()){case\\\"hex\\\":case\\\"utf8\\\":case\\\"utf-8\\\":case\\\"ascii\\\":case\\\"latin1\\\":case\\\"binary\\\":case\\\"base64\\\":case\\\"ucs2\\\":case\\\"ucs-2\\\":case\\\"utf16le\\\":case\\\"utf-16le\\\":return!0;default:return!1}},p.concat=function(t,e){if(!Array.isArray(t))throw new TypeError('\\\"list\\\" argument must be an Array of Buffers');if(0===t.length)return p.alloc(0);var r;if(void 0===e)for(e=0,r=0;r<t.length;++r)e+=t[r].length;var n=p.allocUnsafe(e),i=0;for(r=0;r<t.length;++r){var a=t[r];if(tt(a,Uint8Array))i+a.length>n.length?(p.isBuffer(a)||(a=p.from(a)),a.copy(n,i)):Uint8Array.prototype.set.call(n,a,i);else{if(!p.isBuffer(a))throw new TypeError('\\\"list\\\" argument must be an Array of Buffers');a.copy(n,i)}i+=a.length}return n},p.byteLength=b,p.prototype._isBuffer=!0,p.prototype.swap16=function(){var t=this.length;if(t%2!=0)throw new RangeError(\\\"Buffer size must be a multiple of 16-bits\\\");for(var e=0;e<t;e+=2)w(this,e,e+1);return this},p.prototype.swap32=function(){var t=this.length;if(t%4!=0)throw new RangeError(\\\"Buffer size must be a multiple of 32-bits\\\");for(var e=0;e<t;e+=4)w(this,e,e+3),w(this,e+1,e+2);return this},p.prototype.swap64=function(){var t=this.length;if(t%8!=0)throw new RangeError(\\\"Buffer size must be a multiple of 64-bits\\\");for(var e=0;e<t;e+=8)w(this,e,e+7),w(this,e+1,e+6),w(this,e+2,e+5),w(this,e+3,e+4);return this},p.prototype.toString=function(){var t=this.length;return 0===t?\\\"\\\":0===arguments.length?P(this,0,t):_.apply(this,arguments)},p.prototype.toLocaleString=p.prototype.toString,p.prototype.equals=function(t){if(!p.isBuffer(t))throw new TypeError(\\\"Argument must be a Buffer\\\");return this===t||0===p.compare(this,t)},p.prototype.inspect=function(){var t=\\\"\\\",r=e.INSPECT_MAX_BYTES;return t=this.toString(\\\"hex\\\",0,r).replace(/(.{2})/g,\\\"$1 \\\").trim(),this.length>r&&(t+=\\\" ... \\\"),\\\"<Buffer \\\"+t+\\\">\\\"},c&&(p.prototype[c]=p.prototype.inspect),p.prototype.compare=function(t,e,r,n,i){if(tt(t,Uint8Array)&&(t=p.from(t,t.offset,t.byteLength)),!p.isBuffer(t))throw new TypeError('The \\\"target\\\" argument must be one of type Buffer or Uint8Array. Received type '+s(t));if(void 0===e&&(e=0),void 0===r&&(r=t?t.length:0),void 0===n&&(n=0),void 0===i&&(i=this.length),e<0||r>t.length||n<0||i>this.length)throw new RangeError(\\\"out of range index\\\");if(n>=i&&e>=r)return 0;if(n>=i)return-1;if(e>=r)return 1;if(this===t)return 0;for(var a=(i>>>=0)-(n>>>=0),o=(r>>>=0)-(e>>>=0),l=Math.min(a,o),u=this.slice(n,i),c=t.slice(e,r),f=0;f<l;++f)if(u[f]!==c[f]){a=u[f],o=c[f];break}return a<o?-1:o<a?1:0},p.prototype.includes=function(t,e,r){return-1!==this.indexOf(t,e,r)},p.prototype.indexOf=function(t,e,r){return T(this,t,e,r,!0)},p.prototype.lastIndexOf=function(t,e,r){return T(this,t,e,r,!1)},p.prototype.write=function(t,e,r,n){if(void 0===e)n=\\\"utf8\\\",r=this.length,e=0;else if(void 0===r&&\\\"string\\\"==typeof e)n=e,r=this.length,e=0;else{if(!isFinite(e))throw new Error(\\\"Buffer.write(string, encoding, offset[, length]) is no longer supported\\\");e>>>=0,isFinite(r)?(r>>>=0,void 0===n&&(n=\\\"utf8\\\")):(n=r,r=void 0)}var i=this.length-e;if((void 0===r||r>i)&&(r=i),t.length>0&&(r<0||e<0)||e>this.length)throw new RangeError(\\\"Attempt to write outside buffer bounds\\\");n||(n=\\\"utf8\\\");for(var a=!1;;)switch(n){case\\\"hex\\\":return A(this,t,e,r);case\\\"utf8\\\":case\\\"utf-8\\\":return M(this,t,e,r);case\\\"ascii\\\":case\\\"latin1\\\":case\\\"binary\\\":return S(this,t,e,r);case\\\"base64\\\":return E(this,t,e,r);case\\\"ucs2\\\":case\\\"ucs-2\\\":case\\\"utf16le\\\":case\\\"utf-16le\\\":return L(this,t,e,r);default:if(a)throw new TypeError(\\\"Unknown encoding: \\\"+n);n=(\\\"\\\"+n).toLowerCase(),a=!0}},p.prototype.toJSON=function(){return{type:\\\"Buffer\\\",data:Array.prototype.slice.call(this._arr||this,0)}};var O=4096;function I(t,e,r){var n=\\\"\\\";r=Math.min(t.length,r);for(var i=e;i<r;++i)n+=String.fromCharCode(127&t[i]);return n}function D(t,e,r){var n=\\\"\\\";r=Math.min(t.length,r);for(var i=e;i<r;++i)n+=String.fromCharCode(t[i]);return n}function z(t,e,r){var n=t.length;(!e||e<0)&&(e=0),(!r||r<0||r>n)&&(r=n);for(var i=\\\"\\\",a=e;a<r;++a)i+=rt[t[a]];return i}function R(t,e,r){for(var n=t.slice(e,r),i=\\\"\\\",a=0;a<n.length-1;a+=2)i+=String.fromCharCode(n[a]+256*n[a+1]);return i}function F(t,e,r){if(t%1!=0||t<0)throw new RangeError(\\\"offset is not uint\\\");if(t+e>r)throw new RangeError(\\\"Trying to access beyond buffer length\\\")}function B(t,e,r,n,i,a){if(!p.isBuffer(t))throw new TypeError('\\\"buffer\\\" argument must be a Buffer instance');if(e>i||e<a)throw new RangeError('\\\"value\\\" argument is out of bounds');if(r+n>t.length)throw new RangeError(\\\"Index out of range\\\")}function N(t,e,r,n,i){Y(e,n,i,t,r,7);var a=Number(e&BigInt(4294967295));t[r++]=a,a>>=8,t[r++]=a,a>>=8,t[r++]=a,a>>=8,t[r++]=a;var o=Number(e>>BigInt(32)&BigInt(4294967295));return t[r++]=o,o>>=8,t[r++]=o,o>>=8,t[r++]=o,o>>=8,t[r++]=o,r}function j(t,e,r,n,i){Y(e,n,i,t,r,7);var a=Number(e&BigInt(4294967295));t[r+7]=a,a>>=8,t[r+6]=a,a>>=8,t[r+5]=a,a>>=8,t[r+4]=a;var o=Number(e>>BigInt(32)&BigInt(4294967295));return t[r+3]=o,o>>=8,t[r+2]=o,o>>=8,t[r+1]=o,o>>=8,t[r]=o,r+8}function U(t,e,r,n,i,a){if(r+n>t.length)throw new RangeError(\\\"Index out of range\\\");if(r<0)throw new RangeError(\\\"Index out of range\\\")}function V(t,e,r,n,i){return e=+e,r>>>=0,i||U(t,0,r,4),u.write(t,e,r,n,23,4),r+4}function H(t,e,r,n,i){return e=+e,r>>>=0,i||U(t,0,r,8),u.write(t,e,r,n,52,8),r+8}p.prototype.slice=function(t,e){var r=this.length;(t=~~t)<0?(t+=r)<0&&(t=0):t>r&&(t=r),(e=void 0===e?r:~~e)<0?(e+=r)<0&&(e=0):e>r&&(e=r),e<t&&(e=t);var n=this.subarray(t,e);return Object.setPrototypeOf(n,p.prototype),n},p.prototype.readUintLE=p.prototype.readUIntLE=function(t,e,r){t>>>=0,e>>>=0,r||F(t,e,this.length);for(var n=this[t],i=1,a=0;++a<e&&(i*=256);)n+=this[t+a]*i;return n},p.prototype.readUintBE=p.prototype.readUIntBE=function(t,e,r){t>>>=0,e>>>=0,r||F(t,e,this.length);for(var n=this[t+--e],i=1;e>0&&(i*=256);)n+=this[t+--e]*i;return n},p.prototype.readUint8=p.prototype.readUInt8=function(t,e){return t>>>=0,e||F(t,1,this.length),this[t]},p.prototype.readUint16LE=p.prototype.readUInt16LE=function(t,e){return t>>>=0,e||F(t,2,this.length),this[t]|this[t+1]<<8},p.prototype.readUint16BE=p.prototype.readUInt16BE=function(t,e){return t>>>=0,e||F(t,2,this.length),this[t]<<8|this[t+1]},p.prototype.readUint32LE=p.prototype.readUInt32LE=function(t,e){return t>>>=0,e||F(t,4,this.length),(this[t]|this[t+1]<<8|this[t+2]<<16)+16777216*this[t+3]},p.prototype.readUint32BE=p.prototype.readUInt32BE=function(t,e){return t>>>=0,e||F(t,4,this.length),16777216*this[t]+(this[t+1]<<16|this[t+2]<<8|this[t+3])},p.prototype.readBigUInt64LE=nt((function(t){W(t>>>=0,\\\"offset\\\");var e=this[t],r=this[t+7];void 0!==e&&void 0!==r||X(t,this.length-8);var n=e+this[++t]*Math.pow(2,8)+this[++t]*Math.pow(2,16)+this[++t]*Math.pow(2,24),i=this[++t]+this[++t]*Math.pow(2,8)+this[++t]*Math.pow(2,16)+r*Math.pow(2,24);return BigInt(n)+(BigInt(i)<<BigInt(32))})),p.prototype.readBigUInt64BE=nt((function(t){W(t>>>=0,\\\"offset\\\");var e=this[t],r=this[t+7];void 0!==e&&void 0!==r||X(t,this.length-8);var n=e*Math.pow(2,24)+this[++t]*Math.pow(2,16)+this[++t]*Math.pow(2,8)+this[++t],i=this[++t]*Math.pow(2,24)+this[++t]*Math.pow(2,16)+this[++t]*Math.pow(2,8)+r;return(BigInt(n)<<BigInt(32))+BigInt(i)})),p.prototype.readIntLE=function(t,e,r){t>>>=0,e>>>=0,r||F(t,e,this.length);for(var n=this[t],i=1,a=0;++a<e&&(i*=256);)n+=this[t+a]*i;return n>=(i*=128)&&(n-=Math.pow(2,8*e)),n},p.prototype.readIntBE=function(t,e,r){t>>>=0,e>>>=0,r||F(t,e,this.length);for(var n=e,i=1,a=this[t+--n];n>0&&(i*=256);)a+=this[t+--n]*i;return a>=(i*=128)&&(a-=Math.pow(2,8*e)),a},p.prototype.readInt8=function(t,e){return t>>>=0,e||F(t,1,this.length),128&this[t]?-1*(255-this[t]+1):this[t]},p.prototype.readInt16LE=function(t,e){t>>>=0,e||F(t,2,this.length);var r=this[t]|this[t+1]<<8;return 32768&r?4294901760|r:r},p.prototype.readInt16BE=function(t,e){t>>>=0,e||F(t,2,this.length);var r=this[t+1]|this[t]<<8;return 32768&r?4294901760|r:r},p.prototype.readInt32LE=function(t,e){return t>>>=0,e||F(t,4,this.length),this[t]|this[t+1]<<8|this[t+2]<<16|this[t+3]<<24},p.prototype.readInt32BE=function(t,e){return t>>>=0,e||F(t,4,this.length),this[t]<<24|this[t+1]<<16|this[t+2]<<8|this[t+3]},p.prototype.readBigInt64LE=nt((function(t){W(t>>>=0,\\\"offset\\\");var e=this[t],r=this[t+7];void 0!==e&&void 0!==r||X(t,this.length-8);var n=this[t+4]+this[t+5]*Math.pow(2,8)+this[t+6]*Math.pow(2,16)+(r<<24);return(BigInt(n)<<BigInt(32))+BigInt(e+this[++t]*Math.pow(2,8)+this[++t]*Math.pow(2,16)+this[++t]*Math.pow(2,24))})),p.prototype.readBigInt64BE=nt((function(t){W(t>>>=0,\\\"offset\\\");var e=this[t],r=this[t+7];void 0!==e&&void 0!==r||X(t,this.length-8);var n=(e<<24)+this[++t]*Math.pow(2,16)+this[++t]*Math.pow(2,8)+this[++t];return(BigInt(n)<<BigInt(32))+BigInt(this[++t]*Math.pow(2,24)+this[++t]*Math.pow(2,16)+this[++t]*Math.pow(2,8)+r)})),p.prototype.readFloatLE=function(t,e){return t>>>=0,e||F(t,4,this.length),u.read(this,t,!0,23,4)},p.prototype.readFloatBE=function(t,e){return t>>>=0,e||F(t,4,this.length),u.read(this,t,!1,23,4)},p.prototype.readDoubleLE=function(t,e){return t>>>=0,e||F(t,8,this.length),u.read(this,t,!0,52,8)},p.prototype.readDoubleBE=function(t,e){return t>>>=0,e||F(t,8,this.length),u.read(this,t,!1,52,8)},p.prototype.writeUintLE=p.prototype.writeUIntLE=function(t,e,r,n){t=+t,e>>>=0,r>>>=0,n||B(this,t,e,r,Math.pow(2,8*r)-1,0);var i=1,a=0;for(this[e]=255&t;++a<r&&(i*=256);)this[e+a]=t/i&255;return e+r},p.prototype.writeUintBE=p.prototype.writeUIntBE=function(t,e,r,n){t=+t,e>>>=0,r>>>=0,n||B(this,t,e,r,Math.pow(2,8*r)-1,0);var i=r-1,a=1;for(this[e+i]=255&t;--i>=0&&(a*=256);)this[e+i]=t/a&255;return e+r},p.prototype.writeUint8=p.prototype.writeUInt8=function(t,e,r){return t=+t,e>>>=0,r||B(this,t,e,1,255,0),this[e]=255&t,e+1},p.prototype.writeUint16LE=p.prototype.writeUInt16LE=function(t,e,r){return t=+t,e>>>=0,r||B(this,t,e,2,65535,0),this[e]=255&t,this[e+1]=t>>>8,e+2},p.prototype.writeUint16BE=p.prototype.writeUInt16BE=function(t,e,r){return t=+t,e>>>=0,r||B(this,t,e,2,65535,0),this[e]=t>>>8,this[e+1]=255&t,e+2},p.prototype.writeUint32LE=p.prototype.writeUInt32LE=function(t,e,r){return t=+t,e>>>=0,r||B(this,t,e,4,4294967295,0),this[e+3]=t>>>24,this[e+2]=t>>>16,this[e+1]=t>>>8,this[e]=255&t,e+4},p.prototype.writeUint32BE=p.prototype.writeUInt32BE=function(t,e,r){return t=+t,e>>>=0,r||B(this,t,e,4,4294967295,0),this[e]=t>>>24,this[e+1]=t>>>16,this[e+2]=t>>>8,this[e+3]=255&t,e+4},p.prototype.writeBigUInt64LE=nt((function(t){return N(this,t,arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,BigInt(0),BigInt(\\\"0xffffffffffffffff\\\"))})),p.prototype.writeBigUInt64BE=nt((function(t){return j(this,t,arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,BigInt(0),BigInt(\\\"0xffffffffffffffff\\\"))})),p.prototype.writeIntLE=function(t,e,r,n){if(t=+t,e>>>=0,!n){var i=Math.pow(2,8*r-1);B(this,t,e,r,i-1,-i)}var a=0,o=1,s=0;for(this[e]=255&t;++a<r&&(o*=256);)t<0&&0===s&&0!==this[e+a-1]&&(s=1),this[e+a]=(t/o>>0)-s&255;return e+r},p.prototype.writeIntBE=function(t,e,r,n){if(t=+t,e>>>=0,!n){var i=Math.pow(2,8*r-1);B(this,t,e,r,i-1,-i)}var a=r-1,o=1,s=0;for(this[e+a]=255&t;--a>=0&&(o*=256);)t<0&&0===s&&0!==this[e+a+1]&&(s=1),this[e+a]=(t/o>>0)-s&255;return e+r},p.prototype.writeInt8=function(t,e,r){return t=+t,e>>>=0,r||B(this,t,e,1,127,-128),t<0&&(t=255+t+1),this[e]=255&t,e+1},p.prototype.writeInt16LE=function(t,e,r){return t=+t,e>>>=0,r||B(this,t,e,2,32767,-32768),this[e]=255&t,this[e+1]=t>>>8,e+2},p.prototype.writeInt16BE=function(t,e,r){return t=+t,e>>>=0,r||B(this,t,e,2,32767,-32768),this[e]=t>>>8,this[e+1]=255&t,e+2},p.prototype.writeInt32LE=function(t,e,r){return t=+t,e>>>=0,r||B(this,t,e,4,2147483647,-2147483648),this[e]=255&t,this[e+1]=t>>>8,this[e+2]=t>>>16,this[e+3]=t>>>24,e+4},p.prototype.writeInt32BE=function(t,e,r){return t=+t,e>>>=0,r||B(this,t,e,4,2147483647,-2147483648),t<0&&(t=4294967295+t+1),this[e]=t>>>24,this[e+1]=t>>>16,this[e+2]=t>>>8,this[e+3]=255&t,e+4},p.prototype.writeBigInt64LE=nt((function(t){return N(this,t,arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,-BigInt(\\\"0x8000000000000000\\\"),BigInt(\\\"0x7fffffffffffffff\\\"))})),p.prototype.writeBigInt64BE=nt((function(t){return j(this,t,arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,-BigInt(\\\"0x8000000000000000\\\"),BigInt(\\\"0x7fffffffffffffff\\\"))})),p.prototype.writeFloatLE=function(t,e,r){return V(this,t,e,!0,r)},p.prototype.writeFloatBE=function(t,e,r){return V(this,t,e,!1,r)},p.prototype.writeDoubleLE=function(t,e,r){return H(this,t,e,!0,r)},p.prototype.writeDoubleBE=function(t,e,r){return H(this,t,e,!1,r)},p.prototype.copy=function(t,e,r,n){if(!p.isBuffer(t))throw new TypeError(\\\"argument should be a Buffer\\\");if(r||(r=0),n||0===n||(n=this.length),e>=t.length&&(e=t.length),e||(e=0),n>0&&n<r&&(n=r),n===r)return 0;if(0===t.length||0===this.length)return 0;if(e<0)throw new RangeError(\\\"targetStart out of bounds\\\");if(r<0||r>=this.length)throw new RangeError(\\\"Index out of range\\\");if(n<0)throw new RangeError(\\\"sourceEnd out of bounds\\\");n>this.length&&(n=this.length),t.length-e<n-r&&(n=t.length-e+r);var i=n-r;return this===t&&\\\"function\\\"==typeof Uint8Array.prototype.copyWithin?this.copyWithin(e,r,n):Uint8Array.prototype.set.call(t,this.subarray(r,n),e),i},p.prototype.fill=function(t,e,r,n){if(\\\"string\\\"==typeof t){if(\\\"string\\\"==typeof e?(n=e,e=0,r=this.length):\\\"string\\\"==typeof r&&(n=r,r=this.length),void 0!==n&&\\\"string\\\"!=typeof n)throw new TypeError(\\\"encoding must be a string\\\");if(\\\"string\\\"==typeof n&&!p.isEncoding(n))throw new TypeError(\\\"Unknown encoding: \\\"+n);if(1===t.length){var i=t.charCodeAt(0);(\\\"utf8\\\"===n&&i<128||\\\"latin1\\\"===n)&&(t=i)}}else\\\"number\\\"==typeof t?t&=255:\\\"boolean\\\"==typeof t&&(t=Number(t));if(e<0||this.length<e||this.length<r)throw new RangeError(\\\"Out of range index\\\");if(r<=e)return this;var a;if(e>>>=0,r=void 0===r?this.length:r>>>0,t||(t=0),\\\"number\\\"==typeof t)for(a=e;a<r;++a)this[a]=t;else{var o=p.isBuffer(t)?t:p.from(t,n),s=o.length;if(0===s)throw new TypeError('The value \\\"'+t+'\\\" is invalid for argument \\\"value\\\"');for(a=0;a<r-e;++a)this[a+e]=o[a%s]}return this};var q={};function G(t,e,r){q[t]=function(r){!function(t,e){if(\\\"function\\\"!=typeof e&&null!==e)throw new TypeError(\\\"Super expression must either be null or a function\\\");t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,writable:!0,configurable:!0}}),Object.defineProperty(t,\\\"prototype\\\",{writable:!1}),e&&i(t,e)}(p,r);var l,u,c,f,h=(c=p,f=function(){if(\\\"undefined\\\"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if(\\\"function\\\"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(t){return!1}}(),function(){var t,e=o(c);if(f){var r=o(this).constructor;t=Reflect.construct(e,arguments,r)}else t=e.apply(this,arguments);return function(t,e){if(e&&(\\\"object\\\"===s(e)||\\\"function\\\"==typeof e))return e;if(void 0!==e)throw new TypeError(\\\"Derived constructors may only return object or undefined\\\");return a(t)}(this,t)});function p(){var r;return function(t,e){if(!(t instanceof e))throw new TypeError(\\\"Cannot call a class as a function\\\")}(this,p),r=h.call(this),Object.defineProperty(a(r),\\\"message\\\",{value:e.apply(a(r),arguments),writable:!0,configurable:!0}),r.name=\\\"\\\".concat(r.name,\\\" [\\\").concat(t,\\\"]\\\"),r.stack,delete r.name,r}return l=p,(u=[{key:\\\"code\\\",get:function(){return t},set:function(t){Object.defineProperty(this,\\\"code\\\",{configurable:!0,enumerable:!0,value:t,writable:!0})}},{key:\\\"toString\\\",value:function(){return\\\"\\\".concat(this.name,\\\" [\\\").concat(t,\\\"]: \\\").concat(this.message)}}])&&n(l.prototype,u),Object.defineProperty(l,\\\"prototype\\\",{writable:!1}),p}(r)}function Z(t){for(var e=\\\"\\\",r=t.length,n=\\\"-\\\"===t[0]?1:0;r>=n+4;r-=3)e=\\\"_\\\".concat(t.slice(r-3,r)).concat(e);return\\\"\\\".concat(t.slice(0,r)).concat(e)}function Y(t,e,r,n,i,a){if(t>r||t<e){var o,s=\\\"bigint\\\"==typeof e?\\\"n\\\":\\\"\\\";throw o=a>3?0===e||e===BigInt(0)?\\\">= 0\\\".concat(s,\\\" and < 2\\\").concat(s,\\\" ** \\\").concat(8*(a+1)).concat(s):\\\">= -(2\\\".concat(s,\\\" ** \\\").concat(8*(a+1)-1).concat(s,\\\") and < 2 ** \\\")+\\\"\\\".concat(8*(a+1)-1).concat(s):\\\">= \\\".concat(e).concat(s,\\\" and <= \\\").concat(r).concat(s),new q.ERR_OUT_OF_RANGE(\\\"value\\\",o,t)}!function(t,e,r){W(e,\\\"offset\\\"),void 0!==t[e]&&void 0!==t[e+r]||X(e,t.length-(r+1))}(n,i,a)}function W(t,e){if(\\\"number\\\"!=typeof t)throw new q.ERR_INVALID_ARG_TYPE(e,\\\"number\\\",t)}function X(t,e,r){if(Math.floor(t)!==t)throw W(t,r),new q.ERR_OUT_OF_RANGE(r||\\\"offset\\\",\\\"an integer\\\",t);if(e<0)throw new q.ERR_BUFFER_OUT_OF_BOUNDS;throw new q.ERR_OUT_OF_RANGE(r||\\\"offset\\\",\\\">= \\\".concat(r?1:0,\\\" and <= \\\").concat(e),t)}G(\\\"ERR_BUFFER_OUT_OF_BOUNDS\\\",(function(t){return t?\\\"\\\".concat(t,\\\" is outside of buffer bounds\\\"):\\\"Attempt to access memory outside buffer bounds\\\"}),RangeError),G(\\\"ERR_INVALID_ARG_TYPE\\\",(function(t,e){return'The \\\"'.concat(t,'\\\" argument must be of type number. Received type ').concat(s(e))}),TypeError),G(\\\"ERR_OUT_OF_RANGE\\\",(function(t,e,r){var n='The value of \\\"'.concat(t,'\\\" is out of range.'),i=r;return Number.isInteger(r)&&Math.abs(r)>Math.pow(2,32)?i=Z(String(r)):\\\"bigint\\\"==typeof r&&(i=String(r),(r>Math.pow(BigInt(2),BigInt(32))||r<-Math.pow(BigInt(2),BigInt(32)))&&(i=Z(i)),i+=\\\"n\\\"),n+\\\" It must be \\\".concat(e,\\\". Received \\\").concat(i)}),RangeError);var J=/[^+/0-9A-Za-z-_]/g;function K(t,e){var r;e=e||1/0;for(var n=t.length,i=null,a=[],o=0;o<n;++o){if((r=t.charCodeAt(o))>55295&&r<57344){if(!i){if(r>56319){(e-=3)>-1&&a.push(239,191,189);continue}if(o+1===n){(e-=3)>-1&&a.push(239,191,189);continue}i=r;continue}if(r<56320){(e-=3)>-1&&a.push(239,191,189),i=r;continue}r=65536+(i-55296<<10|r-56320)}else i&&(e-=3)>-1&&a.push(239,191,189);if(i=null,r<128){if((e-=1)<0)break;a.push(r)}else if(r<2048){if((e-=2)<0)break;a.push(r>>6|192,63&r|128)}else if(r<65536){if((e-=3)<0)break;a.push(r>>12|224,r>>6&63|128,63&r|128)}else{if(!(r<1114112))throw new Error(\\\"Invalid code point\\\");if((e-=4)<0)break;a.push(r>>18|240,r>>12&63|128,r>>6&63|128,63&r|128)}}return a}function $(t){return l.toByteArray(function(t){if((t=(t=t.split(\\\"=\\\")[0]).trim().replace(J,\\\"\\\")).length<2)return\\\"\\\";for(;t.length%4!=0;)t+=\\\"=\\\";return t}(t))}function Q(t,e,r,n){var i;for(i=0;i<n&&!(i+r>=e.length||i>=t.length);++i)e[i+r]=t[i];return i}function tt(t,e){return t instanceof e||null!=t&&null!=t.constructor&&null!=t.constructor.name&&t.constructor.name===e.name}function et(t){return t!=t}var rt=function(){for(var t=\\\"0123456789abcdef\\\",e=new Array(256),r=0;r<16;++r)for(var n=16*r,i=0;i<16;++i)e[n+i]=t[r]+t[i];return e}();function nt(t){return\\\"undefined\\\"==typeof BigInt?it:t}function it(){throw new Error(\\\"BigInt not supported\\\")}},35791:function(t){\\\"use strict\\\";t.exports=i,t.exports.isMobile=i,t.exports.default=i;var e=/(android|bb\\\\d+|meego).+mobile|armv7l|avantgo|bada\\\\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\\\\/|plucker|pocket|psp|series[46]0|samsungbrowser.*mobile|symbian|treo|up\\\\.(browser|link)|vodafone|wap|windows (ce|phone)|xda|xiino/i,r=/CrOS/,n=/android|ipad|playbook|silk/i;function i(t){t||(t={});var i=t.ua;if(i||\\\"undefined\\\"==typeof navigator||(i=navigator.userAgent),i&&i.headers&&\\\"string\\\"==typeof i.headers[\\\"user-agent\\\"]&&(i=i.headers[\\\"user-agent\\\"]),\\\"string\\\"!=typeof i)return!1;var a=e.test(i)&&!r.test(i)||!!t.tablet&&n.test(i);return!a&&t.tablet&&t.featureDetect&&navigator&&navigator.maxTouchPoints>1&&-1!==i.indexOf(\\\"Macintosh\\\")&&-1!==i.indexOf(\\\"Safari\\\")&&(a=!0),a}},86781:function(t,e,r){\\\"use strict\\\";r.r(e),r.d(e,{sankeyCenter:function(){return h},sankeyCircular:function(){return C},sankeyJustify:function(){return f},sankeyLeft:function(){return u},sankeyRight:function(){return c}});var n=r(33064),i=r(15140),a=r(45879),o=r(2502),s=r.n(o);function l(t){return t.target.depth}function u(t){return t.depth}function c(t,e){return e-1-t.height}function f(t,e){return t.sourceLinks.length?t.depth:e-1}function h(t){return t.targetLinks.length?t.depth:t.sourceLinks.length?(0,n.VV)(t.sourceLinks,l)-1:0}function p(t){return function(){return t}}var d=\\\"function\\\"==typeof Symbol&&\\\"symbol\\\"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&\\\"function\\\"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?\\\"symbol\\\":typeof t};function v(t,e){return y(t.source,e.source)||t.index-e.index}function g(t,e){return y(t.target,e.target)||t.index-e.index}function y(t,e){return t.partOfCycle===e.partOfCycle?t.y0-e.y0:\\\"top\\\"===t.circularLinkType||\\\"bottom\\\"===e.circularLinkType?-1:1}function m(t){return t.value}function x(t){return(t.y0+t.y1)/2}function b(t){return x(t.source)}function _(t){return x(t.target)}function w(t){return t.index}function T(t){return t.nodes}function k(t){return t.links}function A(t,e){var r=t.get(e);if(!r)throw new Error(\\\"missing: \\\"+e);return r}function M(t,e){return e(t)}var S=25,E=10,L=.3;function C(){var t,e,r=0,a=0,o=1,l=1,u=24,c=w,h=f,M=T,C=k,O=32,D=2,z=null;function F(){var f={nodes:M.apply(null,arguments),links:C.apply(null,arguments)};!function(t){t.nodes.forEach((function(t,e){t.index=e,t.sourceLinks=[],t.targetLinks=[]}));var e=(0,i.UI)(t.nodes,c);t.links.forEach((function(t,r){t.index=r;var n=t.source,i=t.target;\\\"object\\\"!==(void 0===n?\\\"undefined\\\":d(n))&&(n=t.source=A(e,n)),\\\"object\\\"!==(void 0===i?\\\"undefined\\\":d(i))&&(i=t.target=A(e,i)),n.sourceLinks.push(t),i.targetLinks.push(t)}))}(f),function(t,e,r){var n=0;if(null===r){for(var i=[],a=0;a<t.links.length;a++){var o=t.links[a],l=o.source.index,u=o.target.index;i[l]||(i[l]=[]),i[u]||(i[u]=[]),-1===i[l].indexOf(u)&&i[l].push(u)}var c=s()(i);c.sort((function(t,e){return t.length-e.length}));var f={};for(a=0;a<c.length;a++){var h=c[a].slice(-2);f[h[0]]||(f[h[0]]={}),f[h[0]][h[1]]=!0}t.links.forEach((function(t){var e=t.target.index,r=t.source.index;e===r||f[r]&&f[r][e]?(t.circular=!0,t.circularLinkID=n,n+=1):t.circular=!1}))}else t.links.forEach((function(t){t.source[r]<t.target[r]?t.circular=!1:(t.circular=!0,t.circularLinkID=n,n+=1)}))}(f,0,z),function(t){t.nodes.forEach((function(t){t.partOfCycle=!1,t.value=Math.max((0,n.Sm)(t.sourceLinks,m),(0,n.Sm)(t.targetLinks,m)),t.sourceLinks.forEach((function(e){e.circular&&(t.partOfCycle=!0,t.circularLinkType=e.circularLinkType)})),t.targetLinks.forEach((function(e){e.circular&&(t.partOfCycle=!0,t.circularLinkType=e.circularLinkType)}))}))}(f),function(t){var e,r,n;for(e=t.nodes,r=[],n=0;e.length;++n,e=r,r=[])e.forEach((function(t){t.depth=n,t.sourceLinks.forEach((function(t){r.indexOf(t.target)<0&&!t.circular&&r.push(t.target)}))}));for(e=t.nodes,r=[],n=0;e.length;++n,e=r,r=[])e.forEach((function(t){t.height=n,t.targetLinks.forEach((function(t){r.indexOf(t.source)<0&&!t.circular&&r.push(t.source)}))}));t.nodes.forEach((function(t){t.column=Math.floor(h.call(null,t,n))}))}(f),P(f,c),function(s,c,f){var h=(0,i.b1)().key((function(t){return t.column})).sortKeys(n.j2).entries(s.nodes).map((function(t){return t.values}));(function(i){if(e){var c=1/0;h.forEach((function(t){var r=l*e/(t.length+1);c=r<c?r:c})),t=c}var f=(0,n.VV)(h,(function(e){return(l-a-(e.length-1)*t)/(0,n.Sm)(e,m)}));f*=L,s.links.forEach((function(t){t.width=t.value*f}));var p=function(t){var e=0,r=0,i=0,a=0,o=(0,n.Fp)(t.nodes,(function(t){return t.column}));return t.links.forEach((function(t){t.circular&&(\\\"top\\\"==t.circularLinkType?e+=t.width:r+=t.width,0==t.target.column&&(a+=t.width),t.source.column==o&&(i+=t.width))})),{top:e=e>0?e+S+E:e,bottom:r=r>0?r+S+E:r,left:a=a>0?a+S+E:a,right:i=i>0?i+S+E:i}}(s),d=function(t,e){var i=(0,n.Fp)(t.nodes,(function(t){return t.column})),s=o-r,c=l-a,f=s/(s+e.right+e.left),h=c/(c+e.top+e.bottom);return r=r*f+e.left,o=0==e.right?o:o*f,a=a*h+e.top,l*=h,t.nodes.forEach((function(t){t.x0=r+t.column*((o-r-u)/i),t.x1=t.x0+u})),h}(s,p);f*=d,s.links.forEach((function(t){t.width=t.value*f})),h.forEach((function(t){var e=t.length;t.forEach((function(t,r){t.depth==h.length-1&&1==e||0==t.depth&&1==e?(t.y0=l/2-t.value*f,t.y1=t.y0+t.value*f):t.partOfCycle?0==I(t,i)?(t.y0=l/2+r,t.y1=t.y0+t.value*f):\\\"top\\\"==t.circularLinkType?(t.y0=a+r,t.y1=t.y0+t.value*f):(t.y0=l-t.value*f-r,t.y1=t.y0+t.value*f):0==p.top||0==p.bottom?(t.y0=(l-a)/e*r,t.y1=t.y0+t.value*f):(t.y0=(l-a)/2-e/2+r,t.y1=t.y0+t.value*f)}))}))})(f),g();for(var p=1,d=c;d>0;--d)v(p*=.99,f),g();function v(t,e){var r=h.length;h.forEach((function(i){var a=i.length,o=i[0].depth;i.forEach((function(i){var s;if(i.sourceLinks.length||i.targetLinks.length)if(i.partOfCycle&&I(i,e)>0);else if(0==o&&1==a)s=i.y1-i.y0,i.y0=l/2-s/2,i.y1=l/2+s/2;else if(o==r-1&&1==a)s=i.y1-i.y0,i.y0=l/2-s/2,i.y1=l/2+s/2;else{var u=(0,n.J6)(i.sourceLinks,_),c=(0,n.J6)(i.targetLinks,b),f=((u&&c?(u+c)/2:u||c)-x(i))*t;i.y0+=f,i.y1+=f}}))}))}function g(){h.forEach((function(e){var r,n,i,o=a,s=e.length;for(e.sort(y),i=0;i<s;++i)(n=o-(r=e[i]).y0)>0&&(r.y0+=n,r.y1+=n),o=r.y1+t;if((n=o-t-l)>0)for(o=r.y0-=n,r.y1-=n,i=s-2;i>=0;--i)(n=(r=e[i]).y1+t-o)>0&&(r.y0-=n,r.y1-=n),o=r.y0}))}}(f,O,c),B(f);for(var p=0;p<4;p++)W(f,l,c),X(f,0,c),Z(f,a,l,c),W(f,l,c),X(f,0,c);return function(t,e,r){var i=t.nodes,a=t.links,o=!1,s=!1;if(a.forEach((function(t){\\\"top\\\"==t.circularLinkType?o=!0:\\\"bottom\\\"==t.circularLinkType&&(s=!0)})),0==o||0==s){var l=(0,n.VV)(i,(function(t){return t.y0})),u=(r-e)/((0,n.Fp)(i,(function(t){return t.y1}))-l);i.forEach((function(t){var e=(t.y1-t.y0)*u;t.y0=(t.y0-l)*u,t.y1=t.y0+e})),a.forEach((function(t){t.y0=(t.y0-l)*u,t.y1=(t.y1-l)*u,t.width=t.width*u}))}}(f,a,l),R(f,D,l,c),f}function B(t){t.nodes.forEach((function(t){t.sourceLinks.sort(g),t.targetLinks.sort(v)})),t.nodes.forEach((function(t){var e=t.y0,r=e,n=t.y1,i=n;t.sourceLinks.forEach((function(t){t.circular?(t.y0=n-t.width/2,n-=t.width):(t.y0=e+t.width/2,e+=t.width)})),t.targetLinks.forEach((function(t){t.circular?(t.y1=i-t.width/2,i-=t.width):(t.y1=r+t.width/2,r+=t.width)}))}))}return F.nodeId=function(t){return arguments.length?(c=\\\"function\\\"==typeof t?t:p(t),F):c},F.nodeAlign=function(t){return arguments.length?(h=\\\"function\\\"==typeof t?t:p(t),F):h},F.nodeWidth=function(t){return arguments.length?(u=+t,F):u},F.nodePadding=function(e){return arguments.length?(t=+e,F):t},F.nodes=function(t){return arguments.length?(M=\\\"function\\\"==typeof t?t:p(t),F):M},F.links=function(t){return arguments.length?(C=\\\"function\\\"==typeof t?t:p(t),F):C},F.size=function(t){return arguments.length?(r=a=0,o=+t[0],l=+t[1],F):[o-r,l-a]},F.extent=function(t){return arguments.length?(r=+t[0][0],o=+t[1][0],a=+t[0][1],l=+t[1][1],F):[[r,a],[o,l]]},F.iterations=function(t){return arguments.length?(O=+t,F):O},F.circularLinkGap=function(t){return arguments.length?(D=+t,F):D},F.nodePaddingRatio=function(t){return arguments.length?(e=+t,F):e},F.sortNodes=function(t){return arguments.length?(z=t,F):z},F.update=function(t){return P(t,c),B(t),t.links.forEach((function(t){t.circular&&(t.circularLinkType=t.y0+t.y1<l?\\\"top\\\":\\\"bottom\\\",t.source.circularLinkType=t.circularLinkType,t.target.circularLinkType=t.circularLinkType)})),W(t,l,c,!1),X(t,0,c),R(t,D,l,c),t},F}function P(t,e){var r=0,n=0;t.links.forEach((function(i){i.circular&&(i.source.circularLinkType||i.target.circularLinkType?i.circularLinkType=i.source.circularLinkType?i.source.circularLinkType:i.target.circularLinkType:i.circularLinkType=r<n?\\\"top\\\":\\\"bottom\\\",\\\"top\\\"==i.circularLinkType?r+=1:n+=1,t.nodes.forEach((function(t){M(t,e)!=M(i.source,e)&&M(t,e)!=M(i.target,e)||(t.circularLinkType=i.circularLinkType)})))})),t.links.forEach((function(t){t.circular&&(t.source.circularLinkType==t.target.circularLinkType&&(t.circularLinkType=t.source.circularLinkType),$(t,e)&&(t.circularLinkType=t.source.circularLinkType))}))}function O(t){var e=Math.abs(t.y1-t.y0),r=Math.abs(t.target.x0-t.source.x1);return Math.atan(r/e)}function I(t,e){var r=0;t.sourceLinks.forEach((function(t){r=t.circular&&!$(t,e)?r+1:r}));var n=0;return t.targetLinks.forEach((function(t){n=t.circular&&!$(t,e)?n+1:n})),r+n}function D(t){var e=t.source.sourceLinks,r=0;e.forEach((function(t){r=t.circular?r+1:r}));var n=t.target.targetLinks,i=0;return n.forEach((function(t){i=t.circular?i+1:i})),!(r>1||i>1)}function z(t,e,r){return t.sort(F),t.forEach((function(n,i){var a,o,s=0;if($(n,r)&&D(n))n.circularPathData.verticalBuffer=s+n.width/2;else{for(var l=0;l<i;l++)if(a=t[i],o=t[l],!(a.source.column<o.target.column||a.target.column>o.source.column)){var u=t[l].circularPathData.verticalBuffer+t[l].width/2+e;s=u>s?u:s}n.circularPathData.verticalBuffer=s+n.width/2}})),t}function R(t,e,r,i){var o=(0,n.VV)(t.links,(function(t){return t.source.y0}));t.links.forEach((function(t){t.circular&&(t.circularPathData={})})),z(t.links.filter((function(t){return\\\"top\\\"==t.circularLinkType})),e,i),z(t.links.filter((function(t){return\\\"bottom\\\"==t.circularLinkType})),e,i),t.links.forEach((function(n){if(n.circular){if(n.circularPathData.arcRadius=n.width+E,n.circularPathData.leftNodeBuffer=5,n.circularPathData.rightNodeBuffer=5,n.circularPathData.sourceWidth=n.source.x1-n.source.x0,n.circularPathData.sourceX=n.source.x0+n.circularPathData.sourceWidth,n.circularPathData.targetX=n.target.x0,n.circularPathData.sourceY=n.y0,n.circularPathData.targetY=n.y1,$(n,i)&&D(n))n.circularPathData.leftSmallArcRadius=E+n.width/2,n.circularPathData.leftLargeArcRadius=E+n.width/2,n.circularPathData.rightSmallArcRadius=E+n.width/2,n.circularPathData.rightLargeArcRadius=E+n.width/2,\\\"bottom\\\"==n.circularLinkType?(n.circularPathData.verticalFullExtent=n.source.y1+S+n.circularPathData.verticalBuffer,n.circularPathData.verticalLeftInnerExtent=n.circularPathData.verticalFullExtent-n.circularPathData.leftLargeArcRadius,n.circularPathData.verticalRightInnerExtent=n.circularPathData.verticalFullExtent-n.circularPathData.rightLargeArcRadius):(n.circularPathData.verticalFullExtent=n.source.y0-S-n.circularPathData.verticalBuffer,n.circularPathData.verticalLeftInnerExtent=n.circularPathData.verticalFullExtent+n.circularPathData.leftLargeArcRadius,n.circularPathData.verticalRightInnerExtent=n.circularPathData.verticalFullExtent+n.circularPathData.rightLargeArcRadius);else{var s=n.source.column,l=n.circularLinkType,u=t.links.filter((function(t){return t.source.column==s&&t.circularLinkType==l}));\\\"bottom\\\"==n.circularLinkType?u.sort(N):u.sort(B);var c=0;u.forEach((function(t,r){t.circularLinkID==n.circularLinkID&&(n.circularPathData.leftSmallArcRadius=E+n.width/2+c,n.circularPathData.leftLargeArcRadius=E+n.width/2+r*e+c),c+=t.width})),s=n.target.column,u=t.links.filter((function(t){return t.target.column==s&&t.circularLinkType==l})),\\\"bottom\\\"==n.circularLinkType?u.sort(U):u.sort(j),c=0,u.forEach((function(t,r){t.circularLinkID==n.circularLinkID&&(n.circularPathData.rightSmallArcRadius=E+n.width/2+c,n.circularPathData.rightLargeArcRadius=E+n.width/2+r*e+c),c+=t.width})),\\\"bottom\\\"==n.circularLinkType?(n.circularPathData.verticalFullExtent=Math.max(r,n.source.y1,n.target.y1)+S+n.circularPathData.verticalBuffer,n.circularPathData.verticalLeftInnerExtent=n.circularPathData.verticalFullExtent-n.circularPathData.leftLargeArcRadius,n.circularPathData.verticalRightInnerExtent=n.circularPathData.verticalFullExtent-n.circularPathData.rightLargeArcRadius):(n.circularPathData.verticalFullExtent=o-S-n.circularPathData.verticalBuffer,n.circularPathData.verticalLeftInnerExtent=n.circularPathData.verticalFullExtent+n.circularPathData.leftLargeArcRadius,n.circularPathData.verticalRightInnerExtent=n.circularPathData.verticalFullExtent+n.circularPathData.rightLargeArcRadius)}n.circularPathData.leftInnerExtent=n.circularPathData.sourceX+n.circularPathData.leftNodeBuffer,n.circularPathData.rightInnerExtent=n.circularPathData.targetX-n.circularPathData.rightNodeBuffer,n.circularPathData.leftFullExtent=n.circularPathData.sourceX+n.circularPathData.leftLargeArcRadius+n.circularPathData.leftNodeBuffer,n.circularPathData.rightFullExtent=n.circularPathData.targetX-n.circularPathData.rightLargeArcRadius-n.circularPathData.rightNodeBuffer}if(n.circular)n.path=function(t){return\\\"top\\\"==t.circularLinkType?\\\"M\\\"+t.circularPathData.sourceX+\\\" \\\"+t.circularPathData.sourceY+\\\" L\\\"+t.circularPathData.leftInnerExtent+\\\" \\\"+t.circularPathData.sourceY+\\\" A\\\"+t.circularPathData.leftLargeArcRadius+\\\" \\\"+t.circularPathData.leftSmallArcRadius+\\\" 0 0 0 \\\"+t.circularPathData.leftFullExtent+\\\" \\\"+(t.circularPathData.sourceY-t.circularPathData.leftSmallArcRadius)+\\\" L\\\"+t.circularPathData.leftFullExtent+\\\" \\\"+t.circularPathData.verticalLeftInnerExtent+\\\" A\\\"+t.circularPathData.leftLargeArcRadius+\\\" \\\"+t.circularPathData.leftLargeArcRadius+\\\" 0 0 0 \\\"+t.circularPathData.leftInnerExtent+\\\" \\\"+t.circularPathData.verticalFullExtent+\\\" L\\\"+t.circularPathData.rightInnerExtent+\\\" \\\"+t.circularPathData.verticalFullExtent+\\\" A\\\"+t.circularPathData.rightLargeArcRadius+\\\" \\\"+t.circularPathData.rightLargeArcRadius+\\\" 0 0 0 \\\"+t.circularPathData.rightFullExtent+\\\" \\\"+t.circularPathData.verticalRightInnerExtent+\\\" L\\\"+t.circularPathData.rightFullExtent+\\\" \\\"+(t.circularPathData.targetY-t.circularPathData.rightSmallArcRadius)+\\\" A\\\"+t.circularPathData.rightLargeArcRadius+\\\" \\\"+t.circularPathData.rightSmallArcRadius+\\\" 0 0 0 \\\"+t.circularPathData.rightInnerExtent+\\\" \\\"+t.circularPathData.targetY+\\\" L\\\"+t.circularPathData.targetX+\\\" \\\"+t.circularPathData.targetY:\\\"M\\\"+t.circularPathData.sourceX+\\\" \\\"+t.circularPathData.sourceY+\\\" L\\\"+t.circularPathData.leftInnerExtent+\\\" \\\"+t.circularPathData.sourceY+\\\" A\\\"+t.circularPathData.leftLargeArcRadius+\\\" \\\"+t.circularPathData.leftSmallArcRadius+\\\" 0 0 1 \\\"+t.circularPathData.leftFullExtent+\\\" \\\"+(t.circularPathData.sourceY+t.circularPathData.leftSmallArcRadius)+\\\" L\\\"+t.circularPathData.leftFullExtent+\\\" \\\"+t.circularPathData.verticalLeftInnerExtent+\\\" A\\\"+t.circularPathData.leftLargeArcRadius+\\\" \\\"+t.circularPathData.leftLargeArcRadius+\\\" 0 0 1 \\\"+t.circularPathData.leftInnerExtent+\\\" \\\"+t.circularPathData.verticalFullExtent+\\\" L\\\"+t.circularPathData.rightInnerExtent+\\\" \\\"+t.circularPathData.verticalFullExtent+\\\" A\\\"+t.circularPathData.rightLargeArcRadius+\\\" \\\"+t.circularPathData.rightLargeArcRadius+\\\" 0 0 1 \\\"+t.circularPathData.rightFullExtent+\\\" \\\"+t.circularPathData.verticalRightInnerExtent+\\\" L\\\"+t.circularPathData.rightFullExtent+\\\" \\\"+(t.circularPathData.targetY+t.circularPathData.rightSmallArcRadius)+\\\" A\\\"+t.circularPathData.rightLargeArcRadius+\\\" \\\"+t.circularPathData.rightSmallArcRadius+\\\" 0 0 1 \\\"+t.circularPathData.rightInnerExtent+\\\" \\\"+t.circularPathData.targetY+\\\" L\\\"+t.circularPathData.targetX+\\\" \\\"+t.circularPathData.targetY}(n);else{var f=(0,a.h5)().source((function(t){return[t.source.x0+(t.source.x1-t.source.x0),t.y0]})).target((function(t){return[t.target.x0,t.y1]}));n.path=f(n)}}))}function F(t,e){return V(t)==V(e)?\\\"bottom\\\"==t.circularLinkType?N(t,e):B(t,e):V(e)-V(t)}function B(t,e){return t.y0-e.y0}function N(t,e){return e.y0-t.y0}function j(t,e){return t.y1-e.y1}function U(t,e){return e.y1-t.y1}function V(t){return t.target.column-t.source.column}function H(t){return t.target.x0-t.source.x1}function q(t,e){var r=O(t),n=H(e)/Math.tan(r);return\\\"up\\\"==K(t)?t.y1+n:t.y1-n}function G(t,e){var r=O(t),n=H(e)/Math.tan(r);return\\\"up\\\"==K(t)?t.y1-n:t.y1+n}function Z(t,e,r,n){t.links.forEach((function(i){if(!i.circular&&i.target.column-i.source.column>1){var a=i.source.column+1,o=i.target.column-1,s=1,l=o-a+1;for(s=1;a<=o;a++,s++)t.nodes.forEach((function(o){if(o.column==a){var u,c=s/(l+1),f=Math.pow(1-c,3),h=3*c*Math.pow(1-c,2),p=3*Math.pow(c,2)*(1-c),d=Math.pow(c,3),v=f*i.y0+h*i.y0+p*i.y1+d*i.y1,g=v-i.width/2,y=v+i.width/2;g>o.y0&&g<o.y1?(u=o.y1-g+10,u=\\\"bottom\\\"==o.circularLinkType?u:-u,o=Y(o,u,e,r),t.nodes.forEach((function(t){var i,a;M(t,n)!=M(o,n)&&t.column==o.column&&(a=t,(i=o).y0>a.y0&&i.y0<a.y1||i.y1>a.y0&&i.y1<a.y1||i.y0<a.y0&&i.y1>a.y1)&&Y(t,u,e,r)}))):(y>o.y0&&y<o.y1||g<o.y0&&y>o.y1)&&(u=y-o.y0+10,o=Y(o,u,e,r),t.nodes.forEach((function(t){M(t,n)!=M(o,n)&&t.column==o.column&&t.y0<o.y1&&t.y1>o.y1&&Y(t,u,e,r)})))}}))}}))}function Y(t,e,r,n){return t.y0+e>=r&&t.y1+e<=n&&(t.y0=t.y0+e,t.y1=t.y1+e,t.targetLinks.forEach((function(t){t.y1=t.y1+e})),t.sourceLinks.forEach((function(t){t.y0=t.y0+e}))),t}function W(t,e,r,n){t.nodes.forEach((function(i){n&&i.y+(i.y1-i.y0)>e&&(i.y=i.y-(i.y+(i.y1-i.y0)-e));var a=t.links.filter((function(t){return M(t.source,r)==M(i,r)})),o=a.length;o>1&&a.sort((function(t,e){if(!t.circular&&!e.circular){if(t.target.column==e.target.column)return t.y1-e.y1;if(!J(t,e))return t.y1-e.y1;if(t.target.column>e.target.column){var r=G(e,t);return t.y1-r}if(e.target.column>t.target.column)return G(t,e)-e.y1}return t.circular&&!e.circular?\\\"top\\\"==t.circularLinkType?-1:1:e.circular&&!t.circular?\\\"top\\\"==e.circularLinkType?1:-1:t.circular&&e.circular?t.circularLinkType===e.circularLinkType&&\\\"top\\\"==t.circularLinkType?t.target.column===e.target.column?t.target.y1-e.target.y1:e.target.column-t.target.column:t.circularLinkType===e.circularLinkType&&\\\"bottom\\\"==t.circularLinkType?t.target.column===e.target.column?e.target.y1-t.target.y1:t.target.column-e.target.column:\\\"top\\\"==t.circularLinkType?-1:1:void 0}));var s=i.y0;a.forEach((function(t){t.y0=s+t.width/2,s+=t.width})),a.forEach((function(t,e){if(\\\"bottom\\\"==t.circularLinkType){for(var r=e+1,n=0;r<o;r++)n+=a[r].width;t.y0=i.y1-n-t.width/2}}))}))}function X(t,e,r){t.nodes.forEach((function(e){var n=t.links.filter((function(t){return M(t.target,r)==M(e,r)})),i=n.length;i>1&&n.sort((function(t,e){if(!t.circular&&!e.circular){if(t.source.column==e.source.column)return t.y0-e.y0;if(!J(t,e))return t.y0-e.y0;if(e.source.column<t.source.column){var r=q(e,t);return t.y0-r}if(t.source.column<e.source.column)return q(t,e)-e.y0}return t.circular&&!e.circular?\\\"top\\\"==t.circularLinkType?-1:1:e.circular&&!t.circular?\\\"top\\\"==e.circularLinkType?1:-1:t.circular&&e.circular?t.circularLinkType===e.circularLinkType&&\\\"top\\\"==t.circularLinkType?t.source.column===e.source.column?t.source.y1-e.source.y1:t.source.column-e.source.column:t.circularLinkType===e.circularLinkType&&\\\"bottom\\\"==t.circularLinkType?t.source.column===e.source.column?t.source.y1-e.source.y1:e.source.column-t.source.column:\\\"top\\\"==t.circularLinkType?-1:1:void 0}));var a=e.y0;n.forEach((function(t){t.y1=a+t.width/2,a+=t.width})),n.forEach((function(t,r){if(\\\"bottom\\\"==t.circularLinkType){for(var a=r+1,o=0;a<i;a++)o+=n[a].width;t.y1=e.y1-o-t.width/2}}))}))}function J(t,e){return K(t)==K(e)}function K(t){return t.y0-t.y1>0?\\\"up\\\":\\\"down\\\"}function $(t,e){return M(t.source,e)==M(t.target,e)}},30838:function(t,e,r){\\\"use strict\\\";r.r(e),r.d(e,{sankey:function(){return w},sankeyCenter:function(){return u},sankeyJustify:function(){return l},sankeyLeft:function(){return o},sankeyLinkHorizontal:function(){return M},sankeyRight:function(){return s}});var n=r(33064),i=r(15140);function a(t){return t.target.depth}function o(t){return t.depth}function s(t,e){return e-1-t.height}function l(t,e){return t.sourceLinks.length?t.depth:e-1}function u(t){return t.targetLinks.length?t.depth:t.sourceLinks.length?(0,n.VV)(t.sourceLinks,a)-1:0}function c(t){return function(){return t}}function f(t,e){return p(t.source,e.source)||t.index-e.index}function h(t,e){return p(t.target,e.target)||t.index-e.index}function p(t,e){return t.y0-e.y0}function d(t){return t.value}function v(t){return(t.y0+t.y1)/2}function g(t){return v(t.source)*t.value}function y(t){return v(t.target)*t.value}function m(t){return t.index}function x(t){return t.nodes}function b(t){return t.links}function _(t,e){var r=t.get(e);if(!r)throw new Error(\\\"missing: \\\"+e);return r}function w(){var t=0,e=0,r=1,a=1,o=24,s=8,u=m,w=l,T=x,k=b,A=32;function M(){var l={nodes:T.apply(null,arguments),links:k.apply(null,arguments)};return function(t){t.nodes.forEach((function(t,e){t.index=e,t.sourceLinks=[],t.targetLinks=[]}));var e=(0,i.UI)(t.nodes,u);t.links.forEach((function(t,r){t.index=r;var n=t.source,i=t.target;\\\"object\\\"!=typeof n&&(n=t.source=_(e,n)),\\\"object\\\"!=typeof i&&(i=t.target=_(e,i)),n.sourceLinks.push(t),i.targetLinks.push(t)}))}(l),function(t){t.nodes.forEach((function(t){t.value=Math.max((0,n.Sm)(t.sourceLinks,d),(0,n.Sm)(t.targetLinks,d))}))}(l),function(e){var n,i,a;for(n=e.nodes,i=[],a=0;n.length;++a,n=i,i=[])n.forEach((function(t){t.depth=a,t.sourceLinks.forEach((function(t){i.indexOf(t.target)<0&&i.push(t.target)}))}));for(n=e.nodes,i=[],a=0;n.length;++a,n=i,i=[])n.forEach((function(t){t.height=a,t.targetLinks.forEach((function(t){i.indexOf(t.source)<0&&i.push(t.source)}))}));var s=(r-t-o)/(a-1);e.nodes.forEach((function(e){e.x1=(e.x0=t+Math.max(0,Math.min(a-1,Math.floor(w.call(null,e,a))))*s)+o}))}(l),function(t){var r=(0,i.b1)().key((function(t){return t.x0})).sortKeys(n.j2).entries(t.nodes).map((function(t){return t.values}));(function(){var i=(0,n.Fp)(r,(function(t){return t.length})),o=.6666666666666666*(a-e)/(i-1);s>o&&(s=o);var l=(0,n.VV)(r,(function(t){return(a-e-(t.length-1)*s)/(0,n.Sm)(t,d)}));r.forEach((function(t){t.forEach((function(t,e){t.y1=(t.y0=e)+t.value*l}))})),t.links.forEach((function(t){t.width=t.value*l}))})(),f();for(var o=1,l=A;l>0;--l)c(o*=.99),f(),u(o),f();function u(t){r.forEach((function(e){e.forEach((function(e){if(e.targetLinks.length){var r=((0,n.Sm)(e.targetLinks,g)/(0,n.Sm)(e.targetLinks,d)-v(e))*t;e.y0+=r,e.y1+=r}}))}))}function c(t){r.slice().reverse().forEach((function(e){e.forEach((function(e){if(e.sourceLinks.length){var r=((0,n.Sm)(e.sourceLinks,y)/(0,n.Sm)(e.sourceLinks,d)-v(e))*t;e.y0+=r,e.y1+=r}}))}))}function f(){r.forEach((function(t){var r,n,i,o=e,l=t.length;for(t.sort(p),i=0;i<l;++i)(n=o-(r=t[i]).y0)>0&&(r.y0+=n,r.y1+=n),o=r.y1+s;if((n=o-s-a)>0)for(o=r.y0-=n,r.y1-=n,i=l-2;i>=0;--i)(n=(r=t[i]).y1+s-o)>0&&(r.y0-=n,r.y1-=n),o=r.y0}))}}(l),S(l),l}function S(t){t.nodes.forEach((function(t){t.sourceLinks.sort(h),t.targetLinks.sort(f)})),t.nodes.forEach((function(t){var e=t.y0,r=e;t.sourceLinks.forEach((function(t){t.y0=e+t.width/2,e+=t.width})),t.targetLinks.forEach((function(t){t.y1=r+t.width/2,r+=t.width}))}))}return M.update=function(t){return S(t),t},M.nodeId=function(t){return arguments.length?(u=\\\"function\\\"==typeof t?t:c(t),M):u},M.nodeAlign=function(t){return arguments.length?(w=\\\"function\\\"==typeof t?t:c(t),M):w},M.nodeWidth=function(t){return arguments.length?(o=+t,M):o},M.nodePadding=function(t){return arguments.length?(s=+t,M):s},M.nodes=function(t){return arguments.length?(T=\\\"function\\\"==typeof t?t:c(t),M):T},M.links=function(t){return arguments.length?(k=\\\"function\\\"==typeof t?t:c(t),M):k},M.size=function(n){return arguments.length?(t=e=0,r=+n[0],a=+n[1],M):[r-t,a-e]},M.extent=function(n){return arguments.length?(t=+n[0][0],r=+n[1][0],e=+n[0][1],a=+n[1][1],M):[[t,e],[r,a]]},M.iterations=function(t){return arguments.length?(A=+t,M):A},M}var T=r(45879);function k(t){return[t.source.x1,t.y0]}function A(t){return[t.target.x0,t.y1]}function M(){return(0,T.h5)().source(k).target(A)}},39898:function(t,e,r){var n,i;(function(){var a={version:\\\"3.8.0\\\"},o=[].slice,s=function(t){return o.call(t)},l=self.document;function u(t){return t&&(t.ownerDocument||t.document||t).documentElement}function c(t){return t&&(t.ownerDocument&&t.ownerDocument.defaultView||t.document&&t||t.defaultView)}if(l)try{s(l.documentElement.childNodes)[0].nodeType}catch(t){s=function(t){for(var e=t.length,r=new Array(e);e--;)r[e]=t[e];return r}}if(Date.now||(Date.now=function(){return+new Date}),l)try{l.createElement(\\\"DIV\\\").style.setProperty(\\\"opacity\\\",0,\\\"\\\")}catch(t){var f=this.Element.prototype,h=f.setAttribute,p=f.setAttributeNS,d=this.CSSStyleDeclaration.prototype,v=d.setProperty;f.setAttribute=function(t,e){h.call(this,t,e+\\\"\\\")},f.setAttributeNS=function(t,e,r){p.call(this,t,e,r+\\\"\\\")},d.setProperty=function(t,e,r){v.call(this,t,e+\\\"\\\",r)}}function g(t,e){return t<e?-1:t>e?1:t>=e?0:NaN}function y(t){return null===t?NaN:+t}function m(t){return!isNaN(t)}function x(t){return{left:function(e,r,n,i){for(arguments.length<3&&(n=0),arguments.length<4&&(i=e.length);n<i;){var a=n+i>>>1;t(e[a],r)<0?n=a+1:i=a}return n},right:function(e,r,n,i){for(arguments.length<3&&(n=0),arguments.length<4&&(i=e.length);n<i;){var a=n+i>>>1;t(e[a],r)>0?i=a:n=a+1}return n}}}a.ascending=g,a.descending=function(t,e){return e<t?-1:e>t?1:e>=t?0:NaN},a.min=function(t,e){var r,n,i=-1,a=t.length;if(1===arguments.length){for(;++i<a;)if(null!=(n=t[i])&&n>=n){r=n;break}for(;++i<a;)null!=(n=t[i])&&r>n&&(r=n)}else{for(;++i<a;)if(null!=(n=e.call(t,t[i],i))&&n>=n){r=n;break}for(;++i<a;)null!=(n=e.call(t,t[i],i))&&r>n&&(r=n)}return r},a.max=function(t,e){var r,n,i=-1,a=t.length;if(1===arguments.length){for(;++i<a;)if(null!=(n=t[i])&&n>=n){r=n;break}for(;++i<a;)null!=(n=t[i])&&n>r&&(r=n)}else{for(;++i<a;)if(null!=(n=e.call(t,t[i],i))&&n>=n){r=n;break}for(;++i<a;)null!=(n=e.call(t,t[i],i))&&n>r&&(r=n)}return r},a.extent=function(t,e){var r,n,i,a=-1,o=t.length;if(1===arguments.length){for(;++a<o;)if(null!=(n=t[a])&&n>=n){r=i=n;break}for(;++a<o;)null!=(n=t[a])&&(r>n&&(r=n),i<n&&(i=n))}else{for(;++a<o;)if(null!=(n=e.call(t,t[a],a))&&n>=n){r=i=n;break}for(;++a<o;)null!=(n=e.call(t,t[a],a))&&(r>n&&(r=n),i<n&&(i=n))}return[r,i]},a.sum=function(t,e){var r,n=0,i=t.length,a=-1;if(1===arguments.length)for(;++a<i;)m(r=+t[a])&&(n+=r);else for(;++a<i;)m(r=+e.call(t,t[a],a))&&(n+=r);return n},a.mean=function(t,e){var r,n=0,i=t.length,a=-1,o=i;if(1===arguments.length)for(;++a<i;)m(r=y(t[a]))?n+=r:--o;else for(;++a<i;)m(r=y(e.call(t,t[a],a)))?n+=r:--o;if(o)return n/o},a.quantile=function(t,e){var r=(t.length-1)*e+1,n=Math.floor(r),i=+t[n-1],a=r-n;return a?i+a*(t[n]-i):i},a.median=function(t,e){var r,n=[],i=t.length,o=-1;if(1===arguments.length)for(;++o<i;)m(r=y(t[o]))&&n.push(r);else for(;++o<i;)m(r=y(e.call(t,t[o],o)))&&n.push(r);if(n.length)return a.quantile(n.sort(g),.5)},a.variance=function(t,e){var r,n,i=t.length,a=0,o=0,s=-1,l=0;if(1===arguments.length)for(;++s<i;)m(r=y(t[s]))&&(o+=(n=r-a)*(r-(a+=n/++l)));else for(;++s<i;)m(r=y(e.call(t,t[s],s)))&&(o+=(n=r-a)*(r-(a+=n/++l)));if(l>1)return o/(l-1)},a.deviation=function(){var t=a.variance.apply(this,arguments);return t?Math.sqrt(t):t};var b=x(g);function _(t){return t.length}a.bisectLeft=b.left,a.bisect=a.bisectRight=b.right,a.bisector=function(t){return x(1===t.length?function(e,r){return g(t(e),r)}:t)},a.shuffle=function(t,e,r){(a=arguments.length)<3&&(r=t.length,a<2&&(e=0));for(var n,i,a=r-e;a;)i=Math.random()*a--|0,n=t[a+e],t[a+e]=t[i+e],t[i+e]=n;return t},a.permute=function(t,e){for(var r=e.length,n=new Array(r);r--;)n[r]=t[e[r]];return n},a.pairs=function(t){for(var e=0,r=t.length-1,n=t[0],i=new Array(r<0?0:r);e<r;)i[e]=[n,n=t[++e]];return i},a.transpose=function(t){if(!(i=t.length))return[];for(var e=-1,r=a.min(t,_),n=new Array(r);++e<r;)for(var i,o=-1,s=n[e]=new Array(i);++o<i;)s[o]=t[o][e];return n},a.zip=function(){return a.transpose(arguments)},a.keys=function(t){var e=[];for(var r in t)e.push(r);return e},a.values=function(t){var e=[];for(var r in t)e.push(t[r]);return e},a.entries=function(t){var e=[];for(var r in t)e.push({key:r,value:t[r]});return e},a.merge=function(t){for(var e,r,n,i=t.length,a=-1,o=0;++a<i;)o+=t[a].length;for(r=new Array(o);--i>=0;)for(e=(n=t[i]).length;--e>=0;)r[--o]=n[e];return r};var w=Math.abs;function T(t,e){for(var r in e)Object.defineProperty(t.prototype,r,{value:e[r],enumerable:!1})}function k(){this._=Object.create(null)}a.range=function(t,e,r){if(arguments.length<3&&(r=1,arguments.length<2&&(e=t,t=0)),(e-t)/r==1/0)throw new Error(\\\"infinite range\\\");var n,i=[],a=function(t){for(var e=1;t*e%1;)e*=10;return e}(w(r)),o=-1;if(t*=a,e*=a,(r*=a)<0)for(;(n=t+r*++o)>e;)i.push(n/a);else for(;(n=t+r*++o)<e;)i.push(n/a);return i},a.map=function(t,e){var r=new k;if(t instanceof k)t.forEach((function(t,e){r.set(t,e)}));else if(Array.isArray(t)){var n,i=-1,a=t.length;if(1===arguments.length)for(;++i<a;)r.set(i,t[i]);else for(;++i<a;)r.set(e.call(t,n=t[i],i),n)}else for(var o in t)r.set(o,t[o]);return r};var A=\\\"__proto__\\\",M=\\\"\\\\0\\\";function S(t){return(t+=\\\"\\\")===A||t[0]===M?M+t:t}function E(t){return(t+=\\\"\\\")[0]===M?t.slice(1):t}function L(t){return S(t)in this._}function C(t){return(t=S(t))in this._&&delete this._[t]}function P(){var t=[];for(var e in this._)t.push(E(e));return t}function O(){var t=0;for(var e in this._)++t;return t}function I(){for(var t in this._)return!1;return!0}function D(){this._=Object.create(null)}function z(t){return t}function R(t,e,r){return function(){var n=r.apply(e,arguments);return n===e?t:n}}function F(t,e){if(e in t)return e;e=e.charAt(0).toUpperCase()+e.slice(1);for(var r=0,n=B.length;r<n;++r){var i=B[r]+e;if(i in t)return i}}T(k,{has:L,get:function(t){return this._[S(t)]},set:function(t,e){return this._[S(t)]=e},remove:C,keys:P,values:function(){var t=[];for(var e in this._)t.push(this._[e]);return t},entries:function(){var t=[];for(var e in this._)t.push({key:E(e),value:this._[e]});return t},size:O,empty:I,forEach:function(t){for(var e in this._)t.call(this,E(e),this._[e])}}),a.nest=function(){var t,e,r={},n=[],i=[];function o(i,a,s){if(s>=n.length)return e?e.call(r,a):t?a.sort(t):a;for(var l,u,c,f,h=-1,p=a.length,d=n[s++],v=new k;++h<p;)(f=v.get(l=d(u=a[h])))?f.push(u):v.set(l,[u]);return i?(u=i(),c=function(t,e){u.set(t,o(i,e,s))}):(u={},c=function(t,e){u[t]=o(i,e,s)}),v.forEach(c),u}function s(t,e){if(e>=n.length)return t;var r=[],a=i[e++];return t.forEach((function(t,n){r.push({key:t,values:s(n,e)})})),a?r.sort((function(t,e){return a(t.key,e.key)})):r}return r.map=function(t,e){return o(e,t,0)},r.entries=function(t){return s(o(a.map,t,0),0)},r.key=function(t){return n.push(t),r},r.sortKeys=function(t){return i[n.length-1]=t,r},r.sortValues=function(e){return t=e,r},r.rollup=function(t){return e=t,r},r},a.set=function(t){var e=new D;if(t)for(var r=0,n=t.length;r<n;++r)e.add(t[r]);return e},T(D,{has:L,add:function(t){return this._[S(t+=\\\"\\\")]=!0,t},remove:C,values:P,size:O,empty:I,forEach:function(t){for(var e in this._)t.call(this,E(e))}}),a.behavior={},a.rebind=function(t,e){for(var r,n=1,i=arguments.length;++n<i;)t[r=arguments[n]]=R(t,e,e[r]);return t};var B=[\\\"webkit\\\",\\\"ms\\\",\\\"moz\\\",\\\"Moz\\\",\\\"o\\\",\\\"O\\\"];function N(){}function j(){}function U(t){var e=[],r=new k;function n(){for(var r,n=e,i=-1,a=n.length;++i<a;)(r=n[i].on)&&r.apply(this,arguments);return t}return n.on=function(n,i){var a,o=r.get(n);return arguments.length<2?o&&o.on:(o&&(o.on=null,e=e.slice(0,a=e.indexOf(o)).concat(e.slice(a+1)),r.remove(n)),i&&e.push(r.set(n,{on:i})),t)},n}function V(){a.event.preventDefault()}function H(){for(var t,e=a.event;t=e.sourceEvent;)e=t;return e}function q(t){for(var e=new j,r=0,n=arguments.length;++r<n;)e[arguments[r]]=U(e);return e.of=function(r,n){return function(i){try{var o=i.sourceEvent=a.event;i.target=t,a.event=i,e[i.type].apply(r,n)}finally{a.event=o}}},e}a.dispatch=function(){for(var t=new j,e=-1,r=arguments.length;++e<r;)t[arguments[e]]=U(t);return t},j.prototype.on=function(t,e){var r=t.indexOf(\\\".\\\"),n=\\\"\\\";if(r>=0&&(n=t.slice(r+1),t=t.slice(0,r)),t)return arguments.length<2?this[t].on(n):this[t].on(n,e);if(2===arguments.length){if(null==e)for(t in this)this.hasOwnProperty(t)&&this[t].on(n,null);return this}},a.event=null,a.requote=function(t){return t.replace(G,\\\"\\\\\\\\$&\\\")};var G=/[\\\\\\\\\\\\^\\\\$\\\\*\\\\+\\\\?\\\\|\\\\[\\\\]\\\\(\\\\)\\\\.\\\\{\\\\}]/g,Z={}.__proto__?function(t,e){t.__proto__=e}:function(t,e){for(var r in e)t[r]=e[r]};function Y(t){return Z(t,K),t}var W=function(t,e){return e.querySelector(t)},X=function(t,e){return e.querySelectorAll(t)},J=function(t,e){var r=t.matches||t[F(t,\\\"matchesSelector\\\")];return J=function(t,e){return r.call(t,e)},J(t,e)};\\\"function\\\"==typeof Sizzle&&(W=function(t,e){return Sizzle(t,e)[0]||null},X=Sizzle,J=Sizzle.matchesSelector),a.selection=function(){return a.select(l.documentElement)};var K=a.selection.prototype=[];function $(t){return\\\"function\\\"==typeof t?t:function(){return W(t,this)}}function Q(t){return\\\"function\\\"==typeof t?t:function(){return X(t,this)}}K.select=function(t){var e,r,n,i,a=[];t=$(t);for(var o=-1,s=this.length;++o<s;){a.push(e=[]),e.parentNode=(n=this[o]).parentNode;for(var l=-1,u=n.length;++l<u;)(i=n[l])?(e.push(r=t.call(i,i.__data__,l,o)),r&&\\\"__data__\\\"in i&&(r.__data__=i.__data__)):e.push(null)}return Y(a)},K.selectAll=function(t){var e,r,n=[];t=Q(t);for(var i=-1,a=this.length;++i<a;)for(var o=this[i],l=-1,u=o.length;++l<u;)(r=o[l])&&(n.push(e=s(t.call(r,r.__data__,l,i))),e.parentNode=r);return Y(n)};var tt=\\\"http://www.w3.org/1999/xhtml\\\",et={svg:\\\"http://www.w3.org/2000/svg\\\",xhtml:tt,xlink:\\\"http://www.w3.org/1999/xlink\\\",xml:\\\"http://www.w3.org/XML/1998/namespace\\\",xmlns:\\\"http://www.w3.org/2000/xmlns/\\\"};function rt(t,e){return t=a.ns.qualify(t),null==e?t.local?function(){this.removeAttributeNS(t.space,t.local)}:function(){this.removeAttribute(t)}:\\\"function\\\"==typeof e?t.local?function(){var r=e.apply(this,arguments);null==r?this.removeAttributeNS(t.space,t.local):this.setAttributeNS(t.space,t.local,r)}:function(){var r=e.apply(this,arguments);null==r?this.removeAttribute(t):this.setAttribute(t,r)}:t.local?function(){this.setAttributeNS(t.space,t.local,e)}:function(){this.setAttribute(t,e)}}function nt(t){return t.trim().replace(/\\\\s+/g,\\\" \\\")}function it(t){return new RegExp(\\\"(?:^|\\\\\\\\s+)\\\"+a.requote(t)+\\\"(?:\\\\\\\\s+|$)\\\",\\\"g\\\")}function at(t){return(t+\\\"\\\").trim().split(/^|\\\\s+/)}function ot(t,e){var r=(t=at(t).map(st)).length;return\\\"function\\\"==typeof e?function(){for(var n=-1,i=e.apply(this,arguments);++n<r;)t[n](this,i)}:function(){for(var n=-1;++n<r;)t[n](this,e)}}function st(t){var e=it(t);return function(r,n){if(i=r.classList)return n?i.add(t):i.remove(t);var i=r.getAttribute(\\\"class\\\")||\\\"\\\";n?(e.lastIndex=0,e.test(i)||r.setAttribute(\\\"class\\\",nt(i+\\\" \\\"+t))):r.setAttribute(\\\"class\\\",nt(i.replace(e,\\\" \\\")))}}function lt(t,e,r){return null==e?function(){this.style.removeProperty(t)}:\\\"function\\\"==typeof e?function(){var n=e.apply(this,arguments);null==n?this.style.removeProperty(t):this.style.setProperty(t,n,r)}:function(){this.style.setProperty(t,e,r)}}function ut(t,e){return null==e?function(){delete this[t]}:\\\"function\\\"==typeof e?function(){var r=e.apply(this,arguments);null==r?delete this[t]:this[t]=r}:function(){this[t]=e}}function ct(t){return\\\"function\\\"==typeof t?t:(t=a.ns.qualify(t)).local?function(){return this.ownerDocument.createElementNS(t.space,t.local)}:function(){var e=this.ownerDocument,r=this.namespaceURI;return r===tt&&e.documentElement.namespaceURI===tt?e.createElement(t):e.createElementNS(r,t)}}function ft(){var t=this.parentNode;t&&t.removeChild(this)}function ht(t){return{__data__:t}}function pt(t){return function(){return J(this,t)}}function dt(t){return arguments.length||(t=g),function(e,r){return e&&r?t(e.__data__,r.__data__):!e-!r}}function vt(t,e){for(var r=0,n=t.length;r<n;r++)for(var i,a=t[r],o=0,s=a.length;o<s;o++)(i=a[o])&&e(i,o,r);return t}function gt(t){return Z(t,yt),t}a.ns={prefix:et,qualify:function(t){var e=t.indexOf(\\\":\\\"),r=t;return e>=0&&\\\"xmlns\\\"!==(r=t.slice(0,e))&&(t=t.slice(e+1)),et.hasOwnProperty(r)?{space:et[r],local:t}:t}},K.attr=function(t,e){if(arguments.length<2){if(\\\"string\\\"==typeof t){var r=this.node();return(t=a.ns.qualify(t)).local?r.getAttributeNS(t.space,t.local):r.getAttribute(t)}for(e in t)this.each(rt(e,t[e]));return this}return this.each(rt(t,e))},K.classed=function(t,e){if(arguments.length<2){if(\\\"string\\\"==typeof t){var r=this.node(),n=(t=at(t)).length,i=-1;if(e=r.classList){for(;++i<n;)if(!e.contains(t[i]))return!1}else for(e=r.getAttribute(\\\"class\\\");++i<n;)if(!it(t[i]).test(e))return!1;return!0}for(e in t)this.each(ot(e,t[e]));return this}return this.each(ot(t,e))},K.style=function(t,e,r){var n=arguments.length;if(n<3){if(\\\"string\\\"!=typeof t){for(r in n<2&&(e=\\\"\\\"),t)this.each(lt(r,t[r],e));return this}if(n<2){var i=this.node();return c(i).getComputedStyle(i,null).getPropertyValue(t)}r=\\\"\\\"}return this.each(lt(t,e,r))},K.property=function(t,e){if(arguments.length<2){if(\\\"string\\\"==typeof t)return this.node()[t];for(e in t)this.each(ut(e,t[e]));return this}return this.each(ut(t,e))},K.text=function(t){return arguments.length?this.each(\\\"function\\\"==typeof t?function(){var e=t.apply(this,arguments);this.textContent=null==e?\\\"\\\":e}:null==t?function(){this.textContent=\\\"\\\"}:function(){this.textContent=t}):this.node().textContent},K.html=function(t){return arguments.length?this.each(\\\"function\\\"==typeof t?function(){var e=t.apply(this,arguments);this.innerHTML=null==e?\\\"\\\":e}:null==t?function(){this.innerHTML=\\\"\\\"}:function(){this.innerHTML=t}):this.node().innerHTML},K.append=function(t){return t=ct(t),this.select((function(){return this.appendChild(t.apply(this,arguments))}))},K.insert=function(t,e){return t=ct(t),e=$(e),this.select((function(){return this.insertBefore(t.apply(this,arguments),e.apply(this,arguments)||null)}))},K.remove=function(){return this.each(ft)},K.data=function(t,e){var r,n,i=-1,a=this.length;if(!arguments.length){for(t=new Array(a=(r=this[0]).length);++i<a;)(n=r[i])&&(t[i]=n.__data__);return t}function o(t,r){var n,i,a,o=t.length,c=r.length,f=Math.min(o,c),h=new Array(c),p=new Array(c),d=new Array(o);if(e){var v,g=new k,y=new Array(o);for(n=-1;++n<o;)(i=t[n])&&(g.has(v=e.call(i,i.__data__,n))?d[n]=i:g.set(v,i),y[n]=v);for(n=-1;++n<c;)(i=g.get(v=e.call(r,a=r[n],n)))?!0!==i&&(h[n]=i,i.__data__=a):p[n]=ht(a),g.set(v,!0);for(n=-1;++n<o;)n in y&&!0!==g.get(y[n])&&(d[n]=t[n])}else{for(n=-1;++n<f;)i=t[n],a=r[n],i?(i.__data__=a,h[n]=i):p[n]=ht(a);for(;n<c;++n)p[n]=ht(r[n]);for(;n<o;++n)d[n]=t[n]}p.update=h,p.parentNode=h.parentNode=d.parentNode=t.parentNode,s.push(p),l.push(h),u.push(d)}var s=gt([]),l=Y([]),u=Y([]);if(\\\"function\\\"==typeof t)for(;++i<a;)o(r=this[i],t.call(r,r.parentNode.__data__,i));else for(;++i<a;)o(r=this[i],t);return l.enter=function(){return s},l.exit=function(){return u},l},K.datum=function(t){return arguments.length?this.property(\\\"__data__\\\",t):this.property(\\\"__data__\\\")},K.filter=function(t){var e,r,n,i=[];\\\"function\\\"!=typeof t&&(t=pt(t));for(var a=0,o=this.length;a<o;a++){i.push(e=[]),e.parentNode=(r=this[a]).parentNode;for(var s=0,l=r.length;s<l;s++)(n=r[s])&&t.call(n,n.__data__,s,a)&&e.push(n)}return Y(i)},K.order=function(){for(var t=-1,e=this.length;++t<e;)for(var r,n=this[t],i=n.length-1,a=n[i];--i>=0;)(r=n[i])&&(a&&a!==r.nextSibling&&a.parentNode.insertBefore(r,a),a=r);return this},K.sort=function(t){t=dt.apply(this,arguments);for(var e=-1,r=this.length;++e<r;)this[e].sort(t);return this.order()},K.each=function(t){return vt(this,(function(e,r,n){t.call(e,e.__data__,r,n)}))},K.call=function(t){var e=s(arguments);return t.apply(e[0]=this,e),this},K.empty=function(){return!this.node()},K.node=function(){for(var t=0,e=this.length;t<e;t++)for(var r=this[t],n=0,i=r.length;n<i;n++){var a=r[n];if(a)return a}return null},K.size=function(){var t=0;return vt(this,(function(){++t})),t};var yt=[];function mt(t,e,r){var n=\\\"__on\\\"+t,i=t.indexOf(\\\".\\\"),o=bt;i>0&&(t=t.slice(0,i));var l=xt.get(t);function u(){var e=this[n];e&&(this.removeEventListener(t,e,e.$),delete this[n])}return l&&(t=l,o=_t),i?e?function(){var i=o(e,s(arguments));u.call(this),this.addEventListener(t,this[n]=i,i.$=r),i._=e}:u:e?N:function(){var e,r=new RegExp(\\\"^__on([^.]+)\\\"+a.requote(t)+\\\"$\\\");for(var n in this)if(e=n.match(r)){var i=this[n];this.removeEventListener(e[1],i,i.$),delete this[n]}}}a.selection.enter=gt,a.selection.enter.prototype=yt,yt.append=K.append,yt.empty=K.empty,yt.node=K.node,yt.call=K.call,yt.size=K.size,yt.select=function(t){for(var e,r,n,i,a,o=[],s=-1,l=this.length;++s<l;){n=(i=this[s]).update,o.push(e=[]),e.parentNode=i.parentNode;for(var u=-1,c=i.length;++u<c;)(a=i[u])?(e.push(n[u]=r=t.call(i.parentNode,a.__data__,u,s)),r.__data__=a.__data__):e.push(null)}return Y(o)},yt.insert=function(t,e){var r,n,i;return arguments.length<2&&(r=this,e=function(t,e,a){var o,s=r[a].update,l=s.length;for(a!=i&&(i=a,n=0),e>=n&&(n=e+1);!(o=s[n])&&++n<l;);return o}),K.insert.call(this,t,e)},a.select=function(t){var e;return\\\"string\\\"==typeof t?(e=[W(t,l)]).parentNode=l.documentElement:(e=[t]).parentNode=u(t),Y([e])},a.selectAll=function(t){var e;return\\\"string\\\"==typeof t?(e=s(X(t,l))).parentNode=l.documentElement:(e=s(t)).parentNode=null,Y([e])},K.on=function(t,e,r){var n=arguments.length;if(n<3){if(\\\"string\\\"!=typeof t){for(r in n<2&&(e=!1),t)this.each(mt(r,t[r],e));return this}if(n<2)return(n=this.node()[\\\"__on\\\"+t])&&n._;r=!1}return this.each(mt(t,e,r))};var xt=a.map({mouseenter:\\\"mouseover\\\",mouseleave:\\\"mouseout\\\"});function bt(t,e){return function(r){var n=a.event;a.event=r,e[0]=this.__data__;try{t.apply(this,e)}finally{a.event=n}}}function _t(t,e){var r=bt(t,e);return function(t){var e=this,n=t.relatedTarget;n&&(n===e||8&n.compareDocumentPosition(e))||r.call(e,t)}}l&&xt.forEach((function(t){\\\"on\\\"+t in l&&xt.remove(t)}));var wt,Tt=0;function kt(t){var e=\\\".dragsuppress-\\\"+ ++Tt,r=\\\"click\\\"+e,n=a.select(c(t)).on(\\\"touchmove\\\"+e,V).on(\\\"dragstart\\\"+e,V).on(\\\"selectstart\\\"+e,V);if(null==wt&&(wt=!(\\\"onselectstart\\\"in t)&&F(t.style,\\\"userSelect\\\")),wt){var i=u(t).style,o=i[wt];i[wt]=\\\"none\\\"}return function(t){if(n.on(e,null),wt&&(i[wt]=o),t){var a=function(){n.on(r,null)};n.on(r,(function(){V(),a()}),!0),setTimeout(a,0)}}}a.mouse=function(t){return Mt(t,H())};var At=this.navigator&&/WebKit/.test(this.navigator.userAgent)?-1:0;function Mt(t,e){e.changedTouches&&(e=e.changedTouches[0]);var r=t.ownerSVGElement||t;if(r.createSVGPoint){var n=r.createSVGPoint();if(At<0){var i=c(t);if(i.scrollX||i.scrollY){var o=(r=a.select(\\\"body\\\").append(\\\"svg\\\").style({position:\\\"absolute\\\",top:0,left:0,margin:0,padding:0,border:\\\"none\\\"},\\\"important\\\"))[0][0].getScreenCTM();At=!(o.f||o.e),r.remove()}}return At?(n.x=e.pageX,n.y=e.pageY):(n.x=e.clientX,n.y=e.clientY),[(n=n.matrixTransform(t.getScreenCTM().inverse())).x,n.y]}var s=t.getBoundingClientRect();return[e.clientX-s.left-t.clientLeft,e.clientY-s.top-t.clientTop]}function St(){return a.event.changedTouches[0].identifier}a.touch=function(t,e,r){if(arguments.length<3&&(r=e,e=H().changedTouches),e)for(var n,i=0,a=e.length;i<a;++i)if((n=e[i]).identifier===r)return Mt(t,n)},a.behavior.drag=function(){var t=q(i,\\\"drag\\\",\\\"dragstart\\\",\\\"dragend\\\"),e=null,r=o(N,a.mouse,c,\\\"mousemove\\\",\\\"mouseup\\\"),n=o(St,a.touch,z,\\\"touchmove\\\",\\\"touchend\\\");function i(){this.on(\\\"mousedown.drag\\\",r).on(\\\"touchstart.drag\\\",n)}function o(r,n,i,o,s){return function(){var l,u=this,c=a.event.target.correspondingElement||a.event.target,f=u.parentNode,h=t.of(u,arguments),p=0,d=r(),v=\\\".drag\\\"+(null==d?\\\"\\\":\\\"-\\\"+d),g=a.select(i(c)).on(o+v,(function(){var t,e,r=n(f,d);r&&(t=r[0]-m[0],e=r[1]-m[1],p|=t|e,m=r,h({type:\\\"drag\\\",x:r[0]+l[0],y:r[1]+l[1],dx:t,dy:e}))})).on(s+v,(function(){n(f,d)&&(g.on(o+v,null).on(s+v,null),y(p),h({type:\\\"dragend\\\"}))})),y=kt(c),m=n(f,d);l=e?[(l=e.apply(u,arguments)).x-m[0],l.y-m[1]]:[0,0],h({type:\\\"dragstart\\\"})}}return i.origin=function(t){return arguments.length?(e=t,i):e},a.rebind(i,t,\\\"on\\\")},a.touches=function(t,e){return arguments.length<2&&(e=H().touches),e?s(e).map((function(e){var r=Mt(t,e);return r.identifier=e.identifier,r})):[]};var Et=1e-6,Lt=Et*Et,Ct=Math.PI,Pt=2*Ct,Ot=Pt-Et,It=Ct/2,Dt=Ct/180,zt=180/Ct;function Rt(t){return t>1?It:t<-1?-It:Math.asin(t)}function Ft(t){return((t=Math.exp(t))+1/t)/2}var Bt=Math.SQRT2;a.interpolateZoom=function(t,e){var r,n,i=t[0],a=t[1],o=t[2],s=e[0],l=e[1],u=e[2],c=s-i,f=l-a,h=c*c+f*f;if(h<Lt)n=Math.log(u/o)/Bt,r=function(t){return[i+t*c,a+t*f,o*Math.exp(Bt*t*n)]};else{var p=Math.sqrt(h),d=(u*u-o*o+4*h)/(2*o*2*p),v=(u*u-o*o-4*h)/(2*u*2*p),g=Math.log(Math.sqrt(d*d+1)-d),y=Math.log(Math.sqrt(v*v+1)-v);n=(y-g)/Bt,r=function(t){var e,r=t*n,s=Ft(g),l=o/(2*p)*(s*(e=Bt*r+g,((e=Math.exp(2*e))-1)/(e+1))-function(t){return((t=Math.exp(t))-1/t)/2}(g));return[i+l*c,a+l*f,o*s/Ft(Bt*r+g)]}}return r.duration=1e3*n,r},a.behavior.zoom=function(){var t,e,r,n,i,o,s,u,f,h={x:0,y:0,k:1},p=[960,500],d=Ut,v=250,g=0,y=\\\"mousedown.zoom\\\",m=\\\"mousemove.zoom\\\",x=\\\"mouseup.zoom\\\",b=\\\"touchstart.zoom\\\",_=q(w,\\\"zoomstart\\\",\\\"zoom\\\",\\\"zoomend\\\");function w(t){t.on(y,P).on(jt+\\\".zoom\\\",I).on(\\\"dblclick.zoom\\\",D).on(b,O)}function T(t){return[(t[0]-h.x)/h.k,(t[1]-h.y)/h.k]}function k(t){h.k=Math.max(d[0],Math.min(d[1],t))}function A(t,e){e=function(t){return[t[0]*h.k+h.x,t[1]*h.k+h.y]}(e),h.x+=t[0]-e[0],h.y+=t[1]-e[1]}function M(t,r,n,i){t.__chart__={x:h.x,y:h.y,k:h.k},k(Math.pow(2,i)),A(e=r,n),t=a.select(t),v>0&&(t=t.transition().duration(v)),t.call(w.event)}function S(){s&&s.domain(o.range().map((function(t){return(t-h.x)/h.k})).map(o.invert)),f&&f.domain(u.range().map((function(t){return(t-h.y)/h.k})).map(u.invert))}function E(t){g++||t({type:\\\"zoomstart\\\"})}function L(t){S(),t({type:\\\"zoom\\\",scale:h.k,translate:[h.x,h.y]})}function C(t){--g||(t({type:\\\"zoomend\\\"}),e=null)}function P(){var t=this,e=_.of(t,arguments),r=0,n=a.select(c(t)).on(m,(function(){r=1,A(a.mouse(t),i),L(e)})).on(x,(function(){n.on(m,null).on(x,null),o(r),C(e)})),i=T(a.mouse(t)),o=kt(t);Ji.call(t),E(e)}function O(){var t,e=this,r=_.of(e,arguments),n={},o=0,s=\\\".zoom-\\\"+a.event.changedTouches[0].identifier,l=\\\"touchmove\\\"+s,u=\\\"touchend\\\"+s,c=[],f=a.select(e),p=kt(e);function d(){var r=a.touches(e);return t=h.k,r.forEach((function(t){t.identifier in n&&(n[t.identifier]=T(t))})),r}function v(){var t=a.event.target;a.select(t).on(l,g).on(u,m),c.push(t);for(var r=a.event.changedTouches,s=0,f=r.length;s<f;++s)n[r[s].identifier]=null;var p=d(),v=Date.now();if(1===p.length){if(v-i<500){var y=p[0];M(e,y,n[y.identifier],Math.floor(Math.log(h.k)/Math.LN2)+1),V()}i=v}else if(p.length>1){y=p[0];var x=p[1],b=y[0]-x[0],_=y[1]-x[1];o=b*b+_*_}}function g(){var s,l,u,c,f=a.touches(e);Ji.call(e);for(var h=0,p=f.length;h<p;++h,c=null)if(u=f[h],c=n[u.identifier]){if(l)break;s=u,l=c}if(c){var d=(d=u[0]-s[0])*d+(d=u[1]-s[1])*d,v=o&&Math.sqrt(d/o);s=[(s[0]+u[0])/2,(s[1]+u[1])/2],l=[(l[0]+c[0])/2,(l[1]+c[1])/2],k(v*t)}i=null,A(s,l),L(r)}function m(){if(a.event.touches.length){for(var t=a.event.changedTouches,e=0,i=t.length;e<i;++e)delete n[t[e].identifier];for(var o in n)return void d()}a.selectAll(c).on(s,null),f.on(y,P).on(b,O),p(),C(r)}v(),E(r),f.on(y,null).on(b,v)}function I(){var i=_.of(this,arguments);n?clearTimeout(n):(Ji.call(this),t=T(e=r||a.mouse(this)),E(i)),n=setTimeout((function(){n=null,C(i)}),50),V(),k(Math.pow(2,.002*Nt())*h.k),A(e,t),L(i)}function D(){var t=a.mouse(this),e=Math.log(h.k)/Math.LN2;M(this,t,T(t),a.event.shiftKey?Math.ceil(e)-1:Math.floor(e)+1)}return jt||(jt=\\\"onwheel\\\"in l?(Nt=function(){return-a.event.deltaY*(a.event.deltaMode?120:1)},\\\"wheel\\\"):\\\"onmousewheel\\\"in l?(Nt=function(){return a.event.wheelDelta},\\\"mousewheel\\\"):(Nt=function(){return-a.event.detail},\\\"MozMousePixelScroll\\\")),w.event=function(t){t.each((function(){var t=_.of(this,arguments),r=h;Qi?a.select(this).transition().each(\\\"start.zoom\\\",(function(){h=this.__chart__||{x:0,y:0,k:1},E(t)})).tween(\\\"zoom:zoom\\\",(function(){var n=p[0],i=p[1],o=e?e[0]:n/2,s=e?e[1]:i/2,l=a.interpolateZoom([(o-h.x)/h.k,(s-h.y)/h.k,n/h.k],[(o-r.x)/r.k,(s-r.y)/r.k,n/r.k]);return function(e){var r=l(e),i=n/r[2];this.__chart__=h={x:o-r[0]*i,y:s-r[1]*i,k:i},L(t)}})).each(\\\"interrupt.zoom\\\",(function(){C(t)})).each(\\\"end.zoom\\\",(function(){C(t)})):(this.__chart__=h,E(t),L(t),C(t))}))},w.translate=function(t){return arguments.length?(h={x:+t[0],y:+t[1],k:h.k},S(),w):[h.x,h.y]},w.scale=function(t){return arguments.length?(h={x:h.x,y:h.y,k:null},k(+t),S(),w):h.k},w.scaleExtent=function(t){return arguments.length?(d=null==t?Ut:[+t[0],+t[1]],w):d},w.center=function(t){return arguments.length?(r=t&&[+t[0],+t[1]],w):r},w.size=function(t){return arguments.length?(p=t&&[+t[0],+t[1]],w):p},w.duration=function(t){return arguments.length?(v=+t,w):v},w.x=function(t){return arguments.length?(s=t,o=t.copy(),h={x:0,y:0,k:1},w):s},w.y=function(t){return arguments.length?(f=t,u=t.copy(),h={x:0,y:0,k:1},w):f},a.rebind(w,_,\\\"on\\\")};var Nt,jt,Ut=[0,1/0];function Vt(){}function Ht(t,e,r){return this instanceof Ht?(this.h=+t,this.s=+e,void(this.l=+r)):arguments.length<2?t instanceof Ht?new Ht(t.h,t.s,t.l):ce(\\\"\\\"+t,fe,Ht):new Ht(t,e,r)}a.color=Vt,Vt.prototype.toString=function(){return this.rgb()+\\\"\\\"},a.hsl=Ht;var qt=Ht.prototype=new Vt;function Gt(t,e,r){var n,i;function a(t){return Math.round(255*function(t){return t>360?t-=360:t<0&&(t+=360),t<60?n+(i-n)*t/60:t<180?i:t<240?n+(i-n)*(240-t)/60:n}(t))}return t=isNaN(t)?0:(t%=360)<0?t+360:t,e=isNaN(e)||e<0?0:e>1?1:e,n=2*(r=r<0?0:r>1?1:r)-(i=r<=.5?r*(1+e):r+e-r*e),new ae(a(t+120),a(t),a(t-120))}function Zt(t,e,r){return this instanceof Zt?(this.h=+t,this.c=+e,void(this.l=+r)):arguments.length<2?t instanceof Zt?new Zt(t.h,t.c,t.l):function(t,e,r){return t>0?new Zt(Math.atan2(r,e)*zt,Math.sqrt(e*e+r*r),t):new Zt(NaN,NaN,t)}(t instanceof Xt?t.l:(t=he((t=a.rgb(t)).r,t.g,t.b)).l,t.a,t.b):new Zt(t,e,r)}qt.brighter=function(t){return t=Math.pow(.7,arguments.length?t:1),new Ht(this.h,this.s,this.l/t)},qt.darker=function(t){return t=Math.pow(.7,arguments.length?t:1),new Ht(this.h,this.s,t*this.l)},qt.rgb=function(){return Gt(this.h,this.s,this.l)},a.hcl=Zt;var Yt=Zt.prototype=new Vt;function Wt(t,e,r){return isNaN(t)&&(t=0),isNaN(e)&&(e=0),new Xt(r,Math.cos(t*=Dt)*e,Math.sin(t)*e)}function Xt(t,e,r){return this instanceof Xt?(this.l=+t,this.a=+e,void(this.b=+r)):arguments.length<2?t instanceof Xt?new Xt(t.l,t.a,t.b):t instanceof Zt?Wt(t.h,t.c,t.l):he((t=ae(t)).r,t.g,t.b):new Xt(t,e,r)}Yt.brighter=function(t){return new Zt(this.h,this.c,Math.min(100,this.l+Jt*(arguments.length?t:1)))},Yt.darker=function(t){return new Zt(this.h,this.c,Math.max(0,this.l-Jt*(arguments.length?t:1)))},Yt.rgb=function(){return Wt(this.h,this.c,this.l).rgb()},a.lab=Xt;var Jt=18,Kt=.95047,$t=1,Qt=1.08883,te=Xt.prototype=new Vt;function ee(t,e,r){var n=(t+16)/116,i=n+e/500,a=n-r/200;return new ae(ie(3.2404542*(i=re(i)*Kt)-1.5371385*(n=re(n)*$t)-.4985314*(a=re(a)*Qt)),ie(-.969266*i+1.8760108*n+.041556*a),ie(.0556434*i-.2040259*n+1.0572252*a))}function re(t){return t>.206893034?t*t*t:(t-4/29)/7.787037}function ne(t){return t>.008856?Math.pow(t,1/3):7.787037*t+4/29}function ie(t){return Math.round(255*(t<=.00304?12.92*t:1.055*Math.pow(t,1/2.4)-.055))}function ae(t,e,r){return this instanceof ae?(this.r=~~t,this.g=~~e,void(this.b=~~r)):arguments.length<2?t instanceof ae?new ae(t.r,t.g,t.b):ce(\\\"\\\"+t,ae,Gt):new ae(t,e,r)}function oe(t){return new ae(t>>16,t>>8&255,255&t)}function se(t){return oe(t)+\\\"\\\"}te.brighter=function(t){return new Xt(Math.min(100,this.l+Jt*(arguments.length?t:1)),this.a,this.b)},te.darker=function(t){return new Xt(Math.max(0,this.l-Jt*(arguments.length?t:1)),this.a,this.b)},te.rgb=function(){return ee(this.l,this.a,this.b)},a.rgb=ae;var le=ae.prototype=new Vt;function ue(t){return t<16?\\\"0\\\"+Math.max(0,t).toString(16):Math.min(255,t).toString(16)}function ce(t,e,r){var n,i,a,o=0,s=0,l=0;if(n=/([a-z]+)\\\\((.*)\\\\)/.exec(t=t.toLowerCase()))switch(i=n[2].split(\\\",\\\"),n[1]){case\\\"hsl\\\":return r(parseFloat(i[0]),parseFloat(i[1])/100,parseFloat(i[2])/100);case\\\"rgb\\\":return e(de(i[0]),de(i[1]),de(i[2]))}return(a=ve.get(t))?e(a.r,a.g,a.b):(null==t||\\\"#\\\"!==t.charAt(0)||isNaN(a=parseInt(t.slice(1),16))||(4===t.length?(o=(3840&a)>>4,o|=o>>4,s=240&a,s|=s>>4,l=15&a,l|=l<<4):7===t.length&&(o=(16711680&a)>>16,s=(65280&a)>>8,l=255&a)),e(o,s,l))}function fe(t,e,r){var n,i,a=Math.min(t/=255,e/=255,r/=255),o=Math.max(t,e,r),s=o-a,l=(o+a)/2;return s?(i=l<.5?s/(o+a):s/(2-o-a),n=t==o?(e-r)/s+(e<r?6:0):e==o?(r-t)/s+2:(t-e)/s+4,n*=60):(n=NaN,i=l>0&&l<1?0:n),new Ht(n,i,l)}function he(t,e,r){var n=ne((.4124564*(t=pe(t))+.3575761*(e=pe(e))+.1804375*(r=pe(r)))/Kt),i=ne((.2126729*t+.7151522*e+.072175*r)/$t);return Xt(116*i-16,500*(n-i),200*(i-ne((.0193339*t+.119192*e+.9503041*r)/Qt)))}function pe(t){return(t/=255)<=.04045?t/12.92:Math.pow((t+.055)/1.055,2.4)}function de(t){var e=parseFloat(t);return\\\"%\\\"===t.charAt(t.length-1)?Math.round(2.55*e):e}le.brighter=function(t){t=Math.pow(.7,arguments.length?t:1);var e=this.r,r=this.g,n=this.b,i=30;return e||r||n?(e&&e<i&&(e=i),r&&r<i&&(r=i),n&&n<i&&(n=i),new ae(Math.min(255,e/t),Math.min(255,r/t),Math.min(255,n/t))):new ae(i,i,i)},le.darker=function(t){return new ae((t=Math.pow(.7,arguments.length?t:1))*this.r,t*this.g,t*this.b)},le.hsl=function(){return fe(this.r,this.g,this.b)},le.toString=function(){return\\\"#\\\"+ue(this.r)+ue(this.g)+ue(this.b)};var ve=a.map({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});function ge(t){return\\\"function\\\"==typeof t?t:function(){return t}}function ye(t){return function(e,r,n){return 2===arguments.length&&\\\"function\\\"==typeof r&&(n=r,r=null),me(e,r,t,n)}}function me(t,e,r,n){var i={},o=a.dispatch(\\\"beforesend\\\",\\\"progress\\\",\\\"load\\\",\\\"error\\\"),l={},u=new XMLHttpRequest,c=null;function f(){var t,e=u.status;if(!e&&function(t){var e=t.responseType;return e&&\\\"text\\\"!==e?t.response:t.responseText}(u)||e>=200&&e<300||304===e){try{t=r.call(i,u)}catch(t){return void o.error.call(i,t)}o.load.call(i,t)}else o.error.call(i,u)}return self.XDomainRequest&&!(\\\"withCredentials\\\"in u)&&/^(http(s)?:)?\\\\/\\\\//.test(t)&&(u=new XDomainRequest),\\\"onload\\\"in u?u.onload=u.onerror=f:u.onreadystatechange=function(){u.readyState>3&&f()},u.onprogress=function(t){var e=a.event;a.event=t;try{o.progress.call(i,u)}finally{a.event=e}},i.header=function(t,e){return t=(t+\\\"\\\").toLowerCase(),arguments.length<2?l[t]:(null==e?delete l[t]:l[t]=e+\\\"\\\",i)},i.mimeType=function(t){return arguments.length?(e=null==t?null:t+\\\"\\\",i):e},i.responseType=function(t){return arguments.length?(c=t,i):c},i.response=function(t){return r=t,i},[\\\"get\\\",\\\"post\\\"].forEach((function(t){i[t]=function(){return i.send.apply(i,[t].concat(s(arguments)))}})),i.send=function(r,n,a){if(2===arguments.length&&\\\"function\\\"==typeof n&&(a=n,n=null),u.open(r,t,!0),null==e||\\\"accept\\\"in l||(l.accept=e+\\\",*/*\\\"),u.setRequestHeader)for(var s in l)u.setRequestHeader(s,l[s]);return null!=e&&u.overrideMimeType&&u.overrideMimeType(e),null!=c&&(u.responseType=c),null!=a&&i.on(\\\"error\\\",a).on(\\\"load\\\",(function(t){a(null,t)})),o.beforesend.call(i,u),u.send(null==n?null:n),i},i.abort=function(){return u.abort(),i},a.rebind(i,o,\\\"on\\\"),null==n?i:i.get(function(t){return 1===t.length?function(e,r){t(null==e?r:null)}:t}(n))}ve.forEach((function(t,e){ve.set(t,oe(e))})),a.functor=ge,a.xhr=ye(z),a.dsv=function(t,e){var r=new RegExp('[\\\"'+t+\\\"\\\\n]\\\"),n=t.charCodeAt(0);function i(t,r,n){arguments.length<3&&(n=r,r=null);var i=me(t,e,null==r?a:o(r),n);return i.row=function(t){return arguments.length?i.response(null==(r=t)?a:o(t)):r},i}function a(t){return i.parse(t.responseText)}function o(t){return function(e){return i.parse(e.responseText,t)}}function s(e){return e.map(l).join(t)}function l(t){return r.test(t)?'\\\"'+t.replace(/\\\\\\\"/g,'\\\"\\\"')+'\\\"':t}return i.parse=function(t,e){var r;return i.parseRows(t,(function(t,n){if(r)return r(t,n-1);var i=function(e){for(var r={},n=t.length,i=0;i<n;++i)r[t[i]]=e[i];return r};r=e?function(t,r){return e(i(t),r)}:i}))},i.parseRows=function(t,e){var r,i,a={},o={},s=[],l=t.length,u=0,c=0;function f(){if(u>=l)return o;if(i)return i=!1,a;var e=u;if(34===t.charCodeAt(e)){for(var r=e;r++<l;)if(34===t.charCodeAt(r)){if(34!==t.charCodeAt(r+1))break;++r}return u=r+2,13===(s=t.charCodeAt(r+1))?(i=!0,10===t.charCodeAt(r+2)&&++u):10===s&&(i=!0),t.slice(e+1,r).replace(/\\\"\\\"/g,'\\\"')}for(;u<l;){var s,c=1;if(10===(s=t.charCodeAt(u++)))i=!0;else if(13===s)i=!0,10===t.charCodeAt(u)&&(++u,++c);else if(s!==n)continue;return t.slice(e,u-c)}return t.slice(e)}for(;(r=f())!==o;){for(var h=[];r!==a&&r!==o;)h.push(r),r=f();e&&null==(h=e(h,c++))||s.push(h)}return s},i.format=function(e){if(Array.isArray(e[0]))return i.formatRows(e);var r=new D,n=[];return e.forEach((function(t){for(var e in t)r.has(e)||n.push(r.add(e))})),[n.map(l).join(t)].concat(e.map((function(e){return n.map((function(t){return l(e[t])})).join(t)}))).join(\\\"\\\\n\\\")},i.formatRows=function(t){return t.map(s).join(\\\"\\\\n\\\")},i},a.csv=a.dsv(\\\",\\\",\\\"text/csv\\\"),a.tsv=a.dsv(\\\"\\\\t\\\",\\\"text/tab-separated-values\\\");var xe,be,_e,we,Te=this[F(this,\\\"requestAnimationFrame\\\")]||function(t){setTimeout(t,17)};function ke(t,e,r){var n=arguments.length;n<2&&(e=0),n<3&&(r=Date.now());var i={c:t,t:r+e,n:null};return be?be.n=i:xe=i,be=i,_e||(we=clearTimeout(we),_e=1,Te(Ae)),i}function Ae(){var t=Me(),e=Se()-t;e>24?(isFinite(e)&&(clearTimeout(we),we=setTimeout(Ae,e)),_e=0):(_e=1,Te(Ae))}function Me(){for(var t=Date.now(),e=xe;e;)t>=e.t&&e.c(t-e.t)&&(e.c=null),e=e.n;return t}function Se(){for(var t,e=xe,r=1/0;e;)e.c?(e.t<r&&(r=e.t),e=(t=e).n):e=t?t.n=e.n:xe=e.n;return be=t,r}function Ee(t){return t[0]}function Le(t){return t[1]}function Ce(t){for(var e,r,n,i=t.length,a=[0,1],o=2,s=2;s<i;s++){for(;o>1&&(e=t[a[o-2]],r=t[a[o-1]],n=t[s],(r[0]-e[0])*(n[1]-e[1])-(r[1]-e[1])*(n[0]-e[0])<=0);)--o;a[o++]=s}return a.slice(0,o)}function Pe(t,e){return t[0]-e[0]||t[1]-e[1]}a.timer=function(){ke.apply(this,arguments)},a.timer.flush=function(){Me(),Se()},a.round=function(t,e){return e?Math.round(t*(e=Math.pow(10,e)))/e:Math.round(t)},a.geom={},a.geom.hull=function(t){var e=Ee,r=Le;if(arguments.length)return n(t);function n(t){if(t.length<3)return[];var n,i=ge(e),a=ge(r),o=t.length,s=[],l=[];for(n=0;n<o;n++)s.push([+i.call(this,t[n],n),+a.call(this,t[n],n),n]);for(s.sort(Pe),n=0;n<o;n++)l.push([s[n][0],-s[n][1]]);var u=Ce(s),c=Ce(l),f=c[0]===u[0],h=c[c.length-1]===u[u.length-1],p=[];for(n=u.length-1;n>=0;--n)p.push(t[s[u[n]][2]]);for(n=+f;n<c.length-h;++n)p.push(t[s[c[n]][2]]);return p}return n.x=function(t){return arguments.length?(e=t,n):e},n.y=function(t){return arguments.length?(r=t,n):r},n},a.geom.polygon=function(t){return Z(t,Oe),t};var Oe=a.geom.polygon.prototype=[];function Ie(t,e,r){return(r[0]-e[0])*(t[1]-e[1])<(r[1]-e[1])*(t[0]-e[0])}function De(t,e,r,n){var i=t[0],a=r[0],o=e[0]-i,s=n[0]-a,l=t[1],u=r[1],c=e[1]-l,f=n[1]-u,h=(s*(l-u)-f*(i-a))/(f*o-s*c);return[i+h*o,l+h*c]}function ze(t){var e=t[0],r=t[t.length-1];return!(e[0]-r[0]||e[1]-r[1])}Oe.area=function(){for(var t,e=-1,r=this.length,n=this[r-1],i=0;++e<r;)t=n,n=this[e],i+=t[1]*n[0]-t[0]*n[1];return.5*i},Oe.centroid=function(t){var e,r,n=-1,i=this.length,a=0,o=0,s=this[i-1];for(arguments.length||(t=-1/(6*this.area()));++n<i;)e=s,s=this[n],r=e[0]*s[1]-s[0]*e[1],a+=(e[0]+s[0])*r,o+=(e[1]+s[1])*r;return[a*t,o*t]},Oe.clip=function(t){for(var e,r,n,i,a,o,s=ze(t),l=-1,u=this.length-ze(this),c=this[u-1];++l<u;){for(e=t.slice(),t.length=0,i=this[l],a=e[(n=e.length-s)-1],r=-1;++r<n;)Ie(o=e[r],c,i)?(Ie(a,c,i)||t.push(De(a,o,c,i)),t.push(o)):Ie(a,c,i)&&t.push(De(a,o,c,i)),a=o;s&&t.push(t[0]),c=i}return t};var Re,Fe,Be,Ne,je,Ue=[],Ve=[];function He(){sr(this),this.edge=this.site=this.circle=null}function qe(t){var e=Ue.pop()||new He;return e.site=t,e}function Ge(t){tr(t),Be.remove(t),Ue.push(t),sr(t)}function Ze(t){var e=t.circle,r=e.x,n=e.cy,i={x:r,y:n},a=t.P,o=t.N,s=[t];Ge(t);for(var l=a;l.circle&&w(r-l.circle.x)<Et&&w(n-l.circle.cy)<Et;)a=l.P,s.unshift(l),Ge(l),l=a;s.unshift(l),tr(l);for(var u=o;u.circle&&w(r-u.circle.x)<Et&&w(n-u.circle.cy)<Et;)o=u.N,s.push(u),Ge(u),u=o;s.push(u),tr(u);var c,f=s.length;for(c=1;c<f;++c)u=s[c],l=s[c-1],ir(u.edge,l.site,u.site,i);l=s[0],(u=s[f-1]).edge=nr(l.site,u.site,null,i),Qe(l),Qe(u)}function Ye(t){for(var e,r,n,i,a=t.x,o=t.y,s=Be._;s;)if((n=We(s,o)-a)>Et)s=s.L;else{if(!((i=a-Xe(s,o))>Et)){n>-Et?(e=s.P,r=s):i>-Et?(e=s,r=s.N):e=r=s;break}if(!s.R){e=s;break}s=s.R}var l=qe(t);if(Be.insert(e,l),e||r){if(e===r)return tr(e),r=qe(e.site),Be.insert(l,r),l.edge=r.edge=nr(e.site,l.site),Qe(e),void Qe(r);if(r){tr(e),tr(r);var u=e.site,c=u.x,f=u.y,h=t.x-c,p=t.y-f,d=r.site,v=d.x-c,g=d.y-f,y=2*(h*g-p*v),m=h*h+p*p,x=v*v+g*g,b={x:(g*m-p*x)/y+c,y:(h*x-v*m)/y+f};ir(r.edge,u,d,b),l.edge=nr(u,t,null,b),r.edge=nr(t,d,null,b),Qe(e),Qe(r)}else l.edge=nr(e.site,l.site)}}function We(t,e){var r=t.site,n=r.x,i=r.y,a=i-e;if(!a)return n;var o=t.P;if(!o)return-1/0;var s=(r=o.site).x,l=r.y,u=l-e;if(!u)return s;var c=s-n,f=1/a-1/u,h=c/u;return f?(-h+Math.sqrt(h*h-2*f*(c*c/(-2*u)-l+u/2+i-a/2)))/f+n:(n+s)/2}function Xe(t,e){var r=t.N;if(r)return We(r,e);var n=t.site;return n.y===e?n.x:1/0}function Je(t){this.site=t,this.edges=[]}function Ke(t,e){return e.angle-t.angle}function $e(){sr(this),this.x=this.y=this.arc=this.site=this.cy=null}function Qe(t){var e=t.P,r=t.N;if(e&&r){var n=e.site,i=t.site,a=r.site;if(n!==a){var o=i.x,s=i.y,l=n.x-o,u=n.y-s,c=a.x-o,f=2*(l*(g=a.y-s)-u*c);if(!(f>=-Lt)){var h=l*l+u*u,p=c*c+g*g,d=(g*h-u*p)/f,v=(l*p-c*h)/f,g=v+s,y=Ve.pop()||new $e;y.arc=t,y.site=i,y.x=d+o,y.y=g+Math.sqrt(d*d+v*v),y.cy=g,t.circle=y;for(var m=null,x=je._;x;)if(y.y<x.y||y.y===x.y&&y.x<=x.x){if(!x.L){m=x.P;break}x=x.L}else{if(!x.R){m=x;break}x=x.R}je.insert(m,y),m||(Ne=y)}}}}function tr(t){var e=t.circle;e&&(e.P||(Ne=e.N),je.remove(e),Ve.push(e),sr(e),t.circle=null)}function er(t,e){var r=t.b;if(r)return!0;var n,i,a=t.a,o=e[0][0],s=e[1][0],l=e[0][1],u=e[1][1],c=t.l,f=t.r,h=c.x,p=c.y,d=f.x,v=f.y,g=(h+d)/2,y=(p+v)/2;if(v===p){if(g<o||g>=s)return;if(h>d){if(a){if(a.y>=u)return}else a={x:g,y:l};r={x:g,y:u}}else{if(a){if(a.y<l)return}else a={x:g,y:u};r={x:g,y:l}}}else if(i=y-(n=(h-d)/(v-p))*g,n<-1||n>1)if(h>d){if(a){if(a.y>=u)return}else a={x:(l-i)/n,y:l};r={x:(u-i)/n,y:u}}else{if(a){if(a.y<l)return}else a={x:(u-i)/n,y:u};r={x:(l-i)/n,y:l}}else if(p<v){if(a){if(a.x>=s)return}else a={x:o,y:n*o+i};r={x:s,y:n*s+i}}else{if(a){if(a.x<o)return}else a={x:s,y:n*s+i};r={x:o,y:n*o+i}}return t.a=a,t.b=r,!0}function rr(t,e){this.l=t,this.r=e,this.a=this.b=null}function nr(t,e,r,n){var i=new rr(t,e);return Re.push(i),r&&ir(i,t,e,r),n&&ir(i,e,t,n),Fe[t.i].edges.push(new ar(i,t,e)),Fe[e.i].edges.push(new ar(i,e,t)),i}function ir(t,e,r,n){t.a||t.b?t.l===r?t.b=n:t.a=n:(t.a=n,t.l=e,t.r=r)}function ar(t,e,r){var n=t.a,i=t.b;this.edge=t,this.site=e,this.angle=r?Math.atan2(r.y-e.y,r.x-e.x):t.l===e?Math.atan2(i.x-n.x,n.y-i.y):Math.atan2(n.x-i.x,i.y-n.y)}function or(){this._=null}function sr(t){t.U=t.C=t.L=t.R=t.P=t.N=null}function lr(t,e){var r=e,n=e.R,i=r.U;i?i.L===r?i.L=n:i.R=n:t._=n,n.U=i,r.U=n,r.R=n.L,r.R&&(r.R.U=r),n.L=r}function ur(t,e){var r=e,n=e.L,i=r.U;i?i.L===r?i.L=n:i.R=n:t._=n,n.U=i,r.U=n,r.L=n.R,r.L&&(r.L.U=r),n.R=r}function cr(t){for(;t.L;)t=t.L;return t}function fr(t,e){var r,n,i,a=t.sort(hr).pop();for(Re=[],Fe=new Array(t.length),Be=new or,je=new or;;)if(i=Ne,a&&(!i||a.y<i.y||a.y===i.y&&a.x<i.x))a.x===r&&a.y===n||(Fe[a.i]=new Je(a),Ye(a),r=a.x,n=a.y),a=t.pop();else{if(!i)break;Ze(i.arc)}e&&(function(t){for(var e,r,n,i,a,o=Re,s=(r=t[0][0],n=t[0][1],i=t[1][0],a=t[1][1],function(t){var e,o=t.a,s=t.b,l=o.x,u=o.y,c=0,f=1,h=s.x-l,p=s.y-u;if(e=r-l,h||!(e>0)){if(e/=h,h<0){if(e<c)return;e<f&&(f=e)}else if(h>0){if(e>f)return;e>c&&(c=e)}if(e=i-l,h||!(e<0)){if(e/=h,h<0){if(e>f)return;e>c&&(c=e)}else if(h>0){if(e<c)return;e<f&&(f=e)}if(e=n-u,p||!(e>0)){if(e/=p,p<0){if(e<c)return;e<f&&(f=e)}else if(p>0){if(e>f)return;e>c&&(c=e)}if(e=a-u,p||!(e<0)){if(e/=p,p<0){if(e>f)return;e>c&&(c=e)}else if(p>0){if(e<c)return;e<f&&(f=e)}return c>0&&(t.a={x:l+c*h,y:u+c*p}),f<1&&(t.b={x:l+f*h,y:u+f*p}),t}}}}}),l=o.length;l--;)(!er(e=o[l],t)||!s(e)||w(e.a.x-e.b.x)<Et&&w(e.a.y-e.b.y)<Et)&&(e.a=e.b=null,o.splice(l,1))}(e),function(t){for(var e,r,n,i,a,o,s,l,u,c,f=t[0][0],h=t[1][0],p=t[0][1],d=t[1][1],v=Fe,g=v.length;g--;)if((a=v[g])&&a.prepare())for(l=(s=a.edges).length,o=0;o<l;)n=(c=s[o].end()).x,i=c.y,e=(u=s[++o%l].start()).x,r=u.y,(w(n-e)>Et||w(i-r)>Et)&&(s.splice(o,0,new ar((y=a.site,m=c,x=w(n-f)<Et&&d-i>Et?{x:f,y:w(e-f)<Et?r:d}:w(i-d)<Et&&h-n>Et?{x:w(r-d)<Et?e:h,y:d}:w(n-h)<Et&&i-p>Et?{x:h,y:w(e-h)<Et?r:p}:w(i-p)<Et&&n-f>Et?{x:w(r-p)<Et?e:f,y:p}:null,b=void 0,(b=new rr(y,null)).a=m,b.b=x,Re.push(b),b),a.site,null)),++l);var y,m,x,b}(e));var o={cells:Fe,edges:Re};return Be=je=Re=Fe=null,o}function hr(t,e){return e.y-t.y||e.x-t.x}Je.prototype.prepare=function(){for(var t,e=this.edges,r=e.length;r--;)(t=e[r].edge).b&&t.a||e.splice(r,1);return e.sort(Ke),e.length},ar.prototype={start:function(){return this.edge.l===this.site?this.edge.a:this.edge.b},end:function(){return this.edge.l===this.site?this.edge.b:this.edge.a}},or.prototype={insert:function(t,e){var r,n,i;if(t){if(e.P=t,e.N=t.N,t.N&&(t.N.P=e),t.N=e,t.R){for(t=t.R;t.L;)t=t.L;t.L=e}else t.R=e;r=t}else this._?(t=cr(this._),e.P=null,e.N=t,t.P=t.L=e,r=t):(e.P=e.N=null,this._=e,r=null);for(e.L=e.R=null,e.U=r,e.C=!0,t=e;r&&r.C;)r===(n=r.U).L?(i=n.R)&&i.C?(r.C=i.C=!1,n.C=!0,t=n):(t===r.R&&(lr(this,r),r=(t=r).U),r.C=!1,n.C=!0,ur(this,n)):(i=n.L)&&i.C?(r.C=i.C=!1,n.C=!0,t=n):(t===r.L&&(ur(this,r),r=(t=r).U),r.C=!1,n.C=!0,lr(this,n)),r=t.U;this._.C=!1},remove:function(t){t.N&&(t.N.P=t.P),t.P&&(t.P.N=t.N),t.N=t.P=null;var e,r,n,i=t.U,a=t.L,o=t.R;if(r=a?o?cr(o):a:o,i?i.L===t?i.L=r:i.R=r:this._=r,a&&o?(n=r.C,r.C=t.C,r.L=a,a.U=r,r!==o?(i=r.U,r.U=t.U,t=r.R,i.L=t,r.R=o,o.U=r):(r.U=i,i=r,t=r.R)):(n=t.C,t=r),t&&(t.U=i),!n)if(t&&t.C)t.C=!1;else{do{if(t===this._)break;if(t===i.L){if((e=i.R).C&&(e.C=!1,i.C=!0,lr(this,i),e=i.R),e.L&&e.L.C||e.R&&e.R.C){e.R&&e.R.C||(e.L.C=!1,e.C=!0,ur(this,e),e=i.R),e.C=i.C,i.C=e.R.C=!1,lr(this,i),t=this._;break}}else if((e=i.L).C&&(e.C=!1,i.C=!0,ur(this,i),e=i.L),e.L&&e.L.C||e.R&&e.R.C){e.L&&e.L.C||(e.R.C=!1,e.C=!0,lr(this,e),e=i.L),e.C=i.C,i.C=e.L.C=!1,ur(this,i),t=this._;break}e.C=!0,t=i,i=i.U}while(!t.C);t&&(t.C=!1)}}},a.geom.voronoi=function(t){var e=Ee,r=Le,n=e,i=r,a=pr;if(t)return o(t);function o(t){var e=new Array(t.length),r=a[0][0],n=a[0][1],i=a[1][0],o=a[1][1];return fr(s(t),a).cells.forEach((function(a,s){var l=a.edges,u=a.site;(e[s]=l.length?l.map((function(t){var e=t.start();return[e.x,e.y]})):u.x>=r&&u.x<=i&&u.y>=n&&u.y<=o?[[r,o],[i,o],[i,n],[r,n]]:[]).point=t[s]})),e}function s(t){return t.map((function(t,e){return{x:Math.round(n(t,e)/Et)*Et,y:Math.round(i(t,e)/Et)*Et,i:e}}))}return o.links=function(t){return fr(s(t)).edges.filter((function(t){return t.l&&t.r})).map((function(e){return{source:t[e.l.i],target:t[e.r.i]}}))},o.triangles=function(t){var e=[];return fr(s(t)).cells.forEach((function(r,n){for(var i,a,o,s,l=r.site,u=r.edges.sort(Ke),c=-1,f=u.length,h=u[f-1].edge,p=h.l===l?h.r:h.l;++c<f;)i=p,p=(h=u[c].edge).l===l?h.r:h.l,n<i.i&&n<p.i&&(o=i,s=p,((a=l).x-s.x)*(o.y-a.y)-(a.x-o.x)*(s.y-a.y)<0)&&e.push([t[n],t[i.i],t[p.i]])})),e},o.x=function(t){return arguments.length?(n=ge(e=t),o):e},o.y=function(t){return arguments.length?(i=ge(r=t),o):r},o.clipExtent=function(t){return arguments.length?(a=null==t?pr:t,o):a===pr?null:a},o.size=function(t){return arguments.length?o.clipExtent(t&&[[0,0],t]):a===pr?null:a&&a[1]},o};var pr=[[-1e6,-1e6],[1e6,1e6]];function dr(t){return t.x}function vr(t){return t.y}function gr(t,e,r,n,i,a){if(!t(e,r,n,i,a)){var o=.5*(r+i),s=.5*(n+a),l=e.nodes;l[0]&&gr(t,l[0],r,n,o,s),l[1]&&gr(t,l[1],o,n,i,s),l[2]&&gr(t,l[2],r,s,o,a),l[3]&&gr(t,l[3],o,s,i,a)}}function yr(t,e){t=a.rgb(t),e=a.rgb(e);var r=t.r,n=t.g,i=t.b,o=e.r-r,s=e.g-n,l=e.b-i;return function(t){return\\\"#\\\"+ue(Math.round(r+o*t))+ue(Math.round(n+s*t))+ue(Math.round(i+l*t))}}function mr(t,e){var r,n={},i={};for(r in t)r in e?n[r]=Tr(t[r],e[r]):i[r]=t[r];for(r in e)r in t||(i[r]=e[r]);return function(t){for(r in n)i[r]=n[r](t);return i}}function xr(t,e){return t=+t,e=+e,function(r){return t*(1-r)+e*r}}function br(t,e){var r,n,i,a=_r.lastIndex=wr.lastIndex=0,o=-1,s=[],l=[];for(t+=\\\"\\\",e+=\\\"\\\";(r=_r.exec(t))&&(n=wr.exec(e));)(i=n.index)>a&&(i=e.slice(a,i),s[o]?s[o]+=i:s[++o]=i),(r=r[0])===(n=n[0])?s[o]?s[o]+=n:s[++o]=n:(s[++o]=null,l.push({i:o,x:xr(r,n)})),a=wr.lastIndex;return a<e.length&&(i=e.slice(a),s[o]?s[o]+=i:s[++o]=i),s.length<2?l[0]?(e=l[0].x,function(t){return e(t)+\\\"\\\"}):function(){return e}:(e=l.length,function(t){for(var r,n=0;n<e;++n)s[(r=l[n]).i]=r.x(t);return s.join(\\\"\\\")})}a.geom.delaunay=function(t){return a.geom.voronoi().triangles(t)},a.geom.quadtree=function(t,e,r,n,i){var a,o=Ee,s=Le;if(a=arguments.length)return o=dr,s=vr,3===a&&(i=r,n=e,r=e=0),l(t);function l(t){var l,u,c,f,h,p,d,v,g,y=ge(o),m=ge(s);if(null!=e)p=e,d=r,v=n,g=i;else if(v=g=-(p=d=1/0),u=[],c=[],h=t.length,a)for(f=0;f<h;++f)(l=t[f]).x<p&&(p=l.x),l.y<d&&(d=l.y),l.x>v&&(v=l.x),l.y>g&&(g=l.y),u.push(l.x),c.push(l.y);else for(f=0;f<h;++f){var x=+y(l=t[f],f),b=+m(l,f);x<p&&(p=x),b<d&&(d=b),x>v&&(v=x),b>g&&(g=b),u.push(x),c.push(b)}var _=v-p,T=g-d;function k(t,e,r,n,i,a,o,s){if(!isNaN(r)&&!isNaN(n))if(t.leaf){var l=t.x,u=t.y;if(null!=l)if(w(l-r)+w(u-n)<.01)A(t,e,r,n,i,a,o,s);else{var c=t.point;t.x=t.y=t.point=null,A(t,c,l,u,i,a,o,s),A(t,e,r,n,i,a,o,s)}else t.x=r,t.y=n,t.point=e}else A(t,e,r,n,i,a,o,s)}function A(t,e,r,n,i,a,o,s){var l=.5*(i+o),u=.5*(a+s),c=r>=l,f=n>=u,h=f<<1|c;t.leaf=!1,c?i=l:o=l,f?a=u:s=u,k(t=t.nodes[h]||(t.nodes[h]={leaf:!0,nodes:[],point:null,x:null,y:null}),e,r,n,i,a,o,s)}_>T?g=d+_:v=p+T;var M={leaf:!0,nodes:[],point:null,x:null,y:null,add:function(t){k(M,t,+y(t,++f),+m(t,f),p,d,v,g)}};if(M.visit=function(t){gr(t,M,p,d,v,g)},M.find=function(t){return function(t,e,r,n,i,a,o){var s,l=1/0;return function t(u,c,f,h,p){if(!(c>a||f>o||h<n||p<i)){if(d=u.point){var d,v=e-u.x,g=r-u.y,y=v*v+g*g;if(y<l){var m=Math.sqrt(l=y);n=e-m,i=r-m,a=e+m,o=r+m,s=d}}for(var x=u.nodes,b=.5*(c+h),_=.5*(f+p),w=(r>=_)<<1|e>=b,T=w+4;w<T;++w)if(u=x[3&w])switch(3&w){case 0:t(u,c,f,b,_);break;case 1:t(u,b,f,h,_);break;case 2:t(u,c,_,b,p);break;case 3:t(u,b,_,h,p)}}}(t,n,i,a,o),s}(M,t[0],t[1],p,d,v,g)},f=-1,null==e){for(;++f<h;)k(M,t[f],u[f],c[f],p,d,v,g);--f}else t.forEach(M.add);return u=c=t=l=null,M}return l.x=function(t){return arguments.length?(o=t,l):o},l.y=function(t){return arguments.length?(s=t,l):s},l.extent=function(t){return arguments.length?(null==t?e=r=n=i=null:(e=+t[0][0],r=+t[0][1],n=+t[1][0],i=+t[1][1]),l):null==e?null:[[e,r],[n,i]]},l.size=function(t){return arguments.length?(null==t?e=r=n=i=null:(e=r=0,n=+t[0],i=+t[1]),l):null==e?null:[n-e,i-r]},l},a.interpolateRgb=yr,a.interpolateObject=mr,a.interpolateNumber=xr,a.interpolateString=br;var _r=/[-+]?(?:\\\\d+\\\\.?\\\\d*|\\\\.?\\\\d+)(?:[eE][-+]?\\\\d+)?/g,wr=new RegExp(_r.source,\\\"g\\\");function Tr(t,e){for(var r,n=a.interpolators.length;--n>=0&&!(r=a.interpolators[n](t,e)););return r}function kr(t,e){var r,n=[],i=[],a=t.length,o=e.length,s=Math.min(t.length,e.length);for(r=0;r<s;++r)n.push(Tr(t[r],e[r]));for(;r<a;++r)i[r]=t[r];for(;r<o;++r)i[r]=e[r];return function(t){for(r=0;r<s;++r)i[r]=n[r](t);return i}}a.interpolate=Tr,a.interpolators=[function(t,e){var r=typeof e;return(\\\"string\\\"===r?ve.has(e.toLowerCase())||/^(#|rgb\\\\(|hsl\\\\()/i.test(e)?yr:br:e instanceof Vt?yr:Array.isArray(e)?kr:\\\"object\\\"===r&&isNaN(e)?mr:xr)(t,e)}],a.interpolateArray=kr;var Ar=function(){return z},Mr=a.map({linear:Ar,poly:function(t){return function(e){return Math.pow(e,t)}},quad:function(){return Cr},cubic:function(){return Pr},sin:function(){return Ir},exp:function(){return Dr},circle:function(){return zr},elastic:function(t,e){var r;return arguments.length<2&&(e=.45),arguments.length?r=e/Pt*Math.asin(1/t):(t=1,r=e/4),function(n){return 1+t*Math.pow(2,-10*n)*Math.sin((n-r)*Pt/e)}},back:function(t){return t||(t=1.70158),function(e){return e*e*((t+1)*e-t)}},bounce:function(){return Rr}}),Sr=a.map({in:z,out:Er,\\\"in-out\\\":Lr,\\\"out-in\\\":function(t){return Lr(Er(t))}});function Er(t){return function(e){return 1-t(1-e)}}function Lr(t){return function(e){return.5*(e<.5?t(2*e):2-t(2-2*e))}}function Cr(t){return t*t}function Pr(t){return t*t*t}function Or(t){if(t<=0)return 0;if(t>=1)return 1;var e=t*t,r=e*t;return 4*(t<.5?r:3*(t-e)+r-.75)}function Ir(t){return 1-Math.cos(t*It)}function Dr(t){return Math.pow(2,10*(t-1))}function zr(t){return 1-Math.sqrt(1-t*t)}function Rr(t){return t<1/2.75?7.5625*t*t:t<2/2.75?7.5625*(t-=1.5/2.75)*t+.75:t<2.5/2.75?7.5625*(t-=2.25/2.75)*t+.9375:7.5625*(t-=2.625/2.75)*t+.984375}function Fr(t,e){return e-=t,function(r){return Math.round(t+e*r)}}function Br(t){var e,r,n,i=[t.a,t.b],a=[t.c,t.d],o=jr(i),s=Nr(i,a),l=jr(((e=a)[0]+=(n=-s)*(r=i)[0],e[1]+=n*r[1],e))||0;i[0]*a[1]<a[0]*i[1]&&(i[0]*=-1,i[1]*=-1,o*=-1,s*=-1),this.rotate=(o?Math.atan2(i[1],i[0]):Math.atan2(-a[0],a[1]))*zt,this.translate=[t.e,t.f],this.scale=[o,l],this.skew=l?Math.atan2(s,l)*zt:0}function Nr(t,e){return t[0]*e[0]+t[1]*e[1]}function jr(t){var e=Math.sqrt(Nr(t,t));return e&&(t[0]/=e,t[1]/=e),e}a.ease=function(t){var e,r=t.indexOf(\\\"-\\\"),n=r>=0?t.slice(0,r):t,i=r>=0?t.slice(r+1):\\\"in\\\";return n=Mr.get(n)||Ar,i=Sr.get(i)||z,e=i(n.apply(null,o.call(arguments,1))),function(t){return t<=0?0:t>=1?1:e(t)}},a.interpolateHcl=function(t,e){t=a.hcl(t),e=a.hcl(e);var r=t.h,n=t.c,i=t.l,o=e.h-r,s=e.c-n,l=e.l-i;return isNaN(s)&&(s=0,n=isNaN(n)?e.c:n),isNaN(o)?(o=0,r=isNaN(r)?e.h:r):o>180?o-=360:o<-180&&(o+=360),function(t){return Wt(r+o*t,n+s*t,i+l*t)+\\\"\\\"}},a.interpolateHsl=function(t,e){t=a.hsl(t),e=a.hsl(e);var r=t.h,n=t.s,i=t.l,o=e.h-r,s=e.s-n,l=e.l-i;return isNaN(s)&&(s=0,n=isNaN(n)?e.s:n),isNaN(o)?(o=0,r=isNaN(r)?e.h:r):o>180?o-=360:o<-180&&(o+=360),function(t){return Gt(r+o*t,n+s*t,i+l*t)+\\\"\\\"}},a.interpolateLab=function(t,e){t=a.lab(t),e=a.lab(e);var r=t.l,n=t.a,i=t.b,o=e.l-r,s=e.a-n,l=e.b-i;return function(t){return ee(r+o*t,n+s*t,i+l*t)+\\\"\\\"}},a.interpolateRound=Fr,a.transform=function(t){var e=l.createElementNS(a.ns.prefix.svg,\\\"g\\\");return(a.transform=function(t){if(null!=t){e.setAttribute(\\\"transform\\\",t);var r=e.transform.baseVal.consolidate()}return new Br(r?r.matrix:Ur)})(t)},Br.prototype.toString=function(){return\\\"translate(\\\"+this.translate+\\\")rotate(\\\"+this.rotate+\\\")skewX(\\\"+this.skew+\\\")scale(\\\"+this.scale+\\\")\\\"};var Ur={a:1,b:0,c:0,d:1,e:0,f:0};function Vr(t){return t.length?t.pop()+\\\",\\\":\\\"\\\"}function Hr(t,e){var r=[],n=[];return t=a.transform(t),e=a.transform(e),function(t,e,r,n){if(t[0]!==e[0]||t[1]!==e[1]){var i=r.push(\\\"translate(\\\",null,\\\",\\\",null,\\\")\\\");n.push({i:i-4,x:xr(t[0],e[0])},{i:i-2,x:xr(t[1],e[1])})}else(e[0]||e[1])&&r.push(\\\"translate(\\\"+e+\\\")\\\")}(t.translate,e.translate,r,n),function(t,e,r,n){t!==e?(t-e>180?e+=360:e-t>180&&(t+=360),n.push({i:r.push(Vr(r)+\\\"rotate(\\\",null,\\\")\\\")-2,x:xr(t,e)})):e&&r.push(Vr(r)+\\\"rotate(\\\"+e+\\\")\\\")}(t.rotate,e.rotate,r,n),function(t,e,r,n){t!==e?n.push({i:r.push(Vr(r)+\\\"skewX(\\\",null,\\\")\\\")-2,x:xr(t,e)}):e&&r.push(Vr(r)+\\\"skewX(\\\"+e+\\\")\\\")}(t.skew,e.skew,r,n),function(t,e,r,n){if(t[0]!==e[0]||t[1]!==e[1]){var i=r.push(Vr(r)+\\\"scale(\\\",null,\\\",\\\",null,\\\")\\\");n.push({i:i-4,x:xr(t[0],e[0])},{i:i-2,x:xr(t[1],e[1])})}else 1===e[0]&&1===e[1]||r.push(Vr(r)+\\\"scale(\\\"+e+\\\")\\\")}(t.scale,e.scale,r,n),t=e=null,function(t){for(var e,i=-1,a=n.length;++i<a;)r[(e=n[i]).i]=e.x(t);return r.join(\\\"\\\")}}function qr(t,e){return e=(e-=t=+t)||1/e,function(r){return(r-t)/e}}function Gr(t,e){return e=(e-=t=+t)||1/e,function(r){return Math.max(0,Math.min(1,(r-t)/e))}}function Zr(t){for(var e=t.source,r=t.target,n=function(t,e){if(t===e)return t;for(var r=Yr(t),n=Yr(e),i=r.pop(),a=n.pop(),o=null;i===a;)o=i,i=r.pop(),a=n.pop();return o}(e,r),i=[e];e!==n;)e=e.parent,i.push(e);for(var a=i.length;r!==n;)i.splice(a,0,r),r=r.parent;return i}function Yr(t){for(var e=[],r=t.parent;null!=r;)e.push(t),t=r,r=r.parent;return e.push(t),e}function Wr(t){t.fixed|=2}function Xr(t){t.fixed&=-7}function Jr(t){t.fixed|=4,t.px=t.x,t.py=t.y}function Kr(t){t.fixed&=-5}function $r(t,e,r){var n=0,i=0;if(t.charge=0,!t.leaf)for(var a,o=t.nodes,s=o.length,l=-1;++l<s;)null!=(a=o[l])&&($r(a,e,r),t.charge+=a.charge,n+=a.charge*a.cx,i+=a.charge*a.cy);if(t.point){t.leaf||(t.point.x+=Math.random()-.5,t.point.y+=Math.random()-.5);var u=e*r[t.point.index];t.charge+=t.pointCharge=u,n+=u*t.point.x,i+=u*t.point.y}t.cx=n/t.charge,t.cy=i/t.charge}a.interpolateTransform=Hr,a.layout={},a.layout.bundle=function(){return function(t){for(var e=[],r=-1,n=t.length;++r<n;)e.push(Zr(t[r]));return e}},a.layout.chord=function(){var t,e,r,n,i,o,s,l={},u=0;function c(){var l,c,h,p,d,v={},g=[],y=a.range(n),m=[];for(t=[],e=[],l=0,p=-1;++p<n;){for(c=0,d=-1;++d<n;)c+=r[p][d];g.push(c),m.push(a.range(n)),l+=c}for(i&&y.sort((function(t,e){return i(g[t],g[e])})),o&&m.forEach((function(t,e){t.sort((function(t,n){return o(r[e][t],r[e][n])}))})),l=(Pt-u*n)/l,c=0,p=-1;++p<n;){for(h=c,d=-1;++d<n;){var x=y[p],b=m[x][d],_=r[x][b],w=c,T=c+=_*l;v[x+\\\"-\\\"+b]={index:x,subindex:b,startAngle:w,endAngle:T,value:_}}e[x]={index:x,startAngle:h,endAngle:c,value:g[x]},c+=u}for(p=-1;++p<n;)for(d=p-1;++d<n;){var k=v[p+\\\"-\\\"+d],A=v[d+\\\"-\\\"+p];(k.value||A.value)&&t.push(k.value<A.value?{source:A,target:k}:{source:k,target:A})}s&&f()}function f(){t.sort((function(t,e){return s((t.source.value+t.target.value)/2,(e.source.value+e.target.value)/2)}))}return l.matrix=function(i){return arguments.length?(n=(r=i)&&r.length,t=e=null,l):r},l.padding=function(r){return arguments.length?(u=r,t=e=null,l):u},l.sortGroups=function(r){return arguments.length?(i=r,t=e=null,l):i},l.sortSubgroups=function(e){return arguments.length?(o=e,t=null,l):o},l.sortChords=function(e){return arguments.length?(s=e,t&&f(),l):s},l.chords=function(){return t||c(),t},l.groups=function(){return e||c(),e},l},a.layout.force=function(){var t,e,r,n,i,o,s={},l=a.dispatch(\\\"start\\\",\\\"tick\\\",\\\"end\\\"),u=[1,1],c=.9,f=Qr,h=tn,p=-30,d=en,v=.1,g=.64,y=[],m=[];function x(t){return function(e,r,n,i){if(e.point!==t){var a=e.cx-t.x,o=e.cy-t.y,s=i-r,l=a*a+o*o;if(s*s/g<l){if(l<d){var u=e.charge/l;t.px-=a*u,t.py-=o*u}return!0}e.point&&l&&l<d&&(u=e.pointCharge/l,t.px-=a*u,t.py-=o*u)}return!e.charge}}function b(t){t.px=a.event.x,t.py=a.event.y,s.resume()}return s.tick=function(){if((r*=.99)<.005)return t=null,l.end({type:\\\"end\\\",alpha:r=0}),!0;var e,s,f,h,d,g,b,_,w,T=y.length,k=m.length;for(s=0;s<k;++s)h=(f=m[s]).source,(g=(_=(d=f.target).x-h.x)*_+(w=d.y-h.y)*w)&&(_*=g=r*i[s]*((g=Math.sqrt(g))-n[s])/g,w*=g,d.x-=_*(b=h.weight+d.weight?h.weight/(h.weight+d.weight):.5),d.y-=w*b,h.x+=_*(b=1-b),h.y+=w*b);if((b=r*v)&&(_=u[0]/2,w=u[1]/2,s=-1,b))for(;++s<T;)(f=y[s]).x+=(_-f.x)*b,f.y+=(w-f.y)*b;if(p)for($r(e=a.geom.quadtree(y),r,o),s=-1;++s<T;)(f=y[s]).fixed||e.visit(x(f));for(s=-1;++s<T;)(f=y[s]).fixed?(f.x=f.px,f.y=f.py):(f.x-=(f.px-(f.px=f.x))*c,f.y-=(f.py-(f.py=f.y))*c);l.tick({type:\\\"tick\\\",alpha:r})},s.nodes=function(t){return arguments.length?(y=t,s):y},s.links=function(t){return arguments.length?(m=t,s):m},s.size=function(t){return arguments.length?(u=t,s):u},s.linkDistance=function(t){return arguments.length?(f=\\\"function\\\"==typeof t?t:+t,s):f},s.distance=s.linkDistance,s.linkStrength=function(t){return arguments.length?(h=\\\"function\\\"==typeof t?t:+t,s):h},s.friction=function(t){return arguments.length?(c=+t,s):c},s.charge=function(t){return arguments.length?(p=\\\"function\\\"==typeof t?t:+t,s):p},s.chargeDistance=function(t){return arguments.length?(d=t*t,s):Math.sqrt(d)},s.gravity=function(t){return arguments.length?(v=+t,s):v},s.theta=function(t){return arguments.length?(g=t*t,s):Math.sqrt(g)},s.alpha=function(e){return arguments.length?(e=+e,r?e>0?r=e:(t.c=null,t.t=NaN,t=null,l.end({type:\\\"end\\\",alpha:r=0})):e>0&&(l.start({type:\\\"start\\\",alpha:r=e}),t=ke(s.tick)),s):r},s.start=function(){var t,e,r,a=y.length,l=m.length,c=u[0],d=u[1];for(t=0;t<a;++t)(r=y[t]).index=t,r.weight=0;for(t=0;t<l;++t)\\\"number\\\"==typeof(r=m[t]).source&&(r.source=y[r.source]),\\\"number\\\"==typeof r.target&&(r.target=y[r.target]),++r.source.weight,++r.target.weight;for(t=0;t<a;++t)r=y[t],isNaN(r.x)&&(r.x=v(\\\"x\\\",c)),isNaN(r.y)&&(r.y=v(\\\"y\\\",d)),isNaN(r.px)&&(r.px=r.x),isNaN(r.py)&&(r.py=r.y);if(n=[],\\\"function\\\"==typeof f)for(t=0;t<l;++t)n[t]=+f.call(this,m[t],t);else for(t=0;t<l;++t)n[t]=f;if(i=[],\\\"function\\\"==typeof h)for(t=0;t<l;++t)i[t]=+h.call(this,m[t],t);else for(t=0;t<l;++t)i[t]=h;if(o=[],\\\"function\\\"==typeof p)for(t=0;t<a;++t)o[t]=+p.call(this,y[t],t);else for(t=0;t<a;++t)o[t]=p;function v(r,n){if(!e){for(e=new Array(a),u=0;u<a;++u)e[u]=[];for(u=0;u<l;++u){var i=m[u];e[i.source.index].push(i.target),e[i.target.index].push(i.source)}}for(var o,s=e[t],u=-1,c=s.length;++u<c;)if(!isNaN(o=s[u][r]))return o;return Math.random()*n}return s.resume()},s.resume=function(){return s.alpha(.1)},s.stop=function(){return s.alpha(0)},s.drag=function(){if(e||(e=a.behavior.drag().origin(z).on(\\\"dragstart.force\\\",Wr).on(\\\"drag.force\\\",b).on(\\\"dragend.force\\\",Xr)),!arguments.length)return e;this.on(\\\"mouseover.force\\\",Jr).on(\\\"mouseout.force\\\",Kr).call(e)},a.rebind(s,l,\\\"on\\\")};var Qr=20,tn=1,en=1/0;function rn(t,e){return a.rebind(t,e,\\\"sort\\\",\\\"children\\\",\\\"value\\\"),t.nodes=t,t.links=un,t}function nn(t,e){for(var r=[t];null!=(t=r.pop());)if(e(t),(i=t.children)&&(n=i.length))for(var n,i;--n>=0;)r.push(i[n])}function an(t,e){for(var r=[t],n=[];null!=(t=r.pop());)if(n.push(t),(a=t.children)&&(i=a.length))for(var i,a,o=-1;++o<i;)r.push(a[o]);for(;null!=(t=n.pop());)e(t)}function on(t){return t.children}function sn(t){return t.value}function ln(t,e){return e.value-t.value}function un(t){return a.merge(t.map((function(t){return(t.children||[]).map((function(e){return{source:t,target:e}}))})))}a.layout.hierarchy=function(){var t=ln,e=on,r=sn;function n(i){var a,o=[i],s=[];for(i.depth=0;null!=(a=o.pop());)if(s.push(a),(u=e.call(n,a,a.depth))&&(l=u.length)){for(var l,u,c;--l>=0;)o.push(c=u[l]),c.parent=a,c.depth=a.depth+1;r&&(a.value=0),a.children=u}else r&&(a.value=+r.call(n,a,a.depth)||0),delete a.children;return an(i,(function(e){var n,i;t&&(n=e.children)&&n.sort(t),r&&(i=e.parent)&&(i.value+=e.value)})),s}return n.sort=function(e){return arguments.length?(t=e,n):t},n.children=function(t){return arguments.length?(e=t,n):e},n.value=function(t){return arguments.length?(r=t,n):r},n.revalue=function(t){return r&&(nn(t,(function(t){t.children&&(t.value=0)})),an(t,(function(t){var e;t.children||(t.value=+r.call(n,t,t.depth)||0),(e=t.parent)&&(e.value+=t.value)}))),t},n},a.layout.partition=function(){var t=a.layout.hierarchy(),e=[1,1];function r(t,e,n,i){var a=t.children;if(t.x=e,t.y=t.depth*i,t.dx=n,t.dy=i,a&&(o=a.length)){var o,s,l,u=-1;for(n=t.value?n/t.value:0;++u<o;)r(s=a[u],e,l=s.value*n,i),e+=l}}function n(t){var e=t.children,r=0;if(e&&(i=e.length))for(var i,a=-1;++a<i;)r=Math.max(r,n(e[a]));return 1+r}function i(i,a){var o=t.call(this,i,a);return r(o[0],0,e[0],e[1]/n(o[0])),o}return i.size=function(t){return arguments.length?(e=t,i):e},rn(i,t)},a.layout.pie=function(){var t=Number,e=cn,r=0,n=Pt,i=0;function o(s){var l,u=s.length,c=s.map((function(e,r){return+t.call(o,e,r)})),f=+(\\\"function\\\"==typeof r?r.apply(this,arguments):r),h=(\\\"function\\\"==typeof n?n.apply(this,arguments):n)-f,p=Math.min(Math.abs(h)/u,+(\\\"function\\\"==typeof i?i.apply(this,arguments):i)),d=p*(h<0?-1:1),v=a.sum(c),g=v?(h-u*d)/v:0,y=a.range(u),m=[];return null!=e&&y.sort(e===cn?function(t,e){return c[e]-c[t]}:function(t,r){return e(s[t],s[r])}),y.forEach((function(t){m[t]={data:s[t],value:l=c[t],startAngle:f,endAngle:f+=l*g+d,padAngle:p}})),m}return o.value=function(e){return arguments.length?(t=e,o):t},o.sort=function(t){return arguments.length?(e=t,o):e},o.startAngle=function(t){return arguments.length?(r=t,o):r},o.endAngle=function(t){return arguments.length?(n=t,o):n},o.padAngle=function(t){return arguments.length?(i=t,o):i},o};var cn={};function fn(t){return t.x}function hn(t){return t.y}function pn(t,e,r){t.y0=e,t.y=r}a.layout.stack=function(){var t=z,e=gn,r=yn,n=pn,i=fn,o=hn;function s(l,u){if(!(p=l.length))return l;var c=l.map((function(e,r){return t.call(s,e,r)})),f=c.map((function(t){return t.map((function(t,e){return[i.call(s,t,e),o.call(s,t,e)]}))})),h=e.call(s,f,u);c=a.permute(c,h),f=a.permute(f,h);var p,d,v,g,y=r.call(s,f,u),m=c[0].length;for(v=0;v<m;++v)for(n.call(s,c[0][v],g=y[v],f[0][v][1]),d=1;d<p;++d)n.call(s,c[d][v],g+=f[d-1][v][1],f[d][v][1]);return l}return s.values=function(e){return arguments.length?(t=e,s):t},s.order=function(t){return arguments.length?(e=\\\"function\\\"==typeof t?t:dn.get(t)||gn,s):e},s.offset=function(t){return arguments.length?(r=\\\"function\\\"==typeof t?t:vn.get(t)||yn,s):r},s.x=function(t){return arguments.length?(i=t,s):i},s.y=function(t){return arguments.length?(o=t,s):o},s.out=function(t){return arguments.length?(n=t,s):n},s};var dn=a.map({\\\"inside-out\\\":function(t){var e,r,n=t.length,i=t.map(mn),o=t.map(xn),s=a.range(n).sort((function(t,e){return i[t]-i[e]})),l=0,u=0,c=[],f=[];for(e=0;e<n;++e)r=s[e],l<u?(l+=o[r],c.push(r)):(u+=o[r],f.push(r));return f.reverse().concat(c)},reverse:function(t){return a.range(t.length).reverse()},default:gn}),vn=a.map({silhouette:function(t){var e,r,n,i=t.length,a=t[0].length,o=[],s=0,l=[];for(r=0;r<a;++r){for(e=0,n=0;e<i;e++)n+=t[e][r][1];n>s&&(s=n),o.push(n)}for(r=0;r<a;++r)l[r]=(s-o[r])/2;return l},wiggle:function(t){var e,r,n,i,a,o,s,l,u,c=t.length,f=t[0],h=f.length,p=[];for(p[0]=l=u=0,r=1;r<h;++r){for(e=0,i=0;e<c;++e)i+=t[e][r][1];for(e=0,a=0,s=f[r][0]-f[r-1][0];e<c;++e){for(n=0,o=(t[e][r][1]-t[e][r-1][1])/(2*s);n<e;++n)o+=(t[n][r][1]-t[n][r-1][1])/s;a+=o*t[e][r][1]}p[r]=l-=i?a/i*s:0,l<u&&(u=l)}for(r=0;r<h;++r)p[r]-=u;return p},expand:function(t){var e,r,n,i=t.length,a=t[0].length,o=1/i,s=[];for(r=0;r<a;++r){for(e=0,n=0;e<i;e++)n+=t[e][r][1];if(n)for(e=0;e<i;e++)t[e][r][1]/=n;else for(e=0;e<i;e++)t[e][r][1]=o}for(r=0;r<a;++r)s[r]=0;return s},zero:yn});function gn(t){return a.range(t.length)}function yn(t){for(var e=-1,r=t[0].length,n=[];++e<r;)n[e]=0;return n}function mn(t){for(var e,r=1,n=0,i=t[0][1],a=t.length;r<a;++r)(e=t[r][1])>i&&(n=r,i=e);return n}function xn(t){return t.reduce(bn,0)}function bn(t,e){return t+e[1]}function _n(t,e){return wn(t,Math.ceil(Math.log(e.length)/Math.LN2+1))}function wn(t,e){for(var r=-1,n=+t[0],i=(t[1]-n)/e,a=[];++r<=e;)a[r]=i*r+n;return a}function Tn(t){return[a.min(t),a.max(t)]}function kn(t,e){return t.value-e.value}function An(t,e){var r=t._pack_next;t._pack_next=e,e._pack_prev=t,e._pack_next=r,r._pack_prev=e}function Mn(t,e){t._pack_next=e,e._pack_prev=t}function Sn(t,e){var r=e.x-t.x,n=e.y-t.y,i=t.r+e.r;return.999*i*i>r*r+n*n}function En(t){if((e=t.children)&&(l=e.length)){var e,r,n,i,a,o,s,l,u=1/0,c=-1/0,f=1/0,h=-1/0;if(e.forEach(Ln),(r=e[0]).x=-r.r,r.y=0,x(r),l>1&&((n=e[1]).x=n.r,n.y=0,x(n),l>2))for(On(r,n,i=e[2]),x(i),An(r,i),r._pack_prev=i,An(i,n),n=r._pack_next,a=3;a<l;a++){On(r,n,i=e[a]);var p=0,d=1,v=1;for(o=n._pack_next;o!==n;o=o._pack_next,d++)if(Sn(o,i)){p=1;break}if(1==p)for(s=r._pack_prev;s!==o._pack_prev&&!Sn(s,i);s=s._pack_prev,v++);p?(d<v||d==v&&n.r<r.r?Mn(r,n=o):Mn(r=s,n),a--):(An(r,i),n=i,x(i))}var g=(u+c)/2,y=(f+h)/2,m=0;for(a=0;a<l;a++)(i=e[a]).x-=g,i.y-=y,m=Math.max(m,i.r+Math.sqrt(i.x*i.x+i.y*i.y));t.r=m,e.forEach(Cn)}function x(t){u=Math.min(t.x-t.r,u),c=Math.max(t.x+t.r,c),f=Math.min(t.y-t.r,f),h=Math.max(t.y+t.r,h)}}function Ln(t){t._pack_next=t._pack_prev=t}function Cn(t){delete t._pack_next,delete t._pack_prev}function Pn(t,e,r,n){var i=t.children;if(t.x=e+=n*t.x,t.y=r+=n*t.y,t.r*=n,i)for(var a=-1,o=i.length;++a<o;)Pn(i[a],e,r,n)}function On(t,e,r){var n=t.r+r.r,i=e.x-t.x,a=e.y-t.y;if(n&&(i||a)){var o=e.r+r.r,s=i*i+a*a,l=.5+((n*=n)-(o*=o))/(2*s),u=Math.sqrt(Math.max(0,2*o*(n+s)-(n-=s)*n-o*o))/(2*s);r.x=t.x+l*i+u*a,r.y=t.y+l*a-u*i}else r.x=t.x+n,r.y=t.y}function In(t,e){return t.parent==e.parent?1:2}function Dn(t){var e=t.children;return e.length?e[0]:t.t}function zn(t){var e,r=t.children;return(e=r.length)?r[e-1]:t.t}function Rn(t,e,r){var n=r/(e.i-t.i);e.c-=n,e.s+=r,t.c+=n,e.z+=r,e.m+=r}function Fn(t,e,r){return t.a.parent===e.parent?t.a:r}function Bn(t){var e=t.children;return e&&e.length?Bn(e[0]):t}function Nn(t){var e,r=t.children;return r&&(e=r.length)?Nn(r[e-1]):t}function jn(t){return{x:t.x,y:t.y,dx:t.dx,dy:t.dy}}function Un(t,e){var r=t.x+e[3],n=t.y+e[0],i=t.dx-e[1]-e[3],a=t.dy-e[0]-e[2];return i<0&&(r+=i/2,i=0),a<0&&(n+=a/2,a=0),{x:r,y:n,dx:i,dy:a}}function Vn(t){var e=t[0],r=t[t.length-1];return e<r?[e,r]:[r,e]}function Hn(t){return t.rangeExtent?t.rangeExtent():Vn(t.range())}function qn(t,e,r,n){var i=r(t[0],t[1]),a=n(e[0],e[1]);return function(t){return a(i(t))}}function Gn(t,e){var r,n=0,i=t.length-1,a=t[n],o=t[i];return o<a&&(r=n,n=i,i=r,r=a,a=o,o=r),t[n]=e.floor(a),t[i]=e.ceil(o),t}function Zn(t){return t?{floor:function(e){return Math.floor(e/t)*t},ceil:function(e){return Math.ceil(e/t)*t}}:Yn}a.layout.histogram=function(){var t=!0,e=Number,r=Tn,n=_n;function i(i,o){for(var s,l,u=[],c=i.map(e,this),f=r.call(this,c,o),h=n.call(this,f,c,o),p=(o=-1,c.length),d=h.length-1,v=t?1:1/p;++o<d;)(s=u[o]=[]).dx=h[o+1]-(s.x=h[o]),s.y=0;if(d>0)for(o=-1;++o<p;)(l=c[o])>=f[0]&&l<=f[1]&&((s=u[a.bisect(h,l,1,d)-1]).y+=v,s.push(i[o]));return u}return i.value=function(t){return arguments.length?(e=t,i):e},i.range=function(t){return arguments.length?(r=ge(t),i):r},i.bins=function(t){return arguments.length?(n=\\\"number\\\"==typeof t?function(e){return wn(e,t)}:ge(t),i):n},i.frequency=function(e){return arguments.length?(t=!!e,i):t},i},a.layout.pack=function(){var t,e=a.layout.hierarchy().sort(kn),r=0,n=[1,1];function i(i,a){var o=e.call(this,i,a),s=o[0],l=n[0],u=n[1],c=null==t?Math.sqrt:\\\"function\\\"==typeof t?t:function(){return t};if(s.x=s.y=0,an(s,(function(t){t.r=+c(t.value)})),an(s,En),r){var f=r*(t?1:Math.max(2*s.r/l,2*s.r/u))/2;an(s,(function(t){t.r+=f})),an(s,En),an(s,(function(t){t.r-=f}))}return Pn(s,l/2,u/2,t?1:1/Math.max(2*s.r/l,2*s.r/u)),o}return i.size=function(t){return arguments.length?(n=t,i):n},i.radius=function(e){return arguments.length?(t=null==e||\\\"function\\\"==typeof e?e:+e,i):t},i.padding=function(t){return arguments.length?(r=+t,i):r},rn(i,e)},a.layout.tree=function(){var t=a.layout.hierarchy().sort(null).value(null),e=In,r=[1,1],n=null;function i(i,a){var u=t.call(this,i,a),c=u[0],f=function(t){for(var e,r={A:null,children:[t]},n=[r];null!=(e=n.pop());)for(var i,a=e.children,o=0,s=a.length;o<s;++o)n.push((a[o]=i={_:a[o],parent:e,children:(i=a[o].children)&&i.slice()||[],A:null,a:null,z:0,m:0,c:0,s:0,t:null,i:o}).a=i);return r.children[0]}(c);if(an(f,o),f.parent.m=-f.z,nn(f,s),n)nn(c,l);else{var h=c,p=c,d=c;nn(c,(function(t){t.x<h.x&&(h=t),t.x>p.x&&(p=t),t.depth>d.depth&&(d=t)}));var v=e(h,p)/2-h.x,g=r[0]/(p.x+e(p,h)/2+v),y=r[1]/(d.depth||1);nn(c,(function(t){t.x=(t.x+v)*g,t.y=t.depth*y}))}return u}function o(t){var r=t.children,n=t.parent.children,i=t.i?n[t.i-1]:null;if(r.length){!function(t){for(var e,r=0,n=0,i=t.children,a=i.length;--a>=0;)(e=i[a]).z+=r,e.m+=r,r+=e.s+(n+=e.c)}(t);var a=(r[0].z+r[r.length-1].z)/2;i?(t.z=i.z+e(t._,i._),t.m=t.z-a):t.z=a}else i&&(t.z=i.z+e(t._,i._));t.parent.A=function(t,r,n){if(r){for(var i,a=t,o=t,s=r,l=a.parent.children[0],u=a.m,c=o.m,f=s.m,h=l.m;s=zn(s),a=Dn(a),s&&a;)l=Dn(l),(o=zn(o)).a=t,(i=s.z+f-a.z-u+e(s._,a._))>0&&(Rn(Fn(s,t,n),t,i),u+=i,c+=i),f+=s.m,u+=a.m,h+=l.m,c+=o.m;s&&!zn(o)&&(o.t=s,o.m+=f-c),a&&!Dn(l)&&(l.t=a,l.m+=u-h,n=t)}return n}(t,i,t.parent.A||n[0])}function s(t){t._.x=t.z+t.parent.m,t.m+=t.parent.m}function l(t){t.x*=r[0],t.y=t.depth*r[1]}return i.separation=function(t){return arguments.length?(e=t,i):e},i.size=function(t){return arguments.length?(n=null==(r=t)?l:null,i):n?null:r},i.nodeSize=function(t){return arguments.length?(n=null==(r=t)?null:l,i):n?r:null},rn(i,t)},a.layout.cluster=function(){var t=a.layout.hierarchy().sort(null).value(null),e=In,r=[1,1],n=!1;function i(i,o){var s,l=t.call(this,i,o),u=l[0],c=0;an(u,(function(t){var r=t.children;r&&r.length?(t.x=function(t){return t.reduce((function(t,e){return t+e.x}),0)/t.length}(r),t.y=function(t){return 1+a.max(t,(function(t){return t.y}))}(r)):(t.x=s?c+=e(t,s):0,t.y=0,s=t)}));var f=Bn(u),h=Nn(u),p=f.x-e(f,h)/2,d=h.x+e(h,f)/2;return an(u,n?function(t){t.x=(t.x-u.x)*r[0],t.y=(u.y-t.y)*r[1]}:function(t){t.x=(t.x-p)/(d-p)*r[0],t.y=(1-(u.y?t.y/u.y:1))*r[1]}),l}return i.separation=function(t){return arguments.length?(e=t,i):e},i.size=function(t){return arguments.length?(n=null==(r=t),i):n?null:r},i.nodeSize=function(t){return arguments.length?(n=null!=(r=t),i):n?r:null},rn(i,t)},a.layout.treemap=function(){var t,e=a.layout.hierarchy(),r=Math.round,n=[1,1],i=null,o=jn,s=!1,l=\\\"squarify\\\",u=.5*(1+Math.sqrt(5));function c(t,e){for(var r,n,i=-1,a=t.length;++i<a;)n=(r=t[i]).value*(e<0?0:e),r.area=isNaN(n)||n<=0?0:n}function f(t){var e=t.children;if(e&&e.length){var r,n,i,a=o(t),s=[],u=e.slice(),h=1/0,v=\\\"slice\\\"===l?a.dx:\\\"dice\\\"===l?a.dy:\\\"slice-dice\\\"===l?1&t.depth?a.dy:a.dx:Math.min(a.dx,a.dy);for(c(u,a.dx*a.dy/t.value),s.area=0;(i=u.length)>0;)s.push(r=u[i-1]),s.area+=r.area,\\\"squarify\\\"!==l||(n=p(s,v))<=h?(u.pop(),h=n):(s.area-=s.pop().area,d(s,v,a,!1),v=Math.min(a.dx,a.dy),s.length=s.area=0,h=1/0);s.length&&(d(s,v,a,!0),s.length=s.area=0),e.forEach(f)}}function h(t){var e=t.children;if(e&&e.length){var r,n=o(t),i=e.slice(),a=[];for(c(i,n.dx*n.dy/t.value),a.area=0;r=i.pop();)a.push(r),a.area+=r.area,null!=r.z&&(d(a,r.z?n.dx:n.dy,n,!i.length),a.length=a.area=0);e.forEach(h)}}function p(t,e){for(var r,n=t.area,i=0,a=1/0,o=-1,s=t.length;++o<s;)(r=t[o].area)&&(r<a&&(a=r),r>i&&(i=r));return e*=e,(n*=n)?Math.max(e*i*u/n,n/(e*a*u)):1/0}function d(t,e,n,i){var a,o=-1,s=t.length,l=n.x,u=n.y,c=e?r(t.area/e):0;if(e==n.dx){for((i||c>n.dy)&&(c=n.dy);++o<s;)(a=t[o]).x=l,a.y=u,a.dy=c,l+=a.dx=Math.min(n.x+n.dx-l,c?r(a.area/c):0);a.z=!0,a.dx+=n.x+n.dx-l,n.y+=c,n.dy-=c}else{for((i||c>n.dx)&&(c=n.dx);++o<s;)(a=t[o]).x=l,a.y=u,a.dx=c,u+=a.dy=Math.min(n.y+n.dy-u,c?r(a.area/c):0);a.z=!1,a.dy+=n.y+n.dy-u,n.x+=c,n.dx-=c}}function v(r){var i=t||e(r),a=i[0];return a.x=a.y=0,a.value?(a.dx=n[0],a.dy=n[1]):a.dx=a.dy=0,t&&e.revalue(a),c([a],a.dx*a.dy/a.value),(t?h:f)(a),s&&(t=i),i}return v.size=function(t){return arguments.length?(n=t,v):n},v.padding=function(t){if(!arguments.length)return i;function e(e){return Un(e,t)}var r;return o=null==(i=t)?jn:\\\"function\\\"==(r=typeof t)?function(e){var r=t.call(v,e,e.depth);return null==r?jn(e):Un(e,\\\"number\\\"==typeof r?[r,r,r,r]:r)}:\\\"number\\\"===r?(t=[t,t,t,t],e):e,v},v.round=function(t){return arguments.length?(r=t?Math.round:Number,v):r!=Number},v.sticky=function(e){return arguments.length?(s=e,t=null,v):s},v.ratio=function(t){return arguments.length?(u=t,v):u},v.mode=function(t){return arguments.length?(l=t+\\\"\\\",v):l},rn(v,e)},a.random={normal:function(t,e){var r=arguments.length;return r<2&&(e=1),r<1&&(t=0),function(){var r,n,i;do{i=(r=2*Math.random()-1)*r+(n=2*Math.random()-1)*n}while(!i||i>1);return t+e*r*Math.sqrt(-2*Math.log(i)/i)}},logNormal:function(){var t=a.random.normal.apply(a,arguments);return function(){return Math.exp(t())}},bates:function(t){var e=a.random.irwinHall(t);return function(){return e()/t}},irwinHall:function(t){return function(){for(var e=0,r=0;r<t;r++)e+=Math.random();return e}}},a.scale={};var Yn={floor:z,ceil:z};function Wn(t,e,r,n){var i=[],o=[],s=0,l=Math.min(t.length,e.length)-1;for(t[l]<t[0]&&(t=t.slice().reverse(),e=e.slice().reverse());++s<=l;)i.push(r(t[s-1],t[s])),o.push(n(e[s-1],e[s]));return function(e){var r=a.bisect(t,e,1,l)-1;return o[r](i[r](e))}}function Xn(t,e,r,n){var i,a;function o(){var o=Math.min(t.length,e.length)>2?Wn:qn,l=n?Gr:qr;return i=o(t,e,l,r),a=o(e,t,l,Tr),s}function s(t){return i(t)}return s.invert=function(t){return a(t)},s.domain=function(e){return arguments.length?(t=e.map(Number),o()):t},s.range=function(t){return arguments.length?(e=t,o()):e},s.rangeRound=function(t){return s.range(t).interpolate(Fr)},s.clamp=function(t){return arguments.length?(n=t,o()):n},s.interpolate=function(t){return arguments.length?(r=t,o()):r},s.ticks=function(e){return Qn(t,e)},s.tickFormat=function(e,r){return d3_scale_linearTickFormat(t,e,r)},s.nice=function(e){return Kn(t,e),o()},s.copy=function(){return Xn(t,e,r,n)},o()}function Jn(t,e){return a.rebind(t,e,\\\"range\\\",\\\"rangeRound\\\",\\\"interpolate\\\",\\\"clamp\\\")}function Kn(t,e){return Gn(t,Zn($n(t,e)[2])),Gn(t,Zn($n(t,e)[2])),t}function $n(t,e){null==e&&(e=10);var r=Vn(t),n=r[1]-r[0],i=Math.pow(10,Math.floor(Math.log(n/e)/Math.LN10)),a=e/n*i;return a<=.15?i*=10:a<=.35?i*=5:a<=.75&&(i*=2),r[0]=Math.ceil(r[0]/i)*i,r[1]=Math.floor(r[1]/i)*i+.5*i,r[2]=i,r}function Qn(t,e){return a.range.apply(a,$n(t,e))}function ti(t,e,r,n){function i(t){return(r?Math.log(t<0?0:t):-Math.log(t>0?0:-t))/Math.log(e)}function a(t){return r?Math.pow(e,t):-Math.pow(e,-t)}function o(e){return t(i(e))}return o.invert=function(e){return a(t.invert(e))},o.domain=function(e){return arguments.length?(r=e[0]>=0,t.domain((n=e.map(Number)).map(i)),o):n},o.base=function(r){return arguments.length?(e=+r,t.domain(n.map(i)),o):e},o.nice=function(){var e=Gn(n.map(i),r?Math:ei);return t.domain(e),n=e.map(a),o},o.ticks=function(){var t=Vn(n),o=[],s=t[0],l=t[1],u=Math.floor(i(s)),c=Math.ceil(i(l)),f=e%1?2:e;if(isFinite(c-u)){if(r){for(;u<c;u++)for(var h=1;h<f;h++)o.push(a(u)*h);o.push(a(u))}else for(o.push(a(u));u++<c;)for(h=f-1;h>0;h--)o.push(a(u)*h);for(u=0;o[u]<s;u++);for(c=o.length;o[c-1]>l;c--);o=o.slice(u,c)}return o},o.copy=function(){return ti(t.copy(),e,r,n)},Jn(o,t)}a.scale.linear=function(){return Xn([0,1],[0,1],Tr,!1)},a.scale.log=function(){return ti(a.scale.linear().domain([0,1]),10,!0,[1,10])};var ei={floor:function(t){return-Math.ceil(-t)},ceil:function(t){return-Math.floor(-t)}};function ri(t,e,r){var n=ni(e),i=ni(1/e);function a(e){return t(n(e))}return a.invert=function(e){return i(t.invert(e))},a.domain=function(e){return arguments.length?(t.domain((r=e.map(Number)).map(n)),a):r},a.ticks=function(t){return Qn(r,t)},a.tickFormat=function(t,e){return d3_scale_linearTickFormat(r,t,e)},a.nice=function(t){return a.domain(Kn(r,t))},a.exponent=function(o){return arguments.length?(n=ni(e=o),i=ni(1/e),t.domain(r.map(n)),a):e},a.copy=function(){return ri(t.copy(),e,r)},Jn(a,t)}function ni(t){return function(e){return e<0?-Math.pow(-e,t):Math.pow(e,t)}}function ii(t,e){var r,n,i;function o(i){return n[((r.get(i)||(\\\"range\\\"===e.t?r.set(i,t.push(i)):NaN))-1)%n.length]}function s(e,r){return a.range(t.length).map((function(t){return e+r*t}))}return o.domain=function(n){if(!arguments.length)return t;t=[],r=new k;for(var i,a=-1,s=n.length;++a<s;)r.has(i=n[a])||r.set(i,t.push(i));return o[e.t].apply(o,e.a)},o.range=function(t){return arguments.length?(n=t,i=0,e={t:\\\"range\\\",a:arguments},o):n},o.rangePoints=function(r,a){arguments.length<2&&(a=0);var l=r[0],u=r[1],c=t.length<2?(l=(l+u)/2,0):(u-l)/(t.length-1+a);return n=s(l+c*a/2,c),i=0,e={t:\\\"rangePoints\\\",a:arguments},o},o.rangeRoundPoints=function(r,a){arguments.length<2&&(a=0);var l=r[0],u=r[1],c=t.length<2?(l=u=Math.round((l+u)/2),0):(u-l)/(t.length-1+a)|0;return n=s(l+Math.round(c*a/2+(u-l-(t.length-1+a)*c)/2),c),i=0,e={t:\\\"rangeRoundPoints\\\",a:arguments},o},o.rangeBands=function(r,a,l){arguments.length<2&&(a=0),arguments.length<3&&(l=a);var u=r[1]<r[0],c=r[u-0],f=(r[1-u]-c)/(t.length-a+2*l);return n=s(c+f*l,f),u&&n.reverse(),i=f*(1-a),e={t:\\\"rangeBands\\\",a:arguments},o},o.rangeRoundBands=function(r,a,l){arguments.length<2&&(a=0),arguments.length<3&&(l=a);var u=r[1]<r[0],c=r[u-0],f=r[1-u],h=Math.floor((f-c)/(t.length-a+2*l));return n=s(c+Math.round((f-c-(t.length-a)*h)/2),h),u&&n.reverse(),i=Math.round(h*(1-a)),e={t:\\\"rangeRoundBands\\\",a:arguments},o},o.rangeBand=function(){return i},o.rangeExtent=function(){return Vn(e.a[0])},o.copy=function(){return ii(t,e)},o.domain(t)}a.scale.pow=function(){return ri(a.scale.linear(),1,[0,1])},a.scale.sqrt=function(){return a.scale.pow().exponent(.5)},a.scale.ordinal=function(){return ii([],{t:\\\"range\\\",a:[[]]})},a.scale.category10=function(){return a.scale.ordinal().range(ai)},a.scale.category20=function(){return a.scale.ordinal().range(oi)},a.scale.category20b=function(){return a.scale.ordinal().range(si)},a.scale.category20c=function(){return a.scale.ordinal().range(li)};var ai=[2062260,16744206,2924588,14034728,9725885,9197131,14907330,8355711,12369186,1556175].map(se),oi=[2062260,11454440,16744206,16759672,2924588,10018698,14034728,16750742,9725885,12955861,9197131,12885140,14907330,16234194,8355711,13092807,12369186,14408589,1556175,10410725].map(se),si=[3750777,5395619,7040719,10264286,6519097,9216594,11915115,13556636,9202993,12426809,15186514,15190932,8666169,11356490,14049643,15177372,8077683,10834324,13528509,14589654].map(se),li=[3244733,7057110,10406625,13032431,15095053,16616764,16625259,16634018,3253076,7652470,10607003,13101504,7695281,10394312,12369372,14342891,6513507,9868950,12434877,14277081].map(se);function ui(t,e){var r;function n(){var n=0,o=e.length;for(r=[];++n<o;)r[n-1]=a.quantile(t,n/o);return i}function i(t){if(!isNaN(t=+t))return e[a.bisect(r,t)]}return i.domain=function(e){return arguments.length?(t=e.map(y).filter(m).sort(g),n()):t},i.range=function(t){return arguments.length?(e=t,n()):e},i.quantiles=function(){return r},i.invertExtent=function(n){return(n=e.indexOf(n))<0?[NaN,NaN]:[n>0?r[n-1]:t[0],n<r.length?r[n]:t[t.length-1]]},i.copy=function(){return ui(t,e)},n()}function ci(t,e,r){var n,i;function a(e){return r[Math.max(0,Math.min(i,Math.floor(n*(e-t))))]}function o(){return n=r.length/(e-t),i=r.length-1,a}return a.domain=function(r){return arguments.length?(t=+r[0],e=+r[r.length-1],o()):[t,e]},a.range=function(t){return arguments.length?(r=t,o()):r},a.invertExtent=function(e){return[e=(e=r.indexOf(e))<0?NaN:e/n+t,e+1/n]},a.copy=function(){return ci(t,e,r)},o()}function fi(t,e){function r(r){if(r<=r)return e[a.bisect(t,r)]}return r.domain=function(e){return arguments.length?(t=e,r):t},r.range=function(t){return arguments.length?(e=t,r):e},r.invertExtent=function(r){return r=e.indexOf(r),[t[r-1],t[r]]},r.copy=function(){return fi(t,e)},r}function hi(t){function e(t){return+t}return e.invert=e,e.domain=e.range=function(r){return arguments.length?(t=r.map(e),e):t},e.ticks=function(e){return Qn(t,e)},e.tickFormat=function(e,r){return d3_scale_linearTickFormat(t,e,r)},e.copy=function(){return hi(t)},e}function pi(){return 0}a.scale.quantile=function(){return ui([],[])},a.scale.quantize=function(){return ci(0,1,[0,1])},a.scale.threshold=function(){return fi([.5],[0,1])},a.scale.identity=function(){return hi([0,1])},a.svg={},a.svg.arc=function(){var t=vi,e=gi,r=pi,n=di,i=yi,a=mi,o=xi;function s(){var s=Math.max(0,+t.apply(this,arguments)),u=Math.max(0,+e.apply(this,arguments)),c=i.apply(this,arguments)-It,f=a.apply(this,arguments)-It,h=Math.abs(f-c),p=c>f?0:1;if(u<s&&(d=u,u=s,s=d),h>=Ot)return l(u,p)+(s?l(s,1-p):\\\"\\\")+\\\"Z\\\";var d,v,g,y,m,x,b,_,w,T,k,A,M=0,S=0,E=[];if((y=(+o.apply(this,arguments)||0)/2)&&(g=n===di?Math.sqrt(s*s+u*u):+n.apply(this,arguments),p||(S*=-1),u&&(S=Rt(g/u*Math.sin(y))),s&&(M=Rt(g/s*Math.sin(y)))),u){m=u*Math.cos(c+S),x=u*Math.sin(c+S),b=u*Math.cos(f-S),_=u*Math.sin(f-S);var L=Math.abs(f-c-2*S)<=Ct?0:1;if(S&&bi(m,x,b,_)===p^L){var C=(c+f)/2;m=u*Math.cos(C),x=u*Math.sin(C),b=_=null}}else m=x=0;if(s){w=s*Math.cos(f-M),T=s*Math.sin(f-M),k=s*Math.cos(c+M),A=s*Math.sin(c+M);var P=Math.abs(c-f+2*M)<=Ct?0:1;if(M&&bi(w,T,k,A)===1-p^P){var O=(c+f)/2;w=s*Math.cos(O),T=s*Math.sin(O),k=A=null}}else w=T=0;if(h>Et&&(d=Math.min(Math.abs(u-s)/2,+r.apply(this,arguments)))>.001){v=s<u^p?0:1;var I=d,D=d;if(h<Ct){var z=null==k?[w,T]:null==b?[m,x]:De([m,x],[k,A],[b,_],[w,T]),R=m-z[0],F=x-z[1],B=b-z[0],N=_-z[1],j=1/Math.sin(Math.acos((R*B+F*N)/(Math.sqrt(R*R+F*F)*Math.sqrt(B*B+N*N)))/2),U=Math.sqrt(z[0]*z[0]+z[1]*z[1]);D=Math.min(d,(s-U)/(j-1)),I=Math.min(d,(u-U)/(j+1))}if(null!=b){var V=_i(null==k?[w,T]:[k,A],[m,x],u,I,p),H=_i([b,_],[w,T],u,I,p);d===I?E.push(\\\"M\\\",V[0],\\\"A\\\",I,\\\",\\\",I,\\\" 0 0,\\\",v,\\\" \\\",V[1],\\\"A\\\",u,\\\",\\\",u,\\\" 0 \\\",1-p^bi(V[1][0],V[1][1],H[1][0],H[1][1]),\\\",\\\",p,\\\" \\\",H[1],\\\"A\\\",I,\\\",\\\",I,\\\" 0 0,\\\",v,\\\" \\\",H[0]):E.push(\\\"M\\\",V[0],\\\"A\\\",I,\\\",\\\",I,\\\" 0 1,\\\",v,\\\" \\\",H[0])}else E.push(\\\"M\\\",m,\\\",\\\",x);if(null!=k){var q=_i([m,x],[k,A],s,-D,p),G=_i([w,T],null==b?[m,x]:[b,_],s,-D,p);d===D?E.push(\\\"L\\\",G[0],\\\"A\\\",D,\\\",\\\",D,\\\" 0 0,\\\",v,\\\" \\\",G[1],\\\"A\\\",s,\\\",\\\",s,\\\" 0 \\\",p^bi(G[1][0],G[1][1],q[1][0],q[1][1]),\\\",\\\",1-p,\\\" \\\",q[1],\\\"A\\\",D,\\\",\\\",D,\\\" 0 0,\\\",v,\\\" \\\",q[0]):E.push(\\\"L\\\",G[0],\\\"A\\\",D,\\\",\\\",D,\\\" 0 0,\\\",v,\\\" \\\",q[0])}else E.push(\\\"L\\\",w,\\\",\\\",T)}else E.push(\\\"M\\\",m,\\\",\\\",x),null!=b&&E.push(\\\"A\\\",u,\\\",\\\",u,\\\" 0 \\\",L,\\\",\\\",p,\\\" \\\",b,\\\",\\\",_),E.push(\\\"L\\\",w,\\\",\\\",T),null!=k&&E.push(\\\"A\\\",s,\\\",\\\",s,\\\" 0 \\\",P,\\\",\\\",1-p,\\\" \\\",k,\\\",\\\",A);return E.push(\\\"Z\\\"),E.join(\\\"\\\")}function l(t,e){return\\\"M0,\\\"+t+\\\"A\\\"+t+\\\",\\\"+t+\\\" 0 1,\\\"+e+\\\" 0,\\\"+-t+\\\"A\\\"+t+\\\",\\\"+t+\\\" 0 1,\\\"+e+\\\" 0,\\\"+t}return s.innerRadius=function(e){return arguments.length?(t=ge(e),s):t},s.outerRadius=function(t){return arguments.length?(e=ge(t),s):e},s.cornerRadius=function(t){return arguments.length?(r=ge(t),s):r},s.padRadius=function(t){return arguments.length?(n=t==di?di:ge(t),s):n},s.startAngle=function(t){return arguments.length?(i=ge(t),s):i},s.endAngle=function(t){return arguments.length?(a=ge(t),s):a},s.padAngle=function(t){return arguments.length?(o=ge(t),s):o},s.centroid=function(){var r=(+t.apply(this,arguments)+ +e.apply(this,arguments))/2,n=(+i.apply(this,arguments)+ +a.apply(this,arguments))/2-It;return[Math.cos(n)*r,Math.sin(n)*r]},s};var di=\\\"auto\\\";function vi(t){return t.innerRadius}function gi(t){return t.outerRadius}function yi(t){return t.startAngle}function mi(t){return t.endAngle}function xi(t){return t&&t.padAngle}function bi(t,e,r,n){return(t-r)*e-(e-n)*t>0?0:1}function _i(t,e,r,n,i){var a=t[0]-e[0],o=t[1]-e[1],s=(i?n:-n)/Math.sqrt(a*a+o*o),l=s*o,u=-s*a,c=t[0]+l,f=t[1]+u,h=e[0]+l,p=e[1]+u,d=(c+h)/2,v=(f+p)/2,g=h-c,y=p-f,m=g*g+y*y,x=r-n,b=c*p-h*f,_=(y<0?-1:1)*Math.sqrt(Math.max(0,x*x*m-b*b)),w=(b*y-g*_)/m,T=(-b*g-y*_)/m,k=(b*y+g*_)/m,A=(-b*g+y*_)/m,M=w-d,S=T-v,E=k-d,L=A-v;return M*M+S*S>E*E+L*L&&(w=k,T=A),[[w-l,T-u],[w*r/x,T*r/x]]}function wi(){return!0}function Ti(t){var e=Ee,r=Le,n=wi,i=Ai,a=i.key,o=.7;function s(a){var s,l=[],u=[],c=-1,f=a.length,h=ge(e),p=ge(r);function d(){l.push(\\\"M\\\",i(t(u),o))}for(;++c<f;)n.call(this,s=a[c],c)?u.push([+h.call(this,s,c),+p.call(this,s,c)]):u.length&&(d(),u=[]);return u.length&&d(),l.length?l.join(\\\"\\\"):null}return s.x=function(t){return arguments.length?(e=t,s):e},s.y=function(t){return arguments.length?(r=t,s):r},s.defined=function(t){return arguments.length?(n=t,s):n},s.interpolate=function(t){return arguments.length?(a=\\\"function\\\"==typeof t?i=t:(i=ki.get(t)||Ai).key,s):a},s.tension=function(t){return arguments.length?(o=t,s):o},s}a.svg.line=function(){return Ti(z)};var ki=a.map({linear:Ai,\\\"linear-closed\\\":Mi,step:function(t){for(var e=0,r=t.length,n=t[0],i=[n[0],\\\",\\\",n[1]];++e<r;)i.push(\\\"H\\\",(n[0]+(n=t[e])[0])/2,\\\"V\\\",n[1]);return r>1&&i.push(\\\"H\\\",n[0]),i.join(\\\"\\\")},\\\"step-before\\\":Si,\\\"step-after\\\":Ei,basis:Pi,\\\"basis-open\\\":function(t){if(t.length<4)return Ai(t);for(var e,r=[],n=-1,i=t.length,a=[0],o=[0];++n<3;)e=t[n],a.push(e[0]),o.push(e[1]);for(r.push(Oi(zi,a)+\\\",\\\"+Oi(zi,o)),--n;++n<i;)e=t[n],a.shift(),a.push(e[0]),o.shift(),o.push(e[1]),Ri(r,a,o);return r.join(\\\"\\\")},\\\"basis-closed\\\":function(t){for(var e,r,n=-1,i=t.length,a=i+4,o=[],s=[];++n<4;)r=t[n%i],o.push(r[0]),s.push(r[1]);for(e=[Oi(zi,o),\\\",\\\",Oi(zi,s)],--n;++n<a;)r=t[n%i],o.shift(),o.push(r[0]),s.shift(),s.push(r[1]),Ri(e,o,s);return e.join(\\\"\\\")},bundle:function(t,e){var r=t.length-1;if(r)for(var n,i,a=t[0][0],o=t[0][1],s=t[r][0]-a,l=t[r][1]-o,u=-1;++u<=r;)i=u/r,(n=t[u])[0]=e*n[0]+(1-e)*(a+i*s),n[1]=e*n[1]+(1-e)*(o+i*l);return Pi(t)},cardinal:function(t,e){return t.length<3?Ai(t):t[0]+Li(t,Ci(t,e))},\\\"cardinal-open\\\":function(t,e){return t.length<4?Ai(t):t[1]+Li(t.slice(1,-1),Ci(t,e))},\\\"cardinal-closed\\\":function(t,e){return t.length<3?Mi(t):t[0]+Li((t.push(t[0]),t),Ci([t[t.length-2]].concat(t,[t[1]]),e))},monotone:function(t){return t.length<3?Ai(t):t[0]+Li(t,function(t){for(var e,r,n,i,a=[],o=function(t){for(var e=0,r=t.length-1,n=[],i=t[0],a=t[1],o=n[0]=Fi(i,a);++e<r;)n[e]=(o+(o=Fi(i=a,a=t[e+1])))/2;return n[e]=o,n}(t),s=-1,l=t.length-1;++s<l;)e=Fi(t[s],t[s+1]),w(e)<Et?o[s]=o[s+1]=0:(i=(r=o[s]/e)*r+(n=o[s+1]/e)*n)>9&&(i=3*e/Math.sqrt(i),o[s]=i*r,o[s+1]=i*n);for(s=-1;++s<=l;)i=(t[Math.min(l,s+1)][0]-t[Math.max(0,s-1)][0])/(6*(1+o[s]*o[s])),a.push([i||0,o[s]*i||0]);return a}(t))}});function Ai(t){return t.length>1?t.join(\\\"L\\\"):t+\\\"Z\\\"}function Mi(t){return t.join(\\\"L\\\")+\\\"Z\\\"}function Si(t){for(var e=0,r=t.length,n=t[0],i=[n[0],\\\",\\\",n[1]];++e<r;)i.push(\\\"V\\\",(n=t[e])[1],\\\"H\\\",n[0]);return i.join(\\\"\\\")}function Ei(t){for(var e=0,r=t.length,n=t[0],i=[n[0],\\\",\\\",n[1]];++e<r;)i.push(\\\"H\\\",(n=t[e])[0],\\\"V\\\",n[1]);return i.join(\\\"\\\")}function Li(t,e){if(e.length<1||t.length!=e.length&&t.length!=e.length+2)return Ai(t);var r=t.length!=e.length,n=\\\"\\\",i=t[0],a=t[1],o=e[0],s=o,l=1;if(r&&(n+=\\\"Q\\\"+(a[0]-2*o[0]/3)+\\\",\\\"+(a[1]-2*o[1]/3)+\\\",\\\"+a[0]+\\\",\\\"+a[1],i=t[1],l=2),e.length>1){s=e[1],a=t[l],l++,n+=\\\"C\\\"+(i[0]+o[0])+\\\",\\\"+(i[1]+o[1])+\\\",\\\"+(a[0]-s[0])+\\\",\\\"+(a[1]-s[1])+\\\",\\\"+a[0]+\\\",\\\"+a[1];for(var u=2;u<e.length;u++,l++)a=t[l],s=e[u],n+=\\\"S\\\"+(a[0]-s[0])+\\\",\\\"+(a[1]-s[1])+\\\",\\\"+a[0]+\\\",\\\"+a[1]}if(r){var c=t[l];n+=\\\"Q\\\"+(a[0]+2*s[0]/3)+\\\",\\\"+(a[1]+2*s[1]/3)+\\\",\\\"+c[0]+\\\",\\\"+c[1]}return n}function Ci(t,e){for(var r,n=[],i=(1-e)/2,a=t[0],o=t[1],s=1,l=t.length;++s<l;)r=a,a=o,o=t[s],n.push([i*(o[0]-r[0]),i*(o[1]-r[1])]);return n}function Pi(t){if(t.length<3)return Ai(t);var e=1,r=t.length,n=t[0],i=n[0],a=n[1],o=[i,i,i,(n=t[1])[0]],s=[a,a,a,n[1]],l=[i,\\\",\\\",a,\\\"L\\\",Oi(zi,o),\\\",\\\",Oi(zi,s)];for(t.push(t[r-1]);++e<=r;)n=t[e],o.shift(),o.push(n[0]),s.shift(),s.push(n[1]),Ri(l,o,s);return t.pop(),l.push(\\\"L\\\",n),l.join(\\\"\\\")}function Oi(t,e){return t[0]*e[0]+t[1]*e[1]+t[2]*e[2]+t[3]*e[3]}ki.forEach((function(t,e){e.key=t,e.closed=/-closed$/.test(t)}));var Ii=[0,2/3,1/3,0],Di=[0,1/3,2/3,0],zi=[0,1/6,2/3,1/6];function Ri(t,e,r){t.push(\\\"C\\\",Oi(Ii,e),\\\",\\\",Oi(Ii,r),\\\",\\\",Oi(Di,e),\\\",\\\",Oi(Di,r),\\\",\\\",Oi(zi,e),\\\",\\\",Oi(zi,r))}function Fi(t,e){return(e[1]-t[1])/(e[0]-t[0])}function Bi(t){for(var e,r,n,i=-1,a=t.length;++i<a;)r=(e=t[i])[0],n=e[1]-It,e[0]=r*Math.cos(n),e[1]=r*Math.sin(n);return t}function Ni(t){var e=Ee,r=Ee,n=0,i=Le,a=wi,o=Ai,s=o.key,l=o,u=\\\"L\\\",c=.7;function f(s){var f,h,p,d=[],v=[],g=[],y=-1,m=s.length,x=ge(e),b=ge(n),_=e===r?function(){return h}:ge(r),w=n===i?function(){return p}:ge(i);function T(){d.push(\\\"M\\\",o(t(g),c),u,l(t(v.reverse()),c),\\\"Z\\\")}for(;++y<m;)a.call(this,f=s[y],y)?(v.push([h=+x.call(this,f,y),p=+b.call(this,f,y)]),g.push([+_.call(this,f,y),+w.call(this,f,y)])):v.length&&(T(),v=[],g=[]);return v.length&&T(),d.length?d.join(\\\"\\\"):null}return f.x=function(t){return arguments.length?(e=r=t,f):r},f.x0=function(t){return arguments.length?(e=t,f):e},f.x1=function(t){return arguments.length?(r=t,f):r},f.y=function(t){return arguments.length?(n=i=t,f):i},f.y0=function(t){return arguments.length?(n=t,f):n},f.y1=function(t){return arguments.length?(i=t,f):i},f.defined=function(t){return arguments.length?(a=t,f):a},f.interpolate=function(t){return arguments.length?(s=\\\"function\\\"==typeof t?o=t:(o=ki.get(t)||Ai).key,l=o.reverse||o,u=o.closed?\\\"M\\\":\\\"L\\\",f):s},f.tension=function(t){return arguments.length?(c=t,f):c},f}function ji(t){return t.source}function Ui(t){return t.target}function Vi(t){return t.radius}function Hi(t){return[t.x,t.y]}function qi(){return 64}function Gi(){return\\\"circle\\\"}function Zi(t){var e=Math.sqrt(t/Ct);return\\\"M0,\\\"+e+\\\"A\\\"+e+\\\",\\\"+e+\\\" 0 1,1 0,\\\"+-e+\\\"A\\\"+e+\\\",\\\"+e+\\\" 0 1,1 0,\\\"+e+\\\"Z\\\"}a.svg.line.radial=function(){var t=Ti(Bi);return t.radius=t.x,delete t.x,t.angle=t.y,delete t.y,t},Si.reverse=Ei,Ei.reverse=Si,a.svg.area=function(){return Ni(z)},a.svg.area.radial=function(){var t=Ni(Bi);return t.radius=t.x,delete t.x,t.innerRadius=t.x0,delete t.x0,t.outerRadius=t.x1,delete t.x1,t.angle=t.y,delete t.y,t.startAngle=t.y0,delete t.y0,t.endAngle=t.y1,delete t.y1,t},a.svg.chord=function(){var t=ji,e=Ui,r=Vi,n=yi,i=mi;function a(r,n){var i,a,u=o(this,t,r,n),c=o(this,e,r,n);return\\\"M\\\"+u.p0+s(u.r,u.p1,u.a1-u.a0)+(a=c,((i=u).a0==a.a0&&i.a1==a.a1?l(u.r,u.p1,u.r,u.p0):l(u.r,u.p1,c.r,c.p0)+s(c.r,c.p1,c.a1-c.a0)+l(c.r,c.p1,u.r,u.p0))+\\\"Z\\\")}function o(t,e,a,o){var s=e.call(t,a,o),l=r.call(t,s,o),u=n.call(t,s,o)-It,c=i.call(t,s,o)-It;return{r:l,a0:u,a1:c,p0:[l*Math.cos(u),l*Math.sin(u)],p1:[l*Math.cos(c),l*Math.sin(c)]}}function s(t,e,r){return\\\"A\\\"+t+\\\",\\\"+t+\\\" 0 \\\"+ +(r>Ct)+\\\",1 \\\"+e}function l(t,e,r,n){return\\\"Q 0,0 \\\"+n}return a.radius=function(t){return arguments.length?(r=ge(t),a):r},a.source=function(e){return arguments.length?(t=ge(e),a):t},a.target=function(t){return arguments.length?(e=ge(t),a):e},a.startAngle=function(t){return arguments.length?(n=ge(t),a):n},a.endAngle=function(t){return arguments.length?(i=ge(t),a):i},a},a.svg.diagonal=function(){var t=ji,e=Ui,r=Hi;function n(n,i){var a=t.call(this,n,i),o=e.call(this,n,i),s=(a.y+o.y)/2,l=[a,{x:a.x,y:s},{x:o.x,y:s},o];return\\\"M\\\"+(l=l.map(r))[0]+\\\"C\\\"+l[1]+\\\" \\\"+l[2]+\\\" \\\"+l[3]}return n.source=function(e){return arguments.length?(t=ge(e),n):t},n.target=function(t){return arguments.length?(e=ge(t),n):e},n.projection=function(t){return arguments.length?(r=t,n):r},n},a.svg.diagonal.radial=function(){var t=a.svg.diagonal(),e=Hi,r=t.projection;return t.projection=function(t){return arguments.length?r(function(t){return function(){var e=t.apply(this,arguments),r=e[0],n=e[1]-It;return[r*Math.cos(n),r*Math.sin(n)]}}(e=t)):e},t},a.svg.symbol=function(){var t=Gi,e=qi;function r(r,n){return(Yi.get(t.call(this,r,n))||Zi)(e.call(this,r,n))}return r.type=function(e){return arguments.length?(t=ge(e),r):t},r.size=function(t){return arguments.length?(e=ge(t),r):e},r};var Yi=a.map({circle:Zi,cross:function(t){var e=Math.sqrt(t/5)/2;return\\\"M\\\"+-3*e+\\\",\\\"+-e+\\\"H\\\"+-e+\\\"V\\\"+-3*e+\\\"H\\\"+e+\\\"V\\\"+-e+\\\"H\\\"+3*e+\\\"V\\\"+e+\\\"H\\\"+e+\\\"V\\\"+3*e+\\\"H\\\"+-e+\\\"V\\\"+e+\\\"H\\\"+-3*e+\\\"Z\\\"},diamond:function(t){var e=Math.sqrt(t/(2*Xi)),r=e*Xi;return\\\"M0,\\\"+-e+\\\"L\\\"+r+\\\",0 0,\\\"+e+\\\" \\\"+-r+\\\",0Z\\\"},square:function(t){var e=Math.sqrt(t)/2;return\\\"M\\\"+-e+\\\",\\\"+-e+\\\"L\\\"+e+\\\",\\\"+-e+\\\" \\\"+e+\\\",\\\"+e+\\\" \\\"+-e+\\\",\\\"+e+\\\"Z\\\"},\\\"triangle-down\\\":function(t){var e=Math.sqrt(t/Wi),r=e*Wi/2;return\\\"M0,\\\"+r+\\\"L\\\"+e+\\\",\\\"+-r+\\\" \\\"+-e+\\\",\\\"+-r+\\\"Z\\\"},\\\"triangle-up\\\":function(t){var e=Math.sqrt(t/Wi),r=e*Wi/2;return\\\"M0,\\\"+-r+\\\"L\\\"+e+\\\",\\\"+r+\\\" \\\"+-e+\\\",\\\"+r+\\\"Z\\\"}});a.svg.symbolTypes=Yi.keys();var Wi=Math.sqrt(3),Xi=Math.tan(30*Dt);K.transition=function(t){for(var e,r,n=Qi||++ra,i=aa(t),a=[],o=ta||{time:Date.now(),ease:Or,delay:0,duration:250},s=-1,l=this.length;++s<l;){a.push(e=[]);for(var u=this[s],c=-1,f=u.length;++c<f;)(r=u[c])&&oa(r,c,i,n,o),e.push(r)}return $i(a,i,n)},K.interrupt=function(t){return this.each(null==t?Ji:Ki(aa(t)))};var Ji=Ki(aa());function Ki(t){return function(){var e,r,n;(e=this[t])&&(n=e[r=e.active])&&(n.timer.c=null,n.timer.t=NaN,--e.count?delete e[r]:delete this[t],e.active+=.5,n.event&&n.event.interrupt.call(this,this.__data__,n.index))}}function $i(t,e,r){return Z(t,ea),t.namespace=e,t.id=r,t}var Qi,ta,ea=[],ra=0;function na(t,e,r,n){var i=t.id,a=t.namespace;return vt(t,\\\"function\\\"==typeof r?function(t,o,s){t[a][i].tween.set(e,n(r.call(t,t.__data__,o,s)))}:(r=n(r),function(t){t[a][i].tween.set(e,r)}))}function ia(t){return null==t&&(t=\\\"\\\"),function(){this.textContent=t}}function aa(t){return null==t?\\\"__transition__\\\":\\\"__transition_\\\"+t+\\\"__\\\"}function oa(t,e,r,n,i){var a,o,s,l,u,c=t[r]||(t[r]={active:0,count:0}),f=c[n];function h(r){var i=c.active,h=c[i];for(var d in h&&(h.timer.c=null,h.timer.t=NaN,--c.count,delete c[i],h.event&&h.event.interrupt.call(t,t.__data__,h.index)),c)if(+d<n){var v=c[d];v.timer.c=null,v.timer.t=NaN,--c.count,delete c[d]}o.c=p,ke((function(){return o.c&&p(r||1)&&(o.c=null,o.t=NaN),1}),0,a),c.active=n,f.event&&f.event.start.call(t,t.__data__,e),u=[],f.tween.forEach((function(r,n){(n=n.call(t,t.__data__,e))&&u.push(n)})),l=f.ease,s=f.duration}function p(i){for(var a=i/s,o=l(a),h=u.length;h>0;)u[--h].call(t,o);if(a>=1)return f.event&&f.event.end.call(t,t.__data__,e),--c.count?delete c[n]:delete t[r],1}f||(a=i.time,o=ke((function(t){var e=f.delay;if(o.t=e+a,e<=t)return h(t-e);o.c=h}),0,a),f=c[n]={tween:new k,time:a,timer:o,delay:i.delay,duration:i.duration,ease:i.ease,index:e},i=null,++c.count)}ea.call=K.call,ea.empty=K.empty,ea.node=K.node,ea.size=K.size,a.transition=function(t,e){return t&&t.transition?Qi?t.transition(e):t:a.selection().transition(t)},a.transition.prototype=ea,ea.select=function(t){var e,r,n,i=this.id,a=this.namespace,o=[];t=$(t);for(var s=-1,l=this.length;++s<l;){o.push(e=[]);for(var u=this[s],c=-1,f=u.length;++c<f;)(n=u[c])&&(r=t.call(n,n.__data__,c,s))?(\\\"__data__\\\"in n&&(r.__data__=n.__data__),oa(r,c,a,i,n[a][i]),e.push(r)):e.push(null)}return $i(o,a,i)},ea.selectAll=function(t){var e,r,n,i,a,o=this.id,s=this.namespace,l=[];t=Q(t);for(var u=-1,c=this.length;++u<c;)for(var f=this[u],h=-1,p=f.length;++h<p;)if(n=f[h]){a=n[s][o],r=t.call(n,n.__data__,h,u),l.push(e=[]);for(var d=-1,v=r.length;++d<v;)(i=r[d])&&oa(i,d,s,o,a),e.push(i)}return $i(l,s,o)},ea.filter=function(t){var e,r,n=[];\\\"function\\\"!=typeof t&&(t=pt(t));for(var i=0,a=this.length;i<a;i++){n.push(e=[]);for(var o,s=0,l=(o=this[i]).length;s<l;s++)(r=o[s])&&t.call(r,r.__data__,s,i)&&e.push(r)}return $i(n,this.namespace,this.id)},ea.tween=function(t,e){var r=this.id,n=this.namespace;return arguments.length<2?this.node()[n][r].tween.get(t):vt(this,null==e?function(e){e[n][r].tween.remove(t)}:function(i){i[n][r].tween.set(t,e)})},ea.attr=function(t,e){if(arguments.length<2){for(e in t)this.attr(e,t[e]);return this}var r=\\\"transform\\\"==t?Hr:Tr,n=a.ns.qualify(t);function i(){this.removeAttribute(n)}function o(){this.removeAttributeNS(n.space,n.local)}return na(this,\\\"attr.\\\"+t,e,n.local?function(t){return null==t?o:(t+=\\\"\\\",function(){var e,i=this.getAttributeNS(n.space,n.local);return i!==t&&(e=r(i,t),function(t){this.setAttributeNS(n.space,n.local,e(t))})})}:function(t){return null==t?i:(t+=\\\"\\\",function(){var e,i=this.getAttribute(n);return i!==t&&(e=r(i,t),function(t){this.setAttribute(n,e(t))})})})},ea.attrTween=function(t,e){var r=a.ns.qualify(t);return this.tween(\\\"attr.\\\"+t,r.local?function(t,n){var i=e.call(this,t,n,this.getAttributeNS(r.space,r.local));return i&&function(t){this.setAttributeNS(r.space,r.local,i(t))}}:function(t,n){var i=e.call(this,t,n,this.getAttribute(r));return i&&function(t){this.setAttribute(r,i(t))}})},ea.style=function(t,e,r){var n=arguments.length;if(n<3){if(\\\"string\\\"!=typeof t){for(r in n<2&&(e=\\\"\\\"),t)this.style(r,t[r],e);return this}r=\\\"\\\"}function i(){this.style.removeProperty(t)}return na(this,\\\"style.\\\"+t,e,(function(e){return null==e?i:(e+=\\\"\\\",function(){var n,i=c(this).getComputedStyle(this,null).getPropertyValue(t);return i!==e&&(n=Tr(i,e),function(e){this.style.setProperty(t,n(e),r)})})}))},ea.styleTween=function(t,e,r){return arguments.length<3&&(r=\\\"\\\"),this.tween(\\\"style.\\\"+t,(function(n,i){var a=e.call(this,n,i,c(this).getComputedStyle(this,null).getPropertyValue(t));return a&&function(e){this.style.setProperty(t,a(e),r)}}))},ea.text=function(t){return na(this,\\\"text\\\",t,ia)},ea.remove=function(){var t=this.namespace;return this.each(\\\"end.transition\\\",(function(){var e;this[t].count<2&&(e=this.parentNode)&&e.removeChild(this)}))},ea.ease=function(t){var e=this.id,r=this.namespace;return arguments.length<1?this.node()[r][e].ease:(\\\"function\\\"!=typeof t&&(t=a.ease.apply(a,arguments)),vt(this,(function(n){n[r][e].ease=t})))},ea.delay=function(t){var e=this.id,r=this.namespace;return arguments.length<1?this.node()[r][e].delay:vt(this,\\\"function\\\"==typeof t?function(n,i,a){n[r][e].delay=+t.call(n,n.__data__,i,a)}:(t=+t,function(n){n[r][e].delay=t}))},ea.duration=function(t){var e=this.id,r=this.namespace;return arguments.length<1?this.node()[r][e].duration:vt(this,\\\"function\\\"==typeof t?function(n,i,a){n[r][e].duration=Math.max(1,t.call(n,n.__data__,i,a))}:(t=Math.max(1,t),function(n){n[r][e].duration=t}))},ea.each=function(t,e){var r=this.id,n=this.namespace;if(arguments.length<2){var i=ta,o=Qi;try{Qi=r,vt(this,(function(e,i,a){ta=e[n][r],t.call(e,e.__data__,i,a)}))}finally{ta=i,Qi=o}}else vt(this,(function(i){var o=i[n][r];(o.event||(o.event=a.dispatch(\\\"start\\\",\\\"end\\\",\\\"interrupt\\\"))).on(t,e)}));return this},ea.transition=function(){for(var t,e,r,n=this.id,i=++ra,a=this.namespace,o=[],s=0,l=this.length;s<l;s++){o.push(t=[]);for(var u,c=0,f=(u=this[s]).length;c<f;c++)(e=u[c])&&oa(e,c,a,i,{time:(r=e[a][n]).time,ease:r.ease,delay:r.delay+r.duration,duration:r.duration}),t.push(e)}return $i(o,a,i)},a.svg.axis=function(){var t,e=a.scale.linear(),r=sa,n=6,i=6,o=3,l=[10],u=null;function c(s){s.each((function(){var s,c=a.select(this),f=this.__chart__||e,h=this.__chart__=e.copy(),p=null==u?h.ticks?h.ticks.apply(h,l):h.domain():u,d=null==t?h.tickFormat?h.tickFormat.apply(h,l):z:t,v=c.selectAll(\\\".tick\\\").data(p,h),g=v.enter().insert(\\\"g\\\",\\\".domain\\\").attr(\\\"class\\\",\\\"tick\\\").style(\\\"opacity\\\",Et),y=a.transition(v.exit()).style(\\\"opacity\\\",Et).remove(),m=a.transition(v.order()).style(\\\"opacity\\\",1),x=Math.max(n,0)+o,b=Hn(h),_=c.selectAll(\\\".domain\\\").data([0]),w=(_.enter().append(\\\"path\\\").attr(\\\"class\\\",\\\"domain\\\"),a.transition(_));g.append(\\\"line\\\"),g.append(\\\"text\\\");var T,k,A,M,S=g.select(\\\"line\\\"),E=m.select(\\\"line\\\"),L=v.select(\\\"text\\\").text(d),C=g.select(\\\"text\\\"),P=m.select(\\\"text\\\"),O=\\\"top\\\"===r||\\\"left\\\"===r?-1:1;if(\\\"bottom\\\"===r||\\\"top\\\"===r?(s=ua,T=\\\"x\\\",A=\\\"y\\\",k=\\\"x2\\\",M=\\\"y2\\\",L.attr(\\\"dy\\\",O<0?\\\"0em\\\":\\\".71em\\\").style(\\\"text-anchor\\\",\\\"middle\\\"),w.attr(\\\"d\\\",\\\"M\\\"+b[0]+\\\",\\\"+O*i+\\\"V0H\\\"+b[1]+\\\"V\\\"+O*i)):(s=ca,T=\\\"y\\\",A=\\\"x\\\",k=\\\"y2\\\",M=\\\"x2\\\",L.attr(\\\"dy\\\",\\\".32em\\\").style(\\\"text-anchor\\\",O<0?\\\"end\\\":\\\"start\\\"),w.attr(\\\"d\\\",\\\"M\\\"+O*i+\\\",\\\"+b[0]+\\\"H0V\\\"+b[1]+\\\"H\\\"+O*i)),S.attr(M,O*n),C.attr(A,O*x),E.attr(k,0).attr(M,O*n),P.attr(T,0).attr(A,O*x),h.rangeBand){var I=h,D=I.rangeBand()/2;f=h=function(t){return I(t)+D}}else f.rangeBand?f=h:y.call(s,h,f);g.call(s,f,h),m.call(s,h,h)}))}return c.scale=function(t){return arguments.length?(e=t,c):e},c.orient=function(t){return arguments.length?(r=t in la?t+\\\"\\\":sa,c):r},c.ticks=function(){return arguments.length?(l=s(arguments),c):l},c.tickValues=function(t){return arguments.length?(u=t,c):u},c.tickFormat=function(e){return arguments.length?(t=e,c):t},c.tickSize=function(t){var e=arguments.length;return e?(n=+t,i=+arguments[e-1],c):n},c.innerTickSize=function(t){return arguments.length?(n=+t,c):n},c.outerTickSize=function(t){return arguments.length?(i=+t,c):i},c.tickPadding=function(t){return arguments.length?(o=+t,c):o},c.tickSubdivide=function(){return arguments.length&&c},c};var sa=\\\"bottom\\\",la={top:1,right:1,bottom:1,left:1};function ua(t,e,r){t.attr(\\\"transform\\\",(function(t){var n=e(t);return\\\"translate(\\\"+(isFinite(n)?n:r(t))+\\\",0)\\\"}))}function ca(t,e,r){t.attr(\\\"transform\\\",(function(t){var n=e(t);return\\\"translate(0,\\\"+(isFinite(n)?n:r(t))+\\\")\\\"}))}a.svg.brush=function(){var t,e,r=q(h,\\\"brushstart\\\",\\\"brush\\\",\\\"brushend\\\"),n=null,i=null,o=[0,0],s=[0,0],l=!0,u=!0,f=ha[0];function h(t){t.each((function(){var t=a.select(this).style(\\\"pointer-events\\\",\\\"all\\\").style(\\\"-webkit-tap-highlight-color\\\",\\\"rgba(0,0,0,0)\\\").on(\\\"mousedown.brush\\\",g).on(\\\"touchstart.brush\\\",g),e=t.selectAll(\\\".background\\\").data([0]);e.enter().append(\\\"rect\\\").attr(\\\"class\\\",\\\"background\\\").style(\\\"visibility\\\",\\\"hidden\\\").style(\\\"cursor\\\",\\\"crosshair\\\"),t.selectAll(\\\".extent\\\").data([0]).enter().append(\\\"rect\\\").attr(\\\"class\\\",\\\"extent\\\").style(\\\"cursor\\\",\\\"move\\\");var r=t.selectAll(\\\".resize\\\").data(f,z);r.exit().remove(),r.enter().append(\\\"g\\\").attr(\\\"class\\\",(function(t){return\\\"resize \\\"+t})).style(\\\"cursor\\\",(function(t){return fa[t]})).append(\\\"rect\\\").attr(\\\"x\\\",(function(t){return/[ew]$/.test(t)?-3:null})).attr(\\\"y\\\",(function(t){return/^[ns]/.test(t)?-3:null})).attr(\\\"width\\\",6).attr(\\\"height\\\",6).style(\\\"visibility\\\",\\\"hidden\\\"),r.style(\\\"display\\\",h.empty()?\\\"none\\\":null);var o,s=a.transition(t),l=a.transition(e);n&&(o=Hn(n),l.attr(\\\"x\\\",o[0]).attr(\\\"width\\\",o[1]-o[0]),d(s)),i&&(o=Hn(i),l.attr(\\\"y\\\",o[0]).attr(\\\"height\\\",o[1]-o[0]),v(s)),p(s)}))}function p(t){t.selectAll(\\\".resize\\\").attr(\\\"transform\\\",(function(t){return\\\"translate(\\\"+o[+/e$/.test(t)]+\\\",\\\"+s[+/^s/.test(t)]+\\\")\\\"}))}function d(t){t.select(\\\".extent\\\").attr(\\\"x\\\",o[0]),t.selectAll(\\\".extent,.n>rect,.s>rect\\\").attr(\\\"width\\\",o[1]-o[0])}function v(t){t.select(\\\".extent\\\").attr(\\\"y\\\",s[0]),t.selectAll(\\\".extent,.e>rect,.w>rect\\\").attr(\\\"height\\\",s[1]-s[0])}function g(){var f,g,y=this,m=a.select(a.event.target),x=r.of(y,arguments),b=a.select(y),_=m.datum(),w=!/^(n|s)$/.test(_)&&n,T=!/^(e|w)$/.test(_)&&i,k=m.classed(\\\"extent\\\"),A=kt(y),M=a.mouse(y),S=a.select(c(y)).on(\\\"keydown.brush\\\",(function(){32==a.event.keyCode&&(k||(f=null,M[0]-=o[1],M[1]-=s[1],k=2),V())})).on(\\\"keyup.brush\\\",(function(){32==a.event.keyCode&&2==k&&(M[0]+=o[1],M[1]+=s[1],k=0,V())}));if(a.event.changedTouches?S.on(\\\"touchmove.brush\\\",C).on(\\\"touchend.brush\\\",O):S.on(\\\"mousemove.brush\\\",C).on(\\\"mouseup.brush\\\",O),b.interrupt().selectAll(\\\"*\\\").interrupt(),k)M[0]=o[0]-M[0],M[1]=s[0]-M[1];else if(_){var E=+/w$/.test(_),L=+/^n/.test(_);g=[o[1-E]-M[0],s[1-L]-M[1]],M[0]=o[E],M[1]=s[L]}else a.event.altKey&&(f=M.slice());function C(){var t=a.mouse(y),e=!1;g&&(t[0]+=g[0],t[1]+=g[1]),k||(a.event.altKey?(f||(f=[(o[0]+o[1])/2,(s[0]+s[1])/2]),M[0]=o[+(t[0]<f[0])],M[1]=s[+(t[1]<f[1])]):f=null),w&&P(t,n,0)&&(d(b),e=!0),T&&P(t,i,1)&&(v(b),e=!0),e&&(p(b),x({type:\\\"brush\\\",mode:k?\\\"move\\\":\\\"resize\\\"}))}function P(r,n,i){var a,c,h=Hn(n),p=h[0],d=h[1],v=M[i],g=i?s:o,y=g[1]-g[0];if(k&&(p-=v,d-=y+v),a=(i?u:l)?Math.max(p,Math.min(d,r[i])):r[i],k?c=(a+=v)+y:(f&&(v=Math.max(p,Math.min(d,2*f[i]-a))),v<a?(c=a,a=v):c=v),g[0]!=a||g[1]!=c)return i?e=null:t=null,g[0]=a,g[1]=c,!0}function O(){C(),b.style(\\\"pointer-events\\\",\\\"all\\\").selectAll(\\\".resize\\\").style(\\\"display\\\",h.empty()?\\\"none\\\":null),a.select(\\\"body\\\").style(\\\"cursor\\\",null),S.on(\\\"mousemove.brush\\\",null).on(\\\"mouseup.brush\\\",null).on(\\\"touchmove.brush\\\",null).on(\\\"touchend.brush\\\",null).on(\\\"keydown.brush\\\",null).on(\\\"keyup.brush\\\",null),A(),x({type:\\\"brushend\\\"})}b.style(\\\"pointer-events\\\",\\\"none\\\").selectAll(\\\".resize\\\").style(\\\"display\\\",null),a.select(\\\"body\\\").style(\\\"cursor\\\",m.style(\\\"cursor\\\")),x({type:\\\"brushstart\\\"}),C()}return h.event=function(n){n.each((function(){var n=r.of(this,arguments),i={x:o,y:s,i:t,j:e},l=this.__chart__||i;this.__chart__=i,Qi?a.select(this).transition().each(\\\"start.brush\\\",(function(){t=l.i,e=l.j,o=l.x,s=l.y,n({type:\\\"brushstart\\\"})})).tween(\\\"brush:brush\\\",(function(){var r=kr(o,i.x),a=kr(s,i.y);return t=e=null,function(t){o=i.x=r(t),s=i.y=a(t),n({type:\\\"brush\\\",mode:\\\"resize\\\"})}})).each(\\\"end.brush\\\",(function(){t=i.i,e=i.j,n({type:\\\"brush\\\",mode:\\\"resize\\\"}),n({type:\\\"brushend\\\"})})):(n({type:\\\"brushstart\\\"}),n({type:\\\"brush\\\",mode:\\\"resize\\\"}),n({type:\\\"brushend\\\"}))}))},h.x=function(t){return arguments.length?(f=ha[!(n=t)<<1|!i],h):n},h.y=function(t){return arguments.length?(f=ha[!n<<1|!(i=t)],h):i},h.clamp=function(t){return arguments.length?(n&&i?(l=!!t[0],u=!!t[1]):n?l=!!t:i&&(u=!!t),h):n&&i?[l,u]:n?l:i?u:null},h.extent=function(r){var a,l,u,c,f;return arguments.length?(n&&(a=r[0],l=r[1],i&&(a=a[0],l=l[0]),t=[a,l],n.invert&&(a=n(a),l=n(l)),l<a&&(f=a,a=l,l=f),a==o[0]&&l==o[1]||(o=[a,l])),i&&(u=r[0],c=r[1],n&&(u=u[1],c=c[1]),e=[u,c],i.invert&&(u=i(u),c=i(c)),c<u&&(f=u,u=c,c=f),u==s[0]&&c==s[1]||(s=[u,c])),h):(n&&(t?(a=t[0],l=t[1]):(a=o[0],l=o[1],n.invert&&(a=n.invert(a),l=n.invert(l)),l<a&&(f=a,a=l,l=f))),i&&(e?(u=e[0],c=e[1]):(u=s[0],c=s[1],i.invert&&(u=i.invert(u),c=i.invert(c)),c<u&&(f=u,u=c,c=f))),n&&i?[[a,u],[l,c]]:n?[a,l]:i&&[u,c])},h.clear=function(){return h.empty()||(o=[0,0],s=[0,0],t=e=null),h},h.empty=function(){return!!n&&o[0]==o[1]||!!i&&s[0]==s[1]},a.rebind(h,r,\\\"on\\\")};var fa={n:\\\"ns-resize\\\",e:\\\"ew-resize\\\",s:\\\"ns-resize\\\",w:\\\"ew-resize\\\",nw:\\\"nwse-resize\\\",ne:\\\"nesw-resize\\\",se:\\\"nwse-resize\\\",sw:\\\"nesw-resize\\\"},ha=[[\\\"n\\\",\\\"e\\\",\\\"s\\\",\\\"w\\\",\\\"nw\\\",\\\"ne\\\",\\\"se\\\",\\\"sw\\\"],[\\\"e\\\",\\\"w\\\"],[\\\"n\\\",\\\"s\\\"],[]];function pa(t){return JSON.parse(t.responseText)}function da(t){var e=l.createRange();return e.selectNode(l.body),e.createContextualFragment(t.responseText)}a.text=ye((function(t){return t.responseText})),a.json=function(t,e){return me(t,\\\"application/json\\\",pa,e)},a.html=function(t,e){return me(t,\\\"text/html\\\",da,e)},a.xml=ye((function(t){return t.responseXML})),void 0===(i=\\\"function\\\"==typeof(n=a)?n.call(e,r,e,t):n)||(t.exports=i)}).apply(self)},88294:function(t,e,r){\\\"use strict\\\";t.exports=r(62849)},62849:function(t,e,r){\\\"use strict\\\";var n=r(91358),i=r(53435),a=r(18863),o=r(21527),s=r(71299),l=r(46775),u=r(30120),c=r(64941),f=r(90660),h=r(27084);function p(t,e){for(var r=e[0],n=e[1],a=1/(e[2]-r),o=1/(e[3]-n),s=new Array(t.length),l=0,u=t.length/2;l<u;l++)s[2*l]=i((t[2*l]-r)*a,0,1),s[2*l+1]=i((t[2*l+1]-n)*o,0,1);return s}t.exports=function(t,e){e||(e={}),t=u(t,\\\"float64\\\"),e=s(e,{bounds:\\\"range bounds dataBox databox\\\",maxDepth:\\\"depth maxDepth maxdepth level maxLevel maxlevel levels\\\",dtype:\\\"type dtype format out dst output destination\\\"});var r=l(e.maxDepth,255),i=l(e.bounds,o(t,2));i[0]===i[2]&&i[2]++,i[1]===i[3]&&i[3]++;var d,v=p(t,i),g=t.length>>>1;e.dtype||(e.dtype=\\\"array\\\"),\\\"string\\\"==typeof e.dtype?d=new(f(e.dtype))(g):e.dtype&&(d=e.dtype,Array.isArray(d)&&(d.length=g));for(var y=0;y<g;++y)d[y]=y;var m=[],x=[],b=[],_=[];!function t(e,n,i,a,o,s){if(!a.length)return null;var l=m[o]||(m[o]=[]),u=b[o]||(b[o]=[]),c=x[o]||(x[o]=[]),f=l.length;if(++o>r||s>1073741824){for(var h=0;h<a.length;h++)l.push(a[h]),u.push(s),c.push(null,null,null,null);return f}if(l.push(a[0]),u.push(s),a.length<=1)return c.push(null,null,null,null),f;for(var p=.5*i,d=e+p,g=n+p,y=[],_=[],w=[],T=[],k=1,A=a.length;k<A;k++){var M=a[k],S=v[2*M],E=v[2*M+1];S<d?E<g?y.push(M):_.push(M):E<g?w.push(M):T.push(M)}return s<<=2,c.push(t(e,n,p,y,o,s),t(e,g,p,_,o,s+1),t(d,n,p,w,o,s+2),t(d,g,p,T,o,s+3)),f}(0,0,1,d,0,1);for(var w=0,T=0;T<m.length;T++){var k=m[T];if(d.set)d.set(k,w);else for(var A=0,M=k.length;A<M;A++)d[A+w]=k[A];var S=w+m[T].length;_[T]=[w,S],w=S}return d.range=function(){for(var e,r=[],o=arguments.length;o--;)r[o]=arguments[o];if(c(r[r.length-1])){var u=r.pop();r.length||null==u.x&&null==u.l&&null==u.left||(r=[u],e={}),e=s(u,{level:\\\"level maxLevel\\\",d:\\\"d diam diameter r radius px pxSize pixel pixelSize maxD size minSize\\\",lod:\\\"lod details ranges offsets\\\"})}else e={};r.length||(r=i);var f,d=a.apply(void 0,r),v=[Math.min(d.x,d.x+d.width),Math.min(d.y,d.y+d.height),Math.max(d.x,d.x+d.width),Math.max(d.y,d.y+d.height)],g=v[0],y=v[1],w=v[2],T=v[3],k=p([g,y,w,T],i),A=k[0],M=k[1],S=k[2],L=k[3],C=l(e.level,m.length);null!=e.d&&(\\\"number\\\"==typeof e.d?f=[e.d,e.d]:e.d.length&&(f=e.d),C=Math.min(Math.max(Math.ceil(-h(Math.abs(f[0])/(i[2]-i[0]))),Math.ceil(-h(Math.abs(f[1])/(i[3]-i[1])))),C));if(C=Math.min(C,m.length),e.lod)return function(t,e,r,i,a){for(var o=[],s=0;s<a;s++){var l=b[s],u=_[s][0],c=E(t,e,s),f=E(r,i,s),h=n.ge(l,c),p=n.gt(l,f,h,l.length-1);o[s]=[h+u,p+u]}return o}(A,M,S,L,C);var P=[];return function e(r,n,i,a,o,s){if(null!==o&&null!==s&&!(A>r+i||M>n+i||S<r||L<n||a>=C||o===s)){var l=m[a];void 0===s&&(s=l.length);for(var u=o;u<s;u++){var c=l[u],f=t[2*c],h=t[2*c+1];f>=g&&f<=w&&h>=y&&h<=T&&P.push(c)}var p=x[a],d=p[4*o+0],v=p[4*o+1],b=p[4*o+2],_=p[4*o+3],k=function(t,e){for(var r=null,n=0;null===r;)if(r=t[4*e+n],++n>t.length)return null;return r}(p,o+1),E=.5*i,O=a+1;e(r,n,E,O,d,v||b||_||k),e(r,n+E,E,O,v,b||_||k),e(r+E,n,E,O,b,_||k),e(r+E,n+E,E,O,_,k)}}(0,0,1,0,0,1),P},d;function E(t,e,r){for(var n=1,i=.5,a=.5,o=.5,s=0;s<r;s++)n<<=2,n+=t<i?e<a?0:1:e<a?2:3,o*=.5,i+=t<i?-o:o,a+=e<a?-o:o;return n}}},30774:function(t,e,r){\\\"use strict\\\";Object.defineProperty(e,\\\"__esModule\\\",{value:!0});var n=r(60302),i=6378137;function a(t){var e=0;if(t&&t.length>0){e+=Math.abs(o(t[0]));for(var r=1;r<t.length;r++)e-=Math.abs(o(t[r]))}return e}function o(t){var e,r,n,a,o,l,u=0,c=t.length;if(c>2){for(l=0;l<c;l++)l===c-2?(n=c-2,a=c-1,o=0):l===c-1?(n=c-1,a=0,o=1):(n=l,a=l+1,o=l+2),e=t[n],r=t[a],u+=(s(t[o][0])-s(e[0]))*Math.sin(s(r[1]));u=u*i*i/2}return u}function s(t){return t*Math.PI/180}e.default=function(t){return n.geomReduce(t,(function(t,e){return t+function(t){var e,r=0;switch(t.type){case\\\"Polygon\\\":return a(t.coordinates);case\\\"MultiPolygon\\\":for(e=0;e<t.coordinates.length;e++)r+=a(t.coordinates[e]);return r;case\\\"Point\\\":case\\\"MultiPoint\\\":case\\\"LineString\\\":case\\\"MultiLineString\\\":return 0}return 0}(e)}),0)}},23132:function(t,e){\\\"use strict\\\";function r(t,e,r){void 0===r&&(r={});var n={type:\\\"Feature\\\"};return(0===r.id||r.id)&&(n.id=r.id),r.bbox&&(n.bbox=r.bbox),n.properties=e||{},n.geometry=t,n}function n(t,e,n){if(void 0===n&&(n={}),!t)throw new Error(\\\"coordinates is required\\\");if(!Array.isArray(t))throw new Error(\\\"coordinates must be an Array\\\");if(t.length<2)throw new Error(\\\"coordinates must be at least 2 numbers long\\\");if(!p(t[0])||!p(t[1]))throw new Error(\\\"coordinates must contain numbers\\\");return r({type:\\\"Point\\\",coordinates:t},e,n)}function i(t,e,n){void 0===n&&(n={});for(var i=0,a=t;i<a.length;i++){var o=a[i];if(o.length<4)throw new Error(\\\"Each LinearRing of a Polygon must have 4 or more Positions.\\\");for(var s=0;s<o[o.length-1].length;s++)if(o[o.length-1][s]!==o[0][s])throw new Error(\\\"First and last Position are not equivalent.\\\")}return r({type:\\\"Polygon\\\",coordinates:t},e,n)}function a(t,e,n){if(void 0===n&&(n={}),t.length<2)throw new Error(\\\"coordinates must be an array of two or more positions\\\");return r({type:\\\"LineString\\\",coordinates:t},e,n)}function o(t,e){void 0===e&&(e={});var r={type:\\\"FeatureCollection\\\"};return e.id&&(r.id=e.id),e.bbox&&(r.bbox=e.bbox),r.features=t,r}function s(t,e,n){return void 0===n&&(n={}),r({type:\\\"MultiLineString\\\",coordinates:t},e,n)}function l(t,e,n){return void 0===n&&(n={}),r({type:\\\"MultiPoint\\\",coordinates:t},e,n)}function u(t,e,n){return void 0===n&&(n={}),r({type:\\\"MultiPolygon\\\",coordinates:t},e,n)}function c(t,r){void 0===r&&(r=\\\"kilometers\\\");var n=e.factors[r];if(!n)throw new Error(r+\\\" units is invalid\\\");return t*n}function f(t,r){void 0===r&&(r=\\\"kilometers\\\");var n=e.factors[r];if(!n)throw new Error(r+\\\" units is invalid\\\");return t/n}function h(t){return t%(2*Math.PI)*180/Math.PI}function p(t){return!isNaN(t)&&null!==t&&!Array.isArray(t)}Object.defineProperty(e,\\\"__esModule\\\",{value:!0}),e.earthRadius=6371008.8,e.factors={centimeters:100*e.earthRadius,centimetres:100*e.earthRadius,degrees:e.earthRadius/111325,feet:3.28084*e.earthRadius,inches:39.37*e.earthRadius,kilometers:e.earthRadius/1e3,kilometres:e.earthRadius/1e3,meters:e.earthRadius,metres:e.earthRadius,miles:e.earthRadius/1609.344,millimeters:1e3*e.earthRadius,millimetres:1e3*e.earthRadius,nauticalmiles:e.earthRadius/1852,radians:1,yards:1.0936*e.earthRadius},e.unitsFactors={centimeters:100,centimetres:100,degrees:1/111325,feet:3.28084,inches:39.37,kilometers:.001,kilometres:.001,meters:1,metres:1,miles:1/1609.344,millimeters:1e3,millimetres:1e3,nauticalmiles:1/1852,radians:1/e.earthRadius,yards:1.0936133},e.areaFactors={acres:247105e-9,centimeters:1e4,centimetres:1e4,feet:10.763910417,hectares:1e-4,inches:1550.003100006,kilometers:1e-6,kilometres:1e-6,meters:1,metres:1,miles:386e-9,millimeters:1e6,millimetres:1e6,yards:1.195990046},e.feature=r,e.geometry=function(t,e,r){switch(void 0===r&&(r={}),t){case\\\"Point\\\":return n(e).geometry;case\\\"LineString\\\":return a(e).geometry;case\\\"Polygon\\\":return i(e).geometry;case\\\"MultiPoint\\\":return l(e).geometry;case\\\"MultiLineString\\\":return s(e).geometry;case\\\"MultiPolygon\\\":return u(e).geometry;default:throw new Error(t+\\\" is invalid\\\")}},e.point=n,e.points=function(t,e,r){return void 0===r&&(r={}),o(t.map((function(t){return n(t,e)})),r)},e.polygon=i,e.polygons=function(t,e,r){return void 0===r&&(r={}),o(t.map((function(t){return i(t,e)})),r)},e.lineString=a,e.lineStrings=function(t,e,r){return void 0===r&&(r={}),o(t.map((function(t){return a(t,e)})),r)},e.featureCollection=o,e.multiLineString=s,e.multiPoint=l,e.multiPolygon=u,e.geometryCollection=function(t,e,n){return void 0===n&&(n={}),r({type:\\\"GeometryCollection\\\",geometries:t},e,n)},e.round=function(t,e){if(void 0===e&&(e=0),e&&!(e>=0))throw new Error(\\\"precision must be a positive number\\\");var r=Math.pow(10,e||0);return Math.round(t*r)/r},e.radiansToLength=c,e.lengthToRadians=f,e.lengthToDegrees=function(t,e){return h(f(t,e))},e.bearingToAzimuth=function(t){var e=t%360;return e<0&&(e+=360),e},e.radiansToDegrees=h,e.degreesToRadians=function(t){return t%360*Math.PI/180},e.convertLength=function(t,e,r){if(void 0===e&&(e=\\\"kilometers\\\"),void 0===r&&(r=\\\"kilometers\\\"),!(t>=0))throw new Error(\\\"length must be a positive number\\\");return c(f(t,e),r)},e.convertArea=function(t,r,n){if(void 0===r&&(r=\\\"meters\\\"),void 0===n&&(n=\\\"kilometers\\\"),!(t>=0))throw new Error(\\\"area must be a positive number\\\");var i=e.areaFactors[r];if(!i)throw new Error(\\\"invalid original units\\\");var a=e.areaFactors[n];if(!a)throw new Error(\\\"invalid final units\\\");return t/i*a},e.isNumber=p,e.isObject=function(t){return!!t&&t.constructor===Object},e.validateBBox=function(t){if(!t)throw new Error(\\\"bbox is required\\\");if(!Array.isArray(t))throw new Error(\\\"bbox must be an Array\\\");if(4!==t.length&&6!==t.length)throw new Error(\\\"bbox must be an Array of 4 or 6 numbers\\\");t.forEach((function(t){if(!p(t))throw new Error(\\\"bbox must only contain numbers\\\")}))},e.validateId=function(t){if(!t)throw new Error(\\\"id is required\\\");if(-1===[\\\"string\\\",\\\"number\\\"].indexOf(typeof t))throw new Error(\\\"id must be a number or a string\\\")}},60302:function(t,e,r){\\\"use strict\\\";Object.defineProperty(e,\\\"__esModule\\\",{value:!0});var n=r(23132);function i(t,e,r){if(null!==t)for(var n,a,o,s,l,u,c,f,h=0,p=0,d=t.type,v=\\\"FeatureCollection\\\"===d,g=\\\"Feature\\\"===d,y=v?t.features.length:1,m=0;m<y;m++){l=(f=!!(c=v?t.features[m].geometry:g?t.geometry:t)&&\\\"GeometryCollection\\\"===c.type)?c.geometries.length:1;for(var x=0;x<l;x++){var b=0,_=0;if(null!==(s=f?c.geometries[x]:c)){u=s.coordinates;var w=s.type;switch(h=!r||\\\"Polygon\\\"!==w&&\\\"MultiPolygon\\\"!==w?0:1,w){case null:break;case\\\"Point\\\":if(!1===e(u,p,m,b,_))return!1;p++,b++;break;case\\\"LineString\\\":case\\\"MultiPoint\\\":for(n=0;n<u.length;n++){if(!1===e(u[n],p,m,b,_))return!1;p++,\\\"MultiPoint\\\"===w&&b++}\\\"LineString\\\"===w&&b++;break;case\\\"Polygon\\\":case\\\"MultiLineString\\\":for(n=0;n<u.length;n++){for(a=0;a<u[n].length-h;a++){if(!1===e(u[n][a],p,m,b,_))return!1;p++}\\\"MultiLineString\\\"===w&&b++,\\\"Polygon\\\"===w&&_++}\\\"Polygon\\\"===w&&b++;break;case\\\"MultiPolygon\\\":for(n=0;n<u.length;n++){for(_=0,a=0;a<u[n].length;a++){for(o=0;o<u[n][a].length-h;o++){if(!1===e(u[n][a][o],p,m,b,_))return!1;p++}_++}b++}break;case\\\"GeometryCollection\\\":for(n=0;n<s.geometries.length;n++)if(!1===i(s.geometries[n],e,r))return!1;break;default:throw new Error(\\\"Unknown Geometry Type\\\")}}}}}function a(t,e){var r;switch(t.type){case\\\"FeatureCollection\\\":for(r=0;r<t.features.length&&!1!==e(t.features[r].properties,r);r++);break;case\\\"Feature\\\":e(t.properties,0)}}function o(t,e){if(\\\"Feature\\\"===t.type)e(t,0);else if(\\\"FeatureCollection\\\"===t.type)for(var r=0;r<t.features.length&&!1!==e(t.features[r],r);r++);}function s(t,e){var r,n,i,a,o,s,l,u,c,f,h=0,p=\\\"FeatureCollection\\\"===t.type,d=\\\"Feature\\\"===t.type,v=p?t.features.length:1;for(r=0;r<v;r++){for(s=p?t.features[r].geometry:d?t.geometry:t,u=p?t.features[r].properties:d?t.properties:{},c=p?t.features[r].bbox:d?t.bbox:void 0,f=p?t.features[r].id:d?t.id:void 0,o=(l=!!s&&\\\"GeometryCollection\\\"===s.type)?s.geometries.length:1,i=0;i<o;i++)if(null!==(a=l?s.geometries[i]:s))switch(a.type){case\\\"Point\\\":case\\\"LineString\\\":case\\\"MultiPoint\\\":case\\\"Polygon\\\":case\\\"MultiLineString\\\":case\\\"MultiPolygon\\\":if(!1===e(a,h,u,c,f))return!1;break;case\\\"GeometryCollection\\\":for(n=0;n<a.geometries.length;n++)if(!1===e(a.geometries[n],h,u,c,f))return!1;break;default:throw new Error(\\\"Unknown Geometry Type\\\")}else if(!1===e(null,h,u,c,f))return!1;h++}}function l(t,e){s(t,(function(t,r,i,a,o){var s,l=null===t?null:t.type;switch(l){case null:case\\\"Point\\\":case\\\"LineString\\\":case\\\"Polygon\\\":return!1!==e(n.feature(t,i,{bbox:a,id:o}),r,0)&&void 0}switch(l){case\\\"MultiPoint\\\":s=\\\"Point\\\";break;case\\\"MultiLineString\\\":s=\\\"LineString\\\";break;case\\\"MultiPolygon\\\":s=\\\"Polygon\\\"}for(var u=0;u<t.coordinates.length;u++){var c={type:s,coordinates:t.coordinates[u]};if(!1===e(n.feature(c,i),r,u))return!1}}))}function u(t,e){l(t,(function(t,r,a){var o=0;if(t.geometry){var s=t.geometry.type;if(\\\"Point\\\"!==s&&\\\"MultiPoint\\\"!==s){var l,u=0,c=0,f=0;return!1!==i(t,(function(i,s,h,p,d){if(void 0===l||r>u||p>c||d>f)return l=i,u=r,c=p,f=d,void(o=0);var v=n.lineString([l,i],t.properties);if(!1===e(v,r,a,d,o))return!1;o++,l=i}))&&void 0}}}))}function c(t,e){if(!t)throw new Error(\\\"geojson is required\\\");l(t,(function(t,r,i){if(null!==t.geometry){var a=t.geometry.type,o=t.geometry.coordinates;switch(a){case\\\"LineString\\\":if(!1===e(t,r,i,0,0))return!1;break;case\\\"Polygon\\\":for(var s=0;s<o.length;s++)if(!1===e(n.lineString(o[s],t.properties),r,i,s))return!1}}}))}e.coordEach=i,e.coordReduce=function(t,e,r,n){var a=r;return i(t,(function(t,n,i,o,s){a=0===n&&void 0===r?t:e(a,t,n,i,o,s)}),n),a},e.propEach=a,e.propReduce=function(t,e,r){var n=r;return a(t,(function(t,i){n=0===i&&void 0===r?t:e(n,t,i)})),n},e.featureEach=o,e.featureReduce=function(t,e,r){var n=r;return o(t,(function(t,i){n=0===i&&void 0===r?t:e(n,t,i)})),n},e.coordAll=function(t){var e=[];return i(t,(function(t){e.push(t)})),e},e.geomEach=s,e.geomReduce=function(t,e,r){var n=r;return s(t,(function(t,i,a,o,s){n=0===i&&void 0===r?t:e(n,t,i,a,o,s)})),n},e.flattenEach=l,e.flattenReduce=function(t,e,r){var n=r;return l(t,(function(t,i,a){n=0===i&&0===a&&void 0===r?t:e(n,t,i,a)})),n},e.segmentEach=u,e.segmentReduce=function(t,e,r){var n=r,i=!1;return u(t,(function(t,a,o,s,l){n=!1===i&&void 0===r?t:e(n,t,a,o,s,l),i=!0})),n},e.lineEach=c,e.lineReduce=function(t,e,r){var n=r;return c(t,(function(t,i,a,o){n=0===i&&void 0===r?t:e(n,t,i,a,o)})),n},e.findSegment=function(t,e){if(e=e||{},!n.isObject(e))throw new Error(\\\"options is invalid\\\");var r,i=e.featureIndex||0,a=e.multiFeatureIndex||0,o=e.geometryIndex||0,s=e.segmentIndex||0,l=e.properties;switch(t.type){case\\\"FeatureCollection\\\":i<0&&(i=t.features.length+i),l=l||t.features[i].properties,r=t.features[i].geometry;break;case\\\"Feature\\\":l=l||t.properties,r=t.geometry;break;case\\\"Point\\\":case\\\"MultiPoint\\\":return null;case\\\"LineString\\\":case\\\"Polygon\\\":case\\\"MultiLineString\\\":case\\\"MultiPolygon\\\":r=t;break;default:throw new Error(\\\"geojson is invalid\\\")}if(null===r)return null;var u=r.coordinates;switch(r.type){case\\\"Point\\\":case\\\"MultiPoint\\\":return null;case\\\"LineString\\\":return s<0&&(s=u.length+s-1),n.lineString([u[s],u[s+1]],l,e);case\\\"Polygon\\\":return o<0&&(o=u.length+o),s<0&&(s=u[o].length+s-1),n.lineString([u[o][s],u[o][s+1]],l,e);case\\\"MultiLineString\\\":return a<0&&(a=u.length+a),s<0&&(s=u[a].length+s-1),n.lineString([u[a][s],u[a][s+1]],l,e);case\\\"MultiPolygon\\\":return a<0&&(a=u.length+a),o<0&&(o=u[a].length+o),s<0&&(s=u[a][o].length-s-1),n.lineString([u[a][o][s],u[a][o][s+1]],l,e)}throw new Error(\\\"geojson is invalid\\\")},e.findPoint=function(t,e){if(e=e||{},!n.isObject(e))throw new Error(\\\"options is invalid\\\");var r,i=e.featureIndex||0,a=e.multiFeatureIndex||0,o=e.geometryIndex||0,s=e.coordIndex||0,l=e.properties;switch(t.type){case\\\"FeatureCollection\\\":i<0&&(i=t.features.length+i),l=l||t.features[i].properties,r=t.features[i].geometry;break;case\\\"Feature\\\":l=l||t.properties,r=t.geometry;break;case\\\"Point\\\":case\\\"MultiPoint\\\":return null;case\\\"LineString\\\":case\\\"Polygon\\\":case\\\"MultiLineString\\\":case\\\"MultiPolygon\\\":r=t;break;default:throw new Error(\\\"geojson is invalid\\\")}if(null===r)return null;var u=r.coordinates;switch(r.type){case\\\"Point\\\":return n.point(u,l,e);case\\\"MultiPoint\\\":return a<0&&(a=u.length+a),n.point(u[a],l,e);case\\\"LineString\\\":return s<0&&(s=u.length+s),n.point(u[s],l,e);case\\\"Polygon\\\":return o<0&&(o=u.length+o),s<0&&(s=u[o].length+s),n.point(u[o][s],l,e);case\\\"MultiLineString\\\":return a<0&&(a=u.length+a),s<0&&(s=u[a].length+s),n.point(u[a][s],l,e);case\\\"MultiPolygon\\\":return a<0&&(a=u.length+a),o<0&&(o=u[a].length+o),s<0&&(s=u[a][o].length-s),n.point(u[a][o][s],l,e)}throw new Error(\\\"geojson is invalid\\\")}},85268:function(t,e,r){\\\"use strict\\\";Object.defineProperty(e,\\\"__esModule\\\",{value:!0});var n=r(27138);function i(t){var e=[1/0,1/0,-1/0,-1/0];return n.coordEach(t,(function(t){e[0]>t[0]&&(e[0]=t[0]),e[1]>t[1]&&(e[1]=t[1]),e[2]<t[0]&&(e[2]=t[0]),e[3]<t[1]&&(e[3]=t[1])})),e}i.default=i,e.default=i},94228:function(t,e){\\\"use strict\\\";function r(t,e,r){void 0===r&&(r={});var n={type:\\\"Feature\\\"};return(0===r.id||r.id)&&(n.id=r.id),r.bbox&&(n.bbox=r.bbox),n.properties=e||{},n.geometry=t,n}function n(t,e,n){if(void 0===n&&(n={}),!t)throw new Error(\\\"coordinates is required\\\");if(!Array.isArray(t))throw new Error(\\\"coordinates must be an Array\\\");if(t.length<2)throw new Error(\\\"coordinates must be at least 2 numbers long\\\");if(!p(t[0])||!p(t[1]))throw new Error(\\\"coordinates must contain numbers\\\");return r({type:\\\"Point\\\",coordinates:t},e,n)}function i(t,e,n){void 0===n&&(n={});for(var i=0,a=t;i<a.length;i++){var o=a[i];if(o.length<4)throw new Error(\\\"Each LinearRing of a Polygon must have 4 or more Positions.\\\");for(var s=0;s<o[o.length-1].length;s++)if(o[o.length-1][s]!==o[0][s])throw new Error(\\\"First and last Position are not equivalent.\\\")}return r({type:\\\"Polygon\\\",coordinates:t},e,n)}function a(t,e,n){if(void 0===n&&(n={}),t.length<2)throw new Error(\\\"coordinates must be an array of two or more positions\\\");return r({type:\\\"LineString\\\",coordinates:t},e,n)}function o(t,e){void 0===e&&(e={});var r={type:\\\"FeatureCollection\\\"};return e.id&&(r.id=e.id),e.bbox&&(r.bbox=e.bbox),r.features=t,r}function s(t,e,n){return void 0===n&&(n={}),r({type:\\\"MultiLineString\\\",coordinates:t},e,n)}function l(t,e,n){return void 0===n&&(n={}),r({type:\\\"MultiPoint\\\",coordinates:t},e,n)}function u(t,e,n){return void 0===n&&(n={}),r({type:\\\"MultiPolygon\\\",coordinates:t},e,n)}function c(t,r){void 0===r&&(r=\\\"kilometers\\\");var n=e.factors[r];if(!n)throw new Error(r+\\\" units is invalid\\\");return t*n}function f(t,r){void 0===r&&(r=\\\"kilometers\\\");var n=e.factors[r];if(!n)throw new Error(r+\\\" units is invalid\\\");return t/n}function h(t){return t%(2*Math.PI)*180/Math.PI}function p(t){return!isNaN(t)&&null!==t&&!Array.isArray(t)}Object.defineProperty(e,\\\"__esModule\\\",{value:!0}),e.earthRadius=6371008.8,e.factors={centimeters:100*e.earthRadius,centimetres:100*e.earthRadius,degrees:e.earthRadius/111325,feet:3.28084*e.earthRadius,inches:39.37*e.earthRadius,kilometers:e.earthRadius/1e3,kilometres:e.earthRadius/1e3,meters:e.earthRadius,metres:e.earthRadius,miles:e.earthRadius/1609.344,millimeters:1e3*e.earthRadius,millimetres:1e3*e.earthRadius,nauticalmiles:e.earthRadius/1852,radians:1,yards:1.0936*e.earthRadius},e.unitsFactors={centimeters:100,centimetres:100,degrees:1/111325,feet:3.28084,inches:39.37,kilometers:.001,kilometres:.001,meters:1,metres:1,miles:1/1609.344,millimeters:1e3,millimetres:1e3,nauticalmiles:1/1852,radians:1/e.earthRadius,yards:1.0936133},e.areaFactors={acres:247105e-9,centimeters:1e4,centimetres:1e4,feet:10.763910417,hectares:1e-4,inches:1550.003100006,kilometers:1e-6,kilometres:1e-6,meters:1,metres:1,miles:386e-9,millimeters:1e6,millimetres:1e6,yards:1.195990046},e.feature=r,e.geometry=function(t,e,r){switch(void 0===r&&(r={}),t){case\\\"Point\\\":return n(e).geometry;case\\\"LineString\\\":return a(e).geometry;case\\\"Polygon\\\":return i(e).geometry;case\\\"MultiPoint\\\":return l(e).geometry;case\\\"MultiLineString\\\":return s(e).geometry;case\\\"MultiPolygon\\\":return u(e).geometry;default:throw new Error(t+\\\" is invalid\\\")}},e.point=n,e.points=function(t,e,r){return void 0===r&&(r={}),o(t.map((function(t){return n(t,e)})),r)},e.polygon=i,e.polygons=function(t,e,r){return void 0===r&&(r={}),o(t.map((function(t){return i(t,e)})),r)},e.lineString=a,e.lineStrings=function(t,e,r){return void 0===r&&(r={}),o(t.map((function(t){return a(t,e)})),r)},e.featureCollection=o,e.multiLineString=s,e.multiPoint=l,e.multiPolygon=u,e.geometryCollection=function(t,e,n){return void 0===n&&(n={}),r({type:\\\"GeometryCollection\\\",geometries:t},e,n)},e.round=function(t,e){if(void 0===e&&(e=0),e&&!(e>=0))throw new Error(\\\"precision must be a positive number\\\");var r=Math.pow(10,e||0);return Math.round(t*r)/r},e.radiansToLength=c,e.lengthToRadians=f,e.lengthToDegrees=function(t,e){return h(f(t,e))},e.bearingToAzimuth=function(t){var e=t%360;return e<0&&(e+=360),e},e.radiansToDegrees=h,e.degreesToRadians=function(t){return t%360*Math.PI/180},e.convertLength=function(t,e,r){if(void 0===e&&(e=\\\"kilometers\\\"),void 0===r&&(r=\\\"kilometers\\\"),!(t>=0))throw new Error(\\\"length must be a positive number\\\");return c(f(t,e),r)},e.convertArea=function(t,r,n){if(void 0===r&&(r=\\\"meters\\\"),void 0===n&&(n=\\\"kilometers\\\"),!(t>=0))throw new Error(\\\"area must be a positive number\\\");var i=e.areaFactors[r];if(!i)throw new Error(\\\"invalid original units\\\");var a=e.areaFactors[n];if(!a)throw new Error(\\\"invalid final units\\\");return t/i*a},e.isNumber=p,e.isObject=function(t){return!!t&&t.constructor===Object},e.validateBBox=function(t){if(!t)throw new Error(\\\"bbox is required\\\");if(!Array.isArray(t))throw new Error(\\\"bbox must be an Array\\\");if(4!==t.length&&6!==t.length)throw new Error(\\\"bbox must be an Array of 4 or 6 numbers\\\");t.forEach((function(t){if(!p(t))throw new Error(\\\"bbox must only contain numbers\\\")}))},e.validateId=function(t){if(!t)throw new Error(\\\"id is required\\\");if(-1===[\\\"string\\\",\\\"number\\\"].indexOf(typeof t))throw new Error(\\\"id must be a number or a string\\\")}},27138:function(t,e,r){\\\"use strict\\\";Object.defineProperty(e,\\\"__esModule\\\",{value:!0});var n=r(94228);function i(t,e,r){if(null!==t)for(var n,a,o,s,l,u,c,f,h=0,p=0,d=t.type,v=\\\"FeatureCollection\\\"===d,g=\\\"Feature\\\"===d,y=v?t.features.length:1,m=0;m<y;m++){l=(f=!!(c=v?t.features[m].geometry:g?t.geometry:t)&&\\\"GeometryCollection\\\"===c.type)?c.geometries.length:1;for(var x=0;x<l;x++){var b=0,_=0;if(null!==(s=f?c.geometries[x]:c)){u=s.coordinates;var w=s.type;switch(h=!r||\\\"Polygon\\\"!==w&&\\\"MultiPolygon\\\"!==w?0:1,w){case null:break;case\\\"Point\\\":if(!1===e(u,p,m,b,_))return!1;p++,b++;break;case\\\"LineString\\\":case\\\"MultiPoint\\\":for(n=0;n<u.length;n++){if(!1===e(u[n],p,m,b,_))return!1;p++,\\\"MultiPoint\\\"===w&&b++}\\\"LineString\\\"===w&&b++;break;case\\\"Polygon\\\":case\\\"MultiLineString\\\":for(n=0;n<u.length;n++){for(a=0;a<u[n].length-h;a++){if(!1===e(u[n][a],p,m,b,_))return!1;p++}\\\"MultiLineString\\\"===w&&b++,\\\"Polygon\\\"===w&&_++}\\\"Polygon\\\"===w&&b++;break;case\\\"MultiPolygon\\\":for(n=0;n<u.length;n++){for(_=0,a=0;a<u[n].length;a++){for(o=0;o<u[n][a].length-h;o++){if(!1===e(u[n][a][o],p,m,b,_))return!1;p++}_++}b++}break;case\\\"GeometryCollection\\\":for(n=0;n<s.geometries.length;n++)if(!1===i(s.geometries[n],e,r))return!1;break;default:throw new Error(\\\"Unknown Geometry Type\\\")}}}}}function a(t,e){var r;switch(t.type){case\\\"FeatureCollection\\\":for(r=0;r<t.features.length&&!1!==e(t.features[r].properties,r);r++);break;case\\\"Feature\\\":e(t.properties,0)}}function o(t,e){if(\\\"Feature\\\"===t.type)e(t,0);else if(\\\"FeatureCollection\\\"===t.type)for(var r=0;r<t.features.length&&!1!==e(t.features[r],r);r++);}function s(t,e){var r,n,i,a,o,s,l,u,c,f,h=0,p=\\\"FeatureCollection\\\"===t.type,d=\\\"Feature\\\"===t.type,v=p?t.features.length:1;for(r=0;r<v;r++){for(s=p?t.features[r].geometry:d?t.geometry:t,u=p?t.features[r].properties:d?t.properties:{},c=p?t.features[r].bbox:d?t.bbox:void 0,f=p?t.features[r].id:d?t.id:void 0,o=(l=!!s&&\\\"GeometryCollection\\\"===s.type)?s.geometries.length:1,i=0;i<o;i++)if(null!==(a=l?s.geometries[i]:s))switch(a.type){case\\\"Point\\\":case\\\"LineString\\\":case\\\"MultiPoint\\\":case\\\"Polygon\\\":case\\\"MultiLineString\\\":case\\\"MultiPolygon\\\":if(!1===e(a,h,u,c,f))return!1;break;case\\\"GeometryCollection\\\":for(n=0;n<a.geometries.length;n++)if(!1===e(a.geometries[n],h,u,c,f))return!1;break;default:throw new Error(\\\"Unknown Geometry Type\\\")}else if(!1===e(null,h,u,c,f))return!1;h++}}function l(t,e){s(t,(function(t,r,i,a,o){var s,l=null===t?null:t.type;switch(l){case null:case\\\"Point\\\":case\\\"LineString\\\":case\\\"Polygon\\\":return!1!==e(n.feature(t,i,{bbox:a,id:o}),r,0)&&void 0}switch(l){case\\\"MultiPoint\\\":s=\\\"Point\\\";break;case\\\"MultiLineString\\\":s=\\\"LineString\\\";break;case\\\"MultiPolygon\\\":s=\\\"Polygon\\\"}for(var u=0;u<t.coordinates.length;u++){var c={type:s,coordinates:t.coordinates[u]};if(!1===e(n.feature(c,i),r,u))return!1}}))}function u(t,e){l(t,(function(t,r,a){var o=0;if(t.geometry){var s=t.geometry.type;if(\\\"Point\\\"!==s&&\\\"MultiPoint\\\"!==s){var l,u=0,c=0,f=0;return!1!==i(t,(function(i,s,h,p,d){if(void 0===l||r>u||p>c||d>f)return l=i,u=r,c=p,f=d,void(o=0);var v=n.lineString([l,i],t.properties);if(!1===e(v,r,a,d,o))return!1;o++,l=i}))&&void 0}}}))}function c(t,e){if(!t)throw new Error(\\\"geojson is required\\\");l(t,(function(t,r,i){if(null!==t.geometry){var a=t.geometry.type,o=t.geometry.coordinates;switch(a){case\\\"LineString\\\":if(!1===e(t,r,i,0,0))return!1;break;case\\\"Polygon\\\":for(var s=0;s<o.length;s++)if(!1===e(n.lineString(o[s],t.properties),r,i,s))return!1}}}))}e.coordEach=i,e.coordReduce=function(t,e,r,n){var a=r;return i(t,(function(t,n,i,o,s){a=0===n&&void 0===r?t:e(a,t,n,i,o,s)}),n),a},e.propEach=a,e.propReduce=function(t,e,r){var n=r;return a(t,(function(t,i){n=0===i&&void 0===r?t:e(n,t,i)})),n},e.featureEach=o,e.featureReduce=function(t,e,r){var n=r;return o(t,(function(t,i){n=0===i&&void 0===r?t:e(n,t,i)})),n},e.coordAll=function(t){var e=[];return i(t,(function(t){e.push(t)})),e},e.geomEach=s,e.geomReduce=function(t,e,r){var n=r;return s(t,(function(t,i,a,o,s){n=0===i&&void 0===r?t:e(n,t,i,a,o,s)})),n},e.flattenEach=l,e.flattenReduce=function(t,e,r){var n=r;return l(t,(function(t,i,a){n=0===i&&0===a&&void 0===r?t:e(n,t,i,a)})),n},e.segmentEach=u,e.segmentReduce=function(t,e,r){var n=r,i=!1;return u(t,(function(t,a,o,s,l){n=!1===i&&void 0===r?t:e(n,t,a,o,s,l),i=!0})),n},e.lineEach=c,e.lineReduce=function(t,e,r){var n=r;return c(t,(function(t,i,a,o){n=0===i&&void 0===r?t:e(n,t,i,a,o)})),n},e.findSegment=function(t,e){if(e=e||{},!n.isObject(e))throw new Error(\\\"options is invalid\\\");var r,i=e.featureIndex||0,a=e.multiFeatureIndex||0,o=e.geometryIndex||0,s=e.segmentIndex||0,l=e.properties;switch(t.type){case\\\"FeatureCollection\\\":i<0&&(i=t.features.length+i),l=l||t.features[i].properties,r=t.features[i].geometry;break;case\\\"Feature\\\":l=l||t.properties,r=t.geometry;break;case\\\"Point\\\":case\\\"MultiPoint\\\":return null;case\\\"LineString\\\":case\\\"Polygon\\\":case\\\"MultiLineString\\\":case\\\"MultiPolygon\\\":r=t;break;default:throw new Error(\\\"geojson is invalid\\\")}if(null===r)return null;var u=r.coordinates;switch(r.type){case\\\"Point\\\":case\\\"MultiPoint\\\":return null;case\\\"LineString\\\":return s<0&&(s=u.length+s-1),n.lineString([u[s],u[s+1]],l,e);case\\\"Polygon\\\":return o<0&&(o=u.length+o),s<0&&(s=u[o].length+s-1),n.lineString([u[o][s],u[o][s+1]],l,e);case\\\"MultiLineString\\\":return a<0&&(a=u.length+a),s<0&&(s=u[a].length+s-1),n.lineString([u[a][s],u[a][s+1]],l,e);case\\\"MultiPolygon\\\":return a<0&&(a=u.length+a),o<0&&(o=u[a].length+o),s<0&&(s=u[a][o].length-s-1),n.lineString([u[a][o][s],u[a][o][s+1]],l,e)}throw new Error(\\\"geojson is invalid\\\")},e.findPoint=function(t,e){if(e=e||{},!n.isObject(e))throw new Error(\\\"options is invalid\\\");var r,i=e.featureIndex||0,a=e.multiFeatureIndex||0,o=e.geometryIndex||0,s=e.coordIndex||0,l=e.properties;switch(t.type){case\\\"FeatureCollection\\\":i<0&&(i=t.features.length+i),l=l||t.features[i].properties,r=t.features[i].geometry;break;case\\\"Feature\\\":l=l||t.properties,r=t.geometry;break;case\\\"Point\\\":case\\\"MultiPoint\\\":return null;case\\\"LineString\\\":case\\\"Polygon\\\":case\\\"MultiLineString\\\":case\\\"MultiPolygon\\\":r=t;break;default:throw new Error(\\\"geojson is invalid\\\")}if(null===r)return null;var u=r.coordinates;switch(r.type){case\\\"Point\\\":return n.point(u,l,e);case\\\"MultiPoint\\\":return a<0&&(a=u.length+a),n.point(u[a],l,e);case\\\"LineString\\\":return s<0&&(s=u.length+s),n.point(u[s],l,e);case\\\"Polygon\\\":return o<0&&(o=u.length+o),s<0&&(s=u[o].length+s),n.point(u[o][s],l,e);case\\\"MultiLineString\\\":return a<0&&(a=u.length+a),s<0&&(s=u[a].length+s),n.point(u[a][s],l,e);case\\\"MultiPolygon\\\":return a<0&&(a=u.length+a),o<0&&(o=u[a].length+o),s<0&&(s=u[a][o].length-s),n.point(u[a][o][s],l,e)}throw new Error(\\\"geojson is invalid\\\")}},29261:function(t,e,r){\\\"use strict\\\";Object.defineProperty(e,\\\"__esModule\\\",{value:!0});var n=r(88553),i=r(64182);e.default=function(t,e){void 0===e&&(e={});var r=0,a=0,o=0;return n.coordEach(t,(function(t){r+=t[0],a+=t[1],o++})),i.point([r/o,a/o],e.properties)}},64182:function(t,e){\\\"use strict\\\";function r(t,e,r){void 0===r&&(r={});var n={type:\\\"Feature\\\"};return(0===r.id||r.id)&&(n.id=r.id),r.bbox&&(n.bbox=r.bbox),n.properties=e||{},n.geometry=t,n}function n(t,e,n){return void 0===n&&(n={}),r({type:\\\"Point\\\",coordinates:t},e,n)}function i(t,e,n){void 0===n&&(n={});for(var i=0,a=t;i<a.length;i++){var o=a[i];if(o.length<4)throw new Error(\\\"Each LinearRing of a Polygon must have 4 or more Positions.\\\");for(var s=0;s<o[o.length-1].length;s++)if(o[o.length-1][s]!==o[0][s])throw new Error(\\\"First and last Position are not equivalent.\\\")}return r({type:\\\"Polygon\\\",coordinates:t},e,n)}function a(t,e,n){if(void 0===n&&(n={}),t.length<2)throw new Error(\\\"coordinates must be an array of two or more positions\\\");return r({type:\\\"LineString\\\",coordinates:t},e,n)}function o(t,e){void 0===e&&(e={});var r={type:\\\"FeatureCollection\\\"};return e.id&&(r.id=e.id),e.bbox&&(r.bbox=e.bbox),r.features=t,r}function s(t,e,n){return void 0===n&&(n={}),r({type:\\\"MultiLineString\\\",coordinates:t},e,n)}function l(t,e,n){return void 0===n&&(n={}),r({type:\\\"MultiPoint\\\",coordinates:t},e,n)}function u(t,e,n){return void 0===n&&(n={}),r({type:\\\"MultiPolygon\\\",coordinates:t},e,n)}function c(t,r){void 0===r&&(r=\\\"kilometers\\\");var n=e.factors[r];if(!n)throw new Error(r+\\\" units is invalid\\\");return t*n}function f(t,r){void 0===r&&(r=\\\"kilometers\\\");var n=e.factors[r];if(!n)throw new Error(r+\\\" units is invalid\\\");return t/n}function h(t){return t%(2*Math.PI)*180/Math.PI}function p(t){return!isNaN(t)&&null!==t&&!Array.isArray(t)&&!/^\\\\s*$/.test(t)}Object.defineProperty(e,\\\"__esModule\\\",{value:!0}),e.earthRadius=6371008.8,e.factors={centimeters:100*e.earthRadius,centimetres:100*e.earthRadius,degrees:e.earthRadius/111325,feet:3.28084*e.earthRadius,inches:39.37*e.earthRadius,kilometers:e.earthRadius/1e3,kilometres:e.earthRadius/1e3,meters:e.earthRadius,metres:e.earthRadius,miles:e.earthRadius/1609.344,millimeters:1e3*e.earthRadius,millimetres:1e3*e.earthRadius,nauticalmiles:e.earthRadius/1852,radians:1,yards:e.earthRadius/1.0936},e.unitsFactors={centimeters:100,centimetres:100,degrees:1/111325,feet:3.28084,inches:39.37,kilometers:.001,kilometres:.001,meters:1,metres:1,miles:1/1609.344,millimeters:1e3,millimetres:1e3,nauticalmiles:1/1852,radians:1/e.earthRadius,yards:1/1.0936},e.areaFactors={acres:247105e-9,centimeters:1e4,centimetres:1e4,feet:10.763910417,inches:1550.003100006,kilometers:1e-6,kilometres:1e-6,meters:1,metres:1,miles:386e-9,millimeters:1e6,millimetres:1e6,yards:1.195990046},e.feature=r,e.geometry=function(t,e,r){switch(void 0===r&&(r={}),t){case\\\"Point\\\":return n(e).geometry;case\\\"LineString\\\":return a(e).geometry;case\\\"Polygon\\\":return i(e).geometry;case\\\"MultiPoint\\\":return l(e).geometry;case\\\"MultiLineString\\\":return s(e).geometry;case\\\"MultiPolygon\\\":return u(e).geometry;default:throw new Error(t+\\\" is invalid\\\")}},e.point=n,e.points=function(t,e,r){return void 0===r&&(r={}),o(t.map((function(t){return n(t,e)})),r)},e.polygon=i,e.polygons=function(t,e,r){return void 0===r&&(r={}),o(t.map((function(t){return i(t,e)})),r)},e.lineString=a,e.lineStrings=function(t,e,r){return void 0===r&&(r={}),o(t.map((function(t){return a(t,e)})),r)},e.featureCollection=o,e.multiLineString=s,e.multiPoint=l,e.multiPolygon=u,e.geometryCollection=function(t,e,n){return void 0===n&&(n={}),r({type:\\\"GeometryCollection\\\",geometries:t},e,n)},e.round=function(t,e){if(void 0===e&&(e=0),e&&!(e>=0))throw new Error(\\\"precision must be a positive number\\\");var r=Math.pow(10,e||0);return Math.round(t*r)/r},e.radiansToLength=c,e.lengthToRadians=f,e.lengthToDegrees=function(t,e){return h(f(t,e))},e.bearingToAzimuth=function(t){var e=t%360;return e<0&&(e+=360),e},e.radiansToDegrees=h,e.degreesToRadians=function(t){return t%360*Math.PI/180},e.convertLength=function(t,e,r){if(void 0===e&&(e=\\\"kilometers\\\"),void 0===r&&(r=\\\"kilometers\\\"),!(t>=0))throw new Error(\\\"length must be a positive number\\\");return c(f(t,e),r)},e.convertArea=function(t,r,n){if(void 0===r&&(r=\\\"meters\\\"),void 0===n&&(n=\\\"kilometers\\\"),!(t>=0))throw new Error(\\\"area must be a positive number\\\");var i=e.areaFactors[r];if(!i)throw new Error(\\\"invalid original units\\\");var a=e.areaFactors[n];if(!a)throw new Error(\\\"invalid final units\\\");return t/i*a},e.isNumber=p,e.isObject=function(t){return!!t&&t.constructor===Object},e.validateBBox=function(t){if(!t)throw new Error(\\\"bbox is required\\\");if(!Array.isArray(t))throw new Error(\\\"bbox must be an Array\\\");if(4!==t.length&&6!==t.length)throw new Error(\\\"bbox must be an Array of 4 or 6 numbers\\\");t.forEach((function(t){if(!p(t))throw new Error(\\\"bbox must only contain numbers\\\")}))},e.validateId=function(t){if(!t)throw new Error(\\\"id is required\\\");if(-1===[\\\"string\\\",\\\"number\\\"].indexOf(typeof t))throw new Error(\\\"id must be a number or a string\\\")},e.radians2degrees=function(){throw new Error(\\\"method has been renamed to `radiansToDegrees`\\\")},e.degrees2radians=function(){throw new Error(\\\"method has been renamed to `degreesToRadians`\\\")},e.distanceToDegrees=function(){throw new Error(\\\"method has been renamed to `lengthToDegrees`\\\")},e.distanceToRadians=function(){throw new Error(\\\"method has been renamed to `lengthToRadians`\\\")},e.radiansToDistance=function(){throw new Error(\\\"method has been renamed to `radiansToLength`\\\")},e.bearingToAngle=function(){throw new Error(\\\"method has been renamed to `bearingToAzimuth`\\\")},e.convertDistance=function(){throw new Error(\\\"method has been renamed to `convertLength`\\\")}},88553:function(t,e,r){\\\"use strict\\\";Object.defineProperty(e,\\\"__esModule\\\",{value:!0});var n=r(64182);function i(t,e,r){if(null!==t)for(var n,a,o,s,l,u,c,f,h=0,p=0,d=t.type,v=\\\"FeatureCollection\\\"===d,g=\\\"Feature\\\"===d,y=v?t.features.length:1,m=0;m<y;m++){l=(f=!!(c=v?t.features[m].geometry:g?t.geometry:t)&&\\\"GeometryCollection\\\"===c.type)?c.geometries.length:1;for(var x=0;x<l;x++){var b=0,_=0;if(null!==(s=f?c.geometries[x]:c)){u=s.coordinates;var w=s.type;switch(h=!r||\\\"Polygon\\\"!==w&&\\\"MultiPolygon\\\"!==w?0:1,w){case null:break;case\\\"Point\\\":if(!1===e(u,p,m,b,_))return!1;p++,b++;break;case\\\"LineString\\\":case\\\"MultiPoint\\\":for(n=0;n<u.length;n++){if(!1===e(u[n],p,m,b,_))return!1;p++,\\\"MultiPoint\\\"===w&&b++}\\\"LineString\\\"===w&&b++;break;case\\\"Polygon\\\":case\\\"MultiLineString\\\":for(n=0;n<u.length;n++){for(a=0;a<u[n].length-h;a++){if(!1===e(u[n][a],p,m,b,_))return!1;p++}\\\"MultiLineString\\\"===w&&b++,\\\"Polygon\\\"===w&&_++}\\\"Polygon\\\"===w&&b++;break;case\\\"MultiPolygon\\\":for(n=0;n<u.length;n++){for(_=0,a=0;a<u[n].length;a++){for(o=0;o<u[n][a].length-h;o++){if(!1===e(u[n][a][o],p,m,b,_))return!1;p++}_++}b++}break;case\\\"GeometryCollection\\\":for(n=0;n<s.geometries.length;n++)if(!1===i(s.geometries[n],e,r))return!1;break;default:throw new Error(\\\"Unknown Geometry Type\\\")}}}}}function a(t,e){var r;switch(t.type){case\\\"FeatureCollection\\\":for(r=0;r<t.features.length&&!1!==e(t.features[r].properties,r);r++);break;case\\\"Feature\\\":e(t.properties,0)}}function o(t,e){if(\\\"Feature\\\"===t.type)e(t,0);else if(\\\"FeatureCollection\\\"===t.type)for(var r=0;r<t.features.length&&!1!==e(t.features[r],r);r++);}function s(t,e){var r,n,i,a,o,s,l,u,c,f,h=0,p=\\\"FeatureCollection\\\"===t.type,d=\\\"Feature\\\"===t.type,v=p?t.features.length:1;for(r=0;r<v;r++){for(s=p?t.features[r].geometry:d?t.geometry:t,u=p?t.features[r].properties:d?t.properties:{},c=p?t.features[r].bbox:d?t.bbox:void 0,f=p?t.features[r].id:d?t.id:void 0,o=(l=!!s&&\\\"GeometryCollection\\\"===s.type)?s.geometries.length:1,i=0;i<o;i++)if(null!==(a=l?s.geometries[i]:s))switch(a.type){case\\\"Point\\\":case\\\"LineString\\\":case\\\"MultiPoint\\\":case\\\"Polygon\\\":case\\\"MultiLineString\\\":case\\\"MultiPolygon\\\":if(!1===e(a,h,u,c,f))return!1;break;case\\\"GeometryCollection\\\":for(n=0;n<a.geometries.length;n++)if(!1===e(a.geometries[n],h,u,c,f))return!1;break;default:throw new Error(\\\"Unknown Geometry Type\\\")}else if(!1===e(null,h,u,c,f))return!1;h++}}function l(t,e){s(t,(function(t,r,i,a,o){var s,l=null===t?null:t.type;switch(l){case null:case\\\"Point\\\":case\\\"LineString\\\":case\\\"Polygon\\\":return!1!==e(n.feature(t,i,{bbox:a,id:o}),r,0)&&void 0}switch(l){case\\\"MultiPoint\\\":s=\\\"Point\\\";break;case\\\"MultiLineString\\\":s=\\\"LineString\\\";break;case\\\"MultiPolygon\\\":s=\\\"Polygon\\\"}for(var u=0;u<t.coordinates.length;u++){var c={type:s,coordinates:t.coordinates[u]};if(!1===e(n.feature(c,i),r,u))return!1}}))}function u(t,e){l(t,(function(t,r,a){var o=0;if(t.geometry){var s=t.geometry.type;if(\\\"Point\\\"!==s&&\\\"MultiPoint\\\"!==s){var l,u=0,c=0,f=0;return!1!==i(t,(function(i,s,h,p,d){if(void 0===l||r>u||p>c||d>f)return l=i,u=r,c=p,f=d,void(o=0);var v=n.lineString([l,i],t.properties);if(!1===e(v,r,a,d,o))return!1;o++,l=i}))&&void 0}}}))}function c(t,e){if(!t)throw new Error(\\\"geojson is required\\\");l(t,(function(t,r,i){if(null!==t.geometry){var a=t.geometry.type,o=t.geometry.coordinates;switch(a){case\\\"LineString\\\":if(!1===e(t,r,i,0,0))return!1;break;case\\\"Polygon\\\":for(var s=0;s<o.length;s++)if(!1===e(n.lineString(o[s],t.properties),r,i,s))return!1}}}))}e.coordEach=i,e.coordReduce=function(t,e,r,n){var a=r;return i(t,(function(t,n,i,o,s){a=0===n&&void 0===r?t:e(a,t,n,i,o,s)}),n),a},e.propEach=a,e.propReduce=function(t,e,r){var n=r;return a(t,(function(t,i){n=0===i&&void 0===r?t:e(n,t,i)})),n},e.featureEach=o,e.featureReduce=function(t,e,r){var n=r;return o(t,(function(t,i){n=0===i&&void 0===r?t:e(n,t,i)})),n},e.coordAll=function(t){var e=[];return i(t,(function(t){e.push(t)})),e},e.geomEach=s,e.geomReduce=function(t,e,r){var n=r;return s(t,(function(t,i,a,o,s){n=0===i&&void 0===r?t:e(n,t,i,a,o,s)})),n},e.flattenEach=l,e.flattenReduce=function(t,e,r){var n=r;return l(t,(function(t,i,a){n=0===i&&0===a&&void 0===r?t:e(n,t,i,a)})),n},e.segmentEach=u,e.segmentReduce=function(t,e,r){var n=r,i=!1;return u(t,(function(t,a,o,s,l){n=!1===i&&void 0===r?t:e(n,t,a,o,s,l),i=!0})),n},e.lineEach=c,e.lineReduce=function(t,e,r){var n=r;return c(t,(function(t,i,a,o){n=0===i&&void 0===r?t:e(n,t,i,a,o)})),n},e.findSegment=function(t,e){if(e=e||{},!n.isObject(e))throw new Error(\\\"options is invalid\\\");var r,i=e.featureIndex||0,a=e.multiFeatureIndex||0,o=e.geometryIndex||0,s=e.segmentIndex||0,l=e.properties;switch(t.type){case\\\"FeatureCollection\\\":i<0&&(i=t.features.length+i),l=l||t.features[i].properties,r=t.features[i].geometry;break;case\\\"Feature\\\":l=l||t.properties,r=t.geometry;break;case\\\"Point\\\":case\\\"MultiPoint\\\":return null;case\\\"LineString\\\":case\\\"Polygon\\\":case\\\"MultiLineString\\\":case\\\"MultiPolygon\\\":r=t;break;default:throw new Error(\\\"geojson is invalid\\\")}if(null===r)return null;var u=r.coordinates;switch(r.type){case\\\"Point\\\":case\\\"MultiPoint\\\":return null;case\\\"LineString\\\":return s<0&&(s=u.length+s-1),n.lineString([u[s],u[s+1]],l,e);case\\\"Polygon\\\":return o<0&&(o=u.length+o),s<0&&(s=u[o].length+s-1),n.lineString([u[o][s],u[o][s+1]],l,e);case\\\"MultiLineString\\\":return a<0&&(a=u.length+a),s<0&&(s=u[a].length+s-1),n.lineString([u[a][s],u[a][s+1]],l,e);case\\\"MultiPolygon\\\":return a<0&&(a=u.length+a),o<0&&(o=u[a].length+o),s<0&&(s=u[a][o].length-s-1),n.lineString([u[a][o][s],u[a][o][s+1]],l,e)}throw new Error(\\\"geojson is invalid\\\")},e.findPoint=function(t,e){if(e=e||{},!n.isObject(e))throw new Error(\\\"options is invalid\\\");var r,i=e.featureIndex||0,a=e.multiFeatureIndex||0,o=e.geometryIndex||0,s=e.coordIndex||0,l=e.properties;switch(t.type){case\\\"FeatureCollection\\\":i<0&&(i=t.features.length+i),l=l||t.features[i].properties,r=t.features[i].geometry;break;case\\\"Feature\\\":l=l||t.properties,r=t.geometry;break;case\\\"Point\\\":case\\\"MultiPoint\\\":return null;case\\\"LineString\\\":case\\\"Polygon\\\":case\\\"MultiLineString\\\":case\\\"MultiPolygon\\\":r=t;break;default:throw new Error(\\\"geojson is invalid\\\")}if(null===r)return null;var u=r.coordinates;switch(r.type){case\\\"Point\\\":return n.point(u,l,e);case\\\"MultiPoint\\\":return a<0&&(a=u.length+a),n.point(u[a],l,e);case\\\"LineString\\\":return s<0&&(s=u.length+s),n.point(u[s],l,e);case\\\"Polygon\\\":return o<0&&(o=u.length+o),s<0&&(s=u[o].length+s),n.point(u[o][s],l,e);case\\\"MultiLineString\\\":return a<0&&(a=u.length+a),s<0&&(s=u[a].length+s),n.point(u[a][s],l,e);case\\\"MultiPolygon\\\":return a<0&&(a=u.length+a),o<0&&(o=u[a].length+o),s<0&&(s=u[a][o].length-s),n.point(u[a][o][s],l,e)}throw new Error(\\\"geojson is invalid\\\")}},65185:function(t){t.exports=function(t){var e=0,r=0,n=0,i=0;return t.map((function(t){var a=(t=t.slice())[0],o=a.toUpperCase();if(a!=o)switch(t[0]=o,a){case\\\"a\\\":t[6]+=n,t[7]+=i;break;case\\\"v\\\":t[1]+=i;break;case\\\"h\\\":t[1]+=n;break;default:for(var s=1;s<t.length;)t[s++]+=n,t[s++]+=i}switch(o){case\\\"Z\\\":n=e,i=r;break;case\\\"H\\\":n=t[1];break;case\\\"V\\\":i=t[1];break;case\\\"M\\\":n=e=t[1],i=r=t[2];break;default:n=t[t.length-2],i=t[t.length-1]}return t}))}},21527:function(t){\\\"use strict\\\";t.exports=function(t,e){if(!t||null==t.length)throw Error(\\\"Argument should be an array\\\");e=null==e?1:Math.floor(e);for(var r=Array(2*e),n=0;n<e;n++){for(var i=-1/0,a=1/0,o=n,s=t.length;o<s;o+=e)t[o]>i&&(i=t[o]),t[o]<a&&(a=t[o]);r[n]=a,r[e+n]=i}return r}},6851:function(t){\\\"use strict\\\";t.exports=function(t,e,r){if(\\\"function\\\"==typeof Array.prototype.findIndex)return t.findIndex(e,r);if(\\\"function\\\"!=typeof e)throw new TypeError(\\\"predicate must be a function\\\");var n=Object(t),i=n.length;if(0===i)return-1;for(var a=0;a<i;a++)if(e.call(r,n[a],a,n))return a;return-1}},54:function(t,e,r){\\\"use strict\\\";var n=r(21527);t.exports=function(t,e,r){if(!t||null==t.length)throw Error(\\\"Argument should be an array\\\");null==e&&(e=1),null==r&&(r=n(t,e));for(var i=0;i<e;i++){var a=r[e+i],o=r[i],s=i,l=t.length;if(a===1/0&&o===-1/0)for(s=i;s<l;s+=e)t[s]=t[s]===a?1:t[s]===o?0:.5;else if(a===1/0)for(s=i;s<l;s+=e)t[s]=t[s]===a?1:0;else if(o===-1/0)for(s=i;s<l;s+=e)t[s]=t[s]===o?0:1;else{var u=a-o;for(s=i;s<l;s+=e)isNaN(t[s])||(t[s]=0===u?.5:(t[s]-o)/u)}}return t}},57471:function(t){t.exports=function(t,e){var r=\\\"number\\\"==typeof t,n=\\\"number\\\"==typeof e;r&&!n?(e=t,t=0):r||n||(t=0,e=0);var i=(e|=0)-(t|=0);if(i<0)throw new Error(\\\"array length must be positive\\\");for(var a=new Array(i),o=0,s=t;o<i;o++,s++)a[o]=s;return a}},32791:function(t,e,r){\\\"use strict\\\";var n=r(90386);function i(t){return i=\\\"function\\\"==typeof Symbol&&\\\"symbol\\\"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&\\\"function\\\"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?\\\"symbol\\\":typeof t},i(t)}var a,o,s=r(79616).codes,l=s.ERR_AMBIGUOUS_ARGUMENT,u=s.ERR_INVALID_ARG_TYPE,c=s.ERR_INVALID_ARG_VALUE,f=s.ERR_INVALID_RETURN_VALUE,h=s.ERR_MISSING_ARGS,p=r(73894),d=r(43827).inspect,v=r(43827).types,g=v.isPromise,y=v.isRegExp,m=Object.assign?Object.assign:r(73523).assign,x=Object.is?Object.is:r(64003);function b(){var t=r(74061);a=t.isDeepEqual,o=t.isDeepStrictEqual}new Map;var _=!1,w=t.exports=M,T={};function k(t){if(t.message instanceof Error)throw t.message;throw new p(t)}function A(t,e,r,n){if(!r){var i=!1;if(0===e)i=!0,n=\\\"No value argument passed to `assert.ok()`\\\";else if(n instanceof Error)throw n;var a=new p({actual:r,expected:!0,message:n,operator:\\\"==\\\",stackStartFn:t});throw a.generatedMessage=i,a}}function M(){for(var t=arguments.length,e=new Array(t),r=0;r<t;r++)e[r]=arguments[r];A.apply(void 0,[M,e.length].concat(e))}w.fail=function t(e,r,i,a,o){var s,l=arguments.length;if(0===l?s=\\\"Failed\\\":1===l?(i=e,e=void 0):(!1===_&&(_=!0,(n.emitWarning?n.emitWarning:console.warn.bind(console))(\\\"assert.fail() with more than one argument is deprecated. Please use assert.strictEqual() instead or only pass a message.\\\",\\\"DeprecationWarning\\\",\\\"DEP0094\\\")),2===l&&(a=\\\"!=\\\")),i instanceof Error)throw i;var u={actual:e,expected:r,operator:void 0===a?\\\"fail\\\":a,stackStartFn:o||t};void 0!==i&&(u.message=i);var c=new p(u);throw s&&(c.message=s,c.generatedMessage=!0),c},w.AssertionError=p,w.ok=M,w.equal=function t(e,r,n){if(arguments.length<2)throw new h(\\\"actual\\\",\\\"expected\\\");e!=r&&k({actual:e,expected:r,message:n,operator:\\\"==\\\",stackStartFn:t})},w.notEqual=function t(e,r,n){if(arguments.length<2)throw new h(\\\"actual\\\",\\\"expected\\\");e==r&&k({actual:e,expected:r,message:n,operator:\\\"!=\\\",stackStartFn:t})},w.deepEqual=function t(e,r,n){if(arguments.length<2)throw new h(\\\"actual\\\",\\\"expected\\\");void 0===a&&b(),a(e,r)||k({actual:e,expected:r,message:n,operator:\\\"deepEqual\\\",stackStartFn:t})},w.notDeepEqual=function t(e,r,n){if(arguments.length<2)throw new h(\\\"actual\\\",\\\"expected\\\");void 0===a&&b(),a(e,r)&&k({actual:e,expected:r,message:n,operator:\\\"notDeepEqual\\\",stackStartFn:t})},w.deepStrictEqual=function t(e,r,n){if(arguments.length<2)throw new h(\\\"actual\\\",\\\"expected\\\");void 0===a&&b(),o(e,r)||k({actual:e,expected:r,message:n,operator:\\\"deepStrictEqual\\\",stackStartFn:t})},w.notDeepStrictEqual=function t(e,r,n){if(arguments.length<2)throw new h(\\\"actual\\\",\\\"expected\\\");void 0===a&&b(),o(e,r)&&k({actual:e,expected:r,message:n,operator:\\\"notDeepStrictEqual\\\",stackStartFn:t})},w.strictEqual=function t(e,r,n){if(arguments.length<2)throw new h(\\\"actual\\\",\\\"expected\\\");x(e,r)||k({actual:e,expected:r,message:n,operator:\\\"strictEqual\\\",stackStartFn:t})},w.notStrictEqual=function t(e,r,n){if(arguments.length<2)throw new h(\\\"actual\\\",\\\"expected\\\");x(e,r)&&k({actual:e,expected:r,message:n,operator:\\\"notStrictEqual\\\",stackStartFn:t})};var S=function t(e,r,n){var i=this;!function(t,e){if(!(t instanceof e))throw new TypeError(\\\"Cannot call a class as a function\\\")}(this,t),r.forEach((function(t){t in e&&(void 0!==n&&\\\"string\\\"==typeof n[t]&&y(e[t])&&e[t].test(n[t])?i[t]=n[t]:i[t]=e[t])}))};function E(t,e,r,n){if(\\\"function\\\"!=typeof e){if(y(e))return e.test(t);if(2===arguments.length)throw new u(\\\"expected\\\",[\\\"Function\\\",\\\"RegExp\\\"],e);if(\\\"object\\\"!==i(t)||null===t){var s=new p({actual:t,expected:e,message:r,operator:\\\"deepStrictEqual\\\",stackStartFn:n});throw s.operator=n.name,s}var l=Object.keys(e);if(e instanceof Error)l.push(\\\"name\\\",\\\"message\\\");else if(0===l.length)throw new c(\\\"error\\\",e,\\\"may not be an empty object\\\");return void 0===a&&b(),l.forEach((function(i){\\\"string\\\"==typeof t[i]&&y(e[i])&&e[i].test(t[i])||function(t,e,r,n,i,a){if(!(r in t)||!o(t[r],e[r])){if(!n){var s=new S(t,i),l=new S(e,i,t),u=new p({actual:s,expected:l,operator:\\\"deepStrictEqual\\\",stackStartFn:a});throw u.actual=t,u.expected=e,u.operator=a.name,u}k({actual:t,expected:e,message:n,operator:a.name,stackStartFn:a})}}(t,e,i,r,l,n)})),!0}return void 0!==e.prototype&&t instanceof e||!Error.isPrototypeOf(e)&&!0===e.call({},t)}function L(t){if(\\\"function\\\"!=typeof t)throw new u(\\\"fn\\\",\\\"Function\\\",t);try{t()}catch(t){return t}return T}function C(t){return g(t)||null!==t&&\\\"object\\\"===i(t)&&\\\"function\\\"==typeof t.then&&\\\"function\\\"==typeof t.catch}function P(t){return Promise.resolve().then((function(){var e;if(\\\"function\\\"==typeof t){if(!C(e=t()))throw new f(\\\"instance of Promise\\\",\\\"promiseFn\\\",e)}else{if(!C(t))throw new u(\\\"promiseFn\\\",[\\\"Function\\\",\\\"Promise\\\"],t);e=t}return Promise.resolve().then((function(){return e})).then((function(){return T})).catch((function(t){return t}))}))}function O(t,e,r,n){if(\\\"string\\\"==typeof r){if(4===arguments.length)throw new u(\\\"error\\\",[\\\"Object\\\",\\\"Error\\\",\\\"Function\\\",\\\"RegExp\\\"],r);if(\\\"object\\\"===i(e)&&null!==e){if(e.message===r)throw new l(\\\"error/message\\\",'The error message \\\"'.concat(e.message,'\\\" is identical to the message.'))}else if(e===r)throw new l(\\\"error/message\\\",'The error \\\"'.concat(e,'\\\" is identical to the message.'));n=r,r=void 0}else if(null!=r&&\\\"object\\\"!==i(r)&&\\\"function\\\"!=typeof r)throw new u(\\\"error\\\",[\\\"Object\\\",\\\"Error\\\",\\\"Function\\\",\\\"RegExp\\\"],r);if(e===T){var a=\\\"\\\";r&&r.name&&(a+=\\\" (\\\".concat(r.name,\\\")\\\")),a+=n?\\\": \\\".concat(n):\\\".\\\";var o=\\\"rejects\\\"===t.name?\\\"rejection\\\":\\\"exception\\\";k({actual:void 0,expected:r,operator:t.name,message:\\\"Missing expected \\\".concat(o).concat(a),stackStartFn:t})}if(r&&!E(e,r,n,t))throw e}function I(t,e,r,n){if(e!==T){if(\\\"string\\\"==typeof r&&(n=r,r=void 0),!r||E(e,r)){var i=n?\\\": \\\".concat(n):\\\".\\\",a=\\\"doesNotReject\\\"===t.name?\\\"rejection\\\":\\\"exception\\\";k({actual:e,expected:r,operator:t.name,message:\\\"Got unwanted \\\".concat(a).concat(i,\\\"\\\\n\\\")+'Actual message: \\\"'.concat(e&&e.message,'\\\"'),stackStartFn:t})}throw e}}function D(){for(var t=arguments.length,e=new Array(t),r=0;r<t;r++)e[r]=arguments[r];A.apply(void 0,[D,e.length].concat(e))}w.throws=function t(e){for(var r=arguments.length,n=new Array(r>1?r-1:0),i=1;i<r;i++)n[i-1]=arguments[i];O.apply(void 0,[t,L(e)].concat(n))},w.rejects=function t(e){for(var r=arguments.length,n=new Array(r>1?r-1:0),i=1;i<r;i++)n[i-1]=arguments[i];return P(e).then((function(e){return O.apply(void 0,[t,e].concat(n))}))},w.doesNotThrow=function t(e){for(var r=arguments.length,n=new Array(r>1?r-1:0),i=1;i<r;i++)n[i-1]=arguments[i];I.apply(void 0,[t,L(e)].concat(n))},w.doesNotReject=function t(e){for(var r=arguments.length,n=new Array(r>1?r-1:0),i=1;i<r;i++)n[i-1]=arguments[i];return P(e).then((function(e){return I.apply(void 0,[t,e].concat(n))}))},w.ifError=function t(e){if(null!=e){var r=\\\"ifError got unwanted exception: \\\";\\\"object\\\"===i(e)&&\\\"string\\\"==typeof e.message?0===e.message.length&&e.constructor?r+=e.constructor.name:r+=e.message:r+=d(e);var n=new p({actual:e,expected:null,operator:\\\"ifError\\\",message:r,stackStartFn:t}),a=e.stack;if(\\\"string\\\"==typeof a){var o=a.split(\\\"\\\\n\\\");o.shift();for(var s=n.stack.split(\\\"\\\\n\\\"),l=0;l<o.length;l++){var u=s.indexOf(o[l]);if(-1!==u){s=s.slice(0,u);break}}n.stack=\\\"\\\".concat(s.join(\\\"\\\\n\\\"),\\\"\\\\n\\\").concat(o.join(\\\"\\\\n\\\"))}throw n}},w.strict=m(D,w,{equal:w.strictEqual,deepEqual:w.deepStrictEqual,notEqual:w.notStrictEqual,notDeepEqual:w.notDeepStrictEqual}),w.strict.strict=w.strict},73894:function(t,e,r){\\\"use strict\\\";var n=r(90386);function i(t,e,r){return e in t?Object.defineProperty(t,e,{value:r,enumerable:!0,configurable:!0,writable:!0}):t[e]=r,t}function a(t,e){for(var r=0;r<e.length;r++){var n=e[r];n.enumerable=n.enumerable||!1,n.configurable=!0,\\\"value\\\"in n&&(n.writable=!0),Object.defineProperty(t,n.key,n)}}function o(t,e){return!e||\\\"object\\\"!==h(e)&&\\\"function\\\"!=typeof e?s(t):e}function s(t){if(void 0===t)throw new ReferenceError(\\\"this hasn't been initialised - super() hasn't been called\\\");return t}function l(t){var e=\\\"function\\\"==typeof Map?new Map:void 0;return l=function(t){if(null===t||(r=t,-1===Function.toString.call(r).indexOf(\\\"[native code]\\\")))return t;var r;if(\\\"function\\\"!=typeof t)throw new TypeError(\\\"Super expression must either be null or a function\\\");if(void 0!==e){if(e.has(t))return e.get(t);e.set(t,n)}function n(){return u(t,arguments,f(this).constructor)}return n.prototype=Object.create(t.prototype,{constructor:{value:n,enumerable:!1,writable:!0,configurable:!0}}),c(n,t)},l(t)}function u(t,e,r){return u=function(){if(\\\"undefined\\\"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if(\\\"function\\\"==typeof Proxy)return!0;try{return Date.prototype.toString.call(Reflect.construct(Date,[],(function(){}))),!0}catch(t){return!1}}()?Reflect.construct:function(t,e,r){var n=[null];n.push.apply(n,e);var i=new(Function.bind.apply(t,n));return r&&c(i,r.prototype),i},u.apply(null,arguments)}function c(t,e){return c=Object.setPrototypeOf||function(t,e){return t.__proto__=e,t},c(t,e)}function f(t){return f=Object.setPrototypeOf?Object.getPrototypeOf:function(t){return t.__proto__||Object.getPrototypeOf(t)},f(t)}function h(t){return h=\\\"function\\\"==typeof Symbol&&\\\"symbol\\\"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&\\\"function\\\"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?\\\"symbol\\\":typeof t},h(t)}var p=r(43827).inspect,d=r(79616).codes.ERR_INVALID_ARG_TYPE;function v(t,e,r){return(void 0===r||r>t.length)&&(r=t.length),t.substring(r-e.length,r)===e}var g=\\\"\\\",y=\\\"\\\",m=\\\"\\\",x=\\\"\\\",b={deepStrictEqual:\\\"Expected values to be strictly deep-equal:\\\",strictEqual:\\\"Expected values to be strictly equal:\\\",strictEqualObject:'Expected \\\"actual\\\" to be reference-equal to \\\"expected\\\":',deepEqual:\\\"Expected values to be loosely deep-equal:\\\",equal:\\\"Expected values to be loosely equal:\\\",notDeepStrictEqual:'Expected \\\"actual\\\" not to be strictly deep-equal to:',notStrictEqual:'Expected \\\"actual\\\" to be strictly unequal to:',notStrictEqualObject:'Expected \\\"actual\\\" not to be reference-equal to \\\"expected\\\":',notDeepEqual:'Expected \\\"actual\\\" not to be loosely deep-equal to:',notEqual:'Expected \\\"actual\\\" to be loosely unequal to:',notIdentical:\\\"Values identical but not reference-equal:\\\"};function _(t){var e=Object.keys(t),r=Object.create(Object.getPrototypeOf(t));return e.forEach((function(e){r[e]=t[e]})),Object.defineProperty(r,\\\"message\\\",{value:t.message}),r}function w(t){return p(t,{compact:!1,customInspect:!1,depth:1e3,maxArrayLength:1/0,showHidden:!1,breakLength:1/0,showProxy:!1,sorted:!0,getters:!0})}var T=function(t){function e(t){var r;if(function(t,e){if(!(t instanceof e))throw new TypeError(\\\"Cannot call a class as a function\\\")}(this,e),\\\"object\\\"!==h(t)||null===t)throw new d(\\\"options\\\",\\\"Object\\\",t);var i=t.message,a=t.operator,l=t.stackStartFn,u=t.actual,c=t.expected,p=Error.stackTraceLimit;if(Error.stackTraceLimit=0,null!=i)r=o(this,f(e).call(this,String(i)));else if(n.stderr&&n.stderr.isTTY&&(n.stderr&&n.stderr.getColorDepth&&1!==n.stderr.getColorDepth()?(g=\\\"\\u001b[34m\\\",y=\\\"\\u001b[32m\\\",x=\\\"\\u001b[39m\\\",m=\\\"\\u001b[31m\\\"):(g=\\\"\\\",y=\\\"\\\",x=\\\"\\\",m=\\\"\\\")),\\\"object\\\"===h(u)&&null!==u&&\\\"object\\\"===h(c)&&null!==c&&\\\"stack\\\"in u&&u instanceof Error&&\\\"stack\\\"in c&&c instanceof Error&&(u=_(u),c=_(c)),\\\"deepStrictEqual\\\"===a||\\\"strictEqual\\\"===a)r=o(this,f(e).call(this,function(t,e,r){var i=\\\"\\\",a=\\\"\\\",o=0,s=\\\"\\\",l=!1,u=w(t),c=u.split(\\\"\\\\n\\\"),f=w(e).split(\\\"\\\\n\\\"),p=0,d=\\\"\\\";if(\\\"strictEqual\\\"===r&&\\\"object\\\"===h(t)&&\\\"object\\\"===h(e)&&null!==t&&null!==e&&(r=\\\"strictEqualObject\\\"),1===c.length&&1===f.length&&c[0]!==f[0]){var _=c[0].length+f[0].length;if(_<=10){if(!(\\\"object\\\"===h(t)&&null!==t||\\\"object\\\"===h(e)&&null!==e||0===t&&0===e))return\\\"\\\".concat(b[r],\\\"\\\\n\\\\n\\\")+\\\"\\\".concat(c[0],\\\" !== \\\").concat(f[0],\\\"\\\\n\\\")}else if(\\\"strictEqualObject\\\"!==r&&_<(n.stderr&&n.stderr.isTTY?n.stderr.columns:80)){for(;c[0][p]===f[0][p];)p++;p>2&&(d=\\\"\\\\n  \\\".concat(function(t,e){if(e=Math.floor(e),0==t.length||0==e)return\\\"\\\";var r=t.length*e;for(e=Math.floor(Math.log(e)/Math.log(2));e;)t+=t,e--;return t+t.substring(0,r-t.length)}(\\\" \\\",p),\\\"^\\\"),p=0)}}for(var T=c[c.length-1],k=f[f.length-1];T===k&&(p++<2?s=\\\"\\\\n  \\\".concat(T).concat(s):i=T,c.pop(),f.pop(),0!==c.length&&0!==f.length);)T=c[c.length-1],k=f[f.length-1];var A=Math.max(c.length,f.length);if(0===A){var M=u.split(\\\"\\\\n\\\");if(M.length>30)for(M[26]=\\\"\\\".concat(g,\\\"...\\\").concat(x);M.length>27;)M.pop();return\\\"\\\".concat(b.notIdentical,\\\"\\\\n\\\\n\\\").concat(M.join(\\\"\\\\n\\\"),\\\"\\\\n\\\")}p>3&&(s=\\\"\\\\n\\\".concat(g,\\\"...\\\").concat(x).concat(s),l=!0),\\\"\\\"!==i&&(s=\\\"\\\\n  \\\".concat(i).concat(s),i=\\\"\\\");var S=0,E=b[r]+\\\"\\\\n\\\".concat(y,\\\"+ actual\\\").concat(x,\\\" \\\").concat(m,\\\"- expected\\\").concat(x),L=\\\" \\\".concat(g,\\\"...\\\").concat(x,\\\" Lines skipped\\\");for(p=0;p<A;p++){var C=p-o;if(c.length<p+1)C>1&&p>2&&(C>4?(a+=\\\"\\\\n\\\".concat(g,\\\"...\\\").concat(x),l=!0):C>3&&(a+=\\\"\\\\n  \\\".concat(f[p-2]),S++),a+=\\\"\\\\n  \\\".concat(f[p-1]),S++),o=p,i+=\\\"\\\\n\\\".concat(m,\\\"-\\\").concat(x,\\\" \\\").concat(f[p]),S++;else if(f.length<p+1)C>1&&p>2&&(C>4?(a+=\\\"\\\\n\\\".concat(g,\\\"...\\\").concat(x),l=!0):C>3&&(a+=\\\"\\\\n  \\\".concat(c[p-2]),S++),a+=\\\"\\\\n  \\\".concat(c[p-1]),S++),o=p,a+=\\\"\\\\n\\\".concat(y,\\\"+\\\").concat(x,\\\" \\\").concat(c[p]),S++;else{var P=f[p],O=c[p],I=O!==P&&(!v(O,\\\",\\\")||O.slice(0,-1)!==P);I&&v(P,\\\",\\\")&&P.slice(0,-1)===O&&(I=!1,O+=\\\",\\\"),I?(C>1&&p>2&&(C>4?(a+=\\\"\\\\n\\\".concat(g,\\\"...\\\").concat(x),l=!0):C>3&&(a+=\\\"\\\\n  \\\".concat(c[p-2]),S++),a+=\\\"\\\\n  \\\".concat(c[p-1]),S++),o=p,a+=\\\"\\\\n\\\".concat(y,\\\"+\\\").concat(x,\\\" \\\").concat(O),i+=\\\"\\\\n\\\".concat(m,\\\"-\\\").concat(x,\\\" \\\").concat(P),S+=2):(a+=i,i=\\\"\\\",1!==C&&0!==p||(a+=\\\"\\\\n  \\\".concat(O),S++))}if(S>20&&p<A-2)return\\\"\\\".concat(E).concat(L,\\\"\\\\n\\\").concat(a,\\\"\\\\n\\\").concat(g,\\\"...\\\").concat(x).concat(i,\\\"\\\\n\\\")+\\\"\\\".concat(g,\\\"...\\\").concat(x)}return\\\"\\\".concat(E).concat(l?L:\\\"\\\",\\\"\\\\n\\\").concat(a).concat(i).concat(s).concat(d)}(u,c,a)));else if(\\\"notDeepStrictEqual\\\"===a||\\\"notStrictEqual\\\"===a){var T=b[a],k=w(u).split(\\\"\\\\n\\\");if(\\\"notStrictEqual\\\"===a&&\\\"object\\\"===h(u)&&null!==u&&(T=b.notStrictEqualObject),k.length>30)for(k[26]=\\\"\\\".concat(g,\\\"...\\\").concat(x);k.length>27;)k.pop();r=1===k.length?o(this,f(e).call(this,\\\"\\\".concat(T,\\\" \\\").concat(k[0]))):o(this,f(e).call(this,\\\"\\\".concat(T,\\\"\\\\n\\\\n\\\").concat(k.join(\\\"\\\\n\\\"),\\\"\\\\n\\\")))}else{var A=w(u),M=\\\"\\\",S=b[a];\\\"notDeepEqual\\\"===a||\\\"notEqual\\\"===a?(A=\\\"\\\".concat(b[a],\\\"\\\\n\\\\n\\\").concat(A)).length>1024&&(A=\\\"\\\".concat(A.slice(0,1021),\\\"...\\\")):(M=\\\"\\\".concat(w(c)),A.length>512&&(A=\\\"\\\".concat(A.slice(0,509),\\\"...\\\")),M.length>512&&(M=\\\"\\\".concat(M.slice(0,509),\\\"...\\\")),\\\"deepEqual\\\"===a||\\\"equal\\\"===a?A=\\\"\\\".concat(S,\\\"\\\\n\\\\n\\\").concat(A,\\\"\\\\n\\\\nshould equal\\\\n\\\\n\\\"):M=\\\" \\\".concat(a,\\\" \\\").concat(M)),r=o(this,f(e).call(this,\\\"\\\".concat(A).concat(M)))}return Error.stackTraceLimit=p,r.generatedMessage=!i,Object.defineProperty(s(r),\\\"name\\\",{value:\\\"AssertionError [ERR_ASSERTION]\\\",enumerable:!1,writable:!0,configurable:!0}),r.code=\\\"ERR_ASSERTION\\\",r.actual=u,r.expected=c,r.operator=a,Error.captureStackTrace&&Error.captureStackTrace(s(r),l),r.stack,r.name=\\\"AssertionError\\\",o(r)}var r,l;return function(t,e){if(\\\"function\\\"!=typeof e&&null!==e)throw new TypeError(\\\"Super expression must either be null or a function\\\");t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,writable:!0,configurable:!0}}),e&&c(t,e)}(e,t),r=e,l=[{key:\\\"toString\\\",value:function(){return\\\"\\\".concat(this.name,\\\" [\\\").concat(this.code,\\\"]: \\\").concat(this.message)}},{key:p.custom,value:function(t,e){return p(this,function(t){for(var e=1;e<arguments.length;e++){var r=null!=arguments[e]?arguments[e]:{},n=Object.keys(r);\\\"function\\\"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter((function(t){return Object.getOwnPropertyDescriptor(r,t).enumerable})))),n.forEach((function(e){i(t,e,r[e])}))}return t}({},e,{customInspect:!1,depth:0}))}}],l&&a(r.prototype,l),e}(l(Error));t.exports=T},79616:function(t,e,r){\\\"use strict\\\";function n(t){return n=\\\"function\\\"==typeof Symbol&&\\\"symbol\\\"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&\\\"function\\\"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?\\\"symbol\\\":typeof t},n(t)}function i(t){return i=Object.setPrototypeOf?Object.getPrototypeOf:function(t){return t.__proto__||Object.getPrototypeOf(t)},i(t)}function a(t,e){return a=Object.setPrototypeOf||function(t,e){return t.__proto__=e,t},a(t,e)}var o,s,l={};function u(t,e,r){r||(r=Error);var o=function(r){function o(r,a,s){var l;return function(t,e){if(!(t instanceof e))throw new TypeError(\\\"Cannot call a class as a function\\\")}(this,o),l=function(t,e){return!e||\\\"object\\\"!==n(e)&&\\\"function\\\"!=typeof e?function(t){if(void 0===t)throw new ReferenceError(\\\"this hasn't been initialised - super() hasn't been called\\\");return t}(t):e}(this,i(o).call(this,function(t,r,n){return\\\"string\\\"==typeof e?e:e(t,r,n)}(r,a,s))),l.code=t,l}return function(t,e){if(\\\"function\\\"!=typeof e&&null!==e)throw new TypeError(\\\"Super expression must either be null or a function\\\");t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,writable:!0,configurable:!0}}),e&&a(t,e)}(o,r),o}(r);l[t]=o}function c(t,e){if(Array.isArray(t)){var r=t.length;return t=t.map((function(t){return String(t)})),r>2?\\\"one of \\\".concat(e,\\\" \\\").concat(t.slice(0,r-1).join(\\\", \\\"),\\\", or \\\")+t[r-1]:2===r?\\\"one of \\\".concat(e,\\\" \\\").concat(t[0],\\\" or \\\").concat(t[1]):\\\"of \\\".concat(e,\\\" \\\").concat(t[0])}return\\\"of \\\".concat(e,\\\" \\\").concat(String(t))}u(\\\"ERR_AMBIGUOUS_ARGUMENT\\\",'The \\\"%s\\\" argument is ambiguous. %s',TypeError),u(\\\"ERR_INVALID_ARG_TYPE\\\",(function(t,e,i){var a,s,l,u,f;if(void 0===o&&(o=r(32791)),o(\\\"string\\\"==typeof t,\\\"'name' must be a string\\\"),\\\"string\\\"==typeof e&&(s=\\\"not \\\",e.substr(0,4)===s)?(a=\\\"must not be\\\",e=e.replace(/^not /,\\\"\\\")):a=\\\"must be\\\",function(t,e,r){return(void 0===r||r>t.length)&&(r=t.length),t.substring(r-9,r)===e}(t,\\\" argument\\\"))l=\\\"The \\\".concat(t,\\\" \\\").concat(a,\\\" \\\").concat(c(e,\\\"type\\\"));else{var h=(\\\"number\\\"!=typeof f&&(f=0),f+1>(u=t).length||-1===u.indexOf(\\\".\\\",f)?\\\"argument\\\":\\\"property\\\");l='The \\\"'.concat(t,'\\\" ').concat(h,\\\" \\\").concat(a,\\\" \\\").concat(c(e,\\\"type\\\"))}return l+\\\". Received type \\\".concat(n(i))}),TypeError),u(\\\"ERR_INVALID_ARG_VALUE\\\",(function(t,e){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:\\\"is invalid\\\";void 0===s&&(s=r(43827));var i=s.inspect(e);return i.length>128&&(i=\\\"\\\".concat(i.slice(0,128),\\\"...\\\")),\\\"The argument '\\\".concat(t,\\\"' \\\").concat(n,\\\". Received \\\").concat(i)}),TypeError,RangeError),u(\\\"ERR_INVALID_RETURN_VALUE\\\",(function(t,e,r){var i;return i=r&&r.constructor&&r.constructor.name?\\\"instance of \\\".concat(r.constructor.name):\\\"type \\\".concat(n(r)),\\\"Expected \\\".concat(t,' to be returned from the \\\"').concat(e,'\\\"')+\\\" function but got \\\".concat(i,\\\".\\\")}),TypeError),u(\\\"ERR_MISSING_ARGS\\\",(function(){for(var t=arguments.length,e=new Array(t),n=0;n<t;n++)e[n]=arguments[n];void 0===o&&(o=r(32791)),o(e.length>0,\\\"At least one arg needs to be specified\\\");var i=\\\"The \\\",a=e.length;switch(e=e.map((function(t){return'\\\"'.concat(t,'\\\"')})),a){case 1:i+=\\\"\\\".concat(e[0],\\\" argument\\\");break;case 2:i+=\\\"\\\".concat(e[0],\\\" and \\\").concat(e[1],\\\" arguments\\\");break;default:i+=e.slice(0,a-1).join(\\\", \\\"),i+=\\\", and \\\".concat(e[a-1],\\\" arguments\\\")}return\\\"\\\".concat(i,\\\" must be specified\\\")}),TypeError),t.exports.codes=l},74061:function(t,e,r){\\\"use strict\\\";function n(t,e){return function(t){if(Array.isArray(t))return t}(t)||function(t,e){var r=[],n=!0,i=!1,a=void 0;try{for(var o,s=t[Symbol.iterator]();!(n=(o=s.next()).done)&&(r.push(o.value),!e||r.length!==e);n=!0);}catch(t){i=!0,a=t}finally{try{n||null==s.return||s.return()}finally{if(i)throw a}}return r}(t,e)||function(){throw new TypeError(\\\"Invalid attempt to destructure non-iterable instance\\\")}()}function i(t){return i=\\\"function\\\"==typeof Symbol&&\\\"symbol\\\"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&\\\"function\\\"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?\\\"symbol\\\":typeof t},i(t)}var a=void 0!==/a/g.flags,o=function(t){var e=[];return t.forEach((function(t){return e.push(t)})),e},s=function(t){var e=[];return t.forEach((function(t,r){return e.push([r,t])})),e},l=Object.is?Object.is:r(64003),u=Object.getOwnPropertySymbols?Object.getOwnPropertySymbols:function(){return[]},c=Number.isNaN?Number.isNaN:r(15567);function f(t){return t.call.bind(t)}var h=f(Object.prototype.hasOwnProperty),p=f(Object.prototype.propertyIsEnumerable),d=f(Object.prototype.toString),v=r(43827).types,g=v.isAnyArrayBuffer,y=v.isArrayBufferView,m=v.isDate,x=v.isMap,b=v.isRegExp,_=v.isSet,w=v.isNativeError,T=v.isBoxedPrimitive,k=v.isNumberObject,A=v.isStringObject,M=v.isBooleanObject,S=v.isBigIntObject,E=v.isSymbolObject,L=v.isFloat32Array,C=v.isFloat64Array;function P(t){if(0===t.length||t.length>10)return!0;for(var e=0;e<t.length;e++){var r=t.charCodeAt(e);if(r<48||r>57)return!0}return 10===t.length&&t>=Math.pow(2,32)}function O(t){return Object.keys(t).filter(P).concat(u(t).filter(Object.prototype.propertyIsEnumerable.bind(t)))}function I(t,e){if(t===e)return 0;for(var r=t.length,n=e.length,i=0,a=Math.min(r,n);i<a;++i)if(t[i]!==e[i]){r=t[i],n=e[i];break}return r<n?-1:n<r?1:0}var D=0,z=1,R=2,F=3;function B(t,e,r,n){if(t===e)return 0!==t||!r||l(t,e);if(r){if(\\\"object\\\"!==i(t))return\\\"number\\\"==typeof t&&c(t)&&c(e);if(\\\"object\\\"!==i(e)||null===t||null===e)return!1;if(Object.getPrototypeOf(t)!==Object.getPrototypeOf(e))return!1}else{if(null===t||\\\"object\\\"!==i(t))return(null===e||\\\"object\\\"!==i(e))&&t==e;if(null===e||\\\"object\\\"!==i(e))return!1}var o,s,u,f,h=d(t);if(h!==d(e))return!1;if(Array.isArray(t)){if(t.length!==e.length)return!1;var p=O(t),v=O(e);return p.length===v.length&&j(t,e,r,n,z,p)}if(\\\"[object Object]\\\"===h&&(!x(t)&&x(e)||!_(t)&&_(e)))return!1;if(m(t)){if(!m(e)||Date.prototype.getTime.call(t)!==Date.prototype.getTime.call(e))return!1}else if(b(t)){if(!b(e)||(u=t,f=e,!(a?u.source===f.source&&u.flags===f.flags:RegExp.prototype.toString.call(u)===RegExp.prototype.toString.call(f))))return!1}else if(w(t)||t instanceof Error){if(t.message!==e.message||t.name!==e.name)return!1}else{if(y(t)){if(r||!L(t)&&!C(t)){if(!function(t,e){return t.byteLength===e.byteLength&&0===I(new Uint8Array(t.buffer,t.byteOffset,t.byteLength),new Uint8Array(e.buffer,e.byteOffset,e.byteLength))}(t,e))return!1}else if(!function(t,e){if(t.byteLength!==e.byteLength)return!1;for(var r=0;r<t.byteLength;r++)if(t[r]!==e[r])return!1;return!0}(t,e))return!1;var P=O(t),B=O(e);return P.length===B.length&&j(t,e,r,n,D,P)}if(_(t))return!(!_(e)||t.size!==e.size)&&j(t,e,r,n,R);if(x(t))return!(!x(e)||t.size!==e.size)&&j(t,e,r,n,F);if(g(t)){if(s=e,(o=t).byteLength!==s.byteLength||0!==I(new Uint8Array(o),new Uint8Array(s)))return!1}else if(T(t)&&!function(t,e){return k(t)?k(e)&&l(Number.prototype.valueOf.call(t),Number.prototype.valueOf.call(e)):A(t)?A(e)&&String.prototype.valueOf.call(t)===String.prototype.valueOf.call(e):M(t)?M(e)&&Boolean.prototype.valueOf.call(t)===Boolean.prototype.valueOf.call(e):S(t)?S(e)&&BigInt.prototype.valueOf.call(t)===BigInt.prototype.valueOf.call(e):E(e)&&Symbol.prototype.valueOf.call(t)===Symbol.prototype.valueOf.call(e)}(t,e))return!1}return j(t,e,r,n,D)}function N(t,e){return e.filter((function(e){return p(t,e)}))}function j(t,e,r,a,l,c){if(5===arguments.length){c=Object.keys(t);var f=Object.keys(e);if(c.length!==f.length)return!1}for(var d=0;d<c.length;d++)if(!h(e,c[d]))return!1;if(r&&5===arguments.length){var v=u(t);if(0!==v.length){var g=0;for(d=0;d<v.length;d++){var y=v[d];if(p(t,y)){if(!p(e,y))return!1;c.push(y),g++}else if(p(e,y))return!1}var m=u(e);if(v.length!==m.length&&N(e,m).length!==g)return!1}else{var x=u(e);if(0!==x.length&&0!==N(e,x).length)return!1}}if(0===c.length&&(l===D||l===z&&0===t.length||0===t.size))return!0;if(void 0===a)a={val1:new Map,val2:new Map,position:0};else{var b=a.val1.get(t);if(void 0!==b){var _=a.val2.get(e);if(void 0!==_)return b===_}a.position++}a.val1.set(t,a.position),a.val2.set(e,a.position);var w=function(t,e,r,a,l,u){var c=0;if(u===R){if(!function(t,e,r,n){for(var a=null,s=o(t),l=0;l<s.length;l++){var u=s[l];if(\\\"object\\\"===i(u)&&null!==u)null===a&&(a=new Set),a.add(u);else if(!e.has(u)){if(r)return!1;if(!H(t,e,u))return!1;null===a&&(a=new Set),a.add(u)}}if(null!==a){for(var c=o(e),f=0;f<c.length;f++){var h=c[f];if(\\\"object\\\"===i(h)&&null!==h){if(!U(a,h,r,n))return!1}else if(!r&&!t.has(h)&&!U(a,h,r,n))return!1}return 0===a.size}return!0}(t,e,r,l))return!1}else if(u===F){if(!function(t,e,r,a){for(var o=null,l=s(t),u=0;u<l.length;u++){var c=n(l[u],2),f=c[0],h=c[1];if(\\\"object\\\"===i(f)&&null!==f)null===o&&(o=new Set),o.add(f);else{var p=e.get(f);if(void 0===p&&!e.has(f)||!B(h,p,r,a)){if(r)return!1;if(!q(t,e,f,h,a))return!1;null===o&&(o=new Set),o.add(f)}}}if(null!==o){for(var d=s(e),v=0;v<d.length;v++){var g=n(d[v],2),y=(f=g[0],g[1]);if(\\\"object\\\"===i(f)&&null!==f){if(!G(o,t,f,y,r,a))return!1}else if(!(r||t.has(f)&&B(t.get(f),y,!1,a)||G(o,t,f,y,!1,a)))return!1}return 0===o.size}return!0}(t,e,r,l))return!1}else if(u===z)for(;c<t.length;c++){if(!h(t,c)){if(h(e,c))return!1;for(var f=Object.keys(t);c<f.length;c++){var p=f[c];if(!h(e,p)||!B(t[p],e[p],r,l))return!1}return f.length===Object.keys(e).length}if(!h(e,c)||!B(t[c],e[c],r,l))return!1}for(c=0;c<a.length;c++){var d=a[c];if(!B(t[d],e[d],r,l))return!1}return!0}(t,e,r,c,a,l);return a.val1.delete(t),a.val2.delete(e),w}function U(t,e,r,n){for(var i=o(t),a=0;a<i.length;a++){var s=i[a];if(B(e,s,r,n))return t.delete(s),!0}return!1}function V(t){switch(i(t)){case\\\"undefined\\\":return null;case\\\"object\\\":return;case\\\"symbol\\\":return!1;case\\\"string\\\":t=+t;case\\\"number\\\":if(c(t))return!1}return!0}function H(t,e,r){var n=V(r);return null!=n?n:e.has(n)&&!t.has(n)}function q(t,e,r,n,i){var a=V(r);if(null!=a)return a;var o=e.get(a);return!(void 0===o&&!e.has(a)||!B(n,o,!1,i))&&!t.has(a)&&B(n,o,!1,i)}function G(t,e,r,n,i,a){for(var s=o(t),l=0;l<s.length;l++){var u=s[l];if(B(r,u,i,a)&&B(n,e.get(u),i,a))return t.delete(u),!0}return!1}t.exports={isDeepEqual:function(t,e){return B(t,e,!1)},isDeepStrictEqual:function(t,e){return B(t,e,!0)}}},95341:function(t,e){\\\"use strict\\\";e.byteLength=function(t){var e=s(t),r=e[0],n=e[1];return 3*(r+n)/4-n},e.toByteArray=function(t){var e,r,a=s(t),o=a[0],l=a[1],u=new i(function(t,e,r){return 3*(e+r)/4-r}(0,o,l)),c=0,f=l>0?o-4:o;for(r=0;r<f;r+=4)e=n[t.charCodeAt(r)]<<18|n[t.charCodeAt(r+1)]<<12|n[t.charCodeAt(r+2)]<<6|n[t.charCodeAt(r+3)],u[c++]=e>>16&255,u[c++]=e>>8&255,u[c++]=255&e;return 2===l&&(e=n[t.charCodeAt(r)]<<2|n[t.charCodeAt(r+1)]>>4,u[c++]=255&e),1===l&&(e=n[t.charCodeAt(r)]<<10|n[t.charCodeAt(r+1)]<<4|n[t.charCodeAt(r+2)]>>2,u[c++]=e>>8&255,u[c++]=255&e),u},e.fromByteArray=function(t){for(var e,n=t.length,i=n%3,a=[],o=16383,s=0,u=n-i;s<u;s+=o)a.push(l(t,s,s+o>u?u:s+o));return 1===i?(e=t[n-1],a.push(r[e>>2]+r[e<<4&63]+\\\"==\\\")):2===i&&(e=(t[n-2]<<8)+t[n-1],a.push(r[e>>10]+r[e>>4&63]+r[e<<2&63]+\\\"=\\\")),a.join(\\\"\\\")};for(var r=[],n=[],i=\\\"undefined\\\"!=typeof Uint8Array?Uint8Array:Array,a=\\\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\\\",o=0;o<64;++o)r[o]=a[o],n[a.charCodeAt(o)]=o;function s(t){var e=t.length;if(e%4>0)throw new Error(\\\"Invalid string. Length must be a multiple of 4\\\");var r=t.indexOf(\\\"=\\\");return-1===r&&(r=e),[r,r===e?0:4-r%4]}function l(t,e,n){for(var i,a,o=[],s=e;s<n;s+=3)i=(t[s]<<16&16711680)+(t[s+1]<<8&65280)+(255&t[s+2]),o.push(r[(a=i)>>18&63]+r[a>>12&63]+r[a>>6&63]+r[63&a]);return o.join(\\\"\\\")}n[\\\"-\\\".charCodeAt(0)]=62,n[\\\"_\\\".charCodeAt(0)]=63},91358:function(t){\\\"use strict\\\";function e(t,e,r,n,i){for(var a=i+1;n<=i;){var o=n+i>>>1,s=t[o];(void 0!==r?r(s,e):s-e)>=0?(a=o,i=o-1):n=o+1}return a}function r(t,e,r,n,i){for(var a=i+1;n<=i;){var o=n+i>>>1,s=t[o];(void 0!==r?r(s,e):s-e)>0?(a=o,i=o-1):n=o+1}return a}function n(t,e,r,n,i){for(var a=n-1;n<=i;){var o=n+i>>>1,s=t[o];(void 0!==r?r(s,e):s-e)<0?(a=o,n=o+1):i=o-1}return a}function i(t,e,r,n,i){for(var a=n-1;n<=i;){var o=n+i>>>1,s=t[o];(void 0!==r?r(s,e):s-e)<=0?(a=o,n=o+1):i=o-1}return a}function a(t,e,r,n,i){for(;n<=i;){var a=n+i>>>1,o=t[a],s=void 0!==r?r(o,e):o-e;if(0===s)return a;s<=0?n=a+1:i=a-1}return-1}function o(t,e,r,n,i,a){return\\\"function\\\"==typeof r?a(t,e,r,void 0===n?0:0|n,void 0===i?t.length-1:0|i):a(t,e,void 0,void 0===r?0:0|r,void 0===n?t.length-1:0|n)}t.exports={ge:function(t,r,n,i,a){return o(t,r,n,i,a,e)},gt:function(t,e,n,i,a){return o(t,e,n,i,a,r)},lt:function(t,e,r,i,a){return o(t,e,r,i,a,n)},le:function(t,e,r,n,a){return o(t,e,r,n,a,i)},eq:function(t,e,r,n,i){return o(t,e,r,n,i,a)}}},13547:function(t,e){\\\"use strict\\\";function r(t){var e=32;return(t&=-t)&&e--,65535&t&&(e-=16),16711935&t&&(e-=8),252645135&t&&(e-=4),858993459&t&&(e-=2),1431655765&t&&(e-=1),e}e.INT_BITS=32,e.INT_MAX=2147483647,e.INT_MIN=-1<<31,e.sign=function(t){return(t>0)-(t<0)},e.abs=function(t){var e=t>>31;return(t^e)-e},e.min=function(t,e){return e^(t^e)&-(t<e)},e.max=function(t,e){return t^(t^e)&-(t<e)},e.isPow2=function(t){return!(t&t-1||!t)},e.log2=function(t){var e,r;return e=(t>65535)<<4,e|=r=((t>>>=e)>255)<<3,e|=r=((t>>>=r)>15)<<2,(e|=r=((t>>>=r)>3)<<1)|(t>>>=r)>>1},e.log10=function(t){return t>=1e9?9:t>=1e8?8:t>=1e7?7:t>=1e6?6:t>=1e5?5:t>=1e4?4:t>=1e3?3:t>=100?2:t>=10?1:0},e.popCount=function(t){return 16843009*((t=(858993459&(t-=t>>>1&1431655765))+(t>>>2&858993459))+(t>>>4)&252645135)>>>24},e.countTrailingZeros=r,e.nextPow2=function(t){return t+=0===t,--t,t|=t>>>1,t|=t>>>2,t|=t>>>4,t|=t>>>8,1+(t|=t>>>16)},e.prevPow2=function(t){return t|=t>>>1,t|=t>>>2,t|=t>>>4,t|=t>>>8,(t|=t>>>16)-(t>>>1)},e.parity=function(t){return t^=t>>>16,t^=t>>>8,t^=t>>>4,27030>>>(t&=15)&1};var n=new Array(256);!function(t){for(var e=0;e<256;++e){var r=e,n=e,i=7;for(r>>>=1;r;r>>>=1)n<<=1,n|=1&r,--i;t[e]=n<<i&255}}(n),e.reverse=function(t){return n[255&t]<<24|n[t>>>8&255]<<16|n[t>>>16&255]<<8|n[t>>>24&255]},e.interleave2=function(t,e){return(t=1431655765&((t=858993459&((t=252645135&((t=16711935&((t&=65535)|t<<8))|t<<4))|t<<2))|t<<1))|(e=1431655765&((e=858993459&((e=252645135&((e=16711935&((e&=65535)|e<<8))|e<<4))|e<<2))|e<<1))<<1},e.deinterleave2=function(t,e){return(t=65535&((t=16711935&((t=252645135&((t=858993459&((t=t>>>e&1431655765)|t>>>1))|t>>>2))|t>>>4))|t>>>16))<<16>>16},e.interleave3=function(t,e,r){return t=1227133513&((t=3272356035&((t=251719695&((t=4278190335&((t&=1023)|t<<16))|t<<8))|t<<4))|t<<2),(t|=(e=1227133513&((e=3272356035&((e=251719695&((e=4278190335&((e&=1023)|e<<16))|e<<8))|e<<4))|e<<2))<<1)|(r=1227133513&((r=3272356035&((r=251719695&((r=4278190335&((r&=1023)|r<<16))|r<<8))|r<<4))|r<<2))<<2},e.deinterleave3=function(t,e){return(t=1023&((t=4278190335&((t=251719695&((t=3272356035&((t=t>>>e&1227133513)|t>>>2))|t>>>4))|t>>>8))|t>>>16))<<22>>22},e.nextCombination=function(t){var e=t|t-1;return e+1|(~e&-~e)-1>>>r(t)+1}},44781:function(t,e,r){\\\"use strict\\\";var n=r(53435);t.exports=function(t,e){e||(e={});var r,o,s,l,u,c,f,h,p,d,v,g=null==e.cutoff?.25:e.cutoff,y=null==e.radius?8:e.radius,m=e.channel||0;if(ArrayBuffer.isView(t)||Array.isArray(t)){if(!e.width||!e.height)throw Error(\\\"For raw data width and height should be provided by options\\\");r=e.width,o=e.height,l=t,c=e.stride?e.stride:Math.floor(t.length/r/o)}else window.HTMLCanvasElement&&t instanceof window.HTMLCanvasElement?(f=(h=t).getContext(\\\"2d\\\"),r=h.width,o=h.height,l=(p=f.getImageData(0,0,r,o)).data,c=4):window.CanvasRenderingContext2D&&t instanceof window.CanvasRenderingContext2D?(f=t,r=(h=t.canvas).width,o=h.height,l=(p=f.getImageData(0,0,r,o)).data,c=4):window.ImageData&&t instanceof window.ImageData&&(p=t,r=t.width,o=t.height,l=p.data,c=4);if(s=Math.max(r,o),window.Uint8ClampedArray&&l instanceof window.Uint8ClampedArray||window.Uint8Array&&l instanceof window.Uint8Array)for(u=l,l=Array(r*o),d=0,v=u.length;d<v;d++)l[d]=u[d*c+m]/255;else if(1!==c)throw Error(\\\"Raw data can have only 1 value per pixel\\\");var x=Array(r*o),b=Array(r*o),_=Array(s),w=Array(s),T=Array(s+1),k=Array(s);for(d=0,v=r*o;d<v;d++){var A=l[d];x[d]=1===A?0:0===A?i:Math.pow(Math.max(0,.5-A),2),b[d]=1===A?i:0===A?0:Math.pow(Math.max(0,A-.5),2)}a(x,r,o,_,w,k,T),a(b,r,o,_,w,k,T);var M=window.Float32Array?new Float32Array(r*o):new Array(r*o);for(d=0,v=r*o;d<v;d++)M[d]=n(1-((x[d]-b[d])/y+g),0,1);return M};var i=1e20;function a(t,e,r,n,i,a,s){for(var l=0;l<e;l++){for(var u=0;u<r;u++)n[u]=t[u*e+l];for(o(n,i,a,s,r),u=0;u<r;u++)t[u*e+l]=i[u]}for(u=0;u<r;u++){for(l=0;l<e;l++)n[l]=t[u*e+l];for(o(n,i,a,s,e),l=0;l<e;l++)t[u*e+l]=Math.sqrt(i[l])}}function o(t,e,r,n,a){r[0]=0,n[0]=-i,n[1]=+i;for(var o=1,s=0;o<a;o++){for(var l=(t[o]+o*o-(t[r[s]]+r[s]*r[s]))/(2*o-2*r[s]);l<=n[s];)s--,l=(t[o]+o*o-(t[r[s]]+r[s]*r[s]))/(2*o-2*r[s]);r[++s]=o,n[s]=l,n[s+1]=+i}for(o=0,s=0;o<a;o++){for(;n[s+1]<o;)s++;e[o]=(o-r[s])*(o-r[s])+t[r[s]]}}},6614:function(t,e,r){\\\"use strict\\\";var n=r(68318),i=r(68222),a=i(n(\\\"String.prototype.indexOf\\\"));t.exports=function(t,e){var r=n(t,!!e);return\\\"function\\\"==typeof r&&a(t,\\\".prototype.\\\")>-1?i(r):r}},68222:function(t,e,r){\\\"use strict\\\";var n=r(77575),i=r(68318),a=i(\\\"%Function.prototype.apply%\\\"),o=i(\\\"%Function.prototype.call%\\\"),s=i(\\\"%Reflect.apply%\\\",!0)||n.call(o,a),l=i(\\\"%Object.getOwnPropertyDescriptor%\\\",!0),u=i(\\\"%Object.defineProperty%\\\",!0),c=i(\\\"%Math.max%\\\");if(u)try{u({},\\\"a\\\",{value:1})}catch(t){u=null}t.exports=function(t){var e=s(n,o,arguments);return l&&u&&l(e,\\\"length\\\").configurable&&u(e,\\\"length\\\",{value:1+c(0,t.length-(arguments.length-1))}),e};var f=function(){return s(n,a,arguments)};u?u(t.exports,\\\"apply\\\",{value:f}):t.exports.apply=f},53435:function(t){t.exports=function(t,e,r){return e<r?t<e?e:t>r?r:t:t<r?r:t>e?e:t}},6475:function(t,e,r){\\\"use strict\\\";var n=r(53435);function i(t,e){null==e&&(e=!0);var r=t[0],i=t[1],a=t[2],o=t[3];return null==o&&(o=e?1:255),e&&(r*=255,i*=255,a*=255,o*=255),16777216*(r=255&n(r,0,255))+((i=255&n(i,0,255))<<16)+((a=255&n(a,0,255))<<8)+(255&n(o,0,255))}t.exports=i,t.exports.to=i,t.exports.from=function(t,e){var r=(t=+t)>>>24,n=(16711680&t)>>>16,i=(65280&t)>>>8,a=255&t;return!1===e?[r,n,i,a]:[r/255,n/255,i/255,a/255]}},76857:function(t){\\\"use strict\\\";t.exports={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],green:[0,128,0],greenyellow:[173,255,47],grey:[128,128,128],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],rebeccapurple:[102,51,153],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]}},25075:function(t,e,r){\\\"use strict\\\";var n=r(36652),i=r(53435),a=r(90660);t.exports=function(t,e){\\\"float\\\"!==e&&e||(e=\\\"array\\\"),\\\"uint\\\"===e&&(e=\\\"uint8\\\"),\\\"uint_clamped\\\"===e&&(e=\\\"uint8_clamped\\\");var r=new(a(e))(4),o=\\\"uint8\\\"!==e&&\\\"uint8_clamped\\\"!==e;return t.length&&\\\"string\\\"!=typeof t||((t=n(t))[0]/=255,t[1]/=255,t[2]/=255),function(t){return t instanceof Uint8Array||t instanceof Uint8ClampedArray||!!(Array.isArray(t)&&(t[0]>1||0===t[0])&&(t[1]>1||0===t[1])&&(t[2]>1||0===t[2])&&(!t[3]||t[3]>1))}(t)?(r[0]=t[0],r[1]=t[1],r[2]=t[2],r[3]=null!=t[3]?t[3]:255,o&&(r[0]/=255,r[1]/=255,r[2]/=255,r[3]/=255),r):(o?(r[0]=t[0],r[1]=t[1],r[2]=t[2],r[3]=null!=t[3]?t[3]:1):(r[0]=i(Math.floor(255*t[0]),0,255),r[1]=i(Math.floor(255*t[1]),0,255),r[2]=i(Math.floor(255*t[2]),0,255),r[3]=null==t[3]?255:i(Math.floor(255*t[3]),0,255)),r)}},90736:function(t,e,r){\\\"use strict\\\";var n=r(76857),i=r(10973),a=r(46775);t.exports=function(t){var e,s,l=[],u=1;if(\\\"string\\\"==typeof t)if(n[t])l=n[t].slice(),s=\\\"rgb\\\";else if(\\\"transparent\\\"===t)u=0,s=\\\"rgb\\\",l=[0,0,0];else if(/^#[A-Fa-f0-9]+$/.test(t)){var c=t.slice(1);u=1,(p=c.length)<=4?(l=[parseInt(c[0]+c[0],16),parseInt(c[1]+c[1],16),parseInt(c[2]+c[2],16)],4===p&&(u=parseInt(c[3]+c[3],16)/255)):(l=[parseInt(c[0]+c[1],16),parseInt(c[2]+c[3],16),parseInt(c[4]+c[5],16)],8===p&&(u=parseInt(c[6]+c[7],16)/255)),l[0]||(l[0]=0),l[1]||(l[1]=0),l[2]||(l[2]=0),s=\\\"rgb\\\"}else if(e=/^((?:rgb|hs[lvb]|hwb|cmyk?|xy[zy]|gray|lab|lchu?v?|[ly]uv|lms)a?)\\\\s*\\\\(([^\\\\)]*)\\\\)/.exec(t)){var f=e[1],h=\\\"rgb\\\"===f;s=c=f.replace(/a$/,\\\"\\\");var p=\\\"cmyk\\\"===c?4:\\\"gray\\\"===c?1:3;l=e[2].trim().split(/\\\\s*,\\\\s*/).map((function(t,e){if(/%$/.test(t))return e===p?parseFloat(t)/100:\\\"rgb\\\"===c?255*parseFloat(t)/100:parseFloat(t);if(\\\"h\\\"===c[e]){if(/deg$/.test(t))return parseFloat(t);if(void 0!==o[t])return o[t]}return parseFloat(t)})),f===c&&l.push(1),u=h||void 0===l[p]?1:l[p],l=l.slice(0,p)}else t.length>10&&/[0-9](?:\\\\s|\\\\/)/.test(t)&&(l=t.match(/([0-9]+)/g).map((function(t){return parseFloat(t)})),s=t.match(/([a-z])/gi).join(\\\"\\\").toLowerCase());else if(isNaN(t))if(i(t)){var d=a(t.r,t.red,t.R,null);null!==d?(s=\\\"rgb\\\",l=[d,a(t.g,t.green,t.G),a(t.b,t.blue,t.B)]):(s=\\\"hsl\\\",l=[a(t.h,t.hue,t.H),a(t.s,t.saturation,t.S),a(t.l,t.lightness,t.L,t.b,t.brightness)]),u=a(t.a,t.alpha,t.opacity,1),null!=t.opacity&&(u/=100)}else(Array.isArray(t)||r.g.ArrayBuffer&&ArrayBuffer.isView&&ArrayBuffer.isView(t))&&(l=[t[0],t[1],t[2]],s=\\\"rgb\\\",u=4===t.length?t[3]:1);else s=\\\"rgb\\\",l=[t>>>16,(65280&t)>>>8,255&t];return{space:s,values:l,alpha:u}};var o={red:0,orange:60,yellow:120,green:180,blue:240,purple:300}},36652:function(t,e,r){\\\"use strict\\\";var n=r(90736),i=r(80009),a=r(53435);t.exports=function(t){var e,r=n(t);return r.space?((e=Array(3))[0]=a(r.values[0],0,255),e[1]=a(r.values[1],0,255),e[2]=a(r.values[2],0,255),\\\"h\\\"===r.space[0]&&(e=i.rgb(e)),e.push(a(r.alpha,0,1)),e):[]}},80009:function(t,e,r){\\\"use strict\\\";var n=r(6866);t.exports={name:\\\"hsl\\\",min:[0,0,0],max:[360,100,100],channel:[\\\"hue\\\",\\\"saturation\\\",\\\"lightness\\\"],alias:[\\\"HSL\\\"],rgb:function(t){var e,r,n,i,a,o=t[0]/360,s=t[1]/100,l=t[2]/100;if(0===s)return[a=255*l,a,a];e=2*l-(r=l<.5?l*(1+s):l+s-l*s),i=[0,0,0];for(var u=0;u<3;u++)(n=o+1/3*-(u-1))<0?n++:n>1&&n--,a=6*n<1?e+6*(r-e)*n:2*n<1?r:3*n<2?e+(r-e)*(2/3-n)*6:e,i[u]=255*a;return i}},n.hsl=function(t){var e,r,n=t[0]/255,i=t[1]/255,a=t[2]/255,o=Math.min(n,i,a),s=Math.max(n,i,a),l=s-o;return s===o?e=0:n===s?e=(i-a)/l:i===s?e=2+(a-n)/l:a===s&&(e=4+(n-i)/l),(e=Math.min(60*e,360))<0&&(e+=360),r=(o+s)/2,[e,100*(s===o?0:r<=.5?l/(s+o):l/(2-s-o)),100*r]}},6866:function(t){\\\"use strict\\\";t.exports={name:\\\"rgb\\\",min:[0,0,0],max:[255,255,255],channel:[\\\"red\\\",\\\"green\\\",\\\"blue\\\"],alias:[\\\"RGB\\\"]}},24138:function(t){t.exports={AFG:\\\"afghan\\\",ALA:\\\"\\\\\\\\b\\\\\\\\wland\\\",ALB:\\\"albania\\\",DZA:\\\"algeria\\\",ASM:\\\"^(?=.*americ).*samoa\\\",AND:\\\"andorra\\\",AGO:\\\"angola\\\",AIA:\\\"anguill?a\\\",ATA:\\\"antarctica\\\",ATG:\\\"antigua\\\",ARG:\\\"argentin\\\",ARM:\\\"armenia\\\",ABW:\\\"^(?!.*bonaire).*\\\\\\\\baruba\\\",AUS:\\\"australia\\\",AUT:\\\"^(?!.*hungary).*austria|\\\\\\\\baustri.*\\\\\\\\bemp\\\",AZE:\\\"azerbaijan\\\",BHS:\\\"bahamas\\\",BHR:\\\"bahrain\\\",BGD:\\\"bangladesh|^(?=.*east).*paki?stan\\\",BRB:\\\"barbados\\\",BLR:\\\"belarus|byelo\\\",BEL:\\\"^(?!.*luxem).*belgium\\\",BLZ:\\\"belize|^(?=.*british).*honduras\\\",BEN:\\\"benin|dahome\\\",BMU:\\\"bermuda\\\",BTN:\\\"bhutan\\\",BOL:\\\"bolivia\\\",BES:\\\"^(?=.*bonaire).*eustatius|^(?=.*carib).*netherlands|\\\\\\\\bbes.?islands\\\",BIH:\\\"herzegovina|bosnia\\\",BWA:\\\"botswana|bechuana\\\",BVT:\\\"bouvet\\\",BRA:\\\"brazil\\\",IOT:\\\"british.?indian.?ocean\\\",BRN:\\\"brunei\\\",BGR:\\\"bulgaria\\\",BFA:\\\"burkina|\\\\\\\\bfaso|upper.?volta\\\",BDI:\\\"burundi\\\",CPV:\\\"verde\\\",KHM:\\\"cambodia|kampuchea|khmer\\\",CMR:\\\"cameroon\\\",CAN:\\\"canada\\\",CYM:\\\"cayman\\\",CAF:\\\"\\\\\\\\bcentral.african.republic\\\",TCD:\\\"\\\\\\\\bchad\\\",CHL:\\\"\\\\\\\\bchile\\\",CHN:\\\"^(?!.*\\\\\\\\bmac)(?!.*\\\\\\\\bhong)(?!.*\\\\\\\\btai)(?!.*\\\\\\\\brep).*china|^(?=.*peo)(?=.*rep).*china\\\",CXR:\\\"christmas\\\",CCK:\\\"\\\\\\\\bcocos|keeling\\\",COL:\\\"colombia\\\",COM:\\\"comoro\\\",COG:\\\"^(?!.*\\\\\\\\bdem)(?!.*\\\\\\\\bd[\\\\\\\\.]?r)(?!.*kinshasa)(?!.*zaire)(?!.*belg)(?!.*l.opoldville)(?!.*free).*\\\\\\\\bcongo\\\",COK:\\\"\\\\\\\\bcook\\\",CRI:\\\"costa.?rica\\\",CIV:\\\"ivoire|ivory\\\",HRV:\\\"croatia\\\",CUB:\\\"\\\\\\\\bcuba\\\",CUW:\\\"^(?!.*bonaire).*\\\\\\\\bcura(c|ç)ao\\\",CYP:\\\"cyprus\\\",CSK:\\\"czechoslovakia\\\",CZE:\\\"^(?=.*rep).*czech|czechia|bohemia\\\",COD:\\\"\\\\\\\\bdem.*congo|congo.*\\\\\\\\bdem|congo.*\\\\\\\\bd[\\\\\\\\.]?r|\\\\\\\\bd[\\\\\\\\.]?r.*congo|belgian.?congo|congo.?free.?state|kinshasa|zaire|l.opoldville|drc|droc|rdc\\\",DNK:\\\"denmark\\\",DJI:\\\"djibouti\\\",DMA:\\\"dominica(?!n)\\\",DOM:\\\"dominican.rep\\\",ECU:\\\"ecuador\\\",EGY:\\\"egypt\\\",SLV:\\\"el.?salvador\\\",GNQ:\\\"guine.*eq|eq.*guine|^(?=.*span).*guinea\\\",ERI:\\\"eritrea\\\",EST:\\\"estonia\\\",ETH:\\\"ethiopia|abyssinia\\\",FLK:\\\"falkland|malvinas\\\",FRO:\\\"faroe|faeroe\\\",FJI:\\\"fiji\\\",FIN:\\\"finland\\\",FRA:\\\"^(?!.*\\\\\\\\bdep)(?!.*martinique).*france|french.?republic|\\\\\\\\bgaul\\\",GUF:\\\"^(?=.*french).*guiana\\\",PYF:\\\"french.?polynesia|tahiti\\\",ATF:\\\"french.?southern\\\",GAB:\\\"gabon\\\",GMB:\\\"gambia\\\",GEO:\\\"^(?!.*south).*georgia\\\",DDR:\\\"german.?democratic.?republic|democratic.?republic.*germany|east.germany\\\",DEU:\\\"^(?!.*east).*germany|^(?=.*\\\\\\\\bfed.*\\\\\\\\brep).*german\\\",GHA:\\\"ghana|gold.?coast\\\",GIB:\\\"gibraltar\\\",GRC:\\\"greece|hellenic|hellas\\\",GRL:\\\"greenland\\\",GRD:\\\"grenada\\\",GLP:\\\"guadeloupe\\\",GUM:\\\"\\\\\\\\bguam\\\",GTM:\\\"guatemala\\\",GGY:\\\"guernsey\\\",GIN:\\\"^(?!.*eq)(?!.*span)(?!.*bissau)(?!.*portu)(?!.*new).*guinea\\\",GNB:\\\"bissau|^(?=.*portu).*guinea\\\",GUY:\\\"guyana|british.?guiana\\\",HTI:\\\"haiti\\\",HMD:\\\"heard.*mcdonald\\\",VAT:\\\"holy.?see|vatican|papal.?st\\\",HND:\\\"^(?!.*brit).*honduras\\\",HKG:\\\"hong.?kong\\\",HUN:\\\"^(?!.*austr).*hungary\\\",ISL:\\\"iceland\\\",IND:\\\"india(?!.*ocea)\\\",IDN:\\\"indonesia\\\",IRN:\\\"\\\\\\\\biran|persia\\\",IRQ:\\\"\\\\\\\\biraq|mesopotamia\\\",IRL:\\\"(^ireland)|(^republic.*ireland)\\\",IMN:\\\"^(?=.*isle).*\\\\\\\\bman\\\",ISR:\\\"israel\\\",ITA:\\\"italy\\\",JAM:\\\"jamaica\\\",JPN:\\\"japan\\\",JEY:\\\"jersey\\\",JOR:\\\"jordan\\\",KAZ:\\\"kazak\\\",KEN:\\\"kenya|british.?east.?africa|east.?africa.?prot\\\",KIR:\\\"kiribati\\\",PRK:\\\"^(?=.*democrat|people|north|d.*p.*.r).*\\\\\\\\bkorea|dprk|korea.*(d.*p.*r)\\\",KWT:\\\"kuwait\\\",KGZ:\\\"kyrgyz|kirghiz\\\",LAO:\\\"\\\\\\\\blaos?\\\\\\\\b\\\",LVA:\\\"latvia\\\",LBN:\\\"lebanon\\\",LSO:\\\"lesotho|basuto\\\",LBR:\\\"liberia\\\",LBY:\\\"libya\\\",LIE:\\\"liechtenstein\\\",LTU:\\\"lithuania\\\",LUX:\\\"^(?!.*belg).*luxem\\\",MAC:\\\"maca(o|u)\\\",MDG:\\\"madagascar|malagasy\\\",MWI:\\\"malawi|nyasa\\\",MYS:\\\"malaysia\\\",MDV:\\\"maldive\\\",MLI:\\\"\\\\\\\\bmali\\\\\\\\b\\\",MLT:\\\"\\\\\\\\bmalta\\\",MHL:\\\"marshall\\\",MTQ:\\\"martinique\\\",MRT:\\\"mauritania\\\",MUS:\\\"mauritius\\\",MYT:\\\"\\\\\\\\bmayotte\\\",MEX:\\\"\\\\\\\\bmexic\\\",FSM:\\\"fed.*micronesia|micronesia.*fed\\\",MCO:\\\"monaco\\\",MNG:\\\"mongolia\\\",MNE:\\\"^(?!.*serbia).*montenegro\\\",MSR:\\\"montserrat\\\",MAR:\\\"morocco|\\\\\\\\bmaroc\\\",MOZ:\\\"mozambique\\\",MMR:\\\"myanmar|burma\\\",NAM:\\\"namibia\\\",NRU:\\\"nauru\\\",NPL:\\\"nepal\\\",NLD:\\\"^(?!.*\\\\\\\\bant)(?!.*\\\\\\\\bcarib).*netherlands\\\",ANT:\\\"^(?=.*\\\\\\\\bant).*(nether|dutch)\\\",NCL:\\\"new.?caledonia\\\",NZL:\\\"new.?zealand\\\",NIC:\\\"nicaragua\\\",NER:\\\"\\\\\\\\bniger(?!ia)\\\",NGA:\\\"nigeria\\\",NIU:\\\"niue\\\",NFK:\\\"norfolk\\\",MNP:\\\"mariana\\\",NOR:\\\"norway\\\",OMN:\\\"\\\\\\\\boman|trucial\\\",PAK:\\\"^(?!.*east).*paki?stan\\\",PLW:\\\"palau\\\",PSE:\\\"palestin|\\\\\\\\bgaza|west.?bank\\\",PAN:\\\"panama\\\",PNG:\\\"papua|new.?guinea\\\",PRY:\\\"paraguay\\\",PER:\\\"peru\\\",PHL:\\\"philippines\\\",PCN:\\\"pitcairn\\\",POL:\\\"poland\\\",PRT:\\\"portugal\\\",PRI:\\\"puerto.?rico\\\",QAT:\\\"qatar\\\",KOR:\\\"^(?!.*d.*p.*r)(?!.*democrat)(?!.*people)(?!.*north).*\\\\\\\\bkorea(?!.*d.*p.*r)\\\",MDA:\\\"moldov|b(a|e)ssarabia\\\",REU:\\\"r(e|é)union\\\",ROU:\\\"r(o|u|ou)mania\\\",RUS:\\\"\\\\\\\\brussia|soviet.?union|u\\\\\\\\.?s\\\\\\\\.?s\\\\\\\\.?r|socialist.?republics\\\",RWA:\\\"rwanda\\\",BLM:\\\"barth(e|é)lemy\\\",SHN:\\\"helena\\\",KNA:\\\"kitts|\\\\\\\\bnevis\\\",LCA:\\\"\\\\\\\\blucia\\\",MAF:\\\"^(?=.*collectivity).*martin|^(?=.*france).*martin(?!ique)|^(?=.*french).*martin(?!ique)\\\",SPM:\\\"miquelon\\\",VCT:\\\"vincent\\\",WSM:\\\"^(?!.*amer).*samoa\\\",SMR:\\\"san.?marino\\\",STP:\\\"\\\\\\\\bs(a|ã)o.?tom(e|é)\\\",SAU:\\\"\\\\\\\\bsa\\\\\\\\w*.?arabia\\\",SEN:\\\"senegal\\\",SRB:\\\"^(?!.*monte).*serbia\\\",SYC:\\\"seychell\\\",SLE:\\\"sierra\\\",SGP:\\\"singapore\\\",SXM:\\\"^(?!.*martin)(?!.*saba).*maarten\\\",SVK:\\\"^(?!.*cze).*slovak\\\",SVN:\\\"slovenia\\\",SLB:\\\"solomon\\\",SOM:\\\"somali\\\",ZAF:\\\"south.africa|s\\\\\\\\\\\\\\\\..?africa\\\",SGS:\\\"south.?georgia|sandwich\\\",SSD:\\\"\\\\\\\\bs\\\\\\\\w*.?sudan\\\",ESP:\\\"spain\\\",LKA:\\\"sri.?lanka|ceylon\\\",SDN:\\\"^(?!.*\\\\\\\\bs(?!u)).*sudan\\\",SUR:\\\"surinam|dutch.?guiana\\\",SJM:\\\"svalbard\\\",SWZ:\\\"swaziland\\\",SWE:\\\"sweden\\\",CHE:\\\"switz|swiss\\\",SYR:\\\"syria\\\",TWN:\\\"taiwan|taipei|formosa|^(?!.*peo)(?=.*rep).*china\\\",TJK:\\\"tajik\\\",THA:\\\"thailand|\\\\\\\\bsiam\\\",MKD:\\\"macedonia|fyrom\\\",TLS:\\\"^(?=.*leste).*timor|^(?=.*east).*timor\\\",TGO:\\\"togo\\\",TKL:\\\"tokelau\\\",TON:\\\"tonga\\\",TTO:\\\"trinidad|tobago\\\",TUN:\\\"tunisia\\\",TUR:\\\"turkey\\\",TKM:\\\"turkmen\\\",TCA:\\\"turks\\\",TUV:\\\"tuvalu\\\",UGA:\\\"uganda\\\",UKR:\\\"ukrain\\\",ARE:\\\"emirates|^u\\\\\\\\.?a\\\\\\\\.?e\\\\\\\\.?$|united.?arab.?em\\\",GBR:\\\"united.?kingdom|britain|^u\\\\\\\\.?k\\\\\\\\.?$\\\",TZA:\\\"tanzania\\\",USA:\\\"united.?states\\\\\\\\b(?!.*islands)|\\\\\\\\bu\\\\\\\\.?s\\\\\\\\.?a\\\\\\\\.?\\\\\\\\b|^\\\\\\\\s*u\\\\\\\\.?s\\\\\\\\.?\\\\\\\\b(?!.*islands)\\\",UMI:\\\"minor.?outlying.?is\\\",URY:\\\"uruguay\\\",UZB:\\\"uzbek\\\",VUT:\\\"vanuatu|new.?hebrides\\\",VEN:\\\"venezuela\\\",VNM:\\\"^(?!.*republic).*viet.?nam|^(?=.*socialist).*viet.?nam\\\",VGB:\\\"^(?=.*\\\\\\\\bu\\\\\\\\.?\\\\\\\\s?k).*virgin|^(?=.*brit).*virgin|^(?=.*kingdom).*virgin\\\",VIR:\\\"^(?=.*\\\\\\\\bu\\\\\\\\.?\\\\\\\\s?s).*virgin|^(?=.*states).*virgin\\\",WLF:\\\"futuna|wallis\\\",ESH:\\\"western.sahara\\\",YEM:\\\"^(?!.*arab)(?!.*north)(?!.*sana)(?!.*peo)(?!.*dem)(?!.*south)(?!.*aden)(?!.*\\\\\\\\bp\\\\\\\\.?d\\\\\\\\.?r).*yemen\\\",YMD:\\\"^(?=.*peo).*yemen|^(?!.*rep)(?=.*dem).*yemen|^(?=.*south).*yemen|^(?=.*aden).*yemen|^(?=.*\\\\\\\\bp\\\\\\\\.?d\\\\\\\\.?r).*yemen\\\",YUG:\\\"yugoslavia\\\",ZMB:\\\"zambia|northern.?rhodesia\\\",EAZ:\\\"zanzibar\\\",ZWE:\\\"zimbabwe|^(?!.*northern).*rhodesia\\\"}},72791:function(t,e,r){\\\"use strict\\\";t.exports={parse:r(41004),stringify:r(53313)}},63625:function(t,e,r){\\\"use strict\\\";var n=r(40402);t.exports={isSize:function(t){return/^[\\\\d\\\\.]/.test(t)||-1!==t.indexOf(\\\"/\\\")||-1!==n.indexOf(t)}}},41004:function(t,e,r){\\\"use strict\\\";var n=r(90448),i=r(38732),a=r(41901),o=r(15659),s=r(96209),l=r(83794),u=r(99011),c=r(63625).isSize;t.exports=h;var f=h.cache={};function h(t){if(\\\"string\\\"!=typeof t)throw new Error(\\\"Font argument must be a string.\\\");if(f[t])return f[t];if(\\\"\\\"===t)throw new Error(\\\"Cannot parse an empty string.\\\");if(-1!==a.indexOf(t))return f[t]={system:t};for(var e,r={style:\\\"normal\\\",variant:\\\"normal\\\",weight:\\\"normal\\\",stretch:\\\"normal\\\",lineHeight:\\\"normal\\\",size:\\\"1rem\\\",family:[\\\"serif\\\"]},h=u(t,/\\\\s+/);e=h.shift();){if(-1!==i.indexOf(e))return[\\\"style\\\",\\\"variant\\\",\\\"weight\\\",\\\"stretch\\\"].forEach((function(t){r[t]=e})),f[t]=r;if(-1===s.indexOf(e))if(\\\"normal\\\"!==e&&\\\"small-caps\\\"!==e)if(-1===l.indexOf(e)){if(-1===o.indexOf(e)){if(c(e)){var d=u(e,\\\"/\\\");if(r.size=d[0],null!=d[1]?r.lineHeight=p(d[1]):\\\"/\\\"===h[0]&&(h.shift(),r.lineHeight=p(h.shift())),!h.length)throw new Error(\\\"Missing required font-family.\\\");return r.family=u(h.join(\\\" \\\"),/\\\\s*,\\\\s*/).map(n),f[t]=r}throw new Error(\\\"Unknown or unsupported font token: \\\"+e)}r.weight=e}else r.stretch=e;else r.variant=e;else r.style=e}throw new Error(\\\"Missing required font-size.\\\")}function p(t){var e=parseFloat(t);return e.toString()===t?e:t}},53313:function(t,e,r){\\\"use strict\\\";var n=r(71299),i=r(63625).isSize,a=d(r(38732)),o=d(r(41901)),s=d(r(15659)),l=d(r(96209)),u=d(r(83794)),c={normal:1,\\\"small-caps\\\":1},f={serif:1,\\\"sans-serif\\\":1,monospace:1,cursive:1,fantasy:1,\\\"system-ui\\\":1},h=\\\"serif\\\";function p(t,e){if(t&&!e[t]&&!a[t])throw Error(\\\"Unknown keyword `\\\"+t+\\\"`\\\");return t}function d(t){for(var e={},r=0;r<t.length;r++)e[t[r]]=1;return e}t.exports=function(t){if((t=n(t,{style:\\\"style fontstyle fontStyle font-style slope distinction\\\",variant:\\\"variant font-variant fontVariant fontvariant var capitalization\\\",weight:\\\"weight w font-weight fontWeight fontweight\\\",stretch:\\\"stretch font-stretch fontStretch fontstretch width\\\",size:\\\"size s font-size fontSize fontsize height em emSize\\\",lineHeight:\\\"lh line-height lineHeight lineheight leading\\\",family:\\\"font family fontFamily font-family fontfamily type typeface face\\\",system:\\\"system reserved default global\\\"})).system)return t.system&&p(t.system,o),t.system;if(p(t.style,l),p(t.variant,c),p(t.weight,s),p(t.stretch,u),null==t.size&&(t.size=\\\"1rem\\\"),\\\"number\\\"==typeof t.size&&(t.size+=\\\"px\\\"),!i)throw Error(\\\"Bad size value `\\\"+t.size+\\\"`\\\");t.family||(t.family=h),Array.isArray(t.family)&&(t.family.length||(t.family=[h]),t.family=t.family.map((function(t){return f[t]?t:'\\\"'+t+'\\\"'})).join(\\\", \\\"));var e=[];return e.push(t.style),t.variant!==t.style&&e.push(t.variant),t.weight!==t.variant&&t.weight!==t.style&&e.push(t.weight),t.stretch!==t.weight&&t.stretch!==t.variant&&t.stretch!==t.style&&e.push(t.stretch),e.push(t.size+(null==t.lineHeight||\\\"normal\\\"===t.lineHeight||t.lineHeight+\\\"\\\"==\\\"1\\\"?\\\"\\\":\\\"/\\\"+t.lineHeight)),e.push(t.family),e.filter(Boolean).join(\\\" \\\")}},55174:function(t,e,r){\\\"use strict\\\";var n,i=r(24582),a=r(10424),o=r(82527),s=r(19012),l=r(21780),u=r(16906),c=Function.prototype.bind,f=Object.defineProperty,h=Object.prototype.hasOwnProperty;n=function(t,e,r){var n,i=a(e)&&o(e.value);return delete(n=s(e)).writable,delete n.value,n.get=function(){return!r.overwriteDefinition&&h.call(this,t)?i:(e.value=c.call(i,r.resolveContext?r.resolveContext(this):this),f(this,t,e),this[t])},n},t.exports=function(t){var e=l(arguments[1]);return i(e.resolveContext)&&o(e.resolveContext),u(t,(function(t,r){return n(r,t,e)}))}},62072:function(t,e,r){\\\"use strict\\\";var n=r(24582),i=r(84985),a=r(95879),o=r(21780),s=r(66741),l=t.exports=function(t,e){var r,i,l,u,c;return arguments.length<2||\\\"string\\\"!=typeof t?(u=e,e=t,t=null):u=arguments[2],n(t)?(r=s.call(t,\\\"c\\\"),i=s.call(t,\\\"e\\\"),l=s.call(t,\\\"w\\\")):(r=l=!0,i=!1),c={value:e,configurable:r,enumerable:i,writable:l},u?a(o(u),c):c};l.gs=function(t,e,r){var l,u,c,f;return\\\"string\\\"!=typeof t?(c=r,r=e,e=t,t=null):c=arguments[3],n(e)?i(e)?n(r)?i(r)||(c=r,r=void 0):r=void 0:(c=e,e=r=void 0):e=void 0,n(t)?(l=s.call(t,\\\"c\\\"),u=s.call(t,\\\"e\\\")):(l=!0,u=!1),f={get:e,set:r,configurable:l,enumerable:u},c?a(o(c),f):f}},33064:function(t,e,r){\\\"use strict\\\";function n(t,e){return t<e?-1:t>e?1:t>=e?0:NaN}r.d(e,{j2:function(){return n},Fp:function(){return s},J6:function(){return u},TS:function(){return c},VV:function(){return f},w6:function(){return h},Sm:function(){return p}}),1===(i=n).length&&(a=i,i=function(t,e){return n(a(t),e)});var i,a,o=Array.prototype;function s(t,e){var r,n,i=t.length,a=-1;if(null==e){for(;++a<i;)if(null!=(r=t[a])&&r>=r)for(n=r;++a<i;)null!=(r=t[a])&&r>n&&(n=r)}else for(;++a<i;)if(null!=(r=e(t[a],a,t))&&r>=r)for(n=r;++a<i;)null!=(r=e(t[a],a,t))&&r>n&&(n=r);return n}function l(t){return null===t?NaN:+t}function u(t,e){var r,n=t.length,i=n,a=-1,o=0;if(null==e)for(;++a<n;)isNaN(r=l(t[a]))?--i:o+=r;else for(;++a<n;)isNaN(r=l(e(t[a],a,t)))?--i:o+=r;if(i)return o/i}function c(t){for(var e,r,n,i=t.length,a=-1,o=0;++a<i;)o+=t[a].length;for(r=new Array(o);--i>=0;)for(e=(n=t[i]).length;--e>=0;)r[--o]=n[e];return r}function f(t,e){var r,n,i=t.length,a=-1;if(null==e){for(;++a<i;)if(null!=(r=t[a])&&r>=r)for(n=r;++a<i;)null!=(r=t[a])&&n>r&&(n=r)}else for(;++a<i;)if(null!=(r=e(t[a],a,t))&&r>=r)for(n=r;++a<i;)null!=(r=e(t[a],a,t))&&n>r&&(n=r);return n}function h(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=0|Math.max(0,Math.ceil((e-t)/r)),a=new Array(i);++n<i;)a[n]=t+n*r;return a}function p(t,e){var r,n=t.length,i=-1,a=0;if(null==e)for(;++i<n;)(r=+t[i])&&(a+=r);else for(;++i<n;)(r=+e(t[i],i,t))&&(a+=r);return a}o.slice,o.map,Math.sqrt(50),Math.sqrt(10),Math.sqrt(2)},15140:function(t,e,r){\\\"use strict\\\";r.d(e,{UI:function(){return o},b1:function(){return s}});var n=\\\"$\\\";function i(){}function a(t,e){var r=new i;if(t instanceof i)t.each((function(t,e){r.set(e,t)}));else if(Array.isArray(t)){var n,a=-1,o=t.length;if(null==e)for(;++a<o;)r.set(a,t[a]);else for(;++a<o;)r.set(e(n=t[a],a,t),n)}else if(t)for(var s in t)r.set(s,t[s]);return r}i.prototype=a.prototype={constructor:i,has:function(t){return n+t in this},get:function(t){return this[n+t]},set:function(t,e){return this[n+t]=e,this},remove:function(t){var e=n+t;return e in this&&delete this[e]},clear:function(){for(var t in this)t[0]===n&&delete this[t]},keys:function(){var t=[];for(var e in this)e[0]===n&&t.push(e.slice(1));return t},values:function(){var t=[];for(var e in this)e[0]===n&&t.push(this[e]);return t},entries:function(){var t=[];for(var e in this)e[0]===n&&t.push({key:e.slice(1),value:this[e]});return t},size:function(){var t=0;for(var e in this)e[0]===n&&++t;return t},empty:function(){for(var t in this)if(t[0]===n)return!1;return!0},each:function(t){for(var e in this)e[0]===n&&t(this[e],e.slice(1),this)}};var o=a;function s(){var t,e,r,n=[],i=[];function a(r,i,s,l){if(i>=n.length)return null!=t&&r.sort(t),null!=e?e(r):r;for(var u,c,f,h=-1,p=r.length,d=n[i++],v=o(),g=s();++h<p;)(f=v.get(u=d(c=r[h])+\\\"\\\"))?f.push(c):v.set(u,[c]);return v.each((function(t,e){l(g,e,a(t,i,s,l))})),g}function s(t,r){if(++r>n.length)return t;var a,o=i[r-1];return null!=e&&r>=n.length?a=t.entries():(a=[],t.each((function(t,e){a.push({key:e,values:s(t,r)})}))),null!=o?a.sort((function(t,e){return o(t.key,e.key)})):a}return r={object:function(t){return a(t,0,l,u)},map:function(t){return a(t,0,c,f)},entries:function(t){return s(a(t,0,c,f),0)},key:function(t){return n.push(t),r},sortKeys:function(t){return i[n.length-1]=t,r},sortValues:function(e){return t=e,r},rollup:function(t){return e=t,r}}}function l(){return{}}function u(t,e,r){t[e]=r}function c(){return o()}function f(t,e,r){t.set(e,r)}function h(){}var p=o.prototype;h.prototype=function(t,e){var r=new h;if(t instanceof h)t.each((function(t){r.add(t)}));else if(t){var n=-1,i=t.length;if(null==e)for(;++n<i;)r.add(t[n]);else for(;++n<i;)r.add(e(t[n],n,t))}return r}.prototype={constructor:h,has:p.has,add:function(t){return this[n+(t+=\\\"\\\")]=t,this},remove:p.remove,clear:p.clear,values:p.keys,size:p.size,empty:p.empty,each:p.each}},49887:function(t,e,r){\\\"use strict\\\";function n(t,e){var r;function n(){var n,i,a=r.length,o=0,s=0;for(n=0;n<a;++n)o+=(i=r[n]).x,s+=i.y;for(o=o/a-t,s=s/a-e,n=0;n<a;++n)(i=r[n]).x-=o,i.y-=s}return null==t&&(t=0),null==e&&(e=0),n.initialize=function(t){r=t},n.x=function(e){return arguments.length?(t=+e,n):t},n.y=function(t){return arguments.length?(e=+t,n):e},n}function i(t){return function(){return t}}function a(){return 1e-6*(Math.random()-.5)}function o(t,e,r,n){if(isNaN(e)||isNaN(r))return t;var i,a,o,s,l,u,c,f,h,p=t._root,d={data:n},v=t._x0,g=t._y0,y=t._x1,m=t._y1;if(!p)return t._root=d,t;for(;p.length;)if((u=e>=(a=(v+y)/2))?v=a:y=a,(c=r>=(o=(g+m)/2))?g=o:m=o,i=p,!(p=p[f=c<<1|u]))return i[f]=d,t;if(s=+t._x.call(null,p.data),l=+t._y.call(null,p.data),e===s&&r===l)return d.next=p,i?i[f]=d:t._root=d,t;do{i=i?i[f]=new Array(4):t._root=new Array(4),(u=e>=(a=(v+y)/2))?v=a:y=a,(c=r>=(o=(g+m)/2))?g=o:m=o}while((f=c<<1|u)==(h=(l>=o)<<1|s>=a));return i[h]=p,i[f]=d,t}function s(t,e,r,n,i){this.node=t,this.x0=e,this.y0=r,this.x1=n,this.y1=i}function l(t){return t[0]}function u(t){return t[1]}function c(t,e,r){var n=new f(null==e?l:e,null==r?u:r,NaN,NaN,NaN,NaN);return null==t?n:n.addAll(t)}function f(t,e,r,n,i,a){this._x=t,this._y=e,this._x0=r,this._y0=n,this._x1=i,this._y1=a,this._root=void 0}function h(t){for(var e={data:t.data},r=e;t=t.next;)r=r.next={data:t.data};return e}r.r(e),r.d(e,{forceCenter:function(){return n},forceCollide:function(){return g},forceLink:function(){return b},forceManyBody:function(){return J},forceRadial:function(){return K},forceSimulation:function(){return X},forceX:function(){return $},forceY:function(){return Q}});var p=c.prototype=f.prototype;function d(t){return t.x+t.vx}function v(t){return t.y+t.vy}function g(t){var e,r,n=1,o=1;function s(){for(var t,i,s,u,f,h,p,g=e.length,y=0;y<o;++y)for(i=c(e,d,v).visitAfter(l),t=0;t<g;++t)s=e[t],h=r[s.index],p=h*h,u=s.x+s.vx,f=s.y+s.vy,i.visit(m);function m(t,e,r,i,o){var l=t.data,c=t.r,d=h+c;if(!l)return e>u+d||i<u-d||r>f+d||o<f-d;if(l.index>s.index){var v=u-l.x-l.vx,g=f-l.y-l.vy,y=v*v+g*g;y<d*d&&(0===v&&(y+=(v=a())*v),0===g&&(y+=(g=a())*g),y=(d-(y=Math.sqrt(y)))/y*n,s.vx+=(v*=y)*(d=(c*=c)/(p+c)),s.vy+=(g*=y)*d,l.vx-=v*(d=1-d),l.vy-=g*d)}}}function l(t){if(t.data)return t.r=r[t.data.index];for(var e=t.r=0;e<4;++e)t[e]&&t[e].r>t.r&&(t.r=t[e].r)}function u(){if(e){var n,i,a=e.length;for(r=new Array(a),n=0;n<a;++n)i=e[n],r[i.index]=+t(i,n,e)}}return\\\"function\\\"!=typeof t&&(t=i(null==t?1:+t)),s.initialize=function(t){e=t,u()},s.iterations=function(t){return arguments.length?(o=+t,s):o},s.strength=function(t){return arguments.length?(n=+t,s):n},s.radius=function(e){return arguments.length?(t=\\\"function\\\"==typeof e?e:i(+e),u(),s):t},s}p.copy=function(){var t,e,r=new f(this._x,this._y,this._x0,this._y0,this._x1,this._y1),n=this._root;if(!n)return r;if(!n.length)return r._root=h(n),r;for(t=[{source:n,target:r._root=new Array(4)}];n=t.pop();)for(var i=0;i<4;++i)(e=n.source[i])&&(e.length?t.push({source:e,target:n.target[i]=new Array(4)}):n.target[i]=h(e));return r},p.add=function(t){var e=+this._x.call(null,t),r=+this._y.call(null,t);return o(this.cover(e,r),e,r,t)},p.addAll=function(t){var e,r,n,i,a=t.length,s=new Array(a),l=new Array(a),u=1/0,c=1/0,f=-1/0,h=-1/0;for(r=0;r<a;++r)isNaN(n=+this._x.call(null,e=t[r]))||isNaN(i=+this._y.call(null,e))||(s[r]=n,l[r]=i,n<u&&(u=n),n>f&&(f=n),i<c&&(c=i),i>h&&(h=i));if(u>f||c>h)return this;for(this.cover(u,c).cover(f,h),r=0;r<a;++r)o(this,s[r],l[r],t[r]);return this},p.cover=function(t,e){if(isNaN(t=+t)||isNaN(e=+e))return this;var r=this._x0,n=this._y0,i=this._x1,a=this._y1;if(isNaN(r))i=(r=Math.floor(t))+1,a=(n=Math.floor(e))+1;else{for(var o,s,l=i-r,u=this._root;r>t||t>=i||n>e||e>=a;)switch(s=(e<n)<<1|t<r,(o=new Array(4))[s]=u,u=o,l*=2,s){case 0:i=r+l,a=n+l;break;case 1:r=i-l,a=n+l;break;case 2:i=r+l,n=a-l;break;case 3:r=i-l,n=a-l}this._root&&this._root.length&&(this._root=u)}return this._x0=r,this._y0=n,this._x1=i,this._y1=a,this},p.data=function(){var t=[];return this.visit((function(e){if(!e.length)do{t.push(e.data)}while(e=e.next)})),t},p.extent=function(t){return arguments.length?this.cover(+t[0][0],+t[0][1]).cover(+t[1][0],+t[1][1]):isNaN(this._x0)?void 0:[[this._x0,this._y0],[this._x1,this._y1]]},p.find=function(t,e,r){var n,i,a,o,l,u,c,f=this._x0,h=this._y0,p=this._x1,d=this._y1,v=[],g=this._root;for(g&&v.push(new s(g,f,h,p,d)),null==r?r=1/0:(f=t-r,h=e-r,p=t+r,d=e+r,r*=r);u=v.pop();)if(!(!(g=u.node)||(i=u.x0)>p||(a=u.y0)>d||(o=u.x1)<f||(l=u.y1)<h))if(g.length){var y=(i+o)/2,m=(a+l)/2;v.push(new s(g[3],y,m,o,l),new s(g[2],i,m,y,l),new s(g[1],y,a,o,m),new s(g[0],i,a,y,m)),(c=(e>=m)<<1|t>=y)&&(u=v[v.length-1],v[v.length-1]=v[v.length-1-c],v[v.length-1-c]=u)}else{var x=t-+this._x.call(null,g.data),b=e-+this._y.call(null,g.data),_=x*x+b*b;if(_<r){var w=Math.sqrt(r=_);f=t-w,h=e-w,p=t+w,d=e+w,n=g.data}}return n},p.remove=function(t){if(isNaN(a=+this._x.call(null,t))||isNaN(o=+this._y.call(null,t)))return this;var e,r,n,i,a,o,s,l,u,c,f,h,p=this._root,d=this._x0,v=this._y0,g=this._x1,y=this._y1;if(!p)return this;if(p.length)for(;;){if((u=a>=(s=(d+g)/2))?d=s:g=s,(c=o>=(l=(v+y)/2))?v=l:y=l,e=p,!(p=p[f=c<<1|u]))return this;if(!p.length)break;(e[f+1&3]||e[f+2&3]||e[f+3&3])&&(r=e,h=f)}for(;p.data!==t;)if(n=p,!(p=p.next))return this;return(i=p.next)&&delete p.next,n?(i?n.next=i:delete n.next,this):e?(i?e[f]=i:delete e[f],(p=e[0]||e[1]||e[2]||e[3])&&p===(e[3]||e[2]||e[1]||e[0])&&!p.length&&(r?r[h]=p:this._root=p),this):(this._root=i,this)},p.removeAll=function(t){for(var e=0,r=t.length;e<r;++e)this.remove(t[e]);return this},p.root=function(){return this._root},p.size=function(){var t=0;return this.visit((function(e){if(!e.length)do{++t}while(e=e.next)})),t},p.visit=function(t){var e,r,n,i,a,o,l=[],u=this._root;for(u&&l.push(new s(u,this._x0,this._y0,this._x1,this._y1));e=l.pop();)if(!t(u=e.node,n=e.x0,i=e.y0,a=e.x1,o=e.y1)&&u.length){var c=(n+a)/2,f=(i+o)/2;(r=u[3])&&l.push(new s(r,c,f,a,o)),(r=u[2])&&l.push(new s(r,n,f,c,o)),(r=u[1])&&l.push(new s(r,c,i,a,f)),(r=u[0])&&l.push(new s(r,n,i,c,f))}return this},p.visitAfter=function(t){var e,r=[],n=[];for(this._root&&r.push(new s(this._root,this._x0,this._y0,this._x1,this._y1));e=r.pop();){var i=e.node;if(i.length){var a,o=e.x0,l=e.y0,u=e.x1,c=e.y1,f=(o+u)/2,h=(l+c)/2;(a=i[0])&&r.push(new s(a,o,l,f,h)),(a=i[1])&&r.push(new s(a,f,l,u,h)),(a=i[2])&&r.push(new s(a,o,h,f,c)),(a=i[3])&&r.push(new s(a,f,h,u,c))}n.push(e)}for(;e=n.pop();)t(e.node,e.x0,e.y0,e.x1,e.y1);return this},p.x=function(t){return arguments.length?(this._x=t,this):this._x},p.y=function(t){return arguments.length?(this._y=t,this):this._y};var y=r(15140);function m(t){return t.index}function x(t,e){var r=t.get(e);if(!r)throw new Error(\\\"missing: \\\"+e);return r}function b(t){var e,r,n,o,s,l=m,u=function(t){return 1/Math.min(o[t.source.index],o[t.target.index])},c=i(30),f=1;function h(n){for(var i=0,o=t.length;i<f;++i)for(var l,u,c,h,p,d,v,g=0;g<o;++g)u=(l=t[g]).source,h=(c=l.target).x+c.vx-u.x-u.vx||a(),p=c.y+c.vy-u.y-u.vy||a(),h*=d=((d=Math.sqrt(h*h+p*p))-r[g])/d*n*e[g],p*=d,c.vx-=h*(v=s[g]),c.vy-=p*v,u.vx+=h*(v=1-v),u.vy+=p*v}function p(){if(n){var i,a,u=n.length,c=t.length,f=(0,y.UI)(n,l);for(i=0,o=new Array(u);i<c;++i)(a=t[i]).index=i,\\\"object\\\"!=typeof a.source&&(a.source=x(f,a.source)),\\\"object\\\"!=typeof a.target&&(a.target=x(f,a.target)),o[a.source.index]=(o[a.source.index]||0)+1,o[a.target.index]=(o[a.target.index]||0)+1;for(i=0,s=new Array(c);i<c;++i)a=t[i],s[i]=o[a.source.index]/(o[a.source.index]+o[a.target.index]);e=new Array(c),d(),r=new Array(c),v()}}function d(){if(n)for(var r=0,i=t.length;r<i;++r)e[r]=+u(t[r],r,t)}function v(){if(n)for(var e=0,i=t.length;e<i;++e)r[e]=+c(t[e],e,t)}return null==t&&(t=[]),h.initialize=function(t){n=t,p()},h.links=function(e){return arguments.length?(t=e,p(),h):t},h.id=function(t){return arguments.length?(l=t,h):l},h.iterations=function(t){return arguments.length?(f=+t,h):f},h.strength=function(t){return arguments.length?(u=\\\"function\\\"==typeof t?t:i(+t),d(),h):u},h.distance=function(t){return arguments.length?(c=\\\"function\\\"==typeof t?t:i(+t),v(),h):c},h}var _={value:function(){}};function w(){for(var t,e=0,r=arguments.length,n={};e<r;++e){if(!(t=arguments[e]+\\\"\\\")||t in n||/[\\\\s.]/.test(t))throw new Error(\\\"illegal type: \\\"+t);n[t]=[]}return new T(n)}function T(t){this._=t}function k(t,e){for(var r,n=0,i=t.length;n<i;++n)if((r=t[n]).name===e)return r.value}function A(t,e,r){for(var n=0,i=t.length;n<i;++n)if(t[n].name===e){t[n]=_,t=t.slice(0,n).concat(t.slice(n+1));break}return null!=r&&t.push({name:e,value:r}),t}T.prototype=w.prototype={constructor:T,on:function(t,e){var r,n,i=this._,a=(n=i,(t+\\\"\\\").trim().split(/^|\\\\s+/).map((function(t){var e=\\\"\\\",r=t.indexOf(\\\".\\\");if(r>=0&&(e=t.slice(r+1),t=t.slice(0,r)),t&&!n.hasOwnProperty(t))throw new Error(\\\"unknown type: \\\"+t);return{type:t,name:e}}))),o=-1,s=a.length;if(!(arguments.length<2)){if(null!=e&&\\\"function\\\"!=typeof e)throw new Error(\\\"invalid callback: \\\"+e);for(;++o<s;)if(r=(t=a[o]).type)i[r]=A(i[r],t.name,e);else if(null==e)for(r in i)i[r]=A(i[r],t.name,null);return this}for(;++o<s;)if((r=(t=a[o]).type)&&(r=k(i[r],t.name)))return r},copy:function(){var t={},e=this._;for(var r in e)t[r]=e[r].slice();return new T(t)},call:function(t,e){if((r=arguments.length-2)>0)for(var r,n,i=new Array(r),a=0;a<r;++a)i[a]=arguments[a+2];if(!this._.hasOwnProperty(t))throw new Error(\\\"unknown type: \\\"+t);for(a=0,r=(n=this._[t]).length;a<r;++a)n[a].value.apply(e,i)},apply:function(t,e,r){if(!this._.hasOwnProperty(t))throw new Error(\\\"unknown type: \\\"+t);for(var n=this._[t],i=0,a=n.length;i<a;++i)n[i].value.apply(e,r)}};var M,S,E=w,L=0,C=0,P=0,O=1e3,I=0,D=0,z=0,R=\\\"object\\\"==typeof performance&&performance.now?performance:Date,F=\\\"object\\\"==typeof window&&window.requestAnimationFrame?window.requestAnimationFrame.bind(window):function(t){setTimeout(t,17)};function B(){return D||(F(N),D=R.now()+z)}function N(){D=0}function j(){this._call=this._time=this._next=null}function U(t,e,r){var n=new j;return n.restart(t,e,r),n}function V(){D=(I=R.now())+z,L=C=0;try{!function(){B(),++L;for(var t,e=M;e;)(t=D-e._time)>=0&&e._call.call(null,t),e=e._next;--L}()}finally{L=0,function(){for(var t,e,r=M,n=1/0;r;)r._call?(n>r._time&&(n=r._time),t=r,r=r._next):(e=r._next,r._next=null,r=t?t._next=e:M=e);S=t,q(n)}(),D=0}}function H(){var t=R.now(),e=t-I;e>O&&(z-=e,I=t)}function q(t){L||(C&&(C=clearTimeout(C)),t-D>24?(t<1/0&&(C=setTimeout(V,t-R.now()-z)),P&&(P=clearInterval(P))):(P||(I=R.now(),P=setInterval(H,O)),L=1,F(V)))}function G(t){return t.x}function Z(t){return t.y}j.prototype=U.prototype={constructor:j,restart:function(t,e,r){if(\\\"function\\\"!=typeof t)throw new TypeError(\\\"callback is not a function\\\");r=(null==r?B():+r)+(null==e?0:+e),this._next||S===this||(S?S._next=this:M=this,S=this),this._call=t,this._time=r,q()},stop:function(){this._call&&(this._call=null,this._time=1/0,q())}};var Y=10,W=Math.PI*(3-Math.sqrt(5));function X(t){var e,r=1,n=.001,i=1-Math.pow(n,1/300),a=0,o=.6,s=(0,y.UI)(),l=U(c),u=E(\\\"tick\\\",\\\"end\\\");function c(){f(),u.call(\\\"tick\\\",e),r<n&&(l.stop(),u.call(\\\"end\\\",e))}function f(n){var l,u,c=t.length;void 0===n&&(n=1);for(var f=0;f<n;++f)for(r+=(a-r)*i,s.each((function(t){t(r)})),l=0;l<c;++l)null==(u=t[l]).fx?u.x+=u.vx*=o:(u.x=u.fx,u.vx=0),null==u.fy?u.y+=u.vy*=o:(u.y=u.fy,u.vy=0);return e}function h(){for(var e,r=0,n=t.length;r<n;++r){if((e=t[r]).index=r,null!=e.fx&&(e.x=e.fx),null!=e.fy&&(e.y=e.fy),isNaN(e.x)||isNaN(e.y)){var i=Y*Math.sqrt(r),a=r*W;e.x=i*Math.cos(a),e.y=i*Math.sin(a)}(isNaN(e.vx)||isNaN(e.vy))&&(e.vx=e.vy=0)}}function p(e){return e.initialize&&e.initialize(t),e}return null==t&&(t=[]),h(),e={tick:f,restart:function(){return l.restart(c),e},stop:function(){return l.stop(),e},nodes:function(r){return arguments.length?(t=r,h(),s.each(p),e):t},alpha:function(t){return arguments.length?(r=+t,e):r},alphaMin:function(t){return arguments.length?(n=+t,e):n},alphaDecay:function(t){return arguments.length?(i=+t,e):+i},alphaTarget:function(t){return arguments.length?(a=+t,e):a},velocityDecay:function(t){return arguments.length?(o=1-t,e):1-o},force:function(t,r){return arguments.length>1?(null==r?s.remove(t):s.set(t,p(r)),e):s.get(t)},find:function(e,r,n){var i,a,o,s,l,u=0,c=t.length;for(null==n?n=1/0:n*=n,u=0;u<c;++u)(o=(i=e-(s=t[u]).x)*i+(a=r-s.y)*a)<n&&(l=s,n=o);return l},on:function(t,r){return arguments.length>1?(u.on(t,r),e):u.on(t)}}}function J(){var t,e,r,n,o=i(-30),s=1,l=1/0,u=.81;function f(n){var i,a=t.length,o=c(t,G,Z).visitAfter(p);for(r=n,i=0;i<a;++i)e=t[i],o.visit(d)}function h(){if(t){var e,r,i=t.length;for(n=new Array(i),e=0;e<i;++e)r=t[e],n[r.index]=+o(r,e,t)}}function p(t){var e,r,i,a,o,s=0,l=0;if(t.length){for(i=a=o=0;o<4;++o)(e=t[o])&&(r=Math.abs(e.value))&&(s+=e.value,l+=r,i+=r*e.x,a+=r*e.y);t.x=i/l,t.y=a/l}else{(e=t).x=e.data.x,e.y=e.data.y;do{s+=n[e.data.index]}while(e=e.next)}t.value=s}function d(t,i,o,c){if(!t.value)return!0;var f=t.x-e.x,h=t.y-e.y,p=c-i,d=f*f+h*h;if(p*p/u<d)return d<l&&(0===f&&(d+=(f=a())*f),0===h&&(d+=(h=a())*h),d<s&&(d=Math.sqrt(s*d)),e.vx+=f*t.value*r/d,e.vy+=h*t.value*r/d),!0;if(!(t.length||d>=l)){(t.data!==e||t.next)&&(0===f&&(d+=(f=a())*f),0===h&&(d+=(h=a())*h),d<s&&(d=Math.sqrt(s*d)));do{t.data!==e&&(p=n[t.data.index]*r/d,e.vx+=f*p,e.vy+=h*p)}while(t=t.next)}}return f.initialize=function(e){t=e,h()},f.strength=function(t){return arguments.length?(o=\\\"function\\\"==typeof t?t:i(+t),h(),f):o},f.distanceMin=function(t){return arguments.length?(s=t*t,f):Math.sqrt(s)},f.distanceMax=function(t){return arguments.length?(l=t*t,f):Math.sqrt(l)},f.theta=function(t){return arguments.length?(u=t*t,f):Math.sqrt(u)},f}function K(t,e,r){var n,a,o,s=i(.1);function l(t){for(var i=0,s=n.length;i<s;++i){var l=n[i],u=l.x-e||1e-6,c=l.y-r||1e-6,f=Math.sqrt(u*u+c*c),h=(o[i]-f)*a[i]*t/f;l.vx+=u*h,l.vy+=c*h}}function u(){if(n){var e,r=n.length;for(a=new Array(r),o=new Array(r),e=0;e<r;++e)o[e]=+t(n[e],e,n),a[e]=isNaN(o[e])?0:+s(n[e],e,n)}}return\\\"function\\\"!=typeof t&&(t=i(+t)),null==e&&(e=0),null==r&&(r=0),l.initialize=function(t){n=t,u()},l.strength=function(t){return arguments.length?(s=\\\"function\\\"==typeof t?t:i(+t),u(),l):s},l.radius=function(e){return arguments.length?(t=\\\"function\\\"==typeof e?e:i(+e),u(),l):t},l.x=function(t){return arguments.length?(e=+t,l):e},l.y=function(t){return arguments.length?(r=+t,l):r},l}function $(t){var e,r,n,a=i(.1);function o(t){for(var i,a=0,o=e.length;a<o;++a)(i=e[a]).vx+=(n[a]-i.x)*r[a]*t}function s(){if(e){var i,o=e.length;for(r=new Array(o),n=new Array(o),i=0;i<o;++i)r[i]=isNaN(n[i]=+t(e[i],i,e))?0:+a(e[i],i,e)}}return\\\"function\\\"!=typeof t&&(t=i(null==t?0:+t)),o.initialize=function(t){e=t,s()},o.strength=function(t){return arguments.length?(a=\\\"function\\\"==typeof t?t:i(+t),s(),o):a},o.x=function(e){return arguments.length?(t=\\\"function\\\"==typeof e?e:i(+e),s(),o):t},o}function Q(t){var e,r,n,a=i(.1);function o(t){for(var i,a=0,o=e.length;a<o;++a)(i=e[a]).vy+=(n[a]-i.y)*r[a]*t}function s(){if(e){var i,o=e.length;for(r=new Array(o),n=new Array(o),i=0;i<o;++i)r[i]=isNaN(n[i]=+t(e[i],i,e))?0:+a(e[i],i,e)}}return\\\"function\\\"!=typeof t&&(t=i(null==t?0:+t)),o.initialize=function(t){e=t,s()},o.strength=function(t){return arguments.length?(a=\\\"function\\\"==typeof t?t:i(+t),s(),o):a},o.y=function(e){return arguments.length?(t=\\\"function\\\"==typeof e?e:i(+e),s(),o):t},o}},60721:function(t,e,r){\\\"use strict\\\";function n(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)]}r.d(e,{WU:function(){return h},FF:function(){return v}});var i,a=/^(?:(.)?([<>=^]))?([+\\\\-( ])?([$#])?(0)?(\\\\d+)?(,)?(\\\\.\\\\d+)?(~)?([a-z%])?$/i;function o(t){if(!(e=a.exec(t)))throw new Error(\\\"invalid format: \\\"+t);var e;return new s({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 s(t){this.fill=void 0===t.fill?\\\" \\\":t.fill+\\\"\\\",this.align=void 0===t.align?\\\">\\\":t.align+\\\"\\\",this.sign=void 0===t.sign?\\\"-\\\":t.sign+\\\"\\\",this.symbol=void 0===t.symbol?\\\"\\\":t.symbol+\\\"\\\",this.zero=!!t.zero,this.width=void 0===t.width?void 0:+t.width,this.comma=!!t.comma,this.precision=void 0===t.precision?void 0:+t.precision,this.trim=!!t.trim,this.type=void 0===t.type?\\\"\\\":t.type+\\\"\\\"}function l(t,e){var r=n(t,e);if(!r)return t+\\\"\\\";var i=r[0],a=r[1];return a<0?\\\"0.\\\"+new Array(-a).join(\\\"0\\\")+i:i.length>a+1?i.slice(0,a+1)+\\\".\\\"+i.slice(a+1):i+new Array(a-i.length+2).join(\\\"0\\\")}o.prototype=s.prototype,s.prototype.toString=function(){return this.fill+this.align+this.sign+this.symbol+(this.zero?\\\"0\\\":\\\"\\\")+(void 0===this.width?\\\"\\\":Math.max(1,0|this.width))+(this.comma?\\\",\\\":\\\"\\\")+(void 0===this.precision?\\\"\\\":\\\".\\\"+Math.max(0,0|this.precision))+(this.trim?\\\"~\\\":\\\"\\\")+this.type};var u={\\\"%\\\":function(t,e){return(100*t).toFixed(e)},b:function(t){return Math.round(t).toString(2)},c:function(t){return t+\\\"\\\"},d:function(t){return Math.abs(t=Math.round(t))>=1e21?t.toLocaleString(\\\"en\\\").replace(/,/g,\\\"\\\"):t.toString(10)},e:function(t,e){return t.toExponential(e)},f:function(t,e){return t.toFixed(e)},g:function(t,e){return t.toPrecision(e)},o:function(t){return Math.round(t).toString(8)},p:function(t,e){return l(100*t,e)},r:l,s:function(t,e){var r=n(t,e);if(!r)return t+\\\"\\\";var a=r[0],o=r[1],s=o-(i=3*Math.max(-8,Math.min(8,Math.floor(o/3))))+1,l=a.length;return s===l?a:s>l?a+new Array(s-l+1).join(\\\"0\\\"):s>0?a.slice(0,s)+\\\".\\\"+a.slice(s):\\\"0.\\\"+new Array(1-s).join(\\\"0\\\")+n(t,Math.max(0,e+s-1))[0]},X:function(t){return Math.round(t).toString(16).toUpperCase()},x:function(t){return Math.round(t).toString(16)}};function c(t){return t}var f,h,p=Array.prototype.map,d=[\\\"y\\\",\\\"z\\\",\\\"a\\\",\\\"f\\\",\\\"p\\\",\\\"n\\\",\\\"µ\\\",\\\"m\\\",\\\"\\\",\\\"k\\\",\\\"M\\\",\\\"G\\\",\\\"T\\\",\\\"P\\\",\\\"E\\\",\\\"Z\\\",\\\"Y\\\"];function v(t){var e,r,a=void 0===t.grouping||void 0===t.thousands?c:(e=p.call(t.grouping,Number),r=t.thousands+\\\"\\\",function(t,n){for(var i=t.length,a=[],o=0,s=e[0],l=0;i>0&&s>0&&(l+s+1>n&&(s=Math.max(1,n-l)),a.push(t.substring(i-=s,i+s)),!((l+=s+1)>n));)s=e[o=(o+1)%e.length];return a.reverse().join(r)}),s=void 0===t.currency?\\\"\\\":t.currency[0]+\\\"\\\",l=void 0===t.currency?\\\"\\\":t.currency[1]+\\\"\\\",f=void 0===t.decimal?\\\".\\\":t.decimal+\\\"\\\",h=void 0===t.numerals?c:function(t){return function(e){return e.replace(/[0-9]/g,(function(e){return t[+e]}))}}(p.call(t.numerals,String)),v=void 0===t.percent?\\\"%\\\":t.percent+\\\"\\\",g=void 0===t.minus?\\\"-\\\":t.minus+\\\"\\\",y=void 0===t.nan?\\\"NaN\\\":t.nan+\\\"\\\";function m(t){var e=(t=o(t)).fill,r=t.align,n=t.sign,c=t.symbol,p=t.zero,m=t.width,x=t.comma,b=t.precision,_=t.trim,w=t.type;\\\"n\\\"===w?(x=!0,w=\\\"g\\\"):u[w]||(void 0===b&&(b=12),_=!0,w=\\\"g\\\"),(p||\\\"0\\\"===e&&\\\"=\\\"===r)&&(p=!0,e=\\\"0\\\",r=\\\"=\\\");var T=\\\"$\\\"===c?s:\\\"#\\\"===c&&/[boxX]/.test(w)?\\\"0\\\"+w.toLowerCase():\\\"\\\",k=\\\"$\\\"===c?l:/[%p]/.test(w)?v:\\\"\\\",A=u[w],M=/[defgprs%]/.test(w);function S(t){var o,s,l,u=T,c=k;if(\\\"c\\\"===w)c=A(t)+c,t=\\\"\\\";else{var v=(t=+t)<0||1/t<0;if(t=isNaN(t)?y:A(Math.abs(t),b),_&&(t=function(t){t:for(var e,r=t.length,n=1,i=-1;n<r;++n)switch(t[n]){case\\\".\\\":i=e=n;break;case\\\"0\\\":0===i&&(i=n),e=n;break;default:if(!+t[n])break t;i>0&&(i=0)}return i>0?t.slice(0,i)+t.slice(e+1):t}(t)),v&&0==+t&&\\\"+\\\"!==n&&(v=!1),u=(v?\\\"(\\\"===n?n:g:\\\"-\\\"===n||\\\"(\\\"===n?\\\"\\\":n)+u,c=(\\\"s\\\"===w?d[8+i/3]:\\\"\\\")+c+(v&&\\\"(\\\"===n?\\\")\\\":\\\"\\\"),M)for(o=-1,s=t.length;++o<s;)if(48>(l=t.charCodeAt(o))||l>57){c=(46===l?f+t.slice(o+1):t.slice(o))+c,t=t.slice(0,o);break}}x&&!p&&(t=a(t,1/0));var S=u.length+t.length+c.length,E=S<m?new Array(m-S+1).join(e):\\\"\\\";switch(x&&p&&(t=a(E+t,E.length?m-c.length:1/0),E=\\\"\\\"),r){case\\\"<\\\":t=u+t+c+E;break;case\\\"=\\\":t=u+E+t+c;break;case\\\"^\\\":t=E.slice(0,S=E.length>>1)+u+t+c+E.slice(S);break;default:t=E+u+t+c}return h(t)}return b=void 0===b?6:/[gprs]/.test(w)?Math.max(1,Math.min(21,b)):Math.max(0,Math.min(20,b)),S.toString=function(){return t+\\\"\\\"},S}return{format:m,formatPrefix:function(t,e){var r,i=m(((t=o(t)).type=\\\"f\\\",t)),a=3*Math.max(-8,Math.min(8,Math.floor((r=e,((r=n(Math.abs(r)))?r[1]:NaN)/3)))),s=Math.pow(10,-a),l=d[8+a/3];return function(t){return i(s*t)+l}}}}f=v({decimal:\\\".\\\",thousands:\\\",\\\",grouping:[3],currency:[\\\"$\\\",\\\"\\\"],minus:\\\"-\\\"}),h=f.format,f.formatPrefix},65704:function(t,e,r){\\\"use strict\\\";r.r(e),r.d(e,{geoAiry:function(){return z},geoAiryRaw:function(){return D},geoAitoff:function(){return F},geoAitoffRaw:function(){return R},geoArmadillo:function(){return N},geoArmadilloRaw:function(){return B},geoAugust:function(){return U},geoAugustRaw:function(){return j},geoBaker:function(){return G},geoBakerRaw:function(){return q},geoBerghaus:function(){return W},geoBerghausRaw:function(){return Y},geoBertin1953:function(){return rt},geoBertin1953Raw:function(){return et},geoBoggs:function(){return ct},geoBoggsRaw:function(){return ut},geoBonne:function(){return vt},geoBonneRaw:function(){return dt},geoBottomley:function(){return yt},geoBottomleyRaw:function(){return gt},geoBromley:function(){return xt},geoBromleyRaw:function(){return mt},geoChamberlin:function(){return Et},geoChamberlinAfrica:function(){return St},geoChamberlinRaw:function(){return At},geoCollignon:function(){return Ct},geoCollignonRaw:function(){return Lt},geoCraig:function(){return Ot},geoCraigRaw:function(){return Pt},geoCraster:function(){return zt},geoCrasterRaw:function(){return Dt},geoCylindricalEqualArea:function(){return Ft},geoCylindricalEqualAreaRaw:function(){return Rt},geoCylindricalStereographic:function(){return Nt},geoCylindricalStereographicRaw:function(){return Bt},geoEckert1:function(){return Ut},geoEckert1Raw:function(){return jt},geoEckert2:function(){return Ht},geoEckert2Raw:function(){return Vt},geoEckert3:function(){return Gt},geoEckert3Raw:function(){return qt},geoEckert4:function(){return Yt},geoEckert4Raw:function(){return Zt},geoEckert5:function(){return Xt},geoEckert5Raw:function(){return Wt},geoEckert6:function(){return Kt},geoEckert6Raw:function(){return Jt},geoEisenlohr:function(){return te},geoEisenlohrRaw:function(){return Qt},geoFahey:function(){return ne},geoFaheyRaw:function(){return re},geoFoucaut:function(){return ae},geoFoucautRaw:function(){return ie},geoFoucautSinusoidal:function(){return se},geoFoucautSinusoidalRaw:function(){return oe},geoGilbert:function(){return he},geoGingery:function(){return ge},geoGingeryRaw:function(){return pe},geoGinzburg4:function(){return xe},geoGinzburg4Raw:function(){return me},geoGinzburg5:function(){return _e},geoGinzburg5Raw:function(){return be},geoGinzburg6:function(){return Te},geoGinzburg6Raw:function(){return we},geoGinzburg8:function(){return Ae},geoGinzburg8Raw:function(){return ke},geoGinzburg9:function(){return Se},geoGinzburg9Raw:function(){return Me},geoGringorten:function(){return Ce},geoGringortenQuincuncial:function(){return ii},geoGringortenRaw:function(){return Le},geoGuyou:function(){return De},geoGuyouRaw:function(){return Ie},geoHammer:function(){return $},geoHammerRaw:function(){return J},geoHammerRetroazimuthal:function(){return Be},geoHammerRetroazimuthalRaw:function(){return Re},geoHealpix:function(){return Ye},geoHealpixRaw:function(){return He},geoHill:function(){return Xe},geoHillRaw:function(){return We},geoHomolosine:function(){return er},geoHomolosineRaw:function(){return tr},geoHufnagel:function(){return nr},geoHufnagelRaw:function(){return rr},geoHyperelliptical:function(){return sr},geoHyperellipticalRaw:function(){return or},geoInterrupt:function(){return cr},geoInterruptedBoggs:function(){return hr},geoInterruptedHomolosine:function(){return dr},geoInterruptedMollweide:function(){return gr},geoInterruptedMollweideHemispheres:function(){return mr},geoInterruptedQuarticAuthalic:function(){return fn},geoInterruptedSinuMollweide:function(){return br},geoInterruptedSinusoidal:function(){return wr},geoKavrayskiy7:function(){return kr},geoKavrayskiy7Raw:function(){return Tr},geoLagrange:function(){return Mr},geoLagrangeRaw:function(){return Ar},geoLarrivee:function(){return Lr},geoLarriveeRaw:function(){return Er},geoLaskowski:function(){return Pr},geoLaskowskiRaw:function(){return Cr},geoLittrow:function(){return Ir},geoLittrowRaw:function(){return Or},geoLoximuthal:function(){return zr},geoLoximuthalRaw:function(){return Dr},geoMiller:function(){return Fr},geoMillerRaw:function(){return Rr},geoModifiedStereographic:function(){return Xr},geoModifiedStereographicAlaska:function(){return qr},geoModifiedStereographicGs48:function(){return Gr},geoModifiedStereographicGs50:function(){return Zr},geoModifiedStereographicLee:function(){return Wr},geoModifiedStereographicMiller:function(){return Yr},geoModifiedStereographicRaw:function(){return Br},geoMollweide:function(){return ot},geoMollweideRaw:function(){return at},geoMtFlatPolarParabolic:function(){return Qr},geoMtFlatPolarParabolicRaw:function(){return $r},geoMtFlatPolarQuartic:function(){return en},geoMtFlatPolarQuarticRaw:function(){return tn},geoMtFlatPolarSinusoidal:function(){return nn},geoMtFlatPolarSinusoidalRaw:function(){return rn},geoNaturalEarth:function(){return an.Z},geoNaturalEarth2:function(){return sn},geoNaturalEarth2Raw:function(){return on},geoNaturalEarthRaw:function(){return an.K},geoNellHammer:function(){return un},geoNellHammerRaw:function(){return ln},geoNicolosi:function(){return pn},geoNicolosiRaw:function(){return hn},geoPatterson:function(){return kn},geoPattersonRaw:function(){return Tn},geoPeirceQuincuncial:function(){return ai},geoPierceQuincuncial:function(){return ai},geoPolyconic:function(){return Mn},geoPolyconicRaw:function(){return An},geoPolyhedral:function(){return On},geoPolyhedralButterfly:function(){return Nn},geoPolyhedralCollignon:function(){return Vn},geoPolyhedralWaterman:function(){return Hn},geoProject:function(){return Wn},geoQuantize:function(){return oi},geoQuincuncial:function(){return ni},geoRectangularPolyconic:function(){return li},geoRectangularPolyconicRaw:function(){return si},geoRobinson:function(){return fi},geoRobinsonRaw:function(){return ci},geoSatellite:function(){return pi},geoSatelliteRaw:function(){return hi},geoSinuMollweide:function(){return Qe},geoSinuMollweideRaw:function(){return $e},geoSinusoidal:function(){return pt},geoSinusoidalRaw:function(){return ht},geoStitch:function(){return Oi},geoTimes:function(){return Di},geoTimesRaw:function(){return Ii},geoTwoPointAzimuthal:function(){return Bi},geoTwoPointAzimuthalRaw:function(){return Ri},geoTwoPointAzimuthalUsa:function(){return Fi},geoTwoPointEquidistant:function(){return Ui},geoTwoPointEquidistantRaw:function(){return Ni},geoTwoPointEquidistantUsa:function(){return ji},geoVanDerGrinten:function(){return Hi},geoVanDerGrinten2:function(){return Gi},geoVanDerGrinten2Raw:function(){return qi},geoVanDerGrinten3:function(){return Yi},geoVanDerGrinten3Raw:function(){return Zi},geoVanDerGrinten4:function(){return Xi},geoVanDerGrinten4Raw:function(){return Wi},geoVanDerGrintenRaw:function(){return Vi},geoWagner:function(){return Ki},geoWagner4:function(){return ra},geoWagner4Raw:function(){return ea},geoWagner6:function(){return ia},geoWagner6Raw:function(){return na},geoWagner7:function(){return $i},geoWagnerRaw:function(){return Ji},geoWiechel:function(){return oa},geoWiechelRaw:function(){return aa},geoWinkel3:function(){return la},geoWinkel3Raw:function(){return sa}});var n=r(15002),i=Math.abs,a=Math.atan,o=Math.atan2,s=(Math.ceil,Math.cos),l=Math.exp,u=Math.floor,c=Math.log,f=Math.max,h=Math.min,p=Math.pow,d=Math.round,v=Math.sign||function(t){return t>0?1:t<0?-1:0},g=Math.sin,y=Math.tan,m=1e-6,x=1e-12,b=Math.PI,_=b/2,w=b/4,T=Math.SQRT1_2,k=P(2),A=P(b),M=2*b,S=180/b,E=b/180;function L(t){return t>1?_:t<-1?-_:Math.asin(t)}function C(t){return t>1?0:t<-1?b:Math.acos(t)}function P(t){return t>0?Math.sqrt(t):0}function O(t){return(l(t)-l(-t))/2}function I(t){return(l(t)+l(-t))/2}function D(t){var e=y(t/2),r=2*c(s(t/2))/(e*e);function n(t,e){var n=s(t),i=s(e),a=g(e),o=i*n,l=-((1-o?c((1+o)/2)/(1-o):-.5)+r/(1+o));return[l*i*g(t),l*a]}return n.invert=function(e,n){var a,l=P(e*e+n*n),u=-t/2,f=50;if(!l)return[0,0];do{var h=u/2,p=s(h),d=g(h),v=d/p,y=-c(i(p));u-=a=(2/v*y-r*v-l)/(-y/(d*d)+1-r/(2*p*p))*(p<0?.7:1)}while(i(a)>m&&--f>0);var x=g(u);return[o(e*x,l*s(u)),L(n*x/l)]},n}function z(){var t=_,e=(0,n.r)(D),r=e(t);return r.radius=function(r){return arguments.length?e(t=r*E):t*S},r.scale(179.976).clipAngle(147)}function R(t,e){var r=s(e),n=function(t){return t?t/Math.sin(t):1}(C(r*s(t/=2)));return[2*r*g(t)*n,g(e)*n]}function F(){return(0,n.Z)(R).scale(152.63)}function B(t){var e=g(t),r=s(t),n=t>=0?1:-1,a=y(n*t),l=(1+e-r)/2;function u(t,i){var u=s(i),c=s(t/=2);return[(1+u)*g(t),(n*i>-o(c,a)-.001?0:10*-n)+l+g(i)*r-(1+u)*e*c]}return u.invert=function(t,u){var c=0,f=0,h=50;do{var p=s(c),d=g(c),v=s(f),y=g(f),x=1+v,b=x*d-t,_=l+y*r-x*e*p-u,w=x*p/2,T=-d*y,k=e*x*d/2,A=r*v+e*p*y,M=T*k-A*w,S=(_*T-b*A)/M/2,E=(b*k-_*w)/M;i(E)>2&&(E/=2),c-=S,f-=E}while((i(S)>m||i(E)>m)&&--h>0);return n*f>-o(s(c),a)-.001?[2*c,f]:null},u}function N(){var t=20*E,e=t>=0?1:-1,r=y(e*t),i=(0,n.r)(B),a=i(t),l=a.stream;return a.parallel=function(n){return arguments.length?(r=y((e=(t=n*E)>=0?1:-1)*t),i(t)):t*S},a.stream=function(n){var i=a.rotate(),u=l(n),c=(a.rotate([0,0]),l(n)),f=a.precision();return a.rotate(i),u.sphere=function(){c.polygonStart(),c.lineStart();for(var n=-180*e;e*n<180;n+=90*e)c.point(n,90*e);if(t)for(;e*(n-=3*e*f)>=-180;)c.point(n,e*-o(s(n*E/2),r)*S);c.lineEnd(),c.polygonEnd()},u},a.scale(218.695).center([0,28.0974])}function j(t,e){var r=y(e/2),n=P(1-r*r),i=1+n*s(t/=2),a=g(t)*n/i,o=r/i,l=a*a,u=o*o;return[4/3*a*(3+l-3*u),4/3*o*(3+3*l-u)]}function U(){return(0,n.Z)(j).scale(66.1603)}R.invert=function(t,e){if(!(t*t+4*e*e>b*b+m)){var r=t,n=e,a=25;do{var o,l=g(r),u=g(r/2),c=s(r/2),f=g(n),h=s(n),p=g(2*n),d=f*f,v=h*h,y=u*u,x=1-v*c*c,_=x?C(h*c)*P(o=1/x):o=0,w=2*_*h*u-t,T=_*f-e,k=o*(v*y+_*h*c*d),A=o*(.5*l*p-2*_*f*u),M=.25*o*(p*u-_*f*v*l),S=o*(d*c+_*y*h),E=A*M-S*k;if(!E)break;var L=(T*A-w*S)/E,O=(w*M-T*k)/E;r-=L,n-=O}while((i(L)>m||i(O)>m)&&--a>0);return[r,n]}},j.invert=function(t,e){if(e*=3/8,!(t*=3/8)&&i(e)>1)return null;var r=1+t*t+e*e,n=P((r-P(r*r-4*e*e))/2),a=L(n)/3,l=n?function(t){return c(t+P(t*t-1))}(i(e/n))/3:function(t){return c(t+P(t*t+1))}(i(t))/3,u=s(a),f=I(l),h=f*f-u*u;return[2*v(t)*o(O(l)*u,.25-h),2*v(e)*o(f*g(a),.25+h)]};var V=P(8),H=c(1+k);function q(t,e){var r=i(e);return r<w?[t,c(y(w+e/2))]:[t*s(r)*(2*k-1/g(r)),v(e)*(2*k*(r-w)-c(y(r/2)))]}function G(){return(0,n.Z)(q).scale(112.314)}q.invert=function(t,e){if((n=i(e))<H)return[t,2*a(l(e))-_];var r,n,o=w,u=25;do{var f=s(o/2),h=y(o/2);o-=r=(V*(o-w)-c(h)-n)/(V-f*f/(2*h))}while(i(r)>x&&--u>0);return[t/(s(o)*(V-1/g(o))),v(e)*o]};var Z=r(17889);function Y(t){var e=2*b/t;function r(t,r){var n=(0,Z.N)(t,r);if(i(t)>_){var a=o(n[1],n[0]),l=P(n[0]*n[0]+n[1]*n[1]),u=e*d((a-_)/e)+_,c=o(g(a-=u),2-s(a));a=u+L(b/l*g(c))-c,n[0]=l*s(a),n[1]=l*g(a)}return n}return r.invert=function(t,r){var n=P(t*t+r*r);if(n>_){var i=o(r,t),l=e*d((i-_)/e)+_,u=i>l?-1:1,c=n*s(l-i),f=1/y(u*C((c-b)/P(b*(b-2*c)+n*n)));i=l+2*a((f+u*P(f*f-3))/3),t=n*s(i),r=n*g(i)}return Z.N.invert(t,r)},r}function W(){var t=5,e=(0,n.r)(Y),r=e(t),i=r.stream,a=.01,l=-s(a*E),u=g(a*E);return r.lobes=function(r){return arguments.length?e(t=+r):t},r.stream=function(e){var n=r.rotate(),c=i(e),f=(r.rotate([0,0]),i(e));return r.rotate(n),c.sphere=function(){f.polygonStart(),f.lineStart();for(var e=0,r=360/t,n=2*b/t,i=90-180/t,c=_;e<t;++e,i-=r,c-=n)f.point(o(u*s(c),l)*S,L(u*g(c))*S),i<-90?(f.point(-90,-180-i-a),f.point(-90,-180-i+a)):(f.point(90,i+a),f.point(90,i-a));f.lineEnd(),f.polygonEnd()},c},r.scale(87.8076).center([0,17.1875]).clipAngle(179.999)}var X=r(12956);function J(t,e){if(arguments.length<2&&(e=t),1===e)return X.l;if(e===1/0)return K;function r(r,n){var i=(0,X.l)(r/e,n);return i[0]*=t,i}return r.invert=function(r,n){var i=X.l.invert(r/t,n);return i[0]*=e,i},r}function K(t,e){return[t*s(e)/s(e/=2),2*g(e)]}function $(){var t=2,e=(0,n.r)(J),r=e(t);return r.coefficient=function(r){return arguments.length?e(t=+r):t},r.scale(169.529)}function Q(t,e,r){var n,a,o,s=100;r=void 0===r?0:+r,e=+e;do{(a=t(r))===(o=t(r+m))&&(o=a+m),r-=n=-1*m*(a-e)/(a-o)}while(s-- >0&&i(n)>m);return s<0?NaN:r}function tt(t,e,r){return void 0===e&&(e=40),void 0===r&&(r=x),function(n,a,o,s){var l,u,c;o=void 0===o?0:+o,s=void 0===s?0:+s;for(var f=0;f<e;f++){var h=t(o,s),p=h[0]-n,d=h[1]-a;if(i(p)<r&&i(d)<r)break;var v=p*p+d*d;if(v>l)o-=u/=2,s-=c/=2;else{l=v;var g=(o>0?-1:1)*r,y=(s>0?-1:1)*r,m=t(o+g,s),x=t(o,s+y),b=(m[0]-h[0])/g,_=(m[1]-h[1])/g,w=(x[0]-h[0])/y,T=(x[1]-h[1])/y,k=T*b-_*w,A=(i(k)<.5?.5:1)/k;if(o+=u=(d*w-p*T)*A,s+=c=(p*_-d*b)*A,i(u)<r&&i(c)<r)break}}return[o,s]}}function et(){var t=J(1.68,2);function e(e,r){if(e+r<-1.4){var n=(e-r+1.6)*(e+r+1.4)/8;e+=n,r-=.8*n*g(r+b/2)}var i=t(e,r),a=(1-s(e*r))/12;return i[1]<0&&(i[0]*=1+a),i[1]>0&&(i[1]*=1+a/1.5*i[0]*i[0]),i}return e.invert=tt(e),e}function rt(){return(0,n.Z)(et()).rotate([-16.5,-42]).scale(176.57).center([7.93,.09])}function nt(t,e){var r,n=t*g(e),a=30;do{e-=r=(e+g(e)-n)/(1+s(e))}while(i(r)>m&&--a>0);return e/2}function it(t,e,r){function n(n,i){return[t*n*s(i=nt(r,i)),e*g(i)]}return n.invert=function(n,i){return i=L(i/e),[n/(t*s(i)),L((2*i+g(2*i))/r)]},n}K.invert=function(t,e){var r=2*L(e/2);return[t*s(r/2)/s(r),r]};var at=it(k/_,k,b);function ot(){return(0,n.Z)(at).scale(169.529)}var st=2.00276,lt=1.11072;function ut(t,e){var r=nt(b,e);return[st*t/(1/s(e)+lt/s(r)),(e+k*g(r))/st]}function ct(){return(0,n.Z)(ut).scale(160.857)}function ft(t){var e=0,r=(0,n.r)(t),i=r(e);return i.parallel=function(t){return arguments.length?r(e=t*E):e*S},i}function ht(t,e){return[t*s(e),e]}function pt(){return(0,n.Z)(ht).scale(152.63)}function dt(t){if(!t)return ht;var e=1/y(t);function r(r,n){var i=e+t-n,a=i?r*s(n)/i:i;return[i*g(a),e-i*s(a)]}return r.invert=function(r,n){var i=P(r*r+(n=e-n)*n),a=e+t-i;return[i/s(a)*o(r,n),a]},r}function vt(){return ft(dt).scale(123.082).center([0,26.1441]).parallel(45)}function gt(t){function e(e,r){var n=_-r,i=n?e*t*g(n)/n:n;return[n*g(i)/t,_-n*s(i)]}return e.invert=function(e,r){var n=e*t,i=_-r,a=P(n*n+i*i),s=o(n,i);return[(a?a/g(a):1)*s/t,_-a]},e}function yt(){var t=.5,e=(0,n.r)(gt),r=e(t);return r.fraction=function(r){return arguments.length?e(t=+r):t},r.scale(158.837)}ut.invert=function(t,e){var r,n,a=st*e,o=e<0?-w:w,l=25;do{n=a-k*g(o),o-=r=(g(2*o)+2*o-b*g(n))/(2*s(2*o)+2+b*s(n)*k*s(o))}while(i(r)>m&&--l>0);return n=a-k*g(o),[t*(1/s(n)+lt/s(o))/st,n]},ht.invert=function(t,e){return[t/s(e),e]};var mt=it(1,4/b,b);function xt(){return(0,n.Z)(mt).scale(152.63)}var bt=r(66624),_t=r(49386);function wt(t,e,r,n,a,l){var u,c=s(l);if(i(t)>1||i(l)>1)u=C(r*a+e*n*c);else{var f=g(t/2),h=g(l/2);u=2*L(P(f*f+e*n*h*h))}return i(u)>m?[u,o(n*g(l),e*a-r*n*c)]:[0,0]}function Tt(t,e,r){return C((t*t+e*e-r*r)/(2*t*e))}function kt(t){return t-2*b*u((t+b)/(2*b))}function At(t,e,r){for(var n,i=[[t[0],t[1],g(t[1]),s(t[1])],[e[0],e[1],g(e[1]),s(e[1])],[r[0],r[1],g(r[1]),s(r[1])]],a=i[2],o=0;o<3;++o,a=n)n=i[o],a.v=wt(n[1]-a[1],a[3],a[2],n[3],n[2],n[0]-a[0]),a.point=[0,0];var l=Tt(i[0].v[0],i[2].v[0],i[1].v[0]),u=Tt(i[0].v[0],i[1].v[0],i[2].v[0]),c=b-l;i[2].point[1]=0,i[0].point[0]=-(i[1].point[0]=i[0].v[0]/2);var f=[i[2].point[0]=i[0].point[0]+i[2].v[0]*s(l),2*(i[0].point[1]=i[1].point[1]=i[2].v[0]*g(l))];return function(t,e){var r,n=g(e),a=s(e),o=new Array(3);for(r=0;r<3;++r){var l=i[r];if(o[r]=wt(e-l[1],l[3],l[2],a,n,t-l[0]),!o[r][0])return l.point;o[r][1]=kt(o[r][1]-l.v[1])}var h=f.slice();for(r=0;r<3;++r){var p=2==r?0:r+1,d=Tt(i[r].v[0],o[r][0],o[p][0]);o[r][1]<0&&(d=-d),r?1==r?(d=u-d,h[0]-=o[r][0]*s(d),h[1]-=o[r][0]*g(d)):(d=c-d,h[0]+=o[r][0]*s(d),h[1]+=o[r][0]*g(d)):(h[0]+=o[r][0]*s(d),h[1]-=o[r][0]*g(d))}return h[0]/=3,h[1]/=3,h}}function Mt(t){return t[0]*=E,t[1]*=E,t}function St(){return Et([0,22],[45,22],[22.5,-22]).scale(380).center([22.5,2])}function Et(t,e,r){var i=(0,bt.Z)({type:\\\"MultiPoint\\\",coordinates:[t,e,r]}),a=[-i[0],-i[1]],o=(0,_t.Z)(a),s=At(Mt(o(t)),Mt(o(e)),Mt(o(r)));s.invert=tt(s);var l=(0,n.Z)(s).rotate(a),u=l.center;return delete l.rotate,l.center=function(t){return arguments.length?u(o(t)):o.invert(u())},l.clipAngle(90)}function Lt(t,e){var r=P(1-g(e));return[2/A*t*r,A*(1-r)]}function Ct(){return(0,n.Z)(Lt).scale(95.6464).center([0,30])}function Pt(t){var e=y(t);function r(t,r){return[t,(t?t/g(t):1)*(g(r)*s(t)-e*s(r))]}return r.invert=e?function(t,r){t&&(r*=g(t)/t);var n=s(t);return[t,2*o(P(n*n+e*e-r*r)-n,e-r)]}:function(t,e){return[t,L(t?e*y(t)/t:e)]},r}function Ot(){return ft(Pt).scale(249.828).clipAngle(90)}Lt.invert=function(t,e){var r=(r=e/A-1)*r;return[r>0?t*P(b/r)/2:0,L(1-r)]};var It=P(3);function Dt(t,e){return[It*t*(2*s(2*e/3)-1)/A,It*A*g(e/3)]}function zt(){return(0,n.Z)(Dt).scale(156.19)}function Rt(t){var e=s(t);function r(t,r){return[t*e,g(r)/e]}return r.invert=function(t,r){return[t/e,L(r*e)]},r}function Ft(){return ft(Rt).parallel(38.58).scale(195.044)}function Bt(t){var e=s(t);function r(t,r){return[t*e,(1+e)*y(r/2)]}return r.invert=function(t,r){return[t/e,2*a(r/(1+e))]},r}function Nt(){return ft(Bt).scale(124.75)}function jt(t,e){var r=P(8/(3*b));return[r*t*(1-i(e)/b),r*e]}function Ut(){return(0,n.Z)(jt).scale(165.664)}function Vt(t,e){var r=P(4-3*g(i(e)));return[2/P(6*b)*t*r,v(e)*P(2*b/3)*(2-r)]}function Ht(){return(0,n.Z)(Vt).scale(165.664)}function qt(t,e){var r=P(b*(4+b));return[2/r*t*(1+P(1-4*e*e/(b*b))),4/r*e]}function Gt(){return(0,n.Z)(qt).scale(180.739)}function Zt(t,e){var r=(2+_)*g(e);e/=2;for(var n=0,a=1/0;n<10&&i(a)>m;n++){var o=s(e);e-=a=(e+g(e)*(o+2)-r)/(2*o*(1+o))}return[2/P(b*(4+b))*t*(1+s(e)),2*P(b/(4+b))*g(e)]}function Yt(){return(0,n.Z)(Zt).scale(180.739)}function Wt(t,e){return[t*(1+s(e))/P(2+b),2*e/P(2+b)]}function Xt(){return(0,n.Z)(Wt).scale(173.044)}function Jt(t,e){for(var r=(1+_)*g(e),n=0,a=1/0;n<10&&i(a)>m;n++)e-=a=(e+g(e)-r)/(1+s(e));return r=P(2+b),[t*(1+s(e))/r,2*e/r]}function Kt(){return(0,n.Z)(Jt).scale(173.044)}Dt.invert=function(t,e){var r=3*L(e/(It*A));return[A*t/(It*(2*s(2*r/3)-1)),r]},jt.invert=function(t,e){var r=P(8/(3*b)),n=e/r;return[t/(r*(1-i(n)/b)),n]},Vt.invert=function(t,e){var r=2-i(e)/P(2*b/3);return[t*P(6*b)/(2*r),v(e)*L((4-r*r)/3)]},qt.invert=function(t,e){var r=P(b*(4+b))/2;return[t*r/(1+P(1-e*e*(4+b)/(4*b))),e*r/2]},Zt.invert=function(t,e){var r=e*P((4+b)/b)/2,n=L(r),i=s(n);return[t/(2/P(b*(4+b))*(1+i)),L((n+r*(i+2))/(2+_))]},Wt.invert=function(t,e){var r=P(2+b),n=e*r/2;return[r*t/(1+s(n)),n]},Jt.invert=function(t,e){var r=1+_,n=P(r/2);return[2*t*n/(1+s(e*=n)),L((e+g(e))/r)]};var $t=3+2*k;function Qt(t,e){var r=g(t/=2),n=s(t),i=P(s(e)),o=s(e/=2),l=g(e)/(o+k*n*i),u=P(2/(1+l*l)),f=P((k*o+(n+r)*i)/(k*o+(n-r)*i));return[$t*(u*(f-1/f)-2*c(f)),$t*(u*l*(f+1/f)-2*a(l))]}function te(){return(0,n.Z)(Qt).scale(62.5271)}Qt.invert=function(t,e){if(!(r=j.invert(t/1.2,1.065*e)))return null;var r,n=r[0],o=r[1],l=20;t/=$t,e/=$t;do{var u=n/2,p=o/2,d=g(u),v=s(u),y=g(p),x=s(p),b=s(o),w=P(b),A=y/(x+k*v*w),M=A*A,S=P(2/(1+M)),E=(k*x+(v+d)*w)/(k*x+(v-d)*w),L=P(E),C=L-1/L,O=L+1/L,I=S*C-2*c(L)-t,D=S*A*O-2*a(A)-e,z=y&&T*w*d*M/y,R=(k*v*x+w)/(2*(x+k*v*w)*(x+k*v*w)*w),F=-.5*A*S*S*S,B=F*z,N=F*R,U=(U=2*x+k*w*(v-d))*U*L,V=(k*v*x*w+b)/U,H=-k*d*y/(w*U),q=C*B-2*V/L+S*(V+V/E),G=C*N-2*H/L+S*(H+H/E),Z=A*O*B-2*z/(1+M)+S*O*z+S*A*(V-V/E),Y=A*O*N-2*R/(1+M)+S*O*R+S*A*(H-H/E),W=G*Z-Y*q;if(!W)break;var X=(D*G-I*Y)/W,J=(I*Z-D*q)/W;n-=X,o=f(-_,h(_,o-J))}while((i(X)>m||i(J)>m)&&--l>0);return i(i(o)-_)<m?[0,o]:l&&[n,o]};var ee=s(35*E);function re(t,e){var r=y(e/2);return[t*ee*P(1-r*r),(1+ee)*r]}function ne(){return(0,n.Z)(re).scale(137.152)}function ie(t,e){var r=e/2,n=s(r);return[2*t/A*s(e)*n*n,A*y(r)]}function ae(){return(0,n.Z)(ie).scale(135.264)}function oe(t){var e=1-t,r=i(b,0)[0]-i(-b,0)[0],n=P(2*(i(0,_)[1]-i(0,-_)[1])/r);function i(r,n){var i=s(n),a=g(n);return[i/(e+t*i)*r,e*n+t*a]}function a(t,e){var r=i(t,e);return[r[0]*n,r[1]/n]}function o(t){return a(0,t)[1]}return a.invert=function(r,i){var a=Q(o,i);return[r/n*(t+e/s(a)),a]},a}function se(){var t=.5,e=(0,n.r)(oe),r=e(t);return r.alpha=function(r){return arguments.length?e(t=+r):t},r.scale(168.725)}re.invert=function(t,e){var r=e/(1+ee);return[t&&t/(ee*P(1-r*r)),2*a(r)]},ie.invert=function(t,e){var r=a(e/A),n=s(r),i=2*r;return[t*A/2/(s(i)*n*n),i]};var le=r(57962),ue=r(97492);function ce(t){return[t[0]/2,L(y(t[1]/2*E))*S]}function fe(t){return[2*t[0],2*a(g(t[1]*E))*S]}function he(t){null==t&&(t=le.Z);var e=t(),r=(0,ue.Z)().scale(S).precision(0).clipAngle(null).translate([0,0]);function n(t){return e(ce(t))}function i(t){n[t]=function(){return arguments.length?(e[t].apply(e,arguments),n):e[t]()}}return e.invert&&(n.invert=function(t){return fe(e.invert(t))}),n.stream=function(t){var n=e.stream(t),i=r.stream({point:function(t,e){n.point(t/2,L(y(-e/2*E))*S)},lineStart:function(){n.lineStart()},lineEnd:function(){n.lineEnd()},polygonStart:function(){n.polygonStart()},polygonEnd:function(){n.polygonEnd()}});return i.sphere=n.sphere,i},n.rotate=function(t){return arguments.length?(r.rotate(t),n):r.rotate()},n.center=function(t){return arguments.length?(e.center(ce(t)),n):fe(e.center())},i(\\\"angle\\\"),i(\\\"clipAngle\\\"),i(\\\"clipExtent\\\"),i(\\\"fitExtent\\\"),i(\\\"fitHeight\\\"),i(\\\"fitSize\\\"),i(\\\"fitWidth\\\"),i(\\\"scale\\\"),i(\\\"translate\\\"),i(\\\"precision\\\"),n.scale(249.5)}function pe(t,e){var r=2*b/e,n=t*t;function a(e,a){var l=(0,Z.N)(e,a),u=l[0],c=l[1],f=u*u+c*c;if(f>n){var h=P(f),p=o(c,u),v=r*d(p/r),y=p-v,x=t*s(y),w=(t*g(y)-y*g(x))/(_-x),T=de(y,w),k=(b-t)/ve(T,x,b);u=h;var A,M=50;do{u-=A=(t+ve(T,x,u)*k-h)/(T(u)*k)}while(i(A)>m&&--M>0);c=y*g(u),u<_&&(c-=w*(u-_));var S=g(v),E=s(v);l[0]=u*E-c*S,l[1]=u*S+c*E}return l}return a.invert=function(e,a){var l=e*e+a*a;if(l>n){var u=P(l),c=o(a,e),f=r*d(c/r),h=c-f;e=u*s(h),a=u*g(h);for(var p=e-_,v=g(e),y=a/v,m=e<_?1/0:0,w=10;;){var T=t*g(y),k=t*s(y),A=g(k),M=_-k,S=(T-y*A)/M,E=de(y,S);if(i(m)<x||!--w)break;y-=m=(y*v-S*p-a)/(v-2*p*(M*(k+y*T*s(k)-A)-T*(T-y*A))/(M*M))}e=(u=t+ve(E,k,e)*(b-t)/ve(E,k,b))*s(c=f+y),a=u*g(c)}return Z.N.invert(e,a)},a}function de(t,e){return function(r){var n=t*s(r);return r<_&&(n-=e),P(1+n*n)}}function ve(t,e,r){for(var n=(r-e)/50,i=t(e)+t(r),a=1,o=e;a<50;++a)i+=2*t(o+=n);return.5*i*n}function ge(){var t=6,e=30*E,r=s(e),i=g(e),a=(0,n.r)(pe),l=a(e,t),u=l.stream,c=-s(.01*E),f=g(.01*E);return l.radius=function(n){return arguments.length?(r=s(e=n*E),i=g(e),a(e,t)):e*S},l.lobes=function(r){return arguments.length?a(e,t=+r):t},l.stream=function(e){var n=l.rotate(),a=u(e),h=(l.rotate([0,0]),u(e));return l.rotate(n),a.sphere=function(){h.polygonStart(),h.lineStart();for(var e=0,n=2*b/t,a=0;e<t;++e,a-=n)h.point(o(f*s(a),c)*S,L(f*g(a))*S),h.point(o(i*s(a-n/2),r)*S,L(i*g(a-n/2))*S);h.lineEnd(),h.polygonEnd()},a},l.rotate([90,-40]).scale(91.7095).clipAngle(179.999)}function ye(t,e,r,n,a,o,l,u){function c(i,c){if(!c)return[t*i/b,0];var f=c*c,h=t+f*(e+f*(r+f*n)),p=c*(a-1+f*(o-u+f*l)),d=(h*h+p*p)/(2*p),v=i*L(h/d)/b;return[d*g(v),c*(1+f*u)+d*(1-s(v))]}return arguments.length<8&&(u=0),c.invert=function(c,f){var h,p,d=b*c/t,v=f,y=50;do{var x=v*v,_=t+x*(e+x*(r+x*n)),w=v*(a-1+x*(o-u+x*l)),T=_*_+w*w,k=2*w,A=T/k,M=A*A,S=L(_/A)/b,E=d*S,C=_*_,O=(2*e+x*(4*r+6*x*n))*v,I=a+x*(3*o+5*x*l),D=(2*(_*O+w*(I-1))*k-T*(2*(I-1)))/(k*k),z=s(E),R=g(E),F=A*z,B=A*R,N=d/b*(1/P(1-C/M))*(O*A-_*D)/M,j=B-c,U=v*(1+x*u)+A-F-f,V=D*R+F*N,H=F*S,q=1+D-(D*z-B*N),G=B*S,Z=V*G-q*H;if(!Z)break;d-=h=(U*V-j*q)/Z,v-=p=(j*G-U*H)/Z}while((i(h)>m||i(p)>m)&&--y>0);return[d,v]},c}var me=ye(2.8284,-1.6988,.75432,-.18071,1.76003,-.38914,.042555);function xe(){return(0,n.Z)(me).scale(149.995)}var be=ye(2.583819,-.835827,.170354,-.038094,1.543313,-.411435,.082742);function _e(){return(0,n.Z)(be).scale(153.93)}var we=ye(5/6*b,-.62636,-.0344,0,1.3493,-.05524,0,.045);function Te(){return(0,n.Z)(we).scale(130.945)}function ke(t,e){var r=t*t,n=e*e;return[t*(1-.162388*n)*(.87-952426e-9*r*r),e*(1+n/12)]}function Ae(){return(0,n.Z)(ke).scale(131.747)}ke.invert=function(t,e){var r,n=t,a=e,o=50;do{var s=a*a;a-=r=(a*(1+s/12)-e)/(1+s/4)}while(i(r)>m&&--o>0);o=50,t/=1-.162388*s;do{var l=(l=n*n)*l;n-=r=(n*(.87-952426e-9*l)-t)/(.87-.00476213*l)}while(i(r)>m&&--o>0);return[n,a]};var Me=ye(2.6516,-.76534,.19123,-.047094,1.36289,-.13965,.031762);function Se(){return(0,n.Z)(Me).scale(131.087)}function Ee(t){var e=t(_,0)[0]-t(-_,0)[0];function r(r,n){var i=r>0?-.5:.5,a=t(r+i*b,n);return a[0]-=i*e,a}return t.invert&&(r.invert=function(r,n){var i=r>0?-.5:.5,a=t.invert(r+i*e,n),o=a[0]-i*b;return o<-b?o+=2*b:o>b&&(o-=2*b),a[0]=o,a}),r}function Le(t,e){var r=v(t),n=v(e),a=s(e),l=s(t)*a,u=g(t)*a,c=g(n*e);t=i(o(u,c)),e=L(l),i(t-_)>m&&(t%=_);var f=function(t,e){if(e===_)return[0,0];var r,n,a=g(e),o=a*a,l=o*o,u=1+l,c=1+3*l,f=1-l,h=L(1/P(u)),p=f+o*u*h,d=(1-a)/p,v=P(d),y=d*u,x=P(y),w=v*f;if(0===t)return[0,-(w+o*x)];var T,k=s(e),A=1/k,M=2*a*k,S=(-p*k-(1-a)*((-3*o+h*c)*M))/(p*p),E=-A*M,C=-A*(o*u*S+d*c*M),O=-2*A*(f*(.5*S/v)-2*o*v*M),I=4*t/b;if(t>.222*b||e<b/4&&t>.175*b){if(r=(w+o*P(y*(1+l)-w*w))/(1+l),t>b/4)return[r,r];var D=r,z=.5*r;r=.5*(z+D),n=50;do{var R=r*(O+E*P(y-r*r))+C*L(r/x)-I;if(!R)break;R<0?z=r:D=r,r=.5*(z+D)}while(i(D-z)>m&&--n>0)}else{r=m,n=25;do{var F=r*r,B=P(y-F),N=O+E*B,j=r*N+C*L(r/x)-I;r-=T=B?j/(N+(C-E*F)/B):0}while(i(T)>m&&--n>0)}return[r,-w-o*P(y-r*r)]}(t>b/4?_-t:t,e);return t>b/4&&(c=f[0],f[0]=-f[1],f[1]=-c),f[0]*=r,f[1]*=-n,f}function Ce(){return(0,n.Z)(Ee(Le)).scale(239.75)}function Pe(t,e){var r,n,o,u,c,f;if(e<m)return[(u=g(t))-(r=e*(t-u*(n=s(t)))/4)*n,n+r*u,1-e*u*u/2,t-r];if(e>=1-m)return r=(1-e)/4,o=1/(n=I(t)),[(u=((f=l(2*(f=t)))-1)/(f+1))+r*((c=n*O(t))-t)/(n*n),o-r*u*o*(c-t),o+r*u*o*(c+t),2*a(l(t))-_+r*(c-t)/n];var h=[1,0,0,0,0,0,0,0,0],p=[P(e),0,0,0,0,0,0,0,0],d=0;for(n=P(1-e),c=1;i(p[d]/h[d])>m&&d<8;)r=h[d++],p[d]=(r-n)/2,h[d]=(r+n)/2,n=P(r*n),c*=2;o=c*h[d]*t;do{o=(L(u=p[d]*g(n=o)/h[d])+o)/2}while(--d);return[g(o),u=s(o),u/s(o-n),o]}function Oe(t,e){if(!e)return t;if(1===e)return c(y(t/2+w));for(var r=1,n=P(1-e),o=P(e),s=0;i(o)>m;s++){if(t%b){var l=a(n*y(t)/r);l<0&&(l+=b),t+=l+~~(t/b)*b}else t+=t;o=(r+n)/2,n=P(r*n),o=((r=o)-n)/2}return t/(p(2,s)*r)}function Ie(t,e){var r=(k-1)/(k+1),n=P(1-r*r),u=Oe(_,n*n),f=c(y(b/4+i(e)/2)),h=l(-1*f)/P(r),p=function(t,e){var r=t*t,n=e+1,i=1-r-e*e;return[.5*((t>=0?_:-_)-o(i,2*t)),-.25*c(i*i+4*r)+.5*c(n*n+r)]}(h*s(-1*t),h*g(-1*t)),d=function(t,e,r){var n=i(t),o=O(i(e));if(n){var s=1/g(n),l=1/(y(n)*y(n)),u=-(l+r*(o*o*s*s)-1+r),c=(-u+P(u*u-(r-1)*l*4))/2;return[Oe(a(1/P(c)),r)*v(t),Oe(a(P((c/l-1)/r)),1-r)*v(e)]}return[0,Oe(a(o),1-r)*v(e)]}(p[0],p[1],n*n);return[-d[1],(e>=0?1:-1)*(.5*u-d[0])]}function De(){return(0,n.Z)(Ee(Ie)).scale(151.496)}Le.invert=function(t,e){i(t)>1&&(t=2*v(t)-t),i(e)>1&&(e=2*v(e)-e);var r=v(t),n=v(e),a=-r*t,l=-n*e,u=l/a<1,c=function(t,e){for(var r=0,n=1,a=.5,o=50;;){var l=a*a,u=P(a),c=L(1/P(1+l)),f=1-l+a*(1+l)*c,h=(1-u)/f,p=P(h),d=h*(1+l),v=p*(1-l),g=P(d-t*t),y=e+v+a*g;if(i(n-r)<x||0==--o||0===y)break;y>0?r=a:n=a,a=.5*(r+n)}if(!o)return null;var m=L(u),_=s(m),w=1/_,T=2*u*_,k=(-f*_-(-3*a+c*(1+3*l))*T*(1-u))/(f*f);return[b/4*(t*(-2*w*((1-l)*(.5*k/p)-2*a*p*T)+-w*T*g)+-w*(a*(1+l)*k+h*(1+3*l)*T)*L(t/P(d))),m]}(u?l:a,u?a:l),f=c[0],h=c[1],p=s(h);return u&&(f=-_-f),[r*(o(g(f)*p,-g(h))+b),n*L(s(f)*p)]},Ie.invert=function(t,e){var r,n,i,s,u,f,h=(k-1)/(k+1),p=P(1-h*h),d=(n=-t,i=p*p,(r=.5*Oe(_,p*p)-e)?(s=Pe(r,i),n?(f=(u=Pe(n,1-i))[1]*u[1]+i*s[0]*s[0]*u[0]*u[0],[[s[0]*u[2]/f,s[1]*s[2]*u[0]*u[1]/f],[s[1]*u[1]/f,-s[0]*s[2]*u[0]*u[2]/f],[s[2]*u[1]*u[2]/f,-i*s[0]*s[1]*u[0]/f]]):[[s[0],0],[s[1],0],[s[2],0]]):[[0,(u=Pe(n,1-i))[0]/u[1]],[1/u[1],0],[u[2]/u[1],0]]),v=function(t,e){var r=e[0]*e[0]+e[1]*e[1];return[(t[0]*e[0]+t[1]*e[1])/r,(t[1]*e[0]-t[0]*e[1])/r]}(d[0],d[1]);return[o(v[1],v[0])/-1,2*a(l(-.5*c(h*v[0]*v[0]+h*v[1]*v[1])))-_]};var ze=r(7613);function Re(t){var e=g(t),r=s(t),n=Fe(t);function a(t,a){var o=n(t,a);t=o[0],a=o[1];var l=g(a),u=s(a),c=s(t),f=C(e*l+r*u*c),h=g(f),p=i(h)>m?f/h:1;return[p*r*g(t),(i(t)>_?p:-p)*(e*u-r*l*c)]}return n.invert=Fe(-t),a.invert=function(t,r){var i=P(t*t+r*r),a=-g(i),l=s(i),u=i*l,c=-r*a,f=i*e,h=P(u*u+c*c-f*f),p=o(u*f+c*h,c*f-u*h),d=(i>_?-1:1)*o(t*a,i*s(p)*l+r*g(p)*a);return n.invert(d,p)},a}function Fe(t){var e=g(t),r=s(t);return function(t,n){var i=s(n),a=s(t)*i,l=g(t)*i,u=g(n);return[o(l,a*r-u*e),L(u*r+a*e)]}}function Be(){var t=0,e=(0,n.r)(Re),r=e(t),i=r.rotate,a=r.stream,o=(0,ze.Z)();return r.parallel=function(n){if(!arguments.length)return t*S;var i=r.rotate();return e(t=n*E).rotate(i)},r.rotate=function(e){return arguments.length?(i.call(r,[e[0],e[1]-t*S]),o.center([-e[0],-e[1]]),r):((e=i.call(r))[1]+=t*S,e)},r.stream=function(t){return(t=a(t)).sphere=function(){t.polygonStart();var e,r=o.radius(89.99)().coordinates[0],n=r.length-1,i=-1;for(t.lineStart();++i<n;)t.point((e=r[i])[0],e[1]);for(t.lineEnd(),n=(r=o.radius(90.01)().coordinates[0]).length-1,t.lineStart();--i>=0;)t.point((e=r[i])[0],e[1]);t.lineEnd(),t.polygonEnd()},t},r.scale(79.4187).parallel(45).clipAngle(179.999)}var Ne=r(33064),je=r(72736),Ue=L(1-1/3)*S,Ve=Rt(0);function He(t){var e=Ue*E,r=Lt(b,e)[0]-Lt(-b,e)[0],n=Ve(0,e)[1],a=Lt(0,e)[1],o=A-a,s=M/t,l=4/M,c=n+o*o*4/M;function p(p,d){var v,g=i(d);if(g>e){var y=h(t-1,f(0,u((p+b)/s)));(v=Lt(p+=b*(t-1)/t-y*s,g))[0]=v[0]*M/r-M*(t-1)/(2*t)+y*M/t,v[1]=n+4*(v[1]-a)*o/M,d<0&&(v[1]=-v[1])}else v=Ve(p,d);return v[0]*=l,v[1]/=c,v}return p.invert=function(e,p){e/=l;var d=i(p*=c);if(d>n){var v=h(t-1,f(0,u((e+b)/s)));e=(e+b*(t-1)/t-v*s)*r/M;var g=Lt.invert(e,.25*(d-n)*M/o+a);return g[0]-=b*(t-1)/t-v*s,p<0&&(g[1]=-g[1]),g}return Ve.invert(e,p)},p}function qe(t,e){return[t,1&e?90-m:Ue]}function Ge(t,e){return[t,1&e?-90+m:-Ue]}function Ze(t){return[t[0]*(1-m),t[1]]}function Ye(){var t=4,e=(0,n.r)(He),r=e(t),i=r.stream;return r.lobes=function(r){return arguments.length?e(t=+r):t},r.stream=function(e){var n=r.rotate(),a=i(e),o=(r.rotate([0,0]),i(e));return r.rotate(n),a.sphere=function(){var e,r;(0,je.Z)((e=180/t,r=[].concat((0,Ne.w6)(-180,180+e/2,e).map(qe),(0,Ne.w6)(180,-180-e/2,-e).map(Ge)),{type:\\\"Polygon\\\",coordinates:[180===e?r.map(Ze):r]}),o)},a},r.scale(239.75)}function We(t){var e,r=1+t,n=L(g(1/r)),a=2*P(b/(e=b+4*n*r)),l=.5*a*(r+P(t*(2+t))),u=t*t,c=r*r;function f(f,h){var p,d,v=1-g(h);if(v&&v<2){var y,m=_-h,w=25;do{var T=g(m),k=s(m),A=n+o(T,r-k),M=1+c-2*r*k;m-=y=(m-u*n-r*T+M*A-.5*v*e)/(2*r*T*A)}while(i(y)>x&&--w>0);p=a*P(M),d=f*A/b}else p=a*(t+v),d=f*n/b;return[p*g(d),l-p*s(d)]}return f.invert=function(t,i){var s=t*t+(i-=l)*i,f=(1+c-s/(a*a))/(2*r),h=C(f),p=g(h),d=n+o(p,r-f);return[L(t/P(s))*b/d,L(1-2*(h-u*n-r*p+(1+c-2*r*f)*d)/e)]},f}function Xe(){var t=1,e=(0,n.r)(We),r=e(t);return r.ratio=function(r){return arguments.length?e(t=+r):t},r.scale(167.774).center([0,18.67])}var Je=.7109889596207567,Ke=.0528035274542;function $e(t,e){return e>-Je?((t=at(t,e))[1]+=Ke,t):ht(t,e)}function Qe(){return(0,n.Z)($e).rotate([-20,-55]).scale(164.263).center([0,-5.4036])}function tr(t,e){return i(e)>Je?((t=at(t,e))[1]-=e>0?Ke:-Ke,t):ht(t,e)}function er(){return(0,n.Z)(tr).scale(152.63)}function rr(t,e,r,n){var i=P(4*b/(2*r+(1+t-e/2)*g(2*r)+(t+e)/2*g(4*r)+e/2*g(6*r))),a=P(n*g(r)*P((1+t*s(2*r)+e*s(4*r))/(1+t+e))),o=r*u(1);function l(r){return P(1+t*s(2*r)+e*s(4*r))}function u(n){var i=n*r;return(2*i+(1+t-e/2)*g(2*i)+(t+e)/2*g(4*i)+e/2*g(6*i))/r}function c(t){return l(t)*g(t)}var f=function(t,e){var n=r*Q(u,o*g(e)/r,e/b);isNaN(n)&&(n=r*v(e));var c=i*l(n);return[c*a*t/b*s(n),c/a*g(n)]};return f.invert=function(t,e){var n=Q(c,e*a/i);return[t*b/(s(n)*i*a*l(n)),L(r*u(n/r)/o)]},0===r&&(i=P(n/b),(f=function(t,e){return[t*i,g(e)/i]}).invert=function(t,e){return[t/i,L(e*i)]}),f}function nr(){var t=1,e=0,r=45*E,i=2,a=(0,n.r)(rr),o=a(t,e,r,i);return o.a=function(n){return arguments.length?a(t=+n,e,r,i):t},o.b=function(n){return arguments.length?a(t,e=+n,r,i):e},o.psiMax=function(n){return arguments.length?a(t,e,r=+n*E,i):r*S},o.ratio=function(n){return arguments.length?a(t,e,r,i=+n):i},o.scale(180.739)}function ir(t,e,r,n,i,a,o,s,l,u,c){if(c.nanEncountered)return NaN;var f,h,p,d,v,g,y,m,x,b;if(h=t(e+.25*(f=r-e)),p=t(r-.25*f),isNaN(h))c.nanEncountered=!0;else{if(!isNaN(p))return b=((g=(d=f*(n+4*h+i)/12)+(v=f*(i+4*p+a)/12))-o)/15,u>l?(c.maxDepthCount++,g+b):Math.abs(b)<s?g+b:(m=ir(t,e,y=e+.5*f,n,h,i,d,.5*s,l,u+1,c),isNaN(m)?(c.nanEncountered=!0,NaN):(x=ir(t,y,r,i,p,a,v,.5*s,l,u+1,c),isNaN(x)?(c.nanEncountered=!0,NaN):m+x));c.nanEncountered=!0}}function ar(t,e,r,n,i){void 0===n&&(n=1e-8),void 0===i&&(i=20);var a=t(e),o=t(.5*(e+r)),s=t(r);return ir(t,e,r,a,o,s,(a+4*o+s)*(r-e)/6,n,i,1,{maxDepthCount:0,nanEncountered:!1})}function or(t,e,r){function n(r){return t+(1-t)*p(1-p(r,e),1/e)}function a(t){return ar(n,0,t,1e-4)}for(var o=1/a(1),s=1e3,l=(1+1e-8)*o,u=[],c=0;c<=s;c++)u.push(a(c/s)*l);function f(t){var e=0,r=s,n=500;do{u[n]>t?r=n:e=n,n=e+r>>1}while(n>e);var i=u[n+1]-u[n];return i&&(i=(t-u[n+1])/i),(n+1+i)/s}var h=2*f(1)/b*o/r,d=function(t,e){var r=f(i(g(e))),a=n(r)*t;return r/=h,[a,e>=0?r:-r]};return d.invert=function(t,e){var r;return i(e*=h)<1&&(r=v(e)*L(a(i(e))*o)),[t/n(i(e)),r]},d}function sr(){var t=0,e=2.5,r=1.183136,i=(0,n.r)(or),a=i(t,e,r);return a.alpha=function(n){return arguments.length?i(t=+n,e,r):t},a.k=function(n){return arguments.length?i(t,e=+n,r):e},a.gamma=function(n){return arguments.length?i(t,e,r=+n):r},a.scale(152.63)}function lr(t,e){return i(t[0]-e[0])<m&&i(t[1]-e[1])<m}function ur(t,e){for(var r,n,i,a=-1,o=t.length,s=t[0],l=[];++a<o;){n=((r=t[a])[0]-s[0])/e,i=(r[1]-s[1])/e;for(var u=0;u<e;++u)l.push([s[0]+u*n,s[1]+u*i]);s=r}return l.push(r),l}function cr(t,e,r){var i,a;function o(r,n){for(var i=n<0?-1:1,a=e[+(n<0)],o=0,s=a.length-1;o<s&&r>a[o][2][0];++o);var l=t(r-a[o][1][0],n);return l[0]+=t(a[o][1][0],i*n>i*a[o][0][1]?a[o][0][1]:n)[0],l}r?o.invert=r(o):t.invert&&(o.invert=function(r,n){for(var i=a[+(n<0)],s=e[+(n<0)],l=0,u=i.length;l<u;++l){var c=i[l];if(c[0][0]<=r&&r<c[1][0]&&c[0][1]<=n&&n<c[1][1]){var f=t.invert(r-t(s[l][1][0],0)[0],n);return f[0]+=s[l][1][0],lr(o(f[0],f[1]),[r,n])?f:null}}});var s=(0,n.Z)(o),l=s.stream;return s.stream=function(t){var e=s.rotate(),r=l(t),n=(s.rotate([0,0]),l(t));return s.rotate(e),r.sphere=function(){(0,je.Z)(i,n)},r},s.lobes=function(r){return arguments.length?(i=function(t){var e,r,n,i,a,o,s,l=[],u=t[0].length;for(s=0;s<u;++s)r=(e=t[0][s])[0][0],n=e[0][1],i=e[1][1],a=e[2][0],o=e[2][1],l.push(ur([[r+m,n+m],[r+m,i-m],[a-m,i-m],[a-m,o+m]],30));for(s=t[1].length-1;s>=0;--s)r=(e=t[1][s])[0][0],n=e[0][1],i=e[1][1],a=e[2][0],o=e[2][1],l.push(ur([[a-m,o-m],[a-m,i+m],[r+m,i+m],[r+m,n-m]],30));return{type:\\\"Polygon\\\",coordinates:[(0,Ne.TS)(l)]}}(r),e=r.map((function(t){return t.map((function(t){return[[t[0][0]*E,t[0][1]*E],[t[1][0]*E,t[1][1]*E],[t[2][0]*E,t[2][1]*E]]}))})),a=e.map((function(e){return e.map((function(e){var r,n=t(e[0][0],e[0][1])[0],i=t(e[2][0],e[2][1])[0],a=t(e[1][0],e[0][1])[1],o=t(e[1][0],e[1][1])[1];return a>o&&(r=a,a=o,o=r),[[n,a],[i,o]]}))})),s):e.map((function(t){return t.map((function(t){return[[t[0][0]*S,t[0][1]*S],[t[1][0]*S,t[1][1]*S],[t[2][0]*S,t[2][1]*S]]}))}))},null!=e&&s.lobes(e),s}$e.invert=function(t,e){return e>-Je?at.invert(t,e-Ke):ht.invert(t,e)},tr.invert=function(t,e){return i(e)>Je?at.invert(t,e+(e>0?Ke:-Ke)):ht.invert(t,e)};var fr=[[[[-180,0],[-100,90],[-40,0]],[[-40,0],[30,90],[180,0]]],[[[-180,0],[-160,-90],[-100,0]],[[-100,0],[-60,-90],[-20,0]],[[-20,0],[20,-90],[80,0]],[[80,0],[140,-90],[180,0]]]];function hr(){return cr(ut,fr).scale(160.857)}var pr=[[[[-180,0],[-100,90],[-40,0]],[[-40,0],[30,90],[180,0]]],[[[-180,0],[-160,-90],[-100,0]],[[-100,0],[-60,-90],[-20,0]],[[-20,0],[20,-90],[80,0]],[[80,0],[140,-90],[180,0]]]];function dr(){return cr(tr,pr).scale(152.63)}var vr=[[[[-180,0],[-100,90],[-40,0]],[[-40,0],[30,90],[180,0]]],[[[-180,0],[-160,-90],[-100,0]],[[-100,0],[-60,-90],[-20,0]],[[-20,0],[20,-90],[80,0]],[[80,0],[140,-90],[180,0]]]];function gr(){return cr(at,vr).scale(169.529)}var yr=[[[[-180,0],[-90,90],[0,0]],[[0,0],[90,90],[180,0]]],[[[-180,0],[-90,-90],[0,0]],[[0,0],[90,-90],[180,0]]]];function mr(){return cr(at,yr).scale(169.529).rotate([20,0])}var xr=[[[[-180,35],[-30,90],[0,35]],[[0,35],[30,90],[180,35]]],[[[-180,-10],[-102,-90],[-65,-10]],[[-65,-10],[5,-90],[77,-10]],[[77,-10],[103,-90],[180,-10]]]];function br(){return cr($e,xr,tt).rotate([-20,-55]).scale(164.263).center([0,-5.4036])}var _r=[[[[-180,0],[-110,90],[-40,0]],[[-40,0],[0,90],[40,0]],[[40,0],[110,90],[180,0]]],[[[-180,0],[-110,-90],[-40,0]],[[-40,0],[0,-90],[40,0]],[[40,0],[110,-90],[180,0]]]];function wr(){return cr(ht,_r).scale(152.63).rotate([-20,0])}function Tr(t,e){return[3/M*t*P(b*b/3-e*e),e]}function kr(){return(0,n.Z)(Tr).scale(158.837)}function Ar(t){function e(e,r){if(i(i(r)-_)<m)return[0,r<0?-2:2];var n=g(r),a=p((1+n)/(1-n),t/2),o=.5*(a+1/a)+s(e*=t);return[2*g(e)/o,(a-1/a)/o]}return e.invert=function(e,r){var n=i(r);if(i(n-2)<m)return e?null:[0,v(r)*_];if(n>2)return null;var a=(e/=2)*e,s=(r/=2)*r,l=2*r/(1+a+s);return l=p((1+l)/(1-l),1/t),[o(2*e,1-a-s)/t,L((l-1)/(l+1))]},e}function Mr(){var t=.5,e=(0,n.r)(Ar),r=e(t);return r.spacing=function(r){return arguments.length?e(t=+r):t},r.scale(124.75)}Tr.invert=function(t,e){return[M/3*t/P(b*b/3-e*e),e]};var Sr=b/k;function Er(t,e){return[t*(1+P(s(e)))/2,e/(s(e/2)*s(t/6))]}function Lr(){return(0,n.Z)(Er).scale(97.2672)}function Cr(t,e){var r=t*t,n=e*e;return[t*(.975534+n*(-.0143059*r-.119161+-.0547009*n)),e*(1.00384+r*(.0802894+-.02855*n+199025e-9*r)+n*(.0998909+-.0491032*n))]}function Pr(){return(0,n.Z)(Cr).scale(139.98)}function Or(t,e){return[g(t)/s(e),y(e)*s(t)]}function Ir(){return(0,n.Z)(Or).scale(144.049).clipAngle(89.999)}function Dr(t){var e=s(t),r=y(w+t/2);function n(n,a){var o=a-t,s=i(o)<m?n*e:i(s=w+a/2)<m||i(i(s)-_)<m?0:n*o/c(y(s)/r);return[s,o]}return n.invert=function(n,a){var o,s=a+t;return[i(a)<m?n/e:i(o=w+s/2)<m||i(i(o)-_)<m?0:n*c(y(o)/r)/a,s]},n}function zr(){return ft(Dr).parallel(40).scale(158.837)}function Rr(t,e){return[t,1.25*c(y(w+.4*e))]}function Fr(){return(0,n.Z)(Rr).scale(108.318)}function Br(t){var e=t.length-1;function r(r,n){for(var i,a=s(n),o=2/(1+a*s(r)),l=o*a*g(r),u=o*g(n),c=e,f=t[c],h=f[0],p=f[1];--c>=0;)h=(f=t[c])[0]+l*(i=h)-u*p,p=f[1]+l*p+u*i;return[h=l*(i=h)-u*p,p=l*p+u*i]}return r.invert=function(r,n){var l=20,u=r,c=n;do{for(var f,h=e,p=t[h],d=p[0],v=p[1],y=0,x=0;--h>=0;)y=d+u*(f=y)-c*x,x=v+u*x+c*f,d=(p=t[h])[0]+u*(f=d)-c*v,v=p[1]+u*v+c*f;var b,_,w=(y=d+u*(f=y)-c*x)*y+(x=v+u*x+c*f)*x;u-=b=((d=u*(f=d)-c*v-r)*y+(v=u*v+c*f-n)*x)/w,c-=_=(v*y-d*x)/w}while(i(b)+i(_)>m*m&&--l>0);if(l){var T=P(u*u+c*c),k=2*a(.5*T),A=g(k);return[o(u*A,T*s(k)),T?L(c*A/T):0]}},r}Er.invert=function(t,e){var r=i(t),n=i(e),a=m,o=_;n<Sr?o*=n/Sr:a+=6*C(Sr/n);for(var l=0;l<25;l++){var u=g(o),c=P(s(o)),f=g(o/2),h=s(o/2),p=g(a/6),d=s(a/6),v=.5*a*(1+c)-r,y=o/(h*d)-n,x=c?-.25*a*u/c:0,b=.5*(1+c),w=(1+.5*o*f/h)/(h*d),T=o/h*(p/6)/(d*d),k=x*T-w*b,A=(v*T-y*b)/k,M=(y*x-v*w)/k;if(o-=A,a-=M,i(A)<m&&i(M)<m)break}return[t<0?-a:a,e<0?-o:o]},Cr.invert=function(t,e){var r=v(t)*b,n=e/2,a=50;do{var o=r*r,s=n*n,l=r*n,u=r*(.975534+s*(-.0143059*o-.119161+-.0547009*s))-t,c=n*(1.00384+o*(.0802894+-.02855*s+199025e-9*o)+s*(.0998909+-.0491032*s))-e,f=.975534-s*(.119161+3*o*.0143059+.0547009*s),h=-l*(.238322+.2188036*s+.0286118*o),p=l*(.1605788+7961e-7*o+-.0571*s),d=1.00384+o*(.0802894+199025e-9*o)+s*(3*(.0998909-.02855*o)-.245516*s),g=h*p-d*f,y=(c*h-u*d)/g,x=(u*p-c*f)/g;r-=y,n-=x}while((i(y)>m||i(x)>m)&&--a>0);return a&&[r,n]},Or.invert=function(t,e){var r=t*t,n=e*e+1,i=r+n,a=t?T*P((i-P(i*i-4*r))/r):1/P(n);return[L(t*a),v(e)*C(a)]},Rr.invert=function(t,e){return[t,2.5*a(l(.8*e))-.625*b]};var Nr=[[.9972523,0],[.0052513,-.0041175],[.0074606,.0048125],[-.0153783,-.1968253],[.0636871,-.1408027],[.3660976,-.2937382]],jr=[[.98879,0],[0,0],[-.050909,0],[0,0],[.075528,0]],Ur=[[.984299,0],[.0211642,.0037608],[-.1036018,-.0575102],[-.0329095,-.0320119],[.0499471,.1223335],[.026046,.0899805],[7388e-7,-.1435792],[.0075848,-.1334108],[-.0216473,.0776645],[-.0225161,.0853673]],Vr=[[.9245,0],[0,0],[.01943,0]],Hr=[[.721316,0],[0,0],[-.00881625,-.00617325]];function qr(){return Xr(Nr,[152,-64]).scale(1400).center([-160.908,62.4864]).clipAngle(30).angle(7.8)}function Gr(){return Xr(jr,[95,-38]).scale(1e3).clipAngle(55).center([-96.5563,38.8675])}function Zr(){return Xr(Ur,[120,-45]).scale(359.513).clipAngle(55).center([-117.474,53.0628])}function Yr(){return Xr(Vr,[-20,-18]).scale(209.091).center([20,16.7214]).clipAngle(82)}function Wr(){return Xr(Hr,[165,10]).scale(250).clipAngle(130).center([-165,-10])}function Xr(t,e){var r=(0,n.Z)(Br(t)).rotate(e).clipAngle(90),i=(0,_t.Z)(e),a=r.center;return delete r.rotate,r.center=function(t){return arguments.length?a(i(t)):i.invert(a())},r}var Jr=P(6),Kr=P(7);function $r(t,e){var r=L(7*g(e)/(3*Jr));return[Jr*t*(2*s(2*r/3)-1)/Kr,9*g(r/3)/Kr]}function Qr(){return(0,n.Z)($r).scale(164.859)}function tn(t,e){for(var r,n=(1+T)*g(e),a=e,o=0;o<25&&(a-=r=(g(a/2)+g(a)-n)/(.5*s(a/2)+s(a)),!(i(r)<m));o++);return[t*(1+2*s(a)/s(a/2))/(3*k),2*P(3)*g(a/2)/P(2+k)]}function en(){return(0,n.Z)(tn).scale(188.209)}function rn(t,e){for(var r,n=P(6/(4+b)),a=(1+b/4)*g(e),o=e/2,l=0;l<25&&(o-=r=(o/2+g(o)-a)/(.5+s(o)),!(i(r)<m));l++);return[n*(.5+s(o))*t/1.5,n*o]}function nn(){return(0,n.Z)(rn).scale(166.518)}$r.invert=function(t,e){var r=3*L(e*Kr/9);return[t*Kr/(Jr*(2*s(2*r/3)-1)),L(3*g(r)*Jr/7)]},tn.invert=function(t,e){var r=e*P(2+k)/(2*P(3)),n=2*L(r);return[3*k*t/(1+2*s(n)/s(n/2)),L((r+g(n))/(1+T))]},rn.invert=function(t,e){var r=P(6/(4+b)),n=e/r;return i(i(n)-_)<m&&(n=n<0?-_:_),[1.5*t/(r*(.5+s(n))),L((n/2+g(n))/(1+b/4))]};var an=r(26867);function on(t,e){var r=e*e,n=r*r,i=r*n;return[t*(.84719-.13063*r+i*i*(.05494*r-.04515-.02326*n+.00331*i)),e*(1.01183+n*n*(.01926*r-.02625-.00396*n))]}function sn(){return(0,n.Z)(on).scale(175.295)}function ln(t,e){return[t*(1+s(e))/2,2*(e-y(e/2))]}function un(){return(0,n.Z)(ln).scale(152.63)}on.invert=function(t,e){var r,n,a,o,s=e,l=25;do{s-=r=(s*(1.01183+(a=(n=s*s)*n)*a*(.01926*n-.02625-.00396*a))-e)/(1.01183+a*a*(.21186*n-.23625+-.05148*a))}while(i(r)>x&&--l>0);return[t/(.84719-.13063*(n=s*s)+(o=n*(a=n*n))*o*(.05494*n-.04515-.02326*a+.00331*o)),s]},ln.invert=function(t,e){for(var r=e/2,n=0,a=1/0;n<10&&i(a)>m;++n){var o=s(e/2);e-=a=(e-y(e/2)-r)/(1-.5/(o*o))}return[2*t/(1+s(e)),e]};var cn=[[[[-180,0],[-90,90],[0,0]],[[0,0],[90,90],[180,0]]],[[[-180,0],[-90,-90],[0,0]],[[0,0],[90,-90],[180,0]]]];function fn(){return cr(J(1/0),cn).rotate([20,0]).scale(152.63)}function hn(t,e){var r=g(e),n=s(e),a=v(t);if(0===t||i(e)===_)return[0,e];if(0===e)return[t,0];if(i(t)===_)return[t*n,_*r];var o=b/(2*t)-2*t/b,l=2*e/b,u=(1-l*l)/(r-l),c=o*o,f=u*u,h=1+c/f,p=1+f/c,d=(o*r/u-o/2)/h,y=(f*r/c+u/2)/p,m=y*y-(f*r*r/c+u*r-1)/p;return[_*(d+P(d*d+n*n/h)*a),_*(y+P(m<0?0:m)*v(-e*o)*a)]}function pn(){return(0,n.Z)(hn).scale(127.267)}hn.invert=function(t,e){var r=(t/=_)*t,n=r+(e/=_)*e,i=b*b;return[t?(n-1+P((1-n)*(1-n)+4*r))/(2*t)*_:0,Q((function(t){return n*(b*g(t)-2*t)*b+4*t*t*(e-g(t))+2*b*t-i*e}),0)]};var dn=1.0148,vn=.23185,gn=-.14499,yn=.02406,mn=dn,xn=5*vn,bn=7*gn,_n=9*yn,wn=1.790857183;function Tn(t,e){var r=e*e;return[t,e*(dn+r*r*(vn+r*(gn+yn*r)))]}function kn(){return(0,n.Z)(Tn).scale(139.319)}function An(t,e){if(i(e)<m)return[t,0];var r=y(e),n=t*g(e);return[g(n)/r,e+(1-s(n))/r]}function Mn(){return(0,n.Z)(An).scale(103.74)}Tn.invert=function(t,e){e>wn?e=wn:e<-1.790857183&&(e=-1.790857183);var r,n=e;do{var a=n*n;n-=r=(n*(dn+a*a*(vn+a*(gn+yn*a)))-e)/(mn+a*a*(xn+a*(bn+_n*a)))}while(i(r)>m);return[t,n]},An.invert=function(t,e){if(i(e)<m)return[t,0];var r,n=t*t+e*e,a=.5*e,o=10;do{var l=y(a),u=1/s(a),c=n-2*e*a+a*a;a-=r=(l*c+2*(a-e))/(2+c*u*u+2*(a-e)*l)}while(i(r)>m&&--o>0);return l=y(a),[(i(e)<i(a+1/l)?L(t*l):v(e)*v(t)*(C(i(t*l))+_))/g(a),a]};var Sn=r(77338),En=r(83074);function Ln(t,e){return[t[0]*e[0]+t[1]*e[3],t[0]*e[1]+t[1]*e[4],t[0]*e[2]+t[1]*e[5]+t[2],t[3]*e[0]+t[4]*e[3],t[3]*e[1]+t[4]*e[4],t[3]*e[2]+t[4]*e[5]+t[5]]}function Cn(t,e){return[t[0]-e[0],t[1]-e[1]]}function Pn(t){return P(t[0]*t[0]+t[1]*t[1])}function On(t,e,r){function i(t,r){var n,i=e(t,r),a=i.project([t*S,r*S]);return(n=i.transform)?[n[0]*a[0]+n[1]*a[1]+n[2],-(n[3]*a[0]+n[4]*a[1]+n[5])]:(a[1]=-a[1],a)}function a(t,r){var n=t.project.invert,i=t.transform,o=r;if(i&&(i=function(t){var e=1/(t[0]*t[4]-t[1]*t[3]);return[e*t[4],-e*t[1],e*(t[1]*t[5]-t[2]*t[4]),-e*t[3],e*t[0],e*(t[2]*t[3]-t[0]*t[5])]}(i),o=[i[0]*o[0]+i[1]*o[1]+i[2],i[3]*o[0]+i[4]*o[1]+i[5]]),n&&t===function(t){return e(t[0]*E,t[1]*E)}(s=n(o)))return s;for(var s,l=t.children,u=0,c=l&&l.length;u<c;++u)if(s=a(l[u],r))return s}!function t(e,r){if(e.edges=function(t){for(var e=t.length,r=[],n=t[e-1],i=0;i<e;++i)r.push([n,n=t[i]]);return r}(e.face),r.face){var n=e.shared=function(t,e){for(var r,n,i=t.length,a=null,o=0;o<i;++o){r=t[o];for(var s=e.length;--s>=0;)if(n=e[s],r[0]===n[0]&&r[1]===n[1]){if(a)return[a,r];a=r}}}(e.face,r.face),i=(c=n.map(r.project),f=n.map(e.project),h=Cn(c[1],c[0]),p=Cn(f[1],f[0]),d=function(t,e){return o(t[0]*e[1]-t[1]*e[0],t[0]*e[0]+t[1]*e[1])}(h,p),v=Pn(h)/Pn(p),Ln([1,0,c[0][0],0,1,c[0][1]],Ln([v,0,0,0,v,0],Ln([s(d),g(d),0,-g(d),s(d),0],[1,0,-f[0][0],0,1,-f[0][1]]))));e.transform=r.transform?Ln(r.transform,i):i;for(var a=r.edges,l=0,u=a.length;l<u;++l)Dn(n[0],a[l][1])&&Dn(n[1],a[l][0])&&(a[l]=e),Dn(n[0],a[l][0])&&Dn(n[1],a[l][1])&&(a[l]=e);for(l=0,u=(a=e.edges).length;l<u;++l)Dn(n[0],a[l][0])&&Dn(n[1],a[l][1])&&(a[l]=r),Dn(n[0],a[l][1])&&Dn(n[1],a[l][0])&&(a[l]=r)}else e.transform=r.transform;var c,f,h,p,d,v;return e.children&&e.children.forEach((function(r){t(r,e)})),e}(t,{transform:null}),zn(t)&&(i.invert=function(e,r){var n=a(t,[e,-r]);return n&&(n[0]*=E,n[1]*=E,n)});var l=(0,n.Z)(i),u=l.stream;return l.stream=function(e){var r=l.rotate(),n=u(e),i=(l.rotate([0,0]),u(e));return l.rotate(r),n.sphere=function(){i.polygonStart(),i.lineStart(),In(i,t),i.lineEnd(),i.polygonEnd()},n},l.angle(null==r?-30:r*S)}function In(t,e,r){var n,a,o=e.edges,s=o.length,l={type:\\\"MultiPoint\\\",coordinates:e.face},u=e.face.filter((function(t){return 90!==i(t[1])})),c=(0,Sn.Z)({type:\\\"MultiPoint\\\",coordinates:u}),f=!1,h=-1,p=c[1][0]-c[0][0],d=180===p||360===p?[(c[0][0]+c[1][0])/2,(c[0][1]+c[1][1])/2]:(0,bt.Z)(l);if(r)for(;++h<s&&o[h]!==r;);++h;for(var v=0;v<s;++v)a=o[(v+h)%s],Array.isArray(a)?(f||(t.point((n=(0,En.Z)(a[0],d)(m))[0],n[1]),f=!0),t.point((n=(0,En.Z)(a[1],d)(m))[0],n[1])):(f=!1,a!==r&&In(t,a,e))}function Dn(t,e){return t&&e&&t[0]===e[0]&&t[1]===e[1]}function zn(t){return t.project.invert||t.children&&t.children.some(zn)}var Rn=r(98936),Fn=[[0,90],[-90,0],[0,0],[90,0],[180,0],[0,-90]],Bn=[[0,2,1],[0,3,2],[5,1,2],[5,2,3],[0,1,4],[0,4,3],[5,4,1],[5,3,4]].map((function(t){return t.map((function(t){return Fn[t]}))}));function Nn(t){t=t||function(t){var e=(0,bt.Z)({type:\\\"MultiPoint\\\",coordinates:t});return(0,Rn.Z)().scale(1).translate([0,0]).rotate([-e[0],-e[1]])};var e=Bn.map((function(e){return{face:e,project:t(e)}}));return[-1,0,0,1,0,1,4,5].forEach((function(t,r){var n=e[t];n&&(n.children||(n.children=[])).push(e[r])})),On(e[0],(function(t,r){return e[t<-b/2?r<0?6:4:t<0?r<0?2:0:t<b/2?r<0?3:1:r<0?7:5]})).angle(-30).scale(101.858).center([0,45])}var jn=2/P(3);function Un(t,e){var r=Lt(t,e);return[r[0]*jn,r[1]]}function Vn(t){t=t||function(t){var e=(0,bt.Z)({type:\\\"MultiPoint\\\",coordinates:t});return(0,n.Z)(Un).translate([0,0]).scale(1).rotate(e[1]>0?[-e[0],0]:[180-e[0],180])};var e=Bn.map((function(e){return{face:e,project:t(e)}}));return[-1,0,0,1,0,1,4,5].forEach((function(t,r){var n=e[t];n&&(n.children||(n.children=[])).push(e[r])})),On(e[0],(function(t,r){return e[t<-b/2?r<0?6:4:t<0?r<0?2:0:t<b/2?r<0?3:1:r<0?7:5]})).angle(-30).scale(121.906).center([0,48.5904])}function Hn(t){t=t||function(t){var e=6===t.length?(0,bt.Z)({type:\\\"MultiPoint\\\",coordinates:t}):t[0];return(0,Rn.Z)().scale(1).translate([0,0]).rotate([-e[0],-e[1]])};var e=Bn.map((function(t){for(var e,r=t.map(Zn),n=r.length,i=r[n-1],a=[],o=0;o<n;++o)e=r[o],a.push(Gn([.9486832980505138*i[0]+.31622776601683794*e[0],.9486832980505138*i[1]+.31622776601683794*e[1],.9486832980505138*i[2]+.31622776601683794*e[2]]),Gn([.9486832980505138*e[0]+.31622776601683794*i[0],.9486832980505138*e[1]+.31622776601683794*i[1],.9486832980505138*e[2]+.31622776601683794*i[2]])),i=e;return a})),r=[],n=[-1,0,0,1,0,1,4,5];e.forEach((function(t,i){for(var a,o,s=Bn[i],l=s.length,u=r[i]=[],c=0;c<l;++c)e.push([s[c],t[(2*c+2)%(2*l)],t[(2*c+1)%(2*l)]]),n.push(i),u.push((a=Zn(t[(2*c+2)%(2*l)]),o=Zn(t[(2*c+1)%(2*l)]),[a[1]*o[2]-a[2]*o[1],a[2]*o[0]-a[0]*o[2],a[0]*o[1]-a[1]*o[0]]))}));var i=e.map((function(e){return{project:t(e),face:e}}));return n.forEach((function(t,e){var r=i[t];r&&(r.children||(r.children=[])).push(i[e])})),On(i[0],(function(t,e){var n=s(e),a=[n*s(t),n*g(t),g(e)],o=t<-b/2?e<0?6:4:t<0?e<0?2:0:t<b/2?e<0?3:1:e<0?7:5,l=r[o];return i[qn(l[0],a)<0?8+3*o:qn(l[1],a)<0?8+3*o+1:qn(l[2],a)<0?8+3*o+2:o]})).angle(-30).scale(110.625).center([0,45])}function qn(t,e){for(var r=0,n=t.length,i=0;r<n;++r)i+=t[r]*e[r];return i}function Gn(t){return[o(t[1],t[0])*S,L(f(-1,h(1,t[2])))*S]}function Zn(t){var e=t[0]*E,r=t[1]*E,n=s(r);return[n*s(e),n*g(e),g(r)]}function Yn(){}function Wn(t,e){var r,n=e.stream;if(!n)throw new Error(\\\"invalid projection\\\");switch(t&&t.type){case\\\"Feature\\\":r=Jn;break;case\\\"FeatureCollection\\\":r=Xn;break;default:r=Kn}return r(t,n)}function Xn(t,e){return{type:\\\"FeatureCollection\\\",features:t.features.map((function(t){return Jn(t,e)}))}}function Jn(t,e){return{type:\\\"Feature\\\",id:t.id,properties:t.properties,geometry:Kn(t.geometry,e)}}function Kn(t,e){if(!t)return null;if(\\\"GeometryCollection\\\"===t.type)return function(t,e){return{type:\\\"GeometryCollection\\\",geometries:t.geometries.map((function(t){return Kn(t,e)}))}}(t,e);var r;switch(t.type){case\\\"Point\\\":case\\\"MultiPoint\\\":r=ti;break;case\\\"LineString\\\":case\\\"MultiLineString\\\":r=ei;break;case\\\"Polygon\\\":case\\\"MultiPolygon\\\":case\\\"Sphere\\\":r=ri;break;default:return null}return(0,je.Z)(t,e(r)),r.result()}Un.invert=function(t,e){return Lt.invert(t/jn,e)};var $n=[],Qn=[],ti={point:function(t,e){$n.push([t,e])},result:function(){var t=$n.length?$n.length<2?{type:\\\"Point\\\",coordinates:$n[0]}:{type:\\\"MultiPoint\\\",coordinates:$n}:null;return $n=[],t}},ei={lineStart:Yn,point:function(t,e){$n.push([t,e])},lineEnd:function(){$n.length&&(Qn.push($n),$n=[])},result:function(){var t=Qn.length?Qn.length<2?{type:\\\"LineString\\\",coordinates:Qn[0]}:{type:\\\"MultiLineString\\\",coordinates:Qn}:null;return Qn=[],t}},ri={polygonStart:Yn,lineStart:Yn,point:function(t,e){$n.push([t,e])},lineEnd:function(){var t=$n.length;if(t){do{$n.push($n[0].slice())}while(++t<4);Qn.push($n),$n=[]}},polygonEnd:Yn,result:function(){if(!Qn.length)return null;var t=[],e=[];return Qn.forEach((function(r){!function(t){if((e=t.length)<4)return!1;for(var e,r=0,n=t[e-1][1]*t[0][0]-t[e-1][0]*t[0][1];++r<e;)n+=t[r-1][1]*t[r][0]-t[r-1][0]*t[r][1];return n<=0}(r)?e.push(r):t.push([r])})),e.forEach((function(e){var r=e[0];t.some((function(t){if(function(t,e){for(var r=e[0],n=e[1],i=!1,a=0,o=t.length,s=o-1;a<o;s=a++){var l=t[a],u=l[0],c=l[1],f=t[s],h=f[0],p=f[1];c>n^p>n&&r<(h-u)*(n-c)/(p-c)+u&&(i=!i)}return i}(t[0],r))return t.push(e),!0}))||t.push([e])})),Qn=[],t.length?t.length>1?{type:\\\"MultiPolygon\\\",coordinates:t}:{type:\\\"Polygon\\\",coordinates:t[0]}:null}};function ni(t){var e=t(_,0)[0]-t(-_,0)[0];function r(r,n){var a=i(r)<_,o=t(a?r:r>0?r-b:r+b,n),s=(o[0]-o[1])*T,l=(o[0]+o[1])*T;if(a)return[s,l];var u=e*T,c=s>0^l>0?-1:1;return[c*s-v(l)*u,c*l-v(s)*u]}return t.invert&&(r.invert=function(r,n){var a=(r+n)*T,o=(n-r)*T,s=i(a)<.5*e&&i(o)<.5*e;if(!s){var l=e*T,u=a>0^o>0?-1:1,c=-u*r+(o>0?1:-1)*l,f=-u*n+(a>0?1:-1)*l;a=(-c-f)*T,o=(c-f)*T}var h=t.invert(a,o);return s||(h[0]+=a>0?b:-b),h}),(0,n.Z)(r).rotate([-90,-90,45]).clipAngle(179.999)}function ii(){return ni(Le).scale(176.423)}function ai(){return ni(Ie).scale(111.48)}function oi(t,e){if(!(0<=(e=+e)&&e<=20))throw new Error(\\\"invalid digits\\\");function r(t){var r=t.length,n=2,i=new Array(r);for(i[0]=+t[0].toFixed(e),i[1]=+t[1].toFixed(e);n<r;)i[n]=t[n],++n;return i}function n(t){return t.map(r)}function i(t){for(var e=r(t[0]),n=[e],i=1;i<t.length;i++){var a=r(t[i]);(a.length>2||a[0]!=e[0]||a[1]!=e[1])&&(n.push(a),e=a)}return 1===n.length&&t.length>1&&n.push(r(t[t.length-1])),n}function a(t){return t.map(i)}function o(t){if(null==t)return t;var e;switch(t.type){case\\\"GeometryCollection\\\":e={type:\\\"GeometryCollection\\\",geometries:t.geometries.map(o)};break;case\\\"Point\\\":e={type:\\\"Point\\\",coordinates:r(t.coordinates)};break;case\\\"MultiPoint\\\":e={type:t.type,coordinates:n(t.coordinates)};break;case\\\"LineString\\\":e={type:t.type,coordinates:i(t.coordinates)};break;case\\\"MultiLineString\\\":case\\\"Polygon\\\":e={type:t.type,coordinates:a(t.coordinates)};break;case\\\"MultiPolygon\\\":e={type:\\\"MultiPolygon\\\",coordinates:t.coordinates.map(a)};break;default:return t}return null!=t.bbox&&(e.bbox=t.bbox),e}function s(t){var e={type:\\\"Feature\\\",properties:t.properties,geometry:o(t.geometry)};return null!=t.id&&(e.id=t.id),null!=t.bbox&&(e.bbox=t.bbox),e}if(null!=t)switch(t.type){case\\\"Feature\\\":return s(t);case\\\"FeatureCollection\\\":var l={type:\\\"FeatureCollection\\\",features:t.features.map(s)};return null!=t.bbox&&(l.bbox=t.bbox),l;default:return o(t)}return t}function si(t){var e=g(t);function r(r,n){var i=e?y(r*e/2)/e:r/2;if(!n)return[2*i,-t];var o=2*a(i*g(n)),l=1/y(n);return[g(o)*l,n+(1-s(o))*l-t]}return r.invert=function(r,n){if(i(n+=t)<m)return[e?2*a(e*r/2)/e:r,0];var o,l=r*r+n*n,u=0,c=10;do{var f=y(u),h=1/s(u),p=l-2*n*u+u*u;u-=o=(f*p+2*(u-n))/(2+p*h*h+2*(u-n)*f)}while(i(o)>m&&--c>0);var d=r*(f=y(u)),v=y(i(n)<i(u+1/f)?.5*L(d):.5*C(d)+b/4)/g(u);return[e?2*a(e*v)/e:2*v,u]},r}function li(){return ft(si).scale(131.215)}var ui=[[.9986,-.062],[1,0],[.9986,.062],[.9954,.124],[.99,.186],[.9822,.248],[.973,.31],[.96,.372],[.9427,.434],[.9216,.4958],[.8962,.5571],[.8679,.6176],[.835,.6769],[.7986,.7346],[.7597,.7903],[.7186,.8435],[.6732,.8936],[.6213,.9394],[.5722,.9761],[.5322,1]];function ci(t,e){var r,n=h(18,36*i(e)/b),a=u(n),o=n-a,s=(r=ui[a])[0],l=r[1],c=(r=ui[++a])[0],f=r[1],p=(r=ui[h(19,++a)])[0],d=r[1];return[t*(c+o*(p-s)/2+o*o*(p-2*c+s)/2),(e>0?_:-_)*(f+o*(d-l)/2+o*o*(d-2*f+l)/2)]}function fi(){return(0,n.Z)(ci).scale(152.63)}function hi(t,e){var r=function(t){function e(e,r){var n=s(r),i=(t-1)/(t-n*s(e));return[i*n*g(e),i*g(r)]}return e.invert=function(e,r){var n=e*e+r*r,i=P(n),a=(t-P(1-n*(t+1)/(t-1)))/((t-1)/i+i/(t-1));return[o(e*a,i*P(1-a*a)),i?L(r*a/i):0]},e}(t);if(!e)return r;var n=s(e),i=g(e);function a(e,a){var o=r(e,a),s=o[1],l=s*i/(t-1)+n;return[o[0]*n/l,s/l]}return a.invert=function(e,a){var o=(t-1)/(t-1-a*i);return r.invert(o*e,o*a*n)},a}function pi(){var t=2,e=0,r=(0,n.r)(hi),i=r(t,e);return i.distance=function(n){return arguments.length?r(t=+n,e):t},i.tilt=function(n){return arguments.length?r(t,e=n*E):e*S},i.scale(432.147).clipAngle(C(1/t)*S-1e-6)}ui.forEach((function(t){t[1]*=1.0144})),ci.invert=function(t,e){var r=e/_,n=90*r,a=h(18,i(n/5)),o=f(0,u(a));do{var s=ui[o][1],l=ui[o+1][1],c=ui[h(19,o+2)][1],p=c-s,d=c-2*l+s,v=2*(i(r)-l)/p,g=d/p,y=v*(1-g*v*(1-2*g*v));if(y>=0||1===o){n=(e>=0?5:-5)*(y+a);var m,b=50;do{y=(a=h(18,i(n)/5))-(o=u(a)),s=ui[o][1],l=ui[o+1][1],c=ui[h(19,o+2)][1],n-=(m=(e>=0?_:-_)*(l+y*(c-s)/2+y*y*(c-2*l+s)/2)-e)*S}while(i(m)>x&&--b>0);break}}while(--o>=0);var w=ui[o][0],T=ui[o+1][0],k=ui[h(19,o+2)][0];return[t/(T+y*(k-w)/2+y*y*(k-2*T+w)/2),n*E]};var di=1e-4,vi=1e4,gi=-180,yi=gi+di,mi=180,xi=mi-di,bi=-90,_i=bi+di,wi=90,Ti=wi-di;function ki(t){return t.length>0}function Ai(t){return t===bi||t===wi?[0,t]:[gi,(e=t,Math.floor(e*vi)/vi)];var e}function Mi(t){var e=t[0],r=t[1],n=!1;return e<=yi?(e=gi,n=!0):e>=xi&&(e=mi,n=!0),r<=_i?(r=bi,n=!0):r>=Ti&&(r=wi,n=!0),n?[e,r]:t}function Si(t){return t.map(Mi)}function Ei(t,e,r){for(var n=0,i=t.length;n<i;++n){var a=t[n].slice();r.push({index:-1,polygon:e,ring:a});for(var o=0,s=a.length;o<s;++o){var l=a[o],u=l[0],c=l[1];if(u<=yi||u>=xi||c<=_i||c>=Ti){a[o]=Mi(l);for(var f=o+1;f<s;++f){var h=a[f],p=h[0],d=h[1];if(p>yi&&p<xi&&d>_i&&d<Ti)break}if(f===o+1)continue;if(o){var v={index:-1,polygon:e,ring:a.slice(0,o+1)};v.ring[v.ring.length-1]=Ai(c),r[r.length-1]=v}else r.pop();if(f>=s)break;r.push({index:-1,polygon:e,ring:a=a.slice(f-1)}),a[0]=Ai(a[0][1]),o=-1,s=a.length}}}}function Li(t){var e,r,n,i,a,o,s=t.length,l={},u={};for(e=0;e<s;++e)n=(r=t[e]).ring[0],a=r.ring[r.ring.length-1],n[0]!==a[0]||n[1]!==a[1]?(r.index=e,l[n]=u[a]=r):(r.polygon.push(r.ring),t[e]=null);for(e=0;e<s;++e)if(r=t[e]){if(n=r.ring[0],a=r.ring[r.ring.length-1],i=u[n],o=l[a],delete l[n],delete u[a],n[0]===a[0]&&n[1]===a[1]){r.polygon.push(r.ring);continue}i?(delete u[n],delete l[i.ring[0]],i.ring.pop(),t[i.index]=null,r={index:-1,polygon:i.polygon,ring:i.ring.concat(r.ring)},i===o?r.polygon.push(r.ring):(r.index=s++,t.push(l[r.ring[0]]=u[r.ring[r.ring.length-1]]=r))):o?(delete l[a],delete u[o.ring[o.ring.length-1]],r.ring.pop(),r={index:s++,polygon:o.polygon,ring:r.ring.concat(o.ring)},t[o.index]=null,t.push(l[r.ring[0]]=u[r.ring[r.ring.length-1]]=r)):(r.ring.push(r.ring[0]),r.polygon.push(r.ring))}}function Ci(t){var e={type:\\\"Feature\\\",geometry:Pi(t.geometry)};return null!=t.id&&(e.id=t.id),null!=t.bbox&&(e.bbox=t.bbox),null!=t.properties&&(e.properties=t.properties),e}function Pi(t){if(null==t)return t;var e,r,n,i;switch(t.type){case\\\"GeometryCollection\\\":e={type:\\\"GeometryCollection\\\",geometries:t.geometries.map(Pi)};break;case\\\"Point\\\":e={type:\\\"Point\\\",coordinates:Mi(t.coordinates)};break;case\\\"MultiPoint\\\":case\\\"LineString\\\":e={type:t.type,coordinates:Si(t.coordinates)};break;case\\\"MultiLineString\\\":e={type:\\\"MultiLineString\\\",coordinates:t.coordinates.map(Si)};break;case\\\"Polygon\\\":var a=[];Ei(t.coordinates,a,r=[]),Li(r),e={type:\\\"Polygon\\\",coordinates:a};break;case\\\"MultiPolygon\\\":r=[],n=-1,i=t.coordinates.length;for(var o=new Array(i);++n<i;)Ei(t.coordinates[n],o[n]=[],r);Li(r),e={type:\\\"MultiPolygon\\\",coordinates:o.filter(ki)};break;default:return t}return null!=t.bbox&&(e.bbox=t.bbox),e}function Oi(t){if(null==t)return t;switch(t.type){case\\\"Feature\\\":return Ci(t);case\\\"FeatureCollection\\\":var e={type:\\\"FeatureCollection\\\",features:t.features.map(Ci)};return null!=t.bbox&&(e.bbox=t.bbox),e;default:return Pi(t)}}function Ii(t,e){var r=y(e/2),n=g(w*r);return[t*(.74482-.34588*n*n),1.70711*r]}function Di(){return(0,n.Z)(Ii).scale(146.153)}function zi(t,e,r){var i=(0,En.Z)(e,r),a=i(.5),o=(0,_t.Z)([-a[0],-a[1]])(e),s=i.distance/2,l=-L(g(o[1]*E)/g(s)),u=[-a[0],-a[1],-(o[0]>0?b-l:l)*S],c=(0,n.Z)(t(s)).rotate(u),f=(0,_t.Z)(u),h=c.center;return delete c.rotate,c.center=function(t){return arguments.length?h(f(t)):f.invert(h())},c.clipAngle(90)}function Ri(t){var e=s(t);function r(t,r){var n=(0,Rn.M)(t,r);return n[0]*=e,n}return r.invert=function(t,r){return Rn.M.invert(t/e,r)},r}function Fi(){return Bi([-158,21.5],[-77,39]).clipAngle(60).scale(400)}function Bi(t,e){return zi(Ri,t,e)}function Ni(t){if(!(t*=2))return Z.N;var e=-t/2,r=-e,n=t*t,i=y(r),a=.5/g(r);function l(i,a){var o=C(s(a)*s(i-e)),l=C(s(a)*s(i-r));return[((o*=o)-(l*=l))/(2*t),(a<0?-1:1)*P(4*n*l-(n-o+l)*(n-o+l))/(2*t)]}return l.invert=function(t,n){var l,u,c=n*n,f=s(P(c+(l=t+e)*l)),h=s(P(c+(l=t+r)*l));return[o(u=f-h,l=(f+h)*i),(n<0?-1:1)*C(P(l*l+u*u)*a)]},l}function ji(){return Ui([-158,21.5],[-77,39]).clipAngle(130).scale(122.571)}function Ui(t,e){return zi(Ni,t,e)}function Vi(t,e){if(i(e)<m)return[t,0];var r=i(e/_),n=L(r);if(i(t)<m||i(i(e)-_)<m)return[0,v(e)*b*y(n/2)];var a=s(n),o=i(b/t-t/b)/2,l=o*o,u=a/(r+a-1),c=u*(2/r-1),f=c*c,h=f+l,p=u-f,d=l+u;return[v(t)*b*(o*p+P(l*p*p-h*(u*u-f)))/h,v(e)*b*(c*d-o*P((l+1)*h-d*d))/h]}function Hi(){return(0,n.Z)(Vi).scale(79.4183)}function qi(t,e){if(i(e)<m)return[t,0];var r=i(e/_),n=L(r);if(i(t)<m||i(i(e)-_)<m)return[0,v(e)*b*y(n/2)];var a=s(n),o=i(b/t-t/b)/2,l=o*o,u=a*(P(1+l)-o*a)/(1+l*r*r);return[v(t)*b*u,v(e)*b*P(1-u*(2*o+u))]}function Gi(){return(0,n.Z)(qi).scale(79.4183)}function Zi(t,e){if(i(e)<m)return[t,0];var r=e/_,n=L(r);if(i(t)<m||i(i(e)-_)<m)return[0,b*y(n/2)];var a=(b/t-t/b)/2,o=r/(1+s(n));return[b*(v(t)*P(a*a+1-o*o)-a),b*o]}function Yi(){return(0,n.Z)(Zi).scale(79.4183)}function Wi(t,e){if(!e)return[t,0];var r=i(e);if(!t||r===_)return[0,e];var n=r/_,a=n*n,o=(8*n-a*(a+2)-5)/(2*a*(n-1)),s=o*o,l=n*o,u=a+s+2*l,c=n+3*o,f=t/_,h=f+1/f,p=v(i(t)-_)*P(h*h-4),d=p*p,g=(p*(u+s-1)+2*P(u*(a+s*d-1)+(1-a)*(a*(c*c+4*s)+12*l*s+4*s*s)))/(4*u+d);return[v(t)*_*g,v(e)*_*P(1+p*i(g)-g*g)]}function Xi(){return(0,n.Z)(Wi).scale(127.16)}function Ji(t,e,r,n){var i=b/3;t=f(t,m),e=f(e,m),t=h(t,_),e=h(e,b-m),r=f(r,0),r=h(r,100-m);var a=(n=f(n,m))/100,l=C((r/100+1)*s(i))/i,u=g(t)/g(l*_),c=e/b,p=P(a*g(t/2)/g(e/2));return function(t,e,r,n,i){function a(a,o){var l=r*g(n*o),u=P(1-l*l),c=P(2/(1+u*s(a*=i)));return[t*u*c*g(a),e*l*c]}return a.invert=function(a,s){var l=a/t,u=s/e,c=P(l*l+u*u),f=2*L(c/2);return[o(a*y(f),t*c)/i,c&&L(s*g(f)/(e*r*c))/n]},a}(p/P(c*u*l),1/(p*P(c*u*l)),u,l,c)}function Ki(){var t=65*E,e=60*E,r=20,i=200,a=(0,n.r)(Ji),o=a(t,e,r,i);return o.poleline=function(n){return arguments.length?a(t=+n*E,e,r,i):t*S},o.parallels=function(n){return arguments.length?a(t,e=+n*E,r,i):e*S},o.inflation=function(n){return arguments.length?a(t,e,r=+n,i):r},o.ratio=function(n){return arguments.length?a(t,e,r,i=+n):i},o.scale(163.775)}function $i(){return Ki().poleline(65).parallels(60).inflation(0).ratio(200).scale(172.633)}Ii.invert=function(t,e){var r=e/1.70711,n=g(w*r);return[t/(.74482-.34588*n*n),2*a(r)]},Vi.invert=function(t,e){if(i(e)<m)return[t,0];if(i(t)<m)return[0,_*g(2*a(e/b))];var r=(t/=b)*t,n=(e/=b)*e,o=r+n,l=o*o,u=-i(e)*(1+o),c=u-2*n+r,f=-2*u+1+2*n+l,h=n/f+(2*c*c*c/(f*f*f)-9*u*c/(f*f))/27,p=(u-c*c/(3*f))/f,d=2*P(-p/3),y=C(3*h/(p*d))/3;return[b*(o-1+P(1+2*(r-n)+l))/(2*t),v(e)*b*(-d*s(y+b/3)-c/(3*f))]},qi.invert=function(t,e){if(!t)return[0,_*g(2*a(e/b))];var r=i(t/b),n=(1-r*r-(e/=b)*e)/(2*r),s=P(n*n+1);return[v(t)*b*(s-n),v(e)*_*g(2*o(P((1-2*n*r)*(n+s)-r),P(s+n+r)))]},Zi.invert=function(t,e){if(!e)return[t,0];var r=e/b,n=(b*b*(1-r*r)-t*t)/(2*b*t);return[t?b*(v(t)*P(n*n+1)-n):0,_*g(2*a(r))]},Wi.invert=function(t,e){var r;if(!t||!e)return[t,e];e/=b;var n=v(t)*t/_,a=(n*n-1+4*e*e)/i(n),o=a*a,s=2*e,l=50;do{var u=s*s,c=(8*s-u*(u+2)-5)/(2*u*(s-1)),f=(3*s-u*s-10)/(2*u*s),h=c*c,p=s*c,d=s+c,g=d*d,y=s+3*c,x=-2*d*(4*p*h+(1-4*u+3*u*u)*(1+f)+h*(14*u-6-o+(8*u-8-2*o)*f)+p*(12*u-8+(10*u-10-o)*f)),w=P(g*(u+h*o-1)+(1-u)*(u*(y*y+4*h)+h*(12*p+4*h)));s-=r=(a*(g+h-1)+2*w-n*(4*g+o))/(a*(2*c*f+2*d*(1+f))+x/w-8*d*(a*(-1+h+g)+2*w)*(1+f)/(o+4*g))}while(r>m&&--l>0);return[v(t)*(P(a*a+4)+a)*b/4,_*s]};var Qi=4*b+3*P(3),ta=2*P(2*b*P(3)/Qi),ea=it(ta*P(3)/b,ta,Qi/6);function ra(){return(0,n.Z)(ea).scale(176.84)}function na(t,e){return[t*P(1-3*e*e/(b*b)),e]}function ia(){return(0,n.Z)(na).scale(152.63)}function aa(t,e){var r=s(e),n=s(t)*r,i=1-n,a=s(t=o(g(t)*r,-g(e))),l=g(t);return[l*(r=P(1-n*n))-a*i,-a*r-l*i]}function oa(){return(0,n.Z)(aa).rotate([0,-90,45]).scale(124.75).clipAngle(179.999)}function sa(t,e){var r=R(t,e);return[(r[0]+t/_)/2,(r[1]+e)/2]}function la(){return(0,n.Z)(sa).scale(158.837)}na.invert=function(t,e){return[t/P(1-3*e*e/(b*b)),e]},aa.invert=function(t,e){var r=(t*t+e*e)/-2,n=P(-r*(2+r)),i=e*r+t*n,a=t*r-e*n,s=P(a*a+i*i);return[o(n*i,s*(1+r)),s?-L(n*a/s):0]},sa.invert=function(t,e){var r=t,n=e,a=25;do{var o,l=s(n),u=g(n),c=g(2*n),f=u*u,h=l*l,p=g(r),d=s(r/2),v=g(r/2),y=v*v,x=1-h*d*d,b=x?C(l*d)*P(o=1/x):o=0,w=.5*(2*b*l*v+r/_)-t,T=.5*(b*u+n)-e,k=.5*o*(h*y+b*l*d*f)+.5/_,A=o*(p*c/4-b*u*v),M=.125*o*(c*v-b*u*h*p),S=.5*o*(f*d+b*y*l)+.5,E=A*M-S*k,L=(T*A-w*S)/E,O=(w*M-T*k)/E;r-=L,n-=O}while((i(L)>m||i(O)>m)&&--a>0);return[r,n]}},33940:function(t,e,r){\\\"use strict\\\";function n(){return new i}function i(){this.reset()}r.d(e,{Z:function(){return n}}),i.prototype={constructor:i,reset:function(){this.s=this.t=0},add:function(t){o(a,t,this.t),o(this,a.s,this.s),this.s?this.t+=a.t:this.s=a.t},valueOf:function(){return this.s}};var a=new i;function o(t,e,r){var n=t.s=e+r,i=n-e,a=n-i;t.t=e-a+(r-i)}},97860:function(t,e,r){\\\"use strict\\\";r.d(e,{L9:function(){return h},ZP:function(){return x},gL:function(){return d}});var n,i,a,o,s,l=r(33940),u=r(39695),c=r(73182),f=r(72736),h=(0,l.Z)(),p=(0,l.Z)(),d={point:c.Z,lineStart:c.Z,lineEnd:c.Z,polygonStart:function(){h.reset(),d.lineStart=v,d.lineEnd=g},polygonEnd:function(){var t=+h;p.add(t<0?u.BZ+t:t),this.lineStart=this.lineEnd=this.point=c.Z},sphere:function(){p.add(u.BZ)}};function v(){d.point=y}function g(){m(n,i)}function y(t,e){d.point=m,n=t,i=e,t*=u.uR,e*=u.uR,a=t,o=(0,u.mC)(e=e/2+u.pu),s=(0,u.O$)(e)}function m(t,e){t*=u.uR,e=(e*=u.uR)/2+u.pu;var r=t-a,n=r>=0?1:-1,i=n*r,l=(0,u.mC)(e),c=(0,u.O$)(e),f=s*c,p=o*l+f*(0,u.mC)(i),d=f*n*(0,u.O$)(i);h.add((0,u.fv)(d,p)),a=t,o=l,s=c}function x(t){return p.reset(),(0,f.Z)(t,d),2*p}},77338:function(t,e,r){\\\"use strict\\\";r.d(e,{Z:function(){return C}});var n,i,a,o,s,l,u,c,f,h,p=r(33940),d=r(97860),v=r(7620),g=r(39695),y=r(72736),m=(0,p.Z)(),x={point:b,lineStart:w,lineEnd:T,polygonStart:function(){x.point=k,x.lineStart=A,x.lineEnd=M,m.reset(),d.gL.polygonStart()},polygonEnd:function(){d.gL.polygonEnd(),x.point=b,x.lineStart=w,x.lineEnd=T,d.L9<0?(n=-(a=180),i=-(o=90)):m>g.Ho?o=90:m<-g.Ho&&(i=-90),h[0]=n,h[1]=a},sphere:function(){n=-(a=180),i=-(o=90)}};function b(t,e){f.push(h=[n=t,a=t]),e<i&&(i=e),e>o&&(o=e)}function _(t,e){var r=(0,v.Og)([t*g.uR,e*g.uR]);if(c){var l=(0,v.T5)(c,r),u=[l[1],-l[0],0],p=(0,v.T5)(u,l);(0,v.iJ)(p),p=(0,v.Y1)(p);var d,y=t-s,m=y>0?1:-1,x=p[0]*g.RW*m,b=(0,g.Wn)(y)>180;b^(m*s<x&&x<m*t)?(d=p[1]*g.RW)>o&&(o=d):b^(m*s<(x=(x+360)%360-180)&&x<m*t)?(d=-p[1]*g.RW)<i&&(i=d):(e<i&&(i=e),e>o&&(o=e)),b?t<s?S(n,t)>S(n,a)&&(a=t):S(t,a)>S(n,a)&&(n=t):a>=n?(t<n&&(n=t),t>a&&(a=t)):t>s?S(n,t)>S(n,a)&&(a=t):S(t,a)>S(n,a)&&(n=t)}else f.push(h=[n=t,a=t]);e<i&&(i=e),e>o&&(o=e),c=r,s=t}function w(){x.point=_}function T(){h[0]=n,h[1]=a,x.point=b,c=null}function k(t,e){if(c){var r=t-s;m.add((0,g.Wn)(r)>180?r+(r>0?360:-360):r)}else l=t,u=e;d.gL.point(t,e),_(t,e)}function A(){d.gL.lineStart()}function M(){k(l,u),d.gL.lineEnd(),(0,g.Wn)(m)>g.Ho&&(n=-(a=180)),h[0]=n,h[1]=a,c=null}function S(t,e){return(e-=t)<0?e+360:e}function E(t,e){return t[0]-e[0]}function L(t,e){return t[0]<=t[1]?t[0]<=e&&e<=t[1]:e<t[0]||t[1]<e}function C(t){var e,r,s,l,u,c,p;if(o=a=-(n=i=1/0),f=[],(0,y.Z)(t,x),r=f.length){for(f.sort(E),e=1,u=[s=f[0]];e<r;++e)L(s,(l=f[e])[0])||L(s,l[1])?(S(s[0],l[1])>S(s[0],s[1])&&(s[1]=l[1]),S(l[0],s[1])>S(s[0],s[1])&&(s[0]=l[0])):u.push(s=l);for(c=-1/0,e=0,s=u[r=u.length-1];e<=r;s=l,++e)l=u[e],(p=S(s[1],l[0]))>c&&(c=p,n=l[0],a=s[1])}return f=h=null,n===1/0||i===1/0?[[NaN,NaN],[NaN,NaN]]:[[n,i],[a,o]]}},7620:function(t,e,r){\\\"use strict\\\";r.d(e,{Og:function(){return a},T:function(){return u},T5:function(){return s},Y1:function(){return i},iJ:function(){return c},j9:function(){return o},s0:function(){return l}});var n=r(39695);function i(t){return[(0,n.fv)(t[1],t[0]),(0,n.ZR)(t[2])]}function a(t){var e=t[0],r=t[1],i=(0,n.mC)(r);return[i*(0,n.mC)(e),i*(0,n.O$)(e),(0,n.O$)(r)]}function o(t,e){return t[0]*e[0]+t[1]*e[1]+t[2]*e[2]}function s(t,e){return[t[1]*e[2]-t[2]*e[1],t[2]*e[0]-t[0]*e[2],t[0]*e[1]-t[1]*e[0]]}function l(t,e){t[0]+=e[0],t[1]+=e[1],t[2]+=e[2]}function u(t,e){return[t[0]*e,t[1]*e,t[2]*e]}function c(t){var e=(0,n._b)(t[0]*t[0]+t[1]*t[1]+t[2]*t[2]);t[0]/=e,t[1]/=e,t[2]/=e}},66624:function(t,e,r){\\\"use strict\\\";r.d(e,{Z:function(){return I}});var n,i,a,o,s,l,u,c,f,h,p,d,v,g,y,m,x=r(39695),b=r(73182),_=r(72736),w={sphere:b.Z,point:T,lineStart:A,lineEnd:E,polygonStart:function(){w.lineStart=L,w.lineEnd=C},polygonEnd:function(){w.lineStart=A,w.lineEnd=E}};function T(t,e){t*=x.uR,e*=x.uR;var r=(0,x.mC)(e);k(r*(0,x.mC)(t),r*(0,x.O$)(t),(0,x.O$)(e))}function k(t,e,r){++n,a+=(t-a)/n,o+=(e-o)/n,s+=(r-s)/n}function A(){w.point=M}function M(t,e){t*=x.uR,e*=x.uR;var r=(0,x.mC)(e);g=r*(0,x.mC)(t),y=r*(0,x.O$)(t),m=(0,x.O$)(e),w.point=S,k(g,y,m)}function S(t,e){t*=x.uR,e*=x.uR;var r=(0,x.mC)(e),n=r*(0,x.mC)(t),a=r*(0,x.O$)(t),o=(0,x.O$)(e),s=(0,x.fv)((0,x._b)((s=y*o-m*a)*s+(s=m*n-g*o)*s+(s=g*a-y*n)*s),g*n+y*a+m*o);i+=s,l+=s*(g+(g=n)),u+=s*(y+(y=a)),c+=s*(m+(m=o)),k(g,y,m)}function E(){w.point=T}function L(){w.point=P}function C(){O(d,v),w.point=T}function P(t,e){d=t,v=e,t*=x.uR,e*=x.uR,w.point=O;var r=(0,x.mC)(e);g=r*(0,x.mC)(t),y=r*(0,x.O$)(t),m=(0,x.O$)(e),k(g,y,m)}function O(t,e){t*=x.uR,e*=x.uR;var r=(0,x.mC)(e),n=r*(0,x.mC)(t),a=r*(0,x.O$)(t),o=(0,x.O$)(e),s=y*o-m*a,d=m*n-g*o,v=g*a-y*n,b=(0,x._b)(s*s+d*d+v*v),_=(0,x.ZR)(b),w=b&&-_/b;f+=w*s,h+=w*d,p+=w*v,i+=_,l+=_*(g+(g=n)),u+=_*(y+(y=a)),c+=_*(m+(m=o)),k(g,y,m)}function I(t){n=i=a=o=s=l=u=c=f=h=p=0,(0,_.Z)(t,w);var e=f,r=h,d=p,v=e*e+r*r+d*d;return v<x.aW&&(e=l,r=u,d=c,i<x.Ho&&(e=a,r=o,d=s),(v=e*e+r*r+d*d)<x.aW)?[NaN,NaN]:[(0,x.fv)(r,e)*x.RW,(0,x.ZR)(d/(0,x._b)(v))*x.RW]}},7613:function(t,e,r){\\\"use strict\\\";r.d(e,{m:function(){return s},Z:function(){return u}});var n=r(7620);function i(t){return function(){return t}}var a=r(39695),o=r(49386);function s(t,e,r,i,o,s){if(r){var u=(0,a.mC)(e),c=(0,a.O$)(e),f=i*r;null==o?(o=e+i*a.BZ,s=e-f/2):(o=l(u,o),s=l(u,s),(i>0?o<s:o>s)&&(o+=i*a.BZ));for(var h,p=o;i>0?p>s:p<s;p-=f)h=(0,n.Y1)([u,-c*(0,a.mC)(p),-c*(0,a.O$)(p)]),t.point(h[0],h[1])}}function l(t,e){(e=(0,n.Og)(e))[0]-=t,(0,n.iJ)(e);var r=(0,a.Kh)(-e[1]);return((-e[2]<0?-r:r)+a.BZ-a.Ho)%a.BZ}function u(){var t,e,r=i([0,0]),n=i(90),l=i(6),u={point:function(r,n){t.push(r=e(r,n)),r[0]*=a.RW,r[1]*=a.RW}};function c(){var i=r.apply(this,arguments),c=n.apply(this,arguments)*a.uR,f=l.apply(this,arguments)*a.uR;return t=[],e=(0,o.I)(-i[0]*a.uR,-i[1]*a.uR,0).invert,s(u,c,f,1),i={type:\\\"Polygon\\\",coordinates:[t]},t=e=null,i}return c.center=function(t){return arguments.length?(r=\\\"function\\\"==typeof t?t:i([+t[0],+t[1]]),c):r},c.radius=function(t){return arguments.length?(n=\\\"function\\\"==typeof t?t:i(+t),c):n},c.precision=function(t){return arguments.length?(l=\\\"function\\\"==typeof t?t:i(+t),c):l},c}},87070:function(t,e,r){\\\"use strict\\\";var n=r(97023),i=r(39695);e.Z=(0,n.Z)((function(){return!0}),(function(t){var e,r=NaN,n=NaN,a=NaN;return{lineStart:function(){t.lineStart(),e=1},point:function(o,s){var l=o>0?i.pi:-i.pi,u=(0,i.Wn)(o-r);(0,i.Wn)(u-i.pi)<i.Ho?(t.point(r,n=(n+s)/2>0?i.ou:-i.ou),t.point(a,n),t.lineEnd(),t.lineStart(),t.point(l,n),t.point(o,n),e=0):a!==l&&u>=i.pi&&((0,i.Wn)(r-a)<i.Ho&&(r-=a*i.Ho),(0,i.Wn)(o-l)<i.Ho&&(o-=l*i.Ho),n=function(t,e,r,n){var a,o,s=(0,i.O$)(t-r);return(0,i.Wn)(s)>i.Ho?(0,i.z4)(((0,i.O$)(e)*(o=(0,i.mC)(n))*(0,i.O$)(r)-(0,i.O$)(n)*(a=(0,i.mC)(e))*(0,i.O$)(t))/(a*o*s)):(e+n)/2}(r,n,o,s),t.point(a,n),t.lineEnd(),t.lineStart(),t.point(l,n),e=0),t.point(r=o,n=s),a=l},lineEnd:function(){t.lineEnd(),r=n=NaN},clean:function(){return 2-e}}}),(function(t,e,r,n){var a;if(null==t)a=r*i.ou,n.point(-i.pi,a),n.point(0,a),n.point(i.pi,a),n.point(i.pi,0),n.point(i.pi,-a),n.point(0,-a),n.point(-i.pi,-a),n.point(-i.pi,0),n.point(-i.pi,a);else if((0,i.Wn)(t[0]-e[0])>i.Ho){var o=t[0]<e[0]?i.pi:-i.pi;a=r*o/2,n.point(-o,a),n.point(0,a),n.point(o,a)}else n.point(e[0],e[1])}),[-i.pi,-i.ou])},85272:function(t,e,r){\\\"use strict\\\";r.d(e,{Z:function(){return i}});var n=r(73182);function i(){var t,e=[];return{point:function(e,r,n){t.push([e,r,n])},lineStart:function(){e.push(t=[])},lineEnd:n.Z,rejoin:function(){e.length>1&&e.push(e.pop().concat(e.shift()))},result:function(){var r=e;return e=[],t=null,r}}}},1457:function(t,e,r){\\\"use strict\\\";r.d(e,{Z:function(){return l}});var n=r(7620),i=r(7613),a=r(39695),o=r(67108),s=r(97023);function l(t){var e=(0,a.mC)(t),r=6*a.uR,l=e>0,u=(0,a.Wn)(e)>a.Ho;function c(t,r){return(0,a.mC)(t)*(0,a.mC)(r)>e}function f(t,r,i){var o=(0,n.Og)(t),s=(0,n.Og)(r),l=[1,0,0],u=(0,n.T5)(o,s),c=(0,n.j9)(u,u),f=u[0],h=c-f*f;if(!h)return!i&&t;var p=e*c/h,d=-e*f/h,v=(0,n.T5)(l,u),g=(0,n.T)(l,p),y=(0,n.T)(u,d);(0,n.s0)(g,y);var m=v,x=(0,n.j9)(g,m),b=(0,n.j9)(m,m),_=x*x-b*((0,n.j9)(g,g)-1);if(!(_<0)){var w=(0,a._b)(_),T=(0,n.T)(m,(-x-w)/b);if((0,n.s0)(T,g),T=(0,n.Y1)(T),!i)return T;var k,A=t[0],M=r[0],S=t[1],E=r[1];M<A&&(k=A,A=M,M=k);var L=M-A,C=(0,a.Wn)(L-a.pi)<a.Ho;if(!C&&E<S&&(k=S,S=E,E=k),C||L<a.Ho?C?S+E>0^T[1]<((0,a.Wn)(T[0]-A)<a.Ho?S:E):S<=T[1]&&T[1]<=E:L>a.pi^(A<=T[0]&&T[0]<=M)){var P=(0,n.T)(m,(-x+w)/b);return(0,n.s0)(P,g),[T,(0,n.Y1)(P)]}}}function h(e,r){var n=l?t:a.pi-t,i=0;return e<-n?i|=1:e>n&&(i|=2),r<-n?i|=4:r>n&&(i|=8),i}return(0,s.Z)(c,(function(t){var e,r,n,i,s;return{lineStart:function(){i=n=!1,s=1},point:function(p,d){var v,g=[p,d],y=c(p,d),m=l?y?0:h(p,d):y?h(p+(p<0?a.pi:-a.pi),d):0;if(!e&&(i=n=y)&&t.lineStart(),y!==n&&(!(v=f(e,g))||(0,o.Z)(e,v)||(0,o.Z)(g,v))&&(g[2]=1),y!==n)s=0,y?(t.lineStart(),v=f(g,e),t.point(v[0],v[1])):(v=f(e,g),t.point(v[0],v[1],2),t.lineEnd()),e=v;else if(u&&e&&l^y){var x;m&r||!(x=f(g,e,!0))||(s=0,l?(t.lineStart(),t.point(x[0][0],x[0][1]),t.point(x[1][0],x[1][1]),t.lineEnd()):(t.point(x[1][0],x[1][1]),t.lineEnd(),t.lineStart(),t.point(x[0][0],x[0][1],3)))}!y||e&&(0,o.Z)(e,g)||t.point(g[0],g[1]),e=g,n=y,r=m},lineEnd:function(){n&&t.lineEnd(),e=null},clean:function(){return s|(i&&n)<<1}}}),(function(e,n,a,o){(0,i.m)(o,t,r,a,e,n)}),l?[0,-t]:[-a.pi,t-a.pi])}},97023:function(t,e,r){\\\"use strict\\\";r.d(e,{Z:function(){return l}});var n=r(85272),i=r(46225),a=r(39695),o=r(23071),s=r(33064);function l(t,e,r,a){return function(l){var f,h,p,d=e(l),v=(0,n.Z)(),g=e(v),y=!1,m={point:x,lineStart:_,lineEnd:w,polygonStart:function(){m.point=T,m.lineStart=k,m.lineEnd=A,h=[],f=[]},polygonEnd:function(){m.point=x,m.lineStart=_,m.lineEnd=w,h=(0,s.TS)(h);var t=(0,o.Z)(f,a);h.length?(y||(l.polygonStart(),y=!0),(0,i.Z)(h,c,t,r,l)):t&&(y||(l.polygonStart(),y=!0),l.lineStart(),r(null,null,1,l),l.lineEnd()),y&&(l.polygonEnd(),y=!1),h=f=null},sphere:function(){l.polygonStart(),l.lineStart(),r(null,null,1,l),l.lineEnd(),l.polygonEnd()}};function x(e,r){t(e,r)&&l.point(e,r)}function b(t,e){d.point(t,e)}function _(){m.point=b,d.lineStart()}function w(){m.point=x,d.lineEnd()}function T(t,e){p.push([t,e]),g.point(t,e)}function k(){g.lineStart(),p=[]}function A(){T(p[0][0],p[0][1]),g.lineEnd();var t,e,r,n,i=g.clean(),a=v.result(),o=a.length;if(p.pop(),f.push(p),p=null,o)if(1&i){if((e=(r=a[0]).length-1)>0){for(y||(l.polygonStart(),y=!0),l.lineStart(),t=0;t<e;++t)l.point((n=r[t])[0],n[1]);l.lineEnd()}}else o>1&&2&i&&a.push(a.pop().concat(a.shift())),h.push(a.filter(u))}return m}}function u(t){return t.length>1}function c(t,e){return((t=t.x)[0]<0?t[1]-a.ou-a.Ho:a.ou-t[1])-((e=e.x)[0]<0?e[1]-a.ou-a.Ho:a.ou-e[1])}},87605:function(t,e,r){\\\"use strict\\\";r.d(e,{Z:function(){return u}});var n=r(39695),i=r(85272),a=r(46225),o=r(33064),s=1e9,l=-s;function u(t,e,r,u){function c(n,i){return t<=n&&n<=r&&e<=i&&i<=u}function f(n,i,a,o){var s=0,l=0;if(null==n||(s=h(n,a))!==(l=h(i,a))||d(n,i)<0^a>0)do{o.point(0===s||3===s?t:r,s>1?u:e)}while((s=(s+a+4)%4)!==l);else o.point(i[0],i[1])}function h(i,a){return(0,n.Wn)(i[0]-t)<n.Ho?a>0?0:3:(0,n.Wn)(i[0]-r)<n.Ho?a>0?2:1:(0,n.Wn)(i[1]-e)<n.Ho?a>0?1:0:a>0?3:2}function p(t,e){return d(t.x,e.x)}function d(t,e){var r=h(t,1),n=h(e,1);return r!==n?r-n:0===r?e[1]-t[1]:1===r?t[0]-e[0]:2===r?t[1]-e[1]:e[0]-t[0]}return function(n){var h,d,v,g,y,m,x,b,_,w,T,k=n,A=(0,i.Z)(),M={point:S,lineStart:function(){M.point=E,d&&d.push(v=[]),w=!0,_=!1,x=b=NaN},lineEnd:function(){h&&(E(g,y),m&&_&&A.rejoin(),h.push(A.result())),M.point=S,_&&k.lineEnd()},polygonStart:function(){k=A,h=[],d=[],T=!0},polygonEnd:function(){var e=function(){for(var e=0,r=0,n=d.length;r<n;++r)for(var i,a,o=d[r],s=1,l=o.length,c=o[0],f=c[0],h=c[1];s<l;++s)i=f,a=h,f=(c=o[s])[0],h=c[1],a<=u?h>u&&(f-i)*(u-a)>(h-a)*(t-i)&&++e:h<=u&&(f-i)*(u-a)<(h-a)*(t-i)&&--e;return e}(),r=T&&e,i=(h=(0,o.TS)(h)).length;(r||i)&&(n.polygonStart(),r&&(n.lineStart(),f(null,null,1,n),n.lineEnd()),i&&(0,a.Z)(h,p,e,f,n),n.polygonEnd()),k=n,h=d=v=null}};function S(t,e){c(t,e)&&k.point(t,e)}function E(n,i){var a=c(n,i);if(d&&v.push([n,i]),w)g=n,y=i,m=a,w=!1,a&&(k.lineStart(),k.point(n,i));else if(a&&_)k.point(n,i);else{var o=[x=Math.max(l,Math.min(s,x)),b=Math.max(l,Math.min(s,b))],f=[n=Math.max(l,Math.min(s,n)),i=Math.max(l,Math.min(s,i))];!function(t,e,r,n,i,a){var o,s=t[0],l=t[1],u=0,c=1,f=e[0]-s,h=e[1]-l;if(o=r-s,f||!(o>0)){if(o/=f,f<0){if(o<u)return;o<c&&(c=o)}else if(f>0){if(o>c)return;o>u&&(u=o)}if(o=i-s,f||!(o<0)){if(o/=f,f<0){if(o>c)return;o>u&&(u=o)}else if(f>0){if(o<u)return;o<c&&(c=o)}if(o=n-l,h||!(o>0)){if(o/=h,h<0){if(o<u)return;o<c&&(c=o)}else if(h>0){if(o>c)return;o>u&&(u=o)}if(o=a-l,h||!(o<0)){if(o/=h,h<0){if(o>c)return;o>u&&(u=o)}else if(h>0){if(o<u)return;o<c&&(c=o)}return u>0&&(t[0]=s+u*f,t[1]=l+u*h),c<1&&(e[0]=s+c*f,e[1]=l+c*h),!0}}}}}(o,f,t,e,r,u)?a&&(k.lineStart(),k.point(n,i),T=!1):(_||(k.lineStart(),k.point(o[0],o[1])),k.point(f[0],f[1]),a||k.lineEnd(),T=!1)}x=n,b=i,_=a}return M}}},46225:function(t,e,r){\\\"use strict\\\";r.d(e,{Z:function(){return o}});var n=r(67108),i=r(39695);function a(t,e,r,n){this.x=t,this.z=e,this.o=r,this.e=n,this.v=!1,this.n=this.p=null}function o(t,e,r,o,l){var u,c,f=[],h=[];if(t.forEach((function(t){if(!((e=t.length-1)<=0)){var e,r,o=t[0],s=t[e];if((0,n.Z)(o,s)){if(!o[2]&&!s[2]){for(l.lineStart(),u=0;u<e;++u)l.point((o=t[u])[0],o[1]);return void l.lineEnd()}s[0]+=2*i.Ho}f.push(r=new a(o,t,null,!0)),h.push(r.o=new a(o,null,r,!1)),f.push(r=new a(s,t,null,!1)),h.push(r.o=new a(s,null,r,!0))}})),f.length){for(h.sort(e),s(f),s(h),u=0,c=h.length;u<c;++u)h[u].e=r=!r;for(var p,d,v=f[0];;){for(var g=v,y=!0;g.v;)if((g=g.n)===v)return;p=g.z,l.lineStart();do{if(g.v=g.o.v=!0,g.e){if(y)for(u=0,c=p.length;u<c;++u)l.point((d=p[u])[0],d[1]);else o(g.x,g.n.x,1,l);g=g.n}else{if(y)for(p=g.p.z,u=p.length-1;u>=0;--u)l.point((d=p[u])[0],d[1]);else o(g.x,g.p.x,-1,l);g=g.p}p=(g=g.o).z,y=!y}while(!g.v);l.lineEnd()}}}function s(t){if(e=t.length){for(var e,r,n=0,i=t[0];++n<e;)i.n=r=t[n],r.p=i,i=r;i.n=r=t[0],r.p=i}}},96059:function(t,e,r){\\\"use strict\\\";function n(t,e){function r(r,n){return r=t(r,n),e(r[0],r[1])}return t.invert&&e.invert&&(r.invert=function(r,n){return(r=e.invert(r,n))&&t.invert(r[0],r[1])}),r}r.d(e,{Z:function(){return n}})},8593:function(t,e,r){\\\"use strict\\\";function n(t){return t}r.d(e,{Z:function(){return n}})},27362:function(t,e,r){\\\"use strict\\\";r.r(e),r.d(e,{geoAlbers:function(){return Gt},geoAlbersUsa:function(){return Yt},geoArea:function(){return n.ZP},geoAzimuthalEqualArea:function(){return Wt.Z},geoAzimuthalEqualAreaRaw:function(){return Wt.l},geoAzimuthalEquidistant:function(){return Xt.Z},geoAzimuthalEquidistantRaw:function(){return Xt.N},geoBounds:function(){return i.Z},geoCentroid:function(){return a.Z},geoCircle:function(){return o.Z},geoClipAntimeridian:function(){return s.Z},geoClipCircle:function(){return l.Z},geoClipExtent:function(){return c},geoClipRectangle:function(){return u.Z},geoConicConformal:function(){return re},geoConicConformalRaw:function(){return ee},geoConicEqualArea:function(){return qt},geoConicEqualAreaRaw:function(){return Ht},geoConicEquidistant:function(){return ae},geoConicEquidistantRaw:function(){return ie},geoContains:function(){return R},geoDistance:function(){return S},geoEqualEarth:function(){return he},geoEqualEarthRaw:function(){return fe},geoEquirectangular:function(){return ne.Z},geoEquirectangularRaw:function(){return ne.k},geoGnomonic:function(){return pe.Z},geoGnomonicRaw:function(){return pe.M},geoGraticule:function(){return j},geoGraticule10:function(){return U},geoIdentity:function(){return ve},geoInterpolate:function(){return Z.Z},geoLength:function(){return k},geoMercator:function(){return $t},geoMercatorRaw:function(){return Kt},geoNaturalEarth1:function(){return ge.Z},geoNaturalEarth1Raw:function(){return ge.K},geoOrthographic:function(){return ye.Z},geoOrthographicRaw:function(){return ye.I},geoPath:function(){return jt},geoProjection:function(){return Ut.Z},geoProjectionMutator:function(){return Ut.r},geoRotation:function(){return Jt.Z},geoStereographic:function(){return be},geoStereographicRaw:function(){return xe},geoStream:function(){return m.Z},geoTransform:function(){return de.Z},geoTransverseMercator:function(){return we},geoTransverseMercatorRaw:function(){return _e}});var n=r(97860),i=r(77338),a=r(66624),o=r(7613),s=r(87070),l=r(1457),u=r(87605);function c(){var t,e,r,n=0,i=0,a=960,o=500;return r={stream:function(r){return t&&e===r?t:t=(0,u.Z)(n,i,a,o)(e=r)},extent:function(s){return arguments.length?(n=+s[0][0],i=+s[0][1],a=+s[1][0],o=+s[1][1],t=e=null,r):[[n,i],[a,o]]}}}var f,h,p,d=r(23071),v=r(33940),g=r(39695),y=r(73182),m=r(72736),x=(0,v.Z)(),b={sphere:y.Z,point:y.Z,lineStart:function(){b.point=w,b.lineEnd=_},lineEnd:y.Z,polygonStart:y.Z,polygonEnd:y.Z};function _(){b.point=b.lineEnd=y.Z}function w(t,e){t*=g.uR,e*=g.uR,f=t,h=(0,g.O$)(e),p=(0,g.mC)(e),b.point=T}function T(t,e){t*=g.uR,e*=g.uR;var r=(0,g.O$)(e),n=(0,g.mC)(e),i=(0,g.Wn)(t-f),a=(0,g.mC)(i),o=n*(0,g.O$)(i),s=p*r-h*n*a,l=h*r+p*n*a;x.add((0,g.fv)((0,g._b)(o*o+s*s),l)),f=t,h=r,p=n}function k(t){return x.reset(),(0,m.Z)(t,b),+x}var A=[null,null],M={type:\\\"LineString\\\",coordinates:A};function S(t,e){return A[0]=t,A[1]=e,k(M)}var E={Feature:function(t,e){return C(t.geometry,e)},FeatureCollection:function(t,e){for(var r=t.features,n=-1,i=r.length;++n<i;)if(C(r[n].geometry,e))return!0;return!1}},L={Sphere:function(){return!0},Point:function(t,e){return P(t.coordinates,e)},MultiPoint:function(t,e){for(var r=t.coordinates,n=-1,i=r.length;++n<i;)if(P(r[n],e))return!0;return!1},LineString:function(t,e){return O(t.coordinates,e)},MultiLineString:function(t,e){for(var r=t.coordinates,n=-1,i=r.length;++n<i;)if(O(r[n],e))return!0;return!1},Polygon:function(t,e){return I(t.coordinates,e)},MultiPolygon:function(t,e){for(var r=t.coordinates,n=-1,i=r.length;++n<i;)if(I(r[n],e))return!0;return!1},GeometryCollection:function(t,e){for(var r=t.geometries,n=-1,i=r.length;++n<i;)if(C(r[n],e))return!0;return!1}};function C(t,e){return!(!t||!L.hasOwnProperty(t.type))&&L[t.type](t,e)}function P(t,e){return 0===S(t,e)}function O(t,e){for(var r,n,i,a=0,o=t.length;a<o;a++){if(0===(n=S(t[a],e)))return!0;if(a>0&&(i=S(t[a],t[a-1]))>0&&r<=i&&n<=i&&(r+n-i)*(1-Math.pow((r-n)/i,2))<g.aW*i)return!0;r=n}return!1}function I(t,e){return!!(0,d.Z)(t.map(D),z(e))}function D(t){return(t=t.map(z)).pop(),t}function z(t){return[t[0]*g.uR,t[1]*g.uR]}function R(t,e){return(t&&E.hasOwnProperty(t.type)?E[t.type]:C)(t,e)}var F=r(33064);function B(t,e,r){var n=(0,F.w6)(t,e-g.Ho,r).concat(e);return function(t){return n.map((function(e){return[t,e]}))}}function N(t,e,r){var n=(0,F.w6)(t,e-g.Ho,r).concat(e);return function(t){return n.map((function(e){return[e,t]}))}}function j(){var t,e,r,n,i,a,o,s,l,u,c,f,h=10,p=h,d=90,v=360,y=2.5;function m(){return{type:\\\"MultiLineString\\\",coordinates:x()}}function x(){return(0,F.w6)((0,g.mD)(n/d)*d,r,d).map(c).concat((0,F.w6)((0,g.mD)(s/v)*v,o,v).map(f)).concat((0,F.w6)((0,g.mD)(e/h)*h,t,h).filter((function(t){return(0,g.Wn)(t%d)>g.Ho})).map(l)).concat((0,F.w6)((0,g.mD)(a/p)*p,i,p).filter((function(t){return(0,g.Wn)(t%v)>g.Ho})).map(u))}return m.lines=function(){return x().map((function(t){return{type:\\\"LineString\\\",coordinates:t}}))},m.outline=function(){return{type:\\\"Polygon\\\",coordinates:[c(n).concat(f(o).slice(1),c(r).reverse().slice(1),f(s).reverse().slice(1))]}},m.extent=function(t){return arguments.length?m.extentMajor(t).extentMinor(t):m.extentMinor()},m.extentMajor=function(t){return arguments.length?(n=+t[0][0],r=+t[1][0],s=+t[0][1],o=+t[1][1],n>r&&(t=n,n=r,r=t),s>o&&(t=s,s=o,o=t),m.precision(y)):[[n,s],[r,o]]},m.extentMinor=function(r){return arguments.length?(e=+r[0][0],t=+r[1][0],a=+r[0][1],i=+r[1][1],e>t&&(r=e,e=t,t=r),a>i&&(r=a,a=i,i=r),m.precision(y)):[[e,a],[t,i]]},m.step=function(t){return arguments.length?m.stepMajor(t).stepMinor(t):m.stepMinor()},m.stepMajor=function(t){return arguments.length?(d=+t[0],v=+t[1],m):[d,v]},m.stepMinor=function(t){return arguments.length?(h=+t[0],p=+t[1],m):[h,p]},m.precision=function(h){return arguments.length?(y=+h,l=B(a,i,90),u=N(e,t,y),c=B(s,o,90),f=N(n,r,y),m):y},m.extentMajor([[-180,-90+g.Ho],[180,90-g.Ho]]).extentMinor([[-180,-80-g.Ho],[180,80+g.Ho]])}function U(){return j()()}var V,H,q,G,Z=r(83074),Y=r(8593),W=(0,v.Z)(),X=(0,v.Z)(),J={point:y.Z,lineStart:y.Z,lineEnd:y.Z,polygonStart:function(){J.lineStart=K,J.lineEnd=tt},polygonEnd:function(){J.lineStart=J.lineEnd=J.point=y.Z,W.add((0,g.Wn)(X)),X.reset()},result:function(){var t=W/2;return W.reset(),t}};function K(){J.point=$}function $(t,e){J.point=Q,V=q=t,H=G=e}function Q(t,e){X.add(G*t-q*e),q=t,G=e}function tt(){Q(V,H)}var et,rt,nt,it,at=J,ot=r(3559),st=0,lt=0,ut=0,ct=0,ft=0,ht=0,pt=0,dt=0,vt=0,gt={point:yt,lineStart:mt,lineEnd:_t,polygonStart:function(){gt.lineStart=wt,gt.lineEnd=Tt},polygonEnd:function(){gt.point=yt,gt.lineStart=mt,gt.lineEnd=_t},result:function(){var t=vt?[pt/vt,dt/vt]:ht?[ct/ht,ft/ht]:ut?[st/ut,lt/ut]:[NaN,NaN];return st=lt=ut=ct=ft=ht=pt=dt=vt=0,t}};function yt(t,e){st+=t,lt+=e,++ut}function mt(){gt.point=xt}function xt(t,e){gt.point=bt,yt(nt=t,it=e)}function bt(t,e){var r=t-nt,n=e-it,i=(0,g._b)(r*r+n*n);ct+=i*(nt+t)/2,ft+=i*(it+e)/2,ht+=i,yt(nt=t,it=e)}function _t(){gt.point=yt}function wt(){gt.point=kt}function Tt(){At(et,rt)}function kt(t,e){gt.point=At,yt(et=nt=t,rt=it=e)}function At(t,e){var r=t-nt,n=e-it,i=(0,g._b)(r*r+n*n);ct+=i*(nt+t)/2,ft+=i*(it+e)/2,ht+=i,pt+=(i=it*t-nt*e)*(nt+t),dt+=i*(it+e),vt+=3*i,yt(nt=t,it=e)}var Mt=gt;function St(t){this._context=t}St.prototype={_radius:4.5,pointRadius:function(t){return this._radius=t,this},polygonStart:function(){this._line=0},polygonEnd:function(){this._line=NaN},lineStart:function(){this._point=0},lineEnd:function(){0===this._line&&this._context.closePath(),this._point=NaN},point:function(t,e){switch(this._point){case 0:this._context.moveTo(t,e),this._point=1;break;case 1:this._context.lineTo(t,e);break;default:this._context.moveTo(t+this._radius,e),this._context.arc(t,e,this._radius,0,g.BZ)}},result:y.Z};var Et,Lt,Ct,Pt,Ot,It=(0,v.Z)(),Dt={point:y.Z,lineStart:function(){Dt.point=zt},lineEnd:function(){Et&&Rt(Lt,Ct),Dt.point=y.Z},polygonStart:function(){Et=!0},polygonEnd:function(){Et=null},result:function(){var t=+It;return It.reset(),t}};function zt(t,e){Dt.point=Rt,Lt=Pt=t,Ct=Ot=e}function Rt(t,e){Pt-=t,Ot-=e,It.add((0,g._b)(Pt*Pt+Ot*Ot)),Pt=t,Ot=e}var Ft=Dt;function Bt(){this._string=[]}function Nt(t){return\\\"m0,\\\"+t+\\\"a\\\"+t+\\\",\\\"+t+\\\" 0 1,1 0,\\\"+-2*t+\\\"a\\\"+t+\\\",\\\"+t+\\\" 0 1,1 0,\\\"+2*t+\\\"z\\\"}function jt(t,e){var r,n,i=4.5;function a(t){return t&&(\\\"function\\\"==typeof i&&n.pointRadius(+i.apply(this,arguments)),(0,m.Z)(t,r(n))),n.result()}return a.area=function(t){return(0,m.Z)(t,r(at)),at.result()},a.measure=function(t){return(0,m.Z)(t,r(Ft)),Ft.result()},a.bounds=function(t){return(0,m.Z)(t,r(ot.Z)),ot.Z.result()},a.centroid=function(t){return(0,m.Z)(t,r(Mt)),Mt.result()},a.projection=function(e){return arguments.length?(r=null==e?(t=null,Y.Z):(t=e).stream,a):t},a.context=function(t){return arguments.length?(n=null==t?(e=null,new Bt):new St(e=t),\\\"function\\\"!=typeof i&&n.pointRadius(i),a):e},a.pointRadius=function(t){return arguments.length?(i=\\\"function\\\"==typeof t?t:(n.pointRadius(+t),+t),a):i},a.projection(t).context(e)}Bt.prototype={_radius:4.5,_circle:Nt(4.5),pointRadius:function(t){return(t=+t)!==this._radius&&(this._radius=t,this._circle=null),this},polygonStart:function(){this._line=0},polygonEnd:function(){this._line=NaN},lineStart:function(){this._point=0},lineEnd:function(){0===this._line&&this._string.push(\\\"Z\\\"),this._point=NaN},point:function(t,e){switch(this._point){case 0:this._string.push(\\\"M\\\",t,\\\",\\\",e),this._point=1;break;case 1:this._string.push(\\\"L\\\",t,\\\",\\\",e);break;default:null==this._circle&&(this._circle=Nt(this._radius)),this._string.push(\\\"M\\\",t,\\\",\\\",e,this._circle)}},result:function(){if(this._string.length){var t=this._string.join(\\\"\\\");return this._string=[],t}return null}};var Ut=r(15002);function Vt(t){var e=0,r=g.pi/3,n=(0,Ut.r)(t),i=n(e,r);return i.parallels=function(t){return arguments.length?n(e=t[0]*g.uR,r=t[1]*g.uR):[e*g.RW,r*g.RW]},i}function Ht(t,e){var r=(0,g.O$)(t),n=(r+(0,g.O$)(e))/2;if((0,g.Wn)(n)<g.Ho)return function(t){var e=(0,g.mC)(t);function r(t,r){return[t*e,(0,g.O$)(r)/e]}return r.invert=function(t,r){return[t/e,(0,g.ZR)(r*e)]},r}(t);var i=1+r*(2*n-r),a=(0,g._b)(i)/n;function o(t,e){var r=(0,g._b)(i-2*n*(0,g.O$)(e))/n;return[r*(0,g.O$)(t*=n),a-r*(0,g.mC)(t)]}return o.invert=function(t,e){var r=a-e,o=(0,g.fv)(t,(0,g.Wn)(r))*(0,g.Xx)(r);return r*n<0&&(o-=g.pi*(0,g.Xx)(t)*(0,g.Xx)(r)),[o/n,(0,g.ZR)((i-(t*t+r*r)*n*n)/(2*n))]},o}function qt(){return Vt(Ht).scale(155.424).center([0,33.6442])}function Gt(){return qt().parallels([29.5,45.5]).scale(1070).translate([480,250]).rotate([96,0]).center([-.6,38.7])}var Zt=r(47589);function Yt(){var t,e,r,n,i,a,o=Gt(),s=qt().rotate([154,0]).center([-2,58.5]).parallels([55,65]),l=qt().rotate([157,0]).center([-3,19.9]).parallels([8,18]),u={point:function(t,e){a=[t,e]}};function c(t){var e=t[0],o=t[1];return a=null,r.point(e,o),a||(n.point(e,o),a)||(i.point(e,o),a)}function f(){return t=e=null,c}return c.invert=function(t){var e=o.scale(),r=o.translate(),n=(t[0]-r[0])/e,i=(t[1]-r[1])/e;return(i>=.12&&i<.234&&n>=-.425&&n<-.214?s:i>=.166&&i<.234&&n>=-.214&&n<-.115?l:o).invert(t)},c.stream=function(r){return t&&e===r?t:(n=[o.stream(e=r),s.stream(r),l.stream(r)],i=n.length,t={point:function(t,e){for(var r=-1;++r<i;)n[r].point(t,e)},sphere:function(){for(var t=-1;++t<i;)n[t].sphere()},lineStart:function(){for(var t=-1;++t<i;)n[t].lineStart()},lineEnd:function(){for(var t=-1;++t<i;)n[t].lineEnd()},polygonStart:function(){for(var t=-1;++t<i;)n[t].polygonStart()},polygonEnd:function(){for(var t=-1;++t<i;)n[t].polygonEnd()}});var n,i},c.precision=function(t){return arguments.length?(o.precision(t),s.precision(t),l.precision(t),f()):o.precision()},c.scale=function(t){return arguments.length?(o.scale(t),s.scale(.35*t),l.scale(t),c.translate(o.translate())):o.scale()},c.translate=function(t){if(!arguments.length)return o.translate();var e=o.scale(),a=+t[0],c=+t[1];return r=o.translate(t).clipExtent([[a-.455*e,c-.238*e],[a+.455*e,c+.238*e]]).stream(u),n=s.translate([a-.307*e,c+.201*e]).clipExtent([[a-.425*e+g.Ho,c+.12*e+g.Ho],[a-.214*e-g.Ho,c+.234*e-g.Ho]]).stream(u),i=l.translate([a-.205*e,c+.212*e]).clipExtent([[a-.214*e+g.Ho,c+.166*e+g.Ho],[a-.115*e-g.Ho,c+.234*e-g.Ho]]).stream(u),f()},c.fitExtent=function(t,e){return(0,Zt.qg)(c,t,e)},c.fitSize=function(t,e){return(0,Zt.mF)(c,t,e)},c.fitWidth=function(t,e){return(0,Zt.V6)(c,t,e)},c.fitHeight=function(t,e){return(0,Zt.rf)(c,t,e)},c.scale(1070)}var Wt=r(12956),Xt=r(17889),Jt=r(49386);function Kt(t,e){return[t,(0,g.cM)((0,g.OR)((g.ou+e)/2))]}function $t(){return Qt(Kt).scale(961/g.BZ)}function Qt(t){var e,r,n,i=(0,Ut.Z)(t),a=i.center,o=i.scale,s=i.translate,l=i.clipExtent,u=null;function c(){var a=g.pi*o(),s=i((0,Jt.Z)(i.rotate()).invert([0,0]));return l(null==u?[[s[0]-a,s[1]-a],[s[0]+a,s[1]+a]]:t===Kt?[[Math.max(s[0]-a,u),e],[Math.min(s[0]+a,r),n]]:[[u,Math.max(s[1]-a,e)],[r,Math.min(s[1]+a,n)]])}return i.scale=function(t){return arguments.length?(o(t),c()):o()},i.translate=function(t){return arguments.length?(s(t),c()):s()},i.center=function(t){return arguments.length?(a(t),c()):a()},i.clipExtent=function(t){return arguments.length?(null==t?u=e=r=n=null:(u=+t[0][0],e=+t[0][1],r=+t[1][0],n=+t[1][1]),c()):null==u?null:[[u,e],[r,n]]},c()}function te(t){return(0,g.OR)((g.ou+t)/2)}function ee(t,e){var r=(0,g.mC)(t),n=t===e?(0,g.O$)(t):(0,g.cM)(r/(0,g.mC)(e))/(0,g.cM)(te(e)/te(t)),i=r*(0,g.sQ)(te(t),n)/n;if(!n)return Kt;function a(t,e){i>0?e<-g.ou+g.Ho&&(e=-g.ou+g.Ho):e>g.ou-g.Ho&&(e=g.ou-g.Ho);var r=i/(0,g.sQ)(te(e),n);return[r*(0,g.O$)(n*t),i-r*(0,g.mC)(n*t)]}return a.invert=function(t,e){var r=i-e,a=(0,g.Xx)(n)*(0,g._b)(t*t+r*r),o=(0,g.fv)(t,(0,g.Wn)(r))*(0,g.Xx)(r);return r*n<0&&(o-=g.pi*(0,g.Xx)(t)*(0,g.Xx)(r)),[o/n,2*(0,g.z4)((0,g.sQ)(i/a,1/n))-g.ou]},a}function re(){return Vt(ee).scale(109.5).parallels([30,30])}Kt.invert=function(t,e){return[t,2*(0,g.z4)((0,g.Qq)(e))-g.ou]};var ne=r(97492);function ie(t,e){var r=(0,g.mC)(t),n=t===e?(0,g.O$)(t):(r-(0,g.mC)(e))/(e-t),i=r/n+t;if((0,g.Wn)(n)<g.Ho)return ne.k;function a(t,e){var r=i-e,a=n*t;return[r*(0,g.O$)(a),i-r*(0,g.mC)(a)]}return a.invert=function(t,e){var r=i-e,a=(0,g.fv)(t,(0,g.Wn)(r))*(0,g.Xx)(r);return r*n<0&&(a-=g.pi*(0,g.Xx)(t)*(0,g.Xx)(r)),[a/n,i-(0,g.Xx)(n)*(0,g._b)(t*t+r*r)]},a}function ae(){return Vt(ie).scale(131.154).center([0,13.9389])}var oe=1.340264,se=-.081106,le=893e-6,ue=.003796,ce=(0,g._b)(3)/2;function fe(t,e){var r=(0,g.ZR)(ce*(0,g.O$)(e)),n=r*r,i=n*n*n;return[t*(0,g.mC)(r)/(ce*(oe+3*se*n+i*(7*le+9*ue*n))),r*(oe+se*n+i*(le+ue*n))]}function he(){return(0,Ut.Z)(fe).scale(177.158)}fe.invert=function(t,e){for(var r,n=e,i=n*n,a=i*i*i,o=0;o<12&&(a=(i=(n-=r=(n*(oe+se*i+a*(le+ue*i))-e)/(oe+3*se*i+a*(7*le+9*ue*i)))*n)*i*i,!((0,g.Wn)(r)<g.aW));++o);return[ce*t*(oe+3*se*i+a*(7*le+9*ue*i))/(0,g.mC)(n),(0,g.ZR)((0,g.O$)(n)/ce)]};var pe=r(98936),de=r(64684);function ve(){var t,e,r,n,i,a,o,s=1,l=0,c=0,f=1,h=1,p=0,d=null,v=1,y=1,m=(0,de.l)({point:function(t,e){var r=_([t,e]);this.stream.point(r[0],r[1])}}),x=Y.Z;function b(){return v=s*f,y=s*h,a=o=null,_}function _(r){var n=r[0]*v,i=r[1]*y;if(p){var a=i*t-n*e;n=n*t+i*e,i=a}return[n+l,i+c]}return _.invert=function(r){var n=r[0]-l,i=r[1]-c;if(p){var a=i*t+n*e;n=n*t-i*e,i=a}return[n/v,i/y]},_.stream=function(t){return a&&o===t?a:a=m(x(o=t))},_.postclip=function(t){return arguments.length?(x=t,d=r=n=i=null,b()):x},_.clipExtent=function(t){return arguments.length?(x=null==t?(d=r=n=i=null,Y.Z):(0,u.Z)(d=+t[0][0],r=+t[0][1],n=+t[1][0],i=+t[1][1]),b()):null==d?null:[[d,r],[n,i]]},_.scale=function(t){return arguments.length?(s=+t,b()):s},_.translate=function(t){return arguments.length?(l=+t[0],c=+t[1],b()):[l,c]},_.angle=function(r){return arguments.length?(p=r%360*g.uR,e=(0,g.O$)(p),t=(0,g.mC)(p),b()):p*g.RW},_.reflectX=function(t){return arguments.length?(f=t?-1:1,b()):f<0},_.reflectY=function(t){return arguments.length?(h=t?-1:1,b()):h<0},_.fitExtent=function(t,e){return(0,Zt.qg)(_,t,e)},_.fitSize=function(t,e){return(0,Zt.mF)(_,t,e)},_.fitWidth=function(t,e){return(0,Zt.V6)(_,t,e)},_.fitHeight=function(t,e){return(0,Zt.rf)(_,t,e)},_}var ge=r(26867),ye=r(57962),me=r(25382);function xe(t,e){var r=(0,g.mC)(e),n=1+(0,g.mC)(t)*r;return[r*(0,g.O$)(t)/n,(0,g.O$)(e)/n]}function be(){return(0,Ut.Z)(xe).scale(250).clipAngle(142)}function _e(t,e){return[(0,g.cM)((0,g.OR)((g.ou+e)/2)),-t]}function we(){var t=Qt(_e),e=t.center,r=t.rotate;return t.center=function(t){return arguments.length?e([-t[1],t[0]]):[(t=e())[1],-t[0]]},t.rotate=function(t){return arguments.length?r([t[0],t[1],t.length>2?t[2]+90:90]):[(t=r())[0],t[1],t[2]-90]},r([0,0,90]).scale(159.155)}xe.invert=(0,me.O)((function(t){return 2*(0,g.z4)(t)})),_e.invert=function(t,e){return[-e,2*(0,g.z4)((0,g.Qq)(t))-g.ou]}},83074:function(t,e,r){\\\"use strict\\\";r.d(e,{Z:function(){return i}});var n=r(39695);function i(t,e){var r=t[0]*n.uR,i=t[1]*n.uR,a=e[0]*n.uR,o=e[1]*n.uR,s=(0,n.mC)(i),l=(0,n.O$)(i),u=(0,n.mC)(o),c=(0,n.O$)(o),f=s*(0,n.mC)(r),h=s*(0,n.O$)(r),p=u*(0,n.mC)(a),d=u*(0,n.O$)(a),v=2*(0,n.ZR)((0,n._b)((0,n.Jy)(o-i)+s*u*(0,n.Jy)(a-r))),g=(0,n.O$)(v),y=v?function(t){var e=(0,n.O$)(t*=v)/g,r=(0,n.O$)(v-t)/g,i=r*f+e*p,a=r*h+e*d,o=r*l+e*c;return[(0,n.fv)(a,i)*n.RW,(0,n.fv)(o,(0,n._b)(i*i+a*a))*n.RW]}:function(){return[r*n.RW,i*n.RW]};return y.distance=v,y}},39695:function(t,e,r){\\\"use strict\\\";r.d(e,{BZ:function(){return l},Ho:function(){return n},Jy:function(){return A},Kh:function(){return T},O$:function(){return x},OR:function(){return w},Qq:function(){return g},RW:function(){return u},Wn:function(){return f},Xx:function(){return b},ZR:function(){return k},_b:function(){return _},aW:function(){return i},cM:function(){return y},fv:function(){return p},mC:function(){return d},mD:function(){return v},ou:function(){return o},pi:function(){return a},pu:function(){return s},sQ:function(){return m},uR:function(){return c},z4:function(){return h}});var n=1e-6,i=1e-12,a=Math.PI,o=a/2,s=a/4,l=2*a,u=180/a,c=a/180,f=Math.abs,h=Math.atan,p=Math.atan2,d=Math.cos,v=Math.ceil,g=Math.exp,y=(Math.floor,Math.log),m=Math.pow,x=Math.sin,b=Math.sign||function(t){return t>0?1:t<0?-1:0},_=Math.sqrt,w=Math.tan;function T(t){return t>1?0:t<-1?a:Math.acos(t)}function k(t){return t>1?o:t<-1?-o:Math.asin(t)}function A(t){return(t=x(t/2))*t}},73182:function(t,e,r){\\\"use strict\\\";function n(){}r.d(e,{Z:function(){return n}})},3559:function(t,e,r){\\\"use strict\\\";var n=r(73182),i=1/0,a=i,o=-i,s=o,l={point:function(t,e){t<i&&(i=t),t>o&&(o=t),e<a&&(a=e),e>s&&(s=e)},lineStart:n.Z,lineEnd:n.Z,polygonStart:n.Z,polygonEnd:n.Z,result:function(){var t=[[i,a],[o,s]];return o=s=-(a=i=1/0),t}};e.Z=l},67108:function(t,e,r){\\\"use strict\\\";r.d(e,{Z:function(){return i}});var n=r(39695);function i(t,e){return(0,n.Wn)(t[0]-e[0])<n.Ho&&(0,n.Wn)(t[1]-e[1])<n.Ho}},23071:function(t,e,r){\\\"use strict\\\";r.d(e,{Z:function(){return l}});var n=r(33940),i=r(7620),a=r(39695),o=(0,n.Z)();function s(t){return(0,a.Wn)(t[0])<=a.pi?t[0]:(0,a.Xx)(t[0])*(((0,a.Wn)(t[0])+a.pi)%a.BZ-a.pi)}function l(t,e){var r=s(e),n=e[1],l=(0,a.O$)(n),u=[(0,a.O$)(r),-(0,a.mC)(r),0],c=0,f=0;o.reset(),1===l?n=a.ou+a.Ho:-1===l&&(n=-a.ou-a.Ho);for(var h=0,p=t.length;h<p;++h)if(v=(d=t[h]).length)for(var d,v,g=d[v-1],y=s(g),m=g[1]/2+a.pu,x=(0,a.O$)(m),b=(0,a.mC)(m),_=0;_<v;++_,y=T,x=A,b=M,g=w){var w=d[_],T=s(w),k=w[1]/2+a.pu,A=(0,a.O$)(k),M=(0,a.mC)(k),S=T-y,E=S>=0?1:-1,L=E*S,C=L>a.pi,P=x*A;if(o.add((0,a.fv)(P*E*(0,a.O$)(L),b*M+P*(0,a.mC)(L))),c+=C?S+E*a.BZ:S,C^y>=r^T>=r){var O=(0,i.T5)((0,i.Og)(g),(0,i.Og)(w));(0,i.iJ)(O);var I=(0,i.T5)(u,O);(0,i.iJ)(I);var D=(C^S>=0?-1:1)*(0,a.ZR)(I[2]);(n>D||n===D&&(O[0]||O[1]))&&(f+=C^S>=0?1:-1)}}return(c<-a.Ho||c<a.Ho&&o<-a.Ho)^1&f}},25382:function(t,e,r){\\\"use strict\\\";r.d(e,{O:function(){return a},W:function(){return i}});var n=r(39695);function i(t){return function(e,r){var i=(0,n.mC)(e),a=(0,n.mC)(r),o=t(i*a);return[o*a*(0,n.O$)(e),o*(0,n.O$)(r)]}}function a(t){return function(e,r){var i=(0,n._b)(e*e+r*r),a=t(i),o=(0,n.O$)(a),s=(0,n.mC)(a);return[(0,n.fv)(e*o,i*s),(0,n.ZR)(i&&r*o/i)]}}},12956:function(t,e,r){\\\"use strict\\\";r.d(e,{Z:function(){return s},l:function(){return o}});var n=r(39695),i=r(25382),a=r(15002),o=(0,i.W)((function(t){return(0,n._b)(2/(1+t))}));function s(){return(0,a.Z)(o).scale(124.75).clipAngle(179.999)}o.invert=(0,i.O)((function(t){return 2*(0,n.ZR)(t/2)}))},17889:function(t,e,r){\\\"use strict\\\";r.d(e,{N:function(){return o},Z:function(){return s}});var n=r(39695),i=r(25382),a=r(15002),o=(0,i.W)((function(t){return(t=(0,n.Kh)(t))&&t/(0,n.O$)(t)}));function s(){return(0,a.Z)(o).scale(79.4188).clipAngle(179.999)}o.invert=(0,i.O)((function(t){return t}))},97492:function(t,e,r){\\\"use strict\\\";r.d(e,{Z:function(){return a},k:function(){return i}});var n=r(15002);function i(t,e){return[t,e]}function a(){return(0,n.Z)(i).scale(152.63)}i.invert=i},47589:function(t,e,r){\\\"use strict\\\";r.d(e,{V6:function(){return l},mF:function(){return s},qg:function(){return o},rf:function(){return u}});var n=r(72736),i=r(3559);function a(t,e,r){var a=t.clipExtent&&t.clipExtent();return t.scale(150).translate([0,0]),null!=a&&t.clipExtent(null),(0,n.Z)(r,t.stream(i.Z)),e(i.Z.result()),null!=a&&t.clipExtent(a),t}function o(t,e,r){return a(t,(function(r){var n=e[1][0]-e[0][0],i=e[1][1]-e[0][1],a=Math.min(n/(r[1][0]-r[0][0]),i/(r[1][1]-r[0][1])),o=+e[0][0]+(n-a*(r[1][0]+r[0][0]))/2,s=+e[0][1]+(i-a*(r[1][1]+r[0][1]))/2;t.scale(150*a).translate([o,s])}),r)}function s(t,e,r){return o(t,[[0,0],e],r)}function l(t,e,r){return a(t,(function(r){var n=+e,i=n/(r[1][0]-r[0][0]),a=(n-i*(r[1][0]+r[0][0]))/2,o=-i*r[0][1];t.scale(150*i).translate([a,o])}),r)}function u(t,e,r){return a(t,(function(r){var n=+e,i=n/(r[1][1]-r[0][1]),a=-i*r[0][0],o=(n-i*(r[1][1]+r[0][1]))/2;t.scale(150*i).translate([a,o])}),r)}},98936:function(t,e,r){\\\"use strict\\\";r.d(e,{M:function(){return o},Z:function(){return s}});var n=r(39695),i=r(25382),a=r(15002);function o(t,e){var r=(0,n.mC)(e),i=(0,n.mC)(t)*r;return[r*(0,n.O$)(t)/i,(0,n.O$)(e)/i]}function s(){return(0,a.Z)(o).scale(144.049).clipAngle(60)}o.invert=(0,i.O)(n.z4)},15002:function(t,e,r){\\\"use strict\\\";r.d(e,{Z:function(){return x},r:function(){return b}});var n=r(87070),i=r(1457),a=r(87605),o=r(96059),s=r(8593),l=r(39695),u=r(49386),c=r(64684),f=r(47589),h=r(7620),p=16,d=(0,l.mC)(30*l.uR);function v(t,e){return+e?function(t,e){function r(n,i,a,o,s,u,c,f,h,p,v,g,y,m){var x=c-n,b=f-i,_=x*x+b*b;if(_>4*e&&y--){var w=o+p,T=s+v,k=u+g,A=(0,l._b)(w*w+T*T+k*k),M=(0,l.ZR)(k/=A),S=(0,l.Wn)((0,l.Wn)(k)-1)<l.Ho||(0,l.Wn)(a-h)<l.Ho?(a+h)/2:(0,l.fv)(T,w),E=t(S,M),L=E[0],C=E[1],P=L-n,O=C-i,I=b*P-x*O;(I*I/_>e||(0,l.Wn)((x*P+b*O)/_-.5)>.3||o*p+s*v+u*g<d)&&(r(n,i,a,o,s,u,L,C,S,w/=A,T/=A,k,y,m),m.point(L,C),r(L,C,S,w,T,k,c,f,h,p,v,g,y,m))}}return function(e){var n,i,a,o,s,l,u,c,f,d,v,g,y={point:m,lineStart:x,lineEnd:_,polygonStart:function(){e.polygonStart(),y.lineStart=w},polygonEnd:function(){e.polygonEnd(),y.lineStart=x}};function m(r,n){r=t(r,n),e.point(r[0],r[1])}function x(){c=NaN,y.point=b,e.lineStart()}function b(n,i){var a=(0,h.Og)([n,i]),o=t(n,i);r(c,f,u,d,v,g,c=o[0],f=o[1],u=n,d=a[0],v=a[1],g=a[2],p,e),e.point(c,f)}function _(){y.point=m,e.lineEnd()}function w(){x(),y.point=T,y.lineEnd=k}function T(t,e){b(n=t,e),i=c,a=f,o=d,s=v,l=g,y.point=b}function k(){r(c,f,u,d,v,g,i,a,n,o,s,l,p,e),y.lineEnd=_,_()}return y}}(t,e):function(t){return(0,c.l)({point:function(e,r){e=t(e,r),this.stream.point(e[0],e[1])}})}(t)}var g=(0,c.l)({point:function(t,e){this.stream.point(t*l.uR,e*l.uR)}});function y(t,e,r,n,i){function a(a,o){return[e+t*(a*=n),r-t*(o*=i)]}return a.invert=function(a,o){return[(a-e)/t*n,(r-o)/t*i]},a}function m(t,e,r,n,i,a){var o=(0,l.mC)(a),s=(0,l.O$)(a),u=o*t,c=s*t,f=o/t,h=s/t,p=(s*r-o*e)/t,d=(s*e+o*r)/t;function v(t,a){return[u*(t*=n)-c*(a*=i)+e,r-c*t-u*a]}return v.invert=function(t,e){return[n*(f*t-h*e+p),i*(d-h*t-f*e)]},v}function x(t){return b((function(){return t}))()}function b(t){var e,r,h,p,d,x,b,_,w,T,k=150,A=480,M=250,S=0,E=0,L=0,C=0,P=0,O=0,I=1,D=1,z=null,R=n.Z,F=null,B=s.Z,N=.5;function j(t){return _(t[0]*l.uR,t[1]*l.uR)}function U(t){return(t=_.invert(t[0],t[1]))&&[t[0]*l.RW,t[1]*l.RW]}function V(){var t=m(k,0,0,I,D,O).apply(null,e(S,E)),n=(O?m:y)(k,A-t[0],M-t[1],I,D,O);return r=(0,u.I)(L,C,P),b=(0,o.Z)(e,n),_=(0,o.Z)(r,b),x=v(b,N),H()}function H(){return w=T=null,j}return j.stream=function(t){return w&&T===t?w:w=g(function(t){return(0,c.l)({point:function(e,r){var n=t(e,r);return this.stream.point(n[0],n[1])}})}(r)(R(x(B(T=t)))))},j.preclip=function(t){return arguments.length?(R=t,z=void 0,H()):R},j.postclip=function(t){return arguments.length?(B=t,F=h=p=d=null,H()):B},j.clipAngle=function(t){return arguments.length?(R=+t?(0,i.Z)(z=t*l.uR):(z=null,n.Z),H()):z*l.RW},j.clipExtent=function(t){return arguments.length?(B=null==t?(F=h=p=d=null,s.Z):(0,a.Z)(F=+t[0][0],h=+t[0][1],p=+t[1][0],d=+t[1][1]),H()):null==F?null:[[F,h],[p,d]]},j.scale=function(t){return arguments.length?(k=+t,V()):k},j.translate=function(t){return arguments.length?(A=+t[0],M=+t[1],V()):[A,M]},j.center=function(t){return arguments.length?(S=t[0]%360*l.uR,E=t[1]%360*l.uR,V()):[S*l.RW,E*l.RW]},j.rotate=function(t){return arguments.length?(L=t[0]%360*l.uR,C=t[1]%360*l.uR,P=t.length>2?t[2]%360*l.uR:0,V()):[L*l.RW,C*l.RW,P*l.RW]},j.angle=function(t){return arguments.length?(O=t%360*l.uR,V()):O*l.RW},j.reflectX=function(t){return arguments.length?(I=t?-1:1,V()):I<0},j.reflectY=function(t){return arguments.length?(D=t?-1:1,V()):D<0},j.precision=function(t){return arguments.length?(x=v(b,N=t*t),H()):(0,l._b)(N)},j.fitExtent=function(t,e){return(0,f.qg)(j,t,e)},j.fitSize=function(t,e){return(0,f.mF)(j,t,e)},j.fitWidth=function(t,e){return(0,f.V6)(j,t,e)},j.fitHeight=function(t,e){return(0,f.rf)(j,t,e)},function(){return e=t.apply(this,arguments),j.invert=e.invert&&U,V()}}},26867:function(t,e,r){\\\"use strict\\\";r.d(e,{K:function(){return a},Z:function(){return o}});var n=r(15002),i=r(39695);function a(t,e){var r=e*e,n=r*r;return[t*(.8707-.131979*r+n*(n*(.003971*r-.001529*n)-.013791)),e*(1.007226+r*(.015085+n*(.028874*r-.044475-.005916*n)))]}function o(){return(0,n.Z)(a).scale(175.295)}a.invert=function(t,e){var r,n=e,a=25;do{var o=n*n,s=o*o;n-=r=(n*(1.007226+o*(.015085+s*(.028874*o-.044475-.005916*s)))-e)/(1.007226+o*(.045255+s*(.259866*o-.311325-.005916*11*s)))}while((0,i.Wn)(r)>i.Ho&&--a>0);return[t/(.8707+(o=n*n)*(o*(o*o*o*(.003971-.001529*o)-.013791)-.131979)),n]}},57962:function(t,e,r){\\\"use strict\\\";r.d(e,{I:function(){return o},Z:function(){return s}});var n=r(39695),i=r(25382),a=r(15002);function o(t,e){return[(0,n.mC)(e)*(0,n.O$)(t),(0,n.O$)(e)]}function s(){return(0,a.Z)(o).scale(249.5).clipAngle(90+n.Ho)}o.invert=(0,i.O)(n.ZR)},49386:function(t,e,r){\\\"use strict\\\";r.d(e,{I:function(){return o},Z:function(){return c}});var n=r(96059),i=r(39695);function a(t,e){return[(0,i.Wn)(t)>i.pi?t+Math.round(-t/i.BZ)*i.BZ:t,e]}function o(t,e,r){return(t%=i.BZ)?e||r?(0,n.Z)(l(t),u(e,r)):l(t):e||r?u(e,r):a}function s(t){return function(e,r){return[(e+=t)>i.pi?e-i.BZ:e<-i.pi?e+i.BZ:e,r]}}function l(t){var e=s(t);return e.invert=s(-t),e}function u(t,e){var r=(0,i.mC)(t),n=(0,i.O$)(t),a=(0,i.mC)(e),o=(0,i.O$)(e);function s(t,e){var s=(0,i.mC)(e),l=(0,i.mC)(t)*s,u=(0,i.O$)(t)*s,c=(0,i.O$)(e),f=c*r+l*n;return[(0,i.fv)(u*a-f*o,l*r-c*n),(0,i.ZR)(f*a+u*o)]}return s.invert=function(t,e){var s=(0,i.mC)(e),l=(0,i.mC)(t)*s,u=(0,i.O$)(t)*s,c=(0,i.O$)(e),f=c*a-u*o;return[(0,i.fv)(u*a+c*o,l*r+f*n),(0,i.ZR)(f*r-l*n)]},s}function c(t){function e(e){return(e=t(e[0]*i.uR,e[1]*i.uR))[0]*=i.RW,e[1]*=i.RW,e}return t=o(t[0]*i.uR,t[1]*i.uR,t.length>2?t[2]*i.uR:0),e.invert=function(e){return(e=t.invert(e[0]*i.uR,e[1]*i.uR))[0]*=i.RW,e[1]*=i.RW,e},e}a.invert=a},72736:function(t,e,r){\\\"use strict\\\";function n(t,e){t&&a.hasOwnProperty(t.type)&&a[t.type](t,e)}r.d(e,{Z:function(){return l}});var i={Feature:function(t,e){n(t.geometry,e)},FeatureCollection:function(t,e){for(var r=t.features,i=-1,a=r.length;++i<a;)n(r[i].geometry,e)}},a={Sphere:function(t,e){e.sphere()},Point:function(t,e){t=t.coordinates,e.point(t[0],t[1],t[2])},MultiPoint:function(t,e){for(var r=t.coordinates,n=-1,i=r.length;++n<i;)t=r[n],e.point(t[0],t[1],t[2])},LineString:function(t,e){o(t.coordinates,e,0)},MultiLineString:function(t,e){for(var r=t.coordinates,n=-1,i=r.length;++n<i;)o(r[n],e,0)},Polygon:function(t,e){s(t.coordinates,e)},MultiPolygon:function(t,e){for(var r=t.coordinates,n=-1,i=r.length;++n<i;)s(r[n],e)},GeometryCollection:function(t,e){for(var r=t.geometries,i=-1,a=r.length;++i<a;)n(r[i],e)}};function o(t,e,r){var n,i=-1,a=t.length-r;for(e.lineStart();++i<a;)n=t[i],e.point(n[0],n[1],n[2]);e.lineEnd()}function s(t,e){var r=-1,n=t.length;for(e.polygonStart();++r<n;)o(t[r],e,1);e.polygonEnd()}function l(t,e){t&&i.hasOwnProperty(t.type)?i[t.type](t,e):n(t,e)}},64684:function(t,e,r){\\\"use strict\\\";function n(t){return{stream:i(t)}}function i(t){return function(e){var r=new a;for(var n in t)r[n]=t[n];return r.stream=e,r}}function a(){}r.d(e,{Z:function(){return n},l:function(){return i}}),a.prototype={constructor:a,point:function(t,e){this.stream.point(t,e)},sphere:function(){this.stream.sphere()},lineStart:function(){this.stream.lineStart()},lineEnd:function(){this.stream.lineEnd()},polygonStart:function(){this.stream.polygonStart()},polygonEnd:function(){this.stream.polygonEnd()}}},674:function(t,e,r){\\\"use strict\\\";function n(t,e){return t.parent===e.parent?1:2}function i(t,e){return t+e.x}function a(t,e){return Math.max(t,e.y)}function o(){var t=n,e=1,r=1,o=!1;function s(n){var s,l=0;n.eachAfter((function(e){var r=e.children;r?(e.x=function(t){return t.reduce(i,0)/t.length}(r),e.y=function(t){return 1+t.reduce(a,0)}(r)):(e.x=s?l+=t(e,s):0,e.y=0,s=e)}));var u=function(t){for(var e;e=t.children;)t=e[0];return t}(n),c=function(t){for(var e;e=t.children;)t=e[e.length-1];return t}(n),f=u.x-t(u,c)/2,h=c.x+t(c,u)/2;return n.eachAfter(o?function(t){t.x=(t.x-n.x)*e,t.y=(n.y-t.y)*r}:function(t){t.x=(t.x-f)/(h-f)*e,t.y=(1-(n.y?t.y/n.y:1))*r})}return s.separation=function(e){return arguments.length?(t=e,s):t},s.size=function(t){return arguments.length?(o=!1,e=+t[0],r=+t[1],s):o?null:[e,r]},s.nodeSize=function(t){return arguments.length?(o=!0,e=+t[0],r=+t[1],s):o?[e,r]:null},s}function s(t){var e=0,r=t.children,n=r&&r.length;if(n)for(;--n>=0;)e+=r[n].value;else e=1;t.value=e}function l(t,e){var r,n,i,a,o,s=new h(t),l=+t.value&&(s.value=t.value),c=[s];for(null==e&&(e=u);r=c.pop();)if(l&&(r.value=+r.data.value),(i=e(r.data))&&(o=i.length))for(r.children=new Array(o),a=o-1;a>=0;--a)c.push(n=r.children[a]=new h(i[a])),n.parent=r,n.depth=r.depth+1;return s.eachBefore(f)}function u(t){return t.children}function c(t){t.data=t.data.data}function f(t){var e=0;do{t.height=e}while((t=t.parent)&&t.height<++e)}function h(t){this.data=t,this.depth=this.height=0,this.parent=null}r.r(e),r.d(e,{cluster:function(){return o},hierarchy:function(){return l},pack:function(){return O},packEnclose:function(){return d},packSiblings:function(){return S},partition:function(){return B},stratify:function(){return q},tree:function(){return K},treemap:function(){return rt},treemapBinary:function(){return nt},treemapDice:function(){return F},treemapResquarify:function(){return at},treemapSlice:function(){return $},treemapSliceDice:function(){return it},treemapSquarify:function(){return et}}),h.prototype=l.prototype={constructor:h,count:function(){return this.eachAfter(s)},each:function(t){var e,r,n,i,a=this,o=[a];do{for(e=o.reverse(),o=[];a=e.pop();)if(t(a),r=a.children)for(n=0,i=r.length;n<i;++n)o.push(r[n])}while(o.length);return this},eachAfter:function(t){for(var e,r,n,i=this,a=[i],o=[];i=a.pop();)if(o.push(i),e=i.children)for(r=0,n=e.length;r<n;++r)a.push(e[r]);for(;i=o.pop();)t(i);return this},eachBefore:function(t){for(var e,r,n=this,i=[n];n=i.pop();)if(t(n),e=n.children)for(r=e.length-1;r>=0;--r)i.push(e[r]);return this},sum:function(t){return this.eachAfter((function(e){for(var r=+t(e.data)||0,n=e.children,i=n&&n.length;--i>=0;)r+=n[i].value;e.value=r}))},sort:function(t){return this.eachBefore((function(e){e.children&&e.children.sort(t)}))},path:function(t){for(var e=this,r=function(t,e){if(t===e)return t;var r=t.ancestors(),n=e.ancestors(),i=null;for(t=r.pop(),e=n.pop();t===e;)i=t,t=r.pop(),e=n.pop();return i}(e,t),n=[e];e!==r;)e=e.parent,n.push(e);for(var i=n.length;t!==r;)n.splice(i,0,t),t=t.parent;return n},ancestors:function(){for(var t=this,e=[t];t=t.parent;)e.push(t);return e},descendants:function(){var t=[];return this.each((function(e){t.push(e)})),t},leaves:function(){var t=[];return this.eachBefore((function(e){e.children||t.push(e)})),t},links:function(){var t=this,e=[];return t.each((function(r){r!==t&&e.push({source:r.parent,target:r})})),e},copy:function(){return l(this).eachBefore(c)}};var p=Array.prototype.slice;function d(t){for(var e,r,n=0,i=(t=function(t){for(var e,r,n=t.length;n;)r=Math.random()*n--|0,e=t[n],t[n]=t[r],t[r]=e;return t}(p.call(t))).length,a=[];n<i;)e=t[n],r&&y(r,e)?++n:(r=x(a=v(a,e)),n=0);return r}function v(t,e){var r,n;if(m(e,t))return[e];for(r=0;r<t.length;++r)if(g(e,t[r])&&m(b(t[r],e),t))return[t[r],e];for(r=0;r<t.length-1;++r)for(n=r+1;n<t.length;++n)if(g(b(t[r],t[n]),e)&&g(b(t[r],e),t[n])&&g(b(t[n],e),t[r])&&m(_(t[r],t[n],e),t))return[t[r],t[n],e];throw new Error}function g(t,e){var r=t.r-e.r,n=e.x-t.x,i=e.y-t.y;return r<0||r*r<n*n+i*i}function y(t,e){var r=t.r-e.r+1e-6,n=e.x-t.x,i=e.y-t.y;return r>0&&r*r>n*n+i*i}function m(t,e){for(var r=0;r<e.length;++r)if(!y(t,e[r]))return!1;return!0}function x(t){switch(t.length){case 1:return{x:(e=t[0]).x,y:e.y,r:e.r};case 2:return b(t[0],t[1]);case 3:return _(t[0],t[1],t[2])}var e}function b(t,e){var r=t.x,n=t.y,i=t.r,a=e.x,o=e.y,s=e.r,l=a-r,u=o-n,c=s-i,f=Math.sqrt(l*l+u*u);return{x:(r+a+l/f*c)/2,y:(n+o+u/f*c)/2,r:(f+i+s)/2}}function _(t,e,r){var n=t.x,i=t.y,a=t.r,o=e.x,s=e.y,l=e.r,u=r.x,c=r.y,f=r.r,h=n-o,p=n-u,d=i-s,v=i-c,g=l-a,y=f-a,m=n*n+i*i-a*a,x=m-o*o-s*s+l*l,b=m-u*u-c*c+f*f,_=p*d-h*v,w=(d*b-v*x)/(2*_)-n,T=(v*g-d*y)/_,k=(p*x-h*b)/(2*_)-i,A=(h*y-p*g)/_,M=T*T+A*A-1,S=2*(a+w*T+k*A),E=w*w+k*k-a*a,L=-(M?(S+Math.sqrt(S*S-4*M*E))/(2*M):E/S);return{x:n+w+T*L,y:i+k+A*L,r:L}}function w(t,e,r){var n,i,a,o,s=t.x-e.x,l=t.y-e.y,u=s*s+l*l;u?(i=e.r+r.r,i*=i,o=t.r+r.r,i>(o*=o)?(n=(u+o-i)/(2*u),a=Math.sqrt(Math.max(0,o/u-n*n)),r.x=t.x-n*s-a*l,r.y=t.y-n*l+a*s):(n=(u+i-o)/(2*u),a=Math.sqrt(Math.max(0,i/u-n*n)),r.x=e.x+n*s-a*l,r.y=e.y+n*l+a*s)):(r.x=e.x+r.r,r.y=e.y)}function T(t,e){var r=t.r+e.r-1e-6,n=e.x-t.x,i=e.y-t.y;return r>0&&r*r>n*n+i*i}function k(t){var e=t._,r=t.next._,n=e.r+r.r,i=(e.x*r.r+r.x*e.r)/n,a=(e.y*r.r+r.y*e.r)/n;return i*i+a*a}function A(t){this._=t,this.next=null,this.previous=null}function M(t){if(!(i=t.length))return 0;var e,r,n,i,a,o,s,l,u,c,f;if((e=t[0]).x=0,e.y=0,!(i>1))return e.r;if(r=t[1],e.x=-r.r,r.x=e.r,r.y=0,!(i>2))return e.r+r.r;w(r,e,n=t[2]),e=new A(e),r=new A(r),n=new A(n),e.next=n.previous=r,r.next=e.previous=n,n.next=r.previous=e;t:for(s=3;s<i;++s){w(e._,r._,n=t[s]),n=new A(n),l=r.next,u=e.previous,c=r._.r,f=e._.r;do{if(c<=f){if(T(l._,n._)){r=l,e.next=r,r.previous=e,--s;continue t}c+=l._.r,l=l.next}else{if(T(u._,n._)){(e=u).next=r,r.previous=e,--s;continue t}f+=u._.r,u=u.previous}}while(l!==u.next);for(n.previous=e,n.next=r,e.next=r.previous=r=n,a=k(e);(n=n.next)!==r;)(o=k(n))<a&&(e=n,a=o);r=e.next}for(e=[r._],n=r;(n=n.next)!==r;)e.push(n._);for(n=d(e),s=0;s<i;++s)(e=t[s]).x-=n.x,e.y-=n.y;return n.r}function S(t){return M(t),t}function E(t){if(\\\"function\\\"!=typeof t)throw new Error;return t}function L(){return 0}function C(t){return function(){return t}}function P(t){return Math.sqrt(t.value)}function O(){var t=null,e=1,r=1,n=L;function i(i){return i.x=e/2,i.y=r/2,t?i.eachBefore(I(t)).eachAfter(D(n,.5)).eachBefore(z(1)):i.eachBefore(I(P)).eachAfter(D(L,1)).eachAfter(D(n,i.r/Math.min(e,r))).eachBefore(z(Math.min(e,r)/(2*i.r))),i}return i.radius=function(e){return arguments.length?(t=null==(r=e)?null:E(r),i):t;var r},i.size=function(t){return arguments.length?(e=+t[0],r=+t[1],i):[e,r]},i.padding=function(t){return arguments.length?(n=\\\"function\\\"==typeof t?t:C(+t),i):n},i}function I(t){return function(e){e.children||(e.r=Math.max(0,+t(e)||0))}}function D(t,e){return function(r){if(n=r.children){var n,i,a,o=n.length,s=t(r)*e||0;if(s)for(i=0;i<o;++i)n[i].r+=s;if(a=M(n),s)for(i=0;i<o;++i)n[i].r-=s;r.r=a+s}}}function z(t){return function(e){var r=e.parent;e.r*=t,r&&(e.x=r.x+t*e.x,e.y=r.y+t*e.y)}}function R(t){t.x0=Math.round(t.x0),t.y0=Math.round(t.y0),t.x1=Math.round(t.x1),t.y1=Math.round(t.y1)}function F(t,e,r,n,i){for(var a,o=t.children,s=-1,l=o.length,u=t.value&&(n-e)/t.value;++s<l;)(a=o[s]).y0=r,a.y1=i,a.x0=e,a.x1=e+=a.value*u}function B(){var t=1,e=1,r=0,n=!1;function i(i){var a=i.height+1;return i.x0=i.y0=r,i.x1=t,i.y1=e/a,i.eachBefore(function(t,e){return function(n){n.children&&F(n,n.x0,t*(n.depth+1)/e,n.x1,t*(n.depth+2)/e);var i=n.x0,a=n.y0,o=n.x1-r,s=n.y1-r;o<i&&(i=o=(i+o)/2),s<a&&(a=s=(a+s)/2),n.x0=i,n.y0=a,n.x1=o,n.y1=s}}(e,a)),n&&i.eachBefore(R),i}return i.round=function(t){return arguments.length?(n=!!t,i):n},i.size=function(r){return arguments.length?(t=+r[0],e=+r[1],i):[t,e]},i.padding=function(t){return arguments.length?(r=+t,i):r},i}var N=\\\"$\\\",j={depth:-1},U={};function V(t){return t.id}function H(t){return t.parentId}function q(){var t=V,e=H;function r(r){var n,i,a,o,s,l,u,c=r.length,p=new Array(c),d={};for(i=0;i<c;++i)n=r[i],s=p[i]=new h(n),null!=(l=t(n,i,r))&&(l+=\\\"\\\")&&(d[u=N+(s.id=l)]=u in d?U:s);for(i=0;i<c;++i)if(s=p[i],null!=(l=e(r[i],i,r))&&(l+=\\\"\\\")){if(!(o=d[N+l]))throw new Error(\\\"missing: \\\"+l);if(o===U)throw new Error(\\\"ambiguous: \\\"+l);o.children?o.children.push(s):o.children=[s],s.parent=o}else{if(a)throw new Error(\\\"multiple roots\\\");a=s}if(!a)throw new Error(\\\"no root\\\");if(a.parent=j,a.eachBefore((function(t){t.depth=t.parent.depth+1,--c})).eachBefore(f),a.parent=null,c>0)throw new Error(\\\"cycle\\\");return a}return r.id=function(e){return arguments.length?(t=E(e),r):t},r.parentId=function(t){return arguments.length?(e=E(t),r):e},r}function G(t,e){return t.parent===e.parent?1:2}function Z(t){var e=t.children;return e?e[0]:t.t}function Y(t){var e=t.children;return e?e[e.length-1]:t.t}function W(t,e,r){var n=r/(e.i-t.i);e.c-=n,e.s+=r,t.c+=n,e.z+=r,e.m+=r}function X(t,e,r){return t.a.parent===e.parent?t.a:r}function J(t,e){this._=t,this.parent=null,this.children=null,this.A=null,this.a=this,this.z=0,this.m=0,this.c=0,this.s=0,this.t=null,this.i=e}function K(){var t=G,e=1,r=1,n=null;function i(i){var l=function(t){for(var e,r,n,i,a,o=new J(t,0),s=[o];e=s.pop();)if(n=e._.children)for(e.children=new Array(a=n.length),i=a-1;i>=0;--i)s.push(r=e.children[i]=new J(n[i],i)),r.parent=e;return(o.parent=new J(null,0)).children=[o],o}(i);if(l.eachAfter(a),l.parent.m=-l.z,l.eachBefore(o),n)i.eachBefore(s);else{var u=i,c=i,f=i;i.eachBefore((function(t){t.x<u.x&&(u=t),t.x>c.x&&(c=t),t.depth>f.depth&&(f=t)}));var h=u===c?1:t(u,c)/2,p=h-u.x,d=e/(c.x+h+p),v=r/(f.depth||1);i.eachBefore((function(t){t.x=(t.x+p)*d,t.y=t.depth*v}))}return i}function a(e){var r=e.children,n=e.parent.children,i=e.i?n[e.i-1]:null;if(r){!function(t){for(var e,r=0,n=0,i=t.children,a=i.length;--a>=0;)(e=i[a]).z+=r,e.m+=r,r+=e.s+(n+=e.c)}(e);var a=(r[0].z+r[r.length-1].z)/2;i?(e.z=i.z+t(e._,i._),e.m=e.z-a):e.z=a}else i&&(e.z=i.z+t(e._,i._));e.parent.A=function(e,r,n){if(r){for(var i,a=e,o=e,s=r,l=a.parent.children[0],u=a.m,c=o.m,f=s.m,h=l.m;s=Y(s),a=Z(a),s&&a;)l=Z(l),(o=Y(o)).a=e,(i=s.z+f-a.z-u+t(s._,a._))>0&&(W(X(s,e,n),e,i),u+=i,c+=i),f+=s.m,u+=a.m,h+=l.m,c+=o.m;s&&!Y(o)&&(o.t=s,o.m+=f-c),a&&!Z(l)&&(l.t=a,l.m+=u-h,n=e)}return n}(e,i,e.parent.A||n[0])}function o(t){t._.x=t.z+t.parent.m,t.m+=t.parent.m}function s(t){t.x*=e,t.y=t.depth*r}return i.separation=function(e){return arguments.length?(t=e,i):t},i.size=function(t){return arguments.length?(n=!1,e=+t[0],r=+t[1],i):n?null:[e,r]},i.nodeSize=function(t){return arguments.length?(n=!0,e=+t[0],r=+t[1],i):n?[e,r]:null},i}function $(t,e,r,n,i){for(var a,o=t.children,s=-1,l=o.length,u=t.value&&(i-r)/t.value;++s<l;)(a=o[s]).x0=e,a.x1=n,a.y0=r,a.y1=r+=a.value*u}J.prototype=Object.create(h.prototype);var Q=(1+Math.sqrt(5))/2;function tt(t,e,r,n,i,a){for(var o,s,l,u,c,f,h,p,d,v,g,y=[],m=e.children,x=0,b=0,_=m.length,w=e.value;x<_;){l=i-r,u=a-n;do{c=m[b++].value}while(!c&&b<_);for(f=h=c,g=c*c*(v=Math.max(u/l,l/u)/(w*t)),d=Math.max(h/g,g/f);b<_;++b){if(c+=s=m[b].value,s<f&&(f=s),s>h&&(h=s),g=c*c*v,(p=Math.max(h/g,g/f))>d){c-=s;break}d=p}y.push(o={value:c,dice:l<u,children:m.slice(x,b)}),o.dice?F(o,r,n,i,w?n+=u*c/w:a):$(o,r,n,w?r+=l*c/w:i,a),w-=c,x=b}return y}var et=function t(e){function r(t,r,n,i,a){tt(e,t,r,n,i,a)}return r.ratio=function(e){return t((e=+e)>1?e:1)},r}(Q);function rt(){var t=et,e=!1,r=1,n=1,i=[0],a=L,o=L,s=L,l=L,u=L;function c(t){return t.x0=t.y0=0,t.x1=r,t.y1=n,t.eachBefore(f),i=[0],e&&t.eachBefore(R),t}function f(e){var r=i[e.depth],n=e.x0+r,c=e.y0+r,f=e.x1-r,h=e.y1-r;f<n&&(n=f=(n+f)/2),h<c&&(c=h=(c+h)/2),e.x0=n,e.y0=c,e.x1=f,e.y1=h,e.children&&(r=i[e.depth+1]=a(e)/2,n+=u(e)-r,c+=o(e)-r,(f-=s(e)-r)<n&&(n=f=(n+f)/2),(h-=l(e)-r)<c&&(c=h=(c+h)/2),t(e,n,c,f,h))}return c.round=function(t){return arguments.length?(e=!!t,c):e},c.size=function(t){return arguments.length?(r=+t[0],n=+t[1],c):[r,n]},c.tile=function(e){return arguments.length?(t=E(e),c):t},c.padding=function(t){return arguments.length?c.paddingInner(t).paddingOuter(t):c.paddingInner()},c.paddingInner=function(t){return arguments.length?(a=\\\"function\\\"==typeof t?t:C(+t),c):a},c.paddingOuter=function(t){return arguments.length?c.paddingTop(t).paddingRight(t).paddingBottom(t).paddingLeft(t):c.paddingTop()},c.paddingTop=function(t){return arguments.length?(o=\\\"function\\\"==typeof t?t:C(+t),c):o},c.paddingRight=function(t){return arguments.length?(s=\\\"function\\\"==typeof t?t:C(+t),c):s},c.paddingBottom=function(t){return arguments.length?(l=\\\"function\\\"==typeof t?t:C(+t),c):l},c.paddingLeft=function(t){return arguments.length?(u=\\\"function\\\"==typeof t?t:C(+t),c):u},c}function nt(t,e,r,n,i){var a,o,s=t.children,l=s.length,u=new Array(l+1);for(u[0]=o=a=0;a<l;++a)u[a+1]=o+=s[a].value;!function t(e,r,n,i,a,o,l){if(e>=r-1){var c=s[e];return c.x0=i,c.y0=a,c.x1=o,void(c.y1=l)}for(var f=u[e],h=n/2+f,p=e+1,d=r-1;p<d;){var v=p+d>>>1;u[v]<h?p=v+1:d=v}h-u[p-1]<u[p]-h&&e+1<p&&--p;var g=u[p]-f,y=n-g;if(o-i>l-a){var m=(i*y+o*g)/n;t(e,p,g,i,a,m,l),t(p,r,y,m,a,o,l)}else{var x=(a*y+l*g)/n;t(e,p,g,i,a,o,x),t(p,r,y,i,x,o,l)}}(0,l,t.value,e,r,n,i)}function it(t,e,r,n,i){(1&t.depth?$:F)(t,e,r,n,i)}var at=function t(e){function r(t,r,n,i,a){if((o=t._squarify)&&o.ratio===e)for(var o,s,l,u,c,f=-1,h=o.length,p=t.value;++f<h;){for(l=(s=o[f]).children,u=s.value=0,c=l.length;u<c;++u)s.value+=l[u].value;s.dice?F(s,r,n,i,n+=(a-n)*s.value/p):$(s,r,n,r+=(i-r)*s.value/p,a),p-=s.value}else t._squarify=o=tt(e,t,r,n,i,a),o.ratio=e}return r.ratio=function(e){return t((e=+e)>1?e:1)},r}(Q)},45879:function(t,e,r){\\\"use strict\\\";r.d(e,{h5:function(){return y}});var n=Math.PI,i=2*n,a=1e-6,o=i-a;function s(){this._x0=this._y0=this._x1=this._y1=null,this._=\\\"\\\"}function l(){return new s}s.prototype=l.prototype={constructor:s,moveTo:function(t,e){this._+=\\\"M\\\"+(this._x0=this._x1=+t)+\\\",\\\"+(this._y0=this._y1=+e)},closePath:function(){null!==this._x1&&(this._x1=this._x0,this._y1=this._y0,this._+=\\\"Z\\\")},lineTo:function(t,e){this._+=\\\"L\\\"+(this._x1=+t)+\\\",\\\"+(this._y1=+e)},quadraticCurveTo:function(t,e,r,n){this._+=\\\"Q\\\"+ +t+\\\",\\\"+ +e+\\\",\\\"+(this._x1=+r)+\\\",\\\"+(this._y1=+n)},bezierCurveTo:function(t,e,r,n,i,a){this._+=\\\"C\\\"+ +t+\\\",\\\"+ +e+\\\",\\\"+ +r+\\\",\\\"+ +n+\\\",\\\"+(this._x1=+i)+\\\",\\\"+(this._y1=+a)},arcTo:function(t,e,r,i,o){t=+t,e=+e,r=+r,i=+i,o=+o;var s=this._x1,l=this._y1,u=r-t,c=i-e,f=s-t,h=l-e,p=f*f+h*h;if(o<0)throw new Error(\\\"negative radius: \\\"+o);if(null===this._x1)this._+=\\\"M\\\"+(this._x1=t)+\\\",\\\"+(this._y1=e);else if(p>a)if(Math.abs(h*u-c*f)>a&&o){var d=r-s,v=i-l,g=u*u+c*c,y=d*d+v*v,m=Math.sqrt(g),x=Math.sqrt(p),b=o*Math.tan((n-Math.acos((g+p-y)/(2*m*x)))/2),_=b/x,w=b/m;Math.abs(_-1)>a&&(this._+=\\\"L\\\"+(t+_*f)+\\\",\\\"+(e+_*h)),this._+=\\\"A\\\"+o+\\\",\\\"+o+\\\",0,0,\\\"+ +(h*d>f*v)+\\\",\\\"+(this._x1=t+w*u)+\\\",\\\"+(this._y1=e+w*c)}else this._+=\\\"L\\\"+(this._x1=t)+\\\",\\\"+(this._y1=e)},arc:function(t,e,r,s,l,u){t=+t,e=+e,u=!!u;var c=(r=+r)*Math.cos(s),f=r*Math.sin(s),h=t+c,p=e+f,d=1^u,v=u?s-l:l-s;if(r<0)throw new Error(\\\"negative radius: \\\"+r);null===this._x1?this._+=\\\"M\\\"+h+\\\",\\\"+p:(Math.abs(this._x1-h)>a||Math.abs(this._y1-p)>a)&&(this._+=\\\"L\\\"+h+\\\",\\\"+p),r&&(v<0&&(v=v%i+i),v>o?this._+=\\\"A\\\"+r+\\\",\\\"+r+\\\",0,1,\\\"+d+\\\",\\\"+(t-c)+\\\",\\\"+(e-f)+\\\"A\\\"+r+\\\",\\\"+r+\\\",0,1,\\\"+d+\\\",\\\"+(this._x1=h)+\\\",\\\"+(this._y1=p):v>a&&(this._+=\\\"A\\\"+r+\\\",\\\"+r+\\\",0,\\\"+ +(v>=n)+\\\",\\\"+d+\\\",\\\"+(this._x1=t+r*Math.cos(l))+\\\",\\\"+(this._y1=e+r*Math.sin(l))))},rect:function(t,e,r,n){this._+=\\\"M\\\"+(this._x0=this._x1=+t)+\\\",\\\"+(this._y0=this._y1=+e)+\\\"h\\\"+ +r+\\\"v\\\"+ +n+\\\"h\\\"+-r+\\\"Z\\\"},toString:function(){return this._}};var u=l,c=Array.prototype.slice;function f(t){return function(){return t}}function h(t){return t[0]}function p(t){return t[1]}function d(t){return t.source}function v(t){return t.target}function g(t,e,r,n,i){t.moveTo(e,r),t.bezierCurveTo(e=(e+n)/2,r,e,i,n,i)}function y(){return function(t){var e=d,r=v,n=h,i=p,a=null;function o(){var o,s=c.call(arguments),l=e.apply(this,s),f=r.apply(this,s);if(a||(a=o=u()),t(a,+n.apply(this,(s[0]=l,s)),+i.apply(this,s),+n.apply(this,(s[0]=f,s)),+i.apply(this,s)),o)return a=null,o+\\\"\\\"||null}return o.source=function(t){return arguments.length?(e=t,o):e},o.target=function(t){return arguments.length?(r=t,o):r},o.x=function(t){return arguments.length?(n=\\\"function\\\"==typeof t?t:f(+t),o):n},o.y=function(t){return arguments.length?(i=\\\"function\\\"==typeof t?t:f(+t),o):i},o.context=function(t){return arguments.length?(a=null==t?null:t,o):a},o}(g)}},84096:function(t,e,r){\\\"use strict\\\";r.d(e,{i$:function(){return d},Dq:function(){return h},g0:function(){return v}});var n=r(58176),i=r(48480),a=r(59879),o=r(82301),s=r(34823),l=r(79791);function u(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 c(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 f(t,e,r){return{y:t,m:e,d:r,H:0,M:0,S:0,L:0}}function h(t){var e=t.dateTime,r=t.date,s=t.time,l=t.periods,h=t.days,p=t.shortDays,d=t.months,v=t.shortMonths,y=w(l),m=T(l),x=w(h),b=T(h),_=w(p),St=T(p),Et=w(d),Lt=T(d),Ct=w(v),Pt=T(v),Ot={a:function(t){return p[t.getDay()]},A:function(t){return h[t.getDay()]},b:function(t){return v[t.getMonth()]},B:function(t){return d[t.getMonth()]},c:null,d:q,e:q,f:X,H:G,I:Z,j:Y,L:W,m:J,M:K,p:function(t){return l[+(t.getHours()>=12)]},q:function(t){return 1+~~(t.getMonth()/3)},Q:At,s:Mt,S:$,u:Q,U:tt,V:et,w:rt,W:nt,x:null,X:null,y:it,Y:at,Z:ot,\\\"%\\\":kt},It={a:function(t){return p[t.getUTCDay()]},A:function(t){return h[t.getUTCDay()]},b:function(t){return v[t.getUTCMonth()]},B:function(t){return d[t.getUTCMonth()]},c:null,d:st,e:st,f:ht,H:lt,I:ut,j:ct,L:ft,m:pt,M:dt,p:function(t){return l[+(t.getUTCHours()>=12)]},q:function(t){return 1+~~(t.getUTCMonth()/3)},Q:At,s:Mt,S:vt,u:gt,U:yt,V:mt,w:xt,W:bt,x:null,X:null,y:_t,Y:wt,Z:Tt,\\\"%\\\":kt},Dt={a:function(t,e,r){var n=_.exec(e.slice(r));return n?(t.w=St[n[0].toLowerCase()],r+n[0].length):-1},A:function(t,e,r){var n=x.exec(e.slice(r));return n?(t.w=b[n[0].toLowerCase()],r+n[0].length):-1},b:function(t,e,r){var n=Ct.exec(e.slice(r));return n?(t.m=Pt[n[0].toLowerCase()],r+n[0].length):-1},B:function(t,e,r){var n=Et.exec(e.slice(r));return n?(t.m=Lt[n[0].toLowerCase()],r+n[0].length):-1},c:function(t,r,n){return Ft(t,e,r,n)},d:D,e:D,f:j,H:R,I:R,j:z,L:N,m:I,M:F,p:function(t,e,r){var n=y.exec(e.slice(r));return n?(t.p=m[n[0].toLowerCase()],r+n[0].length):-1},q:O,Q:V,s:H,S:B,u:A,U:M,V:S,w:k,W:E,x:function(t,e,n){return Ft(t,r,e,n)},X:function(t,e,r){return Ft(t,s,e,r)},y:C,Y:L,Z:P,\\\"%\\\":U};function zt(t,e){return function(r){var n,i,a,o=[],s=-1,l=0,u=t.length;for(r instanceof Date||(r=new Date(+r));++s<u;)37===t.charCodeAt(s)&&(o.push(t.slice(l,s)),null!=(i=g[n=t.charAt(++s)])?n=t.charAt(++s):i=\\\"e\\\"===n?\\\" \\\":\\\"0\\\",(a=e[n])&&(n=a(r,i)),o.push(n),l=s+1);return o.push(t.slice(l,s)),o.join(\\\"\\\")}}function Rt(t,e){return function(r){var s,l,h=f(1900,void 0,1);if(Ft(h,t,r+=\\\"\\\",0)!=r.length)return null;if(\\\"Q\\\"in h)return new Date(h.Q);if(\\\"s\\\"in h)return new Date(1e3*h.s+(\\\"L\\\"in h?h.L:0));if(e&&!(\\\"Z\\\"in h)&&(h.Z=0),\\\"p\\\"in h&&(h.H=h.H%12+12*h.p),void 0===h.m&&(h.m=\\\"q\\\"in h?h.q:0),\\\"V\\\"in h){if(h.V<1||h.V>53)return null;\\\"w\\\"in h||(h.w=1),\\\"Z\\\"in h?(l=(s=c(f(h.y,0,1))).getUTCDay(),s=l>4||0===l?n.l6.ceil(s):(0,n.l6)(s),s=i.Z.offset(s,7*(h.V-1)),h.y=s.getUTCFullYear(),h.m=s.getUTCMonth(),h.d=s.getUTCDate()+(h.w+6)%7):(l=(s=u(f(h.y,0,1))).getDay(),s=l>4||0===l?a.wA.ceil(s):(0,a.wA)(s),s=o.Z.offset(s,7*(h.V-1)),h.y=s.getFullYear(),h.m=s.getMonth(),h.d=s.getDate()+(h.w+6)%7)}else(\\\"W\\\"in h||\\\"U\\\"in h)&&(\\\"w\\\"in h||(h.w=\\\"u\\\"in h?h.u%7:\\\"W\\\"in h?1:0),l=\\\"Z\\\"in h?c(f(h.y,0,1)).getUTCDay():u(f(h.y,0,1)).getDay(),h.m=0,h.d=\\\"W\\\"in h?(h.w+6)%7+7*h.W-(l+5)%7:h.w+7*h.U-(l+6)%7);return\\\"Z\\\"in h?(h.H+=h.Z/100|0,h.M+=h.Z%100,c(h)):u(h)}}function Ft(t,e,r,n){for(var i,a,o=0,s=e.length,l=r.length;o<s;){if(n>=l)return-1;if(37===(i=e.charCodeAt(o++))){if(i=e.charAt(o++),!(a=Dt[i in g?e.charAt(o++):i])||(n=a(t,r,n))<0)return-1}else if(i!=r.charCodeAt(n++))return-1}return n}return Ot.x=zt(r,Ot),Ot.X=zt(s,Ot),Ot.c=zt(e,Ot),It.x=zt(r,It),It.X=zt(s,It),It.c=zt(e,It),{format:function(t){var e=zt(t+=\\\"\\\",Ot);return e.toString=function(){return t},e},parse:function(t){var e=Rt(t+=\\\"\\\",!1);return e.toString=function(){return t},e},utcFormat:function(t){var e=zt(t+=\\\"\\\",It);return e.toString=function(){return t},e},utcParse:function(t){var e=Rt(t+=\\\"\\\",!0);return e.toString=function(){return t},e}}}var p,d,v,g={\\\"-\\\":\\\"\\\",_:\\\" \\\",0:\\\"0\\\"},y=/^\\\\s*\\\\d+/,m=/^%/,x=/[\\\\\\\\^$*+?|[\\\\]().{}]/g;function b(t,e,r){var n=t<0?\\\"-\\\":\\\"\\\",i=(n?-t:t)+\\\"\\\",a=i.length;return n+(a<r?new Array(r-a+1).join(e)+i:i)}function _(t){return t.replace(x,\\\"\\\\\\\\$&\\\")}function w(t){return new RegExp(\\\"^(?:\\\"+t.map(_).join(\\\"|\\\")+\\\")\\\",\\\"i\\\")}function T(t){for(var e={},r=-1,n=t.length;++r<n;)e[t[r].toLowerCase()]=r;return e}function k(t,e,r){var n=y.exec(e.slice(r,r+1));return n?(t.w=+n[0],r+n[0].length):-1}function A(t,e,r){var n=y.exec(e.slice(r,r+1));return n?(t.u=+n[0],r+n[0].length):-1}function M(t,e,r){var n=y.exec(e.slice(r,r+2));return n?(t.U=+n[0],r+n[0].length):-1}function S(t,e,r){var n=y.exec(e.slice(r,r+2));return n?(t.V=+n[0],r+n[0].length):-1}function E(t,e,r){var n=y.exec(e.slice(r,r+2));return n?(t.W=+n[0],r+n[0].length):-1}function L(t,e,r){var n=y.exec(e.slice(r,r+4));return n?(t.y=+n[0],r+n[0].length):-1}function C(t,e,r){var n=y.exec(e.slice(r,r+2));return n?(t.y=+n[0]+(+n[0]>68?1900:2e3),r+n[0].length):-1}function P(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 O(t,e,r){var n=y.exec(e.slice(r,r+1));return n?(t.q=3*n[0]-3,r+n[0].length):-1}function I(t,e,r){var n=y.exec(e.slice(r,r+2));return n?(t.m=n[0]-1,r+n[0].length):-1}function D(t,e,r){var n=y.exec(e.slice(r,r+2));return n?(t.d=+n[0],r+n[0].length):-1}function z(t,e,r){var n=y.exec(e.slice(r,r+3));return n?(t.m=0,t.d=+n[0],r+n[0].length):-1}function R(t,e,r){var n=y.exec(e.slice(r,r+2));return n?(t.H=+n[0],r+n[0].length):-1}function F(t,e,r){var n=y.exec(e.slice(r,r+2));return n?(t.M=+n[0],r+n[0].length):-1}function B(t,e,r){var n=y.exec(e.slice(r,r+2));return n?(t.S=+n[0],r+n[0].length):-1}function N(t,e,r){var n=y.exec(e.slice(r,r+3));return n?(t.L=+n[0],r+n[0].length):-1}function j(t,e,r){var n=y.exec(e.slice(r,r+6));return n?(t.L=Math.floor(n[0]/1e3),r+n[0].length):-1}function U(t,e,r){var n=m.exec(e.slice(r,r+1));return n?r+n[0].length:-1}function V(t,e,r){var n=y.exec(e.slice(r));return n?(t.Q=+n[0],r+n[0].length):-1}function H(t,e,r){var n=y.exec(e.slice(r));return n?(t.s=+n[0],r+n[0].length):-1}function q(t,e){return b(t.getDate(),e,2)}function G(t,e){return b(t.getHours(),e,2)}function Z(t,e){return b(t.getHours()%12||12,e,2)}function Y(t,e){return b(1+o.Z.count((0,s.Z)(t),t),e,3)}function W(t,e){return b(t.getMilliseconds(),e,3)}function X(t,e){return W(t,e)+\\\"000\\\"}function J(t,e){return b(t.getMonth()+1,e,2)}function K(t,e){return b(t.getMinutes(),e,2)}function $(t,e){return b(t.getSeconds(),e,2)}function Q(t){var e=t.getDay();return 0===e?7:e}function tt(t,e){return b(a.OM.count((0,s.Z)(t)-1,t),e,2)}function et(t,e){var r=t.getDay();return t=r>=4||0===r?(0,a.bL)(t):a.bL.ceil(t),b(a.bL.count((0,s.Z)(t),t)+(4===(0,s.Z)(t).getDay()),e,2)}function rt(t){return t.getDay()}function nt(t,e){return b(a.wA.count((0,s.Z)(t)-1,t),e,2)}function it(t,e){return b(t.getFullYear()%100,e,2)}function at(t,e){return b(t.getFullYear()%1e4,e,4)}function ot(t){var e=t.getTimezoneOffset();return(e>0?\\\"-\\\":(e*=-1,\\\"+\\\"))+b(e/60|0,\\\"0\\\",2)+b(e%60,\\\"0\\\",2)}function st(t,e){return b(t.getUTCDate(),e,2)}function lt(t,e){return b(t.getUTCHours(),e,2)}function ut(t,e){return b(t.getUTCHours()%12||12,e,2)}function ct(t,e){return b(1+i.Z.count((0,l.Z)(t),t),e,3)}function ft(t,e){return b(t.getUTCMilliseconds(),e,3)}function ht(t,e){return ft(t,e)+\\\"000\\\"}function pt(t,e){return b(t.getUTCMonth()+1,e,2)}function dt(t,e){return b(t.getUTCMinutes(),e,2)}function vt(t,e){return b(t.getUTCSeconds(),e,2)}function gt(t){var e=t.getUTCDay();return 0===e?7:e}function yt(t,e){return b(n.Ox.count((0,l.Z)(t)-1,t),e,2)}function mt(t,e){var r=t.getUTCDay();return t=r>=4||0===r?(0,n.hB)(t):n.hB.ceil(t),b(n.hB.count((0,l.Z)(t),t)+(4===(0,l.Z)(t).getUTCDay()),e,2)}function xt(t){return t.getUTCDay()}function bt(t,e){return b(n.l6.count((0,l.Z)(t)-1,t),e,2)}function _t(t,e){return b(t.getUTCFullYear()%100,e,2)}function wt(t,e){return b(t.getUTCFullYear()%1e4,e,4)}function Tt(){return\\\"+0000\\\"}function kt(){return\\\"%\\\"}function At(t){return+t}function Mt(t){return Math.floor(+t/1e3)}p=h({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\\\"]}),d=p.format,p.parse,v=p.utcFormat,p.utcParse},82301:function(t,e,r){\\\"use strict\\\";r.d(e,{a:function(){return o}});var n=r(30052),i=r(54263),a=(0,n.Z)((function(t){t.setHours(0,0,0,0)}),(function(t,e){t.setDate(t.getDate()+e)}),(function(t,e){return(e-t-(e.getTimezoneOffset()-t.getTimezoneOffset())*i.yB)/i.UD}),(function(t){return t.getDate()-1}));e.Z=a;var o=a.range},54263:function(t,e,r){\\\"use strict\\\";r.d(e,{UD:function(){return o},Y2:function(){return a},Ym:function(){return n},iM:function(){return s},yB:function(){return i}});var n=1e3,i=6e4,a=36e5,o=864e5,s=6048e5},81041:function(t,e,r){\\\"use strict\\\";r.r(e),r.d(e,{timeDay:function(){return y.Z},timeDays:function(){return y.a},timeFriday:function(){return m.mC},timeFridays:function(){return m.b$},timeHour:function(){return v},timeHours:function(){return g},timeInterval:function(){return n.Z},timeMillisecond:function(){return a},timeMilliseconds:function(){return o},timeMinute:function(){return h},timeMinutes:function(){return p},timeMonday:function(){return m.wA},timeMondays:function(){return m.bJ},timeMonth:function(){return b},timeMonths:function(){return _},timeSaturday:function(){return m.EY},timeSaturdays:function(){return m.Ff},timeSecond:function(){return u},timeSeconds:function(){return c},timeSunday:function(){return m.OM},timeSundays:function(){return m.vm},timeThursday:function(){return m.bL},timeThursdays:function(){return m.$t},timeTuesday:function(){return m.sy},timeTuesdays:function(){return m.aU},timeWednesday:function(){return m.zg},timeWednesdays:function(){return m.Ld},timeWeek:function(){return m.OM},timeWeeks:function(){return m.vm},timeYear:function(){return w.Z},timeYears:function(){return w.g},utcDay:function(){return L.Z},utcDays:function(){return L.y},utcFriday:function(){return C.QQ},utcFridays:function(){return C.fz},utcHour:function(){return S},utcHours:function(){return E},utcMillisecond:function(){return a},utcMilliseconds:function(){return o},utcMinute:function(){return k},utcMinutes:function(){return A},utcMonday:function(){return C.l6},utcMondays:function(){return C.$3},utcMonth:function(){return O},utcMonths:function(){return I},utcSaturday:function(){return C.g4},utcSaturdays:function(){return C.Q_},utcSecond:function(){return u},utcSeconds:function(){return c},utcSunday:function(){return C.Ox},utcSundays:function(){return C.SU},utcThursday:function(){return C.hB},utcThursdays:function(){return C.xj},utcTuesday:function(){return C.J1},utcTuesdays:function(){return C.DK},utcWednesday:function(){return C.b3},utcWednesdays:function(){return C.uy},utcWeek:function(){return C.Ox},utcWeeks:function(){return C.SU},utcYear:function(){return D.Z},utcYears:function(){return D.D}});var n=r(30052),i=(0,n.Z)((function(){}),(function(t,e){t.setTime(+t+e)}),(function(t,e){return e-t}));i.every=function(t){return t=Math.floor(t),isFinite(t)&&t>0?t>1?(0,n.Z)((function(e){e.setTime(Math.floor(e/t)*t)}),(function(e,r){e.setTime(+e+r*t)}),(function(e,r){return(r-e)/t})):i:null};var a=i,o=i.range,s=r(54263),l=(0,n.Z)((function(t){t.setTime(t-t.getMilliseconds())}),(function(t,e){t.setTime(+t+e*s.Ym)}),(function(t,e){return(e-t)/s.Ym}),(function(t){return t.getUTCSeconds()})),u=l,c=l.range,f=(0,n.Z)((function(t){t.setTime(t-t.getMilliseconds()-t.getSeconds()*s.Ym)}),(function(t,e){t.setTime(+t+e*s.yB)}),(function(t,e){return(e-t)/s.yB}),(function(t){return t.getMinutes()})),h=f,p=f.range,d=(0,n.Z)((function(t){t.setTime(t-t.getMilliseconds()-t.getSeconds()*s.Ym-t.getMinutes()*s.yB)}),(function(t,e){t.setTime(+t+e*s.Y2)}),(function(t,e){return(e-t)/s.Y2}),(function(t){return t.getHours()})),v=d,g=d.range,y=r(82301),m=r(59879),x=(0,n.Z)((function(t){t.setDate(1),t.setHours(0,0,0,0)}),(function(t,e){t.setMonth(t.getMonth()+e)}),(function(t,e){return e.getMonth()-t.getMonth()+12*(e.getFullYear()-t.getFullYear())}),(function(t){return t.getMonth()})),b=x,_=x.range,w=r(34823),T=(0,n.Z)((function(t){t.setUTCSeconds(0,0)}),(function(t,e){t.setTime(+t+e*s.yB)}),(function(t,e){return(e-t)/s.yB}),(function(t){return t.getUTCMinutes()})),k=T,A=T.range,M=(0,n.Z)((function(t){t.setUTCMinutes(0,0,0)}),(function(t,e){t.setTime(+t+e*s.Y2)}),(function(t,e){return(e-t)/s.Y2}),(function(t){return t.getUTCHours()})),S=M,E=M.range,L=r(48480),C=r(58176),P=(0,n.Z)((function(t){t.setUTCDate(1),t.setUTCHours(0,0,0,0)}),(function(t,e){t.setUTCMonth(t.getUTCMonth()+e)}),(function(t,e){return e.getUTCMonth()-t.getUTCMonth()+12*(e.getUTCFullYear()-t.getUTCFullYear())}),(function(t){return t.getUTCMonth()})),O=P,I=P.range,D=r(79791)},30052:function(t,e,r){\\\"use strict\\\";r.d(e,{Z:function(){return a}});var n=new Date,i=new Date;function a(t,e,r,o){function s(e){return t(e=0===arguments.length?new Date:new Date(+e)),e}return s.floor=function(e){return t(e=new Date(+e)),e},s.ceil=function(r){return t(r=new Date(r-1)),e(r,1),t(r),r},s.round=function(t){var e=s(t),r=s.ceil(t);return t-e<r-t?e:r},s.offset=function(t,r){return e(t=new Date(+t),null==r?1:Math.floor(r)),t},s.range=function(r,n,i){var a,o=[];if(r=s.ceil(r),i=null==i?1:Math.floor(i),!(r<n&&i>0))return o;do{o.push(a=new Date(+r)),e(r,i),t(r)}while(a<r&&r<n);return o},s.filter=function(r){return a((function(e){if(e>=e)for(;t(e),!r(e);)e.setTime(e-1)}),(function(t,n){if(t>=t)if(n<0)for(;++n<=0;)for(;e(t,-1),!r(t););else for(;--n>=0;)for(;e(t,1),!r(t););}))},r&&(s.count=function(e,a){return n.setTime(+e),i.setTime(+a),t(n),t(i),Math.floor(r(n,i))},s.every=function(t){return t=Math.floor(t),isFinite(t)&&t>0?t>1?s.filter(o?function(e){return o(e)%t==0}:function(e){return s.count(0,e)%t==0}):s:null}),s}},48480:function(t,e,r){\\\"use strict\\\";r.d(e,{y:function(){return o}});var n=r(30052),i=r(54263),a=(0,n.Z)((function(t){t.setUTCHours(0,0,0,0)}),(function(t,e){t.setUTCDate(t.getUTCDate()+e)}),(function(t,e){return(e-t)/i.UD}),(function(t){return t.getUTCDate()-1}));e.Z=a;var o=a.range},58176:function(t,e,r){\\\"use strict\\\";r.d(e,{$3:function(){return d},DK:function(){return v},J1:function(){return l},Ox:function(){return o},QQ:function(){return f},Q_:function(){return x},SU:function(){return p},b3:function(){return u},fz:function(){return m},g4:function(){return h},hB:function(){return c},l6:function(){return s},uy:function(){return g},xj:function(){return y}});var n=r(30052),i=r(54263);function a(t){return(0,n.Z)((function(e){e.setUTCDate(e.getUTCDate()-(e.getUTCDay()+7-t)%7),e.setUTCHours(0,0,0,0)}),(function(t,e){t.setUTCDate(t.getUTCDate()+7*e)}),(function(t,e){return(e-t)/i.iM}))}var o=a(0),s=a(1),l=a(2),u=a(3),c=a(4),f=a(5),h=a(6),p=o.range,d=s.range,v=l.range,g=u.range,y=c.range,m=f.range,x=h.range},79791:function(t,e,r){\\\"use strict\\\";r.d(e,{D:function(){return a}});var n=r(30052),i=(0,n.Z)((function(t){t.setUTCMonth(0,1),t.setUTCHours(0,0,0,0)}),(function(t,e){t.setUTCFullYear(t.getUTCFullYear()+e)}),(function(t,e){return e.getUTCFullYear()-t.getUTCFullYear()}),(function(t){return t.getUTCFullYear()}));i.every=function(t){return isFinite(t=Math.floor(t))&&t>0?(0,n.Z)((function(e){e.setUTCFullYear(Math.floor(e.getUTCFullYear()/t)*t),e.setUTCMonth(0,1),e.setUTCHours(0,0,0,0)}),(function(e,r){e.setUTCFullYear(e.getUTCFullYear()+r*t)})):null},e.Z=i;var a=i.range},59879:function(t,e,r){\\\"use strict\\\";r.d(e,{$t:function(){return y},EY:function(){return h},Ff:function(){return x},Ld:function(){return g},OM:function(){return o},aU:function(){return v},b$:function(){return m},bJ:function(){return d},bL:function(){return c},mC:function(){return f},sy:function(){return l},vm:function(){return p},wA:function(){return s},zg:function(){return u}});var n=r(30052),i=r(54263);function a(t){return(0,n.Z)((function(e){e.setDate(e.getDate()-(e.getDay()+7-t)%7),e.setHours(0,0,0,0)}),(function(t,e){t.setDate(t.getDate()+7*e)}),(function(t,e){return(e-t-(e.getTimezoneOffset()-t.getTimezoneOffset())*i.yB)/i.iM}))}var o=a(0),s=a(1),l=a(2),u=a(3),c=a(4),f=a(5),h=a(6),p=o.range,d=s.range,v=l.range,g=u.range,y=c.range,m=f.range,x=h.range},34823:function(t,e,r){\\\"use strict\\\";r.d(e,{g:function(){return a}});var n=r(30052),i=(0,n.Z)((function(t){t.setMonth(0,1),t.setHours(0,0,0,0)}),(function(t,e){t.setFullYear(t.getFullYear()+e)}),(function(t,e){return e.getFullYear()-t.getFullYear()}),(function(t){return t.getFullYear()}));i.every=function(t){return isFinite(t=Math.floor(t))&&t>0?(0,n.Z)((function(e){e.setFullYear(Math.floor(e.getFullYear()/t)*t),e.setMonth(0,1),e.setHours(0,0,0,0)}),(function(e,r){e.setFullYear(e.getFullYear()+r*t)})):null},e.Z=i;var a=i.range},17045:function(t,e,r){\\\"use strict\\\";var n=r(8709),i=\\\"function\\\"==typeof Symbol&&\\\"symbol\\\"==typeof Symbol(\\\"foo\\\"),a=Object.prototype.toString,o=Array.prototype.concat,s=Object.defineProperty,l=r(55622)(),u=s&&l,c=function(t,e,r,n){if(e in t)if(!0===n){if(t[e]===r)return}else if(\\\"function\\\"!=typeof(i=n)||\\\"[object Function]\\\"!==a.call(i)||!n())return;var i;u?s(t,e,{configurable:!0,enumerable:!1,value:r,writable:!0}):t[e]=r},f=function(t,e){var r=arguments.length>2?arguments[2]:{},a=n(e);i&&(a=o.call(a,Object.getOwnPropertySymbols(e)));for(var s=0;s<a.length;s+=1)c(t,a[s],e[a[s]],r[a[s]])};f.supportsDescriptors=!!u,t.exports=f},46775:function(t){t.exports=function(){for(var t=0;t<arguments.length;t++)if(void 0!==arguments[t])return arguments[t]}},53545:function(t){\\\"use strict\\\";t.exports=n;var e=(n.canvas=document.createElement(\\\"canvas\\\")).getContext(\\\"2d\\\"),r=i([32,126]);function n(t,n){Array.isArray(t)&&(t=t.join(\\\", \\\"));var a,o={},s=16,l=.05;n&&(2===n.length&&\\\"number\\\"==typeof n[0]?a=i(n):Array.isArray(n)?a=n:(n.o?a=i(n.o):n.pairs&&(a=n.pairs),n.fontSize&&(s=n.fontSize),null!=n.threshold&&(l=n.threshold))),a||(a=r),e.font=s+\\\"px \\\"+t;for(var u=0;u<a.length;u++){var c=a[u],f=e.measureText(c[0]).width+e.measureText(c[1]).width,h=e.measureText(c).width;if(Math.abs(f-h)>s*l){var p=(h-f)/s;o[c]=1e3*p}}return o}function i(t){for(var e=[],r=t[0];r<=t[1];r++)for(var n=String.fromCharCode(r),i=t[0];i<t[1];i++){var a=n+String.fromCharCode(i);e.push(a)}return e}n.createPairs=i,n.ascii=r},31457:function(t,e,r){var n=r(65185),i=r(18625),a={M:\\\"moveTo\\\",C:\\\"bezierCurveTo\\\"};t.exports=function(t,e){t.beginPath(),i(n(e)).forEach((function(e){var r=e[0],n=e.slice(1);t[a[r]].apply(t,n)})),t.closePath()}},90660:function(t){t.exports=function(t){switch(t){case\\\"int8\\\":return Int8Array;case\\\"int16\\\":return Int16Array;case\\\"int32\\\":return Int32Array;case\\\"uint8\\\":return Uint8Array;case\\\"uint16\\\":return Uint16Array;case\\\"uint32\\\":return Uint32Array;case\\\"float32\\\":return Float32Array;case\\\"float64\\\":return Float64Array;case\\\"array\\\":return Array;case\\\"uint8_clamped\\\":return Uint8ClampedArray}}},12129:function(t){\\\"use strict\\\";function e(t,r,n){var i=0|t[n];if(i<=0)return[];var a,o=new Array(i);if(n===t.length-1)for(a=0;a<i;++a)o[a]=r;else for(a=0;a<i;++a)o[a]=e(t,r,n+1);return o}t.exports=function(t,r){switch(void 0===r&&(r=0),typeof t){case\\\"number\\\":if(t>0)return function(t,e){var r,n;for(r=new Array(t),n=0;n<t;++n)r[n]=e;return r}(0|t,r);break;case\\\"object\\\":if(\\\"number\\\"==typeof t.length)return e(t,r,0)}return[]}},11474:function(t){\\\"use strict\\\";function e(t,e,a){a=a||2;var o,s,l,f,h,d,v,g=e&&e.length,y=g?e[0]*a:t.length,m=r(t,0,y,a,!0),x=[];if(!m||m.next===m.prev)return x;if(g&&(m=function(t,e,i,a){var o,s,l,f=[];for(o=0,s=e.length;o<s;o++)(l=r(t,e[o]*a,o<s-1?e[o+1]*a:t.length,a,!1))===l.next&&(l.steiner=!0),f.push(p(l));for(f.sort(u),o=0;o<f.length;o++)c(f[o],i),i=n(i,i.next);return i}(t,e,m,a)),t.length>80*a){o=l=t[0],s=f=t[1];for(var b=a;b<y;b+=a)(h=t[b])<o&&(o=h),(d=t[b+1])<s&&(s=d),h>l&&(l=h),d>f&&(f=d);v=0!==(v=Math.max(l-o,f-s))?1/v:0}return i(m,x,a,o,s,v),x}function r(t,e,r,n,i){var a,o;if(i===M(t,e,r,n)>0)for(a=e;a<r;a+=n)o=T(a,t[a],t[a+1],o);else for(a=r-n;a>=e;a-=n)o=T(a,t[a],t[a+1],o);return o&&y(o,o.next)&&(k(o),o=o.next),o}function n(t,e){if(!t)return t;e||(e=t);var r,n=t;do{if(r=!1,n.steiner||!y(n,n.next)&&0!==g(n.prev,n,n.next))n=n.next;else{if(k(n),(n=e=n.prev)===n.next)break;r=!0}}while(r||n!==e);return e}function i(t,e,r,u,c,f,p){if(t){!p&&f&&function(t,e,r,n){var i=t;do{null===i.z&&(i.z=h(i.x,i.y,e,r,n)),i.prevZ=i.prev,i.nextZ=i.next,i=i.next}while(i!==t);i.prevZ.nextZ=null,i.prevZ=null,function(t){var e,r,n,i,a,o,s,l,u=1;do{for(r=t,t=null,a=null,o=0;r;){for(o++,n=r,s=0,e=0;e<u&&(s++,n=n.nextZ);e++);for(l=u;s>0||l>0&&n;)0!==s&&(0===l||!n||r.z<=n.z)?(i=r,r=r.nextZ,s--):(i=n,n=n.nextZ,l--),a?a.nextZ=i:t=i,i.prevZ=a,a=i;r=n}a.nextZ=null,u*=2}while(o>1)}(i)}(t,u,c,f);for(var d,v,g=t;t.prev!==t.next;)if(d=t.prev,v=t.next,f?o(t,u,c,f):a(t))e.push(d.i/r),e.push(t.i/r),e.push(v.i/r),k(t),t=v.next,g=v.next;else if((t=v)===g){p?1===p?i(t=s(n(t),e,r),e,r,u,c,f,2):2===p&&l(t,e,r,u,c,f):i(n(t),e,r,u,c,f,1);break}}}function a(t){var e=t.prev,r=t,n=t.next;if(g(e,r,n)>=0)return!1;for(var i=t.next.next;i!==t.prev;){if(d(e.x,e.y,r.x,r.y,n.x,n.y,i.x,i.y)&&g(i.prev,i,i.next)>=0)return!1;i=i.next}return!0}function o(t,e,r,n){var i=t.prev,a=t,o=t.next;if(g(i,a,o)>=0)return!1;for(var s=i.x<a.x?i.x<o.x?i.x:o.x:a.x<o.x?a.x:o.x,l=i.y<a.y?i.y<o.y?i.y:o.y:a.y<o.y?a.y:o.y,u=i.x>a.x?i.x>o.x?i.x:o.x:a.x>o.x?a.x:o.x,c=i.y>a.y?i.y>o.y?i.y:o.y:a.y>o.y?a.y:o.y,f=h(s,l,e,r,n),p=h(u,c,e,r,n),v=t.prevZ,y=t.nextZ;v&&v.z>=f&&y&&y.z<=p;){if(v!==t.prev&&v!==t.next&&d(i.x,i.y,a.x,a.y,o.x,o.y,v.x,v.y)&&g(v.prev,v,v.next)>=0)return!1;if(v=v.prevZ,y!==t.prev&&y!==t.next&&d(i.x,i.y,a.x,a.y,o.x,o.y,y.x,y.y)&&g(y.prev,y,y.next)>=0)return!1;y=y.nextZ}for(;v&&v.z>=f;){if(v!==t.prev&&v!==t.next&&d(i.x,i.y,a.x,a.y,o.x,o.y,v.x,v.y)&&g(v.prev,v,v.next)>=0)return!1;v=v.prevZ}for(;y&&y.z<=p;){if(y!==t.prev&&y!==t.next&&d(i.x,i.y,a.x,a.y,o.x,o.y,y.x,y.y)&&g(y.prev,y,y.next)>=0)return!1;y=y.nextZ}return!0}function s(t,e,r){var i=t;do{var a=i.prev,o=i.next.next;!y(a,o)&&m(a,i,i.next,o)&&_(a,o)&&_(o,a)&&(e.push(a.i/r),e.push(i.i/r),e.push(o.i/r),k(i),k(i.next),i=t=o),i=i.next}while(i!==t);return n(i)}function l(t,e,r,a,o,s){var l=t;do{for(var u=l.next.next;u!==l.prev;){if(l.i!==u.i&&v(l,u)){var c=w(l,u);return l=n(l,l.next),c=n(c,c.next),i(l,e,r,a,o,s),void i(c,e,r,a,o,s)}u=u.next}l=l.next}while(l!==t)}function u(t,e){return t.x-e.x}function c(t,e){if(e=function(t,e){var r,n=e,i=t.x,a=t.y,o=-1/0;do{if(a<=n.y&&a>=n.next.y&&n.next.y!==n.y){var s=n.x+(a-n.y)*(n.next.x-n.x)/(n.next.y-n.y);if(s<=i&&s>o){if(o=s,s===i){if(a===n.y)return n;if(a===n.next.y)return n.next}r=n.x<n.next.x?n:n.next}}n=n.next}while(n!==e);if(!r)return null;if(i===o)return r;var l,u=r,c=r.x,h=r.y,p=1/0;n=r;do{i>=n.x&&n.x>=c&&i!==n.x&&d(a<h?i:o,a,c,h,a<h?o:i,a,n.x,n.y)&&(l=Math.abs(a-n.y)/(i-n.x),_(n,t)&&(l<p||l===p&&(n.x>r.x||n.x===r.x&&f(r,n)))&&(r=n,p=l)),n=n.next}while(n!==u);return r}(t,e),e){var r=w(e,t);n(e,e.next),n(r,r.next)}}function f(t,e){return g(t.prev,t,e.prev)<0&&g(e.next,t,t.next)<0}function h(t,e,r,n,i){return(t=1431655765&((t=858993459&((t=252645135&((t=16711935&((t=32767*(t-r)*i)|t<<8))|t<<4))|t<<2))|t<<1))|(e=1431655765&((e=858993459&((e=252645135&((e=16711935&((e=32767*(e-n)*i)|e<<8))|e<<4))|e<<2))|e<<1))<<1}function p(t){var e=t,r=t;do{(e.x<r.x||e.x===r.x&&e.y<r.y)&&(r=e),e=e.next}while(e!==t);return r}function d(t,e,r,n,i,a,o,s){return(i-o)*(e-s)-(t-o)*(a-s)>=0&&(t-o)*(n-s)-(r-o)*(e-s)>=0&&(r-o)*(a-s)-(i-o)*(n-s)>=0}function v(t,e){return t.next.i!==e.i&&t.prev.i!==e.i&&!function(t,e){var r=t;do{if(r.i!==t.i&&r.next.i!==t.i&&r.i!==e.i&&r.next.i!==e.i&&m(r,r.next,t,e))return!0;r=r.next}while(r!==t);return!1}(t,e)&&(_(t,e)&&_(e,t)&&function(t,e){var r=t,n=!1,i=(t.x+e.x)/2,a=(t.y+e.y)/2;do{r.y>a!=r.next.y>a&&r.next.y!==r.y&&i<(r.next.x-r.x)*(a-r.y)/(r.next.y-r.y)+r.x&&(n=!n),r=r.next}while(r!==t);return n}(t,e)&&(g(t.prev,t,e.prev)||g(t,e.prev,e))||y(t,e)&&g(t.prev,t,t.next)>0&&g(e.prev,e,e.next)>0)}function g(t,e,r){return(e.y-t.y)*(r.x-e.x)-(e.x-t.x)*(r.y-e.y)}function y(t,e){return t.x===e.x&&t.y===e.y}function m(t,e,r,n){var i=b(g(t,e,r)),a=b(g(t,e,n)),o=b(g(r,n,t)),s=b(g(r,n,e));return i!==a&&o!==s||!(0!==i||!x(t,r,e))||!(0!==a||!x(t,n,e))||!(0!==o||!x(r,t,n))||!(0!==s||!x(r,e,n))}function x(t,e,r){return e.x<=Math.max(t.x,r.x)&&e.x>=Math.min(t.x,r.x)&&e.y<=Math.max(t.y,r.y)&&e.y>=Math.min(t.y,r.y)}function b(t){return t>0?1:t<0?-1:0}function _(t,e){return g(t.prev,t,t.next)<0?g(t,e,t.next)>=0&&g(t,t.prev,e)>=0:g(t,e,t.prev)<0||g(t,t.next,e)<0}function w(t,e){var r=new A(t.i,t.x,t.y),n=new A(e.i,e.x,e.y),i=t.next,a=e.prev;return t.next=e,e.prev=t,r.next=i,i.prev=r,n.next=r,r.prev=n,a.next=n,n.prev=a,n}function T(t,e,r,n){var i=new A(t,e,r);return n?(i.next=n.next,i.prev=n,n.next.prev=i,n.next=i):(i.prev=i,i.next=i),i}function k(t){t.next.prev=t.prev,t.prev.next=t.next,t.prevZ&&(t.prevZ.nextZ=t.nextZ),t.nextZ&&(t.nextZ.prevZ=t.prevZ)}function A(t,e,r){this.i=t,this.x=e,this.y=r,this.prev=null,this.next=null,this.z=null,this.prevZ=null,this.nextZ=null,this.steiner=!1}function M(t,e,r,n){for(var i=0,a=e,o=r-n;a<r;a+=n)i+=(t[o]-t[a])*(t[a+1]+t[o+1]),o=a;return i}t.exports=e,t.exports.default=e,e.deviation=function(t,e,r,n){var i=e&&e.length,a=i?e[0]*r:t.length,o=Math.abs(M(t,0,a,r));if(i)for(var s=0,l=e.length;s<l;s++){var u=e[s]*r,c=s<l-1?e[s+1]*r:t.length;o-=Math.abs(M(t,u,c,r))}var f=0;for(s=0;s<n.length;s+=3){var h=n[s]*r,p=n[s+1]*r,d=n[s+2]*r;f+=Math.abs((t[h]-t[d])*(t[p+1]-t[h+1])-(t[h]-t[p])*(t[d+1]-t[h+1]))}return 0===o&&0===f?0:Math.abs((f-o)/o)},e.flatten=function(t){for(var e=t[0][0].length,r={vertices:[],holes:[],dimensions:e},n=0,i=0;i<t.length;i++){for(var a=0;a<t[i].length;a++)for(var o=0;o<e;o++)r.vertices.push(t[i][a][o]);i>0&&(n+=t[i-1].length,r.holes.push(n))}return r}},2502:function(t,e,r){var n=r(68664);t.exports=function(t,e){var r,i=[],a=[],o=[],s={},l=[];function u(t){o[t]=!1,s.hasOwnProperty(t)&&Object.keys(s[t]).forEach((function(e){delete s[t][e],o[e]&&u(e)}))}function c(t){var e,n,i=!1;for(a.push(t),o[t]=!0,e=0;e<l[t].length;e++)(n=l[t][e])===r?(f(r,a),i=!0):o[n]||(i=c(n));if(i)u(t);else for(e=0;e<l[t].length;e++){n=l[t][e];var h=s[n];h||(h={},s[n]=h),h[n]=!0}return a.pop(),i}function f(t,r){var n=[].concat(r).concat(t);e?e(c):i.push(n)}function h(e){!function(e){for(var r=0;r<t.length;r++)r<e&&(t[r]=[]),t[r]=t[r].filter((function(t){return t>=e}))}(e);for(var r,i=n(t).components.filter((function(t){return t.length>1})),a=1/0,o=0;o<i.length;o++)for(var s=0;s<i[o].length;s++)i[o][s]<a&&(a=i[o][s],r=o);var l=i[r];if(!l)return!1;var u=t.map((function(t,e){return-1===l.indexOf(e)?[]:t.filter((function(t){return-1!==l.indexOf(t)}))}));return{leastVertex:a,adjList:u}}r=0;for(var p=t.length;r<p;){var d=h(r);if(r=d.leastVertex,l=d.adjList){for(var v=0;v<l.length;v++)for(var g=0;g<l[v].length;g++){var y=l[v][g];o[+y]=!1,s[y]={}}c(r),r+=1}else r=p}return e?void 0:i}},16134:function(t,e,r){\\\"use strict\\\";var n=r(36672);t.exports=function(){return n(this).length=0,this}},4892:function(t,e,r){\\\"use strict\\\";t.exports=r(64404)()?Array.from:r(49441)},64404:function(t){\\\"use strict\\\";t.exports=function(){var t,e,r=Array.from;return\\\"function\\\"==typeof r&&(e=r(t=[\\\"raz\\\",\\\"dwa\\\"]),Boolean(e&&e!==t&&\\\"dwa\\\"===e[1]))}},49441:function(t,e,r){\\\"use strict\\\";var n=r(8260).iterator,i=r(73051),a=r(33717),o=r(35976),s=r(78513),l=r(36672),u=r(95296),c=r(87963),f=Array.isArray,h=Function.prototype.call,p={configurable:!0,enumerable:!0,writable:!0,value:null},d=Object.defineProperty;t.exports=function(t){var e,r,v,g,y,m,x,b,_,w,T=arguments[1],k=arguments[2];if(t=Object(l(t)),u(T)&&s(T),this&&this!==Array&&a(this))e=this;else{if(!T){if(i(t))return 1!==(y=t.length)?Array.apply(null,t):((g=new Array(1))[0]=t[0],g);if(f(t)){for(g=new Array(y=t.length),r=0;r<y;++r)g[r]=t[r];return g}}g=[]}if(!f(t))if(void 0!==(_=t[n])){for(x=s(_).call(t),e&&(g=new e),b=x.next(),r=0;!b.done;)w=T?h.call(T,k,b.value,r):b.value,e?(p.value=w,d(g,r,p)):g[r]=w,b=x.next(),++r;y=r}else if(c(t)){for(y=t.length,e&&(g=new e),r=0,v=0;r<y;++r)w=t[r],r+1<y&&(m=w.charCodeAt(0))>=55296&&m<=56319&&(w+=t[++r]),w=T?h.call(T,k,w,v):w,e?(p.value=w,d(g,v,p)):g[v]=w,++v;y=v}if(void 0===y)for(y=o(t.length),e&&(g=new e(y)),r=0;r<y;++r)w=T?h.call(T,k,t[r],r):t[r],e?(p.value=w,d(g,r,p)):g[r]=w;return e&&(p.value=null,g.length=y),g}},73051:function(t){\\\"use strict\\\";var e=Object.prototype.toString,r=e.call(function(){return arguments}());t.exports=function(t){return e.call(t)===r}},33717:function(t){\\\"use strict\\\";var e=Object.prototype.toString,r=RegExp.prototype.test.bind(/^[object [A-Za-z0-9]*Function]$/);t.exports=function(t){return\\\"function\\\"==typeof t&&r(e.call(t))}},52345:function(t){\\\"use strict\\\";t.exports=function(){}},9953:function(t,e,r){\\\"use strict\\\";t.exports=r(90436)()?Math.sign:r(6069)},90436:function(t){\\\"use strict\\\";t.exports=function(){var t=Math.sign;return\\\"function\\\"==typeof t&&1===t(10)&&-1===t(-20)}},6069:function(t){\\\"use strict\\\";t.exports=function(t){return t=Number(t),isNaN(t)||0===t?t:t>0?1:-1}},56247:function(t,e,r){\\\"use strict\\\";var n=r(9953),i=Math.abs,a=Math.floor;t.exports=function(t){return isNaN(t)?0:0!==(t=Number(t))&&isFinite(t)?n(t)*a(i(t)):t}},35976:function(t,e,r){\\\"use strict\\\";var n=r(56247),i=Math.max;t.exports=function(t){return i(0,n(t))}},67260:function(t,e,r){\\\"use strict\\\";var n=r(78513),i=r(36672),a=Function.prototype.bind,o=Function.prototype.call,s=Object.keys,l=Object.prototype.propertyIsEnumerable;t.exports=function(t,e){return function(r,u){var c,f=arguments[2],h=arguments[3];return r=Object(i(r)),n(u),c=s(r),h&&c.sort(\\\"function\\\"==typeof h?a.call(h,r):void 0),\\\"function\\\"!=typeof t&&(t=c[t]),o.call(t,c,(function(t,n){return l.call(r,t)?o.call(u,f,r[t],t,r,n):e}))}}},95879:function(t,e,r){\\\"use strict\\\";t.exports=r(73583)()?Object.assign:r(34205)},73583:function(t){\\\"use strict\\\";t.exports=function(){var t,e=Object.assign;return\\\"function\\\"==typeof e&&(e(t={foo:\\\"raz\\\"},{bar:\\\"dwa\\\"},{trzy:\\\"trzy\\\"}),t.foo+t.bar+t.trzy===\\\"razdwatrzy\\\")}},34205:function(t,e,r){\\\"use strict\\\";var n=r(68700),i=r(36672),a=Math.max;t.exports=function(t,e){var r,o,s,l=a(arguments.length,2);for(t=Object(i(t)),s=function(n){try{t[n]=e[n]}catch(t){r||(r=t)}},o=1;o<l;++o)n(e=arguments[o]).forEach(s);if(void 0!==r)throw r;return t}},19012:function(t,e,r){\\\"use strict\\\";var n=r(4892),i=r(95879),a=r(36672);t.exports=function(t){var e=Object(a(t)),r=arguments[1],o=Object(arguments[2]);if(e!==t&&!r)return e;var s={};return r?n(r,(function(e){(o.ensure||e in t)&&(s[e]=t[e])})):i(s,t),s}},52818:function(t,e,r){\\\"use strict\\\";var n,i,a,o,s=Object.create;r(33247)()||(n=r(51882)),t.exports=n?1!==n.level?s:(i={},a={},o={configurable:!1,enumerable:!1,writable:!0,value:void 0},Object.getOwnPropertyNames(Object.prototype).forEach((function(t){a[t]=\\\"__proto__\\\"!==t?o:{configurable:!0,enumerable:!1,writable:!0,value:void 0}})),Object.defineProperties(i,a),Object.defineProperty(n,\\\"nullPolyfill\\\",{configurable:!1,enumerable:!1,writable:!1,value:i}),function(t,e){return s(null===t?i:t,e)}):s},96437:function(t,e,r){\\\"use strict\\\";t.exports=r(67260)(\\\"forEach\\\")},99611:function(t,e,r){\\\"use strict\\\";var n=r(95296),i={function:!0,object:!0};t.exports=function(t){return n(t)&&i[typeof t]||!1}},95296:function(t,e,r){\\\"use strict\\\";var n=r(52345)();t.exports=function(t){return t!==n&&null!==t}},68700:function(t,e,r){\\\"use strict\\\";t.exports=r(13895)()?Object.keys:r(25217)},13895:function(t){\\\"use strict\\\";t.exports=function(){try{return Object.keys(\\\"primitive\\\"),!0}catch(t){return!1}}},25217:function(t,e,r){\\\"use strict\\\";var n=r(95296),i=Object.keys;t.exports=function(t){return i(n(t)?Object(t):t)}},16906:function(t,e,r){\\\"use strict\\\";var n=r(78513),i=r(96437),a=Function.prototype.call;t.exports=function(t,e){var r={},o=arguments[2];return n(e),i(t,(function(t,n,i,s){r[n]=a.call(e,o,t,n,i,s)})),r}},21780:function(t,e,r){\\\"use strict\\\";var n=r(95296),i=Array.prototype.forEach,a=Object.create;t.exports=function(t){var e=a(null);return i.call(arguments,(function(t){n(t)&&function(t,e){var r;for(r in t)e[r]=t[r]}(Object(t),e)})),e}},1496:function(t,e,r){\\\"use strict\\\";t.exports=r(33247)()?Object.setPrototypeOf:r(51882)},33247:function(t){\\\"use strict\\\";var e=Object.create,r=Object.getPrototypeOf,n={};t.exports=function(){var t=Object.setPrototypeOf;return\\\"function\\\"==typeof t&&r(t((arguments[0]||e)(null),n))===n}},51882:function(t,e,r){\\\"use strict\\\";var n,i,a,o,s=r(99611),l=r(36672),u=Object.prototype.isPrototypeOf,c=Object.defineProperty,f={configurable:!0,enumerable:!1,writable:!0,value:void 0};n=function(t,e){if(l(t),null===e||s(e))return t;throw new TypeError(\\\"Prototype must be null or an object\\\")},t.exports=(i=function(){var t,e=Object.create(null),r={},n=Object.getOwnPropertyDescriptor(Object.prototype,\\\"__proto__\\\");if(n){try{(t=n.set).call(e,r)}catch(t){}if(Object.getPrototypeOf(e)===r)return{set:t,level:2}}return e.__proto__=r,Object.getPrototypeOf(e)===r?{level:2}:((e={}).__proto__=r,Object.getPrototypeOf(e)===r&&{level:1})}(),i?(2===i.level?i.set?(o=i.set,a=function(t,e){return o.call(n(t,e),e),t}):a=function(t,e){return n(t,e).__proto__=e,t}:a=function t(e,r){var i;return n(e,r),(i=u.call(t.nullPolyfill,e))&&delete t.nullPolyfill.__proto__,null===r&&(r=t.nullPolyfill),e.__proto__=r,i&&c(t.nullPolyfill,\\\"__proto__\\\",f),e},Object.defineProperty(a,\\\"level\\\",{configurable:!1,enumerable:!1,writable:!1,value:i.level})):null),r(52818)},78513:function(t){\\\"use strict\\\";t.exports=function(t){if(\\\"function\\\"!=typeof t)throw new TypeError(t+\\\" is not a function\\\");return t}},98976:function(t,e,r){\\\"use strict\\\";var n=r(99611);t.exports=function(t){if(!n(t))throw new TypeError(t+\\\" is not an Object\\\");return t}},36672:function(t,e,r){\\\"use strict\\\";var n=r(95296);t.exports=function(t){if(!n(t))throw new TypeError(\\\"Cannot use null or undefined\\\");return t}},66741:function(t,e,r){\\\"use strict\\\";t.exports=r(17557)()?String.prototype.contains:r(60381)},17557:function(t){\\\"use strict\\\";var e=\\\"razdwatrzy\\\";t.exports=function(){return\\\"function\\\"==typeof e.contains&&!0===e.contains(\\\"dwa\\\")&&!1===e.contains(\\\"foo\\\")}},60381:function(t){\\\"use strict\\\";var e=String.prototype.indexOf;t.exports=function(t){return e.call(this,t,arguments[1])>-1}},87963:function(t){\\\"use strict\\\";var e=Object.prototype.toString,r=e.call(\\\"\\\");t.exports=function(t){return\\\"string\\\"==typeof t||t&&\\\"object\\\"==typeof t&&(t instanceof String||e.call(t)===r)||!1}},43043:function(t){\\\"use strict\\\";var e=Object.create(null),r=Math.random;t.exports=function(){var t;do{t=r().toString(36).slice(2)}while(e[t]);return t}},32411:function(t,e,r){\\\"use strict\\\";var n,i=r(1496),a=r(66741),o=r(62072),s=r(8260),l=r(95426),u=Object.defineProperty;n=t.exports=function(t,e){if(!(this instanceof n))throw new TypeError(\\\"Constructor requires 'new'\\\");l.call(this,t),e=e?a.call(e,\\\"key+value\\\")?\\\"key+value\\\":a.call(e,\\\"key\\\")?\\\"key\\\":\\\"value\\\":\\\"value\\\",u(this,\\\"__kind__\\\",o(\\\"\\\",e))},i&&i(n,l),delete n.prototype.constructor,n.prototype=Object.create(l.prototype,{_resolve:o((function(t){return\\\"value\\\"===this.__kind__?this.__list__[t]:\\\"key+value\\\"===this.__kind__?[t,this.__list__[t]]:t}))}),u(n.prototype,s.toStringTag,o(\\\"c\\\",\\\"Array Iterator\\\"))},27515:function(t,e,r){\\\"use strict\\\";var n=r(73051),i=r(78513),a=r(87963),o=r(66661),s=Array.isArray,l=Function.prototype.call,u=Array.prototype.some;t.exports=function(t,e){var r,c,f,h,p,d,v,g,y=arguments[2];if(s(t)||n(t)?r=\\\"array\\\":a(t)?r=\\\"string\\\":t=o(t),i(e),f=function(){h=!0},\\\"array\\\"!==r)if(\\\"string\\\"!==r)for(c=t.next();!c.done;){if(l.call(e,y,c.value,f),h)return;c=t.next()}else for(d=t.length,p=0;p<d&&(v=t[p],p+1<d&&(g=v.charCodeAt(0))>=55296&&g<=56319&&(v+=t[++p]),l.call(e,y,v,f),!h);++p);else u.call(t,(function(t){return l.call(e,y,t,f),h}))}},66661:function(t,e,r){\\\"use strict\\\";var n=r(73051),i=r(87963),a=r(32411),o=r(259),s=r(58095),l=r(8260).iterator;t.exports=function(t){return\\\"function\\\"==typeof s(t)[l]?t[l]():n(t)?new a(t):i(t)?new o(t):new a(t)}},95426:function(t,e,r){\\\"use strict\\\";var n,i=r(16134),a=r(95879),o=r(78513),s=r(36672),l=r(62072),u=r(55174),c=r(8260),f=Object.defineProperty,h=Object.defineProperties;t.exports=n=function(t,e){if(!(this instanceof n))throw new TypeError(\\\"Constructor requires 'new'\\\");h(this,{__list__:l(\\\"w\\\",s(t)),__context__:l(\\\"w\\\",e),__nextIndex__:l(\\\"w\\\",0)}),e&&(o(e.on),e.on(\\\"_add\\\",this._onAdd),e.on(\\\"_delete\\\",this._onDelete),e.on(\\\"_clear\\\",this._onClear))},delete n.prototype.constructor,h(n.prototype,a({_next:l((function(){var t;if(this.__list__)return this.__redo__&&void 0!==(t=this.__redo__.shift())?t:this.__nextIndex__<this.__list__.length?this.__nextIndex__++:void this._unBind()})),next:l((function(){return this._createResult(this._next())})),_createResult:l((function(t){return void 0===t?{done:!0,value:void 0}:{done:!1,value:this._resolve(t)}})),_resolve:l((function(t){return this.__list__[t]})),_unBind:l((function(){this.__list__=null,delete this.__redo__,this.__context__&&(this.__context__.off(\\\"_add\\\",this._onAdd),this.__context__.off(\\\"_delete\\\",this._onDelete),this.__context__.off(\\\"_clear\\\",this._onClear),this.__context__=null)})),toString:l((function(){return\\\"[object \\\"+(this[c.toStringTag]||\\\"Object\\\")+\\\"]\\\"}))},u({_onAdd:l((function(t){t>=this.__nextIndex__||(++this.__nextIndex__,this.__redo__?(this.__redo__.forEach((function(e,r){e>=t&&(this.__redo__[r]=++e)}),this),this.__redo__.push(t)):f(this,\\\"__redo__\\\",l(\\\"c\\\",[t])))})),_onDelete:l((function(t){var e;t>=this.__nextIndex__||(--this.__nextIndex__,this.__redo__&&(-1!==(e=this.__redo__.indexOf(t))&&this.__redo__.splice(e,1),this.__redo__.forEach((function(e,r){e>t&&(this.__redo__[r]=--e)}),this)))})),_onClear:l((function(){this.__redo__&&i.call(this.__redo__),this.__nextIndex__=0}))}))),f(n.prototype,c.iterator,l((function(){return this})))},35940:function(t,e,r){\\\"use strict\\\";var n=r(73051),i=r(95296),a=r(87963),o=r(8260).iterator,s=Array.isArray;t.exports=function(t){return!(!i(t)||!s(t)&&!a(t)&&!n(t)&&\\\"function\\\"!=typeof t[o])}},259:function(t,e,r){\\\"use strict\\\";var n,i=r(1496),a=r(62072),o=r(8260),s=r(95426),l=Object.defineProperty;n=t.exports=function(t){if(!(this instanceof n))throw new TypeError(\\\"Constructor requires 'new'\\\");t=String(t),s.call(this,t),l(this,\\\"__length__\\\",a(\\\"\\\",t.length))},i&&i(n,s),delete n.prototype.constructor,n.prototype=Object.create(s.prototype,{_next:a((function(){if(this.__list__)return this.__nextIndex__<this.__length__?this.__nextIndex__++:void this._unBind()})),_resolve:a((function(t){var e,r=this.__list__[t];return this.__nextIndex__===this.__length__?r:(e=r.charCodeAt(0))>=55296&&e<=56319?r+this.__list__[this.__nextIndex__++]:r}))}),l(n.prototype,o.toStringTag,a(\\\"c\\\",\\\"String Iterator\\\"))},58095:function(t,e,r){\\\"use strict\\\";var n=r(35940);t.exports=function(t){if(!n(t))throw new TypeError(t+\\\" is not iterable\\\");return t}},73523:function(t){\\\"use strict\\\";function e(t,e){if(null==t)throw new TypeError(\\\"Cannot convert first argument to object\\\");for(var r=Object(t),n=1;n<arguments.length;n++){var i=arguments[n];if(null!=i)for(var a=Object.keys(Object(i)),o=0,s=a.length;o<s;o++){var l=a[o],u=Object.getOwnPropertyDescriptor(i,l);void 0!==u&&u.enumerable&&(r[l]=i[l])}}return r}t.exports={assign:e,polyfill:function(){Object.assign||Object.defineProperty(Object,\\\"assign\\\",{enumerable:!1,configurable:!0,writable:!0,value:e})}}},8260:function(t,e,r){\\\"use strict\\\";t.exports=r(69711)()?r(94908).Symbol:r(18415)},69711:function(t,e,r){\\\"use strict\\\";var n=r(94908),i={object:!0,symbol:!0};t.exports=function(){var t,e=n.Symbol;if(\\\"function\\\"!=typeof e)return!1;t=e(\\\"test symbol\\\");try{String(t)}catch(t){return!1}return!!i[typeof e.iterator]&&!!i[typeof e.toPrimitive]&&!!i[typeof e.toStringTag]}},82276:function(t){\\\"use strict\\\";t.exports=function(t){return!!t&&(\\\"symbol\\\"==typeof t||!!t.constructor&&\\\"Symbol\\\"===t.constructor.name&&\\\"Symbol\\\"===t[t.constructor.toStringTag])}},29366:function(t,e,r){\\\"use strict\\\";var n=r(62072),i=Object.create,a=Object.defineProperty,o=Object.prototype,s=i(null);t.exports=function(t){for(var e,r,i=0;s[t+(i||\\\"\\\")];)++i;return s[t+=i||\\\"\\\"]=!0,a(o,e=\\\"@@\\\"+t,n.gs(null,(function(t){r||(r=!0,a(this,e,n(t)),r=!1)}))),e}},92842:function(t,e,r){\\\"use strict\\\";var n=r(62072),i=r(94908).Symbol;t.exports=function(t){return Object.defineProperties(t,{hasInstance:n(\\\"\\\",i&&i.hasInstance||t(\\\"hasInstance\\\")),isConcatSpreadable:n(\\\"\\\",i&&i.isConcatSpreadable||t(\\\"isConcatSpreadable\\\")),iterator:n(\\\"\\\",i&&i.iterator||t(\\\"iterator\\\")),match:n(\\\"\\\",i&&i.match||t(\\\"match\\\")),replace:n(\\\"\\\",i&&i.replace||t(\\\"replace\\\")),search:n(\\\"\\\",i&&i.search||t(\\\"search\\\")),species:n(\\\"\\\",i&&i.species||t(\\\"species\\\")),split:n(\\\"\\\",i&&i.split||t(\\\"split\\\")),toPrimitive:n(\\\"\\\",i&&i.toPrimitive||t(\\\"toPrimitive\\\")),toStringTag:n(\\\"\\\",i&&i.toStringTag||t(\\\"toStringTag\\\")),unscopables:n(\\\"\\\",i&&i.unscopables||t(\\\"unscopables\\\"))})}},13304:function(t,e,r){\\\"use strict\\\";var n=r(62072),i=r(53308),a=Object.create(null);t.exports=function(t){return Object.defineProperties(t,{for:n((function(e){return a[e]?a[e]:a[e]=t(String(e))})),keyFor:n((function(t){var e;for(e in i(t),a)if(a[e]===t)return e}))})}},18415:function(t,e,r){\\\"use strict\\\";var n,i,a,o=r(62072),s=r(53308),l=r(94908).Symbol,u=r(29366),c=r(92842),f=r(13304),h=Object.create,p=Object.defineProperties,d=Object.defineProperty;if(\\\"function\\\"==typeof l)try{String(l()),a=!0}catch(t){}else l=null;i=function(t){if(this instanceof i)throw new TypeError(\\\"Symbol is not a constructor\\\");return n(t)},t.exports=n=function t(e){var r;if(this instanceof t)throw new TypeError(\\\"Symbol is not a constructor\\\");return a?l(e):(r=h(i.prototype),e=void 0===e?\\\"\\\":String(e),p(r,{__description__:o(\\\"\\\",e),__name__:o(\\\"\\\",u(e))}))},c(n),f(n),p(i.prototype,{constructor:o(n),toString:o(\\\"\\\",(function(){return this.__name__}))}),p(n.prototype,{toString:o((function(){return\\\"Symbol (\\\"+s(this).__description__+\\\")\\\"})),valueOf:o((function(){return s(this)}))}),d(n.prototype,n.toPrimitive,o(\\\"\\\",(function(){var t=s(this);return\\\"symbol\\\"==typeof t?t:t.toString()}))),d(n.prototype,n.toStringTag,o(\\\"c\\\",\\\"Symbol\\\")),d(i.prototype,n.toStringTag,o(\\\"c\\\",n.prototype[n.toStringTag])),d(i.prototype,n.toPrimitive,o(\\\"c\\\",n.prototype[n.toPrimitive]))},53308:function(t,e,r){\\\"use strict\\\";var n=r(82276);t.exports=function(t){if(!n(t))throw new TypeError(t+\\\" is not a symbol\\\");return t}},83522:function(t,e,r){\\\"use strict\\\";t.exports=r(96402)()?WeakMap:r(329)},96402:function(t){\\\"use strict\\\";t.exports=function(){var t,e;if(\\\"function\\\"!=typeof WeakMap)return!1;try{t=new WeakMap([[e={},\\\"one\\\"],[{},\\\"two\\\"],[{},\\\"three\\\"]])}catch(t){return!1}return\\\"[object WeakMap]\\\"===String(t)&&\\\"function\\\"==typeof t.set&&t.set({},1)===t&&\\\"function\\\"==typeof t.delete&&\\\"function\\\"==typeof t.has&&\\\"one\\\"===t.get(e)}},96416:function(t){\\\"use strict\\\";t.exports=\\\"function\\\"==typeof WeakMap&&\\\"[object WeakMap]\\\"===Object.prototype.toString.call(new WeakMap)},329:function(t,e,r){\\\"use strict\\\";var n,i=r(95296),a=r(1496),o=r(98976),s=r(36672),l=r(43043),u=r(62072),c=r(66661),f=r(27515),h=r(8260).toStringTag,p=r(96416),d=Array.isArray,v=Object.defineProperty,g=Object.prototype.hasOwnProperty,y=Object.getPrototypeOf;t.exports=n=function(){var t,e=arguments[0];if(!(this instanceof n))throw new TypeError(\\\"Constructor requires 'new'\\\");return t=p&&a&&WeakMap!==n?a(new WeakMap,y(this)):this,i(e)&&(d(e)||(e=c(e))),v(t,\\\"__weakMapData__\\\",u(\\\"c\\\",\\\"$weakMap$\\\"+l())),e?(f(e,(function(e){s(e),t.set(e[0],e[1])})),t):t},p&&(a&&a(n,WeakMap),n.prototype=Object.create(WeakMap.prototype,{constructor:u(n)})),Object.defineProperties(n.prototype,{delete:u((function(t){return!!g.call(o(t),this.__weakMapData__)&&(delete t[this.__weakMapData__],!0)})),get:u((function(t){if(g.call(o(t),this.__weakMapData__))return t[this.__weakMapData__]})),has:u((function(t){return g.call(o(t),this.__weakMapData__)})),set:u((function(t,e){return v(o(t),this.__weakMapData__,u(\\\"c\\\",e)),this})),toString:u((function(){return\\\"[object WeakMap]\\\"}))}),v(n.prototype,h,u(\\\"c\\\",\\\"WeakMap\\\"))},15398:function(t){\\\"use strict\\\";var e,r=\\\"object\\\"==typeof Reflect?Reflect:null,n=r&&\\\"function\\\"==typeof r.apply?r.apply:function(t,e,r){return Function.prototype.apply.call(t,e,r)};e=r&&\\\"function\\\"==typeof r.ownKeys?r.ownKeys:Object.getOwnPropertySymbols?function(t){return Object.getOwnPropertyNames(t).concat(Object.getOwnPropertySymbols(t))}:function(t){return Object.getOwnPropertyNames(t)};var i=Number.isNaN||function(t){return t!=t};function a(){a.init.call(this)}t.exports=a,t.exports.once=function(t,e){return new Promise((function(r,n){function i(r){t.removeListener(e,a),n(r)}function a(){\\\"function\\\"==typeof t.removeListener&&t.removeListener(\\\"error\\\",i),r([].slice.call(arguments))}v(t,e,a,{once:!0}),\\\"error\\\"!==e&&function(t,e,r){\\\"function\\\"==typeof t.on&&v(t,\\\"error\\\",e,{once:!0})}(t,i)}))},a.EventEmitter=a,a.prototype._events=void 0,a.prototype._eventsCount=0,a.prototype._maxListeners=void 0;var o=10;function s(t){if(\\\"function\\\"!=typeof t)throw new TypeError('The \\\"listener\\\" argument must be of type Function. Received type '+typeof t)}function l(t){return void 0===t._maxListeners?a.defaultMaxListeners:t._maxListeners}function u(t,e,r,n){var i,a,o,u;if(s(r),void 0===(a=t._events)?(a=t._events=Object.create(null),t._eventsCount=0):(void 0!==a.newListener&&(t.emit(\\\"newListener\\\",e,r.listener?r.listener:r),a=t._events),o=a[e]),void 0===o)o=a[e]=r,++t._eventsCount;else if(\\\"function\\\"==typeof o?o=a[e]=n?[r,o]:[o,r]:n?o.unshift(r):o.push(r),(i=l(t))>0&&o.length>i&&!o.warned){o.warned=!0;var c=new Error(\\\"Possible EventEmitter memory leak detected. \\\"+o.length+\\\" \\\"+String(e)+\\\" listeners added. Use emitter.setMaxListeners() to increase limit\\\");c.name=\\\"MaxListenersExceededWarning\\\",c.emitter=t,c.type=e,c.count=o.length,u=c,console&&console.warn&&console.warn(u)}return t}function c(){if(!this.fired)return this.target.removeListener(this.type,this.wrapFn),this.fired=!0,0===arguments.length?this.listener.call(this.target):this.listener.apply(this.target,arguments)}function f(t,e,r){var n={fired:!1,wrapFn:void 0,target:t,type:e,listener:r},i=c.bind(n);return i.listener=r,n.wrapFn=i,i}function h(t,e,r){var n=t._events;if(void 0===n)return[];var i=n[e];return void 0===i?[]:\\\"function\\\"==typeof i?r?[i.listener||i]:[i]:r?function(t){for(var e=new Array(t.length),r=0;r<e.length;++r)e[r]=t[r].listener||t[r];return e}(i):d(i,i.length)}function p(t){var e=this._events;if(void 0!==e){var r=e[t];if(\\\"function\\\"==typeof r)return 1;if(void 0!==r)return r.length}return 0}function d(t,e){for(var r=new Array(e),n=0;n<e;++n)r[n]=t[n];return r}function v(t,e,r,n){if(\\\"function\\\"==typeof t.on)n.once?t.once(e,r):t.on(e,r);else{if(\\\"function\\\"!=typeof t.addEventListener)throw new TypeError('The \\\"emitter\\\" argument must be of type EventEmitter. Received type '+typeof t);t.addEventListener(e,(function i(a){n.once&&t.removeEventListener(e,i),r(a)}))}}Object.defineProperty(a,\\\"defaultMaxListeners\\\",{enumerable:!0,get:function(){return o},set:function(t){if(\\\"number\\\"!=typeof t||t<0||i(t))throw new RangeError('The value of \\\"defaultMaxListeners\\\" is out of range. It must be a non-negative number. Received '+t+\\\".\\\");o=t}}),a.init=function(){void 0!==this._events&&this._events!==Object.getPrototypeOf(this)._events||(this._events=Object.create(null),this._eventsCount=0),this._maxListeners=this._maxListeners||void 0},a.prototype.setMaxListeners=function(t){if(\\\"number\\\"!=typeof t||t<0||i(t))throw new RangeError('The value of \\\"n\\\" is out of range. It must be a non-negative number. Received '+t+\\\".\\\");return this._maxListeners=t,this},a.prototype.getMaxListeners=function(){return l(this)},a.prototype.emit=function(t){for(var e=[],r=1;r<arguments.length;r++)e.push(arguments[r]);var i=\\\"error\\\"===t,a=this._events;if(void 0!==a)i=i&&void 0===a.error;else if(!i)return!1;if(i){var o;if(e.length>0&&(o=e[0]),o instanceof Error)throw o;var s=new Error(\\\"Unhandled error.\\\"+(o?\\\" (\\\"+o.message+\\\")\\\":\\\"\\\"));throw s.context=o,s}var l=a[t];if(void 0===l)return!1;if(\\\"function\\\"==typeof l)n(l,this,e);else{var u=l.length,c=d(l,u);for(r=0;r<u;++r)n(c[r],this,e)}return!0},a.prototype.addListener=function(t,e){return u(this,t,e,!1)},a.prototype.on=a.prototype.addListener,a.prototype.prependListener=function(t,e){return u(this,t,e,!0)},a.prototype.once=function(t,e){return s(e),this.on(t,f(this,t,e)),this},a.prototype.prependOnceListener=function(t,e){return s(e),this.prependListener(t,f(this,t,e)),this},a.prototype.removeListener=function(t,e){var r,n,i,a,o;if(s(e),void 0===(n=this._events))return this;if(void 0===(r=n[t]))return this;if(r===e||r.listener===e)0==--this._eventsCount?this._events=Object.create(null):(delete n[t],n.removeListener&&this.emit(\\\"removeListener\\\",t,r.listener||e));else if(\\\"function\\\"!=typeof r){for(i=-1,a=r.length-1;a>=0;a--)if(r[a]===e||r[a].listener===e){o=r[a].listener,i=a;break}if(i<0)return this;0===i?r.shift():function(t,e){for(;e+1<t.length;e++)t[e]=t[e+1];t.pop()}(r,i),1===r.length&&(n[t]=r[0]),void 0!==n.removeListener&&this.emit(\\\"removeListener\\\",t,o||e)}return this},a.prototype.off=a.prototype.removeListener,a.prototype.removeAllListeners=function(t){var e,r,n;if(void 0===(r=this._events))return this;if(void 0===r.removeListener)return 0===arguments.length?(this._events=Object.create(null),this._eventsCount=0):void 0!==r[t]&&(0==--this._eventsCount?this._events=Object.create(null):delete r[t]),this;if(0===arguments.length){var i,a=Object.keys(r);for(n=0;n<a.length;++n)\\\"removeListener\\\"!==(i=a[n])&&this.removeAllListeners(i);return this.removeAllListeners(\\\"removeListener\\\"),this._events=Object.create(null),this._eventsCount=0,this}if(\\\"function\\\"==typeof(e=r[t]))this.removeListener(t,e);else if(void 0!==e)for(n=e.length-1;n>=0;n--)this.removeListener(t,e[n]);return this},a.prototype.listeners=function(t){return h(this,t,!0)},a.prototype.rawListeners=function(t){return h(this,t,!1)},a.listenerCount=function(t,e){return\\\"function\\\"==typeof t.listenerCount?t.listenerCount(e):p.call(t,e)},a.prototype.listenerCount=p,a.prototype.eventNames=function(){return this._eventsCount>0?e(this._events):[]}},60774:function(t){var e=function(){if(\\\"object\\\"==typeof self&&self)return self;if(\\\"object\\\"==typeof window&&window)return window;throw new Error(\\\"Unable to resolve global `this`\\\")};t.exports=function(){if(this)return this;try{Object.defineProperty(Object.prototype,\\\"__global__\\\",{get:function(){return this},configurable:!0})}catch(t){return e()}try{return __global__||e()}finally{delete Object.prototype.__global__}}()},94908:function(t,e,r){\\\"use strict\\\";t.exports=r(51152)()?globalThis:r(60774)},51152:function(t){\\\"use strict\\\";t.exports=function(){return\\\"object\\\"==typeof globalThis&&!!globalThis&&globalThis.Array===Array}},92770:function(t,e,r){\\\"use strict\\\";var n=r(18546);t.exports=function(t){var e=typeof t;if(\\\"string\\\"===e){var r=t;if(0==(t=+t)&&n(r))return!1}else if(\\\"number\\\"!==e)return!1;return t-t<1}},30120:function(t,e,r){var n=r(90660);t.exports=function(t,e,r){if(!t)throw new TypeError(\\\"must specify data as first parameter\\\");if(r=0|+(r||0),Array.isArray(t)&&t[0]&&\\\"number\\\"==typeof t[0][0]){var i,a,o,s,l=t[0].length,u=t.length*l;e&&\\\"string\\\"!=typeof e||(e=new(n(e||\\\"float32\\\"))(u+r));var c=e.length-r;if(u!==c)throw new Error(\\\"source length \\\"+u+\\\" (\\\"+l+\\\"x\\\"+t.length+\\\") does not match destination length \\\"+c);for(i=0,o=r;i<t.length;i++)for(a=0;a<l;a++)e[o++]=null===t[i][a]?NaN:t[i][a]}else if(e&&\\\"string\\\"!=typeof e)e.set(t,r);else{var f=n(e||\\\"float32\\\");if(Array.isArray(t)||\\\"array\\\"===e)for(i=0,o=r,s=(e=new f(t.length+r)).length;o<s;o++,i++)e[o]=null===t[i]?NaN:t[i];else 0===r?e=new f(t):(e=new f(t.length+r)).set(t,r)}return e}},68016:function(t,e,r){\\\"use strict\\\";var n=r(53313),i=[32,126];t.exports=function(t){var e=(t=t||{}).shape?t.shape:t.canvas?[t.canvas.width,t.canvas.height]:[512,512],r=t.canvas||document.createElement(\\\"canvas\\\"),a=t.font,o=\\\"number\\\"==typeof t.step?[t.step,t.step]:t.step||[32,32],s=t.chars||i;if(a&&\\\"string\\\"!=typeof a&&(a=n(a)),Array.isArray(s)){if(2===s.length&&\\\"number\\\"==typeof s[0]&&\\\"number\\\"==typeof s[1]){for(var l=[],u=s[0],c=0;u<=s[1];u++)l[c++]=String.fromCharCode(u);s=l}}else s=String(s).split(\\\"\\\");e=e.slice(),r.width=e[0],r.height=e[1];var f=r.getContext(\\\"2d\\\");f.fillStyle=\\\"#000\\\",f.fillRect(0,0,r.width,r.height),f.font=a,f.textAlign=\\\"center\\\",f.textBaseline=\\\"middle\\\",f.fillStyle=\\\"#fff\\\";var h=o[0]/2,p=o[1]/2;for(u=0;u<s.length;u++)f.fillText(s[u],h,p),(h+=o[0])>e[0]-o[0]/2&&(h=o[0]/2,p+=o[1]);return r}},32879:function(t){\\\"use strict\\\";function e(t,a){a||(a={}),(\\\"string\\\"==typeof t||Array.isArray(t))&&(a.family=t);var o=Array.isArray(a.family)?a.family.join(\\\", \\\"):a.family;if(!o)throw Error(\\\"`family` must be defined\\\");var s=a.size||a.fontSize||a.em||48,l=a.weight||a.fontWeight||\\\"\\\",u=(t=[a.style||a.fontStyle||\\\"\\\",l,s].join(\\\" \\\")+\\\"px \\\"+o,a.origin||\\\"top\\\");if(e.cache[o]&&s<=e.cache[o].em)return r(e.cache[o],u);var c=a.canvas||e.canvas,f=c.getContext(\\\"2d\\\"),h={upper:void 0!==a.upper?a.upper:\\\"H\\\",lower:void 0!==a.lower?a.lower:\\\"x\\\",descent:void 0!==a.descent?a.descent:\\\"p\\\",ascent:void 0!==a.ascent?a.ascent:\\\"h\\\",tittle:void 0!==a.tittle?a.tittle:\\\"i\\\",overshoot:void 0!==a.overshoot?a.overshoot:\\\"O\\\"},p=Math.ceil(1.5*s);c.height=p,c.width=.5*p,f.font=t;var d=\\\"H\\\",v={top:0};f.clearRect(0,0,p,p),f.textBaseline=\\\"top\\\",f.fillStyle=\\\"black\\\",f.fillText(d,0,0);var g=n(f.getImageData(0,0,p,p));f.clearRect(0,0,p,p),f.textBaseline=\\\"bottom\\\",f.fillText(d,0,p);var y=n(f.getImageData(0,0,p,p));v.lineHeight=v.bottom=p-y+g,f.clearRect(0,0,p,p),f.textBaseline=\\\"alphabetic\\\",f.fillText(d,0,p);var m=p-n(f.getImageData(0,0,p,p))-1+g;v.baseline=v.alphabetic=m,f.clearRect(0,0,p,p),f.textBaseline=\\\"middle\\\",f.fillText(d,0,.5*p);var x=n(f.getImageData(0,0,p,p));v.median=v.middle=p-x-1+g-.5*p,f.clearRect(0,0,p,p),f.textBaseline=\\\"hanging\\\",f.fillText(d,0,.5*p);var b=n(f.getImageData(0,0,p,p));v.hanging=p-b-1+g-.5*p,f.clearRect(0,0,p,p),f.textBaseline=\\\"ideographic\\\",f.fillText(d,0,p);var _=n(f.getImageData(0,0,p,p));if(v.ideographic=p-_-1+g,h.upper&&(f.clearRect(0,0,p,p),f.textBaseline=\\\"top\\\",f.fillText(h.upper,0,0),v.upper=n(f.getImageData(0,0,p,p)),v.capHeight=v.baseline-v.upper),h.lower&&(f.clearRect(0,0,p,p),f.textBaseline=\\\"top\\\",f.fillText(h.lower,0,0),v.lower=n(f.getImageData(0,0,p,p)),v.xHeight=v.baseline-v.lower),h.tittle&&(f.clearRect(0,0,p,p),f.textBaseline=\\\"top\\\",f.fillText(h.tittle,0,0),v.tittle=n(f.getImageData(0,0,p,p))),h.ascent&&(f.clearRect(0,0,p,p),f.textBaseline=\\\"top\\\",f.fillText(h.ascent,0,0),v.ascent=n(f.getImageData(0,0,p,p))),h.descent&&(f.clearRect(0,0,p,p),f.textBaseline=\\\"top\\\",f.fillText(h.descent,0,0),v.descent=i(f.getImageData(0,0,p,p))),h.overshoot){f.clearRect(0,0,p,p),f.textBaseline=\\\"top\\\",f.fillText(h.overshoot,0,0);var w=i(f.getImageData(0,0,p,p));v.overshoot=w-m}for(var T in v)v[T]/=s;return v.em=s,e.cache[o]=v,r(v,u)}function r(t,e){var r={};for(var n in\\\"string\\\"==typeof e&&(e=t[e]),t)\\\"em\\\"!==n&&(r[n]=t[n]-e);return r}function n(t){for(var e=t.height,r=t.data,n=3;n<r.length;n+=4)if(0!==r[n])return Math.floor(.25*(n-3)/e)}function i(t){for(var e=t.height,r=t.data,n=r.length-1;n>0;n-=4)if(0!==r[n])return Math.floor(.25*(n-3)/e)}t.exports=e,e.canvas=document.createElement(\\\"canvas\\\"),e.cache={}},31353:function(t,e,r){\\\"use strict\\\";var n=r(85395),i=Object.prototype.toString,a=Object.prototype.hasOwnProperty;t.exports=function(t,e,r){if(!n(e))throw new TypeError(\\\"iterator must be a function\\\");var o;arguments.length>=3&&(o=r),\\\"[object Array]\\\"===i.call(t)?function(t,e,r){for(var n=0,i=t.length;n<i;n++)a.call(t,n)&&(null==r?e(t[n],n,t):e.call(r,t[n],n,t))}(t,e,o):\\\"string\\\"==typeof t?function(t,e,r){for(var n=0,i=t.length;n<i;n++)null==r?e(t.charAt(n),n,t):e.call(r,t.charAt(n),n,t)}(t,e,o):function(t,e,r){for(var n in t)a.call(t,n)&&(null==r?e(t[n],n,t):e.call(r,t[n],n,t))}(t,e,o)}},73047:function(t){\\\"use strict\\\";var e=Array.prototype.slice,r=Object.prototype.toString;t.exports=function(t){var n=this;if(\\\"function\\\"!=typeof n||\\\"[object Function]\\\"!==r.call(n))throw new TypeError(\\\"Function.prototype.bind called on incompatible \\\"+n);for(var i,a=e.call(arguments,1),o=Math.max(0,n.length-a.length),s=[],l=0;l<o;l++)s.push(\\\"$\\\"+l);if(i=Function(\\\"binder\\\",\\\"return function (\\\"+s.join(\\\",\\\")+\\\"){ return binder.apply(this,arguments); }\\\")((function(){if(this instanceof i){var r=n.apply(this,a.concat(e.call(arguments)));return Object(r)===r?r:this}return n.apply(t,a.concat(e.call(arguments)))})),n.prototype){var u=function(){};u.prototype=n.prototype,i.prototype=new u,u.prototype=null}return i}},77575:function(t,e,r){\\\"use strict\\\";var n=r(73047);t.exports=Function.prototype.bind||n},86249:function(t){t.exports=function(t,e){if(\\\"string\\\"!=typeof t)throw new TypeError(\\\"must specify type string\\\");if(e=e||{},\\\"undefined\\\"==typeof document&&!e.canvas)return null;var r=e.canvas||document.createElement(\\\"canvas\\\");\\\"number\\\"==typeof e.width&&(r.width=e.width),\\\"number\\\"==typeof e.height&&(r.height=e.height);var n,i=e;try{var a=[t];0===t.indexOf(\\\"webgl\\\")&&a.push(\\\"experimental-\\\"+t);for(var o=0;o<a.length;o++)if(n=r.getContext(a[o],i))return n}catch(t){n=null}return n||null}},68318:function(t,e,r){\\\"use strict\\\";var n,i=SyntaxError,a=Function,o=TypeError,s=function(t){try{return a('\\\"use strict\\\"; return ('+t+\\\").constructor;\\\")()}catch(t){}},l=Object.getOwnPropertyDescriptor;if(l)try{l({},\\\"\\\")}catch(t){l=null}var u=function(){throw new o},c=l?function(){try{return u}catch(t){try{return l(arguments,\\\"callee\\\").get}catch(t){return u}}}():u,f=r(57877)(),h=Object.getPrototypeOf||function(t){return t.__proto__},p={},d=\\\"undefined\\\"==typeof Uint8Array?n:h(Uint8Array),v={\\\"%AggregateError%\\\":\\\"undefined\\\"==typeof AggregateError?n:AggregateError,\\\"%Array%\\\":Array,\\\"%ArrayBuffer%\\\":\\\"undefined\\\"==typeof ArrayBuffer?n:ArrayBuffer,\\\"%ArrayIteratorPrototype%\\\":f?h([][Symbol.iterator]()):n,\\\"%AsyncFromSyncIteratorPrototype%\\\":n,\\\"%AsyncFunction%\\\":p,\\\"%AsyncGenerator%\\\":p,\\\"%AsyncGeneratorFunction%\\\":p,\\\"%AsyncIteratorPrototype%\\\":p,\\\"%Atomics%\\\":\\\"undefined\\\"==typeof Atomics?n:Atomics,\\\"%BigInt%\\\":\\\"undefined\\\"==typeof BigInt?n:BigInt,\\\"%BigInt64Array%\\\":\\\"undefined\\\"==typeof BigInt64Array?n:BigInt64Array,\\\"%BigUint64Array%\\\":\\\"undefined\\\"==typeof BigUint64Array?n:BigUint64Array,\\\"%Boolean%\\\":Boolean,\\\"%DataView%\\\":\\\"undefined\\\"==typeof DataView?n:DataView,\\\"%Date%\\\":Date,\\\"%decodeURI%\\\":decodeURI,\\\"%decodeURIComponent%\\\":decodeURIComponent,\\\"%encodeURI%\\\":encodeURI,\\\"%encodeURIComponent%\\\":encodeURIComponent,\\\"%Error%\\\":Error,\\\"%eval%\\\":eval,\\\"%EvalError%\\\":EvalError,\\\"%Float32Array%\\\":\\\"undefined\\\"==typeof Float32Array?n:Float32Array,\\\"%Float64Array%\\\":\\\"undefined\\\"==typeof Float64Array?n:Float64Array,\\\"%FinalizationRegistry%\\\":\\\"undefined\\\"==typeof FinalizationRegistry?n:FinalizationRegistry,\\\"%Function%\\\":a,\\\"%GeneratorFunction%\\\":p,\\\"%Int8Array%\\\":\\\"undefined\\\"==typeof Int8Array?n:Int8Array,\\\"%Int16Array%\\\":\\\"undefined\\\"==typeof Int16Array?n:Int16Array,\\\"%Int32Array%\\\":\\\"undefined\\\"==typeof Int32Array?n:Int32Array,\\\"%isFinite%\\\":isFinite,\\\"%isNaN%\\\":isNaN,\\\"%IteratorPrototype%\\\":f?h(h([][Symbol.iterator]())):n,\\\"%JSON%\\\":\\\"object\\\"==typeof JSON?JSON:n,\\\"%Map%\\\":\\\"undefined\\\"==typeof Map?n:Map,\\\"%MapIteratorPrototype%\\\":\\\"undefined\\\"!=typeof Map&&f?h((new Map)[Symbol.iterator]()):n,\\\"%Math%\\\":Math,\\\"%Number%\\\":Number,\\\"%Object%\\\":Object,\\\"%parseFloat%\\\":parseFloat,\\\"%parseInt%\\\":parseInt,\\\"%Promise%\\\":\\\"undefined\\\"==typeof Promise?n:Promise,\\\"%Proxy%\\\":\\\"undefined\\\"==typeof Proxy?n:Proxy,\\\"%RangeError%\\\":RangeError,\\\"%ReferenceError%\\\":ReferenceError,\\\"%Reflect%\\\":\\\"undefined\\\"==typeof Reflect?n:Reflect,\\\"%RegExp%\\\":RegExp,\\\"%Set%\\\":\\\"undefined\\\"==typeof Set?n:Set,\\\"%SetIteratorPrototype%\\\":\\\"undefined\\\"!=typeof Set&&f?h((new Set)[Symbol.iterator]()):n,\\\"%SharedArrayBuffer%\\\":\\\"undefined\\\"==typeof SharedArrayBuffer?n:SharedArrayBuffer,\\\"%String%\\\":String,\\\"%StringIteratorPrototype%\\\":f?h(\\\"\\\"[Symbol.iterator]()):n,\\\"%Symbol%\\\":f?Symbol:n,\\\"%SyntaxError%\\\":i,\\\"%ThrowTypeError%\\\":c,\\\"%TypedArray%\\\":d,\\\"%TypeError%\\\":o,\\\"%Uint8Array%\\\":\\\"undefined\\\"==typeof Uint8Array?n:Uint8Array,\\\"%Uint8ClampedArray%\\\":\\\"undefined\\\"==typeof Uint8ClampedArray?n:Uint8ClampedArray,\\\"%Uint16Array%\\\":\\\"undefined\\\"==typeof Uint16Array?n:Uint16Array,\\\"%Uint32Array%\\\":\\\"undefined\\\"==typeof Uint32Array?n:Uint32Array,\\\"%URIError%\\\":URIError,\\\"%WeakMap%\\\":\\\"undefined\\\"==typeof WeakMap?n:WeakMap,\\\"%WeakRef%\\\":\\\"undefined\\\"==typeof WeakRef?n:WeakRef,\\\"%WeakSet%\\\":\\\"undefined\\\"==typeof WeakSet?n:WeakSet};try{null.error}catch(t){var g=h(h(t));v[\\\"%Error.prototype%\\\"]=g}var y=function t(e){var r;if(\\\"%AsyncFunction%\\\"===e)r=s(\\\"async function () {}\\\");else if(\\\"%GeneratorFunction%\\\"===e)r=s(\\\"function* () {}\\\");else if(\\\"%AsyncGeneratorFunction%\\\"===e)r=s(\\\"async function* () {}\\\");else if(\\\"%AsyncGenerator%\\\"===e){var n=t(\\\"%AsyncGeneratorFunction%\\\");n&&(r=n.prototype)}else if(\\\"%AsyncIteratorPrototype%\\\"===e){var i=t(\\\"%AsyncGenerator%\\\");i&&(r=h(i.prototype))}return v[e]=r,r},m={\\\"%ArrayBufferPrototype%\\\":[\\\"ArrayBuffer\\\",\\\"prototype\\\"],\\\"%ArrayPrototype%\\\":[\\\"Array\\\",\\\"prototype\\\"],\\\"%ArrayProto_entries%\\\":[\\\"Array\\\",\\\"prototype\\\",\\\"entries\\\"],\\\"%ArrayProto_forEach%\\\":[\\\"Array\\\",\\\"prototype\\\",\\\"forEach\\\"],\\\"%ArrayProto_keys%\\\":[\\\"Array\\\",\\\"prototype\\\",\\\"keys\\\"],\\\"%ArrayProto_values%\\\":[\\\"Array\\\",\\\"prototype\\\",\\\"values\\\"],\\\"%AsyncFunctionPrototype%\\\":[\\\"AsyncFunction\\\",\\\"prototype\\\"],\\\"%AsyncGenerator%\\\":[\\\"AsyncGeneratorFunction\\\",\\\"prototype\\\"],\\\"%AsyncGeneratorPrototype%\\\":[\\\"AsyncGeneratorFunction\\\",\\\"prototype\\\",\\\"prototype\\\"],\\\"%BooleanPrototype%\\\":[\\\"Boolean\\\",\\\"prototype\\\"],\\\"%DataViewPrototype%\\\":[\\\"DataView\\\",\\\"prototype\\\"],\\\"%DatePrototype%\\\":[\\\"Date\\\",\\\"prototype\\\"],\\\"%ErrorPrototype%\\\":[\\\"Error\\\",\\\"prototype\\\"],\\\"%EvalErrorPrototype%\\\":[\\\"EvalError\\\",\\\"prototype\\\"],\\\"%Float32ArrayPrototype%\\\":[\\\"Float32Array\\\",\\\"prototype\\\"],\\\"%Float64ArrayPrototype%\\\":[\\\"Float64Array\\\",\\\"prototype\\\"],\\\"%FunctionPrototype%\\\":[\\\"Function\\\",\\\"prototype\\\"],\\\"%Generator%\\\":[\\\"GeneratorFunction\\\",\\\"prototype\\\"],\\\"%GeneratorPrototype%\\\":[\\\"GeneratorFunction\\\",\\\"prototype\\\",\\\"prototype\\\"],\\\"%Int8ArrayPrototype%\\\":[\\\"Int8Array\\\",\\\"prototype\\\"],\\\"%Int16ArrayPrototype%\\\":[\\\"Int16Array\\\",\\\"prototype\\\"],\\\"%Int32ArrayPrototype%\\\":[\\\"Int32Array\\\",\\\"prototype\\\"],\\\"%JSONParse%\\\":[\\\"JSON\\\",\\\"parse\\\"],\\\"%JSONStringify%\\\":[\\\"JSON\\\",\\\"stringify\\\"],\\\"%MapPrototype%\\\":[\\\"Map\\\",\\\"prototype\\\"],\\\"%NumberPrototype%\\\":[\\\"Number\\\",\\\"prototype\\\"],\\\"%ObjectPrototype%\\\":[\\\"Object\\\",\\\"prototype\\\"],\\\"%ObjProto_toString%\\\":[\\\"Object\\\",\\\"prototype\\\",\\\"toString\\\"],\\\"%ObjProto_valueOf%\\\":[\\\"Object\\\",\\\"prototype\\\",\\\"valueOf\\\"],\\\"%PromisePrototype%\\\":[\\\"Promise\\\",\\\"prototype\\\"],\\\"%PromiseProto_then%\\\":[\\\"Promise\\\",\\\"prototype\\\",\\\"then\\\"],\\\"%Promise_all%\\\":[\\\"Promise\\\",\\\"all\\\"],\\\"%Promise_reject%\\\":[\\\"Promise\\\",\\\"reject\\\"],\\\"%Promise_resolve%\\\":[\\\"Promise\\\",\\\"resolve\\\"],\\\"%RangeErrorPrototype%\\\":[\\\"RangeError\\\",\\\"prototype\\\"],\\\"%ReferenceErrorPrototype%\\\":[\\\"ReferenceError\\\",\\\"prototype\\\"],\\\"%RegExpPrototype%\\\":[\\\"RegExp\\\",\\\"prototype\\\"],\\\"%SetPrototype%\\\":[\\\"Set\\\",\\\"prototype\\\"],\\\"%SharedArrayBufferPrototype%\\\":[\\\"SharedArrayBuffer\\\",\\\"prototype\\\"],\\\"%StringPrototype%\\\":[\\\"String\\\",\\\"prototype\\\"],\\\"%SymbolPrototype%\\\":[\\\"Symbol\\\",\\\"prototype\\\"],\\\"%SyntaxErrorPrototype%\\\":[\\\"SyntaxError\\\",\\\"prototype\\\"],\\\"%TypedArrayPrototype%\\\":[\\\"TypedArray\\\",\\\"prototype\\\"],\\\"%TypeErrorPrototype%\\\":[\\\"TypeError\\\",\\\"prototype\\\"],\\\"%Uint8ArrayPrototype%\\\":[\\\"Uint8Array\\\",\\\"prototype\\\"],\\\"%Uint8ClampedArrayPrototype%\\\":[\\\"Uint8ClampedArray\\\",\\\"prototype\\\"],\\\"%Uint16ArrayPrototype%\\\":[\\\"Uint16Array\\\",\\\"prototype\\\"],\\\"%Uint32ArrayPrototype%\\\":[\\\"Uint32Array\\\",\\\"prototype\\\"],\\\"%URIErrorPrototype%\\\":[\\\"URIError\\\",\\\"prototype\\\"],\\\"%WeakMapPrototype%\\\":[\\\"WeakMap\\\",\\\"prototype\\\"],\\\"%WeakSetPrototype%\\\":[\\\"WeakSet\\\",\\\"prototype\\\"]},x=r(77575),b=r(35065),_=x.call(Function.call,Array.prototype.concat),w=x.call(Function.apply,Array.prototype.splice),T=x.call(Function.call,String.prototype.replace),k=x.call(Function.call,String.prototype.slice),A=x.call(Function.call,RegExp.prototype.exec),M=/[^%.[\\\\]]+|\\\\[(?:(-?\\\\d+(?:\\\\.\\\\d+)?)|([\\\"'])((?:(?!\\\\2)[^\\\\\\\\]|\\\\\\\\.)*?)\\\\2)\\\\]|(?=(?:\\\\.|\\\\[\\\\])(?:\\\\.|\\\\[\\\\]|%$))/g,S=/\\\\\\\\(\\\\\\\\)?/g,E=function(t,e){var r,n=t;if(b(m,n)&&(n=\\\"%\\\"+(r=m[n])[0]+\\\"%\\\"),b(v,n)){var a=v[n];if(a===p&&(a=y(n)),void 0===a&&!e)throw new o(\\\"intrinsic \\\"+t+\\\" exists, but is not available. Please file an issue!\\\");return{alias:r,name:n,value:a}}throw new i(\\\"intrinsic \\\"+t+\\\" does not exist!\\\")};t.exports=function(t,e){if(\\\"string\\\"!=typeof t||0===t.length)throw new o(\\\"intrinsic name must be a non-empty string\\\");if(arguments.length>1&&\\\"boolean\\\"!=typeof e)throw new o('\\\"allowMissing\\\" argument must be a boolean');if(null===A(/^%?[^%]*%?$/,t))throw new i(\\\"`%` may not be present anywhere but at the beginning and end of the intrinsic name\\\");var r=function(t){var e=k(t,0,1),r=k(t,-1);if(\\\"%\\\"===e&&\\\"%\\\"!==r)throw new i(\\\"invalid intrinsic syntax, expected closing `%`\\\");if(\\\"%\\\"===r&&\\\"%\\\"!==e)throw new i(\\\"invalid intrinsic syntax, expected opening `%`\\\");var n=[];return T(t,M,(function(t,e,r,i){n[n.length]=r?T(i,S,\\\"$1\\\"):e||t})),n}(t),n=r.length>0?r[0]:\\\"\\\",a=E(\\\"%\\\"+n+\\\"%\\\",e),s=a.name,u=a.value,c=!1,f=a.alias;f&&(n=f[0],w(r,_([0,1],f)));for(var h=1,p=!0;h<r.length;h+=1){var d=r[h],g=k(d,0,1),y=k(d,-1);if(('\\\"'===g||\\\"'\\\"===g||\\\"`\\\"===g||'\\\"'===y||\\\"'\\\"===y||\\\"`\\\"===y)&&g!==y)throw new i(\\\"property names with quotes must have matching quotes\\\");if(\\\"constructor\\\"!==d&&p||(c=!0),b(v,s=\\\"%\\\"+(n+=\\\".\\\"+d)+\\\"%\\\"))u=v[s];else if(null!=u){if(!(d in u)){if(!e)throw new o(\\\"base intrinsic for \\\"+t+\\\" exists, but the property is not available.\\\");return}if(l&&h+1>=r.length){var m=l(u,d);u=(p=!!m)&&\\\"get\\\"in m&&!(\\\"originalValue\\\"in m.get)?m.get:u[d]}else p=b(u,d),u=u[d];p&&!c&&(v[s]=u)}}return u}},85400:function(t){t.exports=function(t,e){var r=e[0],n=e[1],i=e[2],a=e[3],o=e[4],s=e[5],l=e[6],u=e[7],c=e[8],f=e[9],h=e[10],p=e[11],d=e[12],v=e[13],g=e[14],y=e[15];return t[0]=s*(h*y-p*g)-f*(l*y-u*g)+v*(l*p-u*h),t[1]=-(n*(h*y-p*g)-f*(i*y-a*g)+v*(i*p-a*h)),t[2]=n*(l*y-u*g)-s*(i*y-a*g)+v*(i*u-a*l),t[3]=-(n*(l*p-u*h)-s*(i*p-a*h)+f*(i*u-a*l)),t[4]=-(o*(h*y-p*g)-c*(l*y-u*g)+d*(l*p-u*h)),t[5]=r*(h*y-p*g)-c*(i*y-a*g)+d*(i*p-a*h),t[6]=-(r*(l*y-u*g)-o*(i*y-a*g)+d*(i*u-a*l)),t[7]=r*(l*p-u*h)-o*(i*p-a*h)+c*(i*u-a*l),t[8]=o*(f*y-p*v)-c*(s*y-u*v)+d*(s*p-u*f),t[9]=-(r*(f*y-p*v)-c*(n*y-a*v)+d*(n*p-a*f)),t[10]=r*(s*y-u*v)-o*(n*y-a*v)+d*(n*u-a*s),t[11]=-(r*(s*p-u*f)-o*(n*p-a*f)+c*(n*u-a*s)),t[12]=-(o*(f*g-h*v)-c*(s*g-l*v)+d*(s*h-l*f)),t[13]=r*(f*g-h*v)-c*(n*g-i*v)+d*(n*h-i*f),t[14]=-(r*(s*g-l*v)-o*(n*g-i*v)+d*(n*l-i*s)),t[15]=r*(s*h-l*f)-o*(n*h-i*f)+c*(n*l-i*s),t}},42331:function(t){t.exports=function(t){var e=new Float32Array(16);return e[0]=t[0],e[1]=t[1],e[2]=t[2],e[3]=t[3],e[4]=t[4],e[5]=t[5],e[6]=t[6],e[7]=t[7],e[8]=t[8],e[9]=t[9],e[10]=t[10],e[11]=t[11],e[12]=t[12],e[13]=t[13],e[14]=t[14],e[15]=t[15],e}},31042:function(t){t.exports=function(t,e){return t[0]=e[0],t[1]=e[1],t[2]=e[2],t[3]=e[3],t[4]=e[4],t[5]=e[5],t[6]=e[6],t[7]=e[7],t[8]=e[8],t[9]=e[9],t[10]=e[10],t[11]=e[11],t[12]=e[12],t[13]=e[13],t[14]=e[14],t[15]=e[15],t}},11902:function(t){t.exports=function(){var t=new Float32Array(16);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t}},89887:function(t){t.exports=function(t){var e=t[0],r=t[1],n=t[2],i=t[3],a=t[4],o=t[5],s=t[6],l=t[7],u=t[8],c=t[9],f=t[10],h=t[11],p=t[12],d=t[13],v=t[14],g=t[15];return(e*o-r*a)*(f*g-h*v)-(e*s-n*a)*(c*g-h*d)+(e*l-i*a)*(c*v-f*d)+(r*s-n*o)*(u*g-h*p)-(r*l-i*o)*(u*v-f*p)+(n*l-i*s)*(u*d-c*p)}},27812:function(t){t.exports=function(t,e){var r=e[0],n=e[1],i=e[2],a=e[3],o=r+r,s=n+n,l=i+i,u=r*o,c=n*o,f=n*s,h=i*o,p=i*s,d=i*l,v=a*o,g=a*s,y=a*l;return t[0]=1-f-d,t[1]=c+y,t[2]=h-g,t[3]=0,t[4]=c-y,t[5]=1-u-d,t[6]=p+v,t[7]=0,t[8]=h+g,t[9]=p-v,t[10]=1-u-f,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t}},34045:function(t){t.exports=function(t,e,r){var n,i,a,o=r[0],s=r[1],l=r[2],u=Math.sqrt(o*o+s*s+l*l);return Math.abs(u)<1e-6?null:(o*=u=1/u,s*=u,l*=u,n=Math.sin(e),a=1-(i=Math.cos(e)),t[0]=o*o*a+i,t[1]=s*o*a+l*n,t[2]=l*o*a-s*n,t[3]=0,t[4]=o*s*a-l*n,t[5]=s*s*a+i,t[6]=l*s*a+o*n,t[7]=0,t[8]=o*l*a+s*n,t[9]=s*l*a-o*n,t[10]=l*l*a+i,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t)}},45973:function(t){t.exports=function(t,e,r){var n=e[0],i=e[1],a=e[2],o=e[3],s=n+n,l=i+i,u=a+a,c=n*s,f=n*l,h=n*u,p=i*l,d=i*u,v=a*u,g=o*s,y=o*l,m=o*u;return t[0]=1-(p+v),t[1]=f+m,t[2]=h-y,t[3]=0,t[4]=f-m,t[5]=1-(c+v),t[6]=d+g,t[7]=0,t[8]=h+y,t[9]=d-g,t[10]=1-(c+p),t[11]=0,t[12]=r[0],t[13]=r[1],t[14]=r[2],t[15]=1,t}},81472:function(t){t.exports=function(t,e){return t[0]=e[0],t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=e[1],t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=e[2],t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t}},14669:function(t){t.exports=function(t,e){return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=e[0],t[13]=e[1],t[14]=e[2],t[15]=1,t}},75262:function(t){t.exports=function(t,e){var r=Math.sin(e),n=Math.cos(e);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=n,t[6]=r,t[7]=0,t[8]=0,t[9]=-r,t[10]=n,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t}},331:function(t){t.exports=function(t,e){var r=Math.sin(e),n=Math.cos(e);return t[0]=n,t[1]=0,t[2]=-r,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=r,t[9]=0,t[10]=n,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t}},11049:function(t){t.exports=function(t,e){var r=Math.sin(e),n=Math.cos(e);return t[0]=n,t[1]=r,t[2]=0,t[3]=0,t[4]=-r,t[5]=n,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t}},75195:function(t){t.exports=function(t,e,r,n,i,a,o){var s=1/(r-e),l=1/(i-n),u=1/(a-o);return t[0]=2*a*s,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=2*a*l,t[6]=0,t[7]=0,t[8]=(r+e)*s,t[9]=(i+n)*l,t[10]=(o+a)*u,t[11]=-1,t[12]=0,t[13]=0,t[14]=o*a*2*u,t[15]=0,t}},71551:function(t){t.exports=function(t){return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t}},79576:function(t,e,r){t.exports={create:r(11902),clone:r(42331),copy:r(31042),identity:r(71551),transpose:r(88654),invert:r(95874),adjoint:r(85400),determinant:r(89887),multiply:r(91362),translate:r(31283),scale:r(10789),rotate:r(65074),rotateX:r(35545),rotateY:r(94918),rotateZ:r(15692),fromRotation:r(34045),fromRotationTranslation:r(45973),fromScaling:r(81472),fromTranslation:r(14669),fromXRotation:r(75262),fromYRotation:r(331),fromZRotation:r(11049),fromQuat:r(27812),frustum:r(75195),perspective:r(7864),perspectiveFromFieldOfView:r(35279),ortho:r(60378),lookAt:r(65551),str:r(6726)}},95874:function(t){t.exports=function(t,e){var r=e[0],n=e[1],i=e[2],a=e[3],o=e[4],s=e[5],l=e[6],u=e[7],c=e[8],f=e[9],h=e[10],p=e[11],d=e[12],v=e[13],g=e[14],y=e[15],m=r*s-n*o,x=r*l-i*o,b=r*u-a*o,_=n*l-i*s,w=n*u-a*s,T=i*u-a*l,k=c*v-f*d,A=c*g-h*d,M=c*y-p*d,S=f*g-h*v,E=f*y-p*v,L=h*y-p*g,C=m*L-x*E+b*S+_*M-w*A+T*k;return C?(C=1/C,t[0]=(s*L-l*E+u*S)*C,t[1]=(i*E-n*L-a*S)*C,t[2]=(v*T-g*w+y*_)*C,t[3]=(h*w-f*T-p*_)*C,t[4]=(l*M-o*L-u*A)*C,t[5]=(r*L-i*M+a*A)*C,t[6]=(g*b-d*T-y*x)*C,t[7]=(c*T-h*b+p*x)*C,t[8]=(o*E-s*M+u*k)*C,t[9]=(n*M-r*E-a*k)*C,t[10]=(d*w-v*b+y*m)*C,t[11]=(f*b-c*w-p*m)*C,t[12]=(s*A-o*S-l*k)*C,t[13]=(r*S-n*A+i*k)*C,t[14]=(v*x-d*_-g*m)*C,t[15]=(c*_-f*x+h*m)*C,t):null}},65551:function(t,e,r){var n=r(71551);t.exports=function(t,e,r,i){var a,o,s,l,u,c,f,h,p,d,v=e[0],g=e[1],y=e[2],m=i[0],x=i[1],b=i[2],_=r[0],w=r[1],T=r[2];return Math.abs(v-_)<1e-6&&Math.abs(g-w)<1e-6&&Math.abs(y-T)<1e-6?n(t):(f=v-_,h=g-w,p=y-T,a=x*(p*=d=1/Math.sqrt(f*f+h*h+p*p))-b*(h*=d),o=b*(f*=d)-m*p,s=m*h-x*f,(d=Math.sqrt(a*a+o*o+s*s))?(a*=d=1/d,o*=d,s*=d):(a=0,o=0,s=0),l=h*s-p*o,u=p*a-f*s,c=f*o-h*a,(d=Math.sqrt(l*l+u*u+c*c))?(l*=d=1/d,u*=d,c*=d):(l=0,u=0,c=0),t[0]=a,t[1]=l,t[2]=f,t[3]=0,t[4]=o,t[5]=u,t[6]=h,t[7]=0,t[8]=s,t[9]=c,t[10]=p,t[11]=0,t[12]=-(a*v+o*g+s*y),t[13]=-(l*v+u*g+c*y),t[14]=-(f*v+h*g+p*y),t[15]=1,t)}},91362:function(t){t.exports=function(t,e,r){var n=e[0],i=e[1],a=e[2],o=e[3],s=e[4],l=e[5],u=e[6],c=e[7],f=e[8],h=e[9],p=e[10],d=e[11],v=e[12],g=e[13],y=e[14],m=e[15],x=r[0],b=r[1],_=r[2],w=r[3];return t[0]=x*n+b*s+_*f+w*v,t[1]=x*i+b*l+_*h+w*g,t[2]=x*a+b*u+_*p+w*y,t[3]=x*o+b*c+_*d+w*m,x=r[4],b=r[5],_=r[6],w=r[7],t[4]=x*n+b*s+_*f+w*v,t[5]=x*i+b*l+_*h+w*g,t[6]=x*a+b*u+_*p+w*y,t[7]=x*o+b*c+_*d+w*m,x=r[8],b=r[9],_=r[10],w=r[11],t[8]=x*n+b*s+_*f+w*v,t[9]=x*i+b*l+_*h+w*g,t[10]=x*a+b*u+_*p+w*y,t[11]=x*o+b*c+_*d+w*m,x=r[12],b=r[13],_=r[14],w=r[15],t[12]=x*n+b*s+_*f+w*v,t[13]=x*i+b*l+_*h+w*g,t[14]=x*a+b*u+_*p+w*y,t[15]=x*o+b*c+_*d+w*m,t}},60378:function(t){t.exports=function(t,e,r,n,i,a,o){var s=1/(e-r),l=1/(n-i),u=1/(a-o);return t[0]=-2*s,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=-2*l,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=2*u,t[11]=0,t[12]=(e+r)*s,t[13]=(i+n)*l,t[14]=(o+a)*u,t[15]=1,t}},7864:function(t){t.exports=function(t,e,r,n,i){var a=1/Math.tan(e/2),o=1/(n-i);return t[0]=a/r,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=a,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=(i+n)*o,t[11]=-1,t[12]=0,t[13]=0,t[14]=2*i*n*o,t[15]=0,t}},35279:function(t){t.exports=function(t,e,r,n){var i=Math.tan(e.upDegrees*Math.PI/180),a=Math.tan(e.downDegrees*Math.PI/180),o=Math.tan(e.leftDegrees*Math.PI/180),s=Math.tan(e.rightDegrees*Math.PI/180),l=2/(o+s),u=2/(i+a);return t[0]=l,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=u,t[6]=0,t[7]=0,t[8]=-(o-s)*l*.5,t[9]=(i-a)*u*.5,t[10]=n/(r-n),t[11]=-1,t[12]=0,t[13]=0,t[14]=n*r/(r-n),t[15]=0,t}},65074:function(t){t.exports=function(t,e,r,n){var i,a,o,s,l,u,c,f,h,p,d,v,g,y,m,x,b,_,w,T,k,A,M,S,E=n[0],L=n[1],C=n[2],P=Math.sqrt(E*E+L*L+C*C);return Math.abs(P)<1e-6?null:(E*=P=1/P,L*=P,C*=P,i=Math.sin(r),o=1-(a=Math.cos(r)),s=e[0],l=e[1],u=e[2],c=e[3],f=e[4],h=e[5],p=e[6],d=e[7],v=e[8],g=e[9],y=e[10],m=e[11],x=E*E*o+a,b=L*E*o+C*i,_=C*E*o-L*i,w=E*L*o-C*i,T=L*L*o+a,k=C*L*o+E*i,A=E*C*o+L*i,M=L*C*o-E*i,S=C*C*o+a,t[0]=s*x+f*b+v*_,t[1]=l*x+h*b+g*_,t[2]=u*x+p*b+y*_,t[3]=c*x+d*b+m*_,t[4]=s*w+f*T+v*k,t[5]=l*w+h*T+g*k,t[6]=u*w+p*T+y*k,t[7]=c*w+d*T+m*k,t[8]=s*A+f*M+v*S,t[9]=l*A+h*M+g*S,t[10]=u*A+p*M+y*S,t[11]=c*A+d*M+m*S,e!==t&&(t[12]=e[12],t[13]=e[13],t[14]=e[14],t[15]=e[15]),t)}},35545:function(t){t.exports=function(t,e,r){var n=Math.sin(r),i=Math.cos(r),a=e[4],o=e[5],s=e[6],l=e[7],u=e[8],c=e[9],f=e[10],h=e[11];return e!==t&&(t[0]=e[0],t[1]=e[1],t[2]=e[2],t[3]=e[3],t[12]=e[12],t[13]=e[13],t[14]=e[14],t[15]=e[15]),t[4]=a*i+u*n,t[5]=o*i+c*n,t[6]=s*i+f*n,t[7]=l*i+h*n,t[8]=u*i-a*n,t[9]=c*i-o*n,t[10]=f*i-s*n,t[11]=h*i-l*n,t}},94918:function(t){t.exports=function(t,e,r){var n=Math.sin(r),i=Math.cos(r),a=e[0],o=e[1],s=e[2],l=e[3],u=e[8],c=e[9],f=e[10],h=e[11];return e!==t&&(t[4]=e[4],t[5]=e[5],t[6]=e[6],t[7]=e[7],t[12]=e[12],t[13]=e[13],t[14]=e[14],t[15]=e[15]),t[0]=a*i-u*n,t[1]=o*i-c*n,t[2]=s*i-f*n,t[3]=l*i-h*n,t[8]=a*n+u*i,t[9]=o*n+c*i,t[10]=s*n+f*i,t[11]=l*n+h*i,t}},15692:function(t){t.exports=function(t,e,r){var n=Math.sin(r),i=Math.cos(r),a=e[0],o=e[1],s=e[2],l=e[3],u=e[4],c=e[5],f=e[6],h=e[7];return e!==t&&(t[8]=e[8],t[9]=e[9],t[10]=e[10],t[11]=e[11],t[12]=e[12],t[13]=e[13],t[14]=e[14],t[15]=e[15]),t[0]=a*i+u*n,t[1]=o*i+c*n,t[2]=s*i+f*n,t[3]=l*i+h*n,t[4]=u*i-a*n,t[5]=c*i-o*n,t[6]=f*i-s*n,t[7]=h*i-l*n,t}},10789:function(t){t.exports=function(t,e,r){var n=r[0],i=r[1],a=r[2];return t[0]=e[0]*n,t[1]=e[1]*n,t[2]=e[2]*n,t[3]=e[3]*n,t[4]=e[4]*i,t[5]=e[5]*i,t[6]=e[6]*i,t[7]=e[7]*i,t[8]=e[8]*a,t[9]=e[9]*a,t[10]=e[10]*a,t[11]=e[11]*a,t[12]=e[12],t[13]=e[13],t[14]=e[14],t[15]=e[15],t}},6726:function(t){t.exports=function(t){return\\\"mat4(\\\"+t[0]+\\\", \\\"+t[1]+\\\", \\\"+t[2]+\\\", \\\"+t[3]+\\\", \\\"+t[4]+\\\", \\\"+t[5]+\\\", \\\"+t[6]+\\\", \\\"+t[7]+\\\", \\\"+t[8]+\\\", \\\"+t[9]+\\\", \\\"+t[10]+\\\", \\\"+t[11]+\\\", \\\"+t[12]+\\\", \\\"+t[13]+\\\", \\\"+t[14]+\\\", \\\"+t[15]+\\\")\\\"}},31283:function(t){t.exports=function(t,e,r){var n,i,a,o,s,l,u,c,f,h,p,d,v=r[0],g=r[1],y=r[2];return e===t?(t[12]=e[0]*v+e[4]*g+e[8]*y+e[12],t[13]=e[1]*v+e[5]*g+e[9]*y+e[13],t[14]=e[2]*v+e[6]*g+e[10]*y+e[14],t[15]=e[3]*v+e[7]*g+e[11]*y+e[15]):(n=e[0],i=e[1],a=e[2],o=e[3],s=e[4],l=e[5],u=e[6],c=e[7],f=e[8],h=e[9],p=e[10],d=e[11],t[0]=n,t[1]=i,t[2]=a,t[3]=o,t[4]=s,t[5]=l,t[6]=u,t[7]=c,t[8]=f,t[9]=h,t[10]=p,t[11]=d,t[12]=n*v+s*g+f*y+e[12],t[13]=i*v+l*g+h*y+e[13],t[14]=a*v+u*g+p*y+e[14],t[15]=o*v+c*g+d*y+e[15]),t}},88654:function(t){t.exports=function(t,e){if(t===e){var r=e[1],n=e[2],i=e[3],a=e[6],o=e[7],s=e[11];t[1]=e[4],t[2]=e[8],t[3]=e[12],t[4]=r,t[6]=e[9],t[7]=e[13],t[8]=n,t[9]=a,t[11]=e[14],t[12]=i,t[13]=o,t[14]=s}else t[0]=e[0],t[1]=e[4],t[2]=e[8],t[3]=e[12],t[4]=e[1],t[5]=e[5],t[6]=e[9],t[7]=e[13],t[8]=e[2],t[9]=e[6],t[10]=e[10],t[11]=e[14],t[12]=e[3],t[13]=e[7],t[14]=e[11],t[15]=e[15];return t}},42505:function(t,e,r){\\\"use strict\\\";var n=r(72791),i=r(71299),a=r(98580),o=r(12018),s=r(83522),l=r(25075),u=r(68016),c=r(58404),f=r(18863),h=r(10973),p=r(25677),d=r(75686),v=r(53545),g=r(56131),y=r(32879),m=r(30120),x=r(13547).nextPow2,b=new s,_=!1;if(document.body){var w=document.body.appendChild(document.createElement(\\\"div\\\"));w.style.font=\\\"italic small-caps bold condensed 16px/2 cursive\\\",getComputedStyle(w).fontStretch&&(_=!0),document.body.removeChild(w)}var T=function(t){!function(t){return\\\"function\\\"==typeof t&&t._gl&&t.prop&&t.texture&&t.buffer}(t)?this.gl=o(t):(t={regl:t},this.gl=t.regl._gl),this.shader=b.get(this.gl),this.shader?this.regl=this.shader.regl:this.regl=t.regl||a({gl:this.gl}),this.charBuffer=this.regl.buffer({type:\\\"uint8\\\",usage:\\\"stream\\\"}),this.sizeBuffer=this.regl.buffer({type:\\\"float\\\",usage:\\\"stream\\\"}),this.shader||(this.shader=this.createShader(),b.set(this.gl,this.shader)),this.batch=[],this.fontSize=[],this.font=[],this.fontAtlas=[],this.draw=this.shader.draw.bind(this),this.render=function(){this.regl._refresh(),this.draw(this.batch)},this.canvas=this.gl.canvas,this.update(h(t)?t:{})};T.prototype.createShader=function(){var t=this.regl,e=t({blend:{enable:!0,color:[0,0,0,1],func:{srcRGB:\\\"src alpha\\\",dstRGB:\\\"one minus src alpha\\\",srcAlpha:\\\"one minus dst alpha\\\",dstAlpha:\\\"one\\\"}},stencil:{enable:!1},depth:{enable:!1},count:t.prop(\\\"count\\\"),offset:t.prop(\\\"offset\\\"),attributes:{charOffset:{offset:4,stride:8,buffer:t.this(\\\"sizeBuffer\\\")},width:{offset:0,stride:8,buffer:t.this(\\\"sizeBuffer\\\")},char:t.this(\\\"charBuffer\\\"),position:t.this(\\\"position\\\")},uniforms:{atlasSize:function(t,e){return[e.atlas.width,e.atlas.height]},atlasDim:function(t,e){return[e.atlas.cols,e.atlas.rows]},atlas:function(t,e){return e.atlas.texture},charStep:function(t,e){return e.atlas.step},em:function(t,e){return e.atlas.em},color:t.prop(\\\"color\\\"),opacity:t.prop(\\\"opacity\\\"),viewport:t.this(\\\"viewportArray\\\"),scale:t.this(\\\"scale\\\"),align:t.prop(\\\"align\\\"),baseline:t.prop(\\\"baseline\\\"),translate:t.this(\\\"translate\\\"),positionOffset:t.prop(\\\"positionOffset\\\")},primitive:\\\"points\\\",viewport:t.this(\\\"viewport\\\"),vert:\\\"\\\\n\\\\t\\\\t\\\\tprecision highp float;\\\\n\\\\t\\\\t\\\\tattribute float width, charOffset, char;\\\\n\\\\t\\\\t\\\\tattribute vec2 position;\\\\n\\\\t\\\\t\\\\tuniform float fontSize, charStep, em, align, baseline;\\\\n\\\\t\\\\t\\\\tuniform vec4 viewport;\\\\n\\\\t\\\\t\\\\tuniform vec4 color;\\\\n\\\\t\\\\t\\\\tuniform vec2 atlasSize, atlasDim, scale, translate, positionOffset;\\\\n\\\\t\\\\t\\\\tvarying vec2 charCoord, charId;\\\\n\\\\t\\\\t\\\\tvarying float charWidth;\\\\n\\\\t\\\\t\\\\tvarying vec4 fontColor;\\\\n\\\\t\\\\t\\\\tvoid main () {\\\\n\\\\t\\\\t\\\\t\\\\tvec2 offset = floor(em * (vec2(align + charOffset, baseline)\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t+ vec2(positionOffset.x, -positionOffset.y)))\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t/ (viewport.zw * scale.xy);\\\\n\\\\n\\\\t\\\\t\\\\t\\\\tvec2 position = (position + translate) * scale;\\\\n\\\\t\\\\t\\\\t\\\\tposition += offset * scale;\\\\n\\\\n\\\\t\\\\t\\\\t\\\\tcharCoord = position * viewport.zw + viewport.xy;\\\\n\\\\n\\\\t\\\\t\\\\t\\\\tgl_Position = vec4(position * 2. - 1., 0, 1);\\\\n\\\\n\\\\t\\\\t\\\\t\\\\tgl_PointSize = charStep;\\\\n\\\\n\\\\t\\\\t\\\\t\\\\tcharId.x = mod(char, atlasDim.x);\\\\n\\\\t\\\\t\\\\t\\\\tcharId.y = floor(char / atlasDim.x);\\\\n\\\\n\\\\t\\\\t\\\\t\\\\tcharWidth = width * em;\\\\n\\\\n\\\\t\\\\t\\\\t\\\\tfontColor = color / 255.;\\\\n\\\\t\\\\t\\\\t}\\\",frag:\\\"\\\\n\\\\t\\\\t\\\\tprecision highp float;\\\\n\\\\t\\\\t\\\\tuniform float fontSize, charStep, opacity;\\\\n\\\\t\\\\t\\\\tuniform vec2 atlasSize;\\\\n\\\\t\\\\t\\\\tuniform vec4 viewport;\\\\n\\\\t\\\\t\\\\tuniform sampler2D atlas;\\\\n\\\\t\\\\t\\\\tvarying vec4 fontColor;\\\\n\\\\t\\\\t\\\\tvarying vec2 charCoord, charId;\\\\n\\\\t\\\\t\\\\tvarying float charWidth;\\\\n\\\\n\\\\t\\\\t\\\\tfloat lightness(vec4 color) {\\\\n\\\\t\\\\t\\\\t\\\\treturn color.r * 0.299 + color.g * 0.587 + color.b * 0.114;\\\\n\\\\t\\\\t\\\\t}\\\\n\\\\n\\\\t\\\\t\\\\tvoid main () {\\\\n\\\\t\\\\t\\\\t\\\\tvec2 uv = gl_FragCoord.xy - charCoord + charStep * .5;\\\\n\\\\t\\\\t\\\\t\\\\tfloat halfCharStep = floor(charStep * .5 + .5);\\\\n\\\\n\\\\t\\\\t\\\\t\\\\t// invert y and shift by 1px (FF expecially needs that)\\\\n\\\\t\\\\t\\\\t\\\\tuv.y = charStep - uv.y;\\\\n\\\\n\\\\t\\\\t\\\\t\\\\t// ignore points outside of character bounding box\\\\n\\\\t\\\\t\\\\t\\\\tfloat halfCharWidth = ceil(charWidth * .5);\\\\n\\\\t\\\\t\\\\t\\\\tif (floor(uv.x) > halfCharStep + halfCharWidth ||\\\\n\\\\t\\\\t\\\\t\\\\t\\\\tfloor(uv.x) < halfCharStep - halfCharWidth) return;\\\\n\\\\n\\\\t\\\\t\\\\t\\\\tuv += charId * charStep;\\\\n\\\\t\\\\t\\\\t\\\\tuv = uv / atlasSize;\\\\n\\\\n\\\\t\\\\t\\\\t\\\\tvec4 color = fontColor;\\\\n\\\\t\\\\t\\\\t\\\\tvec4 mask = texture2D(atlas, uv);\\\\n\\\\n\\\\t\\\\t\\\\t\\\\tfloat maskY = lightness(mask);\\\\n\\\\t\\\\t\\\\t\\\\t// float colorY = lightness(color);\\\\n\\\\t\\\\t\\\\t\\\\tcolor.a *= maskY;\\\\n\\\\t\\\\t\\\\t\\\\tcolor.a *= opacity;\\\\n\\\\n\\\\t\\\\t\\\\t\\\\t// color.a += .1;\\\\n\\\\n\\\\t\\\\t\\\\t\\\\t// antialiasing, see yiq color space y-channel formula\\\\n\\\\t\\\\t\\\\t\\\\t// color.rgb += (1. - color.rgb) * (1. - mask.rgb);\\\\n\\\\n\\\\t\\\\t\\\\t\\\\tgl_FragColor = color;\\\\n\\\\t\\\\t\\\\t}\\\"});return{regl:t,draw:e,atlas:{}}},T.prototype.update=function(t){var e=this;if(\\\"string\\\"==typeof t)t={text:t};else if(!t)return;null!=(t=i(t,{position:\\\"position positions coord coords coordinates\\\",font:\\\"font fontFace fontface typeface cssFont css-font family fontFamily\\\",fontSize:\\\"fontSize fontsize size font-size\\\",text:\\\"text texts chars characters value values symbols\\\",align:\\\"align alignment textAlign textbaseline\\\",baseline:\\\"baseline textBaseline textbaseline\\\",direction:\\\"dir direction textDirection\\\",color:\\\"color colour fill fill-color fillColor textColor textcolor\\\",kerning:\\\"kerning kern\\\",range:\\\"range dataBox\\\",viewport:\\\"vp viewport viewBox viewbox viewPort\\\",opacity:\\\"opacity alpha transparency visible visibility opaque\\\",offset:\\\"offset positionOffset padding shift indent indentation\\\"},!0)).opacity&&(Array.isArray(t.opacity)?this.opacity=t.opacity.map((function(t){return parseFloat(t)})):this.opacity=parseFloat(t.opacity)),null!=t.viewport&&(this.viewport=f(t.viewport),this.viewportArray=[this.viewport.x,this.viewport.y,this.viewport.width,this.viewport.height]),null==this.viewport&&(this.viewport={x:0,y:0,width:this.gl.drawingBufferWidth,height:this.gl.drawingBufferHeight},this.viewportArray=[this.viewport.x,this.viewport.y,this.viewport.width,this.viewport.height]),null!=t.kerning&&(this.kerning=t.kerning),null!=t.offset&&(\\\"number\\\"==typeof t.offset&&(t.offset=[t.offset,0]),this.positionOffset=m(t.offset)),t.direction&&(this.direction=t.direction),t.range&&(this.range=t.range,this.scale=[1/(t.range[2]-t.range[0]),1/(t.range[3]-t.range[1])],this.translate=[-t.range[0],-t.range[1]]),t.scale&&(this.scale=t.scale),t.translate&&(this.translate=t.translate),this.scale||(this.scale=[1/this.viewport.width,1/this.viewport.height]),this.translate||(this.translate=[0,0]),this.font.length||t.font||(t.font=T.baseFontSize+\\\"px sans-serif\\\");var r,a=!1,o=!1;if(t.font&&(Array.isArray(t.font)?t.font:[t.font]).forEach((function(t,r){if(\\\"string\\\"==typeof t)try{t=n.parse(t)}catch(e){t=n.parse(T.baseFontSize+\\\"px \\\"+t)}else t=n.parse(n.stringify(t));var i=n.stringify({size:T.baseFontSize,family:t.family,stretch:_?t.stretch:void 0,variant:t.variant,weight:t.weight,style:t.style}),s=p(t.size),l=Math.round(s[0]*d(s[1]));if(l!==e.fontSize[r]&&(o=!0,e.fontSize[r]=l),!(e.font[r]&&i==e.font[r].baseString||(a=!0,e.font[r]=T.fonts[i],e.font[r]))){var u=t.family.join(\\\", \\\"),c=[t.style];t.style!=t.variant&&c.push(t.variant),t.variant!=t.weight&&c.push(t.weight),_&&t.weight!=t.stretch&&c.push(t.stretch),e.font[r]={baseString:i,family:u,weight:t.weight,stretch:t.stretch,style:t.style,variant:t.variant,width:{},kerning:{},metrics:y(u,{origin:\\\"top\\\",fontSize:T.baseFontSize,fontStyle:c.join(\\\" \\\")})},T.fonts[i]=e.font[r]}})),(a||o)&&this.font.forEach((function(r,i){var a=n.stringify({size:e.fontSize[i],family:r.family,stretch:_?r.stretch:void 0,variant:r.variant,weight:r.weight,style:r.style});if(e.fontAtlas[i]=e.shader.atlas[a],!e.fontAtlas[i]){var o=r.metrics;e.shader.atlas[a]=e.fontAtlas[i]={fontString:a,step:2*Math.ceil(e.fontSize[i]*o.bottom*.5),em:e.fontSize[i],cols:0,rows:0,height:0,width:0,chars:[],ids:{},texture:e.regl.texture()}}null==t.text&&(t.text=e.text)})),\\\"string\\\"==typeof t.text&&t.position&&t.position.length>2){for(var s=Array(.5*t.position.length),h=0;h<s.length;h++)s[h]=t.text;t.text=s}if(null!=t.text||a){if(this.textOffsets=[0],Array.isArray(t.text)){this.count=t.text[0].length,this.counts=[this.count];for(var b=1;b<t.text.length;b++)this.textOffsets[b]=this.textOffsets[b-1]+t.text[b-1].length,this.count+=t.text[b].length,this.counts.push(t.text[b].length);this.text=t.text.join(\\\"\\\")}else this.text=t.text,this.count=this.text.length,this.counts=[this.count];r=[],this.font.forEach((function(t,n){T.atlasContext.font=t.baseString;for(var i=e.fontAtlas[n],a=0;a<e.text.length;a++){var o=e.text.charAt(a);if(null==i.ids[o]&&(i.ids[o]=i.chars.length,i.chars.push(o),r.push(o)),null==t.width[o]&&(t.width[o]=T.atlasContext.measureText(o).width/T.baseFontSize,e.kerning)){var s=[];for(var l in t.width)s.push(l+o,o+l);g(t.kerning,v(t.family,{pairs:s}))}}}))}if(t.position)if(t.position.length>2){for(var w=!t.position[0].length,k=c.mallocFloat(2*this.count),A=0,M=0;A<this.counts.length;A++){var S=this.counts[A];if(w)for(var E=0;E<S;E++)k[M++]=t.position[2*A],k[M++]=t.position[2*A+1];else for(var L=0;L<S;L++)k[M++]=t.position[A][0],k[M++]=t.position[A][1]}this.position.call?this.position({type:\\\"float\\\",data:k}):this.position=this.regl.buffer({type:\\\"float\\\",data:k}),c.freeFloat(k)}else this.position.destroy&&this.position.destroy(),this.position={constant:t.position};if(t.text||a){var C=c.mallocUint8(this.count),P=c.mallocFloat(2*this.count);this.textWidth=[];for(var O=0,I=0;O<this.counts.length;O++){for(var D=this.counts[O],z=this.font[O]||this.font[0],R=this.fontAtlas[O]||this.fontAtlas[0],F=0;F<D;F++){var B=this.text.charAt(I),N=this.text.charAt(I-1);if(C[I]=R.ids[B],P[2*I]=z.width[B],F){var j=P[2*I-2],U=P[2*I],V=P[2*I-1]+.5*j+.5*U;if(this.kerning){var H=z.kerning[N+B];H&&(V+=.001*H)}P[2*I+1]=V}else P[2*I+1]=.5*P[2*I];I++}this.textWidth.push(P.length?.5*P[2*I-2]+P[2*I-1]:0)}t.align||(t.align=this.align),this.charBuffer({data:C,type:\\\"uint8\\\",usage:\\\"stream\\\"}),this.sizeBuffer({data:P,type:\\\"float\\\",usage:\\\"stream\\\"}),c.freeUint8(C),c.freeFloat(P),r.length&&this.font.forEach((function(t,r){var n=e.fontAtlas[r],i=n.step,a=Math.floor(T.maxAtlasSize/i),o=Math.min(a,n.chars.length),s=Math.ceil(n.chars.length/o),l=x(o*i),c=x(s*i);n.width=l,n.height=c,n.rows=s,n.cols=o,n.em&&n.texture({data:u({canvas:T.atlasCanvas,font:n.fontString,chars:n.chars,shape:[l,c],step:[i,i]})})}))}if(t.align&&(this.align=t.align,this.alignOffset=this.textWidth.map((function(t,r){var n=Array.isArray(e.align)?e.align.length>1?e.align[r]:e.align[0]:e.align;if(\\\"number\\\"==typeof n)return n;switch(n){case\\\"right\\\":case\\\"end\\\":return-t;case\\\"center\\\":case\\\"centre\\\":case\\\"middle\\\":return.5*-t}return 0}))),null==this.baseline&&null==t.baseline&&(t.baseline=0),null!=t.baseline&&(this.baseline=t.baseline,Array.isArray(this.baseline)||(this.baseline=[this.baseline]),this.baselineOffset=this.baseline.map((function(t,r){var n=(e.font[r]||e.font[0]).metrics,i=0;return i+=.5*n.bottom,-1*(i+=\\\"number\\\"==typeof t?t-n.baseline:-n[t])}))),null!=t.color)if(t.color||(t.color=\\\"transparent\\\"),\\\"string\\\"!=typeof t.color&&isNaN(t.color)){var q;if(\\\"number\\\"==typeof t.color[0]&&t.color.length>this.counts.length){var G=t.color.length;q=c.mallocUint8(G);for(var Z=(t.color.subarray||t.color.slice).bind(t.color),Y=0;Y<G;Y+=4)q.set(l(Z(Y,Y+4),\\\"uint8\\\"),Y)}else{var W=t.color.length;q=c.mallocUint8(4*W);for(var X=0;X<W;X++)q.set(l(t.color[X]||0,\\\"uint8\\\"),4*X)}this.color=q}else this.color=l(t.color,\\\"uint8\\\");if(t.position||t.text||t.color||t.baseline||t.align||t.font||t.offset||t.opacity)if(this.color.length>4||this.baselineOffset.length>1||this.align&&this.align.length>1||this.fontAtlas.length>1||this.positionOffset.length>2){var J=Math.max(.5*this.position.length||0,.25*this.color.length||0,this.baselineOffset.length||0,this.alignOffset.length||0,this.font.length||0,this.opacity.length||0,.5*this.positionOffset.length||0);this.batch=Array(J);for(var K=0;K<this.batch.length;K++)this.batch[K]={count:this.counts.length>1?this.counts[K]:this.counts[0],offset:this.textOffsets.length>1?this.textOffsets[K]:this.textOffsets[0],color:this.color?this.color.length<=4?this.color:this.color.subarray(4*K,4*K+4):[0,0,0,255],opacity:Array.isArray(this.opacity)?this.opacity[K]:this.opacity,baseline:null!=this.baselineOffset[K]?this.baselineOffset[K]:this.baselineOffset[0],align:this.align?null!=this.alignOffset[K]?this.alignOffset[K]:this.alignOffset[0]:0,atlas:this.fontAtlas[K]||this.fontAtlas[0],positionOffset:this.positionOffset.length>2?this.positionOffset.subarray(2*K,2*K+2):this.positionOffset}}else this.count?this.batch=[{count:this.count,offset:0,color:this.color||[0,0,0,255],opacity:Array.isArray(this.opacity)?this.opacity[0]:this.opacity,baseline:this.baselineOffset[0],align:this.alignOffset?this.alignOffset[0]:0,atlas:this.fontAtlas[0],positionOffset:this.positionOffset}]:this.batch=[]},T.prototype.destroy=function(){},T.prototype.kerning=!0,T.prototype.position={constant:new Float32Array(2)},T.prototype.translate=null,T.prototype.scale=null,T.prototype.font=null,T.prototype.text=\\\"\\\",T.prototype.positionOffset=[0,0],T.prototype.opacity=1,T.prototype.color=new Uint8Array([0,0,0,255]),T.prototype.alignOffset=[0,0],T.maxAtlasSize=1024,T.atlasCanvas=document.createElement(\\\"canvas\\\"),T.atlasContext=T.atlasCanvas.getContext(\\\"2d\\\",{alpha:!1}),T.baseFontSize=64,T.fonts={},t.exports=T},12018:function(t,e,r){\\\"use strict\\\";var n=r(71299);function i(t){if(t.container)if(t.container==document.body)document.body.style.width||(t.canvas.width=t.width||t.pixelRatio*r.g.innerWidth),document.body.style.height||(t.canvas.height=t.height||t.pixelRatio*r.g.innerHeight);else{var e=t.container.getBoundingClientRect();t.canvas.width=t.width||e.right-e.left,t.canvas.height=t.height||e.bottom-e.top}}function a(t){return\\\"function\\\"==typeof t.getContext&&\\\"width\\\"in t&&\\\"height\\\"in t}function o(){var t=document.createElement(\\\"canvas\\\");return t.style.position=\\\"absolute\\\",t.style.top=0,t.style.left=0,t}t.exports=function(t){var e;if(t?\\\"string\\\"==typeof t&&(t={container:t}):t={},(t=a(t)||\\\"string\\\"==typeof(e=t).nodeName&&\\\"function\\\"==typeof e.appendChild&&\\\"function\\\"==typeof e.getBoundingClientRect?{container:t}:function(t){return\\\"function\\\"==typeof t.drawArrays||\\\"function\\\"==typeof t.drawElements}(t)?{gl:t}:n(t,{container:\\\"container target element el canvas holder parent parentNode wrapper use ref root node\\\",gl:\\\"gl context webgl glContext\\\",attrs:\\\"attributes attrs contextAttributes\\\",pixelRatio:\\\"pixelRatio pxRatio px ratio pxratio pixelratio\\\",width:\\\"w width\\\",height:\\\"h height\\\"},!0)).pixelRatio||(t.pixelRatio=r.g.pixelRatio||1),t.gl)return t.gl;if(t.canvas&&(t.container=t.canvas.parentNode),t.container){if(\\\"string\\\"==typeof t.container){var s=document.querySelector(t.container);if(!s)throw Error(\\\"Element \\\"+t.container+\\\" is not found\\\");t.container=s}a(t.container)?(t.canvas=t.container,t.container=t.canvas.parentNode):t.canvas||(t.canvas=o(),t.container.appendChild(t.canvas),i(t))}else if(!t.canvas){if(\\\"undefined\\\"==typeof document)throw Error(\\\"Not DOM environment. Use headless-gl.\\\");t.container=document.body||document.documentElement,t.canvas=o(),t.container.appendChild(t.canvas),i(t)}return t.gl||[\\\"webgl\\\",\\\"experimental-webgl\\\",\\\"webgl-experimental\\\"].some((function(e){try{t.gl=t.canvas.getContext(e,t.attrs)}catch(t){}return t.gl})),t.gl}},56068:function(t){t.exports=function(t){\\\"string\\\"==typeof t&&(t=[t]);for(var e=[].slice.call(arguments,1),r=[],n=0;n<t.length-1;n++)r.push(t[n],e[n]||\\\"\\\");return r.push(t[n]),r.join(\\\"\\\")}},40383:function(t,e,r){\\\"use strict\\\";var n=r(68318)(\\\"%Object.getOwnPropertyDescriptor%\\\",!0);if(n)try{n([],\\\"length\\\")}catch(t){n=null}t.exports=n},57035:function(t,e,r){\\\"use strict\\\";var n,i=r(54404);n=\\\"function\\\"==typeof r.g.matchMedia?!r.g.matchMedia(\\\"(hover: none)\\\").matches:i,t.exports=n},38520:function(t,e,r){\\\"use strict\\\";var n=r(54404);t.exports=n&&function(){var t=!1;try{var e=Object.defineProperty({},\\\"passive\\\",{get:function(){t=!0}});window.addEventListener(\\\"test\\\",null,e),window.removeEventListener(\\\"test\\\",null,e)}catch(e){t=!1}return t}()},55622:function(t,e,r){\\\"use strict\\\";var n=r(68318)(\\\"%Object.defineProperty%\\\",!0),i=function(){if(n)try{return n({},\\\"a\\\",{value:1}),!0}catch(t){return!1}return!1};i.hasArrayLengthDefineBug=function(){if(!i())return null;try{return 1!==n([],\\\"length\\\",{value:1}).length}catch(t){return!0}},t.exports=i},57877:function(t,e,r){\\\"use strict\\\";var n=\\\"undefined\\\"!=typeof Symbol&&Symbol,i=r(35638);t.exports=function(){return\\\"function\\\"==typeof n&&\\\"function\\\"==typeof Symbol&&\\\"symbol\\\"==typeof n(\\\"foo\\\")&&\\\"symbol\\\"==typeof Symbol(\\\"bar\\\")&&i()}},35638:function(t){\\\"use strict\\\";t.exports=function(){if(\\\"function\\\"!=typeof Symbol||\\\"function\\\"!=typeof Object.getOwnPropertySymbols)return!1;if(\\\"symbol\\\"==typeof Symbol.iterator)return!0;var t={},e=Symbol(\\\"test\\\"),r=Object(e);if(\\\"string\\\"==typeof e)return!1;if(\\\"[object Symbol]\\\"!==Object.prototype.toString.call(e))return!1;if(\\\"[object Symbol]\\\"!==Object.prototype.toString.call(r))return!1;for(e in t[e]=42,t)return!1;if(\\\"function\\\"==typeof Object.keys&&0!==Object.keys(t).length)return!1;if(\\\"function\\\"==typeof Object.getOwnPropertyNames&&0!==Object.getOwnPropertyNames(t).length)return!1;var n=Object.getOwnPropertySymbols(t);if(1!==n.length||n[0]!==e)return!1;if(!Object.prototype.propertyIsEnumerable.call(t,e))return!1;if(\\\"function\\\"==typeof Object.getOwnPropertyDescriptor){var i=Object.getOwnPropertyDescriptor(t,e);if(42!==i.value||!0!==i.enumerable)return!1}return!0}},84543:function(t,e,r){\\\"use strict\\\";var n=r(35638);t.exports=function(){return n()&&!!Symbol.toStringTag}},35065:function(t,e,r){\\\"use strict\\\";var n=r(77575);t.exports=n.call(Function.call,Object.prototype.hasOwnProperty)},95280:function(t,e){e.read=function(t,e,r,n,i){var a,o,s=8*i-n-1,l=(1<<s)-1,u=l>>1,c=-7,f=r?i-1:0,h=r?-1:1,p=t[e+f];for(f+=h,a=p&(1<<-c)-1,p>>=-c,c+=s;c>0;a=256*a+t[e+f],f+=h,c-=8);for(o=a&(1<<-c)-1,a>>=-c,c+=n;c>0;o=256*o+t[e+f],f+=h,c-=8);if(0===a)a=1-u;else{if(a===l)return o?NaN:1/0*(p?-1:1);o+=Math.pow(2,n),a-=u}return(p?-1:1)*o*Math.pow(2,a-n)},e.write=function(t,e,r,n,i,a){var o,s,l,u=8*a-i-1,c=(1<<u)-1,f=c>>1,h=23===i?Math.pow(2,-24)-Math.pow(2,-77):0,p=n?0:a-1,d=n?1:-1,v=e<0||0===e&&1/e<0?1:0;for(e=Math.abs(e),isNaN(e)||e===1/0?(s=isNaN(e)?1:0,o=c):(o=Math.floor(Math.log(e)/Math.LN2),e*(l=Math.pow(2,-o))<1&&(o--,l*=2),(e+=o+f>=1?h/l:h*Math.pow(2,1-f))*l>=2&&(o++,l/=2),o+f>=c?(s=0,o=c):o+f>=1?(s=(e*l-1)*Math.pow(2,i),o+=f):(s=e*Math.pow(2,f-1)*Math.pow(2,i),o=0));i>=8;t[r+p]=255&s,p+=d,s/=256,i-=8);for(o=o<<i|s,u+=i;u>0;t[r+p]=255&o,p+=d,o/=256,u-=8);t[r+p-d]|=128*v}},42018:function(t){\\\"function\\\"==typeof Object.create?t.exports=function(t,e){e&&(t.super_=e,t.prototype=Object.create(e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}))}:t.exports=function(t,e){if(e){t.super_=e;var r=function(){};r.prototype=e.prototype,t.prototype=new r,t.prototype.constructor=t}}},47216:function(t,e,r){\\\"use strict\\\";var n=r(84543)(),i=r(6614)(\\\"Object.prototype.toString\\\"),a=function(t){return!(n&&t&&\\\"object\\\"==typeof t&&Symbol.toStringTag in t)&&\\\"[object Arguments]\\\"===i(t)},o=function(t){return!!a(t)||null!==t&&\\\"object\\\"==typeof t&&\\\"number\\\"==typeof t.length&&t.length>=0&&\\\"[object Array]\\\"!==i(t)&&\\\"[object Function]\\\"===i(t.callee)},s=function(){return a(arguments)}();a.isLegacyArguments=o,t.exports=s?a:o},54404:function(t){t.exports=!0},85395:function(t){\\\"use strict\\\";var e,r,n=Function.prototype.toString,i=\\\"object\\\"==typeof Reflect&&null!==Reflect&&Reflect.apply;if(\\\"function\\\"==typeof i&&\\\"function\\\"==typeof Object.defineProperty)try{e=Object.defineProperty({},\\\"length\\\",{get:function(){throw r}}),r={},i((function(){throw 42}),null,e)}catch(t){t!==r&&(i=null)}else i=null;var a=/^\\\\s*class\\\\b/,o=function(t){try{var e=n.call(t);return a.test(e)}catch(t){return!1}},s=function(t){try{return!o(t)&&(n.call(t),!0)}catch(t){return!1}},l=Object.prototype.toString,u=\\\"function\\\"==typeof Symbol&&!!Symbol.toStringTag,c=!(0 in[,]),f=function(){return!1};if(\\\"object\\\"==typeof document){var h=document.all;l.call(h)===l.call(document.all)&&(f=function(t){if((c||!t)&&(void 0===t||\\\"object\\\"==typeof t))try{var e=l.call(t);return(\\\"[object HTMLAllCollection]\\\"===e||\\\"[object HTML document.all class]\\\"===e||\\\"[object HTMLCollection]\\\"===e||\\\"[object Object]\\\"===e)&&null==t(\\\"\\\")}catch(t){}return!1})}t.exports=i?function(t){if(f(t))return!0;if(!t)return!1;if(\\\"function\\\"!=typeof t&&\\\"object\\\"!=typeof t)return!1;try{i(t,null,e)}catch(t){if(t!==r)return!1}return!o(t)&&s(t)}:function(t){if(f(t))return!0;if(!t)return!1;if(\\\"function\\\"!=typeof t&&\\\"object\\\"!=typeof t)return!1;if(u)return s(t);if(o(t))return!1;var e=l.call(t);return!(\\\"[object Function]\\\"!==e&&\\\"[object GeneratorFunction]\\\"!==e&&!/^\\\\[object HTML/.test(e))&&s(t)}},65481:function(t,e,r){\\\"use strict\\\";var n,i=Object.prototype.toString,a=Function.prototype.toString,o=/^\\\\s*(?:function)?\\\\*/,s=r(84543)(),l=Object.getPrototypeOf;t.exports=function(t){if(\\\"function\\\"!=typeof t)return!1;if(o.test(a.call(t)))return!0;if(!s)return\\\"[object GeneratorFunction]\\\"===i.call(t);if(!l)return!1;if(void 0===n){var e=function(){if(!s)return!1;try{return Function(\\\"return function*() {}\\\")()}catch(t){}}();n=!!e&&l(e)}return l(t)===n}},62683:function(t){\\\"use strict\\\";t.exports=\\\"undefined\\\"!=typeof navigator&&(/MSIE/.test(navigator.userAgent)||/Trident\\\\//.test(navigator.appVersion))},64274:function(t){\\\"use strict\\\";t.exports=function(t){return t!=t}},15567:function(t,e,r){\\\"use strict\\\";var n=r(68222),i=r(17045),a=r(64274),o=r(14922),s=r(22442),l=n(o(),Number);i(l,{getPolyfill:o,implementation:a,shim:s}),t.exports=l},14922:function(t,e,r){\\\"use strict\\\";var n=r(64274);t.exports=function(){return Number.isNaN&&Number.isNaN(NaN)&&!Number.isNaN(\\\"a\\\")?Number.isNaN:n}},22442:function(t,e,r){\\\"use strict\\\";var n=r(17045),i=r(14922);t.exports=function(){var t=i();return n(Number,{isNaN:t},{isNaN:function(){return Number.isNaN!==t}}),t}},64941:function(t){\\\"use strict\\\";t.exports=function(t){var e=typeof t;return null!==t&&(\\\"object\\\"===e||\\\"function\\\"===e)}},10973:function(t){\\\"use strict\\\";var e=Object.prototype.toString;t.exports=function(t){var r;return\\\"[object Object]\\\"===e.call(t)&&(null===(r=Object.getPrototypeOf(t))||r===Object.getPrototypeOf({}))}},18546:function(t){\\\"use strict\\\";t.exports=function(t){for(var e,r=t.length,n=0;n<r;n++)if(((e=t.charCodeAt(n))<9||e>13)&&32!==e&&133!==e&&160!==e&&5760!==e&&6158!==e&&(e<8192||e>8205)&&8232!==e&&8233!==e&&8239!==e&&8287!==e&&8288!==e&&12288!==e&&65279!==e)return!1;return!0}},89546:function(t){\\\"use strict\\\";t.exports=function(t){return\\\"string\\\"==typeof t&&(t=t.trim(),!!(/^[mzlhvcsqta]\\\\s*[-+.0-9][^mlhvzcsqta]+/i.test(t)&&/[\\\\dz]$/i.test(t)&&t.length>4))}},9187:function(t,e,r){\\\"use strict\\\";var n=r(31353),i=r(72077),a=r(6614),o=a(\\\"Object.prototype.toString\\\"),s=r(84543)(),l=r(40383),u=\\\"undefined\\\"==typeof globalThis?r.g:globalThis,c=i(),f=a(\\\"Array.prototype.indexOf\\\",!0)||function(t,e){for(var r=0;r<t.length;r+=1)if(t[r]===e)return r;return-1},h=a(\\\"String.prototype.slice\\\"),p={},d=Object.getPrototypeOf;s&&l&&d&&n(c,(function(t){var e=new u[t];if(Symbol.toStringTag in e){var r=d(e),n=l(r,Symbol.toStringTag);if(!n){var i=d(r);n=l(i,Symbol.toStringTag)}p[t]=n.get}})),t.exports=function(t){if(!t||\\\"object\\\"!=typeof t)return!1;if(!s||!(Symbol.toStringTag in t)){var e=h(o(t),8,-1);return f(c,e)>-1}return!!l&&function(t){var e=!1;return n(p,(function(r,n){if(!e)try{e=r.call(t)===n}catch(t){}})),e}(t)}},44517:function(t){t.exports=function(){\\\"use strict\\\";var t,e,r;function n(n,i){if(t)if(e){var a=\\\"var sharedChunk = {}; (\\\"+t+\\\")(sharedChunk); (\\\"+e+\\\")(sharedChunk);\\\",o={};t(o),(r=i(o)).workerUrl=window.URL.createObjectURL(new Blob([a],{type:\\\"text/javascript\\\"}))}else e=i;else t=i}return n(0,(function(t){function e(t,e){return t(e={exports:{}},e.exports),e.exports}var r=\\\"1.10.1\\\",n=i;function i(t,e,r,n){this.cx=3*t,this.bx=3*(r-t)-this.cx,this.ax=1-this.cx-this.bx,this.cy=3*e,this.by=3*(n-e)-this.cy,this.ay=1-this.cy-this.by,this.p1x=t,this.p1y=n,this.p2x=r,this.p2y=n}i.prototype.sampleCurveX=function(t){return((this.ax*t+this.bx)*t+this.cx)*t},i.prototype.sampleCurveY=function(t){return((this.ay*t+this.by)*t+this.cy)*t},i.prototype.sampleCurveDerivativeX=function(t){return(3*this.ax*t+2*this.bx)*t+this.cx},i.prototype.solveCurveX=function(t,e){var r,n,i,a,o;for(void 0===e&&(e=1e-6),i=t,o=0;o<8;o++){if(a=this.sampleCurveX(i)-t,Math.abs(a)<e)return i;var s=this.sampleCurveDerivativeX(i);if(Math.abs(s)<1e-6)break;i-=a/s}if((i=t)<(r=0))return r;if(i>(n=1))return n;for(;r<n;){if(a=this.sampleCurveX(i),Math.abs(a-t)<e)return i;t>a?r=i:n=i,i=.5*(n-r)+r}return i},i.prototype.solve=function(t,e){return this.sampleCurveY(this.solveCurveX(t,e))};var a=o;function o(t,e){this.x=t,this.y=e}function s(t,e,r,i){var a=new n(t,e,r,i);return function(t){return a.solve(t)}}o.prototype={clone:function(){return new o(this.x,this.y)},add:function(t){return this.clone()._add(t)},sub:function(t){return this.clone()._sub(t)},multByPoint:function(t){return this.clone()._multByPoint(t)},divByPoint:function(t){return this.clone()._divByPoint(t)},mult:function(t){return this.clone()._mult(t)},div:function(t){return this.clone()._div(t)},rotate:function(t){return this.clone()._rotate(t)},rotateAround:function(t,e){return this.clone()._rotateAround(t,e)},matMult:function(t){return this.clone()._matMult(t)},unit:function(){return this.clone()._unit()},perp:function(){return this.clone()._perp()},round:function(){return this.clone()._round()},mag:function(){return Math.sqrt(this.x*this.x+this.y*this.y)},equals:function(t){return this.x===t.x&&this.y===t.y},dist:function(t){return Math.sqrt(this.distSqr(t))},distSqr:function(t){var e=t.x-this.x,r=t.y-this.y;return e*e+r*r},angle:function(){return Math.atan2(this.y,this.x)},angleTo:function(t){return Math.atan2(this.y-t.y,this.x-t.x)},angleWith:function(t){return this.angleWithSep(t.x,t.y)},angleWithSep:function(t,e){return Math.atan2(this.x*e-this.y*t,this.x*t+this.y*e)},_matMult:function(t){var e=t[0]*this.x+t[1]*this.y,r=t[2]*this.x+t[3]*this.y;return this.x=e,this.y=r,this},_add:function(t){return this.x+=t.x,this.y+=t.y,this},_sub:function(t){return this.x-=t.x,this.y-=t.y,this},_mult:function(t){return this.x*=t,this.y*=t,this},_div:function(t){return this.x/=t,this.y/=t,this},_multByPoint:function(t){return this.x*=t.x,this.y*=t.y,this},_divByPoint:function(t){return this.x/=t.x,this.y/=t.y,this},_unit:function(){return this._div(this.mag()),this},_perp:function(){var t=this.y;return this.y=this.x,this.x=-t,this},_rotate:function(t){var e=Math.cos(t),r=Math.sin(t),n=e*this.x-r*this.y,i=r*this.x+e*this.y;return this.x=n,this.y=i,this},_rotateAround:function(t,e){var r=Math.cos(t),n=Math.sin(t),i=e.x+r*(this.x-e.x)-n*(this.y-e.y),a=e.y+n*(this.x-e.x)+r*(this.y-e.y);return this.x=i,this.y=a,this},_round:function(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this}},o.convert=function(t){return t instanceof o?t:Array.isArray(t)?new o(t[0],t[1]):t};var l=s(.25,.1,.25,1);function u(t,e,r){return Math.min(r,Math.max(e,t))}function c(t,e,r){var n=r-e,i=((t-e)%n+n)%n+e;return i===e?r:i}function f(t){for(var e=[],r=arguments.length-1;r-- >0;)e[r]=arguments[r+1];for(var n=0,i=e;n<i.length;n+=1){var a=i[n];for(var o in a)t[o]=a[o]}return t}var h=1;function p(){return h++}function d(){return function t(e){return e?(e^16*Math.random()>>e/4).toString(16):([1e7]+-[1e3]+-4e3+-8e3+-1e11).replace(/[018]/g,t)}()}function v(t){return!!t&&/^[0-9a-f]{8}-[0-9a-f]{4}-[4][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i.test(t)}function g(t,e){t.forEach((function(t){e[t]&&(e[t]=e[t].bind(e))}))}function y(t,e){return-1!==t.indexOf(e,t.length-e.length)}function m(t,e,r){var n={};for(var i in t)n[i]=e.call(r||this,t[i],i,t);return n}function x(t,e,r){var n={};for(var i in t)e.call(r||this,t[i],i,t)&&(n[i]=t[i]);return n}function b(t){return Array.isArray(t)?t.map(b):\\\"object\\\"==typeof t&&t?m(t,b):t}var _={};function w(t){_[t]||(\\\"undefined\\\"!=typeof console&&console.warn(t),_[t]=!0)}function T(t,e,r){return(r.y-t.y)*(e.x-t.x)>(e.y-t.y)*(r.x-t.x)}function k(t){for(var e=0,r=0,n=t.length,i=n-1,a=void 0,o=void 0;r<n;i=r++)a=t[r],e+=((o=t[i]).x-a.x)*(a.y+o.y);return e}function A(){return\\\"undefined\\\"!=typeof WorkerGlobalScope&&\\\"undefined\\\"!=typeof self&&self instanceof WorkerGlobalScope}function M(t){var e={};if(t.replace(/(?:^|(?:\\\\s*\\\\,\\\\s*))([^\\\\x00-\\\\x20\\\\(\\\\)<>@\\\\,;\\\\:\\\\\\\\\\\"\\\\/\\\\[\\\\]\\\\?\\\\=\\\\{\\\\}\\\\x7F]+)(?:\\\\=(?:([^\\\\x00-\\\\x20\\\\(\\\\)<>@\\\\,;\\\\:\\\\\\\\\\\"\\\\/\\\\[\\\\]\\\\?\\\\=\\\\{\\\\}\\\\x7F]+)|(?:\\\\\\\"((?:[^\\\"\\\\\\\\]|\\\\\\\\.)*)\\\\\\\")))?/g,(function(t,r,n,i){var a=n||i;return e[r]=!a||a.toLowerCase(),\\\"\\\"})),e[\\\"max-age\\\"]){var r=parseInt(e[\\\"max-age\\\"],10);isNaN(r)?delete e[\\\"max-age\\\"]:e[\\\"max-age\\\"]=r}return e}var S=null;function E(t){if(null==S){var e=t.navigator?t.navigator.userAgent:null;S=!!t.safari||!(!e||!(/\\\\b(iPad|iPhone|iPod)\\\\b/.test(e)||e.match(\\\"Safari\\\")&&!e.match(\\\"Chrome\\\")))}return S}function L(t){try{var e=self[t];return e.setItem(\\\"_mapbox_test_\\\",1),e.removeItem(\\\"_mapbox_test_\\\"),!0}catch(t){return!1}}var C,P,O,I,D=self.performance&&self.performance.now?self.performance.now.bind(self.performance):Date.now.bind(Date),z=self.requestAnimationFrame||self.mozRequestAnimationFrame||self.webkitRequestAnimationFrame||self.msRequestAnimationFrame,R=self.cancelAnimationFrame||self.mozCancelAnimationFrame||self.webkitCancelAnimationFrame||self.msCancelAnimationFrame,F={now:D,frame:function(t){var e=z(t);return{cancel:function(){return R(e)}}},getImageData:function(t,e){void 0===e&&(e=0);var r=self.document.createElement(\\\"canvas\\\"),n=r.getContext(\\\"2d\\\");if(!n)throw new Error(\\\"failed to create canvas 2d context\\\");return r.width=t.width,r.height=t.height,n.drawImage(t,0,0,t.width,t.height),n.getImageData(-e,-e,t.width+2*e,t.height+2*e)},resolveURL:function(t){return C||(C=self.document.createElement(\\\"a\\\")),C.href=t,C.href},hardwareConcurrency:self.navigator.hardwareConcurrency||4,get devicePixelRatio(){return self.devicePixelRatio},get prefersReducedMotion(){return!!self.matchMedia&&(null==P&&(P=self.matchMedia(\\\"(prefers-reduced-motion: reduce)\\\")),P.matches)}},B={API_URL:\\\"https://api.mapbox.com\\\",get EVENTS_URL(){return this.API_URL?0===this.API_URL.indexOf(\\\"https://api.mapbox.cn\\\")?\\\"https://events.mapbox.cn/events/v2\\\":0===this.API_URL.indexOf(\\\"https://api.mapbox.com\\\")?\\\"https://events.mapbox.com/events/v2\\\":null:null},FEEDBACK_URL:\\\"https://apps.mapbox.com/feedback\\\",REQUIRE_ACCESS_TOKEN:!0,ACCESS_TOKEN:null,MAX_PARALLEL_IMAGE_REQUESTS:16},N={supported:!1,testSupport:function(t){!j&&I&&(U?V(t):O=t)}},j=!1,U=!1;function V(t){var e=t.createTexture();t.bindTexture(t.TEXTURE_2D,e);try{if(t.texImage2D(t.TEXTURE_2D,0,t.RGBA,t.RGBA,t.UNSIGNED_BYTE,I),t.isContextLost())return;N.supported=!0}catch(t){}t.deleteTexture(e),j=!0}self.document&&((I=self.document.createElement(\\\"img\\\")).onload=function(){O&&V(O),O=null,U=!0},I.onerror=function(){j=!0,O=null},I.src=\\\"data:image/webp;base64,UklGRh4AAABXRUJQVlA4TBEAAAAvAQAAAAfQ//73v/+BiOh/AAA=\\\");var H=\\\"01\\\";var q=function(t,e){this._transformRequestFn=t,this._customAccessToken=e,this._createSkuToken()};function G(t){return 0===t.indexOf(\\\"mapbox:\\\")}q.prototype._createSkuToken=function(){var t=function(){for(var t=\\\"\\\",e=0;e<10;e++)t+=\\\"0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ\\\"[Math.floor(62*Math.random())];return{token:[\\\"1\\\",H,t].join(\\\"\\\"),tokenExpiresAt:Date.now()+432e5}}();this._skuToken=t.token,this._skuTokenExpiresAt=t.tokenExpiresAt},q.prototype._isSkuTokenExpired=function(){return Date.now()>this._skuTokenExpiresAt},q.prototype.transformRequest=function(t,e){return this._transformRequestFn&&this._transformRequestFn(t,e)||{url:t}},q.prototype.normalizeStyleURL=function(t,e){if(!G(t))return t;var r=X(t);return r.path=\\\"/styles/v1\\\"+r.path,this._makeAPIURL(r,this._customAccessToken||e)},q.prototype.normalizeGlyphsURL=function(t,e){if(!G(t))return t;var r=X(t);return r.path=\\\"/fonts/v1\\\"+r.path,this._makeAPIURL(r,this._customAccessToken||e)},q.prototype.normalizeSourceURL=function(t,e){if(!G(t))return t;var r=X(t);return r.path=\\\"/v4/\\\"+r.authority+\\\".json\\\",r.params.push(\\\"secure\\\"),this._makeAPIURL(r,this._customAccessToken||e)},q.prototype.normalizeSpriteURL=function(t,e,r,n){var i=X(t);return G(t)?(i.path=\\\"/styles/v1\\\"+i.path+\\\"/sprite\\\"+e+r,this._makeAPIURL(i,this._customAccessToken||n)):(i.path+=\\\"\\\"+e+r,J(i))},q.prototype.normalizeTileURL=function(t,e){if(this._isSkuTokenExpired()&&this._createSkuToken(),t&&!G(t))return t;var r=X(t),n=F.devicePixelRatio>=2||512===e?\\\"@2x\\\":\\\"\\\",i=N.supported?\\\".webp\\\":\\\"$1\\\";r.path=r.path.replace(/(\\\\.(png|jpg)\\\\d*)(?=$)/,\\\"\\\"+n+i),r.path=r.path.replace(/^.+\\\\/v4\\\\//,\\\"/\\\"),r.path=\\\"/v4\\\"+r.path;var a=this._customAccessToken||function(t){for(var e=0,r=t;e<r.length;e+=1){var n=r[e].match(/^access_token=(.*)$/);if(n)return n[1]}return null}(r.params)||B.ACCESS_TOKEN;return B.REQUIRE_ACCESS_TOKEN&&a&&this._skuToken&&r.params.push(\\\"sku=\\\"+this._skuToken),this._makeAPIURL(r,a)},q.prototype.canonicalizeTileURL=function(t,e){var r=X(t);if(!r.path.match(/(^\\\\/v4\\\\/)/)||!r.path.match(/\\\\.[\\\\w]+$/))return t;var n=\\\"mapbox://tiles/\\\";n+=r.path.replace(\\\"/v4/\\\",\\\"\\\");var i=r.params;return e&&(i=i.filter((function(t){return!t.match(/^access_token=/)}))),i.length&&(n+=\\\"?\\\"+i.join(\\\"&\\\")),n},q.prototype.canonicalizeTileset=function(t,e){for(var r=!!e&&G(e),n=[],i=0,a=t.tiles||[];i<a.length;i+=1){var o=a[i];Y(o)?n.push(this.canonicalizeTileURL(o,r)):n.push(o)}return n},q.prototype._makeAPIURL=function(t,e){var r=\\\"See https://www.mapbox.com/api-documentation/#access-tokens-and-token-scopes\\\",n=X(B.API_URL);if(t.protocol=n.protocol,t.authority=n.authority,\\\"/\\\"!==n.path&&(t.path=\\\"\\\"+n.path+t.path),!B.REQUIRE_ACCESS_TOKEN)return J(t);if(!(e=e||B.ACCESS_TOKEN))throw new Error(\\\"An API access token is required to use Mapbox GL. \\\"+r);if(\\\"s\\\"===e[0])throw new Error(\\\"Use a public access token (pk.*) with Mapbox GL, not a secret access token (sk.*). \\\"+r);return t.params=t.params.filter((function(t){return-1===t.indexOf(\\\"access_token\\\")})),t.params.push(\\\"access_token=\\\"+e),J(t)};var Z=/^((https?:)?\\\\/\\\\/)?([^\\\\/]+\\\\.)?mapbox\\\\.c(n|om)(\\\\/|\\\\?|$)/i;function Y(t){return Z.test(t)}var W=/^(\\\\w+):\\\\/\\\\/([^/?]*)(\\\\/[^?]+)?\\\\??(.+)?/;function X(t){var e=t.match(W);if(!e)throw new Error(\\\"Unable to parse URL object\\\");return{protocol:e[1],authority:e[2],path:e[3]||\\\"/\\\",params:e[4]?e[4].split(\\\"&\\\"):[]}}function J(t){var e=t.params.length?\\\"?\\\"+t.params.join(\\\"&\\\"):\\\"\\\";return t.protocol+\\\"://\\\"+t.authority+t.path+e}var K=\\\"mapbox.eventData\\\";function $(t){if(!t)return null;var e,r=t.split(\\\".\\\");if(!r||3!==r.length)return null;try{return JSON.parse((e=r[1],decodeURIComponent(self.atob(e).split(\\\"\\\").map((function(t){return\\\"%\\\"+(\\\"00\\\"+t.charCodeAt(0).toString(16)).slice(-2)})).join(\\\"\\\"))))}catch(t){return null}}var Q=function(t){this.type=t,this.anonId=null,this.eventData={},this.queue=[],this.pendingRequest=null};Q.prototype.getStorageKey=function(t){var e,r,n=$(B.ACCESS_TOKEN);return e=n&&n.u?(r=n.u,self.btoa(encodeURIComponent(r).replace(/%([0-9A-F]{2})/g,(function(t,e){return String.fromCharCode(Number(\\\"0x\\\"+e))})))):B.ACCESS_TOKEN||\\\"\\\",t?K+\\\".\\\"+t+\\\":\\\"+e:K+\\\":\\\"+e},Q.prototype.fetchEventData=function(){var t=L(\\\"localStorage\\\"),e=this.getStorageKey(),r=this.getStorageKey(\\\"uuid\\\");if(t)try{var n=self.localStorage.getItem(e);n&&(this.eventData=JSON.parse(n));var i=self.localStorage.getItem(r);i&&(this.anonId=i)}catch(t){w(\\\"Unable to read from LocalStorage\\\")}},Q.prototype.saveEventData=function(){var t=L(\\\"localStorage\\\"),e=this.getStorageKey(),r=this.getStorageKey(\\\"uuid\\\");if(t)try{self.localStorage.setItem(r,this.anonId),Object.keys(this.eventData).length>=1&&self.localStorage.setItem(e,JSON.stringify(this.eventData))}catch(t){w(\\\"Unable to write to LocalStorage\\\")}},Q.prototype.processRequests=function(t){},Q.prototype.postEvent=function(t,e,n,i){var a=this;if(B.EVENTS_URL){var o=X(B.EVENTS_URL);o.params.push(\\\"access_token=\\\"+(i||B.ACCESS_TOKEN||\\\"\\\"));var s={event:this.type,created:new Date(t).toISOString(),sdkIdentifier:\\\"mapbox-gl-js\\\",sdkVersion:r,skuId:H,userId:this.anonId},l=e?f(s,e):s,u={url:J(o),headers:{\\\"Content-Type\\\":\\\"text/plain\\\"},body:JSON.stringify([l])};this.pendingRequest=At(u,(function(t){a.pendingRequest=null,n(t),a.saveEventData(),a.processRequests(i)}))}},Q.prototype.queueRequest=function(t,e){this.queue.push(t),this.processRequests(e)};var tt,et,rt=function(t){function e(){t.call(this,\\\"map.load\\\"),this.success={},this.skuToken=\\\"\\\"}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.postMapLoadEvent=function(t,e,r,n){this.skuToken=r,(B.EVENTS_URL&&n||B.ACCESS_TOKEN&&Array.isArray(t)&&t.some((function(t){return G(t)||Y(t)})))&&this.queueRequest({id:e,timestamp:Date.now()},n)},e.prototype.processRequests=function(t){var e=this;if(!this.pendingRequest&&0!==this.queue.length){var r=this.queue.shift(),n=r.id,i=r.timestamp;n&&this.success[n]||(this.anonId||this.fetchEventData(),v(this.anonId)||(this.anonId=d()),this.postEvent(i,{skuToken:this.skuToken},(function(t){t||n&&(e.success[n]=!0)}),t))}},e}(Q),nt=function(t){function e(e){t.call(this,\\\"appUserTurnstile\\\"),this._customAccessToken=e}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.postTurnstileEvent=function(t,e){B.EVENTS_URL&&B.ACCESS_TOKEN&&Array.isArray(t)&&t.some((function(t){return G(t)||Y(t)}))&&this.queueRequest(Date.now(),e)},e.prototype.processRequests=function(t){var e=this;if(!this.pendingRequest&&0!==this.queue.length){this.anonId&&this.eventData.lastSuccess&&this.eventData.tokenU||this.fetchEventData();var r=$(B.ACCESS_TOKEN),n=r?r.u:B.ACCESS_TOKEN,i=n!==this.eventData.tokenU;v(this.anonId)||(this.anonId=d(),i=!0);var a=this.queue.shift();if(this.eventData.lastSuccess){var o=new Date(this.eventData.lastSuccess),s=new Date(a),l=(a-this.eventData.lastSuccess)/864e5;i=i||l>=1||l<-1||o.getDate()!==s.getDate()}else i=!0;if(!i)return this.processRequests();this.postEvent(a,{\\\"enabled.telemetry\\\":!1},(function(t){t||(e.eventData.lastSuccess=a,e.eventData.tokenU=n)}),t)}},e}(Q),it=new nt,at=it.postTurnstileEvent.bind(it),ot=new rt,st=ot.postMapLoadEvent.bind(ot),lt=\\\"mapbox-tiles\\\",ut=500,ct=50,ft=42e4;function ht(){self.caches&&!tt&&(tt=self.caches.open(lt))}function pt(t,e,r){if(ht(),tt){var n={status:e.status,statusText:e.statusText,headers:new self.Headers};e.headers.forEach((function(t,e){return n.headers.set(e,t)}));var i=M(e.headers.get(\\\"Cache-Control\\\")||\\\"\\\");i[\\\"no-store\\\"]||(i[\\\"max-age\\\"]&&n.headers.set(\\\"Expires\\\",new Date(r+1e3*i[\\\"max-age\\\"]).toUTCString()),new Date(n.headers.get(\\\"Expires\\\")).getTime()-r<ft||function(t,e){if(void 0===et)try{new Response(new ReadableStream),et=!0}catch(t){et=!1}et?e(t.body):t.blob().then(e)}(e,(function(e){var r=new self.Response(e,n);ht(),tt&&tt.then((function(e){return e.put(dt(t.url),r)})).catch((function(t){return w(t.message)}))})))}}function dt(t){var e=t.indexOf(\\\"?\\\");return e<0?t:t.slice(0,e)}function vt(t,e){if(ht(),!tt)return e(null);var r=dt(t.url);tt.then((function(t){t.match(r).then((function(n){var i=function(t){if(!t)return!1;var e=new Date(t.headers.get(\\\"Expires\\\")||0),r=M(t.headers.get(\\\"Cache-Control\\\")||\\\"\\\");return e>Date.now()&&!r[\\\"no-cache\\\"]}(n);t.delete(r),i&&t.put(r,n.clone()),e(null,n,i)})).catch(e)})).catch(e)}var gt,yt=1/0;function mt(){return null==gt&&(gt=self.OffscreenCanvas&&new self.OffscreenCanvas(1,1).getContext(\\\"2d\\\")&&\\\"function\\\"==typeof self.createImageBitmap),gt}var xt={Unknown:\\\"Unknown\\\",Style:\\\"Style\\\",Source:\\\"Source\\\",Tile:\\\"Tile\\\",Glyphs:\\\"Glyphs\\\",SpriteImage:\\\"SpriteImage\\\",SpriteJSON:\\\"SpriteJSON\\\",Image:\\\"Image\\\"};\\\"function\\\"==typeof Object.freeze&&Object.freeze(xt);var bt=function(t){function e(e,r,n){401===r&&Y(n)&&(e+=\\\": you may have provided an invalid Mapbox access token. See https://www.mapbox.com/api-documentation/#access-tokens-and-token-scopes\\\"),t.call(this,e),this.status=r,this.url=n,this.name=this.constructor.name,this.message=e}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.toString=function(){return this.name+\\\": \\\"+this.message+\\\" (\\\"+this.status+\\\"): \\\"+this.url},e}(Error),_t=A()?function(){return self.worker&&self.worker.referrer}:function(){return(\\\"blob:\\\"===self.location.protocol?self.parent:self).location.href};function wt(t,e){var r,n=new self.AbortController,i=new self.Request(t.url,{method:t.method||\\\"GET\\\",body:t.body,credentials:t.credentials,headers:t.headers,referrer:_t(),signal:n.signal}),a=!1,o=!1,s=(r=i.url).indexOf(\\\"sku=\\\")>0&&Y(r);\\\"json\\\"===t.type&&i.headers.set(\\\"Accept\\\",\\\"application/json\\\");var l=function(r,n,a){if(!o){if(r&&\\\"SecurityError\\\"!==r.message&&w(r),n&&a)return u(n);var l=Date.now();self.fetch(i).then((function(r){if(r.ok){var n=s?r.clone():null;return u(r,n,l)}return e(new bt(r.statusText,r.status,t.url))})).catch((function(t){20!==t.code&&e(new Error(t.message))}))}},u=function(r,n,s){(\\\"arrayBuffer\\\"===t.type?r.arrayBuffer():\\\"json\\\"===t.type?r.json():r.text()).then((function(t){o||(n&&s&&pt(i,n,s),a=!0,e(null,t,r.headers.get(\\\"Cache-Control\\\"),r.headers.get(\\\"Expires\\\")))})).catch((function(t){o||e(new Error(t.message))}))};return s?vt(i,l):l(null,null),{cancel:function(){o=!0,a||n.abort()}}}var Tt=function(t,e){if(r=t.url,!(/^file:/.test(r)||/^file:/.test(_t())&&!/^\\\\w+:/.test(r))){if(self.fetch&&self.Request&&self.AbortController&&self.Request.prototype.hasOwnProperty(\\\"signal\\\"))return wt(t,e);if(A()&&self.worker&&self.worker.actor){return self.worker.actor.send(\\\"getResource\\\",t,e,void 0,!0)}}var r;return function(t,e){var r=new self.XMLHttpRequest;for(var n in r.open(t.method||\\\"GET\\\",t.url,!0),\\\"arrayBuffer\\\"===t.type&&(r.responseType=\\\"arraybuffer\\\"),t.headers)r.setRequestHeader(n,t.headers[n]);return\\\"json\\\"===t.type&&(r.responseType=\\\"text\\\",r.setRequestHeader(\\\"Accept\\\",\\\"application/json\\\")),r.withCredentials=\\\"include\\\"===t.credentials,r.onerror=function(){e(new Error(r.statusText))},r.onload=function(){if((r.status>=200&&r.status<300||0===r.status)&&null!==r.response){var n=r.response;if(\\\"json\\\"===t.type)try{n=JSON.parse(r.response)}catch(t){return e(t)}e(null,n,r.getResponseHeader(\\\"Cache-Control\\\"),r.getResponseHeader(\\\"Expires\\\"))}else e(new bt(r.statusText,r.status,t.url))},r.send(t.body),{cancel:function(){return r.abort()}}}(t,e)},kt=function(t,e){return Tt(f(t,{type:\\\"arrayBuffer\\\"}),e)},At=function(t,e){return Tt(f(t,{method:\\\"POST\\\"}),e)};var Mt,St;Mt=[],St=0;var Et=function(t,e){if(N.supported&&(t.headers||(t.headers={}),t.headers.accept=\\\"image/webp,*/*\\\"),St>=B.MAX_PARALLEL_IMAGE_REQUESTS){var r={requestParameters:t,callback:e,cancelled:!1,cancel:function(){this.cancelled=!0}};return Mt.push(r),r}St++;var n=!1,i=function(){if(!n)for(n=!0,St--;Mt.length&&St<B.MAX_PARALLEL_IMAGE_REQUESTS;){var t=Mt.shift(),e=t.requestParameters,r=t.callback;t.cancelled||(t.cancel=Et(e,r).cancel)}},a=kt(t,(function(t,r,n,a){i(),t?e(t):r&&(mt()?function(t,e){var r=new self.Blob([new Uint8Array(t)],{type:\\\"image/png\\\"});self.createImageBitmap(r).then((function(t){e(null,t)})).catch((function(t){e(new Error(\\\"Could not load image because of \\\"+t.message+\\\". Please make sure to use a supported image type such as PNG or JPEG. Note that SVGs are not supported.\\\"))}))}(r,e):function(t,e,r,n){var i=new self.Image,a=self.URL;i.onload=function(){e(null,i),a.revokeObjectURL(i.src)},i.onerror=function(){return e(new Error(\\\"Could not load image. Please make sure to use a supported image type such as PNG or JPEG. Note that SVGs are not supported.\\\"))};var o=new self.Blob([new Uint8Array(t)],{type:\\\"image/png\\\"});i.cacheControl=r,i.expires=n,i.src=t.byteLength?a.createObjectURL(o):\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAC0lEQVQYV2NgAAIAAAUAAarVyFEAAAAASUVORK5CYII=\\\"}(r,e,n,a))}));return{cancel:function(){a.cancel(),i()}}};function Lt(t,e,r){r[t]&&-1!==r[t].indexOf(e)||(r[t]=r[t]||[],r[t].push(e))}function Ct(t,e,r){if(r&&r[t]){var n=r[t].indexOf(e);-1!==n&&r[t].splice(n,1)}}var Pt=function(t,e){void 0===e&&(e={}),f(this,e),this.type=t},Ot=function(t){function e(e,r){void 0===r&&(r={}),t.call(this,\\\"error\\\",f({error:e},r))}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e}(Pt),It=function(){};It.prototype.on=function(t,e){return this._listeners=this._listeners||{},Lt(t,e,this._listeners),this},It.prototype.off=function(t,e){return Ct(t,e,this._listeners),Ct(t,e,this._oneTimeListeners),this},It.prototype.once=function(t,e){return this._oneTimeListeners=this._oneTimeListeners||{},Lt(t,e,this._oneTimeListeners),this},It.prototype.fire=function(t,e){\\\"string\\\"==typeof t&&(t=new Pt(t,e||{}));var r=t.type;if(this.listens(r)){t.target=this;for(var n=0,i=this._listeners&&this._listeners[r]?this._listeners[r].slice():[];n<i.length;n+=1)i[n].call(this,t);for(var a=0,o=this._oneTimeListeners&&this._oneTimeListeners[r]?this._oneTimeListeners[r].slice():[];a<o.length;a+=1){var s=o[a];Ct(r,s,this._oneTimeListeners),s.call(this,t)}var l=this._eventedParent;l&&(f(t,\\\"function\\\"==typeof this._eventedParentData?this._eventedParentData():this._eventedParentData),l.fire(t))}else t instanceof Ot&&console.error(t.error);return this},It.prototype.listens=function(t){return this._listeners&&this._listeners[t]&&this._listeners[t].length>0||this._oneTimeListeners&&this._oneTimeListeners[t]&&this._oneTimeListeners[t].length>0||this._eventedParent&&this._eventedParent.listens(t)},It.prototype.setEventedParent=function(t,e){return this._eventedParent=t,this._eventedParentData=e,this};var Dt={$version:8,$root:{version:{required:!0,type:\\\"enum\\\",values:[8]},name:{type:\\\"string\\\"},metadata:{type:\\\"*\\\"},center:{type:\\\"array\\\",value:\\\"number\\\"},zoom:{type:\\\"number\\\"},bearing:{type:\\\"number\\\",default:0,period:360,units:\\\"degrees\\\"},pitch:{type:\\\"number\\\",default:0,units:\\\"degrees\\\"},light:{type:\\\"light\\\"},sources:{required:!0,type:\\\"sources\\\"},sprite:{type:\\\"string\\\"},glyphs:{type:\\\"string\\\"},transition:{type:\\\"transition\\\"},layers:{required:!0,type:\\\"array\\\",value:\\\"layer\\\"}},sources:{\\\"*\\\":{type:\\\"source\\\"}},source:[\\\"source_vector\\\",\\\"source_raster\\\",\\\"source_raster_dem\\\",\\\"source_geojson\\\",\\\"source_video\\\",\\\"source_image\\\"],source_vector:{type:{required:!0,type:\\\"enum\\\",values:{vector:{}}},url:{type:\\\"string\\\"},tiles:{type:\\\"array\\\",value:\\\"string\\\"},bounds:{type:\\\"array\\\",value:\\\"number\\\",length:4,default:[-180,-85.051129,180,85.051129]},scheme:{type:\\\"enum\\\",values:{xyz:{},tms:{}},default:\\\"xyz\\\"},minzoom:{type:\\\"number\\\",default:0},maxzoom:{type:\\\"number\\\",default:22},attribution:{type:\\\"string\\\"},promoteId:{type:\\\"promoteId\\\"},\\\"*\\\":{type:\\\"*\\\"}},source_raster:{type:{required:!0,type:\\\"enum\\\",values:{raster:{}}},url:{type:\\\"string\\\"},tiles:{type:\\\"array\\\",value:\\\"string\\\"},bounds:{type:\\\"array\\\",value:\\\"number\\\",length:4,default:[-180,-85.051129,180,85.051129]},minzoom:{type:\\\"number\\\",default:0},maxzoom:{type:\\\"number\\\",default:22},tileSize:{type:\\\"number\\\",default:512,units:\\\"pixels\\\"},scheme:{type:\\\"enum\\\",values:{xyz:{},tms:{}},default:\\\"xyz\\\"},attribution:{type:\\\"string\\\"},\\\"*\\\":{type:\\\"*\\\"}},source_raster_dem:{type:{required:!0,type:\\\"enum\\\",values:{\\\"raster-dem\\\":{}}},url:{type:\\\"string\\\"},tiles:{type:\\\"array\\\",value:\\\"string\\\"},bounds:{type:\\\"array\\\",value:\\\"number\\\",length:4,default:[-180,-85.051129,180,85.051129]},minzoom:{type:\\\"number\\\",default:0},maxzoom:{type:\\\"number\\\",default:22},tileSize:{type:\\\"number\\\",default:512,units:\\\"pixels\\\"},attribution:{type:\\\"string\\\"},encoding:{type:\\\"enum\\\",values:{terrarium:{},mapbox:{}},default:\\\"mapbox\\\"},\\\"*\\\":{type:\\\"*\\\"}},source_geojson:{type:{required:!0,type:\\\"enum\\\",values:{geojson:{}}},data:{type:\\\"*\\\"},maxzoom:{type:\\\"number\\\",default:18},attribution:{type:\\\"string\\\"},buffer:{type:\\\"number\\\",default:128,maximum:512,minimum:0},tolerance:{type:\\\"number\\\",default:.375},cluster:{type:\\\"boolean\\\",default:!1},clusterRadius:{type:\\\"number\\\",default:50,minimum:0},clusterMaxZoom:{type:\\\"number\\\"},clusterProperties:{type:\\\"*\\\"},lineMetrics:{type:\\\"boolean\\\",default:!1},generateId:{type:\\\"boolean\\\",default:!1},promoteId:{type:\\\"promoteId\\\"}},source_video:{type:{required:!0,type:\\\"enum\\\",values:{video:{}}},urls:{required:!0,type:\\\"array\\\",value:\\\"string\\\"},coordinates:{required:!0,type:\\\"array\\\",length:4,value:{type:\\\"array\\\",length:2,value:\\\"number\\\"}}},source_image:{type:{required:!0,type:\\\"enum\\\",values:{image:{}}},url:{required:!0,type:\\\"string\\\"},coordinates:{required:!0,type:\\\"array\\\",length:4,value:{type:\\\"array\\\",length:2,value:\\\"number\\\"}}},layer:{id:{type:\\\"string\\\",required:!0},type:{type:\\\"enum\\\",values:{fill:{},line:{},symbol:{},circle:{},heatmap:{},\\\"fill-extrusion\\\":{},raster:{},hillshade:{},background:{}},required:!0},metadata:{type:\\\"*\\\"},source:{type:\\\"string\\\"},\\\"source-layer\\\":{type:\\\"string\\\"},minzoom:{type:\\\"number\\\",minimum:0,maximum:24},maxzoom:{type:\\\"number\\\",minimum:0,maximum:24},filter:{type:\\\"filter\\\"},layout:{type:\\\"layout\\\"},paint:{type:\\\"paint\\\"}},layout:[\\\"layout_fill\\\",\\\"layout_line\\\",\\\"layout_circle\\\",\\\"layout_heatmap\\\",\\\"layout_fill-extrusion\\\",\\\"layout_symbol\\\",\\\"layout_raster\\\",\\\"layout_hillshade\\\",\\\"layout_background\\\"],layout_background:{visibility:{type:\\\"enum\\\",values:{visible:{},none:{}},default:\\\"visible\\\",\\\"property-type\\\":\\\"constant\\\"}},layout_fill:{\\\"fill-sort-key\\\":{type:\\\"number\\\",expression:{interpolated:!1,parameters:[\\\"zoom\\\",\\\"feature\\\"]},\\\"property-type\\\":\\\"data-driven\\\"},visibility:{type:\\\"enum\\\",values:{visible:{},none:{}},default:\\\"visible\\\",\\\"property-type\\\":\\\"constant\\\"}},layout_circle:{\\\"circle-sort-key\\\":{type:\\\"number\\\",expression:{interpolated:!1,parameters:[\\\"zoom\\\",\\\"feature\\\"]},\\\"property-type\\\":\\\"data-driven\\\"},visibility:{type:\\\"enum\\\",values:{visible:{},none:{}},default:\\\"visible\\\",\\\"property-type\\\":\\\"constant\\\"}},layout_heatmap:{visibility:{type:\\\"enum\\\",values:{visible:{},none:{}},default:\\\"visible\\\",\\\"property-type\\\":\\\"constant\\\"}},\\\"layout_fill-extrusion\\\":{visibility:{type:\\\"enum\\\",values:{visible:{},none:{}},default:\\\"visible\\\",\\\"property-type\\\":\\\"constant\\\"}},layout_line:{\\\"line-cap\\\":{type:\\\"enum\\\",values:{butt:{},round:{},square:{}},default:\\\"butt\\\",expression:{interpolated:!1,parameters:[\\\"zoom\\\"]},\\\"property-type\\\":\\\"data-constant\\\"},\\\"line-join\\\":{type:\\\"enum\\\",values:{bevel:{},round:{},miter:{}},default:\\\"miter\\\",expression:{interpolated:!1,parameters:[\\\"zoom\\\",\\\"feature\\\"]},\\\"property-type\\\":\\\"data-driven\\\"},\\\"line-miter-limit\\\":{type:\\\"number\\\",default:2,requires:[{\\\"line-join\\\":\\\"miter\\\"}],expression:{interpolated:!0,parameters:[\\\"zoom\\\"]},\\\"property-type\\\":\\\"data-constant\\\"},\\\"line-round-limit\\\":{type:\\\"number\\\",default:1.05,requires:[{\\\"line-join\\\":\\\"round\\\"}],expression:{interpolated:!0,parameters:[\\\"zoom\\\"]},\\\"property-type\\\":\\\"data-constant\\\"},\\\"line-sort-key\\\":{type:\\\"number\\\",expression:{interpolated:!1,parameters:[\\\"zoom\\\",\\\"feature\\\"]},\\\"property-type\\\":\\\"data-driven\\\"},visibility:{type:\\\"enum\\\",values:{visible:{},none:{}},default:\\\"visible\\\",\\\"property-type\\\":\\\"constant\\\"}},layout_symbol:{\\\"symbol-placement\\\":{type:\\\"enum\\\",values:{point:{},line:{},\\\"line-center\\\":{}},default:\\\"point\\\",expression:{interpolated:!1,parameters:[\\\"zoom\\\"]},\\\"property-type\\\":\\\"data-constant\\\"},\\\"symbol-spacing\\\":{type:\\\"number\\\",default:250,minimum:1,units:\\\"pixels\\\",requires:[{\\\"symbol-placement\\\":\\\"line\\\"}],expression:{interpolated:!0,parameters:[\\\"zoom\\\"]},\\\"property-type\\\":\\\"data-constant\\\"},\\\"symbol-avoid-edges\\\":{type:\\\"boolean\\\",default:!1,expression:{interpolated:!1,parameters:[\\\"zoom\\\"]},\\\"property-type\\\":\\\"data-constant\\\"},\\\"symbol-sort-key\\\":{type:\\\"number\\\",expression:{interpolated:!1,parameters:[\\\"zoom\\\",\\\"feature\\\"]},\\\"property-type\\\":\\\"data-driven\\\"},\\\"symbol-z-order\\\":{type:\\\"enum\\\",values:{auto:{},\\\"viewport-y\\\":{},source:{}},default:\\\"auto\\\",expression:{interpolated:!1,parameters:[\\\"zoom\\\"]},\\\"property-type\\\":\\\"data-constant\\\"},\\\"icon-allow-overlap\\\":{type:\\\"boolean\\\",default:!1,requires:[\\\"icon-image\\\"],expression:{interpolated:!1,parameters:[\\\"zoom\\\"]},\\\"property-type\\\":\\\"data-constant\\\"},\\\"icon-ignore-placement\\\":{type:\\\"boolean\\\",default:!1,requires:[\\\"icon-image\\\"],expression:{interpolated:!1,parameters:[\\\"zoom\\\"]},\\\"property-type\\\":\\\"data-constant\\\"},\\\"icon-optional\\\":{type:\\\"boolean\\\",default:!1,requires:[\\\"icon-image\\\",\\\"text-field\\\"],expression:{interpolated:!1,parameters:[\\\"zoom\\\"]},\\\"property-type\\\":\\\"data-constant\\\"},\\\"icon-rotation-alignment\\\":{type:\\\"enum\\\",values:{map:{},viewport:{},auto:{}},default:\\\"auto\\\",requires:[\\\"icon-image\\\"],expression:{interpolated:!1,parameters:[\\\"zoom\\\"]},\\\"property-type\\\":\\\"data-constant\\\"},\\\"icon-size\\\":{type:\\\"number\\\",default:1,minimum:0,units:\\\"factor of the original icon size\\\",requires:[\\\"icon-image\\\"],expression:{interpolated:!0,parameters:[\\\"zoom\\\",\\\"feature\\\"]},\\\"property-type\\\":\\\"data-driven\\\"},\\\"icon-text-fit\\\":{type:\\\"enum\\\",values:{none:{},width:{},height:{},both:{}},default:\\\"none\\\",requires:[\\\"icon-image\\\",\\\"text-field\\\"],expression:{interpolated:!1,parameters:[\\\"zoom\\\"]},\\\"property-type\\\":\\\"data-constant\\\"},\\\"icon-text-fit-padding\\\":{type:\\\"array\\\",value:\\\"number\\\",length:4,default:[0,0,0,0],units:\\\"pixels\\\",requires:[\\\"icon-image\\\",\\\"text-field\\\",{\\\"icon-text-fit\\\":[\\\"both\\\",\\\"width\\\",\\\"height\\\"]}],expression:{interpolated:!0,parameters:[\\\"zoom\\\"]},\\\"property-type\\\":\\\"data-constant\\\"},\\\"icon-image\\\":{type:\\\"resolvedImage\\\",tokens:!0,expression:{interpolated:!1,parameters:[\\\"zoom\\\",\\\"feature\\\"]},\\\"property-type\\\":\\\"data-driven\\\"},\\\"icon-rotate\\\":{type:\\\"number\\\",default:0,period:360,units:\\\"degrees\\\",requires:[\\\"icon-image\\\"],expression:{interpolated:!0,parameters:[\\\"zoom\\\",\\\"feature\\\"]},\\\"property-type\\\":\\\"data-driven\\\"},\\\"icon-padding\\\":{type:\\\"number\\\",default:2,minimum:0,units:\\\"pixels\\\",requires:[\\\"icon-image\\\"],expression:{interpolated:!0,parameters:[\\\"zoom\\\"]},\\\"property-type\\\":\\\"data-constant\\\"},\\\"icon-keep-upright\\\":{type:\\\"boolean\\\",default:!1,requires:[\\\"icon-image\\\",{\\\"icon-rotation-alignment\\\":\\\"map\\\"},{\\\"symbol-placement\\\":[\\\"line\\\",\\\"line-center\\\"]}],expression:{interpolated:!1,parameters:[\\\"zoom\\\"]},\\\"property-type\\\":\\\"data-constant\\\"},\\\"icon-offset\\\":{type:\\\"array\\\",value:\\\"number\\\",length:2,default:[0,0],requires:[\\\"icon-image\\\"],expression:{interpolated:!0,parameters:[\\\"zoom\\\",\\\"feature\\\"]},\\\"property-type\\\":\\\"data-driven\\\"},\\\"icon-anchor\\\":{type:\\\"enum\\\",values:{center:{},left:{},right:{},top:{},bottom:{},\\\"top-left\\\":{},\\\"top-right\\\":{},\\\"bottom-left\\\":{},\\\"bottom-right\\\":{}},default:\\\"center\\\",requires:[\\\"icon-image\\\"],expression:{interpolated:!1,parameters:[\\\"zoom\\\",\\\"feature\\\"]},\\\"property-type\\\":\\\"data-driven\\\"},\\\"icon-pitch-alignment\\\":{type:\\\"enum\\\",values:{map:{},viewport:{},auto:{}},default:\\\"auto\\\",requires:[\\\"icon-image\\\"],expression:{interpolated:!1,parameters:[\\\"zoom\\\"]},\\\"property-type\\\":\\\"data-constant\\\"},\\\"text-pitch-alignment\\\":{type:\\\"enum\\\",values:{map:{},viewport:{},auto:{}},default:\\\"auto\\\",requires:[\\\"text-field\\\"],expression:{interpolated:!1,parameters:[\\\"zoom\\\"]},\\\"property-type\\\":\\\"data-constant\\\"},\\\"text-rotation-alignment\\\":{type:\\\"enum\\\",values:{map:{},viewport:{},auto:{}},default:\\\"auto\\\",requires:[\\\"text-field\\\"],expression:{interpolated:!1,parameters:[\\\"zoom\\\"]},\\\"property-type\\\":\\\"data-constant\\\"},\\\"text-field\\\":{type:\\\"formatted\\\",default:\\\"\\\",tokens:!0,expression:{interpolated:!1,parameters:[\\\"zoom\\\",\\\"feature\\\"]},\\\"property-type\\\":\\\"data-driven\\\"},\\\"text-font\\\":{type:\\\"array\\\",value:\\\"string\\\",default:[\\\"Open Sans Regular\\\",\\\"Arial Unicode MS Regular\\\"],requires:[\\\"text-field\\\"],expression:{interpolated:!1,parameters:[\\\"zoom\\\",\\\"feature\\\"]},\\\"property-type\\\":\\\"data-driven\\\"},\\\"text-size\\\":{type:\\\"number\\\",default:16,minimum:0,units:\\\"pixels\\\",requires:[\\\"text-field\\\"],expression:{interpolated:!0,parameters:[\\\"zoom\\\",\\\"feature\\\"]},\\\"property-type\\\":\\\"data-driven\\\"},\\\"text-max-width\\\":{type:\\\"number\\\",default:10,minimum:0,units:\\\"ems\\\",requires:[\\\"text-field\\\"],expression:{interpolated:!0,parameters:[\\\"zoom\\\",\\\"feature\\\"]},\\\"property-type\\\":\\\"data-driven\\\"},\\\"text-line-height\\\":{type:\\\"number\\\",default:1.2,units:\\\"ems\\\",requires:[\\\"text-field\\\"],expression:{interpolated:!0,parameters:[\\\"zoom\\\"]},\\\"property-type\\\":\\\"data-constant\\\"},\\\"text-letter-spacing\\\":{type:\\\"number\\\",default:0,units:\\\"ems\\\",requires:[\\\"text-field\\\"],expression:{interpolated:!0,parameters:[\\\"zoom\\\",\\\"feature\\\"]},\\\"property-type\\\":\\\"data-driven\\\"},\\\"text-justify\\\":{type:\\\"enum\\\",values:{auto:{},left:{},center:{},right:{}},default:\\\"center\\\",requires:[\\\"text-field\\\"],expression:{interpolated:!1,parameters:[\\\"zoom\\\",\\\"feature\\\"]},\\\"property-type\\\":\\\"data-driven\\\"},\\\"text-radial-offset\\\":{type:\\\"number\\\",units:\\\"ems\\\",default:0,requires:[\\\"text-field\\\"],\\\"property-type\\\":\\\"data-driven\\\",expression:{interpolated:!0,parameters:[\\\"zoom\\\",\\\"feature\\\"]}},\\\"text-variable-anchor\\\":{type:\\\"array\\\",value:\\\"enum\\\",values:{center:{},left:{},right:{},top:{},bottom:{},\\\"top-left\\\":{},\\\"top-right\\\":{},\\\"bottom-left\\\":{},\\\"bottom-right\\\":{}},requires:[\\\"text-field\\\",{\\\"symbol-placement\\\":[\\\"point\\\"]}],expression:{interpolated:!1,parameters:[\\\"zoom\\\"]},\\\"property-type\\\":\\\"data-constant\\\"},\\\"text-anchor\\\":{type:\\\"enum\\\",values:{center:{},left:{},right:{},top:{},bottom:{},\\\"top-left\\\":{},\\\"top-right\\\":{},\\\"bottom-left\\\":{},\\\"bottom-right\\\":{}},default:\\\"center\\\",requires:[\\\"text-field\\\",{\\\"!\\\":\\\"text-variable-anchor\\\"}],expression:{interpolated:!1,parameters:[\\\"zoom\\\",\\\"feature\\\"]},\\\"property-type\\\":\\\"data-driven\\\"},\\\"text-max-angle\\\":{type:\\\"number\\\",default:45,units:\\\"degrees\\\",requires:[\\\"text-field\\\",{\\\"symbol-placement\\\":[\\\"line\\\",\\\"line-center\\\"]}],expression:{interpolated:!0,parameters:[\\\"zoom\\\"]},\\\"property-type\\\":\\\"data-constant\\\"},\\\"text-writing-mode\\\":{type:\\\"array\\\",value:\\\"enum\\\",values:{horizontal:{},vertical:{}},requires:[\\\"text-field\\\",{\\\"symbol-placement\\\":[\\\"point\\\"]}],expression:{interpolated:!1,parameters:[\\\"zoom\\\"]},\\\"property-type\\\":\\\"data-constant\\\"},\\\"text-rotate\\\":{type:\\\"number\\\",default:0,period:360,units:\\\"degrees\\\",requires:[\\\"text-field\\\"],expression:{interpolated:!0,parameters:[\\\"zoom\\\",\\\"feature\\\"]},\\\"property-type\\\":\\\"data-driven\\\"},\\\"text-padding\\\":{type:\\\"number\\\",default:2,minimum:0,units:\\\"pixels\\\",requires:[\\\"text-field\\\"],expression:{interpolated:!0,parameters:[\\\"zoom\\\"]},\\\"property-type\\\":\\\"data-constant\\\"},\\\"text-keep-upright\\\":{type:\\\"boolean\\\",default:!0,requires:[\\\"text-field\\\",{\\\"text-rotation-alignment\\\":\\\"map\\\"},{\\\"symbol-placement\\\":[\\\"line\\\",\\\"line-center\\\"]}],expression:{interpolated:!1,parameters:[\\\"zoom\\\"]},\\\"property-type\\\":\\\"data-constant\\\"},\\\"text-transform\\\":{type:\\\"enum\\\",values:{none:{},uppercase:{},lowercase:{}},default:\\\"none\\\",requires:[\\\"text-field\\\"],expression:{interpolated:!1,parameters:[\\\"zoom\\\",\\\"feature\\\"]},\\\"property-type\\\":\\\"data-driven\\\"},\\\"text-offset\\\":{type:\\\"array\\\",value:\\\"number\\\",units:\\\"ems\\\",length:2,default:[0,0],requires:[\\\"text-field\\\",{\\\"!\\\":\\\"text-radial-offset\\\"}],expression:{interpolated:!0,parameters:[\\\"zoom\\\",\\\"feature\\\"]},\\\"property-type\\\":\\\"data-driven\\\"},\\\"text-allow-overlap\\\":{type:\\\"boolean\\\",default:!1,requires:[\\\"text-field\\\"],expression:{interpolated:!1,parameters:[\\\"zoom\\\"]},\\\"property-type\\\":\\\"data-constant\\\"},\\\"text-ignore-placement\\\":{type:\\\"boolean\\\",default:!1,requires:[\\\"text-field\\\"],expression:{interpolated:!1,parameters:[\\\"zoom\\\"]},\\\"property-type\\\":\\\"data-constant\\\"},\\\"text-optional\\\":{type:\\\"boolean\\\",default:!1,requires:[\\\"text-field\\\",\\\"icon-image\\\"],expression:{interpolated:!1,parameters:[\\\"zoom\\\"]},\\\"property-type\\\":\\\"data-constant\\\"},visibility:{type:\\\"enum\\\",values:{visible:{},none:{}},default:\\\"visible\\\",\\\"property-type\\\":\\\"constant\\\"}},layout_raster:{visibility:{type:\\\"enum\\\",values:{visible:{},none:{}},default:\\\"visible\\\",\\\"property-type\\\":\\\"constant\\\"}},layout_hillshade:{visibility:{type:\\\"enum\\\",values:{visible:{},none:{}},default:\\\"visible\\\",\\\"property-type\\\":\\\"constant\\\"}},filter:{type:\\\"array\\\",value:\\\"*\\\"},filter_operator:{type:\\\"enum\\\",values:{\\\"==\\\":{},\\\"!=\\\":{},\\\">\\\":{},\\\">=\\\":{},\\\"<\\\":{},\\\"<=\\\":{},in:{},\\\"!in\\\":{},all:{},any:{},none:{},has:{},\\\"!has\\\":{},within:{}}},geometry_type:{type:\\\"enum\\\",values:{Point:{},LineString:{},Polygon:{}}},function:{expression:{type:\\\"expression\\\"},stops:{type:\\\"array\\\",value:\\\"function_stop\\\"},base:{type:\\\"number\\\",default:1,minimum:0},property:{type:\\\"string\\\",default:\\\"$zoom\\\"},type:{type:\\\"enum\\\",values:{identity:{},exponential:{},interval:{},categorical:{}},default:\\\"exponential\\\"},colorSpace:{type:\\\"enum\\\",values:{rgb:{},lab:{},hcl:{}},default:\\\"rgb\\\"},default:{type:\\\"*\\\",required:!1}},function_stop:{type:\\\"array\\\",minimum:0,maximum:24,value:[\\\"number\\\",\\\"color\\\"],length:2},expression:{type:\\\"array\\\",value:\\\"*\\\",minimum:1},expression_name:{type:\\\"enum\\\",values:{let:{group:\\\"Variable binding\\\"},var:{group:\\\"Variable binding\\\"},literal:{group:\\\"Types\\\"},array:{group:\\\"Types\\\"},at:{group:\\\"Lookup\\\"},in:{group:\\\"Lookup\\\"},\\\"index-of\\\":{group:\\\"Lookup\\\"},slice:{group:\\\"Lookup\\\"},case:{group:\\\"Decision\\\"},match:{group:\\\"Decision\\\"},coalesce:{group:\\\"Decision\\\"},step:{group:\\\"Ramps, scales, curves\\\"},interpolate:{group:\\\"Ramps, scales, curves\\\"},\\\"interpolate-hcl\\\":{group:\\\"Ramps, scales, curves\\\"},\\\"interpolate-lab\\\":{group:\\\"Ramps, scales, curves\\\"},ln2:{group:\\\"Math\\\"},pi:{group:\\\"Math\\\"},e:{group:\\\"Math\\\"},typeof:{group:\\\"Types\\\"},string:{group:\\\"Types\\\"},number:{group:\\\"Types\\\"},boolean:{group:\\\"Types\\\"},object:{group:\\\"Types\\\"},collator:{group:\\\"Types\\\"},format:{group:\\\"Types\\\"},image:{group:\\\"Types\\\"},\\\"number-format\\\":{group:\\\"Types\\\"},\\\"to-string\\\":{group:\\\"Types\\\"},\\\"to-number\\\":{group:\\\"Types\\\"},\\\"to-boolean\\\":{group:\\\"Types\\\"},\\\"to-rgba\\\":{group:\\\"Color\\\"},\\\"to-color\\\":{group:\\\"Types\\\"},rgb:{group:\\\"Color\\\"},rgba:{group:\\\"Color\\\"},get:{group:\\\"Lookup\\\"},has:{group:\\\"Lookup\\\"},length:{group:\\\"Lookup\\\"},properties:{group:\\\"Feature data\\\"},\\\"feature-state\\\":{group:\\\"Feature data\\\"},\\\"geometry-type\\\":{group:\\\"Feature data\\\"},id:{group:\\\"Feature data\\\"},zoom:{group:\\\"Zoom\\\"},\\\"heatmap-density\\\":{group:\\\"Heatmap\\\"},\\\"line-progress\\\":{group:\\\"Feature data\\\"},accumulated:{group:\\\"Feature data\\\"},\\\"+\\\":{group:\\\"Math\\\"},\\\"*\\\":{group:\\\"Math\\\"},\\\"-\\\":{group:\\\"Math\\\"},\\\"/\\\":{group:\\\"Math\\\"},\\\"%\\\":{group:\\\"Math\\\"},\\\"^\\\":{group:\\\"Math\\\"},sqrt:{group:\\\"Math\\\"},log10:{group:\\\"Math\\\"},ln:{group:\\\"Math\\\"},log2:{group:\\\"Math\\\"},sin:{group:\\\"Math\\\"},cos:{group:\\\"Math\\\"},tan:{group:\\\"Math\\\"},asin:{group:\\\"Math\\\"},acos:{group:\\\"Math\\\"},atan:{group:\\\"Math\\\"},min:{group:\\\"Math\\\"},max:{group:\\\"Math\\\"},round:{group:\\\"Math\\\"},abs:{group:\\\"Math\\\"},ceil:{group:\\\"Math\\\"},floor:{group:\\\"Math\\\"},distance:{group:\\\"Math\\\"},\\\"==\\\":{group:\\\"Decision\\\"},\\\"!=\\\":{group:\\\"Decision\\\"},\\\">\\\":{group:\\\"Decision\\\"},\\\"<\\\":{group:\\\"Decision\\\"},\\\">=\\\":{group:\\\"Decision\\\"},\\\"<=\\\":{group:\\\"Decision\\\"},all:{group:\\\"Decision\\\"},any:{group:\\\"Decision\\\"},\\\"!\\\":{group:\\\"Decision\\\"},within:{group:\\\"Decision\\\"},\\\"is-supported-script\\\":{group:\\\"String\\\"},upcase:{group:\\\"String\\\"},downcase:{group:\\\"String\\\"},concat:{group:\\\"String\\\"},\\\"resolved-locale\\\":{group:\\\"String\\\"}}},light:{anchor:{type:\\\"enum\\\",default:\\\"viewport\\\",values:{map:{},viewport:{}},\\\"property-type\\\":\\\"data-constant\\\",transition:!1,expression:{interpolated:!1,parameters:[\\\"zoom\\\"]}},position:{type:\\\"array\\\",default:[1.15,210,30],length:3,value:\\\"number\\\",\\\"property-type\\\":\\\"data-constant\\\",transition:!0,expression:{interpolated:!0,parameters:[\\\"zoom\\\"]}},color:{type:\\\"color\\\",\\\"property-type\\\":\\\"data-constant\\\",default:\\\"#ffffff\\\",expression:{interpolated:!0,parameters:[\\\"zoom\\\"]},transition:!0},intensity:{type:\\\"number\\\",\\\"property-type\\\":\\\"data-constant\\\",default:.5,minimum:0,maximum:1,expression:{interpolated:!0,parameters:[\\\"zoom\\\"]},transition:!0}},paint:[\\\"paint_fill\\\",\\\"paint_line\\\",\\\"paint_circle\\\",\\\"paint_heatmap\\\",\\\"paint_fill-extrusion\\\",\\\"paint_symbol\\\",\\\"paint_raster\\\",\\\"paint_hillshade\\\",\\\"paint_background\\\"],paint_fill:{\\\"fill-antialias\\\":{type:\\\"boolean\\\",default:!0,expression:{interpolated:!1,parameters:[\\\"zoom\\\"]},\\\"property-type\\\":\\\"data-constant\\\"},\\\"fill-opacity\\\":{type:\\\"number\\\",default:1,minimum:0,maximum:1,transition:!0,expression:{interpolated:!0,parameters:[\\\"zoom\\\",\\\"feature\\\",\\\"feature-state\\\"]},\\\"property-type\\\":\\\"data-driven\\\"},\\\"fill-color\\\":{type:\\\"color\\\",default:\\\"#000000\\\",transition:!0,requires:[{\\\"!\\\":\\\"fill-pattern\\\"}],expression:{interpolated:!0,parameters:[\\\"zoom\\\",\\\"feature\\\",\\\"feature-state\\\"]},\\\"property-type\\\":\\\"data-driven\\\"},\\\"fill-outline-color\\\":{type:\\\"color\\\",transition:!0,requires:[{\\\"!\\\":\\\"fill-pattern\\\"},{\\\"fill-antialias\\\":!0}],expression:{interpolated:!0,parameters:[\\\"zoom\\\",\\\"feature\\\",\\\"feature-state\\\"]},\\\"property-type\\\":\\\"data-driven\\\"},\\\"fill-translate\\\":{type:\\\"array\\\",value:\\\"number\\\",length:2,default:[0,0],transition:!0,units:\\\"pixels\\\",expression:{interpolated:!0,parameters:[\\\"zoom\\\"]},\\\"property-type\\\":\\\"data-constant\\\"},\\\"fill-translate-anchor\\\":{type:\\\"enum\\\",values:{map:{},viewport:{}},default:\\\"map\\\",requires:[\\\"fill-translate\\\"],expression:{interpolated:!1,parameters:[\\\"zoom\\\"]},\\\"property-type\\\":\\\"data-constant\\\"},\\\"fill-pattern\\\":{type:\\\"resolvedImage\\\",transition:!0,expression:{interpolated:!1,parameters:[\\\"zoom\\\",\\\"feature\\\"]},\\\"property-type\\\":\\\"cross-faded-data-driven\\\"}},\\\"paint_fill-extrusion\\\":{\\\"fill-extrusion-opacity\\\":{type:\\\"number\\\",default:1,minimum:0,maximum:1,transition:!0,expression:{interpolated:!0,parameters:[\\\"zoom\\\"]},\\\"property-type\\\":\\\"data-constant\\\"},\\\"fill-extrusion-color\\\":{type:\\\"color\\\",default:\\\"#000000\\\",transition:!0,requires:[{\\\"!\\\":\\\"fill-extrusion-pattern\\\"}],expression:{interpolated:!0,parameters:[\\\"zoom\\\",\\\"feature\\\",\\\"feature-state\\\"]},\\\"property-type\\\":\\\"data-driven\\\"},\\\"fill-extrusion-translate\\\":{type:\\\"array\\\",value:\\\"number\\\",length:2,default:[0,0],transition:!0,units:\\\"pixels\\\",expression:{interpolated:!0,parameters:[\\\"zoom\\\"]},\\\"property-type\\\":\\\"data-constant\\\"},\\\"fill-extrusion-translate-anchor\\\":{type:\\\"enum\\\",values:{map:{},viewport:{}},default:\\\"map\\\",requires:[\\\"fill-extrusion-translate\\\"],expression:{interpolated:!1,parameters:[\\\"zoom\\\"]},\\\"property-type\\\":\\\"data-constant\\\"},\\\"fill-extrusion-pattern\\\":{type:\\\"resolvedImage\\\",transition:!0,expression:{interpolated:!1,parameters:[\\\"zoom\\\",\\\"feature\\\"]},\\\"property-type\\\":\\\"cross-faded-data-driven\\\"},\\\"fill-extrusion-height\\\":{type:\\\"number\\\",default:0,minimum:0,units:\\\"meters\\\",transition:!0,expression:{interpolated:!0,parameters:[\\\"zoom\\\",\\\"feature\\\",\\\"feature-state\\\"]},\\\"property-type\\\":\\\"data-driven\\\"},\\\"fill-extrusion-base\\\":{type:\\\"number\\\",default:0,minimum:0,units:\\\"meters\\\",transition:!0,requires:[\\\"fill-extrusion-height\\\"],expression:{interpolated:!0,parameters:[\\\"zoom\\\",\\\"feature\\\",\\\"feature-state\\\"]},\\\"property-type\\\":\\\"data-driven\\\"},\\\"fill-extrusion-vertical-gradient\\\":{type:\\\"boolean\\\",default:!0,transition:!1,expression:{interpolated:!1,parameters:[\\\"zoom\\\"]},\\\"property-type\\\":\\\"data-constant\\\"}},paint_line:{\\\"line-opacity\\\":{type:\\\"number\\\",default:1,minimum:0,maximum:1,transition:!0,expression:{interpolated:!0,parameters:[\\\"zoom\\\",\\\"feature\\\",\\\"feature-state\\\"]},\\\"property-type\\\":\\\"data-driven\\\"},\\\"line-color\\\":{type:\\\"color\\\",default:\\\"#000000\\\",transition:!0,requires:[{\\\"!\\\":\\\"line-pattern\\\"}],expression:{interpolated:!0,parameters:[\\\"zoom\\\",\\\"feature\\\",\\\"feature-state\\\"]},\\\"property-type\\\":\\\"data-driven\\\"},\\\"line-translate\\\":{type:\\\"array\\\",value:\\\"number\\\",length:2,default:[0,0],transition:!0,units:\\\"pixels\\\",expression:{interpolated:!0,parameters:[\\\"zoom\\\"]},\\\"property-type\\\":\\\"data-constant\\\"},\\\"line-translate-anchor\\\":{type:\\\"enum\\\",values:{map:{},viewport:{}},default:\\\"map\\\",requires:[\\\"line-translate\\\"],expression:{interpolated:!1,parameters:[\\\"zoom\\\"]},\\\"property-type\\\":\\\"data-constant\\\"},\\\"line-width\\\":{type:\\\"number\\\",default:1,minimum:0,transition:!0,units:\\\"pixels\\\",expression:{interpolated:!0,parameters:[\\\"zoom\\\",\\\"feature\\\",\\\"feature-state\\\"]},\\\"property-type\\\":\\\"data-driven\\\"},\\\"line-gap-width\\\":{type:\\\"number\\\",default:0,minimum:0,transition:!0,units:\\\"pixels\\\",expression:{interpolated:!0,parameters:[\\\"zoom\\\",\\\"feature\\\",\\\"feature-state\\\"]},\\\"property-type\\\":\\\"data-driven\\\"},\\\"line-offset\\\":{type:\\\"number\\\",default:0,transition:!0,units:\\\"pixels\\\",expression:{interpolated:!0,parameters:[\\\"zoom\\\",\\\"feature\\\",\\\"feature-state\\\"]},\\\"property-type\\\":\\\"data-driven\\\"},\\\"line-blur\\\":{type:\\\"number\\\",default:0,minimum:0,transition:!0,units:\\\"pixels\\\",expression:{interpolated:!0,parameters:[\\\"zoom\\\",\\\"feature\\\",\\\"feature-state\\\"]},\\\"property-type\\\":\\\"data-driven\\\"},\\\"line-dasharray\\\":{type:\\\"array\\\",value:\\\"number\\\",minimum:0,transition:!0,units:\\\"line widths\\\",requires:[{\\\"!\\\":\\\"line-pattern\\\"}],expression:{interpolated:!1,parameters:[\\\"zoom\\\"]},\\\"property-type\\\":\\\"cross-faded\\\"},\\\"line-pattern\\\":{type:\\\"resolvedImage\\\",transition:!0,expression:{interpolated:!1,parameters:[\\\"zoom\\\",\\\"feature\\\"]},\\\"property-type\\\":\\\"cross-faded-data-driven\\\"},\\\"line-gradient\\\":{type:\\\"color\\\",transition:!1,requires:[{\\\"!\\\":\\\"line-dasharray\\\"},{\\\"!\\\":\\\"line-pattern\\\"},{source:\\\"geojson\\\",has:{lineMetrics:!0}}],expression:{interpolated:!0,parameters:[\\\"line-progress\\\"]},\\\"property-type\\\":\\\"color-ramp\\\"}},paint_circle:{\\\"circle-radius\\\":{type:\\\"number\\\",default:5,minimum:0,transition:!0,units:\\\"pixels\\\",expression:{interpolated:!0,parameters:[\\\"zoom\\\",\\\"feature\\\",\\\"feature-state\\\"]},\\\"property-type\\\":\\\"data-driven\\\"},\\\"circle-color\\\":{type:\\\"color\\\",default:\\\"#000000\\\",transition:!0,expression:{interpolated:!0,parameters:[\\\"zoom\\\",\\\"feature\\\",\\\"feature-state\\\"]},\\\"property-type\\\":\\\"data-driven\\\"},\\\"circle-blur\\\":{type:\\\"number\\\",default:0,transition:!0,expression:{interpolated:!0,parameters:[\\\"zoom\\\",\\\"feature\\\",\\\"feature-state\\\"]},\\\"property-type\\\":\\\"data-driven\\\"},\\\"circle-opacity\\\":{type:\\\"number\\\",default:1,minimum:0,maximum:1,transition:!0,expression:{interpolated:!0,parameters:[\\\"zoom\\\",\\\"feature\\\",\\\"feature-state\\\"]},\\\"property-type\\\":\\\"data-driven\\\"},\\\"circle-translate\\\":{type:\\\"array\\\",value:\\\"number\\\",length:2,default:[0,0],transition:!0,units:\\\"pixels\\\",expression:{interpolated:!0,parameters:[\\\"zoom\\\"]},\\\"property-type\\\":\\\"data-constant\\\"},\\\"circle-translate-anchor\\\":{type:\\\"enum\\\",values:{map:{},viewport:{}},default:\\\"map\\\",requires:[\\\"circle-translate\\\"],expression:{interpolated:!1,parameters:[\\\"zoom\\\"]},\\\"property-type\\\":\\\"data-constant\\\"},\\\"circle-pitch-scale\\\":{type:\\\"enum\\\",values:{map:{},viewport:{}},default:\\\"map\\\",expression:{interpolated:!1,parameters:[\\\"zoom\\\"]},\\\"property-type\\\":\\\"data-constant\\\"},\\\"circle-pitch-alignment\\\":{type:\\\"enum\\\",values:{map:{},viewport:{}},default:\\\"viewport\\\",expression:{interpolated:!1,parameters:[\\\"zoom\\\"]},\\\"property-type\\\":\\\"data-constant\\\"},\\\"circle-stroke-width\\\":{type:\\\"number\\\",default:0,minimum:0,transition:!0,units:\\\"pixels\\\",expression:{interpolated:!0,parameters:[\\\"zoom\\\",\\\"feature\\\",\\\"feature-state\\\"]},\\\"property-type\\\":\\\"data-driven\\\"},\\\"circle-stroke-color\\\":{type:\\\"color\\\",default:\\\"#000000\\\",transition:!0,expression:{interpolated:!0,parameters:[\\\"zoom\\\",\\\"feature\\\",\\\"feature-state\\\"]},\\\"property-type\\\":\\\"data-driven\\\"},\\\"circle-stroke-opacity\\\":{type:\\\"number\\\",default:1,minimum:0,maximum:1,transition:!0,expression:{interpolated:!0,parameters:[\\\"zoom\\\",\\\"feature\\\",\\\"feature-state\\\"]},\\\"property-type\\\":\\\"data-driven\\\"}},paint_heatmap:{\\\"heatmap-radius\\\":{type:\\\"number\\\",default:30,minimum:1,transition:!0,units:\\\"pixels\\\",expression:{interpolated:!0,parameters:[\\\"zoom\\\",\\\"feature\\\",\\\"feature-state\\\"]},\\\"property-type\\\":\\\"data-driven\\\"},\\\"heatmap-weight\\\":{type:\\\"number\\\",default:1,minimum:0,transition:!1,expression:{interpolated:!0,parameters:[\\\"zoom\\\",\\\"feature\\\",\\\"feature-state\\\"]},\\\"property-type\\\":\\\"data-driven\\\"},\\\"heatmap-intensity\\\":{type:\\\"number\\\",default:1,minimum:0,transition:!0,expression:{interpolated:!0,parameters:[\\\"zoom\\\"]},\\\"property-type\\\":\\\"data-constant\\\"},\\\"heatmap-color\\\":{type:\\\"color\\\",default:[\\\"interpolate\\\",[\\\"linear\\\"],[\\\"heatmap-density\\\"],0,\\\"rgba(0, 0, 255, 0)\\\",.1,\\\"royalblue\\\",.3,\\\"cyan\\\",.5,\\\"lime\\\",.7,\\\"yellow\\\",1,\\\"red\\\"],transition:!1,expression:{interpolated:!0,parameters:[\\\"heatmap-density\\\"]},\\\"property-type\\\":\\\"color-ramp\\\"},\\\"heatmap-opacity\\\":{type:\\\"number\\\",default:1,minimum:0,maximum:1,transition:!0,expression:{interpolated:!0,parameters:[\\\"zoom\\\"]},\\\"property-type\\\":\\\"data-constant\\\"}},paint_symbol:{\\\"icon-opacity\\\":{type:\\\"number\\\",default:1,minimum:0,maximum:1,transition:!0,requires:[\\\"icon-image\\\"],expression:{interpolated:!0,parameters:[\\\"zoom\\\",\\\"feature\\\",\\\"feature-state\\\"]},\\\"property-type\\\":\\\"data-driven\\\"},\\\"icon-color\\\":{type:\\\"color\\\",default:\\\"#000000\\\",transition:!0,requires:[\\\"icon-image\\\"],expression:{interpolated:!0,parameters:[\\\"zoom\\\",\\\"feature\\\",\\\"feature-state\\\"]},\\\"property-type\\\":\\\"data-driven\\\"},\\\"icon-halo-color\\\":{type:\\\"color\\\",default:\\\"rgba(0, 0, 0, 0)\\\",transition:!0,requires:[\\\"icon-image\\\"],expression:{interpolated:!0,parameters:[\\\"zoom\\\",\\\"feature\\\",\\\"feature-state\\\"]},\\\"property-type\\\":\\\"data-driven\\\"},\\\"icon-halo-width\\\":{type:\\\"number\\\",default:0,minimum:0,transition:!0,units:\\\"pixels\\\",requires:[\\\"icon-image\\\"],expression:{interpolated:!0,parameters:[\\\"zoom\\\",\\\"feature\\\",\\\"feature-state\\\"]},\\\"property-type\\\":\\\"data-driven\\\"},\\\"icon-halo-blur\\\":{type:\\\"number\\\",default:0,minimum:0,transition:!0,units:\\\"pixels\\\",requires:[\\\"icon-image\\\"],expression:{interpolated:!0,parameters:[\\\"zoom\\\",\\\"feature\\\",\\\"feature-state\\\"]},\\\"property-type\\\":\\\"data-driven\\\"},\\\"icon-translate\\\":{type:\\\"array\\\",value:\\\"number\\\",length:2,default:[0,0],transition:!0,units:\\\"pixels\\\",requires:[\\\"icon-image\\\"],expression:{interpolated:!0,parameters:[\\\"zoom\\\"]},\\\"property-type\\\":\\\"data-constant\\\"},\\\"icon-translate-anchor\\\":{type:\\\"enum\\\",values:{map:{},viewport:{}},default:\\\"map\\\",requires:[\\\"icon-image\\\",\\\"icon-translate\\\"],expression:{interpolated:!1,parameters:[\\\"zoom\\\"]},\\\"property-type\\\":\\\"data-constant\\\"},\\\"text-opacity\\\":{type:\\\"number\\\",default:1,minimum:0,maximum:1,transition:!0,requires:[\\\"text-field\\\"],expression:{interpolated:!0,parameters:[\\\"zoom\\\",\\\"feature\\\",\\\"feature-state\\\"]},\\\"property-type\\\":\\\"data-driven\\\"},\\\"text-color\\\":{type:\\\"color\\\",default:\\\"#000000\\\",transition:!0,overridable:!0,requires:[\\\"text-field\\\"],expression:{interpolated:!0,parameters:[\\\"zoom\\\",\\\"feature\\\",\\\"feature-state\\\"]},\\\"property-type\\\":\\\"data-driven\\\"},\\\"text-halo-color\\\":{type:\\\"color\\\",default:\\\"rgba(0, 0, 0, 0)\\\",transition:!0,requires:[\\\"text-field\\\"],expression:{interpolated:!0,parameters:[\\\"zoom\\\",\\\"feature\\\",\\\"feature-state\\\"]},\\\"property-type\\\":\\\"data-driven\\\"},\\\"text-halo-width\\\":{type:\\\"number\\\",default:0,minimum:0,transition:!0,units:\\\"pixels\\\",requires:[\\\"text-field\\\"],expression:{interpolated:!0,parameters:[\\\"zoom\\\",\\\"feature\\\",\\\"feature-state\\\"]},\\\"property-type\\\":\\\"data-driven\\\"},\\\"text-halo-blur\\\":{type:\\\"number\\\",default:0,minimum:0,transition:!0,units:\\\"pixels\\\",requires:[\\\"text-field\\\"],expression:{interpolated:!0,parameters:[\\\"zoom\\\",\\\"feature\\\",\\\"feature-state\\\"]},\\\"property-type\\\":\\\"data-driven\\\"},\\\"text-translate\\\":{type:\\\"array\\\",value:\\\"number\\\",length:2,default:[0,0],transition:!0,units:\\\"pixels\\\",requires:[\\\"text-field\\\"],expression:{interpolated:!0,parameters:[\\\"zoom\\\"]},\\\"property-type\\\":\\\"data-constant\\\"},\\\"text-translate-anchor\\\":{type:\\\"enum\\\",values:{map:{},viewport:{}},default:\\\"map\\\",requires:[\\\"text-field\\\",\\\"text-translate\\\"],expression:{interpolated:!1,parameters:[\\\"zoom\\\"]},\\\"property-type\\\":\\\"data-constant\\\"}},paint_raster:{\\\"raster-opacity\\\":{type:\\\"number\\\",default:1,minimum:0,maximum:1,transition:!0,expression:{interpolated:!0,parameters:[\\\"zoom\\\"]},\\\"property-type\\\":\\\"data-constant\\\"},\\\"raster-hue-rotate\\\":{type:\\\"number\\\",default:0,period:360,transition:!0,units:\\\"degrees\\\",expression:{interpolated:!0,parameters:[\\\"zoom\\\"]},\\\"property-type\\\":\\\"data-constant\\\"},\\\"raster-brightness-min\\\":{type:\\\"number\\\",default:0,minimum:0,maximum:1,transition:!0,expression:{interpolated:!0,parameters:[\\\"zoom\\\"]},\\\"property-type\\\":\\\"data-constant\\\"},\\\"raster-brightness-max\\\":{type:\\\"number\\\",default:1,minimum:0,maximum:1,transition:!0,expression:{interpolated:!0,parameters:[\\\"zoom\\\"]},\\\"property-type\\\":\\\"data-constant\\\"},\\\"raster-saturation\\\":{type:\\\"number\\\",default:0,minimum:-1,maximum:1,transition:!0,expression:{interpolated:!0,parameters:[\\\"zoom\\\"]},\\\"property-type\\\":\\\"data-constant\\\"},\\\"raster-contrast\\\":{type:\\\"number\\\",default:0,minimum:-1,maximum:1,transition:!0,expression:{interpolated:!0,parameters:[\\\"zoom\\\"]},\\\"property-type\\\":\\\"data-constant\\\"},\\\"raster-resampling\\\":{type:\\\"enum\\\",values:{linear:{},nearest:{}},default:\\\"linear\\\",expression:{interpolated:!1,parameters:[\\\"zoom\\\"]},\\\"property-type\\\":\\\"data-constant\\\"},\\\"raster-fade-duration\\\":{type:\\\"number\\\",default:300,minimum:0,transition:!1,units:\\\"milliseconds\\\",expression:{interpolated:!0,parameters:[\\\"zoom\\\"]},\\\"property-type\\\":\\\"data-constant\\\"}},paint_hillshade:{\\\"hillshade-illumination-direction\\\":{type:\\\"number\\\",default:335,minimum:0,maximum:359,transition:!1,expression:{interpolated:!0,parameters:[\\\"zoom\\\"]},\\\"property-type\\\":\\\"data-constant\\\"},\\\"hillshade-illumination-anchor\\\":{type:\\\"enum\\\",values:{map:{},viewport:{}},default:\\\"viewport\\\",expression:{interpolated:!1,parameters:[\\\"zoom\\\"]},\\\"property-type\\\":\\\"data-constant\\\"},\\\"hillshade-exaggeration\\\":{type:\\\"number\\\",default:.5,minimum:0,maximum:1,transition:!0,expression:{interpolated:!0,parameters:[\\\"zoom\\\"]},\\\"property-type\\\":\\\"data-constant\\\"},\\\"hillshade-shadow-color\\\":{type:\\\"color\\\",default:\\\"#000000\\\",transition:!0,expression:{interpolated:!0,parameters:[\\\"zoom\\\"]},\\\"property-type\\\":\\\"data-constant\\\"},\\\"hillshade-highlight-color\\\":{type:\\\"color\\\",default:\\\"#FFFFFF\\\",transition:!0,expression:{interpolated:!0,parameters:[\\\"zoom\\\"]},\\\"property-type\\\":\\\"data-constant\\\"},\\\"hillshade-accent-color\\\":{type:\\\"color\\\",default:\\\"#000000\\\",transition:!0,expression:{interpolated:!0,parameters:[\\\"zoom\\\"]},\\\"property-type\\\":\\\"data-constant\\\"}},paint_background:{\\\"background-color\\\":{type:\\\"color\\\",default:\\\"#000000\\\",transition:!0,requires:[{\\\"!\\\":\\\"background-pattern\\\"}],expression:{interpolated:!0,parameters:[\\\"zoom\\\"]},\\\"property-type\\\":\\\"data-constant\\\"},\\\"background-pattern\\\":{type:\\\"resolvedImage\\\",transition:!0,expression:{interpolated:!1,parameters:[\\\"zoom\\\"]},\\\"property-type\\\":\\\"cross-faded\\\"},\\\"background-opacity\\\":{type:\\\"number\\\",default:1,minimum:0,maximum:1,transition:!0,expression:{interpolated:!0,parameters:[\\\"zoom\\\"]},\\\"property-type\\\":\\\"data-constant\\\"}},transition:{duration:{type:\\\"number\\\",default:300,minimum:0,units:\\\"milliseconds\\\"},delay:{type:\\\"number\\\",default:0,minimum:0,units:\\\"milliseconds\\\"}},\\\"property-type\\\":{\\\"data-driven\\\":{type:\\\"property-type\\\"},\\\"cross-faded\\\":{type:\\\"property-type\\\"},\\\"cross-faded-data-driven\\\":{type:\\\"property-type\\\"},\\\"color-ramp\\\":{type:\\\"property-type\\\"},\\\"data-constant\\\":{type:\\\"property-type\\\"},constant:{type:\\\"property-type\\\"}},promoteId:{\\\"*\\\":{type:\\\"string\\\"}}},zt=function(t,e,r,n){this.message=(t?t+\\\": \\\":\\\"\\\")+r,n&&(this.identifier=n),null!=e&&e.__line__&&(this.line=e.__line__)};function Rt(t){var e=t.key,r=t.value;return r?[new zt(e,r,\\\"constants have been deprecated as of v8\\\")]:[]}function Ft(t){for(var e=[],r=arguments.length-1;r-- >0;)e[r]=arguments[r+1];for(var n=0,i=e;n<i.length;n+=1){var a=i[n];for(var o in a)t[o]=a[o]}return t}function Bt(t){return t instanceof Number||t instanceof String||t instanceof Boolean?t.valueOf():t}function Nt(t){if(Array.isArray(t))return t.map(Nt);if(t instanceof Object&&!(t instanceof Number||t instanceof String||t instanceof Boolean)){var e={};for(var r in t)e[r]=Nt(t[r]);return e}return Bt(t)}var jt=function(t){function e(e,r){t.call(this,r),this.message=r,this.key=e}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e}(Error),Ut=function(t,e){void 0===e&&(e=[]),this.parent=t,this.bindings={};for(var r=0,n=e;r<n.length;r+=1){var i=n[r],a=i[0],o=i[1];this.bindings[a]=o}};Ut.prototype.concat=function(t){return new Ut(this,t)},Ut.prototype.get=function(t){if(this.bindings[t])return this.bindings[t];if(this.parent)return this.parent.get(t);throw new Error(t+\\\" not found in scope.\\\")},Ut.prototype.has=function(t){return!!this.bindings[t]||!!this.parent&&this.parent.has(t)};var Vt={kind:\\\"null\\\"},Ht={kind:\\\"number\\\"},qt={kind:\\\"string\\\"},Gt={kind:\\\"boolean\\\"},Zt={kind:\\\"color\\\"},Yt={kind:\\\"object\\\"},Wt={kind:\\\"value\\\"},Xt={kind:\\\"collator\\\"},Jt={kind:\\\"formatted\\\"},Kt={kind:\\\"resolvedImage\\\"};function $t(t,e){return{kind:\\\"array\\\",itemType:t,N:e}}function Qt(t){if(\\\"array\\\"===t.kind){var e=Qt(t.itemType);return\\\"number\\\"==typeof t.N?\\\"array<\\\"+e+\\\", \\\"+t.N+\\\">\\\":\\\"value\\\"===t.itemType.kind?\\\"array\\\":\\\"array<\\\"+e+\\\">\\\"}return t.kind}var te=[Vt,Ht,qt,Gt,Zt,Jt,Yt,$t(Wt),Kt];function ee(t,e){if(\\\"error\\\"===e.kind)return null;if(\\\"array\\\"===t.kind){if(\\\"array\\\"===e.kind&&(0===e.N&&\\\"value\\\"===e.itemType.kind||!ee(t.itemType,e.itemType))&&(\\\"number\\\"!=typeof t.N||t.N===e.N))return null}else{if(t.kind===e.kind)return null;if(\\\"value\\\"===t.kind)for(var r=0,n=te;r<n.length;r+=1)if(!ee(n[r],e))return null}return\\\"Expected \\\"+Qt(t)+\\\" but found \\\"+Qt(e)+\\\" instead.\\\"}function re(t,e){return e.some((function(e){return e.kind===t.kind}))}function ne(t,e){return e.some((function(e){return\\\"null\\\"===e?null===t:\\\"array\\\"===e?Array.isArray(t):\\\"object\\\"===e?t&&!Array.isArray(t)&&\\\"object\\\"==typeof t:e===typeof t}))}var ie=e((function(t,e){var r={transparent:[0,0,0,0],aliceblue:[240,248,255,1],antiquewhite:[250,235,215,1],aqua:[0,255,255,1],aquamarine:[127,255,212,1],azure:[240,255,255,1],beige:[245,245,220,1],bisque:[255,228,196,1],black:[0,0,0,1],blanchedalmond:[255,235,205,1],blue:[0,0,255,1],blueviolet:[138,43,226,1],brown:[165,42,42,1],burlywood:[222,184,135,1],cadetblue:[95,158,160,1],chartreuse:[127,255,0,1],chocolate:[210,105,30,1],coral:[255,127,80,1],cornflowerblue:[100,149,237,1],cornsilk:[255,248,220,1],crimson:[220,20,60,1],cyan:[0,255,255,1],darkblue:[0,0,139,1],darkcyan:[0,139,139,1],darkgoldenrod:[184,134,11,1],darkgray:[169,169,169,1],darkgreen:[0,100,0,1],darkgrey:[169,169,169,1],darkkhaki:[189,183,107,1],darkmagenta:[139,0,139,1],darkolivegreen:[85,107,47,1],darkorange:[255,140,0,1],darkorchid:[153,50,204,1],darkred:[139,0,0,1],darksalmon:[233,150,122,1],darkseagreen:[143,188,143,1],darkslateblue:[72,61,139,1],darkslategray:[47,79,79,1],darkslategrey:[47,79,79,1],darkturquoise:[0,206,209,1],darkviolet:[148,0,211,1],deeppink:[255,20,147,1],deepskyblue:[0,191,255,1],dimgray:[105,105,105,1],dimgrey:[105,105,105,1],dodgerblue:[30,144,255,1],firebrick:[178,34,34,1],floralwhite:[255,250,240,1],forestgreen:[34,139,34,1],fuchsia:[255,0,255,1],gainsboro:[220,220,220,1],ghostwhite:[248,248,255,1],gold:[255,215,0,1],goldenrod:[218,165,32,1],gray:[128,128,128,1],green:[0,128,0,1],greenyellow:[173,255,47,1],grey:[128,128,128,1],honeydew:[240,255,240,1],hotpink:[255,105,180,1],indianred:[205,92,92,1],indigo:[75,0,130,1],ivory:[255,255,240,1],khaki:[240,230,140,1],lavender:[230,230,250,1],lavenderblush:[255,240,245,1],lawngreen:[124,252,0,1],lemonchiffon:[255,250,205,1],lightblue:[173,216,230,1],lightcoral:[240,128,128,1],lightcyan:[224,255,255,1],lightgoldenrodyellow:[250,250,210,1],lightgray:[211,211,211,1],lightgreen:[144,238,144,1],lightgrey:[211,211,211,1],lightpink:[255,182,193,1],lightsalmon:[255,160,122,1],lightseagreen:[32,178,170,1],lightskyblue:[135,206,250,1],lightslategray:[119,136,153,1],lightslategrey:[119,136,153,1],lightsteelblue:[176,196,222,1],lightyellow:[255,255,224,1],lime:[0,255,0,1],limegreen:[50,205,50,1],linen:[250,240,230,1],magenta:[255,0,255,1],maroon:[128,0,0,1],mediumaquamarine:[102,205,170,1],mediumblue:[0,0,205,1],mediumorchid:[186,85,211,1],mediumpurple:[147,112,219,1],mediumseagreen:[60,179,113,1],mediumslateblue:[123,104,238,1],mediumspringgreen:[0,250,154,1],mediumturquoise:[72,209,204,1],mediumvioletred:[199,21,133,1],midnightblue:[25,25,112,1],mintcream:[245,255,250,1],mistyrose:[255,228,225,1],moccasin:[255,228,181,1],navajowhite:[255,222,173,1],navy:[0,0,128,1],oldlace:[253,245,230,1],olive:[128,128,0,1],olivedrab:[107,142,35,1],orange:[255,165,0,1],orangered:[255,69,0,1],orchid:[218,112,214,1],palegoldenrod:[238,232,170,1],palegreen:[152,251,152,1],paleturquoise:[175,238,238,1],palevioletred:[219,112,147,1],papayawhip:[255,239,213,1],peachpuff:[255,218,185,1],peru:[205,133,63,1],pink:[255,192,203,1],plum:[221,160,221,1],powderblue:[176,224,230,1],purple:[128,0,128,1],rebeccapurple:[102,51,153,1],red:[255,0,0,1],rosybrown:[188,143,143,1],royalblue:[65,105,225,1],saddlebrown:[139,69,19,1],salmon:[250,128,114,1],sandybrown:[244,164,96,1],seagreen:[46,139,87,1],seashell:[255,245,238,1],sienna:[160,82,45,1],silver:[192,192,192,1],skyblue:[135,206,235,1],slateblue:[106,90,205,1],slategray:[112,128,144,1],slategrey:[112,128,144,1],snow:[255,250,250,1],springgreen:[0,255,127,1],steelblue:[70,130,180,1],tan:[210,180,140,1],teal:[0,128,128,1],thistle:[216,191,216,1],tomato:[255,99,71,1],turquoise:[64,224,208,1],violet:[238,130,238,1],wheat:[245,222,179,1],white:[255,255,255,1],whitesmoke:[245,245,245,1],yellow:[255,255,0,1],yellowgreen:[154,205,50,1]};function n(t){return(t=Math.round(t))<0?0:t>255?255:t}function i(t){return t<0?0:t>1?1:t}function a(t){return\\\"%\\\"===t[t.length-1]?n(parseFloat(t)/100*255):n(parseInt(t))}function o(t){return\\\"%\\\"===t[t.length-1]?i(parseFloat(t)/100):i(parseFloat(t))}function s(t,e,r){return r<0?r+=1:r>1&&(r-=1),6*r<1?t+(e-t)*r*6:2*r<1?e:3*r<2?t+(e-t)*(2/3-r)*6:t}try{e.parseCSSColor=function(t){var e,i=t.replace(/ /g,\\\"\\\").toLowerCase();if(i in r)return r[i].slice();if(\\\"#\\\"===i[0])return 4===i.length?(e=parseInt(i.substr(1),16))>=0&&e<=4095?[(3840&e)>>4|(3840&e)>>8,240&e|(240&e)>>4,15&e|(15&e)<<4,1]:null:7===i.length&&(e=parseInt(i.substr(1),16))>=0&&e<=16777215?[(16711680&e)>>16,(65280&e)>>8,255&e,1]:null;var l=i.indexOf(\\\"(\\\"),u=i.indexOf(\\\")\\\");if(-1!==l&&u+1===i.length){var c=i.substr(0,l),f=i.substr(l+1,u-(l+1)).split(\\\",\\\"),h=1;switch(c){case\\\"rgba\\\":if(4!==f.length)return null;h=o(f.pop());case\\\"rgb\\\":return 3!==f.length?null:[a(f[0]),a(f[1]),a(f[2]),h];case\\\"hsla\\\":if(4!==f.length)return null;h=o(f.pop());case\\\"hsl\\\":if(3!==f.length)return null;var p=(parseFloat(f[0])%360+360)%360/360,d=o(f[1]),v=o(f[2]),g=v<=.5?v*(d+1):v+d-v*d,y=2*v-g;return[n(255*s(y,g,p+1/3)),n(255*s(y,g,p)),n(255*s(y,g,p-1/3)),h];default:return null}}return null}}catch(t){}})),ae=ie.parseCSSColor,oe=function(t,e,r,n){void 0===n&&(n=1),this.r=t,this.g=e,this.b=r,this.a=n};oe.parse=function(t){if(t){if(t instanceof oe)return t;if(\\\"string\\\"==typeof t){var e=ae(t);if(e)return new oe(e[0]/255*e[3],e[1]/255*e[3],e[2]/255*e[3],e[3])}}},oe.prototype.toString=function(){var t=this.toArray(),e=t[0],r=t[1],n=t[2],i=t[3];return\\\"rgba(\\\"+Math.round(e)+\\\",\\\"+Math.round(r)+\\\",\\\"+Math.round(n)+\\\",\\\"+i+\\\")\\\"},oe.prototype.toArray=function(){var t=this,e=t.r,r=t.g,n=t.b,i=t.a;return 0===i?[0,0,0,0]:[255*e/i,255*r/i,255*n/i,i]},oe.black=new oe(0,0,0,1),oe.white=new oe(1,1,1,1),oe.transparent=new oe(0,0,0,0),oe.red=new oe(1,0,0,1);var se=function(t,e,r){this.sensitivity=t?e?\\\"variant\\\":\\\"case\\\":e?\\\"accent\\\":\\\"base\\\",this.locale=r,this.collator=new Intl.Collator(this.locale?this.locale:[],{sensitivity:this.sensitivity,usage:\\\"search\\\"})};se.prototype.compare=function(t,e){return this.collator.compare(t,e)},se.prototype.resolvedLocale=function(){return new Intl.Collator(this.locale?this.locale:[]).resolvedOptions().locale};var le=function(t,e,r,n,i){this.text=t,this.image=e,this.scale=r,this.fontStack=n,this.textColor=i},ue=function(t){this.sections=t};ue.fromString=function(t){return new ue([new le(t,null,null,null,null)])},ue.prototype.isEmpty=function(){return 0===this.sections.length||!this.sections.some((function(t){return 0!==t.text.length||t.image&&0!==t.image.name.length}))},ue.factory=function(t){return t instanceof ue?t:ue.fromString(t)},ue.prototype.toString=function(){return 0===this.sections.length?\\\"\\\":this.sections.map((function(t){return t.text})).join(\\\"\\\")},ue.prototype.serialize=function(){for(var t=[\\\"format\\\"],e=0,r=this.sections;e<r.length;e+=1){var n=r[e];if(n.image)t.push([\\\"image\\\",n.image.name]);else{t.push(n.text);var i={};n.fontStack&&(i[\\\"text-font\\\"]=[\\\"literal\\\",n.fontStack.split(\\\",\\\")]),n.scale&&(i[\\\"font-scale\\\"]=n.scale),n.textColor&&(i[\\\"text-color\\\"]=[\\\"rgba\\\"].concat(n.textColor.toArray())),t.push(i)}}return t};var ce=function(t){this.name=t.name,this.available=t.available};function fe(t,e,r,n){return\\\"number\\\"==typeof t&&t>=0&&t<=255&&\\\"number\\\"==typeof e&&e>=0&&e<=255&&\\\"number\\\"==typeof r&&r>=0&&r<=255?void 0===n||\\\"number\\\"==typeof n&&n>=0&&n<=1?null:\\\"Invalid rgba value [\\\"+[t,e,r,n].join(\\\", \\\")+\\\"]: 'a' must be between 0 and 1.\\\":\\\"Invalid rgba value [\\\"+(\\\"number\\\"==typeof n?[t,e,r,n]:[t,e,r]).join(\\\", \\\")+\\\"]: 'r', 'g', and 'b' must be between 0 and 255.\\\"}function he(t){if(null===t)return!0;if(\\\"string\\\"==typeof t)return!0;if(\\\"boolean\\\"==typeof t)return!0;if(\\\"number\\\"==typeof t)return!0;if(t instanceof oe)return!0;if(t instanceof se)return!0;if(t instanceof ue)return!0;if(t instanceof ce)return!0;if(Array.isArray(t)){for(var e=0,r=t;e<r.length;e+=1)if(!he(r[e]))return!1;return!0}if(\\\"object\\\"==typeof t){for(var n in t)if(!he(t[n]))return!1;return!0}return!1}function pe(t){if(null===t)return Vt;if(\\\"string\\\"==typeof t)return qt;if(\\\"boolean\\\"==typeof t)return Gt;if(\\\"number\\\"==typeof t)return Ht;if(t instanceof oe)return Zt;if(t instanceof se)return Xt;if(t instanceof ue)return Jt;if(t instanceof ce)return Kt;if(Array.isArray(t)){for(var e,r=t.length,n=0,i=t;n<i.length;n+=1){var a=pe(i[n]);if(e){if(e===a)continue;e=Wt;break}e=a}return $t(e||Wt,r)}return Yt}function de(t){var e=typeof t;return null===t?\\\"\\\":\\\"string\\\"===e||\\\"number\\\"===e||\\\"boolean\\\"===e?String(t):t instanceof oe||t instanceof ue||t instanceof ce?t.toString():JSON.stringify(t)}ce.prototype.toString=function(){return this.name},ce.fromString=function(t){return t?new ce({name:t,available:!1}):null},ce.prototype.serialize=function(){return[\\\"image\\\",this.name]};var ve=function(t,e){this.type=t,this.value=e};ve.parse=function(t,e){if(2!==t.length)return e.error(\\\"'literal' expression requires exactly one argument, but found \\\"+(t.length-1)+\\\" instead.\\\");if(!he(t[1]))return e.error(\\\"invalid value\\\");var r=t[1],n=pe(r),i=e.expectedType;return\\\"array\\\"!==n.kind||0!==n.N||!i||\\\"array\\\"!==i.kind||\\\"number\\\"==typeof i.N&&0!==i.N||(n=i),new ve(n,r)},ve.prototype.evaluate=function(){return this.value},ve.prototype.eachChild=function(){},ve.prototype.outputDefined=function(){return!0},ve.prototype.serialize=function(){return\\\"array\\\"===this.type.kind||\\\"object\\\"===this.type.kind?[\\\"literal\\\",this.value]:this.value instanceof oe?[\\\"rgba\\\"].concat(this.value.toArray()):this.value instanceof ue?this.value.serialize():this.value};var ge=function(t){this.name=\\\"ExpressionEvaluationError\\\",this.message=t};ge.prototype.toJSON=function(){return this.message};var ye={string:qt,number:Ht,boolean:Gt,object:Yt},me=function(t,e){this.type=t,this.args=e};me.parse=function(t,e){if(t.length<2)return e.error(\\\"Expected at least one argument.\\\");var r,n=1,i=t[0];if(\\\"array\\\"===i){var a,o;if(t.length>2){var s=t[1];if(\\\"string\\\"!=typeof s||!(s in ye)||\\\"object\\\"===s)return e.error('The item type argument of \\\"array\\\" must be one of string, number, boolean',1);a=ye[s],n++}else a=Wt;if(t.length>3){if(null!==t[2]&&(\\\"number\\\"!=typeof t[2]||t[2]<0||t[2]!==Math.floor(t[2])))return e.error('The length argument to \\\"array\\\" must be a positive integer literal',2);o=t[2],n++}r=$t(a,o)}else r=ye[i];for(var l=[];n<t.length;n++){var u=e.parse(t[n],n,Wt);if(!u)return null;l.push(u)}return new me(r,l)},me.prototype.evaluate=function(t){for(var e=0;e<this.args.length;e++){var r=this.args[e].evaluate(t);if(!ee(this.type,pe(r)))return r;if(e===this.args.length-1)throw new ge(\\\"Expected value to be of type \\\"+Qt(this.type)+\\\", but found \\\"+Qt(pe(r))+\\\" instead.\\\")}return null},me.prototype.eachChild=function(t){this.args.forEach(t)},me.prototype.outputDefined=function(){return this.args.every((function(t){return t.outputDefined()}))},me.prototype.serialize=function(){var t=this.type,e=[t.kind];if(\\\"array\\\"===t.kind){var r=t.itemType;if(\\\"string\\\"===r.kind||\\\"number\\\"===r.kind||\\\"boolean\\\"===r.kind){e.push(r.kind);var n=t.N;(\\\"number\\\"==typeof n||this.args.length>1)&&e.push(n)}}return e.concat(this.args.map((function(t){return t.serialize()})))};var xe=function(t){this.type=Jt,this.sections=t};xe.parse=function(t,e){if(t.length<2)return e.error(\\\"Expected at least one argument.\\\");var r=t[1];if(!Array.isArray(r)&&\\\"object\\\"==typeof r)return e.error(\\\"First argument must be an image or text section.\\\");for(var n=[],i=!1,a=1;a<=t.length-1;++a){var o=t[a];if(i&&\\\"object\\\"==typeof o&&!Array.isArray(o)){i=!1;var s=null;if(o[\\\"font-scale\\\"]&&!(s=e.parse(o[\\\"font-scale\\\"],1,Ht)))return null;var l=null;if(o[\\\"text-font\\\"]&&!(l=e.parse(o[\\\"text-font\\\"],1,$t(qt))))return null;var u=null;if(o[\\\"text-color\\\"]&&!(u=e.parse(o[\\\"text-color\\\"],1,Zt)))return null;var c=n[n.length-1];c.scale=s,c.font=l,c.textColor=u}else{var f=e.parse(t[a],1,Wt);if(!f)return null;var h=f.type.kind;if(\\\"string\\\"!==h&&\\\"value\\\"!==h&&\\\"null\\\"!==h&&\\\"resolvedImage\\\"!==h)return e.error(\\\"Formatted text type must be 'string', 'value', 'image' or 'null'.\\\");i=!0,n.push({content:f,scale:null,font:null,textColor:null})}}return new xe(n)},xe.prototype.evaluate=function(t){return new ue(this.sections.map((function(e){var r=e.content.evaluate(t);return pe(r)===Kt?new le(\\\"\\\",r,null,null,null):new le(de(r),null,e.scale?e.scale.evaluate(t):null,e.font?e.font.evaluate(t).join(\\\",\\\"):null,e.textColor?e.textColor.evaluate(t):null)})))},xe.prototype.eachChild=function(t){for(var e=0,r=this.sections;e<r.length;e+=1){var n=r[e];t(n.content),n.scale&&t(n.scale),n.font&&t(n.font),n.textColor&&t(n.textColor)}},xe.prototype.outputDefined=function(){return!1},xe.prototype.serialize=function(){for(var t=[\\\"format\\\"],e=0,r=this.sections;e<r.length;e+=1){var n=r[e];t.push(n.content.serialize());var i={};n.scale&&(i[\\\"font-scale\\\"]=n.scale.serialize()),n.font&&(i[\\\"text-font\\\"]=n.font.serialize()),n.textColor&&(i[\\\"text-color\\\"]=n.textColor.serialize()),t.push(i)}return t};var be=function(t){this.type=Kt,this.input=t};be.parse=function(t,e){if(2!==t.length)return e.error(\\\"Expected two arguments.\\\");var r=e.parse(t[1],1,qt);return r?new be(r):e.error(\\\"No image name provided.\\\")},be.prototype.evaluate=function(t){var e=this.input.evaluate(t),r=ce.fromString(e);return r&&t.availableImages&&(r.available=t.availableImages.indexOf(e)>-1),r},be.prototype.eachChild=function(t){t(this.input)},be.prototype.outputDefined=function(){return!1},be.prototype.serialize=function(){return[\\\"image\\\",this.input.serialize()]};var _e={\\\"to-boolean\\\":Gt,\\\"to-color\\\":Zt,\\\"to-number\\\":Ht,\\\"to-string\\\":qt},we=function(t,e){this.type=t,this.args=e};we.parse=function(t,e){if(t.length<2)return e.error(\\\"Expected at least one argument.\\\");var r=t[0];if((\\\"to-boolean\\\"===r||\\\"to-string\\\"===r)&&2!==t.length)return e.error(\\\"Expected one argument.\\\");for(var n=_e[r],i=[],a=1;a<t.length;a++){var o=e.parse(t[a],a,Wt);if(!o)return null;i.push(o)}return new we(n,i)},we.prototype.evaluate=function(t){if(\\\"boolean\\\"===this.type.kind)return Boolean(this.args[0].evaluate(t));if(\\\"color\\\"===this.type.kind){for(var e,r,n=0,i=this.args;n<i.length;n+=1){if(r=null,(e=i[n].evaluate(t))instanceof oe)return e;if(\\\"string\\\"==typeof e){var a=t.parseColor(e);if(a)return a}else if(Array.isArray(e)&&!(r=e.length<3||e.length>4?\\\"Invalid rbga value \\\"+JSON.stringify(e)+\\\": expected an array containing either three or four numeric values.\\\":fe(e[0],e[1],e[2],e[3])))return new oe(e[0]/255,e[1]/255,e[2]/255,e[3])}throw new ge(r||\\\"Could not parse color from value '\\\"+(\\\"string\\\"==typeof e?e:String(JSON.stringify(e)))+\\\"'\\\")}if(\\\"number\\\"===this.type.kind){for(var o=null,s=0,l=this.args;s<l.length;s+=1){if(null===(o=l[s].evaluate(t)))return 0;var u=Number(o);if(!isNaN(u))return u}throw new ge(\\\"Could not convert \\\"+JSON.stringify(o)+\\\" to number.\\\")}return\\\"formatted\\\"===this.type.kind?ue.fromString(de(this.args[0].evaluate(t))):\\\"resolvedImage\\\"===this.type.kind?ce.fromString(de(this.args[0].evaluate(t))):de(this.args[0].evaluate(t))},we.prototype.eachChild=function(t){this.args.forEach(t)},we.prototype.outputDefined=function(){return this.args.every((function(t){return t.outputDefined()}))},we.prototype.serialize=function(){if(\\\"formatted\\\"===this.type.kind)return new xe([{content:this.args[0],scale:null,font:null,textColor:null}]).serialize();if(\\\"resolvedImage\\\"===this.type.kind)return new be(this.args[0]).serialize();var t=[\\\"to-\\\"+this.type.kind];return this.eachChild((function(e){t.push(e.serialize())})),t};var Te=[\\\"Unknown\\\",\\\"Point\\\",\\\"LineString\\\",\\\"Polygon\\\"],ke=function(){this.globals=null,this.feature=null,this.featureState=null,this.formattedSection=null,this._parseColorCache={},this.availableImages=null,this.canonical=null};ke.prototype.id=function(){return this.feature&&\\\"id\\\"in this.feature?this.feature.id:null},ke.prototype.geometryType=function(){return this.feature?\\\"number\\\"==typeof this.feature.type?Te[this.feature.type]:this.feature.type:null},ke.prototype.geometry=function(){return this.feature&&\\\"geometry\\\"in this.feature?this.feature.geometry:null},ke.prototype.canonicalID=function(){return this.canonical},ke.prototype.properties=function(){return this.feature&&this.feature.properties||{}},ke.prototype.parseColor=function(t){var e=this._parseColorCache[t];return e||(e=this._parseColorCache[t]=oe.parse(t)),e};var Ae=function(t,e,r,n){this.name=t,this.type=e,this._evaluate=r,this.args=n};Ae.prototype.evaluate=function(t){return this._evaluate(t,this.args)},Ae.prototype.eachChild=function(t){this.args.forEach(t)},Ae.prototype.outputDefined=function(){return!1},Ae.prototype.serialize=function(){return[this.name].concat(this.args.map((function(t){return t.serialize()})))},Ae.parse=function(t,e){var r,n=t[0],i=Ae.definitions[n];if(!i)return e.error('Unknown expression \\\"'+n+'\\\". If you wanted a literal array, use [\\\"literal\\\", [...]].',0);for(var a=Array.isArray(i)?i[0]:i.type,o=Array.isArray(i)?[[i[1],i[2]]]:i.overloads,s=o.filter((function(e){var r=e[0];return!Array.isArray(r)||r.length===t.length-1})),l=null,u=0,c=s;u<c.length;u+=1){var f=c[u],h=f[0],p=f[1];l=new We(e.registry,e.path,null,e.scope);for(var d=[],v=!1,g=1;g<t.length;g++){var y=t[g],m=Array.isArray(h)?h[g-1]:h.type,x=l.parse(y,1+d.length,m);if(!x){v=!0;break}d.push(x)}if(!v)if(Array.isArray(h)&&h.length!==d.length)l.error(\\\"Expected \\\"+h.length+\\\" arguments, but found \\\"+d.length+\\\" instead.\\\");else{for(var b=0;b<d.length;b++){var _=Array.isArray(h)?h[b]:h.type,w=d[b];l.concat(b+1).checkSubtype(_,w.type)}if(0===l.errors.length)return new Ae(n,a,p,d)}}if(1===s.length)(r=e.errors).push.apply(r,l.errors);else{for(var T=(s.length?s:o).map((function(t){return e=t[0],Array.isArray(e)?\\\"(\\\"+e.map(Qt).join(\\\", \\\")+\\\")\\\":\\\"(\\\"+Qt(e.type)+\\\"...)\\\";var e})).join(\\\" | \\\"),k=[],A=1;A<t.length;A++){var M=e.parse(t[A],1+k.length);if(!M)return null;k.push(Qt(M.type))}e.error(\\\"Expected arguments of type \\\"+T+\\\", but found (\\\"+k.join(\\\", \\\")+\\\") instead.\\\")}return null},Ae.register=function(t,e){for(var r in Ae.definitions=e,e)t[r]=Ae};var Me=function(t,e,r){this.type=Xt,this.locale=r,this.caseSensitive=t,this.diacriticSensitive=e};Me.parse=function(t,e){if(2!==t.length)return e.error(\\\"Expected one argument.\\\");var r=t[1];if(\\\"object\\\"!=typeof r||Array.isArray(r))return e.error(\\\"Collator options argument must be an object.\\\");var n=e.parse(void 0!==r[\\\"case-sensitive\\\"]&&r[\\\"case-sensitive\\\"],1,Gt);if(!n)return null;var i=e.parse(void 0!==r[\\\"diacritic-sensitive\\\"]&&r[\\\"diacritic-sensitive\\\"],1,Gt);if(!i)return null;var a=null;return r.locale&&!(a=e.parse(r.locale,1,qt))?null:new Me(n,i,a)},Me.prototype.evaluate=function(t){return new se(this.caseSensitive.evaluate(t),this.diacriticSensitive.evaluate(t),this.locale?this.locale.evaluate(t):null)},Me.prototype.eachChild=function(t){t(this.caseSensitive),t(this.diacriticSensitive),this.locale&&t(this.locale)},Me.prototype.outputDefined=function(){return!1},Me.prototype.serialize=function(){var t={};return t[\\\"case-sensitive\\\"]=this.caseSensitive.serialize(),t[\\\"diacritic-sensitive\\\"]=this.diacriticSensitive.serialize(),this.locale&&(t.locale=this.locale.serialize()),[\\\"collator\\\",t]};var Se=8192;function Ee(t,e){t[0]=Math.min(t[0],e[0]),t[1]=Math.min(t[1],e[1]),t[2]=Math.max(t[2],e[0]),t[3]=Math.max(t[3],e[1])}function Le(t,e){return!(t[0]<=e[0]||t[2]>=e[2]||t[1]<=e[1]||t[3]>=e[3])}function Ce(t,e){var r,n=(180+t[0])/360,i=(r=t[1],(180-180/Math.PI*Math.log(Math.tan(Math.PI/4+r*Math.PI/360)))/360),a=Math.pow(2,e.z);return[Math.round(n*a*Se),Math.round(i*a*Se)]}function Pe(t,e,r){return e[1]>t[1]!=r[1]>t[1]&&t[0]<(r[0]-e[0])*(t[1]-e[1])/(r[1]-e[1])+e[0]}function Oe(t,e){for(var r=!1,n=0,i=e.length;n<i;n++)for(var a=e[n],o=0,s=a.length;o<s-1;o++){if(l=t,u=a[o],c=a[o+1],f=void 0,h=void 0,p=void 0,d=void 0,f=l[0]-u[0],h=l[1]-u[1],p=l[0]-c[0],d=l[1]-c[1],f*d-p*h==0&&f*p<=0&&h*d<=0)return!1;Pe(t,a[o],a[o+1])&&(r=!r)}var l,u,c,f,h,p,d;return r}function Ie(t,e){for(var r=0;r<e.length;r++)if(Oe(t,e[r]))return!0;return!1}function De(t,e,r,n){var i=t[0]-r[0],a=t[1]-r[1],o=e[0]-r[0],s=e[1]-r[1],l=n[0]-r[0],u=n[1]-r[1],c=i*u-l*a,f=o*u-l*s;return c>0&&f<0||c<0&&f>0}function ze(t,e,r){for(var n=0,i=r;n<i.length;n+=1)for(var a=i[n],o=0;o<a.length-1;++o)if(s=t,l=e,u=a[o],c=a[o+1],f=void 0,h=void 0,p=void 0,p=[l[0]-s[0],l[1]-s[1]],0!=(f=[c[0]-u[0],c[1]-u[1]],h=p,f[0]*h[1]-f[1]*h[0])&&De(s,l,u,c)&&De(u,c,s,l))return!0;var s,l,u,c,f,h,p;return!1}function Re(t,e){for(var r=0;r<t.length;++r)if(!Oe(t[r],e))return!1;for(var n=0;n<t.length-1;++n)if(ze(t[n],t[n+1],e))return!1;return!0}function Fe(t,e){for(var r=0;r<e.length;r++)if(Re(t,e[r]))return!0;return!1}function Be(t,e,r){for(var n=[],i=0;i<t.length;i++){for(var a=[],o=0;o<t[i].length;o++){var s=Ce(t[i][o],r);Ee(e,s),a.push(s)}n.push(a)}return n}function Ne(t,e,r){for(var n=[],i=0;i<t.length;i++){var a=Be(t[i],e,r);n.push(a)}return n}function je(t,e,r,n){if(t[0]<r[0]||t[0]>r[2]){var i=.5*n,a=t[0]-r[0]>i?-n:r[0]-t[0]>i?n:0;0===a&&(a=t[0]-r[2]>i?-n:r[2]-t[0]>i?n:0),t[0]+=a}Ee(e,t)}function Ue(t,e,r,n){for(var i=Math.pow(2,n.z)*Se,a=[n.x*Se,n.y*Se],o=[],s=0,l=t;s<l.length;s+=1)for(var u=0,c=l[s];u<c.length;u+=1){var f=c[u],h=[f.x+a[0],f.y+a[1]];je(h,e,r,i),o.push(h)}return o}function Ve(t,e,r,n){for(var i=Math.pow(2,n.z)*Se,a=[n.x*Se,n.y*Se],o=[],s=0,l=t;s<l.length;s+=1){for(var u=[],c=0,f=l[s];c<f.length;c+=1){var h=f[c],p=[h.x+a[0],h.y+a[1]];Ee(e,p),u.push(p)}o.push(u)}if(e[2]-e[0]<=i/2){(m=e)[0]=m[1]=1/0,m[2]=m[3]=-1/0;for(var d=0,v=o;d<v.length;d+=1)for(var g=0,y=v[d];g<y.length;g+=1)je(y[g],e,r,i)}var m;return o}var He=function(t,e){this.type=Gt,this.geojson=t,this.geometries=e};function qe(t){if(t instanceof Ae){if(\\\"get\\\"===t.name&&1===t.args.length)return!1;if(\\\"feature-state\\\"===t.name)return!1;if(\\\"has\\\"===t.name&&1===t.args.length)return!1;if(\\\"properties\\\"===t.name||\\\"geometry-type\\\"===t.name||\\\"id\\\"===t.name)return!1;if(/^filter-/.test(t.name))return!1}if(t instanceof He)return!1;var e=!0;return t.eachChild((function(t){e&&!qe(t)&&(e=!1)})),e}function Ge(t){if(t instanceof Ae&&\\\"feature-state\\\"===t.name)return!1;var e=!0;return t.eachChild((function(t){e&&!Ge(t)&&(e=!1)})),e}function Ze(t,e){if(t instanceof Ae&&e.indexOf(t.name)>=0)return!1;var r=!0;return t.eachChild((function(t){r&&!Ze(t,e)&&(r=!1)})),r}He.parse=function(t,e){if(2!==t.length)return e.error(\\\"'within' expression requires exactly one argument, but found \\\"+(t.length-1)+\\\" instead.\\\");if(he(t[1])){var r=t[1];if(\\\"FeatureCollection\\\"===r.type)for(var n=0;n<r.features.length;++n){var i=r.features[n].geometry.type;if(\\\"Polygon\\\"===i||\\\"MultiPolygon\\\"===i)return new He(r,r.features[n].geometry)}else if(\\\"Feature\\\"===r.type){var a=r.geometry.type;if(\\\"Polygon\\\"===a||\\\"MultiPolygon\\\"===a)return new He(r,r.geometry)}else if(\\\"Polygon\\\"===r.type||\\\"MultiPolygon\\\"===r.type)return new He(r,r)}return e.error(\\\"'within' expression requires valid geojson object that contains polygon geometry type.\\\")},He.prototype.evaluate=function(t){if(null!=t.geometry()&&null!=t.canonicalID()){if(\\\"Point\\\"===t.geometryType())return function(t,e){var r=[1/0,1/0,-1/0,-1/0],n=[1/0,1/0,-1/0,-1/0],i=t.canonicalID();if(\\\"Polygon\\\"===e.type){var a=Be(e.coordinates,n,i),o=Ue(t.geometry(),r,n,i);if(!Le(r,n))return!1;for(var s=0,l=o;s<l.length;s+=1)if(!Oe(l[s],a))return!1}if(\\\"MultiPolygon\\\"===e.type){var u=Ne(e.coordinates,n,i),c=Ue(t.geometry(),r,n,i);if(!Le(r,n))return!1;for(var f=0,h=c;f<h.length;f+=1)if(!Ie(h[f],u))return!1}return!0}(t,this.geometries);if(\\\"LineString\\\"===t.geometryType())return function(t,e){var r=[1/0,1/0,-1/0,-1/0],n=[1/0,1/0,-1/0,-1/0],i=t.canonicalID();if(\\\"Polygon\\\"===e.type){var a=Be(e.coordinates,n,i),o=Ve(t.geometry(),r,n,i);if(!Le(r,n))return!1;for(var s=0,l=o;s<l.length;s+=1)if(!Re(l[s],a))return!1}if(\\\"MultiPolygon\\\"===e.type){var u=Ne(e.coordinates,n,i),c=Ve(t.geometry(),r,n,i);if(!Le(r,n))return!1;for(var f=0,h=c;f<h.length;f+=1)if(!Fe(h[f],u))return!1}return!0}(t,this.geometries)}return!1},He.prototype.eachChild=function(){},He.prototype.outputDefined=function(){return!0},He.prototype.serialize=function(){return[\\\"within\\\",this.geojson]};var Ye=function(t,e){this.type=e.type,this.name=t,this.boundExpression=e};Ye.parse=function(t,e){if(2!==t.length||\\\"string\\\"!=typeof t[1])return e.error(\\\"'var' expression requires exactly one string literal argument.\\\");var r=t[1];return e.scope.has(r)?new Ye(r,e.scope.get(r)):e.error('Unknown variable \\\"'+r+'\\\". Make sure \\\"'+r+'\\\" has been bound in an enclosing \\\"let\\\" expression before using it.',1)},Ye.prototype.evaluate=function(t){return this.boundExpression.evaluate(t)},Ye.prototype.eachChild=function(){},Ye.prototype.outputDefined=function(){return!1},Ye.prototype.serialize=function(){return[\\\"var\\\",this.name]};var We=function(t,e,r,n,i){void 0===e&&(e=[]),void 0===n&&(n=new Ut),void 0===i&&(i=[]),this.registry=t,this.path=e,this.key=e.map((function(t){return\\\"[\\\"+t+\\\"]\\\"})).join(\\\"\\\"),this.scope=n,this.errors=i,this.expectedType=r};function Xe(t){if(t instanceof Ye)return Xe(t.boundExpression);if(t instanceof Ae&&\\\"error\\\"===t.name)return!1;if(t instanceof Me)return!1;if(t instanceof He)return!1;var e=t instanceof we||t instanceof me,r=!0;return t.eachChild((function(t){r=e?r&&Xe(t):r&&t instanceof ve})),!!r&&qe(t)&&Ze(t,[\\\"zoom\\\",\\\"heatmap-density\\\",\\\"line-progress\\\",\\\"accumulated\\\",\\\"is-supported-script\\\"])}function Je(t,e){for(var r,n,i=t.length-1,a=0,o=i,s=0;a<=o;)if(r=t[s=Math.floor((a+o)/2)],n=t[s+1],r<=e){if(s===i||e<n)return s;a=s+1}else{if(!(r>e))throw new ge(\\\"Input is not a number.\\\");o=s-1}return 0}We.prototype.parse=function(t,e,r,n,i){return void 0===i&&(i={}),e?this.concat(e,r,n)._parse(t,i):this._parse(t,i)},We.prototype._parse=function(t,e){function r(t,e,r){return\\\"assert\\\"===r?new me(e,[t]):\\\"coerce\\\"===r?new we(e,[t]):t}if(null!==t&&\\\"string\\\"!=typeof t&&\\\"boolean\\\"!=typeof t&&\\\"number\\\"!=typeof t||(t=[\\\"literal\\\",t]),Array.isArray(t)){if(0===t.length)return this.error('Expected an array with at least one element. If you wanted a literal array, use [\\\"literal\\\", []].');var n=t[0];if(\\\"string\\\"!=typeof n)return this.error(\\\"Expression name must be a string, but found \\\"+typeof n+' instead. If you wanted a literal array, use [\\\"literal\\\", [...]].',0),null;var i=this.registry[n];if(i){var a=i.parse(t,this);if(!a)return null;if(this.expectedType){var o=this.expectedType,s=a.type;if(\\\"string\\\"!==o.kind&&\\\"number\\\"!==o.kind&&\\\"boolean\\\"!==o.kind&&\\\"object\\\"!==o.kind&&\\\"array\\\"!==o.kind||\\\"value\\\"!==s.kind)if(\\\"color\\\"!==o.kind&&\\\"formatted\\\"!==o.kind&&\\\"resolvedImage\\\"!==o.kind||\\\"value\\\"!==s.kind&&\\\"string\\\"!==s.kind){if(this.checkSubtype(o,s))return null}else a=r(a,o,e.typeAnnotation||\\\"coerce\\\");else a=r(a,o,e.typeAnnotation||\\\"assert\\\")}if(!(a instanceof ve)&&\\\"resolvedImage\\\"!==a.type.kind&&Xe(a)){var l=new ke;try{a=new ve(a.type,a.evaluate(l))}catch(t){return this.error(t.message),null}}return a}return this.error('Unknown expression \\\"'+n+'\\\". If you wanted a literal array, use [\\\"literal\\\", [...]].',0)}return void 0===t?this.error(\\\"'undefined' value invalid. Use null instead.\\\"):\\\"object\\\"==typeof t?this.error('Bare objects invalid. Use [\\\"literal\\\", {...}] instead.'):this.error(\\\"Expected an array, but found \\\"+typeof t+\\\" instead.\\\")},We.prototype.concat=function(t,e,r){var n=\\\"number\\\"==typeof t?this.path.concat(t):this.path,i=r?this.scope.concat(r):this.scope;return new We(this.registry,n,e||null,i,this.errors)},We.prototype.error=function(t){for(var e=[],r=arguments.length-1;r-- >0;)e[r]=arguments[r+1];var n=\\\"\\\"+this.key+e.map((function(t){return\\\"[\\\"+t+\\\"]\\\"})).join(\\\"\\\");this.errors.push(new jt(n,t))},We.prototype.checkSubtype=function(t,e){var r=ee(t,e);return r&&this.error(r),r};var Ke=function(t,e,r){this.type=t,this.input=e,this.labels=[],this.outputs=[];for(var n=0,i=r;n<i.length;n+=1){var a=i[n],o=a[0],s=a[1];this.labels.push(o),this.outputs.push(s)}};function $e(t,e,r){return t*(1-r)+e*r}Ke.parse=function(t,e){if(t.length-1<4)return e.error(\\\"Expected at least 4 arguments, but found only \\\"+(t.length-1)+\\\".\\\");if((t.length-1)%2!=0)return e.error(\\\"Expected an even number of arguments.\\\");var r=e.parse(t[1],1,Ht);if(!r)return null;var n=[],i=null;e.expectedType&&\\\"value\\\"!==e.expectedType.kind&&(i=e.expectedType);for(var a=1;a<t.length;a+=2){var o=1===a?-1/0:t[a],s=t[a+1],l=a,u=a+1;if(\\\"number\\\"!=typeof o)return e.error('Input/output pairs for \\\"step\\\" expressions must be defined using literal numeric values (not computed expressions) for the input values.',l);if(n.length&&n[n.length-1][0]>=o)return e.error('Input/output pairs for \\\"step\\\" expressions must be arranged with input values in strictly ascending order.',l);var c=e.parse(s,u,i);if(!c)return null;i=i||c.type,n.push([o,c])}return new Ke(i,r,n)},Ke.prototype.evaluate=function(t){var e=this.labels,r=this.outputs;if(1===e.length)return r[0].evaluate(t);var n=this.input.evaluate(t);if(n<=e[0])return r[0].evaluate(t);var i=e.length;return n>=e[i-1]?r[i-1].evaluate(t):r[Je(e,n)].evaluate(t)},Ke.prototype.eachChild=function(t){t(this.input);for(var e=0,r=this.outputs;e<r.length;e+=1)t(r[e])},Ke.prototype.outputDefined=function(){return this.outputs.every((function(t){return t.outputDefined()}))},Ke.prototype.serialize=function(){for(var t=[\\\"step\\\",this.input.serialize()],e=0;e<this.labels.length;e++)e>0&&t.push(this.labels[e]),t.push(this.outputs[e].serialize());return t};var Qe=Object.freeze({__proto__:null,number:$e,color:function(t,e,r){return new oe($e(t.r,e.r,r),$e(t.g,e.g,r),$e(t.b,e.b,r),$e(t.a,e.a,r))},array:function(t,e,r){return t.map((function(t,n){return $e(t,e[n],r)}))}}),tr=.95047,er=1,rr=1.08883,nr=4/29,ir=6/29,ar=3*ir*ir,or=ir*ir*ir,sr=Math.PI/180,lr=180/Math.PI;function ur(t){return t>or?Math.pow(t,1/3):t/ar+nr}function cr(t){return t>ir?t*t*t:ar*(t-nr)}function fr(t){return 255*(t<=.0031308?12.92*t:1.055*Math.pow(t,1/2.4)-.055)}function hr(t){return(t/=255)<=.04045?t/12.92:Math.pow((t+.055)/1.055,2.4)}function pr(t){var e=hr(t.r),r=hr(t.g),n=hr(t.b),i=ur((.4124564*e+.3575761*r+.1804375*n)/tr),a=ur((.2126729*e+.7151522*r+.072175*n)/er);return{l:116*a-16,a:500*(i-a),b:200*(a-ur((.0193339*e+.119192*r+.9503041*n)/rr)),alpha:t.a}}function dr(t){var e=(t.l+16)/116,r=isNaN(t.a)?e:e+t.a/500,n=isNaN(t.b)?e:e-t.b/200;return e=er*cr(e),r=tr*cr(r),n=rr*cr(n),new oe(fr(3.2404542*r-1.5371385*e-.4985314*n),fr(-.969266*r+1.8760108*e+.041556*n),fr(.0556434*r-.2040259*e+1.0572252*n),t.alpha)}function vr(t,e,r){var n=e-t;return t+r*(n>180||n<-180?n-360*Math.round(n/360):n)}var gr={forward:pr,reverse:dr,interpolate:function(t,e,r){return{l:$e(t.l,e.l,r),a:$e(t.a,e.a,r),b:$e(t.b,e.b,r),alpha:$e(t.alpha,e.alpha,r)}}},yr={forward:function(t){var e=pr(t),r=e.l,n=e.a,i=e.b,a=Math.atan2(i,n)*lr;return{h:a<0?a+360:a,c:Math.sqrt(n*n+i*i),l:r,alpha:t.a}},reverse:function(t){var e=t.h*sr,r=t.c;return dr({l:t.l,a:Math.cos(e)*r,b:Math.sin(e)*r,alpha:t.alpha})},interpolate:function(t,e,r){return{h:vr(t.h,e.h,r),c:$e(t.c,e.c,r),l:$e(t.l,e.l,r),alpha:$e(t.alpha,e.alpha,r)}}},mr=Object.freeze({__proto__:null,lab:gr,hcl:yr}),xr=function(t,e,r,n,i){this.type=t,this.operator=e,this.interpolation=r,this.input=n,this.labels=[],this.outputs=[];for(var a=0,o=i;a<o.length;a+=1){var s=o[a],l=s[0],u=s[1];this.labels.push(l),this.outputs.push(u)}};function br(t,e,r,n){var i=n-r,a=t-r;return 0===i?0:1===e?a/i:(Math.pow(e,a)-1)/(Math.pow(e,i)-1)}xr.interpolationFactor=function(t,e,r,i){var a=0;if(\\\"exponential\\\"===t.name)a=br(e,t.base,r,i);else if(\\\"linear\\\"===t.name)a=br(e,1,r,i);else if(\\\"cubic-bezier\\\"===t.name){var o=t.controlPoints;a=new n(o[0],o[1],o[2],o[3]).solve(br(e,1,r,i))}return a},xr.parse=function(t,e){var r=t[0],n=t[1],i=t[2],a=t.slice(3);if(!Array.isArray(n)||0===n.length)return e.error(\\\"Expected an interpolation type expression.\\\",1);if(\\\"linear\\\"===n[0])n={name:\\\"linear\\\"};else if(\\\"exponential\\\"===n[0]){var o=n[1];if(\\\"number\\\"!=typeof o)return e.error(\\\"Exponential interpolation requires a numeric base.\\\",1,1);n={name:\\\"exponential\\\",base:o}}else{if(\\\"cubic-bezier\\\"!==n[0])return e.error(\\\"Unknown interpolation type \\\"+String(n[0]),1,0);var s=n.slice(1);if(4!==s.length||s.some((function(t){return\\\"number\\\"!=typeof t||t<0||t>1})))return e.error(\\\"Cubic bezier interpolation requires four numeric arguments with values between 0 and 1.\\\",1);n={name:\\\"cubic-bezier\\\",controlPoints:s}}if(t.length-1<4)return e.error(\\\"Expected at least 4 arguments, but found only \\\"+(t.length-1)+\\\".\\\");if((t.length-1)%2!=0)return e.error(\\\"Expected an even number of arguments.\\\");if(!(i=e.parse(i,2,Ht)))return null;var l=[],u=null;\\\"interpolate-hcl\\\"===r||\\\"interpolate-lab\\\"===r?u=Zt:e.expectedType&&\\\"value\\\"!==e.expectedType.kind&&(u=e.expectedType);for(var c=0;c<a.length;c+=2){var f=a[c],h=a[c+1],p=c+3,d=c+4;if(\\\"number\\\"!=typeof f)return e.error('Input/output pairs for \\\"interpolate\\\" expressions must be defined using literal numeric values (not computed expressions) for the input values.',p);if(l.length&&l[l.length-1][0]>=f)return e.error('Input/output pairs for \\\"interpolate\\\" expressions must be arranged with input values in strictly ascending order.',p);var v=e.parse(h,d,u);if(!v)return null;u=u||v.type,l.push([f,v])}return\\\"number\\\"===u.kind||\\\"color\\\"===u.kind||\\\"array\\\"===u.kind&&\\\"number\\\"===u.itemType.kind&&\\\"number\\\"==typeof u.N?new xr(u,r,n,i,l):e.error(\\\"Type \\\"+Qt(u)+\\\" is not interpolatable.\\\")},xr.prototype.evaluate=function(t){var e=this.labels,r=this.outputs;if(1===e.length)return r[0].evaluate(t);var n=this.input.evaluate(t);if(n<=e[0])return r[0].evaluate(t);var i=e.length;if(n>=e[i-1])return r[i-1].evaluate(t);var a=Je(e,n),o=e[a],s=e[a+1],l=xr.interpolationFactor(this.interpolation,n,o,s),u=r[a].evaluate(t),c=r[a+1].evaluate(t);return\\\"interpolate\\\"===this.operator?Qe[this.type.kind.toLowerCase()](u,c,l):\\\"interpolate-hcl\\\"===this.operator?yr.reverse(yr.interpolate(yr.forward(u),yr.forward(c),l)):gr.reverse(gr.interpolate(gr.forward(u),gr.forward(c),l))},xr.prototype.eachChild=function(t){t(this.input);for(var e=0,r=this.outputs;e<r.length;e+=1)t(r[e])},xr.prototype.outputDefined=function(){return this.outputs.every((function(t){return t.outputDefined()}))},xr.prototype.serialize=function(){var t;t=\\\"linear\\\"===this.interpolation.name?[\\\"linear\\\"]:\\\"exponential\\\"===this.interpolation.name?1===this.interpolation.base?[\\\"linear\\\"]:[\\\"exponential\\\",this.interpolation.base]:[\\\"cubic-bezier\\\"].concat(this.interpolation.controlPoints);for(var e=[this.operator,t,this.input.serialize()],r=0;r<this.labels.length;r++)e.push(this.labels[r],this.outputs[r].serialize());return e};var _r=function(t,e){this.type=t,this.args=e};_r.parse=function(t,e){if(t.length<2)return e.error(\\\"Expectected at least one argument.\\\");var r=null,n=e.expectedType;n&&\\\"value\\\"!==n.kind&&(r=n);for(var i=[],a=0,o=t.slice(1);a<o.length;a+=1){var s=o[a],l=e.parse(s,1+i.length,r,void 0,{typeAnnotation:\\\"omit\\\"});if(!l)return null;r=r||l.type,i.push(l)}var u=n&&i.some((function(t){return ee(n,t.type)}));return new _r(u?Wt:r,i)},_r.prototype.evaluate=function(t){for(var e,r=null,n=0,i=0,a=this.args;i<a.length&&(n++,(r=a[i].evaluate(t))&&r instanceof ce&&!r.available&&(e||(e=r.name),r=null,n===this.args.length&&(r=e)),null===r);i+=1);return r},_r.prototype.eachChild=function(t){this.args.forEach(t)},_r.prototype.outputDefined=function(){return this.args.every((function(t){return t.outputDefined()}))},_r.prototype.serialize=function(){var t=[\\\"coalesce\\\"];return this.eachChild((function(e){t.push(e.serialize())})),t};var wr=function(t,e){this.type=e.type,this.bindings=[].concat(t),this.result=e};wr.prototype.evaluate=function(t){return this.result.evaluate(t)},wr.prototype.eachChild=function(t){for(var e=0,r=this.bindings;e<r.length;e+=1)t(r[e][1]);t(this.result)},wr.parse=function(t,e){if(t.length<4)return e.error(\\\"Expected at least 3 arguments, but found \\\"+(t.length-1)+\\\" instead.\\\");for(var r=[],n=1;n<t.length-1;n+=2){var i=t[n];if(\\\"string\\\"!=typeof i)return e.error(\\\"Expected string, but found \\\"+typeof i+\\\" instead.\\\",n);if(/[^a-zA-Z0-9_]/.test(i))return e.error(\\\"Variable names must contain only alphanumeric characters or '_'.\\\",n);var a=e.parse(t[n+1],n+1);if(!a)return null;r.push([i,a])}var o=e.parse(t[t.length-1],t.length-1,e.expectedType,r);return o?new wr(r,o):null},wr.prototype.outputDefined=function(){return this.result.outputDefined()},wr.prototype.serialize=function(){for(var t=[\\\"let\\\"],e=0,r=this.bindings;e<r.length;e+=1){var n=r[e],i=n[0],a=n[1];t.push(i,a.serialize())}return t.push(this.result.serialize()),t};var Tr=function(t,e,r){this.type=t,this.index=e,this.input=r};Tr.parse=function(t,e){if(3!==t.length)return e.error(\\\"Expected 2 arguments, but found \\\"+(t.length-1)+\\\" instead.\\\");var r=e.parse(t[1],1,Ht),n=e.parse(t[2],2,$t(e.expectedType||Wt));if(!r||!n)return null;var i=n.type;return new Tr(i.itemType,r,n)},Tr.prototype.evaluate=function(t){var e=this.index.evaluate(t),r=this.input.evaluate(t);if(e<0)throw new ge(\\\"Array index out of bounds: \\\"+e+\\\" < 0.\\\");if(e>=r.length)throw new ge(\\\"Array index out of bounds: \\\"+e+\\\" > \\\"+(r.length-1)+\\\".\\\");if(e!==Math.floor(e))throw new ge(\\\"Array index must be an integer, but found \\\"+e+\\\" instead.\\\");return r[e]},Tr.prototype.eachChild=function(t){t(this.index),t(this.input)},Tr.prototype.outputDefined=function(){return!1},Tr.prototype.serialize=function(){return[\\\"at\\\",this.index.serialize(),this.input.serialize()]};var kr=function(t,e){this.type=Gt,this.needle=t,this.haystack=e};kr.parse=function(t,e){if(3!==t.length)return e.error(\\\"Expected 2 arguments, but found \\\"+(t.length-1)+\\\" instead.\\\");var r=e.parse(t[1],1,Wt),n=e.parse(t[2],2,Wt);return r&&n?re(r.type,[Gt,qt,Ht,Vt,Wt])?new kr(r,n):e.error(\\\"Expected first argument to be of type boolean, string, number or null, but found \\\"+Qt(r.type)+\\\" instead\\\"):null},kr.prototype.evaluate=function(t){var e=this.needle.evaluate(t),r=this.haystack.evaluate(t);if(!r)return!1;if(!ne(e,[\\\"boolean\\\",\\\"string\\\",\\\"number\\\",\\\"null\\\"]))throw new ge(\\\"Expected first argument to be of type boolean, string, number or null, but found \\\"+Qt(pe(e))+\\\" instead.\\\");if(!ne(r,[\\\"string\\\",\\\"array\\\"]))throw new ge(\\\"Expected second argument to be of type array or string, but found \\\"+Qt(pe(r))+\\\" instead.\\\");return r.indexOf(e)>=0},kr.prototype.eachChild=function(t){t(this.needle),t(this.haystack)},kr.prototype.outputDefined=function(){return!0},kr.prototype.serialize=function(){return[\\\"in\\\",this.needle.serialize(),this.haystack.serialize()]};var Ar=function(t,e,r){this.type=Ht,this.needle=t,this.haystack=e,this.fromIndex=r};Ar.parse=function(t,e){if(t.length<=2||t.length>=5)return e.error(\\\"Expected 3 or 4 arguments, but found \\\"+(t.length-1)+\\\" instead.\\\");var r=e.parse(t[1],1,Wt),n=e.parse(t[2],2,Wt);if(!r||!n)return null;if(!re(r.type,[Gt,qt,Ht,Vt,Wt]))return e.error(\\\"Expected first argument to be of type boolean, string, number or null, but found \\\"+Qt(r.type)+\\\" instead\\\");if(4===t.length){var i=e.parse(t[3],3,Ht);return i?new Ar(r,n,i):null}return new Ar(r,n)},Ar.prototype.evaluate=function(t){var e=this.needle.evaluate(t),r=this.haystack.evaluate(t);if(!ne(e,[\\\"boolean\\\",\\\"string\\\",\\\"number\\\",\\\"null\\\"]))throw new ge(\\\"Expected first argument to be of type boolean, string, number or null, but found \\\"+Qt(pe(e))+\\\" instead.\\\");if(!ne(r,[\\\"string\\\",\\\"array\\\"]))throw new ge(\\\"Expected second argument to be of type array or string, but found \\\"+Qt(pe(r))+\\\" instead.\\\");if(this.fromIndex){var n=this.fromIndex.evaluate(t);return r.indexOf(e,n)}return r.indexOf(e)},Ar.prototype.eachChild=function(t){t(this.needle),t(this.haystack),this.fromIndex&&t(this.fromIndex)},Ar.prototype.outputDefined=function(){return!1},Ar.prototype.serialize=function(){if(null!=this.fromIndex&&void 0!==this.fromIndex){var t=this.fromIndex.serialize();return[\\\"index-of\\\",this.needle.serialize(),this.haystack.serialize(),t]}return[\\\"index-of\\\",this.needle.serialize(),this.haystack.serialize()]};var Mr=function(t,e,r,n,i,a){this.inputType=t,this.type=e,this.input=r,this.cases=n,this.outputs=i,this.otherwise=a};Mr.parse=function(t,e){if(t.length<5)return e.error(\\\"Expected at least 4 arguments, but found only \\\"+(t.length-1)+\\\".\\\");if(t.length%2!=1)return e.error(\\\"Expected an even number of arguments.\\\");var r,n;e.expectedType&&\\\"value\\\"!==e.expectedType.kind&&(n=e.expectedType);for(var i={},a=[],o=2;o<t.length-1;o+=2){var s=t[o],l=t[o+1];Array.isArray(s)||(s=[s]);var u=e.concat(o);if(0===s.length)return u.error(\\\"Expected at least one branch label.\\\");for(var c=0,f=s;c<f.length;c+=1){var h=f[c];if(\\\"number\\\"!=typeof h&&\\\"string\\\"!=typeof h)return u.error(\\\"Branch labels must be numbers or strings.\\\");if(\\\"number\\\"==typeof h&&Math.abs(h)>Number.MAX_SAFE_INTEGER)return u.error(\\\"Branch labels must be integers no larger than \\\"+Number.MAX_SAFE_INTEGER+\\\".\\\");if(\\\"number\\\"==typeof h&&Math.floor(h)!==h)return u.error(\\\"Numeric branch labels must be integer values.\\\");if(r){if(u.checkSubtype(r,pe(h)))return null}else r=pe(h);if(void 0!==i[String(h)])return u.error(\\\"Branch labels must be unique.\\\");i[String(h)]=a.length}var p=e.parse(l,o,n);if(!p)return null;n=n||p.type,a.push(p)}var d=e.parse(t[1],1,Wt);if(!d)return null;var v=e.parse(t[t.length-1],t.length-1,n);return v?\\\"value\\\"!==d.type.kind&&e.concat(1).checkSubtype(r,d.type)?null:new Mr(r,n,d,i,a,v):null},Mr.prototype.evaluate=function(t){var e=this.input.evaluate(t);return(pe(e)===this.inputType&&this.outputs[this.cases[e]]||this.otherwise).evaluate(t)},Mr.prototype.eachChild=function(t){t(this.input),this.outputs.forEach(t),t(this.otherwise)},Mr.prototype.outputDefined=function(){return this.outputs.every((function(t){return t.outputDefined()}))&&this.otherwise.outputDefined()},Mr.prototype.serialize=function(){for(var t=this,e=[\\\"match\\\",this.input.serialize()],r=[],n={},i=0,a=Object.keys(this.cases).sort();i<a.length;i+=1){var o=a[i];void 0===(f=n[this.cases[o]])?(n[this.cases[o]]=r.length,r.push([this.cases[o],[o]])):r[f][1].push(o)}for(var s=function(e){return\\\"number\\\"===t.inputType.kind?Number(e):e},l=0,u=r;l<u.length;l+=1){var c=u[l],f=c[0],h=c[1];1===h.length?e.push(s(h[0])):e.push(h.map(s)),e.push(this.outputs[outputIndex$1].serialize())}return e.push(this.otherwise.serialize()),e};var Sr=function(t,e,r){this.type=t,this.branches=e,this.otherwise=r};Sr.parse=function(t,e){if(t.length<4)return e.error(\\\"Expected at least 3 arguments, but found only \\\"+(t.length-1)+\\\".\\\");if(t.length%2!=0)return e.error(\\\"Expected an odd number of arguments.\\\");var r;e.expectedType&&\\\"value\\\"!==e.expectedType.kind&&(r=e.expectedType);for(var n=[],i=1;i<t.length-1;i+=2){var a=e.parse(t[i],i,Gt);if(!a)return null;var o=e.parse(t[i+1],i+1,r);if(!o)return null;n.push([a,o]),r=r||o.type}var s=e.parse(t[t.length-1],t.length-1,r);return s?new Sr(r,n,s):null},Sr.prototype.evaluate=function(t){for(var e=0,r=this.branches;e<r.length;e+=1){var n=r[e],i=n[0],a=n[1];if(i.evaluate(t))return a.evaluate(t)}return this.otherwise.evaluate(t)},Sr.prototype.eachChild=function(t){for(var e=0,r=this.branches;e<r.length;e+=1){var n=r[e],i=n[0],a=n[1];t(i),t(a)}t(this.otherwise)},Sr.prototype.outputDefined=function(){return this.branches.every((function(t){return t[0],t[1].outputDefined()}))&&this.otherwise.outputDefined()},Sr.prototype.serialize=function(){var t=[\\\"case\\\"];return this.eachChild((function(e){t.push(e.serialize())})),t};var Er=function(t,e,r,n){this.type=t,this.input=e,this.beginIndex=r,this.endIndex=n};function Lr(t,e){return\\\"==\\\"===t||\\\"!=\\\"===t?\\\"boolean\\\"===e.kind||\\\"string\\\"===e.kind||\\\"number\\\"===e.kind||\\\"null\\\"===e.kind||\\\"value\\\"===e.kind:\\\"string\\\"===e.kind||\\\"number\\\"===e.kind||\\\"value\\\"===e.kind}function Cr(t,e,r,n){return 0===n.compare(e,r)}function Pr(t,e,r){var n=\\\"==\\\"!==t&&\\\"!=\\\"!==t;return function(){function i(t,e,r){this.type=Gt,this.lhs=t,this.rhs=e,this.collator=r,this.hasUntypedArgument=\\\"value\\\"===t.type.kind||\\\"value\\\"===e.type.kind}return i.parse=function(t,e){if(3!==t.length&&4!==t.length)return e.error(\\\"Expected two or three arguments.\\\");var r=t[0],a=e.parse(t[1],1,Wt);if(!a)return null;if(!Lr(r,a.type))return e.concat(1).error('\\\"'+r+\\\"\\\\\\\" comparisons are not supported for type '\\\"+Qt(a.type)+\\\"'.\\\");var o=e.parse(t[2],2,Wt);if(!o)return null;if(!Lr(r,o.type))return e.concat(2).error('\\\"'+r+\\\"\\\\\\\" comparisons are not supported for type '\\\"+Qt(o.type)+\\\"'.\\\");if(a.type.kind!==o.type.kind&&\\\"value\\\"!==a.type.kind&&\\\"value\\\"!==o.type.kind)return e.error(\\\"Cannot compare types '\\\"+Qt(a.type)+\\\"' and '\\\"+Qt(o.type)+\\\"'.\\\");n&&(\\\"value\\\"===a.type.kind&&\\\"value\\\"!==o.type.kind?a=new me(o.type,[a]):\\\"value\\\"!==a.type.kind&&\\\"value\\\"===o.type.kind&&(o=new me(a.type,[o])));var s=null;if(4===t.length){if(\\\"string\\\"!==a.type.kind&&\\\"string\\\"!==o.type.kind&&\\\"value\\\"!==a.type.kind&&\\\"value\\\"!==o.type.kind)return e.error(\\\"Cannot use collator to compare non-string types.\\\");if(!(s=e.parse(t[3],3,Xt)))return null}return new i(a,o,s)},i.prototype.evaluate=function(i){var a=this.lhs.evaluate(i),o=this.rhs.evaluate(i);if(n&&this.hasUntypedArgument){var s=pe(a),l=pe(o);if(s.kind!==l.kind||\\\"string\\\"!==s.kind&&\\\"number\\\"!==s.kind)throw new ge('Expected arguments for \\\"'+t+'\\\" to be (string, string) or (number, number), but found ('+s.kind+\\\", \\\"+l.kind+\\\") instead.\\\")}if(this.collator&&!n&&this.hasUntypedArgument){var u=pe(a),c=pe(o);if(\\\"string\\\"!==u.kind||\\\"string\\\"!==c.kind)return e(i,a,o)}return this.collator?r(i,a,o,this.collator.evaluate(i)):e(i,a,o)},i.prototype.eachChild=function(t){t(this.lhs),t(this.rhs),this.collator&&t(this.collator)},i.prototype.outputDefined=function(){return!0},i.prototype.serialize=function(){var e=[t];return this.eachChild((function(t){e.push(t.serialize())})),e},i}()}Er.parse=function(t,e){if(t.length<=2||t.length>=5)return e.error(\\\"Expected 3 or 4 arguments, but found \\\"+(t.length-1)+\\\" instead.\\\");var r=e.parse(t[1],1,Wt),n=e.parse(t[2],2,Ht);if(!r||!n)return null;if(!re(r.type,[$t(Wt),qt,Wt]))return e.error(\\\"Expected first argument to be of type array or string, but found \\\"+Qt(r.type)+\\\" instead\\\");if(4===t.length){var i=e.parse(t[3],3,Ht);return i?new Er(r.type,r,n,i):null}return new Er(r.type,r,n)},Er.prototype.evaluate=function(t){var e=this.input.evaluate(t),r=this.beginIndex.evaluate(t);if(!ne(e,[\\\"string\\\",\\\"array\\\"]))throw new ge(\\\"Expected first argument to be of type array or string, but found \\\"+Qt(pe(e))+\\\" instead.\\\");if(this.endIndex){var n=this.endIndex.evaluate(t);return e.slice(r,n)}return e.slice(r)},Er.prototype.eachChild=function(t){t(this.input),t(this.beginIndex),this.endIndex&&t(this.endIndex)},Er.prototype.outputDefined=function(){return!1},Er.prototype.serialize=function(){if(null!=this.endIndex&&void 0!==this.endIndex){var t=this.endIndex.serialize();return[\\\"slice\\\",this.input.serialize(),this.beginIndex.serialize(),t]}return[\\\"slice\\\",this.input.serialize(),this.beginIndex.serialize()]};var Or=Pr(\\\"==\\\",(function(t,e,r){return e===r}),Cr),Ir=Pr(\\\"!=\\\",(function(t,e,r){return e!==r}),(function(t,e,r,n){return!Cr(0,e,r,n)})),Dr=Pr(\\\"<\\\",(function(t,e,r){return e<r}),(function(t,e,r,n){return n.compare(e,r)<0})),zr=Pr(\\\">\\\",(function(t,e,r){return e>r}),(function(t,e,r,n){return n.compare(e,r)>0})),Rr=Pr(\\\"<=\\\",(function(t,e,r){return e<=r}),(function(t,e,r,n){return n.compare(e,r)<=0})),Fr=Pr(\\\">=\\\",(function(t,e,r){return e>=r}),(function(t,e,r,n){return n.compare(e,r)>=0})),Br=function(t,e,r,n,i){this.type=qt,this.number=t,this.locale=e,this.currency=r,this.minFractionDigits=n,this.maxFractionDigits=i};Br.parse=function(t,e){if(3!==t.length)return e.error(\\\"Expected two arguments.\\\");var r=e.parse(t[1],1,Ht);if(!r)return null;var n=t[2];if(\\\"object\\\"!=typeof n||Array.isArray(n))return e.error(\\\"NumberFormat options argument must be an object.\\\");var i=null;if(n.locale&&!(i=e.parse(n.locale,1,qt)))return null;var a=null;if(n.currency&&!(a=e.parse(n.currency,1,qt)))return null;var o=null;if(n[\\\"min-fraction-digits\\\"]&&!(o=e.parse(n[\\\"min-fraction-digits\\\"],1,Ht)))return null;var s=null;return n[\\\"max-fraction-digits\\\"]&&!(s=e.parse(n[\\\"max-fraction-digits\\\"],1,Ht))?null:new Br(r,i,a,o,s)},Br.prototype.evaluate=function(t){return new Intl.NumberFormat(this.locale?this.locale.evaluate(t):[],{style:this.currency?\\\"currency\\\":\\\"decimal\\\",currency:this.currency?this.currency.evaluate(t):void 0,minimumFractionDigits:this.minFractionDigits?this.minFractionDigits.evaluate(t):void 0,maximumFractionDigits:this.maxFractionDigits?this.maxFractionDigits.evaluate(t):void 0}).format(this.number.evaluate(t))},Br.prototype.eachChild=function(t){t(this.number),this.locale&&t(this.locale),this.currency&&t(this.currency),this.minFractionDigits&&t(this.minFractionDigits),this.maxFractionDigits&&t(this.maxFractionDigits)},Br.prototype.outputDefined=function(){return!1},Br.prototype.serialize=function(){var t={};return this.locale&&(t.locale=this.locale.serialize()),this.currency&&(t.currency=this.currency.serialize()),this.minFractionDigits&&(t[\\\"min-fraction-digits\\\"]=this.minFractionDigits.serialize()),this.maxFractionDigits&&(t[\\\"max-fraction-digits\\\"]=this.maxFractionDigits.serialize()),[\\\"number-format\\\",this.number.serialize(),t]};var Nr=function(t){this.type=Ht,this.input=t};Nr.parse=function(t,e){if(2!==t.length)return e.error(\\\"Expected 1 argument, but found \\\"+(t.length-1)+\\\" instead.\\\");var r=e.parse(t[1],1);return r?\\\"array\\\"!==r.type.kind&&\\\"string\\\"!==r.type.kind&&\\\"value\\\"!==r.type.kind?e.error(\\\"Expected argument of type string or array, but found \\\"+Qt(r.type)+\\\" instead.\\\"):new Nr(r):null},Nr.prototype.evaluate=function(t){var e=this.input.evaluate(t);if(\\\"string\\\"==typeof e)return e.length;if(Array.isArray(e))return e.length;throw new ge(\\\"Expected value to be of type string or array, but found \\\"+Qt(pe(e))+\\\" instead.\\\")},Nr.prototype.eachChild=function(t){t(this.input)},Nr.prototype.outputDefined=function(){return!1},Nr.prototype.serialize=function(){var t=[\\\"length\\\"];return this.eachChild((function(e){t.push(e.serialize())})),t};var jr={\\\"==\\\":Or,\\\"!=\\\":Ir,\\\">\\\":zr,\\\"<\\\":Dr,\\\">=\\\":Fr,\\\"<=\\\":Rr,array:me,at:Tr,boolean:me,case:Sr,coalesce:_r,collator:Me,format:xe,image:be,in:kr,\\\"index-of\\\":Ar,interpolate:xr,\\\"interpolate-hcl\\\":xr,\\\"interpolate-lab\\\":xr,length:Nr,let:wr,literal:ve,match:Mr,number:me,\\\"number-format\\\":Br,object:me,slice:Er,step:Ke,string:me,\\\"to-boolean\\\":we,\\\"to-color\\\":we,\\\"to-number\\\":we,\\\"to-string\\\":we,var:Ye,within:He};function Ur(t,e){var r=e[0],n=e[1],i=e[2],a=e[3];r=r.evaluate(t),n=n.evaluate(t),i=i.evaluate(t);var o=a?a.evaluate(t):1,s=fe(r,n,i,o);if(s)throw new ge(s);return new oe(r/255*o,n/255*o,i/255*o,o)}function Vr(t,e){return t in e}function Hr(t,e){var r=e[t];return void 0===r?null:r}function qr(t){return{type:t}}function Gr(t){return{result:\\\"success\\\",value:t}}function Zr(t){return{result:\\\"error\\\",value:t}}function Yr(t){return\\\"data-driven\\\"===t[\\\"property-type\\\"]||\\\"cross-faded-data-driven\\\"===t[\\\"property-type\\\"]}function Wr(t){return!!t.expression&&t.expression.parameters.indexOf(\\\"zoom\\\")>-1}function Xr(t){return!!t.expression&&t.expression.interpolated}function Jr(t){return t instanceof Number?\\\"number\\\":t instanceof String?\\\"string\\\":t instanceof Boolean?\\\"boolean\\\":Array.isArray(t)?\\\"array\\\":null===t?\\\"null\\\":typeof t}function Kr(t){return\\\"object\\\"==typeof t&&null!==t&&!Array.isArray(t)}function $r(t){return t}function Qr(t,e){var r,n,i,a=\\\"color\\\"===e.type,o=t.stops&&\\\"object\\\"==typeof t.stops[0][0],s=o||void 0!==t.property,l=o||!s,u=t.type||(Xr(e)?\\\"exponential\\\":\\\"interval\\\");if(a&&((t=Ft({},t)).stops&&(t.stops=t.stops.map((function(t){return[t[0],oe.parse(t[1])]}))),t.default?t.default=oe.parse(t.default):t.default=oe.parse(e.default)),t.colorSpace&&\\\"rgb\\\"!==t.colorSpace&&!mr[t.colorSpace])throw new Error(\\\"Unknown color space: \\\"+t.colorSpace);if(\\\"exponential\\\"===u)r=nn;else if(\\\"interval\\\"===u)r=rn;else if(\\\"categorical\\\"===u){r=en,n=Object.create(null);for(var c=0,f=t.stops;c<f.length;c+=1){var h=f[c];n[h[0]]=h[1]}i=typeof t.stops[0][0]}else{if(\\\"identity\\\"!==u)throw new Error('Unknown function type \\\"'+u+'\\\"');r=an}if(o){for(var p={},d=[],v=0;v<t.stops.length;v++){var g=t.stops[v],y=g[0].zoom;void 0===p[y]&&(p[y]={zoom:y,type:t.type,property:t.property,default:t.default,stops:[]},d.push(y)),p[y].stops.push([g[0].value,g[1]])}for(var m=[],x=0,b=d;x<b.length;x+=1){var _=b[x];m.push([p[_].zoom,Qr(p[_],e)])}var w={name:\\\"linear\\\"};return{kind:\\\"composite\\\",interpolationType:w,interpolationFactor:xr.interpolationFactor.bind(void 0,w),zoomStops:m.map((function(t){return t[0]})),evaluate:function(r,n){var i=r.zoom;return nn({stops:m,base:t.base},e,i).evaluate(i,n)}}}if(l){var T=\\\"exponential\\\"===u?{name:\\\"exponential\\\",base:void 0!==t.base?t.base:1}:null;return{kind:\\\"camera\\\",interpolationType:T,interpolationFactor:xr.interpolationFactor.bind(void 0,T),zoomStops:t.stops.map((function(t){return t[0]})),evaluate:function(a){var o=a.zoom;return r(t,e,o,n,i)}}}return{kind:\\\"source\\\",evaluate:function(a,o){var s=o&&o.properties?o.properties[t.property]:void 0;return void 0===s?tn(t.default,e.default):r(t,e,s,n,i)}}}function tn(t,e,r){return void 0!==t?t:void 0!==e?e:void 0!==r?r:void 0}function en(t,e,r,n,i){return tn(typeof r===i?n[r]:void 0,t.default,e.default)}function rn(t,e,r){if(\\\"number\\\"!==Jr(r))return tn(t.default,e.default);var n=t.stops.length;if(1===n)return t.stops[0][1];if(r<=t.stops[0][0])return t.stops[0][1];if(r>=t.stops[n-1][0])return t.stops[n-1][1];var i=Je(t.stops.map((function(t){return t[0]})),r);return t.stops[i][1]}function nn(t,e,r){var n=void 0!==t.base?t.base:1;if(\\\"number\\\"!==Jr(r))return tn(t.default,e.default);var i=t.stops.length;if(1===i)return t.stops[0][1];if(r<=t.stops[0][0])return t.stops[0][1];if(r>=t.stops[i-1][0])return t.stops[i-1][1];var a=Je(t.stops.map((function(t){return t[0]})),r),o=function(t,e,r,n){var i=n-r,a=t-r;return 0===i?0:1===e?a/i:(Math.pow(e,a)-1)/(Math.pow(e,i)-1)}(r,n,t.stops[a][0],t.stops[a+1][0]),s=t.stops[a][1],l=t.stops[a+1][1],u=Qe[e.type]||$r;if(t.colorSpace&&\\\"rgb\\\"!==t.colorSpace){var c=mr[t.colorSpace];u=function(t,e){return c.reverse(c.interpolate(c.forward(t),c.forward(e),o))}}return\\\"function\\\"==typeof s.evaluate?{evaluate:function(){for(var t=[],e=arguments.length;e--;)t[e]=arguments[e];var r=s.evaluate.apply(void 0,t),n=l.evaluate.apply(void 0,t);if(void 0!==r&&void 0!==n)return u(r,n,o)}}:u(s,l,o)}function an(t,e,r){return\\\"color\\\"===e.type?r=oe.parse(r):\\\"formatted\\\"===e.type?r=ue.fromString(r.toString()):\\\"resolvedImage\\\"===e.type?r=ce.fromString(r.toString()):Jr(r)===e.type||\\\"enum\\\"===e.type&&e.values[r]||(r=void 0),tn(r,t.default,e.default)}Ae.register(jr,{error:[{kind:\\\"error\\\"},[qt],function(t,e){var r=e[0];throw new ge(r.evaluate(t))}],typeof:[qt,[Wt],function(t,e){return Qt(pe(e[0].evaluate(t)))}],\\\"to-rgba\\\":[$t(Ht,4),[Zt],function(t,e){return e[0].evaluate(t).toArray()}],rgb:[Zt,[Ht,Ht,Ht],Ur],rgba:[Zt,[Ht,Ht,Ht,Ht],Ur],has:{type:Gt,overloads:[[[qt],function(t,e){return Vr(e[0].evaluate(t),t.properties())}],[[qt,Yt],function(t,e){var r=e[0],n=e[1];return Vr(r.evaluate(t),n.evaluate(t))}]]},get:{type:Wt,overloads:[[[qt],function(t,e){return Hr(e[0].evaluate(t),t.properties())}],[[qt,Yt],function(t,e){var r=e[0],n=e[1];return Hr(r.evaluate(t),n.evaluate(t))}]]},\\\"feature-state\\\":[Wt,[qt],function(t,e){return Hr(e[0].evaluate(t),t.featureState||{})}],properties:[Yt,[],function(t){return t.properties()}],\\\"geometry-type\\\":[qt,[],function(t){return t.geometryType()}],id:[Wt,[],function(t){return t.id()}],zoom:[Ht,[],function(t){return t.globals.zoom}],\\\"heatmap-density\\\":[Ht,[],function(t){return t.globals.heatmapDensity||0}],\\\"line-progress\\\":[Ht,[],function(t){return t.globals.lineProgress||0}],accumulated:[Wt,[],function(t){return void 0===t.globals.accumulated?null:t.globals.accumulated}],\\\"+\\\":[Ht,qr(Ht),function(t,e){for(var r=0,n=0,i=e;n<i.length;n+=1)r+=i[n].evaluate(t);return r}],\\\"*\\\":[Ht,qr(Ht),function(t,e){for(var r=1,n=0,i=e;n<i.length;n+=1)r*=i[n].evaluate(t);return r}],\\\"-\\\":{type:Ht,overloads:[[[Ht,Ht],function(t,e){var r=e[0],n=e[1];return r.evaluate(t)-n.evaluate(t)}],[[Ht],function(t,e){return-e[0].evaluate(t)}]]},\\\"/\\\":[Ht,[Ht,Ht],function(t,e){var r=e[0],n=e[1];return r.evaluate(t)/n.evaluate(t)}],\\\"%\\\":[Ht,[Ht,Ht],function(t,e){var r=e[0],n=e[1];return r.evaluate(t)%n.evaluate(t)}],ln2:[Ht,[],function(){return Math.LN2}],pi:[Ht,[],function(){return Math.PI}],e:[Ht,[],function(){return Math.E}],\\\"^\\\":[Ht,[Ht,Ht],function(t,e){var r=e[0],n=e[1];return Math.pow(r.evaluate(t),n.evaluate(t))}],sqrt:[Ht,[Ht],function(t,e){var r=e[0];return Math.sqrt(r.evaluate(t))}],log10:[Ht,[Ht],function(t,e){var r=e[0];return Math.log(r.evaluate(t))/Math.LN10}],ln:[Ht,[Ht],function(t,e){var r=e[0];return Math.log(r.evaluate(t))}],log2:[Ht,[Ht],function(t,e){var r=e[0];return Math.log(r.evaluate(t))/Math.LN2}],sin:[Ht,[Ht],function(t,e){var r=e[0];return Math.sin(r.evaluate(t))}],cos:[Ht,[Ht],function(t,e){var r=e[0];return Math.cos(r.evaluate(t))}],tan:[Ht,[Ht],function(t,e){var r=e[0];return Math.tan(r.evaluate(t))}],asin:[Ht,[Ht],function(t,e){var r=e[0];return Math.asin(r.evaluate(t))}],acos:[Ht,[Ht],function(t,e){var r=e[0];return Math.acos(r.evaluate(t))}],atan:[Ht,[Ht],function(t,e){var r=e[0];return Math.atan(r.evaluate(t))}],min:[Ht,qr(Ht),function(t,e){return Math.min.apply(Math,e.map((function(e){return e.evaluate(t)})))}],max:[Ht,qr(Ht),function(t,e){return Math.max.apply(Math,e.map((function(e){return e.evaluate(t)})))}],abs:[Ht,[Ht],function(t,e){var r=e[0];return Math.abs(r.evaluate(t))}],round:[Ht,[Ht],function(t,e){var r=e[0].evaluate(t);return r<0?-Math.round(-r):Math.round(r)}],floor:[Ht,[Ht],function(t,e){var r=e[0];return Math.floor(r.evaluate(t))}],ceil:[Ht,[Ht],function(t,e){var r=e[0];return Math.ceil(r.evaluate(t))}],\\\"filter-==\\\":[Gt,[qt,Wt],function(t,e){var r=e[0],n=e[1];return t.properties()[r.value]===n.value}],\\\"filter-id-==\\\":[Gt,[Wt],function(t,e){var r=e[0];return t.id()===r.value}],\\\"filter-type-==\\\":[Gt,[qt],function(t,e){var r=e[0];return t.geometryType()===r.value}],\\\"filter-<\\\":[Gt,[qt,Wt],function(t,e){var r=e[0],n=e[1],i=t.properties()[r.value],a=n.value;return typeof i==typeof a&&i<a}],\\\"filter-id-<\\\":[Gt,[Wt],function(t,e){var r=e[0],n=t.id(),i=r.value;return typeof n==typeof i&&n<i}],\\\"filter->\\\":[Gt,[qt,Wt],function(t,e){var r=e[0],n=e[1],i=t.properties()[r.value],a=n.value;return typeof i==typeof a&&i>a}],\\\"filter-id->\\\":[Gt,[Wt],function(t,e){var r=e[0],n=t.id(),i=r.value;return typeof n==typeof i&&n>i}],\\\"filter-<=\\\":[Gt,[qt,Wt],function(t,e){var r=e[0],n=e[1],i=t.properties()[r.value],a=n.value;return typeof i==typeof a&&i<=a}],\\\"filter-id-<=\\\":[Gt,[Wt],function(t,e){var r=e[0],n=t.id(),i=r.value;return typeof n==typeof i&&n<=i}],\\\"filter->=\\\":[Gt,[qt,Wt],function(t,e){var r=e[0],n=e[1],i=t.properties()[r.value],a=n.value;return typeof i==typeof a&&i>=a}],\\\"filter-id->=\\\":[Gt,[Wt],function(t,e){var r=e[0],n=t.id(),i=r.value;return typeof n==typeof i&&n>=i}],\\\"filter-has\\\":[Gt,[Wt],function(t,e){return e[0].value in t.properties()}],\\\"filter-has-id\\\":[Gt,[],function(t){return null!==t.id()&&void 0!==t.id()}],\\\"filter-type-in\\\":[Gt,[$t(qt)],function(t,e){return e[0].value.indexOf(t.geometryType())>=0}],\\\"filter-id-in\\\":[Gt,[$t(Wt)],function(t,e){return e[0].value.indexOf(t.id())>=0}],\\\"filter-in-small\\\":[Gt,[qt,$t(Wt)],function(t,e){var r=e[0];return e[1].value.indexOf(t.properties()[r.value])>=0}],\\\"filter-in-large\\\":[Gt,[qt,$t(Wt)],function(t,e){var r=e[0],n=e[1];return function(t,e,r,n){for(;r<=n;){var i=r+n>>1;if(e[i]===t)return!0;e[i]>t?n=i-1:r=i+1}return!1}(t.properties()[r.value],n.value,0,n.value.length-1)}],all:{type:Gt,overloads:[[[Gt,Gt],function(t,e){var r=e[0],n=e[1];return r.evaluate(t)&&n.evaluate(t)}],[qr(Gt),function(t,e){for(var r=0,n=e;r<n.length;r+=1)if(!n[r].evaluate(t))return!1;return!0}]]},any:{type:Gt,overloads:[[[Gt,Gt],function(t,e){var r=e[0],n=e[1];return r.evaluate(t)||n.evaluate(t)}],[qr(Gt),function(t,e){for(var r=0,n=e;r<n.length;r+=1)if(n[r].evaluate(t))return!0;return!1}]]},\\\"!\\\":[Gt,[Gt],function(t,e){return!e[0].evaluate(t)}],\\\"is-supported-script\\\":[Gt,[qt],function(t,e){var r=e[0],n=t.globals&&t.globals.isSupportedScript;return!n||n(r.evaluate(t))}],upcase:[qt,[qt],function(t,e){return e[0].evaluate(t).toUpperCase()}],downcase:[qt,[qt],function(t,e){return e[0].evaluate(t).toLowerCase()}],concat:[qt,qr(Wt),function(t,e){return e.map((function(e){return de(e.evaluate(t))})).join(\\\"\\\")}],\\\"resolved-locale\\\":[qt,[Xt],function(t,e){return e[0].evaluate(t).resolvedLocale()}]});var on=function(t,e){this.expression=t,this._warningHistory={},this._evaluator=new ke,this._defaultValue=e?function(t){return\\\"color\\\"===t.type&&Kr(t.default)?new oe(0,0,0,0):\\\"color\\\"===t.type?oe.parse(t.default)||null:void 0===t.default?null:t.default}(e):null,this._enumValues=e&&\\\"enum\\\"===e.type?e.values:null};function sn(t){return Array.isArray(t)&&t.length>0&&\\\"string\\\"==typeof t[0]&&t[0]in jr}function ln(t,e){var r=new We(jr,[],e?function(t){var e={color:Zt,string:qt,number:Ht,enum:qt,boolean:Gt,formatted:Jt,resolvedImage:Kt};return\\\"array\\\"===t.type?$t(e[t.value]||Wt,t.length):e[t.type]}(e):void 0),n=r.parse(t,void 0,void 0,void 0,e&&\\\"string\\\"===e.type?{typeAnnotation:\\\"coerce\\\"}:void 0);return n?Gr(new on(n,e)):Zr(r.errors)}on.prototype.evaluateWithoutErrorHandling=function(t,e,r,n,i,a){return this._evaluator.globals=t,this._evaluator.feature=e,this._evaluator.featureState=r,this._evaluator.canonical=n,this._evaluator.availableImages=i||null,this._evaluator.formattedSection=a,this.expression.evaluate(this._evaluator)},on.prototype.evaluate=function(t,e,r,n,i,a){this._evaluator.globals=t,this._evaluator.feature=e||null,this._evaluator.featureState=r||null,this._evaluator.canonical=n,this._evaluator.availableImages=i||null,this._evaluator.formattedSection=a||null;try{var o=this.expression.evaluate(this._evaluator);if(null==o||\\\"number\\\"==typeof o&&o!=o)return this._defaultValue;if(this._enumValues&&!(o in this._enumValues))throw new ge(\\\"Expected value to be one of \\\"+Object.keys(this._enumValues).map((function(t){return JSON.stringify(t)})).join(\\\", \\\")+\\\", but found \\\"+JSON.stringify(o)+\\\" instead.\\\");return o}catch(t){return this._warningHistory[t.message]||(this._warningHistory[t.message]=!0,\\\"undefined\\\"!=typeof console&&console.warn(t.message)),this._defaultValue}};var un=function(t,e){this.kind=t,this._styleExpression=e,this.isStateDependent=\\\"constant\\\"!==t&&!Ge(e.expression)};un.prototype.evaluateWithoutErrorHandling=function(t,e,r,n,i,a){return this._styleExpression.evaluateWithoutErrorHandling(t,e,r,n,i,a)},un.prototype.evaluate=function(t,e,r,n,i,a){return this._styleExpression.evaluate(t,e,r,n,i,a)};var cn=function(t,e,r,n){this.kind=t,this.zoomStops=r,this._styleExpression=e,this.isStateDependent=\\\"camera\\\"!==t&&!Ge(e.expression),this.interpolationType=n};function fn(t,e){if(\\\"error\\\"===(t=ln(t,e)).result)return t;var r=t.value.expression,n=qe(r);if(!n&&!Yr(e))return Zr([new jt(\\\"\\\",\\\"data expressions not supported\\\")]);var i=Ze(r,[\\\"zoom\\\"]);if(!i&&!Wr(e))return Zr([new jt(\\\"\\\",\\\"zoom expressions not supported\\\")]);var a=pn(r);if(!a&&!i)return Zr([new jt(\\\"\\\",'\\\"zoom\\\" expression may only be used as input to a top-level \\\"step\\\" or \\\"interpolate\\\" expression.')]);if(a instanceof jt)return Zr([a]);if(a instanceof xr&&!Xr(e))return Zr([new jt(\\\"\\\",'\\\"interpolate\\\" expressions cannot be used with this property')]);if(!a)return Gr(new un(n?\\\"constant\\\":\\\"source\\\",t.value));var o=a instanceof xr?a.interpolation:void 0;return Gr(new cn(n?\\\"camera\\\":\\\"composite\\\",t.value,a.labels,o))}cn.prototype.evaluateWithoutErrorHandling=function(t,e,r,n,i,a){return this._styleExpression.evaluateWithoutErrorHandling(t,e,r,n,i,a)},cn.prototype.evaluate=function(t,e,r,n,i,a){return this._styleExpression.evaluate(t,e,r,n,i,a)},cn.prototype.interpolationFactor=function(t,e,r){return this.interpolationType?xr.interpolationFactor(this.interpolationType,t,e,r):0};var hn=function(t,e){this._parameters=t,this._specification=e,Ft(this,Qr(this._parameters,this._specification))};function pn(t){var e=null;if(t instanceof wr)e=pn(t.result);else if(t instanceof _r)for(var r=0,n=t.args;r<n.length;r+=1){var i=n[r];if(e=pn(i))break}else(t instanceof Ke||t instanceof xr)&&t.input instanceof Ae&&\\\"zoom\\\"===t.input.name&&(e=t);return e instanceof jt||t.eachChild((function(t){var r=pn(t);r instanceof jt?e=r:!e&&r?e=new jt(\\\"\\\",'\\\"zoom\\\" expression may only be used as input to a top-level \\\"step\\\" or \\\"interpolate\\\" expression.'):e&&r&&e!==r&&(e=new jt(\\\"\\\",'Only one zoom-based \\\"step\\\" or \\\"interpolate\\\" subexpression may be used in an expression.'))})),e}function dn(t){var e=t.key,r=t.value,n=t.valueSpec||{},i=t.objectElementValidators||{},a=t.style,o=t.styleSpec,s=[],l=Jr(r);if(\\\"object\\\"!==l)return[new zt(e,r,\\\"object expected, \\\"+l+\\\" found\\\")];for(var u in r){var c=u.split(\\\".\\\")[0],f=n[c]||n[\\\"*\\\"],h=void 0;if(i[c])h=i[c];else if(n[c])h=Un;else if(i[\\\"*\\\"])h=i[\\\"*\\\"];else{if(!n[\\\"*\\\"]){s.push(new zt(e,r[u],'unknown property \\\"'+u+'\\\"'));continue}h=Un}s=s.concat(h({key:(e?e+\\\".\\\":e)+u,value:r[u],valueSpec:f,style:a,styleSpec:o,object:r,objectKey:u},r))}for(var p in n)i[p]||n[p].required&&void 0===n[p].default&&void 0===r[p]&&s.push(new zt(e,r,'missing required property \\\"'+p+'\\\"'));return s}function vn(t){var e=t.value,r=t.valueSpec,n=t.style,i=t.styleSpec,a=t.key,o=t.arrayElementValidator||Un;if(\\\"array\\\"!==Jr(e))return[new zt(a,e,\\\"array expected, \\\"+Jr(e)+\\\" found\\\")];if(r.length&&e.length!==r.length)return[new zt(a,e,\\\"array length \\\"+r.length+\\\" expected, length \\\"+e.length+\\\" found\\\")];if(r[\\\"min-length\\\"]&&e.length<r[\\\"min-length\\\"])return[new zt(a,e,\\\"array length at least \\\"+r[\\\"min-length\\\"]+\\\" expected, length \\\"+e.length+\\\" found\\\")];var s={type:r.value,values:r.values};i.$version<7&&(s.function=r.function),\\\"object\\\"===Jr(r.value)&&(s=r.value);for(var l=[],u=0;u<e.length;u++)l=l.concat(o({array:e,arrayIndex:u,value:e[u],valueSpec:s,style:n,styleSpec:i,key:a+\\\"[\\\"+u+\\\"]\\\"}));return l}function gn(t){var e=t.key,r=t.value,n=t.valueSpec,i=Jr(r);return\\\"number\\\"===i&&r!=r&&(i=\\\"NaN\\\"),\\\"number\\\"!==i?[new zt(e,r,\\\"number expected, \\\"+i+\\\" found\\\")]:\\\"minimum\\\"in n&&r<n.minimum?[new zt(e,r,r+\\\" is less than the minimum value \\\"+n.minimum)]:\\\"maximum\\\"in n&&r>n.maximum?[new zt(e,r,r+\\\" is greater than the maximum value \\\"+n.maximum)]:[]}function yn(t){var e,r,n,i=t.valueSpec,a=Bt(t.value.type),o={},s=\\\"categorical\\\"!==a&&void 0===t.value.property,l=!s,u=\\\"array\\\"===Jr(t.value.stops)&&\\\"array\\\"===Jr(t.value.stops[0])&&\\\"object\\\"===Jr(t.value.stops[0][0]),c=dn({key:t.key,value:t.value,valueSpec:t.styleSpec.function,style:t.style,styleSpec:t.styleSpec,objectElementValidators:{stops:function(t){if(\\\"identity\\\"===a)return[new zt(t.key,t.value,'identity function may not have a \\\"stops\\\" property')];var e=[],r=t.value;return e=e.concat(vn({key:t.key,value:r,valueSpec:t.valueSpec,style:t.style,styleSpec:t.styleSpec,arrayElementValidator:f})),\\\"array\\\"===Jr(r)&&0===r.length&&e.push(new zt(t.key,r,\\\"array must have at least one stop\\\")),e},default:function(t){return Un({key:t.key,value:t.value,valueSpec:i,style:t.style,styleSpec:t.styleSpec})}}});return\\\"identity\\\"===a&&s&&c.push(new zt(t.key,t.value,'missing required property \\\"property\\\"')),\\\"identity\\\"===a||t.value.stops||c.push(new zt(t.key,t.value,'missing required property \\\"stops\\\"')),\\\"exponential\\\"===a&&t.valueSpec.expression&&!Xr(t.valueSpec)&&c.push(new zt(t.key,t.value,\\\"exponential functions not supported\\\")),t.styleSpec.$version>=8&&(l&&!Yr(t.valueSpec)?c.push(new zt(t.key,t.value,\\\"property functions not supported\\\")):s&&!Wr(t.valueSpec)&&c.push(new zt(t.key,t.value,\\\"zoom functions not supported\\\"))),\\\"categorical\\\"!==a&&!u||void 0!==t.value.property||c.push(new zt(t.key,t.value,'\\\"property\\\" property is required')),c;function f(t){var e=[],a=t.value,s=t.key;if(\\\"array\\\"!==Jr(a))return[new zt(s,a,\\\"array expected, \\\"+Jr(a)+\\\" found\\\")];if(2!==a.length)return[new zt(s,a,\\\"array length 2 expected, length \\\"+a.length+\\\" found\\\")];if(u){if(\\\"object\\\"!==Jr(a[0]))return[new zt(s,a,\\\"object expected, \\\"+Jr(a[0])+\\\" found\\\")];if(void 0===a[0].zoom)return[new zt(s,a,\\\"object stop key must have zoom\\\")];if(void 0===a[0].value)return[new zt(s,a,\\\"object stop key must have value\\\")];if(n&&n>Bt(a[0].zoom))return[new zt(s,a[0].zoom,\\\"stop zoom values must appear in ascending order\\\")];Bt(a[0].zoom)!==n&&(n=Bt(a[0].zoom),r=void 0,o={}),e=e.concat(dn({key:s+\\\"[0]\\\",value:a[0],valueSpec:{zoom:{}},style:t.style,styleSpec:t.styleSpec,objectElementValidators:{zoom:gn,value:h}}))}else e=e.concat(h({key:s+\\\"[0]\\\",value:a[0],valueSpec:{},style:t.style,styleSpec:t.styleSpec},a));return sn(Nt(a[1]))?e.concat([new zt(s+\\\"[1]\\\",a[1],\\\"expressions are not allowed in function stops.\\\")]):e.concat(Un({key:s+\\\"[1]\\\",value:a[1],valueSpec:i,style:t.style,styleSpec:t.styleSpec}))}function h(t,n){var s=Jr(t.value),l=Bt(t.value),u=null!==t.value?t.value:n;if(e){if(s!==e)return[new zt(t.key,u,s+\\\" stop domain type must match previous stop domain type \\\"+e)]}else e=s;if(\\\"number\\\"!==s&&\\\"string\\\"!==s&&\\\"boolean\\\"!==s)return[new zt(t.key,u,\\\"stop domain value must be a number, string, or boolean\\\")];if(\\\"number\\\"!==s&&\\\"categorical\\\"!==a){var c=\\\"number expected, \\\"+s+\\\" found\\\";return Yr(i)&&void 0===a&&(c+='\\\\nIf you intended to use a categorical function, specify `\\\"type\\\": \\\"categorical\\\"`.'),[new zt(t.key,u,c)]}return\\\"categorical\\\"!==a||\\\"number\\\"!==s||isFinite(l)&&Math.floor(l)===l?\\\"categorical\\\"!==a&&\\\"number\\\"===s&&void 0!==r&&l<r?[new zt(t.key,u,\\\"stop domain values must appear in ascending order\\\")]:(r=l,\\\"categorical\\\"===a&&l in o?[new zt(t.key,u,\\\"stop domain values must be unique\\\")]:(o[l]=!0,[])):[new zt(t.key,u,\\\"integer expected, found \\\"+l)]}}function mn(t){var e=(\\\"property\\\"===t.expressionContext?fn:ln)(Nt(t.value),t.valueSpec);if(\\\"error\\\"===e.result)return e.value.map((function(e){return new zt(\\\"\\\"+t.key+e.key,t.value,e.message)}));var r=e.value.expression||e.value._styleExpression.expression;if(\\\"property\\\"===t.expressionContext&&\\\"text-font\\\"===t.propertyKey&&!r.outputDefined())return[new zt(t.key,t.value,'Invalid data expression for \\\"'+t.propertyKey+'\\\". Output values must be contained as literals within the expression.')];if(\\\"property\\\"===t.expressionContext&&\\\"layout\\\"===t.propertyType&&!Ge(r))return[new zt(t.key,t.value,'\\\"feature-state\\\" data expressions are not supported with layout properties.')];if(\\\"filter\\\"===t.expressionContext&&!Ge(r))return[new zt(t.key,t.value,'\\\"feature-state\\\" data expressions are not supported with filters.')];if(t.expressionContext&&0===t.expressionContext.indexOf(\\\"cluster\\\")){if(!Ze(r,[\\\"zoom\\\",\\\"feature-state\\\"]))return[new zt(t.key,t.value,'\\\"zoom\\\" and \\\"feature-state\\\" expressions are not supported with cluster properties.')];if(\\\"cluster-initial\\\"===t.expressionContext&&!qe(r))return[new zt(t.key,t.value,\\\"Feature data expressions are not supported with initial expression part of cluster properties.\\\")]}return[]}function xn(t){var e=t.key,r=t.value,n=t.valueSpec,i=[];return Array.isArray(n.values)?-1===n.values.indexOf(Bt(r))&&i.push(new zt(e,r,\\\"expected one of [\\\"+n.values.join(\\\", \\\")+\\\"], \\\"+JSON.stringify(r)+\\\" found\\\")):-1===Object.keys(n.values).indexOf(Bt(r))&&i.push(new zt(e,r,\\\"expected one of [\\\"+Object.keys(n.values).join(\\\", \\\")+\\\"], \\\"+JSON.stringify(r)+\\\" found\\\")),i}function bn(t){if(!0===t||!1===t)return!0;if(!Array.isArray(t)||0===t.length)return!1;switch(t[0]){case\\\"has\\\":return t.length>=2&&\\\"$id\\\"!==t[1]&&\\\"$type\\\"!==t[1];case\\\"in\\\":return t.length>=3&&(\\\"string\\\"!=typeof t[1]||Array.isArray(t[2]));case\\\"!in\\\":case\\\"!has\\\":case\\\"none\\\":return!1;case\\\"==\\\":case\\\"!=\\\":case\\\">\\\":case\\\">=\\\":case\\\"<\\\":case\\\"<=\\\":return 3!==t.length||Array.isArray(t[1])||Array.isArray(t[2]);case\\\"any\\\":case\\\"all\\\":for(var e=0,r=t.slice(1);e<r.length;e+=1){var n=r[e];if(!bn(n)&&\\\"boolean\\\"!=typeof n)return!1}return!0;default:return!0}}hn.deserialize=function(t){return new hn(t._parameters,t._specification)},hn.serialize=function(t){return{_parameters:t._parameters,_specification:t._specification}};var _n={type:\\\"boolean\\\",default:!1,transition:!1,\\\"property-type\\\":\\\"data-driven\\\",expression:{interpolated:!1,parameters:[\\\"zoom\\\",\\\"feature\\\"]}};function wn(t){if(null==t)return{filter:function(){return!0},needGeometry:!1};bn(t)||(t=An(t));var e=ln(t,_n);if(\\\"error\\\"===e.result)throw new Error(e.value.map((function(t){return t.key+\\\": \\\"+t.message})).join(\\\", \\\"));return{filter:function(t,r,n){return e.value.evaluate(t,r,{},n)},needGeometry:kn(t)}}function Tn(t,e){return t<e?-1:t>e?1:0}function kn(t){if(!Array.isArray(t))return!1;if(\\\"within\\\"===t[0])return!0;for(var e=1;e<t.length;e++)if(kn(t[e]))return!0;return!1}function An(t){if(!t)return!0;var e,r=t[0];return t.length<=1?\\\"any\\\"!==r:\\\"==\\\"===r?Mn(t[1],t[2],\\\"==\\\"):\\\"!=\\\"===r?Ln(Mn(t[1],t[2],\\\"==\\\")):\\\"<\\\"===r||\\\">\\\"===r||\\\"<=\\\"===r||\\\">=\\\"===r?Mn(t[1],t[2],r):\\\"any\\\"===r?(e=t.slice(1),[\\\"any\\\"].concat(e.map(An))):\\\"all\\\"===r?[\\\"all\\\"].concat(t.slice(1).map(An)):\\\"none\\\"===r?[\\\"all\\\"].concat(t.slice(1).map(An).map(Ln)):\\\"in\\\"===r?Sn(t[1],t.slice(2)):\\\"!in\\\"===r?Ln(Sn(t[1],t.slice(2))):\\\"has\\\"===r?En(t[1]):\\\"!has\\\"===r?Ln(En(t[1])):\\\"within\\\"!==r||t}function Mn(t,e,r){switch(t){case\\\"$type\\\":return[\\\"filter-type-\\\"+r,e];case\\\"$id\\\":return[\\\"filter-id-\\\"+r,e];default:return[\\\"filter-\\\"+r,t,e]}}function Sn(t,e){if(0===e.length)return!1;switch(t){case\\\"$type\\\":return[\\\"filter-type-in\\\",[\\\"literal\\\",e]];case\\\"$id\\\":return[\\\"filter-id-in\\\",[\\\"literal\\\",e]];default:return e.length>200&&!e.some((function(t){return typeof t!=typeof e[0]}))?[\\\"filter-in-large\\\",t,[\\\"literal\\\",e.sort(Tn)]]:[\\\"filter-in-small\\\",t,[\\\"literal\\\",e]]}}function En(t){switch(t){case\\\"$type\\\":return!0;case\\\"$id\\\":return[\\\"filter-has-id\\\"];default:return[\\\"filter-has\\\",t]}}function Ln(t){return[\\\"!\\\",t]}function Cn(t){return bn(Nt(t.value))?mn(Ft({},t,{expressionContext:\\\"filter\\\",valueSpec:{value:\\\"boolean\\\"}})):Pn(t)}function Pn(t){var e=t.value,r=t.key;if(\\\"array\\\"!==Jr(e))return[new zt(r,e,\\\"array expected, \\\"+Jr(e)+\\\" found\\\")];var n,i=t.styleSpec,a=[];if(e.length<1)return[new zt(r,e,\\\"filter array must have at least 1 element\\\")];switch(a=a.concat(xn({key:r+\\\"[0]\\\",value:e[0],valueSpec:i.filter_operator,style:t.style,styleSpec:t.styleSpec})),Bt(e[0])){case\\\"<\\\":case\\\"<=\\\":case\\\">\\\":case\\\">=\\\":e.length>=2&&\\\"$type\\\"===Bt(e[1])&&a.push(new zt(r,e,'\\\"$type\\\" cannot be use with operator \\\"'+e[0]+'\\\"'));case\\\"==\\\":case\\\"!=\\\":3!==e.length&&a.push(new zt(r,e,'filter array for operator \\\"'+e[0]+'\\\" must have 3 elements'));case\\\"in\\\":case\\\"!in\\\":e.length>=2&&\\\"string\\\"!==(n=Jr(e[1]))&&a.push(new zt(r+\\\"[1]\\\",e[1],\\\"string expected, \\\"+n+\\\" found\\\"));for(var o=2;o<e.length;o++)n=Jr(e[o]),\\\"$type\\\"===Bt(e[1])?a=a.concat(xn({key:r+\\\"[\\\"+o+\\\"]\\\",value:e[o],valueSpec:i.geometry_type,style:t.style,styleSpec:t.styleSpec})):\\\"string\\\"!==n&&\\\"number\\\"!==n&&\\\"boolean\\\"!==n&&a.push(new zt(r+\\\"[\\\"+o+\\\"]\\\",e[o],\\\"string, number, or boolean expected, \\\"+n+\\\" found\\\"));break;case\\\"any\\\":case\\\"all\\\":case\\\"none\\\":for(var s=1;s<e.length;s++)a=a.concat(Pn({key:r+\\\"[\\\"+s+\\\"]\\\",value:e[s],style:t.style,styleSpec:t.styleSpec}));break;case\\\"has\\\":case\\\"!has\\\":n=Jr(e[1]),2!==e.length?a.push(new zt(r,e,'filter array for \\\"'+e[0]+'\\\" operator must have 2 elements')):\\\"string\\\"!==n&&a.push(new zt(r+\\\"[1]\\\",e[1],\\\"string expected, \\\"+n+\\\" found\\\"));break;case\\\"within\\\":n=Jr(e[1]),2!==e.length?a.push(new zt(r,e,'filter array for \\\"'+e[0]+'\\\" operator must have 2 elements')):\\\"object\\\"!==n&&a.push(new zt(r+\\\"[1]\\\",e[1],\\\"object expected, \\\"+n+\\\" found\\\"))}return a}function On(t,e){var r=t.key,n=t.style,i=t.styleSpec,a=t.value,o=t.objectKey,s=i[e+\\\"_\\\"+t.layerType];if(!s)return[];var l=o.match(/^(.*)-transition$/);if(\\\"paint\\\"===e&&l&&s[l[1]]&&s[l[1]].transition)return Un({key:r,value:a,valueSpec:i.transition,style:n,styleSpec:i});var u,c=t.valueSpec||s[o];if(!c)return[new zt(r,a,'unknown property \\\"'+o+'\\\"')];if(\\\"string\\\"===Jr(a)&&Yr(c)&&!c.tokens&&(u=/^{([^}]+)}$/.exec(a)))return[new zt(r,a,'\\\"'+o+'\\\" does not support interpolation syntax\\\\nUse an identity property function instead: `{ \\\"type\\\": \\\"identity\\\", \\\"property\\\": '+JSON.stringify(u[1])+\\\" }`.\\\")];var f=[];return\\\"symbol\\\"===t.layerType&&(\\\"text-field\\\"===o&&n&&!n.glyphs&&f.push(new zt(r,a,'use of \\\"text-field\\\" requires a style \\\"glyphs\\\" property')),\\\"text-font\\\"===o&&Kr(Nt(a))&&\\\"identity\\\"===Bt(a.type)&&f.push(new zt(r,a,'\\\"text-font\\\" does not support identity functions'))),f.concat(Un({key:t.key,value:a,valueSpec:c,style:n,styleSpec:i,expressionContext:\\\"property\\\",propertyType:e,propertyKey:o}))}function In(t){return On(t,\\\"paint\\\")}function Dn(t){return On(t,\\\"layout\\\")}function zn(t){var e=[],r=t.value,n=t.key,i=t.style,a=t.styleSpec;r.type||r.ref||e.push(new zt(n,r,'either \\\"type\\\" or \\\"ref\\\" is required'));var o,s=Bt(r.type),l=Bt(r.ref);if(r.id)for(var u=Bt(r.id),c=0;c<t.arrayIndex;c++){var f=i.layers[c];Bt(f.id)===u&&e.push(new zt(n,r.id,'duplicate layer id \\\"'+r.id+'\\\", previously used at line '+f.id.__line__))}if(\\\"ref\\\"in r)[\\\"type\\\",\\\"source\\\",\\\"source-layer\\\",\\\"filter\\\",\\\"layout\\\"].forEach((function(t){t in r&&e.push(new zt(n,r[t],'\\\"'+t+'\\\" is prohibited for ref layers'))})),i.layers.forEach((function(t){Bt(t.id)===l&&(o=t)})),o?o.ref?e.push(new zt(n,r.ref,\\\"ref cannot reference another ref layer\\\")):s=Bt(o.type):e.push(new zt(n,r.ref,'ref layer \\\"'+l+'\\\" not found'));else if(\\\"background\\\"!==s)if(r.source){var h=i.sources&&i.sources[r.source],p=h&&Bt(h.type);h?\\\"vector\\\"===p&&\\\"raster\\\"===s?e.push(new zt(n,r.source,'layer \\\"'+r.id+'\\\" requires a raster source')):\\\"raster\\\"===p&&\\\"raster\\\"!==s?e.push(new zt(n,r.source,'layer \\\"'+r.id+'\\\" requires a vector source')):\\\"vector\\\"!==p||r[\\\"source-layer\\\"]?\\\"raster-dem\\\"===p&&\\\"hillshade\\\"!==s?e.push(new zt(n,r.source,\\\"raster-dem source can only be used with layer type 'hillshade'.\\\")):\\\"line\\\"!==s||!r.paint||!r.paint[\\\"line-gradient\\\"]||\\\"geojson\\\"===p&&h.lineMetrics||e.push(new zt(n,r,'layer \\\"'+r.id+'\\\" specifies a line-gradient, which requires a GeoJSON source with `lineMetrics` enabled.')):e.push(new zt(n,r,'layer \\\"'+r.id+'\\\" must specify a \\\"source-layer\\\"')):e.push(new zt(n,r.source,'source \\\"'+r.source+'\\\" not found'))}else e.push(new zt(n,r,'missing required property \\\"source\\\"'));return e=e.concat(dn({key:n,value:r,valueSpec:a.layer,style:t.style,styleSpec:t.styleSpec,objectElementValidators:{\\\"*\\\":function(){return[]},type:function(){return Un({key:n+\\\".type\\\",value:r.type,valueSpec:a.layer.type,style:t.style,styleSpec:t.styleSpec,object:r,objectKey:\\\"type\\\"})},filter:Cn,layout:function(t){return dn({layer:r,key:t.key,value:t.value,style:t.style,styleSpec:t.styleSpec,objectElementValidators:{\\\"*\\\":function(t){return Dn(Ft({layerType:s},t))}}})},paint:function(t){return dn({layer:r,key:t.key,value:t.value,style:t.style,styleSpec:t.styleSpec,objectElementValidators:{\\\"*\\\":function(t){return In(Ft({layerType:s},t))}}})}}})),e}function Rn(t){var e=t.value,r=t.key,n=Jr(e);return\\\"string\\\"!==n?[new zt(r,e,\\\"string expected, \\\"+n+\\\" found\\\")]:[]}var Fn={promoteId:function(t){var e=t.key,r=t.value;if(\\\"string\\\"===Jr(r))return Rn({key:e,value:r});var n=[];for(var i in r)n.push.apply(n,Rn({key:e+\\\".\\\"+i,value:r[i]}));return n}};function Bn(t){var e=t.value,r=t.key,n=t.styleSpec,i=t.style;if(!e.type)return[new zt(r,e,'\\\"type\\\" is required')];var a,o=Bt(e.type);switch(o){case\\\"vector\\\":case\\\"raster\\\":case\\\"raster-dem\\\":return dn({key:r,value:e,valueSpec:n[\\\"source_\\\"+o.replace(\\\"-\\\",\\\"_\\\")],style:t.style,styleSpec:n,objectElementValidators:Fn});case\\\"geojson\\\":if(a=dn({key:r,value:e,valueSpec:n.source_geojson,style:i,styleSpec:n,objectElementValidators:Fn}),e.cluster)for(var s in e.clusterProperties){var l=e.clusterProperties[s],u=l[0],c=l[1],f=\\\"string\\\"==typeof u?[u,[\\\"accumulated\\\"],[\\\"get\\\",s]]:u;a.push.apply(a,mn({key:r+\\\".\\\"+s+\\\".map\\\",value:c,expressionContext:\\\"cluster-map\\\"})),a.push.apply(a,mn({key:r+\\\".\\\"+s+\\\".reduce\\\",value:f,expressionContext:\\\"cluster-reduce\\\"}))}return a;case\\\"video\\\":return dn({key:r,value:e,valueSpec:n.source_video,style:i,styleSpec:n});case\\\"image\\\":return dn({key:r,value:e,valueSpec:n.source_image,style:i,styleSpec:n});case\\\"canvas\\\":return[new zt(r,null,\\\"Please use runtime APIs to add canvas sources, rather than including them in stylesheets.\\\",\\\"source.canvas\\\")];default:return xn({key:r+\\\".type\\\",value:e.type,valueSpec:{values:[\\\"vector\\\",\\\"raster\\\",\\\"raster-dem\\\",\\\"geojson\\\",\\\"video\\\",\\\"image\\\"]},style:i,styleSpec:n})}}function Nn(t){var e=t.value,r=t.styleSpec,n=r.light,i=t.style,a=[],o=Jr(e);if(void 0===e)return a;if(\\\"object\\\"!==o)return a.concat([new zt(\\\"light\\\",e,\\\"object expected, \\\"+o+\\\" found\\\")]);for(var s in e){var l=s.match(/^(.*)-transition$/);a=l&&n[l[1]]&&n[l[1]].transition?a.concat(Un({key:s,value:e[s],valueSpec:r.transition,style:i,styleSpec:r})):n[s]?a.concat(Un({key:s,value:e[s],valueSpec:n[s],style:i,styleSpec:r})):a.concat([new zt(s,e[s],'unknown property \\\"'+s+'\\\"')])}return a}var jn={\\\"*\\\":function(){return[]},array:vn,boolean:function(t){var e=t.value,r=t.key,n=Jr(e);return\\\"boolean\\\"!==n?[new zt(r,e,\\\"boolean expected, \\\"+n+\\\" found\\\")]:[]},number:gn,color:function(t){var e=t.key,r=t.value,n=Jr(r);return\\\"string\\\"!==n?[new zt(e,r,\\\"color expected, \\\"+n+\\\" found\\\")]:null===ae(r)?[new zt(e,r,'color expected, \\\"'+r+'\\\" found')]:[]},constants:Rt,enum:xn,filter:Cn,function:yn,layer:zn,object:dn,source:Bn,light:Nn,string:Rn,formatted:function(t){return 0===Rn(t).length?[]:mn(t)},resolvedImage:function(t){return 0===Rn(t).length?[]:mn(t)}};function Un(t){var e=t.value,r=t.valueSpec,n=t.styleSpec;return r.expression&&Kr(Bt(e))?yn(t):r.expression&&sn(Nt(e))?mn(t):r.type&&jn[r.type]?jn[r.type](t):dn(Ft({},t,{valueSpec:r.type?n[r.type]:r}))}function Vn(t){var e=t.value,r=t.key,n=Rn(t);return n.length||(-1===e.indexOf(\\\"{fontstack}\\\")&&n.push(new zt(r,e,'\\\"glyphs\\\" url must include a \\\"{fontstack}\\\" token')),-1===e.indexOf(\\\"{range}\\\")&&n.push(new zt(r,e,'\\\"glyphs\\\" url must include a \\\"{range}\\\" token'))),n}function Hn(t,e){void 0===e&&(e=Dt);var r=[];return r=r.concat(Un({key:\\\"\\\",value:t,valueSpec:e.$root,styleSpec:e,style:t,objectElementValidators:{glyphs:Vn,\\\"*\\\":function(){return[]}}})),t.constants&&(r=r.concat(Rt({key:\\\"constants\\\",value:t.constants,style:t,styleSpec:e}))),qn(r)}function qn(t){return[].concat(t).sort((function(t,e){return t.line-e.line}))}function Gn(t){return function(){for(var e=[],r=arguments.length;r--;)e[r]=arguments[r];return qn(t.apply(this,e))}}Hn.source=Gn(Bn),Hn.light=Gn(Nn),Hn.layer=Gn(zn),Hn.filter=Gn(Cn),Hn.paintProperty=Gn(In),Hn.layoutProperty=Gn(Dn);var Zn=Hn,Yn=Zn.light,Wn=Zn.paintProperty,Xn=Zn.layoutProperty;function Jn(t,e){var r=!1;if(e&&e.length)for(var n=0,i=e;n<i.length;n+=1){var a=i[n];t.fire(new Ot(new Error(a.message))),r=!0}return r}var Kn=Qn,$n=3;function Qn(t,e,r){var n=this.cells=[];if(t instanceof ArrayBuffer){this.arrayBuffer=t;var i=new Int32Array(this.arrayBuffer);t=i[0],e=i[1],r=i[2],this.d=e+2*r;for(var a=0;a<this.d*this.d;a++){var o=i[$n+a],s=i[$n+a+1];n.push(o===s?null:i.subarray(o,s))}var l=i[$n+n.length],u=i[$n+n.length+1];this.keys=i.subarray(l,u),this.bboxes=i.subarray(u),this.insert=this._insertReadonly}else{this.d=e+2*r;for(var c=0;c<this.d*this.d;c++)n.push([]);this.keys=[],this.bboxes=[]}this.n=e,this.extent=t,this.padding=r,this.scale=e/t,this.uid=0;var f=r/e*t;this.min=-f,this.max=t+f}Qn.prototype.insert=function(t,e,r,n,i){this._forEachCell(e,r,n,i,this._insertCell,this.uid++),this.keys.push(t),this.bboxes.push(e),this.bboxes.push(r),this.bboxes.push(n),this.bboxes.push(i)},Qn.prototype._insertReadonly=function(){throw\\\"Cannot insert into a GridIndex created from an ArrayBuffer.\\\"},Qn.prototype._insertCell=function(t,e,r,n,i,a){this.cells[i].push(a)},Qn.prototype.query=function(t,e,r,n,i){var a=this.min,o=this.max;if(t<=a&&e<=a&&o<=r&&o<=n&&!i)return Array.prototype.slice.call(this.keys);var s=[];return this._forEachCell(t,e,r,n,this._queryCell,s,{},i),s},Qn.prototype._queryCell=function(t,e,r,n,i,a,o,s){var l=this.cells[i];if(null!==l)for(var u=this.keys,c=this.bboxes,f=0;f<l.length;f++){var h=l[f];if(void 0===o[h]){var p=4*h;(s?s(c[p+0],c[p+1],c[p+2],c[p+3]):t<=c[p+2]&&e<=c[p+3]&&r>=c[p+0]&&n>=c[p+1])?(o[h]=!0,a.push(u[h])):o[h]=!1}}},Qn.prototype._forEachCell=function(t,e,r,n,i,a,o,s){for(var l=this._convertToCellCoord(t),u=this._convertToCellCoord(e),c=this._convertToCellCoord(r),f=this._convertToCellCoord(n),h=l;h<=c;h++)for(var p=u;p<=f;p++){var d=this.d*p+h;if((!s||s(this._convertFromCellCoord(h),this._convertFromCellCoord(p),this._convertFromCellCoord(h+1),this._convertFromCellCoord(p+1)))&&i.call(this,t,e,r,n,d,a,o,s))return}},Qn.prototype._convertFromCellCoord=function(t){return(t-this.padding)/this.scale},Qn.prototype._convertToCellCoord=function(t){return Math.max(0,Math.min(this.d-1,Math.floor(t*this.scale)+this.padding))},Qn.prototype.toArrayBuffer=function(){if(this.arrayBuffer)return this.arrayBuffer;for(var t=this.cells,e=$n+this.cells.length+1+1,r=0,n=0;n<this.cells.length;n++)r+=this.cells[n].length;var i=new Int32Array(e+r+this.keys.length+this.bboxes.length);i[0]=this.extent,i[1]=this.n,i[2]=this.padding;for(var a=e,o=0;o<t.length;o++){var s=t[o];i[$n+o]=a,i.set(s,a),a+=s.length}return i[$n+t.length]=a,i.set(this.keys,a),a+=this.keys.length,i[$n+t.length+1]=a,i.set(this.bboxes,a),a+=this.bboxes.length,i.buffer};var ti=self.ImageData,ei=self.ImageBitmap,ri={};function ni(t,e,r){void 0===r&&(r={}),Object.defineProperty(e,\\\"_classRegistryKey\\\",{value:t,writeable:!1}),ri[t]={klass:e,omit:r.omit||[],shallow:r.shallow||[]}}for(var ii in ni(\\\"Object\\\",Object),Kn.serialize=function(t,e){var r=t.toArrayBuffer();return e&&e.push(r),{buffer:r}},Kn.deserialize=function(t){return new Kn(t.buffer)},ni(\\\"Grid\\\",Kn),ni(\\\"Color\\\",oe),ni(\\\"Error\\\",Error),ni(\\\"ResolvedImage\\\",ce),ni(\\\"StylePropertyFunction\\\",hn),ni(\\\"StyleExpression\\\",on,{omit:[\\\"_evaluator\\\"]}),ni(\\\"ZoomDependentExpression\\\",cn),ni(\\\"ZoomConstantExpression\\\",un),ni(\\\"CompoundExpression\\\",Ae,{omit:[\\\"_evaluate\\\"]}),jr)jr[ii]._classRegistryKey||ni(\\\"Expression_\\\"+ii,jr[ii]);function ai(t){return t&&\\\"undefined\\\"!=typeof ArrayBuffer&&(t instanceof ArrayBuffer||t.constructor&&\\\"ArrayBuffer\\\"===t.constructor.name)}function oi(t){return ei&&t instanceof ei}function si(t,e){if(null==t||\\\"boolean\\\"==typeof t||\\\"number\\\"==typeof t||\\\"string\\\"==typeof t||t instanceof Boolean||t instanceof Number||t instanceof String||t instanceof Date||t instanceof RegExp)return t;if(ai(t)||oi(t))return e&&e.push(t),t;if(ArrayBuffer.isView(t)){var r=t;return e&&e.push(r.buffer),r}if(t instanceof ti)return e&&e.push(t.data.buffer),t;if(Array.isArray(t)){for(var n=[],i=0,a=t;i<a.length;i+=1){var o=a[i];n.push(si(o,e))}return n}if(\\\"object\\\"==typeof t){var s=t.constructor,l=s._classRegistryKey;if(!l)throw new Error(\\\"can't serialize object of unregistered class\\\");var u=s.serialize?s.serialize(t,e):{};if(!s.serialize){for(var c in t)if(t.hasOwnProperty(c)&&!(ri[l].omit.indexOf(c)>=0)){var f=t[c];u[c]=ri[l].shallow.indexOf(c)>=0?f:si(f,e)}t instanceof Error&&(u.message=t.message)}if(u.$name)throw new Error(\\\"$name property is reserved for worker serialization logic.\\\");return\\\"Object\\\"!==l&&(u.$name=l),u}throw new Error(\\\"can't serialize object of type \\\"+typeof t)}function li(t){if(null==t||\\\"boolean\\\"==typeof t||\\\"number\\\"==typeof t||\\\"string\\\"==typeof t||t instanceof Boolean||t instanceof Number||t instanceof String||t instanceof Date||t instanceof RegExp||ai(t)||oi(t)||ArrayBuffer.isView(t)||t instanceof ti)return t;if(Array.isArray(t))return t.map(li);if(\\\"object\\\"==typeof t){var e=t.$name||\\\"Object\\\",r=ri[e].klass;if(!r)throw new Error(\\\"can't deserialize unregistered class \\\"+e);if(r.deserialize)return r.deserialize(t);for(var n=Object.create(r.prototype),i=0,a=Object.keys(t);i<a.length;i+=1){var o=a[i];if(\\\"$name\\\"!==o){var s=t[o];n[o]=ri[e].shallow.indexOf(o)>=0?s:li(s)}}return n}throw new Error(\\\"can't deserialize object of type \\\"+typeof t)}var ui=function(){this.first=!0};ui.prototype.update=function(t,e){var r=Math.floor(t);return this.first?(this.first=!1,this.lastIntegerZoom=r,this.lastIntegerZoomTime=0,this.lastZoom=t,this.lastFloorZoom=r,!0):(this.lastFloorZoom>r?(this.lastIntegerZoom=r+1,this.lastIntegerZoomTime=e):this.lastFloorZoom<r&&(this.lastIntegerZoom=r,this.lastIntegerZoomTime=e),t!==this.lastZoom&&(this.lastZoom=t,this.lastFloorZoom=r,!0))};var ci={\\\"Latin-1 Supplement\\\":function(t){return t>=128&&t<=255},Arabic:function(t){return t>=1536&&t<=1791},\\\"Arabic Supplement\\\":function(t){return t>=1872&&t<=1919},\\\"Arabic Extended-A\\\":function(t){return t>=2208&&t<=2303},\\\"Hangul Jamo\\\":function(t){return t>=4352&&t<=4607},\\\"Unified Canadian Aboriginal Syllabics\\\":function(t){return t>=5120&&t<=5759},Khmer:function(t){return t>=6016&&t<=6143},\\\"Unified Canadian Aboriginal Syllabics Extended\\\":function(t){return t>=6320&&t<=6399},\\\"General Punctuation\\\":function(t){return t>=8192&&t<=8303},\\\"Letterlike Symbols\\\":function(t){return t>=8448&&t<=8527},\\\"Number Forms\\\":function(t){return t>=8528&&t<=8591},\\\"Miscellaneous Technical\\\":function(t){return t>=8960&&t<=9215},\\\"Control Pictures\\\":function(t){return t>=9216&&t<=9279},\\\"Optical Character Recognition\\\":function(t){return t>=9280&&t<=9311},\\\"Enclosed Alphanumerics\\\":function(t){return t>=9312&&t<=9471},\\\"Geometric Shapes\\\":function(t){return t>=9632&&t<=9727},\\\"Miscellaneous Symbols\\\":function(t){return t>=9728&&t<=9983},\\\"Miscellaneous Symbols and Arrows\\\":function(t){return t>=11008&&t<=11263},\\\"CJK Radicals Supplement\\\":function(t){return t>=11904&&t<=12031},\\\"Kangxi Radicals\\\":function(t){return t>=12032&&t<=12255},\\\"Ideographic Description Characters\\\":function(t){return t>=12272&&t<=12287},\\\"CJK Symbols and Punctuation\\\":function(t){return t>=12288&&t<=12351},Hiragana:function(t){return t>=12352&&t<=12447},Katakana:function(t){return t>=12448&&t<=12543},Bopomofo:function(t){return t>=12544&&t<=12591},\\\"Hangul Compatibility Jamo\\\":function(t){return t>=12592&&t<=12687},Kanbun:function(t){return t>=12688&&t<=12703},\\\"Bopomofo Extended\\\":function(t){return t>=12704&&t<=12735},\\\"CJK Strokes\\\":function(t){return t>=12736&&t<=12783},\\\"Katakana Phonetic Extensions\\\":function(t){return t>=12784&&t<=12799},\\\"Enclosed CJK Letters and Months\\\":function(t){return t>=12800&&t<=13055},\\\"CJK Compatibility\\\":function(t){return t>=13056&&t<=13311},\\\"CJK Unified Ideographs Extension A\\\":function(t){return t>=13312&&t<=19903},\\\"Yijing Hexagram Symbols\\\":function(t){return t>=19904&&t<=19967},\\\"CJK Unified Ideographs\\\":function(t){return t>=19968&&t<=40959},\\\"Yi Syllables\\\":function(t){return t>=40960&&t<=42127},\\\"Yi Radicals\\\":function(t){return t>=42128&&t<=42191},\\\"Hangul Jamo Extended-A\\\":function(t){return t>=43360&&t<=43391},\\\"Hangul Syllables\\\":function(t){return t>=44032&&t<=55215},\\\"Hangul Jamo Extended-B\\\":function(t){return t>=55216&&t<=55295},\\\"Private Use Area\\\":function(t){return t>=57344&&t<=63743},\\\"CJK Compatibility Ideographs\\\":function(t){return t>=63744&&t<=64255},\\\"Arabic Presentation Forms-A\\\":function(t){return t>=64336&&t<=65023},\\\"Vertical Forms\\\":function(t){return t>=65040&&t<=65055},\\\"CJK Compatibility Forms\\\":function(t){return t>=65072&&t<=65103},\\\"Small Form Variants\\\":function(t){return t>=65104&&t<=65135},\\\"Arabic Presentation Forms-B\\\":function(t){return t>=65136&&t<=65279},\\\"Halfwidth and Fullwidth Forms\\\":function(t){return t>=65280&&t<=65519}};function fi(t){for(var e=0,r=t;e<r.length;e+=1)if(hi(r[e].charCodeAt(0)))return!0;return!1}function hi(t){return!(746!==t&&747!==t&&(t<4352||!(ci[\\\"Bopomofo Extended\\\"](t)||ci.Bopomofo(t)||ci[\\\"CJK Compatibility Forms\\\"](t)&&!(t>=65097&&t<=65103)||ci[\\\"CJK Compatibility Ideographs\\\"](t)||ci[\\\"CJK Compatibility\\\"](t)||ci[\\\"CJK Radicals Supplement\\\"](t)||ci[\\\"CJK Strokes\\\"](t)||!(!ci[\\\"CJK Symbols and Punctuation\\\"](t)||t>=12296&&t<=12305||t>=12308&&t<=12319||12336===t)||ci[\\\"CJK Unified Ideographs Extension A\\\"](t)||ci[\\\"CJK Unified Ideographs\\\"](t)||ci[\\\"Enclosed CJK Letters and Months\\\"](t)||ci[\\\"Hangul Compatibility Jamo\\\"](t)||ci[\\\"Hangul Jamo Extended-A\\\"](t)||ci[\\\"Hangul Jamo Extended-B\\\"](t)||ci[\\\"Hangul Jamo\\\"](t)||ci[\\\"Hangul Syllables\\\"](t)||ci.Hiragana(t)||ci[\\\"Ideographic Description Characters\\\"](t)||ci.Kanbun(t)||ci[\\\"Kangxi Radicals\\\"](t)||ci[\\\"Katakana Phonetic Extensions\\\"](t)||ci.Katakana(t)&&12540!==t||!(!ci[\\\"Halfwidth and Fullwidth Forms\\\"](t)||65288===t||65289===t||65293===t||t>=65306&&t<=65310||65339===t||65341===t||65343===t||t>=65371&&t<=65503||65507===t||t>=65512&&t<=65519)||!(!ci[\\\"Small Form Variants\\\"](t)||t>=65112&&t<=65118||t>=65123&&t<=65126)||ci[\\\"Unified Canadian Aboriginal Syllabics\\\"](t)||ci[\\\"Unified Canadian Aboriginal Syllabics Extended\\\"](t)||ci[\\\"Vertical Forms\\\"](t)||ci[\\\"Yijing Hexagram Symbols\\\"](t)||ci[\\\"Yi Syllables\\\"](t)||ci[\\\"Yi Radicals\\\"](t))))}function pi(t){return!(hi(t)||function(t){return!!(ci[\\\"Latin-1 Supplement\\\"](t)&&(167===t||169===t||174===t||177===t||188===t||189===t||190===t||215===t||247===t)||ci[\\\"General Punctuation\\\"](t)&&(8214===t||8224===t||8225===t||8240===t||8241===t||8251===t||8252===t||8258===t||8263===t||8264===t||8265===t||8273===t)||ci[\\\"Letterlike Symbols\\\"](t)||ci[\\\"Number Forms\\\"](t)||ci[\\\"Miscellaneous Technical\\\"](t)&&(t>=8960&&t<=8967||t>=8972&&t<=8991||t>=8996&&t<=9e3||9003===t||t>=9085&&t<=9114||t>=9150&&t<=9165||9167===t||t>=9169&&t<=9179||t>=9186&&t<=9215)||ci[\\\"Control Pictures\\\"](t)&&9251!==t||ci[\\\"Optical Character Recognition\\\"](t)||ci[\\\"Enclosed Alphanumerics\\\"](t)||ci[\\\"Geometric Shapes\\\"](t)||ci[\\\"Miscellaneous Symbols\\\"](t)&&!(t>=9754&&t<=9759)||ci[\\\"Miscellaneous Symbols and Arrows\\\"](t)&&(t>=11026&&t<=11055||t>=11088&&t<=11097||t>=11192&&t<=11243)||ci[\\\"CJK Symbols and Punctuation\\\"](t)||ci.Katakana(t)||ci[\\\"Private Use Area\\\"](t)||ci[\\\"CJK Compatibility Forms\\\"](t)||ci[\\\"Small Form Variants\\\"](t)||ci[\\\"Halfwidth and Fullwidth Forms\\\"](t)||8734===t||8756===t||8757===t||t>=9984&&t<=10087||t>=10102&&t<=10131||65532===t||65533===t)}(t))}function di(t){return ci.Arabic(t)||ci[\\\"Arabic Supplement\\\"](t)||ci[\\\"Arabic Extended-A\\\"](t)||ci[\\\"Arabic Presentation Forms-A\\\"](t)||ci[\\\"Arabic Presentation Forms-B\\\"](t)}function vi(t){return t>=1424&&t<=2303||ci[\\\"Arabic Presentation Forms-A\\\"](t)||ci[\\\"Arabic Presentation Forms-B\\\"](t)}function gi(t,e){return!(!e&&vi(t)||t>=2304&&t<=3583||t>=3840&&t<=4255||ci.Khmer(t))}function yi(t){for(var e=0,r=t;e<r.length;e+=1)if(vi(r[e].charCodeAt(0)))return!0;return!1}var mi=\\\"deferred\\\",xi=\\\"loading\\\",bi=\\\"loaded\\\",_i=\\\"error\\\",wi=null,Ti=\\\"unavailable\\\",ki=null,Ai=function(t){t&&\\\"string\\\"==typeof t&&t.indexOf(\\\"NetworkError\\\")>-1&&(Ti=_i),wi&&wi(t)};function Mi(){Si.fire(new Pt(\\\"pluginStateChange\\\",{pluginStatus:Ti,pluginURL:ki}))}var Si=new It,Ei=function(){return Ti},Li=function(){if(Ti!==mi||!ki)throw new Error(\\\"rtl-text-plugin cannot be downloaded unless a pluginURL is specified\\\");Ti=xi,Mi(),ki&&kt({url:ki},(function(t){t?Ai(t):(Ti=bi,Mi())}))},Ci={applyArabicShaping:null,processBidirectionalText:null,processStyledBidirectionalText:null,isLoaded:function(){return Ti===bi||null!=Ci.applyArabicShaping},isLoading:function(){return Ti===xi},setState:function(t){Ti=t.pluginStatus,ki=t.pluginURL},isParsed:function(){return null!=Ci.applyArabicShaping&&null!=Ci.processBidirectionalText&&null!=Ci.processStyledBidirectionalText},getPluginURL:function(){return ki}},Pi=function(t,e){this.zoom=t,e?(this.now=e.now,this.fadeDuration=e.fadeDuration,this.zoomHistory=e.zoomHistory,this.transition=e.transition):(this.now=0,this.fadeDuration=0,this.zoomHistory=new ui,this.transition={})};Pi.prototype.isSupportedScript=function(t){return function(t,e){for(var r=0,n=t;r<n.length;r+=1)if(!gi(n[r].charCodeAt(0),e))return!1;return!0}(t,Ci.isLoaded())},Pi.prototype.crossFadingFactor=function(){return 0===this.fadeDuration?1:Math.min((this.now-this.zoomHistory.lastIntegerZoomTime)/this.fadeDuration,1)},Pi.prototype.getCrossfadeParameters=function(){var t=this.zoom,e=t-Math.floor(t),r=this.crossFadingFactor();return t>this.zoomHistory.lastIntegerZoom?{fromScale:2,toScale:1,t:e+(1-e)*r}:{fromScale:.5,toScale:1,t:1-(1-r)*e}};var Oi=function(t,e){this.property=t,this.value=e,this.expression=function(t,e){if(Kr(t))return new hn(t,e);if(sn(t)){var r=fn(t,e);if(\\\"error\\\"===r.result)throw new Error(r.value.map((function(t){return t.key+\\\": \\\"+t.message})).join(\\\", \\\"));return r.value}var n=t;return\\\"string\\\"==typeof t&&\\\"color\\\"===e.type&&(n=oe.parse(t)),{kind:\\\"constant\\\",evaluate:function(){return n}}}(void 0===e?t.specification.default:e,t.specification)};Oi.prototype.isDataDriven=function(){return\\\"source\\\"===this.expression.kind||\\\"composite\\\"===this.expression.kind},Oi.prototype.possiblyEvaluate=function(t,e,r){return this.property.possiblyEvaluate(this,t,e,r)};var Ii=function(t){this.property=t,this.value=new Oi(t,void 0)};Ii.prototype.transitioned=function(t,e){return new zi(this.property,this.value,e,f({},t.transition,this.transition),t.now)},Ii.prototype.untransitioned=function(){return new zi(this.property,this.value,null,{},0)};var Di=function(t){this._properties=t,this._values=Object.create(t.defaultTransitionablePropertyValues)};Di.prototype.getValue=function(t){return b(this._values[t].value.value)},Di.prototype.setValue=function(t,e){this._values.hasOwnProperty(t)||(this._values[t]=new Ii(this._values[t].property)),this._values[t].value=new Oi(this._values[t].property,null===e?void 0:b(e))},Di.prototype.getTransition=function(t){return b(this._values[t].transition)},Di.prototype.setTransition=function(t,e){this._values.hasOwnProperty(t)||(this._values[t]=new Ii(this._values[t].property)),this._values[t].transition=b(e)||void 0},Di.prototype.serialize=function(){for(var t={},e=0,r=Object.keys(this._values);e<r.length;e+=1){var n=r[e],i=this.getValue(n);void 0!==i&&(t[n]=i);var a=this.getTransition(n);void 0!==a&&(t[n+\\\"-transition\\\"]=a)}return t},Di.prototype.transitioned=function(t,e){for(var r=new Ri(this._properties),n=0,i=Object.keys(this._values);n<i.length;n+=1){var a=i[n];r._values[a]=this._values[a].transitioned(t,e._values[a])}return r},Di.prototype.untransitioned=function(){for(var t=new Ri(this._properties),e=0,r=Object.keys(this._values);e<r.length;e+=1){var n=r[e];t._values[n]=this._values[n].untransitioned()}return t};var zi=function(t,e,r,n,i){this.property=t,this.value=e,this.begin=i+n.delay||0,this.end=this.begin+n.duration||0,t.specification.transition&&(n.delay||n.duration)&&(this.prior=r)};zi.prototype.possiblyEvaluate=function(t,e,r){var n=t.now||0,i=this.value.possiblyEvaluate(t,e,r),a=this.prior;if(a){if(n>this.end)return this.prior=null,i;if(this.value.isDataDriven())return this.prior=null,i;if(n<this.begin)return a.possiblyEvaluate(t,e,r);var o=(n-this.begin)/(this.end-this.begin);return this.property.interpolate(a.possiblyEvaluate(t,e,r),i,function(t){if(t<=0)return 0;if(t>=1)return 1;var e=t*t,r=e*t;return 4*(t<.5?r:3*(t-e)+r-.75)}(o))}return i};var Ri=function(t){this._properties=t,this._values=Object.create(t.defaultTransitioningPropertyValues)};Ri.prototype.possiblyEvaluate=function(t,e,r){for(var n=new Ni(this._properties),i=0,a=Object.keys(this._values);i<a.length;i+=1){var o=a[i];n._values[o]=this._values[o].possiblyEvaluate(t,e,r)}return n},Ri.prototype.hasTransition=function(){for(var t=0,e=Object.keys(this._values);t<e.length;t+=1){var r=e[t];if(this._values[r].prior)return!0}return!1};var Fi=function(t){this._properties=t,this._values=Object.create(t.defaultPropertyValues)};Fi.prototype.getValue=function(t){return b(this._values[t].value)},Fi.prototype.setValue=function(t,e){this._values[t]=new Oi(this._values[t].property,null===e?void 0:b(e))},Fi.prototype.serialize=function(){for(var t={},e=0,r=Object.keys(this._values);e<r.length;e+=1){var n=r[e],i=this.getValue(n);void 0!==i&&(t[n]=i)}return t},Fi.prototype.possiblyEvaluate=function(t,e,r){for(var n=new Ni(this._properties),i=0,a=Object.keys(this._values);i<a.length;i+=1){var o=a[i];n._values[o]=this._values[o].possiblyEvaluate(t,e,r)}return n};var Bi=function(t,e,r){this.property=t,this.value=e,this.parameters=r};Bi.prototype.isConstant=function(){return\\\"constant\\\"===this.value.kind},Bi.prototype.constantOr=function(t){return\\\"constant\\\"===this.value.kind?this.value.value:t},Bi.prototype.evaluate=function(t,e,r,n){return this.property.evaluate(this.value,this.parameters,t,e,r,n)};var Ni=function(t){this._properties=t,this._values=Object.create(t.defaultPossiblyEvaluatedValues)};Ni.prototype.get=function(t){return this._values[t]};var ji=function(t){this.specification=t};ji.prototype.possiblyEvaluate=function(t,e){return t.expression.evaluate(e)},ji.prototype.interpolate=function(t,e,r){var n=Qe[this.specification.type];return n?n(t,e,r):t};var Ui=function(t,e){this.specification=t,this.overrides=e};Ui.prototype.possiblyEvaluate=function(t,e,r,n){return\\\"constant\\\"===t.expression.kind||\\\"camera\\\"===t.expression.kind?new Bi(this,{kind:\\\"constant\\\",value:t.expression.evaluate(e,null,{},r,n)},e):new Bi(this,t.expression,e)},Ui.prototype.interpolate=function(t,e,r){if(\\\"constant\\\"!==t.value.kind||\\\"constant\\\"!==e.value.kind)return t;if(void 0===t.value.value||void 0===e.value.value)return new Bi(this,{kind:\\\"constant\\\",value:void 0},t.parameters);var n=Qe[this.specification.type];return n?new Bi(this,{kind:\\\"constant\\\",value:n(t.value.value,e.value.value,r)},t.parameters):t},Ui.prototype.evaluate=function(t,e,r,n,i,a){return\\\"constant\\\"===t.kind?t.value:t.evaluate(e,r,n,i,a)};var Vi=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.possiblyEvaluate=function(t,e,r,n){if(void 0===t.value)return new Bi(this,{kind:\\\"constant\\\",value:void 0},e);if(\\\"constant\\\"===t.expression.kind){var i=t.expression.evaluate(e,null,{},r,n),a=\\\"resolvedImage\\\"===t.property.specification.type&&\\\"string\\\"!=typeof i?i.name:i,o=this._calculate(a,a,a,e);return new Bi(this,{kind:\\\"constant\\\",value:o},e)}if(\\\"camera\\\"===t.expression.kind){var s=this._calculate(t.expression.evaluate({zoom:e.zoom-1}),t.expression.evaluate({zoom:e.zoom}),t.expression.evaluate({zoom:e.zoom+1}),e);return new Bi(this,{kind:\\\"constant\\\",value:s},e)}return new Bi(this,t.expression,e)},e.prototype.evaluate=function(t,e,r,n,i,a){if(\\\"source\\\"===t.kind){var o=t.evaluate(e,r,n,i,a);return this._calculate(o,o,o,e)}return\\\"composite\\\"===t.kind?this._calculate(t.evaluate({zoom:Math.floor(e.zoom)-1},r,n),t.evaluate({zoom:Math.floor(e.zoom)},r,n),t.evaluate({zoom:Math.floor(e.zoom)+1},r,n),e):t.value},e.prototype._calculate=function(t,e,r,n){return n.zoom>n.zoomHistory.lastIntegerZoom?{from:t,to:e}:{from:r,to:e}},e.prototype.interpolate=function(t){return t},e}(Ui),Hi=function(t){this.specification=t};Hi.prototype.possiblyEvaluate=function(t,e,r,n){if(void 0!==t.value){if(\\\"constant\\\"===t.expression.kind){var i=t.expression.evaluate(e,null,{},r,n);return this._calculate(i,i,i,e)}return this._calculate(t.expression.evaluate(new Pi(Math.floor(e.zoom-1),e)),t.expression.evaluate(new Pi(Math.floor(e.zoom),e)),t.expression.evaluate(new Pi(Math.floor(e.zoom+1),e)),e)}},Hi.prototype._calculate=function(t,e,r,n){return n.zoom>n.zoomHistory.lastIntegerZoom?{from:t,to:e}:{from:r,to:e}},Hi.prototype.interpolate=function(t){return t};var qi=function(t){this.specification=t};qi.prototype.possiblyEvaluate=function(t,e,r,n){return!!t.expression.evaluate(e,null,{},r,n)},qi.prototype.interpolate=function(){return!1};var Gi=function(t){for(var e in this.properties=t,this.defaultPropertyValues={},this.defaultTransitionablePropertyValues={},this.defaultTransitioningPropertyValues={},this.defaultPossiblyEvaluatedValues={},this.overridableProperties=[],t){var r=t[e];r.specification.overridable&&this.overridableProperties.push(e);var n=this.defaultPropertyValues[e]=new Oi(r,void 0),i=this.defaultTransitionablePropertyValues[e]=new Ii(r);this.defaultTransitioningPropertyValues[e]=i.untransitioned(),this.defaultPossiblyEvaluatedValues[e]=n.possiblyEvaluate({})}};ni(\\\"DataDrivenProperty\\\",Ui),ni(\\\"DataConstantProperty\\\",ji),ni(\\\"CrossFadedDataDrivenProperty\\\",Vi),ni(\\\"CrossFadedProperty\\\",Hi),ni(\\\"ColorRampProperty\\\",qi);var Zi=\\\"-transition\\\",Yi=function(t){function e(e,r){if(t.call(this),this.id=e.id,this.type=e.type,this._featureFilter={filter:function(){return!0},needGeometry:!1},\\\"custom\\\"!==e.type&&(this.metadata=e.metadata,this.minzoom=e.minzoom,this.maxzoom=e.maxzoom,\\\"background\\\"!==e.type&&(this.source=e.source,this.sourceLayer=e[\\\"source-layer\\\"],this.filter=e.filter),r.layout&&(this._unevaluatedLayout=new Fi(r.layout)),r.paint)){for(var n in this._transitionablePaint=new Di(r.paint),e.paint)this.setPaintProperty(n,e.paint[n],{validate:!1});for(var i in e.layout)this.setLayoutProperty(i,e.layout[i],{validate:!1});this._transitioningPaint=this._transitionablePaint.untransitioned(),this.paint=new Ni(r.paint)}}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.getCrossfadeParameters=function(){return this._crossfadeParameters},e.prototype.getLayoutProperty=function(t){return\\\"visibility\\\"===t?this.visibility:this._unevaluatedLayout.getValue(t)},e.prototype.setLayoutProperty=function(t,e,r){if(void 0===r&&(r={}),null!=e){var n=\\\"layers.\\\"+this.id+\\\".layout.\\\"+t;if(this._validate(Xn,n,t,e,r))return}\\\"visibility\\\"!==t?this._unevaluatedLayout.setValue(t,e):this.visibility=e},e.prototype.getPaintProperty=function(t){return y(t,Zi)?this._transitionablePaint.getTransition(t.slice(0,-11)):this._transitionablePaint.getValue(t)},e.prototype.setPaintProperty=function(t,e,r){if(void 0===r&&(r={}),null!=e){var n=\\\"layers.\\\"+this.id+\\\".paint.\\\"+t;if(this._validate(Wn,n,t,e,r))return!1}if(y(t,Zi))return this._transitionablePaint.setTransition(t.slice(0,-11),e||void 0),!1;var i=this._transitionablePaint._values[t],a=\\\"cross-faded-data-driven\\\"===i.property.specification[\\\"property-type\\\"],o=i.value.isDataDriven(),s=i.value;this._transitionablePaint.setValue(t,e),this._handleSpecialPaintPropertyUpdate(t);var l=this._transitionablePaint._values[t].value;return l.isDataDriven()||o||a||this._handleOverridablePaintPropertyUpdate(t,s,l)},e.prototype._handleSpecialPaintPropertyUpdate=function(t){},e.prototype._handleOverridablePaintPropertyUpdate=function(t,e,r){return!1},e.prototype.isHidden=function(t){return!!(this.minzoom&&t<this.minzoom)||!!(this.maxzoom&&t>=this.maxzoom)||\\\"none\\\"===this.visibility},e.prototype.updateTransitions=function(t){this._transitioningPaint=this._transitionablePaint.transitioned(t,this._transitioningPaint)},e.prototype.hasTransition=function(){return this._transitioningPaint.hasTransition()},e.prototype.recalculate=function(t,e){t.getCrossfadeParameters&&(this._crossfadeParameters=t.getCrossfadeParameters()),this._unevaluatedLayout&&(this.layout=this._unevaluatedLayout.possiblyEvaluate(t,void 0,e)),this.paint=this._transitioningPaint.possiblyEvaluate(t,void 0,e)},e.prototype.serialize=function(){var t={id:this.id,type:this.type,source:this.source,\\\"source-layer\\\":this.sourceLayer,metadata:this.metadata,minzoom:this.minzoom,maxzoom:this.maxzoom,filter:this.filter,layout:this._unevaluatedLayout&&this._unevaluatedLayout.serialize(),paint:this._transitionablePaint&&this._transitionablePaint.serialize()};return this.visibility&&(t.layout=t.layout||{},t.layout.visibility=this.visibility),x(t,(function(t,e){return!(void 0===t||\\\"layout\\\"===e&&!Object.keys(t).length||\\\"paint\\\"===e&&!Object.keys(t).length)}))},e.prototype._validate=function(t,e,r,n,i){return void 0===i&&(i={}),(!i||!1!==i.validate)&&Jn(this,t.call(Zn,{key:e,layerType:this.type,objectKey:r,value:n,styleSpec:Dt,style:{glyphs:!0,sprite:!0}}))},e.prototype.is3D=function(){return!1},e.prototype.isTileClipped=function(){return!1},e.prototype.hasOffscreenPass=function(){return!1},e.prototype.resize=function(){},e.prototype.isStateDependent=function(){for(var t in this.paint._values){var e=this.paint.get(t);if(e instanceof Bi&&Yr(e.property.specification)&&(\\\"source\\\"===e.value.kind||\\\"composite\\\"===e.value.kind)&&e.value.isStateDependent)return!0}return!1},e}(It),Wi={Int8:Int8Array,Uint8:Uint8Array,Int16:Int16Array,Uint16:Uint16Array,Int32:Int32Array,Uint32:Uint32Array,Float32:Float32Array},Xi=function(t,e){this._structArray=t,this._pos1=e*this.size,this._pos2=this._pos1/2,this._pos4=this._pos1/4,this._pos8=this._pos1/8},Ji=function(){this.isTransferred=!1,this.capacity=-1,this.resize(0)};function Ki(t,e){void 0===e&&(e=1);var r=0,n=0;return{members:t.map((function(t){var i,a=(i=t.type,Wi[i].BYTES_PER_ELEMENT),o=r=$i(r,Math.max(e,a)),s=t.components||1;return n=Math.max(n,a),r+=a*s,{name:t.name,type:t.type,components:s,offset:o}})),size:$i(r,Math.max(n,e)),alignment:e}}function $i(t,e){return Math.ceil(t/e)*e}Ji.serialize=function(t,e){return t._trim(),e&&(t.isTransferred=!0,e.push(t.arrayBuffer)),{length:t.length,arrayBuffer:t.arrayBuffer}},Ji.deserialize=function(t){var e=Object.create(this.prototype);return e.arrayBuffer=t.arrayBuffer,e.length=t.length,e.capacity=t.arrayBuffer.byteLength/e.bytesPerElement,e._refreshViews(),e},Ji.prototype._trim=function(){this.length!==this.capacity&&(this.capacity=this.length,this.arrayBuffer=this.arrayBuffer.slice(0,this.length*this.bytesPerElement),this._refreshViews())},Ji.prototype.clear=function(){this.length=0},Ji.prototype.resize=function(t){this.reserve(t),this.length=t},Ji.prototype.reserve=function(t){if(t>this.capacity){this.capacity=Math.max(t,Math.floor(5*this.capacity),128),this.arrayBuffer=new ArrayBuffer(this.capacity*this.bytesPerElement);var e=this.uint8;this._refreshViews(),e&&this.uint8.set(e)}},Ji.prototype._refreshViews=function(){throw new Error(\\\"_refreshViews() must be implemented by each concrete StructArray layout\\\")};var Qi=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype._refreshViews=function(){this.uint8=new Uint8Array(this.arrayBuffer),this.int16=new Int16Array(this.arrayBuffer)},e.prototype.emplaceBack=function(t,e){var r=this.length;return this.resize(r+1),this.emplace(r,t,e)},e.prototype.emplace=function(t,e,r){var n=2*t;return this.int16[n+0]=e,this.int16[n+1]=r,t},e}(Ji);Qi.prototype.bytesPerElement=4,ni(\\\"StructArrayLayout2i4\\\",Qi);var ta=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype._refreshViews=function(){this.uint8=new Uint8Array(this.arrayBuffer),this.int16=new Int16Array(this.arrayBuffer)},e.prototype.emplaceBack=function(t,e,r,n){var i=this.length;return this.resize(i+1),this.emplace(i,t,e,r,n)},e.prototype.emplace=function(t,e,r,n,i){var a=4*t;return this.int16[a+0]=e,this.int16[a+1]=r,this.int16[a+2]=n,this.int16[a+3]=i,t},e}(Ji);ta.prototype.bytesPerElement=8,ni(\\\"StructArrayLayout4i8\\\",ta);var ea=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype._refreshViews=function(){this.uint8=new Uint8Array(this.arrayBuffer),this.int16=new Int16Array(this.arrayBuffer)},e.prototype.emplaceBack=function(t,e,r,n,i,a){var o=this.length;return this.resize(o+1),this.emplace(o,t,e,r,n,i,a)},e.prototype.emplace=function(t,e,r,n,i,a,o){var s=6*t;return this.int16[s+0]=e,this.int16[s+1]=r,this.int16[s+2]=n,this.int16[s+3]=i,this.int16[s+4]=a,this.int16[s+5]=o,t},e}(Ji);ea.prototype.bytesPerElement=12,ni(\\\"StructArrayLayout2i4i12\\\",ea);var ra=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype._refreshViews=function(){this.uint8=new Uint8Array(this.arrayBuffer),this.int16=new Int16Array(this.arrayBuffer)},e.prototype.emplaceBack=function(t,e,r,n,i,a){var o=this.length;return this.resize(o+1),this.emplace(o,t,e,r,n,i,a)},e.prototype.emplace=function(t,e,r,n,i,a,o){var s=4*t,l=8*t;return this.int16[s+0]=e,this.int16[s+1]=r,this.uint8[l+4]=n,this.uint8[l+5]=i,this.uint8[l+6]=a,this.uint8[l+7]=o,t},e}(Ji);ra.prototype.bytesPerElement=8,ni(\\\"StructArrayLayout2i4ub8\\\",ra);var na=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype._refreshViews=function(){this.uint8=new Uint8Array(this.arrayBuffer),this.uint16=new Uint16Array(this.arrayBuffer)},e.prototype.emplaceBack=function(t,e,r,n,i,a,o,s,l,u){var c=this.length;return this.resize(c+1),this.emplace(c,t,e,r,n,i,a,o,s,l,u)},e.prototype.emplace=function(t,e,r,n,i,a,o,s,l,u,c){var f=9*t,h=18*t;return this.uint16[f+0]=e,this.uint16[f+1]=r,this.uint16[f+2]=n,this.uint16[f+3]=i,this.uint16[f+4]=a,this.uint16[f+5]=o,this.uint16[f+6]=s,this.uint16[f+7]=l,this.uint8[h+16]=u,this.uint8[h+17]=c,t},e}(Ji);na.prototype.bytesPerElement=18,ni(\\\"StructArrayLayout8ui2ub18\\\",na);var ia=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype._refreshViews=function(){this.uint8=new Uint8Array(this.arrayBuffer),this.int16=new Int16Array(this.arrayBuffer),this.uint16=new Uint16Array(this.arrayBuffer)},e.prototype.emplaceBack=function(t,e,r,n,i,a,o,s,l,u,c,f){var h=this.length;return this.resize(h+1),this.emplace(h,t,e,r,n,i,a,o,s,l,u,c,f)},e.prototype.emplace=function(t,e,r,n,i,a,o,s,l,u,c,f,h){var p=12*t;return this.int16[p+0]=e,this.int16[p+1]=r,this.int16[p+2]=n,this.int16[p+3]=i,this.uint16[p+4]=a,this.uint16[p+5]=o,this.uint16[p+6]=s,this.uint16[p+7]=l,this.int16[p+8]=u,this.int16[p+9]=c,this.int16[p+10]=f,this.int16[p+11]=h,t},e}(Ji);ia.prototype.bytesPerElement=24,ni(\\\"StructArrayLayout4i4ui4i24\\\",ia);var aa=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype._refreshViews=function(){this.uint8=new Uint8Array(this.arrayBuffer),this.float32=new Float32Array(this.arrayBuffer)},e.prototype.emplaceBack=function(t,e,r){var n=this.length;return this.resize(n+1),this.emplace(n,t,e,r)},e.prototype.emplace=function(t,e,r,n){var i=3*t;return this.float32[i+0]=e,this.float32[i+1]=r,this.float32[i+2]=n,t},e}(Ji);aa.prototype.bytesPerElement=12,ni(\\\"StructArrayLayout3f12\\\",aa);var oa=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype._refreshViews=function(){this.uint8=new Uint8Array(this.arrayBuffer),this.uint32=new Uint32Array(this.arrayBuffer)},e.prototype.emplaceBack=function(t){var e=this.length;return this.resize(e+1),this.emplace(e,t)},e.prototype.emplace=function(t,e){var r=1*t;return this.uint32[r+0]=e,t},e}(Ji);oa.prototype.bytesPerElement=4,ni(\\\"StructArrayLayout1ul4\\\",oa);var sa=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype._refreshViews=function(){this.uint8=new Uint8Array(this.arrayBuffer),this.int16=new Int16Array(this.arrayBuffer),this.uint32=new Uint32Array(this.arrayBuffer),this.uint16=new Uint16Array(this.arrayBuffer)},e.prototype.emplaceBack=function(t,e,r,n,i,a,o,s,l){var u=this.length;return this.resize(u+1),this.emplace(u,t,e,r,n,i,a,o,s,l)},e.prototype.emplace=function(t,e,r,n,i,a,o,s,l,u){var c=10*t,f=5*t;return this.int16[c+0]=e,this.int16[c+1]=r,this.int16[c+2]=n,this.int16[c+3]=i,this.int16[c+4]=a,this.int16[c+5]=o,this.uint32[f+3]=s,this.uint16[c+8]=l,this.uint16[c+9]=u,t},e}(Ji);sa.prototype.bytesPerElement=20,ni(\\\"StructArrayLayout6i1ul2ui20\\\",sa);var la=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype._refreshViews=function(){this.uint8=new Uint8Array(this.arrayBuffer),this.int16=new Int16Array(this.arrayBuffer)},e.prototype.emplaceBack=function(t,e,r,n,i,a){var o=this.length;return this.resize(o+1),this.emplace(o,t,e,r,n,i,a)},e.prototype.emplace=function(t,e,r,n,i,a,o){var s=6*t;return this.int16[s+0]=e,this.int16[s+1]=r,this.int16[s+2]=n,this.int16[s+3]=i,this.int16[s+4]=a,this.int16[s+5]=o,t},e}(Ji);la.prototype.bytesPerElement=12,ni(\\\"StructArrayLayout2i2i2i12\\\",la);var ua=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype._refreshViews=function(){this.uint8=new Uint8Array(this.arrayBuffer),this.float32=new Float32Array(this.arrayBuffer),this.int16=new Int16Array(this.arrayBuffer)},e.prototype.emplaceBack=function(t,e,r,n,i){var a=this.length;return this.resize(a+1),this.emplace(a,t,e,r,n,i)},e.prototype.emplace=function(t,e,r,n,i,a){var o=4*t,s=8*t;return this.float32[o+0]=e,this.float32[o+1]=r,this.float32[o+2]=n,this.int16[s+6]=i,this.int16[s+7]=a,t},e}(Ji);ua.prototype.bytesPerElement=16,ni(\\\"StructArrayLayout2f1f2i16\\\",ua);var ca=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype._refreshViews=function(){this.uint8=new Uint8Array(this.arrayBuffer),this.float32=new Float32Array(this.arrayBuffer)},e.prototype.emplaceBack=function(t,e,r,n){var i=this.length;return this.resize(i+1),this.emplace(i,t,e,r,n)},e.prototype.emplace=function(t,e,r,n,i){var a=12*t,o=3*t;return this.uint8[a+0]=e,this.uint8[a+1]=r,this.float32[o+1]=n,this.float32[o+2]=i,t},e}(Ji);ca.prototype.bytesPerElement=12,ni(\\\"StructArrayLayout2ub2f12\\\",ca);var fa=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype._refreshViews=function(){this.uint8=new Uint8Array(this.arrayBuffer),this.uint16=new Uint16Array(this.arrayBuffer)},e.prototype.emplaceBack=function(t,e,r){var n=this.length;return this.resize(n+1),this.emplace(n,t,e,r)},e.prototype.emplace=function(t,e,r,n){var i=3*t;return this.uint16[i+0]=e,this.uint16[i+1]=r,this.uint16[i+2]=n,t},e}(Ji);fa.prototype.bytesPerElement=6,ni(\\\"StructArrayLayout3ui6\\\",fa);var ha=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype._refreshViews=function(){this.uint8=new Uint8Array(this.arrayBuffer),this.int16=new Int16Array(this.arrayBuffer),this.uint16=new Uint16Array(this.arrayBuffer),this.uint32=new Uint32Array(this.arrayBuffer),this.float32=new Float32Array(this.arrayBuffer)},e.prototype.emplaceBack=function(t,e,r,n,i,a,o,s,l,u,c,f,h,p,d,v,g){var y=this.length;return this.resize(y+1),this.emplace(y,t,e,r,n,i,a,o,s,l,u,c,f,h,p,d,v,g)},e.prototype.emplace=function(t,e,r,n,i,a,o,s,l,u,c,f,h,p,d,v,g,y){var m=24*t,x=12*t,b=48*t;return this.int16[m+0]=e,this.int16[m+1]=r,this.uint16[m+2]=n,this.uint16[m+3]=i,this.uint32[x+2]=a,this.uint32[x+3]=o,this.uint32[x+4]=s,this.uint16[m+10]=l,this.uint16[m+11]=u,this.uint16[m+12]=c,this.float32[x+7]=f,this.float32[x+8]=h,this.uint8[b+36]=p,this.uint8[b+37]=d,this.uint8[b+38]=v,this.uint32[x+10]=g,this.int16[m+22]=y,t},e}(Ji);ha.prototype.bytesPerElement=48,ni(\\\"StructArrayLayout2i2ui3ul3ui2f3ub1ul1i48\\\",ha);var pa=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype._refreshViews=function(){this.uint8=new Uint8Array(this.arrayBuffer),this.int16=new Int16Array(this.arrayBuffer),this.uint16=new Uint16Array(this.arrayBuffer),this.uint32=new Uint32Array(this.arrayBuffer),this.float32=new Float32Array(this.arrayBuffer)},e.prototype.emplaceBack=function(t,e,r,n,i,a,o,s,l,u,c,f,h,p,d,v,g,y,m,x,b,_,w,T,k,A,M,S){var E=this.length;return this.resize(E+1),this.emplace(E,t,e,r,n,i,a,o,s,l,u,c,f,h,p,d,v,g,y,m,x,b,_,w,T,k,A,M,S)},e.prototype.emplace=function(t,e,r,n,i,a,o,s,l,u,c,f,h,p,d,v,g,y,m,x,b,_,w,T,k,A,M,S,E){var L=34*t,C=17*t;return this.int16[L+0]=e,this.int16[L+1]=r,this.int16[L+2]=n,this.int16[L+3]=i,this.int16[L+4]=a,this.int16[L+5]=o,this.int16[L+6]=s,this.int16[L+7]=l,this.uint16[L+8]=u,this.uint16[L+9]=c,this.uint16[L+10]=f,this.uint16[L+11]=h,this.uint16[L+12]=p,this.uint16[L+13]=d,this.uint16[L+14]=v,this.uint16[L+15]=g,this.uint16[L+16]=y,this.uint16[L+17]=m,this.uint16[L+18]=x,this.uint16[L+19]=b,this.uint16[L+20]=_,this.uint16[L+21]=w,this.uint16[L+22]=T,this.uint32[C+12]=k,this.float32[C+13]=A,this.float32[C+14]=M,this.float32[C+15]=S,this.float32[C+16]=E,t},e}(Ji);pa.prototype.bytesPerElement=68,ni(\\\"StructArrayLayout8i15ui1ul4f68\\\",pa);var da=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype._refreshViews=function(){this.uint8=new Uint8Array(this.arrayBuffer),this.float32=new Float32Array(this.arrayBuffer)},e.prototype.emplaceBack=function(t){var e=this.length;return this.resize(e+1),this.emplace(e,t)},e.prototype.emplace=function(t,e){var r=1*t;return this.float32[r+0]=e,t},e}(Ji);da.prototype.bytesPerElement=4,ni(\\\"StructArrayLayout1f4\\\",da);var va=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype._refreshViews=function(){this.uint8=new Uint8Array(this.arrayBuffer),this.int16=new Int16Array(this.arrayBuffer)},e.prototype.emplaceBack=function(t,e,r){var n=this.length;return this.resize(n+1),this.emplace(n,t,e,r)},e.prototype.emplace=function(t,e,r,n){var i=3*t;return this.int16[i+0]=e,this.int16[i+1]=r,this.int16[i+2]=n,t},e}(Ji);va.prototype.bytesPerElement=6,ni(\\\"StructArrayLayout3i6\\\",va);var ga=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype._refreshViews=function(){this.uint8=new Uint8Array(this.arrayBuffer),this.uint32=new Uint32Array(this.arrayBuffer),this.uint16=new Uint16Array(this.arrayBuffer)},e.prototype.emplaceBack=function(t,e,r){var n=this.length;return this.resize(n+1),this.emplace(n,t,e,r)},e.prototype.emplace=function(t,e,r,n){var i=2*t,a=4*t;return this.uint32[i+0]=e,this.uint16[a+2]=r,this.uint16[a+3]=n,t},e}(Ji);ga.prototype.bytesPerElement=8,ni(\\\"StructArrayLayout1ul2ui8\\\",ga);var ya=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype._refreshViews=function(){this.uint8=new Uint8Array(this.arrayBuffer),this.uint16=new Uint16Array(this.arrayBuffer)},e.prototype.emplaceBack=function(t,e){var r=this.length;return this.resize(r+1),this.emplace(r,t,e)},e.prototype.emplace=function(t,e,r){var n=2*t;return this.uint16[n+0]=e,this.uint16[n+1]=r,t},e}(Ji);ya.prototype.bytesPerElement=4,ni(\\\"StructArrayLayout2ui4\\\",ya);var ma=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype._refreshViews=function(){this.uint8=new Uint8Array(this.arrayBuffer),this.uint16=new Uint16Array(this.arrayBuffer)},e.prototype.emplaceBack=function(t){var e=this.length;return this.resize(e+1),this.emplace(e,t)},e.prototype.emplace=function(t,e){var r=1*t;return this.uint16[r+0]=e,t},e}(Ji);ma.prototype.bytesPerElement=2,ni(\\\"StructArrayLayout1ui2\\\",ma);var xa=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype._refreshViews=function(){this.uint8=new Uint8Array(this.arrayBuffer),this.float32=new Float32Array(this.arrayBuffer)},e.prototype.emplaceBack=function(t,e){var r=this.length;return this.resize(r+1),this.emplace(r,t,e)},e.prototype.emplace=function(t,e,r){var n=2*t;return this.float32[n+0]=e,this.float32[n+1]=r,t},e}(Ji);xa.prototype.bytesPerElement=8,ni(\\\"StructArrayLayout2f8\\\",xa);var ba=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype._refreshViews=function(){this.uint8=new Uint8Array(this.arrayBuffer),this.float32=new Float32Array(this.arrayBuffer)},e.prototype.emplaceBack=function(t,e,r,n){var i=this.length;return this.resize(i+1),this.emplace(i,t,e,r,n)},e.prototype.emplace=function(t,e,r,n,i){var a=4*t;return this.float32[a+0]=e,this.float32[a+1]=r,this.float32[a+2]=n,this.float32[a+3]=i,t},e}(Ji);ba.prototype.bytesPerElement=16,ni(\\\"StructArrayLayout4f16\\\",ba);var _a=function(t){function e(){t.apply(this,arguments)}t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e;var r={anchorPointX:{configurable:!0},anchorPointY:{configurable:!0},x1:{configurable:!0},y1:{configurable:!0},x2:{configurable:!0},y2:{configurable:!0},featureIndex:{configurable:!0},sourceLayerIndex:{configurable:!0},bucketIndex:{configurable:!0},anchorPoint:{configurable:!0}};return r.anchorPointX.get=function(){return this._structArray.int16[this._pos2+0]},r.anchorPointY.get=function(){return this._structArray.int16[this._pos2+1]},r.x1.get=function(){return this._structArray.int16[this._pos2+2]},r.y1.get=function(){return this._structArray.int16[this._pos2+3]},r.x2.get=function(){return this._structArray.int16[this._pos2+4]},r.y2.get=function(){return this._structArray.int16[this._pos2+5]},r.featureIndex.get=function(){return this._structArray.uint32[this._pos4+3]},r.sourceLayerIndex.get=function(){return this._structArray.uint16[this._pos2+8]},r.bucketIndex.get=function(){return this._structArray.uint16[this._pos2+9]},r.anchorPoint.get=function(){return new a(this.anchorPointX,this.anchorPointY)},Object.defineProperties(e.prototype,r),e}(Xi);_a.prototype.size=20;var wa=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.get=function(t){return new _a(this,t)},e}(sa);ni(\\\"CollisionBoxArray\\\",wa);var Ta=function(t){function e(){t.apply(this,arguments)}t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e;var r={anchorX:{configurable:!0},anchorY:{configurable:!0},glyphStartIndex:{configurable:!0},numGlyphs:{configurable:!0},vertexStartIndex:{configurable:!0},lineStartIndex:{configurable:!0},lineLength:{configurable:!0},segment:{configurable:!0},lowerSize:{configurable:!0},upperSize:{configurable:!0},lineOffsetX:{configurable:!0},lineOffsetY:{configurable:!0},writingMode:{configurable:!0},placedOrientation:{configurable:!0},hidden:{configurable:!0},crossTileID:{configurable:!0},associatedIconIndex:{configurable:!0}};return r.anchorX.get=function(){return this._structArray.int16[this._pos2+0]},r.anchorY.get=function(){return this._structArray.int16[this._pos2+1]},r.glyphStartIndex.get=function(){return this._structArray.uint16[this._pos2+2]},r.numGlyphs.get=function(){return this._structArray.uint16[this._pos2+3]},r.vertexStartIndex.get=function(){return this._structArray.uint32[this._pos4+2]},r.lineStartIndex.get=function(){return this._structArray.uint32[this._pos4+3]},r.lineLength.get=function(){return this._structArray.uint32[this._pos4+4]},r.segment.get=function(){return this._structArray.uint16[this._pos2+10]},r.lowerSize.get=function(){return this._structArray.uint16[this._pos2+11]},r.upperSize.get=function(){return this._structArray.uint16[this._pos2+12]},r.lineOffsetX.get=function(){return this._structArray.float32[this._pos4+7]},r.lineOffsetY.get=function(){return this._structArray.float32[this._pos4+8]},r.writingMode.get=function(){return this._structArray.uint8[this._pos1+36]},r.placedOrientation.get=function(){return this._structArray.uint8[this._pos1+37]},r.placedOrientation.set=function(t){this._structArray.uint8[this._pos1+37]=t},r.hidden.get=function(){return this._structArray.uint8[this._pos1+38]},r.hidden.set=function(t){this._structArray.uint8[this._pos1+38]=t},r.crossTileID.get=function(){return this._structArray.uint32[this._pos4+10]},r.crossTileID.set=function(t){this._structArray.uint32[this._pos4+10]=t},r.associatedIconIndex.get=function(){return this._structArray.int16[this._pos2+22]},Object.defineProperties(e.prototype,r),e}(Xi);Ta.prototype.size=48;var ka=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.get=function(t){return new Ta(this,t)},e}(ha);ni(\\\"PlacedSymbolArray\\\",ka);var Aa=function(t){function e(){t.apply(this,arguments)}t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e;var r={anchorX:{configurable:!0},anchorY:{configurable:!0},rightJustifiedTextSymbolIndex:{configurable:!0},centerJustifiedTextSymbolIndex:{configurable:!0},leftJustifiedTextSymbolIndex:{configurable:!0},verticalPlacedTextSymbolIndex:{configurable:!0},placedIconSymbolIndex:{configurable:!0},verticalPlacedIconSymbolIndex:{configurable:!0},key:{configurable:!0},textBoxStartIndex:{configurable:!0},textBoxEndIndex:{configurable:!0},verticalTextBoxStartIndex:{configurable:!0},verticalTextBoxEndIndex:{configurable:!0},iconBoxStartIndex:{configurable:!0},iconBoxEndIndex:{configurable:!0},verticalIconBoxStartIndex:{configurable:!0},verticalIconBoxEndIndex:{configurable:!0},featureIndex:{configurable:!0},numHorizontalGlyphVertices:{configurable:!0},numVerticalGlyphVertices:{configurable:!0},numIconVertices:{configurable:!0},numVerticalIconVertices:{configurable:!0},useRuntimeCollisionCircles:{configurable:!0},crossTileID:{configurable:!0},textBoxScale:{configurable:!0},textOffset0:{configurable:!0},textOffset1:{configurable:!0},collisionCircleDiameter:{configurable:!0}};return r.anchorX.get=function(){return this._structArray.int16[this._pos2+0]},r.anchorY.get=function(){return this._structArray.int16[this._pos2+1]},r.rightJustifiedTextSymbolIndex.get=function(){return this._structArray.int16[this._pos2+2]},r.centerJustifiedTextSymbolIndex.get=function(){return this._structArray.int16[this._pos2+3]},r.leftJustifiedTextSymbolIndex.get=function(){return this._structArray.int16[this._pos2+4]},r.verticalPlacedTextSymbolIndex.get=function(){return this._structArray.int16[this._pos2+5]},r.placedIconSymbolIndex.get=function(){return this._structArray.int16[this._pos2+6]},r.verticalPlacedIconSymbolIndex.get=function(){return this._structArray.int16[this._pos2+7]},r.key.get=function(){return this._structArray.uint16[this._pos2+8]},r.textBoxStartIndex.get=function(){return this._structArray.uint16[this._pos2+9]},r.textBoxEndIndex.get=function(){return this._structArray.uint16[this._pos2+10]},r.verticalTextBoxStartIndex.get=function(){return this._structArray.uint16[this._pos2+11]},r.verticalTextBoxEndIndex.get=function(){return this._structArray.uint16[this._pos2+12]},r.iconBoxStartIndex.get=function(){return this._structArray.uint16[this._pos2+13]},r.iconBoxEndIndex.get=function(){return this._structArray.uint16[this._pos2+14]},r.verticalIconBoxStartIndex.get=function(){return this._structArray.uint16[this._pos2+15]},r.verticalIconBoxEndIndex.get=function(){return this._structArray.uint16[this._pos2+16]},r.featureIndex.get=function(){return this._structArray.uint16[this._pos2+17]},r.numHorizontalGlyphVertices.get=function(){return this._structArray.uint16[this._pos2+18]},r.numVerticalGlyphVertices.get=function(){return this._structArray.uint16[this._pos2+19]},r.numIconVertices.get=function(){return this._structArray.uint16[this._pos2+20]},r.numVerticalIconVertices.get=function(){return this._structArray.uint16[this._pos2+21]},r.useRuntimeCollisionCircles.get=function(){return this._structArray.uint16[this._pos2+22]},r.crossTileID.get=function(){return this._structArray.uint32[this._pos4+12]},r.crossTileID.set=function(t){this._structArray.uint32[this._pos4+12]=t},r.textBoxScale.get=function(){return this._structArray.float32[this._pos4+13]},r.textOffset0.get=function(){return this._structArray.float32[this._pos4+14]},r.textOffset1.get=function(){return this._structArray.float32[this._pos4+15]},r.collisionCircleDiameter.get=function(){return this._structArray.float32[this._pos4+16]},Object.defineProperties(e.prototype,r),e}(Xi);Aa.prototype.size=68;var Ma=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.get=function(t){return new Aa(this,t)},e}(pa);ni(\\\"SymbolInstanceArray\\\",Ma);var Sa=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.getoffsetX=function(t){return this.float32[1*t+0]},e}(da);ni(\\\"GlyphOffsetArray\\\",Sa);var Ea=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.getx=function(t){return this.int16[3*t+0]},e.prototype.gety=function(t){return this.int16[3*t+1]},e.prototype.gettileUnitDistanceFromAnchor=function(t){return this.int16[3*t+2]},e}(va);ni(\\\"SymbolLineVertexArray\\\",Ea);var La=function(t){function e(){t.apply(this,arguments)}t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e;var r={featureIndex:{configurable:!0},sourceLayerIndex:{configurable:!0},bucketIndex:{configurable:!0}};return r.featureIndex.get=function(){return this._structArray.uint32[this._pos4+0]},r.sourceLayerIndex.get=function(){return this._structArray.uint16[this._pos2+2]},r.bucketIndex.get=function(){return this._structArray.uint16[this._pos2+3]},Object.defineProperties(e.prototype,r),e}(Xi);La.prototype.size=8;var Ca=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.get=function(t){return new La(this,t)},e}(ga);ni(\\\"FeatureIndexArray\\\",Ca);var Pa=Ki([{name:\\\"a_pos\\\",components:2,type:\\\"Int16\\\"}],4).members,Oa=function(t){void 0===t&&(t=[]),this.segments=t};function Ia(t,e){return 256*(t=u(Math.floor(t),0,255))+u(Math.floor(e),0,255)}Oa.prototype.prepareSegment=function(t,e,r,n){var i=this.segments[this.segments.length-1];return t>Oa.MAX_VERTEX_ARRAY_LENGTH&&w(\\\"Max vertices per segment is \\\"+Oa.MAX_VERTEX_ARRAY_LENGTH+\\\": bucket requested \\\"+t),(!i||i.vertexLength+t>Oa.MAX_VERTEX_ARRAY_LENGTH||i.sortKey!==n)&&(i={vertexOffset:e.length,primitiveOffset:r.length,vertexLength:0,primitiveLength:0},void 0!==n&&(i.sortKey=n),this.segments.push(i)),i},Oa.prototype.get=function(){return this.segments},Oa.prototype.destroy=function(){for(var t=0,e=this.segments;t<e.length;t+=1){var r=e[t];for(var n in r.vaos)r.vaos[n].destroy()}},Oa.simpleSegment=function(t,e,r,n){return new Oa([{vertexOffset:t,primitiveOffset:e,vertexLength:r,primitiveLength:n,vaos:{},sortKey:0}])},Oa.MAX_VERTEX_ARRAY_LENGTH=Math.pow(2,16)-1,ni(\\\"SegmentVector\\\",Oa);var Da=Ki([{name:\\\"a_pattern_from\\\",components:4,type:\\\"Uint16\\\"},{name:\\\"a_pattern_to\\\",components:4,type:\\\"Uint16\\\"},{name:\\\"a_pixel_ratio_from\\\",components:1,type:\\\"Uint8\\\"},{name:\\\"a_pixel_ratio_to\\\",components:1,type:\\\"Uint8\\\"}]),za=e((function(t){t.exports=function(t,e){var r,n,i,a,o,s,l,u;for(r=3&t.length,n=t.length-r,i=e,o=3432918353,s=461845907,u=0;u<n;)l=255&t.charCodeAt(u)|(255&t.charCodeAt(++u))<<8|(255&t.charCodeAt(++u))<<16|(255&t.charCodeAt(++u))<<24,++u,i=27492+(65535&(a=5*(65535&(i=(i^=l=(65535&(l=(l=(65535&l)*o+(((l>>>16)*o&65535)<<16)&4294967295)<<15|l>>>17))*s+(((l>>>16)*s&65535)<<16)&4294967295)<<13|i>>>19))+((5*(i>>>16)&65535)<<16)&4294967295))+((58964+(a>>>16)&65535)<<16);switch(l=0,r){case 3:l^=(255&t.charCodeAt(u+2))<<16;case 2:l^=(255&t.charCodeAt(u+1))<<8;case 1:i^=l=(65535&(l=(l=(65535&(l^=255&t.charCodeAt(u)))*o+(((l>>>16)*o&65535)<<16)&4294967295)<<15|l>>>17))*s+(((l>>>16)*s&65535)<<16)&4294967295}return i^=t.length,i=2246822507*(65535&(i^=i>>>16))+((2246822507*(i>>>16)&65535)<<16)&4294967295,i=3266489909*(65535&(i^=i>>>13))+((3266489909*(i>>>16)&65535)<<16)&4294967295,(i^=i>>>16)>>>0}})),Ra=e((function(t){t.exports=function(t,e){for(var r,n=t.length,i=e^n,a=0;n>=4;)r=1540483477*(65535&(r=255&t.charCodeAt(a)|(255&t.charCodeAt(++a))<<8|(255&t.charCodeAt(++a))<<16|(255&t.charCodeAt(++a))<<24))+((1540483477*(r>>>16)&65535)<<16),i=1540483477*(65535&i)+((1540483477*(i>>>16)&65535)<<16)^(r=1540483477*(65535&(r^=r>>>24))+((1540483477*(r>>>16)&65535)<<16)),n-=4,++a;switch(n){case 3:i^=(255&t.charCodeAt(a+2))<<16;case 2:i^=(255&t.charCodeAt(a+1))<<8;case 1:i=1540483477*(65535&(i^=255&t.charCodeAt(a)))+((1540483477*(i>>>16)&65535)<<16)}return i=1540483477*(65535&(i^=i>>>13))+((1540483477*(i>>>16)&65535)<<16),(i^=i>>>15)>>>0}})),Fa=za,Ba=za,Na=Ra;Fa.murmur3=Ba,Fa.murmur2=Na;var ja=function(){this.ids=[],this.positions=[],this.indexed=!1};ja.prototype.add=function(t,e,r,n){this.ids.push(Va(t)),this.positions.push(e,r,n)},ja.prototype.getPositions=function(t){for(var e=Va(t),r=0,n=this.ids.length-1;r<n;){var i=r+n>>1;this.ids[i]>=e?n=i:r=i+1}for(var a=[];this.ids[r]===e;){var o=this.positions[3*r],s=this.positions[3*r+1],l=this.positions[3*r+2];a.push({index:o,start:s,end:l}),r++}return a},ja.serialize=function(t,e){var r=new Float64Array(t.ids),n=new Uint32Array(t.positions);return Ha(r,n,0,r.length-1),e&&e.push(r.buffer,n.buffer),{ids:r,positions:n}},ja.deserialize=function(t){var e=new ja;return e.ids=t.ids,e.positions=t.positions,e.indexed=!0,e};var Ua=Math.pow(2,53)-1;function Va(t){var e=+t;return!isNaN(e)&&e<=Ua?e:Fa(String(t))}function Ha(t,e,r,n){for(;r<n;){for(var i=t[r+n>>1],a=r-1,o=n+1;;){do{a++}while(t[a]<i);do{o--}while(t[o]>i);if(a>=o)break;qa(t,a,o),qa(e,3*a,3*o),qa(e,3*a+1,3*o+1),qa(e,3*a+2,3*o+2)}o-r<n-o?(Ha(t,e,r,o),r=o+1):(Ha(t,e,o+1,n),n=o)}}function qa(t,e,r){var n=t[e];t[e]=t[r],t[r]=n}ni(\\\"FeaturePositionMap\\\",ja);var Ga=function(t,e){this.gl=t.gl,this.location=e},Za=function(t){function e(e,r){t.call(this,e,r),this.current=0}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.set=function(t){this.current!==t&&(this.current=t,this.gl.uniform1i(this.location,t))},e}(Ga),Ya=function(t){function e(e,r){t.call(this,e,r),this.current=0}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.set=function(t){this.current!==t&&(this.current=t,this.gl.uniform1f(this.location,t))},e}(Ga),Wa=function(t){function e(e,r){t.call(this,e,r),this.current=[0,0]}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.set=function(t){t[0]===this.current[0]&&t[1]===this.current[1]||(this.current=t,this.gl.uniform2f(this.location,t[0],t[1]))},e}(Ga),Xa=function(t){function e(e,r){t.call(this,e,r),this.current=[0,0,0]}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.set=function(t){t[0]===this.current[0]&&t[1]===this.current[1]&&t[2]===this.current[2]||(this.current=t,this.gl.uniform3f(this.location,t[0],t[1],t[2]))},e}(Ga),Ja=function(t){function e(e,r){t.call(this,e,r),this.current=[0,0,0,0]}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.set=function(t){t[0]===this.current[0]&&t[1]===this.current[1]&&t[2]===this.current[2]&&t[3]===this.current[3]||(this.current=t,this.gl.uniform4f(this.location,t[0],t[1],t[2],t[3]))},e}(Ga),Ka=function(t){function e(e,r){t.call(this,e,r),this.current=oe.transparent}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.set=function(t){t.r===this.current.r&&t.g===this.current.g&&t.b===this.current.b&&t.a===this.current.a||(this.current=t,this.gl.uniform4f(this.location,t.r,t.g,t.b,t.a))},e}(Ga),$a=new Float32Array(16),Qa=function(t){function e(e,r){t.call(this,e,r),this.current=$a}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.set=function(t){if(t[12]!==this.current[12]||t[0]!==this.current[0])return this.current=t,void this.gl.uniformMatrix4fv(this.location,!1,t);for(var e=1;e<16;e++)if(t[e]!==this.current[e]){this.current=t,this.gl.uniformMatrix4fv(this.location,!1,t);break}},e}(Ga);function to(t){return[Ia(255*t.r,255*t.g),Ia(255*t.b,255*t.a)]}var eo=function(t,e,r){this.value=t,this.uniformNames=e.map((function(t){return\\\"u_\\\"+t})),this.type=r};eo.prototype.setUniform=function(t,e,r){t.set(r.constantOr(this.value))},eo.prototype.getBinding=function(t,e,r){return\\\"color\\\"===this.type?new Ka(t,e):new Ya(t,e)};var ro=function(t,e){this.uniformNames=e.map((function(t){return\\\"u_\\\"+t})),this.patternFrom=null,this.patternTo=null,this.pixelRatioFrom=1,this.pixelRatioTo=1};ro.prototype.setConstantPatternPositions=function(t,e){this.pixelRatioFrom=e.pixelRatio,this.pixelRatioTo=t.pixelRatio,this.patternFrom=e.tlbr,this.patternTo=t.tlbr},ro.prototype.setUniform=function(t,e,r,n){var i=\\\"u_pattern_to\\\"===n?this.patternTo:\\\"u_pattern_from\\\"===n?this.patternFrom:\\\"u_pixel_ratio_to\\\"===n?this.pixelRatioTo:\\\"u_pixel_ratio_from\\\"===n?this.pixelRatioFrom:null;i&&t.set(i)},ro.prototype.getBinding=function(t,e,r){return\\\"u_pattern\\\"===r.substr(0,9)?new Ja(t,e):new Ya(t,e)};var no=function(t,e,r,n){this.expression=t,this.type=r,this.maxValue=0,this.paintVertexAttributes=e.map((function(t){return{name:\\\"a_\\\"+t,type:\\\"Float32\\\",components:\\\"color\\\"===r?2:1,offset:0}})),this.paintVertexArray=new n};no.prototype.populatePaintArray=function(t,e,r,n,i){var a=this.paintVertexArray.length,o=this.expression.evaluate(new Pi(0),e,{},n,[],i);this.paintVertexArray.resize(t),this._setPaintValue(a,t,o)},no.prototype.updatePaintArray=function(t,e,r,n){var i=this.expression.evaluate({zoom:0},r,n);this._setPaintValue(t,e,i)},no.prototype._setPaintValue=function(t,e,r){if(\\\"color\\\"===this.type)for(var n=to(r),i=t;i<e;i++)this.paintVertexArray.emplace(i,n[0],n[1]);else{for(var a=t;a<e;a++)this.paintVertexArray.emplace(a,r);this.maxValue=Math.max(this.maxValue,Math.abs(r))}},no.prototype.upload=function(t){this.paintVertexArray&&this.paintVertexArray.arrayBuffer&&(this.paintVertexBuffer&&this.paintVertexBuffer.buffer?this.paintVertexBuffer.updateData(this.paintVertexArray):this.paintVertexBuffer=t.createVertexBuffer(this.paintVertexArray,this.paintVertexAttributes,this.expression.isStateDependent))},no.prototype.destroy=function(){this.paintVertexBuffer&&this.paintVertexBuffer.destroy()};var io=function(t,e,r,n,i,a){this.expression=t,this.uniformNames=e.map((function(t){return\\\"u_\\\"+t+\\\"_t\\\"})),this.type=r,this.useIntegerZoom=n,this.zoom=i,this.maxValue=0,this.paintVertexAttributes=e.map((function(t){return{name:\\\"a_\\\"+t,type:\\\"Float32\\\",components:\\\"color\\\"===r?4:2,offset:0}})),this.paintVertexArray=new a};io.prototype.populatePaintArray=function(t,e,r,n,i){var a=this.expression.evaluate(new Pi(this.zoom),e,{},n,[],i),o=this.expression.evaluate(new Pi(this.zoom+1),e,{},n,[],i),s=this.paintVertexArray.length;this.paintVertexArray.resize(t),this._setPaintValue(s,t,a,o)},io.prototype.updatePaintArray=function(t,e,r,n){var i=this.expression.evaluate({zoom:this.zoom},r,n),a=this.expression.evaluate({zoom:this.zoom+1},r,n);this._setPaintValue(t,e,i,a)},io.prototype._setPaintValue=function(t,e,r,n){if(\\\"color\\\"===this.type)for(var i=to(r),a=to(n),o=t;o<e;o++)this.paintVertexArray.emplace(o,i[0],i[1],a[0],a[1]);else{for(var s=t;s<e;s++)this.paintVertexArray.emplace(s,r,n);this.maxValue=Math.max(this.maxValue,Math.abs(r),Math.abs(n))}},io.prototype.upload=function(t){this.paintVertexArray&&this.paintVertexArray.arrayBuffer&&(this.paintVertexBuffer&&this.paintVertexBuffer.buffer?this.paintVertexBuffer.updateData(this.paintVertexArray):this.paintVertexBuffer=t.createVertexBuffer(this.paintVertexArray,this.paintVertexAttributes,this.expression.isStateDependent))},io.prototype.destroy=function(){this.paintVertexBuffer&&this.paintVertexBuffer.destroy()},io.prototype.setUniform=function(t,e){var r=this.useIntegerZoom?Math.floor(e.zoom):e.zoom,n=u(this.expression.interpolationFactor(r,this.zoom,this.zoom+1),0,1);t.set(n)},io.prototype.getBinding=function(t,e,r){return new Ya(t,e)};var ao=function(t,e,r,n,i,a){this.expression=t,this.type=e,this.useIntegerZoom=r,this.zoom=n,this.layerId=a,this.zoomInPaintVertexArray=new i,this.zoomOutPaintVertexArray=new i};ao.prototype.populatePaintArray=function(t,e,r){var n=this.zoomInPaintVertexArray.length;this.zoomInPaintVertexArray.resize(t),this.zoomOutPaintVertexArray.resize(t),this._setPaintValues(n,t,e.patterns&&e.patterns[this.layerId],r)},ao.prototype.updatePaintArray=function(t,e,r,n,i){this._setPaintValues(t,e,r.patterns&&r.patterns[this.layerId],i)},ao.prototype._setPaintValues=function(t,e,r,n){if(n&&r){var i=r.min,a=r.mid,o=r.max,s=n[i],l=n[a],u=n[o];if(s&&l&&u)for(var c=t;c<e;c++)this.zoomInPaintVertexArray.emplace(c,l.tl[0],l.tl[1],l.br[0],l.br[1],s.tl[0],s.tl[1],s.br[0],s.br[1],l.pixelRatio,s.pixelRatio),this.zoomOutPaintVertexArray.emplace(c,l.tl[0],l.tl[1],l.br[0],l.br[1],u.tl[0],u.tl[1],u.br[0],u.br[1],l.pixelRatio,u.pixelRatio)}},ao.prototype.upload=function(t){this.zoomInPaintVertexArray&&this.zoomInPaintVertexArray.arrayBuffer&&this.zoomOutPaintVertexArray&&this.zoomOutPaintVertexArray.arrayBuffer&&(this.zoomInPaintVertexBuffer=t.createVertexBuffer(this.zoomInPaintVertexArray,Da.members,this.expression.isStateDependent),this.zoomOutPaintVertexBuffer=t.createVertexBuffer(this.zoomOutPaintVertexArray,Da.members,this.expression.isStateDependent))},ao.prototype.destroy=function(){this.zoomOutPaintVertexBuffer&&this.zoomOutPaintVertexBuffer.destroy(),this.zoomInPaintVertexBuffer&&this.zoomInPaintVertexBuffer.destroy()};var oo=function(t,e,r,n){this.binders={},this.layoutAttributes=n,this._buffers=[];var i=[];for(var a in t.paint._values)if(r(a)){var o=t.paint.get(a);if(o instanceof Bi&&Yr(o.property.specification)){var s=lo(a,t.type),l=o.value,u=o.property.specification.type,c=o.property.useIntegerZoom,f=o.property.specification[\\\"property-type\\\"],h=\\\"cross-faded\\\"===f||\\\"cross-faded-data-driven\\\"===f;if(\\\"constant\\\"===l.kind)this.binders[a]=h?new ro(l.value,s):new eo(l.value,s,u),i.push(\\\"/u_\\\"+a);else if(\\\"source\\\"===l.kind||h){var p=uo(a,u,\\\"source\\\");this.binders[a]=h?new ao(l,u,c,e,p,t.id):new no(l,s,u,p),i.push(\\\"/a_\\\"+a)}else{var d=uo(a,u,\\\"composite\\\");this.binders[a]=new io(l,s,u,c,e,d),i.push(\\\"/z_\\\"+a)}}}this.cacheKey=i.sort().join(\\\"\\\")};oo.prototype.getMaxValue=function(t){var e=this.binders[t];return e instanceof no||e instanceof io?e.maxValue:0},oo.prototype.populatePaintArrays=function(t,e,r,n,i){for(var a in this.binders){var o=this.binders[a];(o instanceof no||o instanceof io||o instanceof ao)&&o.populatePaintArray(t,e,r,n,i)}},oo.prototype.setConstantPatternPositions=function(t,e){for(var r in this.binders){var n=this.binders[r];n instanceof ro&&n.setConstantPatternPositions(t,e)}},oo.prototype.updatePaintArrays=function(t,e,r,n,i){var a=!1;for(var o in t)for(var s=0,l=e.getPositions(o);s<l.length;s+=1){var u=l[s],c=r.feature(u.index);for(var f in this.binders){var h=this.binders[f];if((h instanceof no||h instanceof io||h instanceof ao)&&!0===h.expression.isStateDependent){var p=n.paint.get(f);h.expression=p.value,h.updatePaintArray(u.start,u.end,c,t[o],i),a=!0}}}return a},oo.prototype.defines=function(){var t=[];for(var e in this.binders){var r=this.binders[e];(r instanceof eo||r instanceof ro)&&t.push.apply(t,r.uniformNames.map((function(t){return\\\"#define HAS_UNIFORM_\\\"+t})))}return t},oo.prototype.getPaintVertexBuffers=function(){return this._buffers},oo.prototype.getUniforms=function(t,e){var r=[];for(var n in this.binders){var i=this.binders[n];if(i instanceof eo||i instanceof ro||i instanceof io)for(var a=0,o=i.uniformNames;a<o.length;a+=1){var s=o[a];if(e[s]){var l=i.getBinding(t,e[s],s);r.push({name:s,property:n,binding:l})}}}return r},oo.prototype.setUniforms=function(t,e,r,n){for(var i=0,a=e;i<a.length;i+=1){var o=a[i],s=o.name,l=o.property,u=o.binding;this.binders[l].setUniform(u,n,r.get(l),s)}},oo.prototype.updatePaintBuffers=function(t){for(var e in this._buffers=[],this.binders){var r=this.binders[e];if(t&&r instanceof ao){var n=2===t.fromScale?r.zoomInPaintVertexBuffer:r.zoomOutPaintVertexBuffer;n&&this._buffers.push(n)}else(r instanceof no||r instanceof io)&&r.paintVertexBuffer&&this._buffers.push(r.paintVertexBuffer)}},oo.prototype.upload=function(t){for(var e in this.binders){var r=this.binders[e];(r instanceof no||r instanceof io||r instanceof ao)&&r.upload(t)}this.updatePaintBuffers()},oo.prototype.destroy=function(){for(var t in this.binders){var e=this.binders[t];(e instanceof no||e instanceof io||e instanceof ao)&&e.destroy()}};var so=function(t,e,r,n){void 0===n&&(n=function(){return!0}),this.programConfigurations={};for(var i=0,a=e;i<a.length;i+=1){var o=a[i];this.programConfigurations[o.id]=new oo(o,r,n,t)}this.needsUpload=!1,this._featureMap=new ja,this._bufferOffset=0};function lo(t,e){return{\\\"text-opacity\\\":[\\\"opacity\\\"],\\\"icon-opacity\\\":[\\\"opacity\\\"],\\\"text-color\\\":[\\\"fill_color\\\"],\\\"icon-color\\\":[\\\"fill_color\\\"],\\\"text-halo-color\\\":[\\\"halo_color\\\"],\\\"icon-halo-color\\\":[\\\"halo_color\\\"],\\\"text-halo-blur\\\":[\\\"halo_blur\\\"],\\\"icon-halo-blur\\\":[\\\"halo_blur\\\"],\\\"text-halo-width\\\":[\\\"halo_width\\\"],\\\"icon-halo-width\\\":[\\\"halo_width\\\"],\\\"line-gap-width\\\":[\\\"gapwidth\\\"],\\\"line-pattern\\\":[\\\"pattern_to\\\",\\\"pattern_from\\\",\\\"pixel_ratio_to\\\",\\\"pixel_ratio_from\\\"],\\\"fill-pattern\\\":[\\\"pattern_to\\\",\\\"pattern_from\\\",\\\"pixel_ratio_to\\\",\\\"pixel_ratio_from\\\"],\\\"fill-extrusion-pattern\\\":[\\\"pattern_to\\\",\\\"pattern_from\\\",\\\"pixel_ratio_to\\\",\\\"pixel_ratio_from\\\"]}[t]||[t.replace(e+\\\"-\\\",\\\"\\\").replace(/-/g,\\\"_\\\")]}function uo(t,e,r){var n={color:{source:xa,composite:ba},number:{source:da,composite:xa}},i=function(t){return{\\\"line-pattern\\\":{source:na,composite:na},\\\"fill-pattern\\\":{source:na,composite:na},\\\"fill-extrusion-pattern\\\":{source:na,composite:na}}[t]}(t);return i&&i[r]||n[e][r]}so.prototype.populatePaintArrays=function(t,e,r,n,i,a){for(var o in this.programConfigurations)this.programConfigurations[o].populatePaintArrays(t,e,n,i,a);void 0!==e.id&&this._featureMap.add(e.id,r,this._bufferOffset,t),this._bufferOffset=t,this.needsUpload=!0},so.prototype.updatePaintArrays=function(t,e,r,n){for(var i=0,a=r;i<a.length;i+=1){var o=a[i];this.needsUpload=this.programConfigurations[o.id].updatePaintArrays(t,this._featureMap,e,o,n)||this.needsUpload}},so.prototype.get=function(t){return this.programConfigurations[t]},so.prototype.upload=function(t){if(this.needsUpload){for(var e in this.programConfigurations)this.programConfigurations[e].upload(t);this.needsUpload=!1}},so.prototype.destroy=function(){for(var t in this.programConfigurations)this.programConfigurations[t].destroy()},ni(\\\"ConstantBinder\\\",eo),ni(\\\"CrossFadedConstantBinder\\\",ro),ni(\\\"SourceExpressionBinder\\\",no),ni(\\\"CrossFadedCompositeBinder\\\",ao),ni(\\\"CompositeExpressionBinder\\\",io),ni(\\\"ProgramConfiguration\\\",oo,{omit:[\\\"_buffers\\\"]}),ni(\\\"ProgramConfigurationSet\\\",so);var co=8192;var fo,ho=(fo=15,{min:-1*Math.pow(2,fo-1),max:Math.pow(2,fo-1)-1});function po(t){for(var e=co/t.extent,r=t.loadGeometry(),n=0;n<r.length;n++)for(var i=r[n],a=0;a<i.length;a++){var o=i[a];o.x=Math.round(o.x*e),o.y=Math.round(o.y*e),(o.x<ho.min||o.x>ho.max||o.y<ho.min||o.y>ho.max)&&(w(\\\"Geometry exceeds allowed extent, reduce your vector tile buffer size\\\"),o.x=u(o.x,ho.min,ho.max),o.y=u(o.y,ho.min,ho.max))}return r}function vo(t,e,r,n,i){t.emplaceBack(2*e+(n+1)/2,2*r+(i+1)/2)}var go=function(t){this.zoom=t.zoom,this.overscaling=t.overscaling,this.layers=t.layers,this.layerIds=this.layers.map((function(t){return t.id})),this.index=t.index,this.hasPattern=!1,this.layoutVertexArray=new Qi,this.indexArray=new fa,this.segments=new Oa,this.programConfigurations=new so(Pa,t.layers,t.zoom),this.stateDependentLayerIds=this.layers.filter((function(t){return t.isStateDependent()})).map((function(t){return t.id}))};function yo(t,e){for(var r=0;r<t.length;r++)if(Mo(e,t[r]))return!0;for(var n=0;n<e.length;n++)if(Mo(t,e[n]))return!0;return!!_o(t,e)}function mo(t,e,r){return!!Mo(t,e)||!!To(e,t,r)}function xo(t,e){if(1===t.length)return Ao(e,t[0]);for(var r=0;r<e.length;r++)for(var n=e[r],i=0;i<n.length;i++)if(Mo(t,n[i]))return!0;for(var a=0;a<t.length;a++)if(Ao(e,t[a]))return!0;for(var o=0;o<e.length;o++)if(_o(t,e[o]))return!0;return!1}function bo(t,e,r){if(t.length>1){if(_o(t,e))return!0;for(var n=0;n<e.length;n++)if(To(e[n],t,r))return!0}for(var i=0;i<t.length;i++)if(To(t[i],e,r))return!0;return!1}function _o(t,e){if(0===t.length||0===e.length)return!1;for(var r=0;r<t.length-1;r++)for(var n=t[r],i=t[r+1],a=0;a<e.length-1;a++)if(wo(n,i,e[a],e[a+1]))return!0;return!1}function wo(t,e,r,n){return T(t,r,n)!==T(e,r,n)&&T(t,e,r)!==T(t,e,n)}function To(t,e,r){var n=r*r;if(1===e.length)return t.distSqr(e[0])<n;for(var i=1;i<e.length;i++)if(ko(t,e[i-1],e[i])<n)return!0;return!1}function ko(t,e,r){var n=e.distSqr(r);if(0===n)return t.distSqr(e);var i=((t.x-e.x)*(r.x-e.x)+(t.y-e.y)*(r.y-e.y))/n;return i<0?t.distSqr(e):i>1?t.distSqr(r):t.distSqr(r.sub(e)._mult(i)._add(e))}function Ao(t,e){for(var r,n,i,a=!1,o=0;o<t.length;o++)for(var s=0,l=(r=t[o]).length-1;s<r.length;l=s++)n=r[s],i=r[l],n.y>e.y!=i.y>e.y&&e.x<(i.x-n.x)*(e.y-n.y)/(i.y-n.y)+n.x&&(a=!a);return a}function Mo(t,e){for(var r=!1,n=0,i=t.length-1;n<t.length;i=n++){var a=t[n],o=t[i];a.y>e.y!=o.y>e.y&&e.x<(o.x-a.x)*(e.y-a.y)/(o.y-a.y)+a.x&&(r=!r)}return r}function So(t,e,r){var n=r[0],i=r[2];if(t.x<n.x&&e.x<n.x||t.x>i.x&&e.x>i.x||t.y<n.y&&e.y<n.y||t.y>i.y&&e.y>i.y)return!1;var a=T(t,e,r[0]);return a!==T(t,e,r[1])||a!==T(t,e,r[2])||a!==T(t,e,r[3])}function Eo(t,e,r){var n=e.paint.get(t).value;return\\\"constant\\\"===n.kind?n.value:r.programConfigurations.get(e.id).getMaxValue(t)}function Lo(t){return Math.sqrt(t[0]*t[0]+t[1]*t[1])}function Co(t,e,r,n,i){if(!e[0]&&!e[1])return t;var o=a.convert(e)._mult(i);\\\"viewport\\\"===r&&o._rotate(-n);for(var s=[],l=0;l<t.length;l++){var u=t[l];s.push(u.sub(o))}return s}go.prototype.populate=function(t,e,r){var n=this.layers[0],i=[],a=null;\\\"circle\\\"===n.type&&(a=n.layout.get(\\\"circle-sort-key\\\"));for(var o=0,s=t;o<s.length;o+=1){var l=s[o],u=l.feature,c=l.id,f=l.index,h=l.sourceLayerIndex,p=this.layers[0]._featureFilter.needGeometry,d={type:u.type,id:c,properties:u.properties,geometry:p?po(u):[]};if(this.layers[0]._featureFilter.filter(new Pi(this.zoom),d,r)){p||(d.geometry=po(u));var v=a?a.evaluate(d,{},r):void 0,g={id:c,properties:u.properties,type:u.type,sourceLayerIndex:h,index:f,geometry:d.geometry,patterns:{},sortKey:v};i.push(g)}}a&&i.sort((function(t,e){return t.sortKey-e.sortKey}));for(var y=0,m=i;y<m.length;y+=1){var x=m[y],b=x,_=b.geometry,w=b.index,T=b.sourceLayerIndex,k=t[w].feature;this.addFeature(x,_,w,r),e.featureIndex.insert(k,_,w,T,this.index)}},go.prototype.update=function(t,e,r){this.stateDependentLayers.length&&this.programConfigurations.updatePaintArrays(t,e,this.stateDependentLayers,r)},go.prototype.isEmpty=function(){return 0===this.layoutVertexArray.length},go.prototype.uploadPending=function(){return!this.uploaded||this.programConfigurations.needsUpload},go.prototype.upload=function(t){this.uploaded||(this.layoutVertexBuffer=t.createVertexBuffer(this.layoutVertexArray,Pa),this.indexBuffer=t.createIndexBuffer(this.indexArray)),this.programConfigurations.upload(t),this.uploaded=!0},go.prototype.destroy=function(){this.layoutVertexBuffer&&(this.layoutVertexBuffer.destroy(),this.indexBuffer.destroy(),this.programConfigurations.destroy(),this.segments.destroy())},go.prototype.addFeature=function(t,e,r,n){for(var i=0,a=e;i<a.length;i+=1)for(var o=0,s=a[i];o<s.length;o+=1){var l=s[o],u=l.x,c=l.y;if(!(u<0||u>=co||c<0||c>=co)){var f=this.segments.prepareSegment(4,this.layoutVertexArray,this.indexArray,t.sortKey),h=f.vertexLength;vo(this.layoutVertexArray,u,c,-1,-1),vo(this.layoutVertexArray,u,c,1,-1),vo(this.layoutVertexArray,u,c,1,1),vo(this.layoutVertexArray,u,c,-1,1),this.indexArray.emplaceBack(h,h+1,h+2),this.indexArray.emplaceBack(h,h+3,h+2),f.vertexLength+=4,f.primitiveLength+=2}}this.programConfigurations.populatePaintArrays(this.layoutVertexArray.length,t,r,{},n)},ni(\\\"CircleBucket\\\",go,{omit:[\\\"layers\\\"]});var Po=new Gi({\\\"circle-sort-key\\\":new Ui(Dt.layout_circle[\\\"circle-sort-key\\\"])}),Oo={paint:new Gi({\\\"circle-radius\\\":new Ui(Dt.paint_circle[\\\"circle-radius\\\"]),\\\"circle-color\\\":new Ui(Dt.paint_circle[\\\"circle-color\\\"]),\\\"circle-blur\\\":new Ui(Dt.paint_circle[\\\"circle-blur\\\"]),\\\"circle-opacity\\\":new Ui(Dt.paint_circle[\\\"circle-opacity\\\"]),\\\"circle-translate\\\":new ji(Dt.paint_circle[\\\"circle-translate\\\"]),\\\"circle-translate-anchor\\\":new ji(Dt.paint_circle[\\\"circle-translate-anchor\\\"]),\\\"circle-pitch-scale\\\":new ji(Dt.paint_circle[\\\"circle-pitch-scale\\\"]),\\\"circle-pitch-alignment\\\":new ji(Dt.paint_circle[\\\"circle-pitch-alignment\\\"]),\\\"circle-stroke-width\\\":new Ui(Dt.paint_circle[\\\"circle-stroke-width\\\"]),\\\"circle-stroke-color\\\":new Ui(Dt.paint_circle[\\\"circle-stroke-color\\\"]),\\\"circle-stroke-opacity\\\":new Ui(Dt.paint_circle[\\\"circle-stroke-opacity\\\"])}),layout:Po},Io=\\\"undefined\\\"!=typeof Float32Array?Float32Array:Array;function Do(t){return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t}function zo(t,e,r){var n=e[0],i=e[1],a=e[2],o=e[3],s=e[4],l=e[5],u=e[6],c=e[7],f=e[8],h=e[9],p=e[10],d=e[11],v=e[12],g=e[13],y=e[14],m=e[15],x=r[0],b=r[1],_=r[2],w=r[3];return t[0]=x*n+b*s+_*f+w*v,t[1]=x*i+b*l+_*h+w*g,t[2]=x*a+b*u+_*p+w*y,t[3]=x*o+b*c+_*d+w*m,x=r[4],b=r[5],_=r[6],w=r[7],t[4]=x*n+b*s+_*f+w*v,t[5]=x*i+b*l+_*h+w*g,t[6]=x*a+b*u+_*p+w*y,t[7]=x*o+b*c+_*d+w*m,x=r[8],b=r[9],_=r[10],w=r[11],t[8]=x*n+b*s+_*f+w*v,t[9]=x*i+b*l+_*h+w*g,t[10]=x*a+b*u+_*p+w*y,t[11]=x*o+b*c+_*d+w*m,x=r[12],b=r[13],_=r[14],w=r[15],t[12]=x*n+b*s+_*f+w*v,t[13]=x*i+b*l+_*h+w*g,t[14]=x*a+b*u+_*p+w*y,t[15]=x*o+b*c+_*d+w*m,t}Math.hypot||(Math.hypot=function(){for(var t=arguments,e=0,r=arguments.length;r--;)e+=t[r]*t[r];return Math.sqrt(e)});var Ro=zo;var Fo,Bo=function(t,e,r){return t[0]=e[0]-r[0],t[1]=e[1]-r[1],t[2]=e[2]-r[2],t};function No(t,e,r){var n=e[0],i=e[1],a=e[2],o=e[3];return t[0]=r[0]*n+r[4]*i+r[8]*a+r[12]*o,t[1]=r[1]*n+r[5]*i+r[9]*a+r[13]*o,t[2]=r[2]*n+r[6]*i+r[10]*a+r[14]*o,t[3]=r[3]*n+r[7]*i+r[11]*a+r[15]*o,t}Fo=new Io(3),Io!=Float32Array&&(Fo[0]=0,Fo[1]=0,Fo[2]=0),function(){var t=new Io(4);Io!=Float32Array&&(t[0]=0,t[1]=0,t[2]=0,t[3]=0)}();var jo=function(t){var e=t[0],r=t[1];return e*e+r*r},Uo=(function(){var t=new Io(2);Io!=Float32Array&&(t[0]=0,t[1]=0)}(),function(t){function e(e){t.call(this,e,Oo)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.createBucket=function(t){return new go(t)},e.prototype.queryRadius=function(t){var e=t;return Eo(\\\"circle-radius\\\",this,e)+Eo(\\\"circle-stroke-width\\\",this,e)+Lo(this.paint.get(\\\"circle-translate\\\"))},e.prototype.queryIntersectsFeature=function(t,e,r,n,i,a,o,s){for(var l=Co(t,this.paint.get(\\\"circle-translate\\\"),this.paint.get(\\\"circle-translate-anchor\\\"),a.angle,o),u=this.paint.get(\\\"circle-radius\\\").evaluate(e,r)+this.paint.get(\\\"circle-stroke-width\\\").evaluate(e,r),c=\\\"map\\\"===this.paint.get(\\\"circle-pitch-alignment\\\"),f=c?l:function(t,e){return t.map((function(t){return Vo(t,e)}))}(l,s),h=c?u*o:u,p=0,d=n;p<d.length;p+=1)for(var v=0,g=d[p];v<g.length;v+=1){var y=g[v],m=c?y:Vo(y,s),x=h,b=No([],[y.x,y.y,0,1],s);if(\\\"viewport\\\"===this.paint.get(\\\"circle-pitch-scale\\\")&&\\\"map\\\"===this.paint.get(\\\"circle-pitch-alignment\\\")?x*=b[3]/a.cameraToCenterDistance:\\\"map\\\"===this.paint.get(\\\"circle-pitch-scale\\\")&&\\\"viewport\\\"===this.paint.get(\\\"circle-pitch-alignment\\\")&&(x*=a.cameraToCenterDistance/b[3]),mo(f,m,x))return!0}return!1},e}(Yi));function Vo(t,e){var r=No([],[t.x,t.y,0,1],e);return new a(r[0]/r[3],r[1]/r[3])}var Ho=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e}(go);function qo(t,e,r,n){var i=e.width,a=e.height;if(n){if(n instanceof Uint8ClampedArray)n=new Uint8Array(n.buffer);else if(n.length!==i*a*r)throw new RangeError(\\\"mismatched image size\\\")}else n=new Uint8Array(i*a*r);return t.width=i,t.height=a,t.data=n,t}function Go(t,e,r){var n=e.width,i=e.height;if(n!==t.width||i!==t.height){var a=qo({},{width:n,height:i},r);Zo(t,a,{x:0,y:0},{x:0,y:0},{width:Math.min(t.width,n),height:Math.min(t.height,i)},r),t.width=n,t.height=i,t.data=a.data}}function Zo(t,e,r,n,i,a){if(0===i.width||0===i.height)return e;if(i.width>t.width||i.height>t.height||r.x>t.width-i.width||r.y>t.height-i.height)throw new RangeError(\\\"out of range source coordinates for image copy\\\");if(i.width>e.width||i.height>e.height||n.x>e.width-i.width||n.y>e.height-i.height)throw new RangeError(\\\"out of range destination coordinates for image copy\\\");for(var o=t.data,s=e.data,l=0;l<i.height;l++)for(var u=((r.y+l)*t.width+r.x)*a,c=((n.y+l)*e.width+n.x)*a,f=0;f<i.width*a;f++)s[c+f]=o[u+f];return e}ni(\\\"HeatmapBucket\\\",Ho,{omit:[\\\"layers\\\"]});var Yo=function(t,e){qo(this,t,1,e)};Yo.prototype.resize=function(t){Go(this,t,1)},Yo.prototype.clone=function(){return new Yo({width:this.width,height:this.height},new Uint8Array(this.data))},Yo.copy=function(t,e,r,n,i){Zo(t,e,r,n,i,1)};var Wo=function(t,e){qo(this,t,4,e)};Wo.prototype.resize=function(t){Go(this,t,4)},Wo.prototype.replace=function(t,e){e?this.data.set(t):t instanceof Uint8ClampedArray?this.data=new Uint8Array(t.buffer):this.data=t},Wo.prototype.clone=function(){return new Wo({width:this.width,height:this.height},new Uint8Array(this.data))},Wo.copy=function(t,e,r,n,i){Zo(t,e,r,n,i,4)},ni(\\\"AlphaImage\\\",Yo),ni(\\\"RGBAImage\\\",Wo);var Xo={paint:new Gi({\\\"heatmap-radius\\\":new Ui(Dt.paint_heatmap[\\\"heatmap-radius\\\"]),\\\"heatmap-weight\\\":new Ui(Dt.paint_heatmap[\\\"heatmap-weight\\\"]),\\\"heatmap-intensity\\\":new ji(Dt.paint_heatmap[\\\"heatmap-intensity\\\"]),\\\"heatmap-color\\\":new qi(Dt.paint_heatmap[\\\"heatmap-color\\\"]),\\\"heatmap-opacity\\\":new ji(Dt.paint_heatmap[\\\"heatmap-opacity\\\"])})};function Jo(t,e){for(var r=new Uint8Array(1024),n={},i=0,a=0;i<256;i++,a+=4){n[e]=i/255;var o=t.evaluate(n);r[a+0]=Math.floor(255*o.r/o.a),r[a+1]=Math.floor(255*o.g/o.a),r[a+2]=Math.floor(255*o.b/o.a),r[a+3]=Math.floor(255*o.a)}return new Wo({width:256,height:1},r)}var Ko=function(t){function e(e){t.call(this,e,Xo),this._updateColorRamp()}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.createBucket=function(t){return new Ho(t)},e.prototype._handleSpecialPaintPropertyUpdate=function(t){\\\"heatmap-color\\\"===t&&this._updateColorRamp()},e.prototype._updateColorRamp=function(){var t=this._transitionablePaint._values[\\\"heatmap-color\\\"].value.expression;this.colorRamp=Jo(t,\\\"heatmapDensity\\\"),this.colorRampTexture=null},e.prototype.resize=function(){this.heatmapFbo&&(this.heatmapFbo.destroy(),this.heatmapFbo=null)},e.prototype.queryRadius=function(){return 0},e.prototype.queryIntersectsFeature=function(){return!1},e.prototype.hasOffscreenPass=function(){return 0!==this.paint.get(\\\"heatmap-opacity\\\")&&\\\"none\\\"!==this.visibility},e}(Yi),$o={paint:new Gi({\\\"hillshade-illumination-direction\\\":new ji(Dt.paint_hillshade[\\\"hillshade-illumination-direction\\\"]),\\\"hillshade-illumination-anchor\\\":new ji(Dt.paint_hillshade[\\\"hillshade-illumination-anchor\\\"]),\\\"hillshade-exaggeration\\\":new ji(Dt.paint_hillshade[\\\"hillshade-exaggeration\\\"]),\\\"hillshade-shadow-color\\\":new ji(Dt.paint_hillshade[\\\"hillshade-shadow-color\\\"]),\\\"hillshade-highlight-color\\\":new ji(Dt.paint_hillshade[\\\"hillshade-highlight-color\\\"]),\\\"hillshade-accent-color\\\":new ji(Dt.paint_hillshade[\\\"hillshade-accent-color\\\"])})},Qo=function(t){function e(e){t.call(this,e,$o)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.hasOffscreenPass=function(){return 0!==this.paint.get(\\\"hillshade-exaggeration\\\")&&\\\"none\\\"!==this.visibility},e}(Yi),ts=Ki([{name:\\\"a_pos\\\",components:2,type:\\\"Int16\\\"}],4).members,es=ns,rs=ns;function ns(t,e,r){r=r||2;var n,i,a,o,s,l,u,c=e&&e.length,f=c?e[0]*r:t.length,h=is(t,0,f,r,!0),p=[];if(!h||h.next===h.prev)return p;if(c&&(h=function(t,e,r,n){var i,a,o,s=[];for(i=0,a=e.length;i<a;i++)(o=is(t,e[i]*n,i<a-1?e[i+1]*n:t.length,n,!1))===o.next&&(o.steiner=!0),s.push(vs(o));for(s.sort(fs),i=0;i<s.length;i++)hs(s[i],r),r=as(r,r.next);return r}(t,e,h,r)),t.length>80*r){n=a=t[0],i=o=t[1];for(var d=r;d<f;d+=r)(s=t[d])<n&&(n=s),(l=t[d+1])<i&&(i=l),s>a&&(a=s),l>o&&(o=l);u=0!==(u=Math.max(a-n,o-i))?1/u:0}return os(h,p,r,n,i,u),p}function is(t,e,r,n,i){var a,o;if(i===Es(t,e,r,n)>0)for(a=e;a<r;a+=n)o=As(a,t[a],t[a+1],o);else for(a=r-n;a>=e;a-=n)o=As(a,t[a],t[a+1],o);return o&&xs(o,o.next)&&(Ms(o),o=o.next),o}function as(t,e){if(!t)return t;e||(e=t);var r,n=t;do{if(r=!1,n.steiner||!xs(n,n.next)&&0!==ms(n.prev,n,n.next))n=n.next;else{if(Ms(n),(n=e=n.prev)===n.next)break;r=!0}}while(r||n!==e);return e}function os(t,e,r,n,i,a,o){if(t){!o&&a&&function(t,e,r,n){var i=t;do{null===i.z&&(i.z=ds(i.x,i.y,e,r,n)),i.prevZ=i.prev,i.nextZ=i.next,i=i.next}while(i!==t);i.prevZ.nextZ=null,i.prevZ=null,function(t){var e,r,n,i,a,o,s,l,u=1;do{for(r=t,t=null,a=null,o=0;r;){for(o++,n=r,s=0,e=0;e<u&&(s++,n=n.nextZ);e++);for(l=u;s>0||l>0&&n;)0!==s&&(0===l||!n||r.z<=n.z)?(i=r,r=r.nextZ,s--):(i=n,n=n.nextZ,l--),a?a.nextZ=i:t=i,i.prevZ=a,a=i;r=n}a.nextZ=null,u*=2}while(o>1)}(i)}(t,n,i,a);for(var s,l,u=t;t.prev!==t.next;)if(s=t.prev,l=t.next,a?ls(t,n,i,a):ss(t))e.push(s.i/r),e.push(t.i/r),e.push(l.i/r),Ms(t),t=l.next,u=l.next;else if((t=l)===u){o?1===o?os(t=us(as(t),e,r),e,r,n,i,a,2):2===o&&cs(t,e,r,n,i,a):os(as(t),e,r,n,i,a,1);break}}}function ss(t){var e=t.prev,r=t,n=t.next;if(ms(e,r,n)>=0)return!1;for(var i=t.next.next;i!==t.prev;){if(gs(e.x,e.y,r.x,r.y,n.x,n.y,i.x,i.y)&&ms(i.prev,i,i.next)>=0)return!1;i=i.next}return!0}function ls(t,e,r,n){var i=t.prev,a=t,o=t.next;if(ms(i,a,o)>=0)return!1;for(var s=i.x<a.x?i.x<o.x?i.x:o.x:a.x<o.x?a.x:o.x,l=i.y<a.y?i.y<o.y?i.y:o.y:a.y<o.y?a.y:o.y,u=i.x>a.x?i.x>o.x?i.x:o.x:a.x>o.x?a.x:o.x,c=i.y>a.y?i.y>o.y?i.y:o.y:a.y>o.y?a.y:o.y,f=ds(s,l,e,r,n),h=ds(u,c,e,r,n),p=t.prevZ,d=t.nextZ;p&&p.z>=f&&d&&d.z<=h;){if(p!==t.prev&&p!==t.next&&gs(i.x,i.y,a.x,a.y,o.x,o.y,p.x,p.y)&&ms(p.prev,p,p.next)>=0)return!1;if(p=p.prevZ,d!==t.prev&&d!==t.next&&gs(i.x,i.y,a.x,a.y,o.x,o.y,d.x,d.y)&&ms(d.prev,d,d.next)>=0)return!1;d=d.nextZ}for(;p&&p.z>=f;){if(p!==t.prev&&p!==t.next&&gs(i.x,i.y,a.x,a.y,o.x,o.y,p.x,p.y)&&ms(p.prev,p,p.next)>=0)return!1;p=p.prevZ}for(;d&&d.z<=h;){if(d!==t.prev&&d!==t.next&&gs(i.x,i.y,a.x,a.y,o.x,o.y,d.x,d.y)&&ms(d.prev,d,d.next)>=0)return!1;d=d.nextZ}return!0}function us(t,e,r){var n=t;do{var i=n.prev,a=n.next.next;!xs(i,a)&&bs(i,n,n.next,a)&&Ts(i,a)&&Ts(a,i)&&(e.push(i.i/r),e.push(n.i/r),e.push(a.i/r),Ms(n),Ms(n.next),n=t=a),n=n.next}while(n!==t);return as(n)}function cs(t,e,r,n,i,a){var o=t;do{for(var s=o.next.next;s!==o.prev;){if(o.i!==s.i&&ys(o,s)){var l=ks(o,s);return o=as(o,o.next),l=as(l,l.next),os(o,e,r,n,i,a),void os(l,e,r,n,i,a)}s=s.next}o=o.next}while(o!==t)}function fs(t,e){return t.x-e.x}function hs(t,e){if(e=function(t,e){var r,n=e,i=t.x,a=t.y,o=-1/0;do{if(a<=n.y&&a>=n.next.y&&n.next.y!==n.y){var s=n.x+(a-n.y)*(n.next.x-n.x)/(n.next.y-n.y);if(s<=i&&s>o){if(o=s,s===i){if(a===n.y)return n;if(a===n.next.y)return n.next}r=n.x<n.next.x?n:n.next}}n=n.next}while(n!==e);if(!r)return null;if(i===o)return r;var l,u=r,c=r.x,f=r.y,h=1/0;n=r;do{i>=n.x&&n.x>=c&&i!==n.x&&gs(a<f?i:o,a,c,f,a<f?o:i,a,n.x,n.y)&&(l=Math.abs(a-n.y)/(i-n.x),Ts(n,t)&&(l<h||l===h&&(n.x>r.x||n.x===r.x&&ps(r,n)))&&(r=n,h=l)),n=n.next}while(n!==u);return r}(t,e)){var r=ks(e,t);as(e,e.next),as(r,r.next)}}function ps(t,e){return ms(t.prev,t,e.prev)<0&&ms(e.next,t,t.next)<0}function ds(t,e,r,n,i){return(t=1431655765&((t=858993459&((t=252645135&((t=16711935&((t=32767*(t-r)*i)|t<<8))|t<<4))|t<<2))|t<<1))|(e=1431655765&((e=858993459&((e=252645135&((e=16711935&((e=32767*(e-n)*i)|e<<8))|e<<4))|e<<2))|e<<1))<<1}function vs(t){var e=t,r=t;do{(e.x<r.x||e.x===r.x&&e.y<r.y)&&(r=e),e=e.next}while(e!==t);return r}function gs(t,e,r,n,i,a,o,s){return(i-o)*(e-s)-(t-o)*(a-s)>=0&&(t-o)*(n-s)-(r-o)*(e-s)>=0&&(r-o)*(a-s)-(i-o)*(n-s)>=0}function ys(t,e){return t.next.i!==e.i&&t.prev.i!==e.i&&!function(t,e){var r=t;do{if(r.i!==t.i&&r.next.i!==t.i&&r.i!==e.i&&r.next.i!==e.i&&bs(r,r.next,t,e))return!0;r=r.next}while(r!==t);return!1}(t,e)&&(Ts(t,e)&&Ts(e,t)&&function(t,e){var r=t,n=!1,i=(t.x+e.x)/2,a=(t.y+e.y)/2;do{r.y>a!=r.next.y>a&&r.next.y!==r.y&&i<(r.next.x-r.x)*(a-r.y)/(r.next.y-r.y)+r.x&&(n=!n),r=r.next}while(r!==t);return n}(t,e)&&(ms(t.prev,t,e.prev)||ms(t,e.prev,e))||xs(t,e)&&ms(t.prev,t,t.next)>0&&ms(e.prev,e,e.next)>0)}function ms(t,e,r){return(e.y-t.y)*(r.x-e.x)-(e.x-t.x)*(r.y-e.y)}function xs(t,e){return t.x===e.x&&t.y===e.y}function bs(t,e,r,n){var i=ws(ms(t,e,r)),a=ws(ms(t,e,n)),o=ws(ms(r,n,t)),s=ws(ms(r,n,e));return i!==a&&o!==s||!(0!==i||!_s(t,r,e))||!(0!==a||!_s(t,n,e))||!(0!==o||!_s(r,t,n))||!(0!==s||!_s(r,e,n))}function _s(t,e,r){return e.x<=Math.max(t.x,r.x)&&e.x>=Math.min(t.x,r.x)&&e.y<=Math.max(t.y,r.y)&&e.y>=Math.min(t.y,r.y)}function ws(t){return t>0?1:t<0?-1:0}function Ts(t,e){return ms(t.prev,t,t.next)<0?ms(t,e,t.next)>=0&&ms(t,t.prev,e)>=0:ms(t,e,t.prev)<0||ms(t,t.next,e)<0}function ks(t,e){var r=new Ss(t.i,t.x,t.y),n=new Ss(e.i,e.x,e.y),i=t.next,a=e.prev;return t.next=e,e.prev=t,r.next=i,i.prev=r,n.next=r,r.prev=n,a.next=n,n.prev=a,n}function As(t,e,r,n){var i=new Ss(t,e,r);return n?(i.next=n.next,i.prev=n,n.next.prev=i,n.next=i):(i.prev=i,i.next=i),i}function Ms(t){t.next.prev=t.prev,t.prev.next=t.next,t.prevZ&&(t.prevZ.nextZ=t.nextZ),t.nextZ&&(t.nextZ.prevZ=t.prevZ)}function Ss(t,e,r){this.i=t,this.x=e,this.y=r,this.prev=null,this.next=null,this.z=null,this.prevZ=null,this.nextZ=null,this.steiner=!1}function Es(t,e,r,n){for(var i=0,a=e,o=r-n;a<r;a+=n)i+=(t[o]-t[a])*(t[a+1]+t[o+1]),o=a;return i}function Ls(t,e,r,n,i){Cs(t,e,r||0,n||t.length-1,i||Os)}function Cs(t,e,r,n,i){for(;n>r;){if(n-r>600){var a=n-r+1,o=e-r+1,s=Math.log(a),l=.5*Math.exp(2*s/3),u=.5*Math.sqrt(s*l*(a-l)/a)*(o-a/2<0?-1:1);Cs(t,e,Math.max(r,Math.floor(e-o*l/a+u)),Math.min(n,Math.floor(e+(a-o)*l/a+u)),i)}var c=t[e],f=r,h=n;for(Ps(t,r,e),i(t[n],c)>0&&Ps(t,r,n);f<h;){for(Ps(t,f,h),f++,h--;i(t[f],c)<0;)f++;for(;i(t[h],c)>0;)h--}0===i(t[r],c)?Ps(t,r,h):Ps(t,++h,n),h<=e&&(r=h+1),e<=h&&(n=h-1)}}function Ps(t,e,r){var n=t[e];t[e]=t[r],t[r]=n}function Os(t,e){return t<e?-1:t>e?1:0}function Is(t,e){var r=t.length;if(r<=1)return[t];for(var n,i,a=[],o=0;o<r;o++){var s=k(t[o]);0!==s&&(t[o].area=Math.abs(s),void 0===i&&(i=s<0),i===s<0?(n&&a.push(n),n=[t[o]]):n.push(t[o]))}if(n&&a.push(n),e>1)for(var l=0;l<a.length;l++)a[l].length<=e||(Ls(a[l],e,1,a[l].length-1,Ds),a[l]=a[l].slice(0,e));return a}function Ds(t,e){return e.area-t.area}function zs(t,e,r){for(var n=r.patternDependencies,i=!1,a=0,o=e;a<o.length;a+=1){var s=o[a].paint.get(t+\\\"-pattern\\\");s.isConstant()||(i=!0);var l=s.constantOr(null);l&&(i=!0,n[l.to]=!0,n[l.from]=!0)}return i}function Rs(t,e,r,n,i){for(var a=i.patternDependencies,o=0,s=e;o<s.length;o+=1){var l=s[o],u=l.paint.get(t+\\\"-pattern\\\").value;if(\\\"constant\\\"!==u.kind){var c=u.evaluate({zoom:n-1},r,{},i.availableImages),f=u.evaluate({zoom:n},r,{},i.availableImages),h=u.evaluate({zoom:n+1},r,{},i.availableImages);c=c&&c.name?c.name:c,f=f&&f.name?f.name:f,h=h&&h.name?h.name:h,a[c]=!0,a[f]=!0,a[h]=!0,r.patterns[l.id]={min:c,mid:f,max:h}}}return r}ns.deviation=function(t,e,r,n){var i=e&&e.length,a=i?e[0]*r:t.length,o=Math.abs(Es(t,0,a,r));if(i)for(var s=0,l=e.length;s<l;s++){var u=e[s]*r,c=s<l-1?e[s+1]*r:t.length;o-=Math.abs(Es(t,u,c,r))}var f=0;for(s=0;s<n.length;s+=3){var h=n[s]*r,p=n[s+1]*r,d=n[s+2]*r;f+=Math.abs((t[h]-t[d])*(t[p+1]-t[h+1])-(t[h]-t[p])*(t[d+1]-t[h+1]))}return 0===o&&0===f?0:Math.abs((f-o)/o)},ns.flatten=function(t){for(var e=t[0][0].length,r={vertices:[],holes:[],dimensions:e},n=0,i=0;i<t.length;i++){for(var a=0;a<t[i].length;a++)for(var o=0;o<e;o++)r.vertices.push(t[i][a][o]);i>0&&(n+=t[i-1].length,r.holes.push(n))}return r},es.default=rs;var Fs=function(t){this.zoom=t.zoom,this.overscaling=t.overscaling,this.layers=t.layers,this.layerIds=this.layers.map((function(t){return t.id})),this.index=t.index,this.hasPattern=!1,this.patternFeatures=[],this.layoutVertexArray=new Qi,this.indexArray=new fa,this.indexArray2=new ya,this.programConfigurations=new so(ts,t.layers,t.zoom),this.segments=new Oa,this.segments2=new Oa,this.stateDependentLayerIds=this.layers.filter((function(t){return t.isStateDependent()})).map((function(t){return t.id}))};Fs.prototype.populate=function(t,e,r){this.hasPattern=zs(\\\"fill\\\",this.layers,e);for(var n=this.layers[0].layout.get(\\\"fill-sort-key\\\"),i=[],a=0,o=t;a<o.length;a+=1){var s=o[a],l=s.feature,u=s.id,c=s.index,f=s.sourceLayerIndex,h=this.layers[0]._featureFilter.needGeometry,p={type:l.type,id:u,properties:l.properties,geometry:h?po(l):[]};if(this.layers[0]._featureFilter.filter(new Pi(this.zoom),p,r)){h||(p.geometry=po(l));var d=n?n.evaluate(p,{},r,e.availableImages):void 0,v={id:u,properties:l.properties,type:l.type,sourceLayerIndex:f,index:c,geometry:p.geometry,patterns:{},sortKey:d};i.push(v)}}n&&i.sort((function(t,e){return t.sortKey-e.sortKey}));for(var g=0,y=i;g<y.length;g+=1){var m=y[g],x=m,b=x.geometry,_=x.index,w=x.sourceLayerIndex;if(this.hasPattern){var T=Rs(\\\"fill\\\",this.layers,m,this.zoom,e);this.patternFeatures.push(T)}else this.addFeature(m,b,_,r,{});var k=t[_].feature;e.featureIndex.insert(k,b,_,w,this.index)}},Fs.prototype.update=function(t,e,r){this.stateDependentLayers.length&&this.programConfigurations.updatePaintArrays(t,e,this.stateDependentLayers,r)},Fs.prototype.addFeatures=function(t,e,r){for(var n=0,i=this.patternFeatures;n<i.length;n+=1){var a=i[n];this.addFeature(a,a.geometry,a.index,e,r)}},Fs.prototype.isEmpty=function(){return 0===this.layoutVertexArray.length},Fs.prototype.uploadPending=function(){return!this.uploaded||this.programConfigurations.needsUpload},Fs.prototype.upload=function(t){this.uploaded||(this.layoutVertexBuffer=t.createVertexBuffer(this.layoutVertexArray,ts),this.indexBuffer=t.createIndexBuffer(this.indexArray),this.indexBuffer2=t.createIndexBuffer(this.indexArray2)),this.programConfigurations.upload(t),this.uploaded=!0},Fs.prototype.destroy=function(){this.layoutVertexBuffer&&(this.layoutVertexBuffer.destroy(),this.indexBuffer.destroy(),this.indexBuffer2.destroy(),this.programConfigurations.destroy(),this.segments.destroy(),this.segments2.destroy())},Fs.prototype.addFeature=function(t,e,r,n,i){for(var a=0,o=Is(e,500);a<o.length;a+=1){for(var s=o[a],l=0,u=0,c=s;u<c.length;u+=1)l+=c[u].length;for(var f=this.segments.prepareSegment(l,this.layoutVertexArray,this.indexArray),h=f.vertexLength,p=[],d=[],v=0,g=s;v<g.length;v+=1){var y=g[v];if(0!==y.length){y!==s[0]&&d.push(p.length/2);var m=this.segments2.prepareSegment(y.length,this.layoutVertexArray,this.indexArray2),x=m.vertexLength;this.layoutVertexArray.emplaceBack(y[0].x,y[0].y),this.indexArray2.emplaceBack(x+y.length-1,x),p.push(y[0].x),p.push(y[0].y);for(var b=1;b<y.length;b++)this.layoutVertexArray.emplaceBack(y[b].x,y[b].y),this.indexArray2.emplaceBack(x+b-1,x+b),p.push(y[b].x),p.push(y[b].y);m.vertexLength+=y.length,m.primitiveLength+=y.length}}for(var _=es(p,d),w=0;w<_.length;w+=3)this.indexArray.emplaceBack(h+_[w],h+_[w+1],h+_[w+2]);f.vertexLength+=l,f.primitiveLength+=_.length/3}this.programConfigurations.populatePaintArrays(this.layoutVertexArray.length,t,r,i,n)},ni(\\\"FillBucket\\\",Fs,{omit:[\\\"layers\\\",\\\"patternFeatures\\\"]});var Bs=new Gi({\\\"fill-sort-key\\\":new Ui(Dt.layout_fill[\\\"fill-sort-key\\\"])}),Ns={paint:new Gi({\\\"fill-antialias\\\":new ji(Dt.paint_fill[\\\"fill-antialias\\\"]),\\\"fill-opacity\\\":new Ui(Dt.paint_fill[\\\"fill-opacity\\\"]),\\\"fill-color\\\":new Ui(Dt.paint_fill[\\\"fill-color\\\"]),\\\"fill-outline-color\\\":new Ui(Dt.paint_fill[\\\"fill-outline-color\\\"]),\\\"fill-translate\\\":new ji(Dt.paint_fill[\\\"fill-translate\\\"]),\\\"fill-translate-anchor\\\":new ji(Dt.paint_fill[\\\"fill-translate-anchor\\\"]),\\\"fill-pattern\\\":new Vi(Dt.paint_fill[\\\"fill-pattern\\\"])}),layout:Bs},js=function(t){function e(e){t.call(this,e,Ns)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.recalculate=function(e,r){t.prototype.recalculate.call(this,e,r);var n=this.paint._values[\\\"fill-outline-color\\\"];\\\"constant\\\"===n.value.kind&&void 0===n.value.value&&(this.paint._values[\\\"fill-outline-color\\\"]=this.paint._values[\\\"fill-color\\\"])},e.prototype.createBucket=function(t){return new Fs(t)},e.prototype.queryRadius=function(){return Lo(this.paint.get(\\\"fill-translate\\\"))},e.prototype.queryIntersectsFeature=function(t,e,r,n,i,a,o){return xo(Co(t,this.paint.get(\\\"fill-translate\\\"),this.paint.get(\\\"fill-translate-anchor\\\"),a.angle,o),n)},e.prototype.isTileClipped=function(){return!0},e}(Yi),Us=Ki([{name:\\\"a_pos\\\",components:2,type:\\\"Int16\\\"},{name:\\\"a_normal_ed\\\",components:4,type:\\\"Int16\\\"}],4).members,Vs=Hs;function Hs(t,e,r,n,i){this.properties={},this.extent=r,this.type=0,this._pbf=t,this._geometry=-1,this._keys=n,this._values=i,t.readFields(qs,this,e)}function qs(t,e,r){1==t?e.id=r.readVarint():2==t?function(t,e){for(var r=t.readVarint()+t.pos;t.pos<r;){var n=e._keys[t.readVarint()],i=e._values[t.readVarint()];e.properties[n]=i}}(r,e):3==t?e.type=r.readVarint():4==t&&(e._geometry=r.pos)}function Gs(t){for(var e,r,n=0,i=0,a=t.length,o=a-1;i<a;o=i++)e=t[i],n+=((r=t[o]).x-e.x)*(e.y+r.y);return n}Hs.types=[\\\"Unknown\\\",\\\"Point\\\",\\\"LineString\\\",\\\"Polygon\\\"],Hs.prototype.loadGeometry=function(){var t=this._pbf;t.pos=this._geometry;for(var e,r=t.readVarint()+t.pos,n=1,i=0,o=0,s=0,l=[];t.pos<r;){if(i<=0){var u=t.readVarint();n=7&u,i=u>>3}if(i--,1===n||2===n)o+=t.readSVarint(),s+=t.readSVarint(),1===n&&(e&&l.push(e),e=[]),e.push(new a(o,s));else{if(7!==n)throw new Error(\\\"unknown command \\\"+n);e&&e.push(e[0].clone())}}return e&&l.push(e),l},Hs.prototype.bbox=function(){var t=this._pbf;t.pos=this._geometry;for(var e=t.readVarint()+t.pos,r=1,n=0,i=0,a=0,o=1/0,s=-1/0,l=1/0,u=-1/0;t.pos<e;){if(n<=0){var c=t.readVarint();r=7&c,n=c>>3}if(n--,1===r||2===r)(i+=t.readSVarint())<o&&(o=i),i>s&&(s=i),(a+=t.readSVarint())<l&&(l=a),a>u&&(u=a);else if(7!==r)throw new Error(\\\"unknown command \\\"+r)}return[o,l,s,u]},Hs.prototype.toGeoJSON=function(t,e,r){var n,i,a=this.extent*Math.pow(2,r),o=this.extent*t,s=this.extent*e,l=this.loadGeometry(),u=Hs.types[this.type];function c(t){for(var e=0;e<t.length;e++){var r=t[e],n=180-360*(r.y+s)/a;t[e]=[360*(r.x+o)/a-180,360/Math.PI*Math.atan(Math.exp(n*Math.PI/180))-90]}}switch(this.type){case 1:var f=[];for(n=0;n<l.length;n++)f[n]=l[n][0];c(l=f);break;case 2:for(n=0;n<l.length;n++)c(l[n]);break;case 3:for(l=function(t){var e=t.length;if(e<=1)return[t];for(var r,n,i=[],a=0;a<e;a++){var o=Gs(t[a]);0!==o&&(void 0===n&&(n=o<0),n===o<0?(r&&i.push(r),r=[t[a]]):r.push(t[a]))}return r&&i.push(r),i}(l),n=0;n<l.length;n++)for(i=0;i<l[n].length;i++)c(l[n][i])}1===l.length?l=l[0]:u=\\\"Multi\\\"+u;var h={type:\\\"Feature\\\",geometry:{type:u,coordinates:l},properties:this.properties};return\\\"id\\\"in this&&(h.id=this.id),h};var Zs=Ys;function Ys(t,e){this.version=1,this.name=null,this.extent=4096,this.length=0,this._pbf=t,this._keys=[],this._values=[],this._features=[],t.readFields(Ws,this,e),this.length=this._features.length}function Ws(t,e,r){15===t?e.version=r.readVarint():1===t?e.name=r.readString():5===t?e.extent=r.readVarint():2===t?e._features.push(r.pos):3===t?e._keys.push(r.readString()):4===t&&e._values.push(function(t){for(var e=null,r=t.readVarint()+t.pos;t.pos<r;){var n=t.readVarint()>>3;e=1===n?t.readString():2===n?t.readFloat():3===n?t.readDouble():4===n?t.readVarint64():5===n?t.readVarint():6===n?t.readSVarint():7===n?t.readBoolean():null}return e}(r))}function Xs(t,e,r){if(3===t){var n=new Zs(r,r.readVarint()+r.pos);n.length&&(e[n.name]=n)}}Ys.prototype.feature=function(t){if(t<0||t>=this._features.length)throw new Error(\\\"feature index out of bounds\\\");this._pbf.pos=this._features[t];var e=this._pbf.readVarint()+this._pbf.pos;return new Vs(this._pbf,e,this.extent,this._keys,this._values)};var Js={VectorTile:function(t,e){this.layers=t.readFields(Xs,{},e)},VectorTileFeature:Vs,VectorTileLayer:Zs},Ks=Js.VectorTileFeature.types,$s=Math.pow(2,13);function Qs(t,e,r,n,i,a,o,s){t.emplaceBack(e,r,2*Math.floor(n*$s)+o,i*$s*2,a*$s*2,Math.round(s))}var tl=function(t){this.zoom=t.zoom,this.overscaling=t.overscaling,this.layers=t.layers,this.layerIds=this.layers.map((function(t){return t.id})),this.index=t.index,this.hasPattern=!1,this.layoutVertexArray=new ea,this.indexArray=new fa,this.programConfigurations=new so(Us,t.layers,t.zoom),this.segments=new Oa,this.stateDependentLayerIds=this.layers.filter((function(t){return t.isStateDependent()})).map((function(t){return t.id}))};function el(t,e){return t.x===e.x&&(t.x<0||t.x>co)||t.y===e.y&&(t.y<0||t.y>co)}tl.prototype.populate=function(t,e,r){this.features=[],this.hasPattern=zs(\\\"fill-extrusion\\\",this.layers,e);for(var n=0,i=t;n<i.length;n+=1){var a=i[n],o=a.feature,s=a.id,l=a.index,u=a.sourceLayerIndex,c=this.layers[0]._featureFilter.needGeometry,f={type:o.type,id:s,properties:o.properties,geometry:c?po(o):[]};if(this.layers[0]._featureFilter.filter(new Pi(this.zoom),f,r)){var h={id:s,sourceLayerIndex:u,index:l,geometry:c?f.geometry:po(o),properties:o.properties,type:o.type,patterns:{}};void 0!==o.id&&(h.id=o.id),this.hasPattern?this.features.push(Rs(\\\"fill-extrusion\\\",this.layers,h,this.zoom,e)):this.addFeature(h,h.geometry,l,r,{}),e.featureIndex.insert(o,h.geometry,l,u,this.index,!0)}}},tl.prototype.addFeatures=function(t,e,r){for(var n=0,i=this.features;n<i.length;n+=1){var a=i[n],o=a.geometry;this.addFeature(a,o,a.index,e,r)}},tl.prototype.update=function(t,e,r){this.stateDependentLayers.length&&this.programConfigurations.updatePaintArrays(t,e,this.stateDependentLayers,r)},tl.prototype.isEmpty=function(){return 0===this.layoutVertexArray.length},tl.prototype.uploadPending=function(){return!this.uploaded||this.programConfigurations.needsUpload},tl.prototype.upload=function(t){this.uploaded||(this.layoutVertexBuffer=t.createVertexBuffer(this.layoutVertexArray,Us),this.indexBuffer=t.createIndexBuffer(this.indexArray)),this.programConfigurations.upload(t),this.uploaded=!0},tl.prototype.destroy=function(){this.layoutVertexBuffer&&(this.layoutVertexBuffer.destroy(),this.indexBuffer.destroy(),this.programConfigurations.destroy(),this.segments.destroy())},tl.prototype.addFeature=function(t,e,r,n,i){for(var a=0,o=Is(e,500);a<o.length;a+=1){for(var s=o[a],l=0,u=0,c=s;u<c.length;u+=1)l+=c[u].length;for(var f=this.segments.prepareSegment(4,this.layoutVertexArray,this.indexArray),h=0,p=s;h<p.length;h+=1){var d=p[h];if(0!==d.length&&!((O=d).every((function(t){return t.x<0}))||O.every((function(t){return t.x>co}))||O.every((function(t){return t.y<0}))||O.every((function(t){return t.y>co}))))for(var v=0,g=0;g<d.length;g++){var y=d[g];if(g>=1){var m=d[g-1];if(!el(y,m)){f.vertexLength+4>Oa.MAX_VERTEX_ARRAY_LENGTH&&(f=this.segments.prepareSegment(4,this.layoutVertexArray,this.indexArray));var x=y.sub(m)._perp()._unit(),b=m.dist(y);v+b>32768&&(v=0),Qs(this.layoutVertexArray,y.x,y.y,x.x,x.y,0,0,v),Qs(this.layoutVertexArray,y.x,y.y,x.x,x.y,0,1,v),v+=b,Qs(this.layoutVertexArray,m.x,m.y,x.x,x.y,0,0,v),Qs(this.layoutVertexArray,m.x,m.y,x.x,x.y,0,1,v);var _=f.vertexLength;this.indexArray.emplaceBack(_,_+2,_+1),this.indexArray.emplaceBack(_+1,_+2,_+3),f.vertexLength+=4,f.primitiveLength+=2}}}}if(f.vertexLength+l>Oa.MAX_VERTEX_ARRAY_LENGTH&&(f=this.segments.prepareSegment(l,this.layoutVertexArray,this.indexArray)),\\\"Polygon\\\"===Ks[t.type]){for(var w=[],T=[],k=f.vertexLength,A=0,M=s;A<M.length;A+=1){var S=M[A];if(0!==S.length){S!==s[0]&&T.push(w.length/2);for(var E=0;E<S.length;E++){var L=S[E];Qs(this.layoutVertexArray,L.x,L.y,0,0,1,1,0),w.push(L.x),w.push(L.y)}}}for(var C=es(w,T),P=0;P<C.length;P+=3)this.indexArray.emplaceBack(k+C[P],k+C[P+2],k+C[P+1]);f.primitiveLength+=C.length/3,f.vertexLength+=l}}var O;this.programConfigurations.populatePaintArrays(this.layoutVertexArray.length,t,r,i,n)},ni(\\\"FillExtrusionBucket\\\",tl,{omit:[\\\"layers\\\",\\\"features\\\"]});var rl={paint:new Gi({\\\"fill-extrusion-opacity\\\":new ji(Dt[\\\"paint_fill-extrusion\\\"][\\\"fill-extrusion-opacity\\\"]),\\\"fill-extrusion-color\\\":new Ui(Dt[\\\"paint_fill-extrusion\\\"][\\\"fill-extrusion-color\\\"]),\\\"fill-extrusion-translate\\\":new ji(Dt[\\\"paint_fill-extrusion\\\"][\\\"fill-extrusion-translate\\\"]),\\\"fill-extrusion-translate-anchor\\\":new ji(Dt[\\\"paint_fill-extrusion\\\"][\\\"fill-extrusion-translate-anchor\\\"]),\\\"fill-extrusion-pattern\\\":new Vi(Dt[\\\"paint_fill-extrusion\\\"][\\\"fill-extrusion-pattern\\\"]),\\\"fill-extrusion-height\\\":new Ui(Dt[\\\"paint_fill-extrusion\\\"][\\\"fill-extrusion-height\\\"]),\\\"fill-extrusion-base\\\":new Ui(Dt[\\\"paint_fill-extrusion\\\"][\\\"fill-extrusion-base\\\"]),\\\"fill-extrusion-vertical-gradient\\\":new ji(Dt[\\\"paint_fill-extrusion\\\"][\\\"fill-extrusion-vertical-gradient\\\"])})},nl=function(t){function e(e){t.call(this,e,rl)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.createBucket=function(t){return new tl(t)},e.prototype.queryRadius=function(){return Lo(this.paint.get(\\\"fill-extrusion-translate\\\"))},e.prototype.is3D=function(){return!0},e.prototype.queryIntersectsFeature=function(t,e,r,n,i,o,s,l){var u=Co(t,this.paint.get(\\\"fill-extrusion-translate\\\"),this.paint.get(\\\"fill-extrusion-translate-anchor\\\"),o.angle,s),c=this.paint.get(\\\"fill-extrusion-height\\\").evaluate(e,r),f=this.paint.get(\\\"fill-extrusion-base\\\").evaluate(e,r),h=function(t,e,r,n){for(var i=[],o=0,s=t;o<s.length;o+=1){var l=s[o],u=[l.x,l.y,n,1];No(u,u,e),i.push(new a(u[0]/u[3],u[1]/u[3]))}return i}(u,l,0,0),p=function(t,e,r,n){for(var i=[],o=[],s=n[8]*e,l=n[9]*e,u=n[10]*e,c=n[11]*e,f=n[8]*r,h=n[9]*r,p=n[10]*r,d=n[11]*r,v=0,g=t;v<g.length;v+=1){for(var y=[],m=[],x=0,b=g[v];x<b.length;x+=1){var _=b[x],w=_.x,T=_.y,k=n[0]*w+n[4]*T+n[12],A=n[1]*w+n[5]*T+n[13],M=n[2]*w+n[6]*T+n[14],S=n[3]*w+n[7]*T+n[15],E=M+u,L=S+c,C=k+f,P=A+h,O=M+p,I=S+d,D=new a((k+s)/L,(A+l)/L);D.z=E/L,y.push(D);var z=new a(C/I,P/I);z.z=O/I,m.push(z)}i.push(y),o.push(m)}return[i,o]}(n,f,c,l);return function(t,e,r){var n=1/0;xo(r,e)&&(n=al(r,e[0]));for(var i=0;i<e.length;i++)for(var a=e[i],o=t[i],s=0;s<a.length-1;s++){var l=a[s],u=a[s+1],c=o[s],f=[l,u,o[s+1],c,l];yo(r,f)&&(n=Math.min(n,al(r,f)))}return n!==1/0&&n}(p[0],p[1],h)},e}(Yi);function il(t,e){return t.x*e.x+t.y*e.y}function al(t,e){if(1===t.length){for(var r,n=0,i=e[n++];!r||i.equals(r);)if(!(r=e[n++]))return 1/0;for(;n<e.length;n++){var a=e[n],o=t[0],s=r.sub(i),l=a.sub(i),u=o.sub(i),c=il(s,s),f=il(s,l),h=il(l,l),p=il(u,s),d=il(u,l),v=c*h-f*f,g=(h*p-f*d)/v,y=(c*d-f*p)/v,m=1-g-y,x=i.z*m+r.z*g+a.z*y;if(isFinite(x))return x}return 1/0}for(var b=1/0,_=0,w=e;_<w.length;_+=1){var T=w[_];b=Math.min(b,T.z)}return b}var ol=Ki([{name:\\\"a_pos_normal\\\",components:2,type:\\\"Int16\\\"},{name:\\\"a_data\\\",components:4,type:\\\"Uint8\\\"}],4).members,sl=Js.VectorTileFeature.types,ll=Math.cos(Math.PI/180*37.5),ul=Math.pow(2,14)/.5,cl=function(t){this.zoom=t.zoom,this.overscaling=t.overscaling,this.layers=t.layers,this.layerIds=this.layers.map((function(t){return t.id})),this.index=t.index,this.hasPattern=!1,this.patternFeatures=[],this.layoutVertexArray=new ra,this.indexArray=new fa,this.programConfigurations=new so(ol,t.layers,t.zoom),this.segments=new Oa,this.stateDependentLayerIds=this.layers.filter((function(t){return t.isStateDependent()})).map((function(t){return t.id}))};cl.prototype.populate=function(t,e,r){this.hasPattern=zs(\\\"line\\\",this.layers,e);for(var n=this.layers[0].layout.get(\\\"line-sort-key\\\"),i=[],a=0,o=t;a<o.length;a+=1){var s=o[a],l=s.feature,u=s.id,c=s.index,f=s.sourceLayerIndex,h=this.layers[0]._featureFilter.needGeometry,p={type:l.type,id:u,properties:l.properties,geometry:h?po(l):[]};if(this.layers[0]._featureFilter.filter(new Pi(this.zoom),p,r)){h||(p.geometry=po(l));var d=n?n.evaluate(p,{},r):void 0,v={id:u,properties:l.properties,type:l.type,sourceLayerIndex:f,index:c,geometry:p.geometry,patterns:{},sortKey:d};i.push(v)}}n&&i.sort((function(t,e){return t.sortKey-e.sortKey}));for(var g=0,y=i;g<y.length;g+=1){var m=y[g],x=m,b=x.geometry,_=x.index,w=x.sourceLayerIndex;if(this.hasPattern){var T=Rs(\\\"line\\\",this.layers,m,this.zoom,e);this.patternFeatures.push(T)}else this.addFeature(m,b,_,r,{});var k=t[_].feature;e.featureIndex.insert(k,b,_,w,this.index)}},cl.prototype.update=function(t,e,r){this.stateDependentLayers.length&&this.programConfigurations.updatePaintArrays(t,e,this.stateDependentLayers,r)},cl.prototype.addFeatures=function(t,e,r){for(var n=0,i=this.patternFeatures;n<i.length;n+=1){var a=i[n];this.addFeature(a,a.geometry,a.index,e,r)}},cl.prototype.isEmpty=function(){return 0===this.layoutVertexArray.length},cl.prototype.uploadPending=function(){return!this.uploaded||this.programConfigurations.needsUpload},cl.prototype.upload=function(t){this.uploaded||(this.layoutVertexBuffer=t.createVertexBuffer(this.layoutVertexArray,ol),this.indexBuffer=t.createIndexBuffer(this.indexArray)),this.programConfigurations.upload(t),this.uploaded=!0},cl.prototype.destroy=function(){this.layoutVertexBuffer&&(this.layoutVertexBuffer.destroy(),this.indexBuffer.destroy(),this.programConfigurations.destroy(),this.segments.destroy())},cl.prototype.addFeature=function(t,e,r,n,i){for(var a=this.layers[0].layout,o=a.get(\\\"line-join\\\").evaluate(t,{}),s=a.get(\\\"line-cap\\\"),l=a.get(\\\"line-miter-limit\\\"),u=a.get(\\\"line-round-limit\\\"),c=0,f=e;c<f.length;c+=1){var h=f[c];this.addLine(h,t,o,s,l,u)}this.programConfigurations.populatePaintArrays(this.layoutVertexArray.length,t,r,i,n)},cl.prototype.addLine=function(t,e,r,n,i,a){if(this.distance=0,this.scaledDistance=0,this.totalDistance=0,e.properties&&e.properties.hasOwnProperty(\\\"mapbox_clip_start\\\")&&e.properties.hasOwnProperty(\\\"mapbox_clip_end\\\")){this.clipStart=+e.properties.mapbox_clip_start,this.clipEnd=+e.properties.mapbox_clip_end;for(var o=0;o<t.length-1;o++)this.totalDistance+=t[o].dist(t[o+1]);this.updateScaledDistance()}for(var s=\\\"Polygon\\\"===sl[e.type],l=t.length;l>=2&&t[l-1].equals(t[l-2]);)l--;for(var u=0;u<l-1&&t[u].equals(t[u+1]);)u++;if(!(l<(s?3:2))){\\\"bevel\\\"===r&&(i=1.05);var c,f=this.overscaling<=16?15*co/(512*this.overscaling):0,h=this.segments.prepareSegment(10*l,this.layoutVertexArray,this.indexArray),p=void 0,d=void 0,v=void 0,g=void 0;this.e1=this.e2=-1,s&&(c=t[l-2],g=t[u].sub(c)._unit()._perp());for(var y=u;y<l;y++)if(!(d=y===l-1?s?t[u+1]:void 0:t[y+1])||!t[y].equals(d)){g&&(v=g),c&&(p=c),c=t[y],g=d?d.sub(c)._unit()._perp():v;var m=(v=v||g).add(g);0===m.x&&0===m.y||m._unit();var x=v.x*g.x+v.y*g.y,b=m.x*g.x+m.y*g.y,_=0!==b?1/b:1/0,w=2*Math.sqrt(2-2*b),T=b<ll&&p&&d,k=v.x*g.y-v.y*g.x>0;if(T&&y>u){var A=c.dist(p);if(A>2*f){var M=c.sub(c.sub(p)._mult(f/A)._round());this.updateDistance(p,M),this.addCurrentVertex(M,v,0,0,h),p=M}}var S=p&&d,E=S?r:s?\\\"butt\\\":n;if(S&&\\\"round\\\"===E&&(_<a?E=\\\"miter\\\":_<=2&&(E=\\\"fakeround\\\")),\\\"miter\\\"===E&&_>i&&(E=\\\"bevel\\\"),\\\"bevel\\\"===E&&(_>2&&(E=\\\"flipbevel\\\"),_<i&&(E=\\\"miter\\\")),p&&this.updateDistance(p,c),\\\"miter\\\"===E)m._mult(_),this.addCurrentVertex(c,m,0,0,h);else if(\\\"flipbevel\\\"===E){if(_>100)m=g.mult(-1);else{var L=_*v.add(g).mag()/v.sub(g).mag();m._perp()._mult(L*(k?-1:1))}this.addCurrentVertex(c,m,0,0,h),this.addCurrentVertex(c,m.mult(-1),0,0,h)}else if(\\\"bevel\\\"===E||\\\"fakeround\\\"===E){var C=-Math.sqrt(_*_-1),P=k?C:0,O=k?0:C;if(p&&this.addCurrentVertex(c,v,P,O,h),\\\"fakeround\\\"===E)for(var I=Math.round(180*w/Math.PI/20),D=1;D<I;D++){var z=D/I;if(.5!==z){var R=z-.5;z+=z*R*(z-1)*((1.0904+x*(x*(3.55645-1.43519*x)-3.2452))*R*R+(.848013+x*(.215638*x-1.06021)))}var F=g.sub(v)._mult(z)._add(v)._unit()._mult(k?-1:1);this.addHalfVertex(c,F.x,F.y,!1,k,0,h)}d&&this.addCurrentVertex(c,g,-P,-O,h)}else if(\\\"butt\\\"===E)this.addCurrentVertex(c,m,0,0,h);else if(\\\"square\\\"===E){var B=p?1:-1;this.addCurrentVertex(c,m,B,B,h)}else\\\"round\\\"===E&&(p&&(this.addCurrentVertex(c,v,0,0,h),this.addCurrentVertex(c,v,1,1,h,!0)),d&&(this.addCurrentVertex(c,g,-1,-1,h,!0),this.addCurrentVertex(c,g,0,0,h)));if(T&&y<l-1){var N=c.dist(d);if(N>2*f){var j=c.add(d.sub(c)._mult(f/N)._round());this.updateDistance(c,j),this.addCurrentVertex(j,g,0,0,h),c=j}}}}},cl.prototype.addCurrentVertex=function(t,e,r,n,i,a){void 0===a&&(a=!1);var o=e.x+e.y*r,s=e.y-e.x*r,l=-e.x+e.y*n,u=-e.y-e.x*n;this.addHalfVertex(t,o,s,a,!1,r,i),this.addHalfVertex(t,l,u,a,!0,-n,i),this.distance>ul/2&&0===this.totalDistance&&(this.distance=0,this.addCurrentVertex(t,e,r,n,i,a))},cl.prototype.addHalfVertex=function(t,e,r,n,i,a,o){var s=t.x,l=t.y,u=.5*this.scaledDistance;this.layoutVertexArray.emplaceBack((s<<1)+(n?1:0),(l<<1)+(i?1:0),Math.round(63*e)+128,Math.round(63*r)+128,1+(0===a?0:a<0?-1:1)|(63&u)<<2,u>>6);var c=o.vertexLength++;this.e1>=0&&this.e2>=0&&(this.indexArray.emplaceBack(this.e1,this.e2,c),o.primitiveLength++),i?this.e2=c:this.e1=c},cl.prototype.updateScaledDistance=function(){this.scaledDistance=this.totalDistance>0?(this.clipStart+(this.clipEnd-this.clipStart)*this.distance/this.totalDistance)*(ul-1):this.distance},cl.prototype.updateDistance=function(t,e){this.distance+=t.dist(e),this.updateScaledDistance()},ni(\\\"LineBucket\\\",cl,{omit:[\\\"layers\\\",\\\"patternFeatures\\\"]});var fl=new Gi({\\\"line-cap\\\":new ji(Dt.layout_line[\\\"line-cap\\\"]),\\\"line-join\\\":new Ui(Dt.layout_line[\\\"line-join\\\"]),\\\"line-miter-limit\\\":new ji(Dt.layout_line[\\\"line-miter-limit\\\"]),\\\"line-round-limit\\\":new ji(Dt.layout_line[\\\"line-round-limit\\\"]),\\\"line-sort-key\\\":new Ui(Dt.layout_line[\\\"line-sort-key\\\"])}),hl={paint:new Gi({\\\"line-opacity\\\":new Ui(Dt.paint_line[\\\"line-opacity\\\"]),\\\"line-color\\\":new Ui(Dt.paint_line[\\\"line-color\\\"]),\\\"line-translate\\\":new ji(Dt.paint_line[\\\"line-translate\\\"]),\\\"line-translate-anchor\\\":new ji(Dt.paint_line[\\\"line-translate-anchor\\\"]),\\\"line-width\\\":new Ui(Dt.paint_line[\\\"line-width\\\"]),\\\"line-gap-width\\\":new Ui(Dt.paint_line[\\\"line-gap-width\\\"]),\\\"line-offset\\\":new Ui(Dt.paint_line[\\\"line-offset\\\"]),\\\"line-blur\\\":new Ui(Dt.paint_line[\\\"line-blur\\\"]),\\\"line-dasharray\\\":new Hi(Dt.paint_line[\\\"line-dasharray\\\"]),\\\"line-pattern\\\":new Vi(Dt.paint_line[\\\"line-pattern\\\"]),\\\"line-gradient\\\":new qi(Dt.paint_line[\\\"line-gradient\\\"])}),layout:fl},pl=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.possiblyEvaluate=function(e,r){return r=new Pi(Math.floor(r.zoom),{now:r.now,fadeDuration:r.fadeDuration,zoomHistory:r.zoomHistory,transition:r.transition}),t.prototype.possiblyEvaluate.call(this,e,r)},e.prototype.evaluate=function(e,r,n,i){return r=f({},r,{zoom:Math.floor(r.zoom)}),t.prototype.evaluate.call(this,e,r,n,i)},e}(Ui),dl=new pl(hl.paint.properties[\\\"line-width\\\"].specification);dl.useIntegerZoom=!0;var vl=function(t){function e(e){t.call(this,e,hl)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype._handleSpecialPaintPropertyUpdate=function(t){\\\"line-gradient\\\"===t&&this._updateGradient()},e.prototype._updateGradient=function(){var t=this._transitionablePaint._values[\\\"line-gradient\\\"].value.expression;this.gradient=Jo(t,\\\"lineProgress\\\"),this.gradientTexture=null},e.prototype.recalculate=function(e,r){t.prototype.recalculate.call(this,e,r),this.paint._values[\\\"line-floorwidth\\\"]=dl.possiblyEvaluate(this._transitioningPaint._values[\\\"line-width\\\"].value,e)},e.prototype.createBucket=function(t){return new cl(t)},e.prototype.queryRadius=function(t){var e=t,r=gl(Eo(\\\"line-width\\\",this,e),Eo(\\\"line-gap-width\\\",this,e)),n=Eo(\\\"line-offset\\\",this,e);return r/2+Math.abs(n)+Lo(this.paint.get(\\\"line-translate\\\"))},e.prototype.queryIntersectsFeature=function(t,e,r,n,i,o,s){var l=Co(t,this.paint.get(\\\"line-translate\\\"),this.paint.get(\\\"line-translate-anchor\\\"),o.angle,s),u=s/2*gl(this.paint.get(\\\"line-width\\\").evaluate(e,r),this.paint.get(\\\"line-gap-width\\\").evaluate(e,r)),c=this.paint.get(\\\"line-offset\\\").evaluate(e,r);return c&&(n=function(t,e){for(var r=[],n=new a(0,0),i=0;i<t.length;i++){for(var o=t[i],s=[],l=0;l<o.length;l++){var u=o[l-1],c=o[l],f=o[l+1],h=0===l?n:c.sub(u)._unit()._perp(),p=l===o.length-1?n:f.sub(c)._unit()._perp(),d=h._add(p)._unit(),v=d.x*p.x+d.y*p.y;d._mult(1/v),s.push(d._mult(e)._add(c))}r.push(s)}return r}(n,c*s)),function(t,e,r){for(var n=0;n<e.length;n++){var i=e[n];if(t.length>=3)for(var a=0;a<i.length;a++)if(Mo(t,i[a]))return!0;if(bo(t,i,r))return!0}return!1}(l,n,u)},e.prototype.isTileClipped=function(){return!0},e}(Yi);function gl(t,e){return e>0?e+2*t:t}var yl=Ki([{name:\\\"a_pos_offset\\\",components:4,type:\\\"Int16\\\"},{name:\\\"a_data\\\",components:4,type:\\\"Uint16\\\"},{name:\\\"a_pixeloffset\\\",components:4,type:\\\"Int16\\\"}],4),ml=Ki([{name:\\\"a_projected_pos\\\",components:3,type:\\\"Float32\\\"}],4),xl=(Ki([{name:\\\"a_fade_opacity\\\",components:1,type:\\\"Uint32\\\"}],4),Ki([{name:\\\"a_placed\\\",components:2,type:\\\"Uint8\\\"},{name:\\\"a_shift\\\",components:2,type:\\\"Float32\\\"}])),bl=(Ki([{type:\\\"Int16\\\",name:\\\"anchorPointX\\\"},{type:\\\"Int16\\\",name:\\\"anchorPointY\\\"},{type:\\\"Int16\\\",name:\\\"x1\\\"},{type:\\\"Int16\\\",name:\\\"y1\\\"},{type:\\\"Int16\\\",name:\\\"x2\\\"},{type:\\\"Int16\\\",name:\\\"y2\\\"},{type:\\\"Uint32\\\",name:\\\"featureIndex\\\"},{type:\\\"Uint16\\\",name:\\\"sourceLayerIndex\\\"},{type:\\\"Uint16\\\",name:\\\"bucketIndex\\\"}]),Ki([{name:\\\"a_pos\\\",components:2,type:\\\"Int16\\\"},{name:\\\"a_anchor_pos\\\",components:2,type:\\\"Int16\\\"},{name:\\\"a_extrude\\\",components:2,type:\\\"Int16\\\"}],4)),_l=Ki([{name:\\\"a_pos\\\",components:2,type:\\\"Float32\\\"},{name:\\\"a_radius\\\",components:1,type:\\\"Float32\\\"},{name:\\\"a_flags\\\",components:2,type:\\\"Int16\\\"}],4);function wl(t,e,r){return t.sections.forEach((function(t){t.text=function(t,e,r){var n=e.layout.get(\\\"text-transform\\\").evaluate(r,{});return\\\"uppercase\\\"===n?t=t.toLocaleUpperCase():\\\"lowercase\\\"===n&&(t=t.toLocaleLowerCase()),Ci.applyArabicShaping&&(t=Ci.applyArabicShaping(t)),t}(t.text,e,r)})),t}Ki([{name:\\\"triangle\\\",components:3,type:\\\"Uint16\\\"}]),Ki([{type:\\\"Int16\\\",name:\\\"anchorX\\\"},{type:\\\"Int16\\\",name:\\\"anchorY\\\"},{type:\\\"Uint16\\\",name:\\\"glyphStartIndex\\\"},{type:\\\"Uint16\\\",name:\\\"numGlyphs\\\"},{type:\\\"Uint32\\\",name:\\\"vertexStartIndex\\\"},{type:\\\"Uint32\\\",name:\\\"lineStartIndex\\\"},{type:\\\"Uint32\\\",name:\\\"lineLength\\\"},{type:\\\"Uint16\\\",name:\\\"segment\\\"},{type:\\\"Uint16\\\",name:\\\"lowerSize\\\"},{type:\\\"Uint16\\\",name:\\\"upperSize\\\"},{type:\\\"Float32\\\",name:\\\"lineOffsetX\\\"},{type:\\\"Float32\\\",name:\\\"lineOffsetY\\\"},{type:\\\"Uint8\\\",name:\\\"writingMode\\\"},{type:\\\"Uint8\\\",name:\\\"placedOrientation\\\"},{type:\\\"Uint8\\\",name:\\\"hidden\\\"},{type:\\\"Uint32\\\",name:\\\"crossTileID\\\"},{type:\\\"Int16\\\",name:\\\"associatedIconIndex\\\"}]),Ki([{type:\\\"Int16\\\",name:\\\"anchorX\\\"},{type:\\\"Int16\\\",name:\\\"anchorY\\\"},{type:\\\"Int16\\\",name:\\\"rightJustifiedTextSymbolIndex\\\"},{type:\\\"Int16\\\",name:\\\"centerJustifiedTextSymbolIndex\\\"},{type:\\\"Int16\\\",name:\\\"leftJustifiedTextSymbolIndex\\\"},{type:\\\"Int16\\\",name:\\\"verticalPlacedTextSymbolIndex\\\"},{type:\\\"Int16\\\",name:\\\"placedIconSymbolIndex\\\"},{type:\\\"Int16\\\",name:\\\"verticalPlacedIconSymbolIndex\\\"},{type:\\\"Uint16\\\",name:\\\"key\\\"},{type:\\\"Uint16\\\",name:\\\"textBoxStartIndex\\\"},{type:\\\"Uint16\\\",name:\\\"textBoxEndIndex\\\"},{type:\\\"Uint16\\\",name:\\\"verticalTextBoxStartIndex\\\"},{type:\\\"Uint16\\\",name:\\\"verticalTextBoxEndIndex\\\"},{type:\\\"Uint16\\\",name:\\\"iconBoxStartIndex\\\"},{type:\\\"Uint16\\\",name:\\\"iconBoxEndIndex\\\"},{type:\\\"Uint16\\\",name:\\\"verticalIconBoxStartIndex\\\"},{type:\\\"Uint16\\\",name:\\\"verticalIconBoxEndIndex\\\"},{type:\\\"Uint16\\\",name:\\\"featureIndex\\\"},{type:\\\"Uint16\\\",name:\\\"numHorizontalGlyphVertices\\\"},{type:\\\"Uint16\\\",name:\\\"numVerticalGlyphVertices\\\"},{type:\\\"Uint16\\\",name:\\\"numIconVertices\\\"},{type:\\\"Uint16\\\",name:\\\"numVerticalIconVertices\\\"},{type:\\\"Uint16\\\",name:\\\"useRuntimeCollisionCircles\\\"},{type:\\\"Uint32\\\",name:\\\"crossTileID\\\"},{type:\\\"Float32\\\",name:\\\"textBoxScale\\\"},{type:\\\"Float32\\\",components:2,name:\\\"textOffset\\\"},{type:\\\"Float32\\\",name:\\\"collisionCircleDiameter\\\"}]),Ki([{type:\\\"Float32\\\",name:\\\"offsetX\\\"}]),Ki([{type:\\\"Int16\\\",name:\\\"x\\\"},{type:\\\"Int16\\\",name:\\\"y\\\"},{type:\\\"Int16\\\",name:\\\"tileUnitDistanceFromAnchor\\\"}]);var Tl={\\\"!\\\":\\\"︕\\\",\\\"#\\\":\\\"＃\\\",$:\\\"＄\\\",\\\"%\\\":\\\"％\\\",\\\"&\\\":\\\"＆\\\",\\\"(\\\":\\\"︵\\\",\\\")\\\":\\\"︶\\\",\\\"*\\\":\\\"＊\\\",\\\"+\\\":\\\"＋\\\",\\\",\\\":\\\"︐\\\",\\\"-\\\":\\\"︲\\\",\\\".\\\":\\\"・\\\",\\\"/\\\":\\\"／\\\",\\\":\\\":\\\"︓\\\",\\\";\\\":\\\"︔\\\",\\\"<\\\":\\\"︿\\\",\\\"=\\\":\\\"＝\\\",\\\">\\\":\\\"﹀\\\",\\\"?\\\":\\\"︖\\\",\\\"@\\\":\\\"＠\\\",\\\"[\\\":\\\"﹇\\\",\\\"\\\\\\\\\\\":\\\"＼\\\",\\\"]\\\":\\\"﹈\\\",\\\"^\\\":\\\"＾\\\",_:\\\"︳\\\",\\\"`\\\":\\\"｀\\\",\\\"{\\\":\\\"︷\\\",\\\"|\\\":\\\"―\\\",\\\"}\\\":\\\"︸\\\",\\\"~\\\":\\\"～\\\",\\\"¢\\\":\\\"￠\\\",\\\"£\\\":\\\"￡\\\",\\\"¥\\\":\\\"￥\\\",\\\"¦\\\":\\\"￤\\\",\\\"¬\\\":\\\"￢\\\",\\\"¯\\\":\\\"￣\\\",\\\"–\\\":\\\"︲\\\",\\\"—\\\":\\\"︱\\\",\\\"‘\\\":\\\"﹃\\\",\\\"’\\\":\\\"﹄\\\",\\\"“\\\":\\\"﹁\\\",\\\"”\\\":\\\"﹂\\\",\\\"…\\\":\\\"︙\\\",\\\"‧\\\":\\\"・\\\",\\\"₩\\\":\\\"￦\\\",\\\"、\\\":\\\"︑\\\",\\\"。\\\":\\\"︒\\\",\\\"〈\\\":\\\"︿\\\",\\\"〉\\\":\\\"﹀\\\",\\\"《\\\":\\\"︽\\\",\\\"》\\\":\\\"︾\\\",\\\"「\\\":\\\"﹁\\\",\\\"」\\\":\\\"﹂\\\",\\\"『\\\":\\\"﹃\\\",\\\"』\\\":\\\"﹄\\\",\\\"【\\\":\\\"︻\\\",\\\"】\\\":\\\"︼\\\",\\\"〔\\\":\\\"︹\\\",\\\"〕\\\":\\\"︺\\\",\\\"〖\\\":\\\"︗\\\",\\\"〗\\\":\\\"︘\\\",\\\"！\\\":\\\"︕\\\",\\\"（\\\":\\\"︵\\\",\\\"）\\\":\\\"︶\\\",\\\"，\\\":\\\"︐\\\",\\\"－\\\":\\\"︲\\\",\\\"．\\\":\\\"・\\\",\\\"：\\\":\\\"︓\\\",\\\"；\\\":\\\"︔\\\",\\\"＜\\\":\\\"︿\\\",\\\"＞\\\":\\\"﹀\\\",\\\"？\\\":\\\"︖\\\",\\\"［\\\":\\\"﹇\\\",\\\"］\\\":\\\"﹈\\\",\\\"＿\\\":\\\"︳\\\",\\\"｛\\\":\\\"︷\\\",\\\"｜\\\":\\\"―\\\",\\\"｝\\\":\\\"︸\\\",\\\"｟\\\":\\\"︵\\\",\\\"｠\\\":\\\"︶\\\",\\\"｡\\\":\\\"︒\\\",\\\"｢\\\":\\\"﹁\\\",\\\"｣\\\":\\\"﹂\\\"};var kl=24,Al=function(t,e,r,n,i){var a,o,s=8*i-n-1,l=(1<<s)-1,u=l>>1,c=-7,f=r?i-1:0,h=r?-1:1,p=t[e+f];for(f+=h,a=p&(1<<-c)-1,p>>=-c,c+=s;c>0;a=256*a+t[e+f],f+=h,c-=8);for(o=a&(1<<-c)-1,a>>=-c,c+=n;c>0;o=256*o+t[e+f],f+=h,c-=8);if(0===a)a=1-u;else{if(a===l)return o?NaN:1/0*(p?-1:1);o+=Math.pow(2,n),a-=u}return(p?-1:1)*o*Math.pow(2,a-n)},Ml=function(t,e,r,n,i,a){var o,s,l,u=8*a-i-1,c=(1<<u)-1,f=c>>1,h=23===i?Math.pow(2,-24)-Math.pow(2,-77):0,p=n?0:a-1,d=n?1:-1,v=e<0||0===e&&1/e<0?1:0;for(e=Math.abs(e),isNaN(e)||e===1/0?(s=isNaN(e)?1:0,o=c):(o=Math.floor(Math.log(e)/Math.LN2),e*(l=Math.pow(2,-o))<1&&(o--,l*=2),(e+=o+f>=1?h/l:h*Math.pow(2,1-f))*l>=2&&(o++,l/=2),o+f>=c?(s=0,o=c):o+f>=1?(s=(e*l-1)*Math.pow(2,i),o+=f):(s=e*Math.pow(2,f-1)*Math.pow(2,i),o=0));i>=8;t[r+p]=255&s,p+=d,s/=256,i-=8);for(o=o<<i|s,u+=i;u>0;t[r+p]=255&o,p+=d,o/=256,u-=8);t[r+p-d]|=128*v},Sl=El;function El(t){this.buf=ArrayBuffer.isView&&ArrayBuffer.isView(t)?t:new Uint8Array(t||0),this.pos=0,this.type=0,this.length=this.buf.length}El.Varint=0,El.Fixed64=1,El.Bytes=2,El.Fixed32=5;var Ll=4294967296,Cl=1/Ll,Pl=\\\"undefined\\\"==typeof TextDecoder?null:new TextDecoder(\\\"utf8\\\");function Ol(t){return t.type===El.Bytes?t.readVarint()+t.pos:t.pos+1}function Il(t,e,r){return r?4294967296*e+(t>>>0):4294967296*(e>>>0)+(t>>>0)}function Dl(t,e,r){var n=e<=16383?1:e<=2097151?2:e<=268435455?3:Math.floor(Math.log(e)/(7*Math.LN2));r.realloc(n);for(var i=r.pos-1;i>=t;i--)r.buf[i+n]=r.buf[i]}function zl(t,e){for(var r=0;r<t.length;r++)e.writeVarint(t[r])}function Rl(t,e){for(var r=0;r<t.length;r++)e.writeSVarint(t[r])}function Fl(t,e){for(var r=0;r<t.length;r++)e.writeFloat(t[r])}function Bl(t,e){for(var r=0;r<t.length;r++)e.writeDouble(t[r])}function Nl(t,e){for(var r=0;r<t.length;r++)e.writeBoolean(t[r])}function jl(t,e){for(var r=0;r<t.length;r++)e.writeFixed32(t[r])}function Ul(t,e){for(var r=0;r<t.length;r++)e.writeSFixed32(t[r])}function Vl(t,e){for(var r=0;r<t.length;r++)e.writeFixed64(t[r])}function Hl(t,e){for(var r=0;r<t.length;r++)e.writeSFixed64(t[r])}function ql(t,e){return(t[e]|t[e+1]<<8|t[e+2]<<16)+16777216*t[e+3]}function Gl(t,e,r){t[r]=e,t[r+1]=e>>>8,t[r+2]=e>>>16,t[r+3]=e>>>24}function Zl(t,e){return(t[e]|t[e+1]<<8|t[e+2]<<16)+(t[e+3]<<24)}El.prototype={destroy:function(){this.buf=null},readFields:function(t,e,r){for(r=r||this.length;this.pos<r;){var n=this.readVarint(),i=n>>3,a=this.pos;this.type=7&n,t(i,e,this),this.pos===a&&this.skip(n)}return e},readMessage:function(t,e){return this.readFields(t,e,this.readVarint()+this.pos)},readFixed32:function(){var t=ql(this.buf,this.pos);return this.pos+=4,t},readSFixed32:function(){var t=Zl(this.buf,this.pos);return this.pos+=4,t},readFixed64:function(){var t=ql(this.buf,this.pos)+ql(this.buf,this.pos+4)*Ll;return this.pos+=8,t},readSFixed64:function(){var t=ql(this.buf,this.pos)+Zl(this.buf,this.pos+4)*Ll;return this.pos+=8,t},readFloat:function(){var t=Al(this.buf,this.pos,!0,23,4);return this.pos+=4,t},readDouble:function(){var t=Al(this.buf,this.pos,!0,52,8);return this.pos+=8,t},readVarint:function(t){var e,r,n=this.buf;return e=127&(r=n[this.pos++]),r<128?e:(e|=(127&(r=n[this.pos++]))<<7,r<128?e:(e|=(127&(r=n[this.pos++]))<<14,r<128?e:(e|=(127&(r=n[this.pos++]))<<21,r<128?e:function(t,e,r){var n,i,a=r.buf;if(n=(112&(i=a[r.pos++]))>>4,i<128)return Il(t,n,e);if(n|=(127&(i=a[r.pos++]))<<3,i<128)return Il(t,n,e);if(n|=(127&(i=a[r.pos++]))<<10,i<128)return Il(t,n,e);if(n|=(127&(i=a[r.pos++]))<<17,i<128)return Il(t,n,e);if(n|=(127&(i=a[r.pos++]))<<24,i<128)return Il(t,n,e);if(n|=(1&(i=a[r.pos++]))<<31,i<128)return Il(t,n,e);throw new Error(\\\"Expected varint not more than 10 bytes\\\")}(e|=(15&(r=n[this.pos]))<<28,t,this))))},readVarint64:function(){return this.readVarint(!0)},readSVarint:function(){var t=this.readVarint();return t%2==1?(t+1)/-2:t/2},readBoolean:function(){return Boolean(this.readVarint())},readString:function(){var t=this.readVarint()+this.pos,e=this.pos;return this.pos=t,t-e>=12&&Pl?function(t,e,r){return Pl.decode(t.subarray(e,r))}(this.buf,e,t):function(t,e,r){for(var n=\\\"\\\",i=e;i<r;){var a,o,s,l=t[i],u=null,c=l>239?4:l>223?3:l>191?2:1;if(i+c>r)break;1===c?l<128&&(u=l):2===c?128==(192&(a=t[i+1]))&&(u=(31&l)<<6|63&a)<=127&&(u=null):3===c?(a=t[i+1],o=t[i+2],128==(192&a)&&128==(192&o)&&((u=(15&l)<<12|(63&a)<<6|63&o)<=2047||u>=55296&&u<=57343)&&(u=null)):4===c&&(a=t[i+1],o=t[i+2],s=t[i+3],128==(192&a)&&128==(192&o)&&128==(192&s)&&((u=(15&l)<<18|(63&a)<<12|(63&o)<<6|63&s)<=65535||u>=1114112)&&(u=null)),null===u?(u=65533,c=1):u>65535&&(u-=65536,n+=String.fromCharCode(u>>>10&1023|55296),u=56320|1023&u),n+=String.fromCharCode(u),i+=c}return n}(this.buf,e,t)},readBytes:function(){var t=this.readVarint()+this.pos,e=this.buf.subarray(this.pos,t);return this.pos=t,e},readPackedVarint:function(t,e){if(this.type!==El.Bytes)return t.push(this.readVarint(e));var r=Ol(this);for(t=t||[];this.pos<r;)t.push(this.readVarint(e));return t},readPackedSVarint:function(t){if(this.type!==El.Bytes)return t.push(this.readSVarint());var e=Ol(this);for(t=t||[];this.pos<e;)t.push(this.readSVarint());return t},readPackedBoolean:function(t){if(this.type!==El.Bytes)return t.push(this.readBoolean());var e=Ol(this);for(t=t||[];this.pos<e;)t.push(this.readBoolean());return t},readPackedFloat:function(t){if(this.type!==El.Bytes)return t.push(this.readFloat());var e=Ol(this);for(t=t||[];this.pos<e;)t.push(this.readFloat());return t},readPackedDouble:function(t){if(this.type!==El.Bytes)return t.push(this.readDouble());var e=Ol(this);for(t=t||[];this.pos<e;)t.push(this.readDouble());return t},readPackedFixed32:function(t){if(this.type!==El.Bytes)return t.push(this.readFixed32());var e=Ol(this);for(t=t||[];this.pos<e;)t.push(this.readFixed32());return t},readPackedSFixed32:function(t){if(this.type!==El.Bytes)return t.push(this.readSFixed32());var e=Ol(this);for(t=t||[];this.pos<e;)t.push(this.readSFixed32());return t},readPackedFixed64:function(t){if(this.type!==El.Bytes)return t.push(this.readFixed64());var e=Ol(this);for(t=t||[];this.pos<e;)t.push(this.readFixed64());return t},readPackedSFixed64:function(t){if(this.type!==El.Bytes)return t.push(this.readSFixed64());var e=Ol(this);for(t=t||[];this.pos<e;)t.push(this.readSFixed64());return t},skip:function(t){var e=7&t;if(e===El.Varint)for(;this.buf[this.pos++]>127;);else if(e===El.Bytes)this.pos=this.readVarint()+this.pos;else if(e===El.Fixed32)this.pos+=4;else{if(e!==El.Fixed64)throw new Error(\\\"Unimplemented type: \\\"+e);this.pos+=8}},writeTag:function(t,e){this.writeVarint(t<<3|e)},realloc:function(t){for(var e=this.length||16;e<this.pos+t;)e*=2;if(e!==this.length){var r=new Uint8Array(e);r.set(this.buf),this.buf=r,this.length=e}},finish:function(){return this.length=this.pos,this.pos=0,this.buf.subarray(0,this.length)},writeFixed32:function(t){this.realloc(4),Gl(this.buf,t,this.pos),this.pos+=4},writeSFixed32:function(t){this.realloc(4),Gl(this.buf,t,this.pos),this.pos+=4},writeFixed64:function(t){this.realloc(8),Gl(this.buf,-1&t,this.pos),Gl(this.buf,Math.floor(t*Cl),this.pos+4),this.pos+=8},writeSFixed64:function(t){this.realloc(8),Gl(this.buf,-1&t,this.pos),Gl(this.buf,Math.floor(t*Cl),this.pos+4),this.pos+=8},writeVarint:function(t){(t=+t||0)>268435455||t<0?function(t,e){var r,n;if(t>=0?(r=t%4294967296|0,n=t/4294967296|0):(n=~(-t/4294967296),4294967295^(r=~(-t%4294967296))?r=r+1|0:(r=0,n=n+1|0)),t>=0x10000000000000000||t<-0x10000000000000000)throw new Error(\\\"Given varint doesn't fit into 10 bytes\\\");e.realloc(10),function(t,e,r){r.buf[r.pos++]=127&t|128,t>>>=7,r.buf[r.pos++]=127&t|128,t>>>=7,r.buf[r.pos++]=127&t|128,t>>>=7,r.buf[r.pos++]=127&t|128,t>>>=7,r.buf[r.pos]=127&t}(r,0,e),function(t,e){var r=(7&t)<<4;e.buf[e.pos++]|=r|((t>>>=3)?128:0),t&&(e.buf[e.pos++]=127&t|((t>>>=7)?128:0),t&&(e.buf[e.pos++]=127&t|((t>>>=7)?128:0),t&&(e.buf[e.pos++]=127&t|((t>>>=7)?128:0),t&&(e.buf[e.pos++]=127&t|((t>>>=7)?128:0),t&&(e.buf[e.pos++]=127&t)))))}(n,e)}(t,this):(this.realloc(4),this.buf[this.pos++]=127&t|(t>127?128:0),t<=127||(this.buf[this.pos++]=127&(t>>>=7)|(t>127?128:0),t<=127||(this.buf[this.pos++]=127&(t>>>=7)|(t>127?128:0),t<=127||(this.buf[this.pos++]=t>>>7&127))))},writeSVarint:function(t){this.writeVarint(t<0?2*-t-1:2*t)},writeBoolean:function(t){this.writeVarint(Boolean(t))},writeString:function(t){t=String(t),this.realloc(4*t.length),this.pos++;var e=this.pos;this.pos=function(t,e,r){for(var n,i,a=0;a<e.length;a++){if((n=e.charCodeAt(a))>55295&&n<57344){if(!i){n>56319||a+1===e.length?(t[r++]=239,t[r++]=191,t[r++]=189):i=n;continue}if(n<56320){t[r++]=239,t[r++]=191,t[r++]=189,i=n;continue}n=i-55296<<10|n-56320|65536,i=null}else i&&(t[r++]=239,t[r++]=191,t[r++]=189,i=null);n<128?t[r++]=n:(n<2048?t[r++]=n>>6|192:(n<65536?t[r++]=n>>12|224:(t[r++]=n>>18|240,t[r++]=n>>12&63|128),t[r++]=n>>6&63|128),t[r++]=63&n|128)}return r}(this.buf,t,this.pos);var r=this.pos-e;r>=128&&Dl(e,r,this),this.pos=e-1,this.writeVarint(r),this.pos+=r},writeFloat:function(t){this.realloc(4),Ml(this.buf,t,this.pos,!0,23,4),this.pos+=4},writeDouble:function(t){this.realloc(8),Ml(this.buf,t,this.pos,!0,52,8),this.pos+=8},writeBytes:function(t){var e=t.length;this.writeVarint(e),this.realloc(e);for(var r=0;r<e;r++)this.buf[this.pos++]=t[r]},writeRawMessage:function(t,e){this.pos++;var r=this.pos;t(e,this);var n=this.pos-r;n>=128&&Dl(r,n,this),this.pos=r-1,this.writeVarint(n),this.pos+=n},writeMessage:function(t,e,r){this.writeTag(t,El.Bytes),this.writeRawMessage(e,r)},writePackedVarint:function(t,e){e.length&&this.writeMessage(t,zl,e)},writePackedSVarint:function(t,e){e.length&&this.writeMessage(t,Rl,e)},writePackedBoolean:function(t,e){e.length&&this.writeMessage(t,Nl,e)},writePackedFloat:function(t,e){e.length&&this.writeMessage(t,Fl,e)},writePackedDouble:function(t,e){e.length&&this.writeMessage(t,Bl,e)},writePackedFixed32:function(t,e){e.length&&this.writeMessage(t,jl,e)},writePackedSFixed32:function(t,e){e.length&&this.writeMessage(t,Ul,e)},writePackedFixed64:function(t,e){e.length&&this.writeMessage(t,Vl,e)},writePackedSFixed64:function(t,e){e.length&&this.writeMessage(t,Hl,e)},writeBytesField:function(t,e){this.writeTag(t,El.Bytes),this.writeBytes(e)},writeFixed32Field:function(t,e){this.writeTag(t,El.Fixed32),this.writeFixed32(e)},writeSFixed32Field:function(t,e){this.writeTag(t,El.Fixed32),this.writeSFixed32(e)},writeFixed64Field:function(t,e){this.writeTag(t,El.Fixed64),this.writeFixed64(e)},writeSFixed64Field:function(t,e){this.writeTag(t,El.Fixed64),this.writeSFixed64(e)},writeVarintField:function(t,e){this.writeTag(t,El.Varint),this.writeVarint(e)},writeSVarintField:function(t,e){this.writeTag(t,El.Varint),this.writeSVarint(e)},writeStringField:function(t,e){this.writeTag(t,El.Bytes),this.writeString(e)},writeFloatField:function(t,e){this.writeTag(t,El.Fixed32),this.writeFloat(e)},writeDoubleField:function(t,e){this.writeTag(t,El.Fixed64),this.writeDouble(e)},writeBooleanField:function(t,e){this.writeVarintField(t,Boolean(e))}};var Yl=3;function Wl(t,e,r){1===t&&r.readMessage(Xl,e)}function Xl(t,e,r){if(3===t){var n=r.readMessage(Jl,{}),i=n.id,a=n.bitmap,o=n.width,s=n.height,l=n.left,u=n.top,c=n.advance;e.push({id:i,bitmap:new Yo({width:o+2*Yl,height:s+2*Yl},a),metrics:{width:o,height:s,left:l,top:u,advance:c}})}}function Jl(t,e,r){1===t?e.id=r.readVarint():2===t?e.bitmap=r.readBytes():3===t?e.width=r.readVarint():4===t?e.height=r.readVarint():5===t?e.left=r.readSVarint():6===t?e.top=r.readSVarint():7===t&&(e.advance=r.readVarint())}var Kl=Yl;function $l(t){for(var e=0,r=0,n=0,i=t;n<i.length;n+=1){var a=i[n];e+=a.w*a.h,r=Math.max(r,a.w)}t.sort((function(t,e){return e.h-t.h}));for(var o=[{x:0,y:0,w:Math.max(Math.ceil(Math.sqrt(e/.95)),r),h:1/0}],s=0,l=0,u=0,c=t;u<c.length;u+=1)for(var f=c[u],h=o.length-1;h>=0;h--){var p=o[h];if(!(f.w>p.w||f.h>p.h)){if(f.x=p.x,f.y=p.y,l=Math.max(l,f.y+f.h),s=Math.max(s,f.x+f.w),f.w===p.w&&f.h===p.h){var d=o.pop();h<o.length&&(o[h]=d)}else f.h===p.h?(p.x+=f.w,p.w-=f.w):f.w===p.w?(p.y+=f.h,p.h-=f.h):(o.push({x:p.x+f.w,y:p.y,w:p.w-f.w,h:f.h}),p.y+=f.h,p.h-=f.h);break}}return{w:s,h:l,fill:e/(s*l)||0}}var Ql=1,tu=function(t,e){var r=e.pixelRatio,n=e.version,i=e.stretchX,a=e.stretchY,o=e.content;this.paddedRect=t,this.pixelRatio=r,this.stretchX=i,this.stretchY=a,this.content=o,this.version=n},eu={tl:{configurable:!0},br:{configurable:!0},tlbr:{configurable:!0},displaySize:{configurable:!0}};eu.tl.get=function(){return[this.paddedRect.x+Ql,this.paddedRect.y+Ql]},eu.br.get=function(){return[this.paddedRect.x+this.paddedRect.w-Ql,this.paddedRect.y+this.paddedRect.h-Ql]},eu.tlbr.get=function(){return this.tl.concat(this.br)},eu.displaySize.get=function(){return[(this.paddedRect.w-2*Ql)/this.pixelRatio,(this.paddedRect.h-2*Ql)/this.pixelRatio]},Object.defineProperties(tu.prototype,eu);var ru=function(t,e){var r={},n={};this.haveRenderCallbacks=[];var i=[];this.addImages(t,r,i),this.addImages(e,n,i);var a=$l(i),o=a.w,s=a.h,l=new Wo({width:o||1,height:s||1});for(var u in t){var c=t[u],f=r[u].paddedRect;Wo.copy(c.data,l,{x:0,y:0},{x:f.x+Ql,y:f.y+Ql},c.data)}for(var h in e){var p=e[h],d=n[h].paddedRect,v=d.x+Ql,g=d.y+Ql,y=p.data.width,m=p.data.height;Wo.copy(p.data,l,{x:0,y:0},{x:v,y:g},p.data),Wo.copy(p.data,l,{x:0,y:m-1},{x:v,y:g-1},{width:y,height:1}),Wo.copy(p.data,l,{x:0,y:0},{x:v,y:g+m},{width:y,height:1}),Wo.copy(p.data,l,{x:y-1,y:0},{x:v-1,y:g},{width:1,height:m}),Wo.copy(p.data,l,{x:0,y:0},{x:v+y,y:g},{width:1,height:m})}this.image=l,this.iconPositions=r,this.patternPositions=n};ru.prototype.addImages=function(t,e,r){for(var n in t){var i=t[n],a={x:0,y:0,w:i.data.width+2*Ql,h:i.data.height+2*Ql};r.push(a),e[n]=new tu(a,i),i.hasRenderCallback&&this.haveRenderCallbacks.push(n)}},ru.prototype.patchUpdatedImages=function(t,e){for(var r in t.dispatchRenderCallbacks(this.haveRenderCallbacks),t.updatedImages)this.patchUpdatedImage(this.iconPositions[r],t.getImage(r),e),this.patchUpdatedImage(this.patternPositions[r],t.getImage(r),e)},ru.prototype.patchUpdatedImage=function(t,e,r){if(t&&e&&t.version!==e.version){t.version=e.version;var n=t.tl,i=n[0],a=n[1];r.update(e.data,void 0,{x:i,y:a})}},ni(\\\"ImagePosition\\\",tu),ni(\\\"ImageAtlas\\\",ru);var nu={horizontal:1,vertical:2,horizontalOnly:3},iu=-17;var au=function(){this.scale=1,this.fontStack=\\\"\\\",this.imageName=null};au.forText=function(t,e){var r=new au;return r.scale=t||1,r.fontStack=e,r},au.forImage=function(t){var e=new au;return e.imageName=t,e};var ou=function(){this.text=\\\"\\\",this.sectionIndex=[],this.sections=[],this.imageSectionID=null};function su(t,e,r,n,i,a,o,s,l,u,c,f,h,p,d,v){var g,y=ou.fromFeature(t,i);f===nu.vertical&&y.verticalizePunctuation();var m=Ci.processBidirectionalText,x=Ci.processStyledBidirectionalText;if(m&&1===y.sections.length){g=[];for(var b=0,_=m(y.toString(),vu(y,u,a,e,n,p,d));b<_.length;b+=1){var w=_[b],T=new ou;T.text=w,T.sections=y.sections;for(var k=0;k<w.length;k++)T.sectionIndex.push(0);g.push(T)}}else if(x){g=[];for(var A=0,M=x(y.text,y.sectionIndex,vu(y,u,a,e,n,p,d));A<M.length;A+=1){var S=M[A],E=new ou;E.text=S[0],E.sectionIndex=S[1],E.sections=y.sections,g.push(E)}}else g=function(t,e){for(var r=[],n=t.text,i=0,a=0,o=e;a<o.length;a+=1){var s=o[a];r.push(t.substring(i,s)),i=s}return i<n.length&&r.push(t.substring(i,n.length)),r}(y,vu(y,u,a,e,n,p,d));var L=[],C={positionedLines:L,text:y.toString(),top:c[1],bottom:c[1],left:c[0],right:c[0],writingMode:f,iconsInText:!1,verticalizable:!1};return function(t,e,r,n,i,a,o,s,l,u,c,f){for(var h=0,p=iu,d=0,v=0,g=\\\"right\\\"===s?1:\\\"left\\\"===s?0:.5,y=0,m=0,x=i;m<x.length;m+=1){var b=x[m];b.trim();var _=b.getMaxScale(),w=(_-1)*kl,T={positionedGlyphs:[],lineOffset:0};t.positionedLines[y]=T;var k=T.positionedGlyphs,A=0;if(b.length()){for(var M=0;M<b.length();M++){var S=b.getSection(M),E=b.getSectionIndex(M),L=b.getCharCode(M),C=0,P=null,O=null,I=null,D=kl,z=!(l===nu.horizontal||!c&&!hi(L)||c&&(lu[L]||di(L)));if(S.imageName){var R=n[S.imageName];if(!R)continue;I=S.imageName,t.iconsInText=t.iconsInText||!0,O=R.paddedRect;var F=R.displaySize;S.scale=S.scale*kl/f,P={width:F[0],height:F[1],left:Ql,top:-Kl,advance:z?F[1]:F[0]},C=w+(kl-F[1]*S.scale),D=P.advance;var B=z?F[0]*S.scale-kl*_:F[1]*S.scale-kl*_;B>0&&B>A&&(A=B)}else{var N=r[S.fontStack],j=N&&N[L];if(j&&j.rect)O=j.rect,P=j.metrics;else{var U=e[S.fontStack],V=U&&U[L];if(!V)continue;P=V.metrics}C=(_-S.scale)*kl}z?(t.verticalizable=!0,k.push({glyph:L,imageName:I,x:h,y:p+C,vertical:z,scale:S.scale,fontStack:S.fontStack,sectionIndex:E,metrics:P,rect:O}),h+=D*S.scale+u):(k.push({glyph:L,imageName:I,x:h,y:p+C,vertical:z,scale:S.scale,fontStack:S.fontStack,sectionIndex:E,metrics:P,rect:O}),h+=P.advance*S.scale+u)}if(0!==k.length){var H=h-u;d=Math.max(H,d),yu(k,0,k.length-1,g,A)}h=0;var q=a*_+A;T.lineOffset=Math.max(A,w),p+=q,v=Math.max(q,v),++y}else p+=a,++y}var G=p-iu,Z=gu(o),Y=Z.horizontalAlign,W=Z.verticalAlign;(function(t,e,r,n,i,a,o,s,l){var u=(e-r)*i,c=0;c=a!==o?-s*n-iu:(-n*l+.5)*o;for(var f=0,h=t;f<h.length;f+=1)for(var p=0,d=h[f].positionedGlyphs;p<d.length;p+=1){var v=d[p];v.x+=u,v.y+=c}})(t.positionedLines,g,Y,W,d,v,a,G,i.length),t.top+=-W*G,t.bottom=t.top+G,t.left+=-Y*d,t.right=t.left+d}(C,e,r,n,g,o,s,l,f,u,h,v),!function(t){for(var e=0,r=t;e<r.length;e+=1)if(0!==r[e].positionedGlyphs.length)return!1;return!0}(L)&&C}ou.fromFeature=function(t,e){for(var r=new ou,n=0;n<t.sections.length;n++){var i=t.sections[n];i.image?r.addImageSection(i):r.addTextSection(i,e)}return r},ou.prototype.length=function(){return this.text.length},ou.prototype.getSection=function(t){return this.sections[this.sectionIndex[t]]},ou.prototype.getSectionIndex=function(t){return this.sectionIndex[t]},ou.prototype.getCharCode=function(t){return this.text.charCodeAt(t)},ou.prototype.verticalizePunctuation=function(){this.text=function(t){for(var e=\\\"\\\",r=0;r<t.length;r++){var n=t.charCodeAt(r+1)||null,i=t.charCodeAt(r-1)||null;n&&pi(n)&&!Tl[t[r+1]]||i&&pi(i)&&!Tl[t[r-1]]||!Tl[t[r]]?e+=t[r]:e+=Tl[t[r]]}return e}(this.text)},ou.prototype.trim=function(){for(var t=0,e=0;e<this.text.length&&lu[this.text.charCodeAt(e)];e++)t++;for(var r=this.text.length,n=this.text.length-1;n>=0&&n>=t&&lu[this.text.charCodeAt(n)];n--)r--;this.text=this.text.substring(t,r),this.sectionIndex=this.sectionIndex.slice(t,r)},ou.prototype.substring=function(t,e){var r=new ou;return r.text=this.text.substring(t,e),r.sectionIndex=this.sectionIndex.slice(t,e),r.sections=this.sections,r},ou.prototype.toString=function(){return this.text},ou.prototype.getMaxScale=function(){var t=this;return this.sectionIndex.reduce((function(e,r){return Math.max(e,t.sections[r].scale)}),0)},ou.prototype.addTextSection=function(t,e){this.text+=t.text,this.sections.push(au.forText(t.scale,t.fontStack||e));for(var r=this.sections.length-1,n=0;n<t.text.length;++n)this.sectionIndex.push(r)},ou.prototype.addImageSection=function(t){var e=t.image?t.image.name:\\\"\\\";if(0!==e.length){var r=this.getNextImageSectionCharCode();r?(this.text+=String.fromCharCode(r),this.sections.push(au.forImage(e)),this.sectionIndex.push(this.sections.length-1)):w(\\\"Reached maximum number of images 6401\\\")}else w(\\\"Can't add FormattedSection with an empty image.\\\")},ou.prototype.getNextImageSectionCharCode=function(){return this.imageSectionID?this.imageSectionID>=63743?null:++this.imageSectionID:(this.imageSectionID=57344,this.imageSectionID)};var lu={9:!0,10:!0,11:!0,12:!0,13:!0,32:!0},uu={};function cu(t,e,r,n,i,a){if(e.imageName){var o=n[e.imageName];return o?o.displaySize[0]*e.scale*kl/a+i:0}var s=r[e.fontStack],l=s&&s[t];return l?l.metrics.advance*e.scale+i:0}function fu(t,e,r,n){var i=Math.pow(t-e,2);return n?t<e?i/2:2*i:i+Math.abs(r)*r}function hu(t,e,r){var n=0;return 10===t&&(n-=1e4),r&&(n+=150),40!==t&&65288!==t||(n+=50),41!==e&&65289!==e||(n+=50),n}function pu(t,e,r,n,i,a){for(var o=null,s=fu(e,r,i,a),l=0,u=n;l<u.length;l+=1){var c=u[l],f=fu(e-c.x,r,i,a)+c.badness;f<=s&&(o=c,s=f)}return{index:t,x:e,priorBreak:o,badness:s}}function du(t){return t?du(t.priorBreak).concat(t.index):[]}function vu(t,e,r,n,i,a,o){if(\\\"point\\\"!==a)return[];if(!t)return[];for(var s=[],l=function(t,e,r,n,i,a){for(var o=0,s=0;s<t.length();s++){var l=t.getSection(s);o+=cu(t.getCharCode(s),l,n,i,e,a)}return o/Math.max(1,Math.ceil(o/r))}(t,e,r,n,i,o),u=t.text.indexOf(\\\"​\\\")>=0,c=0,f=0;f<t.length();f++){var h=t.getSection(f),p=t.getCharCode(f);if(lu[p]||(c+=cu(p,h,n,i,e,o)),f<t.length()-1){var d=!((v=p)<11904||!(ci[\\\"Bopomofo Extended\\\"](v)||ci.Bopomofo(v)||ci[\\\"CJK Compatibility Forms\\\"](v)||ci[\\\"CJK Compatibility Ideographs\\\"](v)||ci[\\\"CJK Compatibility\\\"](v)||ci[\\\"CJK Radicals Supplement\\\"](v)||ci[\\\"CJK Strokes\\\"](v)||ci[\\\"CJK Symbols and Punctuation\\\"](v)||ci[\\\"CJK Unified Ideographs Extension A\\\"](v)||ci[\\\"CJK Unified Ideographs\\\"](v)||ci[\\\"Enclosed CJK Letters and Months\\\"](v)||ci[\\\"Halfwidth and Fullwidth Forms\\\"](v)||ci.Hiragana(v)||ci[\\\"Ideographic Description Characters\\\"](v)||ci[\\\"Kangxi Radicals\\\"](v)||ci[\\\"Katakana Phonetic Extensions\\\"](v)||ci.Katakana(v)||ci[\\\"Vertical Forms\\\"](v)||ci[\\\"Yi Radicals\\\"](v)||ci[\\\"Yi Syllables\\\"](v)));(uu[p]||d||h.imageName)&&s.push(pu(f+1,c,l,s,hu(p,t.getCharCode(f+1),d&&u),!1))}}var v;return du(pu(t.length(),c,l,s,0,!0))}function gu(t){var e=.5,r=.5;switch(t){case\\\"right\\\":case\\\"top-right\\\":case\\\"bottom-right\\\":e=1;break;case\\\"left\\\":case\\\"top-left\\\":case\\\"bottom-left\\\":e=0}switch(t){case\\\"bottom\\\":case\\\"bottom-right\\\":case\\\"bottom-left\\\":r=1;break;case\\\"top\\\":case\\\"top-right\\\":case\\\"top-left\\\":r=0}return{horizontalAlign:e,verticalAlign:r}}function yu(t,e,r,n,i){if(n||i)for(var a=t[r],o=a.metrics.advance*a.scale,s=(t[r].x+o)*n,l=e;l<=r;l++)t[l].x-=s,t[l].y+=i}function mu(t,e,r,n,i,a){var o,s=t.image;if(s.content){var l=s.content,u=s.pixelRatio||1;o=[l[0]/u,l[1]/u,s.displaySize[0]-l[2]/u,s.displaySize[1]-l[3]/u]}var c,f,h,p,d=e.left*a,v=e.right*a;\\\"width\\\"===r||\\\"both\\\"===r?(p=i[0]+d-n[3],f=i[0]+v+n[1]):f=(p=i[0]+(d+v-s.displaySize[0])/2)+s.displaySize[0];var g=e.top*a,y=e.bottom*a;return\\\"height\\\"===r||\\\"both\\\"===r?(c=i[1]+g-n[0],h=i[1]+y+n[2]):h=(c=i[1]+(g+y-s.displaySize[1])/2)+s.displaySize[1],{image:s,top:c,right:f,bottom:h,left:p,collisionPadding:o}}uu[10]=!0,uu[32]=!0,uu[38]=!0,uu[40]=!0,uu[41]=!0,uu[43]=!0,uu[45]=!0,uu[47]=!0,uu[173]=!0,uu[183]=!0,uu[8203]=!0,uu[8208]=!0,uu[8211]=!0,uu[8231]=!0;var xu=function(t){function e(e,r,n,i){t.call(this,e,r),this.angle=n,void 0!==i&&(this.segment=i)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.clone=function(){return new e(this.x,this.y,this.angle,this.segment)},e}(a);ni(\\\"Anchor\\\",xu);var bu=128;function _u(t,e){var r=e.expression;if(\\\"constant\\\"===r.kind)return{kind:\\\"constant\\\",layoutSize:r.evaluate(new Pi(t+1))};if(\\\"source\\\"===r.kind)return{kind:\\\"source\\\"};for(var n=r.zoomStops,i=r.interpolationType,a=0;a<n.length&&n[a]<=t;)a++;for(var o=a=Math.max(0,a-1);o<n.length&&n[o]<t+1;)o++;o=Math.min(n.length-1,o);var s=n[a],l=n[o];return\\\"composite\\\"===r.kind?{kind:\\\"composite\\\",minZoom:s,maxZoom:l,interpolationType:i}:{kind:\\\"camera\\\",minZoom:s,maxZoom:l,minSize:r.evaluate(new Pi(s)),maxSize:r.evaluate(new Pi(l)),interpolationType:i}}function wu(t,e,r){var n=e.uSize,i=e.uSizeT,a=r.lowerSize,o=r.upperSize;return\\\"source\\\"===t.kind?a/bu:\\\"composite\\\"===t.kind?$e(a/bu,o/bu,i):n}function Tu(t,e){var r=0,n=0;if(\\\"constant\\\"===t.kind)n=t.layoutSize;else if(\\\"source\\\"!==t.kind){var i=t.interpolationType,a=t.minZoom,o=t.maxZoom,s=i?u(xr.interpolationFactor(i,e,a,o),0,1):0;\\\"camera\\\"===t.kind?n=$e(t.minSize,t.maxSize,s):r=s}return{uSizeT:r,uSize:n}}var ku=Object.freeze({__proto__:null,getSizeData:_u,evaluateSizeForFeature:wu,evaluateSizeForZoom:Tu,SIZE_PACK_FACTOR:bu});function Au(t,e,r,n,i){if(void 0===e.segment)return!0;for(var a=e,o=e.segment+1,s=0;s>-r/2;){if(--o<0)return!1;s-=t[o].dist(a),a=t[o]}s+=t[o].dist(t[o+1]),o++;for(var l=[],u=0;s<r/2;){var c=t[o-1],f=t[o],h=t[o+1];if(!h)return!1;var p=c.angleTo(f)-f.angleTo(h);for(p=Math.abs((p+3*Math.PI)%(2*Math.PI)-Math.PI),l.push({distance:s,angleDelta:p}),u+=p;s-l[0].distance>n;)u-=l.shift().angleDelta;if(u>i)return!1;o++,s+=f.dist(h)}return!0}function Mu(t){for(var e=0,r=0;r<t.length-1;r++)e+=t[r].dist(t[r+1]);return e}function Su(t,e,r){return t?.6*e*r:0}function Eu(t,e){return Math.max(t?t.right-t.left:0,e?e.right-e.left:0)}function Lu(t,e,r,n,i,a){for(var o=Su(r,i,a),s=Eu(r,n)*a,l=0,u=Mu(t)/2,c=0;c<t.length-1;c++){var f=t[c],h=t[c+1],p=f.dist(h);if(l+p>u){var d=(u-l)/p,v=$e(f.x,h.x,d),g=$e(f.y,h.y,d),y=new xu(v,g,h.angleTo(f),c);return y._round(),!o||Au(t,y,s,o,e)?y:void 0}l+=p}}function Cu(t,e,r,n,i,a,o,s,l){var u=Su(n,a,o),c=Eu(n,i),f=c*o,h=0===t[0].x||t[0].x===l||0===t[0].y||t[0].y===l;return e-f<e/4&&(e=f+e/4),Pu(t,h?e/2*s%e:(c/2+2*a)*o*s%e,e,u,r,f,h,!1,l)}function Pu(t,e,r,n,i,a,o,s,l){for(var u=a/2,c=Mu(t),f=0,h=e-r,p=[],d=0;d<t.length-1;d++){for(var v=t[d],g=t[d+1],y=v.dist(g),m=g.angleTo(v);h+r<f+y;){var x=((h+=r)-f)/y,b=$e(v.x,g.x,x),_=$e(v.y,g.y,x);if(b>=0&&b<l&&_>=0&&_<l&&h-u>=0&&h+u<=c){var w=new xu(b,_,m,d);w._round(),n&&!Au(t,w,a,n,i)||p.push(w)}}f+=y}return s||p.length||o||(p=Pu(t,f/2,r,n,i,a,o,!0,l)),p}function Ou(t,e,r,n,i){for(var o=[],s=0;s<t.length;s++)for(var l=t[s],u=void 0,c=0;c<l.length-1;c++){var f=l[c],h=l[c+1];f.x<e&&h.x<e||(f.x<e?f=new a(e,f.y+(h.y-f.y)*((e-f.x)/(h.x-f.x)))._round():h.x<e&&(h=new a(e,f.y+(h.y-f.y)*((e-f.x)/(h.x-f.x)))._round()),f.y<r&&h.y<r||(f.y<r?f=new a(f.x+(h.x-f.x)*((r-f.y)/(h.y-f.y)),r)._round():h.y<r&&(h=new a(f.x+(h.x-f.x)*((r-f.y)/(h.y-f.y)),r)._round()),f.x>=n&&h.x>=n||(f.x>=n?f=new a(n,f.y+(h.y-f.y)*((n-f.x)/(h.x-f.x)))._round():h.x>=n&&(h=new a(n,f.y+(h.y-f.y)*((n-f.x)/(h.x-f.x)))._round()),f.y>=i&&h.y>=i||(f.y>=i?f=new a(f.x+(h.x-f.x)*((i-f.y)/(h.y-f.y)),i)._round():h.y>=i&&(h=new a(f.x+(h.x-f.x)*((i-f.y)/(h.y-f.y)),i)._round()),u&&f.equals(u[u.length-1])||(u=[f],o.push(u)),u.push(h)))))}return o}var Iu=Ql;function Du(t,e,r,n){var i=[],o=t.image,s=o.pixelRatio,l=o.paddedRect.w-2*Iu,u=o.paddedRect.h-2*Iu,c=t.right-t.left,f=t.bottom-t.top,h=o.stretchX||[[0,l]],p=o.stretchY||[[0,u]],d=function(t,e){return t+e[1]-e[0]},v=h.reduce(d,0),g=p.reduce(d,0),y=l-v,m=u-g,x=0,b=v,_=0,w=g,T=0,k=y,A=0,M=m;if(o.content&&n){var S=o.content;x=zu(h,0,S[0]),_=zu(p,0,S[1]),b=zu(h,S[0],S[2]),w=zu(p,S[1],S[3]),T=S[0]-x,A=S[1]-_,k=S[2]-S[0]-b,M=S[3]-S[1]-w}var E=function(n,i,l,u){var h=Fu(n.stretch-x,b,c,t.left),p=Bu(n.fixed-T,k,n.stretch,v),d=Fu(i.stretch-_,w,f,t.top),y=Bu(i.fixed-A,M,i.stretch,g),m=Fu(l.stretch-x,b,c,t.left),S=Bu(l.fixed-T,k,l.stretch,v),E=Fu(u.stretch-_,w,f,t.top),L=Bu(u.fixed-A,M,u.stretch,g),C=new a(h,d),P=new a(m,d),O=new a(m,E),I=new a(h,E),D=new a(p/s,y/s),z=new a(S/s,L/s),R=e*Math.PI/180;if(R){var F=Math.sin(R),B=Math.cos(R),N=[B,-F,F,B];C._matMult(N),P._matMult(N),I._matMult(N),O._matMult(N)}var j=n.stretch+n.fixed,U=l.stretch+l.fixed,V=i.stretch+i.fixed,H=u.stretch+u.fixed;return{tl:C,tr:P,bl:I,br:O,tex:{x:o.paddedRect.x+Iu+j,y:o.paddedRect.y+Iu+V,w:U-j,h:H-V},writingMode:void 0,glyphOffset:[0,0],sectionIndex:0,pixelOffsetTL:D,pixelOffsetBR:z,minFontScaleX:k/s/c,minFontScaleY:M/s/f,isSDF:r}};if(n&&(o.stretchX||o.stretchY))for(var L=Ru(h,y,v),C=Ru(p,m,g),P=0;P<L.length-1;P++)for(var O=L[P],I=L[P+1],D=0;D<C.length-1;D++){var z=C[D],R=C[D+1];i.push(E(O,z,I,R))}else i.push(E({fixed:0,stretch:-1},{fixed:0,stretch:-1},{fixed:0,stretch:l+1},{fixed:0,stretch:u+1}));return i}function zu(t,e,r){for(var n=0,i=0,a=t;i<a.length;i+=1){var o=a[i];n+=Math.max(e,Math.min(r,o[1]))-Math.max(e,Math.min(r,o[0]))}return n}function Ru(t,e,r){for(var n=[{fixed:-Iu,stretch:0}],i=0,a=t;i<a.length;i+=1){var o=a[i],s=o[0],l=o[1],u=n[n.length-1];n.push({fixed:s-u.stretch,stretch:u.stretch}),n.push({fixed:s-u.stretch,stretch:u.stretch+(l-s)})}return n.push({fixed:e+Iu,stretch:r}),n}function Fu(t,e,r,n){return t/e*r+n}function Bu(t,e,r,n){return t-e*r/n}var Nu=function(t,e,r,n,i,o,s,l,u,c){if(this.boxStartIndex=t.length,u){var f=o.top,h=o.bottom,p=o.collisionPadding;p&&(f-=p[1],h+=p[3]);var d=h-f;d>0&&(d=Math.max(10,d),this.circleDiameter=d)}else{var v=o.top*s-l,g=o.bottom*s+l,y=o.left*s-l,m=o.right*s+l,x=o.collisionPadding;if(x&&(y-=x[0]*s,v-=x[1]*s,m+=x[2]*s,g+=x[3]*s),c){var b=new a(y,v),_=new a(m,v),w=new a(y,g),T=new a(m,g),k=c*Math.PI/180;b._rotate(k),_._rotate(k),w._rotate(k),T._rotate(k),y=Math.min(b.x,_.x,w.x,T.x),m=Math.max(b.x,_.x,w.x,T.x),v=Math.min(b.y,_.y,w.y,T.y),g=Math.max(b.y,_.y,w.y,T.y)}t.emplaceBack(e.x,e.y,y,v,m,g,r,n,i)}this.boxEndIndex=t.length},ju=function(t,e){if(void 0===t&&(t=[]),void 0===e&&(e=Uu),this.data=t,this.length=this.data.length,this.compare=e,this.length>0)for(var r=(this.length>>1)-1;r>=0;r--)this._down(r)};function Uu(t,e){return t<e?-1:t>e?1:0}function Vu(t,e,r){void 0===e&&(e=1),void 0===r&&(r=!1);for(var n=1/0,i=1/0,o=-1/0,s=-1/0,l=t[0],u=0;u<l.length;u++){var c=l[u];(!u||c.x<n)&&(n=c.x),(!u||c.y<i)&&(i=c.y),(!u||c.x>o)&&(o=c.x),(!u||c.y>s)&&(s=c.y)}var f=o-n,h=s-i,p=Math.min(f,h),d=p/2,v=new ju([],Hu);if(0===p)return new a(n,i);for(var g=n;g<o;g+=p)for(var y=i;y<s;y+=p)v.push(new qu(g+d,y+d,d,t));for(var m=function(t){for(var e=0,r=0,n=0,i=t[0],a=0,o=i.length,s=o-1;a<o;s=a++){var l=i[a],u=i[s],c=l.x*u.y-u.x*l.y;r+=(l.x+u.x)*c,n+=(l.y+u.y)*c,e+=3*c}return new qu(r/e,n/e,0,t)}(t),x=v.length;v.length;){var b=v.pop();(b.d>m.d||!m.d)&&(m=b,r&&console.log(\\\"found best %d after %d probes\\\",Math.round(1e4*b.d)/1e4,x)),b.max-m.d<=e||(d=b.h/2,v.push(new qu(b.p.x-d,b.p.y-d,d,t)),v.push(new qu(b.p.x+d,b.p.y-d,d,t)),v.push(new qu(b.p.x-d,b.p.y+d,d,t)),v.push(new qu(b.p.x+d,b.p.y+d,d,t)),x+=4)}return r&&(console.log(\\\"num probes: \\\"+x),console.log(\\\"best distance: \\\"+m.d)),m.p}function Hu(t,e){return e.max-t.max}function qu(t,e,r,n){this.p=new a(t,e),this.h=r,this.d=function(t,e){for(var r=!1,n=1/0,i=0;i<e.length;i++)for(var a=e[i],o=0,s=a.length,l=s-1;o<s;l=o++){var u=a[o],c=a[l];u.y>t.y!=c.y>t.y&&t.x<(c.x-u.x)*(t.y-u.y)/(c.y-u.y)+u.x&&(r=!r),n=Math.min(n,ko(t,u,c))}return(r?1:-1)*Math.sqrt(n)}(this.p,n),this.max=this.d+this.h*Math.SQRT2}ju.prototype.push=function(t){this.data.push(t),this.length++,this._up(this.length-1)},ju.prototype.pop=function(){if(0!==this.length){var t=this.data[0],e=this.data.pop();return this.length--,this.length>0&&(this.data[0]=e,this._down(0)),t}},ju.prototype.peek=function(){return this.data[0]},ju.prototype._up=function(t){for(var e=this.data,r=this.compare,n=e[t];t>0;){var i=t-1>>1,a=e[i];if(r(n,a)>=0)break;e[t]=a,t=i}e[t]=n},ju.prototype._down=function(t){for(var e=this.data,r=this.compare,n=this.length>>1,i=e[t];t<n;){var a=1+(t<<1),o=e[a],s=a+1;if(s<this.length&&r(e[s],o)<0&&(a=s,o=e[s]),r(o,i)>=0)break;e[t]=o,t=a}e[t]=i};var Gu=7,Zu=Number.POSITIVE_INFINITY;function Yu(t,e){return e[1]!==Zu?function(t,e,r){var n=0,i=0;switch(e=Math.abs(e),r=Math.abs(r),t){case\\\"top-right\\\":case\\\"top-left\\\":case\\\"top\\\":i=r-Gu;break;case\\\"bottom-right\\\":case\\\"bottom-left\\\":case\\\"bottom\\\":i=-r+Gu}switch(t){case\\\"top-right\\\":case\\\"bottom-right\\\":case\\\"right\\\":n=-e;break;case\\\"top-left\\\":case\\\"bottom-left\\\":case\\\"left\\\":n=e}return[n,i]}(t,e[0],e[1]):function(t,e){var r=0,n=0;e<0&&(e=0);var i=e/Math.sqrt(2);switch(t){case\\\"top-right\\\":case\\\"top-left\\\":n=i-Gu;break;case\\\"bottom-right\\\":case\\\"bottom-left\\\":n=-i+Gu;break;case\\\"bottom\\\":n=-e+Gu;break;case\\\"top\\\":n=e-Gu}switch(t){case\\\"top-right\\\":case\\\"bottom-right\\\":r=-i;break;case\\\"top-left\\\":case\\\"bottom-left\\\":r=i;break;case\\\"left\\\":r=e;break;case\\\"right\\\":r=-e}return[r,n]}(t,e[0])}function Wu(t){switch(t){case\\\"right\\\":case\\\"top-right\\\":case\\\"bottom-right\\\":return\\\"right\\\";case\\\"left\\\":case\\\"top-left\\\":case\\\"bottom-left\\\":return\\\"left\\\"}return\\\"center\\\"}var Xu=255,Ju=Xu*bu;function Ku(t,e,r,n,i,o,s,l,u,c,f,h,p,d,v){var g=function(t,e,r,n,i,o,s,l){for(var u=n.layout.get(\\\"text-rotate\\\").evaluate(o,{})*Math.PI/180,c=[],f=0,h=e.positionedLines;f<h.length;f+=1)for(var p=h[f],d=0,v=p.positionedGlyphs;d<v.length;d+=1){var g=v[d];if(g.rect){var y=g.rect||{},m=Kl+1,x=!0,b=1,_=0,w=(i||l)&&g.vertical,T=g.metrics.advance*g.scale/2;if(l&&e.verticalizable){var k=(g.scale-1)*kl,A=(kl-g.metrics.width*g.scale)/2;_=p.lineOffset/2-(g.imageName?-A:k)}if(g.imageName){var M=s[g.imageName];x=M.sdf,b=M.pixelRatio,m=Ql/b}var S=i?[g.x+T,g.y]:[0,0],E=i?[0,0]:[g.x+T+r[0],g.y+r[1]-_],L=[0,0];w&&(L=E,E=[0,0]);var C=(g.metrics.left-m)*g.scale-T+E[0],P=(-g.metrics.top-m)*g.scale+E[1],O=C+y.w*g.scale/b,I=P+y.h*g.scale/b,D=new a(C,P),z=new a(O,P),R=new a(C,I),F=new a(O,I);if(w){var B=new a(-T,T-iu),N=-Math.PI/2,j=kl/2-T,U=g.imageName?j:0,V=new a(5-iu-j,-U),H=new(Function.prototype.bind.apply(a,[null].concat(L)));D._rotateAround(N,B)._add(V)._add(H),z._rotateAround(N,B)._add(V)._add(H),R._rotateAround(N,B)._add(V)._add(H),F._rotateAround(N,B)._add(V)._add(H)}if(u){var q=Math.sin(u),G=Math.cos(u),Z=[G,-q,q,G];D._matMult(Z),z._matMult(Z),R._matMult(Z),F._matMult(Z)}var Y=new a(0,0),W=new a(0,0);c.push({tl:D,tr:z,bl:R,br:F,tex:y,writingMode:e.writingMode,glyphOffset:S,sectionIndex:g.sectionIndex,isSDF:x,pixelOffsetTL:Y,pixelOffsetBR:W,minFontScaleX:0,minFontScaleY:0})}}return c}(0,r,l,i,o,s,n,t.allowVerticalPlacement),y=t.textSizeData,m=null;\\\"source\\\"===y.kind?(m=[bu*i.layout.get(\\\"text-size\\\").evaluate(s,{})])[0]>Ju&&w(t.layerIds[0]+': Value for \\\"text-size\\\" is >= '+Xu+'. Reduce your \\\"text-size\\\".'):\\\"composite\\\"===y.kind&&((m=[bu*d.compositeTextSizes[0].evaluate(s,{},v),bu*d.compositeTextSizes[1].evaluate(s,{},v)])[0]>Ju||m[1]>Ju)&&w(t.layerIds[0]+': Value for \\\"text-size\\\" is >= '+Xu+'. Reduce your \\\"text-size\\\".'),t.addSymbols(t.text,g,m,l,o,s,c,e,u.lineStartIndex,u.lineLength,p,v);for(var x=0,b=f;x<b.length;x+=1)h[b[x]]=t.text.placedSymbolArray.length-1;return 4*g.length}function $u(t){for(var e in t)return t[e];return null}function Qu(t,e,r,n){var i=t.compareText;if(e in i){for(var a=i[e],o=a.length-1;o>=0;o--)if(n.dist(a[o])<r)return!0}else i[e]=[];return i[e].push(n),!1}var tc=Js.VectorTileFeature.types,ec=[{name:\\\"a_fade_opacity\\\",components:1,type:\\\"Uint8\\\",offset:0}];function rc(t,e,r,n,i,a,o,s,l,u,c,f,h){var p=s?Math.min(Ju,Math.round(s[0])):0,d=s?Math.min(Ju,Math.round(s[1])):0;t.emplaceBack(e,r,Math.round(32*n),Math.round(32*i),a,o,(p<<1)+(l?1:0),d,16*u,16*c,256*f,256*h)}function nc(t,e,r){t.emplaceBack(e.x,e.y,r),t.emplaceBack(e.x,e.y,r),t.emplaceBack(e.x,e.y,r),t.emplaceBack(e.x,e.y,r)}function ic(t){for(var e=0,r=t.sections;e<r.length;e+=1)if(yi(r[e].text))return!0;return!1}var ac=function(t){this.layoutVertexArray=new ia,this.indexArray=new fa,this.programConfigurations=t,this.segments=new Oa,this.dynamicLayoutVertexArray=new aa,this.opacityVertexArray=new oa,this.placedSymbolArray=new ka};ac.prototype.isEmpty=function(){return 0===this.layoutVertexArray.length&&0===this.indexArray.length&&0===this.dynamicLayoutVertexArray.length&&0===this.opacityVertexArray.length},ac.prototype.upload=function(t,e,r,n){this.isEmpty()||(r&&(this.layoutVertexBuffer=t.createVertexBuffer(this.layoutVertexArray,yl.members),this.indexBuffer=t.createIndexBuffer(this.indexArray,e),this.dynamicLayoutVertexBuffer=t.createVertexBuffer(this.dynamicLayoutVertexArray,ml.members,!0),this.opacityVertexBuffer=t.createVertexBuffer(this.opacityVertexArray,ec,!0),this.opacityVertexBuffer.itemSize=1),(r||n)&&this.programConfigurations.upload(t))},ac.prototype.destroy=function(){this.layoutVertexBuffer&&(this.layoutVertexBuffer.destroy(),this.indexBuffer.destroy(),this.programConfigurations.destroy(),this.segments.destroy(),this.dynamicLayoutVertexBuffer.destroy(),this.opacityVertexBuffer.destroy())},ni(\\\"SymbolBuffers\\\",ac);var oc=function(t,e,r){this.layoutVertexArray=new t,this.layoutAttributes=e,this.indexArray=new r,this.segments=new Oa,this.collisionVertexArray=new ca};oc.prototype.upload=function(t){this.layoutVertexBuffer=t.createVertexBuffer(this.layoutVertexArray,this.layoutAttributes),this.indexBuffer=t.createIndexBuffer(this.indexArray),this.collisionVertexBuffer=t.createVertexBuffer(this.collisionVertexArray,xl.members,!0)},oc.prototype.destroy=function(){this.layoutVertexBuffer&&(this.layoutVertexBuffer.destroy(),this.indexBuffer.destroy(),this.segments.destroy(),this.collisionVertexBuffer.destroy())},ni(\\\"CollisionBuffers\\\",oc);var sc=function(t){this.collisionBoxArray=t.collisionBoxArray,this.zoom=t.zoom,this.overscaling=t.overscaling,this.layers=t.layers,this.layerIds=this.layers.map((function(t){return t.id})),this.index=t.index,this.pixelRatio=t.pixelRatio,this.sourceLayerIndex=t.sourceLayerIndex,this.hasPattern=!1,this.hasRTLText=!1,this.sortKeyRanges=[],this.collisionCircleArray=[],this.placementInvProjMatrix=Do([]),this.placementViewportMatrix=Do([]);var e=this.layers[0]._unevaluatedLayout._values;this.textSizeData=_u(this.zoom,e[\\\"text-size\\\"]),this.iconSizeData=_u(this.zoom,e[\\\"icon-size\\\"]);var r=this.layers[0].layout,n=r.get(\\\"symbol-sort-key\\\"),i=r.get(\\\"symbol-z-order\\\");this.sortFeaturesByKey=\\\"viewport-y\\\"!==i&&void 0!==n.constantOr(1);var a=\\\"viewport-y\\\"===i||\\\"auto\\\"===i&&!this.sortFeaturesByKey;this.sortFeaturesByY=a&&(r.get(\\\"text-allow-overlap\\\")||r.get(\\\"icon-allow-overlap\\\")||r.get(\\\"text-ignore-placement\\\")||r.get(\\\"icon-ignore-placement\\\")),\\\"point\\\"===r.get(\\\"symbol-placement\\\")&&(this.writingModes=r.get(\\\"text-writing-mode\\\").map((function(t){return nu[t]}))),this.stateDependentLayerIds=this.layers.filter((function(t){return t.isStateDependent()})).map((function(t){return t.id})),this.sourceID=t.sourceID};sc.prototype.createArrays=function(){this.text=new ac(new so(yl.members,this.layers,this.zoom,(function(t){return/^text/.test(t)}))),this.icon=new ac(new so(yl.members,this.layers,this.zoom,(function(t){return/^icon/.test(t)}))),this.glyphOffsetArray=new Sa,this.lineVertexArray=new Ea,this.symbolInstances=new Ma},sc.prototype.calculateGlyphDependencies=function(t,e,r,n,i){for(var a=0;a<t.length;a++)if(e[t.charCodeAt(a)]=!0,(r||n)&&i){var o=Tl[t.charAt(a)];o&&(e[o.charCodeAt(0)]=!0)}},sc.prototype.populate=function(t,e,r){var n=this.layers[0],i=n.layout,a=i.get(\\\"text-font\\\"),o=i.get(\\\"text-field\\\"),s=i.get(\\\"icon-image\\\"),l=(\\\"constant\\\"!==o.value.kind||o.value.value instanceof ue&&!o.value.value.isEmpty()||o.value.value.toString().length>0)&&(\\\"constant\\\"!==a.value.kind||a.value.value.length>0),u=\\\"constant\\\"!==s.value.kind||!!s.value.value||Object.keys(s.parameters).length>0,c=i.get(\\\"symbol-sort-key\\\");if(this.features=[],l||u){for(var f=e.iconDependencies,h=e.glyphDependencies,p=e.availableImages,d=new Pi(this.zoom),v=0,g=t;v<g.length;v+=1){var y=g[v],m=y.feature,x=y.id,b=y.index,_=y.sourceLayerIndex,w=n._featureFilter.needGeometry,T={type:m.type,id:x,properties:m.properties,geometry:w?po(m):[]};if(n._featureFilter.filter(d,T,r)){w||(T.geometry=po(m));var k=void 0;if(l){var A=n.getValueAndResolveTokens(\\\"text-field\\\",T,r,p),M=ue.factory(A);ic(M)&&(this.hasRTLText=!0),(!this.hasRTLText||\\\"unavailable\\\"===Ei()||this.hasRTLText&&Ci.isParsed())&&(k=wl(M,n,T))}var S=void 0;if(u){var E=n.getValueAndResolveTokens(\\\"icon-image\\\",T,r,p);S=E instanceof ce?E:ce.fromString(E)}if(k||S){var L=this.sortFeaturesByKey?c.evaluate(T,{},r):void 0,C={id:x,text:k,icon:S,index:b,sourceLayerIndex:_,geometry:po(m),properties:m.properties,type:tc[m.type],sortKey:L};if(this.features.push(C),S&&(f[S.name]=!0),k){var P=a.evaluate(T,{},r).join(\\\",\\\"),O=\\\"map\\\"===i.get(\\\"text-rotation-alignment\\\")&&\\\"point\\\"!==i.get(\\\"symbol-placement\\\");this.allowVerticalPlacement=this.writingModes&&this.writingModes.indexOf(nu.vertical)>=0;for(var I=0,D=k.sections;I<D.length;I+=1){var z=D[I];if(z.image)f[z.image.name]=!0;else{var R=fi(k.toString()),F=z.fontStack||P,B=h[F]=h[F]||{};this.calculateGlyphDependencies(z.text,B,O,this.allowVerticalPlacement,R)}}}}}}\\\"line\\\"===i.get(\\\"symbol-placement\\\")&&(this.features=function(t){var e={},r={},n=[],i=0;function a(e){n.push(t[e]),i++}function o(t,e,i){var a=r[t];return delete r[t],r[e]=a,n[a].geometry[0].pop(),n[a].geometry[0]=n[a].geometry[0].concat(i[0]),a}function s(t,r,i){var a=e[r];return delete e[r],e[t]=a,n[a].geometry[0].shift(),n[a].geometry[0]=i[0].concat(n[a].geometry[0]),a}function l(t,e,r){var n=r?e[0][e[0].length-1]:e[0][0];return t+\\\":\\\"+n.x+\\\":\\\"+n.y}for(var u=0;u<t.length;u++){var c=t[u],f=c.geometry,h=c.text?c.text.toString():null;if(h){var p=l(h,f),d=l(h,f,!0);if(p in r&&d in e&&r[p]!==e[d]){var v=s(p,d,f),g=o(p,d,n[v].geometry);delete e[p],delete r[d],r[l(h,n[g].geometry,!0)]=g,n[v].geometry=null}else p in r?o(p,d,f):d in e?s(p,d,f):(a(u),e[p]=i-1,r[d]=i-1)}else a(u)}return n.filter((function(t){return t.geometry}))}(this.features)),this.sortFeaturesByKey&&this.features.sort((function(t,e){return t.sortKey-e.sortKey}))}},sc.prototype.update=function(t,e,r){this.stateDependentLayers.length&&(this.text.programConfigurations.updatePaintArrays(t,e,this.layers,r),this.icon.programConfigurations.updatePaintArrays(t,e,this.layers,r))},sc.prototype.isEmpty=function(){return 0===this.symbolInstances.length&&!this.hasRTLText},sc.prototype.uploadPending=function(){return!this.uploaded||this.text.programConfigurations.needsUpload||this.icon.programConfigurations.needsUpload},sc.prototype.upload=function(t){!this.uploaded&&this.hasDebugData()&&(this.textCollisionBox.upload(t),this.iconCollisionBox.upload(t)),this.text.upload(t,this.sortFeaturesByY,!this.uploaded,this.text.programConfigurations.needsUpload),this.icon.upload(t,this.sortFeaturesByY,!this.uploaded,this.icon.programConfigurations.needsUpload),this.uploaded=!0},sc.prototype.destroyDebugData=function(){this.textCollisionBox.destroy(),this.iconCollisionBox.destroy()},sc.prototype.destroy=function(){this.text.destroy(),this.icon.destroy(),this.hasDebugData()&&this.destroyDebugData()},sc.prototype.addToLineVertexArray=function(t,e){var r=this.lineVertexArray.length;if(void 0!==t.segment){for(var n=t.dist(e[t.segment+1]),i=t.dist(e[t.segment]),a={},o=t.segment+1;o<e.length;o++)a[o]={x:e[o].x,y:e[o].y,tileUnitDistanceFromAnchor:n},o<e.length-1&&(n+=e[o+1].dist(e[o]));for(var s=t.segment||0;s>=0;s--)a[s]={x:e[s].x,y:e[s].y,tileUnitDistanceFromAnchor:i},s>0&&(i+=e[s-1].dist(e[s]));for(var l=0;l<e.length;l++){var u=a[l];this.lineVertexArray.emplaceBack(u.x,u.y,u.tileUnitDistanceFromAnchor)}}return{lineStartIndex:r,lineLength:this.lineVertexArray.length-r}},sc.prototype.addSymbols=function(t,e,r,n,i,a,o,s,l,u,c,f){for(var h=t.indexArray,p=t.layoutVertexArray,d=t.segments.prepareSegment(4*e.length,p,h,a.sortKey),v=this.glyphOffsetArray.length,g=d.vertexLength,y=this.allowVerticalPlacement&&o===nu.vertical?Math.PI/2:0,m=a.text&&a.text.sections,x=0;x<e.length;x++){var b=e[x],_=b.tl,w=b.tr,T=b.bl,k=b.br,A=b.tex,M=b.pixelOffsetTL,S=b.pixelOffsetBR,E=b.minFontScaleX,L=b.minFontScaleY,C=b.glyphOffset,P=b.isSDF,O=b.sectionIndex,I=d.vertexLength,D=C[1];rc(p,s.x,s.y,_.x,D+_.y,A.x,A.y,r,P,M.x,M.y,E,L),rc(p,s.x,s.y,w.x,D+w.y,A.x+A.w,A.y,r,P,S.x,M.y,E,L),rc(p,s.x,s.y,T.x,D+T.y,A.x,A.y+A.h,r,P,M.x,S.y,E,L),rc(p,s.x,s.y,k.x,D+k.y,A.x+A.w,A.y+A.h,r,P,S.x,S.y,E,L),nc(t.dynamicLayoutVertexArray,s,y),h.emplaceBack(I,I+1,I+2),h.emplaceBack(I+1,I+2,I+3),d.vertexLength+=4,d.primitiveLength+=2,this.glyphOffsetArray.emplaceBack(C[0]),x!==e.length-1&&O===e[x+1].sectionIndex||t.programConfigurations.populatePaintArrays(p.length,a,a.index,{},f,m&&m[O])}t.placedSymbolArray.emplaceBack(s.x,s.y,v,this.glyphOffsetArray.length-v,g,l,u,s.segment,r?r[0]:0,r?r[1]:0,n[0],n[1],o,0,!1,0,c)},sc.prototype._addCollisionDebugVertex=function(t,e,r,n,i,a){return e.emplaceBack(0,0),t.emplaceBack(r.x,r.y,n,i,Math.round(a.x),Math.round(a.y))},sc.prototype.addCollisionDebugVertices=function(t,e,r,n,i,o,s){var l=i.segments.prepareSegment(4,i.layoutVertexArray,i.indexArray),u=l.vertexLength,c=i.layoutVertexArray,f=i.collisionVertexArray,h=s.anchorX,p=s.anchorY;this._addCollisionDebugVertex(c,f,o,h,p,new a(t,e)),this._addCollisionDebugVertex(c,f,o,h,p,new a(r,e)),this._addCollisionDebugVertex(c,f,o,h,p,new a(r,n)),this._addCollisionDebugVertex(c,f,o,h,p,new a(t,n)),l.vertexLength+=4;var d=i.indexArray;d.emplaceBack(u,u+1),d.emplaceBack(u+1,u+2),d.emplaceBack(u+2,u+3),d.emplaceBack(u+3,u),l.primitiveLength+=4},sc.prototype.addDebugCollisionBoxes=function(t,e,r,n){for(var i=t;i<e;i++){var a=this.collisionBoxArray.get(i),o=a.x1,s=a.y1,l=a.x2,u=a.y2;this.addCollisionDebugVertices(o,s,l,u,n?this.textCollisionBox:this.iconCollisionBox,a.anchorPoint,r)}},sc.prototype.generateCollisionDebugBuffers=function(){this.hasDebugData()&&this.destroyDebugData(),this.textCollisionBox=new oc(la,bl.members,ya),this.iconCollisionBox=new oc(la,bl.members,ya);for(var t=0;t<this.symbolInstances.length;t++){var e=this.symbolInstances.get(t);this.addDebugCollisionBoxes(e.textBoxStartIndex,e.textBoxEndIndex,e,!0),this.addDebugCollisionBoxes(e.verticalTextBoxStartIndex,e.verticalTextBoxEndIndex,e,!0),this.addDebugCollisionBoxes(e.iconBoxStartIndex,e.iconBoxEndIndex,e,!1),this.addDebugCollisionBoxes(e.verticalIconBoxStartIndex,e.verticalIconBoxEndIndex,e,!1)}},sc.prototype._deserializeCollisionBoxesForSymbol=function(t,e,r,n,i,a,o,s,l){for(var u={},c=e;c<r;c++){var f=t.get(c);u.textBox={x1:f.x1,y1:f.y1,x2:f.x2,y2:f.y2,anchorPointX:f.anchorPointX,anchorPointY:f.anchorPointY},u.textFeatureIndex=f.featureIndex;break}for(var h=n;h<i;h++){var p=t.get(h);u.verticalTextBox={x1:p.x1,y1:p.y1,x2:p.x2,y2:p.y2,anchorPointX:p.anchorPointX,anchorPointY:p.anchorPointY},u.verticalTextFeatureIndex=p.featureIndex;break}for(var d=a;d<o;d++){var v=t.get(d);u.iconBox={x1:v.x1,y1:v.y1,x2:v.x2,y2:v.y2,anchorPointX:v.anchorPointX,anchorPointY:v.anchorPointY},u.iconFeatureIndex=v.featureIndex;break}for(var g=s;g<l;g++){var y=t.get(g);u.verticalIconBox={x1:y.x1,y1:y.y1,x2:y.x2,y2:y.y2,anchorPointX:y.anchorPointX,anchorPointY:y.anchorPointY},u.verticalIconFeatureIndex=y.featureIndex;break}return u},sc.prototype.deserializeCollisionBoxes=function(t){this.collisionArrays=[];for(var e=0;e<this.symbolInstances.length;e++){var r=this.symbolInstances.get(e);this.collisionArrays.push(this._deserializeCollisionBoxesForSymbol(t,r.textBoxStartIndex,r.textBoxEndIndex,r.verticalTextBoxStartIndex,r.verticalTextBoxEndIndex,r.iconBoxStartIndex,r.iconBoxEndIndex,r.verticalIconBoxStartIndex,r.verticalIconBoxEndIndex))}},sc.prototype.hasTextData=function(){return this.text.segments.get().length>0},sc.prototype.hasIconData=function(){return this.icon.segments.get().length>0},sc.prototype.hasDebugData=function(){return this.textCollisionBox&&this.iconCollisionBox},sc.prototype.hasTextCollisionBoxData=function(){return this.hasDebugData()&&this.textCollisionBox.segments.get().length>0},sc.prototype.hasIconCollisionBoxData=function(){return this.hasDebugData()&&this.iconCollisionBox.segments.get().length>0},sc.prototype.addIndicesForPlacedSymbol=function(t,e){for(var r=t.placedSymbolArray.get(e),n=r.vertexStartIndex+4*r.numGlyphs,i=r.vertexStartIndex;i<n;i+=4)t.indexArray.emplaceBack(i,i+1,i+2),t.indexArray.emplaceBack(i+1,i+2,i+3)},sc.prototype.getSortedSymbolIndexes=function(t){if(this.sortedAngle===t&&void 0!==this.symbolInstanceIndexes)return this.symbolInstanceIndexes;for(var e=Math.sin(t),r=Math.cos(t),n=[],i=[],a=[],o=0;o<this.symbolInstances.length;++o){a.push(o);var s=this.symbolInstances.get(o);n.push(0|Math.round(e*s.anchorX+r*s.anchorY)),i.push(s.featureIndex)}return a.sort((function(t,e){return n[t]-n[e]||i[e]-i[t]})),a},sc.prototype.addToSortKeyRanges=function(t,e){var r=this.sortKeyRanges[this.sortKeyRanges.length-1];r&&r.sortKey===e?r.symbolInstanceEnd=t+1:this.sortKeyRanges.push({sortKey:e,symbolInstanceStart:t,symbolInstanceEnd:t+1})},sc.prototype.sortFeatures=function(t){var e=this;if(this.sortFeaturesByY&&this.sortedAngle!==t&&!(this.text.segments.get().length>1||this.icon.segments.get().length>1)){this.symbolInstanceIndexes=this.getSortedSymbolIndexes(t),this.sortedAngle=t,this.text.indexArray.clear(),this.icon.indexArray.clear(),this.featureSortOrder=[];for(var r=0,n=this.symbolInstanceIndexes;r<n.length;r+=1){var i=n[r],a=this.symbolInstances.get(i);this.featureSortOrder.push(a.featureIndex),[a.rightJustifiedTextSymbolIndex,a.centerJustifiedTextSymbolIndex,a.leftJustifiedTextSymbolIndex].forEach((function(t,r,n){t>=0&&n.indexOf(t)===r&&e.addIndicesForPlacedSymbol(e.text,t)})),a.verticalPlacedTextSymbolIndex>=0&&this.addIndicesForPlacedSymbol(this.text,a.verticalPlacedTextSymbolIndex),a.placedIconSymbolIndex>=0&&this.addIndicesForPlacedSymbol(this.icon,a.placedIconSymbolIndex),a.verticalPlacedIconSymbolIndex>=0&&this.addIndicesForPlacedSymbol(this.icon,a.verticalPlacedIconSymbolIndex)}this.text.indexBuffer&&this.text.indexBuffer.updateData(this.text.indexArray),this.icon.indexBuffer&&this.icon.indexBuffer.updateData(this.icon.indexArray)}},ni(\\\"SymbolBucket\\\",sc,{omit:[\\\"layers\\\",\\\"collisionBoxArray\\\",\\\"features\\\",\\\"compareText\\\"]}),sc.MAX_GLYPHS=65535,sc.addDynamicAttributes=nc;var lc=new Gi({\\\"symbol-placement\\\":new ji(Dt.layout_symbol[\\\"symbol-placement\\\"]),\\\"symbol-spacing\\\":new ji(Dt.layout_symbol[\\\"symbol-spacing\\\"]),\\\"symbol-avoid-edges\\\":new ji(Dt.layout_symbol[\\\"symbol-avoid-edges\\\"]),\\\"symbol-sort-key\\\":new Ui(Dt.layout_symbol[\\\"symbol-sort-key\\\"]),\\\"symbol-z-order\\\":new ji(Dt.layout_symbol[\\\"symbol-z-order\\\"]),\\\"icon-allow-overlap\\\":new ji(Dt.layout_symbol[\\\"icon-allow-overlap\\\"]),\\\"icon-ignore-placement\\\":new ji(Dt.layout_symbol[\\\"icon-ignore-placement\\\"]),\\\"icon-optional\\\":new ji(Dt.layout_symbol[\\\"icon-optional\\\"]),\\\"icon-rotation-alignment\\\":new ji(Dt.layout_symbol[\\\"icon-rotation-alignment\\\"]),\\\"icon-size\\\":new Ui(Dt.layout_symbol[\\\"icon-size\\\"]),\\\"icon-text-fit\\\":new ji(Dt.layout_symbol[\\\"icon-text-fit\\\"]),\\\"icon-text-fit-padding\\\":new ji(Dt.layout_symbol[\\\"icon-text-fit-padding\\\"]),\\\"icon-image\\\":new Ui(Dt.layout_symbol[\\\"icon-image\\\"]),\\\"icon-rotate\\\":new Ui(Dt.layout_symbol[\\\"icon-rotate\\\"]),\\\"icon-padding\\\":new ji(Dt.layout_symbol[\\\"icon-padding\\\"]),\\\"icon-keep-upright\\\":new ji(Dt.layout_symbol[\\\"icon-keep-upright\\\"]),\\\"icon-offset\\\":new Ui(Dt.layout_symbol[\\\"icon-offset\\\"]),\\\"icon-anchor\\\":new Ui(Dt.layout_symbol[\\\"icon-anchor\\\"]),\\\"icon-pitch-alignment\\\":new ji(Dt.layout_symbol[\\\"icon-pitch-alignment\\\"]),\\\"text-pitch-alignment\\\":new ji(Dt.layout_symbol[\\\"text-pitch-alignment\\\"]),\\\"text-rotation-alignment\\\":new ji(Dt.layout_symbol[\\\"text-rotation-alignment\\\"]),\\\"text-field\\\":new Ui(Dt.layout_symbol[\\\"text-field\\\"]),\\\"text-font\\\":new Ui(Dt.layout_symbol[\\\"text-font\\\"]),\\\"text-size\\\":new Ui(Dt.layout_symbol[\\\"text-size\\\"]),\\\"text-max-width\\\":new Ui(Dt.layout_symbol[\\\"text-max-width\\\"]),\\\"text-line-height\\\":new ji(Dt.layout_symbol[\\\"text-line-height\\\"]),\\\"text-letter-spacing\\\":new Ui(Dt.layout_symbol[\\\"text-letter-spacing\\\"]),\\\"text-justify\\\":new Ui(Dt.layout_symbol[\\\"text-justify\\\"]),\\\"text-radial-offset\\\":new Ui(Dt.layout_symbol[\\\"text-radial-offset\\\"]),\\\"text-variable-anchor\\\":new ji(Dt.layout_symbol[\\\"text-variable-anchor\\\"]),\\\"text-anchor\\\":new Ui(Dt.layout_symbol[\\\"text-anchor\\\"]),\\\"text-max-angle\\\":new ji(Dt.layout_symbol[\\\"text-max-angle\\\"]),\\\"text-writing-mode\\\":new ji(Dt.layout_symbol[\\\"text-writing-mode\\\"]),\\\"text-rotate\\\":new Ui(Dt.layout_symbol[\\\"text-rotate\\\"]),\\\"text-padding\\\":new ji(Dt.layout_symbol[\\\"text-padding\\\"]),\\\"text-keep-upright\\\":new ji(Dt.layout_symbol[\\\"text-keep-upright\\\"]),\\\"text-transform\\\":new Ui(Dt.layout_symbol[\\\"text-transform\\\"]),\\\"text-offset\\\":new Ui(Dt.layout_symbol[\\\"text-offset\\\"]),\\\"text-allow-overlap\\\":new ji(Dt.layout_symbol[\\\"text-allow-overlap\\\"]),\\\"text-ignore-placement\\\":new ji(Dt.layout_symbol[\\\"text-ignore-placement\\\"]),\\\"text-optional\\\":new ji(Dt.layout_symbol[\\\"text-optional\\\"])}),uc={paint:new Gi({\\\"icon-opacity\\\":new Ui(Dt.paint_symbol[\\\"icon-opacity\\\"]),\\\"icon-color\\\":new Ui(Dt.paint_symbol[\\\"icon-color\\\"]),\\\"icon-halo-color\\\":new Ui(Dt.paint_symbol[\\\"icon-halo-color\\\"]),\\\"icon-halo-width\\\":new Ui(Dt.paint_symbol[\\\"icon-halo-width\\\"]),\\\"icon-halo-blur\\\":new Ui(Dt.paint_symbol[\\\"icon-halo-blur\\\"]),\\\"icon-translate\\\":new ji(Dt.paint_symbol[\\\"icon-translate\\\"]),\\\"icon-translate-anchor\\\":new ji(Dt.paint_symbol[\\\"icon-translate-anchor\\\"]),\\\"text-opacity\\\":new Ui(Dt.paint_symbol[\\\"text-opacity\\\"]),\\\"text-color\\\":new Ui(Dt.paint_symbol[\\\"text-color\\\"],{runtimeType:Zt,getOverride:function(t){return t.textColor},hasOverride:function(t){return!!t.textColor}}),\\\"text-halo-color\\\":new Ui(Dt.paint_symbol[\\\"text-halo-color\\\"]),\\\"text-halo-width\\\":new Ui(Dt.paint_symbol[\\\"text-halo-width\\\"]),\\\"text-halo-blur\\\":new Ui(Dt.paint_symbol[\\\"text-halo-blur\\\"]),\\\"text-translate\\\":new ji(Dt.paint_symbol[\\\"text-translate\\\"]),\\\"text-translate-anchor\\\":new ji(Dt.paint_symbol[\\\"text-translate-anchor\\\"])}),layout:lc},cc=function(t){this.type=t.property.overrides?t.property.overrides.runtimeType:Vt,this.defaultValue=t};cc.prototype.evaluate=function(t){if(t.formattedSection){var e=this.defaultValue.property.overrides;if(e&&e.hasOverride(t.formattedSection))return e.getOverride(t.formattedSection)}return t.feature&&t.featureState?this.defaultValue.evaluate(t.feature,t.featureState):this.defaultValue.property.specification.default},cc.prototype.eachChild=function(t){this.defaultValue.isConstant()||t(this.defaultValue.value._styleExpression.expression)},cc.prototype.outputDefined=function(){return!1},cc.prototype.serialize=function(){return null},ni(\\\"FormatSectionOverride\\\",cc,{omit:[\\\"defaultValue\\\"]});var fc=function(t){function e(e){t.call(this,e,uc)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.recalculate=function(e,r){if(t.prototype.recalculate.call(this,e,r),\\\"auto\\\"===this.layout.get(\\\"icon-rotation-alignment\\\")&&(\\\"point\\\"!==this.layout.get(\\\"symbol-placement\\\")?this.layout._values[\\\"icon-rotation-alignment\\\"]=\\\"map\\\":this.layout._values[\\\"icon-rotation-alignment\\\"]=\\\"viewport\\\"),\\\"auto\\\"===this.layout.get(\\\"text-rotation-alignment\\\")&&(\\\"point\\\"!==this.layout.get(\\\"symbol-placement\\\")?this.layout._values[\\\"text-rotation-alignment\\\"]=\\\"map\\\":this.layout._values[\\\"text-rotation-alignment\\\"]=\\\"viewport\\\"),\\\"auto\\\"===this.layout.get(\\\"text-pitch-alignment\\\")&&(this.layout._values[\\\"text-pitch-alignment\\\"]=this.layout.get(\\\"text-rotation-alignment\\\")),\\\"auto\\\"===this.layout.get(\\\"icon-pitch-alignment\\\")&&(this.layout._values[\\\"icon-pitch-alignment\\\"]=this.layout.get(\\\"icon-rotation-alignment\\\")),\\\"point\\\"===this.layout.get(\\\"symbol-placement\\\")){var n=this.layout.get(\\\"text-writing-mode\\\");if(n){for(var i=[],a=0,o=n;a<o.length;a+=1){var s=o[a];i.indexOf(s)<0&&i.push(s)}this.layout._values[\\\"text-writing-mode\\\"]=i}else this.layout._values[\\\"text-writing-mode\\\"]=[\\\"horizontal\\\"]}this._setPaintOverrides()},e.prototype.getValueAndResolveTokens=function(t,e,r,n){var i=this.layout.get(t).evaluate(e,{},r,n),a=this._unevaluatedLayout._values[t];return a.isDataDriven()||sn(a.value)||!i?i:function(t,e){return e.replace(/{([^{}]+)}/g,(function(e,r){return r in t?String(t[r]):\\\"\\\"}))}(e.properties,i)},e.prototype.createBucket=function(t){return new sc(t)},e.prototype.queryRadius=function(){return 0},e.prototype.queryIntersectsFeature=function(){return!1},e.prototype._setPaintOverrides=function(){for(var t=0,r=uc.paint.overridableProperties;t<r.length;t+=1){var n=r[t];if(e.hasPaintOverride(this.layout,n)){var i,a=this.paint.get(n),o=new cc(a),s=new on(o,a.property.specification);i=\\\"constant\\\"===a.value.kind||\\\"source\\\"===a.value.kind?new un(\\\"source\\\",s):new cn(\\\"composite\\\",s,a.value.zoomStops,a.value._interpolationType),this.paint._values[n]=new Bi(a.property,i,a.parameters)}}},e.prototype._handleOverridablePaintPropertyUpdate=function(t,r,n){return!(!this.layout||r.isDataDriven()||n.isDataDriven())&&e.hasPaintOverride(this.layout,t)},e.hasPaintOverride=function(t,e){var r=t.get(\\\"text-field\\\"),n=uc.paint.properties[e],i=!1,a=function(t){for(var e=0,r=t;e<r.length;e+=1){var a=r[e];if(n.overrides&&n.overrides.hasOverride(a))return void(i=!0)}};if(\\\"constant\\\"===r.value.kind&&r.value.value instanceof ue)a(r.value.value.sections);else if(\\\"source\\\"===r.value.kind){var o=function(t){if(!i)if(t instanceof ve&&pe(t.value)===Jt){var e=t.value;a(e.sections)}else t instanceof xe?a(t.sections):t.eachChild(o)},s=r.value;s._styleExpression&&o(s._styleExpression.expression)}return i},e}(Yi),hc={paint:new Gi({\\\"background-color\\\":new ji(Dt.paint_background[\\\"background-color\\\"]),\\\"background-pattern\\\":new Hi(Dt.paint_background[\\\"background-pattern\\\"]),\\\"background-opacity\\\":new ji(Dt.paint_background[\\\"background-opacity\\\"])})},pc=function(t){function e(e){t.call(this,e,hc)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e}(Yi),dc={paint:new Gi({\\\"raster-opacity\\\":new ji(Dt.paint_raster[\\\"raster-opacity\\\"]),\\\"raster-hue-rotate\\\":new ji(Dt.paint_raster[\\\"raster-hue-rotate\\\"]),\\\"raster-brightness-min\\\":new ji(Dt.paint_raster[\\\"raster-brightness-min\\\"]),\\\"raster-brightness-max\\\":new ji(Dt.paint_raster[\\\"raster-brightness-max\\\"]),\\\"raster-saturation\\\":new ji(Dt.paint_raster[\\\"raster-saturation\\\"]),\\\"raster-contrast\\\":new ji(Dt.paint_raster[\\\"raster-contrast\\\"]),\\\"raster-resampling\\\":new ji(Dt.paint_raster[\\\"raster-resampling\\\"]),\\\"raster-fade-duration\\\":new ji(Dt.paint_raster[\\\"raster-fade-duration\\\"])})},vc=function(t){function e(e){t.call(this,e,dc)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e}(Yi);var gc=function(t){function e(e){t.call(this,e,{}),this.implementation=e}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.is3D=function(){return\\\"3d\\\"===this.implementation.renderingMode},e.prototype.hasOffscreenPass=function(){return void 0!==this.implementation.prerender},e.prototype.recalculate=function(){},e.prototype.updateTransitions=function(){},e.prototype.hasTransition=function(){},e.prototype.serialize=function(){},e.prototype.onAdd=function(t){this.implementation.onAdd&&this.implementation.onAdd(t,t.painter.context.gl)},e.prototype.onRemove=function(t){this.implementation.onRemove&&this.implementation.onRemove(t,t.painter.context.gl)},e}(Yi),yc={circle:Uo,heatmap:Ko,hillshade:Qo,fill:js,\\\"fill-extrusion\\\":nl,line:vl,symbol:fc,background:pc,raster:vc};var mc=self.HTMLImageElement,xc=self.HTMLCanvasElement,bc=self.HTMLVideoElement,_c=self.ImageData,wc=self.ImageBitmap,Tc=function(t,e,r,n){this.context=t,this.format=r,this.texture=t.gl.createTexture(),this.update(e,n)};Tc.prototype.update=function(t,e,r){var n=t.width,i=t.height,a=!(this.size&&this.size[0]===n&&this.size[1]===i||r),o=this.context,s=o.gl;if(this.useMipmap=Boolean(e&&e.useMipmap),s.bindTexture(s.TEXTURE_2D,this.texture),o.pixelStoreUnpackFlipY.set(!1),o.pixelStoreUnpack.set(1),o.pixelStoreUnpackPremultiplyAlpha.set(this.format===s.RGBA&&(!e||!1!==e.premultiply)),a)this.size=[n,i],t instanceof mc||t instanceof xc||t instanceof bc||t instanceof _c||wc&&t instanceof wc?s.texImage2D(s.TEXTURE_2D,0,this.format,this.format,s.UNSIGNED_BYTE,t):s.texImage2D(s.TEXTURE_2D,0,this.format,n,i,0,this.format,s.UNSIGNED_BYTE,t.data);else{var l=r||{x:0,y:0},u=l.x,c=l.y;t instanceof mc||t instanceof xc||t instanceof bc||t instanceof _c||wc&&t instanceof wc?s.texSubImage2D(s.TEXTURE_2D,0,u,c,s.RGBA,s.UNSIGNED_BYTE,t):s.texSubImage2D(s.TEXTURE_2D,0,u,c,n,i,s.RGBA,s.UNSIGNED_BYTE,t.data)}this.useMipmap&&this.isSizePowerOfTwo()&&s.generateMipmap(s.TEXTURE_2D)},Tc.prototype.bind=function(t,e,r){var n=this.context.gl;n.bindTexture(n.TEXTURE_2D,this.texture),r!==n.LINEAR_MIPMAP_NEAREST||this.isSizePowerOfTwo()||(r=n.LINEAR),t!==this.filter&&(n.texParameteri(n.TEXTURE_2D,n.TEXTURE_MAG_FILTER,t),n.texParameteri(n.TEXTURE_2D,n.TEXTURE_MIN_FILTER,r||t),this.filter=t),e!==this.wrap&&(n.texParameteri(n.TEXTURE_2D,n.TEXTURE_WRAP_S,e),n.texParameteri(n.TEXTURE_2D,n.TEXTURE_WRAP_T,e),this.wrap=e)},Tc.prototype.isSizePowerOfTwo=function(){return this.size[0]===this.size[1]&&Math.log(this.size[0])/Math.LN2%1==0},Tc.prototype.destroy=function(){this.context.gl.deleteTexture(this.texture),this.texture=null};var kc=function(t){var e=this;this._callback=t,this._triggered=!1,\\\"undefined\\\"!=typeof MessageChannel&&(this._channel=new MessageChannel,this._channel.port2.onmessage=function(){e._triggered=!1,e._callback()})};kc.prototype.trigger=function(){var t=this;this._triggered||(this._triggered=!0,this._channel?this._channel.port1.postMessage(!0):setTimeout((function(){t._triggered=!1,t._callback()}),0))},kc.prototype.remove=function(){delete this._channel,this._callback=function(){}};var Ac=function(t,e,r){this.target=t,this.parent=e,this.mapId=r,this.callbacks={},this.tasks={},this.taskQueue=[],this.cancelCallbacks={},g([\\\"receive\\\",\\\"process\\\"],this),this.invoker=new kc(this.process),this.target.addEventListener(\\\"message\\\",this.receive,!1),this.globalScope=A()?t:self};function Mc(t,e,r){var n=2*Math.PI*6378137/256/Math.pow(2,r);return[t*n-2*Math.PI*6378137/2,e*n-2*Math.PI*6378137/2]}Ac.prototype.send=function(t,e,r,n,i){var a=this;void 0===i&&(i=!1);var o=Math.round(1e18*Math.random()).toString(36).substring(0,10);r&&(this.callbacks[o]=r);var s=E(this.globalScope)?void 0:[];return this.target.postMessage({id:o,type:t,hasCallback:!!r,targetMapId:n,mustQueue:i,sourceMapId:this.mapId,data:si(e,s)},s),{cancel:function(){r&&delete a.callbacks[o],a.target.postMessage({id:o,type:\\\"<cancel>\\\",targetMapId:n,sourceMapId:a.mapId})}}},Ac.prototype.receive=function(t){var e=t.data,r=e.id;if(r&&(!e.targetMapId||this.mapId===e.targetMapId))if(\\\"<cancel>\\\"===e.type){delete this.tasks[r];var n=this.cancelCallbacks[r];delete this.cancelCallbacks[r],n&&n()}else A()||e.mustQueue?(this.tasks[r]=e,this.taskQueue.push(r),this.invoker.trigger()):this.processTask(r,e)},Ac.prototype.process=function(){if(this.taskQueue.length){var t=this.taskQueue.shift(),e=this.tasks[t];delete this.tasks[t],this.taskQueue.length&&this.invoker.trigger(),e&&this.processTask(t,e)}},Ac.prototype.processTask=function(t,e){var r=this;if(\\\"<response>\\\"===e.type){var n=this.callbacks[t];delete this.callbacks[t],n&&(e.error?n(li(e.error)):n(null,li(e.data)))}else{var i=!1,a=E(this.globalScope)?void 0:[],o=e.hasCallback?function(e,n){i=!0,delete r.cancelCallbacks[t],r.target.postMessage({id:t,type:\\\"<response>\\\",sourceMapId:r.mapId,error:e?si(e):null,data:si(n,a)},a)}:function(t){i=!0},s=null,l=li(e.data);if(this.parent[e.type])s=this.parent[e.type](e.sourceMapId,l,o);else if(this.parent.getWorkerSource){var u=e.type.split(\\\".\\\");s=this.parent.getWorkerSource(e.sourceMapId,u[0],l.source)[u[1]](l,o)}else o(new Error(\\\"Could not find function \\\"+e.type));!i&&s&&s.cancel&&(this.cancelCallbacks[t]=s.cancel)}},Ac.prototype.remove=function(){this.invoker.remove(),this.target.removeEventListener(\\\"message\\\",this.receive,!1)};var Sc=function(t,e){t&&(e?this.setSouthWest(t).setNorthEast(e):4===t.length?this.setSouthWest([t[0],t[1]]).setNorthEast([t[2],t[3]]):this.setSouthWest(t[0]).setNorthEast(t[1]))};Sc.prototype.setNorthEast=function(t){return this._ne=t instanceof Lc?new Lc(t.lng,t.lat):Lc.convert(t),this},Sc.prototype.setSouthWest=function(t){return this._sw=t instanceof Lc?new Lc(t.lng,t.lat):Lc.convert(t),this},Sc.prototype.extend=function(t){var e,r,n=this._sw,i=this._ne;if(t instanceof Lc)e=t,r=t;else{if(!(t instanceof Sc)){if(Array.isArray(t)){if(4===t.length||t.every(Array.isArray)){var a=t;return this.extend(Sc.convert(a))}var o=t;return this.extend(Lc.convert(o))}return this}if(e=t._sw,r=t._ne,!e||!r)return this}return n||i?(n.lng=Math.min(e.lng,n.lng),n.lat=Math.min(e.lat,n.lat),i.lng=Math.max(r.lng,i.lng),i.lat=Math.max(r.lat,i.lat)):(this._sw=new Lc(e.lng,e.lat),this._ne=new Lc(r.lng,r.lat)),this},Sc.prototype.getCenter=function(){return new Lc((this._sw.lng+this._ne.lng)/2,(this._sw.lat+this._ne.lat)/2)},Sc.prototype.getSouthWest=function(){return this._sw},Sc.prototype.getNorthEast=function(){return this._ne},Sc.prototype.getNorthWest=function(){return new Lc(this.getWest(),this.getNorth())},Sc.prototype.getSouthEast=function(){return new Lc(this.getEast(),this.getSouth())},Sc.prototype.getWest=function(){return this._sw.lng},Sc.prototype.getSouth=function(){return this._sw.lat},Sc.prototype.getEast=function(){return this._ne.lng},Sc.prototype.getNorth=function(){return this._ne.lat},Sc.prototype.toArray=function(){return[this._sw.toArray(),this._ne.toArray()]},Sc.prototype.toString=function(){return\\\"LngLatBounds(\\\"+this._sw.toString()+\\\", \\\"+this._ne.toString()+\\\")\\\"},Sc.prototype.isEmpty=function(){return!(this._sw&&this._ne)},Sc.prototype.contains=function(t){var e=Lc.convert(t),r=e.lng,n=e.lat,i=this._sw.lat<=n&&n<=this._ne.lat,a=this._sw.lng<=r&&r<=this._ne.lng;return this._sw.lng>this._ne.lng&&(a=this._sw.lng>=r&&r>=this._ne.lng),i&&a},Sc.convert=function(t){return!t||t instanceof Sc?t:new Sc(t)};var Ec=6371008.8,Lc=function(t,e){if(isNaN(t)||isNaN(e))throw new Error(\\\"Invalid LngLat object: (\\\"+t+\\\", \\\"+e+\\\")\\\");if(this.lng=+t,this.lat=+e,this.lat>90||this.lat<-90)throw new Error(\\\"Invalid LngLat latitude value: must be between -90 and 90\\\")};Lc.prototype.wrap=function(){return new Lc(c(this.lng,-180,180),this.lat)},Lc.prototype.toArray=function(){return[this.lng,this.lat]},Lc.prototype.toString=function(){return\\\"LngLat(\\\"+this.lng+\\\", \\\"+this.lat+\\\")\\\"},Lc.prototype.distanceTo=function(t){var e=Math.PI/180,r=this.lat*e,n=t.lat*e,i=Math.sin(r)*Math.sin(n)+Math.cos(r)*Math.cos(n)*Math.cos((t.lng-this.lng)*e);return Ec*Math.acos(Math.min(i,1))},Lc.prototype.toBounds=function(t){void 0===t&&(t=0);var e=360*t/40075017,r=e/Math.cos(Math.PI/180*this.lat);return new Sc(new Lc(this.lng-r,this.lat-e),new Lc(this.lng+r,this.lat+e))},Lc.convert=function(t){if(t instanceof Lc)return t;if(Array.isArray(t)&&(2===t.length||3===t.length))return new Lc(Number(t[0]),Number(t[1]));if(!Array.isArray(t)&&\\\"object\\\"==typeof t&&null!==t)return new Lc(Number(\\\"lng\\\"in t?t.lng:t.lon),Number(t.lat));throw new Error(\\\"`LngLatLike` argument must be specified as a LngLat instance, an object {lng: <lng>, lat: <lat>}, an object {lon: <lng>, lat: <lat>}, or an array of [<lng>, <lat>]\\\")};var Cc=2*Math.PI*Ec;function Pc(t){return Cc*Math.cos(t*Math.PI/180)}function Oc(t){return(180+t)/360}function Ic(t){return(180-180/Math.PI*Math.log(Math.tan(Math.PI/4+t*Math.PI/360)))/360}function Dc(t,e){return t/Pc(e)}function zc(t){var e=180-360*t;return 360/Math.PI*Math.atan(Math.exp(e*Math.PI/180))-90}var Rc=function(t,e,r){void 0===r&&(r=0),this.x=+t,this.y=+e,this.z=+r};Rc.fromLngLat=function(t,e){void 0===e&&(e=0);var r=Lc.convert(t);return new Rc(Oc(r.lng),Ic(r.lat),Dc(e,r.lat))},Rc.prototype.toLngLat=function(){return new Lc(360*this.x-180,zc(this.y))},Rc.prototype.toAltitude=function(){return t=this.z,e=this.y,t*Pc(zc(e));var t,e},Rc.prototype.meterInMercatorCoordinateUnits=function(){return 1/Cc*(t=zc(this.y),1/Math.cos(t*Math.PI/180));var t};var Fc=function(t,e,r){this.z=t,this.x=e,this.y=r,this.key=jc(0,t,t,e,r)};Fc.prototype.equals=function(t){return this.z===t.z&&this.x===t.x&&this.y===t.y},Fc.prototype.url=function(t,e){var r,n,i,a,o,s=(r=this.x,n=this.y,i=this.z,a=Mc(256*r,256*(n=Math.pow(2,i)-n-1),i),o=Mc(256*(r+1),256*(n+1),i),a[0]+\\\",\\\"+a[1]+\\\",\\\"+o[0]+\\\",\\\"+o[1]),l=function(t,e,r){for(var n,i=\\\"\\\",a=t;a>0;a--)i+=(e&(n=1<<a-1)?1:0)+(r&n?2:0);return i}(this.z,this.x,this.y);return t[(this.x+this.y)%t.length].replace(\\\"{prefix}\\\",(this.x%16).toString(16)+(this.y%16).toString(16)).replace(\\\"{z}\\\",String(this.z)).replace(\\\"{x}\\\",String(this.x)).replace(\\\"{y}\\\",String(\\\"tms\\\"===e?Math.pow(2,this.z)-this.y-1:this.y)).replace(\\\"{quadkey}\\\",l).replace(\\\"{bbox-epsg-3857}\\\",s)},Fc.prototype.getTilePoint=function(t){var e=Math.pow(2,this.z);return new a((t.x*e-this.x)*co,(t.y*e-this.y)*co)},Fc.prototype.toString=function(){return this.z+\\\"/\\\"+this.x+\\\"/\\\"+this.y};var Bc=function(t,e){this.wrap=t,this.canonical=e,this.key=jc(t,e.z,e.z,e.x,e.y)},Nc=function(t,e,r,n,i){this.overscaledZ=t,this.wrap=e,this.canonical=new Fc(r,+n,+i),this.key=jc(e,t,r,n,i)};function jc(t,e,r,n,i){(t*=2)<0&&(t=-1*t-1);var a=1<<r;return(a*a*t+a*i+n).toString(36)+r.toString(36)+e.toString(36)}Nc.prototype.equals=function(t){return this.overscaledZ===t.overscaledZ&&this.wrap===t.wrap&&this.canonical.equals(t.canonical)},Nc.prototype.scaledTo=function(t){var e=this.canonical.z-t;return t>this.canonical.z?new Nc(t,this.wrap,this.canonical.z,this.canonical.x,this.canonical.y):new Nc(t,this.wrap,t,this.canonical.x>>e,this.canonical.y>>e)},Nc.prototype.calculateScaledKey=function(t,e){var r=this.canonical.z-t;return t>this.canonical.z?jc(this.wrap*+e,t,this.canonical.z,this.canonical.x,this.canonical.y):jc(this.wrap*+e,t,t,this.canonical.x>>r,this.canonical.y>>r)},Nc.prototype.isChildOf=function(t){if(t.wrap!==this.wrap)return!1;var e=this.canonical.z-t.canonical.z;return 0===t.overscaledZ||t.overscaledZ<this.overscaledZ&&t.canonical.x===this.canonical.x>>e&&t.canonical.y===this.canonical.y>>e},Nc.prototype.children=function(t){if(this.overscaledZ>=t)return[new Nc(this.overscaledZ+1,this.wrap,this.canonical.z,this.canonical.x,this.canonical.y)];var e=this.canonical.z+1,r=2*this.canonical.x,n=2*this.canonical.y;return[new Nc(e,this.wrap,e,r,n),new Nc(e,this.wrap,e,r+1,n),new Nc(e,this.wrap,e,r,n+1),new Nc(e,this.wrap,e,r+1,n+1)]},Nc.prototype.isLessThan=function(t){return this.wrap<t.wrap||!(this.wrap>t.wrap)&&(this.overscaledZ<t.overscaledZ||!(this.overscaledZ>t.overscaledZ)&&(this.canonical.x<t.canonical.x||!(this.canonical.x>t.canonical.x)&&this.canonical.y<t.canonical.y))},Nc.prototype.wrapped=function(){return new Nc(this.overscaledZ,0,this.canonical.z,this.canonical.x,this.canonical.y)},Nc.prototype.unwrapTo=function(t){return new Nc(this.overscaledZ,t,this.canonical.z,this.canonical.x,this.canonical.y)},Nc.prototype.overscaleFactor=function(){return Math.pow(2,this.overscaledZ-this.canonical.z)},Nc.prototype.toUnwrapped=function(){return new Bc(this.wrap,this.canonical)},Nc.prototype.toString=function(){return this.overscaledZ+\\\"/\\\"+this.canonical.x+\\\"/\\\"+this.canonical.y},Nc.prototype.getTilePoint=function(t){return this.canonical.getTilePoint(new Rc(t.x-this.wrap,t.y))},ni(\\\"CanonicalTileID\\\",Fc),ni(\\\"OverscaledTileID\\\",Nc,{omit:[\\\"posMatrix\\\"]});var Uc=function(t,e,r){if(this.uid=t,e.height!==e.width)throw new RangeError(\\\"DEM tiles must be square\\\");if(r&&\\\"mapbox\\\"!==r&&\\\"terrarium\\\"!==r)return w('\\\"'+r+'\\\" is not a valid encoding type. Valid types include \\\"mapbox\\\" and \\\"terrarium\\\".');this.stride=e.height;var n=this.dim=e.height-2;this.data=new Uint32Array(e.data.buffer),this.encoding=r||\\\"mapbox\\\";for(var i=0;i<n;i++)this.data[this._idx(-1,i)]=this.data[this._idx(0,i)],this.data[this._idx(n,i)]=this.data[this._idx(n-1,i)],this.data[this._idx(i,-1)]=this.data[this._idx(i,0)],this.data[this._idx(i,n)]=this.data[this._idx(i,n-1)];this.data[this._idx(-1,-1)]=this.data[this._idx(0,0)],this.data[this._idx(n,-1)]=this.data[this._idx(n-1,0)],this.data[this._idx(-1,n)]=this.data[this._idx(0,n-1)],this.data[this._idx(n,n)]=this.data[this._idx(n-1,n-1)]};Uc.prototype.get=function(t,e){var r=new Uint8Array(this.data.buffer),n=4*this._idx(t,e);return(\\\"terrarium\\\"===this.encoding?this._unpackTerrarium:this._unpackMapbox)(r[n],r[n+1],r[n+2])},Uc.prototype.getUnpackVector=function(){return\\\"terrarium\\\"===this.encoding?[256,1,1/256,32768]:[6553.6,25.6,.1,1e4]},Uc.prototype._idx=function(t,e){if(t<-1||t>=this.dim+1||e<-1||e>=this.dim+1)throw new RangeError(\\\"out of range source coordinates for DEM data\\\");return(e+1)*this.stride+(t+1)},Uc.prototype._unpackMapbox=function(t,e,r){return(256*t*256+256*e+r)/10-1e4},Uc.prototype._unpackTerrarium=function(t,e,r){return 256*t+e+r/256-32768},Uc.prototype.getPixels=function(){return new Wo({width:this.stride,height:this.stride},new Uint8Array(this.data.buffer))},Uc.prototype.backfillBorder=function(t,e,r){if(this.dim!==t.dim)throw new Error(\\\"dem dimension mismatch\\\");var n=e*this.dim,i=e*this.dim+this.dim,a=r*this.dim,o=r*this.dim+this.dim;switch(e){case-1:n=i-1;break;case 1:i=n+1}switch(r){case-1:a=o-1;break;case 1:o=a+1}for(var s=-e*this.dim,l=-r*this.dim,u=a;u<o;u++)for(var c=n;c<i;c++)this.data[this._idx(c,u)]=t.data[this._idx(c+s,u+l)]},ni(\\\"DEMData\\\",Uc);var Vc=function(t){this._stringToNumber={},this._numberToString=[];for(var e=0;e<t.length;e++){var r=t[e];this._stringToNumber[r]=e,this._numberToString[e]=r}};Vc.prototype.encode=function(t){return this._stringToNumber[t]},Vc.prototype.decode=function(t){return this._numberToString[t]};var Hc=function(t,e,r,n,i){this.type=\\\"Feature\\\",this._vectorTileFeature=t,t._z=e,t._x=r,t._y=n,this.properties=t.properties,this.id=i},qc={geometry:{configurable:!0}};qc.geometry.get=function(){return void 0===this._geometry&&(this._geometry=this._vectorTileFeature.toGeoJSON(this._vectorTileFeature._x,this._vectorTileFeature._y,this._vectorTileFeature._z).geometry),this._geometry},qc.geometry.set=function(t){this._geometry=t},Hc.prototype.toJSON=function(){var t={geometry:this.geometry};for(var e in this)\\\"_geometry\\\"!==e&&\\\"_vectorTileFeature\\\"!==e&&(t[e]=this[e]);return t},Object.defineProperties(Hc.prototype,qc);var Gc=function(){this.state={},this.stateChanges={},this.deletedStates={}};Gc.prototype.updateState=function(t,e,r){var n=String(e);if(this.stateChanges[t]=this.stateChanges[t]||{},this.stateChanges[t][n]=this.stateChanges[t][n]||{},f(this.stateChanges[t][n],r),null===this.deletedStates[t])for(var i in this.deletedStates[t]={},this.state[t])i!==n&&(this.deletedStates[t][i]=null);else if(this.deletedStates[t]&&null===this.deletedStates[t][n])for(var a in this.deletedStates[t][n]={},this.state[t][n])r[a]||(this.deletedStates[t][n][a]=null);else for(var o in r)this.deletedStates[t]&&this.deletedStates[t][n]&&null===this.deletedStates[t][n][o]&&delete this.deletedStates[t][n][o]},Gc.prototype.removeFeatureState=function(t,e,r){if(null!==this.deletedStates[t]){var n=String(e);if(this.deletedStates[t]=this.deletedStates[t]||{},r&&void 0!==e)null!==this.deletedStates[t][n]&&(this.deletedStates[t][n]=this.deletedStates[t][n]||{},this.deletedStates[t][n][r]=null);else if(void 0!==e)if(this.stateChanges[t]&&this.stateChanges[t][n])for(r in this.deletedStates[t][n]={},this.stateChanges[t][n])this.deletedStates[t][n][r]=null;else this.deletedStates[t][n]=null;else this.deletedStates[t]=null}},Gc.prototype.getState=function(t,e){var r=String(e),n=this.state[t]||{},i=this.stateChanges[t]||{},a=f({},n[r],i[r]);if(null===this.deletedStates[t])return{};if(this.deletedStates[t]){var o=this.deletedStates[t][e];if(null===o)return{};for(var s in o)delete a[s]}return a},Gc.prototype.initializeTileState=function(t,e){t.setFeatureState(this.state,e)},Gc.prototype.coalesceChanges=function(t,e){var r={};for(var n in this.stateChanges){this.state[n]=this.state[n]||{};var i={};for(var a in this.stateChanges[n])this.state[n][a]||(this.state[n][a]={}),f(this.state[n][a],this.stateChanges[n][a]),i[a]=this.state[n][a];r[n]=i}for(var o in this.deletedStates){this.state[o]=this.state[o]||{};var s={};if(null===this.deletedStates[o])for(var l in this.state[o])s[l]={},this.state[o][l]={};else for(var u in this.deletedStates[o]){if(null===this.deletedStates[o][u])this.state[o][u]={};else for(var c=0,h=Object.keys(this.deletedStates[o][u]);c<h.length;c+=1){var p=h[c];delete this.state[o][u][p]}s[u]=this.state[o][u]}r[o]=r[o]||{},f(r[o],s)}if(this.stateChanges={},this.deletedStates={},0!==Object.keys(r).length)for(var d in t)t[d].setFeatureState(r,e)};var Zc=function(t,e){this.tileID=t,this.x=t.canonical.x,this.y=t.canonical.y,this.z=t.canonical.z,this.grid=new Kn(co,16,0),this.grid3D=new Kn(co,16,0),this.featureIndexArray=new Ca,this.promoteId=e};function Yc(t,e,r,n,i){return m(t,(function(t,a){var o=e instanceof Ni?e.get(a):null;return o&&o.evaluate?o.evaluate(r,n,i):o}))}function Wc(t){for(var e=1/0,r=1/0,n=-1/0,i=-1/0,a=0,o=t;a<o.length;a+=1){var s=o[a];e=Math.min(e,s.x),r=Math.min(r,s.y),n=Math.max(n,s.x),i=Math.max(i,s.y)}return{minX:e,minY:r,maxX:n,maxY:i}}function Xc(t,e){return e-t}Zc.prototype.insert=function(t,e,r,n,i,a){var o=this.featureIndexArray.length;this.featureIndexArray.emplaceBack(r,n,i);for(var s=a?this.grid3D:this.grid,l=0;l<e.length;l++){for(var u=e[l],c=[1/0,1/0,-1/0,-1/0],f=0;f<u.length;f++){var h=u[f];c[0]=Math.min(c[0],h.x),c[1]=Math.min(c[1],h.y),c[2]=Math.max(c[2],h.x),c[3]=Math.max(c[3],h.y)}c[0]<co&&c[1]<co&&c[2]>=0&&c[3]>=0&&s.insert(o,c[0],c[1],c[2],c[3])}},Zc.prototype.loadVTLayers=function(){return this.vtLayers||(this.vtLayers=new Js.VectorTile(new Sl(this.rawTileData)).layers,this.sourceLayerCoder=new Vc(this.vtLayers?Object.keys(this.vtLayers).sort():[\\\"_geojsonTileLayer\\\"])),this.vtLayers},Zc.prototype.query=function(t,e,r,n){var i=this;this.loadVTLayers();for(var o=t.params||{},s=co/t.tileSize/t.scale,l=wn(o.filter),u=t.queryGeometry,c=t.queryPadding*s,f=Wc(u),h=this.grid.query(f.minX-c,f.minY-c,f.maxX+c,f.maxY+c),p=Wc(t.cameraQueryGeometry),d=0,v=this.grid3D.query(p.minX-c,p.minY-c,p.maxX+c,p.maxY+c,(function(e,r,n,i){return function(t,e,r,n,i){for(var o=0,s=t;o<s.length;o+=1){var l=s[o];if(e<=l.x&&r<=l.y&&n>=l.x&&i>=l.y)return!0}var u=[new a(e,r),new a(e,i),new a(n,i),new a(n,r)];if(t.length>2)for(var c=0,f=u;c<f.length;c+=1)if(Mo(t,f[c]))return!0;for(var h=0;h<t.length-1;h++)if(So(t[h],t[h+1],u))return!0;return!1}(t.cameraQueryGeometry,e-c,r-c,n+c,i+c)}));d<v.length;d+=1){var g=v[d];h.push(g)}h.sort(Xc);for(var y,m={},x=function(a){var c=h[a];if(c!==y){y=c;var f=i.featureIndexArray.get(c),p=null;i.loadMatchingFeature(m,f.bucketIndex,f.sourceLayerIndex,f.featureIndex,l,o.layers,o.availableImages,e,r,n,(function(e,r,n){return p||(p=po(e)),r.queryIntersectsFeature(u,e,n,p,i.z,t.transform,s,t.pixelPosMatrix)}))}},b=0;b<h.length;b++)x(b);return m},Zc.prototype.loadMatchingFeature=function(t,e,r,n,i,a,o,s,l,u,c){var f=this.bucketLayerIDs[e];if(!a||function(t,e){for(var r=0;r<t.length;r++)if(e.indexOf(t[r])>=0)return!0;return!1}(a,f)){var h=this.sourceLayerCoder.decode(r),p=this.vtLayers[h].feature(n);if(i.filter(new Pi(this.tileID.overscaledZ),p))for(var d=this.getId(p,h),v=0;v<f.length;v++){var g=f[v];if(!(a&&a.indexOf(g)<0)){var y=s[g];if(y){var m={};void 0!==d&&u&&(m=u.getState(y.sourceLayer||\\\"_geojsonTileLayer\\\",d));var x=l[g];x.paint=Yc(x.paint,y.paint,p,m,o),x.layout=Yc(x.layout,y.layout,p,m,o);var b=!c||c(p,y,m);if(b){var _=new Hc(p,this.z,this.x,this.y,d);_.layer=x;var w=t[g];void 0===w&&(w=t[g]=[]),w.push({featureIndex:n,feature:_,intersectionZ:b})}}}}}},Zc.prototype.lookupSymbolFeatures=function(t,e,r,n,i,a,o,s){var l={};this.loadVTLayers();for(var u=wn(i),c=0,f=t;c<f.length;c+=1){var h=f[c];this.loadMatchingFeature(l,r,n,h,u,a,o,s,e)}return l},Zc.prototype.hasLayer=function(t){for(var e=0,r=this.bucketLayerIDs;e<r.length;e+=1)for(var n=0,i=r[e];n<i.length;n+=1)if(t===i[n])return!0;return!1},Zc.prototype.getId=function(t,e){var r=t.id;if(this.promoteId){var n=\\\"string\\\"==typeof this.promoteId?this.promoteId:this.promoteId[e];\\\"boolean\\\"==typeof(r=t.properties[n])&&(r=Number(r))}return r},ni(\\\"FeatureIndex\\\",Zc,{omit:[\\\"rawTileData\\\",\\\"sourceLayerCoder\\\"]});var Jc=function(t,e){this.tileID=t,this.uid=p(),this.uses=0,this.tileSize=e,this.buckets={},this.expirationTime=null,this.queryPadding=0,this.hasSymbolBuckets=!1,this.hasRTLText=!1,this.dependencies={},this.expiredRequestCount=0,this.state=\\\"loading\\\"};Jc.prototype.registerFadeDuration=function(t){var e=t+this.timeAdded;e<F.now()||this.fadeEndTime&&e<this.fadeEndTime||(this.fadeEndTime=e)},Jc.prototype.wasRequested=function(){return\\\"errored\\\"===this.state||\\\"loaded\\\"===this.state||\\\"reloading\\\"===this.state},Jc.prototype.loadVectorData=function(t,e,r){if(this.hasData()&&this.unloadVectorData(),this.state=\\\"loaded\\\",t){for(var n in t.featureIndex&&(this.latestFeatureIndex=t.featureIndex,t.rawTileData?(this.latestRawTileData=t.rawTileData,this.latestFeatureIndex.rawTileData=t.rawTileData):this.latestRawTileData&&(this.latestFeatureIndex.rawTileData=this.latestRawTileData)),this.collisionBoxArray=t.collisionBoxArray,this.buckets=function(t,e){var r={};if(!e)return r;for(var n=function(){var t=a[i],n=t.layerIds.map((function(t){return e.getLayer(t)})).filter(Boolean);if(0!==n.length){t.layers=n,t.stateDependentLayerIds&&(t.stateDependentLayers=t.stateDependentLayerIds.map((function(t){return n.filter((function(e){return e.id===t}))[0]})));for(var o=0,s=n;o<s.length;o+=1){var l=s[o];r[l.id]=t}}},i=0,a=t;i<a.length;i+=1)n();return r}(t.buckets,e.style),this.hasSymbolBuckets=!1,this.buckets){var i=this.buckets[n];if(i instanceof sc){if(this.hasSymbolBuckets=!0,!r)break;i.justReloaded=!0}}if(this.hasRTLText=!1,this.hasSymbolBuckets)for(var a in this.buckets){var o=this.buckets[a];if(o instanceof sc&&o.hasRTLText){this.hasRTLText=!0,Ci.isLoading()||Ci.isLoaded()||\\\"deferred\\\"!==Ei()||Li();break}}for(var s in this.queryPadding=0,this.buckets){var l=this.buckets[s];this.queryPadding=Math.max(this.queryPadding,e.style.getLayer(s).queryRadius(l))}t.imageAtlas&&(this.imageAtlas=t.imageAtlas),t.glyphAtlasImage&&(this.glyphAtlasImage=t.glyphAtlasImage)}else this.collisionBoxArray=new wa},Jc.prototype.unloadVectorData=function(){for(var t in this.buckets)this.buckets[t].destroy();this.buckets={},this.imageAtlasTexture&&this.imageAtlasTexture.destroy(),this.imageAtlas&&(this.imageAtlas=null),this.glyphAtlasTexture&&this.glyphAtlasTexture.destroy(),this.latestFeatureIndex=null,this.state=\\\"unloaded\\\"},Jc.prototype.getBucket=function(t){return this.buckets[t.id]},Jc.prototype.upload=function(t){for(var e in this.buckets){var r=this.buckets[e];r.uploadPending()&&r.upload(t)}var n=t.gl;this.imageAtlas&&!this.imageAtlas.uploaded&&(this.imageAtlasTexture=new Tc(t,this.imageAtlas.image,n.RGBA),this.imageAtlas.uploaded=!0),this.glyphAtlasImage&&(this.glyphAtlasTexture=new Tc(t,this.glyphAtlasImage,n.ALPHA),this.glyphAtlasImage=null)},Jc.prototype.prepare=function(t){this.imageAtlas&&this.imageAtlas.patchUpdatedImages(t,this.imageAtlasTexture)},Jc.prototype.queryRenderedFeatures=function(t,e,r,n,i,a,o,s,l,u){return this.latestFeatureIndex&&this.latestFeatureIndex.rawTileData?this.latestFeatureIndex.query({queryGeometry:n,cameraQueryGeometry:i,scale:a,tileSize:this.tileSize,pixelPosMatrix:u,transform:s,params:o,queryPadding:this.queryPadding*l},t,e,r):{}},Jc.prototype.querySourceFeatures=function(t,e){var r=this.latestFeatureIndex;if(r&&r.rawTileData){var n=r.loadVTLayers(),i=e?e.sourceLayer:\\\"\\\",a=n._geojsonTileLayer||n[i];if(a)for(var o=wn(e&&e.filter),s=this.tileID.canonical,l=s.z,u=s.x,c=s.y,f={z:l,x:u,y:c},h=0;h<a.length;h++){var p=a.feature(h);if(o.filter(new Pi(this.tileID.overscaledZ),p)){var d=r.getId(p,i),v=new Hc(p,l,u,c,d);v.tile=f,t.push(v)}}}},Jc.prototype.hasData=function(){return\\\"loaded\\\"===this.state||\\\"reloading\\\"===this.state||\\\"expired\\\"===this.state},Jc.prototype.patternsLoaded=function(){return this.imageAtlas&&!!Object.keys(this.imageAtlas.patternPositions).length},Jc.prototype.setExpiryData=function(t){var e=this.expirationTime;if(t.cacheControl){var r=M(t.cacheControl);r[\\\"max-age\\\"]&&(this.expirationTime=Date.now()+1e3*r[\\\"max-age\\\"])}else t.expires&&(this.expirationTime=new Date(t.expires).getTime());if(this.expirationTime){var n=Date.now(),i=!1;if(this.expirationTime>n)i=!1;else if(e)if(this.expirationTime<e)i=!0;else{var a=this.expirationTime-e;a?this.expirationTime=n+Math.max(a,3e4):i=!0}else i=!0;i?(this.expiredRequestCount++,this.state=\\\"expired\\\"):this.expiredRequestCount=0}},Jc.prototype.getExpiryTimeout=function(){if(this.expirationTime)return this.expiredRequestCount?1e3*(1<<Math.min(this.expiredRequestCount-1,31)):Math.min(this.expirationTime-(new Date).getTime(),Math.pow(2,31)-1)},Jc.prototype.setFeatureState=function(t,e){if(this.latestFeatureIndex&&this.latestFeatureIndex.rawTileData&&0!==Object.keys(t).length){var r=this.latestFeatureIndex.loadVTLayers();for(var n in this.buckets)if(e.style.hasLayer(n)){var i=this.buckets[n],a=i.layers[0].sourceLayer||\\\"_geojsonTileLayer\\\",o=r[a],s=t[a];if(o&&s&&0!==Object.keys(s).length){i.update(s,o,this.imageAtlas&&this.imageAtlas.patternPositions||{});var l=e&&e.style&&e.style.getLayer(n);l&&(this.queryPadding=Math.max(this.queryPadding,l.queryRadius(i)))}}}},Jc.prototype.holdingForFade=function(){return void 0!==this.symbolFadeHoldUntil},Jc.prototype.symbolFadeFinished=function(){return!this.symbolFadeHoldUntil||this.symbolFadeHoldUntil<F.now()},Jc.prototype.clearFadeHold=function(){this.symbolFadeHoldUntil=void 0},Jc.prototype.setHoldDuration=function(t){this.symbolFadeHoldUntil=F.now()+t},Jc.prototype.setDependencies=function(t,e){for(var r={},n=0,i=e;n<i.length;n+=1)r[i[n]]=!0;this.dependencies[t]=r},Jc.prototype.hasDependency=function(t,e){for(var r=0,n=t;r<n.length;r+=1){var i=n[r],a=this.dependencies[i];if(a)for(var o=0,s=e;o<s.length;o+=1)if(a[s[o]])return!0}return!1};var Kc=self.performance,$c=function(t){this._marks={start:[t.url,\\\"start\\\"].join(\\\"#\\\"),end:[t.url,\\\"end\\\"].join(\\\"#\\\"),measure:t.url.toString()},Kc.mark(this._marks.start)};$c.prototype.finish=function(){Kc.mark(this._marks.end);var t=Kc.getEntriesByName(this._marks.measure);return 0===t.length&&(Kc.measure(this._marks.measure,this._marks.start,this._marks.end),t=Kc.getEntriesByName(this._marks.measure),Kc.clearMarks(this._marks.start),Kc.clearMarks(this._marks.end),Kc.clearMeasures(this._marks.measure)),t},t.Actor=Ac,t.AlphaImage=Yo,t.CanonicalTileID=Fc,t.CollisionBoxArray=wa,t.Color=oe,t.DEMData=Uc,t.DataConstantProperty=ji,t.DictionaryCoder=Vc,t.EXTENT=co,t.ErrorEvent=Ot,t.EvaluationParameters=Pi,t.Event=Pt,t.Evented=It,t.FeatureIndex=Zc,t.FillBucket=Fs,t.FillExtrusionBucket=tl,t.ImageAtlas=ru,t.ImagePosition=tu,t.LineBucket=cl,t.LngLat=Lc,t.LngLatBounds=Sc,t.MercatorCoordinate=Rc,t.ONE_EM=kl,t.OverscaledTileID=Nc,t.Point=a,t.Point$1=a,t.Properties=Gi,t.Protobuf=Sl,t.RGBAImage=Wo,t.RequestManager=q,t.RequestPerformance=$c,t.ResourceType=xt,t.SegmentVector=Oa,t.SourceFeatureState=Gc,t.StructArrayLayout1ui2=ma,t.StructArrayLayout2f1f2i16=ua,t.StructArrayLayout2i4=Qi,t.StructArrayLayout3ui6=fa,t.StructArrayLayout4i8=ta,t.SymbolBucket=sc,t.Texture=Tc,t.Tile=Jc,t.Transitionable=Di,t.Uniform1f=Ya,t.Uniform1i=Za,t.Uniform2f=Wa,t.Uniform3f=Xa,t.Uniform4f=Ja,t.UniformColor=Ka,t.UniformMatrix4f=Qa,t.UnwrappedTileID=Bc,t.ValidationError=zt,t.WritingMode=nu,t.ZoomHistory=ui,t.add=function(t,e,r){return t[0]=e[0]+r[0],t[1]=e[1]+r[1],t[2]=e[2]+r[2],t},t.addDynamicAttributes=nc,t.asyncAll=function(t,e,r){if(!t.length)return r(null,[]);var n=t.length,i=new Array(t.length),a=null;t.forEach((function(t,o){e(t,(function(t,e){t&&(a=t),i[o]=e,0==--n&&r(a,i)}))}))},t.bezier=s,t.bindAll=g,t.browser=F,t.cacheEntryPossiblyAdded=function(t){++yt>ct&&(t.getActor().send(\\\"enforceCacheSizeLimit\\\",ut),yt=0)},t.clamp=u,t.clearTileCache=function(t){var e=self.caches.delete(lt);t&&e.catch(t).then((function(){return t()}))},t.clipLine=Ou,t.clone=function(t){var e=new Io(16);return e[0]=t[0],e[1]=t[1],e[2]=t[2],e[3]=t[3],e[4]=t[4],e[5]=t[5],e[6]=t[6],e[7]=t[7],e[8]=t[8],e[9]=t[9],e[10]=t[10],e[11]=t[11],e[12]=t[12],e[13]=t[13],e[14]=t[14],e[15]=t[15],e},t.clone$1=b,t.clone$2=function(t){var e=new Io(3);return e[0]=t[0],e[1]=t[1],e[2]=t[2],e},t.collisionCircleLayout=_l,t.config=B,t.create=function(){var t=new Io(16);return Io!=Float32Array&&(t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[11]=0,t[12]=0,t[13]=0,t[14]=0),t[0]=1,t[5]=1,t[10]=1,t[15]=1,t},t.create$1=function(){var t=new Io(9);return Io!=Float32Array&&(t[1]=0,t[2]=0,t[3]=0,t[5]=0,t[6]=0,t[7]=0),t[0]=1,t[4]=1,t[8]=1,t},t.create$2=function(){var t=new Io(4);return Io!=Float32Array&&(t[1]=0,t[2]=0),t[0]=1,t[3]=1,t},t.createCommonjsModule=e,t.createExpression=ln,t.createLayout=Ki,t.createStyleLayer=function(t){return\\\"custom\\\"===t.type?new gc(t):new yc[t.type](t)},t.cross=function(t,e,r){var n=e[0],i=e[1],a=e[2],o=r[0],s=r[1],l=r[2];return t[0]=i*l-a*s,t[1]=a*o-n*l,t[2]=n*s-i*o,t},t.deepEqual=function t(e,r){if(Array.isArray(e)){if(!Array.isArray(r)||e.length!==r.length)return!1;for(var n=0;n<e.length;n++)if(!t(e[n],r[n]))return!1;return!0}if(\\\"object\\\"==typeof e&&null!==e&&null!==r){if(\\\"object\\\"!=typeof r)return!1;if(Object.keys(e).length!==Object.keys(r).length)return!1;for(var i in e)if(!t(e[i],r[i]))return!1;return!0}return e===r},t.dot=function(t,e){return t[0]*e[0]+t[1]*e[1]+t[2]*e[2]},t.dot$1=function(t,e){return t[0]*e[0]+t[1]*e[1]+t[2]*e[2]+t[3]*e[3]},t.ease=l,t.emitValidationErrors=Jn,t.endsWith=y,t.enforceCacheSizeLimit=function(t){ht(),tt&&tt.then((function(e){e.keys().then((function(r){for(var n=0;n<r.length-t;n++)e.delete(r[n])}))}))},t.evaluateSizeForFeature=wu,t.evaluateSizeForZoom=Tu,t.evaluateVariableOffset=Yu,t.evented=Si,t.extend=f,t.featureFilter=wn,t.filterObject=x,t.fromRotation=function(t,e){var r=Math.sin(e),n=Math.cos(e);return t[0]=n,t[1]=r,t[2]=0,t[3]=-r,t[4]=n,t[5]=0,t[6]=0,t[7]=0,t[8]=1,t},t.getAnchorAlignment=gu,t.getAnchorJustification=Wu,t.getArrayBuffer=kt,t.getImage=Et,t.getJSON=function(t,e){return Tt(f(t,{type:\\\"json\\\"}),e)},t.getRTLTextPluginStatus=Ei,t.getReferrer=_t,t.getVideo=function(t,e){var r,n,i=self.document.createElement(\\\"video\\\");i.muted=!0,i.onloadstart=function(){e(null,i)};for(var a=0;a<t.length;a++){var o=self.document.createElement(\\\"source\\\");r=t[a],n=void 0,(n=self.document.createElement(\\\"a\\\")).href=r,n.protocol===self.document.location.protocol&&n.host===self.document.location.host||(i.crossOrigin=\\\"Anonymous\\\"),o.src=t[a],i.appendChild(o)}return{cancel:function(){}}},t.identity=Do,t.invert=function(t,e){var r=e[0],n=e[1],i=e[2],a=e[3],o=e[4],s=e[5],l=e[6],u=e[7],c=e[8],f=e[9],h=e[10],p=e[11],d=e[12],v=e[13],g=e[14],y=e[15],m=r*s-n*o,x=r*l-i*o,b=r*u-a*o,_=n*l-i*s,w=n*u-a*s,T=i*u-a*l,k=c*v-f*d,A=c*g-h*d,M=c*y-p*d,S=f*g-h*v,E=f*y-p*v,L=h*y-p*g,C=m*L-x*E+b*S+_*M-w*A+T*k;return C?(C=1/C,t[0]=(s*L-l*E+u*S)*C,t[1]=(i*E-n*L-a*S)*C,t[2]=(v*T-g*w+y*_)*C,t[3]=(h*w-f*T-p*_)*C,t[4]=(l*M-o*L-u*A)*C,t[5]=(r*L-i*M+a*A)*C,t[6]=(g*b-d*T-y*x)*C,t[7]=(c*T-h*b+p*x)*C,t[8]=(o*E-s*M+u*k)*C,t[9]=(n*M-r*E-a*k)*C,t[10]=(d*w-v*b+y*m)*C,t[11]=(f*b-c*w-p*m)*C,t[12]=(s*A-o*S-l*k)*C,t[13]=(r*S-n*A+i*k)*C,t[14]=(v*x-d*_-g*m)*C,t[15]=(c*_-f*x+h*m)*C,t):null},t.isChar=ci,t.isMapboxURL=G,t.keysDifference=function(t,e){var r=[];for(var n in t)n in e||r.push(n);return r},t.makeRequest=Tt,t.mapObject=m,t.mercatorXfromLng=Oc,t.mercatorYfromLat=Ic,t.mercatorZfromAltitude=Dc,t.mul=Ro,t.multiply=zo,t.mvt=Js,t.normalize=function(t,e){var r=e[0],n=e[1],i=e[2],a=r*r+n*n+i*i;return a>0&&(a=1/Math.sqrt(a)),t[0]=e[0]*a,t[1]=e[1]*a,t[2]=e[2]*a,t},t.number=$e,t.offscreenCanvasSupported=mt,t.ortho=function(t,e,r,n,i,a,o){var s=1/(e-r),l=1/(n-i),u=1/(a-o);return t[0]=-2*s,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=-2*l,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=2*u,t[11]=0,t[12]=(e+r)*s,t[13]=(i+n)*l,t[14]=(o+a)*u,t[15]=1,t},t.parseGlyphPBF=function(t){return new Sl(t).readFields(Wl,[])},t.pbf=Sl,t.performSymbolLayout=function(t,e,r,n,i,a,o){t.createArrays();var s=512*t.overscaling;t.tilePixelRatio=co/s,t.compareText={},t.iconsNeedLinear=!1;var l=t.layers[0].layout,u=t.layers[0]._unevaluatedLayout._values,c={};if(\\\"composite\\\"===t.textSizeData.kind){var f=t.textSizeData,h=f.minZoom,p=f.maxZoom;c.compositeTextSizes=[u[\\\"text-size\\\"].possiblyEvaluate(new Pi(h),o),u[\\\"text-size\\\"].possiblyEvaluate(new Pi(p),o)]}if(\\\"composite\\\"===t.iconSizeData.kind){var d=t.iconSizeData,v=d.minZoom,g=d.maxZoom;c.compositeIconSizes=[u[\\\"icon-size\\\"].possiblyEvaluate(new Pi(v),o),u[\\\"icon-size\\\"].possiblyEvaluate(new Pi(g),o)]}c.layoutTextSize=u[\\\"text-size\\\"].possiblyEvaluate(new Pi(t.zoom+1),o),c.layoutIconSize=u[\\\"icon-size\\\"].possiblyEvaluate(new Pi(t.zoom+1),o),c.textMaxSize=u[\\\"text-size\\\"].possiblyEvaluate(new Pi(18));for(var y=l.get(\\\"text-line-height\\\")*kl,m=\\\"map\\\"===l.get(\\\"text-rotation-alignment\\\")&&\\\"point\\\"!==l.get(\\\"symbol-placement\\\"),x=l.get(\\\"text-keep-upright\\\"),b=l.get(\\\"text-size\\\"),_=function(){var a=k[T],s=l.get(\\\"text-font\\\").evaluate(a,{},o).join(\\\",\\\"),u=b.evaluate(a,{},o),f=c.layoutTextSize.evaluate(a,{},o),h=c.layoutIconSize.evaluate(a,{},o),p={horizontal:{},vertical:void 0},d=a.text,v=[0,0];if(d){var g=d.toString(),_=l.get(\\\"text-letter-spacing\\\").evaluate(a,{},o)*kl,A=function(t){for(var e=0,r=t;e<r.length;e+=1)if(n=r[e].charCodeAt(0),ci.Arabic(n)||ci[\\\"Arabic Supplement\\\"](n)||ci[\\\"Arabic Extended-A\\\"](n)||ci[\\\"Arabic Presentation Forms-A\\\"](n)||ci[\\\"Arabic Presentation Forms-B\\\"](n))return!1;var n;return!0}(g)?_:0,M=l.get(\\\"text-anchor\\\").evaluate(a,{},o),S=l.get(\\\"text-variable-anchor\\\");if(!S){var E=l.get(\\\"text-radial-offset\\\").evaluate(a,{},o);v=E?Yu(M,[E*kl,Zu]):l.get(\\\"text-offset\\\").evaluate(a,{},o).map((function(t){return t*kl}))}var L=m?\\\"center\\\":l.get(\\\"text-justify\\\").evaluate(a,{},o),C=l.get(\\\"symbol-placement\\\"),P=\\\"point\\\"===C?l.get(\\\"text-max-width\\\").evaluate(a,{},o)*kl:0,O=function(){t.allowVerticalPlacement&&fi(g)&&(p.vertical=su(d,e,r,i,s,P,y,M,\\\"left\\\",A,v,nu.vertical,!0,C,f,u))};if(!m&&S){for(var I=\\\"auto\\\"===L?S.map((function(t){return Wu(t)})):[L],D=!1,z=0;z<I.length;z++){var R=I[z];if(!p.horizontal[R])if(D)p.horizontal[R]=p.horizontal[0];else{var F=su(d,e,r,i,s,P,y,\\\"center\\\",R,A,v,nu.horizontal,!1,C,f,u);F&&(p.horizontal[R]=F,D=1===F.positionedLines.length)}}O()}else{\\\"auto\\\"===L&&(L=Wu(M));var B=su(d,e,r,i,s,P,y,M,L,A,v,nu.horizontal,!1,C,f,u);B&&(p.horizontal[L]=B),O(),fi(g)&&m&&x&&(p.vertical=su(d,e,r,i,s,P,y,M,L,A,v,nu.vertical,!1,C,f,u))}}var N=void 0,j=!1;if(a.icon&&a.icon.name){var U=n[a.icon.name];U&&(N=function(t,e,r){var n=gu(r),i=n.horizontalAlign,a=n.verticalAlign,o=e[0],s=e[1],l=o-t.displaySize[0]*i,u=l+t.displaySize[0],c=s-t.displaySize[1]*a;return{image:t,top:c,bottom:c+t.displaySize[1],left:l,right:u}}(i[a.icon.name],l.get(\\\"icon-offset\\\").evaluate(a,{},o),l.get(\\\"icon-anchor\\\").evaluate(a,{},o)),j=U.sdf,void 0===t.sdfIcons?t.sdfIcons=U.sdf:t.sdfIcons!==U.sdf&&w(\\\"Style sheet warning: Cannot mix SDF and non-SDF icons in one buffer\\\"),(U.pixelRatio!==t.pixelRatio||0!==l.get(\\\"icon-rotate\\\").constantOr(1))&&(t.iconsNeedLinear=!0))}var V=$u(p.horizontal)||p.vertical;t.iconsInText=!!V&&V.iconsInText,(V||N)&&function(t,e,r,n,i,a,o,s,l,u,c){var f=a.textMaxSize.evaluate(e,{});void 0===f&&(f=o);var h,p=t.layers[0].layout,d=p.get(\\\"icon-offset\\\").evaluate(e,{},c),v=$u(r.horizontal),g=24,y=o/g,m=t.tilePixelRatio*y,x=t.tilePixelRatio*f/g,b=t.tilePixelRatio*s,_=t.tilePixelRatio*p.get(\\\"symbol-spacing\\\"),T=p.get(\\\"text-padding\\\")*t.tilePixelRatio,k=p.get(\\\"icon-padding\\\")*t.tilePixelRatio,A=p.get(\\\"text-max-angle\\\")/180*Math.PI,M=\\\"map\\\"===p.get(\\\"text-rotation-alignment\\\")&&\\\"point\\\"!==p.get(\\\"symbol-placement\\\"),S=\\\"map\\\"===p.get(\\\"icon-rotation-alignment\\\")&&\\\"point\\\"!==p.get(\\\"symbol-placement\\\"),E=p.get(\\\"symbol-placement\\\"),L=_/2,C=p.get(\\\"icon-text-fit\\\");n&&\\\"none\\\"!==C&&(t.allowVerticalPlacement&&r.vertical&&(h=mu(n,r.vertical,C,p.get(\\\"icon-text-fit-padding\\\"),d,y)),v&&(n=mu(n,v,C,p.get(\\\"icon-text-fit-padding\\\"),d,y)));var P=function(s,f){f.x<0||f.x>=co||f.y<0||f.y>=co||function(t,e,r,n,i,a,o,s,l,u,c,f,h,p,d,v,g,y,m,x,b,_,T,k,A){var M,S,E,L,C,P=t.addToLineVertexArray(e,r),O=0,I=0,D=0,z=0,R=-1,F=-1,B={},N=Fa(\\\"\\\"),j=0,U=0;if(void 0===s._unevaluatedLayout.getValue(\\\"text-radial-offset\\\")?(j=(M=s.layout.get(\\\"text-offset\\\").evaluate(b,{},k).map((function(t){return t*kl})))[0],U=M[1]):(j=s.layout.get(\\\"text-radial-offset\\\").evaluate(b,{},k)*kl,U=Zu),t.allowVerticalPlacement&&n.vertical){var V=s.layout.get(\\\"text-rotate\\\").evaluate(b,{},k)+90,H=n.vertical;L=new Nu(l,e,u,c,f,H,h,p,d,V),o&&(C=new Nu(l,e,u,c,f,o,g,y,d,V))}if(i){var q=s.layout.get(\\\"icon-rotate\\\").evaluate(b,{}),G=\\\"none\\\"!==s.layout.get(\\\"icon-text-fit\\\"),Z=Du(i,q,T,G),Y=o?Du(o,q,T,G):void 0;E=new Nu(l,e,u,c,f,i,g,y,!1,q),O=4*Z.length;var W=t.iconSizeData,X=null;\\\"source\\\"===W.kind?(X=[bu*s.layout.get(\\\"icon-size\\\").evaluate(b,{})])[0]>Ju&&w(t.layerIds[0]+': Value for \\\"icon-size\\\" is >= '+Xu+'. Reduce your \\\"icon-size\\\".'):\\\"composite\\\"===W.kind&&((X=[bu*_.compositeIconSizes[0].evaluate(b,{},k),bu*_.compositeIconSizes[1].evaluate(b,{},k)])[0]>Ju||X[1]>Ju)&&w(t.layerIds[0]+': Value for \\\"icon-size\\\" is >= '+Xu+'. Reduce your \\\"icon-size\\\".'),t.addSymbols(t.icon,Z,X,x,m,b,!1,e,P.lineStartIndex,P.lineLength,-1,k),R=t.icon.placedSymbolArray.length-1,Y&&(I=4*Y.length,t.addSymbols(t.icon,Y,X,x,m,b,nu.vertical,e,P.lineStartIndex,P.lineLength,-1,k),F=t.icon.placedSymbolArray.length-1)}for(var J in n.horizontal){var K=n.horizontal[J];if(!S){N=Fa(K.text);var $=s.layout.get(\\\"text-rotate\\\").evaluate(b,{},k);S=new Nu(l,e,u,c,f,K,h,p,d,$)}var Q=1===K.positionedLines.length;if(D+=Ku(t,e,K,a,s,d,b,v,P,n.vertical?nu.horizontal:nu.horizontalOnly,Q?Object.keys(n.horizontal):[J],B,R,_,k),Q)break}n.vertical&&(z+=Ku(t,e,n.vertical,a,s,d,b,v,P,nu.vertical,[\\\"vertical\\\"],B,F,_,k));var tt=S?S.boxStartIndex:t.collisionBoxArray.length,et=S?S.boxEndIndex:t.collisionBoxArray.length,rt=L?L.boxStartIndex:t.collisionBoxArray.length,nt=L?L.boxEndIndex:t.collisionBoxArray.length,it=E?E.boxStartIndex:t.collisionBoxArray.length,at=E?E.boxEndIndex:t.collisionBoxArray.length,ot=C?C.boxStartIndex:t.collisionBoxArray.length,st=C?C.boxEndIndex:t.collisionBoxArray.length,lt=-1,ut=function(t,e){return t&&t.circleDiameter?Math.max(t.circleDiameter,e):e};lt=ut(S,lt),lt=ut(L,lt),lt=ut(E,lt);var ct=(lt=ut(C,lt))>-1?1:0;ct&&(lt*=A/kl),t.glyphOffsetArray.length>=sc.MAX_GLYPHS&&w(\\\"Too many glyphs being rendered in a tile. See https://github.com/mapbox/mapbox-gl-js/issues/2907\\\"),void 0!==b.sortKey&&t.addToSortKeyRanges(t.symbolInstances.length,b.sortKey),t.symbolInstances.emplaceBack(e.x,e.y,B.right>=0?B.right:-1,B.center>=0?B.center:-1,B.left>=0?B.left:-1,B.vertical||-1,R,F,N,tt,et,rt,nt,it,at,ot,st,u,D,z,O,I,ct,0,h,j,U,lt)}(t,f,s,r,n,i,h,t.layers[0],t.collisionBoxArray,e.index,e.sourceLayerIndex,t.index,m,T,M,l,b,k,S,d,e,a,u,c,o)};if(\\\"line\\\"===E)for(var O=0,I=Ou(e.geometry,0,0,co,co);O<I.length;O+=1)for(var D=I[O],z=0,R=Cu(D,_,A,r.vertical||v,n,g,x,t.overscaling,co);z<R.length;z+=1){var F=R[z];v&&Qu(t,v.text,L,F)||P(D,F)}else if(\\\"line-center\\\"===E)for(var B=0,N=e.geometry;B<N.length;B+=1){var j=N[B];if(j.length>1){var U=Lu(j,A,r.vertical||v,n,g,x);U&&P(j,U)}}else if(\\\"Polygon\\\"===e.type)for(var V=0,H=Is(e.geometry,0);V<H.length;V+=1){var q=H[V],G=Vu(q,16);P(q[0],new xu(G.x,G.y,0))}else if(\\\"LineString\\\"===e.type)for(var Z=0,Y=e.geometry;Z<Y.length;Z+=1){var W=Y[Z];P(W,new xu(W[0].x,W[0].y,0))}else if(\\\"Point\\\"===e.type)for(var X=0,J=e.geometry;X<J.length;X+=1)for(var K=0,$=J[X];K<$.length;K+=1){var Q=$[K];P([Q],new xu(Q.x,Q.y,0))}}(t,a,p,N,n,c,f,h,v,j,o)},T=0,k=t.features;T<k.length;T+=1)_();a&&t.generateCollisionDebugBuffers()},t.perspective=function(t,e,r,n,i){var a,o=1/Math.tan(e/2);return t[0]=o/r,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=o,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[11]=-1,t[12]=0,t[13]=0,t[15]=0,null!=i&&i!==1/0?(a=1/(n-i),t[10]=(i+n)*a,t[14]=2*i*n*a):(t[10]=-1,t[14]=-2*n),t},t.pick=function(t,e){for(var r={},n=0;n<e.length;n++){var i=e[n];i in t&&(r[i]=t[i])}return r},t.plugin=Ci,t.polygonIntersectsPolygon=yo,t.postMapLoadEvent=st,t.postTurnstileEvent=at,t.potpack=$l,t.refProperties=[\\\"type\\\",\\\"source\\\",\\\"source-layer\\\",\\\"minzoom\\\",\\\"maxzoom\\\",\\\"filter\\\",\\\"layout\\\"],t.register=ni,t.registerForPluginStateChange=function(t){return t({pluginStatus:Ti,pluginURL:ki}),Si.on(\\\"pluginStateChange\\\",t),t},t.rotate=function(t,e,r){var n=e[0],i=e[1],a=e[2],o=e[3],s=Math.sin(r),l=Math.cos(r);return t[0]=n*l+a*s,t[1]=i*l+o*s,t[2]=n*-s+a*l,t[3]=i*-s+o*l,t},t.rotateX=function(t,e,r){var n=Math.sin(r),i=Math.cos(r),a=e[4],o=e[5],s=e[6],l=e[7],u=e[8],c=e[9],f=e[10],h=e[11];return e!==t&&(t[0]=e[0],t[1]=e[1],t[2]=e[2],t[3]=e[3],t[12]=e[12],t[13]=e[13],t[14]=e[14],t[15]=e[15]),t[4]=a*i+u*n,t[5]=o*i+c*n,t[6]=s*i+f*n,t[7]=l*i+h*n,t[8]=u*i-a*n,t[9]=c*i-o*n,t[10]=f*i-s*n,t[11]=h*i-l*n,t},t.rotateZ=function(t,e,r){var n=Math.sin(r),i=Math.cos(r),a=e[0],o=e[1],s=e[2],l=e[3],u=e[4],c=e[5],f=e[6],h=e[7];return e!==t&&(t[8]=e[8],t[9]=e[9],t[10]=e[10],t[11]=e[11],t[12]=e[12],t[13]=e[13],t[14]=e[14],t[15]=e[15]),t[0]=a*i+u*n,t[1]=o*i+c*n,t[2]=s*i+f*n,t[3]=l*i+h*n,t[4]=u*i-a*n,t[5]=c*i-o*n,t[6]=f*i-s*n,t[7]=h*i-l*n,t},t.scale=function(t,e,r){var n=r[0],i=r[1],a=r[2];return t[0]=e[0]*n,t[1]=e[1]*n,t[2]=e[2]*n,t[3]=e[3]*n,t[4]=e[4]*i,t[5]=e[5]*i,t[6]=e[6]*i,t[7]=e[7]*i,t[8]=e[8]*a,t[9]=e[9]*a,t[10]=e[10]*a,t[11]=e[11]*a,t[12]=e[12],t[13]=e[13],t[14]=e[14],t[15]=e[15],t},t.scale$1=function(t,e,r){return t[0]=e[0]*r,t[1]=e[1]*r,t[2]=e[2]*r,t[3]=e[3]*r,t},t.scale$2=function(t,e,r){return t[0]=e[0]*r,t[1]=e[1]*r,t[2]=e[2]*r,t},t.setCacheLimits=function(t,e){ut=t,ct=e},t.setRTLTextPlugin=function(t,e,r){if(void 0===r&&(r=!1),Ti===mi||Ti===xi||Ti===bi)throw new Error(\\\"setRTLTextPlugin cannot be called multiple times.\\\");ki=F.resolveURL(t),Ti=mi,wi=e,Mi(),r||Li()},t.sphericalToCartesian=function(t){var e=t[0],r=t[1],n=t[2];return r+=90,r*=Math.PI/180,n*=Math.PI/180,{x:e*Math.cos(r)*Math.sin(n),y:e*Math.sin(r)*Math.sin(n),z:e*Math.cos(n)}},t.sqrLen=jo,t.styleSpec=Dt,t.sub=Bo,t.symbolSize=ku,t.transformMat3=function(t,e,r){var n=e[0],i=e[1],a=e[2];return t[0]=n*r[0]+i*r[3]+a*r[6],t[1]=n*r[1]+i*r[4]+a*r[7],t[2]=n*r[2]+i*r[5]+a*r[8],t},t.transformMat4=No,t.translate=function(t,e,r){var n,i,a,o,s,l,u,c,f,h,p,d,v=r[0],g=r[1],y=r[2];return e===t?(t[12]=e[0]*v+e[4]*g+e[8]*y+e[12],t[13]=e[1]*v+e[5]*g+e[9]*y+e[13],t[14]=e[2]*v+e[6]*g+e[10]*y+e[14],t[15]=e[3]*v+e[7]*g+e[11]*y+e[15]):(n=e[0],i=e[1],a=e[2],o=e[3],s=e[4],l=e[5],u=e[6],c=e[7],f=e[8],h=e[9],p=e[10],d=e[11],t[0]=n,t[1]=i,t[2]=a,t[3]=o,t[4]=s,t[5]=l,t[6]=u,t[7]=c,t[8]=f,t[9]=h,t[10]=p,t[11]=d,t[12]=n*v+s*g+f*y+e[12],t[13]=i*v+l*g+h*y+e[13],t[14]=a*v+u*g+p*y+e[14],t[15]=o*v+c*g+d*y+e[15]),t},t.triggerPluginCompletionEvent=Ai,t.uniqueId=p,t.validateCustomStyleLayer=function(t){var e=[],r=t.id;return void 0===r&&e.push({message:\\\"layers.\\\"+r+': missing required property \\\"id\\\"'}),void 0===t.render&&e.push({message:\\\"layers.\\\"+r+': missing required method \\\"render\\\"'}),t.renderingMode&&\\\"2d\\\"!==t.renderingMode&&\\\"3d\\\"!==t.renderingMode&&e.push({message:\\\"layers.\\\"+r+': property \\\"renderingMode\\\" must be either \\\"2d\\\" or \\\"3d\\\"'}),e},t.validateLight=Yn,t.validateStyle=Zn,t.values=function(t){var e=[];for(var r in t)e.push(t[r]);return e},t.vectorTile=Js,t.version=r,t.warnOnce=w,t.webpSupported=N,t.window=self,t.wrap=c})),n(0,(function(t){function e(t){var r=typeof t;if(\\\"number\\\"===r||\\\"boolean\\\"===r||\\\"string\\\"===r||null==t)return JSON.stringify(t);if(Array.isArray(t)){for(var n=\\\"[\\\",i=0,a=t;i<a.length;i+=1)n+=e(a[i])+\\\",\\\";return n+\\\"]\\\"}for(var o=Object.keys(t).sort(),s=\\\"{\\\",l=0;l<o.length;l++)s+=JSON.stringify(o[l])+\\\":\\\"+e(t[o[l]])+\\\",\\\";return s+\\\"}\\\"}function r(r){for(var n=\\\"\\\",i=0,a=t.refProperties;i<a.length;i+=1)n+=\\\"/\\\"+e(r[a[i]]);return n}var n=function(t){this.keyCache={},t&&this.replace(t)};n.prototype.replace=function(t){this._layerConfigs={},this._layers={},this.update(t,[])},n.prototype.update=function(e,n){for(var i=this,a=0,o=e;a<o.length;a+=1){var s=o[a];this._layerConfigs[s.id]=s;var l=this._layers[s.id]=t.createStyleLayer(s);l._featureFilter=t.featureFilter(l.filter),this.keyCache[s.id]&&delete this.keyCache[s.id]}for(var u=0,c=n;u<c.length;u+=1){var f=c[u];delete this.keyCache[f],delete this._layerConfigs[f],delete this._layers[f]}this.familiesBySource={};for(var h=0,p=function(t,e){for(var n={},i=0;i<t.length;i++){var a=e&&e[t[i].id]||r(t[i]);e&&(e[t[i].id]=a);var o=n[a];o||(o=n[a]=[]),o.push(t[i])}var s=[];for(var l in n)s.push(n[l]);return s}(t.values(this._layerConfigs),this.keyCache);h<p.length;h+=1){var d=p[h].map((function(t){return i._layers[t.id]})),v=d[0];if(\\\"none\\\"!==v.visibility){var g=v.source||\\\"\\\",y=this.familiesBySource[g];y||(y=this.familiesBySource[g]={});var m=v.sourceLayer||\\\"_geojsonTileLayer\\\",x=y[m];x||(x=y[m]=[]),x.push(d)}}};var i=function(e){var r={},n=[];for(var i in e){var a=e[i],o=r[i]={};for(var s in a){var l=a[+s];if(l&&0!==l.bitmap.width&&0!==l.bitmap.height){var u={x:0,y:0,w:l.bitmap.width+2,h:l.bitmap.height+2};n.push(u),o[s]={rect:u,metrics:l.metrics}}}}var c=t.potpack(n),f=c.w,h=c.h,p=new t.AlphaImage({width:f||1,height:h||1});for(var d in e){var v=e[d];for(var g in v){var y=v[+g];if(y&&0!==y.bitmap.width&&0!==y.bitmap.height){var m=r[d][g].rect;t.AlphaImage.copy(y.bitmap,p,{x:0,y:0},{x:m.x+1,y:m.y+1},y.bitmap)}}}this.image=p,this.positions=r};t.register(\\\"GlyphAtlas\\\",i);var a=function(e){this.tileID=new t.OverscaledTileID(e.tileID.overscaledZ,e.tileID.wrap,e.tileID.canonical.z,e.tileID.canonical.x,e.tileID.canonical.y),this.uid=e.uid,this.zoom=e.zoom,this.pixelRatio=e.pixelRatio,this.tileSize=e.tileSize,this.source=e.source,this.overscaling=this.tileID.overscaleFactor(),this.showCollisionBoxes=e.showCollisionBoxes,this.collectResourceTiming=!!e.collectResourceTiming,this.returnDependencies=!!e.returnDependencies,this.promoteId=e.promoteId};function o(e,r,n){for(var i=new t.EvaluationParameters(r),a=0,o=e;a<o.length;a+=1)o[a].recalculate(i,n)}function s(e,r){var n=t.getArrayBuffer(e.request,(function(e,n,i,a){e?r(e):n&&r(null,{vectorTile:new t.vectorTile.VectorTile(new t.pbf(n)),rawData:n,cacheControl:i,expires:a})}));return function(){n.cancel(),r()}}a.prototype.parse=function(e,r,n,a,s){var l=this;this.status=\\\"parsing\\\",this.data=e,this.collisionBoxArray=new t.CollisionBoxArray;var u=new t.DictionaryCoder(Object.keys(e.layers).sort()),c=new t.FeatureIndex(this.tileID,this.promoteId);c.bucketLayerIDs=[];var f,h,p,d,v={},g={featureIndex:c,iconDependencies:{},patternDependencies:{},glyphDependencies:{},availableImages:n},y=r.familiesBySource[this.source];for(var m in y){var x=e.layers[m];if(x){1===x.version&&t.warnOnce('Vector tile source \\\"'+this.source+'\\\" layer \\\"'+m+'\\\" does not use vector tile spec v2 and therefore may have some rendering errors.');for(var b=u.encode(m),_=[],w=0;w<x.length;w++){var T=x.feature(w),k=c.getId(T,m);_.push({feature:T,id:k,index:w,sourceLayerIndex:b})}for(var A=0,M=y[m];A<M.length;A+=1){var S=M[A],E=S[0];E.minzoom&&this.zoom<Math.floor(E.minzoom)||E.maxzoom&&this.zoom>=E.maxzoom||\\\"none\\\"!==E.visibility&&(o(S,this.zoom,n),(v[E.id]=E.createBucket({index:c.bucketLayerIDs.length,layers:S,zoom:this.zoom,pixelRatio:this.pixelRatio,overscaling:this.overscaling,collisionBoxArray:this.collisionBoxArray,sourceLayerIndex:b,sourceID:this.source})).populate(_,g,this.tileID.canonical),c.bucketLayerIDs.push(S.map((function(t){return t.id}))))}}}var L=t.mapObject(g.glyphDependencies,(function(t){return Object.keys(t).map(Number)}));Object.keys(L).length?a.send(\\\"getGlyphs\\\",{uid:this.uid,stacks:L},(function(t,e){f||(f=t,h=e,O.call(l))})):h={};var C=Object.keys(g.iconDependencies);C.length?a.send(\\\"getImages\\\",{icons:C,source:this.source,tileID:this.tileID,type:\\\"icons\\\"},(function(t,e){f||(f=t,p=e,O.call(l))})):p={};var P=Object.keys(g.patternDependencies);function O(){if(f)return s(f);if(h&&p&&d){var e=new i(h),r=new t.ImageAtlas(p,d);for(var a in v){var l=v[a];l instanceof t.SymbolBucket?(o(l.layers,this.zoom,n),t.performSymbolLayout(l,h,e.positions,p,r.iconPositions,this.showCollisionBoxes,this.tileID.canonical)):l.hasPattern&&(l instanceof t.LineBucket||l instanceof t.FillBucket||l instanceof t.FillExtrusionBucket)&&(o(l.layers,this.zoom,n),l.addFeatures(g,this.tileID.canonical,r.patternPositions))}this.status=\\\"done\\\",s(null,{buckets:t.values(v).filter((function(t){return!t.isEmpty()})),featureIndex:c,collisionBoxArray:this.collisionBoxArray,glyphAtlasImage:e.image,imageAtlas:r,glyphMap:this.returnDependencies?h:null,iconMap:this.returnDependencies?p:null,glyphPositions:this.returnDependencies?e.positions:null})}}P.length?a.send(\\\"getImages\\\",{icons:P,source:this.source,tileID:this.tileID,type:\\\"patterns\\\"},(function(t,e){f||(f=t,d=e,O.call(l))})):d={},O.call(this)};var l=function(t,e,r,n){this.actor=t,this.layerIndex=e,this.availableImages=r,this.loadVectorData=n||s,this.loading={},this.loaded={}};l.prototype.loadTile=function(e,r){var n=this,i=e.uid;this.loading||(this.loading={});var o=!!(e&&e.request&&e.request.collectResourceTiming)&&new t.RequestPerformance(e.request),s=this.loading[i]=new a(e);s.abort=this.loadVectorData(e,(function(e,a){if(delete n.loading[i],e||!a)return s.status=\\\"done\\\",n.loaded[i]=s,r(e);var l=a.rawData,u={};a.expires&&(u.expires=a.expires),a.cacheControl&&(u.cacheControl=a.cacheControl);var c={};if(o){var f=o.finish();f&&(c.resourceTiming=JSON.parse(JSON.stringify(f)))}s.vectorTile=a.vectorTile,s.parse(a.vectorTile,n.layerIndex,n.availableImages,n.actor,(function(e,n){if(e||!n)return r(e);r(null,t.extend({rawTileData:l.slice(0)},n,u,c))})),n.loaded=n.loaded||{},n.loaded[i]=s}))},l.prototype.reloadTile=function(t,e){var r=this,n=this.loaded,i=t.uid,a=this;if(n&&n[i]){var o=n[i];o.showCollisionBoxes=t.showCollisionBoxes;var s=function(t,n){var i=o.reloadCallback;i&&(delete o.reloadCallback,o.parse(o.vectorTile,a.layerIndex,r.availableImages,a.actor,i)),e(t,n)};\\\"parsing\\\"===o.status?o.reloadCallback=s:\\\"done\\\"===o.status&&(o.vectorTile?o.parse(o.vectorTile,this.layerIndex,this.availableImages,this.actor,s):s())}},l.prototype.abortTile=function(t,e){var r=this.loading,n=t.uid;r&&r[n]&&r[n].abort&&(r[n].abort(),delete r[n]),e()},l.prototype.removeTile=function(t,e){var r=this.loaded,n=t.uid;r&&r[n]&&delete r[n],e()};var u=t.window.ImageBitmap,c=function(){this.loaded={}};c.prototype.loadTile=function(e,r){var n=e.uid,i=e.encoding,a=e.rawImageData,o=u&&a instanceof u?this.getImageData(a):a,s=new t.DEMData(n,o,i);this.loaded=this.loaded||{},this.loaded[n]=s,r(null,s)},c.prototype.getImageData=function(e){this.offscreenCanvas&&this.offscreenCanvasContext||(this.offscreenCanvas=new OffscreenCanvas(e.width,e.height),this.offscreenCanvasContext=this.offscreenCanvas.getContext(\\\"2d\\\")),this.offscreenCanvas.width=e.width,this.offscreenCanvas.height=e.height,this.offscreenCanvasContext.drawImage(e,0,0,e.width,e.height);var r=this.offscreenCanvasContext.getImageData(-1,-1,e.width+2,e.height+2);return this.offscreenCanvasContext.clearRect(0,0,this.offscreenCanvas.width,this.offscreenCanvas.height),new t.RGBAImage({width:r.width,height:r.height},r.data)},c.prototype.removeTile=function(t){var e=this.loaded,r=t.uid;e&&e[r]&&delete e[r]};var f=function t(e,r){var n,i=e&&e.type;if(\\\"FeatureCollection\\\"===i)for(n=0;n<e.features.length;n++)t(e.features[n],r);else if(\\\"GeometryCollection\\\"===i)for(n=0;n<e.geometries.length;n++)t(e.geometries[n],r);else if(\\\"Feature\\\"===i)t(e.geometry,r);else if(\\\"Polygon\\\"===i)h(e.coordinates,r);else if(\\\"MultiPolygon\\\"===i)for(n=0;n<e.coordinates.length;n++)h(e.coordinates[n],r);return e};function h(t,e){if(0!==t.length){p(t[0],e);for(var r=1;r<t.length;r++)p(t[r],!e)}}function p(t,e){for(var r=0,n=0,i=t.length,a=i-1;n<i;a=n++)r+=(t[n][0]-t[a][0])*(t[a][1]+t[n][1]);r>=0!=!!e&&t.reverse()}var d=t.vectorTile.VectorTileFeature.prototype.toGeoJSON,v=function(e){this._feature=e,this.extent=t.EXTENT,this.type=e.type,this.properties=e.tags,\\\"id\\\"in e&&!isNaN(e.id)&&(this.id=parseInt(e.id,10))};v.prototype.loadGeometry=function(){if(1===this._feature.type){for(var e=[],r=0,n=this._feature.geometry;r<n.length;r+=1){var i=n[r];e.push([new t.Point$1(i[0],i[1])])}return e}for(var a=[],o=0,s=this._feature.geometry;o<s.length;o+=1){for(var l=[],u=0,c=s[o];u<c.length;u+=1){var f=c[u];l.push(new t.Point$1(f[0],f[1]))}a.push(l)}return a},v.prototype.toGeoJSON=function(t,e,r){return d.call(this,t,e,r)};var g=function(e){this.layers={_geojsonTileLayer:this},this.name=\\\"_geojsonTileLayer\\\",this.extent=t.EXTENT,this.length=e.length,this._features=e};g.prototype.feature=function(t){return new v(this._features[t])};var y=t.vectorTile.VectorTileFeature,m=x;function x(t,e){this.options=e||{},this.features=t,this.length=t.length}function b(t,e){this.id=\\\"number\\\"==typeof t.id?t.id:void 0,this.type=t.type,this.rawGeometry=1===t.type?[t.geometry]:t.geometry,this.properties=t.tags,this.extent=e||4096}x.prototype.feature=function(t){return new b(this.features[t],this.options.extent)},b.prototype.loadGeometry=function(){var e=this.rawGeometry;this.geometry=[];for(var r=0;r<e.length;r++){for(var n=e[r],i=[],a=0;a<n.length;a++)i.push(new t.Point$1(n[a][0],n[a][1]));this.geometry.push(i)}return this.geometry},b.prototype.bbox=function(){this.geometry||this.loadGeometry();for(var t=this.geometry,e=1/0,r=-1/0,n=1/0,i=-1/0,a=0;a<t.length;a++)for(var o=t[a],s=0;s<o.length;s++){var l=o[s];e=Math.min(e,l.x),r=Math.max(r,l.x),n=Math.min(n,l.y),i=Math.max(i,l.y)}return[e,n,r,i]},b.prototype.toGeoJSON=y.prototype.toGeoJSON;var _=A,w=A,T=function(t,e){e=e||{};var r={};for(var n in t)r[n]=new m(t[n].features,e),r[n].name=n,r[n].version=e.version,r[n].extent=e.extent;return A({layers:r})},k=m;function A(e){var r=new t.pbf;return function(t,e){for(var r in t.layers)e.writeMessage(3,M,t.layers[r])}(e,r),r.finish()}function M(t,e){var r;e.writeVarintField(15,t.version||1),e.writeStringField(1,t.name||\\\"\\\"),e.writeVarintField(5,t.extent||4096);var n={keys:[],values:[],keycache:{},valuecache:{}};for(r=0;r<t.length;r++)n.feature=t.feature(r),e.writeMessage(2,S,n);var i=n.keys;for(r=0;r<i.length;r++)e.writeStringField(3,i[r]);var a=n.values;for(r=0;r<a.length;r++)e.writeMessage(4,O,a[r])}function S(t,e){var r=t.feature;void 0!==r.id&&e.writeVarintField(1,r.id),e.writeMessage(2,E,t),e.writeVarintField(3,r.type),e.writeMessage(4,P,r)}function E(t,e){var r=t.feature,n=t.keys,i=t.values,a=t.keycache,o=t.valuecache;for(var s in r.properties){var l=a[s];void 0===l&&(n.push(s),l=n.length-1,a[s]=l),e.writeVarint(l);var u=r.properties[s],c=typeof u;\\\"string\\\"!==c&&\\\"boolean\\\"!==c&&\\\"number\\\"!==c&&(u=JSON.stringify(u));var f=c+\\\":\\\"+u,h=o[f];void 0===h&&(i.push(u),h=i.length-1,o[f]=h),e.writeVarint(h)}}function L(t,e){return(e<<3)+(7&t)}function C(t){return t<<1^t>>31}function P(t,e){for(var r=t.loadGeometry(),n=t.type,i=0,a=0,o=r.length,s=0;s<o;s++){var l=r[s],u=1;1===n&&(u=l.length),e.writeVarint(L(1,u));for(var c=3===n?l.length-1:l.length,f=0;f<c;f++){1===f&&1!==n&&e.writeVarint(L(2,c-1));var h=l[f].x-i,p=l[f].y-a;e.writeVarint(C(h)),e.writeVarint(C(p)),i+=h,a+=p}3===n&&e.writeVarint(L(7,1))}}function O(t,e){var r=typeof t;\\\"string\\\"===r?e.writeStringField(1,t):\\\"boolean\\\"===r?e.writeBooleanField(7,t):\\\"number\\\"===r&&(t%1!=0?e.writeDoubleField(3,t):t<0?e.writeSVarintField(6,t):e.writeVarintField(5,t))}function I(t,e,r,n,i,a){if(!(i-n<=r)){var o=n+i>>1;D(t,e,o,n,i,a%2),I(t,e,r,n,o-1,a+1),I(t,e,r,o+1,i,a+1)}}function D(t,e,r,n,i,a){for(;i>n;){if(i-n>600){var o=i-n+1,s=r-n+1,l=Math.log(o),u=.5*Math.exp(2*l/3),c=.5*Math.sqrt(l*u*(o-u)/o)*(s-o/2<0?-1:1);D(t,e,r,Math.max(n,Math.floor(r-s*u/o+c)),Math.min(i,Math.floor(r+(o-s)*u/o+c)),a)}var f=e[2*r+a],h=n,p=i;for(z(t,e,n,r),e[2*i+a]>f&&z(t,e,n,i);h<p;){for(z(t,e,h,p),h++,p--;e[2*h+a]<f;)h++;for(;e[2*p+a]>f;)p--}e[2*n+a]===f?z(t,e,n,p):z(t,e,++p,i),p<=r&&(n=p+1),r<=p&&(i=p-1)}}function z(t,e,r,n){R(t,r,n),R(e,2*r,2*n),R(e,2*r+1,2*n+1)}function R(t,e,r){var n=t[e];t[e]=t[r],t[r]=n}function F(t,e,r,n){var i=t-r,a=e-n;return i*i+a*a}_.fromVectorTileJs=w,_.fromGeojsonVt=T,_.GeoJSONWrapper=k;var B=function(t){return t[0]},N=function(t){return t[1]},j=function(t,e,r,n,i){void 0===e&&(e=B),void 0===r&&(r=N),void 0===n&&(n=64),void 0===i&&(i=Float64Array),this.nodeSize=n,this.points=t;for(var a=t.length<65536?Uint16Array:Uint32Array,o=this.ids=new a(t.length),s=this.coords=new i(2*t.length),l=0;l<t.length;l++)o[l]=l,s[2*l]=e(t[l]),s[2*l+1]=r(t[l]);I(o,s,n,0,o.length-1,0)};j.prototype.range=function(t,e,r,n){return function(t,e,r,n,i,a,o){for(var s,l,u=[0,t.length-1,0],c=[];u.length;){var f=u.pop(),h=u.pop(),p=u.pop();if(h-p<=o)for(var d=p;d<=h;d++)s=e[2*d],l=e[2*d+1],s>=r&&s<=i&&l>=n&&l<=a&&c.push(t[d]);else{var v=Math.floor((p+h)/2);s=e[2*v],l=e[2*v+1],s>=r&&s<=i&&l>=n&&l<=a&&c.push(t[v]);var g=(f+1)%2;(0===f?r<=s:n<=l)&&(u.push(p),u.push(v-1),u.push(g)),(0===f?i>=s:a>=l)&&(u.push(v+1),u.push(h),u.push(g))}}return c}(this.ids,this.coords,t,e,r,n,this.nodeSize)},j.prototype.within=function(t,e,r){return function(t,e,r,n,i,a){for(var o=[0,t.length-1,0],s=[],l=i*i;o.length;){var u=o.pop(),c=o.pop(),f=o.pop();if(c-f<=a)for(var h=f;h<=c;h++)F(e[2*h],e[2*h+1],r,n)<=l&&s.push(t[h]);else{var p=Math.floor((f+c)/2),d=e[2*p],v=e[2*p+1];F(d,v,r,n)<=l&&s.push(t[p]);var g=(u+1)%2;(0===u?r-i<=d:n-i<=v)&&(o.push(f),o.push(p-1),o.push(g)),(0===u?r+i>=d:n+i>=v)&&(o.push(p+1),o.push(c),o.push(g))}}return s}(this.ids,this.coords,t,e,r,this.nodeSize)};var U={minZoom:0,maxZoom:16,radius:40,extent:512,nodeSize:64,log:!1,generateId:!1,reduce:null,map:function(t){return t}},V=function(t){this.options=X(Object.create(U),t),this.trees=new Array(this.options.maxZoom+1)};function H(t,e,r,n,i){return{x:t,y:e,zoom:1/0,id:r,parentId:-1,numPoints:n,properties:i}}function q(t,e){var r=t.geometry.coordinates,n=r[0],i=r[1];return{x:Y(n),y:W(i),zoom:1/0,index:e,parentId:-1}}function G(t){return{type:\\\"Feature\\\",id:t.id,properties:Z(t),geometry:{type:\\\"Point\\\",coordinates:[(n=t.x,360*(n-.5)),(e=t.y,r=(180-360*e)*Math.PI/180,360*Math.atan(Math.exp(r))/Math.PI-90)]}};var e,r,n}function Z(t){var e=t.numPoints,r=e>=1e4?Math.round(e/1e3)+\\\"k\\\":e>=1e3?Math.round(e/100)/10+\\\"k\\\":e;return X(X({},t.properties),{cluster:!0,cluster_id:t.id,point_count:e,point_count_abbreviated:r})}function Y(t){return t/360+.5}function W(t){var e=Math.sin(t*Math.PI/180),r=.5-.25*Math.log((1+e)/(1-e))/Math.PI;return r<0?0:r>1?1:r}function X(t,e){for(var r in e)t[r]=e[r];return t}function J(t){return t.x}function K(t){return t.y}function $(t,e,r,n){for(var i,a=n,o=r-e>>1,s=r-e,l=t[e],u=t[e+1],c=t[r],f=t[r+1],h=e+3;h<r;h+=3){var p=Q(t[h],t[h+1],l,u,c,f);if(p>a)i=h,a=p;else if(p===a){var d=Math.abs(h-o);d<s&&(i=h,s=d)}}a>n&&(i-e>3&&$(t,e,i,n),t[i+2]=a,r-i>3&&$(t,i,r,n))}function Q(t,e,r,n,i,a){var o=i-r,s=a-n;if(0!==o||0!==s){var l=((t-r)*o+(e-n)*s)/(o*o+s*s);l>1?(r=i,n=a):l>0&&(r+=o*l,n+=s*l)}return(o=t-r)*o+(s=e-n)*s}function tt(t,e,r,n){var i={id:void 0===t?null:t,type:e,geometry:r,tags:n,minX:1/0,minY:1/0,maxX:-1/0,maxY:-1/0};return function(t){var e=t.geometry,r=t.type;if(\\\"Point\\\"===r||\\\"MultiPoint\\\"===r||\\\"LineString\\\"===r)et(t,e);else if(\\\"Polygon\\\"===r||\\\"MultiLineString\\\"===r)for(var n=0;n<e.length;n++)et(t,e[n]);else if(\\\"MultiPolygon\\\"===r)for(n=0;n<e.length;n++)for(var i=0;i<e[n].length;i++)et(t,e[n][i])}(i),i}function et(t,e){for(var r=0;r<e.length;r+=3)t.minX=Math.min(t.minX,e[r]),t.minY=Math.min(t.minY,e[r+1]),t.maxX=Math.max(t.maxX,e[r]),t.maxY=Math.max(t.maxY,e[r+1])}function rt(t,e,r,n){if(e.geometry){var i=e.geometry.coordinates,a=e.geometry.type,o=Math.pow(r.tolerance/((1<<r.maxZoom)*r.extent),2),s=[],l=e.id;if(r.promoteId?l=e.properties[r.promoteId]:r.generateId&&(l=n||0),\\\"Point\\\"===a)nt(i,s);else if(\\\"MultiPoint\\\"===a)for(var u=0;u<i.length;u++)nt(i[u],s);else if(\\\"LineString\\\"===a)it(i,s,o,!1);else if(\\\"MultiLineString\\\"===a){if(r.lineMetrics){for(u=0;u<i.length;u++)s=[],it(i[u],s,o,!1),t.push(tt(l,\\\"LineString\\\",s,e.properties));return}at(i,s,o,!1)}else if(\\\"Polygon\\\"===a)at(i,s,o,!0);else{if(\\\"MultiPolygon\\\"!==a){if(\\\"GeometryCollection\\\"===a){for(u=0;u<e.geometry.geometries.length;u++)rt(t,{id:l,geometry:e.geometry.geometries[u],properties:e.properties},r,n);return}throw new Error(\\\"Input data is not a valid GeoJSON object.\\\")}for(u=0;u<i.length;u++){var c=[];at(i[u],c,o,!0),s.push(c)}}t.push(tt(l,a,s,e.properties))}}function nt(t,e){e.push(ot(t[0])),e.push(st(t[1])),e.push(0)}function it(t,e,r,n){for(var i,a,o=0,s=0;s<t.length;s++){var l=ot(t[s][0]),u=st(t[s][1]);e.push(l),e.push(u),e.push(0),s>0&&(o+=n?(i*u-l*a)/2:Math.sqrt(Math.pow(l-i,2)+Math.pow(u-a,2))),i=l,a=u}var c=e.length-3;e[2]=1,$(e,0,c,r),e[c+2]=1,e.size=Math.abs(o),e.start=0,e.end=e.size}function at(t,e,r,n){for(var i=0;i<t.length;i++){var a=[];it(t[i],a,r,n),e.push(a)}}function ot(t){return t/360+.5}function st(t){var e=Math.sin(t*Math.PI/180),r=.5-.25*Math.log((1+e)/(1-e))/Math.PI;return r<0?0:r>1?1:r}function lt(t,e,r,n,i,a,o,s){if(n/=e,a>=(r/=e)&&o<n)return t;if(o<r||a>=n)return null;for(var l=[],u=0;u<t.length;u++){var c=t[u],f=c.geometry,h=c.type,p=0===i?c.minX:c.minY,d=0===i?c.maxX:c.maxY;if(p>=r&&d<n)l.push(c);else if(!(d<r||p>=n)){var v=[];if(\\\"Point\\\"===h||\\\"MultiPoint\\\"===h)ut(f,v,r,n,i);else if(\\\"LineString\\\"===h)ct(f,v,r,n,i,!1,s.lineMetrics);else if(\\\"MultiLineString\\\"===h)ht(f,v,r,n,i,!1);else if(\\\"Polygon\\\"===h)ht(f,v,r,n,i,!0);else if(\\\"MultiPolygon\\\"===h)for(var g=0;g<f.length;g++){var y=[];ht(f[g],y,r,n,i,!0),y.length&&v.push(y)}if(v.length){if(s.lineMetrics&&\\\"LineString\\\"===h){for(g=0;g<v.length;g++)l.push(tt(c.id,h,v[g],c.tags));continue}\\\"LineString\\\"!==h&&\\\"MultiLineString\\\"!==h||(1===v.length?(h=\\\"LineString\\\",v=v[0]):h=\\\"MultiLineString\\\"),\\\"Point\\\"!==h&&\\\"MultiPoint\\\"!==h||(h=3===v.length?\\\"Point\\\":\\\"MultiPoint\\\"),l.push(tt(c.id,h,v,c.tags))}}}return l.length?l:null}function ut(t,e,r,n,i){for(var a=0;a<t.length;a+=3){var o=t[a+i];o>=r&&o<=n&&(e.push(t[a]),e.push(t[a+1]),e.push(t[a+2]))}}function ct(t,e,r,n,i,a,o){for(var s,l,u=ft(t),c=0===i?dt:vt,f=t.start,h=0;h<t.length-3;h+=3){var p=t[h],d=t[h+1],v=t[h+2],g=t[h+3],y=t[h+4],m=0===i?p:d,x=0===i?g:y,b=!1;o&&(s=Math.sqrt(Math.pow(p-g,2)+Math.pow(d-y,2))),m<r?x>r&&(l=c(u,p,d,g,y,r),o&&(u.start=f+s*l)):m>n?x<n&&(l=c(u,p,d,g,y,n),o&&(u.start=f+s*l)):pt(u,p,d,v),x<r&&m>=r&&(l=c(u,p,d,g,y,r),b=!0),x>n&&m<=n&&(l=c(u,p,d,g,y,n),b=!0),!a&&b&&(o&&(u.end=f+s*l),e.push(u),u=ft(t)),o&&(f+=s)}var _=t.length-3;p=t[_],d=t[_+1],v=t[_+2],(m=0===i?p:d)>=r&&m<=n&&pt(u,p,d,v),_=u.length-3,a&&_>=3&&(u[_]!==u[0]||u[_+1]!==u[1])&&pt(u,u[0],u[1],u[2]),u.length&&e.push(u)}function ft(t){var e=[];return e.size=t.size,e.start=t.start,e.end=t.end,e}function ht(t,e,r,n,i,a){for(var o=0;o<t.length;o++)ct(t[o],e,r,n,i,a,!1)}function pt(t,e,r,n){t.push(e),t.push(r),t.push(n)}function dt(t,e,r,n,i,a){var o=(a-e)/(n-e);return t.push(a),t.push(r+(i-r)*o),t.push(1),o}function vt(t,e,r,n,i,a){var o=(a-r)/(i-r);return t.push(e+(n-e)*o),t.push(a),t.push(1),o}function gt(t,e){for(var r=[],n=0;n<t.length;n++){var i,a=t[n],o=a.type;if(\\\"Point\\\"===o||\\\"MultiPoint\\\"===o||\\\"LineString\\\"===o)i=yt(a.geometry,e);else if(\\\"MultiLineString\\\"===o||\\\"Polygon\\\"===o){i=[];for(var s=0;s<a.geometry.length;s++)i.push(yt(a.geometry[s],e))}else if(\\\"MultiPolygon\\\"===o)for(i=[],s=0;s<a.geometry.length;s++){for(var l=[],u=0;u<a.geometry[s].length;u++)l.push(yt(a.geometry[s][u],e));i.push(l)}r.push(tt(a.id,o,i,a.tags))}return r}function yt(t,e){var r=[];r.size=t.size,void 0!==t.start&&(r.start=t.start,r.end=t.end);for(var n=0;n<t.length;n+=3)r.push(t[n]+e,t[n+1],t[n+2]);return r}function mt(t,e){if(t.transformed)return t;var r,n,i,a=1<<t.z,o=t.x,s=t.y;for(r=0;r<t.features.length;r++){var l=t.features[r],u=l.geometry,c=l.type;if(l.geometry=[],1===c)for(n=0;n<u.length;n+=2)l.geometry.push(xt(u[n],u[n+1],e,a,o,s));else for(n=0;n<u.length;n++){var f=[];for(i=0;i<u[n].length;i+=2)f.push(xt(u[n][i],u[n][i+1],e,a,o,s));l.geometry.push(f)}}return t.transformed=!0,t}function xt(t,e,r,n,i,a){return[Math.round(r*(t*n-i)),Math.round(r*(e*n-a))]}function bt(t,e,r,n,i){for(var a=e===i.maxZoom?0:i.tolerance/((1<<e)*i.extent),o={features:[],numPoints:0,numSimplified:0,numFeatures:0,source:null,x:r,y:n,z:e,transformed:!1,minX:2,minY:1,maxX:-1,maxY:0},s=0;s<t.length;s++){o.numFeatures++,_t(o,t[s],a,i);var l=t[s].minX,u=t[s].minY,c=t[s].maxX,f=t[s].maxY;l<o.minX&&(o.minX=l),u<o.minY&&(o.minY=u),c>o.maxX&&(o.maxX=c),f>o.maxY&&(o.maxY=f)}return o}function _t(t,e,r,n){var i=e.geometry,a=e.type,o=[];if(\\\"Point\\\"===a||\\\"MultiPoint\\\"===a)for(var s=0;s<i.length;s+=3)o.push(i[s]),o.push(i[s+1]),t.numPoints++,t.numSimplified++;else if(\\\"LineString\\\"===a)wt(o,i,t,r,!1,!1);else if(\\\"MultiLineString\\\"===a||\\\"Polygon\\\"===a)for(s=0;s<i.length;s++)wt(o,i[s],t,r,\\\"Polygon\\\"===a,0===s);else if(\\\"MultiPolygon\\\"===a)for(var l=0;l<i.length;l++){var u=i[l];for(s=0;s<u.length;s++)wt(o,u[s],t,r,!0,0===s)}if(o.length){var c=e.tags||null;if(\\\"LineString\\\"===a&&n.lineMetrics){for(var f in c={},e.tags)c[f]=e.tags[f];c.mapbox_clip_start=i.start/i.size,c.mapbox_clip_end=i.end/i.size}var h={geometry:o,type:\\\"Polygon\\\"===a||\\\"MultiPolygon\\\"===a?3:\\\"LineString\\\"===a||\\\"MultiLineString\\\"===a?2:1,tags:c};null!==e.id&&(h.id=e.id),t.features.push(h)}}function wt(t,e,r,n,i,a){var o=n*n;if(n>0&&e.size<(i?o:n))r.numPoints+=e.length/3;else{for(var s=[],l=0;l<e.length;l+=3)(0===n||e[l+2]>o)&&(r.numSimplified++,s.push(e[l]),s.push(e[l+1])),r.numPoints++;i&&function(t,e){for(var r=0,n=0,i=t.length,a=i-2;n<i;a=n,n+=2)r+=(t[n]-t[a])*(t[n+1]+t[a+1]);if(r>0===e)for(n=0,i=t.length;n<i/2;n+=2){var o=t[n],s=t[n+1];t[n]=t[i-2-n],t[n+1]=t[i-1-n],t[i-2-n]=o,t[i-1-n]=s}}(s,a),t.push(s)}}function Tt(t,e){var r=(e=this.options=function(t,e){for(var r in e)t[r]=e[r];return t}(Object.create(this.options),e)).debug;if(r&&console.time(\\\"preprocess data\\\"),e.maxZoom<0||e.maxZoom>24)throw new Error(\\\"maxZoom should be in the 0-24 range\\\");if(e.promoteId&&e.generateId)throw new Error(\\\"promoteId and generateId cannot be used together.\\\");var n=function(t,e){var r=[];if(\\\"FeatureCollection\\\"===t.type)for(var n=0;n<t.features.length;n++)rt(r,t.features[n],e,n);else\\\"Feature\\\"===t.type?rt(r,t,e):rt(r,{geometry:t},e);return r}(t,e);this.tiles={},this.tileCoords=[],r&&(console.timeEnd(\\\"preprocess data\\\"),console.log(\\\"index: maxZoom: %d, maxPoints: %d\\\",e.indexMaxZoom,e.indexMaxPoints),console.time(\\\"generate tiles\\\"),this.stats={},this.total=0),(n=function(t,e){var r=e.buffer/e.extent,n=t,i=lt(t,1,-1-r,r,0,-1,2,e),a=lt(t,1,1-r,2+r,0,-1,2,e);return(i||a)&&(n=lt(t,1,-r,1+r,0,-1,2,e)||[],i&&(n=gt(i,1).concat(n)),a&&(n=n.concat(gt(a,-1)))),n}(n,e)).length&&this.splitTile(n,0,0,0),r&&(n.length&&console.log(\\\"features: %d, points: %d\\\",this.tiles[0].numFeatures,this.tiles[0].numPoints),console.timeEnd(\\\"generate tiles\\\"),console.log(\\\"tiles generated:\\\",this.total,JSON.stringify(this.stats)))}function kt(t,e,r){return 32*((1<<t)*r+e)+t}function At(t,e){var r=t.tileID.canonical;if(!this._geoJSONIndex)return e(null,null);var n=this._geoJSONIndex.getTile(r.z,r.x,r.y);if(!n)return e(null,null);var i=new g(n.features),a=_(i);0===a.byteOffset&&a.byteLength===a.buffer.byteLength||(a=new Uint8Array(a)),e(null,{vectorTile:i,rawData:a.buffer})}V.prototype.load=function(t){var e=this.options,r=e.log,n=e.minZoom,i=e.maxZoom,a=e.nodeSize;r&&console.time(\\\"total time\\\");var o=\\\"prepare \\\"+t.length+\\\" points\\\";r&&console.time(o),this.points=t;for(var s=[],l=0;l<t.length;l++)t[l].geometry&&s.push(q(t[l],l));this.trees[i+1]=new j(s,J,K,a,Float32Array),r&&console.timeEnd(o);for(var u=i;u>=n;u--){var c=+Date.now();s=this._cluster(s,u),this.trees[u]=new j(s,J,K,a,Float32Array),r&&console.log(\\\"z%d: %d clusters in %dms\\\",u,s.length,+Date.now()-c)}return r&&console.timeEnd(\\\"total time\\\"),this},V.prototype.getClusters=function(t,e){var r=((t[0]+180)%360+360)%360-180,n=Math.max(-90,Math.min(90,t[1])),i=180===t[2]?180:((t[2]+180)%360+360)%360-180,a=Math.max(-90,Math.min(90,t[3]));if(t[2]-t[0]>=360)r=-180,i=180;else if(r>i){var o=this.getClusters([r,n,180,a],e),s=this.getClusters([-180,n,i,a],e);return o.concat(s)}for(var l=this.trees[this._limitZoom(e)],u=[],c=0,f=l.range(Y(r),W(a),Y(i),W(n));c<f.length;c+=1){var h=f[c],p=l.points[h];u.push(p.numPoints?G(p):this.points[p.index])}return u},V.prototype.getChildren=function(t){var e=this._getOriginId(t),r=this._getOriginZoom(t),n=\\\"No cluster with the specified id.\\\",i=this.trees[r];if(!i)throw new Error(n);var a=i.points[e];if(!a)throw new Error(n);for(var o=this.options.radius/(this.options.extent*Math.pow(2,r-1)),s=[],l=0,u=i.within(a.x,a.y,o);l<u.length;l+=1){var c=u[l],f=i.points[c];f.parentId===t&&s.push(f.numPoints?G(f):this.points[f.index])}if(0===s.length)throw new Error(n);return s},V.prototype.getLeaves=function(t,e,r){e=e||10,r=r||0;var n=[];return this._appendLeaves(n,t,e,r,0),n},V.prototype.getTile=function(t,e,r){var n=this.trees[this._limitZoom(t)],i=Math.pow(2,t),a=this.options,o=a.extent,s=a.radius/o,l=(r-s)/i,u=(r+1+s)/i,c={features:[]};return this._addTileFeatures(n.range((e-s)/i,l,(e+1+s)/i,u),n.points,e,r,i,c),0===e&&this._addTileFeatures(n.range(1-s/i,l,1,u),n.points,i,r,i,c),e===i-1&&this._addTileFeatures(n.range(0,l,s/i,u),n.points,-1,r,i,c),c.features.length?c:null},V.prototype.getClusterExpansionZoom=function(t){for(var e=this._getOriginZoom(t)-1;e<=this.options.maxZoom;){var r=this.getChildren(t);if(e++,1!==r.length)break;t=r[0].properties.cluster_id}return e},V.prototype._appendLeaves=function(t,e,r,n,i){for(var a=0,o=this.getChildren(e);a<o.length;a+=1){var s=o[a],l=s.properties;if(l&&l.cluster?i+l.point_count<=n?i+=l.point_count:i=this._appendLeaves(t,l.cluster_id,r,n,i):i<n?i++:t.push(s),t.length===r)break}return i},V.prototype._addTileFeatures=function(t,e,r,n,i,a){for(var o=0,s=t;o<s.length;o+=1){var l=e[s[o]],u=l.numPoints,c={type:1,geometry:[[Math.round(this.options.extent*(l.x*i-r)),Math.round(this.options.extent*(l.y*i-n))]],tags:u?Z(l):this.points[l.index].properties},f=void 0;u?f=l.id:this.options.generateId?f=l.index:this.points[l.index].id&&(f=this.points[l.index].id),void 0!==f&&(c.id=f),a.features.push(c)}},V.prototype._limitZoom=function(t){return Math.max(this.options.minZoom,Math.min(t,this.options.maxZoom+1))},V.prototype._cluster=function(t,e){for(var r=[],n=this.options,i=n.radius,a=n.extent,o=n.reduce,s=i/(a*Math.pow(2,e)),l=0;l<t.length;l++){var u=t[l];if(!(u.zoom<=e)){u.zoom=e;for(var c=this.trees[e+1],f=c.within(u.x,u.y,s),h=u.numPoints||1,p=u.x*h,d=u.y*h,v=o&&h>1?this._map(u,!0):null,g=(l<<5)+(e+1)+this.points.length,y=0,m=f;y<m.length;y+=1){var x=m[y],b=c.points[x];if(!(b.zoom<=e)){b.zoom=e;var _=b.numPoints||1;p+=b.x*_,d+=b.y*_,h+=_,b.parentId=g,o&&(v||(v=this._map(u,!0)),o(v,this._map(b)))}}1===h?r.push(u):(u.parentId=g,r.push(H(p/h,d/h,g,h,v)))}}return r},V.prototype._getOriginId=function(t){return t-this.points.length>>5},V.prototype._getOriginZoom=function(t){return(t-this.points.length)%32},V.prototype._map=function(t,e){if(t.numPoints)return e?X({},t.properties):t.properties;var r=this.points[t.index].properties,n=this.options.map(r);return e&&n===r?X({},n):n},Tt.prototype.options={maxZoom:14,indexMaxZoom:5,indexMaxPoints:1e5,tolerance:3,extent:4096,buffer:64,lineMetrics:!1,promoteId:null,generateId:!1,debug:0},Tt.prototype.splitTile=function(t,e,r,n,i,a,o){for(var s=[t,e,r,n],l=this.options,u=l.debug;s.length;){n=s.pop(),r=s.pop(),e=s.pop(),t=s.pop();var c=1<<e,f=kt(e,r,n),h=this.tiles[f];if(!h&&(u>1&&console.time(\\\"creation\\\"),h=this.tiles[f]=bt(t,e,r,n,l),this.tileCoords.push({z:e,x:r,y:n}),u)){u>1&&(console.log(\\\"tile z%d-%d-%d (features: %d, points: %d, simplified: %d)\\\",e,r,n,h.numFeatures,h.numPoints,h.numSimplified),console.timeEnd(\\\"creation\\\"));var p=\\\"z\\\"+e;this.stats[p]=(this.stats[p]||0)+1,this.total++}if(h.source=t,i){if(e===l.maxZoom||e===i)continue;var d=1<<i-e;if(r!==Math.floor(a/d)||n!==Math.floor(o/d))continue}else if(e===l.indexMaxZoom||h.numPoints<=l.indexMaxPoints)continue;if(h.source=null,0!==t.length){u>1&&console.time(\\\"clipping\\\");var v,g,y,m,x,b,_=.5*l.buffer/l.extent,w=.5-_,T=.5+_,k=1+_;v=g=y=m=null,x=lt(t,c,r-_,r+T,0,h.minX,h.maxX,l),b=lt(t,c,r+w,r+k,0,h.minX,h.maxX,l),t=null,x&&(v=lt(x,c,n-_,n+T,1,h.minY,h.maxY,l),g=lt(x,c,n+w,n+k,1,h.minY,h.maxY,l),x=null),b&&(y=lt(b,c,n-_,n+T,1,h.minY,h.maxY,l),m=lt(b,c,n+w,n+k,1,h.minY,h.maxY,l),b=null),u>1&&console.timeEnd(\\\"clipping\\\"),s.push(v||[],e+1,2*r,2*n),s.push(g||[],e+1,2*r,2*n+1),s.push(y||[],e+1,2*r+1,2*n),s.push(m||[],e+1,2*r+1,2*n+1)}}},Tt.prototype.getTile=function(t,e,r){var n=this.options,i=n.extent,a=n.debug;if(t<0||t>24)return null;var o=1<<t,s=kt(t,e=(e%o+o)%o,r);if(this.tiles[s])return mt(this.tiles[s],i);a>1&&console.log(\\\"drilling down to z%d-%d-%d\\\",t,e,r);for(var l,u=t,c=e,f=r;!l&&u>0;)u--,c=Math.floor(c/2),f=Math.floor(f/2),l=this.tiles[kt(u,c,f)];return l&&l.source?(a>1&&console.log(\\\"found parent tile z%d-%d-%d\\\",u,c,f),a>1&&console.time(\\\"drilling down\\\"),this.splitTile(l.source,u,c,f,t,e,r),a>1&&console.timeEnd(\\\"drilling down\\\"),this.tiles[s]?mt(this.tiles[s],i):null):null};var Mt=function(e){function r(t,r,n,i){e.call(this,t,r,n,At),i&&(this.loadGeoJSON=i)}return e&&(r.__proto__=e),r.prototype=Object.create(e&&e.prototype),r.prototype.constructor=r,r.prototype.loadData=function(t,e){this._pendingCallback&&this._pendingCallback(null,{abandoned:!0}),this._pendingCallback=e,this._pendingLoadDataParams=t,this._state&&\\\"Idle\\\"!==this._state?this._state=\\\"NeedsLoadData\\\":(this._state=\\\"Coalescing\\\",this._loadData())},r.prototype._loadData=function(){var e=this;if(this._pendingCallback&&this._pendingLoadDataParams){var r=this._pendingCallback,n=this._pendingLoadDataParams;delete this._pendingCallback,delete this._pendingLoadDataParams;var i=!!(n&&n.request&&n.request.collectResourceTiming)&&new t.RequestPerformance(n.request);this.loadGeoJSON(n,(function(a,o){if(a||!o)return r(a);if(\\\"object\\\"!=typeof o)return r(new Error(\\\"Input data given to '\\\"+n.source+\\\"' is not a valid GeoJSON object.\\\"));f(o,!0);try{e._geoJSONIndex=n.cluster?new V(function(e){var r=e.superclusterOptions,n=e.clusterProperties;if(!n||!r)return r;for(var i={},a={},o={accumulated:null,zoom:0},s={properties:null},l=Object.keys(n),u=0,c=l;u<c.length;u+=1){var f=c[u],h=n[f],p=h[0],d=h[1],v=t.createExpression(d),g=t.createExpression(\\\"string\\\"==typeof p?[p,[\\\"accumulated\\\"],[\\\"get\\\",f]]:p);i[f]=v.value,a[f]=g.value}return r.map=function(t){s.properties=t;for(var e={},r=0,n=l;r<n.length;r+=1){var a=n[r];e[a]=i[a].evaluate(o,s)}return e},r.reduce=function(t,e){s.properties=e;for(var r=0,n=l;r<n.length;r+=1){var i=n[r];o.accumulated=t[i],t[i]=a[i].evaluate(o,s)}},r}(n)).load(o.features):function(t,e){return new Tt(t,e)}(o,n.geojsonVtOptions)}catch(a){return r(a)}e.loaded={};var s={};if(i){var l=i.finish();l&&(s.resourceTiming={},s.resourceTiming[n.source]=JSON.parse(JSON.stringify(l)))}r(null,s)}))}},r.prototype.coalesce=function(){\\\"Coalescing\\\"===this._state?this._state=\\\"Idle\\\":\\\"NeedsLoadData\\\"===this._state&&(this._state=\\\"Coalescing\\\",this._loadData())},r.prototype.reloadTile=function(t,r){var n=this.loaded,i=t.uid;return n&&n[i]?e.prototype.reloadTile.call(this,t,r):this.loadTile(t,r)},r.prototype.loadGeoJSON=function(e,r){if(e.request)t.getJSON(e.request,r);else{if(\\\"string\\\"!=typeof e.data)return r(new Error(\\\"Input data given to '\\\"+e.source+\\\"' is not a valid GeoJSON object.\\\"));try{return r(null,JSON.parse(e.data))}catch(t){return r(new Error(\\\"Input data given to '\\\"+e.source+\\\"' is not a valid GeoJSON object.\\\"))}}},r.prototype.removeSource=function(t,e){this._pendingCallback&&this._pendingCallback(null,{abandoned:!0}),e()},r.prototype.getClusterExpansionZoom=function(t,e){try{e(null,this._geoJSONIndex.getClusterExpansionZoom(t.clusterId))}catch(t){e(t)}},r.prototype.getClusterChildren=function(t,e){try{e(null,this._geoJSONIndex.getChildren(t.clusterId))}catch(t){e(t)}},r.prototype.getClusterLeaves=function(t,e){try{e(null,this._geoJSONIndex.getLeaves(t.clusterId,t.limit,t.offset))}catch(t){e(t)}},r}(l);var St=function(e){var r=this;this.self=e,this.actor=new t.Actor(e,this),this.layerIndexes={},this.availableImages={},this.workerSourceTypes={vector:l,geojson:Mt},this.workerSources={},this.demWorkerSources={},this.self.registerWorkerSource=function(t,e){if(r.workerSourceTypes[t])throw new Error('Worker source with name \\\"'+t+'\\\" already registered.');r.workerSourceTypes[t]=e},this.self.registerRTLTextPlugin=function(e){if(t.plugin.isParsed())throw new Error(\\\"RTL text plugin already registered.\\\");t.plugin.applyArabicShaping=e.applyArabicShaping,t.plugin.processBidirectionalText=e.processBidirectionalText,t.plugin.processStyledBidirectionalText=e.processStyledBidirectionalText}};return St.prototype.setReferrer=function(t,e){this.referrer=e},St.prototype.setImages=function(t,e,r){for(var n in this.availableImages[t]=e,this.workerSources[t]){var i=this.workerSources[t][n];for(var a in i)i[a].availableImages=e}r()},St.prototype.setLayers=function(t,e,r){this.getLayerIndex(t).replace(e),r()},St.prototype.updateLayers=function(t,e,r){this.getLayerIndex(t).update(e.layers,e.removedIds),r()},St.prototype.loadTile=function(t,e,r){this.getWorkerSource(t,e.type,e.source).loadTile(e,r)},St.prototype.loadDEMTile=function(t,e,r){this.getDEMWorkerSource(t,e.source).loadTile(e,r)},St.prototype.reloadTile=function(t,e,r){this.getWorkerSource(t,e.type,e.source).reloadTile(e,r)},St.prototype.abortTile=function(t,e,r){this.getWorkerSource(t,e.type,e.source).abortTile(e,r)},St.prototype.removeTile=function(t,e,r){this.getWorkerSource(t,e.type,e.source).removeTile(e,r)},St.prototype.removeDEMTile=function(t,e){this.getDEMWorkerSource(t,e.source).removeTile(e)},St.prototype.removeSource=function(t,e,r){if(this.workerSources[t]&&this.workerSources[t][e.type]&&this.workerSources[t][e.type][e.source]){var n=this.workerSources[t][e.type][e.source];delete this.workerSources[t][e.type][e.source],void 0!==n.removeSource?n.removeSource(e,r):r()}},St.prototype.loadWorkerSource=function(t,e,r){try{this.self.importScripts(e.url),r()}catch(t){r(t.toString())}},St.prototype.syncRTLPluginState=function(e,r,n){try{t.plugin.setState(r);var i=t.plugin.getPluginURL();if(t.plugin.isLoaded()&&!t.plugin.isParsed()&&null!=i){this.self.importScripts(i);var a=t.plugin.isParsed();n(a?void 0:new Error(\\\"RTL Text Plugin failed to import scripts from \\\"+i),a)}}catch(t){n(t.toString())}},St.prototype.getAvailableImages=function(t){var e=this.availableImages[t];return e||(e=[]),e},St.prototype.getLayerIndex=function(t){var e=this.layerIndexes[t];return e||(e=this.layerIndexes[t]=new n),e},St.prototype.getWorkerSource=function(t,e,r){var n=this;if(this.workerSources[t]||(this.workerSources[t]={}),this.workerSources[t][e]||(this.workerSources[t][e]={}),!this.workerSources[t][e][r]){var i={send:function(e,r,i){n.actor.send(e,r,i,t)}};this.workerSources[t][e][r]=new this.workerSourceTypes[e](i,this.getLayerIndex(t),this.getAvailableImages(t))}return this.workerSources[t][e][r]},St.prototype.getDEMWorkerSource=function(t,e){return this.demWorkerSources[t]||(this.demWorkerSources[t]={}),this.demWorkerSources[t][e]||(this.demWorkerSources[t][e]=new c),this.demWorkerSources[t][e]},St.prototype.enforceCacheSizeLimit=function(e,r){t.enforceCacheSizeLimit(r)},\\\"undefined\\\"!=typeof WorkerGlobalScope&&void 0!==t.window&&t.window instanceof WorkerGlobalScope&&(t.window.worker=new St(t.window)),St})),n(0,(function(t){var e=t.createCommonjsModule((function(t){function e(t){return!r(t)}function r(t){return\\\"undefined\\\"!=typeof window&&\\\"undefined\\\"!=typeof document?Array.prototype&&Array.prototype.every&&Array.prototype.filter&&Array.prototype.forEach&&Array.prototype.indexOf&&Array.prototype.lastIndexOf&&Array.prototype.map&&Array.prototype.some&&Array.prototype.reduce&&Array.prototype.reduceRight&&Array.isArray?Function.prototype&&Function.prototype.bind?Object.keys&&Object.create&&Object.getPrototypeOf&&Object.getOwnPropertyNames&&Object.isSealed&&Object.isFrozen&&Object.isExtensible&&Object.getOwnPropertyDescriptor&&Object.defineProperty&&Object.defineProperties&&Object.seal&&Object.freeze&&Object.preventExtensions?\\\"JSON\\\"in window&&\\\"parse\\\"in JSON&&\\\"stringify\\\"in JSON?function(){if(!(\\\"Worker\\\"in window&&\\\"Blob\\\"in window&&\\\"URL\\\"in window))return!1;var t,e,r=new Blob([\\\"\\\"],{type:\\\"text/javascript\\\"}),n=URL.createObjectURL(r);try{e=new Worker(n),t=!0}catch(e){t=!1}return e&&e.terminate(),URL.revokeObjectURL(n),t}()?\\\"Uint8ClampedArray\\\"in window?ArrayBuffer.isView?function(){var t=document.createElement(\\\"canvas\\\");t.width=t.height=1;var e=t.getContext(\\\"2d\\\");if(!e)return!1;var r=e.getImageData(0,0,1,1);return r&&r.width===t.width}()?(r=t&&t.failIfMajorPerformanceCaveat,void 0===n[r]&&(n[r]=function(t){var r=function(t){var r=document.createElement(\\\"canvas\\\"),n=Object.create(e.webGLContextAttributes);return n.failIfMajorPerformanceCaveat=t,r.probablySupportsContext?r.probablySupportsContext(\\\"webgl\\\",n)||r.probablySupportsContext(\\\"experimental-webgl\\\",n):r.supportsContext?r.supportsContext(\\\"webgl\\\",n)||r.supportsContext(\\\"experimental-webgl\\\",n):r.getContext(\\\"webgl\\\",n)||r.getContext(\\\"experimental-webgl\\\",n)}(t);if(!r)return!1;var n=r.createShader(r.VERTEX_SHADER);return!(!n||r.isContextLost())&&(r.shaderSource(n,\\\"void main() {}\\\"),r.compileShader(n),!0===r.getShaderParameter(n,r.COMPILE_STATUS))}(r)),n[r]?void 0:\\\"insufficient WebGL support\\\"):\\\"insufficient Canvas/getImageData support\\\":\\\"insufficient ArrayBuffer support\\\":\\\"insufficient Uint8ClampedArray support\\\":\\\"insufficient worker support\\\":\\\"insufficient JSON support\\\":\\\"insufficient Object support\\\":\\\"insufficient Function support\\\":\\\"insufficent Array support\\\":\\\"not a browser\\\";var r}t.exports?t.exports=e:window&&(window.mapboxgl=window.mapboxgl||{},window.mapboxgl.supported=e,window.mapboxgl.notSupportedReason=r);var n={};e.webGLContextAttributes={antialias:!1,alpha:!0,stencil:!0,depth:!0}})),r={create:function(e,r,n){var i=t.window.document.createElement(e);return void 0!==r&&(i.className=r),n&&n.appendChild(i),i},createNS:function(e,r){return t.window.document.createElementNS(e,r)}},n=t.window.document.documentElement.style;function i(t){if(!n)return t[0];for(var e=0;e<t.length;e++)if(t[e]in n)return t[e];return t[0]}var a,o=i([\\\"userSelect\\\",\\\"MozUserSelect\\\",\\\"WebkitUserSelect\\\",\\\"msUserSelect\\\"]);r.disableDrag=function(){n&&o&&(a=n[o],n[o]=\\\"none\\\")},r.enableDrag=function(){n&&o&&(n[o]=a)};var s=i([\\\"transform\\\",\\\"WebkitTransform\\\"]);r.setTransform=function(t,e){t.style[s]=e};var l=!1;try{var u=Object.defineProperty({},\\\"passive\\\",{get:function(){l=!0}});t.window.addEventListener(\\\"test\\\",u,u),t.window.removeEventListener(\\\"test\\\",u,u)}catch(t){l=!1}r.addEventListener=function(t,e,r,n){void 0===n&&(n={}),\\\"passive\\\"in n&&l?t.addEventListener(e,r,n):t.addEventListener(e,r,n.capture)},r.removeEventListener=function(t,e,r,n){void 0===n&&(n={}),\\\"passive\\\"in n&&l?t.removeEventListener(e,r,n):t.removeEventListener(e,r,n.capture)};var c=function(e){e.preventDefault(),e.stopPropagation(),t.window.removeEventListener(\\\"click\\\",c,!0)};function f(t){var e=t.userImage;return!!(e&&e.render&&e.render())&&(t.data.replace(new Uint8Array(e.data.buffer)),!0)}r.suppressClick=function(){t.window.addEventListener(\\\"click\\\",c,!0),t.window.setTimeout((function(){t.window.removeEventListener(\\\"click\\\",c,!0)}),0)},r.mousePos=function(e,r){var n=e.getBoundingClientRect();return new t.Point(r.clientX-n.left-e.clientLeft,r.clientY-n.top-e.clientTop)},r.touchPos=function(e,r){for(var n=e.getBoundingClientRect(),i=[],a=0;a<r.length;a++)i.push(new t.Point(r[a].clientX-n.left-e.clientLeft,r[a].clientY-n.top-e.clientTop));return i},r.mouseButton=function(e){return void 0!==t.window.InstallTrigger&&2===e.button&&e.ctrlKey&&t.window.navigator.platform.toUpperCase().indexOf(\\\"MAC\\\")>=0?0:e.button},r.remove=function(t){t.parentNode&&t.parentNode.removeChild(t)};var h=function(e){function r(){e.call(this),this.images={},this.updatedImages={},this.callbackDispatchedThisFrame={},this.loaded=!1,this.requestors=[],this.patterns={},this.atlasImage=new t.RGBAImage({width:1,height:1}),this.dirty=!0}return e&&(r.__proto__=e),r.prototype=Object.create(e&&e.prototype),r.prototype.constructor=r,r.prototype.isLoaded=function(){return this.loaded},r.prototype.setLoaded=function(t){if(this.loaded!==t&&(this.loaded=t,t)){for(var e=0,r=this.requestors;e<r.length;e+=1){var n=r[e],i=n.ids,a=n.callback;this._notify(i,a)}this.requestors=[]}},r.prototype.getImage=function(t){return this.images[t]},r.prototype.addImage=function(t,e){this._validate(t,e)&&(this.images[t]=e)},r.prototype._validate=function(e,r){var n=!0;return this._validateStretch(r.stretchX,r.data&&r.data.width)||(this.fire(new t.ErrorEvent(new Error('Image \\\"'+e+'\\\" has invalid \\\"stretchX\\\" value'))),n=!1),this._validateStretch(r.stretchY,r.data&&r.data.height)||(this.fire(new t.ErrorEvent(new Error('Image \\\"'+e+'\\\" has invalid \\\"stretchY\\\" value'))),n=!1),this._validateContent(r.content,r)||(this.fire(new t.ErrorEvent(new Error('Image \\\"'+e+'\\\" has invalid \\\"content\\\" value'))),n=!1),n},r.prototype._validateStretch=function(t,e){if(!t)return!0;for(var r=0,n=0,i=t;n<i.length;n+=1){var a=i[n];if(a[0]<r||a[1]<a[0]||e<a[1])return!1;r=a[1]}return!0},r.prototype._validateContent=function(t,e){return!(t&&(4!==t.length||t[0]<0||e.data.width<t[0]||t[1]<0||e.data.height<t[1]||t[2]<0||e.data.width<t[2]||t[3]<0||e.data.height<t[3]||t[2]<t[0]||t[3]<t[1]))},r.prototype.updateImage=function(t,e){var r=this.images[t];e.version=r.version+1,this.images[t]=e,this.updatedImages[t]=!0},r.prototype.removeImage=function(t){var e=this.images[t];delete this.images[t],delete this.patterns[t],e.userImage&&e.userImage.onRemove&&e.userImage.onRemove()},r.prototype.listImages=function(){return Object.keys(this.images)},r.prototype.getImages=function(t,e){var r=!0;if(!this.isLoaded())for(var n=0,i=t;n<i.length;n+=1){var a=i[n];this.images[a]||(r=!1)}this.isLoaded()||r?this._notify(t,e):this.requestors.push({ids:t,callback:e})},r.prototype._notify=function(e,r){for(var n={},i=0,a=e;i<a.length;i+=1){var o=a[i];this.images[o]||this.fire(new t.Event(\\\"styleimagemissing\\\",{id:o}));var s=this.images[o];s?n[o]={data:s.data.clone(),pixelRatio:s.pixelRatio,sdf:s.sdf,version:s.version,stretchX:s.stretchX,stretchY:s.stretchY,content:s.content,hasRenderCallback:Boolean(s.userImage&&s.userImage.render)}:t.warnOnce('Image \\\"'+o+'\\\" could not be loaded. Please make sure you have added the image with map.addImage() or a \\\"sprite\\\" property in your style. You can provide missing images by listening for the \\\"styleimagemissing\\\" map event.')}r(null,n)},r.prototype.getPixelSize=function(){var t=this.atlasImage;return{width:t.width,height:t.height}},r.prototype.getPattern=function(e){var r=this.patterns[e],n=this.getImage(e);if(!n)return null;if(r&&r.position.version===n.version)return r.position;if(r)r.position.version=n.version;else{var i={w:n.data.width+2,h:n.data.height+2,x:0,y:0},a=new t.ImagePosition(i,n);this.patterns[e]={bin:i,position:a}}return this._updatePatternAtlas(),this.patterns[e].position},r.prototype.bind=function(e){var r=e.gl;this.atlasTexture?this.dirty&&(this.atlasTexture.update(this.atlasImage),this.dirty=!1):this.atlasTexture=new t.Texture(e,this.atlasImage,r.RGBA),this.atlasTexture.bind(r.LINEAR,r.CLAMP_TO_EDGE)},r.prototype._updatePatternAtlas=function(){var e=[];for(var r in this.patterns)e.push(this.patterns[r].bin);var n=t.potpack(e),i=n.w,a=n.h,o=this.atlasImage;for(var s in o.resize({width:i||1,height:a||1}),this.patterns){var l=this.patterns[s].bin,u=l.x+1,c=l.y+1,f=this.images[s].data,h=f.width,p=f.height;t.RGBAImage.copy(f,o,{x:0,y:0},{x:u,y:c},{width:h,height:p}),t.RGBAImage.copy(f,o,{x:0,y:p-1},{x:u,y:c-1},{width:h,height:1}),t.RGBAImage.copy(f,o,{x:0,y:0},{x:u,y:c+p},{width:h,height:1}),t.RGBAImage.copy(f,o,{x:h-1,y:0},{x:u-1,y:c},{width:1,height:p}),t.RGBAImage.copy(f,o,{x:0,y:0},{x:u+h,y:c},{width:1,height:p})}this.dirty=!0},r.prototype.beginFrame=function(){this.callbackDispatchedThisFrame={}},r.prototype.dispatchRenderCallbacks=function(t){for(var e=0,r=t;e<r.length;e+=1){var n=r[e];if(!this.callbackDispatchedThisFrame[n]){this.callbackDispatchedThisFrame[n]=!0;var i=this.images[n];f(i)&&this.updateImage(n,i)}}},r}(t.Evented);var p=g,d=g,v=1e20;function g(t,e,r,n,i,a){this.fontSize=t||24,this.buffer=void 0===e?3:e,this.cutoff=n||.25,this.fontFamily=i||\\\"sans-serif\\\",this.fontWeight=a||\\\"normal\\\",this.radius=r||8;var o=this.size=this.fontSize+2*this.buffer;this.canvas=document.createElement(\\\"canvas\\\"),this.canvas.width=this.canvas.height=o,this.ctx=this.canvas.getContext(\\\"2d\\\"),this.ctx.font=this.fontWeight+\\\" \\\"+this.fontSize+\\\"px \\\"+this.fontFamily,this.ctx.textBaseline=\\\"middle\\\",this.ctx.fillStyle=\\\"black\\\",this.gridOuter=new Float64Array(o*o),this.gridInner=new Float64Array(o*o),this.f=new Float64Array(o),this.d=new Float64Array(o),this.z=new Float64Array(o+1),this.v=new Int16Array(o),this.middle=Math.round(o/2*(navigator.userAgent.indexOf(\\\"Gecko/\\\")>=0?1.2:1))}function y(t,e,r,n,i,a,o){for(var s=0;s<e;s++){for(var l=0;l<r;l++)n[l]=t[l*e+s];for(m(n,i,a,o,r),l=0;l<r;l++)t[l*e+s]=i[l]}for(l=0;l<r;l++){for(s=0;s<e;s++)n[s]=t[l*e+s];for(m(n,i,a,o,e),s=0;s<e;s++)t[l*e+s]=Math.sqrt(i[s])}}function m(t,e,r,n,i){r[0]=0,n[0]=-v,n[1]=+v;for(var a=1,o=0;a<i;a++){for(var s=(t[a]+a*a-(t[r[o]]+r[o]*r[o]))/(2*a-2*r[o]);s<=n[o];)o--,s=(t[a]+a*a-(t[r[o]]+r[o]*r[o]))/(2*a-2*r[o]);r[++o]=a,n[o]=s,n[o+1]=+v}for(a=0,o=0;a<i;a++){for(;n[o+1]<a;)o++;e[a]=(a-r[o])*(a-r[o])+t[r[o]]}}g.prototype.draw=function(t){this.ctx.clearRect(0,0,this.size,this.size),this.ctx.fillText(t,this.buffer,this.middle);for(var e=this.ctx.getImageData(0,0,this.size,this.size),r=new Uint8ClampedArray(this.size*this.size),n=0;n<this.size*this.size;n++){var i=e.data[4*n+3]/255;this.gridOuter[n]=1===i?0:0===i?v:Math.pow(Math.max(0,.5-i),2),this.gridInner[n]=1===i?v:0===i?0:Math.pow(Math.max(0,i-.5),2)}for(y(this.gridOuter,this.size,this.size,this.f,this.d,this.v,this.z),y(this.gridInner,this.size,this.size,this.f,this.d,this.v,this.z),n=0;n<this.size*this.size;n++){var a=this.gridOuter[n]-this.gridInner[n];r[n]=Math.max(0,Math.min(255,Math.round(255-255*(a/this.radius+this.cutoff))))}return r},p.default=d;var x=function(t,e){this.requestManager=t,this.localIdeographFontFamily=e,this.entries={}};x.prototype.setURL=function(t){this.url=t},x.prototype.getGlyphs=function(e,r){var n=this,i=[];for(var a in e)for(var o=0,s=e[a];o<s.length;o+=1){var l=s[o];i.push({stack:a,id:l})}t.asyncAll(i,(function(t,e){var r=t.stack,i=t.id,a=n.entries[r];a||(a=n.entries[r]={glyphs:{},requests:{},ranges:{}});var o=a.glyphs[i];if(void 0===o){if(o=n._tinySDF(a,r,i))return a.glyphs[i]=o,void e(null,{stack:r,id:i,glyph:o});var s=Math.floor(i/256);if(256*s>65535)e(new Error(\\\"glyphs > 65535 not supported\\\"));else if(a.ranges[s])e(null,{stack:r,id:i,glyph:o});else{var l=a.requests[s];l||(l=a.requests[s]=[],x.loadGlyphRange(r,s,n.url,n.requestManager,(function(t,e){if(e){for(var r in e)n._doesCharSupportLocalGlyph(+r)||(a.glyphs[+r]=e[+r]);a.ranges[s]=!0}for(var i=0,o=l;i<o.length;i+=1)(0,o[i])(t,e);delete a.requests[s]}))),l.push((function(t,n){t?e(t):n&&e(null,{stack:r,id:i,glyph:n[i]||null})}))}}else e(null,{stack:r,id:i,glyph:o})}),(function(t,e){if(t)r(t);else if(e){for(var n={},i=0,a=e;i<a.length;i+=1){var o=a[i],s=o.stack,l=o.id,u=o.glyph;(n[s]||(n[s]={}))[l]=u&&{id:u.id,bitmap:u.bitmap.clone(),metrics:u.metrics}}r(null,n)}}))},x.prototype._doesCharSupportLocalGlyph=function(e){return!!this.localIdeographFontFamily&&(t.isChar[\\\"CJK Unified Ideographs\\\"](e)||t.isChar[\\\"Hangul Syllables\\\"](e)||t.isChar.Hiragana(e)||t.isChar.Katakana(e))},x.prototype._tinySDF=function(e,r,n){var i=this.localIdeographFontFamily;if(i&&this._doesCharSupportLocalGlyph(n)){var a=e.tinySDF;if(!a){var o=\\\"400\\\";/bold/i.test(r)?o=\\\"900\\\":/medium/i.test(r)?o=\\\"500\\\":/light/i.test(r)&&(o=\\\"200\\\"),a=e.tinySDF=new x.TinySDF(24,3,8,.25,i,o)}return{id:n,bitmap:new t.AlphaImage({width:30,height:30},a.draw(String.fromCharCode(n))),metrics:{width:24,height:24,left:0,top:-8,advance:24}}}},x.loadGlyphRange=function(e,r,n,i,a){var o=256*r,s=o+255,l=i.transformRequest(i.normalizeGlyphsURL(n).replace(\\\"{fontstack}\\\",e).replace(\\\"{range}\\\",o+\\\"-\\\"+s),t.ResourceType.Glyphs);t.getArrayBuffer(l,(function(e,r){if(e)a(e);else if(r){for(var n={},i=0,o=t.parseGlyphPBF(r);i<o.length;i+=1){var s=o[i];n[s.id]=s}a(null,n)}}))},x.TinySDF=p;var b=function(){this.specification=t.styleSpec.light.position};b.prototype.possiblyEvaluate=function(e,r){return t.sphericalToCartesian(e.expression.evaluate(r))},b.prototype.interpolate=function(e,r,n){return{x:t.number(e.x,r.x,n),y:t.number(e.y,r.y,n),z:t.number(e.z,r.z,n)}};var _=new t.Properties({anchor:new t.DataConstantProperty(t.styleSpec.light.anchor),position:new b,color:new t.DataConstantProperty(t.styleSpec.light.color),intensity:new t.DataConstantProperty(t.styleSpec.light.intensity)}),w=\\\"-transition\\\",T=function(e){function r(r){e.call(this),this._transitionable=new t.Transitionable(_),this.setLight(r),this._transitioning=this._transitionable.untransitioned()}return e&&(r.__proto__=e),r.prototype=Object.create(e&&e.prototype),r.prototype.constructor=r,r.prototype.getLight=function(){return this._transitionable.serialize()},r.prototype.setLight=function(e,r){if(void 0===r&&(r={}),!this._validate(t.validateLight,e,r))for(var n in e){var i=e[n];t.endsWith(n,w)?this._transitionable.setTransition(n.slice(0,-11),i):this._transitionable.setValue(n,i)}},r.prototype.updateTransitions=function(t){this._transitioning=this._transitionable.transitioned(t,this._transitioning)},r.prototype.hasTransition=function(){return this._transitioning.hasTransition()},r.prototype.recalculate=function(t){this.properties=this._transitioning.possiblyEvaluate(t)},r.prototype._validate=function(e,r,n){return(!n||!1!==n.validate)&&t.emitValidationErrors(this,e.call(t.validateStyle,t.extend({value:r,style:{glyphs:!0,sprite:!0},styleSpec:t.styleSpec})))},r}(t.Evented),k=function(t,e){this.width=t,this.height=e,this.nextRow=0,this.data=new Uint8Array(this.width*this.height),this.dashEntry={}};k.prototype.getDash=function(t,e){var r=t.join(\\\",\\\")+String(e);return this.dashEntry[r]||(this.dashEntry[r]=this.addDash(t,e)),this.dashEntry[r]},k.prototype.getDashRanges=function(t,e,r){var n=[],i=t.length%2==1?-t[t.length-1]*r:0,a=t[0]*r,o=!0;n.push({left:i,right:a,isDash:o,zeroLength:0===t[0]});for(var s=t[0],l=1;l<t.length;l++){o=!o;var u=t[l];i=s*r,a=(s+=u)*r,n.push({left:i,right:a,isDash:o,zeroLength:0===u})}return n},k.prototype.addRoundDash=function(t,e,r){for(var n=e/2,i=-r;i<=r;i++)for(var a=this.nextRow+r+i,o=this.width*a,s=0,l=t[s],u=0;u<this.width;u++){u/l.right>1&&(l=t[++s]);var c=Math.abs(u-l.left),f=Math.abs(u-l.right),h=Math.min(c,f),p=void 0,d=i/r*(n+1);if(l.isDash){var v=n-Math.abs(d);p=Math.sqrt(h*h+v*v)}else p=n-Math.sqrt(h*h+d*d);this.data[o+u]=Math.max(0,Math.min(255,p+128))}},k.prototype.addRegularDash=function(t){for(var e=t.length-1;e>=0;--e){var r=t[e],n=t[e+1];r.zeroLength?t.splice(e,1):n&&n.isDash===r.isDash&&(n.left=r.left,t.splice(e,1))}var i=t[0],a=t[t.length-1];i.isDash===a.isDash&&(i.left=a.left-this.width,a.right=i.right+this.width);for(var o=this.width*this.nextRow,s=0,l=t[s],u=0;u<this.width;u++){u/l.right>1&&(l=t[++s]);var c=Math.abs(u-l.left),f=Math.abs(u-l.right),h=Math.min(c,f),p=l.isDash?h:-h;this.data[o+u]=Math.max(0,Math.min(255,p+128))}},k.prototype.addDash=function(e,r){var n=r?7:0,i=2*n+1;if(this.nextRow+i>this.height)return t.warnOnce(\\\"LineAtlas out of space\\\"),null;for(var a=0,o=0;o<e.length;o++)a+=e[o];if(0!==a){var s=this.width/a,l=this.getDashRanges(e,this.width,s);r?this.addRoundDash(l,s,n):this.addRegularDash(l)}var u={y:(this.nextRow+n+.5)/this.height,height:2*n/this.height,width:a};return this.nextRow+=i,this.dirty=!0,u},k.prototype.bind=function(t){var e=t.gl;this.texture?(e.bindTexture(e.TEXTURE_2D,this.texture),this.dirty&&(this.dirty=!1,e.texSubImage2D(e.TEXTURE_2D,0,0,0,this.width,this.height,e.ALPHA,e.UNSIGNED_BYTE,this.data))):(this.texture=e.createTexture(),e.bindTexture(e.TEXTURE_2D,this.texture),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.REPEAT),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.REPEAT),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MIN_FILTER,e.LINEAR),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MAG_FILTER,e.LINEAR),e.texImage2D(e.TEXTURE_2D,0,e.ALPHA,this.width,this.height,0,e.ALPHA,e.UNSIGNED_BYTE,this.data))};var A=function e(r,n){this.workerPool=r,this.actors=[],this.currentActor=0,this.id=t.uniqueId();for(var i=this.workerPool.acquire(this.id),a=0;a<i.length;a++){var o=i[a],s=new e.Actor(o,n,this.id);s.name=\\\"Worker \\\"+a,this.actors.push(s)}};function M(e,r,n){var i=function(i,a){if(i)return n(i);if(a){var o=t.pick(t.extend(a,e),[\\\"tiles\\\",\\\"minzoom\\\",\\\"maxzoom\\\",\\\"attribution\\\",\\\"mapbox_logo\\\",\\\"bounds\\\",\\\"scheme\\\",\\\"tileSize\\\",\\\"encoding\\\"]);a.vector_layers&&(o.vectorLayers=a.vector_layers,o.vectorLayerIds=o.vectorLayers.map((function(t){return t.id}))),o.tiles=r.canonicalizeTileset(o,e.url),n(null,o)}};return e.url?t.getJSON(r.transformRequest(r.normalizeSourceURL(e.url),t.ResourceType.Source),i):t.browser.frame((function(){return i(null,e)}))}A.prototype.broadcast=function(e,r,n){n=n||function(){},t.asyncAll(this.actors,(function(t,n){t.send(e,r,n)}),n)},A.prototype.getActor=function(){return this.currentActor=(this.currentActor+1)%this.actors.length,this.actors[this.currentActor]},A.prototype.remove=function(){this.actors.forEach((function(t){t.remove()})),this.actors=[],this.workerPool.release(this.id)},A.Actor=t.Actor;var S=function(e,r,n){this.bounds=t.LngLatBounds.convert(this.validateBounds(e)),this.minzoom=r||0,this.maxzoom=n||24};S.prototype.validateBounds=function(t){return Array.isArray(t)&&4===t.length?[Math.max(-180,t[0]),Math.max(-90,t[1]),Math.min(180,t[2]),Math.min(90,t[3])]:[-180,-90,180,90]},S.prototype.contains=function(e){var r=Math.pow(2,e.z),n=Math.floor(t.mercatorXfromLng(this.bounds.getWest())*r),i=Math.floor(t.mercatorYfromLat(this.bounds.getNorth())*r),a=Math.ceil(t.mercatorXfromLng(this.bounds.getEast())*r),o=Math.ceil(t.mercatorYfromLat(this.bounds.getSouth())*r);return e.x>=n&&e.x<a&&e.y>=i&&e.y<o};var E=function(e){function r(r,n,i,a){if(e.call(this),this.id=r,this.dispatcher=i,this.type=\\\"vector\\\",this.minzoom=0,this.maxzoom=22,this.scheme=\\\"xyz\\\",this.tileSize=512,this.reparseOverscaled=!0,this.isTileClipped=!0,this._loaded=!1,t.extend(this,t.pick(n,[\\\"url\\\",\\\"scheme\\\",\\\"tileSize\\\",\\\"promoteId\\\"])),this._options=t.extend({type:\\\"vector\\\"},n),this._collectResourceTiming=n.collectResourceTiming,512!==this.tileSize)throw new Error(\\\"vector tile sources must have a tileSize of 512\\\");this.setEventedParent(a)}return e&&(r.__proto__=e),r.prototype=Object.create(e&&e.prototype),r.prototype.constructor=r,r.prototype.load=function(){var e=this;this._loaded=!1,this.fire(new t.Event(\\\"dataloading\\\",{dataType:\\\"source\\\"})),this._tileJSONRequest=M(this._options,this.map._requestManager,(function(r,n){e._tileJSONRequest=null,e._loaded=!0,r?e.fire(new t.ErrorEvent(r)):n&&(t.extend(e,n),n.bounds&&(e.tileBounds=new S(n.bounds,e.minzoom,e.maxzoom)),t.postTurnstileEvent(n.tiles,e.map._requestManager._customAccessToken),t.postMapLoadEvent(n.tiles,e.map._getMapId(),e.map._requestManager._skuToken,e.map._requestManager._customAccessToken),e.fire(new t.Event(\\\"data\\\",{dataType:\\\"source\\\",sourceDataType:\\\"metadata\\\"})),e.fire(new t.Event(\\\"data\\\",{dataType:\\\"source\\\",sourceDataType:\\\"content\\\"})))}))},r.prototype.loaded=function(){return this._loaded},r.prototype.hasTile=function(t){return!this.tileBounds||this.tileBounds.contains(t.canonical)},r.prototype.onAdd=function(t){this.map=t,this.load()},r.prototype.onRemove=function(){this._tileJSONRequest&&(this._tileJSONRequest.cancel(),this._tileJSONRequest=null)},r.prototype.serialize=function(){return t.extend({},this._options)},r.prototype.loadTile=function(e,r){var n=this.map._requestManager.normalizeTileURL(e.tileID.canonical.url(this.tiles,this.scheme)),i={request:this.map._requestManager.transformRequest(n,t.ResourceType.Tile),uid:e.uid,tileID:e.tileID,zoom:e.tileID.overscaledZ,tileSize:this.tileSize*e.tileID.overscaleFactor(),type:this.type,source:this.id,pixelRatio:t.browser.devicePixelRatio,showCollisionBoxes:this.map.showCollisionBoxes,promoteId:this.promoteId};function a(n,i){return delete e.request,e.aborted?r(null):n&&404!==n.status?r(n):(i&&i.resourceTiming&&(e.resourceTiming=i.resourceTiming),this.map._refreshExpiredTiles&&i&&e.setExpiryData(i),e.loadVectorData(i,this.map.painter),t.cacheEntryPossiblyAdded(this.dispatcher),r(null),void(e.reloadCallback&&(this.loadTile(e,e.reloadCallback),e.reloadCallback=null)))}i.request.collectResourceTiming=this._collectResourceTiming,e.actor&&\\\"expired\\\"!==e.state?\\\"loading\\\"===e.state?e.reloadCallback=r:e.request=e.actor.send(\\\"reloadTile\\\",i,a.bind(this)):(e.actor=this.dispatcher.getActor(),e.request=e.actor.send(\\\"loadTile\\\",i,a.bind(this)))},r.prototype.abortTile=function(t){t.request&&(t.request.cancel(),delete t.request),t.actor&&t.actor.send(\\\"abortTile\\\",{uid:t.uid,type:this.type,source:this.id},void 0)},r.prototype.unloadTile=function(t){t.unloadVectorData(),t.actor&&t.actor.send(\\\"removeTile\\\",{uid:t.uid,type:this.type,source:this.id},void 0)},r.prototype.hasTransition=function(){return!1},r}(t.Evented),L=function(e){function r(r,n,i,a){e.call(this),this.id=r,this.dispatcher=i,this.setEventedParent(a),this.type=\\\"raster\\\",this.minzoom=0,this.maxzoom=22,this.roundZoom=!0,this.scheme=\\\"xyz\\\",this.tileSize=512,this._loaded=!1,this._options=t.extend({type:\\\"raster\\\"},n),t.extend(this,t.pick(n,[\\\"url\\\",\\\"scheme\\\",\\\"tileSize\\\"]))}return e&&(r.__proto__=e),r.prototype=Object.create(e&&e.prototype),r.prototype.constructor=r,r.prototype.load=function(){var e=this;this._loaded=!1,this.fire(new t.Event(\\\"dataloading\\\",{dataType:\\\"source\\\"})),this._tileJSONRequest=M(this._options,this.map._requestManager,(function(r,n){e._tileJSONRequest=null,e._loaded=!0,r?e.fire(new t.ErrorEvent(r)):n&&(t.extend(e,n),n.bounds&&(e.tileBounds=new S(n.bounds,e.minzoom,e.maxzoom)),t.postTurnstileEvent(n.tiles),t.postMapLoadEvent(n.tiles,e.map._getMapId(),e.map._requestManager._skuToken),e.fire(new t.Event(\\\"data\\\",{dataType:\\\"source\\\",sourceDataType:\\\"metadata\\\"})),e.fire(new t.Event(\\\"data\\\",{dataType:\\\"source\\\",sourceDataType:\\\"content\\\"})))}))},r.prototype.loaded=function(){return this._loaded},r.prototype.onAdd=function(t){this.map=t,this.load()},r.prototype.onRemove=function(){this._tileJSONRequest&&(this._tileJSONRequest.cancel(),this._tileJSONRequest=null)},r.prototype.serialize=function(){return t.extend({},this._options)},r.prototype.hasTile=function(t){return!this.tileBounds||this.tileBounds.contains(t.canonical)},r.prototype.loadTile=function(e,r){var n=this,i=this.map._requestManager.normalizeTileURL(e.tileID.canonical.url(this.tiles,this.scheme),this.tileSize);e.request=t.getImage(this.map._requestManager.transformRequest(i,t.ResourceType.Tile),(function(i,a){if(delete e.request,e.aborted)e.state=\\\"unloaded\\\",r(null);else if(i)e.state=\\\"errored\\\",r(i);else if(a){n.map._refreshExpiredTiles&&e.setExpiryData(a),delete a.cacheControl,delete a.expires;var o=n.map.painter.context,s=o.gl;e.texture=n.map.painter.getTileTexture(a.width),e.texture?e.texture.update(a,{useMipmap:!0}):(e.texture=new t.Texture(o,a,s.RGBA,{useMipmap:!0}),e.texture.bind(s.LINEAR,s.CLAMP_TO_EDGE,s.LINEAR_MIPMAP_NEAREST),o.extTextureFilterAnisotropic&&s.texParameterf(s.TEXTURE_2D,o.extTextureFilterAnisotropic.TEXTURE_MAX_ANISOTROPY_EXT,o.extTextureFilterAnisotropicMax)),e.state=\\\"loaded\\\",t.cacheEntryPossiblyAdded(n.dispatcher),r(null)}}))},r.prototype.abortTile=function(t,e){t.request&&(t.request.cancel(),delete t.request),e()},r.prototype.unloadTile=function(t,e){t.texture&&this.map.painter.saveTileTexture(t.texture),e()},r.prototype.hasTransition=function(){return!1},r}(t.Evented),C=function(e){function r(r,n,i,a){e.call(this,r,n,i,a),this.type=\\\"raster-dem\\\",this.maxzoom=22,this._options=t.extend({type:\\\"raster-dem\\\"},n),this.encoding=n.encoding||\\\"mapbox\\\"}return e&&(r.__proto__=e),r.prototype=Object.create(e&&e.prototype),r.prototype.constructor=r,r.prototype.serialize=function(){return{type:\\\"raster-dem\\\",url:this.url,tileSize:this.tileSize,tiles:this.tiles,bounds:this.bounds,encoding:this.encoding}},r.prototype.loadTile=function(e,r){var n=this.map._requestManager.normalizeTileURL(e.tileID.canonical.url(this.tiles,this.scheme),this.tileSize);function i(t,n){t&&(e.state=\\\"errored\\\",r(t)),n&&(e.dem=n,e.needsHillshadePrepare=!0,e.state=\\\"loaded\\\",r(null))}e.request=t.getImage(this.map._requestManager.transformRequest(n,t.ResourceType.Tile),function(n,a){if(delete e.request,e.aborted)e.state=\\\"unloaded\\\",r(null);else if(n)e.state=\\\"errored\\\",r(n);else if(a){this.map._refreshExpiredTiles&&e.setExpiryData(a),delete a.cacheControl,delete a.expires;var o=t.window.ImageBitmap&&a instanceof t.window.ImageBitmap&&t.offscreenCanvasSupported()?a:t.browser.getImageData(a,1),s={uid:e.uid,coord:e.tileID,source:this.id,rawImageData:o,encoding:this.encoding};e.actor&&\\\"expired\\\"!==e.state||(e.actor=this.dispatcher.getActor(),e.actor.send(\\\"loadDEMTile\\\",s,i.bind(this)))}}.bind(this)),e.neighboringTiles=this._getNeighboringTiles(e.tileID)},r.prototype._getNeighboringTiles=function(e){var r=e.canonical,n=Math.pow(2,r.z),i=(r.x-1+n)%n,a=0===r.x?e.wrap-1:e.wrap,o=(r.x+1+n)%n,s=r.x+1===n?e.wrap+1:e.wrap,l={};return l[new t.OverscaledTileID(e.overscaledZ,a,r.z,i,r.y).key]={backfilled:!1},l[new t.OverscaledTileID(e.overscaledZ,s,r.z,o,r.y).key]={backfilled:!1},r.y>0&&(l[new t.OverscaledTileID(e.overscaledZ,a,r.z,i,r.y-1).key]={backfilled:!1},l[new t.OverscaledTileID(e.overscaledZ,e.wrap,r.z,r.x,r.y-1).key]={backfilled:!1},l[new t.OverscaledTileID(e.overscaledZ,s,r.z,o,r.y-1).key]={backfilled:!1}),r.y+1<n&&(l[new t.OverscaledTileID(e.overscaledZ,a,r.z,i,r.y+1).key]={backfilled:!1},l[new t.OverscaledTileID(e.overscaledZ,e.wrap,r.z,r.x,r.y+1).key]={backfilled:!1},l[new t.OverscaledTileID(e.overscaledZ,s,r.z,o,r.y+1).key]={backfilled:!1}),l},r.prototype.unloadTile=function(t){t.demTexture&&this.map.painter.saveTileTexture(t.demTexture),t.fbo&&(t.fbo.destroy(),delete t.fbo),t.dem&&delete t.dem,delete t.neighboringTiles,t.state=\\\"unloaded\\\",t.actor&&t.actor.send(\\\"removeDEMTile\\\",{uid:t.uid,source:this.id})},r}(L),P=function(e){function r(r,n,i,a){e.call(this),this.id=r,this.type=\\\"geojson\\\",this.minzoom=0,this.maxzoom=18,this.tileSize=512,this.isTileClipped=!0,this.reparseOverscaled=!0,this._removed=!1,this._loaded=!1,this.actor=i.getActor(),this.setEventedParent(a),this._data=n.data,this._options=t.extend({},n),this._collectResourceTiming=n.collectResourceTiming,this._resourceTiming=[],void 0!==n.maxzoom&&(this.maxzoom=n.maxzoom),n.type&&(this.type=n.type),n.attribution&&(this.attribution=n.attribution),this.promoteId=n.promoteId;var o=t.EXTENT/this.tileSize;this.workerOptions=t.extend({source:this.id,cluster:n.cluster||!1,geojsonVtOptions:{buffer:(void 0!==n.buffer?n.buffer:128)*o,tolerance:(void 0!==n.tolerance?n.tolerance:.375)*o,extent:t.EXTENT,maxZoom:this.maxzoom,lineMetrics:n.lineMetrics||!1,generateId:n.generateId||!1},superclusterOptions:{maxZoom:void 0!==n.clusterMaxZoom?Math.min(n.clusterMaxZoom,this.maxzoom-1):this.maxzoom-1,extent:t.EXTENT,radius:(n.clusterRadius||50)*o,log:!1,generateId:n.generateId||!1},clusterProperties:n.clusterProperties},n.workerOptions)}return e&&(r.__proto__=e),r.prototype=Object.create(e&&e.prototype),r.prototype.constructor=r,r.prototype.load=function(){var e=this;this.fire(new t.Event(\\\"dataloading\\\",{dataType:\\\"source\\\"})),this._updateWorkerData((function(r){if(r)e.fire(new t.ErrorEvent(r));else{var n={dataType:\\\"source\\\",sourceDataType:\\\"metadata\\\"};e._collectResourceTiming&&e._resourceTiming&&e._resourceTiming.length>0&&(n.resourceTiming=e._resourceTiming,e._resourceTiming=[]),e.fire(new t.Event(\\\"data\\\",n))}}))},r.prototype.onAdd=function(t){this.map=t,this.load()},r.prototype.setData=function(e){var r=this;return this._data=e,this.fire(new t.Event(\\\"dataloading\\\",{dataType:\\\"source\\\"})),this._updateWorkerData((function(e){if(e)r.fire(new t.ErrorEvent(e));else{var n={dataType:\\\"source\\\",sourceDataType:\\\"content\\\"};r._collectResourceTiming&&r._resourceTiming&&r._resourceTiming.length>0&&(n.resourceTiming=r._resourceTiming,r._resourceTiming=[]),r.fire(new t.Event(\\\"data\\\",n))}})),this},r.prototype.getClusterExpansionZoom=function(t,e){return this.actor.send(\\\"geojson.getClusterExpansionZoom\\\",{clusterId:t,source:this.id},e),this},r.prototype.getClusterChildren=function(t,e){return this.actor.send(\\\"geojson.getClusterChildren\\\",{clusterId:t,source:this.id},e),this},r.prototype.getClusterLeaves=function(t,e,r,n){return this.actor.send(\\\"geojson.getClusterLeaves\\\",{source:this.id,clusterId:t,limit:e,offset:r},n),this},r.prototype._updateWorkerData=function(e){var r=this;this._loaded=!1;var n=t.extend({},this.workerOptions),i=this._data;\\\"string\\\"==typeof i?(n.request=this.map._requestManager.transformRequest(t.browser.resolveURL(i),t.ResourceType.Source),n.request.collectResourceTiming=this._collectResourceTiming):n.data=JSON.stringify(i),this.actor.send(this.type+\\\".loadData\\\",n,(function(t,i){r._removed||i&&i.abandoned||(r._loaded=!0,i&&i.resourceTiming&&i.resourceTiming[r.id]&&(r._resourceTiming=i.resourceTiming[r.id].slice(0)),r.actor.send(r.type+\\\".coalesce\\\",{source:n.source},null),e(t))}))},r.prototype.loaded=function(){return this._loaded},r.prototype.loadTile=function(e,r){var n=this,i=e.actor?\\\"reloadTile\\\":\\\"loadTile\\\";e.actor=this.actor;var a={type:this.type,uid:e.uid,tileID:e.tileID,zoom:e.tileID.overscaledZ,maxZoom:this.maxzoom,tileSize:this.tileSize,source:this.id,pixelRatio:t.browser.devicePixelRatio,showCollisionBoxes:this.map.showCollisionBoxes,promoteId:this.promoteId};e.request=this.actor.send(i,a,(function(t,a){return delete e.request,e.unloadVectorData(),e.aborted?r(null):t?r(t):(e.loadVectorData(a,n.map.painter,\\\"reloadTile\\\"===i),r(null))}))},r.prototype.abortTile=function(t){t.request&&(t.request.cancel(),delete t.request),t.aborted=!0},r.prototype.unloadTile=function(t){t.unloadVectorData(),this.actor.send(\\\"removeTile\\\",{uid:t.uid,type:this.type,source:this.id})},r.prototype.onRemove=function(){this._removed=!0,this.actor.send(\\\"removeSource\\\",{type:this.type,source:this.id})},r.prototype.serialize=function(){return t.extend({},this._options,{type:this.type,data:this._data})},r.prototype.hasTransition=function(){return!1},r}(t.Evented),O=t.createLayout([{name:\\\"a_pos\\\",type:\\\"Int16\\\",components:2},{name:\\\"a_texture_pos\\\",type:\\\"Int16\\\",components:2}]),I=function(e){function r(t,r,n,i){e.call(this),this.id=t,this.dispatcher=n,this.coordinates=r.coordinates,this.type=\\\"image\\\",this.minzoom=0,this.maxzoom=22,this.tileSize=512,this.tiles={},this._loaded=!1,this.setEventedParent(i),this.options=r}return e&&(r.__proto__=e),r.prototype=Object.create(e&&e.prototype),r.prototype.constructor=r,r.prototype.load=function(e,r){var n=this;this._loaded=!1,this.fire(new t.Event(\\\"dataloading\\\",{dataType:\\\"source\\\"})),this.url=this.options.url,t.getImage(this.map._requestManager.transformRequest(this.url,t.ResourceType.Image),(function(i,a){n._loaded=!0,i?n.fire(new t.ErrorEvent(i)):a&&(n.image=a,e&&(n.coordinates=e),r&&r(),n._finishLoading())}))},r.prototype.loaded=function(){return this._loaded},r.prototype.updateImage=function(t){var e=this;return this.image&&t.url?(this.options.url=t.url,this.load(t.coordinates,(function(){e.texture=null})),this):this},r.prototype._finishLoading=function(){this.map&&(this.setCoordinates(this.coordinates),this.fire(new t.Event(\\\"data\\\",{dataType:\\\"source\\\",sourceDataType:\\\"metadata\\\"})))},r.prototype.onAdd=function(t){this.map=t,this.load()},r.prototype.setCoordinates=function(e){var r=this;this.coordinates=e;var n=e.map(t.MercatorCoordinate.fromLngLat);this.tileID=function(e){for(var r=1/0,n=1/0,i=-1/0,a=-1/0,o=0,s=e;o<s.length;o+=1){var l=s[o];r=Math.min(r,l.x),n=Math.min(n,l.y),i=Math.max(i,l.x),a=Math.max(a,l.y)}var u=i-r,c=a-n,f=Math.max(u,c),h=Math.max(0,Math.floor(-Math.log(f)/Math.LN2)),p=Math.pow(2,h);return new t.CanonicalTileID(h,Math.floor((r+i)/2*p),Math.floor((n+a)/2*p))}(n),this.minzoom=this.maxzoom=this.tileID.z;var i=n.map((function(t){return r.tileID.getTilePoint(t)._round()}));return this._boundsArray=new t.StructArrayLayout4i8,this._boundsArray.emplaceBack(i[0].x,i[0].y,0,0),this._boundsArray.emplaceBack(i[1].x,i[1].y,t.EXTENT,0),this._boundsArray.emplaceBack(i[3].x,i[3].y,0,t.EXTENT),this._boundsArray.emplaceBack(i[2].x,i[2].y,t.EXTENT,t.EXTENT),this.boundsBuffer&&(this.boundsBuffer.destroy(),delete this.boundsBuffer),this.fire(new t.Event(\\\"data\\\",{dataType:\\\"source\\\",sourceDataType:\\\"content\\\"})),this},r.prototype.prepare=function(){if(0!==Object.keys(this.tiles).length&&this.image){var e=this.map.painter.context,r=e.gl;for(var n in this.boundsBuffer||(this.boundsBuffer=e.createVertexBuffer(this._boundsArray,O.members)),this.boundsSegments||(this.boundsSegments=t.SegmentVector.simpleSegment(0,0,4,2)),this.texture||(this.texture=new t.Texture(e,this.image,r.RGBA),this.texture.bind(r.LINEAR,r.CLAMP_TO_EDGE)),this.tiles){var i=this.tiles[n];\\\"loaded\\\"!==i.state&&(i.state=\\\"loaded\\\",i.texture=this.texture)}}},r.prototype.loadTile=function(t,e){this.tileID&&this.tileID.equals(t.tileID.canonical)?(this.tiles[String(t.tileID.wrap)]=t,t.buckets={},e(null)):(t.state=\\\"errored\\\",e(null))},r.prototype.serialize=function(){return{type:\\\"image\\\",url:this.options.url,coordinates:this.coordinates}},r.prototype.hasTransition=function(){return!1},r}(t.Evented);var D=function(e){function r(t,r,n,i){e.call(this,t,r,n,i),this.roundZoom=!0,this.type=\\\"video\\\",this.options=r}return e&&(r.__proto__=e),r.prototype=Object.create(e&&e.prototype),r.prototype.constructor=r,r.prototype.load=function(){var e=this;this._loaded=!1;var r=this.options;this.urls=[];for(var n=0,i=r.urls;n<i.length;n+=1){var a=i[n];this.urls.push(this.map._requestManager.transformRequest(a,t.ResourceType.Source).url)}t.getVideo(this.urls,(function(r,n){e._loaded=!0,r?e.fire(new t.ErrorEvent(r)):n&&(e.video=n,e.video.loop=!0,e.video.addEventListener(\\\"playing\\\",(function(){e.map.triggerRepaint()})),e.map&&e.video.play(),e._finishLoading())}))},r.prototype.pause=function(){this.video&&this.video.pause()},r.prototype.play=function(){this.video&&this.video.play()},r.prototype.seek=function(e){if(this.video){var r=this.video.seekable;e<r.start(0)||e>r.end(0)?this.fire(new t.ErrorEvent(new t.ValidationError(\\\"sources.\\\"+this.id,null,\\\"Playback for this video can be set only between the \\\"+r.start(0)+\\\" and \\\"+r.end(0)+\\\"-second mark.\\\"))):this.video.currentTime=e}},r.prototype.getVideo=function(){return this.video},r.prototype.onAdd=function(t){this.map||(this.map=t,this.load(),this.video&&(this.video.play(),this.setCoordinates(this.coordinates)))},r.prototype.prepare=function(){if(!(0===Object.keys(this.tiles).length||this.video.readyState<2)){var e=this.map.painter.context,r=e.gl;for(var n in this.boundsBuffer||(this.boundsBuffer=e.createVertexBuffer(this._boundsArray,O.members)),this.boundsSegments||(this.boundsSegments=t.SegmentVector.simpleSegment(0,0,4,2)),this.texture?this.video.paused||(this.texture.bind(r.LINEAR,r.CLAMP_TO_EDGE),r.texSubImage2D(r.TEXTURE_2D,0,0,0,r.RGBA,r.UNSIGNED_BYTE,this.video)):(this.texture=new t.Texture(e,this.video,r.RGBA),this.texture.bind(r.LINEAR,r.CLAMP_TO_EDGE)),this.tiles){var i=this.tiles[n];\\\"loaded\\\"!==i.state&&(i.state=\\\"loaded\\\",i.texture=this.texture)}}},r.prototype.serialize=function(){return{type:\\\"video\\\",urls:this.urls,coordinates:this.coordinates}},r.prototype.hasTransition=function(){return this.video&&!this.video.paused},r}(I),z=function(e){function r(r,n,i,a){e.call(this,r,n,i,a),n.coordinates?Array.isArray(n.coordinates)&&4===n.coordinates.length&&!n.coordinates.some((function(t){return!Array.isArray(t)||2!==t.length||t.some((function(t){return\\\"number\\\"!=typeof t}))}))||this.fire(new t.ErrorEvent(new t.ValidationError(\\\"sources.\\\"+r,null,'\\\"coordinates\\\" property must be an array of 4 longitude/latitude array pairs'))):this.fire(new t.ErrorEvent(new t.ValidationError(\\\"sources.\\\"+r,null,'missing required property \\\"coordinates\\\"'))),n.animate&&\\\"boolean\\\"!=typeof n.animate&&this.fire(new t.ErrorEvent(new t.ValidationError(\\\"sources.\\\"+r,null,'optional \\\"animate\\\" property must be a boolean value'))),n.canvas?\\\"string\\\"==typeof n.canvas||n.canvas instanceof t.window.HTMLCanvasElement||this.fire(new t.ErrorEvent(new t.ValidationError(\\\"sources.\\\"+r,null,'\\\"canvas\\\" must be either a string representing the ID of the canvas element from which to read, or an HTMLCanvasElement instance'))):this.fire(new t.ErrorEvent(new t.ValidationError(\\\"sources.\\\"+r,null,'missing required property \\\"canvas\\\"'))),this.options=n,this.animate=void 0===n.animate||n.animate}return e&&(r.__proto__=e),r.prototype=Object.create(e&&e.prototype),r.prototype.constructor=r,r.prototype.load=function(){this._loaded=!0,this.canvas||(this.canvas=this.options.canvas instanceof t.window.HTMLCanvasElement?this.options.canvas:t.window.document.getElementById(this.options.canvas)),this.width=this.canvas.width,this.height=this.canvas.height,this._hasInvalidDimensions()?this.fire(new t.ErrorEvent(new Error(\\\"Canvas dimensions cannot be less than or equal to zero.\\\"))):(this.play=function(){this._playing=!0,this.map.triggerRepaint()},this.pause=function(){this._playing&&(this.prepare(),this._playing=!1)},this._finishLoading())},r.prototype.getCanvas=function(){return this.canvas},r.prototype.onAdd=function(t){this.map=t,this.load(),this.canvas&&this.animate&&this.play()},r.prototype.onRemove=function(){this.pause()},r.prototype.prepare=function(){var e=!1;if(this.canvas.width!==this.width&&(this.width=this.canvas.width,e=!0),this.canvas.height!==this.height&&(this.height=this.canvas.height,e=!0),!this._hasInvalidDimensions()&&0!==Object.keys(this.tiles).length){var r=this.map.painter.context,n=r.gl;for(var i in this.boundsBuffer||(this.boundsBuffer=r.createVertexBuffer(this._boundsArray,O.members)),this.boundsSegments||(this.boundsSegments=t.SegmentVector.simpleSegment(0,0,4,2)),this.texture?(e||this._playing)&&this.texture.update(this.canvas,{premultiply:!0}):this.texture=new t.Texture(r,this.canvas,n.RGBA,{premultiply:!0}),this.tiles){var a=this.tiles[i];\\\"loaded\\\"!==a.state&&(a.state=\\\"loaded\\\",a.texture=this.texture)}}},r.prototype.serialize=function(){return{type:\\\"canvas\\\",coordinates:this.coordinates}},r.prototype.hasTransition=function(){return this._playing},r.prototype._hasInvalidDimensions=function(){for(var t=0,e=[this.canvas.width,this.canvas.height];t<e.length;t+=1){var r=e[t];if(isNaN(r)||r<=0)return!0}return!1},r}(I),R={vector:E,raster:L,\\\"raster-dem\\\":C,geojson:P,video:D,image:I,canvas:z};function F(e,r){var n=t.identity([]);return t.translate(n,n,[1,1,0]),t.scale(n,n,[.5*e.width,.5*e.height,1]),t.multiply(n,n,e.calculatePosMatrix(r.toUnwrapped()))}function B(t,e,r,n,i,a){var o=function(t,e,r){if(t)for(var n=0,i=t;n<i.length;n+=1){var a=e[i[n]];if(a&&a.source===r&&\\\"fill-extrusion\\\"===a.type)return!0}else for(var o in e){var s=e[o];if(s.source===r&&\\\"fill-extrusion\\\"===s.type)return!0}return!1}(i&&i.layers,e,t.id),s=a.maxPitchScaleFactor(),l=t.tilesIn(n,s,o);l.sort(N);for(var u=[],c=0,f=l;c<f.length;c+=1){var h=f[c];u.push({wrappedTileID:h.tileID.wrapped().key,queryResults:h.tile.queryRenderedFeatures(e,r,t._state,h.queryGeometry,h.cameraQueryGeometry,h.scale,i,a,s,F(t.transform,h.tileID))})}var p=function(t){for(var e={},r={},n=0,i=t;n<i.length;n+=1){var a=i[n],o=a.queryResults,s=a.wrappedTileID,l=r[s]=r[s]||{};for(var u in o)for(var c=o[u],f=l[u]=l[u]||{},h=e[u]=e[u]||[],p=0,d=c;p<d.length;p+=1){var v=d[p];f[v.featureIndex]||(f[v.featureIndex]=!0,h.push(v))}}return e}(u);for(var d in p)p[d].forEach((function(e){var r=e.feature,n=t.getFeatureState(r.layer[\\\"source-layer\\\"],r.id);r.source=r.layer.source,r.layer[\\\"source-layer\\\"]&&(r.sourceLayer=r.layer[\\\"source-layer\\\"]),r.state=n}));return p}function N(t,e){var r=t.tileID,n=e.tileID;return r.overscaledZ-n.overscaledZ||r.canonical.y-n.canonical.y||r.wrap-n.wrap||r.canonical.x-n.canonical.x}var j=function(t,e){this.max=t,this.onRemove=e,this.reset()};j.prototype.reset=function(){for(var t in this.data)for(var e=0,r=this.data[t];e<r.length;e+=1){var n=r[e];n.timeout&&clearTimeout(n.timeout),this.onRemove(n.value)}return this.data={},this.order=[],this},j.prototype.add=function(t,e,r){var n=this,i=t.wrapped().key;void 0===this.data[i]&&(this.data[i]=[]);var a={value:e,timeout:void 0};if(void 0!==r&&(a.timeout=setTimeout((function(){n.remove(t,a)}),r)),this.data[i].push(a),this.order.push(i),this.order.length>this.max){var o=this._getAndRemoveByKey(this.order[0]);o&&this.onRemove(o)}return this},j.prototype.has=function(t){return t.wrapped().key in this.data},j.prototype.getAndRemove=function(t){return this.has(t)?this._getAndRemoveByKey(t.wrapped().key):null},j.prototype._getAndRemoveByKey=function(t){var e=this.data[t].shift();return e.timeout&&clearTimeout(e.timeout),0===this.data[t].length&&delete this.data[t],this.order.splice(this.order.indexOf(t),1),e.value},j.prototype.getByKey=function(t){var e=this.data[t];return e?e[0].value:null},j.prototype.get=function(t){return this.has(t)?this.data[t.wrapped().key][0].value:null},j.prototype.remove=function(t,e){if(!this.has(t))return this;var r=t.wrapped().key,n=void 0===e?0:this.data[r].indexOf(e),i=this.data[r][n];return this.data[r].splice(n,1),i.timeout&&clearTimeout(i.timeout),0===this.data[r].length&&delete this.data[r],this.onRemove(i.value),this.order.splice(this.order.indexOf(r),1),this},j.prototype.setMaxSize=function(t){for(this.max=t;this.order.length>this.max;){var e=this._getAndRemoveByKey(this.order[0]);e&&this.onRemove(e)}return this},j.prototype.filter=function(t){var e=[];for(var r in this.data)for(var n=0,i=this.data[r];n<i.length;n+=1){var a=i[n];t(a.value)||e.push(a)}for(var o=0,s=e;o<s.length;o+=1){var l=s[o];this.remove(l.value.tileID,l)}};var U=function(t,e,r){this.context=t;var n=t.gl;this.buffer=n.createBuffer(),this.dynamicDraw=Boolean(r),this.context.unbindVAO(),t.bindElementBuffer.set(this.buffer),n.bufferData(n.ELEMENT_ARRAY_BUFFER,e.arrayBuffer,this.dynamicDraw?n.DYNAMIC_DRAW:n.STATIC_DRAW),this.dynamicDraw||delete e.arrayBuffer};U.prototype.bind=function(){this.context.bindElementBuffer.set(this.buffer)},U.prototype.updateData=function(t){var e=this.context.gl;this.context.unbindVAO(),this.bind(),e.bufferSubData(e.ELEMENT_ARRAY_BUFFER,0,t.arrayBuffer)},U.prototype.destroy=function(){var t=this.context.gl;this.buffer&&(t.deleteBuffer(this.buffer),delete this.buffer)};var V={Int8:\\\"BYTE\\\",Uint8:\\\"UNSIGNED_BYTE\\\",Int16:\\\"SHORT\\\",Uint16:\\\"UNSIGNED_SHORT\\\",Int32:\\\"INT\\\",Uint32:\\\"UNSIGNED_INT\\\",Float32:\\\"FLOAT\\\"},H=function(t,e,r,n){this.length=e.length,this.attributes=r,this.itemSize=e.bytesPerElement,this.dynamicDraw=n,this.context=t;var i=t.gl;this.buffer=i.createBuffer(),t.bindVertexBuffer.set(this.buffer),i.bufferData(i.ARRAY_BUFFER,e.arrayBuffer,this.dynamicDraw?i.DYNAMIC_DRAW:i.STATIC_DRAW),this.dynamicDraw||delete e.arrayBuffer};H.prototype.bind=function(){this.context.bindVertexBuffer.set(this.buffer)},H.prototype.updateData=function(t){var e=this.context.gl;this.bind(),e.bufferSubData(e.ARRAY_BUFFER,0,t.arrayBuffer)},H.prototype.enableAttributes=function(t,e){for(var r=0;r<this.attributes.length;r++){var n=this.attributes[r],i=e.attributes[n.name];void 0!==i&&t.enableVertexAttribArray(i)}},H.prototype.setVertexAttribPointers=function(t,e,r){for(var n=0;n<this.attributes.length;n++){var i=this.attributes[n],a=e.attributes[i.name];void 0!==a&&t.vertexAttribPointer(a,i.components,t[V[i.type]],!1,this.itemSize,i.offset+this.itemSize*(r||0))}},H.prototype.destroy=function(){var t=this.context.gl;this.buffer&&(t.deleteBuffer(this.buffer),delete this.buffer)};var q=function(t){this.gl=t.gl,this.default=this.getDefault(),this.current=this.default,this.dirty=!1};q.prototype.get=function(){return this.current},q.prototype.set=function(t){},q.prototype.getDefault=function(){return this.default},q.prototype.setDefault=function(){this.set(this.default)};var G=function(e){function r(){e.apply(this,arguments)}return e&&(r.__proto__=e),r.prototype=Object.create(e&&e.prototype),r.prototype.constructor=r,r.prototype.getDefault=function(){return t.Color.transparent},r.prototype.set=function(t){var e=this.current;(t.r!==e.r||t.g!==e.g||t.b!==e.b||t.a!==e.a||this.dirty)&&(this.gl.clearColor(t.r,t.g,t.b,t.a),this.current=t,this.dirty=!1)},r}(q),Z=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.getDefault=function(){return 1},e.prototype.set=function(t){(t!==this.current||this.dirty)&&(this.gl.clearDepth(t),this.current=t,this.dirty=!1)},e}(q),Y=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.getDefault=function(){return 0},e.prototype.set=function(t){(t!==this.current||this.dirty)&&(this.gl.clearStencil(t),this.current=t,this.dirty=!1)},e}(q),W=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.getDefault=function(){return[!0,!0,!0,!0]},e.prototype.set=function(t){var e=this.current;(t[0]!==e[0]||t[1]!==e[1]||t[2]!==e[2]||t[3]!==e[3]||this.dirty)&&(this.gl.colorMask(t[0],t[1],t[2],t[3]),this.current=t,this.dirty=!1)},e}(q),X=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.getDefault=function(){return!0},e.prototype.set=function(t){(t!==this.current||this.dirty)&&(this.gl.depthMask(t),this.current=t,this.dirty=!1)},e}(q),J=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.getDefault=function(){return 255},e.prototype.set=function(t){(t!==this.current||this.dirty)&&(this.gl.stencilMask(t),this.current=t,this.dirty=!1)},e}(q),K=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.getDefault=function(){return{func:this.gl.ALWAYS,ref:0,mask:255}},e.prototype.set=function(t){var e=this.current;(t.func!==e.func||t.ref!==e.ref||t.mask!==e.mask||this.dirty)&&(this.gl.stencilFunc(t.func,t.ref,t.mask),this.current=t,this.dirty=!1)},e}(q),$=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.getDefault=function(){var t=this.gl;return[t.KEEP,t.KEEP,t.KEEP]},e.prototype.set=function(t){var e=this.current;(t[0]!==e[0]||t[1]!==e[1]||t[2]!==e[2]||this.dirty)&&(this.gl.stencilOp(t[0],t[1],t[2]),this.current=t,this.dirty=!1)},e}(q),Q=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.getDefault=function(){return!1},e.prototype.set=function(t){if(t!==this.current||this.dirty){var e=this.gl;t?e.enable(e.STENCIL_TEST):e.disable(e.STENCIL_TEST),this.current=t,this.dirty=!1}},e}(q),tt=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.getDefault=function(){return[0,1]},e.prototype.set=function(t){var e=this.current;(t[0]!==e[0]||t[1]!==e[1]||this.dirty)&&(this.gl.depthRange(t[0],t[1]),this.current=t,this.dirty=!1)},e}(q),et=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.getDefault=function(){return!1},e.prototype.set=function(t){if(t!==this.current||this.dirty){var e=this.gl;t?e.enable(e.DEPTH_TEST):e.disable(e.DEPTH_TEST),this.current=t,this.dirty=!1}},e}(q),rt=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.getDefault=function(){return this.gl.LESS},e.prototype.set=function(t){(t!==this.current||this.dirty)&&(this.gl.depthFunc(t),this.current=t,this.dirty=!1)},e}(q),nt=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.getDefault=function(){return!1},e.prototype.set=function(t){if(t!==this.current||this.dirty){var e=this.gl;t?e.enable(e.BLEND):e.disable(e.BLEND),this.current=t,this.dirty=!1}},e}(q),it=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.getDefault=function(){var t=this.gl;return[t.ONE,t.ZERO]},e.prototype.set=function(t){var e=this.current;(t[0]!==e[0]||t[1]!==e[1]||this.dirty)&&(this.gl.blendFunc(t[0],t[1]),this.current=t,this.dirty=!1)},e}(q),at=function(e){function r(){e.apply(this,arguments)}return e&&(r.__proto__=e),r.prototype=Object.create(e&&e.prototype),r.prototype.constructor=r,r.prototype.getDefault=function(){return t.Color.transparent},r.prototype.set=function(t){var e=this.current;(t.r!==e.r||t.g!==e.g||t.b!==e.b||t.a!==e.a||this.dirty)&&(this.gl.blendColor(t.r,t.g,t.b,t.a),this.current=t,this.dirty=!1)},r}(q),ot=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.getDefault=function(){return this.gl.FUNC_ADD},e.prototype.set=function(t){(t!==this.current||this.dirty)&&(this.gl.blendEquation(t),this.current=t,this.dirty=!1)},e}(q),st=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.getDefault=function(){return!1},e.prototype.set=function(t){if(t!==this.current||this.dirty){var e=this.gl;t?e.enable(e.CULL_FACE):e.disable(e.CULL_FACE),this.current=t,this.dirty=!1}},e}(q),lt=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.getDefault=function(){return this.gl.BACK},e.prototype.set=function(t){(t!==this.current||this.dirty)&&(this.gl.cullFace(t),this.current=t,this.dirty=!1)},e}(q),ut=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.getDefault=function(){return this.gl.CCW},e.prototype.set=function(t){(t!==this.current||this.dirty)&&(this.gl.frontFace(t),this.current=t,this.dirty=!1)},e}(q),ct=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.getDefault=function(){return null},e.prototype.set=function(t){(t!==this.current||this.dirty)&&(this.gl.useProgram(t),this.current=t,this.dirty=!1)},e}(q),ft=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.getDefault=function(){return this.gl.TEXTURE0},e.prototype.set=function(t){(t!==this.current||this.dirty)&&(this.gl.activeTexture(t),this.current=t,this.dirty=!1)},e}(q),ht=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.getDefault=function(){var t=this.gl;return[0,0,t.drawingBufferWidth,t.drawingBufferHeight]},e.prototype.set=function(t){var e=this.current;(t[0]!==e[0]||t[1]!==e[1]||t[2]!==e[2]||t[3]!==e[3]||this.dirty)&&(this.gl.viewport(t[0],t[1],t[2],t[3]),this.current=t,this.dirty=!1)},e}(q),pt=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.getDefault=function(){return null},e.prototype.set=function(t){if(t!==this.current||this.dirty){var e=this.gl;e.bindFramebuffer(e.FRAMEBUFFER,t),this.current=t,this.dirty=!1}},e}(q),dt=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.getDefault=function(){return null},e.prototype.set=function(t){if(t!==this.current||this.dirty){var e=this.gl;e.bindRenderbuffer(e.RENDERBUFFER,t),this.current=t,this.dirty=!1}},e}(q),vt=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.getDefault=function(){return null},e.prototype.set=function(t){if(t!==this.current||this.dirty){var e=this.gl;e.bindTexture(e.TEXTURE_2D,t),this.current=t,this.dirty=!1}},e}(q),gt=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.getDefault=function(){return null},e.prototype.set=function(t){if(t!==this.current||this.dirty){var e=this.gl;e.bindBuffer(e.ARRAY_BUFFER,t),this.current=t,this.dirty=!1}},e}(q),yt=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.getDefault=function(){return null},e.prototype.set=function(t){var e=this.gl;e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t),this.current=t,this.dirty=!1},e}(q),mt=function(t){function e(e){t.call(this,e),this.vao=e.extVertexArrayObject}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.getDefault=function(){return null},e.prototype.set=function(t){this.vao&&(t!==this.current||this.dirty)&&(this.vao.bindVertexArrayOES(t),this.current=t,this.dirty=!1)},e}(q),xt=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.getDefault=function(){return 4},e.prototype.set=function(t){if(t!==this.current||this.dirty){var e=this.gl;e.pixelStorei(e.UNPACK_ALIGNMENT,t),this.current=t,this.dirty=!1}},e}(q),bt=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.getDefault=function(){return!1},e.prototype.set=function(t){if(t!==this.current||this.dirty){var e=this.gl;e.pixelStorei(e.UNPACK_PREMULTIPLY_ALPHA_WEBGL,t),this.current=t,this.dirty=!1}},e}(q),_t=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.getDefault=function(){return!1},e.prototype.set=function(t){if(t!==this.current||this.dirty){var e=this.gl;e.pixelStorei(e.UNPACK_FLIP_Y_WEBGL,t),this.current=t,this.dirty=!1}},e}(q),wt=function(t){function e(e,r){t.call(this,e),this.context=e,this.parent=r}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.getDefault=function(){return null},e}(q),Tt=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.setDirty=function(){this.dirty=!0},e.prototype.set=function(t){if(t!==this.current||this.dirty){this.context.bindFramebuffer.set(this.parent);var e=this.gl;e.framebufferTexture2D(e.FRAMEBUFFER,e.COLOR_ATTACHMENT0,e.TEXTURE_2D,t,0),this.current=t,this.dirty=!1}},e}(wt),kt=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.set=function(t){if(t!==this.current||this.dirty){this.context.bindFramebuffer.set(this.parent);var e=this.gl;e.framebufferRenderbuffer(e.FRAMEBUFFER,e.DEPTH_ATTACHMENT,e.RENDERBUFFER,t),this.current=t,this.dirty=!1}},e}(wt),At=function(t,e,r,n){this.context=t,this.width=e,this.height=r;var i=t.gl,a=this.framebuffer=i.createFramebuffer();this.colorAttachment=new Tt(t,a),n&&(this.depthAttachment=new kt(t,a))};At.prototype.destroy=function(){var t=this.context.gl,e=this.colorAttachment.get();if(e&&t.deleteTexture(e),this.depthAttachment){var r=this.depthAttachment.get();r&&t.deleteRenderbuffer(r)}t.deleteFramebuffer(this.framebuffer)};var Mt=function(t,e,r){this.func=t,this.mask=e,this.range=r};Mt.ReadOnly=!1,Mt.ReadWrite=!0,Mt.disabled=new Mt(519,Mt.ReadOnly,[0,1]);var St=7680,Et=function(t,e,r,n,i,a){this.test=t,this.ref=e,this.mask=r,this.fail=n,this.depthFail=i,this.pass=a};Et.disabled=new Et({func:519,mask:0},0,0,St,St,St);var Lt=function(t,e,r){this.blendFunction=t,this.blendColor=e,this.mask=r};Lt.Replace=[1,0],Lt.disabled=new Lt(Lt.Replace,t.Color.transparent,[!1,!1,!1,!1]),Lt.unblended=new Lt(Lt.Replace,t.Color.transparent,[!0,!0,!0,!0]),Lt.alphaBlended=new Lt([1,771],t.Color.transparent,[!0,!0,!0,!0]);var Ct=function(t,e,r){this.enable=t,this.mode=e,this.frontFace=r};Ct.disabled=new Ct(!1,1029,2305),Ct.backCCW=new Ct(!0,1029,2305);var Pt=function(t){this.gl=t,this.extVertexArrayObject=this.gl.getExtension(\\\"OES_vertex_array_object\\\"),this.clearColor=new G(this),this.clearDepth=new Z(this),this.clearStencil=new Y(this),this.colorMask=new W(this),this.depthMask=new X(this),this.stencilMask=new J(this),this.stencilFunc=new K(this),this.stencilOp=new $(this),this.stencilTest=new Q(this),this.depthRange=new tt(this),this.depthTest=new et(this),this.depthFunc=new rt(this),this.blend=new nt(this),this.blendFunc=new it(this),this.blendColor=new at(this),this.blendEquation=new ot(this),this.cullFace=new st(this),this.cullFaceSide=new lt(this),this.frontFace=new ut(this),this.program=new ct(this),this.activeTexture=new ft(this),this.viewport=new ht(this),this.bindFramebuffer=new pt(this),this.bindRenderbuffer=new dt(this),this.bindTexture=new vt(this),this.bindVertexBuffer=new gt(this),this.bindElementBuffer=new yt(this),this.bindVertexArrayOES=this.extVertexArrayObject&&new mt(this),this.pixelStoreUnpack=new xt(this),this.pixelStoreUnpackPremultiplyAlpha=new bt(this),this.pixelStoreUnpackFlipY=new _t(this),this.extTextureFilterAnisotropic=t.getExtension(\\\"EXT_texture_filter_anisotropic\\\")||t.getExtension(\\\"MOZ_EXT_texture_filter_anisotropic\\\")||t.getExtension(\\\"WEBKIT_EXT_texture_filter_anisotropic\\\"),this.extTextureFilterAnisotropic&&(this.extTextureFilterAnisotropicMax=t.getParameter(this.extTextureFilterAnisotropic.MAX_TEXTURE_MAX_ANISOTROPY_EXT)),this.extTextureHalfFloat=t.getExtension(\\\"OES_texture_half_float\\\"),this.extTextureHalfFloat&&(t.getExtension(\\\"OES_texture_half_float_linear\\\"),this.extRenderToTextureHalfFloat=t.getExtension(\\\"EXT_color_buffer_half_float\\\")),this.extTimerQuery=t.getExtension(\\\"EXT_disjoint_timer_query\\\")};Pt.prototype.setDefault=function(){this.unbindVAO(),this.clearColor.setDefault(),this.clearDepth.setDefault(),this.clearStencil.setDefault(),this.colorMask.setDefault(),this.depthMask.setDefault(),this.stencilMask.setDefault(),this.stencilFunc.setDefault(),this.stencilOp.setDefault(),this.stencilTest.setDefault(),this.depthRange.setDefault(),this.depthTest.setDefault(),this.depthFunc.setDefault(),this.blend.setDefault(),this.blendFunc.setDefault(),this.blendColor.setDefault(),this.blendEquation.setDefault(),this.cullFace.setDefault(),this.cullFaceSide.setDefault(),this.frontFace.setDefault(),this.program.setDefault(),this.activeTexture.setDefault(),this.bindFramebuffer.setDefault(),this.pixelStoreUnpack.setDefault(),this.pixelStoreUnpackPremultiplyAlpha.setDefault(),this.pixelStoreUnpackFlipY.setDefault()},Pt.prototype.setDirty=function(){this.clearColor.dirty=!0,this.clearDepth.dirty=!0,this.clearStencil.dirty=!0,this.colorMask.dirty=!0,this.depthMask.dirty=!0,this.stencilMask.dirty=!0,this.stencilFunc.dirty=!0,this.stencilOp.dirty=!0,this.stencilTest.dirty=!0,this.depthRange.dirty=!0,this.depthTest.dirty=!0,this.depthFunc.dirty=!0,this.blend.dirty=!0,this.blendFunc.dirty=!0,this.blendColor.dirty=!0,this.blendEquation.dirty=!0,this.cullFace.dirty=!0,this.cullFaceSide.dirty=!0,this.frontFace.dirty=!0,this.program.dirty=!0,this.activeTexture.dirty=!0,this.viewport.dirty=!0,this.bindFramebuffer.dirty=!0,this.bindRenderbuffer.dirty=!0,this.bindTexture.dirty=!0,this.bindVertexBuffer.dirty=!0,this.bindElementBuffer.dirty=!0,this.extVertexArrayObject&&(this.bindVertexArrayOES.dirty=!0),this.pixelStoreUnpack.dirty=!0,this.pixelStoreUnpackPremultiplyAlpha.dirty=!0,this.pixelStoreUnpackFlipY.dirty=!0},Pt.prototype.createIndexBuffer=function(t,e){return new U(this,t,e)},Pt.prototype.createVertexBuffer=function(t,e,r){return new H(this,t,e,r)},Pt.prototype.createRenderbuffer=function(t,e,r){var n=this.gl,i=n.createRenderbuffer();return this.bindRenderbuffer.set(i),n.renderbufferStorage(n.RENDERBUFFER,t,e,r),this.bindRenderbuffer.set(null),i},Pt.prototype.createFramebuffer=function(t,e,r){return new At(this,t,e,r)},Pt.prototype.clear=function(t){var e=t.color,r=t.depth,n=this.gl,i=0;e&&(i|=n.COLOR_BUFFER_BIT,this.clearColor.set(e),this.colorMask.set([!0,!0,!0,!0])),void 0!==r&&(i|=n.DEPTH_BUFFER_BIT,this.depthRange.set([0,1]),this.clearDepth.set(r),this.depthMask.set(!0)),n.clear(i)},Pt.prototype.setCullFace=function(t){!1===t.enable?this.cullFace.set(!1):(this.cullFace.set(!0),this.cullFaceSide.set(t.mode),this.frontFace.set(t.frontFace))},Pt.prototype.setDepthMode=function(t){t.func!==this.gl.ALWAYS||t.mask?(this.depthTest.set(!0),this.depthFunc.set(t.func),this.depthMask.set(t.mask),this.depthRange.set(t.range)):this.depthTest.set(!1)},Pt.prototype.setStencilMode=function(t){t.test.func!==this.gl.ALWAYS||t.mask?(this.stencilTest.set(!0),this.stencilMask.set(t.mask),this.stencilOp.set([t.fail,t.depthFail,t.pass]),this.stencilFunc.set({func:t.test.func,ref:t.ref,mask:t.test.mask})):this.stencilTest.set(!1)},Pt.prototype.setColorMode=function(e){t.deepEqual(e.blendFunction,Lt.Replace)?this.blend.set(!1):(this.blend.set(!0),this.blendFunc.set(e.blendFunction),this.blendColor.set(e.blendColor)),this.colorMask.set(e.mask)},Pt.prototype.unbindVAO=function(){this.extVertexArrayObject&&this.bindVertexArrayOES.set(null)};var Ot=function(e){function r(r,n,i){var a=this;e.call(this),this.id=r,this.dispatcher=i,this.on(\\\"data\\\",(function(t){\\\"source\\\"===t.dataType&&\\\"metadata\\\"===t.sourceDataType&&(a._sourceLoaded=!0),a._sourceLoaded&&!a._paused&&\\\"source\\\"===t.dataType&&\\\"content\\\"===t.sourceDataType&&(a.reload(),a.transform&&a.update(a.transform))})),this.on(\\\"error\\\",(function(){a._sourceErrored=!0})),this._source=function(e,r,n,i){var a=new R[r.type](e,r,n,i);if(a.id!==e)throw new Error(\\\"Expected Source id to be \\\"+e+\\\" instead of \\\"+a.id);return t.bindAll([\\\"load\\\",\\\"abort\\\",\\\"unload\\\",\\\"serialize\\\",\\\"prepare\\\"],a),a}(r,n,i,this),this._tiles={},this._cache=new j(0,this._unloadTile.bind(this)),this._timers={},this._cacheTimers={},this._maxTileCacheSize=null,this._loadedParentTiles={},this._coveredTiles={},this._state=new t.SourceFeatureState}return e&&(r.__proto__=e),r.prototype=Object.create(e&&e.prototype),r.prototype.constructor=r,r.prototype.onAdd=function(t){this.map=t,this._maxTileCacheSize=t?t._maxTileCacheSize:null,this._source&&this._source.onAdd&&this._source.onAdd(t)},r.prototype.onRemove=function(t){this._source&&this._source.onRemove&&this._source.onRemove(t)},r.prototype.loaded=function(){if(this._sourceErrored)return!0;if(!this._sourceLoaded)return!1;if(!this._source.loaded())return!1;for(var t in this._tiles){var e=this._tiles[t];if(\\\"loaded\\\"!==e.state&&\\\"errored\\\"!==e.state)return!1}return!0},r.prototype.getSource=function(){return this._source},r.prototype.pause=function(){this._paused=!0},r.prototype.resume=function(){if(this._paused){var t=this._shouldReloadOnResume;this._paused=!1,this._shouldReloadOnResume=!1,t&&this.reload(),this.transform&&this.update(this.transform)}},r.prototype._loadTile=function(t,e){return this._source.loadTile(t,e)},r.prototype._unloadTile=function(t){if(this._source.unloadTile)return this._source.unloadTile(t,(function(){}))},r.prototype._abortTile=function(t){if(this._source.abortTile)return this._source.abortTile(t,(function(){}))},r.prototype.serialize=function(){return this._source.serialize()},r.prototype.prepare=function(t){for(var e in this._source.prepare&&this._source.prepare(),this._state.coalesceChanges(this._tiles,this.map?this.map.painter:null),this._tiles){var r=this._tiles[e];r.upload(t),r.prepare(this.map.style.imageManager)}},r.prototype.getIds=function(){return t.values(this._tiles).map((function(t){return t.tileID})).sort(It).map((function(t){return t.key}))},r.prototype.getRenderableIds=function(e){var r=this,n=[];for(var i in this._tiles)this._isIdRenderable(i,e)&&n.push(this._tiles[i]);return e?n.sort((function(e,n){var i=e.tileID,a=n.tileID,o=new t.Point(i.canonical.x,i.canonical.y)._rotate(r.transform.angle),s=new t.Point(a.canonical.x,a.canonical.y)._rotate(r.transform.angle);return i.overscaledZ-a.overscaledZ||s.y-o.y||s.x-o.x})).map((function(t){return t.tileID.key})):n.map((function(t){return t.tileID})).sort(It).map((function(t){return t.key}))},r.prototype.hasRenderableParent=function(t){var e=this.findLoadedParent(t,0);return!!e&&this._isIdRenderable(e.tileID.key)},r.prototype._isIdRenderable=function(t,e){return this._tiles[t]&&this._tiles[t].hasData()&&!this._coveredTiles[t]&&(e||!this._tiles[t].holdingForFade())},r.prototype.reload=function(){if(this._paused)this._shouldReloadOnResume=!0;else for(var t in this._cache.reset(),this._tiles)\\\"errored\\\"!==this._tiles[t].state&&this._reloadTile(t,\\\"reloading\\\")},r.prototype._reloadTile=function(t,e){var r=this._tiles[t];r&&(\\\"loading\\\"!==r.state&&(r.state=e),this._loadTile(r,this._tileLoaded.bind(this,r,t,e)))},r.prototype._tileLoaded=function(e,r,n,i){if(i)return e.state=\\\"errored\\\",void(404!==i.status?this._source.fire(new t.ErrorEvent(i,{tile:e})):this.update(this.transform));e.timeAdded=t.browser.now(),\\\"expired\\\"===n&&(e.refreshedUponExpiration=!0),this._setTileReloadTimer(r,e),\\\"raster-dem\\\"===this.getSource().type&&e.dem&&this._backfillDEM(e),this._state.initializeTileState(e,this.map?this.map.painter:null),this._source.fire(new t.Event(\\\"data\\\",{dataType:\\\"source\\\",tile:e,coord:e.tileID}))},r.prototype._backfillDEM=function(t){for(var e=this.getRenderableIds(),r=0;r<e.length;r++){var n=e[r];if(t.neighboringTiles&&t.neighboringTiles[n]){var i=this.getTileByID(n);a(t,i),a(i,t)}}function a(t,e){t.needsHillshadePrepare=!0;var r=e.tileID.canonical.x-t.tileID.canonical.x,n=e.tileID.canonical.y-t.tileID.canonical.y,i=Math.pow(2,t.tileID.canonical.z),a=e.tileID.key;0===r&&0===n||Math.abs(n)>1||(Math.abs(r)>1&&(1===Math.abs(r+i)?r+=i:1===Math.abs(r-i)&&(r-=i)),e.dem&&t.dem&&(t.dem.backfillBorder(e.dem,r,n),t.neighboringTiles&&t.neighboringTiles[a]&&(t.neighboringTiles[a].backfilled=!0)))}},r.prototype.getTile=function(t){return this.getTileByID(t.key)},r.prototype.getTileByID=function(t){return this._tiles[t]},r.prototype._retainLoadedChildren=function(t,e,r,n){for(var i in this._tiles){var a=this._tiles[i];if(!(n[i]||!a.hasData()||a.tileID.overscaledZ<=e||a.tileID.overscaledZ>r)){for(var o=a.tileID;a&&a.tileID.overscaledZ>e+1;){var s=a.tileID.scaledTo(a.tileID.overscaledZ-1);(a=this._tiles[s.key])&&a.hasData()&&(o=s)}for(var l=o;l.overscaledZ>e;)if(t[(l=l.scaledTo(l.overscaledZ-1)).key]){n[o.key]=o;break}}}},r.prototype.findLoadedParent=function(t,e){if(t.key in this._loadedParentTiles){var r=this._loadedParentTiles[t.key];return r&&r.tileID.overscaledZ>=e?r:null}for(var n=t.overscaledZ-1;n>=e;n--){var i=t.scaledTo(n),a=this._getLoadedTile(i);if(a)return a}},r.prototype._getLoadedTile=function(t){var e=this._tiles[t.key];return e&&e.hasData()?e:this._cache.getByKey(t.wrapped().key)},r.prototype.updateCacheSize=function(t){var e=(Math.ceil(t.width/this._source.tileSize)+1)*(Math.ceil(t.height/this._source.tileSize)+1),r=Math.floor(5*e),n=\\\"number\\\"==typeof this._maxTileCacheSize?Math.min(this._maxTileCacheSize,r):r;this._cache.setMaxSize(n)},r.prototype.handleWrapJump=function(t){var e=(t-(void 0===this._prevLng?t:this._prevLng))/360,r=Math.round(e);if(this._prevLng=t,r){var n={};for(var i in this._tiles){var a=this._tiles[i];a.tileID=a.tileID.unwrapTo(a.tileID.wrap+r),n[a.tileID.key]=a}for(var o in this._tiles=n,this._timers)clearTimeout(this._timers[o]),delete this._timers[o];for(var s in this._tiles){var l=this._tiles[s];this._setTileReloadTimer(s,l)}}},r.prototype.update=function(e){var n=this;if(this.transform=e,this._sourceLoaded&&!this._paused){var i;this.updateCacheSize(e),this.handleWrapJump(this.transform.center.lng),this._coveredTiles={},this.used?this._source.tileID?i=e.getVisibleUnwrappedCoordinates(this._source.tileID).map((function(e){return new t.OverscaledTileID(e.canonical.z,e.wrap,e.canonical.z,e.canonical.x,e.canonical.y)})):(i=e.coveringTiles({tileSize:this._source.tileSize,minzoom:this._source.minzoom,maxzoom:this._source.maxzoom,roundZoom:this._source.roundZoom,reparseOverscaled:this._source.reparseOverscaled}),this._source.hasTile&&(i=i.filter((function(t){return n._source.hasTile(t)})))):i=[];var a=e.coveringZoomLevel(this._source),o=Math.max(a-r.maxOverzooming,this._source.minzoom),s=Math.max(a+r.maxUnderzooming,this._source.minzoom),l=this._updateRetainedTiles(i,a);if(Dt(this._source.type)){for(var u={},c={},f=0,h=Object.keys(l);f<h.length;f+=1){var p=h[f],d=l[p],v=this._tiles[p];if(v&&!(v.fadeEndTime&&v.fadeEndTime<=t.browser.now())){var g=this.findLoadedParent(d,o);g&&(this._addTile(g.tileID),u[g.tileID.key]=g.tileID),c[p]=d}}for(var y in this._retainLoadedChildren(c,a,s,l),u)l[y]||(this._coveredTiles[y]=!0,l[y]=u[y])}for(var m in l)this._tiles[m].clearFadeHold();for(var x=0,b=t.keysDifference(this._tiles,l);x<b.length;x+=1){var _=b[x],w=this._tiles[_];w.hasSymbolBuckets&&!w.holdingForFade()?w.setHoldDuration(this.map._fadeDuration):w.hasSymbolBuckets&&!w.symbolFadeFinished()||this._removeTile(_)}this._updateLoadedParentTileCache()}},r.prototype.releaseSymbolFadeTiles=function(){for(var t in this._tiles)this._tiles[t].holdingForFade()&&this._removeTile(t)},r.prototype._updateRetainedTiles=function(t,e){for(var n={},i={},a=Math.max(e-r.maxOverzooming,this._source.minzoom),o=Math.max(e+r.maxUnderzooming,this._source.minzoom),s={},l=0,u=t;l<u.length;l+=1){var c=u[l],f=this._addTile(c);n[c.key]=c,f.hasData()||e<this._source.maxzoom&&(s[c.key]=c)}this._retainLoadedChildren(s,e,o,n);for(var h=0,p=t;h<p.length;h+=1){var d=p[h],v=this._tiles[d.key];if(!v.hasData()){if(e+1>this._source.maxzoom){var g=d.children(this._source.maxzoom)[0],y=this.getTile(g);if(y&&y.hasData()){n[g.key]=g;continue}}else{var m=d.children(this._source.maxzoom);if(n[m[0].key]&&n[m[1].key]&&n[m[2].key]&&n[m[3].key])continue}for(var x=v.wasRequested(),b=d.overscaledZ-1;b>=a;--b){var _=d.scaledTo(b);if(i[_.key])break;if(i[_.key]=!0,!(v=this.getTile(_))&&x&&(v=this._addTile(_)),v&&(n[_.key]=_,x=v.wasRequested(),v.hasData()))break}}}return n},r.prototype._updateLoadedParentTileCache=function(){for(var t in this._loadedParentTiles={},this._tiles){for(var e=[],r=void 0,n=this._tiles[t].tileID;n.overscaledZ>0;){if(n.key in this._loadedParentTiles){r=this._loadedParentTiles[n.key];break}e.push(n.key);var i=n.scaledTo(n.overscaledZ-1);if(r=this._getLoadedTile(i))break;n=i}for(var a=0,o=e;a<o.length;a+=1){var s=o[a];this._loadedParentTiles[s]=r}}},r.prototype._addTile=function(e){var r=this._tiles[e.key];if(r)return r;(r=this._cache.getAndRemove(e))&&(this._setTileReloadTimer(e.key,r),r.tileID=e,this._state.initializeTileState(r,this.map?this.map.painter:null),this._cacheTimers[e.key]&&(clearTimeout(this._cacheTimers[e.key]),delete this._cacheTimers[e.key],this._setTileReloadTimer(e.key,r)));var n=Boolean(r);return n||(r=new t.Tile(e,this._source.tileSize*e.overscaleFactor()),this._loadTile(r,this._tileLoaded.bind(this,r,e.key,r.state))),r?(r.uses++,this._tiles[e.key]=r,n||this._source.fire(new t.Event(\\\"dataloading\\\",{tile:r,coord:r.tileID,dataType:\\\"source\\\"})),r):null},r.prototype._setTileReloadTimer=function(t,e){var r=this;t in this._timers&&(clearTimeout(this._timers[t]),delete this._timers[t]);var n=e.getExpiryTimeout();n&&(this._timers[t]=setTimeout((function(){r._reloadTile(t,\\\"expired\\\"),delete r._timers[t]}),n))},r.prototype._removeTile=function(t){var e=this._tiles[t];e&&(e.uses--,delete this._tiles[t],this._timers[t]&&(clearTimeout(this._timers[t]),delete this._timers[t]),e.uses>0||(e.hasData()&&\\\"reloading\\\"!==e.state?this._cache.add(e.tileID,e,e.getExpiryTimeout()):(e.aborted=!0,this._abortTile(e),this._unloadTile(e))))},r.prototype.clearTiles=function(){for(var t in this._shouldReloadOnResume=!1,this._paused=!1,this._tiles)this._removeTile(t);this._cache.reset()},r.prototype.tilesIn=function(e,r,n){var i=this,a=[],o=this.transform;if(!o)return a;for(var s=n?o.getCameraQueryGeometry(e):e,l=e.map((function(t){return o.pointCoordinate(t)})),u=s.map((function(t){return o.pointCoordinate(t)})),c=this.getIds(),f=1/0,h=1/0,p=-1/0,d=-1/0,v=0,g=u;v<g.length;v+=1){var y=g[v];f=Math.min(f,y.x),h=Math.min(h,y.y),p=Math.max(p,y.x),d=Math.max(d,y.y)}for(var m=function(e){var n=i._tiles[c[e]];if(!n.holdingForFade()){var s=n.tileID,v=Math.pow(2,o.zoom-n.tileID.overscaledZ),g=r*n.queryPadding*t.EXTENT/n.tileSize/v,y=[s.getTilePoint(new t.MercatorCoordinate(f,h)),s.getTilePoint(new t.MercatorCoordinate(p,d))];if(y[0].x-g<t.EXTENT&&y[0].y-g<t.EXTENT&&y[1].x+g>=0&&y[1].y+g>=0){var m=l.map((function(t){return s.getTilePoint(t)})),x=u.map((function(t){return s.getTilePoint(t)}));a.push({tile:n,tileID:s,queryGeometry:m,cameraQueryGeometry:x,scale:v})}}},x=0;x<c.length;x++)m(x);return a},r.prototype.getVisibleCoordinates=function(t){for(var e=this,r=this.getRenderableIds(t).map((function(t){return e._tiles[t].tileID})),n=0,i=r;n<i.length;n+=1){var a=i[n];a.posMatrix=this.transform.calculatePosMatrix(a.toUnwrapped())}return r},r.prototype.hasTransition=function(){if(this._source.hasTransition())return!0;if(Dt(this._source.type))for(var e in this._tiles){var r=this._tiles[e];if(void 0!==r.fadeEndTime&&r.fadeEndTime>=t.browser.now())return!0}return!1},r.prototype.setFeatureState=function(t,e,r){t=t||\\\"_geojsonTileLayer\\\",this._state.updateState(t,e,r)},r.prototype.removeFeatureState=function(t,e,r){t=t||\\\"_geojsonTileLayer\\\",this._state.removeFeatureState(t,e,r)},r.prototype.getFeatureState=function(t,e){return t=t||\\\"_geojsonTileLayer\\\",this._state.getState(t,e)},r.prototype.setDependencies=function(t,e,r){var n=this._tiles[t];n&&n.setDependencies(e,r)},r.prototype.reloadTilesForDependencies=function(t,e){for(var r in this._tiles)this._tiles[r].hasDependency(t,e)&&this._reloadTile(r,\\\"reloading\\\");this._cache.filter((function(r){return!r.hasDependency(t,e)}))},r}(t.Evented);function It(t,e){var r=Math.abs(2*t.wrap)-+(t.wrap<0),n=Math.abs(2*e.wrap)-+(e.wrap<0);return t.overscaledZ-e.overscaledZ||n-r||e.canonical.y-t.canonical.y||e.canonical.x-t.canonical.x}function Dt(t){return\\\"raster\\\"===t||\\\"image\\\"===t||\\\"video\\\"===t}function zt(){return new t.window.Worker(na.workerUrl)}Ot.maxOverzooming=10,Ot.maxUnderzooming=3;var Rt=\\\"mapboxgl_preloaded_worker_pool\\\",Ft=function(){this.active={}};Ft.prototype.acquire=function(t){if(!this.workers)for(this.workers=[];this.workers.length<Ft.workerCount;)this.workers.push(new zt);return this.active[t]=!0,this.workers.slice()},Ft.prototype.release=function(t){delete this.active[t],0===this.numActive()&&(this.workers.forEach((function(t){t.terminate()})),this.workers=null)},Ft.prototype.isPreloaded=function(){return!!this.active[Rt]},Ft.prototype.numActive=function(){return Object.keys(this.active).length};var Bt,Nt=Math.floor(t.browser.hardwareConcurrency/2);function jt(){return Bt||(Bt=new Ft),Bt}function Ut(e,r){var n={};for(var i in e)\\\"ref\\\"!==i&&(n[i]=e[i]);return t.refProperties.forEach((function(t){t in r&&(n[t]=r[t])})),n}function Vt(t){t=t.slice();for(var e=Object.create(null),r=0;r<t.length;r++)e[t[r].id]=t[r];for(var n=0;n<t.length;n++)\\\"ref\\\"in t[n]&&(t[n]=Ut(t[n],e[t[n].ref]));return t}Ft.workerCount=Math.max(Math.min(Nt,6),1);var Ht={setStyle:\\\"setStyle\\\",addLayer:\\\"addLayer\\\",removeLayer:\\\"removeLayer\\\",setPaintProperty:\\\"setPaintProperty\\\",setLayoutProperty:\\\"setLayoutProperty\\\",setFilter:\\\"setFilter\\\",addSource:\\\"addSource\\\",removeSource:\\\"removeSource\\\",setGeoJSONSourceData:\\\"setGeoJSONSourceData\\\",setLayerZoomRange:\\\"setLayerZoomRange\\\",setLayerProperty:\\\"setLayerProperty\\\",setCenter:\\\"setCenter\\\",setZoom:\\\"setZoom\\\",setBearing:\\\"setBearing\\\",setPitch:\\\"setPitch\\\",setSprite:\\\"setSprite\\\",setGlyphs:\\\"setGlyphs\\\",setTransition:\\\"setTransition\\\",setLight:\\\"setLight\\\"};function qt(t,e,r){r.push({command:Ht.addSource,args:[t,e[t]]})}function Gt(t,e,r){e.push({command:Ht.removeSource,args:[t]}),r[t]=!0}function Zt(t,e,r,n){Gt(t,r,n),qt(t,e,r)}function Yt(e,r,n){var i;for(i in e[n])if(e[n].hasOwnProperty(i)&&\\\"data\\\"!==i&&!t.deepEqual(e[n][i],r[n][i]))return!1;for(i in r[n])if(r[n].hasOwnProperty(i)&&\\\"data\\\"!==i&&!t.deepEqual(e[n][i],r[n][i]))return!1;return!0}function Wt(e,r,n,i,a,o){var s;for(s in r=r||{},e=e||{})e.hasOwnProperty(s)&&(t.deepEqual(e[s],r[s])||n.push({command:o,args:[i,s,r[s],a]}));for(s in r)r.hasOwnProperty(s)&&!e.hasOwnProperty(s)&&(t.deepEqual(e[s],r[s])||n.push({command:o,args:[i,s,r[s],a]}))}function Xt(t){return t.id}function Jt(t,e){return t[e.id]=e,t}function Kt(e,r){if(!e)return[{command:Ht.setStyle,args:[r]}];var n=[];try{if(!t.deepEqual(e.version,r.version))return[{command:Ht.setStyle,args:[r]}];t.deepEqual(e.center,r.center)||n.push({command:Ht.setCenter,args:[r.center]}),t.deepEqual(e.zoom,r.zoom)||n.push({command:Ht.setZoom,args:[r.zoom]}),t.deepEqual(e.bearing,r.bearing)||n.push({command:Ht.setBearing,args:[r.bearing]}),t.deepEqual(e.pitch,r.pitch)||n.push({command:Ht.setPitch,args:[r.pitch]}),t.deepEqual(e.sprite,r.sprite)||n.push({command:Ht.setSprite,args:[r.sprite]}),t.deepEqual(e.glyphs,r.glyphs)||n.push({command:Ht.setGlyphs,args:[r.glyphs]}),t.deepEqual(e.transition,r.transition)||n.push({command:Ht.setTransition,args:[r.transition]}),t.deepEqual(e.light,r.light)||n.push({command:Ht.setLight,args:[r.light]});var i={},a=[];!function(e,r,n,i){var a;for(a in r=r||{},e=e||{})e.hasOwnProperty(a)&&(r.hasOwnProperty(a)||Gt(a,n,i));for(a in r)r.hasOwnProperty(a)&&(e.hasOwnProperty(a)?t.deepEqual(e[a],r[a])||(\\\"geojson\\\"===e[a].type&&\\\"geojson\\\"===r[a].type&&Yt(e,r,a)?n.push({command:Ht.setGeoJSONSourceData,args:[a,r[a].data]}):Zt(a,r,n,i)):qt(a,r,n))}(e.sources,r.sources,a,i);var o=[];e.layers&&e.layers.forEach((function(t){i[t.source]?n.push({command:Ht.removeLayer,args:[t.id]}):o.push(t)})),n=n.concat(a),function(e,r,n){r=r||[];var i,a,o,s,l,u,c,f=(e=e||[]).map(Xt),h=r.map(Xt),p=e.reduce(Jt,{}),d=r.reduce(Jt,{}),v=f.slice(),g=Object.create(null);for(i=0,a=0;i<f.length;i++)o=f[i],d.hasOwnProperty(o)?a++:(n.push({command:Ht.removeLayer,args:[o]}),v.splice(v.indexOf(o,a),1));for(i=0,a=0;i<h.length;i++)o=h[h.length-1-i],v[v.length-1-i]!==o&&(p.hasOwnProperty(o)?(n.push({command:Ht.removeLayer,args:[o]}),v.splice(v.lastIndexOf(o,v.length-a),1)):a++,u=v[v.length-i],n.push({command:Ht.addLayer,args:[d[o],u]}),v.splice(v.length-i,0,o),g[o]=!0);for(i=0;i<h.length;i++)if(s=p[o=h[i]],l=d[o],!g[o]&&!t.deepEqual(s,l))if(t.deepEqual(s.source,l.source)&&t.deepEqual(s[\\\"source-layer\\\"],l[\\\"source-layer\\\"])&&t.deepEqual(s.type,l.type)){for(c in Wt(s.layout,l.layout,n,o,null,Ht.setLayoutProperty),Wt(s.paint,l.paint,n,o,null,Ht.setPaintProperty),t.deepEqual(s.filter,l.filter)||n.push({command:Ht.setFilter,args:[o,l.filter]}),t.deepEqual(s.minzoom,l.minzoom)&&t.deepEqual(s.maxzoom,l.maxzoom)||n.push({command:Ht.setLayerZoomRange,args:[o,l.minzoom,l.maxzoom]}),s)s.hasOwnProperty(c)&&\\\"layout\\\"!==c&&\\\"paint\\\"!==c&&\\\"filter\\\"!==c&&\\\"metadata\\\"!==c&&\\\"minzoom\\\"!==c&&\\\"maxzoom\\\"!==c&&(0===c.indexOf(\\\"paint.\\\")?Wt(s[c],l[c],n,o,c.slice(6),Ht.setPaintProperty):t.deepEqual(s[c],l[c])||n.push({command:Ht.setLayerProperty,args:[o,c,l[c]]}));for(c in l)l.hasOwnProperty(c)&&!s.hasOwnProperty(c)&&\\\"layout\\\"!==c&&\\\"paint\\\"!==c&&\\\"filter\\\"!==c&&\\\"metadata\\\"!==c&&\\\"minzoom\\\"!==c&&\\\"maxzoom\\\"!==c&&(0===c.indexOf(\\\"paint.\\\")?Wt(s[c],l[c],n,o,c.slice(6),Ht.setPaintProperty):t.deepEqual(s[c],l[c])||n.push({command:Ht.setLayerProperty,args:[o,c,l[c]]}))}else n.push({command:Ht.removeLayer,args:[o]}),u=v[v.lastIndexOf(o)+1],n.push({command:Ht.addLayer,args:[l,u]})}(o,r.layers,n)}catch(t){console.warn(\\\"Unable to compute style diff:\\\",t),n=[{command:Ht.setStyle,args:[r]}]}return n}var $t=function(t,e){this.reset(t,e)};$t.prototype.reset=function(t,e){this.points=t||[],this._distances=[0];for(var r=1;r<this.points.length;r++)this._distances[r]=this._distances[r-1]+this.points[r].dist(this.points[r-1]);this.length=this._distances[this._distances.length-1],this.padding=Math.min(e||0,.5*this.length),this.paddedLength=this.length-2*this.padding},$t.prototype.lerp=function(e){if(1===this.points.length)return this.points[0];e=t.clamp(e,0,1);for(var r=1,n=this._distances[r],i=e*this.paddedLength+this.padding;n<i&&r<this._distances.length;)n=this._distances[++r];var a=r-1,o=this._distances[a],s=n-o,l=s>0?(i-o)/s:0;return this.points[a].mult(1-l).add(this.points[r].mult(l))};var Qt=function(t,e,r){var n=this.boxCells=[],i=this.circleCells=[];this.xCellCount=Math.ceil(t/r),this.yCellCount=Math.ceil(e/r);for(var a=0;a<this.xCellCount*this.yCellCount;a++)n.push([]),i.push([]);this.circleKeys=[],this.boxKeys=[],this.bboxes=[],this.circles=[],this.width=t,this.height=e,this.xScale=this.xCellCount/t,this.yScale=this.yCellCount/e,this.boxUid=0,this.circleUid=0};function te(e,r,n,i,a){var o=t.create();return r?(t.scale(o,o,[1/a,1/a,1]),n||t.rotateZ(o,o,i.angle)):t.multiply(o,i.labelPlaneMatrix,e),o}function ee(e,r,n,i,a){if(r){var o=t.clone(e);return t.scale(o,o,[a,a,1]),n||t.rotateZ(o,o,-i.angle),o}return i.glCoordMatrix}function re(e,r){var n=[e.x,e.y,0,1];pe(n,n,r);var i=n[3];return{point:new t.Point(n[0]/i,n[1]/i),signedDistanceFromCamera:i}}function ne(t,e){return.5+t/e*.5}function ie(t,e){var r=t[0]/t[3],n=t[1]/t[3];return r>=-e[0]&&r<=e[0]&&n>=-e[1]&&n<=e[1]}function ae(e,r,n,i,a,o,s,l){var u=i?e.textSizeData:e.iconSizeData,c=t.evaluateSizeForZoom(u,n.transform.zoom),f=[256/n.width*2+1,256/n.height*2+1],h=i?e.text.dynamicLayoutVertexArray:e.icon.dynamicLayoutVertexArray;h.clear();for(var p=e.lineVertexArray,d=i?e.text.placedSymbolArray:e.icon.placedSymbolArray,v=n.transform.width/n.transform.height,g=!1,y=0;y<d.length;y++){var m=d.get(y);if(m.hidden||m.writingMode===t.WritingMode.vertical&&!g)he(m.numGlyphs,h);else{g=!1;var x=[m.anchorX,m.anchorY,0,1];if(t.transformMat4(x,x,r),ie(x,f)){var b=x[3],_=ne(n.transform.cameraToCenterDistance,b),w=t.evaluateSizeForFeature(u,c,m),T=s?w/_:w*_,k=new t.Point(m.anchorX,m.anchorY),A=re(k,a).point,M={},S=le(m,T,!1,l,r,a,o,e.glyphOffsetArray,p,h,A,k,M,v);g=S.useVertical,(S.notEnoughRoom||g||S.needsFlipping&&le(m,T,!0,l,r,a,o,e.glyphOffsetArray,p,h,A,k,M,v).notEnoughRoom)&&he(m.numGlyphs,h)}else he(m.numGlyphs,h)}}i?e.text.dynamicLayoutVertexBuffer.updateData(h):e.icon.dynamicLayoutVertexBuffer.updateData(h)}function oe(t,e,r,n,i,a,o,s,l,u,c){var f=s.glyphStartIndex+s.numGlyphs,h=s.lineStartIndex,p=s.lineStartIndex+s.lineLength,d=e.getoffsetX(s.glyphStartIndex),v=e.getoffsetX(f-1),g=ce(t*d,r,n,i,a,o,s.segment,h,p,l,u,c);if(!g)return null;var y=ce(t*v,r,n,i,a,o,s.segment,h,p,l,u,c);return y?{first:g,last:y}:null}function se(e,r,n,i){return e===t.WritingMode.horizontal&&Math.abs(n.y-r.y)>Math.abs(n.x-r.x)*i?{useVertical:!0}:(e===t.WritingMode.vertical?r.y<n.y:r.x>n.x)?{needsFlipping:!0}:null}function le(e,r,n,i,a,o,s,l,u,c,f,h,p,d){var v,g=r/24,y=e.lineOffsetX*g,m=e.lineOffsetY*g;if(e.numGlyphs>1){var x=e.glyphStartIndex+e.numGlyphs,b=e.lineStartIndex,_=e.lineStartIndex+e.lineLength,w=oe(g,l,y,m,n,f,h,e,u,o,p);if(!w)return{notEnoughRoom:!0};var T=re(w.first.point,s).point,k=re(w.last.point,s).point;if(i&&!n){var A=se(e.writingMode,T,k,d);if(A)return A}v=[w.first];for(var M=e.glyphStartIndex+1;M<x-1;M++)v.push(ce(g*l.getoffsetX(M),y,m,n,f,h,e.segment,b,_,u,o,p));v.push(w.last)}else{if(i&&!n){var S=re(h,a).point,E=e.lineStartIndex+e.segment+1,L=new t.Point(u.getx(E),u.gety(E)),C=re(L,a),P=C.signedDistanceFromCamera>0?C.point:ue(h,L,S,1,a),O=se(e.writingMode,S,P,d);if(O)return O}var I=ce(g*l.getoffsetX(e.glyphStartIndex),y,m,n,f,h,e.segment,e.lineStartIndex,e.lineStartIndex+e.lineLength,u,o,p);if(!I)return{notEnoughRoom:!0};v=[I]}for(var D=0,z=v;D<z.length;D+=1){var R=z[D];t.addDynamicAttributes(c,R.point,R.angle)}return{}}function ue(t,e,r,n,i){var a=re(t.add(t.sub(e)._unit()),i).point,o=r.sub(a);return r.add(o._mult(n/o.mag()))}function ce(e,r,n,i,a,o,s,l,u,c,f,h){var p=i?e-r:e+r,d=p>0?1:-1,v=0;i&&(d*=-1,v=Math.PI),d<0&&(v+=Math.PI);for(var g=d>0?l+s:l+s+1,y=a,m=a,x=0,b=0,_=Math.abs(p),w=[];x+b<=_;){if((g+=d)<l||g>=u)return null;if(m=y,w.push(y),void 0===(y=h[g])){var T=new t.Point(c.getx(g),c.gety(g)),k=re(T,f);if(k.signedDistanceFromCamera>0)y=h[g]=k.point;else{var A=g-d;y=ue(0===x?o:new t.Point(c.getx(A),c.gety(A)),T,m,_-x+1,f)}}x+=b,b=m.dist(y)}var M=(_-x)/b,S=y.sub(m),E=S.mult(M)._add(m);E._add(S._unit()._perp()._mult(n*d));var L=v+Math.atan2(y.y-m.y,y.x-m.x);return w.push(E),{point:E,angle:L,path:w}}Qt.prototype.keysLength=function(){return this.boxKeys.length+this.circleKeys.length},Qt.prototype.insert=function(t,e,r,n,i){this._forEachCell(e,r,n,i,this._insertBoxCell,this.boxUid++),this.boxKeys.push(t),this.bboxes.push(e),this.bboxes.push(r),this.bboxes.push(n),this.bboxes.push(i)},Qt.prototype.insertCircle=function(t,e,r,n){this._forEachCell(e-n,r-n,e+n,r+n,this._insertCircleCell,this.circleUid++),this.circleKeys.push(t),this.circles.push(e),this.circles.push(r),this.circles.push(n)},Qt.prototype._insertBoxCell=function(t,e,r,n,i,a){this.boxCells[i].push(a)},Qt.prototype._insertCircleCell=function(t,e,r,n,i,a){this.circleCells[i].push(a)},Qt.prototype._query=function(t,e,r,n,i,a){if(r<0||t>this.width||n<0||e>this.height)return!i&&[];var o=[];if(t<=0&&e<=0&&this.width<=r&&this.height<=n){if(i)return!0;for(var s=0;s<this.boxKeys.length;s++)o.push({key:this.boxKeys[s],x1:this.bboxes[4*s],y1:this.bboxes[4*s+1],x2:this.bboxes[4*s+2],y2:this.bboxes[4*s+3]});for(var l=0;l<this.circleKeys.length;l++){var u=this.circles[3*l],c=this.circles[3*l+1],f=this.circles[3*l+2];o.push({key:this.circleKeys[l],x1:u-f,y1:c-f,x2:u+f,y2:c+f})}return a?o.filter(a):o}var h={hitTest:i,seenUids:{box:{},circle:{}}};return this._forEachCell(t,e,r,n,this._queryCell,o,h,a),i?o.length>0:o},Qt.prototype._queryCircle=function(t,e,r,n,i){var a=t-r,o=t+r,s=e-r,l=e+r;if(o<0||a>this.width||l<0||s>this.height)return!n&&[];var u=[],c={hitTest:n,circle:{x:t,y:e,radius:r},seenUids:{box:{},circle:{}}};return this._forEachCell(a,s,o,l,this._queryCellCircle,u,c,i),n?u.length>0:u},Qt.prototype.query=function(t,e,r,n,i){return this._query(t,e,r,n,!1,i)},Qt.prototype.hitTest=function(t,e,r,n,i){return this._query(t,e,r,n,!0,i)},Qt.prototype.hitTestCircle=function(t,e,r,n){return this._queryCircle(t,e,r,!0,n)},Qt.prototype._queryCell=function(t,e,r,n,i,a,o,s){var l=o.seenUids,u=this.boxCells[i];if(null!==u)for(var c=this.bboxes,f=0,h=u;f<h.length;f+=1){var p=h[f];if(!l.box[p]){l.box[p]=!0;var d=4*p;if(t<=c[d+2]&&e<=c[d+3]&&r>=c[d+0]&&n>=c[d+1]&&(!s||s(this.boxKeys[p]))){if(o.hitTest)return a.push(!0),!0;a.push({key:this.boxKeys[p],x1:c[d],y1:c[d+1],x2:c[d+2],y2:c[d+3]})}}}var v=this.circleCells[i];if(null!==v)for(var g=this.circles,y=0,m=v;y<m.length;y+=1){var x=m[y];if(!l.circle[x]){l.circle[x]=!0;var b=3*x;if(this._circleAndRectCollide(g[b],g[b+1],g[b+2],t,e,r,n)&&(!s||s(this.circleKeys[x]))){if(o.hitTest)return a.push(!0),!0;var _=g[b],w=g[b+1],T=g[b+2];a.push({key:this.circleKeys[x],x1:_-T,y1:w-T,x2:_+T,y2:w+T})}}}},Qt.prototype._queryCellCircle=function(t,e,r,n,i,a,o,s){var l=o.circle,u=o.seenUids,c=this.boxCells[i];if(null!==c)for(var f=this.bboxes,h=0,p=c;h<p.length;h+=1){var d=p[h];if(!u.box[d]){u.box[d]=!0;var v=4*d;if(this._circleAndRectCollide(l.x,l.y,l.radius,f[v+0],f[v+1],f[v+2],f[v+3])&&(!s||s(this.boxKeys[d])))return a.push(!0),!0}}var g=this.circleCells[i];if(null!==g)for(var y=this.circles,m=0,x=g;m<x.length;m+=1){var b=x[m];if(!u.circle[b]){u.circle[b]=!0;var _=3*b;if(this._circlesCollide(y[_],y[_+1],y[_+2],l.x,l.y,l.radius)&&(!s||s(this.circleKeys[b])))return a.push(!0),!0}}},Qt.prototype._forEachCell=function(t,e,r,n,i,a,o,s){for(var l=this._convertToXCellCoord(t),u=this._convertToYCellCoord(e),c=this._convertToXCellCoord(r),f=this._convertToYCellCoord(n),h=l;h<=c;h++)for(var p=u;p<=f;p++){var d=this.xCellCount*p+h;if(i.call(this,t,e,r,n,d,a,o,s))return}},Qt.prototype._convertToXCellCoord=function(t){return Math.max(0,Math.min(this.xCellCount-1,Math.floor(t*this.xScale)))},Qt.prototype._convertToYCellCoord=function(t){return Math.max(0,Math.min(this.yCellCount-1,Math.floor(t*this.yScale)))},Qt.prototype._circlesCollide=function(t,e,r,n,i,a){var o=n-t,s=i-e,l=r+a;return l*l>o*o+s*s},Qt.prototype._circleAndRectCollide=function(t,e,r,n,i,a,o){var s=(a-n)/2,l=Math.abs(t-(n+s));if(l>s+r)return!1;var u=(o-i)/2,c=Math.abs(e-(i+u));if(c>u+r)return!1;if(l<=s||c<=u)return!0;var f=l-s,h=c-u;return f*f+h*h<=r*r};var fe=new Float32Array([-1/0,-1/0,0,-1/0,-1/0,0,-1/0,-1/0,0,-1/0,-1/0,0]);function he(t,e){for(var r=0;r<t;r++){var n=e.length;e.resize(n+4),e.float32.set(fe,3*n)}}function pe(t,e,r){var n=e[0],i=e[1];return t[0]=r[0]*n+r[4]*i+r[12],t[1]=r[1]*n+r[5]*i+r[13],t[3]=r[3]*n+r[7]*i+r[15],t}var de=100,ve=function(t,e,r){void 0===e&&(e=new Qt(t.width+200,t.height+200,25)),void 0===r&&(r=new Qt(t.width+200,t.height+200,25)),this.transform=t,this.grid=e,this.ignoredGrid=r,this.pitchfactor=Math.cos(t._pitch)*t.cameraToCenterDistance,this.screenRightBoundary=t.width+de,this.screenBottomBoundary=t.height+de,this.gridRightBoundary=t.width+200,this.gridBottomBoundary=t.height+200};function ge(e,r,n){return r*(t.EXTENT/(e.tileSize*Math.pow(2,n-e.tileID.overscaledZ)))}ve.prototype.placeCollisionBox=function(t,e,r,n,i){var a=this.projectAndGetPerspectiveRatio(n,t.anchorPointX,t.anchorPointY),o=r*a.perspectiveRatio,s=t.x1*o+a.point.x,l=t.y1*o+a.point.y,u=t.x2*o+a.point.x,c=t.y2*o+a.point.y;return!this.isInsideGrid(s,l,u,c)||!e&&this.grid.hitTest(s,l,u,c,i)?{box:[],offscreen:!1}:{box:[s,l,u,c],offscreen:this.isOffscreen(s,l,u,c)}},ve.prototype.placeCollisionCircles=function(e,r,n,i,a,o,s,l,u,c,f,h,p){var d=[],v=new t.Point(r.anchorX,r.anchorY),g=re(v,o),y=ne(this.transform.cameraToCenterDistance,g.signedDistanceFromCamera),m=(c?a/y:a*y)/t.ONE_EM,x=re(v,s).point,b=oe(m,i,r.lineOffsetX*m,r.lineOffsetY*m,!1,x,v,r,n,s,{}),_=!1,w=!1,T=!0;if(b){for(var k=.5*h*y+p,A=new t.Point(-100,-100),M=new t.Point(this.screenRightBoundary,this.screenBottomBoundary),S=new $t,E=b.first,L=b.last,C=[],P=E.path.length-1;P>=1;P--)C.push(E.path[P]);for(var O=1;O<L.path.length;O++)C.push(L.path[O]);var I=2.5*k;if(l){var D=C.map((function(t){return re(t,l)}));C=D.some((function(t){return t.signedDistanceFromCamera<=0}))?[]:D.map((function(t){return t.point}))}var z=[];if(C.length>0){for(var R=C[0].clone(),F=C[0].clone(),B=1;B<C.length;B++)R.x=Math.min(R.x,C[B].x),R.y=Math.min(R.y,C[B].y),F.x=Math.max(F.x,C[B].x),F.y=Math.max(F.y,C[B].y);z=R.x>=A.x&&F.x<=M.x&&R.y>=A.y&&F.y<=M.y?[C]:F.x<A.x||R.x>M.x||F.y<A.y||R.y>M.y?[]:t.clipLine([C],A.x,A.y,M.x,M.y)}for(var N=0,j=z;N<j.length;N+=1){var U=j[N];S.reset(U,.25*k);var V;V=S.length<=.5*k?1:Math.ceil(S.paddedLength/I)+1;for(var H=0;H<V;H++){var q=H/Math.max(V-1,1),G=S.lerp(q),Z=G.x+de,Y=G.y+de;d.push(Z,Y,k,0);var W=Z-k,X=Y-k,J=Z+k,K=Y+k;if(T=T&&this.isOffscreen(W,X,J,K),w=w||this.isInsideGrid(W,X,J,K),!e&&this.grid.hitTestCircle(Z,Y,k,f)&&(_=!0,!u))return{circles:[],offscreen:!1,collisionDetected:_}}}}return{circles:!u&&_||!w?[]:d,offscreen:T,collisionDetected:_}},ve.prototype.queryRenderedSymbols=function(e){if(0===e.length||0===this.grid.keysLength()&&0===this.ignoredGrid.keysLength())return{};for(var r=[],n=1/0,i=1/0,a=-1/0,o=-1/0,s=0,l=e;s<l.length;s+=1){var u=l[s],c=new t.Point(u.x+de,u.y+de);n=Math.min(n,c.x),i=Math.min(i,c.y),a=Math.max(a,c.x),o=Math.max(o,c.y),r.push(c)}for(var f={},h={},p=0,d=this.grid.query(n,i,a,o).concat(this.ignoredGrid.query(n,i,a,o));p<d.length;p+=1){var v=d[p],g=v.key;if(void 0===f[g.bucketInstanceId]&&(f[g.bucketInstanceId]={}),!f[g.bucketInstanceId][g.featureIndex]){var y=[new t.Point(v.x1,v.y1),new t.Point(v.x2,v.y1),new t.Point(v.x2,v.y2),new t.Point(v.x1,v.y2)];t.polygonIntersectsPolygon(r,y)&&(f[g.bucketInstanceId][g.featureIndex]=!0,void 0===h[g.bucketInstanceId]&&(h[g.bucketInstanceId]=[]),h[g.bucketInstanceId].push(g.featureIndex))}}return h},ve.prototype.insertCollisionBox=function(t,e,r,n,i){var a={bucketInstanceId:r,featureIndex:n,collisionGroupID:i};(e?this.ignoredGrid:this.grid).insert(a,t[0],t[1],t[2],t[3])},ve.prototype.insertCollisionCircles=function(t,e,r,n,i){for(var a=e?this.ignoredGrid:this.grid,o={bucketInstanceId:r,featureIndex:n,collisionGroupID:i},s=0;s<t.length;s+=4)a.insertCircle(o,t[s],t[s+1],t[s+2])},ve.prototype.projectAndGetPerspectiveRatio=function(e,r,n){var i=[r,n,0,1];return pe(i,i,e),{point:new t.Point((i[0]/i[3]+1)/2*this.transform.width+de,(-i[1]/i[3]+1)/2*this.transform.height+de),perspectiveRatio:.5+this.transform.cameraToCenterDistance/i[3]*.5}},ve.prototype.isOffscreen=function(t,e,r,n){return r<de||t>=this.screenRightBoundary||n<de||e>this.screenBottomBoundary},ve.prototype.isInsideGrid=function(t,e,r,n){return r>=0&&t<this.gridRightBoundary&&n>=0&&e<this.gridBottomBoundary},ve.prototype.getViewportMatrix=function(){var e=t.identity([]);return t.translate(e,e,[-100,-100,0]),e};var ye=function(t,e,r,n){this.opacity=t?Math.max(0,Math.min(1,t.opacity+(t.placed?e:-e))):n&&r?1:0,this.placed=r};ye.prototype.isHidden=function(){return 0===this.opacity&&!this.placed};var me=function(t,e,r,n,i){this.text=new ye(t?t.text:null,e,r,i),this.icon=new ye(t?t.icon:null,e,n,i)};me.prototype.isHidden=function(){return this.text.isHidden()&&this.icon.isHidden()};var xe=function(t,e,r){this.text=t,this.icon=e,this.skipFade=r},be=function(){this.invProjMatrix=t.create(),this.viewportMatrix=t.create(),this.circles=[]},_e=function(t,e,r,n,i){this.bucketInstanceId=t,this.featureIndex=e,this.sourceLayerIndex=r,this.bucketIndex=n,this.tileID=i},we=function(t){this.crossSourceCollisions=t,this.maxGroupID=0,this.collisionGroups={}};function Te(e,r,n,i,a){var o=t.getAnchorAlignment(e),s=-(o.horizontalAlign-.5)*r,l=-(o.verticalAlign-.5)*n,u=t.evaluateVariableOffset(e,i);return new t.Point(s+u[0]*a,l+u[1]*a)}function ke(e,r,n,i,a,o){var s=e.x1,l=e.x2,u=e.y1,c=e.y2,f=e.anchorPointX,h=e.anchorPointY,p=new t.Point(r,n);return i&&p._rotate(a?o:-o),{x1:s+p.x,y1:u+p.y,x2:l+p.x,y2:c+p.y,anchorPointX:f,anchorPointY:h}}we.prototype.get=function(t){if(this.crossSourceCollisions)return{ID:0,predicate:null};if(!this.collisionGroups[t]){var e=++this.maxGroupID;this.collisionGroups[t]={ID:e,predicate:function(t){return t.collisionGroupID===e}}}return this.collisionGroups[t]};var Ae=function(t,e,r,n){this.transform=t.clone(),this.collisionIndex=new ve(this.transform),this.placements={},this.opacities={},this.variableOffsets={},this.stale=!1,this.commitTime=0,this.fadeDuration=e,this.retainedQueryData={},this.collisionGroups=new we(r),this.collisionCircleArrays={},this.prevPlacement=n,n&&(n.prevPlacement=void 0),this.placedOrientations={}};function Me(t,e,r,n,i){t.emplaceBack(e?1:0,r?1:0,n||0,i||0),t.emplaceBack(e?1:0,r?1:0,n||0,i||0),t.emplaceBack(e?1:0,r?1:0,n||0,i||0),t.emplaceBack(e?1:0,r?1:0,n||0,i||0)}Ae.prototype.getBucketParts=function(e,r,n,i){var a=n.getBucket(r),o=n.latestFeatureIndex;if(a&&o&&r.id===a.layerIds[0]){var s=n.collisionBoxArray,l=a.layers[0].layout,u=Math.pow(2,this.transform.zoom-n.tileID.overscaledZ),c=n.tileSize/t.EXTENT,f=this.transform.calculatePosMatrix(n.tileID.toUnwrapped()),h=\\\"map\\\"===l.get(\\\"text-pitch-alignment\\\"),p=\\\"map\\\"===l.get(\\\"text-rotation-alignment\\\"),d=ge(n,1,this.transform.zoom),v=te(f,h,p,this.transform,d),g=null;if(h){var y=ee(f,h,p,this.transform,d);g=t.multiply([],this.transform.labelPlaneMatrix,y)}this.retainedQueryData[a.bucketInstanceId]=new _e(a.bucketInstanceId,o,a.sourceLayerIndex,a.index,n.tileID);var m={bucket:a,layout:l,posMatrix:f,textLabelPlaneMatrix:v,labelToScreenMatrix:g,scale:u,textPixelRatio:c,holdingForFade:n.holdingForFade(),collisionBoxArray:s,partiallyEvaluatedTextSize:t.evaluateSizeForZoom(a.textSizeData,this.transform.zoom),collisionGroup:this.collisionGroups.get(a.sourceID)};if(i)for(var x=0,b=a.sortKeyRanges;x<b.length;x+=1){var _=b[x],w=_.sortKey,T=_.symbolInstanceStart,k=_.symbolInstanceEnd;e.push({sortKey:w,symbolInstanceStart:T,symbolInstanceEnd:k,parameters:m})}else e.push({symbolInstanceStart:0,symbolInstanceEnd:a.symbolInstances.length,parameters:m})}},Ae.prototype.attemptAnchorPlacement=function(t,e,r,n,i,a,o,s,l,u,c,f,h,p,d){var v,g=[f.textOffset0,f.textOffset1],y=Te(t,r,n,g,i),m=this.collisionIndex.placeCollisionBox(ke(e,y.x,y.y,a,o,this.transform.angle),c,s,l,u.predicate);if(!d||0!==this.collisionIndex.placeCollisionBox(ke(d,y.x,y.y,a,o,this.transform.angle),c,s,l,u.predicate).box.length)return m.box.length>0?(this.prevPlacement&&this.prevPlacement.variableOffsets[f.crossTileID]&&this.prevPlacement.placements[f.crossTileID]&&this.prevPlacement.placements[f.crossTileID].text&&(v=this.prevPlacement.variableOffsets[f.crossTileID].anchor),this.variableOffsets[f.crossTileID]={textOffset:g,width:r,height:n,anchor:t,textBoxScale:i,prevAnchor:v},this.markUsedJustification(h,t,f,p),h.allowVerticalPlacement&&(this.markUsedOrientation(h,p,f),this.placedOrientations[f.crossTileID]=p),{shift:y,placedGlyphBoxes:m}):void 0},Ae.prototype.placeLayerBucketPart=function(e,r,n){var i=this,a=e.parameters,o=a.bucket,s=a.layout,l=a.posMatrix,u=a.textLabelPlaneMatrix,c=a.labelToScreenMatrix,f=a.textPixelRatio,h=a.holdingForFade,p=a.collisionBoxArray,d=a.partiallyEvaluatedTextSize,v=a.collisionGroup,g=s.get(\\\"text-optional\\\"),y=s.get(\\\"icon-optional\\\"),m=s.get(\\\"text-allow-overlap\\\"),x=s.get(\\\"icon-allow-overlap\\\"),b=\\\"map\\\"===s.get(\\\"text-rotation-alignment\\\"),_=\\\"map\\\"===s.get(\\\"text-pitch-alignment\\\"),w=\\\"none\\\"!==s.get(\\\"icon-text-fit\\\"),T=\\\"viewport-y\\\"===s.get(\\\"symbol-z-order\\\"),k=m&&(x||!o.hasIconData()||y),A=x&&(m||!o.hasTextData()||g);!o.collisionArrays&&p&&o.deserializeCollisionBoxes(p);var M=function(e,a){if(!r[e.crossTileID])if(h)i.placements[e.crossTileID]=new xe(!1,!1,!1);else{var p,T=!1,M=!1,S=!0,E=null,L={box:null,offscreen:null},C={box:null,offscreen:null},P=null,O=null,I=0,D=0,z=0;a.textFeatureIndex?I=a.textFeatureIndex:e.useRuntimeCollisionCircles&&(I=e.featureIndex),a.verticalTextFeatureIndex&&(D=a.verticalTextFeatureIndex);var R=a.textBox;if(R){var F=function(r){var n=t.WritingMode.horizontal;if(o.allowVerticalPlacement&&!r&&i.prevPlacement){var a=i.prevPlacement.placedOrientations[e.crossTileID];a&&(i.placedOrientations[e.crossTileID]=a,n=a,i.markUsedOrientation(o,n,e))}return n},B=function(r,n){if(o.allowVerticalPlacement&&e.numVerticalGlyphVertices>0&&a.verticalTextBox)for(var i=0,s=o.writingModes;i<s.length&&(s[i]===t.WritingMode.vertical?(L=n(),C=L):L=r(),!(L&&L.box&&L.box.length));i+=1);else L=r()};if(s.get(\\\"text-variable-anchor\\\")){var N=s.get(\\\"text-variable-anchor\\\");if(i.prevPlacement&&i.prevPlacement.variableOffsets[e.crossTileID]){var j=i.prevPlacement.variableOffsets[e.crossTileID];N.indexOf(j.anchor)>0&&(N=N.filter((function(t){return t!==j.anchor}))).unshift(j.anchor)}var U=function(t,r,n){for(var a=t.x2-t.x1,s=t.y2-t.y1,u=e.textBoxScale,c=w&&!x?r:null,h={box:[],offscreen:!1},p=m?2*N.length:N.length,d=0;d<p;++d){var g=N[d%N.length],y=d>=N.length,k=i.attemptAnchorPlacement(g,t,a,s,u,b,_,f,l,v,y,e,o,n,c);if(k&&(h=k.placedGlyphBoxes)&&h.box&&h.box.length){T=!0,E=k.shift;break}}return h};B((function(){return U(R,a.iconBox,t.WritingMode.horizontal)}),(function(){var r=a.verticalTextBox,n=L&&L.box&&L.box.length;return o.allowVerticalPlacement&&!n&&e.numVerticalGlyphVertices>0&&r?U(r,a.verticalIconBox,t.WritingMode.vertical):{box:null,offscreen:null}})),L&&(T=L.box,S=L.offscreen);var V=F(L&&L.box);if(!T&&i.prevPlacement){var H=i.prevPlacement.variableOffsets[e.crossTileID];H&&(i.variableOffsets[e.crossTileID]=H,i.markUsedJustification(o,H.anchor,e,V))}}else{var q=function(t,r){var n=i.collisionIndex.placeCollisionBox(t,m,f,l,v.predicate);return n&&n.box&&n.box.length&&(i.markUsedOrientation(o,r,e),i.placedOrientations[e.crossTileID]=r),n};B((function(){return q(R,t.WritingMode.horizontal)}),(function(){var r=a.verticalTextBox;return o.allowVerticalPlacement&&e.numVerticalGlyphVertices>0&&r?q(r,t.WritingMode.vertical):{box:null,offscreen:null}})),F(L&&L.box&&L.box.length)}}if(T=(p=L)&&p.box&&p.box.length>0,S=p&&p.offscreen,e.useRuntimeCollisionCircles){var G=o.text.placedSymbolArray.get(e.centerJustifiedTextSymbolIndex),Z=t.evaluateSizeForFeature(o.textSizeData,d,G),Y=s.get(\\\"text-padding\\\"),W=e.collisionCircleDiameter;P=i.collisionIndex.placeCollisionCircles(m,G,o.lineVertexArray,o.glyphOffsetArray,Z,l,u,c,n,_,v.predicate,W,Y),T=m||P.circles.length>0&&!P.collisionDetected,S=S&&P.offscreen}if(a.iconFeatureIndex&&(z=a.iconFeatureIndex),a.iconBox){var X=function(t){var e=w&&E?ke(t,E.x,E.y,b,_,i.transform.angle):t;return i.collisionIndex.placeCollisionBox(e,x,f,l,v.predicate)};M=C&&C.box&&C.box.length&&a.verticalIconBox?(O=X(a.verticalIconBox)).box.length>0:(O=X(a.iconBox)).box.length>0,S=S&&O.offscreen}var J=g||0===e.numHorizontalGlyphVertices&&0===e.numVerticalGlyphVertices,K=y||0===e.numIconVertices;if(J||K?K?J||(M=M&&T):T=M&&T:M=T=M&&T,T&&p&&p.box&&(C&&C.box&&D?i.collisionIndex.insertCollisionBox(p.box,s.get(\\\"text-ignore-placement\\\"),o.bucketInstanceId,D,v.ID):i.collisionIndex.insertCollisionBox(p.box,s.get(\\\"text-ignore-placement\\\"),o.bucketInstanceId,I,v.ID)),M&&O&&i.collisionIndex.insertCollisionBox(O.box,s.get(\\\"icon-ignore-placement\\\"),o.bucketInstanceId,z,v.ID),P&&(T&&i.collisionIndex.insertCollisionCircles(P.circles,s.get(\\\"text-ignore-placement\\\"),o.bucketInstanceId,I,v.ID),n)){var $=o.bucketInstanceId,Q=i.collisionCircleArrays[$];void 0===Q&&(Q=i.collisionCircleArrays[$]=new be);for(var tt=0;tt<P.circles.length;tt+=4)Q.circles.push(P.circles[tt+0]),Q.circles.push(P.circles[tt+1]),Q.circles.push(P.circles[tt+2]),Q.circles.push(P.collisionDetected?1:0)}i.placements[e.crossTileID]=new xe(T||k,M||A,S||o.justReloaded),r[e.crossTileID]=!0}};if(T)for(var S=o.getSortedSymbolIndexes(this.transform.angle),E=S.length-1;E>=0;--E){var L=S[E];M(o.symbolInstances.get(L),o.collisionArrays[L])}else for(var C=e.symbolInstanceStart;C<e.symbolInstanceEnd;C++)M(o.symbolInstances.get(C),o.collisionArrays[C]);if(n&&o.bucketInstanceId in this.collisionCircleArrays){var P=this.collisionCircleArrays[o.bucketInstanceId];t.invert(P.invProjMatrix,l),P.viewportMatrix=this.collisionIndex.getViewportMatrix()}o.justReloaded=!1},Ae.prototype.markUsedJustification=function(e,r,n,i){var a,o={left:n.leftJustifiedTextSymbolIndex,center:n.centerJustifiedTextSymbolIndex,right:n.rightJustifiedTextSymbolIndex};a=i===t.WritingMode.vertical?n.verticalPlacedTextSymbolIndex:o[t.getAnchorJustification(r)];for(var s=0,l=[n.leftJustifiedTextSymbolIndex,n.centerJustifiedTextSymbolIndex,n.rightJustifiedTextSymbolIndex,n.verticalPlacedTextSymbolIndex];s<l.length;s+=1){var u=l[s];u>=0&&(e.text.placedSymbolArray.get(u).crossTileID=a>=0&&u!==a?0:n.crossTileID)}},Ae.prototype.markUsedOrientation=function(e,r,n){for(var i=r===t.WritingMode.horizontal||r===t.WritingMode.horizontalOnly?r:0,a=r===t.WritingMode.vertical?r:0,o=0,s=[n.leftJustifiedTextSymbolIndex,n.centerJustifiedTextSymbolIndex,n.rightJustifiedTextSymbolIndex];o<s.length;o+=1){var l=s[o];e.text.placedSymbolArray.get(l).placedOrientation=i}n.verticalPlacedTextSymbolIndex&&(e.text.placedSymbolArray.get(n.verticalPlacedTextSymbolIndex).placedOrientation=a)},Ae.prototype.commit=function(t){this.commitTime=t,this.zoomAtLastRecencyCheck=this.transform.zoom;var e=this.prevPlacement,r=!1;this.prevZoomAdjustment=e?e.zoomAdjustment(this.transform.zoom):0;var n=e?e.symbolFadeChange(t):1,i=e?e.opacities:{},a=e?e.variableOffsets:{},o=e?e.placedOrientations:{};for(var s in this.placements){var l=this.placements[s],u=i[s];u?(this.opacities[s]=new me(u,n,l.text,l.icon),r=r||l.text!==u.text.placed||l.icon!==u.icon.placed):(this.opacities[s]=new me(null,n,l.text,l.icon,l.skipFade),r=r||l.text||l.icon)}for(var c in i){var f=i[c];if(!this.opacities[c]){var h=new me(f,n,!1,!1);h.isHidden()||(this.opacities[c]=h,r=r||f.text.placed||f.icon.placed)}}for(var p in a)this.variableOffsets[p]||!this.opacities[p]||this.opacities[p].isHidden()||(this.variableOffsets[p]=a[p]);for(var d in o)this.placedOrientations[d]||!this.opacities[d]||this.opacities[d].isHidden()||(this.placedOrientations[d]=o[d]);r?this.lastPlacementChangeTime=t:\\\"number\\\"!=typeof this.lastPlacementChangeTime&&(this.lastPlacementChangeTime=e?e.lastPlacementChangeTime:t)},Ae.prototype.updateLayerOpacities=function(t,e){for(var r={},n=0,i=e;n<i.length;n+=1){var a=i[n],o=a.getBucket(t);o&&a.latestFeatureIndex&&t.id===o.layerIds[0]&&this.updateBucketOpacities(o,r,a.collisionBoxArray)}},Ae.prototype.updateBucketOpacities=function(e,r,n){var i=this;e.hasTextData()&&e.text.opacityVertexArray.clear(),e.hasIconData()&&e.icon.opacityVertexArray.clear(),e.hasIconCollisionBoxData()&&e.iconCollisionBox.collisionVertexArray.clear(),e.hasTextCollisionBoxData()&&e.textCollisionBox.collisionVertexArray.clear();var a=e.layers[0].layout,o=new me(null,0,!1,!1,!0),s=a.get(\\\"text-allow-overlap\\\"),l=a.get(\\\"icon-allow-overlap\\\"),u=a.get(\\\"text-variable-anchor\\\"),c=\\\"map\\\"===a.get(\\\"text-rotation-alignment\\\"),f=\\\"map\\\"===a.get(\\\"text-pitch-alignment\\\"),h=\\\"none\\\"!==a.get(\\\"icon-text-fit\\\"),p=new me(null,0,s&&(l||!e.hasIconData()||a.get(\\\"icon-optional\\\")),l&&(s||!e.hasTextData()||a.get(\\\"text-optional\\\")),!0);!e.collisionArrays&&n&&(e.hasIconCollisionBoxData()||e.hasTextCollisionBoxData())&&e.deserializeCollisionBoxes(n);for(var d=function(t,e,r){for(var n=0;n<e/4;n++)t.opacityVertexArray.emplaceBack(r)},v=function(n){var a=e.symbolInstances.get(n),s=a.numHorizontalGlyphVertices,l=a.numVerticalGlyphVertices,v=a.crossTileID,g=r[v],y=i.opacities[v];g?y=o:y||(y=p,i.opacities[v]=y),r[v]=!0;var m=s>0||l>0,x=a.numIconVertices>0,b=i.placedOrientations[a.crossTileID],_=b===t.WritingMode.vertical,w=b===t.WritingMode.horizontal||b===t.WritingMode.horizontalOnly;if(m){var T=De(y.text),k=_?ze:T;d(e.text,s,k);var A=w?ze:T;d(e.text,l,A);var M=y.text.isHidden();[a.rightJustifiedTextSymbolIndex,a.centerJustifiedTextSymbolIndex,a.leftJustifiedTextSymbolIndex].forEach((function(t){t>=0&&(e.text.placedSymbolArray.get(t).hidden=M||_?1:0)})),a.verticalPlacedTextSymbolIndex>=0&&(e.text.placedSymbolArray.get(a.verticalPlacedTextSymbolIndex).hidden=M||w?1:0);var S=i.variableOffsets[a.crossTileID];S&&i.markUsedJustification(e,S.anchor,a,b);var E=i.placedOrientations[a.crossTileID];E&&(i.markUsedJustification(e,\\\"left\\\",a,E),i.markUsedOrientation(e,E,a))}if(x){var L=De(y.icon),C=!(h&&a.verticalPlacedIconSymbolIndex&&_);if(a.placedIconSymbolIndex>=0){var P=C?L:ze;d(e.icon,a.numIconVertices,P),e.icon.placedSymbolArray.get(a.placedIconSymbolIndex).hidden=y.icon.isHidden()}if(a.verticalPlacedIconSymbolIndex>=0){var O=C?ze:L;d(e.icon,a.numVerticalIconVertices,O),e.icon.placedSymbolArray.get(a.verticalPlacedIconSymbolIndex).hidden=y.icon.isHidden()}}if(e.hasIconCollisionBoxData()||e.hasTextCollisionBoxData()){var I=e.collisionArrays[n];if(I){var D=new t.Point(0,0);if(I.textBox||I.verticalTextBox){var z=!0;if(u){var R=i.variableOffsets[v];R?(D=Te(R.anchor,R.width,R.height,R.textOffset,R.textBoxScale),c&&D._rotate(f?i.transform.angle:-i.transform.angle)):z=!1}I.textBox&&Me(e.textCollisionBox.collisionVertexArray,y.text.placed,!z||_,D.x,D.y),I.verticalTextBox&&Me(e.textCollisionBox.collisionVertexArray,y.text.placed,!z||w,D.x,D.y)}var F=Boolean(!w&&I.verticalIconBox);I.iconBox&&Me(e.iconCollisionBox.collisionVertexArray,y.icon.placed,F,h?D.x:0,h?D.y:0),I.verticalIconBox&&Me(e.iconCollisionBox.collisionVertexArray,y.icon.placed,!F,h?D.x:0,h?D.y:0)}}},g=0;g<e.symbolInstances.length;g++)v(g);if(e.sortFeatures(this.transform.angle),this.retainedQueryData[e.bucketInstanceId]&&(this.retainedQueryData[e.bucketInstanceId].featureSortOrder=e.featureSortOrder),e.hasTextData()&&e.text.opacityVertexBuffer&&e.text.opacityVertexBuffer.updateData(e.text.opacityVertexArray),e.hasIconData()&&e.icon.opacityVertexBuffer&&e.icon.opacityVertexBuffer.updateData(e.icon.opacityVertexArray),e.hasIconCollisionBoxData()&&e.iconCollisionBox.collisionVertexBuffer&&e.iconCollisionBox.collisionVertexBuffer.updateData(e.iconCollisionBox.collisionVertexArray),e.hasTextCollisionBoxData()&&e.textCollisionBox.collisionVertexBuffer&&e.textCollisionBox.collisionVertexBuffer.updateData(e.textCollisionBox.collisionVertexArray),e.bucketInstanceId in this.collisionCircleArrays){var y=this.collisionCircleArrays[e.bucketInstanceId];e.placementInvProjMatrix=y.invProjMatrix,e.placementViewportMatrix=y.viewportMatrix,e.collisionCircleArray=y.circles,delete this.collisionCircleArrays[e.bucketInstanceId]}},Ae.prototype.symbolFadeChange=function(t){return 0===this.fadeDuration?1:(t-this.commitTime)/this.fadeDuration+this.prevZoomAdjustment},Ae.prototype.zoomAdjustment=function(t){return Math.max(0,(this.transform.zoom-t)/1.5)},Ae.prototype.hasTransitions=function(t){return this.stale||t-this.lastPlacementChangeTime<this.fadeDuration},Ae.prototype.stillRecent=function(t,e){var r=this.zoomAtLastRecencyCheck===e?1-this.zoomAdjustment(e):1;return this.zoomAtLastRecencyCheck=e,this.commitTime+this.fadeDuration*r>t},Ae.prototype.setStale=function(){this.stale=!0};var Se=Math.pow(2,25),Ee=Math.pow(2,24),Le=Math.pow(2,17),Ce=Math.pow(2,16),Pe=Math.pow(2,9),Oe=Math.pow(2,8),Ie=Math.pow(2,1);function De(t){if(0===t.opacity&&!t.placed)return 0;if(1===t.opacity&&t.placed)return 4294967295;var e=t.placed?1:0,r=Math.floor(127*t.opacity);return r*Se+e*Ee+r*Le+e*Ce+r*Pe+e*Oe+r*Ie+e}var ze=0,Re=function(t){this._sortAcrossTiles=\\\"viewport-y\\\"!==t.layout.get(\\\"symbol-z-order\\\")&&void 0!==t.layout.get(\\\"symbol-sort-key\\\").constantOr(1),this._currentTileIndex=0,this._currentPartIndex=0,this._seenCrossTileIDs={},this._bucketParts=[]};Re.prototype.continuePlacement=function(t,e,r,n,i){for(var a=this._bucketParts;this._currentTileIndex<t.length;){var o=t[this._currentTileIndex];if(e.getBucketParts(a,n,o,this._sortAcrossTiles),this._currentTileIndex++,i())return!0}for(this._sortAcrossTiles&&(this._sortAcrossTiles=!1,a.sort((function(t,e){return t.sortKey-e.sortKey})));this._currentPartIndex<a.length;){var s=a[this._currentPartIndex];if(e.placeLayerBucketPart(s,this._seenCrossTileIDs,r),this._currentPartIndex++,i())return!0}return!1};var Fe=function(t,e,r,n,i,a,o){this.placement=new Ae(t,i,a,o),this._currentPlacementIndex=e.length-1,this._forceFullPlacement=r,this._showCollisionBoxes=n,this._done=!1};Fe.prototype.isDone=function(){return this._done},Fe.prototype.continuePlacement=function(e,r,n){for(var i=this,a=t.browser.now(),o=function(){var e=t.browser.now()-a;return!i._forceFullPlacement&&e>2};this._currentPlacementIndex>=0;){var s=r[e[this._currentPlacementIndex]],l=this.placement.collisionIndex.transform.zoom;if(\\\"symbol\\\"===s.type&&(!s.minzoom||s.minzoom<=l)&&(!s.maxzoom||s.maxzoom>l)){if(this._inProgressLayer||(this._inProgressLayer=new Re(s)),this._inProgressLayer.continuePlacement(n[s.source],this.placement,this._showCollisionBoxes,s,o))return;delete this._inProgressLayer}this._currentPlacementIndex--}this._done=!0},Fe.prototype.commit=function(t){return this.placement.commit(t),this.placement};var Be=512/t.EXTENT/2,Ne=function(t,e,r){this.tileID=t,this.indexedSymbolInstances={},this.bucketInstanceId=r;for(var n=0;n<e.length;n++){var i=e.get(n),a=i.key;this.indexedSymbolInstances[a]||(this.indexedSymbolInstances[a]=[]),this.indexedSymbolInstances[a].push({crossTileID:i.crossTileID,coord:this.getScaledCoordinates(i,t)})}};Ne.prototype.getScaledCoordinates=function(e,r){var n=r.canonical.z-this.tileID.canonical.z,i=Be/Math.pow(2,n);return{x:Math.floor((r.canonical.x*t.EXTENT+e.anchorX)*i),y:Math.floor((r.canonical.y*t.EXTENT+e.anchorY)*i)}},Ne.prototype.findMatches=function(t,e,r){for(var n=this.tileID.canonical.z<e.canonical.z?1:Math.pow(2,this.tileID.canonical.z-e.canonical.z),i=0;i<t.length;i++){var a=t.get(i);if(!a.crossTileID){var o=this.indexedSymbolInstances[a.key];if(o)for(var s=this.getScaledCoordinates(a,e),l=0,u=o;l<u.length;l+=1){var c=u[l];if(Math.abs(c.coord.x-s.x)<=n&&Math.abs(c.coord.y-s.y)<=n&&!r[c.crossTileID]){r[c.crossTileID]=!0,a.crossTileID=c.crossTileID;break}}}}};var je=function(){this.maxCrossTileID=0};je.prototype.generate=function(){return++this.maxCrossTileID};var Ue=function(){this.indexes={},this.usedCrossTileIDs={},this.lng=0};Ue.prototype.handleWrapJump=function(t){var e=Math.round((t-this.lng)/360);if(0!==e)for(var r in this.indexes){var n=this.indexes[r],i={};for(var a in n){var o=n[a];o.tileID=o.tileID.unwrapTo(o.tileID.wrap+e),i[o.tileID.key]=o}this.indexes[r]=i}this.lng=t},Ue.prototype.addBucket=function(t,e,r){if(this.indexes[t.overscaledZ]&&this.indexes[t.overscaledZ][t.key]){if(this.indexes[t.overscaledZ][t.key].bucketInstanceId===e.bucketInstanceId)return!1;this.removeBucketCrossTileIDs(t.overscaledZ,this.indexes[t.overscaledZ][t.key])}for(var n=0;n<e.symbolInstances.length;n++)e.symbolInstances.get(n).crossTileID=0;this.usedCrossTileIDs[t.overscaledZ]||(this.usedCrossTileIDs[t.overscaledZ]={});var i=this.usedCrossTileIDs[t.overscaledZ];for(var a in this.indexes){var o=this.indexes[a];if(Number(a)>t.overscaledZ)for(var s in o){var l=o[s];l.tileID.isChildOf(t)&&l.findMatches(e.symbolInstances,t,i)}else{var u=o[t.scaledTo(Number(a)).key];u&&u.findMatches(e.symbolInstances,t,i)}}for(var c=0;c<e.symbolInstances.length;c++){var f=e.symbolInstances.get(c);f.crossTileID||(f.crossTileID=r.generate(),i[f.crossTileID]=!0)}return void 0===this.indexes[t.overscaledZ]&&(this.indexes[t.overscaledZ]={}),this.indexes[t.overscaledZ][t.key]=new Ne(t,e.symbolInstances,e.bucketInstanceId),!0},Ue.prototype.removeBucketCrossTileIDs=function(t,e){for(var r in e.indexedSymbolInstances)for(var n=0,i=e.indexedSymbolInstances[r];n<i.length;n+=1){var a=i[n];delete this.usedCrossTileIDs[t][a.crossTileID]}},Ue.prototype.removeStaleBuckets=function(t){var e=!1;for(var r in this.indexes){var n=this.indexes[r];for(var i in n)t[n[i].bucketInstanceId]||(this.removeBucketCrossTileIDs(r,n[i]),delete n[i],e=!0)}return e};var Ve=function(){this.layerIndexes={},this.crossTileIDs=new je,this.maxBucketInstanceId=0,this.bucketsInCurrentPlacement={}};Ve.prototype.addLayer=function(t,e,r){var n=this.layerIndexes[t.id];void 0===n&&(n=this.layerIndexes[t.id]=new Ue);var i=!1,a={};n.handleWrapJump(r);for(var o=0,s=e;o<s.length;o+=1){var l=s[o],u=l.getBucket(t);u&&t.id===u.layerIds[0]&&(u.bucketInstanceId||(u.bucketInstanceId=++this.maxBucketInstanceId),n.addBucket(l.tileID,u,this.crossTileIDs)&&(i=!0),a[u.bucketInstanceId]=!0)}return n.removeStaleBuckets(a)&&(i=!0),i},Ve.prototype.pruneUnusedLayers=function(t){var e={};for(var r in t.forEach((function(t){e[t]=!0})),this.layerIndexes)e[r]||delete this.layerIndexes[r]};var He=function(e,r){return t.emitValidationErrors(e,r&&r.filter((function(t){return\\\"source.canvas\\\"!==t.identifier})))},qe=t.pick(Ht,[\\\"addLayer\\\",\\\"removeLayer\\\",\\\"setPaintProperty\\\",\\\"setLayoutProperty\\\",\\\"setFilter\\\",\\\"addSource\\\",\\\"removeSource\\\",\\\"setLayerZoomRange\\\",\\\"setLight\\\",\\\"setTransition\\\",\\\"setGeoJSONSourceData\\\"]),Ge=t.pick(Ht,[\\\"setCenter\\\",\\\"setZoom\\\",\\\"setBearing\\\",\\\"setPitch\\\"]),Ze=function(){var e={},r=t.styleSpec.$version;for(var n in t.styleSpec.$root){var i=t.styleSpec.$root[n];if(i.required){var a;null!=(a=\\\"version\\\"===n?r:\\\"array\\\"===i.type?[]:{})&&(e[n]=a)}}return e}(),Ye=function(e){function r(n,i){var a=this;void 0===i&&(i={}),e.call(this),this.map=n,this.dispatcher=new A(jt(),this),this.imageManager=new h,this.imageManager.setEventedParent(this),this.glyphManager=new x(n._requestManager,i.localIdeographFontFamily),this.lineAtlas=new k(256,512),this.crossTileSymbolIndex=new Ve,this._layers={},this._serializedLayers={},this._order=[],this.sourceCaches={},this.zoomHistory=new t.ZoomHistory,this._loaded=!1,this._availableImages=[],this._resetUpdates(),this.dispatcher.broadcast(\\\"setReferrer\\\",t.getReferrer());var o=this;this._rtlTextPluginCallback=r.registerForPluginStateChange((function(e){var r={pluginStatus:e.pluginStatus,pluginURL:e.pluginURL};o.dispatcher.broadcast(\\\"syncRTLPluginState\\\",r,(function(e,r){if(t.triggerPluginCompletionEvent(e),r&&r.every((function(t){return t})))for(var n in o.sourceCaches)o.sourceCaches[n].reload()}))})),this.on(\\\"data\\\",(function(t){if(\\\"source\\\"===t.dataType&&\\\"metadata\\\"===t.sourceDataType){var e=a.sourceCaches[t.sourceId];if(e){var r=e.getSource();if(r&&r.vectorLayerIds)for(var n in a._layers){var i=a._layers[n];i.source===r.id&&a._validateLayer(i)}}}}))}return e&&(r.__proto__=e),r.prototype=Object.create(e&&e.prototype),r.prototype.constructor=r,r.prototype.loadURL=function(e,r){var n=this;void 0===r&&(r={}),this.fire(new t.Event(\\\"dataloading\\\",{dataType:\\\"style\\\"}));var i=\\\"boolean\\\"==typeof r.validate?r.validate:!t.isMapboxURL(e);e=this.map._requestManager.normalizeStyleURL(e,r.accessToken);var a=this.map._requestManager.transformRequest(e,t.ResourceType.Style);this._request=t.getJSON(a,(function(e,r){n._request=null,e?n.fire(new t.ErrorEvent(e)):r&&n._load(r,i)}))},r.prototype.loadJSON=function(e,r){var n=this;void 0===r&&(r={}),this.fire(new t.Event(\\\"dataloading\\\",{dataType:\\\"style\\\"})),this._request=t.browser.frame((function(){n._request=null,n._load(e,!1!==r.validate)}))},r.prototype.loadEmpty=function(){this.fire(new t.Event(\\\"dataloading\\\",{dataType:\\\"style\\\"})),this._load(Ze,!1)},r.prototype._load=function(e,r){if(!r||!He(this,t.validateStyle(e))){for(var n in this._loaded=!0,this.stylesheet=e,e.sources)this.addSource(n,e.sources[n],{validate:!1});e.sprite?this._loadSprite(e.sprite):this.imageManager.setLoaded(!0),this.glyphManager.setURL(e.glyphs);var i=Vt(this.stylesheet.layers);this._order=i.map((function(t){return t.id})),this._layers={},this._serializedLayers={};for(var a=0,o=i;a<o.length;a+=1){var s=o[a];(s=t.createStyleLayer(s)).setEventedParent(this,{layer:{id:s.id}}),this._layers[s.id]=s,this._serializedLayers[s.id]=s.serialize()}this.dispatcher.broadcast(\\\"setLayers\\\",this._serializeLayers(this._order)),this.light=new T(this.stylesheet.light),this.fire(new t.Event(\\\"data\\\",{dataType:\\\"style\\\"})),this.fire(new t.Event(\\\"style.load\\\"))}},r.prototype._loadSprite=function(e){var r=this;this._spriteRequest=function(e,r,n){var i,a,o,s=t.browser.devicePixelRatio>1?\\\"@2x\\\":\\\"\\\",l=t.getJSON(r.transformRequest(r.normalizeSpriteURL(e,s,\\\".json\\\"),t.ResourceType.SpriteJSON),(function(t,e){l=null,o||(o=t,i=e,c())})),u=t.getImage(r.transformRequest(r.normalizeSpriteURL(e,s,\\\".png\\\"),t.ResourceType.SpriteImage),(function(t,e){u=null,o||(o=t,a=e,c())}));function c(){if(o)n(o);else if(i&&a){var e=t.browser.getImageData(a),r={};for(var s in i){var l=i[s],u=l.width,c=l.height,f=l.x,h=l.y,p=l.sdf,d=l.pixelRatio,v=l.stretchX,g=l.stretchY,y=l.content,m=new t.RGBAImage({width:u,height:c});t.RGBAImage.copy(e,m,{x:f,y:h},{x:0,y:0},{width:u,height:c}),r[s]={data:m,pixelRatio:d,sdf:p,stretchX:v,stretchY:g,content:y}}n(null,r)}}return{cancel:function(){l&&(l.cancel(),l=null),u&&(u.cancel(),u=null)}}}(e,this.map._requestManager,(function(e,n){if(r._spriteRequest=null,e)r.fire(new t.ErrorEvent(e));else if(n)for(var i in n)r.imageManager.addImage(i,n[i]);r.imageManager.setLoaded(!0),r._availableImages=r.imageManager.listImages(),r.dispatcher.broadcast(\\\"setImages\\\",r._availableImages),r.fire(new t.Event(\\\"data\\\",{dataType:\\\"style\\\"}))}))},r.prototype._validateLayer=function(e){var r=this.sourceCaches[e.source];if(r){var n=e.sourceLayer;if(n){var i=r.getSource();(\\\"geojson\\\"===i.type||i.vectorLayerIds&&-1===i.vectorLayerIds.indexOf(n))&&this.fire(new t.ErrorEvent(new Error('Source layer \\\"'+n+'\\\" does not exist on source \\\"'+i.id+'\\\" as specified by style layer \\\"'+e.id+'\\\"')))}}},r.prototype.loaded=function(){if(!this._loaded)return!1;if(Object.keys(this._updatedSources).length)return!1;for(var t in this.sourceCaches)if(!this.sourceCaches[t].loaded())return!1;return!!this.imageManager.isLoaded()},r.prototype._serializeLayers=function(t){for(var e=[],r=0,n=t;r<n.length;r+=1){var i=n[r],a=this._layers[i];\\\"custom\\\"!==a.type&&e.push(a.serialize())}return e},r.prototype.hasTransitions=function(){if(this.light&&this.light.hasTransition())return!0;for(var t in this.sourceCaches)if(this.sourceCaches[t].hasTransition())return!0;for(var e in this._layers)if(this._layers[e].hasTransition())return!0;return!1},r.prototype._checkLoaded=function(){if(!this._loaded)throw new Error(\\\"Style is not done loading\\\")},r.prototype.update=function(e){if(this._loaded){var r=this._changed;if(this._changed){var n=Object.keys(this._updatedLayers),i=Object.keys(this._removedLayers);for(var a in(n.length||i.length)&&this._updateWorkerLayers(n,i),this._updatedSources){var o=this._updatedSources[a];\\\"reload\\\"===o?this._reloadSource(a):\\\"clear\\\"===o&&this._clearSource(a)}for(var s in this._updateTilesForChangedImages(),this._updatedPaintProps)this._layers[s].updateTransitions(e);this.light.updateTransitions(e),this._resetUpdates()}for(var l in this.sourceCaches)this.sourceCaches[l].used=!1;for(var u=0,c=this._order;u<c.length;u+=1){var f=c[u],h=this._layers[f];h.recalculate(e,this._availableImages),!h.isHidden(e.zoom)&&h.source&&(this.sourceCaches[h.source].used=!0)}this.light.recalculate(e),this.z=e.zoom,r&&this.fire(new t.Event(\\\"data\\\",{dataType:\\\"style\\\"}))}},r.prototype._updateTilesForChangedImages=function(){var t=Object.keys(this._changedImages);if(t.length){for(var e in this.sourceCaches)this.sourceCaches[e].reloadTilesForDependencies([\\\"icons\\\",\\\"patterns\\\"],t);this._changedImages={}}},r.prototype._updateWorkerLayers=function(t,e){this.dispatcher.broadcast(\\\"updateLayers\\\",{layers:this._serializeLayers(t),removedIds:e})},r.prototype._resetUpdates=function(){this._changed=!1,this._updatedLayers={},this._removedLayers={},this._updatedSources={},this._updatedPaintProps={},this._changedImages={}},r.prototype.setState=function(e){var r=this;if(this._checkLoaded(),He(this,t.validateStyle(e)))return!1;(e=t.clone$1(e)).layers=Vt(e.layers);var n=Kt(this.serialize(),e).filter((function(t){return!(t.command in Ge)}));if(0===n.length)return!1;var i=n.filter((function(t){return!(t.command in qe)}));if(i.length>0)throw new Error(\\\"Unimplemented: \\\"+i.map((function(t){return t.command})).join(\\\", \\\")+\\\".\\\");return n.forEach((function(t){\\\"setTransition\\\"!==t.command&&r[t.command].apply(r,t.args)})),this.stylesheet=e,!0},r.prototype.addImage=function(e,r){if(this.getImage(e))return this.fire(new t.ErrorEvent(new Error(\\\"An image with this name already exists.\\\")));this.imageManager.addImage(e,r),this._availableImages=this.imageManager.listImages(),this._changedImages[e]=!0,this._changed=!0,this.fire(new t.Event(\\\"data\\\",{dataType:\\\"style\\\"}))},r.prototype.updateImage=function(t,e){this.imageManager.updateImage(t,e)},r.prototype.getImage=function(t){return this.imageManager.getImage(t)},r.prototype.removeImage=function(e){if(!this.getImage(e))return this.fire(new t.ErrorEvent(new Error(\\\"No image with this name exists.\\\")));this.imageManager.removeImage(e),this._availableImages=this.imageManager.listImages(),this._changedImages[e]=!0,this._changed=!0,this.fire(new t.Event(\\\"data\\\",{dataType:\\\"style\\\"}))},r.prototype.listImages=function(){return this._checkLoaded(),this.imageManager.listImages()},r.prototype.addSource=function(e,r,n){var i=this;if(void 0===n&&(n={}),this._checkLoaded(),void 0!==this.sourceCaches[e])throw new Error(\\\"There is already a source with this ID\\\");if(!r.type)throw new Error(\\\"The type property must be defined, but the only the following properties were given: \\\"+Object.keys(r).join(\\\", \\\")+\\\".\\\");if(!([\\\"vector\\\",\\\"raster\\\",\\\"geojson\\\",\\\"video\\\",\\\"image\\\"].indexOf(r.type)>=0&&this._validate(t.validateStyle.source,\\\"sources.\\\"+e,r,null,n))){this.map&&this.map._collectResourceTiming&&(r.collectResourceTiming=!0);var a=this.sourceCaches[e]=new Ot(e,r,this.dispatcher);a.style=this,a.setEventedParent(this,(function(){return{isSourceLoaded:i.loaded(),source:a.serialize(),sourceId:e}})),a.onAdd(this.map),this._changed=!0}},r.prototype.removeSource=function(e){if(this._checkLoaded(),void 0===this.sourceCaches[e])throw new Error(\\\"There is no source with this ID\\\");for(var r in this._layers)if(this._layers[r].source===e)return this.fire(new t.ErrorEvent(new Error('Source \\\"'+e+'\\\" cannot be removed while layer \\\"'+r+'\\\" is using it.')));var n=this.sourceCaches[e];delete this.sourceCaches[e],delete this._updatedSources[e],n.fire(new t.Event(\\\"data\\\",{sourceDataType:\\\"metadata\\\",dataType:\\\"source\\\",sourceId:e})),n.setEventedParent(null),n.clearTiles(),n.onRemove&&n.onRemove(this.map),this._changed=!0},r.prototype.setGeoJSONSourceData=function(t,e){this._checkLoaded(),this.sourceCaches[t].getSource().setData(e),this._changed=!0},r.prototype.getSource=function(t){return this.sourceCaches[t]&&this.sourceCaches[t].getSource()},r.prototype.addLayer=function(e,r,n){void 0===n&&(n={}),this._checkLoaded();var i=e.id;if(this.getLayer(i))this.fire(new t.ErrorEvent(new Error('Layer with id \\\"'+i+'\\\" already exists on this map')));else{var a;if(\\\"custom\\\"===e.type){if(He(this,t.validateCustomStyleLayer(e)))return;a=t.createStyleLayer(e)}else{if(\\\"object\\\"==typeof e.source&&(this.addSource(i,e.source),e=t.clone$1(e),e=t.extend(e,{source:i})),this._validate(t.validateStyle.layer,\\\"layers.\\\"+i,e,{arrayIndex:-1},n))return;a=t.createStyleLayer(e),this._validateLayer(a),a.setEventedParent(this,{layer:{id:i}}),this._serializedLayers[a.id]=a.serialize()}var o=r?this._order.indexOf(r):this._order.length;if(r&&-1===o)this.fire(new t.ErrorEvent(new Error('Layer with id \\\"'+r+'\\\" does not exist on this map.')));else{if(this._order.splice(o,0,i),this._layerOrderChanged=!0,this._layers[i]=a,this._removedLayers[i]&&a.source&&\\\"custom\\\"!==a.type){var s=this._removedLayers[i];delete this._removedLayers[i],s.type!==a.type?this._updatedSources[a.source]=\\\"clear\\\":(this._updatedSources[a.source]=\\\"reload\\\",this.sourceCaches[a.source].pause())}this._updateLayer(a),a.onAdd&&a.onAdd(this.map)}}},r.prototype.moveLayer=function(e,r){if(this._checkLoaded(),this._changed=!0,this._layers[e]){if(e!==r){var n=this._order.indexOf(e);this._order.splice(n,1);var i=r?this._order.indexOf(r):this._order.length;r&&-1===i?this.fire(new t.ErrorEvent(new Error('Layer with id \\\"'+r+'\\\" does not exist on this map.'))):(this._order.splice(i,0,e),this._layerOrderChanged=!0)}}else this.fire(new t.ErrorEvent(new Error(\\\"The layer '\\\"+e+\\\"' does not exist in the map's style and cannot be moved.\\\")))},r.prototype.removeLayer=function(e){this._checkLoaded();var r=this._layers[e];if(r){r.setEventedParent(null);var n=this._order.indexOf(e);this._order.splice(n,1),this._layerOrderChanged=!0,this._changed=!0,this._removedLayers[e]=r,delete this._layers[e],delete this._serializedLayers[e],delete this._updatedLayers[e],delete this._updatedPaintProps[e],r.onRemove&&r.onRemove(this.map)}else this.fire(new t.ErrorEvent(new Error(\\\"The layer '\\\"+e+\\\"' does not exist in the map's style and cannot be removed.\\\")))},r.prototype.getLayer=function(t){return this._layers[t]},r.prototype.hasLayer=function(t){return t in this._layers},r.prototype.setLayerZoomRange=function(e,r,n){this._checkLoaded();var i=this.getLayer(e);i?i.minzoom===r&&i.maxzoom===n||(null!=r&&(i.minzoom=r),null!=n&&(i.maxzoom=n),this._updateLayer(i)):this.fire(new t.ErrorEvent(new Error(\\\"The layer '\\\"+e+\\\"' does not exist in the map's style and cannot have zoom extent.\\\")))},r.prototype.setFilter=function(e,r,n){void 0===n&&(n={}),this._checkLoaded();var i=this.getLayer(e);if(i){if(!t.deepEqual(i.filter,r))return null==r?(i.filter=void 0,void this._updateLayer(i)):void(this._validate(t.validateStyle.filter,\\\"layers.\\\"+i.id+\\\".filter\\\",r,null,n)||(i.filter=t.clone$1(r),this._updateLayer(i)))}else this.fire(new t.ErrorEvent(new Error(\\\"The layer '\\\"+e+\\\"' does not exist in the map's style and cannot be filtered.\\\")))},r.prototype.getFilter=function(e){return t.clone$1(this.getLayer(e).filter)},r.prototype.setLayoutProperty=function(e,r,n,i){void 0===i&&(i={}),this._checkLoaded();var a=this.getLayer(e);a?t.deepEqual(a.getLayoutProperty(r),n)||(a.setLayoutProperty(r,n,i),this._updateLayer(a)):this.fire(new t.ErrorEvent(new Error(\\\"The layer '\\\"+e+\\\"' does not exist in the map's style and cannot be styled.\\\")))},r.prototype.getLayoutProperty=function(e,r){var n=this.getLayer(e);if(n)return n.getLayoutProperty(r);this.fire(new t.ErrorEvent(new Error(\\\"The layer '\\\"+e+\\\"' does not exist in the map's style.\\\")))},r.prototype.setPaintProperty=function(e,r,n,i){void 0===i&&(i={}),this._checkLoaded();var a=this.getLayer(e);a?t.deepEqual(a.getPaintProperty(r),n)||(a.setPaintProperty(r,n,i)&&this._updateLayer(a),this._changed=!0,this._updatedPaintProps[e]=!0):this.fire(new t.ErrorEvent(new Error(\\\"The layer '\\\"+e+\\\"' does not exist in the map's style and cannot be styled.\\\")))},r.prototype.getPaintProperty=function(t,e){return this.getLayer(t).getPaintProperty(e)},r.prototype.setFeatureState=function(e,r){this._checkLoaded();var n=e.source,i=e.sourceLayer,a=this.sourceCaches[n];if(void 0!==a){var o=a.getSource().type;\\\"geojson\\\"===o&&i?this.fire(new t.ErrorEvent(new Error(\\\"GeoJSON sources cannot have a sourceLayer parameter.\\\"))):\\\"vector\\\"!==o||i?(void 0===e.id&&this.fire(new t.ErrorEvent(new Error(\\\"The feature id parameter must be provided.\\\"))),a.setFeatureState(i,e.id,r)):this.fire(new t.ErrorEvent(new Error(\\\"The sourceLayer parameter must be provided for vector source types.\\\")))}else this.fire(new t.ErrorEvent(new Error(\\\"The source '\\\"+n+\\\"' does not exist in the map's style.\\\")))},r.prototype.removeFeatureState=function(e,r){this._checkLoaded();var n=e.source,i=this.sourceCaches[n];if(void 0!==i){var a=i.getSource().type,o=\\\"vector\\\"===a?e.sourceLayer:void 0;\\\"vector\\\"!==a||o?r&&\\\"string\\\"!=typeof e.id&&\\\"number\\\"!=typeof e.id?this.fire(new t.ErrorEvent(new Error(\\\"A feature id is requred to remove its specific state property.\\\"))):i.removeFeatureState(o,e.id,r):this.fire(new t.ErrorEvent(new Error(\\\"The sourceLayer parameter must be provided for vector source types.\\\")))}else this.fire(new t.ErrorEvent(new Error(\\\"The source '\\\"+n+\\\"' does not exist in the map's style.\\\")))},r.prototype.getFeatureState=function(e){this._checkLoaded();var r=e.source,n=e.sourceLayer,i=this.sourceCaches[r];if(void 0!==i){if(\\\"vector\\\"!==i.getSource().type||n)return void 0===e.id&&this.fire(new t.ErrorEvent(new Error(\\\"The feature id parameter must be provided.\\\"))),i.getFeatureState(n,e.id);this.fire(new t.ErrorEvent(new Error(\\\"The sourceLayer parameter must be provided for vector source types.\\\")))}else this.fire(new t.ErrorEvent(new Error(\\\"The source '\\\"+r+\\\"' does not exist in the map's style.\\\")))},r.prototype.getTransition=function(){return t.extend({duration:300,delay:0},this.stylesheet&&this.stylesheet.transition)},r.prototype.serialize=function(){return t.filterObject({version:this.stylesheet.version,name:this.stylesheet.name,metadata:this.stylesheet.metadata,light:this.stylesheet.light,center:this.stylesheet.center,zoom:this.stylesheet.zoom,bearing:this.stylesheet.bearing,pitch:this.stylesheet.pitch,sprite:this.stylesheet.sprite,glyphs:this.stylesheet.glyphs,transition:this.stylesheet.transition,sources:t.mapObject(this.sourceCaches,(function(t){return t.serialize()})),layers:this._serializeLayers(this._order)},(function(t){return void 0!==t}))},r.prototype._updateLayer=function(t){this._updatedLayers[t.id]=!0,t.source&&!this._updatedSources[t.source]&&\\\"raster\\\"!==this.sourceCaches[t.source].getSource().type&&(this._updatedSources[t.source]=\\\"reload\\\",this.sourceCaches[t.source].pause()),this._changed=!0},r.prototype._flattenAndSortRenderedFeatures=function(t){for(var e=this,r=function(t){return\\\"fill-extrusion\\\"===e._layers[t].type},n={},i=[],a=this._order.length-1;a>=0;a--){var o=this._order[a];if(r(o)){n[o]=a;for(var s=0,l=t;s<l.length;s+=1){var u=l[s][o];if(u)for(var c=0,f=u;c<f.length;c+=1){var h=f[c];i.push(h)}}}}i.sort((function(t,e){return e.intersectionZ-t.intersectionZ}));for(var p=[],d=this._order.length-1;d>=0;d--){var v=this._order[d];if(r(v))for(var g=i.length-1;g>=0;g--){var y=i[g].feature;if(n[y.layer.id]<d)break;p.push(y),i.pop()}else for(var m=0,x=t;m<x.length;m+=1){var b=x[m][v];if(b)for(var _=0,w=b;_<w.length;_+=1){var T=w[_];p.push(T.feature)}}}return p},r.prototype.queryRenderedFeatures=function(e,r,n){r&&r.filter&&this._validate(t.validateStyle.filter,\\\"queryRenderedFeatures.filter\\\",r.filter,null,r);var i={};if(r&&r.layers){if(!Array.isArray(r.layers))return this.fire(new t.ErrorEvent(new Error(\\\"parameters.layers must be an Array.\\\"))),[];for(var a=0,o=r.layers;a<o.length;a+=1){var s=o[a],l=this._layers[s];if(!l)return this.fire(new t.ErrorEvent(new Error(\\\"The layer '\\\"+s+\\\"' does not exist in the map's style and cannot be queried for features.\\\"))),[];i[l.source]=!0}}var u=[];for(var c in r.availableImages=this._availableImages,this.sourceCaches)r.layers&&!i[c]||u.push(B(this.sourceCaches[c],this._layers,this._serializedLayers,e,r,n));return this.placement&&u.push(function(t,e,r,n,i,a,o){for(var s={},l=a.queryRenderedSymbols(n),u=[],c=0,f=Object.keys(l).map(Number);c<f.length;c+=1){var h=f[c];u.push(o[h])}u.sort(N);for(var p=function(){var r=v[d],n=r.featureIndex.lookupSymbolFeatures(l[r.bucketInstanceId],e,r.bucketIndex,r.sourceLayerIndex,i.filter,i.layers,i.availableImages,t);for(var a in n){var o=s[a]=s[a]||[],u=n[a];u.sort((function(t,e){var n=r.featureSortOrder;if(n){var i=n.indexOf(t.featureIndex);return n.indexOf(e.featureIndex)-i}return e.featureIndex-t.featureIndex}));for(var c=0,f=u;c<f.length;c+=1){var h=f[c];o.push(h)}}},d=0,v=u;d<v.length;d+=1)p();var g=function(e){s[e].forEach((function(n){var i=n.feature,a=t[e],o=r[a.source].getFeatureState(i.layer[\\\"source-layer\\\"],i.id);i.source=i.layer.source,i.layer[\\\"source-layer\\\"]&&(i.sourceLayer=i.layer[\\\"source-layer\\\"]),i.state=o}))};for(var y in s)g(y);return s}(this._layers,this._serializedLayers,this.sourceCaches,e,r,this.placement.collisionIndex,this.placement.retainedQueryData)),this._flattenAndSortRenderedFeatures(u)},r.prototype.querySourceFeatures=function(e,r){r&&r.filter&&this._validate(t.validateStyle.filter,\\\"querySourceFeatures.filter\\\",r.filter,null,r);var n=this.sourceCaches[e];return n?function(t,e){for(var r=t.getRenderableIds().map((function(e){return t.getTileByID(e)})),n=[],i={},a=0;a<r.length;a++){var o=r[a],s=o.tileID.canonical.key;i[s]||(i[s]=!0,o.querySourceFeatures(n,e))}return n}(n,r):[]},r.prototype.addSourceType=function(t,e,n){return r.getSourceType(t)?n(new Error('A source type called \\\"'+t+'\\\" already exists.')):(r.setSourceType(t,e),e.workerSourceURL?void this.dispatcher.broadcast(\\\"loadWorkerSource\\\",{name:t,url:e.workerSourceURL},n):n(null,null))},r.prototype.getLight=function(){return this.light.getLight()},r.prototype.setLight=function(e,r){void 0===r&&(r={}),this._checkLoaded();var n=this.light.getLight(),i=!1;for(var a in e)if(!t.deepEqual(e[a],n[a])){i=!0;break}if(i){var o={now:t.browser.now(),transition:t.extend({duration:300,delay:0},this.stylesheet.transition)};this.light.setLight(e,r),this.light.updateTransitions(o)}},r.prototype._validate=function(e,r,n,i,a){return void 0===a&&(a={}),(!a||!1!==a.validate)&&He(this,e.call(t.validateStyle,t.extend({key:r,style:this.serialize(),value:n,styleSpec:t.styleSpec},i)))},r.prototype._remove=function(){for(var e in this._request&&(this._request.cancel(),this._request=null),this._spriteRequest&&(this._spriteRequest.cancel(),this._spriteRequest=null),t.evented.off(\\\"pluginStateChange\\\",this._rtlTextPluginCallback),this._layers)this._layers[e].setEventedParent(null);for(var r in this.sourceCaches)this.sourceCaches[r].clearTiles(),this.sourceCaches[r].setEventedParent(null);this.imageManager.setEventedParent(null),this.setEventedParent(null),this.dispatcher.remove()},r.prototype._clearSource=function(t){this.sourceCaches[t].clearTiles()},r.prototype._reloadSource=function(t){this.sourceCaches[t].resume(),this.sourceCaches[t].reload()},r.prototype._updateSources=function(t){for(var e in this.sourceCaches)this.sourceCaches[e].update(t)},r.prototype._generateCollisionBoxes=function(){for(var t in this.sourceCaches)this._reloadSource(t)},r.prototype._updatePlacement=function(e,r,n,i,a){void 0===a&&(a=!1);for(var o=!1,s=!1,l={},u=0,c=this._order;u<c.length;u+=1){var f=c[u],h=this._layers[f];if(\\\"symbol\\\"===h.type){if(!l[h.source]){var p=this.sourceCaches[h.source];l[h.source]=p.getRenderableIds(!0).map((function(t){return p.getTileByID(t)})).sort((function(t,e){return e.tileID.overscaledZ-t.tileID.overscaledZ||(t.tileID.isLessThan(e.tileID)?-1:1)}))}var d=this.crossTileSymbolIndex.addLayer(h,l[h.source],e.center.lng);o=o||d}}if(this.crossTileSymbolIndex.pruneUnusedLayers(this._order),((a=a||this._layerOrderChanged||0===n)||!this.pauseablePlacement||this.pauseablePlacement.isDone()&&!this.placement.stillRecent(t.browser.now(),e.zoom))&&(this.pauseablePlacement=new Fe(e,this._order,a,r,n,i,this.placement),this._layerOrderChanged=!1),this.pauseablePlacement.isDone()?this.placement.setStale():(this.pauseablePlacement.continuePlacement(this._order,this._layers,l),this.pauseablePlacement.isDone()&&(this.placement=this.pauseablePlacement.commit(t.browser.now()),s=!0),o&&this.pauseablePlacement.placement.setStale()),s||o)for(var v=0,g=this._order;v<g.length;v+=1){var y=g[v],m=this._layers[y];\\\"symbol\\\"===m.type&&this.placement.updateLayerOpacities(m,l[m.source])}return!this.pauseablePlacement.isDone()||this.placement.hasTransitions(t.browser.now())},r.prototype._releaseSymbolFadeTiles=function(){for(var t in this.sourceCaches)this.sourceCaches[t].releaseSymbolFadeTiles()},r.prototype.getImages=function(t,e,r){this.imageManager.getImages(e.icons,r),this._updateTilesForChangedImages();var n=this.sourceCaches[e.source];n&&n.setDependencies(e.tileID.key,e.type,e.icons)},r.prototype.getGlyphs=function(t,e,r){this.glyphManager.getGlyphs(e.stacks,r)},r.prototype.getResource=function(e,r,n){return t.makeRequest(r,n)},r}(t.Evented);Ye.getSourceType=function(t){return R[t]},Ye.setSourceType=function(t,e){R[t]=e},Ye.registerForPluginStateChange=t.registerForPluginStateChange;var We=t.createLayout([{name:\\\"a_pos\\\",type:\\\"Int16\\\",components:2}]),Xe=_r(\\\"#ifdef GL_ES\\\\nprecision mediump float;\\\\n#else\\\\n#if !defined(lowp)\\\\n#define lowp\\\\n#endif\\\\n#if !defined(mediump)\\\\n#define mediump\\\\n#endif\\\\n#if !defined(highp)\\\\n#define highp\\\\n#endif\\\\n#endif\\\",\\\"#ifdef GL_ES\\\\nprecision highp float;\\\\n#else\\\\n#if !defined(lowp)\\\\n#define lowp\\\\n#endif\\\\n#if !defined(mediump)\\\\n#define mediump\\\\n#endif\\\\n#if !defined(highp)\\\\n#define highp\\\\n#endif\\\\n#endif\\\\nvec2 unpack_float(const float packedValue) {int packedIntValue=int(packedValue);int v0=packedIntValue/256;return vec2(v0,packedIntValue-v0*256);}vec2 unpack_opacity(const float packedOpacity) {int intOpacity=int(packedOpacity)/2;return vec2(float(intOpacity)/127.0,mod(packedOpacity,2.0));}vec4 decode_color(const vec2 encodedColor) {return vec4(unpack_float(encodedColor[0])/255.0,unpack_float(encodedColor[1])/255.0\\\\n);}float unpack_mix_vec2(const vec2 packedValue,const float t) {return mix(packedValue[0],packedValue[1],t);}vec4 unpack_mix_color(const vec4 packedColors,const float t) {vec4 minColor=decode_color(vec2(packedColors[0],packedColors[1]));vec4 maxColor=decode_color(vec2(packedColors[2],packedColors[3]));return mix(minColor,maxColor,t);}vec2 get_pattern_pos(const vec2 pixel_coord_upper,const vec2 pixel_coord_lower,const vec2 pattern_size,const float tile_units_to_pixels,const vec2 pos) {vec2 offset=mod(mod(mod(pixel_coord_upper,pattern_size)*256.0,pattern_size)*256.0+pixel_coord_lower,pattern_size);return (tile_units_to_pixels*pos+offset)/pattern_size;}\\\"),Je=_r(\\\"uniform vec4 u_color;uniform float u_opacity;void main() {gl_FragColor=u_color*u_opacity;\\\\n#ifdef OVERDRAW_INSPECTOR\\\\ngl_FragColor=vec4(1.0);\\\\n#endif\\\\n}\\\",\\\"attribute vec2 a_pos;uniform mat4 u_matrix;void main() {gl_Position=u_matrix*vec4(a_pos,0,1);}\\\"),Ke=_r(\\\"uniform vec2 u_pattern_tl_a;uniform vec2 u_pattern_br_a;uniform vec2 u_pattern_tl_b;uniform vec2 u_pattern_br_b;uniform vec2 u_texsize;uniform float u_mix;uniform float u_opacity;uniform sampler2D u_image;varying vec2 v_pos_a;varying vec2 v_pos_b;void main() {vec2 imagecoord=mod(v_pos_a,1.0);vec2 pos=mix(u_pattern_tl_a/u_texsize,u_pattern_br_a/u_texsize,imagecoord);vec4 color1=texture2D(u_image,pos);vec2 imagecoord_b=mod(v_pos_b,1.0);vec2 pos2=mix(u_pattern_tl_b/u_texsize,u_pattern_br_b/u_texsize,imagecoord_b);vec4 color2=texture2D(u_image,pos2);gl_FragColor=mix(color1,color2,u_mix)*u_opacity;\\\\n#ifdef OVERDRAW_INSPECTOR\\\\ngl_FragColor=vec4(1.0);\\\\n#endif\\\\n}\\\",\\\"uniform mat4 u_matrix;uniform vec2 u_pattern_size_a;uniform vec2 u_pattern_size_b;uniform vec2 u_pixel_coord_upper;uniform vec2 u_pixel_coord_lower;uniform float u_scale_a;uniform float u_scale_b;uniform float u_tile_units_to_pixels;attribute vec2 a_pos;varying vec2 v_pos_a;varying vec2 v_pos_b;void main() {gl_Position=u_matrix*vec4(a_pos,0,1);v_pos_a=get_pattern_pos(u_pixel_coord_upper,u_pixel_coord_lower,u_scale_a*u_pattern_size_a,u_tile_units_to_pixels,a_pos);v_pos_b=get_pattern_pos(u_pixel_coord_upper,u_pixel_coord_lower,u_scale_b*u_pattern_size_b,u_tile_units_to_pixels,a_pos);}\\\"),$e=_r(\\\"varying vec3 v_data;\\\\n#pragma mapbox: define highp vec4 color\\\\n#pragma mapbox: define mediump float radius\\\\n#pragma mapbox: define lowp float blur\\\\n#pragma mapbox: define lowp float opacity\\\\n#pragma mapbox: define highp vec4 stroke_color\\\\n#pragma mapbox: define mediump float stroke_width\\\\n#pragma mapbox: define lowp float stroke_opacity\\\\nvoid main() {\\\\n#pragma mapbox: initialize highp vec4 color\\\\n#pragma mapbox: initialize mediump float radius\\\\n#pragma mapbox: initialize lowp float blur\\\\n#pragma mapbox: initialize lowp float opacity\\\\n#pragma mapbox: initialize highp vec4 stroke_color\\\\n#pragma mapbox: initialize mediump float stroke_width\\\\n#pragma mapbox: initialize lowp float stroke_opacity\\\\nvec2 extrude=v_data.xy;float extrude_length=length(extrude);lowp float antialiasblur=v_data.z;float antialiased_blur=-max(blur,antialiasblur);float opacity_t=smoothstep(0.0,antialiased_blur,extrude_length-1.0);float color_t=stroke_width < 0.01 ? 0.0 : smoothstep(antialiased_blur,0.0,extrude_length-radius/(radius+stroke_width));gl_FragColor=opacity_t*mix(color*opacity,stroke_color*stroke_opacity,color_t);\\\\n#ifdef OVERDRAW_INSPECTOR\\\\ngl_FragColor=vec4(1.0);\\\\n#endif\\\\n}\\\",\\\"uniform mat4 u_matrix;uniform bool u_scale_with_map;uniform bool u_pitch_with_map;uniform vec2 u_extrude_scale;uniform lowp float u_device_pixel_ratio;uniform highp float u_camera_to_center_distance;attribute vec2 a_pos;varying vec3 v_data;\\\\n#pragma mapbox: define highp vec4 color\\\\n#pragma mapbox: define mediump float radius\\\\n#pragma mapbox: define lowp float blur\\\\n#pragma mapbox: define lowp float opacity\\\\n#pragma mapbox: define highp vec4 stroke_color\\\\n#pragma mapbox: define mediump float stroke_width\\\\n#pragma mapbox: define lowp float stroke_opacity\\\\nvoid main(void) {\\\\n#pragma mapbox: initialize highp vec4 color\\\\n#pragma mapbox: initialize mediump float radius\\\\n#pragma mapbox: initialize lowp float blur\\\\n#pragma mapbox: initialize lowp float opacity\\\\n#pragma mapbox: initialize highp vec4 stroke_color\\\\n#pragma mapbox: initialize mediump float stroke_width\\\\n#pragma mapbox: initialize lowp float stroke_opacity\\\\nvec2 extrude=vec2(mod(a_pos,2.0)*2.0-1.0);vec2 circle_center=floor(a_pos*0.5);if (u_pitch_with_map) {vec2 corner_position=circle_center;if (u_scale_with_map) {corner_position+=extrude*(radius+stroke_width)*u_extrude_scale;} else {vec4 projected_center=u_matrix*vec4(circle_center,0,1);corner_position+=extrude*(radius+stroke_width)*u_extrude_scale*(projected_center.w/u_camera_to_center_distance);}gl_Position=u_matrix*vec4(corner_position,0,1);} else {gl_Position=u_matrix*vec4(circle_center,0,1);if (u_scale_with_map) {gl_Position.xy+=extrude*(radius+stroke_width)*u_extrude_scale*u_camera_to_center_distance;} else {gl_Position.xy+=extrude*(radius+stroke_width)*u_extrude_scale*gl_Position.w;}}lowp float antialiasblur=1.0/u_device_pixel_ratio/(radius+stroke_width);v_data=vec3(extrude.x,extrude.y,antialiasblur);}\\\"),Qe=_r(\\\"void main() {gl_FragColor=vec4(1.0);}\\\",\\\"attribute vec2 a_pos;uniform mat4 u_matrix;void main() {gl_Position=u_matrix*vec4(a_pos,0,1);}\\\"),tr=_r(\\\"uniform highp float u_intensity;varying vec2 v_extrude;\\\\n#pragma mapbox: define highp float weight\\\\n#define GAUSS_COEF 0.3989422804014327\\\\nvoid main() {\\\\n#pragma mapbox: initialize highp float weight\\\\nfloat d=-0.5*3.0*3.0*dot(v_extrude,v_extrude);float val=weight*u_intensity*GAUSS_COEF*exp(d);gl_FragColor=vec4(val,1.0,1.0,1.0);\\\\n#ifdef OVERDRAW_INSPECTOR\\\\ngl_FragColor=vec4(1.0);\\\\n#endif\\\\n}\\\",\\\"uniform mat4 u_matrix;uniform float u_extrude_scale;uniform float u_opacity;uniform float u_intensity;attribute vec2 a_pos;varying vec2 v_extrude;\\\\n#pragma mapbox: define highp float weight\\\\n#pragma mapbox: define mediump float radius\\\\nconst highp float ZERO=1.0/255.0/16.0;\\\\n#define GAUSS_COEF 0.3989422804014327\\\\nvoid main(void) {\\\\n#pragma mapbox: initialize highp float weight\\\\n#pragma mapbox: initialize mediump float radius\\\\nvec2 unscaled_extrude=vec2(mod(a_pos,2.0)*2.0-1.0);float S=sqrt(-2.0*log(ZERO/weight/u_intensity/GAUSS_COEF))/3.0;v_extrude=S*unscaled_extrude;vec2 extrude=v_extrude*radius*u_extrude_scale;vec4 pos=vec4(floor(a_pos*0.5)+extrude,0,1);gl_Position=u_matrix*pos;}\\\"),er=_r(\\\"uniform sampler2D u_image;uniform sampler2D u_color_ramp;uniform float u_opacity;varying vec2 v_pos;void main() {float t=texture2D(u_image,v_pos).r;vec4 color=texture2D(u_color_ramp,vec2(t,0.5));gl_FragColor=color*u_opacity;\\\\n#ifdef OVERDRAW_INSPECTOR\\\\ngl_FragColor=vec4(0.0);\\\\n#endif\\\\n}\\\",\\\"uniform mat4 u_matrix;uniform vec2 u_world;attribute vec2 a_pos;varying vec2 v_pos;void main() {gl_Position=u_matrix*vec4(a_pos*u_world,0,1);v_pos.x=a_pos.x;v_pos.y=1.0-a_pos.y;}\\\"),rr=_r(\\\"varying float v_placed;varying float v_notUsed;void main() {float alpha=0.5;gl_FragColor=vec4(1.0,0.0,0.0,1.0)*alpha;if (v_placed > 0.5) {gl_FragColor=vec4(0.0,0.0,1.0,0.5)*alpha;}if (v_notUsed > 0.5) {gl_FragColor*=.1;}}\\\",\\\"attribute vec2 a_pos;attribute vec2 a_anchor_pos;attribute vec2 a_extrude;attribute vec2 a_placed;attribute vec2 a_shift;uniform mat4 u_matrix;uniform vec2 u_extrude_scale;uniform float u_camera_to_center_distance;varying float v_placed;varying float v_notUsed;void main() {vec4 projectedPoint=u_matrix*vec4(a_anchor_pos,0,1);highp float camera_to_anchor_distance=projectedPoint.w;highp float collision_perspective_ratio=clamp(0.5+0.5*(u_camera_to_center_distance/camera_to_anchor_distance),0.0,4.0);gl_Position=u_matrix*vec4(a_pos,0.0,1.0);gl_Position.xy+=(a_extrude+a_shift)*u_extrude_scale*gl_Position.w*collision_perspective_ratio;v_placed=a_placed.x;v_notUsed=a_placed.y;}\\\"),nr=_r(\\\"varying float v_radius;varying vec2 v_extrude;varying float v_perspective_ratio;varying float v_collision;void main() {float alpha=0.5*min(v_perspective_ratio,1.0);float stroke_radius=0.9*max(v_perspective_ratio,1.0);float distance_to_center=length(v_extrude);float distance_to_edge=abs(distance_to_center-v_radius);float opacity_t=smoothstep(-stroke_radius,0.0,-distance_to_edge);vec4 color=mix(vec4(0.0,0.0,1.0,0.5),vec4(1.0,0.0,0.0,1.0),v_collision);gl_FragColor=color*alpha*opacity_t;}\\\",\\\"attribute vec2 a_pos;attribute float a_radius;attribute vec2 a_flags;uniform mat4 u_matrix;uniform mat4 u_inv_matrix;uniform vec2 u_viewport_size;uniform float u_camera_to_center_distance;varying float v_radius;varying vec2 v_extrude;varying float v_perspective_ratio;varying float v_collision;vec3 toTilePosition(vec2 screenPos) {vec4 rayStart=u_inv_matrix*vec4(screenPos,-1.0,1.0);vec4 rayEnd  =u_inv_matrix*vec4(screenPos, 1.0,1.0);rayStart.xyz/=rayStart.w;rayEnd.xyz  /=rayEnd.w;highp float t=(0.0-rayStart.z)/(rayEnd.z-rayStart.z);return mix(rayStart.xyz,rayEnd.xyz,t);}void main() {vec2 quadCenterPos=a_pos;float radius=a_radius;float collision=a_flags.x;float vertexIdx=a_flags.y;vec2 quadVertexOffset=vec2(mix(-1.0,1.0,float(vertexIdx >=2.0)),mix(-1.0,1.0,float(vertexIdx >=1.0 && vertexIdx <=2.0)));vec2 quadVertexExtent=quadVertexOffset*radius;vec3 tilePos=toTilePosition(quadCenterPos);vec4 clipPos=u_matrix*vec4(tilePos,1.0);highp float camera_to_anchor_distance=clipPos.w;highp float collision_perspective_ratio=clamp(0.5+0.5*(u_camera_to_center_distance/camera_to_anchor_distance),0.0,4.0);float padding_factor=1.2;v_radius=radius;v_extrude=quadVertexExtent*padding_factor;v_perspective_ratio=collision_perspective_ratio;v_collision=collision;gl_Position=vec4(clipPos.xyz/clipPos.w,1.0)+vec4(quadVertexExtent*padding_factor/u_viewport_size*2.0,0.0,0.0);}\\\"),ir=_r(\\\"uniform highp vec4 u_color;uniform sampler2D u_overlay;varying vec2 v_uv;void main() {vec4 overlay_color=texture2D(u_overlay,v_uv);gl_FragColor=mix(u_color,overlay_color,overlay_color.a);}\\\",\\\"attribute vec2 a_pos;varying vec2 v_uv;uniform mat4 u_matrix;uniform float u_overlay_scale;void main() {v_uv=a_pos/8192.0;gl_Position=u_matrix*vec4(a_pos*u_overlay_scale,0,1);}\\\"),ar=_r(\\\"#pragma mapbox: define highp vec4 color\\\\n#pragma mapbox: define lowp float opacity\\\\nvoid main() {\\\\n#pragma mapbox: initialize highp vec4 color\\\\n#pragma mapbox: initialize lowp float opacity\\\\ngl_FragColor=color*opacity;\\\\n#ifdef OVERDRAW_INSPECTOR\\\\ngl_FragColor=vec4(1.0);\\\\n#endif\\\\n}\\\",\\\"attribute vec2 a_pos;uniform mat4 u_matrix;\\\\n#pragma mapbox: define highp vec4 color\\\\n#pragma mapbox: define lowp float opacity\\\\nvoid main() {\\\\n#pragma mapbox: initialize highp vec4 color\\\\n#pragma mapbox: initialize lowp float opacity\\\\ngl_Position=u_matrix*vec4(a_pos,0,1);}\\\"),or=_r(\\\"varying vec2 v_pos;\\\\n#pragma mapbox: define highp vec4 outline_color\\\\n#pragma mapbox: define lowp float opacity\\\\nvoid main() {\\\\n#pragma mapbox: initialize highp vec4 outline_color\\\\n#pragma mapbox: initialize lowp float opacity\\\\nfloat dist=length(v_pos-gl_FragCoord.xy);float alpha=1.0-smoothstep(0.0,1.0,dist);gl_FragColor=outline_color*(alpha*opacity);\\\\n#ifdef OVERDRAW_INSPECTOR\\\\ngl_FragColor=vec4(1.0);\\\\n#endif\\\\n}\\\",\\\"attribute vec2 a_pos;uniform mat4 u_matrix;uniform vec2 u_world;varying vec2 v_pos;\\\\n#pragma mapbox: define highp vec4 outline_color\\\\n#pragma mapbox: define lowp float opacity\\\\nvoid main() {\\\\n#pragma mapbox: initialize highp vec4 outline_color\\\\n#pragma mapbox: initialize lowp float opacity\\\\ngl_Position=u_matrix*vec4(a_pos,0,1);v_pos=(gl_Position.xy/gl_Position.w+1.0)/2.0*u_world;}\\\"),sr=_r(\\\"uniform vec2 u_texsize;uniform sampler2D u_image;uniform float u_fade;varying vec2 v_pos_a;varying vec2 v_pos_b;varying vec2 v_pos;\\\\n#pragma mapbox: define lowp float opacity\\\\n#pragma mapbox: define lowp vec4 pattern_from\\\\n#pragma mapbox: define lowp vec4 pattern_to\\\\nvoid main() {\\\\n#pragma mapbox: initialize lowp float opacity\\\\n#pragma mapbox: initialize mediump vec4 pattern_from\\\\n#pragma mapbox: initialize mediump vec4 pattern_to\\\\nvec2 pattern_tl_a=pattern_from.xy;vec2 pattern_br_a=pattern_from.zw;vec2 pattern_tl_b=pattern_to.xy;vec2 pattern_br_b=pattern_to.zw;vec2 imagecoord=mod(v_pos_a,1.0);vec2 pos=mix(pattern_tl_a/u_texsize,pattern_br_a/u_texsize,imagecoord);vec4 color1=texture2D(u_image,pos);vec2 imagecoord_b=mod(v_pos_b,1.0);vec2 pos2=mix(pattern_tl_b/u_texsize,pattern_br_b/u_texsize,imagecoord_b);vec4 color2=texture2D(u_image,pos2);float dist=length(v_pos-gl_FragCoord.xy);float alpha=1.0-smoothstep(0.0,1.0,dist);gl_FragColor=mix(color1,color2,u_fade)*alpha*opacity;\\\\n#ifdef OVERDRAW_INSPECTOR\\\\ngl_FragColor=vec4(1.0);\\\\n#endif\\\\n}\\\",\\\"uniform mat4 u_matrix;uniform vec2 u_world;uniform vec2 u_pixel_coord_upper;uniform vec2 u_pixel_coord_lower;uniform vec3 u_scale;attribute vec2 a_pos;varying vec2 v_pos_a;varying vec2 v_pos_b;varying vec2 v_pos;\\\\n#pragma mapbox: define lowp float opacity\\\\n#pragma mapbox: define lowp vec4 pattern_from\\\\n#pragma mapbox: define lowp vec4 pattern_to\\\\n#pragma mapbox: define lowp float pixel_ratio_from\\\\n#pragma mapbox: define lowp float pixel_ratio_to\\\\nvoid main() {\\\\n#pragma mapbox: initialize lowp float opacity\\\\n#pragma mapbox: initialize mediump vec4 pattern_from\\\\n#pragma mapbox: initialize mediump vec4 pattern_to\\\\n#pragma mapbox: initialize lowp float pixel_ratio_from\\\\n#pragma mapbox: initialize lowp float pixel_ratio_to\\\\nvec2 pattern_tl_a=pattern_from.xy;vec2 pattern_br_a=pattern_from.zw;vec2 pattern_tl_b=pattern_to.xy;vec2 pattern_br_b=pattern_to.zw;float tileRatio=u_scale.x;float fromScale=u_scale.y;float toScale=u_scale.z;gl_Position=u_matrix*vec4(a_pos,0,1);vec2 display_size_a=(pattern_br_a-pattern_tl_a)/pixel_ratio_from;vec2 display_size_b=(pattern_br_b-pattern_tl_b)/pixel_ratio_to;v_pos_a=get_pattern_pos(u_pixel_coord_upper,u_pixel_coord_lower,fromScale*display_size_a,tileRatio,a_pos);v_pos_b=get_pattern_pos(u_pixel_coord_upper,u_pixel_coord_lower,toScale*display_size_b,tileRatio,a_pos);v_pos=(gl_Position.xy/gl_Position.w+1.0)/2.0*u_world;}\\\"),lr=_r(\\\"uniform vec2 u_texsize;uniform float u_fade;uniform sampler2D u_image;varying vec2 v_pos_a;varying vec2 v_pos_b;\\\\n#pragma mapbox: define lowp float opacity\\\\n#pragma mapbox: define lowp vec4 pattern_from\\\\n#pragma mapbox: define lowp vec4 pattern_to\\\\nvoid main() {\\\\n#pragma mapbox: initialize lowp float opacity\\\\n#pragma mapbox: initialize mediump vec4 pattern_from\\\\n#pragma mapbox: initialize mediump vec4 pattern_to\\\\nvec2 pattern_tl_a=pattern_from.xy;vec2 pattern_br_a=pattern_from.zw;vec2 pattern_tl_b=pattern_to.xy;vec2 pattern_br_b=pattern_to.zw;vec2 imagecoord=mod(v_pos_a,1.0);vec2 pos=mix(pattern_tl_a/u_texsize,pattern_br_a/u_texsize,imagecoord);vec4 color1=texture2D(u_image,pos);vec2 imagecoord_b=mod(v_pos_b,1.0);vec2 pos2=mix(pattern_tl_b/u_texsize,pattern_br_b/u_texsize,imagecoord_b);vec4 color2=texture2D(u_image,pos2);gl_FragColor=mix(color1,color2,u_fade)*opacity;\\\\n#ifdef OVERDRAW_INSPECTOR\\\\ngl_FragColor=vec4(1.0);\\\\n#endif\\\\n}\\\",\\\"uniform mat4 u_matrix;uniform vec2 u_pixel_coord_upper;uniform vec2 u_pixel_coord_lower;uniform vec3 u_scale;attribute vec2 a_pos;varying vec2 v_pos_a;varying vec2 v_pos_b;\\\\n#pragma mapbox: define lowp float opacity\\\\n#pragma mapbox: define lowp vec4 pattern_from\\\\n#pragma mapbox: define lowp vec4 pattern_to\\\\n#pragma mapbox: define lowp float pixel_ratio_from\\\\n#pragma mapbox: define lowp float pixel_ratio_to\\\\nvoid main() {\\\\n#pragma mapbox: initialize lowp float opacity\\\\n#pragma mapbox: initialize mediump vec4 pattern_from\\\\n#pragma mapbox: initialize mediump vec4 pattern_to\\\\n#pragma mapbox: initialize lowp float pixel_ratio_from\\\\n#pragma mapbox: initialize lowp float pixel_ratio_to\\\\nvec2 pattern_tl_a=pattern_from.xy;vec2 pattern_br_a=pattern_from.zw;vec2 pattern_tl_b=pattern_to.xy;vec2 pattern_br_b=pattern_to.zw;float tileZoomRatio=u_scale.x;float fromScale=u_scale.y;float toScale=u_scale.z;vec2 display_size_a=(pattern_br_a-pattern_tl_a)/pixel_ratio_from;vec2 display_size_b=(pattern_br_b-pattern_tl_b)/pixel_ratio_to;gl_Position=u_matrix*vec4(a_pos,0,1);v_pos_a=get_pattern_pos(u_pixel_coord_upper,u_pixel_coord_lower,fromScale*display_size_a,tileZoomRatio,a_pos);v_pos_b=get_pattern_pos(u_pixel_coord_upper,u_pixel_coord_lower,toScale*display_size_b,tileZoomRatio,a_pos);}\\\"),ur=_r(\\\"varying vec4 v_color;void main() {gl_FragColor=v_color;\\\\n#ifdef OVERDRAW_INSPECTOR\\\\ngl_FragColor=vec4(1.0);\\\\n#endif\\\\n}\\\",\\\"uniform mat4 u_matrix;uniform vec3 u_lightcolor;uniform lowp vec3 u_lightpos;uniform lowp float u_lightintensity;uniform float u_vertical_gradient;uniform lowp float u_opacity;attribute vec2 a_pos;attribute vec4 a_normal_ed;varying vec4 v_color;\\\\n#pragma mapbox: define highp float base\\\\n#pragma mapbox: define highp float height\\\\n#pragma mapbox: define highp vec4 color\\\\nvoid main() {\\\\n#pragma mapbox: initialize highp float base\\\\n#pragma mapbox: initialize highp float height\\\\n#pragma mapbox: initialize highp vec4 color\\\\nvec3 normal=a_normal_ed.xyz;base=max(0.0,base);height=max(0.0,height);float t=mod(normal.x,2.0);gl_Position=u_matrix*vec4(a_pos,t > 0.0 ? height : base,1);float colorvalue=color.r*0.2126+color.g*0.7152+color.b*0.0722;v_color=vec4(0.0,0.0,0.0,1.0);vec4 ambientlight=vec4(0.03,0.03,0.03,1.0);color+=ambientlight;float directional=clamp(dot(normal/16384.0,u_lightpos),0.0,1.0);directional=mix((1.0-u_lightintensity),max((1.0-colorvalue+u_lightintensity),1.0),directional);if (normal.y !=0.0) {directional*=((1.0-u_vertical_gradient)+(u_vertical_gradient*clamp((t+base)*pow(height/150.0,0.5),mix(0.7,0.98,1.0-u_lightintensity),1.0)));}v_color.r+=clamp(color.r*directional*u_lightcolor.r,mix(0.0,0.3,1.0-u_lightcolor.r),1.0);v_color.g+=clamp(color.g*directional*u_lightcolor.g,mix(0.0,0.3,1.0-u_lightcolor.g),1.0);v_color.b+=clamp(color.b*directional*u_lightcolor.b,mix(0.0,0.3,1.0-u_lightcolor.b),1.0);v_color*=u_opacity;}\\\"),cr=_r(\\\"uniform vec2 u_texsize;uniform float u_fade;uniform sampler2D u_image;varying vec2 v_pos_a;varying vec2 v_pos_b;varying vec4 v_lighting;\\\\n#pragma mapbox: define lowp float base\\\\n#pragma mapbox: define lowp float height\\\\n#pragma mapbox: define lowp vec4 pattern_from\\\\n#pragma mapbox: define lowp vec4 pattern_to\\\\n#pragma mapbox: define lowp float pixel_ratio_from\\\\n#pragma mapbox: define lowp float pixel_ratio_to\\\\nvoid main() {\\\\n#pragma mapbox: initialize lowp float base\\\\n#pragma mapbox: initialize lowp float height\\\\n#pragma mapbox: initialize mediump vec4 pattern_from\\\\n#pragma mapbox: initialize mediump vec4 pattern_to\\\\n#pragma mapbox: initialize lowp float pixel_ratio_from\\\\n#pragma mapbox: initialize lowp float pixel_ratio_to\\\\nvec2 pattern_tl_a=pattern_from.xy;vec2 pattern_br_a=pattern_from.zw;vec2 pattern_tl_b=pattern_to.xy;vec2 pattern_br_b=pattern_to.zw;vec2 imagecoord=mod(v_pos_a,1.0);vec2 pos=mix(pattern_tl_a/u_texsize,pattern_br_a/u_texsize,imagecoord);vec4 color1=texture2D(u_image,pos);vec2 imagecoord_b=mod(v_pos_b,1.0);vec2 pos2=mix(pattern_tl_b/u_texsize,pattern_br_b/u_texsize,imagecoord_b);vec4 color2=texture2D(u_image,pos2);vec4 mixedColor=mix(color1,color2,u_fade);gl_FragColor=mixedColor*v_lighting;\\\\n#ifdef OVERDRAW_INSPECTOR\\\\ngl_FragColor=vec4(1.0);\\\\n#endif\\\\n}\\\",\\\"uniform mat4 u_matrix;uniform vec2 u_pixel_coord_upper;uniform vec2 u_pixel_coord_lower;uniform float u_height_factor;uniform vec3 u_scale;uniform float u_vertical_gradient;uniform lowp float u_opacity;uniform vec3 u_lightcolor;uniform lowp vec3 u_lightpos;uniform lowp float u_lightintensity;attribute vec2 a_pos;attribute vec4 a_normal_ed;varying vec2 v_pos_a;varying vec2 v_pos_b;varying vec4 v_lighting;\\\\n#pragma mapbox: define lowp float base\\\\n#pragma mapbox: define lowp float height\\\\n#pragma mapbox: define lowp vec4 pattern_from\\\\n#pragma mapbox: define lowp vec4 pattern_to\\\\n#pragma mapbox: define lowp float pixel_ratio_from\\\\n#pragma mapbox: define lowp float pixel_ratio_to\\\\nvoid main() {\\\\n#pragma mapbox: initialize lowp float base\\\\n#pragma mapbox: initialize lowp float height\\\\n#pragma mapbox: initialize mediump vec4 pattern_from\\\\n#pragma mapbox: initialize mediump vec4 pattern_to\\\\n#pragma mapbox: initialize lowp float pixel_ratio_from\\\\n#pragma mapbox: initialize lowp float pixel_ratio_to\\\\nvec2 pattern_tl_a=pattern_from.xy;vec2 pattern_br_a=pattern_from.zw;vec2 pattern_tl_b=pattern_to.xy;vec2 pattern_br_b=pattern_to.zw;float tileRatio=u_scale.x;float fromScale=u_scale.y;float toScale=u_scale.z;vec3 normal=a_normal_ed.xyz;float edgedistance=a_normal_ed.w;vec2 display_size_a=(pattern_br_a-pattern_tl_a)/pixel_ratio_from;vec2 display_size_b=(pattern_br_b-pattern_tl_b)/pixel_ratio_to;base=max(0.0,base);height=max(0.0,height);float t=mod(normal.x,2.0);float z=t > 0.0 ? height : base;gl_Position=u_matrix*vec4(a_pos,z,1);vec2 pos=normal.x==1.0 && normal.y==0.0 && normal.z==16384.0\\\\n? a_pos\\\\n: vec2(edgedistance,z*u_height_factor);v_pos_a=get_pattern_pos(u_pixel_coord_upper,u_pixel_coord_lower,fromScale*display_size_a,tileRatio,pos);v_pos_b=get_pattern_pos(u_pixel_coord_upper,u_pixel_coord_lower,toScale*display_size_b,tileRatio,pos);v_lighting=vec4(0.0,0.0,0.0,1.0);float directional=clamp(dot(normal/16383.0,u_lightpos),0.0,1.0);directional=mix((1.0-u_lightintensity),max((0.5+u_lightintensity),1.0),directional);if (normal.y !=0.0) {directional*=((1.0-u_vertical_gradient)+(u_vertical_gradient*clamp((t+base)*pow(height/150.0,0.5),mix(0.7,0.98,1.0-u_lightintensity),1.0)));}v_lighting.rgb+=clamp(directional*u_lightcolor,mix(vec3(0.0),vec3(0.3),1.0-u_lightcolor),vec3(1.0));v_lighting*=u_opacity;}\\\"),fr=_r(\\\"#ifdef GL_ES\\\\nprecision highp float;\\\\n#endif\\\\nuniform sampler2D u_image;varying vec2 v_pos;uniform vec2 u_dimension;uniform float u_zoom;uniform float u_maxzoom;uniform vec4 u_unpack;float getElevation(vec2 coord,float bias) {vec4 data=texture2D(u_image,coord)*255.0;data.a=-1.0;return dot(data,u_unpack)/4.0;}void main() {vec2 epsilon=1.0/u_dimension;float a=getElevation(v_pos+vec2(-epsilon.x,-epsilon.y),0.0);float b=getElevation(v_pos+vec2(0,-epsilon.y),0.0);float c=getElevation(v_pos+vec2(epsilon.x,-epsilon.y),0.0);float d=getElevation(v_pos+vec2(-epsilon.x,0),0.0);float e=getElevation(v_pos,0.0);float f=getElevation(v_pos+vec2(epsilon.x,0),0.0);float g=getElevation(v_pos+vec2(-epsilon.x,epsilon.y),0.0);float h=getElevation(v_pos+vec2(0,epsilon.y),0.0);float i=getElevation(v_pos+vec2(epsilon.x,epsilon.y),0.0);float exaggeration=u_zoom < 2.0 ? 0.4 : u_zoom < 4.5 ? 0.35 : 0.3;vec2 deriv=vec2((c+f+f+i)-(a+d+d+g),(g+h+h+i)-(a+b+b+c))/ pow(2.0,(u_zoom-u_maxzoom)*exaggeration+19.2562-u_zoom);gl_FragColor=clamp(vec4(deriv.x/2.0+0.5,deriv.y/2.0+0.5,1.0,1.0),0.0,1.0);\\\\n#ifdef OVERDRAW_INSPECTOR\\\\ngl_FragColor=vec4(1.0);\\\\n#endif\\\\n}\\\",\\\"uniform mat4 u_matrix;uniform vec2 u_dimension;attribute vec2 a_pos;attribute vec2 a_texture_pos;varying vec2 v_pos;void main() {gl_Position=u_matrix*vec4(a_pos,0,1);highp vec2 epsilon=1.0/u_dimension;float scale=(u_dimension.x-2.0)/u_dimension.x;v_pos=(a_texture_pos/8192.0)*scale+epsilon;}\\\"),hr=_r(\\\"uniform sampler2D u_image;varying vec2 v_pos;uniform vec2 u_latrange;uniform vec2 u_light;uniform vec4 u_shadow;uniform vec4 u_highlight;uniform vec4 u_accent;\\\\n#define PI 3.141592653589793\\\\nvoid main() {vec4 pixel=texture2D(u_image,v_pos);vec2 deriv=((pixel.rg*2.0)-1.0);float scaleFactor=cos(radians((u_latrange[0]-u_latrange[1])*(1.0-v_pos.y)+u_latrange[1]));float slope=atan(1.25*length(deriv)/scaleFactor);float aspect=deriv.x !=0.0 ? atan(deriv.y,-deriv.x) : PI/2.0*(deriv.y > 0.0 ? 1.0 :-1.0);float intensity=u_light.x;float azimuth=u_light.y+PI;float base=1.875-intensity*1.75;float maxValue=0.5*PI;float scaledSlope=intensity !=0.5 ? ((pow(base,slope)-1.0)/(pow(base,maxValue)-1.0))*maxValue : slope;float accent=cos(scaledSlope);vec4 accent_color=(1.0-accent)*u_accent*clamp(intensity*2.0,0.0,1.0);float shade=abs(mod((aspect+azimuth)/PI+0.5,2.0)-1.0);vec4 shade_color=mix(u_shadow,u_highlight,shade)*sin(scaledSlope)*clamp(intensity*2.0,0.0,1.0);gl_FragColor=accent_color*(1.0-shade_color.a)+shade_color;\\\\n#ifdef OVERDRAW_INSPECTOR\\\\ngl_FragColor=vec4(1.0);\\\\n#endif\\\\n}\\\",\\\"uniform mat4 u_matrix;attribute vec2 a_pos;attribute vec2 a_texture_pos;varying vec2 v_pos;void main() {gl_Position=u_matrix*vec4(a_pos,0,1);v_pos=a_texture_pos/8192.0;}\\\"),pr=_r(\\\"uniform lowp float u_device_pixel_ratio;varying vec2 v_width2;varying vec2 v_normal;varying float v_gamma_scale;\\\\n#pragma mapbox: define highp vec4 color\\\\n#pragma mapbox: define lowp float blur\\\\n#pragma mapbox: define lowp float opacity\\\\nvoid main() {\\\\n#pragma mapbox: initialize highp vec4 color\\\\n#pragma mapbox: initialize lowp float blur\\\\n#pragma mapbox: initialize lowp float opacity\\\\nfloat dist=length(v_normal)*v_width2.s;float blur2=(blur+1.0/u_device_pixel_ratio)*v_gamma_scale;float alpha=clamp(min(dist-(v_width2.t-blur2),v_width2.s-dist)/blur2,0.0,1.0);gl_FragColor=color*(alpha*opacity);\\\\n#ifdef OVERDRAW_INSPECTOR\\\\ngl_FragColor=vec4(1.0);\\\\n#endif\\\\n}\\\",\\\"\\\\n#define scale 0.015873016\\\\nattribute vec2 a_pos_normal;attribute vec4 a_data;uniform mat4 u_matrix;uniform mediump float u_ratio;uniform vec2 u_units_to_pixels;uniform lowp float u_device_pixel_ratio;varying vec2 v_normal;varying vec2 v_width2;varying float v_gamma_scale;varying highp float v_linesofar;\\\\n#pragma mapbox: define highp vec4 color\\\\n#pragma mapbox: define lowp float blur\\\\n#pragma mapbox: define lowp float opacity\\\\n#pragma mapbox: define mediump float gapwidth\\\\n#pragma mapbox: define lowp float offset\\\\n#pragma mapbox: define mediump float width\\\\nvoid main() {\\\\n#pragma mapbox: initialize highp vec4 color\\\\n#pragma mapbox: initialize lowp float blur\\\\n#pragma mapbox: initialize lowp float opacity\\\\n#pragma mapbox: initialize mediump float gapwidth\\\\n#pragma mapbox: initialize lowp float offset\\\\n#pragma mapbox: initialize mediump float width\\\\nfloat ANTIALIASING=1.0/u_device_pixel_ratio/2.0;vec2 a_extrude=a_data.xy-128.0;float a_direction=mod(a_data.z,4.0)-1.0;v_linesofar=(floor(a_data.z/4.0)+a_data.w*64.0)*2.0;vec2 pos=floor(a_pos_normal*0.5);mediump vec2 normal=a_pos_normal-2.0*pos;normal.y=normal.y*2.0-1.0;v_normal=normal;gapwidth=gapwidth/2.0;float halfwidth=width/2.0;offset=-1.0*offset;float inset=gapwidth+(gapwidth > 0.0 ? ANTIALIASING : 0.0);float outset=gapwidth+halfwidth*(gapwidth > 0.0 ? 2.0 : 1.0)+(halfwidth==0.0 ? 0.0 : ANTIALIASING);mediump vec2 dist=outset*a_extrude*scale;mediump float u=0.5*a_direction;mediump float t=1.0-abs(u);mediump vec2 offset2=offset*a_extrude*scale*normal.y*mat2(t,-u,u,t);vec4 projected_extrude=u_matrix*vec4(dist/u_ratio,0.0,0.0);gl_Position=u_matrix*vec4(pos+offset2/u_ratio,0.0,1.0)+projected_extrude;float extrude_length_without_perspective=length(dist);float extrude_length_with_perspective=length(projected_extrude.xy/gl_Position.w*u_units_to_pixels);v_gamma_scale=extrude_length_without_perspective/extrude_length_with_perspective;v_width2=vec2(outset,inset);}\\\"),dr=_r(\\\"uniform lowp float u_device_pixel_ratio;uniform sampler2D u_image;varying vec2 v_width2;varying vec2 v_normal;varying float v_gamma_scale;varying highp float v_lineprogress;\\\\n#pragma mapbox: define lowp float blur\\\\n#pragma mapbox: define lowp float opacity\\\\nvoid main() {\\\\n#pragma mapbox: initialize lowp float blur\\\\n#pragma mapbox: initialize lowp float opacity\\\\nfloat dist=length(v_normal)*v_width2.s;float blur2=(blur+1.0/u_device_pixel_ratio)*v_gamma_scale;float alpha=clamp(min(dist-(v_width2.t-blur2),v_width2.s-dist)/blur2,0.0,1.0);vec4 color=texture2D(u_image,vec2(v_lineprogress,0.5));gl_FragColor=color*(alpha*opacity);\\\\n#ifdef OVERDRAW_INSPECTOR\\\\ngl_FragColor=vec4(1.0);\\\\n#endif\\\\n}\\\",\\\"\\\\n#define MAX_LINE_DISTANCE 32767.0\\\\n#define scale 0.015873016\\\\nattribute vec2 a_pos_normal;attribute vec4 a_data;uniform mat4 u_matrix;uniform mediump float u_ratio;uniform lowp float u_device_pixel_ratio;uniform vec2 u_units_to_pixels;varying vec2 v_normal;varying vec2 v_width2;varying float v_gamma_scale;varying highp float v_lineprogress;\\\\n#pragma mapbox: define lowp float blur\\\\n#pragma mapbox: define lowp float opacity\\\\n#pragma mapbox: define mediump float gapwidth\\\\n#pragma mapbox: define lowp float offset\\\\n#pragma mapbox: define mediump float width\\\\nvoid main() {\\\\n#pragma mapbox: initialize lowp float blur\\\\n#pragma mapbox: initialize lowp float opacity\\\\n#pragma mapbox: initialize mediump float gapwidth\\\\n#pragma mapbox: initialize lowp float offset\\\\n#pragma mapbox: initialize mediump float width\\\\nfloat ANTIALIASING=1.0/u_device_pixel_ratio/2.0;vec2 a_extrude=a_data.xy-128.0;float a_direction=mod(a_data.z,4.0)-1.0;v_lineprogress=(floor(a_data.z/4.0)+a_data.w*64.0)*2.0/MAX_LINE_DISTANCE;vec2 pos=floor(a_pos_normal*0.5);mediump vec2 normal=a_pos_normal-2.0*pos;normal.y=normal.y*2.0-1.0;v_normal=normal;gapwidth=gapwidth/2.0;float halfwidth=width/2.0;offset=-1.0*offset;float inset=gapwidth+(gapwidth > 0.0 ? ANTIALIASING : 0.0);float outset=gapwidth+halfwidth*(gapwidth > 0.0 ? 2.0 : 1.0)+(halfwidth==0.0 ? 0.0 : ANTIALIASING);mediump vec2 dist=outset*a_extrude*scale;mediump float u=0.5*a_direction;mediump float t=1.0-abs(u);mediump vec2 offset2=offset*a_extrude*scale*normal.y*mat2(t,-u,u,t);vec4 projected_extrude=u_matrix*vec4(dist/u_ratio,0.0,0.0);gl_Position=u_matrix*vec4(pos+offset2/u_ratio,0.0,1.0)+projected_extrude;float extrude_length_without_perspective=length(dist);float extrude_length_with_perspective=length(projected_extrude.xy/gl_Position.w*u_units_to_pixels);v_gamma_scale=extrude_length_without_perspective/extrude_length_with_perspective;v_width2=vec2(outset,inset);}\\\"),vr=_r(\\\"uniform lowp float u_device_pixel_ratio;uniform vec2 u_texsize;uniform float u_fade;uniform mediump vec3 u_scale;uniform sampler2D u_image;varying vec2 v_normal;varying vec2 v_width2;varying float v_linesofar;varying float v_gamma_scale;varying float v_width;\\\\n#pragma mapbox: define lowp vec4 pattern_from\\\\n#pragma mapbox: define lowp vec4 pattern_to\\\\n#pragma mapbox: define lowp float pixel_ratio_from\\\\n#pragma mapbox: define lowp float pixel_ratio_to\\\\n#pragma mapbox: define lowp float blur\\\\n#pragma mapbox: define lowp float opacity\\\\nvoid main() {\\\\n#pragma mapbox: initialize mediump vec4 pattern_from\\\\n#pragma mapbox: initialize mediump vec4 pattern_to\\\\n#pragma mapbox: initialize lowp float pixel_ratio_from\\\\n#pragma mapbox: initialize lowp float pixel_ratio_to\\\\n#pragma mapbox: initialize lowp float blur\\\\n#pragma mapbox: initialize lowp float opacity\\\\nvec2 pattern_tl_a=pattern_from.xy;vec2 pattern_br_a=pattern_from.zw;vec2 pattern_tl_b=pattern_to.xy;vec2 pattern_br_b=pattern_to.zw;float tileZoomRatio=u_scale.x;float fromScale=u_scale.y;float toScale=u_scale.z;vec2 display_size_a=(pattern_br_a-pattern_tl_a)/pixel_ratio_from;vec2 display_size_b=(pattern_br_b-pattern_tl_b)/pixel_ratio_to;vec2 pattern_size_a=vec2(display_size_a.x*fromScale/tileZoomRatio,display_size_a.y);vec2 pattern_size_b=vec2(display_size_b.x*toScale/tileZoomRatio,display_size_b.y);float aspect_a=display_size_a.y/v_width;float aspect_b=display_size_b.y/v_width;float dist=length(v_normal)*v_width2.s;float blur2=(blur+1.0/u_device_pixel_ratio)*v_gamma_scale;float alpha=clamp(min(dist-(v_width2.t-blur2),v_width2.s-dist)/blur2,0.0,1.0);float x_a=mod(v_linesofar/pattern_size_a.x*aspect_a,1.0);float x_b=mod(v_linesofar/pattern_size_b.x*aspect_b,1.0);float y=0.5*v_normal.y+0.5;vec2 texel_size=1.0/u_texsize;vec2 pos_a=mix(pattern_tl_a*texel_size-texel_size,pattern_br_a*texel_size+texel_size,vec2(x_a,y));vec2 pos_b=mix(pattern_tl_b*texel_size-texel_size,pattern_br_b*texel_size+texel_size,vec2(x_b,y));vec4 color=mix(texture2D(u_image,pos_a),texture2D(u_image,pos_b),u_fade);gl_FragColor=color*alpha*opacity;\\\\n#ifdef OVERDRAW_INSPECTOR\\\\ngl_FragColor=vec4(1.0);\\\\n#endif\\\\n}\\\",\\\"\\\\n#define scale 0.015873016\\\\n#define LINE_DISTANCE_SCALE 2.0\\\\nattribute vec2 a_pos_normal;attribute vec4 a_data;uniform mat4 u_matrix;uniform vec2 u_units_to_pixels;uniform mediump float u_ratio;uniform lowp float u_device_pixel_ratio;varying vec2 v_normal;varying vec2 v_width2;varying float v_linesofar;varying float v_gamma_scale;varying float v_width;\\\\n#pragma mapbox: define lowp float blur\\\\n#pragma mapbox: define lowp float opacity\\\\n#pragma mapbox: define lowp float offset\\\\n#pragma mapbox: define mediump float gapwidth\\\\n#pragma mapbox: define mediump float width\\\\n#pragma mapbox: define lowp float floorwidth\\\\n#pragma mapbox: define lowp vec4 pattern_from\\\\n#pragma mapbox: define lowp vec4 pattern_to\\\\n#pragma mapbox: define lowp float pixel_ratio_from\\\\n#pragma mapbox: define lowp float pixel_ratio_to\\\\nvoid main() {\\\\n#pragma mapbox: initialize lowp float blur\\\\n#pragma mapbox: initialize lowp float opacity\\\\n#pragma mapbox: initialize lowp float offset\\\\n#pragma mapbox: initialize mediump float gapwidth\\\\n#pragma mapbox: initialize mediump float width\\\\n#pragma mapbox: initialize lowp float floorwidth\\\\n#pragma mapbox: initialize mediump vec4 pattern_from\\\\n#pragma mapbox: initialize mediump vec4 pattern_to\\\\n#pragma mapbox: initialize lowp float pixel_ratio_from\\\\n#pragma mapbox: initialize lowp float pixel_ratio_to\\\\nfloat ANTIALIASING=1.0/u_device_pixel_ratio/2.0;vec2 a_extrude=a_data.xy-128.0;float a_direction=mod(a_data.z,4.0)-1.0;float a_linesofar=(floor(a_data.z/4.0)+a_data.w*64.0)*LINE_DISTANCE_SCALE;vec2 pos=floor(a_pos_normal*0.5);mediump vec2 normal=a_pos_normal-2.0*pos;normal.y=normal.y*2.0-1.0;v_normal=normal;gapwidth=gapwidth/2.0;float halfwidth=width/2.0;offset=-1.0*offset;float inset=gapwidth+(gapwidth > 0.0 ? ANTIALIASING : 0.0);float outset=gapwidth+halfwidth*(gapwidth > 0.0 ? 2.0 : 1.0)+(halfwidth==0.0 ? 0.0 : ANTIALIASING);mediump vec2 dist=outset*a_extrude*scale;mediump float u=0.5*a_direction;mediump float t=1.0-abs(u);mediump vec2 offset2=offset*a_extrude*scale*normal.y*mat2(t,-u,u,t);vec4 projected_extrude=u_matrix*vec4(dist/u_ratio,0.0,0.0);gl_Position=u_matrix*vec4(pos+offset2/u_ratio,0.0,1.0)+projected_extrude;float extrude_length_without_perspective=length(dist);float extrude_length_with_perspective=length(projected_extrude.xy/gl_Position.w*u_units_to_pixels);v_gamma_scale=extrude_length_without_perspective/extrude_length_with_perspective;v_linesofar=a_linesofar;v_width2=vec2(outset,inset);v_width=floorwidth;}\\\"),gr=_r(\\\"uniform lowp float u_device_pixel_ratio;uniform sampler2D u_image;uniform float u_sdfgamma;uniform float u_mix;varying vec2 v_normal;varying vec2 v_width2;varying vec2 v_tex_a;varying vec2 v_tex_b;varying float v_gamma_scale;\\\\n#pragma mapbox: define highp vec4 color\\\\n#pragma mapbox: define lowp float blur\\\\n#pragma mapbox: define lowp float opacity\\\\n#pragma mapbox: define mediump float width\\\\n#pragma mapbox: define lowp float floorwidth\\\\nvoid main() {\\\\n#pragma mapbox: initialize highp vec4 color\\\\n#pragma mapbox: initialize lowp float blur\\\\n#pragma mapbox: initialize lowp float opacity\\\\n#pragma mapbox: initialize mediump float width\\\\n#pragma mapbox: initialize lowp float floorwidth\\\\nfloat dist=length(v_normal)*v_width2.s;float blur2=(blur+1.0/u_device_pixel_ratio)*v_gamma_scale;float alpha=clamp(min(dist-(v_width2.t-blur2),v_width2.s-dist)/blur2,0.0,1.0);float sdfdist_a=texture2D(u_image,v_tex_a).a;float sdfdist_b=texture2D(u_image,v_tex_b).a;float sdfdist=mix(sdfdist_a,sdfdist_b,u_mix);alpha*=smoothstep(0.5-u_sdfgamma/floorwidth,0.5+u_sdfgamma/floorwidth,sdfdist);gl_FragColor=color*(alpha*opacity);\\\\n#ifdef OVERDRAW_INSPECTOR\\\\ngl_FragColor=vec4(1.0);\\\\n#endif\\\\n}\\\",\\\"\\\\n#define scale 0.015873016\\\\n#define LINE_DISTANCE_SCALE 2.0\\\\nattribute vec2 a_pos_normal;attribute vec4 a_data;uniform mat4 u_matrix;uniform mediump float u_ratio;uniform lowp float u_device_pixel_ratio;uniform vec2 u_patternscale_a;uniform float u_tex_y_a;uniform vec2 u_patternscale_b;uniform float u_tex_y_b;uniform vec2 u_units_to_pixels;varying vec2 v_normal;varying vec2 v_width2;varying vec2 v_tex_a;varying vec2 v_tex_b;varying float v_gamma_scale;\\\\n#pragma mapbox: define highp vec4 color\\\\n#pragma mapbox: define lowp float blur\\\\n#pragma mapbox: define lowp float opacity\\\\n#pragma mapbox: define mediump float gapwidth\\\\n#pragma mapbox: define lowp float offset\\\\n#pragma mapbox: define mediump float width\\\\n#pragma mapbox: define lowp float floorwidth\\\\nvoid main() {\\\\n#pragma mapbox: initialize highp vec4 color\\\\n#pragma mapbox: initialize lowp float blur\\\\n#pragma mapbox: initialize lowp float opacity\\\\n#pragma mapbox: initialize mediump float gapwidth\\\\n#pragma mapbox: initialize lowp float offset\\\\n#pragma mapbox: initialize mediump float width\\\\n#pragma mapbox: initialize lowp float floorwidth\\\\nfloat ANTIALIASING=1.0/u_device_pixel_ratio/2.0;vec2 a_extrude=a_data.xy-128.0;float a_direction=mod(a_data.z,4.0)-1.0;float a_linesofar=(floor(a_data.z/4.0)+a_data.w*64.0)*LINE_DISTANCE_SCALE;vec2 pos=floor(a_pos_normal*0.5);mediump vec2 normal=a_pos_normal-2.0*pos;normal.y=normal.y*2.0-1.0;v_normal=normal;gapwidth=gapwidth/2.0;float halfwidth=width/2.0;offset=-1.0*offset;float inset=gapwidth+(gapwidth > 0.0 ? ANTIALIASING : 0.0);float outset=gapwidth+halfwidth*(gapwidth > 0.0 ? 2.0 : 1.0)+(halfwidth==0.0 ? 0.0 : ANTIALIASING);mediump vec2 dist=outset*a_extrude*scale;mediump float u=0.5*a_direction;mediump float t=1.0-abs(u);mediump vec2 offset2=offset*a_extrude*scale*normal.y*mat2(t,-u,u,t);vec4 projected_extrude=u_matrix*vec4(dist/u_ratio,0.0,0.0);gl_Position=u_matrix*vec4(pos+offset2/u_ratio,0.0,1.0)+projected_extrude;float extrude_length_without_perspective=length(dist);float extrude_length_with_perspective=length(projected_extrude.xy/gl_Position.w*u_units_to_pixels);v_gamma_scale=extrude_length_without_perspective/extrude_length_with_perspective;v_tex_a=vec2(a_linesofar*u_patternscale_a.x/floorwidth,normal.y*u_patternscale_a.y+u_tex_y_a);v_tex_b=vec2(a_linesofar*u_patternscale_b.x/floorwidth,normal.y*u_patternscale_b.y+u_tex_y_b);v_width2=vec2(outset,inset);}\\\"),yr=_r(\\\"uniform float u_fade_t;uniform float u_opacity;uniform sampler2D u_image0;uniform sampler2D u_image1;varying vec2 v_pos0;varying vec2 v_pos1;uniform float u_brightness_low;uniform float u_brightness_high;uniform float u_saturation_factor;uniform float u_contrast_factor;uniform vec3 u_spin_weights;void main() {vec4 color0=texture2D(u_image0,v_pos0);vec4 color1=texture2D(u_image1,v_pos1);if (color0.a > 0.0) {color0.rgb=color0.rgb/color0.a;}if (color1.a > 0.0) {color1.rgb=color1.rgb/color1.a;}vec4 color=mix(color0,color1,u_fade_t);color.a*=u_opacity;vec3 rgb=color.rgb;rgb=vec3(dot(rgb,u_spin_weights.xyz),dot(rgb,u_spin_weights.zxy),dot(rgb,u_spin_weights.yzx));float average=(color.r+color.g+color.b)/3.0;rgb+=(average-rgb)*u_saturation_factor;rgb=(rgb-0.5)*u_contrast_factor+0.5;vec3 u_high_vec=vec3(u_brightness_low,u_brightness_low,u_brightness_low);vec3 u_low_vec=vec3(u_brightness_high,u_brightness_high,u_brightness_high);gl_FragColor=vec4(mix(u_high_vec,u_low_vec,rgb)*color.a,color.a);\\\\n#ifdef OVERDRAW_INSPECTOR\\\\ngl_FragColor=vec4(1.0);\\\\n#endif\\\\n}\\\",\\\"uniform mat4 u_matrix;uniform vec2 u_tl_parent;uniform float u_scale_parent;uniform float u_buffer_scale;attribute vec2 a_pos;attribute vec2 a_texture_pos;varying vec2 v_pos0;varying vec2 v_pos1;void main() {gl_Position=u_matrix*vec4(a_pos,0,1);v_pos0=(((a_texture_pos/8192.0)-0.5)/u_buffer_scale )+0.5;v_pos1=(v_pos0*u_scale_parent)+u_tl_parent;}\\\"),mr=_r(\\\"uniform sampler2D u_texture;varying vec2 v_tex;varying float v_fade_opacity;\\\\n#pragma mapbox: define lowp float opacity\\\\nvoid main() {\\\\n#pragma mapbox: initialize lowp float opacity\\\\nlowp float alpha=opacity*v_fade_opacity;gl_FragColor=texture2D(u_texture,v_tex)*alpha;\\\\n#ifdef OVERDRAW_INSPECTOR\\\\ngl_FragColor=vec4(1.0);\\\\n#endif\\\\n}\\\",\\\"const float PI=3.141592653589793;attribute vec4 a_pos_offset;attribute vec4 a_data;attribute vec4 a_pixeloffset;attribute vec3 a_projected_pos;attribute float a_fade_opacity;uniform bool u_is_size_zoom_constant;uniform bool u_is_size_feature_constant;uniform highp float u_size_t;uniform highp float u_size;uniform highp float u_camera_to_center_distance;uniform highp float u_pitch;uniform bool u_rotate_symbol;uniform highp float u_aspect_ratio;uniform float u_fade_change;uniform mat4 u_matrix;uniform mat4 u_label_plane_matrix;uniform mat4 u_coord_matrix;uniform bool u_is_text;uniform bool u_pitch_with_map;uniform vec2 u_texsize;varying vec2 v_tex;varying float v_fade_opacity;\\\\n#pragma mapbox: define lowp float opacity\\\\nvoid main() {\\\\n#pragma mapbox: initialize lowp float opacity\\\\nvec2 a_pos=a_pos_offset.xy;vec2 a_offset=a_pos_offset.zw;vec2 a_tex=a_data.xy;vec2 a_size=a_data.zw;float a_size_min=floor(a_size[0]*0.5);vec2 a_pxoffset=a_pixeloffset.xy;vec2 a_minFontScale=a_pixeloffset.zw/256.0;highp float segment_angle=-a_projected_pos[2];float size;if (!u_is_size_zoom_constant && !u_is_size_feature_constant) {size=mix(a_size_min,a_size[1],u_size_t)/128.0;} else if (u_is_size_zoom_constant && !u_is_size_feature_constant) {size=a_size_min/128.0;} else {size=u_size;}vec4 projectedPoint=u_matrix*vec4(a_pos,0,1);highp float camera_to_anchor_distance=projectedPoint.w;highp float distance_ratio=u_pitch_with_map ?\\\\ncamera_to_anchor_distance/u_camera_to_center_distance :\\\\nu_camera_to_center_distance/camera_to_anchor_distance;highp float perspective_ratio=clamp(0.5+0.5*distance_ratio,0.0,4.0);size*=perspective_ratio;float fontScale=u_is_text ? size/24.0 : size;highp float symbol_rotation=0.0;if (u_rotate_symbol) {vec4 offsetProjectedPoint=u_matrix*vec4(a_pos+vec2(1,0),0,1);vec2 a=projectedPoint.xy/projectedPoint.w;vec2 b=offsetProjectedPoint.xy/offsetProjectedPoint.w;symbol_rotation=atan((b.y-a.y)/u_aspect_ratio,b.x-a.x);}highp float angle_sin=sin(segment_angle+symbol_rotation);highp float angle_cos=cos(segment_angle+symbol_rotation);mat2 rotation_matrix=mat2(angle_cos,-1.0*angle_sin,angle_sin,angle_cos);vec4 projected_pos=u_label_plane_matrix*vec4(a_projected_pos.xy,0.0,1.0);gl_Position=u_coord_matrix*vec4(projected_pos.xy/projected_pos.w+rotation_matrix*(a_offset/32.0*max(a_minFontScale,fontScale)+a_pxoffset/16.0),0.0,1.0);v_tex=a_tex/u_texsize;vec2 fade_opacity=unpack_opacity(a_fade_opacity);float fade_change=fade_opacity[1] > 0.5 ? u_fade_change :-u_fade_change;v_fade_opacity=max(0.0,min(1.0,fade_opacity[0]+fade_change));}\\\"),xr=_r(\\\"#define SDF_PX 8.0\\\\nuniform bool u_is_halo;uniform sampler2D u_texture;uniform highp float u_gamma_scale;uniform lowp float u_device_pixel_ratio;uniform bool u_is_text;varying vec2 v_data0;varying vec3 v_data1;\\\\n#pragma mapbox: define highp vec4 fill_color\\\\n#pragma mapbox: define highp vec4 halo_color\\\\n#pragma mapbox: define lowp float opacity\\\\n#pragma mapbox: define lowp float halo_width\\\\n#pragma mapbox: define lowp float halo_blur\\\\nvoid main() {\\\\n#pragma mapbox: initialize highp vec4 fill_color\\\\n#pragma mapbox: initialize highp vec4 halo_color\\\\n#pragma mapbox: initialize lowp float opacity\\\\n#pragma mapbox: initialize lowp float halo_width\\\\n#pragma mapbox: initialize lowp float halo_blur\\\\nfloat EDGE_GAMMA=0.105/u_device_pixel_ratio;vec2 tex=v_data0.xy;float gamma_scale=v_data1.x;float size=v_data1.y;float fade_opacity=v_data1[2];float fontScale=u_is_text ? size/24.0 : size;lowp vec4 color=fill_color;highp float gamma=EDGE_GAMMA/(fontScale*u_gamma_scale);lowp float buff=(256.0-64.0)/256.0;if (u_is_halo) {color=halo_color;gamma=(halo_blur*1.19/SDF_PX+EDGE_GAMMA)/(fontScale*u_gamma_scale);buff=(6.0-halo_width/fontScale)/SDF_PX;}lowp float dist=texture2D(u_texture,tex).a;highp float gamma_scaled=gamma*gamma_scale;highp float alpha=smoothstep(buff-gamma_scaled,buff+gamma_scaled,dist);gl_FragColor=color*(alpha*opacity*fade_opacity);\\\\n#ifdef OVERDRAW_INSPECTOR\\\\ngl_FragColor=vec4(1.0);\\\\n#endif\\\\n}\\\",\\\"const float PI=3.141592653589793;attribute vec4 a_pos_offset;attribute vec4 a_data;attribute vec4 a_pixeloffset;attribute vec3 a_projected_pos;attribute float a_fade_opacity;uniform bool u_is_size_zoom_constant;uniform bool u_is_size_feature_constant;uniform highp float u_size_t;uniform highp float u_size;uniform mat4 u_matrix;uniform mat4 u_label_plane_matrix;uniform mat4 u_coord_matrix;uniform bool u_is_text;uniform bool u_pitch_with_map;uniform highp float u_pitch;uniform bool u_rotate_symbol;uniform highp float u_aspect_ratio;uniform highp float u_camera_to_center_distance;uniform float u_fade_change;uniform vec2 u_texsize;varying vec2 v_data0;varying vec3 v_data1;\\\\n#pragma mapbox: define highp vec4 fill_color\\\\n#pragma mapbox: define highp vec4 halo_color\\\\n#pragma mapbox: define lowp float opacity\\\\n#pragma mapbox: define lowp float halo_width\\\\n#pragma mapbox: define lowp float halo_blur\\\\nvoid main() {\\\\n#pragma mapbox: initialize highp vec4 fill_color\\\\n#pragma mapbox: initialize highp vec4 halo_color\\\\n#pragma mapbox: initialize lowp float opacity\\\\n#pragma mapbox: initialize lowp float halo_width\\\\n#pragma mapbox: initialize lowp float halo_blur\\\\nvec2 a_pos=a_pos_offset.xy;vec2 a_offset=a_pos_offset.zw;vec2 a_tex=a_data.xy;vec2 a_size=a_data.zw;float a_size_min=floor(a_size[0]*0.5);vec2 a_pxoffset=a_pixeloffset.xy;highp float segment_angle=-a_projected_pos[2];float size;if (!u_is_size_zoom_constant && !u_is_size_feature_constant) {size=mix(a_size_min,a_size[1],u_size_t)/128.0;} else if (u_is_size_zoom_constant && !u_is_size_feature_constant) {size=a_size_min/128.0;} else {size=u_size;}vec4 projectedPoint=u_matrix*vec4(a_pos,0,1);highp float camera_to_anchor_distance=projectedPoint.w;highp float distance_ratio=u_pitch_with_map ?\\\\ncamera_to_anchor_distance/u_camera_to_center_distance :\\\\nu_camera_to_center_distance/camera_to_anchor_distance;highp float perspective_ratio=clamp(0.5+0.5*distance_ratio,0.0,4.0);size*=perspective_ratio;float fontScale=u_is_text ? size/24.0 : size;highp float symbol_rotation=0.0;if (u_rotate_symbol) {vec4 offsetProjectedPoint=u_matrix*vec4(a_pos+vec2(1,0),0,1);vec2 a=projectedPoint.xy/projectedPoint.w;vec2 b=offsetProjectedPoint.xy/offsetProjectedPoint.w;symbol_rotation=atan((b.y-a.y)/u_aspect_ratio,b.x-a.x);}highp float angle_sin=sin(segment_angle+symbol_rotation);highp float angle_cos=cos(segment_angle+symbol_rotation);mat2 rotation_matrix=mat2(angle_cos,-1.0*angle_sin,angle_sin,angle_cos);vec4 projected_pos=u_label_plane_matrix*vec4(a_projected_pos.xy,0.0,1.0);gl_Position=u_coord_matrix*vec4(projected_pos.xy/projected_pos.w+rotation_matrix*(a_offset/32.0*fontScale+a_pxoffset),0.0,1.0);float gamma_scale=gl_Position.w;vec2 fade_opacity=unpack_opacity(a_fade_opacity);float fade_change=fade_opacity[1] > 0.5 ? u_fade_change :-u_fade_change;float interpolated_fade_opacity=max(0.0,min(1.0,fade_opacity[0]+fade_change));v_data0=a_tex/u_texsize;v_data1=vec3(gamma_scale,size,interpolated_fade_opacity);}\\\"),br=_r(\\\"#define SDF_PX 8.0\\\\n#define SDF 1.0\\\\n#define ICON 0.0\\\\nuniform bool u_is_halo;uniform sampler2D u_texture;uniform sampler2D u_texture_icon;uniform highp float u_gamma_scale;uniform lowp float u_device_pixel_ratio;varying vec4 v_data0;varying vec4 v_data1;\\\\n#pragma mapbox: define highp vec4 fill_color\\\\n#pragma mapbox: define highp vec4 halo_color\\\\n#pragma mapbox: define lowp float opacity\\\\n#pragma mapbox: define lowp float halo_width\\\\n#pragma mapbox: define lowp float halo_blur\\\\nvoid main() {\\\\n#pragma mapbox: initialize highp vec4 fill_color\\\\n#pragma mapbox: initialize highp vec4 halo_color\\\\n#pragma mapbox: initialize lowp float opacity\\\\n#pragma mapbox: initialize lowp float halo_width\\\\n#pragma mapbox: initialize lowp float halo_blur\\\\nfloat fade_opacity=v_data1[2];if (v_data1.w==ICON) {vec2 tex_icon=v_data0.zw;lowp float alpha=opacity*fade_opacity;gl_FragColor=texture2D(u_texture_icon,tex_icon)*alpha;\\\\n#ifdef OVERDRAW_INSPECTOR\\\\ngl_FragColor=vec4(1.0);\\\\n#endif\\\\nreturn;}vec2 tex=v_data0.xy;float EDGE_GAMMA=0.105/u_device_pixel_ratio;float gamma_scale=v_data1.x;float size=v_data1.y;float fontScale=size/24.0;lowp vec4 color=fill_color;highp float gamma=EDGE_GAMMA/(fontScale*u_gamma_scale);lowp float buff=(256.0-64.0)/256.0;if (u_is_halo) {color=halo_color;gamma=(halo_blur*1.19/SDF_PX+EDGE_GAMMA)/(fontScale*u_gamma_scale);buff=(6.0-halo_width/fontScale)/SDF_PX;}lowp float dist=texture2D(u_texture,tex).a;highp float gamma_scaled=gamma*gamma_scale;highp float alpha=smoothstep(buff-gamma_scaled,buff+gamma_scaled,dist);gl_FragColor=color*(alpha*opacity*fade_opacity);\\\\n#ifdef OVERDRAW_INSPECTOR\\\\ngl_FragColor=vec4(1.0);\\\\n#endif\\\\n}\\\",\\\"const float PI=3.141592653589793;attribute vec4 a_pos_offset;attribute vec4 a_data;attribute vec3 a_projected_pos;attribute float a_fade_opacity;uniform bool u_is_size_zoom_constant;uniform bool u_is_size_feature_constant;uniform highp float u_size_t;uniform highp float u_size;uniform mat4 u_matrix;uniform mat4 u_label_plane_matrix;uniform mat4 u_coord_matrix;uniform bool u_is_text;uniform bool u_pitch_with_map;uniform highp float u_pitch;uniform bool u_rotate_symbol;uniform highp float u_aspect_ratio;uniform highp float u_camera_to_center_distance;uniform float u_fade_change;uniform vec2 u_texsize;uniform vec2 u_texsize_icon;varying vec4 v_data0;varying vec4 v_data1;\\\\n#pragma mapbox: define highp vec4 fill_color\\\\n#pragma mapbox: define highp vec4 halo_color\\\\n#pragma mapbox: define lowp float opacity\\\\n#pragma mapbox: define lowp float halo_width\\\\n#pragma mapbox: define lowp float halo_blur\\\\nvoid main() {\\\\n#pragma mapbox: initialize highp vec4 fill_color\\\\n#pragma mapbox: initialize highp vec4 halo_color\\\\n#pragma mapbox: initialize lowp float opacity\\\\n#pragma mapbox: initialize lowp float halo_width\\\\n#pragma mapbox: initialize lowp float halo_blur\\\\nvec2 a_pos=a_pos_offset.xy;vec2 a_offset=a_pos_offset.zw;vec2 a_tex=a_data.xy;vec2 a_size=a_data.zw;float a_size_min=floor(a_size[0]*0.5);float is_sdf=a_size[0]-2.0*a_size_min;highp float segment_angle=-a_projected_pos[2];float size;if (!u_is_size_zoom_constant && !u_is_size_feature_constant) {size=mix(a_size_min,a_size[1],u_size_t)/128.0;} else if (u_is_size_zoom_constant && !u_is_size_feature_constant) {size=a_size_min/128.0;} else {size=u_size;}vec4 projectedPoint=u_matrix*vec4(a_pos,0,1);highp float camera_to_anchor_distance=projectedPoint.w;highp float distance_ratio=u_pitch_with_map ?\\\\ncamera_to_anchor_distance/u_camera_to_center_distance :\\\\nu_camera_to_center_distance/camera_to_anchor_distance;highp float perspective_ratio=clamp(0.5+0.5*distance_ratio,0.0,4.0);size*=perspective_ratio;float fontScale=size/24.0;highp float symbol_rotation=0.0;if (u_rotate_symbol) {vec4 offsetProjectedPoint=u_matrix*vec4(a_pos+vec2(1,0),0,1);vec2 a=projectedPoint.xy/projectedPoint.w;vec2 b=offsetProjectedPoint.xy/offsetProjectedPoint.w;symbol_rotation=atan((b.y-a.y)/u_aspect_ratio,b.x-a.x);}highp float angle_sin=sin(segment_angle+symbol_rotation);highp float angle_cos=cos(segment_angle+symbol_rotation);mat2 rotation_matrix=mat2(angle_cos,-1.0*angle_sin,angle_sin,angle_cos);vec4 projected_pos=u_label_plane_matrix*vec4(a_projected_pos.xy,0.0,1.0);gl_Position=u_coord_matrix*vec4(projected_pos.xy/projected_pos.w+rotation_matrix*(a_offset/32.0*fontScale),0.0,1.0);float gamma_scale=gl_Position.w;vec2 fade_opacity=unpack_opacity(a_fade_opacity);float fade_change=fade_opacity[1] > 0.5 ? u_fade_change :-u_fade_change;float interpolated_fade_opacity=max(0.0,min(1.0,fade_opacity[0]+fade_change));v_data0.xy=a_tex/u_texsize;v_data0.zw=a_tex/u_texsize_icon;v_data1=vec4(gamma_scale,size,interpolated_fade_opacity,is_sdf);}\\\");function _r(t,e){var r=/#pragma mapbox: ([\\\\w]+) ([\\\\w]+) ([\\\\w]+) ([\\\\w]+)/g,n={};return{fragmentSource:t=t.replace(r,(function(t,e,r,i,a){return n[a]=!0,\\\"define\\\"===e?\\\"\\\\n#ifndef HAS_UNIFORM_u_\\\"+a+\\\"\\\\nvarying \\\"+r+\\\" \\\"+i+\\\" \\\"+a+\\\";\\\\n#else\\\\nuniform \\\"+r+\\\" \\\"+i+\\\" u_\\\"+a+\\\";\\\\n#endif\\\\n\\\":\\\"\\\\n#ifdef HAS_UNIFORM_u_\\\"+a+\\\"\\\\n    \\\"+r+\\\" \\\"+i+\\\" \\\"+a+\\\" = u_\\\"+a+\\\";\\\\n#endif\\\\n\\\"})),vertexSource:e=e.replace(r,(function(t,e,r,i,a){var o=\\\"float\\\"===i?\\\"vec2\\\":\\\"vec4\\\",s=a.match(/color/)?\\\"color\\\":o;return n[a]?\\\"define\\\"===e?\\\"\\\\n#ifndef HAS_UNIFORM_u_\\\"+a+\\\"\\\\nuniform lowp float u_\\\"+a+\\\"_t;\\\\nattribute \\\"+r+\\\" \\\"+o+\\\" a_\\\"+a+\\\";\\\\nvarying \\\"+r+\\\" \\\"+i+\\\" \\\"+a+\\\";\\\\n#else\\\\nuniform \\\"+r+\\\" \\\"+i+\\\" u_\\\"+a+\\\";\\\\n#endif\\\\n\\\":\\\"vec4\\\"===s?\\\"\\\\n#ifndef HAS_UNIFORM_u_\\\"+a+\\\"\\\\n    \\\"+a+\\\" = a_\\\"+a+\\\";\\\\n#else\\\\n    \\\"+r+\\\" \\\"+i+\\\" \\\"+a+\\\" = u_\\\"+a+\\\";\\\\n#endif\\\\n\\\":\\\"\\\\n#ifndef HAS_UNIFORM_u_\\\"+a+\\\"\\\\n    \\\"+a+\\\" = unpack_mix_\\\"+s+\\\"(a_\\\"+a+\\\", u_\\\"+a+\\\"_t);\\\\n#else\\\\n    \\\"+r+\\\" \\\"+i+\\\" \\\"+a+\\\" = u_\\\"+a+\\\";\\\\n#endif\\\\n\\\":\\\"define\\\"===e?\\\"\\\\n#ifndef HAS_UNIFORM_u_\\\"+a+\\\"\\\\nuniform lowp float u_\\\"+a+\\\"_t;\\\\nattribute \\\"+r+\\\" \\\"+o+\\\" a_\\\"+a+\\\";\\\\n#else\\\\nuniform \\\"+r+\\\" \\\"+i+\\\" u_\\\"+a+\\\";\\\\n#endif\\\\n\\\":\\\"vec4\\\"===s?\\\"\\\\n#ifndef HAS_UNIFORM_u_\\\"+a+\\\"\\\\n    \\\"+r+\\\" \\\"+i+\\\" \\\"+a+\\\" = a_\\\"+a+\\\";\\\\n#else\\\\n    \\\"+r+\\\" \\\"+i+\\\" \\\"+a+\\\" = u_\\\"+a+\\\";\\\\n#endif\\\\n\\\":\\\"\\\\n#ifndef HAS_UNIFORM_u_\\\"+a+\\\"\\\\n    \\\"+r+\\\" \\\"+i+\\\" \\\"+a+\\\" = unpack_mix_\\\"+s+\\\"(a_\\\"+a+\\\", u_\\\"+a+\\\"_t);\\\\n#else\\\\n    \\\"+r+\\\" \\\"+i+\\\" \\\"+a+\\\" = u_\\\"+a+\\\";\\\\n#endif\\\\n\\\"}))}}var wr=Object.freeze({__proto__:null,prelude:Xe,background:Je,backgroundPattern:Ke,circle:$e,clippingMask:Qe,heatmap:tr,heatmapTexture:er,collisionBox:rr,collisionCircle:nr,debug:ir,fill:ar,fillOutline:or,fillOutlinePattern:sr,fillPattern:lr,fillExtrusion:ur,fillExtrusionPattern:cr,hillshadePrepare:fr,hillshade:hr,line:pr,lineGradient:dr,linePattern:vr,lineSDF:gr,raster:yr,symbolIcon:mr,symbolSDF:xr,symbolTextAndIcon:br}),Tr=function(){this.boundProgram=null,this.boundLayoutVertexBuffer=null,this.boundPaintVertexBuffers=[],this.boundIndexBuffer=null,this.boundVertexOffset=null,this.boundDynamicVertexBuffer=null,this.vao=null};Tr.prototype.bind=function(t,e,r,n,i,a,o,s){this.context=t;for(var l=this.boundPaintVertexBuffers.length!==n.length,u=0;!l&&u<n.length;u++)this.boundPaintVertexBuffers[u]!==n[u]&&(l=!0);var c=!this.vao||this.boundProgram!==e||this.boundLayoutVertexBuffer!==r||l||this.boundIndexBuffer!==i||this.boundVertexOffset!==a||this.boundDynamicVertexBuffer!==o||this.boundDynamicVertexBuffer2!==s;!t.extVertexArrayObject||c?this.freshBind(e,r,n,i,a,o,s):(t.bindVertexArrayOES.set(this.vao),o&&o.bind(),i&&i.dynamicDraw&&i.bind(),s&&s.bind())},Tr.prototype.freshBind=function(t,e,r,n,i,a,o){var s,l=t.numAttributes,u=this.context,c=u.gl;if(u.extVertexArrayObject)this.vao&&this.destroy(),this.vao=u.extVertexArrayObject.createVertexArrayOES(),u.bindVertexArrayOES.set(this.vao),s=0,this.boundProgram=t,this.boundLayoutVertexBuffer=e,this.boundPaintVertexBuffers=r,this.boundIndexBuffer=n,this.boundVertexOffset=i,this.boundDynamicVertexBuffer=a,this.boundDynamicVertexBuffer2=o;else{s=u.currentNumAttributes||0;for(var f=l;f<s;f++)c.disableVertexAttribArray(f)}e.enableAttributes(c,t);for(var h=0,p=r;h<p.length;h+=1)p[h].enableAttributes(c,t);a&&a.enableAttributes(c,t),o&&o.enableAttributes(c,t),e.bind(),e.setVertexAttribPointers(c,t,i);for(var d=0,v=r;d<v.length;d+=1){var g=v[d];g.bind(),g.setVertexAttribPointers(c,t,i)}a&&(a.bind(),a.setVertexAttribPointers(c,t,i)),n&&n.bind(),o&&(o.bind(),o.setVertexAttribPointers(c,t,i)),u.currentNumAttributes=l},Tr.prototype.destroy=function(){this.vao&&(this.context.extVertexArrayObject.deleteVertexArrayOES(this.vao),this.vao=null)};var kr=function(t,e,r,n,i){var a=t.gl;this.program=a.createProgram();var o=r?r.defines():[];i&&o.push(\\\"#define OVERDRAW_INSPECTOR;\\\");var s=o.concat(Xe.fragmentSource,e.fragmentSource).join(\\\"\\\\n\\\"),l=o.concat(Xe.vertexSource,e.vertexSource).join(\\\"\\\\n\\\"),u=a.createShader(a.FRAGMENT_SHADER);if(a.isContextLost())this.failedToCreate=!0;else{a.shaderSource(u,s),a.compileShader(u),a.attachShader(this.program,u);var c=a.createShader(a.VERTEX_SHADER);if(a.isContextLost())this.failedToCreate=!0;else{a.shaderSource(c,l),a.compileShader(c),a.attachShader(this.program,c);for(var f=r?r.layoutAttributes:[],h=0;h<f.length;h++)a.bindAttribLocation(this.program,h,f[h].name);a.linkProgram(this.program),a.deleteShader(c),a.deleteShader(u),this.numAttributes=a.getProgramParameter(this.program,a.ACTIVE_ATTRIBUTES),this.attributes={};for(var p={},d=0;d<this.numAttributes;d++){var v=a.getActiveAttrib(this.program,d);v&&(this.attributes[v.name]=a.getAttribLocation(this.program,v.name))}for(var g=a.getProgramParameter(this.program,a.ACTIVE_UNIFORMS),y=0;y<g;y++){var m=a.getActiveUniform(this.program,y);m&&(p[m.name]=a.getUniformLocation(this.program,m.name))}this.fixedUniforms=n(t,p),this.binderUniforms=r?r.getUniforms(t,p):[]}}};function Ar(t,e,r){var n=1/ge(r,1,e.transform.tileZoom),i=Math.pow(2,r.tileID.overscaledZ),a=r.tileSize*Math.pow(2,e.transform.tileZoom)/i,o=a*(r.tileID.canonical.x+r.tileID.wrap*i),s=a*r.tileID.canonical.y;return{u_image:0,u_texsize:r.imageAtlasTexture.size,u_scale:[n,t.fromScale,t.toScale],u_fade:t.t,u_pixel_coord_upper:[o>>16,s>>16],u_pixel_coord_lower:[65535&o,65535&s]}}kr.prototype.draw=function(t,e,r,n,i,a,o,s,l,u,c,f,h,p,d,v){var g,y=t.gl;if(!this.failedToCreate){for(var m in t.program.set(this.program),t.setDepthMode(r),t.setStencilMode(n),t.setColorMode(i),t.setCullFace(a),this.fixedUniforms)this.fixedUniforms[m].set(o[m]);p&&p.setUniforms(t,this.binderUniforms,f,{zoom:h});for(var x=(g={},g[y.LINES]=2,g[y.TRIANGLES]=3,g[y.LINE_STRIP]=1,g)[e],b=0,_=c.get();b<_.length;b+=1){var w=_[b],T=w.vaos||(w.vaos={});(T[s]||(T[s]=new Tr)).bind(t,this,l,p?p.getPaintVertexBuffers():[],u,w.vertexOffset,d,v),y.drawElements(e,w.primitiveLength*x,y.UNSIGNED_SHORT,w.primitiveOffset*x*2)}}};var Mr=function(e,r,n,i){var a=r.style.light,o=a.properties.get(\\\"position\\\"),s=[o.x,o.y,o.z],l=t.create$1();\\\"viewport\\\"===a.properties.get(\\\"anchor\\\")&&t.fromRotation(l,-r.transform.angle),t.transformMat3(s,s,l);var u=a.properties.get(\\\"color\\\");return{u_matrix:e,u_lightpos:s,u_lightintensity:a.properties.get(\\\"intensity\\\"),u_lightcolor:[u.r,u.g,u.b],u_vertical_gradient:+n,u_opacity:i}},Sr=function(e,r,n,i,a,o,s){return t.extend(Mr(e,r,n,i),Ar(o,r,s),{u_height_factor:-Math.pow(2,a.overscaledZ)/s.tileSize/8})},Er=function(t){return{u_matrix:t}},Lr=function(e,r,n,i){return t.extend(Er(e),Ar(n,r,i))},Cr=function(t,e){return{u_matrix:t,u_world:e}},Pr=function(e,r,n,i,a){return t.extend(Lr(e,r,n,i),{u_world:a})},Or=function(e,r,n,i){var a,o,s=e.transform;if(\\\"map\\\"===i.paint.get(\\\"circle-pitch-alignment\\\")){var l=ge(n,1,s.zoom);a=!0,o=[l,l]}else a=!1,o=s.pixelsToGLUnits;return{u_camera_to_center_distance:s.cameraToCenterDistance,u_scale_with_map:+(\\\"map\\\"===i.paint.get(\\\"circle-pitch-scale\\\")),u_matrix:e.translatePosMatrix(r.posMatrix,n,i.paint.get(\\\"circle-translate\\\"),i.paint.get(\\\"circle-translate-anchor\\\")),u_pitch_with_map:+a,u_device_pixel_ratio:t.browser.devicePixelRatio,u_extrude_scale:o}},Ir=function(t,e,r){var n=ge(r,1,e.zoom),i=Math.pow(2,e.zoom-r.tileID.overscaledZ),a=r.tileID.overscaleFactor();return{u_matrix:t,u_camera_to_center_distance:e.cameraToCenterDistance,u_pixels_to_tile_units:n,u_extrude_scale:[e.pixelsToGLUnits[0]/(n*i),e.pixelsToGLUnits[1]/(n*i)],u_overscale_factor:a}},Dr=function(t,e,r){return{u_matrix:t,u_inv_matrix:e,u_camera_to_center_distance:r.cameraToCenterDistance,u_viewport_size:[r.width,r.height]}},zr=function(t,e,r){return void 0===r&&(r=1),{u_matrix:t,u_color:e,u_overlay:0,u_overlay_scale:r}},Rr=function(t){return{u_matrix:t}},Fr=function(t,e,r,n){return{u_matrix:t,u_extrude_scale:ge(e,1,r),u_intensity:n}},Br=function(e,r,n,i){var a=t.create();t.ortho(a,0,e.width,e.height,0,0,1);var o=e.context.gl;return{u_matrix:a,u_world:[o.drawingBufferWidth,o.drawingBufferHeight],u_image:n,u_color_ramp:i,u_opacity:r.paint.get(\\\"heatmap-opacity\\\")}},Nr=function(e,r,n){var i=n.paint.get(\\\"hillshade-shadow-color\\\"),a=n.paint.get(\\\"hillshade-highlight-color\\\"),o=n.paint.get(\\\"hillshade-accent-color\\\"),s=n.paint.get(\\\"hillshade-illumination-direction\\\")*(Math.PI/180);\\\"viewport\\\"===n.paint.get(\\\"hillshade-illumination-anchor\\\")&&(s-=e.transform.angle);var l,u,c,f=!e.options.moving;return{u_matrix:e.transform.calculatePosMatrix(r.tileID.toUnwrapped(),f),u_image:0,u_latrange:(l=r.tileID,u=Math.pow(2,l.canonical.z),c=l.canonical.y,[new t.MercatorCoordinate(0,c/u).toLngLat().lat,new t.MercatorCoordinate(0,(c+1)/u).toLngLat().lat]),u_light:[n.paint.get(\\\"hillshade-exaggeration\\\"),s],u_shadow:i,u_highlight:a,u_accent:o}},jr=function(e,r,n){var i=r.stride,a=t.create();return t.ortho(a,0,t.EXTENT,-t.EXTENT,0,0,1),t.translate(a,a,[0,-t.EXTENT,0]),{u_matrix:a,u_image:1,u_dimension:[i,i],u_zoom:e.overscaledZ,u_maxzoom:n,u_unpack:r.getUnpackVector()}};var Ur=function(e,r,n){var i=e.transform;return{u_matrix:Zr(e,r,n),u_ratio:1/ge(r,1,i.zoom),u_device_pixel_ratio:t.browser.devicePixelRatio,u_units_to_pixels:[1/i.pixelsToGLUnits[0],1/i.pixelsToGLUnits[1]]}},Vr=function(e,r,n){return t.extend(Ur(e,r,n),{u_image:0})},Hr=function(e,r,n,i){var a=e.transform,o=Gr(r,a);return{u_matrix:Zr(e,r,n),u_texsize:r.imageAtlasTexture.size,u_ratio:1/ge(r,1,a.zoom),u_device_pixel_ratio:t.browser.devicePixelRatio,u_image:0,u_scale:[o,i.fromScale,i.toScale],u_fade:i.t,u_units_to_pixels:[1/a.pixelsToGLUnits[0],1/a.pixelsToGLUnits[1]]}},qr=function(e,r,n,i,a){var o=e.transform,s=e.lineAtlas,l=Gr(r,o),u=\\\"round\\\"===n.layout.get(\\\"line-cap\\\"),c=s.getDash(i.from,u),f=s.getDash(i.to,u),h=c.width*a.fromScale,p=f.width*a.toScale;return t.extend(Ur(e,r,n),{u_patternscale_a:[l/h,-c.height/2],u_patternscale_b:[l/p,-f.height/2],u_sdfgamma:s.width/(256*Math.min(h,p)*t.browser.devicePixelRatio)/2,u_image:0,u_tex_y_a:c.y,u_tex_y_b:f.y,u_mix:a.t})};function Gr(t,e){return 1/ge(t,1,e.tileZoom)}function Zr(t,e,r){return t.translatePosMatrix(e.tileID.posMatrix,e,r.paint.get(\\\"line-translate\\\"),r.paint.get(\\\"line-translate-anchor\\\"))}var Yr=function(t,e,r,n,i){return{u_matrix:t,u_tl_parent:e,u_scale_parent:r,u_buffer_scale:1,u_fade_t:n.mix,u_opacity:n.opacity*i.paint.get(\\\"raster-opacity\\\"),u_image0:0,u_image1:1,u_brightness_low:i.paint.get(\\\"raster-brightness-min\\\"),u_brightness_high:i.paint.get(\\\"raster-brightness-max\\\"),u_saturation_factor:(o=i.paint.get(\\\"raster-saturation\\\"),o>0?1-1/(1.001-o):-o),u_contrast_factor:(a=i.paint.get(\\\"raster-contrast\\\"),a>0?1/(1-a):1+a),u_spin_weights:Wr(i.paint.get(\\\"raster-hue-rotate\\\"))};var a,o};function Wr(t){t*=Math.PI/180;var e=Math.sin(t),r=Math.cos(t);return[(2*r+1)/3,(-Math.sqrt(3)*e-r+1)/3,(Math.sqrt(3)*e-r+1)/3]}var Xr,Jr=function(t,e,r,n,i,a,o,s,l,u){var c=i.transform;return{u_is_size_zoom_constant:+(\\\"constant\\\"===t||\\\"source\\\"===t),u_is_size_feature_constant:+(\\\"constant\\\"===t||\\\"camera\\\"===t),u_size_t:e?e.uSizeT:0,u_size:e?e.uSize:0,u_camera_to_center_distance:c.cameraToCenterDistance,u_pitch:c.pitch/360*2*Math.PI,u_rotate_symbol:+r,u_aspect_ratio:c.width/c.height,u_fade_change:i.options.fadeDuration?i.symbolFadeChange:1,u_matrix:a,u_label_plane_matrix:o,u_coord_matrix:s,u_is_text:+l,u_pitch_with_map:+n,u_texsize:u,u_texture:0}},Kr=function(e,r,n,i,a,o,s,l,u,c,f){var h=a.transform;return t.extend(Jr(e,r,n,i,a,o,s,l,u,c),{u_gamma_scale:i?Math.cos(h._pitch)*h.cameraToCenterDistance:1,u_device_pixel_ratio:t.browser.devicePixelRatio,u_is_halo:+f})},$r=function(e,r,n,i,a,o,s,l,u,c){return t.extend(Kr(e,r,n,i,a,o,s,l,!0,u,!0),{u_texsize_icon:c,u_texture_icon:1})},Qr=function(t,e,r){return{u_matrix:t,u_opacity:e,u_color:r}},tn=function(e,r,n,i,a,o){return t.extend(function(t,e,r,n){var i=r.imageManager.getPattern(t.from.toString()),a=r.imageManager.getPattern(t.to.toString()),o=r.imageManager.getPixelSize(),s=o.width,l=o.height,u=Math.pow(2,n.tileID.overscaledZ),c=n.tileSize*Math.pow(2,r.transform.tileZoom)/u,f=c*(n.tileID.canonical.x+n.tileID.wrap*u),h=c*n.tileID.canonical.y;return{u_image:0,u_pattern_tl_a:i.tl,u_pattern_br_a:i.br,u_pattern_tl_b:a.tl,u_pattern_br_b:a.br,u_texsize:[s,l],u_mix:e.t,u_pattern_size_a:i.displaySize,u_pattern_size_b:a.displaySize,u_scale_a:e.fromScale,u_scale_b:e.toScale,u_tile_units_to_pixels:1/ge(n,1,r.transform.tileZoom),u_pixel_coord_upper:[f>>16,h>>16],u_pixel_coord_lower:[65535&f,65535&h]}}(i,o,n,a),{u_matrix:e,u_opacity:r})},en={fillExtrusion:function(e,r){return{u_matrix:new t.UniformMatrix4f(e,r.u_matrix),u_lightpos:new t.Uniform3f(e,r.u_lightpos),u_lightintensity:new t.Uniform1f(e,r.u_lightintensity),u_lightcolor:new t.Uniform3f(e,r.u_lightcolor),u_vertical_gradient:new t.Uniform1f(e,r.u_vertical_gradient),u_opacity:new t.Uniform1f(e,r.u_opacity)}},fillExtrusionPattern:function(e,r){return{u_matrix:new t.UniformMatrix4f(e,r.u_matrix),u_lightpos:new t.Uniform3f(e,r.u_lightpos),u_lightintensity:new t.Uniform1f(e,r.u_lightintensity),u_lightcolor:new t.Uniform3f(e,r.u_lightcolor),u_vertical_gradient:new t.Uniform1f(e,r.u_vertical_gradient),u_height_factor:new t.Uniform1f(e,r.u_height_factor),u_image:new t.Uniform1i(e,r.u_image),u_texsize:new t.Uniform2f(e,r.u_texsize),u_pixel_coord_upper:new t.Uniform2f(e,r.u_pixel_coord_upper),u_pixel_coord_lower:new t.Uniform2f(e,r.u_pixel_coord_lower),u_scale:new t.Uniform3f(e,r.u_scale),u_fade:new t.Uniform1f(e,r.u_fade),u_opacity:new t.Uniform1f(e,r.u_opacity)}},fill:function(e,r){return{u_matrix:new t.UniformMatrix4f(e,r.u_matrix)}},fillPattern:function(e,r){return{u_matrix:new t.UniformMatrix4f(e,r.u_matrix),u_image:new t.Uniform1i(e,r.u_image),u_texsize:new t.Uniform2f(e,r.u_texsize),u_pixel_coord_upper:new t.Uniform2f(e,r.u_pixel_coord_upper),u_pixel_coord_lower:new t.Uniform2f(e,r.u_pixel_coord_lower),u_scale:new t.Uniform3f(e,r.u_scale),u_fade:new t.Uniform1f(e,r.u_fade)}},fillOutline:function(e,r){return{u_matrix:new t.UniformMatrix4f(e,r.u_matrix),u_world:new t.Uniform2f(e,r.u_world)}},fillOutlinePattern:function(e,r){return{u_matrix:new t.UniformMatrix4f(e,r.u_matrix),u_world:new t.Uniform2f(e,r.u_world),u_image:new t.Uniform1i(e,r.u_image),u_texsize:new t.Uniform2f(e,r.u_texsize),u_pixel_coord_upper:new t.Uniform2f(e,r.u_pixel_coord_upper),u_pixel_coord_lower:new t.Uniform2f(e,r.u_pixel_coord_lower),u_scale:new t.Uniform3f(e,r.u_scale),u_fade:new t.Uniform1f(e,r.u_fade)}},circle:function(e,r){return{u_camera_to_center_distance:new t.Uniform1f(e,r.u_camera_to_center_distance),u_scale_with_map:new t.Uniform1i(e,r.u_scale_with_map),u_pitch_with_map:new t.Uniform1i(e,r.u_pitch_with_map),u_extrude_scale:new t.Uniform2f(e,r.u_extrude_scale),u_device_pixel_ratio:new t.Uniform1f(e,r.u_device_pixel_ratio),u_matrix:new t.UniformMatrix4f(e,r.u_matrix)}},collisionBox:function(e,r){return{u_matrix:new t.UniformMatrix4f(e,r.u_matrix),u_camera_to_center_distance:new t.Uniform1f(e,r.u_camera_to_center_distance),u_pixels_to_tile_units:new t.Uniform1f(e,r.u_pixels_to_tile_units),u_extrude_scale:new t.Uniform2f(e,r.u_extrude_scale),u_overscale_factor:new t.Uniform1f(e,r.u_overscale_factor)}},collisionCircle:function(e,r){return{u_matrix:new t.UniformMatrix4f(e,r.u_matrix),u_inv_matrix:new t.UniformMatrix4f(e,r.u_inv_matrix),u_camera_to_center_distance:new t.Uniform1f(e,r.u_camera_to_center_distance),u_viewport_size:new t.Uniform2f(e,r.u_viewport_size)}},debug:function(e,r){return{u_color:new t.UniformColor(e,r.u_color),u_matrix:new t.UniformMatrix4f(e,r.u_matrix),u_overlay:new t.Uniform1i(e,r.u_overlay),u_overlay_scale:new t.Uniform1f(e,r.u_overlay_scale)}},clippingMask:function(e,r){return{u_matrix:new t.UniformMatrix4f(e,r.u_matrix)}},heatmap:function(e,r){return{u_extrude_scale:new t.Uniform1f(e,r.u_extrude_scale),u_intensity:new t.Uniform1f(e,r.u_intensity),u_matrix:new t.UniformMatrix4f(e,r.u_matrix)}},heatmapTexture:function(e,r){return{u_matrix:new t.UniformMatrix4f(e,r.u_matrix),u_world:new t.Uniform2f(e,r.u_world),u_image:new t.Uniform1i(e,r.u_image),u_color_ramp:new t.Uniform1i(e,r.u_color_ramp),u_opacity:new t.Uniform1f(e,r.u_opacity)}},hillshade:function(e,r){return{u_matrix:new t.UniformMatrix4f(e,r.u_matrix),u_image:new t.Uniform1i(e,r.u_image),u_latrange:new t.Uniform2f(e,r.u_latrange),u_light:new t.Uniform2f(e,r.u_light),u_shadow:new t.UniformColor(e,r.u_shadow),u_highlight:new t.UniformColor(e,r.u_highlight),u_accent:new t.UniformColor(e,r.u_accent)}},hillshadePrepare:function(e,r){return{u_matrix:new t.UniformMatrix4f(e,r.u_matrix),u_image:new t.Uniform1i(e,r.u_image),u_dimension:new t.Uniform2f(e,r.u_dimension),u_zoom:new t.Uniform1f(e,r.u_zoom),u_maxzoom:new t.Uniform1f(e,r.u_maxzoom),u_unpack:new t.Uniform4f(e,r.u_unpack)}},line:function(e,r){return{u_matrix:new t.UniformMatrix4f(e,r.u_matrix),u_ratio:new t.Uniform1f(e,r.u_ratio),u_device_pixel_ratio:new t.Uniform1f(e,r.u_device_pixel_ratio),u_units_to_pixels:new t.Uniform2f(e,r.u_units_to_pixels)}},lineGradient:function(e,r){return{u_matrix:new t.UniformMatrix4f(e,r.u_matrix),u_ratio:new t.Uniform1f(e,r.u_ratio),u_device_pixel_ratio:new t.Uniform1f(e,r.u_device_pixel_ratio),u_units_to_pixels:new t.Uniform2f(e,r.u_units_to_pixels),u_image:new t.Uniform1i(e,r.u_image)}},linePattern:function(e,r){return{u_matrix:new t.UniformMatrix4f(e,r.u_matrix),u_texsize:new t.Uniform2f(e,r.u_texsize),u_ratio:new t.Uniform1f(e,r.u_ratio),u_device_pixel_ratio:new t.Uniform1f(e,r.u_device_pixel_ratio),u_image:new t.Uniform1i(e,r.u_image),u_units_to_pixels:new t.Uniform2f(e,r.u_units_to_pixels),u_scale:new t.Uniform3f(e,r.u_scale),u_fade:new t.Uniform1f(e,r.u_fade)}},lineSDF:function(e,r){return{u_matrix:new t.UniformMatrix4f(e,r.u_matrix),u_ratio:new t.Uniform1f(e,r.u_ratio),u_device_pixel_ratio:new t.Uniform1f(e,r.u_device_pixel_ratio),u_units_to_pixels:new t.Uniform2f(e,r.u_units_to_pixels),u_patternscale_a:new t.Uniform2f(e,r.u_patternscale_a),u_patternscale_b:new t.Uniform2f(e,r.u_patternscale_b),u_sdfgamma:new t.Uniform1f(e,r.u_sdfgamma),u_image:new t.Uniform1i(e,r.u_image),u_tex_y_a:new t.Uniform1f(e,r.u_tex_y_a),u_tex_y_b:new t.Uniform1f(e,r.u_tex_y_b),u_mix:new t.Uniform1f(e,r.u_mix)}},raster:function(e,r){return{u_matrix:new t.UniformMatrix4f(e,r.u_matrix),u_tl_parent:new t.Uniform2f(e,r.u_tl_parent),u_scale_parent:new t.Uniform1f(e,r.u_scale_parent),u_buffer_scale:new t.Uniform1f(e,r.u_buffer_scale),u_fade_t:new t.Uniform1f(e,r.u_fade_t),u_opacity:new t.Uniform1f(e,r.u_opacity),u_image0:new t.Uniform1i(e,r.u_image0),u_image1:new t.Uniform1i(e,r.u_image1),u_brightness_low:new t.Uniform1f(e,r.u_brightness_low),u_brightness_high:new t.Uniform1f(e,r.u_brightness_high),u_saturation_factor:new t.Uniform1f(e,r.u_saturation_factor),u_contrast_factor:new t.Uniform1f(e,r.u_contrast_factor),u_spin_weights:new t.Uniform3f(e,r.u_spin_weights)}},symbolIcon:function(e,r){return{u_is_size_zoom_constant:new t.Uniform1i(e,r.u_is_size_zoom_constant),u_is_size_feature_constant:new t.Uniform1i(e,r.u_is_size_feature_constant),u_size_t:new t.Uniform1f(e,r.u_size_t),u_size:new t.Uniform1f(e,r.u_size),u_camera_to_center_distance:new t.Uniform1f(e,r.u_camera_to_center_distance),u_pitch:new t.Uniform1f(e,r.u_pitch),u_rotate_symbol:new t.Uniform1i(e,r.u_rotate_symbol),u_aspect_ratio:new t.Uniform1f(e,r.u_aspect_ratio),u_fade_change:new t.Uniform1f(e,r.u_fade_change),u_matrix:new t.UniformMatrix4f(e,r.u_matrix),u_label_plane_matrix:new t.UniformMatrix4f(e,r.u_label_plane_matrix),u_coord_matrix:new t.UniformMatrix4f(e,r.u_coord_matrix),u_is_text:new t.Uniform1i(e,r.u_is_text),u_pitch_with_map:new t.Uniform1i(e,r.u_pitch_with_map),u_texsize:new t.Uniform2f(e,r.u_texsize),u_texture:new t.Uniform1i(e,r.u_texture)}},symbolSDF:function(e,r){return{u_is_size_zoom_constant:new t.Uniform1i(e,r.u_is_size_zoom_constant),u_is_size_feature_constant:new t.Uniform1i(e,r.u_is_size_feature_constant),u_size_t:new t.Uniform1f(e,r.u_size_t),u_size:new t.Uniform1f(e,r.u_size),u_camera_to_center_distance:new t.Uniform1f(e,r.u_camera_to_center_distance),u_pitch:new t.Uniform1f(e,r.u_pitch),u_rotate_symbol:new t.Uniform1i(e,r.u_rotate_symbol),u_aspect_ratio:new t.Uniform1f(e,r.u_aspect_ratio),u_fade_change:new t.Uniform1f(e,r.u_fade_change),u_matrix:new t.UniformMatrix4f(e,r.u_matrix),u_label_plane_matrix:new t.UniformMatrix4f(e,r.u_label_plane_matrix),u_coord_matrix:new t.UniformMatrix4f(e,r.u_coord_matrix),u_is_text:new t.Uniform1i(e,r.u_is_text),u_pitch_with_map:new t.Uniform1i(e,r.u_pitch_with_map),u_texsize:new t.Uniform2f(e,r.u_texsize),u_texture:new t.Uniform1i(e,r.u_texture),u_gamma_scale:new t.Uniform1f(e,r.u_gamma_scale),u_device_pixel_ratio:new t.Uniform1f(e,r.u_device_pixel_ratio),u_is_halo:new t.Uniform1i(e,r.u_is_halo)}},symbolTextAndIcon:function(e,r){return{u_is_size_zoom_constant:new t.Uniform1i(e,r.u_is_size_zoom_constant),u_is_size_feature_constant:new t.Uniform1i(e,r.u_is_size_feature_constant),u_size_t:new t.Uniform1f(e,r.u_size_t),u_size:new t.Uniform1f(e,r.u_size),u_camera_to_center_distance:new t.Uniform1f(e,r.u_camera_to_center_distance),u_pitch:new t.Uniform1f(e,r.u_pitch),u_rotate_symbol:new t.Uniform1i(e,r.u_rotate_symbol),u_aspect_ratio:new t.Uniform1f(e,r.u_aspect_ratio),u_fade_change:new t.Uniform1f(e,r.u_fade_change),u_matrix:new t.UniformMatrix4f(e,r.u_matrix),u_label_plane_matrix:new t.UniformMatrix4f(e,r.u_label_plane_matrix),u_coord_matrix:new t.UniformMatrix4f(e,r.u_coord_matrix),u_is_text:new t.Uniform1i(e,r.u_is_text),u_pitch_with_map:new t.Uniform1i(e,r.u_pitch_with_map),u_texsize:new t.Uniform2f(e,r.u_texsize),u_texsize_icon:new t.Uniform2f(e,r.u_texsize_icon),u_texture:new t.Uniform1i(e,r.u_texture),u_texture_icon:new t.Uniform1i(e,r.u_texture_icon),u_gamma_scale:new t.Uniform1f(e,r.u_gamma_scale),u_device_pixel_ratio:new t.Uniform1f(e,r.u_device_pixel_ratio),u_is_halo:new t.Uniform1i(e,r.u_is_halo)}},background:function(e,r){return{u_matrix:new t.UniformMatrix4f(e,r.u_matrix),u_opacity:new t.Uniform1f(e,r.u_opacity),u_color:new t.UniformColor(e,r.u_color)}},backgroundPattern:function(e,r){return{u_matrix:new t.UniformMatrix4f(e,r.u_matrix),u_opacity:new t.Uniform1f(e,r.u_opacity),u_image:new t.Uniform1i(e,r.u_image),u_pattern_tl_a:new t.Uniform2f(e,r.u_pattern_tl_a),u_pattern_br_a:new t.Uniform2f(e,r.u_pattern_br_a),u_pattern_tl_b:new t.Uniform2f(e,r.u_pattern_tl_b),u_pattern_br_b:new t.Uniform2f(e,r.u_pattern_br_b),u_texsize:new t.Uniform2f(e,r.u_texsize),u_mix:new t.Uniform1f(e,r.u_mix),u_pattern_size_a:new t.Uniform2f(e,r.u_pattern_size_a),u_pattern_size_b:new t.Uniform2f(e,r.u_pattern_size_b),u_scale_a:new t.Uniform1f(e,r.u_scale_a),u_scale_b:new t.Uniform1f(e,r.u_scale_b),u_pixel_coord_upper:new t.Uniform2f(e,r.u_pixel_coord_upper),u_pixel_coord_lower:new t.Uniform2f(e,r.u_pixel_coord_lower),u_tile_units_to_pixels:new t.Uniform1f(e,r.u_tile_units_to_pixels)}}};function rn(e,r,n,i,a,o,s){for(var l=e.context,u=l.gl,c=e.useProgram(\\\"collisionBox\\\"),f=[],h=0,p=0,d=0;d<i.length;d++){var v=i[d],g=r.getTile(v),y=g.getBucket(n);if(y){var m=v.posMatrix;0===a[0]&&0===a[1]||(m=e.translatePosMatrix(v.posMatrix,g,a,o));var x=s?y.textCollisionBox:y.iconCollisionBox,b=y.collisionCircleArray;if(b.length>0){var _=t.create(),w=m;t.mul(_,y.placementInvProjMatrix,e.transform.glCoordMatrix),t.mul(_,_,y.placementViewportMatrix),f.push({circleArray:b,circleOffset:p,transform:w,invTransform:_}),p=h+=b.length/4}x&&c.draw(l,u.LINES,Mt.disabled,Et.disabled,e.colorModeForRenderPass(),Ct.disabled,Ir(m,e.transform,g),n.id,x.layoutVertexBuffer,x.indexBuffer,x.segments,null,e.transform.zoom,null,null,x.collisionVertexBuffer)}}if(s&&f.length){var T=e.useProgram(\\\"collisionCircle\\\"),k=new t.StructArrayLayout2f1f2i16;k.resize(4*h),k._trim();for(var A=0,M=0,S=f;M<S.length;M+=1)for(var E=S[M],L=0;L<E.circleArray.length/4;L++){var C=4*L,P=E.circleArray[C+0],O=E.circleArray[C+1],I=E.circleArray[C+2],D=E.circleArray[C+3];k.emplace(A++,P,O,I,D,0),k.emplace(A++,P,O,I,D,1),k.emplace(A++,P,O,I,D,2),k.emplace(A++,P,O,I,D,3)}(!Xr||Xr.length<2*h)&&(Xr=function(e){var r=2*e,n=new t.StructArrayLayout3ui6;n.resize(r),n._trim();for(var i=0;i<r;i++){var a=6*i;n.uint16[a+0]=4*i+0,n.uint16[a+1]=4*i+1,n.uint16[a+2]=4*i+2,n.uint16[a+3]=4*i+2,n.uint16[a+4]=4*i+3,n.uint16[a+5]=4*i+0}return n}(h));for(var z=l.createIndexBuffer(Xr,!0),R=l.createVertexBuffer(k,t.collisionCircleLayout.members,!0),F=0,B=f;F<B.length;F+=1){var N=B[F],j=Dr(N.transform,N.invTransform,e.transform);T.draw(l,u.TRIANGLES,Mt.disabled,Et.disabled,e.colorModeForRenderPass(),Ct.disabled,j,n.id,R,z,t.SegmentVector.simpleSegment(0,2*N.circleOffset,N.circleArray.length,N.circleArray.length/2),null,e.transform.zoom,null,null,null)}R.destroy(),z.destroy()}}var nn=t.identity(new Float32Array(16));function an(e,r,n,i,a,o){var s=t.getAnchorAlignment(e),l=-(s.horizontalAlign-.5)*r,u=-(s.verticalAlign-.5)*n,c=t.evaluateVariableOffset(e,i);return new t.Point((l/a+c[0])*o,(u/a+c[1])*o)}function on(e,r,n,i,a,o,s,l,u,c,f){var h=e.text.placedSymbolArray,p=e.text.dynamicLayoutVertexArray,d=e.icon.dynamicLayoutVertexArray,v={};p.clear();for(var g=0;g<h.length;g++){var y=h.get(g),m=e.allowVerticalPlacement&&!y.placedOrientation,x=y.hidden||!y.crossTileID||m?null:i[y.crossTileID];if(x){var b=new t.Point(y.anchorX,y.anchorY),_=re(b,n?l:s),w=ne(o.cameraToCenterDistance,_.signedDistanceFromCamera),T=a.evaluateSizeForFeature(e.textSizeData,c,y)*w/t.ONE_EM;n&&(T*=e.tilePixelRatio/u);for(var k=x.width,A=x.height,M=an(x.anchor,k,A,x.textOffset,x.textBoxScale,T),S=n?re(b.add(M),s).point:_.point.add(r?M.rotate(-o.angle):M),E=e.allowVerticalPlacement&&y.placedOrientation===t.WritingMode.vertical?Math.PI/2:0,L=0;L<y.numGlyphs;L++)t.addDynamicAttributes(p,S,E);f&&y.associatedIconIndex>=0&&(v[y.associatedIconIndex]={shiftedAnchor:S,angle:E})}else he(y.numGlyphs,p)}if(f){d.clear();for(var C=e.icon.placedSymbolArray,P=0;P<C.length;P++){var O=C.get(P);if(O.hidden)he(O.numGlyphs,d);else{var I=v[P];if(I)for(var D=0;D<O.numGlyphs;D++)t.addDynamicAttributes(d,I.shiftedAnchor,I.angle);else he(O.numGlyphs,d)}}e.icon.dynamicLayoutVertexBuffer.updateData(d)}e.text.dynamicLayoutVertexBuffer.updateData(p)}function sn(t,e,r){return r.iconsInText&&e?\\\"symbolTextAndIcon\\\":t?\\\"symbolSDF\\\":\\\"symbolIcon\\\"}function ln(e,r,n,i,a,o,s,l,u,c,f,h){for(var p=e.context,d=p.gl,v=e.transform,g=\\\"map\\\"===l,y=\\\"map\\\"===u,m=g&&\\\"point\\\"!==n.layout.get(\\\"symbol-placement\\\"),x=g&&!y&&!m,b=void 0!==n.layout.get(\\\"symbol-sort-key\\\").constantOr(1),_=e.depthModeForSublayer(0,Mt.ReadOnly),w=n.layout.get(\\\"text-variable-anchor\\\"),T=[],k=0,A=i;k<A.length;k+=1){var M=A[k],S=r.getTile(M),E=S.getBucket(n);if(E){var L=a?E.text:E.icon;if(L&&L.segments.get().length){var C=L.programConfigurations.get(n.id),P=a||E.sdfIcons,O=a?E.textSizeData:E.iconSizeData,I=y||0!==v.pitch,D=e.useProgram(sn(P,a,E),C),z=t.evaluateSizeForZoom(O,v.zoom),R=void 0,F=[0,0],B=void 0,N=void 0,j=null,U=void 0;if(a){if(B=S.glyphAtlasTexture,N=d.LINEAR,R=S.glyphAtlasTexture.size,E.iconsInText){F=S.imageAtlasTexture.size,j=S.imageAtlasTexture;var V=\\\"composite\\\"===O.kind||\\\"camera\\\"===O.kind;U=I||e.options.rotating||e.options.zooming||V?d.LINEAR:d.NEAREST}}else{var H=1!==n.layout.get(\\\"icon-size\\\").constantOr(0)||E.iconsNeedLinear;B=S.imageAtlasTexture,N=P||e.options.rotating||e.options.zooming||H||I?d.LINEAR:d.NEAREST,R=S.imageAtlasTexture.size}var q=ge(S,1,e.transform.zoom),G=te(M.posMatrix,y,g,e.transform,q),Z=ee(M.posMatrix,y,g,e.transform,q),Y=w&&E.hasTextData(),W=\\\"none\\\"!==n.layout.get(\\\"icon-text-fit\\\")&&Y&&E.hasIconData();m&&ae(E,M.posMatrix,e,a,G,Z,y,c);var X=e.translatePosMatrix(M.posMatrix,S,o,s),J=m||a&&w||W?nn:G,K=e.translatePosMatrix(Z,S,o,s,!0),$=P&&0!==n.paint.get(a?\\\"text-halo-width\\\":\\\"icon-halo-width\\\").constantOr(1),Q={program:D,buffers:L,uniformValues:P?E.iconsInText?$r(O.kind,z,x,y,e,X,J,K,R,F):Kr(O.kind,z,x,y,e,X,J,K,a,R,!0):Jr(O.kind,z,x,y,e,X,J,K,a,R),atlasTexture:B,atlasTextureIcon:j,atlasInterpolation:N,atlasInterpolationIcon:U,isSDF:P,hasHalo:$};if(b)for(var tt=0,et=L.segments.get();tt<et.length;tt+=1){var rt=et[tt];T.push({segments:new t.SegmentVector([rt]),sortKey:rt.sortKey,state:Q})}else T.push({segments:L.segments,sortKey:0,state:Q})}}}b&&T.sort((function(t,e){return t.sortKey-e.sortKey}));for(var nt=0,it=T;nt<it.length;nt+=1){var at=it[nt],ot=at.state;if(p.activeTexture.set(d.TEXTURE0),ot.atlasTexture.bind(ot.atlasInterpolation,d.CLAMP_TO_EDGE),ot.atlasTextureIcon&&(p.activeTexture.set(d.TEXTURE1),ot.atlasTextureIcon&&ot.atlasTextureIcon.bind(ot.atlasInterpolationIcon,d.CLAMP_TO_EDGE)),ot.isSDF){var st=ot.uniformValues;ot.hasHalo&&(st.u_is_halo=1,un(ot.buffers,at.segments,n,e,ot.program,_,f,h,st)),st.u_is_halo=0}un(ot.buffers,at.segments,n,e,ot.program,_,f,h,ot.uniformValues)}}function un(t,e,r,n,i,a,o,s,l){var u=n.context,c=u.gl;i.draw(u,c.TRIANGLES,a,o,s,Ct.disabled,l,r.id,t.layoutVertexBuffer,t.indexBuffer,e,r.paint,n.transform.zoom,t.programConfigurations.get(r.id),t.dynamicLayoutVertexBuffer,t.opacityVertexBuffer)}function cn(t,e,r,n,i,a,o){var s,l,u,c,f,h=t.context.gl,p=r.paint.get(\\\"fill-pattern\\\"),d=p&&p.constantOr(1),v=r.getCrossfadeParameters();o?(l=d&&!r.getPaintProperty(\\\"fill-outline-color\\\")?\\\"fillOutlinePattern\\\":\\\"fillOutline\\\",s=h.LINES):(l=d?\\\"fillPattern\\\":\\\"fill\\\",s=h.TRIANGLES);for(var g=0,y=n;g<y.length;g+=1){var m=y[g],x=e.getTile(m);if(!d||x.patternsLoaded()){var b=x.getBucket(r);if(b){var _=b.programConfigurations.get(r.id),w=t.useProgram(l,_);d&&(t.context.activeTexture.set(h.TEXTURE0),x.imageAtlasTexture.bind(h.LINEAR,h.CLAMP_TO_EDGE),_.updatePaintBuffers(v));var T=p.constantOr(null);if(T&&x.imageAtlas){var k=x.imageAtlas,A=k.patternPositions[T.to.toString()],M=k.patternPositions[T.from.toString()];A&&M&&_.setConstantPatternPositions(A,M)}var S=t.translatePosMatrix(m.posMatrix,x,r.paint.get(\\\"fill-translate\\\"),r.paint.get(\\\"fill-translate-anchor\\\"));if(o){c=b.indexBuffer2,f=b.segments2;var E=[h.drawingBufferWidth,h.drawingBufferHeight];u=\\\"fillOutlinePattern\\\"===l&&d?Pr(S,t,v,x,E):Cr(S,E)}else c=b.indexBuffer,f=b.segments,u=d?Lr(S,t,v,x):Er(S);w.draw(t.context,s,i,t.stencilModeForClipping(m),a,Ct.disabled,u,r.id,b.layoutVertexBuffer,c,f,r.paint,t.transform.zoom,_)}}}}function fn(t,e,r,n,i,a,o){for(var s=t.context,l=s.gl,u=r.paint.get(\\\"fill-extrusion-pattern\\\"),c=u.constantOr(1),f=r.getCrossfadeParameters(),h=r.paint.get(\\\"fill-extrusion-opacity\\\"),p=0,d=n;p<d.length;p+=1){var v=d[p],g=e.getTile(v),y=g.getBucket(r);if(y){var m=y.programConfigurations.get(r.id),x=t.useProgram(c?\\\"fillExtrusionPattern\\\":\\\"fillExtrusion\\\",m);c&&(t.context.activeTexture.set(l.TEXTURE0),g.imageAtlasTexture.bind(l.LINEAR,l.CLAMP_TO_EDGE),m.updatePaintBuffers(f));var b=u.constantOr(null);if(b&&g.imageAtlas){var _=g.imageAtlas,w=_.patternPositions[b.to.toString()],T=_.patternPositions[b.from.toString()];w&&T&&m.setConstantPatternPositions(w,T)}var k=t.translatePosMatrix(v.posMatrix,g,r.paint.get(\\\"fill-extrusion-translate\\\"),r.paint.get(\\\"fill-extrusion-translate-anchor\\\")),A=r.paint.get(\\\"fill-extrusion-vertical-gradient\\\"),M=c?Sr(k,t,A,h,v,f,g):Mr(k,t,A,h);x.draw(s,s.gl.TRIANGLES,i,a,o,Ct.backCCW,M,r.id,y.layoutVertexBuffer,y.indexBuffer,y.segments,r.paint,t.transform.zoom,m)}}}function hn(t,e,r,n,i,a){var o=t.context,s=o.gl,l=e.fbo;if(l){var u=t.useProgram(\\\"hillshade\\\");o.activeTexture.set(s.TEXTURE0),s.bindTexture(s.TEXTURE_2D,l.colorAttachment.get());var c=Nr(t,e,r);u.draw(o,s.TRIANGLES,n,i,a,Ct.disabled,c,r.id,t.rasterBoundsBuffer,t.quadTriangleIndexBuffer,t.rasterBoundsSegments)}}function pn(e,r,n,i,a,o,s){var l=e.context,u=l.gl,c=r.dem;if(c&&c.data){var f=c.dim,h=c.stride,p=c.getPixels();if(l.activeTexture.set(u.TEXTURE1),l.pixelStoreUnpackPremultiplyAlpha.set(!1),r.demTexture=r.demTexture||e.getTileTexture(h),r.demTexture){var d=r.demTexture;d.update(p,{premultiply:!1}),d.bind(u.NEAREST,u.CLAMP_TO_EDGE)}else r.demTexture=new t.Texture(l,p,u.RGBA,{premultiply:!1}),r.demTexture.bind(u.NEAREST,u.CLAMP_TO_EDGE);l.activeTexture.set(u.TEXTURE0);var v=r.fbo;if(!v){var g=new t.Texture(l,{width:f,height:f,data:null},u.RGBA);g.bind(u.LINEAR,u.CLAMP_TO_EDGE),(v=r.fbo=l.createFramebuffer(f,f,!0)).colorAttachment.set(g.texture)}l.bindFramebuffer.set(v.framebuffer),l.viewport.set([0,0,f,f]),e.useProgram(\\\"hillshadePrepare\\\").draw(l,u.TRIANGLES,a,o,s,Ct.disabled,jr(r.tileID,c,i),n.id,e.rasterBoundsBuffer,e.quadTriangleIndexBuffer,e.rasterBoundsSegments),r.needsHillshadePrepare=!1}}function dn(e,r,n,i,a){var o=i.paint.get(\\\"raster-fade-duration\\\");if(o>0){var s=t.browser.now(),l=(s-e.timeAdded)/o,u=r?(s-r.timeAdded)/o:-1,c=n.getSource(),f=a.coveringZoomLevel({tileSize:c.tileSize,roundZoom:c.roundZoom}),h=!r||Math.abs(r.tileID.overscaledZ-f)>Math.abs(e.tileID.overscaledZ-f),p=h&&e.refreshedUponExpiration?1:t.clamp(h?l:1-u,0,1);return e.refreshedUponExpiration&&l>=1&&(e.refreshedUponExpiration=!1),r?{opacity:1,mix:1-p}:{opacity:p,mix:0}}return{opacity:1,mix:0}}var vn=new t.Color(1,0,0,1),gn=new t.Color(0,1,0,1),yn=new t.Color(0,0,1,1),mn=new t.Color(1,0,1,1),xn=new t.Color(0,1,1,1);function bn(t){var e=t.transform.padding;_n(t,t.transform.height-(e.top||0),3,vn),_n(t,e.bottom||0,3,gn),wn(t,e.left||0,3,yn),wn(t,t.transform.width-(e.right||0),3,mn);var r=t.transform.centerPoint;!function(t,e,r,n){var i=20,a=2;Tn(t,e-a/2,r-i/2,a,i,n),Tn(t,e-i/2,r-a/2,i,a,n)}(t,r.x,t.transform.height-r.y,xn)}function _n(t,e,r,n){Tn(t,0,e+r/2,t.transform.width,r,n)}function wn(t,e,r,n){Tn(t,e-r/2,0,r,t.transform.height,n)}function Tn(e,r,n,i,a,o){var s=e.context,l=s.gl;l.enable(l.SCISSOR_TEST),l.scissor(r*t.browser.devicePixelRatio,n*t.browser.devicePixelRatio,i*t.browser.devicePixelRatio,a*t.browser.devicePixelRatio),s.clear({color:o}),l.disable(l.SCISSOR_TEST)}function kn(e,r,n){var i=e.context,a=i.gl,o=n.posMatrix,s=e.useProgram(\\\"debug\\\"),l=Mt.disabled,u=Et.disabled,c=e.colorModeForRenderPass(),f=\\\"$debug\\\";i.activeTexture.set(a.TEXTURE0),e.emptyTexture.bind(a.LINEAR,a.CLAMP_TO_EDGE),s.draw(i,a.LINE_STRIP,l,u,c,Ct.disabled,zr(o,t.Color.red),f,e.debugBuffer,e.tileBorderIndexBuffer,e.debugSegments);var h=r.getTileByID(n.key).latestRawTileData,p=h&&h.byteLength||0,d=Math.floor(p/1024),v=r.getTile(n).tileSize,g=512/Math.min(v,512)*(n.overscaledZ/e.transform.zoom)*.5,y=n.canonical.toString();n.overscaledZ!==n.canonical.z&&(y+=\\\" => \\\"+n.overscaledZ),function(t,e){t.initDebugOverlayCanvas();var r=t.debugOverlayCanvas,n=t.context.gl,i=t.debugOverlayCanvas.getContext(\\\"2d\\\");i.clearRect(0,0,r.width,r.height),i.shadowColor=\\\"white\\\",i.shadowBlur=2,i.lineWidth=1.5,i.strokeStyle=\\\"white\\\",i.textBaseline=\\\"top\\\",i.font=\\\"bold 36px Open Sans, sans-serif\\\",i.fillText(e,5,5),i.strokeText(e,5,5),t.debugOverlayTexture.update(r),t.debugOverlayTexture.bind(n.LINEAR,n.CLAMP_TO_EDGE)}(e,y+\\\" \\\"+d+\\\"kb\\\"),s.draw(i,a.TRIANGLES,l,u,Lt.alphaBlended,Ct.disabled,zr(o,t.Color.transparent,g),f,e.debugBuffer,e.quadTriangleIndexBuffer,e.debugSegments)}var An={symbol:function(e,r,n,i,a){if(\\\"translucent\\\"===e.renderPass){var o=Et.disabled,s=e.colorModeForRenderPass();n.layout.get(\\\"text-variable-anchor\\\")&&function(e,r,n,i,a,o,s){for(var l=r.transform,u=\\\"map\\\"===a,c=\\\"map\\\"===o,f=0,h=e;f<h.length;f+=1){var p=h[f],d=i.getTile(p),v=d.getBucket(n);if(v&&v.text&&v.text.segments.get().length){var g=v.textSizeData,y=t.evaluateSizeForZoom(g,l.zoom),m=ge(d,1,r.transform.zoom),x=te(p.posMatrix,c,u,r.transform,m),b=\\\"none\\\"!==n.layout.get(\\\"icon-text-fit\\\")&&v.hasIconData();if(y){var _=Math.pow(2,l.zoom-d.tileID.overscaledZ);on(v,u,c,s,t.symbolSize,l,x,p.posMatrix,_,y,b)}}}}(i,e,n,r,n.layout.get(\\\"text-rotation-alignment\\\"),n.layout.get(\\\"text-pitch-alignment\\\"),a),0!==n.paint.get(\\\"icon-opacity\\\").constantOr(1)&&ln(e,r,n,i,!1,n.paint.get(\\\"icon-translate\\\"),n.paint.get(\\\"icon-translate-anchor\\\"),n.layout.get(\\\"icon-rotation-alignment\\\"),n.layout.get(\\\"icon-pitch-alignment\\\"),n.layout.get(\\\"icon-keep-upright\\\"),o,s),0!==n.paint.get(\\\"text-opacity\\\").constantOr(1)&&ln(e,r,n,i,!0,n.paint.get(\\\"text-translate\\\"),n.paint.get(\\\"text-translate-anchor\\\"),n.layout.get(\\\"text-rotation-alignment\\\"),n.layout.get(\\\"text-pitch-alignment\\\"),n.layout.get(\\\"text-keep-upright\\\"),o,s),r.map.showCollisionBoxes&&(rn(e,r,n,i,n.paint.get(\\\"text-translate\\\"),n.paint.get(\\\"text-translate-anchor\\\"),!0),rn(e,r,n,i,n.paint.get(\\\"icon-translate\\\"),n.paint.get(\\\"icon-translate-anchor\\\"),!1))}},circle:function(e,r,n,i){if(\\\"translucent\\\"===e.renderPass){var a=n.paint.get(\\\"circle-opacity\\\"),o=n.paint.get(\\\"circle-stroke-width\\\"),s=n.paint.get(\\\"circle-stroke-opacity\\\"),l=void 0!==n.layout.get(\\\"circle-sort-key\\\").constantOr(1);if(0!==a.constantOr(1)||0!==o.constantOr(1)&&0!==s.constantOr(1)){for(var u=e.context,c=u.gl,f=e.depthModeForSublayer(0,Mt.ReadOnly),h=Et.disabled,p=e.colorModeForRenderPass(),d=[],v=0;v<i.length;v++){var g=i[v],y=r.getTile(g),m=y.getBucket(n);if(m){var x=m.programConfigurations.get(n.id),b={programConfiguration:x,program:e.useProgram(\\\"circle\\\",x),layoutVertexBuffer:m.layoutVertexBuffer,indexBuffer:m.indexBuffer,uniformValues:Or(e,g,y,n)};if(l)for(var _=0,w=m.segments.get();_<w.length;_+=1){var T=w[_];d.push({segments:new t.SegmentVector([T]),sortKey:T.sortKey,state:b})}else d.push({segments:m.segments,sortKey:0,state:b})}}l&&d.sort((function(t,e){return t.sortKey-e.sortKey}));for(var k=0,A=d;k<A.length;k+=1){var M=A[k],S=M.state,E=S.programConfiguration,L=S.program,C=S.layoutVertexBuffer,P=S.indexBuffer,O=S.uniformValues,I=M.segments;L.draw(u,c.TRIANGLES,f,h,p,Ct.disabled,O,n.id,C,P,I,n.paint,e.transform.zoom,E)}}}},heatmap:function(e,r,n,i){if(0!==n.paint.get(\\\"heatmap-opacity\\\"))if(\\\"offscreen\\\"===e.renderPass){var a=e.context,o=a.gl,s=Et.disabled,l=new Lt([o.ONE,o.ONE],t.Color.transparent,[!0,!0,!0,!0]);(function(t,e,r){var n=t.gl;t.activeTexture.set(n.TEXTURE1),t.viewport.set([0,0,e.width/4,e.height/4]);var i=r.heatmapFbo;if(i)n.bindTexture(n.TEXTURE_2D,i.colorAttachment.get()),t.bindFramebuffer.set(i.framebuffer);else{var a=n.createTexture();n.bindTexture(n.TEXTURE_2D,a),n.texParameteri(n.TEXTURE_2D,n.TEXTURE_WRAP_S,n.CLAMP_TO_EDGE),n.texParameteri(n.TEXTURE_2D,n.TEXTURE_WRAP_T,n.CLAMP_TO_EDGE),n.texParameteri(n.TEXTURE_2D,n.TEXTURE_MIN_FILTER,n.LINEAR),n.texParameteri(n.TEXTURE_2D,n.TEXTURE_MAG_FILTER,n.LINEAR),i=r.heatmapFbo=t.createFramebuffer(e.width/4,e.height/4,!1),function(t,e,r,n){var i=t.gl,a=t.extRenderToTextureHalfFloat?t.extTextureHalfFloat.HALF_FLOAT_OES:i.UNSIGNED_BYTE;i.texImage2D(i.TEXTURE_2D,0,i.RGBA,e.width/4,e.height/4,0,i.RGBA,a,null),n.colorAttachment.set(r)}(t,e,a,i)}})(a,e,n),a.clear({color:t.Color.transparent});for(var u=0;u<i.length;u++){var c=i[u];if(!r.hasRenderableParent(c)){var f=r.getTile(c),h=f.getBucket(n);if(h){var p=h.programConfigurations.get(n.id),d=e.useProgram(\\\"heatmap\\\",p),v=e.transform.zoom;d.draw(a,o.TRIANGLES,Mt.disabled,s,l,Ct.disabled,Fr(c.posMatrix,f,v,n.paint.get(\\\"heatmap-intensity\\\")),n.id,h.layoutVertexBuffer,h.indexBuffer,h.segments,n.paint,e.transform.zoom,p)}}}a.viewport.set([0,0,e.width,e.height])}else\\\"translucent\\\"===e.renderPass&&(e.context.setColorMode(e.colorModeForRenderPass()),function(e,r){var n=e.context,i=n.gl,a=r.heatmapFbo;if(a){n.activeTexture.set(i.TEXTURE0),i.bindTexture(i.TEXTURE_2D,a.colorAttachment.get()),n.activeTexture.set(i.TEXTURE1);var o=r.colorRampTexture;o||(o=r.colorRampTexture=new t.Texture(n,r.colorRamp,i.RGBA)),o.bind(i.LINEAR,i.CLAMP_TO_EDGE),e.useProgram(\\\"heatmapTexture\\\").draw(n,i.TRIANGLES,Mt.disabled,Et.disabled,e.colorModeForRenderPass(),Ct.disabled,Br(e,r,0,1),r.id,e.viewportBuffer,e.quadTriangleIndexBuffer,e.viewportSegments,r.paint,e.transform.zoom)}}(e,n))},line:function(e,r,n,i){if(\\\"translucent\\\"===e.renderPass){var a=n.paint.get(\\\"line-opacity\\\"),o=n.paint.get(\\\"line-width\\\");if(0!==a.constantOr(1)&&0!==o.constantOr(1)){var s=e.depthModeForSublayer(0,Mt.ReadOnly),l=e.colorModeForRenderPass(),u=n.paint.get(\\\"line-dasharray\\\"),c=n.paint.get(\\\"line-pattern\\\"),f=c.constantOr(1),h=n.paint.get(\\\"line-gradient\\\"),p=n.getCrossfadeParameters(),d=f?\\\"linePattern\\\":u?\\\"lineSDF\\\":h?\\\"lineGradient\\\":\\\"line\\\",v=e.context,g=v.gl,y=!0;if(h){v.activeTexture.set(g.TEXTURE0);var m=n.gradientTexture;if(!n.gradient)return;m||(m=n.gradientTexture=new t.Texture(v,n.gradient,g.RGBA)),m.bind(g.LINEAR,g.CLAMP_TO_EDGE)}for(var x=0,b=i;x<b.length;x+=1){var _=b[x],w=r.getTile(_);if(!f||w.patternsLoaded()){var T=w.getBucket(n);if(T){var k=T.programConfigurations.get(n.id),A=e.context.program.get(),M=e.useProgram(d,k),S=y||M.program!==A,E=c.constantOr(null);if(E&&w.imageAtlas){var L=w.imageAtlas,C=L.patternPositions[E.to.toString()],P=L.patternPositions[E.from.toString()];C&&P&&k.setConstantPatternPositions(C,P)}var O=f?Hr(e,w,n,p):u?qr(e,w,n,u,p):h?Vr(e,w,n):Ur(e,w,n);f?(v.activeTexture.set(g.TEXTURE0),w.imageAtlasTexture.bind(g.LINEAR,g.CLAMP_TO_EDGE),k.updatePaintBuffers(p)):u&&(S||e.lineAtlas.dirty)&&(v.activeTexture.set(g.TEXTURE0),e.lineAtlas.bind(v)),M.draw(v,g.TRIANGLES,s,e.stencilModeForClipping(_),l,Ct.disabled,O,n.id,T.layoutVertexBuffer,T.indexBuffer,T.segments,n.paint,e.transform.zoom,k),y=!1}}}}}},fill:function(e,r,n,i){var a=n.paint.get(\\\"fill-color\\\"),o=n.paint.get(\\\"fill-opacity\\\");if(0!==o.constantOr(1)){var s=e.colorModeForRenderPass(),l=n.paint.get(\\\"fill-pattern\\\"),u=e.opaquePassEnabledForLayer()&&!l.constantOr(1)&&1===a.constantOr(t.Color.transparent).a&&1===o.constantOr(0)?\\\"opaque\\\":\\\"translucent\\\";if(e.renderPass===u){var c=e.depthModeForSublayer(1,\\\"opaque\\\"===e.renderPass?Mt.ReadWrite:Mt.ReadOnly);cn(e,r,n,i,c,s,!1)}if(\\\"translucent\\\"===e.renderPass&&n.paint.get(\\\"fill-antialias\\\")){var f=e.depthModeForSublayer(n.getPaintProperty(\\\"fill-outline-color\\\")?2:0,Mt.ReadOnly);cn(e,r,n,i,f,s,!0)}}},\\\"fill-extrusion\\\":function(t,e,r,n){var i=r.paint.get(\\\"fill-extrusion-opacity\\\");if(0!==i&&\\\"translucent\\\"===t.renderPass){var a=new Mt(t.context.gl.LEQUAL,Mt.ReadWrite,t.depthRangeFor3D);if(1!==i||r.paint.get(\\\"fill-extrusion-pattern\\\").constantOr(1))fn(t,e,r,n,a,Et.disabled,Lt.disabled),fn(t,e,r,n,a,t.stencilModeFor3D(),t.colorModeForRenderPass());else{var o=t.colorModeForRenderPass();fn(t,e,r,n,a,Et.disabled,o)}}},hillshade:function(t,e,r,n){if(\\\"offscreen\\\"===t.renderPass||\\\"translucent\\\"===t.renderPass){for(var i=t.context,a=e.getSource().maxzoom,o=t.depthModeForSublayer(0,Mt.ReadOnly),s=t.colorModeForRenderPass(),l=\\\"translucent\\\"===t.renderPass?t.stencilConfigForOverlap(n):[{},n],u=l[0],c=0,f=l[1];c<f.length;c+=1){var h=f[c],p=e.getTile(h);p.needsHillshadePrepare&&\\\"offscreen\\\"===t.renderPass?pn(t,p,r,a,o,Et.disabled,s):\\\"translucent\\\"===t.renderPass&&hn(t,p,r,o,u[h.overscaledZ],s)}i.viewport.set([0,0,t.width,t.height])}},raster:function(t,e,r,n){if(\\\"translucent\\\"===t.renderPass&&0!==r.paint.get(\\\"raster-opacity\\\")&&n.length)for(var i=t.context,a=i.gl,o=e.getSource(),s=t.useProgram(\\\"raster\\\"),l=t.colorModeForRenderPass(),u=o instanceof I?[{},n]:t.stencilConfigForOverlap(n),c=u[0],f=u[1],h=f[f.length-1].overscaledZ,p=!t.options.moving,d=0,v=f;d<v.length;d+=1){var g=v[d],y=t.depthModeForSublayer(g.overscaledZ-h,1===r.paint.get(\\\"raster-opacity\\\")?Mt.ReadWrite:Mt.ReadOnly,a.LESS),m=e.getTile(g),x=t.transform.calculatePosMatrix(g.toUnwrapped(),p);m.registerFadeDuration(r.paint.get(\\\"raster-fade-duration\\\"));var b=e.findLoadedParent(g,0),_=dn(m,b,e,r,t.transform),w=void 0,T=void 0,k=\\\"nearest\\\"===r.paint.get(\\\"raster-resampling\\\")?a.NEAREST:a.LINEAR;i.activeTexture.set(a.TEXTURE0),m.texture.bind(k,a.CLAMP_TO_EDGE,a.LINEAR_MIPMAP_NEAREST),i.activeTexture.set(a.TEXTURE1),b?(b.texture.bind(k,a.CLAMP_TO_EDGE,a.LINEAR_MIPMAP_NEAREST),w=Math.pow(2,b.tileID.overscaledZ-m.tileID.overscaledZ),T=[m.tileID.canonical.x*w%1,m.tileID.canonical.y*w%1]):m.texture.bind(k,a.CLAMP_TO_EDGE,a.LINEAR_MIPMAP_NEAREST);var A=Yr(x,T||[0,0],w||1,_,r);o instanceof I?s.draw(i,a.TRIANGLES,y,Et.disabled,l,Ct.disabled,A,r.id,o.boundsBuffer,t.quadTriangleIndexBuffer,o.boundsSegments):s.draw(i,a.TRIANGLES,y,c[g.overscaledZ],l,Ct.disabled,A,r.id,t.rasterBoundsBuffer,t.quadTriangleIndexBuffer,t.rasterBoundsSegments)}},background:function(t,e,r){var n=r.paint.get(\\\"background-color\\\"),i=r.paint.get(\\\"background-opacity\\\");if(0!==i){var a=t.context,o=a.gl,s=t.transform,l=s.tileSize,u=r.paint.get(\\\"background-pattern\\\");if(!t.isPatternMissing(u)){var c=!u&&1===n.a&&1===i&&t.opaquePassEnabledForLayer()?\\\"opaque\\\":\\\"translucent\\\";if(t.renderPass===c){var f=Et.disabled,h=t.depthModeForSublayer(0,\\\"opaque\\\"===c?Mt.ReadWrite:Mt.ReadOnly),p=t.colorModeForRenderPass(),d=t.useProgram(u?\\\"backgroundPattern\\\":\\\"background\\\"),v=s.coveringTiles({tileSize:l});u&&(a.activeTexture.set(o.TEXTURE0),t.imageManager.bind(t.context));for(var g=r.getCrossfadeParameters(),y=0,m=v;y<m.length;y+=1){var x=m[y],b=t.transform.calculatePosMatrix(x.toUnwrapped()),_=u?tn(b,i,t,u,{tileID:x,tileSize:l},g):Qr(b,i,n);d.draw(a,o.TRIANGLES,h,f,p,Ct.disabled,_,r.id,t.tileExtentBuffer,t.quadTriangleIndexBuffer,t.tileExtentSegments)}}}}},debug:function(t,e,r){for(var n=0;n<r.length;n++)kn(t,e,r[n])},custom:function(t,e,r){var n=t.context,i=r.implementation;if(\\\"offscreen\\\"===t.renderPass){var a=i.prerender;a&&(t.setCustomLayerDefaults(),n.setColorMode(t.colorModeForRenderPass()),a.call(i,n.gl,t.transform.customLayerMatrix()),n.setDirty(),t.setBaseState())}else if(\\\"translucent\\\"===t.renderPass){t.setCustomLayerDefaults(),n.setColorMode(t.colorModeForRenderPass()),n.setStencilMode(Et.disabled);var o=\\\"3d\\\"===i.renderingMode?new Mt(t.context.gl.LEQUAL,Mt.ReadWrite,t.depthRangeFor3D):t.depthModeForSublayer(0,Mt.ReadOnly);n.setDepthMode(o),i.render(n.gl,t.transform.customLayerMatrix()),n.setDirty(),t.setBaseState(),n.bindFramebuffer.set(null)}}},Mn=function(t,e){this.context=new Pt(t),this.transform=e,this._tileTextures={},this.setup(),this.numSublayers=Ot.maxUnderzooming+Ot.maxOverzooming+1,this.depthEpsilon=1/Math.pow(2,16),this.crossTileSymbolIndex=new Ve,this.gpuTimers={}};Mn.prototype.resize=function(e,r){if(this.width=e*t.browser.devicePixelRatio,this.height=r*t.browser.devicePixelRatio,this.context.viewport.set([0,0,this.width,this.height]),this.style)for(var n=0,i=this.style._order;n<i.length;n+=1){var a=i[n];this.style._layers[a].resize()}},Mn.prototype.setup=function(){var e=this.context,r=new t.StructArrayLayout2i4;r.emplaceBack(0,0),r.emplaceBack(t.EXTENT,0),r.emplaceBack(0,t.EXTENT),r.emplaceBack(t.EXTENT,t.EXTENT),this.tileExtentBuffer=e.createVertexBuffer(r,We.members),this.tileExtentSegments=t.SegmentVector.simpleSegment(0,0,4,2);var n=new t.StructArrayLayout2i4;n.emplaceBack(0,0),n.emplaceBack(t.EXTENT,0),n.emplaceBack(0,t.EXTENT),n.emplaceBack(t.EXTENT,t.EXTENT),this.debugBuffer=e.createVertexBuffer(n,We.members),this.debugSegments=t.SegmentVector.simpleSegment(0,0,4,5);var i=new t.StructArrayLayout4i8;i.emplaceBack(0,0,0,0),i.emplaceBack(t.EXTENT,0,t.EXTENT,0),i.emplaceBack(0,t.EXTENT,0,t.EXTENT),i.emplaceBack(t.EXTENT,t.EXTENT,t.EXTENT,t.EXTENT),this.rasterBoundsBuffer=e.createVertexBuffer(i,O.members),this.rasterBoundsSegments=t.SegmentVector.simpleSegment(0,0,4,2);var a=new t.StructArrayLayout2i4;a.emplaceBack(0,0),a.emplaceBack(1,0),a.emplaceBack(0,1),a.emplaceBack(1,1),this.viewportBuffer=e.createVertexBuffer(a,We.members),this.viewportSegments=t.SegmentVector.simpleSegment(0,0,4,2);var o=new t.StructArrayLayout1ui2;o.emplaceBack(0),o.emplaceBack(1),o.emplaceBack(3),o.emplaceBack(2),o.emplaceBack(0),this.tileBorderIndexBuffer=e.createIndexBuffer(o);var s=new t.StructArrayLayout3ui6;s.emplaceBack(0,1,2),s.emplaceBack(2,1,3),this.quadTriangleIndexBuffer=e.createIndexBuffer(s),this.emptyTexture=new t.Texture(e,{width:1,height:1,data:new Uint8Array([0,0,0,0])},e.gl.RGBA);var l=this.context.gl;this.stencilClearMode=new Et({func:l.ALWAYS,mask:0},0,255,l.ZERO,l.ZERO,l.ZERO)},Mn.prototype.clearStencil=function(){var e=this.context,r=e.gl;this.nextStencilID=1,this.currentStencilSource=void 0;var n=t.create();t.ortho(n,0,this.width,this.height,0,0,1),t.scale(n,n,[r.drawingBufferWidth,r.drawingBufferHeight,0]),this.useProgram(\\\"clippingMask\\\").draw(e,r.TRIANGLES,Mt.disabled,this.stencilClearMode,Lt.disabled,Ct.disabled,Rr(n),\\\"$clipping\\\",this.viewportBuffer,this.quadTriangleIndexBuffer,this.viewportSegments)},Mn.prototype._renderTileClippingMasks=function(t,e){if(this.currentStencilSource!==t.source&&t.isTileClipped()&&e&&e.length){this.currentStencilSource=t.source;var r=this.context,n=r.gl;this.nextStencilID+e.length>256&&this.clearStencil(),r.setColorMode(Lt.disabled),r.setDepthMode(Mt.disabled);var i=this.useProgram(\\\"clippingMask\\\");this._tileClippingMaskIDs={};for(var a=0,o=e;a<o.length;a+=1){var s=o[a],l=this._tileClippingMaskIDs[s.key]=this.nextStencilID++;i.draw(r,n.TRIANGLES,Mt.disabled,new Et({func:n.ALWAYS,mask:0},l,255,n.KEEP,n.KEEP,n.REPLACE),Lt.disabled,Ct.disabled,Rr(s.posMatrix),\\\"$clipping\\\",this.tileExtentBuffer,this.quadTriangleIndexBuffer,this.tileExtentSegments)}}},Mn.prototype.stencilModeFor3D=function(){this.currentStencilSource=void 0,this.nextStencilID+1>256&&this.clearStencil();var t=this.nextStencilID++,e=this.context.gl;return new Et({func:e.NOTEQUAL,mask:255},t,255,e.KEEP,e.KEEP,e.REPLACE)},Mn.prototype.stencilModeForClipping=function(t){var e=this.context.gl;return new Et({func:e.EQUAL,mask:255},this._tileClippingMaskIDs[t.key],0,e.KEEP,e.KEEP,e.REPLACE)},Mn.prototype.stencilConfigForOverlap=function(t){var e,r=this.context.gl,n=t.sort((function(t,e){return e.overscaledZ-t.overscaledZ})),i=n[n.length-1].overscaledZ,a=n[0].overscaledZ-i+1;if(a>1){this.currentStencilSource=void 0,this.nextStencilID+a>256&&this.clearStencil();for(var o={},s=0;s<a;s++)o[s+i]=new Et({func:r.GEQUAL,mask:255},s+this.nextStencilID,255,r.KEEP,r.KEEP,r.REPLACE);return this.nextStencilID+=a,[o,n]}return[(e={},e[i]=Et.disabled,e),n]},Mn.prototype.colorModeForRenderPass=function(){var e=this.context.gl;if(this._showOverdrawInspector){var r=1/8;return new Lt([e.CONSTANT_COLOR,e.ONE],new t.Color(r,r,r,0),[!0,!0,!0,!0])}return\\\"opaque\\\"===this.renderPass?Lt.unblended:Lt.alphaBlended},Mn.prototype.depthModeForSublayer=function(t,e,r){if(!this.opaquePassEnabledForLayer())return Mt.disabled;var n=1-((1+this.currentLayer)*this.numSublayers+t)*this.depthEpsilon;return new Mt(r||this.context.gl.LEQUAL,e,[n,n])},Mn.prototype.opaquePassEnabledForLayer=function(){return this.currentLayer<this.opaquePassCutoff},Mn.prototype.render=function(e,r){var n=this;this.style=e,this.options=r,this.lineAtlas=e.lineAtlas,this.imageManager=e.imageManager,this.glyphManager=e.glyphManager,this.symbolFadeChange=e.placement.symbolFadeChange(t.browser.now()),this.imageManager.beginFrame();var i=this.style._order,a=this.style.sourceCaches;for(var o in a){var s=a[o];s.used&&s.prepare(this.context)}var l,u,c={},f={},h={};for(var p in a){var d=a[p];c[p]=d.getVisibleCoordinates(),f[p]=c[p].slice().reverse(),h[p]=d.getVisibleCoordinates(!0).reverse()}this.opaquePassCutoff=1/0;for(var v=0;v<i.length;v++){var g=i[v];if(this.style._layers[g].is3D()){this.opaquePassCutoff=v;break}}this.renderPass=\\\"offscreen\\\";for(var y=0,m=i;y<m.length;y+=1){var x=m[y],b=this.style._layers[x];if(b.hasOffscreenPass()&&!b.isHidden(this.transform.zoom)){var _=f[b.source];(\\\"custom\\\"===b.type||_.length)&&this.renderLayer(this,a[b.source],b,_)}}for(this.context.bindFramebuffer.set(null),this.context.clear({color:r.showOverdrawInspector?t.Color.black:t.Color.transparent,depth:1}),this.clearStencil(),this._showOverdrawInspector=r.showOverdrawInspector,this.depthRangeFor3D=[0,1-(e._order.length+2)*this.numSublayers*this.depthEpsilon],this.renderPass=\\\"opaque\\\",this.currentLayer=i.length-1;this.currentLayer>=0;this.currentLayer--){var w=this.style._layers[i[this.currentLayer]],T=a[w.source],k=c[w.source];this._renderTileClippingMasks(w,k),this.renderLayer(this,T,w,k)}for(this.renderPass=\\\"translucent\\\",this.currentLayer=0;this.currentLayer<i.length;this.currentLayer++){var A=this.style._layers[i[this.currentLayer]],M=a[A.source],S=(\\\"symbol\\\"===A.type?h:f)[A.source];this._renderTileClippingMasks(A,c[A.source]),this.renderLayer(this,M,A,S)}this.options.showTileBoundaries&&(t.values(this.style._layers).forEach((function(t){t.source&&!t.isHidden(n.transform.zoom)&&(t.source!==(u&&u.id)&&(u=n.style.sourceCaches[t.source]),(!l||l.getSource().maxzoom<u.getSource().maxzoom)&&(l=u))})),l&&An.debug(this,l,l.getVisibleCoordinates())),this.options.showPadding&&bn(this),this.context.setDefault()},Mn.prototype.renderLayer=function(t,e,r,n){r.isHidden(this.transform.zoom)||(\\\"background\\\"===r.type||\\\"custom\\\"===r.type||n.length)&&(this.id=r.id,this.gpuTimingStart(r),An[r.type](t,e,r,n,this.style.placement.variableOffsets),this.gpuTimingEnd())},Mn.prototype.gpuTimingStart=function(t){if(this.options.gpuTiming){var e=this.context.extTimerQuery,r=this.gpuTimers[t.id];r||(r=this.gpuTimers[t.id]={calls:0,cpuTime:0,query:e.createQueryEXT()}),r.calls++,e.beginQueryEXT(e.TIME_ELAPSED_EXT,r.query)}},Mn.prototype.gpuTimingEnd=function(){if(this.options.gpuTiming){var t=this.context.extTimerQuery;t.endQueryEXT(t.TIME_ELAPSED_EXT)}},Mn.prototype.collectGpuTimers=function(){var t=this.gpuTimers;return this.gpuTimers={},t},Mn.prototype.queryGpuTimers=function(t){var e={};for(var r in t){var n=t[r],i=this.context.extTimerQuery,a=i.getQueryObjectEXT(n.query,i.QUERY_RESULT_EXT)/1e6;i.deleteQueryEXT(n.query),e[r]=a}return e},Mn.prototype.translatePosMatrix=function(e,r,n,i,a){if(!n[0]&&!n[1])return e;var o=a?\\\"map\\\"===i?this.transform.angle:0:\\\"viewport\\\"===i?-this.transform.angle:0;if(o){var s=Math.sin(o),l=Math.cos(o);n=[n[0]*l-n[1]*s,n[0]*s+n[1]*l]}var u=[a?n[0]:ge(r,n[0],this.transform.zoom),a?n[1]:ge(r,n[1],this.transform.zoom),0],c=new Float32Array(16);return t.translate(c,e,u),c},Mn.prototype.saveTileTexture=function(t){var e=this._tileTextures[t.size[0]];e?e.push(t):this._tileTextures[t.size[0]]=[t]},Mn.prototype.getTileTexture=function(t){var e=this._tileTextures[t];return e&&e.length>0?e.pop():null},Mn.prototype.isPatternMissing=function(t){if(!t)return!1;if(!t.from||!t.to)return!0;var e=this.imageManager.getPattern(t.from.toString()),r=this.imageManager.getPattern(t.to.toString());return!e||!r},Mn.prototype.useProgram=function(t,e){this.cache=this.cache||{};var r=\\\"\\\"+t+(e?e.cacheKey:\\\"\\\")+(this._showOverdrawInspector?\\\"/overdraw\\\":\\\"\\\");return this.cache[r]||(this.cache[r]=new kr(this.context,wr[t],e,en[t],this._showOverdrawInspector)),this.cache[r]},Mn.prototype.setCustomLayerDefaults=function(){this.context.unbindVAO(),this.context.cullFace.setDefault(),this.context.activeTexture.setDefault(),this.context.pixelStoreUnpack.setDefault(),this.context.pixelStoreUnpackPremultiplyAlpha.setDefault(),this.context.pixelStoreUnpackFlipY.setDefault()},Mn.prototype.setBaseState=function(){var t=this.context.gl;this.context.cullFace.set(!1),this.context.viewport.set([0,0,this.width,this.height]),this.context.blendEquation.set(t.FUNC_ADD)},Mn.prototype.initDebugOverlayCanvas=function(){if(null==this.debugOverlayCanvas){this.debugOverlayCanvas=t.window.document.createElement(\\\"canvas\\\"),this.debugOverlayCanvas.width=512,this.debugOverlayCanvas.height=512;var e=this.context.gl;this.debugOverlayTexture=new t.Texture(this.context,this.debugOverlayCanvas,e.RGBA)}},Mn.prototype.destroy=function(){this.emptyTexture.destroy(),this.debugOverlayTexture&&this.debugOverlayTexture.destroy()};var Sn=function(t,e){this.points=t,this.planes=e};Sn.fromInvProjectionMatrix=function(e,r,n){var i=Math.pow(2,n),a=[[-1,1,-1,1],[1,1,-1,1],[1,-1,-1,1],[-1,-1,-1,1],[-1,1,1,1],[1,1,1,1],[1,-1,1,1],[-1,-1,1,1]].map((function(r){return t.transformMat4([],r,e)})).map((function(e){return t.scale$1([],e,1/e[3]/r*i)})),o=[[0,1,2],[6,5,4],[0,3,7],[2,1,5],[3,2,6],[0,4,5]].map((function(e){var r=t.sub([],a[e[0]],a[e[1]]),n=t.sub([],a[e[2]],a[e[1]]),i=t.normalize([],t.cross([],r,n)),o=-t.dot(i,a[e[1]]);return i.concat(o)}));return new Sn(a,o)};var En=function(e,r){this.min=e,this.max=r,this.center=t.scale$2([],t.add([],this.min,this.max),.5)};En.prototype.quadrant=function(e){for(var r=[e%2==0,e<2],n=t.clone$2(this.min),i=t.clone$2(this.max),a=0;a<r.length;a++)n[a]=r[a]?this.min[a]:this.center[a],i[a]=r[a]?this.center[a]:this.max[a];return i[2]=this.max[2],new En(n,i)},En.prototype.distanceX=function(t){return Math.max(Math.min(this.max[0],t[0]),this.min[0])-t[0]},En.prototype.distanceY=function(t){return Math.max(Math.min(this.max[1],t[1]),this.min[1])-t[1]},En.prototype.intersects=function(e){for(var r=[[this.min[0],this.min[1],0,1],[this.max[0],this.min[1],0,1],[this.max[0],this.max[1],0,1],[this.min[0],this.max[1],0,1]],n=!0,i=0;i<e.planes.length;i++){for(var a=e.planes[i],o=0,s=0;s<r.length;s++)o+=t.dot$1(a,r[s])>=0;if(0===o)return 0;o!==r.length&&(n=!1)}if(n)return 2;for(var l=0;l<3;l++){for(var u=Number.MAX_VALUE,c=-Number.MAX_VALUE,f=0;f<e.points.length;f++){var h=e.points[f][l]-this.min[l];u=Math.min(u,h),c=Math.max(c,h)}if(c<0||u>this.max[l]-this.min[l])return 0}return 1};var Ln=function(t,e,r,n){if(void 0===t&&(t=0),void 0===e&&(e=0),void 0===r&&(r=0),void 0===n&&(n=0),isNaN(t)||t<0||isNaN(e)||e<0||isNaN(r)||r<0||isNaN(n)||n<0)throw new Error(\\\"Invalid value for edge-insets, top, bottom, left and right must all be numbers\\\");this.top=t,this.bottom=e,this.left=r,this.right=n};Ln.prototype.interpolate=function(e,r,n){return null!=r.top&&null!=e.top&&(this.top=t.number(e.top,r.top,n)),null!=r.bottom&&null!=e.bottom&&(this.bottom=t.number(e.bottom,r.bottom,n)),null!=r.left&&null!=e.left&&(this.left=t.number(e.left,r.left,n)),null!=r.right&&null!=e.right&&(this.right=t.number(e.right,r.right,n)),this},Ln.prototype.getCenter=function(e,r){var n=t.clamp((this.left+e-this.right)/2,0,e),i=t.clamp((this.top+r-this.bottom)/2,0,r);return new t.Point(n,i)},Ln.prototype.equals=function(t){return this.top===t.top&&this.bottom===t.bottom&&this.left===t.left&&this.right===t.right},Ln.prototype.clone=function(){return new Ln(this.top,this.bottom,this.left,this.right)},Ln.prototype.toJSON=function(){return{top:this.top,bottom:this.bottom,left:this.left,right:this.right}};var Cn=function(e,r,n,i,a){this.tileSize=512,this.maxValidLatitude=85.051129,this._renderWorldCopies=void 0===a||a,this._minZoom=e||0,this._maxZoom=r||22,this._minPitch=null==n?0:n,this._maxPitch=null==i?60:i,this.setMaxBounds(),this.width=0,this.height=0,this._center=new t.LngLat(0,0),this.zoom=0,this.angle=0,this._fov=.6435011087932844,this._pitch=0,this._unmodified=!0,this._edgeInsets=new Ln,this._posMatrixCache={},this._alignedPosMatrixCache={}},Pn={minZoom:{configurable:!0},maxZoom:{configurable:!0},minPitch:{configurable:!0},maxPitch:{configurable:!0},renderWorldCopies:{configurable:!0},worldSize:{configurable:!0},centerOffset:{configurable:!0},size:{configurable:!0},bearing:{configurable:!0},pitch:{configurable:!0},fov:{configurable:!0},zoom:{configurable:!0},center:{configurable:!0},padding:{configurable:!0},centerPoint:{configurable:!0},unmodified:{configurable:!0},point:{configurable:!0}};Cn.prototype.clone=function(){var t=new Cn(this._minZoom,this._maxZoom,this._minPitch,this.maxPitch,this._renderWorldCopies);return t.tileSize=this.tileSize,t.latRange=this.latRange,t.width=this.width,t.height=this.height,t._center=this._center,t.zoom=this.zoom,t.angle=this.angle,t._fov=this._fov,t._pitch=this._pitch,t._unmodified=this._unmodified,t._edgeInsets=this._edgeInsets.clone(),t._calcMatrices(),t},Pn.minZoom.get=function(){return this._minZoom},Pn.minZoom.set=function(t){this._minZoom!==t&&(this._minZoom=t,this.zoom=Math.max(this.zoom,t))},Pn.maxZoom.get=function(){return this._maxZoom},Pn.maxZoom.set=function(t){this._maxZoom!==t&&(this._maxZoom=t,this.zoom=Math.min(this.zoom,t))},Pn.minPitch.get=function(){return this._minPitch},Pn.minPitch.set=function(t){this._minPitch!==t&&(this._minPitch=t,this.pitch=Math.max(this.pitch,t))},Pn.maxPitch.get=function(){return this._maxPitch},Pn.maxPitch.set=function(t){this._maxPitch!==t&&(this._maxPitch=t,this.pitch=Math.min(this.pitch,t))},Pn.renderWorldCopies.get=function(){return this._renderWorldCopies},Pn.renderWorldCopies.set=function(t){void 0===t?t=!0:null===t&&(t=!1),this._renderWorldCopies=t},Pn.worldSize.get=function(){return this.tileSize*this.scale},Pn.centerOffset.get=function(){return this.centerPoint._sub(this.size._div(2))},Pn.size.get=function(){return new t.Point(this.width,this.height)},Pn.bearing.get=function(){return-this.angle/Math.PI*180},Pn.bearing.set=function(e){var r=-t.wrap(e,-180,180)*Math.PI/180;this.angle!==r&&(this._unmodified=!1,this.angle=r,this._calcMatrices(),this.rotationMatrix=t.create$2(),t.rotate(this.rotationMatrix,this.rotationMatrix,this.angle))},Pn.pitch.get=function(){return this._pitch/Math.PI*180},Pn.pitch.set=function(e){var r=t.clamp(e,this.minPitch,this.maxPitch)/180*Math.PI;this._pitch!==r&&(this._unmodified=!1,this._pitch=r,this._calcMatrices())},Pn.fov.get=function(){return this._fov/Math.PI*180},Pn.fov.set=function(t){t=Math.max(.01,Math.min(60,t)),this._fov!==t&&(this._unmodified=!1,this._fov=t/180*Math.PI,this._calcMatrices())},Pn.zoom.get=function(){return this._zoom},Pn.zoom.set=function(t){var e=Math.min(Math.max(t,this.minZoom),this.maxZoom);this._zoom!==e&&(this._unmodified=!1,this._zoom=e,this.scale=this.zoomScale(e),this.tileZoom=Math.floor(e),this.zoomFraction=e-this.tileZoom,this._constrain(),this._calcMatrices())},Pn.center.get=function(){return this._center},Pn.center.set=function(t){t.lat===this._center.lat&&t.lng===this._center.lng||(this._unmodified=!1,this._center=t,this._constrain(),this._calcMatrices())},Pn.padding.get=function(){return this._edgeInsets.toJSON()},Pn.padding.set=function(t){this._edgeInsets.equals(t)||(this._unmodified=!1,this._edgeInsets.interpolate(this._edgeInsets,t,1),this._calcMatrices())},Pn.centerPoint.get=function(){return this._edgeInsets.getCenter(this.width,this.height)},Cn.prototype.isPaddingEqual=function(t){return this._edgeInsets.equals(t)},Cn.prototype.interpolatePadding=function(t,e,r){this._unmodified=!1,this._edgeInsets.interpolate(t,e,r),this._constrain(),this._calcMatrices()},Cn.prototype.coveringZoomLevel=function(t){var e=(t.roundZoom?Math.round:Math.floor)(this.zoom+this.scaleZoom(this.tileSize/t.tileSize));return Math.max(0,e)},Cn.prototype.getVisibleUnwrappedCoordinates=function(e){var r=[new t.UnwrappedTileID(0,e)];if(this._renderWorldCopies)for(var n=this.pointCoordinate(new t.Point(0,0)),i=this.pointCoordinate(new t.Point(this.width,0)),a=this.pointCoordinate(new t.Point(this.width,this.height)),o=this.pointCoordinate(new t.Point(0,this.height)),s=Math.floor(Math.min(n.x,i.x,a.x,o.x)),l=Math.floor(Math.max(n.x,i.x,a.x,o.x)),u=s-1;u<=l+1;u++)0!==u&&r.push(new t.UnwrappedTileID(u,e));return r},Cn.prototype.coveringTiles=function(e){var r=this.coveringZoomLevel(e),n=r;if(void 0!==e.minzoom&&r<e.minzoom)return[];void 0!==e.maxzoom&&r>e.maxzoom&&(r=e.maxzoom);var i=t.MercatorCoordinate.fromLngLat(this.center),a=Math.pow(2,r),o=[a*i.x,a*i.y,0],s=Sn.fromInvProjectionMatrix(this.invProjMatrix,this.worldSize,r),l=e.minzoom||0;this.pitch<=60&&this._edgeInsets.top<.1&&(l=r);var u=function(t){return{aabb:new En([t*a,0,0],[(t+1)*a,a,0]),zoom:0,x:0,y:0,wrap:t,fullyVisible:!1}},c=[],f=[],h=r,p=e.reparseOverscaled?n:r;if(this._renderWorldCopies)for(var d=1;d<=3;d++)c.push(u(-d)),c.push(u(d));for(c.push(u(0));c.length>0;){var v=c.pop(),g=v.x,y=v.y,m=v.fullyVisible;if(!m){var x=v.aabb.intersects(s);if(0===x)continue;m=2===x}var b=v.aabb.distanceX(o),_=v.aabb.distanceY(o),w=Math.max(Math.abs(b),Math.abs(_)),T=3+(1<<h-v.zoom)-2;if(v.zoom===h||w>T&&v.zoom>=l)f.push({tileID:new t.OverscaledTileID(v.zoom===h?p:v.zoom,v.wrap,v.zoom,g,y),distanceSq:t.sqrLen([o[0]-.5-g,o[1]-.5-y])});else for(var k=0;k<4;k++){var A=(g<<1)+k%2,M=(y<<1)+(k>>1);c.push({aabb:v.aabb.quadrant(k),zoom:v.zoom+1,x:A,y:M,wrap:v.wrap,fullyVisible:m})}}return f.sort((function(t,e){return t.distanceSq-e.distanceSq})).map((function(t){return t.tileID}))},Cn.prototype.resize=function(t,e){this.width=t,this.height=e,this.pixelsToGLUnits=[2/t,-2/e],this._constrain(),this._calcMatrices()},Pn.unmodified.get=function(){return this._unmodified},Cn.prototype.zoomScale=function(t){return Math.pow(2,t)},Cn.prototype.scaleZoom=function(t){return Math.log(t)/Math.LN2},Cn.prototype.project=function(e){var r=t.clamp(e.lat,-this.maxValidLatitude,this.maxValidLatitude);return new t.Point(t.mercatorXfromLng(e.lng)*this.worldSize,t.mercatorYfromLat(r)*this.worldSize)},Cn.prototype.unproject=function(e){return new t.MercatorCoordinate(e.x/this.worldSize,e.y/this.worldSize).toLngLat()},Pn.point.get=function(){return this.project(this.center)},Cn.prototype.setLocationAtPoint=function(e,r){var n=this.pointCoordinate(r),i=this.pointCoordinate(this.centerPoint),a=this.locationCoordinate(e),o=new t.MercatorCoordinate(a.x-(n.x-i.x),a.y-(n.y-i.y));this.center=this.coordinateLocation(o),this._renderWorldCopies&&(this.center=this.center.wrap())},Cn.prototype.locationPoint=function(t){return this.coordinatePoint(this.locationCoordinate(t))},Cn.prototype.pointLocation=function(t){return this.coordinateLocation(this.pointCoordinate(t))},Cn.prototype.locationCoordinate=function(e){return t.MercatorCoordinate.fromLngLat(e)},Cn.prototype.coordinateLocation=function(t){return t.toLngLat()},Cn.prototype.pointCoordinate=function(e){var r=[e.x,e.y,0,1],n=[e.x,e.y,1,1];t.transformMat4(r,r,this.pixelMatrixInverse),t.transformMat4(n,n,this.pixelMatrixInverse);var i=r[3],a=n[3],o=r[0]/i,s=n[0]/a,l=r[1]/i,u=n[1]/a,c=r[2]/i,f=n[2]/a,h=c===f?0:(0-c)/(f-c);return new t.MercatorCoordinate(t.number(o,s,h)/this.worldSize,t.number(l,u,h)/this.worldSize)},Cn.prototype.coordinatePoint=function(e){var r=[e.x*this.worldSize,e.y*this.worldSize,0,1];return t.transformMat4(r,r,this.pixelMatrix),new t.Point(r[0]/r[3],r[1]/r[3])},Cn.prototype.getBounds=function(){return(new t.LngLatBounds).extend(this.pointLocation(new t.Point(0,0))).extend(this.pointLocation(new t.Point(this.width,0))).extend(this.pointLocation(new t.Point(this.width,this.height))).extend(this.pointLocation(new t.Point(0,this.height)))},Cn.prototype.getMaxBounds=function(){return this.latRange&&2===this.latRange.length&&this.lngRange&&2===this.lngRange.length?new t.LngLatBounds([this.lngRange[0],this.latRange[0]],[this.lngRange[1],this.latRange[1]]):null},Cn.prototype.setMaxBounds=function(t){t?(this.lngRange=[t.getWest(),t.getEast()],this.latRange=[t.getSouth(),t.getNorth()],this._constrain()):(this.lngRange=null,this.latRange=[-this.maxValidLatitude,this.maxValidLatitude])},Cn.prototype.calculatePosMatrix=function(e,r){void 0===r&&(r=!1);var n=e.key,i=r?this._alignedPosMatrixCache:this._posMatrixCache;if(i[n])return i[n];var a=e.canonical,o=this.worldSize/this.zoomScale(a.z),s=a.x+Math.pow(2,a.z)*e.wrap,l=t.identity(new Float64Array(16));return t.translate(l,l,[s*o,a.y*o,0]),t.scale(l,l,[o/t.EXTENT,o/t.EXTENT,1]),t.multiply(l,r?this.alignedProjMatrix:this.projMatrix,l),i[n]=new Float32Array(l),i[n]},Cn.prototype.customLayerMatrix=function(){return this.mercatorMatrix.slice()},Cn.prototype._constrain=function(){if(this.center&&this.width&&this.height&&!this._constraining){this._constraining=!0;var e,r,n,i,a=-90,o=90,s=-180,l=180,u=this.size,c=this._unmodified;if(this.latRange){var f=this.latRange;a=t.mercatorYfromLat(f[1])*this.worldSize,e=(o=t.mercatorYfromLat(f[0])*this.worldSize)-a<u.y?u.y/(o-a):0}if(this.lngRange){var h=this.lngRange;s=t.mercatorXfromLng(h[0])*this.worldSize,r=(l=t.mercatorXfromLng(h[1])*this.worldSize)-s<u.x?u.x/(l-s):0}var p=this.point,d=Math.max(r||0,e||0);if(d)return this.center=this.unproject(new t.Point(r?(l+s)/2:p.x,e?(o+a)/2:p.y)),this.zoom+=this.scaleZoom(d),this._unmodified=c,void(this._constraining=!1);if(this.latRange){var v=p.y,g=u.y/2;v-g<a&&(i=a+g),v+g>o&&(i=o-g)}if(this.lngRange){var y=p.x,m=u.x/2;y-m<s&&(n=s+m),y+m>l&&(n=l-m)}void 0===n&&void 0===i||(this.center=this.unproject(new t.Point(void 0!==n?n:p.x,void 0!==i?i:p.y))),this._unmodified=c,this._constraining=!1}},Cn.prototype._calcMatrices=function(){if(this.height){var e=this._fov/2,r=this.centerOffset;this.cameraToCenterDistance=.5/Math.tan(e)*this.height;var n=Math.PI/2+this._pitch,i=this._fov*(.5+r.y/this.height),a=Math.sin(i)*this.cameraToCenterDistance/Math.sin(t.clamp(Math.PI-n-i,.01,Math.PI-.01)),o=this.point,s=o.x,l=o.y,u=1.01*(Math.cos(Math.PI/2-this._pitch)*a+this.cameraToCenterDistance),c=this.height/50,f=new Float64Array(16);t.perspective(f,this._fov,this.width/this.height,c,u),f[8]=2*-r.x/this.width,f[9]=2*r.y/this.height,t.scale(f,f,[1,-1,1]),t.translate(f,f,[0,0,-this.cameraToCenterDistance]),t.rotateX(f,f,this._pitch),t.rotateZ(f,f,this.angle),t.translate(f,f,[-s,-l,0]),this.mercatorMatrix=t.scale([],f,[this.worldSize,this.worldSize,this.worldSize]),t.scale(f,f,[1,1,t.mercatorZfromAltitude(1,this.center.lat)*this.worldSize,1]),this.projMatrix=f,this.invProjMatrix=t.invert([],this.projMatrix);var h=this.width%2/2,p=this.height%2/2,d=Math.cos(this.angle),v=Math.sin(this.angle),g=s-Math.round(s)+d*h+v*p,y=l-Math.round(l)+d*p+v*h,m=new Float64Array(f);if(t.translate(m,m,[g>.5?g-1:g,y>.5?y-1:y,0]),this.alignedProjMatrix=m,f=t.create(),t.scale(f,f,[this.width/2,-this.height/2,1]),t.translate(f,f,[1,-1,0]),this.labelPlaneMatrix=f,f=t.create(),t.scale(f,f,[1,-1,1]),t.translate(f,f,[-1,-1,0]),t.scale(f,f,[2/this.width,2/this.height,1]),this.glCoordMatrix=f,this.pixelMatrix=t.multiply(new Float64Array(16),this.labelPlaneMatrix,this.projMatrix),!(f=t.invert(new Float64Array(16),this.pixelMatrix)))throw new Error(\\\"failed to invert matrix\\\");this.pixelMatrixInverse=f,this._posMatrixCache={},this._alignedPosMatrixCache={}}},Cn.prototype.maxPitchScaleFactor=function(){if(!this.pixelMatrixInverse)return 1;var e=this.pointCoordinate(new t.Point(0,0)),r=[e.x*this.worldSize,e.y*this.worldSize,0,1];return t.transformMat4(r,r,this.pixelMatrix)[3]/this.cameraToCenterDistance},Cn.prototype.getCameraPoint=function(){var e=this._pitch,r=Math.tan(e)*(this.cameraToCenterDistance||1);return this.centerPoint.add(new t.Point(0,r))},Cn.prototype.getCameraQueryGeometry=function(e){var r=this.getCameraPoint();if(1===e.length)return[e[0],r];for(var n=r.x,i=r.y,a=r.x,o=r.y,s=0,l=e;s<l.length;s+=1){var u=l[s];n=Math.min(n,u.x),i=Math.min(i,u.y),a=Math.max(a,u.x),o=Math.max(o,u.y)}return[new t.Point(n,i),new t.Point(a,i),new t.Point(a,o),new t.Point(n,o),new t.Point(n,i)]},Object.defineProperties(Cn.prototype,Pn);var On=function(e){var r,n,i,a,o;this._hashName=e&&encodeURIComponent(e),t.bindAll([\\\"_getCurrentHash\\\",\\\"_onHashChange\\\",\\\"_updateHash\\\"],this),this._updateHash=(r=this._updateHashUnthrottled.bind(this),n=300,i=!1,a=null,o=function(){a=null,i&&(r(),a=setTimeout(o,n),i=!1)},function(){return i=!0,a||o(),a})};On.prototype.addTo=function(e){return this._map=e,t.window.addEventListener(\\\"hashchange\\\",this._onHashChange,!1),this._map.on(\\\"moveend\\\",this._updateHash),this},On.prototype.remove=function(){return t.window.removeEventListener(\\\"hashchange\\\",this._onHashChange,!1),this._map.off(\\\"moveend\\\",this._updateHash),clearTimeout(this._updateHash()),delete this._map,this},On.prototype.getHashString=function(e){var r=this._map.getCenter(),n=Math.round(100*this._map.getZoom())/100,i=Math.ceil((n*Math.LN2+Math.log(512/360/.5))/Math.LN10),a=Math.pow(10,i),o=Math.round(r.lng*a)/a,s=Math.round(r.lat*a)/a,l=this._map.getBearing(),u=this._map.getPitch(),c=\\\"\\\";if(c+=e?\\\"/\\\"+o+\\\"/\\\"+s+\\\"/\\\"+n:n+\\\"/\\\"+s+\\\"/\\\"+o,(l||u)&&(c+=\\\"/\\\"+Math.round(10*l)/10),u&&(c+=\\\"/\\\"+Math.round(u)),this._hashName){var f=this._hashName,h=!1,p=t.window.location.hash.slice(1).split(\\\"&\\\").map((function(t){var e=t.split(\\\"=\\\")[0];return e===f?(h=!0,e+\\\"=\\\"+c):t})).filter((function(t){return t}));return h||p.push(f+\\\"=\\\"+c),\\\"#\\\"+p.join(\\\"&\\\")}return\\\"#\\\"+c},On.prototype._getCurrentHash=function(){var e,r=this,n=t.window.location.hash.replace(\\\"#\\\",\\\"\\\");return this._hashName?(n.split(\\\"&\\\").map((function(t){return t.split(\\\"=\\\")})).forEach((function(t){t[0]===r._hashName&&(e=t)})),(e&&e[1]||\\\"\\\").split(\\\"/\\\")):n.split(\\\"/\\\")},On.prototype._onHashChange=function(){var t=this._getCurrentHash();if(t.length>=3&&!t.some((function(t){return isNaN(t)}))){var e=this._map.dragRotate.isEnabled()&&this._map.touchZoomRotate.isEnabled()?+(t[3]||0):this._map.getBearing();return this._map.jumpTo({center:[+t[2],+t[1]],zoom:+t[0],bearing:e,pitch:+(t[4]||0)}),!0}return!1},On.prototype._updateHashUnthrottled=function(){var e=this.getHashString();try{t.window.history.replaceState(t.window.history.state,\\\"\\\",e)}catch(t){}};var In={linearity:.3,easing:t.bezier(0,0,.3,1)},Dn=t.extend({deceleration:2500,maxSpeed:1400},In),zn=t.extend({deceleration:20,maxSpeed:1400},In),Rn=t.extend({deceleration:1e3,maxSpeed:360},In),Fn=t.extend({deceleration:1e3,maxSpeed:90},In),Bn=function(t){this._map=t,this.clear()};function Nn(t,e){(!t.duration||t.duration<e.duration)&&(t.duration=e.duration,t.easing=e.easing)}function jn(e,r,n){var i=n.maxSpeed,a=n.linearity,o=n.deceleration,s=t.clamp(e*a/(r/1e3),-i,i),l=Math.abs(s)/(o*a);return{easing:n.easing,duration:1e3*l,amount:s*(l/2)}}Bn.prototype.clear=function(){this._inertiaBuffer=[]},Bn.prototype.record=function(e){this._drainInertiaBuffer(),this._inertiaBuffer.push({time:t.browser.now(),settings:e})},Bn.prototype._drainInertiaBuffer=function(){for(var e=this._inertiaBuffer,r=t.browser.now();e.length>0&&r-e[0].time>160;)e.shift()},Bn.prototype._onMoveEnd=function(e){if(this._drainInertiaBuffer(),!(this._inertiaBuffer.length<2)){for(var r={zoom:0,bearing:0,pitch:0,pan:new t.Point(0,0),pinchAround:void 0,around:void 0},n=0,i=this._inertiaBuffer;n<i.length;n+=1){var a=i[n].settings;r.zoom+=a.zoomDelta||0,r.bearing+=a.bearingDelta||0,r.pitch+=a.pitchDelta||0,a.panDelta&&r.pan._add(a.panDelta),a.around&&(r.around=a.around),a.pinchAround&&(r.pinchAround=a.pinchAround)}var o=this._inertiaBuffer[this._inertiaBuffer.length-1].time-this._inertiaBuffer[0].time,s={};if(r.pan.mag()){var l=jn(r.pan.mag(),o,t.extend({},Dn,e||{}));s.offset=r.pan.mult(l.amount/r.pan.mag()),s.center=this._map.transform.center,Nn(s,l)}if(r.zoom){var u=jn(r.zoom,o,zn);s.zoom=this._map.transform.zoom+u.amount,Nn(s,u)}if(r.bearing){var c=jn(r.bearing,o,Rn);s.bearing=this._map.transform.bearing+t.clamp(c.amount,-179,179),Nn(s,c)}if(r.pitch){var f=jn(r.pitch,o,Fn);s.pitch=this._map.transform.pitch+f.amount,Nn(s,f)}if(s.zoom||s.bearing){var h=void 0===r.pinchAround?r.around:r.pinchAround;s.around=h?this._map.unproject(h):this._map.getCenter()}return this.clear(),t.extend(s,{noMoveStart:!0})}};var Un=function(e){function n(n,i,a,o){void 0===o&&(o={});var s=r.mousePos(i.getCanvasContainer(),a),l=i.unproject(s);e.call(this,n,t.extend({point:s,lngLat:l,originalEvent:a},o)),this._defaultPrevented=!1,this.target=i}e&&(n.__proto__=e),n.prototype=Object.create(e&&e.prototype),n.prototype.constructor=n;var i={defaultPrevented:{configurable:!0}};return n.prototype.preventDefault=function(){this._defaultPrevented=!0},i.defaultPrevented.get=function(){return this._defaultPrevented},Object.defineProperties(n.prototype,i),n}(t.Event),Vn=function(e){function n(n,i,a){var o=\\\"touchend\\\"===n?a.changedTouches:a.touches,s=r.touchPos(i.getCanvasContainer(),o),l=s.map((function(t){return i.unproject(t)})),u=s.reduce((function(t,e,r,n){return t.add(e.div(n.length))}),new t.Point(0,0)),c=i.unproject(u);e.call(this,n,{points:s,point:u,lngLats:l,lngLat:c,originalEvent:a}),this._defaultPrevented=!1}e&&(n.__proto__=e),n.prototype=Object.create(e&&e.prototype),n.prototype.constructor=n;var i={defaultPrevented:{configurable:!0}};return n.prototype.preventDefault=function(){this._defaultPrevented=!0},i.defaultPrevented.get=function(){return this._defaultPrevented},Object.defineProperties(n.prototype,i),n}(t.Event),Hn=function(t){function e(e,r,n){t.call(this,e,{originalEvent:n}),this._defaultPrevented=!1}t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e;var r={defaultPrevented:{configurable:!0}};return e.prototype.preventDefault=function(){this._defaultPrevented=!0},r.defaultPrevented.get=function(){return this._defaultPrevented},Object.defineProperties(e.prototype,r),e}(t.Event),qn=function(t,e){this._map=t,this._clickTolerance=e.clickTolerance};qn.prototype.reset=function(){delete this._mousedownPos},qn.prototype.wheel=function(t){return this._firePreventable(new Hn(t.type,this._map,t))},qn.prototype.mousedown=function(t,e){return this._mousedownPos=e,this._firePreventable(new Un(t.type,this._map,t))},qn.prototype.mouseup=function(t){this._map.fire(new Un(t.type,this._map,t))},qn.prototype.click=function(t,e){this._mousedownPos&&this._mousedownPos.dist(e)>=this._clickTolerance||this._map.fire(new Un(t.type,this._map,t))},qn.prototype.dblclick=function(t){return this._firePreventable(new Un(t.type,this._map,t))},qn.prototype.mouseover=function(t){this._map.fire(new Un(t.type,this._map,t))},qn.prototype.mouseout=function(t){this._map.fire(new Un(t.type,this._map,t))},qn.prototype.touchstart=function(t){return this._firePreventable(new Vn(t.type,this._map,t))},qn.prototype.touchmove=function(t){this._map.fire(new Vn(t.type,this._map,t))},qn.prototype.touchend=function(t){this._map.fire(new Vn(t.type,this._map,t))},qn.prototype.touchcancel=function(t){this._map.fire(new Vn(t.type,this._map,t))},qn.prototype._firePreventable=function(t){if(this._map.fire(t),t.defaultPrevented)return{}},qn.prototype.isEnabled=function(){return!0},qn.prototype.isActive=function(){return!1},qn.prototype.enable=function(){},qn.prototype.disable=function(){};var Gn=function(t){this._map=t};Gn.prototype.reset=function(){this._delayContextMenu=!1,delete this._contextMenuEvent},Gn.prototype.mousemove=function(t){this._map.fire(new Un(t.type,this._map,t))},Gn.prototype.mousedown=function(){this._delayContextMenu=!0},Gn.prototype.mouseup=function(){this._delayContextMenu=!1,this._contextMenuEvent&&(this._map.fire(new Un(\\\"contextmenu\\\",this._map,this._contextMenuEvent)),delete this._contextMenuEvent)},Gn.prototype.contextmenu=function(t){this._delayContextMenu?this._contextMenuEvent=t:this._map.fire(new Un(t.type,this._map,t)),this._map.listens(\\\"contextmenu\\\")&&t.preventDefault()},Gn.prototype.isEnabled=function(){return!0},Gn.prototype.isActive=function(){return!1},Gn.prototype.enable=function(){},Gn.prototype.disable=function(){};var Zn=function(t,e){this._map=t,this._el=t.getCanvasContainer(),this._container=t.getContainer(),this._clickTolerance=e.clickTolerance||1};function Yn(t,e){for(var r={},n=0;n<t.length;n++)r[t[n].identifier]=e[n];return r}Zn.prototype.isEnabled=function(){return!!this._enabled},Zn.prototype.isActive=function(){return!!this._active},Zn.prototype.enable=function(){this.isEnabled()||(this._enabled=!0)},Zn.prototype.disable=function(){this.isEnabled()&&(this._enabled=!1)},Zn.prototype.mousedown=function(t,e){this.isEnabled()&&t.shiftKey&&0===t.button&&(r.disableDrag(),this._startPos=this._lastPos=e,this._active=!0)},Zn.prototype.mousemoveWindow=function(t,e){if(this._active){var n=e;if(!(this._lastPos.equals(n)||!this._box&&n.dist(this._startPos)<this._clickTolerance)){var i=this._startPos;this._lastPos=n,this._box||(this._box=r.create(\\\"div\\\",\\\"mapboxgl-boxzoom\\\",this._container),this._container.classList.add(\\\"mapboxgl-crosshair\\\"),this._fireEvent(\\\"boxzoomstart\\\",t));var a=Math.min(i.x,n.x),o=Math.max(i.x,n.x),s=Math.min(i.y,n.y),l=Math.max(i.y,n.y);r.setTransform(this._box,\\\"translate(\\\"+a+\\\"px,\\\"+s+\\\"px)\\\"),this._box.style.width=o-a+\\\"px\\\",this._box.style.height=l-s+\\\"px\\\"}}},Zn.prototype.mouseupWindow=function(e,n){var i=this;if(this._active&&0===e.button){var a=this._startPos,o=n;if(this.reset(),r.suppressClick(),a.x!==o.x||a.y!==o.y)return this._map.fire(new t.Event(\\\"boxzoomend\\\",{originalEvent:e})),{cameraAnimation:function(t){return t.fitScreenCoordinates(a,o,i._map.getBearing(),{linear:!0})}};this._fireEvent(\\\"boxzoomcancel\\\",e)}},Zn.prototype.keydown=function(t){this._active&&27===t.keyCode&&(this.reset(),this._fireEvent(\\\"boxzoomcancel\\\",t))},Zn.prototype.reset=function(){this._active=!1,this._container.classList.remove(\\\"mapboxgl-crosshair\\\"),this._box&&(r.remove(this._box),this._box=null),r.enableDrag(),delete this._startPos,delete this._lastPos},Zn.prototype._fireEvent=function(e,r){return this._map.fire(new t.Event(e,{originalEvent:r}))};var Wn=function(t){this.reset(),this.numTouches=t.numTouches};Wn.prototype.reset=function(){delete this.centroid,delete this.startTime,delete this.touches,this.aborted=!1},Wn.prototype.touchstart=function(e,r,n){(this.centroid||n.length>this.numTouches)&&(this.aborted=!0),this.aborted||(void 0===this.startTime&&(this.startTime=e.timeStamp),n.length===this.numTouches&&(this.centroid=function(e){for(var r=new t.Point(0,0),n=0,i=e;n<i.length;n+=1){var a=i[n];r._add(a)}return r.div(e.length)}(r),this.touches=Yn(n,r)))},Wn.prototype.touchmove=function(t,e,r){if(!this.aborted&&this.centroid){var n=Yn(r,e);for(var i in this.touches){var a=this.touches[i],o=n[i];(!o||o.dist(a)>30)&&(this.aborted=!0)}}},Wn.prototype.touchend=function(t,e,r){if((!this.centroid||t.timeStamp-this.startTime>500)&&(this.aborted=!0),0===r.length){var n=!this.aborted&&this.centroid;if(this.reset(),n)return n}};var Xn=function(t){this.singleTap=new Wn(t),this.numTaps=t.numTaps,this.reset()};Xn.prototype.reset=function(){this.lastTime=1/0,delete this.lastTap,this.count=0,this.singleTap.reset()},Xn.prototype.touchstart=function(t,e,r){this.singleTap.touchstart(t,e,r)},Xn.prototype.touchmove=function(t,e,r){this.singleTap.touchmove(t,e,r)},Xn.prototype.touchend=function(t,e,r){var n=this.singleTap.touchend(t,e,r);if(n){var i=t.timeStamp-this.lastTime<500,a=!this.lastTap||this.lastTap.dist(n)<30;if(i&&a||this.reset(),this.count++,this.lastTime=t.timeStamp,this.lastTap=n,this.count===this.numTaps)return this.reset(),n}};var Jn=function(){this._zoomIn=new Xn({numTouches:1,numTaps:2}),this._zoomOut=new Xn({numTouches:2,numTaps:1}),this.reset()};Jn.prototype.reset=function(){this._active=!1,this._zoomIn.reset(),this._zoomOut.reset()},Jn.prototype.touchstart=function(t,e,r){this._zoomIn.touchstart(t,e,r),this._zoomOut.touchstart(t,e,r)},Jn.prototype.touchmove=function(t,e,r){this._zoomIn.touchmove(t,e,r),this._zoomOut.touchmove(t,e,r)},Jn.prototype.touchend=function(t,e,r){var n=this,i=this._zoomIn.touchend(t,e,r),a=this._zoomOut.touchend(t,e,r);return i?(this._active=!0,t.preventDefault(),setTimeout((function(){return n.reset()}),0),{cameraAnimation:function(e){return e.easeTo({duration:300,zoom:e.getZoom()+1,around:e.unproject(i)},{originalEvent:t})}}):a?(this._active=!0,t.preventDefault(),setTimeout((function(){return n.reset()}),0),{cameraAnimation:function(e){return e.easeTo({duration:300,zoom:e.getZoom()-1,around:e.unproject(a)},{originalEvent:t})}}):void 0},Jn.prototype.touchcancel=function(){this.reset()},Jn.prototype.enable=function(){this._enabled=!0},Jn.prototype.disable=function(){this._enabled=!1,this.reset()},Jn.prototype.isEnabled=function(){return this._enabled},Jn.prototype.isActive=function(){return this._active};var Kn=function(t){this.reset(),this._clickTolerance=t.clickTolerance||1};Kn.prototype.reset=function(){this._active=!1,this._moved=!1,delete this._lastPoint,delete this._eventButton},Kn.prototype._correctButton=function(t,e){return!1},Kn.prototype._move=function(t,e){return{}},Kn.prototype.mousedown=function(t,e){if(!this._lastPoint){var n=r.mouseButton(t);this._correctButton(t,n)&&(this._lastPoint=e,this._eventButton=n)}},Kn.prototype.mousemoveWindow=function(t,e){var r=this._lastPoint;if(r&&(t.preventDefault(),this._moved||!(e.dist(r)<this._clickTolerance)))return this._moved=!0,this._lastPoint=e,this._move(r,e)},Kn.prototype.mouseupWindow=function(t){r.mouseButton(t)===this._eventButton&&(this._moved&&r.suppressClick(),this.reset())},Kn.prototype.enable=function(){this._enabled=!0},Kn.prototype.disable=function(){this._enabled=!1,this.reset()},Kn.prototype.isEnabled=function(){return this._enabled},Kn.prototype.isActive=function(){return this._active};var $n=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.mousedown=function(e,r){t.prototype.mousedown.call(this,e,r),this._lastPoint&&(this._active=!0)},e.prototype._correctButton=function(t,e){return 0===e&&!t.ctrlKey},e.prototype._move=function(t,e){return{around:e,panDelta:e.sub(t)}},e}(Kn),Qn=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype._correctButton=function(t,e){return 0===e&&t.ctrlKey||2===e},e.prototype._move=function(t,e){var r=.8*(e.x-t.x);if(r)return this._active=!0,{bearingDelta:r}},e.prototype.contextmenu=function(t){t.preventDefault()},e}(Kn),ti=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype._correctButton=function(t,e){return 0===e&&t.ctrlKey||2===e},e.prototype._move=function(t,e){var r=-.5*(e.y-t.y);if(r)return this._active=!0,{pitchDelta:r}},e.prototype.contextmenu=function(t){t.preventDefault()},e}(Kn),ei=function(t){this._minTouches=1,this._clickTolerance=t.clickTolerance||1,this.reset()};ei.prototype.reset=function(){this._active=!1,this._touches={},this._sum=new t.Point(0,0)},ei.prototype.touchstart=function(t,e,r){return this._calculateTransform(t,e,r)},ei.prototype.touchmove=function(t,e,r){if(this._active)return t.preventDefault(),this._calculateTransform(t,e,r)},ei.prototype.touchend=function(t,e,r){this._calculateTransform(t,e,r),this._active&&r.length<this._minTouches&&this.reset()},ei.prototype.touchcancel=function(){this.reset()},ei.prototype._calculateTransform=function(e,r,n){n.length>0&&(this._active=!0);var i=Yn(n,r),a=new t.Point(0,0),o=new t.Point(0,0),s=0;for(var l in i){var u=i[l],c=this._touches[l];c&&(a._add(u),o._add(u.sub(c)),s++,i[l]=u)}if(this._touches=i,!(s<this._minTouches)&&o.mag()){var f=o.div(s);if(this._sum._add(f),!(this._sum.mag()<this._clickTolerance))return{around:a.div(s),panDelta:f}}},ei.prototype.enable=function(){this._enabled=!0},ei.prototype.disable=function(){this._enabled=!1,this.reset()},ei.prototype.isEnabled=function(){return this._enabled},ei.prototype.isActive=function(){return this._active};var ri=function(){this.reset()};function ni(t,e,r){for(var n=0;n<t.length;n++)if(t[n].identifier===r)return e[n]}ri.prototype.reset=function(){this._active=!1,delete this._firstTwoTouches},ri.prototype._start=function(t){},ri.prototype._move=function(t,e,r){return{}},ri.prototype.touchstart=function(t,e,r){this._firstTwoTouches||r.length<2||(this._firstTwoTouches=[r[0].identifier,r[1].identifier],this._start([e[0],e[1]]))},ri.prototype.touchmove=function(t,e,r){if(this._firstTwoTouches){t.preventDefault();var n=this._firstTwoTouches,i=n[0],a=n[1],o=ni(r,e,i),s=ni(r,e,a);if(o&&s){var l=this._aroundCenter?null:o.add(s).div(2);return this._move([o,s],l,t)}}},ri.prototype.touchend=function(t,e,n){if(this._firstTwoTouches){var i=this._firstTwoTouches,a=i[0],o=i[1],s=ni(n,e,a),l=ni(n,e,o);s&&l||(this._active&&r.suppressClick(),this.reset())}},ri.prototype.touchcancel=function(){this.reset()},ri.prototype.enable=function(t){this._enabled=!0,this._aroundCenter=!!t&&\\\"center\\\"===t.around},ri.prototype.disable=function(){this._enabled=!1,this.reset()},ri.prototype.isEnabled=function(){return this._enabled},ri.prototype.isActive=function(){return this._active};function ii(t,e){return Math.log(t/e)/Math.LN2}var ai=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.reset=function(){t.prototype.reset.call(this),delete this._distance,delete this._startDistance},e.prototype._start=function(t){this._startDistance=this._distance=t[0].dist(t[1])},e.prototype._move=function(t,e){var r=this._distance;if(this._distance=t[0].dist(t[1]),this._active||!(Math.abs(ii(this._distance,this._startDistance))<.1))return this._active=!0,{zoomDelta:ii(this._distance,r),pinchAround:e}},e}(ri);function oi(t,e){return 180*t.angleWith(e)/Math.PI}var si=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.reset=function(){t.prototype.reset.call(this),delete this._minDiameter,delete this._startVector,delete this._vector},e.prototype._start=function(t){this._startVector=this._vector=t[0].sub(t[1]),this._minDiameter=t[0].dist(t[1])},e.prototype._move=function(t,e){var r=this._vector;if(this._vector=t[0].sub(t[1]),this._active||!this._isBelowThreshold(this._vector))return this._active=!0,{bearingDelta:oi(this._vector,r),pinchAround:e}},e.prototype._isBelowThreshold=function(t){this._minDiameter=Math.min(this._minDiameter,t.mag());var e=25/(Math.PI*this._minDiameter)*360,r=oi(t,this._startVector);return Math.abs(r)<e},e}(ri);function li(t){return Math.abs(t.y)>Math.abs(t.x)}var ui=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.reset=function(){t.prototype.reset.call(this),this._valid=void 0,delete this._firstMove,delete this._lastPoints},e.prototype._start=function(t){this._lastPoints=t,li(t[0].sub(t[1]))&&(this._valid=!1)},e.prototype._move=function(t,e,r){var n=t[0].sub(this._lastPoints[0]),i=t[1].sub(this._lastPoints[1]);if(this._valid=this.gestureBeginsVertically(n,i,r.timeStamp),this._valid)return this._lastPoints=t,this._active=!0,{pitchDelta:(n.y+i.y)/2*-.5}},e.prototype.gestureBeginsVertically=function(t,e,r){if(void 0!==this._valid)return this._valid;var n=t.mag()>=2,i=e.mag()>=2;if(n||i){if(!n||!i)return void 0===this._firstMove&&(this._firstMove=r),r-this._firstMove<100&&void 0;var a=t.y>0==e.y>0;return li(t)&&li(e)&&a}},e}(ri),ci={panStep:100,bearingStep:15,pitchStep:10},fi=function(){var t=ci;this._panStep=t.panStep,this._bearingStep=t.bearingStep,this._pitchStep=t.pitchStep};function hi(t){return t*(2-t)}fi.prototype.reset=function(){this._active=!1},fi.prototype.keydown=function(t){var e=this;if(!(t.altKey||t.ctrlKey||t.metaKey)){var r=0,n=0,i=0,a=0,o=0;switch(t.keyCode){case 61:case 107:case 171:case 187:r=1;break;case 189:case 109:case 173:r=-1;break;case 37:t.shiftKey?n=-1:(t.preventDefault(),a=-1);break;case 39:t.shiftKey?n=1:(t.preventDefault(),a=1);break;case 38:t.shiftKey?i=1:(t.preventDefault(),o=-1);break;case 40:t.shiftKey?i=-1:(t.preventDefault(),o=1);break;default:return}return{cameraAnimation:function(s){var l=s.getZoom();s.easeTo({duration:300,easeId:\\\"keyboardHandler\\\",easing:hi,zoom:r?Math.round(l)+r*(t.shiftKey?2:1):l,bearing:s.getBearing()+n*e._bearingStep,pitch:s.getPitch()+i*e._pitchStep,offset:[-a*e._panStep,-o*e._panStep],center:s.getCenter()},{originalEvent:t})}}}},fi.prototype.enable=function(){this._enabled=!0},fi.prototype.disable=function(){this._enabled=!1,this.reset()},fi.prototype.isEnabled=function(){return this._enabled},fi.prototype.isActive=function(){return this._active};var pi=4.000244140625,di=function(e,r){this._map=e,this._el=e.getCanvasContainer(),this._handler=r,this._delta=0,this._defaultZoomRate=.01,this._wheelZoomRate=.0022222222222222222,t.bindAll([\\\"_onWheel\\\",\\\"_onTimeout\\\",\\\"_onScrollFrame\\\",\\\"_onScrollFinished\\\"],this)};di.prototype.setZoomRate=function(t){this._defaultZoomRate=t},di.prototype.setWheelZoomRate=function(t){this._wheelZoomRate=t},di.prototype.isEnabled=function(){return!!this._enabled},di.prototype.isActive=function(){return!!this._active||void 0!==this._finishTimeout},di.prototype.isZooming=function(){return!!this._zooming},di.prototype.enable=function(t){this.isEnabled()||(this._enabled=!0,this._aroundCenter=t&&\\\"center\\\"===t.around)},di.prototype.disable=function(){this.isEnabled()&&(this._enabled=!1)},di.prototype.wheel=function(e){if(this.isEnabled()){var r=e.deltaMode===t.window.WheelEvent.DOM_DELTA_LINE?40*e.deltaY:e.deltaY,n=t.browser.now(),i=n-(this._lastWheelEventTime||0);this._lastWheelEventTime=n,0!==r&&r%pi==0?this._type=\\\"wheel\\\":0!==r&&Math.abs(r)<4?this._type=\\\"trackpad\\\":i>400?(this._type=null,this._lastValue=r,this._timeout=setTimeout(this._onTimeout,40,e)):this._type||(this._type=Math.abs(i*r)<200?\\\"trackpad\\\":\\\"wheel\\\",this._timeout&&(clearTimeout(this._timeout),this._timeout=null,r+=this._lastValue)),e.shiftKey&&r&&(r/=4),this._type&&(this._lastWheelEvent=e,this._delta-=r,this._active||this._start(e)),e.preventDefault()}},di.prototype._onTimeout=function(t){this._type=\\\"wheel\\\",this._delta-=this._lastValue,this._active||this._start(t)},di.prototype._start=function(e){if(this._delta){this._frameId&&(this._frameId=null),this._active=!0,this.isZooming()||(this._zooming=!0),this._finishTimeout&&(clearTimeout(this._finishTimeout),delete this._finishTimeout);var n=r.mousePos(this._el,e);this._around=t.LngLat.convert(this._aroundCenter?this._map.getCenter():this._map.unproject(n)),this._aroundPoint=this._map.transform.locationPoint(this._around),this._frameId||(this._frameId=!0,this._handler._triggerRenderFrame())}},di.prototype.renderFrame=function(){return this._onScrollFrame()},di.prototype._onScrollFrame=function(){var e=this;if(this._frameId&&(this._frameId=null,this.isActive())){var r=this._map.transform;if(0!==this._delta){var n=\\\"wheel\\\"===this._type&&Math.abs(this._delta)>pi?this._wheelZoomRate:this._defaultZoomRate,i=2/(1+Math.exp(-Math.abs(this._delta*n)));this._delta<0&&0!==i&&(i=1/i);var a=\\\"number\\\"==typeof this._targetZoom?r.zoomScale(this._targetZoom):r.scale;this._targetZoom=Math.min(r.maxZoom,Math.max(r.minZoom,r.scaleZoom(a*i))),\\\"wheel\\\"===this._type&&(this._startZoom=r.zoom,this._easing=this._smoothOutEasing(200)),this._delta=0}var o,s=\\\"number\\\"==typeof this._targetZoom?this._targetZoom:r.zoom,l=this._startZoom,u=this._easing,c=!1;if(\\\"wheel\\\"===this._type&&l&&u){var f=Math.min((t.browser.now()-this._lastWheelEventTime)/200,1),h=u(f);o=t.number(l,s,h),f<1?this._frameId||(this._frameId=!0):c=!0}else o=s,c=!0;return this._active=!0,c&&(this._active=!1,this._finishTimeout=setTimeout((function(){e._zooming=!1,e._handler._triggerRenderFrame(),delete e._targetZoom,delete e._finishTimeout}),200)),{noInertia:!0,needsRenderFrame:!c,zoomDelta:o-r.zoom,around:this._aroundPoint,originalEvent:this._lastWheelEvent}}},di.prototype._smoothOutEasing=function(e){var r=t.ease;if(this._prevEase){var n=this._prevEase,i=(t.browser.now()-n.start)/n.duration,a=n.easing(i+.01)-n.easing(i),o=.27/Math.sqrt(a*a+1e-4)*.01,s=Math.sqrt(.0729-o*o);r=t.bezier(o,s,.25,1)}return this._prevEase={start:t.browser.now(),duration:e,easing:r},r},di.prototype.reset=function(){this._active=!1};var vi=function(t,e){this._clickZoom=t,this._tapZoom=e};vi.prototype.enable=function(){this._clickZoom.enable(),this._tapZoom.enable()},vi.prototype.disable=function(){this._clickZoom.disable(),this._tapZoom.disable()},vi.prototype.isEnabled=function(){return this._clickZoom.isEnabled()&&this._tapZoom.isEnabled()},vi.prototype.isActive=function(){return this._clickZoom.isActive()||this._tapZoom.isActive()};var gi=function(){this.reset()};gi.prototype.reset=function(){this._active=!1},gi.prototype.dblclick=function(t,e){return t.preventDefault(),{cameraAnimation:function(r){r.easeTo({duration:300,zoom:r.getZoom()+(t.shiftKey?-1:1),around:r.unproject(e)},{originalEvent:t})}}},gi.prototype.enable=function(){this._enabled=!0},gi.prototype.disable=function(){this._enabled=!1,this.reset()},gi.prototype.isEnabled=function(){return this._enabled},gi.prototype.isActive=function(){return this._active};var yi=function(){this._tap=new Xn({numTouches:1,numTaps:1}),this.reset()};yi.prototype.reset=function(){this._active=!1,delete this._swipePoint,delete this._swipeTouch,delete this._tapTime,this._tap.reset()},yi.prototype.touchstart=function(t,e,r){this._swipePoint||(this._tapTime&&t.timeStamp-this._tapTime>500&&this.reset(),this._tapTime?r.length>0&&(this._swipePoint=e[0],this._swipeTouch=r[0].identifier):this._tap.touchstart(t,e,r))},yi.prototype.touchmove=function(t,e,r){if(this._tapTime){if(this._swipePoint){if(r[0].identifier!==this._swipeTouch)return;var n=e[0],i=n.y-this._swipePoint.y;return this._swipePoint=n,t.preventDefault(),this._active=!0,{zoomDelta:i/128}}}else this._tap.touchmove(t,e,r)},yi.prototype.touchend=function(t,e,r){this._tapTime?this._swipePoint&&0===r.length&&this.reset():this._tap.touchend(t,e,r)&&(this._tapTime=t.timeStamp)},yi.prototype.touchcancel=function(){this.reset()},yi.prototype.enable=function(){this._enabled=!0},yi.prototype.disable=function(){this._enabled=!1,this.reset()},yi.prototype.isEnabled=function(){return this._enabled},yi.prototype.isActive=function(){return this._active};var mi=function(t,e,r){this._el=t,this._mousePan=e,this._touchPan=r};mi.prototype.enable=function(t){this._inertiaOptions=t||{},this._mousePan.enable(),this._touchPan.enable(),this._el.classList.add(\\\"mapboxgl-touch-drag-pan\\\")},mi.prototype.disable=function(){this._mousePan.disable(),this._touchPan.disable(),this._el.classList.remove(\\\"mapboxgl-touch-drag-pan\\\")},mi.prototype.isEnabled=function(){return this._mousePan.isEnabled()&&this._touchPan.isEnabled()},mi.prototype.isActive=function(){return this._mousePan.isActive()||this._touchPan.isActive()};var xi=function(t,e,r){this._pitchWithRotate=t.pitchWithRotate,this._mouseRotate=e,this._mousePitch=r};xi.prototype.enable=function(){this._mouseRotate.enable(),this._pitchWithRotate&&this._mousePitch.enable()},xi.prototype.disable=function(){this._mouseRotate.disable(),this._mousePitch.disable()},xi.prototype.isEnabled=function(){return this._mouseRotate.isEnabled()&&(!this._pitchWithRotate||this._mousePitch.isEnabled())},xi.prototype.isActive=function(){return this._mouseRotate.isActive()||this._mousePitch.isActive()};var bi=function(t,e,r,n){this._el=t,this._touchZoom=e,this._touchRotate=r,this._tapDragZoom=n,this._rotationDisabled=!1,this._enabled=!0};bi.prototype.enable=function(t){this._touchZoom.enable(t),this._rotationDisabled||this._touchRotate.enable(t),this._tapDragZoom.enable(),this._el.classList.add(\\\"mapboxgl-touch-zoom-rotate\\\")},bi.prototype.disable=function(){this._touchZoom.disable(),this._touchRotate.disable(),this._tapDragZoom.disable(),this._el.classList.remove(\\\"mapboxgl-touch-zoom-rotate\\\")},bi.prototype.isEnabled=function(){return this._touchZoom.isEnabled()&&(this._rotationDisabled||this._touchRotate.isEnabled())&&this._tapDragZoom.isEnabled()},bi.prototype.isActive=function(){return this._touchZoom.isActive()||this._touchRotate.isActive()||this._tapDragZoom.isActive()},bi.prototype.disableRotation=function(){this._rotationDisabled=!0,this._touchRotate.disable()},bi.prototype.enableRotation=function(){this._rotationDisabled=!1,this._touchZoom.isEnabled()&&this._touchRotate.enable()};var _i=function(t){return t.zoom||t.drag||t.pitch||t.rotate},wi=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e}(t.Event);function Ti(t){return t.panDelta&&t.panDelta.mag()||t.zoomDelta||t.bearingDelta||t.pitchDelta}var ki=function(e,n){this._map=e,this._el=this._map.getCanvasContainer(),this._handlers=[],this._handlersById={},this._changes=[],this._inertia=new Bn(e),this._bearingSnap=n.bearingSnap,this._previousActiveHandlers={},this._eventsInProgress={},this._addDefaultHandlers(n),t.bindAll([\\\"handleEvent\\\",\\\"handleWindowEvent\\\"],this);var i=this._el;this._listeners=[[i,\\\"touchstart\\\",{passive:!1}],[i,\\\"touchmove\\\",{passive:!1}],[i,\\\"touchend\\\",void 0],[i,\\\"touchcancel\\\",void 0],[i,\\\"mousedown\\\",void 0],[i,\\\"mousemove\\\",void 0],[i,\\\"mouseup\\\",void 0],[t.window.document,\\\"mousemove\\\",{capture:!0}],[t.window.document,\\\"mouseup\\\",void 0],[i,\\\"mouseover\\\",void 0],[i,\\\"mouseout\\\",void 0],[i,\\\"dblclick\\\",void 0],[i,\\\"click\\\",void 0],[i,\\\"keydown\\\",{capture:!1}],[i,\\\"keyup\\\",void 0],[i,\\\"wheel\\\",{passive:!1}],[i,\\\"contextmenu\\\",void 0],[t.window,\\\"blur\\\",void 0]];for(var a=0,o=this._listeners;a<o.length;a+=1){var s=o[a],l=s[0],u=s[1],c=s[2];r.addEventListener(l,u,l===t.window.document?this.handleWindowEvent:this.handleEvent,c)}};ki.prototype.destroy=function(){for(var e=0,n=this._listeners;e<n.length;e+=1){var i=n[e],a=i[0],o=i[1],s=i[2];r.removeEventListener(a,o,a===t.window.document?this.handleWindowEvent:this.handleEvent,s)}},ki.prototype._addDefaultHandlers=function(t){var e=this._map,r=e.getCanvasContainer();this._add(\\\"mapEvent\\\",new qn(e,t));var n=e.boxZoom=new Zn(e,t);this._add(\\\"boxZoom\\\",n);var i=new Jn,a=new gi;e.doubleClickZoom=new vi(a,i),this._add(\\\"tapZoom\\\",i),this._add(\\\"clickZoom\\\",a);var o=new yi;this._add(\\\"tapDragZoom\\\",o);var s=e.touchPitch=new ui;this._add(\\\"touchPitch\\\",s);var l=new Qn(t),u=new ti(t);e.dragRotate=new xi(t,l,u),this._add(\\\"mouseRotate\\\",l,[\\\"mousePitch\\\"]),this._add(\\\"mousePitch\\\",u,[\\\"mouseRotate\\\"]);var c=new $n(t),f=new ei(t);e.dragPan=new mi(r,c,f),this._add(\\\"mousePan\\\",c),this._add(\\\"touchPan\\\",f,[\\\"touchZoom\\\",\\\"touchRotate\\\"]);var h=new si,p=new ai;e.touchZoomRotate=new bi(r,p,h,o),this._add(\\\"touchRotate\\\",h,[\\\"touchPan\\\",\\\"touchZoom\\\"]),this._add(\\\"touchZoom\\\",p,[\\\"touchPan\\\",\\\"touchRotate\\\"]);var d=e.scrollZoom=new di(e,this);this._add(\\\"scrollZoom\\\",d,[\\\"mousePan\\\"]);var v=e.keyboard=new fi;this._add(\\\"keyboard\\\",v),this._add(\\\"blockableMapEvent\\\",new Gn(e));for(var g=0,y=[\\\"boxZoom\\\",\\\"doubleClickZoom\\\",\\\"tapDragZoom\\\",\\\"touchPitch\\\",\\\"dragRotate\\\",\\\"dragPan\\\",\\\"touchZoomRotate\\\",\\\"scrollZoom\\\",\\\"keyboard\\\"];g<y.length;g+=1){var m=y[g];t.interactive&&t[m]&&e[m].enable(t[m])}},ki.prototype._add=function(t,e,r){this._handlers.push({handlerName:t,handler:e,allowed:r}),this._handlersById[t]=e},ki.prototype.stop=function(){if(!this._updatingCamera){for(var t=0,e=this._handlers;t<e.length;t+=1)e[t].handler.reset();this._inertia.clear(),this._fireEvents({},{}),this._changes=[]}},ki.prototype.isActive=function(){for(var t=0,e=this._handlers;t<e.length;t+=1)if(e[t].handler.isActive())return!0;return!1},ki.prototype.isZooming=function(){return!!this._eventsInProgress.zoom||this._map.scrollZoom.isZooming()},ki.prototype.isRotating=function(){return!!this._eventsInProgress.rotate},ki.prototype.isMoving=function(){return Boolean(_i(this._eventsInProgress))||this.isZooming()},ki.prototype._blockedByActive=function(t,e,r){for(var n in t)if(n!==r&&(!e||e.indexOf(n)<0))return!0;return!1},ki.prototype.handleWindowEvent=function(t){this.handleEvent(t,t.type+\\\"Window\\\")},ki.prototype._getMapTouches=function(t){for(var e=[],r=0,n=t;r<n.length;r+=1){var i=n[r],a=i.target;this._el.contains(a)&&e.push(i)}return e},ki.prototype.handleEvent=function(t,e){if(\\\"blur\\\"!==t.type){this._updatingCamera=!0;for(var n=\\\"renderFrame\\\"===t.type?void 0:t,i={needsRenderFrame:!1},a={},o={},s=t.touches?this._getMapTouches(t.touches):void 0,l=s?r.touchPos(this._el,s):r.mousePos(this._el,t),u=0,c=this._handlers;u<c.length;u+=1){var f=c[u],h=f.handlerName,p=f.handler,d=f.allowed;if(p.isEnabled()){var v=void 0;this._blockedByActive(o,d,h)?p.reset():p[e||t.type]&&(v=p[e||t.type](t,l,s),this.mergeHandlerResult(i,a,v,h,n),v&&v.needsRenderFrame&&this._triggerRenderFrame()),(v||p.isActive())&&(o[h]=p)}}var g={};for(var y in this._previousActiveHandlers)o[y]||(g[y]=n);this._previousActiveHandlers=o,(Object.keys(g).length||Ti(i))&&(this._changes.push([i,a,g]),this._triggerRenderFrame()),(Object.keys(o).length||Ti(i))&&this._map._stop(!0),this._updatingCamera=!1;var m=i.cameraAnimation;m&&(this._inertia.clear(),this._fireEvents({},{}),this._changes=[],m(this._map))}else this.stop()},ki.prototype.mergeHandlerResult=function(e,r,n,i,a){if(n){t.extend(e,n);var o={handlerName:i,originalEvent:n.originalEvent||a};void 0!==n.zoomDelta&&(r.zoom=o),void 0!==n.panDelta&&(r.drag=o),void 0!==n.pitchDelta&&(r.pitch=o),void 0!==n.bearingDelta&&(r.rotate=o)}},ki.prototype._applyChanges=function(){for(var e={},r={},n={},i=0,a=this._changes;i<a.length;i+=1){var o=a[i],s=o[0],l=o[1],u=o[2];s.panDelta&&(e.panDelta=(e.panDelta||new t.Point(0,0))._add(s.panDelta)),s.zoomDelta&&(e.zoomDelta=(e.zoomDelta||0)+s.zoomDelta),s.bearingDelta&&(e.bearingDelta=(e.bearingDelta||0)+s.bearingDelta),s.pitchDelta&&(e.pitchDelta=(e.pitchDelta||0)+s.pitchDelta),void 0!==s.around&&(e.around=s.around),void 0!==s.pinchAround&&(e.pinchAround=s.pinchAround),s.noInertia&&(e.noInertia=s.noInertia),t.extend(r,l),t.extend(n,u)}this._updateMapTransform(e,r,n),this._changes=[]},ki.prototype._updateMapTransform=function(t,e,r){var n=this._map,i=n.transform;if(!Ti(t))return this._fireEvents(e,r);var a=t.panDelta,o=t.zoomDelta,s=t.bearingDelta,l=t.pitchDelta,u=t.around,c=t.pinchAround;void 0!==c&&(u=c),n._stop(!0),u=u||n.transform.centerPoint;var f=i.pointLocation(a?u.sub(a):u);s&&(i.bearing+=s),l&&(i.pitch+=l),o&&(i.zoom+=o),i.setLocationAtPoint(f,u),this._map._update(),t.noInertia||this._inertia.record(t),this._fireEvents(e,r)},ki.prototype._fireEvents=function(e,r){var n=this,i=_i(this._eventsInProgress),a=_i(e),o={};for(var s in e){var l=e[s].originalEvent;this._eventsInProgress[s]||(o[s+\\\"start\\\"]=l),this._eventsInProgress[s]=e[s]}for(var u in!i&&a&&this._fireEvent(\\\"movestart\\\",a.originalEvent),o)this._fireEvent(u,o[u]);for(var c in e.rotate&&(this._bearingChanged=!0),a&&this._fireEvent(\\\"move\\\",a.originalEvent),e){var f=e[c].originalEvent;this._fireEvent(c,f)}var h,p={};for(var d in this._eventsInProgress){var v=this._eventsInProgress[d],g=v.handlerName,y=v.originalEvent;this._handlersById[g].isActive()||(delete this._eventsInProgress[d],h=r[g]||y,p[d+\\\"end\\\"]=h)}for(var m in p)this._fireEvent(m,p[m]);var x=_i(this._eventsInProgress);if((i||a)&&!x){this._updatingCamera=!0;var b=this._inertia._onMoveEnd(this._map.dragPan._inertiaOptions),_=function(t){return 0!==t&&-n._bearingSnap<t&&t<n._bearingSnap};b?(_(b.bearing||this._map.getBearing())&&(b.bearing=0),this._map.easeTo(b,{originalEvent:h})):(this._map.fire(new t.Event(\\\"moveend\\\",{originalEvent:h})),_(this._map.getBearing())&&this._map.resetNorth()),this._bearingChanged=!1,this._updatingCamera=!1}},ki.prototype._fireEvent=function(e,r){this._map.fire(new t.Event(e,r?{originalEvent:r}:{}))},ki.prototype._triggerRenderFrame=function(){var t=this;void 0===this._frameId&&(this._frameId=this._map._requestRenderFrame((function(e){delete t._frameId,t.handleEvent(new wi(\\\"renderFrame\\\",{timeStamp:e})),t._applyChanges()})))};var Ai=function(e){function r(r,n){e.call(this),this._moving=!1,this._zooming=!1,this.transform=r,this._bearingSnap=n.bearingSnap,t.bindAll([\\\"_renderFrameCallback\\\"],this)}return e&&(r.__proto__=e),r.prototype=Object.create(e&&e.prototype),r.prototype.constructor=r,r.prototype.getCenter=function(){return new t.LngLat(this.transform.center.lng,this.transform.center.lat)},r.prototype.setCenter=function(t,e){return this.jumpTo({center:t},e)},r.prototype.panBy=function(e,r,n){return e=t.Point.convert(e).mult(-1),this.panTo(this.transform.center,t.extend({offset:e},r),n)},r.prototype.panTo=function(e,r,n){return this.easeTo(t.extend({center:e},r),n)},r.prototype.getZoom=function(){return this.transform.zoom},r.prototype.setZoom=function(t,e){return this.jumpTo({zoom:t},e),this},r.prototype.zoomTo=function(e,r,n){return this.easeTo(t.extend({zoom:e},r),n)},r.prototype.zoomIn=function(t,e){return this.zoomTo(this.getZoom()+1,t,e),this},r.prototype.zoomOut=function(t,e){return this.zoomTo(this.getZoom()-1,t,e),this},r.prototype.getBearing=function(){return this.transform.bearing},r.prototype.setBearing=function(t,e){return this.jumpTo({bearing:t},e),this},r.prototype.getPadding=function(){return this.transform.padding},r.prototype.setPadding=function(t,e){return this.jumpTo({padding:t},e),this},r.prototype.rotateTo=function(e,r,n){return this.easeTo(t.extend({bearing:e},r),n)},r.prototype.resetNorth=function(e,r){return this.rotateTo(0,t.extend({duration:1e3},e),r),this},r.prototype.resetNorthPitch=function(e,r){return this.easeTo(t.extend({bearing:0,pitch:0,duration:1e3},e),r),this},r.prototype.snapToNorth=function(t,e){return Math.abs(this.getBearing())<this._bearingSnap?this.resetNorth(t,e):this},r.prototype.getPitch=function(){return this.transform.pitch},r.prototype.setPitch=function(t,e){return this.jumpTo({pitch:t},e),this},r.prototype.cameraForBounds=function(e,r){return e=t.LngLatBounds.convert(e),this._cameraForBoxAndBearing(e.getNorthWest(),e.getSouthEast(),0,r)},r.prototype._cameraForBoxAndBearing=function(e,r,n,i){var a={top:0,bottom:0,right:0,left:0};if(\\\"number\\\"==typeof(i=t.extend({padding:a,offset:[0,0],maxZoom:this.transform.maxZoom},i)).padding){var o=i.padding;i.padding={top:o,bottom:o,right:o,left:o}}i.padding=t.extend(a,i.padding);var s=this.transform,l=s.padding,u=s.project(t.LngLat.convert(e)),c=s.project(t.LngLat.convert(r)),f=u.rotate(-n*Math.PI/180),h=c.rotate(-n*Math.PI/180),p=new t.Point(Math.max(f.x,h.x),Math.max(f.y,h.y)),d=new t.Point(Math.min(f.x,h.x),Math.min(f.y,h.y)),v=p.sub(d),g=(s.width-(l.left+l.right+i.padding.left+i.padding.right))/v.x,y=(s.height-(l.top+l.bottom+i.padding.top+i.padding.bottom))/v.y;if(!(y<0||g<0)){var m=Math.min(s.scaleZoom(s.scale*Math.min(g,y)),i.maxZoom),x=t.Point.convert(i.offset),b=(i.padding.left-i.padding.right)/2,_=(i.padding.top-i.padding.bottom)/2,w=new t.Point(x.x+b,x.y+_).mult(s.scale/s.zoomScale(m));return{center:s.unproject(u.add(c).div(2).sub(w)),zoom:m,bearing:n}}t.warnOnce(\\\"Map cannot fit within canvas with the given bounds, padding, and/or offset.\\\")},r.prototype.fitBounds=function(t,e,r){return this._fitInternal(this.cameraForBounds(t,e),e,r)},r.prototype.fitScreenCoordinates=function(e,r,n,i,a){return this._fitInternal(this._cameraForBoxAndBearing(this.transform.pointLocation(t.Point.convert(e)),this.transform.pointLocation(t.Point.convert(r)),n,i),i,a)},r.prototype._fitInternal=function(e,r,n){return e?(delete(r=t.extend(e,r)).padding,r.linear?this.easeTo(r,n):this.flyTo(r,n)):this},r.prototype.jumpTo=function(e,r){this.stop();var n=this.transform,i=!1,a=!1,o=!1;return\\\"zoom\\\"in e&&n.zoom!==+e.zoom&&(i=!0,n.zoom=+e.zoom),void 0!==e.center&&(n.center=t.LngLat.convert(e.center)),\\\"bearing\\\"in e&&n.bearing!==+e.bearing&&(a=!0,n.bearing=+e.bearing),\\\"pitch\\\"in e&&n.pitch!==+e.pitch&&(o=!0,n.pitch=+e.pitch),null==e.padding||n.isPaddingEqual(e.padding)||(n.padding=e.padding),this.fire(new t.Event(\\\"movestart\\\",r)).fire(new t.Event(\\\"move\\\",r)),i&&this.fire(new t.Event(\\\"zoomstart\\\",r)).fire(new t.Event(\\\"zoom\\\",r)).fire(new t.Event(\\\"zoomend\\\",r)),a&&this.fire(new t.Event(\\\"rotatestart\\\",r)).fire(new t.Event(\\\"rotate\\\",r)).fire(new t.Event(\\\"rotateend\\\",r)),o&&this.fire(new t.Event(\\\"pitchstart\\\",r)).fire(new t.Event(\\\"pitch\\\",r)).fire(new t.Event(\\\"pitchend\\\",r)),this.fire(new t.Event(\\\"moveend\\\",r))},r.prototype.easeTo=function(e,r){var n=this;this._stop(!1,e.easeId),(!1===(e=t.extend({offset:[0,0],duration:500,easing:t.ease},e)).animate||!e.essential&&t.browser.prefersReducedMotion)&&(e.duration=0);var i=this.transform,a=this.getZoom(),o=this.getBearing(),s=this.getPitch(),l=this.getPadding(),u=\\\"zoom\\\"in e?+e.zoom:a,c=\\\"bearing\\\"in e?this._normalizeBearing(e.bearing,o):o,f=\\\"pitch\\\"in e?+e.pitch:s,h=\\\"padding\\\"in e?e.padding:i.padding,p=t.Point.convert(e.offset),d=i.centerPoint.add(p),v=i.pointLocation(d),g=t.LngLat.convert(e.center||v);this._normalizeCenter(g);var y,m,x=i.project(v),b=i.project(g).sub(x),_=i.zoomScale(u-a);e.around&&(y=t.LngLat.convert(e.around),m=i.locationPoint(y));var w={moving:this._moving,zooming:this._zooming,rotating:this._rotating,pitching:this._pitching};return this._zooming=this._zooming||u!==a,this._rotating=this._rotating||o!==c,this._pitching=this._pitching||f!==s,this._padding=!i.isPaddingEqual(h),this._easeId=e.easeId,this._prepareEase(r,e.noMoveStart,w),clearTimeout(this._easeEndTimeoutID),this._ease((function(e){if(n._zooming&&(i.zoom=t.number(a,u,e)),n._rotating&&(i.bearing=t.number(o,c,e)),n._pitching&&(i.pitch=t.number(s,f,e)),n._padding&&(i.interpolatePadding(l,h,e),d=i.centerPoint.add(p)),y)i.setLocationAtPoint(y,m);else{var v=i.zoomScale(i.zoom-a),g=u>a?Math.min(2,_):Math.max(.5,_),w=Math.pow(g,1-e),T=i.unproject(x.add(b.mult(e*w)).mult(v));i.setLocationAtPoint(i.renderWorldCopies?T.wrap():T,d)}n._fireMoveEvents(r)}),(function(t){n._afterEase(r,t)}),e),this},r.prototype._prepareEase=function(e,r,n){void 0===n&&(n={}),this._moving=!0,r||n.moving||this.fire(new t.Event(\\\"movestart\\\",e)),this._zooming&&!n.zooming&&this.fire(new t.Event(\\\"zoomstart\\\",e)),this._rotating&&!n.rotating&&this.fire(new t.Event(\\\"rotatestart\\\",e)),this._pitching&&!n.pitching&&this.fire(new t.Event(\\\"pitchstart\\\",e))},r.prototype._fireMoveEvents=function(e){this.fire(new t.Event(\\\"move\\\",e)),this._zooming&&this.fire(new t.Event(\\\"zoom\\\",e)),this._rotating&&this.fire(new t.Event(\\\"rotate\\\",e)),this._pitching&&this.fire(new t.Event(\\\"pitch\\\",e))},r.prototype._afterEase=function(e,r){if(!this._easeId||!r||this._easeId!==r){delete this._easeId;var n=this._zooming,i=this._rotating,a=this._pitching;this._moving=!1,this._zooming=!1,this._rotating=!1,this._pitching=!1,this._padding=!1,n&&this.fire(new t.Event(\\\"zoomend\\\",e)),i&&this.fire(new t.Event(\\\"rotateend\\\",e)),a&&this.fire(new t.Event(\\\"pitchend\\\",e)),this.fire(new t.Event(\\\"moveend\\\",e))}},r.prototype.flyTo=function(e,r){var n=this;if(!e.essential&&t.browser.prefersReducedMotion){var i=t.pick(e,[\\\"center\\\",\\\"zoom\\\",\\\"bearing\\\",\\\"pitch\\\",\\\"around\\\"]);return this.jumpTo(i,r)}this.stop(),e=t.extend({offset:[0,0],speed:1.2,curve:1.42,easing:t.ease},e);var a=this.transform,o=this.getZoom(),s=this.getBearing(),l=this.getPitch(),u=this.getPadding(),c=\\\"zoom\\\"in e?t.clamp(+e.zoom,a.minZoom,a.maxZoom):o,f=\\\"bearing\\\"in e?this._normalizeBearing(e.bearing,s):s,h=\\\"pitch\\\"in e?+e.pitch:l,p=\\\"padding\\\"in e?e.padding:a.padding,d=a.zoomScale(c-o),v=t.Point.convert(e.offset),g=a.centerPoint.add(v),y=a.pointLocation(g),m=t.LngLat.convert(e.center||y);this._normalizeCenter(m);var x=a.project(y),b=a.project(m).sub(x),_=e.curve,w=Math.max(a.width,a.height),T=w/d,k=b.mag();if(\\\"minZoom\\\"in e){var A=t.clamp(Math.min(e.minZoom,o,c),a.minZoom,a.maxZoom),M=w/a.zoomScale(A-o);_=Math.sqrt(M/k*2)}var S=_*_;function E(t){var e=(T*T-w*w+(t?-1:1)*S*S*k*k)/(2*(t?T:w)*S*k);return Math.log(Math.sqrt(e*e+1)-e)}function L(t){return(Math.exp(t)-Math.exp(-t))/2}function C(t){return(Math.exp(t)+Math.exp(-t))/2}var P=E(0),O=function(t){return C(P)/C(P+_*t)},I=function(t){return w*((C(P)*(L(e=P+_*t)/C(e))-L(P))/S)/k;var e},D=(E(1)-P)/_;if(Math.abs(k)<1e-6||!isFinite(D)){if(Math.abs(w-T)<1e-6)return this.easeTo(e,r);var z=T<w?-1:1;D=Math.abs(Math.log(T/w))/_,I=function(){return 0},O=function(t){return Math.exp(z*_*t)}}if(\\\"duration\\\"in e)e.duration=+e.duration;else{var R=\\\"screenSpeed\\\"in e?+e.screenSpeed/_:+e.speed;e.duration=1e3*D/R}return e.maxDuration&&e.duration>e.maxDuration&&(e.duration=0),this._zooming=!0,this._rotating=s!==f,this._pitching=h!==l,this._padding=!a.isPaddingEqual(p),this._prepareEase(r,!1),this._ease((function(e){var i=e*D,d=1/O(i);a.zoom=1===e?c:o+a.scaleZoom(d),n._rotating&&(a.bearing=t.number(s,f,e)),n._pitching&&(a.pitch=t.number(l,h,e)),n._padding&&(a.interpolatePadding(u,p,e),g=a.centerPoint.add(v));var y=1===e?m:a.unproject(x.add(b.mult(I(i))).mult(d));a.setLocationAtPoint(a.renderWorldCopies?y.wrap():y,g),n._fireMoveEvents(r)}),(function(){return n._afterEase(r)}),e),this},r.prototype.isEasing=function(){return!!this._easeFrameId},r.prototype.stop=function(){return this._stop()},r.prototype._stop=function(t,e){if(this._easeFrameId&&(this._cancelRenderFrame(this._easeFrameId),delete this._easeFrameId,delete this._onEaseFrame),this._onEaseEnd){var r=this._onEaseEnd;delete this._onEaseEnd,r.call(this,e)}if(!t){var n=this.handlers;n&&n.stop()}return this},r.prototype._ease=function(e,r,n){!1===n.animate||0===n.duration?(e(1),r()):(this._easeStart=t.browser.now(),this._easeOptions=n,this._onEaseFrame=e,this._onEaseEnd=r,this._easeFrameId=this._requestRenderFrame(this._renderFrameCallback))},r.prototype._renderFrameCallback=function(){var e=Math.min((t.browser.now()-this._easeStart)/this._easeOptions.duration,1);this._onEaseFrame(this._easeOptions.easing(e)),e<1?this._easeFrameId=this._requestRenderFrame(this._renderFrameCallback):this.stop()},r.prototype._normalizeBearing=function(e,r){e=t.wrap(e,-180,180);var n=Math.abs(e-r);return Math.abs(e-360-r)<n&&(e-=360),Math.abs(e+360-r)<n&&(e+=360),e},r.prototype._normalizeCenter=function(t){var e=this.transform;if(e.renderWorldCopies&&!e.lngRange){var r=t.lng-e.center.lng;t.lng+=r>180?-360:r<-180?360:0}},r}(t.Evented),Mi=function(e){void 0===e&&(e={}),this.options=e,t.bindAll([\\\"_updateEditLink\\\",\\\"_updateData\\\",\\\"_updateCompact\\\"],this)};Mi.prototype.getDefaultPosition=function(){return\\\"bottom-right\\\"},Mi.prototype.onAdd=function(t){var e=this.options&&this.options.compact;return this._map=t,this._container=r.create(\\\"div\\\",\\\"mapboxgl-ctrl mapboxgl-ctrl-attrib\\\"),this._innerContainer=r.create(\\\"div\\\",\\\"mapboxgl-ctrl-attrib-inner\\\",this._container),e&&this._container.classList.add(\\\"mapboxgl-compact\\\"),this._updateAttributions(),this._updateEditLink(),this._map.on(\\\"styledata\\\",this._updateData),this._map.on(\\\"sourcedata\\\",this._updateData),this._map.on(\\\"moveend\\\",this._updateEditLink),void 0===e&&(this._map.on(\\\"resize\\\",this._updateCompact),this._updateCompact()),this._container},Mi.prototype.onRemove=function(){r.remove(this._container),this._map.off(\\\"styledata\\\",this._updateData),this._map.off(\\\"sourcedata\\\",this._updateData),this._map.off(\\\"moveend\\\",this._updateEditLink),this._map.off(\\\"resize\\\",this._updateCompact),this._map=void 0,this._attribHTML=void 0},Mi.prototype._updateEditLink=function(){var e=this._editLink;e||(e=this._editLink=this._container.querySelector(\\\".mapbox-improve-map\\\"));var r=[{key:\\\"owner\\\",value:this.styleOwner},{key:\\\"id\\\",value:this.styleId},{key:\\\"access_token\\\",value:this._map._requestManager._customAccessToken||t.config.ACCESS_TOKEN}];if(e){var n=r.reduce((function(t,e,n){return e.value&&(t+=e.key+\\\"=\\\"+e.value+(n<r.length-1?\\\"&\\\":\\\"\\\")),t}),\\\"?\\\");e.href=t.config.FEEDBACK_URL+\\\"/\\\"+n+(this._map._hash?this._map._hash.getHashString(!0):\\\"\\\"),e.rel=\\\"noopener nofollow\\\"}},Mi.prototype._updateData=function(t){!t||\\\"metadata\\\"!==t.sourceDataType&&\\\"style\\\"!==t.dataType||(this._updateAttributions(),this._updateEditLink())},Mi.prototype._updateAttributions=function(){if(this._map.style){var t=[];if(this.options.customAttribution&&(Array.isArray(this.options.customAttribution)?t=t.concat(this.options.customAttribution.map((function(t){return\\\"string\\\"!=typeof t?\\\"\\\":t}))):\\\"string\\\"==typeof this.options.customAttribution&&t.push(this.options.customAttribution)),this._map.style.stylesheet){var e=this._map.style.stylesheet;this.styleOwner=e.owner,this.styleId=e.id}var r=this._map.style.sourceCaches;for(var n in r){var i=r[n];if(i.used){var a=i.getSource();a.attribution&&t.indexOf(a.attribution)<0&&t.push(a.attribution)}}t.sort((function(t,e){return t.length-e.length}));var o=(t=t.filter((function(e,r){for(var n=r+1;n<t.length;n++)if(t[n].indexOf(e)>=0)return!1;return!0}))).join(\\\" | \\\");o!==this._attribHTML&&(this._attribHTML=o,t.length?(this._innerContainer.innerHTML=o,this._container.classList.remove(\\\"mapboxgl-attrib-empty\\\")):this._container.classList.add(\\\"mapboxgl-attrib-empty\\\"),this._editLink=null)}},Mi.prototype._updateCompact=function(){this._map.getCanvasContainer().offsetWidth<=640?this._container.classList.add(\\\"mapboxgl-compact\\\"):this._container.classList.remove(\\\"mapboxgl-compact\\\")};var Si=function(){t.bindAll([\\\"_updateLogo\\\"],this),t.bindAll([\\\"_updateCompact\\\"],this)};Si.prototype.onAdd=function(t){this._map=t,this._container=r.create(\\\"div\\\",\\\"mapboxgl-ctrl\\\");var e=r.create(\\\"a\\\",\\\"mapboxgl-ctrl-logo\\\");return e.target=\\\"_blank\\\",e.rel=\\\"noopener nofollow\\\",e.href=\\\"https://www.mapbox.com/\\\",e.setAttribute(\\\"aria-label\\\",this._map._getUIString(\\\"LogoControl.Title\\\")),e.setAttribute(\\\"rel\\\",\\\"noopener nofollow\\\"),this._container.appendChild(e),this._container.style.display=\\\"none\\\",this._map.on(\\\"sourcedata\\\",this._updateLogo),this._updateLogo(),this._map.on(\\\"resize\\\",this._updateCompact),this._updateCompact(),this._container},Si.prototype.onRemove=function(){r.remove(this._container),this._map.off(\\\"sourcedata\\\",this._updateLogo),this._map.off(\\\"resize\\\",this._updateCompact)},Si.prototype.getDefaultPosition=function(){return\\\"bottom-left\\\"},Si.prototype._updateLogo=function(t){t&&\\\"metadata\\\"!==t.sourceDataType||(this._container.style.display=this._logoRequired()?\\\"block\\\":\\\"none\\\")},Si.prototype._logoRequired=function(){if(this._map.style){var t=this._map.style.sourceCaches;for(var e in t)if(t[e].getSource().mapbox_logo)return!0;return!1}},Si.prototype._updateCompact=function(){var t=this._container.children;if(t.length){var e=t[0];this._map.getCanvasContainer().offsetWidth<250?e.classList.add(\\\"mapboxgl-compact\\\"):e.classList.remove(\\\"mapboxgl-compact\\\")}};var Ei=function(){this._queue=[],this._id=0,this._cleared=!1,this._currentlyRunning=!1};Ei.prototype.add=function(t){var e=++this._id;return this._queue.push({callback:t,id:e,cancelled:!1}),e},Ei.prototype.remove=function(t){for(var e=this._currentlyRunning,r=0,n=e?this._queue.concat(e):this._queue;r<n.length;r+=1){var i=n[r];if(i.id===t)return void(i.cancelled=!0)}},Ei.prototype.run=function(t){void 0===t&&(t=0);var e=this._currentlyRunning=this._queue;this._queue=[];for(var r=0,n=e;r<n.length;r+=1){var i=n[r];if(!i.cancelled&&(i.callback(t),this._cleared))break}this._cleared=!1,this._currentlyRunning=!1},Ei.prototype.clear=function(){this._currentlyRunning&&(this._cleared=!0),this._queue=[]};var Li={\\\"FullscreenControl.Enter\\\":\\\"Enter fullscreen\\\",\\\"FullscreenControl.Exit\\\":\\\"Exit fullscreen\\\",\\\"GeolocateControl.FindMyLocation\\\":\\\"Find my location\\\",\\\"GeolocateControl.LocationNotAvailable\\\":\\\"Location not available\\\",\\\"LogoControl.Title\\\":\\\"Mapbox logo\\\",\\\"NavigationControl.ResetBearing\\\":\\\"Reset bearing to north\\\",\\\"NavigationControl.ZoomIn\\\":\\\"Zoom in\\\",\\\"NavigationControl.ZoomOut\\\":\\\"Zoom out\\\",\\\"ScaleControl.Feet\\\":\\\"ft\\\",\\\"ScaleControl.Meters\\\":\\\"m\\\",\\\"ScaleControl.Kilometers\\\":\\\"km\\\",\\\"ScaleControl.Miles\\\":\\\"mi\\\",\\\"ScaleControl.NauticalMiles\\\":\\\"nm\\\"},Ci=t.window.HTMLImageElement,Pi=t.window.HTMLElement,Oi=t.window.ImageBitmap,Ii=60,Di={center:[0,0],zoom:0,bearing:0,pitch:0,minZoom:-2,maxZoom:22,minPitch:0,maxPitch:Ii,interactive:!0,scrollZoom:!0,boxZoom:!0,dragRotate:!0,dragPan:!0,keyboard:!0,doubleClickZoom:!0,touchZoomRotate:!0,touchPitch:!0,bearingSnap:7,clickTolerance:3,pitchWithRotate:!0,hash:!1,attributionControl:!0,failIfMajorPerformanceCaveat:!1,preserveDrawingBuffer:!1,trackResize:!0,renderWorldCopies:!0,refreshExpiredTiles:!0,maxTileCacheSize:null,localIdeographFontFamily:\\\"sans-serif\\\",transformRequest:null,accessToken:null,fadeDuration:300,crossSourceCollisions:!0},zi=function(n){function i(e){var r=this;if(null!=(e=t.extend({},Di,e)).minZoom&&null!=e.maxZoom&&e.minZoom>e.maxZoom)throw new Error(\\\"maxZoom must be greater than or equal to minZoom\\\");if(null!=e.minPitch&&null!=e.maxPitch&&e.minPitch>e.maxPitch)throw new Error(\\\"maxPitch must be greater than or equal to minPitch\\\");if(null!=e.minPitch&&e.minPitch<0)throw new Error(\\\"minPitch must be greater than or equal to 0\\\");if(null!=e.maxPitch&&e.maxPitch>Ii)throw new Error(\\\"maxPitch must be less than or equal to 60\\\");var i=new Cn(e.minZoom,e.maxZoom,e.minPitch,e.maxPitch,e.renderWorldCopies);if(n.call(this,i,e),this._interactive=e.interactive,this._maxTileCacheSize=e.maxTileCacheSize,this._failIfMajorPerformanceCaveat=e.failIfMajorPerformanceCaveat,this._preserveDrawingBuffer=e.preserveDrawingBuffer,this._antialias=e.antialias,this._trackResize=e.trackResize,this._bearingSnap=e.bearingSnap,this._refreshExpiredTiles=e.refreshExpiredTiles,this._fadeDuration=e.fadeDuration,this._crossSourceCollisions=e.crossSourceCollisions,this._crossFadingFactor=1,this._collectResourceTiming=e.collectResourceTiming,this._renderTaskQueue=new Ei,this._controls=[],this._mapId=t.uniqueId(),this._locale=t.extend({},Li,e.locale),this._requestManager=new t.RequestManager(e.transformRequest,e.accessToken),\\\"string\\\"==typeof e.container){if(this._container=t.window.document.getElementById(e.container),!this._container)throw new Error(\\\"Container '\\\"+e.container+\\\"' not found.\\\")}else{if(!(e.container instanceof Pi))throw new Error(\\\"Invalid type: 'container' must be a String or HTMLElement.\\\");this._container=e.container}if(e.maxBounds&&this.setMaxBounds(e.maxBounds),t.bindAll([\\\"_onWindowOnline\\\",\\\"_onWindowResize\\\",\\\"_contextLost\\\",\\\"_contextRestored\\\"],this),this._setupContainer(),this._setupPainter(),void 0===this.painter)throw new Error(\\\"Failed to initialize WebGL.\\\");this.on(\\\"move\\\",(function(){return r._update(!1)})),this.on(\\\"moveend\\\",(function(){return r._update(!1)})),this.on(\\\"zoom\\\",(function(){return r._update(!0)})),void 0!==t.window&&(t.window.addEventListener(\\\"online\\\",this._onWindowOnline,!1),t.window.addEventListener(\\\"resize\\\",this._onWindowResize,!1)),this.handlers=new ki(this,e);var a=\\\"string\\\"==typeof e.hash&&e.hash||void 0;this._hash=e.hash&&new On(a).addTo(this),this._hash&&this._hash._onHashChange()||(this.jumpTo({center:e.center,zoom:e.zoom,bearing:e.bearing,pitch:e.pitch}),e.bounds&&(this.resize(),this.fitBounds(e.bounds,t.extend({},e.fitBoundsOptions,{duration:0})))),this.resize(),this._localIdeographFontFamily=e.localIdeographFontFamily,e.style&&this.setStyle(e.style,{localIdeographFontFamily:e.localIdeographFontFamily}),e.attributionControl&&this.addControl(new Mi({customAttribution:e.customAttribution})),this.addControl(new Si,e.logoPosition),this.on(\\\"style.load\\\",(function(){r.transform.unmodified&&r.jumpTo(r.style.stylesheet)})),this.on(\\\"data\\\",(function(e){r._update(\\\"style\\\"===e.dataType),r.fire(new t.Event(e.dataType+\\\"data\\\",e))})),this.on(\\\"dataloading\\\",(function(e){r.fire(new t.Event(e.dataType+\\\"dataloading\\\",e))}))}n&&(i.__proto__=n),i.prototype=Object.create(n&&n.prototype),i.prototype.constructor=i;var a={showTileBoundaries:{configurable:!0},showPadding:{configurable:!0},showCollisionBoxes:{configurable:!0},showOverdrawInspector:{configurable:!0},repaint:{configurable:!0},vertices:{configurable:!0},version:{configurable:!0}};return i.prototype._getMapId=function(){return this._mapId},i.prototype.addControl=function(e,r){if(void 0===r&&e.getDefaultPosition&&(r=e.getDefaultPosition()),void 0===r&&(r=\\\"top-right\\\"),!e||!e.onAdd)return this.fire(new t.ErrorEvent(new Error(\\\"Invalid argument to map.addControl(). Argument must be a control with onAdd and onRemove methods.\\\")));var n=e.onAdd(this);this._controls.push(e);var i=this._controlPositions[r];return-1!==r.indexOf(\\\"bottom\\\")?i.insertBefore(n,i.firstChild):i.appendChild(n),this},i.prototype.removeControl=function(e){if(!e||!e.onRemove)return this.fire(new t.ErrorEvent(new Error(\\\"Invalid argument to map.removeControl(). Argument must be a control with onAdd and onRemove methods.\\\")));var r=this._controls.indexOf(e);return r>-1&&this._controls.splice(r,1),e.onRemove(this),this},i.prototype.resize=function(e){var r=this._containerDimensions(),n=r[0],i=r[1];this._resizeCanvas(n,i),this.transform.resize(n,i),this.painter.resize(n,i);var a=!this._moving;return a&&(this.stop(),this.fire(new t.Event(\\\"movestart\\\",e)).fire(new t.Event(\\\"move\\\",e))),this.fire(new t.Event(\\\"resize\\\",e)),a&&this.fire(new t.Event(\\\"moveend\\\",e)),this},i.prototype.getBounds=function(){return this.transform.getBounds()},i.prototype.getMaxBounds=function(){return this.transform.getMaxBounds()},i.prototype.setMaxBounds=function(e){return this.transform.setMaxBounds(t.LngLatBounds.convert(e)),this._update()},i.prototype.setMinZoom=function(t){if((t=null==t?-2:t)>=-2&&t<=this.transform.maxZoom)return this.transform.minZoom=t,this._update(),this.getZoom()<t&&this.setZoom(t),this;throw new Error(\\\"minZoom must be between -2 and the current maxZoom, inclusive\\\")},i.prototype.getMinZoom=function(){return this.transform.minZoom},i.prototype.setMaxZoom=function(t){if((t=null==t?22:t)>=this.transform.minZoom)return this.transform.maxZoom=t,this._update(),this.getZoom()>t&&this.setZoom(t),this;throw new Error(\\\"maxZoom must be greater than the current minZoom\\\")},i.prototype.getMaxZoom=function(){return this.transform.maxZoom},i.prototype.setMinPitch=function(t){if((t=null==t?0:t)<0)throw new Error(\\\"minPitch must be greater than or equal to 0\\\");if(t>=0&&t<=this.transform.maxPitch)return this.transform.minPitch=t,this._update(),this.getPitch()<t&&this.setPitch(t),this;throw new Error(\\\"minPitch must be between 0 and the current maxPitch, inclusive\\\")},i.prototype.getMinPitch=function(){return this.transform.minPitch},i.prototype.setMaxPitch=function(t){if((t=null==t?Ii:t)>Ii)throw new Error(\\\"maxPitch must be less than or equal to 60\\\");if(t>=this.transform.minPitch)return this.transform.maxPitch=t,this._update(),this.getPitch()>t&&this.setPitch(t),this;throw new Error(\\\"maxPitch must be greater than the current minPitch\\\")},i.prototype.getMaxPitch=function(){return this.transform.maxPitch},i.prototype.getRenderWorldCopies=function(){return this.transform.renderWorldCopies},i.prototype.setRenderWorldCopies=function(t){return this.transform.renderWorldCopies=t,this._update()},i.prototype.project=function(e){return this.transform.locationPoint(t.LngLat.convert(e))},i.prototype.unproject=function(e){return this.transform.pointLocation(t.Point.convert(e))},i.prototype.isMoving=function(){return this._moving||this.handlers.isMoving()},i.prototype.isZooming=function(){return this._zooming||this.handlers.isZooming()},i.prototype.isRotating=function(){return this._rotating||this.handlers.isRotating()},i.prototype._createDelegatedListener=function(t,e,r){var n,i=this;if(\\\"mouseenter\\\"===t||\\\"mouseover\\\"===t){var a=!1;return{layer:e,listener:r,delegates:{mousemove:function(n){var o=i.getLayer(e)?i.queryRenderedFeatures(n.point,{layers:[e]}):[];o.length?a||(a=!0,r.call(i,new Un(t,i,n.originalEvent,{features:o}))):a=!1},mouseout:function(){a=!1}}}}if(\\\"mouseleave\\\"===t||\\\"mouseout\\\"===t){var o=!1;return{layer:e,listener:r,delegates:{mousemove:function(n){(i.getLayer(e)?i.queryRenderedFeatures(n.point,{layers:[e]}):[]).length?o=!0:o&&(o=!1,r.call(i,new Un(t,i,n.originalEvent)))},mouseout:function(e){o&&(o=!1,r.call(i,new Un(t,i,e.originalEvent)))}}}}return{layer:e,listener:r,delegates:(n={},n[t]=function(t){var n=i.getLayer(e)?i.queryRenderedFeatures(t.point,{layers:[e]}):[];n.length&&(t.features=n,r.call(i,t),delete t.features)},n)}},i.prototype.on=function(t,e,r){if(void 0===r)return n.prototype.on.call(this,t,e);var i=this._createDelegatedListener(t,e,r);for(var a in this._delegatedListeners=this._delegatedListeners||{},this._delegatedListeners[t]=this._delegatedListeners[t]||[],this._delegatedListeners[t].push(i),i.delegates)this.on(a,i.delegates[a]);return this},i.prototype.once=function(t,e,r){if(void 0===r)return n.prototype.once.call(this,t,e);var i=this._createDelegatedListener(t,e,r);for(var a in i.delegates)this.once(a,i.delegates[a]);return this},i.prototype.off=function(t,e,r){var i=this;if(void 0===r)return n.prototype.off.call(this,t,e);return this._delegatedListeners&&this._delegatedListeners[t]&&function(n){for(var a=n[t],o=0;o<a.length;o++){var s=a[o];if(s.layer===e&&s.listener===r){for(var l in s.delegates)i.off(l,s.delegates[l]);return a.splice(o,1),i}}}(this._delegatedListeners),this},i.prototype.queryRenderedFeatures=function(e,r){if(!this.style)return[];var n;if(void 0!==r||void 0===e||e instanceof t.Point||Array.isArray(e)||(r=e,e=void 0),r=r||{},(e=e||[[0,0],[this.transform.width,this.transform.height]])instanceof t.Point||\\\"number\\\"==typeof e[0])n=[t.Point.convert(e)];else{var i=t.Point.convert(e[0]),a=t.Point.convert(e[1]);n=[i,new t.Point(a.x,i.y),a,new t.Point(i.x,a.y),i]}return this.style.queryRenderedFeatures(n,r,this.transform)},i.prototype.querySourceFeatures=function(t,e){return this.style.querySourceFeatures(t,e)},i.prototype.setStyle=function(e,r){return!1!==(r=t.extend({},{localIdeographFontFamily:this._localIdeographFontFamily},r)).diff&&r.localIdeographFontFamily===this._localIdeographFontFamily&&this.style&&e?(this._diffStyle(e,r),this):(this._localIdeographFontFamily=r.localIdeographFontFamily,this._updateStyle(e,r))},i.prototype._getUIString=function(t){var e=this._locale[t];if(null==e)throw new Error(\\\"Missing UI string '\\\"+t+\\\"'\\\");return e},i.prototype._updateStyle=function(t,e){return this.style&&(this.style.setEventedParent(null),this.style._remove()),t?(this.style=new Ye(this,e||{}),this.style.setEventedParent(this,{style:this.style}),\\\"string\\\"==typeof t?this.style.loadURL(t):this.style.loadJSON(t),this):(delete this.style,this)},i.prototype._lazyInitEmptyStyle=function(){this.style||(this.style=new Ye(this,{}),this.style.setEventedParent(this,{style:this.style}),this.style.loadEmpty())},i.prototype._diffStyle=function(e,r){var n=this;if(\\\"string\\\"==typeof e){var i=this._requestManager.normalizeStyleURL(e),a=this._requestManager.transformRequest(i,t.ResourceType.Style);t.getJSON(a,(function(e,i){e?n.fire(new t.ErrorEvent(e)):i&&n._updateDiff(i,r)}))}else\\\"object\\\"==typeof e&&this._updateDiff(e,r)},i.prototype._updateDiff=function(e,r){try{this.style.setState(e)&&this._update(!0)}catch(n){t.warnOnce(\\\"Unable to perform style diff: \\\"+(n.message||n.error||n)+\\\".  Rebuilding the style from scratch.\\\"),this._updateStyle(e,r)}},i.prototype.getStyle=function(){if(this.style)return this.style.serialize()},i.prototype.isStyleLoaded=function(){return this.style?this.style.loaded():t.warnOnce(\\\"There is no style added to the map.\\\")},i.prototype.addSource=function(t,e){return this._lazyInitEmptyStyle(),this.style.addSource(t,e),this._update(!0)},i.prototype.isSourceLoaded=function(e){var r=this.style&&this.style.sourceCaches[e];if(void 0!==r)return r.loaded();this.fire(new t.ErrorEvent(new Error(\\\"There is no source with ID '\\\"+e+\\\"'\\\")))},i.prototype.areTilesLoaded=function(){var t=this.style&&this.style.sourceCaches;for(var e in t){var r=t[e]._tiles;for(var n in r){var i=r[n];if(\\\"loaded\\\"!==i.state&&\\\"errored\\\"!==i.state)return!1}}return!0},i.prototype.addSourceType=function(t,e,r){return this._lazyInitEmptyStyle(),this.style.addSourceType(t,e,r)},i.prototype.removeSource=function(t){return this.style.removeSource(t),this._update(!0)},i.prototype.getSource=function(t){return this.style.getSource(t)},i.prototype.addImage=function(e,r,n){void 0===n&&(n={});var i=n.pixelRatio;void 0===i&&(i=1);var a=n.sdf;void 0===a&&(a=!1);var o=n.stretchX,s=n.stretchY,l=n.content;this._lazyInitEmptyStyle();if(r instanceof Ci||Oi&&r instanceof Oi){var u=t.browser.getImageData(r),c=u.width,f=u.height,h=u.data;this.style.addImage(e,{data:new t.RGBAImage({width:c,height:f},h),pixelRatio:i,stretchX:o,stretchY:s,content:l,sdf:a,version:0})}else{if(void 0===r.width||void 0===r.height)return this.fire(new t.ErrorEvent(new Error(\\\"Invalid arguments to map.addImage(). The second argument must be an `HTMLImageElement`, `ImageData`, `ImageBitmap`, or object with `width`, `height`, and `data` properties with the same format as `ImageData`\\\")));var p=r.width,d=r.height,v=r.data,g=r;this.style.addImage(e,{data:new t.RGBAImage({width:p,height:d},new Uint8Array(v)),pixelRatio:i,stretchX:o,stretchY:s,content:l,sdf:a,version:0,userImage:g}),g.onAdd&&g.onAdd(this,e)}},i.prototype.updateImage=function(e,r){var n=this.style.getImage(e);if(!n)return this.fire(new t.ErrorEvent(new Error(\\\"The map has no image with that id. If you are adding a new image use `map.addImage(...)` instead.\\\")));var i=r instanceof Ci||Oi&&r instanceof Oi?t.browser.getImageData(r):r,a=i.width,o=i.height,s=i.data;if(void 0===a||void 0===o)return this.fire(new t.ErrorEvent(new Error(\\\"Invalid arguments to map.updateImage(). The second argument must be an `HTMLImageElement`, `ImageData`, `ImageBitmap`, or object with `width`, `height`, and `data` properties with the same format as `ImageData`\\\")));if(a!==n.data.width||o!==n.data.height)return this.fire(new t.ErrorEvent(new Error(\\\"The width and height of the updated image must be that same as the previous version of the image\\\")));var l=!(r instanceof Ci||Oi&&r instanceof Oi);n.data.replace(s,l),this.style.updateImage(e,n)},i.prototype.hasImage=function(e){return e?!!this.style.getImage(e):(this.fire(new t.ErrorEvent(new Error(\\\"Missing required image id\\\"))),!1)},i.prototype.removeImage=function(t){this.style.removeImage(t)},i.prototype.loadImage=function(e,r){t.getImage(this._requestManager.transformRequest(e,t.ResourceType.Image),r)},i.prototype.listImages=function(){return this.style.listImages()},i.prototype.addLayer=function(t,e){return this._lazyInitEmptyStyle(),this.style.addLayer(t,e),this._update(!0)},i.prototype.moveLayer=function(t,e){return this.style.moveLayer(t,e),this._update(!0)},i.prototype.removeLayer=function(t){return this.style.removeLayer(t),this._update(!0)},i.prototype.getLayer=function(t){return this.style.getLayer(t)},i.prototype.setLayerZoomRange=function(t,e,r){return this.style.setLayerZoomRange(t,e,r),this._update(!0)},i.prototype.setFilter=function(t,e,r){return void 0===r&&(r={}),this.style.setFilter(t,e,r),this._update(!0)},i.prototype.getFilter=function(t){return this.style.getFilter(t)},i.prototype.setPaintProperty=function(t,e,r,n){return void 0===n&&(n={}),this.style.setPaintProperty(t,e,r,n),this._update(!0)},i.prototype.getPaintProperty=function(t,e){return this.style.getPaintProperty(t,e)},i.prototype.setLayoutProperty=function(t,e,r,n){return void 0===n&&(n={}),this.style.setLayoutProperty(t,e,r,n),this._update(!0)},i.prototype.getLayoutProperty=function(t,e){return this.style.getLayoutProperty(t,e)},i.prototype.setLight=function(t,e){return void 0===e&&(e={}),this._lazyInitEmptyStyle(),this.style.setLight(t,e),this._update(!0)},i.prototype.getLight=function(){return this.style.getLight()},i.prototype.setFeatureState=function(t,e){return this.style.setFeatureState(t,e),this._update()},i.prototype.removeFeatureState=function(t,e){return this.style.removeFeatureState(t,e),this._update()},i.prototype.getFeatureState=function(t){return this.style.getFeatureState(t)},i.prototype.getContainer=function(){return this._container},i.prototype.getCanvasContainer=function(){return this._canvasContainer},i.prototype.getCanvas=function(){return this._canvas},i.prototype._containerDimensions=function(){var t=0,e=0;return this._container&&(t=this._container.clientWidth||400,e=this._container.clientHeight||300),[t,e]},i.prototype._detectMissingCSS=function(){\\\"rgb(250, 128, 114)\\\"!==t.window.getComputedStyle(this._missingCSSCanary).getPropertyValue(\\\"background-color\\\")&&t.warnOnce(\\\"This page appears to be missing CSS declarations for Mapbox GL JS, which may cause the map to display incorrectly. Please ensure your page includes mapbox-gl.css, as described in https://www.mapbox.com/mapbox-gl-js/api/.\\\")},i.prototype._setupContainer=function(){var t=this._container;t.classList.add(\\\"mapboxgl-map\\\"),(this._missingCSSCanary=r.create(\\\"div\\\",\\\"mapboxgl-canary\\\",t)).style.visibility=\\\"hidden\\\",this._detectMissingCSS();var e=this._canvasContainer=r.create(\\\"div\\\",\\\"mapboxgl-canvas-container\\\",t);this._interactive&&e.classList.add(\\\"mapboxgl-interactive\\\"),this._canvas=r.create(\\\"canvas\\\",\\\"mapboxgl-canvas\\\",e),this._canvas.addEventListener(\\\"webglcontextlost\\\",this._contextLost,!1),this._canvas.addEventListener(\\\"webglcontextrestored\\\",this._contextRestored,!1),this._canvas.setAttribute(\\\"tabindex\\\",\\\"0\\\"),this._canvas.setAttribute(\\\"aria-label\\\",\\\"Map\\\");var n=this._containerDimensions();this._resizeCanvas(n[0],n[1]);var i=this._controlContainer=r.create(\\\"div\\\",\\\"mapboxgl-control-container\\\",t),a=this._controlPositions={};[\\\"top-left\\\",\\\"top-right\\\",\\\"bottom-left\\\",\\\"bottom-right\\\"].forEach((function(t){a[t]=r.create(\\\"div\\\",\\\"mapboxgl-ctrl-\\\"+t,i)}))},i.prototype._resizeCanvas=function(e,r){var n=t.browser.devicePixelRatio||1;this._canvas.width=n*e,this._canvas.height=n*r,this._canvas.style.width=e+\\\"px\\\",this._canvas.style.height=r+\\\"px\\\"},i.prototype._setupPainter=function(){var r=t.extend({},e.webGLContextAttributes,{failIfMajorPerformanceCaveat:this._failIfMajorPerformanceCaveat,preserveDrawingBuffer:this._preserveDrawingBuffer,antialias:this._antialias||!1}),n=this._canvas.getContext(\\\"webgl\\\",r)||this._canvas.getContext(\\\"experimental-webgl\\\",r);n?(this.painter=new Mn(n,this.transform),t.webpSupported.testSupport(n)):this.fire(new t.ErrorEvent(new Error(\\\"Failed to initialize WebGL\\\")))},i.prototype._contextLost=function(e){e.preventDefault(),this._frame&&(this._frame.cancel(),this._frame=null),this.fire(new t.Event(\\\"webglcontextlost\\\",{originalEvent:e}))},i.prototype._contextRestored=function(e){this._setupPainter(),this.resize(),this._update(),this.fire(new t.Event(\\\"webglcontextrestored\\\",{originalEvent:e}))},i.prototype.loaded=function(){return!this._styleDirty&&!this._sourcesDirty&&!!this.style&&this.style.loaded()},i.prototype._update=function(t){return this.style?(this._styleDirty=this._styleDirty||t,this._sourcesDirty=!0,this.triggerRepaint(),this):this},i.prototype._requestRenderFrame=function(t){return this._update(),this._renderTaskQueue.add(t)},i.prototype._cancelRenderFrame=function(t){this._renderTaskQueue.remove(t)},i.prototype._render=function(e){var r,n=this,i=0,a=this.painter.context.extTimerQuery;if(this.listens(\\\"gpu-timing-frame\\\")&&(r=a.createQueryEXT(),a.beginQueryEXT(a.TIME_ELAPSED_EXT,r),i=t.browser.now()),this.painter.context.setDirty(),this.painter.setBaseState(),this._renderTaskQueue.run(e),!this._removed){var o=!1;if(this.style&&this._styleDirty){this._styleDirty=!1;var s=this.transform.zoom,l=t.browser.now();this.style.zoomHistory.update(s,l);var u=new t.EvaluationParameters(s,{now:l,fadeDuration:this._fadeDuration,zoomHistory:this.style.zoomHistory,transition:this.style.getTransition()}),c=u.crossFadingFactor();1===c&&c===this._crossFadingFactor||(o=!0,this._crossFadingFactor=c),this.style.update(u)}if(this.style&&this._sourcesDirty&&(this._sourcesDirty=!1,this.style._updateSources(this.transform)),this._placementDirty=this.style&&this.style._updatePlacement(this.painter.transform,this.showCollisionBoxes,this._fadeDuration,this._crossSourceCollisions),this.painter.render(this.style,{showTileBoundaries:this.showTileBoundaries,showOverdrawInspector:this._showOverdrawInspector,rotating:this.isRotating(),zooming:this.isZooming(),moving:this.isMoving(),fadeDuration:this._fadeDuration,showPadding:this.showPadding,gpuTiming:!!this.listens(\\\"gpu-timing-layer\\\")}),this.fire(new t.Event(\\\"render\\\")),this.loaded()&&!this._loaded&&(this._loaded=!0,this.fire(new t.Event(\\\"load\\\"))),this.style&&(this.style.hasTransitions()||o)&&(this._styleDirty=!0),this.style&&!this._placementDirty&&this.style._releaseSymbolFadeTiles(),this.listens(\\\"gpu-timing-frame\\\")){var f=t.browser.now()-i;a.endQueryEXT(a.TIME_ELAPSED_EXT,r),setTimeout((function(){var e=a.getQueryObjectEXT(r,a.QUERY_RESULT_EXT)/1e6;a.deleteQueryEXT(r),n.fire(new t.Event(\\\"gpu-timing-frame\\\",{cpuTime:f,gpuTime:e}))}),50)}if(this.listens(\\\"gpu-timing-layer\\\")){var h=this.painter.collectGpuTimers();setTimeout((function(){var e=n.painter.queryGpuTimers(h);n.fire(new t.Event(\\\"gpu-timing-layer\\\",{layerTimes:e}))}),50)}return this._sourcesDirty||this._styleDirty||this._placementDirty||this._repaint?this.triggerRepaint():!this.isMoving()&&this.loaded()&&(this._fullyLoaded||(this._fullyLoaded=!0),this.fire(new t.Event(\\\"idle\\\"))),this}},i.prototype.remove=function(){this._hash&&this._hash.remove();for(var e=0,r=this._controls;e<r.length;e+=1)r[e].onRemove(this);this._controls=[],this._frame&&(this._frame.cancel(),this._frame=null),this._renderTaskQueue.clear(),this.painter.destroy(),this.handlers.destroy(),delete this.handlers,this.setStyle(null),void 0!==t.window&&(t.window.removeEventListener(\\\"resize\\\",this._onWindowResize,!1),t.window.removeEventListener(\\\"online\\\",this._onWindowOnline,!1));var n=this.painter.context.gl.getExtension(\\\"WEBGL_lose_context\\\");n&&n.loseContext(),Ri(this._canvasContainer),Ri(this._controlContainer),Ri(this._missingCSSCanary),this._container.classList.remove(\\\"mapboxgl-map\\\"),this._removed=!0,this.fire(new t.Event(\\\"remove\\\"))},i.prototype.triggerRepaint=function(){var e=this;this.style&&!this._frame&&(this._frame=t.browser.frame((function(t){e._frame=null,e._render(t)})))},i.prototype._onWindowOnline=function(){this._update()},i.prototype._onWindowResize=function(t){this._trackResize&&this.resize({originalEvent:t})._update()},a.showTileBoundaries.get=function(){return!!this._showTileBoundaries},a.showTileBoundaries.set=function(t){this._showTileBoundaries!==t&&(this._showTileBoundaries=t,this._update())},a.showPadding.get=function(){return!!this._showPadding},a.showPadding.set=function(t){this._showPadding!==t&&(this._showPadding=t,this._update())},a.showCollisionBoxes.get=function(){return!!this._showCollisionBoxes},a.showCollisionBoxes.set=function(t){this._showCollisionBoxes!==t&&(this._showCollisionBoxes=t,t?this.style._generateCollisionBoxes():this._update())},a.showOverdrawInspector.get=function(){return!!this._showOverdrawInspector},a.showOverdrawInspector.set=function(t){this._showOverdrawInspector!==t&&(this._showOverdrawInspector=t,this._update())},a.repaint.get=function(){return!!this._repaint},a.repaint.set=function(t){this._repaint!==t&&(this._repaint=t,this.triggerRepaint())},a.vertices.get=function(){return!!this._vertices},a.vertices.set=function(t){this._vertices=t,this._update()},i.prototype._setCacheLimits=function(e,r){t.setCacheLimits(e,r)},a.version.get=function(){return t.version},Object.defineProperties(i.prototype,a),i}(Ai);function Ri(t){t.parentNode&&t.parentNode.removeChild(t)}var Fi={showCompass:!0,showZoom:!0,visualizePitch:!1},Bi=function(e){var n=this;this.options=t.extend({},Fi,e),this._container=r.create(\\\"div\\\",\\\"mapboxgl-ctrl mapboxgl-ctrl-group\\\"),this._container.addEventListener(\\\"contextmenu\\\",(function(t){return t.preventDefault()})),this.options.showZoom&&(t.bindAll([\\\"_setButtonTitle\\\",\\\"_updateZoomButtons\\\"],this),this._zoomInButton=this._createButton(\\\"mapboxgl-ctrl-zoom-in\\\",(function(t){return n._map.zoomIn({},{originalEvent:t})})),r.create(\\\"span\\\",\\\"mapboxgl-ctrl-icon\\\",this._zoomInButton).setAttribute(\\\"aria-hidden\\\",!0),this._zoomOutButton=this._createButton(\\\"mapboxgl-ctrl-zoom-out\\\",(function(t){return n._map.zoomOut({},{originalEvent:t})})),r.create(\\\"span\\\",\\\"mapboxgl-ctrl-icon\\\",this._zoomOutButton).setAttribute(\\\"aria-hidden\\\",!0)),this.options.showCompass&&(t.bindAll([\\\"_rotateCompassArrow\\\"],this),this._compass=this._createButton(\\\"mapboxgl-ctrl-compass\\\",(function(t){n.options.visualizePitch?n._map.resetNorthPitch({},{originalEvent:t}):n._map.resetNorth({},{originalEvent:t})})),this._compassIcon=r.create(\\\"span\\\",\\\"mapboxgl-ctrl-icon\\\",this._compass),this._compassIcon.setAttribute(\\\"aria-hidden\\\",!0))};Bi.prototype._updateZoomButtons=function(){var t=this._map.getZoom();this._zoomInButton.disabled=t===this._map.getMaxZoom(),this._zoomOutButton.disabled=t===this._map.getMinZoom()},Bi.prototype._rotateCompassArrow=function(){var t=this.options.visualizePitch?\\\"scale(\\\"+1/Math.pow(Math.cos(this._map.transform.pitch*(Math.PI/180)),.5)+\\\") rotateX(\\\"+this._map.transform.pitch+\\\"deg) rotateZ(\\\"+this._map.transform.angle*(180/Math.PI)+\\\"deg)\\\":\\\"rotate(\\\"+this._map.transform.angle*(180/Math.PI)+\\\"deg)\\\";this._compassIcon.style.transform=t},Bi.prototype.onAdd=function(t){return this._map=t,this.options.showZoom&&(this._setButtonTitle(this._zoomInButton,\\\"ZoomIn\\\"),this._setButtonTitle(this._zoomOutButton,\\\"ZoomOut\\\"),this._map.on(\\\"zoom\\\",this._updateZoomButtons),this._updateZoomButtons()),this.options.showCompass&&(this._setButtonTitle(this._compass,\\\"ResetBearing\\\"),this.options.visualizePitch&&this._map.on(\\\"pitch\\\",this._rotateCompassArrow),this._map.on(\\\"rotate\\\",this._rotateCompassArrow),this._rotateCompassArrow(),this._handler=new Ni(this._map,this._compass,this.options.visualizePitch)),this._container},Bi.prototype.onRemove=function(){r.remove(this._container),this.options.showZoom&&this._map.off(\\\"zoom\\\",this._updateZoomButtons),this.options.showCompass&&(this.options.visualizePitch&&this._map.off(\\\"pitch\\\",this._rotateCompassArrow),this._map.off(\\\"rotate\\\",this._rotateCompassArrow),this._handler.off(),delete this._handler),delete this._map},Bi.prototype._createButton=function(t,e){var n=r.create(\\\"button\\\",t,this._container);return n.type=\\\"button\\\",n.addEventListener(\\\"click\\\",e),n},Bi.prototype._setButtonTitle=function(t,e){var r=this._map._getUIString(\\\"NavigationControl.\\\"+e);t.title=r,t.setAttribute(\\\"aria-label\\\",r)};var Ni=function(e,n,i){void 0===i&&(i=!1),this._clickTolerance=10,this.element=n,this.mouseRotate=new Qn({clickTolerance:e.dragRotate._mouseRotate._clickTolerance}),this.map=e,i&&(this.mousePitch=new ti({clickTolerance:e.dragRotate._mousePitch._clickTolerance})),t.bindAll([\\\"mousedown\\\",\\\"mousemove\\\",\\\"mouseup\\\",\\\"touchstart\\\",\\\"touchmove\\\",\\\"touchend\\\",\\\"reset\\\"],this),r.addEventListener(n,\\\"mousedown\\\",this.mousedown),r.addEventListener(n,\\\"touchstart\\\",this.touchstart,{passive:!1}),r.addEventListener(n,\\\"touchmove\\\",this.touchmove),r.addEventListener(n,\\\"touchend\\\",this.touchend),r.addEventListener(n,\\\"touchcancel\\\",this.reset)};function ji(e,r,n){if(e=new t.LngLat(e.lng,e.lat),r){var i=new t.LngLat(e.lng-360,e.lat),a=new t.LngLat(e.lng+360,e.lat),o=n.locationPoint(e).distSqr(r);n.locationPoint(i).distSqr(r)<o?e=i:n.locationPoint(a).distSqr(r)<o&&(e=a)}for(;Math.abs(e.lng-n.center.lng)>180;){var s=n.locationPoint(e);if(s.x>=0&&s.y>=0&&s.x<=n.width&&s.y<=n.height)break;e.lng>n.center.lng?e.lng-=360:e.lng+=360}return e}Ni.prototype.down=function(t,e){this.mouseRotate.mousedown(t,e),this.mousePitch&&this.mousePitch.mousedown(t,e),r.disableDrag()},Ni.prototype.move=function(t,e){var r=this.map,n=this.mouseRotate.mousemoveWindow(t,e);if(n&&n.bearingDelta&&r.setBearing(r.getBearing()+n.bearingDelta),this.mousePitch){var i=this.mousePitch.mousemoveWindow(t,e);i&&i.pitchDelta&&r.setPitch(r.getPitch()+i.pitchDelta)}},Ni.prototype.off=function(){var t=this.element;r.removeEventListener(t,\\\"mousedown\\\",this.mousedown),r.removeEventListener(t,\\\"touchstart\\\",this.touchstart,{passive:!1}),r.removeEventListener(t,\\\"touchmove\\\",this.touchmove),r.removeEventListener(t,\\\"touchend\\\",this.touchend),r.removeEventListener(t,\\\"touchcancel\\\",this.reset),this.offTemp()},Ni.prototype.offTemp=function(){r.enableDrag(),r.removeEventListener(t.window,\\\"mousemove\\\",this.mousemove),r.removeEventListener(t.window,\\\"mouseup\\\",this.mouseup)},Ni.prototype.mousedown=function(e){this.down(t.extend({},e,{ctrlKey:!0,preventDefault:function(){return e.preventDefault()}}),r.mousePos(this.element,e)),r.addEventListener(t.window,\\\"mousemove\\\",this.mousemove),r.addEventListener(t.window,\\\"mouseup\\\",this.mouseup)},Ni.prototype.mousemove=function(t){this.move(t,r.mousePos(this.element,t))},Ni.prototype.mouseup=function(t){this.mouseRotate.mouseupWindow(t),this.mousePitch&&this.mousePitch.mouseupWindow(t),this.offTemp()},Ni.prototype.touchstart=function(t){1!==t.targetTouches.length?this.reset():(this._startPos=this._lastPos=r.touchPos(this.element,t.targetTouches)[0],this.down({type:\\\"mousedown\\\",button:0,ctrlKey:!0,preventDefault:function(){return t.preventDefault()}},this._startPos))},Ni.prototype.touchmove=function(t){1!==t.targetTouches.length?this.reset():(this._lastPos=r.touchPos(this.element,t.targetTouches)[0],this.move({preventDefault:function(){return t.preventDefault()}},this._lastPos))},Ni.prototype.touchend=function(t){0===t.targetTouches.length&&this._startPos&&this._lastPos&&this._startPos.dist(this._lastPos)<this._clickTolerance&&this.element.click(),this.reset()},Ni.prototype.reset=function(){this.mouseRotate.reset(),this.mousePitch&&this.mousePitch.reset(),delete this._startPos,delete this._lastPos,this.offTemp()};var Ui={center:\\\"translate(-50%,-50%)\\\",top:\\\"translate(-50%,0)\\\",\\\"top-left\\\":\\\"translate(0,0)\\\",\\\"top-right\\\":\\\"translate(-100%,0)\\\",bottom:\\\"translate(-50%,-100%)\\\",\\\"bottom-left\\\":\\\"translate(0,-100%)\\\",\\\"bottom-right\\\":\\\"translate(-100%,-100%)\\\",left:\\\"translate(0,-50%)\\\",right:\\\"translate(-100%,-50%)\\\"};function Vi(t,e,r){var n=t.classList;for(var i in Ui)n.remove(\\\"mapboxgl-\\\"+r+\\\"-anchor-\\\"+i);n.add(\\\"mapboxgl-\\\"+r+\\\"-anchor-\\\"+e)}var Hi,qi=function(e){function n(n,i){var a=this;if(e.call(this),(n instanceof t.window.HTMLElement||i)&&(n=t.extend({element:n},i)),t.bindAll([\\\"_update\\\",\\\"_onMove\\\",\\\"_onUp\\\",\\\"_addDragHandler\\\",\\\"_onMapClick\\\",\\\"_onKeyPress\\\"],this),this._anchor=n&&n.anchor||\\\"center\\\",this._color=n&&n.color||\\\"#3FB1CE\\\",this._draggable=n&&n.draggable||!1,this._state=\\\"inactive\\\",this._rotation=n&&n.rotation||0,this._rotationAlignment=n&&n.rotationAlignment||\\\"auto\\\",this._pitchAlignment=n&&n.pitchAlignment&&\\\"auto\\\"!==n.pitchAlignment?n.pitchAlignment:this._rotationAlignment,n&&n.element)this._element=n.element,this._offset=t.Point.convert(n&&n.offset||[0,0]);else{this._defaultMarker=!0,this._element=r.create(\\\"div\\\"),this._element.setAttribute(\\\"aria-label\\\",\\\"Map marker\\\");var o=r.createNS(\\\"http://www.w3.org/2000/svg\\\",\\\"svg\\\");o.setAttributeNS(null,\\\"display\\\",\\\"block\\\"),o.setAttributeNS(null,\\\"height\\\",\\\"41px\\\"),o.setAttributeNS(null,\\\"width\\\",\\\"27px\\\"),o.setAttributeNS(null,\\\"viewBox\\\",\\\"0 0 27 41\\\");var s=r.createNS(\\\"http://www.w3.org/2000/svg\\\",\\\"g\\\");s.setAttributeNS(null,\\\"stroke\\\",\\\"none\\\"),s.setAttributeNS(null,\\\"stroke-width\\\",\\\"1\\\"),s.setAttributeNS(null,\\\"fill\\\",\\\"none\\\"),s.setAttributeNS(null,\\\"fill-rule\\\",\\\"evenodd\\\");var l=r.createNS(\\\"http://www.w3.org/2000/svg\\\",\\\"g\\\");l.setAttributeNS(null,\\\"fill-rule\\\",\\\"nonzero\\\");var u=r.createNS(\\\"http://www.w3.org/2000/svg\\\",\\\"g\\\");u.setAttributeNS(null,\\\"transform\\\",\\\"translate(3.0, 29.0)\\\"),u.setAttributeNS(null,\\\"fill\\\",\\\"#000000\\\");for(var c=0,f=[{rx:\\\"10.5\\\",ry:\\\"5.25002273\\\"},{rx:\\\"10.5\\\",ry:\\\"5.25002273\\\"},{rx:\\\"9.5\\\",ry:\\\"4.77275007\\\"},{rx:\\\"8.5\\\",ry:\\\"4.29549936\\\"},{rx:\\\"7.5\\\",ry:\\\"3.81822308\\\"},{rx:\\\"6.5\\\",ry:\\\"3.34094679\\\"},{rx:\\\"5.5\\\",ry:\\\"2.86367051\\\"},{rx:\\\"4.5\\\",ry:\\\"2.38636864\\\"}];c<f.length;c+=1){var h=f[c],p=r.createNS(\\\"http://www.w3.org/2000/svg\\\",\\\"ellipse\\\");p.setAttributeNS(null,\\\"opacity\\\",\\\"0.04\\\"),p.setAttributeNS(null,\\\"cx\\\",\\\"10.5\\\"),p.setAttributeNS(null,\\\"cy\\\",\\\"5.80029008\\\"),p.setAttributeNS(null,\\\"rx\\\",h.rx),p.setAttributeNS(null,\\\"ry\\\",h.ry),u.appendChild(p)}var d=r.createNS(\\\"http://www.w3.org/2000/svg\\\",\\\"g\\\");d.setAttributeNS(null,\\\"fill\\\",this._color);var v=r.createNS(\\\"http://www.w3.org/2000/svg\\\",\\\"path\\\");v.setAttributeNS(null,\\\"d\\\",\\\"M27,13.5 C27,19.074644 20.250001,27.000002 14.75,34.500002 C14.016665,35.500004 12.983335,35.500004 12.25,34.500002 C6.7499993,27.000002 0,19.222562 0,13.5 C0,6.0441559 6.0441559,0 13.5,0 C20.955844,0 27,6.0441559 27,13.5 Z\\\"),d.appendChild(v);var g=r.createNS(\\\"http://www.w3.org/2000/svg\\\",\\\"g\\\");g.setAttributeNS(null,\\\"opacity\\\",\\\"0.25\\\"),g.setAttributeNS(null,\\\"fill\\\",\\\"#000000\\\");var y=r.createNS(\\\"http://www.w3.org/2000/svg\\\",\\\"path\\\");y.setAttributeNS(null,\\\"d\\\",\\\"M13.5,0 C6.0441559,0 0,6.0441559 0,13.5 C0,19.222562 6.7499993,27 12.25,34.5 C13,35.522727 14.016664,35.500004 14.75,34.5 C20.250001,27 27,19.074644 27,13.5 C27,6.0441559 20.955844,0 13.5,0 Z M13.5,1 C20.415404,1 26,6.584596 26,13.5 C26,15.898657 24.495584,19.181431 22.220703,22.738281 C19.945823,26.295132 16.705119,30.142167 13.943359,33.908203 C13.743445,34.180814 13.612715,34.322738 13.5,34.441406 C13.387285,34.322738 13.256555,34.180814 13.056641,33.908203 C10.284481,30.127985 7.4148684,26.314159 5.015625,22.773438 C2.6163816,19.232715 1,15.953538 1,13.5 C1,6.584596 6.584596,1 13.5,1 Z\\\"),g.appendChild(y);var m=r.createNS(\\\"http://www.w3.org/2000/svg\\\",\\\"g\\\");m.setAttributeNS(null,\\\"transform\\\",\\\"translate(6.0, 7.0)\\\"),m.setAttributeNS(null,\\\"fill\\\",\\\"#FFFFFF\\\");var x=r.createNS(\\\"http://www.w3.org/2000/svg\\\",\\\"g\\\");x.setAttributeNS(null,\\\"transform\\\",\\\"translate(8.0, 8.0)\\\");var b=r.createNS(\\\"http://www.w3.org/2000/svg\\\",\\\"circle\\\");b.setAttributeNS(null,\\\"fill\\\",\\\"#000000\\\"),b.setAttributeNS(null,\\\"opacity\\\",\\\"0.25\\\"),b.setAttributeNS(null,\\\"cx\\\",\\\"5.5\\\"),b.setAttributeNS(null,\\\"cy\\\",\\\"5.5\\\"),b.setAttributeNS(null,\\\"r\\\",\\\"5.4999962\\\");var _=r.createNS(\\\"http://www.w3.org/2000/svg\\\",\\\"circle\\\");_.setAttributeNS(null,\\\"fill\\\",\\\"#FFFFFF\\\"),_.setAttributeNS(null,\\\"cx\\\",\\\"5.5\\\"),_.setAttributeNS(null,\\\"cy\\\",\\\"5.5\\\"),_.setAttributeNS(null,\\\"r\\\",\\\"5.4999962\\\"),x.appendChild(b),x.appendChild(_),l.appendChild(u),l.appendChild(d),l.appendChild(g),l.appendChild(m),l.appendChild(x),o.appendChild(l),this._element.appendChild(o),this._offset=t.Point.convert(n&&n.offset||[0,-14])}this._element.classList.add(\\\"mapboxgl-marker\\\"),this._element.addEventListener(\\\"dragstart\\\",(function(t){t.preventDefault()})),this._element.addEventListener(\\\"mousedown\\\",(function(t){t.preventDefault()})),this._element.addEventListener(\\\"focus\\\",(function(){var t=a._map.getContainer();t.scrollTop=0,t.scrollLeft=0})),Vi(this._element,this._anchor,\\\"marker\\\"),this._popup=null}return e&&(n.__proto__=e),n.prototype=Object.create(e&&e.prototype),n.prototype.constructor=n,n.prototype.addTo=function(t){return this.remove(),this._map=t,t.getCanvasContainer().appendChild(this._element),t.on(\\\"move\\\",this._update),t.on(\\\"moveend\\\",this._update),this.setDraggable(this._draggable),this._update(),this._map.on(\\\"click\\\",this._onMapClick),this},n.prototype.remove=function(){return this._map&&(this._map.off(\\\"click\\\",this._onMapClick),this._map.off(\\\"move\\\",this._update),this._map.off(\\\"moveend\\\",this._update),this._map.off(\\\"mousedown\\\",this._addDragHandler),this._map.off(\\\"touchstart\\\",this._addDragHandler),this._map.off(\\\"mouseup\\\",this._onUp),this._map.off(\\\"touchend\\\",this._onUp),this._map.off(\\\"mousemove\\\",this._onMove),this._map.off(\\\"touchmove\\\",this._onMove),delete this._map),r.remove(this._element),this._popup&&this._popup.remove(),this},n.prototype.getLngLat=function(){return this._lngLat},n.prototype.setLngLat=function(e){return this._lngLat=t.LngLat.convert(e),this._pos=null,this._popup&&this._popup.setLngLat(this._lngLat),this._update(),this},n.prototype.getElement=function(){return this._element},n.prototype.setPopup=function(t){if(this._popup&&(this._popup.remove(),this._popup=null,this._element.removeEventListener(\\\"keypress\\\",this._onKeyPress),this._originalTabIndex||this._element.removeAttribute(\\\"tabindex\\\")),t){if(!(\\\"offset\\\"in t.options)){var e=13.5,r=Math.sqrt(Math.pow(e,2)/2);t.options.offset=this._defaultMarker?{top:[0,0],\\\"top-left\\\":[0,0],\\\"top-right\\\":[0,0],bottom:[0,-38.1],\\\"bottom-left\\\":[r,-1*(24.6+r)],\\\"bottom-right\\\":[-r,-1*(24.6+r)],left:[e,-24.6],right:[-13.5,-24.6]}:this._offset}this._popup=t,this._lngLat&&this._popup.setLngLat(this._lngLat),this._originalTabIndex=this._element.getAttribute(\\\"tabindex\\\"),this._originalTabIndex||this._element.setAttribute(\\\"tabindex\\\",\\\"0\\\"),this._element.addEventListener(\\\"keypress\\\",this._onKeyPress)}return this},n.prototype._onKeyPress=function(t){var e=t.code,r=t.charCode||t.keyCode;\\\"Space\\\"!==e&&\\\"Enter\\\"!==e&&32!==r&&13!==r||this.togglePopup()},n.prototype._onMapClick=function(t){var e=t.originalEvent.target,r=this._element;this._popup&&(e===r||r.contains(e))&&this.togglePopup()},n.prototype.getPopup=function(){return this._popup},n.prototype.togglePopup=function(){var t=this._popup;return t?(t.isOpen()?t.remove():t.addTo(this._map),this):this},n.prototype._update=function(t){if(this._map){this._map.transform.renderWorldCopies&&(this._lngLat=ji(this._lngLat,this._pos,this._map.transform)),this._pos=this._map.project(this._lngLat)._add(this._offset);var e=\\\"\\\";\\\"viewport\\\"===this._rotationAlignment||\\\"auto\\\"===this._rotationAlignment?e=\\\"rotateZ(\\\"+this._rotation+\\\"deg)\\\":\\\"map\\\"===this._rotationAlignment&&(e=\\\"rotateZ(\\\"+(this._rotation-this._map.getBearing())+\\\"deg)\\\");var n=\\\"\\\";\\\"viewport\\\"===this._pitchAlignment||\\\"auto\\\"===this._pitchAlignment?n=\\\"rotateX(0deg)\\\":\\\"map\\\"===this._pitchAlignment&&(n=\\\"rotateX(\\\"+this._map.getPitch()+\\\"deg)\\\"),t&&\\\"moveend\\\"!==t.type||(this._pos=this._pos.round()),r.setTransform(this._element,Ui[this._anchor]+\\\" translate(\\\"+this._pos.x+\\\"px, \\\"+this._pos.y+\\\"px) \\\"+n+\\\" \\\"+e)}},n.prototype.getOffset=function(){return this._offset},n.prototype.setOffset=function(e){return this._offset=t.Point.convert(e),this._update(),this},n.prototype._onMove=function(e){this._pos=e.point.sub(this._positionDelta),this._lngLat=this._map.unproject(this._pos),this.setLngLat(this._lngLat),this._element.style.pointerEvents=\\\"none\\\",\\\"pending\\\"===this._state&&(this._state=\\\"active\\\",this.fire(new t.Event(\\\"dragstart\\\"))),this.fire(new t.Event(\\\"drag\\\"))},n.prototype._onUp=function(){this._element.style.pointerEvents=\\\"auto\\\",this._positionDelta=null,this._map.off(\\\"mousemove\\\",this._onMove),this._map.off(\\\"touchmove\\\",this._onMove),\\\"active\\\"===this._state&&this.fire(new t.Event(\\\"dragend\\\")),this._state=\\\"inactive\\\"},n.prototype._addDragHandler=function(t){this._element.contains(t.originalEvent.target)&&(t.preventDefault(),this._positionDelta=t.point.sub(this._pos).add(this._offset),this._state=\\\"pending\\\",this._map.on(\\\"mousemove\\\",this._onMove),this._map.on(\\\"touchmove\\\",this._onMove),this._map.once(\\\"mouseup\\\",this._onUp),this._map.once(\\\"touchend\\\",this._onUp))},n.prototype.setDraggable=function(t){return this._draggable=!!t,this._map&&(t?(this._map.on(\\\"mousedown\\\",this._addDragHandler),this._map.on(\\\"touchstart\\\",this._addDragHandler)):(this._map.off(\\\"mousedown\\\",this._addDragHandler),this._map.off(\\\"touchstart\\\",this._addDragHandler))),this},n.prototype.isDraggable=function(){return this._draggable},n.prototype.setRotation=function(t){return this._rotation=t||0,this._update(),this},n.prototype.getRotation=function(){return this._rotation},n.prototype.setRotationAlignment=function(t){return this._rotationAlignment=t||\\\"auto\\\",this._update(),this},n.prototype.getRotationAlignment=function(){return this._rotationAlignment},n.prototype.setPitchAlignment=function(t){return this._pitchAlignment=t&&\\\"auto\\\"!==t?t:this._rotationAlignment,this._update(),this},n.prototype.getPitchAlignment=function(){return this._pitchAlignment},n}(t.Evented),Gi={positionOptions:{enableHighAccuracy:!1,maximumAge:0,timeout:6e3},fitBoundsOptions:{maxZoom:15},trackUserLocation:!1,showAccuracyCircle:!0,showUserLocation:!0};var Zi=0,Yi=!1,Wi=function(e){function n(r){e.call(this),this.options=t.extend({},Gi,r),t.bindAll([\\\"_onSuccess\\\",\\\"_onError\\\",\\\"_onZoom\\\",\\\"_finish\\\",\\\"_setupUI\\\",\\\"_updateCamera\\\",\\\"_updateMarker\\\"],this)}return e&&(n.__proto__=e),n.prototype=Object.create(e&&e.prototype),n.prototype.constructor=n,n.prototype.onAdd=function(e){return this._map=e,this._container=r.create(\\\"div\\\",\\\"mapboxgl-ctrl mapboxgl-ctrl-group\\\"),n=this._setupUI,void 0!==Hi?n(Hi):void 0!==t.window.navigator.permissions?t.window.navigator.permissions.query({name:\\\"geolocation\\\"}).then((function(t){Hi=\\\"denied\\\"!==t.state,n(Hi)})):(Hi=!!t.window.navigator.geolocation,n(Hi)),this._container;var n},n.prototype.onRemove=function(){void 0!==this._geolocationWatchID&&(t.window.navigator.geolocation.clearWatch(this._geolocationWatchID),this._geolocationWatchID=void 0),this.options.showUserLocation&&this._userLocationDotMarker&&this._userLocationDotMarker.remove(),this.options.showAccuracyCircle&&this._accuracyCircleMarker&&this._accuracyCircleMarker.remove(),r.remove(this._container),this._map.off(\\\"zoom\\\",this._onZoom),this._map=void 0,Zi=0,Yi=!1},n.prototype._isOutOfMapMaxBounds=function(t){var e=this._map.getMaxBounds(),r=t.coords;return e&&(r.longitude<e.getWest()||r.longitude>e.getEast()||r.latitude<e.getSouth()||r.latitude>e.getNorth())},n.prototype._setErrorState=function(){switch(this._watchState){case\\\"WAITING_ACTIVE\\\":this._watchState=\\\"ACTIVE_ERROR\\\",this._geolocateButton.classList.remove(\\\"mapboxgl-ctrl-geolocate-active\\\"),this._geolocateButton.classList.add(\\\"mapboxgl-ctrl-geolocate-active-error\\\");break;case\\\"ACTIVE_LOCK\\\":this._watchState=\\\"ACTIVE_ERROR\\\",this._geolocateButton.classList.remove(\\\"mapboxgl-ctrl-geolocate-active\\\"),this._geolocateButton.classList.add(\\\"mapboxgl-ctrl-geolocate-active-error\\\"),this._geolocateButton.classList.add(\\\"mapboxgl-ctrl-geolocate-waiting\\\");break;case\\\"BACKGROUND\\\":this._watchState=\\\"BACKGROUND_ERROR\\\",this._geolocateButton.classList.remove(\\\"mapboxgl-ctrl-geolocate-background\\\"),this._geolocateButton.classList.add(\\\"mapboxgl-ctrl-geolocate-background-error\\\"),this._geolocateButton.classList.add(\\\"mapboxgl-ctrl-geolocate-waiting\\\")}},n.prototype._onSuccess=function(e){if(this._map){if(this._isOutOfMapMaxBounds(e))return this._setErrorState(),this.fire(new t.Event(\\\"outofmaxbounds\\\",e)),this._updateMarker(),void this._finish();if(this.options.trackUserLocation)switch(this._lastKnownPosition=e,this._watchState){case\\\"WAITING_ACTIVE\\\":case\\\"ACTIVE_LOCK\\\":case\\\"ACTIVE_ERROR\\\":this._watchState=\\\"ACTIVE_LOCK\\\",this._geolocateButton.classList.remove(\\\"mapboxgl-ctrl-geolocate-waiting\\\"),this._geolocateButton.classList.remove(\\\"mapboxgl-ctrl-geolocate-active-error\\\"),this._geolocateButton.classList.add(\\\"mapboxgl-ctrl-geolocate-active\\\");break;case\\\"BACKGROUND\\\":case\\\"BACKGROUND_ERROR\\\":this._watchState=\\\"BACKGROUND\\\",this._geolocateButton.classList.remove(\\\"mapboxgl-ctrl-geolocate-waiting\\\"),this._geolocateButton.classList.remove(\\\"mapboxgl-ctrl-geolocate-background-error\\\"),this._geolocateButton.classList.add(\\\"mapboxgl-ctrl-geolocate-background\\\")}this.options.showUserLocation&&\\\"OFF\\\"!==this._watchState&&this._updateMarker(e),this.options.trackUserLocation&&\\\"ACTIVE_LOCK\\\"!==this._watchState||this._updateCamera(e),this.options.showUserLocation&&this._dotElement.classList.remove(\\\"mapboxgl-user-location-dot-stale\\\"),this.fire(new t.Event(\\\"geolocate\\\",e)),this._finish()}},n.prototype._updateCamera=function(e){var r=new t.LngLat(e.coords.longitude,e.coords.latitude),n=e.coords.accuracy,i=this._map.getBearing(),a=t.extend({bearing:i},this.options.fitBoundsOptions);this._map.fitBounds(r.toBounds(n),a,{geolocateSource:!0})},n.prototype._updateMarker=function(e){if(e){var r=new t.LngLat(e.coords.longitude,e.coords.latitude);this._accuracyCircleMarker.setLngLat(r).addTo(this._map),this._userLocationDotMarker.setLngLat(r).addTo(this._map),this._accuracy=e.coords.accuracy,this.options.showUserLocation&&this.options.showAccuracyCircle&&this._updateCircleRadius()}else this._userLocationDotMarker.remove(),this._accuracyCircleMarker.remove()},n.prototype._updateCircleRadius=function(){var t=this._map._container.clientHeight/2,e=this._map.unproject([0,t]),r=this._map.unproject([1,t]),n=e.distanceTo(r),i=Math.ceil(2*this._accuracy/n);this._circleElement.style.width=i+\\\"px\\\",this._circleElement.style.height=i+\\\"px\\\"},n.prototype._onZoom=function(){this.options.showUserLocation&&this.options.showAccuracyCircle&&this._updateCircleRadius()},n.prototype._onError=function(e){if(this._map){if(this.options.trackUserLocation)if(1===e.code){this._watchState=\\\"OFF\\\",this._geolocateButton.classList.remove(\\\"mapboxgl-ctrl-geolocate-waiting\\\"),this._geolocateButton.classList.remove(\\\"mapboxgl-ctrl-geolocate-active\\\"),this._geolocateButton.classList.remove(\\\"mapboxgl-ctrl-geolocate-active-error\\\"),this._geolocateButton.classList.remove(\\\"mapboxgl-ctrl-geolocate-background\\\"),this._geolocateButton.classList.remove(\\\"mapboxgl-ctrl-geolocate-background-error\\\"),this._geolocateButton.disabled=!0;var r=this._map._getUIString(\\\"GeolocateControl.LocationNotAvailable\\\");this._geolocateButton.title=r,this._geolocateButton.setAttribute(\\\"aria-label\\\",r),void 0!==this._geolocationWatchID&&this._clearWatch()}else{if(3===e.code&&Yi)return;this._setErrorState()}\\\"OFF\\\"!==this._watchState&&this.options.showUserLocation&&this._dotElement.classList.add(\\\"mapboxgl-user-location-dot-stale\\\"),this.fire(new t.Event(\\\"error\\\",e)),this._finish()}},n.prototype._finish=function(){this._timeoutId&&clearTimeout(this._timeoutId),this._timeoutId=void 0},n.prototype._setupUI=function(e){var n=this;if(this._container.addEventListener(\\\"contextmenu\\\",(function(t){return t.preventDefault()})),this._geolocateButton=r.create(\\\"button\\\",\\\"mapboxgl-ctrl-geolocate\\\",this._container),r.create(\\\"span\\\",\\\"mapboxgl-ctrl-icon\\\",this._geolocateButton).setAttribute(\\\"aria-hidden\\\",!0),this._geolocateButton.type=\\\"button\\\",!1===e){t.warnOnce(\\\"Geolocation support is not available so the GeolocateControl will be disabled.\\\");var i=this._map._getUIString(\\\"GeolocateControl.LocationNotAvailable\\\");this._geolocateButton.disabled=!0,this._geolocateButton.title=i,this._geolocateButton.setAttribute(\\\"aria-label\\\",i)}else{var a=this._map._getUIString(\\\"GeolocateControl.FindMyLocation\\\");this._geolocateButton.title=a,this._geolocateButton.setAttribute(\\\"aria-label\\\",a)}this.options.trackUserLocation&&(this._geolocateButton.setAttribute(\\\"aria-pressed\\\",\\\"false\\\"),this._watchState=\\\"OFF\\\"),this.options.showUserLocation&&(this._dotElement=r.create(\\\"div\\\",\\\"mapboxgl-user-location-dot\\\"),this._userLocationDotMarker=new qi(this._dotElement),this._circleElement=r.create(\\\"div\\\",\\\"mapboxgl-user-location-accuracy-circle\\\"),this._accuracyCircleMarker=new qi({element:this._circleElement,pitchAlignment:\\\"map\\\"}),this.options.trackUserLocation&&(this._watchState=\\\"OFF\\\"),this._map.on(\\\"zoom\\\",this._onZoom)),this._geolocateButton.addEventListener(\\\"click\\\",this.trigger.bind(this)),this._setup=!0,this.options.trackUserLocation&&this._map.on(\\\"movestart\\\",(function(e){var r=e.originalEvent&&\\\"resize\\\"===e.originalEvent.type;e.geolocateSource||\\\"ACTIVE_LOCK\\\"!==n._watchState||r||(n._watchState=\\\"BACKGROUND\\\",n._geolocateButton.classList.add(\\\"mapboxgl-ctrl-geolocate-background\\\"),n._geolocateButton.classList.remove(\\\"mapboxgl-ctrl-geolocate-active\\\"),n.fire(new t.Event(\\\"trackuserlocationend\\\")))}))},n.prototype.trigger=function(){if(!this._setup)return t.warnOnce(\\\"Geolocate control triggered before added to a map\\\"),!1;if(this.options.trackUserLocation){switch(this._watchState){case\\\"OFF\\\":this._watchState=\\\"WAITING_ACTIVE\\\",this.fire(new t.Event(\\\"trackuserlocationstart\\\"));break;case\\\"WAITING_ACTIVE\\\":case\\\"ACTIVE_LOCK\\\":case\\\"ACTIVE_ERROR\\\":case\\\"BACKGROUND_ERROR\\\":Zi--,Yi=!1,this._watchState=\\\"OFF\\\",this._geolocateButton.classList.remove(\\\"mapboxgl-ctrl-geolocate-waiting\\\"),this._geolocateButton.classList.remove(\\\"mapboxgl-ctrl-geolocate-active\\\"),this._geolocateButton.classList.remove(\\\"mapboxgl-ctrl-geolocate-active-error\\\"),this._geolocateButton.classList.remove(\\\"mapboxgl-ctrl-geolocate-background\\\"),this._geolocateButton.classList.remove(\\\"mapboxgl-ctrl-geolocate-background-error\\\"),this.fire(new t.Event(\\\"trackuserlocationend\\\"));break;case\\\"BACKGROUND\\\":this._watchState=\\\"ACTIVE_LOCK\\\",this._geolocateButton.classList.remove(\\\"mapboxgl-ctrl-geolocate-background\\\"),this._lastKnownPosition&&this._updateCamera(this._lastKnownPosition),this.fire(new t.Event(\\\"trackuserlocationstart\\\"))}switch(this._watchState){case\\\"WAITING_ACTIVE\\\":this._geolocateButton.classList.add(\\\"mapboxgl-ctrl-geolocate-waiting\\\"),this._geolocateButton.classList.add(\\\"mapboxgl-ctrl-geolocate-active\\\");break;case\\\"ACTIVE_LOCK\\\":this._geolocateButton.classList.add(\\\"mapboxgl-ctrl-geolocate-active\\\");break;case\\\"ACTIVE_ERROR\\\":this._geolocateButton.classList.add(\\\"mapboxgl-ctrl-geolocate-waiting\\\"),this._geolocateButton.classList.add(\\\"mapboxgl-ctrl-geolocate-active-error\\\");break;case\\\"BACKGROUND\\\":this._geolocateButton.classList.add(\\\"mapboxgl-ctrl-geolocate-background\\\");break;case\\\"BACKGROUND_ERROR\\\":this._geolocateButton.classList.add(\\\"mapboxgl-ctrl-geolocate-waiting\\\"),this._geolocateButton.classList.add(\\\"mapboxgl-ctrl-geolocate-background-error\\\")}if(\\\"OFF\\\"===this._watchState&&void 0!==this._geolocationWatchID)this._clearWatch();else if(void 0===this._geolocationWatchID){var e;this._geolocateButton.classList.add(\\\"mapboxgl-ctrl-geolocate-waiting\\\"),this._geolocateButton.setAttribute(\\\"aria-pressed\\\",\\\"true\\\"),++Zi>1?(e={maximumAge:6e5,timeout:0},Yi=!0):(e=this.options.positionOptions,Yi=!1),this._geolocationWatchID=t.window.navigator.geolocation.watchPosition(this._onSuccess,this._onError,e)}}else t.window.navigator.geolocation.getCurrentPosition(this._onSuccess,this._onError,this.options.positionOptions),this._timeoutId=setTimeout(this._finish,1e4);return!0},n.prototype._clearWatch=function(){t.window.navigator.geolocation.clearWatch(this._geolocationWatchID),this._geolocationWatchID=void 0,this._geolocateButton.classList.remove(\\\"mapboxgl-ctrl-geolocate-waiting\\\"),this._geolocateButton.setAttribute(\\\"aria-pressed\\\",\\\"false\\\"),this.options.showUserLocation&&this._updateMarker(null)},n}(t.Evented),Xi={maxWidth:100,unit:\\\"metric\\\"},Ji=function(e){this.options=t.extend({},Xi,e),t.bindAll([\\\"_onMove\\\",\\\"setUnit\\\"],this)};function Ki(t,e,r){var n=r&&r.maxWidth||100,i=t._container.clientHeight/2,a=t.unproject([0,i]),o=t.unproject([n,i]),s=a.distanceTo(o);if(r&&\\\"imperial\\\"===r.unit){var l=3.2808*s;l>5280?$i(e,n,l/5280,t._getUIString(\\\"ScaleControl.Miles\\\")):$i(e,n,l,t._getUIString(\\\"ScaleControl.Feet\\\"))}else r&&\\\"nautical\\\"===r.unit?$i(e,n,s/1852,t._getUIString(\\\"ScaleControl.NauticalMiles\\\")):s>=1e3?$i(e,n,s/1e3,t._getUIString(\\\"ScaleControl.Kilometers\\\")):$i(e,n,s,t._getUIString(\\\"ScaleControl.Meters\\\"))}function $i(t,e,r,n){var i,a,o,s=(i=r,(a=Math.pow(10,(\\\"\\\"+Math.floor(i)).length-1))*((o=i/a)>=10?10:o>=5?5:o>=3?3:o>=2?2:o>=1?1:function(t){var e=Math.pow(10,Math.ceil(-Math.log(t)/Math.LN10));return Math.round(t*e)/e}(o))),l=s/r;t.style.width=e*l+\\\"px\\\",t.innerHTML=s+\\\"&nbsp;\\\"+n}Ji.prototype.getDefaultPosition=function(){return\\\"bottom-left\\\"},Ji.prototype._onMove=function(){Ki(this._map,this._container,this.options)},Ji.prototype.onAdd=function(t){return this._map=t,this._container=r.create(\\\"div\\\",\\\"mapboxgl-ctrl mapboxgl-ctrl-scale\\\",t.getContainer()),this._map.on(\\\"move\\\",this._onMove),this._onMove(),this._container},Ji.prototype.onRemove=function(){r.remove(this._container),this._map.off(\\\"move\\\",this._onMove),this._map=void 0},Ji.prototype.setUnit=function(t){this.options.unit=t,Ki(this._map,this._container,this.options)};var Qi=function(e){this._fullscreen=!1,e&&e.container&&(e.container instanceof t.window.HTMLElement?this._container=e.container:t.warnOnce(\\\"Full screen control 'container' must be a DOM element.\\\")),t.bindAll([\\\"_onClickFullscreen\\\",\\\"_changeIcon\\\"],this),\\\"onfullscreenchange\\\"in t.window.document?this._fullscreenchange=\\\"fullscreenchange\\\":\\\"onmozfullscreenchange\\\"in t.window.document?this._fullscreenchange=\\\"mozfullscreenchange\\\":\\\"onwebkitfullscreenchange\\\"in t.window.document?this._fullscreenchange=\\\"webkitfullscreenchange\\\":\\\"onmsfullscreenchange\\\"in t.window.document&&(this._fullscreenchange=\\\"MSFullscreenChange\\\")};Qi.prototype.onAdd=function(e){return this._map=e,this._container||(this._container=this._map.getContainer()),this._controlContainer=r.create(\\\"div\\\",\\\"mapboxgl-ctrl mapboxgl-ctrl-group\\\"),this._checkFullscreenSupport()?this._setupUI():(this._controlContainer.style.display=\\\"none\\\",t.warnOnce(\\\"This device does not support fullscreen mode.\\\")),this._controlContainer},Qi.prototype.onRemove=function(){r.remove(this._controlContainer),this._map=null,t.window.document.removeEventListener(this._fullscreenchange,this._changeIcon)},Qi.prototype._checkFullscreenSupport=function(){return!!(t.window.document.fullscreenEnabled||t.window.document.mozFullScreenEnabled||t.window.document.msFullscreenEnabled||t.window.document.webkitFullscreenEnabled)},Qi.prototype._setupUI=function(){var e=this._fullscreenButton=r.create(\\\"button\\\",\\\"mapboxgl-ctrl-fullscreen\\\",this._controlContainer);r.create(\\\"span\\\",\\\"mapboxgl-ctrl-icon\\\",e).setAttribute(\\\"aria-hidden\\\",!0),e.type=\\\"button\\\",this._updateTitle(),this._fullscreenButton.addEventListener(\\\"click\\\",this._onClickFullscreen),t.window.document.addEventListener(this._fullscreenchange,this._changeIcon)},Qi.prototype._updateTitle=function(){var t=this._getTitle();this._fullscreenButton.setAttribute(\\\"aria-label\\\",t),this._fullscreenButton.title=t},Qi.prototype._getTitle=function(){return this._map._getUIString(this._isFullscreen()?\\\"FullscreenControl.Exit\\\":\\\"FullscreenControl.Enter\\\")},Qi.prototype._isFullscreen=function(){return this._fullscreen},Qi.prototype._changeIcon=function(){(t.window.document.fullscreenElement||t.window.document.mozFullScreenElement||t.window.document.webkitFullscreenElement||t.window.document.msFullscreenElement)===this._container!==this._fullscreen&&(this._fullscreen=!this._fullscreen,this._fullscreenButton.classList.toggle(\\\"mapboxgl-ctrl-shrink\\\"),this._fullscreenButton.classList.toggle(\\\"mapboxgl-ctrl-fullscreen\\\"),this._updateTitle())},Qi.prototype._onClickFullscreen=function(){this._isFullscreen()?t.window.document.exitFullscreen?t.window.document.exitFullscreen():t.window.document.mozCancelFullScreen?t.window.document.mozCancelFullScreen():t.window.document.msExitFullscreen?t.window.document.msExitFullscreen():t.window.document.webkitCancelFullScreen&&t.window.document.webkitCancelFullScreen():this._container.requestFullscreen?this._container.requestFullscreen():this._container.mozRequestFullScreen?this._container.mozRequestFullScreen():this._container.msRequestFullscreen?this._container.msRequestFullscreen():this._container.webkitRequestFullscreen&&this._container.webkitRequestFullscreen()};var ta={closeButton:!0,closeOnClick:!0,className:\\\"\\\",maxWidth:\\\"240px\\\"},ea=function(e){function n(r){e.call(this),this.options=t.extend(Object.create(ta),r),t.bindAll([\\\"_update\\\",\\\"_onClose\\\",\\\"remove\\\",\\\"_onMouseMove\\\",\\\"_onMouseUp\\\",\\\"_onDrag\\\"],this)}return e&&(n.__proto__=e),n.prototype=Object.create(e&&e.prototype),n.prototype.constructor=n,n.prototype.addTo=function(e){return this._map&&this.remove(),this._map=e,this.options.closeOnClick&&this._map.on(\\\"click\\\",this._onClose),this.options.closeOnMove&&this._map.on(\\\"move\\\",this._onClose),this._map.on(\\\"remove\\\",this.remove),this._update(),this._trackPointer?(this._map.on(\\\"mousemove\\\",this._onMouseMove),this._map.on(\\\"mouseup\\\",this._onMouseUp),this._container&&this._container.classList.add(\\\"mapboxgl-popup-track-pointer\\\"),this._map._canvasContainer.classList.add(\\\"mapboxgl-track-pointer\\\")):this._map.on(\\\"move\\\",this._update),this.fire(new t.Event(\\\"open\\\")),this},n.prototype.isOpen=function(){return!!this._map},n.prototype.remove=function(){return this._content&&r.remove(this._content),this._container&&(r.remove(this._container),delete this._container),this._map&&(this._map.off(\\\"move\\\",this._update),this._map.off(\\\"move\\\",this._onClose),this._map.off(\\\"click\\\",this._onClose),this._map.off(\\\"remove\\\",this.remove),this._map.off(\\\"mousemove\\\",this._onMouseMove),this._map.off(\\\"mouseup\\\",this._onMouseUp),this._map.off(\\\"drag\\\",this._onDrag),delete this._map),this.fire(new t.Event(\\\"close\\\")),this},n.prototype.getLngLat=function(){return this._lngLat},n.prototype.setLngLat=function(e){return this._lngLat=t.LngLat.convert(e),this._pos=null,this._trackPointer=!1,this._update(),this._map&&(this._map.on(\\\"move\\\",this._update),this._map.off(\\\"mousemove\\\",this._onMouseMove),this._container&&this._container.classList.remove(\\\"mapboxgl-popup-track-pointer\\\"),this._map._canvasContainer.classList.remove(\\\"mapboxgl-track-pointer\\\")),this},n.prototype.trackPointer=function(){return this._trackPointer=!0,this._pos=null,this._update(),this._map&&(this._map.off(\\\"move\\\",this._update),this._map.on(\\\"mousemove\\\",this._onMouseMove),this._map.on(\\\"drag\\\",this._onDrag),this._container&&this._container.classList.add(\\\"mapboxgl-popup-track-pointer\\\"),this._map._canvasContainer.classList.add(\\\"mapboxgl-track-pointer\\\")),this},n.prototype.getElement=function(){return this._container},n.prototype.setText=function(e){return this.setDOMContent(t.window.document.createTextNode(e))},n.prototype.setHTML=function(e){var r,n=t.window.document.createDocumentFragment(),i=t.window.document.createElement(\\\"body\\\");for(i.innerHTML=e;r=i.firstChild;)n.appendChild(r);return this.setDOMContent(n)},n.prototype.getMaxWidth=function(){return this._container&&this._container.style.maxWidth},n.prototype.setMaxWidth=function(t){return this.options.maxWidth=t,this._update(),this},n.prototype.setDOMContent=function(t){return this._createContent(),this._content.appendChild(t),this._update(),this},n.prototype.addClassName=function(t){this._container&&this._container.classList.add(t)},n.prototype.removeClassName=function(t){this._container&&this._container.classList.remove(t)},n.prototype.toggleClassName=function(t){if(this._container)return this._container.classList.toggle(t)},n.prototype._createContent=function(){this._content&&r.remove(this._content),this._content=r.create(\\\"div\\\",\\\"mapboxgl-popup-content\\\",this._container),this.options.closeButton&&(this._closeButton=r.create(\\\"button\\\",\\\"mapboxgl-popup-close-button\\\",this._content),this._closeButton.type=\\\"button\\\",this._closeButton.setAttribute(\\\"aria-label\\\",\\\"Close popup\\\"),this._closeButton.innerHTML=\\\"&#215;\\\",this._closeButton.addEventListener(\\\"click\\\",this._onClose))},n.prototype._onMouseUp=function(t){this._update(t.point)},n.prototype._onMouseMove=function(t){this._update(t.point)},n.prototype._onDrag=function(t){this._update(t.point)},n.prototype._update=function(t){var e=this,n=this._lngLat||this._trackPointer;if(this._map&&n&&this._content&&(this._container||(this._container=r.create(\\\"div\\\",\\\"mapboxgl-popup\\\",this._map.getContainer()),this._tip=r.create(\\\"div\\\",\\\"mapboxgl-popup-tip\\\",this._container),this._container.appendChild(this._content),this.options.className&&this.options.className.split(\\\" \\\").forEach((function(t){return e._container.classList.add(t)})),this._trackPointer&&this._container.classList.add(\\\"mapboxgl-popup-track-pointer\\\")),this.options.maxWidth&&this._container.style.maxWidth!==this.options.maxWidth&&(this._container.style.maxWidth=this.options.maxWidth),this._map.transform.renderWorldCopies&&!this._trackPointer&&(this._lngLat=ji(this._lngLat,this._pos,this._map.transform)),!this._trackPointer||t)){var i=this._pos=this._trackPointer&&t?t:this._map.project(this._lngLat),a=this.options.anchor,o=ra(this.options.offset);if(!a){var s,l=this._container.offsetWidth,u=this._container.offsetHeight;s=i.y+o.bottom.y<u?[\\\"top\\\"]:i.y>this._map.transform.height-u?[\\\"bottom\\\"]:[],i.x<l/2?s.push(\\\"left\\\"):i.x>this._map.transform.width-l/2&&s.push(\\\"right\\\"),a=0===s.length?\\\"bottom\\\":s.join(\\\"-\\\")}var c=i.add(o[a]).round();r.setTransform(this._container,Ui[a]+\\\" translate(\\\"+c.x+\\\"px,\\\"+c.y+\\\"px)\\\"),Vi(this._container,a,\\\"popup\\\")}},n.prototype._onClose=function(){this.remove()},n}(t.Evented);function ra(e){if(e){if(\\\"number\\\"==typeof e){var r=Math.round(Math.sqrt(.5*Math.pow(e,2)));return{center:new t.Point(0,0),top:new t.Point(0,e),\\\"top-left\\\":new t.Point(r,r),\\\"top-right\\\":new t.Point(-r,r),bottom:new t.Point(0,-e),\\\"bottom-left\\\":new t.Point(r,-r),\\\"bottom-right\\\":new t.Point(-r,-r),left:new t.Point(e,0),right:new t.Point(-e,0)}}if(e instanceof t.Point||Array.isArray(e)){var n=t.Point.convert(e);return{center:n,top:n,\\\"top-left\\\":n,\\\"top-right\\\":n,bottom:n,\\\"bottom-left\\\":n,\\\"bottom-right\\\":n,left:n,right:n}}return{center:t.Point.convert(e.center||[0,0]),top:t.Point.convert(e.top||[0,0]),\\\"top-left\\\":t.Point.convert(e[\\\"top-left\\\"]||[0,0]),\\\"top-right\\\":t.Point.convert(e[\\\"top-right\\\"]||[0,0]),bottom:t.Point.convert(e.bottom||[0,0]),\\\"bottom-left\\\":t.Point.convert(e[\\\"bottom-left\\\"]||[0,0]),\\\"bottom-right\\\":t.Point.convert(e[\\\"bottom-right\\\"]||[0,0]),left:t.Point.convert(e.left||[0,0]),right:t.Point.convert(e.right||[0,0])}}return ra(new t.Point(0,0))}var na={version:t.version,supported:e,setRTLTextPlugin:t.setRTLTextPlugin,getRTLTextPluginStatus:t.getRTLTextPluginStatus,Map:zi,NavigationControl:Bi,GeolocateControl:Wi,AttributionControl:Mi,ScaleControl:Ji,FullscreenControl:Qi,Popup:ea,Marker:qi,Style:Ye,LngLat:t.LngLat,LngLatBounds:t.LngLatBounds,Point:t.Point,MercatorCoordinate:t.MercatorCoordinate,Evented:t.Evented,config:t.config,prewarm:function(){jt().acquire(Rt)},clearPrewarmedResources:function(){var t=Bt;t&&(t.isPreloaded()&&1===t.numActive()?(t.release(Rt),Bt=null):console.warn(\\\"Could not clear WebWorkers since there are active Map instances that still reference it. The pre-warmed WebWorker pool can only be cleared when all map instances have been removed with map.remove()\\\"))},get accessToken(){return t.config.ACCESS_TOKEN},set accessToken(e){t.config.ACCESS_TOKEN=e},get baseApiUrl(){return t.config.API_URL},set baseApiUrl(e){t.config.API_URL=e},get workerCount(){return Ft.workerCount},set workerCount(t){Ft.workerCount=t},get maxParallelImageRequests(){return t.config.MAX_PARALLEL_IMAGE_REQUESTS},set maxParallelImageRequests(e){t.config.MAX_PARALLEL_IMAGE_REQUESTS=e},clearStorage:function(e){t.clearTileCache(e)},workerUrl:\\\"\\\"};return na})),r}()},27084:function(t){\\\"use strict\\\";t.exports=Math.log2||function(t){return Math.log(t)*Math.LOG2E}},16825:function(t,e,r){\\\"use strict\\\";t.exports=function(t,e){e||(e=t,t=window);var r=0,i=0,a=0,o={shift:!1,alt:!1,control:!1,meta:!1},s=!1;function l(t){var e=!1;return\\\"altKey\\\"in t&&(e=e||t.altKey!==o.alt,o.alt=!!t.altKey),\\\"shiftKey\\\"in t&&(e=e||t.shiftKey!==o.shift,o.shift=!!t.shiftKey),\\\"ctrlKey\\\"in t&&(e=e||t.ctrlKey!==o.control,o.control=!!t.ctrlKey),\\\"metaKey\\\"in t&&(e=e||t.metaKey!==o.meta,o.meta=!!t.metaKey),e}function u(t,s){var u=n.x(s),c=n.y(s);\\\"buttons\\\"in s&&(t=0|s.buttons),(t!==r||u!==i||c!==a||l(s))&&(r=0|t,i=u||0,a=c||0,e&&e(r,i,a,o))}function c(t){u(0,t)}function f(){(r||i||a||o.shift||o.alt||o.meta||o.control)&&(i=a=0,r=0,o.shift=o.alt=o.control=o.meta=!1,e&&e(0,0,0,o))}function h(t){l(t)&&e&&e(r,i,a,o)}function p(t){0===n.buttons(t)?u(0,t):u(r,t)}function d(t){u(r|n.buttons(t),t)}function v(t){u(r&~n.buttons(t),t)}function g(){s||(s=!0,t.addEventListener(\\\"mousemove\\\",p),t.addEventListener(\\\"mousedown\\\",d),t.addEventListener(\\\"mouseup\\\",v),t.addEventListener(\\\"mouseleave\\\",c),t.addEventListener(\\\"mouseenter\\\",c),t.addEventListener(\\\"mouseout\\\",c),t.addEventListener(\\\"mouseover\\\",c),t.addEventListener(\\\"blur\\\",f),t.addEventListener(\\\"keyup\\\",h),t.addEventListener(\\\"keydown\\\",h),t.addEventListener(\\\"keypress\\\",h),t!==window&&(window.addEventListener(\\\"blur\\\",f),window.addEventListener(\\\"keyup\\\",h),window.addEventListener(\\\"keydown\\\",h),window.addEventListener(\\\"keypress\\\",h)))}g();var y={element:t};return Object.defineProperties(y,{enabled:{get:function(){return s},set:function(e){e?g():s&&(s=!1,t.removeEventListener(\\\"mousemove\\\",p),t.removeEventListener(\\\"mousedown\\\",d),t.removeEventListener(\\\"mouseup\\\",v),t.removeEventListener(\\\"mouseleave\\\",c),t.removeEventListener(\\\"mouseenter\\\",c),t.removeEventListener(\\\"mouseout\\\",c),t.removeEventListener(\\\"mouseover\\\",c),t.removeEventListener(\\\"blur\\\",f),t.removeEventListener(\\\"keyup\\\",h),t.removeEventListener(\\\"keydown\\\",h),t.removeEventListener(\\\"keypress\\\",h),t!==window&&(window.removeEventListener(\\\"blur\\\",f),window.removeEventListener(\\\"keyup\\\",h),window.removeEventListener(\\\"keydown\\\",h),window.removeEventListener(\\\"keypress\\\",h)))},enumerable:!0},buttons:{get:function(){return r},enumerable:!0},x:{get:function(){return i},enumerable:!0},y:{get:function(){return a},enumerable:!0},mods:{get:function(){return o},enumerable:!0}}),y};var n=r(74311)},48956:function(t){var e={left:0,top:0};t.exports=function(t,r,n){r=r||t.currentTarget||t.srcElement,Array.isArray(n)||(n=[0,0]);var i,a=t.clientX||0,o=t.clientY||0,s=(i=r)===window||i===document||i===document.body?e:i.getBoundingClientRect();return n[0]=a-s.left,n[1]=o-s.top,n}},74311:function(t,e){\\\"use strict\\\";function r(t){return t.target||t.srcElement||window}e.buttons=function(t){if(\\\"object\\\"==typeof t){if(\\\"buttons\\\"in t)return t.buttons;if(\\\"which\\\"in t){if(2===(e=t.which))return 4;if(3===e)return 2;if(e>0)return 1<<e-1}else if(\\\"button\\\"in t){var e;if(1===(e=t.button))return 4;if(2===e)return 2;if(e>=0)return 1<<e}}return 0},e.element=r,e.x=function(t){if(\\\"object\\\"==typeof t){if(\\\"offsetX\\\"in t)return t.offsetX;var e=r(t).getBoundingClientRect();return t.clientX-e.left}return 0},e.y=function(t){if(\\\"object\\\"==typeof t){if(\\\"offsetY\\\"in t)return t.offsetY;var e=r(t).getBoundingClientRect();return t.clientY-e.top}return 0}},1195:function(t,e,r){\\\"use strict\\\";var n=r(75686);t.exports=function(t,e,r){\\\"function\\\"==typeof t&&(r=!!e,e=t,t=window);var i=n(\\\"ex\\\",t),a=function(t){r&&t.preventDefault();var n=t.deltaX||0,a=t.deltaY||0,o=t.deltaZ||0,s=1;switch(t.deltaMode){case 1:s=i;break;case 2:s=window.innerHeight}if(a*=s,o*=s,(n*=s)||a||o)return e(n,a,o,t)};return t.addEventListener(\\\"wheel\\\",a),a}},7417:function(t,e,r){var n;!function(i,a,o){a[i]=a[i]||function(){\\\"use strict\\\";var t,e,r,n=Object.prototype.toString,i=\\\"undefined\\\"!=typeof setImmediate?function(t){return setImmediate(t)}:setTimeout;try{Object.defineProperty({},\\\"x\\\",{}),t=function(t,e,r,n){return Object.defineProperty(t,e,{value:r,writable:!0,configurable:!1!==n})}}catch(e){t=function(t,e,r){return t[e]=r,t}}function a(t,n){r.add(t,n),e||(e=i(r.drain))}function o(t){var e,r=typeof t;return null==t||\\\"object\\\"!=r&&\\\"function\\\"!=r||(e=t.then),\\\"function\\\"==typeof e&&e}function s(){for(var t=0;t<this.chain.length;t++)l(this,1===this.state?this.chain[t].success:this.chain[t].failure,this.chain[t]);this.chain.length=0}function l(t,e,r){var n,i;try{!1===e?r.reject(t.msg):(n=!0===e?t.msg:e.call(void 0,t.msg))===r.promise?r.reject(TypeError(\\\"Promise-chain cycle\\\")):(i=o(n))?i.call(n,r.resolve,r.reject):r.resolve(n)}catch(t){r.reject(t)}}function u(t){var e,r=this;if(!r.triggered){r.triggered=!0,r.def&&(r=r.def);try{(e=o(t))?a((function(){var n=new h(r);try{e.call(t,(function(){u.apply(n,arguments)}),(function(){c.apply(n,arguments)}))}catch(t){c.call(n,t)}})):(r.msg=t,r.state=1,r.chain.length>0&&a(s,r))}catch(t){c.call(new h(r),t)}}}function c(t){var e=this;e.triggered||(e.triggered=!0,e.def&&(e=e.def),e.msg=t,e.state=2,e.chain.length>0&&a(s,e))}function f(t,e,r,n){for(var i=0;i<e.length;i++)!function(i){t.resolve(e[i]).then((function(t){r(i,t)}),n)}(i)}function h(t){this.def=t,this.triggered=!1}function p(t){this.promise=t,this.state=0,this.triggered=!1,this.chain=[],this.msg=void 0}function d(t){if(\\\"function\\\"!=typeof t)throw TypeError(\\\"Not a function\\\");if(0!==this.__NPO__)throw TypeError(\\\"Not a promise\\\");this.__NPO__=1;var e=new p(this);this.then=function(t,r){var n={success:\\\"function\\\"!=typeof t||t,failure:\\\"function\\\"==typeof r&&r};return n.promise=new this.constructor((function(t,e){if(\\\"function\\\"!=typeof t||\\\"function\\\"!=typeof e)throw TypeError(\\\"Not a function\\\");n.resolve=t,n.reject=e})),e.chain.push(n),0!==e.state&&a(s,e),n.promise},this.catch=function(t){return this.then(void 0,t)};try{t.call(void 0,(function(t){u.call(e,t)}),(function(t){c.call(e,t)}))}catch(t){c.call(e,t)}}r=function(){var t,r,n;function i(t,e){this.fn=t,this.self=e,this.next=void 0}return{add:function(e,a){n=new i(e,a),r?r.next=n:t=n,r=n,n=void 0},drain:function(){var n=t;for(t=r=e=void 0;n;)n.fn.call(n.self),n=n.next}}}();var v=t({},\\\"constructor\\\",d,!1);return d.prototype=v,t(v,\\\"__NPO__\\\",0,!1),t(d,\\\"resolve\\\",(function(t){return t&&\\\"object\\\"==typeof t&&1===t.__NPO__?t:new this((function(e,r){if(\\\"function\\\"!=typeof e||\\\"function\\\"!=typeof r)throw TypeError(\\\"Not a function\\\");e(t)}))})),t(d,\\\"reject\\\",(function(t){return new this((function(e,r){if(\\\"function\\\"!=typeof e||\\\"function\\\"!=typeof r)throw TypeError(\\\"Not a function\\\");r(t)}))})),t(d,\\\"all\\\",(function(t){var e=this;return\\\"[object Array]\\\"!=n.call(t)?e.reject(TypeError(\\\"Not an array\\\")):0===t.length?e.resolve([]):new e((function(r,n){if(\\\"function\\\"!=typeof r||\\\"function\\\"!=typeof n)throw TypeError(\\\"Not a function\\\");var i=t.length,a=Array(i),o=0;f(e,t,(function(t,e){a[t]=e,++o===i&&r(a)}),n)}))})),t(d,\\\"race\\\",(function(t){var e=this;return\\\"[object Array]\\\"!=n.call(t)?e.reject(TypeError(\\\"Not an array\\\")):new e((function(r,n){if(\\\"function\\\"!=typeof r||\\\"function\\\"!=typeof n)throw TypeError(\\\"Not a function\\\");f(e,t,(function(t,e){r(e)}),n)}))})),d}(),t.exports?t.exports=a[i]:void 0===(n=function(){return a[i]}.call(e,r,e,t))||(t.exports=n)}(\\\"Promise\\\",void 0!==r.g?r.g:this)},18625:function(t){var e=Math.PI,r=s(120);function n(t,e,r,n){return[\\\"C\\\",t,e,r,n,r,n]}function i(t,e,r,n,i,a){return[\\\"C\\\",t/3+2/3*r,e/3+2/3*n,i/3+2/3*r,a/3+2/3*n,i,a]}function a(t,n,i,s,l,u,c,f,h,p){if(p)T=p[0],k=p[1],_=p[2],w=p[3];else{var d=o(t,n,-l);t=d.x,n=d.y;var v=(t-(f=(d=o(f,h,-l)).x))/2,g=(n-(h=d.y))/2,y=v*v/(i*i)+g*g/(s*s);y>1&&(i*=y=Math.sqrt(y),s*=y);var m=i*i,x=s*s,b=(u==c?-1:1)*Math.sqrt(Math.abs((m*x-m*g*g-x*v*v)/(m*g*g+x*v*v)));b==1/0&&(b=1);var _=b*i*g/s+(t+f)/2,w=b*-s*v/i+(n+h)/2,T=Math.asin(((n-w)/s).toFixed(9)),k=Math.asin(((h-w)/s).toFixed(9));(T=t<_?e-T:T)<0&&(T=2*e+T),(k=f<_?e-k:k)<0&&(k=2*e+k),c&&T>k&&(T-=2*e),!c&&k>T&&(k-=2*e)}if(Math.abs(k-T)>r){var A=k,M=f,S=h;k=T+r*(c&&k>T?1:-1);var E=a(f=_+i*Math.cos(k),h=w+s*Math.sin(k),i,s,l,0,c,M,S,[k,A,_,w])}var L=Math.tan((k-T)/4),C=4/3*i*L,P=4/3*s*L,O=[2*t-(t+C*Math.sin(T)),2*n-(n-P*Math.cos(T)),f+C*Math.sin(k),h-P*Math.cos(k),f,h];if(p)return O;E&&(O=O.concat(E));for(var I=0;I<O.length;){var D=o(O[I],O[I+1],l);O[I++]=D.x,O[I++]=D.y}return O}function o(t,e,r){return{x:t*Math.cos(r)-e*Math.sin(r),y:t*Math.sin(r)+e*Math.cos(r)}}function s(t){return t*(e/180)}t.exports=function(t){for(var e,r=[],o=0,l=0,u=0,c=0,f=null,h=null,p=0,d=0,v=0,g=t.length;v<g;v++){var y=t[v],m=y[0];switch(m){case\\\"M\\\":u=y[1],c=y[2];break;case\\\"A\\\":(y=a(p,d,y[1],y[2],s(y[3]),y[4],y[5],y[6],y[7])).unshift(\\\"C\\\"),y.length>7&&(r.push(y.splice(0,7)),y.unshift(\\\"C\\\"));break;case\\\"S\\\":var x=p,b=d;\\\"C\\\"!=e&&\\\"S\\\"!=e||(x+=x-o,b+=b-l),y=[\\\"C\\\",x,b,y[1],y[2],y[3],y[4]];break;case\\\"T\\\":\\\"Q\\\"==e||\\\"T\\\"==e?(f=2*p-f,h=2*d-h):(f=p,h=d),y=i(p,d,f,h,y[1],y[2]);break;case\\\"Q\\\":f=y[1],h=y[2],y=i(p,d,y[1],y[2],y[3],y[4]);break;case\\\"L\\\":y=n(p,d,y[1],y[2]);break;case\\\"H\\\":y=n(p,d,y[1],d);break;case\\\"V\\\":y=n(p,d,p,y[1]);break;case\\\"Z\\\":y=n(p,d,u,c)}e=m,p=y[y.length-2],d=y[y.length-1],y.length>4?(o=y[y.length-4],l=y[y.length-3]):(o=p,l=d),r.push(y)}return r}},56131:function(t){\\\"use strict\\\";var e=Object.getOwnPropertySymbols,r=Object.prototype.hasOwnProperty,n=Object.prototype.propertyIsEnumerable;t.exports=function(){try{if(!Object.assign)return!1;var t=new String(\\\"abc\\\");if(t[5]=\\\"de\\\",\\\"5\\\"===Object.getOwnPropertyNames(t)[0])return!1;for(var e={},r=0;r<10;r++)e[\\\"_\\\"+String.fromCharCode(r)]=r;if(\\\"0123456789\\\"!==Object.getOwnPropertyNames(e).map((function(t){return e[t]})).join(\\\"\\\"))return!1;var n={};return\\\"abcdefghijklmnopqrst\\\".split(\\\"\\\").forEach((function(t){n[t]=t})),\\\"abcdefghijklmnopqrst\\\"===Object.keys(Object.assign({},n)).join(\\\"\\\")}catch(t){return!1}}()?Object.assign:function(t,i){for(var a,o,s=function(t){if(null==t)throw new TypeError(\\\"Object.assign cannot be called with null or undefined\\\");return Object(t)}(t),l=1;l<arguments.length;l++){for(var u in a=Object(arguments[l]))r.call(a,u)&&(s[u]=a[u]);if(e){o=e(a);for(var c=0;c<o.length;c++)n.call(a,o[c])&&(s[o[c]]=a[o[c]])}}return s}},65848:function(t){\\\"use strict\\\";var e=function(t){return t!=t};t.exports=function(t,r){return 0===t&&0===r?1/t==1/r:t===r||!(!e(t)||!e(r))}},64003:function(t,e,r){\\\"use strict\\\";var n=r(17045),i=r(68222),a=r(65848),o=r(27015),s=r(55572),l=i(o(),Object);n(l,{getPolyfill:o,implementation:a,shim:s}),t.exports=l},27015:function(t,e,r){\\\"use strict\\\";var n=r(65848);t.exports=function(){return\\\"function\\\"==typeof Object.is?Object.is:n}},55572:function(t,e,r){\\\"use strict\\\";var n=r(27015),i=r(17045);t.exports=function(){var t=n();return i(Object,{is:t},{is:function(){return Object.is!==t}}),t}},99019:function(t,e,r){\\\"use strict\\\";var n;if(!Object.keys){var i=Object.prototype.hasOwnProperty,a=Object.prototype.toString,o=r(64178),s=Object.prototype.propertyIsEnumerable,l=!s.call({toString:null},\\\"toString\\\"),u=s.call((function(){}),\\\"prototype\\\"),c=[\\\"toString\\\",\\\"toLocaleString\\\",\\\"valueOf\\\",\\\"hasOwnProperty\\\",\\\"isPrototypeOf\\\",\\\"propertyIsEnumerable\\\",\\\"constructor\\\"],f=function(t){var e=t.constructor;return e&&e.prototype===t},h={$applicationCache:!0,$console:!0,$external:!0,$frame:!0,$frameElement:!0,$frames:!0,$innerHeight:!0,$innerWidth:!0,$onmozfullscreenchange:!0,$onmozfullscreenerror:!0,$outerHeight:!0,$outerWidth:!0,$pageXOffset:!0,$pageYOffset:!0,$parent:!0,$scrollLeft:!0,$scrollTop:!0,$scrollX:!0,$scrollY:!0,$self:!0,$webkitIndexedDB:!0,$webkitStorageInfo:!0,$window:!0},p=function(){if(\\\"undefined\\\"==typeof window)return!1;for(var t in window)try{if(!h[\\\"$\\\"+t]&&i.call(window,t)&&null!==window[t]&&\\\"object\\\"==typeof window[t])try{f(window[t])}catch(t){return!0}}catch(t){return!0}return!1}();n=function(t){var e=null!==t&&\\\"object\\\"==typeof t,r=\\\"[object Function]\\\"===a.call(t),n=o(t),s=e&&\\\"[object String]\\\"===a.call(t),h=[];if(!e&&!r&&!n)throw new TypeError(\\\"Object.keys called on a non-object\\\");var d=u&&r;if(s&&t.length>0&&!i.call(t,0))for(var v=0;v<t.length;++v)h.push(String(v));if(n&&t.length>0)for(var g=0;g<t.length;++g)h.push(String(g));else for(var y in t)d&&\\\"prototype\\\"===y||!i.call(t,y)||h.push(String(y));if(l)for(var m=function(t){if(\\\"undefined\\\"==typeof window||!p)return f(t);try{return f(t)}catch(t){return!1}}(t),x=0;x<c.length;++x)m&&\\\"constructor\\\"===c[x]||!i.call(t,c[x])||h.push(c[x]);return h}}t.exports=n},8709:function(t,e,r){\\\"use strict\\\";var n=Array.prototype.slice,i=r(64178),a=Object.keys,o=a?function(t){return a(t)}:r(99019),s=Object.keys;o.shim=function(){if(Object.keys){var t=function(){var t=Object.keys(arguments);return t&&t.length===arguments.length}(1,2);t||(Object.keys=function(t){return i(t)?s(n.call(t)):s(t)})}else Object.keys=o;return Object.keys||o},t.exports=o},64178:function(t){\\\"use strict\\\";var e=Object.prototype.toString;t.exports=function(t){var r=e.call(t),n=\\\"[object Arguments]\\\"===r;return n||(n=\\\"[object Array]\\\"!==r&&null!==t&&\\\"object\\\"==typeof t&&\\\"number\\\"==typeof t.length&&t.length>=0&&\\\"[object Function]\\\"===e.call(t.callee)),n}},88641:function(t){\\\"use strict\\\";function e(t,e){if(\\\"string\\\"!=typeof t)return[t];var r=[t];\\\"string\\\"==typeof e||Array.isArray(e)?e={brackets:e}:e||(e={});var n=e.brackets?Array.isArray(e.brackets)?e.brackets:[e.brackets]:[\\\"{}\\\",\\\"[]\\\",\\\"()\\\"],i=e.escape||\\\"___\\\",a=!!e.flat;n.forEach((function(t){var e=new RegExp([\\\"\\\\\\\\\\\",t[0],\\\"[^\\\\\\\\\\\",t[0],\\\"\\\\\\\\\\\",t[1],\\\"]*\\\\\\\\\\\",t[1]].join(\\\"\\\")),n=[];function a(e,a,o){var s=r.push(e.slice(t[0].length,-t[1].length))-1;return n.push(s),i+s+i}r.forEach((function(t,n){for(var i,o=0;t!=i;)if(i=t,t=t.replace(e,a),o++>1e4)throw Error(\\\"References have circular dependency. Please, check them.\\\");r[n]=t})),n=n.reverse(),r=r.map((function(e){return n.forEach((function(r){e=e.replace(new RegExp(\\\"(\\\\\\\\\\\"+i+r+\\\"\\\\\\\\\\\"+i+\\\")\\\",\\\"g\\\"),t[0]+\\\"$1\\\"+t[1])})),e}))}));var o=new RegExp(\\\"\\\\\\\\\\\"+i+\\\"([0-9]+)\\\\\\\\\\\"+i);return a?r:function t(e,r,n){for(var i,a=[],s=0;i=o.exec(e);){if(s++>1e4)throw Error(\\\"Circular references in parenthesis\\\");a.push(e.slice(0,i.index)),a.push(t(r[i[1]],r)),e=e.slice(i.index+i[0].length)}return a.push(e),a}(r[0],r)}function r(t,e){if(e&&e.flat){var r,n=e&&e.escape||\\\"___\\\",i=t[0];if(!i)return\\\"\\\";for(var a=new RegExp(\\\"\\\\\\\\\\\"+n+\\\"([0-9]+)\\\\\\\\\\\"+n),o=0;i!=r;){if(o++>1e4)throw Error(\\\"Circular references in \\\"+t);r=i,i=i.replace(a,s)}return i}return t.reduce((function t(e,r){return Array.isArray(r)&&(r=r.reduce(t,\\\"\\\")),e+r}),\\\"\\\");function s(e,r){if(null==t[r])throw Error(\\\"Reference \\\"+r+\\\"is undefined\\\");return t[r]}}function n(t,n){return Array.isArray(t)?r(t,n):e(t,n)}n.parse=e,n.stringify=r,t.exports=n},18863:function(t,e,r){\\\"use strict\\\";var n=r(71299);t.exports=function(t){var e;return arguments.length>1&&(t=arguments),\\\"string\\\"==typeof t?t=t.split(/\\\\s/).map(parseFloat):\\\"number\\\"==typeof t&&(t=[t]),t.length&&\\\"number\\\"==typeof t[0]?e=1===t.length?{width:t[0],height:t[0],x:0,y:0}:2===t.length?{width:t[0],height:t[1],x:0,y:0}:{x:t[0],y:t[1],width:t[2]-t[0]||0,height:t[3]-t[1]||0}:t&&(e={x:(t=n(t,{left:\\\"x l left Left\\\",top:\\\"y t top Top\\\",width:\\\"w width W Width\\\",height:\\\"h height W Width\\\",bottom:\\\"b bottom Bottom\\\",right:\\\"r right Right\\\"})).left||0,y:t.top||0},null==t.width?t.right?e.width=t.right-e.x:e.width=0:e.width=t.width,null==t.height?t.bottom?e.height=t.bottom-e.y:e.height=0:e.height=t.height),e}},95616:function(t){t.exports=function(t){var i=[];return t.replace(r,(function(t,r,a){var o=r.toLowerCase();for(a=function(t){var e=t.match(n);return e?e.map(Number):[]}(a),\\\"m\\\"==o&&a.length>2&&(i.push([r].concat(a.splice(0,2))),o=\\\"l\\\",r=\\\"m\\\"==r?\\\"l\\\":\\\"L\\\");;){if(a.length==e[o])return a.unshift(r),i.push(a);if(a.length<e[o])throw new Error(\\\"malformed path data\\\");i.push([r].concat(a.splice(0,e[o])))}})),i};var e={a:7,c:6,h:1,l:2,m:2,q:4,s:4,t:2,v:1,z:0},r=/([astvzqmhlc])([^astvzqmhlc]*)/gi,n=/-?[0-9]*\\\\.?[0-9]+(?:e[-+]?\\\\d+)?/gi},25677:function(t){t.exports=function(t,e){e||(e=[0,\\\"\\\"]),t=String(t);var r=parseFloat(t,10);return e[0]=r,e[1]=t.match(/[\\\\d.\\\\-\\\\+]*\\\\s*(.*)/)[1]||\\\"\\\",e}},9748:function(t,e,r){var n=r(90386);(function(){var e,r,i,a,o,s;\\\"undefined\\\"!=typeof performance&&null!==performance&&performance.now?t.exports=function(){return performance.now()}:null!=n&&n.hrtime?(t.exports=function(){return(e()-o)/1e6},r=n.hrtime,a=(e=function(){var t;return 1e9*(t=r())[0]+t[1]})(),s=1e9*n.uptime(),o=a-s):Date.now?(t.exports=function(){return Date.now()-i},i=Date.now()):(t.exports=function(){return(new Date).getTime()-i},i=(new Date).getTime())}).call(this)},71299:function(t){\\\"use strict\\\";t.exports=function(t,e,n){var i,a,o={};if(\\\"string\\\"==typeof e&&(e=r(e)),Array.isArray(e)){var s={};for(a=0;a<e.length;a++)s[e[a]]=!0;e=s}for(i in e)e[i]=r(e[i]);var l={};for(i in e){var u=e[i];if(Array.isArray(u))for(a=0;a<u.length;a++){var c=u[a];if(n&&(l[c]=!0),c in t){if(o[i]=t[c],n)for(var f=a;f<u.length;f++)l[u[f]]=!0;break}}else i in t&&(e[i]&&(o[i]=t[i]),n&&(l[i]=!0))}if(n)for(i in t)l[i]||(o[i]=t[i]);return o};var e={};function r(t){return e[t]?e[t]:(\\\"string\\\"==typeof t&&(t=e[t]=t.split(/\\\\s*,\\\\s*|\\\\s+/)),t)}},38258:function(t){t.exports=function(t,e,r,n){var i=t[0],a=t[1],o=!1;void 0===r&&(r=0),void 0===n&&(n=e.length);for(var s=n-r,l=0,u=s-1;l<s;u=l++){var c=e[l+r][0],f=e[l+r][1],h=e[u+r][0],p=e[u+r][1];f>a!=p>a&&i<(h-c)*(a-f)/(p-f)+c&&(o=!o)}return o}},52142:function(t,e,r){var n,i=r(69444),a=r(29023),o=r(87263),s=r(11328),l=r(55968),u=r(10670),c=!1,f=a();function h(t,e,r){var i=n.segments(t),a=n.segments(e),o=r(n.combine(i,a));return n.polygon(o)}n={buildLog:function(t){return!0===t?c=i():!1===t&&(c=!1),!1!==c&&c.list},epsilon:function(t){return f.epsilon(t)},segments:function(t){var e=o(!0,f,c);return t.regions.forEach(e.addRegion),{segments:e.calculate(t.inverted),inverted:t.inverted}},combine:function(t,e){return{combined:o(!1,f,c).calculate(t.segments,t.inverted,e.segments,e.inverted),inverted1:t.inverted,inverted2:e.inverted}},selectUnion:function(t){return{segments:l.union(t.combined,c),inverted:t.inverted1||t.inverted2}},selectIntersect:function(t){return{segments:l.intersect(t.combined,c),inverted:t.inverted1&&t.inverted2}},selectDifference:function(t){return{segments:l.difference(t.combined,c),inverted:t.inverted1&&!t.inverted2}},selectDifferenceRev:function(t){return{segments:l.differenceRev(t.combined,c),inverted:!t.inverted1&&t.inverted2}},selectXor:function(t){return{segments:l.xor(t.combined,c),inverted:t.inverted1!==t.inverted2}},polygon:function(t){return{regions:s(t.segments,f,c),inverted:t.inverted}},polygonFromGeoJSON:function(t){return u.toPolygon(n,t)},polygonToGeoJSON:function(t){return u.fromPolygon(n,f,t)},union:function(t,e){return h(t,e,n.selectUnion)},intersect:function(t,e){return h(t,e,n.selectIntersect)},difference:function(t,e){return h(t,e,n.selectDifference)},differenceRev:function(t,e){return h(t,e,n.selectDifferenceRev)},xor:function(t,e){return h(t,e,n.selectXor)}},\\\"object\\\"==typeof window&&(window.PolyBool=n),t.exports=n},69444:function(t){t.exports=function(){var t,e=0,r=!1;function n(e,r){return t.list.push({type:e,data:r?JSON.parse(JSON.stringify(r)):void 0}),t}return t={list:[],segmentId:function(){return e++},checkIntersection:function(t,e){return n(\\\"check\\\",{seg1:t,seg2:e})},segmentChop:function(t,e){return n(\\\"div_seg\\\",{seg:t,pt:e}),n(\\\"chop\\\",{seg:t,pt:e})},statusRemove:function(t){return n(\\\"pop_seg\\\",{seg:t})},segmentUpdate:function(t){return n(\\\"seg_update\\\",{seg:t})},segmentNew:function(t,e){return n(\\\"new_seg\\\",{seg:t,primary:e})},segmentRemove:function(t){return n(\\\"rem_seg\\\",{seg:t})},tempStatus:function(t,e,r){return n(\\\"temp_status\\\",{seg:t,above:e,below:r})},rewind:function(t){return n(\\\"rewind\\\",{seg:t})},status:function(t,e,r){return n(\\\"status\\\",{seg:t,above:e,below:r})},vert:function(e){return e===r?t:(r=e,n(\\\"vert\\\",{x:e}))},log:function(t){return\\\"string\\\"!=typeof t&&(t=JSON.stringify(t,!1,\\\"  \\\")),n(\\\"log\\\",{txt:t})},reset:function(){return n(\\\"reset\\\")},selected:function(t){return n(\\\"selected\\\",{segs:t})},chainStart:function(t){return n(\\\"chain_start\\\",{seg:t})},chainRemoveHead:function(t,e){return n(\\\"chain_rem_head\\\",{index:t,pt:e})},chainRemoveTail:function(t,e){return n(\\\"chain_rem_tail\\\",{index:t,pt:e})},chainNew:function(t,e){return n(\\\"chain_new\\\",{pt1:t,pt2:e})},chainMatch:function(t){return n(\\\"chain_match\\\",{index:t})},chainClose:function(t){return n(\\\"chain_close\\\",{index:t})},chainAddHead:function(t,e){return n(\\\"chain_add_head\\\",{index:t,pt:e})},chainAddTail:function(t,e){return n(\\\"chain_add_tail\\\",{index:t,pt:e})},chainConnect:function(t,e){return n(\\\"chain_con\\\",{index1:t,index2:e})},chainReverse:function(t){return n(\\\"chain_rev\\\",{index:t})},chainJoin:function(t,e){return n(\\\"chain_join\\\",{index1:t,index2:e})},done:function(){return n(\\\"done\\\")}}}},29023:function(t){t.exports=function(t){\\\"number\\\"!=typeof t&&(t=1e-10);var e={epsilon:function(e){return\\\"number\\\"==typeof e&&(t=e),t},pointAboveOrOnLine:function(e,r,n){var i=r[0],a=r[1],o=n[0],s=n[1],l=e[0];return(o-i)*(e[1]-a)-(s-a)*(l-i)>=-t},pointBetween:function(e,r,n){var i=e[1]-r[1],a=n[0]-r[0],o=e[0]-r[0],s=n[1]-r[1],l=o*a+i*s;return!(l<t||l-(a*a+s*s)>-t)},pointsSameX:function(e,r){return Math.abs(e[0]-r[0])<t},pointsSameY:function(e,r){return Math.abs(e[1]-r[1])<t},pointsSame:function(t,r){return e.pointsSameX(t,r)&&e.pointsSameY(t,r)},pointsCompare:function(t,r){return e.pointsSameX(t,r)?e.pointsSameY(t,r)?0:t[1]<r[1]?-1:1:t[0]<r[0]?-1:1},pointsCollinear:function(e,r,n){var i=e[0]-r[0],a=e[1]-r[1],o=r[0]-n[0],s=r[1]-n[1];return Math.abs(i*s-o*a)<t},linesIntersect:function(e,r,n,i){var a=r[0]-e[0],o=r[1]-e[1],s=i[0]-n[0],l=i[1]-n[1],u=a*l-o*s;if(Math.abs(u)<t)return!1;var c=e[0]-n[0],f=e[1]-n[1],h=(s*f-l*c)/u,p=(a*f-o*c)/u,d={alongA:0,alongB:0,pt:[e[0]+h*a,e[1]+h*o]};return d.alongA=h<=-t?-2:h<t?-1:h-1<=-t?0:h-1<t?1:2,d.alongB=p<=-t?-2:p<t?-1:p-1<=-t?0:p-1<t?1:2,d},pointInsideRegion:function(e,r){for(var n=e[0],i=e[1],a=r[r.length-1][0],o=r[r.length-1][1],s=!1,l=0;l<r.length;l++){var u=r[l][0],c=r[l][1];c-i>t!=o-i>t&&(a-u)*(i-c)/(o-c)+u-n>t&&(s=!s),a=u,o=c}return s}};return e}},10670:function(t){var e={toPolygon:function(t,e){function r(e){if(e.length<=0)return t.segments({inverted:!1,regions:[]});function r(e){var r=e.slice(0,e.length-1);return t.segments({inverted:!1,regions:[r]})}for(var n=r(e[0]),i=1;i<e.length;i++)n=t.selectDifference(t.combine(n,r(e[i])));return n}if(\\\"Polygon\\\"===e.type)return t.polygon(r(e.coordinates));if(\\\"MultiPolygon\\\"===e.type){for(var n=t.segments({inverted:!1,regions:[]}),i=0;i<e.coordinates.length;i++)n=t.selectUnion(t.combine(n,r(e.coordinates[i])));return t.polygon(n)}throw new Error(\\\"PolyBool: Cannot convert GeoJSON object to PolyBool polygon\\\")},fromPolygon:function(t,e,r){function n(t,r){return e.pointInsideRegion([.5*(t[0][0]+t[1][0]),.5*(t[0][1]+t[1][1])],r)}function i(t){return{region:t,children:[]}}r=t.polygon(t.segments(r));var a=i(null);function o(t,e){for(var r=0;r<t.children.length;r++)if(n(e,(s=t.children[r]).region))return void o(s,e);var a=i(e);for(r=0;r<t.children.length;r++){var s;n((s=t.children[r]).region,e)&&(a.children.push(s),t.children.splice(r,1),r--)}t.children.push(a)}for(var s=0;s<r.regions.length;s++){var l=r.regions[s];l.length<3||o(a,l)}function u(t,e){for(var r=0,n=t[t.length-1][0],i=t[t.length-1][1],a=[],o=0;o<t.length;o++){var s=t[o][0],l=t[o][1];a.push([s,l]),r+=l*n-s*i,n=s,i=l}return r<0!==e&&a.reverse(),a.push([a[0][0],a[0][1]]),a}var c=[];function f(t){var e=[u(t.region,!1)];c.push(e);for(var r=0;r<t.children.length;r++)e.push(h(t.children[r]))}function h(t){for(var e=0;e<t.children.length;e++)f(t.children[e]);return u(t.region,!0)}for(s=0;s<a.children.length;s++)f(a.children[s]);return c.length<=0?{type:\\\"Polygon\\\",coordinates:[]}:1==c.length?{type:\\\"Polygon\\\",coordinates:c[0]}:{type:\\\"MultiPolygon\\\",coordinates:c}}};t.exports=e},87263:function(t,e,r){var n=r(26859);t.exports=function(t,e,r){function i(t,e,n){return{id:r?r.segmentId():-1,start:t,end:e,myFill:{above:n.myFill.above,below:n.myFill.below},otherFill:null}}var a=n.create();function o(t,r){a.insertBefore(t,(function(n){return i=t.isStart,a=t.pt,o=r,s=n.isStart,l=n.pt,u=n.other.pt,(0!==(c=e.pointsCompare(a,l))?c:e.pointsSame(o,u)?0:i!==s?i?1:-1:e.pointAboveOrOnLine(o,s?l:u,s?u:l)?1:-1)<0;var i,a,o,s,l,u,c}))}function s(t,e){var r=function(t,e){var r=n.node({isStart:!0,pt:t.start,seg:t,primary:e,other:null,status:null});return o(r,t.end),r}(t,e);return function(t,e,r){var i=n.node({isStart:!1,pt:e.end,seg:e,primary:r,other:t,status:null});t.other=i,o(i,t.pt)}(r,t,e),r}function l(t,e){var n=i(e,t.seg.end,t.seg);return function(t,e){r&&r.segmentChop(t.seg,e),t.other.remove(),t.seg.end=e,t.other.pt=e,o(t.other,t.pt)}(t,e),s(n,t.primary)}function u(i,o){var s=n.create();function u(t){return s.findTransition((function(r){var n,i,a,o,s,l;return n=t,i=r.ev,a=n.seg.start,o=n.seg.end,s=i.seg.start,l=i.seg.end,(e.pointsCollinear(a,s,l)?e.pointsCollinear(o,s,l)||e.pointAboveOrOnLine(o,s,l)?1:-1:e.pointAboveOrOnLine(a,s,l)?1:-1)>0}))}function c(t,n){var i=t.seg,a=n.seg,o=i.start,s=i.end,u=a.start,c=a.end;r&&r.checkIntersection(i,a);var f=e.linesIntersect(o,s,u,c);if(!1===f){if(!e.pointsCollinear(o,s,u))return!1;if(e.pointsSame(o,c)||e.pointsSame(s,u))return!1;var h=e.pointsSame(o,u),p=e.pointsSame(s,c);if(h&&p)return n;var d=!h&&e.pointBetween(o,u,c),v=!p&&e.pointBetween(s,u,c);if(h)return v?l(n,s):l(t,c),n;d&&(p||(v?l(n,s):l(t,c)),l(n,o))}else 0===f.alongA&&(-1===f.alongB?l(t,u):0===f.alongB?l(t,f.pt):1===f.alongB&&l(t,c)),0===f.alongB&&(-1===f.alongA?l(n,o):0===f.alongA?l(n,f.pt):1===f.alongA&&l(n,s));return!1}for(var f=[];!a.isEmpty();){var h=a.getHead();if(r&&r.vert(h.pt[0]),h.isStart){r&&r.segmentNew(h.seg,h.primary);var p=u(h),d=p.before?p.before.ev:null,v=p.after?p.after.ev:null;function g(){if(d){var t=c(h,d);if(t)return t}return!!v&&c(h,v)}r&&r.tempStatus(h.seg,!!d&&d.seg,!!v&&v.seg);var y,m,x=g();if(x)t?(m=null===h.seg.myFill.below||h.seg.myFill.above!==h.seg.myFill.below)&&(x.seg.myFill.above=!x.seg.myFill.above):x.seg.otherFill=h.seg.myFill,r&&r.segmentUpdate(x.seg),h.other.remove(),h.remove();if(a.getHead()!==h){r&&r.rewind(h.seg);continue}t?(m=null===h.seg.myFill.below||h.seg.myFill.above!==h.seg.myFill.below,h.seg.myFill.below=v?v.seg.myFill.above:i,h.seg.myFill.above=m?!h.seg.myFill.below:h.seg.myFill.below):null===h.seg.otherFill&&(y=v?h.primary===v.primary?v.seg.otherFill.above:v.seg.myFill.above:h.primary?o:i,h.seg.otherFill={above:y,below:y}),r&&r.status(h.seg,!!d&&d.seg,!!v&&v.seg),h.other.status=p.insert(n.node({ev:h}))}else{var b=h.status;if(null===b)throw new Error(\\\"PolyBool: Zero-length segment detected; your epsilon is probably too small or too large\\\");if(s.exists(b.prev)&&s.exists(b.next)&&c(b.prev.ev,b.next.ev),r&&r.statusRemove(b.ev.seg),b.remove(),!h.primary){var _=h.seg.myFill;h.seg.myFill=h.seg.otherFill,h.seg.otherFill=_}f.push(h.seg)}a.getHead().remove()}return r&&r.done(),f}return t?{addRegion:function(t){for(var n,i,a,o=t[t.length-1],l=0;l<t.length;l++){n=o,o=t[l];var u=e.pointsCompare(n,o);0!==u&&s((i=u<0?n:o,a=u<0?o:n,{id:r?r.segmentId():-1,start:i,end:a,myFill:{above:null,below:null},otherFill:null}),!0)}},calculate:function(t){return u(t,!1)}}:{calculate:function(t,e,r,n){return t.forEach((function(t){s(i(t.start,t.end,t),!0)})),r.forEach((function(t){s(i(t.start,t.end,t),!1)})),u(e,n)}}}},26859:function(t){t.exports={create:function(){var t={root:{root:!0,next:null},exists:function(e){return null!==e&&e!==t.root},isEmpty:function(){return null===t.root.next},getHead:function(){return t.root.next},insertBefore:function(e,r){for(var n=t.root,i=t.root.next;null!==i;){if(r(i))return e.prev=i.prev,e.next=i,i.prev.next=e,void(i.prev=e);n=i,i=i.next}n.next=e,e.prev=n,e.next=null},findTransition:function(e){for(var r=t.root,n=t.root.next;null!==n&&!e(n);)r=n,n=n.next;return{before:r===t.root?null:r,after:n,insert:function(t){return t.prev=r,t.next=n,r.next=t,null!==n&&(n.prev=t),t}}}};return t},node:function(t){return t.prev=null,t.next=null,t.remove=function(){t.prev.next=t.next,t.next&&(t.next.prev=t.prev),t.prev=null,t.next=null},t}}},11328:function(t){t.exports=function(t,e,r){var n=[],i=[];return t.forEach((function(t){var a=t.start,o=t.end;if(e.pointsSame(a,o))console.warn(\\\"PolyBool: Warning: Zero-length segment detected; your epsilon is probably too small or too large\\\");else{r&&r.chainStart(t);for(var s={index:0,matches_head:!1,matches_pt1:!1},l={index:0,matches_head:!1,matches_pt1:!1},u=s,c=0;c<n.length;c++){var f=(g=n[c])[0],h=(g[1],g[g.length-1]);if(g[g.length-2],e.pointsSame(f,a)){if(k(c,!0,!0))break}else if(e.pointsSame(f,o)){if(k(c,!0,!1))break}else if(e.pointsSame(h,a)){if(k(c,!1,!0))break}else if(e.pointsSame(h,o)&&k(c,!1,!1))break}if(u===s)return n.push([a,o]),void(r&&r.chainNew(a,o));if(u===l){r&&r.chainMatch(s.index);var p=s.index,d=s.matches_pt1?o:a,v=s.matches_head,g=n[p],y=v?g[0]:g[g.length-1],m=v?g[1]:g[g.length-2],x=v?g[g.length-1]:g[0],b=v?g[g.length-2]:g[1];return e.pointsCollinear(m,y,d)&&(v?(r&&r.chainRemoveHead(s.index,d),g.shift()):(r&&r.chainRemoveTail(s.index,d),g.pop()),y=m),e.pointsSame(x,d)?(n.splice(p,1),e.pointsCollinear(b,x,y)&&(v?(r&&r.chainRemoveTail(s.index,y),g.pop()):(r&&r.chainRemoveHead(s.index,y),g.shift())),r&&r.chainClose(s.index),void i.push(g)):void(v?(r&&r.chainAddHead(s.index,d),g.unshift(d)):(r&&r.chainAddTail(s.index,d),g.push(d)))}var _=s.index,w=l.index;r&&r.chainConnect(_,w);var T=n[_].length<n[w].length;s.matches_head?l.matches_head?T?(A(_),M(_,w)):(A(w),M(w,_)):M(w,_):l.matches_head?M(_,w):T?(A(_),M(w,_)):(A(w),M(_,w))}function k(t,e,r){return u.index=t,u.matches_head=e,u.matches_pt1=r,u===s?(u=l,!1):(u=null,!0)}function A(t){r&&r.chainReverse(t),n[t].reverse()}function M(t,i){var a=n[t],o=n[i],s=a[a.length-1],l=a[a.length-2],u=o[0],c=o[1];e.pointsCollinear(l,s,u)&&(r&&r.chainRemoveTail(t,s),a.pop(),s=l),e.pointsCollinear(s,u,c)&&(r&&r.chainRemoveHead(i,u),o.shift()),r&&r.chainJoin(t,i),n[t]=a.concat(o),n.splice(i,1)}})),i}},55968:function(t){function e(t,e,r){var n=[];return t.forEach((function(t){var i=(t.myFill.above?8:0)+(t.myFill.below?4:0)+(t.otherFill&&t.otherFill.above?2:0)+(t.otherFill&&t.otherFill.below?1:0);0!==e[i]&&n.push({id:r?r.segmentId():-1,start:t.start,end:t.end,myFill:{above:1===e[i],below:2===e[i]},otherFill:null})})),r&&r.selected(n),n}var r={union:function(t,r){return e(t,[0,2,1,0,2,2,0,0,1,0,1,0,0,0,0,0],r)},intersect:function(t,r){return e(t,[0,0,0,0,0,2,0,2,0,0,1,1,0,2,1,0],r)},difference:function(t,r){return e(t,[0,0,0,0,2,0,2,0,1,1,0,0,0,1,2,0],r)},differenceRev:function(t,r){return e(t,[0,2,1,0,0,0,1,1,0,2,0,2,0,0,0,0],r)},xor:function(t,r){return e(t,[0,2,1,0,2,0,0,1,1,0,0,2,0,1,2,0],r)}};t.exports=r},14847:function(t,e,r){\\\"use strict\\\";var n=r(21630).Transform,i=r(90715);function a(){n.call(this,{readableObjectMode:!0})}function o(t,e,r){Error.call(this),Error.captureStackTrace?Error.captureStackTrace(this,this.constructor):this.stack=(new Error).stack||\\\"\\\",this.name=this.constructor.name,this.message=t,e&&(this.code=e),r&&(this.statusCode=r)}a.prototype=Object.create(n.prototype),a.prototype.constructor=a,i(a.prototype),e.OF=function(t,e,r){for(var n=e,i=0;i<r.length;)if(t[n++]!==r[i++])return!1;return!0},e.eG=function(t,e){var r=[],n=0;if(e&&\\\"hex\\\"===e)for(;n<t.length;)r.push(parseInt(t.slice(n,n+2),16)),n+=2;else for(;n<t.length;n++)r.push(255&t.charCodeAt(n));return r},e.mP=function(t,e){return t[e]|t[e+1]<<8},e.n8=function(t,e){return t[e+1]|t[e]<<8},e.nm=function(t,e){return t[e]|t[e+1]<<8|t[e+2]<<16|16777216*t[e+3]},e.Ag=function(t,e){return t[e+3]|t[e+2]<<8|t[e+1]<<16|16777216*t[e]},o.prototype=Object.create(Error.prototype),o.prototype.constructor=o},71371:function(t){\\\"use strict\\\";function e(t,e){var r=new Error(t);return r.code=e,r}function r(t){try{return decodeURIComponent(escape(t))}catch(e){return t}}function n(t,r,n){this.input=t.subarray(r,n),this.start=r;var i=String.fromCharCode.apply(null,this.input.subarray(0,4));if(\\\"II*\\\\0\\\"!==i&&\\\"MM\\\\0*\\\"!==i)throw e(\\\"invalid TIFF signature\\\",\\\"EBADDATA\\\");this.big_endian=\\\"M\\\"===i[0]}n.prototype.each=function(t){this.aborted=!1;var e=this.read_uint32(4);for(this.ifds_to_read=[{id:0,offset:e}];this.ifds_to_read.length>0&&!this.aborted;){var r=this.ifds_to_read.shift();r.offset&&this.scan_ifd(r.id,r.offset,t)}},n.prototype.read_uint16=function(t){var r=this.input;if(t+2>r.length)throw e(\\\"unexpected EOF\\\",\\\"EBADDATA\\\");return this.big_endian?256*r[t]+r[t+1]:r[t]+256*r[t+1]},n.prototype.read_uint32=function(t){var r=this.input;if(t+4>r.length)throw e(\\\"unexpected EOF\\\",\\\"EBADDATA\\\");return this.big_endian?16777216*r[t]+65536*r[t+1]+256*r[t+2]+r[t+3]:r[t]+256*r[t+1]+65536*r[t+2]+16777216*r[t+3]},n.prototype.is_subifd_link=function(t,e){return 0===t&&34665===e||0===t&&34853===e||34665===t&&40965===e},n.prototype.exif_format_length=function(t){switch(t){case 1:case 2:case 6:case 7:return 1;case 3:case 8:return 2;case 4:case 9:case 11:return 4;case 5:case 10:case 12:return 8;default:return 0}},n.prototype.exif_format_read=function(t,e){var r;switch(t){case 1:case 2:return this.input[e];case 6:return(r=this.input[e])|33554430*(128&r);case 3:return this.read_uint16(e);case 8:return(r=this.read_uint16(e))|131070*(32768&r);case 4:return this.read_uint32(e);case 9:return 0|this.read_uint32(e);default:return null}},n.prototype.scan_ifd=function(t,n,i){var a=this.read_uint16(n);n+=2;for(var o=0;o<a;o++){var s=this.read_uint16(n),l=this.read_uint16(n+2),u=this.read_uint32(n+4),c=this.exif_format_length(l),f=u*c,h=f<=4?n+8:this.read_uint32(n+8),p=!1;if(h+f>this.input.length)throw e(\\\"unexpected EOF\\\",\\\"EBADDATA\\\");for(var d=[],v=h,g=0;g<u;g++,v+=c){var y=this.exif_format_read(l,v);if(null===y){d=null;break}d.push(y)}if(Array.isArray(d)&&2===l&&(d=r(String.fromCharCode.apply(null,d)))&&\\\"\\\\0\\\"===d[d.length-1]&&(d=d.slice(0,-1)),this.is_subifd_link(t,s)&&Array.isArray(d)&&Number.isInteger(d[0])&&d[0]>0&&(this.ifds_to_read.push({id:s,offset:d[0]}),p=!0),!1===i({is_big_endian:this.big_endian,ifd:t,tag:s,format:l,count:u,entry_offset:n+this.start,data_length:f,data_offset:h+this.start,value:d,is_subifd_link:p}))return void(this.aborted=!0);n+=12}0===t&&this.ifds_to_read.push({id:1,offset:this.read_uint32(n)})},t.exports.ExifParser=n,t.exports.get_orientation=function(t){var e=0;try{return new n(t,0,t.length).each((function(t){if(0===t.ifd&&274===t.tag&&Array.isArray(t.value))return e=t.value[0],!1})),e}catch(t){return-1}}},76767:function(t,e,r){\\\"use strict\\\";var n=r(14847).n8,i=r(14847).Ag;function a(t,e){if(t.length<4+e)return null;var r=i(t,e);return t.length<r+e||r<8?null:{boxtype:String.fromCharCode.apply(null,t.slice(e+4,e+8)),data:t.slice(e+8,e+r),end:e+r}}function o(t,e){for(var r=0;;){var n=a(t,r);if(!n)break;switch(n.boxtype){case\\\"ispe\\\":e.sizes.push({width:i(n.data,4),height:i(n.data,8)});break;case\\\"irot\\\":e.transforms.push({type:\\\"irot\\\",value:3&n.data[0]});break;case\\\"imir\\\":e.transforms.push({type:\\\"imir\\\",value:1&n.data[0]})}r=n.end}}function s(t,e,r){for(var n=0,i=0;i<r;i++)n=256*n+(t[e+i]||0);return n}function l(t,e){for(var r=t[4]>>4&15,i=15&t[4],a=t[5]>>4&15,o=n(t,6),l=8,u=0;u<o;u++){var c=n(t,l),f=n(t,l+=2),h=s(t,l+=2,a),p=n(t,l+=a);if(l+=2,0===f&&1===p){var d=s(t,l,r),v=s(t,l+r,i);e.item_loc[c]={length:v,offset:d+h}}l+=p*(r+i)}}function u(t,e){for(var r=n(t,4),i=6,o=0;o<r;o++){var s=a(t,i);if(!s)break;if(\\\"infe\\\"===s.boxtype){for(var l=n(s.data,4),u=\\\"\\\",c=8;c<s.data.length&&s.data[c];c++)u+=String.fromCharCode(s.data[c]);e.item_inf[u]=l}i=s.end}}function c(t,e){for(var r=0;;){var n=a(t,r);if(!n)break;\\\"ipco\\\"===n.boxtype&&o(n.data,e),r=n.end}}t.exports.unbox=a,t.exports.readSizeFromMeta=function(t){var e={sizes:[],transforms:[],item_inf:{},item_loc:{}};if(function(t,e){for(var r=4;;){var n=a(t,r);if(!n)break;\\\"iprp\\\"===n.boxtype&&c(n.data,e),\\\"iloc\\\"===n.boxtype&&l(n.data,e),\\\"iinf\\\"===n.boxtype&&u(n.data,e),r=n.end}}(t,e),e.sizes.length){var r,n,i,o=(n=(r=e.sizes).reduce((function(t,e){return t.width>e.width||t.width===e.width&&t.height>e.height?t:e})),i=r.reduce((function(t,e){return t.height>e.height||t.height===e.height&&t.width>e.width?t:e})),n.width>i.height||n.width===i.height&&n.height>i.width?n:i),s=1;e.transforms.forEach((function(t){var e={1:6,2:5,3:8,4:7,5:4,6:3,7:2,8:1},r={1:4,2:3,3:2,4:1,5:6,6:5,7:8,8:7};if(\\\"imir\\\"===t.type&&(s=0===t.value?r[s]:e[s=e[s=r[s]]]),\\\"irot\\\"===t.type)for(var n=0;n<t.value;n++)s=e[s]}));var f=null;return e.item_inf.Exif&&(f=e.item_loc[e.item_inf.Exif]),{width:o.width,height:o.height,orientation:e.transforms.length?s:null,variants:e.sizes,exif_location:f}}},t.exports.getMimeType=function(t){var e=String.fromCharCode.apply(null,t.slice(0,4)),r={};r[e]=!0;for(var n=8;n<t.length;n+=4)r[String.fromCharCode.apply(null,t.slice(n,n+4))]=!0;if(r.mif1||r.msf1||r.miaf)return\\\"avif\\\"===e||\\\"avis\\\"===e||\\\"avio\\\"===e?{type:\\\"avif\\\",mime:\\\"image/avif\\\"}:\\\"heic\\\"===e||\\\"heix\\\"===e?{type:\\\"heic\\\",mime:\\\"image/heic\\\"}:\\\"hevc\\\"===e||\\\"hevx\\\"===e?{type:\\\"heic\\\",mime:\\\"image/heic-sequence\\\"}:r.avif||r.avis?{type:\\\"avif\\\",mime:\\\"image/avif\\\"}:r.heic||r.heix||r.hevc||r.hevx||r.heis?r.msf1?{type:\\\"heif\\\",mime:\\\"image/heif-sequence\\\"}:{type:\\\"heif\\\",mime:\\\"image/heif\\\"}:{type:\\\"avif\\\",mime:\\\"image/avif\\\"}}},24461:function(t,e,r){\\\"use strict\\\";var n=r(14847).eG,i=r(14847).OF,a=r(14847).Ag,o=r(76767),s=r(71371),l=n(\\\"ftyp\\\");t.exports=function(t){if(i(t,4,l)){var e=o.unbox(t,0);if(e){var r=o.getMimeType(e.data);if(r){for(var n,u=e.end;;){var c=o.unbox(t,u);if(!c)break;if(u=c.end,\\\"mdat\\\"===c.boxtype)return;if(\\\"meta\\\"===c.boxtype){n=c.data;break}}if(n){var f=o.readSizeFromMeta(n);if(f){var h={width:f.width,height:f.height,type:r.type,mime:r.mime,wUnits:\\\"px\\\",hUnits:\\\"px\\\"};if(f.variants.length>1&&(h.variants=f.variants),f.orientation&&(h.orientation=f.orientation),f.exif_location&&f.exif_location.offset+f.exif_location.length<=t.length){var p=a(t,f.exif_location.offset),d=t.slice(f.exif_location.offset+p+4,f.exif_location.offset+f.exif_location.length),v=s.get_orientation(d);v>0&&(h.orientation=v)}return h}}}}}}},2504:function(t,e,r){\\\"use strict\\\";var n=r(14847).eG,i=r(14847).OF,a=r(14847).mP,o=n(\\\"BM\\\");t.exports=function(t){if(!(t.length<26)&&i(t,0,o))return{width:a(t,18),height:a(t,22),type:\\\"bmp\\\",mime:\\\"image/bmp\\\",wUnits:\\\"px\\\",hUnits:\\\"px\\\"}}},47342:function(t,e,r){\\\"use strict\\\";var n=r(14847).eG,i=r(14847).OF,a=r(14847).mP,o=n(\\\"GIF87a\\\"),s=n(\\\"GIF89a\\\");t.exports=function(t){if(!(t.length<10)&&(i(t,0,o)||i(t,0,s)))return{width:a(t,6),height:a(t,8),type:\\\"gif\\\",mime:\\\"image/gif\\\",wUnits:\\\"px\\\",hUnits:\\\"px\\\"}}},31355:function(t,e,r){\\\"use strict\\\";var n=r(14847).mP;t.exports=function(t){var e=n(t,0),r=n(t,2),i=n(t,4);if(0===e&&1===r&&i){for(var a=[],o={width:0,height:0},s=0;s<i;s++){var l=t[6+16*s]||256,u=t[6+16*s+1]||256,c={width:l,height:u};a.push(c),(l>o.width||u>o.height)&&(o=c)}return{width:o.width,height:o.height,variants:a,type:\\\"ico\\\",mime:\\\"image/x-icon\\\",wUnits:\\\"px\\\",hUnits:\\\"px\\\"}}}},54261:function(t,e,r){\\\"use strict\\\";var n=r(14847).n8,i=r(14847).eG,a=r(14847).OF,o=r(71371),s=i(\\\"Exif\\\\0\\\\0\\\");t.exports=function(t){if(!(t.length<2)&&255===t[0]&&216===t[1]&&255===t[2])for(var e=2;;){for(;;){if(t.length-e<2)return;if(255===t[e++])break}for(var r,i,l=t[e++];255===l;)l=t[e++];if(208<=l&&l<=217||1===l)r=0;else{if(!(192<=l&&l<=254))return;if(t.length-e<2)return;r=n(t,e)-2,e+=2}if(217===l||218===l)return;if(225===l&&r>=10&&a(t,e,s)&&(i=o.get_orientation(t.slice(e+6,e+r))),r>=5&&192<=l&&l<=207&&196!==l&&200!==l&&204!==l){if(t.length-e<r)return;var u={width:n(t,e+3),height:n(t,e+1),type:\\\"jpg\\\",mime:\\\"image/jpeg\\\",wUnits:\\\"px\\\",hUnits:\\\"px\\\"};return i>0&&(u.orientation=i),u}e+=r}}},6303:function(t,e,r){\\\"use strict\\\";var n=r(14847).eG,i=r(14847).OF,a=r(14847).Ag,o=n(\\\"PNG\\\\r\\\\n\\u001a\\\\n\\\"),s=n(\\\"IHDR\\\");t.exports=function(t){if(!(t.length<24)&&i(t,0,o)&&i(t,12,s))return{width:a(t,16),height:a(t,20),type:\\\"png\\\",mime:\\\"image/png\\\",wUnits:\\\"px\\\",hUnits:\\\"px\\\"}}},38689:function(t,e,r){\\\"use strict\\\";var n=r(14847).eG,i=r(14847).OF,a=r(14847).Ag,o=n(\\\"8BPS\\\\0\\u0001\\\");t.exports=function(t){if(!(t.length<22)&&i(t,0,o))return{width:a(t,18),height:a(t,14),type:\\\"psd\\\",mime:\\\"image/vnd.adobe.photoshop\\\",wUnits:\\\"px\\\",hUnits:\\\"px\\\"}}},6881:function(t){\\\"use strict\\\";function e(t){return\\\"number\\\"==typeof t&&isFinite(t)&&t>0}var r=/<[-_.:a-zA-Z0-9][^>]*>/,n=/^<([-_.:a-zA-Z0-9]+:)?svg\\\\s/,i=/[^-]\\\\bwidth=\\\"([^%]+?)\\\"|[^-]\\\\bwidth='([^%]+?)'/,a=/\\\\bheight=\\\"([^%]+?)\\\"|\\\\bheight='([^%]+?)'/,o=/\\\\bview[bB]ox=\\\"(.+?)\\\"|\\\\bview[bB]ox='(.+?)'/,s=/in$|mm$|cm$|pt$|pc$|px$|em$|ex$/;function l(t){return s.test(t)?t.match(s)[0]:\\\"px\\\"}t.exports=function(t){if(function(t){var e,r=0,n=t.length;for(239===t[0]&&187===t[1]&&191===t[2]&&(r=3);r<n&&(32===(e=t[r])||9===e||13===e||10===e);)r++;return r!==n&&60===t[r]}(t)){for(var s=\\\"\\\",u=0;u<t.length;u++)s+=String.fromCharCode(t[u]);var c=(s.match(r)||[\\\"\\\"])[0];if(n.test(c)){var f=function(t){var e=t.match(i),r=t.match(a),n=t.match(o);return{width:e&&(e[1]||e[2]),height:r&&(r[1]||r[2]),viewbox:n&&(n[1]||n[2])}}(c),h=parseFloat(f.width),p=parseFloat(f.height);if(f.width&&f.height){if(!e(h)||!e(p))return;return{width:h,height:p,type:\\\"svg\\\",mime:\\\"image/svg+xml\\\",wUnits:l(f.width),hUnits:l(f.height)}}var d=(f.viewbox||\\\"\\\").split(\\\" \\\"),v={width:d[2],height:d[3]},g=parseFloat(v.width),y=parseFloat(v.height);if(e(g)&&e(y)&&l(v.width)===l(v.height)){var m=g/y;if(f.width){if(!e(h))return;return{width:h,height:h/m,type:\\\"svg\\\",mime:\\\"image/svg+xml\\\",wUnits:l(f.width),hUnits:l(f.width)}}if(f.height){if(!e(p))return;return{width:p*m,height:p,type:\\\"svg\\\",mime:\\\"image/svg+xml\\\",wUnits:l(f.height),hUnits:l(f.height)}}return{width:g,height:y,type:\\\"svg\\\",mime:\\\"image/svg+xml\\\",wUnits:l(v.width),hUnits:l(v.height)}}}}}},66278:function(t,e,r){\\\"use strict\\\";var n=r(14847).eG,i=r(14847).OF,a=r(14847).mP,o=r(14847).n8,s=r(14847).nm,l=r(14847).Ag,u=n(\\\"II*\\\\0\\\"),c=n(\\\"MM\\\\0*\\\");function f(t,e,r){return r?o(t,e):a(t,e)}function h(t,e,r){return r?l(t,e):s(t,e)}function p(t,e,r){var n=f(t,e+2,r);return 1!==h(t,e+4,r)||3!==n&&4!==n?null:3===n?f(t,e+8,r):h(t,e+8,r)}t.exports=function(t){if(!(t.length<8)&&(i(t,0,u)||i(t,0,c))){var e=77===t[0],r=h(t,4,e)-8;if(!(r<0)){var n=r+8;if(!(t.length-n<2)){var a=12*f(t,n+0,e);if(!(a<=0||(n+=2,t.length-n<a))){var o,s,l,d;for(o=0;o<a;o+=12)256===(d=f(t,n+o,e))?s=p(t,n+o,e):257===d&&(l=p(t,n+o,e));return s&&l?{width:s,height:l,type:\\\"tiff\\\",mime:\\\"image/tiff\\\",wUnits:\\\"px\\\",hUnits:\\\"px\\\"}:void 0}}}}}},90784:function(t,e,r){\\\"use strict\\\";var n=r(14847).eG,i=r(14847).OF,a=r(14847).mP,o=r(14847).nm,s=r(71371),l=n(\\\"RIFF\\\"),u=n(\\\"WEBP\\\");function c(t,e){if(157===t[e+3]&&1===t[e+4]&&42===t[e+5])return{width:16383&a(t,e+6),height:16383&a(t,e+8),type:\\\"webp\\\",mime:\\\"image/webp\\\",wUnits:\\\"px\\\",hUnits:\\\"px\\\"}}function f(t,e){if(47===t[e]){var r=o(t,e+1);return{width:1+(16383&r),height:1+(r>>14&16383),type:\\\"webp\\\",mime:\\\"image/webp\\\",wUnits:\\\"px\\\",hUnits:\\\"px\\\"}}}function h(t,e){return{width:1+(t[e+6]<<16|t[e+5]<<8|t[e+4]),height:1+(t[e+9]<<e|t[e+8]<<8|t[e+7]),type:\\\"webp\\\",mime:\\\"image/webp\\\",wUnits:\\\"px\\\",hUnits:\\\"px\\\"}}t.exports=function(t){if(!(t.length<16)&&(i(t,0,l)||i(t,8,u))){var e=12,r=null,n=0,a=o(t,4)+8;if(!(a>t.length)){for(;e+8<a;)if(0!==t[e]){var p=String.fromCharCode.apply(null,t.slice(e,e+4)),d=o(t,e+4);\\\"VP8 \\\"===p&&d>=10?r=r||c(t,e+8):\\\"VP8L\\\"===p&&d>=9?r=r||f(t,e+8):\\\"VP8X\\\"===p&&d>=10?r=r||h(t,e+8):\\\"EXIF\\\"===p&&(n=s.get_orientation(t.slice(e+8,e+8+d)),e=1/0),e+=8+d}else e++;if(r)return n>0&&(r.orientation=n),r}}}},91497:function(t,e,r){\\\"use strict\\\";t.exports={avif:r(24461),bmp:r(2504),gif:r(47342),ico:r(31355),jpeg:r(54261),png:r(6303),psd:r(38689),svg:r(6881),tiff:r(66278),webp:r(90784)}},33575:function(t,e,r){\\\"use strict\\\";var n=r(91497);t.exports=function(t){return function(t){for(var e=Object.keys(n),r=0;r<e.length;r++){var i=n[e[r]](t);if(i)return i}return null}(t)},t.exports.parsers=n},90386:function(t){var e,r,n=t.exports={};function i(){throw new Error(\\\"setTimeout has not been defined\\\")}function a(){throw new Error(\\\"clearTimeout has not been defined\\\")}function o(t){if(e===setTimeout)return setTimeout(t,0);if((e===i||!e)&&setTimeout)return e=setTimeout,setTimeout(t,0);try{return e(t,0)}catch(r){try{return e.call(null,t,0)}catch(r){return e.call(this,t,0)}}}!function(){try{e=\\\"function\\\"==typeof setTimeout?setTimeout:i}catch(t){e=i}try{r=\\\"function\\\"==typeof clearTimeout?clearTimeout:a}catch(t){r=a}}();var s,l=[],u=!1,c=-1;function f(){u&&s&&(u=!1,s.length?l=s.concat(l):c=-1,l.length&&h())}function h(){if(!u){var t=o(f);u=!0;for(var e=l.length;e;){for(s=l,l=[];++c<e;)s&&s[c].run();c=-1,e=l.length}s=null,u=!1,function(t){if(r===clearTimeout)return clearTimeout(t);if((r===a||!r)&&clearTimeout)return r=clearTimeout,clearTimeout(t);try{return r(t)}catch(e){try{return r.call(null,t)}catch(e){return r.call(this,t)}}}(t)}}function p(t,e){this.fun=t,this.array=e}function d(){}n.nextTick=function(t){var e=new Array(arguments.length-1);if(arguments.length>1)for(var r=1;r<arguments.length;r++)e[r-1]=arguments[r];l.push(new p(t,e)),1!==l.length||u||o(h)},p.prototype.run=function(){this.fun.apply(null,this.array)},n.title=\\\"browser\\\",n.browser=!0,n.env={},n.argv=[],n.version=\\\"\\\",n.versions={},n.on=d,n.addListener=d,n.once=d,n.off=d,n.removeListener=d,n.removeAllListeners=d,n.emit=d,n.prependListener=d,n.prependOnceListener=d,n.listeners=function(t){return[]},n.binding=function(t){throw new Error(\\\"process.binding is not supported\\\")},n.cwd=function(){return\\\"/\\\"},n.chdir=function(t){throw new Error(\\\"process.chdir is not supported\\\")},n.umask=function(){return 0}},5877:function(t,e,r){for(var n=r(9748),i=\\\"undefined\\\"==typeof window?r.g:window,a=[\\\"moz\\\",\\\"webkit\\\"],o=\\\"AnimationFrame\\\",s=i[\\\"request\\\"+o],l=i[\\\"cancel\\\"+o]||i[\\\"cancelRequest\\\"+o],u=0;!s&&u<a.length;u++)s=i[a[u]+\\\"Request\\\"+o],l=i[a[u]+\\\"Cancel\\\"+o]||i[a[u]+\\\"CancelRequest\\\"+o];if(!s||!l){var c=0,f=0,h=[];s=function(t){if(0===h.length){var e=n(),r=Math.max(0,16.666666666666668-(e-c));c=r+e,setTimeout((function(){var t=h.slice(0);h.length=0;for(var e=0;e<t.length;e++)if(!t[e].cancelled)try{t[e].callback(c)}catch(t){setTimeout((function(){throw t}),0)}}),Math.round(r))}return h.push({handle:++f,callback:t,cancelled:!1}),f},l=function(t){for(var e=0;e<h.length;e++)h[e].handle===t&&(h[e].cancelled=!0)}}t.exports=function(t){return s.call(i,t)},t.exports.cancel=function(){l.apply(i,arguments)},t.exports.polyfill=function(t){t||(t=i),t.requestAnimationFrame=s,t.cancelAnimationFrame=l}},3593:function(t,e,r){\\\"use strict\\\";var n=r(21527),i=r(25075),a=r(93447),o=r(71299),s=r(56131),l=r(30120),u=r(57060),c=u.float32,f=u.fract32;t.exports=function(t,e){if(\\\"function\\\"==typeof t?(e||(e={}),e.regl=t):e=t,e.length&&(e.positions=e),!(t=e.regl).hasExtension(\\\"ANGLE_instanced_arrays\\\"))throw Error(\\\"regl-error2d: `ANGLE_instanced_arrays` extension should be enabled\\\");var r,u,p,d,v,g,y=t._gl,m={color:\\\"black\\\",capSize:5,lineWidth:1,opacity:1,viewport:null,range:null,offset:0,count:0,bounds:null,positions:[],errors:[]},x=[];return d=t.buffer({usage:\\\"dynamic\\\",type:\\\"uint8\\\",data:new Uint8Array(0)}),u=t.buffer({usage:\\\"dynamic\\\",type:\\\"float\\\",data:new Uint8Array(0)}),p=t.buffer({usage:\\\"dynamic\\\",type:\\\"float\\\",data:new Uint8Array(0)}),v=t.buffer({usage:\\\"dynamic\\\",type:\\\"float\\\",data:new Uint8Array(0)}),g=t.buffer({usage:\\\"static\\\",type:\\\"float\\\",data:h}),T(e),r=t({vert:\\\"\\\\n\\\\t\\\\tprecision highp float;\\\\n\\\\n\\\\t\\\\tattribute vec2 position, positionFract;\\\\n\\\\t\\\\tattribute vec4 error;\\\\n\\\\t\\\\tattribute vec4 color;\\\\n\\\\n\\\\t\\\\tattribute vec2 direction, lineOffset, capOffset;\\\\n\\\\n\\\\t\\\\tuniform vec4 viewport;\\\\n\\\\t\\\\tuniform float lineWidth, capSize;\\\\n\\\\t\\\\tuniform vec2 scale, scaleFract, translate, translateFract;\\\\n\\\\n\\\\t\\\\tvarying vec4 fragColor;\\\\n\\\\n\\\\t\\\\tvoid main() {\\\\n\\\\t\\\\t\\\\tfragColor = color / 255.;\\\\n\\\\n\\\\t\\\\t\\\\tvec2 pixelOffset = lineWidth * lineOffset + (capSize + lineWidth) * capOffset;\\\\n\\\\n\\\\t\\\\t\\\\tvec2 dxy = -step(.5, direction.xy) * error.xz + step(direction.xy, vec2(-.5)) * error.yw;\\\\n\\\\n\\\\t\\\\t\\\\tvec2 position = position + dxy;\\\\n\\\\n\\\\t\\\\t\\\\tvec2 pos = (position + translate) * scale\\\\n\\\\t\\\\t\\\\t\\\\t+ (positionFract + translateFract) * scale\\\\n\\\\t\\\\t\\\\t\\\\t+ (position + translate) * scaleFract\\\\n\\\\t\\\\t\\\\t\\\\t+ (positionFract + translateFract) * scaleFract;\\\\n\\\\n\\\\t\\\\t\\\\tpos += pixelOffset / viewport.zw;\\\\n\\\\n\\\\t\\\\t\\\\tgl_Position = vec4(pos * 2. - 1., 0, 1);\\\\n\\\\t\\\\t}\\\\n\\\\t\\\\t\\\",frag:\\\"\\\\n\\\\t\\\\tprecision highp float;\\\\n\\\\n\\\\t\\\\tvarying vec4 fragColor;\\\\n\\\\n\\\\t\\\\tuniform float opacity;\\\\n\\\\n\\\\t\\\\tvoid main() {\\\\n\\\\t\\\\t\\\\tgl_FragColor = fragColor;\\\\n\\\\t\\\\t\\\\tgl_FragColor.a *= opacity;\\\\n\\\\t\\\\t}\\\\n\\\\t\\\\t\\\",uniforms:{range:t.prop(\\\"range\\\"),lineWidth:t.prop(\\\"lineWidth\\\"),capSize:t.prop(\\\"capSize\\\"),opacity:t.prop(\\\"opacity\\\"),scale:t.prop(\\\"scale\\\"),translate:t.prop(\\\"translate\\\"),scaleFract:t.prop(\\\"scaleFract\\\"),translateFract:t.prop(\\\"translateFract\\\"),viewport:function(t,e){return[e.viewport.x,e.viewport.y,t.viewportWidth,t.viewportHeight]}},attributes:{color:{buffer:d,offset:function(t,e){return 4*e.offset},divisor:1},position:{buffer:u,offset:function(t,e){return 8*e.offset},divisor:1},positionFract:{buffer:p,offset:function(t,e){return 8*e.offset},divisor:1},error:{buffer:v,offset:function(t,e){return 16*e.offset},divisor:1},direction:{buffer:g,stride:24,offset:0},lineOffset:{buffer:g,stride:24,offset:8},capOffset:{buffer:g,stride:24,offset:16}},primitive:\\\"triangles\\\",blend:{enable:!0,color:[0,0,0,0],equation:{rgb:\\\"add\\\",alpha:\\\"add\\\"},func:{srcRGB:\\\"src alpha\\\",dstRGB:\\\"one minus src alpha\\\",srcAlpha:\\\"one minus dst alpha\\\",dstAlpha:\\\"one\\\"}},depth:{enable:!1},scissor:{enable:!0,box:t.prop(\\\"viewport\\\")},viewport:t.prop(\\\"viewport\\\"),stencil:!1,instances:t.prop(\\\"count\\\"),count:h.length}),s(b,{update:T,draw:_,destroy:k,regl:t,gl:y,canvas:y.canvas,groups:x}),b;function b(t){t?T(t):null===t&&k(),_()}function _(e){if(\\\"number\\\"==typeof e)return w(e);e&&!Array.isArray(e)&&(e=[e]),t._refresh(),x.forEach((function(t,r){t&&(e&&(e[r]?t.draw=!0:t.draw=!1),t.draw?w(r):t.draw=!0)}))}function w(t){\\\"number\\\"==typeof t&&(t=x[t]),null!=t&&t&&t.count&&t.color&&t.opacity&&t.positions&&t.positions.length>1&&(t.scaleRatio=[t.scale[0]*t.viewport.width,t.scale[1]*t.viewport.height],r(t),t.after&&t.after(t))}function T(t){if(t){null!=t.length?\\\"number\\\"==typeof t[0]&&(t=[{positions:t}]):Array.isArray(t)||(t=[t]);var e=0,r=0;if(b.groups=x=t.map((function(t,u){var c=x[u];return t?(\\\"function\\\"==typeof t?t={after:t}:\\\"number\\\"==typeof t[0]&&(t={positions:t}),t=o(t,{color:\\\"color colors fill\\\",capSize:\\\"capSize cap capsize cap-size\\\",lineWidth:\\\"lineWidth line-width width line thickness\\\",opacity:\\\"opacity alpha\\\",range:\\\"range dataBox\\\",viewport:\\\"viewport viewBox\\\",errors:\\\"errors error\\\",positions:\\\"positions position data points\\\"}),c||(x[u]=c={id:u,scale:null,translate:null,scaleFract:null,translateFract:null,draw:!0},t=s({},m,t)),a(c,t,[{lineWidth:function(t){return.5*+t},capSize:function(t){return.5*+t},opacity:parseFloat,errors:function(t){return t=l(t),r+=t.length,t},positions:function(t,r){return t=l(t,\\\"float64\\\"),r.count=Math.floor(t.length/2),r.bounds=n(t,2),r.offset=e,e+=r.count,t}},{color:function(t,e){var r=e.count;if(t||(t=\\\"transparent\\\"),!Array.isArray(t)||\\\"number\\\"==typeof t[0]){var n=t;t=Array(r);for(var a=0;a<r;a++)t[a]=n}if(t.length<r)throw Error(\\\"Not enough colors\\\");for(var o=new Uint8Array(4*r),s=0;s<r;s++){var l=i(t[s],\\\"uint8\\\");o.set(l,4*s)}return o},range:function(t,e,r){var n=e.bounds;return t||(t=n),e.scale=[1/(t[2]-t[0]),1/(t[3]-t[1])],e.translate=[-t[0],-t[1]],e.scaleFract=f(e.scale),e.translateFract=f(e.translate),t},viewport:function(t){var e;return Array.isArray(t)?e={x:t[0],y:t[1],width:t[2]-t[0],height:t[3]-t[1]}:t?(e={x:t.x||t.left||0,y:t.y||t.top||0},t.right?e.width=t.right-e.x:e.width=t.w||t.width||0,t.bottom?e.height=t.bottom-e.y:e.height=t.h||t.height||0):e={x:0,y:0,width:y.drawingBufferWidth,height:y.drawingBufferHeight},e}}]),c):c})),e||r){var h=x.reduce((function(t,e,r){return t+(e?e.count:0)}),0),g=new Float64Array(2*h),_=new Uint8Array(4*h),w=new Float32Array(4*h);x.forEach((function(t,e){if(t){var r=t.positions,n=t.count,i=t.offset,a=t.color,o=t.errors;n&&(_.set(a,4*i),w.set(o,4*i),g.set(r,2*i))}}));var T=c(g);u(T);var k=f(g,T);p(k),d(_),v(w)}}}function k(){u.destroy(),p.destroy(),d.destroy(),v.destroy(),g.destroy()}};var h=[[1,0,0,1,0,0],[1,0,0,-1,0,0],[-1,0,0,-1,0,0],[-1,0,0,-1,0,0],[-1,0,0,1,0,0],[1,0,0,1,0,0],[1,0,-1,0,0,1],[1,0,-1,0,0,-1],[1,0,1,0,0,-1],[1,0,1,0,0,-1],[1,0,1,0,0,1],[1,0,-1,0,0,1],[-1,0,-1,0,0,1],[-1,0,-1,0,0,-1],[-1,0,1,0,0,-1],[-1,0,1,0,0,-1],[-1,0,1,0,0,1],[-1,0,-1,0,0,1],[0,1,1,0,0,0],[0,1,-1,0,0,0],[0,-1,-1,0,0,0],[0,-1,-1,0,0,0],[0,1,1,0,0,0],[0,-1,1,0,0,0],[0,1,0,-1,1,0],[0,1,0,-1,-1,0],[0,1,0,1,-1,0],[0,1,0,1,1,0],[0,1,0,-1,1,0],[0,1,0,1,-1,0],[0,-1,0,-1,1,0],[0,-1,0,-1,-1,0],[0,-1,0,1,-1,0],[0,-1,0,1,1,0],[0,-1,0,-1,1,0],[0,-1,0,1,-1,0]]},46075:function(t,e,r){\\\"use strict\\\";var n=r(25075),i=r(21527),a=r(56131),o=r(56068),s=r(71299),l=r(30120),u=r(11474),c=r(54),f=r(57060),h=f.float32,p=f.fract32,d=r(83522),v=r(18863),g=r(6851);function y(t,e){if(!(this instanceof y))return new y(t,e);if(\\\"function\\\"==typeof t?(e||(e={}),e.regl=t):e=t,e.length&&(e.positions=e),!(t=e.regl).hasExtension(\\\"ANGLE_instanced_arrays\\\"))throw Error(\\\"regl-error2d: `ANGLE_instanced_arrays` extension should be enabled\\\");this.gl=t._gl,this.regl=t,this.passes=[],this.shaders=y.shaders.has(t)?y.shaders.get(t):y.shaders.set(t,y.createShaders(t)).get(t),this.update(e)}t.exports=y,y.dashMult=2,y.maxPatternLength=256,y.precisionThreshold=3e6,y.maxPoints=1e4,y.maxLines=2048,y.shaders=new d,y.createShaders=function(t){var e,r=t.buffer({usage:\\\"static\\\",type:\\\"float\\\",data:[0,1,0,0,1,1,1,0]}),n={primitive:\\\"triangle strip\\\",instances:t.prop(\\\"count\\\"),count:4,offset:0,uniforms:{miterMode:function(t,e){return\\\"round\\\"===e.join?2:1},miterLimit:t.prop(\\\"miterLimit\\\"),scale:t.prop(\\\"scale\\\"),scaleFract:t.prop(\\\"scaleFract\\\"),translateFract:t.prop(\\\"translateFract\\\"),translate:t.prop(\\\"translate\\\"),thickness:t.prop(\\\"thickness\\\"),dashTexture:t.prop(\\\"dashTexture\\\"),opacity:t.prop(\\\"opacity\\\"),pixelRatio:t.context(\\\"pixelRatio\\\"),id:t.prop(\\\"id\\\"),dashLength:t.prop(\\\"dashLength\\\"),viewport:function(t,e){return[e.viewport.x,e.viewport.y,t.viewportWidth,t.viewportHeight]},depth:t.prop(\\\"depth\\\")},blend:{enable:!0,color:[0,0,0,0],equation:{rgb:\\\"add\\\",alpha:\\\"add\\\"},func:{srcRGB:\\\"src alpha\\\",dstRGB:\\\"one minus src alpha\\\",srcAlpha:\\\"one minus dst alpha\\\",dstAlpha:\\\"one\\\"}},depth:{enable:function(t,e){return!e.overlay}},stencil:{enable:!1},scissor:{enable:!0,box:t.prop(\\\"viewport\\\")},viewport:t.prop(\\\"viewport\\\")},i=t(a({vert:o([\\\"precision highp float;\\\\n#define GLSLIFY 1\\\\n\\\\nattribute vec2 aCoord, bCoord, aCoordFract, bCoordFract;\\\\nattribute vec4 color;\\\\nattribute float lineEnd, lineTop;\\\\n\\\\nuniform vec2 scale, scaleFract, translate, translateFract;\\\\nuniform float thickness, pixelRatio, id, depth;\\\\nuniform vec4 viewport;\\\\n\\\\nvarying vec4 fragColor;\\\\nvarying vec2 tangent;\\\\n\\\\nvec2 project(vec2 position, vec2 positionFract, vec2 scale, vec2 scaleFract, vec2 translate, vec2 translateFract) {\\\\n\\\\t// the order is important\\\\n\\\\treturn position * scale + translate\\\\n       + positionFract * scale + translateFract\\\\n       + position * scaleFract\\\\n       + positionFract * scaleFract;\\\\n}\\\\n\\\\nvoid main() {\\\\n\\\\tfloat lineStart = 1. - lineEnd;\\\\n\\\\tfloat lineOffset = lineTop * 2. - 1.;\\\\n\\\\n\\\\tvec2 diff = (bCoord + bCoordFract - aCoord - aCoordFract);\\\\n\\\\ttangent = normalize(diff * scale * viewport.zw);\\\\n\\\\tvec2 normal = vec2(-tangent.y, tangent.x);\\\\n\\\\n\\\\tvec2 position = project(aCoord, aCoordFract, scale, scaleFract, translate, translateFract) * lineStart\\\\n\\\\t\\\\t+ project(bCoord, bCoordFract, scale, scaleFract, translate, translateFract) * lineEnd\\\\n\\\\n\\\\t\\\\t+ thickness * normal * .5 * lineOffset / viewport.zw;\\\\n\\\\n\\\\tgl_Position = vec4(position * 2.0 - 1.0, depth, 1);\\\\n\\\\n\\\\tfragColor = color / 255.;\\\\n}\\\\n\\\"]),frag:o([\\\"precision highp float;\\\\n#define GLSLIFY 1\\\\n\\\\nuniform float dashLength, pixelRatio, thickness, opacity, id;\\\\nuniform sampler2D dashTexture;\\\\n\\\\nvarying vec4 fragColor;\\\\nvarying vec2 tangent;\\\\n\\\\nvoid main() {\\\\n\\\\tfloat alpha = 1.;\\\\n\\\\n\\\\tfloat t = fract(dot(tangent, gl_FragCoord.xy) / dashLength) * .5 + .25;\\\\n\\\\tfloat dash = texture2D(dashTexture, vec2(t, .5)).r;\\\\n\\\\n\\\\tgl_FragColor = fragColor;\\\\n\\\\tgl_FragColor.a *= alpha * opacity * dash;\\\\n}\\\\n\\\"]),attributes:{lineEnd:{buffer:r,divisor:0,stride:8,offset:0},lineTop:{buffer:r,divisor:0,stride:8,offset:4},aCoord:{buffer:t.prop(\\\"positionBuffer\\\"),stride:8,offset:8,divisor:1},bCoord:{buffer:t.prop(\\\"positionBuffer\\\"),stride:8,offset:16,divisor:1},aCoordFract:{buffer:t.prop(\\\"positionFractBuffer\\\"),stride:8,offset:8,divisor:1},bCoordFract:{buffer:t.prop(\\\"positionFractBuffer\\\"),stride:8,offset:16,divisor:1},color:{buffer:t.prop(\\\"colorBuffer\\\"),stride:4,offset:0,divisor:1}}},n));try{e=t(a({cull:{enable:!0,face:\\\"back\\\"},vert:o([\\\"precision highp float;\\\\n#define GLSLIFY 1\\\\n\\\\nattribute vec2 aCoord, bCoord, nextCoord, prevCoord;\\\\nattribute vec4 aColor, bColor;\\\\nattribute float lineEnd, lineTop;\\\\n\\\\nuniform vec2 scale, translate;\\\\nuniform float thickness, pixelRatio, id, depth;\\\\nuniform vec4 viewport;\\\\nuniform float miterLimit, miterMode;\\\\n\\\\nvarying vec4 fragColor;\\\\nvarying vec4 startCutoff, endCutoff;\\\\nvarying vec2 tangent;\\\\nvarying vec2 startCoord, endCoord;\\\\nvarying float enableStartMiter, enableEndMiter;\\\\n\\\\nconst float REVERSE_THRESHOLD = -.875;\\\\nconst float MIN_DIFF = 1e-6;\\\\n\\\\n// TODO: possible optimizations: avoid overcalculating all for vertices and calc just one instead\\\\n// TODO: precalculate dot products, normalize things beforehead etc.\\\\n// TODO: refactor to rectangular algorithm\\\\n\\\\nfloat distToLine(vec2 p, vec2 a, vec2 b) {\\\\n\\\\tvec2 diff = b - a;\\\\n\\\\tvec2 perp = normalize(vec2(-diff.y, diff.x));\\\\n\\\\treturn dot(p - a, perp);\\\\n}\\\\n\\\\nbool isNaN( float val ){\\\\n  return ( val < 0.0 || 0.0 < val || val == 0.0 ) ? false : true;\\\\n}\\\\n\\\\nvoid main() {\\\\n\\\\tvec2 aCoord = aCoord, bCoord = bCoord, prevCoord = prevCoord, nextCoord = nextCoord;\\\\n\\\\n  vec2 adjustedScale;\\\\n  adjustedScale.x = (abs(scale.x) < MIN_DIFF) ? MIN_DIFF : scale.x;\\\\n  adjustedScale.y = (abs(scale.y) < MIN_DIFF) ? MIN_DIFF : scale.y;\\\\n\\\\n  vec2 scaleRatio = adjustedScale * viewport.zw;\\\\n\\\\tvec2 normalWidth = thickness / scaleRatio;\\\\n\\\\n\\\\tfloat lineStart = 1. - lineEnd;\\\\n\\\\tfloat lineBot = 1. - lineTop;\\\\n\\\\n\\\\tfragColor = (lineStart * aColor + lineEnd * bColor) / 255.;\\\\n\\\\n\\\\tif (isNaN(aCoord.x) || isNaN(aCoord.y) || isNaN(bCoord.x) || isNaN(bCoord.y)) return;\\\\n\\\\n\\\\tif (aCoord == prevCoord) prevCoord = aCoord + normalize(bCoord - aCoord);\\\\n\\\\tif (bCoord == nextCoord) nextCoord = bCoord - normalize(bCoord - aCoord);\\\\n\\\\n\\\\tvec2 prevDiff = aCoord - prevCoord;\\\\n\\\\tvec2 currDiff = bCoord - aCoord;\\\\n\\\\tvec2 nextDiff = nextCoord - bCoord;\\\\n\\\\n\\\\tvec2 prevTangent = normalize(prevDiff * scaleRatio);\\\\n\\\\tvec2 currTangent = normalize(currDiff * scaleRatio);\\\\n\\\\tvec2 nextTangent = normalize(nextDiff * scaleRatio);\\\\n\\\\n\\\\tvec2 prevNormal = vec2(-prevTangent.y, prevTangent.x);\\\\n\\\\tvec2 currNormal = vec2(-currTangent.y, currTangent.x);\\\\n\\\\tvec2 nextNormal = vec2(-nextTangent.y, nextTangent.x);\\\\n\\\\n\\\\tvec2 startJoinDirection = normalize(prevTangent - currTangent);\\\\n\\\\tvec2 endJoinDirection = normalize(currTangent - nextTangent);\\\\n\\\\n\\\\t// collapsed/unidirectional segment cases\\\\n\\\\t// FIXME: there should be more elegant solution\\\\n\\\\tvec2 prevTanDiff = abs(prevTangent - currTangent);\\\\n\\\\tvec2 nextTanDiff = abs(nextTangent - currTangent);\\\\n\\\\tif (max(prevTanDiff.x, prevTanDiff.y) < MIN_DIFF) {\\\\n\\\\t\\\\tstartJoinDirection = currNormal;\\\\n\\\\t}\\\\n\\\\tif (max(nextTanDiff.x, nextTanDiff.y) < MIN_DIFF) {\\\\n\\\\t\\\\tendJoinDirection = currNormal;\\\\n\\\\t}\\\\n\\\\tif (aCoord == bCoord) {\\\\n\\\\t\\\\tendJoinDirection = startJoinDirection;\\\\n\\\\t\\\\tcurrNormal = prevNormal;\\\\n\\\\t\\\\tcurrTangent = prevTangent;\\\\n\\\\t}\\\\n\\\\n\\\\ttangent = currTangent;\\\\n\\\\n\\\\t//calculate join shifts relative to normals\\\\n\\\\tfloat startJoinShift = dot(currNormal, startJoinDirection);\\\\n\\\\tfloat endJoinShift = dot(currNormal, endJoinDirection);\\\\n\\\\n\\\\tfloat startMiterRatio = abs(1. / startJoinShift);\\\\n\\\\tfloat endMiterRatio = abs(1. / endJoinShift);\\\\n\\\\n\\\\tvec2 startJoin = startJoinDirection * startMiterRatio;\\\\n\\\\tvec2 endJoin = endJoinDirection * endMiterRatio;\\\\n\\\\n\\\\tvec2 startTopJoin, startBotJoin, endTopJoin, endBotJoin;\\\\n\\\\tstartTopJoin = sign(startJoinShift) * startJoin * .5;\\\\n\\\\tstartBotJoin = -startTopJoin;\\\\n\\\\n\\\\tendTopJoin = sign(endJoinShift) * endJoin * .5;\\\\n\\\\tendBotJoin = -endTopJoin;\\\\n\\\\n\\\\tvec2 aTopCoord = aCoord + normalWidth * startTopJoin;\\\\n\\\\tvec2 bTopCoord = bCoord + normalWidth * endTopJoin;\\\\n\\\\tvec2 aBotCoord = aCoord + normalWidth * startBotJoin;\\\\n\\\\tvec2 bBotCoord = bCoord + normalWidth * endBotJoin;\\\\n\\\\n\\\\t//miter anti-clipping\\\\n\\\\tfloat baClipping = distToLine(bCoord, aCoord, aBotCoord) / dot(normalize(normalWidth * endBotJoin), normalize(normalWidth.yx * vec2(-startBotJoin.y, startBotJoin.x)));\\\\n\\\\tfloat abClipping = distToLine(aCoord, bCoord, bTopCoord) / dot(normalize(normalWidth * startBotJoin), normalize(normalWidth.yx * vec2(-endBotJoin.y, endBotJoin.x)));\\\\n\\\\n\\\\t//prevent close to reverse direction switch\\\\n\\\\tbool prevReverse = dot(currTangent, prevTangent) <= REVERSE_THRESHOLD && abs(dot(currTangent, prevNormal)) * min(length(prevDiff), length(currDiff)) <  length(normalWidth * currNormal);\\\\n\\\\tbool nextReverse = dot(currTangent, nextTangent) <= REVERSE_THRESHOLD && abs(dot(currTangent, nextNormal)) * min(length(nextDiff), length(currDiff)) <  length(normalWidth * currNormal);\\\\n\\\\n\\\\tif (prevReverse) {\\\\n\\\\t\\\\t//make join rectangular\\\\n\\\\t\\\\tvec2 miterShift = normalWidth * startJoinDirection * miterLimit * .5;\\\\n\\\\t\\\\tfloat normalAdjust = 1. - min(miterLimit / startMiterRatio, 1.);\\\\n\\\\t\\\\taBotCoord = aCoord + miterShift - normalAdjust * normalWidth * currNormal * .5;\\\\n\\\\t\\\\taTopCoord = aCoord + miterShift + normalAdjust * normalWidth * currNormal * .5;\\\\n\\\\t}\\\\n\\\\telse if (!nextReverse && baClipping > 0. && baClipping < length(normalWidth * endBotJoin)) {\\\\n\\\\t\\\\t//handle miter clipping\\\\n\\\\t\\\\tbTopCoord -= normalWidth * endTopJoin;\\\\n\\\\t\\\\tbTopCoord += normalize(endTopJoin * normalWidth) * baClipping;\\\\n\\\\t}\\\\n\\\\n\\\\tif (nextReverse) {\\\\n\\\\t\\\\t//make join rectangular\\\\n\\\\t\\\\tvec2 miterShift = normalWidth * endJoinDirection * miterLimit * .5;\\\\n\\\\t\\\\tfloat normalAdjust = 1. - min(miterLimit / endMiterRatio, 1.);\\\\n\\\\t\\\\tbBotCoord = bCoord + miterShift - normalAdjust * normalWidth * currNormal * .5;\\\\n\\\\t\\\\tbTopCoord = bCoord + miterShift + normalAdjust * normalWidth * currNormal * .5;\\\\n\\\\t}\\\\n\\\\telse if (!prevReverse && abClipping > 0. && abClipping < length(normalWidth * startBotJoin)) {\\\\n\\\\t\\\\t//handle miter clipping\\\\n\\\\t\\\\taBotCoord -= normalWidth * startBotJoin;\\\\n\\\\t\\\\taBotCoord += normalize(startBotJoin * normalWidth) * abClipping;\\\\n\\\\t}\\\\n\\\\n\\\\tvec2 aTopPosition = (aTopCoord) * adjustedScale + translate;\\\\n\\\\tvec2 aBotPosition = (aBotCoord) * adjustedScale + translate;\\\\n\\\\n\\\\tvec2 bTopPosition = (bTopCoord) * adjustedScale + translate;\\\\n\\\\tvec2 bBotPosition = (bBotCoord) * adjustedScale + translate;\\\\n\\\\n\\\\t//position is normalized 0..1 coord on the screen\\\\n\\\\tvec2 position = (aTopPosition * lineTop + aBotPosition * lineBot) * lineStart + (bTopPosition * lineTop + bBotPosition * lineBot) * lineEnd;\\\\n\\\\n\\\\tstartCoord = aCoord * scaleRatio + translate * viewport.zw + viewport.xy;\\\\n\\\\tendCoord = bCoord * scaleRatio + translate * viewport.zw + viewport.xy;\\\\n\\\\n\\\\tgl_Position = vec4(position  * 2.0 - 1.0, depth, 1);\\\\n\\\\n\\\\tenableStartMiter = step(dot(currTangent, prevTangent), .5);\\\\n\\\\tenableEndMiter = step(dot(currTangent, nextTangent), .5);\\\\n\\\\n\\\\t//bevel miter cutoffs\\\\n\\\\tif (miterMode == 1.) {\\\\n\\\\t\\\\tif (enableStartMiter == 1.) {\\\\n\\\\t\\\\t\\\\tvec2 startMiterWidth = vec2(startJoinDirection) * thickness * miterLimit * .5;\\\\n\\\\t\\\\t\\\\tstartCutoff = vec4(aCoord, aCoord);\\\\n\\\\t\\\\t\\\\tstartCutoff.zw += vec2(-startJoinDirection.y, startJoinDirection.x) / scaleRatio;\\\\n\\\\t\\\\t\\\\tstartCutoff = startCutoff * scaleRatio.xyxy + translate.xyxy * viewport.zwzw;\\\\n\\\\t\\\\t\\\\tstartCutoff += viewport.xyxy;\\\\n\\\\t\\\\t\\\\tstartCutoff += startMiterWidth.xyxy;\\\\n\\\\t\\\\t}\\\\n\\\\n\\\\t\\\\tif (enableEndMiter == 1.) {\\\\n\\\\t\\\\t\\\\tvec2 endMiterWidth = vec2(endJoinDirection) * thickness * miterLimit * .5;\\\\n\\\\t\\\\t\\\\tendCutoff = vec4(bCoord, bCoord);\\\\n\\\\t\\\\t\\\\tendCutoff.zw += vec2(-endJoinDirection.y, endJoinDirection.x)  / scaleRatio;\\\\n\\\\t\\\\t\\\\tendCutoff = endCutoff * scaleRatio.xyxy + translate.xyxy * viewport.zwzw;\\\\n\\\\t\\\\t\\\\tendCutoff += viewport.xyxy;\\\\n\\\\t\\\\t\\\\tendCutoff += endMiterWidth.xyxy;\\\\n\\\\t\\\\t}\\\\n\\\\t}\\\\n\\\\n\\\\t//round miter cutoffs\\\\n\\\\telse if (miterMode == 2.) {\\\\n\\\\t\\\\tif (enableStartMiter == 1.) {\\\\n\\\\t\\\\t\\\\tvec2 startMiterWidth = vec2(startJoinDirection) * thickness * abs(dot(startJoinDirection, currNormal)) * .5;\\\\n\\\\t\\\\t\\\\tstartCutoff = vec4(aCoord, aCoord);\\\\n\\\\t\\\\t\\\\tstartCutoff.zw += vec2(-startJoinDirection.y, startJoinDirection.x) / scaleRatio;\\\\n\\\\t\\\\t\\\\tstartCutoff = startCutoff * scaleRatio.xyxy + translate.xyxy * viewport.zwzw;\\\\n\\\\t\\\\t\\\\tstartCutoff += viewport.xyxy;\\\\n\\\\t\\\\t\\\\tstartCutoff += startMiterWidth.xyxy;\\\\n\\\\t\\\\t}\\\\n\\\\n\\\\t\\\\tif (enableEndMiter == 1.) {\\\\n\\\\t\\\\t\\\\tvec2 endMiterWidth = vec2(endJoinDirection) * thickness * abs(dot(endJoinDirection, currNormal)) * .5;\\\\n\\\\t\\\\t\\\\tendCutoff = vec4(bCoord, bCoord);\\\\n\\\\t\\\\t\\\\tendCutoff.zw += vec2(-endJoinDirection.y, endJoinDirection.x)  / scaleRatio;\\\\n\\\\t\\\\t\\\\tendCutoff = endCutoff * scaleRatio.xyxy + translate.xyxy * viewport.zwzw;\\\\n\\\\t\\\\t\\\\tendCutoff += viewport.xyxy;\\\\n\\\\t\\\\t\\\\tendCutoff += endMiterWidth.xyxy;\\\\n\\\\t\\\\t}\\\\n\\\\t}\\\\n}\\\\n\\\"]),frag:o([\\\"precision highp float;\\\\n#define GLSLIFY 1\\\\n\\\\nuniform float dashLength, pixelRatio, thickness, opacity, id, miterMode;\\\\nuniform sampler2D dashTexture;\\\\n\\\\nvarying vec4 fragColor;\\\\nvarying vec2 tangent;\\\\nvarying vec4 startCutoff, endCutoff;\\\\nvarying vec2 startCoord, endCoord;\\\\nvarying float enableStartMiter, enableEndMiter;\\\\n\\\\nfloat distToLine(vec2 p, vec2 a, vec2 b) {\\\\n\\\\tvec2 diff = b - a;\\\\n\\\\tvec2 perp = normalize(vec2(-diff.y, diff.x));\\\\n\\\\treturn dot(p - a, perp);\\\\n}\\\\n\\\\nvoid main() {\\\\n\\\\tfloat alpha = 1., distToStart, distToEnd;\\\\n\\\\tfloat cutoff = thickness * .5;\\\\n\\\\n\\\\t//bevel miter\\\\n\\\\tif (miterMode == 1.) {\\\\n\\\\t\\\\tif (enableStartMiter == 1.) {\\\\n\\\\t\\\\t\\\\tdistToStart = distToLine(gl_FragCoord.xy, startCutoff.xy, startCutoff.zw);\\\\n\\\\t\\\\t\\\\tif (distToStart < -1.) {\\\\n\\\\t\\\\t\\\\t\\\\tdiscard;\\\\n\\\\t\\\\t\\\\t\\\\treturn;\\\\n\\\\t\\\\t\\\\t}\\\\n\\\\t\\\\t\\\\talpha *= min(max(distToStart + 1., 0.), 1.);\\\\n\\\\t\\\\t}\\\\n\\\\n\\\\t\\\\tif (enableEndMiter == 1.) {\\\\n\\\\t\\\\t\\\\tdistToEnd = distToLine(gl_FragCoord.xy, endCutoff.xy, endCutoff.zw);\\\\n\\\\t\\\\t\\\\tif (distToEnd < -1.) {\\\\n\\\\t\\\\t\\\\t\\\\tdiscard;\\\\n\\\\t\\\\t\\\\t\\\\treturn;\\\\n\\\\t\\\\t\\\\t}\\\\n\\\\t\\\\t\\\\talpha *= min(max(distToEnd + 1., 0.), 1.);\\\\n\\\\t\\\\t}\\\\n\\\\t}\\\\n\\\\n\\\\t// round miter\\\\n\\\\telse if (miterMode == 2.) {\\\\n\\\\t\\\\tif (enableStartMiter == 1.) {\\\\n\\\\t\\\\t\\\\tdistToStart = distToLine(gl_FragCoord.xy, startCutoff.xy, startCutoff.zw);\\\\n\\\\t\\\\t\\\\tif (distToStart < 0.) {\\\\n\\\\t\\\\t\\\\t\\\\tfloat radius = length(gl_FragCoord.xy - startCoord);\\\\n\\\\n\\\\t\\\\t\\\\t\\\\tif(radius > cutoff + .5) {\\\\n\\\\t\\\\t\\\\t\\\\t\\\\tdiscard;\\\\n\\\\t\\\\t\\\\t\\\\t\\\\treturn;\\\\n\\\\t\\\\t\\\\t\\\\t}\\\\n\\\\n\\\\t\\\\t\\\\t\\\\talpha -= smoothstep(cutoff - .5, cutoff + .5, radius);\\\\n\\\\t\\\\t\\\\t}\\\\n\\\\t\\\\t}\\\\n\\\\n\\\\t\\\\tif (enableEndMiter == 1.) {\\\\n\\\\t\\\\t\\\\tdistToEnd = distToLine(gl_FragCoord.xy, endCutoff.xy, endCutoff.zw);\\\\n\\\\t\\\\t\\\\tif (distToEnd < 0.) {\\\\n\\\\t\\\\t\\\\t\\\\tfloat radius = length(gl_FragCoord.xy - endCoord);\\\\n\\\\n\\\\t\\\\t\\\\t\\\\tif(radius > cutoff + .5) {\\\\n\\\\t\\\\t\\\\t\\\\t\\\\tdiscard;\\\\n\\\\t\\\\t\\\\t\\\\t\\\\treturn;\\\\n\\\\t\\\\t\\\\t\\\\t}\\\\n\\\\n\\\\t\\\\t\\\\t\\\\talpha -= smoothstep(cutoff - .5, cutoff + .5, radius);\\\\n\\\\t\\\\t\\\\t}\\\\n\\\\t\\\\t}\\\\n\\\\t}\\\\n\\\\n\\\\tfloat t = fract(dot(tangent, gl_FragCoord.xy) / dashLength) * .5 + .25;\\\\n\\\\tfloat dash = texture2D(dashTexture, vec2(t, .5)).r;\\\\n\\\\n\\\\tgl_FragColor = fragColor;\\\\n\\\\tgl_FragColor.a *= alpha * opacity * dash;\\\\n}\\\\n\\\"]),attributes:{lineEnd:{buffer:r,divisor:0,stride:8,offset:0},lineTop:{buffer:r,divisor:0,stride:8,offset:4},aColor:{buffer:t.prop(\\\"colorBuffer\\\"),stride:4,offset:0,divisor:1},bColor:{buffer:t.prop(\\\"colorBuffer\\\"),stride:4,offset:4,divisor:1},prevCoord:{buffer:t.prop(\\\"positionBuffer\\\"),stride:8,offset:0,divisor:1},aCoord:{buffer:t.prop(\\\"positionBuffer\\\"),stride:8,offset:8,divisor:1},bCoord:{buffer:t.prop(\\\"positionBuffer\\\"),stride:8,offset:16,divisor:1},nextCoord:{buffer:t.prop(\\\"positionBuffer\\\"),stride:8,offset:24,divisor:1}}},n))}catch(t){e=i}return{fill:t({primitive:\\\"triangle\\\",elements:function(t,e){return e.triangles},offset:0,vert:o([\\\"precision highp float;\\\\n#define GLSLIFY 1\\\\n\\\\nattribute vec2 position, positionFract;\\\\n\\\\nuniform vec4 color;\\\\nuniform vec2 scale, scaleFract, translate, translateFract;\\\\nuniform float pixelRatio, id;\\\\nuniform vec4 viewport;\\\\nuniform float opacity;\\\\n\\\\nvarying vec4 fragColor;\\\\n\\\\nconst float MAX_LINES = 256.;\\\\n\\\\nvoid main() {\\\\n\\\\tfloat depth = (MAX_LINES - 4. - id) / (MAX_LINES);\\\\n\\\\n\\\\tvec2 position = position * scale + translate\\\\n       + positionFract * scale + translateFract\\\\n       + position * scaleFract\\\\n       + positionFract * scaleFract;\\\\n\\\\n\\\\tgl_Position = vec4(position * 2.0 - 1.0, depth, 1);\\\\n\\\\n\\\\tfragColor = color / 255.;\\\\n\\\\tfragColor.a *= opacity;\\\\n}\\\\n\\\"]),frag:o([\\\"precision highp float;\\\\n#define GLSLIFY 1\\\\n\\\\nvarying vec4 fragColor;\\\\n\\\\nvoid main() {\\\\n\\\\tgl_FragColor = fragColor;\\\\n}\\\\n\\\"]),uniforms:{scale:t.prop(\\\"scale\\\"),color:t.prop(\\\"fill\\\"),scaleFract:t.prop(\\\"scaleFract\\\"),translateFract:t.prop(\\\"translateFract\\\"),translate:t.prop(\\\"translate\\\"),opacity:t.prop(\\\"opacity\\\"),pixelRatio:t.context(\\\"pixelRatio\\\"),id:t.prop(\\\"id\\\"),viewport:function(t,e){return[e.viewport.x,e.viewport.y,t.viewportWidth,t.viewportHeight]}},attributes:{position:{buffer:t.prop(\\\"positionBuffer\\\"),stride:8,offset:8},positionFract:{buffer:t.prop(\\\"positionFractBuffer\\\"),stride:8,offset:8}},blend:n.blend,depth:{enable:!1},scissor:n.scissor,stencil:n.stencil,viewport:n.viewport}),rect:i,miter:e}},y.defaults={dashes:null,join:\\\"miter\\\",miterLimit:1,thickness:10,cap:\\\"square\\\",color:\\\"black\\\",opacity:1,overlay:!1,viewport:null,range:null,close:!1,fill:null},y.prototype.render=function(){for(var t,e=[],r=arguments.length;r--;)e[r]=arguments[r];e.length&&(t=this).update.apply(t,e),this.draw()},y.prototype.draw=function(){for(var t=this,e=[],r=arguments.length;r--;)e[r]=arguments[r];return(e.length?e:this.passes).forEach((function(e,r){var n;if(e&&Array.isArray(e))return(n=t).draw.apply(n,e);\\\"number\\\"==typeof e&&(e=t.passes[e]),e&&e.count>1&&e.opacity&&(t.regl._refresh(),e.fill&&e.triangles&&e.triangles.length>2&&t.shaders.fill(e),e.thickness&&(e.scale[0]*e.viewport.width>y.precisionThreshold||e.scale[1]*e.viewport.height>y.precisionThreshold||\\\"rect\\\"===e.join||!e.join&&(e.thickness<=2||e.count>=y.maxPoints)?t.shaders.rect(e):t.shaders.miter(e)))})),this},y.prototype.update=function(t){var e=this;if(t){null!=t.length?\\\"number\\\"==typeof t[0]&&(t=[{positions:t}]):Array.isArray(t)||(t=[t]);var r=this.regl,o=this.gl;if(t.forEach((function(t,f){var d=e.passes[f];if(void 0!==t)if(null!==t){if(\\\"number\\\"==typeof t[0]&&(t={positions:t}),t=s(t,{positions:\\\"positions points data coords\\\",thickness:\\\"thickness lineWidth lineWidths line-width linewidth width stroke-width strokewidth strokeWidth\\\",join:\\\"lineJoin linejoin join type mode\\\",miterLimit:\\\"miterlimit miterLimit\\\",dashes:\\\"dash dashes dasharray dash-array dashArray\\\",color:\\\"color colour stroke colors colours stroke-color strokeColor\\\",fill:\\\"fill fill-color fillColor\\\",opacity:\\\"alpha opacity\\\",overlay:\\\"overlay crease overlap intersect\\\",close:\\\"closed close closed-path closePath\\\",range:\\\"range dataBox\\\",viewport:\\\"viewport viewBox\\\",hole:\\\"holes hole hollow\\\",splitNull:\\\"splitNull\\\"}),d||(e.passes[f]=d={id:f,scale:null,scaleFract:null,translate:null,translateFract:null,count:0,hole:[],depth:0,dashLength:1,dashTexture:r.texture({channels:1,data:new Uint8Array([255]),width:1,height:1,mag:\\\"linear\\\",min:\\\"linear\\\"}),colorBuffer:r.buffer({usage:\\\"dynamic\\\",type:\\\"uint8\\\",data:new Uint8Array}),positionBuffer:r.buffer({usage:\\\"dynamic\\\",type:\\\"float\\\",data:new Uint8Array}),positionFractBuffer:r.buffer({usage:\\\"dynamic\\\",type:\\\"float\\\",data:new Uint8Array})},t=a({},y.defaults,t)),null!=t.thickness&&(d.thickness=parseFloat(t.thickness)),null!=t.opacity&&(d.opacity=parseFloat(t.opacity)),null!=t.miterLimit&&(d.miterLimit=parseFloat(t.miterLimit)),null!=t.overlay&&(d.overlay=!!t.overlay,f<y.maxLines&&(d.depth=2*(y.maxLines-1-f%y.maxLines)/y.maxLines-1)),null!=t.join&&(d.join=t.join),null!=t.hole&&(d.hole=t.hole),null!=t.fill&&(d.fill=t.fill?n(t.fill,\\\"uint8\\\"):null),null!=t.viewport&&(d.viewport=v(t.viewport)),d.viewport||(d.viewport=v([o.drawingBufferWidth,o.drawingBufferHeight])),null!=t.close&&(d.close=t.close),null===t.positions&&(t.positions=[]),t.positions){var m,x;if(t.positions.x&&t.positions.y){var b=t.positions.x,_=t.positions.y;x=d.count=Math.max(b.length,_.length),m=new Float64Array(2*x);for(var w=0;w<x;w++)m[2*w]=b[w],m[2*w+1]=_[w]}else m=l(t.positions,\\\"float64\\\"),x=d.count=Math.floor(m.length/2);var T=d.bounds=i(m,2);if(d.fill){for(var k=[],A={},M=0,S=0,E=0,L=d.count;S<L;S++){var C=m[2*S],P=m[2*S+1];isNaN(C)||isNaN(P)||null==C||null==P?(C=m[2*M],P=m[2*M+1],A[S]=M):M=S,k[E++]=C,k[E++]=P}if(t.splitNull){d.count-1 in A||(A[d.count]=d.count-1);var O=Object.keys(A).map(Number).sort((function(t,e){return t-e})),I=[],D=0,z=null!=d.hole?d.hole[0]:null;if(null!=z){var R=g(O,(function(t){return t>=z}));(O=O.slice(0,R)).push(z)}for(var F=function(t){var e=k.slice(2*D,2*O[t]).concat(z?k.slice(2*z):[]),r=(d.hole||[]).map((function(e){return e-z+(O[t]-D)})),n=u(e,r);n=n.map((function(e){return e+D+(e+D<O[t]?0:z-O[t])})),I.push.apply(I,n),D=O[t]+1},B=0;B<O.length;B++)F(B);for(var N=0,j=I.length;N<j;N++)null!=A[I[N]]&&(I[N]=A[I[N]]);d.triangles=I}else{for(var U=u(k,d.hole||[]),V=0,H=U.length;V<H;V++)null!=A[U[V]]&&(U[V]=A[U[V]]);d.triangles=U}}var q=new Float64Array(m);c(q,2,T);var G=new Float64Array(2*x+6);d.close?m[0]===m[2*x-2]&&m[1]===m[2*x-1]?(G[0]=q[2*x-4],G[1]=q[2*x-3]):(G[0]=q[2*x-2],G[1]=q[2*x-1]):(G[0]=q[0],G[1]=q[1]),G.set(q,2),d.close?m[0]===m[2*x-2]&&m[1]===m[2*x-1]?(G[2*x+2]=q[2],G[2*x+3]=q[3],d.count-=1):(G[2*x+2]=q[0],G[2*x+3]=q[1],G[2*x+4]=q[2],G[2*x+5]=q[3]):(G[2*x+2]=q[2*x-2],G[2*x+3]=q[2*x-1],G[2*x+4]=q[2*x-2],G[2*x+5]=q[2*x-1]);var Z=h(G);d.positionBuffer(Z);var Y=p(G,Z);d.positionFractBuffer(Y)}if(t.range?d.range=t.range:d.range||(d.range=d.bounds),(t.range||t.positions)&&d.count){var W=d.bounds,X=W[2]-W[0],J=W[3]-W[1],K=d.range[2]-d.range[0],$=d.range[3]-d.range[1];d.scale=[X/K,J/$],d.translate=[-d.range[0]/K+W[0]/K||0,-d.range[1]/$+W[1]/$||0],d.scaleFract=p(d.scale),d.translateFract=p(d.translate)}if(t.dashes){var Q,tt=0;if(!t.dashes||t.dashes.length<2)tt=1,Q=new Uint8Array([255,255,255,255,255,255,255,255]);else{tt=0;for(var et=0;et<t.dashes.length;++et)tt+=t.dashes[et];Q=new Uint8Array(tt*y.dashMult);for(var rt=0,nt=255,it=0;it<2;it++)for(var at=0;at<t.dashes.length;++at){for(var ot=0,st=t.dashes[at]*y.dashMult*.5;ot<st;++ot)Q[rt++]=nt;nt^=255}}d.dashLength=tt,d.dashTexture({channels:1,data:Q,width:Q.length,height:1,mag:\\\"linear\\\",min:\\\"linear\\\"},0,0)}if(t.color){var lt=d.count,ut=t.color;ut||(ut=\\\"transparent\\\");var ct=new Uint8Array(4*lt+4);if(Array.isArray(ut)&&\\\"number\\\"!=typeof ut[0]){for(var ft=0;ft<lt;ft++){var ht=n(ut[ft],\\\"uint8\\\");ct.set(ht,4*ft)}ct.set(n(ut[0],\\\"uint8\\\"),4*lt)}else for(var pt=n(ut,\\\"uint8\\\"),dt=0;dt<lt+1;dt++)ct.set(pt,4*dt);d.colorBuffer({usage:\\\"dynamic\\\",type:\\\"uint8\\\",data:ct})}}else e.passes[f]=null})),t.length<this.passes.length){for(var f=t.length;f<this.passes.length;f++){var d=this.passes[f];d&&(d.colorBuffer.destroy(),d.positionBuffer.destroy(),d.dashTexture.destroy())}this.passes.length=t.length}for(var m=[],x=0;x<this.passes.length;x++)null!==this.passes[x]&&m.push(this.passes[x]);return this.passes=m,this}},y.prototype.destroy=function(){return this.passes.forEach((function(t){t.colorBuffer.destroy(),t.positionBuffer.destroy(),t.dashTexture.destroy()})),this.passes.length=0,this}},11870:function(t,e,r){\\\"use strict\\\";function n(t,e){return function(t){if(Array.isArray(t))return t}(t)||function(t,e){var r=null==t?null:\\\"undefined\\\"!=typeof Symbol&&t[Symbol.iterator]||t[\\\"@@iterator\\\"];if(null!=r){var n,i,a,o,s=[],l=!0,u=!1;try{if(a=(r=r.call(t)).next,0===e){if(Object(r)!==r)return;l=!1}else for(;!(l=(n=a.call(r)).done)&&(s.push(n.value),s.length!==e);l=!0);}catch(t){u=!0,i=t}finally{try{if(!l&&null!=r.return&&(o=r.return(),Object(o)!==o))return}finally{if(u)throw i}}return s}}(t,e)||i(t,e)||function(){throw new TypeError(\\\"Invalid attempt to destructure non-iterable instance.\\\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\\\")}()}function i(t,e){if(t){if(\\\"string\\\"==typeof t)return a(t,e);var r=Object.prototype.toString.call(t).slice(8,-1);return\\\"Object\\\"===r&&t.constructor&&(r=t.constructor.name),\\\"Map\\\"===r||\\\"Set\\\"===r?Array.from(t):\\\"Arguments\\\"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?a(t,e):void 0}}function a(t,e){(null==e||e>t.length)&&(e=t.length);for(var r=0,n=new Array(e);r<e;r++)n[r]=t[r];return n}var o=r(25075),s=r(21527),l=r(6475),u=r(88294),c=r(56131),f=r(56068),h=r(71299),p=r(93447),d=r(30120),v=r(62683),g=r(57060),y=r(18863),m=x;function x(t,e){var r=this;if(!(this instanceof x))return new x(t,e);\\\"function\\\"==typeof t?(e||(e={}),e.regl=t):(e=t,t=null),e&&e.length&&(e.positions=e);var n,i=(t=e.regl)._gl,a=[];this.tooManyColors=v,n=t.texture({data:new Uint8Array(1020),width:255,height:1,type:\\\"uint8\\\",format:\\\"rgba\\\",wrapS:\\\"clamp\\\",wrapT:\\\"clamp\\\",mag:\\\"nearest\\\",min:\\\"nearest\\\"}),c(this,{regl:t,gl:i,groups:[],markerCache:[null],markerTextures:[null],palette:a,paletteIds:{},paletteTexture:n,maxColors:255,maxSize:100,canvas:i.canvas}),this.update(e);var o={uniforms:{constPointSize:!!e.constPointSize,opacity:t.prop(\\\"opacity\\\"),paletteSize:function(t,e){return[r.tooManyColors?0:255,n.height]},pixelRatio:t.context(\\\"pixelRatio\\\"),scale:t.prop(\\\"scale\\\"),scaleFract:t.prop(\\\"scaleFract\\\"),translate:t.prop(\\\"translate\\\"),translateFract:t.prop(\\\"translateFract\\\"),markerTexture:t.prop(\\\"markerTexture\\\"),paletteTexture:n},attributes:{x:function(t,e){return e.xAttr||{buffer:e.positionBuffer,stride:8,offset:0}},y:function(t,e){return e.yAttr||{buffer:e.positionBuffer,stride:8,offset:4}},xFract:function(t,e){return e.xAttr?{constant:[0,0]}:{buffer:e.positionFractBuffer,stride:8,offset:0}},yFract:function(t,e){return e.yAttr?{constant:[0,0]}:{buffer:e.positionFractBuffer,stride:8,offset:4}},size:function(t,e){return e.size.length?{buffer:e.sizeBuffer,stride:2,offset:0}:{constant:[Math.round(255*e.size/r.maxSize)]}},borderSize:function(t,e){return e.borderSize.length?{buffer:e.sizeBuffer,stride:2,offset:1}:{constant:[Math.round(255*e.borderSize/r.maxSize)]}},colorId:function(t,e){return e.color.length?{buffer:e.colorBuffer,stride:r.tooManyColors?8:4,offset:0}:{constant:r.tooManyColors?a.slice(4*e.color,4*e.color+4):[e.color]}},borderColorId:function(t,e){return e.borderColor.length?{buffer:e.colorBuffer,stride:r.tooManyColors?8:4,offset:r.tooManyColors?4:2}:{constant:r.tooManyColors?a.slice(4*e.borderColor,4*e.borderColor+4):[e.borderColor]}},isActive:function(t,e){return!0===e.activation?{constant:[1]}:e.activation?e.activation:{constant:[0]}}},blend:{enable:!0,color:[0,0,0,1],func:{srcRGB:\\\"src alpha\\\",dstRGB:\\\"one minus src alpha\\\",srcAlpha:\\\"one minus dst alpha\\\",dstAlpha:\\\"one\\\"}},scissor:{enable:!0,box:t.prop(\\\"viewport\\\")},viewport:t.prop(\\\"viewport\\\"),stencil:{enable:!1},depth:{enable:!1},elements:t.prop(\\\"elements\\\"),count:t.prop(\\\"count\\\"),offset:t.prop(\\\"offset\\\"),primitive:\\\"points\\\"},s=c({},o);s.frag=f([\\\"precision highp float;\\\\n#define GLSLIFY 1\\\\n\\\\nuniform float opacity;\\\\nuniform sampler2D markerTexture;\\\\n\\\\nvarying vec4 fragColor, fragBorderColor;\\\\nvarying float fragWidth, fragBorderColorLevel, fragColorLevel;\\\\n\\\\nfloat smoothStep(float x, float y) {\\\\n  return 1.0 / (1.0 + exp(50.0*(x - y)));\\\\n}\\\\n\\\\nvoid main() {\\\\n  float dist = texture2D(markerTexture, gl_PointCoord).r, delta = fragWidth;\\\\n\\\\n  // max-distance alpha\\\\n  if (dist < 0.003) discard;\\\\n\\\\n  // null-border case\\\\n  if (fragBorderColorLevel == fragColorLevel || fragBorderColor.a == 0.) {\\\\n    float colorAmt = smoothstep(.5 - delta, .5 + delta, dist);\\\\n    gl_FragColor = vec4(fragColor.rgb, colorAmt * fragColor.a * opacity);\\\\n  }\\\\n  else {\\\\n    float borderColorAmt = smoothstep(fragBorderColorLevel - delta, fragBorderColorLevel + delta, dist);\\\\n    float colorAmt = smoothstep(fragColorLevel - delta, fragColorLevel + delta, dist);\\\\n\\\\n    vec4 color = fragBorderColor;\\\\n    color.a *= borderColorAmt;\\\\n    color = mix(color, fragColor, colorAmt);\\\\n    color.a *= opacity;\\\\n\\\\n    gl_FragColor = color;\\\\n  }\\\\n\\\\n}\\\\n\\\"]),s.vert=f([\\\"precision highp float;\\\\n#define GLSLIFY 1\\\\n\\\\nattribute float x, y, xFract, yFract;\\\\nattribute float size, borderSize;\\\\nattribute vec4 colorId, borderColorId;\\\\nattribute float isActive;\\\\n\\\\nuniform bool constPointSize;\\\\nuniform float pixelRatio;\\\\nuniform vec2 scale, scaleFract, translate, translateFract, paletteSize;\\\\nuniform sampler2D paletteTexture;\\\\n\\\\nconst float maxSize = 100.;\\\\nconst float borderLevel = .5;\\\\n\\\\nvarying vec4 fragColor, fragBorderColor;\\\\nvarying float fragPointSize, fragBorderRadius, fragWidth, fragBorderColorLevel, fragColorLevel;\\\\n\\\\nfloat pointSizeScale = (constPointSize) ? 2. : pixelRatio;\\\\n\\\\nbool isDirect = (paletteSize.x < 1.);\\\\n\\\\nvec4 getColor(vec4 id) {\\\\n  return isDirect ? id / 255. : texture2D(paletteTexture,\\\\n    vec2(\\\\n      (id.x + .5) / paletteSize.x,\\\\n      (id.y + .5) / paletteSize.y\\\\n    )\\\\n  );\\\\n}\\\\n\\\\nvoid main() {\\\\n  // ignore inactive points\\\\n  if (isActive == 0.) return;\\\\n\\\\n  vec2 position = vec2(x, y);\\\\n  vec2 positionFract = vec2(xFract, yFract);\\\\n\\\\n  vec4 color = getColor(colorId);\\\\n  vec4 borderColor = getColor(borderColorId);\\\\n\\\\n  float size = size * maxSize / 255.;\\\\n  float borderSize = borderSize * maxSize / 255.;\\\\n\\\\n  gl_PointSize = 2. * size * pointSizeScale;\\\\n  fragPointSize = size * pixelRatio;\\\\n\\\\n  vec2 pos = (position + translate) * scale\\\\n      + (positionFract + translateFract) * scale\\\\n      + (position + translate) * scaleFract\\\\n      + (positionFract + translateFract) * scaleFract;\\\\n\\\\n  gl_Position = vec4(pos * 2. - 1., 0., 1.);\\\\n\\\\n  fragColor = color;\\\\n  fragBorderColor = borderColor;\\\\n  fragWidth = 1. / gl_PointSize;\\\\n\\\\n  fragBorderColorLevel = clamp(borderLevel - borderLevel * borderSize / size, 0., 1.);\\\\n  fragColorLevel = clamp(borderLevel + (1. - borderLevel) * borderSize / size, 0., 1.);\\\\n}\\\"]),this.drawMarker=t(s);var l=c({},o);l.frag=f([\\\"precision highp float;\\\\n#define GLSLIFY 1\\\\n\\\\nvarying vec4 fragColor, fragBorderColor;\\\\nvarying float fragBorderRadius, fragWidth;\\\\n\\\\nuniform float opacity;\\\\n\\\\nfloat smoothStep(float edge0, float edge1, float x) {\\\\n\\\\tfloat t;\\\\n\\\\tt = clamp((x - edge0) / (edge1 - edge0), 0.0, 1.0);\\\\n\\\\treturn t * t * (3.0 - 2.0 * t);\\\\n}\\\\n\\\\nvoid main() {\\\\n\\\\tfloat radius, alpha = 1.0, delta = fragWidth;\\\\n\\\\n\\\\tradius = length(2.0 * gl_PointCoord.xy - 1.0);\\\\n\\\\n\\\\tif (radius > 1.0 + delta) {\\\\n\\\\t\\\\tdiscard;\\\\n\\\\t}\\\\n\\\\n\\\\talpha -= smoothstep(1.0 - delta, 1.0 + delta, radius);\\\\n\\\\n\\\\tfloat borderRadius = fragBorderRadius;\\\\n\\\\tfloat ratio = smoothstep(borderRadius - delta, borderRadius + delta, radius);\\\\n\\\\tvec4 color = mix(fragColor, fragBorderColor, ratio);\\\\n\\\\tcolor.a *= alpha * opacity;\\\\n\\\\tgl_FragColor = color;\\\\n}\\\\n\\\"]),l.vert=f([\\\"precision highp float;\\\\n#define GLSLIFY 1\\\\n\\\\nattribute float x, y, xFract, yFract;\\\\nattribute float size, borderSize;\\\\nattribute vec4 colorId, borderColorId;\\\\nattribute float isActive;\\\\n\\\\nuniform bool constPointSize;\\\\nuniform float pixelRatio;\\\\nuniform vec2 paletteSize, scale, scaleFract, translate, translateFract;\\\\nuniform sampler2D paletteTexture;\\\\n\\\\nconst float maxSize = 100.;\\\\n\\\\nvarying vec4 fragColor, fragBorderColor;\\\\nvarying float fragBorderRadius, fragWidth;\\\\n\\\\nfloat pointSizeScale = (constPointSize) ? 2. : pixelRatio;\\\\n\\\\nbool isDirect = (paletteSize.x < 1.);\\\\n\\\\nvec4 getColor(vec4 id) {\\\\n  return isDirect ? id / 255. : texture2D(paletteTexture,\\\\n    vec2(\\\\n      (id.x + .5) / paletteSize.x,\\\\n      (id.y + .5) / paletteSize.y\\\\n    )\\\\n  );\\\\n}\\\\n\\\\nvoid main() {\\\\n  // ignore inactive points\\\\n  if (isActive == 0.) return;\\\\n\\\\n  vec2 position = vec2(x, y);\\\\n  vec2 positionFract = vec2(xFract, yFract);\\\\n\\\\n  vec4 color = getColor(colorId);\\\\n  vec4 borderColor = getColor(borderColorId);\\\\n\\\\n  float size = size * maxSize / 255.;\\\\n  float borderSize = borderSize * maxSize / 255.;\\\\n\\\\n  gl_PointSize = (size + borderSize) * pointSizeScale;\\\\n\\\\n  vec2 pos = (position + translate) * scale\\\\n      + (positionFract + translateFract) * scale\\\\n      + (position + translate) * scaleFract\\\\n      + (positionFract + translateFract) * scaleFract;\\\\n\\\\n  gl_Position = vec4(pos * 2. - 1., 0., 1.);\\\\n\\\\n  fragBorderRadius = 1. - 2. * borderSize / (size + borderSize);\\\\n  fragColor = color;\\\\n  fragBorderColor = borderColor.a == 0. || borderSize == 0. ? vec4(color.rgb, 0.) : borderColor;\\\\n  fragWidth = 1. / gl_PointSize;\\\\n}\\\\n\\\"]),v&&(l.frag=l.frag.replace(\\\"smoothstep\\\",\\\"smoothStep\\\"),s.frag=s.frag.replace(\\\"smoothstep\\\",\\\"smoothStep\\\")),this.drawCircle=t(l)}x.defaults={color:\\\"black\\\",borderColor:\\\"transparent\\\",borderSize:0,size:12,opacity:1,marker:void 0,viewport:null,range:null,pixelSize:null,count:0,offset:0,bounds:null,positions:[],snap:1e4},x.prototype.render=function(){return arguments.length&&this.update.apply(this,arguments),this.draw(),this},x.prototype.draw=function(){for(var t=this,e=arguments.length,r=new Array(e),n=0;n<e;n++)r[n]=arguments[n];var i=this.groups;if(1===r.length&&Array.isArray(r[0])&&(null===r[0][0]||Array.isArray(r[0][0]))&&(r=r[0]),this.regl._refresh(),r.length)for(var a=0;a<r.length;a++)this.drawItem(a,r[a]);else i.forEach((function(e,r){t.drawItem(r)}));return this},x.prototype.drawItem=function(t,e){var r,n=this.groups,o=n[t];if(\\\"number\\\"==typeof e&&(t=e,o=n[e],e=null),o&&o.count&&o.opacity){o.activation[0]&&this.drawCircle(this.getMarkerDrawOptions(0,o,e));for(var s=[],l=1;l<o.activation.length;l++)o.activation[l]&&(!0===o.activation[l]||o.activation[l].data.length)&&s.push.apply(s,function(t){if(Array.isArray(t))return a(t)}(r=this.getMarkerDrawOptions(l,o,e))||function(t){if(\\\"undefined\\\"!=typeof Symbol&&null!=t[Symbol.iterator]||null!=t[\\\"@@iterator\\\"])return Array.from(t)}(r)||i(r)||function(){throw new TypeError(\\\"Invalid attempt to spread non-iterable instance.\\\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\\\")}());s.length&&this.drawMarker(s)}},x.prototype.getMarkerDrawOptions=function(t,e,r){var i=e.range,a=e.tree,o=e.viewport,s=e.activation,l=e.selectionBuffer,u=e.count;if(this.regl,!a)return r?[c({},e,{markerTexture:this.markerTextures[t],activation:s[t],count:r.length,elements:r,offset:0})]:[c({},e,{markerTexture:this.markerTextures[t],activation:s[t],offset:0})];var f=[],h=a.range(i,{lod:!0,px:[(i[2]-i[0])/o.width,(i[3]-i[1])/o.height]});if(r){for(var p=s[t].data,d=new Uint8Array(u),v=0;v<r.length;v++){var g=r[v];d[g]=p?p[g]:1}l.subdata(d)}for(var y=h.length;y--;){var m=n(h[y],2),x=m[0],b=m[1];f.push(c({},e,{markerTexture:this.markerTextures[t],activation:r?l:s[t],offset:x,count:b-x}))}return f},x.prototype.update=function(){for(var t=this,e=arguments.length,r=new Array(e),n=0;n<e;n++)r[n]=arguments[n];if(r.length){1===r.length&&Array.isArray(r[0])&&(r=r[0]);var i=this.groups,a=this.gl,o=this.regl,l=this.maxSize,f=this.maxColors,v=this.palette;this.groups=i=r.map((function(e,r){var n=i[r];if(void 0===e)return n;null===e?e={positions:null}:\\\"function\\\"==typeof e?e={ondraw:e}:\\\"number\\\"==typeof e[0]&&(e={positions:e}),null===(e=h(e,{positions:\\\"positions data points\\\",snap:\\\"snap cluster lod tree\\\",size:\\\"sizes size radius\\\",borderSize:\\\"borderSizes borderSize border-size bordersize borderWidth borderWidths border-width borderwidth stroke-width strokeWidth strokewidth outline\\\",color:\\\"colors color fill fill-color fillColor\\\",borderColor:\\\"borderColors borderColor stroke stroke-color strokeColor\\\",marker:\\\"markers marker shape\\\",range:\\\"range dataBox databox\\\",viewport:\\\"viewport viewPort viewBox viewbox\\\",opacity:\\\"opacity alpha transparency\\\",bounds:\\\"bound bounds boundaries limits\\\",tooManyColors:\\\"tooManyColors palette paletteMode optimizePalette enablePalette\\\"})).positions&&(e.positions=[]),null!=e.tooManyColors&&(t.tooManyColors=e.tooManyColors),n||(i[r]=n={id:r,scale:null,translate:null,scaleFract:null,translateFract:null,activation:[],selectionBuffer:o.buffer({data:new Uint8Array(0),usage:\\\"stream\\\",type:\\\"uint8\\\"}),sizeBuffer:o.buffer({data:new Uint8Array(0),usage:\\\"dynamic\\\",type:\\\"uint8\\\"}),colorBuffer:o.buffer({data:new Uint8Array(0),usage:\\\"dynamic\\\",type:\\\"uint8\\\"}),positionBuffer:o.buffer({data:new Uint8Array(0),usage:\\\"dynamic\\\",type:\\\"float\\\"}),positionFractBuffer:o.buffer({data:new Uint8Array(0),usage:\\\"dynamic\\\",type:\\\"float\\\"})},e=c({},x.defaults,e)),e.positions&&!(\\\"marker\\\"in e)&&(e.marker=n.marker,delete n.marker),e.marker&&!(\\\"positions\\\"in e)&&(e.positions=n.positions,delete n.positions);var m=0,b=0;if(p(n,e,[{snap:!0,size:function(t,e){return null==t&&(t=x.defaults.size),m+=t&&t.length?1:0,t},borderSize:function(t,e){return null==t&&(t=x.defaults.borderSize),m+=t&&t.length?1:0,t},opacity:parseFloat,color:function(e,r){return null==e&&(e=x.defaults.color),e=t.updateColor(e),b++,e},borderColor:function(e,r){return null==e&&(e=x.defaults.borderColor),e=t.updateColor(e),b++,e},bounds:function(t,e,r){return\\\"range\\\"in r||(r.range=null),t},positions:function(t,e,r){var n=e.snap,i=e.positionBuffer,a=e.positionFractBuffer,l=e.selectionBuffer;if(t.x||t.y)return t.x.length?e.xAttr={buffer:o.buffer(t.x),offset:0,stride:4,count:t.x.length}:e.xAttr={buffer:t.x.buffer,offset:4*t.x.offset||0,stride:4*(t.x.stride||1),count:t.x.count},t.y.length?e.yAttr={buffer:o.buffer(t.y),offset:0,stride:4,count:t.y.length}:e.yAttr={buffer:t.y.buffer,offset:4*t.y.offset||0,stride:4*(t.y.stride||1),count:t.y.count},e.count=Math.max(e.xAttr.count,e.yAttr.count),t;t=d(t,\\\"float64\\\");var c=e.count=Math.floor(t.length/2),f=e.bounds=c?s(t,2):null;if(r.range||e.range||(delete e.range,r.range=f),r.marker||e.marker||(delete e.marker,r.marker=null),n&&(!0===n||c>n)?e.tree=u(t,{bounds:f}):n&&n.length&&(e.tree=n),e.tree){var h={primitive:\\\"points\\\",usage:\\\"static\\\",data:e.tree,type:\\\"uint32\\\"};e.elements?e.elements(h):e.elements=o.elements(h)}var p=g.float32(t);return i({data:p,usage:\\\"dynamic\\\"}),a({data:g.fract32(t,p),usage:\\\"dynamic\\\"}),l({data:new Uint8Array(c),type:\\\"uint8\\\",usage:\\\"stream\\\"}),t}},{marker:function(e,r,n){var i=r.activation;if(i.forEach((function(t){return t&&t.destroy&&t.destroy()})),i.length=0,e&&\\\"number\\\"!=typeof e[0]){for(var a=[],s=0,l=Math.min(e.length,r.count);s<l;s++){var u=t.addMarker(e[s]);a[u]||(a[u]=new Uint8Array(r.count)),a[u][s]=1}for(var c=0;c<a.length;c++)if(a[c]){var f={data:a[c],type:\\\"uint8\\\",usage:\\\"static\\\"};i[c]?i[c](f):i[c]=o.buffer(f),i[c].data=a[c]}}else i[t.addMarker(e)]=!0;return e},range:function(t,e,r){var n=e.bounds;if(n)return t||(t=n),e.scale=[1/(t[2]-t[0]),1/(t[3]-t[1])],e.translate=[-t[0],-t[1]],e.scaleFract=g.fract(e.scale),e.translateFract=g.fract(e.translate),t},viewport:function(t){return y(t||[a.drawingBufferWidth,a.drawingBufferHeight])}}]),m){var _=n,w=_.count,T=_.size,k=_.borderSize,A=_.sizeBuffer,M=new Uint8Array(2*w);if(T.length||k.length)for(var S=0;S<w;S++)M[2*S]=Math.round(255*(null==T[S]?T:T[S])/l),M[2*S+1]=Math.round(255*(null==k[S]?k:k[S])/l);A({data:M,usage:\\\"dynamic\\\"})}if(b){var E,L=n,C=L.count,P=L.color,O=L.borderColor,I=L.colorBuffer;if(t.tooManyColors){if(P.length||O.length){E=new Uint8Array(8*C);for(var D=0;D<C;D++){var z=P[D];E[8*D]=v[4*z],E[8*D+1]=v[4*z+1],E[8*D+2]=v[4*z+2],E[8*D+3]=v[4*z+3];var R=O[D];E[8*D+4]=v[4*R],E[8*D+5]=v[4*R+1],E[8*D+6]=v[4*R+2],E[8*D+7]=v[4*R+3]}}}else if(P.length||O.length){E=new Uint8Array(4*C+2);for(var F=0;F<C;F++)null!=P[F]&&(E[4*F]=P[F]%f,E[4*F+1]=Math.floor(P[F]/f)),null!=O[F]&&(E[4*F+2]=O[F]%f,E[4*F+3]=Math.floor(O[F]/f))}I({data:E||new Uint8Array(0),type:\\\"uint8\\\",usage:\\\"dynamic\\\"})}return n}))}},x.prototype.addMarker=function(t){var e,r=this.markerTextures,n=this.regl,i=this.markerCache,a=null==t?0:i.indexOf(t);if(a>=0)return a;if(t instanceof Uint8Array||t instanceof Uint8ClampedArray)e=t;else{e=new Uint8Array(t.length);for(var o=0,s=t.length;o<s;o++)e[o]=255*t[o]}var l=Math.floor(Math.sqrt(e.length));return a=r.length,i.push(t),r.push(n.texture({channels:1,data:e,radius:l,mag:\\\"linear\\\",min:\\\"linear\\\"})),a},x.prototype.updateColor=function(t){var e=this.paletteIds,r=this.palette,n=this.maxColors;Array.isArray(t)||(t=[t]);var i=[];if(\\\"number\\\"==typeof t[0]){var a=[];if(Array.isArray(t))for(var s=0;s<t.length;s+=4)a.push(t.slice(s,s+4));else for(var u=0;u<t.length;u+=4)a.push(t.subarray(u,u+4));t=a}for(var c=0;c<t.length;c++){var f=t[c];f=o(f,\\\"uint8\\\");var h=l(f,!1);if(null==e[h]){var p=r.length;e[h]=Math.floor(p/4),r[p]=f[0],r[p+1]=f[1],r[p+2]=f[2],r[p+3]=f[3]}i[c]=e[h]}return!this.tooManyColors&&r.length>4*n&&(this.tooManyColors=!0),this.updatePalette(r),1===i.length?i[0]:i},x.prototype.updatePalette=function(t){if(!this.tooManyColors){var e=this.maxColors,r=this.paletteTexture,n=Math.ceil(.25*t.length/e);if(n>1)for(var i=.25*(t=t.slice()).length%e;i<n*e;i++)t.push(0,0,0,0);r.height<n&&r.resize(e,n),r.subimage({width:Math.min(.25*t.length,e),height:n,data:t},0,0)}},x.prototype.destroy=function(){return this.groups.forEach((function(t){t.sizeBuffer.destroy(),t.positionBuffer.destroy(),t.positionFractBuffer.destroy(),t.colorBuffer.destroy(),t.activation.forEach((function(t){return t&&t.destroy&&t.destroy()})),t.selectionBuffer.destroy(),t.elements&&t.elements.destroy()})),this.groups.length=0,this.paletteTexture.destroy(),this.markerTextures.forEach((function(t){return t&&t.destroy&&t.destroy()})),this};var b=r(56131);t.exports=function(t,e){var r=new m(t,e),n=r.render.bind(r);return b(n,{render:n,update:r.update.bind(r),draw:r.draw.bind(r),destroy:r.destroy.bind(r),regl:r.regl,gl:r.gl,canvas:r.gl.canvas,groups:r.groups,markers:r.markerCache,palette:r.palette}),n}},60487:function(t,e,r){\\\"use strict\\\";var n=r(11870),i=r(71299),a=r(21527),o=r(5877),s=r(57471),l=r(18863),u=r(30120);function c(t,e){if(!(this instanceof c))return new c(t,e);this.traces=[],this.passes={},this.regl=t,this.scatter=n(t),this.canvas=this.scatter.canvas}function f(t,e,r){return(null!=t.id?t.id:t)<<16|(255&e)<<8|255&r}function h(t,e,r){var n,i,a,o,s=t[e],l=t[r];return s.length>2?(s[0],s[2],n=s[1],i=s[3]):s.length?(n=s[0],i=s[1]):(s.x,n=s.y,s.x,s.width,i=s.y+s.height),l.length>2?(a=l[0],o=l[2],l[1],l[3]):l.length?(a=l[0],o=l[1]):(a=l.x,l.y,o=l.x+l.width,l.y,l.height),[a,n,o,i]}function p(t){if(\\\"number\\\"==typeof t)return[t,t,t,t];if(2===t.length)return[t[0],t[1],t[0],t[1]];var e=l(t);return[e.x,e.y,e.x+e.width,e.y+e.height]}t.exports=c,c.prototype.render=function(){for(var t,e=this,r=[],n=arguments.length;n--;)r[n]=arguments[n];return r.length&&(t=this).update.apply(t,r),this.regl.attributes.preserveDrawingBuffer?this.draw():(this.dirty?null==this.planned&&(this.planned=o((function(){e.draw(),e.dirty=!0,e.planned=null}))):(this.draw(),this.dirty=!0,o((function(){e.dirty=!1}))),this)},c.prototype.update=function(){for(var t,e=[],r=arguments.length;r--;)e[r]=arguments[r];if(e.length){for(var n=0;n<e.length;n++)this.updateItem(n,e[n]);this.traces=this.traces.filter(Boolean);for(var i=[],a=0,o=0;o<this.traces.length;o++){for(var s=this.traces[o],l=this.traces[o].passes,u=0;u<l.length;u++)i.push(this.passes[l[u]]);s.passOffset=a,a+=s.passes.length}return(t=this.scatter).update.apply(t,i),this}},c.prototype.updateItem=function(t,e){var r=this.regl;if(null===e)return this.traces[t]=null,this;if(!e)return this;var n,o=i(e,{data:\\\"data items columns rows values dimensions samples x\\\",snap:\\\"snap cluster\\\",size:\\\"sizes size radius\\\",color:\\\"colors color fill fill-color fillColor\\\",opacity:\\\"opacity alpha transparency opaque\\\",borderSize:\\\"borderSizes borderSize border-size bordersize borderWidth borderWidths border-width borderwidth stroke-width strokeWidth strokewidth outline\\\",borderColor:\\\"borderColors borderColor bordercolor stroke stroke-color strokeColor\\\",marker:\\\"markers marker shape\\\",range:\\\"range ranges databox dataBox\\\",viewport:\\\"viewport viewBox viewbox\\\",domain:\\\"domain domains area areas\\\",padding:\\\"pad padding paddings pads margin margins\\\",transpose:\\\"transpose transposed\\\",diagonal:\\\"diagonal diag showDiagonal\\\",upper:\\\"upper up top upperhalf upperHalf showupperhalf showUpper showUpperHalf\\\",lower:\\\"lower low bottom lowerhalf lowerHalf showlowerhalf showLowerHalf showLower\\\"}),s=this.traces[t]||(this.traces[t]={id:t,buffer:r.buffer({usage:\\\"dynamic\\\",type:\\\"float\\\",data:new Uint8Array}),color:\\\"black\\\",marker:null,size:12,borderColor:\\\"transparent\\\",borderSize:1,viewport:l([r._gl.drawingBufferWidth,r._gl.drawingBufferHeight]),padding:[0,0,0,0],opacity:1,diagonal:!0,upper:!0,lower:!0});if(null!=o.color&&(s.color=o.color),null!=o.size&&(s.size=o.size),null!=o.marker&&(s.marker=o.marker),null!=o.borderColor&&(s.borderColor=o.borderColor),null!=o.borderSize&&(s.borderSize=o.borderSize),null!=o.opacity&&(s.opacity=o.opacity),o.viewport&&(s.viewport=l(o.viewport)),null!=o.diagonal&&(s.diagonal=o.diagonal),null!=o.upper&&(s.upper=o.upper),null!=o.lower&&(s.lower=o.lower),o.data){s.buffer(u(o.data)),s.columns=o.data.length,s.count=o.data[0].length,s.bounds=[];for(var c=0;c<s.columns;c++)s.bounds[c]=a(o.data[c],1)}o.range&&(s.range=o.range,n=s.range&&\\\"number\\\"!=typeof s.range[0]),o.domain&&(s.domain=o.domain);var d=!1;null!=o.padding&&(Array.isArray(o.padding)&&o.padding.length===s.columns&&\\\"number\\\"==typeof o.padding[o.padding.length-1]?(s.padding=o.padding.map(p),d=!0):s.padding=p(o.padding));var v=s.columns,g=s.count,y=s.viewport.width,m=s.viewport.height,x=s.viewport.x,b=s.viewport.y,_=y/v,w=m/v;s.passes=[];for(var T=0;T<v;T++)for(var k=0;k<v;k++)if((s.diagonal||k!==T)&&(s.upper||!(T>k))&&(s.lower||!(T<k))){var A=f(s.id,T,k),M=this.passes[A]||(this.passes[A]={});if(o.data&&(o.transpose?M.positions={x:{buffer:s.buffer,offset:k,count:g,stride:v},y:{buffer:s.buffer,offset:T,count:g,stride:v}}:M.positions={x:{buffer:s.buffer,offset:k*g,count:g},y:{buffer:s.buffer,offset:T*g,count:g}},M.bounds=h(s.bounds,T,k)),o.domain||o.viewport||o.data){var S=d?h(s.padding,T,k):s.padding;if(s.domain){var E=h(s.domain,T,k),L=E[0],C=E[1],P=E[2],O=E[3];M.viewport=[x+L*y+S[0],b+C*m+S[1],x+P*y-S[2],b+O*m-S[3]]}else M.viewport=[x+k*_+_*S[0],b+T*w+w*S[1],x+(k+1)*_-_*S[2],b+(T+1)*w-w*S[3]]}o.color&&(M.color=s.color),o.size&&(M.size=s.size),o.marker&&(M.marker=s.marker),o.borderSize&&(M.borderSize=s.borderSize),o.borderColor&&(M.borderColor=s.borderColor),o.opacity&&(M.opacity=s.opacity),o.range&&(M.range=n?h(s.range,T,k):s.range||M.bounds),s.passes.push(A)}return this},c.prototype.draw=function(){for(var t,e=[],r=arguments.length;r--;)e[r]=arguments[r];if(e.length){for(var n=[],i=0;i<e.length;i++)if(\\\"number\\\"==typeof e[i]){var a=this.traces[e[i]],o=a.passes,l=a.passOffset;n.push.apply(n,s(l,l+o.length))}else if(e[i].length){var u=e[i],c=this.traces[i],f=c.passes,h=c.passOffset;f=f.map((function(t,e){n[h+e]=u}))}(t=this.scatter).draw.apply(t,n)}else this.scatter.draw();return this},c.prototype.destroy=function(){return this.traces.forEach((function(t){t.buffer&&t.buffer.destroy&&t.buffer.destroy()})),this.traces=null,this.passes=null,this.scatter.destroy(),this}},98580:function(t){t.exports=function(){function t(t,e){this.id=Z++,this.type=t,this.data=e}function e(t){if(0===t.length)return[];var r=t.charAt(0),n=t.charAt(t.length-1);if(1<t.length&&r===n&&('\\\"'===r||\\\"'\\\"===r))return['\\\"'+t.substr(1,t.length-2).replace(/\\\\\\\\/g,\\\"\\\\\\\\\\\\\\\\\\\").replace(/\\\"/g,'\\\\\\\\\\\"')+'\\\"'];if(r=/\\\\[(false|true|null|\\\\d+|'[^']*'|\\\"[^\\\"]*\\\")\\\\]/.exec(t))return e(t.substr(0,r.index)).concat(e(r[1])).concat(e(t.substr(r.index+r[0].length)));if(1===(r=t.split(\\\".\\\")).length)return['\\\"'+t.replace(/\\\\\\\\/g,\\\"\\\\\\\\\\\\\\\\\\\").replace(/\\\"/g,'\\\\\\\\\\\"')+'\\\"'];for(t=[],n=0;n<r.length;++n)t=t.concat(e(r[n]));return t}function r(t){return\\\"[\\\"+e(t).join(\\\"][\\\")+\\\"]\\\"}function n(t){return\\\"string\\\"==typeof t?t.split():t}function i(t){return\\\"string\\\"==typeof t?document.querySelector(t):t}function a(t){var e,r,a,o,s=t||{};t={};var l=[],u=[],c=\\\"undefined\\\"==typeof window?1:window.devicePixelRatio,f=!1,h={},p=function(t){},d=function(){};if(\\\"string\\\"==typeof s?e=document.querySelector(s):\\\"object\\\"==typeof s&&(\\\"string\\\"==typeof s.nodeName&&\\\"function\\\"==typeof s.appendChild&&\\\"function\\\"==typeof s.getBoundingClientRect?e=s:\\\"function\\\"==typeof s.drawArrays||\\\"function\\\"==typeof s.drawElements?a=(o=s).canvas:(\\\"gl\\\"in s?o=s.gl:\\\"canvas\\\"in s?a=i(s.canvas):\\\"container\\\"in s&&(r=i(s.container)),\\\"attributes\\\"in s&&(t=s.attributes),\\\"extensions\\\"in s&&(l=n(s.extensions)),\\\"optionalExtensions\\\"in s&&(u=n(s.optionalExtensions)),\\\"onDone\\\"in s&&(p=s.onDone),\\\"profile\\\"in s&&(f=!!s.profile),\\\"pixelRatio\\\"in s&&(c=+s.pixelRatio),\\\"cachedCode\\\"in s&&(h=s.cachedCode))),e&&(\\\"canvas\\\"===e.nodeName.toLowerCase()?a=e:r=e),!o){if(!a){if(!(e=function(t,e,r){function n(){var e=window.innerWidth,n=window.innerHeight;t!==document.body&&(e=(n=a.getBoundingClientRect()).right-n.left,n=n.bottom-n.top),a.width=r*e,a.height=r*n}var i,a=document.createElement(\\\"canvas\\\");return G(a.style,{border:0,margin:0,padding:0,top:0,left:0,width:\\\"100%\\\",height:\\\"100%\\\"}),t.appendChild(a),t===document.body&&(a.style.position=\\\"absolute\\\",G(t.style,{margin:0,padding:0})),t!==document.body&&\\\"function\\\"==typeof ResizeObserver?(i=new ResizeObserver((function(){setTimeout(n)}))).observe(t):window.addEventListener(\\\"resize\\\",n,!1),n(),{canvas:a,onDestroy:function(){i?i.disconnect():window.removeEventListener(\\\"resize\\\",n),t.removeChild(a)}}}(r||document.body,0,c)))return null;a=e.canvas,d=e.onDestroy}void 0===t.premultipliedAlpha&&(t.premultipliedAlpha=!0),o=function(t,e){function r(r){try{return t.getContext(r,e)}catch(t){return null}}return r(\\\"webgl\\\")||r(\\\"experimental-webgl\\\")||r(\\\"webgl-experimental\\\")}(a,t)}return o?{gl:o,canvas:a,container:r,extensions:l,optionalExtensions:u,pixelRatio:c,profile:f,cachedCode:h,onDone:p,onDestroy:d}:(d(),p(\\\"webgl not supported, try upgrading your browser or graphics drivers http://get.webgl.org\\\"),null)}function o(t,e){for(var r=Array(t),n=0;n<t;++n)r[n]=e(n);return r}function s(t){var e,r;return e=(65535<t)<<4,e|=r=(255<(t>>>=e))<<3,(e|=r=(15<(t>>>=r))<<2)|(r=(3<(t>>>=r))<<1)|t>>>r>>1}function l(){function t(t){t:{for(var e=16;268435456>=e;e*=16)if(t<=e){t=e;break t}t=0}return 0<(e=r[s(t)>>2]).length?e.pop():new ArrayBuffer(t)}function e(t){r[s(t.byteLength)>>2].push(t)}var r=o(8,(function(){return[]}));return{alloc:t,free:e,allocType:function(e,r){var n=null;switch(e){case 5120:n=new Int8Array(t(r),0,r);break;case 5121:n=new Uint8Array(t(r),0,r);break;case 5122:n=new Int16Array(t(2*r),0,r);break;case 5123:n=new Uint16Array(t(2*r),0,r);break;case 5124:n=new Int32Array(t(4*r),0,r);break;case 5125:n=new Uint32Array(t(4*r),0,r);break;case 5126:n=new Float32Array(t(4*r),0,r);break;default:return null}return n.length!==r?n.subarray(0,r):n},freeType:function(t){e(t.buffer)}}}function u(t){return!!t&&\\\"object\\\"==typeof t&&Array.isArray(t.shape)&&Array.isArray(t.stride)&&\\\"number\\\"==typeof t.offset&&t.shape.length===t.stride.length&&(Array.isArray(t.data)||$(t.data))}function c(t,e,r,n,i,a){for(var o=0;o<e;++o)for(var s=t[o],l=0;l<r;++l)for(var u=s[l],c=0;c<n;++c)i[a++]=u[c]}function f(t,e,r,n,i){for(var a=1,o=r+1;o<e.length;++o)a*=e[o];var s=e[r];if(4==e.length-r){var l=e[r+1],u=e[r+2];for(e=e[r+3],o=0;o<s;++o)c(t[o],l,u,e,n,i),i+=a}else for(o=0;o<s;++o)f(t[o],e,r+1,n,i),i+=a}function h(t){return 0|et[Object.prototype.toString.call(t)]}function p(t,e){for(var r=0;r<e.length;++r)t[r]=e[r]}function d(t,e,r,n,i,a,o){for(var s=0,l=0;l<r;++l)for(var u=0;u<n;++u)t[s++]=e[i*l+a*u+o]}function v(t,e,r,n){function i(e){this.id=l++,this.buffer=t.createBuffer(),this.type=e,this.usage=35044,this.byteLength=0,this.dimension=1,this.dtype=5121,this.persistentData=null,r.profile&&(this.stats={size:0})}function a(e,r,n){e.byteLength=r.byteLength,t.bufferData(e.type,r,n)}function o(t,e,r,n,i,o){if(t.usage=r,Array.isArray(e)){if(t.dtype=n||5126,0<e.length)if(Array.isArray(e[0])){i=at(e);for(var s=n=1;s<i.length;++s)n*=i[s];t.dimension=n,a(t,e=it(e,i,t.dtype),r),o?t.persistentData=e:J.freeType(e)}else\\\"number\\\"==typeof e[0]?(t.dimension=i,p(i=J.allocType(t.dtype,e.length),e),a(t,i,r),o?t.persistentData=i:J.freeType(i)):$(e[0])&&(t.dimension=e[0].length,t.dtype=n||h(e[0])||5126,a(t,e=it(e,[e.length,e[0].length],t.dtype),r),o?t.persistentData=e:J.freeType(e))}else if($(e))t.dtype=n||h(e),t.dimension=i,a(t,e,r),o&&(t.persistentData=new Uint8Array(new Uint8Array(e.buffer)));else if(u(e)){i=e.shape;var l=e.stride,c=(s=e.offset,0),f=0,v=0,g=0;1===i.length?(c=i[0],f=1,v=l[0],g=0):2===i.length&&(c=i[0],f=i[1],v=l[0],g=l[1]),t.dtype=n||h(e.data)||5126,t.dimension=f,d(i=J.allocType(t.dtype,c*f),e.data,c,f,v,g,s),a(t,i,r),o?t.persistentData=i:J.freeType(i)}else e instanceof ArrayBuffer&&(t.dtype=5121,t.dimension=i,a(t,e,r),o&&(t.persistentData=new Uint8Array(new Uint8Array(e))))}function s(r){e.bufferCount--,n(r),t.deleteBuffer(r.buffer),r.buffer=null,delete c[r.id]}var l=0,c={};i.prototype.bind=function(){t.bindBuffer(this.type,this.buffer)},i.prototype.destroy=function(){s(this)};var f=[];return r.profile&&(e.getTotalBufferSize=function(){var t=0;return Object.keys(c).forEach((function(e){t+=c[e].stats.size})),t}),{create:function(n,a,l,f){function v(e){var n=35044,i=null,a=0,s=0,l=1;return Array.isArray(e)||$(e)||u(e)||e instanceof ArrayBuffer?i=e:\\\"number\\\"==typeof e?a=0|e:e&&(\\\"data\\\"in e&&(i=e.data),\\\"usage\\\"in e&&(n=nt[e.usage]),\\\"type\\\"in e&&(s=rt[e.type]),\\\"dimension\\\"in e&&(l=0|e.dimension),\\\"length\\\"in e&&(a=0|e.length)),g.bind(),i?o(g,i,n,s,l,f):(a&&t.bufferData(g.type,a,n),g.dtype=s||5121,g.usage=n,g.dimension=l,g.byteLength=a),r.profile&&(g.stats.size=g.byteLength*ot[g.dtype]),v}e.bufferCount++;var g=new i(a);return c[g.id]=g,l||v(n),v._reglType=\\\"buffer\\\",v._buffer=g,v.subdata=function(e,r){var n,i=0|(r||0);if(g.bind(),$(e)||e instanceof ArrayBuffer)t.bufferSubData(g.type,i,e);else if(Array.isArray(e)){if(0<e.length)if(\\\"number\\\"==typeof e[0]){var a=J.allocType(g.dtype,e.length);p(a,e),t.bufferSubData(g.type,i,a),J.freeType(a)}else(Array.isArray(e[0])||$(e[0]))&&(n=at(e),a=it(e,n,g.dtype),t.bufferSubData(g.type,i,a),J.freeType(a))}else if(u(e)){n=e.shape;var o=e.stride,s=a=0,l=0,c=0;1===n.length?(a=n[0],s=1,l=o[0],c=0):2===n.length&&(a=n[0],s=n[1],l=o[0],c=o[1]),n=Array.isArray(e.data)?g.dtype:h(e.data),d(n=J.allocType(n,a*s),e.data,a,s,l,c,e.offset),t.bufferSubData(g.type,i,n),J.freeType(n)}return v},r.profile&&(v.stats=g.stats),v.destroy=function(){s(g)},v},createStream:function(t,e){var r=f.pop();return r||(r=new i(t)),r.bind(),o(r,e,35040,0,1,!1),r},destroyStream:function(t){f.push(t)},clear:function(){Q(c).forEach(s),f.forEach(s)},getBuffer:function(t){return t&&t._buffer instanceof i?t._buffer:null},restore:function(){Q(c).forEach((function(e){e.buffer=t.createBuffer(),t.bindBuffer(e.type,e.buffer),t.bufferData(e.type,e.persistentData||e.byteLength,e.usage)}))},_initBuffer:o}}function g(t,e,r,n){function i(t){this.id=l++,s[this.id]=this,this.buffer=t,this.primType=4,this.type=this.vertCount=0}function a(n,i,a,o,s,l,c){var f;if(n.buffer.bind(),i?((f=c)||$(i)&&(!u(i)||$(i.data))||(f=e.oes_element_index_uint?5125:5123),r._initBuffer(n.buffer,i,a,f,3)):(t.bufferData(34963,l,a),n.buffer.dtype=f||5121,n.buffer.usage=a,n.buffer.dimension=3,n.buffer.byteLength=l),f=c,!c){switch(n.buffer.dtype){case 5121:case 5120:f=5121;break;case 5123:case 5122:f=5123;break;case 5125:case 5124:f=5125}n.buffer.dtype=f}n.type=f,0>(i=s)&&(i=n.buffer.byteLength,5123===f?i>>=1:5125===f&&(i>>=2)),n.vertCount=i,i=o,0>o&&(i=4,1===(o=n.buffer.dimension)&&(i=0),2===o&&(i=1),3===o&&(i=4)),n.primType=i}function o(t){n.elementsCount--,delete s[t.id],t.buffer.destroy(),t.buffer=null}var s={},l=0,c={uint8:5121,uint16:5123};e.oes_element_index_uint&&(c.uint32=5125),i.prototype.bind=function(){this.buffer.bind()};var f=[];return{create:function(t,e){function s(t){if(t)if(\\\"number\\\"==typeof t)l(t),f.primType=4,f.vertCount=0|t,f.type=5121;else{var e=null,r=35044,n=-1,i=-1,o=0,h=0;Array.isArray(t)||$(t)||u(t)?e=t:(\\\"data\\\"in t&&(e=t.data),\\\"usage\\\"in t&&(r=nt[t.usage]),\\\"primitive\\\"in t&&(n=st[t.primitive]),\\\"count\\\"in t&&(i=0|t.count),\\\"type\\\"in t&&(h=c[t.type]),\\\"length\\\"in t?o=0|t.length:(o=i,5123===h||5122===h?o*=2:5125!==h&&5124!==h||(o*=4))),a(f,e,r,n,i,o,h)}else l(),f.primType=4,f.vertCount=0,f.type=5121;return s}var l=r.create(null,34963,!0),f=new i(l._buffer);return n.elementsCount++,s(t),s._reglType=\\\"elements\\\",s._elements=f,s.subdata=function(t,e){return l.subdata(t,e),s},s.destroy=function(){o(f)},s},createStream:function(t){var e=f.pop();return e||(e=new i(r.create(null,34963,!0,!1)._buffer)),a(e,t,35040,-1,-1,0,0),e},destroyStream:function(t){f.push(t)},getElements:function(t){return\\\"function\\\"==typeof t&&t._elements instanceof i?t._elements:null},clear:function(){Q(s).forEach(o)}}}function y(t){for(var e=J.allocType(5123,t.length),r=0;r<t.length;++r)if(isNaN(t[r]))e[r]=65535;else if(1/0===t[r])e[r]=31744;else if(-1/0===t[r])e[r]=64512;else{lt[0]=t[r];var n=(a=ut[0])>>>31<<15,i=(a<<1>>>24)-127,a=a>>13&1023;e[r]=-24>i?n:-14>i?n+(a+1024>>-14-i):15<i?n+31744:n+(i+15<<10)+a}return e}function m(t){return Array.isArray(t)||$(t)}function x(t){return\\\"[object \\\"+t+\\\"]\\\"}function b(t){return Array.isArray(t)&&(0===t.length||\\\"number\\\"==typeof t[0])}function _(t){return!(!Array.isArray(t)||0===t.length||!m(t[0]))}function w(t){return Object.prototype.toString.call(t)}function T(t){if(!t)return!1;var e=w(t);return 0<=xt.indexOf(e)||b(t)||_(t)||u(t)}function k(t,e){36193===t.type?(t.data=y(e),J.freeType(e)):t.data=e}function A(t,e,r,n,i,a){if(t=void 0!==_t[t]?_t[t]:ht[t]*bt[e],a&&(t*=6),i){for(n=0;1<=r;)n+=t*r*r,r/=2;return n}return t*r*n}function M(t,e,r,n,i,a,o){function s(){this.format=this.internalformat=6408,this.type=5121,this.flipY=this.premultiplyAlpha=this.compressed=!1,this.unpackAlignment=1,this.colorSpace=37444,this.channels=this.height=this.width=0}function l(t,e){t.internalformat=e.internalformat,t.format=e.format,t.type=e.type,t.compressed=e.compressed,t.premultiplyAlpha=e.premultiplyAlpha,t.flipY=e.flipY,t.unpackAlignment=e.unpackAlignment,t.colorSpace=e.colorSpace,t.width=e.width,t.height=e.height,t.channels=e.channels}function c(t,e){if(\\\"object\\\"==typeof e&&e){\\\"premultiplyAlpha\\\"in e&&(t.premultiplyAlpha=e.premultiplyAlpha),\\\"flipY\\\"in e&&(t.flipY=e.flipY),\\\"alignment\\\"in e&&(t.unpackAlignment=e.alignment),\\\"colorSpace\\\"in e&&(t.colorSpace=V[e.colorSpace]),\\\"type\\\"in e&&(t.type=H[e.type]);var r=t.width,n=t.height,i=t.channels,a=!1;\\\"shape\\\"in e?(r=e.shape[0],n=e.shape[1],3===e.shape.length&&(i=e.shape[2],a=!0)):(\\\"radius\\\"in e&&(r=n=e.radius),\\\"width\\\"in e&&(r=e.width),\\\"height\\\"in e&&(n=e.height),\\\"channels\\\"in e&&(i=e.channels,a=!0)),t.width=0|r,t.height=0|n,t.channels=0|i,r=!1,\\\"format\\\"in e&&(r=e.format,n=t.internalformat=q[r],t.format=at[n],r in H&&!(\\\"type\\\"in e)&&(t.type=H[r]),r in Z&&(t.compressed=!0),r=!0),!a&&r?t.channels=ht[t.format]:a&&!r&&t.channels!==ft[t.format]&&(t.format=t.internalformat=ft[t.channels])}}function f(e){t.pixelStorei(37440,e.flipY),t.pixelStorei(37441,e.premultiplyAlpha),t.pixelStorei(37443,e.colorSpace),t.pixelStorei(3317,e.unpackAlignment)}function h(){s.call(this),this.yOffset=this.xOffset=0,this.data=null,this.needsFree=!1,this.element=null,this.needsCopy=!1}function p(t,e){var r=null;if(T(e)?r=e:e&&(c(t,e),\\\"x\\\"in e&&(t.xOffset=0|e.x),\\\"y\\\"in e&&(t.yOffset=0|e.y),T(e.data)&&(r=e.data)),e.copy){var n=i.viewportWidth,a=i.viewportHeight;t.width=t.width||n-t.xOffset,t.height=t.height||a-t.yOffset,t.needsCopy=!0}else if(r){if($(r))t.channels=t.channels||4,t.data=r,\\\"type\\\"in e||5121!==t.type||(t.type=0|et[Object.prototype.toString.call(r)]);else if(b(r)){switch(t.channels=t.channels||4,a=(n=r).length,t.type){case 5121:case 5123:case 5125:case 5126:(a=J.allocType(t.type,a)).set(n),t.data=a;break;case 36193:t.data=y(n)}t.alignment=1,t.needsFree=!0}else if(u(r)){n=r.data,Array.isArray(n)||5121!==t.type||(t.type=0|et[Object.prototype.toString.call(n)]),a=r.shape;var o,s,l,f,h=r.stride;3===a.length?(l=a[2],f=h[2]):f=l=1,o=a[0],s=a[1],a=h[0],h=h[1],t.alignment=1,t.width=o,t.height=s,t.channels=l,t.format=t.internalformat=ft[l],t.needsFree=!0,o=f,r=r.offset,l=t.width,f=t.height,s=t.channels;for(var p=J.allocType(36193===t.type?5126:t.type,l*f*s),d=0,v=0;v<f;++v)for(var g=0;g<l;++g)for(var x=0;x<s;++x)p[d++]=n[a*g+h*v+o*x+r];k(t,p)}else if(w(r)===pt||w(r)===dt||w(r)===vt)w(r)===pt||w(r)===dt?t.element=r:t.element=r.canvas,t.width=t.element.width,t.height=t.element.height,t.channels=4;else if(w(r)===gt)t.element=r,t.width=r.width,t.height=r.height,t.channels=4;else if(w(r)===yt)t.element=r,t.width=r.naturalWidth,t.height=r.naturalHeight,t.channels=4;else if(w(r)===mt)t.element=r,t.width=r.videoWidth,t.height=r.videoHeight,t.channels=4;else if(_(r)){for(n=t.width||r[0].length,a=t.height||r.length,h=t.channels,h=m(r[0][0])?h||r[0][0].length:h||1,o=tt.shape(r),l=1,f=0;f<o.length;++f)l*=o[f];l=J.allocType(36193===t.type?5126:t.type,l),tt.flatten(r,o,\\\"\\\",l),k(t,l),t.alignment=1,t.width=n,t.height=a,t.channels=h,t.format=t.internalformat=ft[h],t.needsFree=!0}}else t.width=t.width||1,t.height=t.height||1,t.channels=t.channels||4}function d(e,r,i,a,o){var s=e.element,l=e.data,u=e.internalformat,c=e.format,h=e.type,p=e.width,d=e.height;f(e),s?t.texSubImage2D(r,o,i,a,c,h,s):e.compressed?t.compressedTexSubImage2D(r,o,i,a,u,p,d,l):e.needsCopy?(n(),t.copyTexSubImage2D(r,o,i,a,e.xOffset,e.yOffset,p,d)):t.texSubImage2D(r,o,i,a,p,d,c,h,l)}function v(){return ot.pop()||new h}function g(t){t.needsFree&&J.freeType(t.data),h.call(t),ot.push(t)}function x(){s.call(this),this.genMipmaps=!1,this.mipmapHint=4352,this.mipmask=0,this.images=Array(16)}function M(t,e,r){var n=t.images[0]=v();t.mipmask=1,n.width=t.width=e,n.height=t.height=r,n.channels=t.channels=4}function S(t,e){var r=null;if(T(e))l(r=t.images[0]=v(),t),p(r,e),t.mipmask=1;else if(c(t,e),Array.isArray(e.mipmap))for(var n=e.mipmap,i=0;i<n.length;++i)l(r=t.images[i]=v(),t),r.width>>=i,r.height>>=i,p(r,n[i]),t.mipmask|=1<<i;else l(r=t.images[0]=v(),t),p(r,e),t.mipmask=1;l(t,t.images[0])}function E(e,r){for(var i=e.images,a=0;a<i.length&&i[a];++a){var o=i[a],s=r,l=a,u=o.element,c=o.data,h=o.internalformat,p=o.format,d=o.type,v=o.width,g=o.height;f(o),u?t.texImage2D(s,l,p,p,d,u):o.compressed?t.compressedTexImage2D(s,l,h,v,g,0,c):o.needsCopy?(n(),t.copyTexImage2D(s,l,p,o.xOffset,o.yOffset,v,g,0)):t.texImage2D(s,l,p,v,g,0,p,d,c||null)}}function L(){var t=st.pop()||new x;s.call(t);for(var e=t.mipmask=0;16>e;++e)t.images[e]=null;return t}function C(t){for(var e=t.images,r=0;r<e.length;++r)e[r]&&g(e[r]),e[r]=null;st.push(t)}function P(){this.magFilter=this.minFilter=9728,this.wrapT=this.wrapS=33071,this.anisotropic=1,this.genMipmaps=!1,this.mipmapHint=4352}function O(t,e){\\\"min\\\"in e&&(t.minFilter=U[e.min],0<=ct.indexOf(t.minFilter)&&!(\\\"faces\\\"in e)&&(t.genMipmaps=!0)),\\\"mag\\\"in e&&(t.magFilter=j[e.mag]);var r=t.wrapS,n=t.wrapT;if(\\\"wrap\\\"in e){var i=e.wrap;\\\"string\\\"==typeof i?r=n=N[i]:Array.isArray(i)&&(r=N[i[0]],n=N[i[1]])}else\\\"wrapS\\\"in e&&(r=N[e.wrapS]),\\\"wrapT\\\"in e&&(n=N[e.wrapT]);if(t.wrapS=r,t.wrapT=n,\\\"anisotropic\\\"in e&&(t.anisotropic=e.anisotropic),\\\"mipmap\\\"in e){switch(r=!1,typeof e.mipmap){case\\\"string\\\":t.mipmapHint=B[e.mipmap],r=t.genMipmaps=!0;break;case\\\"boolean\\\":r=t.genMipmaps=e.mipmap;break;case\\\"object\\\":t.genMipmaps=!1,r=!0}!r||\\\"min\\\"in e||(t.minFilter=9984)}}function I(r,n){t.texParameteri(n,10241,r.minFilter),t.texParameteri(n,10240,r.magFilter),t.texParameteri(n,10242,r.wrapS),t.texParameteri(n,10243,r.wrapT),e.ext_texture_filter_anisotropic&&t.texParameteri(n,34046,r.anisotropic),r.genMipmaps&&(t.hint(33170,r.mipmapHint),t.generateMipmap(n))}function D(e){s.call(this),this.mipmask=0,this.internalformat=6408,this.id=lt++,this.refCount=1,this.target=e,this.texture=t.createTexture(),this.unit=-1,this.bindCount=0,this.texInfo=new P,o.profile&&(this.stats={size:0})}function z(e){t.activeTexture(33984),t.bindTexture(e.target,e.texture)}function R(){var e=bt[0];e?t.bindTexture(e.target,e.texture):t.bindTexture(3553,null)}function F(e){var r=e.texture,n=e.unit,i=e.target;0<=n&&(t.activeTexture(33984+n),t.bindTexture(i,null),bt[n]=null),t.deleteTexture(r),e.texture=null,e.params=null,e.pixels=null,e.refCount=0,delete ut[e.id],a.textureCount--}var B={\\\"don't care\\\":4352,\\\"dont care\\\":4352,nice:4354,fast:4353},N={repeat:10497,clamp:33071,mirror:33648},j={nearest:9728,linear:9729},U=G({mipmap:9987,\\\"nearest mipmap nearest\\\":9984,\\\"linear mipmap nearest\\\":9985,\\\"nearest mipmap linear\\\":9986,\\\"linear mipmap linear\\\":9987},j),V={none:0,browser:37444},H={uint8:5121,rgba4:32819,rgb565:33635,\\\"rgb5 a1\\\":32820},q={alpha:6406,luminance:6409,\\\"luminance alpha\\\":6410,rgb:6407,rgba:6408,rgba4:32854,\\\"rgb5 a1\\\":32855,rgb565:36194},Z={};e.ext_srgb&&(q.srgb=35904,q.srgba=35906),e.oes_texture_float&&(H.float32=H.float=5126),e.oes_texture_half_float&&(H.float16=H[\\\"half float\\\"]=36193),e.webgl_depth_texture&&(G(q,{depth:6402,\\\"depth stencil\\\":34041}),G(H,{uint16:5123,uint32:5125,\\\"depth stencil\\\":34042})),e.webgl_compressed_texture_s3tc&&G(Z,{\\\"rgb s3tc dxt1\\\":33776,\\\"rgba s3tc dxt1\\\":33777,\\\"rgba s3tc dxt3\\\":33778,\\\"rgba s3tc dxt5\\\":33779}),e.webgl_compressed_texture_atc&&G(Z,{\\\"rgb atc\\\":35986,\\\"rgba atc explicit alpha\\\":35987,\\\"rgba atc interpolated alpha\\\":34798}),e.webgl_compressed_texture_pvrtc&&G(Z,{\\\"rgb pvrtc 4bppv1\\\":35840,\\\"rgb pvrtc 2bppv1\\\":35841,\\\"rgba pvrtc 4bppv1\\\":35842,\\\"rgba pvrtc 2bppv1\\\":35843}),e.webgl_compressed_texture_etc1&&(Z[\\\"rgb etc1\\\"]=36196);var Y=Array.prototype.slice.call(t.getParameter(34467));Object.keys(Z).forEach((function(t){var e=Z[t];0<=Y.indexOf(e)&&(q[t]=e)}));var W=Object.keys(q);r.textureFormats=W;var X=[];Object.keys(q).forEach((function(t){X[q[t]]=t}));var K=[];Object.keys(H).forEach((function(t){K[H[t]]=t}));var rt=[];Object.keys(j).forEach((function(t){rt[j[t]]=t}));var nt=[];Object.keys(U).forEach((function(t){nt[U[t]]=t}));var it=[];Object.keys(N).forEach((function(t){it[N[t]]=t}));var at=W.reduce((function(t,r){var n=q[r];return 6409===n||6406===n||6409===n||6410===n||6402===n||34041===n||e.ext_srgb&&(35904===n||35906===n)?t[n]=n:32855===n||0<=r.indexOf(\\\"rgba\\\")?t[n]=6408:t[n]=6407,t}),{}),ot=[],st=[],lt=0,ut={},xt=r.maxTextureUnits,bt=Array(xt).map((function(){return null}));return G(D.prototype,{bind:function(){this.bindCount+=1;var e=this.unit;if(0>e){for(var r=0;r<xt;++r){var n=bt[r];if(n){if(0<n.bindCount)continue;n.unit=-1}bt[r]=this,e=r;break}o.profile&&a.maxTextureUnits<e+1&&(a.maxTextureUnits=e+1),this.unit=e,t.activeTexture(33984+e),t.bindTexture(this.target,this.texture)}return e},unbind:function(){--this.bindCount},decRef:function(){0>=--this.refCount&&F(this)}}),o.profile&&(a.getTotalTextureSize=function(){var t=0;return Object.keys(ut).forEach((function(e){t+=ut[e].stats.size})),t}),{create2D:function(e,r){function n(t,e){var r=i.texInfo;P.call(r);var a=L();return\\\"number\\\"==typeof t?M(a,0|t,\\\"number\\\"==typeof e?0|e:0|t):t?(O(r,t),S(a,t)):M(a,1,1),r.genMipmaps&&(a.mipmask=(a.width<<1)-1),i.mipmask=a.mipmask,l(i,a),i.internalformat=a.internalformat,n.width=a.width,n.height=a.height,z(i),E(a,3553),I(r,3553),R(),C(a),o.profile&&(i.stats.size=A(i.internalformat,i.type,a.width,a.height,r.genMipmaps,!1)),n.format=X[i.internalformat],n.type=K[i.type],n.mag=rt[r.magFilter],n.min=nt[r.minFilter],n.wrapS=it[r.wrapS],n.wrapT=it[r.wrapT],n}var i=new D(3553);return ut[i.id]=i,a.textureCount++,n(e,r),n.subimage=function(t,e,r,a){e|=0,r|=0,a|=0;var o=v();return l(o,i),o.width=0,o.height=0,p(o,t),o.width=o.width||(i.width>>a)-e,o.height=o.height||(i.height>>a)-r,z(i),d(o,3553,e,r,a),R(),g(o),n},n.resize=function(e,r){var a=0|e,s=0|r||a;if(a===i.width&&s===i.height)return n;n.width=i.width=a,n.height=i.height=s,z(i);for(var l=0;i.mipmask>>l;++l){var u=a>>l,c=s>>l;if(!u||!c)break;t.texImage2D(3553,l,i.format,u,c,0,i.format,i.type,null)}return R(),o.profile&&(i.stats.size=A(i.internalformat,i.type,a,s,!1,!1)),n},n._reglType=\\\"texture2d\\\",n._texture=i,o.profile&&(n.stats=i.stats),n.destroy=function(){i.decRef()},n},createCube:function(e,r,n,i,s,u){function f(t,e,r,n,i,a){var s,u=h.texInfo;for(P.call(u),s=0;6>s;++s)y[s]=L();if(\\\"number\\\"!=typeof t&&t){if(\\\"object\\\"==typeof t)if(e)S(y[0],t),S(y[1],e),S(y[2],r),S(y[3],n),S(y[4],i),S(y[5],a);else if(O(u,t),c(h,t),\\\"faces\\\"in t)for(t=t.faces,s=0;6>s;++s)l(y[s],h),S(y[s],t[s]);else for(s=0;6>s;++s)S(y[s],t)}else for(t=0|t||1,s=0;6>s;++s)M(y[s],t,t);for(l(h,y[0]),h.mipmask=u.genMipmaps?(y[0].width<<1)-1:y[0].mipmask,h.internalformat=y[0].internalformat,f.width=y[0].width,f.height=y[0].height,z(h),s=0;6>s;++s)E(y[s],34069+s);for(I(u,34067),R(),o.profile&&(h.stats.size=A(h.internalformat,h.type,f.width,f.height,u.genMipmaps,!0)),f.format=X[h.internalformat],f.type=K[h.type],f.mag=rt[u.magFilter],f.min=nt[u.minFilter],f.wrapS=it[u.wrapS],f.wrapT=it[u.wrapT],s=0;6>s;++s)C(y[s]);return f}var h=new D(34067);ut[h.id]=h,a.cubeCount++;var y=Array(6);return f(e,r,n,i,s,u),f.subimage=function(t,e,r,n,i){r|=0,n|=0,i|=0;var a=v();return l(a,h),a.width=0,a.height=0,p(a,e),a.width=a.width||(h.width>>i)-r,a.height=a.height||(h.height>>i)-n,z(h),d(a,34069+t,r,n,i),R(),g(a),f},f.resize=function(e){if((e|=0)!==h.width){f.width=h.width=e,f.height=h.height=e,z(h);for(var r=0;6>r;++r)for(var n=0;h.mipmask>>n;++n)t.texImage2D(34069+r,n,h.format,e>>n,e>>n,0,h.format,h.type,null);return R(),o.profile&&(h.stats.size=A(h.internalformat,h.type,f.width,f.height,!1,!0)),f}},f._reglType=\\\"textureCube\\\",f._texture=h,o.profile&&(f.stats=h.stats),f.destroy=function(){h.decRef()},f},clear:function(){for(var e=0;e<xt;++e)t.activeTexture(33984+e),t.bindTexture(3553,null),bt[e]=null;Q(ut).forEach(F),a.cubeCount=0,a.textureCount=0},getTexture:function(t){return null},restore:function(){for(var e=0;e<xt;++e){var r=bt[e];r&&(r.bindCount=0,r.unit=-1,bt[e]=null)}Q(ut).forEach((function(e){e.texture=t.createTexture(),t.bindTexture(e.target,e.texture);for(var r=0;32>r;++r)if(0!=(e.mipmask&1<<r))if(3553===e.target)t.texImage2D(3553,r,e.internalformat,e.width>>r,e.height>>r,0,e.internalformat,e.type,null);else for(var n=0;6>n;++n)t.texImage2D(34069+n,r,e.internalformat,e.width>>r,e.height>>r,0,e.internalformat,e.type,null);I(e.texInfo,e.target)}))},refresh:function(){for(var e=0;e<xt;++e){var r=bt[e];r&&(r.bindCount=0,r.unit=-1,bt[e]=null),t.activeTexture(33984+e),t.bindTexture(3553,null),t.bindTexture(34067,null)}}}}function S(t,e,r,n,i,a){function o(t,e,r){this.target=t,this.texture=e,this.renderbuffer=r;var n=t=0;e?(t=e.width,n=e.height):r&&(t=r.width,n=r.height),this.width=t,this.height=n}function s(t){t&&(t.texture&&t.texture._texture.decRef(),t.renderbuffer&&t.renderbuffer._renderbuffer.decRef())}function l(t,e,r){t&&(t.texture?t.texture._texture.refCount+=1:t.renderbuffer._renderbuffer.refCount+=1)}function u(e,r){r&&(r.texture?t.framebufferTexture2D(36160,e,r.target,r.texture._texture.texture,0):t.framebufferRenderbuffer(36160,e,36161,r.renderbuffer._renderbuffer.renderbuffer))}function c(t){var e=3553,r=null,n=null,i=t;return\\\"object\\\"==typeof t&&(i=t.data,\\\"target\\\"in t&&(e=0|t.target)),\\\"texture2d\\\"===(t=i._reglType)||\\\"textureCube\\\"===t?r=i:\\\"renderbuffer\\\"===t&&(n=i,e=36161),new o(e,r,n)}function f(t,e,r,a,s){return r?((t=n.create2D({width:t,height:e,format:a,type:s}))._texture.refCount=0,new o(3553,t,null)):((t=i.create({width:t,height:e,format:a}))._renderbuffer.refCount=0,new o(36161,null,t))}function h(t){return t&&(t.texture||t.renderbuffer)}function p(t,e,r){t&&(t.texture?t.texture.resize(e,r):t.renderbuffer&&t.renderbuffer.resize(e,r),t.width=e,t.height=r)}function d(){this.id=T++,k[this.id]=this,this.framebuffer=t.createFramebuffer(),this.height=this.width=0,this.colorAttachments=[],this.depthStencilAttachment=this.stencilAttachment=this.depthAttachment=null}function v(t){t.colorAttachments.forEach(s),s(t.depthAttachment),s(t.stencilAttachment),s(t.depthStencilAttachment)}function g(e){t.deleteFramebuffer(e.framebuffer),e.framebuffer=null,a.framebufferCount--,delete k[e.id]}function y(e){var n;t.bindFramebuffer(36160,e.framebuffer);var i=e.colorAttachments;for(n=0;n<i.length;++n)u(36064+n,i[n]);for(n=i.length;n<r.maxColorAttachments;++n)t.framebufferTexture2D(36160,36064+n,3553,null,0);t.framebufferTexture2D(36160,33306,3553,null,0),t.framebufferTexture2D(36160,36096,3553,null,0),t.framebufferTexture2D(36160,36128,3553,null,0),u(36096,e.depthAttachment),u(36128,e.stencilAttachment),u(33306,e.depthStencilAttachment),t.checkFramebufferStatus(36160),t.isContextLost(),t.bindFramebuffer(36160,x.next?x.next.framebuffer:null),x.cur=x.next,t.getError()}function m(t,e){function r(t,e){var i,a=0,o=0,s=!0,u=!0;i=null;var p=!0,d=\\\"rgba\\\",g=\\\"uint8\\\",m=1,x=null,w=null,T=null,k=!1;\\\"number\\\"==typeof t?(a=0|t,o=0|e||a):t?(\\\"shape\\\"in t?(a=(o=t.shape)[0],o=o[1]):(\\\"radius\\\"in t&&(a=o=t.radius),\\\"width\\\"in t&&(a=t.width),\\\"height\\\"in t&&(o=t.height)),(\\\"color\\\"in t||\\\"colors\\\"in t)&&(i=t.color||t.colors,Array.isArray(i)),i||(\\\"colorCount\\\"in t&&(m=0|t.colorCount),\\\"colorTexture\\\"in t&&(p=!!t.colorTexture,d=\\\"rgba4\\\"),\\\"colorType\\\"in t&&(g=t.colorType,!p)&&(\\\"half float\\\"===g||\\\"float16\\\"===g?d=\\\"rgba16f\\\":\\\"float\\\"!==g&&\\\"float32\\\"!==g||(d=\\\"rgba32f\\\")),\\\"colorFormat\\\"in t&&(d=t.colorFormat,0<=b.indexOf(d)?p=!0:0<=_.indexOf(d)&&(p=!1))),(\\\"depthTexture\\\"in t||\\\"depthStencilTexture\\\"in t)&&(k=!(!t.depthTexture&&!t.depthStencilTexture)),\\\"depth\\\"in t&&(\\\"boolean\\\"==typeof t.depth?s=t.depth:(x=t.depth,u=!1)),\\\"stencil\\\"in t&&(\\\"boolean\\\"==typeof t.stencil?u=t.stencil:(w=t.stencil,s=!1)),\\\"depthStencil\\\"in t&&(\\\"boolean\\\"==typeof t.depthStencil?s=u=t.depthStencil:(T=t.depthStencil,u=s=!1))):a=o=1;var A=null,M=null,S=null,E=null;if(Array.isArray(i))A=i.map(c);else if(i)A=[c(i)];else for(A=Array(m),i=0;i<m;++i)A[i]=f(a,o,p,d,g);for(a=a||A[0].width,o=o||A[0].height,x?M=c(x):s&&!u&&(M=f(a,o,k,\\\"depth\\\",\\\"uint32\\\")),w?S=c(w):u&&!s&&(S=f(a,o,!1,\\\"stencil\\\",\\\"uint8\\\")),T?E=c(T):!x&&!w&&u&&s&&(E=f(a,o,k,\\\"depth stencil\\\",\\\"depth stencil\\\")),s=null,i=0;i<A.length;++i)l(A[i]),A[i]&&A[i].texture&&(u=kt[A[i].texture._texture.format]*At[A[i].texture._texture.type],null===s&&(s=u));return l(M),l(S),l(E),v(n),n.width=a,n.height=o,n.colorAttachments=A,n.depthAttachment=M,n.stencilAttachment=S,n.depthStencilAttachment=E,r.color=A.map(h),r.depth=h(M),r.stencil=h(S),r.depthStencil=h(E),r.width=n.width,r.height=n.height,y(n),r}var n=new d;return a.framebufferCount++,r(t,e),G(r,{resize:function(t,e){var i=Math.max(0|t,1),a=Math.max(0|e||i,1);if(i===n.width&&a===n.height)return r;for(var o=n.colorAttachments,s=0;s<o.length;++s)p(o[s],i,a);return p(n.depthAttachment,i,a),p(n.stencilAttachment,i,a),p(n.depthStencilAttachment,i,a),n.width=r.width=i,n.height=r.height=a,y(n),r},_reglType:\\\"framebuffer\\\",_framebuffer:n,destroy:function(){g(n),v(n)},use:function(t){x.setFBO({framebuffer:r},t)}})}var x={cur:null,next:null,dirty:!1,setFBO:null},b=[\\\"rgba\\\"],_=[\\\"rgba4\\\",\\\"rgb565\\\",\\\"rgb5 a1\\\"];e.ext_srgb&&_.push(\\\"srgba\\\"),e.ext_color_buffer_half_float&&_.push(\\\"rgba16f\\\",\\\"rgb16f\\\"),e.webgl_color_buffer_float&&_.push(\\\"rgba32f\\\");var w=[\\\"uint8\\\"];e.oes_texture_half_float&&w.push(\\\"half float\\\",\\\"float16\\\"),e.oes_texture_float&&w.push(\\\"float\\\",\\\"float32\\\");var T=0,k={};return G(x,{getFramebuffer:function(t){return\\\"function\\\"==typeof t&&\\\"framebuffer\\\"===t._reglType&&(t=t._framebuffer)instanceof d?t:null},create:m,createCube:function(t){function e(t){var i,a={color:null},o=0,s=null;i=\\\"rgba\\\";var l=\\\"uint8\\\",u=1;if(\\\"number\\\"==typeof t?o=0|t:t?(\\\"shape\\\"in t?o=t.shape[0]:(\\\"radius\\\"in t&&(o=0|t.radius),\\\"width\\\"in t?o=0|t.width:\\\"height\\\"in t&&(o=0|t.height)),(\\\"color\\\"in t||\\\"colors\\\"in t)&&(s=t.color||t.colors,Array.isArray(s)),s||(\\\"colorCount\\\"in t&&(u=0|t.colorCount),\\\"colorType\\\"in t&&(l=t.colorType),\\\"colorFormat\\\"in t&&(i=t.colorFormat)),\\\"depth\\\"in t&&(a.depth=t.depth),\\\"stencil\\\"in t&&(a.stencil=t.stencil),\\\"depthStencil\\\"in t&&(a.depthStencil=t.depthStencil)):o=1,s)if(Array.isArray(s))for(t=[],i=0;i<s.length;++i)t[i]=s[i];else t=[s];else for(t=Array(u),s={radius:o,format:i,type:l},i=0;i<u;++i)t[i]=n.createCube(s);for(a.color=Array(t.length),i=0;i<t.length;++i)u=t[i],o=o||u.width,a.color[i]={target:34069,data:t[i]};for(i=0;6>i;++i){for(u=0;u<t.length;++u)a.color[u].target=34069+i;0<i&&(a.depth=r[0].depth,a.stencil=r[0].stencil,a.depthStencil=r[0].depthStencil),r[i]?r[i](a):r[i]=m(a)}return G(e,{width:o,height:o,color:t})}var r=Array(6);return e(t),G(e,{faces:r,resize:function(t){var n=0|t;if(n===e.width)return e;var i=e.color;for(t=0;t<i.length;++t)i[t].resize(n);for(t=0;6>t;++t)r[t].resize(n);return e.width=e.height=n,e},_reglType:\\\"framebufferCube\\\",destroy:function(){r.forEach((function(t){t.destroy()}))}})},clear:function(){Q(k).forEach(g)},restore:function(){x.cur=null,x.next=null,x.dirty=!0,Q(k).forEach((function(e){e.framebuffer=t.createFramebuffer(),y(e)}))}})}function E(){this.w=this.z=this.y=this.x=this.state=0,this.buffer=null,this.size=0,this.normalized=!1,this.type=5126,this.divisor=this.stride=this.offset=0}function L(t,e,r,n,i,a,o){function s(){this.id=++f,this.attributes=[],this.elements=null,this.ownsElements=!1,this.offset=this.count=0,this.instances=-1,this.primitive=4;var t=e.oes_vertex_array_object;this.vao=t?t.createVertexArrayOES():null,h[this.id]=this,this.buffers=[]}var l=r.maxAttributes,c=Array(l);for(r=0;r<l;++r)c[r]=new E;var f=0,h={},p={Record:E,scope:{},state:c,currentVAO:null,targetVAO:null,restore:e.oes_vertex_array_object?function(){e.oes_vertex_array_object&&Q(h).forEach((function(t){t.refresh()}))}:function(){},createVAO:function(t){function e(t){var n;Array.isArray(t)?(n=t,r.elements&&r.ownsElements&&r.elements.destroy(),r.elements=null,r.ownsElements=!1,r.offset=0,r.count=0,r.instances=-1,r.primitive=4):(t.elements?(n=t.elements,r.ownsElements?(\\\"function\\\"==typeof n&&\\\"elements\\\"===n._reglType?r.elements.destroy():r.elements(n),r.ownsElements=!1):a.getElements(t.elements)?(r.elements=t.elements,r.ownsElements=!1):(r.elements=a.create(t.elements),r.ownsElements=!0)):(r.elements=null,r.ownsElements=!1),n=t.attributes,r.offset=0,r.count=-1,r.instances=-1,r.primitive=4,r.elements&&(r.count=r.elements._elements.vertCount,r.primitive=r.elements._elements.primType),\\\"offset\\\"in t&&(r.offset=0|t.offset),\\\"count\\\"in t&&(r.count=0|t.count),\\\"instances\\\"in t&&(r.instances=0|t.instances),\\\"primitive\\\"in t&&(r.primitive=st[t.primitive])),t={};var o=r.attributes;o.length=n.length;for(var s=0;s<n.length;++s){var l,c=n[s],f=o[s]=new E,h=c.data||c;Array.isArray(h)||$(h)||u(h)?(r.buffers[s]&&(l=r.buffers[s],$(h)&&l._buffer.byteLength>=h.byteLength?l.subdata(h):(l.destroy(),r.buffers[s]=null)),r.buffers[s]||(l=r.buffers[s]=i.create(c,34962,!1,!0)),f.buffer=i.getBuffer(l),f.size=0|f.buffer.dimension,f.normalized=!1,f.type=f.buffer.dtype,f.offset=0,f.stride=0,f.divisor=0,f.state=1,t[s]=1):i.getBuffer(c)?(f.buffer=i.getBuffer(c),f.size=0|f.buffer.dimension,f.normalized=!1,f.type=f.buffer.dtype,f.offset=0,f.stride=0,f.divisor=0,f.state=1):i.getBuffer(c.buffer)?(f.buffer=i.getBuffer(c.buffer),f.size=0|(+c.size||f.buffer.dimension),f.normalized=!!c.normalized||!1,f.type=\\\"type\\\"in c?rt[c.type]:f.buffer.dtype,f.offset=0|(c.offset||0),f.stride=0|(c.stride||0),f.divisor=0|(c.divisor||0),f.state=1):\\\"x\\\"in c&&(f.x=+c.x||0,f.y=+c.y||0,f.z=+c.z||0,f.w=+c.w||0,f.state=2)}for(l=0;l<r.buffers.length;++l)!t[l]&&r.buffers[l]&&(r.buffers[l].destroy(),r.buffers[l]=null);return r.refresh(),e}var r=new s;return n.vaoCount+=1,e.destroy=function(){for(var t=0;t<r.buffers.length;++t)r.buffers[t]&&r.buffers[t].destroy();r.buffers.length=0,r.ownsElements&&(r.elements.destroy(),r.elements=null,r.ownsElements=!1),r.destroy()},e._vao=r,e._reglType=\\\"vao\\\",e(t)},getVAO:function(t){return\\\"function\\\"==typeof t&&t._vao?t._vao:null},destroyBuffer:function(e){for(var r=0;r<c.length;++r){var n=c[r];n.buffer===e&&(t.disableVertexAttribArray(r),n.buffer=null)}},setVAO:e.oes_vertex_array_object?function(t){if(t!==p.currentVAO){var r=e.oes_vertex_array_object;t?r.bindVertexArrayOES(t.vao):r.bindVertexArrayOES(null),p.currentVAO=t}}:function(r){if(r!==p.currentVAO){if(r)r.bindAttrs();else{for(var n=e.angle_instanced_arrays,i=0;i<c.length;++i){var a=c[i];a.buffer?(t.enableVertexAttribArray(i),a.buffer.bind(),t.vertexAttribPointer(i,a.size,a.type,a.normalized,a.stride,a.offfset),n&&a.divisor&&n.vertexAttribDivisorANGLE(i,a.divisor)):(t.disableVertexAttribArray(i),t.vertexAttrib4f(i,a.x,a.y,a.z,a.w))}o.elements?t.bindBuffer(34963,o.elements.buffer.buffer):t.bindBuffer(34963,null)}p.currentVAO=r}},clear:e.oes_vertex_array_object?function(){Q(h).forEach((function(t){t.destroy()}))}:function(){}};return s.prototype.bindAttrs=function(){for(var r=e.angle_instanced_arrays,n=this.attributes,i=0;i<n.length;++i){var o=n[i];o.buffer?(t.enableVertexAttribArray(i),t.bindBuffer(34962,o.buffer.buffer),t.vertexAttribPointer(i,o.size,o.type,o.normalized,o.stride,o.offset),r&&o.divisor&&r.vertexAttribDivisorANGLE(i,o.divisor)):(t.disableVertexAttribArray(i),t.vertexAttrib4f(i,o.x,o.y,o.z,o.w))}for(r=n.length;r<l;++r)t.disableVertexAttribArray(r);(r=a.getElements(this.elements))?t.bindBuffer(34963,r.buffer.buffer):t.bindBuffer(34963,null)},s.prototype.refresh=function(){var t=e.oes_vertex_array_object;t&&(t.bindVertexArrayOES(this.vao),this.bindAttrs(),p.currentVAO=null,t.bindVertexArrayOES(null))},s.prototype.destroy=function(){if(this.vao){var t=e.oes_vertex_array_object;this===p.currentVAO&&(p.currentVAO=null,t.bindVertexArrayOES(null)),t.deleteVertexArrayOES(this.vao),this.vao=null}this.ownsElements&&(this.elements.destroy(),this.elements=null,this.ownsElements=!1),h[this.id]&&(delete h[this.id],--n.vaoCount)},p}function C(t,e,r,n){function i(t,e,r,n){this.name=t,this.id=e,this.location=r,this.info=n}function a(t,e){for(var r=0;r<t.length;++r)if(t[r].id===e.id)return void(t[r].location=e.location);t.push(e)}function o(r,n,i){if(!(o=(i=35632===r?u:c)[n])){var a=e.str(n),o=t.createShader(r);t.shaderSource(o,a),t.compileShader(o),i[n]=o}return o}function s(t,e){this.id=p++,this.fragId=t,this.vertId=e,this.program=null,this.uniforms=[],this.attributes=[],this.refCount=1,n.profile&&(this.stats={uniformsCount:0,attributesCount:0})}function l(r,s,l){var u;u=o(35632,r.fragId);var c=o(35633,r.vertId);if(s=r.program=t.createProgram(),t.attachShader(s,u),t.attachShader(s,c),l)for(u=0;u<l.length;++u)c=l[u],t.bindAttribLocation(s,c[0],c[1]);t.linkProgram(s),c=t.getProgramParameter(s,35718),n.profile&&(r.stats.uniformsCount=c);var f=r.uniforms;for(u=0;u<c;++u)if(l=t.getActiveUniform(s,u))if(1<l.size)for(var h=0;h<l.size;++h){var p=l.name.replace(\\\"[0]\\\",\\\"[\\\"+h+\\\"]\\\");a(f,new i(p,e.id(p),t.getUniformLocation(s,p),l))}else a(f,new i(l.name,e.id(l.name),t.getUniformLocation(s,l.name),l));for(c=t.getProgramParameter(s,35721),n.profile&&(r.stats.attributesCount=c),r=r.attributes,u=0;u<c;++u)(l=t.getActiveAttrib(s,u))&&a(r,new i(l.name,e.id(l.name),t.getAttribLocation(s,l.name),l))}var u={},c={},f={},h=[],p=0;return n.profile&&(r.getMaxUniformsCount=function(){var t=0;return h.forEach((function(e){e.stats.uniformsCount>t&&(t=e.stats.uniformsCount)})),t},r.getMaxAttributesCount=function(){var t=0;return h.forEach((function(e){e.stats.attributesCount>t&&(t=e.stats.attributesCount)})),t}),{clear:function(){var e=t.deleteShader.bind(t);Q(u).forEach(e),u={},Q(c).forEach(e),c={},h.forEach((function(e){t.deleteProgram(e.program)})),h.length=0,f={},r.shaderCount=0},program:function(e,n,i,a){var o=f[n];o||(o=f[n]={});var p=o[e];if(p&&(p.refCount++,!a))return p;var d=new s(n,e);return r.shaderCount++,l(d,i,a),p||(o[e]=d),h.push(d),G(d,{destroy:function(){if(d.refCount--,0>=d.refCount){t.deleteProgram(d.program);var e=h.indexOf(d);h.splice(e,1),r.shaderCount--}0>=o[d.vertId].refCount&&(t.deleteShader(c[d.vertId]),delete c[d.vertId],delete f[d.fragId][d.vertId]),Object.keys(f[d.fragId]).length||(t.deleteShader(u[d.fragId]),delete u[d.fragId],delete f[d.fragId])}})},restore:function(){u={},c={};for(var t=0;t<h.length;++t)l(h[t],null,h[t].attributes.map((function(t){return[t.location,t.name]})))},shader:o,frag:-1,vert:-1}}function P(t,e,r,n,i,a,o){function s(i){var a;a=null===e.next?5121:e.next.colorAttachments[0].texture._texture.type;var o=0,s=0,l=n.framebufferWidth,u=n.framebufferHeight,c=null;return $(i)?c=i:i&&(o=0|i.x,s=0|i.y,l=0|(i.width||n.framebufferWidth-o),u=0|(i.height||n.framebufferHeight-s),c=i.data||null),r(),i=l*u*4,c||(5121===a?c=new Uint8Array(i):5126===a&&(c=c||new Float32Array(i))),t.pixelStorei(3333,4),t.readPixels(o,s,l,u,6408,a,c),c}return function(t){return t&&\\\"framebuffer\\\"in t?function(t){var r;return e.setFBO({framebuffer:t.framebuffer},(function(){r=s(t)})),r}(t):s(t)}}function O(t,e){return t>>>e|t<<32-e}function I(t,e){var r=(65535&t)+(65535&e);return(t>>16)+(e>>16)+(r>>16)<<16|65535&r}function D(t){return Array.prototype.slice.call(t)}function z(t){return D(t).join(\\\"\\\")}function R(t){function e(){var t=[],e=[];return G((function(){t.push.apply(t,D(arguments))}),{def:function(){var r=\\\"v\\\"+i++;return e.push(r),0<arguments.length&&(t.push(r,\\\"=\\\"),t.push.apply(t,D(arguments)),t.push(\\\";\\\")),r},toString:function(){return z([0<e.length?\\\"var \\\"+e.join(\\\",\\\")+\\\";\\\":\\\"\\\",z(t)])}})}function r(){function t(t,e){n(t,e,\\\"=\\\",r.def(t,e),\\\";\\\")}var r=e(),n=e(),i=r.toString,a=n.toString;return G((function(){r.apply(r,D(arguments))}),{def:r.def,entry:r,exit:n,save:t,set:function(e,n,i){t(e,n),r(e,n,\\\"=\\\",i,\\\";\\\")},toString:function(){return i()+a()}})}var n=t&&t.cache,i=0,a=[],o=[],s=[],l=e(),u={};return{global:l,link:function(t,e){var r=e&&e.stable;if(!r)for(var n=0;n<o.length;++n)if(o[n]===t&&!s[n])return a[n];return n=\\\"g\\\"+i++,a.push(n),o.push(t),s.push(r),n},block:e,proc:function(t,e){function n(){var t=\\\"a\\\"+i.length;return i.push(t),t}var i=[];e=e||0;for(var a=0;a<e;++a)n();var o=(a=r()).toString;return u[t]=G(a,{arg:n,toString:function(){return z([\\\"function(\\\",i.join(),\\\"){\\\",o(),\\\"}\\\"])}})},scope:r,cond:function(){var t=z(arguments),e=r(),n=r(),i=e.toString,a=n.toString;return G(e,{then:function(){return e.apply(e,D(arguments)),this},else:function(){return n.apply(n,D(arguments)),this},toString:function(){var e=a();return e&&(e=\\\"else{\\\"+e+\\\"}\\\"),z([\\\"if(\\\",t,\\\"){\\\",i(),\\\"}\\\",e])}})},compile:function(){var t=['\\\"use strict\\\";',l,\\\"return {\\\"];Object.keys(u).forEach((function(e){t.push('\\\"',e,'\\\":',u[e].toString(),\\\",\\\")})),t.push(\\\"}\\\");var e,r=z(t).replace(/;/g,\\\";\\\\n\\\").replace(/}/g,\\\"}\\\\n\\\").replace(/{/g,\\\"{\\\\n\\\");return n&&(e=function(t){for(var e,r=\\\"\\\",n=0;n<t.length;n++)e=t.charCodeAt(n),r+=\\\"0123456789abcdef\\\".charAt(e>>>4&15)+\\\"0123456789abcdef\\\".charAt(15&e);return r}(function(t){for(var e=Array(t.length>>2),r=0;r<e.length;r++)e[r]=0;for(r=0;r<8*t.length;r+=8)e[r>>5]|=(255&t.charCodeAt(r/8))<<24-r%32;var n,i,a,o,s,l,u,c,f,h,p,d=8*t.length;for(t=[1779033703,-1150833019,1013904242,-1521486534,1359893119,-1694144372,528734635,1541459225],r=Array(64),e[d>>5]|=128<<24-d%32,e[15+(d+64>>9<<4)]=d,c=0;c<e.length;c+=16){for(d=t[0],n=t[1],i=t[2],a=t[3],o=t[4],s=t[5],l=t[6],u=t[7],f=0;64>f;f++){var v;16>f?r[f]=e[f+c]:(h=f,p=I(p=O(p=r[f-2],17)^O(p,19)^p>>>10,r[f-7]),v=O(v=r[f-15],7)^O(v,18)^v>>>3,r[h]=I(I(p,v),r[f-16])),h=I(I(I(I(u,h=O(h=o,6)^O(h,11)^O(h,25)),o&s^~o&l),Mt[f]),r[f]),p=I(u=O(u=d,2)^O(u,13)^O(u,22),d&n^d&i^n&i),u=l,l=s,s=o,o=I(a,h),a=i,i=n,n=d,d=I(h,p)}t[0]=I(d,t[0]),t[1]=I(n,t[1]),t[2]=I(i,t[2]),t[3]=I(a,t[3]),t[4]=I(o,t[4]),t[5]=I(s,t[5]),t[6]=I(l,t[6]),t[7]=I(u,t[7])}for(e=\\\"\\\",r=0;r<32*t.length;r+=8)e+=String.fromCharCode(t[r>>5]>>>24-r%32&255);return e}(function(t){for(var e,r,n=\\\"\\\",i=-1;++i<t.length;)e=t.charCodeAt(i),r=i+1<t.length?t.charCodeAt(i+1):0,55296<=e&&56319>=e&&56320<=r&&57343>=r&&(e=65536+((1023&e)<<10)+(1023&r),i++),127>=e?n+=String.fromCharCode(e):2047>=e?n+=String.fromCharCode(192|e>>>6&31,128|63&e):65535>=e?n+=String.fromCharCode(224|e>>>12&15,128|e>>>6&63,128|63&e):2097151>=e&&(n+=String.fromCharCode(240|e>>>18&7,128|e>>>12&63,128|e>>>6&63,128|63&e));return n}(r))),n[e])?n[e].apply(null,o):(r=Function.apply(null,a.concat(r)),n&&(n[e]=r),r.apply(null,o))}}}function F(t){return Array.isArray(t)||$(t)||u(t)}function B(t){return t.sort((function(t,e){return\\\"viewport\\\"===t?-1:\\\"viewport\\\"===e?1:t<e?-1:1}))}function N(t,e,r,n){this.thisDep=t,this.contextDep=e,this.propDep=r,this.append=n}function j(t){return t&&!(t.thisDep||t.contextDep||t.propDep)}function U(t){return new N(!1,!1,!1,t)}function V(t,e){var r=t.type;if(0===r)return new N(!0,1<=(r=t.data.length),2<=r,e);if(4===r)return new N((r=t.data).thisDep,r.contextDep,r.propDep,e);if(5===r)return new N(!1,!1,!1,e);if(6===r){for(var n=r=!1,i=!1,a=0;a<t.data.length;++a){var o=t.data[a];1===o.type?i=!0:2===o.type?n=!0:3===o.type?r=!0:0===o.type?(r=!0,1<=(o=o.data)&&(n=!0),2<=o&&(i=!0)):4===o.type&&(r=r||o.data.thisDep,n=n||o.data.contextDep,i=i||o.data.propDep)}return new N(r,n,i,e)}return new N(3===r,2===r,1===r,e)}function H(t,e,r,n,i,a,s,l,u,c,f,h,p,d,v,g){function y(t){return t.replace(\\\".\\\",\\\"_\\\")}function x(t,e,r){var n=y(t);at.push(t),it[n]=nt[n]=!!r,ot[n]=e}function b(t,e,r){var n=y(t);at.push(t),Array.isArray(r)?(nt[n]=r.slice(),it[n]=r.slice()):nt[n]=it[n]=r,lt[n]=e}function _(){var t=R({cache:v}),r=t.link,n=t.global;t.id=ft++,t.batchId=\\\"0\\\";var i=r(ut),a=t.shared={props:\\\"a0\\\"};Object.keys(ut).forEach((function(t){a[t]=n.def(i,\\\".\\\",t)}));var o=t.next={},s=t.current={};Object.keys(lt).forEach((function(t){Array.isArray(nt[t])&&(o[t]=n.def(a.next,\\\".\\\",t),s[t]=n.def(a.current,\\\".\\\",t))}));var l=t.constants={};Object.keys(ct).forEach((function(t){l[t]=n.def(JSON.stringify(ct[t]))})),t.invoke=function(e,n){switch(n.type){case 0:var i=[\\\"this\\\",a.context,a.props,t.batchId];return e.def(r(n.data),\\\".call(\\\",i.slice(0,Math.max(n.data.length+1,4)),\\\")\\\");case 1:return e.def(a.props,n.data);case 2:return e.def(a.context,n.data);case 3:return e.def(\\\"this\\\",n.data);case 4:return n.data.append(t,e),n.data.ref;case 5:return n.data.toString();case 6:return n.data.map((function(r){return t.invoke(e,r)}))}},t.attribCache={};var u={};return t.scopeAttrib=function(t){if((t=e.id(t))in u)return u[t];var n=c.scope[t];return n||(n=c.scope[t]=new K),u[t]=r(n)},t}function w(t,e){var r=t.static,n=t.dynamic;if(\\\"framebuffer\\\"in r){var i=r.framebuffer;return i?(i=l.getFramebuffer(i),U((function(t,e){var r=t.link(i),n=t.shared;return e.set(n.framebuffer,\\\".next\\\",r),n=n.context,e.set(n,\\\".framebufferWidth\\\",r+\\\".width\\\"),e.set(n,\\\".framebufferHeight\\\",r+\\\".height\\\"),r}))):U((function(t,e){var r=t.shared;return e.set(r.framebuffer,\\\".next\\\",\\\"null\\\"),r=r.context,e.set(r,\\\".framebufferWidth\\\",r+\\\".drawingBufferWidth\\\"),e.set(r,\\\".framebufferHeight\\\",r+\\\".drawingBufferHeight\\\"),\\\"null\\\"}))}if(\\\"framebuffer\\\"in n){var a=n.framebuffer;return V(a,(function(t,e){var r=t.invoke(e,a),n=t.shared,i=n.framebuffer;return r=e.def(i,\\\".getFramebuffer(\\\",r,\\\")\\\"),e.set(i,\\\".next\\\",r),n=n.context,e.set(n,\\\".framebufferWidth\\\",r+\\\"?\\\"+r+\\\".width:\\\"+n+\\\".drawingBufferWidth\\\"),e.set(n,\\\".framebufferHeight\\\",r+\\\"?\\\"+r+\\\".height:\\\"+n+\\\".drawingBufferHeight\\\"),r}))}return null}function T(t,r,n){function i(t){if(t in a){var r=e.id(a[t]);return(t=U((function(){return r}))).id=r,t}if(t in o){var n=o[t];return V(n,(function(t,e){var r=t.invoke(e,n);return e.def(t.shared.strings,\\\".id(\\\",r,\\\")\\\")}))}return null}var a=t.static,o=t.dynamic,s=i(\\\"frag\\\"),l=i(\\\"vert\\\"),u=null;return j(s)&&j(l)?(u=f.program(l.id,s.id,null,n),t=U((function(t,e){return t.link(u)}))):t=new N(s&&s.thisDep||l&&l.thisDep,s&&s.contextDep||l&&l.contextDep,s&&s.propDep||l&&l.propDep,(function(t,e){var r,n,i=t.shared.shader;return r=s?s.append(t,e):e.def(i,\\\".\\\",\\\"frag\\\"),n=l?l.append(t,e):e.def(i,\\\".\\\",\\\"vert\\\"),e.def(i+\\\".program(\\\"+n+\\\",\\\"+r+\\\")\\\")})),{frag:s,vert:l,progVar:t,program:u}}function k(t,e){function r(t,e){if(t in n){var r=0|n[t];return e?o.offset=r:o.instances=r,U((function(t,n){return e&&(t.OFFSET=r),r}))}if(t in i){var a=i[t];return V(a,(function(t,r){var n=t.invoke(r,a);return e&&(t.OFFSET=n),n}))}if(e){if(u)return U((function(t,e){return t.OFFSET=0}));if(s)return new N(l.thisDep,l.contextDep,l.propDep,(function(t,e){return e.def(t.shared.vao+\\\".currentVAO?\\\"+t.shared.vao+\\\".currentVAO.offset:0\\\")}))}else if(s)return new N(l.thisDep,l.contextDep,l.propDep,(function(t,e){return e.def(t.shared.vao+\\\".currentVAO?\\\"+t.shared.vao+\\\".currentVAO.instances:-1\\\")}));return null}var n=t.static,i=t.dynamic,o={},s=!1,l=function(){if(\\\"vao\\\"in n){var t=n.vao;return null!==t&&null===c.getVAO(t)&&(t=c.createVAO(t)),s=!0,o.vao=t,U((function(e){var r=c.getVAO(t);return r?e.link(r):\\\"null\\\"}))}if(\\\"vao\\\"in i){s=!0;var e=i.vao;return V(e,(function(t,r){var n=t.invoke(r,e);return r.def(t.shared.vao+\\\".getVAO(\\\"+n+\\\")\\\")}))}return null}(),u=!1,f=function(){if(\\\"elements\\\"in n){var t=n.elements;if(o.elements=t,F(t)){var e=o.elements=a.create(t,!0);t=a.getElements(e),u=!0}else t&&(t=a.getElements(t),u=!0);return e=U((function(e,r){if(t){var n=e.link(t);return e.ELEMENTS=n}return e.ELEMENTS=null})),e.value=t,e}if(\\\"elements\\\"in i){u=!0;var r=i.elements;return V(r,(function(t,e){var n=(i=t.shared).isBufferArgs,i=i.elements,a=t.invoke(e,r),o=e.def(\\\"null\\\");return n=e.def(n,\\\"(\\\",a,\\\")\\\"),a=t.cond(n).then(o,\\\"=\\\",i,\\\".createStream(\\\",a,\\\");\\\").else(o,\\\"=\\\",i,\\\".getElements(\\\",a,\\\");\\\"),e.entry(a),e.exit(t.cond(n).then(i,\\\".destroyStream(\\\",o,\\\");\\\")),t.ELEMENTS=o}))}return s?new N(l.thisDep,l.contextDep,l.propDep,(function(t,e){return e.def(t.shared.vao+\\\".currentVAO?\\\"+t.shared.elements+\\\".getElements(\\\"+t.shared.vao+\\\".currentVAO.elements):null\\\")})):null}(),h=r(\\\"offset\\\",!0),p=function(){if(\\\"primitive\\\"in n){var t=n.primitive;return o.primitive=t,U((function(e,r){return st[t]}))}if(\\\"primitive\\\"in i){var e=i.primitive;return V(e,(function(t,r){var n=t.constants.primTypes,i=t.invoke(r,e);return r.def(n,\\\"[\\\",i,\\\"]\\\")}))}return u?j(f)?f.value?U((function(t,e){return e.def(t.ELEMENTS,\\\".primType\\\")})):U((function(){return 4})):new N(f.thisDep,f.contextDep,f.propDep,(function(t,e){var r=t.ELEMENTS;return e.def(r,\\\"?\\\",r,\\\".primType:\\\",4)})):s?new N(l.thisDep,l.contextDep,l.propDep,(function(t,e){return e.def(t.shared.vao+\\\".currentVAO?\\\"+t.shared.vao+\\\".currentVAO.primitive:4\\\")})):null}(),d=function(){if(\\\"count\\\"in n){var t=0|n.count;return o.count=t,U((function(){return t}))}if(\\\"count\\\"in i){var e=i.count;return V(e,(function(t,r){return t.invoke(r,e)}))}return u?j(f)?f?h?new N(h.thisDep,h.contextDep,h.propDep,(function(t,e){return e.def(t.ELEMENTS,\\\".vertCount-\\\",t.OFFSET)})):U((function(t,e){return e.def(t.ELEMENTS,\\\".vertCount\\\")})):U((function(){return-1})):new N(f.thisDep||h.thisDep,f.contextDep||h.contextDep,f.propDep||h.propDep,(function(t,e){var r=t.ELEMENTS;return t.OFFSET?e.def(r,\\\"?\\\",r,\\\".vertCount-\\\",t.OFFSET,\\\":-1\\\"):e.def(r,\\\"?\\\",r,\\\".vertCount:-1\\\")})):s?new N(l.thisDep,l.contextDep,l.propDep,(function(t,e){return e.def(t.shared.vao,\\\".currentVAO?\\\",t.shared.vao,\\\".currentVAO.count:-1\\\")})):null}(),v=r(\\\"instances\\\",!1);return{elements:f,primitive:p,count:d,instances:v,offset:h,vao:l,vaoActive:s,elementsActive:u,static:o}}function A(t,r){var n=t.static,a=t.dynamic,o={};return Object.keys(n).forEach((function(t){var r=n[t],a=e.id(t),s=new K;if(F(r))s.state=1,s.buffer=i.getBuffer(i.create(r,34962,!1,!0)),s.type=0;else if(u=i.getBuffer(r))s.state=1,s.buffer=u,s.type=0;else if(\\\"constant\\\"in r){var l=r.constant;s.buffer=\\\"null\\\",s.state=2,\\\"number\\\"==typeof l?s.x=l:St.forEach((function(t,e){e<l.length&&(s[t]=l[e])}))}else{var u=F(r.buffer)?i.getBuffer(i.create(r.buffer,34962,!1,!0)):i.getBuffer(r.buffer),c=0|r.offset,f=0|r.stride,h=0|r.size,p=!!r.normalized,d=0;\\\"type\\\"in r&&(d=rt[r.type]),r=0|r.divisor,s.buffer=u,s.state=1,s.size=h,s.normalized=p,s.type=d||u.dtype,s.offset=c,s.stride=f,s.divisor=r}o[t]=U((function(t,e){var r=t.attribCache;if(a in r)return r[a];var n={isStream:!1};return Object.keys(s).forEach((function(t){n[t]=s[t]})),s.buffer&&(n.buffer=t.link(s.buffer),n.type=n.type||n.buffer+\\\".dtype\\\"),r[a]=n}))})),Object.keys(a).forEach((function(t){var e=a[t];o[t]=V(e,(function(t,r){function n(t){r(l[t],\\\"=\\\",i,\\\".\\\",t,\\\"|0;\\\")}var i=t.invoke(r,e),a=t.shared,o=t.constants,s=a.isBufferArgs,l=(a=a.buffer,{isStream:r.def(!1)}),u=new K;u.state=1,Object.keys(u).forEach((function(t){l[t]=r.def(\\\"\\\"+u[t])}));var c=l.buffer,f=l.type;return r(\\\"if(\\\",s,\\\"(\\\",i,\\\")){\\\",l.isStream,\\\"=true;\\\",c,\\\"=\\\",a,\\\".createStream(\\\",34962,\\\",\\\",i,\\\");\\\",f,\\\"=\\\",c,\\\".dtype;\\\",\\\"}else{\\\",c,\\\"=\\\",a,\\\".getBuffer(\\\",i,\\\");\\\",\\\"if(\\\",c,\\\"){\\\",f,\\\"=\\\",c,\\\".dtype;\\\",'}else if(\\\"constant\\\" in ',i,\\\"){\\\",l.state,\\\"=\\\",2,\\\";\\\",\\\"if(typeof \\\"+i+'.constant === \\\"number\\\"){',l[St[0]],\\\"=\\\",i,\\\".constant;\\\",St.slice(1).map((function(t){return l[t]})).join(\\\"=\\\"),\\\"=0;\\\",\\\"}else{\\\",St.map((function(t,e){return l[t]+\\\"=\\\"+i+\\\".constant.length>\\\"+e+\\\"?\\\"+i+\\\".constant[\\\"+e+\\\"]:0;\\\"})).join(\\\"\\\"),\\\"}}else{\\\",\\\"if(\\\",s,\\\"(\\\",i,\\\".buffer)){\\\",c,\\\"=\\\",a,\\\".createStream(\\\",34962,\\\",\\\",i,\\\".buffer);\\\",\\\"}else{\\\",c,\\\"=\\\",a,\\\".getBuffer(\\\",i,\\\".buffer);\\\",\\\"}\\\",f,'=\\\"type\\\" in ',i,\\\"?\\\",o.glTypes,\\\"[\\\",i,\\\".type]:\\\",c,\\\".dtype;\\\",l.normalized,\\\"=!!\\\",i,\\\".normalized;\\\"),n(\\\"size\\\"),n(\\\"offset\\\"),n(\\\"stride\\\"),n(\\\"divisor\\\"),r(\\\"}}\\\"),r.exit(\\\"if(\\\",l.isStream,\\\"){\\\",a,\\\".destroyStream(\\\",c,\\\");\\\",\\\"}\\\"),l}))})),o}function M(t,e,n,i,a){function s(t){var e=u[t];e&&(h[t]=e)}var l=function(t,e){if(\\\"string\\\"==typeof(r=t.static).frag&&\\\"string\\\"==typeof r.vert){if(0<Object.keys(e.dynamic).length)return null;var r=e.static,n=Object.keys(r);if(0<n.length&&\\\"number\\\"==typeof r[n[0]]){for(var i=[],a=0;a<n.length;++a)i.push([0|r[n[a]],n[a]]);return i}}return null}(t,e),u=function(t,e,r){function n(t){if(t in i){var r=i[t];t=!0;var n,o,s=0|r.x,l=0|r.y;return\\\"width\\\"in r?n=0|r.width:t=!1,\\\"height\\\"in r?o=0|r.height:t=!1,new N(!t&&e&&e.thisDep,!t&&e&&e.contextDep,!t&&e&&e.propDep,(function(t,e){var i=t.shared.context,a=n;\\\"width\\\"in r||(a=e.def(i,\\\".\\\",\\\"framebufferWidth\\\",\\\"-\\\",s));var u=o;return\\\"height\\\"in r||(u=e.def(i,\\\".\\\",\\\"framebufferHeight\\\",\\\"-\\\",l)),[s,l,a,u]}))}if(t in a){var u=a[t];return t=V(u,(function(t,e){var r=t.invoke(e,u),n=t.shared.context,i=e.def(r,\\\".x|0\\\"),a=e.def(r,\\\".y|0\\\");return[i,a,e.def('\\\"width\\\" in ',r,\\\"?\\\",r,\\\".width|0:\\\",\\\"(\\\",n,\\\".\\\",\\\"framebufferWidth\\\",\\\"-\\\",i,\\\")\\\"),r=e.def('\\\"height\\\" in ',r,\\\"?\\\",r,\\\".height|0:\\\",\\\"(\\\",n,\\\".\\\",\\\"framebufferHeight\\\",\\\"-\\\",a,\\\")\\\")]})),e&&(t.thisDep=t.thisDep||e.thisDep,t.contextDep=t.contextDep||e.contextDep,t.propDep=t.propDep||e.propDep),t}return e?new N(e.thisDep,e.contextDep,e.propDep,(function(t,e){var r=t.shared.context;return[0,0,e.def(r,\\\".\\\",\\\"framebufferWidth\\\"),e.def(r,\\\".\\\",\\\"framebufferHeight\\\")]})):null}var i=t.static,a=t.dynamic;if(t=n(\\\"viewport\\\")){var o=t;t=new N(t.thisDep,t.contextDep,t.propDep,(function(t,e){var r=o.append(t,e),n=t.shared.context;return e.set(n,\\\".viewportWidth\\\",r[2]),e.set(n,\\\".viewportHeight\\\",r[3]),r}))}return{viewport:t,scissor_box:n(\\\"scissor.box\\\")}}(t,d=w(t)),f=k(t),h=function(t,e){var r=t.static,n=t.dynamic,i={};return at.forEach((function(t){function e(e,o){if(t in r){var s=e(r[t]);i[a]=U((function(){return s}))}else if(t in n){var l=n[t];i[a]=V(l,(function(t,e){return o(t,e,t.invoke(e,l))}))}}var a=y(t);switch(t){case\\\"cull.enable\\\":case\\\"blend.enable\\\":case\\\"dither\\\":case\\\"stencil.enable\\\":case\\\"depth.enable\\\":case\\\"scissor.enable\\\":case\\\"polygonOffset.enable\\\":case\\\"sample.alpha\\\":case\\\"sample.enable\\\":case\\\"depth.mask\\\":case\\\"lineWidth\\\":return e((function(t){return t}),(function(t,e,r){return r}));case\\\"depth.func\\\":return e((function(t){return Ct[t]}),(function(t,e,r){return e.def(t.constants.compareFuncs,\\\"[\\\",r,\\\"]\\\")}));case\\\"depth.range\\\":return e((function(t){return t}),(function(t,e,r){return[e.def(\\\"+\\\",r,\\\"[0]\\\"),e=e.def(\\\"+\\\",r,\\\"[1]\\\")]}));case\\\"blend.func\\\":return e((function(t){return[Lt[\\\"srcRGB\\\"in t?t.srcRGB:t.src],Lt[\\\"dstRGB\\\"in t?t.dstRGB:t.dst],Lt[\\\"srcAlpha\\\"in t?t.srcAlpha:t.src],Lt[\\\"dstAlpha\\\"in t?t.dstAlpha:t.dst]]}),(function(t,e,r){function n(t,n){return e.def('\\\"',t,n,'\\\" in ',r,\\\"?\\\",r,\\\".\\\",t,n,\\\":\\\",r,\\\".\\\",t)}t=t.constants.blendFuncs;var i=n(\\\"src\\\",\\\"RGB\\\"),a=n(\\\"dst\\\",\\\"RGB\\\"),o=(i=e.def(t,\\\"[\\\",i,\\\"]\\\"),e.def(t,\\\"[\\\",n(\\\"src\\\",\\\"Alpha\\\"),\\\"]\\\"));return[i,a=e.def(t,\\\"[\\\",a,\\\"]\\\"),o,t=e.def(t,\\\"[\\\",n(\\\"dst\\\",\\\"Alpha\\\"),\\\"]\\\")]}));case\\\"blend.equation\\\":return e((function(t){return\\\"string\\\"==typeof t?[$[t],$[t]]:\\\"object\\\"==typeof t?[$[t.rgb],$[t.alpha]]:void 0}),(function(t,e,r){var n=t.constants.blendEquations,i=e.def(),a=e.def();return(t=t.cond(\\\"typeof \\\",r,'===\\\"string\\\"')).then(i,\\\"=\\\",a,\\\"=\\\",n,\\\"[\\\",r,\\\"];\\\"),t.else(i,\\\"=\\\",n,\\\"[\\\",r,\\\".rgb];\\\",a,\\\"=\\\",n,\\\"[\\\",r,\\\".alpha];\\\"),e(t),[i,a]}));case\\\"blend.color\\\":return e((function(t){return o(4,(function(e){return+t[e]}))}),(function(t,e,r){return o(4,(function(t){return e.def(\\\"+\\\",r,\\\"[\\\",t,\\\"]\\\")}))}));case\\\"stencil.mask\\\":return e((function(t){return 0|t}),(function(t,e,r){return e.def(r,\\\"|0\\\")}));case\\\"stencil.func\\\":return e((function(t){return[Ct[t.cmp||\\\"keep\\\"],t.ref||0,\\\"mask\\\"in t?t.mask:-1]}),(function(t,e,r){return[t=e.def('\\\"cmp\\\" in ',r,\\\"?\\\",t.constants.compareFuncs,\\\"[\\\",r,\\\".cmp]\\\",\\\":\\\",7680),e.def(r,\\\".ref|0\\\"),e=e.def('\\\"mask\\\" in ',r,\\\"?\\\",r,\\\".mask|0:-1\\\")]}));case\\\"stencil.opFront\\\":case\\\"stencil.opBack\\\":return e((function(e){return[\\\"stencil.opBack\\\"===t?1029:1028,Pt[e.fail||\\\"keep\\\"],Pt[e.zfail||\\\"keep\\\"],Pt[e.zpass||\\\"keep\\\"]]}),(function(e,r,n){function i(t){return r.def('\\\"',t,'\\\" in ',n,\\\"?\\\",a,\\\"[\\\",n,\\\".\\\",t,\\\"]:\\\",7680)}var a=e.constants.stencilOps;return[\\\"stencil.opBack\\\"===t?1029:1028,i(\\\"fail\\\"),i(\\\"zfail\\\"),i(\\\"zpass\\\")]}));case\\\"polygonOffset.offset\\\":return e((function(t){return[0|t.factor,0|t.units]}),(function(t,e,r){return[e.def(r,\\\".factor|0\\\"),e=e.def(r,\\\".units|0\\\")]}));case\\\"cull.face\\\":return e((function(t){var e=0;return\\\"front\\\"===t?e=1028:\\\"back\\\"===t&&(e=1029),e}),(function(t,e,r){return e.def(r,'===\\\"front\\\"?',1028,\\\":\\\",1029)}));case\\\"frontFace\\\":return e((function(t){return Ot[t]}),(function(t,e,r){return e.def(r+'===\\\"cw\\\"?2304:2305')}));case\\\"colorMask\\\":return e((function(t){return t.map((function(t){return!!t}))}),(function(t,e,r){return o(4,(function(t){return\\\"!!\\\"+r+\\\"[\\\"+t+\\\"]\\\"}))}));case\\\"sample.coverage\\\":return e((function(t){return[\\\"value\\\"in t?t.value:1,!!t.invert]}),(function(t,e,r){return[e.def('\\\"value\\\" in ',r,\\\"?+\\\",r,\\\".value:1\\\"),e=e.def(\\\"!!\\\",r,\\\".invert\\\")]}))}})),i}(t),p=T(t,0,l);s(\\\"viewport\\\"),s(y(\\\"scissor.box\\\"));var d,v=0<Object.keys(h).length;if((d={framebuffer:d,draw:f,shader:p,state:h,dirty:v,scopeVAO:null,drawVAO:null,useVAO:!1,attributes:{}}).profile=function(t){var e,r=t.static;if(t=t.dynamic,\\\"profile\\\"in r){var n=!!r.profile;(e=U((function(t,e){return n}))).enable=n}else if(\\\"profile\\\"in t){var i=t.profile;e=V(i,(function(t,e){return t.invoke(e,i)}))}return e}(t),d.uniforms=function(t,e){var r=t.static,n=t.dynamic,i={};return Object.keys(r).forEach((function(t){var e,n=r[t];if(\\\"number\\\"==typeof n||\\\"boolean\\\"==typeof n)e=U((function(){return n}));else if(\\\"function\\\"==typeof n){var a=n._reglType;\\\"texture2d\\\"===a||\\\"textureCube\\\"===a?e=U((function(t){return t.link(n)})):\\\"framebuffer\\\"!==a&&\\\"framebufferCube\\\"!==a||(e=U((function(t){return t.link(n.color[0])})))}else m(n)&&(e=U((function(t){return t.global.def(\\\"[\\\",o(n.length,(function(t){return n[t]})),\\\"]\\\")})));e.value=n,i[t]=e})),Object.keys(n).forEach((function(t){var e=n[t];i[t]=V(e,(function(t,r){return t.invoke(r,e)}))})),i}(n),d.drawVAO=d.scopeVAO=f.vao,!d.drawVAO&&p.program&&!l&&r.angle_instanced_arrays&&f.static.elements){var g=!0;if(t=p.program.attributes.map((function(t){return t=e.static[t],g=g&&!!t,t})),g&&0<t.length){var x=c.getVAO(c.createVAO({attributes:t,elements:f.static.elements}));d.drawVAO=new N(null,null,null,(function(t,e){return t.link(x)})),d.useVAO=!0}}return l?d.useVAO=!0:d.attributes=A(e),d.context=function(t){var e=t.static,r=t.dynamic,n={};return Object.keys(e).forEach((function(t){var r=e[t];n[t]=U((function(t,e){return\\\"number\\\"==typeof r||\\\"boolean\\\"==typeof r?\\\"\\\"+r:t.link(r)}))})),Object.keys(r).forEach((function(t){var e=r[t];n[t]=V(e,(function(t,r){return t.invoke(r,e)}))})),n}(i),d}function S(t,e,r){var n=t.shared.context,i=t.scope();Object.keys(r).forEach((function(a){e.save(n,\\\".\\\"+a);var o=r[a].append(t,e);Array.isArray(o)?i(n,\\\".\\\",a,\\\"=[\\\",o.join(),\\\"];\\\"):i(n,\\\".\\\",a,\\\"=\\\",o,\\\";\\\")})),e(i)}function E(t,e,r,n){var i,a=(s=t.shared).gl,o=s.framebuffer;tt&&(i=e.def(s.extensions,\\\".webgl_draw_buffers\\\"));var s=(l=t.constants).drawBuffer,l=l.backBuffer;t=r?r.append(t,e):e.def(o,\\\".next\\\"),n||e(\\\"if(\\\",t,\\\"!==\\\",o,\\\".cur){\\\"),e(\\\"if(\\\",t,\\\"){\\\",a,\\\".bindFramebuffer(\\\",36160,\\\",\\\",t,\\\".framebuffer);\\\"),tt&&e(i,\\\".drawBuffersWEBGL(\\\",s,\\\"[\\\",t,\\\".colorAttachments.length]);\\\"),e(\\\"}else{\\\",a,\\\".bindFramebuffer(\\\",36160,\\\",null);\\\"),tt&&e(i,\\\".drawBuffersWEBGL(\\\",l,\\\");\\\"),e(\\\"}\\\",o,\\\".cur=\\\",t,\\\";\\\"),n||e(\\\"}\\\")}function L(t,e,r){var n=t.shared,i=n.gl,a=t.current,s=t.next,l=n.current,u=n.next,c=t.cond(l,\\\".dirty\\\");at.forEach((function(e){var n,f;if(!((e=y(e))in r.state))if(e in s){n=s[e],f=a[e];var h=o(nt[e].length,(function(t){return c.def(n,\\\"[\\\",t,\\\"]\\\")}));c(t.cond(h.map((function(t,e){return t+\\\"!==\\\"+f+\\\"[\\\"+e+\\\"]\\\"})).join(\\\"||\\\")).then(i,\\\".\\\",lt[e],\\\"(\\\",h,\\\");\\\",h.map((function(t,e){return f+\\\"[\\\"+e+\\\"]=\\\"+t})).join(\\\";\\\"),\\\";\\\"))}else n=c.def(u,\\\".\\\",e),h=t.cond(n,\\\"!==\\\",l,\\\".\\\",e),c(h),e in ot?h(t.cond(n).then(i,\\\".enable(\\\",ot[e],\\\");\\\").else(i,\\\".disable(\\\",ot[e],\\\");\\\"),l,\\\".\\\",e,\\\"=\\\",n,\\\";\\\"):h(i,\\\".\\\",lt[e],\\\"(\\\",n,\\\");\\\",l,\\\".\\\",e,\\\"=\\\",n,\\\";\\\")})),0===Object.keys(r.state).length&&c(l,\\\".dirty=false;\\\"),e(c)}function C(t,e,r,n){var i,a=t.shared,o=t.current,s=a.current,l=a.gl;B(Object.keys(r)).forEach((function(a){var u=r[a];if(!n||n(u)){var c=u.append(t,e);if(ot[a]){var f=ot[a];j(u)?(i=t.link(c,{stable:!0}),e(t.cond(i).then(l,\\\".enable(\\\",f,\\\");\\\").else(l,\\\".disable(\\\",f,\\\");\\\")),e(s,\\\".\\\",a,\\\"=\\\",i,\\\";\\\")):(e(t.cond(c).then(l,\\\".enable(\\\",f,\\\");\\\").else(l,\\\".disable(\\\",f,\\\");\\\")),e(s,\\\".\\\",a,\\\"=\\\",c,\\\";\\\"))}else if(m(c)){var h=o[a];e(l,\\\".\\\",lt[a],\\\"(\\\",c,\\\");\\\",c.map((function(t,e){return h+\\\"[\\\"+e+\\\"]=\\\"+t})).join(\\\";\\\"),\\\";\\\")}else j(u)?(i=t.link(c,{stable:!0}),e(l,\\\".\\\",lt[a],\\\"(\\\",i,\\\");\\\",s,\\\".\\\",a,\\\"=\\\",i,\\\";\\\")):e(l,\\\".\\\",lt[a],\\\"(\\\",c,\\\");\\\",s,\\\".\\\",a,\\\"=\\\",c,\\\";\\\")}}))}function P(t,e){Q&&(t.instancing=e.def(t.shared.extensions,\\\".angle_instanced_arrays\\\"))}function O(t,e,r,n,i){function a(){return\\\"undefined\\\"==typeof performance?\\\"Date.now()\\\":\\\"performance.now()\\\"}function o(t){t(u=e.def(),\\\"=\\\",a(),\\\";\\\"),\\\"string\\\"==typeof i?t(h,\\\".count+=\\\",i,\\\";\\\"):t(h,\\\".count++;\\\"),d&&(n?t(c=e.def(),\\\"=\\\",v,\\\".getNumPendingQueries();\\\"):t(v,\\\".beginQuery(\\\",h,\\\");\\\"))}function s(t){t(h,\\\".cpuTime+=\\\",a(),\\\"-\\\",u,\\\";\\\"),d&&(n?t(v,\\\".pushScopeStats(\\\",c,\\\",\\\",v,\\\".getNumPendingQueries(),\\\",h,\\\");\\\"):t(v,\\\".endQuery();\\\"))}function l(t){var r=e.def(p,\\\".profile\\\");e(p,\\\".profile=\\\",t,\\\";\\\"),e.exit(p,\\\".profile=\\\",r,\\\";\\\")}var u,c,f=t.shared,h=t.stats,p=f.current,v=f.timer;if(r=r.profile){if(j(r))return void(r.enable?(o(e),s(e.exit),l(\\\"true\\\")):l(\\\"false\\\"));l(r=r.append(t,e))}else r=e.def(p,\\\".profile\\\");o(f=t.block()),e(\\\"if(\\\",r,\\\"){\\\",f,\\\"}\\\"),s(t=t.block()),e.exit(\\\"if(\\\",r,\\\"){\\\",t,\\\"}\\\")}function I(t,e,r,n,i){function a(r,n,i){function a(){e(\\\"if(!\\\",c,\\\".buffer){\\\",l,\\\".enableVertexAttribArray(\\\",u,\\\");}\\\");var r,a=i.type;r=i.size?e.def(i.size,\\\"||\\\",n):n,e(\\\"if(\\\",c,\\\".type!==\\\",a,\\\"||\\\",c,\\\".size!==\\\",r,\\\"||\\\",p.map((function(t){return c+\\\".\\\"+t+\\\"!==\\\"+i[t]})).join(\\\"||\\\"),\\\"){\\\",l,\\\".bindBuffer(\\\",34962,\\\",\\\",f,\\\".buffer);\\\",l,\\\".vertexAttribPointer(\\\",[u,r,a,i.normalized,i.stride,i.offset],\\\");\\\",c,\\\".type=\\\",a,\\\";\\\",c,\\\".size=\\\",r,\\\";\\\",p.map((function(t){return c+\\\".\\\"+t+\\\"=\\\"+i[t]+\\\";\\\"})).join(\\\"\\\"),\\\"}\\\"),Q&&(a=i.divisor,e(\\\"if(\\\",c,\\\".divisor!==\\\",a,\\\"){\\\",t.instancing,\\\".vertexAttribDivisorANGLE(\\\",[u,a],\\\");\\\",c,\\\".divisor=\\\",a,\\\";}\\\"))}function s(){e(\\\"if(\\\",c,\\\".buffer){\\\",l,\\\".disableVertexAttribArray(\\\",u,\\\");\\\",c,\\\".buffer=null;\\\",\\\"}if(\\\",St.map((function(t,e){return c+\\\".\\\"+t+\\\"!==\\\"+h[e]})).join(\\\"||\\\"),\\\"){\\\",l,\\\".vertexAttrib4f(\\\",u,\\\",\\\",h,\\\");\\\",St.map((function(t,e){return c+\\\".\\\"+t+\\\"=\\\"+h[e]+\\\";\\\"})).join(\\\"\\\"),\\\"}\\\")}var l=o.gl,u=e.def(r,\\\".location\\\"),c=e.def(o.attributes,\\\"[\\\",u,\\\"]\\\");r=i.state;var f=i.buffer,h=[i.x,i.y,i.z,i.w],p=[\\\"buffer\\\",\\\"normalized\\\",\\\"offset\\\",\\\"stride\\\"];1===r?a():2===r?s():(e(\\\"if(\\\",r,\\\"===\\\",1,\\\"){\\\"),a(),e(\\\"}else{\\\"),s(),e(\\\"}\\\"))}var o=t.shared;n.forEach((function(n){var o,s=n.name,l=r.attributes[s];if(l){if(!i(l))return;o=l.append(t,e)}else{if(!i(It))return;var u=t.scopeAttrib(s);o={},Object.keys(new K).forEach((function(t){o[t]=e.def(u,\\\".\\\",t)}))}a(t.link(n),function(t){switch(t){case 35664:case 35667:case 35671:return 2;case 35665:case 35668:case 35672:return 3;case 35666:case 35669:case 35673:return 4;default:return 1}}(n.info.type),o)}))}function D(t,r,n,i,a,s){for(var l,u=t.shared,c=u.gl,f=0;f<i.length;++f){var h,p=(g=i[f]).name,d=g.info.type,v=n.uniforms[p],g=t.link(g)+\\\".location\\\";if(v){if(!a(v))continue;if(j(v)){if(p=v.value,35678===d||35680===d)r(c,\\\".uniform1i(\\\",g,\\\",\\\",(d=t.link(p._texture||p.color[0]._texture))+\\\".bind());\\\"),r.exit(d,\\\".unbind();\\\");else if(35674===d||35675===d||35676===d)v=2,35675===d?v=3:35676===d&&(v=4),r(c,\\\".uniformMatrix\\\",v,\\\"fv(\\\",g,\\\",false,\\\",p=t.global.def(\\\"new Float32Array([\\\"+Array.prototype.slice.call(p)+\\\"])\\\"),\\\");\\\");else{switch(d){case 5126:l=\\\"1f\\\";break;case 35664:l=\\\"2f\\\";break;case 35665:l=\\\"3f\\\";break;case 35666:l=\\\"4f\\\";break;case 35670:case 5124:l=\\\"1i\\\";break;case 35671:case 35667:l=\\\"2i\\\";break;case 35672:case 35668:l=\\\"3i\\\";break;case 35673:case 35669:l=\\\"4i\\\"}r(c,\\\".uniform\\\",l,\\\"(\\\",g,\\\",\\\",m(p)?Array.prototype.slice.call(p):p,\\\");\\\")}continue}h=v.append(t,r)}else{if(!a(It))continue;h=r.def(u.uniforms,\\\"[\\\",e.id(p),\\\"]\\\")}switch(35678===d?r(\\\"if(\\\",h,\\\"&&\\\",h,'._reglType===\\\"framebuffer\\\"){',h,\\\"=\\\",h,\\\".color[0];\\\",\\\"}\\\"):35680===d&&r(\\\"if(\\\",h,\\\"&&\\\",h,'._reglType===\\\"framebufferCube\\\"){',h,\\\"=\\\",h,\\\".color[0];\\\",\\\"}\\\"),p=1,d){case 35678:case 35680:d=r.def(h,\\\"._texture\\\"),r(c,\\\".uniform1i(\\\",g,\\\",\\\",d,\\\".bind());\\\"),r.exit(d,\\\".unbind();\\\");continue;case 5124:case 35670:l=\\\"1i\\\";break;case 35667:case 35671:l=\\\"2i\\\",p=2;break;case 35668:case 35672:l=\\\"3i\\\",p=3;break;case 35669:case 35673:l=\\\"4i\\\",p=4;break;case 5126:l=\\\"1f\\\";break;case 35664:l=\\\"2f\\\",p=2;break;case 35665:l=\\\"3f\\\",p=3;break;case 35666:l=\\\"4f\\\",p=4;break;case 35674:l=\\\"Matrix2fv\\\";break;case 35675:l=\\\"Matrix3fv\\\";break;case 35676:l=\\\"Matrix4fv\\\"}if(\\\"M\\\"===l.charAt(0)){r(c,\\\".uniform\\\",l,\\\"(\\\",g,\\\",\\\"),g=Math.pow(d-35674+2,2);var y=t.global.def(\\\"new Float32Array(\\\",g,\\\")\\\");Array.isArray(h)?r(\\\"false,(\\\",o(g,(function(t){return y+\\\"[\\\"+t+\\\"]=\\\"+h[t]})),\\\",\\\",y,\\\")\\\"):r(\\\"false,(Array.isArray(\\\",h,\\\")||\\\",h,\\\" instanceof Float32Array)?\\\",h,\\\":(\\\",o(g,(function(t){return y+\\\"[\\\"+t+\\\"]=\\\"+h+\\\"[\\\"+t+\\\"]\\\"})),\\\",\\\",y,\\\")\\\"),r(\\\");\\\")}else{if(1<p){d=[];var x=[];for(v=0;v<p;++v)Array.isArray(h)?x.push(h[v]):x.push(r.def(h+\\\"[\\\"+v+\\\"]\\\")),s&&d.push(r.def());s&&r(\\\"if(!\\\",t.batchId,\\\"||\\\",d.map((function(t,e){return t+\\\"!==\\\"+x[e]})).join(\\\"||\\\"),\\\"){\\\",d.map((function(t,e){return t+\\\"=\\\"+x[e]+\\\";\\\"})).join(\\\"\\\")),r(c,\\\".uniform\\\",l,\\\"(\\\",g,\\\",\\\",x.join(\\\",\\\"),\\\");\\\")}else s&&(d=r.def(),r(\\\"if(!\\\",t.batchId,\\\"||\\\",d,\\\"!==\\\",h,\\\"){\\\",d,\\\"=\\\",h,\\\";\\\")),r(c,\\\".uniform\\\",l,\\\"(\\\",g,\\\",\\\",h,\\\");\\\");s&&r(\\\"}\\\")}}}function z(t,e,r,n){function i(i){var a=h[i];return a?a.contextDep&&n.contextDynamic||a.propDep?a.append(t,r):a.append(t,e):e.def(f,\\\".\\\",i)}function a(){function t(){r(l,\\\".drawElementsInstancedANGLE(\\\",[d,g,y,v+\\\"<<((\\\"+y+\\\"-5121)>>1)\\\",s],\\\");\\\")}function e(){r(l,\\\".drawArraysInstancedANGLE(\\\",[d,v,g,s],\\\");\\\")}p&&\\\"null\\\"!==p?m?t():(r(\\\"if(\\\",p,\\\"){\\\"),t(),r(\\\"}else{\\\"),e(),r(\\\"}\\\")):e()}function o(){function t(){r(c+\\\".drawElements(\\\"+[d,g,y,v+\\\"<<((\\\"+y+\\\"-5121)>>1)\\\"]+\\\");\\\")}function e(){r(c+\\\".drawArrays(\\\"+[d,v,g]+\\\");\\\")}p&&\\\"null\\\"!==p?m?t():(r(\\\"if(\\\",p,\\\"){\\\"),t(),r(\\\"}else{\\\"),e(),r(\\\"}\\\")):e()}var s,l,u=t.shared,c=u.gl,f=u.draw,h=n.draw,p=function(){var i=h.elements,a=e;return i?((i.contextDep&&n.contextDynamic||i.propDep)&&(a=r),i=i.append(t,a),h.elementsActive&&a(\\\"if(\\\"+i+\\\")\\\"+c+\\\".bindBuffer(34963,\\\"+i+\\\".buffer.buffer);\\\")):(i=a.def(),a(i,\\\"=\\\",f,\\\".\\\",\\\"elements\\\",\\\";\\\",\\\"if(\\\",i,\\\"){\\\",c,\\\".bindBuffer(\\\",34963,\\\",\\\",i,\\\".buffer.buffer);}\\\",\\\"else if(\\\",u.vao,\\\".currentVAO){\\\",i,\\\"=\\\",t.shared.elements+\\\".getElements(\\\"+u.vao,\\\".currentVAO.elements);\\\",et?\\\"\\\":\\\"if(\\\"+i+\\\")\\\"+c+\\\".bindBuffer(34963,\\\"+i+\\\".buffer.buffer);\\\",\\\"}\\\")),i}(),d=i(\\\"primitive\\\"),v=i(\\\"offset\\\"),g=function(){var i=h.count,a=e;return i?((i.contextDep&&n.contextDynamic||i.propDep)&&(a=r),i=i.append(t,a)):i=a.def(f,\\\".\\\",\\\"count\\\"),i}();if(\\\"number\\\"==typeof g){if(0===g)return}else r(\\\"if(\\\",g,\\\"){\\\"),r.exit(\\\"}\\\");Q&&(s=i(\\\"instances\\\"),l=t.instancing);var y=p+\\\".type\\\",m=h.elements&&j(h.elements)&&!h.vaoActive;Q&&(\\\"number\\\"!=typeof s||0<=s)?\\\"string\\\"==typeof s?(r(\\\"if(\\\",s,\\\">0){\\\"),a(),r(\\\"}else if(\\\",s,\\\"<0){\\\"),o(),r(\\\"}\\\")):a():o()}function H(t,e,r,n,i){return i=(e=_()).proc(\\\"body\\\",i),Q&&(e.instancing=i.def(e.shared.extensions,\\\".angle_instanced_arrays\\\")),t(e,i,r,n),e.compile().body}function q(t,e,r,n){P(t,e),r.useVAO?r.drawVAO?e(t.shared.vao,\\\".setVAO(\\\",r.drawVAO.append(t,e),\\\");\\\"):e(t.shared.vao,\\\".setVAO(\\\",t.shared.vao,\\\".targetVAO);\\\"):(e(t.shared.vao,\\\".setVAO(null);\\\"),I(t,e,r,n.attributes,(function(){return!0}))),D(t,e,r,n.uniforms,(function(){return!0}),!1),z(t,e,e,r)}function Z(t,e,r,n){function i(){return!0}t.batchId=\\\"a1\\\",P(t,e),I(t,e,r,n.attributes,i),D(t,e,r,n.uniforms,i,!1),z(t,e,e,r)}function W(t,e,r,n){function i(t){return t.contextDep&&o||t.propDep}function a(t){return!i(t)}P(t,e);var o=r.contextDep,s=e.def(),l=e.def();t.shared.props=l,t.batchId=s;var u=t.scope(),c=t.scope();e(u.entry,\\\"for(\\\",s,\\\"=0;\\\",s,\\\"<\\\",\\\"a1\\\",\\\";++\\\",s,\\\"){\\\",l,\\\"=\\\",\\\"a0\\\",\\\"[\\\",s,\\\"];\\\",c,\\\"}\\\",u.exit),r.needsContext&&S(t,c,r.context),r.needsFramebuffer&&E(t,c,r.framebuffer),C(t,c,r.state,i),r.profile&&i(r.profile)&&O(t,c,r,!1,!0),n?(r.useVAO?r.drawVAO?i(r.drawVAO)?c(t.shared.vao,\\\".setVAO(\\\",r.drawVAO.append(t,c),\\\");\\\"):u(t.shared.vao,\\\".setVAO(\\\",r.drawVAO.append(t,u),\\\");\\\"):u(t.shared.vao,\\\".setVAO(\\\",t.shared.vao,\\\".targetVAO);\\\"):(u(t.shared.vao,\\\".setVAO(null);\\\"),I(t,u,r,n.attributes,a),I(t,c,r,n.attributes,i)),D(t,u,r,n.uniforms,a,!1),D(t,c,r,n.uniforms,i,!0),z(t,u,c,r)):(e=t.global.def(\\\"{}\\\"),n=r.shader.progVar.append(t,c),l=c.def(n,\\\".id\\\"),u=c.def(e,\\\"[\\\",l,\\\"]\\\"),c(t.shared.gl,\\\".useProgram(\\\",n,\\\".program);\\\",\\\"if(!\\\",u,\\\"){\\\",u,\\\"=\\\",e,\\\"[\\\",l,\\\"]=\\\",t.link((function(e){return H(Z,t,r,e,2)})),\\\"(\\\",n,\\\");}\\\",u,\\\".call(this,a0[\\\",s,\\\"],\\\",s,\\\");\\\"))}function X(t,r){function n(e){var n=r.shader[e];n&&(n=n.append(t,i),isNaN(n)?i.set(a.shader,\\\".\\\"+e,n):i.set(a.shader,\\\".\\\"+e,t.link(n,{stable:!0})))}var i=t.proc(\\\"scope\\\",3);t.batchId=\\\"a2\\\";var a=t.shared,o=a.current;if(S(t,i,r.context),r.framebuffer&&r.framebuffer.append(t,i),B(Object.keys(r.state)).forEach((function(e){var n=r.state[e],o=n.append(t,i);m(o)?o.forEach((function(r,n){isNaN(r)?i.set(t.next[e],\\\"[\\\"+n+\\\"]\\\",r):i.set(t.next[e],\\\"[\\\"+n+\\\"]\\\",t.link(r,{stable:!0}))})):j(n)?i.set(a.next,\\\".\\\"+e,t.link(o,{stable:!0})):i.set(a.next,\\\".\\\"+e,o)})),O(t,i,r,!0,!0),[\\\"elements\\\",\\\"offset\\\",\\\"count\\\",\\\"instances\\\",\\\"primitive\\\"].forEach((function(e){var n=r.draw[e];n&&(n=n.append(t,i),isNaN(n)?i.set(a.draw,\\\".\\\"+e,n):i.set(a.draw,\\\".\\\"+e,t.link(n),{stable:!0}))})),Object.keys(r.uniforms).forEach((function(n){var o=r.uniforms[n].append(t,i);Array.isArray(o)&&(o=\\\"[\\\"+o.map((function(e){return isNaN(e)?e:t.link(e,{stable:!0})}))+\\\"]\\\"),i.set(a.uniforms,\\\"[\\\"+t.link(e.id(n),{stable:!0})+\\\"]\\\",o)})),Object.keys(r.attributes).forEach((function(e){var n=r.attributes[e].append(t,i),a=t.scopeAttrib(e);Object.keys(new K).forEach((function(t){i.set(a,\\\".\\\"+t,n[t])}))})),r.scopeVAO){var s=r.scopeVAO.append(t,i);isNaN(s)?i.set(a.vao,\\\".targetVAO\\\",s):i.set(a.vao,\\\".targetVAO\\\",t.link(s,{stable:!0}))}n(\\\"vert\\\"),n(\\\"frag\\\"),0<Object.keys(r.state).length&&(i(o,\\\".dirty=true;\\\"),i.exit(o,\\\".dirty=true;\\\")),i(\\\"a1(\\\",t.shared.context,\\\",a0,\\\",t.batchId,\\\");\\\")}function J(t,e,r){var n=e.static[r];if(n&&function(t){if(\\\"object\\\"==typeof t&&!m(t)){for(var e=Object.keys(t),r=0;r<e.length;++r)if(Y.isDynamic(t[e[r]]))return!0;return!1}}(n)){var i=t.global,a=Object.keys(n),o=!1,s=!1,l=!1,u=t.global.def(\\\"{}\\\");a.forEach((function(e){var r=n[e];if(Y.isDynamic(r))\\\"function\\\"==typeof r&&(r=n[e]=Y.unbox(r)),e=V(r,null),o=o||e.thisDep,l=l||e.propDep,s=s||e.contextDep;else{switch(i(u,\\\".\\\",e,\\\"=\\\"),typeof r){case\\\"number\\\":i(r);break;case\\\"string\\\":i('\\\"',r,'\\\"');break;case\\\"object\\\":Array.isArray(r)&&i(\\\"[\\\",r.join(),\\\"]\\\");break;default:i(t.link(r))}i(\\\";\\\")}})),e.dynamic[r]=new Y.DynamicVariable(4,{thisDep:o,contextDep:s,propDep:l,ref:u,append:function(t,e){a.forEach((function(r){var i=n[r];Y.isDynamic(i)&&(i=t.invoke(e,i),e(u,\\\".\\\",r,\\\"=\\\",i,\\\";\\\"))}))}}),delete e.static[r]}}var K=c.Record,$={add:32774,subtract:32778,\\\"reverse subtract\\\":32779};r.ext_blend_minmax&&($.min=32775,$.max=32776);var Q=r.angle_instanced_arrays,tt=r.webgl_draw_buffers,et=r.oes_vertex_array_object,nt={dirty:!0,profile:g.profile},it={},at=[],ot={},lt={};x(\\\"dither\\\",3024),x(\\\"blend.enable\\\",3042),b(\\\"blend.color\\\",\\\"blendColor\\\",[0,0,0,0]),b(\\\"blend.equation\\\",\\\"blendEquationSeparate\\\",[32774,32774]),b(\\\"blend.func\\\",\\\"blendFuncSeparate\\\",[1,0,1,0]),x(\\\"depth.enable\\\",2929,!0),b(\\\"depth.func\\\",\\\"depthFunc\\\",513),b(\\\"depth.range\\\",\\\"depthRange\\\",[0,1]),b(\\\"depth.mask\\\",\\\"depthMask\\\",!0),b(\\\"colorMask\\\",\\\"colorMask\\\",[!0,!0,!0,!0]),x(\\\"cull.enable\\\",2884),b(\\\"cull.face\\\",\\\"cullFace\\\",1029),b(\\\"frontFace\\\",\\\"frontFace\\\",2305),b(\\\"lineWidth\\\",\\\"lineWidth\\\",1),x(\\\"polygonOffset.enable\\\",32823),b(\\\"polygonOffset.offset\\\",\\\"polygonOffset\\\",[0,0]),x(\\\"sample.alpha\\\",32926),x(\\\"sample.enable\\\",32928),b(\\\"sample.coverage\\\",\\\"sampleCoverage\\\",[1,!1]),x(\\\"stencil.enable\\\",2960),b(\\\"stencil.mask\\\",\\\"stencilMask\\\",-1),b(\\\"stencil.func\\\",\\\"stencilFunc\\\",[519,0,-1]),b(\\\"stencil.opFront\\\",\\\"stencilOpSeparate\\\",[1028,7680,7680,7680]),b(\\\"stencil.opBack\\\",\\\"stencilOpSeparate\\\",[1029,7680,7680,7680]),x(\\\"scissor.enable\\\",3089),b(\\\"scissor.box\\\",\\\"scissor\\\",[0,0,t.drawingBufferWidth,t.drawingBufferHeight]),b(\\\"viewport\\\",\\\"viewport\\\",[0,0,t.drawingBufferWidth,t.drawingBufferHeight]);var ut={gl:t,context:p,strings:e,next:it,current:nt,draw:h,elements:a,buffer:i,shader:f,attributes:c.state,vao:c,uniforms:u,framebuffer:l,extensions:r,timer:d,isBufferArgs:F},ct={primTypes:st,compareFuncs:Ct,blendFuncs:Lt,blendEquations:$,stencilOps:Pt,glTypes:rt,orientationType:Ot};tt&&(ct.backBuffer=[1029],ct.drawBuffer=o(n.maxDrawbuffers,(function(t){return 0===t?[0]:o(t,(function(t){return 36064+t}))})));var ft=0;return{next:it,current:nt,procs:function(){var t=_(),e=t.proc(\\\"poll\\\"),i=t.proc(\\\"refresh\\\"),a=t.block();e(a),i(a);var s,l=(f=t.shared).gl,u=f.next,c=f.current;a(c,\\\".dirty=false;\\\"),E(t,e),E(t,i,null,!0),Q&&(s=t.link(Q)),r.oes_vertex_array_object&&i(t.link(r.oes_vertex_array_object),\\\".bindVertexArrayOES(null);\\\");var f=i.def(f.attributes),h=i.def(0),p=t.cond(h,\\\".buffer\\\");p.then(l,\\\".enableVertexAttribArray(i);\\\",l,\\\".bindBuffer(\\\",34962,\\\",\\\",h,\\\".buffer.buffer);\\\",l,\\\".vertexAttribPointer(i,\\\",h,\\\".size,\\\",h,\\\".type,\\\",h,\\\".normalized,\\\",h,\\\".stride,\\\",h,\\\".offset);\\\").else(l,\\\".disableVertexAttribArray(i);\\\",l,\\\".vertexAttrib4f(i,\\\",h,\\\".x,\\\",h,\\\".y,\\\",h,\\\".z,\\\",h,\\\".w);\\\",h,\\\".buffer=null;\\\");var d=t.link(n.maxAttributes,{stable:!0});return i(\\\"for(var i=0;i<\\\",d,\\\";++i){\\\",h,\\\"=\\\",f,\\\"[i];\\\",p,\\\"}\\\"),Q&&i(\\\"for(var i=0;i<\\\",d,\\\";++i){\\\",s,\\\".vertexAttribDivisorANGLE(i,\\\",f,\\\"[i].divisor);\\\",\\\"}\\\"),i(t.shared.vao,\\\".currentVAO=null;\\\",t.shared.vao,\\\".setVAO(\\\",t.shared.vao,\\\".targetVAO);\\\"),Object.keys(ot).forEach((function(r){var n=ot[r],o=a.def(u,\\\".\\\",r),s=t.block();s(\\\"if(\\\",o,\\\"){\\\",l,\\\".enable(\\\",n,\\\")}else{\\\",l,\\\".disable(\\\",n,\\\")}\\\",c,\\\".\\\",r,\\\"=\\\",o,\\\";\\\"),i(s),e(\\\"if(\\\",o,\\\"!==\\\",c,\\\".\\\",r,\\\"){\\\",s,\\\"}\\\")})),Object.keys(lt).forEach((function(r){var n,s,f=lt[r],h=nt[r],p=t.block();p(l,\\\".\\\",f,\\\"(\\\"),m(h)?(f=h.length,n=t.global.def(u,\\\".\\\",r),s=t.global.def(c,\\\".\\\",r),p(o(f,(function(t){return n+\\\"[\\\"+t+\\\"]\\\"})),\\\");\\\",o(f,(function(t){return s+\\\"[\\\"+t+\\\"]=\\\"+n+\\\"[\\\"+t+\\\"];\\\"})).join(\\\"\\\")),e(\\\"if(\\\",o(f,(function(t){return n+\\\"[\\\"+t+\\\"]!==\\\"+s+\\\"[\\\"+t+\\\"]\\\"})).join(\\\"||\\\"),\\\"){\\\",p,\\\"}\\\")):(n=a.def(u,\\\".\\\",r),s=a.def(c,\\\".\\\",r),p(n,\\\");\\\",c,\\\".\\\",r,\\\"=\\\",n,\\\";\\\"),e(\\\"if(\\\",n,\\\"!==\\\",s,\\\"){\\\",p,\\\"}\\\")),i(p)})),t.compile()}(),compile:function(t,e,r,n,i){var a=_();a.stats=a.link(i),Object.keys(e.static).forEach((function(t){J(a,e,t)})),Et.forEach((function(e){J(a,t,e)}));var o=M(t,e,r,n);return o.shader.program&&(o.shader.program.attributes.sort((function(t,e){return t.name<e.name?-1:1})),o.shader.program.uniforms.sort((function(t,e){return t.name<e.name?-1:1}))),function(t,e){var r=t.proc(\\\"draw\\\",1);P(t,r),S(t,r,e.context),E(t,r,e.framebuffer),L(t,r,e),C(t,r,e.state),O(t,r,e,!1,!0);var n=e.shader.progVar.append(t,r);if(r(t.shared.gl,\\\".useProgram(\\\",n,\\\".program);\\\"),e.shader.program)q(t,r,e,e.shader.program);else{r(t.shared.vao,\\\".setVAO(null);\\\");var i=t.global.def(\\\"{}\\\"),a=r.def(n,\\\".id\\\"),o=r.def(i,\\\"[\\\",a,\\\"]\\\");r(t.cond(o).then(o,\\\".call(this,a0);\\\").else(o,\\\"=\\\",i,\\\"[\\\",a,\\\"]=\\\",t.link((function(r){return H(q,t,e,r,1)})),\\\"(\\\",n,\\\");\\\",o,\\\".call(this,a0);\\\"))}0<Object.keys(e.state).length&&r(t.shared.current,\\\".dirty=true;\\\"),t.shared.vao&&r(t.shared.vao,\\\".setVAO(null);\\\")}(a,o),X(a,o),function(t,e){function r(t){return t.contextDep&&i||t.propDep}var n=t.proc(\\\"batch\\\",2);t.batchId=\\\"0\\\",P(t,n);var i=!1,a=!0;Object.keys(e.context).forEach((function(t){i=i||e.context[t].propDep})),i||(S(t,n,e.context),a=!1);var o=!1;if((s=e.framebuffer)?(s.propDep?i=o=!0:s.contextDep&&i&&(o=!0),o||E(t,n,s)):E(t,n,null),e.state.viewport&&e.state.viewport.propDep&&(i=!0),L(t,n,e),C(t,n,e.state,(function(t){return!r(t)})),e.profile&&r(e.profile)||O(t,n,e,!1,\\\"a1\\\"),e.contextDep=i,e.needsContext=a,e.needsFramebuffer=o,(a=e.shader.progVar).contextDep&&i||a.propDep)W(t,n,e,null);else if(a=a.append(t,n),n(t.shared.gl,\\\".useProgram(\\\",a,\\\".program);\\\"),e.shader.program)W(t,n,e,e.shader.program);else{n(t.shared.vao,\\\".setVAO(null);\\\");var s=t.global.def(\\\"{}\\\"),l=(o=n.def(a,\\\".id\\\"),n.def(s,\\\"[\\\",o,\\\"]\\\"));n(t.cond(l).then(l,\\\".call(this,a0,a1);\\\").else(l,\\\"=\\\",s,\\\"[\\\",o,\\\"]=\\\",t.link((function(r){return H(W,t,e,r,2)})),\\\"(\\\",a,\\\");\\\",l,\\\".call(this,a0,a1);\\\"))}0<Object.keys(e.state).length&&n(t.shared.current,\\\".dirty=true;\\\"),t.shared.vao&&n(t.shared.vao,\\\".setVAO(null);\\\")}(a,o),G(a.compile(),{destroy:function(){o.shader.program.destroy()}})}}}function q(t,e){for(var r=0;r<t.length;++r)if(t[r]===e)return r;return-1}var G=function(t,e){for(var r=Object.keys(e),n=0;n<r.length;++n)t[r[n]]=e[r[n]];return t},Z=0,Y={DynamicVariable:t,define:function(e,n){return new t(e,r(n+\\\"\\\"))},isDynamic:function(e){return\\\"function\\\"==typeof e&&!e._reglType||e instanceof t},unbox:function e(r,n){return\\\"function\\\"==typeof r?new t(0,r):\\\"number\\\"==typeof r||\\\"boolean\\\"==typeof r?new t(5,r):Array.isArray(r)?new t(6,r.map((function(t,r){return e(t,n+\\\"[\\\"+r+\\\"]\\\")}))):r instanceof t?r:void 0},accessor:r},W={next:\\\"function\\\"==typeof requestAnimationFrame?function(t){return requestAnimationFrame(t)}:function(t){return setTimeout(t,16)},cancel:\\\"function\\\"==typeof cancelAnimationFrame?function(t){return cancelAnimationFrame(t)}:clearTimeout},X=\\\"undefined\\\"!=typeof performance&&performance.now?function(){return performance.now()}:function(){return+new Date},J=l();J.zero=l();var K=function(t,e){var r=1;e.ext_texture_filter_anisotropic&&(r=t.getParameter(34047));var n=1,i=1;e.webgl_draw_buffers&&(n=t.getParameter(34852),i=t.getParameter(36063));var a=!!e.oes_texture_float;if(a){a=t.createTexture(),t.bindTexture(3553,a),t.texImage2D(3553,0,6408,1,1,0,6408,5126,null);var o=t.createFramebuffer();if(t.bindFramebuffer(36160,o),t.framebufferTexture2D(36160,36064,3553,a,0),t.bindTexture(3553,null),36053!==t.checkFramebufferStatus(36160))a=!1;else{t.viewport(0,0,1,1),t.clearColor(1,0,0,1),t.clear(16384);var s=J.allocType(5126,4);t.readPixels(0,0,1,1,6408,5126,s),t.getError()?a=!1:(t.deleteFramebuffer(o),t.deleteTexture(a),a=1===s[0]),J.freeType(s)}}return s=!0,\\\"undefined\\\"!=typeof navigator&&(/MSIE/.test(navigator.userAgent)||/Trident\\\\//.test(navigator.appVersion)||/Edge/.test(navigator.userAgent))||(s=t.createTexture(),o=J.allocType(5121,36),t.activeTexture(33984),t.bindTexture(34067,s),t.texImage2D(34069,0,6408,3,3,0,6408,5121,o),J.freeType(o),t.bindTexture(34067,null),t.deleteTexture(s),s=!t.getError()),{colorBits:[t.getParameter(3410),t.getParameter(3411),t.getParameter(3412),t.getParameter(3413)],depthBits:t.getParameter(3414),stencilBits:t.getParameter(3415),subpixelBits:t.getParameter(3408),extensions:Object.keys(e).filter((function(t){return!!e[t]})),maxAnisotropic:r,maxDrawbuffers:n,maxColorAttachments:i,pointSizeDims:t.getParameter(33901),lineWidthDims:t.getParameter(33902),maxViewportDims:t.getParameter(3386),maxCombinedTextureUnits:t.getParameter(35661),maxCubeMapSize:t.getParameter(34076),maxRenderbufferSize:t.getParameter(34024),maxTextureUnits:t.getParameter(34930),maxTextureSize:t.getParameter(3379),maxAttributes:t.getParameter(34921),maxVertexUniforms:t.getParameter(36347),maxVertexTextureUnits:t.getParameter(35660),maxVaryingVectors:t.getParameter(36348),maxFragmentUniforms:t.getParameter(36349),glsl:t.getParameter(35724),renderer:t.getParameter(7937),vendor:t.getParameter(7936),version:t.getParameter(7938),readFloat:a,npotTextureCube:s}},$=function(t){return t instanceof Uint8Array||t instanceof Uint16Array||t instanceof Uint32Array||t instanceof Int8Array||t instanceof Int16Array||t instanceof Int32Array||t instanceof Float32Array||t instanceof Float64Array||t instanceof Uint8ClampedArray},Q=function(t){return Object.keys(t).map((function(e){return t[e]}))},tt={shape:function(t){for(var e=[];t.length;t=t[0])e.push(t.length);return e},flatten:function(t,e,r,n){var i=1;if(e.length)for(var a=0;a<e.length;++a)i*=e[a];else i=0;switch(r=n||J.allocType(r,i),e.length){case 0:break;case 1:for(n=e[0],e=0;e<n;++e)r[e]=t[e];break;case 2:for(n=e[0],e=e[1],a=i=0;a<n;++a)for(var o=t[a],s=0;s<e;++s)r[i++]=o[s];break;case 3:c(t,e[0],e[1],e[2],r,0);break;default:f(t,e,0,r,0)}return r}},et={\\\"[object Int8Array]\\\":5120,\\\"[object Int16Array]\\\":5122,\\\"[object Int32Array]\\\":5124,\\\"[object Uint8Array]\\\":5121,\\\"[object Uint8ClampedArray]\\\":5121,\\\"[object Uint16Array]\\\":5123,\\\"[object Uint32Array]\\\":5125,\\\"[object Float32Array]\\\":5126,\\\"[object Float64Array]\\\":5121,\\\"[object ArrayBuffer]\\\":5121},rt={int8:5120,int16:5122,int32:5124,uint8:5121,uint16:5123,uint32:5125,float:5126,float32:5126},nt={dynamic:35048,stream:35040,static:35044},it=tt.flatten,at=tt.shape,ot=[];ot[5120]=1,ot[5122]=2,ot[5124]=4,ot[5121]=1,ot[5123]=2,ot[5125]=4,ot[5126]=4;var st={points:0,point:0,lines:1,line:1,triangles:4,triangle:4,\\\"line loop\\\":2,\\\"line strip\\\":3,\\\"triangle strip\\\":5,\\\"triangle fan\\\":6},lt=new Float32Array(1),ut=new Uint32Array(lt.buffer),ct=[9984,9986,9985,9987],ft=[0,6409,6410,6407,6408],ht={};ht[6409]=ht[6406]=ht[6402]=1,ht[34041]=ht[6410]=2,ht[6407]=ht[35904]=3,ht[6408]=ht[35906]=4;var pt=x(\\\"HTMLCanvasElement\\\"),dt=x(\\\"OffscreenCanvas\\\"),vt=x(\\\"CanvasRenderingContext2D\\\"),gt=x(\\\"ImageBitmap\\\"),yt=x(\\\"HTMLImageElement\\\"),mt=x(\\\"HTMLVideoElement\\\"),xt=Object.keys(et).concat([pt,dt,vt,gt,yt,mt]),bt=[];bt[5121]=1,bt[5126]=4,bt[36193]=2,bt[5123]=2,bt[5125]=4;var _t=[];_t[32854]=2,_t[32855]=2,_t[36194]=2,_t[34041]=4,_t[33776]=.5,_t[33777]=.5,_t[33778]=1,_t[33779]=1,_t[35986]=.5,_t[35987]=1,_t[34798]=1,_t[35840]=.5,_t[35841]=.25,_t[35842]=.5,_t[35843]=.25,_t[36196]=.5;var wt=[];wt[32854]=2,wt[32855]=2,wt[36194]=2,wt[33189]=2,wt[36168]=1,wt[34041]=4,wt[35907]=4,wt[34836]=16,wt[34842]=8,wt[34843]=6;var Tt=function(t,e,r,n,i){function a(t){this.id=u++,this.refCount=1,this.renderbuffer=t,this.format=32854,this.height=this.width=0,i.profile&&(this.stats={size:0})}function o(e){var r=e.renderbuffer;t.bindRenderbuffer(36161,null),t.deleteRenderbuffer(r),e.renderbuffer=null,e.refCount=0,delete c[e.id],n.renderbufferCount--}var s={rgba4:32854,rgb565:36194,\\\"rgb5 a1\\\":32855,depth:33189,stencil:36168,\\\"depth stencil\\\":34041};e.ext_srgb&&(s.srgba=35907),e.ext_color_buffer_half_float&&(s.rgba16f=34842,s.rgb16f=34843),e.webgl_color_buffer_float&&(s.rgba32f=34836);var l=[];Object.keys(s).forEach((function(t){l[s[t]]=t}));var u=0,c={};return a.prototype.decRef=function(){0>=--this.refCount&&o(this)},i.profile&&(n.getTotalRenderbufferSize=function(){var t=0;return Object.keys(c).forEach((function(e){t+=c[e].stats.size})),t}),{create:function(e,r){function o(e,r){var n=0,a=0,c=32854;if(\\\"object\\\"==typeof e&&e?(\\\"shape\\\"in e?(n=0|(a=e.shape)[0],a=0|a[1]):(\\\"radius\\\"in e&&(n=a=0|e.radius),\\\"width\\\"in e&&(n=0|e.width),\\\"height\\\"in e&&(a=0|e.height)),\\\"format\\\"in e&&(c=s[e.format])):\\\"number\\\"==typeof e?(n=0|e,a=\\\"number\\\"==typeof r?0|r:n):e||(n=a=1),n!==u.width||a!==u.height||c!==u.format)return o.width=u.width=n,o.height=u.height=a,u.format=c,t.bindRenderbuffer(36161,u.renderbuffer),t.renderbufferStorage(36161,c,n,a),i.profile&&(u.stats.size=wt[u.format]*u.width*u.height),o.format=l[u.format],o}var u=new a(t.createRenderbuffer());return c[u.id]=u,n.renderbufferCount++,o(e,r),o.resize=function(e,r){var n=0|e,a=0|r||n;return n===u.width&&a===u.height||(o.width=u.width=n,o.height=u.height=a,t.bindRenderbuffer(36161,u.renderbuffer),t.renderbufferStorage(36161,u.format,n,a),i.profile&&(u.stats.size=wt[u.format]*u.width*u.height)),o},o._reglType=\\\"renderbuffer\\\",o._renderbuffer=u,i.profile&&(o.stats=u.stats),o.destroy=function(){u.decRef()},o},clear:function(){Q(c).forEach(o)},restore:function(){Q(c).forEach((function(e){e.renderbuffer=t.createRenderbuffer(),t.bindRenderbuffer(36161,e.renderbuffer),t.renderbufferStorage(36161,e.format,e.width,e.height)})),t.bindRenderbuffer(36161,null)}}},kt=[];kt[6408]=4,kt[6407]=3;var At=[];At[5121]=1,At[5126]=4,At[36193]=2;var Mt=[1116352408,1899447441,-1245643825,-373957723,961987163,1508970993,-1841331548,-1424204075,-670586216,310598401,607225278,1426881987,1925078388,-2132889090,-1680079193,-1046744716,-459576895,-272742522,264347078,604807628,770255983,1249150122,1555081692,1996064986,-1740746414,-1473132947,-1341970488,-1084653625,-958395405,-710438585,113926993,338241895,666307205,773529912,1294757372,1396182291,1695183700,1986661051,-2117940946,-1838011259,-1564481375,-1474664885,-1035236496,-949202525,-778901479,-694614492,-200395387,275423344,430227734,506948616,659060556,883997877,958139571,1322822218,1537002063,1747873779,1955562222,2024104815,-2067236844,-1933114872,-1866530822,-1538233109,-1090935817,-965641998],St=[\\\"x\\\",\\\"y\\\",\\\"z\\\",\\\"w\\\"],Et=\\\"blend.func blend.equation stencil.func stencil.opFront stencil.opBack sample.coverage viewport scissor.box polygonOffset.offset\\\".split(\\\" \\\"),Lt={0:0,1:1,zero:0,one:1,\\\"src color\\\":768,\\\"one minus src color\\\":769,\\\"src alpha\\\":770,\\\"one minus src alpha\\\":771,\\\"dst color\\\":774,\\\"one minus dst color\\\":775,\\\"dst alpha\\\":772,\\\"one minus dst alpha\\\":773,\\\"constant color\\\":32769,\\\"one minus constant color\\\":32770,\\\"constant alpha\\\":32771,\\\"one minus constant alpha\\\":32772,\\\"src alpha saturate\\\":776},Ct={never:512,less:513,\\\"<\\\":513,equal:514,\\\"=\\\":514,\\\"==\\\":514,\\\"===\\\":514,lequal:515,\\\"<=\\\":515,greater:516,\\\">\\\":516,notequal:517,\\\"!=\\\":517,\\\"!==\\\":517,gequal:518,\\\">=\\\":518,always:519},Pt={0:0,zero:0,keep:7680,replace:7681,increment:7682,decrement:7683,\\\"increment wrap\\\":34055,\\\"decrement wrap\\\":34056,invert:5386},Ot={cw:2304,ccw:2305},It=new N(!1,!1,!1,(function(){}));return function(t){function e(){if(0===J.length)T&&T.update(),et=null;else{et=W.next(e),f();for(var t=J.length-1;0<=t;--t){var r=J[t];r&&r(O,null,0)}d.flush(),T&&T.update()}}function r(){!et&&0<J.length&&(et=W.next(e))}function n(){et&&(W.cancel(e),et=null)}function i(t){t.preventDefault(),n(),$.forEach((function(t){t()}))}function o(t){d.getError(),m.restore(),F.restore(),D.restore(),B.restore(),N.restore(),j.restore(),R.restore(),T&&T.restore(),U.procs.refresh(),r(),Q.forEach((function(t){t()}))}function s(t){function e(t,e){var r={},n={};return Object.keys(t).forEach((function(i){var a=t[i];if(Y.isDynamic(a))n[i]=Y.unbox(a,i);else{if(e&&Array.isArray(a))for(var o=0;o<a.length;++o)if(Y.isDynamic(a[o]))return void(n[i]=Y.unbox(a,i));r[i]=a}})),{dynamic:n,static:r}}var r=e(t.context||{},!0),n=e(t.uniforms||{},!0),i=e(t.attributes||{},!1);t=e(function(t){function e(t){if(t in r){var e=r[t];delete r[t],Object.keys(e).forEach((function(n){r[t+\\\".\\\"+n]=e[n]}))}}var r=G({},t);return delete r.uniforms,delete r.attributes,delete r.context,delete r.vao,\\\"stencil\\\"in r&&r.stencil.op&&(r.stencil.opBack=r.stencil.opFront=r.stencil.op,delete r.stencil.op),e(\\\"blend\\\"),e(\\\"depth\\\"),e(\\\"cull\\\"),e(\\\"stencil\\\"),e(\\\"polygonOffset\\\"),e(\\\"scissor\\\"),e(\\\"sample\\\"),\\\"vao\\\"in t&&(r.vao=t.vao),r}(t),!1);var a={gpuTime:0,cpuTime:0,count:0},o=U.compile(t,i,n,r,a),s=o.draw,l=o.batch,u=o.scope,c=[];return G((function(t,e){var r;if(\\\"function\\\"==typeof t)return u.call(this,null,t,0);if(\\\"function\\\"==typeof e)if(\\\"number\\\"==typeof t)for(r=0;r<t;++r)u.call(this,null,e,r);else{if(!Array.isArray(t))return u.call(this,t,e,0);for(r=0;r<t.length;++r)u.call(this,t[r],e,r)}else if(\\\"number\\\"==typeof t){if(0<t)return l.call(this,function(t){for(;c.length<t;)c.push(null);return c}(0|t),0|t)}else{if(!Array.isArray(t))return s.call(this,t);if(t.length)return l.call(this,t,t.length)}}),{stats:a,destroy:function(){o.destroy()}})}function l(t,e){var r=0;U.procs.poll();var n=e.color;n&&(d.clearColor(+n[0]||0,+n[1]||0,+n[2]||0,+n[3]||0),r|=16384),\\\"depth\\\"in e&&(d.clearDepth(+e.depth),r|=256),\\\"stencil\\\"in e&&(d.clearStencil(0|e.stencil),r|=1024),d.clear(r)}function u(t){return J.push(t),r(),{cancel:function(){var e=q(J,t);J[e]=function t(){var e=q(J,t);J[e]=J[J.length-1],--J.length,0>=J.length&&n()}}}}function c(){var t=V.viewport,e=V.scissor_box;t[0]=t[1]=e[0]=e[1]=0,O.viewportWidth=O.framebufferWidth=O.drawingBufferWidth=t[2]=e[2]=d.drawingBufferWidth,O.viewportHeight=O.framebufferHeight=O.drawingBufferHeight=t[3]=e[3]=d.drawingBufferHeight}function f(){O.tick+=1,O.time=p(),c(),U.procs.poll()}function h(){B.refresh(),c(),U.procs.refresh(),T&&T.update()}function p(){return(X()-k)/1e3}if(!(t=a(t)))return null;var d=t.gl,y=d.getContextAttributes();d.isContextLost();var m=function(t,e){function r(e){var r;e=e.toLowerCase();try{r=n[e]=t.getExtension(e)}catch(t){}return!!r}for(var n={},i=0;i<e.extensions.length;++i){var a=e.extensions[i];if(!r(a))return e.onDestroy(),e.onDone('\\\"'+a+'\\\" extension is not supported by the current WebGL context, try upgrading your system or a different browser'),null}return e.optionalExtensions.forEach(r),{extensions:n,restore:function(){Object.keys(n).forEach((function(t){if(n[t]&&!r(t))throw Error(\\\"(regl): error restoring extension \\\"+t)}))}}}(d,t);if(!m)return null;var x=function(){var t={\\\"\\\":0},e=[\\\"\\\"];return{id:function(r){var n=t[r];return n||(n=t[r]=e.length,e.push(r),n)},str:function(t){return e[t]}}}(),b={vaoCount:0,bufferCount:0,elementsCount:0,framebufferCount:0,shaderCount:0,textureCount:0,cubeCount:0,renderbufferCount:0,maxTextureUnits:0},_=t.cachedCode||{},w=m.extensions,T=function(t,e){function r(){this.endQueryIndex=this.startQueryIndex=-1,this.sum=0,this.stats=null}function n(t,e,n){var i=o.pop()||new r;i.startQueryIndex=t,i.endQueryIndex=e,i.sum=0,i.stats=n,s.push(i)}if(!e.ext_disjoint_timer_query)return null;var i=[],a=[],o=[],s=[],l=[],u=[];return{beginQuery:function(t){var r=i.pop()||e.ext_disjoint_timer_query.createQueryEXT();e.ext_disjoint_timer_query.beginQueryEXT(35007,r),a.push(r),n(a.length-1,a.length,t)},endQuery:function(){e.ext_disjoint_timer_query.endQueryEXT(35007)},pushScopeStats:n,update:function(){var t,r;if(0!==(t=a.length)){u.length=Math.max(u.length,t+1),l.length=Math.max(l.length,t+1),l[0]=0;var n=u[0]=0;for(r=t=0;r<a.length;++r){var c=a[r];e.ext_disjoint_timer_query.getQueryObjectEXT(c,34919)?(n+=e.ext_disjoint_timer_query.getQueryObjectEXT(c,34918),i.push(c)):a[t++]=c,l[r+1]=n,u[r+1]=t}for(a.length=t,r=t=0;r<s.length;++r){var f=(n=s[r]).startQueryIndex;c=n.endQueryIndex,n.sum+=l[c]-l[f],f=u[f],(c=u[c])===f?(n.stats.gpuTime+=n.sum/1e6,o.push(n)):(n.startQueryIndex=f,n.endQueryIndex=c,s[t++]=n)}s.length=t}},getNumPendingQueries:function(){return a.length},clear:function(){i.push.apply(i,a);for(var t=0;t<i.length;t++)e.ext_disjoint_timer_query.deleteQueryEXT(i[t]);a.length=0,i.length=0},restore:function(){a.length=0,i.length=0}}}(0,w),k=X(),A=d.drawingBufferWidth,E=d.drawingBufferHeight,O={tick:0,time:0,viewportWidth:A,viewportHeight:E,framebufferWidth:A,framebufferHeight:E,drawingBufferWidth:A,drawingBufferHeight:E,pixelRatio:t.pixelRatio},I=(A={elements:null,primitive:4,count:-1,offset:0,instances:-1},K(d,w)),D=v(d,b,t,(function(t){return R.destroyBuffer(t)})),z=g(d,w,D,b),R=L(d,w,I,b,D,z,A),F=C(d,x,b,t),B=M(d,w,I,(function(){U.procs.poll()}),O,b,t),N=Tt(d,w,0,b,t),j=S(d,w,I,B,N,b),U=H(d,x,w,I,D,z,0,j,{},R,F,A,O,T,_,t),V=(x=P(d,j,U.procs.poll,O),U.next),Z=d.canvas,J=[],$=[],Q=[],tt=[t.onDestroy],et=null;Z&&(Z.addEventListener(\\\"webglcontextlost\\\",i,!1),Z.addEventListener(\\\"webglcontextrestored\\\",o,!1));var rt=j.setFBO=s({framebuffer:Y.define.call(null,1,\\\"framebuffer\\\")});return h(),y=G(s,{clear:function(t){if(\\\"framebuffer\\\"in t)if(t.framebuffer&&\\\"framebufferCube\\\"===t.framebuffer_reglType)for(var e=0;6>e;++e)rt(G({framebuffer:t.framebuffer.faces[e]},t),l);else rt(t,l);else l(0,t)},prop:Y.define.bind(null,1),context:Y.define.bind(null,2),this:Y.define.bind(null,3),draw:s({}),buffer:function(t){return D.create(t,34962,!1,!1)},elements:function(t){return z.create(t,!1)},texture:B.create2D,cube:B.createCube,renderbuffer:N.create,framebuffer:j.create,framebufferCube:j.createCube,vao:R.createVAO,attributes:y,frame:u,on:function(t,e){var r;switch(t){case\\\"frame\\\":return u(e);case\\\"lost\\\":r=$;break;case\\\"restore\\\":r=Q;break;case\\\"destroy\\\":r=tt}return r.push(e),{cancel:function(){for(var t=0;t<r.length;++t)if(r[t]===e){r[t]=r[r.length-1],r.pop();break}}}},limits:I,hasExtension:function(t){return 0<=I.extensions.indexOf(t.toLowerCase())},read:x,destroy:function(){J.length=0,n(),Z&&(Z.removeEventListener(\\\"webglcontextlost\\\",i),Z.removeEventListener(\\\"webglcontextrestored\\\",o)),F.clear(),j.clear(),N.clear(),R.clear(),B.clear(),z.clear(),D.clear(),T&&T.clear(),tt.forEach((function(t){t()}))},_gl:d,_refresh:h,poll:function(){f(),T&&T.update()},now:p,stats:b,getCachedCode:function(){return _},preloadCachedCode:function(t){Object.entries(t).forEach((function(t){_[t[0]]=t[1]}))}}),t.onDone(null,y),y}}()},71665:function(t,e,r){var n=r(12856),i=n.Buffer;function a(t,e){for(var r in t)e[r]=t[r]}function o(t,e,r){return i(t,e,r)}i.from&&i.alloc&&i.allocUnsafe&&i.allocUnsafeSlow?t.exports=n:(a(n,e),e.Buffer=o),o.prototype=Object.create(i.prototype),a(i,o),o.from=function(t,e,r){if(\\\"number\\\"==typeof t)throw new TypeError(\\\"Argument must not be a number\\\");return i(t,e,r)},o.alloc=function(t,e,r){if(\\\"number\\\"!=typeof t)throw new TypeError(\\\"Argument must be a number\\\");var n=i(t);return void 0!==e?\\\"string\\\"==typeof r?n.fill(e,r):n.fill(e):n.fill(0),n},o.allocUnsafe=function(t){if(\\\"number\\\"!=typeof t)throw new TypeError(\\\"Argument must be a number\\\");return i(t)},o.allocUnsafeSlow=function(t){if(\\\"number\\\"!=typeof t)throw new TypeError(\\\"Argument must be a number\\\");return n.SlowBuffer(t)}},21630:function(t,e,r){t.exports=i;var n=r(15398).EventEmitter;function i(){n.call(this)}r(42018)(i,n),i.Readable=r(40410),i.Writable=r(37493),i.Duplex=r(37865),i.Transform=r(74308),i.PassThrough=r(66897),i.finished=r(12726),i.pipeline=r(10168),i.Stream=i,i.prototype.pipe=function(t,e){var r=this;function i(e){t.writable&&!1===t.write(e)&&r.pause&&r.pause()}function a(){r.readable&&r.resume&&r.resume()}r.on(\\\"data\\\",i),t.on(\\\"drain\\\",a),t._isStdio||e&&!1===e.end||(r.on(\\\"end\\\",s),r.on(\\\"close\\\",l));var o=!1;function s(){o||(o=!0,t.end())}function l(){o||(o=!0,\\\"function\\\"==typeof t.destroy&&t.destroy())}function u(t){if(c(),0===n.listenerCount(this,\\\"error\\\"))throw t}function c(){r.removeListener(\\\"data\\\",i),t.removeListener(\\\"drain\\\",a),r.removeListener(\\\"end\\\",s),r.removeListener(\\\"close\\\",l),r.removeListener(\\\"error\\\",u),t.removeListener(\\\"error\\\",u),r.removeListener(\\\"end\\\",c),r.removeListener(\\\"close\\\",c),t.removeListener(\\\"close\\\",c)}return r.on(\\\"error\\\",u),t.on(\\\"error\\\",u),r.on(\\\"end\\\",c),r.on(\\\"close\\\",c),t.on(\\\"close\\\",c),t.emit(\\\"pipe\\\",r),t}},74322:function(t){\\\"use strict\\\";var e={};function r(t,r,n){n||(n=Error);var i=function(t){var e,n;function i(e,n,i){return t.call(this,function(t,e,n){return\\\"string\\\"==typeof r?r:r(t,e,n)}(e,n,i))||this}return n=t,(e=i).prototype=Object.create(n.prototype),e.prototype.constructor=e,e.__proto__=n,i}(n);i.prototype.name=n.name,i.prototype.code=t,e[t]=i}function n(t,e){if(Array.isArray(t)){var r=t.length;return t=t.map((function(t){return String(t)})),r>2?\\\"one of \\\".concat(e,\\\" \\\").concat(t.slice(0,r-1).join(\\\", \\\"),\\\", or \\\")+t[r-1]:2===r?\\\"one of \\\".concat(e,\\\" \\\").concat(t[0],\\\" or \\\").concat(t[1]):\\\"of \\\".concat(e,\\\" \\\").concat(t[0])}return\\\"of \\\".concat(e,\\\" \\\").concat(String(t))}r(\\\"ERR_INVALID_OPT_VALUE\\\",(function(t,e){return'The value \\\"'+e+'\\\" is invalid for option \\\"'+t+'\\\"'}),TypeError),r(\\\"ERR_INVALID_ARG_TYPE\\\",(function(t,e,r){var i,a,o,s,l;if(\\\"string\\\"==typeof e&&(a=\\\"not \\\",e.substr(0,4)===a)?(i=\\\"must not be\\\",e=e.replace(/^not /,\\\"\\\")):i=\\\"must be\\\",function(t,e,r){return(void 0===r||r>t.length)&&(r=t.length),t.substring(r-9,r)===e}(t,\\\" argument\\\"))o=\\\"The \\\".concat(t,\\\" \\\").concat(i,\\\" \\\").concat(n(e,\\\"type\\\"));else{var u=(\\\"number\\\"!=typeof l&&(l=0),l+1>(s=t).length||-1===s.indexOf(\\\".\\\",l)?\\\"argument\\\":\\\"property\\\");o='The \\\"'.concat(t,'\\\" ').concat(u,\\\" \\\").concat(i,\\\" \\\").concat(n(e,\\\"type\\\"))}return o+\\\". Received type \\\".concat(typeof r)}),TypeError),r(\\\"ERR_STREAM_PUSH_AFTER_EOF\\\",\\\"stream.push() after EOF\\\"),r(\\\"ERR_METHOD_NOT_IMPLEMENTED\\\",(function(t){return\\\"The \\\"+t+\\\" method is not implemented\\\"})),r(\\\"ERR_STREAM_PREMATURE_CLOSE\\\",\\\"Premature close\\\"),r(\\\"ERR_STREAM_DESTROYED\\\",(function(t){return\\\"Cannot call \\\"+t+\\\" after a stream was destroyed\\\"})),r(\\\"ERR_MULTIPLE_CALLBACK\\\",\\\"Callback called multiple times\\\"),r(\\\"ERR_STREAM_CANNOT_PIPE\\\",\\\"Cannot pipe, not readable\\\"),r(\\\"ERR_STREAM_WRITE_AFTER_END\\\",\\\"write after end\\\"),r(\\\"ERR_STREAM_NULL_VALUES\\\",\\\"May not write null values to stream\\\",TypeError),r(\\\"ERR_UNKNOWN_ENCODING\\\",(function(t){return\\\"Unknown encoding: \\\"+t}),TypeError),r(\\\"ERR_STREAM_UNSHIFT_AFTER_END_EVENT\\\",\\\"stream.unshift() after end event\\\"),t.exports.q=e},37865:function(t,e,r){\\\"use strict\\\";var n=r(90386),i=Object.keys||function(t){var e=[];for(var r in t)e.push(r);return e};t.exports=c;var a=r(40410),o=r(37493);r(42018)(c,a);for(var s=i(o.prototype),l=0;l<s.length;l++){var u=s[l];c.prototype[u]||(c.prototype[u]=o.prototype[u])}function c(t){if(!(this instanceof c))return new c(t);a.call(this,t),o.call(this,t),this.allowHalfOpen=!0,t&&(!1===t.readable&&(this.readable=!1),!1===t.writable&&(this.writable=!1),!1===t.allowHalfOpen&&(this.allowHalfOpen=!1,this.once(\\\"end\\\",f)))}function f(){this._writableState.ended||n.nextTick(h,this)}function h(t){t.end()}Object.defineProperty(c.prototype,\\\"writableHighWaterMark\\\",{enumerable:!1,get:function(){return this._writableState.highWaterMark}}),Object.defineProperty(c.prototype,\\\"writableBuffer\\\",{enumerable:!1,get:function(){return this._writableState&&this._writableState.getBuffer()}}),Object.defineProperty(c.prototype,\\\"writableLength\\\",{enumerable:!1,get:function(){return this._writableState.length}}),Object.defineProperty(c.prototype,\\\"destroyed\\\",{enumerable:!1,get:function(){return void 0!==this._readableState&&void 0!==this._writableState&&this._readableState.destroyed&&this._writableState.destroyed},set:function(t){void 0!==this._readableState&&void 0!==this._writableState&&(this._readableState.destroyed=t,this._writableState.destroyed=t)}})},66897:function(t,e,r){\\\"use strict\\\";t.exports=i;var n=r(74308);function i(t){if(!(this instanceof i))return new i(t);n.call(this,t)}r(42018)(i,n),i.prototype._transform=function(t,e,r){r(null,t)}},40410:function(t,e,r){\\\"use strict\\\";var n,i=r(90386);t.exports=A,A.ReadableState=k,r(15398).EventEmitter;var a,o=function(t,e){return t.listeners(e).length},s=r(71405),l=r(12856).Buffer,u=r.g.Uint8Array||function(){},c=r(40964);a=c&&c.debuglog?c.debuglog(\\\"stream\\\"):function(){};var f,h,p,d=r(31125),v=r(65756),g=r(56306).getHighWaterMark,y=r(74322).q,m=y.ERR_INVALID_ARG_TYPE,x=y.ERR_STREAM_PUSH_AFTER_EOF,b=y.ERR_METHOD_NOT_IMPLEMENTED,_=y.ERR_STREAM_UNSHIFT_AFTER_END_EVENT;r(42018)(A,s);var w=v.errorOrDestroy,T=[\\\"error\\\",\\\"close\\\",\\\"destroy\\\",\\\"pause\\\",\\\"resume\\\"];function k(t,e,i){n=n||r(37865),t=t||{},\\\"boolean\\\"!=typeof i&&(i=e instanceof n),this.objectMode=!!t.objectMode,i&&(this.objectMode=this.objectMode||!!t.readableObjectMode),this.highWaterMark=g(this,t,\\\"readableHighWaterMark\\\",i),this.buffer=new d,this.length=0,this.pipes=null,this.pipesCount=0,this.flowing=null,this.ended=!1,this.endEmitted=!1,this.reading=!1,this.sync=!0,this.needReadable=!1,this.emittedReadable=!1,this.readableListening=!1,this.resumeScheduled=!1,this.paused=!0,this.emitClose=!1!==t.emitClose,this.autoDestroy=!!t.autoDestroy,this.destroyed=!1,this.defaultEncoding=t.defaultEncoding||\\\"utf8\\\",this.awaitDrain=0,this.readingMore=!1,this.decoder=null,this.encoding=null,t.encoding&&(f||(f=r(68019).s),this.decoder=new f(t.encoding),this.encoding=t.encoding)}function A(t){if(n=n||r(37865),!(this instanceof A))return new A(t);var e=this instanceof n;this._readableState=new k(t,this,e),this.readable=!0,t&&(\\\"function\\\"==typeof t.read&&(this._read=t.read),\\\"function\\\"==typeof t.destroy&&(this._destroy=t.destroy)),s.call(this)}function M(t,e,r,n,i){a(\\\"readableAddChunk\\\",e);var o,s=t._readableState;if(null===e)s.reading=!1,function(t,e){if(a(\\\"onEofChunk\\\"),!e.ended){if(e.decoder){var r=e.decoder.end();r&&r.length&&(e.buffer.push(r),e.length+=e.objectMode?1:r.length)}e.ended=!0,e.sync?C(t):(e.needReadable=!1,e.emittedReadable||(e.emittedReadable=!0,P(t)))}}(t,s);else if(i||(o=function(t,e){var r,n;return n=e,l.isBuffer(n)||n instanceof u||\\\"string\\\"==typeof e||void 0===e||t.objectMode||(r=new m(\\\"chunk\\\",[\\\"string\\\",\\\"Buffer\\\",\\\"Uint8Array\\\"],e)),r}(s,e)),o)w(t,o);else if(s.objectMode||e&&e.length>0)if(\\\"string\\\"==typeof e||s.objectMode||Object.getPrototypeOf(e)===l.prototype||(e=function(t){return l.from(t)}(e)),n)s.endEmitted?w(t,new _):S(t,s,e,!0);else if(s.ended)w(t,new x);else{if(s.destroyed)return!1;s.reading=!1,s.decoder&&!r?(e=s.decoder.write(e),s.objectMode||0!==e.length?S(t,s,e,!1):O(t,s)):S(t,s,e,!1)}else n||(s.reading=!1,O(t,s));return!s.ended&&(s.length<s.highWaterMark||0===s.length)}function S(t,e,r,n){e.flowing&&0===e.length&&!e.sync?(e.awaitDrain=0,t.emit(\\\"data\\\",r)):(e.length+=e.objectMode?1:r.length,n?e.buffer.unshift(r):e.buffer.push(r),e.needReadable&&C(t)),O(t,e)}Object.defineProperty(A.prototype,\\\"destroyed\\\",{enumerable:!1,get:function(){return void 0!==this._readableState&&this._readableState.destroyed},set:function(t){this._readableState&&(this._readableState.destroyed=t)}}),A.prototype.destroy=v.destroy,A.prototype._undestroy=v.undestroy,A.prototype._destroy=function(t,e){e(t)},A.prototype.push=function(t,e){var r,n=this._readableState;return n.objectMode?r=!0:\\\"string\\\"==typeof t&&((e=e||n.defaultEncoding)!==n.encoding&&(t=l.from(t,e),e=\\\"\\\"),r=!0),M(this,t,e,!1,r)},A.prototype.unshift=function(t){return M(this,t,null,!0,!1)},A.prototype.isPaused=function(){return!1===this._readableState.flowing},A.prototype.setEncoding=function(t){f||(f=r(68019).s);var e=new f(t);this._readableState.decoder=e,this._readableState.encoding=this._readableState.decoder.encoding;for(var n=this._readableState.buffer.head,i=\\\"\\\";null!==n;)i+=e.write(n.data),n=n.next;return this._readableState.buffer.clear(),\\\"\\\"!==i&&this._readableState.buffer.push(i),this._readableState.length=i.length,this};var E=1073741824;function L(t,e){return t<=0||0===e.length&&e.ended?0:e.objectMode?1:t!=t?e.flowing&&e.length?e.buffer.head.data.length:e.length:(t>e.highWaterMark&&(e.highWaterMark=function(t){return t>=E?t=E:(t--,t|=t>>>1,t|=t>>>2,t|=t>>>4,t|=t>>>8,t|=t>>>16,t++),t}(t)),t<=e.length?t:e.ended?e.length:(e.needReadable=!0,0))}function C(t){var e=t._readableState;a(\\\"emitReadable\\\",e.needReadable,e.emittedReadable),e.needReadable=!1,e.emittedReadable||(a(\\\"emitReadable\\\",e.flowing),e.emittedReadable=!0,i.nextTick(P,t))}function P(t){var e=t._readableState;a(\\\"emitReadable_\\\",e.destroyed,e.length,e.ended),e.destroyed||!e.length&&!e.ended||(t.emit(\\\"readable\\\"),e.emittedReadable=!1),e.needReadable=!e.flowing&&!e.ended&&e.length<=e.highWaterMark,F(t)}function O(t,e){e.readingMore||(e.readingMore=!0,i.nextTick(I,t,e))}function I(t,e){for(;!e.reading&&!e.ended&&(e.length<e.highWaterMark||e.flowing&&0===e.length);){var r=e.length;if(a(\\\"maybeReadMore read 0\\\"),t.read(0),r===e.length)break}e.readingMore=!1}function D(t){var e=t._readableState;e.readableListening=t.listenerCount(\\\"readable\\\")>0,e.resumeScheduled&&!e.paused?e.flowing=!0:t.listenerCount(\\\"data\\\")>0&&t.resume()}function z(t){a(\\\"readable nexttick read 0\\\"),t.read(0)}function R(t,e){a(\\\"resume\\\",e.reading),e.reading||t.read(0),e.resumeScheduled=!1,t.emit(\\\"resume\\\"),F(t),e.flowing&&!e.reading&&t.read(0)}function F(t){var e=t._readableState;for(a(\\\"flow\\\",e.flowing);e.flowing&&null!==t.read(););}function B(t,e){return 0===e.length?null:(e.objectMode?r=e.buffer.shift():!t||t>=e.length?(r=e.decoder?e.buffer.join(\\\"\\\"):1===e.buffer.length?e.buffer.first():e.buffer.concat(e.length),e.buffer.clear()):r=e.buffer.consume(t,e.decoder),r);var r}function N(t){var e=t._readableState;a(\\\"endReadable\\\",e.endEmitted),e.endEmitted||(e.ended=!0,i.nextTick(j,e,t))}function j(t,e){if(a(\\\"endReadableNT\\\",t.endEmitted,t.length),!t.endEmitted&&0===t.length&&(t.endEmitted=!0,e.readable=!1,e.emit(\\\"end\\\"),t.autoDestroy)){var r=e._writableState;(!r||r.autoDestroy&&r.finished)&&e.destroy()}}function U(t,e){for(var r=0,n=t.length;r<n;r++)if(t[r]===e)return r;return-1}A.prototype.read=function(t){a(\\\"read\\\",t),t=parseInt(t,10);var e=this._readableState,r=t;if(0!==t&&(e.emittedReadable=!1),0===t&&e.needReadable&&((0!==e.highWaterMark?e.length>=e.highWaterMark:e.length>0)||e.ended))return a(\\\"read: emitReadable\\\",e.length,e.ended),0===e.length&&e.ended?N(this):C(this),null;if(0===(t=L(t,e))&&e.ended)return 0===e.length&&N(this),null;var n,i=e.needReadable;return a(\\\"need readable\\\",i),(0===e.length||e.length-t<e.highWaterMark)&&a(\\\"length less than watermark\\\",i=!0),e.ended||e.reading?a(\\\"reading or ended\\\",i=!1):i&&(a(\\\"do read\\\"),e.reading=!0,e.sync=!0,0===e.length&&(e.needReadable=!0),this._read(e.highWaterMark),e.sync=!1,e.reading||(t=L(r,e))),null===(n=t>0?B(t,e):null)?(e.needReadable=e.length<=e.highWaterMark,t=0):(e.length-=t,e.awaitDrain=0),0===e.length&&(e.ended||(e.needReadable=!0),r!==t&&e.ended&&N(this)),null!==n&&this.emit(\\\"data\\\",n),n},A.prototype._read=function(t){w(this,new b(\\\"_read()\\\"))},A.prototype.pipe=function(t,e){var r=this,n=this._readableState;switch(n.pipesCount){case 0:n.pipes=t;break;case 1:n.pipes=[n.pipes,t];break;default:n.pipes.push(t)}n.pipesCount+=1,a(\\\"pipe count=%d opts=%j\\\",n.pipesCount,e);var s=e&&!1===e.end||t===i.stdout||t===i.stderr?v:l;function l(){a(\\\"onend\\\"),t.end()}n.endEmitted?i.nextTick(s):r.once(\\\"end\\\",s),t.on(\\\"unpipe\\\",(function e(i,o){a(\\\"onunpipe\\\"),i===r&&o&&!1===o.hasUnpiped&&(o.hasUnpiped=!0,a(\\\"cleanup\\\"),t.removeListener(\\\"close\\\",p),t.removeListener(\\\"finish\\\",d),t.removeListener(\\\"drain\\\",u),t.removeListener(\\\"error\\\",h),t.removeListener(\\\"unpipe\\\",e),r.removeListener(\\\"end\\\",l),r.removeListener(\\\"end\\\",v),r.removeListener(\\\"data\\\",f),c=!0,!n.awaitDrain||t._writableState&&!t._writableState.needDrain||u())}));var u=function(t){return function(){var e=t._readableState;a(\\\"pipeOnDrain\\\",e.awaitDrain),e.awaitDrain&&e.awaitDrain--,0===e.awaitDrain&&o(t,\\\"data\\\")&&(e.flowing=!0,F(t))}}(r);t.on(\\\"drain\\\",u);var c=!1;function f(e){a(\\\"ondata\\\");var i=t.write(e);a(\\\"dest.write\\\",i),!1===i&&((1===n.pipesCount&&n.pipes===t||n.pipesCount>1&&-1!==U(n.pipes,t))&&!c&&(a(\\\"false write response, pause\\\",n.awaitDrain),n.awaitDrain++),r.pause())}function h(e){a(\\\"onerror\\\",e),v(),t.removeListener(\\\"error\\\",h),0===o(t,\\\"error\\\")&&w(t,e)}function p(){t.removeListener(\\\"finish\\\",d),v()}function d(){a(\\\"onfinish\\\"),t.removeListener(\\\"close\\\",p),v()}function v(){a(\\\"unpipe\\\"),r.unpipe(t)}return r.on(\\\"data\\\",f),function(t,e,r){if(\\\"function\\\"==typeof t.prependListener)return t.prependListener(e,r);t._events&&t._events[e]?Array.isArray(t._events[e])?t._events[e].unshift(r):t._events[e]=[r,t._events[e]]:t.on(e,r)}(t,\\\"error\\\",h),t.once(\\\"close\\\",p),t.once(\\\"finish\\\",d),t.emit(\\\"pipe\\\",r),n.flowing||(a(\\\"pipe resume\\\"),r.resume()),t},A.prototype.unpipe=function(t){var e=this._readableState,r={hasUnpiped:!1};if(0===e.pipesCount)return this;if(1===e.pipesCount)return t&&t!==e.pipes||(t||(t=e.pipes),e.pipes=null,e.pipesCount=0,e.flowing=!1,t&&t.emit(\\\"unpipe\\\",this,r)),this;if(!t){var n=e.pipes,i=e.pipesCount;e.pipes=null,e.pipesCount=0,e.flowing=!1;for(var a=0;a<i;a++)n[a].emit(\\\"unpipe\\\",this,{hasUnpiped:!1});return this}var o=U(e.pipes,t);return-1===o||(e.pipes.splice(o,1),e.pipesCount-=1,1===e.pipesCount&&(e.pipes=e.pipes[0]),t.emit(\\\"unpipe\\\",this,r)),this},A.prototype.on=function(t,e){var r=s.prototype.on.call(this,t,e),n=this._readableState;return\\\"data\\\"===t?(n.readableListening=this.listenerCount(\\\"readable\\\")>0,!1!==n.flowing&&this.resume()):\\\"readable\\\"===t&&(n.endEmitted||n.readableListening||(n.readableListening=n.needReadable=!0,n.flowing=!1,n.emittedReadable=!1,a(\\\"on readable\\\",n.length,n.reading),n.length?C(this):n.reading||i.nextTick(z,this))),r},A.prototype.addListener=A.prototype.on,A.prototype.removeListener=function(t,e){var r=s.prototype.removeListener.call(this,t,e);return\\\"readable\\\"===t&&i.nextTick(D,this),r},A.prototype.removeAllListeners=function(t){var e=s.prototype.removeAllListeners.apply(this,arguments);return\\\"readable\\\"!==t&&void 0!==t||i.nextTick(D,this),e},A.prototype.resume=function(){var t=this._readableState;return t.flowing||(a(\\\"resume\\\"),t.flowing=!t.readableListening,function(t,e){e.resumeScheduled||(e.resumeScheduled=!0,i.nextTick(R,t,e))}(this,t)),t.paused=!1,this},A.prototype.pause=function(){return a(\\\"call pause flowing=%j\\\",this._readableState.flowing),!1!==this._readableState.flowing&&(a(\\\"pause\\\"),this._readableState.flowing=!1,this.emit(\\\"pause\\\")),this._readableState.paused=!0,this},A.prototype.wrap=function(t){var e=this,r=this._readableState,n=!1;for(var i in t.on(\\\"end\\\",(function(){if(a(\\\"wrapped end\\\"),r.decoder&&!r.ended){var t=r.decoder.end();t&&t.length&&e.push(t)}e.push(null)})),t.on(\\\"data\\\",(function(i){a(\\\"wrapped data\\\"),r.decoder&&(i=r.decoder.write(i)),r.objectMode&&null==i||(r.objectMode||i&&i.length)&&(e.push(i)||(n=!0,t.pause()))})),t)void 0===this[i]&&\\\"function\\\"==typeof t[i]&&(this[i]=function(e){return function(){return t[e].apply(t,arguments)}}(i));for(var o=0;o<T.length;o++)t.on(T[o],this.emit.bind(this,T[o]));return this._read=function(e){a(\\\"wrapped _read\\\",e),n&&(n=!1,t.resume())},this},\\\"function\\\"==typeof Symbol&&(A.prototype[Symbol.asyncIterator]=function(){return void 0===h&&(h=r(68221)),h(this)}),Object.defineProperty(A.prototype,\\\"readableHighWaterMark\\\",{enumerable:!1,get:function(){return this._readableState.highWaterMark}}),Object.defineProperty(A.prototype,\\\"readableBuffer\\\",{enumerable:!1,get:function(){return this._readableState&&this._readableState.buffer}}),Object.defineProperty(A.prototype,\\\"readableFlowing\\\",{enumerable:!1,get:function(){return this._readableState.flowing},set:function(t){this._readableState&&(this._readableState.flowing=t)}}),A._fromList=B,Object.defineProperty(A.prototype,\\\"readableLength\\\",{enumerable:!1,get:function(){return this._readableState.length}}),\\\"function\\\"==typeof Symbol&&(A.from=function(t,e){return void 0===p&&(p=r(31748)),p(A,t,e)})},74308:function(t,e,r){\\\"use strict\\\";t.exports=c;var n=r(74322).q,i=n.ERR_METHOD_NOT_IMPLEMENTED,a=n.ERR_MULTIPLE_CALLBACK,o=n.ERR_TRANSFORM_ALREADY_TRANSFORMING,s=n.ERR_TRANSFORM_WITH_LENGTH_0,l=r(37865);function u(t,e){var r=this._transformState;r.transforming=!1;var n=r.writecb;if(null===n)return this.emit(\\\"error\\\",new a);r.writechunk=null,r.writecb=null,null!=e&&this.push(e),n(t);var i=this._readableState;i.reading=!1,(i.needReadable||i.length<i.highWaterMark)&&this._read(i.highWaterMark)}function c(t){if(!(this instanceof c))return new c(t);l.call(this,t),this._transformState={afterTransform:u.bind(this),needTransform:!1,transforming:!1,writecb:null,writechunk:null,writeencoding:null},this._readableState.needReadable=!0,this._readableState.sync=!1,t&&(\\\"function\\\"==typeof t.transform&&(this._transform=t.transform),\\\"function\\\"==typeof t.flush&&(this._flush=t.flush)),this.on(\\\"prefinish\\\",f)}function f(){var t=this;\\\"function\\\"!=typeof this._flush||this._readableState.destroyed?h(this,null,null):this._flush((function(e,r){h(t,e,r)}))}function h(t,e,r){if(e)return t.emit(\\\"error\\\",e);if(null!=r&&t.push(r),t._writableState.length)throw new s;if(t._transformState.transforming)throw new o;return t.push(null)}r(42018)(c,l),c.prototype.push=function(t,e){return this._transformState.needTransform=!1,l.prototype.push.call(this,t,e)},c.prototype._transform=function(t,e,r){r(new i(\\\"_transform()\\\"))},c.prototype._write=function(t,e,r){var n=this._transformState;if(n.writecb=r,n.writechunk=t,n.writeencoding=e,!n.transforming){var i=this._readableState;(n.needTransform||i.needReadable||i.length<i.highWaterMark)&&this._read(i.highWaterMark)}},c.prototype._read=function(t){var e=this._transformState;null===e.writechunk||e.transforming?e.needTransform=!0:(e.transforming=!0,this._transform(e.writechunk,e.writeencoding,e.afterTransform))},c.prototype._destroy=function(t,e){l.prototype._destroy.call(this,t,(function(t){e(t)}))}},37493:function(t,e,r){\\\"use strict\\\";var n,i=r(90386);function a(t){var e=this;this.next=null,this.entry=null,this.finish=function(){!function(t,e,r){var n=t.entry;for(t.entry=null;n;){var i=n.callback;e.pendingcb--,i(undefined),n=n.next}e.corkedRequestsFree.next=t}(e,t)}}t.exports=A,A.WritableState=k;var o,s={deprecate:r(20588)},l=r(71405),u=r(12856).Buffer,c=r.g.Uint8Array||function(){},f=r(65756),h=r(56306).getHighWaterMark,p=r(74322).q,d=p.ERR_INVALID_ARG_TYPE,v=p.ERR_METHOD_NOT_IMPLEMENTED,g=p.ERR_MULTIPLE_CALLBACK,y=p.ERR_STREAM_CANNOT_PIPE,m=p.ERR_STREAM_DESTROYED,x=p.ERR_STREAM_NULL_VALUES,b=p.ERR_STREAM_WRITE_AFTER_END,_=p.ERR_UNKNOWN_ENCODING,w=f.errorOrDestroy;function T(){}function k(t,e,o){n=n||r(37865),t=t||{},\\\"boolean\\\"!=typeof o&&(o=e instanceof n),this.objectMode=!!t.objectMode,o&&(this.objectMode=this.objectMode||!!t.writableObjectMode),this.highWaterMark=h(this,t,\\\"writableHighWaterMark\\\",o),this.finalCalled=!1,this.needDrain=!1,this.ending=!1,this.ended=!1,this.finished=!1,this.destroyed=!1;var s=!1===t.decodeStrings;this.decodeStrings=!s,this.defaultEncoding=t.defaultEncoding||\\\"utf8\\\",this.length=0,this.writing=!1,this.corked=0,this.sync=!0,this.bufferProcessing=!1,this.onwrite=function(t){!function(t,e){var r=t._writableState,n=r.sync,a=r.writecb;if(\\\"function\\\"!=typeof a)throw new g;if(function(t){t.writing=!1,t.writecb=null,t.length-=t.writelen,t.writelen=0}(r),e)!function(t,e,r,n,a){--e.pendingcb,r?(i.nextTick(a,n),i.nextTick(P,t,e),t._writableState.errorEmitted=!0,w(t,n)):(a(n),t._writableState.errorEmitted=!0,w(t,n),P(t,e))}(t,r,n,e,a);else{var o=L(r)||t.destroyed;o||r.corked||r.bufferProcessing||!r.bufferedRequest||E(t,r),n?i.nextTick(S,t,r,o,a):S(t,r,o,a)}}(e,t)},this.writecb=null,this.writelen=0,this.bufferedRequest=null,this.lastBufferedRequest=null,this.pendingcb=0,this.prefinished=!1,this.errorEmitted=!1,this.emitClose=!1!==t.emitClose,this.autoDestroy=!!t.autoDestroy,this.bufferedRequestCount=0,this.corkedRequestsFree=new a(this)}function A(t){var e=this instanceof(n=n||r(37865));if(!e&&!o.call(A,this))return new A(t);this._writableState=new k(t,this,e),this.writable=!0,t&&(\\\"function\\\"==typeof t.write&&(this._write=t.write),\\\"function\\\"==typeof t.writev&&(this._writev=t.writev),\\\"function\\\"==typeof t.destroy&&(this._destroy=t.destroy),\\\"function\\\"==typeof t.final&&(this._final=t.final)),l.call(this)}function M(t,e,r,n,i,a,o){e.writelen=n,e.writecb=o,e.writing=!0,e.sync=!0,e.destroyed?e.onwrite(new m(\\\"write\\\")):r?t._writev(i,e.onwrite):t._write(i,a,e.onwrite),e.sync=!1}function S(t,e,r,n){r||function(t,e){0===e.length&&e.needDrain&&(e.needDrain=!1,t.emit(\\\"drain\\\"))}(t,e),e.pendingcb--,n(),P(t,e)}function E(t,e){e.bufferProcessing=!0;var r=e.bufferedRequest;if(t._writev&&r&&r.next){var n=e.bufferedRequestCount,i=new Array(n),o=e.corkedRequestsFree;o.entry=r;for(var s=0,l=!0;r;)i[s]=r,r.isBuf||(l=!1),r=r.next,s+=1;i.allBuffers=l,M(t,e,!0,e.length,i,\\\"\\\",o.finish),e.pendingcb++,e.lastBufferedRequest=null,o.next?(e.corkedRequestsFree=o.next,o.next=null):e.corkedRequestsFree=new a(e),e.bufferedRequestCount=0}else{for(;r;){var u=r.chunk,c=r.encoding,f=r.callback;if(M(t,e,!1,e.objectMode?1:u.length,u,c,f),r=r.next,e.bufferedRequestCount--,e.writing)break}null===r&&(e.lastBufferedRequest=null)}e.bufferedRequest=r,e.bufferProcessing=!1}function L(t){return t.ending&&0===t.length&&null===t.bufferedRequest&&!t.finished&&!t.writing}function C(t,e){t._final((function(r){e.pendingcb--,r&&w(t,r),e.prefinished=!0,t.emit(\\\"prefinish\\\"),P(t,e)}))}function P(t,e){var r=L(e);if(r&&(function(t,e){e.prefinished||e.finalCalled||(\\\"function\\\"!=typeof t._final||e.destroyed?(e.prefinished=!0,t.emit(\\\"prefinish\\\")):(e.pendingcb++,e.finalCalled=!0,i.nextTick(C,t,e)))}(t,e),0===e.pendingcb&&(e.finished=!0,t.emit(\\\"finish\\\"),e.autoDestroy))){var n=t._readableState;(!n||n.autoDestroy&&n.endEmitted)&&t.destroy()}return r}r(42018)(A,l),k.prototype.getBuffer=function(){for(var t=this.bufferedRequest,e=[];t;)e.push(t),t=t.next;return e},function(){try{Object.defineProperty(k.prototype,\\\"buffer\\\",{get:s.deprecate((function(){return this.getBuffer()}),\\\"_writableState.buffer is deprecated. Use _writableState.getBuffer instead.\\\",\\\"DEP0003\\\")})}catch(t){}}(),\\\"function\\\"==typeof Symbol&&Symbol.hasInstance&&\\\"function\\\"==typeof Function.prototype[Symbol.hasInstance]?(o=Function.prototype[Symbol.hasInstance],Object.defineProperty(A,Symbol.hasInstance,{value:function(t){return!!o.call(this,t)||this===A&&t&&t._writableState instanceof k}})):o=function(t){return t instanceof this},A.prototype.pipe=function(){w(this,new y)},A.prototype.write=function(t,e,r){var n,a=this._writableState,o=!1,s=!a.objectMode&&(n=t,u.isBuffer(n)||n instanceof c);return s&&!u.isBuffer(t)&&(t=function(t){return u.from(t)}(t)),\\\"function\\\"==typeof e&&(r=e,e=null),s?e=\\\"buffer\\\":e||(e=a.defaultEncoding),\\\"function\\\"!=typeof r&&(r=T),a.ending?function(t,e){var r=new b;w(t,r),i.nextTick(e,r)}(this,r):(s||function(t,e,r,n){var a;return null===r?a=new x:\\\"string\\\"==typeof r||e.objectMode||(a=new d(\\\"chunk\\\",[\\\"string\\\",\\\"Buffer\\\"],r)),!a||(w(t,a),i.nextTick(n,a),!1)}(this,a,t,r))&&(a.pendingcb++,o=function(t,e,r,n,i,a){if(!r){var o=function(t,e,r){return t.objectMode||!1===t.decodeStrings||\\\"string\\\"!=typeof e||(e=u.from(e,r)),e}(e,n,i);n!==o&&(r=!0,i=\\\"buffer\\\",n=o)}var s=e.objectMode?1:n.length;e.length+=s;var l=e.length<e.highWaterMark;if(l||(e.needDrain=!0),e.writing||e.corked){var c=e.lastBufferedRequest;e.lastBufferedRequest={chunk:n,encoding:i,isBuf:r,callback:a,next:null},c?c.next=e.lastBufferedRequest:e.bufferedRequest=e.lastBufferedRequest,e.bufferedRequestCount+=1}else M(t,e,!1,s,n,i,a);return l}(this,a,s,t,e,r)),o},A.prototype.cork=function(){this._writableState.corked++},A.prototype.uncork=function(){var t=this._writableState;t.corked&&(t.corked--,t.writing||t.corked||t.bufferProcessing||!t.bufferedRequest||E(this,t))},A.prototype.setDefaultEncoding=function(t){if(\\\"string\\\"==typeof t&&(t=t.toLowerCase()),!([\\\"hex\\\",\\\"utf8\\\",\\\"utf-8\\\",\\\"ascii\\\",\\\"binary\\\",\\\"base64\\\",\\\"ucs2\\\",\\\"ucs-2\\\",\\\"utf16le\\\",\\\"utf-16le\\\",\\\"raw\\\"].indexOf((t+\\\"\\\").toLowerCase())>-1))throw new _(t);return this._writableState.defaultEncoding=t,this},Object.defineProperty(A.prototype,\\\"writableBuffer\\\",{enumerable:!1,get:function(){return this._writableState&&this._writableState.getBuffer()}}),Object.defineProperty(A.prototype,\\\"writableHighWaterMark\\\",{enumerable:!1,get:function(){return this._writableState.highWaterMark}}),A.prototype._write=function(t,e,r){r(new v(\\\"_write()\\\"))},A.prototype._writev=null,A.prototype.end=function(t,e,r){var n=this._writableState;return\\\"function\\\"==typeof t?(r=t,t=null,e=null):\\\"function\\\"==typeof e&&(r=e,e=null),null!=t&&this.write(t,e),n.corked&&(n.corked=1,this.uncork()),n.ending||function(t,e,r){e.ending=!0,P(t,e),r&&(e.finished?i.nextTick(r):t.once(\\\"finish\\\",r)),e.ended=!0,t.writable=!1}(this,n,r),this},Object.defineProperty(A.prototype,\\\"writableLength\\\",{enumerable:!1,get:function(){return this._writableState.length}}),Object.defineProperty(A.prototype,\\\"destroyed\\\",{enumerable:!1,get:function(){return void 0!==this._writableState&&this._writableState.destroyed},set:function(t){this._writableState&&(this._writableState.destroyed=t)}}),A.prototype.destroy=f.destroy,A.prototype._undestroy=f.undestroy,A.prototype._destroy=function(t,e){e(t)}},68221:function(t,e,r){\\\"use strict\\\";var n,i=r(90386);function a(t,e,r){return e in t?Object.defineProperty(t,e,{value:r,enumerable:!0,configurable:!0,writable:!0}):t[e]=r,t}var o=r(12726),s=Symbol(\\\"lastResolve\\\"),l=Symbol(\\\"lastReject\\\"),u=Symbol(\\\"error\\\"),c=Symbol(\\\"ended\\\"),f=Symbol(\\\"lastPromise\\\"),h=Symbol(\\\"handlePromise\\\"),p=Symbol(\\\"stream\\\");function d(t,e){return{value:t,done:e}}function v(t){var e=t[s];if(null!==e){var r=t[p].read();null!==r&&(t[f]=null,t[s]=null,t[l]=null,e(d(r,!1)))}}function g(t){i.nextTick(v,t)}var y=Object.getPrototypeOf((function(){})),m=Object.setPrototypeOf((a(n={get stream(){return this[p]},next:function(){var t=this,e=this[u];if(null!==e)return Promise.reject(e);if(this[c])return Promise.resolve(d(void 0,!0));if(this[p].destroyed)return new Promise((function(e,r){i.nextTick((function(){t[u]?r(t[u]):e(d(void 0,!0))}))}));var r,n=this[f];if(n)r=new Promise(function(t,e){return function(r,n){t.then((function(){e[c]?r(d(void 0,!0)):e[h](r,n)}),n)}}(n,this));else{var a=this[p].read();if(null!==a)return Promise.resolve(d(a,!1));r=new Promise(this[h])}return this[f]=r,r}},Symbol.asyncIterator,(function(){return this})),a(n,\\\"return\\\",(function(){var t=this;return new Promise((function(e,r){t[p].destroy(null,(function(t){t?r(t):e(d(void 0,!0))}))}))})),n),y);t.exports=function(t){var e,r=Object.create(m,(a(e={},p,{value:t,writable:!0}),a(e,s,{value:null,writable:!0}),a(e,l,{value:null,writable:!0}),a(e,u,{value:null,writable:!0}),a(e,c,{value:t._readableState.endEmitted,writable:!0}),a(e,h,{value:function(t,e){var n=r[p].read();n?(r[f]=null,r[s]=null,r[l]=null,t(d(n,!1))):(r[s]=t,r[l]=e)},writable:!0}),e));return r[f]=null,o(t,(function(t){if(t&&\\\"ERR_STREAM_PREMATURE_CLOSE\\\"!==t.code){var e=r[l];return null!==e&&(r[f]=null,r[s]=null,r[l]=null,e(t)),void(r[u]=t)}var n=r[s];null!==n&&(r[f]=null,r[s]=null,r[l]=null,n(d(void 0,!0))),r[c]=!0})),t.on(\\\"readable\\\",g.bind(null,r)),r}},31125:function(t,e,r){\\\"use strict\\\";function n(t,e){var r=Object.keys(t);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(t);e&&(n=n.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),r.push.apply(r,n)}return r}function i(t,e,r){return e in t?Object.defineProperty(t,e,{value:r,enumerable:!0,configurable:!0,writable:!0}):t[e]=r,t}function a(t,e){for(var r=0;r<e.length;r++){var n=e[r];n.enumerable=n.enumerable||!1,n.configurable=!0,\\\"value\\\"in n&&(n.writable=!0),Object.defineProperty(t,n.key,n)}}var o=r(12856).Buffer,s=r(69862).inspect,l=s&&s.custom||\\\"inspect\\\";t.exports=function(){function t(){!function(t,e){if(!(t instanceof e))throw new TypeError(\\\"Cannot call a class as a function\\\")}(this,t),this.head=null,this.tail=null,this.length=0}var e,r;return e=t,r=[{key:\\\"push\\\",value:function(t){var e={data:t,next:null};this.length>0?this.tail.next=e:this.head=e,this.tail=e,++this.length}},{key:\\\"unshift\\\",value:function(t){var e={data:t,next:this.head};0===this.length&&(this.tail=e),this.head=e,++this.length}},{key:\\\"shift\\\",value:function(){if(0!==this.length){var t=this.head.data;return 1===this.length?this.head=this.tail=null:this.head=this.head.next,--this.length,t}}},{key:\\\"clear\\\",value:function(){this.head=this.tail=null,this.length=0}},{key:\\\"join\\\",value:function(t){if(0===this.length)return\\\"\\\";for(var e=this.head,r=\\\"\\\"+e.data;e=e.next;)r+=t+e.data;return r}},{key:\\\"concat\\\",value:function(t){if(0===this.length)return o.alloc(0);for(var e,r,n,i=o.allocUnsafe(t>>>0),a=this.head,s=0;a;)e=a.data,r=i,n=s,o.prototype.copy.call(e,r,n),s+=a.data.length,a=a.next;return i}},{key:\\\"consume\\\",value:function(t,e){var r;return t<this.head.data.length?(r=this.head.data.slice(0,t),this.head.data=this.head.data.slice(t)):r=t===this.head.data.length?this.shift():e?this._getString(t):this._getBuffer(t),r}},{key:\\\"first\\\",value:function(){return this.head.data}},{key:\\\"_getString\\\",value:function(t){var e=this.head,r=1,n=e.data;for(t-=n.length;e=e.next;){var i=e.data,a=t>i.length?i.length:t;if(a===i.length?n+=i:n+=i.slice(0,t),0==(t-=a)){a===i.length?(++r,e.next?this.head=e.next:this.head=this.tail=null):(this.head=e,e.data=i.slice(a));break}++r}return this.length-=r,n}},{key:\\\"_getBuffer\\\",value:function(t){var e=o.allocUnsafe(t),r=this.head,n=1;for(r.data.copy(e),t-=r.data.length;r=r.next;){var i=r.data,a=t>i.length?i.length:t;if(i.copy(e,e.length-t,0,a),0==(t-=a)){a===i.length?(++n,r.next?this.head=r.next:this.head=this.tail=null):(this.head=r,r.data=i.slice(a));break}++n}return this.length-=n,e}},{key:l,value:function(t,e){return s(this,function(t){for(var e=1;e<arguments.length;e++){var r=null!=arguments[e]?arguments[e]:{};e%2?n(Object(r),!0).forEach((function(e){i(t,e,r[e])})):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(r)):n(Object(r)).forEach((function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(r,e))}))}return t}({},e,{depth:0,customInspect:!1}))}}],r&&a(e.prototype,r),t}()},65756:function(t,e,r){\\\"use strict\\\";var n=r(90386);function i(t,e){o(t,e),a(t)}function a(t){t._writableState&&!t._writableState.emitClose||t._readableState&&!t._readableState.emitClose||t.emit(\\\"close\\\")}function o(t,e){t.emit(\\\"error\\\",e)}t.exports={destroy:function(t,e){var r=this,s=this._readableState&&this._readableState.destroyed,l=this._writableState&&this._writableState.destroyed;return s||l?(e?e(t):t&&(this._writableState?this._writableState.errorEmitted||(this._writableState.errorEmitted=!0,n.nextTick(o,this,t)):n.nextTick(o,this,t)),this):(this._readableState&&(this._readableState.destroyed=!0),this._writableState&&(this._writableState.destroyed=!0),this._destroy(t||null,(function(t){!e&&t?r._writableState?r._writableState.errorEmitted?n.nextTick(a,r):(r._writableState.errorEmitted=!0,n.nextTick(i,r,t)):n.nextTick(i,r,t):e?(n.nextTick(a,r),e(t)):n.nextTick(a,r)})),this)},undestroy:function(){this._readableState&&(this._readableState.destroyed=!1,this._readableState.reading=!1,this._readableState.ended=!1,this._readableState.endEmitted=!1),this._writableState&&(this._writableState.destroyed=!1,this._writableState.ended=!1,this._writableState.ending=!1,this._writableState.finalCalled=!1,this._writableState.prefinished=!1,this._writableState.finished=!1,this._writableState.errorEmitted=!1)},errorOrDestroy:function(t,e){var r=t._readableState,n=t._writableState;r&&r.autoDestroy||n&&n.autoDestroy?t.destroy(e):t.emit(\\\"error\\\",e)}}},12726:function(t,e,r){\\\"use strict\\\";var n=r(74322).q.ERR_STREAM_PREMATURE_CLOSE;function i(){}t.exports=function t(e,r,a){if(\\\"function\\\"==typeof r)return t(e,null,r);r||(r={}),a=function(t){var e=!1;return function(){if(!e){e=!0;for(var r=arguments.length,n=new Array(r),i=0;i<r;i++)n[i]=arguments[i];t.apply(this,n)}}}(a||i);var o=r.readable||!1!==r.readable&&e.readable,s=r.writable||!1!==r.writable&&e.writable,l=function(){e.writable||c()},u=e._writableState&&e._writableState.finished,c=function(){s=!1,u=!0,o||a.call(e)},f=e._readableState&&e._readableState.endEmitted,h=function(){o=!1,f=!0,s||a.call(e)},p=function(t){a.call(e,t)},d=function(){var t;return o&&!f?(e._readableState&&e._readableState.ended||(t=new n),a.call(e,t)):s&&!u?(e._writableState&&e._writableState.ended||(t=new n),a.call(e,t)):void 0},v=function(){e.req.on(\\\"finish\\\",c)};return function(t){return t.setHeader&&\\\"function\\\"==typeof t.abort}(e)?(e.on(\\\"complete\\\",c),e.on(\\\"abort\\\",d),e.req?v():e.on(\\\"request\\\",v)):s&&!e._writableState&&(e.on(\\\"end\\\",l),e.on(\\\"close\\\",l)),e.on(\\\"end\\\",h),e.on(\\\"finish\\\",c),!1!==r.error&&e.on(\\\"error\\\",p),e.on(\\\"close\\\",d),function(){e.removeListener(\\\"complete\\\",c),e.removeListener(\\\"abort\\\",d),e.removeListener(\\\"request\\\",v),e.req&&e.req.removeListener(\\\"finish\\\",c),e.removeListener(\\\"end\\\",l),e.removeListener(\\\"close\\\",l),e.removeListener(\\\"finish\\\",c),e.removeListener(\\\"end\\\",h),e.removeListener(\\\"error\\\",p),e.removeListener(\\\"close\\\",d)}}},31748:function(t){t.exports=function(){throw new Error(\\\"Readable.from is not available in the browser\\\")}},10168:function(t,e,r){\\\"use strict\\\";var n,i=r(74322).q,a=i.ERR_MISSING_ARGS,o=i.ERR_STREAM_DESTROYED;function s(t){if(t)throw t}function l(t){t()}function u(t,e){return t.pipe(e)}t.exports=function(){for(var t=arguments.length,e=new Array(t),i=0;i<t;i++)e[i]=arguments[i];var c,f=function(t){return t.length?\\\"function\\\"!=typeof t[t.length-1]?s:t.pop():s}(e);if(Array.isArray(e[0])&&(e=e[0]),e.length<2)throw new a(\\\"streams\\\");var h=e.map((function(t,i){var a=i<e.length-1;return function(t,e,i,a){a=function(t){var e=!1;return function(){e||(e=!0,t.apply(void 0,arguments))}}(a);var s=!1;t.on(\\\"close\\\",(function(){s=!0})),void 0===n&&(n=r(12726)),n(t,{readable:e,writable:i},(function(t){if(t)return a(t);s=!0,a()}));var l=!1;return function(e){if(!s&&!l)return l=!0,function(t){return t.setHeader&&\\\"function\\\"==typeof t.abort}(t)?t.abort():\\\"function\\\"==typeof t.destroy?t.destroy():void a(e||new o(\\\"pipe\\\"))}}(t,a,i>0,(function(t){c||(c=t),t&&h.forEach(l),a||(h.forEach(l),f(c))}))}));return e.reduce(u)}},56306:function(t,e,r){\\\"use strict\\\";var n=r(74322).q.ERR_INVALID_OPT_VALUE;t.exports={getHighWaterMark:function(t,e,r,i){var a=function(t,e,r){return null!=t.highWaterMark?t.highWaterMark:e?t[r]:null}(e,i,r);if(null!=a){if(!isFinite(a)||Math.floor(a)!==a||a<0)throw new n(i?r:\\\"highWaterMark\\\",a);return Math.floor(a)}return t.objectMode?16:16384}}},71405:function(t,e,r){t.exports=r(15398).EventEmitter},68019:function(t,e,r){\\\"use strict\\\";var n=r(71665).Buffer,i=n.isEncoding||function(t){switch((t=\\\"\\\"+t)&&t.toLowerCase()){case\\\"hex\\\":case\\\"utf8\\\":case\\\"utf-8\\\":case\\\"ascii\\\":case\\\"binary\\\":case\\\"base64\\\":case\\\"ucs2\\\":case\\\"ucs-2\\\":case\\\"utf16le\\\":case\\\"utf-16le\\\":case\\\"raw\\\":return!0;default:return!1}};function a(t){var e;switch(this.encoding=function(t){var e=function(t){if(!t)return\\\"utf8\\\";for(var e;;)switch(t){case\\\"utf8\\\":case\\\"utf-8\\\":return\\\"utf8\\\";case\\\"ucs2\\\":case\\\"ucs-2\\\":case\\\"utf16le\\\":case\\\"utf-16le\\\":return\\\"utf16le\\\";case\\\"latin1\\\":case\\\"binary\\\":return\\\"latin1\\\";case\\\"base64\\\":case\\\"ascii\\\":case\\\"hex\\\":return t;default:if(e)return;t=(\\\"\\\"+t).toLowerCase(),e=!0}}(t);if(\\\"string\\\"!=typeof e&&(n.isEncoding===i||!i(t)))throw new Error(\\\"Unknown encoding: \\\"+t);return e||t}(t),this.encoding){case\\\"utf16le\\\":this.text=l,this.end=u,e=4;break;case\\\"utf8\\\":this.fillLast=s,e=4;break;case\\\"base64\\\":this.text=c,this.end=f,e=3;break;default:return this.write=h,void(this.end=p)}this.lastNeed=0,this.lastTotal=0,this.lastChar=n.allocUnsafe(e)}function o(t){return t<=127?0:t>>5==6?2:t>>4==14?3:t>>3==30?4:t>>6==2?-1:-2}function s(t){var e=this.lastTotal-this.lastNeed,r=function(t,e,r){if(128!=(192&e[0]))return t.lastNeed=0,\\\"�\\\";if(t.lastNeed>1&&e.length>1){if(128!=(192&e[1]))return t.lastNeed=1,\\\"�\\\";if(t.lastNeed>2&&e.length>2&&128!=(192&e[2]))return t.lastNeed=2,\\\"�\\\"}}(this,t);return void 0!==r?r:this.lastNeed<=t.length?(t.copy(this.lastChar,e,0,this.lastNeed),this.lastChar.toString(this.encoding,0,this.lastTotal)):(t.copy(this.lastChar,e,0,t.length),void(this.lastNeed-=t.length))}function l(t,e){if((t.length-e)%2==0){var r=t.toString(\\\"utf16le\\\",e);if(r){var n=r.charCodeAt(r.length-1);if(n>=55296&&n<=56319)return this.lastNeed=2,this.lastTotal=4,this.lastChar[0]=t[t.length-2],this.lastChar[1]=t[t.length-1],r.slice(0,-1)}return r}return this.lastNeed=1,this.lastTotal=2,this.lastChar[0]=t[t.length-1],t.toString(\\\"utf16le\\\",e,t.length-1)}function u(t){var e=t&&t.length?this.write(t):\\\"\\\";if(this.lastNeed){var r=this.lastTotal-this.lastNeed;return e+this.lastChar.toString(\\\"utf16le\\\",0,r)}return e}function c(t,e){var r=(t.length-e)%3;return 0===r?t.toString(\\\"base64\\\",e):(this.lastNeed=3-r,this.lastTotal=3,1===r?this.lastChar[0]=t[t.length-1]:(this.lastChar[0]=t[t.length-2],this.lastChar[1]=t[t.length-1]),t.toString(\\\"base64\\\",e,t.length-r))}function f(t){var e=t&&t.length?this.write(t):\\\"\\\";return this.lastNeed?e+this.lastChar.toString(\\\"base64\\\",0,3-this.lastNeed):e}function h(t){return t.toString(this.encoding)}function p(t){return t&&t.length?this.write(t):\\\"\\\"}e.s=a,a.prototype.write=function(t){if(0===t.length)return\\\"\\\";var e,r;if(this.lastNeed){if(void 0===(e=this.fillLast(t)))return\\\"\\\";r=this.lastNeed,this.lastNeed=0}else r=0;return r<t.length?e?e+this.text(t,r):this.text(t,r):e||\\\"\\\"},a.prototype.end=function(t){var e=t&&t.length?this.write(t):\\\"\\\";return this.lastNeed?e+\\\"�\\\":e},a.prototype.text=function(t,e){var r=function(t,e,r){var n=e.length-1;if(n<r)return 0;var i=o(e[n]);return i>=0?(i>0&&(t.lastNeed=i-1),i):--n<r||-2===i?0:(i=o(e[n]))>=0?(i>0&&(t.lastNeed=i-2),i):--n<r||-2===i?0:(i=o(e[n]))>=0?(i>0&&(2===i?i=0:t.lastNeed=i-3),i):0}(this,t,e);if(!this.lastNeed)return t.toString(\\\"utf8\\\",e);this.lastTotal=r;var n=t.length-(r-this.lastNeed);return t.copy(this.lastChar,0,n),t.toString(\\\"utf8\\\",e,n)},a.prototype.fillLast=function(t){if(this.lastNeed<=t.length)return t.copy(this.lastChar,this.lastTotal-this.lastNeed,0,this.lastNeed),this.lastChar.toString(this.encoding,0,this.lastTotal);t.copy(this.lastChar,this.lastTotal-this.lastNeed,0,t.length),this.lastNeed-=t.length}},90715:function(t,e,r){var n=r(32791),i=r(41633)(\\\"stream-parser\\\");t.exports=function(t){var e=t&&\\\"function\\\"==typeof t._transform,r=t&&\\\"function\\\"==typeof t._write;if(!e&&!r)throw new Error(\\\"must pass a Writable or Transform stream in\\\");i(\\\"extending Parser into stream\\\"),t._bytes=c,t._skipBytes=f,e&&(t._passthrough=h),e?t._transform=d:t._write=p};var a=-1,o=0,s=1,l=2;function u(t){i(\\\"initializing parser stream\\\"),t._parserBytesLeft=0,t._parserBuffers=[],t._parserBuffered=0,t._parserState=a,t._parserCallback=null,\\\"function\\\"==typeof t.push&&(t._parserOutput=t.push.bind(t)),t._parserInit=!0}function c(t,e){n(!this._parserCallback,'there is already a \\\"callback\\\" set!'),n(isFinite(t)&&t>0,'can only buffer a finite number of bytes > 0, got \\\"'+t+'\\\"'),this._parserInit||u(this),i(\\\"buffering %o bytes\\\",t),this._parserBytesLeft=t,this._parserCallback=e,this._parserState=o}function f(t,e){n(!this._parserCallback,'there is already a \\\"callback\\\" set!'),n(t>0,'can only skip > 0 bytes, got \\\"'+t+'\\\"'),this._parserInit||u(this),i(\\\"skipping %o bytes\\\",t),this._parserBytesLeft=t,this._parserCallback=e,this._parserState=s}function h(t,e){n(!this._parserCallback,'There is already a \\\"callback\\\" set!'),n(t>0,'can only pass through > 0 bytes, got \\\"'+t+'\\\"'),this._parserInit||u(this),i(\\\"passing through %o bytes\\\",t),this._parserBytesLeft=t,this._parserCallback=e,this._parserState=l}function p(t,e,r){this._parserInit||u(this),i(\\\"write(%o bytes)\\\",t.length),\\\"function\\\"==typeof e&&(r=e),g(this,t,null,r)}function d(t,e,r){this._parserInit||u(this),i(\\\"transform(%o bytes)\\\",t.length),\\\"function\\\"!=typeof e&&(e=this._parserOutput),g(this,t,e,r)}function v(t,e,r,n){if(t._parserBytesLeft-=e.length,i(\\\"%o bytes left for stream piece\\\",t._parserBytesLeft),t._parserState===o?(t._parserBuffers.push(e),t._parserBuffered+=e.length):t._parserState===l&&r(e),0!==t._parserBytesLeft)return n;var s=t._parserCallback;if(s&&t._parserState===o&&t._parserBuffers.length>1&&(e=Buffer.concat(t._parserBuffers,t._parserBuffered)),t._parserState!==o&&(e=null),t._parserCallback=null,t._parserBuffered=0,t._parserState=a,t._parserBuffers.splice(0),s){var u=[];e&&u.push(e),r&&u.push(r);var c=s.length>u.length;c&&u.push(y(n));var f=s.apply(t,u);if(!c||n===f)return n}}var g=y((function t(e,r,n,i){return e._parserBytesLeft<=0?i(new Error(\\\"got data but not currently parsing anything\\\")):r.length<=e._parserBytesLeft?function(){return v(e,r,n,i)}:function(){var a=r.slice(0,e._parserBytesLeft);return v(e,a,n,(function(o){return o?i(o):r.length>a.length?function(){return t(e,r.slice(a.length),n,i)}:void 0}))}}));function y(t){return function(){for(var e=t.apply(this,arguments);\\\"function\\\"==typeof e;)e=e();return e}}},41633:function(t,e,r){var n=r(90386);function i(){var t;try{t=e.storage.debug}catch(t){}return!t&&void 0!==n&&\\\"env\\\"in n&&(t=n.env.DEBUG),t}(e=t.exports=r(74469)).log=function(){return\\\"object\\\"==typeof console&&console.log&&Function.prototype.apply.call(console.log,console,arguments)},e.formatArgs=function(t){var r=this.useColors;if(t[0]=(r?\\\"%c\\\":\\\"\\\")+this.namespace+(r?\\\" %c\\\":\\\" \\\")+t[0]+(r?\\\"%c \\\":\\\" \\\")+\\\"+\\\"+e.humanize(this.diff),r){var n=\\\"color: \\\"+this.color;t.splice(1,0,n,\\\"color: inherit\\\");var i=0,a=0;t[0].replace(/%[a-zA-Z%]/g,(function(t){\\\"%%\\\"!==t&&(i++,\\\"%c\\\"===t&&(a=i))})),t.splice(a,0,n)}},e.save=function(t){try{null==t?e.storage.removeItem(\\\"debug\\\"):e.storage.debug=t}catch(t){}},e.load=i,e.useColors=function(){return!(\\\"undefined\\\"==typeof window||!window.process||\\\"renderer\\\"!==window.process.type)||(\\\"undefined\\\"!=typeof document&&document.documentElement&&document.documentElement.style&&document.documentElement.style.WebkitAppearance||\\\"undefined\\\"!=typeof window&&window.console&&(window.console.firebug||window.console.exception&&window.console.table)||\\\"undefined\\\"!=typeof navigator&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/firefox\\\\/(\\\\d+)/)&&parseInt(RegExp.$1,10)>=31||\\\"undefined\\\"!=typeof navigator&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/applewebkit\\\\/(\\\\d+)/))},e.storage=\\\"undefined\\\"!=typeof chrome&&void 0!==chrome.storage?chrome.storage.local:function(){try{return window.localStorage}catch(t){}}(),e.colors=[\\\"lightseagreen\\\",\\\"forestgreen\\\",\\\"goldenrod\\\",\\\"dodgerblue\\\",\\\"darkorchid\\\",\\\"crimson\\\"],e.formatters.j=function(t){try{return JSON.stringify(t)}catch(t){return\\\"[UnexpectedJSONParseError]: \\\"+t.message}},e.enable(i())},74469:function(t,e,r){var n;function i(t){function r(){if(r.enabled){var t=r,i=+new Date,a=i-(n||i);t.diff=a,t.prev=n,t.curr=i,n=i;for(var o=new Array(arguments.length),s=0;s<o.length;s++)o[s]=arguments[s];o[0]=e.coerce(o[0]),\\\"string\\\"!=typeof o[0]&&o.unshift(\\\"%O\\\");var l=0;o[0]=o[0].replace(/%([a-zA-Z%])/g,(function(r,n){if(\\\"%%\\\"===r)return r;l++;var i=e.formatters[n];if(\\\"function\\\"==typeof i){var a=o[l];r=i.call(t,a),o.splice(l,1),l--}return r})),e.formatArgs.call(t,o),(r.log||e.log||console.log.bind(console)).apply(t,o)}}return r.namespace=t,r.enabled=e.enabled(t),r.useColors=e.useColors(),r.color=function(t){var r,n=0;for(r in t)n=(n<<5)-n+t.charCodeAt(r),n|=0;return e.colors[Math.abs(n)%e.colors.length]}(t),\\\"function\\\"==typeof e.init&&e.init(r),r}(e=t.exports=i.debug=i.default=i).coerce=function(t){return t instanceof Error?t.stack||t.message:t},e.disable=function(){e.enable(\\\"\\\")},e.enable=function(t){e.save(t),e.names=[],e.skips=[];for(var r=(\\\"string\\\"==typeof t?t:\\\"\\\").split(/[\\\\s,]+/),n=r.length,i=0;i<n;i++)r[i]&&(\\\"-\\\"===(t=r[i].replace(/\\\\*/g,\\\".*?\\\"))[0]?e.skips.push(new RegExp(\\\"^\\\"+t.substr(1)+\\\"$\\\")):e.names.push(new RegExp(\\\"^\\\"+t+\\\"$\\\")))},e.enabled=function(t){var r,n;for(r=0,n=e.skips.length;r<n;r++)if(e.skips[r].test(t))return!1;for(r=0,n=e.names.length;r<n;r++)if(e.names[r].test(t))return!0;return!1},e.humanize=r(11375),e.names=[],e.skips=[],e.formatters={}},11375:function(t){var e=1e3,r=60*e,n=60*r,i=24*n;function a(t,e,r){if(!(t<e))return t<1.5*e?Math.floor(t/e)+\\\" \\\"+r:Math.ceil(t/e)+\\\" \\\"+r+\\\"s\\\"}t.exports=function(t,o){o=o||{};var s,l=typeof t;if(\\\"string\\\"===l&&t.length>0)return function(t){if(!((t=String(t)).length>100)){var a=/^((?:\\\\d+)?\\\\.?\\\\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|years?|yrs?|y)?$/i.exec(t);if(a){var o=parseFloat(a[1]);switch((a[2]||\\\"ms\\\").toLowerCase()){case\\\"years\\\":case\\\"year\\\":case\\\"yrs\\\":case\\\"yr\\\":case\\\"y\\\":return 315576e5*o;case\\\"days\\\":case\\\"day\\\":case\\\"d\\\":return o*i;case\\\"hours\\\":case\\\"hour\\\":case\\\"hrs\\\":case\\\"hr\\\":case\\\"h\\\":return o*n;case\\\"minutes\\\":case\\\"minute\\\":case\\\"mins\\\":case\\\"min\\\":case\\\"m\\\":return o*r;case\\\"seconds\\\":case\\\"second\\\":case\\\"secs\\\":case\\\"sec\\\":case\\\"s\\\":return o*e;case\\\"milliseconds\\\":case\\\"millisecond\\\":case\\\"msecs\\\":case\\\"msec\\\":case\\\"ms\\\":return o;default:return}}}}(t);if(\\\"number\\\"===l&&!1===isNaN(t))return o.long?a(s=t,i,\\\"day\\\")||a(s,n,\\\"hour\\\")||a(s,r,\\\"minute\\\")||a(s,e,\\\"second\\\")||s+\\\" ms\\\":function(t){return t>=i?Math.round(t/i)+\\\"d\\\":t>=n?Math.round(t/n)+\\\"h\\\":t>=r?Math.round(t/r)+\\\"m\\\":t>=e?Math.round(t/e)+\\\"s\\\":t+\\\"ms\\\"}(t);throw new Error(\\\"val is not a non-empty string or a valid number. val=\\\"+JSON.stringify(t))}},99011:function(t,e,r){\\\"use strict\\\";var n=r(88641);t.exports=function(t,e,r){if(null==t)throw Error(\\\"First argument should be a string\\\");if(null==e)throw Error(\\\"Separator should be a string or a RegExp\\\");r?(\\\"string\\\"==typeof r||Array.isArray(r))&&(r={ignore:r}):r={},null==r.escape&&(r.escape=!0),null==r.ignore?r.ignore=[\\\"[]\\\",\\\"()\\\",\\\"{}\\\",\\\"<>\\\",'\\\"\\\"',\\\"''\\\",\\\"``\\\",\\\"“”\\\",\\\"«»\\\"]:(\\\"string\\\"==typeof r.ignore&&(r.ignore=[r.ignore]),r.ignore=r.ignore.map((function(t){return 1===t.length&&(t+=t),t})));var i=n.parse(t,{flat:!0,brackets:r.ignore}),a=i[0].split(e);if(r.escape){for(var o=[],s=0;s<a.length;s++){var l=a[s],u=a[s+1];\\\"\\\\\\\\\\\"===l[l.length-1]&&\\\"\\\\\\\\\\\"!==l[l.length-2]?(o.push(l+e+u),s++):o.push(l)}a=o}for(s=0;s<a.length;s++)i[0]=a[s],a[s]=n.stringify(i,{flat:!0});return a}},68664:function(t){\\\"use strict\\\";t.exports=function(t){for(var e=t.length,r=new Array(e),n=new Array(e),i=new Array(e),a=new Array(e),o=new Array(e),s=new Array(e),l=0;l<e;++l)r[l]=-1,n[l]=0,i[l]=!1,a[l]=0,o[l]=-1,s[l]=[];var u,c=0,f=[],h=[];function p(e){var l=[e],u=[e];for(r[e]=n[e]=c,i[e]=!0,c+=1;u.length>0;){e=u[u.length-1];var p=t[e];if(a[e]<p.length){for(var d=a[e];d<p.length;++d){var v=p[d];if(r[v]<0){r[v]=n[v]=c,i[v]=!0,c+=1,l.push(v),u.push(v);break}i[v]&&(n[e]=0|Math.min(n[e],n[v])),o[v]>=0&&s[e].push(o[v])}a[e]=d}else{if(n[e]===r[e]){var g=[],y=[],m=0;for(d=l.length-1;d>=0;--d){var x=l[d];if(i[x]=!1,g.push(x),y.push(s[x]),m+=s[x].length,o[x]=f.length,x===e){l.length=d;break}}f.push(g);var b=new Array(m);for(d=0;d<y.length;d++)for(var _=0;_<y[d].length;_++)b[--m]=y[d][_];h.push(b)}u.pop()}}}for(l=0;l<e;++l)r[l]<0&&p(l);for(l=0;l<h.length;l++){var d=h[l];if(0!==d.length){d.sort((function(t,e){return t-e})),u=[d[0]];for(var v=1;v<d.length;v++)d[v]!==d[v-1]&&u.push(d[v]);h[l]=u}}return{components:f,adjacencyList:h}}},7095:function(t,e,r){\\\"use strict\\\";r.r(e);var n=2*Math.PI,i=function(t,e,r,n,i,a,o){var s=t.x,l=t.y;return{x:n*(s*=e)-i*(l*=r)+a,y:i*s+n*l+o}},a=function(t,e){var r=1.5707963267948966===e?.551915024494:-1.5707963267948966===e?-.551915024494:4/3*Math.tan(e/4),n=Math.cos(t),i=Math.sin(t),a=Math.cos(t+e),o=Math.sin(t+e);return[{x:n-i*r,y:i+n*r},{x:a+o*r,y:o-a*r},{x:a,y:o}]},o=function(t,e,r,n){var i=t*r+e*n;return i>1&&(i=1),i<-1&&(i=-1),(t*n-e*r<0?-1:1)*Math.acos(i)};e.default=function(t){var e=t.px,r=t.py,s=t.cx,l=t.cy,u=t.rx,c=t.ry,f=t.xAxisRotation,h=void 0===f?0:f,p=t.largeArcFlag,d=void 0===p?0:p,v=t.sweepFlag,g=void 0===v?0:v,y=[];if(0===u||0===c)return[];var m=Math.sin(h*n/360),x=Math.cos(h*n/360),b=x*(e-s)/2+m*(r-l)/2,_=-m*(e-s)/2+x*(r-l)/2;if(0===b&&0===_)return[];u=Math.abs(u),c=Math.abs(c);var w=Math.pow(b,2)/Math.pow(u,2)+Math.pow(_,2)/Math.pow(c,2);w>1&&(u*=Math.sqrt(w),c*=Math.sqrt(w));var T=function(t,e,r,i,a,s,l,u,c,f,h,p){var d=Math.pow(a,2),v=Math.pow(s,2),g=Math.pow(h,2),y=Math.pow(p,2),m=d*v-d*y-v*g;m<0&&(m=0),m/=d*y+v*g;var x=(m=Math.sqrt(m)*(l===u?-1:1))*a/s*p,b=m*-s/a*h,_=f*x-c*b+(t+r)/2,w=c*x+f*b+(e+i)/2,T=(h-x)/a,k=(p-b)/s,A=(-h-x)/a,M=(-p-b)/s,S=o(1,0,T,k),E=o(T,k,A,M);return 0===u&&E>0&&(E-=n),1===u&&E<0&&(E+=n),[_,w,S,E]}(e,r,s,l,u,c,d,g,m,x,b,_),k=function(t,e){if(Array.isArray(t))return t;if(Symbol.iterator in Object(t))return function(t,e){var r=[],n=!0,i=!1,a=void 0;try{for(var o,s=t[Symbol.iterator]();!(n=(o=s.next()).done)&&(r.push(o.value),!e||r.length!==e);n=!0);}catch(t){i=!0,a=t}finally{try{!n&&s.return&&s.return()}finally{if(i)throw a}}return r}(t,e);throw new TypeError(\\\"Invalid attempt to destructure non-iterable instance\\\")}(T,4),A=k[0],M=k[1],S=k[2],E=k[3],L=Math.abs(E)/(n/4);Math.abs(1-L)<1e-7&&(L=1);var C=Math.max(Math.ceil(L),1);E/=C;for(var P=0;P<C;P++)y.push(a(S,E)),S+=E;return y.map((function(t){var e=i(t[0],u,c,x,m,A,M),r=e.x,n=e.y,a=i(t[1],u,c,x,m,A,M),o=a.x,s=a.y,l=i(t[2],u,c,x,m,A,M);return{x1:r,y1:n,x2:o,y2:s,x:l.x,y:l.y}}))}},1750:function(t,e,r){\\\"use strict\\\";var n=r(95616),i=r(65185),a=r(29988),o=r(89546),s=r(32791);t.exports=function(t){if(Array.isArray(t)&&1===t.length&&\\\"string\\\"==typeof t[0]&&(t=t[0]),\\\"string\\\"==typeof t&&(s(o(t),\\\"String is not an SVG path.\\\"),t=n(t)),s(Array.isArray(t),\\\"Argument should be a string or an array of path segments.\\\"),t=i(t),!(t=a(t)).length)return[0,0,0,0];for(var e=[1/0,1/0,-1/0,-1/0],r=0,l=t.length;r<l;r++)for(var u=t[r].slice(1),c=0;c<u.length;c+=2)u[c+0]<e[0]&&(e[0]=u[c+0]),u[c+1]<e[1]&&(e[1]=u[c+1]),u[c+0]>e[2]&&(e[2]=u[c+0]),u[c+1]>e[3]&&(e[3]=u[c+1]);return e}},29988:function(t,e,r){\\\"use strict\\\";t.exports=function(t){for(var e,r=[],o=0,s=0,l=0,u=0,c=null,f=null,h=0,p=0,d=0,v=t.length;d<v;d++){var g=t[d],y=g[0];switch(y){case\\\"M\\\":l=g[1],u=g[2];break;case\\\"A\\\":var m=n({px:h,py:p,cx:g[6],cy:g[7],rx:g[1],ry:g[2],xAxisRotation:g[3],largeArcFlag:g[4],sweepFlag:g[5]});if(!m.length)continue;for(var x,b=0;b<m.length;b++)g=[\\\"C\\\",(x=m[b]).x1,x.y1,x.x2,x.y2,x.x,x.y],b<m.length-1&&r.push(g);break;case\\\"S\\\":var _=h,w=p;\\\"C\\\"!=e&&\\\"S\\\"!=e||(_+=_-o,w+=w-s),g=[\\\"C\\\",_,w,g[1],g[2],g[3],g[4]];break;case\\\"T\\\":\\\"Q\\\"==e||\\\"T\\\"==e?(c=2*h-c,f=2*p-f):(c=h,f=p),g=a(h,p,c,f,g[1],g[2]);break;case\\\"Q\\\":c=g[1],f=g[2],g=a(h,p,g[1],g[2],g[3],g[4]);break;case\\\"L\\\":g=i(h,p,g[1],g[2]);break;case\\\"H\\\":g=i(h,p,g[1],p);break;case\\\"V\\\":g=i(h,p,h,g[1]);break;case\\\"Z\\\":g=i(h,p,l,u)}e=y,h=g[g.length-2],p=g[g.length-1],g.length>4?(o=g[g.length-4],s=g[g.length-3]):(o=h,s=p),r.push(g)}return r};var n=r(7095);function i(t,e,r,n){return[\\\"C\\\",t,e,r,n,r,n]}function a(t,e,r,n,i,a){return[\\\"C\\\",t/3+2/3*r,e/3+2/3*n,i/3+2/3*r,a/3+2/3*n,i,a]}},82019:function(t,e,r){\\\"use strict\\\";var n,i=r(1750),a=r(95616),o=r(31457),s=r(89546),l=r(44781),u=document.createElement(\\\"canvas\\\"),c=u.getContext(\\\"2d\\\");t.exports=function(t,e){if(!s(t))throw Error(\\\"Argument should be valid svg path string\\\");var r,f;e||(e={}),e.shape?(r=e.shape[0],f=e.shape[1]):(r=u.width=e.w||e.width||200,f=u.height=e.h||e.height||200);var h=Math.min(r,f),p=e.stroke||0,d=e.viewbox||e.viewBox||i(t),v=[r/(d[2]-d[0]),f/(d[3]-d[1])],g=Math.min(v[0]||0,v[1]||0)/2;if(c.fillStyle=\\\"black\\\",c.fillRect(0,0,r,f),c.fillStyle=\\\"white\\\",p&&(\\\"number\\\"!=typeof p&&(p=1),c.strokeStyle=p>0?\\\"white\\\":\\\"black\\\",c.lineWidth=Math.abs(p)),c.translate(.5*r,.5*f),c.scale(g,g),function(){if(null!=n)return n;var t=document.createElement(\\\"canvas\\\").getContext(\\\"2d\\\");if(t.canvas.width=t.canvas.height=1,!window.Path2D)return n=!1;var e=new Path2D(\\\"M0,0h1v1h-1v-1Z\\\");t.fillStyle=\\\"black\\\",t.fill(e);var r=t.getImageData(0,0,1,1);return n=r&&r.data&&255===r.data[3]}()){var y=new Path2D(t);c.fill(y),p&&c.stroke(y)}else{var m=a(t);o(c,m),c.fill(),p&&c.stroke()}return c.setTransform(1,0,0,1,0,0),l(c,{cutoff:null!=e.cutoff?e.cutoff:.5,radius:null!=e.radius?e.radius:.5*h})}},84267:function(t,e,r){var n;!function(i){var a=/^\\\\s+/,o=/\\\\s+$/,s=0,l=i.round,u=i.min,c=i.max,f=i.random;function h(t,e){if(e=e||{},(t=t||\\\"\\\")instanceof h)return t;if(!(this instanceof h))return new h(t,e);var r=function(t){var e,r,n,s={r:0,g:0,b:0},l=1,f=null,h=null,p=null,d=!1,v=!1;return\\\"string\\\"==typeof t&&(t=function(t){t=t.replace(a,\\\"\\\").replace(o,\\\"\\\").toLowerCase();var e,r=!1;if(C[t])t=C[t],r=!0;else if(\\\"transparent\\\"==t)return{r:0,g:0,b:0,a:0,format:\\\"name\\\"};return(e=H.rgb.exec(t))?{r:e[1],g:e[2],b:e[3]}:(e=H.rgba.exec(t))?{r:e[1],g:e[2],b:e[3],a:e[4]}:(e=H.hsl.exec(t))?{h:e[1],s:e[2],l:e[3]}:(e=H.hsla.exec(t))?{h:e[1],s:e[2],l:e[3],a:e[4]}:(e=H.hsv.exec(t))?{h:e[1],s:e[2],v:e[3]}:(e=H.hsva.exec(t))?{h:e[1],s:e[2],v:e[3],a:e[4]}:(e=H.hex8.exec(t))?{r:z(e[1]),g:z(e[2]),b:z(e[3]),a:N(e[4]),format:r?\\\"name\\\":\\\"hex8\\\"}:(e=H.hex6.exec(t))?{r:z(e[1]),g:z(e[2]),b:z(e[3]),format:r?\\\"name\\\":\\\"hex\\\"}:(e=H.hex4.exec(t))?{r:z(e[1]+\\\"\\\"+e[1]),g:z(e[2]+\\\"\\\"+e[2]),b:z(e[3]+\\\"\\\"+e[3]),a:N(e[4]+\\\"\\\"+e[4]),format:r?\\\"name\\\":\\\"hex8\\\"}:!!(e=H.hex3.exec(t))&&{r:z(e[1]+\\\"\\\"+e[1]),g:z(e[2]+\\\"\\\"+e[2]),b:z(e[3]+\\\"\\\"+e[3]),format:r?\\\"name\\\":\\\"hex\\\"}}(t)),\\\"object\\\"==typeof t&&(q(t.r)&&q(t.g)&&q(t.b)?(e=t.r,r=t.g,n=t.b,s={r:255*I(e,255),g:255*I(r,255),b:255*I(n,255)},d=!0,v=\\\"%\\\"===String(t.r).substr(-1)?\\\"prgb\\\":\\\"rgb\\\"):q(t.h)&&q(t.s)&&q(t.v)?(f=F(t.s),h=F(t.v),s=function(t,e,r){t=6*I(t,360),e=I(e,100),r=I(r,100);var n=i.floor(t),a=t-n,o=r*(1-e),s=r*(1-a*e),l=r*(1-(1-a)*e),u=n%6;return{r:255*[r,s,o,o,l,r][u],g:255*[l,r,r,s,o,o][u],b:255*[o,o,l,r,r,s][u]}}(t.h,f,h),d=!0,v=\\\"hsv\\\"):q(t.h)&&q(t.s)&&q(t.l)&&(f=F(t.s),p=F(t.l),s=function(t,e,r){var n,i,a;function o(t,e,r){return r<0&&(r+=1),r>1&&(r-=1),r<1/6?t+6*(e-t)*r:r<.5?e:r<2/3?t+(e-t)*(2/3-r)*6:t}if(t=I(t,360),e=I(e,100),r=I(r,100),0===e)n=i=a=r;else{var s=r<.5?r*(1+e):r+e-r*e,l=2*r-s;n=o(l,s,t+1/3),i=o(l,s,t),a=o(l,s,t-1/3)}return{r:255*n,g:255*i,b:255*a}}(t.h,f,p),d=!0,v=\\\"hsl\\\"),t.hasOwnProperty(\\\"a\\\")&&(l=t.a)),l=O(l),{ok:d,format:t.format||v,r:u(255,c(s.r,0)),g:u(255,c(s.g,0)),b:u(255,c(s.b,0)),a:l}}(t);this._originalInput=t,this._r=r.r,this._g=r.g,this._b=r.b,this._a=r.a,this._roundA=l(100*this._a)/100,this._format=e.format||r.format,this._gradientType=e.gradientType,this._r<1&&(this._r=l(this._r)),this._g<1&&(this._g=l(this._g)),this._b<1&&(this._b=l(this._b)),this._ok=r.ok,this._tc_id=s++}function p(t,e,r){t=I(t,255),e=I(e,255),r=I(r,255);var n,i,a=c(t,e,r),o=u(t,e,r),s=(a+o)/2;if(a==o)n=i=0;else{var l=a-o;switch(i=s>.5?l/(2-a-o):l/(a+o),a){case t:n=(e-r)/l+(e<r?6:0);break;case e:n=(r-t)/l+2;break;case r:n=(t-e)/l+4}n/=6}return{h:n,s:i,l:s}}function d(t,e,r){t=I(t,255),e=I(e,255),r=I(r,255);var n,i,a=c(t,e,r),o=u(t,e,r),s=a,l=a-o;if(i=0===a?0:l/a,a==o)n=0;else{switch(a){case t:n=(e-r)/l+(e<r?6:0);break;case e:n=(r-t)/l+2;break;case r:n=(t-e)/l+4}n/=6}return{h:n,s:i,v:s}}function v(t,e,r,n){var i=[R(l(t).toString(16)),R(l(e).toString(16)),R(l(r).toString(16))];return n&&i[0].charAt(0)==i[0].charAt(1)&&i[1].charAt(0)==i[1].charAt(1)&&i[2].charAt(0)==i[2].charAt(1)?i[0].charAt(0)+i[1].charAt(0)+i[2].charAt(0):i.join(\\\"\\\")}function g(t,e,r,n){return[R(B(n)),R(l(t).toString(16)),R(l(e).toString(16)),R(l(r).toString(16))].join(\\\"\\\")}function y(t,e){e=0===e?0:e||10;var r=h(t).toHsl();return r.s-=e/100,r.s=D(r.s),h(r)}function m(t,e){e=0===e?0:e||10;var r=h(t).toHsl();return r.s+=e/100,r.s=D(r.s),h(r)}function x(t){return h(t).desaturate(100)}function b(t,e){e=0===e?0:e||10;var r=h(t).toHsl();return r.l+=e/100,r.l=D(r.l),h(r)}function _(t,e){e=0===e?0:e||10;var r=h(t).toRgb();return r.r=c(0,u(255,r.r-l(-e/100*255))),r.g=c(0,u(255,r.g-l(-e/100*255))),r.b=c(0,u(255,r.b-l(-e/100*255))),h(r)}function w(t,e){e=0===e?0:e||10;var r=h(t).toHsl();return r.l-=e/100,r.l=D(r.l),h(r)}function T(t,e){var r=h(t).toHsl(),n=(r.h+e)%360;return r.h=n<0?360+n:n,h(r)}function k(t){var e=h(t).toHsl();return e.h=(e.h+180)%360,h(e)}function A(t){var e=h(t).toHsl(),r=e.h;return[h(t),h({h:(r+120)%360,s:e.s,l:e.l}),h({h:(r+240)%360,s:e.s,l:e.l})]}function M(t){var e=h(t).toHsl(),r=e.h;return[h(t),h({h:(r+90)%360,s:e.s,l:e.l}),h({h:(r+180)%360,s:e.s,l:e.l}),h({h:(r+270)%360,s:e.s,l:e.l})]}function S(t){var e=h(t).toHsl(),r=e.h;return[h(t),h({h:(r+72)%360,s:e.s,l:e.l}),h({h:(r+216)%360,s:e.s,l:e.l})]}function E(t,e,r){e=e||6,r=r||30;var n=h(t).toHsl(),i=360/r,a=[h(t)];for(n.h=(n.h-(i*e>>1)+720)%360;--e;)n.h=(n.h+i)%360,a.push(h(n));return a}function L(t,e){e=e||6;for(var r=h(t).toHsv(),n=r.h,i=r.s,a=r.v,o=[],s=1/e;e--;)o.push(h({h:n,s:i,v:a})),a=(a+s)%1;return o}h.prototype={isDark:function(){return this.getBrightness()<128},isLight:function(){return!this.isDark()},isValid:function(){return this._ok},getOriginalInput:function(){return this._originalInput},getFormat:function(){return this._format},getAlpha:function(){return this._a},getBrightness:function(){var t=this.toRgb();return(299*t.r+587*t.g+114*t.b)/1e3},getLuminance:function(){var t,e,r,n=this.toRgb();return t=n.r/255,e=n.g/255,r=n.b/255,.2126*(t<=.03928?t/12.92:i.pow((t+.055)/1.055,2.4))+.7152*(e<=.03928?e/12.92:i.pow((e+.055)/1.055,2.4))+.0722*(r<=.03928?r/12.92:i.pow((r+.055)/1.055,2.4))},setAlpha:function(t){return this._a=O(t),this._roundA=l(100*this._a)/100,this},toHsv:function(){var t=d(this._r,this._g,this._b);return{h:360*t.h,s:t.s,v:t.v,a:this._a}},toHsvString:function(){var t=d(this._r,this._g,this._b),e=l(360*t.h),r=l(100*t.s),n=l(100*t.v);return 1==this._a?\\\"hsv(\\\"+e+\\\", \\\"+r+\\\"%, \\\"+n+\\\"%)\\\":\\\"hsva(\\\"+e+\\\", \\\"+r+\\\"%, \\\"+n+\\\"%, \\\"+this._roundA+\\\")\\\"},toHsl:function(){var t=p(this._r,this._g,this._b);return{h:360*t.h,s:t.s,l:t.l,a:this._a}},toHslString:function(){var t=p(this._r,this._g,this._b),e=l(360*t.h),r=l(100*t.s),n=l(100*t.l);return 1==this._a?\\\"hsl(\\\"+e+\\\", \\\"+r+\\\"%, \\\"+n+\\\"%)\\\":\\\"hsla(\\\"+e+\\\", \\\"+r+\\\"%, \\\"+n+\\\"%, \\\"+this._roundA+\\\")\\\"},toHex:function(t){return v(this._r,this._g,this._b,t)},toHexString:function(t){return\\\"#\\\"+this.toHex(t)},toHex8:function(t){return function(t,e,r,n,i){var a=[R(l(t).toString(16)),R(l(e).toString(16)),R(l(r).toString(16)),R(B(n))];return i&&a[0].charAt(0)==a[0].charAt(1)&&a[1].charAt(0)==a[1].charAt(1)&&a[2].charAt(0)==a[2].charAt(1)&&a[3].charAt(0)==a[3].charAt(1)?a[0].charAt(0)+a[1].charAt(0)+a[2].charAt(0)+a[3].charAt(0):a.join(\\\"\\\")}(this._r,this._g,this._b,this._a,t)},toHex8String:function(t){return\\\"#\\\"+this.toHex8(t)},toRgb:function(){return{r:l(this._r),g:l(this._g),b:l(this._b),a:this._a}},toRgbString:function(){return 1==this._a?\\\"rgb(\\\"+l(this._r)+\\\", \\\"+l(this._g)+\\\", \\\"+l(this._b)+\\\")\\\":\\\"rgba(\\\"+l(this._r)+\\\", \\\"+l(this._g)+\\\", \\\"+l(this._b)+\\\", \\\"+this._roundA+\\\")\\\"},toPercentageRgb:function(){return{r:l(100*I(this._r,255))+\\\"%\\\",g:l(100*I(this._g,255))+\\\"%\\\",b:l(100*I(this._b,255))+\\\"%\\\",a:this._a}},toPercentageRgbString:function(){return 1==this._a?\\\"rgb(\\\"+l(100*I(this._r,255))+\\\"%, \\\"+l(100*I(this._g,255))+\\\"%, \\\"+l(100*I(this._b,255))+\\\"%)\\\":\\\"rgba(\\\"+l(100*I(this._r,255))+\\\"%, \\\"+l(100*I(this._g,255))+\\\"%, \\\"+l(100*I(this._b,255))+\\\"%, \\\"+this._roundA+\\\")\\\"},toName:function(){return 0===this._a?\\\"transparent\\\":!(this._a<1)&&(P[v(this._r,this._g,this._b,!0)]||!1)},toFilter:function(t){var e=\\\"#\\\"+g(this._r,this._g,this._b,this._a),r=e,n=this._gradientType?\\\"GradientType = 1, \\\":\\\"\\\";if(t){var i=h(t);r=\\\"#\\\"+g(i._r,i._g,i._b,i._a)}return\\\"progid:DXImageTransform.Microsoft.gradient(\\\"+n+\\\"startColorstr=\\\"+e+\\\",endColorstr=\\\"+r+\\\")\\\"},toString:function(t){var e=!!t;t=t||this._format;var r=!1,n=this._a<1&&this._a>=0;return e||!n||\\\"hex\\\"!==t&&\\\"hex6\\\"!==t&&\\\"hex3\\\"!==t&&\\\"hex4\\\"!==t&&\\\"hex8\\\"!==t&&\\\"name\\\"!==t?(\\\"rgb\\\"===t&&(r=this.toRgbString()),\\\"prgb\\\"===t&&(r=this.toPercentageRgbString()),\\\"hex\\\"!==t&&\\\"hex6\\\"!==t||(r=this.toHexString()),\\\"hex3\\\"===t&&(r=this.toHexString(!0)),\\\"hex4\\\"===t&&(r=this.toHex8String(!0)),\\\"hex8\\\"===t&&(r=this.toHex8String()),\\\"name\\\"===t&&(r=this.toName()),\\\"hsl\\\"===t&&(r=this.toHslString()),\\\"hsv\\\"===t&&(r=this.toHsvString()),r||this.toHexString()):\\\"name\\\"===t&&0===this._a?this.toName():this.toRgbString()},clone:function(){return h(this.toString())},_applyModification:function(t,e){var r=t.apply(null,[this].concat([].slice.call(e)));return this._r=r._r,this._g=r._g,this._b=r._b,this.setAlpha(r._a),this},lighten:function(){return this._applyModification(b,arguments)},brighten:function(){return this._applyModification(_,arguments)},darken:function(){return this._applyModification(w,arguments)},desaturate:function(){return this._applyModification(y,arguments)},saturate:function(){return this._applyModification(m,arguments)},greyscale:function(){return this._applyModification(x,arguments)},spin:function(){return this._applyModification(T,arguments)},_applyCombination:function(t,e){return t.apply(null,[this].concat([].slice.call(e)))},analogous:function(){return this._applyCombination(E,arguments)},complement:function(){return this._applyCombination(k,arguments)},monochromatic:function(){return this._applyCombination(L,arguments)},splitcomplement:function(){return this._applyCombination(S,arguments)},triad:function(){return this._applyCombination(A,arguments)},tetrad:function(){return this._applyCombination(M,arguments)}},h.fromRatio=function(t,e){if(\\\"object\\\"==typeof t){var r={};for(var n in t)t.hasOwnProperty(n)&&(r[n]=\\\"a\\\"===n?t[n]:F(t[n]));t=r}return h(t,e)},h.equals=function(t,e){return!(!t||!e)&&h(t).toRgbString()==h(e).toRgbString()},h.random=function(){return h.fromRatio({r:f(),g:f(),b:f()})},h.mix=function(t,e,r){r=0===r?0:r||50;var n=h(t).toRgb(),i=h(e).toRgb(),a=r/100;return h({r:(i.r-n.r)*a+n.r,g:(i.g-n.g)*a+n.g,b:(i.b-n.b)*a+n.b,a:(i.a-n.a)*a+n.a})},h.readability=function(t,e){var r=h(t),n=h(e);return(i.max(r.getLuminance(),n.getLuminance())+.05)/(i.min(r.getLuminance(),n.getLuminance())+.05)},h.isReadable=function(t,e,r){var n,i,a,o,s,l=h.readability(t,e);switch(i=!1,(a=r,\\\"AA\\\"!==(o=((a=a||{level:\\\"AA\\\",size:\\\"small\\\"}).level||\\\"AA\\\").toUpperCase())&&\\\"AAA\\\"!==o&&(o=\\\"AA\\\"),\\\"small\\\"!==(s=(a.size||\\\"small\\\").toLowerCase())&&\\\"large\\\"!==s&&(s=\\\"small\\\"),n={level:o,size:s}).level+n.size){case\\\"AAsmall\\\":case\\\"AAAlarge\\\":i=l>=4.5;break;case\\\"AAlarge\\\":i=l>=3;break;case\\\"AAAsmall\\\":i=l>=7}return i},h.mostReadable=function(t,e,r){var n,i,a,o,s=null,l=0;i=(r=r||{}).includeFallbackColors,a=r.level,o=r.size;for(var u=0;u<e.length;u++)(n=h.readability(t,e[u]))>l&&(l=n,s=h(e[u]));return h.isReadable(t,s,{level:a,size:o})||!i?s:(r.includeFallbackColors=!1,h.mostReadable(t,[\\\"#fff\\\",\\\"#000\\\"],r))};var C=h.names={aliceblue:\\\"f0f8ff\\\",antiquewhite:\\\"faebd7\\\",aqua:\\\"0ff\\\",aquamarine:\\\"7fffd4\\\",azure:\\\"f0ffff\\\",beige:\\\"f5f5dc\\\",bisque:\\\"ffe4c4\\\",black:\\\"000\\\",blanchedalmond:\\\"ffebcd\\\",blue:\\\"00f\\\",blueviolet:\\\"8a2be2\\\",brown:\\\"a52a2a\\\",burlywood:\\\"deb887\\\",burntsienna:\\\"ea7e5d\\\",cadetblue:\\\"5f9ea0\\\",chartreuse:\\\"7fff00\\\",chocolate:\\\"d2691e\\\",coral:\\\"ff7f50\\\",cornflowerblue:\\\"6495ed\\\",cornsilk:\\\"fff8dc\\\",crimson:\\\"dc143c\\\",cyan:\\\"0ff\\\",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:\\\"f0f\\\",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:\\\"789\\\",lightslategrey:\\\"789\\\",lightsteelblue:\\\"b0c4de\\\",lightyellow:\\\"ffffe0\\\",lime:\\\"0f0\\\",limegreen:\\\"32cd32\\\",linen:\\\"faf0e6\\\",magenta:\\\"f0f\\\",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:\\\"f00\\\",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\\\",steelblue:\\\"4682b4\\\",tan:\\\"d2b48c\\\",teal:\\\"008080\\\",thistle:\\\"d8bfd8\\\",tomato:\\\"ff6347\\\",turquoise:\\\"40e0d0\\\",violet:\\\"ee82ee\\\",wheat:\\\"f5deb3\\\",white:\\\"fff\\\",whitesmoke:\\\"f5f5f5\\\",yellow:\\\"ff0\\\",yellowgreen:\\\"9acd32\\\"},P=h.hexNames=function(t){var e={};for(var r in t)t.hasOwnProperty(r)&&(e[t[r]]=r);return e}(C);function O(t){return t=parseFloat(t),(isNaN(t)||t<0||t>1)&&(t=1),t}function I(t,e){(function(t){return\\\"string\\\"==typeof t&&-1!=t.indexOf(\\\".\\\")&&1===parseFloat(t)})(t)&&(t=\\\"100%\\\");var r=function(t){return\\\"string\\\"==typeof t&&-1!=t.indexOf(\\\"%\\\")}(t);return t=u(e,c(0,parseFloat(t))),r&&(t=parseInt(t*e,10)/100),i.abs(t-e)<1e-6?1:t%e/parseFloat(e)}function D(t){return u(1,c(0,t))}function z(t){return parseInt(t,16)}function R(t){return 1==t.length?\\\"0\\\"+t:\\\"\\\"+t}function F(t){return t<=1&&(t=100*t+\\\"%\\\"),t}function B(t){return i.round(255*parseFloat(t)).toString(16)}function N(t){return z(t)/255}var j,U,V,H=(U=\\\"[\\\\\\\\s|\\\\\\\\(]+(\\\"+(j=\\\"(?:[-\\\\\\\\+]?\\\\\\\\d*\\\\\\\\.\\\\\\\\d+%?)|(?:[-\\\\\\\\+]?\\\\\\\\d+%?)\\\")+\\\")[,|\\\\\\\\s]+(\\\"+j+\\\")[,|\\\\\\\\s]+(\\\"+j+\\\")\\\\\\\\s*\\\\\\\\)?\\\",V=\\\"[\\\\\\\\s|\\\\\\\\(]+(\\\"+j+\\\")[,|\\\\\\\\s]+(\\\"+j+\\\")[,|\\\\\\\\s]+(\\\"+j+\\\")[,|\\\\\\\\s]+(\\\"+j+\\\")\\\\\\\\s*\\\\\\\\)?\\\",{CSS_UNIT:new RegExp(j),rgb:new RegExp(\\\"rgb\\\"+U),rgba:new RegExp(\\\"rgba\\\"+V),hsl:new RegExp(\\\"hsl\\\"+U),hsla:new RegExp(\\\"hsla\\\"+V),hsv:new RegExp(\\\"hsv\\\"+U),hsva:new RegExp(\\\"hsva\\\"+V),hex3:/^#?([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/,hex6:/^#?([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/,hex4:/^#?([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/,hex8:/^#?([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/});function q(t){return!!H.CSS_UNIT.exec(t)}t.exports?t.exports=h:void 0===(n=function(){return h}.call(e,r,e,t))||(t.exports=n)}(Math)},57060:function(t){\\\"use strict\\\";t.exports=r,t.exports.float32=t.exports.float=r,t.exports.fract32=t.exports.fract=function(t,e){if(t.length){if(t instanceof Float32Array)return new Float32Array(t.length);e instanceof Float32Array||(e=r(t));for(var n=0,i=e.length;n<i;n++)e[n]=t[n]-e[n];return e}return r(t-r(t))};var e=new Float32Array(1);function r(t){return t.length?t instanceof Float32Array?t:new Float32Array(t):(e[0]=t,e[0])}},75686:function(t,e,r){\\\"use strict\\\";var n=r(25677);t.exports=o;var i=96;function a(t,e){var r=n(getComputedStyle(t).getPropertyValue(e));return r[0]*o(r[1],t)}function o(t,e){switch(e=e||document.body,t=(t||\\\"px\\\").trim().toLowerCase(),e!==window&&e!==document||(e=document.body),t){case\\\"%\\\":return e.clientHeight/100;case\\\"ch\\\":case\\\"ex\\\":return function(t,e){var r=document.createElement(\\\"div\\\");r.style[\\\"font-size\\\"]=\\\"128\\\"+t,e.appendChild(r);var n=a(r,\\\"font-size\\\")/128;return e.removeChild(r),n}(t,e);case\\\"em\\\":return a(e,\\\"font-size\\\");case\\\"rem\\\":return a(document.body,\\\"font-size\\\");case\\\"vw\\\":return window.innerWidth/100;case\\\"vh\\\":return window.innerHeight/100;case\\\"vmin\\\":return Math.min(window.innerWidth,window.innerHeight)/100;case\\\"vmax\\\":return Math.max(window.innerWidth,window.innerHeight)/100;case\\\"in\\\":return i;case\\\"cm\\\":return i/2.54;case\\\"mm\\\":return i/25.4;case\\\"pt\\\":return i/72;case\\\"pc\\\":return i/6}return 1}},96892:function(t,e,r){\\\"use strict\\\";function n(t){return t}function i(t,e){return\\\"string\\\"==typeof e&&(e=t.objects[e]),\\\"GeometryCollection\\\"===e.type?{type:\\\"FeatureCollection\\\",features:e.geometries.map((function(e){return a(t,e)}))}:a(t,e)}function a(t,e){var r=e.id,i=e.bbox,a=null==e.properties?{}:e.properties,o=function(t,e){var r=function(t){if(null==t)return n;var e,r,i=t.scale[0],a=t.scale[1],o=t.translate[0],s=t.translate[1];return function(t,n){n||(e=r=0);var l=2,u=t.length,c=new Array(u);for(c[0]=(e+=t[0])*i+o,c[1]=(r+=t[1])*a+s;l<u;)c[l]=t[l],++l;return c}}(t.transform),i=t.arcs;function a(t,e){e.length&&e.pop();for(var n=i[t<0?~t:t],a=0,o=n.length;a<o;++a)e.push(r(n[a],a));t<0&&function(t,e){for(var r,n=t.length,i=n-e;i<--n;)r=t[i],t[i++]=t[n],t[n]=r}(e,o)}function o(t){return r(t)}function s(t){for(var e=[],r=0,n=t.length;r<n;++r)a(t[r],e);return e.length<2&&e.push(e[0]),e}function l(t){for(var e=s(t);e.length<4;)e.push(e[0]);return e}function u(t){return t.map(l)}return function t(e){var r,n=e.type;switch(n){case\\\"GeometryCollection\\\":return{type:n,geometries:e.geometries.map(t)};case\\\"Point\\\":r=o(e.coordinates);break;case\\\"MultiPoint\\\":r=e.coordinates.map(o);break;case\\\"LineString\\\":r=s(e.arcs);break;case\\\"MultiLineString\\\":r=e.arcs.map(s);break;case\\\"Polygon\\\":r=u(e.arcs);break;case\\\"MultiPolygon\\\":r=e.arcs.map(u);break;default:return null}return{type:n,coordinates:r}}(e)}(t,e);return null==r&&null==i?{type:\\\"Feature\\\",properties:a,geometry:o}:null==i?{type:\\\"Feature\\\",id:r,properties:a,geometry:o}:{type:\\\"Feature\\\",id:r,bbox:i,properties:a,geometry:o}}r.d(e,{zL:function(){return i}})},73116:function(t,e,r){\\\"use strict\\\";var n=r(24511);t.exports=function(t){if(\\\"function\\\"!=typeof t)return!1;if(!hasOwnProperty.call(t,\\\"length\\\"))return!1;try{if(\\\"number\\\"!=typeof t.length)return!1;if(\\\"function\\\"!=typeof t.call)return!1;if(\\\"function\\\"!=typeof t.apply)return!1}catch(t){return!1}return!n(t)}},69190:function(t,e,r){\\\"use strict\\\";var n=r(24582),i=r(47403),a=r(9234),o=r(6048),s=function(t,e){return t.replace(\\\"%v\\\",o(e))};t.exports=function(t,e,r){if(!i(r))throw new TypeError(s(e,t));if(!n(t)){if(\\\"default\\\"in r)return r.default;if(r.isOptional)return null}var o=a(r.errorMessage);throw n(o)||(o=e),new TypeError(s(o,t))}},18497:function(t){\\\"use strict\\\";t.exports=function(t){try{return t.toString()}catch(e){try{return String(t)}catch(t){return null}}}},6048:function(t,e,r){\\\"use strict\\\";var n=r(18497),i=/[\\\\n\\\\r\\\\u2028\\\\u2029]/g;t.exports=function(t){var e=n(t);return null===e?\\\"<Non-coercible to string value>\\\":(e.length>100&&(e=e.slice(0,99)+\\\"…\\\"),e=e.replace(i,(function(t){switch(t){case\\\"\\\\n\\\":return\\\"\\\\\\\\n\\\";case\\\"\\\\r\\\":return\\\"\\\\\\\\r\\\";case\\\"\\\\u2028\\\":return\\\"\\\\\\\\u2028\\\";case\\\"\\\\u2029\\\":return\\\"\\\\\\\\u2029\\\";default:throw new Error(\\\"Unexpected character\\\")}})))}},47403:function(t,e,r){\\\"use strict\\\";var n=r(24582),i={object:!0,function:!0,undefined:!0};t.exports=function(t){return!!n(t)&&hasOwnProperty.call(i,typeof t)}},82527:function(t,e,r){\\\"use strict\\\";var n=r(69190),i=r(84985);t.exports=function(t){return i(t)?t:n(t,\\\"%v is not a plain function\\\",arguments[1])}},84985:function(t,e,r){\\\"use strict\\\";var n=r(73116),i=/^\\\\s*class[\\\\s{/}]/,a=Function.prototype.toString;t.exports=function(t){return!!n(t)&&!i.test(a.call(t))}},24511:function(t,e,r){\\\"use strict\\\";var n=r(47403);t.exports=function(t){if(!n(t))return!1;try{return!!t.constructor&&t.constructor.prototype===t}catch(t){return!1}}},9234:function(t,e,r){\\\"use strict\\\";var n=r(24582),i=r(47403),a=Object.prototype.toString;t.exports=function(t){if(!n(t))return null;if(i(t)){var e=t.toString;if(\\\"function\\\"!=typeof e)return null;if(e===a)return null}try{return\\\"\\\"+t}catch(t){return null}}},10424:function(t,e,r){\\\"use strict\\\";var n=r(69190),i=r(24582);t.exports=function(t){return i(t)?t:n(t,\\\"Cannot use %v\\\",arguments[1])}},24582:function(t){\\\"use strict\\\";t.exports=function(t){return null!=t}},58404:function(t,e,r){\\\"use strict\\\";var n=r(13547),i=r(12129),a=r(12856).Buffer;r.g.__TYPEDARRAY_POOL||(r.g.__TYPEDARRAY_POOL={UINT8:i([32,0]),UINT16:i([32,0]),UINT32:i([32,0]),BIGUINT64:i([32,0]),INT8:i([32,0]),INT16:i([32,0]),INT32:i([32,0]),BIGINT64:i([32,0]),FLOAT:i([32,0]),DOUBLE:i([32,0]),DATA:i([32,0]),UINT8C:i([32,0]),BUFFER:i([32,0])});var o=\\\"undefined\\\"!=typeof Uint8ClampedArray,s=\\\"undefined\\\"!=typeof BigUint64Array,l=\\\"undefined\\\"!=typeof BigInt64Array,u=r.g.__TYPEDARRAY_POOL;u.UINT8C||(u.UINT8C=i([32,0])),u.BIGUINT64||(u.BIGUINT64=i([32,0])),u.BIGINT64||(u.BIGINT64=i([32,0])),u.BUFFER||(u.BUFFER=i([32,0]));var c=u.DATA,f=u.BUFFER;function h(t){if(t){var e=t.length||t.byteLength,r=n.log2(e);c[r].push(t)}}function p(t){t=n.nextPow2(t);var e=n.log2(t),r=c[e];return r.length>0?r.pop():new ArrayBuffer(t)}function d(t){return new Uint8Array(p(t),0,t)}function v(t){return new Uint16Array(p(2*t),0,t)}function g(t){return new Uint32Array(p(4*t),0,t)}function y(t){return new Int8Array(p(t),0,t)}function m(t){return new Int16Array(p(2*t),0,t)}function x(t){return new Int32Array(p(4*t),0,t)}function b(t){return new Float32Array(p(4*t),0,t)}function _(t){return new Float64Array(p(8*t),0,t)}function w(t){return o?new Uint8ClampedArray(p(t),0,t):d(t)}function T(t){return s?new BigUint64Array(p(8*t),0,t):null}function k(t){return l?new BigInt64Array(p(8*t),0,t):null}function A(t){return new DataView(p(t),0,t)}function M(t){t=n.nextPow2(t);var e=n.log2(t),r=f[e];return r.length>0?r.pop():new a(t)}e.free=function(t){if(a.isBuffer(t))f[n.log2(t.length)].push(t);else{if(\\\"[object ArrayBuffer]\\\"!==Object.prototype.toString.call(t)&&(t=t.buffer),!t)return;var e=t.length||t.byteLength,r=0|n.log2(e);c[r].push(t)}},e.freeUint8=e.freeUint16=e.freeUint32=e.freeBigUint64=e.freeInt8=e.freeInt16=e.freeInt32=e.freeBigInt64=e.freeFloat32=e.freeFloat=e.freeFloat64=e.freeDouble=e.freeUint8Clamped=e.freeDataView=function(t){h(t.buffer)},e.freeArrayBuffer=h,e.freeBuffer=function(t){f[n.log2(t.length)].push(t)},e.malloc=function(t,e){if(void 0===e||\\\"arraybuffer\\\"===e)return p(t);switch(e){case\\\"uint8\\\":return d(t);case\\\"uint16\\\":return v(t);case\\\"uint32\\\":return g(t);case\\\"int8\\\":return y(t);case\\\"int16\\\":return m(t);case\\\"int32\\\":return x(t);case\\\"float\\\":case\\\"float32\\\":return b(t);case\\\"double\\\":case\\\"float64\\\":return _(t);case\\\"uint8_clamped\\\":return w(t);case\\\"bigint64\\\":return k(t);case\\\"biguint64\\\":return T(t);case\\\"buffer\\\":return M(t);case\\\"data\\\":case\\\"dataview\\\":return A(t);default:return null}return null},e.mallocArrayBuffer=p,e.mallocUint8=d,e.mallocUint16=v,e.mallocUint32=g,e.mallocInt8=y,e.mallocInt16=m,e.mallocInt32=x,e.mallocFloat32=e.mallocFloat=b,e.mallocFloat64=e.mallocDouble=_,e.mallocUint8Clamped=w,e.mallocBigUint64=T,e.mallocBigInt64=k,e.mallocDataView=A,e.mallocBuffer=M,e.clearCache=function(){for(var t=0;t<32;++t)u.UINT8[t].length=0,u.UINT16[t].length=0,u.UINT32[t].length=0,u.INT8[t].length=0,u.INT16[t].length=0,u.INT32[t].length=0,u.FLOAT[t].length=0,u.DOUBLE[t].length=0,u.BIGUINT64[t].length=0,u.BIGINT64[t].length=0,u.UINT8C[t].length=0,c[t].length=0,f[t].length=0}},90448:function(t){var e=/[\\\\'\\\\\\\"]/;t.exports=function(t){return t?(e.test(t.charAt(0))&&(t=t.substr(1)),e.test(t.charAt(t.length-1))&&(t=t.substr(0,t.length-1)),t):\\\"\\\"}},93447:function(t){\\\"use strict\\\";t.exports=function(t,e,r){Array.isArray(r)||(r=[].slice.call(arguments,2));for(var n=0,i=r.length;n<i;n++){var a=r[n];for(var o in a)if((void 0===e[o]||Array.isArray(e[o])||t[o]!==e[o])&&o in e){var s;if(!0===a[o])s=e[o];else{if(!1===a[o])continue;if(\\\"function\\\"==typeof a[o]&&void 0===(s=a[o](e[o],t,e)))continue}t[o]=s}}return t}},20588:function(t,e,r){function n(t){try{if(!r.g.localStorage)return!1}catch(t){return!1}var e=r.g.localStorage[t];return null!=e&&\\\"true\\\"===String(e).toLowerCase()}t.exports=function(t,e){if(n(\\\"noDeprecation\\\"))return t;var r=!1;return function(){if(!r){if(n(\\\"throwDeprecation\\\"))throw new Error(e);n(\\\"traceDeprecation\\\")?console.trace(e):console.warn(e),r=!0}return t.apply(this,arguments)}}},45920:function(t){t.exports=function(t){return t&&\\\"object\\\"==typeof t&&\\\"function\\\"==typeof t.copy&&\\\"function\\\"==typeof t.fill&&\\\"function\\\"==typeof t.readUInt8}},4936:function(t,e,r){\\\"use strict\\\";var n=r(47216),i=r(65481),a=r(21099),o=r(9187);function s(t){return t.call.bind(t)}var l=\\\"undefined\\\"!=typeof BigInt,u=\\\"undefined\\\"!=typeof Symbol,c=s(Object.prototype.toString),f=s(Number.prototype.valueOf),h=s(String.prototype.valueOf),p=s(Boolean.prototype.valueOf);if(l)var d=s(BigInt.prototype.valueOf);if(u)var v=s(Symbol.prototype.valueOf);function g(t,e){if(\\\"object\\\"!=typeof t)return!1;try{return e(t),!0}catch(t){return!1}}function y(t){return\\\"[object Map]\\\"===c(t)}function m(t){return\\\"[object Set]\\\"===c(t)}function x(t){return\\\"[object WeakMap]\\\"===c(t)}function b(t){return\\\"[object WeakSet]\\\"===c(t)}function _(t){return\\\"[object ArrayBuffer]\\\"===c(t)}function w(t){return\\\"undefined\\\"!=typeof ArrayBuffer&&(_.working?_(t):t instanceof ArrayBuffer)}function T(t){return\\\"[object DataView]\\\"===c(t)}function k(t){return\\\"undefined\\\"!=typeof DataView&&(T.working?T(t):t instanceof DataView)}e.isArgumentsObject=n,e.isGeneratorFunction=i,e.isTypedArray=o,e.isPromise=function(t){return\\\"undefined\\\"!=typeof Promise&&t instanceof Promise||null!==t&&\\\"object\\\"==typeof t&&\\\"function\\\"==typeof t.then&&\\\"function\\\"==typeof t.catch},e.isArrayBufferView=function(t){return\\\"undefined\\\"!=typeof ArrayBuffer&&ArrayBuffer.isView?ArrayBuffer.isView(t):o(t)||k(t)},e.isUint8Array=function(t){return\\\"Uint8Array\\\"===a(t)},e.isUint8ClampedArray=function(t){return\\\"Uint8ClampedArray\\\"===a(t)},e.isUint16Array=function(t){return\\\"Uint16Array\\\"===a(t)},e.isUint32Array=function(t){return\\\"Uint32Array\\\"===a(t)},e.isInt8Array=function(t){return\\\"Int8Array\\\"===a(t)},e.isInt16Array=function(t){return\\\"Int16Array\\\"===a(t)},e.isInt32Array=function(t){return\\\"Int32Array\\\"===a(t)},e.isFloat32Array=function(t){return\\\"Float32Array\\\"===a(t)},e.isFloat64Array=function(t){return\\\"Float64Array\\\"===a(t)},e.isBigInt64Array=function(t){return\\\"BigInt64Array\\\"===a(t)},e.isBigUint64Array=function(t){return\\\"BigUint64Array\\\"===a(t)},y.working=\\\"undefined\\\"!=typeof Map&&y(new Map),e.isMap=function(t){return\\\"undefined\\\"!=typeof Map&&(y.working?y(t):t instanceof Map)},m.working=\\\"undefined\\\"!=typeof Set&&m(new Set),e.isSet=function(t){return\\\"undefined\\\"!=typeof Set&&(m.working?m(t):t instanceof Set)},x.working=\\\"undefined\\\"!=typeof WeakMap&&x(new WeakMap),e.isWeakMap=function(t){return\\\"undefined\\\"!=typeof WeakMap&&(x.working?x(t):t instanceof WeakMap)},b.working=\\\"undefined\\\"!=typeof WeakSet&&b(new WeakSet),e.isWeakSet=function(t){return b(t)},_.working=\\\"undefined\\\"!=typeof ArrayBuffer&&_(new ArrayBuffer),e.isArrayBuffer=w,T.working=\\\"undefined\\\"!=typeof ArrayBuffer&&\\\"undefined\\\"!=typeof DataView&&T(new DataView(new ArrayBuffer(1),0,1)),e.isDataView=k;var A=\\\"undefined\\\"!=typeof SharedArrayBuffer?SharedArrayBuffer:void 0;function M(t){return\\\"[object SharedArrayBuffer]\\\"===c(t)}function S(t){return void 0!==A&&(void 0===M.working&&(M.working=M(new A)),M.working?M(t):t instanceof A)}function E(t){return g(t,f)}function L(t){return g(t,h)}function C(t){return g(t,p)}function P(t){return l&&g(t,d)}function O(t){return u&&g(t,v)}e.isSharedArrayBuffer=S,e.isAsyncFunction=function(t){return\\\"[object AsyncFunction]\\\"===c(t)},e.isMapIterator=function(t){return\\\"[object Map Iterator]\\\"===c(t)},e.isSetIterator=function(t){return\\\"[object Set Iterator]\\\"===c(t)},e.isGeneratorObject=function(t){return\\\"[object Generator]\\\"===c(t)},e.isWebAssemblyCompiledModule=function(t){return\\\"[object WebAssembly.Module]\\\"===c(t)},e.isNumberObject=E,e.isStringObject=L,e.isBooleanObject=C,e.isBigIntObject=P,e.isSymbolObject=O,e.isBoxedPrimitive=function(t){return E(t)||L(t)||C(t)||P(t)||O(t)},e.isAnyArrayBuffer=function(t){return\\\"undefined\\\"!=typeof Uint8Array&&(w(t)||S(t))},[\\\"isProxy\\\",\\\"isExternal\\\",\\\"isModuleNamespaceObject\\\"].forEach((function(t){Object.defineProperty(e,t,{enumerable:!1,value:function(){throw new Error(t+\\\" is not supported in userland\\\")}})}))},43827:function(t,e,r){var n=r(90386),i=Object.getOwnPropertyDescriptors||function(t){for(var e=Object.keys(t),r={},n=0;n<e.length;n++)r[e[n]]=Object.getOwnPropertyDescriptor(t,e[n]);return r},a=/%[sdj%]/g;e.format=function(t){if(!x(t)){for(var e=[],r=0;r<arguments.length;r++)e.push(u(arguments[r]));return e.join(\\\" \\\")}r=1;for(var n=arguments,i=n.length,o=String(t).replace(a,(function(t){if(\\\"%%\\\"===t)return\\\"%\\\";if(r>=i)return t;switch(t){case\\\"%s\\\":return String(n[r++]);case\\\"%d\\\":return Number(n[r++]);case\\\"%j\\\":try{return JSON.stringify(n[r++])}catch(t){return\\\"[Circular]\\\"}default:return t}})),s=n[r];r<i;s=n[++r])y(s)||!w(s)?o+=\\\" \\\"+s:o+=\\\" \\\"+u(s);return o},e.deprecate=function(t,r){if(void 0!==n&&!0===n.noDeprecation)return t;if(void 0===n)return function(){return e.deprecate(t,r).apply(this,arguments)};var i=!1;return function(){if(!i){if(n.throwDeprecation)throw new Error(r);n.traceDeprecation?console.trace(r):console.error(r),i=!0}return t.apply(this,arguments)}};var o={},s=/^$/;if(n.env.NODE_DEBUG){var l=n.env.NODE_DEBUG;l=l.replace(/[|\\\\\\\\{}()[\\\\]^$+?.]/g,\\\"\\\\\\\\$&\\\").replace(/\\\\*/g,\\\".*\\\").replace(/,/g,\\\"$|^\\\").toUpperCase(),s=new RegExp(\\\"^\\\"+l+\\\"$\\\",\\\"i\\\")}function u(t,r){var n={seen:[],stylize:f};return arguments.length>=3&&(n.depth=arguments[2]),arguments.length>=4&&(n.colors=arguments[3]),g(r)?n.showHidden=r:r&&e._extend(n,r),b(n.showHidden)&&(n.showHidden=!1),b(n.depth)&&(n.depth=2),b(n.colors)&&(n.colors=!1),b(n.customInspect)&&(n.customInspect=!0),n.colors&&(n.stylize=c),h(n,t,n.depth)}function c(t,e){var r=u.styles[e];return r?\\\"\\u001b[\\\"+u.colors[r][0]+\\\"m\\\"+t+\\\"\\u001b[\\\"+u.colors[r][1]+\\\"m\\\":t}function f(t,e){return t}function h(t,r,n){if(t.customInspect&&r&&A(r.inspect)&&r.inspect!==e.inspect&&(!r.constructor||r.constructor.prototype!==r)){var i=r.inspect(n,t);return x(i)||(i=h(t,i,n)),i}var a=function(t,e){if(b(e))return t.stylize(\\\"undefined\\\",\\\"undefined\\\");if(x(e)){var r=\\\"'\\\"+JSON.stringify(e).replace(/^\\\"|\\\"$/g,\\\"\\\").replace(/'/g,\\\"\\\\\\\\'\\\").replace(/\\\\\\\\\\\"/g,'\\\"')+\\\"'\\\";return t.stylize(r,\\\"string\\\")}return m(e)?t.stylize(\\\"\\\"+e,\\\"number\\\"):g(e)?t.stylize(\\\"\\\"+e,\\\"boolean\\\"):y(e)?t.stylize(\\\"null\\\",\\\"null\\\"):void 0}(t,r);if(a)return a;var o=Object.keys(r),s=function(t){var e={};return t.forEach((function(t,r){e[t]=!0})),e}(o);if(t.showHidden&&(o=Object.getOwnPropertyNames(r)),k(r)&&(o.indexOf(\\\"message\\\")>=0||o.indexOf(\\\"description\\\")>=0))return p(r);if(0===o.length){if(A(r)){var l=r.name?\\\": \\\"+r.name:\\\"\\\";return t.stylize(\\\"[Function\\\"+l+\\\"]\\\",\\\"special\\\")}if(_(r))return t.stylize(RegExp.prototype.toString.call(r),\\\"regexp\\\");if(T(r))return t.stylize(Date.prototype.toString.call(r),\\\"date\\\");if(k(r))return p(r)}var u,c=\\\"\\\",f=!1,w=[\\\"{\\\",\\\"}\\\"];return v(r)&&(f=!0,w=[\\\"[\\\",\\\"]\\\"]),A(r)&&(c=\\\" [Function\\\"+(r.name?\\\": \\\"+r.name:\\\"\\\")+\\\"]\\\"),_(r)&&(c=\\\" \\\"+RegExp.prototype.toString.call(r)),T(r)&&(c=\\\" \\\"+Date.prototype.toUTCString.call(r)),k(r)&&(c=\\\" \\\"+p(r)),0!==o.length||f&&0!=r.length?n<0?_(r)?t.stylize(RegExp.prototype.toString.call(r),\\\"regexp\\\"):t.stylize(\\\"[Object]\\\",\\\"special\\\"):(t.seen.push(r),u=f?function(t,e,r,n,i){for(var a=[],o=0,s=e.length;o<s;++o)L(e,String(o))?a.push(d(t,e,r,n,String(o),!0)):a.push(\\\"\\\");return i.forEach((function(i){i.match(/^\\\\d+$/)||a.push(d(t,e,r,n,i,!0))})),a}(t,r,n,s,o):o.map((function(e){return d(t,r,n,s,e,f)})),t.seen.pop(),function(t,e,r){return t.reduce((function(t,e){return e.indexOf(\\\"\\\\n\\\"),t+e.replace(/\\\\u001b\\\\[\\\\d\\\\d?m/g,\\\"\\\").length+1}),0)>60?r[0]+(\\\"\\\"===e?\\\"\\\":e+\\\"\\\\n \\\")+\\\" \\\"+t.join(\\\",\\\\n  \\\")+\\\" \\\"+r[1]:r[0]+e+\\\" \\\"+t.join(\\\", \\\")+\\\" \\\"+r[1]}(u,c,w)):w[0]+c+w[1]}function p(t){return\\\"[\\\"+Error.prototype.toString.call(t)+\\\"]\\\"}function d(t,e,r,n,i,a){var o,s,l;if((l=Object.getOwnPropertyDescriptor(e,i)||{value:e[i]}).get?s=l.set?t.stylize(\\\"[Getter/Setter]\\\",\\\"special\\\"):t.stylize(\\\"[Getter]\\\",\\\"special\\\"):l.set&&(s=t.stylize(\\\"[Setter]\\\",\\\"special\\\")),L(n,i)||(o=\\\"[\\\"+i+\\\"]\\\"),s||(t.seen.indexOf(l.value)<0?(s=y(r)?h(t,l.value,null):h(t,l.value,r-1)).indexOf(\\\"\\\\n\\\")>-1&&(s=a?s.split(\\\"\\\\n\\\").map((function(t){return\\\"  \\\"+t})).join(\\\"\\\\n\\\").slice(2):\\\"\\\\n\\\"+s.split(\\\"\\\\n\\\").map((function(t){return\\\"   \\\"+t})).join(\\\"\\\\n\\\")):s=t.stylize(\\\"[Circular]\\\",\\\"special\\\")),b(o)){if(a&&i.match(/^\\\\d+$/))return s;(o=JSON.stringify(\\\"\\\"+i)).match(/^\\\"([a-zA-Z_][a-zA-Z_0-9]*)\\\"$/)?(o=o.slice(1,-1),o=t.stylize(o,\\\"name\\\")):(o=o.replace(/'/g,\\\"\\\\\\\\'\\\").replace(/\\\\\\\\\\\"/g,'\\\"').replace(/(^\\\"|\\\"$)/g,\\\"'\\\"),o=t.stylize(o,\\\"string\\\"))}return o+\\\": \\\"+s}function v(t){return Array.isArray(t)}function g(t){return\\\"boolean\\\"==typeof t}function y(t){return null===t}function m(t){return\\\"number\\\"==typeof t}function x(t){return\\\"string\\\"==typeof t}function b(t){return void 0===t}function _(t){return w(t)&&\\\"[object RegExp]\\\"===M(t)}function w(t){return\\\"object\\\"==typeof t&&null!==t}function T(t){return w(t)&&\\\"[object Date]\\\"===M(t)}function k(t){return w(t)&&(\\\"[object Error]\\\"===M(t)||t instanceof Error)}function A(t){return\\\"function\\\"==typeof t}function M(t){return Object.prototype.toString.call(t)}function S(t){return t<10?\\\"0\\\"+t.toString(10):t.toString(10)}e.debuglog=function(t){if(t=t.toUpperCase(),!o[t])if(s.test(t)){var r=n.pid;o[t]=function(){var n=e.format.apply(e,arguments);console.error(\\\"%s %d: %s\\\",t,r,n)}}else o[t]=function(){};return o[t]},e.inspect=u,u.colors={bold:[1,22],italic:[3,23],underline:[4,24],inverse:[7,27],white:[37,39],grey:[90,39],black:[30,39],blue:[34,39],cyan:[36,39],green:[32,39],magenta:[35,39],red:[31,39],yellow:[33,39]},u.styles={special:\\\"cyan\\\",number:\\\"yellow\\\",boolean:\\\"yellow\\\",undefined:\\\"grey\\\",null:\\\"bold\\\",string:\\\"green\\\",date:\\\"magenta\\\",regexp:\\\"red\\\"},e.types=r(4936),e.isArray=v,e.isBoolean=g,e.isNull=y,e.isNullOrUndefined=function(t){return null==t},e.isNumber=m,e.isString=x,e.isSymbol=function(t){return\\\"symbol\\\"==typeof t},e.isUndefined=b,e.isRegExp=_,e.types.isRegExp=_,e.isObject=w,e.isDate=T,e.types.isDate=T,e.isError=k,e.types.isNativeError=k,e.isFunction=A,e.isPrimitive=function(t){return null===t||\\\"boolean\\\"==typeof t||\\\"number\\\"==typeof t||\\\"string\\\"==typeof t||\\\"symbol\\\"==typeof t||void 0===t},e.isBuffer=r(45920);var E=[\\\"Jan\\\",\\\"Feb\\\",\\\"Mar\\\",\\\"Apr\\\",\\\"May\\\",\\\"Jun\\\",\\\"Jul\\\",\\\"Aug\\\",\\\"Sep\\\",\\\"Oct\\\",\\\"Nov\\\",\\\"Dec\\\"];function L(t,e){return Object.prototype.hasOwnProperty.call(t,e)}e.log=function(){var t,r;console.log(\\\"%s - %s\\\",(r=[S((t=new Date).getHours()),S(t.getMinutes()),S(t.getSeconds())].join(\\\":\\\"),[t.getDate(),E[t.getMonth()],r].join(\\\" \\\")),e.format.apply(e,arguments))},e.inherits=r(42018),e._extend=function(t,e){if(!e||!w(e))return t;for(var r=Object.keys(e),n=r.length;n--;)t[r[n]]=e[r[n]];return t};var C=\\\"undefined\\\"!=typeof Symbol?Symbol(\\\"util.promisify.custom\\\"):void 0;function P(t,e){if(!t){var r=new Error(\\\"Promise was rejected with a falsy value\\\");r.reason=t,t=r}return e(t)}e.promisify=function(t){if(\\\"function\\\"!=typeof t)throw new TypeError('The \\\"original\\\" argument must be of type Function');if(C&&t[C]){var e;if(\\\"function\\\"!=typeof(e=t[C]))throw new TypeError('The \\\"util.promisify.custom\\\" argument must be of type Function');return Object.defineProperty(e,C,{value:e,enumerable:!1,writable:!1,configurable:!0}),e}function e(){for(var e,r,n=new Promise((function(t,n){e=t,r=n})),i=[],a=0;a<arguments.length;a++)i.push(arguments[a]);i.push((function(t,n){t?r(t):e(n)}));try{t.apply(this,i)}catch(t){r(t)}return n}return Object.setPrototypeOf(e,Object.getPrototypeOf(t)),C&&Object.defineProperty(e,C,{value:e,enumerable:!1,writable:!1,configurable:!0}),Object.defineProperties(e,i(t))},e.promisify.custom=C,e.callbackify=function(t){if(\\\"function\\\"!=typeof t)throw new TypeError('The \\\"original\\\" argument must be of type Function');function e(){for(var e=[],r=0;r<arguments.length;r++)e.push(arguments[r]);var i=e.pop();if(\\\"function\\\"!=typeof i)throw new TypeError(\\\"The last argument must be of type Function\\\");var a=this,o=function(){return i.apply(a,arguments)};t.apply(this,e).then((function(t){n.nextTick(o.bind(null,null,t))}),(function(t){n.nextTick(P.bind(null,t,o))}))}return Object.setPrototypeOf(e,Object.getPrototypeOf(t)),Object.defineProperties(e,i(t)),e}},40372:function(t,e,r){var n=r(86249);t.exports=function(t){return n(\\\"webgl\\\",t)}},21099:function(t,e,r){\\\"use strict\\\";var n=r(31353),i=r(72077),a=r(6614),o=r(40383),s=a(\\\"Object.prototype.toString\\\"),l=r(84543)(),u=\\\"undefined\\\"==typeof globalThis?r.g:globalThis,c=i(),f=a(\\\"String.prototype.slice\\\"),h={},p=Object.getPrototypeOf;l&&o&&p&&n(c,(function(t){if(\\\"function\\\"==typeof u[t]){var e=new u[t];if(Symbol.toStringTag in e){var r=p(e),n=o(r,Symbol.toStringTag);if(!n){var i=p(r);n=o(i,Symbol.toStringTag)}h[t]=n.get}}}));var d=r(9187);t.exports=function(t){return!!d(t)&&(l&&Symbol.toStringTag in t?function(t){var e=!1;return n(h,(function(r,n){if(!e)try{var i=r.call(t);i===n&&(e=i)}catch(t){}})),e}(t):f(s(t),8,-1))}},3961:function(t,e,r){var n=r(63489),i=r(56131),a=n.instance();function o(t){this.local=this.regionalOptions[t||\\\"\\\"]||this.regionalOptions[\\\"\\\"]}o.prototype=new n.baseCalendar,i(o.prototype,{name:\\\"Chinese\\\",jdEpoch:1721425.5,hasYearZero:!1,minMonth:0,firstMonth:0,minDay:1,regionalOptions:{\\\"\\\":{name:\\\"Chinese\\\",epochs:[\\\"BEC\\\",\\\"EC\\\"],monthNumbers:function(t,e){if(\\\"string\\\"==typeof t){var r=t.match(l);return r?r[0]:\\\"\\\"}var n=this._validateYear(t),i=t.month(),a=\\\"\\\"+this.toChineseMonth(n,i);return e&&a.length<2&&(a=\\\"0\\\"+a),this.isIntercalaryMonth(n,i)&&(a+=\\\"i\\\"),a},monthNames:function(t){if(\\\"string\\\"==typeof t){var e=t.match(u);return e?e[0]:\\\"\\\"}var r=this._validateYear(t),n=t.month(),i=[\\\"一月\\\",\\\"二月\\\",\\\"三月\\\",\\\"四月\\\",\\\"五月\\\",\\\"六月\\\",\\\"七月\\\",\\\"八月\\\",\\\"九月\\\",\\\"十月\\\",\\\"十一月\\\",\\\"十二月\\\"][this.toChineseMonth(r,n)-1];return this.isIntercalaryMonth(r,n)&&(i=\\\"闰\\\"+i),i},monthNamesShort:function(t){if(\\\"string\\\"==typeof t){var e=t.match(c);return e?e[0]:\\\"\\\"}var r=this._validateYear(t),n=t.month(),i=[\\\"一\\\",\\\"二\\\",\\\"三\\\",\\\"四\\\",\\\"五\\\",\\\"六\\\",\\\"七\\\",\\\"八\\\",\\\"九\\\",\\\"十\\\",\\\"十一\\\",\\\"十二\\\"][this.toChineseMonth(r,n)-1];return this.isIntercalaryMonth(r,n)&&(i=\\\"闰\\\"+i),i},parseMonth:function(t,e){t=this._validateYear(t);var r,n=parseInt(e);if(isNaN(n))\\\"闰\\\"===e[0]&&(r=!0,e=e.substring(1)),\\\"月\\\"===e[e.length-1]&&(e=e.substring(0,e.length-1)),n=1+[\\\"一\\\",\\\"二\\\",\\\"三\\\",\\\"四\\\",\\\"五\\\",\\\"六\\\",\\\"七\\\",\\\"八\\\",\\\"九\\\",\\\"十\\\",\\\"十一\\\",\\\"十二\\\"].indexOf(e);else{var i=e[e.length-1];r=\\\"i\\\"===i||\\\"I\\\"===i}return this.toMonthIndex(t,n,r)},dayNames:[\\\"Sunday\\\",\\\"Monday\\\",\\\"Tuesday\\\",\\\"Wednesday\\\",\\\"Thursday\\\",\\\"Friday\\\",\\\"Saturday\\\"],dayNamesShort:[\\\"Sun\\\",\\\"Mon\\\",\\\"Tue\\\",\\\"Wed\\\",\\\"Thu\\\",\\\"Fri\\\",\\\"Sat\\\"],dayNamesMin:[\\\"Su\\\",\\\"Mo\\\",\\\"Tu\\\",\\\"We\\\",\\\"Th\\\",\\\"Fr\\\",\\\"Sa\\\"],digits:null,dateFormat:\\\"yyyy/mm/dd\\\",firstDay:1,isRTL:!1}},_validateYear:function(t,e){if(t.year&&(t=t.year()),\\\"number\\\"!=typeof t||t<1888||t>2111)throw e.replace(/\\\\{0\\\\}/,this.local.name);return t},toMonthIndex:function(t,e,r){var i=this.intercalaryMonth(t);if(r&&e!==i||e<1||e>12)throw n.local.invalidMonth.replace(/\\\\{0\\\\}/,this.local.name);return i?!r&&e<=i?e-1:e:e-1},toChineseMonth:function(t,e){t.year&&(e=(t=t.year()).month());var r=this.intercalaryMonth(t);if(e<0||e>(r?12:11))throw n.local.invalidMonth.replace(/\\\\{0\\\\}/,this.local.name);return r?e<r?e+1:e:e+1},intercalaryMonth:function(t){return t=this._validateYear(t),f[t-f[0]]>>13},isIntercalaryMonth:function(t,e){t.year&&(e=(t=t.year()).month());var r=this.intercalaryMonth(t);return!!r&&r===e},leapYear:function(t){return 0!==this.intercalaryMonth(t)},weekOfYear:function(t,e,r){var i,o=this._validateYear(t,n.local.invalidyear),s=h[o-h[0]],l=s>>9&4095,u=s>>5&15,c=31&s;(i=a.newDate(l,u,c)).add(4-(i.dayOfWeek()||7),\\\"d\\\");var f=this.toJD(t,e,r)-i.toJD();return 1+Math.floor(f/7)},monthsInYear:function(t){return this.leapYear(t)?13:12},daysInMonth:function(t,e){t.year&&(e=t.month(),t=t.year()),t=this._validateYear(t);var r=f[t-f[0]];if(e>(r>>13?12:11))throw n.local.invalidMonth.replace(/\\\\{0\\\\}/,this.local.name);return r&1<<12-e?30:29},weekDay:function(t,e,r){return(this.dayOfWeek(t,e,r)||7)<6},toJD:function(t,e,r){var i=this._validate(t,s,r,n.local.invalidDate);t=this._validateYear(i.year()),e=i.month(),r=i.day();var o=this.isIntercalaryMonth(t,e),s=this.toChineseMonth(t,e),l=function(t,e,r,n,i){var a,o,s;if(\\\"object\\\"==typeof t)o=t,a=e||{};else{var l;if(!(\\\"number\\\"==typeof t&&t>=1888&&t<=2111))throw new Error(\\\"Lunar year outside range 1888-2111\\\");if(!(\\\"number\\\"==typeof e&&e>=1&&e<=12))throw new Error(\\\"Lunar month outside range 1 - 12\\\");if(!(\\\"number\\\"==typeof r&&r>=1&&r<=30))throw new Error(\\\"Lunar day outside range 1 - 30\\\");\\\"object\\\"==typeof n?(l=!1,a=n):(l=!!n,a={}),o={year:t,month:e,day:r,isIntercalary:l}}s=o.day-1;var u,c=f[o.year-f[0]],p=c>>13;u=p&&(o.month>p||o.isIntercalary)?o.month:o.month-1;for(var d=0;d<u;d++)s+=c&1<<12-d?30:29;var v=h[o.year-h[0]],g=new Date(v>>9&4095,(v>>5&15)-1,(31&v)+s);return a.year=g.getFullYear(),a.month=1+g.getMonth(),a.day=g.getDate(),a}(t,s,r,o);return a.toJD(l.year,l.month,l.day)},fromJD:function(t){var e=a.fromJD(t),r=function(t,e,r,n){var i,a;if(\\\"object\\\"==typeof t)i=t,a=e||{};else{if(!(\\\"number\\\"==typeof t&&t>=1888&&t<=2111))throw new Error(\\\"Solar year outside range 1888-2111\\\");if(!(\\\"number\\\"==typeof e&&e>=1&&e<=12))throw new Error(\\\"Solar month outside range 1 - 12\\\");if(!(\\\"number\\\"==typeof r&&r>=1&&r<=31))throw new Error(\\\"Solar day outside range 1 - 31\\\");i={year:t,month:e,day:r},a={}}var o=h[i.year-h[0]],s=i.year<<9|i.month<<5|i.day;a.year=s>=o?i.year:i.year-1,o=h[a.year-h[0]];var l,u=new Date(o>>9&4095,(o>>5&15)-1,31&o),c=new Date(i.year,i.month-1,i.day);l=Math.round((c-u)/864e5);var p,d=f[a.year-f[0]];for(p=0;p<13;p++){var v=d&1<<12-p?30:29;if(l<v)break;l-=v}var g=d>>13;return!g||p<g?(a.isIntercalary=!1,a.month=1+p):p===g?(a.isIntercalary=!0,a.month=p):(a.isIntercalary=!1,a.month=p),a.day=1+l,a}(e.year(),e.month(),e.day()),n=this.toMonthIndex(r.year,r.month,r.isIntercalary);return this.newDate(r.year,n,r.day)},fromString:function(t){var e=t.match(s),r=this._validateYear(+e[1]),n=+e[2],i=!!e[3],a=this.toMonthIndex(r,n,i),o=+e[4];return this.newDate(r,a,o)},add:function(t,e,r){var n=t.year(),i=t.month(),a=this.isIntercalaryMonth(n,i),s=this.toChineseMonth(n,i),l=Object.getPrototypeOf(o.prototype).add.call(this,t,e,r);if(\\\"y\\\"===r){var u=l.year(),c=l.month(),f=this.isIntercalaryMonth(u,s),h=a&&f?this.toMonthIndex(u,s,!0):this.toMonthIndex(u,s,!1);h!==c&&l.month(h)}return l}});var s=/^\\\\s*(-?\\\\d\\\\d\\\\d\\\\d|\\\\d\\\\d)[-/](\\\\d?\\\\d)([iI]?)[-/](\\\\d?\\\\d)/m,l=/^\\\\d?\\\\d[iI]?/m,u=/^闰?十?[一二三四五六七八九]?月/m,c=/^闰?十?[一二三四五六七八九]?/m;n.calendars.chinese=o;var f=[1887,5780,5802,19157,2742,50359,1198,2646,46378,7466,3412,30122,5482,67949,2396,5294,43597,6732,6954,36181,2772,4954,18781,2396,54427,5274,6730,47781,5800,6868,21210,4790,59703,2350,5270,46667,3402,3496,38325,1388,4782,18735,2350,52374,6804,7498,44457,2906,1388,29294,4700,63789,6442,6804,56138,5802,2772,38235,1210,4698,22827,5418,63125,3476,5802,43701,2484,5302,27223,2646,70954,7466,3412,54698,5482,2412,38062,5294,2636,32038,6954,60245,2772,4826,43357,2394,5274,39501,6730,72357,5800,5844,53978,4790,2358,38039,5270,87627,3402,3496,54708,5484,4782,43311,2350,3222,27978,7498,68965,2904,5484,45677,4700,6444,39573,6804,6986,19285,2772,62811,1210,4698,47403,5418,5780,38570,5546,76469,2420,5302,51799,2646,5414,36501,3412,5546,18869,2412,54446,5276,6732,48422,6822,2900,28010,4826,92509,2394,5274,55883,6730,6820,47956,5812,2778,18779,2358,62615,5270,5450,46757,3492,5556,27318,4718,67887,2350,3222,52554,7498,3428,38252,5468,4700,31022,6444,64149,6804,6986,43861,2772,5338,35421,2650,70955,5418,5780,54954,5546,2740,38074,5302,2646,29991,3366,61011,3412,5546,43445,2412,5294,35406,6732,72998,6820,6996,52586,2778,2396,38045,5274,6698,23333,6820,64338,5812,2746,43355,2358,5270,39499,5450,79525,3492,5548],h=[1887,966732,967231,967733,968265,968766,969297,969798,970298,970829,971330,971830,972362,972863,973395,973896,974397,974928,975428,975929,976461,976962,977462,977994,978494,979026,979526,980026,980558,981059,981559,982091,982593,983124,983624,984124,984656,985157,985656,986189,986690,987191,987722,988222,988753,989254,989754,990286,990788,991288,991819,992319,992851,993352,993851,994383,994885,995385,995917,996418,996918,997450,997949,998481,998982,999483,1000014,1000515,1001016,1001548,1002047,1002578,1003080,1003580,1004111,1004613,1005113,1005645,1006146,1006645,1007177,1007678,1008209,1008710,1009211,1009743,1010243,1010743,1011275,1011775,1012306,1012807,1013308,1013840,1014341,1014841,1015373,1015874,1016404,1016905,1017405,1017937,1018438,1018939,1019471,1019972,1020471,1021002,1021503,1022035,1022535,1023036,1023568,1024069,1024568,1025100,1025601,1026102,1026633,1027133,1027666,1028167,1028666,1029198,1029699,1030199,1030730,1031231,1031763,1032264,1032764,1033296,1033797,1034297,1034828,1035329,1035830,1036362,1036861,1037393,1037894,1038394,1038925,1039427,1039927,1040459,1040959,1041491,1041992,1042492,1043023,1043524,1044024,1044556,1045057,1045558,1046090,1046590,1047121,1047622,1048122,1048654,1049154,1049655,1050187,1050689,1051219,1051720,1052220,1052751,1053252,1053752,1054284,1054786,1055285,1055817,1056317,1056849,1057349,1057850,1058382,1058883,1059383,1059915,1060415,1060947,1061447,1061947,1062479,1062981,1063480,1064012,1064514,1065014,1065545,1066045,1066577,1067078,1067578,1068110,1068611,1069112,1069642,1070142,1070674,1071175,1071675,1072207,1072709,1073209,1073740,1074241,1074741,1075273,1075773,1076305,1076807,1077308,1077839,1078340,1078840,1079372,1079871,1080403,1080904]},38751:function(t,e,r){var n=r(63489),i=r(56131);function a(t){this.local=this.regionalOptions[t||\\\"\\\"]||this.regionalOptions[\\\"\\\"]}a.prototype=new n.baseCalendar,i(a.prototype,{name:\\\"Coptic\\\",jdEpoch:1825029.5,daysPerMonth:[30,30,30,30,30,30,30,30,30,30,30,30,5],hasYearZero:!1,minMonth:1,firstMonth:1,minDay:1,regionalOptions:{\\\"\\\":{name:\\\"Coptic\\\",epochs:[\\\"BAM\\\",\\\"AM\\\"],monthNames:[\\\"Thout\\\",\\\"Paopi\\\",\\\"Hathor\\\",\\\"Koiak\\\",\\\"Tobi\\\",\\\"Meshir\\\",\\\"Paremhat\\\",\\\"Paremoude\\\",\\\"Pashons\\\",\\\"Paoni\\\",\\\"Epip\\\",\\\"Mesori\\\",\\\"Pi Kogi Enavot\\\"],monthNamesShort:[\\\"Tho\\\",\\\"Pao\\\",\\\"Hath\\\",\\\"Koi\\\",\\\"Tob\\\",\\\"Mesh\\\",\\\"Pat\\\",\\\"Pad\\\",\\\"Pash\\\",\\\"Pao\\\",\\\"Epi\\\",\\\"Meso\\\",\\\"PiK\\\"],dayNames:[\\\"Tkyriaka\\\",\\\"Pesnau\\\",\\\"Pshoment\\\",\\\"Peftoou\\\",\\\"Ptiou\\\",\\\"Psoou\\\",\\\"Psabbaton\\\"],dayNamesShort:[\\\"Tky\\\",\\\"Pes\\\",\\\"Psh\\\",\\\"Pef\\\",\\\"Pti\\\",\\\"Pso\\\",\\\"Psa\\\"],dayNamesMin:[\\\"Tk\\\",\\\"Pes\\\",\\\"Psh\\\",\\\"Pef\\\",\\\"Pt\\\",\\\"Pso\\\",\\\"Psa\\\"],digits:null,dateFormat:\\\"dd/mm/yyyy\\\",firstDay:0,isRTL:!1}},leapYear:function(t){var e=this._validate(t,this.minMonth,this.minDay,n.local.invalidYear);return(t=e.year()+(e.year()<0?1:0))%4==3||t%4==-1},monthsInYear:function(t){return this._validate(t,this.minMonth,this.minDay,n.local.invalidYear||n.regionalOptions[\\\"\\\"].invalidYear),13},weekOfYear:function(t,e,r){var n=this.newDate(t,e,r);return n.add(-n.dayOfWeek(),\\\"d\\\"),Math.floor((n.dayOfYear()-1)/7)+1},daysInMonth:function(t,e){var r=this._validate(t,e,this.minDay,n.local.invalidMonth);return this.daysPerMonth[r.month()-1]+(13===r.month()&&this.leapYear(r.year())?1:0)},weekDay:function(t,e,r){return(this.dayOfWeek(t,e,r)||7)<6},toJD:function(t,e,r){var i=this._validate(t,e,r,n.local.invalidDate);return(t=i.year())<0&&t++,i.day()+30*(i.month()-1)+365*(t-1)+Math.floor(t/4)+this.jdEpoch-1},fromJD:function(t){var e=Math.floor(t)+.5-this.jdEpoch,r=Math.floor((e-Math.floor((e+366)/1461))/365)+1;r<=0&&r--,e=Math.floor(t)+.5-this.newDate(r,1,1).toJD();var n=Math.floor(e/30)+1,i=e-30*(n-1)+1;return this.newDate(r,n,i)}}),n.calendars.coptic=a},86825:function(t,e,r){var n=r(63489),i=r(56131);function a(t){this.local=this.regionalOptions[t||\\\"\\\"]||this.regionalOptions[\\\"\\\"]}a.prototype=new n.baseCalendar,i(a.prototype,{name:\\\"Discworld\\\",jdEpoch:1721425.5,daysPerMonth:[16,32,32,32,32,32,32,32,32,32,32,32,32],hasYearZero:!1,minMonth:1,firstMonth:1,minDay:1,regionalOptions:{\\\"\\\":{name:\\\"Discworld\\\",epochs:[\\\"BUC\\\",\\\"UC\\\"],monthNames:[\\\"Ick\\\",\\\"Offle\\\",\\\"February\\\",\\\"March\\\",\\\"April\\\",\\\"May\\\",\\\"June\\\",\\\"Grune\\\",\\\"August\\\",\\\"Spune\\\",\\\"Sektober\\\",\\\"Ember\\\",\\\"December\\\"],monthNamesShort:[\\\"Ick\\\",\\\"Off\\\",\\\"Feb\\\",\\\"Mar\\\",\\\"Apr\\\",\\\"May\\\",\\\"Jun\\\",\\\"Gru\\\",\\\"Aug\\\",\\\"Spu\\\",\\\"Sek\\\",\\\"Emb\\\",\\\"Dec\\\"],dayNames:[\\\"Sunday\\\",\\\"Octeday\\\",\\\"Monday\\\",\\\"Tuesday\\\",\\\"Wednesday\\\",\\\"Thursday\\\",\\\"Friday\\\",\\\"Saturday\\\"],dayNamesShort:[\\\"Sun\\\",\\\"Oct\\\",\\\"Mon\\\",\\\"Tue\\\",\\\"Wed\\\",\\\"Thu\\\",\\\"Fri\\\",\\\"Sat\\\"],dayNamesMin:[\\\"Su\\\",\\\"Oc\\\",\\\"Mo\\\",\\\"Tu\\\",\\\"We\\\",\\\"Th\\\",\\\"Fr\\\",\\\"Sa\\\"],digits:null,dateFormat:\\\"yyyy/mm/dd\\\",firstDay:2,isRTL:!1}},leapYear:function(t){return this._validate(t,this.minMonth,this.minDay,n.local.invalidYear),!1},monthsInYear:function(t){return this._validate(t,this.minMonth,this.minDay,n.local.invalidYear),13},daysInYear:function(t){return this._validate(t,this.minMonth,this.minDay,n.local.invalidYear),400},weekOfYear:function(t,e,r){var n=this.newDate(t,e,r);return n.add(-n.dayOfWeek(),\\\"d\\\"),Math.floor((n.dayOfYear()-1)/8)+1},daysInMonth:function(t,e){var r=this._validate(t,e,this.minDay,n.local.invalidMonth);return this.daysPerMonth[r.month()-1]},daysInWeek:function(){return 8},dayOfWeek:function(t,e,r){return(this._validate(t,e,r,n.local.invalidDate).day()+1)%8},weekDay:function(t,e,r){var n=this.dayOfWeek(t,e,r);return n>=2&&n<=6},extraInfo:function(t,e,r){var i=this._validate(t,e,r,n.local.invalidDate);return{century:o[Math.floor((i.year()-1)/100)+1]||\\\"\\\"}},toJD:function(t,e,r){var i=this._validate(t,e,r,n.local.invalidDate);return t=i.year()+(i.year()<0?1:0),e=i.month(),(r=i.day())+(e>1?16:0)+(e>2?32*(e-2):0)+400*(t-1)+this.jdEpoch-1},fromJD:function(t){t=Math.floor(t+.5)-Math.floor(this.jdEpoch)-1;var e=Math.floor(t/400)+1;t-=400*(e-1),t+=t>15?16:0;var r=Math.floor(t/32)+1,n=t-32*(r-1)+1;return this.newDate(e<=0?e-1:e,r,n)}});var o={20:\\\"Fruitbat\\\",21:\\\"Anchovy\\\"};n.calendars.discworld=a},37715:function(t,e,r){var n=r(63489),i=r(56131);function a(t){this.local=this.regionalOptions[t||\\\"\\\"]||this.regionalOptions[\\\"\\\"]}a.prototype=new n.baseCalendar,i(a.prototype,{name:\\\"Ethiopian\\\",jdEpoch:1724220.5,daysPerMonth:[30,30,30,30,30,30,30,30,30,30,30,30,5],hasYearZero:!1,minMonth:1,firstMonth:1,minDay:1,regionalOptions:{\\\"\\\":{name:\\\"Ethiopian\\\",epochs:[\\\"BEE\\\",\\\"EE\\\"],monthNames:[\\\"Meskerem\\\",\\\"Tikemet\\\",\\\"Hidar\\\",\\\"Tahesas\\\",\\\"Tir\\\",\\\"Yekatit\\\",\\\"Megabit\\\",\\\"Miazia\\\",\\\"Genbot\\\",\\\"Sene\\\",\\\"Hamle\\\",\\\"Nehase\\\",\\\"Pagume\\\"],monthNamesShort:[\\\"Mes\\\",\\\"Tik\\\",\\\"Hid\\\",\\\"Tah\\\",\\\"Tir\\\",\\\"Yek\\\",\\\"Meg\\\",\\\"Mia\\\",\\\"Gen\\\",\\\"Sen\\\",\\\"Ham\\\",\\\"Neh\\\",\\\"Pag\\\"],dayNames:[\\\"Ehud\\\",\\\"Segno\\\",\\\"Maksegno\\\",\\\"Irob\\\",\\\"Hamus\\\",\\\"Arb\\\",\\\"Kidame\\\"],dayNamesShort:[\\\"Ehu\\\",\\\"Seg\\\",\\\"Mak\\\",\\\"Iro\\\",\\\"Ham\\\",\\\"Arb\\\",\\\"Kid\\\"],dayNamesMin:[\\\"Eh\\\",\\\"Se\\\",\\\"Ma\\\",\\\"Ir\\\",\\\"Ha\\\",\\\"Ar\\\",\\\"Ki\\\"],digits:null,dateFormat:\\\"dd/mm/yyyy\\\",firstDay:0,isRTL:!1}},leapYear:function(t){var e=this._validate(t,this.minMonth,this.minDay,n.local.invalidYear);return(t=e.year()+(e.year()<0?1:0))%4==3||t%4==-1},monthsInYear:function(t){return this._validate(t,this.minMonth,this.minDay,n.local.invalidYear||n.regionalOptions[\\\"\\\"].invalidYear),13},weekOfYear:function(t,e,r){var n=this.newDate(t,e,r);return n.add(-n.dayOfWeek(),\\\"d\\\"),Math.floor((n.dayOfYear()-1)/7)+1},daysInMonth:function(t,e){var r=this._validate(t,e,this.minDay,n.local.invalidMonth);return this.daysPerMonth[r.month()-1]+(13===r.month()&&this.leapYear(r.year())?1:0)},weekDay:function(t,e,r){return(this.dayOfWeek(t,e,r)||7)<6},toJD:function(t,e,r){var i=this._validate(t,e,r,n.local.invalidDate);return(t=i.year())<0&&t++,i.day()+30*(i.month()-1)+365*(t-1)+Math.floor(t/4)+this.jdEpoch-1},fromJD:function(t){var e=Math.floor(t)+.5-this.jdEpoch,r=Math.floor((e-Math.floor((e+366)/1461))/365)+1;r<=0&&r--,e=Math.floor(t)+.5-this.newDate(r,1,1).toJD();var n=Math.floor(e/30)+1,i=e-30*(n-1)+1;return this.newDate(r,n,i)}}),n.calendars.ethiopian=a},99384:function(t,e,r){var n=r(63489),i=r(56131);function a(t){this.local=this.regionalOptions[t||\\\"\\\"]||this.regionalOptions[\\\"\\\"]}function o(t,e){return t-e*Math.floor(t/e)}a.prototype=new n.baseCalendar,i(a.prototype,{name:\\\"Hebrew\\\",jdEpoch:347995.5,daysPerMonth:[30,29,30,29,30,29,30,29,30,29,30,29,29],hasYearZero:!1,minMonth:1,firstMonth:7,minDay:1,regionalOptions:{\\\"\\\":{name:\\\"Hebrew\\\",epochs:[\\\"BAM\\\",\\\"AM\\\"],monthNames:[\\\"Nisan\\\",\\\"Iyar\\\",\\\"Sivan\\\",\\\"Tammuz\\\",\\\"Av\\\",\\\"Elul\\\",\\\"Tishrei\\\",\\\"Cheshvan\\\",\\\"Kislev\\\",\\\"Tevet\\\",\\\"Shevat\\\",\\\"Adar\\\",\\\"Adar II\\\"],monthNamesShort:[\\\"Nis\\\",\\\"Iya\\\",\\\"Siv\\\",\\\"Tam\\\",\\\"Av\\\",\\\"Elu\\\",\\\"Tis\\\",\\\"Che\\\",\\\"Kis\\\",\\\"Tev\\\",\\\"She\\\",\\\"Ada\\\",\\\"Ad2\\\"],dayNames:[\\\"Yom Rishon\\\",\\\"Yom Sheni\\\",\\\"Yom Shlishi\\\",\\\"Yom Revi'i\\\",\\\"Yom Chamishi\\\",\\\"Yom Shishi\\\",\\\"Yom Shabbat\\\"],dayNamesShort:[\\\"Ris\\\",\\\"She\\\",\\\"Shl\\\",\\\"Rev\\\",\\\"Cha\\\",\\\"Shi\\\",\\\"Sha\\\"],dayNamesMin:[\\\"Ri\\\",\\\"She\\\",\\\"Shl\\\",\\\"Re\\\",\\\"Ch\\\",\\\"Shi\\\",\\\"Sha\\\"],digits:null,dateFormat:\\\"dd/mm/yyyy\\\",firstDay:0,isRTL:!1}},leapYear:function(t){var e=this._validate(t,this.minMonth,this.minDay,n.local.invalidYear);return this._leapYear(e.year())},_leapYear:function(t){return o(7*(t=t<0?t+1:t)+1,19)<7},monthsInYear:function(t){return this._validate(t,this.minMonth,this.minDay,n.local.invalidYear),this._leapYear(t.year?t.year():t)?13:12},weekOfYear:function(t,e,r){var n=this.newDate(t,e,r);return n.add(-n.dayOfWeek(),\\\"d\\\"),Math.floor((n.dayOfYear()-1)/7)+1},daysInYear:function(t){return t=this._validate(t,this.minMonth,this.minDay,n.local.invalidYear).year(),this.toJD(-1===t?1:t+1,7,1)-this.toJD(t,7,1)},daysInMonth:function(t,e){return t.year&&(e=t.month(),t=t.year()),this._validate(t,e,this.minDay,n.local.invalidMonth),12===e&&this.leapYear(t)||8===e&&5===o(this.daysInYear(t),10)?30:9===e&&3===o(this.daysInYear(t),10)?29:this.daysPerMonth[e-1]},weekDay:function(t,e,r){return 6!==this.dayOfWeek(t,e,r)},extraInfo:function(t,e,r){var i=this._validate(t,e,r,n.local.invalidDate);return{yearType:(this.leapYear(i)?\\\"embolismic\\\":\\\"common\\\")+\\\" \\\"+[\\\"deficient\\\",\\\"regular\\\",\\\"complete\\\"][this.daysInYear(i)%10-3]}},toJD:function(t,e,r){var i=this._validate(t,e,r,n.local.invalidDate);t=i.year(),e=i.month(),r=i.day();var a=t<=0?t+1:t,o=this.jdEpoch+this._delay1(a)+this._delay2(a)+r+1;if(e<7){for(var s=7;s<=this.monthsInYear(t);s++)o+=this.daysInMonth(t,s);for(s=1;s<e;s++)o+=this.daysInMonth(t,s)}else for(s=7;s<e;s++)o+=this.daysInMonth(t,s);return o},_delay1:function(t){var e=Math.floor((235*t-234)/19),r=12084+13753*e,n=29*e+Math.floor(r/25920);return o(3*(n+1),7)<3&&n++,n},_delay2:function(t){var e=this._delay1(t-1),r=this._delay1(t);return this._delay1(t+1)-r==356?2:r-e==382?1:0},fromJD:function(t){t=Math.floor(t)+.5;for(var e=Math.floor(98496*(t-this.jdEpoch)/35975351)-1;t>=this.toJD(-1===e?1:e+1,7,1);)e++;for(var r=t<this.toJD(e,1,1)?7:1;t>this.toJD(e,r,this.daysInMonth(e,r));)r++;var n=t-this.toJD(e,r,1)+1;return this.newDate(e,r,n)}}),n.calendars.hebrew=a},43805:function(t,e,r){var n=r(63489),i=r(56131);function a(t){this.local=this.regionalOptions[t||\\\"\\\"]||this.regionalOptions[\\\"\\\"]}a.prototype=new n.baseCalendar,i(a.prototype,{name:\\\"Islamic\\\",jdEpoch:1948439.5,daysPerMonth:[30,29,30,29,30,29,30,29,30,29,30,29],hasYearZero:!1,minMonth:1,firstMonth:1,minDay:1,regionalOptions:{\\\"\\\":{name:\\\"Islamic\\\",epochs:[\\\"BH\\\",\\\"AH\\\"],monthNames:[\\\"Muharram\\\",\\\"Safar\\\",\\\"Rabi' al-awwal\\\",\\\"Rabi' al-thani\\\",\\\"Jumada al-awwal\\\",\\\"Jumada al-thani\\\",\\\"Rajab\\\",\\\"Sha'aban\\\",\\\"Ramadan\\\",\\\"Shawwal\\\",\\\"Dhu al-Qi'dah\\\",\\\"Dhu al-Hijjah\\\"],monthNamesShort:[\\\"Muh\\\",\\\"Saf\\\",\\\"Rab1\\\",\\\"Rab2\\\",\\\"Jum1\\\",\\\"Jum2\\\",\\\"Raj\\\",\\\"Sha'\\\",\\\"Ram\\\",\\\"Shaw\\\",\\\"DhuQ\\\",\\\"DhuH\\\"],dayNames:[\\\"Yawm al-ahad\\\",\\\"Yawm al-ithnayn\\\",\\\"Yawm ath-thulaathaa'\\\",\\\"Yawm al-arbi'aa'\\\",\\\"Yawm al-khamīs\\\",\\\"Yawm al-jum'a\\\",\\\"Yawm as-sabt\\\"],dayNamesShort:[\\\"Aha\\\",\\\"Ith\\\",\\\"Thu\\\",\\\"Arb\\\",\\\"Kha\\\",\\\"Jum\\\",\\\"Sab\\\"],dayNamesMin:[\\\"Ah\\\",\\\"It\\\",\\\"Th\\\",\\\"Ar\\\",\\\"Kh\\\",\\\"Ju\\\",\\\"Sa\\\"],digits:null,dateFormat:\\\"yyyy/mm/dd\\\",firstDay:6,isRTL:!1}},leapYear:function(t){return(11*this._validate(t,this.minMonth,this.minDay,n.local.invalidYear).year()+14)%30<11},weekOfYear:function(t,e,r){var n=this.newDate(t,e,r);return n.add(-n.dayOfWeek(),\\\"d\\\"),Math.floor((n.dayOfYear()-1)/7)+1},daysInYear:function(t){return this.leapYear(t)?355:354},daysInMonth:function(t,e){var r=this._validate(t,e,this.minDay,n.local.invalidMonth);return this.daysPerMonth[r.month()-1]+(12===r.month()&&this.leapYear(r.year())?1:0)},weekDay:function(t,e,r){return 5!==this.dayOfWeek(t,e,r)},toJD:function(t,e,r){var i=this._validate(t,e,r,n.local.invalidDate);return t=i.year(),e=i.month(),t=t<=0?t+1:t,(r=i.day())+Math.ceil(29.5*(e-1))+354*(t-1)+Math.floor((3+11*t)/30)+this.jdEpoch-1},fromJD:function(t){t=Math.floor(t)+.5;var e=Math.floor((30*(t-this.jdEpoch)+10646)/10631);e=e<=0?e-1:e;var r=Math.min(12,Math.ceil((t-29-this.toJD(e,1,1))/29.5)+1),n=t-this.toJD(e,r,1)+1;return this.newDate(e,r,n)}}),n.calendars.islamic=a},88874:function(t,e,r){var n=r(63489),i=r(56131);function a(t){this.local=this.regionalOptions[t||\\\"\\\"]||this.regionalOptions[\\\"\\\"]}a.prototype=new n.baseCalendar,i(a.prototype,{name:\\\"Julian\\\",jdEpoch:1721423.5,daysPerMonth:[31,28,31,30,31,30,31,31,30,31,30,31],hasYearZero:!1,minMonth:1,firstMonth:1,minDay:1,regionalOptions:{\\\"\\\":{name:\\\"Julian\\\",epochs:[\\\"BC\\\",\\\"AD\\\"],monthNames:[\\\"January\\\",\\\"February\\\",\\\"March\\\",\\\"April\\\",\\\"May\\\",\\\"June\\\",\\\"July\\\",\\\"August\\\",\\\"September\\\",\\\"October\\\",\\\"November\\\",\\\"December\\\"],monthNamesShort:[\\\"Jan\\\",\\\"Feb\\\",\\\"Mar\\\",\\\"Apr\\\",\\\"May\\\",\\\"Jun\\\",\\\"Jul\\\",\\\"Aug\\\",\\\"Sep\\\",\\\"Oct\\\",\\\"Nov\\\",\\\"Dec\\\"],dayNames:[\\\"Sunday\\\",\\\"Monday\\\",\\\"Tuesday\\\",\\\"Wednesday\\\",\\\"Thursday\\\",\\\"Friday\\\",\\\"Saturday\\\"],dayNamesShort:[\\\"Sun\\\",\\\"Mon\\\",\\\"Tue\\\",\\\"Wed\\\",\\\"Thu\\\",\\\"Fri\\\",\\\"Sat\\\"],dayNamesMin:[\\\"Su\\\",\\\"Mo\\\",\\\"Tu\\\",\\\"We\\\",\\\"Th\\\",\\\"Fr\\\",\\\"Sa\\\"],digits:null,dateFormat:\\\"mm/dd/yyyy\\\",firstDay:0,isRTL:!1}},leapYear:function(t){var e=this._validate(t,this.minMonth,this.minDay,n.local.invalidYear);return(t=e.year()<0?e.year()+1:e.year())%4==0},weekOfYear:function(t,e,r){var n=this.newDate(t,e,r);return n.add(4-(n.dayOfWeek()||7),\\\"d\\\"),Math.floor((n.dayOfYear()-1)/7)+1},daysInMonth:function(t,e){var r=this._validate(t,e,this.minDay,n.local.invalidMonth);return this.daysPerMonth[r.month()-1]+(2===r.month()&&this.leapYear(r.year())?1:0)},weekDay:function(t,e,r){return(this.dayOfWeek(t,e,r)||7)<6},toJD:function(t,e,r){var i=this._validate(t,e,r,n.local.invalidDate);return t=i.year(),e=i.month(),r=i.day(),t<0&&t++,e<=2&&(t--,e+=12),Math.floor(365.25*(t+4716))+Math.floor(30.6001*(e+1))+r-1524.5},fromJD:function(t){var e=Math.floor(t+.5)+1524,r=Math.floor((e-122.1)/365.25),n=Math.floor(365.25*r),i=Math.floor((e-n)/30.6001),a=i-Math.floor(i<14?1:13),o=r-Math.floor(a>2?4716:4715),s=e-n-Math.floor(30.6001*i);return o<=0&&o--,this.newDate(o,a,s)}}),n.calendars.julian=a},83290:function(t,e,r){var n=r(63489),i=r(56131);function a(t){this.local=this.regionalOptions[t||\\\"\\\"]||this.regionalOptions[\\\"\\\"]}function o(t,e){return t-e*Math.floor(t/e)}function s(t,e){return o(t-1,e)+1}a.prototype=new n.baseCalendar,i(a.prototype,{name:\\\"Mayan\\\",jdEpoch:584282.5,hasYearZero:!0,minMonth:0,firstMonth:0,minDay:0,regionalOptions:{\\\"\\\":{name:\\\"Mayan\\\",epochs:[\\\"\\\",\\\"\\\"],monthNames:[\\\"0\\\",\\\"1\\\",\\\"2\\\",\\\"3\\\",\\\"4\\\",\\\"5\\\",\\\"6\\\",\\\"7\\\",\\\"8\\\",\\\"9\\\",\\\"10\\\",\\\"11\\\",\\\"12\\\",\\\"13\\\",\\\"14\\\",\\\"15\\\",\\\"16\\\",\\\"17\\\"],monthNamesShort:[\\\"0\\\",\\\"1\\\",\\\"2\\\",\\\"3\\\",\\\"4\\\",\\\"5\\\",\\\"6\\\",\\\"7\\\",\\\"8\\\",\\\"9\\\",\\\"10\\\",\\\"11\\\",\\\"12\\\",\\\"13\\\",\\\"14\\\",\\\"15\\\",\\\"16\\\",\\\"17\\\"],dayNames:[\\\"0\\\",\\\"1\\\",\\\"2\\\",\\\"3\\\",\\\"4\\\",\\\"5\\\",\\\"6\\\",\\\"7\\\",\\\"8\\\",\\\"9\\\",\\\"10\\\",\\\"11\\\",\\\"12\\\",\\\"13\\\",\\\"14\\\",\\\"15\\\",\\\"16\\\",\\\"17\\\",\\\"18\\\",\\\"19\\\"],dayNamesShort:[\\\"0\\\",\\\"1\\\",\\\"2\\\",\\\"3\\\",\\\"4\\\",\\\"5\\\",\\\"6\\\",\\\"7\\\",\\\"8\\\",\\\"9\\\",\\\"10\\\",\\\"11\\\",\\\"12\\\",\\\"13\\\",\\\"14\\\",\\\"15\\\",\\\"16\\\",\\\"17\\\",\\\"18\\\",\\\"19\\\"],dayNamesMin:[\\\"0\\\",\\\"1\\\",\\\"2\\\",\\\"3\\\",\\\"4\\\",\\\"5\\\",\\\"6\\\",\\\"7\\\",\\\"8\\\",\\\"9\\\",\\\"10\\\",\\\"11\\\",\\\"12\\\",\\\"13\\\",\\\"14\\\",\\\"15\\\",\\\"16\\\",\\\"17\\\",\\\"18\\\",\\\"19\\\"],digits:null,dateFormat:\\\"YYYY.m.d\\\",firstDay:0,isRTL:!1,haabMonths:[\\\"Pop\\\",\\\"Uo\\\",\\\"Zip\\\",\\\"Zotz\\\",\\\"Tzec\\\",\\\"Xul\\\",\\\"Yaxkin\\\",\\\"Mol\\\",\\\"Chen\\\",\\\"Yax\\\",\\\"Zac\\\",\\\"Ceh\\\",\\\"Mac\\\",\\\"Kankin\\\",\\\"Muan\\\",\\\"Pax\\\",\\\"Kayab\\\",\\\"Cumku\\\",\\\"Uayeb\\\"],tzolkinMonths:[\\\"Imix\\\",\\\"Ik\\\",\\\"Akbal\\\",\\\"Kan\\\",\\\"Chicchan\\\",\\\"Cimi\\\",\\\"Manik\\\",\\\"Lamat\\\",\\\"Muluc\\\",\\\"Oc\\\",\\\"Chuen\\\",\\\"Eb\\\",\\\"Ben\\\",\\\"Ix\\\",\\\"Men\\\",\\\"Cib\\\",\\\"Caban\\\",\\\"Etznab\\\",\\\"Cauac\\\",\\\"Ahau\\\"]}},leapYear:function(t){return this._validate(t,this.minMonth,this.minDay,n.local.invalidYear),!1},formatYear:function(t){t=this._validate(t,this.minMonth,this.minDay,n.local.invalidYear).year();var e=Math.floor(t/400);return t%=400,t+=t<0?400:0,e+\\\".\\\"+Math.floor(t/20)+\\\".\\\"+t%20},forYear:function(t){if((t=t.split(\\\".\\\")).length<3)throw\\\"Invalid Mayan year\\\";for(var e=0,r=0;r<t.length;r++){var n=parseInt(t[r],10);if(Math.abs(n)>19||r>0&&n<0)throw\\\"Invalid Mayan year\\\";e=20*e+n}return e},monthsInYear:function(t){return this._validate(t,this.minMonth,this.minDay,n.local.invalidYear),18},weekOfYear:function(t,e,r){return this._validate(t,e,r,n.local.invalidDate),0},daysInYear:function(t){return this._validate(t,this.minMonth,this.minDay,n.local.invalidYear),360},daysInMonth:function(t,e){return this._validate(t,e,this.minDay,n.local.invalidMonth),20},daysInWeek:function(){return 5},dayOfWeek:function(t,e,r){return this._validate(t,e,r,n.local.invalidDate).day()},weekDay:function(t,e,r){return this._validate(t,e,r,n.local.invalidDate),!0},extraInfo:function(t,e,r){var i=this._validate(t,e,r,n.local.invalidDate).toJD(),a=this._toHaab(i),o=this._toTzolkin(i);return{haabMonthName:this.local.haabMonths[a[0]-1],haabMonth:a[0],haabDay:a[1],tzolkinDayName:this.local.tzolkinMonths[o[0]-1],tzolkinDay:o[0],tzolkinTrecena:o[1]}},_toHaab:function(t){var e=o(8+(t-=this.jdEpoch)+340,365);return[Math.floor(e/20)+1,o(e,20)]},_toTzolkin:function(t){return[s(20+(t-=this.jdEpoch),20),s(t+4,13)]},toJD:function(t,e,r){var i=this._validate(t,e,r,n.local.invalidDate);return i.day()+20*i.month()+360*i.year()+this.jdEpoch},fromJD:function(t){t=Math.floor(t)+.5-this.jdEpoch;var e=Math.floor(t/360);t%=360,t+=t<0?360:0;var r=Math.floor(t/20),n=t%20;return this.newDate(e,r,n)}}),n.calendars.mayan=a},29108:function(t,e,r){var n=r(63489),i=r(56131);function a(t){this.local=this.regionalOptions[t||\\\"\\\"]||this.regionalOptions[\\\"\\\"]}a.prototype=new n.baseCalendar;var o=n.instance(\\\"gregorian\\\");i(a.prototype,{name:\\\"Nanakshahi\\\",jdEpoch:2257673.5,daysPerMonth:[31,31,31,31,31,30,30,30,30,30,30,30],hasYearZero:!1,minMonth:1,firstMonth:1,minDay:1,regionalOptions:{\\\"\\\":{name:\\\"Nanakshahi\\\",epochs:[\\\"BN\\\",\\\"AN\\\"],monthNames:[\\\"Chet\\\",\\\"Vaisakh\\\",\\\"Jeth\\\",\\\"Harh\\\",\\\"Sawan\\\",\\\"Bhadon\\\",\\\"Assu\\\",\\\"Katak\\\",\\\"Maghar\\\",\\\"Poh\\\",\\\"Magh\\\",\\\"Phagun\\\"],monthNamesShort:[\\\"Che\\\",\\\"Vai\\\",\\\"Jet\\\",\\\"Har\\\",\\\"Saw\\\",\\\"Bha\\\",\\\"Ass\\\",\\\"Kat\\\",\\\"Mgr\\\",\\\"Poh\\\",\\\"Mgh\\\",\\\"Pha\\\"],dayNames:[\\\"Somvaar\\\",\\\"Mangalvar\\\",\\\"Budhvaar\\\",\\\"Veervaar\\\",\\\"Shukarvaar\\\",\\\"Sanicharvaar\\\",\\\"Etvaar\\\"],dayNamesShort:[\\\"Som\\\",\\\"Mangal\\\",\\\"Budh\\\",\\\"Veer\\\",\\\"Shukar\\\",\\\"Sanichar\\\",\\\"Et\\\"],dayNamesMin:[\\\"So\\\",\\\"Ma\\\",\\\"Bu\\\",\\\"Ve\\\",\\\"Sh\\\",\\\"Sa\\\",\\\"Et\\\"],digits:null,dateFormat:\\\"dd-mm-yyyy\\\",firstDay:0,isRTL:!1}},leapYear:function(t){var e=this._validate(t,this.minMonth,this.minDay,n.local.invalidYear||n.regionalOptions[\\\"\\\"].invalidYear);return o.leapYear(e.year()+(e.year()<1?1:0)+1469)},weekOfYear:function(t,e,r){var n=this.newDate(t,e,r);return n.add(1-(n.dayOfWeek()||7),\\\"d\\\"),Math.floor((n.dayOfYear()-1)/7)+1},daysInMonth:function(t,e){var r=this._validate(t,e,this.minDay,n.local.invalidMonth);return this.daysPerMonth[r.month()-1]+(12===r.month()&&this.leapYear(r.year())?1:0)},weekDay:function(t,e,r){return(this.dayOfWeek(t,e,r)||7)<6},toJD:function(t,e,r){var i=this._validate(t,e,r,n.local.invalidMonth);(t=i.year())<0&&t++;for(var a=i.day(),s=1;s<i.month();s++)a+=this.daysPerMonth[s-1];return a+o.toJD(t+1468,3,13)},fromJD:function(t){t=Math.floor(t+.5);for(var e=Math.floor((t-(this.jdEpoch-1))/366);t>=this.toJD(e+1,1,1);)e++;for(var r=t-Math.floor(this.toJD(e,1,1)+.5)+1,n=1;r>this.daysInMonth(e,n);)r-=this.daysInMonth(e,n),n++;return this.newDate(e,n,r)}}),n.calendars.nanakshahi=a},55422:function(t,e,r){var n=r(63489),i=r(56131);function a(t){this.local=this.regionalOptions[t||\\\"\\\"]||this.regionalOptions[\\\"\\\"]}a.prototype=new n.baseCalendar,i(a.prototype,{name:\\\"Nepali\\\",jdEpoch:1700709.5,daysPerMonth:[31,31,32,32,31,30,30,29,30,29,30,30],hasYearZero:!1,minMonth:1,firstMonth:1,minDay:1,daysPerYear:365,regionalOptions:{\\\"\\\":{name:\\\"Nepali\\\",epochs:[\\\"BBS\\\",\\\"ABS\\\"],monthNames:[\\\"Baisakh\\\",\\\"Jestha\\\",\\\"Ashadh\\\",\\\"Shrawan\\\",\\\"Bhadra\\\",\\\"Ashwin\\\",\\\"Kartik\\\",\\\"Mangsir\\\",\\\"Paush\\\",\\\"Mangh\\\",\\\"Falgun\\\",\\\"Chaitra\\\"],monthNamesShort:[\\\"Bai\\\",\\\"Je\\\",\\\"As\\\",\\\"Shra\\\",\\\"Bha\\\",\\\"Ash\\\",\\\"Kar\\\",\\\"Mang\\\",\\\"Pau\\\",\\\"Ma\\\",\\\"Fal\\\",\\\"Chai\\\"],dayNames:[\\\"Aaitabaar\\\",\\\"Sombaar\\\",\\\"Manglbaar\\\",\\\"Budhabaar\\\",\\\"Bihibaar\\\",\\\"Shukrabaar\\\",\\\"Shanibaar\\\"],dayNamesShort:[\\\"Aaita\\\",\\\"Som\\\",\\\"Mangl\\\",\\\"Budha\\\",\\\"Bihi\\\",\\\"Shukra\\\",\\\"Shani\\\"],dayNamesMin:[\\\"Aai\\\",\\\"So\\\",\\\"Man\\\",\\\"Bu\\\",\\\"Bi\\\",\\\"Shu\\\",\\\"Sha\\\"],digits:null,dateFormat:\\\"dd/mm/yyyy\\\",firstDay:1,isRTL:!1}},leapYear:function(t){return this.daysInYear(t)!==this.daysPerYear},weekOfYear:function(t,e,r){var n=this.newDate(t,e,r);return n.add(-n.dayOfWeek(),\\\"d\\\"),Math.floor((n.dayOfYear()-1)/7)+1},daysInYear:function(t){if(t=this._validate(t,this.minMonth,this.minDay,n.local.invalidYear).year(),void 0===this.NEPALI_CALENDAR_DATA[t])return this.daysPerYear;for(var e=0,r=this.minMonth;r<=12;r++)e+=this.NEPALI_CALENDAR_DATA[t][r];return e},daysInMonth:function(t,e){return t.year&&(e=t.month(),t=t.year()),this._validate(t,e,this.minDay,n.local.invalidMonth),void 0===this.NEPALI_CALENDAR_DATA[t]?this.daysPerMonth[e-1]:this.NEPALI_CALENDAR_DATA[t][e]},weekDay:function(t,e,r){return 6!==this.dayOfWeek(t,e,r)},toJD:function(t,e,r){var i=this._validate(t,e,r,n.local.invalidDate);t=i.year(),e=i.month(),r=i.day();var a=n.instance(),o=0,s=e,l=t;this._createMissingCalendarData(t);var u=t-(s>9||9===s&&r>=this.NEPALI_CALENDAR_DATA[l][0]?56:57);for(9!==e&&(o=r,s--);9!==s;)s<=0&&(s=12,l--),o+=this.NEPALI_CALENDAR_DATA[l][s],s--;return 9===e?(o+=r-this.NEPALI_CALENDAR_DATA[l][0])<0&&(o+=a.daysInYear(u)):o+=this.NEPALI_CALENDAR_DATA[l][9]-this.NEPALI_CALENDAR_DATA[l][0],a.newDate(u,1,1).add(o,\\\"d\\\").toJD()},fromJD:function(t){var e=n.instance().fromJD(t),r=e.year(),i=e.dayOfYear(),a=r+56;this._createMissingCalendarData(a);for(var o=9,s=this.NEPALI_CALENDAR_DATA[a][0],l=this.NEPALI_CALENDAR_DATA[a][o]-s+1;i>l;)++o>12&&(o=1,a++),l+=this.NEPALI_CALENDAR_DATA[a][o];var u=this.NEPALI_CALENDAR_DATA[a][o]-(l-i);return this.newDate(a,o,u)},_createMissingCalendarData:function(t){var e=this.daysPerMonth.slice(0);e.unshift(17);for(var r=t-1;r<t+2;r++)void 0===this.NEPALI_CALENDAR_DATA[r]&&(this.NEPALI_CALENDAR_DATA[r]=e)},NEPALI_CALENDAR_DATA:{1970:[18,31,31,32,31,31,31,30,29,30,29,30,30],1971:[18,31,31,32,31,32,30,30,29,30,29,30,30],1972:[17,31,32,31,32,31,30,30,30,29,29,30,30],1973:[19,30,32,31,32,31,30,30,30,29,30,29,31],1974:[19,31,31,32,30,31,31,30,29,30,29,30,30],1975:[18,31,31,32,32,30,31,30,29,30,29,30,30],1976:[17,31,32,31,32,31,30,30,30,29,29,30,31],1977:[18,31,32,31,32,31,31,29,30,29,30,29,31],1978:[18,31,31,32,31,31,31,30,29,30,29,30,30],1979:[18,31,31,32,32,31,30,30,29,30,29,30,30],1980:[17,31,32,31,32,31,30,30,30,29,29,30,31],1981:[18,31,31,31,32,31,31,29,30,30,29,30,30],1982:[18,31,31,32,31,31,31,30,29,30,29,30,30],1983:[18,31,31,32,32,31,30,30,29,30,29,30,30],1984:[17,31,32,31,32,31,30,30,30,29,29,30,31],1985:[18,31,31,31,32,31,31,29,30,30,29,30,30],1986:[18,31,31,32,31,31,31,30,29,30,29,30,30],1987:[18,31,32,31,32,31,30,30,29,30,29,30,30],1988:[17,31,32,31,32,31,30,30,30,29,29,30,31],1989:[18,31,31,31,32,31,31,30,29,30,29,30,30],1990:[18,31,31,32,31,31,31,30,29,30,29,30,30],1991:[18,31,32,31,32,31,30,30,29,30,29,30,30],1992:[17,31,32,31,32,31,30,30,30,29,30,29,31],1993:[18,31,31,31,32,31,31,30,29,30,29,30,30],1994:[18,31,31,32,31,31,31,30,29,30,29,30,30],1995:[17,31,32,31,32,31,30,30,30,29,29,30,30],1996:[17,31,32,31,32,31,30,30,30,29,30,29,31],1997:[18,31,31,32,31,31,31,30,29,30,29,30,30],1998:[18,31,31,32,31,31,31,30,29,30,29,30,30],1999:[17,31,32,31,32,31,30,30,30,29,29,30,31],2e3:[17,30,32,31,32,31,30,30,30,29,30,29,31],2001:[18,31,31,32,31,31,31,30,29,30,29,30,30],2002:[18,31,31,32,32,31,30,30,29,30,29,30,30],2003:[17,31,32,31,32,31,30,30,30,29,29,30,31],2004:[17,30,32,31,32,31,30,30,30,29,30,29,31],2005:[18,31,31,32,31,31,31,30,29,30,29,30,30],2006:[18,31,31,32,32,31,30,30,29,30,29,30,30],2007:[17,31,32,31,32,31,30,30,30,29,29,30,31],2008:[17,31,31,31,32,31,31,29,30,30,29,29,31],2009:[18,31,31,32,31,31,31,30,29,30,29,30,30],2010:[18,31,31,32,32,31,30,30,29,30,29,30,30],2011:[17,31,32,31,32,31,30,30,30,29,29,30,31],2012:[17,31,31,31,32,31,31,29,30,30,29,30,30],2013:[18,31,31,32,31,31,31,30,29,30,29,30,30],2014:[18,31,31,32,32,31,30,30,29,30,29,30,30],2015:[17,31,32,31,32,31,30,30,30,29,29,30,31],2016:[17,31,31,31,32,31,31,29,30,30,29,30,30],2017:[18,31,31,32,31,31,31,30,29,30,29,30,30],2018:[18,31,32,31,32,31,30,30,29,30,29,30,30],2019:[17,31,32,31,32,31,30,30,30,29,30,29,31],2020:[17,31,31,31,32,31,31,30,29,30,29,30,30],2021:[18,31,31,32,31,31,31,30,29,30,29,30,30],2022:[17,31,32,31,32,31,30,30,30,29,29,30,30],2023:[17,31,32,31,32,31,30,30,30,29,30,29,31],2024:[17,31,31,31,32,31,31,30,29,30,29,30,30],2025:[18,31,31,32,31,31,31,30,29,30,29,30,30],2026:[17,31,32,31,32,31,30,30,30,29,29,30,31],2027:[17,30,32,31,32,31,30,30,30,29,30,29,31],2028:[17,31,31,32,31,31,31,30,29,30,29,30,30],2029:[18,31,31,32,31,32,30,30,29,30,29,30,30],2030:[17,31,32,31,32,31,30,30,30,30,30,30,31],2031:[17,31,32,31,32,31,31,31,31,31,31,31,31],2032:[17,32,32,32,32,32,32,32,32,32,32,32,32],2033:[18,31,31,32,32,31,30,30,29,30,29,30,30],2034:[17,31,32,31,32,31,30,30,30,29,29,30,31],2035:[17,30,32,31,32,31,31,29,30,30,29,29,31],2036:[17,31,31,32,31,31,31,30,29,30,29,30,30],2037:[18,31,31,32,32,31,30,30,29,30,29,30,30],2038:[17,31,32,31,32,31,30,30,30,29,29,30,31],2039:[17,31,31,31,32,31,31,29,30,30,29,30,30],2040:[17,31,31,32,31,31,31,30,29,30,29,30,30],2041:[18,31,31,32,32,31,30,30,29,30,29,30,30],2042:[17,31,32,31,32,31,30,30,30,29,29,30,31],2043:[17,31,31,31,32,31,31,29,30,30,29,30,30],2044:[17,31,31,32,31,31,31,30,29,30,29,30,30],2045:[18,31,32,31,32,31,30,30,29,30,29,30,30],2046:[17,31,32,31,32,31,30,30,30,29,29,30,31],2047:[17,31,31,31,32,31,31,30,29,30,29,30,30],2048:[17,31,31,32,31,31,31,30,29,30,29,30,30],2049:[17,31,32,31,32,31,30,30,30,29,29,30,30],2050:[17,31,32,31,32,31,30,30,30,29,30,29,31],2051:[17,31,31,31,32,31,31,30,29,30,29,30,30],2052:[17,31,31,32,31,31,31,30,29,30,29,30,30],2053:[17,31,32,31,32,31,30,30,30,29,29,30,30],2054:[17,31,32,31,32,31,30,30,30,29,30,29,31],2055:[17,31,31,32,31,31,31,30,29,30,30,29,30],2056:[17,31,31,32,31,32,30,30,29,30,29,30,30],2057:[17,31,32,31,32,31,30,30,30,29,29,30,31],2058:[17,30,32,31,32,31,30,30,30,29,30,29,31],2059:[17,31,31,32,31,31,31,30,29,30,29,30,30],2060:[17,31,31,32,32,31,30,30,29,30,29,30,30],2061:[17,31,32,31,32,31,30,30,30,29,29,30,31],2062:[17,30,32,31,32,31,31,29,30,29,30,29,31],2063:[17,31,31,32,31,31,31,30,29,30,29,30,30],2064:[17,31,31,32,32,31,30,30,29,30,29,30,30],2065:[17,31,32,31,32,31,30,30,30,29,29,30,31],2066:[17,31,31,31,32,31,31,29,30,30,29,29,31],2067:[17,31,31,32,31,31,31,30,29,30,29,30,30],2068:[17,31,31,32,32,31,30,30,29,30,29,30,30],2069:[17,31,32,31,32,31,30,30,30,29,29,30,31],2070:[17,31,31,31,32,31,31,29,30,30,29,30,30],2071:[17,31,31,32,31,31,31,30,29,30,29,30,30],2072:[17,31,32,31,32,31,30,30,29,30,29,30,30],2073:[17,31,32,31,32,31,30,30,30,29,29,30,31],2074:[17,31,31,31,32,31,31,30,29,30,29,30,30],2075:[17,31,31,32,31,31,31,30,29,30,29,30,30],2076:[16,31,32,31,32,31,30,30,30,29,29,30,30],2077:[17,31,32,31,32,31,30,30,30,29,30,29,31],2078:[17,31,31,31,32,31,31,30,29,30,29,30,30],2079:[17,31,31,32,31,31,31,30,29,30,29,30,30],2080:[16,31,32,31,32,31,30,30,30,29,29,30,30],2081:[17,31,31,32,32,31,30,30,30,29,30,30,30],2082:[17,31,32,31,32,31,30,30,30,29,30,30,30],2083:[17,31,31,32,31,31,30,30,30,29,30,30,30],2084:[17,31,31,32,31,31,30,30,30,29,30,30,30],2085:[17,31,32,31,32,31,31,30,30,29,30,30,30],2086:[17,31,32,31,32,31,30,30,30,29,30,30,30],2087:[16,31,31,32,31,31,31,30,30,29,30,30,30],2088:[16,30,31,32,32,30,31,30,30,29,30,30,30],2089:[17,31,32,31,32,31,30,30,30,29,30,30,30],2090:[17,31,32,31,32,31,30,30,30,29,30,30,30],2091:[16,31,31,32,31,31,31,30,30,29,30,30,30],2092:[16,31,31,32,32,31,30,30,30,29,30,30,30],2093:[17,31,32,31,32,31,30,30,30,29,30,30,30],2094:[17,31,31,32,31,31,30,30,30,29,30,30,30],2095:[17,31,31,32,31,31,31,30,29,30,30,30,30],2096:[17,30,31,32,32,31,30,30,29,30,29,30,30],2097:[17,31,32,31,32,31,30,30,30,29,30,30,30],2098:[17,31,31,32,31,31,31,29,30,29,30,30,31],2099:[17,31,31,32,31,31,31,30,29,29,30,30,30],2100:[17,31,32,31,32,30,31,30,29,30,29,30,30]}}),n.calendars.nepali=a},94320:function(t,e,r){var n=r(63489),i=r(56131);function a(t){this.local=this.regionalOptions[t||\\\"\\\"]||this.regionalOptions[\\\"\\\"]}function o(t,e){return t-e*Math.floor(t/e)}a.prototype=new n.baseCalendar,i(a.prototype,{name:\\\"Persian\\\",jdEpoch:1948320.5,daysPerMonth:[31,31,31,31,31,31,30,30,30,30,30,29],hasYearZero:!1,minMonth:1,firstMonth:1,minDay:1,regionalOptions:{\\\"\\\":{name:\\\"Persian\\\",epochs:[\\\"BP\\\",\\\"AP\\\"],monthNames:[\\\"Farvardin\\\",\\\"Ordibehesht\\\",\\\"Khordad\\\",\\\"Tir\\\",\\\"Mordad\\\",\\\"Shahrivar\\\",\\\"Mehr\\\",\\\"Aban\\\",\\\"Azar\\\",\\\"Day\\\",\\\"Bahman\\\",\\\"Esfand\\\"],monthNamesShort:[\\\"Far\\\",\\\"Ord\\\",\\\"Kho\\\",\\\"Tir\\\",\\\"Mor\\\",\\\"Sha\\\",\\\"Meh\\\",\\\"Aba\\\",\\\"Aza\\\",\\\"Day\\\",\\\"Bah\\\",\\\"Esf\\\"],dayNames:[\\\"Yekshambe\\\",\\\"Doshambe\\\",\\\"Seshambe\\\",\\\"Chæharshambe\\\",\\\"Panjshambe\\\",\\\"Jom'e\\\",\\\"Shambe\\\"],dayNamesShort:[\\\"Yek\\\",\\\"Do\\\",\\\"Se\\\",\\\"Chæ\\\",\\\"Panj\\\",\\\"Jom\\\",\\\"Sha\\\"],dayNamesMin:[\\\"Ye\\\",\\\"Do\\\",\\\"Se\\\",\\\"Ch\\\",\\\"Pa\\\",\\\"Jo\\\",\\\"Sh\\\"],digits:null,dateFormat:\\\"yyyy/mm/dd\\\",firstDay:6,isRTL:!1}},leapYear:function(t){var e=this._validate(t,this.minMonth,this.minDay,n.local.invalidYear);return 682*((e.year()-(e.year()>0?474:473))%2820+474+38)%2816<682},weekOfYear:function(t,e,r){var n=this.newDate(t,e,r);return n.add(-(n.dayOfWeek()+1)%7,\\\"d\\\"),Math.floor((n.dayOfYear()-1)/7)+1},daysInMonth:function(t,e){var r=this._validate(t,e,this.minDay,n.local.invalidMonth);return this.daysPerMonth[r.month()-1]+(12===r.month()&&this.leapYear(r.year())?1:0)},weekDay:function(t,e,r){return 5!==this.dayOfWeek(t,e,r)},toJD:function(t,e,r){var i=this._validate(t,e,r,n.local.invalidDate);t=i.year(),e=i.month(),r=i.day();var a=t-(t>=0?474:473),s=474+o(a,2820);return r+(e<=7?31*(e-1):30*(e-1)+6)+Math.floor((682*s-110)/2816)+365*(s-1)+1029983*Math.floor(a/2820)+this.jdEpoch-1},fromJD:function(t){var e=(t=Math.floor(t)+.5)-this.toJD(475,1,1),r=Math.floor(e/1029983),n=o(e,1029983),i=2820;if(1029982!==n){var a=Math.floor(n/366),s=o(n,366);i=Math.floor((2134*a+2816*s+2815)/1028522)+a+1}var l=i+2820*r+474;l=l<=0?l-1:l;var u=t-this.toJD(l,1,1)+1,c=u<=186?Math.ceil(u/31):Math.ceil((u-6)/30),f=t-this.toJD(l,c,1)+1;return this.newDate(l,c,f)}}),n.calendars.persian=a,n.calendars.jalali=a},31320:function(t,e,r){var n=r(63489),i=r(56131),a=n.instance();function o(t){this.local=this.regionalOptions[t||\\\"\\\"]||this.regionalOptions[\\\"\\\"]}o.prototype=new n.baseCalendar,i(o.prototype,{name:\\\"Taiwan\\\",jdEpoch:2419402.5,yearsOffset:1911,daysPerMonth:[31,28,31,30,31,30,31,31,30,31,30,31],hasYearZero:!1,minMonth:1,firstMonth:1,minDay:1,regionalOptions:{\\\"\\\":{name:\\\"Taiwan\\\",epochs:[\\\"BROC\\\",\\\"ROC\\\"],monthNames:[\\\"January\\\",\\\"February\\\",\\\"March\\\",\\\"April\\\",\\\"May\\\",\\\"June\\\",\\\"July\\\",\\\"August\\\",\\\"September\\\",\\\"October\\\",\\\"November\\\",\\\"December\\\"],monthNamesShort:[\\\"Jan\\\",\\\"Feb\\\",\\\"Mar\\\",\\\"Apr\\\",\\\"May\\\",\\\"Jun\\\",\\\"Jul\\\",\\\"Aug\\\",\\\"Sep\\\",\\\"Oct\\\",\\\"Nov\\\",\\\"Dec\\\"],dayNames:[\\\"Sunday\\\",\\\"Monday\\\",\\\"Tuesday\\\",\\\"Wednesday\\\",\\\"Thursday\\\",\\\"Friday\\\",\\\"Saturday\\\"],dayNamesShort:[\\\"Sun\\\",\\\"Mon\\\",\\\"Tue\\\",\\\"Wed\\\",\\\"Thu\\\",\\\"Fri\\\",\\\"Sat\\\"],dayNamesMin:[\\\"Su\\\",\\\"Mo\\\",\\\"Tu\\\",\\\"We\\\",\\\"Th\\\",\\\"Fr\\\",\\\"Sa\\\"],digits:null,dateFormat:\\\"yyyy/mm/dd\\\",firstDay:1,isRTL:!1}},leapYear:function(t){var e=this._validate(t,this.minMonth,this.minDay,n.local.invalidYear);return t=this._t2gYear(e.year()),a.leapYear(t)},weekOfYear:function(t,e,r){var i=this._validate(t,this.minMonth,this.minDay,n.local.invalidYear);return t=this._t2gYear(i.year()),a.weekOfYear(t,i.month(),i.day())},daysInMonth:function(t,e){var r=this._validate(t,e,this.minDay,n.local.invalidMonth);return this.daysPerMonth[r.month()-1]+(2===r.month()&&this.leapYear(r.year())?1:0)},weekDay:function(t,e,r){return(this.dayOfWeek(t,e,r)||7)<6},toJD:function(t,e,r){var i=this._validate(t,e,r,n.local.invalidDate);return t=this._t2gYear(i.year()),a.toJD(t,i.month(),i.day())},fromJD:function(t){var e=a.fromJD(t),r=this._g2tYear(e.year());return this.newDate(r,e.month(),e.day())},_t2gYear:function(t){return t+this.yearsOffset+(t>=-this.yearsOffset&&t<=-1?1:0)},_g2tYear:function(t){return t-this.yearsOffset-(t>=1&&t<=this.yearsOffset?1:0)}}),n.calendars.taiwan=o},51367:function(t,e,r){var n=r(63489),i=r(56131),a=n.instance();function o(t){this.local=this.regionalOptions[t||\\\"\\\"]||this.regionalOptions[\\\"\\\"]}o.prototype=new n.baseCalendar,i(o.prototype,{name:\\\"Thai\\\",jdEpoch:1523098.5,yearsOffset:543,daysPerMonth:[31,28,31,30,31,30,31,31,30,31,30,31],hasYearZero:!1,minMonth:1,firstMonth:1,minDay:1,regionalOptions:{\\\"\\\":{name:\\\"Thai\\\",epochs:[\\\"BBE\\\",\\\"BE\\\"],monthNames:[\\\"January\\\",\\\"February\\\",\\\"March\\\",\\\"April\\\",\\\"May\\\",\\\"June\\\",\\\"July\\\",\\\"August\\\",\\\"September\\\",\\\"October\\\",\\\"November\\\",\\\"December\\\"],monthNamesShort:[\\\"Jan\\\",\\\"Feb\\\",\\\"Mar\\\",\\\"Apr\\\",\\\"May\\\",\\\"Jun\\\",\\\"Jul\\\",\\\"Aug\\\",\\\"Sep\\\",\\\"Oct\\\",\\\"Nov\\\",\\\"Dec\\\"],dayNames:[\\\"Sunday\\\",\\\"Monday\\\",\\\"Tuesday\\\",\\\"Wednesday\\\",\\\"Thursday\\\",\\\"Friday\\\",\\\"Saturday\\\"],dayNamesShort:[\\\"Sun\\\",\\\"Mon\\\",\\\"Tue\\\",\\\"Wed\\\",\\\"Thu\\\",\\\"Fri\\\",\\\"Sat\\\"],dayNamesMin:[\\\"Su\\\",\\\"Mo\\\",\\\"Tu\\\",\\\"We\\\",\\\"Th\\\",\\\"Fr\\\",\\\"Sa\\\"],digits:null,dateFormat:\\\"dd/mm/yyyy\\\",firstDay:0,isRTL:!1}},leapYear:function(t){var e=this._validate(t,this.minMonth,this.minDay,n.local.invalidYear);return t=this._t2gYear(e.year()),a.leapYear(t)},weekOfYear:function(t,e,r){var i=this._validate(t,this.minMonth,this.minDay,n.local.invalidYear);return t=this._t2gYear(i.year()),a.weekOfYear(t,i.month(),i.day())},daysInMonth:function(t,e){var r=this._validate(t,e,this.minDay,n.local.invalidMonth);return this.daysPerMonth[r.month()-1]+(2===r.month()&&this.leapYear(r.year())?1:0)},weekDay:function(t,e,r){return(this.dayOfWeek(t,e,r)||7)<6},toJD:function(t,e,r){var i=this._validate(t,e,r,n.local.invalidDate);return t=this._t2gYear(i.year()),a.toJD(t,i.month(),i.day())},fromJD:function(t){var e=a.fromJD(t),r=this._g2tYear(e.year());return this.newDate(r,e.month(),e.day())},_t2gYear:function(t){return t-this.yearsOffset-(t>=1&&t<=this.yearsOffset?1:0)},_g2tYear:function(t){return t+this.yearsOffset+(t>=-this.yearsOffset&&t<=-1?1:0)}}),n.calendars.thai=o},21457:function(t,e,r){var n=r(63489),i=r(56131);function a(t){this.local=this.regionalOptions[t||\\\"\\\"]||this.regionalOptions[\\\"\\\"]}a.prototype=new n.baseCalendar,i(a.prototype,{name:\\\"UmmAlQura\\\",hasYearZero:!1,minMonth:1,firstMonth:1,minDay:1,regionalOptions:{\\\"\\\":{name:\\\"Umm al-Qura\\\",epochs:[\\\"BH\\\",\\\"AH\\\"],monthNames:[\\\"Al-Muharram\\\",\\\"Safar\\\",\\\"Rabi' al-awwal\\\",\\\"Rabi' Al-Thani\\\",\\\"Jumada Al-Awwal\\\",\\\"Jumada Al-Thani\\\",\\\"Rajab\\\",\\\"Sha'aban\\\",\\\"Ramadan\\\",\\\"Shawwal\\\",\\\"Dhu al-Qi'dah\\\",\\\"Dhu al-Hijjah\\\"],monthNamesShort:[\\\"Muh\\\",\\\"Saf\\\",\\\"Rab1\\\",\\\"Rab2\\\",\\\"Jum1\\\",\\\"Jum2\\\",\\\"Raj\\\",\\\"Sha'\\\",\\\"Ram\\\",\\\"Shaw\\\",\\\"DhuQ\\\",\\\"DhuH\\\"],dayNames:[\\\"Yawm al-Ahad\\\",\\\"Yawm al-Ithnain\\\",\\\"Yawm al-Thalāthā’\\\",\\\"Yawm al-Arba‘ā’\\\",\\\"Yawm al-Khamīs\\\",\\\"Yawm al-Jum‘a\\\",\\\"Yawm al-Sabt\\\"],dayNamesMin:[\\\"Ah\\\",\\\"Ith\\\",\\\"Th\\\",\\\"Ar\\\",\\\"Kh\\\",\\\"Ju\\\",\\\"Sa\\\"],digits:null,dateFormat:\\\"yyyy/mm/dd\\\",firstDay:6,isRTL:!0}},leapYear:function(t){var e=this._validate(t,this.minMonth,this.minDay,n.local.invalidYear);return 355===this.daysInYear(e.year())},weekOfYear:function(t,e,r){var n=this.newDate(t,e,r);return n.add(-n.dayOfWeek(),\\\"d\\\"),Math.floor((n.dayOfYear()-1)/7)+1},daysInYear:function(t){for(var e=0,r=1;r<=12;r++)e+=this.daysInMonth(t,r);return e},daysInMonth:function(t,e){for(var r=this._validate(t,e,this.minDay,n.local.invalidMonth).toJD()-24e5+.5,i=0,a=0;a<o.length;a++){if(o[a]>r)return o[i]-o[i-1];i++}return 30},weekDay:function(t,e,r){return 5!==this.dayOfWeek(t,e,r)},toJD:function(t,e,r){var i=this._validate(t,e,r,n.local.invalidDate),a=12*(i.year()-1)+i.month()-15292;return i.day()+o[a-1]-1+24e5-.5},fromJD:function(t){for(var e=t-24e5+.5,r=0,n=0;n<o.length&&!(o[n]>e);n++)r++;var i=r+15292,a=Math.floor((i-1)/12),s=a+1,l=i-12*a,u=e-o[r-1]+1;return this.newDate(s,l,u)},isValid:function(t,e,r){var i=n.baseCalendar.prototype.isValid.apply(this,arguments);return i&&(i=(t=null!=t.year?t.year:t)>=1276&&t<=1500),i},_validate:function(t,e,r,i){var a=n.baseCalendar.prototype._validate.apply(this,arguments);if(a.year<1276||a.year>1500)throw i.replace(/\\\\{0\\\\}/,this.local.name);return a}}),n.calendars.ummalqura=a;var o=[20,50,79,109,138,168,197,227,256,286,315,345,374,404,433,463,492,522,551,581,611,641,670,700,729,759,788,818,847,877,906,936,965,995,1024,1054,1083,1113,1142,1172,1201,1231,1260,1290,1320,1350,1379,1409,1438,1468,1497,1527,1556,1586,1615,1645,1674,1704,1733,1763,1792,1822,1851,1881,1910,1940,1969,1999,2028,2058,2087,2117,2146,2176,2205,2235,2264,2294,2323,2353,2383,2413,2442,2472,2501,2531,2560,2590,2619,2649,2678,2708,2737,2767,2796,2826,2855,2885,2914,2944,2973,3003,3032,3062,3091,3121,3150,3180,3209,3239,3268,3298,3327,3357,3386,3416,3446,3476,3505,3535,3564,3594,3623,3653,3682,3712,3741,3771,3800,3830,3859,3889,3918,3948,3977,4007,4036,4066,4095,4125,4155,4185,4214,4244,4273,4303,4332,4362,4391,4421,4450,4480,4509,4539,4568,4598,4627,4657,4686,4716,4745,4775,4804,4834,4863,4893,4922,4952,4981,5011,5040,5070,5099,5129,5158,5188,5218,5248,5277,5307,5336,5366,5395,5425,5454,5484,5513,5543,5572,5602,5631,5661,5690,5720,5749,5779,5808,5838,5867,5897,5926,5956,5985,6015,6044,6074,6103,6133,6162,6192,6221,6251,6281,6311,6340,6370,6399,6429,6458,6488,6517,6547,6576,6606,6635,6665,6694,6724,6753,6783,6812,6842,6871,6901,6930,6960,6989,7019,7048,7078,7107,7137,7166,7196,7225,7255,7284,7314,7344,7374,7403,7433,7462,7492,7521,7551,7580,7610,7639,7669,7698,7728,7757,7787,7816,7846,7875,7905,7934,7964,7993,8023,8053,8083,8112,8142,8171,8201,8230,8260,8289,8319,8348,8378,8407,8437,8466,8496,8525,8555,8584,8614,8643,8673,8702,8732,8761,8791,8821,8850,8880,8909,8938,8968,8997,9027,9056,9086,9115,9145,9175,9205,9234,9264,9293,9322,9352,9381,9410,9440,9470,9499,9529,9559,9589,9618,9648,9677,9706,9736,9765,9794,9824,9853,9883,9913,9943,9972,10002,10032,10061,10090,10120,10149,10178,10208,10237,10267,10297,10326,10356,10386,10415,10445,10474,10504,10533,10562,10592,10621,10651,10680,10710,10740,10770,10799,10829,10858,10888,10917,10947,10976,11005,11035,11064,11094,11124,11153,11183,11213,11242,11272,11301,11331,11360,11389,11419,11448,11478,11507,11537,11567,11596,11626,11655,11685,11715,11744,11774,11803,11832,11862,11891,11921,11950,11980,12010,12039,12069,12099,12128,12158,12187,12216,12246,12275,12304,12334,12364,12393,12423,12453,12483,12512,12542,12571,12600,12630,12659,12688,12718,12747,12777,12807,12837,12866,12896,12926,12955,12984,13014,13043,13072,13102,13131,13161,13191,13220,13250,13280,13310,13339,13368,13398,13427,13456,13486,13515,13545,13574,13604,13634,13664,13693,13723,13752,13782,13811,13840,13870,13899,13929,13958,13988,14018,14047,14077,14107,14136,14166,14195,14224,14254,14283,14313,14342,14372,14401,14431,14461,14490,14520,14550,14579,14609,14638,14667,14697,14726,14756,14785,14815,14844,14874,14904,14933,14963,14993,15021,15051,15081,15110,15140,15169,15199,15228,15258,15287,15317,15347,15377,15406,15436,15465,15494,15524,15553,15582,15612,15641,15671,15701,15731,15760,15790,15820,15849,15878,15908,15937,15966,15996,16025,16055,16085,16114,16144,16174,16204,16233,16262,16292,16321,16350,16380,16409,16439,16468,16498,16528,16558,16587,16617,16646,16676,16705,16734,16764,16793,16823,16852,16882,16912,16941,16971,17001,17030,17060,17089,17118,17148,17177,17207,17236,17266,17295,17325,17355,17384,17414,17444,17473,17502,17532,17561,17591,17620,17650,17679,17709,17738,17768,17798,17827,17857,17886,17916,17945,17975,18004,18034,18063,18093,18122,18152,18181,18211,18241,18270,18300,18330,18359,18388,18418,18447,18476,18506,18535,18565,18595,18625,18654,18684,18714,18743,18772,18802,18831,18860,18890,18919,18949,18979,19008,19038,19068,19098,19127,19156,19186,19215,19244,19274,19303,19333,19362,19392,19422,19452,19481,19511,19540,19570,19599,19628,19658,19687,19717,19746,19776,19806,19836,19865,19895,19924,19954,19983,20012,20042,20071,20101,20130,20160,20190,20219,20249,20279,20308,20338,20367,20396,20426,20455,20485,20514,20544,20573,20603,20633,20662,20692,20721,20751,20780,20810,20839,20869,20898,20928,20957,20987,21016,21046,21076,21105,21135,21164,21194,21223,21253,21282,21312,21341,21371,21400,21430,21459,21489,21519,21548,21578,21607,21637,21666,21696,21725,21754,21784,21813,21843,21873,21902,21932,21962,21991,22021,22050,22080,22109,22138,22168,22197,22227,22256,22286,22316,22346,22375,22405,22434,22464,22493,22522,22552,22581,22611,22640,22670,22700,22730,22759,22789,22818,22848,22877,22906,22936,22965,22994,23024,23054,23083,23113,23143,23173,23202,23232,23261,23290,23320,23349,23379,23408,23438,23467,23497,23527,23556,23586,23616,23645,23674,23704,23733,23763,23792,23822,23851,23881,23910,23940,23970,23999,24029,24058,24088,24117,24147,24176,24206,24235,24265,24294,24324,24353,24383,24413,24442,24472,24501,24531,24560,24590,24619,24648,24678,24707,24737,24767,24796,24826,24856,24885,24915,24944,24974,25003,25032,25062,25091,25121,25150,25180,25210,25240,25269,25299,25328,25358,25387,25416,25446,25475,25505,25534,25564,25594,25624,25653,25683,25712,25742,25771,25800,25830,25859,25888,25918,25948,25977,26007,26037,26067,26096,26126,26155,26184,26214,26243,26272,26302,26332,26361,26391,26421,26451,26480,26510,26539,26568,26598,26627,26656,26686,26715,26745,26775,26805,26834,26864,26893,26923,26952,26982,27011,27041,27070,27099,27129,27159,27188,27218,27248,27277,27307,27336,27366,27395,27425,27454,27484,27513,27542,27572,27602,27631,27661,27691,27720,27750,27779,27809,27838,27868,27897,27926,27956,27985,28015,28045,28074,28104,28134,28163,28193,28222,28252,28281,28310,28340,28369,28399,28428,28458,28488,28517,28547,28577,28607,28636,28665,28695,28724,28754,28783,28813,28843,28872,28901,28931,28960,28990,29019,29049,29078,29108,29137,29167,29196,29226,29255,29285,29315,29345,29375,29404,29434,29463,29492,29522,29551,29580,29610,29640,29669,29699,29729,29759,29788,29818,29847,29876,29906,29935,29964,29994,30023,30053,30082,30112,30141,30171,30200,30230,30259,30289,30318,30348,30378,30408,30437,30467,30496,30526,30555,30585,30614,30644,30673,30703,30732,30762,30791,30821,30850,30880,30909,30939,30968,30998,31027,31057,31086,31116,31145,31175,31204,31234,31263,31293,31322,31352,31381,31411,31441,31471,31500,31530,31559,31589,31618,31648,31676,31706,31736,31766,31795,31825,31854,31884,31913,31943,31972,32002,32031,32061,32090,32120,32150,32180,32209,32239,32268,32298,32327,32357,32386,32416,32445,32475,32504,32534,32563,32593,32622,32652,32681,32711,32740,32770,32799,32829,32858,32888,32917,32947,32976,33006,33035,33065,33094,33124,33153,33183,33213,33243,33272,33302,33331,33361,33390,33420,33450,33479,33509,33539,33568,33598,33627,33657,33686,33716,33745,33775,33804,33834,33863,33893,33922,33952,33981,34011,34040,34069,34099,34128,34158,34187,34217,34247,34277,34306,34336,34365,34395,34424,34454,34483,34512,34542,34571,34601,34631,34660,34690,34719,34749,34778,34808,34837,34867,34896,34926,34955,34985,35015,35044,35074,35103,35133,35162,35192,35222,35251,35280,35310,35340,35370,35399,35429,35458,35488,35517,35547,35576,35605,35635,35665,35694,35723,35753,35782,35811,35841,35871,35901,35930,35960,35989,36019,36048,36078,36107,36136,36166,36195,36225,36254,36284,36314,36343,36373,36403,36433,36462,36492,36521,36551,36580,36610,36639,36669,36698,36728,36757,36786,36816,36845,36875,36904,36934,36963,36993,37022,37052,37081,37111,37141,37170,37200,37229,37259,37288,37318,37347,37377,37406,37436,37465,37495,37524,37554,37584,37613,37643,37672,37701,37731,37760,37790,37819,37849,37878,37908,37938,37967,37997,38027,38056,38085,38115,38144,38174,38203,38233,38262,38292,38322,38351,38381,38410,38440,38469,38499,38528,38558,38587,38617,38646,38676,38705,38735,38764,38794,38823,38853,38882,38912,38941,38971,39001,39030,39059,39089,39118,39148,39178,39208,39237,39267,39297,39326,39355,39385,39414,39444,39473,39503,39532,39562,39592,39621,39650,39680,39709,39739,39768,39798,39827,39857,39886,39916,39946,39975,40005,40035,40064,40094,40123,40153,40182,40212,40241,40271,40300,40330,40359,40389,40418,40448,40477,40507,40536,40566,40595,40625,40655,40685,40714,40744,40773,40803,40832,40862,40892,40921,40951,40980,41009,41039,41068,41098,41127,41157,41186,41216,41245,41275,41304,41334,41364,41393,41422,41452,41481,41511,41540,41570,41599,41629,41658,41688,41718,41748,41777,41807,41836,41865,41894,41924,41953,41983,42012,42042,42072,42102,42131,42161,42190,42220,42249,42279,42308,42337,42367,42397,42426,42456,42485,42515,42545,42574,42604,42633,42662,42692,42721,42751,42780,42810,42839,42869,42899,42929,42958,42988,43017,43046,43076,43105,43135,43164,43194,43223,43253,43283,43312,43342,43371,43401,43430,43460,43489,43519,43548,43578,43607,43637,43666,43696,43726,43755,43785,43814,43844,43873,43903,43932,43962,43991,44021,44050,44080,44109,44139,44169,44198,44228,44258,44287,44317,44346,44375,44405,44434,44464,44493,44523,44553,44582,44612,44641,44671,44700,44730,44759,44788,44818,44847,44877,44906,44936,44966,44996,45025,45055,45084,45114,45143,45172,45202,45231,45261,45290,45320,45350,45380,45409,45439,45468,45498,45527,45556,45586,45615,45644,45674,45704,45733,45763,45793,45823,45852,45882,45911,45940,45970,45999,46028,46058,46088,46117,46147,46177,46206,46236,46265,46295,46324,46354,46383,46413,46442,46472,46501,46531,46560,46590,46620,46649,46679,46708,46738,46767,46797,46826,46856,46885,46915,46944,46974,47003,47033,47063,47092,47122,47151,47181,47210,47240,47269,47298,47328,47357,47387,47417,47446,47476,47506,47535,47565,47594,47624,47653,47682,47712,47741,47771,47800,47830,47860,47890,47919,47949,47978,48008,48037,48066,48096,48125,48155,48184,48214,48244,48273,48303,48333,48362,48392,48421,48450,48480,48509,48538,48568,48598,48627,48657,48687,48717,48746,48776,48805,48834,48864,48893,48922,48952,48982,49011,49041,49071,49100,49130,49160,49189,49218,49248,49277,49306,49336,49365,49395,49425,49455,49484,49514,49543,49573,49602,49632,49661,49690,49720,49749,49779,49809,49838,49868,49898,49927,49957,49986,50016,50045,50075,50104,50133,50163,50192,50222,50252,50281,50311,50340,50370,50400,50429,50459,50488,50518,50547,50576,50606,50635,50665,50694,50724,50754,50784,50813,50843,50872,50902,50931,50960,50990,51019,51049,51078,51108,51138,51167,51197,51227,51256,51286,51315,51345,51374,51403,51433,51462,51492,51522,51552,51582,51611,51641,51670,51699,51729,51758,51787,51816,51846,51876,51906,51936,51965,51995,52025,52054,52083,52113,52142,52171,52200,52230,52260,52290,52319,52349,52379,52408,52438,52467,52497,52526,52555,52585,52614,52644,52673,52703,52733,52762,52792,52822,52851,52881,52910,52939,52969,52998,53028,53057,53087,53116,53146,53176,53205,53235,53264,53294,53324,53353,53383,53412,53441,53471,53500,53530,53559,53589,53619,53648,53678,53708,53737,53767,53796,53825,53855,53884,53913,53943,53973,54003,54032,54062,54092,54121,54151,54180,54209,54239,54268,54297,54327,54357,54387,54416,54446,54476,54505,54535,54564,54593,54623,54652,54681,54711,54741,54770,54800,54830,54859,54889,54919,54948,54977,55007,55036,55066,55095,55125,55154,55184,55213,55243,55273,55302,55332,55361,55391,55420,55450,55479,55508,55538,55567,55597,55627,55657,55686,55716,55745,55775,55804,55834,55863,55892,55922,55951,55981,56011,56040,56070,56100,56129,56159,56188,56218,56247,56276,56306,56335,56365,56394,56424,56454,56483,56513,56543,56572,56601,56631,56660,56690,56719,56749,56778,56808,56837,56867,56897,56926,56956,56985,57015,57044,57074,57103,57133,57162,57192,57221,57251,57280,57310,57340,57369,57399,57429,57458,57487,57517,57546,57576,57605,57634,57664,57694,57723,57753,57783,57813,57842,57871,57901,57930,57959,57989,58018,58048,58077,58107,58137,58167,58196,58226,58255,58285,58314,58343,58373,58402,58432,58461,58491,58521,58551,58580,58610,58639,58669,58698,58727,58757,58786,58816,58845,58875,58905,58934,58964,58994,59023,59053,59082,59111,59141,59170,59200,59229,59259,59288,59318,59348,59377,59407,59436,59466,59495,59525,59554,59584,59613,59643,59672,59702,59731,59761,59791,59820,59850,59879,59909,59939,59968,59997,60027,60056,60086,60115,60145,60174,60204,60234,60264,60293,60323,60352,60381,60411,60440,60469,60499,60528,60558,60588,60618,60648,60677,60707,60736,60765,60795,60824,60853,60883,60912,60942,60972,61002,61031,61061,61090,61120,61149,61179,61208,61237,61267,61296,61326,61356,61385,61415,61445,61474,61504,61533,61563,61592,61621,61651,61680,61710,61739,61769,61799,61828,61858,61888,61917,61947,61976,62006,62035,62064,62094,62123,62153,62182,62212,62242,62271,62301,62331,62360,62390,62419,62448,62478,62507,62537,62566,62596,62625,62655,62685,62715,62744,62774,62803,62832,62862,62891,62921,62950,62980,63009,63039,63069,63099,63128,63157,63187,63216,63246,63275,63305,63334,63363,63393,63423,63453,63482,63512,63541,63571,63600,63630,63659,63689,63718,63747,63777,63807,63836,63866,63895,63925,63955,63984,64014,64043,64073,64102,64131,64161,64190,64220,64249,64279,64309,64339,64368,64398,64427,64457,64486,64515,64545,64574,64603,64633,64663,64692,64722,64752,64782,64811,64841,64870,64899,64929,64958,64987,65017,65047,65076,65106,65136,65166,65195,65225,65254,65283,65313,65342,65371,65401,65431,65460,65490,65520,65549,65579,65608,65638,65667,65697,65726,65755,65785,65815,65844,65874,65903,65933,65963,65992,66022,66051,66081,66110,66140,66169,66199,66228,66258,66287,66317,66346,66376,66405,66435,66465,66494,66524,66553,66583,66612,66641,66671,66700,66730,66760,66789,66819,66849,66878,66908,66937,66967,66996,67025,67055,67084,67114,67143,67173,67203,67233,67262,67292,67321,67351,67380,67409,67439,67468,67497,67527,67557,67587,67617,67646,67676,67705,67735,67764,67793,67823,67852,67882,67911,67941,67971,68e3,68030,68060,68089,68119,68148,68177,68207,68236,68266,68295,68325,68354,68384,68414,68443,68473,68502,68532,68561,68591,68620,68650,68679,68708,68738,68768,68797,68827,68857,68886,68916,68946,68975,69004,69034,69063,69092,69122,69152,69181,69211,69240,69270,69300,69330,69359,69388,69418,69447,69476,69506,69535,69565,69595,69624,69654,69684,69713,69743,69772,69802,69831,69861,69890,69919,69949,69978,70008,70038,70067,70097,70126,70156,70186,70215,70245,70274,70303,70333,70362,70392,70421,70451,70481,70510,70540,70570,70599,70629,70658,70687,70717,70746,70776,70805,70835,70864,70894,70924,70954,70983,71013,71042,71071,71101,71130,71159,71189,71218,71248,71278,71308,71337,71367,71397,71426,71455,71485,71514,71543,71573,71602,71632,71662,71691,71721,71751,71781,71810,71839,71869,71898,71927,71957,71986,72016,72046,72075,72105,72135,72164,72194,72223,72253,72282,72311,72341,72370,72400,72429,72459,72489,72518,72548,72577,72607,72637,72666,72695,72725,72754,72784,72813,72843,72872,72902,72931,72961,72991,73020,73050,73080,73109,73139,73168,73197,73227,73256,73286,73315,73345,73375,73404,73434,73464,73493,73523,73552,73581,73611,73640,73669,73699,73729,73758,73788,73818,73848,73877,73907,73936,73965,73995,74024,74053,74083,74113,74142,74172,74202,74231,74261,74291,74320,74349,74379,74408,74437,74467,74497,74526,74556,74586,74615,74645,74675,74704,74733,74763,74792,74822,74851,74881,74910,74940,74969,74999,75029,75058,75088,75117,75147,75176,75206,75235,75264,75294,75323,75353,75383,75412,75442,75472,75501,75531,75560,75590,75619,75648,75678,75707,75737,75766,75796,75826,75856,75885,75915,75944,75974,76003,76032,76062,76091,76121,76150,76180,76210,76239,76269,76299,76328,76358,76387,76416,76446,76475,76505,76534,76564,76593,76623,76653,76682,76712,76741,76771,76801,76830,76859,76889,76918,76948,76977,77007,77036,77066,77096,77125,77155,77185,77214,77243,77273,77302,77332,77361,77390,77420,77450,77479,77509,77539,77569,77598,77627,77657,77686,77715,77745,77774,77804,77833,77863,77893,77923,77952,77982,78011,78041,78070,78099,78129,78158,78188,78217,78247,78277,78307,78336,78366,78395,78425,78454,78483,78513,78542,78572,78601,78631,78661,78690,78720,78750,78779,78808,78838,78867,78897,78926,78956,78985,79015,79044,79074,79104,79133,79163,79192,79222,79251,79281,79310,79340,79369,79399,79428,79458,79487,79517,79546,79576,79606,79635,79665,79695,79724,79753,79783,79812,79841,79871,79900,79930,79960,79990]},63489:function(t,e,r){var n=r(56131);function i(){this.regionalOptions=[],this.regionalOptions[\\\"\\\"]={invalidCalendar:\\\"Calendar {0} not found\\\",invalidDate:\\\"Invalid {0} date\\\",invalidMonth:\\\"Invalid {0} month\\\",invalidYear:\\\"Invalid {0} year\\\",differentCalendars:\\\"Cannot mix {0} and {1} dates\\\"},this.local=this.regionalOptions[\\\"\\\"],this.calendars={},this._localCals={}}function a(t,e,r,n){if(this._calendar=t,this._year=e,this._month=r,this._day=n,0===this._calendar._validateLevel&&!this._calendar.isValid(this._year,this._month,this._day))throw(u.local.invalidDate||u.regionalOptions[\\\"\\\"].invalidDate).replace(/\\\\{0\\\\}/,this._calendar.local.name)}function o(t,e){return\\\"000000\\\".substring(0,e-(t=\\\"\\\"+t).length)+t}function s(){this.shortYearCutoff=\\\"+10\\\"}function l(t){this.local=this.regionalOptions[t]||this.regionalOptions[\\\"\\\"]}n(i.prototype,{instance:function(t,e){t=(t||\\\"gregorian\\\").toLowerCase(),e=e||\\\"\\\";var r=this._localCals[t+\\\"-\\\"+e];if(!r&&this.calendars[t]&&(r=new this.calendars[t](e),this._localCals[t+\\\"-\\\"+e]=r),!r)throw(this.local.invalidCalendar||this.regionalOptions[\\\"\\\"].invalidCalendar).replace(/\\\\{0\\\\}/,t);return r},newDate:function(t,e,r,n,i){return(n=(null!=t&&t.year?t.calendar():\\\"string\\\"==typeof n?this.instance(n,i):n)||this.instance()).newDate(t,e,r)},substituteDigits:function(t){return function(e){return(e+\\\"\\\").replace(/[0-9]/g,(function(e){return t[e]}))}},substituteChineseDigits:function(t,e){return function(r){for(var n=\\\"\\\",i=0;r>0;){var a=r%10;n=(0===a?\\\"\\\":t[a]+e[i])+n,i++,r=Math.floor(r/10)}return 0===n.indexOf(t[1]+e[1])&&(n=n.substr(1)),n||t[0]}}}),n(a.prototype,{newDate:function(t,e,r){return this._calendar.newDate(null==t?this:t,e,r)},year:function(t){return 0===arguments.length?this._year:this.set(t,\\\"y\\\")},month:function(t){return 0===arguments.length?this._month:this.set(t,\\\"m\\\")},day:function(t){return 0===arguments.length?this._day:this.set(t,\\\"d\\\")},date:function(t,e,r){if(!this._calendar.isValid(t,e,r))throw(u.local.invalidDate||u.regionalOptions[\\\"\\\"].invalidDate).replace(/\\\\{0\\\\}/,this._calendar.local.name);return this._year=t,this._month=e,this._day=r,this},leapYear:function(){return this._calendar.leapYear(this)},epoch:function(){return this._calendar.epoch(this)},formatYear:function(){return this._calendar.formatYear(this)},monthOfYear:function(){return this._calendar.monthOfYear(this)},weekOfYear:function(){return this._calendar.weekOfYear(this)},daysInYear:function(){return this._calendar.daysInYear(this)},dayOfYear:function(){return this._calendar.dayOfYear(this)},daysInMonth:function(){return this._calendar.daysInMonth(this)},dayOfWeek:function(){return this._calendar.dayOfWeek(this)},weekDay:function(){return this._calendar.weekDay(this)},extraInfo:function(){return this._calendar.extraInfo(this)},add:function(t,e){return this._calendar.add(this,t,e)},set:function(t,e){return this._calendar.set(this,t,e)},compareTo:function(t){if(this._calendar.name!==t._calendar.name)throw(u.local.differentCalendars||u.regionalOptions[\\\"\\\"].differentCalendars).replace(/\\\\{0\\\\}/,this._calendar.local.name).replace(/\\\\{1\\\\}/,t._calendar.local.name);var e=this._year!==t._year?this._year-t._year:this._month!==t._month?this.monthOfYear()-t.monthOfYear():this._day-t._day;return 0===e?0:e<0?-1:1},calendar:function(){return this._calendar},toJD:function(){return this._calendar.toJD(this)},fromJD:function(t){return this._calendar.fromJD(t)},toJSDate:function(){return this._calendar.toJSDate(this)},fromJSDate:function(t){return this._calendar.fromJSDate(t)},toString:function(){return(this.year()<0?\\\"-\\\":\\\"\\\")+o(Math.abs(this.year()),4)+\\\"-\\\"+o(this.month(),2)+\\\"-\\\"+o(this.day(),2)}}),n(s.prototype,{_validateLevel:0,newDate:function(t,e,r){return null==t?this.today():(t.year&&(this._validate(t,e,r,u.local.invalidDate||u.regionalOptions[\\\"\\\"].invalidDate),r=t.day(),e=t.month(),t=t.year()),new a(this,t,e,r))},today:function(){return this.fromJSDate(new Date)},epoch:function(t){return this._validate(t,this.minMonth,this.minDay,u.local.invalidYear||u.regionalOptions[\\\"\\\"].invalidYear).year()<0?this.local.epochs[0]:this.local.epochs[1]},formatYear:function(t){var e=this._validate(t,this.minMonth,this.minDay,u.local.invalidYear||u.regionalOptions[\\\"\\\"].invalidYear);return(e.year()<0?\\\"-\\\":\\\"\\\")+o(Math.abs(e.year()),4)},monthsInYear:function(t){return this._validate(t,this.minMonth,this.minDay,u.local.invalidYear||u.regionalOptions[\\\"\\\"].invalidYear),12},monthOfYear:function(t,e){var r=this._validate(t,e,this.minDay,u.local.invalidMonth||u.regionalOptions[\\\"\\\"].invalidMonth);return(r.month()+this.monthsInYear(r)-this.firstMonth)%this.monthsInYear(r)+this.minMonth},fromMonthOfYear:function(t,e){var r=(e+this.firstMonth-2*this.minMonth)%this.monthsInYear(t)+this.minMonth;return this._validate(t,r,this.minDay,u.local.invalidMonth||u.regionalOptions[\\\"\\\"].invalidMonth),r},daysInYear:function(t){var e=this._validate(t,this.minMonth,this.minDay,u.local.invalidYear||u.regionalOptions[\\\"\\\"].invalidYear);return this.leapYear(e)?366:365},dayOfYear:function(t,e,r){var n=this._validate(t,e,r,u.local.invalidDate||u.regionalOptions[\\\"\\\"].invalidDate);return n.toJD()-this.newDate(n.year(),this.fromMonthOfYear(n.year(),this.minMonth),this.minDay).toJD()+1},daysInWeek:function(){return 7},dayOfWeek:function(t,e,r){var n=this._validate(t,e,r,u.local.invalidDate||u.regionalOptions[\\\"\\\"].invalidDate);return(Math.floor(this.toJD(n))+2)%this.daysInWeek()},extraInfo:function(t,e,r){return this._validate(t,e,r,u.local.invalidDate||u.regionalOptions[\\\"\\\"].invalidDate),{}},add:function(t,e,r){return this._validate(t,this.minMonth,this.minDay,u.local.invalidDate||u.regionalOptions[\\\"\\\"].invalidDate),this._correctAdd(t,this._add(t,e,r),e,r)},_add:function(t,e,r){if(this._validateLevel++,\\\"d\\\"===r||\\\"w\\\"===r){var n=t.toJD()+e*(\\\"w\\\"===r?this.daysInWeek():1),i=t.calendar().fromJD(n);return this._validateLevel--,[i.year(),i.month(),i.day()]}try{var a=t.year()+(\\\"y\\\"===r?e:0),o=t.monthOfYear()+(\\\"m\\\"===r?e:0);i=t.day(),\\\"y\\\"===r?(t.month()!==this.fromMonthOfYear(a,o)&&(o=this.newDate(a,t.month(),this.minDay).monthOfYear()),o=Math.min(o,this.monthsInYear(a)),i=Math.min(i,this.daysInMonth(a,this.fromMonthOfYear(a,o)))):\\\"m\\\"===r&&(function(t){for(;o<t.minMonth;)a--,o+=t.monthsInYear(a);for(var e=t.monthsInYear(a);o>e-1+t.minMonth;)a++,o-=e,e=t.monthsInYear(a)}(this),i=Math.min(i,this.daysInMonth(a,this.fromMonthOfYear(a,o))));var s=[a,this.fromMonthOfYear(a,o),i];return this._validateLevel--,s}catch(t){throw this._validateLevel--,t}},_correctAdd:function(t,e,r,n){if(!(this.hasYearZero||\\\"y\\\"!==n&&\\\"m\\\"!==n||0!==e[0]&&t.year()>0==e[0]>0)){var i={y:[1,1,\\\"y\\\"],m:[1,this.monthsInYear(-1),\\\"m\\\"],w:[this.daysInWeek(),this.daysInYear(-1),\\\"d\\\"],d:[1,this.daysInYear(-1),\\\"d\\\"]}[n],a=r<0?-1:1;e=this._add(t,r*i[0]+a*i[1],i[2])}return t.date(e[0],e[1],e[2])},set:function(t,e,r){this._validate(t,this.minMonth,this.minDay,u.local.invalidDate||u.regionalOptions[\\\"\\\"].invalidDate);var n=\\\"y\\\"===r?e:t.year(),i=\\\"m\\\"===r?e:t.month(),a=\\\"d\\\"===r?e:t.day();return\\\"y\\\"!==r&&\\\"m\\\"!==r||(a=Math.min(a,this.daysInMonth(n,i))),t.date(n,i,a)},isValid:function(t,e,r){this._validateLevel++;var n=this.hasYearZero||0!==t;if(n){var i=this.newDate(t,e,this.minDay);n=e>=this.minMonth&&e-this.minMonth<this.monthsInYear(i)&&r>=this.minDay&&r-this.minDay<this.daysInMonth(i)}return this._validateLevel--,n},toJSDate:function(t,e,r){var n=this._validate(t,e,r,u.local.invalidDate||u.regionalOptions[\\\"\\\"].invalidDate);return u.instance().fromJD(this.toJD(n)).toJSDate()},fromJSDate:function(t){return this.fromJD(u.instance().fromJSDate(t).toJD())},_validate:function(t,e,r,n){if(t.year){if(0===this._validateLevel&&this.name!==t.calendar().name)throw(u.local.differentCalendars||u.regionalOptions[\\\"\\\"].differentCalendars).replace(/\\\\{0\\\\}/,this.local.name).replace(/\\\\{1\\\\}/,t.calendar().local.name);return t}try{if(this._validateLevel++,1===this._validateLevel&&!this.isValid(t,e,r))throw n.replace(/\\\\{0\\\\}/,this.local.name);var i=this.newDate(t,e,r);return this._validateLevel--,i}catch(t){throw this._validateLevel--,t}}}),l.prototype=new s,n(l.prototype,{name:\\\"Gregorian\\\",jdEpoch:1721425.5,daysPerMonth:[31,28,31,30,31,30,31,31,30,31,30,31],hasYearZero:!1,minMonth:1,firstMonth:1,minDay:1,regionalOptions:{\\\"\\\":{name:\\\"Gregorian\\\",epochs:[\\\"BCE\\\",\\\"CE\\\"],monthNames:[\\\"January\\\",\\\"February\\\",\\\"March\\\",\\\"April\\\",\\\"May\\\",\\\"June\\\",\\\"July\\\",\\\"August\\\",\\\"September\\\",\\\"October\\\",\\\"November\\\",\\\"December\\\"],monthNamesShort:[\\\"Jan\\\",\\\"Feb\\\",\\\"Mar\\\",\\\"Apr\\\",\\\"May\\\",\\\"Jun\\\",\\\"Jul\\\",\\\"Aug\\\",\\\"Sep\\\",\\\"Oct\\\",\\\"Nov\\\",\\\"Dec\\\"],dayNames:[\\\"Sunday\\\",\\\"Monday\\\",\\\"Tuesday\\\",\\\"Wednesday\\\",\\\"Thursday\\\",\\\"Friday\\\",\\\"Saturday\\\"],dayNamesShort:[\\\"Sun\\\",\\\"Mon\\\",\\\"Tue\\\",\\\"Wed\\\",\\\"Thu\\\",\\\"Fri\\\",\\\"Sat\\\"],dayNamesMin:[\\\"Su\\\",\\\"Mo\\\",\\\"Tu\\\",\\\"We\\\",\\\"Th\\\",\\\"Fr\\\",\\\"Sa\\\"],digits:null,dateFormat:\\\"mm/dd/yyyy\\\",firstDay:0,isRTL:!1}},leapYear:function(t){var e=this._validate(t,this.minMonth,this.minDay,u.local.invalidYear||u.regionalOptions[\\\"\\\"].invalidYear);return(t=e.year()+(e.year()<0?1:0))%4==0&&(t%100!=0||t%400==0)},weekOfYear:function(t,e,r){var n=this.newDate(t,e,r);return n.add(4-(n.dayOfWeek()||7),\\\"d\\\"),Math.floor((n.dayOfYear()-1)/7)+1},daysInMonth:function(t,e){var r=this._validate(t,e,this.minDay,u.local.invalidMonth||u.regionalOptions[\\\"\\\"].invalidMonth);return this.daysPerMonth[r.month()-1]+(2===r.month()&&this.leapYear(r.year())?1:0)},weekDay:function(t,e,r){return(this.dayOfWeek(t,e,r)||7)<6},toJD:function(t,e,r){var n=this._validate(t,e,r,u.local.invalidDate||u.regionalOptions[\\\"\\\"].invalidDate);t=n.year(),e=n.month(),r=n.day(),t<0&&t++,e<3&&(e+=12,t--);var i=Math.floor(t/100),a=2-i+Math.floor(i/4);return Math.floor(365.25*(t+4716))+Math.floor(30.6001*(e+1))+r+a-1524.5},fromJD:function(t){var e=Math.floor(t+.5),r=Math.floor((e-1867216.25)/36524.25),n=1524+(r=e+1+r-Math.floor(r/4)),i=Math.floor((n-122.1)/365.25),a=Math.floor(365.25*i),o=Math.floor((n-a)/30.6001),s=n-a-Math.floor(30.6001*o),l=o-(o>13.5?13:1),u=i-(l>2.5?4716:4715);return u<=0&&u--,this.newDate(u,l,s)},toJSDate:function(t,e,r){var n=this._validate(t,e,r,u.local.invalidDate||u.regionalOptions[\\\"\\\"].invalidDate),i=new Date(n.year(),n.month()-1,n.day());return i.setHours(0),i.setMinutes(0),i.setSeconds(0),i.setMilliseconds(0),i.setHours(i.getHours()>12?i.getHours()+2:0),i},fromJSDate:function(t){return this.newDate(t.getFullYear(),t.getMonth()+1,t.getDate())}});var u=t.exports=new i;u.cdate=a,u.baseCalendar=s,u.calendars.gregorian=l},94338:function(t,e,r){var n=r(56131),i=r(63489);n(i.regionalOptions[\\\"\\\"],{invalidArguments:\\\"Invalid arguments\\\",invalidFormat:\\\"Cannot format a date from another calendar\\\",missingNumberAt:\\\"Missing number at position {0}\\\",unknownNameAt:\\\"Unknown name at position {0}\\\",unexpectedLiteralAt:\\\"Unexpected literal at position {0}\\\",unexpectedText:\\\"Additional text found at end\\\"}),i.local=i.regionalOptions[\\\"\\\"],n(i.cdate.prototype,{formatDate:function(t,e){return\\\"string\\\"!=typeof t&&(e=t,t=\\\"\\\"),this._calendar.formatDate(t||\\\"\\\",this,e)}}),n(i.baseCalendar.prototype,{UNIX_EPOCH:i.instance().newDate(1970,1,1).toJD(),SECS_PER_DAY:86400,TICKS_EPOCH:i.instance().jdEpoch,TICKS_PER_DAY:864e9,ATOM:\\\"yyyy-mm-dd\\\",COOKIE:\\\"D, dd M yyyy\\\",FULL:\\\"DD, MM d, yyyy\\\",ISO_8601:\\\"yyyy-mm-dd\\\",JULIAN:\\\"J\\\",RFC_822:\\\"D, d M yy\\\",RFC_850:\\\"DD, dd-M-yy\\\",RFC_1036:\\\"D, d M yy\\\",RFC_1123:\\\"D, d M yyyy\\\",RFC_2822:\\\"D, d M yyyy\\\",RSS:\\\"D, d M yy\\\",TICKS:\\\"!\\\",TIMESTAMP:\\\"@\\\",W3C:\\\"yyyy-mm-dd\\\",formatDate:function(t,e,r){if(\\\"string\\\"!=typeof t&&(r=e,e=t,t=\\\"\\\"),!e)return\\\"\\\";if(e.calendar()!==this)throw i.local.invalidFormat||i.regionalOptions[\\\"\\\"].invalidFormat;t=t||this.local.dateFormat;for(var n,a,o,s=(r=r||{}).dayNamesShort||this.local.dayNamesShort,l=r.dayNames||this.local.dayNames,u=r.monthNumbers||this.local.monthNumbers,c=r.monthNamesShort||this.local.monthNamesShort,f=r.monthNames||this.local.monthNames,h=(r.calculateWeek||this.local.calculateWeek,function(e,r){for(var n=1;_+n<t.length&&t.charAt(_+n)===e;)n++;return _+=n-1,Math.floor(n/(r||1))>1}),p=function(t,e,r,n){var i=\\\"\\\"+e;if(h(t,n))for(;i.length<r;)i=\\\"0\\\"+i;return i},d=this,v=function(t){return\\\"function\\\"==typeof u?u.call(d,t,h(\\\"m\\\")):m(p(\\\"m\\\",t.month(),2))},g=function(t,e){return e?\\\"function\\\"==typeof f?f.call(d,t):f[t.month()-d.minMonth]:\\\"function\\\"==typeof c?c.call(d,t):c[t.month()-d.minMonth]},y=this.local.digits,m=function(t){return r.localNumbers&&y?y(t):t},x=\\\"\\\",b=!1,_=0;_<t.length;_++)if(b)\\\"'\\\"!==t.charAt(_)||h(\\\"'\\\")?x+=t.charAt(_):b=!1;else switch(t.charAt(_)){case\\\"d\\\":x+=m(p(\\\"d\\\",e.day(),2));break;case\\\"D\\\":x+=(\\\"D\\\",n=e.dayOfWeek(),a=s,o=l,h(\\\"D\\\")?o[n]:a[n]);break;case\\\"o\\\":x+=p(\\\"o\\\",e.dayOfYear(),3);break;case\\\"w\\\":x+=p(\\\"w\\\",e.weekOfYear(),2);break;case\\\"m\\\":x+=v(e);break;case\\\"M\\\":x+=g(e,h(\\\"M\\\"));break;case\\\"y\\\":x+=h(\\\"y\\\",2)?e.year():(e.year()%100<10?\\\"0\\\":\\\"\\\")+e.year()%100;break;case\\\"Y\\\":h(\\\"Y\\\",2),x+=e.formatYear();break;case\\\"J\\\":x+=e.toJD();break;case\\\"@\\\":x+=(e.toJD()-this.UNIX_EPOCH)*this.SECS_PER_DAY;break;case\\\"!\\\":x+=(e.toJD()-this.TICKS_EPOCH)*this.TICKS_PER_DAY;break;case\\\"'\\\":h(\\\"'\\\")?x+=\\\"'\\\":b=!0;break;default:x+=t.charAt(_)}return x},parseDate:function(t,e,r){if(null==e)throw i.local.invalidArguments||i.regionalOptions[\\\"\\\"].invalidArguments;if(\\\"\\\"===(e=\\\"object\\\"==typeof e?e.toString():e+\\\"\\\"))return null;t=t||this.local.dateFormat;var n=(r=r||{}).shortYearCutoff||this.shortYearCutoff;n=\\\"string\\\"!=typeof n?n:this.today().year()%100+parseInt(n,10);for(var a=r.dayNamesShort||this.local.dayNamesShort,o=r.dayNames||this.local.dayNames,s=r.parseMonth||this.local.parseMonth,l=r.monthNumbers||this.local.monthNumbers,u=r.monthNamesShort||this.local.monthNamesShort,c=r.monthNames||this.local.monthNames,f=-1,h=-1,p=-1,d=-1,v=-1,g=!1,y=!1,m=function(e,r){for(var n=1;M+n<t.length&&t.charAt(M+n)===e;)n++;return M+=n-1,Math.floor(n/(r||1))>1},x=function(t,r){var n=m(t,r),a=[2,3,n?4:2,n?4:2,10,11,20][\\\"oyYJ@!\\\".indexOf(t)+1],o=new RegExp(\\\"^-?\\\\\\\\d{1,\\\"+a+\\\"}\\\"),s=e.substring(A).match(o);if(!s)throw(i.local.missingNumberAt||i.regionalOptions[\\\"\\\"].missingNumberAt).replace(/\\\\{0\\\\}/,A);return A+=s[0].length,parseInt(s[0],10)},b=this,_=function(){if(\\\"function\\\"==typeof l){m(\\\"m\\\");var t=l.call(b,e.substring(A));return A+=t.length,t}return x(\\\"m\\\")},w=function(t,r,n,a){for(var o=m(t,a)?n:r,s=0;s<o.length;s++)if(e.substr(A,o[s].length).toLowerCase()===o[s].toLowerCase())return A+=o[s].length,s+b.minMonth;throw(i.local.unknownNameAt||i.regionalOptions[\\\"\\\"].unknownNameAt).replace(/\\\\{0\\\\}/,A)},T=function(){if(\\\"function\\\"==typeof c){var t=m(\\\"M\\\")?c.call(b,e.substring(A)):u.call(b,e.substring(A));return A+=t.length,t}return w(\\\"M\\\",u,c)},k=function(){if(e.charAt(A)!==t.charAt(M))throw(i.local.unexpectedLiteralAt||i.regionalOptions[\\\"\\\"].unexpectedLiteralAt).replace(/\\\\{0\\\\}/,A);A++},A=0,M=0;M<t.length;M++)if(y)\\\"'\\\"!==t.charAt(M)||m(\\\"'\\\")?k():y=!1;else switch(t.charAt(M)){case\\\"d\\\":d=x(\\\"d\\\");break;case\\\"D\\\":w(\\\"D\\\",a,o);break;case\\\"o\\\":v=x(\\\"o\\\");break;case\\\"w\\\":x(\\\"w\\\");break;case\\\"m\\\":p=_();break;case\\\"M\\\":p=T();break;case\\\"y\\\":var S=M;g=!m(\\\"y\\\",2),M=S,h=x(\\\"y\\\",2);break;case\\\"Y\\\":h=x(\\\"Y\\\",2);break;case\\\"J\\\":f=x(\\\"J\\\")+.5,\\\".\\\"===e.charAt(A)&&(A++,x(\\\"J\\\"));break;case\\\"@\\\":f=x(\\\"@\\\")/this.SECS_PER_DAY+this.UNIX_EPOCH;break;case\\\"!\\\":f=x(\\\"!\\\")/this.TICKS_PER_DAY+this.TICKS_EPOCH;break;case\\\"*\\\":A=e.length;break;case\\\"'\\\":m(\\\"'\\\")?k():y=!0;break;default:k()}if(A<e.length)throw i.local.unexpectedText||i.regionalOptions[\\\"\\\"].unexpectedText;if(-1===h?h=this.today().year():h<100&&g&&(h+=-1===n?1900:this.today().year()-this.today().year()%100-(h<=n?0:100)),\\\"string\\\"==typeof p&&(p=s.call(this,h,p)),v>-1){p=1,d=v;for(var E=this.daysInMonth(h,p);d>E;E=this.daysInMonth(h,p))p++,d-=E}return f>-1?this.fromJD(f):this.newDate(h,p,d)},determineDate:function(t,e,r,n,i){r&&\\\"object\\\"!=typeof r&&(i=n,n=r,r=null),\\\"string\\\"!=typeof n&&(i=n,n=\\\"\\\");var a=this;return e=e?e.newDate():null,null==t?e:\\\"string\\\"==typeof t?function(t){try{return a.parseDate(n,t,i)}catch(t){}for(var e=((t=t.toLowerCase()).match(/^c/)&&r?r.newDate():null)||a.today(),o=/([+-]?[0-9]+)\\\\s*(d|w|m|y)?/g,s=o.exec(t);s;)e.add(parseInt(s[1],10),s[2]||\\\"d\\\"),s=o.exec(t);return e}(t):\\\"number\\\"==typeof t?isNaN(t)||t===1/0||t===-1/0?e:a.today().add(t,\\\"d\\\"):a.newDate(t)}})},69862:function(){},40964:function(){},72077:function(t,e,r){\\\"use strict\\\";var n=[\\\"BigInt64Array\\\",\\\"BigUint64Array\\\",\\\"Float32Array\\\",\\\"Float64Array\\\",\\\"Int16Array\\\",\\\"Int32Array\\\",\\\"Int8Array\\\",\\\"Uint16Array\\\",\\\"Uint32Array\\\",\\\"Uint8Array\\\",\\\"Uint8ClampedArray\\\"],i=\\\"undefined\\\"==typeof globalThis?r.g:globalThis;t.exports=function(){for(var t=[],e=0;e<n.length;e++)\\\"function\\\"==typeof i[n[e]]&&(t[t.length]=n[e]);return t}},81684:function(t,e,r){\\\"use strict\\\";function n(t,e,r){t.prototype=e.prototype=r,r.constructor=t}function i(t,e){var r=Object.create(t.prototype);for(var n in e)r[n]=e[n];return r}function a(){}r.d(e,{sX:function(){return $},k4:function(){return q}});var o=.7,s=1/o,l=\\\"\\\\\\\\s*([+-]?\\\\\\\\d+)\\\\\\\\s*\\\",u=\\\"\\\\\\\\s*([+-]?(?:\\\\\\\\d*\\\\\\\\.)?\\\\\\\\d+(?:[eE][+-]?\\\\\\\\d+)?)\\\\\\\\s*\\\",c=\\\"\\\\\\\\s*([+-]?(?:\\\\\\\\d*\\\\\\\\.)?\\\\\\\\d+(?:[eE][+-]?\\\\\\\\d+)?)%\\\\\\\\s*\\\",f=/^#([0-9a-f]{3,8})$/,h=new RegExp(\\\"^rgb\\\\\\\\(\\\".concat(l,\\\",\\\").concat(l,\\\",\\\").concat(l,\\\"\\\\\\\\)$\\\")),p=new RegExp(\\\"^rgb\\\\\\\\(\\\".concat(c,\\\",\\\").concat(c,\\\",\\\").concat(c,\\\"\\\\\\\\)$\\\")),d=new RegExp(\\\"^rgba\\\\\\\\(\\\".concat(l,\\\",\\\").concat(l,\\\",\\\").concat(l,\\\",\\\").concat(u,\\\"\\\\\\\\)$\\\")),v=new RegExp(\\\"^rgba\\\\\\\\(\\\".concat(c,\\\",\\\").concat(c,\\\",\\\").concat(c,\\\",\\\").concat(u,\\\"\\\\\\\\)$\\\")),g=new RegExp(\\\"^hsl\\\\\\\\(\\\".concat(u,\\\",\\\").concat(c,\\\",\\\").concat(c,\\\"\\\\\\\\)$\\\")),y=new RegExp(\\\"^hsla\\\\\\\\(\\\".concat(u,\\\",\\\").concat(c,\\\",\\\").concat(c,\\\",\\\").concat(u,\\\"\\\\\\\\)$\\\")),m={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};function x(){return this.rgb().formatHex()}function b(){return this.rgb().formatRgb()}function _(t){var e,r;return t=(t+\\\"\\\").trim().toLowerCase(),(e=f.exec(t))?(r=e[1].length,e=parseInt(e[1],16),6===r?w(e):3===r?new A(e>>8&15|e>>4&240,e>>4&15|240&e,(15&e)<<4|15&e,1):8===r?T(e>>24&255,e>>16&255,e>>8&255,(255&e)/255):4===r?T(e>>12&15|e>>8&240,e>>8&15|e>>4&240,e>>4&15|240&e,((15&e)<<4|15&e)/255):null):(e=h.exec(t))?new A(e[1],e[2],e[3],1):(e=p.exec(t))?new A(255*e[1]/100,255*e[2]/100,255*e[3]/100,1):(e=d.exec(t))?T(e[1],e[2],e[3],e[4]):(e=v.exec(t))?T(255*e[1]/100,255*e[2]/100,255*e[3]/100,e[4]):(e=g.exec(t))?P(e[1],e[2]/100,e[3]/100,1):(e=y.exec(t))?P(e[1],e[2]/100,e[3]/100,e[4]):m.hasOwnProperty(t)?w(m[t]):\\\"transparent\\\"===t?new A(NaN,NaN,NaN,0):null}function w(t){return new A(t>>16&255,t>>8&255,255&t,1)}function T(t,e,r,n){return n<=0&&(t=e=r=NaN),new A(t,e,r,n)}function k(t,e,r,n){return 1===arguments.length?((i=t)instanceof a||(i=_(i)),i?new A((i=i.rgb()).r,i.g,i.b,i.opacity):new A):new A(t,e,r,null==n?1:n);var i}function A(t,e,r,n){this.r=+t,this.g=+e,this.b=+r,this.opacity=+n}function M(){return\\\"#\\\".concat(C(this.r)).concat(C(this.g)).concat(C(this.b))}function S(){var t=E(this.opacity);return\\\"\\\".concat(1===t?\\\"rgb(\\\":\\\"rgba(\\\").concat(L(this.r),\\\", \\\").concat(L(this.g),\\\", \\\").concat(L(this.b)).concat(1===t?\\\")\\\":\\\", \\\".concat(t,\\\")\\\"))}function E(t){return isNaN(t)?1:Math.max(0,Math.min(1,t))}function L(t){return Math.max(0,Math.min(255,Math.round(t)||0))}function C(t){return((t=L(t))<16?\\\"0\\\":\\\"\\\")+t.toString(16)}function P(t,e,r,n){return n<=0?t=e=r=NaN:r<=0||r>=1?t=e=NaN:e<=0&&(t=NaN),new I(t,e,r,n)}function O(t){if(t instanceof I)return new I(t.h,t.s,t.l,t.opacity);if(t instanceof a||(t=_(t)),!t)return new I;if(t instanceof I)return t;var e=(t=t.rgb()).r/255,r=t.g/255,n=t.b/255,i=Math.min(e,r,n),o=Math.max(e,r,n),s=NaN,l=o-i,u=(o+i)/2;return l?(s=e===o?(r-n)/l+6*(r<n):r===o?(n-e)/l+2:(e-r)/l+4,l/=u<.5?o+i:2-o-i,s*=60):l=u>0&&u<1?0:s,new I(s,l,u,t.opacity)}function I(t,e,r,n){this.h=+t,this.s=+e,this.l=+r,this.opacity=+n}function D(t){return(t=(t||0)%360)<0?t+360:t}function z(t){return Math.max(0,Math.min(1,t||0))}function R(t,e,r){return 255*(t<60?e+(r-e)*t/60:t<180?r:t<240?e+(r-e)*(240-t)/60:e)}function F(t,e,r,n,i){var a=t*t,o=a*t;return((1-3*t+3*a-o)*e+(4-6*a+3*o)*r+(1+3*t+3*a-3*o)*n+o*i)/6}n(a,_,{copy:function(t){return Object.assign(new this.constructor,this,t)},displayable:function(){return this.rgb().displayable()},hex:x,formatHex:x,formatHex8:function(){return this.rgb().formatHex8()},formatHsl:function(){return O(this).formatHsl()},formatRgb:b,toString:b}),n(A,k,i(a,{brighter:function(t){return t=null==t?s:Math.pow(s,t),new A(this.r*t,this.g*t,this.b*t,this.opacity)},darker:function(t){return t=null==t?o:Math.pow(o,t),new A(this.r*t,this.g*t,this.b*t,this.opacity)},rgb:function(){return this},clamp:function(){return new A(L(this.r),L(this.g),L(this.b),E(this.opacity))},displayable:function(){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:M,formatHex:M,formatHex8:function(){return\\\"#\\\".concat(C(this.r)).concat(C(this.g)).concat(C(this.b)).concat(C(255*(isNaN(this.opacity)?1:this.opacity)))},formatRgb:S,toString:S})),n(I,(function(t,e,r,n){return 1===arguments.length?O(t):new I(t,e,r,null==n?1:n)}),i(a,{brighter:function(t){return t=null==t?s:Math.pow(s,t),new I(this.h,this.s,this.l*t,this.opacity)},darker:function(t){return t=null==t?o:Math.pow(o,t),new I(this.h,this.s,this.l*t,this.opacity)},rgb:function(){var t=this.h%360+360*(this.h<0),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 A(R(t>=240?t-240:t+120,i,n),R(t,i,n),R(t<120?t+240:t-120,i,n),this.opacity)},clamp:function(){return new I(D(this.h),z(this.s),z(this.l),E(this.opacity))},displayable:function(){return(0<=this.s&&this.s<=1||isNaN(this.s))&&0<=this.l&&this.l<=1&&0<=this.opacity&&this.opacity<=1},formatHsl:function(){var t=E(this.opacity);return\\\"\\\".concat(1===t?\\\"hsl(\\\":\\\"hsla(\\\").concat(D(this.h),\\\", \\\").concat(100*z(this.s),\\\"%, \\\").concat(100*z(this.l),\\\"%\\\").concat(1===t?\\\")\\\":\\\", \\\".concat(t,\\\")\\\"))}}));var B=function(t){return function(){return t}};function N(t,e){var r=e-t;return r?function(t,e){return function(r){return t+r*e}}(t,r):B(isNaN(t)?e:t)}var j=function t(e){var r=function(t){return 1==(t=+t)?N:function(e,r){return r-e?function(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)}}(e,r,t):B(isNaN(e)?r:e)}}(e);function n(t,e){var n=r((t=k(t)).r,(e=k(e)).r),i=r(t.g,e.g),a=r(t.b,e.b),o=N(t.opacity,e.opacity);return function(e){return t.r=n(e),t.g=i(e),t.b=a(e),t.opacity=o(e),t+\\\"\\\"}}return n.gamma=t,n}(1);function U(t){return function(e){var r,n,i=e.length,a=new Array(i),o=new Array(i),s=new Array(i);for(r=0;r<i;++r)n=k(e[r]),a[r]=n.r||0,o[r]=n.g||0,s[r]=n.b||0;return a=t(a),o=t(o),s=t(s),n.opacity=1,function(t){return n.r=a(t),n.g=o(t),n.b=s(t),n+\\\"\\\"}}}function V(t,e){var r,n=e?e.length:0,i=t?Math.min(n,t.length):0,a=new Array(i),o=new Array(n);for(r=0;r<i;++r)a[r]=$(t[r],e[r]);for(;r<n;++r)o[r]=e[r];return function(t){for(r=0;r<i;++r)o[r]=a[r](t);return o}}function H(t,e){var r=new Date;return t=+t,e=+e,function(n){return r.setTime(t*(1-n)+e*n),r}}function q(t,e){return t=+t,e=+e,function(r){return t*(1-r)+e*r}}function G(t){return G=\\\"function\\\"==typeof Symbol&&\\\"symbol\\\"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&\\\"function\\\"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?\\\"symbol\\\":typeof t},G(t)}function Z(t,e){var r,n={},i={};for(r in null!==t&&\\\"object\\\"===G(t)||(t={}),null!==e&&\\\"object\\\"===G(e)||(e={}),e)r in t?n[r]=$(t[r],e[r]):i[r]=e[r];return function(t){for(r in n)i[r]=n[r](t);return i}}U((function(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],o=n>0?t[n-1]:2*i-a,s=n<e-1?t[n+2]:2*a-i;return F((r-n/e)*e,o,i,a,s)}})),U((function(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],o=t[(n+1)%e],s=t[(n+2)%e];return F((r-n/e)*e,i,a,o,s)}}));var Y=/[-+]?(?:\\\\d+\\\\.?\\\\d*|\\\\.?\\\\d+)(?:[eE][-+]?\\\\d+)?/g,W=new RegExp(Y.source,\\\"g\\\");function X(t,e){var r,n,i,a=Y.lastIndex=W.lastIndex=0,o=-1,s=[],l=[];for(t+=\\\"\\\",e+=\\\"\\\";(r=Y.exec(t))&&(n=W.exec(e));)(i=n.index)>a&&(i=e.slice(a,i),s[o]?s[o]+=i:s[++o]=i),(r=r[0])===(n=n[0])?s[o]?s[o]+=n:s[++o]=n:(s[++o]=null,l.push({i:o,x:q(r,n)})),a=W.lastIndex;return a<e.length&&(i=e.slice(a),s[o]?s[o]+=i:s[++o]=i),s.length<2?l[0]?function(t){return function(e){return t(e)+\\\"\\\"}}(l[0].x):function(t){return function(){return t}}(e):(e=l.length,function(t){for(var r,n=0;n<e;++n)s[(r=l[n]).i]=r.x(t);return s.join(\\\"\\\")})}function J(t,e){e||(e=[]);var r,n=t?Math.min(e.length,t.length):0,i=e.slice();return function(a){for(r=0;r<n;++r)i[r]=t[r]*(1-a)+e[r]*a;return i}}function K(t){return K=\\\"function\\\"==typeof Symbol&&\\\"symbol\\\"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&\\\"function\\\"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?\\\"symbol\\\":typeof t},K(t)}function $(t,e){var r,n,i=K(e);return null==e||\\\"boolean\\\"===i?B(e):(\\\"number\\\"===i?q:\\\"string\\\"===i?(r=_(e))?(e=r,j):X:e instanceof _?j:e instanceof Date?H:(n=e,!ArrayBuffer.isView(n)||n instanceof DataView?Array.isArray(e)?V:\\\"function\\\"!=typeof e.valueOf&&\\\"function\\\"!=typeof e.toString||isNaN(e)?Z:q:J))(t,e)}},40402:function(t){\\\"use strict\\\";t.exports=JSON.parse('[\\\"xx-small\\\",\\\"x-small\\\",\\\"small\\\",\\\"medium\\\",\\\"large\\\",\\\"x-large\\\",\\\"xx-large\\\",\\\"larger\\\",\\\"smaller\\\"]')},83794:function(t){\\\"use strict\\\";t.exports=JSON.parse('[\\\"normal\\\",\\\"condensed\\\",\\\"semi-condensed\\\",\\\"extra-condensed\\\",\\\"ultra-condensed\\\",\\\"expanded\\\",\\\"semi-expanded\\\",\\\"extra-expanded\\\",\\\"ultra-expanded\\\"]')},96209:function(t){\\\"use strict\\\";t.exports=JSON.parse('[\\\"normal\\\",\\\"italic\\\",\\\"oblique\\\"]')},15659:function(t){\\\"use strict\\\";t.exports=JSON.parse('[\\\"normal\\\",\\\"bold\\\",\\\"bolder\\\",\\\"lighter\\\",\\\"100\\\",\\\"200\\\",\\\"300\\\",\\\"400\\\",\\\"500\\\",\\\"600\\\",\\\"700\\\",\\\"800\\\",\\\"900\\\"]')},38732:function(t){\\\"use strict\\\";t.exports=JSON.parse('[\\\"inherit\\\",\\\"initial\\\",\\\"unset\\\"]')},41901:function(t){\\\"use strict\\\";t.exports=JSON.parse('[\\\"caption\\\",\\\"icon\\\",\\\"menu\\\",\\\"message-box\\\",\\\"small-caption\\\",\\\"status-bar\\\"]')}},e={};function r(n){var i=e[n];if(void 0!==i)return i.exports;var a=e[n]={exports:{}};return t[n].call(a.exports,a,a.exports,r),a.exports}return r.n=function(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return r.d(e,{a:e}),e},r.d=function(t,e){for(var n in e)r.o(e,n)&&!r.o(t,n)&&Object.defineProperty(t,n,{enumerable:!0,get:e[n]})},r.g=function(){if(\\\"object\\\"==typeof globalThis)return globalThis;try{return this||new Function(\\\"return this\\\")()}catch(t){if(\\\"object\\\"==typeof window)return window}}(),r.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},r.r=function(t){\\\"undefined\\\"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:\\\"Module\\\"}),Object.defineProperty(t,\\\"__esModule\\\",{value:!0})},r(27909)}()}));\\n\",\n       \"        });\\n\",\n       \"        require(['plotly'], function(Plotly) {\\n\",\n       \"            window._Plotly = Plotly;\\n\",\n       \"        });\\n\",\n       \"        }\\n\",\n       \"        </script>\\n\",\n       \"        \"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"application/vnd.plotly.v1+json\": {\n       \"config\": {\n        \"plotlyServerURL\": \"https://plot.ly\"\n       },\n       \"data\": [\n        {\n         \"line\": {\n          \"color\": \"grey\"\n         },\n         \"mode\": \"lines\",\n         \"name\": \"Aero surface\",\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          -0.4375000000000001,\n          -0.18750000000000006,\n          -0.18750000000000006,\n          -0.4375000000000001,\n          -0.4375000000000001\n         ],\n         \"y\": [\n          -7.126160546901204e-18,\n          -3.054068805814802e-18,\n          0.8,\n          0.8,\n          -7.126160546901204e-18\n         ],\n         \"z\": [\n          -3.7885577460302824e-17,\n          -1.6236676054415498e-17,\n          -1.6236676054415498e-17,\n          -3.7885577460302824e-17,\n          -3.7885577460302824e-17\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"grey\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          -0.4375000000000001,\n          -0.18750000000000006,\n          -0.18750000000000006,\n          -0.4375000000000001,\n          -0.4375000000000001\n         ],\n         \"y\": [\n          0.8,\n          0.8,\n          1.6,\n          1.6,\n          0.8\n         ],\n         \"z\": [\n          -3.7885577460302824e-17,\n          -1.6236676054415498e-17,\n          -1.6236676054415498e-17,\n          -3.7885577460302824e-17,\n          -3.7885577460302824e-17\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"grey\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          -0.4375000000000001,\n          -0.18750000000000006,\n          -0.18750000000000006,\n          -0.4375000000000001,\n          -0.4375000000000001\n         ],\n         \"y\": [\n          1.6,\n          1.6,\n          2.4000000000000004,\n          2.4000000000000004,\n          1.6\n         ],\n         \"z\": [\n          -3.7885577460302824e-17,\n          -1.6236676054415498e-17,\n          -1.6236676054415498e-17,\n          -3.7885577460302824e-17,\n          -3.7885577460302824e-17\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"grey\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          -0.4375000000000001,\n          -0.18750000000000006,\n          -0.18750000000000006,\n          -0.4375000000000001,\n          -0.4375000000000001\n         ],\n         \"y\": [\n          2.4000000000000004,\n          2.4000000000000004,\n          3.2,\n          3.2,\n          2.4000000000000004\n         ],\n         \"z\": [\n          -3.7885577460302824e-17,\n          -1.6236676054415498e-17,\n          -1.6236676054415498e-17,\n          -3.7885577460302824e-17,\n          -3.7885577460302824e-17\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"grey\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          -0.4375000000000001,\n          -0.18750000000000006,\n          -0.18750000000000006,\n          -0.4375000000000001,\n          -0.4375000000000001\n         ],\n         \"y\": [\n          3.2,\n          3.2,\n          4,\n          4,\n          3.2\n         ],\n         \"z\": [\n          -3.7885577460302824e-17,\n          -1.6236676054415498e-17,\n          -1.6236676054415498e-17,\n          -3.7885577460302824e-17,\n          -3.7885577460302824e-17\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"grey\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          -0.4375000000000001,\n          -0.18750000000000006,\n          -0.18750000000000006,\n          -0.4375000000000001,\n          -0.4375000000000001\n         ],\n         \"y\": [\n          4,\n          4,\n          4.800000000000001,\n          4.800000000000001,\n          4\n         ],\n         \"z\": [\n          -3.7885577460302824e-17,\n          -1.6236676054415498e-17,\n          -1.6236676054415498e-17,\n          -3.7885577460302824e-17,\n          -3.7885577460302824e-17\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"grey\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          -0.4375000000000001,\n          -0.18750000000000006,\n          -0.18750000000000006,\n          -0.4375000000000001,\n          -0.4375000000000001\n         ],\n         \"y\": [\n          4.800000000000001,\n          4.800000000000001,\n          5.6000000000000005,\n          5.6000000000000005,\n          4.800000000000001\n         ],\n         \"z\": [\n          -3.7885577460302824e-17,\n          -1.6236676054415498e-17,\n          -1.6236676054415498e-17,\n          -3.7885577460302824e-17,\n          -3.7885577460302824e-17\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"grey\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          -0.4375000000000001,\n          -0.18750000000000006,\n          -0.18750000000000006,\n          -0.4375000000000001,\n          -0.4375000000000001\n         ],\n         \"y\": [\n          5.6000000000000005,\n          5.6000000000000005,\n          6.4,\n          6.4,\n          5.6000000000000005\n         ],\n         \"z\": [\n          -3.7885577460302824e-17,\n          -1.6236676054415498e-17,\n          -1.6236676054415498e-17,\n          -3.7885577460302824e-17,\n          -3.7885577460302824e-17\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"grey\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          -0.4375000000000001,\n          -0.18750000000000006,\n          -0.18750000000000006,\n          -0.4375000000000001,\n          -0.4375000000000001\n         ],\n         \"y\": [\n          6.4,\n          6.4,\n          7.2,\n          7.2,\n          6.4\n         ],\n         \"z\": [\n          -3.7885577460302824e-17,\n          -1.6236676054415498e-17,\n          -1.6236676054415498e-17,\n          -3.7885577460302824e-17,\n          -3.7885577460302824e-17\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"grey\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          -0.4375000000000001,\n          -0.18750000000000006,\n          -0.18750000000000006,\n          -0.4375000000000001,\n          -0.4375000000000001\n         ],\n         \"y\": [\n          7.2,\n          7.2,\n          8,\n          8,\n          7.2\n         ],\n         \"z\": [\n          -3.7885577460302824e-17,\n          -1.6236676054415498e-17,\n          -1.6236676054415498e-17,\n          -3.7885577460302824e-17,\n          -3.7885577460302824e-17\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"grey\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          -0.4375000000000001,\n          -0.18750000000000006,\n          -0.18750000000000006,\n          -0.4375000000000001,\n          -0.4375000000000001\n         ],\n         \"y\": [\n          8,\n          8,\n          8.8,\n          8.8,\n          8\n         ],\n         \"z\": [\n          -3.7885577460302824e-17,\n          -1.6236676054415498e-17,\n          -1.6236676054415498e-17,\n          -3.7885577460302824e-17,\n          -3.7885577460302824e-17\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"grey\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          -0.4375000000000001,\n          -0.18750000000000006,\n          -0.18750000000000006,\n          -0.4375000000000001,\n          -0.4375000000000001\n         ],\n         \"y\": [\n          8.8,\n          8.8,\n          9.600000000000001,\n          9.600000000000001,\n          8.8\n         ],\n         \"z\": [\n          -3.7885577460302824e-17,\n          -1.6236676054415498e-17,\n          -1.6236676054415498e-17,\n          -3.7885577460302824e-17,\n          -3.7885577460302824e-17\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"grey\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          -0.4375000000000001,\n          -0.18750000000000006,\n          -0.18750000000000006,\n          -0.4375000000000001,\n          -0.4375000000000001\n         ],\n         \"y\": [\n          9.600000000000001,\n          9.600000000000001,\n          10.4,\n          10.4,\n          9.600000000000001\n         ],\n         \"z\": [\n          -3.7885577460302824e-17,\n          -1.6236676054415498e-17,\n          -1.6236676054415498e-17,\n          -3.7885577460302824e-17,\n          -3.7885577460302824e-17\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"grey\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          -0.4375000000000001,\n          -0.18750000000000006,\n          -0.18750000000000006,\n          -0.4375000000000001,\n          -0.4375000000000001\n         ],\n         \"y\": [\n          10.4,\n          10.4,\n          11.200000000000001,\n          11.200000000000001,\n          10.4\n         ],\n         \"z\": [\n          -3.7885577460302824e-17,\n          -1.6236676054415498e-17,\n          -1.6236676054415498e-17,\n          -3.7885577460302824e-17,\n          -3.7885577460302824e-17\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"grey\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          -0.4375000000000001,\n          -0.18750000000000006,\n          -0.18750000000000006,\n          -0.4375000000000001,\n          -0.4375000000000001\n         ],\n         \"y\": [\n          11.200000000000001,\n          11.200000000000001,\n          12,\n          12,\n          11.200000000000001\n         ],\n         \"z\": [\n          -3.7885577460302824e-17,\n          -1.6236676054415498e-17,\n          -1.6236676054415498e-17,\n          -3.7885577460302824e-17,\n          -3.7885577460302824e-17\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"grey\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          -0.4375000000000001,\n          -0.18750000000000006,\n          -0.18750000000000006,\n          -0.4375000000000001,\n          -0.4375000000000001\n         ],\n         \"y\": [\n          12,\n          12,\n          12.8,\n          12.8,\n          12\n         ],\n         \"z\": [\n          -3.7885577460302824e-17,\n          -1.6236676054415498e-17,\n          -1.6236676054415498e-17,\n          -3.7885577460302824e-17,\n          -3.7885577460302824e-17\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"grey\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          -0.4375000000000001,\n          -0.18750000000000006,\n          -0.18750000000000006,\n          -0.4375000000000001,\n          -0.4375000000000001\n         ],\n         \"y\": [\n          12.8,\n          12.8,\n          13.600000000000001,\n          13.600000000000001,\n          12.8\n         ],\n         \"z\": [\n          -3.7885577460302824e-17,\n          -1.6236676054415498e-17,\n          -1.6236676054415498e-17,\n          -3.7885577460302824e-17,\n          -3.7885577460302824e-17\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"grey\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          -0.4375000000000001,\n          -0.18750000000000006,\n          -0.18750000000000006,\n          -0.4375000000000001,\n          -0.4375000000000001\n         ],\n         \"y\": [\n          13.600000000000001,\n          13.600000000000001,\n          14.4,\n          14.4,\n          13.600000000000001\n         ],\n         \"z\": [\n          -3.7885577460302824e-17,\n          -1.6236676054415498e-17,\n          -1.6236676054415498e-17,\n          -3.7885577460302824e-17,\n          -3.7885577460302824e-17\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"grey\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          -0.4375000000000001,\n          -0.18750000000000006,\n          -0.18750000000000006,\n          -0.4375000000000001,\n          -0.4375000000000001\n         ],\n         \"y\": [\n          14.4,\n          14.4,\n          15.200000000000001,\n          15.200000000000001,\n          14.4\n         ],\n         \"z\": [\n          -3.7885577460302824e-17,\n          -1.6236676054415498e-17,\n          -1.6236676054415498e-17,\n          -3.7885577460302824e-17,\n          -3.7885577460302824e-17\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"grey\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          -0.4375000000000001,\n          -0.18750000000000006,\n          -0.18750000000000006,\n          -0.4375000000000001,\n          -0.4375000000000001\n         ],\n         \"y\": [\n          15.200000000000001,\n          15.200000000000001,\n          16,\n          16,\n          15.200000000000001\n         ],\n         \"z\": [\n          -3.7885577460302824e-17,\n          -1.6236676054415498e-17,\n          -1.6236676054415498e-17,\n          -3.7885577460302824e-17,\n          -3.7885577460302824e-17\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"grey\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          -0.18750000000000006,\n          0.06250000000000001,\n          0.06250000000000001,\n          -0.18750000000000006,\n          -0.18750000000000006\n         ],\n         \"y\": [\n          -3.054068805814802e-18,\n          1.0180229352716006e-18,\n          0.8,\n          0.8,\n          -3.054068805814802e-18\n         ],\n         \"z\": [\n          -1.6236676054415498e-17,\n          5.412225351471832e-18,\n          5.412225351471832e-18,\n          -1.6236676054415498e-17,\n          -1.6236676054415498e-17\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"grey\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          -0.18750000000000006,\n          0.06250000000000001,\n          0.06250000000000001,\n          -0.18750000000000006,\n          -0.18750000000000006\n         ],\n         \"y\": [\n          0.8,\n          0.8,\n          1.6,\n          1.6,\n          0.8\n         ],\n         \"z\": [\n          -1.6236676054415498e-17,\n          5.412225351471832e-18,\n          5.412225351471832e-18,\n          -1.6236676054415498e-17,\n          -1.6236676054415498e-17\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"grey\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          -0.18750000000000006,\n          0.06250000000000001,\n          0.06250000000000001,\n          -0.18750000000000006,\n          -0.18750000000000006\n         ],\n         \"y\": [\n          1.6,\n          1.6,\n          2.4000000000000004,\n          2.4000000000000004,\n          1.6\n         ],\n         \"z\": [\n          -1.6236676054415498e-17,\n          5.412225351471832e-18,\n          5.412225351471832e-18,\n          -1.6236676054415498e-17,\n          -1.6236676054415498e-17\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"grey\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          -0.18750000000000006,\n          0.06250000000000001,\n          0.06250000000000001,\n          -0.18750000000000006,\n          -0.18750000000000006\n         ],\n         \"y\": [\n          2.4000000000000004,\n          2.4000000000000004,\n          3.2,\n          3.2,\n          2.4000000000000004\n         ],\n         \"z\": [\n          -1.6236676054415498e-17,\n          5.412225351471832e-18,\n          5.412225351471832e-18,\n          -1.6236676054415498e-17,\n          -1.6236676054415498e-17\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"grey\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          -0.18750000000000006,\n          0.06250000000000001,\n          0.06250000000000001,\n          -0.18750000000000006,\n          -0.18750000000000006\n         ],\n         \"y\": [\n          3.2,\n          3.2,\n          4,\n          4,\n          3.2\n         ],\n         \"z\": [\n          -1.6236676054415498e-17,\n          5.412225351471832e-18,\n          5.412225351471832e-18,\n          -1.6236676054415498e-17,\n          -1.6236676054415498e-17\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"grey\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          -0.18750000000000006,\n          0.06250000000000001,\n          0.06250000000000001,\n          -0.18750000000000006,\n          -0.18750000000000006\n         ],\n         \"y\": [\n          4,\n          4,\n          4.800000000000001,\n          4.800000000000001,\n          4\n         ],\n         \"z\": [\n          -1.6236676054415498e-17,\n          5.412225351471832e-18,\n          5.412225351471832e-18,\n          -1.6236676054415498e-17,\n          -1.6236676054415498e-17\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"grey\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          -0.18750000000000006,\n          0.06250000000000001,\n          0.06250000000000001,\n          -0.18750000000000006,\n          -0.18750000000000006\n         ],\n         \"y\": [\n          4.800000000000001,\n          4.800000000000001,\n          5.6000000000000005,\n          5.6000000000000005,\n          4.800000000000001\n         ],\n         \"z\": [\n          -1.6236676054415498e-17,\n          5.412225351471832e-18,\n          5.412225351471832e-18,\n          -1.6236676054415498e-17,\n          -1.6236676054415498e-17\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"grey\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          -0.18750000000000006,\n          0.06250000000000001,\n          0.06250000000000001,\n          -0.18750000000000006,\n          -0.18750000000000006\n         ],\n         \"y\": [\n          5.6000000000000005,\n          5.6000000000000005,\n          6.4,\n          6.4,\n          5.6000000000000005\n         ],\n         \"z\": [\n          -1.6236676054415498e-17,\n          5.412225351471832e-18,\n          5.412225351471832e-18,\n          -1.6236676054415498e-17,\n          -1.6236676054415498e-17\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"grey\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          -0.18750000000000006,\n          0.06250000000000001,\n          0.06250000000000001,\n          -0.18750000000000006,\n          -0.18750000000000006\n         ],\n         \"y\": [\n          6.4,\n          6.4,\n          7.2,\n          7.2,\n          6.4\n         ],\n         \"z\": [\n          -1.6236676054415498e-17,\n          5.412225351471832e-18,\n          5.412225351471832e-18,\n          -1.6236676054415498e-17,\n          -1.6236676054415498e-17\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"grey\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          -0.18750000000000006,\n          0.06250000000000001,\n          0.06250000000000001,\n          -0.18750000000000006,\n          -0.18750000000000006\n         ],\n         \"y\": [\n          7.2,\n          7.2,\n          8,\n          8,\n          7.2\n         ],\n         \"z\": [\n          -1.6236676054415498e-17,\n          5.412225351471832e-18,\n          5.412225351471832e-18,\n          -1.6236676054415498e-17,\n          -1.6236676054415498e-17\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"grey\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          -0.18750000000000006,\n          0.06250000000000001,\n          0.06250000000000001,\n          -0.18750000000000006,\n          -0.18750000000000006\n         ],\n         \"y\": [\n          8,\n          8,\n          8.8,\n          8.8,\n          8\n         ],\n         \"z\": [\n          -1.6236676054415498e-17,\n          5.412225351471832e-18,\n          5.412225351471832e-18,\n          -1.6236676054415498e-17,\n          -1.6236676054415498e-17\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"grey\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          -0.18750000000000006,\n          0.06250000000000001,\n          0.06250000000000001,\n          -0.18750000000000006,\n          -0.18750000000000006\n         ],\n         \"y\": [\n          8.8,\n          8.8,\n          9.600000000000001,\n          9.600000000000001,\n          8.8\n         ],\n         \"z\": [\n          -1.6236676054415498e-17,\n          5.412225351471832e-18,\n          5.412225351471832e-18,\n          -1.6236676054415498e-17,\n          -1.6236676054415498e-17\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"grey\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          -0.18750000000000006,\n          0.06250000000000001,\n          0.06250000000000001,\n          -0.18750000000000006,\n          -0.18750000000000006\n         ],\n         \"y\": [\n          9.600000000000001,\n          9.600000000000001,\n          10.4,\n          10.4,\n          9.600000000000001\n         ],\n         \"z\": [\n          -1.6236676054415498e-17,\n          5.412225351471832e-18,\n          5.412225351471832e-18,\n          -1.6236676054415498e-17,\n          -1.6236676054415498e-17\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"grey\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          -0.18750000000000006,\n          0.06250000000000001,\n          0.06250000000000001,\n          -0.18750000000000006,\n          -0.18750000000000006\n         ],\n         \"y\": [\n          10.4,\n          10.4,\n          11.200000000000001,\n          11.200000000000001,\n          10.4\n         ],\n         \"z\": [\n          -1.6236676054415498e-17,\n          5.412225351471832e-18,\n          5.412225351471832e-18,\n          -1.6236676054415498e-17,\n          -1.6236676054415498e-17\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"grey\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          -0.18750000000000006,\n          0.06250000000000001,\n          0.06250000000000001,\n          -0.18750000000000006,\n          -0.18750000000000006\n         ],\n         \"y\": [\n          11.200000000000001,\n          11.200000000000001,\n          12,\n          12,\n          11.200000000000001\n         ],\n         \"z\": [\n          -1.6236676054415498e-17,\n          5.412225351471832e-18,\n          5.412225351471832e-18,\n          -1.6236676054415498e-17,\n          -1.6236676054415498e-17\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"grey\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          -0.18750000000000006,\n          0.06250000000000001,\n          0.06250000000000001,\n          -0.18750000000000006,\n          -0.18750000000000006\n         ],\n         \"y\": [\n          12,\n          12,\n          12.8,\n          12.8,\n          12\n         ],\n         \"z\": [\n          -1.6236676054415498e-17,\n          5.412225351471832e-18,\n          5.412225351471832e-18,\n          -1.6236676054415498e-17,\n          -1.6236676054415498e-17\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"grey\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          -0.18750000000000006,\n          0.06250000000000001,\n          0.06250000000000001,\n          -0.18750000000000006,\n          -0.18750000000000006\n         ],\n         \"y\": [\n          12.8,\n          12.8,\n          13.600000000000001,\n          13.600000000000001,\n          12.8\n         ],\n         \"z\": [\n          -1.6236676054415498e-17,\n          5.412225351471832e-18,\n          5.412225351471832e-18,\n          -1.6236676054415498e-17,\n          -1.6236676054415498e-17\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"grey\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          -0.18750000000000006,\n          0.06250000000000001,\n          0.06250000000000001,\n          -0.18750000000000006,\n          -0.18750000000000006\n         ],\n         \"y\": [\n          13.600000000000001,\n          13.600000000000001,\n          14.4,\n          14.4,\n          13.600000000000001\n         ],\n         \"z\": [\n          -1.6236676054415498e-17,\n          5.412225351471832e-18,\n          5.412225351471832e-18,\n          -1.6236676054415498e-17,\n          -1.6236676054415498e-17\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"grey\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          -0.18750000000000006,\n          0.06250000000000001,\n          0.06250000000000001,\n          -0.18750000000000006,\n          -0.18750000000000006\n         ],\n         \"y\": [\n          14.4,\n          14.4,\n          15.200000000000001,\n          15.200000000000001,\n          14.4\n         ],\n         \"z\": [\n          -1.6236676054415498e-17,\n          5.412225351471832e-18,\n          5.412225351471832e-18,\n          -1.6236676054415498e-17,\n          -1.6236676054415498e-17\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"grey\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          -0.18750000000000006,\n          0.06250000000000001,\n          0.06250000000000001,\n          -0.18750000000000006,\n          -0.18750000000000006\n         ],\n         \"y\": [\n          15.200000000000001,\n          15.200000000000001,\n          16,\n          16,\n          15.200000000000001\n         ],\n         \"z\": [\n          -1.6236676054415498e-17,\n          5.412225351471832e-18,\n          5.412225351471832e-18,\n          -1.6236676054415498e-17,\n          -1.6236676054415498e-17\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"grey\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          0.06250000000000001,\n          0.31250000000000006,\n          0.31250000000000006,\n          0.06250000000000001,\n          0.06250000000000001\n         ],\n         \"y\": [\n          1.0180229352716006e-18,\n          5.090114676358003e-18,\n          0.8,\n          0.8,\n          1.0180229352716006e-18\n         ],\n         \"z\": [\n          5.412225351471832e-18,\n          2.706112675735916e-17,\n          2.706112675735916e-17,\n          5.412225351471832e-18,\n          5.412225351471832e-18\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"grey\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          0.06250000000000001,\n          0.31250000000000006,\n          0.31250000000000006,\n          0.06250000000000001,\n          0.06250000000000001\n         ],\n         \"y\": [\n          0.8,\n          0.8,\n          1.6,\n          1.6,\n          0.8\n         ],\n         \"z\": [\n          5.412225351471832e-18,\n          2.706112675735916e-17,\n          2.706112675735916e-17,\n          5.412225351471832e-18,\n          5.412225351471832e-18\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"grey\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          0.06250000000000001,\n          0.31250000000000006,\n          0.31250000000000006,\n          0.06250000000000001,\n          0.06250000000000001\n         ],\n         \"y\": [\n          1.6,\n          1.6,\n          2.4000000000000004,\n          2.4000000000000004,\n          1.6\n         ],\n         \"z\": [\n          5.412225351471832e-18,\n          2.706112675735916e-17,\n          2.706112675735916e-17,\n          5.412225351471832e-18,\n          5.412225351471832e-18\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"grey\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          0.06250000000000001,\n          0.31250000000000006,\n          0.31250000000000006,\n          0.06250000000000001,\n          0.06250000000000001\n         ],\n         \"y\": [\n          2.4000000000000004,\n          2.4000000000000004,\n          3.2,\n          3.2,\n          2.4000000000000004\n         ],\n         \"z\": [\n          5.412225351471832e-18,\n          2.706112675735916e-17,\n          2.706112675735916e-17,\n          5.412225351471832e-18,\n          5.412225351471832e-18\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"grey\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          0.06250000000000001,\n          0.31250000000000006,\n          0.31250000000000006,\n          0.06250000000000001,\n          0.06250000000000001\n         ],\n         \"y\": [\n          3.2,\n          3.2,\n          4,\n          4,\n          3.2\n         ],\n         \"z\": [\n          5.412225351471832e-18,\n          2.706112675735916e-17,\n          2.706112675735916e-17,\n          5.412225351471832e-18,\n          5.412225351471832e-18\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"grey\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          0.06250000000000001,\n          0.31250000000000006,\n          0.31250000000000006,\n          0.06250000000000001,\n          0.06250000000000001\n         ],\n         \"y\": [\n          4,\n          4,\n          4.800000000000001,\n          4.800000000000001,\n          4\n         ],\n         \"z\": [\n          5.412225351471832e-18,\n          2.706112675735916e-17,\n          2.706112675735916e-17,\n          5.412225351471832e-18,\n          5.412225351471832e-18\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"grey\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          0.06250000000000001,\n          0.31250000000000006,\n          0.31250000000000006,\n          0.06250000000000001,\n          0.06250000000000001\n         ],\n         \"y\": [\n          4.800000000000001,\n          4.800000000000001,\n          5.6000000000000005,\n          5.6000000000000005,\n          4.800000000000001\n         ],\n         \"z\": [\n          5.412225351471832e-18,\n          2.706112675735916e-17,\n          2.706112675735916e-17,\n          5.412225351471832e-18,\n          5.412225351471832e-18\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"grey\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          0.06250000000000001,\n          0.31250000000000006,\n          0.31250000000000006,\n          0.06250000000000001,\n          0.06250000000000001\n         ],\n         \"y\": [\n          5.6000000000000005,\n          5.6000000000000005,\n          6.4,\n          6.4,\n          5.6000000000000005\n         ],\n         \"z\": [\n          5.412225351471832e-18,\n          2.706112675735916e-17,\n          2.706112675735916e-17,\n          5.412225351471832e-18,\n          5.412225351471832e-18\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"grey\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          0.06250000000000001,\n          0.31250000000000006,\n          0.31250000000000006,\n          0.06250000000000001,\n          0.06250000000000001\n         ],\n         \"y\": [\n          6.4,\n          6.4,\n          7.2,\n          7.2,\n          6.4\n         ],\n         \"z\": [\n          5.412225351471832e-18,\n          2.706112675735916e-17,\n          2.706112675735916e-17,\n          5.412225351471832e-18,\n          5.412225351471832e-18\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"grey\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          0.06250000000000001,\n          0.31250000000000006,\n          0.31250000000000006,\n          0.06250000000000001,\n          0.06250000000000001\n         ],\n         \"y\": [\n          7.2,\n          7.2,\n          8,\n          8,\n          7.2\n         ],\n         \"z\": [\n          5.412225351471832e-18,\n          2.706112675735916e-17,\n          2.706112675735916e-17,\n          5.412225351471832e-18,\n          5.412225351471832e-18\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"grey\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          0.06250000000000001,\n          0.31250000000000006,\n          0.31250000000000006,\n          0.06250000000000001,\n          0.06250000000000001\n         ],\n         \"y\": [\n          8,\n          8,\n          8.8,\n          8.8,\n          8\n         ],\n         \"z\": [\n          5.412225351471832e-18,\n          2.706112675735916e-17,\n          2.706112675735916e-17,\n          5.412225351471832e-18,\n          5.412225351471832e-18\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"grey\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          0.06250000000000001,\n          0.31250000000000006,\n          0.31250000000000006,\n          0.06250000000000001,\n          0.06250000000000001\n         ],\n         \"y\": [\n          8.8,\n          8.8,\n          9.600000000000001,\n          9.600000000000001,\n          8.8\n         ],\n         \"z\": [\n          5.412225351471832e-18,\n          2.706112675735916e-17,\n          2.706112675735916e-17,\n          5.412225351471832e-18,\n          5.412225351471832e-18\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"grey\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          0.06250000000000001,\n          0.31250000000000006,\n          0.31250000000000006,\n          0.06250000000000001,\n          0.06250000000000001\n         ],\n         \"y\": [\n          9.600000000000001,\n          9.600000000000001,\n          10.4,\n          10.4,\n          9.600000000000001\n         ],\n         \"z\": [\n          5.412225351471832e-18,\n          2.706112675735916e-17,\n          2.706112675735916e-17,\n          5.412225351471832e-18,\n          5.412225351471832e-18\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"grey\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          0.06250000000000001,\n          0.31250000000000006,\n          0.31250000000000006,\n          0.06250000000000001,\n          0.06250000000000001\n         ],\n         \"y\": [\n          10.4,\n          10.4,\n          11.200000000000001,\n          11.200000000000001,\n          10.4\n         ],\n         \"z\": [\n          5.412225351471832e-18,\n          2.706112675735916e-17,\n          2.706112675735916e-17,\n          5.412225351471832e-18,\n          5.412225351471832e-18\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"grey\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          0.06250000000000001,\n          0.31250000000000006,\n          0.31250000000000006,\n          0.06250000000000001,\n          0.06250000000000001\n         ],\n         \"y\": [\n          11.200000000000001,\n          11.200000000000001,\n          12,\n          12,\n          11.200000000000001\n         ],\n         \"z\": [\n          5.412225351471832e-18,\n          2.706112675735916e-17,\n          2.706112675735916e-17,\n          5.412225351471832e-18,\n          5.412225351471832e-18\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"grey\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          0.06250000000000001,\n          0.31250000000000006,\n          0.31250000000000006,\n          0.06250000000000001,\n          0.06250000000000001\n         ],\n         \"y\": [\n          12,\n          12,\n          12.8,\n          12.8,\n          12\n         ],\n         \"z\": [\n          5.412225351471832e-18,\n          2.706112675735916e-17,\n          2.706112675735916e-17,\n          5.412225351471832e-18,\n          5.412225351471832e-18\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"grey\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          0.06250000000000001,\n          0.31250000000000006,\n          0.31250000000000006,\n          0.06250000000000001,\n          0.06250000000000001\n         ],\n         \"y\": [\n          12.8,\n          12.8,\n          13.600000000000001,\n          13.600000000000001,\n          12.8\n         ],\n         \"z\": [\n          5.412225351471832e-18,\n          2.706112675735916e-17,\n          2.706112675735916e-17,\n          5.412225351471832e-18,\n          5.412225351471832e-18\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"grey\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          0.06250000000000001,\n          0.31250000000000006,\n          0.31250000000000006,\n          0.06250000000000001,\n          0.06250000000000001\n         ],\n         \"y\": [\n          13.600000000000001,\n          13.600000000000001,\n          14.4,\n          14.4,\n          13.600000000000001\n         ],\n         \"z\": [\n          5.412225351471832e-18,\n          2.706112675735916e-17,\n          2.706112675735916e-17,\n          5.412225351471832e-18,\n          5.412225351471832e-18\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"grey\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          0.06250000000000001,\n          0.31250000000000006,\n          0.31250000000000006,\n          0.06250000000000001,\n          0.06250000000000001\n         ],\n         \"y\": [\n          14.4,\n          14.4,\n          15.200000000000001,\n          15.200000000000001,\n          14.4\n         ],\n         \"z\": [\n          5.412225351471832e-18,\n          2.706112675735916e-17,\n          2.706112675735916e-17,\n          5.412225351471832e-18,\n          5.412225351471832e-18\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"grey\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          0.06250000000000001,\n          0.31250000000000006,\n          0.31250000000000006,\n          0.06250000000000001,\n          0.06250000000000001\n         ],\n         \"y\": [\n          15.200000000000001,\n          15.200000000000001,\n          16,\n          16,\n          15.200000000000001\n         ],\n         \"z\": [\n          5.412225351471832e-18,\n          2.706112675735916e-17,\n          2.706112675735916e-17,\n          5.412225351471832e-18,\n          5.412225351471832e-18\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"grey\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          0.31250000000000006,\n          0.5625000000000001,\n          0.5625000000000001,\n          0.31250000000000006,\n          0.31250000000000006\n         ],\n         \"y\": [\n          5.090114676358003e-18,\n          9.162206417444405e-18,\n          0.8,\n          0.8,\n          5.090114676358003e-18\n         ],\n         \"z\": [\n          2.706112675735916e-17,\n          4.871002816324649e-17,\n          4.871002816324649e-17,\n          2.706112675735916e-17,\n          2.706112675735916e-17\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"grey\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          0.31250000000000006,\n          0.5625000000000001,\n          0.5625000000000001,\n          0.31250000000000006,\n          0.31250000000000006\n         ],\n         \"y\": [\n          0.8,\n          0.8,\n          1.6,\n          1.6,\n          0.8\n         ],\n         \"z\": [\n          2.706112675735916e-17,\n          4.871002816324649e-17,\n          4.871002816324649e-17,\n          2.706112675735916e-17,\n          2.706112675735916e-17\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"grey\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          0.31250000000000006,\n          0.5625000000000001,\n          0.5625000000000001,\n          0.31250000000000006,\n          0.31250000000000006\n         ],\n         \"y\": [\n          1.6,\n          1.6,\n          2.4000000000000004,\n          2.4000000000000004,\n          1.6\n         ],\n         \"z\": [\n          2.706112675735916e-17,\n          4.871002816324649e-17,\n          4.871002816324649e-17,\n          2.706112675735916e-17,\n          2.706112675735916e-17\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"grey\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          0.31250000000000006,\n          0.5625000000000001,\n          0.5625000000000001,\n          0.31250000000000006,\n          0.31250000000000006\n         ],\n         \"y\": [\n          2.4000000000000004,\n          2.4000000000000004,\n          3.2,\n          3.2,\n          2.4000000000000004\n         ],\n         \"z\": [\n          2.706112675735916e-17,\n          4.871002816324649e-17,\n          4.871002816324649e-17,\n          2.706112675735916e-17,\n          2.706112675735916e-17\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"grey\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          0.31250000000000006,\n          0.5625000000000001,\n          0.5625000000000001,\n          0.31250000000000006,\n          0.31250000000000006\n         ],\n         \"y\": [\n          3.2,\n          3.2,\n          4,\n          4,\n          3.2\n         ],\n         \"z\": [\n          2.706112675735916e-17,\n          4.871002816324649e-17,\n          4.871002816324649e-17,\n          2.706112675735916e-17,\n          2.706112675735916e-17\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"grey\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          0.31250000000000006,\n          0.5625000000000001,\n          0.5625000000000001,\n          0.31250000000000006,\n          0.31250000000000006\n         ],\n         \"y\": [\n          4,\n          4,\n          4.800000000000001,\n          4.800000000000001,\n          4\n         ],\n         \"z\": [\n          2.706112675735916e-17,\n          4.871002816324649e-17,\n          4.871002816324649e-17,\n          2.706112675735916e-17,\n          2.706112675735916e-17\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"grey\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          0.31250000000000006,\n          0.5625000000000001,\n          0.5625000000000001,\n          0.31250000000000006,\n          0.31250000000000006\n         ],\n         \"y\": [\n          4.800000000000001,\n          4.800000000000001,\n          5.6000000000000005,\n          5.6000000000000005,\n          4.800000000000001\n         ],\n         \"z\": [\n          2.706112675735916e-17,\n          4.871002816324649e-17,\n          4.871002816324649e-17,\n          2.706112675735916e-17,\n          2.706112675735916e-17\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"grey\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          0.31250000000000006,\n          0.5625000000000001,\n          0.5625000000000001,\n          0.31250000000000006,\n          0.31250000000000006\n         ],\n         \"y\": [\n          5.6000000000000005,\n          5.6000000000000005,\n          6.4,\n          6.4,\n          5.6000000000000005\n         ],\n         \"z\": [\n          2.706112675735916e-17,\n          4.871002816324649e-17,\n          4.871002816324649e-17,\n          2.706112675735916e-17,\n          2.706112675735916e-17\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"grey\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          0.31250000000000006,\n          0.5625000000000001,\n          0.5625000000000001,\n          0.31250000000000006,\n          0.31250000000000006\n         ],\n         \"y\": [\n          6.4,\n          6.4,\n          7.2,\n          7.2,\n          6.4\n         ],\n         \"z\": [\n          2.706112675735916e-17,\n          4.871002816324649e-17,\n          4.871002816324649e-17,\n          2.706112675735916e-17,\n          2.706112675735916e-17\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"grey\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          0.31250000000000006,\n          0.5625000000000001,\n          0.5625000000000001,\n          0.31250000000000006,\n          0.31250000000000006\n         ],\n         \"y\": [\n          7.2,\n          7.2,\n          8,\n          8,\n          7.2\n         ],\n         \"z\": [\n          2.706112675735916e-17,\n          4.871002816324649e-17,\n          4.871002816324649e-17,\n          2.706112675735916e-17,\n          2.706112675735916e-17\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"grey\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          0.31250000000000006,\n          0.5625000000000001,\n          0.5625000000000001,\n          0.31250000000000006,\n          0.31250000000000006\n         ],\n         \"y\": [\n          8,\n          8,\n          8.8,\n          8.8,\n          8\n         ],\n         \"z\": [\n          2.706112675735916e-17,\n          4.871002816324649e-17,\n          4.871002816324649e-17,\n          2.706112675735916e-17,\n          2.706112675735916e-17\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"grey\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          0.31250000000000006,\n          0.5625000000000001,\n          0.5625000000000001,\n          0.31250000000000006,\n          0.31250000000000006\n         ],\n         \"y\": [\n          8.8,\n          8.8,\n          9.600000000000001,\n          9.600000000000001,\n          8.8\n         ],\n         \"z\": [\n          2.706112675735916e-17,\n          4.871002816324649e-17,\n          4.871002816324649e-17,\n          2.706112675735916e-17,\n          2.706112675735916e-17\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"grey\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          0.31250000000000006,\n          0.5625000000000001,\n          0.5625000000000001,\n          0.31250000000000006,\n          0.31250000000000006\n         ],\n         \"y\": [\n          9.600000000000001,\n          9.600000000000001,\n          10.4,\n          10.4,\n          9.600000000000001\n         ],\n         \"z\": [\n          2.706112675735916e-17,\n          4.871002816324649e-17,\n          4.871002816324649e-17,\n          2.706112675735916e-17,\n          2.706112675735916e-17\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"grey\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          0.31250000000000006,\n          0.5625000000000001,\n          0.5625000000000001,\n          0.31250000000000006,\n          0.31250000000000006\n         ],\n         \"y\": [\n          10.4,\n          10.4,\n          11.200000000000001,\n          11.200000000000001,\n          10.4\n         ],\n         \"z\": [\n          2.706112675735916e-17,\n          4.871002816324649e-17,\n          4.871002816324649e-17,\n          2.706112675735916e-17,\n          2.706112675735916e-17\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"grey\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          0.31250000000000006,\n          0.5625000000000001,\n          0.5625000000000001,\n          0.31250000000000006,\n          0.31250000000000006\n         ],\n         \"y\": [\n          11.200000000000001,\n          11.200000000000001,\n          12,\n          12,\n          11.200000000000001\n         ],\n         \"z\": [\n          2.706112675735916e-17,\n          4.871002816324649e-17,\n          4.871002816324649e-17,\n          2.706112675735916e-17,\n          2.706112675735916e-17\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"grey\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          0.31250000000000006,\n          0.5625000000000001,\n          0.5625000000000001,\n          0.31250000000000006,\n          0.31250000000000006\n         ],\n         \"y\": [\n          12,\n          12,\n          12.8,\n          12.8,\n          12\n         ],\n         \"z\": [\n          2.706112675735916e-17,\n          4.871002816324649e-17,\n          4.871002816324649e-17,\n          2.706112675735916e-17,\n          2.706112675735916e-17\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"grey\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          0.31250000000000006,\n          0.5625000000000001,\n          0.5625000000000001,\n          0.31250000000000006,\n          0.31250000000000006\n         ],\n         \"y\": [\n          12.8,\n          12.8,\n          13.600000000000001,\n          13.600000000000001,\n          12.8\n         ],\n         \"z\": [\n          2.706112675735916e-17,\n          4.871002816324649e-17,\n          4.871002816324649e-17,\n          2.706112675735916e-17,\n          2.706112675735916e-17\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"grey\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          0.31250000000000006,\n          0.5625000000000001,\n          0.5625000000000001,\n          0.31250000000000006,\n          0.31250000000000006\n         ],\n         \"y\": [\n          13.600000000000001,\n          13.600000000000001,\n          14.4,\n          14.4,\n          13.600000000000001\n         ],\n         \"z\": [\n          2.706112675735916e-17,\n          4.871002816324649e-17,\n          4.871002816324649e-17,\n          2.706112675735916e-17,\n          2.706112675735916e-17\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"grey\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          0.31250000000000006,\n          0.5625000000000001,\n          0.5625000000000001,\n          0.31250000000000006,\n          0.31250000000000006\n         ],\n         \"y\": [\n          14.4,\n          14.4,\n          15.200000000000001,\n          15.200000000000001,\n          14.4\n         ],\n         \"z\": [\n          2.706112675735916e-17,\n          4.871002816324649e-17,\n          4.871002816324649e-17,\n          2.706112675735916e-17,\n          2.706112675735916e-17\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"grey\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          0.31250000000000006,\n          0.5625000000000001,\n          0.5625000000000001,\n          0.31250000000000006,\n          0.31250000000000006\n         ],\n         \"y\": [\n          15.200000000000001,\n          15.200000000000001,\n          16,\n          16,\n          15.200000000000001\n         ],\n         \"z\": [\n          2.706112675735916e-17,\n          4.871002816324649e-17,\n          4.871002816324649e-17,\n          2.706112675735916e-17,\n          2.706112675735916e-17\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"black\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          -0.4375000000000001,\n          -0.4375000000000001,\n          -0.4375000000000001,\n          -0.4375000000000001,\n          -0.4375000000000001,\n          -0.4375000000000001,\n          -0.4375000000000001,\n          -0.4375000000000001,\n          -0.4375000000000001,\n          -0.4375000000000001,\n          -0.4375000000000001,\n          -0.4375000000000001,\n          -0.4375000000000001,\n          -0.4375000000000001,\n          -0.4375000000000001,\n          -0.4375000000000001,\n          -0.4375000000000001,\n          -0.4375000000000001,\n          -0.4375000000000001,\n          -0.4375000000000001,\n          -0.4375000000000001\n         ],\n         \"y\": [\n          -7.126160546901204e-18,\n          0.8,\n          1.6,\n          2.4000000000000004,\n          3.2,\n          4,\n          4.800000000000001,\n          5.6000000000000005,\n          6.4,\n          7.2,\n          8,\n          8.8,\n          9.600000000000001,\n          10.4,\n          11.200000000000001,\n          12,\n          12.8,\n          13.600000000000001,\n          14.4,\n          15.200000000000001,\n          16\n         ],\n         \"z\": [\n          -3.7885577460302824e-17,\n          -3.7885577460302824e-17,\n          -3.7885577460302824e-17,\n          -3.7885577460302824e-17,\n          -3.7885577460302824e-17,\n          -3.7885577460302824e-17,\n          -3.7885577460302824e-17,\n          -3.7885577460302824e-17,\n          -3.7885577460302824e-17,\n          -3.7885577460302824e-17,\n          -3.7885577460302824e-17,\n          -3.7885577460302824e-17,\n          -3.7885577460302824e-17,\n          -3.7885577460302824e-17,\n          -3.7885577460302824e-17,\n          -3.7885577460302824e-17,\n          -3.7885577460302824e-17,\n          -3.7885577460302824e-17,\n          -3.7885577460302824e-17,\n          -3.7885577460302824e-17,\n          -3.7885577460302824e-17\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"black\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          -0.18750000000000006,\n          -0.18750000000000006,\n          -0.18750000000000006,\n          -0.18750000000000006,\n          -0.18750000000000006,\n          -0.18750000000000006,\n          -0.18750000000000006,\n          -0.18750000000000006,\n          -0.18750000000000006,\n          -0.18750000000000006,\n          -0.18750000000000006,\n          -0.18750000000000006,\n          -0.18750000000000006,\n          -0.18750000000000006,\n          -0.18750000000000006,\n          -0.18750000000000006,\n          -0.18750000000000006,\n          -0.18750000000000006,\n          -0.18750000000000006,\n          -0.18750000000000006,\n          -0.18750000000000006\n         ],\n         \"y\": [\n          -3.054068805814802e-18,\n          0.8,\n          1.6,\n          2.4000000000000004,\n          3.2,\n          4,\n          4.800000000000001,\n          5.6000000000000005,\n          6.4,\n          7.2,\n          8,\n          8.8,\n          9.600000000000001,\n          10.4,\n          11.200000000000001,\n          12,\n          12.8,\n          13.600000000000001,\n          14.4,\n          15.200000000000001,\n          16\n         ],\n         \"z\": [\n          -1.6236676054415498e-17,\n          -1.6236676054415498e-17,\n          -1.6236676054415498e-17,\n          -1.6236676054415498e-17,\n          -1.6236676054415498e-17,\n          -1.6236676054415498e-17,\n          -1.6236676054415498e-17,\n          -1.6236676054415498e-17,\n          -1.6236676054415498e-17,\n          -1.6236676054415498e-17,\n          -1.6236676054415498e-17,\n          -1.6236676054415498e-17,\n          -1.6236676054415498e-17,\n          -1.6236676054415498e-17,\n          -1.6236676054415498e-17,\n          -1.6236676054415498e-17,\n          -1.6236676054415498e-17,\n          -1.6236676054415498e-17,\n          -1.6236676054415498e-17,\n          -1.6236676054415498e-17,\n          -1.6236676054415498e-17\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"black\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          0.06250000000000001,\n          0.06250000000000001,\n          0.06250000000000001,\n          0.06250000000000001,\n          0.06250000000000001,\n          0.06250000000000001,\n          0.06250000000000001,\n          0.06250000000000001,\n          0.06250000000000001,\n          0.06250000000000001,\n          0.06250000000000001,\n          0.06250000000000001,\n          0.06250000000000001,\n          0.06250000000000001,\n          0.06250000000000001,\n          0.06250000000000001,\n          0.06250000000000001,\n          0.06250000000000001,\n          0.06250000000000001,\n          0.06250000000000001,\n          0.06250000000000001\n         ],\n         \"y\": [\n          1.0180229352716006e-18,\n          0.8,\n          1.6,\n          2.4000000000000004,\n          3.2,\n          4,\n          4.800000000000001,\n          5.6000000000000005,\n          6.4,\n          7.2,\n          8,\n          8.8,\n          9.600000000000001,\n          10.4,\n          11.200000000000001,\n          12,\n          12.8,\n          13.600000000000001,\n          14.4,\n          15.200000000000001,\n          16\n         ],\n         \"z\": [\n          5.412225351471832e-18,\n          5.412225351471832e-18,\n          5.412225351471832e-18,\n          5.412225351471832e-18,\n          5.412225351471832e-18,\n          5.412225351471832e-18,\n          5.412225351471832e-18,\n          5.412225351471832e-18,\n          5.412225351471832e-18,\n          5.412225351471832e-18,\n          5.412225351471832e-18,\n          5.412225351471832e-18,\n          5.412225351471832e-18,\n          5.412225351471832e-18,\n          5.412225351471832e-18,\n          5.412225351471832e-18,\n          5.412225351471832e-18,\n          5.412225351471832e-18,\n          5.412225351471832e-18,\n          5.412225351471832e-18,\n          5.412225351471832e-18\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"black\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          0.31250000000000006,\n          0.31250000000000006,\n          0.31250000000000006,\n          0.31250000000000006,\n          0.31250000000000006,\n          0.31250000000000006,\n          0.31250000000000006,\n          0.31250000000000006,\n          0.31250000000000006,\n          0.31250000000000006,\n          0.31250000000000006,\n          0.31250000000000006,\n          0.31250000000000006,\n          0.31250000000000006,\n          0.31250000000000006,\n          0.31250000000000006,\n          0.31250000000000006,\n          0.31250000000000006,\n          0.31250000000000006,\n          0.31250000000000006,\n          0.31250000000000006\n         ],\n         \"y\": [\n          5.090114676358003e-18,\n          0.8,\n          1.6,\n          2.4000000000000004,\n          3.2,\n          4,\n          4.800000000000001,\n          5.6000000000000005,\n          6.4,\n          7.2,\n          8,\n          8.8,\n          9.600000000000001,\n          10.4,\n          11.200000000000001,\n          12,\n          12.8,\n          13.600000000000001,\n          14.4,\n          15.200000000000001,\n          16\n         ],\n         \"z\": [\n          2.706112675735916e-17,\n          2.706112675735916e-17,\n          2.706112675735916e-17,\n          2.706112675735916e-17,\n          2.706112675735916e-17,\n          2.706112675735916e-17,\n          2.706112675735916e-17,\n          2.706112675735916e-17,\n          2.706112675735916e-17,\n          2.706112675735916e-17,\n          2.706112675735916e-17,\n          2.706112675735916e-17,\n          2.706112675735916e-17,\n          2.706112675735916e-17,\n          2.706112675735916e-17,\n          2.706112675735916e-17,\n          2.706112675735916e-17,\n          2.706112675735916e-17,\n          2.706112675735916e-17,\n          2.706112675735916e-17,\n          2.706112675735916e-17\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"black\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          0.5625000000000001,\n          0.5625000000000001,\n          0.5625000000000001,\n          0.5625000000000001,\n          0.5625000000000001,\n          0.5625000000000001,\n          0.5625000000000001,\n          0.5625000000000001,\n          0.5625000000000001,\n          0.5625000000000001,\n          0.5625000000000001,\n          0.5625000000000001,\n          0.5625000000000001,\n          0.5625000000000001,\n          0.5625000000000001,\n          0.5625000000000001,\n          0.5625000000000001,\n          0.5625000000000001,\n          0.5625000000000001,\n          0.5625000000000001,\n          0.5625000000000001\n         ],\n         \"y\": [\n          9.162206417444405e-18,\n          0.8,\n          1.6,\n          2.4000000000000004,\n          3.2,\n          4,\n          4.800000000000001,\n          5.6000000000000005,\n          6.4,\n          7.2,\n          8,\n          8.8,\n          9.600000000000001,\n          10.4,\n          11.200000000000001,\n          12,\n          12.8,\n          13.600000000000001,\n          14.4,\n          15.200000000000001,\n          16\n         ],\n         \"z\": [\n          4.871002816324649e-17,\n          4.871002816324649e-17,\n          4.871002816324649e-17,\n          4.871002816324649e-17,\n          4.871002816324649e-17,\n          4.871002816324649e-17,\n          4.871002816324649e-17,\n          4.871002816324649e-17,\n          4.871002816324649e-17,\n          4.871002816324649e-17,\n          4.871002816324649e-17,\n          4.871002816324649e-17,\n          4.871002816324649e-17,\n          4.871002816324649e-17,\n          4.871002816324649e-17,\n          4.871002816324649e-17,\n          4.871002816324649e-17,\n          4.871002816324649e-17,\n          4.871002816324649e-17,\n          4.871002816324649e-17,\n          4.871002816324649e-17\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"black\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          -0.4375000000000001,\n          -0.18750000000000006,\n          0.06250000000000001,\n          0.31250000000000006,\n          0.5625000000000001\n         ],\n         \"y\": [\n          -7.126160546901204e-18,\n          -3.054068805814802e-18,\n          1.0180229352716006e-18,\n          5.090114676358003e-18,\n          9.162206417444405e-18\n         ],\n         \"z\": [\n          -3.7885577460302824e-17,\n          -1.6236676054415498e-17,\n          5.412225351471832e-18,\n          2.706112675735916e-17,\n          4.871002816324649e-17\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"black\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          -0.4375000000000001,\n          -0.18750000000000006,\n          0.06250000000000001,\n          0.31250000000000006,\n          0.5625000000000001\n         ],\n         \"y\": [\n          0.8,\n          0.8,\n          0.8,\n          0.8,\n          0.8\n         ],\n         \"z\": [\n          -3.7885577460302824e-17,\n          -1.6236676054415498e-17,\n          5.412225351471832e-18,\n          2.706112675735916e-17,\n          4.871002816324649e-17\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"black\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          -0.4375000000000001,\n          -0.18750000000000006,\n          0.06250000000000001,\n          0.31250000000000006,\n          0.5625000000000001\n         ],\n         \"y\": [\n          1.6,\n          1.6,\n          1.6,\n          1.6,\n          1.6\n         ],\n         \"z\": [\n          -3.7885577460302824e-17,\n          -1.6236676054415498e-17,\n          5.412225351471832e-18,\n          2.706112675735916e-17,\n          4.871002816324649e-17\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"black\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          -0.4375000000000001,\n          -0.18750000000000006,\n          0.06250000000000001,\n          0.31250000000000006,\n          0.5625000000000001\n         ],\n         \"y\": [\n          2.4000000000000004,\n          2.4000000000000004,\n          2.4000000000000004,\n          2.4000000000000004,\n          2.4000000000000004\n         ],\n         \"z\": [\n          -3.7885577460302824e-17,\n          -1.6236676054415498e-17,\n          5.412225351471832e-18,\n          2.706112675735916e-17,\n          4.871002816324649e-17\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"black\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          -0.4375000000000001,\n          -0.18750000000000006,\n          0.06250000000000001,\n          0.31250000000000006,\n          0.5625000000000001\n         ],\n         \"y\": [\n          3.2,\n          3.2,\n          3.2,\n          3.2,\n          3.2\n         ],\n         \"z\": [\n          -3.7885577460302824e-17,\n          -1.6236676054415498e-17,\n          5.412225351471832e-18,\n          2.706112675735916e-17,\n          4.871002816324649e-17\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"black\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          -0.4375000000000001,\n          -0.18750000000000006,\n          0.06250000000000001,\n          0.31250000000000006,\n          0.5625000000000001\n         ],\n         \"y\": [\n          4,\n          4,\n          4,\n          4,\n          4\n         ],\n         \"z\": [\n          -3.7885577460302824e-17,\n          -1.6236676054415498e-17,\n          5.412225351471832e-18,\n          2.706112675735916e-17,\n          4.871002816324649e-17\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"black\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          -0.4375000000000001,\n          -0.18750000000000006,\n          0.06250000000000001,\n          0.31250000000000006,\n          0.5625000000000001\n         ],\n         \"y\": [\n          4.800000000000001,\n          4.800000000000001,\n          4.800000000000001,\n          4.800000000000001,\n          4.800000000000001\n         ],\n         \"z\": [\n          -3.7885577460302824e-17,\n          -1.6236676054415498e-17,\n          5.412225351471832e-18,\n          2.706112675735916e-17,\n          4.871002816324649e-17\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"black\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          -0.4375000000000001,\n          -0.18750000000000006,\n          0.06250000000000001,\n          0.31250000000000006,\n          0.5625000000000001\n         ],\n         \"y\": [\n          5.6000000000000005,\n          5.6000000000000005,\n          5.6000000000000005,\n          5.6000000000000005,\n          5.6000000000000005\n         ],\n         \"z\": [\n          -3.7885577460302824e-17,\n          -1.6236676054415498e-17,\n          5.412225351471832e-18,\n          2.706112675735916e-17,\n          4.871002816324649e-17\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"black\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          -0.4375000000000001,\n          -0.18750000000000006,\n          0.06250000000000001,\n          0.31250000000000006,\n          0.5625000000000001\n         ],\n         \"y\": [\n          6.4,\n          6.4,\n          6.4,\n          6.4,\n          6.4\n         ],\n         \"z\": [\n          -3.7885577460302824e-17,\n          -1.6236676054415498e-17,\n          5.412225351471832e-18,\n          2.706112675735916e-17,\n          4.871002816324649e-17\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"black\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          -0.4375000000000001,\n          -0.18750000000000006,\n          0.06250000000000001,\n          0.31250000000000006,\n          0.5625000000000001\n         ],\n         \"y\": [\n          7.2,\n          7.2,\n          7.2,\n          7.2,\n          7.2\n         ],\n         \"z\": [\n          -3.7885577460302824e-17,\n          -1.6236676054415498e-17,\n          5.412225351471832e-18,\n          2.706112675735916e-17,\n          4.871002816324649e-17\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"black\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          -0.4375000000000001,\n          -0.18750000000000006,\n          0.06250000000000001,\n          0.31250000000000006,\n          0.5625000000000001\n         ],\n         \"y\": [\n          8,\n          8,\n          8,\n          8,\n          8\n         ],\n         \"z\": [\n          -3.7885577460302824e-17,\n          -1.6236676054415498e-17,\n          5.412225351471832e-18,\n          2.706112675735916e-17,\n          4.871002816324649e-17\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"black\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          -0.4375000000000001,\n          -0.18750000000000006,\n          0.06250000000000001,\n          0.31250000000000006,\n          0.5625000000000001\n         ],\n         \"y\": [\n          8.8,\n          8.8,\n          8.8,\n          8.8,\n          8.8\n         ],\n         \"z\": [\n          -3.7885577460302824e-17,\n          -1.6236676054415498e-17,\n          5.412225351471832e-18,\n          2.706112675735916e-17,\n          4.871002816324649e-17\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"black\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          -0.4375000000000001,\n          -0.18750000000000006,\n          0.06250000000000001,\n          0.31250000000000006,\n          0.5625000000000001\n         ],\n         \"y\": [\n          9.600000000000001,\n          9.600000000000001,\n          9.600000000000001,\n          9.600000000000001,\n          9.600000000000001\n         ],\n         \"z\": [\n          -3.7885577460302824e-17,\n          -1.6236676054415498e-17,\n          5.412225351471832e-18,\n          2.706112675735916e-17,\n          4.871002816324649e-17\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"black\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          -0.4375000000000001,\n          -0.18750000000000006,\n          0.06250000000000001,\n          0.31250000000000006,\n          0.5625000000000001\n         ],\n         \"y\": [\n          10.4,\n          10.4,\n          10.4,\n          10.4,\n          10.4\n         ],\n         \"z\": [\n          -3.7885577460302824e-17,\n          -1.6236676054415498e-17,\n          5.412225351471832e-18,\n          2.706112675735916e-17,\n          4.871002816324649e-17\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"black\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          -0.4375000000000001,\n          -0.18750000000000006,\n          0.06250000000000001,\n          0.31250000000000006,\n          0.5625000000000001\n         ],\n         \"y\": [\n          11.200000000000001,\n          11.200000000000001,\n          11.200000000000001,\n          11.200000000000001,\n          11.200000000000001\n         ],\n         \"z\": [\n          -3.7885577460302824e-17,\n          -1.6236676054415498e-17,\n          5.412225351471832e-18,\n          2.706112675735916e-17,\n          4.871002816324649e-17\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"black\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          -0.4375000000000001,\n          -0.18750000000000006,\n          0.06250000000000001,\n          0.31250000000000006,\n          0.5625000000000001\n         ],\n         \"y\": [\n          12,\n          12,\n          12,\n          12,\n          12\n         ],\n         \"z\": [\n          -3.7885577460302824e-17,\n          -1.6236676054415498e-17,\n          5.412225351471832e-18,\n          2.706112675735916e-17,\n          4.871002816324649e-17\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"black\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          -0.4375000000000001,\n          -0.18750000000000006,\n          0.06250000000000001,\n          0.31250000000000006,\n          0.5625000000000001\n         ],\n         \"y\": [\n          12.8,\n          12.8,\n          12.8,\n          12.8,\n          12.8\n         ],\n         \"z\": [\n          -3.7885577460302824e-17,\n          -1.6236676054415498e-17,\n          5.412225351471832e-18,\n          2.706112675735916e-17,\n          4.871002816324649e-17\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"black\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          -0.4375000000000001,\n          -0.18750000000000006,\n          0.06250000000000001,\n          0.31250000000000006,\n          0.5625000000000001\n         ],\n         \"y\": [\n          13.600000000000001,\n          13.600000000000001,\n          13.600000000000001,\n          13.600000000000001,\n          13.600000000000001\n         ],\n         \"z\": [\n          -3.7885577460302824e-17,\n          -1.6236676054415498e-17,\n          5.412225351471832e-18,\n          2.706112675735916e-17,\n          4.871002816324649e-17\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"black\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          -0.4375000000000001,\n          -0.18750000000000006,\n          0.06250000000000001,\n          0.31250000000000006,\n          0.5625000000000001\n         ],\n         \"y\": [\n          14.4,\n          14.4,\n          14.4,\n          14.4,\n          14.4\n         ],\n         \"z\": [\n          -3.7885577460302824e-17,\n          -1.6236676054415498e-17,\n          5.412225351471832e-18,\n          2.706112675735916e-17,\n          4.871002816324649e-17\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"black\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          -0.4375000000000001,\n          -0.18750000000000006,\n          0.06250000000000001,\n          0.31250000000000006,\n          0.5625000000000001\n         ],\n         \"y\": [\n          15.200000000000001,\n          15.200000000000001,\n          15.200000000000001,\n          15.200000000000001,\n          15.200000000000001\n         ],\n         \"z\": [\n          -3.7885577460302824e-17,\n          -1.6236676054415498e-17,\n          5.412225351471832e-18,\n          2.706112675735916e-17,\n          4.871002816324649e-17\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"black\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          -0.4375000000000001,\n          -0.18750000000000006,\n          0.06250000000000001,\n          0.31250000000000006,\n          0.5625000000000001\n         ],\n         \"y\": [\n          16,\n          16,\n          16,\n          16,\n          16\n         ],\n         \"z\": [\n          -3.7885577460302824e-17,\n          -1.6236676054415498e-17,\n          5.412225351471832e-18,\n          2.706112675735916e-17,\n          4.871002816324649e-17\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"lightskyblue\"\n         },\n         \"mode\": \"lines\",\n         \"name\": \"Aero wake\",\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          0.5625000000000001,\n          0.8123477075000001,\n          0.8123477075000001,\n          0.5625000000000001,\n          0.5625000000000001\n         ],\n         \"y\": [\n          9.162206417444405e-18,\n          9.162206417444405e-18,\n          0.8,\n          0.8,\n          9.162206417444405e-18\n         ],\n         \"z\": [\n          4.871002816324649e-17,\n          0.008724875000000049,\n          0.008724875000000049,\n          4.871002816324649e-17,\n          4.871002816324649e-17\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"lightskyblue\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          0.5625000000000001,\n          0.8123477075000001,\n          0.8123477075000001,\n          0.5625000000000001,\n          0.5625000000000001\n         ],\n         \"y\": [\n          0.8,\n          0.8,\n          1.6,\n          1.6,\n          0.8\n         ],\n         \"z\": [\n          4.871002816324649e-17,\n          0.008724875000000049,\n          0.008724875000000049,\n          4.871002816324649e-17,\n          4.871002816324649e-17\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"lightskyblue\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          0.5625000000000001,\n          0.8123477075000001,\n          0.8123477075000001,\n          0.5625000000000001,\n          0.5625000000000001\n         ],\n         \"y\": [\n          1.6,\n          1.6,\n          2.4000000000000004,\n          2.4000000000000004,\n          1.6\n         ],\n         \"z\": [\n          4.871002816324649e-17,\n          0.008724875000000049,\n          0.008724875000000049,\n          4.871002816324649e-17,\n          4.871002816324649e-17\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"lightskyblue\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          0.5625000000000001,\n          0.8123477075000001,\n          0.8123477075000001,\n          0.5625000000000001,\n          0.5625000000000001\n         ],\n         \"y\": [\n          2.4000000000000004,\n          2.4000000000000004,\n          3.2,\n          3.2,\n          2.4000000000000004\n         ],\n         \"z\": [\n          4.871002816324649e-17,\n          0.008724875000000049,\n          0.008724875000000049,\n          4.871002816324649e-17,\n          4.871002816324649e-17\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"lightskyblue\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          0.5625000000000001,\n          0.8123477075000001,\n          0.8123477075000001,\n          0.5625000000000001,\n          0.5625000000000001\n         ],\n         \"y\": [\n          3.2,\n          3.2,\n          4,\n          4,\n          3.2\n         ],\n         \"z\": [\n          4.871002816324649e-17,\n          0.008724875000000049,\n          0.008724875000000049,\n          4.871002816324649e-17,\n          4.871002816324649e-17\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"lightskyblue\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          0.5625000000000001,\n          0.8123477075000001,\n          0.8123477075000001,\n          0.5625000000000001,\n          0.5625000000000001\n         ],\n         \"y\": [\n          4,\n          4,\n          4.800000000000001,\n          4.800000000000001,\n          4\n         ],\n         \"z\": [\n          4.871002816324649e-17,\n          0.008724875000000049,\n          0.008724875000000049,\n          4.871002816324649e-17,\n          4.871002816324649e-17\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"lightskyblue\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          0.5625000000000001,\n          0.8123477075000001,\n          0.8123477075000001,\n          0.5625000000000001,\n          0.5625000000000001\n         ],\n         \"y\": [\n          4.800000000000001,\n          4.800000000000001,\n          5.6000000000000005,\n          5.6000000000000005,\n          4.800000000000001\n         ],\n         \"z\": [\n          4.871002816324649e-17,\n          0.008724875000000049,\n          0.008724875000000049,\n          4.871002816324649e-17,\n          4.871002816324649e-17\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"lightskyblue\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          0.5625000000000001,\n          0.8123477075000001,\n          0.8123477075000001,\n          0.5625000000000001,\n          0.5625000000000001\n         ],\n         \"y\": [\n          5.6000000000000005,\n          5.6000000000000005,\n          6.4,\n          6.4,\n          5.6000000000000005\n         ],\n         \"z\": [\n          4.871002816324649e-17,\n          0.008724875000000049,\n          0.008724875000000049,\n          4.871002816324649e-17,\n          4.871002816324649e-17\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"lightskyblue\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          0.5625000000000001,\n          0.8123477075000001,\n          0.8123477075000001,\n          0.5625000000000001,\n          0.5625000000000001\n         ],\n         \"y\": [\n          6.4,\n          6.4,\n          7.2,\n          7.2,\n          6.4\n         ],\n         \"z\": [\n          4.871002816324649e-17,\n          0.008724875000000049,\n          0.008724875000000049,\n          4.871002816324649e-17,\n          4.871002816324649e-17\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"lightskyblue\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          0.5625000000000001,\n          0.8123477075000001,\n          0.8123477075000001,\n          0.5625000000000001,\n          0.5625000000000001\n         ],\n         \"y\": [\n          7.2,\n          7.2,\n          8,\n          8,\n          7.2\n         ],\n         \"z\": [\n          4.871002816324649e-17,\n          0.008724875000000049,\n          0.008724875000000049,\n          4.871002816324649e-17,\n          4.871002816324649e-17\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"lightskyblue\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          0.5625000000000001,\n          0.8123477075000001,\n          0.8123477075000001,\n          0.5625000000000001,\n          0.5625000000000001\n         ],\n         \"y\": [\n          8,\n          8,\n          8.8,\n          8.8,\n          8\n         ],\n         \"z\": [\n          4.871002816324649e-17,\n          0.008724875000000049,\n          0.008724875000000049,\n          4.871002816324649e-17,\n          4.871002816324649e-17\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"lightskyblue\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          0.5625000000000001,\n          0.8123477075000001,\n          0.8123477075000001,\n          0.5625000000000001,\n          0.5625000000000001\n         ],\n         \"y\": [\n          8.8,\n          8.8,\n          9.600000000000001,\n          9.600000000000001,\n          8.8\n         ],\n         \"z\": [\n          4.871002816324649e-17,\n          0.008724875000000049,\n          0.008724875000000049,\n          4.871002816324649e-17,\n          4.871002816324649e-17\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"lightskyblue\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          0.5625000000000001,\n          0.8123477075000001,\n          0.8123477075000001,\n          0.5625000000000001,\n          0.5625000000000001\n         ],\n         \"y\": [\n          9.600000000000001,\n          9.600000000000001,\n          10.4,\n          10.4,\n          9.600000000000001\n         ],\n         \"z\": [\n          4.871002816324649e-17,\n          0.008724875000000049,\n          0.008724875000000049,\n          4.871002816324649e-17,\n          4.871002816324649e-17\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"lightskyblue\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          0.5625000000000001,\n          0.8123477075000001,\n          0.8123477075000001,\n          0.5625000000000001,\n          0.5625000000000001\n         ],\n         \"y\": [\n          10.4,\n          10.4,\n          11.200000000000001,\n          11.200000000000001,\n          10.4\n         ],\n         \"z\": [\n          4.871002816324649e-17,\n          0.008724875000000049,\n          0.008724875000000049,\n          4.871002816324649e-17,\n          4.871002816324649e-17\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"lightskyblue\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          0.5625000000000001,\n          0.8123477075000001,\n          0.8123477075000001,\n          0.5625000000000001,\n          0.5625000000000001\n         ],\n         \"y\": [\n          11.200000000000001,\n          11.200000000000001,\n          12,\n          12,\n          11.200000000000001\n         ],\n         \"z\": [\n          4.871002816324649e-17,\n          0.008724875000000049,\n          0.008724875000000049,\n          4.871002816324649e-17,\n          4.871002816324649e-17\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"lightskyblue\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          0.5625000000000001,\n          0.8123477075000001,\n          0.8123477075000001,\n          0.5625000000000001,\n          0.5625000000000001\n         ],\n         \"y\": [\n          12,\n          12,\n          12.8,\n          12.8,\n          12\n         ],\n         \"z\": [\n          4.871002816324649e-17,\n          0.008724875000000049,\n          0.008724875000000049,\n          4.871002816324649e-17,\n          4.871002816324649e-17\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"lightskyblue\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          0.5625000000000001,\n          0.8123477075000001,\n          0.8123477075000001,\n          0.5625000000000001,\n          0.5625000000000001\n         ],\n         \"y\": [\n          12.8,\n          12.8,\n          13.600000000000001,\n          13.600000000000001,\n          12.8\n         ],\n         \"z\": [\n          4.871002816324649e-17,\n          0.008724875000000049,\n          0.008724875000000049,\n          4.871002816324649e-17,\n          4.871002816324649e-17\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"lightskyblue\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          0.5625000000000001,\n          0.8123477075000001,\n          0.8123477075000001,\n          0.5625000000000001,\n          0.5625000000000001\n         ],\n         \"y\": [\n          13.600000000000001,\n          13.600000000000001,\n          14.4,\n          14.4,\n          13.600000000000001\n         ],\n         \"z\": [\n          4.871002816324649e-17,\n          0.008724875000000049,\n          0.008724875000000049,\n          4.871002816324649e-17,\n          4.871002816324649e-17\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"lightskyblue\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          0.5625000000000001,\n          0.8123477075000001,\n          0.8123477075000001,\n          0.5625000000000001,\n          0.5625000000000001\n         ],\n         \"y\": [\n          14.4,\n          14.4,\n          15.200000000000001,\n          15.200000000000001,\n          14.4\n         ],\n         \"z\": [\n          4.871002816324649e-17,\n          0.008724875000000049,\n          0.008724875000000049,\n          4.871002816324649e-17,\n          4.871002816324649e-17\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"lightskyblue\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          0.5625000000000001,\n          0.8123477075000001,\n          0.8123477075000001,\n          0.5625000000000001,\n          0.5625000000000001\n         ],\n         \"y\": [\n          15.200000000000001,\n          15.200000000000001,\n          16,\n          16,\n          15.200000000000001\n         ],\n         \"z\": [\n          4.871002816324649e-17,\n          0.008724875000000049,\n          0.008724875000000049,\n          4.871002816324649e-17,\n          4.871002816324649e-17\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"lightskyblue\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          0.8123477075000001,\n          1.0621954150000001,\n          1.0621954150000001,\n          0.8123477075000001,\n          0.8123477075000001\n         ],\n         \"y\": [\n          9.162206417444405e-18,\n          9.162206417444405e-18,\n          0.8,\n          0.8,\n          9.162206417444405e-18\n         ],\n         \"z\": [\n          0.008724875000000049,\n          0.01744975000000005,\n          0.01744975000000005,\n          0.008724875000000049,\n          0.008724875000000049\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"lightskyblue\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          0.8123477075000001,\n          1.0621954150000001,\n          1.0621954150000001,\n          0.8123477075000001,\n          0.8123477075000001\n         ],\n         \"y\": [\n          0.8,\n          0.8,\n          1.6,\n          1.6,\n          0.8\n         ],\n         \"z\": [\n          0.008724875000000049,\n          0.01744975000000005,\n          0.01744975000000005,\n          0.008724875000000049,\n          0.008724875000000049\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"lightskyblue\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          0.8123477075000001,\n          1.0621954150000001,\n          1.0621954150000001,\n          0.8123477075000001,\n          0.8123477075000001\n         ],\n         \"y\": [\n          1.6,\n          1.6,\n          2.4000000000000004,\n          2.4000000000000004,\n          1.6\n         ],\n         \"z\": [\n          0.008724875000000049,\n          0.01744975000000005,\n          0.01744975000000005,\n          0.008724875000000049,\n          0.008724875000000049\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"lightskyblue\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          0.8123477075000001,\n          1.0621954150000001,\n          1.0621954150000001,\n          0.8123477075000001,\n          0.8123477075000001\n         ],\n         \"y\": [\n          2.4000000000000004,\n          2.4000000000000004,\n          3.2,\n          3.2,\n          2.4000000000000004\n         ],\n         \"z\": [\n          0.008724875000000049,\n          0.01744975000000005,\n          0.01744975000000005,\n          0.008724875000000049,\n          0.008724875000000049\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"lightskyblue\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          0.8123477075000001,\n          1.0621954150000001,\n          1.0621954150000001,\n          0.8123477075000001,\n          0.8123477075000001\n         ],\n         \"y\": [\n          3.2,\n          3.2,\n          4,\n          4,\n          3.2\n         ],\n         \"z\": [\n          0.008724875000000049,\n          0.01744975000000005,\n          0.01744975000000005,\n          0.008724875000000049,\n          0.008724875000000049\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"lightskyblue\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          0.8123477075000001,\n          1.0621954150000001,\n          1.0621954150000001,\n          0.8123477075000001,\n          0.8123477075000001\n         ],\n         \"y\": [\n          4,\n          4,\n          4.800000000000001,\n          4.800000000000001,\n          4\n         ],\n         \"z\": [\n          0.008724875000000049,\n          0.01744975000000005,\n          0.01744975000000005,\n          0.008724875000000049,\n          0.008724875000000049\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"lightskyblue\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          0.8123477075000001,\n          1.0621954150000001,\n          1.0621954150000001,\n          0.8123477075000001,\n          0.8123477075000001\n         ],\n         \"y\": [\n          4.800000000000001,\n          4.800000000000001,\n          5.6000000000000005,\n          5.6000000000000005,\n          4.800000000000001\n         ],\n         \"z\": [\n          0.008724875000000049,\n          0.01744975000000005,\n          0.01744975000000005,\n          0.008724875000000049,\n          0.008724875000000049\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"lightskyblue\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          0.8123477075000001,\n          1.0621954150000001,\n          1.0621954150000001,\n          0.8123477075000001,\n          0.8123477075000001\n         ],\n         \"y\": [\n          5.6000000000000005,\n          5.6000000000000005,\n          6.4,\n          6.4,\n          5.6000000000000005\n         ],\n         \"z\": [\n          0.008724875000000049,\n          0.01744975000000005,\n          0.01744975000000005,\n          0.008724875000000049,\n          0.008724875000000049\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"lightskyblue\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          0.8123477075000001,\n          1.0621954150000001,\n          1.0621954150000001,\n          0.8123477075000001,\n          0.8123477075000001\n         ],\n         \"y\": [\n          6.4,\n          6.4,\n          7.2,\n          7.2,\n          6.4\n         ],\n         \"z\": [\n          0.008724875000000049,\n          0.01744975000000005,\n          0.01744975000000005,\n          0.008724875000000049,\n          0.008724875000000049\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"lightskyblue\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          0.8123477075000001,\n          1.0621954150000001,\n          1.0621954150000001,\n          0.8123477075000001,\n          0.8123477075000001\n         ],\n         \"y\": [\n          7.2,\n          7.2,\n          8,\n          8,\n          7.2\n         ],\n         \"z\": [\n          0.008724875000000049,\n          0.01744975000000005,\n          0.01744975000000005,\n          0.008724875000000049,\n          0.008724875000000049\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"lightskyblue\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          0.8123477075000001,\n          1.0621954150000001,\n          1.0621954150000001,\n          0.8123477075000001,\n          0.8123477075000001\n         ],\n         \"y\": [\n          8,\n          8,\n          8.8,\n          8.8,\n          8\n         ],\n         \"z\": [\n          0.008724875000000049,\n          0.01744975000000005,\n          0.01744975000000005,\n          0.008724875000000049,\n          0.008724875000000049\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"lightskyblue\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          0.8123477075000001,\n          1.0621954150000001,\n          1.0621954150000001,\n          0.8123477075000001,\n          0.8123477075000001\n         ],\n         \"y\": [\n          8.8,\n          8.8,\n          9.600000000000001,\n          9.600000000000001,\n          8.8\n         ],\n         \"z\": [\n          0.008724875000000049,\n          0.01744975000000005,\n          0.01744975000000005,\n          0.008724875000000049,\n          0.008724875000000049\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"lightskyblue\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          0.8123477075000001,\n          1.0621954150000001,\n          1.0621954150000001,\n          0.8123477075000001,\n          0.8123477075000001\n         ],\n         \"y\": [\n          9.600000000000001,\n          9.600000000000001,\n          10.4,\n          10.4,\n          9.600000000000001\n         ],\n         \"z\": [\n          0.008724875000000049,\n          0.01744975000000005,\n          0.01744975000000005,\n          0.008724875000000049,\n          0.008724875000000049\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"lightskyblue\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          0.8123477075000001,\n          1.0621954150000001,\n          1.0621954150000001,\n          0.8123477075000001,\n          0.8123477075000001\n         ],\n         \"y\": [\n          10.4,\n          10.4,\n          11.200000000000001,\n          11.200000000000001,\n          10.4\n         ],\n         \"z\": [\n          0.008724875000000049,\n          0.01744975000000005,\n          0.01744975000000005,\n          0.008724875000000049,\n          0.008724875000000049\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"lightskyblue\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          0.8123477075000001,\n          1.0621954150000001,\n          1.0621954150000001,\n          0.8123477075000001,\n          0.8123477075000001\n         ],\n         \"y\": [\n          11.200000000000001,\n          11.200000000000001,\n          12,\n          12,\n          11.200000000000001\n         ],\n         \"z\": [\n          0.008724875000000049,\n          0.01744975000000005,\n          0.01744975000000005,\n          0.008724875000000049,\n          0.008724875000000049\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"lightskyblue\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          0.8123477075000001,\n          1.0621954150000001,\n          1.0621954150000001,\n          0.8123477075000001,\n          0.8123477075000001\n         ],\n         \"y\": [\n          12,\n          12,\n          12.8,\n          12.8,\n          12\n         ],\n         \"z\": [\n          0.008724875000000049,\n          0.01744975000000005,\n          0.01744975000000005,\n          0.008724875000000049,\n          0.008724875000000049\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"lightskyblue\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          0.8123477075000001,\n          1.0621954150000001,\n          1.0621954150000001,\n          0.8123477075000001,\n          0.8123477075000001\n         ],\n         \"y\": [\n          12.8,\n          12.8,\n          13.600000000000001,\n          13.600000000000001,\n          12.8\n         ],\n         \"z\": [\n          0.008724875000000049,\n          0.01744975000000005,\n          0.01744975000000005,\n          0.008724875000000049,\n          0.008724875000000049\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"lightskyblue\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          0.8123477075000001,\n          1.0621954150000001,\n          1.0621954150000001,\n          0.8123477075000001,\n          0.8123477075000001\n         ],\n         \"y\": [\n          13.600000000000001,\n          13.600000000000001,\n          14.4,\n          14.4,\n          13.600000000000001\n         ],\n         \"z\": [\n          0.008724875000000049,\n          0.01744975000000005,\n          0.01744975000000005,\n          0.008724875000000049,\n          0.008724875000000049\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"lightskyblue\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          0.8123477075000001,\n          1.0621954150000001,\n          1.0621954150000001,\n          0.8123477075000001,\n          0.8123477075000001\n         ],\n         \"y\": [\n          14.4,\n          14.4,\n          15.200000000000001,\n          15.200000000000001,\n          14.4\n         ],\n         \"z\": [\n          0.008724875000000049,\n          0.01744975000000005,\n          0.01744975000000005,\n          0.008724875000000049,\n          0.008724875000000049\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"lightskyblue\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          0.8123477075000001,\n          1.0621954150000001,\n          1.0621954150000001,\n          0.8123477075000001,\n          0.8123477075000001\n         ],\n         \"y\": [\n          15.200000000000001,\n          15.200000000000001,\n          16,\n          16,\n          15.200000000000001\n         ],\n         \"z\": [\n          0.008724875000000049,\n          0.01744975000000005,\n          0.01744975000000005,\n          0.008724875000000049,\n          0.008724875000000049\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"lightskyblue\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          1.0621954150000001,\n          1.3120431225000002,\n          1.3120431225000002,\n          1.0621954150000001,\n          1.0621954150000001\n         ],\n         \"y\": [\n          9.162206417444405e-18,\n          9.162206417444405e-18,\n          0.8,\n          0.8,\n          9.162206417444405e-18\n         ],\n         \"z\": [\n          0.01744975000000005,\n          0.02617462500000005,\n          0.02617462500000005,\n          0.01744975000000005,\n          0.01744975000000005\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"lightskyblue\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          1.0621954150000001,\n          1.3120431225000002,\n          1.3120431225000002,\n          1.0621954150000001,\n          1.0621954150000001\n         ],\n         \"y\": [\n          0.8,\n          0.8,\n          1.6,\n          1.6,\n          0.8\n         ],\n         \"z\": [\n          0.01744975000000005,\n          0.02617462500000005,\n          0.02617462500000005,\n          0.01744975000000005,\n          0.01744975000000005\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"lightskyblue\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          1.0621954150000001,\n          1.3120431225000002,\n          1.3120431225000002,\n          1.0621954150000001,\n          1.0621954150000001\n         ],\n         \"y\": [\n          1.6,\n          1.6,\n          2.4000000000000004,\n          2.4000000000000004,\n          1.6\n         ],\n         \"z\": [\n          0.01744975000000005,\n          0.02617462500000005,\n          0.02617462500000005,\n          0.01744975000000005,\n          0.01744975000000005\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"lightskyblue\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          1.0621954150000001,\n          1.3120431225000002,\n          1.3120431225000002,\n          1.0621954150000001,\n          1.0621954150000001\n         ],\n         \"y\": [\n          2.4000000000000004,\n          2.4000000000000004,\n          3.2,\n          3.2,\n          2.4000000000000004\n         ],\n         \"z\": [\n          0.01744975000000005,\n          0.02617462500000005,\n          0.02617462500000005,\n          0.01744975000000005,\n          0.01744975000000005\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"lightskyblue\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          1.0621954150000001,\n          1.3120431225000002,\n          1.3120431225000002,\n          1.0621954150000001,\n          1.0621954150000001\n         ],\n         \"y\": [\n          3.2,\n          3.2,\n          4,\n          4,\n          3.2\n         ],\n         \"z\": [\n          0.01744975000000005,\n          0.02617462500000005,\n          0.02617462500000005,\n          0.01744975000000005,\n          0.01744975000000005\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"lightskyblue\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          1.0621954150000001,\n          1.3120431225000002,\n          1.3120431225000002,\n          1.0621954150000001,\n          1.0621954150000001\n         ],\n         \"y\": [\n          4,\n          4,\n          4.800000000000001,\n          4.800000000000001,\n          4\n         ],\n         \"z\": [\n          0.01744975000000005,\n          0.02617462500000005,\n          0.02617462500000005,\n          0.01744975000000005,\n          0.01744975000000005\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"lightskyblue\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          1.0621954150000001,\n          1.3120431225000002,\n          1.3120431225000002,\n          1.0621954150000001,\n          1.0621954150000001\n         ],\n         \"y\": [\n          4.800000000000001,\n          4.800000000000001,\n          5.6000000000000005,\n          5.6000000000000005,\n          4.800000000000001\n         ],\n         \"z\": [\n          0.01744975000000005,\n          0.02617462500000005,\n          0.02617462500000005,\n          0.01744975000000005,\n          0.01744975000000005\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"lightskyblue\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          1.0621954150000001,\n          1.3120431225000002,\n          1.3120431225000002,\n          1.0621954150000001,\n          1.0621954150000001\n         ],\n         \"y\": [\n          5.6000000000000005,\n          5.6000000000000005,\n          6.4,\n          6.4,\n          5.6000000000000005\n         ],\n         \"z\": [\n          0.01744975000000005,\n          0.02617462500000005,\n          0.02617462500000005,\n          0.01744975000000005,\n          0.01744975000000005\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"lightskyblue\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          1.0621954150000001,\n          1.3120431225000002,\n          1.3120431225000002,\n          1.0621954150000001,\n          1.0621954150000001\n         ],\n         \"y\": [\n          6.4,\n          6.4,\n          7.2,\n          7.2,\n          6.4\n         ],\n         \"z\": [\n          0.01744975000000005,\n          0.02617462500000005,\n          0.02617462500000005,\n          0.01744975000000005,\n          0.01744975000000005\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"lightskyblue\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          1.0621954150000001,\n          1.3120431225000002,\n          1.3120431225000002,\n          1.0621954150000001,\n          1.0621954150000001\n         ],\n         \"y\": [\n          7.2,\n          7.2,\n          8,\n          8,\n          7.2\n         ],\n         \"z\": [\n          0.01744975000000005,\n          0.02617462500000005,\n          0.02617462500000005,\n          0.01744975000000005,\n          0.01744975000000005\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"lightskyblue\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          1.0621954150000001,\n          1.3120431225000002,\n          1.3120431225000002,\n          1.0621954150000001,\n          1.0621954150000001\n         ],\n         \"y\": [\n          8,\n          8,\n          8.8,\n          8.8,\n          8\n         ],\n         \"z\": [\n          0.01744975000000005,\n          0.02617462500000005,\n          0.02617462500000005,\n          0.01744975000000005,\n          0.01744975000000005\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"lightskyblue\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          1.0621954150000001,\n          1.3120431225000002,\n          1.3120431225000002,\n          1.0621954150000001,\n          1.0621954150000001\n         ],\n         \"y\": [\n          8.8,\n          8.8,\n          9.600000000000001,\n          9.600000000000001,\n          8.8\n         ],\n         \"z\": [\n          0.01744975000000005,\n          0.02617462500000005,\n          0.02617462500000005,\n          0.01744975000000005,\n          0.01744975000000005\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"lightskyblue\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          1.0621954150000001,\n          1.3120431225000002,\n          1.3120431225000002,\n          1.0621954150000001,\n          1.0621954150000001\n         ],\n         \"y\": [\n          9.600000000000001,\n          9.600000000000001,\n          10.4,\n          10.4,\n          9.600000000000001\n         ],\n         \"z\": [\n          0.01744975000000005,\n          0.02617462500000005,\n          0.02617462500000005,\n          0.01744975000000005,\n          0.01744975000000005\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"lightskyblue\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          1.0621954150000001,\n          1.3120431225000002,\n          1.3120431225000002,\n          1.0621954150000001,\n          1.0621954150000001\n         ],\n         \"y\": [\n          10.4,\n          10.4,\n          11.200000000000001,\n          11.200000000000001,\n          10.4\n         ],\n         \"z\": [\n          0.01744975000000005,\n          0.02617462500000005,\n          0.02617462500000005,\n          0.01744975000000005,\n          0.01744975000000005\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"lightskyblue\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          1.0621954150000001,\n          1.3120431225000002,\n          1.3120431225000002,\n          1.0621954150000001,\n          1.0621954150000001\n         ],\n         \"y\": [\n          11.200000000000001,\n          11.200000000000001,\n          12,\n          12,\n          11.200000000000001\n         ],\n         \"z\": [\n          0.01744975000000005,\n          0.02617462500000005,\n          0.02617462500000005,\n          0.01744975000000005,\n          0.01744975000000005\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"lightskyblue\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          1.0621954150000001,\n          1.3120431225000002,\n          1.3120431225000002,\n          1.0621954150000001,\n          1.0621954150000001\n         ],\n         \"y\": [\n          12,\n          12,\n          12.8,\n          12.8,\n          12\n         ],\n         \"z\": [\n          0.01744975000000005,\n          0.02617462500000005,\n          0.02617462500000005,\n          0.01744975000000005,\n          0.01744975000000005\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"lightskyblue\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          1.0621954150000001,\n          1.3120431225000002,\n          1.3120431225000002,\n          1.0621954150000001,\n          1.0621954150000001\n         ],\n         \"y\": [\n          12.8,\n          12.8,\n          13.600000000000001,\n          13.600000000000001,\n          12.8\n         ],\n         \"z\": [\n          0.01744975000000005,\n          0.02617462500000005,\n          0.02617462500000005,\n          0.01744975000000005,\n          0.01744975000000005\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"lightskyblue\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          1.0621954150000001,\n          1.3120431225000002,\n          1.3120431225000002,\n          1.0621954150000001,\n          1.0621954150000001\n         ],\n         \"y\": [\n          13.600000000000001,\n          13.600000000000001,\n          14.4,\n          14.4,\n          13.600000000000001\n         ],\n         \"z\": [\n          0.01744975000000005,\n          0.02617462500000005,\n          0.02617462500000005,\n          0.01744975000000005,\n          0.01744975000000005\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"lightskyblue\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          1.0621954150000001,\n          1.3120431225000002,\n          1.3120431225000002,\n          1.0621954150000001,\n          1.0621954150000001\n         ],\n         \"y\": [\n          14.4,\n          14.4,\n          15.200000000000001,\n          15.200000000000001,\n          14.4\n         ],\n         \"z\": [\n          0.01744975000000005,\n          0.02617462500000005,\n          0.02617462500000005,\n          0.01744975000000005,\n          0.01744975000000005\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"lightskyblue\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          1.0621954150000001,\n          1.3120431225000002,\n          1.3120431225000002,\n          1.0621954150000001,\n          1.0621954150000001\n         ],\n         \"y\": [\n          15.200000000000001,\n          15.200000000000001,\n          16,\n          16,\n          15.200000000000001\n         ],\n         \"z\": [\n          0.01744975000000005,\n          0.02617462500000005,\n          0.02617462500000005,\n          0.01744975000000005,\n          0.01744975000000005\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"lightskyblue\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          1.3120431225000002,\n          1.5618908300000003,\n          1.5618908300000003,\n          1.3120431225000002,\n          1.3120431225000002\n         ],\n         \"y\": [\n          9.162206417444405e-18,\n          9.162206417444405e-18,\n          0.8,\n          0.8,\n          9.162206417444405e-18\n         ],\n         \"z\": [\n          0.02617462500000005,\n          0.03489950000000005,\n          0.03489950000000005,\n          0.02617462500000005,\n          0.02617462500000005\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"lightskyblue\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          1.3120431225000002,\n          1.5618908300000003,\n          1.5618908300000003,\n          1.3120431225000002,\n          1.3120431225000002\n         ],\n         \"y\": [\n          0.8,\n          0.8,\n          1.6,\n          1.6,\n          0.8\n         ],\n         \"z\": [\n          0.02617462500000005,\n          0.03489950000000005,\n          0.03489950000000005,\n          0.02617462500000005,\n          0.02617462500000005\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"lightskyblue\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          1.3120431225000002,\n          1.5618908300000003,\n          1.5618908300000003,\n          1.3120431225000002,\n          1.3120431225000002\n         ],\n         \"y\": [\n          1.6,\n          1.6,\n          2.4000000000000004,\n          2.4000000000000004,\n          1.6\n         ],\n         \"z\": [\n          0.02617462500000005,\n          0.03489950000000005,\n          0.03489950000000005,\n          0.02617462500000005,\n          0.02617462500000005\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"lightskyblue\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          1.3120431225000002,\n          1.5618908300000003,\n          1.5618908300000003,\n          1.3120431225000002,\n          1.3120431225000002\n         ],\n         \"y\": [\n          2.4000000000000004,\n          2.4000000000000004,\n          3.2,\n          3.2,\n          2.4000000000000004\n         ],\n         \"z\": [\n          0.02617462500000005,\n          0.03489950000000005,\n          0.03489950000000005,\n          0.02617462500000005,\n          0.02617462500000005\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"lightskyblue\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          1.3120431225000002,\n          1.5618908300000003,\n          1.5618908300000003,\n          1.3120431225000002,\n          1.3120431225000002\n         ],\n         \"y\": [\n          3.2,\n          3.2,\n          4,\n          4,\n          3.2\n         ],\n         \"z\": [\n          0.02617462500000005,\n          0.03489950000000005,\n          0.03489950000000005,\n          0.02617462500000005,\n          0.02617462500000005\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"lightskyblue\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          1.3120431225000002,\n          1.5618908300000003,\n          1.5618908300000003,\n          1.3120431225000002,\n          1.3120431225000002\n         ],\n         \"y\": [\n          4,\n          4,\n          4.800000000000001,\n          4.800000000000001,\n          4\n         ],\n         \"z\": [\n          0.02617462500000005,\n          0.03489950000000005,\n          0.03489950000000005,\n          0.02617462500000005,\n          0.02617462500000005\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"lightskyblue\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          1.3120431225000002,\n          1.5618908300000003,\n          1.5618908300000003,\n          1.3120431225000002,\n          1.3120431225000002\n         ],\n         \"y\": [\n          4.800000000000001,\n          4.800000000000001,\n          5.6000000000000005,\n          5.6000000000000005,\n          4.800000000000001\n         ],\n         \"z\": [\n          0.02617462500000005,\n          0.03489950000000005,\n          0.03489950000000005,\n          0.02617462500000005,\n          0.02617462500000005\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"lightskyblue\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          1.3120431225000002,\n          1.5618908300000003,\n          1.5618908300000003,\n          1.3120431225000002,\n          1.3120431225000002\n         ],\n         \"y\": [\n          5.6000000000000005,\n          5.6000000000000005,\n          6.4,\n          6.4,\n          5.6000000000000005\n         ],\n         \"z\": [\n          0.02617462500000005,\n          0.03489950000000005,\n          0.03489950000000005,\n          0.02617462500000005,\n          0.02617462500000005\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"lightskyblue\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          1.3120431225000002,\n          1.5618908300000003,\n          1.5618908300000003,\n          1.3120431225000002,\n          1.3120431225000002\n         ],\n         \"y\": [\n          6.4,\n          6.4,\n          7.2,\n          7.2,\n          6.4\n         ],\n         \"z\": [\n          0.02617462500000005,\n          0.03489950000000005,\n          0.03489950000000005,\n          0.02617462500000005,\n          0.02617462500000005\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"lightskyblue\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          1.3120431225000002,\n          1.5618908300000003,\n          1.5618908300000003,\n          1.3120431225000002,\n          1.3120431225000002\n         ],\n         \"y\": [\n          7.2,\n          7.2,\n          8,\n          8,\n          7.2\n         ],\n         \"z\": [\n          0.02617462500000005,\n          0.03489950000000005,\n          0.03489950000000005,\n          0.02617462500000005,\n          0.02617462500000005\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"lightskyblue\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          1.3120431225000002,\n          1.5618908300000003,\n          1.5618908300000003,\n          1.3120431225000002,\n          1.3120431225000002\n         ],\n         \"y\": [\n          8,\n          8,\n          8.8,\n          8.8,\n          8\n         ],\n         \"z\": [\n          0.02617462500000005,\n          0.03489950000000005,\n          0.03489950000000005,\n          0.02617462500000005,\n          0.02617462500000005\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"lightskyblue\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          1.3120431225000002,\n          1.5618908300000003,\n          1.5618908300000003,\n          1.3120431225000002,\n          1.3120431225000002\n         ],\n         \"y\": [\n          8.8,\n          8.8,\n          9.600000000000001,\n          9.600000000000001,\n          8.8\n         ],\n         \"z\": [\n          0.02617462500000005,\n          0.03489950000000005,\n          0.03489950000000005,\n          0.02617462500000005,\n          0.02617462500000005\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"lightskyblue\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          1.3120431225000002,\n          1.5618908300000003,\n          1.5618908300000003,\n          1.3120431225000002,\n          1.3120431225000002\n         ],\n         \"y\": [\n          9.600000000000001,\n          9.600000000000001,\n          10.4,\n          10.4,\n          9.600000000000001\n         ],\n         \"z\": [\n          0.02617462500000005,\n          0.03489950000000005,\n          0.03489950000000005,\n          0.02617462500000005,\n          0.02617462500000005\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"lightskyblue\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          1.3120431225000002,\n          1.5618908300000003,\n          1.5618908300000003,\n          1.3120431225000002,\n          1.3120431225000002\n         ],\n         \"y\": [\n          10.4,\n          10.4,\n          11.200000000000001,\n          11.200000000000001,\n          10.4\n         ],\n         \"z\": [\n          0.02617462500000005,\n          0.03489950000000005,\n          0.03489950000000005,\n          0.02617462500000005,\n          0.02617462500000005\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"lightskyblue\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          1.3120431225000002,\n          1.5618908300000003,\n          1.5618908300000003,\n          1.3120431225000002,\n          1.3120431225000002\n         ],\n         \"y\": [\n          11.200000000000001,\n          11.200000000000001,\n          12,\n          12,\n          11.200000000000001\n         ],\n         \"z\": [\n          0.02617462500000005,\n          0.03489950000000005,\n          0.03489950000000005,\n          0.02617462500000005,\n          0.02617462500000005\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"lightskyblue\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          1.3120431225000002,\n          1.5618908300000003,\n          1.5618908300000003,\n          1.3120431225000002,\n          1.3120431225000002\n         ],\n         \"y\": [\n          12,\n          12,\n          12.8,\n          12.8,\n          12\n         ],\n         \"z\": [\n          0.02617462500000005,\n          0.03489950000000005,\n          0.03489950000000005,\n          0.02617462500000005,\n          0.02617462500000005\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"lightskyblue\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          1.3120431225000002,\n          1.5618908300000003,\n          1.5618908300000003,\n          1.3120431225000002,\n          1.3120431225000002\n         ],\n         \"y\": [\n          12.8,\n          12.8,\n          13.600000000000001,\n          13.600000000000001,\n          12.8\n         ],\n         \"z\": [\n          0.02617462500000005,\n          0.03489950000000005,\n          0.03489950000000005,\n          0.02617462500000005,\n          0.02617462500000005\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"lightskyblue\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          1.3120431225000002,\n          1.5618908300000003,\n          1.5618908300000003,\n          1.3120431225000002,\n          1.3120431225000002\n         ],\n         \"y\": [\n          13.600000000000001,\n          13.600000000000001,\n          14.4,\n          14.4,\n          13.600000000000001\n         ],\n         \"z\": [\n          0.02617462500000005,\n          0.03489950000000005,\n          0.03489950000000005,\n          0.02617462500000005,\n          0.02617462500000005\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"lightskyblue\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          1.3120431225000002,\n          1.5618908300000003,\n          1.5618908300000003,\n          1.3120431225000002,\n          1.3120431225000002\n         ],\n         \"y\": [\n          14.4,\n          14.4,\n          15.200000000000001,\n          15.200000000000001,\n          14.4\n         ],\n         \"z\": [\n          0.02617462500000005,\n          0.03489950000000005,\n          0.03489950000000005,\n          0.02617462500000005,\n          0.02617462500000005\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"lightskyblue\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          1.3120431225000002,\n          1.5618908300000003,\n          1.5618908300000003,\n          1.3120431225000002,\n          1.3120431225000002\n         ],\n         \"y\": [\n          15.200000000000001,\n          15.200000000000001,\n          16,\n          16,\n          15.200000000000001\n         ],\n         \"z\": [\n          0.02617462500000005,\n          0.03489950000000005,\n          0.03489950000000005,\n          0.02617462500000005,\n          0.02617462500000005\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"lightskyblue\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          1.5618908300000003,\n          1.8117385375000004,\n          1.8117385375000004,\n          1.5618908300000003,\n          1.5618908300000003\n         ],\n         \"y\": [\n          9.162206417444405e-18,\n          9.162206417444405e-18,\n          0.8,\n          0.8,\n          9.162206417444405e-18\n         ],\n         \"z\": [\n          0.03489950000000005,\n          0.04362437500000005,\n          0.04362437500000005,\n          0.03489950000000005,\n          0.03489950000000005\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"lightskyblue\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          1.5618908300000003,\n          1.8117385375000004,\n          1.8117385375000004,\n          1.5618908300000003,\n          1.5618908300000003\n         ],\n         \"y\": [\n          0.8,\n          0.8,\n          1.6,\n          1.6,\n          0.8\n         ],\n         \"z\": [\n          0.03489950000000005,\n          0.04362437500000005,\n          0.04362437500000005,\n          0.03489950000000005,\n          0.03489950000000005\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"lightskyblue\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          1.5618908300000003,\n          1.8117385375000004,\n          1.8117385375000004,\n          1.5618908300000003,\n          1.5618908300000003\n         ],\n         \"y\": [\n          1.6,\n          1.6,\n          2.4000000000000004,\n          2.4000000000000004,\n          1.6\n         ],\n         \"z\": [\n          0.03489950000000005,\n          0.04362437500000005,\n          0.04362437500000005,\n          0.03489950000000005,\n          0.03489950000000005\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"lightskyblue\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          1.5618908300000003,\n          1.8117385375000004,\n          1.8117385375000004,\n          1.5618908300000003,\n          1.5618908300000003\n         ],\n         \"y\": [\n          2.4000000000000004,\n          2.4000000000000004,\n          3.2,\n          3.2,\n          2.4000000000000004\n         ],\n         \"z\": [\n          0.03489950000000005,\n          0.04362437500000005,\n          0.04362437500000005,\n          0.03489950000000005,\n          0.03489950000000005\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"lightskyblue\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          1.5618908300000003,\n          1.8117385375000004,\n          1.8117385375000004,\n          1.5618908300000003,\n          1.5618908300000003\n         ],\n         \"y\": [\n          3.2,\n          3.2,\n          4,\n          4,\n          3.2\n         ],\n         \"z\": [\n          0.03489950000000005,\n          0.04362437500000005,\n          0.04362437500000005,\n          0.03489950000000005,\n          0.03489950000000005\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"lightskyblue\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          1.5618908300000003,\n          1.8117385375000004,\n          1.8117385375000004,\n          1.5618908300000003,\n          1.5618908300000003\n         ],\n         \"y\": [\n          4,\n          4,\n          4.800000000000001,\n          4.800000000000001,\n          4\n         ],\n         \"z\": [\n          0.03489950000000005,\n          0.04362437500000005,\n          0.04362437500000005,\n          0.03489950000000005,\n          0.03489950000000005\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"lightskyblue\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          1.5618908300000003,\n          1.8117385375000004,\n          1.8117385375000004,\n          1.5618908300000003,\n          1.5618908300000003\n         ],\n         \"y\": [\n          4.800000000000001,\n          4.800000000000001,\n          5.6000000000000005,\n          5.6000000000000005,\n          4.800000000000001\n         ],\n         \"z\": [\n          0.03489950000000005,\n          0.04362437500000005,\n          0.04362437500000005,\n          0.03489950000000005,\n          0.03489950000000005\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"lightskyblue\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          1.5618908300000003,\n          1.8117385375000004,\n          1.8117385375000004,\n          1.5618908300000003,\n          1.5618908300000003\n         ],\n         \"y\": [\n          5.6000000000000005,\n          5.6000000000000005,\n          6.4,\n          6.4,\n          5.6000000000000005\n         ],\n         \"z\": [\n          0.03489950000000005,\n          0.04362437500000005,\n          0.04362437500000005,\n          0.03489950000000005,\n          0.03489950000000005\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"lightskyblue\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          1.5618908300000003,\n          1.8117385375000004,\n          1.8117385375000004,\n          1.5618908300000003,\n          1.5618908300000003\n         ],\n         \"y\": [\n          6.4,\n          6.4,\n          7.2,\n          7.2,\n          6.4\n         ],\n         \"z\": [\n          0.03489950000000005,\n          0.04362437500000005,\n          0.04362437500000005,\n          0.03489950000000005,\n          0.03489950000000005\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"lightskyblue\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          1.5618908300000003,\n          1.8117385375000004,\n          1.8117385375000004,\n          1.5618908300000003,\n          1.5618908300000003\n         ],\n         \"y\": [\n          7.2,\n          7.2,\n          8,\n          8,\n          7.2\n         ],\n         \"z\": [\n          0.03489950000000005,\n          0.04362437500000005,\n          0.04362437500000005,\n          0.03489950000000005,\n          0.03489950000000005\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"lightskyblue\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          1.5618908300000003,\n          1.8117385375000004,\n          1.8117385375000004,\n          1.5618908300000003,\n          1.5618908300000003\n         ],\n         \"y\": [\n          8,\n          8,\n          8.8,\n          8.8,\n          8\n         ],\n         \"z\": [\n          0.03489950000000005,\n          0.04362437500000005,\n          0.04362437500000005,\n          0.03489950000000005,\n          0.03489950000000005\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"lightskyblue\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          1.5618908300000003,\n          1.8117385375000004,\n          1.8117385375000004,\n          1.5618908300000003,\n          1.5618908300000003\n         ],\n         \"y\": [\n          8.8,\n          8.8,\n          9.600000000000001,\n          9.600000000000001,\n          8.8\n         ],\n         \"z\": [\n          0.03489950000000005,\n          0.04362437500000005,\n          0.04362437500000005,\n          0.03489950000000005,\n          0.03489950000000005\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"lightskyblue\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          1.5618908300000003,\n          1.8117385375000004,\n          1.8117385375000004,\n          1.5618908300000003,\n          1.5618908300000003\n         ],\n         \"y\": [\n          9.600000000000001,\n          9.600000000000001,\n          10.4,\n          10.4,\n          9.600000000000001\n         ],\n         \"z\": [\n          0.03489950000000005,\n          0.04362437500000005,\n          0.04362437500000005,\n          0.03489950000000005,\n          0.03489950000000005\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"lightskyblue\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          1.5618908300000003,\n          1.8117385375000004,\n          1.8117385375000004,\n          1.5618908300000003,\n          1.5618908300000003\n         ],\n         \"y\": [\n          10.4,\n          10.4,\n          11.200000000000001,\n          11.200000000000001,\n          10.4\n         ],\n         \"z\": [\n          0.03489950000000005,\n          0.04362437500000005,\n          0.04362437500000005,\n          0.03489950000000005,\n          0.03489950000000005\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"lightskyblue\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          1.5618908300000003,\n          1.8117385375000004,\n          1.8117385375000004,\n          1.5618908300000003,\n          1.5618908300000003\n         ],\n         \"y\": [\n          11.200000000000001,\n          11.200000000000001,\n          12,\n          12,\n          11.200000000000001\n         ],\n         \"z\": [\n          0.03489950000000005,\n          0.04362437500000005,\n          0.04362437500000005,\n          0.03489950000000005,\n          0.03489950000000005\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"lightskyblue\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          1.5618908300000003,\n          1.8117385375000004,\n          1.8117385375000004,\n          1.5618908300000003,\n          1.5618908300000003\n         ],\n         \"y\": [\n          12,\n          12,\n          12.8,\n          12.8,\n          12\n         ],\n         \"z\": [\n          0.03489950000000005,\n          0.04362437500000005,\n          0.04362437500000005,\n          0.03489950000000005,\n          0.03489950000000005\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"lightskyblue\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          1.5618908300000003,\n          1.8117385375000004,\n          1.8117385375000004,\n          1.5618908300000003,\n          1.5618908300000003\n         ],\n         \"y\": [\n          12.8,\n          12.8,\n          13.600000000000001,\n          13.600000000000001,\n          12.8\n         ],\n         \"z\": [\n          0.03489950000000005,\n          0.04362437500000005,\n          0.04362437500000005,\n          0.03489950000000005,\n          0.03489950000000005\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"lightskyblue\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          1.5618908300000003,\n          1.8117385375000004,\n          1.8117385375000004,\n          1.5618908300000003,\n          1.5618908300000003\n         ],\n         \"y\": [\n          13.600000000000001,\n          13.600000000000001,\n          14.4,\n          14.4,\n          13.600000000000001\n         ],\n         \"z\": [\n          0.03489950000000005,\n          0.04362437500000005,\n          0.04362437500000005,\n          0.03489950000000005,\n          0.03489950000000005\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"lightskyblue\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          1.5618908300000003,\n          1.8117385375000004,\n          1.8117385375000004,\n          1.5618908300000003,\n          1.5618908300000003\n         ],\n         \"y\": [\n          14.4,\n          14.4,\n          15.200000000000001,\n          15.200000000000001,\n          14.4\n         ],\n         \"z\": [\n          0.03489950000000005,\n          0.04362437500000005,\n          0.04362437500000005,\n          0.03489950000000005,\n          0.03489950000000005\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"lightskyblue\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          1.5618908300000003,\n          1.8117385375000004,\n          1.8117385375000004,\n          1.5618908300000003,\n          1.5618908300000003\n         ],\n         \"y\": [\n          15.200000000000001,\n          15.200000000000001,\n          16,\n          16,\n          15.200000000000001\n         ],\n         \"z\": [\n          0.03489950000000005,\n          0.04362437500000005,\n          0.04362437500000005,\n          0.03489950000000005,\n          0.03489950000000005\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"lightskyblue\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          1.8117385375000004,\n          2.0615862450000004,\n          2.0615862450000004,\n          1.8117385375000004,\n          1.8117385375000004\n         ],\n         \"y\": [\n          9.162206417444405e-18,\n          9.162206417444405e-18,\n          0.8,\n          0.8,\n          9.162206417444405e-18\n         ],\n         \"z\": [\n          0.04362437500000005,\n          0.05234925000000005,\n          0.05234925000000005,\n          0.04362437500000005,\n          0.04362437500000005\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"lightskyblue\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          1.8117385375000004,\n          2.0615862450000004,\n          2.0615862450000004,\n          1.8117385375000004,\n          1.8117385375000004\n         ],\n         \"y\": [\n          0.8,\n          0.8,\n          1.6,\n          1.6,\n          0.8\n         ],\n         \"z\": [\n          0.04362437500000005,\n          0.05234925000000005,\n          0.05234925000000005,\n          0.04362437500000005,\n          0.04362437500000005\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"lightskyblue\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          1.8117385375000004,\n          2.0615862450000004,\n          2.0615862450000004,\n          1.8117385375000004,\n          1.8117385375000004\n         ],\n         \"y\": [\n          1.6,\n          1.6,\n          2.4000000000000004,\n          2.4000000000000004,\n          1.6\n         ],\n         \"z\": [\n          0.04362437500000005,\n          0.05234925000000005,\n          0.05234925000000005,\n          0.04362437500000005,\n          0.04362437500000005\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"lightskyblue\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          1.8117385375000004,\n          2.0615862450000004,\n          2.0615862450000004,\n          1.8117385375000004,\n          1.8117385375000004\n         ],\n         \"y\": [\n          2.4000000000000004,\n          2.4000000000000004,\n          3.2,\n          3.2,\n          2.4000000000000004\n         ],\n         \"z\": [\n          0.04362437500000005,\n          0.05234925000000005,\n          0.05234925000000005,\n          0.04362437500000005,\n          0.04362437500000005\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"lightskyblue\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          1.8117385375000004,\n          2.0615862450000004,\n          2.0615862450000004,\n          1.8117385375000004,\n          1.8117385375000004\n         ],\n         \"y\": [\n          3.2,\n          3.2,\n          4,\n          4,\n          3.2\n         ],\n         \"z\": [\n          0.04362437500000005,\n          0.05234925000000005,\n          0.05234925000000005,\n          0.04362437500000005,\n          0.04362437500000005\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"lightskyblue\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          1.8117385375000004,\n          2.0615862450000004,\n          2.0615862450000004,\n          1.8117385375000004,\n          1.8117385375000004\n         ],\n         \"y\": [\n          4,\n          4,\n          4.800000000000001,\n          4.800000000000001,\n          4\n         ],\n         \"z\": [\n          0.04362437500000005,\n          0.05234925000000005,\n          0.05234925000000005,\n          0.04362437500000005,\n          0.04362437500000005\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"lightskyblue\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          1.8117385375000004,\n          2.0615862450000004,\n          2.0615862450000004,\n          1.8117385375000004,\n          1.8117385375000004\n         ],\n         \"y\": [\n          4.800000000000001,\n          4.800000000000001,\n          5.6000000000000005,\n          5.6000000000000005,\n          4.800000000000001\n         ],\n         \"z\": [\n          0.04362437500000005,\n          0.05234925000000005,\n          0.05234925000000005,\n          0.04362437500000005,\n          0.04362437500000005\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"lightskyblue\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          1.8117385375000004,\n          2.0615862450000004,\n          2.0615862450000004,\n          1.8117385375000004,\n          1.8117385375000004\n         ],\n         \"y\": [\n          5.6000000000000005,\n          5.6000000000000005,\n          6.4,\n          6.4,\n          5.6000000000000005\n         ],\n         \"z\": [\n          0.04362437500000005,\n          0.05234925000000005,\n          0.05234925000000005,\n          0.04362437500000005,\n          0.04362437500000005\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"lightskyblue\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          1.8117385375000004,\n          2.0615862450000004,\n          2.0615862450000004,\n          1.8117385375000004,\n          1.8117385375000004\n         ],\n         \"y\": [\n          6.4,\n          6.4,\n          7.2,\n          7.2,\n          6.4\n         ],\n         \"z\": [\n          0.04362437500000005,\n          0.05234925000000005,\n          0.05234925000000005,\n          0.04362437500000005,\n          0.04362437500000005\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"lightskyblue\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          1.8117385375000004,\n          2.0615862450000004,\n          2.0615862450000004,\n          1.8117385375000004,\n          1.8117385375000004\n         ],\n         \"y\": [\n          7.2,\n          7.2,\n          8,\n          8,\n          7.2\n         ],\n         \"z\": [\n          0.04362437500000005,\n          0.05234925000000005,\n          0.05234925000000005,\n          0.04362437500000005,\n          0.04362437500000005\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"lightskyblue\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          1.8117385375000004,\n          2.0615862450000004,\n          2.0615862450000004,\n          1.8117385375000004,\n          1.8117385375000004\n         ],\n         \"y\": [\n          8,\n          8,\n          8.8,\n          8.8,\n          8\n         ],\n         \"z\": [\n          0.04362437500000005,\n          0.05234925000000005,\n          0.05234925000000005,\n          0.04362437500000005,\n          0.04362437500000005\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"lightskyblue\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          1.8117385375000004,\n          2.0615862450000004,\n          2.0615862450000004,\n          1.8117385375000004,\n          1.8117385375000004\n         ],\n         \"y\": [\n          8.8,\n          8.8,\n          9.600000000000001,\n          9.600000000000001,\n          8.8\n         ],\n         \"z\": [\n          0.04362437500000005,\n          0.05234925000000005,\n          0.05234925000000005,\n          0.04362437500000005,\n          0.04362437500000005\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"lightskyblue\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          1.8117385375000004,\n          2.0615862450000004,\n          2.0615862450000004,\n          1.8117385375000004,\n          1.8117385375000004\n         ],\n         \"y\": [\n          9.600000000000001,\n          9.600000000000001,\n          10.4,\n          10.4,\n          9.600000000000001\n         ],\n         \"z\": [\n          0.04362437500000005,\n          0.05234925000000005,\n          0.05234925000000005,\n          0.04362437500000005,\n          0.04362437500000005\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"lightskyblue\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          1.8117385375000004,\n          2.0615862450000004,\n          2.0615862450000004,\n          1.8117385375000004,\n          1.8117385375000004\n         ],\n         \"y\": [\n          10.4,\n          10.4,\n          11.200000000000001,\n          11.200000000000001,\n          10.4\n         ],\n         \"z\": [\n          0.04362437500000005,\n          0.05234925000000005,\n          0.05234925000000005,\n          0.04362437500000005,\n          0.04362437500000005\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"lightskyblue\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          1.8117385375000004,\n          2.0615862450000004,\n          2.0615862450000004,\n          1.8117385375000004,\n          1.8117385375000004\n         ],\n         \"y\": [\n          11.200000000000001,\n          11.200000000000001,\n          12,\n          12,\n          11.200000000000001\n         ],\n         \"z\": [\n          0.04362437500000005,\n          0.05234925000000005,\n          0.05234925000000005,\n          0.04362437500000005,\n          0.04362437500000005\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"lightskyblue\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          1.8117385375000004,\n          2.0615862450000004,\n          2.0615862450000004,\n          1.8117385375000004,\n          1.8117385375000004\n         ],\n         \"y\": [\n          12,\n          12,\n          12.8,\n          12.8,\n          12\n         ],\n         \"z\": [\n          0.04362437500000005,\n          0.05234925000000005,\n          0.05234925000000005,\n          0.04362437500000005,\n          0.04362437500000005\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"lightskyblue\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          1.8117385375000004,\n          2.0615862450000004,\n          2.0615862450000004,\n          1.8117385375000004,\n          1.8117385375000004\n         ],\n         \"y\": [\n          12.8,\n          12.8,\n          13.600000000000001,\n          13.600000000000001,\n          12.8\n         ],\n         \"z\": [\n          0.04362437500000005,\n          0.05234925000000005,\n          0.05234925000000005,\n          0.04362437500000005,\n          0.04362437500000005\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"lightskyblue\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          1.8117385375000004,\n          2.0615862450000004,\n          2.0615862450000004,\n          1.8117385375000004,\n          1.8117385375000004\n         ],\n         \"y\": [\n          13.600000000000001,\n          13.600000000000001,\n          14.4,\n          14.4,\n          13.600000000000001\n         ],\n         \"z\": [\n          0.04362437500000005,\n          0.05234925000000005,\n          0.05234925000000005,\n          0.04362437500000005,\n          0.04362437500000005\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"lightskyblue\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          1.8117385375000004,\n          2.0615862450000004,\n          2.0615862450000004,\n          1.8117385375000004,\n          1.8117385375000004\n         ],\n         \"y\": [\n          14.4,\n          14.4,\n          15.200000000000001,\n          15.200000000000001,\n          14.4\n         ],\n         \"z\": [\n          0.04362437500000005,\n          0.05234925000000005,\n          0.05234925000000005,\n          0.04362437500000005,\n          0.04362437500000005\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"lightskyblue\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          1.8117385375000004,\n          2.0615862450000004,\n          2.0615862450000004,\n          1.8117385375000004,\n          1.8117385375000004\n         ],\n         \"y\": [\n          15.200000000000001,\n          15.200000000000001,\n          16,\n          16,\n          15.200000000000001\n         ],\n         \"z\": [\n          0.04362437500000005,\n          0.05234925000000005,\n          0.05234925000000005,\n          0.04362437500000005,\n          0.04362437500000005\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"grey\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          0.5625000000000001,\n          0.5625000000000001,\n          0.5625000000000001,\n          0.5625000000000001,\n          0.5625000000000001,\n          0.5625000000000001,\n          0.5625000000000001,\n          0.5625000000000001,\n          0.5625000000000001,\n          0.5625000000000001,\n          0.5625000000000001,\n          0.5625000000000001,\n          0.5625000000000001,\n          0.5625000000000001,\n          0.5625000000000001,\n          0.5625000000000001,\n          0.5625000000000001,\n          0.5625000000000001,\n          0.5625000000000001,\n          0.5625000000000001,\n          0.5625000000000001\n         ],\n         \"y\": [\n          9.162206417444405e-18,\n          0.8,\n          1.6,\n          2.4000000000000004,\n          3.2,\n          4,\n          4.800000000000001,\n          5.6000000000000005,\n          6.4,\n          7.2,\n          8,\n          8.8,\n          9.600000000000001,\n          10.4,\n          11.200000000000001,\n          12,\n          12.8,\n          13.600000000000001,\n          14.4,\n          15.200000000000001,\n          16\n         ],\n         \"z\": [\n          4.871002816324649e-17,\n          4.871002816324649e-17,\n          4.871002816324649e-17,\n          4.871002816324649e-17,\n          4.871002816324649e-17,\n          4.871002816324649e-17,\n          4.871002816324649e-17,\n          4.871002816324649e-17,\n          4.871002816324649e-17,\n          4.871002816324649e-17,\n          4.871002816324649e-17,\n          4.871002816324649e-17,\n          4.871002816324649e-17,\n          4.871002816324649e-17,\n          4.871002816324649e-17,\n          4.871002816324649e-17,\n          4.871002816324649e-17,\n          4.871002816324649e-17,\n          4.871002816324649e-17,\n          4.871002816324649e-17,\n          4.871002816324649e-17\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"grey\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          0.8123477075000001,\n          0.8123477075000001,\n          0.8123477075000001,\n          0.8123477075000001,\n          0.8123477075000001,\n          0.8123477075000001,\n          0.8123477075000001,\n          0.8123477075000001,\n          0.8123477075000001,\n          0.8123477075000001,\n          0.8123477075000001,\n          0.8123477075000001,\n          0.8123477075000001,\n          0.8123477075000001,\n          0.8123477075000001,\n          0.8123477075000001,\n          0.8123477075000001,\n          0.8123477075000001,\n          0.8123477075000001,\n          0.8123477075000001,\n          0.8123477075000001\n         ],\n         \"y\": [\n          9.162206417444405e-18,\n          0.8,\n          1.6,\n          2.4000000000000004,\n          3.2,\n          4,\n          4.800000000000001,\n          5.6000000000000005,\n          6.4,\n          7.2,\n          8,\n          8.8,\n          9.600000000000001,\n          10.4,\n          11.200000000000001,\n          12,\n          12.8,\n          13.600000000000001,\n          14.4,\n          15.200000000000001,\n          16\n         ],\n         \"z\": [\n          0.008724875000000049,\n          0.008724875000000049,\n          0.008724875000000049,\n          0.008724875000000049,\n          0.008724875000000049,\n          0.008724875000000049,\n          0.008724875000000049,\n          0.008724875000000049,\n          0.008724875000000049,\n          0.008724875000000049,\n          0.008724875000000049,\n          0.008724875000000049,\n          0.008724875000000049,\n          0.008724875000000049,\n          0.008724875000000049,\n          0.008724875000000049,\n          0.008724875000000049,\n          0.008724875000000049,\n          0.008724875000000049,\n          0.008724875000000049,\n          0.008724875000000049\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"grey\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          1.0621954150000001,\n          1.0621954150000001,\n          1.0621954150000001,\n          1.0621954150000001,\n          1.0621954150000001,\n          1.0621954150000001,\n          1.0621954150000001,\n          1.0621954150000001,\n          1.0621954150000001,\n          1.0621954150000001,\n          1.0621954150000001,\n          1.0621954150000001,\n          1.0621954150000001,\n          1.0621954150000001,\n          1.0621954150000001,\n          1.0621954150000001,\n          1.0621954150000001,\n          1.0621954150000001,\n          1.0621954150000001,\n          1.0621954150000001,\n          1.0621954150000001\n         ],\n         \"y\": [\n          9.162206417444405e-18,\n          0.8,\n          1.6,\n          2.4000000000000004,\n          3.2,\n          4,\n          4.800000000000001,\n          5.6000000000000005,\n          6.4,\n          7.2,\n          8,\n          8.8,\n          9.600000000000001,\n          10.4,\n          11.200000000000001,\n          12,\n          12.8,\n          13.600000000000001,\n          14.4,\n          15.200000000000001,\n          16\n         ],\n         \"z\": [\n          0.01744975000000005,\n          0.01744975000000005,\n          0.01744975000000005,\n          0.01744975000000005,\n          0.01744975000000005,\n          0.01744975000000005,\n          0.01744975000000005,\n          0.01744975000000005,\n          0.01744975000000005,\n          0.01744975000000005,\n          0.01744975000000005,\n          0.01744975000000005,\n          0.01744975000000005,\n          0.01744975000000005,\n          0.01744975000000005,\n          0.01744975000000005,\n          0.01744975000000005,\n          0.01744975000000005,\n          0.01744975000000005,\n          0.01744975000000005,\n          0.01744975000000005\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"grey\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          1.3120431225000002,\n          1.3120431225000002,\n          1.3120431225000002,\n          1.3120431225000002,\n          1.3120431225000002,\n          1.3120431225000002,\n          1.3120431225000002,\n          1.3120431225000002,\n          1.3120431225000002,\n          1.3120431225000002,\n          1.3120431225000002,\n          1.3120431225000002,\n          1.3120431225000002,\n          1.3120431225000002,\n          1.3120431225000002,\n          1.3120431225000002,\n          1.3120431225000002,\n          1.3120431225000002,\n          1.3120431225000002,\n          1.3120431225000002,\n          1.3120431225000002\n         ],\n         \"y\": [\n          9.162206417444405e-18,\n          0.8,\n          1.6,\n          2.4000000000000004,\n          3.2,\n          4,\n          4.800000000000001,\n          5.6000000000000005,\n          6.4,\n          7.2,\n          8,\n          8.8,\n          9.600000000000001,\n          10.4,\n          11.200000000000001,\n          12,\n          12.8,\n          13.600000000000001,\n          14.4,\n          15.200000000000001,\n          16\n         ],\n         \"z\": [\n          0.02617462500000005,\n          0.02617462500000005,\n          0.02617462500000005,\n          0.02617462500000005,\n          0.02617462500000005,\n          0.02617462500000005,\n          0.02617462500000005,\n          0.02617462500000005,\n          0.02617462500000005,\n          0.02617462500000005,\n          0.02617462500000005,\n          0.02617462500000005,\n          0.02617462500000005,\n          0.02617462500000005,\n          0.02617462500000005,\n          0.02617462500000005,\n          0.02617462500000005,\n          0.02617462500000005,\n          0.02617462500000005,\n          0.02617462500000005,\n          0.02617462500000005\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"grey\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          1.5618908300000003,\n          1.5618908300000003,\n          1.5618908300000003,\n          1.5618908300000003,\n          1.5618908300000003,\n          1.5618908300000003,\n          1.5618908300000003,\n          1.5618908300000003,\n          1.5618908300000003,\n          1.5618908300000003,\n          1.5618908300000003,\n          1.5618908300000003,\n          1.5618908300000003,\n          1.5618908300000003,\n          1.5618908300000003,\n          1.5618908300000003,\n          1.5618908300000003,\n          1.5618908300000003,\n          1.5618908300000003,\n          1.5618908300000003,\n          1.5618908300000003\n         ],\n         \"y\": [\n          9.162206417444405e-18,\n          0.8,\n          1.6,\n          2.4000000000000004,\n          3.2,\n          4,\n          4.800000000000001,\n          5.6000000000000005,\n          6.4,\n          7.2,\n          8,\n          8.8,\n          9.600000000000001,\n          10.4,\n          11.200000000000001,\n          12,\n          12.8,\n          13.600000000000001,\n          14.4,\n          15.200000000000001,\n          16\n         ],\n         \"z\": [\n          0.03489950000000005,\n          0.03489950000000005,\n          0.03489950000000005,\n          0.03489950000000005,\n          0.03489950000000005,\n          0.03489950000000005,\n          0.03489950000000005,\n          0.03489950000000005,\n          0.03489950000000005,\n          0.03489950000000005,\n          0.03489950000000005,\n          0.03489950000000005,\n          0.03489950000000005,\n          0.03489950000000005,\n          0.03489950000000005,\n          0.03489950000000005,\n          0.03489950000000005,\n          0.03489950000000005,\n          0.03489950000000005,\n          0.03489950000000005,\n          0.03489950000000005\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"grey\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          1.8117385375000004,\n          1.8117385375000004,\n          1.8117385375000004,\n          1.8117385375000004,\n          1.8117385375000004,\n          1.8117385375000004,\n          1.8117385375000004,\n          1.8117385375000004,\n          1.8117385375000004,\n          1.8117385375000004,\n          1.8117385375000004,\n          1.8117385375000004,\n          1.8117385375000004,\n          1.8117385375000004,\n          1.8117385375000004,\n          1.8117385375000004,\n          1.8117385375000004,\n          1.8117385375000004,\n          1.8117385375000004,\n          1.8117385375000004,\n          1.8117385375000004\n         ],\n         \"y\": [\n          9.162206417444405e-18,\n          0.8,\n          1.6,\n          2.4000000000000004,\n          3.2,\n          4,\n          4.800000000000001,\n          5.6000000000000005,\n          6.4,\n          7.2,\n          8,\n          8.8,\n          9.600000000000001,\n          10.4,\n          11.200000000000001,\n          12,\n          12.8,\n          13.600000000000001,\n          14.4,\n          15.200000000000001,\n          16\n         ],\n         \"z\": [\n          0.04362437500000005,\n          0.04362437500000005,\n          0.04362437500000005,\n          0.04362437500000005,\n          0.04362437500000005,\n          0.04362437500000005,\n          0.04362437500000005,\n          0.04362437500000005,\n          0.04362437500000005,\n          0.04362437500000005,\n          0.04362437500000005,\n          0.04362437500000005,\n          0.04362437500000005,\n          0.04362437500000005,\n          0.04362437500000005,\n          0.04362437500000005,\n          0.04362437500000005,\n          0.04362437500000005,\n          0.04362437500000005,\n          0.04362437500000005,\n          0.04362437500000005\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"grey\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          2.0615862450000004,\n          2.0615862450000004,\n          2.0615862450000004,\n          2.0615862450000004,\n          2.0615862450000004,\n          2.0615862450000004,\n          2.0615862450000004,\n          2.0615862450000004,\n          2.0615862450000004,\n          2.0615862450000004,\n          2.0615862450000004,\n          2.0615862450000004,\n          2.0615862450000004,\n          2.0615862450000004,\n          2.0615862450000004,\n          2.0615862450000004,\n          2.0615862450000004,\n          2.0615862450000004,\n          2.0615862450000004,\n          2.0615862450000004,\n          2.0615862450000004\n         ],\n         \"y\": [\n          9.162206417444405e-18,\n          0.8,\n          1.6,\n          2.4000000000000004,\n          3.2,\n          4,\n          4.800000000000001,\n          5.6000000000000005,\n          6.4,\n          7.2,\n          8,\n          8.8,\n          9.600000000000001,\n          10.4,\n          11.200000000000001,\n          12,\n          12.8,\n          13.600000000000001,\n          14.4,\n          15.200000000000001,\n          16\n         ],\n         \"z\": [\n          0.05234925000000005,\n          0.05234925000000005,\n          0.05234925000000005,\n          0.05234925000000005,\n          0.05234925000000005,\n          0.05234925000000005,\n          0.05234925000000005,\n          0.05234925000000005,\n          0.05234925000000005,\n          0.05234925000000005,\n          0.05234925000000005,\n          0.05234925000000005,\n          0.05234925000000005,\n          0.05234925000000005,\n          0.05234925000000005,\n          0.05234925000000005,\n          0.05234925000000005,\n          0.05234925000000005,\n          0.05234925000000005,\n          0.05234925000000005,\n          0.05234925000000005\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"grey\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          0.5625000000000001,\n          0.8123477075000001,\n          1.0621954150000001,\n          1.3120431225000002,\n          1.5618908300000003,\n          1.8117385375000004,\n          2.0615862450000004\n         ],\n         \"y\": [\n          9.162206417444405e-18,\n          9.162206417444405e-18,\n          9.162206417444405e-18,\n          9.162206417444405e-18,\n          9.162206417444405e-18,\n          9.162206417444405e-18,\n          9.162206417444405e-18\n         ],\n         \"z\": [\n          4.871002816324649e-17,\n          0.008724875000000049,\n          0.01744975000000005,\n          0.02617462500000005,\n          0.03489950000000005,\n          0.04362437500000005,\n          0.05234925000000005\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"grey\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          0.5625000000000001,\n          0.8123477075000001,\n          1.0621954150000001,\n          1.3120431225000002,\n          1.5618908300000003,\n          1.8117385375000004,\n          2.0615862450000004\n         ],\n         \"y\": [\n          0.8,\n          0.8,\n          0.8,\n          0.8,\n          0.8,\n          0.8,\n          0.8\n         ],\n         \"z\": [\n          4.871002816324649e-17,\n          0.008724875000000049,\n          0.01744975000000005,\n          0.02617462500000005,\n          0.03489950000000005,\n          0.04362437500000005,\n          0.05234925000000005\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"grey\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          0.5625000000000001,\n          0.8123477075000001,\n          1.0621954150000001,\n          1.3120431225000002,\n          1.5618908300000003,\n          1.8117385375000004,\n          2.0615862450000004\n         ],\n         \"y\": [\n          1.6,\n          1.6,\n          1.6,\n          1.6,\n          1.6,\n          1.6,\n          1.6\n         ],\n         \"z\": [\n          4.871002816324649e-17,\n          0.008724875000000049,\n          0.01744975000000005,\n          0.02617462500000005,\n          0.03489950000000005,\n          0.04362437500000005,\n          0.05234925000000005\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"grey\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          0.5625000000000001,\n          0.8123477075000001,\n          1.0621954150000001,\n          1.3120431225000002,\n          1.5618908300000003,\n          1.8117385375000004,\n          2.0615862450000004\n         ],\n         \"y\": [\n          2.4000000000000004,\n          2.4000000000000004,\n          2.4000000000000004,\n          2.4000000000000004,\n          2.4000000000000004,\n          2.4000000000000004,\n          2.4000000000000004\n         ],\n         \"z\": [\n          4.871002816324649e-17,\n          0.008724875000000049,\n          0.01744975000000005,\n          0.02617462500000005,\n          0.03489950000000005,\n          0.04362437500000005,\n          0.05234925000000005\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"grey\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          0.5625000000000001,\n          0.8123477075000001,\n          1.0621954150000001,\n          1.3120431225000002,\n          1.5618908300000003,\n          1.8117385375000004,\n          2.0615862450000004\n         ],\n         \"y\": [\n          3.2,\n          3.2,\n          3.2,\n          3.2,\n          3.2,\n          3.2,\n          3.2\n         ],\n         \"z\": [\n          4.871002816324649e-17,\n          0.008724875000000049,\n          0.01744975000000005,\n          0.02617462500000005,\n          0.03489950000000005,\n          0.04362437500000005,\n          0.05234925000000005\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"grey\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          0.5625000000000001,\n          0.8123477075000001,\n          1.0621954150000001,\n          1.3120431225000002,\n          1.5618908300000003,\n          1.8117385375000004,\n          2.0615862450000004\n         ],\n         \"y\": [\n          4,\n          4,\n          4,\n          4,\n          4,\n          4,\n          4\n         ],\n         \"z\": [\n          4.871002816324649e-17,\n          0.008724875000000049,\n          0.01744975000000005,\n          0.02617462500000005,\n          0.03489950000000005,\n          0.04362437500000005,\n          0.05234925000000005\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"grey\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          0.5625000000000001,\n          0.8123477075000001,\n          1.0621954150000001,\n          1.3120431225000002,\n          1.5618908300000003,\n          1.8117385375000004,\n          2.0615862450000004\n         ],\n         \"y\": [\n          4.800000000000001,\n          4.800000000000001,\n          4.800000000000001,\n          4.800000000000001,\n          4.800000000000001,\n          4.800000000000001,\n          4.800000000000001\n         ],\n         \"z\": [\n          4.871002816324649e-17,\n          0.008724875000000049,\n          0.01744975000000005,\n          0.02617462500000005,\n          0.03489950000000005,\n          0.04362437500000005,\n          0.05234925000000005\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"grey\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          0.5625000000000001,\n          0.8123477075000001,\n          1.0621954150000001,\n          1.3120431225000002,\n          1.5618908300000003,\n          1.8117385375000004,\n          2.0615862450000004\n         ],\n         \"y\": [\n          5.6000000000000005,\n          5.6000000000000005,\n          5.6000000000000005,\n          5.6000000000000005,\n          5.6000000000000005,\n          5.6000000000000005,\n          5.6000000000000005\n         ],\n         \"z\": [\n          4.871002816324649e-17,\n          0.008724875000000049,\n          0.01744975000000005,\n          0.02617462500000005,\n          0.03489950000000005,\n          0.04362437500000005,\n          0.05234925000000005\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"grey\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          0.5625000000000001,\n          0.8123477075000001,\n          1.0621954150000001,\n          1.3120431225000002,\n          1.5618908300000003,\n          1.8117385375000004,\n          2.0615862450000004\n         ],\n         \"y\": [\n          6.4,\n          6.4,\n          6.4,\n          6.4,\n          6.4,\n          6.4,\n          6.4\n         ],\n         \"z\": [\n          4.871002816324649e-17,\n          0.008724875000000049,\n          0.01744975000000005,\n          0.02617462500000005,\n          0.03489950000000005,\n          0.04362437500000005,\n          0.05234925000000005\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"grey\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          0.5625000000000001,\n          0.8123477075000001,\n          1.0621954150000001,\n          1.3120431225000002,\n          1.5618908300000003,\n          1.8117385375000004,\n          2.0615862450000004\n         ],\n         \"y\": [\n          7.2,\n          7.2,\n          7.2,\n          7.2,\n          7.2,\n          7.2,\n          7.2\n         ],\n         \"z\": [\n          4.871002816324649e-17,\n          0.008724875000000049,\n          0.01744975000000005,\n          0.02617462500000005,\n          0.03489950000000005,\n          0.04362437500000005,\n          0.05234925000000005\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"grey\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          0.5625000000000001,\n          0.8123477075000001,\n          1.0621954150000001,\n          1.3120431225000002,\n          1.5618908300000003,\n          1.8117385375000004,\n          2.0615862450000004\n         ],\n         \"y\": [\n          8,\n          8,\n          8,\n          8,\n          8,\n          8,\n          8\n         ],\n         \"z\": [\n          4.871002816324649e-17,\n          0.008724875000000049,\n          0.01744975000000005,\n          0.02617462500000005,\n          0.03489950000000005,\n          0.04362437500000005,\n          0.05234925000000005\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"grey\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          0.5625000000000001,\n          0.8123477075000001,\n          1.0621954150000001,\n          1.3120431225000002,\n          1.5618908300000003,\n          1.8117385375000004,\n          2.0615862450000004\n         ],\n         \"y\": [\n          8.8,\n          8.8,\n          8.8,\n          8.8,\n          8.8,\n          8.8,\n          8.8\n         ],\n         \"z\": [\n          4.871002816324649e-17,\n          0.008724875000000049,\n          0.01744975000000005,\n          0.02617462500000005,\n          0.03489950000000005,\n          0.04362437500000005,\n          0.05234925000000005\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"grey\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          0.5625000000000001,\n          0.8123477075000001,\n          1.0621954150000001,\n          1.3120431225000002,\n          1.5618908300000003,\n          1.8117385375000004,\n          2.0615862450000004\n         ],\n         \"y\": [\n          9.600000000000001,\n          9.600000000000001,\n          9.600000000000001,\n          9.600000000000001,\n          9.600000000000001,\n          9.600000000000001,\n          9.600000000000001\n         ],\n         \"z\": [\n          4.871002816324649e-17,\n          0.008724875000000049,\n          0.01744975000000005,\n          0.02617462500000005,\n          0.03489950000000005,\n          0.04362437500000005,\n          0.05234925000000005\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"grey\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          0.5625000000000001,\n          0.8123477075000001,\n          1.0621954150000001,\n          1.3120431225000002,\n          1.5618908300000003,\n          1.8117385375000004,\n          2.0615862450000004\n         ],\n         \"y\": [\n          10.4,\n          10.4,\n          10.4,\n          10.4,\n          10.4,\n          10.4,\n          10.4\n         ],\n         \"z\": [\n          4.871002816324649e-17,\n          0.008724875000000049,\n          0.01744975000000005,\n          0.02617462500000005,\n          0.03489950000000005,\n          0.04362437500000005,\n          0.05234925000000005\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"grey\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          0.5625000000000001,\n          0.8123477075000001,\n          1.0621954150000001,\n          1.3120431225000002,\n          1.5618908300000003,\n          1.8117385375000004,\n          2.0615862450000004\n         ],\n         \"y\": [\n          11.200000000000001,\n          11.200000000000001,\n          11.200000000000001,\n          11.200000000000001,\n          11.200000000000001,\n          11.200000000000001,\n          11.200000000000001\n         ],\n         \"z\": [\n          4.871002816324649e-17,\n          0.008724875000000049,\n          0.01744975000000005,\n          0.02617462500000005,\n          0.03489950000000005,\n          0.04362437500000005,\n          0.05234925000000005\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"grey\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          0.5625000000000001,\n          0.8123477075000001,\n          1.0621954150000001,\n          1.3120431225000002,\n          1.5618908300000003,\n          1.8117385375000004,\n          2.0615862450000004\n         ],\n         \"y\": [\n          12,\n          12,\n          12,\n          12,\n          12,\n          12,\n          12\n         ],\n         \"z\": [\n          4.871002816324649e-17,\n          0.008724875000000049,\n          0.01744975000000005,\n          0.02617462500000005,\n          0.03489950000000005,\n          0.04362437500000005,\n          0.05234925000000005\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"grey\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          0.5625000000000001,\n          0.8123477075000001,\n          1.0621954150000001,\n          1.3120431225000002,\n          1.5618908300000003,\n          1.8117385375000004,\n          2.0615862450000004\n         ],\n         \"y\": [\n          12.8,\n          12.8,\n          12.8,\n          12.8,\n          12.8,\n          12.8,\n          12.8\n         ],\n         \"z\": [\n          4.871002816324649e-17,\n          0.008724875000000049,\n          0.01744975000000005,\n          0.02617462500000005,\n          0.03489950000000005,\n          0.04362437500000005,\n          0.05234925000000005\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"grey\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          0.5625000000000001,\n          0.8123477075000001,\n          1.0621954150000001,\n          1.3120431225000002,\n          1.5618908300000003,\n          1.8117385375000004,\n          2.0615862450000004\n         ],\n         \"y\": [\n          13.600000000000001,\n          13.600000000000001,\n          13.600000000000001,\n          13.600000000000001,\n          13.600000000000001,\n          13.600000000000001,\n          13.600000000000001\n         ],\n         \"z\": [\n          4.871002816324649e-17,\n          0.008724875000000049,\n          0.01744975000000005,\n          0.02617462500000005,\n          0.03489950000000005,\n          0.04362437500000005,\n          0.05234925000000005\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"grey\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          0.5625000000000001,\n          0.8123477075000001,\n          1.0621954150000001,\n          1.3120431225000002,\n          1.5618908300000003,\n          1.8117385375000004,\n          2.0615862450000004\n         ],\n         \"y\": [\n          14.4,\n          14.4,\n          14.4,\n          14.4,\n          14.4,\n          14.4,\n          14.4\n         ],\n         \"z\": [\n          4.871002816324649e-17,\n          0.008724875000000049,\n          0.01744975000000005,\n          0.02617462500000005,\n          0.03489950000000005,\n          0.04362437500000005,\n          0.05234925000000005\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"grey\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          0.5625000000000001,\n          0.8123477075000001,\n          1.0621954150000001,\n          1.3120431225000002,\n          1.5618908300000003,\n          1.8117385375000004,\n          2.0615862450000004\n         ],\n         \"y\": [\n          15.200000000000001,\n          15.200000000000001,\n          15.200000000000001,\n          15.200000000000001,\n          15.200000000000001,\n          15.200000000000001,\n          15.200000000000001\n         ],\n         \"z\": [\n          4.871002816324649e-17,\n          0.008724875000000049,\n          0.01744975000000005,\n          0.02617462500000005,\n          0.03489950000000005,\n          0.04362437500000005,\n          0.05234925000000005\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"grey\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          0.5625000000000001,\n          0.8123477075000001,\n          1.0621954150000001,\n          1.3120431225000002,\n          1.5618908300000003,\n          1.8117385375000004,\n          2.0615862450000004\n         ],\n         \"y\": [\n          16,\n          16,\n          16,\n          16,\n          16,\n          16,\n          16\n         ],\n         \"z\": [\n          4.871002816324649e-17,\n          0.008724875000000049,\n          0.01744975000000005,\n          0.02617462500000005,\n          0.03489950000000005,\n          0.04362437500000005,\n          0.05234925000000005\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"blue\",\n          \"width\": 4\n         },\n         \"marker\": {\n          \"color\": \"blue\",\n          \"size\": 2\n         },\n         \"name\": \"Beam nodes\",\n         \"type\": \"scatter3d\",\n         \"x\": [\n          0,\n          0,\n          0\n         ],\n         \"y\": [\n          0,\n          0.8,\n          1.6\n         ],\n         \"z\": [\n          0,\n          0,\n          0\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"blue\",\n          \"width\": 4\n         },\n         \"marker\": {\n          \"color\": \"blue\",\n          \"size\": 2\n         },\n         \"showlegend\": false,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          0,\n          0,\n          0\n         ],\n         \"y\": [\n          1.6,\n          2.4000000000000004,\n          3.2\n         ],\n         \"z\": [\n          0,\n          0,\n          0\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"blue\",\n          \"width\": 4\n         },\n         \"marker\": {\n          \"color\": \"blue\",\n          \"size\": 2\n         },\n         \"showlegend\": false,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          0,\n          0,\n          0\n         ],\n         \"y\": [\n          3.2,\n          4,\n          4.800000000000001\n         ],\n         \"z\": [\n          0,\n          0,\n          0\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"blue\",\n          \"width\": 4\n         },\n         \"marker\": {\n          \"color\": \"blue\",\n          \"size\": 2\n         },\n         \"showlegend\": false,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          0,\n          0,\n          0\n         ],\n         \"y\": [\n          4.800000000000001,\n          5.6000000000000005,\n          6.4\n         ],\n         \"z\": [\n          0,\n          0,\n          0\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"blue\",\n          \"width\": 4\n         },\n         \"marker\": {\n          \"color\": \"blue\",\n          \"size\": 2\n         },\n         \"showlegend\": false,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          0,\n          0,\n          0\n         ],\n         \"y\": [\n          6.4,\n          7.2,\n          8\n         ],\n         \"z\": [\n          0,\n          0,\n          0\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"blue\",\n          \"width\": 4\n         },\n         \"marker\": {\n          \"color\": \"blue\",\n          \"size\": 2\n         },\n         \"showlegend\": false,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          0,\n          0,\n          0\n         ],\n         \"y\": [\n          8,\n          8.8,\n          9.600000000000001\n         ],\n         \"z\": [\n          0,\n          0,\n          0\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"blue\",\n          \"width\": 4\n         },\n         \"marker\": {\n          \"color\": \"blue\",\n          \"size\": 2\n         },\n         \"showlegend\": false,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          0,\n          0,\n          0\n         ],\n         \"y\": [\n          9.600000000000001,\n          10.4,\n          11.200000000000001\n         ],\n         \"z\": [\n          0,\n          0,\n          0\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"blue\",\n          \"width\": 4\n         },\n         \"marker\": {\n          \"color\": \"blue\",\n          \"size\": 2\n         },\n         \"showlegend\": false,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          0,\n          0,\n          0\n         ],\n         \"y\": [\n          11.200000000000001,\n          12,\n          12.8\n         ],\n         \"z\": [\n          0,\n          0,\n          0\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"blue\",\n          \"width\": 4\n         },\n         \"marker\": {\n          \"color\": \"blue\",\n          \"size\": 2\n         },\n         \"showlegend\": false,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          0,\n          0,\n          0\n         ],\n         \"y\": [\n          12.8,\n          13.600000000000001,\n          14.4\n         ],\n         \"z\": [\n          0,\n          0,\n          0\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"blue\",\n          \"width\": 4\n         },\n         \"marker\": {\n          \"color\": \"blue\",\n          \"size\": 2\n         },\n         \"showlegend\": false,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          0,\n          0,\n          0\n         ],\n         \"y\": [\n          14.4,\n          15.200000000000001,\n          16\n         ],\n         \"z\": [\n          0,\n          0,\n          0\n         ]\n        }\n       ],\n       \"layout\": {\n        \"autosize\": true,\n        \"scene\": {\n         \"aspectmode\": \"auto\",\n         \"aspectratio\": {\n          \"x\": 1,\n          \"y\": 1,\n          \"z\": 1\n         },\n         \"camera\": {\n          \"center\": {\n           \"x\": 0,\n           \"y\": 0,\n           \"z\": 0\n          },\n          \"eye\": {\n           \"x\": -1.2315038942222687,\n           \"y\": -1.577291494357572,\n           \"z\": 0.8264682089122644\n          },\n          \"projection\": {\n           \"type\": \"perspective\"\n          },\n          \"up\": {\n           \"x\": 0,\n           \"y\": 0,\n           \"z\": 1\n          }\n         }\n        },\n        \"template\": {\n         \"data\": {\n          \"bar\": [\n           {\n            \"error_x\": {\n             \"color\": \"#2a3f5f\"\n            },\n            \"error_y\": {\n             \"color\": \"#2a3f5f\"\n            },\n            \"marker\": {\n             \"line\": {\n              \"color\": \"#E5ECF6\",\n              \"width\": 0.5\n             },\n             \"pattern\": {\n              \"fillmode\": \"overlay\",\n              \"size\": 10,\n              \"solidity\": 0.2\n             }\n            },\n            \"type\": \"bar\"\n           }\n          ],\n          \"barpolar\": [\n           {\n            \"marker\": {\n             \"line\": {\n              \"color\": \"#E5ECF6\",\n              \"width\": 0.5\n             },\n             \"pattern\": {\n              \"fillmode\": \"overlay\",\n              \"size\": 10,\n              \"solidity\": 0.2\n             }\n            },\n            \"type\": \"barpolar\"\n           }\n          ],\n          \"carpet\": [\n           {\n            \"aaxis\": {\n             \"endlinecolor\": \"#2a3f5f\",\n             \"gridcolor\": \"white\",\n             \"linecolor\": \"white\",\n             \"minorgridcolor\": \"white\",\n             \"startlinecolor\": \"#2a3f5f\"\n            },\n            \"baxis\": {\n             \"endlinecolor\": \"#2a3f5f\",\n             \"gridcolor\": \"white\",\n             \"linecolor\": \"white\",\n             \"minorgridcolor\": \"white\",\n             \"startlinecolor\": \"#2a3f5f\"\n            },\n            \"type\": \"carpet\"\n           }\n          ],\n          \"choropleth\": [\n           {\n            \"colorbar\": {\n             \"outlinewidth\": 0,\n             \"ticks\": \"\"\n            },\n            \"type\": \"choropleth\"\n           }\n          ],\n          \"contour\": [\n           {\n            \"colorbar\": {\n             \"outlinewidth\": 0,\n             \"ticks\": \"\"\n            },\n            \"colorscale\": [\n             [\n              0,\n              \"#0d0887\"\n             ],\n             [\n              0.1111111111111111,\n              \"#46039f\"\n             ],\n             [\n              0.2222222222222222,\n              \"#7201a8\"\n             ],\n             [\n              0.3333333333333333,\n              \"#9c179e\"\n             ],\n             [\n              0.4444444444444444,\n              \"#bd3786\"\n             ],\n             [\n              0.5555555555555556,\n              \"#d8576b\"\n             ],\n             [\n              0.6666666666666666,\n              \"#ed7953\"\n             ],\n             [\n              0.7777777777777778,\n              \"#fb9f3a\"\n             ],\n             [\n              0.8888888888888888,\n              \"#fdca26\"\n             ],\n             [\n              1,\n              \"#f0f921\"\n             ]\n            ],\n            \"type\": \"contour\"\n           }\n          ],\n          \"contourcarpet\": [\n           {\n            \"colorbar\": {\n             \"outlinewidth\": 0,\n             \"ticks\": \"\"\n            },\n            \"type\": \"contourcarpet\"\n           }\n          ],\n          \"heatmap\": [\n           {\n            \"colorbar\": {\n             \"outlinewidth\": 0,\n             \"ticks\": \"\"\n            },\n            \"colorscale\": [\n             [\n              0,\n              \"#0d0887\"\n             ],\n             [\n              0.1111111111111111,\n              \"#46039f\"\n             ],\n             [\n              0.2222222222222222,\n              \"#7201a8\"\n             ],\n             [\n              0.3333333333333333,\n              \"#9c179e\"\n             ],\n             [\n              0.4444444444444444,\n              \"#bd3786\"\n             ],\n             [\n              0.5555555555555556,\n              \"#d8576b\"\n             ],\n             [\n              0.6666666666666666,\n              \"#ed7953\"\n             ],\n             [\n              0.7777777777777778,\n              \"#fb9f3a\"\n             ],\n             [\n              0.8888888888888888,\n              \"#fdca26\"\n             ],\n             [\n              1,\n              \"#f0f921\"\n             ]\n            ],\n            \"type\": \"heatmap\"\n           }\n          ],\n          \"heatmapgl\": [\n           {\n            \"colorbar\": {\n             \"outlinewidth\": 0,\n             \"ticks\": \"\"\n            },\n            \"colorscale\": [\n             [\n              0,\n              \"#0d0887\"\n             ],\n             [\n              0.1111111111111111,\n              \"#46039f\"\n             ],\n             [\n              0.2222222222222222,\n              \"#7201a8\"\n             ],\n             [\n              0.3333333333333333,\n              \"#9c179e\"\n             ],\n             [\n              0.4444444444444444,\n              \"#bd3786\"\n             ],\n             [\n              0.5555555555555556,\n              \"#d8576b\"\n             ],\n             [\n              0.6666666666666666,\n              \"#ed7953\"\n             ],\n             [\n              0.7777777777777778,\n              \"#fb9f3a\"\n             ],\n             [\n              0.8888888888888888,\n              \"#fdca26\"\n             ],\n             [\n              1,\n              \"#f0f921\"\n             ]\n            ],\n            \"type\": \"heatmapgl\"\n           }\n          ],\n          \"histogram\": [\n           {\n            \"marker\": {\n             \"pattern\": {\n              \"fillmode\": \"overlay\",\n              \"size\": 10,\n              \"solidity\": 0.2\n             }\n            },\n            \"type\": \"histogram\"\n           }\n          ],\n          \"histogram2d\": [\n           {\n            \"colorbar\": {\n             \"outlinewidth\": 0,\n             \"ticks\": \"\"\n            },\n            \"colorscale\": [\n             [\n              0,\n              \"#0d0887\"\n             ],\n             [\n              0.1111111111111111,\n              \"#46039f\"\n             ],\n             [\n              0.2222222222222222,\n              \"#7201a8\"\n             ],\n             [\n              0.3333333333333333,\n              \"#9c179e\"\n             ],\n             [\n              0.4444444444444444,\n              \"#bd3786\"\n             ],\n             [\n              0.5555555555555556,\n              \"#d8576b\"\n             ],\n             [\n              0.6666666666666666,\n              \"#ed7953\"\n             ],\n             [\n              0.7777777777777778,\n              \"#fb9f3a\"\n             ],\n             [\n              0.8888888888888888,\n              \"#fdca26\"\n             ],\n             [\n              1,\n              \"#f0f921\"\n             ]\n            ],\n            \"type\": \"histogram2d\"\n           }\n          ],\n          \"histogram2dcontour\": [\n           {\n            \"colorbar\": {\n             \"outlinewidth\": 0,\n             \"ticks\": \"\"\n            },\n            \"colorscale\": [\n             [\n              0,\n              \"#0d0887\"\n             ],\n             [\n              0.1111111111111111,\n              \"#46039f\"\n             ],\n             [\n              0.2222222222222222,\n              \"#7201a8\"\n             ],\n             [\n              0.3333333333333333,\n              \"#9c179e\"\n             ],\n             [\n              0.4444444444444444,\n              \"#bd3786\"\n             ],\n             [\n              0.5555555555555556,\n              \"#d8576b\"\n             ],\n             [\n              0.6666666666666666,\n              \"#ed7953\"\n             ],\n             [\n              0.7777777777777778,\n              \"#fb9f3a\"\n             ],\n             [\n              0.8888888888888888,\n              \"#fdca26\"\n             ],\n             [\n              1,\n              \"#f0f921\"\n             ]\n            ],\n            \"type\": \"histogram2dcontour\"\n           }\n          ],\n          \"mesh3d\": [\n           {\n            \"colorbar\": {\n             \"outlinewidth\": 0,\n             \"ticks\": \"\"\n            },\n            \"type\": \"mesh3d\"\n           }\n          ],\n          \"parcoords\": [\n           {\n            \"line\": {\n             \"colorbar\": {\n              \"outlinewidth\": 0,\n              \"ticks\": \"\"\n             }\n            },\n            \"type\": \"parcoords\"\n           }\n          ],\n          \"pie\": [\n           {\n            \"automargin\": true,\n            \"type\": \"pie\"\n           }\n          ],\n          \"scatter\": [\n           {\n            \"fillpattern\": {\n             \"fillmode\": \"overlay\",\n             \"size\": 10,\n             \"solidity\": 0.2\n            },\n            \"type\": \"scatter\"\n           }\n          ],\n          \"scatter3d\": [\n           {\n            \"line\": {\n             \"colorbar\": {\n              \"outlinewidth\": 0,\n              \"ticks\": \"\"\n             }\n            },\n            \"marker\": {\n             \"colorbar\": {\n              \"outlinewidth\": 0,\n              \"ticks\": \"\"\n             }\n            },\n            \"type\": \"scatter3d\"\n           }\n          ],\n          \"scattercarpet\": [\n           {\n            \"marker\": {\n             \"colorbar\": {\n              \"outlinewidth\": 0,\n              \"ticks\": \"\"\n             }\n            },\n            \"type\": \"scattercarpet\"\n           }\n          ],\n          \"scattergeo\": [\n           {\n            \"marker\": {\n             \"colorbar\": {\n              \"outlinewidth\": 0,\n              \"ticks\": \"\"\n             }\n            },\n            \"type\": \"scattergeo\"\n           }\n          ],\n          \"scattergl\": [\n           {\n            \"marker\": {\n             \"colorbar\": {\n              \"outlinewidth\": 0,\n              \"ticks\": \"\"\n             }\n            },\n            \"type\": \"scattergl\"\n           }\n          ],\n          \"scattermapbox\": [\n           {\n            \"marker\": {\n             \"colorbar\": {\n              \"outlinewidth\": 0,\n              \"ticks\": \"\"\n             }\n            },\n            \"type\": \"scattermapbox\"\n           }\n          ],\n          \"scatterpolar\": [\n           {\n            \"marker\": {\n             \"colorbar\": {\n              \"outlinewidth\": 0,\n              \"ticks\": \"\"\n             }\n            },\n            \"type\": \"scatterpolar\"\n           }\n          ],\n          \"scatterpolargl\": [\n           {\n            \"marker\": {\n             \"colorbar\": {\n              \"outlinewidth\": 0,\n              \"ticks\": \"\"\n             }\n            },\n            \"type\": \"scatterpolargl\"\n           }\n          ],\n          \"scatterternary\": [\n           {\n            \"marker\": {\n             \"colorbar\": {\n              \"outlinewidth\": 0,\n              \"ticks\": \"\"\n             }\n            },\n            \"type\": \"scatterternary\"\n           }\n          ],\n          \"surface\": [\n           {\n            \"colorbar\": {\n             \"outlinewidth\": 0,\n             \"ticks\": \"\"\n            },\n            \"colorscale\": [\n             [\n              0,\n              \"#0d0887\"\n             ],\n             [\n              0.1111111111111111,\n              \"#46039f\"\n             ],\n             [\n              0.2222222222222222,\n              \"#7201a8\"\n             ],\n             [\n              0.3333333333333333,\n              \"#9c179e\"\n             ],\n             [\n              0.4444444444444444,\n              \"#bd3786\"\n             ],\n             [\n              0.5555555555555556,\n              \"#d8576b\"\n             ],\n             [\n              0.6666666666666666,\n              \"#ed7953\"\n             ],\n             [\n              0.7777777777777778,\n              \"#fb9f3a\"\n             ],\n             [\n              0.8888888888888888,\n              \"#fdca26\"\n             ],\n             [\n              1,\n              \"#f0f921\"\n             ]\n            ],\n            \"type\": \"surface\"\n           }\n          ],\n          \"table\": [\n           {\n            \"cells\": {\n             \"fill\": {\n              \"color\": \"#EBF0F8\"\n             },\n             \"line\": {\n              \"color\": \"white\"\n             }\n            },\n            \"header\": {\n             \"fill\": {\n              \"color\": \"#C8D4E3\"\n             },\n             \"line\": {\n              \"color\": \"white\"\n             }\n            },\n            \"type\": \"table\"\n           }\n          ]\n         },\n         \"layout\": {\n          \"annotationdefaults\": {\n           \"arrowcolor\": \"#2a3f5f\",\n           \"arrowhead\": 0,\n           \"arrowwidth\": 1\n          },\n          \"autotypenumbers\": \"strict\",\n          \"coloraxis\": {\n           \"colorbar\": {\n            \"outlinewidth\": 0,\n            \"ticks\": \"\"\n           }\n          },\n          \"colorscale\": {\n           \"diverging\": [\n            [\n             0,\n             \"#8e0152\"\n            ],\n            [\n             0.1,\n             \"#c51b7d\"\n            ],\n            [\n             0.2,\n             \"#de77ae\"\n            ],\n            [\n             0.3,\n             \"#f1b6da\"\n            ],\n            [\n             0.4,\n             \"#fde0ef\"\n            ],\n            [\n             0.5,\n             \"#f7f7f7\"\n            ],\n            [\n             0.6,\n             \"#e6f5d0\"\n            ],\n            [\n             0.7,\n             \"#b8e186\"\n            ],\n            [\n             0.8,\n             \"#7fbc41\"\n            ],\n            [\n             0.9,\n             \"#4d9221\"\n            ],\n            [\n             1,\n             \"#276419\"\n            ]\n           ],\n           \"sequential\": [\n            [\n             0,\n             \"#0d0887\"\n            ],\n            [\n             0.1111111111111111,\n             \"#46039f\"\n            ],\n            [\n             0.2222222222222222,\n             \"#7201a8\"\n            ],\n            [\n             0.3333333333333333,\n             \"#9c179e\"\n            ],\n            [\n             0.4444444444444444,\n             \"#bd3786\"\n            ],\n            [\n             0.5555555555555556,\n             \"#d8576b\"\n            ],\n            [\n             0.6666666666666666,\n             \"#ed7953\"\n            ],\n            [\n             0.7777777777777778,\n             \"#fb9f3a\"\n            ],\n            [\n             0.8888888888888888,\n             \"#fdca26\"\n            ],\n            [\n             1,\n             \"#f0f921\"\n            ]\n           ],\n           \"sequentialminus\": [\n            [\n             0,\n             \"#0d0887\"\n            ],\n            [\n             0.1111111111111111,\n             \"#46039f\"\n            ],\n            [\n             0.2222222222222222,\n             \"#7201a8\"\n            ],\n            [\n             0.3333333333333333,\n             \"#9c179e\"\n            ],\n            [\n             0.4444444444444444,\n             \"#bd3786\"\n            ],\n            [\n             0.5555555555555556,\n             \"#d8576b\"\n            ],\n            [\n             0.6666666666666666,\n             \"#ed7953\"\n            ],\n            [\n             0.7777777777777778,\n             \"#fb9f3a\"\n            ],\n            [\n             0.8888888888888888,\n             \"#fdca26\"\n            ],\n            [\n             1,\n             \"#f0f921\"\n            ]\n           ]\n          },\n          \"colorway\": [\n           \"#636efa\",\n           \"#EF553B\",\n           \"#00cc96\",\n           \"#ab63fa\",\n           \"#FFA15A\",\n           \"#19d3f3\",\n           \"#FF6692\",\n           \"#B6E880\",\n           \"#FF97FF\",\n           \"#FECB52\"\n          ],\n          \"font\": {\n           \"color\": \"#2a3f5f\"\n          },\n          \"geo\": {\n           \"bgcolor\": \"white\",\n           \"lakecolor\": \"white\",\n           \"landcolor\": \"#E5ECF6\",\n           \"showlakes\": true,\n           \"showland\": true,\n           \"subunitcolor\": \"white\"\n          },\n          \"hoverlabel\": {\n           \"align\": \"left\"\n          },\n          \"hovermode\": \"closest\",\n          \"mapbox\": {\n           \"style\": \"light\"\n          },\n          \"paper_bgcolor\": \"white\",\n          \"plot_bgcolor\": \"#E5ECF6\",\n          \"polar\": {\n           \"angularaxis\": {\n            \"gridcolor\": \"white\",\n            \"linecolor\": \"white\",\n            \"ticks\": \"\"\n           },\n           \"bgcolor\": \"#E5ECF6\",\n           \"radialaxis\": {\n            \"gridcolor\": \"white\",\n            \"linecolor\": \"white\",\n            \"ticks\": \"\"\n           }\n          },\n          \"scene\": {\n           \"xaxis\": {\n            \"backgroundcolor\": \"#E5ECF6\",\n            \"gridcolor\": \"white\",\n            \"gridwidth\": 2,\n            \"linecolor\": \"white\",\n            \"showbackground\": true,\n            \"ticks\": \"\",\n            \"zerolinecolor\": \"white\"\n           },\n           \"yaxis\": {\n            \"backgroundcolor\": \"#E5ECF6\",\n            \"gridcolor\": \"white\",\n            \"gridwidth\": 2,\n            \"linecolor\": \"white\",\n            \"showbackground\": true,\n            \"ticks\": \"\",\n            \"zerolinecolor\": \"white\"\n           },\n           \"zaxis\": {\n            \"backgroundcolor\": \"#E5ECF6\",\n            \"gridcolor\": \"white\",\n            \"gridwidth\": 2,\n            \"linecolor\": \"white\",\n            \"showbackground\": true,\n            \"ticks\": \"\",\n            \"zerolinecolor\": \"white\"\n           }\n          },\n          \"shapedefaults\": {\n           \"line\": {\n            \"color\": \"#2a3f5f\"\n           }\n          },\n          \"ternary\": {\n           \"aaxis\": {\n            \"gridcolor\": \"white\",\n            \"linecolor\": \"white\",\n            \"ticks\": \"\"\n           },\n           \"baxis\": {\n            \"gridcolor\": \"white\",\n            \"linecolor\": \"white\",\n            \"ticks\": \"\"\n           },\n           \"bgcolor\": \"#E5ECF6\",\n           \"caxis\": {\n            \"gridcolor\": \"white\",\n            \"linecolor\": \"white\",\n            \"ticks\": \"\"\n           }\n          },\n          \"title\": {\n           \"x\": 0.05\n          },\n          \"xaxis\": {\n           \"automargin\": true,\n           \"gridcolor\": \"white\",\n           \"linecolor\": \"white\",\n           \"ticks\": \"\",\n           \"title\": {\n            \"standoff\": 15\n           },\n           \"zerolinecolor\": \"white\",\n           \"zerolinewidth\": 2\n          },\n          \"yaxis\": {\n           \"automargin\": true,\n           \"gridcolor\": \"white\",\n           \"linecolor\": \"white\",\n           \"ticks\": \"\",\n           \"title\": {\n            \"standoff\": 15\n           },\n           \"zerolinecolor\": \"white\",\n           \"zerolinewidth\": 2\n          }\n         }\n        }\n       }\n      },\n      \"image/png\": \"iVBORw0KGgoAAAANSUhEUgAABGgAAAFoCAYAAAALss2XAAAAAXNSR0IArs4c6QAAIABJREFUeF7snQecXFX5/t9s3012s+kkVBGQFkOJkapApIjgDwuiyB9BqggBKdKlI03pIkVFQlN6MWAkIJLQCWBAggEhgYT0bEm27+Z/nrM5y93JzNw7m8CkfM/ns+7uzL3nnPu9N5J58rzP22upG8aAAAQgAAEIQAACEIAABCAAAQhAAAIQyBuBXgg0eWPPwhCAAAQgAAEIQAACEIAABCAAAQhAwBNAoOFBgAAEIAABCEAAAhCAAAQgAAEIQAACeSaAQJPnG8DyEIAABCAAAQhAAAIQgAAEIAABCEAAgYZnAAIQgAAEIAABCEAAAhCAAAQgAAEI5JkAAk2ebwDLQwACEIAABCAAAQhAAAIQgAAEIAABBBqeAQhAAAIQgAAEIAABCEAAAhCAAAQgkGcCCDR5vgEsDwEIQAACEIAABCAAAQhAAAIQgAAEEGh4BiAAAQhAAAIQgAAEIAABCEAAAhCAQJ4JINDk+QawPAQgAAEIQAACEIAABCAAAQhAAAIQQKDhGYAABCAAAQhAAAIQgAAEIAABCEAAAnkmgECT5xvA8hCAAAQgAAEIQAACEIAABCAAAQhAAIGGZwACEIAABCAAAQhAAAIQgAAEIAABCOSZAAJNnm8Ay0MAAhCAAAQgAAEIQAACEIAABCAAAQQangEIQAACEIAABCAAAQhAAAIQgAAEIJBnAgg0eb4BLA8BCEAAAhCAAAQgAAEIQAACEIAABBBoeAYgAAEIQAACEIAABCAAAQhAAAIQgECeCSDQ5PkGsDwEIAABCEAAAhCAAAQgAAEIQAACEECg4RmAAAQgAAEIQAACEIAABCAAAQhAAAJ5JoBAk+cbwPIQgAAEIAABCEAAAhCAAAQgAAEIQACBhmcAAhCAAAQgAAEIQAACEIAABCAAAQjkmQACTZ5vAMtDAAIQgAAEIAABCEAAAhCAAAQgAAEEGp4BCEAAAhCAAAQgAAEIQAACEIAABCCQZwIINHm+ASwPAQhAAAIQgAAEIAABCEAAAhCAAAQQaHgGIAABCEAAAhCAAAQgAAEIQAACEIBAngkg0OT5BrA8BCAAAQhAAAIQgAAEIAABCEAAAhBAoOEZgAAEIAABCEAAAhCAAAQgAAEIQAACeSaAQJPnG8DyEIAABCAAAQhAAAIQgAAEIAABCEAAgYZnAAIQgAAEIAABCEAAAhCAAAQgAAEI5JkAAk2ebwDLQwACEIAABCAAAQhAAAIQgAAEIAABBBqeAQhAAAIQgAAEIAABCEAAAhCAAAQgkGcCCDR5vgEsDwEIQAACEIAABCAAAQhAAAIQgAAEEGh4BiAAAQhAAAIQgAAEIAABCEAAAhCAQJ4JINDk+QawPAQgAAEIQAACEIAABCAAAQhAAAIQQKDhGYAABCAAAQhAAAIQgAAEIAABCEAAAnkmgECT5xvA8hCAAAQgAAEIQAACEIAABCAAAQhAAIGGZwACEIAABCAAAQhAAAIQgAAEIAABCOSZAAJNnm8Ay0MAAhCAAAQgAAEIQAACEIAABCAAAQQangEIQAACEIAABCAAAQhAAAIQgAAEIJBnAgg0eb4BLA8BCEAAAhCAAAQgAAEIQAACEIAABBBoeAYgAAEIQAACEIAABCAAAQhAAAIQgECeCSDQ5PkGsDwEIAABCEAAAhCAAAQgAAEIQAACEECg4RmAAAQgAAEIQAACEIAABCAAAQhAAAJ5JoBAk+cbwPIQgAAEIAABCEAAAhCAAAQgAAEIQACBhmcAAhCAAAQgAAEIQAACEIAABCAAAQjkmQACTZ5vAMtDAAIQgAAEIAABCEAAAhCAAAQgAAEEGp4BCEAAAhCAAAQgAAEIQAACEIAABCCQZwIINHm+ASwPAQhAAAIQgAAEIAABCEAAAhCAAAQQaHgGIAABCEAAAhCAAAQgAAEIQAACEIBAngkg0OT5BrA8BCAAAQhAAAIQgAAEIAABCEAAAhBAoOEZgAAEIAABCEAAAhCAAAQgAAEIQAACeSaAQJPnG8DyEIAABCAAAQhAAAIQgAAEIAABCEAAgYZnAAIQgAAEIAABCEAAAhCAAAQgAAEI5JkAAk2ebwDLQwACEIAABCAAAQhAAAIQgAAEIAABBBqeAQhAAAIQgAAEIAABCEAAAhCAAAQgkGcCCDR5vgEsDwEIQAACEIAABCAAAQhAAAIQgAAEEGh4BiAAAQhAAAIQgAAEIAABCEAAAhCAQJ4JINDk+QawPAQgAAEIQAACEIAABCAAAQhAAAIQQKDhGYAABCAAAQhAAAIQgAAEIAABCEAAAnkmgECT5xvA8hCAAAQgAAEIQAACEIAABCAAAQhAAIGGZwACEIAABCAAAQhAAAIQgAAEIAABCOSZAAJNnm8Ay0MAAhCAAAQgAAEIQAACEIAABCAAAQQangEIQAACEIAABCAAAQhAAAIQgAAEIJBnAgg0eb4BLA8BCEAAAhCAAAQgAAEIQAACEIAABBBoeAYgAAEIQAACEIAABCAAAQhAAAIQgECeCSDQ5PkGsDwEIAABCEAAAhCAAAQgAAEIQAACEECg4RmAAAQgAAEIQAACEIAABCAAAQhAAAJ5JoBAk+cbwPIQgAAEIAABCEAAAhCAAAQgAAEIQACBhmcAAhCAAAQgAAEIQAACEIAABCAAAQjkmQACTZ5vAMtDAAIQgAAEIAABCEAAAhCAAAQgAAEEGp4BCEAAAhCAAAQgAAEIQAACEIAABCCQZwIINHm+ASwPAQhAAAIQgAAEIAABCEAAAhCAAAQQaHgGIAABCEAAAhCAAAQgAAEIQAACEIBAngkg0OT5BrA8BCAAAQhAAAIQgAAEIAABCEAAAhBAoOEZgAAEIAABCEAAAhCAAAQgAAEIQAACeSaAQJPnG8DyEIAABCAAAQhAAAIQgAAEIAABCEAAgYZnAAIQgAAEIAABCEAAAhCAAAQgAAEI5JkAAk2ebwDLQwACEIAABCAAAQhAAAIQgAAEIAABBBqeAQhAAAIQgAAEIAABCEAAAhCAAAQgkGcCCDR5vgEsDwEIQAACEIAABCAAAQhAAAIQgAAEEGh4BiAAAQhAAAIQgAAEIAABCEAAAhCAQJ4JINDk+QawPAQgAAEIQAACEIAABCAAAQhAAAIQQKDhGYAABCAAAQhAAAIQgAAEIAABCEAAAnkmgECT5xvA8hCAAAQgAAEIQAACEIAABCAAAQhAAIGGZwACEIAABCAAAQhAAAIQgAAEIAABCOSZAAJNnm8Ay0MAAhCAAAQgAAEIQAACEIAABCAAAQQangEIQAACEIAABCAAAQhAAAIQgAAEIJBnAgg0eb4BLA8BCEAAAhCAAAQgAAEIQAACEIAABBBoeAYgAAEIQAACEIAABCAAAQhAAAIQgECeCSDQ5PkGsDwEIAABCEAAAhCAAAQgAAEIQAACEECg4RmAAAQgAAEIQAACEIAABCAAAQhAAAJ5JoBAk+cbwPIQgAAEIAABCEAAAhCAAAQgAAEIQACBhmcAAhCAAAQgAAEIQAACEIAABCAAAQjkmQACTZ5vAMtDAAIQgAAEIAABCEAAAhCAAAQgAAEEGp4BCEAAAhCAAAQgAAEIQAACEIAABCCQZwIINHm+ASwPAQhAAAIQgAAEIAABCEAAAhCAAAQQaHgGIAABCEAAAhCAAAQgAAEIQAACEIBAngkg0OT5BrA8BCAAAQhAAAIQgAAEIAABCEAAAhBAoOEZgAAEIAABCEAAAhCAAAQgAAEIQAACeSaAQJPnG8DyEIAABCAAAQhAAAIQgAAEIAABCEAAgYZnAAIQgAAEIAABCEAAAhCAAAQgAAEI5JkAAk2ebwDLQwACEIAABCAAAQhAAAIQgAAEIAABBBqeAQhAAAIQgAAEIAABCEAAAhCAAAQgkGcCCDR5vgEsDwEIQAACEIAABCAAAQhAAAIQgAAEEGh4BiAAAQhAAAIQgAAEIAABCEAAAhCAQJ4JINDk+QawPAQgAAEIQAACEIAABCAAAQhAAAIQQKDhGYAABCAAAQhAAAIQgAAEIAABCEAAAnkmgECT5xvA8hCAAAQgAAEIQAACEIAABCAAAQhAAIGGZwACEIAABCAAAQhAAAIQgAAEIAABCOSZAAJNnm8Ay0MAAhCAAAQgAAEIQAACEIAABCAAAQQangEIQAACEIAABCAAAQhAAAIQgAAEekTg4OMusqbmFnvwDxf16PzP86T//u9jO+aXV9nQwQPs7t+d+3kunWgtBJpEmDgIAhCAAAQgAAEIQAACEIAABCAAgSiB9z6YaZffeI+VlRbbEQd/y7bZapOcALW3d1hhYUFO5/T04I6OpXbPw0/Zy69PtWsvOqGn03ym5yHQfKZ4mRwCEIAABCAAAQhAAAIQgAAEILBmErjypnttk43WtZKSYnv1zXftvJN/0nWhz77wpl19y33W2tZm6w8bZBf98ggbNKDabv/rkzbNOVnemTbdvrbDCBtzxPfs+j8+aH//58v+3OGbb2zn/uJQ69O7vBu0mbPn2xmX3GLzF9aYhJ0D99/NjvrxfnbrXY/bLPfeeacc5o+P/v7zs66xTb+wnj385ET70Xf2sLsfnGAtLa02Yqsv2k2XnezFpacnTraOpUtt1Dab24W//KkVFRZa3eIGO/+qP9mbb79vFeWlduaYH9tOI7e2JQ1NdtE1d/jXi4sK7cff/YYd9H97rLSbi0Cz0lAyEQQgAAEIQAACEIAABCAAAQhA4LMh8Pzzz1tra+tnM3mWWXfaaScrLi5e7giJJPsecro9cNuFzgVTaPsfeoaNu/NyL9bMX1hr+x16po29/iwvkNz+lydt8lv/tesuGmN3PfgPu+nPj9o9N53rhJvBNm7CS/aHe/7mjj3bystK7PSLb7Yhg/rbKcf+oNuaF18z1gb272vHHvptq3cCyrlX/NGJPj+1ex95OqNAc+K519vCmjq79arTnMunxO647+82zbl+dN4zz79uV998n9136wXWy6100LEXOMFnf9t39FftkmvHWkFBgZ15wo9tyjv/s6NOu8qeffBaLzgtqq23y8462mrrltiBx5xv1188xjbfZIOVcl8QaFYKRiaBAAQgAAEIQAACEIAABCAAAQh8dgSuvPJKa2ho+OwWyDDzaaedZhUVFcu9+68X37RH/j7JfnPecf69My+91XbfeVvb6+sj/evjJrxoN19xin+vobHJdtjvOHt9/G1eUHn2hTfslitP9e+dfsnNtvkXN7DDf/hN//vEl6d4IUTCT3TcPPYxe/7Vt+zUYw+yrb70BSegSFbp7phJ/f2kX93gjt3IO200ogLNUueaaWxqdg6ZMv/e+VfdbsPWGWBHH7K/7fnDU52YdIJtsemG/r3a+iXWt7K37eVev+pXP7Mvb/lF/7ocRL3d+ccddkAGerm9jECTGy+OhgAEIAABCEAAAhCAAAQgAAEIfO4EVjUHzcnn32gSaeSe0Whvb7evbrel3XjpSfane5+wG29/yKr7VnZxWryk0R6/49eulOkVVyL0nl1x7rH+vaNOvcq7Vr7zzV3971OmfmBjzrnWnrn/mm6M29z8mvdvT73oXTHKvPnJgXtnLXGSQLPzqK3twP1283NFBZqFNfV2lRNY/jd9llmvXt6Fc/B3vuEdOtvvfbQ9cvsltt7QQd32MHKfo62yT0XXNbe2ttk+u4/yTpuVMRBoVgZF5oAABCAAAQhAAAIQgAAEIAABCKwlBJTRsu+PT3ciytWu/KnIX7UElD2+/wt7+E+X2CTnghn/7Ct2/SUnLkfkrgefsn//5327/Jxj/Hty0Gy28fp2xI/29b8/99K/7drbHrD7XelRpjH94zl22Em/9mLQi5P/YzM+nmvnn3qYP/yaW+935UeLfSaNBJpdRg237+/3df9eVKCRY6bFlYwpG0dBxSqZWnedgV6gkYPmt84ZNHyLjf15H8z4xL/37cPOtmsuPH6llTSlXh8CzVryB4jLhAAEIAABCHxWBNQVwbmE3V9uOq3GDAhAAAIQgAAE1mwCKlN65Y2pXeVN4WpV5qSSIrlKDjj8HLvrxnNsw/WGeFfMY+Mn2VljDnEZNN0Fmiefedm7YO684Rwrdfk1p1xwo2284TA74aff7Qbx1Atvsv/bexfb9avDrdkF/X7/yF/Zr88+2j78aLbd+/DT7vyzfbtvtf0e4UqQ4gQaiTfqOnXYQfvY1PdmONfOdX7fJx/zA7vo6jv8Ghee9lP33nQ74uQr7J8ug0biT5Mri/qVC0Nucxk8v735r7bfN3b017wyBgLNyqDIHBCAAAQgAIG1jEBza7v7i0uHNba028C+pTa/ttn69u4MEHQuYSst7rQ7MyAAAQhAAAIQWPMI/PBnF9qh39/blyZFx4TnJtvvxz5q991yvsuZ6eziJNGkd0WZnX3iIbbd8M2WE2j0Dz2hi5P+wWfkiC/5kiF1T4oOiTwX/vbPVuPcMQXuLxvf3msn+/nh33E5Mi12/NnXWE3tYhs6eIB9caNhPshX4ko2B83rb03zuTnqxiSnzOhdtrezL7/Nfn3WUX6f5135J9Mx6iYlYWnnr3R2cVJYsV6XY2i3Hbex048/2M+xMgYCzcqgyBwQgAAEIACBNZyA/vLkRZnWDv/V7n4PY0i/Mi/QVFYUO6twuzU0t3uRprykyAk1vbxYE4L81nBMXB4EIAABCEAAAhDoMQEEmh6j40QIQAACEIDAmk1A1t3WtqVOcGnzokymkU6giR4rsaakqMAGVJWahB7EmjX7ueHqIAABCEAAAhDoGQEEmp5x4ywIQAACEIDAGkmgta3DCygL65qttf1Tl0y2i40TaMK5wwaU26wFjc5RU2AlzlVTUtTprmFAAAIQgAAEIAABCLgycdf7O9nfvqAFAQhAAAIQgMAaSUClS42uLCm4ZKr7lNgCJ9AkHbkKNNF5C50YVF5S6EIBCxBrkgLnOAhAAAIQgAAE1kgCCDRr5G3loiAAAQhAAAKZCXTmyShLxgkzLuQ39Z9qBrnQ33kuUybpWBGBJrqG5qlvaPPOmjIn2lAKlfQOcBwEIAABCEAAAmsCAQSaNeEucg0QgAAEIACBGAJJ82Q0jYSSOYuaEjONCjRLGttcaVT6vJp1+pfZ7IWZ501dV6VQEmrKXBkULbwT3w4OhAAEIAABCEBgNSWAQLOa3ji2DQEIQAACEIgjIKfMEle61ORCfpPmyayoQFPf0Nqtw1PYo4KCB1dnF36yCTjFhb2soqzIersvBgQgAAEIQAACEFgTCSDQrIl3lWuCAAQgAIG1lkDjso5LKmFS22t1YGrJ0oEpHagVcdBkEmiUNTPQlU5lc+aEEOFMN6/EOWoqSousdkmL9XbflVtTXFhAKdRa+7Rz4RCAAAQgAIE1iwACzZp1P7kaCEAAAhBYywiE0iVlyShTJponU+UEmib3Wq4CTZxQkoo4WuL0WQo0KneSk6belVGFEVp4K2iY3Jq17OHnciEAAQhAAAJrGAEEmjXshnI5EIAABCCw5hOQKCOHTJMXZdLnvYhCZXmRLzdqcGVOuYx8CDRJSqAqSl0WjXPiRAWa1OtSbs2AqlJrdy3Cya3J5a5zLAQgAAEIQAAC+SaAQJPvO8D6EIAABCAAgQQE5I5pbunwXZckuiQZEmh06JKmTx0nSc77rASavr2LbWF9S9otJCmBUv6M02eyCjTReWjhneRucwwEIAABCEBgxQgcfNxFLu+uxR78w0UrNtFnePbU92bYSb+6wZ68+4rPcJUVnxqBZsUZMgMEIAABCEBgpRPobIXdbkVFha71dKt3y+Q6JNBoZHOcpJvzs8qgUSZOzeLMAk3/ypKs7b2TCE7KpKlyQtCCuu5twuXQKS8psvJScmtyfY44HgIQgAAEIJCJwHsfzLTLb7zHykqL7YiDv2XbbLVJTrDanSu40P23+7MeCDSfNWHmhwAEIAABCKxhBNK1wpYooQ5MPRFoVBJU5P7SU+cEnlxGyJRJ6tRJkkETAn4zCTRx72v/ytQRo2wlW8qhKSnKfs2dYk2hD1F2PxIynMvDwbEQgAAEIACBCIErb7rXNtloXSspKbZX33zXzjv5J13vPvvCm3b1LfdZa1ubrT9skF30yyNs0IBqu/2vT9q0/31s70ybbl/bYYSNOeJ7dv0fH7S///Nlf+7wzTe2c39xqPXpXd4114yZc+ywky6zp++72r92wW//7Oe484az/e8/P+saO2CfXewrIza3My69xT6Y8YlzES+1nxy4tx3yvT0tKtC0trXbkadc4dc+4kf7WqZ95uNG46DJB3XWhAAEIAABCCwj0NrWYS3uK1OeTBLXSCaYSUSPdOeuqgJNdZ+S2K5USXJqdM3R45RbU1IsYaeXlbrvDAhAAAIQgMCqSOClOR3WmqzKeaVu/6uDnfs0jclF7pd9DzndHrjtQueCKbT9Dz3Dxt15uRdr5i+stf0OPdPGXn+WbfqF9ez2vzxpk9/6r1130Ri768F/2E1/ftTuuelcJ9wMtnETXrI/3PM3d+zZVl5WYqdffLMNGdTfTjn2B92uY/SBJ9udN55jQwf3tx8cc75/7053TnFxke16wBj729jL7Oaxj1rd4ga7+PQjbObs+X4Pf7/7SltYU9dV4iRxp7293S487adZ97lSISacDIEmISgOgwAEIAABCKwsAipdanTBvQr4jXOpKHdFWSq5umC0V50nUSO13CfuOga5dtjKionbW5gnCDpaSw6ZdOdJLCpz4kem60jXoSl1nyqBql3SmnVfScu6Mh1Hbk3c08H7EIAABCCQLwLXTmm1SCPDz20bJw4vtmVV093W/NeLb9ojf59kvznvOP/6mZfearvvvK3t9fWR/vVxE160m684xb/X0NhkO+x3nL0+/ja795GnnWvlDbvlylP9e6dfcrNt/sUN7PAfftP/PvHlKd55I+EnOjT/13ccYTtuv5Udf/a1tvGGQ+3/9t7F+lZWONfMrXbfLec7p227tTmHTFlpiT9VAtIlZxzphJ9SL9AcftA+Nv7ZV+3mK09xLuPCrPv8PEqvUm8iAs3n9lizEAQgAAEIrK0EOvNk1HnJCTMuSybaCjuOiTJVKiuKMobrZjtfpTz9K0tzFmgktCxxfwNsdf8ylmREBZo6J6CkO08CTakrPcqUh5PE+SLhaF5t92yZ1P1p7y2Oc1znqiTHhdyaKsdfo0AJxQwIQAACEIBAngisag6ak8+/0STSyD2jIVfKV7fb0m689CT7071P2I23P2TVfSu7aC1e0miP3/FrV8r0ir359nt2xbnH+veOOvUq23f0V+0739zV/z5l6gc25pxr7Zn7r+lG+qEnnrN33//IRm2zuXPjTLMvbjjMOWPqrbJPhX00c6533Lz97oe+XGqRe72X++/2f93xt/3mNKsoL7NDjr/Y/be8wItIl599jJ872z4H9u/7ud9pBJrPHTkLQgACEIDA2kBAWSm+2ZL7mp8SWJvL9fdUZAlr5Br4q/OSlBJFryEq0NQ3tjqBZHlhJ84hk0SgSXItSfcuN059QzIRap3+ZTZ7YZMrf3IuIJddIycQLbxzeYo5FgIQgAAE1jQCKiPa98enOxHlal9ipCH3yh7f/4U9/KdLbJJzwYx/9hW7/pITl7v0ux58yv79n/ft8nM6RRI5aDbbeH2fB6Px3Ev/tmtve8Duv/WCbufOciVLJ1/wO9t++Ga2/Zc3s402GGq//f1frU+fctt/z51s569s7R0zR/zoW/a9b33Nn7vPwb+0S8880gs0Pz35cnvg1gvd9yu8mPONXbe3x8Y/n3Gf+bhnCDT5oM6aEIAABCCwRhJQnkxn6VK7D/aVuDKwKt71EQcjiTCRaY4gLsStEX0/qcgRzhngrlGlTTovk0ATJ8AkaaGd5FrkspEgFudSSso0U/tvcmtyeaI4FgIQgAAE1jQCKlN65Y2pXeVN4fpUhrTVlzayfXYfZQccfo7d5TJjNlxviHfFPDZ+kp015hCXQdNdoHnymZft1rsed4G/51ipy6855YIbXfnSMDvhp99dDpsyZVS+dOtVp1p1VR/b/ydnWYH7C9dfbj7f59fs9O2f261Xnub3IPHlomvucHv8uQsn7tuVQTN5yjT7xXk32EN/vNg6Ojoy7jMf9wyBJh/UWRMCEIAABNYYAnF5MsMGlNusBY0rdL1JhIlMC/RkfXVLanIiUzonTLp1VoZAkyQ7JgmHpMJLkrl0rXLMSFxSJk+mISGud2mR+0slLbxX6EHnZAhAAAIQWG0I/PBnF9qh39/blyZFx4TnJtvvXVCv8mBCd6Sm5hbrXVFmZ594iG3n3C+pAo1KwUMXJ/0Dy8gRX7IzT/ixc72ULsfjnMv/YJOn/NeHEWsce/pvrbGp2f587Zn+93senuDFnj69K7yLpqZ2sT385HM+EPiSa++0J+++wh+n1uCfzFlg11x4fMZ95uNmINDkgzprQgACEIDAaksgtMJWlozEmTinhhwdNYvT57IkhZBraG90XgkWc2uaYvcZPSeX1t7BJaQuVBIzal1L73TCTpyDRmsqXDhTdozWGVxdZnMWNWXFlkR4yeSKSTdxEmdP9Dw5pnQN6gglHuTWJH3KOQ4CEIAABCAAAQQangEIQAACEIBADAGJMgr5zdQKO9vpuZYLpZtrReYI7pakHZm0fpxYomM6W3i7PBYnQmg0tXS4nws8IwkUqSJNnEATF9qbpCOVRBwJUsqLyTZyCV6Wm0jsljS1JfpzkioQkVuTCBsHQQACEIAABCDgCCDQ8BhAAAIQgAAE0hCQO6bZiQ4hT6ankCR2KCw46Qf8dOvk4mhJPV9huIuduJC0XCmbQCORRMJMZXmnaNHQ3OYzd6IlTsrhKXbdmooKe1mDW1dry2W0ogJNElFF+9P1xnV6ittLlGEu/OKcObTw7umfIs6DAAQgAAEIrB0EEGjWjvvMVUIAAhCAQAyBzlbYKlvqsHKXJ5Ip7DZXkMFlki3DJG6WLowXAAAgAElEQVTOJPksmebINU8mnUBT7pwy5c4pU+Rafre0tfvuR1FHTlSgUViw3pMYoWvv7QSq1ralTqRZ6r53ZGyzHdfaO65Nt/atY9Rhqc6VWWUbuZQtJc200XpyE5U4cSpufR0bcmsqyjq5MiAAAQhAAAIQgAACDc8ABCAAAQis1QTkAFGejEpzwlgRQSQVZpLSnLgbIKFDH+KTfPBPnStJuVK6c0Ib6ZKiQtc2s8OXLUUZRc9JJ9BE35dw0teVCmnOJY1t1uyEmlRHj+bIJoolcb0kOUb7iiunCntPWjK1Is+NSqKUqyNhp8IJgxLDGBCAAAQgAAEIrJ0EEGjWzvvOVUMAAhCAwDICcrakCg+hjGeBa9e8MkaS4Nps6yQp78l0fi4lVhIk5AJRCZNGEEzi8mviBBrNFUQv/aw1VPbVmVfTWQKlORbWZ26PnUR8SeqMUdmSXECtTniK496/qiQ2mDjMoXmzCVmpa0m8G1Rd2pWZIy6agwEBCEAAAhCAwNpJAIFm7bzvXDUEIAABCCwjoGyY2iXdS2JydU7EwQwuibiOT5nm0X76V5ZaTwSjJG6gaOCvRBOJJ0vd/9Q7t0uSkVSgiXZpCuVIcozIxaRSn2zhvkmEpqSBvknLlpKIQlE+SecN56Q6o/r2LjaJTAwIQAACEIAABNZOAgg0a+d956ohAAEIQGAZAeXOLKhr6cZjQU2tDeptVljWL9ZlkQTkinRhCvP31IWTqTwqXeCvxJkkgb6p19wTgSbMIfFJpT2VFUV+7WiwcHQdiS+h1CoT86SlS0lZJhG3oteRpINU6jVFO0QNcG6dUpehw4AABCAAAQhAYO0kgECzdt53rhoCEIAABCIEZi1o7MbjrTdetUnP/8u+PHyEbTdqZystLVshXkncH3ELJBUVUudR2Yy+FN6rERf4q2Mk6pQ4oSCcE7e3qECTyeUTJ55I3FjohDK16g7BwtFMGp0vASlTDo72mKR0SYLQ4OrO3Je4Ebfn6PlyBPVx7pdcwqAH9VVZV2eosndtuX0VuLInBgQgAAEIQAACaycBBJq1875z1RCAAAQgECEgUUHdm6Lj9Vcm2Qv/fscq+lTZyC9tbFtvM7LHzFS2IsdKT0J+w6LRD/O5bCQE9CpvJQT+KhRZZUWZRj4EmmEDyi0qlIUcoOKizmBhiUy1rjtTtnbhSUqMlOdT5UqJkpSLifl892wkKU1Lmn8TmEuQGdr/02sudQKPhC4GBCAAAQhAAAJrLwEEmrX33nPlEIAABCCwjECdy6BZ7LJookMf5N9+4wX7++vvWcniOTZg4GDbebe9bOjgwTlzWxmdnOQO0R6zCRTRjYXAX7k61D1JOTs6Ny7wV3N0ZtIUrXQHTTYHTCaHkK5D1xBcNdFg4dQbkUSgySVXJhfXUi5um8BYYcxBKNI1SjhiQAACEIAABFYHAm3t7TZi9BFWXFzkXKC9rLSk2Lbe/At27kmH2obrDVkdLqHbHqe+N8NO+tUN9uTdV+R17wg0ecXP4hCAAAQgsCoQaHSdhBYt7h4UrH3J1fHYE0/Z81M/9Nssaq6z9QYPst1239Mqq/rmtPVcPuynm1hlUq3tS7OW+HwqrhR6gUUdktRVSC2u59Um70iVa7lO0hIn7SedwJSk7EjiyyJXplXmSq9CsHCTyw+KzpeEcVKni0S1gc5Bk6QUStxzcdvo+NR99OtT7K6LgOCc/lBxMAQgAAEI5I1AEGgm3PdbW2dQf2tsarHLb7jbZs2Zb7dceWre9tXThRFoekqO8yAAAQhAAAIrmUCHywCZnSaTRMKDclBemPScF2mWFhRZyZK57l+JSm3ENtvbVltulTifZkU7OWULrI0G/i519TjBaRPcMkmcJVGkubYZX1GBJokYEr2GECyssqci5w5SsHBTS4claYmdJGw4CF25ZMokEYeijFNbcq/jBCjyZ1byH2ymgwAEILCGEbjyShem3/D5X9Rpp7l8uoru66YKNHp30itv2SXXjrVxd17uD372hTft6lvus9a2Nlt/2CC76JdH2KAB1a50eKldfuM99vTEya5z5FIbtc3mduEvf+r+m15oJ5xznW2xyQY2ZeoH9t6HM+0739zVykqL7V8v/tvmLaix35x3nG3u3o+OsfePt3ff/8haWlptxqy51u7Kuq+98Hgbts5Aq61bYhf89s/2zrTp/r+z3/rGjnbcT/7Pn37rXY/bvQ8/bX2retveu42yh554rstBc/PYx+zR8ZO8O2iH7ba003/+I+8W0jVe8bt7/FrFRUV26s8Osq/tMGKl3RQcNCsNJRNBAAIQgMDqTGBeTZN3qERHtG3zay9PspemvGNtpZX+kOLGhVZWVGhf2Xa7RPk0QexJWqKUyjJdN6Ykgb+aJzXfJe4+5ZLTormSCDTZrl8CjQSLbC6fTAJIaNetNt0dLkaoZklL1jKwVGEkE4tcSqGS7D91nej16HwJUAwIQAACEIBANgKqsp437/NnpDUHDuy+bqpA09DYZBf85s82cEBfO+1nP7T5C2ttv0PPtLHXn2WbfmE9u/0vT9rkt/5r1100xp55/nW7+ub77L5bLzBF4x907AV21I/3t31Hf9WXGTU1t9hNl/3Cpn88x7592Fl2wamHe6Hmd39+xObNX2TnnXJYt83c9eBTduPtD9mjt19qA/v3dfu43Ykufeyko77vf1aW3PmnHmaLlzT6tc44/mAv3vz45xfb43f82gb0q7IzLrnF3vzP+16gkXB0za332103nmMV5WV20nk32Fe33cIO+d6ebj9n2/mn/MS2G76ZyXVz90NP2YWn/XSl3RQEmpWGkokgAAEIQGB1JqCORSoHio4ggITOPOlEmqUFxbb+wGobOXKUDV23+7/oROeS2NPS1hFbopSJYSg7UpaMWlIr8FcOGZUNZQv81Xz68D/XCVBJwm7D+hJUkgTp5iLQKOtHYcWpI04QSlICJTeNRBX9S1cIFm52vFMFsaQsouJc3HOdqZV5pvMkyAyqLrXZCzs7SakcrdqVODEgAAEIQAAC2QisigJN74oy/99eCTQbrbeOXX/JibbR+uvYI3+fZOMmvGg3X3GKvyS9v8N+x9nr42/zTpbGpmYvfmicf9XtTjAZYEcfsr8XaEY5MeTg74z2Tpgvj/6p/euh67yI8vg/XrAnn3nZbrj0xG6YJNC88OrbXa/f+cA/7O13P7Rfn3WU7XHgL+y6i8fY1l/6gj9Hjp5m5375gtvjcy9N6Tpn4stT7OJrxnqB5pzL/+Cv4ciDv+XPkRPoT395wm6/5gw74pQr/HX+5Af72Abr5p5LGPeEI9DEEeJ9CEAAAhBYKwhI5FDGSXRIGBjohIqos0MizQv/mWYdReX+0KWFxVbQ2ugdNV/YcCPbaaevpc2nSZp9kg52KOmRMCOXiDJzJCYlCfzVfD3pAKVzkubWJHXQZBJ84kqqkjhUoo6XbMHCSUuRkjptxDcXMUfHpwo61S4cuMKFBDMgAAEIQAAC2QisigJNyKCRmPLCa2/bmZfeYg/cdpH97akXvKulum+n81hDDhY5VgoKCuyqm+61/02fZU7dsVmz5ztB5ht27KHf9gLN13cc4R0zGlvtdpi98sTvvZgzbsJL9tg/nvfumuiQQPNv5365/Jxj/MvR37f5xhH2+NjLbL2hg/x7f7x3nL373kf2xY2G2YcfzbZLzzzKv66SqtMuvMkLND8742rnpnmvS0DqcH/5GtCvr913y/m2YFGd/f6OR+yp516zyt4VdsYJB9tOI7deaQ8uAs1KQ8lEEIAABCCwOhNodW6LdIJEuuyYV199yYk071lreX8vzHQUl1uv9lbr1dFmla21tvWI7W348BHd8mlyDd4Vy85uSp8G/solElwXubDuSXlVLrk1K0OgKS0qcHk/3TtphWuMc9jouEwZPYF7sZtfIpxcUUmCf3O5/lw7bKUKOkOqy3ynLQYEIAABCEAgG4FVPYNGe//uEefaMf/v2z6jZfyzr3hHTeqQY6altdVn0hS6rpnnXvFHW9eVHH0WAo0cNNdeeIIN32Jjv43f/P6vzpnTbhu4TlOTnGsm7O+fz79hl7mQYwk02s+mX1jXDj1w76wP5HMv/dt+edHvbdKjN660HDkEGv4/AAIQgAAEILCMwCcLG5crA1L75HTdh4JIo+BgCTMSafxwdc6l9TNdy+QKG7n9KNtsi+H+5XRunHTgswX+JnV/pM6r8hk5bnLJv8lFoFhRgSYu7yXkzNQ1LN9pK1xrXJtr8a90ZWYK/vWlYS5YWGHK6cq+dKyuP6kYlut9iTqatNbQ/sueHf4kQgACEIAABFYTAqkZNGq48PIb79jxZ13jnCYXWGWfCjvg8HN8jovabsuh8pgL3T1rzCHeJbPNVpvYYQft43Ncxrhg4H12H2UnH/ODle6gufDqO6zDuXuUQVNbv8QOOuYC/3O1y6g5/KTL7NE/X2r9q6vslAt+5/fiM2gmvW43ubwblTSphOuvj/3TlU8Xuj1+1Q7/xWV2jQsgVueqjz+ZZ9878lf2wmO/Q6BZTZ5btgkBCEAAAqsRAWXNNLV0z6HJ1j0pKtJ4bcaVOxU21XU6apxoU9K6xIYOGeyDhJVPky2sNzXwd0lj+3J5LfpgX+PagafLccmGOWmL7ugcK1ugyTZfnEAT9772naQkSQ6kEuekUXtutetWsHBr21LfqSsqXiXpKhVY5XJsEOokyMxa0Oin0J60dwYEIAABCEBgdSIQBBp1NtIodGVL67lOTeqQpI5IGqGLk0J/JXScfeIhPlz39bemuVKoW73oIWfL6F22t7Mvv81nxjzy5KSVWuIkUUbhxaGL04H77eaFIY3r//ig3f/4s9and7kd9O3d7Q7XDeqpv/zGv3fLnY/Zw09OtLa2dp9Hc/HpR9pglzmoTk+33Pm4d+GUlZXamCO+a9/YdfuVdutw0Kw0lEwEAQhAAAKrO4ElzlGhEN7o0Ado5cdkyk/55zP/sCkfzfUtuBUY3FFYZMUNC71YoxKosrqZVtDWaCO23NL22Wu0NbQUdAks+nCfS+BvrqU04Tok0HQGCncXn7Ldr1w6PyVx0HzWAo3Eq/l1zVmDkFNzgOReKXVCjV6PBgsXuftS5CzX2Rw7gZ2ej7KSAi+cJRmpeTt9Xf6M1mdAAAIQgAAEIAABBBqeAQhAAAIQgMAyAs3OWbGgbvmg4LhyF4k0b82udRbadi/SqGekgoPlpGkrqfQ5NUtL+1h1/XQbPmKk7bzTjr5zjwSaXAJ/eyK06NKyuYAy3fzPU6CJ21/c+7qGJI4fZb+0OZtzOqEqGiyssidlEik0Oq7zVa7hz6nHD6gq8SIRAwIQgAAEIAABCCDQ8AxAAAIQgAAEIgRC6UkUymAX4rrIlT9lKy169qlx9s7773vXjNw0GhJp2suqvEijkqdeHa3eUTOwvNBGf+u71r/fwJzYJxEq0k2YpEQo9bwkgkc4Z0UdNHHCUzZhJewhiaCUpAxK8+k4hQprKFhYJVGZ8nvism9Suep4ldHpy2fduGdL7UYZEIAABCAAAQhAAIGGZwACEIAABCAQIaBSpuZW18s6MhSy29TSsVw+TSo4iTRTPp5rhU6YkVCjERVpVOpU4ISadteiW0LN+q6Webfd90zbljvdTUltz5z0xnWW4RS6Mpzu7qBs53+eAk2cABMngkjokIgW150pSRmUmIQQ3w5nn5HTSeyKXJeldMHC4jS3pinWaRNYR7mWui5dErcYEIAABCAAAQhAQAQQaHgOIAABCEAAAhECdS6DRt19okNlKSpHSpJJ4sudps+0ouZ6a+k9uGuadlfu1OGEGYk0EnBa+gyx3vPe8e9vO/zLtu2223dry53upqTmlyS9cT1p8S0hYX5ts8+uiRvBQSPnSbpW5To/m8MlToCJy97Rvcm2dth/0m5L6Y4LnaSiwcIqg4orf4uy0z4HVZd2dYdSR6kql0HDgAAEIAABCEAAAgg0PAMQgAAEIACBFALKhFmUEvha7AJj9UE6U1CwpogG/j746OM2ecYCX9ZU1FxnbaVV3dpwq9RJzpqmfhtZyeI5Pp+mavFM3+1p621GZrwnSVt1p06gvUkEybb/1HOiraDjHpIg0Ax0Qb2ZXCzZxJFMrczDupp/YX3mAOAkAlRSl03ccXo/uGoULKyMGmXVJGlhLgeU9hoChfs5Z1a5c+gwIAABCEAAAhCAAAINzwAEIAABCEAghUCHc4zMXtS0HJd0DhB9WFf5Swj8bXGtGOsbXAmTm0NOmn/PXOjnUUhwqkgTuj21Viizptgfo6+q3hW2uyt7UlvudCOpCySd4JLJ3ZJunSC65OKgySbQZCuZinPIxJVbJcnYSeqySSLGBV5yVvm1XfmT2nUrV6bBCXyZgoVVyiWe6hamsY5zKZE/w/8FQQACEIAABCAQCFDixLMAAQhAAAIQSCEwz2WKtLZ3L+2Ro6S2odU7JeSC0AdzCTOdH8o7Q19TRyh3UmmThsqe2korvXtGbbhDyZNea3cum7JFH1pz1bpWXjM9Yz5NTwWaOJEjde8SaFTulS0YOZyTxEGTbf04h0zc3pN0UpKQVuKCf+PK1JKIPeG6o9k5ofxMrpqGpvTBwp1MFTa91DuudF0MCEAAAhCAAAQggEDDMwABCEAAAhDIQEBhuqmtmPVhXEGxRa7cSaO+sVOsiXOYPPbI/TZ90WIvxqjkyQcIO9dMYVNdV4enopZ663Cdn4JI0zBgE6v65HW/ji97GvFpPk0uwkn08pJ0OYoer3XCNWZ7UMqdUNXXlX91uFzlAodm9sLl3Uc6P5vIIvErm7snbu9xIcNaP4mIo+NSXS7Zrl37VrlSVMQK7bolCMkdE4KFA4PAR+KewqcZEIAABCAAAQhAIBDAQcOzAAEIQAACEEghoNbKyhXRkABRLveFc81IhKhxDogkeSNhyubmJpNIM9uVPgWRRm24Vc6kobBgteFWeLCGRBq9py5QyqfxokHzAhu5/SifT6MP9RKPctlDEAfiuhxFMcSVHYlLZXmxqaxLZUFyF+kcMZKwI0dRKPWRW6Sn5U9xmTDac7R1daaHOYmIo3OTtuLWsXFupmiwcPsyR1YQoqqdqFXhSqQYEIAABCAAAQhAIBBAoOFZgAAEIAABCKQQaGvvcMKDK2UqKvQOGeWKtLmMEYkjueS4hGmjIo0EGJU4qazJizSukqrDdXiSIJMq0shVo3wauW5K62fasHXXt912HGXrDFt/OYdP3E3MJfRXc1WWF1mzY5AqBEWFmZC3Ey1xUuenyorO1tRLGtt8R6wCp7Jk67KUzV0TJ+5or0lcRUlEnCBkJWmbnWRfXX/ZcllF/VxIswQbDXHxjh4nXDEgAAEIQAACEIAAAg3PAAQgAAEIQCALAZWm1LsP0tESJjkm5ELJFAKbDWiqSNOrvdUfHjo9SYhprN7Q59SY+9wuwabQdYAqaG/rLIla9nNJS61tMnSQ7bDjrlZZ1TfxPUwiYkQnk0CjrBQ5YSRGhIyVaBByOD5dBk0o9ZFLRHOoNCxTF6lsTpQkHajiMmq0TwlU8+syd4IK1xLnignHKatG1xSXaROOD63EFSYskauP48uAAAQgAAEIQAACUQI4aHgeIAABCEBgjSQwc/Z8m+W+vrLN5j26voX1LcsF/ybNZcm0oESax8c9bp/ULvbOGJU6hSGhRr9LoGnuM9iKGxb6Ntz6ro5PEmwqFrxnDcO2saoPnrPS0lIbPnyE/yotjQ+bzbU0SgKNhCI5fNQKOp0wk02g6bouN0ely++RoBEcNakCVzZRpDOQuchlvXSWnKUbSUSVJMfk4orJJatGe46KSHIXyVHEgAAEIAABCEAAAgg0PAMQgAAEILDGEzjspMtMIs0/7r2qR9eqVsi1rotRdHjRwg05a3o6JNKMe/he58Sp986YINJIsAmttxUaLDeNxBkdE0aXSONChNXpSWPg0nrbcdfRttHGm2bdUtQRE7d3CRUqU1KJV6Mr71LmTbYw5LguTqHFtZw0ctSE4Nwg1GRzwCTpqhTnoEmSYyMmSTs96dhcsmq0vvYYAoIVqqwSJwYEIAABCEAAAhCIEsBBw/MAAQhAAAJrJIEg0FxyxpE2qgcumubWdleS0921oQ/w+mCdqVQnKcjiXm324H1328z5tV0ijRw0vh23+zCvDk9W1seWtrqSHHV3chk1EnCKXJmTQoWVXdNUua6VLJnjQ4X7zJni82nU8Wnouhuk3YYEms48neXbgYcTosKMXlvswn6zHR/OixNoFCJc5UQJcYuWPkmoaWrpsP5VJb50LN2IE2iSuF6CQBSXH5S005P2GScKRa9Fz01ZSYHv+KQxwF1vaXFh0seF4yAAAQhAAAIQWEsIINCsJTeay4QABCCwphGQO+Z3tz9sU9+bYaN32c4O+f5eVtWnwl+mXht7/3hf3vTKG1NNIk1PxqwFnZ2Vwkh1QvRkTp0jIaC9rcXuvPtuWzB/rhdfWlxZUyhzWlrogoGXteFWJ6c2J8IoVFhiTGndzE53zbJOT6WL53qRp/e8d/z5I7bc0rYbtfNyZU/Z3D9RYSZ0YOqzzOGRxC0UJ9CkK1OKCjVionDhdC6dONeSxB+5fVSSlml0CiSFWcukdG7IiYkTpXJ9DqLlUP7c6jICgnv6h4fzIAABCEAAAmswAQSaNfjmcmkQgAAE1lQCdYsb7HtH/soOdaLMHk6ckRgjUeb2a87wl6zfK3tXOEfJ5v648a7MKYg3uTCR46O51fWNjozB7sP1IicGtLpOTz0dIXB31rxa34J7Xm29F2l6dbT6rBkJMqENt4SZ0MlJ78tBE0QaiTMqiwrnyoGjTlDVrTX25c2+aNs7oSaMdE6UVGFG7cXDyMVN0hOBJqwjgWVA3848FpVAhc5Q4f0450+SsqQ4F05YS0HCcrnE3VvdPwlY2USh6LMRzS4qdefqdwYEIAABCEAAAhBIJYBAwzMBAQhAAAKrHQGJMWdfdps9cNuFXXvf84en2s8PO8AO2GcX/95x7ud11xloY865zoa57/r5/zlBJ5dR5zJo1CY6OhS2q7IciQkrMiQGqORGmTQP3HeX1Ta2WC/XsWnpskBgze3Lnlx5k9ptS3zpPX+qL3laMmgLL+C0u9ck2mhI2NFrLb2HWJlz2aj8qbqkl+32jX192VPURZJNmAnXlFTU0PFJBJrSooK02T1B7FjkQoAVBixhSIHEcrGoxXecqyXJPuVgUev0OGdMkiBhXW8u4pWOj84rYUflXgwIQAACEIAABCCQSgCBhmcCAhCAAARWSQIqYap3TpnNN1k+U0UCzQlOeIkGAD/85ETTl1w0cs1cd/EYXwL1sitx0jwScyTS5DIUkLtoWW5IOE8fziVwJG2vnGm9aMvu+jrnpHn0fi/SaMhBo7wZiS5yx/huSm5IkJEIoxbdKneSeybahlvijISZ8F3nSqxZf2C17b3X3jZ0yEBXRtThw39VyhR1zKTuM4nwEc5ZUYGmzOWxRHmqDXVleXFXyZP2KrEm3ZDDxkXrmEKdMw2JPBLUsolqSYOEtUacaBTdhxxCEvVC/k0/97O6YjEgAAEIQAACEIBAKgEEGp4JCEAAAhBYpQiofOkc54DRdw2JKxJbUsUVOWaud68HAUeCzl7utRce/53tuN9xPn9Gbhp9V2CwhJtcBZoO98l/dkp4bShPWtGgYIkacuiEcpqoSBNKlvRdAcFyz+i78miCMBPKm9pLOoUaiTkSYxqrN7KKhe/ZkoGbe8eNvqvjU1nNh7b7rjvbFsO3t3aLFwgk0JQ44SRbe+ukAk02sUfOnuLCXmndNXov5LdkEmmSiCVyK6kcKVsnqmiQcdwfCM0335W/pbYLT3deqttmHdfNqcAJfAwIQAACEIAABCCAQMMzAAEIQAACqzSBkCcTgn0vu+FuL9KkBv2qjEkj+rqcM6cff7AXbaKZM09PnGxfcq/lKtBo/nk1TU5EcRaNyBg2oNxSA4RzhSrhoaWte6lUqkgT5ix0bpomJ7zISVPQ2ujLnOSykSDjw4OdeKMRbcOt9xr6b+JFmsVDhvtOTxp92pf4bk9bbzMy65bTBftmOiHOQZNNoIlz6kgMqW1o9Y4ajVShRu2uVYaWyWGjc5J0XIrbR/Tak5ZC6ZyogCTnlfbCgAAEIAABCEAAAukI4KDhuYAABCAAgVWKgASZaF5McMYo6DcqsOh1CTLR0iU5aOS2SVcW1dOLlIMkNbskiAbZRIG49TLlmKSKNMqfUVcnZc34NtxuSKRpL3OdnUoqrail3szpRyFUuGHAJt3acIdyp2bXllsijd7vM2+qDelfbTuNGpWxLfeqItBExZXgXooKNXHumKSlS9FOS9nuXWrJUtx91v7nOpFPbhtl7KjciQEBCEAAAhCAAAQQaHgGIAABCEBglSeQ6qDRhuWWkTij4N/oUMbMQy535uc/OcBeeXOqSbQJnZxW1oUqp0UBttGR9MN8tj1k6wQURJqa5k7nThBp9LOyaeSeCeHBKnmSw0ZDeTTebdNvIy/SNPcebCqFanYtvEOAsDJq5MapnDXZClwIsfJpdtt9T6us6tttu7l0KloRB01cG+10bpWoUFNc1MtmL2zKiFquFblsQgZMpgN1jIS4uPBnOW2KXK5Mkgyi1Hbc1S4cuGJZ+/KV9XwyDwQgAAEIQAACaw4BHDRrzr3kSiAAAQisEQQksigzJhoAPOG5yTb2gfFd4ovyaUIJ08uvT7WnJ032rhllzqzs0erKkFI/3CvEVu2S1ZK5pyNOOJBI8/hD99iiNheCuywMWGuppEndnbxwE+nwpPbaGhJslDej/Bo5bqJtuPWazpdo01i9ofWZO8WUYVPVPN+GDx/hv0pLO0twcsnaWVGBRtkwmTosZStP0h4HuiwftUJvcIHO6UKPo92rst2rqNMl23G5iHOda3/6nAxxLdoLXd4OAwIQgAAEIDqtfLYAACAASURBVAABCKQjgEDDcwEBCEAAAqscAQk0EluC4CLR5nD3msqcJM6olEk/R3NmPsuL+GShy32JxNDEiStJ9xKXZSOR5tHHH3Zhwg1dOTNeeHHCjMqc5IqR0FKokqdlOTT6uaXPECt1GTT6ualqXV8eFdpwh+8Sb+TEkaNG5U8KFq5qXmA77bSrbbbFcN+pSvkpScKQ4wQalXNppOu0JAdNJoFGexjoMmjmpAQ1B76hfEkOJ2XU6PjU7lRJs2WS5sroWrN1lYre+6iYo70O7d9ZosaAAAQgAAEIQAACCDQ8AxCAAAQgsFoQULvsG135Uui8pLKnCS7oN5QvSbDpSeBvTy9eHYBSS1+ibbJ7Oq/yU+TCCZ2c0s0TRJpa12pabhgJK3LQKCg4OGn0c1FzvRdhdIx+bnbCjMqdVPYkd42OUYenaBtuHa8ypxBC3Pfjl72Ys+7QoZ1BwltsulIEmmwiTLYuTHEiUer7oSxLJUhqka7w4D5OHMrm0BHzOCEoel+SCjk6JyrmyE2jMioGBCAAAQhAAAIQyEQABw3PBgQgAAEIrJIEJMroa5jLngnZMp+nKBOFIudHrWuJHR25OCkyAVZgbFNL905O2USaha7cSRk03kWzLDw4dHSSA0Y/S3SRM6Yzc2awF2e8COHcNCWutKlmg518WLA6O+kciTbq+NRa0d/anfhTVj/Tf9d72wwfbttuv0NX2VOm64hz0MQJNCpPShe4HBdUnOl9CS6VFUWuvKjQOjrM58Vky5ZJWgaVi5AjVlExp6/LnwlOolXyDxybggAEIAABCEAg7wQQaPJ+C9gABCAAAQhkIqByplnOLbMyuzL1hHZza7tzknQPCo4Lt02yjuZw8StpS3/C+RIFVKbT0rTYbr/7rza/tdCLLV3ZMu3OWePKmyTaFLbUdXV6klATOjxJfClZPKezNXfjfGuoWt+XQC0ZuHmXWFPqhBl1fNJILXvaesT23fJpUq9tRQSabG2yJZwUu8yW+sbOzJ3UEVe+JHaDqkt9eVqDE9nkqImWqoX5MnXUSl1P+9GaclTFjdRuTwOqSlxuUWHcabwPAQhAAAIQgMBaTACBZi2++Vw6BCAAAQgkJzBrQacTJYxcPqxnWiXbHEGYKXetmVva2q2+oc1qamp8Js2CjjLferu4YWGXUCORppcTayTURFtuhw5PCg+WKOPDgV2bbQk8eq3J5c/INdPQ37Xfds4aiTYSa/SeRB51ezKXnzKgV5Pt9o1907blXhGBJpyrMqRcBZhs2TZhrhD+q1IndVBKJ9RkK7OK7inJeulEH9/NyQUEFzjBiAEBCEAAAhCAAAQyEUCg4dmAAAQgAAEIJCCgsFx1CwojuDOytXiOmzZdxkoozyksKHDZKR1emImKFyGTZn4v183JCTLKoVFujLJmQocnlTZJpNF70TIniS5y0ig4uHTJ3C5BR7+HbJog1qgTVNRRo3MrFrxn6627nn1l+JbdhJo4gUZhuS2uG1a6MiOdu7C+uUfOFs3b1q4OTu0ZUUfLjCSUpBNqkmQBaQEJObqGuFbc4dgW57zS3tTxS9fJgAAEIAABCEAAAtkIINDwfEAAAhCAAAQSEKhzGTQqkYmOwc4VIeEmnfsjwZT+kCAgBGGmpKjQB9zqg32meYNIIydNCAxWMLCGsmnkplE5k4Qb5cvomNDtSR2e5KpR2HDIp1HbbYk7OkeuGYk1TS6bRu4ZZdWoVCoECUukkXjzZdeSe7tRO/t8GokP4tPflfGk67gkYSNTzky2NtrZsmuSCCaZum2lCjW9XalZEqEtaStu7S16rEShKpdBw4AABCAAAQhAAAIINDwDEIAABCAAgRUkINFkkeu4FB1JQ36zLS33hro4JRFmovM0LKmzvz10r81pK/FlTaGrk0KENeSK0ZCzRm4aCTdywXihpd9GXR2elE+j15RrIyFmsStxCmKPxJqoo0a/aw6VQmm9ytZa22brreybe4+29valVujyYtIJHT0VaOJKj7KVR+na40KGJdRUOheOBBQJSKlupShvX6bUryyRkJN6bD8XBq1SNQYEIAABCEAAAhBAoOEZgAAEIAABCKwggQ6XkTJ7UVO3WZRJIpeGugTlOoJjpsJ9cK9352cKws02b1lBk/3pT7ebyp3CkHAiQUaijcSXkEujHBlzMS8hSFhuGQ25bFTKJNeMBBiVPqmLU3jdCx3LHDVyz8iJI0dOuXPRqANU7/nv2JCiFttxlz1s5HZbW2vbUnctbs5IOdiKCDSZnDfaV5yjJS5EWHMozFfuFpUjyUmj8qV0Qk04To6puJGaLbSOE3bIn4mjxvsQgAAEIAABCFDixDMAAQhAAAIQSEhgXk2Tc7t8GmYrh0ZlebEvc0o6oqVMEjKKnMAT18kp09wqj5r24RwfHLy4ZoEXZIKbJoQIt7tyJw2JLxJdNOSW0QgijnJpJLaotbbCgqs+mWyhFGrx4OFdocFtJZVOkJnqy54K1LZ7mXCjzlDN706yj6a9Y+dddLlt8aVNXKbMUt+aXGVa2QSaaEZM6nWG0ik5jNKNbOfq+CRdsiTiFDmRRiJbKH2SUJMqNCXt9KR1lY2j61Z7dt1vCUkMCEAAAhCAAAQgEEcAgSaOEO9DAAIQgAAElhGoWdyyXCDtsAHlltrhKR2wVGGmcVmwrdwWJUWdAkGuIzhI6mpr7ZEn/mbKpgnCi7o0KWdG5UreDeOyZySwKHemwDlg9LMEGQk3KoeSO6ZhwCbeQRM6O6ksSm6cINJEQ4OVUaNzJAr5UijnqGl+7xV7/ZWXbJvtvmqn/vJ0GzZkgHekFLvrC2JN6jVmy6BR+dd8J36la42tebKdq/eThPpGxZTo3sqdcCPxTUKLhDQ5nULob9x9krAUXEQ6T6VwDAhAAAIQgAAEIBBHAIEmjhDvQwACEIAABJYRkKiyyIk00RHXASi4bCTQ6EN7EGbCHD1x4YRzow4TiTNBpJEoI+eMgn8l0mjI8aIyp2bXVluii36XaKNSJY0lg7bwHZ7kpAkdncJ3lTFJnNF5asNd4kQcjeZlwo7KnuTYUahwQc1MW7Bggb399n9sz2/ubyedeKIvHVLZkBwl0SHHioKW0wUL67hsAkymAODo/HEZNTq2f6UCjDN3ZgpCTZHL10kn0KX7wxF19lS78im192ZAAAIQgAAEIACBOAIINHGEeB8CEIAABCCwjECraxU9r7Z7OVMmB0acMBOFGleqk+kGyJkhcSHkvURFGp0jEUbuFoknyqaJhv/qfd/NyQk5PnvGdXtSALBEHP0eOj0pb0ZCj9w2QeyRmBPacGveaNlTpQsQ/tfj99lWW21lTU1NNn3Gx3b22WfZzrt8zZUQdYpUYb9xIks2LsqEqawoci26uwtmUVZxGTVBBJrrStcyuXTCfNqLyp40UjN2omtqX7ov4TkZ4gQohSczIAABCEAAAhCAQBwBBJo4QrwPAQhAAAIQiBD4ZGFjtw/zcliUuiyammUdnoLjInyQT3XMpIOpD/9ykcSJBKnnpmtDLZHmsUfvd22vG7ygEnJnFAosMUVDwk2hK3XyJUtOO/Ctud2x5TXTTaVR7SWdAcKhw5MXcFwr7vC73pMTR8KMHDUScUIejVw4FXPfsbYlNVZTU2NTpkyxsrIyl7NTYL+99oZu+TSaR2VImTJ8sjlokpSGJRG+khwTFZKC8BbubzQMWa9Fg6PlEBrav9PBxIAABCAAAQhAAAJxBBBo4gjxPgQgAAEIQCBCQI4N5aqEET68L3blO9HMktQP7tkgRjNLcoGdKbhWIs1DD9xrDS0tXa4XOWJUkiQxRa6Z4oaFfimVJymXRkMOGgksGgoQllgTOjylfveCjRNuJPAoWFiOGp0f8mhq33rOZk7/wDbddFMv0MhNM27cE3bgj/6fHX30MT6fRoHLrvIrrQtGXAe6DJpM5U9xHZri3Dm6xrg1wr2IBgmH1zIJNdHW4BKRVELFgAAEIAABCEAAAkkIINAkocQxEIAABCAAgWUElKOiwNsw5Jjp51wgza6tdLbSl2wA5YSRWBEVfpIAlwCgL2WjpI4F8+ba4w/dYw29SrzYokwadW+So8YLK26o5EnlSxJo5JoJ7wXBRiKMRBqFBAe3TB9XwqQuTqX1M/28yqXRHD402JVBKWBYAlDfj182q5tjbW2OlwsxnjRpkm299dZWWlpqU956y44+dowd/OMfufDdQs8z1Wkk8SSbuyadeyjKQAKKAnrTsQnHZeMXnStTGZuOSS1l07GhZKqvy5+RiMaAAAQgAAEIQAACSQgg0CShxDEQgAAEIACBZQSaW9tdSU6LhVKmljbXpcjljtS6Lky5uGaiQKNlMbmAjgsYDiJNoysvkogiQUUijISZlt6D/VLKp1HJk4QWlS3JaaPw4GhL7qIO172qan1/TOjwJNeMxBqVOFXUf2xL29t9F6gg4GhO5dG88a+/e/fMyJEjuy7t1Vdf9a4a61VoY8acaLt87WvOzVLQTeDStfVx4kamjJm4Dk3pXC+pbJO2zpYLRg6pbPc33AuVuylIWmKbzistLszllnIsBCAAAQhAAAJrMQEEmrX45nPpEIAABCDQMwJtzu0iYUadidSGWW4OjfrG7l2Kks4eJ0Zkm0ddpFKDi6PHB5Gmye1XGTISaTTkptGQs0aOF9/ladlQVo2O0/Fliz70wovcMXLZpJY9lTknjcQava+yqWjZk4KHy+dPs9bFi/zMwUmz8847W9++ff1rEyZMsB13+bqddPIvbd11BvrX5HpRa+5s7cclfoh/a3tHWjy6J+7WLNc5KnpwtBwpG+MkYcM6X46csG5xkavdcusXqIaLAQEIQAACEIAABBIQQKBJAIlDIAABCEAAAlECqTk0+mAux0a2jkLZCCpMdmBVdqEl0/nDBpTbrAWfiivpjgsizZLC3t4ZEwKDVcokN42cM8qSkUgjsUY5NHLRhPBgtdWWCKN22wXtbdbksmzCkCATAoLVZrupnyt1WvCez7bRHMqmsRlv2gsT/+VdM6lOGs2j0ieVPW2z/Q7eUaN8GokrLc6tlEn0kjAl3hLI0o04h43OibYpz8Q3rhV49LxoKZTcOSpxYkAAAhCAAAQgAIGkBBBokpLiOAhAAAIQWOMITH1vhk2dNsP22HU7q+pTkfj66lxmikpewtCH+EF9y3z2SE9Hkm5C6eZO6u6QSDPukXuttqjKiyxyzoSuThJpwu8KEZboUuRKncKQ0BLabkvUkfsmhAjrWJU+qQuUhB+JNRJ85KjRMXLfKI9myqSnbNiwYd45k85Jo9cmTpxog4esYz8/8TTbd+/RPt9FLhnl/qSObB2edKwcNsq2ySTg6Ji4OXRMLuJbNOxZ5VlVCDQ9/ePAeRCAAAQgAIG1kgACzVp527loCEAAAhA4+7LbrH5xgwfxjhNqbr/mjK4Smzg6jc1tLmfk06BgHT+4usy3i84mCGSbN4mbI935Sc6T0FHdu8RmfDzL/nL3WKsv6SwvKmqqX1b2VOS7O0loUTaNcmk05KApc2VKvZygs3id4V6k0fCdmtzrEnZU8rRk4BZemFGnJwk7EnEUGixHjZw54fgXJzxh06dPtw022KCbk0atuJubm72TRi4b/d67dx878eTTbNttt1kun0Z7iBNX4oSrpM6YpDk12lNUZOvXp9jlFBEQHPdnifchAAEIQAACEPiUAAINTwMEIAABCKx1BH53+8Mm98x1F4/x1y6xRvknxx12QCIWHa6sZvai7m4ZOTYamttz7sQUFlR5TEtbR87nVzshQOumC7BVJ6TKiiKX5VLYJR6FcieJNAVque1EGA25XeSoCW4ahQorU0YlTxoqf1IbbTltVCYlMUYuGTlnJOzUDd22q9OTOjxJlNGcEm50nsqe6uZ/YgtmTu8SaeSmkRgjwUZfYShEWEPhwtu6sqdfnNo9n6Zj6VIviGVqwa1z4xxJCnaWw0WiWraRNKdG8+lehDygdfqVkT+T6E8TB0EAAhCAAAQgEAgg0PAsQAACEIDAGk9gwnOTvVsmlDJddsPd9pURm9toV9qkIcGm0pU4/b/v75WYxTxXzqTW2GH0tBNT9HzlyeYaNJwuDFfCjDJx5OBQ6+9oC2sJCRUlHfbQQ06kmjnfCy7KnAmhwBJpgptGIkuvdlcmVFZlbSWVvrW2yqMWD9rcymum+5yZUpdPo85OyqdRiLAcMz6vZt47/ntRS7133oSyp6KF062tudHuuece75ZRYPDgwZ0dpdKVPs2YMcPeeutt+/5Bh9gJJ57oOztJyNI1Zsr80XsSzLKFJyfp8qQ9yYkzvzbeGRW9/1pf5zEgAAEIQAACEIBALgQQaHKhxbEQgAAEILBaEahzosyYc67z+TLDnENmwsTJaUuZDjvpMjvuJwfYqG03T3x96jQk50oYcS2v4ybuaSen1BKc0P5bZVhRsSfqplnkwnXV/ejD/02zZ559xpb0KvHOmZBJE0KEJdRoyEUjp42cMAr9jYo0EmHkkpGYE3Jn5KqReNN7/lRbPGS4P0eOG82jPJppr020wsJC75qRW0ZOGd92241oiHC09EnizX+nvWennH6u7bXnHl6AypRPIxFKzqFsoc3RQN9M90ZlUBJaZi+MzxaKOm0qnDAmNw0DAhCAAAQgAAEI5EIAgSYXWhwLAQhAAAKrFYGx94/3pUyXnHGk37d+v8N9/ePeq7quY+bs+b7ESRk0uQy5UhY5kSY64spqss2fxPWR7nwJOxIEmlrarbNM6tP23+F4uWwUdqtg46ibRu/X19XaP5/5h82c/YkXaJQ3IyHFlzG5cGA5aNTFqdl1bvJummUlTxJ0NFQKJUFGuTMaoeRJx0mUCR2egqNGok/lJ5OtvXaeLXWlSsE1U1VV1VXqJMFGwk1q6ZMEm7q6Oisrr7Brr/+dbbTRhiYxprbB7bX103bbSdwxSbo8pZYtZbt/UadNtSudqnBOHwYEIAABCEAAAhDIhQACTS60OBYCEIAABFYrAipd0ohmy3zvyF/5UqYD9tnFv5da3iTXTZKOTq2uzCa1hEatn2tceLDcKT0ZPRF4JNConKfDLZkaUhzcNOlEm9T9vfXGq/bqay9bY0cvX+4kgUbfJcBoSFiRcFPYVNeVReMDhN1xarstV01zn8HLgoY7hZnSxXP9+XLXyJVT5kqk5LiRo6Zs0Yf2zBNTnHNmdpdrRgLMvHnzrLGx0UaPHt3lqpGIk5pVM2HCBPvaHnvbz48f0xXuLFeTQprlKtJI1/0pXHeS0qUkQo9nk+K0GeLycQoL3YsMCEAAAhCAAAQgkAMBBJocYHEoBCAAAQisXgSUPXPZjXd3c8ykvrbDfsfZeOeokdMmCDpJ3TSfLHTtpj+NofEOFokzqS6VpNRyEXjkuOktZ0xxoRcIooG5eq/vshbPca2mo3tb2rrExj/xuH0wywkrZZVd7bR1jIQWuWKUPaNOT/pZbhllzNgyBuroFMKDlwzcvKvkqbhpodUPHu7FHAUKq8OTHDUzp5TZugPf6NpCCAfWC3LRqNxp7ty5Nm3aNJ9VE8qggmAzZMgQm+4yar59wA98Pk1lebFj77pRFRXEBjbHdYHSHnQ/29z9jJaypbuX0fI03Yuh/TuDlRkQgAAEIAABCEAgFwIINLnQ4lgIQAACEFilCKhk6eEnJ7rynPneEXPG8Qcvt789f3iqL3Eatc2n+TISZR647UIfDLyXe18dnPSznDbR4+IuVhknKi0KQ46VUudokYumJ0NOGJUhpevIFJ0vNWdm2IDyLoEmiDap4cDZ9pM6n9w0r7w+2RYX9vanqXV2CBFWmZPKm1or+nfl0oT223LMSISpV+6Mc9c0OiGm3Lll5JrpM2eKL5kqdN2g5LSRuNN35sv23JPb2gcfuLDh0jOca2aAqbOThkSYp59+2pdBffe73+3avl6XkBMVbBQkXFO32I485njbc/TuXrha0tg9gyd6/RKwBjq3U7YuUDo+SQtzHRcNalYpme4jAwIQgAAEIAABCORKAIEmV2IcDwEIQAACqwSBl1+fapc7d4xaZUtcOcflyCgIOFWkkYBzoyt1iubOSJT5k8uckTCjEOFDXMlTLsJMAKASGjlUwsglsyQdxHQdmaLH6cN/upwZva5QWpU5pYYDZ7tZITi4wNk+Up02IZvmo/k13i0jYUVDPyurRiVLEl8k3CgQOGTQqNRJgk1Tv43895BDo++h05OOlcNGZVMlH/zHxv7+O8uEmLFOqHECTvMcmzRpkhdhJL589NFH/mc5aTSiQcLRzk86tri0wn77mytsnWHrp82n0fnipS+VRGUbSUvOJORIEJOwJudSKLFaJf6gsAkIQAACEIAABFYbAgg0q82tYqMQgAAEIBAlkJovIxeNujGpPEnCS3TIRTN6l+28eDN12gw74dzrugk2PSXb3Nrucl+WDwqWMyNa+pR0fokGJa48p86F3kZHtANTas6MRKF+zrGhnJnCggJfYlXvzo9bX2JQujbcqXuVm+aZyW/Z0pLOsh2VKAU3jTo7yTWjoZwZuWpKvXNmQ+szb6p32Mg1E4bKpHS8SqE0T/3Q7Tq7Qs382O4Z+x0nxGzsBZpNN73UvvWtTxkEN01JSUm3bBo5aUpLS2348OFda6gk6v3337eRO+yaNp9GB6Z2vkp3f5K6bHSuhJxwzwdUlTgXVWHSW85xEIAABCAAAQhAoIsAAg0PAwQgAAEIrJYE5Ix55Y2pXR2adBGX3XC31buQ39C1KVxY6NQ0y4k4ctno/VQRp6cQZi3odJaEEXVT5DqnxJYq58CQCKMRFWZSS5ai79Usaekqi9L5yqVZVN/sxJpIQM6yzQQXTpMTl1QGpFDduCE3zfP/fNKmucyd0LFJThkJLnLBBOFF80icUS5NW4kTY1wocGjJLUFGLhqVPknIaXclTlWum1OdE2nkxHn7uTJ77qkX3Azn++3su+99LnOm0ebMGe8cNc229dZb++8KC1b2zJw5c5br8iQHjQQaHStRZ8aMj23/7xxoPznsMJ9Po2uWeNW3txO03M/ZsmWSumyi3bd8WLALCC5wJVQMCEAAAhCAAAQgkCsBBJpciXE8BCAAAQisEgQkuqhUSQG/QWwJr73w+O98JyaJOF9x2TMrS4xJd+ESU5ojLZ7jypTi4IWymtRcmOh52dpm6ziF1vZ1AbcSIEIno2wunGx70nkSnSRuvPDCi/bCv/9jTc6t4wOCXRZNgTJl+q7rBRkFCCuDZsmgLXx5k8QZiTESZyTIKMtGeTQSbkLpU2jXrWM+eGeKDRgwwMaNO8qVM23ltzVy5I3ONfNR1xYlvLz22mtWU1Pj3TQhsyYEDKeWPynHZuNNNrOjjj3B59Oo/bXcRYtcflC2bltJ72O005Pyh8SKAQEIQAACEIAABHpCAIGmJ9Q4BwIQgAAEVgkCZ7vcGYkv0Tba0XwZvS+BJrTU/iw2XecyaBTsG4acF/rQrgDhngx1F5KAkK41di5tsyWsVPcp8dkuEpC0rwbX4Shphym5QSqdyNPpxvlUzJCb5tkJ4+yD+s5W4hJkghAjkUaCi8SZpYWdLbp9OZQrf5JbRrk1On6x6+jUe/5UW6wwYeee0fty1rQtnGX/euJh18FpB+eAme7Kly51jphhLn/mKSfELHKOmDt8J6cgwgRRRqKNXDNy1oQR3DTRY4etv5Fd8uvf2LpDqnxeT9R5lHqvFPQrgSsaAp3ufopxcOP0ceKPHEwMCEAAAhCAAAQg0BMCCDQ9ocY5EIAABNZSAsp9kUslOv5v711s1Lafdkj6PNFoL9878ld2+9Vn2OabbmB1rrwpuGrkoPk8hkJ5F0W6NknYGNS3zObWNOW0fHC4VJQWeXEnKgyEttn6rveSlCVpcR0/qLrUFAKsQNy4dtFhw9ncO+EYZdNMeHq8FQzc0IcGS5iR+CKxRaKMHDHBTRNyafSaxBxzjJoq17WSJXN8y211eJJYU7HgPbPZU+21l17wpUoKBp4w4XjnplnXLVvtRJgHXDbNK11cVeYUgoM32GADX/KkkclNM2HCBHfMhn7eE04505c9aYhNKlMJZbqHcVk+Om5+bbM/v58LalauDwMCEIAABCAAAQj0hAACTU+ocQ4EIACBtZTAhOcm+4wXjanvzbCxD4y3PzlxJF8CjfbxyLIuTXLKvOwyab7j2m1HHTWf9a3qcB/MZ7tQ4OgY7HJIUsN8M+0jNWemaFl+Sb3Lh8mWQZPtulLzaXRstctdUblTKHlKd36uZVAL5s31bppZLoZHjpngppFzRkKNsmj8cI4gdW5SPo1CgvV+xcL3rKlq3S6HTVSs6VU3xzoa673QUlfXz5Uz1To3za+dGLOl7bLLU37KpqabnZumqctNo2wadXtSaHCqmyYIOXLTyIGj3/877T0761cX20477dgtn0aCjM+SccLL7IXZRbbU49Zx55A/81n/iWN+CEAAAhCAwJpLAIFmzb23XBkEIACBz4yAnCpyroTOSJ/ZQgkn1n5ecW235aL5LPNmMm1nnnNaRAN5k5bHpHOqdGW+tLT7sqRc2mZrf5ncLxIT+rlynF7L3DSpjhGdpxIdOXckDiUdOu+NV563f06cZM1OcNGQm0admpqdSyZa8tThWnSrs1O7K3VSGZR/zwk39a7kSe4avR/CgzvqF9hLL73k5wvBvzNm/NS1397EvbKRE2Fec26a+7q2qTInCTrKpGlq6hRuJMakc9PoJL2u9xsaW+zy31xvm2+2sc+nWeyuXdk0YhFXpqasn3Cc7ptEHQYEIAABCEAAAhDoKQEEmp6S4zwIQAACazEBdUtSB6UHbrtwLabw6aWnlg+pjbM+sKe2yw5nZMuSCW2zlR0joaAmUj6VDXboJtTZZjtzdybtTRk5ta6bUYvLpgnlU5q71uXp5FI+VVmh6yzwJUJznStl/LgHbX4v5c4UecdMoQsQlpOm3QkvwTmj8GAGYAAAIABJREFU8ieJNwoJVvcmuWhU2tTUbyMv2uh1OXE63nnGliyYY4MGDfKXLYdMS8swe/fdd22zzU6ziRO/4USYSb7TU1PTX9z32V1uGok1Ol5i1Prrr99V+uSv0b2nUqdowPDEiRNt99H72KGHH2XrDh3g+BT5cjBdV7YRDRLWOdWuxIkBAQhAAAIQgAAEekoAgaan5DgPAhCAwFpKYOz94+1Gl0UjcSYfbpVVEbuCdxdFPszLWaF8k9AuO+w5WwlR9D0JO3KyKHC2tKgga+6MnDFycSj7JLUVdyZWxYW9rF9lqRdjtG7S81IFplR3T3Nzk01+eZK9+fZ/Ot00bm/FDc4ZE9w0ruRJDhoJNxJwlgzcwpc6qbOTQoR9WZRz1dSuN8qHB5fPn2YtDYv9shJRNNRqWy6Z0tJjXLenA/1rpaWf2EknXdt1uUGEUSZNyLLROSptUhmUSqDkngkjuGxqnHjz7QN+YL887WQrdtzbXJvyOtfCPF27cp0rp5QCoiV0Vbt7JQcOAwIQgAAEIAABCPSUAAJNT8lxHgQgAIG1kEAI5b30jCNtj122WwsJpL/k1rYOm+eCYqMjtMvWa3FZMnJiZBJY5HjR16L65uWEgiRhvul2HMqoJNAo8iZp8HDSjJpPZs6wZ575h823Pn750Eq7YcAm3iUTXpNQU69OTq7ttkKD5ajxWTbtna26K51o0zJ3hr046TnbdNNNu7o0dQowr3mxZtNNj3TlSofY4MGz3NcnTrx53b3+924ijAQYCTVVVVUuw2aXbkhCWZTm15CI87///c/Ou/hK23bbbZbLp0m9x3Nc/pBya4a43KFCJ3wxIAABCEAAAhCAQE8JIND0lBznQQACEFgLCez5w1Nti002sNOPP7jr6itdt6TPq2PSqoz8k4WN3Tr+DOpb6suT5KaRwJIuSyZp22w5XtTOWQG/Kr0JQonKoZKKK4FdqhikvfVxApHKm7K1lM5VDJKb5vl/TbB33/+fNfbb0C9f0tpg7c5Wo3bbRU6okWOmZElnaLBKn1TapHwaCTR6XS4clT81zvnQios/LR9S5yaJNGFsvfUudu2157tfP3RfG9mxx17u23KHEUQYiS+h25NyaiZNmuTLouSuCSO4b4YPH26Lauq75dM0OP4hnyeUlEmYk4tpaP/yVfnxZG8QgAAEIAABCKwGBBBoVoObxBYhAAEIrAoEFMQ75pzrltvKKNc96fPsmrQqsEi3h9TW2Cp/kTjjQ3dTMmF60jY7CALO9NKjsiTtRZ2cmlrbbYkLwo1mzYS5m50TqN6VV0VbSyd1zaRjIlFn4dyZ9sjjrtNTyVAvyigMWC4ZlTWp/XZL78G+zElDbhq9rxwadXWSw6ZXR5sVNSywtsU1bl9LfbivOjVJQNEIeTPKp1l//fXc+8f71xUi7Bpou5Km631b7SDChG5PEmiiOTTRuYLLJog4hx5+tO2z77d9Pk1JUaHVuLInddsqcgKZytEU5qz7zYAABCAAAQhAAAIrQgCBZkXocS4EIAABCEBgGQG5W+RCCeJLEGeiIb9xpU7ZYEoEqKoo9iKFxvy65m5CSqZzo2suqleeSkfaQ+UCqXTzRzNvcnXNhInDXGXFhT6Hp6Gx0SZN/JdN/XCGd80om0YuGTlpQmtuBQmXLJ7jS5sk2CwZuLn/3tJniBdyitsa7Im/js3oeNlss8189ybly4wbd5Rryb2V387o0Trn7a5rDjk04YWQRxNcOXLUREfo9jTbuW+UT3PcCWN82VNxkcvuccKb7ntflz8jJxIDAhCAAAQgAAEIrAgBBJoVoce5EIAABCAAgWUElEMj8UMOC4XutrUtdUG8JS6bpjOjJCp2KFg26lLJBjGdgyWUKUn8yNZ1qScCi4QgCQ66HjlE4tZI3XvIt0lX0hWyaT4p38CHBKuzkwKEvWjjhr5Xzpniv8tlo1wa5dPIbdP345etacEsK+rVKVBpBLEliCrBTfPRR/1dHk2pE2zOcA6ajZ2D5inf7am29lH32uyuHJpotye5ctKJM1G3zowZM2xRbb2dde7FtsPI4T5zRiVnKkErdWIUAwIQgAAEIAABCKwIAQSaFaHHuRCAAAQgAIEIAZUHhYwSvSwhRYKH2j23tC1f6hQHT64Mna8yKTk1okMOnX4ulyZddsyKlCWFUiitpXKo1JKnbHsOwpFKgNTZKN1QNo3cNG9Pn2kdZX2tsMWFBjvNpbWis4NTY/WGVuYcM/q5uc/grnInlT1JvOmo+cQ6Ojp8qZNGJseLxBSVNs2YsUdXt6e+fT9w+TQ3d9tWKJlSd6fUUqjBgwd3BROHk9RNaseddrbLL7/MFBAsN40yfBgQgAAEIAABCEBgRQkg0KwoQc6HAAQgAAEILCMgt0nzMmEiiCQSWDTm1WR3u0QhBhdKnKiTzq3SE9eM1k4tS5IzR22+VaaUroNU6n4VYtzuhJPUvJ1MD4fcNP98apx9UrFhV5mT8mcUGCwHjbJnlEGjEVw2+r1i7jv2+ovP2aBBg7qJJypvktgS7fbUKeJUu3KnFpdPc6h7/1tO0Jlkm232tsuxme1+f6pbyVQQfeSsSQ0P1vwTJkywr4za0X77myusygULSzhraukgf4b/B4AABCAAAQhAYKUQQKBZKRiZBAIQgAAEIOAcJ+7D+qLFzdbHOV/UNluuF32FVtlx5UJR54vCZ7N1VQq8JazISdPhaqYKCwr8yzWLW7KWPqXeq+CaSVeWFJw6i12wcKqLR/NIENL1qtQn3fvZnouSwnb7xxOP2xtzGq2jpMK7Znwnp5KqLlGm1HVzKm5YaMqoUS5NqSt5qn3rOVtcs9B3ZNIInZfShf5KVJETRsf27TvC7rnnaHd8P1GyH/3oCvf6p04fzaPOTmrHHbo9hfnHjRtn3/v+Qd45I5dUs3MXyT2j69d9Y0AAAhCAAAQgAIEVJYBAs6IEOR8CEIAABCCQQqDROSvqXGBwNB+mwn2QVwjvQueyaW3/NEclnNpT54vOV2lR72VlNrk4dcK5EpOylSVJgJBDRgHFi5z4o/wcCUPKqlHmTpzwlPqAhCBliUoq0frg/Wn2rHPTLOi3me/iJBeNxBoN5c8oLDi8tth1elIezbTXJtqCBQu8+DJ37tzlSp1S82nUvUnHNTcf63Jo3nU/n+mEmEX23e/e4fJpmrzIIweNypzKysosdHtSiLBEnuNPONHOOOMML37p/un6B1aVurDgTlGMAQEIQAACEIAABFaUAALNihLkfAhAAAIQgEAKAQXsqu12aoCvwmT7uw/1ynWR40QjtLhWwHDS8qCwXGopVKnLpZEIJBElUwZM6rm55MyEjBm5e9RRKp3jJu5hEIN+laXLnVtfV2vPThhnr8xtterqaj+NQoQ11H5bbbeVQ1P1yWQv2pTXTLfx94/172+yySZdbhr9LqFFJUmhXXbYk15XtyaVQW299S5OeNnf/b6lf3vIkHuco+a/3bYv0eahhx6yo44+xs477/wuIaqTe4kPUWZAAAIQgAAEIACBlUUAgWZlkWQeCEAAAhCAQIRAmxNcFtQtL9JEc2N0uNwr6vrUuEywSQJR7o1QRpV6bhBAQnlVuvmShPlm2kd/15lKuToSmOQmyWUk6T711huv2ktv/tvqygb+//buPkauq7zj+PG+2s6u7ThvbQiuCiQsqiLArS1QjUQTaiBCiiOnEooCcSqjqg64jRQpLnacChKwJUSoaSIVucIkKKAWFCdCzVuzCeBCS4gJIYCLQwGHvDixY3t37X1f9/ld56zv3tyZuXP2zN1Z7/dIFtnduS/zucMf89PzPCeZQaOtuNuG+5L/1VILlKpr9LeR/tdc69iQe+aZZ5LqGFW/PPvsszZfptNdeumlU25Nw31VGaPZMr6V6fzz/8rCnIsszHmPVda8w61b908W1LyUHKcKHLU1fe7z29x1160jnKnnQfNaBBBAAAEEEAgSIKAJYuMgBBBAAIEzQWD3Q3vck0/vcyve1ePWfGhV9LdUKaRRUKFKFw0Ufq1/uPCW27pBhSOqXqk2QNi3JKkqR61WfhUdPpwHka70OT44ngwQ1ioy7ybd0lSkSshX0zx38hzXOvCqVc6c/3qb06KkekbVNOMW2Mw/+lvX0v+qGxs6kQQ0vb297qKLLsqtnPFzaNLv7Rvf+Eby41VXXWWVNH9u82c+YOHOoM2q+Y2FNp92O//1VnfZZX9BOBP9/xmcEAEEEEAAAQTyBAho+FwggAACCMxJgXV/v82ttGDm7W9d5u762u4kpNn0yWuiWyikOdI/anNLJpJ2pu6Fba7dWmOODlgrT5eFNNYOlQ5RKt1AeoBwtXkx6eMVonTajBS1W2kGTki1js5XaRCwH35c7X4qtTQVgf7lz55yP3jmF26g5Sw30dLmWsbHknCm7w+XJ4GNn0cz9Mrv3AMPPOA0JFjVMaqiUTWNKmk09De7I5OurXYnhTaLbTcmzZvRUOD9+zfY77Wd+ftt5sxJ98UvnnSHbGaQZu6EtjWtXb/Vfezq1VUDwBdePuTe9AfnFiHhNQgggAACCCBwBgsQ0JzBD5e3hgACCCCQL7DvuQNu87ad7ts7P5O8oG/ghNMX6RvWrWlIJc2EbVmtwcGdtmV1uiXJD9rVPWhYroKAvDWdAcIKadQOpV2HFApl5+JU+4wUGQTsAxjNsskGTUVamipdX5VCOv7lV15zD/7HA+7Xg53JS0cXLnULDz/nhha9ydqbBt1Q95uSuTTHX/m96+jomDydBvv29fVZBcxlSQiTXgpn3vzmN0/ZplshjYId7fB07NjT7m/+dtxt/eypFi4Fapo50xKwW5M+W1//1iNOn7lr1652K9/dM3kr+/YfcJ+6ZYfTHlDdXQvd7Tevdz0Xn9qZioUAAggggAACc0+AgGbuPXPeMQIIIDDnBfRl+VNbdrhHv/mFxEIVDLsf3ON2P7xn8neNQFIIk7cVta908dUa/trpqpl6d0rSOXxAomuqgqaerbDrqXzxQY62+fZzaVQp1GJ/0HuuJxRK33f6PWs2zQ9+sT+pOFKbU/fBnyVMg0v+yObSjLkFh/e70f4jye9URaPA5ZJLLpncmUkhjQYHa65MdjtuHaPQ5sDzv3dXfPghNza+zN1w47AFO6daypZYyBUSzqQ/Q/qMKRRUpcwGCwK1FAruumNTEsro76rq8p/JRnz+OCcCCCCAAAIINLcAAU1zPx/uDgEEEECgQQJ/+dGb3Jdv2+h69+x199ksmkVWwaDg5vZN6xtSRePfhgIMv4NT+q1lq03UPqSQ4/jgmFXdqO2m+MqbNeNnyBRpqQodIqx77rKqF1UChezwlA16ssGOZtM88fij7jf94268fYGbaFvgOkeOueGOxa5tpN+1H/q1e+F3v3HPP//8lG23/a5OmlNzxRVXJMOC00vVNvMsXHrooYdcx4JuN98qnVQRNG7baWsr8ZjrRz/ZlwQyGy0gVIudD2t8YLPDPpO0O8UU51wIIIAAAgjMHgECmtnzrLhTBBBAAIGIAhoQfNeu3Ul70yNWSaOARj8rrNn1pU0N/ZKsVqABq2rJLj/TRb9XOFFkAG/2HD5cydsZKh2A5A0nns4QYd2Hv7b+u57tu/X69O5WtQIpVdP85zPPuZOdCye33h5dsDTZ3enAs0+6Cy+8cAqLKmoU2vzqV79KZtNccMEFyd9VUaNwZsXK97qvfOVfJkMlOZ23eL5to63mo/hLIc3m7ada7PS509LncLWFhv6zGP+qnBEBBBBAAAEEml2AgKbZnxD3hwACCCDQMAFV0ahaQYGMltqctt15r7t81fKkkqaRSyFE/4nTOyzpWj7gsGIOd/jYsA0WrjCUJufG6glX8mbDaM6Ndofqs3uqZ8tv3YpvxfItTRNWQqNdqvyA4lotTn7eTD0tWKqm6X2i17148OVkaPD8/hdci2293X7isBsdHnInRwYTJW2Xna6o0XbbWmp/Ujhz3V9/wm3dsjlpPfPtZ7p3GTVqqdWp523LkuHBfm3753tdv4U0eZ+77fa3Kz+4ivk0jXognBcBBBBAAIEmESCgaZIHwW0ggAACCJQvoLkfqlrQF2UFNXfbMNcbrlvj7rRdnfRFWS0ojVw+pMmGK5pFu3RRZzK/ZciGC9da1apmKh3b0d7izu7qcAMWFLW3zXMdba2T20nXul7679UqXzT3RmGHrpE3e0fnmc4gYVW6/N++p923vvuUazlnWTKLZt7EqJt/5LfJPBrf2rRq1dQt1A8cOOAefPBB93c33uQ2f/ofkhYy79zocEbvWbNm1NrkP18aFrzuxm1JRU22veke+0yq2ksVNgoOdZyvuqnnOfFaBBBAAAEEEGh+AQKa5n9G3CECCCCAQAMFVM3wmM2hWfOhVZNBjX6nXXUase129q2M2NBbVZ5kW5J88DEwOJo7s0bn0WuWWMiiFdIOpcqVpd0dtsPTRBLO1LuKbLOdnn2jiiG/U5XClXqqbLL3lg6GfnvgRffYd3vdwRNjNkD44qSa5qW9j7vDB19yl1566ZRD1e6kQcHXfnyd+8dbb03cfKVSGeGMbkbVMgpZFLb44cAft5AwXVGj1+lv11uY89XXW+4U1ujfbbbbU3o3qHqfG69HAAEEEEAAgeYUIKBpzufCXSGAAAIIlCTgq2g0+8NXL6jV6cmf7ku+QKvt5EKrrmlk1cLQyITTTJhqIUR2LosfyFutOqUaYXoQsLbhVltSta2+0+eqNcw377raqUrDd4/Y+7TxOrZtdWfQIGGd2+8wlW5L0u+f+h97bj/5iTt20cpTuzz1HXRjY6dn/ajdqbe3123Zequ7ft31UyqGVE2kNq8ylqphtlgIqKHU+m9t754NZ3QfqrTRUlColigtvb6Rn8Uy3j/XQAABBBBAAIF8AQIaPhkIIIAAAnNeID0cWBia+fFL+/Ks5b8Mq/2kkWvYdg16rX9kssLEX8tXoKgFRyHNdKtmKs2qKdpqVM8w36yXKna0K5KqaLLhSlFbX7WjoCdvRs/hV19xvVZN87t557iFh59z432v2vVOuv3799vW28+6u79+r/uzP10+Gc4obDq7q9O207bBPyWvbNiS/VnDhP/31weSCq/sjk8l3yqXQwABBBBAAIESBAhoSkDmEggggAACzS/g20c0lldVM+lBwWvXb3UbbDbN5e9b3tA3MmrtToes1ci3AfmLKURY2t2ZBA2aHROy9bbO5atuKg0C9jNjjljbz4i1PWVXkZamakA+BNLQYL0XXSf7Xoscr3asWoOHf/i9x9wzz/40uc4PvveEe/ngK+7fvnWfu+Rtb5kSzpxrlTztbeWHM9n3qTkz+gwqCFRVl1rs0pUyGmi96YZrGv4ZbOgHnJMjgAACCCCAQFUBAho+IAgggAACCGQENINmxTt73JoPnxouqwobfWHOa0OJjTc2rnkwI1MCCL9LkipQxm1np7wQp9p9+OOLDALOax/yLU3trS1JlU+tcCR7L3nzZnzL09Hj+WFQ9hx6fdFdofyxL71wwD3++KPuqR//2N16yy3urW/540m7U5VAHbaVdmPDGYUt91v4ojY5zTmqtFQ9o2BQbXa+xS69o5PandbYTk7+Mxn7c8f5EEAAAQQQQGDmBQhoZv4ZcAcIIIAAAk0moC/VWn4mzcYtO9y1a1eXNpg1HdJoLkr3gvbJeS2qQlFQUzQoUcXNkrM66pr34tuoRi0sGhwad2fbIOHBYdsW3Fqs6l3VWqL8vVVrd0oPGe6zXa3qXcO25fZF5y9OqmRkplaxssIZVcRoZzANANZnSjNn/Jbu1d6HHxys1+ozqF2e1n5iq/vhd+5i/ky9HwBejwACCCCAwCwSIKCZRQ+LW0UAAQQQKF9AlQ1XW4uThgiXuRTSjIxZS5MFC9mWnqLzYvzrKs1rqfV+zlt8qv1Hw4MrbZNd7RxFA5hKO1FNZ96N7kuVO2phUiijf7rOsLWRzbfQqtGVM3lbZyvou9KqYIq0ymn+zObtO5NARsGOBgWXUcFV6zPB3xFAAAEEEECgcQIENI2z5cwIIIAAAmeAgL4o3//wHufbTTQrZMW7et4wI6QRb3XCZrWo3UmVLNmleTFdVlmTF75UGgRc9B7TLUkKNhZ0tuVep9r5ioZI/hzZ+TaVdmoq+h7ywh21aJ23pLPoKab1OrUkaY5ROlTJts4VuUDePJoix/EaBBBAAAEEEJh9AgQ0s++ZcccIIIAAAiUKbLMdnXreusyteHePUwWE3+5Yt5CeEdKoW6oW0qhCRdtDp4f61hoEXOs+84ONedbm1Flo56W8eTO1run/7ituVD2kCpfQyp9K4YxmzrTY7JlGL4V6d31t95R2JgUtGjatSiy2yW70E+D8CCCAAAIIzE4BAprZ+dy4awQQQACBkgRU9aAWE7U63X7z+mQOjaojfNtJtcGvsW5RIY12XjoxPP6GU6YrTdrb5llLVOsbWqKK3ofCHVXmDAyN2cyZqdcqMgvGByNDtmV4yLwY3aeGAeseNAy56Jyd9Pvz9zAweNpL51u0sL2UcEb3os+Mgrxs9YwGTatViYUAAggggAACCOQJENDwuUAAAQQQQKCKgFqaXrTqhw3r1ky+KtlRx3bkudN2d/KDXMtAPGrbUueFNAogkvkqtjW25tXUu3zVy/z26uGO382ptUUDd6duB15k3kyt+0rv1KRByF02EFnzb9RmVWQprFpqM2fSx3ibIsfHeo2vuvI7LmkXp89bJRbVM7GEOQ8CCCCAAAJnpgABzZn5XHlXCCCAAAINFFBAo2BGlRJlV0VoJ6V+q6bxy896UYWNqkTq3W0pZBBvdr7MdIcRV6rO8dVBqsjRez55svJDVRCjCiCFWKNWfaPVbR66t7KXWpy233mv+5jt/PXiwUPJTk677tjkei5eVvatcD0EEEAAAQQQmEUCBDSz6GFxqwgggAACzSHgAxq/HfI7rJ1FLS3pKptG3qlCmhPWhnSOVYuMjCm8GHPj1gbldy3STkVFWoy0hbdCHYU72ZamWvfv59+M2rUUsIS0I+katQKiIjNt/IDh9G5XscMZPevePXvd220ekdrcai29/i6rsFKAp1Ynv2V7reP4OwIIIIAAAgjMXQECmrn77HnnCCCAAAKBAtmApt/m05TdvqJqkqPHR3KDlSVdNm/Fkg0ND65UdaJ2olotTdV4fLBi3U7uuKp67F+9q56dmvzw4wG7TnrL77zdomKHMwpa7rM2pausre1HT+9zK20Xr7LCuHpNeT0CCCCAAAIIzF4BAprZ++y4cwQQQACBGRJQQKOKmcesouLLt21091gLiyokyv7SrqBC81byVnqei6pr/IoxyDc9b+bE8Fiyk5RWtUAoe4++6qWenZrSrVBqeeqylibNqklX7yy24EnnjrXUrrR5+84ps4a0G9PNNuxXQQ0LAQQQQAABBBCIJUBAE0uS8yCAAAIIzBkBDYHVVsk+kFE7i6poFNRodycNEE7v4NNIGLUmKRjJW9nqkum0NPnzV5o3k1fJUul91/Pa7Dl8y5Pf6emQDUX2VUIKivQeYy3t3LX6oze5HZ/dOKWtSQGNtlhPb7ke65qcBwEEEEAAAQTmrgABzdx99rxzBBBAAIGIAqqqUUXFlRbOaJU5c2TYhuiqiiSvnclXqmhWzXS24C4yC0ahidqLFBiN2I5SeatSZU/RR6H78BU77W0tTi1PquI51+bx6OeYS61NCt8UxvilipqNt+wovaUt5vviXAgggAACCCDQnAIENM35XLgrBBBAAIFZJKBKi6utqkJzaLT0pf5J+yJ/2fuWJ5U2ZSwN601Xk/hrqi3ovCWdyY+Hjw1P7nBUzz3V0xZVaa5MpZ2a6rkPPwRZ225r5o0/p/63xf7FXqqeue3m9VOqZxTEXb5qeW6FlJ9PE/s+OB8CCCCAAAIIzA0BApq58Zx5lwgggAACDRbQl3kFNH6grCpoFNRoO+6yqmnGxifc4b6RZEcnLbX7aE7LCWuDGrEqm6VWZaLZLfq56PKBSz3bdyswWWLtRuMTE8mMHA0s1o5T9Zwje395uz2d+l2Ha2uNWznjr51tZVJrm1rY9EyzS+1td1rFjdqeVHFT1jMv+hx5HQIIIIAAAgg0vwABTfM/I+4QAQQQQGAWCGzetjPZUvlFC2V22OBgLYU1qqrI+0LfqLfkQxq1Gy3obLPAZngysPEhh4YLp3dCqnQvlebNFL133840zwKaotfMO/dMhDP++WkQ9Ibr1rje/9o7+Syz4cu+/Qfcuhu3uV13bHKqptp+572lziEq+jx4HQIIIIAAAgg0twABTXM/H+4OAQQQQGCWCKhaRlU0m2x3Hz8gWF/W3/uRDe7nT+wq/V2oSuaYbcOdnUuTF3bk3dx0t+HWOf38G/13Pbs1pe/H3+/A4OnKn0ZXzqSvr5kz9z+8Jwnf9Fyz4Yyeu9qePmBtT9rZSUvP/etWUXOtvb6sFrfSP2BcEAEEEEAAAQSiCxDQRCflhAgggAACc1XAtzf5tia1w3xqyw736Ouzacp0USXNkf5RmznzxmG9fpbLsM2t6cts013PvJlq7ye9U1Nrq7U8ndVRdxWN2qvUlqU2Kc2d0Wq3dqazu9sb1tZU6xkpkFFY44MXH8aoUkqL9qZagvwdAQQQQAABBCoJENDw2UAAAQQQQCCigEKau616QoNk9WV+0w3XuJ6Ll7nHvr/XvXjwkLvMfl/WfJIJm0WjmTSVQprFZ7Un71wBiCptQubNZOkU/ui8ClK0s5Sfh1PvkGC1aHUtsB2h+k8PNtY5NXOmEQOBi34EVC2jbdT1T883/Sw1h0YtUWW2tBW9b16HAAIIIIAAAs0vQEDT/M+IO0QAAQQQmGUC+uLuv7zrC7yGy/Zb24uWvsB/e+dnSgtpdM2jtu11pcHAfk6MKlQ0sya0FUnXqRXC+PCmtUXhzXDutuA6T7r6xgc8Cmw0eHimlypmfPWMWtojPuh8AAAPpUlEQVQ0b0iDgbV8m9tMtLTNtAvXRwABBBBAAIHpCxDQTN+QMyCAAAIIIFBRQBU1+lKv2TRaG63l6coPrnKX2xbcZa5qIc15iztde1tLsk33yOgbW6KK3GfR2TbpACYvDMoLZ7QTlYKkZlsaDK0AbsO6NcmtVdvlqdnunftBAAEEEEAAgeYTIKBpvmfCHSGAAAIInEEC+tKu5QMatciseGePW/GuHrfy3T2lvtP+wbFkm22/0vNmTlo7VHbXp6I319Fuc2GsuqWeLbzzjlE4M7+jdUprVPfC9qSiphmXgjcFbn6Vva16M5pwTwgggAACCCAQLkBAE27HkQgggAACCNQU0Jf2teu3JjNLtAW3BsyqJUZzaq6y3/nqi5onivQCH9LkzZtRG5EqVQ4fOz33pdZl/U5NIa1R6aqbeS3zXOfrVTx+56lmDmfSLtrpSS1smjVU1nyhWs+FvyOAAAIIIIDA7BMgoJl9z4w7RgABBBCYZQKqtLjn3x9JhgRrlx+tmdzhacR2b2qxgTB5oYqvbEnvnFSJO68dqd5Ho5DmgrPnuwlLZQ4eGZqcSzMT4YyfHaQZM36uTL3vh9cjgAACCCCAAAKhAgQ0oXIchwACCCCAQB0CmkWj5StmFNpoyOx/f+euKWfRbk+qsml0+9PQyEQyqDdv+eqa40NjydbY2aVhv2ppmmf/UW3Yby0eP1TYb6HtW6y6rKVJlTllr+3WjqbnsvuhPe72m9e7NR9eVfYtcD0EEEAAAQQQmMMCBDRz+OHz1hFAAAEEyhNQxYzmz+z47Ea3qHuh04BZtT197OrVyU2oekN/f4e1Pykk0FK1TSNbZgaHx90R2+Epb1Ua+pueW9Nn23OHrrzzN8NOTQrS/E5boe+N4xBAAAEEEEAAgRABApoQNY5BAAEEEEAgQOAemzujfxfazj8aGpxuo9EwYbXWpHcEevLpfe6rX9o0ua1zwCVrHjJq7U7avcnPfUkfkK5w0eyaenZqqnbhvPOoKufcRad2k5qppVkyG2/ZUfo26DP1frkuAggggAACCDSXAAFNcz0P7gYBBBBAYI4KqHpG4cxK293JL/1OPzd6kLBCmtf6R9y47eSUXQpOlnZ3WoBzMglP6tmpKe9R+vapgcFRd8IqeLR8EDST4YyqljTM+ZP2DK60yiYWAggggAACCCBQtgABTdniXA8BBBBAAIEcAc09UcWMHyKsl/i2p11WRdPIVidda2x8wh3uyw9pNAz4LPs3Pn6yYrVNkYeqcGapVcmkBxCfqqbpcG2t5VfOKJRR1ZKWwjBVNPnt0Iu8H16DAAIIIIAAAgjEFCCgianJuRBAAAEEECggoGDges2juW3jZPDiw5gbrIJDs2n80qwaBQd+Vk2B0we/JC+kSe/UpBkx8ztaK1bbVLuwju1a0D5l56iZDGd0r5o38yMLxeTr5874wCYYkQMRQAABBBBAAIFAAQKaQDgOQwABBBBAIFRAc2hUMaOg5ts7PzNZxaHfaRaNfucrZvRarTICGl3HhzTa9lo7NWlpkLCfUROytXbeMTMdzvhn17tnr/v06wObqZ4J/URzHAIIIIAAAgjEECCgiaHIORBAAAEEEKhDYOOWHe4226FJ2zprS+10MKCqjrstlFEljf6mnzUouNEtTunbn7BZNJpGc8K22NZw4OzKq4ap9Pbzwpl2a2c6u7t9Rtqa8u5T1UuqVLp81fLSgrA6Pi68FAEEEEAAAQTmiAABzRx50LxNBBBAAIHmEVAgoMDFtzV93LbaTlfIaDeh+x/ekwQ0+n06nPFbcJfRinPYdncaHp3IhVOr0+KzrGXJqmtGKrxG4Uy2JUrhjGbOtNjsmWZb/rk0231xPwgggAACCCAwNwQIaObGc+ZdIoAAAgg0qYBCgdUfvck98s0vJEFMenBt+pb1e1XcaFaK1uesAucyq/ho9DpqAYzfbSl7rbwdmfxrlnS1O4Ux6S28VXmz5PW2qUbfN+dHAAEEEEAAAQRmmwABzWx7YtwvAggggMAZJ6A2pvts/owqaTSHJj082L/Z9JbbmkujNqhHLdQpY/UdH3UD1u6Ut07Nkul0g8On2qH8ttzjExPu6MDo5CFd89vcIqu4aeSSUb8FWVp5ho28NudGAAEEEEAAAQSmK0BAM11BjkcAAQQQQGCaAn5XJ1XQ3PzJa3LnzfzJ+9e5nz+xa/JK7/nIhqTqpoxWJ11U4Uv/idOBS/ot+5BmaHTcdba1uKGR8Smza7oXtju1O5WxNGR533MHnLYmZyGAAAIIIIAAArNJgIBmNj0t7hUBBBBA4IwTUDizdv1Wd5Vtrb3BBgNXWqoOUVWID2R8W1SZINVCGrUznbek042OTbhXjw1P3laZ4YyvLErvjFWmD9dCAAEEEEAAAQSmI0BAMx09jkUAAQQQQCCCgCo+et62bMqZHvv+Xnf5+/JnzGhujXaCUhBR9soLadJtTq2t81xrS4t7rX/YdS0or3JGg5U33rLD7bpjk+u5eKpl2UZcDwEEEEAAAQQQCBEgoAlR4xgEEEAAAQQQQAABBBBAAAEEEEAgogABTURMToUAAggggAACCCCAAAIIIIAAAgiECBDQhKhxDAIIIIAAAggggAACCCCAAAIIIBBRgIAmIianQgABBBBAAAEEEEAAAQQQQAABBEIECGhC1DgGAQQQQAABBBBAAAEEEEAAAQQQiChAQBMRk1MhgAACCCCAAAIIIIAAAggggAACIQIENCFqHIMAAggggAACCCCAAAIIIIAAAghEFCCgiYjJqRBAAAEEEEAAAQQQQAABBBBAAIEQAQKaEDWOQQABBBBAAAEEEEAAAQQQQAABBCIKENBExORUCCCAAAIIIIAAAggggAACCCCAQIgAAU2IGscggAACCCCAAAIIIIAAAggggAACEQUIaCJicioEEEAAAQQQQAABBBBAAAEEEEAgRICAJkSNYxBAAAEEEEAAAQQQQAABBBBAAIGIAgQ0ETE5FQIIIIAAAggggAACCCCAAAIIIBAiQEATosYxCCCAAAIIIIAAAggggAACCCCAQEQBApqImJwKAQQQQAABBBBAAAEEEEAAAQQQCBEgoAlR4xgEEEAAAQQQQAABBBBAAAEEEEAgogABTURMToUAAggggAACCCCAAAIIIIAAAgiECBDQhKhxDAIIIIAAAggggAACCCCAAAIIIBBRgIAmIianQgABBBBAAAEEEEAAAQQQQAABBEIECGhC1DgGAQQQQAABBBBAAAEEEEAAAQQQiChAQBMRk1MhgAACCCCAAAIIIIAAAggggAACIQIENCFqHIMAAggggAACCCCAAAIIIIAAAghEFCCgiYjJqRBAAAEEEEAAAQQQQAABBBBAAIEQAQKaEDWOQQABBBBAAAEEEEAAAQQQQAABBCIKENBExORUCCCAAAIIIIAAAggggAACCCCAQIgAAU2IGscggAACCCCAAAIIIIAAAggggAACEQUIaCJicioEEEAAAQQQQAABBBBAAAEEEEAgRICAJkSNYxBAAAEEEEAAAQQQQAABBBBAAIGIAgQ0ETE5FQIIIIAAAggggAACCCCAAAIIIBAiQEATosYxCCCAAAIIIIAAAggggAACCCCAQEQBApqImJwKAQQQQAABBBBAAAEEEEAAAQQQCBEgoAlR4xgEEEAAAQQQQAABBBBAAAEEEEAgogABTURMToUAAggggAACCCCAAAIIIIAAAgiECBDQhKhxDAIIIIAAAggggAACCCCAAAIIIBBRgIAmIianQgABBBBAAAEEEEAAAQQQQAABBEIECGhC1DgGAQQQQAABBBBAAAEEEEAAAQQQiChAQBMRk1MhgAACCCCAAAIIIIAAAggggAACIQIENCFqHIMAAggggAACCCCAAAIIIIAAAghEFCCgiYjJqRBAAAEEEEAAAQQQQAABBBBAAIEQAQKaEDWOQQABBBBAAAEEEEAAAQQQQAABBCIKENBExORUCCCAAAIIIIAAAggggAACCCCAQIgAAU2IGscggAACCCCAAAIIIIAAAggggAACEQUIaCJicioEEEAAAQQQQAABBBBAAAEEEEAgRICAJkSNYxBAAAEEEEAAAQQQQAABBBBAAIGIAgQ0ETE5FQIIIIAAAggggAACCCCAAAIIIBAiQEATosYxCCCAAAIIIIAAAggggAACCCCAQEQBApqImJwKAQQQQAABBBBAAAEEEEAAAQQQCBEgoAlR4xgEEEAAAQQQQAABBBBAAAEEEEAgogABTURMToUAAggggAACCCCAAAIIIIAAAgiECBDQhKhxDAIIIIAAAggggAACCCCAAAIIIBBRgIAmIianQgABBBBAAAEEEEAAAQQQQAABBEIECGhC1DgGAQQQQAABBBBAAAEEEEAAAQQQiChAQBMRk1MhgAACCCCAAAIIIIAAAggggAACIQIENCFqHIMAAggggAACCCCAAAIIIIAAAghEFCCgiYjJqRBAAAEEEEAAAQQQQAABBBBAAIEQAQKaEDWOQQABBBBAAAEEEEAAAQQQQAABBCIKENBExORUCCCAAAIIIIAAAggggAACCCCAQIgAAU2IGscggAACCCCAAAIIIIAAAggggAACEQUIaCJicioEEEAAAQQQQAABBBBAAAEEEEAgRICAJkSNYxBAAAEEEEAAAQQQQAABBBBAAIGIAgQ0ETE5FQIIIIAAAggggAACCCCAAAIIIBAiQEATosYxCCCAAAIIIIAAAggggAACCCCAQEQBApqImJwKAQQQQAABBBBAAAEEEEAAAQQQCBEgoAlR4xgEEEAAAQQQQAABBBBAAAEEEEAgogABTURMToUAAggggAACCCCAAAIIIIAAAgiECBDQhKhxDAIIIIAAAggggAACCCCAAAIIIBBRgIAmIianQgABBBBAAAEEEEAAAQQQQAABBEIECGhC1DgGAQQQQAABBBBAAAEEEEAAAQQQiChAQBMRk1MhgAACCCCAAAIIIIAAAggggAACIQIENCFqHIMAAggggAACCCCAAAIIIIAAAghEFCCgiYjJqRBAAAEEEEAAAQQQQAABBBBAAIEQAQKaEDWOQQABBBBAAAEEEEAAAQQQQAABBCIKENBExORUCCCAAAIIIIAAAggggAACCCCAQIgAAU2IGscggAACCCCAAAIIIIAAAggggAACEQUIaCJicioEEEAAAQQQQAABBBBAAAEEEEAgRICAJkSNYxBAAAEEEEAAAQQQQAABBBBAAIGIAgQ0ETE5FQIIIIAAAggggAACCCCAAAIIIBAiQEATosYxCCCAAAIIIIAAAggggAACCCCAQEQBApqImJwKAQQQQAABBBBAAAEEEEAAAQQQCBH4f7Qu3dQQjEGQAAAAAElFTkSuQmCC\",\n      \"text/html\": [\n       \"<div>                            <div id=\\\"10e6d9be-ac39-4456-b54e-33be886804fc\\\" class=\\\"plotly-graph-div\\\" style=\\\"height:525px; width:100%;\\\"></div>            <script type=\\\"text/javascript\\\">                require([\\\"plotly\\\"], function(Plotly) {                    window.PLOTLYENV=window.PLOTLYENV || {};                                    if (document.getElementById(\\\"10e6d9be-ac39-4456-b54e-33be886804fc\\\")) {                    Plotly.newPlot(                        \\\"10e6d9be-ac39-4456-b54e-33be886804fc\\\",                        [{\\\"line\\\":{\\\"color\\\":\\\"grey\\\"},\\\"mode\\\":\\\"lines\\\",\\\"name\\\":\\\"Aero surface\\\",\\\"surfaceaxis\\\":2,\\\"x\\\":[-0.4375000000000001,-0.18750000000000006,-0.18750000000000006,-0.4375000000000001,-0.4375000000000001],\\\"y\\\":[-7.126160546901204e-18,-3.054068805814802e-18,0.8,0.8,-7.126160546901204e-18],\\\"z\\\":[-3.7885577460302824e-17,-1.6236676054415498e-17,-1.6236676054415498e-17,-3.7885577460302824e-17,-3.7885577460302824e-17],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"grey\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[-0.4375000000000001,-0.18750000000000006,-0.18750000000000006,-0.4375000000000001,-0.4375000000000001],\\\"y\\\":[0.8,0.8,1.6,1.6,0.8],\\\"z\\\":[-3.7885577460302824e-17,-1.6236676054415498e-17,-1.6236676054415498e-17,-3.7885577460302824e-17,-3.7885577460302824e-17],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"grey\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[-0.4375000000000001,-0.18750000000000006,-0.18750000000000006,-0.4375000000000001,-0.4375000000000001],\\\"y\\\":[1.6,1.6,2.4000000000000004,2.4000000000000004,1.6],\\\"z\\\":[-3.7885577460302824e-17,-1.6236676054415498e-17,-1.6236676054415498e-17,-3.7885577460302824e-17,-3.7885577460302824e-17],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"grey\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[-0.4375000000000001,-0.18750000000000006,-0.18750000000000006,-0.4375000000000001,-0.4375000000000001],\\\"y\\\":[2.4000000000000004,2.4000000000000004,3.2,3.2,2.4000000000000004],\\\"z\\\":[-3.7885577460302824e-17,-1.6236676054415498e-17,-1.6236676054415498e-17,-3.7885577460302824e-17,-3.7885577460302824e-17],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"grey\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[-0.4375000000000001,-0.18750000000000006,-0.18750000000000006,-0.4375000000000001,-0.4375000000000001],\\\"y\\\":[3.2,3.2,4.0,4.0,3.2],\\\"z\\\":[-3.7885577460302824e-17,-1.6236676054415498e-17,-1.6236676054415498e-17,-3.7885577460302824e-17,-3.7885577460302824e-17],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"grey\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[-0.4375000000000001,-0.18750000000000006,-0.18750000000000006,-0.4375000000000001,-0.4375000000000001],\\\"y\\\":[4.0,4.0,4.800000000000001,4.800000000000001,4.0],\\\"z\\\":[-3.7885577460302824e-17,-1.6236676054415498e-17,-1.6236676054415498e-17,-3.7885577460302824e-17,-3.7885577460302824e-17],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"grey\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[-0.4375000000000001,-0.18750000000000006,-0.18750000000000006,-0.4375000000000001,-0.4375000000000001],\\\"y\\\":[4.800000000000001,4.800000000000001,5.6000000000000005,5.6000000000000005,4.800000000000001],\\\"z\\\":[-3.7885577460302824e-17,-1.6236676054415498e-17,-1.6236676054415498e-17,-3.7885577460302824e-17,-3.7885577460302824e-17],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"grey\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[-0.4375000000000001,-0.18750000000000006,-0.18750000000000006,-0.4375000000000001,-0.4375000000000001],\\\"y\\\":[5.6000000000000005,5.6000000000000005,6.4,6.4,5.6000000000000005],\\\"z\\\":[-3.7885577460302824e-17,-1.6236676054415498e-17,-1.6236676054415498e-17,-3.7885577460302824e-17,-3.7885577460302824e-17],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"grey\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[-0.4375000000000001,-0.18750000000000006,-0.18750000000000006,-0.4375000000000001,-0.4375000000000001],\\\"y\\\":[6.4,6.4,7.2,7.2,6.4],\\\"z\\\":[-3.7885577460302824e-17,-1.6236676054415498e-17,-1.6236676054415498e-17,-3.7885577460302824e-17,-3.7885577460302824e-17],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"grey\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[-0.4375000000000001,-0.18750000000000006,-0.18750000000000006,-0.4375000000000001,-0.4375000000000001],\\\"y\\\":[7.2,7.2,8.0,8.0,7.2],\\\"z\\\":[-3.7885577460302824e-17,-1.6236676054415498e-17,-1.6236676054415498e-17,-3.7885577460302824e-17,-3.7885577460302824e-17],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"grey\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[-0.4375000000000001,-0.18750000000000006,-0.18750000000000006,-0.4375000000000001,-0.4375000000000001],\\\"y\\\":[8.0,8.0,8.8,8.8,8.0],\\\"z\\\":[-3.7885577460302824e-17,-1.6236676054415498e-17,-1.6236676054415498e-17,-3.7885577460302824e-17,-3.7885577460302824e-17],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"grey\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[-0.4375000000000001,-0.18750000000000006,-0.18750000000000006,-0.4375000000000001,-0.4375000000000001],\\\"y\\\":[8.8,8.8,9.600000000000001,9.600000000000001,8.8],\\\"z\\\":[-3.7885577460302824e-17,-1.6236676054415498e-17,-1.6236676054415498e-17,-3.7885577460302824e-17,-3.7885577460302824e-17],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"grey\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[-0.4375000000000001,-0.18750000000000006,-0.18750000000000006,-0.4375000000000001,-0.4375000000000001],\\\"y\\\":[9.600000000000001,9.600000000000001,10.4,10.4,9.600000000000001],\\\"z\\\":[-3.7885577460302824e-17,-1.6236676054415498e-17,-1.6236676054415498e-17,-3.7885577460302824e-17,-3.7885577460302824e-17],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"grey\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[-0.4375000000000001,-0.18750000000000006,-0.18750000000000006,-0.4375000000000001,-0.4375000000000001],\\\"y\\\":[10.4,10.4,11.200000000000001,11.200000000000001,10.4],\\\"z\\\":[-3.7885577460302824e-17,-1.6236676054415498e-17,-1.6236676054415498e-17,-3.7885577460302824e-17,-3.7885577460302824e-17],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"grey\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[-0.4375000000000001,-0.18750000000000006,-0.18750000000000006,-0.4375000000000001,-0.4375000000000001],\\\"y\\\":[11.200000000000001,11.200000000000001,12.0,12.0,11.200000000000001],\\\"z\\\":[-3.7885577460302824e-17,-1.6236676054415498e-17,-1.6236676054415498e-17,-3.7885577460302824e-17,-3.7885577460302824e-17],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"grey\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[-0.4375000000000001,-0.18750000000000006,-0.18750000000000006,-0.4375000000000001,-0.4375000000000001],\\\"y\\\":[12.0,12.0,12.8,12.8,12.0],\\\"z\\\":[-3.7885577460302824e-17,-1.6236676054415498e-17,-1.6236676054415498e-17,-3.7885577460302824e-17,-3.7885577460302824e-17],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"grey\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[-0.4375000000000001,-0.18750000000000006,-0.18750000000000006,-0.4375000000000001,-0.4375000000000001],\\\"y\\\":[12.8,12.8,13.600000000000001,13.600000000000001,12.8],\\\"z\\\":[-3.7885577460302824e-17,-1.6236676054415498e-17,-1.6236676054415498e-17,-3.7885577460302824e-17,-3.7885577460302824e-17],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"grey\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[-0.4375000000000001,-0.18750000000000006,-0.18750000000000006,-0.4375000000000001,-0.4375000000000001],\\\"y\\\":[13.600000000000001,13.600000000000001,14.4,14.4,13.600000000000001],\\\"z\\\":[-3.7885577460302824e-17,-1.6236676054415498e-17,-1.6236676054415498e-17,-3.7885577460302824e-17,-3.7885577460302824e-17],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"grey\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[-0.4375000000000001,-0.18750000000000006,-0.18750000000000006,-0.4375000000000001,-0.4375000000000001],\\\"y\\\":[14.4,14.4,15.200000000000001,15.200000000000001,14.4],\\\"z\\\":[-3.7885577460302824e-17,-1.6236676054415498e-17,-1.6236676054415498e-17,-3.7885577460302824e-17,-3.7885577460302824e-17],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"grey\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[-0.4375000000000001,-0.18750000000000006,-0.18750000000000006,-0.4375000000000001,-0.4375000000000001],\\\"y\\\":[15.200000000000001,15.200000000000001,16.0,16.0,15.200000000000001],\\\"z\\\":[-3.7885577460302824e-17,-1.6236676054415498e-17,-1.6236676054415498e-17,-3.7885577460302824e-17,-3.7885577460302824e-17],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"grey\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[-0.18750000000000006,0.06250000000000001,0.06250000000000001,-0.18750000000000006,-0.18750000000000006],\\\"y\\\":[-3.054068805814802e-18,1.0180229352716006e-18,0.8,0.8,-3.054068805814802e-18],\\\"z\\\":[-1.6236676054415498e-17,5.412225351471832e-18,5.412225351471832e-18,-1.6236676054415498e-17,-1.6236676054415498e-17],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"grey\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[-0.18750000000000006,0.06250000000000001,0.06250000000000001,-0.18750000000000006,-0.18750000000000006],\\\"y\\\":[0.8,0.8,1.6,1.6,0.8],\\\"z\\\":[-1.6236676054415498e-17,5.412225351471832e-18,5.412225351471832e-18,-1.6236676054415498e-17,-1.6236676054415498e-17],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"grey\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[-0.18750000000000006,0.06250000000000001,0.06250000000000001,-0.18750000000000006,-0.18750000000000006],\\\"y\\\":[1.6,1.6,2.4000000000000004,2.4000000000000004,1.6],\\\"z\\\":[-1.6236676054415498e-17,5.412225351471832e-18,5.412225351471832e-18,-1.6236676054415498e-17,-1.6236676054415498e-17],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"grey\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[-0.18750000000000006,0.06250000000000001,0.06250000000000001,-0.18750000000000006,-0.18750000000000006],\\\"y\\\":[2.4000000000000004,2.4000000000000004,3.2,3.2,2.4000000000000004],\\\"z\\\":[-1.6236676054415498e-17,5.412225351471832e-18,5.412225351471832e-18,-1.6236676054415498e-17,-1.6236676054415498e-17],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"grey\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[-0.18750000000000006,0.06250000000000001,0.06250000000000001,-0.18750000000000006,-0.18750000000000006],\\\"y\\\":[3.2,3.2,4.0,4.0,3.2],\\\"z\\\":[-1.6236676054415498e-17,5.412225351471832e-18,5.412225351471832e-18,-1.6236676054415498e-17,-1.6236676054415498e-17],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"grey\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[-0.18750000000000006,0.06250000000000001,0.06250000000000001,-0.18750000000000006,-0.18750000000000006],\\\"y\\\":[4.0,4.0,4.800000000000001,4.800000000000001,4.0],\\\"z\\\":[-1.6236676054415498e-17,5.412225351471832e-18,5.412225351471832e-18,-1.6236676054415498e-17,-1.6236676054415498e-17],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"grey\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[-0.18750000000000006,0.06250000000000001,0.06250000000000001,-0.18750000000000006,-0.18750000000000006],\\\"y\\\":[4.800000000000001,4.800000000000001,5.6000000000000005,5.6000000000000005,4.800000000000001],\\\"z\\\":[-1.6236676054415498e-17,5.412225351471832e-18,5.412225351471832e-18,-1.6236676054415498e-17,-1.6236676054415498e-17],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"grey\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[-0.18750000000000006,0.06250000000000001,0.06250000000000001,-0.18750000000000006,-0.18750000000000006],\\\"y\\\":[5.6000000000000005,5.6000000000000005,6.4,6.4,5.6000000000000005],\\\"z\\\":[-1.6236676054415498e-17,5.412225351471832e-18,5.412225351471832e-18,-1.6236676054415498e-17,-1.6236676054415498e-17],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"grey\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[-0.18750000000000006,0.06250000000000001,0.06250000000000001,-0.18750000000000006,-0.18750000000000006],\\\"y\\\":[6.4,6.4,7.2,7.2,6.4],\\\"z\\\":[-1.6236676054415498e-17,5.412225351471832e-18,5.412225351471832e-18,-1.6236676054415498e-17,-1.6236676054415498e-17],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"grey\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[-0.18750000000000006,0.06250000000000001,0.06250000000000001,-0.18750000000000006,-0.18750000000000006],\\\"y\\\":[7.2,7.2,8.0,8.0,7.2],\\\"z\\\":[-1.6236676054415498e-17,5.412225351471832e-18,5.412225351471832e-18,-1.6236676054415498e-17,-1.6236676054415498e-17],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"grey\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[-0.18750000000000006,0.06250000000000001,0.06250000000000001,-0.18750000000000006,-0.18750000000000006],\\\"y\\\":[8.0,8.0,8.8,8.8,8.0],\\\"z\\\":[-1.6236676054415498e-17,5.412225351471832e-18,5.412225351471832e-18,-1.6236676054415498e-17,-1.6236676054415498e-17],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"grey\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[-0.18750000000000006,0.06250000000000001,0.06250000000000001,-0.18750000000000006,-0.18750000000000006],\\\"y\\\":[8.8,8.8,9.600000000000001,9.600000000000001,8.8],\\\"z\\\":[-1.6236676054415498e-17,5.412225351471832e-18,5.412225351471832e-18,-1.6236676054415498e-17,-1.6236676054415498e-17],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"grey\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[-0.18750000000000006,0.06250000000000001,0.06250000000000001,-0.18750000000000006,-0.18750000000000006],\\\"y\\\":[9.600000000000001,9.600000000000001,10.4,10.4,9.600000000000001],\\\"z\\\":[-1.6236676054415498e-17,5.412225351471832e-18,5.412225351471832e-18,-1.6236676054415498e-17,-1.6236676054415498e-17],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"grey\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[-0.18750000000000006,0.06250000000000001,0.06250000000000001,-0.18750000000000006,-0.18750000000000006],\\\"y\\\":[10.4,10.4,11.200000000000001,11.200000000000001,10.4],\\\"z\\\":[-1.6236676054415498e-17,5.412225351471832e-18,5.412225351471832e-18,-1.6236676054415498e-17,-1.6236676054415498e-17],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"grey\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[-0.18750000000000006,0.06250000000000001,0.06250000000000001,-0.18750000000000006,-0.18750000000000006],\\\"y\\\":[11.200000000000001,11.200000000000001,12.0,12.0,11.200000000000001],\\\"z\\\":[-1.6236676054415498e-17,5.412225351471832e-18,5.412225351471832e-18,-1.6236676054415498e-17,-1.6236676054415498e-17],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"grey\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[-0.18750000000000006,0.06250000000000001,0.06250000000000001,-0.18750000000000006,-0.18750000000000006],\\\"y\\\":[12.0,12.0,12.8,12.8,12.0],\\\"z\\\":[-1.6236676054415498e-17,5.412225351471832e-18,5.412225351471832e-18,-1.6236676054415498e-17,-1.6236676054415498e-17],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"grey\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[-0.18750000000000006,0.06250000000000001,0.06250000000000001,-0.18750000000000006,-0.18750000000000006],\\\"y\\\":[12.8,12.8,13.600000000000001,13.600000000000001,12.8],\\\"z\\\":[-1.6236676054415498e-17,5.412225351471832e-18,5.412225351471832e-18,-1.6236676054415498e-17,-1.6236676054415498e-17],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"grey\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[-0.18750000000000006,0.06250000000000001,0.06250000000000001,-0.18750000000000006,-0.18750000000000006],\\\"y\\\":[13.600000000000001,13.600000000000001,14.4,14.4,13.600000000000001],\\\"z\\\":[-1.6236676054415498e-17,5.412225351471832e-18,5.412225351471832e-18,-1.6236676054415498e-17,-1.6236676054415498e-17],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"grey\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[-0.18750000000000006,0.06250000000000001,0.06250000000000001,-0.18750000000000006,-0.18750000000000006],\\\"y\\\":[14.4,14.4,15.200000000000001,15.200000000000001,14.4],\\\"z\\\":[-1.6236676054415498e-17,5.412225351471832e-18,5.412225351471832e-18,-1.6236676054415498e-17,-1.6236676054415498e-17],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"grey\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[-0.18750000000000006,0.06250000000000001,0.06250000000000001,-0.18750000000000006,-0.18750000000000006],\\\"y\\\":[15.200000000000001,15.200000000000001,16.0,16.0,15.200000000000001],\\\"z\\\":[-1.6236676054415498e-17,5.412225351471832e-18,5.412225351471832e-18,-1.6236676054415498e-17,-1.6236676054415498e-17],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"grey\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[0.06250000000000001,0.31250000000000006,0.31250000000000006,0.06250000000000001,0.06250000000000001],\\\"y\\\":[1.0180229352716006e-18,5.090114676358003e-18,0.8,0.8,1.0180229352716006e-18],\\\"z\\\":[5.412225351471832e-18,2.706112675735916e-17,2.706112675735916e-17,5.412225351471832e-18,5.412225351471832e-18],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"grey\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[0.06250000000000001,0.31250000000000006,0.31250000000000006,0.06250000000000001,0.06250000000000001],\\\"y\\\":[0.8,0.8,1.6,1.6,0.8],\\\"z\\\":[5.412225351471832e-18,2.706112675735916e-17,2.706112675735916e-17,5.412225351471832e-18,5.412225351471832e-18],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"grey\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[0.06250000000000001,0.31250000000000006,0.31250000000000006,0.06250000000000001,0.06250000000000001],\\\"y\\\":[1.6,1.6,2.4000000000000004,2.4000000000000004,1.6],\\\"z\\\":[5.412225351471832e-18,2.706112675735916e-17,2.706112675735916e-17,5.412225351471832e-18,5.412225351471832e-18],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"grey\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[0.06250000000000001,0.31250000000000006,0.31250000000000006,0.06250000000000001,0.06250000000000001],\\\"y\\\":[2.4000000000000004,2.4000000000000004,3.2,3.2,2.4000000000000004],\\\"z\\\":[5.412225351471832e-18,2.706112675735916e-17,2.706112675735916e-17,5.412225351471832e-18,5.412225351471832e-18],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"grey\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[0.06250000000000001,0.31250000000000006,0.31250000000000006,0.06250000000000001,0.06250000000000001],\\\"y\\\":[3.2,3.2,4.0,4.0,3.2],\\\"z\\\":[5.412225351471832e-18,2.706112675735916e-17,2.706112675735916e-17,5.412225351471832e-18,5.412225351471832e-18],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"grey\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[0.06250000000000001,0.31250000000000006,0.31250000000000006,0.06250000000000001,0.06250000000000001],\\\"y\\\":[4.0,4.0,4.800000000000001,4.800000000000001,4.0],\\\"z\\\":[5.412225351471832e-18,2.706112675735916e-17,2.706112675735916e-17,5.412225351471832e-18,5.412225351471832e-18],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"grey\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[0.06250000000000001,0.31250000000000006,0.31250000000000006,0.06250000000000001,0.06250000000000001],\\\"y\\\":[4.800000000000001,4.800000000000001,5.6000000000000005,5.6000000000000005,4.800000000000001],\\\"z\\\":[5.412225351471832e-18,2.706112675735916e-17,2.706112675735916e-17,5.412225351471832e-18,5.412225351471832e-18],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"grey\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[0.06250000000000001,0.31250000000000006,0.31250000000000006,0.06250000000000001,0.06250000000000001],\\\"y\\\":[5.6000000000000005,5.6000000000000005,6.4,6.4,5.6000000000000005],\\\"z\\\":[5.412225351471832e-18,2.706112675735916e-17,2.706112675735916e-17,5.412225351471832e-18,5.412225351471832e-18],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"grey\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[0.06250000000000001,0.31250000000000006,0.31250000000000006,0.06250000000000001,0.06250000000000001],\\\"y\\\":[6.4,6.4,7.2,7.2,6.4],\\\"z\\\":[5.412225351471832e-18,2.706112675735916e-17,2.706112675735916e-17,5.412225351471832e-18,5.412225351471832e-18],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"grey\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[0.06250000000000001,0.31250000000000006,0.31250000000000006,0.06250000000000001,0.06250000000000001],\\\"y\\\":[7.2,7.2,8.0,8.0,7.2],\\\"z\\\":[5.412225351471832e-18,2.706112675735916e-17,2.706112675735916e-17,5.412225351471832e-18,5.412225351471832e-18],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"grey\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[0.06250000000000001,0.31250000000000006,0.31250000000000006,0.06250000000000001,0.06250000000000001],\\\"y\\\":[8.0,8.0,8.8,8.8,8.0],\\\"z\\\":[5.412225351471832e-18,2.706112675735916e-17,2.706112675735916e-17,5.412225351471832e-18,5.412225351471832e-18],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"grey\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[0.06250000000000001,0.31250000000000006,0.31250000000000006,0.06250000000000001,0.06250000000000001],\\\"y\\\":[8.8,8.8,9.600000000000001,9.600000000000001,8.8],\\\"z\\\":[5.412225351471832e-18,2.706112675735916e-17,2.706112675735916e-17,5.412225351471832e-18,5.412225351471832e-18],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"grey\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[0.06250000000000001,0.31250000000000006,0.31250000000000006,0.06250000000000001,0.06250000000000001],\\\"y\\\":[9.600000000000001,9.600000000000001,10.4,10.4,9.600000000000001],\\\"z\\\":[5.412225351471832e-18,2.706112675735916e-17,2.706112675735916e-17,5.412225351471832e-18,5.412225351471832e-18],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"grey\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[0.06250000000000001,0.31250000000000006,0.31250000000000006,0.06250000000000001,0.06250000000000001],\\\"y\\\":[10.4,10.4,11.200000000000001,11.200000000000001,10.4],\\\"z\\\":[5.412225351471832e-18,2.706112675735916e-17,2.706112675735916e-17,5.412225351471832e-18,5.412225351471832e-18],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"grey\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[0.06250000000000001,0.31250000000000006,0.31250000000000006,0.06250000000000001,0.06250000000000001],\\\"y\\\":[11.200000000000001,11.200000000000001,12.0,12.0,11.200000000000001],\\\"z\\\":[5.412225351471832e-18,2.706112675735916e-17,2.706112675735916e-17,5.412225351471832e-18,5.412225351471832e-18],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"grey\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[0.06250000000000001,0.31250000000000006,0.31250000000000006,0.06250000000000001,0.06250000000000001],\\\"y\\\":[12.0,12.0,12.8,12.8,12.0],\\\"z\\\":[5.412225351471832e-18,2.706112675735916e-17,2.706112675735916e-17,5.412225351471832e-18,5.412225351471832e-18],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"grey\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[0.06250000000000001,0.31250000000000006,0.31250000000000006,0.06250000000000001,0.06250000000000001],\\\"y\\\":[12.8,12.8,13.600000000000001,13.600000000000001,12.8],\\\"z\\\":[5.412225351471832e-18,2.706112675735916e-17,2.706112675735916e-17,5.412225351471832e-18,5.412225351471832e-18],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"grey\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[0.06250000000000001,0.31250000000000006,0.31250000000000006,0.06250000000000001,0.06250000000000001],\\\"y\\\":[13.600000000000001,13.600000000000001,14.4,14.4,13.600000000000001],\\\"z\\\":[5.412225351471832e-18,2.706112675735916e-17,2.706112675735916e-17,5.412225351471832e-18,5.412225351471832e-18],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"grey\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[0.06250000000000001,0.31250000000000006,0.31250000000000006,0.06250000000000001,0.06250000000000001],\\\"y\\\":[14.4,14.4,15.200000000000001,15.200000000000001,14.4],\\\"z\\\":[5.412225351471832e-18,2.706112675735916e-17,2.706112675735916e-17,5.412225351471832e-18,5.412225351471832e-18],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"grey\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[0.06250000000000001,0.31250000000000006,0.31250000000000006,0.06250000000000001,0.06250000000000001],\\\"y\\\":[15.200000000000001,15.200000000000001,16.0,16.0,15.200000000000001],\\\"z\\\":[5.412225351471832e-18,2.706112675735916e-17,2.706112675735916e-17,5.412225351471832e-18,5.412225351471832e-18],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"grey\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[0.31250000000000006,0.5625000000000001,0.5625000000000001,0.31250000000000006,0.31250000000000006],\\\"y\\\":[5.090114676358003e-18,9.162206417444405e-18,0.8,0.8,5.090114676358003e-18],\\\"z\\\":[2.706112675735916e-17,4.871002816324649e-17,4.871002816324649e-17,2.706112675735916e-17,2.706112675735916e-17],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"grey\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[0.31250000000000006,0.5625000000000001,0.5625000000000001,0.31250000000000006,0.31250000000000006],\\\"y\\\":[0.8,0.8,1.6,1.6,0.8],\\\"z\\\":[2.706112675735916e-17,4.871002816324649e-17,4.871002816324649e-17,2.706112675735916e-17,2.706112675735916e-17],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"grey\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[0.31250000000000006,0.5625000000000001,0.5625000000000001,0.31250000000000006,0.31250000000000006],\\\"y\\\":[1.6,1.6,2.4000000000000004,2.4000000000000004,1.6],\\\"z\\\":[2.706112675735916e-17,4.871002816324649e-17,4.871002816324649e-17,2.706112675735916e-17,2.706112675735916e-17],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"grey\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[0.31250000000000006,0.5625000000000001,0.5625000000000001,0.31250000000000006,0.31250000000000006],\\\"y\\\":[2.4000000000000004,2.4000000000000004,3.2,3.2,2.4000000000000004],\\\"z\\\":[2.706112675735916e-17,4.871002816324649e-17,4.871002816324649e-17,2.706112675735916e-17,2.706112675735916e-17],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"grey\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[0.31250000000000006,0.5625000000000001,0.5625000000000001,0.31250000000000006,0.31250000000000006],\\\"y\\\":[3.2,3.2,4.0,4.0,3.2],\\\"z\\\":[2.706112675735916e-17,4.871002816324649e-17,4.871002816324649e-17,2.706112675735916e-17,2.706112675735916e-17],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"grey\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[0.31250000000000006,0.5625000000000001,0.5625000000000001,0.31250000000000006,0.31250000000000006],\\\"y\\\":[4.0,4.0,4.800000000000001,4.800000000000001,4.0],\\\"z\\\":[2.706112675735916e-17,4.871002816324649e-17,4.871002816324649e-17,2.706112675735916e-17,2.706112675735916e-17],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"grey\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[0.31250000000000006,0.5625000000000001,0.5625000000000001,0.31250000000000006,0.31250000000000006],\\\"y\\\":[4.800000000000001,4.800000000000001,5.6000000000000005,5.6000000000000005,4.800000000000001],\\\"z\\\":[2.706112675735916e-17,4.871002816324649e-17,4.871002816324649e-17,2.706112675735916e-17,2.706112675735916e-17],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"grey\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[0.31250000000000006,0.5625000000000001,0.5625000000000001,0.31250000000000006,0.31250000000000006],\\\"y\\\":[5.6000000000000005,5.6000000000000005,6.4,6.4,5.6000000000000005],\\\"z\\\":[2.706112675735916e-17,4.871002816324649e-17,4.871002816324649e-17,2.706112675735916e-17,2.706112675735916e-17],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"grey\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[0.31250000000000006,0.5625000000000001,0.5625000000000001,0.31250000000000006,0.31250000000000006],\\\"y\\\":[6.4,6.4,7.2,7.2,6.4],\\\"z\\\":[2.706112675735916e-17,4.871002816324649e-17,4.871002816324649e-17,2.706112675735916e-17,2.706112675735916e-17],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"grey\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[0.31250000000000006,0.5625000000000001,0.5625000000000001,0.31250000000000006,0.31250000000000006],\\\"y\\\":[7.2,7.2,8.0,8.0,7.2],\\\"z\\\":[2.706112675735916e-17,4.871002816324649e-17,4.871002816324649e-17,2.706112675735916e-17,2.706112675735916e-17],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"grey\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[0.31250000000000006,0.5625000000000001,0.5625000000000001,0.31250000000000006,0.31250000000000006],\\\"y\\\":[8.0,8.0,8.8,8.8,8.0],\\\"z\\\":[2.706112675735916e-17,4.871002816324649e-17,4.871002816324649e-17,2.706112675735916e-17,2.706112675735916e-17],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"grey\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[0.31250000000000006,0.5625000000000001,0.5625000000000001,0.31250000000000006,0.31250000000000006],\\\"y\\\":[8.8,8.8,9.600000000000001,9.600000000000001,8.8],\\\"z\\\":[2.706112675735916e-17,4.871002816324649e-17,4.871002816324649e-17,2.706112675735916e-17,2.706112675735916e-17],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"grey\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[0.31250000000000006,0.5625000000000001,0.5625000000000001,0.31250000000000006,0.31250000000000006],\\\"y\\\":[9.600000000000001,9.600000000000001,10.4,10.4,9.600000000000001],\\\"z\\\":[2.706112675735916e-17,4.871002816324649e-17,4.871002816324649e-17,2.706112675735916e-17,2.706112675735916e-17],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"grey\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[0.31250000000000006,0.5625000000000001,0.5625000000000001,0.31250000000000006,0.31250000000000006],\\\"y\\\":[10.4,10.4,11.200000000000001,11.200000000000001,10.4],\\\"z\\\":[2.706112675735916e-17,4.871002816324649e-17,4.871002816324649e-17,2.706112675735916e-17,2.706112675735916e-17],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"grey\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[0.31250000000000006,0.5625000000000001,0.5625000000000001,0.31250000000000006,0.31250000000000006],\\\"y\\\":[11.200000000000001,11.200000000000001,12.0,12.0,11.200000000000001],\\\"z\\\":[2.706112675735916e-17,4.871002816324649e-17,4.871002816324649e-17,2.706112675735916e-17,2.706112675735916e-17],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"grey\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[0.31250000000000006,0.5625000000000001,0.5625000000000001,0.31250000000000006,0.31250000000000006],\\\"y\\\":[12.0,12.0,12.8,12.8,12.0],\\\"z\\\":[2.706112675735916e-17,4.871002816324649e-17,4.871002816324649e-17,2.706112675735916e-17,2.706112675735916e-17],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"grey\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[0.31250000000000006,0.5625000000000001,0.5625000000000001,0.31250000000000006,0.31250000000000006],\\\"y\\\":[12.8,12.8,13.600000000000001,13.600000000000001,12.8],\\\"z\\\":[2.706112675735916e-17,4.871002816324649e-17,4.871002816324649e-17,2.706112675735916e-17,2.706112675735916e-17],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"grey\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[0.31250000000000006,0.5625000000000001,0.5625000000000001,0.31250000000000006,0.31250000000000006],\\\"y\\\":[13.600000000000001,13.600000000000001,14.4,14.4,13.600000000000001],\\\"z\\\":[2.706112675735916e-17,4.871002816324649e-17,4.871002816324649e-17,2.706112675735916e-17,2.706112675735916e-17],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"grey\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[0.31250000000000006,0.5625000000000001,0.5625000000000001,0.31250000000000006,0.31250000000000006],\\\"y\\\":[14.4,14.4,15.200000000000001,15.200000000000001,14.4],\\\"z\\\":[2.706112675735916e-17,4.871002816324649e-17,4.871002816324649e-17,2.706112675735916e-17,2.706112675735916e-17],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"grey\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[0.31250000000000006,0.5625000000000001,0.5625000000000001,0.31250000000000006,0.31250000000000006],\\\"y\\\":[15.200000000000001,15.200000000000001,16.0,16.0,15.200000000000001],\\\"z\\\":[2.706112675735916e-17,4.871002816324649e-17,4.871002816324649e-17,2.706112675735916e-17,2.706112675735916e-17],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"black\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"x\\\":[-0.4375000000000001,-0.4375000000000001,-0.4375000000000001,-0.4375000000000001,-0.4375000000000001,-0.4375000000000001,-0.4375000000000001,-0.4375000000000001,-0.4375000000000001,-0.4375000000000001,-0.4375000000000001,-0.4375000000000001,-0.4375000000000001,-0.4375000000000001,-0.4375000000000001,-0.4375000000000001,-0.4375000000000001,-0.4375000000000001,-0.4375000000000001,-0.4375000000000001,-0.4375000000000001],\\\"y\\\":[-7.126160546901204e-18,0.8,1.6,2.4000000000000004,3.2,4.0,4.800000000000001,5.6000000000000005,6.4,7.2,8.0,8.8,9.600000000000001,10.4,11.200000000000001,12.0,12.8,13.600000000000001,14.4,15.200000000000001,16.0],\\\"z\\\":[-3.7885577460302824e-17,-3.7885577460302824e-17,-3.7885577460302824e-17,-3.7885577460302824e-17,-3.7885577460302824e-17,-3.7885577460302824e-17,-3.7885577460302824e-17,-3.7885577460302824e-17,-3.7885577460302824e-17,-3.7885577460302824e-17,-3.7885577460302824e-17,-3.7885577460302824e-17,-3.7885577460302824e-17,-3.7885577460302824e-17,-3.7885577460302824e-17,-3.7885577460302824e-17,-3.7885577460302824e-17,-3.7885577460302824e-17,-3.7885577460302824e-17,-3.7885577460302824e-17,-3.7885577460302824e-17],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"black\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"x\\\":[-0.18750000000000006,-0.18750000000000006,-0.18750000000000006,-0.18750000000000006,-0.18750000000000006,-0.18750000000000006,-0.18750000000000006,-0.18750000000000006,-0.18750000000000006,-0.18750000000000006,-0.18750000000000006,-0.18750000000000006,-0.18750000000000006,-0.18750000000000006,-0.18750000000000006,-0.18750000000000006,-0.18750000000000006,-0.18750000000000006,-0.18750000000000006,-0.18750000000000006,-0.18750000000000006],\\\"y\\\":[-3.054068805814802e-18,0.8,1.6,2.4000000000000004,3.2,4.0,4.800000000000001,5.6000000000000005,6.4,7.2,8.0,8.8,9.600000000000001,10.4,11.200000000000001,12.0,12.8,13.600000000000001,14.4,15.200000000000001,16.0],\\\"z\\\":[-1.6236676054415498e-17,-1.6236676054415498e-17,-1.6236676054415498e-17,-1.6236676054415498e-17,-1.6236676054415498e-17,-1.6236676054415498e-17,-1.6236676054415498e-17,-1.6236676054415498e-17,-1.6236676054415498e-17,-1.6236676054415498e-17,-1.6236676054415498e-17,-1.6236676054415498e-17,-1.6236676054415498e-17,-1.6236676054415498e-17,-1.6236676054415498e-17,-1.6236676054415498e-17,-1.6236676054415498e-17,-1.6236676054415498e-17,-1.6236676054415498e-17,-1.6236676054415498e-17,-1.6236676054415498e-17],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"black\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"x\\\":[0.06250000000000001,0.06250000000000001,0.06250000000000001,0.06250000000000001,0.06250000000000001,0.06250000000000001,0.06250000000000001,0.06250000000000001,0.06250000000000001,0.06250000000000001,0.06250000000000001,0.06250000000000001,0.06250000000000001,0.06250000000000001,0.06250000000000001,0.06250000000000001,0.06250000000000001,0.06250000000000001,0.06250000000000001,0.06250000000000001,0.06250000000000001],\\\"y\\\":[1.0180229352716006e-18,0.8,1.6,2.4000000000000004,3.2,4.0,4.800000000000001,5.6000000000000005,6.4,7.2,8.0,8.8,9.600000000000001,10.4,11.200000000000001,12.0,12.8,13.600000000000001,14.4,15.200000000000001,16.0],\\\"z\\\":[5.412225351471832e-18,5.412225351471832e-18,5.412225351471832e-18,5.412225351471832e-18,5.412225351471832e-18,5.412225351471832e-18,5.412225351471832e-18,5.412225351471832e-18,5.412225351471832e-18,5.412225351471832e-18,5.412225351471832e-18,5.412225351471832e-18,5.412225351471832e-18,5.412225351471832e-18,5.412225351471832e-18,5.412225351471832e-18,5.412225351471832e-18,5.412225351471832e-18,5.412225351471832e-18,5.412225351471832e-18,5.412225351471832e-18],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"black\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"x\\\":[0.31250000000000006,0.31250000000000006,0.31250000000000006,0.31250000000000006,0.31250000000000006,0.31250000000000006,0.31250000000000006,0.31250000000000006,0.31250000000000006,0.31250000000000006,0.31250000000000006,0.31250000000000006,0.31250000000000006,0.31250000000000006,0.31250000000000006,0.31250000000000006,0.31250000000000006,0.31250000000000006,0.31250000000000006,0.31250000000000006,0.31250000000000006],\\\"y\\\":[5.090114676358003e-18,0.8,1.6,2.4000000000000004,3.2,4.0,4.800000000000001,5.6000000000000005,6.4,7.2,8.0,8.8,9.600000000000001,10.4,11.200000000000001,12.0,12.8,13.600000000000001,14.4,15.200000000000001,16.0],\\\"z\\\":[2.706112675735916e-17,2.706112675735916e-17,2.706112675735916e-17,2.706112675735916e-17,2.706112675735916e-17,2.706112675735916e-17,2.706112675735916e-17,2.706112675735916e-17,2.706112675735916e-17,2.706112675735916e-17,2.706112675735916e-17,2.706112675735916e-17,2.706112675735916e-17,2.706112675735916e-17,2.706112675735916e-17,2.706112675735916e-17,2.706112675735916e-17,2.706112675735916e-17,2.706112675735916e-17,2.706112675735916e-17,2.706112675735916e-17],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"black\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"x\\\":[0.5625000000000001,0.5625000000000001,0.5625000000000001,0.5625000000000001,0.5625000000000001,0.5625000000000001,0.5625000000000001,0.5625000000000001,0.5625000000000001,0.5625000000000001,0.5625000000000001,0.5625000000000001,0.5625000000000001,0.5625000000000001,0.5625000000000001,0.5625000000000001,0.5625000000000001,0.5625000000000001,0.5625000000000001,0.5625000000000001,0.5625000000000001],\\\"y\\\":[9.162206417444405e-18,0.8,1.6,2.4000000000000004,3.2,4.0,4.800000000000001,5.6000000000000005,6.4,7.2,8.0,8.8,9.600000000000001,10.4,11.200000000000001,12.0,12.8,13.600000000000001,14.4,15.200000000000001,16.0],\\\"z\\\":[4.871002816324649e-17,4.871002816324649e-17,4.871002816324649e-17,4.871002816324649e-17,4.871002816324649e-17,4.871002816324649e-17,4.871002816324649e-17,4.871002816324649e-17,4.871002816324649e-17,4.871002816324649e-17,4.871002816324649e-17,4.871002816324649e-17,4.871002816324649e-17,4.871002816324649e-17,4.871002816324649e-17,4.871002816324649e-17,4.871002816324649e-17,4.871002816324649e-17,4.871002816324649e-17,4.871002816324649e-17,4.871002816324649e-17],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"black\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"x\\\":[-0.4375000000000001,-0.18750000000000006,0.06250000000000001,0.31250000000000006,0.5625000000000001],\\\"y\\\":[-7.126160546901204e-18,-3.054068805814802e-18,1.0180229352716006e-18,5.090114676358003e-18,9.162206417444405e-18],\\\"z\\\":[-3.7885577460302824e-17,-1.6236676054415498e-17,5.412225351471832e-18,2.706112675735916e-17,4.871002816324649e-17],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"black\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"x\\\":[-0.4375000000000001,-0.18750000000000006,0.06250000000000001,0.31250000000000006,0.5625000000000001],\\\"y\\\":[0.8,0.8,0.8,0.8,0.8],\\\"z\\\":[-3.7885577460302824e-17,-1.6236676054415498e-17,5.412225351471832e-18,2.706112675735916e-17,4.871002816324649e-17],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"black\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"x\\\":[-0.4375000000000001,-0.18750000000000006,0.06250000000000001,0.31250000000000006,0.5625000000000001],\\\"y\\\":[1.6,1.6,1.6,1.6,1.6],\\\"z\\\":[-3.7885577460302824e-17,-1.6236676054415498e-17,5.412225351471832e-18,2.706112675735916e-17,4.871002816324649e-17],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"black\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"x\\\":[-0.4375000000000001,-0.18750000000000006,0.06250000000000001,0.31250000000000006,0.5625000000000001],\\\"y\\\":[2.4000000000000004,2.4000000000000004,2.4000000000000004,2.4000000000000004,2.4000000000000004],\\\"z\\\":[-3.7885577460302824e-17,-1.6236676054415498e-17,5.412225351471832e-18,2.706112675735916e-17,4.871002816324649e-17],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"black\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"x\\\":[-0.4375000000000001,-0.18750000000000006,0.06250000000000001,0.31250000000000006,0.5625000000000001],\\\"y\\\":[3.2,3.2,3.2,3.2,3.2],\\\"z\\\":[-3.7885577460302824e-17,-1.6236676054415498e-17,5.412225351471832e-18,2.706112675735916e-17,4.871002816324649e-17],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"black\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"x\\\":[-0.4375000000000001,-0.18750000000000006,0.06250000000000001,0.31250000000000006,0.5625000000000001],\\\"y\\\":[4.0,4.0,4.0,4.0,4.0],\\\"z\\\":[-3.7885577460302824e-17,-1.6236676054415498e-17,5.412225351471832e-18,2.706112675735916e-17,4.871002816324649e-17],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"black\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"x\\\":[-0.4375000000000001,-0.18750000000000006,0.06250000000000001,0.31250000000000006,0.5625000000000001],\\\"y\\\":[4.800000000000001,4.800000000000001,4.800000000000001,4.800000000000001,4.800000000000001],\\\"z\\\":[-3.7885577460302824e-17,-1.6236676054415498e-17,5.412225351471832e-18,2.706112675735916e-17,4.871002816324649e-17],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"black\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"x\\\":[-0.4375000000000001,-0.18750000000000006,0.06250000000000001,0.31250000000000006,0.5625000000000001],\\\"y\\\":[5.6000000000000005,5.6000000000000005,5.6000000000000005,5.6000000000000005,5.6000000000000005],\\\"z\\\":[-3.7885577460302824e-17,-1.6236676054415498e-17,5.412225351471832e-18,2.706112675735916e-17,4.871002816324649e-17],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"black\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"x\\\":[-0.4375000000000001,-0.18750000000000006,0.06250000000000001,0.31250000000000006,0.5625000000000001],\\\"y\\\":[6.4,6.4,6.4,6.4,6.4],\\\"z\\\":[-3.7885577460302824e-17,-1.6236676054415498e-17,5.412225351471832e-18,2.706112675735916e-17,4.871002816324649e-17],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"black\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"x\\\":[-0.4375000000000001,-0.18750000000000006,0.06250000000000001,0.31250000000000006,0.5625000000000001],\\\"y\\\":[7.2,7.2,7.2,7.2,7.2],\\\"z\\\":[-3.7885577460302824e-17,-1.6236676054415498e-17,5.412225351471832e-18,2.706112675735916e-17,4.871002816324649e-17],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"black\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"x\\\":[-0.4375000000000001,-0.18750000000000006,0.06250000000000001,0.31250000000000006,0.5625000000000001],\\\"y\\\":[8.0,8.0,8.0,8.0,8.0],\\\"z\\\":[-3.7885577460302824e-17,-1.6236676054415498e-17,5.412225351471832e-18,2.706112675735916e-17,4.871002816324649e-17],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"black\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"x\\\":[-0.4375000000000001,-0.18750000000000006,0.06250000000000001,0.31250000000000006,0.5625000000000001],\\\"y\\\":[8.8,8.8,8.8,8.8,8.8],\\\"z\\\":[-3.7885577460302824e-17,-1.6236676054415498e-17,5.412225351471832e-18,2.706112675735916e-17,4.871002816324649e-17],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"black\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"x\\\":[-0.4375000000000001,-0.18750000000000006,0.06250000000000001,0.31250000000000006,0.5625000000000001],\\\"y\\\":[9.600000000000001,9.600000000000001,9.600000000000001,9.600000000000001,9.600000000000001],\\\"z\\\":[-3.7885577460302824e-17,-1.6236676054415498e-17,5.412225351471832e-18,2.706112675735916e-17,4.871002816324649e-17],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"black\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"x\\\":[-0.4375000000000001,-0.18750000000000006,0.06250000000000001,0.31250000000000006,0.5625000000000001],\\\"y\\\":[10.4,10.4,10.4,10.4,10.4],\\\"z\\\":[-3.7885577460302824e-17,-1.6236676054415498e-17,5.412225351471832e-18,2.706112675735916e-17,4.871002816324649e-17],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"black\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"x\\\":[-0.4375000000000001,-0.18750000000000006,0.06250000000000001,0.31250000000000006,0.5625000000000001],\\\"y\\\":[11.200000000000001,11.200000000000001,11.200000000000001,11.200000000000001,11.200000000000001],\\\"z\\\":[-3.7885577460302824e-17,-1.6236676054415498e-17,5.412225351471832e-18,2.706112675735916e-17,4.871002816324649e-17],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"black\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"x\\\":[-0.4375000000000001,-0.18750000000000006,0.06250000000000001,0.31250000000000006,0.5625000000000001],\\\"y\\\":[12.0,12.0,12.0,12.0,12.0],\\\"z\\\":[-3.7885577460302824e-17,-1.6236676054415498e-17,5.412225351471832e-18,2.706112675735916e-17,4.871002816324649e-17],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"black\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"x\\\":[-0.4375000000000001,-0.18750000000000006,0.06250000000000001,0.31250000000000006,0.5625000000000001],\\\"y\\\":[12.8,12.8,12.8,12.8,12.8],\\\"z\\\":[-3.7885577460302824e-17,-1.6236676054415498e-17,5.412225351471832e-18,2.706112675735916e-17,4.871002816324649e-17],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"black\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"x\\\":[-0.4375000000000001,-0.18750000000000006,0.06250000000000001,0.31250000000000006,0.5625000000000001],\\\"y\\\":[13.600000000000001,13.600000000000001,13.600000000000001,13.600000000000001,13.600000000000001],\\\"z\\\":[-3.7885577460302824e-17,-1.6236676054415498e-17,5.412225351471832e-18,2.706112675735916e-17,4.871002816324649e-17],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"black\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"x\\\":[-0.4375000000000001,-0.18750000000000006,0.06250000000000001,0.31250000000000006,0.5625000000000001],\\\"y\\\":[14.4,14.4,14.4,14.4,14.4],\\\"z\\\":[-3.7885577460302824e-17,-1.6236676054415498e-17,5.412225351471832e-18,2.706112675735916e-17,4.871002816324649e-17],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"black\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"x\\\":[-0.4375000000000001,-0.18750000000000006,0.06250000000000001,0.31250000000000006,0.5625000000000001],\\\"y\\\":[15.200000000000001,15.200000000000001,15.200000000000001,15.200000000000001,15.200000000000001],\\\"z\\\":[-3.7885577460302824e-17,-1.6236676054415498e-17,5.412225351471832e-18,2.706112675735916e-17,4.871002816324649e-17],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"black\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"x\\\":[-0.4375000000000001,-0.18750000000000006,0.06250000000000001,0.31250000000000006,0.5625000000000001],\\\"y\\\":[16.0,16.0,16.0,16.0,16.0],\\\"z\\\":[-3.7885577460302824e-17,-1.6236676054415498e-17,5.412225351471832e-18,2.706112675735916e-17,4.871002816324649e-17],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"lightskyblue\\\"},\\\"mode\\\":\\\"lines\\\",\\\"name\\\":\\\"Aero wake\\\",\\\"surfaceaxis\\\":2,\\\"x\\\":[0.5625000000000001,0.8123477075000001,0.8123477075000001,0.5625000000000001,0.5625000000000001],\\\"y\\\":[9.162206417444405e-18,9.162206417444405e-18,0.8,0.8,9.162206417444405e-18],\\\"z\\\":[4.871002816324649e-17,0.008724875000000049,0.008724875000000049,4.871002816324649e-17,4.871002816324649e-17],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"lightskyblue\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[0.5625000000000001,0.8123477075000001,0.8123477075000001,0.5625000000000001,0.5625000000000001],\\\"y\\\":[0.8,0.8,1.6,1.6,0.8],\\\"z\\\":[4.871002816324649e-17,0.008724875000000049,0.008724875000000049,4.871002816324649e-17,4.871002816324649e-17],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"lightskyblue\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[0.5625000000000001,0.8123477075000001,0.8123477075000001,0.5625000000000001,0.5625000000000001],\\\"y\\\":[1.6,1.6,2.4000000000000004,2.4000000000000004,1.6],\\\"z\\\":[4.871002816324649e-17,0.008724875000000049,0.008724875000000049,4.871002816324649e-17,4.871002816324649e-17],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"lightskyblue\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[0.5625000000000001,0.8123477075000001,0.8123477075000001,0.5625000000000001,0.5625000000000001],\\\"y\\\":[2.4000000000000004,2.4000000000000004,3.2,3.2,2.4000000000000004],\\\"z\\\":[4.871002816324649e-17,0.008724875000000049,0.008724875000000049,4.871002816324649e-17,4.871002816324649e-17],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"lightskyblue\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[0.5625000000000001,0.8123477075000001,0.8123477075000001,0.5625000000000001,0.5625000000000001],\\\"y\\\":[3.2,3.2,4.0,4.0,3.2],\\\"z\\\":[4.871002816324649e-17,0.008724875000000049,0.008724875000000049,4.871002816324649e-17,4.871002816324649e-17],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"lightskyblue\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[0.5625000000000001,0.8123477075000001,0.8123477075000001,0.5625000000000001,0.5625000000000001],\\\"y\\\":[4.0,4.0,4.800000000000001,4.800000000000001,4.0],\\\"z\\\":[4.871002816324649e-17,0.008724875000000049,0.008724875000000049,4.871002816324649e-17,4.871002816324649e-17],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"lightskyblue\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[0.5625000000000001,0.8123477075000001,0.8123477075000001,0.5625000000000001,0.5625000000000001],\\\"y\\\":[4.800000000000001,4.800000000000001,5.6000000000000005,5.6000000000000005,4.800000000000001],\\\"z\\\":[4.871002816324649e-17,0.008724875000000049,0.008724875000000049,4.871002816324649e-17,4.871002816324649e-17],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"lightskyblue\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[0.5625000000000001,0.8123477075000001,0.8123477075000001,0.5625000000000001,0.5625000000000001],\\\"y\\\":[5.6000000000000005,5.6000000000000005,6.4,6.4,5.6000000000000005],\\\"z\\\":[4.871002816324649e-17,0.008724875000000049,0.008724875000000049,4.871002816324649e-17,4.871002816324649e-17],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"lightskyblue\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[0.5625000000000001,0.8123477075000001,0.8123477075000001,0.5625000000000001,0.5625000000000001],\\\"y\\\":[6.4,6.4,7.2,7.2,6.4],\\\"z\\\":[4.871002816324649e-17,0.008724875000000049,0.008724875000000049,4.871002816324649e-17,4.871002816324649e-17],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"lightskyblue\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[0.5625000000000001,0.8123477075000001,0.8123477075000001,0.5625000000000001,0.5625000000000001],\\\"y\\\":[7.2,7.2,8.0,8.0,7.2],\\\"z\\\":[4.871002816324649e-17,0.008724875000000049,0.008724875000000049,4.871002816324649e-17,4.871002816324649e-17],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"lightskyblue\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[0.5625000000000001,0.8123477075000001,0.8123477075000001,0.5625000000000001,0.5625000000000001],\\\"y\\\":[8.0,8.0,8.8,8.8,8.0],\\\"z\\\":[4.871002816324649e-17,0.008724875000000049,0.008724875000000049,4.871002816324649e-17,4.871002816324649e-17],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"lightskyblue\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[0.5625000000000001,0.8123477075000001,0.8123477075000001,0.5625000000000001,0.5625000000000001],\\\"y\\\":[8.8,8.8,9.600000000000001,9.600000000000001,8.8],\\\"z\\\":[4.871002816324649e-17,0.008724875000000049,0.008724875000000049,4.871002816324649e-17,4.871002816324649e-17],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"lightskyblue\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[0.5625000000000001,0.8123477075000001,0.8123477075000001,0.5625000000000001,0.5625000000000001],\\\"y\\\":[9.600000000000001,9.600000000000001,10.4,10.4,9.600000000000001],\\\"z\\\":[4.871002816324649e-17,0.008724875000000049,0.008724875000000049,4.871002816324649e-17,4.871002816324649e-17],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"lightskyblue\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[0.5625000000000001,0.8123477075000001,0.8123477075000001,0.5625000000000001,0.5625000000000001],\\\"y\\\":[10.4,10.4,11.200000000000001,11.200000000000001,10.4],\\\"z\\\":[4.871002816324649e-17,0.008724875000000049,0.008724875000000049,4.871002816324649e-17,4.871002816324649e-17],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"lightskyblue\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[0.5625000000000001,0.8123477075000001,0.8123477075000001,0.5625000000000001,0.5625000000000001],\\\"y\\\":[11.200000000000001,11.200000000000001,12.0,12.0,11.200000000000001],\\\"z\\\":[4.871002816324649e-17,0.008724875000000049,0.008724875000000049,4.871002816324649e-17,4.871002816324649e-17],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"lightskyblue\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[0.5625000000000001,0.8123477075000001,0.8123477075000001,0.5625000000000001,0.5625000000000001],\\\"y\\\":[12.0,12.0,12.8,12.8,12.0],\\\"z\\\":[4.871002816324649e-17,0.008724875000000049,0.008724875000000049,4.871002816324649e-17,4.871002816324649e-17],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"lightskyblue\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[0.5625000000000001,0.8123477075000001,0.8123477075000001,0.5625000000000001,0.5625000000000001],\\\"y\\\":[12.8,12.8,13.600000000000001,13.600000000000001,12.8],\\\"z\\\":[4.871002816324649e-17,0.008724875000000049,0.008724875000000049,4.871002816324649e-17,4.871002816324649e-17],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"lightskyblue\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[0.5625000000000001,0.8123477075000001,0.8123477075000001,0.5625000000000001,0.5625000000000001],\\\"y\\\":[13.600000000000001,13.600000000000001,14.4,14.4,13.600000000000001],\\\"z\\\":[4.871002816324649e-17,0.008724875000000049,0.008724875000000049,4.871002816324649e-17,4.871002816324649e-17],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"lightskyblue\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[0.5625000000000001,0.8123477075000001,0.8123477075000001,0.5625000000000001,0.5625000000000001],\\\"y\\\":[14.4,14.4,15.200000000000001,15.200000000000001,14.4],\\\"z\\\":[4.871002816324649e-17,0.008724875000000049,0.008724875000000049,4.871002816324649e-17,4.871002816324649e-17],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"lightskyblue\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[0.5625000000000001,0.8123477075000001,0.8123477075000001,0.5625000000000001,0.5625000000000001],\\\"y\\\":[15.200000000000001,15.200000000000001,16.0,16.0,15.200000000000001],\\\"z\\\":[4.871002816324649e-17,0.008724875000000049,0.008724875000000049,4.871002816324649e-17,4.871002816324649e-17],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"lightskyblue\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[0.8123477075000001,1.0621954150000001,1.0621954150000001,0.8123477075000001,0.8123477075000001],\\\"y\\\":[9.162206417444405e-18,9.162206417444405e-18,0.8,0.8,9.162206417444405e-18],\\\"z\\\":[0.008724875000000049,0.01744975000000005,0.01744975000000005,0.008724875000000049,0.008724875000000049],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"lightskyblue\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[0.8123477075000001,1.0621954150000001,1.0621954150000001,0.8123477075000001,0.8123477075000001],\\\"y\\\":[0.8,0.8,1.6,1.6,0.8],\\\"z\\\":[0.008724875000000049,0.01744975000000005,0.01744975000000005,0.008724875000000049,0.008724875000000049],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"lightskyblue\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[0.8123477075000001,1.0621954150000001,1.0621954150000001,0.8123477075000001,0.8123477075000001],\\\"y\\\":[1.6,1.6,2.4000000000000004,2.4000000000000004,1.6],\\\"z\\\":[0.008724875000000049,0.01744975000000005,0.01744975000000005,0.008724875000000049,0.008724875000000049],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"lightskyblue\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[0.8123477075000001,1.0621954150000001,1.0621954150000001,0.8123477075000001,0.8123477075000001],\\\"y\\\":[2.4000000000000004,2.4000000000000004,3.2,3.2,2.4000000000000004],\\\"z\\\":[0.008724875000000049,0.01744975000000005,0.01744975000000005,0.008724875000000049,0.008724875000000049],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"lightskyblue\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[0.8123477075000001,1.0621954150000001,1.0621954150000001,0.8123477075000001,0.8123477075000001],\\\"y\\\":[3.2,3.2,4.0,4.0,3.2],\\\"z\\\":[0.008724875000000049,0.01744975000000005,0.01744975000000005,0.008724875000000049,0.008724875000000049],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"lightskyblue\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[0.8123477075000001,1.0621954150000001,1.0621954150000001,0.8123477075000001,0.8123477075000001],\\\"y\\\":[4.0,4.0,4.800000000000001,4.800000000000001,4.0],\\\"z\\\":[0.008724875000000049,0.01744975000000005,0.01744975000000005,0.008724875000000049,0.008724875000000049],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"lightskyblue\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[0.8123477075000001,1.0621954150000001,1.0621954150000001,0.8123477075000001,0.8123477075000001],\\\"y\\\":[4.800000000000001,4.800000000000001,5.6000000000000005,5.6000000000000005,4.800000000000001],\\\"z\\\":[0.008724875000000049,0.01744975000000005,0.01744975000000005,0.008724875000000049,0.008724875000000049],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"lightskyblue\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[0.8123477075000001,1.0621954150000001,1.0621954150000001,0.8123477075000001,0.8123477075000001],\\\"y\\\":[5.6000000000000005,5.6000000000000005,6.4,6.4,5.6000000000000005],\\\"z\\\":[0.008724875000000049,0.01744975000000005,0.01744975000000005,0.008724875000000049,0.008724875000000049],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"lightskyblue\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[0.8123477075000001,1.0621954150000001,1.0621954150000001,0.8123477075000001,0.8123477075000001],\\\"y\\\":[6.4,6.4,7.2,7.2,6.4],\\\"z\\\":[0.008724875000000049,0.01744975000000005,0.01744975000000005,0.008724875000000049,0.008724875000000049],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"lightskyblue\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[0.8123477075000001,1.0621954150000001,1.0621954150000001,0.8123477075000001,0.8123477075000001],\\\"y\\\":[7.2,7.2,8.0,8.0,7.2],\\\"z\\\":[0.008724875000000049,0.01744975000000005,0.01744975000000005,0.008724875000000049,0.008724875000000049],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"lightskyblue\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[0.8123477075000001,1.0621954150000001,1.0621954150000001,0.8123477075000001,0.8123477075000001],\\\"y\\\":[8.0,8.0,8.8,8.8,8.0],\\\"z\\\":[0.008724875000000049,0.01744975000000005,0.01744975000000005,0.008724875000000049,0.008724875000000049],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"lightskyblue\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[0.8123477075000001,1.0621954150000001,1.0621954150000001,0.8123477075000001,0.8123477075000001],\\\"y\\\":[8.8,8.8,9.600000000000001,9.600000000000001,8.8],\\\"z\\\":[0.008724875000000049,0.01744975000000005,0.01744975000000005,0.008724875000000049,0.008724875000000049],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"lightskyblue\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[0.8123477075000001,1.0621954150000001,1.0621954150000001,0.8123477075000001,0.8123477075000001],\\\"y\\\":[9.600000000000001,9.600000000000001,10.4,10.4,9.600000000000001],\\\"z\\\":[0.008724875000000049,0.01744975000000005,0.01744975000000005,0.008724875000000049,0.008724875000000049],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"lightskyblue\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[0.8123477075000001,1.0621954150000001,1.0621954150000001,0.8123477075000001,0.8123477075000001],\\\"y\\\":[10.4,10.4,11.200000000000001,11.200000000000001,10.4],\\\"z\\\":[0.008724875000000049,0.01744975000000005,0.01744975000000005,0.008724875000000049,0.008724875000000049],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"lightskyblue\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[0.8123477075000001,1.0621954150000001,1.0621954150000001,0.8123477075000001,0.8123477075000001],\\\"y\\\":[11.200000000000001,11.200000000000001,12.0,12.0,11.200000000000001],\\\"z\\\":[0.008724875000000049,0.01744975000000005,0.01744975000000005,0.008724875000000049,0.008724875000000049],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"lightskyblue\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[0.8123477075000001,1.0621954150000001,1.0621954150000001,0.8123477075000001,0.8123477075000001],\\\"y\\\":[12.0,12.0,12.8,12.8,12.0],\\\"z\\\":[0.008724875000000049,0.01744975000000005,0.01744975000000005,0.008724875000000049,0.008724875000000049],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"lightskyblue\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[0.8123477075000001,1.0621954150000001,1.0621954150000001,0.8123477075000001,0.8123477075000001],\\\"y\\\":[12.8,12.8,13.600000000000001,13.600000000000001,12.8],\\\"z\\\":[0.008724875000000049,0.01744975000000005,0.01744975000000005,0.008724875000000049,0.008724875000000049],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"lightskyblue\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[0.8123477075000001,1.0621954150000001,1.0621954150000001,0.8123477075000001,0.8123477075000001],\\\"y\\\":[13.600000000000001,13.600000000000001,14.4,14.4,13.600000000000001],\\\"z\\\":[0.008724875000000049,0.01744975000000005,0.01744975000000005,0.008724875000000049,0.008724875000000049],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"lightskyblue\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[0.8123477075000001,1.0621954150000001,1.0621954150000001,0.8123477075000001,0.8123477075000001],\\\"y\\\":[14.4,14.4,15.200000000000001,15.200000000000001,14.4],\\\"z\\\":[0.008724875000000049,0.01744975000000005,0.01744975000000005,0.008724875000000049,0.008724875000000049],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"lightskyblue\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[0.8123477075000001,1.0621954150000001,1.0621954150000001,0.8123477075000001,0.8123477075000001],\\\"y\\\":[15.200000000000001,15.200000000000001,16.0,16.0,15.200000000000001],\\\"z\\\":[0.008724875000000049,0.01744975000000005,0.01744975000000005,0.008724875000000049,0.008724875000000049],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"lightskyblue\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[1.0621954150000001,1.3120431225000002,1.3120431225000002,1.0621954150000001,1.0621954150000001],\\\"y\\\":[9.162206417444405e-18,9.162206417444405e-18,0.8,0.8,9.162206417444405e-18],\\\"z\\\":[0.01744975000000005,0.02617462500000005,0.02617462500000005,0.01744975000000005,0.01744975000000005],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"lightskyblue\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[1.0621954150000001,1.3120431225000002,1.3120431225000002,1.0621954150000001,1.0621954150000001],\\\"y\\\":[0.8,0.8,1.6,1.6,0.8],\\\"z\\\":[0.01744975000000005,0.02617462500000005,0.02617462500000005,0.01744975000000005,0.01744975000000005],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"lightskyblue\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[1.0621954150000001,1.3120431225000002,1.3120431225000002,1.0621954150000001,1.0621954150000001],\\\"y\\\":[1.6,1.6,2.4000000000000004,2.4000000000000004,1.6],\\\"z\\\":[0.01744975000000005,0.02617462500000005,0.02617462500000005,0.01744975000000005,0.01744975000000005],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"lightskyblue\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[1.0621954150000001,1.3120431225000002,1.3120431225000002,1.0621954150000001,1.0621954150000001],\\\"y\\\":[2.4000000000000004,2.4000000000000004,3.2,3.2,2.4000000000000004],\\\"z\\\":[0.01744975000000005,0.02617462500000005,0.02617462500000005,0.01744975000000005,0.01744975000000005],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"lightskyblue\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[1.0621954150000001,1.3120431225000002,1.3120431225000002,1.0621954150000001,1.0621954150000001],\\\"y\\\":[3.2,3.2,4.0,4.0,3.2],\\\"z\\\":[0.01744975000000005,0.02617462500000005,0.02617462500000005,0.01744975000000005,0.01744975000000005],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"lightskyblue\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[1.0621954150000001,1.3120431225000002,1.3120431225000002,1.0621954150000001,1.0621954150000001],\\\"y\\\":[4.0,4.0,4.800000000000001,4.800000000000001,4.0],\\\"z\\\":[0.01744975000000005,0.02617462500000005,0.02617462500000005,0.01744975000000005,0.01744975000000005],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"lightskyblue\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[1.0621954150000001,1.3120431225000002,1.3120431225000002,1.0621954150000001,1.0621954150000001],\\\"y\\\":[4.800000000000001,4.800000000000001,5.6000000000000005,5.6000000000000005,4.800000000000001],\\\"z\\\":[0.01744975000000005,0.02617462500000005,0.02617462500000005,0.01744975000000005,0.01744975000000005],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"lightskyblue\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[1.0621954150000001,1.3120431225000002,1.3120431225000002,1.0621954150000001,1.0621954150000001],\\\"y\\\":[5.6000000000000005,5.6000000000000005,6.4,6.4,5.6000000000000005],\\\"z\\\":[0.01744975000000005,0.02617462500000005,0.02617462500000005,0.01744975000000005,0.01744975000000005],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"lightskyblue\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[1.0621954150000001,1.3120431225000002,1.3120431225000002,1.0621954150000001,1.0621954150000001],\\\"y\\\":[6.4,6.4,7.2,7.2,6.4],\\\"z\\\":[0.01744975000000005,0.02617462500000005,0.02617462500000005,0.01744975000000005,0.01744975000000005],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"lightskyblue\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[1.0621954150000001,1.3120431225000002,1.3120431225000002,1.0621954150000001,1.0621954150000001],\\\"y\\\":[7.2,7.2,8.0,8.0,7.2],\\\"z\\\":[0.01744975000000005,0.02617462500000005,0.02617462500000005,0.01744975000000005,0.01744975000000005],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"lightskyblue\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[1.0621954150000001,1.3120431225000002,1.3120431225000002,1.0621954150000001,1.0621954150000001],\\\"y\\\":[8.0,8.0,8.8,8.8,8.0],\\\"z\\\":[0.01744975000000005,0.02617462500000005,0.02617462500000005,0.01744975000000005,0.01744975000000005],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"lightskyblue\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[1.0621954150000001,1.3120431225000002,1.3120431225000002,1.0621954150000001,1.0621954150000001],\\\"y\\\":[8.8,8.8,9.600000000000001,9.600000000000001,8.8],\\\"z\\\":[0.01744975000000005,0.02617462500000005,0.02617462500000005,0.01744975000000005,0.01744975000000005],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"lightskyblue\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[1.0621954150000001,1.3120431225000002,1.3120431225000002,1.0621954150000001,1.0621954150000001],\\\"y\\\":[9.600000000000001,9.600000000000001,10.4,10.4,9.600000000000001],\\\"z\\\":[0.01744975000000005,0.02617462500000005,0.02617462500000005,0.01744975000000005,0.01744975000000005],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"lightskyblue\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[1.0621954150000001,1.3120431225000002,1.3120431225000002,1.0621954150000001,1.0621954150000001],\\\"y\\\":[10.4,10.4,11.200000000000001,11.200000000000001,10.4],\\\"z\\\":[0.01744975000000005,0.02617462500000005,0.02617462500000005,0.01744975000000005,0.01744975000000005],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"lightskyblue\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[1.0621954150000001,1.3120431225000002,1.3120431225000002,1.0621954150000001,1.0621954150000001],\\\"y\\\":[11.200000000000001,11.200000000000001,12.0,12.0,11.200000000000001],\\\"z\\\":[0.01744975000000005,0.02617462500000005,0.02617462500000005,0.01744975000000005,0.01744975000000005],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"lightskyblue\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[1.0621954150000001,1.3120431225000002,1.3120431225000002,1.0621954150000001,1.0621954150000001],\\\"y\\\":[12.0,12.0,12.8,12.8,12.0],\\\"z\\\":[0.01744975000000005,0.02617462500000005,0.02617462500000005,0.01744975000000005,0.01744975000000005],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"lightskyblue\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[1.0621954150000001,1.3120431225000002,1.3120431225000002,1.0621954150000001,1.0621954150000001],\\\"y\\\":[12.8,12.8,13.600000000000001,13.600000000000001,12.8],\\\"z\\\":[0.01744975000000005,0.02617462500000005,0.02617462500000005,0.01744975000000005,0.01744975000000005],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"lightskyblue\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[1.0621954150000001,1.3120431225000002,1.3120431225000002,1.0621954150000001,1.0621954150000001],\\\"y\\\":[13.600000000000001,13.600000000000001,14.4,14.4,13.600000000000001],\\\"z\\\":[0.01744975000000005,0.02617462500000005,0.02617462500000005,0.01744975000000005,0.01744975000000005],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"lightskyblue\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[1.0621954150000001,1.3120431225000002,1.3120431225000002,1.0621954150000001,1.0621954150000001],\\\"y\\\":[14.4,14.4,15.200000000000001,15.200000000000001,14.4],\\\"z\\\":[0.01744975000000005,0.02617462500000005,0.02617462500000005,0.01744975000000005,0.01744975000000005],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"lightskyblue\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[1.0621954150000001,1.3120431225000002,1.3120431225000002,1.0621954150000001,1.0621954150000001],\\\"y\\\":[15.200000000000001,15.200000000000001,16.0,16.0,15.200000000000001],\\\"z\\\":[0.01744975000000005,0.02617462500000005,0.02617462500000005,0.01744975000000005,0.01744975000000005],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"lightskyblue\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[1.3120431225000002,1.5618908300000003,1.5618908300000003,1.3120431225000002,1.3120431225000002],\\\"y\\\":[9.162206417444405e-18,9.162206417444405e-18,0.8,0.8,9.162206417444405e-18],\\\"z\\\":[0.02617462500000005,0.03489950000000005,0.03489950000000005,0.02617462500000005,0.02617462500000005],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"lightskyblue\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[1.3120431225000002,1.5618908300000003,1.5618908300000003,1.3120431225000002,1.3120431225000002],\\\"y\\\":[0.8,0.8,1.6,1.6,0.8],\\\"z\\\":[0.02617462500000005,0.03489950000000005,0.03489950000000005,0.02617462500000005,0.02617462500000005],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"lightskyblue\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[1.3120431225000002,1.5618908300000003,1.5618908300000003,1.3120431225000002,1.3120431225000002],\\\"y\\\":[1.6,1.6,2.4000000000000004,2.4000000000000004,1.6],\\\"z\\\":[0.02617462500000005,0.03489950000000005,0.03489950000000005,0.02617462500000005,0.02617462500000005],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"lightskyblue\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[1.3120431225000002,1.5618908300000003,1.5618908300000003,1.3120431225000002,1.3120431225000002],\\\"y\\\":[2.4000000000000004,2.4000000000000004,3.2,3.2,2.4000000000000004],\\\"z\\\":[0.02617462500000005,0.03489950000000005,0.03489950000000005,0.02617462500000005,0.02617462500000005],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"lightskyblue\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[1.3120431225000002,1.5618908300000003,1.5618908300000003,1.3120431225000002,1.3120431225000002],\\\"y\\\":[3.2,3.2,4.0,4.0,3.2],\\\"z\\\":[0.02617462500000005,0.03489950000000005,0.03489950000000005,0.02617462500000005,0.02617462500000005],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"lightskyblue\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[1.3120431225000002,1.5618908300000003,1.5618908300000003,1.3120431225000002,1.3120431225000002],\\\"y\\\":[4.0,4.0,4.800000000000001,4.800000000000001,4.0],\\\"z\\\":[0.02617462500000005,0.03489950000000005,0.03489950000000005,0.02617462500000005,0.02617462500000005],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"lightskyblue\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[1.3120431225000002,1.5618908300000003,1.5618908300000003,1.3120431225000002,1.3120431225000002],\\\"y\\\":[4.800000000000001,4.800000000000001,5.6000000000000005,5.6000000000000005,4.800000000000001],\\\"z\\\":[0.02617462500000005,0.03489950000000005,0.03489950000000005,0.02617462500000005,0.02617462500000005],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"lightskyblue\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[1.3120431225000002,1.5618908300000003,1.5618908300000003,1.3120431225000002,1.3120431225000002],\\\"y\\\":[5.6000000000000005,5.6000000000000005,6.4,6.4,5.6000000000000005],\\\"z\\\":[0.02617462500000005,0.03489950000000005,0.03489950000000005,0.02617462500000005,0.02617462500000005],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"lightskyblue\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[1.3120431225000002,1.5618908300000003,1.5618908300000003,1.3120431225000002,1.3120431225000002],\\\"y\\\":[6.4,6.4,7.2,7.2,6.4],\\\"z\\\":[0.02617462500000005,0.03489950000000005,0.03489950000000005,0.02617462500000005,0.02617462500000005],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"lightskyblue\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[1.3120431225000002,1.5618908300000003,1.5618908300000003,1.3120431225000002,1.3120431225000002],\\\"y\\\":[7.2,7.2,8.0,8.0,7.2],\\\"z\\\":[0.02617462500000005,0.03489950000000005,0.03489950000000005,0.02617462500000005,0.02617462500000005],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"lightskyblue\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[1.3120431225000002,1.5618908300000003,1.5618908300000003,1.3120431225000002,1.3120431225000002],\\\"y\\\":[8.0,8.0,8.8,8.8,8.0],\\\"z\\\":[0.02617462500000005,0.03489950000000005,0.03489950000000005,0.02617462500000005,0.02617462500000005],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"lightskyblue\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[1.3120431225000002,1.5618908300000003,1.5618908300000003,1.3120431225000002,1.3120431225000002],\\\"y\\\":[8.8,8.8,9.600000000000001,9.600000000000001,8.8],\\\"z\\\":[0.02617462500000005,0.03489950000000005,0.03489950000000005,0.02617462500000005,0.02617462500000005],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"lightskyblue\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[1.3120431225000002,1.5618908300000003,1.5618908300000003,1.3120431225000002,1.3120431225000002],\\\"y\\\":[9.600000000000001,9.600000000000001,10.4,10.4,9.600000000000001],\\\"z\\\":[0.02617462500000005,0.03489950000000005,0.03489950000000005,0.02617462500000005,0.02617462500000005],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"lightskyblue\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[1.3120431225000002,1.5618908300000003,1.5618908300000003,1.3120431225000002,1.3120431225000002],\\\"y\\\":[10.4,10.4,11.200000000000001,11.200000000000001,10.4],\\\"z\\\":[0.02617462500000005,0.03489950000000005,0.03489950000000005,0.02617462500000005,0.02617462500000005],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"lightskyblue\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[1.3120431225000002,1.5618908300000003,1.5618908300000003,1.3120431225000002,1.3120431225000002],\\\"y\\\":[11.200000000000001,11.200000000000001,12.0,12.0,11.200000000000001],\\\"z\\\":[0.02617462500000005,0.03489950000000005,0.03489950000000005,0.02617462500000005,0.02617462500000005],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"lightskyblue\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[1.3120431225000002,1.5618908300000003,1.5618908300000003,1.3120431225000002,1.3120431225000002],\\\"y\\\":[12.0,12.0,12.8,12.8,12.0],\\\"z\\\":[0.02617462500000005,0.03489950000000005,0.03489950000000005,0.02617462500000005,0.02617462500000005],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"lightskyblue\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[1.3120431225000002,1.5618908300000003,1.5618908300000003,1.3120431225000002,1.3120431225000002],\\\"y\\\":[12.8,12.8,13.600000000000001,13.600000000000001,12.8],\\\"z\\\":[0.02617462500000005,0.03489950000000005,0.03489950000000005,0.02617462500000005,0.02617462500000005],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"lightskyblue\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[1.3120431225000002,1.5618908300000003,1.5618908300000003,1.3120431225000002,1.3120431225000002],\\\"y\\\":[13.600000000000001,13.600000000000001,14.4,14.4,13.600000000000001],\\\"z\\\":[0.02617462500000005,0.03489950000000005,0.03489950000000005,0.02617462500000005,0.02617462500000005],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"lightskyblue\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[1.3120431225000002,1.5618908300000003,1.5618908300000003,1.3120431225000002,1.3120431225000002],\\\"y\\\":[14.4,14.4,15.200000000000001,15.200000000000001,14.4],\\\"z\\\":[0.02617462500000005,0.03489950000000005,0.03489950000000005,0.02617462500000005,0.02617462500000005],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"lightskyblue\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[1.3120431225000002,1.5618908300000003,1.5618908300000003,1.3120431225000002,1.3120431225000002],\\\"y\\\":[15.200000000000001,15.200000000000001,16.0,16.0,15.200000000000001],\\\"z\\\":[0.02617462500000005,0.03489950000000005,0.03489950000000005,0.02617462500000005,0.02617462500000005],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"lightskyblue\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[1.5618908300000003,1.8117385375000004,1.8117385375000004,1.5618908300000003,1.5618908300000003],\\\"y\\\":[9.162206417444405e-18,9.162206417444405e-18,0.8,0.8,9.162206417444405e-18],\\\"z\\\":[0.03489950000000005,0.04362437500000005,0.04362437500000005,0.03489950000000005,0.03489950000000005],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"lightskyblue\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[1.5618908300000003,1.8117385375000004,1.8117385375000004,1.5618908300000003,1.5618908300000003],\\\"y\\\":[0.8,0.8,1.6,1.6,0.8],\\\"z\\\":[0.03489950000000005,0.04362437500000005,0.04362437500000005,0.03489950000000005,0.03489950000000005],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"lightskyblue\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[1.5618908300000003,1.8117385375000004,1.8117385375000004,1.5618908300000003,1.5618908300000003],\\\"y\\\":[1.6,1.6,2.4000000000000004,2.4000000000000004,1.6],\\\"z\\\":[0.03489950000000005,0.04362437500000005,0.04362437500000005,0.03489950000000005,0.03489950000000005],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"lightskyblue\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[1.5618908300000003,1.8117385375000004,1.8117385375000004,1.5618908300000003,1.5618908300000003],\\\"y\\\":[2.4000000000000004,2.4000000000000004,3.2,3.2,2.4000000000000004],\\\"z\\\":[0.03489950000000005,0.04362437500000005,0.04362437500000005,0.03489950000000005,0.03489950000000005],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"lightskyblue\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[1.5618908300000003,1.8117385375000004,1.8117385375000004,1.5618908300000003,1.5618908300000003],\\\"y\\\":[3.2,3.2,4.0,4.0,3.2],\\\"z\\\":[0.03489950000000005,0.04362437500000005,0.04362437500000005,0.03489950000000005,0.03489950000000005],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"lightskyblue\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[1.5618908300000003,1.8117385375000004,1.8117385375000004,1.5618908300000003,1.5618908300000003],\\\"y\\\":[4.0,4.0,4.800000000000001,4.800000000000001,4.0],\\\"z\\\":[0.03489950000000005,0.04362437500000005,0.04362437500000005,0.03489950000000005,0.03489950000000005],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"lightskyblue\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[1.5618908300000003,1.8117385375000004,1.8117385375000004,1.5618908300000003,1.5618908300000003],\\\"y\\\":[4.800000000000001,4.800000000000001,5.6000000000000005,5.6000000000000005,4.800000000000001],\\\"z\\\":[0.03489950000000005,0.04362437500000005,0.04362437500000005,0.03489950000000005,0.03489950000000005],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"lightskyblue\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[1.5618908300000003,1.8117385375000004,1.8117385375000004,1.5618908300000003,1.5618908300000003],\\\"y\\\":[5.6000000000000005,5.6000000000000005,6.4,6.4,5.6000000000000005],\\\"z\\\":[0.03489950000000005,0.04362437500000005,0.04362437500000005,0.03489950000000005,0.03489950000000005],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"lightskyblue\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[1.5618908300000003,1.8117385375000004,1.8117385375000004,1.5618908300000003,1.5618908300000003],\\\"y\\\":[6.4,6.4,7.2,7.2,6.4],\\\"z\\\":[0.03489950000000005,0.04362437500000005,0.04362437500000005,0.03489950000000005,0.03489950000000005],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"lightskyblue\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[1.5618908300000003,1.8117385375000004,1.8117385375000004,1.5618908300000003,1.5618908300000003],\\\"y\\\":[7.2,7.2,8.0,8.0,7.2],\\\"z\\\":[0.03489950000000005,0.04362437500000005,0.04362437500000005,0.03489950000000005,0.03489950000000005],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"lightskyblue\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[1.5618908300000003,1.8117385375000004,1.8117385375000004,1.5618908300000003,1.5618908300000003],\\\"y\\\":[8.0,8.0,8.8,8.8,8.0],\\\"z\\\":[0.03489950000000005,0.04362437500000005,0.04362437500000005,0.03489950000000005,0.03489950000000005],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"lightskyblue\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[1.5618908300000003,1.8117385375000004,1.8117385375000004,1.5618908300000003,1.5618908300000003],\\\"y\\\":[8.8,8.8,9.600000000000001,9.600000000000001,8.8],\\\"z\\\":[0.03489950000000005,0.04362437500000005,0.04362437500000005,0.03489950000000005,0.03489950000000005],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"lightskyblue\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[1.5618908300000003,1.8117385375000004,1.8117385375000004,1.5618908300000003,1.5618908300000003],\\\"y\\\":[9.600000000000001,9.600000000000001,10.4,10.4,9.600000000000001],\\\"z\\\":[0.03489950000000005,0.04362437500000005,0.04362437500000005,0.03489950000000005,0.03489950000000005],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"lightskyblue\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[1.5618908300000003,1.8117385375000004,1.8117385375000004,1.5618908300000003,1.5618908300000003],\\\"y\\\":[10.4,10.4,11.200000000000001,11.200000000000001,10.4],\\\"z\\\":[0.03489950000000005,0.04362437500000005,0.04362437500000005,0.03489950000000005,0.03489950000000005],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"lightskyblue\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[1.5618908300000003,1.8117385375000004,1.8117385375000004,1.5618908300000003,1.5618908300000003],\\\"y\\\":[11.200000000000001,11.200000000000001,12.0,12.0,11.200000000000001],\\\"z\\\":[0.03489950000000005,0.04362437500000005,0.04362437500000005,0.03489950000000005,0.03489950000000005],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"lightskyblue\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[1.5618908300000003,1.8117385375000004,1.8117385375000004,1.5618908300000003,1.5618908300000003],\\\"y\\\":[12.0,12.0,12.8,12.8,12.0],\\\"z\\\":[0.03489950000000005,0.04362437500000005,0.04362437500000005,0.03489950000000005,0.03489950000000005],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"lightskyblue\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[1.5618908300000003,1.8117385375000004,1.8117385375000004,1.5618908300000003,1.5618908300000003],\\\"y\\\":[12.8,12.8,13.600000000000001,13.600000000000001,12.8],\\\"z\\\":[0.03489950000000005,0.04362437500000005,0.04362437500000005,0.03489950000000005,0.03489950000000005],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"lightskyblue\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[1.5618908300000003,1.8117385375000004,1.8117385375000004,1.5618908300000003,1.5618908300000003],\\\"y\\\":[13.600000000000001,13.600000000000001,14.4,14.4,13.600000000000001],\\\"z\\\":[0.03489950000000005,0.04362437500000005,0.04362437500000005,0.03489950000000005,0.03489950000000005],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"lightskyblue\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[1.5618908300000003,1.8117385375000004,1.8117385375000004,1.5618908300000003,1.5618908300000003],\\\"y\\\":[14.4,14.4,15.200000000000001,15.200000000000001,14.4],\\\"z\\\":[0.03489950000000005,0.04362437500000005,0.04362437500000005,0.03489950000000005,0.03489950000000005],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"lightskyblue\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[1.5618908300000003,1.8117385375000004,1.8117385375000004,1.5618908300000003,1.5618908300000003],\\\"y\\\":[15.200000000000001,15.200000000000001,16.0,16.0,15.200000000000001],\\\"z\\\":[0.03489950000000005,0.04362437500000005,0.04362437500000005,0.03489950000000005,0.03489950000000005],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"lightskyblue\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[1.8117385375000004,2.0615862450000004,2.0615862450000004,1.8117385375000004,1.8117385375000004],\\\"y\\\":[9.162206417444405e-18,9.162206417444405e-18,0.8,0.8,9.162206417444405e-18],\\\"z\\\":[0.04362437500000005,0.05234925000000005,0.05234925000000005,0.04362437500000005,0.04362437500000005],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"lightskyblue\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[1.8117385375000004,2.0615862450000004,2.0615862450000004,1.8117385375000004,1.8117385375000004],\\\"y\\\":[0.8,0.8,1.6,1.6,0.8],\\\"z\\\":[0.04362437500000005,0.05234925000000005,0.05234925000000005,0.04362437500000005,0.04362437500000005],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"lightskyblue\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[1.8117385375000004,2.0615862450000004,2.0615862450000004,1.8117385375000004,1.8117385375000004],\\\"y\\\":[1.6,1.6,2.4000000000000004,2.4000000000000004,1.6],\\\"z\\\":[0.04362437500000005,0.05234925000000005,0.05234925000000005,0.04362437500000005,0.04362437500000005],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"lightskyblue\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[1.8117385375000004,2.0615862450000004,2.0615862450000004,1.8117385375000004,1.8117385375000004],\\\"y\\\":[2.4000000000000004,2.4000000000000004,3.2,3.2,2.4000000000000004],\\\"z\\\":[0.04362437500000005,0.05234925000000005,0.05234925000000005,0.04362437500000005,0.04362437500000005],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"lightskyblue\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[1.8117385375000004,2.0615862450000004,2.0615862450000004,1.8117385375000004,1.8117385375000004],\\\"y\\\":[3.2,3.2,4.0,4.0,3.2],\\\"z\\\":[0.04362437500000005,0.05234925000000005,0.05234925000000005,0.04362437500000005,0.04362437500000005],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"lightskyblue\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[1.8117385375000004,2.0615862450000004,2.0615862450000004,1.8117385375000004,1.8117385375000004],\\\"y\\\":[4.0,4.0,4.800000000000001,4.800000000000001,4.0],\\\"z\\\":[0.04362437500000005,0.05234925000000005,0.05234925000000005,0.04362437500000005,0.04362437500000005],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"lightskyblue\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[1.8117385375000004,2.0615862450000004,2.0615862450000004,1.8117385375000004,1.8117385375000004],\\\"y\\\":[4.800000000000001,4.800000000000001,5.6000000000000005,5.6000000000000005,4.800000000000001],\\\"z\\\":[0.04362437500000005,0.05234925000000005,0.05234925000000005,0.04362437500000005,0.04362437500000005],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"lightskyblue\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[1.8117385375000004,2.0615862450000004,2.0615862450000004,1.8117385375000004,1.8117385375000004],\\\"y\\\":[5.6000000000000005,5.6000000000000005,6.4,6.4,5.6000000000000005],\\\"z\\\":[0.04362437500000005,0.05234925000000005,0.05234925000000005,0.04362437500000005,0.04362437500000005],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"lightskyblue\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[1.8117385375000004,2.0615862450000004,2.0615862450000004,1.8117385375000004,1.8117385375000004],\\\"y\\\":[6.4,6.4,7.2,7.2,6.4],\\\"z\\\":[0.04362437500000005,0.05234925000000005,0.05234925000000005,0.04362437500000005,0.04362437500000005],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"lightskyblue\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[1.8117385375000004,2.0615862450000004,2.0615862450000004,1.8117385375000004,1.8117385375000004],\\\"y\\\":[7.2,7.2,8.0,8.0,7.2],\\\"z\\\":[0.04362437500000005,0.05234925000000005,0.05234925000000005,0.04362437500000005,0.04362437500000005],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"lightskyblue\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[1.8117385375000004,2.0615862450000004,2.0615862450000004,1.8117385375000004,1.8117385375000004],\\\"y\\\":[8.0,8.0,8.8,8.8,8.0],\\\"z\\\":[0.04362437500000005,0.05234925000000005,0.05234925000000005,0.04362437500000005,0.04362437500000005],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"lightskyblue\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[1.8117385375000004,2.0615862450000004,2.0615862450000004,1.8117385375000004,1.8117385375000004],\\\"y\\\":[8.8,8.8,9.600000000000001,9.600000000000001,8.8],\\\"z\\\":[0.04362437500000005,0.05234925000000005,0.05234925000000005,0.04362437500000005,0.04362437500000005],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"lightskyblue\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[1.8117385375000004,2.0615862450000004,2.0615862450000004,1.8117385375000004,1.8117385375000004],\\\"y\\\":[9.600000000000001,9.600000000000001,10.4,10.4,9.600000000000001],\\\"z\\\":[0.04362437500000005,0.05234925000000005,0.05234925000000005,0.04362437500000005,0.04362437500000005],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"lightskyblue\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[1.8117385375000004,2.0615862450000004,2.0615862450000004,1.8117385375000004,1.8117385375000004],\\\"y\\\":[10.4,10.4,11.200000000000001,11.200000000000001,10.4],\\\"z\\\":[0.04362437500000005,0.05234925000000005,0.05234925000000005,0.04362437500000005,0.04362437500000005],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"lightskyblue\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[1.8117385375000004,2.0615862450000004,2.0615862450000004,1.8117385375000004,1.8117385375000004],\\\"y\\\":[11.200000000000001,11.200000000000001,12.0,12.0,11.200000000000001],\\\"z\\\":[0.04362437500000005,0.05234925000000005,0.05234925000000005,0.04362437500000005,0.04362437500000005],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"lightskyblue\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[1.8117385375000004,2.0615862450000004,2.0615862450000004,1.8117385375000004,1.8117385375000004],\\\"y\\\":[12.0,12.0,12.8,12.8,12.0],\\\"z\\\":[0.04362437500000005,0.05234925000000005,0.05234925000000005,0.04362437500000005,0.04362437500000005],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"lightskyblue\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[1.8117385375000004,2.0615862450000004,2.0615862450000004,1.8117385375000004,1.8117385375000004],\\\"y\\\":[12.8,12.8,13.600000000000001,13.600000000000001,12.8],\\\"z\\\":[0.04362437500000005,0.05234925000000005,0.05234925000000005,0.04362437500000005,0.04362437500000005],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"lightskyblue\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[1.8117385375000004,2.0615862450000004,2.0615862450000004,1.8117385375000004,1.8117385375000004],\\\"y\\\":[13.600000000000001,13.600000000000001,14.4,14.4,13.600000000000001],\\\"z\\\":[0.04362437500000005,0.05234925000000005,0.05234925000000005,0.04362437500000005,0.04362437500000005],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"lightskyblue\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[1.8117385375000004,2.0615862450000004,2.0615862450000004,1.8117385375000004,1.8117385375000004],\\\"y\\\":[14.4,14.4,15.200000000000001,15.200000000000001,14.4],\\\"z\\\":[0.04362437500000005,0.05234925000000005,0.05234925000000005,0.04362437500000005,0.04362437500000005],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"lightskyblue\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[1.8117385375000004,2.0615862450000004,2.0615862450000004,1.8117385375000004,1.8117385375000004],\\\"y\\\":[15.200000000000001,15.200000000000001,16.0,16.0,15.200000000000001],\\\"z\\\":[0.04362437500000005,0.05234925000000005,0.05234925000000005,0.04362437500000005,0.04362437500000005],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"grey\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"x\\\":[0.5625000000000001,0.5625000000000001,0.5625000000000001,0.5625000000000001,0.5625000000000001,0.5625000000000001,0.5625000000000001,0.5625000000000001,0.5625000000000001,0.5625000000000001,0.5625000000000001,0.5625000000000001,0.5625000000000001,0.5625000000000001,0.5625000000000001,0.5625000000000001,0.5625000000000001,0.5625000000000001,0.5625000000000001,0.5625000000000001,0.5625000000000001],\\\"y\\\":[9.162206417444405e-18,0.8,1.6,2.4000000000000004,3.2,4.0,4.800000000000001,5.6000000000000005,6.4,7.2,8.0,8.8,9.600000000000001,10.4,11.200000000000001,12.0,12.8,13.600000000000001,14.4,15.200000000000001,16.0],\\\"z\\\":[4.871002816324649e-17,4.871002816324649e-17,4.871002816324649e-17,4.871002816324649e-17,4.871002816324649e-17,4.871002816324649e-17,4.871002816324649e-17,4.871002816324649e-17,4.871002816324649e-17,4.871002816324649e-17,4.871002816324649e-17,4.871002816324649e-17,4.871002816324649e-17,4.871002816324649e-17,4.871002816324649e-17,4.871002816324649e-17,4.871002816324649e-17,4.871002816324649e-17,4.871002816324649e-17,4.871002816324649e-17,4.871002816324649e-17],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"grey\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"x\\\":[0.8123477075000001,0.8123477075000001,0.8123477075000001,0.8123477075000001,0.8123477075000001,0.8123477075000001,0.8123477075000001,0.8123477075000001,0.8123477075000001,0.8123477075000001,0.8123477075000001,0.8123477075000001,0.8123477075000001,0.8123477075000001,0.8123477075000001,0.8123477075000001,0.8123477075000001,0.8123477075000001,0.8123477075000001,0.8123477075000001,0.8123477075000001],\\\"y\\\":[9.162206417444405e-18,0.8,1.6,2.4000000000000004,3.2,4.0,4.800000000000001,5.6000000000000005,6.4,7.2,8.0,8.8,9.600000000000001,10.4,11.200000000000001,12.0,12.8,13.600000000000001,14.4,15.200000000000001,16.0],\\\"z\\\":[0.008724875000000049,0.008724875000000049,0.008724875000000049,0.008724875000000049,0.008724875000000049,0.008724875000000049,0.008724875000000049,0.008724875000000049,0.008724875000000049,0.008724875000000049,0.008724875000000049,0.008724875000000049,0.008724875000000049,0.008724875000000049,0.008724875000000049,0.008724875000000049,0.008724875000000049,0.008724875000000049,0.008724875000000049,0.008724875000000049,0.008724875000000049],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"grey\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"x\\\":[1.0621954150000001,1.0621954150000001,1.0621954150000001,1.0621954150000001,1.0621954150000001,1.0621954150000001,1.0621954150000001,1.0621954150000001,1.0621954150000001,1.0621954150000001,1.0621954150000001,1.0621954150000001,1.0621954150000001,1.0621954150000001,1.0621954150000001,1.0621954150000001,1.0621954150000001,1.0621954150000001,1.0621954150000001,1.0621954150000001,1.0621954150000001],\\\"y\\\":[9.162206417444405e-18,0.8,1.6,2.4000000000000004,3.2,4.0,4.800000000000001,5.6000000000000005,6.4,7.2,8.0,8.8,9.600000000000001,10.4,11.200000000000001,12.0,12.8,13.600000000000001,14.4,15.200000000000001,16.0],\\\"z\\\":[0.01744975000000005,0.01744975000000005,0.01744975000000005,0.01744975000000005,0.01744975000000005,0.01744975000000005,0.01744975000000005,0.01744975000000005,0.01744975000000005,0.01744975000000005,0.01744975000000005,0.01744975000000005,0.01744975000000005,0.01744975000000005,0.01744975000000005,0.01744975000000005,0.01744975000000005,0.01744975000000005,0.01744975000000005,0.01744975000000005,0.01744975000000005],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"grey\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"x\\\":[1.3120431225000002,1.3120431225000002,1.3120431225000002,1.3120431225000002,1.3120431225000002,1.3120431225000002,1.3120431225000002,1.3120431225000002,1.3120431225000002,1.3120431225000002,1.3120431225000002,1.3120431225000002,1.3120431225000002,1.3120431225000002,1.3120431225000002,1.3120431225000002,1.3120431225000002,1.3120431225000002,1.3120431225000002,1.3120431225000002,1.3120431225000002],\\\"y\\\":[9.162206417444405e-18,0.8,1.6,2.4000000000000004,3.2,4.0,4.800000000000001,5.6000000000000005,6.4,7.2,8.0,8.8,9.600000000000001,10.4,11.200000000000001,12.0,12.8,13.600000000000001,14.4,15.200000000000001,16.0],\\\"z\\\":[0.02617462500000005,0.02617462500000005,0.02617462500000005,0.02617462500000005,0.02617462500000005,0.02617462500000005,0.02617462500000005,0.02617462500000005,0.02617462500000005,0.02617462500000005,0.02617462500000005,0.02617462500000005,0.02617462500000005,0.02617462500000005,0.02617462500000005,0.02617462500000005,0.02617462500000005,0.02617462500000005,0.02617462500000005,0.02617462500000005,0.02617462500000005],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"grey\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"x\\\":[1.5618908300000003,1.5618908300000003,1.5618908300000003,1.5618908300000003,1.5618908300000003,1.5618908300000003,1.5618908300000003,1.5618908300000003,1.5618908300000003,1.5618908300000003,1.5618908300000003,1.5618908300000003,1.5618908300000003,1.5618908300000003,1.5618908300000003,1.5618908300000003,1.5618908300000003,1.5618908300000003,1.5618908300000003,1.5618908300000003,1.5618908300000003],\\\"y\\\":[9.162206417444405e-18,0.8,1.6,2.4000000000000004,3.2,4.0,4.800000000000001,5.6000000000000005,6.4,7.2,8.0,8.8,9.600000000000001,10.4,11.200000000000001,12.0,12.8,13.600000000000001,14.4,15.200000000000001,16.0],\\\"z\\\":[0.03489950000000005,0.03489950000000005,0.03489950000000005,0.03489950000000005,0.03489950000000005,0.03489950000000005,0.03489950000000005,0.03489950000000005,0.03489950000000005,0.03489950000000005,0.03489950000000005,0.03489950000000005,0.03489950000000005,0.03489950000000005,0.03489950000000005,0.03489950000000005,0.03489950000000005,0.03489950000000005,0.03489950000000005,0.03489950000000005,0.03489950000000005],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"grey\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"x\\\":[1.8117385375000004,1.8117385375000004,1.8117385375000004,1.8117385375000004,1.8117385375000004,1.8117385375000004,1.8117385375000004,1.8117385375000004,1.8117385375000004,1.8117385375000004,1.8117385375000004,1.8117385375000004,1.8117385375000004,1.8117385375000004,1.8117385375000004,1.8117385375000004,1.8117385375000004,1.8117385375000004,1.8117385375000004,1.8117385375000004,1.8117385375000004],\\\"y\\\":[9.162206417444405e-18,0.8,1.6,2.4000000000000004,3.2,4.0,4.800000000000001,5.6000000000000005,6.4,7.2,8.0,8.8,9.600000000000001,10.4,11.200000000000001,12.0,12.8,13.600000000000001,14.4,15.200000000000001,16.0],\\\"z\\\":[0.04362437500000005,0.04362437500000005,0.04362437500000005,0.04362437500000005,0.04362437500000005,0.04362437500000005,0.04362437500000005,0.04362437500000005,0.04362437500000005,0.04362437500000005,0.04362437500000005,0.04362437500000005,0.04362437500000005,0.04362437500000005,0.04362437500000005,0.04362437500000005,0.04362437500000005,0.04362437500000005,0.04362437500000005,0.04362437500000005,0.04362437500000005],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"grey\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"x\\\":[2.0615862450000004,2.0615862450000004,2.0615862450000004,2.0615862450000004,2.0615862450000004,2.0615862450000004,2.0615862450000004,2.0615862450000004,2.0615862450000004,2.0615862450000004,2.0615862450000004,2.0615862450000004,2.0615862450000004,2.0615862450000004,2.0615862450000004,2.0615862450000004,2.0615862450000004,2.0615862450000004,2.0615862450000004,2.0615862450000004,2.0615862450000004],\\\"y\\\":[9.162206417444405e-18,0.8,1.6,2.4000000000000004,3.2,4.0,4.800000000000001,5.6000000000000005,6.4,7.2,8.0,8.8,9.600000000000001,10.4,11.200000000000001,12.0,12.8,13.600000000000001,14.4,15.200000000000001,16.0],\\\"z\\\":[0.05234925000000005,0.05234925000000005,0.05234925000000005,0.05234925000000005,0.05234925000000005,0.05234925000000005,0.05234925000000005,0.05234925000000005,0.05234925000000005,0.05234925000000005,0.05234925000000005,0.05234925000000005,0.05234925000000005,0.05234925000000005,0.05234925000000005,0.05234925000000005,0.05234925000000005,0.05234925000000005,0.05234925000000005,0.05234925000000005,0.05234925000000005],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"grey\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"x\\\":[0.5625000000000001,0.8123477075000001,1.0621954150000001,1.3120431225000002,1.5618908300000003,1.8117385375000004,2.0615862450000004],\\\"y\\\":[9.162206417444405e-18,9.162206417444405e-18,9.162206417444405e-18,9.162206417444405e-18,9.162206417444405e-18,9.162206417444405e-18,9.162206417444405e-18],\\\"z\\\":[4.871002816324649e-17,0.008724875000000049,0.01744975000000005,0.02617462500000005,0.03489950000000005,0.04362437500000005,0.05234925000000005],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"grey\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"x\\\":[0.5625000000000001,0.8123477075000001,1.0621954150000001,1.3120431225000002,1.5618908300000003,1.8117385375000004,2.0615862450000004],\\\"y\\\":[0.8,0.8,0.8,0.8,0.8,0.8,0.8],\\\"z\\\":[4.871002816324649e-17,0.008724875000000049,0.01744975000000005,0.02617462500000005,0.03489950000000005,0.04362437500000005,0.05234925000000005],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"grey\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"x\\\":[0.5625000000000001,0.8123477075000001,1.0621954150000001,1.3120431225000002,1.5618908300000003,1.8117385375000004,2.0615862450000004],\\\"y\\\":[1.6,1.6,1.6,1.6,1.6,1.6,1.6],\\\"z\\\":[4.871002816324649e-17,0.008724875000000049,0.01744975000000005,0.02617462500000005,0.03489950000000005,0.04362437500000005,0.05234925000000005],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"grey\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"x\\\":[0.5625000000000001,0.8123477075000001,1.0621954150000001,1.3120431225000002,1.5618908300000003,1.8117385375000004,2.0615862450000004],\\\"y\\\":[2.4000000000000004,2.4000000000000004,2.4000000000000004,2.4000000000000004,2.4000000000000004,2.4000000000000004,2.4000000000000004],\\\"z\\\":[4.871002816324649e-17,0.008724875000000049,0.01744975000000005,0.02617462500000005,0.03489950000000005,0.04362437500000005,0.05234925000000005],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"grey\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"x\\\":[0.5625000000000001,0.8123477075000001,1.0621954150000001,1.3120431225000002,1.5618908300000003,1.8117385375000004,2.0615862450000004],\\\"y\\\":[3.2,3.2,3.2,3.2,3.2,3.2,3.2],\\\"z\\\":[4.871002816324649e-17,0.008724875000000049,0.01744975000000005,0.02617462500000005,0.03489950000000005,0.04362437500000005,0.05234925000000005],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"grey\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"x\\\":[0.5625000000000001,0.8123477075000001,1.0621954150000001,1.3120431225000002,1.5618908300000003,1.8117385375000004,2.0615862450000004],\\\"y\\\":[4.0,4.0,4.0,4.0,4.0,4.0,4.0],\\\"z\\\":[4.871002816324649e-17,0.008724875000000049,0.01744975000000005,0.02617462500000005,0.03489950000000005,0.04362437500000005,0.05234925000000005],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"grey\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"x\\\":[0.5625000000000001,0.8123477075000001,1.0621954150000001,1.3120431225000002,1.5618908300000003,1.8117385375000004,2.0615862450000004],\\\"y\\\":[4.800000000000001,4.800000000000001,4.800000000000001,4.800000000000001,4.800000000000001,4.800000000000001,4.800000000000001],\\\"z\\\":[4.871002816324649e-17,0.008724875000000049,0.01744975000000005,0.02617462500000005,0.03489950000000005,0.04362437500000005,0.05234925000000005],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"grey\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"x\\\":[0.5625000000000001,0.8123477075000001,1.0621954150000001,1.3120431225000002,1.5618908300000003,1.8117385375000004,2.0615862450000004],\\\"y\\\":[5.6000000000000005,5.6000000000000005,5.6000000000000005,5.6000000000000005,5.6000000000000005,5.6000000000000005,5.6000000000000005],\\\"z\\\":[4.871002816324649e-17,0.008724875000000049,0.01744975000000005,0.02617462500000005,0.03489950000000005,0.04362437500000005,0.05234925000000005],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"grey\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"x\\\":[0.5625000000000001,0.8123477075000001,1.0621954150000001,1.3120431225000002,1.5618908300000003,1.8117385375000004,2.0615862450000004],\\\"y\\\":[6.4,6.4,6.4,6.4,6.4,6.4,6.4],\\\"z\\\":[4.871002816324649e-17,0.008724875000000049,0.01744975000000005,0.02617462500000005,0.03489950000000005,0.04362437500000005,0.05234925000000005],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"grey\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"x\\\":[0.5625000000000001,0.8123477075000001,1.0621954150000001,1.3120431225000002,1.5618908300000003,1.8117385375000004,2.0615862450000004],\\\"y\\\":[7.2,7.2,7.2,7.2,7.2,7.2,7.2],\\\"z\\\":[4.871002816324649e-17,0.008724875000000049,0.01744975000000005,0.02617462500000005,0.03489950000000005,0.04362437500000005,0.05234925000000005],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"grey\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"x\\\":[0.5625000000000001,0.8123477075000001,1.0621954150000001,1.3120431225000002,1.5618908300000003,1.8117385375000004,2.0615862450000004],\\\"y\\\":[8.0,8.0,8.0,8.0,8.0,8.0,8.0],\\\"z\\\":[4.871002816324649e-17,0.008724875000000049,0.01744975000000005,0.02617462500000005,0.03489950000000005,0.04362437500000005,0.05234925000000005],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"grey\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"x\\\":[0.5625000000000001,0.8123477075000001,1.0621954150000001,1.3120431225000002,1.5618908300000003,1.8117385375000004,2.0615862450000004],\\\"y\\\":[8.8,8.8,8.8,8.8,8.8,8.8,8.8],\\\"z\\\":[4.871002816324649e-17,0.008724875000000049,0.01744975000000005,0.02617462500000005,0.03489950000000005,0.04362437500000005,0.05234925000000005],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"grey\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"x\\\":[0.5625000000000001,0.8123477075000001,1.0621954150000001,1.3120431225000002,1.5618908300000003,1.8117385375000004,2.0615862450000004],\\\"y\\\":[9.600000000000001,9.600000000000001,9.600000000000001,9.600000000000001,9.600000000000001,9.600000000000001,9.600000000000001],\\\"z\\\":[4.871002816324649e-17,0.008724875000000049,0.01744975000000005,0.02617462500000005,0.03489950000000005,0.04362437500000005,0.05234925000000005],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"grey\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"x\\\":[0.5625000000000001,0.8123477075000001,1.0621954150000001,1.3120431225000002,1.5618908300000003,1.8117385375000004,2.0615862450000004],\\\"y\\\":[10.4,10.4,10.4,10.4,10.4,10.4,10.4],\\\"z\\\":[4.871002816324649e-17,0.008724875000000049,0.01744975000000005,0.02617462500000005,0.03489950000000005,0.04362437500000005,0.05234925000000005],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"grey\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"x\\\":[0.5625000000000001,0.8123477075000001,1.0621954150000001,1.3120431225000002,1.5618908300000003,1.8117385375000004,2.0615862450000004],\\\"y\\\":[11.200000000000001,11.200000000000001,11.200000000000001,11.200000000000001,11.200000000000001,11.200000000000001,11.200000000000001],\\\"z\\\":[4.871002816324649e-17,0.008724875000000049,0.01744975000000005,0.02617462500000005,0.03489950000000005,0.04362437500000005,0.05234925000000005],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"grey\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"x\\\":[0.5625000000000001,0.8123477075000001,1.0621954150000001,1.3120431225000002,1.5618908300000003,1.8117385375000004,2.0615862450000004],\\\"y\\\":[12.0,12.0,12.0,12.0,12.0,12.0,12.0],\\\"z\\\":[4.871002816324649e-17,0.008724875000000049,0.01744975000000005,0.02617462500000005,0.03489950000000005,0.04362437500000005,0.05234925000000005],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"grey\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"x\\\":[0.5625000000000001,0.8123477075000001,1.0621954150000001,1.3120431225000002,1.5618908300000003,1.8117385375000004,2.0615862450000004],\\\"y\\\":[12.8,12.8,12.8,12.8,12.8,12.8,12.8],\\\"z\\\":[4.871002816324649e-17,0.008724875000000049,0.01744975000000005,0.02617462500000005,0.03489950000000005,0.04362437500000005,0.05234925000000005],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"grey\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"x\\\":[0.5625000000000001,0.8123477075000001,1.0621954150000001,1.3120431225000002,1.5618908300000003,1.8117385375000004,2.0615862450000004],\\\"y\\\":[13.600000000000001,13.600000000000001,13.600000000000001,13.600000000000001,13.600000000000001,13.600000000000001,13.600000000000001],\\\"z\\\":[4.871002816324649e-17,0.008724875000000049,0.01744975000000005,0.02617462500000005,0.03489950000000005,0.04362437500000005,0.05234925000000005],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"grey\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"x\\\":[0.5625000000000001,0.8123477075000001,1.0621954150000001,1.3120431225000002,1.5618908300000003,1.8117385375000004,2.0615862450000004],\\\"y\\\":[14.4,14.4,14.4,14.4,14.4,14.4,14.4],\\\"z\\\":[4.871002816324649e-17,0.008724875000000049,0.01744975000000005,0.02617462500000005,0.03489950000000005,0.04362437500000005,0.05234925000000005],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"grey\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"x\\\":[0.5625000000000001,0.8123477075000001,1.0621954150000001,1.3120431225000002,1.5618908300000003,1.8117385375000004,2.0615862450000004],\\\"y\\\":[15.200000000000001,15.200000000000001,15.200000000000001,15.200000000000001,15.200000000000001,15.200000000000001,15.200000000000001],\\\"z\\\":[4.871002816324649e-17,0.008724875000000049,0.01744975000000005,0.02617462500000005,0.03489950000000005,0.04362437500000005,0.05234925000000005],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"grey\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"x\\\":[0.5625000000000001,0.8123477075000001,1.0621954150000001,1.3120431225000002,1.5618908300000003,1.8117385375000004,2.0615862450000004],\\\"y\\\":[16.0,16.0,16.0,16.0,16.0,16.0,16.0],\\\"z\\\":[4.871002816324649e-17,0.008724875000000049,0.01744975000000005,0.02617462500000005,0.03489950000000005,0.04362437500000005,0.05234925000000005],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"blue\\\",\\\"width\\\":4},\\\"marker\\\":{\\\"color\\\":\\\"blue\\\",\\\"size\\\":2},\\\"name\\\":\\\"Beam nodes\\\",\\\"x\\\":[0.0,0.0,0.0],\\\"y\\\":[0.0,0.8,1.6],\\\"z\\\":[0.0,0.0,0.0],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"blue\\\",\\\"width\\\":4},\\\"marker\\\":{\\\"color\\\":\\\"blue\\\",\\\"size\\\":2},\\\"showlegend\\\":false,\\\"x\\\":[0.0,0.0,0.0],\\\"y\\\":[1.6,2.4000000000000004,3.2],\\\"z\\\":[0.0,0.0,0.0],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"blue\\\",\\\"width\\\":4},\\\"marker\\\":{\\\"color\\\":\\\"blue\\\",\\\"size\\\":2},\\\"showlegend\\\":false,\\\"x\\\":[0.0,0.0,0.0],\\\"y\\\":[3.2,4.0,4.800000000000001],\\\"z\\\":[0.0,0.0,0.0],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"blue\\\",\\\"width\\\":4},\\\"marker\\\":{\\\"color\\\":\\\"blue\\\",\\\"size\\\":2},\\\"showlegend\\\":false,\\\"x\\\":[0.0,0.0,0.0],\\\"y\\\":[4.800000000000001,5.6000000000000005,6.4],\\\"z\\\":[0.0,0.0,0.0],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"blue\\\",\\\"width\\\":4},\\\"marker\\\":{\\\"color\\\":\\\"blue\\\",\\\"size\\\":2},\\\"showlegend\\\":false,\\\"x\\\":[0.0,0.0,0.0],\\\"y\\\":[6.4,7.2,8.0],\\\"z\\\":[0.0,0.0,0.0],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"blue\\\",\\\"width\\\":4},\\\"marker\\\":{\\\"color\\\":\\\"blue\\\",\\\"size\\\":2},\\\"showlegend\\\":false,\\\"x\\\":[0.0,0.0,0.0],\\\"y\\\":[8.0,8.8,9.600000000000001],\\\"z\\\":[0.0,0.0,0.0],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"blue\\\",\\\"width\\\":4},\\\"marker\\\":{\\\"color\\\":\\\"blue\\\",\\\"size\\\":2},\\\"showlegend\\\":false,\\\"x\\\":[0.0,0.0,0.0],\\\"y\\\":[9.600000000000001,10.4,11.200000000000001],\\\"z\\\":[0.0,0.0,0.0],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"blue\\\",\\\"width\\\":4},\\\"marker\\\":{\\\"color\\\":\\\"blue\\\",\\\"size\\\":2},\\\"showlegend\\\":false,\\\"x\\\":[0.0,0.0,0.0],\\\"y\\\":[11.200000000000001,12.0,12.8],\\\"z\\\":[0.0,0.0,0.0],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"blue\\\",\\\"width\\\":4},\\\"marker\\\":{\\\"color\\\":\\\"blue\\\",\\\"size\\\":2},\\\"showlegend\\\":false,\\\"x\\\":[0.0,0.0,0.0],\\\"y\\\":[12.8,13.600000000000001,14.4],\\\"z\\\":[0.0,0.0,0.0],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"blue\\\",\\\"width\\\":4},\\\"marker\\\":{\\\"color\\\":\\\"blue\\\",\\\"size\\\":2},\\\"showlegend\\\":false,\\\"x\\\":[0.0,0.0,0.0],\\\"y\\\":[14.4,15.200000000000001,16.0],\\\"z\\\":[0.0,0.0,0.0],\\\"type\\\":\\\"scatter3d\\\"}],                        {\\\"template\\\":{\\\"data\\\":{\\\"histogram2dcontour\\\":[{\\\"type\\\":\\\"histogram2dcontour\\\",\\\"colorbar\\\":{\\\"outlinewidth\\\":0,\\\"ticks\\\":\\\"\\\"},\\\"colorscale\\\":[[0.0,\\\"#0d0887\\\"],[0.1111111111111111,\\\"#46039f\\\"],[0.2222222222222222,\\\"#7201a8\\\"],[0.3333333333333333,\\\"#9c179e\\\"],[0.4444444444444444,\\\"#bd3786\\\"],[0.5555555555555556,\\\"#d8576b\\\"],[0.6666666666666666,\\\"#ed7953\\\"],[0.7777777777777778,\\\"#fb9f3a\\\"],[0.8888888888888888,\\\"#fdca26\\\"],[1.0,\\\"#f0f921\\\"]]}],\\\"choropleth\\\":[{\\\"type\\\":\\\"choropleth\\\",\\\"colorbar\\\":{\\\"outlinewidth\\\":0,\\\"ticks\\\":\\\"\\\"}}],\\\"histogram2d\\\":[{\\\"type\\\":\\\"histogram2d\\\",\\\"colorbar\\\":{\\\"outlinewidth\\\":0,\\\"ticks\\\":\\\"\\\"},\\\"colorscale\\\":[[0.0,\\\"#0d0887\\\"],[0.1111111111111111,\\\"#46039f\\\"],[0.2222222222222222,\\\"#7201a8\\\"],[0.3333333333333333,\\\"#9c179e\\\"],[0.4444444444444444,\\\"#bd3786\\\"],[0.5555555555555556,\\\"#d8576b\\\"],[0.6666666666666666,\\\"#ed7953\\\"],[0.7777777777777778,\\\"#fb9f3a\\\"],[0.8888888888888888,\\\"#fdca26\\\"],[1.0,\\\"#f0f921\\\"]]}],\\\"heatmap\\\":[{\\\"type\\\":\\\"heatmap\\\",\\\"colorbar\\\":{\\\"outlinewidth\\\":0,\\\"ticks\\\":\\\"\\\"},\\\"colorscale\\\":[[0.0,\\\"#0d0887\\\"],[0.1111111111111111,\\\"#46039f\\\"],[0.2222222222222222,\\\"#7201a8\\\"],[0.3333333333333333,\\\"#9c179e\\\"],[0.4444444444444444,\\\"#bd3786\\\"],[0.5555555555555556,\\\"#d8576b\\\"],[0.6666666666666666,\\\"#ed7953\\\"],[0.7777777777777778,\\\"#fb9f3a\\\"],[0.8888888888888888,\\\"#fdca26\\\"],[1.0,\\\"#f0f921\\\"]]}],\\\"heatmapgl\\\":[{\\\"type\\\":\\\"heatmapgl\\\",\\\"colorbar\\\":{\\\"outlinewidth\\\":0,\\\"ticks\\\":\\\"\\\"},\\\"colorscale\\\":[[0.0,\\\"#0d0887\\\"],[0.1111111111111111,\\\"#46039f\\\"],[0.2222222222222222,\\\"#7201a8\\\"],[0.3333333333333333,\\\"#9c179e\\\"],[0.4444444444444444,\\\"#bd3786\\\"],[0.5555555555555556,\\\"#d8576b\\\"],[0.6666666666666666,\\\"#ed7953\\\"],[0.7777777777777778,\\\"#fb9f3a\\\"],[0.8888888888888888,\\\"#fdca26\\\"],[1.0,\\\"#f0f921\\\"]]}],\\\"contourcarpet\\\":[{\\\"type\\\":\\\"contourcarpet\\\",\\\"colorbar\\\":{\\\"outlinewidth\\\":0,\\\"ticks\\\":\\\"\\\"}}],\\\"contour\\\":[{\\\"type\\\":\\\"contour\\\",\\\"colorbar\\\":{\\\"outlinewidth\\\":0,\\\"ticks\\\":\\\"\\\"},\\\"colorscale\\\":[[0.0,\\\"#0d0887\\\"],[0.1111111111111111,\\\"#46039f\\\"],[0.2222222222222222,\\\"#7201a8\\\"],[0.3333333333333333,\\\"#9c179e\\\"],[0.4444444444444444,\\\"#bd3786\\\"],[0.5555555555555556,\\\"#d8576b\\\"],[0.6666666666666666,\\\"#ed7953\\\"],[0.7777777777777778,\\\"#fb9f3a\\\"],[0.8888888888888888,\\\"#fdca26\\\"],[1.0,\\\"#f0f921\\\"]]}],\\\"surface\\\":[{\\\"type\\\":\\\"surface\\\",\\\"colorbar\\\":{\\\"outlinewidth\\\":0,\\\"ticks\\\":\\\"\\\"},\\\"colorscale\\\":[[0.0,\\\"#0d0887\\\"],[0.1111111111111111,\\\"#46039f\\\"],[0.2222222222222222,\\\"#7201a8\\\"],[0.3333333333333333,\\\"#9c179e\\\"],[0.4444444444444444,\\\"#bd3786\\\"],[0.5555555555555556,\\\"#d8576b\\\"],[0.6666666666666666,\\\"#ed7953\\\"],[0.7777777777777778,\\\"#fb9f3a\\\"],[0.8888888888888888,\\\"#fdca26\\\"],[1.0,\\\"#f0f921\\\"]]}],\\\"mesh3d\\\":[{\\\"type\\\":\\\"mesh3d\\\",\\\"colorbar\\\":{\\\"outlinewidth\\\":0,\\\"ticks\\\":\\\"\\\"}}],\\\"scatter\\\":[{\\\"fillpattern\\\":{\\\"fillmode\\\":\\\"overlay\\\",\\\"size\\\":10,\\\"solidity\\\":0.2},\\\"type\\\":\\\"scatter\\\"}],\\\"parcoords\\\":[{\\\"type\\\":\\\"parcoords\\\",\\\"line\\\":{\\\"colorbar\\\":{\\\"outlinewidth\\\":0,\\\"ticks\\\":\\\"\\\"}}}],\\\"scatterpolargl\\\":[{\\\"type\\\":\\\"scatterpolargl\\\",\\\"marker\\\":{\\\"colorbar\\\":{\\\"outlinewidth\\\":0,\\\"ticks\\\":\\\"\\\"}}}],\\\"bar\\\":[{\\\"error_x\\\":{\\\"color\\\":\\\"#2a3f5f\\\"},\\\"error_y\\\":{\\\"color\\\":\\\"#2a3f5f\\\"},\\\"marker\\\":{\\\"line\\\":{\\\"color\\\":\\\"#E5ECF6\\\",\\\"width\\\":0.5},\\\"pattern\\\":{\\\"fillmode\\\":\\\"overlay\\\",\\\"size\\\":10,\\\"solidity\\\":0.2}},\\\"type\\\":\\\"bar\\\"}],\\\"scattergeo\\\":[{\\\"type\\\":\\\"scattergeo\\\",\\\"marker\\\":{\\\"colorbar\\\":{\\\"outlinewidth\\\":0,\\\"ticks\\\":\\\"\\\"}}}],\\\"scatterpolar\\\":[{\\\"type\\\":\\\"scatterpolar\\\",\\\"marker\\\":{\\\"colorbar\\\":{\\\"outlinewidth\\\":0,\\\"ticks\\\":\\\"\\\"}}}],\\\"histogram\\\":[{\\\"marker\\\":{\\\"pattern\\\":{\\\"fillmode\\\":\\\"overlay\\\",\\\"size\\\":10,\\\"solidity\\\":0.2}},\\\"type\\\":\\\"histogram\\\"}],\\\"scattergl\\\":[{\\\"type\\\":\\\"scattergl\\\",\\\"marker\\\":{\\\"colorbar\\\":{\\\"outlinewidth\\\":0,\\\"ticks\\\":\\\"\\\"}}}],\\\"scatter3d\\\":[{\\\"type\\\":\\\"scatter3d\\\",\\\"line\\\":{\\\"colorbar\\\":{\\\"outlinewidth\\\":0,\\\"ticks\\\":\\\"\\\"}},\\\"marker\\\":{\\\"colorbar\\\":{\\\"outlinewidth\\\":0,\\\"ticks\\\":\\\"\\\"}}}],\\\"scattermapbox\\\":[{\\\"type\\\":\\\"scattermapbox\\\",\\\"marker\\\":{\\\"colorbar\\\":{\\\"outlinewidth\\\":0,\\\"ticks\\\":\\\"\\\"}}}],\\\"scatterternary\\\":[{\\\"type\\\":\\\"scatterternary\\\",\\\"marker\\\":{\\\"colorbar\\\":{\\\"outlinewidth\\\":0,\\\"ticks\\\":\\\"\\\"}}}],\\\"scattercarpet\\\":[{\\\"type\\\":\\\"scattercarpet\\\",\\\"marker\\\":{\\\"colorbar\\\":{\\\"outlinewidth\\\":0,\\\"ticks\\\":\\\"\\\"}}}],\\\"carpet\\\":[{\\\"aaxis\\\":{\\\"endlinecolor\\\":\\\"#2a3f5f\\\",\\\"gridcolor\\\":\\\"white\\\",\\\"linecolor\\\":\\\"white\\\",\\\"minorgridcolor\\\":\\\"white\\\",\\\"startlinecolor\\\":\\\"#2a3f5f\\\"},\\\"baxis\\\":{\\\"endlinecolor\\\":\\\"#2a3f5f\\\",\\\"gridcolor\\\":\\\"white\\\",\\\"linecolor\\\":\\\"white\\\",\\\"minorgridcolor\\\":\\\"white\\\",\\\"startlinecolor\\\":\\\"#2a3f5f\\\"},\\\"type\\\":\\\"carpet\\\"}],\\\"table\\\":[{\\\"cells\\\":{\\\"fill\\\":{\\\"color\\\":\\\"#EBF0F8\\\"},\\\"line\\\":{\\\"color\\\":\\\"white\\\"}},\\\"header\\\":{\\\"fill\\\":{\\\"color\\\":\\\"#C8D4E3\\\"},\\\"line\\\":{\\\"color\\\":\\\"white\\\"}},\\\"type\\\":\\\"table\\\"}],\\\"barpolar\\\":[{\\\"marker\\\":{\\\"line\\\":{\\\"color\\\":\\\"#E5ECF6\\\",\\\"width\\\":0.5},\\\"pattern\\\":{\\\"fillmode\\\":\\\"overlay\\\",\\\"size\\\":10,\\\"solidity\\\":0.2}},\\\"type\\\":\\\"barpolar\\\"}],\\\"pie\\\":[{\\\"automargin\\\":true,\\\"type\\\":\\\"pie\\\"}]},\\\"layout\\\":{\\\"autotypenumbers\\\":\\\"strict\\\",\\\"colorway\\\":[\\\"#636efa\\\",\\\"#EF553B\\\",\\\"#00cc96\\\",\\\"#ab63fa\\\",\\\"#FFA15A\\\",\\\"#19d3f3\\\",\\\"#FF6692\\\",\\\"#B6E880\\\",\\\"#FF97FF\\\",\\\"#FECB52\\\"],\\\"font\\\":{\\\"color\\\":\\\"#2a3f5f\\\"},\\\"hovermode\\\":\\\"closest\\\",\\\"hoverlabel\\\":{\\\"align\\\":\\\"left\\\"},\\\"paper_bgcolor\\\":\\\"white\\\",\\\"plot_bgcolor\\\":\\\"#E5ECF6\\\",\\\"polar\\\":{\\\"bgcolor\\\":\\\"#E5ECF6\\\",\\\"angularaxis\\\":{\\\"gridcolor\\\":\\\"white\\\",\\\"linecolor\\\":\\\"white\\\",\\\"ticks\\\":\\\"\\\"},\\\"radialaxis\\\":{\\\"gridcolor\\\":\\\"white\\\",\\\"linecolor\\\":\\\"white\\\",\\\"ticks\\\":\\\"\\\"}},\\\"ternary\\\":{\\\"bgcolor\\\":\\\"#E5ECF6\\\",\\\"aaxis\\\":{\\\"gridcolor\\\":\\\"white\\\",\\\"linecolor\\\":\\\"white\\\",\\\"ticks\\\":\\\"\\\"},\\\"baxis\\\":{\\\"gridcolor\\\":\\\"white\\\",\\\"linecolor\\\":\\\"white\\\",\\\"ticks\\\":\\\"\\\"},\\\"caxis\\\":{\\\"gridcolor\\\":\\\"white\\\",\\\"linecolor\\\":\\\"white\\\",\\\"ticks\\\":\\\"\\\"}},\\\"coloraxis\\\":{\\\"colorbar\\\":{\\\"outlinewidth\\\":0,\\\"ticks\\\":\\\"\\\"}},\\\"colorscale\\\":{\\\"sequential\\\":[[0.0,\\\"#0d0887\\\"],[0.1111111111111111,\\\"#46039f\\\"],[0.2222222222222222,\\\"#7201a8\\\"],[0.3333333333333333,\\\"#9c179e\\\"],[0.4444444444444444,\\\"#bd3786\\\"],[0.5555555555555556,\\\"#d8576b\\\"],[0.6666666666666666,\\\"#ed7953\\\"],[0.7777777777777778,\\\"#fb9f3a\\\"],[0.8888888888888888,\\\"#fdca26\\\"],[1.0,\\\"#f0f921\\\"]],\\\"sequentialminus\\\":[[0.0,\\\"#0d0887\\\"],[0.1111111111111111,\\\"#46039f\\\"],[0.2222222222222222,\\\"#7201a8\\\"],[0.3333333333333333,\\\"#9c179e\\\"],[0.4444444444444444,\\\"#bd3786\\\"],[0.5555555555555556,\\\"#d8576b\\\"],[0.6666666666666666,\\\"#ed7953\\\"],[0.7777777777777778,\\\"#fb9f3a\\\"],[0.8888888888888888,\\\"#fdca26\\\"],[1.0,\\\"#f0f921\\\"]],\\\"diverging\\\":[[0,\\\"#8e0152\\\"],[0.1,\\\"#c51b7d\\\"],[0.2,\\\"#de77ae\\\"],[0.3,\\\"#f1b6da\\\"],[0.4,\\\"#fde0ef\\\"],[0.5,\\\"#f7f7f7\\\"],[0.6,\\\"#e6f5d0\\\"],[0.7,\\\"#b8e186\\\"],[0.8,\\\"#7fbc41\\\"],[0.9,\\\"#4d9221\\\"],[1,\\\"#276419\\\"]]},\\\"xaxis\\\":{\\\"gridcolor\\\":\\\"white\\\",\\\"linecolor\\\":\\\"white\\\",\\\"ticks\\\":\\\"\\\",\\\"title\\\":{\\\"standoff\\\":15},\\\"zerolinecolor\\\":\\\"white\\\",\\\"automargin\\\":true,\\\"zerolinewidth\\\":2},\\\"yaxis\\\":{\\\"gridcolor\\\":\\\"white\\\",\\\"linecolor\\\":\\\"white\\\",\\\"ticks\\\":\\\"\\\",\\\"title\\\":{\\\"standoff\\\":15},\\\"zerolinecolor\\\":\\\"white\\\",\\\"automargin\\\":true,\\\"zerolinewidth\\\":2},\\\"scene\\\":{\\\"xaxis\\\":{\\\"backgroundcolor\\\":\\\"#E5ECF6\\\",\\\"gridcolor\\\":\\\"white\\\",\\\"linecolor\\\":\\\"white\\\",\\\"showbackground\\\":true,\\\"ticks\\\":\\\"\\\",\\\"zerolinecolor\\\":\\\"white\\\",\\\"gridwidth\\\":2},\\\"yaxis\\\":{\\\"backgroundcolor\\\":\\\"#E5ECF6\\\",\\\"gridcolor\\\":\\\"white\\\",\\\"linecolor\\\":\\\"white\\\",\\\"showbackground\\\":true,\\\"ticks\\\":\\\"\\\",\\\"zerolinecolor\\\":\\\"white\\\",\\\"gridwidth\\\":2},\\\"zaxis\\\":{\\\"backgroundcolor\\\":\\\"#E5ECF6\\\",\\\"gridcolor\\\":\\\"white\\\",\\\"linecolor\\\":\\\"white\\\",\\\"showbackground\\\":true,\\\"ticks\\\":\\\"\\\",\\\"zerolinecolor\\\":\\\"white\\\",\\\"gridwidth\\\":2}},\\\"shapedefaults\\\":{\\\"line\\\":{\\\"color\\\":\\\"#2a3f5f\\\"}},\\\"annotationdefaults\\\":{\\\"arrowcolor\\\":\\\"#2a3f5f\\\",\\\"arrowhead\\\":0,\\\"arrowwidth\\\":1},\\\"geo\\\":{\\\"bgcolor\\\":\\\"white\\\",\\\"landcolor\\\":\\\"#E5ECF6\\\",\\\"subunitcolor\\\":\\\"white\\\",\\\"showland\\\":true,\\\"showlakes\\\":true,\\\"lakecolor\\\":\\\"white\\\"},\\\"title\\\":{\\\"x\\\":0.05},\\\"mapbox\\\":{\\\"style\\\":\\\"light\\\"}}}},                        {\\\"responsive\\\": true}                    ).then(function(){\\n\",\n       \"                            \\n\",\n       \"var gd = document.getElementById('10e6d9be-ac39-4456-b54e-33be886804fc');\\n\",\n       \"var x = new MutationObserver(function (mutations, observer) {{\\n\",\n       \"        var display = window.getComputedStyle(gd).display;\\n\",\n       \"        if (!display || display === 'none') {{\\n\",\n       \"            console.log([gd, 'removed!']);\\n\",\n       \"            Plotly.purge(gd);\\n\",\n       \"            observer.disconnect();\\n\",\n       \"        }}\\n\",\n       \"}});\\n\",\n       \"\\n\",\n       \"// Listen for the removal of the full notebook cells\\n\",\n       \"var notebookContainer = gd.closest('#notebook-container');\\n\",\n       \"if (notebookContainer) {{\\n\",\n       \"    x.observe(notebookContainer, {childList: true});\\n\",\n       \"}}\\n\",\n       \"\\n\",\n       \"// Listen for the clearing of the current output cell\\n\",\n       \"var outputEl = gd.closest('.output');\\n\",\n       \"if (outputEl) {{\\n\",\n       \"    x.observe(outputEl, {childList: true});\\n\",\n       \"}}\\n\",\n       \"\\n\",\n       \"                        })                };                });            </script>        </div>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    }\n   ],\n   \"source\": [\n    \"pu.plot_timestep(sharpy_output, tstep=-1, minus_mstar=(wake_panels - 6), plotly=True,custom_scaling=False,z_compression=0.5)\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## Static simulation\\n\",\n    \"Next, we will run a static simulation of the previous system. We have already defined the required inputs for ``BeamLoader`` and ``AerogridLoader`` but we need to define the static solvers. We are going to use an FSI solver (``StaticCoupled``) that will include a structural solver (``NonLinearStatic``) and aerodynamic solver (``StaticUvlm``). \\n\",\n    \"\\n\",\n    \"We will use most of the default values but redefine some of them:\\n\",\n    \"- We assign the air density to all the solvers that need it\\n\",\n    \"- We turn off the gravity on the structural solver\\n\",\n    \"- We use a horseshoe solution without roll up for the aerodynamics\\n\",\n    \"- We define the velocity field against the wing\\n\",\n    \"- We do not use load steps in the FSI solver\\n\",\n    \"\\n\",\n    \"In the documentation you can find further information about the [modular framework](https://ic-sharpy.readthedocs.io/en/main/content/casefiles.html#modular-framework) and about the [solvers](https://ic-sharpy.readthedocs.io/en/main/content/solvers.html) and their inputs. \"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 23,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"# Define the simulation\\n\",\n    \"SimInfo.solvers['SHARPy']['flow'] = ['BeamLoader',\\n\",\n    \"                        'AerogridLoader',\\n\",\n    \"                        'StaticCoupled']\\n\",\n    \"\\n\",\n    \"SimInfo.set_variable_all_dicts('rho', air_density)\\n\",\n    \"\\n\",\n    \"SimInfo.solvers['SHARPy']['case'] = 'static'\\n\",\n    \"SimInfo.solvers['SHARPy']['write_screen'] = 'on'\\n\",\n    \"\\n\",\n    \"SimInfo.solvers['NonLinearStatic']['gravity_on'] = False\\n\",\n    \"\\n\",\n    \"SimInfo.solvers['StaticUvlm']['horseshoe'] = True\\n\",\n    \"SimInfo.solvers['StaticUvlm']['n_rollup'] = 0\\n\",\n    \"SimInfo.solvers['StaticUvlm']['velocity_field_generator'] = 'SteadyVelocityField'\\n\",\n    \"SimInfo.solvers['StaticUvlm']['velocity_field_input'] = {'u_inf' : WSP,\\n\",\n    \"                                                         'u_inf_direction' : np.array(\\n\",\n    \"                                                                                [np.cos(aoa_ini_deg*deg2rad),\\n\",\n    \"                                                                                 0.,\\n\",\n    \"                                                                                 np.sin(aoa_ini_deg*deg2rad)])}\\n\",\n    \"\\n\",\n    \"SimInfo.solvers['StaticCoupled']['structural_solver'] = 'NonLinearStatic'\\n\",\n    \"SimInfo.solvers['StaticCoupled']['structural_solver_settings'] = SimInfo.solvers['NonLinearStatic']\\n\",\n    \"SimInfo.solvers['StaticCoupled']['aero_solver'] = 'StaticUvlm'\\n\",\n    \"SimInfo.solvers['StaticCoupled']['aero_solver_settings'] = SimInfo.solvers['StaticUvlm']\\n\",\n    \"SimInfo.solvers['StaticCoupled']['n_load_steps'] = 0\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"The following functions create the input files required by SHARPy. For further information check:\\n\",\n    \"- [Configuration file](https://ic-sharpy.readthedocs.io/en/main/content/casefiles.html#solver-configuration-file)\\n\",\n    \"- [FEM input file](https://ic-sharpy.readthedocs.io/en/main/content/casefiles.html#fem-file)\\n\",\n    \"- [Aerodynamic input file](https://ic-sharpy.readthedocs.io/en/main/content/casefiles.html#aerodynamics-file)\\n\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 24,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"gc.clean_test_files(SimInfo.solvers['SHARPy']['route'], SimInfo.solvers['SHARPy']['case'])\\n\",\n    \"SimInfo.generate_solver_file()\\n\",\n    \"wing.generate_h5_files(SimInfo.solvers['SHARPy']['route'], SimInfo.solvers['SHARPy']['case'])\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 25,\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"name\": \"stdout\",\n     \"output_type\": \"stream\",\n     \"text\": [\n      \"--------------------------------------------------------------------------------\\u001b[0m\\n\",\n      \"            ######  ##     ##    ###    ########  ########  ##    ##\\u001b[0m\\n\",\n      \"           ##    ## ##     ##   ## ##   ##     ## ##     ##  ##  ##\\u001b[0m\\n\",\n      \"           ##       ##     ##  ##   ##  ##     ## ##     ##   ####\\u001b[0m\\n\",\n      \"            ######  ######### ##     ## ########  ########     ##\\u001b[0m\\n\",\n      \"                 ## ##     ## ######### ##   ##   ##           ##\\u001b[0m\\n\",\n      \"           ##    ## ##     ## ##     ## ##    ##  ##           ##\\u001b[0m\\n\",\n      \"            ######  ##     ## ##     ## ##     ## ##           ##\\u001b[0m\\n\",\n      \"--------------------------------------------------------------------------------\\u001b[0m\\n\",\n      \"Aeroelastics Lab, Aeronautics Department.\\u001b[0m\\n\",\n      \"    Copyright (c), Imperial College London.\\u001b[0m\\n\",\n      \"    All rights reserved.\\u001b[0m\\n\",\n      \"    License available at https://github.com/imperialcollegelondon/sharpy\\u001b[0m\\n\",\n      \"\\u001b[36mRunning SHARPy from /home/loca/Downloads/sharpy copy/sharpy/docs/source/content/example_notebooks\\u001b[0m\\n\",\n      \"\\u001b[36mSHARPy being run is in /home/loca/anaconda3/envs/sharpy/lib/python3.10/site-packages\\u001b[0m\\n\",\n      \"SHARPy output folder set\\u001b[0m\\n\",\n      \"\\u001b[34m\\t./output//static/\\u001b[0m\\n\",\n      \"\\u001b[36mGenerating an instance of BeamLoader\\u001b[0m\\n\",\n      \"\\u001b[36mGenerating an instance of AerogridLoader\\u001b[0m\\n\",\n      \"Variable dx1 has no assigned value in the settings file.\\u001b[0m\\n\",\n      \"\\u001b[34m    will default to the value: -1.0\\u001b[0m\\n\",\n      \"Variable ndx1 has no assigned value in the settings file.\\u001b[0m\\n\",\n      \"\\u001b[34m    will default to the value: 1\\u001b[0m\\n\",\n      \"Variable r has no assigned value in the settings file.\\u001b[0m\\n\",\n      \"\\u001b[34m    will default to the value: 1.0\\u001b[0m\\n\",\n      \"Variable dxmax has no assigned value in the settings file.\\u001b[0m\\n\",\n      \"\\u001b[34m    will default to the value: -1.0\\u001b[0m\\n\",\n      \"\\u001b[34mThe aerodynamic grid contains 1 surfaces\\u001b[0m\\n\",\n      \"\\u001b[34m  Surface 0, M=4, N=20\\u001b[0m\\n\",\n      \"     Wake 0, M=400, N=20\\u001b[0m\\n\",\n      \"  In total: 80 bound panels\\u001b[0m\\n\",\n      \"  In total: 8000 wake panels\\u001b[0m\\n\",\n      \"  Total number of panels = 8080\\u001b[0m\\n\"\n     ]\n    },\n    {\n     \"name\": \"stderr\",\n     \"output_type\": \"stream\",\n     \"text\": [\n      \"fatal: not a git repository (or any of the parent directories): .git\\n\"\n     ]\n    },\n    {\n     \"name\": \"stdout\",\n     \"output_type\": \"stream\",\n     \"text\": [\n      \"\\u001b[36mGenerating an instance of StaticCoupled\\u001b[0m\\n\",\n      \"\\u001b[36mGenerating an instance of NonLinearStatic\\u001b[0m\\n\",\n      \"\\u001b[36mGenerating an instance of StaticUvlm\\u001b[0m\\n\",\n      \"\\u001b[0m\\n\",\n      \"\\u001b[0m\\n\",\n      \"\\u001b[0m\\n\",\n      \"|=====|=====|============|==========|==========|==========|==========|==========|==========|\\u001b[0m\\n\",\n      \"|iter |step | log10(res) |    Fx    |    Fy    |    Fz    |    Mx    |    My    |    Mz    |\\u001b[0m\\n\",\n      \"|=====|=====|============|==========|==========|==========|==========|==========|==========|\\u001b[0m\\n\",\n      \"                      DeltaF      DeltaX         Res      ResRel      ResFrc   ResRelFrc      ResMmt   ResRelMmt         ErX       ErPos       ErPsi\\n\",\n      \"LoadStep Subiter      DeltaF     DeltaX          Res      ResRel      ResFrc   ResRelFrc      ResMmt   ResRelMmt         ErX       ErPos       ErPsi\\n\",\n      \"|  0  |  0  |  0.00000   | -0.0187  | -0.0006  |  0.6029  |  4.8229  |  0.1523  |  0.1495  |\\u001b[0m\\n\",\n      \"                      DeltaF      DeltaX         Res      ResRel      ResFrc   ResRelFrc      ResMmt   ResRelMmt         ErX       ErPos       ErPsi\\n\",\n      \"LoadStep Subiter      DeltaF     DeltaX          Res      ResRel      ResFrc   ResRelFrc      ResMmt   ResRelMmt         ErX       ErPos       ErPsi\\n\",\n      \"|  1  |  0  |  -9.22874  | -0.0188  | -0.0006  |  0.6043  |  4.8366  |  0.1526  |  0.1504  |\\u001b[0m\\n\",\n      \"\\u001b[36mFINISHED - Elapsed time = 1.3510996 seconds\\u001b[0m\\n\",\n      \"\\u001b[36mFINISHED - CPU process time = 5.6712286 seconds\\u001b[0m\\n\"\n     ]\n    }\n   ],\n   \"source\": [\n    \"# Running SHARPy again inside jupyter\\n\",\n    \"sharpy_output = sharpy.sharpy_main.main(['',\\n\",\n    \"                                         SimInfo.solvers['SHARPy']['route'] +\\n\",\n    \"                                         SimInfo.solvers['SHARPy']['case'] +\\n\",\n    \"                                         '.sharpy'])\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"The next function will plot the static equilibirium solution for the wing:\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 26,\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"data\": {\n      \"application/vnd.plotly.v1+json\": {\n       \"config\": {\n        \"plotlyServerURL\": \"https://plot.ly\"\n       },\n       \"data\": [\n        {\n         \"line\": {\n          \"color\": \"grey\"\n         },\n         \"mode\": \"lines\",\n         \"name\": \"Aero surface\",\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          -0.4375000000000001,\n          -0.18750000000000006,\n          -0.1875000237228303,\n          -0.4375000236873756,\n          -0.4375000000000001\n         ],\n         \"y\": [\n          -7.126160546901204e-18,\n          -3.054068805814802e-18,\n          0.8000022258875188,\n          0.8000051998112413,\n          -7.126160546901204e-18\n         ],\n         \"z\": [\n          -3.7885577460302824e-17,\n          -1.6236676054415498e-17,\n          7.752893514114484e-05,\n          8.050939904993674e-05,\n          -3.7885577460302824e-17\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"grey\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          -0.4375000236873756,\n          -0.1875000237228303,\n          -0.1875000627455803,\n          -0.43750006260819346,\n          -0.4375000236873756\n         ],\n         \"y\": [\n          0.8000051998112413,\n          0.8000022258875188,\n          1.600004355772871,\n          1.6000102094000985,\n          0.8000051998112413\n         ],\n         \"z\": [\n          8.050939904993674e-05,\n          7.752893514114484e-05,\n          0.0002946907979488142,\n          0.00030055837290183433,\n          8.050939904993674e-05\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"grey\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          -0.43750006260819346,\n          -0.1875000627455803,\n          -0.18750011356082813,\n          -0.43750011326728777,\n          -0.43750006260819346\n         ],\n         \"y\": [\n          1.6000102094000985,\n          1.600004355772871,\n          2.4000063093414794,\n          2.400014864900074,\n          1.6000102094000985\n         ],\n         \"z\": [\n          0.00030055837290183433,\n          0.0002946907979488142,\n          0.0006367385904886074,\n          0.000645316033046242,\n          0.00030055837290183433\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"grey\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          -0.43750011326728777,\n          -0.18750011356082813,\n          -0.18750017381202885,\n          -0.4375001733139123,\n          -0.43750011326728777\n         ],\n         \"y\": [\n          2.400014864900074,\n          2.4000063093414794,\n          3.200008122887067,\n          3.2000192670677388,\n          2.400014864900074\n         ],\n         \"z\": [\n          0.000645316033046242,\n          0.0006367385904886074,\n          0.001090003018371559,\n          0.001101177340912812,\n          0.000645316033046242\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"grey\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          -0.4375001733139123,\n          -0.18750017381202885,\n          -0.18750024087202166,\n          -0.4375002401368169,\n          -0.4375001733139123\n         ],\n         \"y\": [\n          3.2000192670677388,\n          3.200008122887067,\n          4.000009729344271,\n          4.000023267460916,\n          3.2000192670677388\n         ],\n         \"z\": [\n          0.001101177340912812,\n          0.001090003018371559,\n          0.0016411962247617027,\n          0.0016547727416050344,\n          0.001101177340912812\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"grey\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          -0.4375002401368169,\n          -0.18750024087202166,\n          -0.1875003132785193,\n          -0.4375003122753531,\n          -0.4375002401368169\n         ],\n         \"y\": [\n          4.000023267460916,\n          4.000009729344271,\n          4.800011182963365,\n          4.800026996061957,\n          4.000023267460916\n         ],\n         \"z\": [\n          0.0016547727416050344,\n          0.0016411962247617027,\n          0.002278231379164863,\n          0.0022940910454462126,\n          0.0016547727416050344\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"grey\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          -0.4375003122753531,\n          -0.1875003132785193,\n          -0.1875003891153329,\n          -0.43750038783161005,\n          -0.4375003122753531\n         ],\n         \"y\": [\n          4.800026996061957,\n          4.800011182963365,\n          5.6000124237463025,\n          5.600030311089138,\n          4.800026996061957\n         ],\n         \"z\": [\n          0.0022940910454462126,\n          0.002278231379164863,\n          0.002989419809327907,\n          0.003007361504251719,\n          0.0022940910454462126\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"grey\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          -0.43750038783161005,\n          -0.1875003891153329,\n          -0.18750046758303424,\n          -0.43750046600357495,\n          -0.43750038783161005\n         ],\n         \"y\": [\n          5.600030311089138,\n          5.6000124237463025,\n          6.400013514431788,\n          6.4000333547312875,\n          5.600030311089138\n         ],\n         \"z\": [\n          0.003007361504251719,\n          0.002989419809327907,\n          0.0037643153101892014,\n          0.0037842173728184353,\n          0.003007361504251719\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"grey\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          -0.43750046600357495,\n          -0.18750046758303424,\n          -0.18750054731387217,\n          -0.43750054544343747,\n          -0.43750046600357495\n         ],\n         \"y\": [\n          6.4000333547312875,\n          6.400013514431788,\n          7.20001439891522,\n          7.200035988878993,\n          6.4000333547312875\n         ],\n         \"z\": [\n          0.0037842173728184353,\n          0.0037643153101892014,\n          0.004592877438281733,\n          0.00461453594247971,\n          0.0037842173728184353\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"grey\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          -0.43750054544343747,\n          -0.18750054731387217,\n          -0.187500627992497,\n          -0.4375006258293518,\n          -0.43750054544343747\n         ],\n         \"y\": [\n          7.200035988878993,\n          7.20001439891522,\n          8.000015143951318,\n          8.000038361345101,\n          7.200035988878993\n         ],\n         \"z\": [\n          0.00461453594247971,\n          0.004592877438281733,\n          0.005466325160662682,\n          0.005489617331180315,\n          0.00461453594247971\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"grey\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          -0.4375006258293518,\n          -0.187500627992497,\n          -0.18750070865375484,\n          -0.4375007062171683,\n          -0.4375006258293518\n         ],\n         \"y\": [\n          8.000038361345101,\n          8.000015143951318,\n          8.800015695169904,\n          8.80004033591147,\n          8.000038361345101\n         ],\n         \"z\": [\n          0.005489617331180315,\n          0.005466325160662682,\n          0.006376286273275938,\n          0.0064010072583238825,\n          0.005489617331180315\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"grey\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          -0.4375007062171683,\n          -0.18750070865375484,\n          -0.1875007893187073,\n          -0.43750078661795866,\n          -0.4375007062171683\n         ],\n         \"y\": [\n          8.80004033591147,\n          8.800015695169904,\n          9.600016120600648,\n          9.600042062380043,\n          8.80004033591147\n         ],\n         \"z\": [\n          0.0064010072583238825,\n          0.006376286273275938,\n          0.007315653004851139,\n          0.007341679882890364,\n          0.0064010072583238825\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"grey\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          -0.43750078661795866,\n          -0.1875007893187073,\n          -0.18750086930210966,\n          -0.4375008663679509,\n          -0.43750078661795866\n         ],\n         \"y\": [\n          9.600042062380043,\n          9.600016120600648,\n          10.40001636630499,\n          10.400043405634353,\n          9.600042062380043\n         ],\n         \"z\": [\n          0.007341679882890364,\n          0.007315653004851139,\n          0.008277726524304333,\n          0.008304854997333818,\n          0.007341679882890364\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"grey\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          -0.4375008663679509,\n          -0.18750086930210966,\n          -0.1875009488408821,\n          -0.4375009456910473,\n          -0.4375008663679509\n         ],\n         \"y\": [\n          10.400043405634353,\n          10.40001636630499,\n          11.200016499826141,\n          11.200044515189864,\n          10.400043405634353\n         ],\n         \"z\": [\n          0.008304854997333818,\n          0.008277726524304333,\n          0.009257068207257402,\n          0.009285176155695221,\n          0.008304854997333818\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"grey\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          -0.4375009456910473,\n          -0.1875009488408821,\n          -0.18750102743479913,\n          -0.4375010241082931,\n          -0.4375009456910473\n         ],\n         \"y\": [\n          11.200044515189864,\n          11.200016499826141,\n          12.000016467265384,\n          12.000045257535799,\n          11.200044515189864\n         ],\n         \"z\": [\n          0.009285176155695221,\n          0.009257068207257402,\n          0.01024864552259437,\n          0.0102775310435586,\n          0.009285176155695221\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"grey\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          -0.4375010241082931,\n          -0.18750102743479913,\n          -0.18750110544179802,\n          -0.43750110196207914,\n          -0.4375010241082931\n         ],\n         \"y\": [\n          12.000045257535799,\n          12.000016467265384,\n          12.800016334581887,\n          12.800045780422645,\n          12.000045257535799\n         ],\n         \"z\": [\n          0.0102775310435586,\n          0.01024864552259437,\n          0.01124866997069216,\n          0.011278213190779474,\n          0.0102775310435586\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"grey\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          -0.43750110196207914,\n          -0.18750110544179802,\n          -0.18750118248733483,\n          -0.43750117889798307,\n          -0.43750110196207914\n         ],\n         \"y\": [\n          12.800045780422645,\n          12.800016334581887,\n          13.600016048933623,\n          13.600045955079421,\n          12.800045780422645\n         ],\n         \"z\": [\n          0.011278213190779474,\n          0.01124866997069216,\n          0.012253751753734908,\n          0.012283756724918393,\n          0.011278213190779474\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"grey\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          -0.43750117889798307,\n          -0.18750118248733483,\n          -0.18750125898039016,\n          -0.43750125530740736,\n          -0.43750117889798307\n         ],\n         \"y\": [\n          13.600045955079421,\n          13.600016048933623,\n          14.400015674183493,\n          14.400045926789915,\n          13.600045955079421\n         ],\n         \"z\": [\n          0.012283756724918393,\n          0.012253751753734908,\n          0.013261704347121926,\n          0.013292056796790585,\n          0.012283756724918393\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"grey\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          -0.43750125530740736,\n          -0.18750125898039016,\n          -0.18750133467799002,\n          -0.43750133096412286,\n          -0.43750125530740736\n         ],\n         \"y\": [\n          14.400045926789915,\n          14.400015674183493,\n          15.200015164032955,\n          15.200045584583822,\n          14.400045926789915\n         ],\n         \"z\": [\n          0.013292056796790585,\n          0.013261704347121926,\n          0.0142707234002452,\n          0.014301244272439662,\n          0.013292056796790585\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"grey\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          -0.43750133096412286,\n          -0.18750133467799002,\n          -0.1875014100029893,\n          -0.4375014062712665,\n          -0.43750133096412286\n         ],\n         \"y\": [\n          15.200045584583822,\n          15.200015164032955,\n          16.000014582198226,\n          16.000045075811887,\n          15.200045584583822\n         ],\n         \"z\": [\n          0.014301244272439662,\n          0.0142707234002452,\n          0.01528008489372113,\n          0.015310679025836462,\n          0.014301244272439662\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"grey\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          -0.18750000000000006,\n          0.06250000000000001,\n          0.062499976241714925,\n          -0.1875000237228303,\n          -0.18750000000000006\n         ],\n         \"y\": [\n          -3.054068805814802e-18,\n          1.0180229352716006e-18,\n          0.7999992519637964,\n          0.8000022258875188,\n          -3.054068805814802e-18\n         ],\n         \"z\": [\n          -1.6236676054415498e-17,\n          5.412225351471832e-18,\n          7.454847123235294e-05,\n          7.752893514114484e-05,\n          -1.6236676054415498e-17\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"grey\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          -0.1875000237228303,\n          0.062499976241714925,\n          0.06249993711703296,\n          -0.1875000627455803,\n          -0.1875000237228303\n         ],\n         \"y\": [\n          0.8000022258875188,\n          0.7999992519637964,\n          1.599998502145643,\n          1.600004355772871,\n          0.8000022258875188\n         ],\n         \"z\": [\n          7.752893514114484e-05,\n          7.454847123235294e-05,\n          0.000288823222995794,\n          0.0002946907979488142,\n          7.752893514114484e-05\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"grey\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          -0.1875000627455803,\n          0.06249993711703296,\n          0.06249988614563157,\n          -0.18750011356082813,\n          -0.1875000627455803\n         ],\n         \"y\": [\n          1.600004355772871,\n          1.599998502145643,\n          2.3999977537828854,\n          2.4000063093414794,\n          1.600004355772871\n         ],\n         \"z\": [\n          0.0002946907979488142,\n          0.000288823222995794,\n          0.0006281611479309727,\n          0.0006367385904886074,\n          0.0002946907979488142\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"grey\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          -0.18750011356082813,\n          0.06249988614563157,\n          0.06249982568985464,\n          -0.18750017381202885,\n          -0.18750011356082813\n         ],\n         \"y\": [\n          2.4000063093414794,\n          2.3999977537828854,\n          3.199996978706395,\n          3.200008122887067,\n          2.4000063093414794\n         ],\n         \"z\": [\n          0.0006367385904886074,\n          0.0006281611479309727,\n          0.0010788286958303061,\n          0.001090003018371559,\n          0.0006367385904886074\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"grey\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          -0.18750017381202885,\n          0.06249982568985464,\n          0.06249975839277351,\n          -0.18750024087202166,\n          -0.18750017381202885\n         ],\n         \"y\": [\n          3.200008122887067,\n          3.199996978706395,\n          3.9999961912276247,\n          4.000009729344271,\n          3.200008122887067\n         ],\n         \"z\": [\n          0.001090003018371559,\n          0.0010788286958303061,\n          0.0016276197079183711,\n          0.0016411962247617027,\n          0.001090003018371559\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"grey\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          -0.18750024087202166,\n          0.06249975839277351,\n          0.06249968571831458,\n          -0.1875003132785193,\n          -0.18750024087202166\n         ],\n         \"y\": [\n          4.000009729344271,\n          3.9999961912276247,\n          4.799995369864772,\n          4.800011182963365,\n          4.000009729344271\n         ],\n         \"z\": [\n          0.0016411962247617027,\n          0.0016276197079183711,\n          0.002262371712883513,\n          0.002278231379164863,\n          0.0016411962247617027\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"grey\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          -0.1875003132785193,\n          0.06249968571831458,\n          0.06249960960094422,\n          -0.1875003891153329,\n          -0.1875003132785193\n         ],\n         \"y\": [\n          4.800011182963365,\n          4.799995369864772,\n          5.599994536403467,\n          5.6000124237463025,\n          4.800011182963365\n         ],\n         \"z\": [\n          0.002278231379164863,\n          0.002262371712883513,\n          0.002971478114404095,\n          0.002989419809327907,\n          0.002278231379164863\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"grey\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          -0.1875003891153329,\n          0.06249960960094422,\n          0.06249953083750652,\n          -0.18750046758303424,\n          -0.1875003891153329\n         ],\n         \"y\": [\n          5.6000124237463025,\n          5.599994536403467,\n          6.399993674132288,\n          6.400013514431788,\n          5.6000124237463025\n         ],\n         \"z\": [\n          0.002989419809327907,\n          0.002971478114404095,\n          0.0037444132475599676,\n          0.0037643153101892014,\n          0.002989419809327907\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"grey\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          -0.18750046758303424,\n          0.06249953083750652,\n          0.06249945081569314,\n          -0.18750054731387217,\n          -0.18750046758303424\n         ],\n         \"y\": [\n          6.400013514431788,\n          6.399993674132288,\n          7.199992808951447,\n          7.20001439891522,\n          6.400013514431788\n         ],\n         \"z\": [\n          0.0037643153101892014,\n          0.0037444132475599676,\n          0.0045712189340837575,\n          0.004592877438281733,\n          0.0037643153101892014\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"grey\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          -0.18750054731387217,\n          0.06249945081569314,\n          0.062499369844357826,\n          -0.187500627992497,\n          -0.18750054731387217\n         ],\n         \"y\": [\n          7.20001439891522,\n          7.199992808951447,\n          7.999991926557534,\n          8.000015143951318,\n          7.20001439891522\n         ],\n         \"z\": [\n          0.004592877438281733,\n          0.0045712189340837575,\n          0.005443032990145048,\n          0.005466325160662682,\n          0.004592877438281733\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"grey\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          -0.187500627992497,\n          0.062499369844357826,\n          0.06249928890965862,\n          -0.18750070865375484,\n          -0.187500627992497\n         ],\n         \"y\": [\n          8.000015143951318,\n          7.999991926557534,\n          8.799991054428338,\n          8.800015695169904,\n          8.000015143951318\n         ],\n         \"z\": [\n          0.005466325160662682,\n          0.005443032990145048,\n          0.006351565288227993,\n          0.006376286273275938,\n          0.005466325160662682\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"grey\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          -0.18750070865375484,\n          0.06249928890965862,\n          0.062499207980544064,\n          -0.1875007893187073,\n          -0.18750070865375484\n         ],\n         \"y\": [\n          8.800015695169904,\n          8.799991054428338,\n          9.599990178821255,\n          9.600016120600648,\n          8.800015695169904\n         ],\n         \"z\": [\n          0.006376286273275938,\n          0.006351565288227993,\n          0.007289626126811912,\n          0.007315653004851139,\n          0.006376286273275938\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"grey\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          -0.1875007893187073,\n          0.062499207980544064,\n          0.06249912776373148,\n          -0.18750086930210966,\n          -0.1875007893187073\n         ],\n         \"y\": [\n          9.600016120600648,\n          9.599990178821255,\n          10.399989326975627,\n          10.40001636630499,\n          9.600016120600648\n         ],\n         \"z\": [\n          0.007315653004851139,\n          0.007289626126811912,\n          0.008250598051274849,\n          0.008277726524304333,\n          0.007315653004851139\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"grey\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          -0.18750086930210966,\n          0.06249912776373148,\n          0.06249904800928315,\n          -0.1875009488408821,\n          -0.18750086930210966\n         ],\n         \"y\": [\n          10.40001636630499,\n          10.399989326975627,\n          11.19998848446242,\n          11.200016499826141,\n          10.40001636630499\n         ],\n         \"z\": [\n          0.008277726524304333,\n          0.008250598051274849,\n          0.009228960258819583,\n          0.009257068207257402,\n          0.008277726524304333\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"grey\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          -0.1875009488408821,\n          0.06249904800928315,\n          0.06249896923869486,\n          -0.18750102743479913,\n          -0.1875009488408821\n         ],\n         \"y\": [\n          11.200016499826141,\n          11.19998848446242,\n          11.999987676994971,\n          12.000016467265384,\n          11.200016499826141\n         ],\n         \"z\": [\n          0.009257068207257402,\n          0.009228960258819583,\n          0.010219760001630138,\n          0.01024864552259437,\n          0.009257068207257402\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"grey\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          -0.18750102743479913,\n          0.06249896923869486,\n          0.06249889107848312,\n          -0.18750110544179802,\n          -0.18750102743479913\n         ],\n         \"y\": [\n          12.000016467265384,\n          11.999987676994971,\n          12.79998688874113,\n          12.800016334581887,\n          12.000016467265384\n         ],\n         \"z\": [\n          0.01024864552259437,\n          0.010219760001630138,\n          0.011219126750604847,\n          0.01124866997069216,\n          0.01024864552259437\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"grey\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          -0.18750110544179802,\n          0.06249889107848312,\n          0.06249881392331345,\n          -0.18750118248733483,\n          -0.18750110544179802\n         ],\n         \"y\": [\n          12.800016334581887,\n          12.79998688874113,\n          13.599986142787827,\n          13.600016048933623,\n          12.800016334581887\n         ],\n         \"z\": [\n          0.01124866997069216,\n          0.011219126750604847,\n          0.012223746782551424,\n          0.012253751753734908,\n          0.01124866997069216\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"grey\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          -0.18750118248733483,\n          0.06249881392331345,\n          0.06249873734662704,\n          -0.18750125898039016,\n          -0.18750118248733483\n         ],\n         \"y\": [\n          13.600016048933623,\n          13.599986142787827,\n          14.39998542157707,\n          14.400015674183493,\n          13.600016048933623\n         ],\n         \"z\": [\n          0.012253751753734908,\n          0.012223746782551424,\n          0.013231351897453265,\n          0.013261704347121926,\n          0.012253751753734908\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"grey\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          -0.18750125898039016,\n          0.06249873734662704,\n          0.06249866160814282,\n          -0.18750133467799002,\n          -0.18750125898039016\n         ],\n         \"y\": [\n          14.400015674183493,\n          14.39998542157707,\n          15.199984743482087,\n          15.200015164032955,\n          14.400015674183493\n         ],\n         \"z\": [\n          0.013261704347121926,\n          0.013231351897453265,\n          0.01424020252805074,\n          0.0142707234002452,\n          0.013261704347121926\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"grey\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          -0.18750133467799002,\n          0.06249866160814282,\n          0.06249858626528794,\n          -0.1875014100029893,\n          -0.18750133467799002\n         ],\n         \"y\": [\n          15.200015164032955,\n          15.199984743482087,\n          15.999984088584561,\n          16.000014582198226,\n          15.200015164032955\n         ],\n         \"z\": [\n          0.0142707234002452,\n          0.01424020252805074,\n          0.015249490761605795,\n          0.01528008489372113,\n          0.0142707234002452\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"grey\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          0.06250000000000001,\n          0.31250000000000006,\n          0.3124999762062602,\n          0.062499976241714925,\n          0.06250000000000001\n         ],\n         \"y\": [\n          1.0180229352716006e-18,\n          5.090114676358003e-18,\n          0.799996278040074,\n          0.7999992519637964,\n          1.0180229352716006e-18\n         ],\n         \"z\": [\n          5.412225351471832e-18,\n          2.706112675735916e-17,\n          7.156800732356103e-05,\n          7.454847123235294e-05,\n          5.412225351471832e-18\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"grey\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          0.062499976241714925,\n          0.3124999762062602,\n          0.3124999369796462,\n          0.06249993711703296,\n          0.062499976241714925\n         ],\n         \"y\": [\n          0.7999992519637964,\n          0.799996278040074,\n          1.5999926485184153,\n          1.599998502145643,\n          0.7999992519637964\n         ],\n         \"z\": [\n          7.454847123235294e-05,\n          7.156800732356103e-05,\n          0.0002829556480427738,\n          0.000288823222995794,\n          7.454847123235294e-05\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"grey\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          0.06249993711703296,\n          0.3124999369796462,\n          0.31249988585209126,\n          0.06249988614563157,\n          0.06249993711703296\n         ],\n         \"y\": [\n          1.599998502145643,\n          1.5999926485184153,\n          2.3999891982242914,\n          2.3999977537828854,\n          1.599998502145643\n         ],\n         \"z\": [\n          0.000288823222995794,\n          0.0002829556480427738,\n          0.000619583705373338,\n          0.0006281611479309727,\n          0.000288823222995794\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"grey\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          0.06249988614563157,\n          0.31249988585209126,\n          0.31249982519173813,\n          0.06249982568985464,\n          0.06249988614563157\n         ],\n         \"y\": [\n          2.3999977537828854,\n          2.3999891982242914,\n          3.199985834525723,\n          3.199996978706395,\n          2.3999977537828854\n         ],\n         \"z\": [\n          0.0006281611479309727,\n          0.000619583705373338,\n          0.0010676543732890532,\n          0.0010788286958303061,\n          0.0006281611479309727\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"grey\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          0.06249982568985464,\n          0.31249982519173813,\n          0.3124997576575687,\n          0.06249975839277351,\n          0.06249982568985464\n         ],\n         \"y\": [\n          3.199996978706395,\n          3.199985834525723,\n          3.999982653110979,\n          3.9999961912276247,\n          3.199996978706395\n         ],\n         \"z\": [\n          0.0010788286958303061,\n          0.0010676543732890532,\n          0.0016140431910750396,\n          0.0016276197079183711,\n          0.0010788286958303061\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"grey\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          0.06249975839277351,\n          0.3124997576575687,\n          0.31249968471514844,\n          0.06249968571831458,\n          0.06249975839277351\n         ],\n         \"y\": [\n          3.9999961912276247,\n          3.999982653110979,\n          4.7999795567661785,\n          4.799995369864772,\n          3.9999961912276247\n         ],\n         \"z\": [\n          0.0016276197079183711,\n          0.0016140431910750396,\n          0.002246512046602163,\n          0.002262371712883513,\n          0.0016276197079183711\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"grey\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          0.06249968571831458,\n          0.31249968471514844,\n          0.31249960831722134,\n          0.06249960960094422,\n          0.06249968571831458\n         ],\n         \"y\": [\n          4.799995369864772,\n          4.7999795567661785,\n          5.599976649060632,\n          5.599994536403467,\n          4.799995369864772\n         ],\n         \"z\": [\n          0.002262371712883513,\n          0.002246512046602163,\n          0.0029535364194802835,\n          0.002971478114404095,\n          0.002262371712883513\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"grey\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          0.06249960960094422,\n          0.31249960831722134,\n          0.31249952925804725,\n          0.06249953083750652,\n          0.06249960960094422\n         ],\n         \"y\": [\n          5.599994536403467,\n          5.599976649060632,\n          6.399973833832788,\n          6.399993674132288,\n          5.599994536403467\n         ],\n         \"z\": [\n          0.002971478114404095,\n          0.0029535364194802835,\n          0.0037245111849307337,\n          0.0037444132475599676,\n          0.002971478114404095\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"grey\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          0.06249953083750652,\n          0.31249952925804725,\n          0.3124994489452585,\n          0.06249945081569314,\n          0.06249953083750652\n         ],\n         \"y\": [\n          6.399993674132288,\n          6.399973833832788,\n          7.199971218987674,\n          7.199992808951447,\n          6.399993674132288\n         ],\n         \"z\": [\n          0.0037444132475599676,\n          0.0037245111849307337,\n          0.004549560429885782,\n          0.0045712189340837575,\n          0.0037444132475599676\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"grey\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          0.06249945081569314,\n          0.3124994489452585,\n          0.3124993676812126,\n          0.062499369844357826,\n          0.06249945081569314\n         ],\n         \"y\": [\n          7.199992808951447,\n          7.199971218987674,\n          7.999968709163751,\n          7.999991926557534,\n          7.199992808951447\n         ],\n         \"z\": [\n          0.0045712189340837575,\n          0.004549560429885782,\n          0.005419740819627414,\n          0.005443032990145048,\n          0.0045712189340837575\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"grey\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          0.062499369844357826,\n          0.3124993676812126,\n          0.31249928647307207,\n          0.06249928890965862,\n          0.062499369844357826\n         ],\n         \"y\": [\n          7.999991926557534,\n          7.999968709163751,\n          8.799966413686771,\n          8.799991054428338,\n          7.999991926557534\n         ],\n         \"z\": [\n          0.005443032990145048,\n          0.005419740819627414,\n          0.006326844303180048,\n          0.006351565288227993,\n          0.005443032990145048\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"grey\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          0.06249928890965862,\n          0.31249928647307207,\n          0.3124992052797954,\n          0.062499207980544064,\n          0.06249928890965862\n         ],\n         \"y\": [\n          8.799991054428338,\n          8.799966413686771,\n          9.599964237041862,\n          9.599990178821255,\n          8.799991054428338\n         ],\n         \"z\": [\n          0.006351565288227993,\n          0.006326844303180048,\n          0.0072635992487726855,\n          0.007289626126811912,\n          0.006351565288227993\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"grey\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          0.062499207980544064,\n          0.3124992052797954,\n          0.31249912482957265,\n          0.06249912776373148,\n          0.062499207980544064\n         ],\n         \"y\": [\n          9.599990178821255,\n          9.599964237041862,\n          10.399962287646263,\n          10.399989326975627,\n          9.599990178821255\n         ],\n         \"z\": [\n          0.007289626126811912,\n          0.0072635992487726855,\n          0.008223469578245364,\n          0.008250598051274849,\n          0.007289626126811912\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"grey\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          0.06249912776373148,\n          0.31249912482957265,\n          0.3124990448594484,\n          0.06249904800928315,\n          0.06249912776373148\n         ],\n         \"y\": [\n          10.399989326975627,\n          10.399962287646263,\n          11.199960469098698,\n          11.19998848446242,\n          10.399989326975627\n         ],\n         \"z\": [\n          0.008250598051274849,\n          0.008223469578245364,\n          0.009200852310381764,\n          0.009228960258819583,\n          0.008250598051274849\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"grey\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          0.06249904800928315,\n          0.3124990448594484,\n          0.31249896591218884,\n          0.06249896923869486,\n          0.06249904800928315\n         ],\n         \"y\": [\n          11.19998848446242,\n          11.199960469098698,\n          11.999958886724558,\n          11.999987676994971,\n          11.19998848446242\n         ],\n         \"z\": [\n          0.009228960258819583,\n          0.009200852310381764,\n          0.010190874480665907,\n          0.010219760001630138,\n          0.009228960258819583\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"grey\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          0.06249896923869486,\n          0.31249896591218884,\n          0.31249888759876426,\n          0.06249889107848312,\n          0.06249896923869486\n         ],\n         \"y\": [\n          11.999987676994971,\n          11.999958886724558,\n          12.799957442900372,\n          12.79998688874113,\n          11.999987676994971\n         ],\n         \"z\": [\n          0.010219760001630138,\n          0.010190874480665907,\n          0.011189583530517534,\n          0.011219126750604847,\n          0.010219760001630138\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"grey\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          0.06249889107848312,\n          0.31249888759876426,\n          0.3124988103339617,\n          0.06249881392331345,\n          0.06249889107848312\n         ],\n         \"y\": [\n          12.79998688874113,\n          12.799957442900372,\n          13.599956236642031,\n          13.599986142787827,\n          12.79998688874113\n         ],\n         \"z\": [\n          0.011219126750604847,\n          0.011189583530517534,\n          0.012193741811367939,\n          0.012223746782551424,\n          0.011219126750604847\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"grey\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          0.06249881392331345,\n          0.3124988103339617,\n          0.3124987336736442,\n          0.06249873734662704,\n          0.06249881392331345\n         ],\n         \"y\": [\n          13.599986142787827,\n          13.599956236642031,\n          14.399955168970646,\n          14.39998542157707,\n          13.599986142787827\n         ],\n         \"z\": [\n          0.012223746782551424,\n          0.012193741811367939,\n          0.013200999447784604,\n          0.013231351897453265,\n          0.012223746782551424\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"grey\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          0.06249873734662704,\n          0.3124987336736442,\n          0.31249865789427567,\n          0.06249866160814282,\n          0.06249873734662704\n         ],\n         \"y\": [\n          14.39998542157707,\n          14.399955168970646,\n          15.19995432293122,\n          15.199984743482087,\n          14.39998542157707\n         ],\n         \"z\": [\n          0.013231351897453265,\n          0.013200999447784604,\n          0.01420968165585628,\n          0.01424020252805074,\n          0.013231351897453265\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"grey\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          0.06249866160814282,\n          0.31249865789427567,\n          0.31249858253356516,\n          0.06249858626528794,\n          0.06249866160814282\n         ],\n         \"y\": [\n          15.199984743482087,\n          15.19995432293122,\n          15.999953594970899,\n          15.999984088584561,\n          15.199984743482087\n         ],\n         \"z\": [\n          0.01424020252805074,\n          0.01420968165585628,\n          0.01521889662949046,\n          0.015249490761605795,\n          0.01424020252805074\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"grey\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          0.31250000000000006,\n          0.5625000000000001,\n          0.5624999761708054,\n          0.3124999762062602,\n          0.31250000000000006\n         ],\n         \"y\": [\n          5.090114676358003e-18,\n          9.162206417444405e-18,\n          0.7999933041163515,\n          0.799996278040074,\n          5.090114676358003e-18\n         ],\n         \"z\": [\n          2.706112675735916e-17,\n          4.871002816324649e-17,\n          6.858754341476913e-05,\n          7.156800732356103e-05,\n          2.706112675735916e-17\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"grey\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          0.3124999762062602,\n          0.5624999761708054,\n          0.5624999368422594,\n          0.3124999369796462,\n          0.3124999762062602\n         ],\n         \"y\": [\n          0.799996278040074,\n          0.7999933041163515,\n          1.5999867948911877,\n          1.5999926485184153,\n          0.799996278040074\n         ],\n         \"z\": [\n          7.156800732356103e-05,\n          6.858754341476913e-05,\n          0.00027708807308975364,\n          0.0002829556480427738,\n          7.156800732356103e-05\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"grey\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          0.3124999369796462,\n          0.5624999368422594,\n          0.562499885558551,\n          0.31249988585209126,\n          0.3124999369796462\n         ],\n         \"y\": [\n          1.5999926485184153,\n          1.5999867948911877,\n          2.399980642665697,\n          2.3999891982242914,\n          1.5999926485184153\n         ],\n         \"z\": [\n          0.0002829556480427738,\n          0.00027708807308975364,\n          0.0006110062628157034,\n          0.000619583705373338,\n          0.0002829556480427738\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"grey\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          0.31249988585209126,\n          0.562499885558551,\n          0.5624998246936216,\n          0.31249982519173813,\n          0.31249988585209126\n         ],\n         \"y\": [\n          2.3999891982242914,\n          2.399980642665697,\n          3.1999746903450514,\n          3.199985834525723,\n          2.3999891982242914\n         ],\n         \"z\": [\n          0.000619583705373338,\n          0.0006110062628157034,\n          0.0010564800507478003,\n          0.0010676543732890532,\n          0.000619583705373338\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"grey\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          0.31249982519173813,\n          0.5624998246936216,\n          0.5624997569223639,\n          0.3124997576575687,\n          0.31249982519173813\n         ],\n         \"y\": [\n          3.199985834525723,\n          3.1999746903450514,\n          3.999969114994333,\n          3.999982653110979,\n          3.199985834525723\n         ],\n         \"z\": [\n          0.0010676543732890532,\n          0.0010564800507478003,\n          0.0016004666742317078,\n          0.0016140431910750396,\n          0.0010676543732890532\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"grey\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          0.3124997576575687,\n          0.5624997569223639,\n          0.5624996837119822,\n          0.31249968471514844,\n          0.3124997576575687\n         ],\n         \"y\": [\n          3.999982653110979,\n          3.999969114994333,\n          4.799963743667586,\n          4.7999795567661785,\n          3.999982653110979\n         ],\n         \"z\": [\n          0.0016140431910750396,\n          0.0016004666742317078,\n          0.0022306523803208135,\n          0.002246512046602163,\n          0.0016140431910750396\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"grey\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          0.31249968471514844,\n          0.5624996837119822,\n          0.5624996070334984,\n          0.31249960831722134,\n          0.31249968471514844\n         ],\n         \"y\": [\n          4.7999795567661785,\n          4.799963743667586,\n          5.599958761717796,\n          5.599976649060632,\n          4.7999795567661785\n         ],\n         \"z\": [\n          0.002246512046602163,\n          0.0022306523803208135,\n          0.0029355947245564714,\n          0.0029535364194802835,\n          0.002246512046602163\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"grey\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          0.31249960831722134,\n          0.5624996070334984,\n          0.562499527678588,\n          0.31249952925804725,\n          0.31249960831722134\n         ],\n         \"y\": [\n          5.599976649060632,\n          5.599958761717796,\n          6.3999539935332885,\n          6.399973833832788,\n          5.599976649060632\n         ],\n         \"z\": [\n          0.0029535364194802835,\n          0.0029355947245564714,\n          0.0037046091223015,\n          0.0037245111849307337,\n          0.0029535364194802835\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"grey\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          0.31249952925804725,\n          0.562499527678588,\n          0.5624994470748238,\n          0.3124994489452585,\n          0.31249952925804725\n         ],\n         \"y\": [\n          6.399973833832788,\n          6.3999539935332885,\n          7.199949629023902,\n          7.199971218987674,\n          6.399973833832788\n         ],\n         \"z\": [\n          0.0037245111849307337,\n          0.0037046091223015,\n          0.004527901925687805,\n          0.004549560429885782,\n          0.0037245111849307337\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"grey\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          0.3124994489452585,\n          0.5624994470748238,\n          0.5624993655180675,\n          0.3124993676812126,\n          0.3124994489452585\n         ],\n         \"y\": [\n          7.199971218987674,\n          7.199949629023902,\n          7.999945491769968,\n          7.999968709163751,\n          7.199971218987674\n         ],\n         \"z\": [\n          0.004549560429885782,\n          0.004527901925687805,\n          0.0053964486491097806,\n          0.005419740819627414,\n          0.004549560429885782\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"grey\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          0.3124993676812126,\n          0.5624993655180675,\n          0.5624992840364855,\n          0.31249928647307207,\n          0.3124993676812126\n         ],\n         \"y\": [\n          7.999968709163751,\n          7.999945491769968,\n          8.799941772945205,\n          8.799966413686771,\n          7.999968709163751\n         ],\n         \"z\": [\n          0.005419740819627414,\n          0.0053964486491097806,\n          0.006302123318132103,\n          0.006326844303180048,\n          0.005419740819627414\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"grey\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          0.31249928647307207,\n          0.5624992840364855,\n          0.5624992025790467,\n          0.3124992052797954,\n          0.31249928647307207\n         ],\n         \"y\": [\n          8.799966413686771,\n          8.799941772945205,\n          9.599938295262467,\n          9.599964237041862,\n          8.799966413686771\n         ],\n         \"z\": [\n          0.006326844303180048,\n          0.006302123318132103,\n          0.00723757237073346,\n          0.0072635992487726855,\n          0.006326844303180048\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"grey\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          0.3124992052797954,\n          0.5624992025790467,\n          0.5624991218954138,\n          0.31249912482957265,\n          0.3124992052797954\n         ],\n         \"y\": [\n          9.599964237041862,\n          9.599938295262467,\n          10.3999352483169,\n          10.399962287646263,\n          9.599964237041862\n         ],\n         \"z\": [\n          0.0072635992487726855,\n          0.00723757237073346,\n          0.008196341105215879,\n          0.008223469578245364,\n          0.0072635992487726855\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"grey\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          0.31249912482957265,\n          0.5624991218954138,\n          0.5624990417096136,\n          0.3124990448594484,\n          0.31249912482957265\n         ],\n         \"y\": [\n          10.399962287646263,\n          10.3999352483169,\n          11.199932453734975,\n          11.199960469098698,\n          10.399962287646263\n         ],\n         \"z\": [\n          0.008223469578245364,\n          0.008196341105215879,\n          0.009172744361943945,\n          0.009200852310381764,\n          0.008223469578245364\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"grey\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          0.3124990448594484,\n          0.5624990417096136,\n          0.5624989625856828,\n          0.31249896591218884,\n          0.3124990448594484\n         ],\n         \"y\": [\n          11.199960469098698,\n          11.199932453734975,\n          11.999930096454143,\n          11.999958886724558,\n          11.199960469098698\n         ],\n         \"z\": [\n          0.009200852310381764,\n          0.009172744361943945,\n          0.010161988959701676,\n          0.010190874480665907,\n          0.009200852310381764\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"grey\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          0.31249896591218884,\n          0.5624989625856828,\n          0.5624988841190455,\n          0.31249888759876426,\n          0.31249896591218884\n         ],\n         \"y\": [\n          11.999958886724558,\n          11.999930096454143,\n          12.799927997059614,\n          12.799957442900372,\n          11.999958886724558\n         ],\n         \"z\": [\n          0.010190874480665907,\n          0.010161988959701676,\n          0.01116004031043022,\n          0.011189583530517534,\n          0.010190874480665907\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"grey\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          0.31249888759876426,\n          0.5624988841190455,\n          0.56249880674461,\n          0.3124988103339617,\n          0.31249888759876426\n         ],\n         \"y\": [\n          12.799957442900372,\n          12.799927997059614,\n          13.599926330496233,\n          13.599956236642031,\n          12.799957442900372\n         ],\n         \"z\": [\n          0.011189583530517534,\n          0.01116004031043022,\n          0.012163736840184455,\n          0.012193741811367939,\n          0.011189583530517534\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"grey\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          0.3124988103339617,\n          0.56249880674461,\n          0.5624987300006614,\n          0.3124987336736442,\n          0.3124988103339617\n         ],\n         \"y\": [\n          13.599956236642031,\n          13.599926330496233,\n          14.399924916364224,\n          14.399955168970646,\n          13.599956236642031\n         ],\n         \"z\": [\n          0.012193741811367939,\n          0.012163736840184455,\n          0.013170646998115945,\n          0.013200999447784604,\n          0.012193741811367939\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"grey\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          0.3124987336736442,\n          0.5624987300006614,\n          0.5624986541804086,\n          0.31249865789427567,\n          0.3124987336736442\n         ],\n         \"y\": [\n          14.399955168970646,\n          14.399924916364224,\n          15.199923902380352,\n          15.19995432293122,\n          14.399955168970646\n         ],\n         \"z\": [\n          0.013200999447784604,\n          0.013170646998115945,\n          0.01417916078366182,\n          0.01420968165585628,\n          0.013200999447784604\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"grey\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          0.31249865789427567,\n          0.5624986541804086,\n          0.5624985788018424,\n          0.31249858253356516,\n          0.31249865789427567\n         ],\n         \"y\": [\n          15.19995432293122,\n          15.199923902380352,\n          15.999923101357235,\n          15.999953594970899,\n          15.19995432293122\n         ],\n         \"z\": [\n          0.01420968165585628,\n          0.01417916078366182,\n          0.015188302497375128,\n          0.01521889662949046,\n          0.01420968165585628\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"black\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          -0.4375000000000001,\n          -0.4375000236873756,\n          -0.43750006260819346,\n          -0.43750011326728777,\n          -0.4375001733139123,\n          -0.4375002401368169,\n          -0.4375003122753531,\n          -0.43750038783161005,\n          -0.43750046600357495,\n          -0.43750054544343747,\n          -0.4375006258293518,\n          -0.4375007062171683,\n          -0.43750078661795866,\n          -0.4375008663679509,\n          -0.4375009456910473,\n          -0.4375010241082931,\n          -0.43750110196207914,\n          -0.43750117889798307,\n          -0.43750125530740736,\n          -0.43750133096412286,\n          -0.4375014062712665\n         ],\n         \"y\": [\n          -7.126160546901204e-18,\n          0.8000051998112413,\n          1.6000102094000985,\n          2.400014864900074,\n          3.2000192670677388,\n          4.000023267460916,\n          4.800026996061957,\n          5.600030311089138,\n          6.4000333547312875,\n          7.200035988878993,\n          8.000038361345101,\n          8.80004033591147,\n          9.600042062380043,\n          10.400043405634353,\n          11.200044515189864,\n          12.000045257535799,\n          12.800045780422645,\n          13.600045955079421,\n          14.400045926789915,\n          15.200045584583822,\n          16.000045075811887\n         ],\n         \"z\": [\n          -3.7885577460302824e-17,\n          8.050939904993674e-05,\n          0.00030055837290183433,\n          0.000645316033046242,\n          0.001101177340912812,\n          0.0016547727416050344,\n          0.0022940910454462126,\n          0.003007361504251719,\n          0.0037842173728184353,\n          0.00461453594247971,\n          0.005489617331180315,\n          0.0064010072583238825,\n          0.007341679882890364,\n          0.008304854997333818,\n          0.009285176155695221,\n          0.0102775310435586,\n          0.011278213190779474,\n          0.012283756724918393,\n          0.013292056796790585,\n          0.014301244272439662,\n          0.015310679025836462\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"black\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          -0.18750000000000006,\n          -0.1875000237228303,\n          -0.1875000627455803,\n          -0.18750011356082813,\n          -0.18750017381202885,\n          -0.18750024087202166,\n          -0.1875003132785193,\n          -0.1875003891153329,\n          -0.18750046758303424,\n          -0.18750054731387217,\n          -0.187500627992497,\n          -0.18750070865375484,\n          -0.1875007893187073,\n          -0.18750086930210966,\n          -0.1875009488408821,\n          -0.18750102743479913,\n          -0.18750110544179802,\n          -0.18750118248733483,\n          -0.18750125898039016,\n          -0.18750133467799002,\n          -0.1875014100029893\n         ],\n         \"y\": [\n          -3.054068805814802e-18,\n          0.8000022258875188,\n          1.600004355772871,\n          2.4000063093414794,\n          3.200008122887067,\n          4.000009729344271,\n          4.800011182963365,\n          5.6000124237463025,\n          6.400013514431788,\n          7.20001439891522,\n          8.000015143951318,\n          8.800015695169904,\n          9.600016120600648,\n          10.40001636630499,\n          11.200016499826141,\n          12.000016467265384,\n          12.800016334581887,\n          13.600016048933623,\n          14.400015674183493,\n          15.200015164032955,\n          16.000014582198226\n         ],\n         \"z\": [\n          -1.6236676054415498e-17,\n          7.752893514114484e-05,\n          0.0002946907979488142,\n          0.0006367385904886074,\n          0.001090003018371559,\n          0.0016411962247617027,\n          0.002278231379164863,\n          0.002989419809327907,\n          0.0037643153101892014,\n          0.004592877438281733,\n          0.005466325160662682,\n          0.006376286273275938,\n          0.007315653004851139,\n          0.008277726524304333,\n          0.009257068207257402,\n          0.01024864552259437,\n          0.01124866997069216,\n          0.012253751753734908,\n          0.013261704347121926,\n          0.0142707234002452,\n          0.01528008489372113\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"black\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          0.06250000000000001,\n          0.062499976241714925,\n          0.06249993711703296,\n          0.06249988614563157,\n          0.06249982568985464,\n          0.06249975839277351,\n          0.06249968571831458,\n          0.06249960960094422,\n          0.06249953083750652,\n          0.06249945081569314,\n          0.062499369844357826,\n          0.06249928890965862,\n          0.062499207980544064,\n          0.06249912776373148,\n          0.06249904800928315,\n          0.06249896923869486,\n          0.06249889107848312,\n          0.06249881392331345,\n          0.06249873734662704,\n          0.06249866160814282,\n          0.06249858626528794\n         ],\n         \"y\": [\n          1.0180229352716006e-18,\n          0.7999992519637964,\n          1.599998502145643,\n          2.3999977537828854,\n          3.199996978706395,\n          3.9999961912276247,\n          4.799995369864772,\n          5.599994536403467,\n          6.399993674132288,\n          7.199992808951447,\n          7.999991926557534,\n          8.799991054428338,\n          9.599990178821255,\n          10.399989326975627,\n          11.19998848446242,\n          11.999987676994971,\n          12.79998688874113,\n          13.599986142787827,\n          14.39998542157707,\n          15.199984743482087,\n          15.999984088584561\n         ],\n         \"z\": [\n          5.412225351471832e-18,\n          7.454847123235294e-05,\n          0.000288823222995794,\n          0.0006281611479309727,\n          0.0010788286958303061,\n          0.0016276197079183711,\n          0.002262371712883513,\n          0.002971478114404095,\n          0.0037444132475599676,\n          0.0045712189340837575,\n          0.005443032990145048,\n          0.006351565288227993,\n          0.007289626126811912,\n          0.008250598051274849,\n          0.009228960258819583,\n          0.010219760001630138,\n          0.011219126750604847,\n          0.012223746782551424,\n          0.013231351897453265,\n          0.01424020252805074,\n          0.015249490761605795\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"black\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          0.31250000000000006,\n          0.3124999762062602,\n          0.3124999369796462,\n          0.31249988585209126,\n          0.31249982519173813,\n          0.3124997576575687,\n          0.31249968471514844,\n          0.31249960831722134,\n          0.31249952925804725,\n          0.3124994489452585,\n          0.3124993676812126,\n          0.31249928647307207,\n          0.3124992052797954,\n          0.31249912482957265,\n          0.3124990448594484,\n          0.31249896591218884,\n          0.31249888759876426,\n          0.3124988103339617,\n          0.3124987336736442,\n          0.31249865789427567,\n          0.31249858253356516\n         ],\n         \"y\": [\n          5.090114676358003e-18,\n          0.799996278040074,\n          1.5999926485184153,\n          2.3999891982242914,\n          3.199985834525723,\n          3.999982653110979,\n          4.7999795567661785,\n          5.599976649060632,\n          6.399973833832788,\n          7.199971218987674,\n          7.999968709163751,\n          8.799966413686771,\n          9.599964237041862,\n          10.399962287646263,\n          11.199960469098698,\n          11.999958886724558,\n          12.799957442900372,\n          13.599956236642031,\n          14.399955168970646,\n          15.19995432293122,\n          15.999953594970899\n         ],\n         \"z\": [\n          2.706112675735916e-17,\n          7.156800732356103e-05,\n          0.0002829556480427738,\n          0.000619583705373338,\n          0.0010676543732890532,\n          0.0016140431910750396,\n          0.002246512046602163,\n          0.0029535364194802835,\n          0.0037245111849307337,\n          0.004549560429885782,\n          0.005419740819627414,\n          0.006326844303180048,\n          0.0072635992487726855,\n          0.008223469578245364,\n          0.009200852310381764,\n          0.010190874480665907,\n          0.011189583530517534,\n          0.012193741811367939,\n          0.013200999447784604,\n          0.01420968165585628,\n          0.01521889662949046\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"black\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          0.5625000000000001,\n          0.5624999761708054,\n          0.5624999368422594,\n          0.562499885558551,\n          0.5624998246936216,\n          0.5624997569223639,\n          0.5624996837119822,\n          0.5624996070334984,\n          0.562499527678588,\n          0.5624994470748238,\n          0.5624993655180675,\n          0.5624992840364855,\n          0.5624992025790467,\n          0.5624991218954138,\n          0.5624990417096136,\n          0.5624989625856828,\n          0.5624988841190455,\n          0.56249880674461,\n          0.5624987300006614,\n          0.5624986541804086,\n          0.5624985788018424\n         ],\n         \"y\": [\n          9.162206417444405e-18,\n          0.7999933041163515,\n          1.5999867948911877,\n          2.399980642665697,\n          3.1999746903450514,\n          3.999969114994333,\n          4.799963743667586,\n          5.599958761717796,\n          6.3999539935332885,\n          7.199949629023902,\n          7.999945491769968,\n          8.799941772945205,\n          9.599938295262467,\n          10.3999352483169,\n          11.199932453734975,\n          11.999930096454143,\n          12.799927997059614,\n          13.599926330496233,\n          14.399924916364224,\n          15.199923902380352,\n          15.999923101357235\n         ],\n         \"z\": [\n          4.871002816324649e-17,\n          6.858754341476913e-05,\n          0.00027708807308975364,\n          0.0006110062628157034,\n          0.0010564800507478003,\n          0.0016004666742317078,\n          0.0022306523803208135,\n          0.0029355947245564714,\n          0.0037046091223015,\n          0.004527901925687805,\n          0.0053964486491097806,\n          0.006302123318132103,\n          0.00723757237073346,\n          0.008196341105215879,\n          0.009172744361943945,\n          0.010161988959701676,\n          0.01116004031043022,\n          0.012163736840184455,\n          0.013170646998115945,\n          0.01417916078366182,\n          0.015188302497375128\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"black\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          -0.4375000000000001,\n          -0.18750000000000006,\n          0.06250000000000001,\n          0.31250000000000006,\n          0.5625000000000001\n         ],\n         \"y\": [\n          -7.126160546901204e-18,\n          -3.054068805814802e-18,\n          1.0180229352716006e-18,\n          5.090114676358003e-18,\n          9.162206417444405e-18\n         ],\n         \"z\": [\n          -3.7885577460302824e-17,\n          -1.6236676054415498e-17,\n          5.412225351471832e-18,\n          2.706112675735916e-17,\n          4.871002816324649e-17\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"black\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          -0.4375000236873756,\n          -0.1875000237228303,\n          0.062499976241714925,\n          0.3124999762062602,\n          0.5624999761708054\n         ],\n         \"y\": [\n          0.8000051998112413,\n          0.8000022258875188,\n          0.7999992519637964,\n          0.799996278040074,\n          0.7999933041163515\n         ],\n         \"z\": [\n          8.050939904993674e-05,\n          7.752893514114484e-05,\n          7.454847123235294e-05,\n          7.156800732356103e-05,\n          6.858754341476913e-05\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"black\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          -0.43750006260819346,\n          -0.1875000627455803,\n          0.06249993711703296,\n          0.3124999369796462,\n          0.5624999368422594\n         ],\n         \"y\": [\n          1.6000102094000985,\n          1.600004355772871,\n          1.599998502145643,\n          1.5999926485184153,\n          1.5999867948911877\n         ],\n         \"z\": [\n          0.00030055837290183433,\n          0.0002946907979488142,\n          0.000288823222995794,\n          0.0002829556480427738,\n          0.00027708807308975364\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"black\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          -0.43750011326728777,\n          -0.18750011356082813,\n          0.06249988614563157,\n          0.31249988585209126,\n          0.562499885558551\n         ],\n         \"y\": [\n          2.400014864900074,\n          2.4000063093414794,\n          2.3999977537828854,\n          2.3999891982242914,\n          2.399980642665697\n         ],\n         \"z\": [\n          0.000645316033046242,\n          0.0006367385904886074,\n          0.0006281611479309727,\n          0.000619583705373338,\n          0.0006110062628157034\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"black\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          -0.4375001733139123,\n          -0.18750017381202885,\n          0.06249982568985464,\n          0.31249982519173813,\n          0.5624998246936216\n         ],\n         \"y\": [\n          3.2000192670677388,\n          3.200008122887067,\n          3.199996978706395,\n          3.199985834525723,\n          3.1999746903450514\n         ],\n         \"z\": [\n          0.001101177340912812,\n          0.001090003018371559,\n          0.0010788286958303061,\n          0.0010676543732890532,\n          0.0010564800507478003\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"black\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          -0.4375002401368169,\n          -0.18750024087202166,\n          0.06249975839277351,\n          0.3124997576575687,\n          0.5624997569223639\n         ],\n         \"y\": [\n          4.000023267460916,\n          4.000009729344271,\n          3.9999961912276247,\n          3.999982653110979,\n          3.999969114994333\n         ],\n         \"z\": [\n          0.0016547727416050344,\n          0.0016411962247617027,\n          0.0016276197079183711,\n          0.0016140431910750396,\n          0.0016004666742317078\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"black\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          -0.4375003122753531,\n          -0.1875003132785193,\n          0.06249968571831458,\n          0.31249968471514844,\n          0.5624996837119822\n         ],\n         \"y\": [\n          4.800026996061957,\n          4.800011182963365,\n          4.799995369864772,\n          4.7999795567661785,\n          4.799963743667586\n         ],\n         \"z\": [\n          0.0022940910454462126,\n          0.002278231379164863,\n          0.002262371712883513,\n          0.002246512046602163,\n          0.0022306523803208135\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"black\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          -0.43750038783161005,\n          -0.1875003891153329,\n          0.06249960960094422,\n          0.31249960831722134,\n          0.5624996070334984\n         ],\n         \"y\": [\n          5.600030311089138,\n          5.6000124237463025,\n          5.599994536403467,\n          5.599976649060632,\n          5.599958761717796\n         ],\n         \"z\": [\n          0.003007361504251719,\n          0.002989419809327907,\n          0.002971478114404095,\n          0.0029535364194802835,\n          0.0029355947245564714\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"black\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          -0.43750046600357495,\n          -0.18750046758303424,\n          0.06249953083750652,\n          0.31249952925804725,\n          0.562499527678588\n         ],\n         \"y\": [\n          6.4000333547312875,\n          6.400013514431788,\n          6.399993674132288,\n          6.399973833832788,\n          6.3999539935332885\n         ],\n         \"z\": [\n          0.0037842173728184353,\n          0.0037643153101892014,\n          0.0037444132475599676,\n          0.0037245111849307337,\n          0.0037046091223015\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"black\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          -0.43750054544343747,\n          -0.18750054731387217,\n          0.06249945081569314,\n          0.3124994489452585,\n          0.5624994470748238\n         ],\n         \"y\": [\n          7.200035988878993,\n          7.20001439891522,\n          7.199992808951447,\n          7.199971218987674,\n          7.199949629023902\n         ],\n         \"z\": [\n          0.00461453594247971,\n          0.004592877438281733,\n          0.0045712189340837575,\n          0.004549560429885782,\n          0.004527901925687805\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"black\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          -0.4375006258293518,\n          -0.187500627992497,\n          0.062499369844357826,\n          0.3124993676812126,\n          0.5624993655180675\n         ],\n         \"y\": [\n          8.000038361345101,\n          8.000015143951318,\n          7.999991926557534,\n          7.999968709163751,\n          7.999945491769968\n         ],\n         \"z\": [\n          0.005489617331180315,\n          0.005466325160662682,\n          0.005443032990145048,\n          0.005419740819627414,\n          0.0053964486491097806\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"black\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          -0.4375007062171683,\n          -0.18750070865375484,\n          0.06249928890965862,\n          0.31249928647307207,\n          0.5624992840364855\n         ],\n         \"y\": [\n          8.80004033591147,\n          8.800015695169904,\n          8.799991054428338,\n          8.799966413686771,\n          8.799941772945205\n         ],\n         \"z\": [\n          0.0064010072583238825,\n          0.006376286273275938,\n          0.006351565288227993,\n          0.006326844303180048,\n          0.006302123318132103\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"black\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          -0.43750078661795866,\n          -0.1875007893187073,\n          0.062499207980544064,\n          0.3124992052797954,\n          0.5624992025790467\n         ],\n         \"y\": [\n          9.600042062380043,\n          9.600016120600648,\n          9.599990178821255,\n          9.599964237041862,\n          9.599938295262467\n         ],\n         \"z\": [\n          0.007341679882890364,\n          0.007315653004851139,\n          0.007289626126811912,\n          0.0072635992487726855,\n          0.00723757237073346\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"black\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          -0.4375008663679509,\n          -0.18750086930210966,\n          0.06249912776373148,\n          0.31249912482957265,\n          0.5624991218954138\n         ],\n         \"y\": [\n          10.400043405634353,\n          10.40001636630499,\n          10.399989326975627,\n          10.399962287646263,\n          10.3999352483169\n         ],\n         \"z\": [\n          0.008304854997333818,\n          0.008277726524304333,\n          0.008250598051274849,\n          0.008223469578245364,\n          0.008196341105215879\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"black\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          -0.4375009456910473,\n          -0.1875009488408821,\n          0.06249904800928315,\n          0.3124990448594484,\n          0.5624990417096136\n         ],\n         \"y\": [\n          11.200044515189864,\n          11.200016499826141,\n          11.19998848446242,\n          11.199960469098698,\n          11.199932453734975\n         ],\n         \"z\": [\n          0.009285176155695221,\n          0.009257068207257402,\n          0.009228960258819583,\n          0.009200852310381764,\n          0.009172744361943945\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"black\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          -0.4375010241082931,\n          -0.18750102743479913,\n          0.06249896923869486,\n          0.31249896591218884,\n          0.5624989625856828\n         ],\n         \"y\": [\n          12.000045257535799,\n          12.000016467265384,\n          11.999987676994971,\n          11.999958886724558,\n          11.999930096454143\n         ],\n         \"z\": [\n          0.0102775310435586,\n          0.01024864552259437,\n          0.010219760001630138,\n          0.010190874480665907,\n          0.010161988959701676\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"black\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          -0.43750110196207914,\n          -0.18750110544179802,\n          0.06249889107848312,\n          0.31249888759876426,\n          0.5624988841190455\n         ],\n         \"y\": [\n          12.800045780422645,\n          12.800016334581887,\n          12.79998688874113,\n          12.799957442900372,\n          12.799927997059614\n         ],\n         \"z\": [\n          0.011278213190779474,\n          0.01124866997069216,\n          0.011219126750604847,\n          0.011189583530517534,\n          0.01116004031043022\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"black\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          -0.43750117889798307,\n          -0.18750118248733483,\n          0.06249881392331345,\n          0.3124988103339617,\n          0.56249880674461\n         ],\n         \"y\": [\n          13.600045955079421,\n          13.600016048933623,\n          13.599986142787827,\n          13.599956236642031,\n          13.599926330496233\n         ],\n         \"z\": [\n          0.012283756724918393,\n          0.012253751753734908,\n          0.012223746782551424,\n          0.012193741811367939,\n          0.012163736840184455\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"black\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          -0.43750125530740736,\n          -0.18750125898039016,\n          0.06249873734662704,\n          0.3124987336736442,\n          0.5624987300006614\n         ],\n         \"y\": [\n          14.400045926789915,\n          14.400015674183493,\n          14.39998542157707,\n          14.399955168970646,\n          14.399924916364224\n         ],\n         \"z\": [\n          0.013292056796790585,\n          0.013261704347121926,\n          0.013231351897453265,\n          0.013200999447784604,\n          0.013170646998115945\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"black\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          -0.43750133096412286,\n          -0.18750133467799002,\n          0.06249866160814282,\n          0.31249865789427567,\n          0.5624986541804086\n         ],\n         \"y\": [\n          15.200045584583822,\n          15.200015164032955,\n          15.199984743482087,\n          15.19995432293122,\n          15.199923902380352\n         ],\n         \"z\": [\n          0.014301244272439662,\n          0.0142707234002452,\n          0.01424020252805074,\n          0.01420968165585628,\n          0.01417916078366182\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"black\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          -0.4375014062712665,\n          -0.1875014100029893,\n          0.06249858626528794,\n          0.31249858253356516,\n          0.5624985788018424\n         ],\n         \"y\": [\n          16.000045075811887,\n          16.000014582198226,\n          15.999984088584561,\n          15.999953594970899,\n          15.999923101357235\n         ],\n         \"z\": [\n          0.015310679025836462,\n          0.01528008489372113,\n          0.015249490761605795,\n          0.01521889662949046,\n          0.015188302497375128\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"lightskyblue\"\n         },\n         \"mode\": \"lines\",\n         \"name\": \"Aero wake\",\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          0.5625000000000001,\n          0.8123477075000001,\n          0.8123476837953569,\n          0.562499976295357,\n          0.5625000000000001\n         ],\n         \"y\": [\n          9.162206417444405e-18,\n          9.162206417444405e-18,\n          0.7999933212351085,\n          0.7999933212351085,\n          9.162206417444405e-18\n         ],\n         \"z\": [\n          4.871002816324649e-17,\n          0.008724875000000049,\n          0.008793254890310381,\n          6.837989031038178e-05,\n          4.871002816324649e-17\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"lightskyblue\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          0.562499976295357,\n          0.8123476837953569,\n          0.8123476446826243,\n          0.5624999371826244,\n          0.562499976295357\n         ],\n         \"y\": [\n          0.7999933212351085,\n          0.7999933212351085,\n          1.5999868291304182,\n          1.5999868291304182,\n          0.7999933212351085\n         ],\n         \"z\": [\n          6.837989031038178e-05,\n          0.008793254890310381,\n          0.009001125991601577,\n          0.00027625099160157664,\n          6.837989031038178e-05\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"lightskyblue\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          0.5624999371826244,\n          0.8123476446826243,\n          0.8123475936878366,\n          0.5624998861878366,\n          0.5624999371826244\n         ],\n         \"y\": [\n          1.5999868291304182,\n          1.5999868291304182,\n          2.3999806938941566,\n          2.3999806938941566,\n          1.5999868291304182\n         ],\n         \"z\": [\n          0.00027625099160157664,\n          0.009001125991601577,\n          0.00933403095937816,\n          0.0006091559593781608,\n          0.00027625099160157664\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"lightskyblue\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          0.5624998861878366,\n          0.8123475936878366,\n          0.8123475331702955,\n          0.5624998256702956,\n          0.5624998861878366\n         ],\n         \"y\": [\n          2.3999806938941566,\n          2.3999806938941566,\n          3.1999747586029037,\n          3.1999747586029037,\n          2.3999806938941566\n         ],\n         \"z\": [\n          0.0006091559593781608,\n          0.00933403095937816,\n          0.009778145021025551,\n          0.0010532700210255516,\n          0.0006091559593781608\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"lightskyblue\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          0.5624998256702956,\n          0.8123475331702955,\n          0.8123474657906017,\n          0.5624997582906017,\n          0.5624998256702956\n         ],\n         \"y\": [\n          3.1999747586029037,\n          3.1999747586029037,\n          3.999969200022097,\n          3.999969200022097,\n          3.1999747586029037\n         ],\n         \"z\": [\n          0.0010532700210255516,\n          0.009778145021025551,\n          0.010320461637624298,\n          0.001595586637624299,\n          0.0010532700210255516\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"lightskyblue\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          0.5624997582906017,\n          0.8123474657906017,\n          0.8123473930060079,\n          0.5624996855060079,\n          0.5624997582906017\n         ],\n         \"y\": [\n          3.999969200022097,\n          3.999969200022097,\n          4.799963845425502,\n          4.799963845425502,\n          3.999969200022097\n         ],\n         \"z\": [\n          0.001595586637624299,\n          0.010320461637624298,\n          0.010948702164465246,\n          0.0022238271644652464,\n          0.001595586637624299\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"lightskyblue\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          0.5624996855060079,\n          0.8123473930060079,\n          0.8123473167765953,\n          0.5624996092765954,\n          0.5624996855060079\n         ],\n         \"y\": [\n          4.799963845425502,\n          4.799963845425502,\n          5.599958879734863,\n          5.599958879734863,\n          4.799963845425502\n         ],\n         \"z\": [\n          0.0022238271644652464,\n          0.010948702164465246,\n          0.011651457730397104,\n          0.0029265827303971044,\n          0.0022238271644652464\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"lightskyblue\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          0.5624996092765954,\n          0.8123473167765953,\n          0.8123472378880863,\n          0.5624995303880863,\n          0.5624996092765954\n         ],\n         \"y\": [\n          5.599958879734863,\n          5.599958879734863,\n          6.399954127618544,\n          6.399954127618544,\n          5.599958879734863\n         ],\n         \"z\": [\n          0.0029265827303971044,\n          0.011651457730397104,\n          0.012418075832735435,\n          0.003693200832735435,\n          0.0029265827303971044\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"lightskyblue\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          0.5624995303880863,\n          0.8123472378880863,\n          0.8123471577598415,\n          0.5624994502598415,\n          0.5624995303880863\n         ],\n         \"y\": [\n          6.399954127618544,\n          6.399954127618544,\n          7.199949778457311,\n          7.199949778457311,\n          6.399954127618544\n         ],\n         \"z\": [\n          0.003693200832735435,\n          0.012418075832735435,\n          0.013238792957041995,\n          0.004513917957041995,\n          0.003693200832735435\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"lightskyblue\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          0.5624994502598415,\n          0.8123471577598415,\n          0.8123470766849902,\n          0.5624993691849902,\n          0.5624994502598415\n         ],\n         \"y\": [\n          7.199949778457311,\n          7.199949778457311,\n          7.999945656178906,\n          7.999945656178906,\n          7.199949778457311\n         ],\n         \"z\": [\n          0.004513917957041995,\n          0.013238792957041995,\n          0.01410461293228132,\n          0.00537973793228132,\n          0.004513917957041995\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"lightskyblue\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          0.5624993691849902,\n          0.8123470766849902,\n          0.8123469956855739,\n          0.5624992881855739,\n          0.5624993691849902\n         ],\n         \"y\": [\n          7.999945656178906,\n          7.999945656178906,\n          8.799941951360688,\n          8.799941951360688,\n          7.999945656178906\n         ],\n         \"z\": [\n          0.00537973793228132,\n          0.01410461293228132,\n          0.015007435798364901,\n          0.006282560798364902,\n          0.00537973793228132\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"lightskyblue\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          0.5624992881855739,\n          0.8123469956855739,\n          0.8123469147102647,\n          0.5624992072102647,\n          0.5624992881855739\n         ],\n         \"y\": [\n          8.799941951360688,\n          8.799941951360688,\n          9.599938487131828,\n          9.599938487131828,\n          8.799941951360688\n         ],\n         \"z\": [\n          0.006282560798364902,\n          0.015007435798364901,\n          0.015939931915767612,\n          0.007215056915767613,\n          0.006282560798364902\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"lightskyblue\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          0.5624992072102647,\n          0.8123469147102647,\n          0.8123468345040965,\n          0.5624991270040965,\n          0.5624992072102647\n         ],\n         \"y\": [\n          9.599938487131828,\n          9.599938487131828,\n          10.399935452451604,\n          10.399935452451604,\n          9.599938487131828\n         ],\n         \"z\": [\n          0.007215056915767613,\n          0.015939931915767612,\n          0.016895667922093942,\n          0.008170792922093943,\n          0.007215056915767613\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"lightskyblue\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          0.5624991270040965,\n          0.8123468345040965,\n          0.8123467547925016,\n          0.5624990472925017,\n          0.5624991270040965\n         ],\n         \"y\": [\n          10.399935452451604,\n          10.399935452451604,\n          11.199932669428227,\n          11.199932669428227,\n          10.399935452451604\n         ],\n         \"z\": [\n          0.008170792922093943,\n          0.016895667922093942,\n          0.01786897769443925,\n          0.009144102694439252,\n          0.008170792922093943\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"lightskyblue\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          0.5624990472925017,\n          0.8123467547925016,\n          0.8123466761359044,\n          0.5624989686359044,\n          0.5624990472925017\n         ],\n         \"y\": [\n          11.199932669428227,\n          11.199932669428227,\n          11.999930322350817,\n          11.999930322350817,\n          11.199932669428227\n         ],\n         \"z\": [\n          0.009144102694439252,\n          0.01786897769443925,\n          0.018855084300556615,\n          0.010130209300556614,\n          0.009144102694439252\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"lightskyblue\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          0.5624989686359044,\n          0.8123466761359044,\n          0.8123465981321941,\n          0.5624988906321942,\n          0.5624989686359044\n         ],\n         \"y\": [\n          11.999930322350817,\n          11.999930322350817,\n          12.799928232343898,\n          12.799928232343898,\n          11.999930322350817\n         ],\n         \"z\": [\n          0.010130209300556614,\n          0.018855084300556615,\n          0.01984996696380438,\n          0.011125091963804382,\n          0.010130209300556614\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"lightskyblue\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          0.5624988906321942,\n          0.8123465981321941,\n          0.8123465212134034,\n          0.5624988137134035,\n          0.5624988906321942\n         ],\n         \"y\": [\n          12.799928232343898,\n          12.799928232343898,\n          13.599926573724765,\n          13.599926573724765,\n          12.799928232343898\n         ],\n         \"z\": [\n          0.011125091963804382,\n          0.01984996696380438,\n          0.02085047502889098,\n          0.012125600028890982,\n          0.011125091963804382\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"lightskyblue\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          0.5624988137134035,\n          0.8123465212134034,\n          0.8123464449208242,\n          0.5624987374208242,\n          0.5624988137134035\n         ],\n         \"y\": [\n          13.599926573724765,\n          13.599926573724765,\n          14.39992516668033,\n          14.39992516668033,\n          13.599926573724765\n         ],\n         \"z\": [\n          0.012125600028890982,\n          0.02085047502889098,\n          0.021854185403696567,\n          0.01312931040369657,\n          0.012125600028890982\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"lightskyblue\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          0.5624987374208242,\n          0.8123464449208242,\n          0.8123463695456885,\n          0.5624986620456885,\n          0.5624987374208242\n         ],\n         \"y\": [\n          14.39992516668033,\n          14.39992516668033,\n          15.199924158393646,\n          15.199924158393646,\n          14.39992516668033\n         ],\n         \"z\": [\n          0.01312931040369657,\n          0.021854185403696567,\n          0.022859493721092188,\n          0.014134618721092188,\n          0.01312931040369657\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"lightskyblue\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          0.5624986620456885,\n          0.8123463695456885,\n          0.8123462946092366,\n          0.5624985871092366,\n          0.5624986620456885\n         ],\n         \"y\": [\n          15.199924158393646,\n          15.199924158393646,\n          15.999923362319814,\n          15.999923362319814,\n          15.199924158393646\n         ],\n         \"z\": [\n          0.014134618721092188,\n          0.022859493721092188,\n          0.02386542772471522,\n          0.01514055272471522,\n          0.014134618721092188\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"lightskyblue\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          0.8123477075000001,\n          1.0621954150000001,\n          1.062195391295357,\n          0.8123476837953569,\n          0.8123477075000001\n         ],\n         \"y\": [\n          9.162206417444405e-18,\n          9.162206417444405e-18,\n          0.7999933212351085,\n          0.7999933212351085,\n          9.162206417444405e-18\n         ],\n         \"z\": [\n          0.008724875000000049,\n          0.01744975000000005,\n          0.01751812989031038,\n          0.008793254890310381,\n          0.008724875000000049\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"lightskyblue\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          0.8123476837953569,\n          1.062195391295357,\n          1.0621953521826244,\n          0.8123476446826243,\n          0.8123476837953569\n         ],\n         \"y\": [\n          0.7999933212351085,\n          0.7999933212351085,\n          1.5999868291304182,\n          1.5999868291304182,\n          0.7999933212351085\n         ],\n         \"z\": [\n          0.008793254890310381,\n          0.01751812989031038,\n          0.017726000991601577,\n          0.009001125991601577,\n          0.008793254890310381\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"lightskyblue\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          0.8123476446826243,\n          1.0621953521826244,\n          1.0621953011878367,\n          0.8123475936878366,\n          0.8123476446826243\n         ],\n         \"y\": [\n          1.5999868291304182,\n          1.5999868291304182,\n          2.3999806938941566,\n          2.3999806938941566,\n          1.5999868291304182\n         ],\n         \"z\": [\n          0.009001125991601577,\n          0.017726000991601577,\n          0.01805890595937816,\n          0.00933403095937816,\n          0.009001125991601577\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"lightskyblue\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          0.8123475936878366,\n          1.0621953011878367,\n          1.0621952406702955,\n          0.8123475331702955,\n          0.8123475936878366\n         ],\n         \"y\": [\n          2.3999806938941566,\n          2.3999806938941566,\n          3.1999747586029037,\n          3.1999747586029037,\n          2.3999806938941566\n         ],\n         \"z\": [\n          0.00933403095937816,\n          0.01805890595937816,\n          0.01850302002102555,\n          0.009778145021025551,\n          0.00933403095937816\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"lightskyblue\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          0.8123475331702955,\n          1.0621952406702955,\n          1.0621951732906016,\n          0.8123474657906017,\n          0.8123475331702955\n         ],\n         \"y\": [\n          3.1999747586029037,\n          3.1999747586029037,\n          3.999969200022097,\n          3.999969200022097,\n          3.1999747586029037\n         ],\n         \"z\": [\n          0.009778145021025551,\n          0.01850302002102555,\n          0.019045336637624297,\n          0.010320461637624298,\n          0.009778145021025551\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"lightskyblue\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          0.8123474657906017,\n          1.0621951732906016,\n          1.062195100506008,\n          0.8123473930060079,\n          0.8123474657906017\n         ],\n         \"y\": [\n          3.999969200022097,\n          3.999969200022097,\n          4.799963845425502,\n          4.799963845425502,\n          3.999969200022097\n         ],\n         \"z\": [\n          0.010320461637624298,\n          0.019045336637624297,\n          0.019673577164465245,\n          0.010948702164465246,\n          0.010320461637624298\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"lightskyblue\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          0.8123473930060079,\n          1.062195100506008,\n          1.0621950242765954,\n          0.8123473167765953,\n          0.8123473930060079\n         ],\n         \"y\": [\n          4.799963845425502,\n          4.799963845425502,\n          5.599958879734863,\n          5.599958879734863,\n          4.799963845425502\n         ],\n         \"z\": [\n          0.010948702164465246,\n          0.019673577164465245,\n          0.020376332730397104,\n          0.011651457730397104,\n          0.010948702164465246\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"lightskyblue\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          0.8123473167765953,\n          1.0621950242765954,\n          1.0621949453880863,\n          0.8123472378880863,\n          0.8123473167765953\n         ],\n         \"y\": [\n          5.599958879734863,\n          5.599958879734863,\n          6.399954127618544,\n          6.399954127618544,\n          5.599958879734863\n         ],\n         \"z\": [\n          0.011651457730397104,\n          0.020376332730397104,\n          0.021142950832735437,\n          0.012418075832735435,\n          0.011651457730397104\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"lightskyblue\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          0.8123472378880863,\n          1.0621949453880863,\n          1.0621948652598414,\n          0.8123471577598415,\n          0.8123472378880863\n         ],\n         \"y\": [\n          6.399954127618544,\n          6.399954127618544,\n          7.199949778457311,\n          7.199949778457311,\n          6.399954127618544\n         ],\n         \"z\": [\n          0.012418075832735435,\n          0.021142950832735437,\n          0.021963667957041993,\n          0.013238792957041995,\n          0.012418075832735435\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"lightskyblue\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          0.8123471577598415,\n          1.0621948652598414,\n          1.0621947841849901,\n          0.8123470766849902,\n          0.8123471577598415\n         ],\n         \"y\": [\n          7.199949778457311,\n          7.199949778457311,\n          7.999945656178906,\n          7.999945656178906,\n          7.199949778457311\n         ],\n         \"z\": [\n          0.013238792957041995,\n          0.021963667957041993,\n          0.02282948793228132,\n          0.01410461293228132,\n          0.013238792957041995\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"lightskyblue\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          0.8123470766849902,\n          1.0621947841849901,\n          1.0621947031855739,\n          0.8123469956855739,\n          0.8123470766849902\n         ],\n         \"y\": [\n          7.999945656178906,\n          7.999945656178906,\n          8.799941951360688,\n          8.799941951360688,\n          7.999945656178906\n         ],\n         \"z\": [\n          0.01410461293228132,\n          0.02282948793228132,\n          0.0237323107983649,\n          0.015007435798364901,\n          0.01410461293228132\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"lightskyblue\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          0.8123469956855739,\n          1.0621947031855739,\n          1.0621946222102647,\n          0.8123469147102647,\n          0.8123469956855739\n         ],\n         \"y\": [\n          8.799941951360688,\n          8.799941951360688,\n          9.599938487131828,\n          9.599938487131828,\n          8.799941951360688\n         ],\n         \"z\": [\n          0.015007435798364901,\n          0.0237323107983649,\n          0.024664806915767612,\n          0.015939931915767612,\n          0.015007435798364901\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"lightskyblue\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          0.8123469147102647,\n          1.0621946222102647,\n          1.0621945420040966,\n          0.8123468345040965,\n          0.8123469147102647\n         ],\n         \"y\": [\n          9.599938487131828,\n          9.599938487131828,\n          10.399935452451604,\n          10.399935452451604,\n          9.599938487131828\n         ],\n         \"z\": [\n          0.015939931915767612,\n          0.024664806915767612,\n          0.025620542922093942,\n          0.016895667922093942,\n          0.015939931915767612\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"lightskyblue\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          0.8123468345040965,\n          1.0621945420040966,\n          1.0621944622925017,\n          0.8123467547925016,\n          0.8123468345040965\n         ],\n         \"y\": [\n          10.399935452451604,\n          10.399935452451604,\n          11.199932669428227,\n          11.199932669428227,\n          10.399935452451604\n         ],\n         \"z\": [\n          0.016895667922093942,\n          0.025620542922093942,\n          0.02659385269443925,\n          0.01786897769443925,\n          0.016895667922093942\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"lightskyblue\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          0.8123467547925016,\n          1.0621944622925017,\n          1.0621943836359045,\n          0.8123466761359044,\n          0.8123467547925016\n         ],\n         \"y\": [\n          11.199932669428227,\n          11.199932669428227,\n          11.999930322350817,\n          11.999930322350817,\n          11.199932669428227\n         ],\n         \"z\": [\n          0.01786897769443925,\n          0.02659385269443925,\n          0.027579959300556615,\n          0.018855084300556615,\n          0.01786897769443925\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"lightskyblue\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          0.8123466761359044,\n          1.0621943836359045,\n          1.062194305632194,\n          0.8123465981321941,\n          0.8123466761359044\n         ],\n         \"y\": [\n          11.999930322350817,\n          11.999930322350817,\n          12.799928232343898,\n          12.799928232343898,\n          11.999930322350817\n         ],\n         \"z\": [\n          0.018855084300556615,\n          0.027579959300556615,\n          0.02857484196380438,\n          0.01984996696380438,\n          0.018855084300556615\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"lightskyblue\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          0.8123465981321941,\n          1.062194305632194,\n          1.0621942287134034,\n          0.8123465212134034,\n          0.8123465981321941\n         ],\n         \"y\": [\n          12.799928232343898,\n          12.799928232343898,\n          13.599926573724765,\n          13.599926573724765,\n          12.799928232343898\n         ],\n         \"z\": [\n          0.01984996696380438,\n          0.02857484196380438,\n          0.02957535002889098,\n          0.02085047502889098,\n          0.01984996696380438\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"lightskyblue\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          0.8123465212134034,\n          1.0621942287134034,\n          1.0621941524208243,\n          0.8123464449208242,\n          0.8123465212134034\n         ],\n         \"y\": [\n          13.599926573724765,\n          13.599926573724765,\n          14.39992516668033,\n          14.39992516668033,\n          13.599926573724765\n         ],\n         \"z\": [\n          0.02085047502889098,\n          0.02957535002889098,\n          0.030579060403696567,\n          0.021854185403696567,\n          0.02085047502889098\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"lightskyblue\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          0.8123464449208242,\n          1.0621941524208243,\n          1.0621940770456886,\n          0.8123463695456885,\n          0.8123464449208242\n         ],\n         \"y\": [\n          14.39992516668033,\n          14.39992516668033,\n          15.199924158393646,\n          15.199924158393646,\n          14.39992516668033\n         ],\n         \"z\": [\n          0.021854185403696567,\n          0.030579060403696567,\n          0.03158436872109219,\n          0.022859493721092188,\n          0.021854185403696567\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"lightskyblue\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          0.8123463695456885,\n          1.0621940770456886,\n          1.0621940021092366,\n          0.8123462946092366,\n          0.8123463695456885\n         ],\n         \"y\": [\n          15.199924158393646,\n          15.199924158393646,\n          15.999923362319814,\n          15.999923362319814,\n          15.199924158393646\n         ],\n         \"z\": [\n          0.022859493721092188,\n          0.03158436872109219,\n          0.03259030272471522,\n          0.02386542772471522,\n          0.022859493721092188\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"lightskyblue\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          1.0621954150000001,\n          1.3120431225000002,\n          1.312043098795357,\n          1.062195391295357,\n          1.0621954150000001\n         ],\n         \"y\": [\n          9.162206417444405e-18,\n          9.162206417444405e-18,\n          0.7999933212351085,\n          0.7999933212351085,\n          9.162206417444405e-18\n         ],\n         \"z\": [\n          0.01744975000000005,\n          0.02617462500000005,\n          0.02624300489031038,\n          0.01751812989031038,\n          0.01744975000000005\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"lightskyblue\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          1.062195391295357,\n          1.312043098795357,\n          1.3120430596826245,\n          1.0621953521826244,\n          1.062195391295357\n         ],\n         \"y\": [\n          0.7999933212351085,\n          0.7999933212351085,\n          1.5999868291304182,\n          1.5999868291304182,\n          0.7999933212351085\n         ],\n         \"z\": [\n          0.01751812989031038,\n          0.02624300489031038,\n          0.026450875991601577,\n          0.017726000991601577,\n          0.01751812989031038\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"lightskyblue\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          1.0621953521826244,\n          1.3120430596826245,\n          1.3120430086878367,\n          1.0621953011878367,\n          1.0621953521826244\n         ],\n         \"y\": [\n          1.5999868291304182,\n          1.5999868291304182,\n          2.3999806938941566,\n          2.3999806938941566,\n          1.5999868291304182\n         ],\n         \"z\": [\n          0.017726000991601577,\n          0.026450875991601577,\n          0.02678378095937816,\n          0.01805890595937816,\n          0.017726000991601577\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"lightskyblue\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          1.0621953011878367,\n          1.3120430086878367,\n          1.3120429481702955,\n          1.0621952406702955,\n          1.0621953011878367\n         ],\n         \"y\": [\n          2.3999806938941566,\n          2.3999806938941566,\n          3.1999747586029037,\n          3.1999747586029037,\n          2.3999806938941566\n         ],\n         \"z\": [\n          0.01805890595937816,\n          0.02678378095937816,\n          0.02722789502102555,\n          0.01850302002102555,\n          0.01805890595937816\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"lightskyblue\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          1.0621952406702955,\n          1.3120429481702955,\n          1.3120428807906017,\n          1.0621951732906016,\n          1.0621952406702955\n         ],\n         \"y\": [\n          3.1999747586029037,\n          3.1999747586029037,\n          3.999969200022097,\n          3.999969200022097,\n          3.1999747586029037\n         ],\n         \"z\": [\n          0.01850302002102555,\n          0.02722789502102555,\n          0.027770211637624297,\n          0.019045336637624297,\n          0.01850302002102555\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"lightskyblue\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          1.0621951732906016,\n          1.3120428807906017,\n          1.312042808006008,\n          1.062195100506008,\n          1.0621951732906016\n         ],\n         \"y\": [\n          3.999969200022097,\n          3.999969200022097,\n          4.799963845425502,\n          4.799963845425502,\n          3.999969200022097\n         ],\n         \"z\": [\n          0.019045336637624297,\n          0.027770211637624297,\n          0.028398452164465245,\n          0.019673577164465245,\n          0.019045336637624297\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"lightskyblue\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          1.062195100506008,\n          1.312042808006008,\n          1.3120427317765955,\n          1.0621950242765954,\n          1.062195100506008\n         ],\n         \"y\": [\n          4.799963845425502,\n          4.799963845425502,\n          5.599958879734863,\n          5.599958879734863,\n          4.799963845425502\n         ],\n         \"z\": [\n          0.019673577164465245,\n          0.028398452164465245,\n          0.029101207730397104,\n          0.020376332730397104,\n          0.019673577164465245\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"lightskyblue\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          1.0621950242765954,\n          1.3120427317765955,\n          1.3120426528880864,\n          1.0621949453880863,\n          1.0621950242765954\n         ],\n         \"y\": [\n          5.599958879734863,\n          5.599958879734863,\n          6.399954127618544,\n          6.399954127618544,\n          5.599958879734863\n         ],\n         \"z\": [\n          0.020376332730397104,\n          0.029101207730397104,\n          0.029867825832735437,\n          0.021142950832735437,\n          0.020376332730397104\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"lightskyblue\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          1.0621949453880863,\n          1.3120426528880864,\n          1.3120425727598415,\n          1.0621948652598414,\n          1.0621949453880863\n         ],\n         \"y\": [\n          6.399954127618544,\n          6.399954127618544,\n          7.199949778457311,\n          7.199949778457311,\n          6.399954127618544\n         ],\n         \"z\": [\n          0.021142950832735437,\n          0.029867825832735437,\n          0.030688542957041993,\n          0.021963667957041993,\n          0.021142950832735437\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"lightskyblue\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          1.0621948652598414,\n          1.3120425727598415,\n          1.3120424916849902,\n          1.0621947841849901,\n          1.0621948652598414\n         ],\n         \"y\": [\n          7.199949778457311,\n          7.199949778457311,\n          7.999945656178906,\n          7.999945656178906,\n          7.199949778457311\n         ],\n         \"z\": [\n          0.021963667957041993,\n          0.030688542957041993,\n          0.031554362932281324,\n          0.02282948793228132,\n          0.021963667957041993\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"lightskyblue\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          1.0621947841849901,\n          1.3120424916849902,\n          1.312042410685574,\n          1.0621947031855739,\n          1.0621947841849901\n         ],\n         \"y\": [\n          7.999945656178906,\n          7.999945656178906,\n          8.799941951360688,\n          8.799941951360688,\n          7.999945656178906\n         ],\n         \"z\": [\n          0.02282948793228132,\n          0.031554362932281324,\n          0.0324571857983649,\n          0.0237323107983649,\n          0.02282948793228132\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"lightskyblue\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          1.0621947031855739,\n          1.312042410685574,\n          1.3120423297102648,\n          1.0621946222102647,\n          1.0621947031855739\n         ],\n         \"y\": [\n          8.799941951360688,\n          8.799941951360688,\n          9.599938487131828,\n          9.599938487131828,\n          8.799941951360688\n         ],\n         \"z\": [\n          0.0237323107983649,\n          0.0324571857983649,\n          0.03338968191576761,\n          0.024664806915767612,\n          0.0237323107983649\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"lightskyblue\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          1.0621946222102647,\n          1.3120423297102648,\n          1.3120422495040966,\n          1.0621945420040966,\n          1.0621946222102647\n         ],\n         \"y\": [\n          9.599938487131828,\n          9.599938487131828,\n          10.399935452451604,\n          10.399935452451604,\n          9.599938487131828\n         ],\n         \"z\": [\n          0.024664806915767612,\n          0.03338968191576761,\n          0.034345417922093946,\n          0.025620542922093942,\n          0.024664806915767612\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"lightskyblue\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          1.0621945420040966,\n          1.3120422495040966,\n          1.3120421697925018,\n          1.0621944622925017,\n          1.0621945420040966\n         ],\n         \"y\": [\n          10.399935452451604,\n          10.399935452451604,\n          11.199932669428227,\n          11.199932669428227,\n          10.399935452451604\n         ],\n         \"z\": [\n          0.025620542922093942,\n          0.034345417922093946,\n          0.03531872769443925,\n          0.02659385269443925,\n          0.025620542922093942\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"lightskyblue\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          1.0621944622925017,\n          1.3120421697925018,\n          1.3120420911359045,\n          1.0621943836359045,\n          1.0621944622925017\n         ],\n         \"y\": [\n          11.199932669428227,\n          11.199932669428227,\n          11.999930322350817,\n          11.999930322350817,\n          11.199932669428227\n         ],\n         \"z\": [\n          0.02659385269443925,\n          0.03531872769443925,\n          0.036304834300556615,\n          0.027579959300556615,\n          0.02659385269443925\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"lightskyblue\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          1.0621943836359045,\n          1.3120420911359045,\n          1.3120420131321942,\n          1.062194305632194,\n          1.0621943836359045\n         ],\n         \"y\": [\n          11.999930322350817,\n          11.999930322350817,\n          12.799928232343898,\n          12.799928232343898,\n          11.999930322350817\n         ],\n         \"z\": [\n          0.027579959300556615,\n          0.036304834300556615,\n          0.03729971696380438,\n          0.02857484196380438,\n          0.027579959300556615\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"lightskyblue\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          1.062194305632194,\n          1.3120420131321942,\n          1.3120419362134035,\n          1.0621942287134034,\n          1.062194305632194\n         ],\n         \"y\": [\n          12.799928232343898,\n          12.799928232343898,\n          13.599926573724765,\n          13.599926573724765,\n          12.799928232343898\n         ],\n         \"z\": [\n          0.02857484196380438,\n          0.03729971696380438,\n          0.03830022502889098,\n          0.02957535002889098,\n          0.02857484196380438\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"lightskyblue\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          1.0621942287134034,\n          1.3120419362134035,\n          1.3120418599208243,\n          1.0621941524208243,\n          1.0621942287134034\n         ],\n         \"y\": [\n          13.599926573724765,\n          13.599926573724765,\n          14.39992516668033,\n          14.39992516668033,\n          13.599926573724765\n         ],\n         \"z\": [\n          0.02957535002889098,\n          0.03830022502889098,\n          0.03930393540369657,\n          0.030579060403696567,\n          0.02957535002889098\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"lightskyblue\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          1.0621941524208243,\n          1.3120418599208243,\n          1.3120417845456886,\n          1.0621940770456886,\n          1.0621941524208243\n         ],\n         \"y\": [\n          14.39992516668033,\n          14.39992516668033,\n          15.199924158393646,\n          15.199924158393646,\n          14.39992516668033\n         ],\n         \"z\": [\n          0.030579060403696567,\n          0.03930393540369657,\n          0.04030924372109219,\n          0.03158436872109219,\n          0.030579060403696567\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"lightskyblue\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          1.0621940770456886,\n          1.3120417845456886,\n          1.3120417096092367,\n          1.0621940021092366,\n          1.0621940770456886\n         ],\n         \"y\": [\n          15.199924158393646,\n          15.199924158393646,\n          15.999923362319814,\n          15.999923362319814,\n          15.199924158393646\n         ],\n         \"z\": [\n          0.03158436872109219,\n          0.04030924372109219,\n          0.04131517772471522,\n          0.03259030272471522,\n          0.03158436872109219\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"lightskyblue\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          1.3120431225000002,\n          1.5618908300000003,\n          1.5618908062953571,\n          1.312043098795357,\n          1.3120431225000002\n         ],\n         \"y\": [\n          9.162206417444405e-18,\n          9.162206417444405e-18,\n          0.7999933212351085,\n          0.7999933212351085,\n          9.162206417444405e-18\n         ],\n         \"z\": [\n          0.02617462500000005,\n          0.03489950000000005,\n          0.03496787989031038,\n          0.02624300489031038,\n          0.02617462500000005\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"lightskyblue\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          1.312043098795357,\n          1.5618908062953571,\n          1.5618907671826245,\n          1.3120430596826245,\n          1.312043098795357\n         ],\n         \"y\": [\n          0.7999933212351085,\n          0.7999933212351085,\n          1.5999868291304182,\n          1.5999868291304182,\n          0.7999933212351085\n         ],\n         \"z\": [\n          0.02624300489031038,\n          0.03496787989031038,\n          0.03517575099160158,\n          0.026450875991601577,\n          0.02624300489031038\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"lightskyblue\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          1.3120430596826245,\n          1.5618907671826245,\n          1.5618907161878368,\n          1.3120430086878367,\n          1.3120430596826245\n         ],\n         \"y\": [\n          1.5999868291304182,\n          1.5999868291304182,\n          2.3999806938941566,\n          2.3999806938941566,\n          1.5999868291304182\n         ],\n         \"z\": [\n          0.026450875991601577,\n          0.03517575099160158,\n          0.03550865595937816,\n          0.02678378095937816,\n          0.026450875991601577\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"lightskyblue\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          1.3120430086878367,\n          1.5618907161878368,\n          1.5618906556702956,\n          1.3120429481702955,\n          1.3120430086878367\n         ],\n         \"y\": [\n          2.3999806938941566,\n          2.3999806938941566,\n          3.1999747586029037,\n          3.1999747586029037,\n          2.3999806938941566\n         ],\n         \"z\": [\n          0.02678378095937816,\n          0.03550865595937816,\n          0.03595277002102555,\n          0.02722789502102555,\n          0.02678378095937816\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"lightskyblue\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          1.3120429481702955,\n          1.5618906556702956,\n          1.5618905882906018,\n          1.3120428807906017,\n          1.3120429481702955\n         ],\n         \"y\": [\n          3.1999747586029037,\n          3.1999747586029037,\n          3.999969200022097,\n          3.999969200022097,\n          3.1999747586029037\n         ],\n         \"z\": [\n          0.02722789502102555,\n          0.03595277002102555,\n          0.0364950866376243,\n          0.027770211637624297,\n          0.02722789502102555\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"lightskyblue\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          1.3120428807906017,\n          1.5618905882906018,\n          1.561890515506008,\n          1.312042808006008,\n          1.3120428807906017\n         ],\n         \"y\": [\n          3.999969200022097,\n          3.999969200022097,\n          4.799963845425502,\n          4.799963845425502,\n          3.999969200022097\n         ],\n         \"z\": [\n          0.027770211637624297,\n          0.0364950866376243,\n          0.037123327164465245,\n          0.028398452164465245,\n          0.027770211637624297\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"lightskyblue\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          1.312042808006008,\n          1.561890515506008,\n          1.5618904392765955,\n          1.3120427317765955,\n          1.312042808006008\n         ],\n         \"y\": [\n          4.799963845425502,\n          4.799963845425502,\n          5.599958879734863,\n          5.599958879734863,\n          4.799963845425502\n         ],\n         \"z\": [\n          0.028398452164465245,\n          0.037123327164465245,\n          0.0378260827303971,\n          0.029101207730397104,\n          0.028398452164465245\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"lightskyblue\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          1.3120427317765955,\n          1.5618904392765955,\n          1.5618903603880865,\n          1.3120426528880864,\n          1.3120427317765955\n         ],\n         \"y\": [\n          5.599958879734863,\n          5.599958879734863,\n          6.399954127618544,\n          6.399954127618544,\n          5.599958879734863\n         ],\n         \"z\": [\n          0.029101207730397104,\n          0.0378260827303971,\n          0.03859270083273544,\n          0.029867825832735437,\n          0.029101207730397104\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"lightskyblue\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          1.3120426528880864,\n          1.5618903603880865,\n          1.5618902802598416,\n          1.3120425727598415,\n          1.3120426528880864\n         ],\n         \"y\": [\n          6.399954127618544,\n          6.399954127618544,\n          7.199949778457311,\n          7.199949778457311,\n          6.399954127618544\n         ],\n         \"z\": [\n          0.029867825832735437,\n          0.03859270083273544,\n          0.03941341795704199,\n          0.030688542957041993,\n          0.029867825832735437\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"lightskyblue\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          1.3120425727598415,\n          1.5618902802598416,\n          1.5618901991849903,\n          1.3120424916849902,\n          1.3120425727598415\n         ],\n         \"y\": [\n          7.199949778457311,\n          7.199949778457311,\n          7.999945656178906,\n          7.999945656178906,\n          7.199949778457311\n         ],\n         \"z\": [\n          0.030688542957041993,\n          0.03941341795704199,\n          0.040279237932281324,\n          0.031554362932281324,\n          0.030688542957041993\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"lightskyblue\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          1.3120424916849902,\n          1.5618901991849903,\n          1.561890118185574,\n          1.312042410685574,\n          1.3120424916849902\n         ],\n         \"y\": [\n          7.999945656178906,\n          7.999945656178906,\n          8.799941951360688,\n          8.799941951360688,\n          7.999945656178906\n         ],\n         \"z\": [\n          0.031554362932281324,\n          0.040279237932281324,\n          0.0411820607983649,\n          0.0324571857983649,\n          0.031554362932281324\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"lightskyblue\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          1.312042410685574,\n          1.561890118185574,\n          1.5618900372102649,\n          1.3120423297102648,\n          1.312042410685574\n         ],\n         \"y\": [\n          8.799941951360688,\n          8.799941951360688,\n          9.599938487131828,\n          9.599938487131828,\n          8.799941951360688\n         ],\n         \"z\": [\n          0.0324571857983649,\n          0.0411820607983649,\n          0.04211455691576761,\n          0.03338968191576761,\n          0.0324571857983649\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"lightskyblue\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          1.3120423297102648,\n          1.5618900372102649,\n          1.5618899570040967,\n          1.3120422495040966,\n          1.3120423297102648\n         ],\n         \"y\": [\n          9.599938487131828,\n          9.599938487131828,\n          10.399935452451604,\n          10.399935452451604,\n          9.599938487131828\n         ],\n         \"z\": [\n          0.03338968191576761,\n          0.04211455691576761,\n          0.043070292922093946,\n          0.034345417922093946,\n          0.03338968191576761\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"lightskyblue\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          1.3120422495040966,\n          1.5618899570040967,\n          1.5618898772925018,\n          1.3120421697925018,\n          1.3120422495040966\n         ],\n         \"y\": [\n          10.399935452451604,\n          10.399935452451604,\n          11.199932669428227,\n          11.199932669428227,\n          10.399935452451604\n         ],\n         \"z\": [\n          0.034345417922093946,\n          0.043070292922093946,\n          0.04404360269443925,\n          0.03531872769443925,\n          0.034345417922093946\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"lightskyblue\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          1.3120421697925018,\n          1.5618898772925018,\n          1.5618897986359046,\n          1.3120420911359045,\n          1.3120421697925018\n         ],\n         \"y\": [\n          11.199932669428227,\n          11.199932669428227,\n          11.999930322350817,\n          11.999930322350817,\n          11.199932669428227\n         ],\n         \"z\": [\n          0.03531872769443925,\n          0.04404360269443925,\n          0.045029709300556615,\n          0.036304834300556615,\n          0.03531872769443925\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"lightskyblue\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          1.3120420911359045,\n          1.5618897986359046,\n          1.5618897206321942,\n          1.3120420131321942,\n          1.3120420911359045\n         ],\n         \"y\": [\n          11.999930322350817,\n          11.999930322350817,\n          12.799928232343898,\n          12.799928232343898,\n          11.999930322350817\n         ],\n         \"z\": [\n          0.036304834300556615,\n          0.045029709300556615,\n          0.04602459196380438,\n          0.03729971696380438,\n          0.036304834300556615\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"lightskyblue\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          1.3120420131321942,\n          1.5618897206321942,\n          1.5618896437134036,\n          1.3120419362134035,\n          1.3120420131321942\n         ],\n         \"y\": [\n          12.799928232343898,\n          12.799928232343898,\n          13.599926573724765,\n          13.599926573724765,\n          12.799928232343898\n         ],\n         \"z\": [\n          0.03729971696380438,\n          0.04602459196380438,\n          0.04702510002889098,\n          0.03830022502889098,\n          0.03729971696380438\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"lightskyblue\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          1.3120419362134035,\n          1.5618896437134036,\n          1.5618895674208244,\n          1.3120418599208243,\n          1.3120419362134035\n         ],\n         \"y\": [\n          13.599926573724765,\n          13.599926573724765,\n          14.39992516668033,\n          14.39992516668033,\n          13.599926573724765\n         ],\n         \"z\": [\n          0.03830022502889098,\n          0.04702510002889098,\n          0.04802881040369657,\n          0.03930393540369657,\n          0.03830022502889098\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"lightskyblue\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          1.3120418599208243,\n          1.5618895674208244,\n          1.5618894920456887,\n          1.3120417845456886,\n          1.3120418599208243\n         ],\n         \"y\": [\n          14.39992516668033,\n          14.39992516668033,\n          15.199924158393646,\n          15.199924158393646,\n          14.39992516668033\n         ],\n         \"z\": [\n          0.03930393540369657,\n          0.04802881040369657,\n          0.04903411872109219,\n          0.04030924372109219,\n          0.03930393540369657\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"lightskyblue\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          1.3120417845456886,\n          1.5618894920456887,\n          1.5618894171092368,\n          1.3120417096092367,\n          1.3120417845456886\n         ],\n         \"y\": [\n          15.199924158393646,\n          15.199924158393646,\n          15.999923362319814,\n          15.999923362319814,\n          15.199924158393646\n         ],\n         \"z\": [\n          0.04030924372109219,\n          0.04903411872109219,\n          0.05004005272471522,\n          0.04131517772471522,\n          0.04030924372109219\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"lightskyblue\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          1.5618908300000003,\n          1.8117385375000004,\n          1.8117385137953572,\n          1.5618908062953571,\n          1.5618908300000003\n         ],\n         \"y\": [\n          9.162206417444405e-18,\n          9.162206417444405e-18,\n          0.7999933212351085,\n          0.7999933212351085,\n          9.162206417444405e-18\n         ],\n         \"z\": [\n          0.03489950000000005,\n          0.04362437500000005,\n          0.04369275489031038,\n          0.03496787989031038,\n          0.03489950000000005\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"lightskyblue\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          1.5618908062953571,\n          1.8117385137953572,\n          1.8117384746826246,\n          1.5618907671826245,\n          1.5618908062953571\n         ],\n         \"y\": [\n          0.7999933212351085,\n          0.7999933212351085,\n          1.5999868291304182,\n          1.5999868291304182,\n          0.7999933212351085\n         ],\n         \"z\": [\n          0.03496787989031038,\n          0.04369275489031038,\n          0.04390062599160158,\n          0.03517575099160158,\n          0.03496787989031038\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"lightskyblue\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          1.5618907671826245,\n          1.8117384746826246,\n          1.8117384236878369,\n          1.5618907161878368,\n          1.5618907671826245\n         ],\n         \"y\": [\n          1.5999868291304182,\n          1.5999868291304182,\n          2.3999806938941566,\n          2.3999806938941566,\n          1.5999868291304182\n         ],\n         \"z\": [\n          0.03517575099160158,\n          0.04390062599160158,\n          0.04423353095937816,\n          0.03550865595937816,\n          0.03517575099160158\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"lightskyblue\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          1.5618907161878368,\n          1.8117384236878369,\n          1.8117383631702957,\n          1.5618906556702956,\n          1.5618907161878368\n         ],\n         \"y\": [\n          2.3999806938941566,\n          2.3999806938941566,\n          3.1999747586029037,\n          3.1999747586029037,\n          2.3999806938941566\n         ],\n         \"z\": [\n          0.03550865595937816,\n          0.04423353095937816,\n          0.04467764502102555,\n          0.03595277002102555,\n          0.03550865595937816\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"lightskyblue\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          1.5618906556702956,\n          1.8117383631702957,\n          1.8117382957906019,\n          1.5618905882906018,\n          1.5618906556702956\n         ],\n         \"y\": [\n          3.1999747586029037,\n          3.1999747586029037,\n          3.999969200022097,\n          3.999969200022097,\n          3.1999747586029037\n         ],\n         \"z\": [\n          0.03595277002102555,\n          0.04467764502102555,\n          0.0452199616376243,\n          0.0364950866376243,\n          0.03595277002102555\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"lightskyblue\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          1.5618905882906018,\n          1.8117382957906019,\n          1.8117382230060082,\n          1.561890515506008,\n          1.5618905882906018\n         ],\n         \"y\": [\n          3.999969200022097,\n          3.999969200022097,\n          4.799963845425502,\n          4.799963845425502,\n          3.999969200022097\n         ],\n         \"z\": [\n          0.0364950866376243,\n          0.0452199616376243,\n          0.045848202164465245,\n          0.037123327164465245,\n          0.0364950866376243\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"lightskyblue\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          1.561890515506008,\n          1.8117382230060082,\n          1.8117381467765956,\n          1.5618904392765955,\n          1.561890515506008\n         ],\n         \"y\": [\n          4.799963845425502,\n          4.799963845425502,\n          5.599958879734863,\n          5.599958879734863,\n          4.799963845425502\n         ],\n         \"z\": [\n          0.037123327164465245,\n          0.045848202164465245,\n          0.0465509577303971,\n          0.0378260827303971,\n          0.037123327164465245\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"lightskyblue\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          1.5618904392765955,\n          1.8117381467765956,\n          1.8117380678880866,\n          1.5618903603880865,\n          1.5618904392765955\n         ],\n         \"y\": [\n          5.599958879734863,\n          5.599958879734863,\n          6.399954127618544,\n          6.399954127618544,\n          5.599958879734863\n         ],\n         \"z\": [\n          0.0378260827303971,\n          0.0465509577303971,\n          0.04731757583273544,\n          0.03859270083273544,\n          0.0378260827303971\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"lightskyblue\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          1.5618903603880865,\n          1.8117380678880866,\n          1.8117379877598416,\n          1.5618902802598416,\n          1.5618903603880865\n         ],\n         \"y\": [\n          6.399954127618544,\n          6.399954127618544,\n          7.199949778457311,\n          7.199949778457311,\n          6.399954127618544\n         ],\n         \"z\": [\n          0.03859270083273544,\n          0.04731757583273544,\n          0.04813829295704199,\n          0.03941341795704199,\n          0.03859270083273544\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"lightskyblue\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          1.5618902802598416,\n          1.8117379877598416,\n          1.8117379066849904,\n          1.5618901991849903,\n          1.5618902802598416\n         ],\n         \"y\": [\n          7.199949778457311,\n          7.199949778457311,\n          7.999945656178906,\n          7.999945656178906,\n          7.199949778457311\n         ],\n         \"z\": [\n          0.03941341795704199,\n          0.04813829295704199,\n          0.049004112932281324,\n          0.040279237932281324,\n          0.03941341795704199\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"lightskyblue\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          1.5618901991849903,\n          1.8117379066849904,\n          1.811737825685574,\n          1.561890118185574,\n          1.5618901991849903\n         ],\n         \"y\": [\n          7.999945656178906,\n          7.999945656178906,\n          8.799941951360688,\n          8.799941951360688,\n          7.999945656178906\n         ],\n         \"z\": [\n          0.040279237932281324,\n          0.049004112932281324,\n          0.0499069357983649,\n          0.0411820607983649,\n          0.040279237932281324\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"lightskyblue\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          1.561890118185574,\n          1.811737825685574,\n          1.811737744710265,\n          1.5618900372102649,\n          1.561890118185574\n         ],\n         \"y\": [\n          8.799941951360688,\n          8.799941951360688,\n          9.599938487131828,\n          9.599938487131828,\n          8.799941951360688\n         ],\n         \"z\": [\n          0.0411820607983649,\n          0.0499069357983649,\n          0.05083943191576761,\n          0.04211455691576761,\n          0.0411820607983649\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"lightskyblue\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          1.5618900372102649,\n          1.811737744710265,\n          1.8117376645040968,\n          1.5618899570040967,\n          1.5618900372102649\n         ],\n         \"y\": [\n          9.599938487131828,\n          9.599938487131828,\n          10.399935452451604,\n          10.399935452451604,\n          9.599938487131828\n         ],\n         \"z\": [\n          0.04211455691576761,\n          0.05083943191576761,\n          0.051795167922093946,\n          0.043070292922093946,\n          0.04211455691576761\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"lightskyblue\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          1.5618899570040967,\n          1.8117376645040968,\n          1.811737584792502,\n          1.5618898772925018,\n          1.5618899570040967\n         ],\n         \"y\": [\n          10.399935452451604,\n          10.399935452451604,\n          11.199932669428227,\n          11.199932669428227,\n          10.399935452451604\n         ],\n         \"z\": [\n          0.043070292922093946,\n          0.051795167922093946,\n          0.05276847769443925,\n          0.04404360269443925,\n          0.043070292922093946\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"lightskyblue\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          1.5618898772925018,\n          1.811737584792502,\n          1.8117375061359047,\n          1.5618897986359046,\n          1.5618898772925018\n         ],\n         \"y\": [\n          11.199932669428227,\n          11.199932669428227,\n          11.999930322350817,\n          11.999930322350817,\n          11.199932669428227\n         ],\n         \"z\": [\n          0.04404360269443925,\n          0.05276847769443925,\n          0.053754584300556615,\n          0.045029709300556615,\n          0.04404360269443925\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"lightskyblue\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          1.5618897986359046,\n          1.8117375061359047,\n          1.8117374281321943,\n          1.5618897206321942,\n          1.5618897986359046\n         ],\n         \"y\": [\n          11.999930322350817,\n          11.999930322350817,\n          12.799928232343898,\n          12.799928232343898,\n          11.999930322350817\n         ],\n         \"z\": [\n          0.045029709300556615,\n          0.053754584300556615,\n          0.05474946696380438,\n          0.04602459196380438,\n          0.045029709300556615\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"lightskyblue\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          1.5618897206321942,\n          1.8117374281321943,\n          1.8117373512134036,\n          1.5618896437134036,\n          1.5618897206321942\n         ],\n         \"y\": [\n          12.799928232343898,\n          12.799928232343898,\n          13.599926573724765,\n          13.599926573724765,\n          12.799928232343898\n         ],\n         \"z\": [\n          0.04602459196380438,\n          0.05474946696380438,\n          0.05574997502889098,\n          0.04702510002889098,\n          0.04602459196380438\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"lightskyblue\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          1.5618896437134036,\n          1.8117373512134036,\n          1.8117372749208245,\n          1.5618895674208244,\n          1.5618896437134036\n         ],\n         \"y\": [\n          13.599926573724765,\n          13.599926573724765,\n          14.39992516668033,\n          14.39992516668033,\n          13.599926573724765\n         ],\n         \"z\": [\n          0.04702510002889098,\n          0.05574997502889098,\n          0.05675368540369657,\n          0.04802881040369657,\n          0.04702510002889098\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"lightskyblue\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          1.5618895674208244,\n          1.8117372749208245,\n          1.8117371995456888,\n          1.5618894920456887,\n          1.5618895674208244\n         ],\n         \"y\": [\n          14.39992516668033,\n          14.39992516668033,\n          15.199924158393646,\n          15.199924158393646,\n          14.39992516668033\n         ],\n         \"z\": [\n          0.04802881040369657,\n          0.05675368540369657,\n          0.05775899372109219,\n          0.04903411872109219,\n          0.04802881040369657\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"lightskyblue\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          1.5618894920456887,\n          1.8117371995456888,\n          1.8117371246092369,\n          1.5618894171092368,\n          1.5618894920456887\n         ],\n         \"y\": [\n          15.199924158393646,\n          15.199924158393646,\n          15.999923362319814,\n          15.999923362319814,\n          15.199924158393646\n         ],\n         \"z\": [\n          0.04903411872109219,\n          0.05775899372109219,\n          0.05876492772471522,\n          0.05004005272471522,\n          0.04903411872109219\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"lightskyblue\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          1.8117385375000004,\n          2.0615862450000004,\n          2.0615862212953573,\n          1.8117385137953572,\n          1.8117385375000004\n         ],\n         \"y\": [\n          9.162206417444405e-18,\n          9.162206417444405e-18,\n          0.7999933212351085,\n          0.7999933212351085,\n          9.162206417444405e-18\n         ],\n         \"z\": [\n          0.04362437500000005,\n          0.05234925000000005,\n          0.05241762989031038,\n          0.04369275489031038,\n          0.04362437500000005\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"lightskyblue\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          1.8117385137953572,\n          2.0615862212953573,\n          2.0615861821826247,\n          1.8117384746826246,\n          1.8117385137953572\n         ],\n         \"y\": [\n          0.7999933212351085,\n          0.7999933212351085,\n          1.5999868291304182,\n          1.5999868291304182,\n          0.7999933212351085\n         ],\n         \"z\": [\n          0.04369275489031038,\n          0.05241762989031038,\n          0.05262550099160158,\n          0.04390062599160158,\n          0.04369275489031038\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"lightskyblue\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          1.8117384746826246,\n          2.0615861821826247,\n          2.0615861311878367,\n          1.8117384236878369,\n          1.8117384746826246\n         ],\n         \"y\": [\n          1.5999868291304182,\n          1.5999868291304182,\n          2.3999806938941566,\n          2.3999806938941566,\n          1.5999868291304182\n         ],\n         \"z\": [\n          0.04390062599160158,\n          0.05262550099160158,\n          0.05295840595937816,\n          0.04423353095937816,\n          0.04390062599160158\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"lightskyblue\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          1.8117384236878369,\n          2.0615861311878367,\n          2.0615860706702955,\n          1.8117383631702957,\n          1.8117384236878369\n         ],\n         \"y\": [\n          2.3999806938941566,\n          2.3999806938941566,\n          3.1999747586029037,\n          3.1999747586029037,\n          2.3999806938941566\n         ],\n         \"z\": [\n          0.04423353095937816,\n          0.05295840595937816,\n          0.05340252002102555,\n          0.04467764502102555,\n          0.04423353095937816\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"lightskyblue\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          1.8117383631702957,\n          2.0615860706702955,\n          2.0615860032906017,\n          1.8117382957906019,\n          1.8117383631702957\n         ],\n         \"y\": [\n          3.1999747586029037,\n          3.1999747586029037,\n          3.999969200022097,\n          3.999969200022097,\n          3.1999747586029037\n         ],\n         \"z\": [\n          0.04467764502102555,\n          0.05340252002102555,\n          0.0539448366376243,\n          0.0452199616376243,\n          0.04467764502102555\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"lightskyblue\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          1.8117382957906019,\n          2.0615860032906017,\n          2.0615859305060082,\n          1.8117382230060082,\n          1.8117382957906019\n         ],\n         \"y\": [\n          3.999969200022097,\n          3.999969200022097,\n          4.799963845425502,\n          4.799963845425502,\n          3.999969200022097\n         ],\n         \"z\": [\n          0.0452199616376243,\n          0.0539448366376243,\n          0.054573077164465245,\n          0.045848202164465245,\n          0.0452199616376243\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"lightskyblue\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          1.8117382230060082,\n          2.0615859305060082,\n          2.0615858542765957,\n          1.8117381467765956,\n          1.8117382230060082\n         ],\n         \"y\": [\n          4.799963845425502,\n          4.799963845425502,\n          5.599958879734863,\n          5.599958879734863,\n          4.799963845425502\n         ],\n         \"z\": [\n          0.045848202164465245,\n          0.054573077164465245,\n          0.0552758327303971,\n          0.0465509577303971,\n          0.045848202164465245\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"lightskyblue\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          1.8117381467765956,\n          2.0615858542765957,\n          2.0615857753880866,\n          1.8117380678880866,\n          1.8117381467765956\n         ],\n         \"y\": [\n          5.599958879734863,\n          5.599958879734863,\n          6.399954127618544,\n          6.399954127618544,\n          5.599958879734863\n         ],\n         \"z\": [\n          0.0465509577303971,\n          0.0552758327303971,\n          0.05604245083273544,\n          0.04731757583273544,\n          0.0465509577303971\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"lightskyblue\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          1.8117380678880866,\n          2.0615857753880866,\n          2.0615856952598417,\n          1.8117379877598416,\n          1.8117380678880866\n         ],\n         \"y\": [\n          6.399954127618544,\n          6.399954127618544,\n          7.199949778457311,\n          7.199949778457311,\n          6.399954127618544\n         ],\n         \"z\": [\n          0.04731757583273544,\n          0.05604245083273544,\n          0.05686316795704199,\n          0.04813829295704199,\n          0.04731757583273544\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"lightskyblue\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          1.8117379877598416,\n          2.0615856952598417,\n          2.0615856141849904,\n          1.8117379066849904,\n          1.8117379877598416\n         ],\n         \"y\": [\n          7.199949778457311,\n          7.199949778457311,\n          7.999945656178906,\n          7.999945656178906,\n          7.199949778457311\n         ],\n         \"z\": [\n          0.04813829295704199,\n          0.05686316795704199,\n          0.057728987932281324,\n          0.049004112932281324,\n          0.04813829295704199\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"lightskyblue\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          1.8117379066849904,\n          2.0615856141849904,\n          2.061585533185574,\n          1.811737825685574,\n          1.8117379066849904\n         ],\n         \"y\": [\n          7.999945656178906,\n          7.999945656178906,\n          8.799941951360688,\n          8.799941951360688,\n          7.999945656178906\n         ],\n         \"z\": [\n          0.049004112932281324,\n          0.057728987932281324,\n          0.0586318107983649,\n          0.0499069357983649,\n          0.049004112932281324\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"lightskyblue\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          1.811737825685574,\n          2.061585533185574,\n          2.061585452210265,\n          1.811737744710265,\n          1.811737825685574\n         ],\n         \"y\": [\n          8.799941951360688,\n          8.799941951360688,\n          9.599938487131828,\n          9.599938487131828,\n          8.799941951360688\n         ],\n         \"z\": [\n          0.0499069357983649,\n          0.0586318107983649,\n          0.05956430691576761,\n          0.05083943191576761,\n          0.0499069357983649\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"lightskyblue\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          1.811737744710265,\n          2.061585452210265,\n          2.061585372004097,\n          1.8117376645040968,\n          1.811737744710265\n         ],\n         \"y\": [\n          9.599938487131828,\n          9.599938487131828,\n          10.399935452451604,\n          10.399935452451604,\n          9.599938487131828\n         ],\n         \"z\": [\n          0.05083943191576761,\n          0.05956430691576761,\n          0.060520042922093946,\n          0.051795167922093946,\n          0.05083943191576761\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"lightskyblue\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          1.8117376645040968,\n          2.061585372004097,\n          2.0615852922925018,\n          1.811737584792502,\n          1.8117376645040968\n         ],\n         \"y\": [\n          10.399935452451604,\n          10.399935452451604,\n          11.199932669428227,\n          11.199932669428227,\n          10.399935452451604\n         ],\n         \"z\": [\n          0.051795167922093946,\n          0.060520042922093946,\n          0.06149335269443925,\n          0.05276847769443925,\n          0.051795167922093946\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"lightskyblue\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          1.811737584792502,\n          2.0615852922925018,\n          2.0615852136359045,\n          1.8117375061359047,\n          1.811737584792502\n         ],\n         \"y\": [\n          11.199932669428227,\n          11.199932669428227,\n          11.999930322350817,\n          11.999930322350817,\n          11.199932669428227\n         ],\n         \"z\": [\n          0.05276847769443925,\n          0.06149335269443925,\n          0.062479459300556615,\n          0.053754584300556615,\n          0.05276847769443925\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"lightskyblue\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          1.8117375061359047,\n          2.0615852136359045,\n          2.0615851356321944,\n          1.8117374281321943,\n          1.8117375061359047\n         ],\n         \"y\": [\n          11.999930322350817,\n          11.999930322350817,\n          12.799928232343898,\n          12.799928232343898,\n          11.999930322350817\n         ],\n         \"z\": [\n          0.053754584300556615,\n          0.062479459300556615,\n          0.06347434196380439,\n          0.05474946696380438,\n          0.053754584300556615\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"lightskyblue\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          1.8117374281321943,\n          2.0615851356321944,\n          2.0615850587134035,\n          1.8117373512134036,\n          1.8117374281321943\n         ],\n         \"y\": [\n          12.799928232343898,\n          12.799928232343898,\n          13.599926573724765,\n          13.599926573724765,\n          12.799928232343898\n         ],\n         \"z\": [\n          0.05474946696380438,\n          0.06347434196380439,\n          0.06447485002889097,\n          0.05574997502889098,\n          0.05474946696380438\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"lightskyblue\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          1.8117373512134036,\n          2.0615850587134035,\n          2.0615849824208246,\n          1.8117372749208245,\n          1.8117373512134036\n         ],\n         \"y\": [\n          13.599926573724765,\n          13.599926573724765,\n          14.39992516668033,\n          14.39992516668033,\n          13.599926573724765\n         ],\n         \"z\": [\n          0.05574997502889098,\n          0.06447485002889097,\n          0.06547856040369657,\n          0.05675368540369657,\n          0.05574997502889098\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"lightskyblue\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          1.8117372749208245,\n          2.0615849824208246,\n          2.0615849070456886,\n          1.8117371995456888,\n          1.8117372749208245\n         ],\n         \"y\": [\n          14.39992516668033,\n          14.39992516668033,\n          15.199924158393646,\n          15.199924158393646,\n          14.39992516668033\n         ],\n         \"z\": [\n          0.05675368540369657,\n          0.06547856040369657,\n          0.06648386872109219,\n          0.05775899372109219,\n          0.05675368540369657\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"lightskyblue\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          1.8117371995456888,\n          2.0615849070456886,\n          2.061584832109237,\n          1.8117371246092369,\n          1.8117371995456888\n         ],\n         \"y\": [\n          15.199924158393646,\n          15.199924158393646,\n          15.999923362319814,\n          15.999923362319814,\n          15.199924158393646\n         ],\n         \"z\": [\n          0.05775899372109219,\n          0.06648386872109219,\n          0.06748980272471522,\n          0.05876492772471522,\n          0.05775899372109219\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"grey\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          0.5625000000000001,\n          0.562499976295357,\n          0.5624999371826244,\n          0.5624998861878366,\n          0.5624998256702956,\n          0.5624997582906017,\n          0.5624996855060079,\n          0.5624996092765954,\n          0.5624995303880863,\n          0.5624994502598415,\n          0.5624993691849902,\n          0.5624992881855739,\n          0.5624992072102647,\n          0.5624991270040965,\n          0.5624990472925017,\n          0.5624989686359044,\n          0.5624988906321942,\n          0.5624988137134035,\n          0.5624987374208242,\n          0.5624986620456885,\n          0.5624985871092366\n         ],\n         \"y\": [\n          9.162206417444405e-18,\n          0.7999933212351085,\n          1.5999868291304182,\n          2.3999806938941566,\n          3.1999747586029037,\n          3.999969200022097,\n          4.799963845425502,\n          5.599958879734863,\n          6.399954127618544,\n          7.199949778457311,\n          7.999945656178906,\n          8.799941951360688,\n          9.599938487131828,\n          10.399935452451604,\n          11.199932669428227,\n          11.999930322350817,\n          12.799928232343898,\n          13.599926573724765,\n          14.39992516668033,\n          15.199924158393646,\n          15.999923362319814\n         ],\n         \"z\": [\n          4.871002816324649e-17,\n          6.837989031038178e-05,\n          0.00027625099160157664,\n          0.0006091559593781608,\n          0.0010532700210255516,\n          0.001595586637624299,\n          0.0022238271644652464,\n          0.0029265827303971044,\n          0.003693200832735435,\n          0.004513917957041995,\n          0.00537973793228132,\n          0.006282560798364902,\n          0.007215056915767613,\n          0.008170792922093943,\n          0.009144102694439252,\n          0.010130209300556614,\n          0.011125091963804382,\n          0.012125600028890982,\n          0.01312931040369657,\n          0.014134618721092188,\n          0.01514055272471522\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"grey\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          0.8123477075000001,\n          0.8123476837953569,\n          0.8123476446826243,\n          0.8123475936878366,\n          0.8123475331702955,\n          0.8123474657906017,\n          0.8123473930060079,\n          0.8123473167765953,\n          0.8123472378880863,\n          0.8123471577598415,\n          0.8123470766849902,\n          0.8123469956855739,\n          0.8123469147102647,\n          0.8123468345040965,\n          0.8123467547925016,\n          0.8123466761359044,\n          0.8123465981321941,\n          0.8123465212134034,\n          0.8123464449208242,\n          0.8123463695456885,\n          0.8123462946092366\n         ],\n         \"y\": [\n          9.162206417444405e-18,\n          0.7999933212351085,\n          1.5999868291304182,\n          2.3999806938941566,\n          3.1999747586029037,\n          3.999969200022097,\n          4.799963845425502,\n          5.599958879734863,\n          6.399954127618544,\n          7.199949778457311,\n          7.999945656178906,\n          8.799941951360688,\n          9.599938487131828,\n          10.399935452451604,\n          11.199932669428227,\n          11.999930322350817,\n          12.799928232343898,\n          13.599926573724765,\n          14.39992516668033,\n          15.199924158393646,\n          15.999923362319814\n         ],\n         \"z\": [\n          0.008724875000000049,\n          0.008793254890310381,\n          0.009001125991601577,\n          0.00933403095937816,\n          0.009778145021025551,\n          0.010320461637624298,\n          0.010948702164465246,\n          0.011651457730397104,\n          0.012418075832735435,\n          0.013238792957041995,\n          0.01410461293228132,\n          0.015007435798364901,\n          0.015939931915767612,\n          0.016895667922093942,\n          0.01786897769443925,\n          0.018855084300556615,\n          0.01984996696380438,\n          0.02085047502889098,\n          0.021854185403696567,\n          0.022859493721092188,\n          0.02386542772471522\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"grey\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          1.0621954150000001,\n          1.062195391295357,\n          1.0621953521826244,\n          1.0621953011878367,\n          1.0621952406702955,\n          1.0621951732906016,\n          1.062195100506008,\n          1.0621950242765954,\n          1.0621949453880863,\n          1.0621948652598414,\n          1.0621947841849901,\n          1.0621947031855739,\n          1.0621946222102647,\n          1.0621945420040966,\n          1.0621944622925017,\n          1.0621943836359045,\n          1.062194305632194,\n          1.0621942287134034,\n          1.0621941524208243,\n          1.0621940770456886,\n          1.0621940021092366\n         ],\n         \"y\": [\n          9.162206417444405e-18,\n          0.7999933212351085,\n          1.5999868291304182,\n          2.3999806938941566,\n          3.1999747586029037,\n          3.999969200022097,\n          4.799963845425502,\n          5.599958879734863,\n          6.399954127618544,\n          7.199949778457311,\n          7.999945656178906,\n          8.799941951360688,\n          9.599938487131828,\n          10.399935452451604,\n          11.199932669428227,\n          11.999930322350817,\n          12.799928232343898,\n          13.599926573724765,\n          14.39992516668033,\n          15.199924158393646,\n          15.999923362319814\n         ],\n         \"z\": [\n          0.01744975000000005,\n          0.01751812989031038,\n          0.017726000991601577,\n          0.01805890595937816,\n          0.01850302002102555,\n          0.019045336637624297,\n          0.019673577164465245,\n          0.020376332730397104,\n          0.021142950832735437,\n          0.021963667957041993,\n          0.02282948793228132,\n          0.0237323107983649,\n          0.024664806915767612,\n          0.025620542922093942,\n          0.02659385269443925,\n          0.027579959300556615,\n          0.02857484196380438,\n          0.02957535002889098,\n          0.030579060403696567,\n          0.03158436872109219,\n          0.03259030272471522\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"grey\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          1.3120431225000002,\n          1.312043098795357,\n          1.3120430596826245,\n          1.3120430086878367,\n          1.3120429481702955,\n          1.3120428807906017,\n          1.312042808006008,\n          1.3120427317765955,\n          1.3120426528880864,\n          1.3120425727598415,\n          1.3120424916849902,\n          1.312042410685574,\n          1.3120423297102648,\n          1.3120422495040966,\n          1.3120421697925018,\n          1.3120420911359045,\n          1.3120420131321942,\n          1.3120419362134035,\n          1.3120418599208243,\n          1.3120417845456886,\n          1.3120417096092367\n         ],\n         \"y\": [\n          9.162206417444405e-18,\n          0.7999933212351085,\n          1.5999868291304182,\n          2.3999806938941566,\n          3.1999747586029037,\n          3.999969200022097,\n          4.799963845425502,\n          5.599958879734863,\n          6.399954127618544,\n          7.199949778457311,\n          7.999945656178906,\n          8.799941951360688,\n          9.599938487131828,\n          10.399935452451604,\n          11.199932669428227,\n          11.999930322350817,\n          12.799928232343898,\n          13.599926573724765,\n          14.39992516668033,\n          15.199924158393646,\n          15.999923362319814\n         ],\n         \"z\": [\n          0.02617462500000005,\n          0.02624300489031038,\n          0.026450875991601577,\n          0.02678378095937816,\n          0.02722789502102555,\n          0.027770211637624297,\n          0.028398452164465245,\n          0.029101207730397104,\n          0.029867825832735437,\n          0.030688542957041993,\n          0.031554362932281324,\n          0.0324571857983649,\n          0.03338968191576761,\n          0.034345417922093946,\n          0.03531872769443925,\n          0.036304834300556615,\n          0.03729971696380438,\n          0.03830022502889098,\n          0.03930393540369657,\n          0.04030924372109219,\n          0.04131517772471522\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"grey\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          1.5618908300000003,\n          1.5618908062953571,\n          1.5618907671826245,\n          1.5618907161878368,\n          1.5618906556702956,\n          1.5618905882906018,\n          1.561890515506008,\n          1.5618904392765955,\n          1.5618903603880865,\n          1.5618902802598416,\n          1.5618901991849903,\n          1.561890118185574,\n          1.5618900372102649,\n          1.5618899570040967,\n          1.5618898772925018,\n          1.5618897986359046,\n          1.5618897206321942,\n          1.5618896437134036,\n          1.5618895674208244,\n          1.5618894920456887,\n          1.5618894171092368\n         ],\n         \"y\": [\n          9.162206417444405e-18,\n          0.7999933212351085,\n          1.5999868291304182,\n          2.3999806938941566,\n          3.1999747586029037,\n          3.999969200022097,\n          4.799963845425502,\n          5.599958879734863,\n          6.399954127618544,\n          7.199949778457311,\n          7.999945656178906,\n          8.799941951360688,\n          9.599938487131828,\n          10.399935452451604,\n          11.199932669428227,\n          11.999930322350817,\n          12.799928232343898,\n          13.599926573724765,\n          14.39992516668033,\n          15.199924158393646,\n          15.999923362319814\n         ],\n         \"z\": [\n          0.03489950000000005,\n          0.03496787989031038,\n          0.03517575099160158,\n          0.03550865595937816,\n          0.03595277002102555,\n          0.0364950866376243,\n          0.037123327164465245,\n          0.0378260827303971,\n          0.03859270083273544,\n          0.03941341795704199,\n          0.040279237932281324,\n          0.0411820607983649,\n          0.04211455691576761,\n          0.043070292922093946,\n          0.04404360269443925,\n          0.045029709300556615,\n          0.04602459196380438,\n          0.04702510002889098,\n          0.04802881040369657,\n          0.04903411872109219,\n          0.05004005272471522\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"grey\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          1.8117385375000004,\n          1.8117385137953572,\n          1.8117384746826246,\n          1.8117384236878369,\n          1.8117383631702957,\n          1.8117382957906019,\n          1.8117382230060082,\n          1.8117381467765956,\n          1.8117380678880866,\n          1.8117379877598416,\n          1.8117379066849904,\n          1.811737825685574,\n          1.811737744710265,\n          1.8117376645040968,\n          1.811737584792502,\n          1.8117375061359047,\n          1.8117374281321943,\n          1.8117373512134036,\n          1.8117372749208245,\n          1.8117371995456888,\n          1.8117371246092369\n         ],\n         \"y\": [\n          9.162206417444405e-18,\n          0.7999933212351085,\n          1.5999868291304182,\n          2.3999806938941566,\n          3.1999747586029037,\n          3.999969200022097,\n          4.799963845425502,\n          5.599958879734863,\n          6.399954127618544,\n          7.199949778457311,\n          7.999945656178906,\n          8.799941951360688,\n          9.599938487131828,\n          10.399935452451604,\n          11.199932669428227,\n          11.999930322350817,\n          12.799928232343898,\n          13.599926573724765,\n          14.39992516668033,\n          15.199924158393646,\n          15.999923362319814\n         ],\n         \"z\": [\n          0.04362437500000005,\n          0.04369275489031038,\n          0.04390062599160158,\n          0.04423353095937816,\n          0.04467764502102555,\n          0.0452199616376243,\n          0.045848202164465245,\n          0.0465509577303971,\n          0.04731757583273544,\n          0.04813829295704199,\n          0.049004112932281324,\n          0.0499069357983649,\n          0.05083943191576761,\n          0.051795167922093946,\n          0.05276847769443925,\n          0.053754584300556615,\n          0.05474946696380438,\n          0.05574997502889098,\n          0.05675368540369657,\n          0.05775899372109219,\n          0.05876492772471522\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"grey\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          2.0615862450000004,\n          2.0615862212953573,\n          2.0615861821826247,\n          2.0615861311878367,\n          2.0615860706702955,\n          2.0615860032906017,\n          2.0615859305060082,\n          2.0615858542765957,\n          2.0615857753880866,\n          2.0615856952598417,\n          2.0615856141849904,\n          2.061585533185574,\n          2.061585452210265,\n          2.061585372004097,\n          2.0615852922925018,\n          2.0615852136359045,\n          2.0615851356321944,\n          2.0615850587134035,\n          2.0615849824208246,\n          2.0615849070456886,\n          2.061584832109237\n         ],\n         \"y\": [\n          9.162206417444405e-18,\n          0.7999933212351085,\n          1.5999868291304182,\n          2.3999806938941566,\n          3.1999747586029037,\n          3.999969200022097,\n          4.799963845425502,\n          5.599958879734863,\n          6.399954127618544,\n          7.199949778457311,\n          7.999945656178906,\n          8.799941951360688,\n          9.599938487131828,\n          10.399935452451604,\n          11.199932669428227,\n          11.999930322350817,\n          12.799928232343898,\n          13.599926573724765,\n          14.39992516668033,\n          15.199924158393646,\n          15.999923362319814\n         ],\n         \"z\": [\n          0.05234925000000005,\n          0.05241762989031038,\n          0.05262550099160158,\n          0.05295840595937816,\n          0.05340252002102555,\n          0.0539448366376243,\n          0.054573077164465245,\n          0.0552758327303971,\n          0.05604245083273544,\n          0.05686316795704199,\n          0.057728987932281324,\n          0.0586318107983649,\n          0.05956430691576761,\n          0.060520042922093946,\n          0.06149335269443925,\n          0.062479459300556615,\n          0.06347434196380439,\n          0.06447485002889097,\n          0.06547856040369657,\n          0.06648386872109219,\n          0.06748980272471522\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"grey\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          0.5625000000000001,\n          0.8123477075000001,\n          1.0621954150000001,\n          1.3120431225000002,\n          1.5618908300000003,\n          1.8117385375000004,\n          2.0615862450000004\n         ],\n         \"y\": [\n          9.162206417444405e-18,\n          9.162206417444405e-18,\n          9.162206417444405e-18,\n          9.162206417444405e-18,\n          9.162206417444405e-18,\n          9.162206417444405e-18,\n          9.162206417444405e-18\n         ],\n         \"z\": [\n          4.871002816324649e-17,\n          0.008724875000000049,\n          0.01744975000000005,\n          0.02617462500000005,\n          0.03489950000000005,\n          0.04362437500000005,\n          0.05234925000000005\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"grey\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          0.562499976295357,\n          0.8123476837953569,\n          1.062195391295357,\n          1.312043098795357,\n          1.5618908062953571,\n          1.8117385137953572,\n          2.0615862212953573\n         ],\n         \"y\": [\n          0.7999933212351085,\n          0.7999933212351085,\n          0.7999933212351085,\n          0.7999933212351085,\n          0.7999933212351085,\n          0.7999933212351085,\n          0.7999933212351085\n         ],\n         \"z\": [\n          6.837989031038178e-05,\n          0.008793254890310381,\n          0.01751812989031038,\n          0.02624300489031038,\n          0.03496787989031038,\n          0.04369275489031038,\n          0.05241762989031038\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"grey\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          0.5624999371826244,\n          0.8123476446826243,\n          1.0621953521826244,\n          1.3120430596826245,\n          1.5618907671826245,\n          1.8117384746826246,\n          2.0615861821826247\n         ],\n         \"y\": [\n          1.5999868291304182,\n          1.5999868291304182,\n          1.5999868291304182,\n          1.5999868291304182,\n          1.5999868291304182,\n          1.5999868291304182,\n          1.5999868291304182\n         ],\n         \"z\": [\n          0.00027625099160157664,\n          0.009001125991601577,\n          0.017726000991601577,\n          0.026450875991601577,\n          0.03517575099160158,\n          0.04390062599160158,\n          0.05262550099160158\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"grey\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          0.5624998861878366,\n          0.8123475936878366,\n          1.0621953011878367,\n          1.3120430086878367,\n          1.5618907161878368,\n          1.8117384236878369,\n          2.0615861311878367\n         ],\n         \"y\": [\n          2.3999806938941566,\n          2.3999806938941566,\n          2.3999806938941566,\n          2.3999806938941566,\n          2.3999806938941566,\n          2.3999806938941566,\n          2.3999806938941566\n         ],\n         \"z\": [\n          0.0006091559593781608,\n          0.00933403095937816,\n          0.01805890595937816,\n          0.02678378095937816,\n          0.03550865595937816,\n          0.04423353095937816,\n          0.05295840595937816\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"grey\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          0.5624998256702956,\n          0.8123475331702955,\n          1.0621952406702955,\n          1.3120429481702955,\n          1.5618906556702956,\n          1.8117383631702957,\n          2.0615860706702955\n         ],\n         \"y\": [\n          3.1999747586029037,\n          3.1999747586029037,\n          3.1999747586029037,\n          3.1999747586029037,\n          3.1999747586029037,\n          3.1999747586029037,\n          3.1999747586029037\n         ],\n         \"z\": [\n          0.0010532700210255516,\n          0.009778145021025551,\n          0.01850302002102555,\n          0.02722789502102555,\n          0.03595277002102555,\n          0.04467764502102555,\n          0.05340252002102555\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"grey\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          0.5624997582906017,\n          0.8123474657906017,\n          1.0621951732906016,\n          1.3120428807906017,\n          1.5618905882906018,\n          1.8117382957906019,\n          2.0615860032906017\n         ],\n         \"y\": [\n          3.999969200022097,\n          3.999969200022097,\n          3.999969200022097,\n          3.999969200022097,\n          3.999969200022097,\n          3.999969200022097,\n          3.999969200022097\n         ],\n         \"z\": [\n          0.001595586637624299,\n          0.010320461637624298,\n          0.019045336637624297,\n          0.027770211637624297,\n          0.0364950866376243,\n          0.0452199616376243,\n          0.0539448366376243\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"grey\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          0.5624996855060079,\n          0.8123473930060079,\n          1.062195100506008,\n          1.312042808006008,\n          1.561890515506008,\n          1.8117382230060082,\n          2.0615859305060082\n         ],\n         \"y\": [\n          4.799963845425502,\n          4.799963845425502,\n          4.799963845425502,\n          4.799963845425502,\n          4.799963845425502,\n          4.799963845425502,\n          4.799963845425502\n         ],\n         \"z\": [\n          0.0022238271644652464,\n          0.010948702164465246,\n          0.019673577164465245,\n          0.028398452164465245,\n          0.037123327164465245,\n          0.045848202164465245,\n          0.054573077164465245\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"grey\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          0.5624996092765954,\n          0.8123473167765953,\n          1.0621950242765954,\n          1.3120427317765955,\n          1.5618904392765955,\n          1.8117381467765956,\n          2.0615858542765957\n         ],\n         \"y\": [\n          5.599958879734863,\n          5.599958879734863,\n          5.599958879734863,\n          5.599958879734863,\n          5.599958879734863,\n          5.599958879734863,\n          5.599958879734863\n         ],\n         \"z\": [\n          0.0029265827303971044,\n          0.011651457730397104,\n          0.020376332730397104,\n          0.029101207730397104,\n          0.0378260827303971,\n          0.0465509577303971,\n          0.0552758327303971\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"grey\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          0.5624995303880863,\n          0.8123472378880863,\n          1.0621949453880863,\n          1.3120426528880864,\n          1.5618903603880865,\n          1.8117380678880866,\n          2.0615857753880866\n         ],\n         \"y\": [\n          6.399954127618544,\n          6.399954127618544,\n          6.399954127618544,\n          6.399954127618544,\n          6.399954127618544,\n          6.399954127618544,\n          6.399954127618544\n         ],\n         \"z\": [\n          0.003693200832735435,\n          0.012418075832735435,\n          0.021142950832735437,\n          0.029867825832735437,\n          0.03859270083273544,\n          0.04731757583273544,\n          0.05604245083273544\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"grey\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          0.5624994502598415,\n          0.8123471577598415,\n          1.0621948652598414,\n          1.3120425727598415,\n          1.5618902802598416,\n          1.8117379877598416,\n          2.0615856952598417\n         ],\n         \"y\": [\n          7.199949778457311,\n          7.199949778457311,\n          7.199949778457311,\n          7.199949778457311,\n          7.199949778457311,\n          7.199949778457311,\n          7.199949778457311\n         ],\n         \"z\": [\n          0.004513917957041995,\n          0.013238792957041995,\n          0.021963667957041993,\n          0.030688542957041993,\n          0.03941341795704199,\n          0.04813829295704199,\n          0.05686316795704199\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"grey\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          0.5624993691849902,\n          0.8123470766849902,\n          1.0621947841849901,\n          1.3120424916849902,\n          1.5618901991849903,\n          1.8117379066849904,\n          2.0615856141849904\n         ],\n         \"y\": [\n          7.999945656178906,\n          7.999945656178906,\n          7.999945656178906,\n          7.999945656178906,\n          7.999945656178906,\n          7.999945656178906,\n          7.999945656178906\n         ],\n         \"z\": [\n          0.00537973793228132,\n          0.01410461293228132,\n          0.02282948793228132,\n          0.031554362932281324,\n          0.040279237932281324,\n          0.049004112932281324,\n          0.057728987932281324\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"grey\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          0.5624992881855739,\n          0.8123469956855739,\n          1.0621947031855739,\n          1.312042410685574,\n          1.561890118185574,\n          1.811737825685574,\n          2.061585533185574\n         ],\n         \"y\": [\n          8.799941951360688,\n          8.799941951360688,\n          8.799941951360688,\n          8.799941951360688,\n          8.799941951360688,\n          8.799941951360688,\n          8.799941951360688\n         ],\n         \"z\": [\n          0.006282560798364902,\n          0.015007435798364901,\n          0.0237323107983649,\n          0.0324571857983649,\n          0.0411820607983649,\n          0.0499069357983649,\n          0.0586318107983649\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"grey\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          0.5624992072102647,\n          0.8123469147102647,\n          1.0621946222102647,\n          1.3120423297102648,\n          1.5618900372102649,\n          1.811737744710265,\n          2.061585452210265\n         ],\n         \"y\": [\n          9.599938487131828,\n          9.599938487131828,\n          9.599938487131828,\n          9.599938487131828,\n          9.599938487131828,\n          9.599938487131828,\n          9.599938487131828\n         ],\n         \"z\": [\n          0.007215056915767613,\n          0.015939931915767612,\n          0.024664806915767612,\n          0.03338968191576761,\n          0.04211455691576761,\n          0.05083943191576761,\n          0.05956430691576761\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"grey\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          0.5624991270040965,\n          0.8123468345040965,\n          1.0621945420040966,\n          1.3120422495040966,\n          1.5618899570040967,\n          1.8117376645040968,\n          2.061585372004097\n         ],\n         \"y\": [\n          10.399935452451604,\n          10.399935452451604,\n          10.399935452451604,\n          10.399935452451604,\n          10.399935452451604,\n          10.399935452451604,\n          10.399935452451604\n         ],\n         \"z\": [\n          0.008170792922093943,\n          0.016895667922093942,\n          0.025620542922093942,\n          0.034345417922093946,\n          0.043070292922093946,\n          0.051795167922093946,\n          0.060520042922093946\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"grey\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          0.5624990472925017,\n          0.8123467547925016,\n          1.0621944622925017,\n          1.3120421697925018,\n          1.5618898772925018,\n          1.811737584792502,\n          2.0615852922925018\n         ],\n         \"y\": [\n          11.199932669428227,\n          11.199932669428227,\n          11.199932669428227,\n          11.199932669428227,\n          11.199932669428227,\n          11.199932669428227,\n          11.199932669428227\n         ],\n         \"z\": [\n          0.009144102694439252,\n          0.01786897769443925,\n          0.02659385269443925,\n          0.03531872769443925,\n          0.04404360269443925,\n          0.05276847769443925,\n          0.06149335269443925\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"grey\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          0.5624989686359044,\n          0.8123466761359044,\n          1.0621943836359045,\n          1.3120420911359045,\n          1.5618897986359046,\n          1.8117375061359047,\n          2.0615852136359045\n         ],\n         \"y\": [\n          11.999930322350817,\n          11.999930322350817,\n          11.999930322350817,\n          11.999930322350817,\n          11.999930322350817,\n          11.999930322350817,\n          11.999930322350817\n         ],\n         \"z\": [\n          0.010130209300556614,\n          0.018855084300556615,\n          0.027579959300556615,\n          0.036304834300556615,\n          0.045029709300556615,\n          0.053754584300556615,\n          0.062479459300556615\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"grey\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          0.5624988906321942,\n          0.8123465981321941,\n          1.062194305632194,\n          1.3120420131321942,\n          1.5618897206321942,\n          1.8117374281321943,\n          2.0615851356321944\n         ],\n         \"y\": [\n          12.799928232343898,\n          12.799928232343898,\n          12.799928232343898,\n          12.799928232343898,\n          12.799928232343898,\n          12.799928232343898,\n          12.799928232343898\n         ],\n         \"z\": [\n          0.011125091963804382,\n          0.01984996696380438,\n          0.02857484196380438,\n          0.03729971696380438,\n          0.04602459196380438,\n          0.05474946696380438,\n          0.06347434196380439\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"grey\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          0.5624988137134035,\n          0.8123465212134034,\n          1.0621942287134034,\n          1.3120419362134035,\n          1.5618896437134036,\n          1.8117373512134036,\n          2.0615850587134035\n         ],\n         \"y\": [\n          13.599926573724765,\n          13.599926573724765,\n          13.599926573724765,\n          13.599926573724765,\n          13.599926573724765,\n          13.599926573724765,\n          13.599926573724765\n         ],\n         \"z\": [\n          0.012125600028890982,\n          0.02085047502889098,\n          0.02957535002889098,\n          0.03830022502889098,\n          0.04702510002889098,\n          0.05574997502889098,\n          0.06447485002889097\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"grey\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          0.5624987374208242,\n          0.8123464449208242,\n          1.0621941524208243,\n          1.3120418599208243,\n          1.5618895674208244,\n          1.8117372749208245,\n          2.0615849824208246\n         ],\n         \"y\": [\n          14.39992516668033,\n          14.39992516668033,\n          14.39992516668033,\n          14.39992516668033,\n          14.39992516668033,\n          14.39992516668033,\n          14.39992516668033\n         ],\n         \"z\": [\n          0.01312931040369657,\n          0.021854185403696567,\n          0.030579060403696567,\n          0.03930393540369657,\n          0.04802881040369657,\n          0.05675368540369657,\n          0.06547856040369657\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"grey\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          0.5624986620456885,\n          0.8123463695456885,\n          1.0621940770456886,\n          1.3120417845456886,\n          1.5618894920456887,\n          1.8117371995456888,\n          2.0615849070456886\n         ],\n         \"y\": [\n          15.199924158393646,\n          15.199924158393646,\n          15.199924158393646,\n          15.199924158393646,\n          15.199924158393646,\n          15.199924158393646,\n          15.199924158393646\n         ],\n         \"z\": [\n          0.014134618721092188,\n          0.022859493721092188,\n          0.03158436872109219,\n          0.04030924372109219,\n          0.04903411872109219,\n          0.05775899372109219,\n          0.06648386872109219\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"grey\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          0.5624985871092366,\n          0.8123462946092366,\n          1.0621940021092366,\n          1.3120417096092367,\n          1.5618894171092368,\n          1.8117371246092369,\n          2.061584832109237\n         ],\n         \"y\": [\n          15.999923362319814,\n          15.999923362319814,\n          15.999923362319814,\n          15.999923362319814,\n          15.999923362319814,\n          15.999923362319814,\n          15.999923362319814\n         ],\n         \"z\": [\n          0.01514055272471522,\n          0.02386542772471522,\n          0.03259030272471522,\n          0.04131517772471522,\n          0.05004005272471522,\n          0.05876492772471522,\n          0.06748980272471522\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"blue\",\n          \"width\": 4\n         },\n         \"marker\": {\n          \"color\": \"blue\",\n          \"size\": 2\n         },\n         \"name\": \"Beam nodes\",\n         \"type\": \"scatter3d\",\n         \"x\": [\n          0,\n          -2.374942138688192e-08,\n          -6.284862035108256e-08\n         ],\n         \"y\": [\n          0,\n          0.799999995444727,\n          1.59999996555245\n         ],\n         \"z\": [\n          0,\n          7.529358720955091e-05,\n          0.00029029011673404904\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"blue\",\n          \"width\": 4\n         },\n         \"marker\": {\n          \"color\": \"blue\",\n          \"size\": 2\n         },\n         \"showlegend\": false,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          -6.284862035108256e-08,\n          -1.1378098335723172e-07,\n          -1.7418561622652579e-07\n         ],\n         \"y\": [\n          1.59999996555245,\n          2.399999892672534,\n          3.199999764751563\n         ],\n         \"z\": [\n          0.00029029011673404904,\n          0.0006303055085703814,\n          0.0010816222764656192\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"blue\",\n          \"width\": 4\n         },\n         \"marker\": {\n          \"color\": \"blue\",\n          \"size\": 2\n         },\n         \"showlegend\": false,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          -1.7418561622652579e-07,\n          -2.414234252892935e-07,\n          -3.1403089387878787e-07\n         ],\n         \"y\": [\n          3.199999764751563,\n          3.999999575756786,\n          4.79999932313942\n         ],\n         \"z\": [\n          0.0010816222764656192,\n          0.001631013837129204,\n          0.0022663366294538505\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"blue\",\n          \"width\": 4\n         },\n         \"marker\": {\n          \"color\": \"blue\",\n          \"size\": 2\n         },\n         \"showlegend\": false,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          -3.1403089387878787e-07,\n          -3.900781250590501e-07,\n          -4.6876762866440916e-07\n         ],\n         \"y\": [\n          4.79999932313942,\n          5.599999008239176,\n          6.399998634207163\n         ],\n         \"z\": [\n          0.0022663366294538505,\n          0.002975963538135048,\n          0.003749388763217276\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"blue\",\n          \"width\": 4\n         },\n         \"marker\": {\n          \"color\": \"blue\",\n          \"size\": 2\n         },\n         \"showlegend\": false,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          -4.6876762866440916e-07,\n          -5.487166981842684e-07,\n          -6.296148558767214e-07\n         ],\n         \"y\": [\n          6.399998634207163,\n          7.19999820644239,\n          7.99999773090598\n         ],\n         \"z\": [\n          0.003749388763217276,\n          0.0045766335601332515,\n          0.005448856032774456\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"blue\",\n          \"width\": 4\n         },\n         \"marker\": {\n          \"color\": \"blue\",\n          \"size\": 2\n         },\n         \"showlegend\": false,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          -6.296148558767214e-07,\n          -7.104811947455406e-07,\n          -7.913442687833645e-07\n         ],\n         \"y\": [\n          7.99999773090598,\n          8.799997214613729,\n          9.599996664266103\n         ],\n         \"z\": [\n          0.005448856032774456,\n          0.006357745534489979,\n          0.007296132846321719\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"blue\",\n          \"width\": 4\n         },\n         \"marker\": {\n          \"color\": \"blue\",\n          \"size\": 2\n         },\n         \"showlegend\": false,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          -7.913442687833645e-07,\n          -8.715027288124392e-07,\n          -9.512032581544789e-07\n         ],\n         \"y\": [\n          9.599996664266103,\n          10.399996086807967,\n          11.199995488303351\n         ],\n         \"z\": [\n          0.007296132846321719,\n          0.00825738016953222,\n          0.009235987245929039\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"blue\",\n          \"width\": 4\n         },\n         \"marker\": {\n          \"color\": \"blue\",\n          \"size\": 2\n         },\n         \"showlegend\": false,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          -9.512032581544789e-07,\n          -1.029929678635961e-06,\n          -1.1080515871694994e-06\n         ],\n         \"y\": [\n          11.199995488303351,\n          11.999994874562574,\n          12.799994250201319\n         ],\n         \"z\": [\n          0.009235987245929039,\n          0.010226981381871196,\n          0.011226512555626676\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"blue\",\n          \"width\": 4\n         },\n         \"marker\": {\n          \"color\": \"blue\",\n          \"size\": 2\n         },\n         \"showlegend\": false,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          -1.1080515871694994e-06,\n          -1.1851793486233463e-06,\n          -1.261735127261516e-06\n         ],\n         \"y\": [\n          12.799994250201319,\n          13.599993619324277,\n          14.399992984728675\n         ],\n         \"z\": [\n          0.011226512555626676,\n          0.012231248025347296,\n          0.01323894000987043\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"blue\",\n          \"width\": 4\n         },\n         \"marker\": {\n          \"color\": \"blue\",\n          \"size\": 2\n         },\n         \"showlegend\": false,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          -1.261735127261516e-06,\n          -1.3374633903919913e-06,\n          -1.412801781371022e-06\n         ],\n         \"y\": [\n          14.399992984728675,\n          15.199992348619805,\n          15.999991711987978\n         ],\n         \"z\": [\n          0.01323894000987043,\n          0.014247832746099356,\n          0.015257139294634629\n         ]\n        }\n       ],\n       \"layout\": {\n        \"autosize\": true,\n        \"scene\": {\n         \"aspectmode\": \"auto\",\n         \"aspectratio\": {\n          \"x\": 1,\n          \"y\": 1,\n          \"z\": 1\n         },\n         \"camera\": {\n          \"center\": {\n           \"x\": 0,\n           \"y\": 0,\n           \"z\": 0\n          },\n          \"eye\": {\n           \"x\": -1.2559758030610624,\n           \"y\": -1.4581970864212204,\n           \"z\": 0.9918094773079071\n          },\n          \"projection\": {\n           \"type\": \"perspective\"\n          },\n          \"up\": {\n           \"x\": 0,\n           \"y\": 0,\n           \"z\": 1\n          }\n         }\n        },\n        \"template\": {\n         \"data\": {\n          \"bar\": [\n           {\n            \"error_x\": {\n             \"color\": \"#2a3f5f\"\n            },\n            \"error_y\": {\n             \"color\": \"#2a3f5f\"\n            },\n            \"marker\": {\n             \"line\": {\n              \"color\": \"#E5ECF6\",\n              \"width\": 0.5\n             },\n             \"pattern\": {\n              \"fillmode\": \"overlay\",\n              \"size\": 10,\n              \"solidity\": 0.2\n             }\n            },\n            \"type\": \"bar\"\n           }\n          ],\n          \"barpolar\": [\n           {\n            \"marker\": {\n             \"line\": {\n              \"color\": \"#E5ECF6\",\n              \"width\": 0.5\n             },\n             \"pattern\": {\n              \"fillmode\": \"overlay\",\n              \"size\": 10,\n              \"solidity\": 0.2\n             }\n            },\n            \"type\": \"barpolar\"\n           }\n          ],\n          \"carpet\": [\n           {\n            \"aaxis\": {\n             \"endlinecolor\": \"#2a3f5f\",\n             \"gridcolor\": \"white\",\n             \"linecolor\": \"white\",\n             \"minorgridcolor\": \"white\",\n             \"startlinecolor\": \"#2a3f5f\"\n            },\n            \"baxis\": {\n             \"endlinecolor\": \"#2a3f5f\",\n             \"gridcolor\": \"white\",\n             \"linecolor\": \"white\",\n             \"minorgridcolor\": \"white\",\n             \"startlinecolor\": \"#2a3f5f\"\n            },\n            \"type\": \"carpet\"\n           }\n          ],\n          \"choropleth\": [\n           {\n            \"colorbar\": {\n             \"outlinewidth\": 0,\n             \"ticks\": \"\"\n            },\n            \"type\": \"choropleth\"\n           }\n          ],\n          \"contour\": [\n           {\n            \"colorbar\": {\n             \"outlinewidth\": 0,\n             \"ticks\": \"\"\n            },\n            \"colorscale\": [\n             [\n              0,\n              \"#0d0887\"\n             ],\n             [\n              0.1111111111111111,\n              \"#46039f\"\n             ],\n             [\n              0.2222222222222222,\n              \"#7201a8\"\n             ],\n             [\n              0.3333333333333333,\n              \"#9c179e\"\n             ],\n             [\n              0.4444444444444444,\n              \"#bd3786\"\n             ],\n             [\n              0.5555555555555556,\n              \"#d8576b\"\n             ],\n             [\n              0.6666666666666666,\n              \"#ed7953\"\n             ],\n             [\n              0.7777777777777778,\n              \"#fb9f3a\"\n             ],\n             [\n              0.8888888888888888,\n              \"#fdca26\"\n             ],\n             [\n              1,\n              \"#f0f921\"\n             ]\n            ],\n            \"type\": \"contour\"\n           }\n          ],\n          \"contourcarpet\": [\n           {\n            \"colorbar\": {\n             \"outlinewidth\": 0,\n             \"ticks\": \"\"\n            },\n            \"type\": \"contourcarpet\"\n           }\n          ],\n          \"heatmap\": [\n           {\n            \"colorbar\": {\n             \"outlinewidth\": 0,\n             \"ticks\": \"\"\n            },\n            \"colorscale\": [\n             [\n              0,\n              \"#0d0887\"\n             ],\n             [\n              0.1111111111111111,\n              \"#46039f\"\n             ],\n             [\n              0.2222222222222222,\n              \"#7201a8\"\n             ],\n             [\n              0.3333333333333333,\n              \"#9c179e\"\n             ],\n             [\n              0.4444444444444444,\n              \"#bd3786\"\n             ],\n             [\n              0.5555555555555556,\n              \"#d8576b\"\n             ],\n             [\n              0.6666666666666666,\n              \"#ed7953\"\n             ],\n             [\n              0.7777777777777778,\n              \"#fb9f3a\"\n             ],\n             [\n              0.8888888888888888,\n              \"#fdca26\"\n             ],\n             [\n              1,\n              \"#f0f921\"\n             ]\n            ],\n            \"type\": \"heatmap\"\n           }\n          ],\n          \"heatmapgl\": [\n           {\n            \"colorbar\": {\n             \"outlinewidth\": 0,\n             \"ticks\": \"\"\n            },\n            \"colorscale\": [\n             [\n              0,\n              \"#0d0887\"\n             ],\n             [\n              0.1111111111111111,\n              \"#46039f\"\n             ],\n             [\n              0.2222222222222222,\n              \"#7201a8\"\n             ],\n             [\n              0.3333333333333333,\n              \"#9c179e\"\n             ],\n             [\n              0.4444444444444444,\n              \"#bd3786\"\n             ],\n             [\n              0.5555555555555556,\n              \"#d8576b\"\n             ],\n             [\n              0.6666666666666666,\n              \"#ed7953\"\n             ],\n             [\n              0.7777777777777778,\n              \"#fb9f3a\"\n             ],\n             [\n              0.8888888888888888,\n              \"#fdca26\"\n             ],\n             [\n              1,\n              \"#f0f921\"\n             ]\n            ],\n            \"type\": \"heatmapgl\"\n           }\n          ],\n          \"histogram\": [\n           {\n            \"marker\": {\n             \"pattern\": {\n              \"fillmode\": \"overlay\",\n              \"size\": 10,\n              \"solidity\": 0.2\n             }\n            },\n            \"type\": \"histogram\"\n           }\n          ],\n          \"histogram2d\": [\n           {\n            \"colorbar\": {\n             \"outlinewidth\": 0,\n             \"ticks\": \"\"\n            },\n            \"colorscale\": [\n             [\n              0,\n              \"#0d0887\"\n             ],\n             [\n              0.1111111111111111,\n              \"#46039f\"\n             ],\n             [\n              0.2222222222222222,\n              \"#7201a8\"\n             ],\n             [\n              0.3333333333333333,\n              \"#9c179e\"\n             ],\n             [\n              0.4444444444444444,\n              \"#bd3786\"\n             ],\n             [\n              0.5555555555555556,\n              \"#d8576b\"\n             ],\n             [\n              0.6666666666666666,\n              \"#ed7953\"\n             ],\n             [\n              0.7777777777777778,\n              \"#fb9f3a\"\n             ],\n             [\n              0.8888888888888888,\n              \"#fdca26\"\n             ],\n             [\n              1,\n              \"#f0f921\"\n             ]\n            ],\n            \"type\": \"histogram2d\"\n           }\n          ],\n          \"histogram2dcontour\": [\n           {\n            \"colorbar\": {\n             \"outlinewidth\": 0,\n             \"ticks\": \"\"\n            },\n            \"colorscale\": [\n             [\n              0,\n              \"#0d0887\"\n             ],\n             [\n              0.1111111111111111,\n              \"#46039f\"\n             ],\n             [\n              0.2222222222222222,\n              \"#7201a8\"\n             ],\n             [\n              0.3333333333333333,\n              \"#9c179e\"\n             ],\n             [\n              0.4444444444444444,\n              \"#bd3786\"\n             ],\n             [\n              0.5555555555555556,\n              \"#d8576b\"\n             ],\n             [\n              0.6666666666666666,\n              \"#ed7953\"\n             ],\n             [\n              0.7777777777777778,\n              \"#fb9f3a\"\n             ],\n             [\n              0.8888888888888888,\n              \"#fdca26\"\n             ],\n             [\n              1,\n              \"#f0f921\"\n             ]\n            ],\n            \"type\": \"histogram2dcontour\"\n           }\n          ],\n          \"mesh3d\": [\n           {\n            \"colorbar\": {\n             \"outlinewidth\": 0,\n             \"ticks\": \"\"\n            },\n            \"type\": \"mesh3d\"\n           }\n          ],\n          \"parcoords\": [\n           {\n            \"line\": {\n             \"colorbar\": {\n              \"outlinewidth\": 0,\n              \"ticks\": \"\"\n             }\n            },\n            \"type\": \"parcoords\"\n           }\n          ],\n          \"pie\": [\n           {\n            \"automargin\": true,\n            \"type\": \"pie\"\n           }\n          ],\n          \"scatter\": [\n           {\n            \"fillpattern\": {\n             \"fillmode\": \"overlay\",\n             \"size\": 10,\n             \"solidity\": 0.2\n            },\n            \"type\": \"scatter\"\n           }\n          ],\n          \"scatter3d\": [\n           {\n            \"line\": {\n             \"colorbar\": {\n              \"outlinewidth\": 0,\n              \"ticks\": \"\"\n             }\n            },\n            \"marker\": {\n             \"colorbar\": {\n              \"outlinewidth\": 0,\n              \"ticks\": \"\"\n             }\n            },\n            \"type\": \"scatter3d\"\n           }\n          ],\n          \"scattercarpet\": [\n           {\n            \"marker\": {\n             \"colorbar\": {\n              \"outlinewidth\": 0,\n              \"ticks\": \"\"\n             }\n            },\n            \"type\": \"scattercarpet\"\n           }\n          ],\n          \"scattergeo\": [\n           {\n            \"marker\": {\n             \"colorbar\": {\n              \"outlinewidth\": 0,\n              \"ticks\": \"\"\n             }\n            },\n            \"type\": \"scattergeo\"\n           }\n          ],\n          \"scattergl\": [\n           {\n            \"marker\": {\n             \"colorbar\": {\n              \"outlinewidth\": 0,\n              \"ticks\": \"\"\n             }\n            },\n            \"type\": \"scattergl\"\n           }\n          ],\n          \"scattermapbox\": [\n           {\n            \"marker\": {\n             \"colorbar\": {\n              \"outlinewidth\": 0,\n              \"ticks\": \"\"\n             }\n            },\n            \"type\": \"scattermapbox\"\n           }\n          ],\n          \"scatterpolar\": [\n           {\n            \"marker\": {\n             \"colorbar\": {\n              \"outlinewidth\": 0,\n              \"ticks\": \"\"\n             }\n            },\n            \"type\": \"scatterpolar\"\n           }\n          ],\n          \"scatterpolargl\": [\n           {\n            \"marker\": {\n             \"colorbar\": {\n              \"outlinewidth\": 0,\n              \"ticks\": \"\"\n             }\n            },\n            \"type\": \"scatterpolargl\"\n           }\n          ],\n          \"scatterternary\": [\n           {\n            \"marker\": {\n             \"colorbar\": {\n              \"outlinewidth\": 0,\n              \"ticks\": \"\"\n             }\n            },\n            \"type\": \"scatterternary\"\n           }\n          ],\n          \"surface\": [\n           {\n            \"colorbar\": {\n             \"outlinewidth\": 0,\n             \"ticks\": \"\"\n            },\n            \"colorscale\": [\n             [\n              0,\n              \"#0d0887\"\n             ],\n             [\n              0.1111111111111111,\n              \"#46039f\"\n             ],\n             [\n              0.2222222222222222,\n              \"#7201a8\"\n             ],\n             [\n              0.3333333333333333,\n              \"#9c179e\"\n             ],\n             [\n              0.4444444444444444,\n              \"#bd3786\"\n             ],\n             [\n              0.5555555555555556,\n              \"#d8576b\"\n             ],\n             [\n              0.6666666666666666,\n              \"#ed7953\"\n             ],\n             [\n              0.7777777777777778,\n              \"#fb9f3a\"\n             ],\n             [\n              0.8888888888888888,\n              \"#fdca26\"\n             ],\n             [\n              1,\n              \"#f0f921\"\n             ]\n            ],\n            \"type\": \"surface\"\n           }\n          ],\n          \"table\": [\n           {\n            \"cells\": {\n             \"fill\": {\n              \"color\": \"#EBF0F8\"\n             },\n             \"line\": {\n              \"color\": \"white\"\n             }\n            },\n            \"header\": {\n             \"fill\": {\n              \"color\": \"#C8D4E3\"\n             },\n             \"line\": {\n              \"color\": \"white\"\n             }\n            },\n            \"type\": \"table\"\n           }\n          ]\n         },\n         \"layout\": {\n          \"annotationdefaults\": {\n           \"arrowcolor\": \"#2a3f5f\",\n           \"arrowhead\": 0,\n           \"arrowwidth\": 1\n          },\n          \"autotypenumbers\": \"strict\",\n          \"coloraxis\": {\n           \"colorbar\": {\n            \"outlinewidth\": 0,\n            \"ticks\": \"\"\n           }\n          },\n          \"colorscale\": {\n           \"diverging\": [\n            [\n             0,\n             \"#8e0152\"\n            ],\n            [\n             0.1,\n             \"#c51b7d\"\n            ],\n            [\n             0.2,\n             \"#de77ae\"\n            ],\n            [\n             0.3,\n             \"#f1b6da\"\n            ],\n            [\n             0.4,\n             \"#fde0ef\"\n            ],\n            [\n             0.5,\n             \"#f7f7f7\"\n            ],\n            [\n             0.6,\n             \"#e6f5d0\"\n            ],\n            [\n             0.7,\n             \"#b8e186\"\n            ],\n            [\n             0.8,\n             \"#7fbc41\"\n            ],\n            [\n             0.9,\n             \"#4d9221\"\n            ],\n            [\n             1,\n             \"#276419\"\n            ]\n           ],\n           \"sequential\": [\n            [\n             0,\n             \"#0d0887\"\n            ],\n            [\n             0.1111111111111111,\n             \"#46039f\"\n            ],\n            [\n             0.2222222222222222,\n             \"#7201a8\"\n            ],\n            [\n             0.3333333333333333,\n             \"#9c179e\"\n            ],\n            [\n             0.4444444444444444,\n             \"#bd3786\"\n            ],\n            [\n             0.5555555555555556,\n             \"#d8576b\"\n            ],\n            [\n             0.6666666666666666,\n             \"#ed7953\"\n            ],\n            [\n             0.7777777777777778,\n             \"#fb9f3a\"\n            ],\n            [\n             0.8888888888888888,\n             \"#fdca26\"\n            ],\n            [\n             1,\n             \"#f0f921\"\n            ]\n           ],\n           \"sequentialminus\": [\n            [\n             0,\n             \"#0d0887\"\n            ],\n            [\n             0.1111111111111111,\n             \"#46039f\"\n            ],\n            [\n             0.2222222222222222,\n             \"#7201a8\"\n            ],\n            [\n             0.3333333333333333,\n             \"#9c179e\"\n            ],\n            [\n             0.4444444444444444,\n             \"#bd3786\"\n            ],\n            [\n             0.5555555555555556,\n             \"#d8576b\"\n            ],\n            [\n             0.6666666666666666,\n             \"#ed7953\"\n            ],\n            [\n             0.7777777777777778,\n             \"#fb9f3a\"\n            ],\n            [\n             0.8888888888888888,\n             \"#fdca26\"\n            ],\n            [\n             1,\n             \"#f0f921\"\n            ]\n           ]\n          },\n          \"colorway\": [\n           \"#636efa\",\n           \"#EF553B\",\n           \"#00cc96\",\n           \"#ab63fa\",\n           \"#FFA15A\",\n           \"#19d3f3\",\n           \"#FF6692\",\n           \"#B6E880\",\n           \"#FF97FF\",\n           \"#FECB52\"\n          ],\n          \"font\": {\n           \"color\": \"#2a3f5f\"\n          },\n          \"geo\": {\n           \"bgcolor\": \"white\",\n           \"lakecolor\": \"white\",\n           \"landcolor\": \"#E5ECF6\",\n           \"showlakes\": true,\n           \"showland\": true,\n           \"subunitcolor\": \"white\"\n          },\n          \"hoverlabel\": {\n           \"align\": \"left\"\n          },\n          \"hovermode\": \"closest\",\n          \"mapbox\": {\n           \"style\": \"light\"\n          },\n          \"paper_bgcolor\": \"white\",\n          \"plot_bgcolor\": \"#E5ECF6\",\n          \"polar\": {\n           \"angularaxis\": {\n            \"gridcolor\": \"white\",\n            \"linecolor\": \"white\",\n            \"ticks\": \"\"\n           },\n           \"bgcolor\": \"#E5ECF6\",\n           \"radialaxis\": {\n            \"gridcolor\": \"white\",\n            \"linecolor\": \"white\",\n            \"ticks\": \"\"\n           }\n          },\n          \"scene\": {\n           \"xaxis\": {\n            \"backgroundcolor\": \"#E5ECF6\",\n            \"gridcolor\": \"white\",\n            \"gridwidth\": 2,\n            \"linecolor\": \"white\",\n            \"showbackground\": true,\n            \"ticks\": \"\",\n            \"zerolinecolor\": \"white\"\n           },\n           \"yaxis\": {\n            \"backgroundcolor\": \"#E5ECF6\",\n            \"gridcolor\": \"white\",\n            \"gridwidth\": 2,\n            \"linecolor\": \"white\",\n            \"showbackground\": true,\n            \"ticks\": \"\",\n            \"zerolinecolor\": \"white\"\n           },\n           \"zaxis\": {\n            \"backgroundcolor\": \"#E5ECF6\",\n            \"gridcolor\": \"white\",\n            \"gridwidth\": 2,\n            \"linecolor\": \"white\",\n            \"showbackground\": true,\n            \"ticks\": \"\",\n            \"zerolinecolor\": \"white\"\n           }\n          },\n          \"shapedefaults\": {\n           \"line\": {\n            \"color\": \"#2a3f5f\"\n           }\n          },\n          \"ternary\": {\n           \"aaxis\": {\n            \"gridcolor\": \"white\",\n            \"linecolor\": \"white\",\n            \"ticks\": \"\"\n           },\n           \"baxis\": {\n            \"gridcolor\": \"white\",\n            \"linecolor\": \"white\",\n            \"ticks\": \"\"\n           },\n           \"bgcolor\": \"#E5ECF6\",\n           \"caxis\": {\n            \"gridcolor\": \"white\",\n            \"linecolor\": \"white\",\n            \"ticks\": \"\"\n           }\n          },\n          \"title\": {\n           \"x\": 0.05\n          },\n          \"xaxis\": {\n           \"automargin\": true,\n           \"gridcolor\": \"white\",\n           \"linecolor\": \"white\",\n           \"ticks\": \"\",\n           \"title\": {\n            \"standoff\": 15\n           },\n           \"zerolinecolor\": \"white\",\n           \"zerolinewidth\": 2\n          },\n          \"yaxis\": {\n           \"automargin\": true,\n           \"gridcolor\": \"white\",\n           \"linecolor\": \"white\",\n           \"ticks\": \"\",\n           \"title\": {\n            \"standoff\": 15\n           },\n           \"zerolinecolor\": \"white\",\n           \"zerolinewidth\": 2\n          }\n         }\n        }\n       }\n      },\n      \"image/png\": \"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9sKlbnXPru7s+UtX9a7Zf/NKl+1Oy1hpsnzip692GU1uESBAgAABAgS2k4CAZjs9LfdKgAABAtedQMKZhx55qvtkGa39aGkMPGmlOiRVIbX3TN0WtUyQ9UKabGe688Bqd+HiWvf3b527clvLDGdqZVF/MtYyfVyLAAECBAgQINAiIKBp0XMsAQIECBCYg8BQc9of/NXL3f0fG+4xk9dnElSCiGWvoZCmv81p9+4but27dnW/OHWu23fT8ipn0lj5yJeOdS9+9Wh36EN3LZvF9QgQIECAAAECzQICmmZCJyBAgAABAgQIECBAgAABAgQItAkIaNr8HE2AAAECBAgQIECAAAECBAgQaBYQ0DQTOgEBAgQIECBAgAABAgQIECBAoE1AQNPm52gCBAgQIECAAAECBAgQIECAQLOAgKaZ0AkIECBAgAABAgQIECBAgAABAm0CApo2P0cTIECAAAECBAgQIECAAAECBJoFBDTNhE5AgAABAgQIECBAgAABAgQIEGgTENC0+TmaAAECBAgQIECAAAECBAgQINAsIKBpJnQCAgQIECBAgAABAgQIECBAgECbgICmzc/RBAgQIECAAAECBAgQIECAAIFmAQFNM6ETECBAgAABAgQIECBAgAABAgTaBAQ0bX6OJkCAAAECBAgQIECAAAECBAg0CwhomgmdgAABAgQIECBAgAABAgQIECDQJiCgafNzNAECBAgQIECAAAECBAgQIECgWUBA00zoBAQIECBAgAABAgQIECBAgACBNgEBTZufowkQIECAAAECBAgQIECAAAECzQICmmZCJyBAgAABAgQIECBAgAABAgQItAkIaNr8HE2AAAECBAgQIECAAAECBAgQaBYQ0DQTOgEBAgQIECBAgAABAgQIECBAoE1AQNPm52gCBAgQIECAAAECBAgQIECAQLOAgKaZ0AkIECBAgAABAgQIECBAgAABAm0CApo2P0cTIECAAAECBAgQIECAAAECBJoFBDTNhE5AgAABAgQIECBAgAABAgQIEGgTENC0+TmaAAECBAgQIECAAAECBAgQINAsIKBpJnQCAgQIECBAgAABAgQIECBAgECbgICmzc/RBAgQIECAAAECBAgQIECAAIFmAQFNM6ETECBAgAABAgQIECBAgAABAgTaBAQ0bX6OJkCAAAECBAgQIECAAAECBAg0CwhomgmdgAABAgQIECBAgAABAgQIECDQJiCgafNzNAECBAgQIECAAAECBAgQIECgWUBA00zoBAQIECBAgAABAgQIECBAgACBNgEBTZufowkQIECAAAECBAgQIECAAAECzQICmmZCJyBAgAABAgQIECBAgAABAgQItAkIaNr8HE2AAAECBAgQIECAAAECBAgQaBYQ0DQTOgEBAgQIECBAgAABAgQIECBAoE1AQNPm52gCBAgQIECAAAECBAgQIECAQLOAgKaZ0AkIECBAgAABAgQIECBAgAABAm0CApo2P0cTIECAAAECBAgQIECAAAECBJoFBDTNhE5AgAABAgQIECBAgAABAgQIEGgTENC0+TmaAAECBAgQIECAAAECBAgQINAsIKBpJnQCAgQIECBAgAABAgQIECBAgECbgICmzc/RBAgQIECAAAECBAgQIECAAIFmAQFNM6ETECBAgAABAgQIECBAgAABAgTaBAQ0bX6OJkCAAAECBAgQIECAAAECBAg0CwhomgmdgAABAgQIECBAgAABAgQIECDQJiCgafNzNAECBAgQIECAAAECBAgQIECgWUBA00zoBAQIECBAgAABAgQIECBAgACBNgEBTZufowkQIECAAAECBAgQIECAAAECzQICmmZCJyBAgAABAgQIECBAgAABAgQItAkIaNr8HE2AAAECBAgQIECAAAECBAgQaBYQ0DQTOgEBAgQIECBAgAABAgQIECBAoE1AQNPm52gCBAgQIECAAAECBAgQIECAQLOAgKaZ0AkIECBAgAABAgQIECBAgAABAm0CApo2P0cTIECAAAECBAgQIECAAAECBJoFBDTNhE5AgAABAgQIECBAgAABAgQIEGgTENC0+TmaAAECBAgQIECAAAECBAgQINAsIKBpJnQCAgQIECBAgAABAgQIECBAgECbgICmzc/RBAgQIECAAAECBAgQIECAAIFmAQFNM6ETECBAgAABAgQIECBAgAABAgTaBAQ0bX6OJkCAAAECBAgQIECAAAECBAg0CwhomgmdgAABAgQIECBAgAABAgQIECDQJiCgafNzNAECBAgQIECAAAECBAgQIECgWUBA00zoBAQIECBAgAABAgQIECBAgACBNgEBTZufowkQIECAAAECBAgQIECAAAECzQICmmZCJyBAgAABAgQIECBAgAABAgQItAkIaNr8HE2AAAECBAgQIECAAAECBAgQaBYQ0DQTOgEBAgQIECBAgAABAgQIECBAoE1AQNPm52gCBAgQIECAAAECBAgQIECAQLOAgKaZ0AkIECBAgAABAgQIECBAgAABAm0CApo2P0cTIECAAAECBAgQIECAAAECBJoFBDTNhE5AgAABAgQIECBAgAABAgQIEGgTENC0+TmaAAECBAgQIECAAAECBAgQINAsIKBpJnQCAgQIECBAgAABAgQIECBAgECbgICmzc/RBAgQIECAAAECBAgQIECAAIFmAQFNM6ETECBAgAABAgQIECBAgAABAgTaBAQ0bX6OJkCAAAECBAgQIECAAAECBAg0CwhomgmdgAABAgQIECBAgAABAgQIECDQJiCgafNzNAECBAgQIECAAAECBAgQIECgWUBA00zoBAQIECBAgAABAgQIECBAgACBNgEBTZufowkQIECAAAECBAgQIECAAAECzQL/H8m9dNSRcRxkAAAAAElFTkSuQmCC\",\n      \"text/html\": [\n       \"<div>                            <div id=\\\"9a9241e3-cfb4-42b6-916e-e7878ffec015\\\" class=\\\"plotly-graph-div\\\" style=\\\"height:525px; width:100%;\\\"></div>            <script type=\\\"text/javascript\\\">                require([\\\"plotly\\\"], function(Plotly) {                    window.PLOTLYENV=window.PLOTLYENV || {};                                    if (document.getElementById(\\\"9a9241e3-cfb4-42b6-916e-e7878ffec015\\\")) {                    Plotly.newPlot(                        \\\"9a9241e3-cfb4-42b6-916e-e7878ffec015\\\",                        [{\\\"line\\\":{\\\"color\\\":\\\"grey\\\"},\\\"mode\\\":\\\"lines\\\",\\\"name\\\":\\\"Aero surface\\\",\\\"surfaceaxis\\\":2,\\\"x\\\":[-0.4375000000000001,-0.18750000000000006,-0.1875000237228303,-0.4375000236873756,-0.4375000000000001],\\\"y\\\":[-7.126160546901204e-18,-3.054068805814802e-18,0.8000022258875188,0.8000051998112413,-7.126160546901204e-18],\\\"z\\\":[-3.7885577460302824e-17,-1.6236676054415498e-17,7.752893514114484e-05,8.050939904993674e-05,-3.7885577460302824e-17],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"grey\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[-0.4375000236873756,-0.1875000237228303,-0.1875000627455803,-0.43750006260819346,-0.4375000236873756],\\\"y\\\":[0.8000051998112413,0.8000022258875188,1.600004355772871,1.6000102094000985,0.8000051998112413],\\\"z\\\":[8.050939904993674e-05,7.752893514114484e-05,0.0002946907979488142,0.00030055837290183433,8.050939904993674e-05],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"grey\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[-0.43750006260819346,-0.1875000627455803,-0.18750011356082813,-0.43750011326728777,-0.43750006260819346],\\\"y\\\":[1.6000102094000985,1.600004355772871,2.4000063093414794,2.400014864900074,1.6000102094000985],\\\"z\\\":[0.00030055837290183433,0.0002946907979488142,0.0006367385904886074,0.000645316033046242,0.00030055837290183433],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"grey\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[-0.43750011326728777,-0.18750011356082813,-0.18750017381202885,-0.4375001733139123,-0.43750011326728777],\\\"y\\\":[2.400014864900074,2.4000063093414794,3.200008122887067,3.2000192670677388,2.400014864900074],\\\"z\\\":[0.000645316033046242,0.0006367385904886074,0.001090003018371559,0.001101177340912812,0.000645316033046242],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"grey\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[-0.4375001733139123,-0.18750017381202885,-0.18750024087202166,-0.4375002401368169,-0.4375001733139123],\\\"y\\\":[3.2000192670677388,3.200008122887067,4.000009729344271,4.000023267460916,3.2000192670677388],\\\"z\\\":[0.001101177340912812,0.001090003018371559,0.0016411962247617027,0.0016547727416050344,0.001101177340912812],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"grey\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[-0.4375002401368169,-0.18750024087202166,-0.1875003132785193,-0.4375003122753531,-0.4375002401368169],\\\"y\\\":[4.000023267460916,4.000009729344271,4.800011182963365,4.800026996061957,4.000023267460916],\\\"z\\\":[0.0016547727416050344,0.0016411962247617027,0.002278231379164863,0.0022940910454462126,0.0016547727416050344],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"grey\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[-0.4375003122753531,-0.1875003132785193,-0.1875003891153329,-0.43750038783161005,-0.4375003122753531],\\\"y\\\":[4.800026996061957,4.800011182963365,5.6000124237463025,5.600030311089138,4.800026996061957],\\\"z\\\":[0.0022940910454462126,0.002278231379164863,0.002989419809327907,0.003007361504251719,0.0022940910454462126],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"grey\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[-0.43750038783161005,-0.1875003891153329,-0.18750046758303424,-0.43750046600357495,-0.43750038783161005],\\\"y\\\":[5.600030311089138,5.6000124237463025,6.400013514431788,6.4000333547312875,5.600030311089138],\\\"z\\\":[0.003007361504251719,0.002989419809327907,0.0037643153101892014,0.0037842173728184353,0.003007361504251719],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"grey\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[-0.43750046600357495,-0.18750046758303424,-0.18750054731387217,-0.43750054544343747,-0.43750046600357495],\\\"y\\\":[6.4000333547312875,6.400013514431788,7.20001439891522,7.200035988878993,6.4000333547312875],\\\"z\\\":[0.0037842173728184353,0.0037643153101892014,0.004592877438281733,0.00461453594247971,0.0037842173728184353],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"grey\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[-0.43750054544343747,-0.18750054731387217,-0.187500627992497,-0.4375006258293518,-0.43750054544343747],\\\"y\\\":[7.200035988878993,7.20001439891522,8.000015143951318,8.000038361345101,7.200035988878993],\\\"z\\\":[0.00461453594247971,0.004592877438281733,0.005466325160662682,0.005489617331180315,0.00461453594247971],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"grey\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[-0.4375006258293518,-0.187500627992497,-0.18750070865375484,-0.4375007062171683,-0.4375006258293518],\\\"y\\\":[8.000038361345101,8.000015143951318,8.800015695169904,8.80004033591147,8.000038361345101],\\\"z\\\":[0.005489617331180315,0.005466325160662682,0.006376286273275938,0.0064010072583238825,0.005489617331180315],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"grey\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[-0.4375007062171683,-0.18750070865375484,-0.1875007893187073,-0.43750078661795866,-0.4375007062171683],\\\"y\\\":[8.80004033591147,8.800015695169904,9.600016120600648,9.600042062380043,8.80004033591147],\\\"z\\\":[0.0064010072583238825,0.006376286273275938,0.007315653004851139,0.007341679882890364,0.0064010072583238825],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"grey\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[-0.43750078661795866,-0.1875007893187073,-0.18750086930210966,-0.4375008663679509,-0.43750078661795866],\\\"y\\\":[9.600042062380043,9.600016120600648,10.40001636630499,10.400043405634353,9.600042062380043],\\\"z\\\":[0.007341679882890364,0.007315653004851139,0.008277726524304333,0.008304854997333818,0.007341679882890364],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"grey\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[-0.4375008663679509,-0.18750086930210966,-0.1875009488408821,-0.4375009456910473,-0.4375008663679509],\\\"y\\\":[10.400043405634353,10.40001636630499,11.200016499826141,11.200044515189864,10.400043405634353],\\\"z\\\":[0.008304854997333818,0.008277726524304333,0.009257068207257402,0.009285176155695221,0.008304854997333818],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"grey\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[-0.4375009456910473,-0.1875009488408821,-0.18750102743479913,-0.4375010241082931,-0.4375009456910473],\\\"y\\\":[11.200044515189864,11.200016499826141,12.000016467265384,12.000045257535799,11.200044515189864],\\\"z\\\":[0.009285176155695221,0.009257068207257402,0.01024864552259437,0.0102775310435586,0.009285176155695221],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"grey\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[-0.4375010241082931,-0.18750102743479913,-0.18750110544179802,-0.43750110196207914,-0.4375010241082931],\\\"y\\\":[12.000045257535799,12.000016467265384,12.800016334581887,12.800045780422645,12.000045257535799],\\\"z\\\":[0.0102775310435586,0.01024864552259437,0.01124866997069216,0.011278213190779474,0.0102775310435586],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"grey\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[-0.43750110196207914,-0.18750110544179802,-0.18750118248733483,-0.43750117889798307,-0.43750110196207914],\\\"y\\\":[12.800045780422645,12.800016334581887,13.600016048933623,13.600045955079421,12.800045780422645],\\\"z\\\":[0.011278213190779474,0.01124866997069216,0.012253751753734908,0.012283756724918393,0.011278213190779474],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"grey\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[-0.43750117889798307,-0.18750118248733483,-0.18750125898039016,-0.43750125530740736,-0.43750117889798307],\\\"y\\\":[13.600045955079421,13.600016048933623,14.400015674183493,14.400045926789915,13.600045955079421],\\\"z\\\":[0.012283756724918393,0.012253751753734908,0.013261704347121926,0.013292056796790585,0.012283756724918393],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"grey\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[-0.43750125530740736,-0.18750125898039016,-0.18750133467799002,-0.43750133096412286,-0.43750125530740736],\\\"y\\\":[14.400045926789915,14.400015674183493,15.200015164032955,15.200045584583822,14.400045926789915],\\\"z\\\":[0.013292056796790585,0.013261704347121926,0.0142707234002452,0.014301244272439662,0.013292056796790585],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"grey\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[-0.43750133096412286,-0.18750133467799002,-0.1875014100029893,-0.4375014062712665,-0.43750133096412286],\\\"y\\\":[15.200045584583822,15.200015164032955,16.000014582198226,16.000045075811887,15.200045584583822],\\\"z\\\":[0.014301244272439662,0.0142707234002452,0.01528008489372113,0.015310679025836462,0.014301244272439662],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"grey\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[-0.18750000000000006,0.06250000000000001,0.062499976241714925,-0.1875000237228303,-0.18750000000000006],\\\"y\\\":[-3.054068805814802e-18,1.0180229352716006e-18,0.7999992519637964,0.8000022258875188,-3.054068805814802e-18],\\\"z\\\":[-1.6236676054415498e-17,5.412225351471832e-18,7.454847123235294e-05,7.752893514114484e-05,-1.6236676054415498e-17],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"grey\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[-0.1875000237228303,0.062499976241714925,0.06249993711703296,-0.1875000627455803,-0.1875000237228303],\\\"y\\\":[0.8000022258875188,0.7999992519637964,1.599998502145643,1.600004355772871,0.8000022258875188],\\\"z\\\":[7.752893514114484e-05,7.454847123235294e-05,0.000288823222995794,0.0002946907979488142,7.752893514114484e-05],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"grey\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[-0.1875000627455803,0.06249993711703296,0.06249988614563157,-0.18750011356082813,-0.1875000627455803],\\\"y\\\":[1.600004355772871,1.599998502145643,2.3999977537828854,2.4000063093414794,1.600004355772871],\\\"z\\\":[0.0002946907979488142,0.000288823222995794,0.0006281611479309727,0.0006367385904886074,0.0002946907979488142],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"grey\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[-0.18750011356082813,0.06249988614563157,0.06249982568985464,-0.18750017381202885,-0.18750011356082813],\\\"y\\\":[2.4000063093414794,2.3999977537828854,3.199996978706395,3.200008122887067,2.4000063093414794],\\\"z\\\":[0.0006367385904886074,0.0006281611479309727,0.0010788286958303061,0.001090003018371559,0.0006367385904886074],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"grey\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[-0.18750017381202885,0.06249982568985464,0.06249975839277351,-0.18750024087202166,-0.18750017381202885],\\\"y\\\":[3.200008122887067,3.199996978706395,3.9999961912276247,4.000009729344271,3.200008122887067],\\\"z\\\":[0.001090003018371559,0.0010788286958303061,0.0016276197079183711,0.0016411962247617027,0.001090003018371559],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"grey\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[-0.18750024087202166,0.06249975839277351,0.06249968571831458,-0.1875003132785193,-0.18750024087202166],\\\"y\\\":[4.000009729344271,3.9999961912276247,4.799995369864772,4.800011182963365,4.000009729344271],\\\"z\\\":[0.0016411962247617027,0.0016276197079183711,0.002262371712883513,0.002278231379164863,0.0016411962247617027],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"grey\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[-0.1875003132785193,0.06249968571831458,0.06249960960094422,-0.1875003891153329,-0.1875003132785193],\\\"y\\\":[4.800011182963365,4.799995369864772,5.599994536403467,5.6000124237463025,4.800011182963365],\\\"z\\\":[0.002278231379164863,0.002262371712883513,0.002971478114404095,0.002989419809327907,0.002278231379164863],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"grey\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[-0.1875003891153329,0.06249960960094422,0.06249953083750652,-0.18750046758303424,-0.1875003891153329],\\\"y\\\":[5.6000124237463025,5.599994536403467,6.399993674132288,6.400013514431788,5.6000124237463025],\\\"z\\\":[0.002989419809327907,0.002971478114404095,0.0037444132475599676,0.0037643153101892014,0.002989419809327907],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"grey\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[-0.18750046758303424,0.06249953083750652,0.06249945081569314,-0.18750054731387217,-0.18750046758303424],\\\"y\\\":[6.400013514431788,6.399993674132288,7.199992808951447,7.20001439891522,6.400013514431788],\\\"z\\\":[0.0037643153101892014,0.0037444132475599676,0.0045712189340837575,0.004592877438281733,0.0037643153101892014],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"grey\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[-0.18750054731387217,0.06249945081569314,0.062499369844357826,-0.187500627992497,-0.18750054731387217],\\\"y\\\":[7.20001439891522,7.199992808951447,7.999991926557534,8.000015143951318,7.20001439891522],\\\"z\\\":[0.004592877438281733,0.0045712189340837575,0.005443032990145048,0.005466325160662682,0.004592877438281733],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"grey\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[-0.187500627992497,0.062499369844357826,0.06249928890965862,-0.18750070865375484,-0.187500627992497],\\\"y\\\":[8.000015143951318,7.999991926557534,8.799991054428338,8.800015695169904,8.000015143951318],\\\"z\\\":[0.005466325160662682,0.005443032990145048,0.006351565288227993,0.006376286273275938,0.005466325160662682],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"grey\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[-0.18750070865375484,0.06249928890965862,0.062499207980544064,-0.1875007893187073,-0.18750070865375484],\\\"y\\\":[8.800015695169904,8.799991054428338,9.599990178821255,9.600016120600648,8.800015695169904],\\\"z\\\":[0.006376286273275938,0.006351565288227993,0.007289626126811912,0.007315653004851139,0.006376286273275938],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"grey\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[-0.1875007893187073,0.062499207980544064,0.06249912776373148,-0.18750086930210966,-0.1875007893187073],\\\"y\\\":[9.600016120600648,9.599990178821255,10.399989326975627,10.40001636630499,9.600016120600648],\\\"z\\\":[0.007315653004851139,0.007289626126811912,0.008250598051274849,0.008277726524304333,0.007315653004851139],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"grey\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[-0.18750086930210966,0.06249912776373148,0.06249904800928315,-0.1875009488408821,-0.18750086930210966],\\\"y\\\":[10.40001636630499,10.399989326975627,11.19998848446242,11.200016499826141,10.40001636630499],\\\"z\\\":[0.008277726524304333,0.008250598051274849,0.009228960258819583,0.009257068207257402,0.008277726524304333],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"grey\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[-0.1875009488408821,0.06249904800928315,0.06249896923869486,-0.18750102743479913,-0.1875009488408821],\\\"y\\\":[11.200016499826141,11.19998848446242,11.999987676994971,12.000016467265384,11.200016499826141],\\\"z\\\":[0.009257068207257402,0.009228960258819583,0.010219760001630138,0.01024864552259437,0.009257068207257402],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"grey\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[-0.18750102743479913,0.06249896923869486,0.06249889107848312,-0.18750110544179802,-0.18750102743479913],\\\"y\\\":[12.000016467265384,11.999987676994971,12.79998688874113,12.800016334581887,12.000016467265384],\\\"z\\\":[0.01024864552259437,0.010219760001630138,0.011219126750604847,0.01124866997069216,0.01024864552259437],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"grey\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[-0.18750110544179802,0.06249889107848312,0.06249881392331345,-0.18750118248733483,-0.18750110544179802],\\\"y\\\":[12.800016334581887,12.79998688874113,13.599986142787827,13.600016048933623,12.800016334581887],\\\"z\\\":[0.01124866997069216,0.011219126750604847,0.012223746782551424,0.012253751753734908,0.01124866997069216],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"grey\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[-0.18750118248733483,0.06249881392331345,0.06249873734662704,-0.18750125898039016,-0.18750118248733483],\\\"y\\\":[13.600016048933623,13.599986142787827,14.39998542157707,14.400015674183493,13.600016048933623],\\\"z\\\":[0.012253751753734908,0.012223746782551424,0.013231351897453265,0.013261704347121926,0.012253751753734908],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"grey\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[-0.18750125898039016,0.06249873734662704,0.06249866160814282,-0.18750133467799002,-0.18750125898039016],\\\"y\\\":[14.400015674183493,14.39998542157707,15.199984743482087,15.200015164032955,14.400015674183493],\\\"z\\\":[0.013261704347121926,0.013231351897453265,0.01424020252805074,0.0142707234002452,0.013261704347121926],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"grey\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[-0.18750133467799002,0.06249866160814282,0.06249858626528794,-0.1875014100029893,-0.18750133467799002],\\\"y\\\":[15.200015164032955,15.199984743482087,15.999984088584561,16.000014582198226,15.200015164032955],\\\"z\\\":[0.0142707234002452,0.01424020252805074,0.015249490761605795,0.01528008489372113,0.0142707234002452],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"grey\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[0.06250000000000001,0.31250000000000006,0.3124999762062602,0.062499976241714925,0.06250000000000001],\\\"y\\\":[1.0180229352716006e-18,5.090114676358003e-18,0.799996278040074,0.7999992519637964,1.0180229352716006e-18],\\\"z\\\":[5.412225351471832e-18,2.706112675735916e-17,7.156800732356103e-05,7.454847123235294e-05,5.412225351471832e-18],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"grey\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[0.062499976241714925,0.3124999762062602,0.3124999369796462,0.06249993711703296,0.062499976241714925],\\\"y\\\":[0.7999992519637964,0.799996278040074,1.5999926485184153,1.599998502145643,0.7999992519637964],\\\"z\\\":[7.454847123235294e-05,7.156800732356103e-05,0.0002829556480427738,0.000288823222995794,7.454847123235294e-05],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"grey\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[0.06249993711703296,0.3124999369796462,0.31249988585209126,0.06249988614563157,0.06249993711703296],\\\"y\\\":[1.599998502145643,1.5999926485184153,2.3999891982242914,2.3999977537828854,1.599998502145643],\\\"z\\\":[0.000288823222995794,0.0002829556480427738,0.000619583705373338,0.0006281611479309727,0.000288823222995794],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"grey\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[0.06249988614563157,0.31249988585209126,0.31249982519173813,0.06249982568985464,0.06249988614563157],\\\"y\\\":[2.3999977537828854,2.3999891982242914,3.199985834525723,3.199996978706395,2.3999977537828854],\\\"z\\\":[0.0006281611479309727,0.000619583705373338,0.0010676543732890532,0.0010788286958303061,0.0006281611479309727],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"grey\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[0.06249982568985464,0.31249982519173813,0.3124997576575687,0.06249975839277351,0.06249982568985464],\\\"y\\\":[3.199996978706395,3.199985834525723,3.999982653110979,3.9999961912276247,3.199996978706395],\\\"z\\\":[0.0010788286958303061,0.0010676543732890532,0.0016140431910750396,0.0016276197079183711,0.0010788286958303061],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"grey\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[0.06249975839277351,0.3124997576575687,0.31249968471514844,0.06249968571831458,0.06249975839277351],\\\"y\\\":[3.9999961912276247,3.999982653110979,4.7999795567661785,4.799995369864772,3.9999961912276247],\\\"z\\\":[0.0016276197079183711,0.0016140431910750396,0.002246512046602163,0.002262371712883513,0.0016276197079183711],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"grey\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[0.06249968571831458,0.31249968471514844,0.31249960831722134,0.06249960960094422,0.06249968571831458],\\\"y\\\":[4.799995369864772,4.7999795567661785,5.599976649060632,5.599994536403467,4.799995369864772],\\\"z\\\":[0.002262371712883513,0.002246512046602163,0.0029535364194802835,0.002971478114404095,0.002262371712883513],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"grey\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[0.06249960960094422,0.31249960831722134,0.31249952925804725,0.06249953083750652,0.06249960960094422],\\\"y\\\":[5.599994536403467,5.599976649060632,6.399973833832788,6.399993674132288,5.599994536403467],\\\"z\\\":[0.002971478114404095,0.0029535364194802835,0.0037245111849307337,0.0037444132475599676,0.002971478114404095],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"grey\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[0.06249953083750652,0.31249952925804725,0.3124994489452585,0.06249945081569314,0.06249953083750652],\\\"y\\\":[6.399993674132288,6.399973833832788,7.199971218987674,7.199992808951447,6.399993674132288],\\\"z\\\":[0.0037444132475599676,0.0037245111849307337,0.004549560429885782,0.0045712189340837575,0.0037444132475599676],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"grey\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[0.06249945081569314,0.3124994489452585,0.3124993676812126,0.062499369844357826,0.06249945081569314],\\\"y\\\":[7.199992808951447,7.199971218987674,7.999968709163751,7.999991926557534,7.199992808951447],\\\"z\\\":[0.0045712189340837575,0.004549560429885782,0.005419740819627414,0.005443032990145048,0.0045712189340837575],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"grey\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[0.062499369844357826,0.3124993676812126,0.31249928647307207,0.06249928890965862,0.062499369844357826],\\\"y\\\":[7.999991926557534,7.999968709163751,8.799966413686771,8.799991054428338,7.999991926557534],\\\"z\\\":[0.005443032990145048,0.005419740819627414,0.006326844303180048,0.006351565288227993,0.005443032990145048],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"grey\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[0.06249928890965862,0.31249928647307207,0.3124992052797954,0.062499207980544064,0.06249928890965862],\\\"y\\\":[8.799991054428338,8.799966413686771,9.599964237041862,9.599990178821255,8.799991054428338],\\\"z\\\":[0.006351565288227993,0.006326844303180048,0.0072635992487726855,0.007289626126811912,0.006351565288227993],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"grey\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[0.062499207980544064,0.3124992052797954,0.31249912482957265,0.06249912776373148,0.062499207980544064],\\\"y\\\":[9.599990178821255,9.599964237041862,10.399962287646263,10.399989326975627,9.599990178821255],\\\"z\\\":[0.007289626126811912,0.0072635992487726855,0.008223469578245364,0.008250598051274849,0.007289626126811912],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"grey\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[0.06249912776373148,0.31249912482957265,0.3124990448594484,0.06249904800928315,0.06249912776373148],\\\"y\\\":[10.399989326975627,10.399962287646263,11.199960469098698,11.19998848446242,10.399989326975627],\\\"z\\\":[0.008250598051274849,0.008223469578245364,0.009200852310381764,0.009228960258819583,0.008250598051274849],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"grey\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[0.06249904800928315,0.3124990448594484,0.31249896591218884,0.06249896923869486,0.06249904800928315],\\\"y\\\":[11.19998848446242,11.199960469098698,11.999958886724558,11.999987676994971,11.19998848446242],\\\"z\\\":[0.009228960258819583,0.009200852310381764,0.010190874480665907,0.010219760001630138,0.009228960258819583],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"grey\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[0.06249896923869486,0.31249896591218884,0.31249888759876426,0.06249889107848312,0.06249896923869486],\\\"y\\\":[11.999987676994971,11.999958886724558,12.799957442900372,12.79998688874113,11.999987676994971],\\\"z\\\":[0.010219760001630138,0.010190874480665907,0.011189583530517534,0.011219126750604847,0.010219760001630138],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"grey\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[0.06249889107848312,0.31249888759876426,0.3124988103339617,0.06249881392331345,0.06249889107848312],\\\"y\\\":[12.79998688874113,12.799957442900372,13.599956236642031,13.599986142787827,12.79998688874113],\\\"z\\\":[0.011219126750604847,0.011189583530517534,0.012193741811367939,0.012223746782551424,0.011219126750604847],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"grey\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[0.06249881392331345,0.3124988103339617,0.3124987336736442,0.06249873734662704,0.06249881392331345],\\\"y\\\":[13.599986142787827,13.599956236642031,14.399955168970646,14.39998542157707,13.599986142787827],\\\"z\\\":[0.012223746782551424,0.012193741811367939,0.013200999447784604,0.013231351897453265,0.012223746782551424],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"grey\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[0.06249873734662704,0.3124987336736442,0.31249865789427567,0.06249866160814282,0.06249873734662704],\\\"y\\\":[14.39998542157707,14.399955168970646,15.19995432293122,15.199984743482087,14.39998542157707],\\\"z\\\":[0.013231351897453265,0.013200999447784604,0.01420968165585628,0.01424020252805074,0.013231351897453265],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"grey\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[0.06249866160814282,0.31249865789427567,0.31249858253356516,0.06249858626528794,0.06249866160814282],\\\"y\\\":[15.199984743482087,15.19995432293122,15.999953594970899,15.999984088584561,15.199984743482087],\\\"z\\\":[0.01424020252805074,0.01420968165585628,0.01521889662949046,0.015249490761605795,0.01424020252805074],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"grey\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[0.31250000000000006,0.5625000000000001,0.5624999761708054,0.3124999762062602,0.31250000000000006],\\\"y\\\":[5.090114676358003e-18,9.162206417444405e-18,0.7999933041163515,0.799996278040074,5.090114676358003e-18],\\\"z\\\":[2.706112675735916e-17,4.871002816324649e-17,6.858754341476913e-05,7.156800732356103e-05,2.706112675735916e-17],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"grey\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[0.3124999762062602,0.5624999761708054,0.5624999368422594,0.3124999369796462,0.3124999762062602],\\\"y\\\":[0.799996278040074,0.7999933041163515,1.5999867948911877,1.5999926485184153,0.799996278040074],\\\"z\\\":[7.156800732356103e-05,6.858754341476913e-05,0.00027708807308975364,0.0002829556480427738,7.156800732356103e-05],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"grey\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[0.3124999369796462,0.5624999368422594,0.562499885558551,0.31249988585209126,0.3124999369796462],\\\"y\\\":[1.5999926485184153,1.5999867948911877,2.399980642665697,2.3999891982242914,1.5999926485184153],\\\"z\\\":[0.0002829556480427738,0.00027708807308975364,0.0006110062628157034,0.000619583705373338,0.0002829556480427738],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"grey\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[0.31249988585209126,0.562499885558551,0.5624998246936216,0.31249982519173813,0.31249988585209126],\\\"y\\\":[2.3999891982242914,2.399980642665697,3.1999746903450514,3.199985834525723,2.3999891982242914],\\\"z\\\":[0.000619583705373338,0.0006110062628157034,0.0010564800507478003,0.0010676543732890532,0.000619583705373338],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"grey\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[0.31249982519173813,0.5624998246936216,0.5624997569223639,0.3124997576575687,0.31249982519173813],\\\"y\\\":[3.199985834525723,3.1999746903450514,3.999969114994333,3.999982653110979,3.199985834525723],\\\"z\\\":[0.0010676543732890532,0.0010564800507478003,0.0016004666742317078,0.0016140431910750396,0.0010676543732890532],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"grey\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[0.3124997576575687,0.5624997569223639,0.5624996837119822,0.31249968471514844,0.3124997576575687],\\\"y\\\":[3.999982653110979,3.999969114994333,4.799963743667586,4.7999795567661785,3.999982653110979],\\\"z\\\":[0.0016140431910750396,0.0016004666742317078,0.0022306523803208135,0.002246512046602163,0.0016140431910750396],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"grey\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[0.31249968471514844,0.5624996837119822,0.5624996070334984,0.31249960831722134,0.31249968471514844],\\\"y\\\":[4.7999795567661785,4.799963743667586,5.599958761717796,5.599976649060632,4.7999795567661785],\\\"z\\\":[0.002246512046602163,0.0022306523803208135,0.0029355947245564714,0.0029535364194802835,0.002246512046602163],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"grey\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[0.31249960831722134,0.5624996070334984,0.562499527678588,0.31249952925804725,0.31249960831722134],\\\"y\\\":[5.599976649060632,5.599958761717796,6.3999539935332885,6.399973833832788,5.599976649060632],\\\"z\\\":[0.0029535364194802835,0.0029355947245564714,0.0037046091223015,0.0037245111849307337,0.0029535364194802835],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"grey\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[0.31249952925804725,0.562499527678588,0.5624994470748238,0.3124994489452585,0.31249952925804725],\\\"y\\\":[6.399973833832788,6.3999539935332885,7.199949629023902,7.199971218987674,6.399973833832788],\\\"z\\\":[0.0037245111849307337,0.0037046091223015,0.004527901925687805,0.004549560429885782,0.0037245111849307337],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"grey\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[0.3124994489452585,0.5624994470748238,0.5624993655180675,0.3124993676812126,0.3124994489452585],\\\"y\\\":[7.199971218987674,7.199949629023902,7.999945491769968,7.999968709163751,7.199971218987674],\\\"z\\\":[0.004549560429885782,0.004527901925687805,0.0053964486491097806,0.005419740819627414,0.004549560429885782],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"grey\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[0.3124993676812126,0.5624993655180675,0.5624992840364855,0.31249928647307207,0.3124993676812126],\\\"y\\\":[7.999968709163751,7.999945491769968,8.799941772945205,8.799966413686771,7.999968709163751],\\\"z\\\":[0.005419740819627414,0.0053964486491097806,0.006302123318132103,0.006326844303180048,0.005419740819627414],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"grey\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[0.31249928647307207,0.5624992840364855,0.5624992025790467,0.3124992052797954,0.31249928647307207],\\\"y\\\":[8.799966413686771,8.799941772945205,9.599938295262467,9.599964237041862,8.799966413686771],\\\"z\\\":[0.006326844303180048,0.006302123318132103,0.00723757237073346,0.0072635992487726855,0.006326844303180048],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"grey\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[0.3124992052797954,0.5624992025790467,0.5624991218954138,0.31249912482957265,0.3124992052797954],\\\"y\\\":[9.599964237041862,9.599938295262467,10.3999352483169,10.399962287646263,9.599964237041862],\\\"z\\\":[0.0072635992487726855,0.00723757237073346,0.008196341105215879,0.008223469578245364,0.0072635992487726855],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"grey\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[0.31249912482957265,0.5624991218954138,0.5624990417096136,0.3124990448594484,0.31249912482957265],\\\"y\\\":[10.399962287646263,10.3999352483169,11.199932453734975,11.199960469098698,10.399962287646263],\\\"z\\\":[0.008223469578245364,0.008196341105215879,0.009172744361943945,0.009200852310381764,0.008223469578245364],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"grey\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[0.3124990448594484,0.5624990417096136,0.5624989625856828,0.31249896591218884,0.3124990448594484],\\\"y\\\":[11.199960469098698,11.199932453734975,11.999930096454143,11.999958886724558,11.199960469098698],\\\"z\\\":[0.009200852310381764,0.009172744361943945,0.010161988959701676,0.010190874480665907,0.009200852310381764],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"grey\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[0.31249896591218884,0.5624989625856828,0.5624988841190455,0.31249888759876426,0.31249896591218884],\\\"y\\\":[11.999958886724558,11.999930096454143,12.799927997059614,12.799957442900372,11.999958886724558],\\\"z\\\":[0.010190874480665907,0.010161988959701676,0.01116004031043022,0.011189583530517534,0.010190874480665907],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"grey\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[0.31249888759876426,0.5624988841190455,0.56249880674461,0.3124988103339617,0.31249888759876426],\\\"y\\\":[12.799957442900372,12.799927997059614,13.599926330496233,13.599956236642031,12.799957442900372],\\\"z\\\":[0.011189583530517534,0.01116004031043022,0.012163736840184455,0.012193741811367939,0.011189583530517534],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"grey\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[0.3124988103339617,0.56249880674461,0.5624987300006614,0.3124987336736442,0.3124988103339617],\\\"y\\\":[13.599956236642031,13.599926330496233,14.399924916364224,14.399955168970646,13.599956236642031],\\\"z\\\":[0.012193741811367939,0.012163736840184455,0.013170646998115945,0.013200999447784604,0.012193741811367939],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"grey\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[0.3124987336736442,0.5624987300006614,0.5624986541804086,0.31249865789427567,0.3124987336736442],\\\"y\\\":[14.399955168970646,14.399924916364224,15.199923902380352,15.19995432293122,14.399955168970646],\\\"z\\\":[0.013200999447784604,0.013170646998115945,0.01417916078366182,0.01420968165585628,0.013200999447784604],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"grey\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[0.31249865789427567,0.5624986541804086,0.5624985788018424,0.31249858253356516,0.31249865789427567],\\\"y\\\":[15.19995432293122,15.199923902380352,15.999923101357235,15.999953594970899,15.19995432293122],\\\"z\\\":[0.01420968165585628,0.01417916078366182,0.015188302497375128,0.01521889662949046,0.01420968165585628],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"black\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"x\\\":[-0.4375000000000001,-0.4375000236873756,-0.43750006260819346,-0.43750011326728777,-0.4375001733139123,-0.4375002401368169,-0.4375003122753531,-0.43750038783161005,-0.43750046600357495,-0.43750054544343747,-0.4375006258293518,-0.4375007062171683,-0.43750078661795866,-0.4375008663679509,-0.4375009456910473,-0.4375010241082931,-0.43750110196207914,-0.43750117889798307,-0.43750125530740736,-0.43750133096412286,-0.4375014062712665],\\\"y\\\":[-7.126160546901204e-18,0.8000051998112413,1.6000102094000985,2.400014864900074,3.2000192670677388,4.000023267460916,4.800026996061957,5.600030311089138,6.4000333547312875,7.200035988878993,8.000038361345101,8.80004033591147,9.600042062380043,10.400043405634353,11.200044515189864,12.000045257535799,12.800045780422645,13.600045955079421,14.400045926789915,15.200045584583822,16.000045075811887],\\\"z\\\":[-3.7885577460302824e-17,8.050939904993674e-05,0.00030055837290183433,0.000645316033046242,0.001101177340912812,0.0016547727416050344,0.0022940910454462126,0.003007361504251719,0.0037842173728184353,0.00461453594247971,0.005489617331180315,0.0064010072583238825,0.007341679882890364,0.008304854997333818,0.009285176155695221,0.0102775310435586,0.011278213190779474,0.012283756724918393,0.013292056796790585,0.014301244272439662,0.015310679025836462],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"black\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"x\\\":[-0.18750000000000006,-0.1875000237228303,-0.1875000627455803,-0.18750011356082813,-0.18750017381202885,-0.18750024087202166,-0.1875003132785193,-0.1875003891153329,-0.18750046758303424,-0.18750054731387217,-0.187500627992497,-0.18750070865375484,-0.1875007893187073,-0.18750086930210966,-0.1875009488408821,-0.18750102743479913,-0.18750110544179802,-0.18750118248733483,-0.18750125898039016,-0.18750133467799002,-0.1875014100029893],\\\"y\\\":[-3.054068805814802e-18,0.8000022258875188,1.600004355772871,2.4000063093414794,3.200008122887067,4.000009729344271,4.800011182963365,5.6000124237463025,6.400013514431788,7.20001439891522,8.000015143951318,8.800015695169904,9.600016120600648,10.40001636630499,11.200016499826141,12.000016467265384,12.800016334581887,13.600016048933623,14.400015674183493,15.200015164032955,16.000014582198226],\\\"z\\\":[-1.6236676054415498e-17,7.752893514114484e-05,0.0002946907979488142,0.0006367385904886074,0.001090003018371559,0.0016411962247617027,0.002278231379164863,0.002989419809327907,0.0037643153101892014,0.004592877438281733,0.005466325160662682,0.006376286273275938,0.007315653004851139,0.008277726524304333,0.009257068207257402,0.01024864552259437,0.01124866997069216,0.012253751753734908,0.013261704347121926,0.0142707234002452,0.01528008489372113],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"black\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"x\\\":[0.06250000000000001,0.062499976241714925,0.06249993711703296,0.06249988614563157,0.06249982568985464,0.06249975839277351,0.06249968571831458,0.06249960960094422,0.06249953083750652,0.06249945081569314,0.062499369844357826,0.06249928890965862,0.062499207980544064,0.06249912776373148,0.06249904800928315,0.06249896923869486,0.06249889107848312,0.06249881392331345,0.06249873734662704,0.06249866160814282,0.06249858626528794],\\\"y\\\":[1.0180229352716006e-18,0.7999992519637964,1.599998502145643,2.3999977537828854,3.199996978706395,3.9999961912276247,4.799995369864772,5.599994536403467,6.399993674132288,7.199992808951447,7.999991926557534,8.799991054428338,9.599990178821255,10.399989326975627,11.19998848446242,11.999987676994971,12.79998688874113,13.599986142787827,14.39998542157707,15.199984743482087,15.999984088584561],\\\"z\\\":[5.412225351471832e-18,7.454847123235294e-05,0.000288823222995794,0.0006281611479309727,0.0010788286958303061,0.0016276197079183711,0.002262371712883513,0.002971478114404095,0.0037444132475599676,0.0045712189340837575,0.005443032990145048,0.006351565288227993,0.007289626126811912,0.008250598051274849,0.009228960258819583,0.010219760001630138,0.011219126750604847,0.012223746782551424,0.013231351897453265,0.01424020252805074,0.015249490761605795],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"black\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"x\\\":[0.31250000000000006,0.3124999762062602,0.3124999369796462,0.31249988585209126,0.31249982519173813,0.3124997576575687,0.31249968471514844,0.31249960831722134,0.31249952925804725,0.3124994489452585,0.3124993676812126,0.31249928647307207,0.3124992052797954,0.31249912482957265,0.3124990448594484,0.31249896591218884,0.31249888759876426,0.3124988103339617,0.3124987336736442,0.31249865789427567,0.31249858253356516],\\\"y\\\":[5.090114676358003e-18,0.799996278040074,1.5999926485184153,2.3999891982242914,3.199985834525723,3.999982653110979,4.7999795567661785,5.599976649060632,6.399973833832788,7.199971218987674,7.999968709163751,8.799966413686771,9.599964237041862,10.399962287646263,11.199960469098698,11.999958886724558,12.799957442900372,13.599956236642031,14.399955168970646,15.19995432293122,15.999953594970899],\\\"z\\\":[2.706112675735916e-17,7.156800732356103e-05,0.0002829556480427738,0.000619583705373338,0.0010676543732890532,0.0016140431910750396,0.002246512046602163,0.0029535364194802835,0.0037245111849307337,0.004549560429885782,0.005419740819627414,0.006326844303180048,0.0072635992487726855,0.008223469578245364,0.009200852310381764,0.010190874480665907,0.011189583530517534,0.012193741811367939,0.013200999447784604,0.01420968165585628,0.01521889662949046],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"black\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"x\\\":[0.5625000000000001,0.5624999761708054,0.5624999368422594,0.562499885558551,0.5624998246936216,0.5624997569223639,0.5624996837119822,0.5624996070334984,0.562499527678588,0.5624994470748238,0.5624993655180675,0.5624992840364855,0.5624992025790467,0.5624991218954138,0.5624990417096136,0.5624989625856828,0.5624988841190455,0.56249880674461,0.5624987300006614,0.5624986541804086,0.5624985788018424],\\\"y\\\":[9.162206417444405e-18,0.7999933041163515,1.5999867948911877,2.399980642665697,3.1999746903450514,3.999969114994333,4.799963743667586,5.599958761717796,6.3999539935332885,7.199949629023902,7.999945491769968,8.799941772945205,9.599938295262467,10.3999352483169,11.199932453734975,11.999930096454143,12.799927997059614,13.599926330496233,14.399924916364224,15.199923902380352,15.999923101357235],\\\"z\\\":[4.871002816324649e-17,6.858754341476913e-05,0.00027708807308975364,0.0006110062628157034,0.0010564800507478003,0.0016004666742317078,0.0022306523803208135,0.0029355947245564714,0.0037046091223015,0.004527901925687805,0.0053964486491097806,0.006302123318132103,0.00723757237073346,0.008196341105215879,0.009172744361943945,0.010161988959701676,0.01116004031043022,0.012163736840184455,0.013170646998115945,0.01417916078366182,0.015188302497375128],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"black\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"x\\\":[-0.4375000000000001,-0.18750000000000006,0.06250000000000001,0.31250000000000006,0.5625000000000001],\\\"y\\\":[-7.126160546901204e-18,-3.054068805814802e-18,1.0180229352716006e-18,5.090114676358003e-18,9.162206417444405e-18],\\\"z\\\":[-3.7885577460302824e-17,-1.6236676054415498e-17,5.412225351471832e-18,2.706112675735916e-17,4.871002816324649e-17],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"black\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"x\\\":[-0.4375000236873756,-0.1875000237228303,0.062499976241714925,0.3124999762062602,0.5624999761708054],\\\"y\\\":[0.8000051998112413,0.8000022258875188,0.7999992519637964,0.799996278040074,0.7999933041163515],\\\"z\\\":[8.050939904993674e-05,7.752893514114484e-05,7.454847123235294e-05,7.156800732356103e-05,6.858754341476913e-05],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"black\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"x\\\":[-0.43750006260819346,-0.1875000627455803,0.06249993711703296,0.3124999369796462,0.5624999368422594],\\\"y\\\":[1.6000102094000985,1.600004355772871,1.599998502145643,1.5999926485184153,1.5999867948911877],\\\"z\\\":[0.00030055837290183433,0.0002946907979488142,0.000288823222995794,0.0002829556480427738,0.00027708807308975364],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"black\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"x\\\":[-0.43750011326728777,-0.18750011356082813,0.06249988614563157,0.31249988585209126,0.562499885558551],\\\"y\\\":[2.400014864900074,2.4000063093414794,2.3999977537828854,2.3999891982242914,2.399980642665697],\\\"z\\\":[0.000645316033046242,0.0006367385904886074,0.0006281611479309727,0.000619583705373338,0.0006110062628157034],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"black\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"x\\\":[-0.4375001733139123,-0.18750017381202885,0.06249982568985464,0.31249982519173813,0.5624998246936216],\\\"y\\\":[3.2000192670677388,3.200008122887067,3.199996978706395,3.199985834525723,3.1999746903450514],\\\"z\\\":[0.001101177340912812,0.001090003018371559,0.0010788286958303061,0.0010676543732890532,0.0010564800507478003],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"black\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"x\\\":[-0.4375002401368169,-0.18750024087202166,0.06249975839277351,0.3124997576575687,0.5624997569223639],\\\"y\\\":[4.000023267460916,4.000009729344271,3.9999961912276247,3.999982653110979,3.999969114994333],\\\"z\\\":[0.0016547727416050344,0.0016411962247617027,0.0016276197079183711,0.0016140431910750396,0.0016004666742317078],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"black\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"x\\\":[-0.4375003122753531,-0.1875003132785193,0.06249968571831458,0.31249968471514844,0.5624996837119822],\\\"y\\\":[4.800026996061957,4.800011182963365,4.799995369864772,4.7999795567661785,4.799963743667586],\\\"z\\\":[0.0022940910454462126,0.002278231379164863,0.002262371712883513,0.002246512046602163,0.0022306523803208135],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"black\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"x\\\":[-0.43750038783161005,-0.1875003891153329,0.06249960960094422,0.31249960831722134,0.5624996070334984],\\\"y\\\":[5.600030311089138,5.6000124237463025,5.599994536403467,5.599976649060632,5.599958761717796],\\\"z\\\":[0.003007361504251719,0.002989419809327907,0.002971478114404095,0.0029535364194802835,0.0029355947245564714],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"black\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"x\\\":[-0.43750046600357495,-0.18750046758303424,0.06249953083750652,0.31249952925804725,0.562499527678588],\\\"y\\\":[6.4000333547312875,6.400013514431788,6.399993674132288,6.399973833832788,6.3999539935332885],\\\"z\\\":[0.0037842173728184353,0.0037643153101892014,0.0037444132475599676,0.0037245111849307337,0.0037046091223015],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"black\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"x\\\":[-0.43750054544343747,-0.18750054731387217,0.06249945081569314,0.3124994489452585,0.5624994470748238],\\\"y\\\":[7.200035988878993,7.20001439891522,7.199992808951447,7.199971218987674,7.199949629023902],\\\"z\\\":[0.00461453594247971,0.004592877438281733,0.0045712189340837575,0.004549560429885782,0.004527901925687805],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"black\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"x\\\":[-0.4375006258293518,-0.187500627992497,0.062499369844357826,0.3124993676812126,0.5624993655180675],\\\"y\\\":[8.000038361345101,8.000015143951318,7.999991926557534,7.999968709163751,7.999945491769968],\\\"z\\\":[0.005489617331180315,0.005466325160662682,0.005443032990145048,0.005419740819627414,0.0053964486491097806],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"black\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"x\\\":[-0.4375007062171683,-0.18750070865375484,0.06249928890965862,0.31249928647307207,0.5624992840364855],\\\"y\\\":[8.80004033591147,8.800015695169904,8.799991054428338,8.799966413686771,8.799941772945205],\\\"z\\\":[0.0064010072583238825,0.006376286273275938,0.006351565288227993,0.006326844303180048,0.006302123318132103],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"black\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"x\\\":[-0.43750078661795866,-0.1875007893187073,0.062499207980544064,0.3124992052797954,0.5624992025790467],\\\"y\\\":[9.600042062380043,9.600016120600648,9.599990178821255,9.599964237041862,9.599938295262467],\\\"z\\\":[0.007341679882890364,0.007315653004851139,0.007289626126811912,0.0072635992487726855,0.00723757237073346],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"black\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"x\\\":[-0.4375008663679509,-0.18750086930210966,0.06249912776373148,0.31249912482957265,0.5624991218954138],\\\"y\\\":[10.400043405634353,10.40001636630499,10.399989326975627,10.399962287646263,10.3999352483169],\\\"z\\\":[0.008304854997333818,0.008277726524304333,0.008250598051274849,0.008223469578245364,0.008196341105215879],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"black\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"x\\\":[-0.4375009456910473,-0.1875009488408821,0.06249904800928315,0.3124990448594484,0.5624990417096136],\\\"y\\\":[11.200044515189864,11.200016499826141,11.19998848446242,11.199960469098698,11.199932453734975],\\\"z\\\":[0.009285176155695221,0.009257068207257402,0.009228960258819583,0.009200852310381764,0.009172744361943945],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"black\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"x\\\":[-0.4375010241082931,-0.18750102743479913,0.06249896923869486,0.31249896591218884,0.5624989625856828],\\\"y\\\":[12.000045257535799,12.000016467265384,11.999987676994971,11.999958886724558,11.999930096454143],\\\"z\\\":[0.0102775310435586,0.01024864552259437,0.010219760001630138,0.010190874480665907,0.010161988959701676],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"black\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"x\\\":[-0.43750110196207914,-0.18750110544179802,0.06249889107848312,0.31249888759876426,0.5624988841190455],\\\"y\\\":[12.800045780422645,12.800016334581887,12.79998688874113,12.799957442900372,12.799927997059614],\\\"z\\\":[0.011278213190779474,0.01124866997069216,0.011219126750604847,0.011189583530517534,0.01116004031043022],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"black\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"x\\\":[-0.43750117889798307,-0.18750118248733483,0.06249881392331345,0.3124988103339617,0.56249880674461],\\\"y\\\":[13.600045955079421,13.600016048933623,13.599986142787827,13.599956236642031,13.599926330496233],\\\"z\\\":[0.012283756724918393,0.012253751753734908,0.012223746782551424,0.012193741811367939,0.012163736840184455],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"black\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"x\\\":[-0.43750125530740736,-0.18750125898039016,0.06249873734662704,0.3124987336736442,0.5624987300006614],\\\"y\\\":[14.400045926789915,14.400015674183493,14.39998542157707,14.399955168970646,14.399924916364224],\\\"z\\\":[0.013292056796790585,0.013261704347121926,0.013231351897453265,0.013200999447784604,0.013170646998115945],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"black\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"x\\\":[-0.43750133096412286,-0.18750133467799002,0.06249866160814282,0.31249865789427567,0.5624986541804086],\\\"y\\\":[15.200045584583822,15.200015164032955,15.199984743482087,15.19995432293122,15.199923902380352],\\\"z\\\":[0.014301244272439662,0.0142707234002452,0.01424020252805074,0.01420968165585628,0.01417916078366182],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"black\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"x\\\":[-0.4375014062712665,-0.1875014100029893,0.06249858626528794,0.31249858253356516,0.5624985788018424],\\\"y\\\":[16.000045075811887,16.000014582198226,15.999984088584561,15.999953594970899,15.999923101357235],\\\"z\\\":[0.015310679025836462,0.01528008489372113,0.015249490761605795,0.01521889662949046,0.015188302497375128],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"lightskyblue\\\"},\\\"mode\\\":\\\"lines\\\",\\\"name\\\":\\\"Aero wake\\\",\\\"surfaceaxis\\\":2,\\\"x\\\":[0.5625000000000001,0.8123477075000001,0.8123476837953569,0.562499976295357,0.5625000000000001],\\\"y\\\":[9.162206417444405e-18,9.162206417444405e-18,0.7999933212351085,0.7999933212351085,9.162206417444405e-18],\\\"z\\\":[4.871002816324649e-17,0.008724875000000049,0.008793254890310381,6.837989031038178e-05,4.871002816324649e-17],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"lightskyblue\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[0.562499976295357,0.8123476837953569,0.8123476446826243,0.5624999371826244,0.562499976295357],\\\"y\\\":[0.7999933212351085,0.7999933212351085,1.5999868291304182,1.5999868291304182,0.7999933212351085],\\\"z\\\":[6.837989031038178e-05,0.008793254890310381,0.009001125991601577,0.00027625099160157664,6.837989031038178e-05],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"lightskyblue\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[0.5624999371826244,0.8123476446826243,0.8123475936878366,0.5624998861878366,0.5624999371826244],\\\"y\\\":[1.5999868291304182,1.5999868291304182,2.3999806938941566,2.3999806938941566,1.5999868291304182],\\\"z\\\":[0.00027625099160157664,0.009001125991601577,0.00933403095937816,0.0006091559593781608,0.00027625099160157664],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"lightskyblue\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[0.5624998861878366,0.8123475936878366,0.8123475331702955,0.5624998256702956,0.5624998861878366],\\\"y\\\":[2.3999806938941566,2.3999806938941566,3.1999747586029037,3.1999747586029037,2.3999806938941566],\\\"z\\\":[0.0006091559593781608,0.00933403095937816,0.009778145021025551,0.0010532700210255516,0.0006091559593781608],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"lightskyblue\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[0.5624998256702956,0.8123475331702955,0.8123474657906017,0.5624997582906017,0.5624998256702956],\\\"y\\\":[3.1999747586029037,3.1999747586029037,3.999969200022097,3.999969200022097,3.1999747586029037],\\\"z\\\":[0.0010532700210255516,0.009778145021025551,0.010320461637624298,0.001595586637624299,0.0010532700210255516],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"lightskyblue\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[0.5624997582906017,0.8123474657906017,0.8123473930060079,0.5624996855060079,0.5624997582906017],\\\"y\\\":[3.999969200022097,3.999969200022097,4.799963845425502,4.799963845425502,3.999969200022097],\\\"z\\\":[0.001595586637624299,0.010320461637624298,0.010948702164465246,0.0022238271644652464,0.001595586637624299],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"lightskyblue\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[0.5624996855060079,0.8123473930060079,0.8123473167765953,0.5624996092765954,0.5624996855060079],\\\"y\\\":[4.799963845425502,4.799963845425502,5.599958879734863,5.599958879734863,4.799963845425502],\\\"z\\\":[0.0022238271644652464,0.010948702164465246,0.011651457730397104,0.0029265827303971044,0.0022238271644652464],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"lightskyblue\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[0.5624996092765954,0.8123473167765953,0.8123472378880863,0.5624995303880863,0.5624996092765954],\\\"y\\\":[5.599958879734863,5.599958879734863,6.399954127618544,6.399954127618544,5.599958879734863],\\\"z\\\":[0.0029265827303971044,0.011651457730397104,0.012418075832735435,0.003693200832735435,0.0029265827303971044],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"lightskyblue\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[0.5624995303880863,0.8123472378880863,0.8123471577598415,0.5624994502598415,0.5624995303880863],\\\"y\\\":[6.399954127618544,6.399954127618544,7.199949778457311,7.199949778457311,6.399954127618544],\\\"z\\\":[0.003693200832735435,0.012418075832735435,0.013238792957041995,0.004513917957041995,0.003693200832735435],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"lightskyblue\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[0.5624994502598415,0.8123471577598415,0.8123470766849902,0.5624993691849902,0.5624994502598415],\\\"y\\\":[7.199949778457311,7.199949778457311,7.999945656178906,7.999945656178906,7.199949778457311],\\\"z\\\":[0.004513917957041995,0.013238792957041995,0.01410461293228132,0.00537973793228132,0.004513917957041995],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"lightskyblue\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[0.5624993691849902,0.8123470766849902,0.8123469956855739,0.5624992881855739,0.5624993691849902],\\\"y\\\":[7.999945656178906,7.999945656178906,8.799941951360688,8.799941951360688,7.999945656178906],\\\"z\\\":[0.00537973793228132,0.01410461293228132,0.015007435798364901,0.006282560798364902,0.00537973793228132],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"lightskyblue\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[0.5624992881855739,0.8123469956855739,0.8123469147102647,0.5624992072102647,0.5624992881855739],\\\"y\\\":[8.799941951360688,8.799941951360688,9.599938487131828,9.599938487131828,8.799941951360688],\\\"z\\\":[0.006282560798364902,0.015007435798364901,0.015939931915767612,0.007215056915767613,0.006282560798364902],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"lightskyblue\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[0.5624992072102647,0.8123469147102647,0.8123468345040965,0.5624991270040965,0.5624992072102647],\\\"y\\\":[9.599938487131828,9.599938487131828,10.399935452451604,10.399935452451604,9.599938487131828],\\\"z\\\":[0.007215056915767613,0.015939931915767612,0.016895667922093942,0.008170792922093943,0.007215056915767613],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"lightskyblue\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[0.5624991270040965,0.8123468345040965,0.8123467547925016,0.5624990472925017,0.5624991270040965],\\\"y\\\":[10.399935452451604,10.399935452451604,11.199932669428227,11.199932669428227,10.399935452451604],\\\"z\\\":[0.008170792922093943,0.016895667922093942,0.01786897769443925,0.009144102694439252,0.008170792922093943],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"lightskyblue\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[0.5624990472925017,0.8123467547925016,0.8123466761359044,0.5624989686359044,0.5624990472925017],\\\"y\\\":[11.199932669428227,11.199932669428227,11.999930322350817,11.999930322350817,11.199932669428227],\\\"z\\\":[0.009144102694439252,0.01786897769443925,0.018855084300556615,0.010130209300556614,0.009144102694439252],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"lightskyblue\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[0.5624989686359044,0.8123466761359044,0.8123465981321941,0.5624988906321942,0.5624989686359044],\\\"y\\\":[11.999930322350817,11.999930322350817,12.799928232343898,12.799928232343898,11.999930322350817],\\\"z\\\":[0.010130209300556614,0.018855084300556615,0.01984996696380438,0.011125091963804382,0.010130209300556614],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"lightskyblue\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[0.5624988906321942,0.8123465981321941,0.8123465212134034,0.5624988137134035,0.5624988906321942],\\\"y\\\":[12.799928232343898,12.799928232343898,13.599926573724765,13.599926573724765,12.799928232343898],\\\"z\\\":[0.011125091963804382,0.01984996696380438,0.02085047502889098,0.012125600028890982,0.011125091963804382],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"lightskyblue\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[0.5624988137134035,0.8123465212134034,0.8123464449208242,0.5624987374208242,0.5624988137134035],\\\"y\\\":[13.599926573724765,13.599926573724765,14.39992516668033,14.39992516668033,13.599926573724765],\\\"z\\\":[0.012125600028890982,0.02085047502889098,0.021854185403696567,0.01312931040369657,0.012125600028890982],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"lightskyblue\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[0.5624987374208242,0.8123464449208242,0.8123463695456885,0.5624986620456885,0.5624987374208242],\\\"y\\\":[14.39992516668033,14.39992516668033,15.199924158393646,15.199924158393646,14.39992516668033],\\\"z\\\":[0.01312931040369657,0.021854185403696567,0.022859493721092188,0.014134618721092188,0.01312931040369657],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"lightskyblue\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[0.5624986620456885,0.8123463695456885,0.8123462946092366,0.5624985871092366,0.5624986620456885],\\\"y\\\":[15.199924158393646,15.199924158393646,15.999923362319814,15.999923362319814,15.199924158393646],\\\"z\\\":[0.014134618721092188,0.022859493721092188,0.02386542772471522,0.01514055272471522,0.014134618721092188],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"lightskyblue\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[0.8123477075000001,1.0621954150000001,1.062195391295357,0.8123476837953569,0.8123477075000001],\\\"y\\\":[9.162206417444405e-18,9.162206417444405e-18,0.7999933212351085,0.7999933212351085,9.162206417444405e-18],\\\"z\\\":[0.008724875000000049,0.01744975000000005,0.01751812989031038,0.008793254890310381,0.008724875000000049],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"lightskyblue\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[0.8123476837953569,1.062195391295357,1.0621953521826244,0.8123476446826243,0.8123476837953569],\\\"y\\\":[0.7999933212351085,0.7999933212351085,1.5999868291304182,1.5999868291304182,0.7999933212351085],\\\"z\\\":[0.008793254890310381,0.01751812989031038,0.017726000991601577,0.009001125991601577,0.008793254890310381],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"lightskyblue\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[0.8123476446826243,1.0621953521826244,1.0621953011878367,0.8123475936878366,0.8123476446826243],\\\"y\\\":[1.5999868291304182,1.5999868291304182,2.3999806938941566,2.3999806938941566,1.5999868291304182],\\\"z\\\":[0.009001125991601577,0.017726000991601577,0.01805890595937816,0.00933403095937816,0.009001125991601577],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"lightskyblue\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[0.8123475936878366,1.0621953011878367,1.0621952406702955,0.8123475331702955,0.8123475936878366],\\\"y\\\":[2.3999806938941566,2.3999806938941566,3.1999747586029037,3.1999747586029037,2.3999806938941566],\\\"z\\\":[0.00933403095937816,0.01805890595937816,0.01850302002102555,0.009778145021025551,0.00933403095937816],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"lightskyblue\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[0.8123475331702955,1.0621952406702955,1.0621951732906016,0.8123474657906017,0.8123475331702955],\\\"y\\\":[3.1999747586029037,3.1999747586029037,3.999969200022097,3.999969200022097,3.1999747586029037],\\\"z\\\":[0.009778145021025551,0.01850302002102555,0.019045336637624297,0.010320461637624298,0.009778145021025551],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"lightskyblue\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[0.8123474657906017,1.0621951732906016,1.062195100506008,0.8123473930060079,0.8123474657906017],\\\"y\\\":[3.999969200022097,3.999969200022097,4.799963845425502,4.799963845425502,3.999969200022097],\\\"z\\\":[0.010320461637624298,0.019045336637624297,0.019673577164465245,0.010948702164465246,0.010320461637624298],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"lightskyblue\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[0.8123473930060079,1.062195100506008,1.0621950242765954,0.8123473167765953,0.8123473930060079],\\\"y\\\":[4.799963845425502,4.799963845425502,5.599958879734863,5.599958879734863,4.799963845425502],\\\"z\\\":[0.010948702164465246,0.019673577164465245,0.020376332730397104,0.011651457730397104,0.010948702164465246],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"lightskyblue\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[0.8123473167765953,1.0621950242765954,1.0621949453880863,0.8123472378880863,0.8123473167765953],\\\"y\\\":[5.599958879734863,5.599958879734863,6.399954127618544,6.399954127618544,5.599958879734863],\\\"z\\\":[0.011651457730397104,0.020376332730397104,0.021142950832735437,0.012418075832735435,0.011651457730397104],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"lightskyblue\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[0.8123472378880863,1.0621949453880863,1.0621948652598414,0.8123471577598415,0.8123472378880863],\\\"y\\\":[6.399954127618544,6.399954127618544,7.199949778457311,7.199949778457311,6.399954127618544],\\\"z\\\":[0.012418075832735435,0.021142950832735437,0.021963667957041993,0.013238792957041995,0.012418075832735435],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"lightskyblue\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[0.8123471577598415,1.0621948652598414,1.0621947841849901,0.8123470766849902,0.8123471577598415],\\\"y\\\":[7.199949778457311,7.199949778457311,7.999945656178906,7.999945656178906,7.199949778457311],\\\"z\\\":[0.013238792957041995,0.021963667957041993,0.02282948793228132,0.01410461293228132,0.013238792957041995],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"lightskyblue\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[0.8123470766849902,1.0621947841849901,1.0621947031855739,0.8123469956855739,0.8123470766849902],\\\"y\\\":[7.999945656178906,7.999945656178906,8.799941951360688,8.799941951360688,7.999945656178906],\\\"z\\\":[0.01410461293228132,0.02282948793228132,0.0237323107983649,0.015007435798364901,0.01410461293228132],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"lightskyblue\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[0.8123469956855739,1.0621947031855739,1.0621946222102647,0.8123469147102647,0.8123469956855739],\\\"y\\\":[8.799941951360688,8.799941951360688,9.599938487131828,9.599938487131828,8.799941951360688],\\\"z\\\":[0.015007435798364901,0.0237323107983649,0.024664806915767612,0.015939931915767612,0.015007435798364901],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"lightskyblue\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[0.8123469147102647,1.0621946222102647,1.0621945420040966,0.8123468345040965,0.8123469147102647],\\\"y\\\":[9.599938487131828,9.599938487131828,10.399935452451604,10.399935452451604,9.599938487131828],\\\"z\\\":[0.015939931915767612,0.024664806915767612,0.025620542922093942,0.016895667922093942,0.015939931915767612],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"lightskyblue\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[0.8123468345040965,1.0621945420040966,1.0621944622925017,0.8123467547925016,0.8123468345040965],\\\"y\\\":[10.399935452451604,10.399935452451604,11.199932669428227,11.199932669428227,10.399935452451604],\\\"z\\\":[0.016895667922093942,0.025620542922093942,0.02659385269443925,0.01786897769443925,0.016895667922093942],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"lightskyblue\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[0.8123467547925016,1.0621944622925017,1.0621943836359045,0.8123466761359044,0.8123467547925016],\\\"y\\\":[11.199932669428227,11.199932669428227,11.999930322350817,11.999930322350817,11.199932669428227],\\\"z\\\":[0.01786897769443925,0.02659385269443925,0.027579959300556615,0.018855084300556615,0.01786897769443925],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"lightskyblue\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[0.8123466761359044,1.0621943836359045,1.062194305632194,0.8123465981321941,0.8123466761359044],\\\"y\\\":[11.999930322350817,11.999930322350817,12.799928232343898,12.799928232343898,11.999930322350817],\\\"z\\\":[0.018855084300556615,0.027579959300556615,0.02857484196380438,0.01984996696380438,0.018855084300556615],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"lightskyblue\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[0.8123465981321941,1.062194305632194,1.0621942287134034,0.8123465212134034,0.8123465981321941],\\\"y\\\":[12.799928232343898,12.799928232343898,13.599926573724765,13.599926573724765,12.799928232343898],\\\"z\\\":[0.01984996696380438,0.02857484196380438,0.02957535002889098,0.02085047502889098,0.01984996696380438],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"lightskyblue\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[0.8123465212134034,1.0621942287134034,1.0621941524208243,0.8123464449208242,0.8123465212134034],\\\"y\\\":[13.599926573724765,13.599926573724765,14.39992516668033,14.39992516668033,13.599926573724765],\\\"z\\\":[0.02085047502889098,0.02957535002889098,0.030579060403696567,0.021854185403696567,0.02085047502889098],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"lightskyblue\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[0.8123464449208242,1.0621941524208243,1.0621940770456886,0.8123463695456885,0.8123464449208242],\\\"y\\\":[14.39992516668033,14.39992516668033,15.199924158393646,15.199924158393646,14.39992516668033],\\\"z\\\":[0.021854185403696567,0.030579060403696567,0.03158436872109219,0.022859493721092188,0.021854185403696567],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"lightskyblue\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[0.8123463695456885,1.0621940770456886,1.0621940021092366,0.8123462946092366,0.8123463695456885],\\\"y\\\":[15.199924158393646,15.199924158393646,15.999923362319814,15.999923362319814,15.199924158393646],\\\"z\\\":[0.022859493721092188,0.03158436872109219,0.03259030272471522,0.02386542772471522,0.022859493721092188],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"lightskyblue\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[1.0621954150000001,1.3120431225000002,1.312043098795357,1.062195391295357,1.0621954150000001],\\\"y\\\":[9.162206417444405e-18,9.162206417444405e-18,0.7999933212351085,0.7999933212351085,9.162206417444405e-18],\\\"z\\\":[0.01744975000000005,0.02617462500000005,0.02624300489031038,0.01751812989031038,0.01744975000000005],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"lightskyblue\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[1.062195391295357,1.312043098795357,1.3120430596826245,1.0621953521826244,1.062195391295357],\\\"y\\\":[0.7999933212351085,0.7999933212351085,1.5999868291304182,1.5999868291304182,0.7999933212351085],\\\"z\\\":[0.01751812989031038,0.02624300489031038,0.026450875991601577,0.017726000991601577,0.01751812989031038],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"lightskyblue\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[1.0621953521826244,1.3120430596826245,1.3120430086878367,1.0621953011878367,1.0621953521826244],\\\"y\\\":[1.5999868291304182,1.5999868291304182,2.3999806938941566,2.3999806938941566,1.5999868291304182],\\\"z\\\":[0.017726000991601577,0.026450875991601577,0.02678378095937816,0.01805890595937816,0.017726000991601577],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"lightskyblue\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[1.0621953011878367,1.3120430086878367,1.3120429481702955,1.0621952406702955,1.0621953011878367],\\\"y\\\":[2.3999806938941566,2.3999806938941566,3.1999747586029037,3.1999747586029037,2.3999806938941566],\\\"z\\\":[0.01805890595937816,0.02678378095937816,0.02722789502102555,0.01850302002102555,0.01805890595937816],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"lightskyblue\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[1.0621952406702955,1.3120429481702955,1.3120428807906017,1.0621951732906016,1.0621952406702955],\\\"y\\\":[3.1999747586029037,3.1999747586029037,3.999969200022097,3.999969200022097,3.1999747586029037],\\\"z\\\":[0.01850302002102555,0.02722789502102555,0.027770211637624297,0.019045336637624297,0.01850302002102555],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"lightskyblue\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[1.0621951732906016,1.3120428807906017,1.312042808006008,1.062195100506008,1.0621951732906016],\\\"y\\\":[3.999969200022097,3.999969200022097,4.799963845425502,4.799963845425502,3.999969200022097],\\\"z\\\":[0.019045336637624297,0.027770211637624297,0.028398452164465245,0.019673577164465245,0.019045336637624297],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"lightskyblue\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[1.062195100506008,1.312042808006008,1.3120427317765955,1.0621950242765954,1.062195100506008],\\\"y\\\":[4.799963845425502,4.799963845425502,5.599958879734863,5.599958879734863,4.799963845425502],\\\"z\\\":[0.019673577164465245,0.028398452164465245,0.029101207730397104,0.020376332730397104,0.019673577164465245],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"lightskyblue\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[1.0621950242765954,1.3120427317765955,1.3120426528880864,1.0621949453880863,1.0621950242765954],\\\"y\\\":[5.599958879734863,5.599958879734863,6.399954127618544,6.399954127618544,5.599958879734863],\\\"z\\\":[0.020376332730397104,0.029101207730397104,0.029867825832735437,0.021142950832735437,0.020376332730397104],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"lightskyblue\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[1.0621949453880863,1.3120426528880864,1.3120425727598415,1.0621948652598414,1.0621949453880863],\\\"y\\\":[6.399954127618544,6.399954127618544,7.199949778457311,7.199949778457311,6.399954127618544],\\\"z\\\":[0.021142950832735437,0.029867825832735437,0.030688542957041993,0.021963667957041993,0.021142950832735437],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"lightskyblue\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[1.0621948652598414,1.3120425727598415,1.3120424916849902,1.0621947841849901,1.0621948652598414],\\\"y\\\":[7.199949778457311,7.199949778457311,7.999945656178906,7.999945656178906,7.199949778457311],\\\"z\\\":[0.021963667957041993,0.030688542957041993,0.031554362932281324,0.02282948793228132,0.021963667957041993],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"lightskyblue\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[1.0621947841849901,1.3120424916849902,1.312042410685574,1.0621947031855739,1.0621947841849901],\\\"y\\\":[7.999945656178906,7.999945656178906,8.799941951360688,8.799941951360688,7.999945656178906],\\\"z\\\":[0.02282948793228132,0.031554362932281324,0.0324571857983649,0.0237323107983649,0.02282948793228132],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"lightskyblue\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[1.0621947031855739,1.312042410685574,1.3120423297102648,1.0621946222102647,1.0621947031855739],\\\"y\\\":[8.799941951360688,8.799941951360688,9.599938487131828,9.599938487131828,8.799941951360688],\\\"z\\\":[0.0237323107983649,0.0324571857983649,0.03338968191576761,0.024664806915767612,0.0237323107983649],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"lightskyblue\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[1.0621946222102647,1.3120423297102648,1.3120422495040966,1.0621945420040966,1.0621946222102647],\\\"y\\\":[9.599938487131828,9.599938487131828,10.399935452451604,10.399935452451604,9.599938487131828],\\\"z\\\":[0.024664806915767612,0.03338968191576761,0.034345417922093946,0.025620542922093942,0.024664806915767612],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"lightskyblue\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[1.0621945420040966,1.3120422495040966,1.3120421697925018,1.0621944622925017,1.0621945420040966],\\\"y\\\":[10.399935452451604,10.399935452451604,11.199932669428227,11.199932669428227,10.399935452451604],\\\"z\\\":[0.025620542922093942,0.034345417922093946,0.03531872769443925,0.02659385269443925,0.025620542922093942],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"lightskyblue\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[1.0621944622925017,1.3120421697925018,1.3120420911359045,1.0621943836359045,1.0621944622925017],\\\"y\\\":[11.199932669428227,11.199932669428227,11.999930322350817,11.999930322350817,11.199932669428227],\\\"z\\\":[0.02659385269443925,0.03531872769443925,0.036304834300556615,0.027579959300556615,0.02659385269443925],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"lightskyblue\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[1.0621943836359045,1.3120420911359045,1.3120420131321942,1.062194305632194,1.0621943836359045],\\\"y\\\":[11.999930322350817,11.999930322350817,12.799928232343898,12.799928232343898,11.999930322350817],\\\"z\\\":[0.027579959300556615,0.036304834300556615,0.03729971696380438,0.02857484196380438,0.027579959300556615],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"lightskyblue\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[1.062194305632194,1.3120420131321942,1.3120419362134035,1.0621942287134034,1.062194305632194],\\\"y\\\":[12.799928232343898,12.799928232343898,13.599926573724765,13.599926573724765,12.799928232343898],\\\"z\\\":[0.02857484196380438,0.03729971696380438,0.03830022502889098,0.02957535002889098,0.02857484196380438],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"lightskyblue\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[1.0621942287134034,1.3120419362134035,1.3120418599208243,1.0621941524208243,1.0621942287134034],\\\"y\\\":[13.599926573724765,13.599926573724765,14.39992516668033,14.39992516668033,13.599926573724765],\\\"z\\\":[0.02957535002889098,0.03830022502889098,0.03930393540369657,0.030579060403696567,0.02957535002889098],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"lightskyblue\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[1.0621941524208243,1.3120418599208243,1.3120417845456886,1.0621940770456886,1.0621941524208243],\\\"y\\\":[14.39992516668033,14.39992516668033,15.199924158393646,15.199924158393646,14.39992516668033],\\\"z\\\":[0.030579060403696567,0.03930393540369657,0.04030924372109219,0.03158436872109219,0.030579060403696567],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"lightskyblue\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[1.0621940770456886,1.3120417845456886,1.3120417096092367,1.0621940021092366,1.0621940770456886],\\\"y\\\":[15.199924158393646,15.199924158393646,15.999923362319814,15.999923362319814,15.199924158393646],\\\"z\\\":[0.03158436872109219,0.04030924372109219,0.04131517772471522,0.03259030272471522,0.03158436872109219],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"lightskyblue\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[1.3120431225000002,1.5618908300000003,1.5618908062953571,1.312043098795357,1.3120431225000002],\\\"y\\\":[9.162206417444405e-18,9.162206417444405e-18,0.7999933212351085,0.7999933212351085,9.162206417444405e-18],\\\"z\\\":[0.02617462500000005,0.03489950000000005,0.03496787989031038,0.02624300489031038,0.02617462500000005],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"lightskyblue\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[1.312043098795357,1.5618908062953571,1.5618907671826245,1.3120430596826245,1.312043098795357],\\\"y\\\":[0.7999933212351085,0.7999933212351085,1.5999868291304182,1.5999868291304182,0.7999933212351085],\\\"z\\\":[0.02624300489031038,0.03496787989031038,0.03517575099160158,0.026450875991601577,0.02624300489031038],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"lightskyblue\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[1.3120430596826245,1.5618907671826245,1.5618907161878368,1.3120430086878367,1.3120430596826245],\\\"y\\\":[1.5999868291304182,1.5999868291304182,2.3999806938941566,2.3999806938941566,1.5999868291304182],\\\"z\\\":[0.026450875991601577,0.03517575099160158,0.03550865595937816,0.02678378095937816,0.026450875991601577],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"lightskyblue\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[1.3120430086878367,1.5618907161878368,1.5618906556702956,1.3120429481702955,1.3120430086878367],\\\"y\\\":[2.3999806938941566,2.3999806938941566,3.1999747586029037,3.1999747586029037,2.3999806938941566],\\\"z\\\":[0.02678378095937816,0.03550865595937816,0.03595277002102555,0.02722789502102555,0.02678378095937816],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"lightskyblue\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[1.3120429481702955,1.5618906556702956,1.5618905882906018,1.3120428807906017,1.3120429481702955],\\\"y\\\":[3.1999747586029037,3.1999747586029037,3.999969200022097,3.999969200022097,3.1999747586029037],\\\"z\\\":[0.02722789502102555,0.03595277002102555,0.0364950866376243,0.027770211637624297,0.02722789502102555],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"lightskyblue\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[1.3120428807906017,1.5618905882906018,1.561890515506008,1.312042808006008,1.3120428807906017],\\\"y\\\":[3.999969200022097,3.999969200022097,4.799963845425502,4.799963845425502,3.999969200022097],\\\"z\\\":[0.027770211637624297,0.0364950866376243,0.037123327164465245,0.028398452164465245,0.027770211637624297],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"lightskyblue\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[1.312042808006008,1.561890515506008,1.5618904392765955,1.3120427317765955,1.312042808006008],\\\"y\\\":[4.799963845425502,4.799963845425502,5.599958879734863,5.599958879734863,4.799963845425502],\\\"z\\\":[0.028398452164465245,0.037123327164465245,0.0378260827303971,0.029101207730397104,0.028398452164465245],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"lightskyblue\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[1.3120427317765955,1.5618904392765955,1.5618903603880865,1.3120426528880864,1.3120427317765955],\\\"y\\\":[5.599958879734863,5.599958879734863,6.399954127618544,6.399954127618544,5.599958879734863],\\\"z\\\":[0.029101207730397104,0.0378260827303971,0.03859270083273544,0.029867825832735437,0.029101207730397104],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"lightskyblue\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[1.3120426528880864,1.5618903603880865,1.5618902802598416,1.3120425727598415,1.3120426528880864],\\\"y\\\":[6.399954127618544,6.399954127618544,7.199949778457311,7.199949778457311,6.399954127618544],\\\"z\\\":[0.029867825832735437,0.03859270083273544,0.03941341795704199,0.030688542957041993,0.029867825832735437],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"lightskyblue\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[1.3120425727598415,1.5618902802598416,1.5618901991849903,1.3120424916849902,1.3120425727598415],\\\"y\\\":[7.199949778457311,7.199949778457311,7.999945656178906,7.999945656178906,7.199949778457311],\\\"z\\\":[0.030688542957041993,0.03941341795704199,0.040279237932281324,0.031554362932281324,0.030688542957041993],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"lightskyblue\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[1.3120424916849902,1.5618901991849903,1.561890118185574,1.312042410685574,1.3120424916849902],\\\"y\\\":[7.999945656178906,7.999945656178906,8.799941951360688,8.799941951360688,7.999945656178906],\\\"z\\\":[0.031554362932281324,0.040279237932281324,0.0411820607983649,0.0324571857983649,0.031554362932281324],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"lightskyblue\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[1.312042410685574,1.561890118185574,1.5618900372102649,1.3120423297102648,1.312042410685574],\\\"y\\\":[8.799941951360688,8.799941951360688,9.599938487131828,9.599938487131828,8.799941951360688],\\\"z\\\":[0.0324571857983649,0.0411820607983649,0.04211455691576761,0.03338968191576761,0.0324571857983649],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"lightskyblue\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[1.3120423297102648,1.5618900372102649,1.5618899570040967,1.3120422495040966,1.3120423297102648],\\\"y\\\":[9.599938487131828,9.599938487131828,10.399935452451604,10.399935452451604,9.599938487131828],\\\"z\\\":[0.03338968191576761,0.04211455691576761,0.043070292922093946,0.034345417922093946,0.03338968191576761],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"lightskyblue\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[1.3120422495040966,1.5618899570040967,1.5618898772925018,1.3120421697925018,1.3120422495040966],\\\"y\\\":[10.399935452451604,10.399935452451604,11.199932669428227,11.199932669428227,10.399935452451604],\\\"z\\\":[0.034345417922093946,0.043070292922093946,0.04404360269443925,0.03531872769443925,0.034345417922093946],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"lightskyblue\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[1.3120421697925018,1.5618898772925018,1.5618897986359046,1.3120420911359045,1.3120421697925018],\\\"y\\\":[11.199932669428227,11.199932669428227,11.999930322350817,11.999930322350817,11.199932669428227],\\\"z\\\":[0.03531872769443925,0.04404360269443925,0.045029709300556615,0.036304834300556615,0.03531872769443925],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"lightskyblue\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[1.3120420911359045,1.5618897986359046,1.5618897206321942,1.3120420131321942,1.3120420911359045],\\\"y\\\":[11.999930322350817,11.999930322350817,12.799928232343898,12.799928232343898,11.999930322350817],\\\"z\\\":[0.036304834300556615,0.045029709300556615,0.04602459196380438,0.03729971696380438,0.036304834300556615],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"lightskyblue\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[1.3120420131321942,1.5618897206321942,1.5618896437134036,1.3120419362134035,1.3120420131321942],\\\"y\\\":[12.799928232343898,12.799928232343898,13.599926573724765,13.599926573724765,12.799928232343898],\\\"z\\\":[0.03729971696380438,0.04602459196380438,0.04702510002889098,0.03830022502889098,0.03729971696380438],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"lightskyblue\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[1.3120419362134035,1.5618896437134036,1.5618895674208244,1.3120418599208243,1.3120419362134035],\\\"y\\\":[13.599926573724765,13.599926573724765,14.39992516668033,14.39992516668033,13.599926573724765],\\\"z\\\":[0.03830022502889098,0.04702510002889098,0.04802881040369657,0.03930393540369657,0.03830022502889098],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"lightskyblue\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[1.3120418599208243,1.5618895674208244,1.5618894920456887,1.3120417845456886,1.3120418599208243],\\\"y\\\":[14.39992516668033,14.39992516668033,15.199924158393646,15.199924158393646,14.39992516668033],\\\"z\\\":[0.03930393540369657,0.04802881040369657,0.04903411872109219,0.04030924372109219,0.03930393540369657],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"lightskyblue\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[1.3120417845456886,1.5618894920456887,1.5618894171092368,1.3120417096092367,1.3120417845456886],\\\"y\\\":[15.199924158393646,15.199924158393646,15.999923362319814,15.999923362319814,15.199924158393646],\\\"z\\\":[0.04030924372109219,0.04903411872109219,0.05004005272471522,0.04131517772471522,0.04030924372109219],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"lightskyblue\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[1.5618908300000003,1.8117385375000004,1.8117385137953572,1.5618908062953571,1.5618908300000003],\\\"y\\\":[9.162206417444405e-18,9.162206417444405e-18,0.7999933212351085,0.7999933212351085,9.162206417444405e-18],\\\"z\\\":[0.03489950000000005,0.04362437500000005,0.04369275489031038,0.03496787989031038,0.03489950000000005],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"lightskyblue\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[1.5618908062953571,1.8117385137953572,1.8117384746826246,1.5618907671826245,1.5618908062953571],\\\"y\\\":[0.7999933212351085,0.7999933212351085,1.5999868291304182,1.5999868291304182,0.7999933212351085],\\\"z\\\":[0.03496787989031038,0.04369275489031038,0.04390062599160158,0.03517575099160158,0.03496787989031038],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"lightskyblue\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[1.5618907671826245,1.8117384746826246,1.8117384236878369,1.5618907161878368,1.5618907671826245],\\\"y\\\":[1.5999868291304182,1.5999868291304182,2.3999806938941566,2.3999806938941566,1.5999868291304182],\\\"z\\\":[0.03517575099160158,0.04390062599160158,0.04423353095937816,0.03550865595937816,0.03517575099160158],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"lightskyblue\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[1.5618907161878368,1.8117384236878369,1.8117383631702957,1.5618906556702956,1.5618907161878368],\\\"y\\\":[2.3999806938941566,2.3999806938941566,3.1999747586029037,3.1999747586029037,2.3999806938941566],\\\"z\\\":[0.03550865595937816,0.04423353095937816,0.04467764502102555,0.03595277002102555,0.03550865595937816],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"lightskyblue\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[1.5618906556702956,1.8117383631702957,1.8117382957906019,1.5618905882906018,1.5618906556702956],\\\"y\\\":[3.1999747586029037,3.1999747586029037,3.999969200022097,3.999969200022097,3.1999747586029037],\\\"z\\\":[0.03595277002102555,0.04467764502102555,0.0452199616376243,0.0364950866376243,0.03595277002102555],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"lightskyblue\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[1.5618905882906018,1.8117382957906019,1.8117382230060082,1.561890515506008,1.5618905882906018],\\\"y\\\":[3.999969200022097,3.999969200022097,4.799963845425502,4.799963845425502,3.999969200022097],\\\"z\\\":[0.0364950866376243,0.0452199616376243,0.045848202164465245,0.037123327164465245,0.0364950866376243],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"lightskyblue\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[1.561890515506008,1.8117382230060082,1.8117381467765956,1.5618904392765955,1.561890515506008],\\\"y\\\":[4.799963845425502,4.799963845425502,5.599958879734863,5.599958879734863,4.799963845425502],\\\"z\\\":[0.037123327164465245,0.045848202164465245,0.0465509577303971,0.0378260827303971,0.037123327164465245],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"lightskyblue\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[1.5618904392765955,1.8117381467765956,1.8117380678880866,1.5618903603880865,1.5618904392765955],\\\"y\\\":[5.599958879734863,5.599958879734863,6.399954127618544,6.399954127618544,5.599958879734863],\\\"z\\\":[0.0378260827303971,0.0465509577303971,0.04731757583273544,0.03859270083273544,0.0378260827303971],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"lightskyblue\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[1.5618903603880865,1.8117380678880866,1.8117379877598416,1.5618902802598416,1.5618903603880865],\\\"y\\\":[6.399954127618544,6.399954127618544,7.199949778457311,7.199949778457311,6.399954127618544],\\\"z\\\":[0.03859270083273544,0.04731757583273544,0.04813829295704199,0.03941341795704199,0.03859270083273544],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"lightskyblue\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[1.5618902802598416,1.8117379877598416,1.8117379066849904,1.5618901991849903,1.5618902802598416],\\\"y\\\":[7.199949778457311,7.199949778457311,7.999945656178906,7.999945656178906,7.199949778457311],\\\"z\\\":[0.03941341795704199,0.04813829295704199,0.049004112932281324,0.040279237932281324,0.03941341795704199],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"lightskyblue\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[1.5618901991849903,1.8117379066849904,1.811737825685574,1.561890118185574,1.5618901991849903],\\\"y\\\":[7.999945656178906,7.999945656178906,8.799941951360688,8.799941951360688,7.999945656178906],\\\"z\\\":[0.040279237932281324,0.049004112932281324,0.0499069357983649,0.0411820607983649,0.040279237932281324],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"lightskyblue\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[1.561890118185574,1.811737825685574,1.811737744710265,1.5618900372102649,1.561890118185574],\\\"y\\\":[8.799941951360688,8.799941951360688,9.599938487131828,9.599938487131828,8.799941951360688],\\\"z\\\":[0.0411820607983649,0.0499069357983649,0.05083943191576761,0.04211455691576761,0.0411820607983649],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"lightskyblue\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[1.5618900372102649,1.811737744710265,1.8117376645040968,1.5618899570040967,1.5618900372102649],\\\"y\\\":[9.599938487131828,9.599938487131828,10.399935452451604,10.399935452451604,9.599938487131828],\\\"z\\\":[0.04211455691576761,0.05083943191576761,0.051795167922093946,0.043070292922093946,0.04211455691576761],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"lightskyblue\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[1.5618899570040967,1.8117376645040968,1.811737584792502,1.5618898772925018,1.5618899570040967],\\\"y\\\":[10.399935452451604,10.399935452451604,11.199932669428227,11.199932669428227,10.399935452451604],\\\"z\\\":[0.043070292922093946,0.051795167922093946,0.05276847769443925,0.04404360269443925,0.043070292922093946],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"lightskyblue\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[1.5618898772925018,1.811737584792502,1.8117375061359047,1.5618897986359046,1.5618898772925018],\\\"y\\\":[11.199932669428227,11.199932669428227,11.999930322350817,11.999930322350817,11.199932669428227],\\\"z\\\":[0.04404360269443925,0.05276847769443925,0.053754584300556615,0.045029709300556615,0.04404360269443925],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"lightskyblue\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[1.5618897986359046,1.8117375061359047,1.8117374281321943,1.5618897206321942,1.5618897986359046],\\\"y\\\":[11.999930322350817,11.999930322350817,12.799928232343898,12.799928232343898,11.999930322350817],\\\"z\\\":[0.045029709300556615,0.053754584300556615,0.05474946696380438,0.04602459196380438,0.045029709300556615],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"lightskyblue\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[1.5618897206321942,1.8117374281321943,1.8117373512134036,1.5618896437134036,1.5618897206321942],\\\"y\\\":[12.799928232343898,12.799928232343898,13.599926573724765,13.599926573724765,12.799928232343898],\\\"z\\\":[0.04602459196380438,0.05474946696380438,0.05574997502889098,0.04702510002889098,0.04602459196380438],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"lightskyblue\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[1.5618896437134036,1.8117373512134036,1.8117372749208245,1.5618895674208244,1.5618896437134036],\\\"y\\\":[13.599926573724765,13.599926573724765,14.39992516668033,14.39992516668033,13.599926573724765],\\\"z\\\":[0.04702510002889098,0.05574997502889098,0.05675368540369657,0.04802881040369657,0.04702510002889098],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"lightskyblue\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[1.5618895674208244,1.8117372749208245,1.8117371995456888,1.5618894920456887,1.5618895674208244],\\\"y\\\":[14.39992516668033,14.39992516668033,15.199924158393646,15.199924158393646,14.39992516668033],\\\"z\\\":[0.04802881040369657,0.05675368540369657,0.05775899372109219,0.04903411872109219,0.04802881040369657],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"lightskyblue\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[1.5618894920456887,1.8117371995456888,1.8117371246092369,1.5618894171092368,1.5618894920456887],\\\"y\\\":[15.199924158393646,15.199924158393646,15.999923362319814,15.999923362319814,15.199924158393646],\\\"z\\\":[0.04903411872109219,0.05775899372109219,0.05876492772471522,0.05004005272471522,0.04903411872109219],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"lightskyblue\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[1.8117385375000004,2.0615862450000004,2.0615862212953573,1.8117385137953572,1.8117385375000004],\\\"y\\\":[9.162206417444405e-18,9.162206417444405e-18,0.7999933212351085,0.7999933212351085,9.162206417444405e-18],\\\"z\\\":[0.04362437500000005,0.05234925000000005,0.05241762989031038,0.04369275489031038,0.04362437500000005],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"lightskyblue\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[1.8117385137953572,2.0615862212953573,2.0615861821826247,1.8117384746826246,1.8117385137953572],\\\"y\\\":[0.7999933212351085,0.7999933212351085,1.5999868291304182,1.5999868291304182,0.7999933212351085],\\\"z\\\":[0.04369275489031038,0.05241762989031038,0.05262550099160158,0.04390062599160158,0.04369275489031038],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"lightskyblue\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[1.8117384746826246,2.0615861821826247,2.0615861311878367,1.8117384236878369,1.8117384746826246],\\\"y\\\":[1.5999868291304182,1.5999868291304182,2.3999806938941566,2.3999806938941566,1.5999868291304182],\\\"z\\\":[0.04390062599160158,0.05262550099160158,0.05295840595937816,0.04423353095937816,0.04390062599160158],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"lightskyblue\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[1.8117384236878369,2.0615861311878367,2.0615860706702955,1.8117383631702957,1.8117384236878369],\\\"y\\\":[2.3999806938941566,2.3999806938941566,3.1999747586029037,3.1999747586029037,2.3999806938941566],\\\"z\\\":[0.04423353095937816,0.05295840595937816,0.05340252002102555,0.04467764502102555,0.04423353095937816],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"lightskyblue\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[1.8117383631702957,2.0615860706702955,2.0615860032906017,1.8117382957906019,1.8117383631702957],\\\"y\\\":[3.1999747586029037,3.1999747586029037,3.999969200022097,3.999969200022097,3.1999747586029037],\\\"z\\\":[0.04467764502102555,0.05340252002102555,0.0539448366376243,0.0452199616376243,0.04467764502102555],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"lightskyblue\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[1.8117382957906019,2.0615860032906017,2.0615859305060082,1.8117382230060082,1.8117382957906019],\\\"y\\\":[3.999969200022097,3.999969200022097,4.799963845425502,4.799963845425502,3.999969200022097],\\\"z\\\":[0.0452199616376243,0.0539448366376243,0.054573077164465245,0.045848202164465245,0.0452199616376243],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"lightskyblue\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[1.8117382230060082,2.0615859305060082,2.0615858542765957,1.8117381467765956,1.8117382230060082],\\\"y\\\":[4.799963845425502,4.799963845425502,5.599958879734863,5.599958879734863,4.799963845425502],\\\"z\\\":[0.045848202164465245,0.054573077164465245,0.0552758327303971,0.0465509577303971,0.045848202164465245],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"lightskyblue\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[1.8117381467765956,2.0615858542765957,2.0615857753880866,1.8117380678880866,1.8117381467765956],\\\"y\\\":[5.599958879734863,5.599958879734863,6.399954127618544,6.399954127618544,5.599958879734863],\\\"z\\\":[0.0465509577303971,0.0552758327303971,0.05604245083273544,0.04731757583273544,0.0465509577303971],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"lightskyblue\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[1.8117380678880866,2.0615857753880866,2.0615856952598417,1.8117379877598416,1.8117380678880866],\\\"y\\\":[6.399954127618544,6.399954127618544,7.199949778457311,7.199949778457311,6.399954127618544],\\\"z\\\":[0.04731757583273544,0.05604245083273544,0.05686316795704199,0.04813829295704199,0.04731757583273544],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"lightskyblue\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[1.8117379877598416,2.0615856952598417,2.0615856141849904,1.8117379066849904,1.8117379877598416],\\\"y\\\":[7.199949778457311,7.199949778457311,7.999945656178906,7.999945656178906,7.199949778457311],\\\"z\\\":[0.04813829295704199,0.05686316795704199,0.057728987932281324,0.049004112932281324,0.04813829295704199],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"lightskyblue\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[1.8117379066849904,2.0615856141849904,2.061585533185574,1.811737825685574,1.8117379066849904],\\\"y\\\":[7.999945656178906,7.999945656178906,8.799941951360688,8.799941951360688,7.999945656178906],\\\"z\\\":[0.049004112932281324,0.057728987932281324,0.0586318107983649,0.0499069357983649,0.049004112932281324],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"lightskyblue\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[1.811737825685574,2.061585533185574,2.061585452210265,1.811737744710265,1.811737825685574],\\\"y\\\":[8.799941951360688,8.799941951360688,9.599938487131828,9.599938487131828,8.799941951360688],\\\"z\\\":[0.0499069357983649,0.0586318107983649,0.05956430691576761,0.05083943191576761,0.0499069357983649],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"lightskyblue\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[1.811737744710265,2.061585452210265,2.061585372004097,1.8117376645040968,1.811737744710265],\\\"y\\\":[9.599938487131828,9.599938487131828,10.399935452451604,10.399935452451604,9.599938487131828],\\\"z\\\":[0.05083943191576761,0.05956430691576761,0.060520042922093946,0.051795167922093946,0.05083943191576761],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"lightskyblue\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[1.8117376645040968,2.061585372004097,2.0615852922925018,1.811737584792502,1.8117376645040968],\\\"y\\\":[10.399935452451604,10.399935452451604,11.199932669428227,11.199932669428227,10.399935452451604],\\\"z\\\":[0.051795167922093946,0.060520042922093946,0.06149335269443925,0.05276847769443925,0.051795167922093946],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"lightskyblue\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[1.811737584792502,2.0615852922925018,2.0615852136359045,1.8117375061359047,1.811737584792502],\\\"y\\\":[11.199932669428227,11.199932669428227,11.999930322350817,11.999930322350817,11.199932669428227],\\\"z\\\":[0.05276847769443925,0.06149335269443925,0.062479459300556615,0.053754584300556615,0.05276847769443925],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"lightskyblue\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[1.8117375061359047,2.0615852136359045,2.0615851356321944,1.8117374281321943,1.8117375061359047],\\\"y\\\":[11.999930322350817,11.999930322350817,12.799928232343898,12.799928232343898,11.999930322350817],\\\"z\\\":[0.053754584300556615,0.062479459300556615,0.06347434196380439,0.05474946696380438,0.053754584300556615],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"lightskyblue\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[1.8117374281321943,2.0615851356321944,2.0615850587134035,1.8117373512134036,1.8117374281321943],\\\"y\\\":[12.799928232343898,12.799928232343898,13.599926573724765,13.599926573724765,12.799928232343898],\\\"z\\\":[0.05474946696380438,0.06347434196380439,0.06447485002889097,0.05574997502889098,0.05474946696380438],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"lightskyblue\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[1.8117373512134036,2.0615850587134035,2.0615849824208246,1.8117372749208245,1.8117373512134036],\\\"y\\\":[13.599926573724765,13.599926573724765,14.39992516668033,14.39992516668033,13.599926573724765],\\\"z\\\":[0.05574997502889098,0.06447485002889097,0.06547856040369657,0.05675368540369657,0.05574997502889098],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"lightskyblue\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[1.8117372749208245,2.0615849824208246,2.0615849070456886,1.8117371995456888,1.8117372749208245],\\\"y\\\":[14.39992516668033,14.39992516668033,15.199924158393646,15.199924158393646,14.39992516668033],\\\"z\\\":[0.05675368540369657,0.06547856040369657,0.06648386872109219,0.05775899372109219,0.05675368540369657],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"lightskyblue\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[1.8117371995456888,2.0615849070456886,2.061584832109237,1.8117371246092369,1.8117371995456888],\\\"y\\\":[15.199924158393646,15.199924158393646,15.999923362319814,15.999923362319814,15.199924158393646],\\\"z\\\":[0.05775899372109219,0.06648386872109219,0.06748980272471522,0.05876492772471522,0.05775899372109219],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"grey\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"x\\\":[0.5625000000000001,0.562499976295357,0.5624999371826244,0.5624998861878366,0.5624998256702956,0.5624997582906017,0.5624996855060079,0.5624996092765954,0.5624995303880863,0.5624994502598415,0.5624993691849902,0.5624992881855739,0.5624992072102647,0.5624991270040965,0.5624990472925017,0.5624989686359044,0.5624988906321942,0.5624988137134035,0.5624987374208242,0.5624986620456885,0.5624985871092366],\\\"y\\\":[9.162206417444405e-18,0.7999933212351085,1.5999868291304182,2.3999806938941566,3.1999747586029037,3.999969200022097,4.799963845425502,5.599958879734863,6.399954127618544,7.199949778457311,7.999945656178906,8.799941951360688,9.599938487131828,10.399935452451604,11.199932669428227,11.999930322350817,12.799928232343898,13.599926573724765,14.39992516668033,15.199924158393646,15.999923362319814],\\\"z\\\":[4.871002816324649e-17,6.837989031038178e-05,0.00027625099160157664,0.0006091559593781608,0.0010532700210255516,0.001595586637624299,0.0022238271644652464,0.0029265827303971044,0.003693200832735435,0.004513917957041995,0.00537973793228132,0.006282560798364902,0.007215056915767613,0.008170792922093943,0.009144102694439252,0.010130209300556614,0.011125091963804382,0.012125600028890982,0.01312931040369657,0.014134618721092188,0.01514055272471522],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"grey\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"x\\\":[0.8123477075000001,0.8123476837953569,0.8123476446826243,0.8123475936878366,0.8123475331702955,0.8123474657906017,0.8123473930060079,0.8123473167765953,0.8123472378880863,0.8123471577598415,0.8123470766849902,0.8123469956855739,0.8123469147102647,0.8123468345040965,0.8123467547925016,0.8123466761359044,0.8123465981321941,0.8123465212134034,0.8123464449208242,0.8123463695456885,0.8123462946092366],\\\"y\\\":[9.162206417444405e-18,0.7999933212351085,1.5999868291304182,2.3999806938941566,3.1999747586029037,3.999969200022097,4.799963845425502,5.599958879734863,6.399954127618544,7.199949778457311,7.999945656178906,8.799941951360688,9.599938487131828,10.399935452451604,11.199932669428227,11.999930322350817,12.799928232343898,13.599926573724765,14.39992516668033,15.199924158393646,15.999923362319814],\\\"z\\\":[0.008724875000000049,0.008793254890310381,0.009001125991601577,0.00933403095937816,0.009778145021025551,0.010320461637624298,0.010948702164465246,0.011651457730397104,0.012418075832735435,0.013238792957041995,0.01410461293228132,0.015007435798364901,0.015939931915767612,0.016895667922093942,0.01786897769443925,0.018855084300556615,0.01984996696380438,0.02085047502889098,0.021854185403696567,0.022859493721092188,0.02386542772471522],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"grey\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"x\\\":[1.0621954150000001,1.062195391295357,1.0621953521826244,1.0621953011878367,1.0621952406702955,1.0621951732906016,1.062195100506008,1.0621950242765954,1.0621949453880863,1.0621948652598414,1.0621947841849901,1.0621947031855739,1.0621946222102647,1.0621945420040966,1.0621944622925017,1.0621943836359045,1.062194305632194,1.0621942287134034,1.0621941524208243,1.0621940770456886,1.0621940021092366],\\\"y\\\":[9.162206417444405e-18,0.7999933212351085,1.5999868291304182,2.3999806938941566,3.1999747586029037,3.999969200022097,4.799963845425502,5.599958879734863,6.399954127618544,7.199949778457311,7.999945656178906,8.799941951360688,9.599938487131828,10.399935452451604,11.199932669428227,11.999930322350817,12.799928232343898,13.599926573724765,14.39992516668033,15.199924158393646,15.999923362319814],\\\"z\\\":[0.01744975000000005,0.01751812989031038,0.017726000991601577,0.01805890595937816,0.01850302002102555,0.019045336637624297,0.019673577164465245,0.020376332730397104,0.021142950832735437,0.021963667957041993,0.02282948793228132,0.0237323107983649,0.024664806915767612,0.025620542922093942,0.02659385269443925,0.027579959300556615,0.02857484196380438,0.02957535002889098,0.030579060403696567,0.03158436872109219,0.03259030272471522],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"grey\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"x\\\":[1.3120431225000002,1.312043098795357,1.3120430596826245,1.3120430086878367,1.3120429481702955,1.3120428807906017,1.312042808006008,1.3120427317765955,1.3120426528880864,1.3120425727598415,1.3120424916849902,1.312042410685574,1.3120423297102648,1.3120422495040966,1.3120421697925018,1.3120420911359045,1.3120420131321942,1.3120419362134035,1.3120418599208243,1.3120417845456886,1.3120417096092367],\\\"y\\\":[9.162206417444405e-18,0.7999933212351085,1.5999868291304182,2.3999806938941566,3.1999747586029037,3.999969200022097,4.799963845425502,5.599958879734863,6.399954127618544,7.199949778457311,7.999945656178906,8.799941951360688,9.599938487131828,10.399935452451604,11.199932669428227,11.999930322350817,12.799928232343898,13.599926573724765,14.39992516668033,15.199924158393646,15.999923362319814],\\\"z\\\":[0.02617462500000005,0.02624300489031038,0.026450875991601577,0.02678378095937816,0.02722789502102555,0.027770211637624297,0.028398452164465245,0.029101207730397104,0.029867825832735437,0.030688542957041993,0.031554362932281324,0.0324571857983649,0.03338968191576761,0.034345417922093946,0.03531872769443925,0.036304834300556615,0.03729971696380438,0.03830022502889098,0.03930393540369657,0.04030924372109219,0.04131517772471522],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"grey\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"x\\\":[1.5618908300000003,1.5618908062953571,1.5618907671826245,1.5618907161878368,1.5618906556702956,1.5618905882906018,1.561890515506008,1.5618904392765955,1.5618903603880865,1.5618902802598416,1.5618901991849903,1.561890118185574,1.5618900372102649,1.5618899570040967,1.5618898772925018,1.5618897986359046,1.5618897206321942,1.5618896437134036,1.5618895674208244,1.5618894920456887,1.5618894171092368],\\\"y\\\":[9.162206417444405e-18,0.7999933212351085,1.5999868291304182,2.3999806938941566,3.1999747586029037,3.999969200022097,4.799963845425502,5.599958879734863,6.399954127618544,7.199949778457311,7.999945656178906,8.799941951360688,9.599938487131828,10.399935452451604,11.199932669428227,11.999930322350817,12.799928232343898,13.599926573724765,14.39992516668033,15.199924158393646,15.999923362319814],\\\"z\\\":[0.03489950000000005,0.03496787989031038,0.03517575099160158,0.03550865595937816,0.03595277002102555,0.0364950866376243,0.037123327164465245,0.0378260827303971,0.03859270083273544,0.03941341795704199,0.040279237932281324,0.0411820607983649,0.04211455691576761,0.043070292922093946,0.04404360269443925,0.045029709300556615,0.04602459196380438,0.04702510002889098,0.04802881040369657,0.04903411872109219,0.05004005272471522],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"grey\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"x\\\":[1.8117385375000004,1.8117385137953572,1.8117384746826246,1.8117384236878369,1.8117383631702957,1.8117382957906019,1.8117382230060082,1.8117381467765956,1.8117380678880866,1.8117379877598416,1.8117379066849904,1.811737825685574,1.811737744710265,1.8117376645040968,1.811737584792502,1.8117375061359047,1.8117374281321943,1.8117373512134036,1.8117372749208245,1.8117371995456888,1.8117371246092369],\\\"y\\\":[9.162206417444405e-18,0.7999933212351085,1.5999868291304182,2.3999806938941566,3.1999747586029037,3.999969200022097,4.799963845425502,5.599958879734863,6.399954127618544,7.199949778457311,7.999945656178906,8.799941951360688,9.599938487131828,10.399935452451604,11.199932669428227,11.999930322350817,12.799928232343898,13.599926573724765,14.39992516668033,15.199924158393646,15.999923362319814],\\\"z\\\":[0.04362437500000005,0.04369275489031038,0.04390062599160158,0.04423353095937816,0.04467764502102555,0.0452199616376243,0.045848202164465245,0.0465509577303971,0.04731757583273544,0.04813829295704199,0.049004112932281324,0.0499069357983649,0.05083943191576761,0.051795167922093946,0.05276847769443925,0.053754584300556615,0.05474946696380438,0.05574997502889098,0.05675368540369657,0.05775899372109219,0.05876492772471522],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"grey\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"x\\\":[2.0615862450000004,2.0615862212953573,2.0615861821826247,2.0615861311878367,2.0615860706702955,2.0615860032906017,2.0615859305060082,2.0615858542765957,2.0615857753880866,2.0615856952598417,2.0615856141849904,2.061585533185574,2.061585452210265,2.061585372004097,2.0615852922925018,2.0615852136359045,2.0615851356321944,2.0615850587134035,2.0615849824208246,2.0615849070456886,2.061584832109237],\\\"y\\\":[9.162206417444405e-18,0.7999933212351085,1.5999868291304182,2.3999806938941566,3.1999747586029037,3.999969200022097,4.799963845425502,5.599958879734863,6.399954127618544,7.199949778457311,7.999945656178906,8.799941951360688,9.599938487131828,10.399935452451604,11.199932669428227,11.999930322350817,12.799928232343898,13.599926573724765,14.39992516668033,15.199924158393646,15.999923362319814],\\\"z\\\":[0.05234925000000005,0.05241762989031038,0.05262550099160158,0.05295840595937816,0.05340252002102555,0.0539448366376243,0.054573077164465245,0.0552758327303971,0.05604245083273544,0.05686316795704199,0.057728987932281324,0.0586318107983649,0.05956430691576761,0.060520042922093946,0.06149335269443925,0.062479459300556615,0.06347434196380439,0.06447485002889097,0.06547856040369657,0.06648386872109219,0.06748980272471522],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"grey\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"x\\\":[0.5625000000000001,0.8123477075000001,1.0621954150000001,1.3120431225000002,1.5618908300000003,1.8117385375000004,2.0615862450000004],\\\"y\\\":[9.162206417444405e-18,9.162206417444405e-18,9.162206417444405e-18,9.162206417444405e-18,9.162206417444405e-18,9.162206417444405e-18,9.162206417444405e-18],\\\"z\\\":[4.871002816324649e-17,0.008724875000000049,0.01744975000000005,0.02617462500000005,0.03489950000000005,0.04362437500000005,0.05234925000000005],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"grey\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"x\\\":[0.562499976295357,0.8123476837953569,1.062195391295357,1.312043098795357,1.5618908062953571,1.8117385137953572,2.0615862212953573],\\\"y\\\":[0.7999933212351085,0.7999933212351085,0.7999933212351085,0.7999933212351085,0.7999933212351085,0.7999933212351085,0.7999933212351085],\\\"z\\\":[6.837989031038178e-05,0.008793254890310381,0.01751812989031038,0.02624300489031038,0.03496787989031038,0.04369275489031038,0.05241762989031038],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"grey\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"x\\\":[0.5624999371826244,0.8123476446826243,1.0621953521826244,1.3120430596826245,1.5618907671826245,1.8117384746826246,2.0615861821826247],\\\"y\\\":[1.5999868291304182,1.5999868291304182,1.5999868291304182,1.5999868291304182,1.5999868291304182,1.5999868291304182,1.5999868291304182],\\\"z\\\":[0.00027625099160157664,0.009001125991601577,0.017726000991601577,0.026450875991601577,0.03517575099160158,0.04390062599160158,0.05262550099160158],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"grey\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"x\\\":[0.5624998861878366,0.8123475936878366,1.0621953011878367,1.3120430086878367,1.5618907161878368,1.8117384236878369,2.0615861311878367],\\\"y\\\":[2.3999806938941566,2.3999806938941566,2.3999806938941566,2.3999806938941566,2.3999806938941566,2.3999806938941566,2.3999806938941566],\\\"z\\\":[0.0006091559593781608,0.00933403095937816,0.01805890595937816,0.02678378095937816,0.03550865595937816,0.04423353095937816,0.05295840595937816],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"grey\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"x\\\":[0.5624998256702956,0.8123475331702955,1.0621952406702955,1.3120429481702955,1.5618906556702956,1.8117383631702957,2.0615860706702955],\\\"y\\\":[3.1999747586029037,3.1999747586029037,3.1999747586029037,3.1999747586029037,3.1999747586029037,3.1999747586029037,3.1999747586029037],\\\"z\\\":[0.0010532700210255516,0.009778145021025551,0.01850302002102555,0.02722789502102555,0.03595277002102555,0.04467764502102555,0.05340252002102555],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"grey\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"x\\\":[0.5624997582906017,0.8123474657906017,1.0621951732906016,1.3120428807906017,1.5618905882906018,1.8117382957906019,2.0615860032906017],\\\"y\\\":[3.999969200022097,3.999969200022097,3.999969200022097,3.999969200022097,3.999969200022097,3.999969200022097,3.999969200022097],\\\"z\\\":[0.001595586637624299,0.010320461637624298,0.019045336637624297,0.027770211637624297,0.0364950866376243,0.0452199616376243,0.0539448366376243],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"grey\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"x\\\":[0.5624996855060079,0.8123473930060079,1.062195100506008,1.312042808006008,1.561890515506008,1.8117382230060082,2.0615859305060082],\\\"y\\\":[4.799963845425502,4.799963845425502,4.799963845425502,4.799963845425502,4.799963845425502,4.799963845425502,4.799963845425502],\\\"z\\\":[0.0022238271644652464,0.010948702164465246,0.019673577164465245,0.028398452164465245,0.037123327164465245,0.045848202164465245,0.054573077164465245],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"grey\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"x\\\":[0.5624996092765954,0.8123473167765953,1.0621950242765954,1.3120427317765955,1.5618904392765955,1.8117381467765956,2.0615858542765957],\\\"y\\\":[5.599958879734863,5.599958879734863,5.599958879734863,5.599958879734863,5.599958879734863,5.599958879734863,5.599958879734863],\\\"z\\\":[0.0029265827303971044,0.011651457730397104,0.020376332730397104,0.029101207730397104,0.0378260827303971,0.0465509577303971,0.0552758327303971],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"grey\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"x\\\":[0.5624995303880863,0.8123472378880863,1.0621949453880863,1.3120426528880864,1.5618903603880865,1.8117380678880866,2.0615857753880866],\\\"y\\\":[6.399954127618544,6.399954127618544,6.399954127618544,6.399954127618544,6.399954127618544,6.399954127618544,6.399954127618544],\\\"z\\\":[0.003693200832735435,0.012418075832735435,0.021142950832735437,0.029867825832735437,0.03859270083273544,0.04731757583273544,0.05604245083273544],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"grey\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"x\\\":[0.5624994502598415,0.8123471577598415,1.0621948652598414,1.3120425727598415,1.5618902802598416,1.8117379877598416,2.0615856952598417],\\\"y\\\":[7.199949778457311,7.199949778457311,7.199949778457311,7.199949778457311,7.199949778457311,7.199949778457311,7.199949778457311],\\\"z\\\":[0.004513917957041995,0.013238792957041995,0.021963667957041993,0.030688542957041993,0.03941341795704199,0.04813829295704199,0.05686316795704199],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"grey\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"x\\\":[0.5624993691849902,0.8123470766849902,1.0621947841849901,1.3120424916849902,1.5618901991849903,1.8117379066849904,2.0615856141849904],\\\"y\\\":[7.999945656178906,7.999945656178906,7.999945656178906,7.999945656178906,7.999945656178906,7.999945656178906,7.999945656178906],\\\"z\\\":[0.00537973793228132,0.01410461293228132,0.02282948793228132,0.031554362932281324,0.040279237932281324,0.049004112932281324,0.057728987932281324],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"grey\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"x\\\":[0.5624992881855739,0.8123469956855739,1.0621947031855739,1.312042410685574,1.561890118185574,1.811737825685574,2.061585533185574],\\\"y\\\":[8.799941951360688,8.799941951360688,8.799941951360688,8.799941951360688,8.799941951360688,8.799941951360688,8.799941951360688],\\\"z\\\":[0.006282560798364902,0.015007435798364901,0.0237323107983649,0.0324571857983649,0.0411820607983649,0.0499069357983649,0.0586318107983649],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"grey\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"x\\\":[0.5624992072102647,0.8123469147102647,1.0621946222102647,1.3120423297102648,1.5618900372102649,1.811737744710265,2.061585452210265],\\\"y\\\":[9.599938487131828,9.599938487131828,9.599938487131828,9.599938487131828,9.599938487131828,9.599938487131828,9.599938487131828],\\\"z\\\":[0.007215056915767613,0.015939931915767612,0.024664806915767612,0.03338968191576761,0.04211455691576761,0.05083943191576761,0.05956430691576761],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"grey\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"x\\\":[0.5624991270040965,0.8123468345040965,1.0621945420040966,1.3120422495040966,1.5618899570040967,1.8117376645040968,2.061585372004097],\\\"y\\\":[10.399935452451604,10.399935452451604,10.399935452451604,10.399935452451604,10.399935452451604,10.399935452451604,10.399935452451604],\\\"z\\\":[0.008170792922093943,0.016895667922093942,0.025620542922093942,0.034345417922093946,0.043070292922093946,0.051795167922093946,0.060520042922093946],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"grey\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"x\\\":[0.5624990472925017,0.8123467547925016,1.0621944622925017,1.3120421697925018,1.5618898772925018,1.811737584792502,2.0615852922925018],\\\"y\\\":[11.199932669428227,11.199932669428227,11.199932669428227,11.199932669428227,11.199932669428227,11.199932669428227,11.199932669428227],\\\"z\\\":[0.009144102694439252,0.01786897769443925,0.02659385269443925,0.03531872769443925,0.04404360269443925,0.05276847769443925,0.06149335269443925],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"grey\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"x\\\":[0.5624989686359044,0.8123466761359044,1.0621943836359045,1.3120420911359045,1.5618897986359046,1.8117375061359047,2.0615852136359045],\\\"y\\\":[11.999930322350817,11.999930322350817,11.999930322350817,11.999930322350817,11.999930322350817,11.999930322350817,11.999930322350817],\\\"z\\\":[0.010130209300556614,0.018855084300556615,0.027579959300556615,0.036304834300556615,0.045029709300556615,0.053754584300556615,0.062479459300556615],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"grey\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"x\\\":[0.5624988906321942,0.8123465981321941,1.062194305632194,1.3120420131321942,1.5618897206321942,1.8117374281321943,2.0615851356321944],\\\"y\\\":[12.799928232343898,12.799928232343898,12.799928232343898,12.799928232343898,12.799928232343898,12.799928232343898,12.799928232343898],\\\"z\\\":[0.011125091963804382,0.01984996696380438,0.02857484196380438,0.03729971696380438,0.04602459196380438,0.05474946696380438,0.06347434196380439],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"grey\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"x\\\":[0.5624988137134035,0.8123465212134034,1.0621942287134034,1.3120419362134035,1.5618896437134036,1.8117373512134036,2.0615850587134035],\\\"y\\\":[13.599926573724765,13.599926573724765,13.599926573724765,13.599926573724765,13.599926573724765,13.599926573724765,13.599926573724765],\\\"z\\\":[0.012125600028890982,0.02085047502889098,0.02957535002889098,0.03830022502889098,0.04702510002889098,0.05574997502889098,0.06447485002889097],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"grey\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"x\\\":[0.5624987374208242,0.8123464449208242,1.0621941524208243,1.3120418599208243,1.5618895674208244,1.8117372749208245,2.0615849824208246],\\\"y\\\":[14.39992516668033,14.39992516668033,14.39992516668033,14.39992516668033,14.39992516668033,14.39992516668033,14.39992516668033],\\\"z\\\":[0.01312931040369657,0.021854185403696567,0.030579060403696567,0.03930393540369657,0.04802881040369657,0.05675368540369657,0.06547856040369657],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"grey\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"x\\\":[0.5624986620456885,0.8123463695456885,1.0621940770456886,1.3120417845456886,1.5618894920456887,1.8117371995456888,2.0615849070456886],\\\"y\\\":[15.199924158393646,15.199924158393646,15.199924158393646,15.199924158393646,15.199924158393646,15.199924158393646,15.199924158393646],\\\"z\\\":[0.014134618721092188,0.022859493721092188,0.03158436872109219,0.04030924372109219,0.04903411872109219,0.05775899372109219,0.06648386872109219],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"grey\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"x\\\":[0.5624985871092366,0.8123462946092366,1.0621940021092366,1.3120417096092367,1.5618894171092368,1.8117371246092369,2.061584832109237],\\\"y\\\":[15.999923362319814,15.999923362319814,15.999923362319814,15.999923362319814,15.999923362319814,15.999923362319814,15.999923362319814],\\\"z\\\":[0.01514055272471522,0.02386542772471522,0.03259030272471522,0.04131517772471522,0.05004005272471522,0.05876492772471522,0.06748980272471522],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"blue\\\",\\\"width\\\":4},\\\"marker\\\":{\\\"color\\\":\\\"blue\\\",\\\"size\\\":2},\\\"name\\\":\\\"Beam nodes\\\",\\\"x\\\":[0.0,-2.374942138688192e-08,-6.284862035108256e-08],\\\"y\\\":[0.0,0.799999995444727,1.59999996555245],\\\"z\\\":[0.0,7.529358720955091e-05,0.00029029011673404904],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"blue\\\",\\\"width\\\":4},\\\"marker\\\":{\\\"color\\\":\\\"blue\\\",\\\"size\\\":2},\\\"showlegend\\\":false,\\\"x\\\":[-6.284862035108256e-08,-1.1378098335723172e-07,-1.7418561622652579e-07],\\\"y\\\":[1.59999996555245,2.399999892672534,3.199999764751563],\\\"z\\\":[0.00029029011673404904,0.0006303055085703814,0.0010816222764656192],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"blue\\\",\\\"width\\\":4},\\\"marker\\\":{\\\"color\\\":\\\"blue\\\",\\\"size\\\":2},\\\"showlegend\\\":false,\\\"x\\\":[-1.7418561622652579e-07,-2.414234252892935e-07,-3.1403089387878787e-07],\\\"y\\\":[3.199999764751563,3.999999575756786,4.79999932313942],\\\"z\\\":[0.0010816222764656192,0.001631013837129204,0.0022663366294538505],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"blue\\\",\\\"width\\\":4},\\\"marker\\\":{\\\"color\\\":\\\"blue\\\",\\\"size\\\":2},\\\"showlegend\\\":false,\\\"x\\\":[-3.1403089387878787e-07,-3.900781250590501e-07,-4.6876762866440916e-07],\\\"y\\\":[4.79999932313942,5.599999008239176,6.399998634207163],\\\"z\\\":[0.0022663366294538505,0.002975963538135048,0.003749388763217276],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"blue\\\",\\\"width\\\":4},\\\"marker\\\":{\\\"color\\\":\\\"blue\\\",\\\"size\\\":2},\\\"showlegend\\\":false,\\\"x\\\":[-4.6876762866440916e-07,-5.487166981842684e-07,-6.296148558767214e-07],\\\"y\\\":[6.399998634207163,7.19999820644239,7.99999773090598],\\\"z\\\":[0.003749388763217276,0.0045766335601332515,0.005448856032774456],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"blue\\\",\\\"width\\\":4},\\\"marker\\\":{\\\"color\\\":\\\"blue\\\",\\\"size\\\":2},\\\"showlegend\\\":false,\\\"x\\\":[-6.296148558767214e-07,-7.104811947455406e-07,-7.913442687833645e-07],\\\"y\\\":[7.99999773090598,8.799997214613729,9.599996664266103],\\\"z\\\":[0.005448856032774456,0.006357745534489979,0.007296132846321719],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"blue\\\",\\\"width\\\":4},\\\"marker\\\":{\\\"color\\\":\\\"blue\\\",\\\"size\\\":2},\\\"showlegend\\\":false,\\\"x\\\":[-7.913442687833645e-07,-8.715027288124392e-07,-9.512032581544789e-07],\\\"y\\\":[9.599996664266103,10.399996086807967,11.199995488303351],\\\"z\\\":[0.007296132846321719,0.00825738016953222,0.009235987245929039],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"blue\\\",\\\"width\\\":4},\\\"marker\\\":{\\\"color\\\":\\\"blue\\\",\\\"size\\\":2},\\\"showlegend\\\":false,\\\"x\\\":[-9.512032581544789e-07,-1.029929678635961e-06,-1.1080515871694994e-06],\\\"y\\\":[11.199995488303351,11.999994874562574,12.799994250201319],\\\"z\\\":[0.009235987245929039,0.010226981381871196,0.011226512555626676],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"blue\\\",\\\"width\\\":4},\\\"marker\\\":{\\\"color\\\":\\\"blue\\\",\\\"size\\\":2},\\\"showlegend\\\":false,\\\"x\\\":[-1.1080515871694994e-06,-1.1851793486233463e-06,-1.261735127261516e-06],\\\"y\\\":[12.799994250201319,13.599993619324277,14.399992984728675],\\\"z\\\":[0.011226512555626676,0.012231248025347296,0.01323894000987043],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"blue\\\",\\\"width\\\":4},\\\"marker\\\":{\\\"color\\\":\\\"blue\\\",\\\"size\\\":2},\\\"showlegend\\\":false,\\\"x\\\":[-1.261735127261516e-06,-1.3374633903919913e-06,-1.412801781371022e-06],\\\"y\\\":[14.399992984728675,15.199992348619805,15.999991711987978],\\\"z\\\":[0.01323894000987043,0.014247832746099356,0.015257139294634629],\\\"type\\\":\\\"scatter3d\\\"}],                        {\\\"template\\\":{\\\"data\\\":{\\\"histogram2dcontour\\\":[{\\\"type\\\":\\\"histogram2dcontour\\\",\\\"colorbar\\\":{\\\"outlinewidth\\\":0,\\\"ticks\\\":\\\"\\\"},\\\"colorscale\\\":[[0.0,\\\"#0d0887\\\"],[0.1111111111111111,\\\"#46039f\\\"],[0.2222222222222222,\\\"#7201a8\\\"],[0.3333333333333333,\\\"#9c179e\\\"],[0.4444444444444444,\\\"#bd3786\\\"],[0.5555555555555556,\\\"#d8576b\\\"],[0.6666666666666666,\\\"#ed7953\\\"],[0.7777777777777778,\\\"#fb9f3a\\\"],[0.8888888888888888,\\\"#fdca26\\\"],[1.0,\\\"#f0f921\\\"]]}],\\\"choropleth\\\":[{\\\"type\\\":\\\"choropleth\\\",\\\"colorbar\\\":{\\\"outlinewidth\\\":0,\\\"ticks\\\":\\\"\\\"}}],\\\"histogram2d\\\":[{\\\"type\\\":\\\"histogram2d\\\",\\\"colorbar\\\":{\\\"outlinewidth\\\":0,\\\"ticks\\\":\\\"\\\"},\\\"colorscale\\\":[[0.0,\\\"#0d0887\\\"],[0.1111111111111111,\\\"#46039f\\\"],[0.2222222222222222,\\\"#7201a8\\\"],[0.3333333333333333,\\\"#9c179e\\\"],[0.4444444444444444,\\\"#bd3786\\\"],[0.5555555555555556,\\\"#d8576b\\\"],[0.6666666666666666,\\\"#ed7953\\\"],[0.7777777777777778,\\\"#fb9f3a\\\"],[0.8888888888888888,\\\"#fdca26\\\"],[1.0,\\\"#f0f921\\\"]]}],\\\"heatmap\\\":[{\\\"type\\\":\\\"heatmap\\\",\\\"colorbar\\\":{\\\"outlinewidth\\\":0,\\\"ticks\\\":\\\"\\\"},\\\"colorscale\\\":[[0.0,\\\"#0d0887\\\"],[0.1111111111111111,\\\"#46039f\\\"],[0.2222222222222222,\\\"#7201a8\\\"],[0.3333333333333333,\\\"#9c179e\\\"],[0.4444444444444444,\\\"#bd3786\\\"],[0.5555555555555556,\\\"#d8576b\\\"],[0.6666666666666666,\\\"#ed7953\\\"],[0.7777777777777778,\\\"#fb9f3a\\\"],[0.8888888888888888,\\\"#fdca26\\\"],[1.0,\\\"#f0f921\\\"]]}],\\\"heatmapgl\\\":[{\\\"type\\\":\\\"heatmapgl\\\",\\\"colorbar\\\":{\\\"outlinewidth\\\":0,\\\"ticks\\\":\\\"\\\"},\\\"colorscale\\\":[[0.0,\\\"#0d0887\\\"],[0.1111111111111111,\\\"#46039f\\\"],[0.2222222222222222,\\\"#7201a8\\\"],[0.3333333333333333,\\\"#9c179e\\\"],[0.4444444444444444,\\\"#bd3786\\\"],[0.5555555555555556,\\\"#d8576b\\\"],[0.6666666666666666,\\\"#ed7953\\\"],[0.7777777777777778,\\\"#fb9f3a\\\"],[0.8888888888888888,\\\"#fdca26\\\"],[1.0,\\\"#f0f921\\\"]]}],\\\"contourcarpet\\\":[{\\\"type\\\":\\\"contourcarpet\\\",\\\"colorbar\\\":{\\\"outlinewidth\\\":0,\\\"ticks\\\":\\\"\\\"}}],\\\"contour\\\":[{\\\"type\\\":\\\"contour\\\",\\\"colorbar\\\":{\\\"outlinewidth\\\":0,\\\"ticks\\\":\\\"\\\"},\\\"colorscale\\\":[[0.0,\\\"#0d0887\\\"],[0.1111111111111111,\\\"#46039f\\\"],[0.2222222222222222,\\\"#7201a8\\\"],[0.3333333333333333,\\\"#9c179e\\\"],[0.4444444444444444,\\\"#bd3786\\\"],[0.5555555555555556,\\\"#d8576b\\\"],[0.6666666666666666,\\\"#ed7953\\\"],[0.7777777777777778,\\\"#fb9f3a\\\"],[0.8888888888888888,\\\"#fdca26\\\"],[1.0,\\\"#f0f921\\\"]]}],\\\"surface\\\":[{\\\"type\\\":\\\"surface\\\",\\\"colorbar\\\":{\\\"outlinewidth\\\":0,\\\"ticks\\\":\\\"\\\"},\\\"colorscale\\\":[[0.0,\\\"#0d0887\\\"],[0.1111111111111111,\\\"#46039f\\\"],[0.2222222222222222,\\\"#7201a8\\\"],[0.3333333333333333,\\\"#9c179e\\\"],[0.4444444444444444,\\\"#bd3786\\\"],[0.5555555555555556,\\\"#d8576b\\\"],[0.6666666666666666,\\\"#ed7953\\\"],[0.7777777777777778,\\\"#fb9f3a\\\"],[0.8888888888888888,\\\"#fdca26\\\"],[1.0,\\\"#f0f921\\\"]]}],\\\"mesh3d\\\":[{\\\"type\\\":\\\"mesh3d\\\",\\\"colorbar\\\":{\\\"outlinewidth\\\":0,\\\"ticks\\\":\\\"\\\"}}],\\\"scatter\\\":[{\\\"fillpattern\\\":{\\\"fillmode\\\":\\\"overlay\\\",\\\"size\\\":10,\\\"solidity\\\":0.2},\\\"type\\\":\\\"scatter\\\"}],\\\"parcoords\\\":[{\\\"type\\\":\\\"parcoords\\\",\\\"line\\\":{\\\"colorbar\\\":{\\\"outlinewidth\\\":0,\\\"ticks\\\":\\\"\\\"}}}],\\\"scatterpolargl\\\":[{\\\"type\\\":\\\"scatterpolargl\\\",\\\"marker\\\":{\\\"colorbar\\\":{\\\"outlinewidth\\\":0,\\\"ticks\\\":\\\"\\\"}}}],\\\"bar\\\":[{\\\"error_x\\\":{\\\"color\\\":\\\"#2a3f5f\\\"},\\\"error_y\\\":{\\\"color\\\":\\\"#2a3f5f\\\"},\\\"marker\\\":{\\\"line\\\":{\\\"color\\\":\\\"#E5ECF6\\\",\\\"width\\\":0.5},\\\"pattern\\\":{\\\"fillmode\\\":\\\"overlay\\\",\\\"size\\\":10,\\\"solidity\\\":0.2}},\\\"type\\\":\\\"bar\\\"}],\\\"scattergeo\\\":[{\\\"type\\\":\\\"scattergeo\\\",\\\"marker\\\":{\\\"colorbar\\\":{\\\"outlinewidth\\\":0,\\\"ticks\\\":\\\"\\\"}}}],\\\"scatterpolar\\\":[{\\\"type\\\":\\\"scatterpolar\\\",\\\"marker\\\":{\\\"colorbar\\\":{\\\"outlinewidth\\\":0,\\\"ticks\\\":\\\"\\\"}}}],\\\"histogram\\\":[{\\\"marker\\\":{\\\"pattern\\\":{\\\"fillmode\\\":\\\"overlay\\\",\\\"size\\\":10,\\\"solidity\\\":0.2}},\\\"type\\\":\\\"histogram\\\"}],\\\"scattergl\\\":[{\\\"type\\\":\\\"scattergl\\\",\\\"marker\\\":{\\\"colorbar\\\":{\\\"outlinewidth\\\":0,\\\"ticks\\\":\\\"\\\"}}}],\\\"scatter3d\\\":[{\\\"type\\\":\\\"scatter3d\\\",\\\"line\\\":{\\\"colorbar\\\":{\\\"outlinewidth\\\":0,\\\"ticks\\\":\\\"\\\"}},\\\"marker\\\":{\\\"colorbar\\\":{\\\"outlinewidth\\\":0,\\\"ticks\\\":\\\"\\\"}}}],\\\"scattermapbox\\\":[{\\\"type\\\":\\\"scattermapbox\\\",\\\"marker\\\":{\\\"colorbar\\\":{\\\"outlinewidth\\\":0,\\\"ticks\\\":\\\"\\\"}}}],\\\"scatterternary\\\":[{\\\"type\\\":\\\"scatterternary\\\",\\\"marker\\\":{\\\"colorbar\\\":{\\\"outlinewidth\\\":0,\\\"ticks\\\":\\\"\\\"}}}],\\\"scattercarpet\\\":[{\\\"type\\\":\\\"scattercarpet\\\",\\\"marker\\\":{\\\"colorbar\\\":{\\\"outlinewidth\\\":0,\\\"ticks\\\":\\\"\\\"}}}],\\\"carpet\\\":[{\\\"aaxis\\\":{\\\"endlinecolor\\\":\\\"#2a3f5f\\\",\\\"gridcolor\\\":\\\"white\\\",\\\"linecolor\\\":\\\"white\\\",\\\"minorgridcolor\\\":\\\"white\\\",\\\"startlinecolor\\\":\\\"#2a3f5f\\\"},\\\"baxis\\\":{\\\"endlinecolor\\\":\\\"#2a3f5f\\\",\\\"gridcolor\\\":\\\"white\\\",\\\"linecolor\\\":\\\"white\\\",\\\"minorgridcolor\\\":\\\"white\\\",\\\"startlinecolor\\\":\\\"#2a3f5f\\\"},\\\"type\\\":\\\"carpet\\\"}],\\\"table\\\":[{\\\"cells\\\":{\\\"fill\\\":{\\\"color\\\":\\\"#EBF0F8\\\"},\\\"line\\\":{\\\"color\\\":\\\"white\\\"}},\\\"header\\\":{\\\"fill\\\":{\\\"color\\\":\\\"#C8D4E3\\\"},\\\"line\\\":{\\\"color\\\":\\\"white\\\"}},\\\"type\\\":\\\"table\\\"}],\\\"barpolar\\\":[{\\\"marker\\\":{\\\"line\\\":{\\\"color\\\":\\\"#E5ECF6\\\",\\\"width\\\":0.5},\\\"pattern\\\":{\\\"fillmode\\\":\\\"overlay\\\",\\\"size\\\":10,\\\"solidity\\\":0.2}},\\\"type\\\":\\\"barpolar\\\"}],\\\"pie\\\":[{\\\"automargin\\\":true,\\\"type\\\":\\\"pie\\\"}]},\\\"layout\\\":{\\\"autotypenumbers\\\":\\\"strict\\\",\\\"colorway\\\":[\\\"#636efa\\\",\\\"#EF553B\\\",\\\"#00cc96\\\",\\\"#ab63fa\\\",\\\"#FFA15A\\\",\\\"#19d3f3\\\",\\\"#FF6692\\\",\\\"#B6E880\\\",\\\"#FF97FF\\\",\\\"#FECB52\\\"],\\\"font\\\":{\\\"color\\\":\\\"#2a3f5f\\\"},\\\"hovermode\\\":\\\"closest\\\",\\\"hoverlabel\\\":{\\\"align\\\":\\\"left\\\"},\\\"paper_bgcolor\\\":\\\"white\\\",\\\"plot_bgcolor\\\":\\\"#E5ECF6\\\",\\\"polar\\\":{\\\"bgcolor\\\":\\\"#E5ECF6\\\",\\\"angularaxis\\\":{\\\"gridcolor\\\":\\\"white\\\",\\\"linecolor\\\":\\\"white\\\",\\\"ticks\\\":\\\"\\\"},\\\"radialaxis\\\":{\\\"gridcolor\\\":\\\"white\\\",\\\"linecolor\\\":\\\"white\\\",\\\"ticks\\\":\\\"\\\"}},\\\"ternary\\\":{\\\"bgcolor\\\":\\\"#E5ECF6\\\",\\\"aaxis\\\":{\\\"gridcolor\\\":\\\"white\\\",\\\"linecolor\\\":\\\"white\\\",\\\"ticks\\\":\\\"\\\"},\\\"baxis\\\":{\\\"gridcolor\\\":\\\"white\\\",\\\"linecolor\\\":\\\"white\\\",\\\"ticks\\\":\\\"\\\"},\\\"caxis\\\":{\\\"gridcolor\\\":\\\"white\\\",\\\"linecolor\\\":\\\"white\\\",\\\"ticks\\\":\\\"\\\"}},\\\"coloraxis\\\":{\\\"colorbar\\\":{\\\"outlinewidth\\\":0,\\\"ticks\\\":\\\"\\\"}},\\\"colorscale\\\":{\\\"sequential\\\":[[0.0,\\\"#0d0887\\\"],[0.1111111111111111,\\\"#46039f\\\"],[0.2222222222222222,\\\"#7201a8\\\"],[0.3333333333333333,\\\"#9c179e\\\"],[0.4444444444444444,\\\"#bd3786\\\"],[0.5555555555555556,\\\"#d8576b\\\"],[0.6666666666666666,\\\"#ed7953\\\"],[0.7777777777777778,\\\"#fb9f3a\\\"],[0.8888888888888888,\\\"#fdca26\\\"],[1.0,\\\"#f0f921\\\"]],\\\"sequentialminus\\\":[[0.0,\\\"#0d0887\\\"],[0.1111111111111111,\\\"#46039f\\\"],[0.2222222222222222,\\\"#7201a8\\\"],[0.3333333333333333,\\\"#9c179e\\\"],[0.4444444444444444,\\\"#bd3786\\\"],[0.5555555555555556,\\\"#d8576b\\\"],[0.6666666666666666,\\\"#ed7953\\\"],[0.7777777777777778,\\\"#fb9f3a\\\"],[0.8888888888888888,\\\"#fdca26\\\"],[1.0,\\\"#f0f921\\\"]],\\\"diverging\\\":[[0,\\\"#8e0152\\\"],[0.1,\\\"#c51b7d\\\"],[0.2,\\\"#de77ae\\\"],[0.3,\\\"#f1b6da\\\"],[0.4,\\\"#fde0ef\\\"],[0.5,\\\"#f7f7f7\\\"],[0.6,\\\"#e6f5d0\\\"],[0.7,\\\"#b8e186\\\"],[0.8,\\\"#7fbc41\\\"],[0.9,\\\"#4d9221\\\"],[1,\\\"#276419\\\"]]},\\\"xaxis\\\":{\\\"gridcolor\\\":\\\"white\\\",\\\"linecolor\\\":\\\"white\\\",\\\"ticks\\\":\\\"\\\",\\\"title\\\":{\\\"standoff\\\":15},\\\"zerolinecolor\\\":\\\"white\\\",\\\"automargin\\\":true,\\\"zerolinewidth\\\":2},\\\"yaxis\\\":{\\\"gridcolor\\\":\\\"white\\\",\\\"linecolor\\\":\\\"white\\\",\\\"ticks\\\":\\\"\\\",\\\"title\\\":{\\\"standoff\\\":15},\\\"zerolinecolor\\\":\\\"white\\\",\\\"automargin\\\":true,\\\"zerolinewidth\\\":2},\\\"scene\\\":{\\\"xaxis\\\":{\\\"backgroundcolor\\\":\\\"#E5ECF6\\\",\\\"gridcolor\\\":\\\"white\\\",\\\"linecolor\\\":\\\"white\\\",\\\"showbackground\\\":true,\\\"ticks\\\":\\\"\\\",\\\"zerolinecolor\\\":\\\"white\\\",\\\"gridwidth\\\":2},\\\"yaxis\\\":{\\\"backgroundcolor\\\":\\\"#E5ECF6\\\",\\\"gridcolor\\\":\\\"white\\\",\\\"linecolor\\\":\\\"white\\\",\\\"showbackground\\\":true,\\\"ticks\\\":\\\"\\\",\\\"zerolinecolor\\\":\\\"white\\\",\\\"gridwidth\\\":2},\\\"zaxis\\\":{\\\"backgroundcolor\\\":\\\"#E5ECF6\\\",\\\"gridcolor\\\":\\\"white\\\",\\\"linecolor\\\":\\\"white\\\",\\\"showbackground\\\":true,\\\"ticks\\\":\\\"\\\",\\\"zerolinecolor\\\":\\\"white\\\",\\\"gridwidth\\\":2}},\\\"shapedefaults\\\":{\\\"line\\\":{\\\"color\\\":\\\"#2a3f5f\\\"}},\\\"annotationdefaults\\\":{\\\"arrowcolor\\\":\\\"#2a3f5f\\\",\\\"arrowhead\\\":0,\\\"arrowwidth\\\":1},\\\"geo\\\":{\\\"bgcolor\\\":\\\"white\\\",\\\"landcolor\\\":\\\"#E5ECF6\\\",\\\"subunitcolor\\\":\\\"white\\\",\\\"showland\\\":true,\\\"showlakes\\\":true,\\\"lakecolor\\\":\\\"white\\\"},\\\"title\\\":{\\\"x\\\":0.05},\\\"mapbox\\\":{\\\"style\\\":\\\"light\\\"}}}},                        {\\\"responsive\\\": true}                    ).then(function(){\\n\",\n       \"                            \\n\",\n       \"var gd = document.getElementById('9a9241e3-cfb4-42b6-916e-e7878ffec015');\\n\",\n       \"var x = new MutationObserver(function (mutations, observer) {{\\n\",\n       \"        var display = window.getComputedStyle(gd).display;\\n\",\n       \"        if (!display || display === 'none') {{\\n\",\n       \"            console.log([gd, 'removed!']);\\n\",\n       \"            Plotly.purge(gd);\\n\",\n       \"            observer.disconnect();\\n\",\n       \"        }}\\n\",\n       \"}});\\n\",\n       \"\\n\",\n       \"// Listen for the removal of the full notebook cells\\n\",\n       \"var notebookContainer = gd.closest('#notebook-container');\\n\",\n       \"if (notebookContainer) {{\\n\",\n       \"    x.observe(notebookContainer, {childList: true});\\n\",\n       \"}}\\n\",\n       \"\\n\",\n       \"// Listen for the clearing of the current output cell\\n\",\n       \"var outputEl = gd.closest('.output');\\n\",\n       \"if (outputEl) {{\\n\",\n       \"    x.observe(outputEl, {childList: true});\\n\",\n       \"}}\\n\",\n       \"\\n\",\n       \"                        })                };                });            </script>        </div>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    }\n   ],\n   \"source\": [\n    \"pu.plot_timestep(sharpy_output, tstep=-1, minus_mstar=(wake_panels - 6), plotly=True,custom_scaling=False,z_compression=0.5)\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## Dynamic simulation\\n\",\n    \"Finally, we will run a dynamic simulation after the previous static one. With that in mind, we will now include a dynamic FSI solver (``DynamicCoupled``)  in the simulation.\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 27,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"SimInfo.solvers['SHARPy']['flow'] = ['BeamLoader',\\n\",\n    \"                        'AerogridLoader',\\n\",\n    \"                        'StaticCoupled',\\n\",\n    \"                        'DynamicCoupled']\\n\",\n    \"\\n\",\n    \"SimInfo.solvers['SHARPy']['route'] = './'\\n\",\n    \"SimInfo.solvers['SHARPy']['case'] = 'dynamic'\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"We need information about the time step and the number of iterations:\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 28,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"# Compute the number of time steps needed based on the previous parameters\\n\",\n    \"time_steps = int(end_time/dt)\\n\",\n    \"\\n\",\n    \"# Define the time step and the number of time steps in every solver that requires them as input\\n\",\n    \"SimInfo.set_variable_all_dicts('dt', dt)\\n\",\n    \"SimInfo.define_num_steps(time_steps)\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"We define the approximation we are going to use for the wake convection (``convection_scheme``), the velocity field and deactivate the gravity.\\n\",\n    \"\\n\",\n    \"We are going to use an FSI solver (``DynamicCoupled``) that couples a structual solver (``NonLinearDynamicPrescribedStep``) and aerodynamic solver (``StepUvlm``).\\n\",\n    \"\\n\",\n    \"Moreover, the FSI solver runs a series of postprocessors after each time step. Specifically, it will save a plot of the structure (``BeamPlot``) and of the aerodynamic surfaces (``AerogridPlot``).\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 29,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"SimInfo.solvers['StepUvlm']['convection_scheme'] = 2\\n\",\n    \"SimInfo.solvers['StaticUvlm']['velocity_field_generator'] = 'SteadyVelocityField'\\n\",\n    \"SimInfo.solvers['StepUvlm']['velocity_field_input'] = {'u_inf' : WSP,\\n\",\n    \"                                                       'u_inf_direction' : np.array(\\n\",\n    \"                                                                              [np.cos(aoa_end_deg*deg2rad),\\n\",\n    \"                                                                               0.,\\n\",\n    \"                                                                               np.sin(aoa_end_deg*deg2rad)])}\\n\",\n    \"\\n\",\n    \"SimInfo.solvers['NonLinearDynamicPrescribedStep']['gravity_on'] = False\\n\",\n    \"\\n\",\n    \"SimInfo.solvers['DynamicCoupled']['structural_solver'] = 'NonLinearDynamicPrescribedStep'\\n\",\n    \"SimInfo.solvers['DynamicCoupled']['structural_solver_settings'] = SimInfo.solvers['NonLinearDynamicPrescribedStep']\\n\",\n    \"SimInfo.solvers['DynamicCoupled']['aero_solver'] = 'StepUvlm'\\n\",\n    \"SimInfo.solvers['DynamicCoupled']['aero_solver_settings'] = SimInfo.solvers['StepUvlm']\\n\",\n    \"SimInfo.solvers['DynamicCoupled']['postprocessors'] = ['BeamPlot', 'AerogridPlot']\\n\",\n    \"SimInfo.solvers['DynamicCoupled']['postprocessors_settings'] = {'BeamPlot': SimInfo.solvers['BeamPlot'],\\n\",\n    \"                                                             'AerogridPlot': SimInfo.solvers['AerogridPlot']}\\n\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"Finally, we need to define the movement of the whole wing through its velocity and acceleration. In this case we want a clamped structure so we will set every thing to zero.\\n\",\n    \"\\n\",\n    \"Moreover, we can define forces applied together with the aerodynamic ones. In this case they will be set to zero.\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 30,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"SimInfo.with_forced_vel = True\\n\",\n    \"SimInfo.for_vel = np.zeros((time_steps,6), dtype=float)\\n\",\n    \"SimInfo.for_acc = np.zeros((time_steps,6), dtype=float)\\n\",\n    \"SimInfo.with_dynamic_forces = True\\n\",\n    \"SimInfo.dynamic_forces = np.zeros((time_steps,wing.StructuralInformation.num_node,6),\\n\",\n    \"                                  dtype=float)\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"We write the input files required by SHARPy again:\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 31,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"gc.clean_test_files(SimInfo.solvers['SHARPy']['route'], SimInfo.solvers['SHARPy']['case'])\\n\",\n    \"wing.generate_h5_files(SimInfo.solvers['SHARPy']['route'], SimInfo.solvers['SHARPy']['case'])\\n\",\n    \"SimInfo.generate_solver_file()\\n\",\n    \"SimInfo.generate_dyn_file(time_steps)\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"And we run the simulation:\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 32,\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"name\": \"stdout\",\n     \"output_type\": \"stream\",\n     \"text\": [\n      \"--------------------------------------------------------------------------------\\u001b[0m\\n\",\n      \"            ######  ##     ##    ###    ########  ########  ##    ##\\u001b[0m\\n\",\n      \"           ##    ## ##     ##   ## ##   ##     ## ##     ##  ##  ##\\u001b[0m\\n\",\n      \"           ##       ##     ##  ##   ##  ##     ## ##     ##   ####\\u001b[0m\\n\",\n      \"            ######  ######### ##     ## ########  ########     ##\\u001b[0m\\n\",\n      \"                 ## ##     ## ######### ##   ##   ##           ##\\u001b[0m\\n\",\n      \"           ##    ## ##     ## ##     ## ##    ##  ##           ##\\u001b[0m\\n\",\n      \"            ######  ##     ## ##     ## ##     ## ##           ##\\u001b[0m\\n\",\n      \"--------------------------------------------------------------------------------\\u001b[0m\\n\",\n      \"Aeroelastics Lab, Aeronautics Department.\\u001b[0m\\n\",\n      \"    Copyright (c), Imperial College London.\\u001b[0m\\n\",\n      \"    All rights reserved.\\u001b[0m\\n\",\n      \"    License available at https://github.com/imperialcollegelondon/sharpy\\u001b[0m\\n\",\n      \"\\u001b[36mRunning SHARPy from /home/loca/Downloads/sharpy copy/sharpy/docs/source/content/example_notebooks\\u001b[0m\\n\",\n      \"\\u001b[36mSHARPy being run is in /home/loca/anaconda3/envs/sharpy/lib/python3.10/site-packages\\u001b[0m\\n\",\n      \"SHARPy output folder set\\u001b[0m\\n\",\n      \"\\u001b[34m\\t./output//dynamic/\\u001b[0m\\n\",\n      \"\\u001b[36mGenerating an instance of BeamLoader\\u001b[0m\\n\",\n      \"\\u001b[36mGenerating an instance of AerogridLoader\\u001b[0m\\n\",\n      \"Variable dx1 has no assigned value in the settings file.\\u001b[0m\\n\",\n      \"\\u001b[34m    will default to the value: -1.0\\u001b[0m\\n\",\n      \"Variable ndx1 has no assigned value in the settings file.\\u001b[0m\\n\",\n      \"\\u001b[34m    will default to the value: 1\\u001b[0m\\n\",\n      \"Variable r has no assigned value in the settings file.\\u001b[0m\\n\",\n      \"\\u001b[34m    will default to the value: 1.0\\u001b[0m\\n\",\n      \"Variable dxmax has no assigned value in the settings file.\\u001b[0m\\n\",\n      \"\\u001b[34m    will default to the value: -1.0\\u001b[0m\\n\",\n      \"\\u001b[34mThe aerodynamic grid contains 1 surfaces\\u001b[0m\\n\",\n      \"\\u001b[34m  Surface 0, M=4, N=20\\u001b[0m\\n\",\n      \"     Wake 0, M=400, N=20\\u001b[0m\\n\",\n      \"  In total: 80 bound panels\\u001b[0m\\n\",\n      \"  In total: 8000 wake panels\\u001b[0m\\n\",\n      \"  Total number of panels = 8080\\u001b[0m\\n\",\n      \"\\u001b[36mGenerating an instance of StaticCoupled\\u001b[0m\\n\",\n      \"\\u001b[36mGenerating an instance of NonLinearStatic\\u001b[0m\\n\",\n      \"\\u001b[36mGenerating an instance of StaticUvlm\\u001b[0m\\n\"\n     ]\n    },\n    {\n     \"name\": \"stderr\",\n     \"output_type\": \"stream\",\n     \"text\": [\n      \"fatal: not a git repository (or any of the parent directories): .git\\n\"\n     ]\n    },\n    {\n     \"name\": \"stdout\",\n     \"output_type\": \"stream\",\n     \"text\": [\n      \"\\u001b[0m\\n\",\n      \"\\u001b[0m\\n\",\n      \"\\u001b[0m\\n\",\n      \"|=====|=====|============|==========|==========|==========|==========|==========|==========|\\u001b[0m\\n\",\n      \"|iter |step | log10(res) |    Fx    |    Fy    |    Fz    |    Mx    |    My    |    Mz    |\\u001b[0m\\n\",\n      \"|=====|=====|============|==========|==========|==========|==========|==========|==========|\\u001b[0m\\n\",\n      \"                      DeltaF      DeltaX         Res      ResRel      ResFrc   ResRelFrc      ResMmt   ResRelMmt         ErX       ErPos       ErPsi\\n\",\n      \"LoadStep Subiter      DeltaF     DeltaX          Res      ResRel      ResFrc   ResRelFrc      ResMmt   ResRelMmt         ErX       ErPos       ErPsi\\n\",\n      \"|  0  |  0  |  0.00000   | -0.0187  | -0.0006  |  0.6029  |  4.8229  |  0.1523  |  0.1495  |\\u001b[0m\\n\",\n      \"                      DeltaF      DeltaX         Res      ResRel      ResFrc   ResRelFrc      ResMmt   ResRelMmt         ErX       ErPos       ErPsi\\n\",\n      \"LoadStep Subiter      DeltaF     DeltaX          Res      ResRel      ResFrc   ResRelFrc      ResMmt   ResRelMmt         ErX       ErPos       ErPsi\\n\",\n      \"|  1  |  0  |  -9.22874  | -0.0188  | -0.0006  |  0.6043  |  4.8366  |  0.1526  |  0.1504  |\\u001b[0m\\n\",\n      \"\\u001b[36mGenerating an instance of DynamicCoupled\\u001b[0m\\n\",\n      \"\\u001b[36mGenerating an instance of NonLinearDynamicPrescribedStep\\u001b[0m\\n\",\n      \"\\u001b[36mGenerating an instance of StepUvlm\\u001b[0m\\n\",\n      \"\\u001b[36mGenerating an instance of BeamPlot\\u001b[0m\\n\",\n      \"\\u001b[36mGenerating an instance of AerogridPlot\\u001b[0m\\n\",\n      \"\\u001b[0m\\n\",\n      \"\\u001b[0m\\n\",\n      \"\\u001b[0m\\n\",\n      \"|=======|========|======|==============|==============|==============|==============|==============|\\u001b[0m\\n\",\n      \"|  ts   |   t    | iter | struc ratio  |  iter time   | residual vel |  FoR_vel(x)  |  FoR_vel(z)  |\\u001b[0m\\n\",\n      \"|=======|========|======|==============|==============|==============|==============|==============|\\u001b[0m\\n\",\n      \"|   1   | 0.1250 |  4   |   0.406694   |   2.468390   |  -5.501499   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|   2   | 0.2500 |  3   |   0.488530   |   2.521077   |  -5.442787   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|   3   | 0.3750 |  3   |   0.341496   |   1.847399   |  -5.640521   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|   4   | 0.5000 |  3   |   0.307099   |   1.716782   |  -5.645651   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|   5   | 0.6250 |  3   |   0.387260   |   1.940912   |  -5.889684   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|   6   | 0.7500 |  3   |   0.304108   |   1.657786   |  -5.914635   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|   7   | 0.8750 |  3   |   0.071527   |   1.164022   |  -6.040009   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|   8   | 1.0000 |  3   |   0.069586   |   1.161729   |  -5.925998   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|   9   | 1.1250 |  3   |   0.068879   |   1.164142   |  -5.836958   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  10   | 1.2500 |  3   |   0.068450   |   1.162696   |  -5.632144   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  11   | 1.3750 |  3   |   0.068106   |   1.162670   |  -5.513670   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  12   | 1.5000 |  3   |   0.077652   |   1.170546   |  -5.471589   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  13   | 1.6250 |  3   |   0.070499   |   1.172093   |  -5.423647   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  14   | 1.7500 |  3   |   0.066050   |   1.159820   |  -5.451292   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  15   | 1.8750 |  3   |   0.066831   |   1.159918   |  -5.503924   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  16   | 2.0000 |  3   |   0.076779   |   1.171578   |  -5.521127   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  17   | 2.1250 |  3   |   0.069862   |   1.168248   |  -5.649248   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  18   | 2.2500 |  3   |   0.295345   |   1.482039   |  -5.852560   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  19   | 2.3750 |  3   |   0.065010   |   1.166991   |  -6.169248   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  20   | 2.5000 |  3   |   0.088990   |   1.190061   |  -6.501434   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  21   | 2.6250 |  3   |   0.070542   |   1.172962   |  -5.911316   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  22   | 2.7500 |  3   |   0.073701   |   1.205343   |  -5.844249   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  23   | 2.8750 |  3   |   0.069573   |   1.208120   |  -5.662014   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  24   | 3.0000 |  3   |   0.065514   |   1.184485   |  -5.623002   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  25   | 3.1250 |  3   |   0.068776   |   1.164661   |  -5.695734   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  26   | 3.2500 |  3   |   0.154359   |   1.276498   |  -5.679340   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  27   | 3.3750 |  3   |   0.070216   |   1.205452   |  -5.742054   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  28   | 3.5000 |  3   |   0.067111   |   1.184687   |  -5.934912   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  29   | 3.6250 |  3   |   0.081985   |   1.188525   |  -6.170404   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  30   | 3.7500 |  3   |   0.075176   |   1.174604   |  -6.498959   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  31   | 3.8750 |  3   |   0.068256   |   1.167637   |  -6.054012   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  32   | 4.0000 |  3   |   0.073072   |   1.176508   |  -6.023555   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  33   | 4.1250 |  3   |   0.070665   |   1.172659   |  -5.782342   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  34   | 4.2500 |  3   |   0.073685   |   1.172562   |  -5.673256   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  35   | 4.3750 |  3   |   0.073392   |   1.185722   |  -5.733463   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  36   | 4.5000 |  3   |   0.077823   |   1.177345   |  -5.705716   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  37   | 4.6250 |  3   |   0.065806   |   1.168674   |  -5.751720   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  38   | 4.7500 |  3   |   0.155288   |   1.272752   |  -5.851236   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  39   | 4.8750 |  3   |   0.065315   |   1.167344   |  -5.920499   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  40   | 5.0000 |  3   |   0.065910   |   1.165901   |  -6.297188   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"\\u001b[34m...Finished\\u001b[0m\\n\",\n      \"\\u001b[36mFINISHED - Elapsed time = 61.3302536 seconds\\u001b[0m\\n\",\n      \"\\u001b[36mFINISHED - CPU process time = 205.6064506 seconds\\u001b[0m\\n\"\n     ]\n    }\n   ],\n   \"source\": [\n    \"sharpy_output = sharpy.sharpy_main.main(['',\\n\",\n    \"                                         SimInfo.solvers['SHARPy']['route'] +\\n\",\n    \"                                         SimInfo.solvers['SHARPy']['case'] +\\n\",\n    \"                                         '.sharpy'])\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"This is the plot of the wing at the end of the simulation:\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 33,\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"data\": {\n      \"application/vnd.plotly.v1+json\": {\n       \"config\": {\n        \"plotlyServerURL\": \"https://plot.ly\"\n       },\n       \"data\": [\n        {\n         \"line\": {\n          \"color\": \"grey\"\n         },\n         \"mode\": \"lines\",\n         \"name\": \"Aero surface\",\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          -0.4375000000000001,\n          -0.18750000000000006,\n          -0.187500005737461,\n          -0.4375000057285399,\n          -0.4375000000000001\n         ],\n         \"y\": [\n          -7.126160546901204e-18,\n          -3.054068805814802e-18,\n          0.8000011183147504,\n          0.8000026109241081,\n          -7.126160546901204e-18\n         ],\n         \"z\": [\n          -3.7885577460302824e-17,\n          -1.6236676054415498e-17,\n          3.884345648756862e-05,\n          4.033766384433025e-05,\n          -3.7885577460302824e-17\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"grey\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          -0.4375000057285399,\n          -0.187500005737461,\n          -0.18750001518488343,\n          -0.43750001515032233,\n          -0.4375000057285399\n         ],\n         \"y\": [\n          0.8000026109241081,\n          0.8000011183147504,\n          1.6000021946752327,\n          1.6000051324015534,\n          0.8000026109241081\n         ],\n         \"z\": [\n          4.033766384433025e-05,\n          3.884345648756862e-05,\n          0.0001474587562785521,\n          0.00015039990075090066,\n          4.033766384433025e-05\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"grey\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          -0.43750001515032233,\n          -0.18750001518488343,\n          -0.18750002748442468,\n          -0.4375000274105985,\n          -0.43750001515032233\n         ],\n         \"y\": [\n          1.6000051324015534,\n          1.6000021946752327,\n          2.4000031932873562,\n          2.400007486707306,\n          1.6000051324015534\n         ],\n         \"z\": [\n          0.00015039990075090066,\n          0.0001474587562785521,\n          0.00031820666645609595,\n          0.00032250546002824353,\n          0.00015039990075090066\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"grey\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          -0.4375000274105985,\n          -0.18750002748442468,\n          -0.18750004207304757,\n          -0.4375000419477604,\n          -0.4375000274105985\n         ],\n         \"y\": [\n          2.400007486707306,\n          2.4000031932873562,\n          3.2000041361397518,\n          3.2000097290216205,\n          2.400007486707306\n         ],\n         \"z\": [\n          0.00032250546002824353,\n          0.00031820666645609595,\n          0.0005440116524442518,\n          0.0005496119456658349,\n          0.00032250546002824353\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"grey\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          -0.4375000419477604,\n          -0.18750004207304757,\n          -0.18750005831539146,\n          -0.4375000581303961,\n          -0.4375000419477604\n         ],\n         \"y\": [\n          3.2000097290216205,\n          3.2000041361397518,\n          4.000004991724207,\n          4.000011787646406,\n          3.2000097290216205\n         ],\n         \"z\": [\n          0.0005496119456658349,\n          0.0005440116524442518,\n          0.0008180063787988016,\n          0.0008248117514201825,\n          0.0005496119456658349\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"grey\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          -0.4375000581303961,\n          -0.18750005831539146,\n          -0.18750007587297496,\n          -0.4375000756203353,\n          -0.4375000581303961\n         ],\n         \"y\": [\n          4.000011787646406,\n          4.000004991724207,\n          4.800005788831466,\n          4.800013730415652,\n          4.000011787646406\n         ],\n         \"z\": [\n          0.0008248117514201825,\n          0.0008180063787988016,\n          0.0011339697660142335,\n          0.0011419228184735238,\n          0.0008248117514201825\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"grey\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          -0.4375000756203353,\n          -0.18750007587297496,\n          -0.1875000942880858,\n          -0.43750009396440015,\n          -0.4375000756203353\n         ],\n         \"y\": [\n          4.800013730415652,\n          4.800005788831466,\n          5.600006497238266,\n          5.600015486172148,\n          4.800013730415652\n         ],\n         \"z\": [\n          0.0011419228184735238,\n          0.0011339697660142335,\n          0.0014859053575590015,\n          0.0014949076836219992,\n          0.0011419228184735238\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"grey\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          -0.43750009396440015,\n          -0.1875000942880858,\n          -0.1875001133847934,\n          -0.4375001129859722,\n          -0.43750009396440015\n         ],\n         \"y\": [\n          5.600015486172148,\n          5.600006497238266,\n          6.400007147597506,\n          6.400017125235562,\n          5.600015486172148\n         ],\n         \"z\": [\n          0.0014949076836219992,\n          0.0014859053575590015,\n          0.0018684959356252715,\n          0.0018784887981949942,\n          0.0014949076836219992\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"grey\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          -0.4375001129859722,\n          -0.1875001133847934,\n          -0.1875001328395648,\n          -0.4375001323665614,\n          -0.4375001129859722\n         ],\n         \"y\": [\n          6.400017125235562,\n          6.400007147597506,\n          7.200007709974395,\n          7.200018575842047,\n          6.400017125235562\n         ],\n         \"z\": [\n          0.0018784887981949942,\n          0.0018684959356252715,\n          0.0022766574780168644,\n          0.0022875402460654105,\n          0.0018784887981949942\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"grey\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          -0.4375001323665614,\n          -0.1875001328395648,\n          -0.1875001525902163,\n          -0.43750015204242715,\n          -0.4375001323665614\n         ],\n         \"y\": [\n          7.200018575842047,\n          7.200007709974395,\n          8.000008215603518,\n          8.000019908825728,\n          7.200018575842047\n         ],\n         \"z\": [\n          0.0022875402460654105,\n          0.0022766574780168644,\n          0.0027059959238166756,\n          0.002717707587989787,\n          0.0022875402460654105\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"grey\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          -0.43750015204242715,\n          -0.1875001525902163,\n          -0.18750017240775796,\n          -0.43750017178994344,\n          -0.43750015204242715\n         ],\n         \"y\": [\n          8.000019908825728,\n          8.000008215603518,\n          8.800008634998948,\n          8.80002105303595,\n          8.000019908825728\n         ],\n         \"z\": [\n          0.002717707587989787,\n          0.0027059959238166756,\n          0.00315235047156843,\n          0.003164788301163934,\n          0.002717707587989787\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"grey\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          -0.43750017178994344,\n          -0.18750017240775796,\n          -0.18750019230338255,\n          -0.4375001916179239,\n          -0.43750017178994344\n         ],\n         \"y\": [\n          8.80002105303595,\n          8.800008634998948,\n          9.600008999668942,\n          9.600022079802349,\n          8.80002105303595\n         ],\n         \"z\": [\n          0.003164788301163934,\n          0.00315235047156843,\n          0.003612244321978627,\n          0.003625345445617321,\n          0.003164788301163934\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"grey\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          -0.4375001916179239,\n          -0.18750019230338255,\n          -0.18750021210963969,\n          -0.4375002113643574,\n          -0.4375001916179239\n         ],\n         \"y\": [\n          9.600022079802349,\n          9.600008999668942,\n          10.400009280849583,\n          10.400022919780158,\n          9.600022079802349\n         ],\n         \"z\": [\n          0.003625345445617321,\n          0.003612244321978627,\n          0.004082429194450335,\n          0.004096090111835357,\n          0.003625345445617321\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"grey\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          -0.4375002113643574,\n          -0.18750021210963969,\n          -0.18750023187928208,\n          -0.43750023107885805,\n          -0.4375002113643574\n         ],\n         \"y\": [\n          10.400022919780158,\n          10.400009280849583,\n          11.200009509987185,\n          11.200023644449196,\n          10.400022919780158\n         ],\n         \"z\": [\n          0.004096090111835357,\n          0.004082429194450335,\n          0.004560325318252977,\n          0.0045744826124137754,\n          0.004096090111835357\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"grey\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          -0.43750023107885805,\n          -0.18750023187928208,\n          -0.18750025148252614,\n          -0.43750025063692877,\n          -0.43750023107885805\n         ],\n         \"y\": [\n          11.200023644449196,\n          11.200009509987185,\n          12.000009659246636,\n          12.000024187077601,\n          11.200023644449196\n         ],\n         \"z\": [\n          0.0045744826124137754,\n          0.004560325318252977,\n          0.005043573110761696,\n          0.005058124427915424,\n          0.0045744826124137754\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"grey\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          -0.43750025063692877,\n          -0.18750025148252614,\n          -0.18750027099142436,\n          -0.4375002701068412,\n          -0.43750025063692877\n         ],\n         \"y\": [\n          12.000024187077601,\n          12.000009659246636,\n          12.800009759600563,\n          12.800024618563835,\n          12.000024187077601\n         ],\n         \"z\": [\n          0.005058124427915424,\n          0.005043573110761696,\n          0.0055304507811946265,\n          0.005545333750792834,\n          0.005058124427915424\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"grey\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          -0.4375002701068412,\n          -0.18750027099142436,\n          -0.18750029030227897,\n          -0.43750028938977437,\n          -0.4375002701068412\n         ],\n         \"y\": [\n          12.800024618563835,\n          12.800009759600563,\n          13.600009784797404,\n          13.600024876458574,\n          12.800024618563835\n         ],\n         \"z\": [\n          0.005545333750792834,\n          0.0055304507811946265,\n          0.0060194392546856455,\n          0.006034555275549564,\n          0.005545333750792834\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"grey\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          -0.43750028938977437,\n          -0.18750029030227897,\n          -0.18750030949419816,\n          -0.4375003085605567,\n          -0.43750028938977437\n         ],\n         \"y\": [\n          13.600024876458574,\n          13.600009784797404,\n          14.400009765078664,\n          14.400025030543393,\n          13.600024876458574\n         ],\n         \"z\": [\n          0.006034555275549564,\n          0.0060194392546856455,\n          0.006509601017991055,\n          0.006524891089689876,\n          0.006034555275549564\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"grey\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          -0.4375003085605567,\n          -0.18750030949419816,\n          -0.18750032849661877,\n          -0.43750032755255314,\n          -0.4375003085605567\n         ],\n         \"y\": [\n          14.400025030543393,\n          14.400009765078664,\n          15.20000967846006,\n          15.200025028918631,\n          14.400025030543393\n         ],\n         \"z\": [\n          0.006524891089689876,\n          0.006509601017991055,\n          0.0070001736447586945,\n          0.00701554882735514,\n          0.006524891089689876\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"grey\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          -0.43750032755255314,\n          -0.18750032849661877,\n          -0.18750034739363916,\n          -0.4375003464451198,\n          -0.43750032755255314\n         ],\n         \"y\": [\n          15.200025028918631,\n          15.20000967846006,\n          16.000009555123633,\n          16.00002494175388,\n          15.200025028918631\n         ],\n         \"z\": [\n          0.00701554882735514,\n          0.0070001736447586945,\n          0.007490874433673721,\n          0.007506285835269044,\n          0.00701554882735514\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"grey\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          -0.18750000000000006,\n          0.06250000000000001,\n          0.062499994253617984,\n          -0.187500005737461,\n          -0.18750000000000006\n         ],\n         \"y\": [\n          -3.054068805814802e-18,\n          1.0180229352716006e-18,\n          0.7999996257053927,\n          0.8000011183147504,\n          -3.054068805814802e-18\n         ],\n         \"z\": [\n          -1.6236676054415498e-17,\n          5.412225351471832e-18,\n          3.734924913080698e-05,\n          3.884345648756862e-05,\n          -1.6236676054415498e-17\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"grey\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          -0.187500005737461,\n          0.062499994253617984,\n          0.062499984780555455,\n          -0.18750001518488343,\n          -0.187500005737461\n         ],\n         \"y\": [\n          0.8000011183147504,\n          0.7999996257053927,\n          1.5999992569489119,\n          1.6000021946752327,\n          0.8000011183147504\n         ],\n         \"z\": [\n          3.884345648756862e-05,\n          3.734924913080698e-05,\n          0.00014451761180620353,\n          0.0001474587562785521,\n          3.884345648756862e-05\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"grey\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          -0.18750001518488343,\n          0.062499984780555455,\n          0.06249997244174921,\n          -0.18750002748442468,\n          -0.18750001518488343\n         ],\n         \"y\": [\n          1.6000021946752327,\n          1.5999992569489119,\n          2.3999988998674064,\n          2.4000031932873562,\n          1.6000021946752327\n         ],\n         \"z\": [\n          0.0001474587562785521,\n          0.00014451761180620353,\n          0.0003139078728839484,\n          0.00031820666645609595,\n          0.0001474587562785521\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"grey\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          -0.18750002748442468,\n          0.06249997244174921,\n          0.0624999578016652,\n          -0.18750004207304757,\n          -0.18750002748442468\n         ],\n         \"y\": [\n          2.4000031932873562,\n          2.3999988998674064,\n          3.199998543257883,\n          3.2000041361397518,\n          2.4000031932873562\n         ],\n         \"z\": [\n          0.00031820666645609595,\n          0.0003139078728839484,\n          0.0005384113592226688,\n          0.0005440116524442518,\n          0.00031820666645609595\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"grey\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          -0.18750004207304757,\n          0.0624999578016652,\n          0.062499941499613264,\n          -0.18750005831539146,\n          -0.18750004207304757\n         ],\n         \"y\": [\n          3.2000041361397518,\n          3.199998543257883,\n          3.9999981958020085,\n          4.000004991724207,\n          3.2000041361397518\n         ],\n         \"z\": [\n          0.0005440116524442518,\n          0.0005384113592226688,\n          0.0008112010061774206,\n          0.0008180063787988016,\n          0.0005440116524442518\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"grey\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          -0.18750005831539146,\n          0.062499941499613264,\n          0.062499923874385396,\n          -0.18750007587297496,\n          -0.18750005831539146\n         ],\n         \"y\": [\n          4.000004991724207,\n          3.9999981958020085,\n          4.799997847247279,\n          4.800005788831466,\n          4.000004991724207\n         ],\n         \"z\": [\n          0.0008180063787988016,\n          0.0008112010061774206,\n          0.0011260167135549429,\n          0.0011339697660142335,\n          0.0008180063787988016\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"grey\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          -0.18750007587297496,\n          0.062499923874385396,\n          0.06249990538822854,\n          -0.1875000942880858,\n          -0.18750007587297496\n         ],\n         \"y\": [\n          4.800005788831466,\n          4.799997847247279,\n          5.5999975083043845,\n          5.600006497238266,\n          4.800005788831466\n         ],\n         \"z\": [\n          0.0011339697660142335,\n          0.0011260167135549429,\n          0.001476903031496004,\n          0.0014859053575590015,\n          0.0011339697660142335\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"grey\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          -0.1875000942880858,\n          0.06249990538822854,\n          0.0624998862163855,\n          -0.1875001133847934,\n          -0.1875000942880858\n         ],\n         \"y\": [\n          5.600006497238266,\n          5.5999975083043845,\n          6.39999716995945,\n          6.400007147597506,\n          5.600006497238266\n         ],\n         \"z\": [\n          0.0014859053575590015,\n          0.001476903031496004,\n          0.0018585030730555484,\n          0.0018684959356252715,\n          0.0014859053575590015\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"grey\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          -0.1875001133847934,\n          0.0624998862163855,\n          0.06249986668743177,\n          -0.1875001328395648,\n          -0.1875001133847934\n         ],\n         \"y\": [\n          6.400007147597506,\n          6.39999716995945,\n          7.199996844106742,\n          7.200007709974395,\n          6.400007147597506\n         ],\n         \"z\": [\n          0.0018684959356252715,\n          0.0018585030730555484,\n          0.0022657747099683184,\n          0.0022766574780168644,\n          0.0018684959356252715\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"grey\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          -0.1875001328395648,\n          0.06249986668743177,\n          0.06249984686199458,\n          -0.1875001525902163,\n          -0.1875001328395648\n         ],\n         \"y\": [\n          7.200007709974395,\n          7.199996844106742,\n          7.999996522381308,\n          8.000008215603518,\n          7.200007709974395\n         ],\n         \"z\": [\n          0.0022766574780168644,\n          0.0022657747099683184,\n          0.002694284259643564,\n          0.0027059959238166756,\n          0.0022766574780168644\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"grey\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          -0.1875001525902163,\n          0.06249984686199458,\n          0.062499826974427505,\n          -0.18750017240775796,\n          -0.1875001525902163\n         ],\n         \"y\": [\n          8.000008215603518,\n          7.999996522381308,\n          8.799996216961945,\n          8.800008634998948,\n          8.000008215603518\n         ],\n         \"z\": [\n          0.0027059959238166756,\n          0.002694284259643564,\n          0.003139912641972926,\n          0.00315235047156843,\n          0.0027059959238166756\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"grey\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          -0.18750017240775796,\n          0.062499826974427505,\n          0.062499807011158884,\n          -0.18750019230338255,\n          -0.18750017240775796\n         ],\n         \"y\": [\n          8.800008634998948,\n          8.799996216961945,\n          9.599995919535536,\n          9.600008999668942,\n          8.800008634998948\n         ],\n         \"z\": [\n          0.00315235047156843,\n          0.003139912641972926,\n          0.003599143198339933,\n          0.003612244321978627,\n          0.00315235047156843\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"grey\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          -0.18750019230338255,\n          0.062499807011158884,\n          0.06249978714507812,\n          -0.18750021210963969,\n          -0.18750019230338255\n         ],\n         \"y\": [\n          9.600008999668942,\n          9.599995919535536,\n          10.399995641919006,\n          10.400009280849583,\n          9.600008999668942\n         ],\n         \"z\": [\n          0.003612244321978627,\n          0.003599143198339933,\n          0.004068768277065312,\n          0.004082429194450335,\n          0.003612244321978627\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"grey\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          -0.18750021210963969,\n          0.06249978714507812,\n          0.062499767320293845,\n          -0.18750023187928208,\n          -0.18750021210963969\n         ],\n         \"y\": [\n          10.400009280849583,\n          10.399995641919006,\n          11.199995375525171,\n          11.200009509987185,\n          10.400009280849583\n         ],\n         \"z\": [\n          0.004082429194450335,\n          0.004068768277065312,\n          0.00454616802409218,\n          0.004560325318252977,\n          0.004082429194450335\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"grey\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          -0.18750023187928208,\n          0.062499767320293845,\n          0.062499747671876424,\n          -0.18750025148252614,\n          -0.18750023187928208\n         ],\n         \"y\": [\n          11.200009509987185,\n          11.199995375525171,\n          11.99999513141567,\n          12.000009659246636,\n          11.200009509987185\n         ],\n         \"z\": [\n          0.004560325318252977,\n          0.00454616802409218,\n          0.005029021793607967,\n          0.005043573110761696,\n          0.004560325318252977\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"grey\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          -0.18750025148252614,\n          0.062499747671876424,\n          0.06249972812399248,\n          -0.18750027099142436,\n          -0.18750025148252614\n         ],\n         \"y\": [\n          12.000009659246636,\n          11.99999513141567,\n          12.79999490063729,\n          12.800009759600563,\n          12.000009659246636\n         ],\n         \"z\": [\n          0.005043573110761696,\n          0.005029021793607967,\n          0.00551556781159642,\n          0.0055304507811946265,\n          0.005043573110761696\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"grey\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          -0.18750027099142436,\n          0.06249972812399248,\n          0.06249970878521643,\n          -0.18750029030227897,\n          -0.18750027099142436\n         ],\n         \"y\": [\n          12.800009759600563,\n          12.79999490063729,\n          13.599994693136232,\n          13.600009784797404,\n          12.800009759600563\n         ],\n         \"z\": [\n          0.0055304507811946265,\n          0.00551556781159642,\n          0.0060043232338217265,\n          0.0060194392546856455,\n          0.0055304507811946265\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"grey\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          -0.18750029030227897,\n          0.06249970878521643,\n          0.06249968957216046,\n          -0.18750030949419816,\n          -0.18750029030227897\n         ],\n         \"y\": [\n          13.600009784797404,\n          13.599994693136232,\n          14.399994499613936,\n          14.400009765078664,\n          13.600009784797404\n         ],\n         \"z\": [\n          0.0060194392546856455,\n          0.0060043232338217265,\n          0.006494310946292235,\n          0.006509601017991055,\n          0.0060194392546856455\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"grey\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          -0.18750030949419816,\n          0.06249968957216046,\n          0.06249967055931569,\n          -0.18750032849661877,\n          -0.18750030949419816\n         ],\n         \"y\": [\n          14.400009765078664,\n          14.399994499613936,\n          15.199994328001486,\n          15.20000967846006,\n          14.400009765078664\n         ],\n         \"z\": [\n          0.006509601017991055,\n          0.006494310946292235,\n          0.00698479846216225,\n          0.0070001736447586945,\n          0.006509601017991055\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"grey\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          -0.18750032849661877,\n          0.06249967055931569,\n          0.062499651657841424,\n          -0.18750034739363916,\n          -0.18750032849661877\n         ],\n         \"y\": [\n          15.20000967846006,\n          15.199994328001486,\n          15.999994168493387,\n          16.000009555123633,\n          15.20000967846006\n         ],\n         \"z\": [\n          0.0070001736447586945,\n          0.00698479846216225,\n          0.007475463032078398,\n          0.007490874433673721,\n          0.0070001736447586945\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"grey\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          0.06250000000000001,\n          0.31250000000000006,\n          0.31249999424469693,\n          0.062499994253617984,\n          0.06250000000000001\n         ],\n         \"y\": [\n          1.0180229352716006e-18,\n          5.090114676358003e-18,\n          0.7999981330960351,\n          0.7999996257053927,\n          1.0180229352716006e-18\n         ],\n         \"z\": [\n          5.412225351471832e-18,\n          2.706112675735916e-17,\n          3.585504177404534e-05,\n          3.734924913080698e-05,\n          5.412225351471832e-18\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"grey\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          0.062499994253617984,\n          0.31249999424469693,\n          0.31249998474599433,\n          0.062499984780555455,\n          0.062499994253617984\n         ],\n         \"y\": [\n          0.7999996257053927,\n          0.7999981330960351,\n          1.599996319222591,\n          1.5999992569489119,\n          0.7999996257053927\n         ],\n         \"z\": [\n          3.734924913080698e-05,\n          3.585504177404534e-05,\n          0.00014157646733385497,\n          0.00014451761180620353,\n          3.734924913080698e-05\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"grey\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          0.062499984780555455,\n          0.31249998474599433,\n          0.3124999723679231,\n          0.06249997244174921,\n          0.062499984780555455\n         ],\n         \"y\": [\n          1.5999992569489119,\n          1.599996319222591,\n          2.3999946064474567,\n          2.3999988998674064,\n          1.5999992569489119\n         ],\n         \"z\": [\n          0.00014451761180620353,\n          0.00014157646733385497,\n          0.0003096090793118008,\n          0.0003139078728839484,\n          0.00014451761180620353\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"grey\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          0.06249997244174921,\n          0.3124999723679231,\n          0.31249995767637795,\n          0.0624999578016652,\n          0.06249997244174921\n         ],\n         \"y\": [\n          2.3999988998674064,\n          2.3999946064474567,\n          3.1999929503760143,\n          3.199998543257883,\n          2.3999988998674064\n         ],\n         \"z\": [\n          0.0003139078728839484,\n          0.0003096090793118008,\n          0.0005328110660010858,\n          0.0005384113592226688,\n          0.0003139078728839484\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"grey\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          0.0624999578016652,\n          0.31249995767637795,\n          0.31249994131461795,\n          0.062499941499613264,\n          0.0624999578016652\n         ],\n         \"y\": [\n          3.199998543257883,\n          3.1999929503760143,\n          3.9999913998798102,\n          3.9999981958020085,\n          3.199998543257883\n         ],\n         \"z\": [\n          0.0005384113592226688,\n          0.0005328110660010858,\n          0.0008043956335560395,\n          0.0008112010061774206,\n          0.0005384113592226688\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"grey\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          0.062499941499613264,\n          0.31249994131461795,\n          0.3124999236217457,\n          0.062499923874385396,\n          0.062499941499613264\n         ],\n         \"y\": [\n          3.9999981958020085,\n          3.9999913998798102,\n          4.799989905663092,\n          4.799997847247279,\n          3.9999981958020085\n         ],\n         \"z\": [\n          0.0008112010061774206,\n          0.0008043956335560395,\n          0.0011180636610956523,\n          0.0011260167135549429,\n          0.0008112010061774206\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"grey\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          0.062499923874385396,\n          0.3124999236217457,\n          0.31249990506454295,\n          0.06249990538822854,\n          0.062499923874385396\n         ],\n         \"y\": [\n          4.799997847247279,\n          4.799989905663092,\n          5.599988519370503,\n          5.5999975083043845,\n          4.799997847247279\n         ],\n         \"z\": [\n          0.0011260167135549429,\n          0.0011180636610956523,\n          0.0014679007054330066,\n          0.001476903031496004,\n          0.0011260167135549429\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"grey\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          0.06249990538822854,\n          0.31249990506454295,\n          0.3124998858175643,\n          0.0624998862163855,\n          0.06249990538822854\n         ],\n         \"y\": [\n          5.5999975083043845,\n          5.599988519370503,\n          6.399987192321394,\n          6.39999716995945,\n          5.5999975083043845\n         ],\n         \"z\": [\n          0.001476903031496004,\n          0.0014679007054330066,\n          0.0018485102104858254,\n          0.0018585030730555484,\n          0.001476903031496004\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"grey\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          0.0624998862163855,\n          0.3124998858175643,\n          0.3124998662144284,\n          0.06249986668743177,\n          0.0624998862163855\n         ],\n         \"y\": [\n          6.39999716995945,\n          6.399987192321394,\n          7.19998597823909,\n          7.199996844106742,\n          6.39999716995945\n         ],\n         \"z\": [\n          0.0018585030730555484,\n          0.0018485102104858254,\n          0.0022548919419197724,\n          0.0022657747099683184,\n          0.0018585030730555484\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"grey\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          0.06249986668743177,\n          0.3124998662144284,\n          0.31249984631420546,\n          0.06249984686199458,\n          0.06249986668743177\n         ],\n         \"y\": [\n          7.199996844106742,\n          7.19998597823909,\n          7.999984829159098,\n          7.999996522381308,\n          7.199996844106742\n         ],\n         \"z\": [\n          0.0022657747099683184,\n          0.0022548919419197724,\n          0.0026825725954704523,\n          0.002694284259643564,\n          0.0022657747099683184\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"grey\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          0.06249984686199458,\n          0.31249984631420546,\n          0.312499826356613,\n          0.062499826974427505,\n          0.06249984686199458\n         ],\n         \"y\": [\n          7.999996522381308,\n          7.999984829159098,\n          8.799983798924943,\n          8.799996216961945,\n          7.999996522381308\n         ],\n         \"z\": [\n          0.002694284259643564,\n          0.0026825725954704523,\n          0.003127474812377422,\n          0.003139912641972926,\n          0.002694284259643564\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"grey\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          0.062499826974427505,\n          0.312499826356613,\n          0.3124998063257003,\n          0.062499807011158884,\n          0.062499826974427505\n         ],\n         \"y\": [\n          8.799996216961945,\n          8.799983798924943,\n          9.599982839402129,\n          9.599995919535536,\n          8.799996216961945\n         ],\n         \"z\": [\n          0.003139912641972926,\n          0.003127474812377422,\n          0.003586042074701239,\n          0.003599143198339933,\n          0.003139912641972926\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"grey\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          0.062499807011158884,\n          0.3124998063257003,\n          0.3124997863997959,\n          0.06249978714507812,\n          0.062499807011158884\n         ],\n         \"y\": [\n          9.599995919535536,\n          9.599982839402129,\n          10.399982002988429,\n          10.399995641919006,\n          9.599995919535536\n         ],\n         \"z\": [\n          0.003599143198339933,\n          0.003586042074701239,\n          0.0040551073596802895,\n          0.004068768277065312,\n          0.003599143198339933\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"grey\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          0.06249978714507812,\n          0.3124997863997959,\n          0.31249976651986977,\n          0.062499767320293845,\n          0.06249978714507812\n         ],\n         \"y\": [\n          10.399995641919006,\n          10.399982002988429,\n          11.199981241063158,\n          11.199995375525171,\n          10.399995641919006\n         ],\n         \"z\": [\n          0.004068768277065312,\n          0.0040551073596802895,\n          0.004532010729931383,\n          0.00454616802409218,\n          0.004068768277065312\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"grey\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          0.062499767320293845,\n          0.31249976651986977,\n          0.312499746826279,\n          0.062499747671876424,\n          0.062499767320293845\n         ],\n         \"y\": [\n          11.199995375525171,\n          11.199981241063158,\n          11.999980603584703,\n          11.99999513141567,\n          11.199995375525171\n         ],\n         \"z\": [\n          0.00454616802409218,\n          0.004532010729931383,\n          0.005014470476454239,\n          0.005029021793607967,\n          0.00454616802409218\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"grey\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          0.062499747671876424,\n          0.312499746826279,\n          0.31249972723940933,\n          0.06249972812399248,\n          0.062499747671876424\n         ],\n         \"y\": [\n          11.99999513141567,\n          11.999980603584703,\n          12.799980041674019,\n          12.79999490063729,\n          11.99999513141567\n         ],\n         \"z\": [\n          0.005029021793607967,\n          0.005014470476454239,\n          0.005500684841998214,\n          0.00551556781159642,\n          0.005029021793607967\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"grey\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          0.06249972812399248,\n          0.31249972723940933,\n          0.3124997078727118,\n          0.06249970878521643,\n          0.06249972812399248\n         ],\n         \"y\": [\n          12.79999490063729,\n          12.799980041674019,\n          13.59997960147506,\n          13.599994693136232,\n          12.79999490063729\n         ],\n         \"z\": [\n          0.00551556781159642,\n          0.005500684841998214,\n          0.0059892072129578075,\n          0.0060043232338217265,\n          0.00551556781159642\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"grey\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          0.06249970878521643,\n          0.3124997078727118,\n          0.31249968863851907,\n          0.06249968957216046,\n          0.06249970878521643\n         ],\n         \"y\": [\n          13.599994693136232,\n          13.59997960147506,\n          14.399979234149207,\n          14.399994499613936,\n          13.599994693136232\n         ],\n         \"z\": [\n          0.0060043232338217265,\n          0.0059892072129578075,\n          0.006479020874593415,\n          0.006494310946292235,\n          0.0060043232338217265\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"grey\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          0.06249968957216046,\n          0.31249968863851907,\n          0.3124996696152501,\n          0.06249967055931569,\n          0.06249968957216046\n         ],\n         \"y\": [\n          14.399994499613936,\n          14.399979234149207,\n          15.199978977542912,\n          15.199994328001486,\n          14.399994499613936\n         ],\n         \"z\": [\n          0.006494310946292235,\n          0.006479020874593415,\n          0.006969423279565805,\n          0.00698479846216225,\n          0.006494310946292235\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"grey\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          0.06249967055931569,\n          0.3124996696152501,\n          0.312499650709322,\n          0.062499651657841424,\n          0.06249967055931569\n         ],\n         \"y\": [\n          15.199994328001486,\n          15.199978977542912,\n          15.999978781863144,\n          15.999994168493387,\n          15.199994328001486\n         ],\n         \"z\": [\n          0.00698479846216225,\n          0.006969423279565805,\n          0.007460051630483075,\n          0.007475463032078398,\n          0.00698479846216225\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"grey\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          0.31250000000000006,\n          0.5625000000000001,\n          0.5624999942357759,\n          0.31249999424469693,\n          0.31250000000000006\n         ],\n         \"y\": [\n          5.090114676358003e-18,\n          9.162206417444405e-18,\n          0.7999966404866774,\n          0.7999981330960351,\n          5.090114676358003e-18\n         ],\n         \"z\": [\n          2.706112675735916e-17,\n          4.871002816324649e-17,\n          3.4360834417283705e-05,\n          3.585504177404534e-05,\n          2.706112675735916e-17\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"grey\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          0.31249999424469693,\n          0.5624999942357759,\n          0.5624999847114331,\n          0.31249998474599433,\n          0.31249999424469693\n         ],\n         \"y\": [\n          0.7999981330960351,\n          0.7999966404866774,\n          1.5999933814962704,\n          1.599996319222591,\n          0.7999981330960351\n         ],\n         \"z\": [\n          3.585504177404534e-05,\n          3.4360834417283705e-05,\n          0.0001386353228615064,\n          0.00014157646733385497,\n          3.585504177404534e-05\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"grey\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          0.31249998474599433,\n          0.5624999847114331,\n          0.562499972294097,\n          0.3124999723679231,\n          0.31249998474599433\n         ],\n         \"y\": [\n          1.599996319222591,\n          1.5999933814962704,\n          2.399990313027507,\n          2.3999946064474567,\n          1.599996319222591\n         ],\n         \"z\": [\n          0.00014157646733385497,\n          0.0001386353228615064,\n          0.00030531028573965323,\n          0.0003096090793118008,\n          0.00014157646733385497\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"grey\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          0.3124999723679231,\n          0.562499972294097,\n          0.5624999575510907,\n          0.31249995767637795,\n          0.3124999723679231\n         ],\n         \"y\": [\n          2.3999946064474567,\n          2.399990313027507,\n          3.1999873574941455,\n          3.1999929503760143,\n          2.3999946064474567\n         ],\n         \"z\": [\n          0.0003096090793118008,\n          0.00030531028573965323,\n          0.0005272107727795027,\n          0.0005328110660010858,\n          0.0003096090793118008\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"grey\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          0.31249995767637795,\n          0.5624999575510907,\n          0.5624999411296226,\n          0.31249994131461795,\n          0.31249995767637795\n         ],\n         \"y\": [\n          3.1999929503760143,\n          3.1999873574941455,\n          3.999984603957612,\n          3.9999913998798102,\n          3.1999929503760143\n         ],\n         \"z\": [\n          0.0005328110660010858,\n          0.0005272107727795027,\n          0.0007975902609346586,\n          0.0008043956335560395,\n          0.0005328110660010858\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"grey\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          0.31249994131461795,\n          0.5624999411296226,\n          0.5624999233691061,\n          0.3124999236217457,\n          0.31249994131461795\n         ],\n         \"y\": [\n          3.9999913998798102,\n          3.999984603957612,\n          4.799981964078905,\n          4.799989905663092,\n          3.9999913998798102\n         ],\n         \"z\": [\n          0.0008043956335560395,\n          0.0007975902609346586,\n          0.0011101106086363619,\n          0.0011180636610956523,\n          0.0008043956335560395\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"grey\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          0.3124999236217457,\n          0.5624999233691061,\n          0.5624999047408573,\n          0.31249990506454295,\n          0.3124999236217457\n         ],\n         \"y\": [\n          4.799989905663092,\n          4.799981964078905,\n          5.599979530436621,\n          5.599988519370503,\n          4.799989905663092\n         ],\n         \"z\": [\n          0.0011180636610956523,\n          0.0011101106086363619,\n          0.0014588983793700089,\n          0.0014679007054330066,\n          0.0011180636610956523\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"grey\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          0.31249990506454295,\n          0.5624999047408573,\n          0.5624998854187432,\n          0.3124998858175643,\n          0.31249990506454295\n         ],\n         \"y\": [\n          5.599988519370503,\n          5.599979530436621,\n          6.399977214683338,\n          6.399987192321394,\n          5.599988519370503\n         ],\n         \"z\": [\n          0.0014679007054330066,\n          0.0014588983793700089,\n          0.0018385173479161026,\n          0.0018485102104858254,\n          0.0014679007054330066\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"grey\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          0.3124998858175643,\n          0.5624998854187432,\n          0.562499865741425,\n          0.3124998662144284,\n          0.3124998858175643\n         ],\n         \"y\": [\n          6.399987192321394,\n          6.399977214683338,\n          7.199975112371438,\n          7.19998597823909,\n          6.399987192321394\n         ],\n         \"z\": [\n          0.0018485102104858254,\n          0.0018385173479161026,\n          0.0022440091738712264,\n          0.0022548919419197724,\n          0.0018485102104858254\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"grey\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          0.3124998662144284,\n          0.562499865741425,\n          0.5624998457664163,\n          0.31249984631420546,\n          0.3124998662144284\n         ],\n         \"y\": [\n          7.19998597823909,\n          7.199975112371438,\n          7.999973135936888,\n          7.999984829159098,\n          7.19998597823909\n         ],\n         \"z\": [\n          0.0022548919419197724,\n          0.0022440091738712264,\n          0.002670860931297341,\n          0.0026825725954704523,\n          0.0022548919419197724\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"grey\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          0.31249984631420546,\n          0.5624998457664163,\n          0.5624998257387984,\n          0.312499826356613,\n          0.31249984631420546\n         ],\n         \"y\": [\n          7.999984829159098,\n          7.999973135936888,\n          8.799971380887941,\n          8.799983798924943,\n          7.999984829159098\n         ],\n         \"z\": [\n          0.0026825725954704523,\n          0.002670860931297341,\n          0.003115036982781918,\n          0.003127474812377422,\n          0.0026825725954704523\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"grey\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          0.312499826356613,\n          0.5624998257387984,\n          0.5624998056402417,\n          0.3124998063257003,\n          0.312499826356613\n         ],\n         \"y\": [\n          8.799983798924943,\n          8.799971380887941,\n          9.599969759268722,\n          9.599982839402129,\n          8.799983798924943\n         ],\n         \"z\": [\n          0.003127474812377422,\n          0.003115036982781918,\n          0.003572940951062545,\n          0.003586042074701239,\n          0.003127474812377422\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"grey\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          0.3124998063257003,\n          0.5624998056402417,\n          0.5624997856545136,\n          0.3124997863997959,\n          0.3124998063257003\n         ],\n         \"y\": [\n          9.599982839402129,\n          9.599969759268722,\n          10.399968364057854,\n          10.399982002988429,\n          9.599982839402129\n         ],\n         \"z\": [\n          0.003586042074701239,\n          0.003572940951062545,\n          0.004041446442295267,\n          0.0040551073596802895,\n          0.003586042074701239\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"grey\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          0.3124997863997959,\n          0.5624997856545136,\n          0.5624997657194457,\n          0.31249976651986977,\n          0.3124997863997959\n         ],\n         \"y\": [\n          10.399982002988429,\n          10.399968364057854,\n          11.199967106601147,\n          11.199981241063158,\n          10.399982002988429\n         ],\n         \"z\": [\n          0.0040551073596802895,\n          0.004041446442295267,\n          0.004517853435770585,\n          0.004532010729931383,\n          0.0040551073596802895\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"grey\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          0.31249976651986977,\n          0.5624997657194457,\n          0.5624997459806815,\n          0.312499746826279,\n          0.31249976651986977\n         ],\n         \"y\": [\n          11.199981241063158,\n          11.199967106601147,\n          11.999966075753738,\n          11.999980603584703,\n          11.199981241063158\n         ],\n         \"z\": [\n          0.004532010729931383,\n          0.004517853435770585,\n          0.0049999191593005105,\n          0.005014470476454239,\n          0.004532010729931383\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"grey\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          0.312499746826279,\n          0.5624997459806815,\n          0.5624997263548261,\n          0.31249972723940933,\n          0.312499746826279\n         ],\n         \"y\": [\n          11.999980603584703,\n          11.999966075753738,\n          12.799965182710746,\n          12.799980041674019,\n          11.999980603584703\n         ],\n         \"z\": [\n          0.005014470476454239,\n          0.0049999191593005105,\n          0.005485801872400007,\n          0.005500684841998214,\n          0.005014470476454239\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"grey\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          0.31249972723940933,\n          0.5624997263548261,\n          0.5624997069602071,\n          0.3124997078727118,\n          0.31249972723940933\n         ],\n         \"y\": [\n          12.799980041674019,\n          12.799965182710746,\n          13.599964509813889,\n          13.59997960147506,\n          12.799980041674019\n         ],\n         \"z\": [\n          0.005500684841998214,\n          0.005485801872400007,\n          0.005974091192093889,\n          0.0059892072129578075,\n          0.005500684841998214\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"grey\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          0.3124997078727118,\n          0.5624997069602071,\n          0.5624996877048777,\n          0.31249968863851907,\n          0.3124997078727118\n         ],\n         \"y\": [\n          13.59997960147506,\n          13.599964509813889,\n          14.399963968684478,\n          14.399979234149207,\n          13.59997960147506\n         ],\n         \"z\": [\n          0.0059892072129578075,\n          0.005974091192093889,\n          0.0064637308028945946,\n          0.006479020874593415,\n          0.0059892072129578075\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"grey\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          0.31249968863851907,\n          0.5624996877048777,\n          0.5624996686711845,\n          0.3124996696152501,\n          0.31249968863851907\n         ],\n         \"y\": [\n          14.399979234149207,\n          14.399963968684478,\n          15.19996362708434,\n          15.199978977542912,\n          14.399979234149207\n         ],\n         \"z\": [\n          0.006479020874593415,\n          0.0064637308028945946,\n          0.00695404809696936,\n          0.006969423279565805,\n          0.006479020874593415\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"grey\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          0.3124996696152501,\n          0.5624996686711845,\n          0.5624996497608026,\n          0.312499650709322,\n          0.3124996696152501\n         ],\n         \"y\": [\n          15.199978977542912,\n          15.19996362708434,\n          15.999963395232898,\n          15.999978781863144,\n          15.199978977542912\n         ],\n         \"z\": [\n          0.006969423279565805,\n          0.00695404809696936,\n          0.007444640228887752,\n          0.007460051630483075,\n          0.006969423279565805\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"black\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          -0.4375000000000001,\n          -0.4375000057285399,\n          -0.43750001515032233,\n          -0.4375000274105985,\n          -0.4375000419477604,\n          -0.4375000581303961,\n          -0.4375000756203353,\n          -0.43750009396440015,\n          -0.4375001129859722,\n          -0.4375001323665614,\n          -0.43750015204242715,\n          -0.43750017178994344,\n          -0.4375001916179239,\n          -0.4375002113643574,\n          -0.43750023107885805,\n          -0.43750025063692877,\n          -0.4375002701068412,\n          -0.43750028938977437,\n          -0.4375003085605567,\n          -0.43750032755255314,\n          -0.4375003464451198\n         ],\n         \"y\": [\n          -7.126160546901204e-18,\n          0.8000026109241081,\n          1.6000051324015534,\n          2.400007486707306,\n          3.2000097290216205,\n          4.000011787646406,\n          4.800013730415652,\n          5.600015486172148,\n          6.400017125235562,\n          7.200018575842047,\n          8.000019908825728,\n          8.80002105303595,\n          9.600022079802349,\n          10.400022919780158,\n          11.200023644449196,\n          12.000024187077601,\n          12.800024618563835,\n          13.600024876458574,\n          14.400025030543393,\n          15.200025028918631,\n          16.00002494175388\n         ],\n         \"z\": [\n          -3.7885577460302824e-17,\n          4.033766384433025e-05,\n          0.00015039990075090066,\n          0.00032250546002824353,\n          0.0005496119456658349,\n          0.0008248117514201825,\n          0.0011419228184735238,\n          0.0014949076836219992,\n          0.0018784887981949942,\n          0.0022875402460654105,\n          0.002717707587989787,\n          0.003164788301163934,\n          0.003625345445617321,\n          0.004096090111835357,\n          0.0045744826124137754,\n          0.005058124427915424,\n          0.005545333750792834,\n          0.006034555275549564,\n          0.006524891089689876,\n          0.00701554882735514,\n          0.007506285835269044\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"black\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          -0.18750000000000006,\n          -0.187500005737461,\n          -0.18750001518488343,\n          -0.18750002748442468,\n          -0.18750004207304757,\n          -0.18750005831539146,\n          -0.18750007587297496,\n          -0.1875000942880858,\n          -0.1875001133847934,\n          -0.1875001328395648,\n          -0.1875001525902163,\n          -0.18750017240775796,\n          -0.18750019230338255,\n          -0.18750021210963969,\n          -0.18750023187928208,\n          -0.18750025148252614,\n          -0.18750027099142436,\n          -0.18750029030227897,\n          -0.18750030949419816,\n          -0.18750032849661877,\n          -0.18750034739363916\n         ],\n         \"y\": [\n          -3.054068805814802e-18,\n          0.8000011183147504,\n          1.6000021946752327,\n          2.4000031932873562,\n          3.2000041361397518,\n          4.000004991724207,\n          4.800005788831466,\n          5.600006497238266,\n          6.400007147597506,\n          7.200007709974395,\n          8.000008215603518,\n          8.800008634998948,\n          9.600008999668942,\n          10.400009280849583,\n          11.200009509987185,\n          12.000009659246636,\n          12.800009759600563,\n          13.600009784797404,\n          14.400009765078664,\n          15.20000967846006,\n          16.000009555123633\n         ],\n         \"z\": [\n          -1.6236676054415498e-17,\n          3.884345648756862e-05,\n          0.0001474587562785521,\n          0.00031820666645609595,\n          0.0005440116524442518,\n          0.0008180063787988016,\n          0.0011339697660142335,\n          0.0014859053575590015,\n          0.0018684959356252715,\n          0.0022766574780168644,\n          0.0027059959238166756,\n          0.00315235047156843,\n          0.003612244321978627,\n          0.004082429194450335,\n          0.004560325318252977,\n          0.005043573110761696,\n          0.0055304507811946265,\n          0.0060194392546856455,\n          0.006509601017991055,\n          0.0070001736447586945,\n          0.007490874433673721\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"black\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          0.06250000000000001,\n          0.062499994253617984,\n          0.062499984780555455,\n          0.06249997244174921,\n          0.0624999578016652,\n          0.062499941499613264,\n          0.062499923874385396,\n          0.06249990538822854,\n          0.0624998862163855,\n          0.06249986668743177,\n          0.06249984686199458,\n          0.062499826974427505,\n          0.062499807011158884,\n          0.06249978714507812,\n          0.062499767320293845,\n          0.062499747671876424,\n          0.06249972812399248,\n          0.06249970878521643,\n          0.06249968957216046,\n          0.06249967055931569,\n          0.062499651657841424\n         ],\n         \"y\": [\n          1.0180229352716006e-18,\n          0.7999996257053927,\n          1.5999992569489119,\n          2.3999988998674064,\n          3.199998543257883,\n          3.9999981958020085,\n          4.799997847247279,\n          5.5999975083043845,\n          6.39999716995945,\n          7.199996844106742,\n          7.999996522381308,\n          8.799996216961945,\n          9.599995919535536,\n          10.399995641919006,\n          11.199995375525171,\n          11.99999513141567,\n          12.79999490063729,\n          13.599994693136232,\n          14.399994499613936,\n          15.199994328001486,\n          15.999994168493387\n         ],\n         \"z\": [\n          5.412225351471832e-18,\n          3.734924913080698e-05,\n          0.00014451761180620353,\n          0.0003139078728839484,\n          0.0005384113592226688,\n          0.0008112010061774206,\n          0.0011260167135549429,\n          0.001476903031496004,\n          0.0018585030730555484,\n          0.0022657747099683184,\n          0.002694284259643564,\n          0.003139912641972926,\n          0.003599143198339933,\n          0.004068768277065312,\n          0.00454616802409218,\n          0.005029021793607967,\n          0.00551556781159642,\n          0.0060043232338217265,\n          0.006494310946292235,\n          0.00698479846216225,\n          0.007475463032078398\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"black\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          0.31250000000000006,\n          0.31249999424469693,\n          0.31249998474599433,\n          0.3124999723679231,\n          0.31249995767637795,\n          0.31249994131461795,\n          0.3124999236217457,\n          0.31249990506454295,\n          0.3124998858175643,\n          0.3124998662144284,\n          0.31249984631420546,\n          0.312499826356613,\n          0.3124998063257003,\n          0.3124997863997959,\n          0.31249976651986977,\n          0.312499746826279,\n          0.31249972723940933,\n          0.3124997078727118,\n          0.31249968863851907,\n          0.3124996696152501,\n          0.312499650709322\n         ],\n         \"y\": [\n          5.090114676358003e-18,\n          0.7999981330960351,\n          1.599996319222591,\n          2.3999946064474567,\n          3.1999929503760143,\n          3.9999913998798102,\n          4.799989905663092,\n          5.599988519370503,\n          6.399987192321394,\n          7.19998597823909,\n          7.999984829159098,\n          8.799983798924943,\n          9.599982839402129,\n          10.399982002988429,\n          11.199981241063158,\n          11.999980603584703,\n          12.799980041674019,\n          13.59997960147506,\n          14.399979234149207,\n          15.199978977542912,\n          15.999978781863144\n         ],\n         \"z\": [\n          2.706112675735916e-17,\n          3.585504177404534e-05,\n          0.00014157646733385497,\n          0.0003096090793118008,\n          0.0005328110660010858,\n          0.0008043956335560395,\n          0.0011180636610956523,\n          0.0014679007054330066,\n          0.0018485102104858254,\n          0.0022548919419197724,\n          0.0026825725954704523,\n          0.003127474812377422,\n          0.003586042074701239,\n          0.0040551073596802895,\n          0.004532010729931383,\n          0.005014470476454239,\n          0.005500684841998214,\n          0.0059892072129578075,\n          0.006479020874593415,\n          0.006969423279565805,\n          0.007460051630483075\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"black\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          0.5625000000000001,\n          0.5624999942357759,\n          0.5624999847114331,\n          0.562499972294097,\n          0.5624999575510907,\n          0.5624999411296226,\n          0.5624999233691061,\n          0.5624999047408573,\n          0.5624998854187432,\n          0.562499865741425,\n          0.5624998457664163,\n          0.5624998257387984,\n          0.5624998056402417,\n          0.5624997856545136,\n          0.5624997657194457,\n          0.5624997459806815,\n          0.5624997263548261,\n          0.5624997069602071,\n          0.5624996877048777,\n          0.5624996686711845,\n          0.5624996497608026\n         ],\n         \"y\": [\n          9.162206417444405e-18,\n          0.7999966404866774,\n          1.5999933814962704,\n          2.399990313027507,\n          3.1999873574941455,\n          3.999984603957612,\n          4.799981964078905,\n          5.599979530436621,\n          6.399977214683338,\n          7.199975112371438,\n          7.999973135936888,\n          8.799971380887941,\n          9.599969759268722,\n          10.399968364057854,\n          11.199967106601147,\n          11.999966075753738,\n          12.799965182710746,\n          13.599964509813889,\n          14.399963968684478,\n          15.19996362708434,\n          15.999963395232898\n         ],\n         \"z\": [\n          4.871002816324649e-17,\n          3.4360834417283705e-05,\n          0.0001386353228615064,\n          0.00030531028573965323,\n          0.0005272107727795027,\n          0.0007975902609346586,\n          0.0011101106086363619,\n          0.0014588983793700089,\n          0.0018385173479161026,\n          0.0022440091738712264,\n          0.002670860931297341,\n          0.003115036982781918,\n          0.003572940951062545,\n          0.004041446442295267,\n          0.004517853435770585,\n          0.0049999191593005105,\n          0.005485801872400007,\n          0.005974091192093889,\n          0.0064637308028945946,\n          0.00695404809696936,\n          0.007444640228887752\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"black\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          -0.4375000000000001,\n          -0.18750000000000006,\n          0.06250000000000001,\n          0.31250000000000006,\n          0.5625000000000001\n         ],\n         \"y\": [\n          -7.126160546901204e-18,\n          -3.054068805814802e-18,\n          1.0180229352716006e-18,\n          5.090114676358003e-18,\n          9.162206417444405e-18\n         ],\n         \"z\": [\n          -3.7885577460302824e-17,\n          -1.6236676054415498e-17,\n          5.412225351471832e-18,\n          2.706112675735916e-17,\n          4.871002816324649e-17\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"black\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          -0.4375000057285399,\n          -0.187500005737461,\n          0.062499994253617984,\n          0.31249999424469693,\n          0.5624999942357759\n         ],\n         \"y\": [\n          0.8000026109241081,\n          0.8000011183147504,\n          0.7999996257053927,\n          0.7999981330960351,\n          0.7999966404866774\n         ],\n         \"z\": [\n          4.033766384433025e-05,\n          3.884345648756862e-05,\n          3.734924913080698e-05,\n          3.585504177404534e-05,\n          3.4360834417283705e-05\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"black\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          -0.43750001515032233,\n          -0.18750001518488343,\n          0.062499984780555455,\n          0.31249998474599433,\n          0.5624999847114331\n         ],\n         \"y\": [\n          1.6000051324015534,\n          1.6000021946752327,\n          1.5999992569489119,\n          1.599996319222591,\n          1.5999933814962704\n         ],\n         \"z\": [\n          0.00015039990075090066,\n          0.0001474587562785521,\n          0.00014451761180620353,\n          0.00014157646733385497,\n          0.0001386353228615064\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"black\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          -0.4375000274105985,\n          -0.18750002748442468,\n          0.06249997244174921,\n          0.3124999723679231,\n          0.562499972294097\n         ],\n         \"y\": [\n          2.400007486707306,\n          2.4000031932873562,\n          2.3999988998674064,\n          2.3999946064474567,\n          2.399990313027507\n         ],\n         \"z\": [\n          0.00032250546002824353,\n          0.00031820666645609595,\n          0.0003139078728839484,\n          0.0003096090793118008,\n          0.00030531028573965323\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"black\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          -0.4375000419477604,\n          -0.18750004207304757,\n          0.0624999578016652,\n          0.31249995767637795,\n          0.5624999575510907\n         ],\n         \"y\": [\n          3.2000097290216205,\n          3.2000041361397518,\n          3.199998543257883,\n          3.1999929503760143,\n          3.1999873574941455\n         ],\n         \"z\": [\n          0.0005496119456658349,\n          0.0005440116524442518,\n          0.0005384113592226688,\n          0.0005328110660010858,\n          0.0005272107727795027\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"black\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          -0.4375000581303961,\n          -0.18750005831539146,\n          0.062499941499613264,\n          0.31249994131461795,\n          0.5624999411296226\n         ],\n         \"y\": [\n          4.000011787646406,\n          4.000004991724207,\n          3.9999981958020085,\n          3.9999913998798102,\n          3.999984603957612\n         ],\n         \"z\": [\n          0.0008248117514201825,\n          0.0008180063787988016,\n          0.0008112010061774206,\n          0.0008043956335560395,\n          0.0007975902609346586\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"black\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          -0.4375000756203353,\n          -0.18750007587297496,\n          0.062499923874385396,\n          0.3124999236217457,\n          0.5624999233691061\n         ],\n         \"y\": [\n          4.800013730415652,\n          4.800005788831466,\n          4.799997847247279,\n          4.799989905663092,\n          4.799981964078905\n         ],\n         \"z\": [\n          0.0011419228184735238,\n          0.0011339697660142335,\n          0.0011260167135549429,\n          0.0011180636610956523,\n          0.0011101106086363619\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"black\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          -0.43750009396440015,\n          -0.1875000942880858,\n          0.06249990538822854,\n          0.31249990506454295,\n          0.5624999047408573\n         ],\n         \"y\": [\n          5.600015486172148,\n          5.600006497238266,\n          5.5999975083043845,\n          5.599988519370503,\n          5.599979530436621\n         ],\n         \"z\": [\n          0.0014949076836219992,\n          0.0014859053575590015,\n          0.001476903031496004,\n          0.0014679007054330066,\n          0.0014588983793700089\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"black\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          -0.4375001129859722,\n          -0.1875001133847934,\n          0.0624998862163855,\n          0.3124998858175643,\n          0.5624998854187432\n         ],\n         \"y\": [\n          6.400017125235562,\n          6.400007147597506,\n          6.39999716995945,\n          6.399987192321394,\n          6.399977214683338\n         ],\n         \"z\": [\n          0.0018784887981949942,\n          0.0018684959356252715,\n          0.0018585030730555484,\n          0.0018485102104858254,\n          0.0018385173479161026\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"black\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          -0.4375001323665614,\n          -0.1875001328395648,\n          0.06249986668743177,\n          0.3124998662144284,\n          0.562499865741425\n         ],\n         \"y\": [\n          7.200018575842047,\n          7.200007709974395,\n          7.199996844106742,\n          7.19998597823909,\n          7.199975112371438\n         ],\n         \"z\": [\n          0.0022875402460654105,\n          0.0022766574780168644,\n          0.0022657747099683184,\n          0.0022548919419197724,\n          0.0022440091738712264\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"black\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          -0.43750015204242715,\n          -0.1875001525902163,\n          0.06249984686199458,\n          0.31249984631420546,\n          0.5624998457664163\n         ],\n         \"y\": [\n          8.000019908825728,\n          8.000008215603518,\n          7.999996522381308,\n          7.999984829159098,\n          7.999973135936888\n         ],\n         \"z\": [\n          0.002717707587989787,\n          0.0027059959238166756,\n          0.002694284259643564,\n          0.0026825725954704523,\n          0.002670860931297341\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"black\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          -0.43750017178994344,\n          -0.18750017240775796,\n          0.062499826974427505,\n          0.312499826356613,\n          0.5624998257387984\n         ],\n         \"y\": [\n          8.80002105303595,\n          8.800008634998948,\n          8.799996216961945,\n          8.799983798924943,\n          8.799971380887941\n         ],\n         \"z\": [\n          0.003164788301163934,\n          0.00315235047156843,\n          0.003139912641972926,\n          0.003127474812377422,\n          0.003115036982781918\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"black\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          -0.4375001916179239,\n          -0.18750019230338255,\n          0.062499807011158884,\n          0.3124998063257003,\n          0.5624998056402417\n         ],\n         \"y\": [\n          9.600022079802349,\n          9.600008999668942,\n          9.599995919535536,\n          9.599982839402129,\n          9.599969759268722\n         ],\n         \"z\": [\n          0.003625345445617321,\n          0.003612244321978627,\n          0.003599143198339933,\n          0.003586042074701239,\n          0.003572940951062545\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"black\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          -0.4375002113643574,\n          -0.18750021210963969,\n          0.06249978714507812,\n          0.3124997863997959,\n          0.5624997856545136\n         ],\n         \"y\": [\n          10.400022919780158,\n          10.400009280849583,\n          10.399995641919006,\n          10.399982002988429,\n          10.399968364057854\n         ],\n         \"z\": [\n          0.004096090111835357,\n          0.004082429194450335,\n          0.004068768277065312,\n          0.0040551073596802895,\n          0.004041446442295267\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"black\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          -0.43750023107885805,\n          -0.18750023187928208,\n          0.062499767320293845,\n          0.31249976651986977,\n          0.5624997657194457\n         ],\n         \"y\": [\n          11.200023644449196,\n          11.200009509987185,\n          11.199995375525171,\n          11.199981241063158,\n          11.199967106601147\n         ],\n         \"z\": [\n          0.0045744826124137754,\n          0.004560325318252977,\n          0.00454616802409218,\n          0.004532010729931383,\n          0.004517853435770585\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"black\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          -0.43750025063692877,\n          -0.18750025148252614,\n          0.062499747671876424,\n          0.312499746826279,\n          0.5624997459806815\n         ],\n         \"y\": [\n          12.000024187077601,\n          12.000009659246636,\n          11.99999513141567,\n          11.999980603584703,\n          11.999966075753738\n         ],\n         \"z\": [\n          0.005058124427915424,\n          0.005043573110761696,\n          0.005029021793607967,\n          0.005014470476454239,\n          0.0049999191593005105\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"black\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          -0.4375002701068412,\n          -0.18750027099142436,\n          0.06249972812399248,\n          0.31249972723940933,\n          0.5624997263548261\n         ],\n         \"y\": [\n          12.800024618563835,\n          12.800009759600563,\n          12.79999490063729,\n          12.799980041674019,\n          12.799965182710746\n         ],\n         \"z\": [\n          0.005545333750792834,\n          0.0055304507811946265,\n          0.00551556781159642,\n          0.005500684841998214,\n          0.005485801872400007\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"black\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          -0.43750028938977437,\n          -0.18750029030227897,\n          0.06249970878521643,\n          0.3124997078727118,\n          0.5624997069602071\n         ],\n         \"y\": [\n          13.600024876458574,\n          13.600009784797404,\n          13.599994693136232,\n          13.59997960147506,\n          13.599964509813889\n         ],\n         \"z\": [\n          0.006034555275549564,\n          0.0060194392546856455,\n          0.0060043232338217265,\n          0.0059892072129578075,\n          0.005974091192093889\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"black\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          -0.4375003085605567,\n          -0.18750030949419816,\n          0.06249968957216046,\n          0.31249968863851907,\n          0.5624996877048777\n         ],\n         \"y\": [\n          14.400025030543393,\n          14.400009765078664,\n          14.399994499613936,\n          14.399979234149207,\n          14.399963968684478\n         ],\n         \"z\": [\n          0.006524891089689876,\n          0.006509601017991055,\n          0.006494310946292235,\n          0.006479020874593415,\n          0.0064637308028945946\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"black\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          -0.43750032755255314,\n          -0.18750032849661877,\n          0.06249967055931569,\n          0.3124996696152501,\n          0.5624996686711845\n         ],\n         \"y\": [\n          15.200025028918631,\n          15.20000967846006,\n          15.199994328001486,\n          15.199978977542912,\n          15.19996362708434\n         ],\n         \"z\": [\n          0.00701554882735514,\n          0.0070001736447586945,\n          0.00698479846216225,\n          0.006969423279565805,\n          0.00695404809696936\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"black\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          -0.4375003464451198,\n          -0.18750034739363916,\n          0.062499651657841424,\n          0.312499650709322,\n          0.5624996497608026\n         ],\n         \"y\": [\n          16.00002494175388,\n          16.000009555123633,\n          15.999994168493387,\n          15.999978781863144,\n          15.999963395232898\n         ],\n         \"z\": [\n          0.007506285835269044,\n          0.007490874433673721,\n          0.007475463032078398,\n          0.007460051630483075,\n          0.007444640228887752\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"lightskyblue\"\n         },\n         \"mode\": \"lines\",\n         \"name\": \"Aero wake\",\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          0.5625000000000001,\n          0.8124619250000001,\n          0.8124619134459421,\n          0.5624999942343187,\n          0.5625000000000001\n         ],\n         \"y\": [\n          9.162206417444405e-18,\n          9.162206417444405e-18,\n          0.7999973557508343,\n          0.7999966402495885,\n          9.162206417444405e-18\n         ],\n         \"z\": [\n          4.871002816324649e-17,\n          0.004363102500000049,\n          0.0043955753776063365,\n          3.4360542762473186e-05,\n          4.871002816324649e-17\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"lightskyblue\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          0.5624999942343187,\n          0.8124619134459421,\n          0.8124618930303587,\n          0.5624999847072422,\n          0.5624999942343187\n         ],\n         \"y\": [\n          0.7999966402495885,\n          0.7999973557508343,\n          1.599994811000482,\n          1.5999933810227123,\n          0.7999966402495885\n         ],\n         \"z\": [\n          3.4360542762473186e-05,\n          0.0043955753776063365,\n          0.0044931958770315856,\n          0.00013863466028518693,\n          3.4360542762473186e-05\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"lightskyblue\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          0.5624999847072422,\n          0.8124618930303587,\n          0.8124618649474605,\n          0.5624999722860239,\n          0.5624999847072422\n         ],\n         \"y\": [\n          1.5999933810227123,\n          1.599994811000482,\n          2.399992454598478,\n          2.399990312319138,\n          1.5999933810227123\n         ],\n         \"z\": [\n          0.00013863466028518693,\n          0.0044931958770315856,\n          0.004649043770950182,\n          0.0003053092113602273,\n          0.00013863466028518693\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"lightskyblue\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          0.5624999722860239,\n          0.8124618649474605,\n          0.812461830109957,\n          0.5624999575381,\n          0.5624999722860239\n         ],\n         \"y\": [\n          2.399990312319138,\n          2.399992454598478,\n          3.1999902063390535,\n          3.1999873565514116,\n          2.399990312319138\n         ],\n         \"z\": [\n          0.0003053092113602273,\n          0.004649043770950182,\n          0.004856514630134907,\n          0.0005272092806341323,\n          0.0003053092113602273\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"lightskyblue\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          0.5624999575381,\n          0.812461830109957,\n          0.8124617895303606,\n          0.5624999411107972,\n          0.5624999575381\n         ],\n         \"y\": [\n          3.1999873565514116,\n          3.1999902063390535,\n          3.9999881562546817,\n          3.9999846027816304,\n          3.1999873565514116\n         ],\n         \"z\": [\n          0.0005272092806341323,\n          0.004856514630134907,\n          0.005109416600361549,\n          0.0007975883806602837,\n          0.0005272092806341323\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"lightskyblue\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          0.5624999411107972,\n          0.8124617895303606,\n          0.8124617439231214,\n          0.5624999233436245,\n          0.5624999411107972\n         ],\n         \"y\": [\n          3.9999846027816304,\n          3.9999881562546817,\n          4.799986214012396,\n          4.799981962669224,\n          3.9999846027816304\n         ],\n         \"z\": [\n          0.0007975883806602837,\n          0.005109416600361549,\n          0.005401911948040305,\n          0.0011101083990921862,\n          0.0007975883806602837\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"lightskyblue\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          0.5624999233436245,\n          0.8124617439231214,\n          0.8124616941475412,\n          0.5624999047080059,\n          0.5624999233436245\n         ],\n         \"y\": [\n          4.799981962669224,\n          4.799986214012396,\n          5.599984470124919,\n          5.599979528793419,\n          4.799981962669224\n         ],\n         \"z\": [\n          0.0011101083990921862,\n          0.005401911948040305,\n          0.005728596222836626,\n          0.001458895928473685,\n          0.0011101083990921862\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"lightskyblue\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          0.5624999047080059,\n          0.8124616941475412,\n          0.812461640764451,\n          0.56249988537789,\n          0.5624999047080059\n         ],\n         \"y\": [\n          5.599979528793419,\n          5.599984470124919,\n          6.399982829358027,\n          6.399977212805474,\n          5.599979528793419\n         ],\n         \"z\": [\n          0.001458895928473685,\n          0.005728596222836626,\n          0.006084428857723916,\n          0.0018385147642435145,\n          0.001458895928473685\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"lightskyblue\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          0.56249988537789,\n          0.812461640764451,\n          0.8124615845040528,\n          0.5624998656920386,\n          0.56249988537789\n         ],\n         \"y\": [\n          6.399977212805474,\n          6.399982829358027,\n          7.199981380818826,\n          7.199975110259148,\n          6.399977212805474\n         ],\n         \"z\": [\n          0.0018385147642435145,\n          0.006084428857723916,\n          0.006464810371519351,\n          0.00224400658612019,\n          0.0018385147642435145\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"lightskyblue\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          0.5624998656920386,\n          0.8124615845040528,\n          0.8124615258019251,\n          0.5624998457080345,\n          0.5624998656920386\n         ],\n         \"y\": [\n          7.199975110259148,\n          7.199981380818826,\n          7.999980027286746,\n          7.999973133589262,\n          7.199975110259148\n         ],\n         \"z\": [\n          0.00224400658612019,\n          0.006464810371519351,\n          0.00686551272588112,\n          0.0026708584775881213,\n          0.00224400658612019\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"lightskyblue\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          0.5624998457080345,\n          0.8124615258019251,\n          0.8124614652767873,\n          0.5624998256710535,\n          0.5624998457080345\n         ],\n         \"y\": [\n          7.999973133589262,\n          7.999980027286746,\n          8.799978857160102,\n          8.799971378307317,\n          7.999973133589262\n         ],\n         \"z\": [\n          0.0026708584775881213,\n          0.00686551272588112,\n          0.007282754507096603,\n          0.0031150348110584127,\n          0.0026708584775881213\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"lightskyblue\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          0.5624998256710535,\n          0.8124614652767873,\n          0.8124614032576343,\n          0.5624998055628219,\n          0.5624998256710535\n         ],\n         \"y\": [\n          8.799971378307317,\n          8.799978857160102,\n          9.59997777383543,\n          9.59996975645606,\n          8.799971378307317\n         ],\n         \"z\": [\n          0.0031150348110584127,\n          0.007282754507096603,\n          0.007713132552295366,\n          0.0035729392050654492,\n          0.0031150348110584127\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"lightskyblue\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          0.5624998055628219,\n          0.8124614032576343,\n          0.8124613402623917,\n          0.5624997855672028,\n          0.5624998055628219\n         ],\n         \"y\": [\n          9.59996975645606,\n          9.59997777383543,\n          10.399976865445812,\n          10.39996836102129,\n          9.59996975645606\n         ],\n         \"z\": [\n          0.0035729392050654492,\n          0.007713132552295366,\n          0.0081536905087987,\n          0.004041445265628865,\n          0.0035729392050654492\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"lightskyblue\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          0.5624997855672028,\n          0.8124613402623917,\n          0.8124612765247785,\n          0.5624997656220664,\n          0.5624997855672028\n         ],\n         \"y\": [\n          10.39996836102129,\n          10.399976865445812,\n          11.199976037253185,\n          11.199967103346411,\n          10.39996836102129\n         ],\n         \"z\": [\n          0.004041445265628865,\n          0.0081536905087987,\n          0.00860184653090365,\n          0.004517852953449566,\n          0.004041445265628865\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"lightskyblue\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          0.5624997656220664,\n          0.8124612765247785,\n          0.812461212465948,\n          0.5624997458731538,\n          0.5624997656220664\n         ],\n         \"y\": [\n          11.199967103346411,\n          11.199976037253185,\n          11.999975376131477,\n          11.999966072300438,\n          11.199967103346411\n         ],\n         \"z\": [\n          0.004517852953449566,\n          0.00860184653090365,\n          0.00905545614957633,\n          0.0049999194902928795,\n          0.004517852953449566\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"lightskyblue\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          0.5624997458731538,\n          0.812461212465948,\n          0.8124611482303272,\n          0.5624997262370887,\n          0.5624997458731538\n         ],\n         \"y\": [\n          11.999966072300438,\n          11.999975376131477,\n          12.799974789445866,\n          12.799965179073068,\n          11.999966072300438\n         ],\n         \"z\": [\n          0.0049999194902928795,\n          0.00905545614957633,\n          0.009512733392875675,\n          0.005485803105934123,\n          0.0049999194902928795\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"lightskyblue\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          0.5624997262370887,\n          0.8124611482303272,\n          0.8124610841393545,\n          0.562499706832297,\n          0.5624997262370887\n         ],\n         \"y\": [\n          12.799965179073068,\n          12.799974789445866,\n          13.599974359937981,\n          13.599964506028565,\n          12.799965179073068\n         ],\n         \"z\": [\n          0.005485803105934123,\n          0.009512733392875675,\n          0.009972311299224186,\n          0.005974093414724043,\n          0.005485803105934123\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"lightskyblue\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          0.562499706832297,\n          0.8124610841393545,\n          0.8124610202506753,\n          0.5624996875668204,\n          0.562499706832297\n         ],\n         \"y\": [\n          13.599964506028565,\n          13.599974359937981,\n          14.399973996920059,\n          14.399963964776944,\n          13.599964506028565\n         ],\n         \"z\": [\n          0.005974093414724043,\n          0.009972311299224186,\n          0.010433151853577634,\n          0.0064637340689429204,\n          0.005974093414724043\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"lightskyblue\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          0.5624996875668204,\n          0.8124610202506753,\n          0.8124609567699135,\n          0.5624996685230919,\n          0.5624996875668204\n         ],\n         \"y\": [\n          14.399963964776944,\n          14.399973996920059,\n          15.199973770005858,\n          15.199963623110254,\n          14.399963964776944\n         ],\n         \"z\": [\n          0.0064637340689429204,\n          0.010433151853577634,\n          0.010894598567877162,\n          0.0069540524735901225,\n          0.0064637340689429204\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"lightskyblue\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          0.5624996685230919,\n          0.8124609567699135,\n          0.812460893666179,\n          0.5624996496027337,\n          0.5624996685230919\n         ],\n         \"y\": [\n          15.199963623110254,\n          15.199973770005858,\n          15.999973587313422,\n          15.99996339122673,\n          15.199963623110254\n         ],\n         \"z\": [\n          0.0069540524735901225,\n          0.010894598567877162,\n          0.011356252256599593,\n          0.007444645756118045,\n          0.0069540524735901225\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"lightskyblue\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          0.8124619250000001,\n          1.06242385,\n          1.0624238509998334,\n          0.8124619134459421,\n          0.8124619250000001\n         ],\n         \"y\": [\n          9.162206417444405e-18,\n          9.162206417444405e-18,\n          0.8000041100488657,\n          0.7999973557508343,\n          9.162206417444405e-18\n         ],\n         \"z\": [\n          0.004363102500000049,\n          0.00872620500000005,\n          0.008754989921580773,\n          0.0043955753776063365,\n          0.004363102500000049\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"lightskyblue\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          0.8124619134459421,\n          1.0624238509998334,\n          1.0624238543968563,\n          0.8124618930303587,\n          0.8124619134459421\n         ],\n         \"y\": [\n          0.7999973557508343,\n          0.8000041100488657,\n          1.6000081028650377,\n          1.599994811000482,\n          0.7999973557508343\n         ],\n         \"z\": [\n          0.0043955753776063365,\n          0.008754989921580773,\n          0.00884477941056367,\n          0.0044931958770315856,\n          0.0043955753776063365\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"lightskyblue\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          0.8124618930303587,\n          1.0624238543968563,\n          1.0624238606253473,\n          0.8124618649474605,\n          0.8124618930303587\n         ],\n         \"y\": [\n          1.599994811000482,\n          1.6000081028650377,\n          2.4000118748560357,\n          2.399992454598478,\n          1.599994811000482\n         ],\n         \"z\": [\n          0.0044931958770315856,\n          0.00884477941056367,\n          0.008989074926814278,\n          0.004649043770950182,\n          0.0044931958770315856\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"lightskyblue\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          0.8124618649474605,\n          1.0624238606253473,\n          1.0624238698131283,\n          0.812461830109957,\n          0.8124618649474605\n         ],\n         \"y\": [\n          2.399992454598478,\n          2.4000118748560357,\n          3.2000154932795244,\n          3.1999902063390535,\n          2.399992454598478\n         ],\n         \"z\": [\n          0.004649043770950182,\n          0.008989074926814278,\n          0.009181700030089264,\n          0.004856514630134907,\n          0.004649043770950182\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"lightskyblue\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          0.812461830109957,\n          1.0624238698131283,\n          1.0624238821664975,\n          0.8124617895303606,\n          0.812461830109957\n         ],\n         \"y\": [\n          3.1999902063390535,\n          3.2000154932795244,\n          4.000018860900871,\n          3.9999881562546817,\n          3.1999902063390535\n         ],\n         \"z\": [\n          0.004856514630134907,\n          0.009181700030089264,\n          0.009416892386339146,\n          0.005109416600361549,\n          0.004856514630134907\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"lightskyblue\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          0.8124617895303606,\n          1.0624238821664975,\n          1.0624238975798306,\n          0.8124617439231214,\n          0.8124617895303606\n         ],\n         \"y\": [\n          3.9999881562546817,\n          4.000018860900871,\n          4.800022061050457,\n          4.799986214012396,\n          3.9999881562546817\n         ],\n         \"z\": [\n          0.005109416600361549,\n          0.009416892386339146,\n          0.009689248635280041,\n          0.005401911948040305,\n          0.005109416600361549\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"lightskyblue\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          0.8124617439231214,\n          1.0624238975798306,\n          1.0624239160825706,\n          0.8124616941475412,\n          0.8124617439231214\n         ],\n         \"y\": [\n          4.799986214012396,\n          4.800022061050457,\n          5.600024997008804,\n          5.599984470124919,\n          4.799986214012396\n         ],\n         \"z\": [\n          0.005401911948040305,\n          0.009689248635280041,\n          0.009993797411684078,\n          0.005728596222836626,\n          0.005401911948040305\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"lightskyblue\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          0.8124616941475412,\n          1.0624239160825706,\n          1.062423937405997,\n          0.812461640764451,\n          0.8124616941475412\n         ],\n         \"y\": [\n          5.599984470124919,\n          5.600024997008804,\n          6.4000277557939675,\n          6.399982829358027,\n          5.599984470124919\n         ],\n         \"z\": [\n          0.005728596222836626,\n          0.009993797411684078,\n          0.01032591960212853,\n          0.006084428857723916,\n          0.005728596222836626\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"lightskyblue\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          0.812461640764451,\n          1.062423937405997,\n          1.0624239614547102,\n          0.8124615845040528,\n          0.812461640764451\n         ],\n         \"y\": [\n          6.399982829358027,\n          6.4000277557939675,\n          7.200030239978838,\n          7.199981380818826,\n          6.399982829358027\n         ],\n         \"z\": [\n          0.006084428857723916,\n          0.01032591960212853,\n          0.010681425124526835,\n          0.006464810371519351,\n          0.006084428857723916\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"lightskyblue\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          0.8124615845040528,\n          1.0624239614547102,\n          1.0624239878559636,\n          0.8124615258019251,\n          0.8124615845040528\n         ],\n         \"y\": [\n          7.199981380818826,\n          7.200030239978838,\n          8.000032537843335,\n          7.999980027286746,\n          7.199981380818826\n         ],\n         \"z\": [\n          0.006464810371519351,\n          0.010681425124526835,\n          0.01105645551949636,\n          0.00686551272588112,\n          0.006464810371519351\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"lightskyblue\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          0.8124615258019251,\n          1.0624239878559636,\n          1.0624240164391061,\n          0.8124614652767873,\n          0.8124615258019251\n         ],\n         \"y\": [\n          7.999980027286746,\n          8.000032537843335,\n          8.800034552976555,\n          8.799978857160102,\n          7.999980027286746\n         ],\n         \"z\": [\n          0.00686551272588112,\n          0.01105645551949636,\n          0.011447569094086897,\n          0.007282754507096603,\n          0.00686551272588112\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"lightskyblue\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          0.8124614652767873,\n          1.0624240164391061,\n          1.062424046779832,\n          0.8124614032576343,\n          0.8124614652767873\n         ],\n         \"y\": [\n          8.799978857160102,\n          8.800034552976555,\n          9.600036375170923,\n          9.59997777383543,\n          8.799978857160102\n         ],\n         \"z\": [\n          0.007282754507096603,\n          0.011447569094086897,\n          0.011851630739051535,\n          0.007713132552295366,\n          0.007282754507096603\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"lightskyblue\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          0.8124614032576343,\n          1.062424046779832,\n          1.0624240786772026,\n          0.8124613402623917,\n          0.8124614032576343\n         ],\n         \"y\": [\n          9.59997777383543,\n          9.600036375170923,\n          10.400037910905114,\n          10.399976865445812,\n          9.59997777383543\n         ],\n         \"z\": [\n          0.007713132552295366,\n          0.011851630739051535,\n          0.012265908780960077,\n          0.0081536905087987,\n          0.007713132552295366\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"lightskyblue\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          0.8124613402623917,\n          1.0624240786772026,\n          1.0624241117021795,\n          0.8124612765247785,\n          0.8124613402623917\n         ],\n         \"y\": [\n          10.399976865445812,\n          10.400037910905114,\n          11.200039251394067,\n          11.199976037253185,\n          10.399976865445812\n         ],\n         \"z\": [\n          0.0081536905087987,\n          0.012265908780960077,\n          0.012687962171243582,\n          0.00860184653090365,\n          0.0081536905087987\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"lightskyblue\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          0.8124612765247785,\n          1.0624241117021795,\n          1.0624241456626615,\n          0.812461212465948,\n          0.8124612765247785\n         ],\n         \"y\": [\n          11.199976037253185,\n          11.200039251394067,\n          12.000040307290025,\n          11.999975376131477,\n          11.199976037253185\n         ],\n         \"z\": [\n          0.00860184653090365,\n          0.012687962171243582,\n          0.013115745021976807,\n          0.00905545614957633,\n          0.00860184653090365\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"lightskyblue\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          0.812461212465948,\n          1.0624241456626615,\n          1.0624241801663046,\n          0.8124611482303272,\n          0.812461212465948\n         ],\n         \"y\": [\n          11.999975376131477,\n          12.000040307290025,\n          12.800041170384995,\n          12.799974789445866,\n          11.999975376131477\n         ],\n         \"z\": [\n          0.00905545614957633,\n          0.013115745021976807,\n          0.01354749833673766,\n          0.009512733392875675,\n          0.00905545614957633\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"lightskyblue\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          0.8124611482303272,\n          1.0624241801663046,\n          1.0624242150604906,\n          0.8124610841393545,\n          0.8124611482303272\n         ],\n         \"y\": [\n          12.799974789445866,\n          12.800041170384995,\n          13.600041757575765,\n          13.599974359937981,\n          12.799974789445866\n         ],\n         \"z\": [\n          0.009512733392875675,\n          0.01354749833673766,\n          0.013981850987710955,\n          0.009972311299224186,\n          0.009512733392875675\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"lightskyblue\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          0.8124610841393545,\n          1.0624242150604906,\n          1.062424250024925,\n          0.8124610202506753,\n          0.8124610841393545\n         ],\n         \"y\": [\n          13.599974359937981,\n          13.600041757575765,\n          14.40004216025581,\n          14.399973996920059,\n          13.599974359937981\n         ],\n         \"z\": [\n          0.009972311299224186,\n          0.013981850987710955,\n          0.01441771892949864,\n          0.010433151853577634,\n          0.009972311299224186\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"lightskyblue\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          0.8124610202506753,\n          1.062424250024925,\n          1.062424284959919,\n          0.8124609567699135,\n          0.8124610202506753\n         ],\n         \"y\": [\n          14.399973996920059,\n          14.40004216025581,\n          15.200042309462798,\n          15.199973770005858,\n          14.399973996920059\n         ],\n         \"z\": [\n          0.010433151853577634,\n          0.01441771892949864,\n          0.014854388055001192,\n          0.010894598567877162,\n          0.010433151853577634\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"lightskyblue\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          0.8124609567699135,\n          1.062424284959919,\n          1.0624243196435175,\n          0.812460893666179,\n          0.8124609567699135\n         ],\n         \"y\": [\n          15.199973770005858,\n          15.200042309462798,\n          16.0000422977623,\n          15.999973587313422,\n          15.199973770005858\n         ],\n         \"z\": [\n          0.010894598567877162,\n          0.014854388055001192,\n          0.015291409655183566,\n          0.011356252256599593,\n          0.010894598567877162\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"lightskyblue\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          1.06242385,\n          1.312385775,\n          1.312385765590729,\n          1.0624238509998334,\n          1.06242385\n         ],\n         \"y\": [\n          9.162206417444405e-18,\n          9.162206417444405e-18,\n          0.7999967708512715,\n          0.8000041100488657,\n          9.162206417444405e-18\n         ],\n         \"z\": [\n          0.00872620500000005,\n          0.01308930750000005,\n          0.013117808415149604,\n          0.008754989921580773,\n          0.00872620500000005\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"lightskyblue\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          1.0624238509998334,\n          1.312385765590729,\n          1.3123857492560815,\n          1.0624238543968563,\n          1.0624238509998334\n         ],\n         \"y\": [\n          0.8000041100488657,\n          0.7999967708512715,\n          1.5999936447026821,\n          1.6000081028650377,\n          0.8000041100488657\n         ],\n         \"z\": [\n          0.008754989921580773,\n          0.013117808415149604,\n          0.013205038226600496,\n          0.00884477941056367,\n          0.008754989921580773\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"lightskyblue\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          1.0624238543968563,\n          1.3123857492560815,\n          1.312385727066829,\n          1.0624238606253473,\n          1.0624238543968563\n         ],\n         \"y\": [\n          1.6000081028650377,\n          1.5999936447026821,\n          2.399990713499301,\n          2.4000118748560357,\n          1.6000081028650377\n         ],\n         \"z\": [\n          0.00884477941056367,\n          0.013205038226600496,\n          0.013344567263095089,\n          0.008989074926814278,\n          0.00884477941056367\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"lightskyblue\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          1.0624238606253473,\n          1.312385727066829,\n          1.312385699803704,\n          1.0624238698131283,\n          1.0624238606253473\n         ],\n         \"y\": [\n          2.4000118748560357,\n          2.399990713499301,\n          3.1999878994597233,\n          3.2000154932795244,\n          2.4000118748560357\n         ],\n         \"z\": [\n          0.008989074926814278,\n          0.013344567263095089,\n          0.013530285209410336,\n          0.009181700030089264,\n          0.008989074926814278\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"lightskyblue\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          1.0624238698131283,\n          1.312385699803704,\n          1.3123856683437078,\n          1.0624238821664975,\n          1.0624238698131283\n         ],\n         \"y\": [\n          3.2000154932795244,\n          3.1999878994597233,\n          3.999985295937126,\n          4.000018860900871,\n          3.2000154932795244\n         ],\n         \"z\": [\n          0.009181700030089264,\n          0.013530285209410336,\n          0.013756498247063131,\n          0.009416892386339146,\n          0.009181700030089264\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"lightskyblue\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          1.0624238821664975,\n          1.3123856683437078,\n          1.3123856332589672,\n          1.0624238975798306,\n          1.0624238821664975\n         ],\n         \"y\": [\n          4.000018860900871,\n          3.999985295937126,\n          4.799982815059392,\n          4.800022061050457,\n          4.000018860900871\n         ],\n         \"z\": [\n          0.009416892386339146,\n          0.013756498247063131,\n          0.014017868983988494,\n          0.009689248635280041,\n          0.009416892386339146\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"lightskyblue\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          1.0624238975798306,\n          1.3123856332589672,\n          1.312385595267562,\n          1.0624239160825706,\n          1.0624238975798306\n         ],\n         \"y\": [\n          4.800022061050457,\n          4.799982815059392,\n          5.599980551570029,\n          5.600024997008804,\n          4.800022061050457\n         ],\n         \"z\": [\n          0.009689248635280041,\n          0.014017868983988494,\n          0.014309495114931086,\n          0.009993797411684078,\n          0.009689248635280041\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"lightskyblue\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          1.0624239160825706,\n          1.312385595267562,\n          1.3123855547838665,\n          1.062423937405997,\n          1.0624239160825706\n         ],\n         \"y\": [\n          5.600024997008804,\n          5.599980551570029,\n          6.399978412712719,\n          6.4000277557939675,\n          5.600024997008804\n         ],\n         \"z\": [\n          0.009993797411684078,\n          0.014309495114931086,\n          0.014626828084469745,\n          0.01032591960212853,\n          0.009993797411684078\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"lightskyblue\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          1.062423937405997,\n          1.3123855547838665,\n          1.3123855123976538,\n          1.0624239614547102,\n          1.062423937405997\n         ],\n         \"y\": [\n          6.4000277557939675,\n          6.399978412712719,\n          7.199976492431211,\n          7.200030239978838,\n          6.4000277557939675\n         ],\n         \"z\": [\n          0.01032591960212853,\n          0.014626828084469745,\n          0.014965753979210595,\n          0.010681425124526835,\n          0.01032591960212853\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"lightskyblue\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          1.0624239614547102,\n          1.3123855123976538,\n          1.312385468400212,\n          1.0624239878559636,\n          1.0624239614547102\n         ],\n         \"y\": [\n          7.200030239978838,\n          7.199976492431211,\n          7.999974695521935,\n          8.000032537843335,\n          7.200030239978838\n         ],\n         \"z\": [\n          0.010681425124526835,\n          0.014965753979210595,\n          0.015322499672438088,\n          0.01105645551949636,\n          0.010681425124526835\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"lightskyblue\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          1.0624239878559636,\n          1.312385468400212,\n          1.3123854232768732,\n          1.0624240164391061,\n          1.0624239878559636\n         ],\n         \"y\": [\n          8.000032537843335,\n          7.999974695521935,\n          8.799973115398142,\n          8.800034552976555,\n          8.000032537843335\n         ],\n         \"z\": [\n          0.01105645551949636,\n          0.015322499672438088,\n          0.015693722215994754,\n          0.011447569094086897,\n          0.01105645551949636\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"lightskyblue\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          1.0624240164391061,\n          1.3123854232768732,\n          1.3123853772210174,\n          1.062424046779832,\n          1.0624240164391061\n         ],\n         \"y\": [\n          8.800034552976555,\n          8.799973115398142,\n          9.599971656847169,\n          9.600036375170923,\n          8.800034552976555\n         ],\n         \"z\": [\n          0.011447569094086897,\n          0.015693722215994754,\n          0.01607640837769345,\n          0.011851630739051535,\n          0.011447569094086897\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"lightskyblue\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          1.062424046779832,\n          1.3123853772210174,\n          1.312385330630465,\n          1.0624240786772026,\n          1.062424046779832\n         ],\n         \"y\": [\n          9.600036375170923,\n          9.599971656847169,\n          10.39997041301708,\n          10.400037910905114,\n          9.600036375170923\n         ],\n         \"z\": [\n          0.011851630739051535,\n          0.01607640837769345,\n          0.01646796933785412,\n          0.012265908780960077,\n          0.011851630739051535\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"lightskyblue\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          1.0624240786772026,\n          1.312385330630465,\n          1.3123852836188357,\n          1.0624241117021795,\n          1.0624240786772026\n         ],\n         \"y\": [\n          10.400037910905114,\n          10.39997041301708,\n          11.19996929003901,\n          11.200039251394067,\n          10.400037910905114\n         ],\n         \"z\": [\n          0.012265908780960077,\n          0.01646796933785412,\n          0.01686613334272428,\n          0.012687962171243582,\n          0.012265908780960077\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"lightskyblue\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          1.0624241117021795,\n          1.3123852836188357,\n          1.3123852365066258,\n          1.0624241456626615,\n          1.0624241117021795\n         ],\n         \"y\": [\n          11.200039251394067,\n          11.19996929003901,\n          11.999968379665505,\n          12.000040307290025,\n          11.200039251394067\n         ],\n         \"z\": [\n          0.012687962171243582,\n          0.01686613334272428,\n          0.01726904179198468,\n          0.013115745021976807,\n          0.012687962171243582\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"lightskyblue\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          1.0624241456626615,\n          1.3123852365066258,\n          1.312385189340325,\n          1.0624241801663046,\n          1.0624241456626615\n         ],\n         \"y\": [\n          12.000040307290025,\n          11.999968379665505,\n          12.799967589645137,\n          12.800041170384995,\n          12.000040307290025\n         ],\n         \"z\": [\n          0.013115745021976807,\n          0.01726904179198468,\n          0.01767513419496066,\n          0.01354749833673766,\n          0.013115745021976807\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"lightskyblue\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          1.0624241801663046,\n          1.312385189340325,\n          1.3123851423655943,\n          1.0624242150604906,\n          1.0624241801663046\n         ],\n         \"y\": [\n          12.800041170384995,\n          12.799967589645137,\n          13.599967007102007,\n          13.600041757575765,\n          12.800041170384995\n         ],\n         \"z\": [\n          0.01354749833673766,\n          0.01767513419496066,\n          0.018083244240899084,\n          0.013981850987710955,\n          0.01354749833673766\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"lightskyblue\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          1.0624242150604906,\n          1.3123851423655943,\n          1.312385095570038,\n          1.062424250024925,\n          1.0624242150604906\n         ],\n         \"y\": [\n          13.600041757575765,\n          13.599967007102007,\n          14.399966541012066,\n          14.40004216025581,\n          13.600041757575765\n         ],\n         \"z\": [\n          0.013981850987710955,\n          0.018083244240899084,\n          0.018492473641254375,\n          0.01441771892949864,\n          0.013981850987710955\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"lightskyblue\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          1.062424250024925,\n          1.312385095570038,\n          1.3123850491119522,\n          1.062424284959919,\n          1.062424250024925\n         ],\n         \"y\": [\n          14.40004216025581,\n          14.399966541012066,\n          15.199966264105328,\n          15.200042309462798,\n          14.40004216025581\n         ],\n         \"z\": [\n          0.01441771892949864,\n          0.018492473641254375,\n          0.01890228052834785,\n          0.014854388055001192,\n          0.01441771892949864\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"lightskyblue\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          1.062424284959919,\n          1.3123850491119522,\n          1.3123850029222204,\n          1.0624243196435175,\n          1.062424284959919\n         ],\n         \"y\": [\n          15.200042309462798,\n          15.199966264105328,\n          15.99996608299767,\n          16.0000422977623,\n          15.200042309462798\n         ],\n         \"z\": [\n          0.014854388055001192,\n          0.01890228052834785,\n          0.019312320316468137,\n          0.015291409655183566,\n          0.014854388055001192\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"lightskyblue\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          1.312385775,\n          1.5623477000000001,\n          1.562347690821025,\n          1.312385765590729,\n          1.312385775\n         ],\n         \"y\": [\n          9.162206417444405e-18,\n          9.162206417444405e-18,\n          0.799997122848918,\n          0.7999967708512715,\n          9.162206417444405e-18\n         ],\n         \"z\": [\n          0.01308930750000005,\n          0.01745241000000005,\n          0.017480923114039832,\n          0.013117808415149604,\n          0.01308930750000005\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"lightskyblue\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          1.312385765590729,\n          1.562347690821025,\n          1.562347674799373,\n          1.3123857492560815,\n          1.312385765590729\n         ],\n         \"y\": [\n          0.7999967708512715,\n          0.799997122848918,\n          1.5999943470993463,\n          1.5999936447026821,\n          0.7999967708512715\n         ],\n         \"z\": [\n          0.013117808415149604,\n          0.017480923114039832,\n          0.017567366251003295,\n          0.013205038226600496,\n          0.013117808415149604\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"lightskyblue\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          1.3123857492560815,\n          1.562347674799373,\n          1.5623476529459288,\n          1.312385727066829,\n          1.3123857492560815\n         ],\n         \"y\": [\n          1.5999936447026821,\n          1.5999943470993463,\n          2.3999917639131514,\n          2.399990713499301,\n          1.5999936447026821\n         ],\n         \"z\": [\n          0.013205038226600496,\n          0.017567366251003295,\n          0.017705147752285617,\n          0.013344567263095089,\n          0.013205038226600496\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"lightskyblue\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          1.312385727066829,\n          1.5623476529459288,\n          1.5623476259926226,\n          1.312385699803704,\n          1.312385727066829\n         ],\n         \"y\": [\n          2.399990713499301,\n          2.3999917639131514,\n          3.1999892952201012,\n          3.1999878994597233,\n          2.399990713499301\n         ],\n         \"z\": [\n          0.013344567263095089,\n          0.017705147752285617,\n          0.017888002109101492,\n          0.013530285209410336,\n          0.013344567263095089\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"lightskyblue\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          1.312385699803704,\n          1.5623476259926226,\n          1.5623475947770735,\n          1.3123856683437078,\n          1.312385699803704\n         ],\n         \"y\": [\n          3.1999878994597233,\n          3.1999892952201012,\n          3.9999870303856278,\n          3.999985295937126,\n          3.1999878994597233\n         ],\n         \"z\": [\n          0.013530285209410336,\n          0.017888002109101492,\n          0.01811008298364314,\n          0.013756498247063131,\n          0.013530285209410336\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"lightskyblue\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          1.3123856683437078,\n          1.5623475947770735,\n          1.5623475598403873,\n          1.3123856332589672,\n          1.3123856683437078\n         ],\n         \"y\": [\n          3.999985295937126,\n          3.9999870303856278,\n          4.799984878111898,\n          4.799982815059392,\n          3.999985295937126\n         ],\n         \"z\": [\n          0.013756498247063131,\n          0.01811008298364314,\n          0.018365920918453814,\n          0.014017868983988494,\n          0.013756498247063131\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"lightskyblue\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          1.3123856332589672,\n          1.5623475598403873,\n          1.562347521877352,\n          1.312385595267562,\n          1.3123856332589672\n         ],\n         \"y\": [\n          4.799982815059392,\n          4.799984878111898,\n          5.59998292970836,\n          5.599980551570029,\n          4.799982815059392\n         ],\n         \"z\": [\n          0.014017868983988494,\n          0.018365920918453814,\n          0.018650494977104467,\n          0.014309495114931086,\n          0.014017868983988494\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"lightskyblue\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          1.312385595267562,\n          1.562347521877352,\n          1.5623474812848825,\n          1.3123855547838665,\n          1.312385595267562\n         ],\n         \"y\": [\n          5.599980551570029,\n          5.59998292970836,\n          6.399981091454103,\n          6.399978412712719,\n          5.599980551570029\n         ],\n         \"z\": [\n          0.014309495114931086,\n          0.018650494977104467,\n          0.01895918067700987,\n          0.014626828084469745,\n          0.014309495114931086\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"lightskyblue\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          1.3123855547838665,\n          1.5623474812848825,\n          1.5623474386424068,\n          1.3123855123976538,\n          1.3123855547838665\n         ],\n         \"y\": [\n          6.399978412712719,\n          6.399981091454103,\n          7.199979457022128,\n          7.199976492431211,\n          6.399978412712719\n         ],\n         \"z\": [\n          0.014626828084469745,\n          0.01895918067700987,\n          0.019287816111895742,\n          0.014965753979210595,\n          0.014626828084469745\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"lightskyblue\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          1.3123855123976538,\n          1.5623474386424068,\n          1.5623473942355086,\n          1.312385468400212,\n          1.3123855123976538\n         ],\n         \"y\": [\n          7.199976492431211,\n          7.199979457022128,\n          7.999977932154519,\n          7.999974695521935,\n          7.199976492431211\n         ],\n         \"z\": [\n          0.014965753979210595,\n          0.019287816111895742,\n          0.019632644031693732,\n          0.015322499672438088,\n          0.014965753979210595\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"lightskyblue\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          1.312385468400212,\n          1.5623473942355086,\n          1.562347348551272,\n          1.3123854232768732,\n          1.312385468400212\n         ],\n         \"y\": [\n          7.999974695521935,\n          7.999977932154519,\n          8.799976610851648,\n          8.799973115398142,\n          7.999974695521935\n         ],\n         \"z\": [\n          0.015322499672438088,\n          0.019632644031693732,\n          0.019990371655679427,\n          0.015693722215994754,\n          0.015322499672438088\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"lightskyblue\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          1.3123854232768732,\n          1.562347348551272,\n          1.5623473017883505,\n          1.3123853772210174,\n          1.3123854232768732\n         ],\n         \"y\": [\n          8.799973115398142,\n          8.799976610851648,\n          9.599975397732855,\n          9.599971656847169,\n          8.799973115398142\n         ],\n         \"z\": [\n          0.015693722215994754,\n          0.019990371655679427,\n          0.020358098718006947,\n          0.01607640837769345,\n          0.015693722215994754\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"lightskyblue\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          1.3123853772210174,\n          1.5623473017883505,\n          1.562347254357797,\n          1.312385330630465,\n          1.3123853772210174\n         ],\n         \"y\": [\n          9.599971656847169,\n          9.599975397732855,\n          10.399974384962816,\n          10.39997041301708,\n          9.599971656847169\n         ],\n         \"z\": [\n          0.01607640837769345,\n          0.020358098718006947,\n          0.020733377306197856,\n          0.01646796933785412,\n          0.01607640837769345\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"lightskyblue\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          1.312385330630465,\n          1.562347254357797,\n          1.5623472063875883,\n          1.3123852836188357,\n          1.312385330630465\n         ],\n         \"y\": [\n          10.39997041301708,\n          10.399974384962816,\n          11.199973475852698,\n          11.19996929003901,\n          10.39997041301708\n         ],\n         \"z\": [\n          0.01646796933785412,\n          0.020733377306197856,\n          0.021114119572776275,\n          0.01686613334272428,\n          0.01646796933785412\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"lightskyblue\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          1.3123852836188357,\n          1.5623472063875883,\n          1.5623471582205557,\n          1.3123852365066258,\n          1.3123852836188357\n         ],\n         \"y\": [\n          11.19996929003901,\n          11.199973475852698,\n          11.999972759265718,\n          11.999968379665505,\n          11.19996929003901\n         ],\n         \"z\": [\n          0.01686613334272428,\n          0.021114119572776275,\n          0.021498666720439867,\n          0.01726904179198468,\n          0.01686613334272428\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"lightskyblue\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          1.3123852365066258,\n          1.5623471582205557,\n          1.5623471099223738,\n          1.312385189340325,\n          1.3123852365066258\n         ],\n         \"y\": [\n          11.999968379665505,\n          11.999972759265718,\n          12.79997213800772,\n          12.799967589645137,\n          11.999968379665505\n         ],\n         \"z\": [\n          0.01726904179198468,\n          0.021498666720439867,\n          0.02188566981939099,\n          0.01767513419496066,\n          0.01726904179198468\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"lightskyblue\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          1.312385189340325,\n          1.5623471099223738,\n          1.5623470617648778,\n          1.3123851423655943,\n          1.312385189340325\n         ],\n         \"y\": [\n          12.799967589645137,\n          12.79997213800772,\n          13.599971695647595,\n          13.599967007102007,\n          12.799967589645137\n         ],\n         \"z\": [\n          0.01767513419496066,\n          0.02188566981939099,\n          0.022274172724010707,\n          0.018083244240899084,\n          0.01767513419496066\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"lightskyblue\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          1.3123851423655943,\n          1.5623470617648778,\n          1.5623470137527669,\n          1.312385095570038,\n          1.3123851423655943\n         ],\n         \"y\": [\n          13.599967007102007,\n          13.599971695647595,\n          14.399971335726036,\n          14.399966541012066,\n          13.599967007102007\n         ],\n         \"z\": [\n          0.018083244240899084,\n          0.022274172724010707,\n          0.022663458304022048,\n          0.018492473641254375,\n          0.018083244240899084\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"lightskyblue\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          1.312385095570038,\n          1.5623470137527669,\n          1.562346966066091,\n          1.3123850491119522,\n          1.312385095570038\n         ],\n         \"y\": [\n          14.399966541012066,\n          14.399971335726036,\n          15.199971128670821,\n          15.199966264105328,\n          14.399966541012066\n         ],\n         \"z\": [\n          0.018492473641254375,\n          0.022663458304022048,\n          0.023053144166224608,\n          0.01890228052834785,\n          0.018492473641254375\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"lightskyblue\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          1.3123850491119522,\n          1.562346966066091,\n          1.5623469186425232,\n          1.3123850029222204,\n          1.3123850491119522\n         ],\n         \"y\": [\n          15.199966264105328,\n          15.199971128670821,\n          15.999970977392403,\n          15.99996608299767,\n          15.199966264105328\n         ],\n         \"z\": [\n          0.01890228052834785,\n          0.023053144166224608,\n          0.023442975805592004,\n          0.019312320316468137,\n          0.01890228052834785\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"lightskyblue\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          1.5623477000000001,\n          1.8123096250000001,\n          1.8123096252793973,\n          1.562347690821025,\n          1.5623477000000001\n         ],\n         \"y\": [\n          9.162206417444405e-18,\n          9.162206417444405e-18,\n          0.8000042711855221,\n          0.799997122848918,\n          9.162206417444405e-18\n         ],\n         \"z\": [\n          0.01745241000000005,\n          0.02181551250000005,\n          0.021842245662087735,\n          0.017480923114039832,\n          0.01745241000000005\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"lightskyblue\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          1.562347690821025,\n          1.8123096252793973,\n          1.8123096273998411,\n          1.562347674799373,\n          1.562347690821025\n         ],\n         \"y\": [\n          0.799997122848918,\n          0.8000042711855221,\n          1.6000084254430789,\n          1.5999943470993463,\n          0.799997122848918\n         ],\n         \"z\": [\n          0.017480923114039832,\n          0.021842245662087735,\n          0.021926181197280452,\n          0.017567366251003295,\n          0.017480923114039832\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"lightskyblue\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          1.562347674799373,\n          1.8123096273998411,\n          1.812309631841271,\n          1.5623476529459288,\n          1.562347674799373\n         ],\n         \"y\": [\n          1.5999943470993463,\n          1.6000084254430789,\n          2.4000123599611722,\n          2.3999917639131514,\n          1.5999943470993463\n         ],\n         \"z\": [\n          0.017567366251003295,\n          0.021926181197280452,\n          0.02206079417356827,\n          0.017705147752285617,\n          0.017567366251003295\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"lightskyblue\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          1.5623476529459288,\n          1.812309631841271,\n          1.812309638767255,\n          1.5623476259926226,\n          1.5623476529459288\n         ],\n         \"y\": [\n          2.3999917639131514,\n          2.4000123599611722,\n          3.2000161441788317,\n          3.1999892952201012,\n          2.3999917639131514\n         ],\n         \"z\": [\n          0.017705147752285617,\n          0.02206079417356827,\n          0.02223989477813403,\n          0.017888002109101492,\n          0.017705147752285617\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"lightskyblue\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          1.5623476259926226,\n          1.812309638767255,\n          1.8123096484183707,\n          1.5623475947770735,\n          1.5623476259926226\n         ],\n         \"y\": [\n          3.1999892952201012,\n          3.2000161441788317,\n          4.000019677718904,\n          3.9999870303856278,\n          3.1999892952201012\n         ],\n         \"z\": [\n          0.017888002109101492,\n          0.02223989477813403,\n          0.022457724482343875,\n          0.01811008298364314,\n          0.017888002109101492\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"lightskyblue\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          1.5623475947770735,\n          1.8123096484183707,\n          1.8123096607152773,\n          1.5623475598403873,\n          1.5623475947770735\n         ],\n         \"y\": [\n          3.9999870303856278,\n          4.000019677718904,\n          4.800023043050683,\n          4.799984878111898,\n          3.9999870303856278\n         ],\n         \"z\": [\n          0.01811008298364314,\n          0.022457724482343875,\n          0.022708920175087563,\n          0.018365920918453814,\n          0.01811008298364314\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"lightskyblue\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          1.5623475598403873,\n          1.8123096607152773,\n          1.8123096757177453,\n          1.562347521877352,\n          1.5623475598403873\n         ],\n         \"y\": [\n          4.799984878111898,\n          4.800023043050683,\n          5.600026139930303,\n          5.59998292970836,\n          4.799984878111898\n         ],\n         \"z\": [\n          0.018365920918453814,\n          0.022708920175087563,\n          0.022988579886379087,\n          0.018650494977104467,\n          0.018365920918453814\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"lightskyblue\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          1.562347521877352,\n          1.8123096757177453,\n          1.8123096931809952,\n          1.5623474812848825,\n          1.562347521877352\n         ],\n         \"y\": [\n          5.59998292970836,\n          5.600026139930303,\n          6.400029057167697,\n          6.399981091454103,\n          5.59998292970836\n         ],\n         \"z\": [\n          0.018650494977104467,\n          0.022988579886379087,\n          0.023292206961162812,\n          0.01895918067700987,\n          0.018650494977104467\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"lightskyblue\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          1.5623474812848825,\n          1.8123096931809952,\n          1.8123097130428614,\n          1.5623474386424068,\n          1.5623474812848825\n         ],\n         \"y\": [\n          6.399981091454103,\n          6.400029057167697,\n          7.200031695838008,\n          7.199979457022128,\n          6.399981091454103\n         ],\n         \"z\": [\n          0.01895918067700987,\n          0.023292206961162812,\n          0.023615767898237508,\n          0.019287816111895742,\n          0.01895918067700987\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"lightskyblue\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          1.5623474386424068,\n          1.8123097130428614,\n          1.8123097349564945,\n          1.5623473942355086,\n          1.5623474386424068\n         ],\n         \"y\": [\n          7.199979457022128,\n          7.200031695838008,\n          8.000034148296033,\n          7.999977932154519,\n          7.199979457022128\n         ],\n         \"z\": [\n          0.019287816111895742,\n          0.023615767898237508,\n          0.023955616210629194,\n          0.019632644031693732,\n          0.019287816111895742\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"lightskyblue\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          1.5623473942355086,\n          1.8123097349564945,\n          1.8123097587908352,\n          1.562347348551272,\n          1.5623473942355086\n         ],\n         \"y\": [\n          7.999977932154519,\n          8.000034148296033,\n          8.800036316222785,\n          8.799976610851648,\n          7.999977932154519\n         ],\n         \"z\": [\n          0.019632644031693732,\n          0.023955616210629194,\n          0.024308558183696316,\n          0.019990371655679427,\n          0.019632644031693732\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"lightskyblue\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          1.562347348551272,\n          1.8123097587908352,\n          1.812309784150342,\n          1.5623473017883505,\n          1.562347348551272\n         ],\n         \"y\": [\n          8.799976610851648,\n          8.800036316222785,\n          9.600038292975295,\n          9.599975397732855,\n          8.799976610851648\n         ],\n         \"z\": [\n          0.019990371655679427,\n          0.024308558183696316,\n          0.02467175825347697,\n          0.020358098718006947,\n          0.019990371655679427\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"lightskyblue\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          1.5623473017883505,\n          1.812309784150342,\n          1.8123098108800397,\n          1.562347254357797,\n          1.5623473017883505\n         ],\n         \"y\": [\n          9.599975397732855,\n          9.600038292975295,\n          10.400039980171375,\n          10.399974384962816,\n          9.599975397732855\n         ],\n         \"z\": [\n          0.020358098718006947,\n          0.02467175825347697,\n          0.025042818714815958,\n          0.020733377306197856,\n          0.020358098718006947\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"lightskyblue\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          1.562347254357797,\n          1.8123098108800397,\n          1.8123098385802803,\n          1.5623472063875883,\n          1.562347254357797\n         ],\n         \"y\": [\n          10.399974384962816,\n          10.400039980171375,\n          11.200041470745928,\n          11.199973475852698,\n          10.399974384962816\n         ],\n         \"z\": [\n          0.020733377306197856,\n          0.025042818714815958,\n          0.02541966496156141,\n          0.021114119572776275,\n          0.020733377306197856\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"lightskyblue\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          1.5623472063875883,\n          1.8123098385802803,\n          1.812309867107981,\n          1.5623471582205557,\n          1.5623472063875883\n         ],\n         \"y\": [\n          11.199973475852698,\n          11.200041470745928,\n          12.000042667086927,\n          11.999972759265718,\n          11.199973475852698\n         ],\n         \"z\": [\n          0.021114119572776275,\n          0.02541966496156141,\n          0.025800639193156966,\n          0.021498666720439867,\n          0.021114119572776275\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"lightskyblue\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          1.5623471582205557,\n          1.812309867107981,\n          1.8123098960957866,\n          1.5623471099223738,\n          1.5623471582205557\n         ],\n         \"y\": [\n          11.999972759265718,\n          12.000042667086927,\n          12.800043661532847,\n          12.79997213800772,\n          11.999972759265718\n         ],\n         \"z\": [\n          0.021498666720439867,\n          0.025800639193156966,\n          0.026184363669349748,\n          0.02188566981939099,\n          0.021498666720439867\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"lightskyblue\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          1.5623471099223738,\n          1.8123098960957866,\n          1.8123099254371609,\n          1.5623470617648778,\n          1.5623471099223738\n         ],\n         \"y\": [\n          12.79997213800772,\n          12.800043661532847,\n          13.60004436051208,\n          13.599971695647595,\n          12.79997213800772\n         ],\n         \"z\": [\n          0.02188566981939099,\n          0.026184363669349748,\n          0.026569848578482658,\n          0.022274172724010707,\n          0.02188566981939099\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"lightskyblue\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          1.5623470617648778,\n          1.8123099254371609,\n          1.8123099548260293,\n          1.5623470137527669,\n          1.5623470617648778\n         ],\n         \"y\": [\n          13.599971695647595,\n          13.60004436051208,\n          14.40004485653229,\n          14.399971335726036,\n          13.599971695647595\n         ],\n         \"z\": [\n          0.022274172724010707,\n          0.026569848578482658,\n          0.026956330992660843,\n          0.022663458304022048,\n          0.022274172724010707\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"lightskyblue\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          1.5623470137527669,\n          1.8123099548260293,\n          1.812309984197048,\n          1.562346966066091,\n          1.5623470137527669\n         ],\n         \"y\": [\n          14.399971335726036,\n          14.40004485653229,\n          15.200045070532308,\n          15.199971128670821,\n          14.399971335726036\n         ],\n         \"z\": [\n          0.022663458304022048,\n          0.026956330992660843,\n          0.02734338968094543,\n          0.023053144166224608,\n          0.022663458304022048\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"lightskyblue\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          1.562346966066091,\n          1.812309984197048,\n          1.8123100133243386,\n          1.5623469186425232,\n          1.562346966066091\n         ],\n         \"y\": [\n          15.199971128670821,\n          15.200045070532308,\n          16.00004509958812,\n          15.999970977392403,\n          15.199971128670821\n         ],\n         \"z\": [\n          0.023053144166224608,\n          0.02734338968094543,\n          0.027730739956343724,\n          0.023442975805592004,\n          0.023053144166224608\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"lightskyblue\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          1.8123096250000001,\n          2.06227155,\n          2.062271537819961,\n          1.8123096252793973,\n          1.8123096250000001\n         ],\n         \"y\": [\n          9.162206417444405e-18,\n          9.162206417444405e-18,\n          0.7999968504395711,\n          0.8000042711855221,\n          9.162206417444405e-18\n         ],\n         \"z\": [\n          0.02181551250000005,\n          0.02617861500000005,\n          0.026206145672870378,\n          0.021842245662087735,\n          0.02181551250000005\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"lightskyblue\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          1.8123096252793973,\n          2.062271537819961,\n          2.0622715161497642,\n          1.8123096273998411,\n          1.8123096252793973\n         ],\n         \"y\": [\n          0.8000042711855221,\n          0.7999968504395711,\n          1.5999938047112736,\n          1.6000084254430789,\n          0.8000042711855221\n         ],\n         \"z\": [\n          0.021842245662087735,\n          0.026206145672870378,\n          0.02629050138818445,\n          0.021926181197280452,\n          0.021842245662087735\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"lightskyblue\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          1.8123096273998411,\n          2.0622715161497642,\n          2.062271486229936,\n          1.812309631841271,\n          1.8123096273998411\n         ],\n         \"y\": [\n          1.6000084254430789,\n          1.5999938047112736,\n          2.399990956607656,\n          2.4000123599611722,\n          1.6000084254430789\n         ],\n         \"z\": [\n          0.021926181197280452,\n          0.02629050138818445,\n          0.026425515849181777,\n          0.02206079417356827,\n          0.021926181197280452\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"lightskyblue\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          1.812309631841271,\n          2.062271486229936,\n          2.062271449019728,\n          1.812309638767255,\n          1.812309631841271\n         ],\n         \"y\": [\n          2.4000123599611722,\n          2.399990956607656,\n          3.199988230166699,\n          3.2000161441788317,\n          2.4000123599611722\n         ],\n         \"z\": [\n          0.02206079417356827,\n          0.026425515849181777,\n          0.02660533252262167,\n          0.02223989477813403,\n          0.02206079417356827\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"lightskyblue\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          1.812309638767255,\n          2.062271449019728,\n          2.062271405583596,\n          1.8123096484183707,\n          1.812309638767255\n         ],\n         \"y\": [\n          3.2000161441788317,\n          3.199988230166699,\n          3.999985717099869,\n          4.000019677718904,\n          3.2000161441788317\n         ],\n         \"z\": [\n          0.02223989477813403,\n          0.02660533252262167,\n          0.026824499204128972,\n          0.022457724482343875,\n          0.02223989477813403\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"lightskyblue\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          1.8123096484183707,\n          2.062271405583596,\n          2.062271356683286,\n          1.8123096607152773,\n          1.8123096484183707\n         ],\n         \"y\": [\n          4.000019677718904,\n          3.999985717099869,\n          4.799983327325806,\n          4.800023043050683,\n          4.000019677718904\n         ],\n         \"z\": [\n          0.022457724482343875,\n          0.026824499204128972,\n          0.027077892142435816,\n          0.022708920175087563,\n          0.022457724482343875\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"lightskyblue\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          1.8123096607152773,\n          2.062271356683286,\n          2.062271303232613,\n          1.8123096757177453,\n          1.8123096607152773\n         ],\n         \"y\": [\n          4.800023043050683,\n          4.799983327325806,\n          5.59998115379444,\n          5.600026139930303,\n          4.800023043050683\n         ],\n         \"z\": [\n          0.022708920175087563,\n          0.027077892142435816,\n          0.027360804287995796,\n          0.022988579886379087,\n          0.022708920175087563\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"lightskyblue\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          1.8123096757177453,\n          2.062271303232613,\n          2.0622712458356625,\n          1.8123096931809952,\n          1.8123096757177453\n         ],\n         \"y\": [\n          5.600026139930303,\n          5.59998115379444,\n          6.399979102912118,\n          6.400029057167697,\n          5.600026139930303\n         ],\n         \"z\": [\n          0.022988579886379087,\n          0.027360804287995796,\n          0.02766884734164822,\n          0.023292206961162812,\n          0.022988579886379087\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"lightskyblue\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          1.8123096931809952,\n          2.0622712458356625,\n          2.062271185276541,\n          1.8123097130428614,\n          1.8123096931809952\n         ],\n         \"y\": [\n          6.400029057167697,\n          6.399979102912118,\n          7.199977269743877,\n          7.200031695838008,\n          6.400029057167697\n         ],\n         \"z\": [\n          0.023292206961162812,\n          0.02766884734164822,\n          0.02799805272182345,\n          0.023615767898237508,\n          0.023292206961162812\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"lightskyblue\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          1.8123097130428614,\n          2.062271185276541,\n          2.06227112202711,\n          1.8123097349564945,\n          1.8123097130428614\n         ],\n         \"y\": [\n          7.200031695838008,\n          7.199977269743877,\n          7.999975559466232,\n          8.000034148296033,\n          7.200031695838008\n         ],\n         \"z\": [\n          0.023615767898237508,\n          0.02799805272182345,\n          0.028344763852801838,\n          0.023955616210629194,\n          0.023615767898237508\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"lightskyblue\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          1.8123097349564945,\n          2.06227112202711,\n          2.0622710567581843,\n          1.8123097587908352,\n          1.8123097349564945\n         ],\n         \"y\": [\n          8.000034148296033,\n          7.999975559466232,\n          8.79997406786439,\n          8.800036316222785,\n          8.000034148296033\n         ],\n         \"z\": [\n          0.023955616210629194,\n          0.028344763852801838,\n          0.028705743908251077,\n          0.024308558183696316,\n          0.023955616210629194\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"lightskyblue\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          1.8123097587908352,\n          2.0622710567581843,\n          2.0622709898272076,\n          1.812309784150342,\n          1.8123097587908352\n         ],\n         \"y\": [\n          8.800036316222785,\n          8.79997406786439,\n          9.599972698536526,\n          9.600038292975295,\n          8.800036316222785\n         ],\n         \"z\": [\n          0.024308558183696316,\n          0.028705743908251077,\n          0.02907805787516107,\n          0.02467175825347697,\n          0.024308558183696316\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"lightskyblue\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          1.812309784150342,\n          2.0622709898272076,\n          2.062270921802514,\n          1.8123098108800397,\n          1.812309784150342\n         ],\n         \"y\": [\n          9.600038292975295,\n          9.599972698536526,\n          10.399971546128839,\n          10.400039980171375,\n          9.600038292975295\n         ],\n         \"z\": [\n          0.02467175825347697,\n          0.02907805787516107,\n          0.029459184992631983,\n          0.025042818714815958,\n          0.02467175825347697\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"lightskyblue\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          1.8123098108800397,\n          2.062270921802514,\n          2.062270852938604,\n          1.8123098385802803,\n          1.8123098108800397\n         ],\n         \"y\": [\n          10.400039980171375,\n          10.399971546128839,\n          11.19997051240222,\n          11.200041470745928,\n          10.400039980171375\n         ],\n         \"z\": [\n          0.025042818714815958,\n          0.029459184992631983,\n          0.029846892176743862,\n          0.02541966496156141,\n          0.025042818714815958\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"lightskyblue\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          1.8123098385802803,\n          2.062270852938604,\n          2.0622707837054923,\n          1.812309867107981,\n          1.8123098385802803\n         ],\n         \"y\": [\n          11.200041470745928,\n          11.19997051240222,\n          11.999969689420412,\n          12.000042667086927,\n          11.200041470745928\n         ],\n         \"z\": [\n          0.02541966496156141,\n          0.029846892176743862,\n          0.030239352581490794,\n          0.025800639193156966,\n          0.02541966496156141\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"lightskyblue\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          1.812309867107981,\n          2.0622707837054923,\n          2.062270714260684,\n          1.8123098960957866,\n          1.812309867107981\n         ],\n         \"y\": [\n          12.000042667086927,\n          11.999969689420412,\n          12.799968977747897,\n          12.800043661532847,\n          12.000042667086927\n         ],\n         \"z\": [\n          0.025800639193156966,\n          0.030239352581490794,\n          0.03063501180854282,\n          0.026184363669349748,\n          0.025800639193156966\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"lightskyblue\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          1.8123098960957866,\n          2.062270714260684,\n          2.062270644971381,\n          1.8123099254371609,\n          1.8123098960957866\n         ],\n         \"y\": [\n          12.800043661532847,\n          12.799968977747897,\n          13.59996846484284,\n          13.60004436051208,\n          12.800043661532847\n         ],\n         \"z\": [\n          0.026184363669349748,\n          0.03063501180854282,\n          0.031032708986708006,\n          0.026569848578482658,\n          0.026184363669349748\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"lightskyblue\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          1.8123099254371609,\n          2.062270644971381,\n          2.0622705758989097,\n          1.8123099548260293,\n          1.8123099254371609\n         ],\n         \"y\": [\n          13.60004436051208,\n          13.59996846484284,\n          14.399968051251916,\n          14.40004485653229,\n          13.60004436051208\n         ],\n         \"z\": [\n          0.026569848578482658,\n          0.031032708986708006,\n          0.031431532185545494,\n          0.026956330992660843,\n          0.026569848578482658\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"lightskyblue\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          1.8123099548260293,\n          2.0622705758989097,\n          2.0622705072851923,\n          1.812309984197048,\n          1.8123099548260293\n         ],\n         \"y\": [\n          14.40004485653229,\n          14.399968051251916,\n          15.199967811736276,\n          15.200045070532308,\n          14.40004485653229\n         ],\n         \"z\": [\n          0.026956330992660843,\n          0.031431532185545494,\n          0.03183093248246228,\n          0.02734338968094543,\n          0.026956330992660843\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"lightskyblue\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"surfaceaxis\": 2,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          1.812309984197048,\n          2.0622705072851923,\n          2.062270439088722,\n          1.8123100133243386,\n          1.812309984197048\n         ],\n         \"y\": [\n          15.200045070532308,\n          15.199967811736276,\n          15.999967645165848,\n          16.00004509958812,\n          15.200045070532308\n         ],\n         \"z\": [\n          0.02734338968094543,\n          0.03183093248246228,\n          0.03223054948213675,\n          0.027730739956343724,\n          0.02734338968094543\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"grey\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          0.5625000000000001,\n          0.5624999942343187,\n          0.5624999847072422,\n          0.5624999722860239,\n          0.5624999575381,\n          0.5624999411107972,\n          0.5624999233436245,\n          0.5624999047080059,\n          0.56249988537789,\n          0.5624998656920386,\n          0.5624998457080345,\n          0.5624998256710535,\n          0.5624998055628219,\n          0.5624997855672028,\n          0.5624997656220664,\n          0.5624997458731538,\n          0.5624997262370887,\n          0.562499706832297,\n          0.5624996875668204,\n          0.5624996685230919,\n          0.5624996496027337\n         ],\n         \"y\": [\n          9.162206417444405e-18,\n          0.7999966402495885,\n          1.5999933810227123,\n          2.399990312319138,\n          3.1999873565514116,\n          3.9999846027816304,\n          4.799981962669224,\n          5.599979528793419,\n          6.399977212805474,\n          7.199975110259148,\n          7.999973133589262,\n          8.799971378307317,\n          9.59996975645606,\n          10.39996836102129,\n          11.199967103346411,\n          11.999966072300438,\n          12.799965179073068,\n          13.599964506028565,\n          14.399963964776944,\n          15.199963623110254,\n          15.99996339122673\n         ],\n         \"z\": [\n          4.871002816324649e-17,\n          3.4360542762473186e-05,\n          0.00013863466028518693,\n          0.0003053092113602273,\n          0.0005272092806341323,\n          0.0007975883806602837,\n          0.0011101083990921862,\n          0.001458895928473685,\n          0.0018385147642435145,\n          0.00224400658612019,\n          0.0026708584775881213,\n          0.0031150348110584127,\n          0.0035729392050654492,\n          0.004041445265628865,\n          0.004517852953449566,\n          0.0049999194902928795,\n          0.005485803105934123,\n          0.005974093414724043,\n          0.0064637340689429204,\n          0.0069540524735901225,\n          0.007444645756118045\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"grey\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          0.8124619250000001,\n          0.8124619134459421,\n          0.8124618930303587,\n          0.8124618649474605,\n          0.812461830109957,\n          0.8124617895303606,\n          0.8124617439231214,\n          0.8124616941475412,\n          0.812461640764451,\n          0.8124615845040528,\n          0.8124615258019251,\n          0.8124614652767873,\n          0.8124614032576343,\n          0.8124613402623917,\n          0.8124612765247785,\n          0.812461212465948,\n          0.8124611482303272,\n          0.8124610841393545,\n          0.8124610202506753,\n          0.8124609567699135,\n          0.812460893666179\n         ],\n         \"y\": [\n          9.162206417444405e-18,\n          0.7999973557508343,\n          1.599994811000482,\n          2.399992454598478,\n          3.1999902063390535,\n          3.9999881562546817,\n          4.799986214012396,\n          5.599984470124919,\n          6.399982829358027,\n          7.199981380818826,\n          7.999980027286746,\n          8.799978857160102,\n          9.59997777383543,\n          10.399976865445812,\n          11.199976037253185,\n          11.999975376131477,\n          12.799974789445866,\n          13.599974359937981,\n          14.399973996920059,\n          15.199973770005858,\n          15.999973587313422\n         ],\n         \"z\": [\n          0.004363102500000049,\n          0.0043955753776063365,\n          0.0044931958770315856,\n          0.004649043770950182,\n          0.004856514630134907,\n          0.005109416600361549,\n          0.005401911948040305,\n          0.005728596222836626,\n          0.006084428857723916,\n          0.006464810371519351,\n          0.00686551272588112,\n          0.007282754507096603,\n          0.007713132552295366,\n          0.0081536905087987,\n          0.00860184653090365,\n          0.00905545614957633,\n          0.009512733392875675,\n          0.009972311299224186,\n          0.010433151853577634,\n          0.010894598567877162,\n          0.011356252256599593\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"grey\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          1.06242385,\n          1.0624238509998334,\n          1.0624238543968563,\n          1.0624238606253473,\n          1.0624238698131283,\n          1.0624238821664975,\n          1.0624238975798306,\n          1.0624239160825706,\n          1.062423937405997,\n          1.0624239614547102,\n          1.0624239878559636,\n          1.0624240164391061,\n          1.062424046779832,\n          1.0624240786772026,\n          1.0624241117021795,\n          1.0624241456626615,\n          1.0624241801663046,\n          1.0624242150604906,\n          1.062424250024925,\n          1.062424284959919,\n          1.0624243196435175\n         ],\n         \"y\": [\n          9.162206417444405e-18,\n          0.8000041100488657,\n          1.6000081028650377,\n          2.4000118748560357,\n          3.2000154932795244,\n          4.000018860900871,\n          4.800022061050457,\n          5.600024997008804,\n          6.4000277557939675,\n          7.200030239978838,\n          8.000032537843335,\n          8.800034552976555,\n          9.600036375170923,\n          10.400037910905114,\n          11.200039251394067,\n          12.000040307290025,\n          12.800041170384995,\n          13.600041757575765,\n          14.40004216025581,\n          15.200042309462798,\n          16.0000422977623\n         ],\n         \"z\": [\n          0.00872620500000005,\n          0.008754989921580773,\n          0.00884477941056367,\n          0.008989074926814278,\n          0.009181700030089264,\n          0.009416892386339146,\n          0.009689248635280041,\n          0.009993797411684078,\n          0.01032591960212853,\n          0.010681425124526835,\n          0.01105645551949636,\n          0.011447569094086897,\n          0.011851630739051535,\n          0.012265908780960077,\n          0.012687962171243582,\n          0.013115745021976807,\n          0.01354749833673766,\n          0.013981850987710955,\n          0.01441771892949864,\n          0.014854388055001192,\n          0.015291409655183566\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"grey\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          1.312385775,\n          1.312385765590729,\n          1.3123857492560815,\n          1.312385727066829,\n          1.312385699803704,\n          1.3123856683437078,\n          1.3123856332589672,\n          1.312385595267562,\n          1.3123855547838665,\n          1.3123855123976538,\n          1.312385468400212,\n          1.3123854232768732,\n          1.3123853772210174,\n          1.312385330630465,\n          1.3123852836188357,\n          1.3123852365066258,\n          1.312385189340325,\n          1.3123851423655943,\n          1.312385095570038,\n          1.3123850491119522,\n          1.3123850029222204\n         ],\n         \"y\": [\n          9.162206417444405e-18,\n          0.7999967708512715,\n          1.5999936447026821,\n          2.399990713499301,\n          3.1999878994597233,\n          3.999985295937126,\n          4.799982815059392,\n          5.599980551570029,\n          6.399978412712719,\n          7.199976492431211,\n          7.999974695521935,\n          8.799973115398142,\n          9.599971656847169,\n          10.39997041301708,\n          11.19996929003901,\n          11.999968379665505,\n          12.799967589645137,\n          13.599967007102007,\n          14.399966541012066,\n          15.199966264105328,\n          15.99996608299767\n         ],\n         \"z\": [\n          0.01308930750000005,\n          0.013117808415149604,\n          0.013205038226600496,\n          0.013344567263095089,\n          0.013530285209410336,\n          0.013756498247063131,\n          0.014017868983988494,\n          0.014309495114931086,\n          0.014626828084469745,\n          0.014965753979210595,\n          0.015322499672438088,\n          0.015693722215994754,\n          0.01607640837769345,\n          0.01646796933785412,\n          0.01686613334272428,\n          0.01726904179198468,\n          0.01767513419496066,\n          0.018083244240899084,\n          0.018492473641254375,\n          0.01890228052834785,\n          0.019312320316468137\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"grey\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          1.5623477000000001,\n          1.562347690821025,\n          1.562347674799373,\n          1.5623476529459288,\n          1.5623476259926226,\n          1.5623475947770735,\n          1.5623475598403873,\n          1.562347521877352,\n          1.5623474812848825,\n          1.5623474386424068,\n          1.5623473942355086,\n          1.562347348551272,\n          1.5623473017883505,\n          1.562347254357797,\n          1.5623472063875883,\n          1.5623471582205557,\n          1.5623471099223738,\n          1.5623470617648778,\n          1.5623470137527669,\n          1.562346966066091,\n          1.5623469186425232\n         ],\n         \"y\": [\n          9.162206417444405e-18,\n          0.799997122848918,\n          1.5999943470993463,\n          2.3999917639131514,\n          3.1999892952201012,\n          3.9999870303856278,\n          4.799984878111898,\n          5.59998292970836,\n          6.399981091454103,\n          7.199979457022128,\n          7.999977932154519,\n          8.799976610851648,\n          9.599975397732855,\n          10.399974384962816,\n          11.199973475852698,\n          11.999972759265718,\n          12.79997213800772,\n          13.599971695647595,\n          14.399971335726036,\n          15.199971128670821,\n          15.999970977392403\n         ],\n         \"z\": [\n          0.01745241000000005,\n          0.017480923114039832,\n          0.017567366251003295,\n          0.017705147752285617,\n          0.017888002109101492,\n          0.01811008298364314,\n          0.018365920918453814,\n          0.018650494977104467,\n          0.01895918067700987,\n          0.019287816111895742,\n          0.019632644031693732,\n          0.019990371655679427,\n          0.020358098718006947,\n          0.020733377306197856,\n          0.021114119572776275,\n          0.021498666720439867,\n          0.02188566981939099,\n          0.022274172724010707,\n          0.022663458304022048,\n          0.023053144166224608,\n          0.023442975805592004\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"grey\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          1.8123096250000001,\n          1.8123096252793973,\n          1.8123096273998411,\n          1.812309631841271,\n          1.812309638767255,\n          1.8123096484183707,\n          1.8123096607152773,\n          1.8123096757177453,\n          1.8123096931809952,\n          1.8123097130428614,\n          1.8123097349564945,\n          1.8123097587908352,\n          1.812309784150342,\n          1.8123098108800397,\n          1.8123098385802803,\n          1.812309867107981,\n          1.8123098960957866,\n          1.8123099254371609,\n          1.8123099548260293,\n          1.812309984197048,\n          1.8123100133243386\n         ],\n         \"y\": [\n          9.162206417444405e-18,\n          0.8000042711855221,\n          1.6000084254430789,\n          2.4000123599611722,\n          3.2000161441788317,\n          4.000019677718904,\n          4.800023043050683,\n          5.600026139930303,\n          6.400029057167697,\n          7.200031695838008,\n          8.000034148296033,\n          8.800036316222785,\n          9.600038292975295,\n          10.400039980171375,\n          11.200041470745928,\n          12.000042667086927,\n          12.800043661532847,\n          13.60004436051208,\n          14.40004485653229,\n          15.200045070532308,\n          16.00004509958812\n         ],\n         \"z\": [\n          0.02181551250000005,\n          0.021842245662087735,\n          0.021926181197280452,\n          0.02206079417356827,\n          0.02223989477813403,\n          0.022457724482343875,\n          0.022708920175087563,\n          0.022988579886379087,\n          0.023292206961162812,\n          0.023615767898237508,\n          0.023955616210629194,\n          0.024308558183696316,\n          0.02467175825347697,\n          0.025042818714815958,\n          0.02541966496156141,\n          0.025800639193156966,\n          0.026184363669349748,\n          0.026569848578482658,\n          0.026956330992660843,\n          0.02734338968094543,\n          0.027730739956343724\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"grey\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          2.06227155,\n          2.062271537819961,\n          2.0622715161497642,\n          2.062271486229936,\n          2.062271449019728,\n          2.062271405583596,\n          2.062271356683286,\n          2.062271303232613,\n          2.0622712458356625,\n          2.062271185276541,\n          2.06227112202711,\n          2.0622710567581843,\n          2.0622709898272076,\n          2.062270921802514,\n          2.062270852938604,\n          2.0622707837054923,\n          2.062270714260684,\n          2.062270644971381,\n          2.0622705758989097,\n          2.0622705072851923,\n          2.062270439088722\n         ],\n         \"y\": [\n          9.162206417444405e-18,\n          0.7999968504395711,\n          1.5999938047112736,\n          2.399990956607656,\n          3.199988230166699,\n          3.999985717099869,\n          4.799983327325806,\n          5.59998115379444,\n          6.399979102912118,\n          7.199977269743877,\n          7.999975559466232,\n          8.79997406786439,\n          9.599972698536526,\n          10.399971546128839,\n          11.19997051240222,\n          11.999969689420412,\n          12.799968977747897,\n          13.59996846484284,\n          14.399968051251916,\n          15.199967811736276,\n          15.999967645165848\n         ],\n         \"z\": [\n          0.02617861500000005,\n          0.026206145672870378,\n          0.02629050138818445,\n          0.026425515849181777,\n          0.02660533252262167,\n          0.026824499204128972,\n          0.027077892142435816,\n          0.027360804287995796,\n          0.02766884734164822,\n          0.02799805272182345,\n          0.028344763852801838,\n          0.028705743908251077,\n          0.02907805787516107,\n          0.029459184992631983,\n          0.029846892176743862,\n          0.030239352581490794,\n          0.03063501180854282,\n          0.031032708986708006,\n          0.031431532185545494,\n          0.03183093248246228,\n          0.03223054948213675\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"grey\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          0.5625000000000001,\n          0.8124619250000001,\n          1.06242385,\n          1.312385775,\n          1.5623477000000001,\n          1.8123096250000001,\n          2.06227155\n         ],\n         \"y\": [\n          9.162206417444405e-18,\n          9.162206417444405e-18,\n          9.162206417444405e-18,\n          9.162206417444405e-18,\n          9.162206417444405e-18,\n          9.162206417444405e-18,\n          9.162206417444405e-18\n         ],\n         \"z\": [\n          4.871002816324649e-17,\n          0.004363102500000049,\n          0.00872620500000005,\n          0.01308930750000005,\n          0.01745241000000005,\n          0.02181551250000005,\n          0.02617861500000005\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"grey\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          0.5624999942343187,\n          0.8124619134459421,\n          1.0624238509998334,\n          1.312385765590729,\n          1.562347690821025,\n          1.8123096252793973,\n          2.062271537819961\n         ],\n         \"y\": [\n          0.7999966402495885,\n          0.7999973557508343,\n          0.8000041100488657,\n          0.7999967708512715,\n          0.799997122848918,\n          0.8000042711855221,\n          0.7999968504395711\n         ],\n         \"z\": [\n          3.4360542762473186e-05,\n          0.0043955753776063365,\n          0.008754989921580773,\n          0.013117808415149604,\n          0.017480923114039832,\n          0.021842245662087735,\n          0.026206145672870378\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"grey\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          0.5624999847072422,\n          0.8124618930303587,\n          1.0624238543968563,\n          1.3123857492560815,\n          1.562347674799373,\n          1.8123096273998411,\n          2.0622715161497642\n         ],\n         \"y\": [\n          1.5999933810227123,\n          1.599994811000482,\n          1.6000081028650377,\n          1.5999936447026821,\n          1.5999943470993463,\n          1.6000084254430789,\n          1.5999938047112736\n         ],\n         \"z\": [\n          0.00013863466028518693,\n          0.0044931958770315856,\n          0.00884477941056367,\n          0.013205038226600496,\n          0.017567366251003295,\n          0.021926181197280452,\n          0.02629050138818445\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"grey\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          0.5624999722860239,\n          0.8124618649474605,\n          1.0624238606253473,\n          1.312385727066829,\n          1.5623476529459288,\n          1.812309631841271,\n          2.062271486229936\n         ],\n         \"y\": [\n          2.399990312319138,\n          2.399992454598478,\n          2.4000118748560357,\n          2.399990713499301,\n          2.3999917639131514,\n          2.4000123599611722,\n          2.399990956607656\n         ],\n         \"z\": [\n          0.0003053092113602273,\n          0.004649043770950182,\n          0.008989074926814278,\n          0.013344567263095089,\n          0.017705147752285617,\n          0.02206079417356827,\n          0.026425515849181777\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"grey\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          0.5624999575381,\n          0.812461830109957,\n          1.0624238698131283,\n          1.312385699803704,\n          1.5623476259926226,\n          1.812309638767255,\n          2.062271449019728\n         ],\n         \"y\": [\n          3.1999873565514116,\n          3.1999902063390535,\n          3.2000154932795244,\n          3.1999878994597233,\n          3.1999892952201012,\n          3.2000161441788317,\n          3.199988230166699\n         ],\n         \"z\": [\n          0.0005272092806341323,\n          0.004856514630134907,\n          0.009181700030089264,\n          0.013530285209410336,\n          0.017888002109101492,\n          0.02223989477813403,\n          0.02660533252262167\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"grey\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          0.5624999411107972,\n          0.8124617895303606,\n          1.0624238821664975,\n          1.3123856683437078,\n          1.5623475947770735,\n          1.8123096484183707,\n          2.062271405583596\n         ],\n         \"y\": [\n          3.9999846027816304,\n          3.9999881562546817,\n          4.000018860900871,\n          3.999985295937126,\n          3.9999870303856278,\n          4.000019677718904,\n          3.999985717099869\n         ],\n         \"z\": [\n          0.0007975883806602837,\n          0.005109416600361549,\n          0.009416892386339146,\n          0.013756498247063131,\n          0.01811008298364314,\n          0.022457724482343875,\n          0.026824499204128972\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"grey\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          0.5624999233436245,\n          0.8124617439231214,\n          1.0624238975798306,\n          1.3123856332589672,\n          1.5623475598403873,\n          1.8123096607152773,\n          2.062271356683286\n         ],\n         \"y\": [\n          4.799981962669224,\n          4.799986214012396,\n          4.800022061050457,\n          4.799982815059392,\n          4.799984878111898,\n          4.800023043050683,\n          4.799983327325806\n         ],\n         \"z\": [\n          0.0011101083990921862,\n          0.005401911948040305,\n          0.009689248635280041,\n          0.014017868983988494,\n          0.018365920918453814,\n          0.022708920175087563,\n          0.027077892142435816\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"grey\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          0.5624999047080059,\n          0.8124616941475412,\n          1.0624239160825706,\n          1.312385595267562,\n          1.562347521877352,\n          1.8123096757177453,\n          2.062271303232613\n         ],\n         \"y\": [\n          5.599979528793419,\n          5.599984470124919,\n          5.600024997008804,\n          5.599980551570029,\n          5.59998292970836,\n          5.600026139930303,\n          5.59998115379444\n         ],\n         \"z\": [\n          0.001458895928473685,\n          0.005728596222836626,\n          0.009993797411684078,\n          0.014309495114931086,\n          0.018650494977104467,\n          0.022988579886379087,\n          0.027360804287995796\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"grey\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          0.56249988537789,\n          0.812461640764451,\n          1.062423937405997,\n          1.3123855547838665,\n          1.5623474812848825,\n          1.8123096931809952,\n          2.0622712458356625\n         ],\n         \"y\": [\n          6.399977212805474,\n          6.399982829358027,\n          6.4000277557939675,\n          6.399978412712719,\n          6.399981091454103,\n          6.400029057167697,\n          6.399979102912118\n         ],\n         \"z\": [\n          0.0018385147642435145,\n          0.006084428857723916,\n          0.01032591960212853,\n          0.014626828084469745,\n          0.01895918067700987,\n          0.023292206961162812,\n          0.02766884734164822\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"grey\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          0.5624998656920386,\n          0.8124615845040528,\n          1.0624239614547102,\n          1.3123855123976538,\n          1.5623474386424068,\n          1.8123097130428614,\n          2.062271185276541\n         ],\n         \"y\": [\n          7.199975110259148,\n          7.199981380818826,\n          7.200030239978838,\n          7.199976492431211,\n          7.199979457022128,\n          7.200031695838008,\n          7.199977269743877\n         ],\n         \"z\": [\n          0.00224400658612019,\n          0.006464810371519351,\n          0.010681425124526835,\n          0.014965753979210595,\n          0.019287816111895742,\n          0.023615767898237508,\n          0.02799805272182345\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"grey\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          0.5624998457080345,\n          0.8124615258019251,\n          1.0624239878559636,\n          1.312385468400212,\n          1.5623473942355086,\n          1.8123097349564945,\n          2.06227112202711\n         ],\n         \"y\": [\n          7.999973133589262,\n          7.999980027286746,\n          8.000032537843335,\n          7.999974695521935,\n          7.999977932154519,\n          8.000034148296033,\n          7.999975559466232\n         ],\n         \"z\": [\n          0.0026708584775881213,\n          0.00686551272588112,\n          0.01105645551949636,\n          0.015322499672438088,\n          0.019632644031693732,\n          0.023955616210629194,\n          0.028344763852801838\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"grey\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          0.5624998256710535,\n          0.8124614652767873,\n          1.0624240164391061,\n          1.3123854232768732,\n          1.562347348551272,\n          1.8123097587908352,\n          2.0622710567581843\n         ],\n         \"y\": [\n          8.799971378307317,\n          8.799978857160102,\n          8.800034552976555,\n          8.799973115398142,\n          8.799976610851648,\n          8.800036316222785,\n          8.79997406786439\n         ],\n         \"z\": [\n          0.0031150348110584127,\n          0.007282754507096603,\n          0.011447569094086897,\n          0.015693722215994754,\n          0.019990371655679427,\n          0.024308558183696316,\n          0.028705743908251077\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"grey\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          0.5624998055628219,\n          0.8124614032576343,\n          1.062424046779832,\n          1.3123853772210174,\n          1.5623473017883505,\n          1.812309784150342,\n          2.0622709898272076\n         ],\n         \"y\": [\n          9.59996975645606,\n          9.59997777383543,\n          9.600036375170923,\n          9.599971656847169,\n          9.599975397732855,\n          9.600038292975295,\n          9.599972698536526\n         ],\n         \"z\": [\n          0.0035729392050654492,\n          0.007713132552295366,\n          0.011851630739051535,\n          0.01607640837769345,\n          0.020358098718006947,\n          0.02467175825347697,\n          0.02907805787516107\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"grey\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          0.5624997855672028,\n          0.8124613402623917,\n          1.0624240786772026,\n          1.312385330630465,\n          1.562347254357797,\n          1.8123098108800397,\n          2.062270921802514\n         ],\n         \"y\": [\n          10.39996836102129,\n          10.399976865445812,\n          10.400037910905114,\n          10.39997041301708,\n          10.399974384962816,\n          10.400039980171375,\n          10.399971546128839\n         ],\n         \"z\": [\n          0.004041445265628865,\n          0.0081536905087987,\n          0.012265908780960077,\n          0.01646796933785412,\n          0.020733377306197856,\n          0.025042818714815958,\n          0.029459184992631983\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"grey\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          0.5624997656220664,\n          0.8124612765247785,\n          1.0624241117021795,\n          1.3123852836188357,\n          1.5623472063875883,\n          1.8123098385802803,\n          2.062270852938604\n         ],\n         \"y\": [\n          11.199967103346411,\n          11.199976037253185,\n          11.200039251394067,\n          11.19996929003901,\n          11.199973475852698,\n          11.200041470745928,\n          11.19997051240222\n         ],\n         \"z\": [\n          0.004517852953449566,\n          0.00860184653090365,\n          0.012687962171243582,\n          0.01686613334272428,\n          0.021114119572776275,\n          0.02541966496156141,\n          0.029846892176743862\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"grey\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          0.5624997458731538,\n          0.812461212465948,\n          1.0624241456626615,\n          1.3123852365066258,\n          1.5623471582205557,\n          1.812309867107981,\n          2.0622707837054923\n         ],\n         \"y\": [\n          11.999966072300438,\n          11.999975376131477,\n          12.000040307290025,\n          11.999968379665505,\n          11.999972759265718,\n          12.000042667086927,\n          11.999969689420412\n         ],\n         \"z\": [\n          0.0049999194902928795,\n          0.00905545614957633,\n          0.013115745021976807,\n          0.01726904179198468,\n          0.021498666720439867,\n          0.025800639193156966,\n          0.030239352581490794\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"grey\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          0.5624997262370887,\n          0.8124611482303272,\n          1.0624241801663046,\n          1.312385189340325,\n          1.5623471099223738,\n          1.8123098960957866,\n          2.062270714260684\n         ],\n         \"y\": [\n          12.799965179073068,\n          12.799974789445866,\n          12.800041170384995,\n          12.799967589645137,\n          12.79997213800772,\n          12.800043661532847,\n          12.799968977747897\n         ],\n         \"z\": [\n          0.005485803105934123,\n          0.009512733392875675,\n          0.01354749833673766,\n          0.01767513419496066,\n          0.02188566981939099,\n          0.026184363669349748,\n          0.03063501180854282\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"grey\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          0.562499706832297,\n          0.8124610841393545,\n          1.0624242150604906,\n          1.3123851423655943,\n          1.5623470617648778,\n          1.8123099254371609,\n          2.062270644971381\n         ],\n         \"y\": [\n          13.599964506028565,\n          13.599974359937981,\n          13.600041757575765,\n          13.599967007102007,\n          13.599971695647595,\n          13.60004436051208,\n          13.59996846484284\n         ],\n         \"z\": [\n          0.005974093414724043,\n          0.009972311299224186,\n          0.013981850987710955,\n          0.018083244240899084,\n          0.022274172724010707,\n          0.026569848578482658,\n          0.031032708986708006\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"grey\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          0.5624996875668204,\n          0.8124610202506753,\n          1.062424250024925,\n          1.312385095570038,\n          1.5623470137527669,\n          1.8123099548260293,\n          2.0622705758989097\n         ],\n         \"y\": [\n          14.399963964776944,\n          14.399973996920059,\n          14.40004216025581,\n          14.399966541012066,\n          14.399971335726036,\n          14.40004485653229,\n          14.399968051251916\n         ],\n         \"z\": [\n          0.0064637340689429204,\n          0.010433151853577634,\n          0.01441771892949864,\n          0.018492473641254375,\n          0.022663458304022048,\n          0.026956330992660843,\n          0.031431532185545494\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"grey\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          0.5624996685230919,\n          0.8124609567699135,\n          1.062424284959919,\n          1.3123850491119522,\n          1.562346966066091,\n          1.812309984197048,\n          2.0622705072851923\n         ],\n         \"y\": [\n          15.199963623110254,\n          15.199973770005858,\n          15.200042309462798,\n          15.199966264105328,\n          15.199971128670821,\n          15.200045070532308,\n          15.199967811736276\n         ],\n         \"z\": [\n          0.0069540524735901225,\n          0.010894598567877162,\n          0.014854388055001192,\n          0.01890228052834785,\n          0.023053144166224608,\n          0.02734338968094543,\n          0.03183093248246228\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"grey\"\n         },\n         \"mode\": \"lines\",\n         \"showlegend\": false,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          0.5624996496027337,\n          0.812460893666179,\n          1.0624243196435175,\n          1.3123850029222204,\n          1.5623469186425232,\n          1.8123100133243386,\n          2.062270439088722\n         ],\n         \"y\": [\n          15.99996339122673,\n          15.999973587313422,\n          16.0000422977623,\n          15.99996608299767,\n          15.999970977392403,\n          16.00004509958812,\n          15.999967645165848\n         ],\n         \"z\": [\n          0.007444645756118045,\n          0.011356252256599593,\n          0.015291409655183566,\n          0.019312320316468137,\n          0.023442975805592004,\n          0.027730739956343724,\n          0.03223054948213675\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"blue\",\n          \"width\": 4\n         },\n         \"marker\": {\n          \"color\": \"blue\",\n          \"size\": 2\n         },\n         \"name\": \"Beam nodes\",\n         \"type\": \"scatter3d\",\n         \"x\": [\n          0,\n          -5.744151761391617e-09,\n          -1.5210804262961445e-08\n         ],\n         \"y\": [\n          0,\n          0.7999999988577322,\n          1.599999991380492\n         ],\n         \"z\": [\n          0,\n          3.772280096999739e-05,\n          0.00014525289792429068\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"blue\",\n          \"width\": 4\n         },\n         \"marker\": {\n          \"color\": \"blue\",\n          \"size\": 2\n         },\n         \"showlegend\": false,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          -1.5210804262961445e-08,\n          -2.7539794264483134e-08,\n          -4.216701299251646e-08\n         ],\n         \"y\": [\n          1.599999991380492,\n          2.399999973222394,\n          3.1999999414783504\n         ],\n         \"z\": [\n          0.00014525289792429068,\n          0.00031498257127698524,\n          0.0005398114325280645\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"blue\",\n          \"width\": 4\n         },\n         \"marker\": {\n          \"color\": \"blue\",\n          \"size\": 2\n         },\n         \"showlegend\": false,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          -4.216701299251646e-08,\n          -5.845413791416317e-08,\n          -7.606245469415831e-08\n         ],\n         \"y\": [\n          3.1999999414783504,\n          3.999999894782558,\n          4.7999998326433255\n         ],\n         \"z\": [\n          0.0005398114325280645,\n          0.0008129023493327658,\n          0.0011280049766697654\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"blue\",\n          \"width\": 4\n         },\n         \"marker\": {\n          \"color\": \"blue\",\n          \"size\": 2\n         },\n         \"showlegend\": false,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          -7.606245469415831e-08,\n          -9.453085004776112e-08,\n          -1.1368390921713924e-07\n         ],\n         \"y\": [\n          4.7999998326433255,\n          5.599999755537855,\n          6.399999664368964\n         ],\n         \"z\": [\n          0.0011280049766697654,\n          0.0014791536130117535,\n          0.001861001288697979\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"blue\",\n          \"width\": 4\n         },\n         \"marker\": {\n          \"color\": \"blue\",\n          \"size\": 2\n         },\n         \"showlegend\": false,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          -1.1368390921713924e-07,\n          -1.3319431737429714e-07,\n          -1.530010581380602e-07\n         ],\n         \"y\": [\n          6.399999664368964,\n          7.199999560573655,\n          7.999999445686861\n         ],\n         \"z\": [\n          0.001861001288697979,\n          0.0022684954019804547,\n          0.002697212175686842\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"blue\",\n          \"width\": 4\n         },\n         \"marker\": {\n          \"color\": \"blue\",\n          \"size\": 2\n         },\n         \"showlegend\": false,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          -1.530010581380602e-07,\n          -1.7287111886294816e-07,\n          -1.9281747647171713e-07\n         ],\n         \"y\": [\n          7.999999445686861,\n          8.799999321471196,\n          9.599999189568887\n         ],\n         \"z\": [\n          0.002697212175686842,\n          0.003143022099371802,\n          0.0036024184792496066\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"blue\",\n          \"width\": 4\n         },\n         \"marker\": {\n          \"color\": \"blue\",\n          \"size\": 2\n         },\n         \"showlegend\": false,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          -1.9281747647171713e-07,\n          -2.1266860132434275e-07,\n          -2.3247960013933078e-07\n         ],\n         \"y\": [\n          9.599999189568887,\n          10.39999905165165,\n          11.199998909140675\n         ],\n         \"z\": [\n          0.0036024184792496066,\n          0.004072183506411567,\n          0.0045497073476323795\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"blue\",\n          \"width\": 4\n         },\n         \"marker\": {\n          \"color\": \"blue\",\n          \"size\": 2\n         },\n         \"showlegend\": false,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          -2.3247960013933078e-07,\n          -2.5211672422140153e-07,\n          -2.716548617367966e-07\n         ],\n         \"y\": [\n          11.199998909140675,\n          11.99999876337341,\n          12.79999861537811\n         ],\n         \"z\": [\n          0.0045497073476323795,\n          0.0050326596228963995,\n          0.005519288553995972\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"blue\",\n          \"width\": 4\n         },\n         \"marker\": {\n          \"color\": \"blue\",\n          \"size\": 2\n         },\n         \"showlegend\": false,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          -2.716548617367966e-07,\n          -2.909866574188866e-07,\n          -3.1019442919001244e-07\n         ],\n         \"y\": [\n          12.79999861537811,\n          13.599998466051524,\n          14.399998315980117\n         ],\n         \"z\": [\n          0.005519288553995972,\n          0.006008102239037706,\n          0.006498133464216941\n         ]\n        },\n        {\n         \"line\": {\n          \"color\": \"blue\",\n          \"width\": 4\n         },\n         \"marker\": {\n          \"color\": \"blue\",\n          \"size\": 2\n         },\n         \"showlegend\": false,\n         \"type\": \"scatter3d\",\n         \"x\": [\n          -3.1019442919001244e-07,\n          -3.292046679170043e-07,\n          -3.481050287225777e-07\n         ],\n         \"y\": [\n          14.399998315980117,\n          15.19999816561613,\n          15.999998015150949\n         ],\n         \"z\": [\n          0.006498133464216941,\n          0.0069886422578113614,\n          0.007479315882477229\n         ]\n        }\n       ],\n       \"layout\": {\n        \"autosize\": true,\n        \"scene\": {\n         \"aspectmode\": \"auto\",\n         \"aspectratio\": {\n          \"x\": 1,\n          \"y\": 1,\n          \"z\": 1\n         },\n         \"camera\": {\n          \"center\": {\n           \"x\": 0,\n           \"y\": 0,\n           \"z\": 0\n          },\n          \"eye\": {\n           \"x\": -1.3300269636921596,\n           \"y\": -1.3537526742580583,\n           \"z\": 1.042056607287229\n          },\n          \"projection\": {\n           \"type\": \"perspective\"\n          },\n          \"up\": {\n           \"x\": 0,\n           \"y\": 0,\n           \"z\": 1\n          }\n         }\n        },\n        \"template\": {\n         \"data\": {\n          \"bar\": [\n           {\n            \"error_x\": {\n             \"color\": \"#2a3f5f\"\n            },\n            \"error_y\": {\n             \"color\": \"#2a3f5f\"\n            },\n            \"marker\": {\n             \"line\": {\n              \"color\": \"#E5ECF6\",\n              \"width\": 0.5\n             },\n             \"pattern\": {\n              \"fillmode\": \"overlay\",\n              \"size\": 10,\n              \"solidity\": 0.2\n             }\n            },\n            \"type\": \"bar\"\n           }\n          ],\n          \"barpolar\": [\n           {\n            \"marker\": {\n             \"line\": {\n              \"color\": \"#E5ECF6\",\n              \"width\": 0.5\n             },\n             \"pattern\": {\n              \"fillmode\": \"overlay\",\n              \"size\": 10,\n              \"solidity\": 0.2\n             }\n            },\n            \"type\": \"barpolar\"\n           }\n          ],\n          \"carpet\": [\n           {\n            \"aaxis\": {\n             \"endlinecolor\": \"#2a3f5f\",\n             \"gridcolor\": \"white\",\n             \"linecolor\": \"white\",\n             \"minorgridcolor\": \"white\",\n             \"startlinecolor\": \"#2a3f5f\"\n            },\n            \"baxis\": {\n             \"endlinecolor\": \"#2a3f5f\",\n             \"gridcolor\": \"white\",\n             \"linecolor\": \"white\",\n             \"minorgridcolor\": \"white\",\n             \"startlinecolor\": \"#2a3f5f\"\n            },\n            \"type\": \"carpet\"\n           }\n          ],\n          \"choropleth\": [\n           {\n            \"colorbar\": {\n             \"outlinewidth\": 0,\n             \"ticks\": \"\"\n            },\n            \"type\": \"choropleth\"\n           }\n          ],\n          \"contour\": [\n           {\n            \"colorbar\": {\n             \"outlinewidth\": 0,\n             \"ticks\": \"\"\n            },\n            \"colorscale\": [\n             [\n              0,\n              \"#0d0887\"\n             ],\n             [\n              0.1111111111111111,\n              \"#46039f\"\n             ],\n             [\n              0.2222222222222222,\n              \"#7201a8\"\n             ],\n             [\n              0.3333333333333333,\n              \"#9c179e\"\n             ],\n             [\n              0.4444444444444444,\n              \"#bd3786\"\n             ],\n             [\n              0.5555555555555556,\n              \"#d8576b\"\n             ],\n             [\n              0.6666666666666666,\n              \"#ed7953\"\n             ],\n             [\n              0.7777777777777778,\n              \"#fb9f3a\"\n             ],\n             [\n              0.8888888888888888,\n              \"#fdca26\"\n             ],\n             [\n              1,\n              \"#f0f921\"\n             ]\n            ],\n            \"type\": \"contour\"\n           }\n          ],\n          \"contourcarpet\": [\n           {\n            \"colorbar\": {\n             \"outlinewidth\": 0,\n             \"ticks\": \"\"\n            },\n            \"type\": \"contourcarpet\"\n           }\n          ],\n          \"heatmap\": [\n           {\n            \"colorbar\": {\n             \"outlinewidth\": 0,\n             \"ticks\": \"\"\n            },\n            \"colorscale\": [\n             [\n              0,\n              \"#0d0887\"\n             ],\n             [\n              0.1111111111111111,\n              \"#46039f\"\n             ],\n             [\n              0.2222222222222222,\n              \"#7201a8\"\n             ],\n             [\n              0.3333333333333333,\n              \"#9c179e\"\n             ],\n             [\n              0.4444444444444444,\n              \"#bd3786\"\n             ],\n             [\n              0.5555555555555556,\n              \"#d8576b\"\n             ],\n             [\n              0.6666666666666666,\n              \"#ed7953\"\n             ],\n             [\n              0.7777777777777778,\n              \"#fb9f3a\"\n             ],\n             [\n              0.8888888888888888,\n              \"#fdca26\"\n             ],\n             [\n              1,\n              \"#f0f921\"\n             ]\n            ],\n            \"type\": \"heatmap\"\n           }\n          ],\n          \"heatmapgl\": [\n           {\n            \"colorbar\": {\n             \"outlinewidth\": 0,\n             \"ticks\": \"\"\n            },\n            \"colorscale\": [\n             [\n              0,\n              \"#0d0887\"\n             ],\n             [\n              0.1111111111111111,\n              \"#46039f\"\n             ],\n             [\n              0.2222222222222222,\n              \"#7201a8\"\n             ],\n             [\n              0.3333333333333333,\n              \"#9c179e\"\n             ],\n             [\n              0.4444444444444444,\n              \"#bd3786\"\n             ],\n             [\n              0.5555555555555556,\n              \"#d8576b\"\n             ],\n             [\n              0.6666666666666666,\n              \"#ed7953\"\n             ],\n             [\n              0.7777777777777778,\n              \"#fb9f3a\"\n             ],\n             [\n              0.8888888888888888,\n              \"#fdca26\"\n             ],\n             [\n              1,\n              \"#f0f921\"\n             ]\n            ],\n            \"type\": \"heatmapgl\"\n           }\n          ],\n          \"histogram\": [\n           {\n            \"marker\": {\n             \"pattern\": {\n              \"fillmode\": \"overlay\",\n              \"size\": 10,\n              \"solidity\": 0.2\n             }\n            },\n            \"type\": \"histogram\"\n           }\n          ],\n          \"histogram2d\": [\n           {\n            \"colorbar\": {\n             \"outlinewidth\": 0,\n             \"ticks\": \"\"\n            },\n            \"colorscale\": [\n             [\n              0,\n              \"#0d0887\"\n             ],\n             [\n              0.1111111111111111,\n              \"#46039f\"\n             ],\n             [\n              0.2222222222222222,\n              \"#7201a8\"\n             ],\n             [\n              0.3333333333333333,\n              \"#9c179e\"\n             ],\n             [\n              0.4444444444444444,\n              \"#bd3786\"\n             ],\n             [\n              0.5555555555555556,\n              \"#d8576b\"\n             ],\n             [\n              0.6666666666666666,\n              \"#ed7953\"\n             ],\n             [\n              0.7777777777777778,\n              \"#fb9f3a\"\n             ],\n             [\n              0.8888888888888888,\n              \"#fdca26\"\n             ],\n             [\n              1,\n              \"#f0f921\"\n             ]\n            ],\n            \"type\": \"histogram2d\"\n           }\n          ],\n          \"histogram2dcontour\": [\n           {\n            \"colorbar\": {\n             \"outlinewidth\": 0,\n             \"ticks\": \"\"\n            },\n            \"colorscale\": [\n             [\n              0,\n              \"#0d0887\"\n             ],\n             [\n              0.1111111111111111,\n              \"#46039f\"\n             ],\n             [\n              0.2222222222222222,\n              \"#7201a8\"\n             ],\n             [\n              0.3333333333333333,\n              \"#9c179e\"\n             ],\n             [\n              0.4444444444444444,\n              \"#bd3786\"\n             ],\n             [\n              0.5555555555555556,\n              \"#d8576b\"\n             ],\n             [\n              0.6666666666666666,\n              \"#ed7953\"\n             ],\n             [\n              0.7777777777777778,\n              \"#fb9f3a\"\n             ],\n             [\n              0.8888888888888888,\n              \"#fdca26\"\n             ],\n             [\n              1,\n              \"#f0f921\"\n             ]\n            ],\n            \"type\": \"histogram2dcontour\"\n           }\n          ],\n          \"mesh3d\": [\n           {\n            \"colorbar\": {\n             \"outlinewidth\": 0,\n             \"ticks\": \"\"\n            },\n            \"type\": \"mesh3d\"\n           }\n          ],\n          \"parcoords\": [\n           {\n            \"line\": {\n             \"colorbar\": {\n              \"outlinewidth\": 0,\n              \"ticks\": \"\"\n             }\n            },\n            \"type\": \"parcoords\"\n           }\n          ],\n          \"pie\": [\n           {\n            \"automargin\": true,\n            \"type\": \"pie\"\n           }\n          ],\n          \"scatter\": [\n           {\n            \"fillpattern\": {\n             \"fillmode\": \"overlay\",\n             \"size\": 10,\n             \"solidity\": 0.2\n            },\n            \"type\": \"scatter\"\n           }\n          ],\n          \"scatter3d\": [\n           {\n            \"line\": {\n             \"colorbar\": {\n              \"outlinewidth\": 0,\n              \"ticks\": \"\"\n             }\n            },\n            \"marker\": {\n             \"colorbar\": {\n              \"outlinewidth\": 0,\n              \"ticks\": \"\"\n             }\n            },\n            \"type\": \"scatter3d\"\n           }\n          ],\n          \"scattercarpet\": [\n           {\n            \"marker\": {\n             \"colorbar\": {\n              \"outlinewidth\": 0,\n              \"ticks\": \"\"\n             }\n            },\n            \"type\": \"scattercarpet\"\n           }\n          ],\n          \"scattergeo\": [\n           {\n            \"marker\": {\n             \"colorbar\": {\n              \"outlinewidth\": 0,\n              \"ticks\": \"\"\n             }\n            },\n            \"type\": \"scattergeo\"\n           }\n          ],\n          \"scattergl\": [\n           {\n            \"marker\": {\n             \"colorbar\": {\n              \"outlinewidth\": 0,\n              \"ticks\": \"\"\n             }\n            },\n            \"type\": \"scattergl\"\n           }\n          ],\n          \"scattermapbox\": [\n           {\n            \"marker\": {\n             \"colorbar\": {\n              \"outlinewidth\": 0,\n              \"ticks\": \"\"\n             }\n            },\n            \"type\": \"scattermapbox\"\n           }\n          ],\n          \"scatterpolar\": [\n           {\n            \"marker\": {\n             \"colorbar\": {\n              \"outlinewidth\": 0,\n              \"ticks\": \"\"\n             }\n            },\n            \"type\": \"scatterpolar\"\n           }\n          ],\n          \"scatterpolargl\": [\n           {\n            \"marker\": {\n             \"colorbar\": {\n              \"outlinewidth\": 0,\n              \"ticks\": \"\"\n             }\n            },\n            \"type\": \"scatterpolargl\"\n           }\n          ],\n          \"scatterternary\": [\n           {\n            \"marker\": {\n             \"colorbar\": {\n              \"outlinewidth\": 0,\n              \"ticks\": \"\"\n             }\n            },\n            \"type\": \"scatterternary\"\n           }\n          ],\n          \"surface\": [\n           {\n            \"colorbar\": {\n             \"outlinewidth\": 0,\n             \"ticks\": \"\"\n            },\n            \"colorscale\": [\n             [\n              0,\n              \"#0d0887\"\n             ],\n             [\n              0.1111111111111111,\n              \"#46039f\"\n             ],\n             [\n              0.2222222222222222,\n              \"#7201a8\"\n             ],\n             [\n              0.3333333333333333,\n              \"#9c179e\"\n             ],\n             [\n              0.4444444444444444,\n              \"#bd3786\"\n             ],\n             [\n              0.5555555555555556,\n              \"#d8576b\"\n             ],\n             [\n              0.6666666666666666,\n              \"#ed7953\"\n             ],\n             [\n              0.7777777777777778,\n              \"#fb9f3a\"\n             ],\n             [\n              0.8888888888888888,\n              \"#fdca26\"\n             ],\n             [\n              1,\n              \"#f0f921\"\n             ]\n            ],\n            \"type\": \"surface\"\n           }\n          ],\n          \"table\": [\n           {\n            \"cells\": {\n             \"fill\": {\n              \"color\": \"#EBF0F8\"\n             },\n             \"line\": {\n              \"color\": \"white\"\n             }\n            },\n            \"header\": {\n             \"fill\": {\n              \"color\": \"#C8D4E3\"\n             },\n             \"line\": {\n              \"color\": \"white\"\n             }\n            },\n            \"type\": \"table\"\n           }\n          ]\n         },\n         \"layout\": {\n          \"annotationdefaults\": {\n           \"arrowcolor\": \"#2a3f5f\",\n           \"arrowhead\": 0,\n           \"arrowwidth\": 1\n          },\n          \"autotypenumbers\": \"strict\",\n          \"coloraxis\": {\n           \"colorbar\": {\n            \"outlinewidth\": 0,\n            \"ticks\": \"\"\n           }\n          },\n          \"colorscale\": {\n           \"diverging\": [\n            [\n             0,\n             \"#8e0152\"\n            ],\n            [\n             0.1,\n             \"#c51b7d\"\n            ],\n            [\n             0.2,\n             \"#de77ae\"\n            ],\n            [\n             0.3,\n             \"#f1b6da\"\n            ],\n            [\n             0.4,\n             \"#fde0ef\"\n            ],\n            [\n             0.5,\n             \"#f7f7f7\"\n            ],\n            [\n             0.6,\n             \"#e6f5d0\"\n            ],\n            [\n             0.7,\n             \"#b8e186\"\n            ],\n            [\n             0.8,\n             \"#7fbc41\"\n            ],\n            [\n             0.9,\n             \"#4d9221\"\n            ],\n            [\n             1,\n             \"#276419\"\n            ]\n           ],\n           \"sequential\": [\n            [\n             0,\n             \"#0d0887\"\n            ],\n            [\n             0.1111111111111111,\n             \"#46039f\"\n            ],\n            [\n             0.2222222222222222,\n             \"#7201a8\"\n            ],\n            [\n             0.3333333333333333,\n             \"#9c179e\"\n            ],\n            [\n             0.4444444444444444,\n             \"#bd3786\"\n            ],\n            [\n             0.5555555555555556,\n             \"#d8576b\"\n            ],\n            [\n             0.6666666666666666,\n             \"#ed7953\"\n            ],\n            [\n             0.7777777777777778,\n             \"#fb9f3a\"\n            ],\n            [\n             0.8888888888888888,\n             \"#fdca26\"\n            ],\n            [\n             1,\n             \"#f0f921\"\n            ]\n           ],\n           \"sequentialminus\": [\n            [\n             0,\n             \"#0d0887\"\n            ],\n            [\n             0.1111111111111111,\n             \"#46039f\"\n            ],\n            [\n             0.2222222222222222,\n             \"#7201a8\"\n            ],\n            [\n             0.3333333333333333,\n             \"#9c179e\"\n            ],\n            [\n             0.4444444444444444,\n             \"#bd3786\"\n            ],\n            [\n             0.5555555555555556,\n             \"#d8576b\"\n            ],\n            [\n             0.6666666666666666,\n             \"#ed7953\"\n            ],\n            [\n             0.7777777777777778,\n             \"#fb9f3a\"\n            ],\n            [\n             0.8888888888888888,\n             \"#fdca26\"\n            ],\n            [\n             1,\n             \"#f0f921\"\n            ]\n           ]\n          },\n          \"colorway\": [\n           \"#636efa\",\n           \"#EF553B\",\n           \"#00cc96\",\n           \"#ab63fa\",\n           \"#FFA15A\",\n           \"#19d3f3\",\n           \"#FF6692\",\n           \"#B6E880\",\n           \"#FF97FF\",\n           \"#FECB52\"\n          ],\n          \"font\": {\n           \"color\": \"#2a3f5f\"\n          },\n          \"geo\": {\n           \"bgcolor\": \"white\",\n           \"lakecolor\": \"white\",\n           \"landcolor\": \"#E5ECF6\",\n           \"showlakes\": true,\n           \"showland\": true,\n           \"subunitcolor\": \"white\"\n          },\n          \"hoverlabel\": {\n           \"align\": \"left\"\n          },\n          \"hovermode\": \"closest\",\n          \"mapbox\": {\n           \"style\": \"light\"\n          },\n          \"paper_bgcolor\": \"white\",\n          \"plot_bgcolor\": \"#E5ECF6\",\n          \"polar\": {\n           \"angularaxis\": {\n            \"gridcolor\": \"white\",\n            \"linecolor\": \"white\",\n            \"ticks\": \"\"\n           },\n           \"bgcolor\": \"#E5ECF6\",\n           \"radialaxis\": {\n            \"gridcolor\": \"white\",\n            \"linecolor\": \"white\",\n            \"ticks\": \"\"\n           }\n          },\n          \"scene\": {\n           \"xaxis\": {\n            \"backgroundcolor\": \"#E5ECF6\",\n            \"gridcolor\": \"white\",\n            \"gridwidth\": 2,\n            \"linecolor\": \"white\",\n            \"showbackground\": true,\n            \"ticks\": \"\",\n            \"zerolinecolor\": \"white\"\n           },\n           \"yaxis\": {\n            \"backgroundcolor\": \"#E5ECF6\",\n            \"gridcolor\": \"white\",\n            \"gridwidth\": 2,\n            \"linecolor\": \"white\",\n            \"showbackground\": true,\n            \"ticks\": \"\",\n            \"zerolinecolor\": \"white\"\n           },\n           \"zaxis\": {\n            \"backgroundcolor\": \"#E5ECF6\",\n            \"gridcolor\": \"white\",\n            \"gridwidth\": 2,\n            \"linecolor\": \"white\",\n            \"showbackground\": true,\n            \"ticks\": \"\",\n            \"zerolinecolor\": \"white\"\n           }\n          },\n          \"shapedefaults\": {\n           \"line\": {\n            \"color\": \"#2a3f5f\"\n           }\n          },\n          \"ternary\": {\n           \"aaxis\": {\n            \"gridcolor\": \"white\",\n            \"linecolor\": \"white\",\n            \"ticks\": \"\"\n           },\n           \"baxis\": {\n            \"gridcolor\": \"white\",\n            \"linecolor\": \"white\",\n            \"ticks\": \"\"\n           },\n           \"bgcolor\": \"#E5ECF6\",\n           \"caxis\": {\n            \"gridcolor\": \"white\",\n            \"linecolor\": \"white\",\n            \"ticks\": \"\"\n           }\n          },\n          \"title\": {\n           \"x\": 0.05\n          },\n          \"xaxis\": {\n           \"automargin\": true,\n           \"gridcolor\": \"white\",\n           \"linecolor\": \"white\",\n           \"ticks\": \"\",\n           \"title\": {\n            \"standoff\": 15\n           },\n           \"zerolinecolor\": \"white\",\n           \"zerolinewidth\": 2\n          },\n          \"yaxis\": {\n           \"automargin\": true,\n           \"gridcolor\": \"white\",\n           \"linecolor\": \"white\",\n           \"ticks\": \"\",\n           \"title\": {\n            \"standoff\": 15\n           },\n           \"zerolinecolor\": \"white\",\n           \"zerolinewidth\": 2\n          }\n         }\n        }\n       }\n      },\n      \"image/png\": \"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De5f6gd/+3J378eHZ8zk9dkElSBi3cdQSNNvc9q797rLs2cO3rC+ypm6LvuFrxzvjnzkjnWzuB8BAgQIECBAoFlAQNNM6AIECBAgQIAAAQIECBAgQIAAgTYBAU2bn7MJECBAgAABAgQIECBAgAABAs0CAppmQhcgQIAAAQIECBAgQIAAAQIECLQJCGja/JxNgAABAgQIECBAgAABAgQIEGgWENA0E7oAAQIECBAgQIAAAQIECBAgQKBNQEDT5udsAgQIECBAgAABAgQIECBAgECzgICmmdAFCBAgQIAAAQIECBAgQIAAAQJtAgKaNj9nEyBAgAABAgQIECBAgAABAgSaBQQ0zYQuQIAAAQIECBAgQIAAAQIECBBoExDQtPk5mwABAgQIECBAgAABAgQIECDQLCCgaSZ0AQIECBAgQIAAAQIECBAgQIBAm4CAps3P2QQIECBAgAABAgQIECBAgACBZgEBTTOhCxAgQIAAAQIECBAgQIAAAQIE2gQENG1+ziZAgAABAgQIECBAgAABAgQINAsIaJoJXYAAAQIECBAgQIAAAQIECBAg0CYgoGnzczYBAgQIECBAgAABAgQIECBAoFlAQNNM6AIECBAgQIAAAQIECBAgQIAAgTYBAU2bn7MJECBAgAABAgQIECBAgAABAs0CAppmQhcgQIAAAQIECBAgQIAAAQIECLQJCGja/JxNgAABAgQIECBAgAABAgQIEGgWENA0E7oAAQIECBAgQIAAAQIECBAgQKBNQEDT5udsAgQIECBAgAABAgQIECBAgECzgICmmdAFCBAgQIAAAQIECBAgQIAAAQJtAgKaNj9nEyBAgAABAgQIECBAgAABAgSaBQQ0zYQuQIAAAQIECBAgQIAAAQIECBBoExDQtPk5mwABAgQIECBAgAABAgQIECDQLCCgaSZ0AQIECBAgQIAAAQIECBAgQIBAm4CAps3P2QQIECBAgAABAgQIECBAgACBZgEBTTOhCxAgQIAAAQIECBAgQIAAAQIE2gQENG1+ziZAgAABAgQIECBAgAABAgQINAsIaJoJXYAAAQIECBAgQIAAAQIECBAg0CYgoGnzczYBAgQIECBAgAABAgQIECBAoFlAQNNM6AIECBAgQIAAAQIECBAgQIAAgTYBAU2bn7MJECBAgAABAgQIECBAgAABAs0CAppmQhcgQIAAAQIECBAgQIAAAQIECLQJCGja/JxNgAABAgQIECBAgAABAgQIEGgWENA0E7oAAQIECBAgQIAAAQIECBAgQKBNQEDT5udsAgQIECBAgAABAgQIECBAgECzgICmmdAFCBAgQIAAAQIECBAgQIAAAQJtAgKaNj9nEyBAgAABAgQIECBAgAABAgSaBQQ0zYQuQIAAAQIECBAgQIAAAQIECBBoExDQtPk5mwABAgQIECBAgAABAgQIECDQLCCgaSZ0AQIECBAgQIAAAQIECBAgQIBAm4CAps3P2QQIECBAgAABAgQIECBAgACBZgEBTTOhCxAgQIAAAQIECBAgQIAAAQIE2gQENG1+ziZAgAABAgQIECBAgAABAgQINAsIaJoJXYAAAQIECBAgQIAAAQIECBAg0CYgoGnzczYBAgQIECBAgAABAgQIECBAoFlAQNNM6AIECBAgQIAAAQIECBAgQIAAgTYBAU2bn7MJECBAgAABAgQIECBAgAABAs0CAppmQhcgQIAAAQIECBAgQIAAAQIECLQJCGja/JxNgAABAgQIECBAgAABAgQIEGgWENA0E7oAAQIECBAgQIAAAQIECBAgQKBNQEDT5udsAgQIECBAgAABAgQIECBAgECzgICmmdAFCBAgQIAAAQIECBAgQIAAAQJtAgKaNj9nEyBAgAABAgQIECBAgAABAgSaBQQ0zYQuQIAAAQIECBAgQIAAAQIECBBoExDQtPk5mwABAgQIECBAgAABAgQIECDQLCCgaSZ0AQIECBAgQIAAAQIECBAgQIBAm4CAps3P2QQIECBAgAABAgQIECBAgACBZgEBTTOhCxAgQIAAAQIECBAgQIAAAQIE2gQENG1+ziZAgAABAgQIECBAgAABAgQINAsIaJoJXYAAAQIECBAgQIAAAQIECBAg0CYgoGnzczYBAgQIECBAgAABAgQIECBAoFlAQNNM6AIECBAgQIAAAQIECBAgQIAAgTYBAU2bn7MJECBAgAABAgQIECBAgAABAs0CAppmQhcgQIAAAQIECBAgQIAAAQIECLQJCGja/JxNgAABAgQIECBAgAABAgQIEGgWENA0E7oAAQIECBAgQIAAAQIECBAgQKBNQEDT5udsAgQIECBAgAABAgQIECBAgECzgICmmdAFCBAgQIAAAQIECBAgQIAAAQJtAgKaNj9nEyBAgAABAgQIECBAgAABAgSaBQQ0zYQuQIAAAQIECBAgQIAAAQIECBBoExDQtPk5mwABAgQIECBAgAABAgQIECDQLCCgaSZ0AQIECBAgQIAAAQIECBAgQIBAm4CAps3P2QQIECBAgAABAgQIECBAgACBZgEBTTOhCxAgQIAAAQIECBAgQIAAAQIE2gQENG1+ziZAgAABAgQIECBAgAABAgQINAsIaJoJXYAAAQIECBAgQIAAAQIECBAg0CYgoGnzczYBAgQIECBAgAABAgQIECBAoFng/wN2enHUOC/W8AAAAABJRU5ErkJggg==\",\n      \"text/html\": [\n       \"<div>                            <div id=\\\"7eaca092-c11f-46d2-969b-0d7af3ca64ff\\\" class=\\\"plotly-graph-div\\\" style=\\\"height:525px; width:100%;\\\"></div>            <script type=\\\"text/javascript\\\">                require([\\\"plotly\\\"], function(Plotly) {                    window.PLOTLYENV=window.PLOTLYENV || {};                                    if (document.getElementById(\\\"7eaca092-c11f-46d2-969b-0d7af3ca64ff\\\")) {                    Plotly.newPlot(                        \\\"7eaca092-c11f-46d2-969b-0d7af3ca64ff\\\",                        [{\\\"line\\\":{\\\"color\\\":\\\"grey\\\"},\\\"mode\\\":\\\"lines\\\",\\\"name\\\":\\\"Aero surface\\\",\\\"surfaceaxis\\\":2,\\\"x\\\":[-0.4375000000000001,-0.18750000000000006,-0.187500005737461,-0.4375000057285399,-0.4375000000000001],\\\"y\\\":[-7.126160546901204e-18,-3.054068805814802e-18,0.8000011183147504,0.8000026109241081,-7.126160546901204e-18],\\\"z\\\":[-3.7885577460302824e-17,-1.6236676054415498e-17,3.884345648756862e-05,4.033766384433025e-05,-3.7885577460302824e-17],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"grey\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[-0.4375000057285399,-0.187500005737461,-0.18750001518488343,-0.43750001515032233,-0.4375000057285399],\\\"y\\\":[0.8000026109241081,0.8000011183147504,1.6000021946752327,1.6000051324015534,0.8000026109241081],\\\"z\\\":[4.033766384433025e-05,3.884345648756862e-05,0.0001474587562785521,0.00015039990075090066,4.033766384433025e-05],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"grey\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[-0.43750001515032233,-0.18750001518488343,-0.18750002748442468,-0.4375000274105985,-0.43750001515032233],\\\"y\\\":[1.6000051324015534,1.6000021946752327,2.4000031932873562,2.400007486707306,1.6000051324015534],\\\"z\\\":[0.00015039990075090066,0.0001474587562785521,0.00031820666645609595,0.00032250546002824353,0.00015039990075090066],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"grey\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[-0.4375000274105985,-0.18750002748442468,-0.18750004207304757,-0.4375000419477604,-0.4375000274105985],\\\"y\\\":[2.400007486707306,2.4000031932873562,3.2000041361397518,3.2000097290216205,2.400007486707306],\\\"z\\\":[0.00032250546002824353,0.00031820666645609595,0.0005440116524442518,0.0005496119456658349,0.00032250546002824353],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"grey\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[-0.4375000419477604,-0.18750004207304757,-0.18750005831539146,-0.4375000581303961,-0.4375000419477604],\\\"y\\\":[3.2000097290216205,3.2000041361397518,4.000004991724207,4.000011787646406,3.2000097290216205],\\\"z\\\":[0.0005496119456658349,0.0005440116524442518,0.0008180063787988016,0.0008248117514201825,0.0005496119456658349],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"grey\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[-0.4375000581303961,-0.18750005831539146,-0.18750007587297496,-0.4375000756203353,-0.4375000581303961],\\\"y\\\":[4.000011787646406,4.000004991724207,4.800005788831466,4.800013730415652,4.000011787646406],\\\"z\\\":[0.0008248117514201825,0.0008180063787988016,0.0011339697660142335,0.0011419228184735238,0.0008248117514201825],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"grey\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[-0.4375000756203353,-0.18750007587297496,-0.1875000942880858,-0.43750009396440015,-0.4375000756203353],\\\"y\\\":[4.800013730415652,4.800005788831466,5.600006497238266,5.600015486172148,4.800013730415652],\\\"z\\\":[0.0011419228184735238,0.0011339697660142335,0.0014859053575590015,0.0014949076836219992,0.0011419228184735238],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"grey\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[-0.43750009396440015,-0.1875000942880858,-0.1875001133847934,-0.4375001129859722,-0.43750009396440015],\\\"y\\\":[5.600015486172148,5.600006497238266,6.400007147597506,6.400017125235562,5.600015486172148],\\\"z\\\":[0.0014949076836219992,0.0014859053575590015,0.0018684959356252715,0.0018784887981949942,0.0014949076836219992],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"grey\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[-0.4375001129859722,-0.1875001133847934,-0.1875001328395648,-0.4375001323665614,-0.4375001129859722],\\\"y\\\":[6.400017125235562,6.400007147597506,7.200007709974395,7.200018575842047,6.400017125235562],\\\"z\\\":[0.0018784887981949942,0.0018684959356252715,0.0022766574780168644,0.0022875402460654105,0.0018784887981949942],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"grey\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[-0.4375001323665614,-0.1875001328395648,-0.1875001525902163,-0.43750015204242715,-0.4375001323665614],\\\"y\\\":[7.200018575842047,7.200007709974395,8.000008215603518,8.000019908825728,7.200018575842047],\\\"z\\\":[0.0022875402460654105,0.0022766574780168644,0.0027059959238166756,0.002717707587989787,0.0022875402460654105],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"grey\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[-0.43750015204242715,-0.1875001525902163,-0.18750017240775796,-0.43750017178994344,-0.43750015204242715],\\\"y\\\":[8.000019908825728,8.000008215603518,8.800008634998948,8.80002105303595,8.000019908825728],\\\"z\\\":[0.002717707587989787,0.0027059959238166756,0.00315235047156843,0.003164788301163934,0.002717707587989787],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"grey\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[-0.43750017178994344,-0.18750017240775796,-0.18750019230338255,-0.4375001916179239,-0.43750017178994344],\\\"y\\\":[8.80002105303595,8.800008634998948,9.600008999668942,9.600022079802349,8.80002105303595],\\\"z\\\":[0.003164788301163934,0.00315235047156843,0.003612244321978627,0.003625345445617321,0.003164788301163934],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"grey\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[-0.4375001916179239,-0.18750019230338255,-0.18750021210963969,-0.4375002113643574,-0.4375001916179239],\\\"y\\\":[9.600022079802349,9.600008999668942,10.400009280849583,10.400022919780158,9.600022079802349],\\\"z\\\":[0.003625345445617321,0.003612244321978627,0.004082429194450335,0.004096090111835357,0.003625345445617321],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"grey\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[-0.4375002113643574,-0.18750021210963969,-0.18750023187928208,-0.43750023107885805,-0.4375002113643574],\\\"y\\\":[10.400022919780158,10.400009280849583,11.200009509987185,11.200023644449196,10.400022919780158],\\\"z\\\":[0.004096090111835357,0.004082429194450335,0.004560325318252977,0.0045744826124137754,0.004096090111835357],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"grey\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[-0.43750023107885805,-0.18750023187928208,-0.18750025148252614,-0.43750025063692877,-0.43750023107885805],\\\"y\\\":[11.200023644449196,11.200009509987185,12.000009659246636,12.000024187077601,11.200023644449196],\\\"z\\\":[0.0045744826124137754,0.004560325318252977,0.005043573110761696,0.005058124427915424,0.0045744826124137754],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"grey\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[-0.43750025063692877,-0.18750025148252614,-0.18750027099142436,-0.4375002701068412,-0.43750025063692877],\\\"y\\\":[12.000024187077601,12.000009659246636,12.800009759600563,12.800024618563835,12.000024187077601],\\\"z\\\":[0.005058124427915424,0.005043573110761696,0.0055304507811946265,0.005545333750792834,0.005058124427915424],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"grey\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[-0.4375002701068412,-0.18750027099142436,-0.18750029030227897,-0.43750028938977437,-0.4375002701068412],\\\"y\\\":[12.800024618563835,12.800009759600563,13.600009784797404,13.600024876458574,12.800024618563835],\\\"z\\\":[0.005545333750792834,0.0055304507811946265,0.0060194392546856455,0.006034555275549564,0.005545333750792834],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"grey\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[-0.43750028938977437,-0.18750029030227897,-0.18750030949419816,-0.4375003085605567,-0.43750028938977437],\\\"y\\\":[13.600024876458574,13.600009784797404,14.400009765078664,14.400025030543393,13.600024876458574],\\\"z\\\":[0.006034555275549564,0.0060194392546856455,0.006509601017991055,0.006524891089689876,0.006034555275549564],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"grey\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[-0.4375003085605567,-0.18750030949419816,-0.18750032849661877,-0.43750032755255314,-0.4375003085605567],\\\"y\\\":[14.400025030543393,14.400009765078664,15.20000967846006,15.200025028918631,14.400025030543393],\\\"z\\\":[0.006524891089689876,0.006509601017991055,0.0070001736447586945,0.00701554882735514,0.006524891089689876],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"grey\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[-0.43750032755255314,-0.18750032849661877,-0.18750034739363916,-0.4375003464451198,-0.43750032755255314],\\\"y\\\":[15.200025028918631,15.20000967846006,16.000009555123633,16.00002494175388,15.200025028918631],\\\"z\\\":[0.00701554882735514,0.0070001736447586945,0.007490874433673721,0.007506285835269044,0.00701554882735514],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"grey\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[-0.18750000000000006,0.06250000000000001,0.062499994253617984,-0.187500005737461,-0.18750000000000006],\\\"y\\\":[-3.054068805814802e-18,1.0180229352716006e-18,0.7999996257053927,0.8000011183147504,-3.054068805814802e-18],\\\"z\\\":[-1.6236676054415498e-17,5.412225351471832e-18,3.734924913080698e-05,3.884345648756862e-05,-1.6236676054415498e-17],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"grey\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[-0.187500005737461,0.062499994253617984,0.062499984780555455,-0.18750001518488343,-0.187500005737461],\\\"y\\\":[0.8000011183147504,0.7999996257053927,1.5999992569489119,1.6000021946752327,0.8000011183147504],\\\"z\\\":[3.884345648756862e-05,3.734924913080698e-05,0.00014451761180620353,0.0001474587562785521,3.884345648756862e-05],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"grey\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[-0.18750001518488343,0.062499984780555455,0.06249997244174921,-0.18750002748442468,-0.18750001518488343],\\\"y\\\":[1.6000021946752327,1.5999992569489119,2.3999988998674064,2.4000031932873562,1.6000021946752327],\\\"z\\\":[0.0001474587562785521,0.00014451761180620353,0.0003139078728839484,0.00031820666645609595,0.0001474587562785521],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"grey\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[-0.18750002748442468,0.06249997244174921,0.0624999578016652,-0.18750004207304757,-0.18750002748442468],\\\"y\\\":[2.4000031932873562,2.3999988998674064,3.199998543257883,3.2000041361397518,2.4000031932873562],\\\"z\\\":[0.00031820666645609595,0.0003139078728839484,0.0005384113592226688,0.0005440116524442518,0.00031820666645609595],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"grey\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[-0.18750004207304757,0.0624999578016652,0.062499941499613264,-0.18750005831539146,-0.18750004207304757],\\\"y\\\":[3.2000041361397518,3.199998543257883,3.9999981958020085,4.000004991724207,3.2000041361397518],\\\"z\\\":[0.0005440116524442518,0.0005384113592226688,0.0008112010061774206,0.0008180063787988016,0.0005440116524442518],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"grey\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[-0.18750005831539146,0.062499941499613264,0.062499923874385396,-0.18750007587297496,-0.18750005831539146],\\\"y\\\":[4.000004991724207,3.9999981958020085,4.799997847247279,4.800005788831466,4.000004991724207],\\\"z\\\":[0.0008180063787988016,0.0008112010061774206,0.0011260167135549429,0.0011339697660142335,0.0008180063787988016],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"grey\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[-0.18750007587297496,0.062499923874385396,0.06249990538822854,-0.1875000942880858,-0.18750007587297496],\\\"y\\\":[4.800005788831466,4.799997847247279,5.5999975083043845,5.600006497238266,4.800005788831466],\\\"z\\\":[0.0011339697660142335,0.0011260167135549429,0.001476903031496004,0.0014859053575590015,0.0011339697660142335],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"grey\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[-0.1875000942880858,0.06249990538822854,0.0624998862163855,-0.1875001133847934,-0.1875000942880858],\\\"y\\\":[5.600006497238266,5.5999975083043845,6.39999716995945,6.400007147597506,5.600006497238266],\\\"z\\\":[0.0014859053575590015,0.001476903031496004,0.0018585030730555484,0.0018684959356252715,0.0014859053575590015],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"grey\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[-0.1875001133847934,0.0624998862163855,0.06249986668743177,-0.1875001328395648,-0.1875001133847934],\\\"y\\\":[6.400007147597506,6.39999716995945,7.199996844106742,7.200007709974395,6.400007147597506],\\\"z\\\":[0.0018684959356252715,0.0018585030730555484,0.0022657747099683184,0.0022766574780168644,0.0018684959356252715],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"grey\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[-0.1875001328395648,0.06249986668743177,0.06249984686199458,-0.1875001525902163,-0.1875001328395648],\\\"y\\\":[7.200007709974395,7.199996844106742,7.999996522381308,8.000008215603518,7.200007709974395],\\\"z\\\":[0.0022766574780168644,0.0022657747099683184,0.002694284259643564,0.0027059959238166756,0.0022766574780168644],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"grey\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[-0.1875001525902163,0.06249984686199458,0.062499826974427505,-0.18750017240775796,-0.1875001525902163],\\\"y\\\":[8.000008215603518,7.999996522381308,8.799996216961945,8.800008634998948,8.000008215603518],\\\"z\\\":[0.0027059959238166756,0.002694284259643564,0.003139912641972926,0.00315235047156843,0.0027059959238166756],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"grey\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[-0.18750017240775796,0.062499826974427505,0.062499807011158884,-0.18750019230338255,-0.18750017240775796],\\\"y\\\":[8.800008634998948,8.799996216961945,9.599995919535536,9.600008999668942,8.800008634998948],\\\"z\\\":[0.00315235047156843,0.003139912641972926,0.003599143198339933,0.003612244321978627,0.00315235047156843],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"grey\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[-0.18750019230338255,0.062499807011158884,0.06249978714507812,-0.18750021210963969,-0.18750019230338255],\\\"y\\\":[9.600008999668942,9.599995919535536,10.399995641919006,10.400009280849583,9.600008999668942],\\\"z\\\":[0.003612244321978627,0.003599143198339933,0.004068768277065312,0.004082429194450335,0.003612244321978627],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"grey\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[-0.18750021210963969,0.06249978714507812,0.062499767320293845,-0.18750023187928208,-0.18750021210963969],\\\"y\\\":[10.400009280849583,10.399995641919006,11.199995375525171,11.200009509987185,10.400009280849583],\\\"z\\\":[0.004082429194450335,0.004068768277065312,0.00454616802409218,0.004560325318252977,0.004082429194450335],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"grey\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[-0.18750023187928208,0.062499767320293845,0.062499747671876424,-0.18750025148252614,-0.18750023187928208],\\\"y\\\":[11.200009509987185,11.199995375525171,11.99999513141567,12.000009659246636,11.200009509987185],\\\"z\\\":[0.004560325318252977,0.00454616802409218,0.005029021793607967,0.005043573110761696,0.004560325318252977],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"grey\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[-0.18750025148252614,0.062499747671876424,0.06249972812399248,-0.18750027099142436,-0.18750025148252614],\\\"y\\\":[12.000009659246636,11.99999513141567,12.79999490063729,12.800009759600563,12.000009659246636],\\\"z\\\":[0.005043573110761696,0.005029021793607967,0.00551556781159642,0.0055304507811946265,0.005043573110761696],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"grey\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[-0.18750027099142436,0.06249972812399248,0.06249970878521643,-0.18750029030227897,-0.18750027099142436],\\\"y\\\":[12.800009759600563,12.79999490063729,13.599994693136232,13.600009784797404,12.800009759600563],\\\"z\\\":[0.0055304507811946265,0.00551556781159642,0.0060043232338217265,0.0060194392546856455,0.0055304507811946265],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"grey\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[-0.18750029030227897,0.06249970878521643,0.06249968957216046,-0.18750030949419816,-0.18750029030227897],\\\"y\\\":[13.600009784797404,13.599994693136232,14.399994499613936,14.400009765078664,13.600009784797404],\\\"z\\\":[0.0060194392546856455,0.0060043232338217265,0.006494310946292235,0.006509601017991055,0.0060194392546856455],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"grey\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[-0.18750030949419816,0.06249968957216046,0.06249967055931569,-0.18750032849661877,-0.18750030949419816],\\\"y\\\":[14.400009765078664,14.399994499613936,15.199994328001486,15.20000967846006,14.400009765078664],\\\"z\\\":[0.006509601017991055,0.006494310946292235,0.00698479846216225,0.0070001736447586945,0.006509601017991055],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"grey\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[-0.18750032849661877,0.06249967055931569,0.062499651657841424,-0.18750034739363916,-0.18750032849661877],\\\"y\\\":[15.20000967846006,15.199994328001486,15.999994168493387,16.000009555123633,15.20000967846006],\\\"z\\\":[0.0070001736447586945,0.00698479846216225,0.007475463032078398,0.007490874433673721,0.0070001736447586945],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"grey\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[0.06250000000000001,0.31250000000000006,0.31249999424469693,0.062499994253617984,0.06250000000000001],\\\"y\\\":[1.0180229352716006e-18,5.090114676358003e-18,0.7999981330960351,0.7999996257053927,1.0180229352716006e-18],\\\"z\\\":[5.412225351471832e-18,2.706112675735916e-17,3.585504177404534e-05,3.734924913080698e-05,5.412225351471832e-18],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"grey\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[0.062499994253617984,0.31249999424469693,0.31249998474599433,0.062499984780555455,0.062499994253617984],\\\"y\\\":[0.7999996257053927,0.7999981330960351,1.599996319222591,1.5999992569489119,0.7999996257053927],\\\"z\\\":[3.734924913080698e-05,3.585504177404534e-05,0.00014157646733385497,0.00014451761180620353,3.734924913080698e-05],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"grey\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[0.062499984780555455,0.31249998474599433,0.3124999723679231,0.06249997244174921,0.062499984780555455],\\\"y\\\":[1.5999992569489119,1.599996319222591,2.3999946064474567,2.3999988998674064,1.5999992569489119],\\\"z\\\":[0.00014451761180620353,0.00014157646733385497,0.0003096090793118008,0.0003139078728839484,0.00014451761180620353],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"grey\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[0.06249997244174921,0.3124999723679231,0.31249995767637795,0.0624999578016652,0.06249997244174921],\\\"y\\\":[2.3999988998674064,2.3999946064474567,3.1999929503760143,3.199998543257883,2.3999988998674064],\\\"z\\\":[0.0003139078728839484,0.0003096090793118008,0.0005328110660010858,0.0005384113592226688,0.0003139078728839484],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"grey\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[0.0624999578016652,0.31249995767637795,0.31249994131461795,0.062499941499613264,0.0624999578016652],\\\"y\\\":[3.199998543257883,3.1999929503760143,3.9999913998798102,3.9999981958020085,3.199998543257883],\\\"z\\\":[0.0005384113592226688,0.0005328110660010858,0.0008043956335560395,0.0008112010061774206,0.0005384113592226688],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"grey\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[0.062499941499613264,0.31249994131461795,0.3124999236217457,0.062499923874385396,0.062499941499613264],\\\"y\\\":[3.9999981958020085,3.9999913998798102,4.799989905663092,4.799997847247279,3.9999981958020085],\\\"z\\\":[0.0008112010061774206,0.0008043956335560395,0.0011180636610956523,0.0011260167135549429,0.0008112010061774206],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"grey\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[0.062499923874385396,0.3124999236217457,0.31249990506454295,0.06249990538822854,0.062499923874385396],\\\"y\\\":[4.799997847247279,4.799989905663092,5.599988519370503,5.5999975083043845,4.799997847247279],\\\"z\\\":[0.0011260167135549429,0.0011180636610956523,0.0014679007054330066,0.001476903031496004,0.0011260167135549429],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"grey\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[0.06249990538822854,0.31249990506454295,0.3124998858175643,0.0624998862163855,0.06249990538822854],\\\"y\\\":[5.5999975083043845,5.599988519370503,6.399987192321394,6.39999716995945,5.5999975083043845],\\\"z\\\":[0.001476903031496004,0.0014679007054330066,0.0018485102104858254,0.0018585030730555484,0.001476903031496004],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"grey\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[0.0624998862163855,0.3124998858175643,0.3124998662144284,0.06249986668743177,0.0624998862163855],\\\"y\\\":[6.39999716995945,6.399987192321394,7.19998597823909,7.199996844106742,6.39999716995945],\\\"z\\\":[0.0018585030730555484,0.0018485102104858254,0.0022548919419197724,0.0022657747099683184,0.0018585030730555484],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"grey\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[0.06249986668743177,0.3124998662144284,0.31249984631420546,0.06249984686199458,0.06249986668743177],\\\"y\\\":[7.199996844106742,7.19998597823909,7.999984829159098,7.999996522381308,7.199996844106742],\\\"z\\\":[0.0022657747099683184,0.0022548919419197724,0.0026825725954704523,0.002694284259643564,0.0022657747099683184],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"grey\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[0.06249984686199458,0.31249984631420546,0.312499826356613,0.062499826974427505,0.06249984686199458],\\\"y\\\":[7.999996522381308,7.999984829159098,8.799983798924943,8.799996216961945,7.999996522381308],\\\"z\\\":[0.002694284259643564,0.0026825725954704523,0.003127474812377422,0.003139912641972926,0.002694284259643564],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"grey\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[0.062499826974427505,0.312499826356613,0.3124998063257003,0.062499807011158884,0.062499826974427505],\\\"y\\\":[8.799996216961945,8.799983798924943,9.599982839402129,9.599995919535536,8.799996216961945],\\\"z\\\":[0.003139912641972926,0.003127474812377422,0.003586042074701239,0.003599143198339933,0.003139912641972926],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"grey\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[0.062499807011158884,0.3124998063257003,0.3124997863997959,0.06249978714507812,0.062499807011158884],\\\"y\\\":[9.599995919535536,9.599982839402129,10.399982002988429,10.399995641919006,9.599995919535536],\\\"z\\\":[0.003599143198339933,0.003586042074701239,0.0040551073596802895,0.004068768277065312,0.003599143198339933],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"grey\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[0.06249978714507812,0.3124997863997959,0.31249976651986977,0.062499767320293845,0.06249978714507812],\\\"y\\\":[10.399995641919006,10.399982002988429,11.199981241063158,11.199995375525171,10.399995641919006],\\\"z\\\":[0.004068768277065312,0.0040551073596802895,0.004532010729931383,0.00454616802409218,0.004068768277065312],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"grey\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[0.062499767320293845,0.31249976651986977,0.312499746826279,0.062499747671876424,0.062499767320293845],\\\"y\\\":[11.199995375525171,11.199981241063158,11.999980603584703,11.99999513141567,11.199995375525171],\\\"z\\\":[0.00454616802409218,0.004532010729931383,0.005014470476454239,0.005029021793607967,0.00454616802409218],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"grey\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[0.062499747671876424,0.312499746826279,0.31249972723940933,0.06249972812399248,0.062499747671876424],\\\"y\\\":[11.99999513141567,11.999980603584703,12.799980041674019,12.79999490063729,11.99999513141567],\\\"z\\\":[0.005029021793607967,0.005014470476454239,0.005500684841998214,0.00551556781159642,0.005029021793607967],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"grey\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[0.06249972812399248,0.31249972723940933,0.3124997078727118,0.06249970878521643,0.06249972812399248],\\\"y\\\":[12.79999490063729,12.799980041674019,13.59997960147506,13.599994693136232,12.79999490063729],\\\"z\\\":[0.00551556781159642,0.005500684841998214,0.0059892072129578075,0.0060043232338217265,0.00551556781159642],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"grey\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[0.06249970878521643,0.3124997078727118,0.31249968863851907,0.06249968957216046,0.06249970878521643],\\\"y\\\":[13.599994693136232,13.59997960147506,14.399979234149207,14.399994499613936,13.599994693136232],\\\"z\\\":[0.0060043232338217265,0.0059892072129578075,0.006479020874593415,0.006494310946292235,0.0060043232338217265],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"grey\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[0.06249968957216046,0.31249968863851907,0.3124996696152501,0.06249967055931569,0.06249968957216046],\\\"y\\\":[14.399994499613936,14.399979234149207,15.199978977542912,15.199994328001486,14.399994499613936],\\\"z\\\":[0.006494310946292235,0.006479020874593415,0.006969423279565805,0.00698479846216225,0.006494310946292235],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"grey\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[0.06249967055931569,0.3124996696152501,0.312499650709322,0.062499651657841424,0.06249967055931569],\\\"y\\\":[15.199994328001486,15.199978977542912,15.999978781863144,15.999994168493387,15.199994328001486],\\\"z\\\":[0.00698479846216225,0.006969423279565805,0.007460051630483075,0.007475463032078398,0.00698479846216225],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"grey\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[0.31250000000000006,0.5625000000000001,0.5624999942357759,0.31249999424469693,0.31250000000000006],\\\"y\\\":[5.090114676358003e-18,9.162206417444405e-18,0.7999966404866774,0.7999981330960351,5.090114676358003e-18],\\\"z\\\":[2.706112675735916e-17,4.871002816324649e-17,3.4360834417283705e-05,3.585504177404534e-05,2.706112675735916e-17],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"grey\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[0.31249999424469693,0.5624999942357759,0.5624999847114331,0.31249998474599433,0.31249999424469693],\\\"y\\\":[0.7999981330960351,0.7999966404866774,1.5999933814962704,1.599996319222591,0.7999981330960351],\\\"z\\\":[3.585504177404534e-05,3.4360834417283705e-05,0.0001386353228615064,0.00014157646733385497,3.585504177404534e-05],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"grey\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[0.31249998474599433,0.5624999847114331,0.562499972294097,0.3124999723679231,0.31249998474599433],\\\"y\\\":[1.599996319222591,1.5999933814962704,2.399990313027507,2.3999946064474567,1.599996319222591],\\\"z\\\":[0.00014157646733385497,0.0001386353228615064,0.00030531028573965323,0.0003096090793118008,0.00014157646733385497],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"grey\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[0.3124999723679231,0.562499972294097,0.5624999575510907,0.31249995767637795,0.3124999723679231],\\\"y\\\":[2.3999946064474567,2.399990313027507,3.1999873574941455,3.1999929503760143,2.3999946064474567],\\\"z\\\":[0.0003096090793118008,0.00030531028573965323,0.0005272107727795027,0.0005328110660010858,0.0003096090793118008],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"grey\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[0.31249995767637795,0.5624999575510907,0.5624999411296226,0.31249994131461795,0.31249995767637795],\\\"y\\\":[3.1999929503760143,3.1999873574941455,3.999984603957612,3.9999913998798102,3.1999929503760143],\\\"z\\\":[0.0005328110660010858,0.0005272107727795027,0.0007975902609346586,0.0008043956335560395,0.0005328110660010858],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"grey\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[0.31249994131461795,0.5624999411296226,0.5624999233691061,0.3124999236217457,0.31249994131461795],\\\"y\\\":[3.9999913998798102,3.999984603957612,4.799981964078905,4.799989905663092,3.9999913998798102],\\\"z\\\":[0.0008043956335560395,0.0007975902609346586,0.0011101106086363619,0.0011180636610956523,0.0008043956335560395],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"grey\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[0.3124999236217457,0.5624999233691061,0.5624999047408573,0.31249990506454295,0.3124999236217457],\\\"y\\\":[4.799989905663092,4.799981964078905,5.599979530436621,5.599988519370503,4.799989905663092],\\\"z\\\":[0.0011180636610956523,0.0011101106086363619,0.0014588983793700089,0.0014679007054330066,0.0011180636610956523],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"grey\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[0.31249990506454295,0.5624999047408573,0.5624998854187432,0.3124998858175643,0.31249990506454295],\\\"y\\\":[5.599988519370503,5.599979530436621,6.399977214683338,6.399987192321394,5.599988519370503],\\\"z\\\":[0.0014679007054330066,0.0014588983793700089,0.0018385173479161026,0.0018485102104858254,0.0014679007054330066],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"grey\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[0.3124998858175643,0.5624998854187432,0.562499865741425,0.3124998662144284,0.3124998858175643],\\\"y\\\":[6.399987192321394,6.399977214683338,7.199975112371438,7.19998597823909,6.399987192321394],\\\"z\\\":[0.0018485102104858254,0.0018385173479161026,0.0022440091738712264,0.0022548919419197724,0.0018485102104858254],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"grey\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[0.3124998662144284,0.562499865741425,0.5624998457664163,0.31249984631420546,0.3124998662144284],\\\"y\\\":[7.19998597823909,7.199975112371438,7.999973135936888,7.999984829159098,7.19998597823909],\\\"z\\\":[0.0022548919419197724,0.0022440091738712264,0.002670860931297341,0.0026825725954704523,0.0022548919419197724],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"grey\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[0.31249984631420546,0.5624998457664163,0.5624998257387984,0.312499826356613,0.31249984631420546],\\\"y\\\":[7.999984829159098,7.999973135936888,8.799971380887941,8.799983798924943,7.999984829159098],\\\"z\\\":[0.0026825725954704523,0.002670860931297341,0.003115036982781918,0.003127474812377422,0.0026825725954704523],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"grey\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[0.312499826356613,0.5624998257387984,0.5624998056402417,0.3124998063257003,0.312499826356613],\\\"y\\\":[8.799983798924943,8.799971380887941,9.599969759268722,9.599982839402129,8.799983798924943],\\\"z\\\":[0.003127474812377422,0.003115036982781918,0.003572940951062545,0.003586042074701239,0.003127474812377422],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"grey\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[0.3124998063257003,0.5624998056402417,0.5624997856545136,0.3124997863997959,0.3124998063257003],\\\"y\\\":[9.599982839402129,9.599969759268722,10.399968364057854,10.399982002988429,9.599982839402129],\\\"z\\\":[0.003586042074701239,0.003572940951062545,0.004041446442295267,0.0040551073596802895,0.003586042074701239],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"grey\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[0.3124997863997959,0.5624997856545136,0.5624997657194457,0.31249976651986977,0.3124997863997959],\\\"y\\\":[10.399982002988429,10.399968364057854,11.199967106601147,11.199981241063158,10.399982002988429],\\\"z\\\":[0.0040551073596802895,0.004041446442295267,0.004517853435770585,0.004532010729931383,0.0040551073596802895],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"grey\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[0.31249976651986977,0.5624997657194457,0.5624997459806815,0.312499746826279,0.31249976651986977],\\\"y\\\":[11.199981241063158,11.199967106601147,11.999966075753738,11.999980603584703,11.199981241063158],\\\"z\\\":[0.004532010729931383,0.004517853435770585,0.0049999191593005105,0.005014470476454239,0.004532010729931383],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"grey\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[0.312499746826279,0.5624997459806815,0.5624997263548261,0.31249972723940933,0.312499746826279],\\\"y\\\":[11.999980603584703,11.999966075753738,12.799965182710746,12.799980041674019,11.999980603584703],\\\"z\\\":[0.005014470476454239,0.0049999191593005105,0.005485801872400007,0.005500684841998214,0.005014470476454239],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"grey\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[0.31249972723940933,0.5624997263548261,0.5624997069602071,0.3124997078727118,0.31249972723940933],\\\"y\\\":[12.799980041674019,12.799965182710746,13.599964509813889,13.59997960147506,12.799980041674019],\\\"z\\\":[0.005500684841998214,0.005485801872400007,0.005974091192093889,0.0059892072129578075,0.005500684841998214],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"grey\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[0.3124997078727118,0.5624997069602071,0.5624996877048777,0.31249968863851907,0.3124997078727118],\\\"y\\\":[13.59997960147506,13.599964509813889,14.399963968684478,14.399979234149207,13.59997960147506],\\\"z\\\":[0.0059892072129578075,0.005974091192093889,0.0064637308028945946,0.006479020874593415,0.0059892072129578075],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"grey\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[0.31249968863851907,0.5624996877048777,0.5624996686711845,0.3124996696152501,0.31249968863851907],\\\"y\\\":[14.399979234149207,14.399963968684478,15.19996362708434,15.199978977542912,14.399979234149207],\\\"z\\\":[0.006479020874593415,0.0064637308028945946,0.00695404809696936,0.006969423279565805,0.006479020874593415],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"grey\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[0.3124996696152501,0.5624996686711845,0.5624996497608026,0.312499650709322,0.3124996696152501],\\\"y\\\":[15.199978977542912,15.19996362708434,15.999963395232898,15.999978781863144,15.199978977542912],\\\"z\\\":[0.006969423279565805,0.00695404809696936,0.007444640228887752,0.007460051630483075,0.006969423279565805],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"black\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"x\\\":[-0.4375000000000001,-0.4375000057285399,-0.43750001515032233,-0.4375000274105985,-0.4375000419477604,-0.4375000581303961,-0.4375000756203353,-0.43750009396440015,-0.4375001129859722,-0.4375001323665614,-0.43750015204242715,-0.43750017178994344,-0.4375001916179239,-0.4375002113643574,-0.43750023107885805,-0.43750025063692877,-0.4375002701068412,-0.43750028938977437,-0.4375003085605567,-0.43750032755255314,-0.4375003464451198],\\\"y\\\":[-7.126160546901204e-18,0.8000026109241081,1.6000051324015534,2.400007486707306,3.2000097290216205,4.000011787646406,4.800013730415652,5.600015486172148,6.400017125235562,7.200018575842047,8.000019908825728,8.80002105303595,9.600022079802349,10.400022919780158,11.200023644449196,12.000024187077601,12.800024618563835,13.600024876458574,14.400025030543393,15.200025028918631,16.00002494175388],\\\"z\\\":[-3.7885577460302824e-17,4.033766384433025e-05,0.00015039990075090066,0.00032250546002824353,0.0005496119456658349,0.0008248117514201825,0.0011419228184735238,0.0014949076836219992,0.0018784887981949942,0.0022875402460654105,0.002717707587989787,0.003164788301163934,0.003625345445617321,0.004096090111835357,0.0045744826124137754,0.005058124427915424,0.005545333750792834,0.006034555275549564,0.006524891089689876,0.00701554882735514,0.007506285835269044],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"black\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"x\\\":[-0.18750000000000006,-0.187500005737461,-0.18750001518488343,-0.18750002748442468,-0.18750004207304757,-0.18750005831539146,-0.18750007587297496,-0.1875000942880858,-0.1875001133847934,-0.1875001328395648,-0.1875001525902163,-0.18750017240775796,-0.18750019230338255,-0.18750021210963969,-0.18750023187928208,-0.18750025148252614,-0.18750027099142436,-0.18750029030227897,-0.18750030949419816,-0.18750032849661877,-0.18750034739363916],\\\"y\\\":[-3.054068805814802e-18,0.8000011183147504,1.6000021946752327,2.4000031932873562,3.2000041361397518,4.000004991724207,4.800005788831466,5.600006497238266,6.400007147597506,7.200007709974395,8.000008215603518,8.800008634998948,9.600008999668942,10.400009280849583,11.200009509987185,12.000009659246636,12.800009759600563,13.600009784797404,14.400009765078664,15.20000967846006,16.000009555123633],\\\"z\\\":[-1.6236676054415498e-17,3.884345648756862e-05,0.0001474587562785521,0.00031820666645609595,0.0005440116524442518,0.0008180063787988016,0.0011339697660142335,0.0014859053575590015,0.0018684959356252715,0.0022766574780168644,0.0027059959238166756,0.00315235047156843,0.003612244321978627,0.004082429194450335,0.004560325318252977,0.005043573110761696,0.0055304507811946265,0.0060194392546856455,0.006509601017991055,0.0070001736447586945,0.007490874433673721],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"black\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"x\\\":[0.06250000000000001,0.062499994253617984,0.062499984780555455,0.06249997244174921,0.0624999578016652,0.062499941499613264,0.062499923874385396,0.06249990538822854,0.0624998862163855,0.06249986668743177,0.06249984686199458,0.062499826974427505,0.062499807011158884,0.06249978714507812,0.062499767320293845,0.062499747671876424,0.06249972812399248,0.06249970878521643,0.06249968957216046,0.06249967055931569,0.062499651657841424],\\\"y\\\":[1.0180229352716006e-18,0.7999996257053927,1.5999992569489119,2.3999988998674064,3.199998543257883,3.9999981958020085,4.799997847247279,5.5999975083043845,6.39999716995945,7.199996844106742,7.999996522381308,8.799996216961945,9.599995919535536,10.399995641919006,11.199995375525171,11.99999513141567,12.79999490063729,13.599994693136232,14.399994499613936,15.199994328001486,15.999994168493387],\\\"z\\\":[5.412225351471832e-18,3.734924913080698e-05,0.00014451761180620353,0.0003139078728839484,0.0005384113592226688,0.0008112010061774206,0.0011260167135549429,0.001476903031496004,0.0018585030730555484,0.0022657747099683184,0.002694284259643564,0.003139912641972926,0.003599143198339933,0.004068768277065312,0.00454616802409218,0.005029021793607967,0.00551556781159642,0.0060043232338217265,0.006494310946292235,0.00698479846216225,0.007475463032078398],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"black\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"x\\\":[0.31250000000000006,0.31249999424469693,0.31249998474599433,0.3124999723679231,0.31249995767637795,0.31249994131461795,0.3124999236217457,0.31249990506454295,0.3124998858175643,0.3124998662144284,0.31249984631420546,0.312499826356613,0.3124998063257003,0.3124997863997959,0.31249976651986977,0.312499746826279,0.31249972723940933,0.3124997078727118,0.31249968863851907,0.3124996696152501,0.312499650709322],\\\"y\\\":[5.090114676358003e-18,0.7999981330960351,1.599996319222591,2.3999946064474567,3.1999929503760143,3.9999913998798102,4.799989905663092,5.599988519370503,6.399987192321394,7.19998597823909,7.999984829159098,8.799983798924943,9.599982839402129,10.399982002988429,11.199981241063158,11.999980603584703,12.799980041674019,13.59997960147506,14.399979234149207,15.199978977542912,15.999978781863144],\\\"z\\\":[2.706112675735916e-17,3.585504177404534e-05,0.00014157646733385497,0.0003096090793118008,0.0005328110660010858,0.0008043956335560395,0.0011180636610956523,0.0014679007054330066,0.0018485102104858254,0.0022548919419197724,0.0026825725954704523,0.003127474812377422,0.003586042074701239,0.0040551073596802895,0.004532010729931383,0.005014470476454239,0.005500684841998214,0.0059892072129578075,0.006479020874593415,0.006969423279565805,0.007460051630483075],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"black\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"x\\\":[0.5625000000000001,0.5624999942357759,0.5624999847114331,0.562499972294097,0.5624999575510907,0.5624999411296226,0.5624999233691061,0.5624999047408573,0.5624998854187432,0.562499865741425,0.5624998457664163,0.5624998257387984,0.5624998056402417,0.5624997856545136,0.5624997657194457,0.5624997459806815,0.5624997263548261,0.5624997069602071,0.5624996877048777,0.5624996686711845,0.5624996497608026],\\\"y\\\":[9.162206417444405e-18,0.7999966404866774,1.5999933814962704,2.399990313027507,3.1999873574941455,3.999984603957612,4.799981964078905,5.599979530436621,6.399977214683338,7.199975112371438,7.999973135936888,8.799971380887941,9.599969759268722,10.399968364057854,11.199967106601147,11.999966075753738,12.799965182710746,13.599964509813889,14.399963968684478,15.19996362708434,15.999963395232898],\\\"z\\\":[4.871002816324649e-17,3.4360834417283705e-05,0.0001386353228615064,0.00030531028573965323,0.0005272107727795027,0.0007975902609346586,0.0011101106086363619,0.0014588983793700089,0.0018385173479161026,0.0022440091738712264,0.002670860931297341,0.003115036982781918,0.003572940951062545,0.004041446442295267,0.004517853435770585,0.0049999191593005105,0.005485801872400007,0.005974091192093889,0.0064637308028945946,0.00695404809696936,0.007444640228887752],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"black\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"x\\\":[-0.4375000000000001,-0.18750000000000006,0.06250000000000001,0.31250000000000006,0.5625000000000001],\\\"y\\\":[-7.126160546901204e-18,-3.054068805814802e-18,1.0180229352716006e-18,5.090114676358003e-18,9.162206417444405e-18],\\\"z\\\":[-3.7885577460302824e-17,-1.6236676054415498e-17,5.412225351471832e-18,2.706112675735916e-17,4.871002816324649e-17],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"black\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"x\\\":[-0.4375000057285399,-0.187500005737461,0.062499994253617984,0.31249999424469693,0.5624999942357759],\\\"y\\\":[0.8000026109241081,0.8000011183147504,0.7999996257053927,0.7999981330960351,0.7999966404866774],\\\"z\\\":[4.033766384433025e-05,3.884345648756862e-05,3.734924913080698e-05,3.585504177404534e-05,3.4360834417283705e-05],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"black\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"x\\\":[-0.43750001515032233,-0.18750001518488343,0.062499984780555455,0.31249998474599433,0.5624999847114331],\\\"y\\\":[1.6000051324015534,1.6000021946752327,1.5999992569489119,1.599996319222591,1.5999933814962704],\\\"z\\\":[0.00015039990075090066,0.0001474587562785521,0.00014451761180620353,0.00014157646733385497,0.0001386353228615064],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"black\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"x\\\":[-0.4375000274105985,-0.18750002748442468,0.06249997244174921,0.3124999723679231,0.562499972294097],\\\"y\\\":[2.400007486707306,2.4000031932873562,2.3999988998674064,2.3999946064474567,2.399990313027507],\\\"z\\\":[0.00032250546002824353,0.00031820666645609595,0.0003139078728839484,0.0003096090793118008,0.00030531028573965323],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"black\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"x\\\":[-0.4375000419477604,-0.18750004207304757,0.0624999578016652,0.31249995767637795,0.5624999575510907],\\\"y\\\":[3.2000097290216205,3.2000041361397518,3.199998543257883,3.1999929503760143,3.1999873574941455],\\\"z\\\":[0.0005496119456658349,0.0005440116524442518,0.0005384113592226688,0.0005328110660010858,0.0005272107727795027],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"black\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"x\\\":[-0.4375000581303961,-0.18750005831539146,0.062499941499613264,0.31249994131461795,0.5624999411296226],\\\"y\\\":[4.000011787646406,4.000004991724207,3.9999981958020085,3.9999913998798102,3.999984603957612],\\\"z\\\":[0.0008248117514201825,0.0008180063787988016,0.0008112010061774206,0.0008043956335560395,0.0007975902609346586],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"black\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"x\\\":[-0.4375000756203353,-0.18750007587297496,0.062499923874385396,0.3124999236217457,0.5624999233691061],\\\"y\\\":[4.800013730415652,4.800005788831466,4.799997847247279,4.799989905663092,4.799981964078905],\\\"z\\\":[0.0011419228184735238,0.0011339697660142335,0.0011260167135549429,0.0011180636610956523,0.0011101106086363619],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"black\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"x\\\":[-0.43750009396440015,-0.1875000942880858,0.06249990538822854,0.31249990506454295,0.5624999047408573],\\\"y\\\":[5.600015486172148,5.600006497238266,5.5999975083043845,5.599988519370503,5.599979530436621],\\\"z\\\":[0.0014949076836219992,0.0014859053575590015,0.001476903031496004,0.0014679007054330066,0.0014588983793700089],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"black\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"x\\\":[-0.4375001129859722,-0.1875001133847934,0.0624998862163855,0.3124998858175643,0.5624998854187432],\\\"y\\\":[6.400017125235562,6.400007147597506,6.39999716995945,6.399987192321394,6.399977214683338],\\\"z\\\":[0.0018784887981949942,0.0018684959356252715,0.0018585030730555484,0.0018485102104858254,0.0018385173479161026],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"black\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"x\\\":[-0.4375001323665614,-0.1875001328395648,0.06249986668743177,0.3124998662144284,0.562499865741425],\\\"y\\\":[7.200018575842047,7.200007709974395,7.199996844106742,7.19998597823909,7.199975112371438],\\\"z\\\":[0.0022875402460654105,0.0022766574780168644,0.0022657747099683184,0.0022548919419197724,0.0022440091738712264],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"black\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"x\\\":[-0.43750015204242715,-0.1875001525902163,0.06249984686199458,0.31249984631420546,0.5624998457664163],\\\"y\\\":[8.000019908825728,8.000008215603518,7.999996522381308,7.999984829159098,7.999973135936888],\\\"z\\\":[0.002717707587989787,0.0027059959238166756,0.002694284259643564,0.0026825725954704523,0.002670860931297341],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"black\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"x\\\":[-0.43750017178994344,-0.18750017240775796,0.062499826974427505,0.312499826356613,0.5624998257387984],\\\"y\\\":[8.80002105303595,8.800008634998948,8.799996216961945,8.799983798924943,8.799971380887941],\\\"z\\\":[0.003164788301163934,0.00315235047156843,0.003139912641972926,0.003127474812377422,0.003115036982781918],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"black\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"x\\\":[-0.4375001916179239,-0.18750019230338255,0.062499807011158884,0.3124998063257003,0.5624998056402417],\\\"y\\\":[9.600022079802349,9.600008999668942,9.599995919535536,9.599982839402129,9.599969759268722],\\\"z\\\":[0.003625345445617321,0.003612244321978627,0.003599143198339933,0.003586042074701239,0.003572940951062545],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"black\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"x\\\":[-0.4375002113643574,-0.18750021210963969,0.06249978714507812,0.3124997863997959,0.5624997856545136],\\\"y\\\":[10.400022919780158,10.400009280849583,10.399995641919006,10.399982002988429,10.399968364057854],\\\"z\\\":[0.004096090111835357,0.004082429194450335,0.004068768277065312,0.0040551073596802895,0.004041446442295267],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"black\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"x\\\":[-0.43750023107885805,-0.18750023187928208,0.062499767320293845,0.31249976651986977,0.5624997657194457],\\\"y\\\":[11.200023644449196,11.200009509987185,11.199995375525171,11.199981241063158,11.199967106601147],\\\"z\\\":[0.0045744826124137754,0.004560325318252977,0.00454616802409218,0.004532010729931383,0.004517853435770585],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"black\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"x\\\":[-0.43750025063692877,-0.18750025148252614,0.062499747671876424,0.312499746826279,0.5624997459806815],\\\"y\\\":[12.000024187077601,12.000009659246636,11.99999513141567,11.999980603584703,11.999966075753738],\\\"z\\\":[0.005058124427915424,0.005043573110761696,0.005029021793607967,0.005014470476454239,0.0049999191593005105],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"black\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"x\\\":[-0.4375002701068412,-0.18750027099142436,0.06249972812399248,0.31249972723940933,0.5624997263548261],\\\"y\\\":[12.800024618563835,12.800009759600563,12.79999490063729,12.799980041674019,12.799965182710746],\\\"z\\\":[0.005545333750792834,0.0055304507811946265,0.00551556781159642,0.005500684841998214,0.005485801872400007],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"black\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"x\\\":[-0.43750028938977437,-0.18750029030227897,0.06249970878521643,0.3124997078727118,0.5624997069602071],\\\"y\\\":[13.600024876458574,13.600009784797404,13.599994693136232,13.59997960147506,13.599964509813889],\\\"z\\\":[0.006034555275549564,0.0060194392546856455,0.0060043232338217265,0.0059892072129578075,0.005974091192093889],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"black\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"x\\\":[-0.4375003085605567,-0.18750030949419816,0.06249968957216046,0.31249968863851907,0.5624996877048777],\\\"y\\\":[14.400025030543393,14.400009765078664,14.399994499613936,14.399979234149207,14.399963968684478],\\\"z\\\":[0.006524891089689876,0.006509601017991055,0.006494310946292235,0.006479020874593415,0.0064637308028945946],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"black\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"x\\\":[-0.43750032755255314,-0.18750032849661877,0.06249967055931569,0.3124996696152501,0.5624996686711845],\\\"y\\\":[15.200025028918631,15.20000967846006,15.199994328001486,15.199978977542912,15.19996362708434],\\\"z\\\":[0.00701554882735514,0.0070001736447586945,0.00698479846216225,0.006969423279565805,0.00695404809696936],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"black\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"x\\\":[-0.4375003464451198,-0.18750034739363916,0.062499651657841424,0.312499650709322,0.5624996497608026],\\\"y\\\":[16.00002494175388,16.000009555123633,15.999994168493387,15.999978781863144,15.999963395232898],\\\"z\\\":[0.007506285835269044,0.007490874433673721,0.007475463032078398,0.007460051630483075,0.007444640228887752],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"lightskyblue\\\"},\\\"mode\\\":\\\"lines\\\",\\\"name\\\":\\\"Aero wake\\\",\\\"surfaceaxis\\\":2,\\\"x\\\":[0.5625000000000001,0.8124619250000001,0.8124619134459421,0.5624999942343187,0.5625000000000001],\\\"y\\\":[9.162206417444405e-18,9.162206417444405e-18,0.7999973557508343,0.7999966402495885,9.162206417444405e-18],\\\"z\\\":[4.871002816324649e-17,0.004363102500000049,0.0043955753776063365,3.4360542762473186e-05,4.871002816324649e-17],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"lightskyblue\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[0.5624999942343187,0.8124619134459421,0.8124618930303587,0.5624999847072422,0.5624999942343187],\\\"y\\\":[0.7999966402495885,0.7999973557508343,1.599994811000482,1.5999933810227123,0.7999966402495885],\\\"z\\\":[3.4360542762473186e-05,0.0043955753776063365,0.0044931958770315856,0.00013863466028518693,3.4360542762473186e-05],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"lightskyblue\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[0.5624999847072422,0.8124618930303587,0.8124618649474605,0.5624999722860239,0.5624999847072422],\\\"y\\\":[1.5999933810227123,1.599994811000482,2.399992454598478,2.399990312319138,1.5999933810227123],\\\"z\\\":[0.00013863466028518693,0.0044931958770315856,0.004649043770950182,0.0003053092113602273,0.00013863466028518693],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"lightskyblue\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[0.5624999722860239,0.8124618649474605,0.812461830109957,0.5624999575381,0.5624999722860239],\\\"y\\\":[2.399990312319138,2.399992454598478,3.1999902063390535,3.1999873565514116,2.399990312319138],\\\"z\\\":[0.0003053092113602273,0.004649043770950182,0.004856514630134907,0.0005272092806341323,0.0003053092113602273],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"lightskyblue\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[0.5624999575381,0.812461830109957,0.8124617895303606,0.5624999411107972,0.5624999575381],\\\"y\\\":[3.1999873565514116,3.1999902063390535,3.9999881562546817,3.9999846027816304,3.1999873565514116],\\\"z\\\":[0.0005272092806341323,0.004856514630134907,0.005109416600361549,0.0007975883806602837,0.0005272092806341323],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"lightskyblue\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[0.5624999411107972,0.8124617895303606,0.8124617439231214,0.5624999233436245,0.5624999411107972],\\\"y\\\":[3.9999846027816304,3.9999881562546817,4.799986214012396,4.799981962669224,3.9999846027816304],\\\"z\\\":[0.0007975883806602837,0.005109416600361549,0.005401911948040305,0.0011101083990921862,0.0007975883806602837],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"lightskyblue\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[0.5624999233436245,0.8124617439231214,0.8124616941475412,0.5624999047080059,0.5624999233436245],\\\"y\\\":[4.799981962669224,4.799986214012396,5.599984470124919,5.599979528793419,4.799981962669224],\\\"z\\\":[0.0011101083990921862,0.005401911948040305,0.005728596222836626,0.001458895928473685,0.0011101083990921862],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"lightskyblue\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[0.5624999047080059,0.8124616941475412,0.812461640764451,0.56249988537789,0.5624999047080059],\\\"y\\\":[5.599979528793419,5.599984470124919,6.399982829358027,6.399977212805474,5.599979528793419],\\\"z\\\":[0.001458895928473685,0.005728596222836626,0.006084428857723916,0.0018385147642435145,0.001458895928473685],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"lightskyblue\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[0.56249988537789,0.812461640764451,0.8124615845040528,0.5624998656920386,0.56249988537789],\\\"y\\\":[6.399977212805474,6.399982829358027,7.199981380818826,7.199975110259148,6.399977212805474],\\\"z\\\":[0.0018385147642435145,0.006084428857723916,0.006464810371519351,0.00224400658612019,0.0018385147642435145],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"lightskyblue\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[0.5624998656920386,0.8124615845040528,0.8124615258019251,0.5624998457080345,0.5624998656920386],\\\"y\\\":[7.199975110259148,7.199981380818826,7.999980027286746,7.999973133589262,7.199975110259148],\\\"z\\\":[0.00224400658612019,0.006464810371519351,0.00686551272588112,0.0026708584775881213,0.00224400658612019],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"lightskyblue\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[0.5624998457080345,0.8124615258019251,0.8124614652767873,0.5624998256710535,0.5624998457080345],\\\"y\\\":[7.999973133589262,7.999980027286746,8.799978857160102,8.799971378307317,7.999973133589262],\\\"z\\\":[0.0026708584775881213,0.00686551272588112,0.007282754507096603,0.0031150348110584127,0.0026708584775881213],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"lightskyblue\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[0.5624998256710535,0.8124614652767873,0.8124614032576343,0.5624998055628219,0.5624998256710535],\\\"y\\\":[8.799971378307317,8.799978857160102,9.59997777383543,9.59996975645606,8.799971378307317],\\\"z\\\":[0.0031150348110584127,0.007282754507096603,0.007713132552295366,0.0035729392050654492,0.0031150348110584127],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"lightskyblue\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[0.5624998055628219,0.8124614032576343,0.8124613402623917,0.5624997855672028,0.5624998055628219],\\\"y\\\":[9.59996975645606,9.59997777383543,10.399976865445812,10.39996836102129,9.59996975645606],\\\"z\\\":[0.0035729392050654492,0.007713132552295366,0.0081536905087987,0.004041445265628865,0.0035729392050654492],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"lightskyblue\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[0.5624997855672028,0.8124613402623917,0.8124612765247785,0.5624997656220664,0.5624997855672028],\\\"y\\\":[10.39996836102129,10.399976865445812,11.199976037253185,11.199967103346411,10.39996836102129],\\\"z\\\":[0.004041445265628865,0.0081536905087987,0.00860184653090365,0.004517852953449566,0.004041445265628865],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"lightskyblue\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[0.5624997656220664,0.8124612765247785,0.812461212465948,0.5624997458731538,0.5624997656220664],\\\"y\\\":[11.199967103346411,11.199976037253185,11.999975376131477,11.999966072300438,11.199967103346411],\\\"z\\\":[0.004517852953449566,0.00860184653090365,0.00905545614957633,0.0049999194902928795,0.004517852953449566],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"lightskyblue\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[0.5624997458731538,0.812461212465948,0.8124611482303272,0.5624997262370887,0.5624997458731538],\\\"y\\\":[11.999966072300438,11.999975376131477,12.799974789445866,12.799965179073068,11.999966072300438],\\\"z\\\":[0.0049999194902928795,0.00905545614957633,0.009512733392875675,0.005485803105934123,0.0049999194902928795],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"lightskyblue\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[0.5624997262370887,0.8124611482303272,0.8124610841393545,0.562499706832297,0.5624997262370887],\\\"y\\\":[12.799965179073068,12.799974789445866,13.599974359937981,13.599964506028565,12.799965179073068],\\\"z\\\":[0.005485803105934123,0.009512733392875675,0.009972311299224186,0.005974093414724043,0.005485803105934123],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"lightskyblue\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[0.562499706832297,0.8124610841393545,0.8124610202506753,0.5624996875668204,0.562499706832297],\\\"y\\\":[13.599964506028565,13.599974359937981,14.399973996920059,14.399963964776944,13.599964506028565],\\\"z\\\":[0.005974093414724043,0.009972311299224186,0.010433151853577634,0.0064637340689429204,0.005974093414724043],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"lightskyblue\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[0.5624996875668204,0.8124610202506753,0.8124609567699135,0.5624996685230919,0.5624996875668204],\\\"y\\\":[14.399963964776944,14.399973996920059,15.199973770005858,15.199963623110254,14.399963964776944],\\\"z\\\":[0.0064637340689429204,0.010433151853577634,0.010894598567877162,0.0069540524735901225,0.0064637340689429204],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"lightskyblue\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[0.5624996685230919,0.8124609567699135,0.812460893666179,0.5624996496027337,0.5624996685230919],\\\"y\\\":[15.199963623110254,15.199973770005858,15.999973587313422,15.99996339122673,15.199963623110254],\\\"z\\\":[0.0069540524735901225,0.010894598567877162,0.011356252256599593,0.007444645756118045,0.0069540524735901225],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"lightskyblue\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[0.8124619250000001,1.06242385,1.0624238509998334,0.8124619134459421,0.8124619250000001],\\\"y\\\":[9.162206417444405e-18,9.162206417444405e-18,0.8000041100488657,0.7999973557508343,9.162206417444405e-18],\\\"z\\\":[0.004363102500000049,0.00872620500000005,0.008754989921580773,0.0043955753776063365,0.004363102500000049],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"lightskyblue\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[0.8124619134459421,1.0624238509998334,1.0624238543968563,0.8124618930303587,0.8124619134459421],\\\"y\\\":[0.7999973557508343,0.8000041100488657,1.6000081028650377,1.599994811000482,0.7999973557508343],\\\"z\\\":[0.0043955753776063365,0.008754989921580773,0.00884477941056367,0.0044931958770315856,0.0043955753776063365],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"lightskyblue\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[0.8124618930303587,1.0624238543968563,1.0624238606253473,0.8124618649474605,0.8124618930303587],\\\"y\\\":[1.599994811000482,1.6000081028650377,2.4000118748560357,2.399992454598478,1.599994811000482],\\\"z\\\":[0.0044931958770315856,0.00884477941056367,0.008989074926814278,0.004649043770950182,0.0044931958770315856],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"lightskyblue\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[0.8124618649474605,1.0624238606253473,1.0624238698131283,0.812461830109957,0.8124618649474605],\\\"y\\\":[2.399992454598478,2.4000118748560357,3.2000154932795244,3.1999902063390535,2.399992454598478],\\\"z\\\":[0.004649043770950182,0.008989074926814278,0.009181700030089264,0.004856514630134907,0.004649043770950182],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"lightskyblue\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[0.812461830109957,1.0624238698131283,1.0624238821664975,0.8124617895303606,0.812461830109957],\\\"y\\\":[3.1999902063390535,3.2000154932795244,4.000018860900871,3.9999881562546817,3.1999902063390535],\\\"z\\\":[0.004856514630134907,0.009181700030089264,0.009416892386339146,0.005109416600361549,0.004856514630134907],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"lightskyblue\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[0.8124617895303606,1.0624238821664975,1.0624238975798306,0.8124617439231214,0.8124617895303606],\\\"y\\\":[3.9999881562546817,4.000018860900871,4.800022061050457,4.799986214012396,3.9999881562546817],\\\"z\\\":[0.005109416600361549,0.009416892386339146,0.009689248635280041,0.005401911948040305,0.005109416600361549],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"lightskyblue\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[0.8124617439231214,1.0624238975798306,1.0624239160825706,0.8124616941475412,0.8124617439231214],\\\"y\\\":[4.799986214012396,4.800022061050457,5.600024997008804,5.599984470124919,4.799986214012396],\\\"z\\\":[0.005401911948040305,0.009689248635280041,0.009993797411684078,0.005728596222836626,0.005401911948040305],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"lightskyblue\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[0.8124616941475412,1.0624239160825706,1.062423937405997,0.812461640764451,0.8124616941475412],\\\"y\\\":[5.599984470124919,5.600024997008804,6.4000277557939675,6.399982829358027,5.599984470124919],\\\"z\\\":[0.005728596222836626,0.009993797411684078,0.01032591960212853,0.006084428857723916,0.005728596222836626],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"lightskyblue\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[0.812461640764451,1.062423937405997,1.0624239614547102,0.8124615845040528,0.812461640764451],\\\"y\\\":[6.399982829358027,6.4000277557939675,7.200030239978838,7.199981380818826,6.399982829358027],\\\"z\\\":[0.006084428857723916,0.01032591960212853,0.010681425124526835,0.006464810371519351,0.006084428857723916],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"lightskyblue\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[0.8124615845040528,1.0624239614547102,1.0624239878559636,0.8124615258019251,0.8124615845040528],\\\"y\\\":[7.199981380818826,7.200030239978838,8.000032537843335,7.999980027286746,7.199981380818826],\\\"z\\\":[0.006464810371519351,0.010681425124526835,0.01105645551949636,0.00686551272588112,0.006464810371519351],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"lightskyblue\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[0.8124615258019251,1.0624239878559636,1.0624240164391061,0.8124614652767873,0.8124615258019251],\\\"y\\\":[7.999980027286746,8.000032537843335,8.800034552976555,8.799978857160102,7.999980027286746],\\\"z\\\":[0.00686551272588112,0.01105645551949636,0.011447569094086897,0.007282754507096603,0.00686551272588112],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"lightskyblue\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[0.8124614652767873,1.0624240164391061,1.062424046779832,0.8124614032576343,0.8124614652767873],\\\"y\\\":[8.799978857160102,8.800034552976555,9.600036375170923,9.59997777383543,8.799978857160102],\\\"z\\\":[0.007282754507096603,0.011447569094086897,0.011851630739051535,0.007713132552295366,0.007282754507096603],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"lightskyblue\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[0.8124614032576343,1.062424046779832,1.0624240786772026,0.8124613402623917,0.8124614032576343],\\\"y\\\":[9.59997777383543,9.600036375170923,10.400037910905114,10.399976865445812,9.59997777383543],\\\"z\\\":[0.007713132552295366,0.011851630739051535,0.012265908780960077,0.0081536905087987,0.007713132552295366],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"lightskyblue\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[0.8124613402623917,1.0624240786772026,1.0624241117021795,0.8124612765247785,0.8124613402623917],\\\"y\\\":[10.399976865445812,10.400037910905114,11.200039251394067,11.199976037253185,10.399976865445812],\\\"z\\\":[0.0081536905087987,0.012265908780960077,0.012687962171243582,0.00860184653090365,0.0081536905087987],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"lightskyblue\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[0.8124612765247785,1.0624241117021795,1.0624241456626615,0.812461212465948,0.8124612765247785],\\\"y\\\":[11.199976037253185,11.200039251394067,12.000040307290025,11.999975376131477,11.199976037253185],\\\"z\\\":[0.00860184653090365,0.012687962171243582,0.013115745021976807,0.00905545614957633,0.00860184653090365],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"lightskyblue\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[0.812461212465948,1.0624241456626615,1.0624241801663046,0.8124611482303272,0.812461212465948],\\\"y\\\":[11.999975376131477,12.000040307290025,12.800041170384995,12.799974789445866,11.999975376131477],\\\"z\\\":[0.00905545614957633,0.013115745021976807,0.01354749833673766,0.009512733392875675,0.00905545614957633],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"lightskyblue\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[0.8124611482303272,1.0624241801663046,1.0624242150604906,0.8124610841393545,0.8124611482303272],\\\"y\\\":[12.799974789445866,12.800041170384995,13.600041757575765,13.599974359937981,12.799974789445866],\\\"z\\\":[0.009512733392875675,0.01354749833673766,0.013981850987710955,0.009972311299224186,0.009512733392875675],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"lightskyblue\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[0.8124610841393545,1.0624242150604906,1.062424250024925,0.8124610202506753,0.8124610841393545],\\\"y\\\":[13.599974359937981,13.600041757575765,14.40004216025581,14.399973996920059,13.599974359937981],\\\"z\\\":[0.009972311299224186,0.013981850987710955,0.01441771892949864,0.010433151853577634,0.009972311299224186],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"lightskyblue\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[0.8124610202506753,1.062424250024925,1.062424284959919,0.8124609567699135,0.8124610202506753],\\\"y\\\":[14.399973996920059,14.40004216025581,15.200042309462798,15.199973770005858,14.399973996920059],\\\"z\\\":[0.010433151853577634,0.01441771892949864,0.014854388055001192,0.010894598567877162,0.010433151853577634],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"lightskyblue\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[0.8124609567699135,1.062424284959919,1.0624243196435175,0.812460893666179,0.8124609567699135],\\\"y\\\":[15.199973770005858,15.200042309462798,16.0000422977623,15.999973587313422,15.199973770005858],\\\"z\\\":[0.010894598567877162,0.014854388055001192,0.015291409655183566,0.011356252256599593,0.010894598567877162],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"lightskyblue\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[1.06242385,1.312385775,1.312385765590729,1.0624238509998334,1.06242385],\\\"y\\\":[9.162206417444405e-18,9.162206417444405e-18,0.7999967708512715,0.8000041100488657,9.162206417444405e-18],\\\"z\\\":[0.00872620500000005,0.01308930750000005,0.013117808415149604,0.008754989921580773,0.00872620500000005],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"lightskyblue\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[1.0624238509998334,1.312385765590729,1.3123857492560815,1.0624238543968563,1.0624238509998334],\\\"y\\\":[0.8000041100488657,0.7999967708512715,1.5999936447026821,1.6000081028650377,0.8000041100488657],\\\"z\\\":[0.008754989921580773,0.013117808415149604,0.013205038226600496,0.00884477941056367,0.008754989921580773],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"lightskyblue\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[1.0624238543968563,1.3123857492560815,1.312385727066829,1.0624238606253473,1.0624238543968563],\\\"y\\\":[1.6000081028650377,1.5999936447026821,2.399990713499301,2.4000118748560357,1.6000081028650377],\\\"z\\\":[0.00884477941056367,0.013205038226600496,0.013344567263095089,0.008989074926814278,0.00884477941056367],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"lightskyblue\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[1.0624238606253473,1.312385727066829,1.312385699803704,1.0624238698131283,1.0624238606253473],\\\"y\\\":[2.4000118748560357,2.399990713499301,3.1999878994597233,3.2000154932795244,2.4000118748560357],\\\"z\\\":[0.008989074926814278,0.013344567263095089,0.013530285209410336,0.009181700030089264,0.008989074926814278],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"lightskyblue\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[1.0624238698131283,1.312385699803704,1.3123856683437078,1.0624238821664975,1.0624238698131283],\\\"y\\\":[3.2000154932795244,3.1999878994597233,3.999985295937126,4.000018860900871,3.2000154932795244],\\\"z\\\":[0.009181700030089264,0.013530285209410336,0.013756498247063131,0.009416892386339146,0.009181700030089264],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"lightskyblue\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[1.0624238821664975,1.3123856683437078,1.3123856332589672,1.0624238975798306,1.0624238821664975],\\\"y\\\":[4.000018860900871,3.999985295937126,4.799982815059392,4.800022061050457,4.000018860900871],\\\"z\\\":[0.009416892386339146,0.013756498247063131,0.014017868983988494,0.009689248635280041,0.009416892386339146],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"lightskyblue\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[1.0624238975798306,1.3123856332589672,1.312385595267562,1.0624239160825706,1.0624238975798306],\\\"y\\\":[4.800022061050457,4.799982815059392,5.599980551570029,5.600024997008804,4.800022061050457],\\\"z\\\":[0.009689248635280041,0.014017868983988494,0.014309495114931086,0.009993797411684078,0.009689248635280041],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"lightskyblue\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[1.0624239160825706,1.312385595267562,1.3123855547838665,1.062423937405997,1.0624239160825706],\\\"y\\\":[5.600024997008804,5.599980551570029,6.399978412712719,6.4000277557939675,5.600024997008804],\\\"z\\\":[0.009993797411684078,0.014309495114931086,0.014626828084469745,0.01032591960212853,0.009993797411684078],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"lightskyblue\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[1.062423937405997,1.3123855547838665,1.3123855123976538,1.0624239614547102,1.062423937405997],\\\"y\\\":[6.4000277557939675,6.399978412712719,7.199976492431211,7.200030239978838,6.4000277557939675],\\\"z\\\":[0.01032591960212853,0.014626828084469745,0.014965753979210595,0.010681425124526835,0.01032591960212853],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"lightskyblue\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[1.0624239614547102,1.3123855123976538,1.312385468400212,1.0624239878559636,1.0624239614547102],\\\"y\\\":[7.200030239978838,7.199976492431211,7.999974695521935,8.000032537843335,7.200030239978838],\\\"z\\\":[0.010681425124526835,0.014965753979210595,0.015322499672438088,0.01105645551949636,0.010681425124526835],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"lightskyblue\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[1.0624239878559636,1.312385468400212,1.3123854232768732,1.0624240164391061,1.0624239878559636],\\\"y\\\":[8.000032537843335,7.999974695521935,8.799973115398142,8.800034552976555,8.000032537843335],\\\"z\\\":[0.01105645551949636,0.015322499672438088,0.015693722215994754,0.011447569094086897,0.01105645551949636],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"lightskyblue\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[1.0624240164391061,1.3123854232768732,1.3123853772210174,1.062424046779832,1.0624240164391061],\\\"y\\\":[8.800034552976555,8.799973115398142,9.599971656847169,9.600036375170923,8.800034552976555],\\\"z\\\":[0.011447569094086897,0.015693722215994754,0.01607640837769345,0.011851630739051535,0.011447569094086897],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"lightskyblue\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[1.062424046779832,1.3123853772210174,1.312385330630465,1.0624240786772026,1.062424046779832],\\\"y\\\":[9.600036375170923,9.599971656847169,10.39997041301708,10.400037910905114,9.600036375170923],\\\"z\\\":[0.011851630739051535,0.01607640837769345,0.01646796933785412,0.012265908780960077,0.011851630739051535],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"lightskyblue\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[1.0624240786772026,1.312385330630465,1.3123852836188357,1.0624241117021795,1.0624240786772026],\\\"y\\\":[10.400037910905114,10.39997041301708,11.19996929003901,11.200039251394067,10.400037910905114],\\\"z\\\":[0.012265908780960077,0.01646796933785412,0.01686613334272428,0.012687962171243582,0.012265908780960077],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"lightskyblue\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[1.0624241117021795,1.3123852836188357,1.3123852365066258,1.0624241456626615,1.0624241117021795],\\\"y\\\":[11.200039251394067,11.19996929003901,11.999968379665505,12.000040307290025,11.200039251394067],\\\"z\\\":[0.012687962171243582,0.01686613334272428,0.01726904179198468,0.013115745021976807,0.012687962171243582],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"lightskyblue\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[1.0624241456626615,1.3123852365066258,1.312385189340325,1.0624241801663046,1.0624241456626615],\\\"y\\\":[12.000040307290025,11.999968379665505,12.799967589645137,12.800041170384995,12.000040307290025],\\\"z\\\":[0.013115745021976807,0.01726904179198468,0.01767513419496066,0.01354749833673766,0.013115745021976807],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"lightskyblue\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[1.0624241801663046,1.312385189340325,1.3123851423655943,1.0624242150604906,1.0624241801663046],\\\"y\\\":[12.800041170384995,12.799967589645137,13.599967007102007,13.600041757575765,12.800041170384995],\\\"z\\\":[0.01354749833673766,0.01767513419496066,0.018083244240899084,0.013981850987710955,0.01354749833673766],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"lightskyblue\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[1.0624242150604906,1.3123851423655943,1.312385095570038,1.062424250024925,1.0624242150604906],\\\"y\\\":[13.600041757575765,13.599967007102007,14.399966541012066,14.40004216025581,13.600041757575765],\\\"z\\\":[0.013981850987710955,0.018083244240899084,0.018492473641254375,0.01441771892949864,0.013981850987710955],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"lightskyblue\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[1.062424250024925,1.312385095570038,1.3123850491119522,1.062424284959919,1.062424250024925],\\\"y\\\":[14.40004216025581,14.399966541012066,15.199966264105328,15.200042309462798,14.40004216025581],\\\"z\\\":[0.01441771892949864,0.018492473641254375,0.01890228052834785,0.014854388055001192,0.01441771892949864],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"lightskyblue\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[1.062424284959919,1.3123850491119522,1.3123850029222204,1.0624243196435175,1.062424284959919],\\\"y\\\":[15.200042309462798,15.199966264105328,15.99996608299767,16.0000422977623,15.200042309462798],\\\"z\\\":[0.014854388055001192,0.01890228052834785,0.019312320316468137,0.015291409655183566,0.014854388055001192],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"lightskyblue\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[1.312385775,1.5623477000000001,1.562347690821025,1.312385765590729,1.312385775],\\\"y\\\":[9.162206417444405e-18,9.162206417444405e-18,0.799997122848918,0.7999967708512715,9.162206417444405e-18],\\\"z\\\":[0.01308930750000005,0.01745241000000005,0.017480923114039832,0.013117808415149604,0.01308930750000005],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"lightskyblue\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[1.312385765590729,1.562347690821025,1.562347674799373,1.3123857492560815,1.312385765590729],\\\"y\\\":[0.7999967708512715,0.799997122848918,1.5999943470993463,1.5999936447026821,0.7999967708512715],\\\"z\\\":[0.013117808415149604,0.017480923114039832,0.017567366251003295,0.013205038226600496,0.013117808415149604],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"lightskyblue\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[1.3123857492560815,1.562347674799373,1.5623476529459288,1.312385727066829,1.3123857492560815],\\\"y\\\":[1.5999936447026821,1.5999943470993463,2.3999917639131514,2.399990713499301,1.5999936447026821],\\\"z\\\":[0.013205038226600496,0.017567366251003295,0.017705147752285617,0.013344567263095089,0.013205038226600496],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"lightskyblue\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[1.312385727066829,1.5623476529459288,1.5623476259926226,1.312385699803704,1.312385727066829],\\\"y\\\":[2.399990713499301,2.3999917639131514,3.1999892952201012,3.1999878994597233,2.399990713499301],\\\"z\\\":[0.013344567263095089,0.017705147752285617,0.017888002109101492,0.013530285209410336,0.013344567263095089],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"lightskyblue\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[1.312385699803704,1.5623476259926226,1.5623475947770735,1.3123856683437078,1.312385699803704],\\\"y\\\":[3.1999878994597233,3.1999892952201012,3.9999870303856278,3.999985295937126,3.1999878994597233],\\\"z\\\":[0.013530285209410336,0.017888002109101492,0.01811008298364314,0.013756498247063131,0.013530285209410336],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"lightskyblue\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[1.3123856683437078,1.5623475947770735,1.5623475598403873,1.3123856332589672,1.3123856683437078],\\\"y\\\":[3.999985295937126,3.9999870303856278,4.799984878111898,4.799982815059392,3.999985295937126],\\\"z\\\":[0.013756498247063131,0.01811008298364314,0.018365920918453814,0.014017868983988494,0.013756498247063131],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"lightskyblue\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[1.3123856332589672,1.5623475598403873,1.562347521877352,1.312385595267562,1.3123856332589672],\\\"y\\\":[4.799982815059392,4.799984878111898,5.59998292970836,5.599980551570029,4.799982815059392],\\\"z\\\":[0.014017868983988494,0.018365920918453814,0.018650494977104467,0.014309495114931086,0.014017868983988494],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"lightskyblue\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[1.312385595267562,1.562347521877352,1.5623474812848825,1.3123855547838665,1.312385595267562],\\\"y\\\":[5.599980551570029,5.59998292970836,6.399981091454103,6.399978412712719,5.599980551570029],\\\"z\\\":[0.014309495114931086,0.018650494977104467,0.01895918067700987,0.014626828084469745,0.014309495114931086],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"lightskyblue\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[1.3123855547838665,1.5623474812848825,1.5623474386424068,1.3123855123976538,1.3123855547838665],\\\"y\\\":[6.399978412712719,6.399981091454103,7.199979457022128,7.199976492431211,6.399978412712719],\\\"z\\\":[0.014626828084469745,0.01895918067700987,0.019287816111895742,0.014965753979210595,0.014626828084469745],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"lightskyblue\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[1.3123855123976538,1.5623474386424068,1.5623473942355086,1.312385468400212,1.3123855123976538],\\\"y\\\":[7.199976492431211,7.199979457022128,7.999977932154519,7.999974695521935,7.199976492431211],\\\"z\\\":[0.014965753979210595,0.019287816111895742,0.019632644031693732,0.015322499672438088,0.014965753979210595],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"lightskyblue\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[1.312385468400212,1.5623473942355086,1.562347348551272,1.3123854232768732,1.312385468400212],\\\"y\\\":[7.999974695521935,7.999977932154519,8.799976610851648,8.799973115398142,7.999974695521935],\\\"z\\\":[0.015322499672438088,0.019632644031693732,0.019990371655679427,0.015693722215994754,0.015322499672438088],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"lightskyblue\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[1.3123854232768732,1.562347348551272,1.5623473017883505,1.3123853772210174,1.3123854232768732],\\\"y\\\":[8.799973115398142,8.799976610851648,9.599975397732855,9.599971656847169,8.799973115398142],\\\"z\\\":[0.015693722215994754,0.019990371655679427,0.020358098718006947,0.01607640837769345,0.015693722215994754],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"lightskyblue\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[1.3123853772210174,1.5623473017883505,1.562347254357797,1.312385330630465,1.3123853772210174],\\\"y\\\":[9.599971656847169,9.599975397732855,10.399974384962816,10.39997041301708,9.599971656847169],\\\"z\\\":[0.01607640837769345,0.020358098718006947,0.020733377306197856,0.01646796933785412,0.01607640837769345],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"lightskyblue\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[1.312385330630465,1.562347254357797,1.5623472063875883,1.3123852836188357,1.312385330630465],\\\"y\\\":[10.39997041301708,10.399974384962816,11.199973475852698,11.19996929003901,10.39997041301708],\\\"z\\\":[0.01646796933785412,0.020733377306197856,0.021114119572776275,0.01686613334272428,0.01646796933785412],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"lightskyblue\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[1.3123852836188357,1.5623472063875883,1.5623471582205557,1.3123852365066258,1.3123852836188357],\\\"y\\\":[11.19996929003901,11.199973475852698,11.999972759265718,11.999968379665505,11.19996929003901],\\\"z\\\":[0.01686613334272428,0.021114119572776275,0.021498666720439867,0.01726904179198468,0.01686613334272428],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"lightskyblue\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[1.3123852365066258,1.5623471582205557,1.5623471099223738,1.312385189340325,1.3123852365066258],\\\"y\\\":[11.999968379665505,11.999972759265718,12.79997213800772,12.799967589645137,11.999968379665505],\\\"z\\\":[0.01726904179198468,0.021498666720439867,0.02188566981939099,0.01767513419496066,0.01726904179198468],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"lightskyblue\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[1.312385189340325,1.5623471099223738,1.5623470617648778,1.3123851423655943,1.312385189340325],\\\"y\\\":[12.799967589645137,12.79997213800772,13.599971695647595,13.599967007102007,12.799967589645137],\\\"z\\\":[0.01767513419496066,0.02188566981939099,0.022274172724010707,0.018083244240899084,0.01767513419496066],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"lightskyblue\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[1.3123851423655943,1.5623470617648778,1.5623470137527669,1.312385095570038,1.3123851423655943],\\\"y\\\":[13.599967007102007,13.599971695647595,14.399971335726036,14.399966541012066,13.599967007102007],\\\"z\\\":[0.018083244240899084,0.022274172724010707,0.022663458304022048,0.018492473641254375,0.018083244240899084],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"lightskyblue\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[1.312385095570038,1.5623470137527669,1.562346966066091,1.3123850491119522,1.312385095570038],\\\"y\\\":[14.399966541012066,14.399971335726036,15.199971128670821,15.199966264105328,14.399966541012066],\\\"z\\\":[0.018492473641254375,0.022663458304022048,0.023053144166224608,0.01890228052834785,0.018492473641254375],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"lightskyblue\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[1.3123850491119522,1.562346966066091,1.5623469186425232,1.3123850029222204,1.3123850491119522],\\\"y\\\":[15.199966264105328,15.199971128670821,15.999970977392403,15.99996608299767,15.199966264105328],\\\"z\\\":[0.01890228052834785,0.023053144166224608,0.023442975805592004,0.019312320316468137,0.01890228052834785],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"lightskyblue\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[1.5623477000000001,1.8123096250000001,1.8123096252793973,1.562347690821025,1.5623477000000001],\\\"y\\\":[9.162206417444405e-18,9.162206417444405e-18,0.8000042711855221,0.799997122848918,9.162206417444405e-18],\\\"z\\\":[0.01745241000000005,0.02181551250000005,0.021842245662087735,0.017480923114039832,0.01745241000000005],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"lightskyblue\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[1.562347690821025,1.8123096252793973,1.8123096273998411,1.562347674799373,1.562347690821025],\\\"y\\\":[0.799997122848918,0.8000042711855221,1.6000084254430789,1.5999943470993463,0.799997122848918],\\\"z\\\":[0.017480923114039832,0.021842245662087735,0.021926181197280452,0.017567366251003295,0.017480923114039832],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"lightskyblue\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[1.562347674799373,1.8123096273998411,1.812309631841271,1.5623476529459288,1.562347674799373],\\\"y\\\":[1.5999943470993463,1.6000084254430789,2.4000123599611722,2.3999917639131514,1.5999943470993463],\\\"z\\\":[0.017567366251003295,0.021926181197280452,0.02206079417356827,0.017705147752285617,0.017567366251003295],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"lightskyblue\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[1.5623476529459288,1.812309631841271,1.812309638767255,1.5623476259926226,1.5623476529459288],\\\"y\\\":[2.3999917639131514,2.4000123599611722,3.2000161441788317,3.1999892952201012,2.3999917639131514],\\\"z\\\":[0.017705147752285617,0.02206079417356827,0.02223989477813403,0.017888002109101492,0.017705147752285617],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"lightskyblue\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[1.5623476259926226,1.812309638767255,1.8123096484183707,1.5623475947770735,1.5623476259926226],\\\"y\\\":[3.1999892952201012,3.2000161441788317,4.000019677718904,3.9999870303856278,3.1999892952201012],\\\"z\\\":[0.017888002109101492,0.02223989477813403,0.022457724482343875,0.01811008298364314,0.017888002109101492],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"lightskyblue\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[1.5623475947770735,1.8123096484183707,1.8123096607152773,1.5623475598403873,1.5623475947770735],\\\"y\\\":[3.9999870303856278,4.000019677718904,4.800023043050683,4.799984878111898,3.9999870303856278],\\\"z\\\":[0.01811008298364314,0.022457724482343875,0.022708920175087563,0.018365920918453814,0.01811008298364314],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"lightskyblue\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[1.5623475598403873,1.8123096607152773,1.8123096757177453,1.562347521877352,1.5623475598403873],\\\"y\\\":[4.799984878111898,4.800023043050683,5.600026139930303,5.59998292970836,4.799984878111898],\\\"z\\\":[0.018365920918453814,0.022708920175087563,0.022988579886379087,0.018650494977104467,0.018365920918453814],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"lightskyblue\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[1.562347521877352,1.8123096757177453,1.8123096931809952,1.5623474812848825,1.562347521877352],\\\"y\\\":[5.59998292970836,5.600026139930303,6.400029057167697,6.399981091454103,5.59998292970836],\\\"z\\\":[0.018650494977104467,0.022988579886379087,0.023292206961162812,0.01895918067700987,0.018650494977104467],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"lightskyblue\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[1.5623474812848825,1.8123096931809952,1.8123097130428614,1.5623474386424068,1.5623474812848825],\\\"y\\\":[6.399981091454103,6.400029057167697,7.200031695838008,7.199979457022128,6.399981091454103],\\\"z\\\":[0.01895918067700987,0.023292206961162812,0.023615767898237508,0.019287816111895742,0.01895918067700987],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"lightskyblue\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[1.5623474386424068,1.8123097130428614,1.8123097349564945,1.5623473942355086,1.5623474386424068],\\\"y\\\":[7.199979457022128,7.200031695838008,8.000034148296033,7.999977932154519,7.199979457022128],\\\"z\\\":[0.019287816111895742,0.023615767898237508,0.023955616210629194,0.019632644031693732,0.019287816111895742],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"lightskyblue\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[1.5623473942355086,1.8123097349564945,1.8123097587908352,1.562347348551272,1.5623473942355086],\\\"y\\\":[7.999977932154519,8.000034148296033,8.800036316222785,8.799976610851648,7.999977932154519],\\\"z\\\":[0.019632644031693732,0.023955616210629194,0.024308558183696316,0.019990371655679427,0.019632644031693732],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"lightskyblue\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[1.562347348551272,1.8123097587908352,1.812309784150342,1.5623473017883505,1.562347348551272],\\\"y\\\":[8.799976610851648,8.800036316222785,9.600038292975295,9.599975397732855,8.799976610851648],\\\"z\\\":[0.019990371655679427,0.024308558183696316,0.02467175825347697,0.020358098718006947,0.019990371655679427],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"lightskyblue\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[1.5623473017883505,1.812309784150342,1.8123098108800397,1.562347254357797,1.5623473017883505],\\\"y\\\":[9.599975397732855,9.600038292975295,10.400039980171375,10.399974384962816,9.599975397732855],\\\"z\\\":[0.020358098718006947,0.02467175825347697,0.025042818714815958,0.020733377306197856,0.020358098718006947],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"lightskyblue\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[1.562347254357797,1.8123098108800397,1.8123098385802803,1.5623472063875883,1.562347254357797],\\\"y\\\":[10.399974384962816,10.400039980171375,11.200041470745928,11.199973475852698,10.399974384962816],\\\"z\\\":[0.020733377306197856,0.025042818714815958,0.02541966496156141,0.021114119572776275,0.020733377306197856],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"lightskyblue\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[1.5623472063875883,1.8123098385802803,1.812309867107981,1.5623471582205557,1.5623472063875883],\\\"y\\\":[11.199973475852698,11.200041470745928,12.000042667086927,11.999972759265718,11.199973475852698],\\\"z\\\":[0.021114119572776275,0.02541966496156141,0.025800639193156966,0.021498666720439867,0.021114119572776275],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"lightskyblue\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[1.5623471582205557,1.812309867107981,1.8123098960957866,1.5623471099223738,1.5623471582205557],\\\"y\\\":[11.999972759265718,12.000042667086927,12.800043661532847,12.79997213800772,11.999972759265718],\\\"z\\\":[0.021498666720439867,0.025800639193156966,0.026184363669349748,0.02188566981939099,0.021498666720439867],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"lightskyblue\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[1.5623471099223738,1.8123098960957866,1.8123099254371609,1.5623470617648778,1.5623471099223738],\\\"y\\\":[12.79997213800772,12.800043661532847,13.60004436051208,13.599971695647595,12.79997213800772],\\\"z\\\":[0.02188566981939099,0.026184363669349748,0.026569848578482658,0.022274172724010707,0.02188566981939099],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"lightskyblue\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[1.5623470617648778,1.8123099254371609,1.8123099548260293,1.5623470137527669,1.5623470617648778],\\\"y\\\":[13.599971695647595,13.60004436051208,14.40004485653229,14.399971335726036,13.599971695647595],\\\"z\\\":[0.022274172724010707,0.026569848578482658,0.026956330992660843,0.022663458304022048,0.022274172724010707],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"lightskyblue\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[1.5623470137527669,1.8123099548260293,1.812309984197048,1.562346966066091,1.5623470137527669],\\\"y\\\":[14.399971335726036,14.40004485653229,15.200045070532308,15.199971128670821,14.399971335726036],\\\"z\\\":[0.022663458304022048,0.026956330992660843,0.02734338968094543,0.023053144166224608,0.022663458304022048],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"lightskyblue\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[1.562346966066091,1.812309984197048,1.8123100133243386,1.5623469186425232,1.562346966066091],\\\"y\\\":[15.199971128670821,15.200045070532308,16.00004509958812,15.999970977392403,15.199971128670821],\\\"z\\\":[0.023053144166224608,0.02734338968094543,0.027730739956343724,0.023442975805592004,0.023053144166224608],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"lightskyblue\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[1.8123096250000001,2.06227155,2.062271537819961,1.8123096252793973,1.8123096250000001],\\\"y\\\":[9.162206417444405e-18,9.162206417444405e-18,0.7999968504395711,0.8000042711855221,9.162206417444405e-18],\\\"z\\\":[0.02181551250000005,0.02617861500000005,0.026206145672870378,0.021842245662087735,0.02181551250000005],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"lightskyblue\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[1.8123096252793973,2.062271537819961,2.0622715161497642,1.8123096273998411,1.8123096252793973],\\\"y\\\":[0.8000042711855221,0.7999968504395711,1.5999938047112736,1.6000084254430789,0.8000042711855221],\\\"z\\\":[0.021842245662087735,0.026206145672870378,0.02629050138818445,0.021926181197280452,0.021842245662087735],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"lightskyblue\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[1.8123096273998411,2.0622715161497642,2.062271486229936,1.812309631841271,1.8123096273998411],\\\"y\\\":[1.6000084254430789,1.5999938047112736,2.399990956607656,2.4000123599611722,1.6000084254430789],\\\"z\\\":[0.021926181197280452,0.02629050138818445,0.026425515849181777,0.02206079417356827,0.021926181197280452],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"lightskyblue\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[1.812309631841271,2.062271486229936,2.062271449019728,1.812309638767255,1.812309631841271],\\\"y\\\":[2.4000123599611722,2.399990956607656,3.199988230166699,3.2000161441788317,2.4000123599611722],\\\"z\\\":[0.02206079417356827,0.026425515849181777,0.02660533252262167,0.02223989477813403,0.02206079417356827],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"lightskyblue\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[1.812309638767255,2.062271449019728,2.062271405583596,1.8123096484183707,1.812309638767255],\\\"y\\\":[3.2000161441788317,3.199988230166699,3.999985717099869,4.000019677718904,3.2000161441788317],\\\"z\\\":[0.02223989477813403,0.02660533252262167,0.026824499204128972,0.022457724482343875,0.02223989477813403],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"lightskyblue\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[1.8123096484183707,2.062271405583596,2.062271356683286,1.8123096607152773,1.8123096484183707],\\\"y\\\":[4.000019677718904,3.999985717099869,4.799983327325806,4.800023043050683,4.000019677718904],\\\"z\\\":[0.022457724482343875,0.026824499204128972,0.027077892142435816,0.022708920175087563,0.022457724482343875],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"lightskyblue\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[1.8123096607152773,2.062271356683286,2.062271303232613,1.8123096757177453,1.8123096607152773],\\\"y\\\":[4.800023043050683,4.799983327325806,5.59998115379444,5.600026139930303,4.800023043050683],\\\"z\\\":[0.022708920175087563,0.027077892142435816,0.027360804287995796,0.022988579886379087,0.022708920175087563],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"lightskyblue\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[1.8123096757177453,2.062271303232613,2.0622712458356625,1.8123096931809952,1.8123096757177453],\\\"y\\\":[5.600026139930303,5.59998115379444,6.399979102912118,6.400029057167697,5.600026139930303],\\\"z\\\":[0.022988579886379087,0.027360804287995796,0.02766884734164822,0.023292206961162812,0.022988579886379087],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"lightskyblue\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[1.8123096931809952,2.0622712458356625,2.062271185276541,1.8123097130428614,1.8123096931809952],\\\"y\\\":[6.400029057167697,6.399979102912118,7.199977269743877,7.200031695838008,6.400029057167697],\\\"z\\\":[0.023292206961162812,0.02766884734164822,0.02799805272182345,0.023615767898237508,0.023292206961162812],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"lightskyblue\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[1.8123097130428614,2.062271185276541,2.06227112202711,1.8123097349564945,1.8123097130428614],\\\"y\\\":[7.200031695838008,7.199977269743877,7.999975559466232,8.000034148296033,7.200031695838008],\\\"z\\\":[0.023615767898237508,0.02799805272182345,0.028344763852801838,0.023955616210629194,0.023615767898237508],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"lightskyblue\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[1.8123097349564945,2.06227112202711,2.0622710567581843,1.8123097587908352,1.8123097349564945],\\\"y\\\":[8.000034148296033,7.999975559466232,8.79997406786439,8.800036316222785,8.000034148296033],\\\"z\\\":[0.023955616210629194,0.028344763852801838,0.028705743908251077,0.024308558183696316,0.023955616210629194],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"lightskyblue\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[1.8123097587908352,2.0622710567581843,2.0622709898272076,1.812309784150342,1.8123097587908352],\\\"y\\\":[8.800036316222785,8.79997406786439,9.599972698536526,9.600038292975295,8.800036316222785],\\\"z\\\":[0.024308558183696316,0.028705743908251077,0.02907805787516107,0.02467175825347697,0.024308558183696316],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"lightskyblue\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[1.812309784150342,2.0622709898272076,2.062270921802514,1.8123098108800397,1.812309784150342],\\\"y\\\":[9.600038292975295,9.599972698536526,10.399971546128839,10.400039980171375,9.600038292975295],\\\"z\\\":[0.02467175825347697,0.02907805787516107,0.029459184992631983,0.025042818714815958,0.02467175825347697],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"lightskyblue\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[1.8123098108800397,2.062270921802514,2.062270852938604,1.8123098385802803,1.8123098108800397],\\\"y\\\":[10.400039980171375,10.399971546128839,11.19997051240222,11.200041470745928,10.400039980171375],\\\"z\\\":[0.025042818714815958,0.029459184992631983,0.029846892176743862,0.02541966496156141,0.025042818714815958],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"lightskyblue\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[1.8123098385802803,2.062270852938604,2.0622707837054923,1.812309867107981,1.8123098385802803],\\\"y\\\":[11.200041470745928,11.19997051240222,11.999969689420412,12.000042667086927,11.200041470745928],\\\"z\\\":[0.02541966496156141,0.029846892176743862,0.030239352581490794,0.025800639193156966,0.02541966496156141],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"lightskyblue\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[1.812309867107981,2.0622707837054923,2.062270714260684,1.8123098960957866,1.812309867107981],\\\"y\\\":[12.000042667086927,11.999969689420412,12.799968977747897,12.800043661532847,12.000042667086927],\\\"z\\\":[0.025800639193156966,0.030239352581490794,0.03063501180854282,0.026184363669349748,0.025800639193156966],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"lightskyblue\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[1.8123098960957866,2.062270714260684,2.062270644971381,1.8123099254371609,1.8123098960957866],\\\"y\\\":[12.800043661532847,12.799968977747897,13.59996846484284,13.60004436051208,12.800043661532847],\\\"z\\\":[0.026184363669349748,0.03063501180854282,0.031032708986708006,0.026569848578482658,0.026184363669349748],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"lightskyblue\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[1.8123099254371609,2.062270644971381,2.0622705758989097,1.8123099548260293,1.8123099254371609],\\\"y\\\":[13.60004436051208,13.59996846484284,14.399968051251916,14.40004485653229,13.60004436051208],\\\"z\\\":[0.026569848578482658,0.031032708986708006,0.031431532185545494,0.026956330992660843,0.026569848578482658],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"lightskyblue\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[1.8123099548260293,2.0622705758989097,2.0622705072851923,1.812309984197048,1.8123099548260293],\\\"y\\\":[14.40004485653229,14.399968051251916,15.199967811736276,15.200045070532308,14.40004485653229],\\\"z\\\":[0.026956330992660843,0.031431532185545494,0.03183093248246228,0.02734338968094543,0.026956330992660843],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"lightskyblue\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"surfaceaxis\\\":2,\\\"x\\\":[1.812309984197048,2.0622705072851923,2.062270439088722,1.8123100133243386,1.812309984197048],\\\"y\\\":[15.200045070532308,15.199967811736276,15.999967645165848,16.00004509958812,15.200045070532308],\\\"z\\\":[0.02734338968094543,0.03183093248246228,0.03223054948213675,0.027730739956343724,0.02734338968094543],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"grey\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"x\\\":[0.5625000000000001,0.5624999942343187,0.5624999847072422,0.5624999722860239,0.5624999575381,0.5624999411107972,0.5624999233436245,0.5624999047080059,0.56249988537789,0.5624998656920386,0.5624998457080345,0.5624998256710535,0.5624998055628219,0.5624997855672028,0.5624997656220664,0.5624997458731538,0.5624997262370887,0.562499706832297,0.5624996875668204,0.5624996685230919,0.5624996496027337],\\\"y\\\":[9.162206417444405e-18,0.7999966402495885,1.5999933810227123,2.399990312319138,3.1999873565514116,3.9999846027816304,4.799981962669224,5.599979528793419,6.399977212805474,7.199975110259148,7.999973133589262,8.799971378307317,9.59996975645606,10.39996836102129,11.199967103346411,11.999966072300438,12.799965179073068,13.599964506028565,14.399963964776944,15.199963623110254,15.99996339122673],\\\"z\\\":[4.871002816324649e-17,3.4360542762473186e-05,0.00013863466028518693,0.0003053092113602273,0.0005272092806341323,0.0007975883806602837,0.0011101083990921862,0.001458895928473685,0.0018385147642435145,0.00224400658612019,0.0026708584775881213,0.0031150348110584127,0.0035729392050654492,0.004041445265628865,0.004517852953449566,0.0049999194902928795,0.005485803105934123,0.005974093414724043,0.0064637340689429204,0.0069540524735901225,0.007444645756118045],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"grey\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"x\\\":[0.8124619250000001,0.8124619134459421,0.8124618930303587,0.8124618649474605,0.812461830109957,0.8124617895303606,0.8124617439231214,0.8124616941475412,0.812461640764451,0.8124615845040528,0.8124615258019251,0.8124614652767873,0.8124614032576343,0.8124613402623917,0.8124612765247785,0.812461212465948,0.8124611482303272,0.8124610841393545,0.8124610202506753,0.8124609567699135,0.812460893666179],\\\"y\\\":[9.162206417444405e-18,0.7999973557508343,1.599994811000482,2.399992454598478,3.1999902063390535,3.9999881562546817,4.799986214012396,5.599984470124919,6.399982829358027,7.199981380818826,7.999980027286746,8.799978857160102,9.59997777383543,10.399976865445812,11.199976037253185,11.999975376131477,12.799974789445866,13.599974359937981,14.399973996920059,15.199973770005858,15.999973587313422],\\\"z\\\":[0.004363102500000049,0.0043955753776063365,0.0044931958770315856,0.004649043770950182,0.004856514630134907,0.005109416600361549,0.005401911948040305,0.005728596222836626,0.006084428857723916,0.006464810371519351,0.00686551272588112,0.007282754507096603,0.007713132552295366,0.0081536905087987,0.00860184653090365,0.00905545614957633,0.009512733392875675,0.009972311299224186,0.010433151853577634,0.010894598567877162,0.011356252256599593],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"grey\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"x\\\":[1.06242385,1.0624238509998334,1.0624238543968563,1.0624238606253473,1.0624238698131283,1.0624238821664975,1.0624238975798306,1.0624239160825706,1.062423937405997,1.0624239614547102,1.0624239878559636,1.0624240164391061,1.062424046779832,1.0624240786772026,1.0624241117021795,1.0624241456626615,1.0624241801663046,1.0624242150604906,1.062424250024925,1.062424284959919,1.0624243196435175],\\\"y\\\":[9.162206417444405e-18,0.8000041100488657,1.6000081028650377,2.4000118748560357,3.2000154932795244,4.000018860900871,4.800022061050457,5.600024997008804,6.4000277557939675,7.200030239978838,8.000032537843335,8.800034552976555,9.600036375170923,10.400037910905114,11.200039251394067,12.000040307290025,12.800041170384995,13.600041757575765,14.40004216025581,15.200042309462798,16.0000422977623],\\\"z\\\":[0.00872620500000005,0.008754989921580773,0.00884477941056367,0.008989074926814278,0.009181700030089264,0.009416892386339146,0.009689248635280041,0.009993797411684078,0.01032591960212853,0.010681425124526835,0.01105645551949636,0.011447569094086897,0.011851630739051535,0.012265908780960077,0.012687962171243582,0.013115745021976807,0.01354749833673766,0.013981850987710955,0.01441771892949864,0.014854388055001192,0.015291409655183566],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"grey\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"x\\\":[1.312385775,1.312385765590729,1.3123857492560815,1.312385727066829,1.312385699803704,1.3123856683437078,1.3123856332589672,1.312385595267562,1.3123855547838665,1.3123855123976538,1.312385468400212,1.3123854232768732,1.3123853772210174,1.312385330630465,1.3123852836188357,1.3123852365066258,1.312385189340325,1.3123851423655943,1.312385095570038,1.3123850491119522,1.3123850029222204],\\\"y\\\":[9.162206417444405e-18,0.7999967708512715,1.5999936447026821,2.399990713499301,3.1999878994597233,3.999985295937126,4.799982815059392,5.599980551570029,6.399978412712719,7.199976492431211,7.999974695521935,8.799973115398142,9.599971656847169,10.39997041301708,11.19996929003901,11.999968379665505,12.799967589645137,13.599967007102007,14.399966541012066,15.199966264105328,15.99996608299767],\\\"z\\\":[0.01308930750000005,0.013117808415149604,0.013205038226600496,0.013344567263095089,0.013530285209410336,0.013756498247063131,0.014017868983988494,0.014309495114931086,0.014626828084469745,0.014965753979210595,0.015322499672438088,0.015693722215994754,0.01607640837769345,0.01646796933785412,0.01686613334272428,0.01726904179198468,0.01767513419496066,0.018083244240899084,0.018492473641254375,0.01890228052834785,0.019312320316468137],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"grey\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"x\\\":[1.5623477000000001,1.562347690821025,1.562347674799373,1.5623476529459288,1.5623476259926226,1.5623475947770735,1.5623475598403873,1.562347521877352,1.5623474812848825,1.5623474386424068,1.5623473942355086,1.562347348551272,1.5623473017883505,1.562347254357797,1.5623472063875883,1.5623471582205557,1.5623471099223738,1.5623470617648778,1.5623470137527669,1.562346966066091,1.5623469186425232],\\\"y\\\":[9.162206417444405e-18,0.799997122848918,1.5999943470993463,2.3999917639131514,3.1999892952201012,3.9999870303856278,4.799984878111898,5.59998292970836,6.399981091454103,7.199979457022128,7.999977932154519,8.799976610851648,9.599975397732855,10.399974384962816,11.199973475852698,11.999972759265718,12.79997213800772,13.599971695647595,14.399971335726036,15.199971128670821,15.999970977392403],\\\"z\\\":[0.01745241000000005,0.017480923114039832,0.017567366251003295,0.017705147752285617,0.017888002109101492,0.01811008298364314,0.018365920918453814,0.018650494977104467,0.01895918067700987,0.019287816111895742,0.019632644031693732,0.019990371655679427,0.020358098718006947,0.020733377306197856,0.021114119572776275,0.021498666720439867,0.02188566981939099,0.022274172724010707,0.022663458304022048,0.023053144166224608,0.023442975805592004],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"grey\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"x\\\":[1.8123096250000001,1.8123096252793973,1.8123096273998411,1.812309631841271,1.812309638767255,1.8123096484183707,1.8123096607152773,1.8123096757177453,1.8123096931809952,1.8123097130428614,1.8123097349564945,1.8123097587908352,1.812309784150342,1.8123098108800397,1.8123098385802803,1.812309867107981,1.8123098960957866,1.8123099254371609,1.8123099548260293,1.812309984197048,1.8123100133243386],\\\"y\\\":[9.162206417444405e-18,0.8000042711855221,1.6000084254430789,2.4000123599611722,3.2000161441788317,4.000019677718904,4.800023043050683,5.600026139930303,6.400029057167697,7.200031695838008,8.000034148296033,8.800036316222785,9.600038292975295,10.400039980171375,11.200041470745928,12.000042667086927,12.800043661532847,13.60004436051208,14.40004485653229,15.200045070532308,16.00004509958812],\\\"z\\\":[0.02181551250000005,0.021842245662087735,0.021926181197280452,0.02206079417356827,0.02223989477813403,0.022457724482343875,0.022708920175087563,0.022988579886379087,0.023292206961162812,0.023615767898237508,0.023955616210629194,0.024308558183696316,0.02467175825347697,0.025042818714815958,0.02541966496156141,0.025800639193156966,0.026184363669349748,0.026569848578482658,0.026956330992660843,0.02734338968094543,0.027730739956343724],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"grey\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"x\\\":[2.06227155,2.062271537819961,2.0622715161497642,2.062271486229936,2.062271449019728,2.062271405583596,2.062271356683286,2.062271303232613,2.0622712458356625,2.062271185276541,2.06227112202711,2.0622710567581843,2.0622709898272076,2.062270921802514,2.062270852938604,2.0622707837054923,2.062270714260684,2.062270644971381,2.0622705758989097,2.0622705072851923,2.062270439088722],\\\"y\\\":[9.162206417444405e-18,0.7999968504395711,1.5999938047112736,2.399990956607656,3.199988230166699,3.999985717099869,4.799983327325806,5.59998115379444,6.399979102912118,7.199977269743877,7.999975559466232,8.79997406786439,9.599972698536526,10.399971546128839,11.19997051240222,11.999969689420412,12.799968977747897,13.59996846484284,14.399968051251916,15.199967811736276,15.999967645165848],\\\"z\\\":[0.02617861500000005,0.026206145672870378,0.02629050138818445,0.026425515849181777,0.02660533252262167,0.026824499204128972,0.027077892142435816,0.027360804287995796,0.02766884734164822,0.02799805272182345,0.028344763852801838,0.028705743908251077,0.02907805787516107,0.029459184992631983,0.029846892176743862,0.030239352581490794,0.03063501180854282,0.031032708986708006,0.031431532185545494,0.03183093248246228,0.03223054948213675],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"grey\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"x\\\":[0.5625000000000001,0.8124619250000001,1.06242385,1.312385775,1.5623477000000001,1.8123096250000001,2.06227155],\\\"y\\\":[9.162206417444405e-18,9.162206417444405e-18,9.162206417444405e-18,9.162206417444405e-18,9.162206417444405e-18,9.162206417444405e-18,9.162206417444405e-18],\\\"z\\\":[4.871002816324649e-17,0.004363102500000049,0.00872620500000005,0.01308930750000005,0.01745241000000005,0.02181551250000005,0.02617861500000005],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"grey\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"x\\\":[0.5624999942343187,0.8124619134459421,1.0624238509998334,1.312385765590729,1.562347690821025,1.8123096252793973,2.062271537819961],\\\"y\\\":[0.7999966402495885,0.7999973557508343,0.8000041100488657,0.7999967708512715,0.799997122848918,0.8000042711855221,0.7999968504395711],\\\"z\\\":[3.4360542762473186e-05,0.0043955753776063365,0.008754989921580773,0.013117808415149604,0.017480923114039832,0.021842245662087735,0.026206145672870378],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"grey\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"x\\\":[0.5624999847072422,0.8124618930303587,1.0624238543968563,1.3123857492560815,1.562347674799373,1.8123096273998411,2.0622715161497642],\\\"y\\\":[1.5999933810227123,1.599994811000482,1.6000081028650377,1.5999936447026821,1.5999943470993463,1.6000084254430789,1.5999938047112736],\\\"z\\\":[0.00013863466028518693,0.0044931958770315856,0.00884477941056367,0.013205038226600496,0.017567366251003295,0.021926181197280452,0.02629050138818445],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"grey\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"x\\\":[0.5624999722860239,0.8124618649474605,1.0624238606253473,1.312385727066829,1.5623476529459288,1.812309631841271,2.062271486229936],\\\"y\\\":[2.399990312319138,2.399992454598478,2.4000118748560357,2.399990713499301,2.3999917639131514,2.4000123599611722,2.399990956607656],\\\"z\\\":[0.0003053092113602273,0.004649043770950182,0.008989074926814278,0.013344567263095089,0.017705147752285617,0.02206079417356827,0.026425515849181777],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"grey\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"x\\\":[0.5624999575381,0.812461830109957,1.0624238698131283,1.312385699803704,1.5623476259926226,1.812309638767255,2.062271449019728],\\\"y\\\":[3.1999873565514116,3.1999902063390535,3.2000154932795244,3.1999878994597233,3.1999892952201012,3.2000161441788317,3.199988230166699],\\\"z\\\":[0.0005272092806341323,0.004856514630134907,0.009181700030089264,0.013530285209410336,0.017888002109101492,0.02223989477813403,0.02660533252262167],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"grey\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"x\\\":[0.5624999411107972,0.8124617895303606,1.0624238821664975,1.3123856683437078,1.5623475947770735,1.8123096484183707,2.062271405583596],\\\"y\\\":[3.9999846027816304,3.9999881562546817,4.000018860900871,3.999985295937126,3.9999870303856278,4.000019677718904,3.999985717099869],\\\"z\\\":[0.0007975883806602837,0.005109416600361549,0.009416892386339146,0.013756498247063131,0.01811008298364314,0.022457724482343875,0.026824499204128972],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"grey\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"x\\\":[0.5624999233436245,0.8124617439231214,1.0624238975798306,1.3123856332589672,1.5623475598403873,1.8123096607152773,2.062271356683286],\\\"y\\\":[4.799981962669224,4.799986214012396,4.800022061050457,4.799982815059392,4.799984878111898,4.800023043050683,4.799983327325806],\\\"z\\\":[0.0011101083990921862,0.005401911948040305,0.009689248635280041,0.014017868983988494,0.018365920918453814,0.022708920175087563,0.027077892142435816],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"grey\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"x\\\":[0.5624999047080059,0.8124616941475412,1.0624239160825706,1.312385595267562,1.562347521877352,1.8123096757177453,2.062271303232613],\\\"y\\\":[5.599979528793419,5.599984470124919,5.600024997008804,5.599980551570029,5.59998292970836,5.600026139930303,5.59998115379444],\\\"z\\\":[0.001458895928473685,0.005728596222836626,0.009993797411684078,0.014309495114931086,0.018650494977104467,0.022988579886379087,0.027360804287995796],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"grey\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"x\\\":[0.56249988537789,0.812461640764451,1.062423937405997,1.3123855547838665,1.5623474812848825,1.8123096931809952,2.0622712458356625],\\\"y\\\":[6.399977212805474,6.399982829358027,6.4000277557939675,6.399978412712719,6.399981091454103,6.400029057167697,6.399979102912118],\\\"z\\\":[0.0018385147642435145,0.006084428857723916,0.01032591960212853,0.014626828084469745,0.01895918067700987,0.023292206961162812,0.02766884734164822],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"grey\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"x\\\":[0.5624998656920386,0.8124615845040528,1.0624239614547102,1.3123855123976538,1.5623474386424068,1.8123097130428614,2.062271185276541],\\\"y\\\":[7.199975110259148,7.199981380818826,7.200030239978838,7.199976492431211,7.199979457022128,7.200031695838008,7.199977269743877],\\\"z\\\":[0.00224400658612019,0.006464810371519351,0.010681425124526835,0.014965753979210595,0.019287816111895742,0.023615767898237508,0.02799805272182345],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"grey\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"x\\\":[0.5624998457080345,0.8124615258019251,1.0624239878559636,1.312385468400212,1.5623473942355086,1.8123097349564945,2.06227112202711],\\\"y\\\":[7.999973133589262,7.999980027286746,8.000032537843335,7.999974695521935,7.999977932154519,8.000034148296033,7.999975559466232],\\\"z\\\":[0.0026708584775881213,0.00686551272588112,0.01105645551949636,0.015322499672438088,0.019632644031693732,0.023955616210629194,0.028344763852801838],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"grey\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"x\\\":[0.5624998256710535,0.8124614652767873,1.0624240164391061,1.3123854232768732,1.562347348551272,1.8123097587908352,2.0622710567581843],\\\"y\\\":[8.799971378307317,8.799978857160102,8.800034552976555,8.799973115398142,8.799976610851648,8.800036316222785,8.79997406786439],\\\"z\\\":[0.0031150348110584127,0.007282754507096603,0.011447569094086897,0.015693722215994754,0.019990371655679427,0.024308558183696316,0.028705743908251077],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"grey\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"x\\\":[0.5624998055628219,0.8124614032576343,1.062424046779832,1.3123853772210174,1.5623473017883505,1.812309784150342,2.0622709898272076],\\\"y\\\":[9.59996975645606,9.59997777383543,9.600036375170923,9.599971656847169,9.599975397732855,9.600038292975295,9.599972698536526],\\\"z\\\":[0.0035729392050654492,0.007713132552295366,0.011851630739051535,0.01607640837769345,0.020358098718006947,0.02467175825347697,0.02907805787516107],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"grey\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"x\\\":[0.5624997855672028,0.8124613402623917,1.0624240786772026,1.312385330630465,1.562347254357797,1.8123098108800397,2.062270921802514],\\\"y\\\":[10.39996836102129,10.399976865445812,10.400037910905114,10.39997041301708,10.399974384962816,10.400039980171375,10.399971546128839],\\\"z\\\":[0.004041445265628865,0.0081536905087987,0.012265908780960077,0.01646796933785412,0.020733377306197856,0.025042818714815958,0.029459184992631983],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"grey\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"x\\\":[0.5624997656220664,0.8124612765247785,1.0624241117021795,1.3123852836188357,1.5623472063875883,1.8123098385802803,2.062270852938604],\\\"y\\\":[11.199967103346411,11.199976037253185,11.200039251394067,11.19996929003901,11.199973475852698,11.200041470745928,11.19997051240222],\\\"z\\\":[0.004517852953449566,0.00860184653090365,0.012687962171243582,0.01686613334272428,0.021114119572776275,0.02541966496156141,0.029846892176743862],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"grey\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"x\\\":[0.5624997458731538,0.812461212465948,1.0624241456626615,1.3123852365066258,1.5623471582205557,1.812309867107981,2.0622707837054923],\\\"y\\\":[11.999966072300438,11.999975376131477,12.000040307290025,11.999968379665505,11.999972759265718,12.000042667086927,11.999969689420412],\\\"z\\\":[0.0049999194902928795,0.00905545614957633,0.013115745021976807,0.01726904179198468,0.021498666720439867,0.025800639193156966,0.030239352581490794],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"grey\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"x\\\":[0.5624997262370887,0.8124611482303272,1.0624241801663046,1.312385189340325,1.5623471099223738,1.8123098960957866,2.062270714260684],\\\"y\\\":[12.799965179073068,12.799974789445866,12.800041170384995,12.799967589645137,12.79997213800772,12.800043661532847,12.799968977747897],\\\"z\\\":[0.005485803105934123,0.009512733392875675,0.01354749833673766,0.01767513419496066,0.02188566981939099,0.026184363669349748,0.03063501180854282],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"grey\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"x\\\":[0.562499706832297,0.8124610841393545,1.0624242150604906,1.3123851423655943,1.5623470617648778,1.8123099254371609,2.062270644971381],\\\"y\\\":[13.599964506028565,13.599974359937981,13.600041757575765,13.599967007102007,13.599971695647595,13.60004436051208,13.59996846484284],\\\"z\\\":[0.005974093414724043,0.009972311299224186,0.013981850987710955,0.018083244240899084,0.022274172724010707,0.026569848578482658,0.031032708986708006],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"grey\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"x\\\":[0.5624996875668204,0.8124610202506753,1.062424250024925,1.312385095570038,1.5623470137527669,1.8123099548260293,2.0622705758989097],\\\"y\\\":[14.399963964776944,14.399973996920059,14.40004216025581,14.399966541012066,14.399971335726036,14.40004485653229,14.399968051251916],\\\"z\\\":[0.0064637340689429204,0.010433151853577634,0.01441771892949864,0.018492473641254375,0.022663458304022048,0.026956330992660843,0.031431532185545494],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"grey\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"x\\\":[0.5624996685230919,0.8124609567699135,1.062424284959919,1.3123850491119522,1.562346966066091,1.812309984197048,2.0622705072851923],\\\"y\\\":[15.199963623110254,15.199973770005858,15.200042309462798,15.199966264105328,15.199971128670821,15.200045070532308,15.199967811736276],\\\"z\\\":[0.0069540524735901225,0.010894598567877162,0.014854388055001192,0.01890228052834785,0.023053144166224608,0.02734338968094543,0.03183093248246228],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"grey\\\"},\\\"mode\\\":\\\"lines\\\",\\\"showlegend\\\":false,\\\"x\\\":[0.5624996496027337,0.812460893666179,1.0624243196435175,1.3123850029222204,1.5623469186425232,1.8123100133243386,2.062270439088722],\\\"y\\\":[15.99996339122673,15.999973587313422,16.0000422977623,15.99996608299767,15.999970977392403,16.00004509958812,15.999967645165848],\\\"z\\\":[0.007444645756118045,0.011356252256599593,0.015291409655183566,0.019312320316468137,0.023442975805592004,0.027730739956343724,0.03223054948213675],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"blue\\\",\\\"width\\\":4},\\\"marker\\\":{\\\"color\\\":\\\"blue\\\",\\\"size\\\":2},\\\"name\\\":\\\"Beam nodes\\\",\\\"x\\\":[0.0,-5.744151761391617e-09,-1.5210804262961445e-08],\\\"y\\\":[0.0,0.7999999988577322,1.599999991380492],\\\"z\\\":[0.0,3.772280096999739e-05,0.00014525289792429068],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"blue\\\",\\\"width\\\":4},\\\"marker\\\":{\\\"color\\\":\\\"blue\\\",\\\"size\\\":2},\\\"showlegend\\\":false,\\\"x\\\":[-1.5210804262961445e-08,-2.7539794264483134e-08,-4.216701299251646e-08],\\\"y\\\":[1.599999991380492,2.399999973222394,3.1999999414783504],\\\"z\\\":[0.00014525289792429068,0.00031498257127698524,0.0005398114325280645],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"blue\\\",\\\"width\\\":4},\\\"marker\\\":{\\\"color\\\":\\\"blue\\\",\\\"size\\\":2},\\\"showlegend\\\":false,\\\"x\\\":[-4.216701299251646e-08,-5.845413791416317e-08,-7.606245469415831e-08],\\\"y\\\":[3.1999999414783504,3.999999894782558,4.7999998326433255],\\\"z\\\":[0.0005398114325280645,0.0008129023493327658,0.0011280049766697654],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"blue\\\",\\\"width\\\":4},\\\"marker\\\":{\\\"color\\\":\\\"blue\\\",\\\"size\\\":2},\\\"showlegend\\\":false,\\\"x\\\":[-7.606245469415831e-08,-9.453085004776112e-08,-1.1368390921713924e-07],\\\"y\\\":[4.7999998326433255,5.599999755537855,6.399999664368964],\\\"z\\\":[0.0011280049766697654,0.0014791536130117535,0.001861001288697979],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"blue\\\",\\\"width\\\":4},\\\"marker\\\":{\\\"color\\\":\\\"blue\\\",\\\"size\\\":2},\\\"showlegend\\\":false,\\\"x\\\":[-1.1368390921713924e-07,-1.3319431737429714e-07,-1.530010581380602e-07],\\\"y\\\":[6.399999664368964,7.199999560573655,7.999999445686861],\\\"z\\\":[0.001861001288697979,0.0022684954019804547,0.002697212175686842],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"blue\\\",\\\"width\\\":4},\\\"marker\\\":{\\\"color\\\":\\\"blue\\\",\\\"size\\\":2},\\\"showlegend\\\":false,\\\"x\\\":[-1.530010581380602e-07,-1.7287111886294816e-07,-1.9281747647171713e-07],\\\"y\\\":[7.999999445686861,8.799999321471196,9.599999189568887],\\\"z\\\":[0.002697212175686842,0.003143022099371802,0.0036024184792496066],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"blue\\\",\\\"width\\\":4},\\\"marker\\\":{\\\"color\\\":\\\"blue\\\",\\\"size\\\":2},\\\"showlegend\\\":false,\\\"x\\\":[-1.9281747647171713e-07,-2.1266860132434275e-07,-2.3247960013933078e-07],\\\"y\\\":[9.599999189568887,10.39999905165165,11.199998909140675],\\\"z\\\":[0.0036024184792496066,0.004072183506411567,0.0045497073476323795],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"blue\\\",\\\"width\\\":4},\\\"marker\\\":{\\\"color\\\":\\\"blue\\\",\\\"size\\\":2},\\\"showlegend\\\":false,\\\"x\\\":[-2.3247960013933078e-07,-2.5211672422140153e-07,-2.716548617367966e-07],\\\"y\\\":[11.199998909140675,11.99999876337341,12.79999861537811],\\\"z\\\":[0.0045497073476323795,0.0050326596228963995,0.005519288553995972],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"blue\\\",\\\"width\\\":4},\\\"marker\\\":{\\\"color\\\":\\\"blue\\\",\\\"size\\\":2},\\\"showlegend\\\":false,\\\"x\\\":[-2.716548617367966e-07,-2.909866574188866e-07,-3.1019442919001244e-07],\\\"y\\\":[12.79999861537811,13.599998466051524,14.399998315980117],\\\"z\\\":[0.005519288553995972,0.006008102239037706,0.006498133464216941],\\\"type\\\":\\\"scatter3d\\\"},{\\\"line\\\":{\\\"color\\\":\\\"blue\\\",\\\"width\\\":4},\\\"marker\\\":{\\\"color\\\":\\\"blue\\\",\\\"size\\\":2},\\\"showlegend\\\":false,\\\"x\\\":[-3.1019442919001244e-07,-3.292046679170043e-07,-3.481050287225777e-07],\\\"y\\\":[14.399998315980117,15.19999816561613,15.999998015150949],\\\"z\\\":[0.006498133464216941,0.0069886422578113614,0.007479315882477229],\\\"type\\\":\\\"scatter3d\\\"}],                        {\\\"template\\\":{\\\"data\\\":{\\\"histogram2dcontour\\\":[{\\\"type\\\":\\\"histogram2dcontour\\\",\\\"colorbar\\\":{\\\"outlinewidth\\\":0,\\\"ticks\\\":\\\"\\\"},\\\"colorscale\\\":[[0.0,\\\"#0d0887\\\"],[0.1111111111111111,\\\"#46039f\\\"],[0.2222222222222222,\\\"#7201a8\\\"],[0.3333333333333333,\\\"#9c179e\\\"],[0.4444444444444444,\\\"#bd3786\\\"],[0.5555555555555556,\\\"#d8576b\\\"],[0.6666666666666666,\\\"#ed7953\\\"],[0.7777777777777778,\\\"#fb9f3a\\\"],[0.8888888888888888,\\\"#fdca26\\\"],[1.0,\\\"#f0f921\\\"]]}],\\\"choropleth\\\":[{\\\"type\\\":\\\"choropleth\\\",\\\"colorbar\\\":{\\\"outlinewidth\\\":0,\\\"ticks\\\":\\\"\\\"}}],\\\"histogram2d\\\":[{\\\"type\\\":\\\"histogram2d\\\",\\\"colorbar\\\":{\\\"outlinewidth\\\":0,\\\"ticks\\\":\\\"\\\"},\\\"colorscale\\\":[[0.0,\\\"#0d0887\\\"],[0.1111111111111111,\\\"#46039f\\\"],[0.2222222222222222,\\\"#7201a8\\\"],[0.3333333333333333,\\\"#9c179e\\\"],[0.4444444444444444,\\\"#bd3786\\\"],[0.5555555555555556,\\\"#d8576b\\\"],[0.6666666666666666,\\\"#ed7953\\\"],[0.7777777777777778,\\\"#fb9f3a\\\"],[0.8888888888888888,\\\"#fdca26\\\"],[1.0,\\\"#f0f921\\\"]]}],\\\"heatmap\\\":[{\\\"type\\\":\\\"heatmap\\\",\\\"colorbar\\\":{\\\"outlinewidth\\\":0,\\\"ticks\\\":\\\"\\\"},\\\"colorscale\\\":[[0.0,\\\"#0d0887\\\"],[0.1111111111111111,\\\"#46039f\\\"],[0.2222222222222222,\\\"#7201a8\\\"],[0.3333333333333333,\\\"#9c179e\\\"],[0.4444444444444444,\\\"#bd3786\\\"],[0.5555555555555556,\\\"#d8576b\\\"],[0.6666666666666666,\\\"#ed7953\\\"],[0.7777777777777778,\\\"#fb9f3a\\\"],[0.8888888888888888,\\\"#fdca26\\\"],[1.0,\\\"#f0f921\\\"]]}],\\\"heatmapgl\\\":[{\\\"type\\\":\\\"heatmapgl\\\",\\\"colorbar\\\":{\\\"outlinewidth\\\":0,\\\"ticks\\\":\\\"\\\"},\\\"colorscale\\\":[[0.0,\\\"#0d0887\\\"],[0.1111111111111111,\\\"#46039f\\\"],[0.2222222222222222,\\\"#7201a8\\\"],[0.3333333333333333,\\\"#9c179e\\\"],[0.4444444444444444,\\\"#bd3786\\\"],[0.5555555555555556,\\\"#d8576b\\\"],[0.6666666666666666,\\\"#ed7953\\\"],[0.7777777777777778,\\\"#fb9f3a\\\"],[0.8888888888888888,\\\"#fdca26\\\"],[1.0,\\\"#f0f921\\\"]]}],\\\"contourcarpet\\\":[{\\\"type\\\":\\\"contourcarpet\\\",\\\"colorbar\\\":{\\\"outlinewidth\\\":0,\\\"ticks\\\":\\\"\\\"}}],\\\"contour\\\":[{\\\"type\\\":\\\"contour\\\",\\\"colorbar\\\":{\\\"outlinewidth\\\":0,\\\"ticks\\\":\\\"\\\"},\\\"colorscale\\\":[[0.0,\\\"#0d0887\\\"],[0.1111111111111111,\\\"#46039f\\\"],[0.2222222222222222,\\\"#7201a8\\\"],[0.3333333333333333,\\\"#9c179e\\\"],[0.4444444444444444,\\\"#bd3786\\\"],[0.5555555555555556,\\\"#d8576b\\\"],[0.6666666666666666,\\\"#ed7953\\\"],[0.7777777777777778,\\\"#fb9f3a\\\"],[0.8888888888888888,\\\"#fdca26\\\"],[1.0,\\\"#f0f921\\\"]]}],\\\"surface\\\":[{\\\"type\\\":\\\"surface\\\",\\\"colorbar\\\":{\\\"outlinewidth\\\":0,\\\"ticks\\\":\\\"\\\"},\\\"colorscale\\\":[[0.0,\\\"#0d0887\\\"],[0.1111111111111111,\\\"#46039f\\\"],[0.2222222222222222,\\\"#7201a8\\\"],[0.3333333333333333,\\\"#9c179e\\\"],[0.4444444444444444,\\\"#bd3786\\\"],[0.5555555555555556,\\\"#d8576b\\\"],[0.6666666666666666,\\\"#ed7953\\\"],[0.7777777777777778,\\\"#fb9f3a\\\"],[0.8888888888888888,\\\"#fdca26\\\"],[1.0,\\\"#f0f921\\\"]]}],\\\"mesh3d\\\":[{\\\"type\\\":\\\"mesh3d\\\",\\\"colorbar\\\":{\\\"outlinewidth\\\":0,\\\"ticks\\\":\\\"\\\"}}],\\\"scatter\\\":[{\\\"fillpattern\\\":{\\\"fillmode\\\":\\\"overlay\\\",\\\"size\\\":10,\\\"solidity\\\":0.2},\\\"type\\\":\\\"scatter\\\"}],\\\"parcoords\\\":[{\\\"type\\\":\\\"parcoords\\\",\\\"line\\\":{\\\"colorbar\\\":{\\\"outlinewidth\\\":0,\\\"ticks\\\":\\\"\\\"}}}],\\\"scatterpolargl\\\":[{\\\"type\\\":\\\"scatterpolargl\\\",\\\"marker\\\":{\\\"colorbar\\\":{\\\"outlinewidth\\\":0,\\\"ticks\\\":\\\"\\\"}}}],\\\"bar\\\":[{\\\"error_x\\\":{\\\"color\\\":\\\"#2a3f5f\\\"},\\\"error_y\\\":{\\\"color\\\":\\\"#2a3f5f\\\"},\\\"marker\\\":{\\\"line\\\":{\\\"color\\\":\\\"#E5ECF6\\\",\\\"width\\\":0.5},\\\"pattern\\\":{\\\"fillmode\\\":\\\"overlay\\\",\\\"size\\\":10,\\\"solidity\\\":0.2}},\\\"type\\\":\\\"bar\\\"}],\\\"scattergeo\\\":[{\\\"type\\\":\\\"scattergeo\\\",\\\"marker\\\":{\\\"colorbar\\\":{\\\"outlinewidth\\\":0,\\\"ticks\\\":\\\"\\\"}}}],\\\"scatterpolar\\\":[{\\\"type\\\":\\\"scatterpolar\\\",\\\"marker\\\":{\\\"colorbar\\\":{\\\"outlinewidth\\\":0,\\\"ticks\\\":\\\"\\\"}}}],\\\"histogram\\\":[{\\\"marker\\\":{\\\"pattern\\\":{\\\"fillmode\\\":\\\"overlay\\\",\\\"size\\\":10,\\\"solidity\\\":0.2}},\\\"type\\\":\\\"histogram\\\"}],\\\"scattergl\\\":[{\\\"type\\\":\\\"scattergl\\\",\\\"marker\\\":{\\\"colorbar\\\":{\\\"outlinewidth\\\":0,\\\"ticks\\\":\\\"\\\"}}}],\\\"scatter3d\\\":[{\\\"type\\\":\\\"scatter3d\\\",\\\"line\\\":{\\\"colorbar\\\":{\\\"outlinewidth\\\":0,\\\"ticks\\\":\\\"\\\"}},\\\"marker\\\":{\\\"colorbar\\\":{\\\"outlinewidth\\\":0,\\\"ticks\\\":\\\"\\\"}}}],\\\"scattermapbox\\\":[{\\\"type\\\":\\\"scattermapbox\\\",\\\"marker\\\":{\\\"colorbar\\\":{\\\"outlinewidth\\\":0,\\\"ticks\\\":\\\"\\\"}}}],\\\"scatterternary\\\":[{\\\"type\\\":\\\"scatterternary\\\",\\\"marker\\\":{\\\"colorbar\\\":{\\\"outlinewidth\\\":0,\\\"ticks\\\":\\\"\\\"}}}],\\\"scattercarpet\\\":[{\\\"type\\\":\\\"scattercarpet\\\",\\\"marker\\\":{\\\"colorbar\\\":{\\\"outlinewidth\\\":0,\\\"ticks\\\":\\\"\\\"}}}],\\\"carpet\\\":[{\\\"aaxis\\\":{\\\"endlinecolor\\\":\\\"#2a3f5f\\\",\\\"gridcolor\\\":\\\"white\\\",\\\"linecolor\\\":\\\"white\\\",\\\"minorgridcolor\\\":\\\"white\\\",\\\"startlinecolor\\\":\\\"#2a3f5f\\\"},\\\"baxis\\\":{\\\"endlinecolor\\\":\\\"#2a3f5f\\\",\\\"gridcolor\\\":\\\"white\\\",\\\"linecolor\\\":\\\"white\\\",\\\"minorgridcolor\\\":\\\"white\\\",\\\"startlinecolor\\\":\\\"#2a3f5f\\\"},\\\"type\\\":\\\"carpet\\\"}],\\\"table\\\":[{\\\"cells\\\":{\\\"fill\\\":{\\\"color\\\":\\\"#EBF0F8\\\"},\\\"line\\\":{\\\"color\\\":\\\"white\\\"}},\\\"header\\\":{\\\"fill\\\":{\\\"color\\\":\\\"#C8D4E3\\\"},\\\"line\\\":{\\\"color\\\":\\\"white\\\"}},\\\"type\\\":\\\"table\\\"}],\\\"barpolar\\\":[{\\\"marker\\\":{\\\"line\\\":{\\\"color\\\":\\\"#E5ECF6\\\",\\\"width\\\":0.5},\\\"pattern\\\":{\\\"fillmode\\\":\\\"overlay\\\",\\\"size\\\":10,\\\"solidity\\\":0.2}},\\\"type\\\":\\\"barpolar\\\"}],\\\"pie\\\":[{\\\"automargin\\\":true,\\\"type\\\":\\\"pie\\\"}]},\\\"layout\\\":{\\\"autotypenumbers\\\":\\\"strict\\\",\\\"colorway\\\":[\\\"#636efa\\\",\\\"#EF553B\\\",\\\"#00cc96\\\",\\\"#ab63fa\\\",\\\"#FFA15A\\\",\\\"#19d3f3\\\",\\\"#FF6692\\\",\\\"#B6E880\\\",\\\"#FF97FF\\\",\\\"#FECB52\\\"],\\\"font\\\":{\\\"color\\\":\\\"#2a3f5f\\\"},\\\"hovermode\\\":\\\"closest\\\",\\\"hoverlabel\\\":{\\\"align\\\":\\\"left\\\"},\\\"paper_bgcolor\\\":\\\"white\\\",\\\"plot_bgcolor\\\":\\\"#E5ECF6\\\",\\\"polar\\\":{\\\"bgcolor\\\":\\\"#E5ECF6\\\",\\\"angularaxis\\\":{\\\"gridcolor\\\":\\\"white\\\",\\\"linecolor\\\":\\\"white\\\",\\\"ticks\\\":\\\"\\\"},\\\"radialaxis\\\":{\\\"gridcolor\\\":\\\"white\\\",\\\"linecolor\\\":\\\"white\\\",\\\"ticks\\\":\\\"\\\"}},\\\"ternary\\\":{\\\"bgcolor\\\":\\\"#E5ECF6\\\",\\\"aaxis\\\":{\\\"gridcolor\\\":\\\"white\\\",\\\"linecolor\\\":\\\"white\\\",\\\"ticks\\\":\\\"\\\"},\\\"baxis\\\":{\\\"gridcolor\\\":\\\"white\\\",\\\"linecolor\\\":\\\"white\\\",\\\"ticks\\\":\\\"\\\"},\\\"caxis\\\":{\\\"gridcolor\\\":\\\"white\\\",\\\"linecolor\\\":\\\"white\\\",\\\"ticks\\\":\\\"\\\"}},\\\"coloraxis\\\":{\\\"colorbar\\\":{\\\"outlinewidth\\\":0,\\\"ticks\\\":\\\"\\\"}},\\\"colorscale\\\":{\\\"sequential\\\":[[0.0,\\\"#0d0887\\\"],[0.1111111111111111,\\\"#46039f\\\"],[0.2222222222222222,\\\"#7201a8\\\"],[0.3333333333333333,\\\"#9c179e\\\"],[0.4444444444444444,\\\"#bd3786\\\"],[0.5555555555555556,\\\"#d8576b\\\"],[0.6666666666666666,\\\"#ed7953\\\"],[0.7777777777777778,\\\"#fb9f3a\\\"],[0.8888888888888888,\\\"#fdca26\\\"],[1.0,\\\"#f0f921\\\"]],\\\"sequentialminus\\\":[[0.0,\\\"#0d0887\\\"],[0.1111111111111111,\\\"#46039f\\\"],[0.2222222222222222,\\\"#7201a8\\\"],[0.3333333333333333,\\\"#9c179e\\\"],[0.4444444444444444,\\\"#bd3786\\\"],[0.5555555555555556,\\\"#d8576b\\\"],[0.6666666666666666,\\\"#ed7953\\\"],[0.7777777777777778,\\\"#fb9f3a\\\"],[0.8888888888888888,\\\"#fdca26\\\"],[1.0,\\\"#f0f921\\\"]],\\\"diverging\\\":[[0,\\\"#8e0152\\\"],[0.1,\\\"#c51b7d\\\"],[0.2,\\\"#de77ae\\\"],[0.3,\\\"#f1b6da\\\"],[0.4,\\\"#fde0ef\\\"],[0.5,\\\"#f7f7f7\\\"],[0.6,\\\"#e6f5d0\\\"],[0.7,\\\"#b8e186\\\"],[0.8,\\\"#7fbc41\\\"],[0.9,\\\"#4d9221\\\"],[1,\\\"#276419\\\"]]},\\\"xaxis\\\":{\\\"gridcolor\\\":\\\"white\\\",\\\"linecolor\\\":\\\"white\\\",\\\"ticks\\\":\\\"\\\",\\\"title\\\":{\\\"standoff\\\":15},\\\"zerolinecolor\\\":\\\"white\\\",\\\"automargin\\\":true,\\\"zerolinewidth\\\":2},\\\"yaxis\\\":{\\\"gridcolor\\\":\\\"white\\\",\\\"linecolor\\\":\\\"white\\\",\\\"ticks\\\":\\\"\\\",\\\"title\\\":{\\\"standoff\\\":15},\\\"zerolinecolor\\\":\\\"white\\\",\\\"automargin\\\":true,\\\"zerolinewidth\\\":2},\\\"scene\\\":{\\\"xaxis\\\":{\\\"backgroundcolor\\\":\\\"#E5ECF6\\\",\\\"gridcolor\\\":\\\"white\\\",\\\"linecolor\\\":\\\"white\\\",\\\"showbackground\\\":true,\\\"ticks\\\":\\\"\\\",\\\"zerolinecolor\\\":\\\"white\\\",\\\"gridwidth\\\":2},\\\"yaxis\\\":{\\\"backgroundcolor\\\":\\\"#E5ECF6\\\",\\\"gridcolor\\\":\\\"white\\\",\\\"linecolor\\\":\\\"white\\\",\\\"showbackground\\\":true,\\\"ticks\\\":\\\"\\\",\\\"zerolinecolor\\\":\\\"white\\\",\\\"gridwidth\\\":2},\\\"zaxis\\\":{\\\"backgroundcolor\\\":\\\"#E5ECF6\\\",\\\"gridcolor\\\":\\\"white\\\",\\\"linecolor\\\":\\\"white\\\",\\\"showbackground\\\":true,\\\"ticks\\\":\\\"\\\",\\\"zerolinecolor\\\":\\\"white\\\",\\\"gridwidth\\\":2}},\\\"shapedefaults\\\":{\\\"line\\\":{\\\"color\\\":\\\"#2a3f5f\\\"}},\\\"annotationdefaults\\\":{\\\"arrowcolor\\\":\\\"#2a3f5f\\\",\\\"arrowhead\\\":0,\\\"arrowwidth\\\":1},\\\"geo\\\":{\\\"bgcolor\\\":\\\"white\\\",\\\"landcolor\\\":\\\"#E5ECF6\\\",\\\"subunitcolor\\\":\\\"white\\\",\\\"showland\\\":true,\\\"showlakes\\\":true,\\\"lakecolor\\\":\\\"white\\\"},\\\"title\\\":{\\\"x\\\":0.05},\\\"mapbox\\\":{\\\"style\\\":\\\"light\\\"}}}},                        {\\\"responsive\\\": true}                    ).then(function(){\\n\",\n       \"                            \\n\",\n       \"var gd = document.getElementById('7eaca092-c11f-46d2-969b-0d7af3ca64ff');\\n\",\n       \"var x = new MutationObserver(function (mutations, observer) {{\\n\",\n       \"        var display = window.getComputedStyle(gd).display;\\n\",\n       \"        if (!display || display === 'none') {{\\n\",\n       \"            console.log([gd, 'removed!']);\\n\",\n       \"            Plotly.purge(gd);\\n\",\n       \"            observer.disconnect();\\n\",\n       \"        }}\\n\",\n       \"}});\\n\",\n       \"\\n\",\n       \"// Listen for the removal of the full notebook cells\\n\",\n       \"var notebookContainer = gd.closest('#notebook-container');\\n\",\n       \"if (notebookContainer) {{\\n\",\n       \"    x.observe(notebookContainer, {childList: true});\\n\",\n       \"}}\\n\",\n       \"\\n\",\n       \"// Listen for the clearing of the current output cell\\n\",\n       \"var outputEl = gd.closest('.output');\\n\",\n       \"if (outputEl) {{\\n\",\n       \"    x.observe(outputEl, {childList: true});\\n\",\n       \"}}\\n\",\n       \"\\n\",\n       \"                        })                };                });            </script>        </div>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    }\n   ],\n   \"source\": [\n    \"pu.plot_timestep(sharpy_output, tstep=-1, minus_mstar=(wake_panels - 6), plotly=True,custom_scaling=False,z_compression=0.5)\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## Postprocessing\\n\",\n    \"As an example, we are going to plot the evolution of the tip position along time:\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 34,\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"data\": {\n      \"image/svg+xml\": [\n       \"<?xml version=\\\"1.0\\\" encoding=\\\"utf-8\\\" standalone=\\\"no\\\"?>\\n\",\n       \"<!DOCTYPE svg PUBLIC \\\"-//W3C//DTD SVG 1.1//EN\\\"\\n\",\n       \"  \\\"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\\\">\\n\",\n       \"<svg xmlns:xlink=\\\"http://www.w3.org/1999/xlink\\\" width=\\\"398.50625pt\\\" height=\\\"211.07625pt\\\" viewBox=\\\"0 0 398.50625 211.07625\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\" version=\\\"1.1\\\">\\n\",\n       \" <metadata>\\n\",\n       \"  <rdf:RDF xmlns:dc=\\\"http://purl.org/dc/elements/1.1/\\\" xmlns:cc=\\\"http://creativecommons.org/ns#\\\" xmlns:rdf=\\\"http://www.w3.org/1999/02/22-rdf-syntax-ns#\\\">\\n\",\n       \"   <cc:Work>\\n\",\n       \"    <dc:type rdf:resource=\\\"http://purl.org/dc/dcmitype/StillImage\\\"/>\\n\",\n       \"    <dc:date>2023-06-30T10:27:03.096903</dc:date>\\n\",\n       \"    <dc:format>image/svg+xml</dc:format>\\n\",\n       \"    <dc:creator>\\n\",\n       \"     <cc:Agent>\\n\",\n       \"      <dc:title>Matplotlib v3.7.1, https://matplotlib.org/</dc:title>\\n\",\n       \"     </cc:Agent>\\n\",\n       \"    </dc:creator>\\n\",\n       \"   </cc:Work>\\n\",\n       \"  </rdf:RDF>\\n\",\n       \" </metadata>\\n\",\n       \" <defs>\\n\",\n       \"  <style type=\\\"text/css\\\">*{stroke-linejoin: round; stroke-linecap: butt}</style>\\n\",\n       \" </defs>\\n\",\n       \" <g id=\\\"figure_1\\\">\\n\",\n       \"  <g id=\\\"patch_1\\\">\\n\",\n       \"   <path d=\\\"M 0 211.07625 \\n\",\n       \"L 398.50625 211.07625 \\n\",\n       \"L 398.50625 0 \\n\",\n       \"L 0 0 \\n\",\n       \"z\\n\",\n       \"\\\" style=\\\"fill: #ffffff\\\"/>\\n\",\n       \"  </g>\\n\",\n       \"  <g id=\\\"axes_1\\\">\\n\",\n       \"   <g id=\\\"patch_2\\\">\\n\",\n       \"    <path d=\\\"M 56.50625 173.52 \\n\",\n       \"L 391.30625 173.52 \\n\",\n       \"L 391.30625 7.2 \\n\",\n       \"L 56.50625 7.2 \\n\",\n       \"z\\n\",\n       \"\\\" style=\\\"fill: #ffffff\\\"/>\\n\",\n       \"   </g>\\n\",\n       \"   <g id=\\\"matplotlib.axis_1\\\">\\n\",\n       \"    <g id=\\\"xtick_1\\\">\\n\",\n       \"     <g id=\\\"line2d_1\\\">\\n\",\n       \"      <path d=\\\"M 71.724432 173.52 \\n\",\n       \"L 71.724432 7.2 \\n\",\n       \"\\\" clip-path=\\\"url(#p568b3d077a)\\\" style=\\\"fill: none; stroke: #b0b0b0; stroke-width: 0.8; stroke-linecap: square\\\"/>\\n\",\n       \"     </g>\\n\",\n       \"     <g id=\\\"line2d_2\\\">\\n\",\n       \"      <defs>\\n\",\n       \"       <path id=\\\"m0940d2d85a\\\" d=\\\"M 0 0 \\n\",\n       \"L 0 3.5 \\n\",\n       \"\\\" style=\\\"stroke: #000000; stroke-width: 0.8\\\"/>\\n\",\n       \"      </defs>\\n\",\n       \"      <g>\\n\",\n       \"       <use xlink:href=\\\"#m0940d2d85a\\\" x=\\\"71.724432\\\" y=\\\"173.52\\\" style=\\\"stroke: #000000; stroke-width: 0.8\\\"/>\\n\",\n       \"      </g>\\n\",\n       \"     </g>\\n\",\n       \"     <g id=\\\"text_1\\\">\\n\",\n       \"      <!-- 0 -->\\n\",\n       \"      <g transform=\\\"translate(68.543182 188.118438) scale(0.1 -0.1)\\\">\\n\",\n       \"       <defs>\\n\",\n       \"        <path id=\\\"DejaVuSans-30\\\" d=\\\"M 2034 4250 \\n\",\n       \"Q 1547 4250 1301 3770 \\n\",\n       \"Q 1056 3291 1056 2328 \\n\",\n       \"Q 1056 1369 1301 889 \\n\",\n       \"Q 1547 409 2034 409 \\n\",\n       \"Q 2525 409 2770 889 \\n\",\n       \"Q 3016 1369 3016 2328 \\n\",\n       \"Q 3016 3291 2770 3770 \\n\",\n       \"Q 2525 4250 2034 4250 \\n\",\n       \"z\\n\",\n       \"M 2034 4750 \\n\",\n       \"Q 2819 4750 3233 4129 \\n\",\n       \"Q 3647 3509 3647 2328 \\n\",\n       \"Q 3647 1150 3233 529 \\n\",\n       \"Q 2819 -91 2034 -91 \\n\",\n       \"Q 1250 -91 836 529 \\n\",\n       \"Q 422 1150 422 2328 \\n\",\n       \"Q 422 3509 836 4129 \\n\",\n       \"Q 1250 4750 2034 4750 \\n\",\n       \"z\\n\",\n       \"\\\" transform=\\\"scale(0.015625)\\\"/>\\n\",\n       \"       </defs>\\n\",\n       \"       <use xlink:href=\\\"#DejaVuSans-30\\\"/>\\n\",\n       \"      </g>\\n\",\n       \"     </g>\\n\",\n       \"    </g>\\n\",\n       \"    <g id=\\\"xtick_2\\\">\\n\",\n       \"     <g id=\\\"line2d_3\\\">\\n\",\n       \"      <path d=\\\"M 132.597159 173.52 \\n\",\n       \"L 132.597159 7.2 \\n\",\n       \"\\\" clip-path=\\\"url(#p568b3d077a)\\\" style=\\\"fill: none; stroke: #b0b0b0; stroke-width: 0.8; stroke-linecap: square\\\"/>\\n\",\n       \"     </g>\\n\",\n       \"     <g id=\\\"line2d_4\\\">\\n\",\n       \"      <g>\\n\",\n       \"       <use xlink:href=\\\"#m0940d2d85a\\\" x=\\\"132.597159\\\" y=\\\"173.52\\\" style=\\\"stroke: #000000; stroke-width: 0.8\\\"/>\\n\",\n       \"      </g>\\n\",\n       \"     </g>\\n\",\n       \"     <g id=\\\"text_2\\\">\\n\",\n       \"      <!-- 1 -->\\n\",\n       \"      <g transform=\\\"translate(129.415909 188.118438) scale(0.1 -0.1)\\\">\\n\",\n       \"       <defs>\\n\",\n       \"        <path id=\\\"DejaVuSans-31\\\" d=\\\"M 794 531 \\n\",\n       \"L 1825 531 \\n\",\n       \"L 1825 4091 \\n\",\n       \"L 703 3866 \\n\",\n       \"L 703 4441 \\n\",\n       \"L 1819 4666 \\n\",\n       \"L 2450 4666 \\n\",\n       \"L 2450 531 \\n\",\n       \"L 3481 531 \\n\",\n       \"L 3481 0 \\n\",\n       \"L 794 0 \\n\",\n       \"L 794 531 \\n\",\n       \"z\\n\",\n       \"\\\" transform=\\\"scale(0.015625)\\\"/>\\n\",\n       \"       </defs>\\n\",\n       \"       <use xlink:href=\\\"#DejaVuSans-31\\\"/>\\n\",\n       \"      </g>\\n\",\n       \"     </g>\\n\",\n       \"    </g>\\n\",\n       \"    <g id=\\\"xtick_3\\\">\\n\",\n       \"     <g id=\\\"line2d_5\\\">\\n\",\n       \"      <path d=\\\"M 193.469886 173.52 \\n\",\n       \"L 193.469886 7.2 \\n\",\n       \"\\\" clip-path=\\\"url(#p568b3d077a)\\\" style=\\\"fill: none; stroke: #b0b0b0; stroke-width: 0.8; stroke-linecap: square\\\"/>\\n\",\n       \"     </g>\\n\",\n       \"     <g id=\\\"line2d_6\\\">\\n\",\n       \"      <g>\\n\",\n       \"       <use xlink:href=\\\"#m0940d2d85a\\\" x=\\\"193.469886\\\" y=\\\"173.52\\\" style=\\\"stroke: #000000; stroke-width: 0.8\\\"/>\\n\",\n       \"      </g>\\n\",\n       \"     </g>\\n\",\n       \"     <g id=\\\"text_3\\\">\\n\",\n       \"      <!-- 2 -->\\n\",\n       \"      <g transform=\\\"translate(190.288636 188.118438) scale(0.1 -0.1)\\\">\\n\",\n       \"       <defs>\\n\",\n       \"        <path id=\\\"DejaVuSans-32\\\" d=\\\"M 1228 531 \\n\",\n       \"L 3431 531 \\n\",\n       \"L 3431 0 \\n\",\n       \"L 469 0 \\n\",\n       \"L 469 531 \\n\",\n       \"Q 828 903 1448 1529 \\n\",\n       \"Q 2069 2156 2228 2338 \\n\",\n       \"Q 2531 2678 2651 2914 \\n\",\n       \"Q 2772 3150 2772 3378 \\n\",\n       \"Q 2772 3750 2511 3984 \\n\",\n       \"Q 2250 4219 1831 4219 \\n\",\n       \"Q 1534 4219 1204 4116 \\n\",\n       \"Q 875 4013 500 3803 \\n\",\n       \"L 500 4441 \\n\",\n       \"Q 881 4594 1212 4672 \\n\",\n       \"Q 1544 4750 1819 4750 \\n\",\n       \"Q 2544 4750 2975 4387 \\n\",\n       \"Q 3406 4025 3406 3419 \\n\",\n       \"Q 3406 3131 3298 2873 \\n\",\n       \"Q 3191 2616 2906 2266 \\n\",\n       \"Q 2828 2175 2409 1742 \\n\",\n       \"Q 1991 1309 1228 531 \\n\",\n       \"z\\n\",\n       \"\\\" transform=\\\"scale(0.015625)\\\"/>\\n\",\n       \"       </defs>\\n\",\n       \"       <use xlink:href=\\\"#DejaVuSans-32\\\"/>\\n\",\n       \"      </g>\\n\",\n       \"     </g>\\n\",\n       \"    </g>\\n\",\n       \"    <g id=\\\"xtick_4\\\">\\n\",\n       \"     <g id=\\\"line2d_7\\\">\\n\",\n       \"      <path d=\\\"M 254.342614 173.52 \\n\",\n       \"L 254.342614 7.2 \\n\",\n       \"\\\" clip-path=\\\"url(#p568b3d077a)\\\" style=\\\"fill: none; stroke: #b0b0b0; stroke-width: 0.8; stroke-linecap: square\\\"/>\\n\",\n       \"     </g>\\n\",\n       \"     <g id=\\\"line2d_8\\\">\\n\",\n       \"      <g>\\n\",\n       \"       <use xlink:href=\\\"#m0940d2d85a\\\" x=\\\"254.342614\\\" y=\\\"173.52\\\" style=\\\"stroke: #000000; stroke-width: 0.8\\\"/>\\n\",\n       \"      </g>\\n\",\n       \"     </g>\\n\",\n       \"     <g id=\\\"text_4\\\">\\n\",\n       \"      <!-- 3 -->\\n\",\n       \"      <g transform=\\\"translate(251.161364 188.118438) scale(0.1 -0.1)\\\">\\n\",\n       \"       <defs>\\n\",\n       \"        <path id=\\\"DejaVuSans-33\\\" d=\\\"M 2597 2516 \\n\",\n       \"Q 3050 2419 3304 2112 \\n\",\n       \"Q 3559 1806 3559 1356 \\n\",\n       \"Q 3559 666 3084 287 \\n\",\n       \"Q 2609 -91 1734 -91 \\n\",\n       \"Q 1441 -91 1130 -33 \\n\",\n       \"Q 819 25 488 141 \\n\",\n       \"L 488 750 \\n\",\n       \"Q 750 597 1062 519 \\n\",\n       \"Q 1375 441 1716 441 \\n\",\n       \"Q 2309 441 2620 675 \\n\",\n       \"Q 2931 909 2931 1356 \\n\",\n       \"Q 2931 1769 2642 2001 \\n\",\n       \"Q 2353 2234 1838 2234 \\n\",\n       \"L 1294 2234 \\n\",\n       \"L 1294 2753 \\n\",\n       \"L 1863 2753 \\n\",\n       \"Q 2328 2753 2575 2939 \\n\",\n       \"Q 2822 3125 2822 3475 \\n\",\n       \"Q 2822 3834 2567 4026 \\n\",\n       \"Q 2313 4219 1838 4219 \\n\",\n       \"Q 1578 4219 1281 4162 \\n\",\n       \"Q 984 4106 628 3988 \\n\",\n       \"L 628 4550 \\n\",\n       \"Q 988 4650 1302 4700 \\n\",\n       \"Q 1616 4750 1894 4750 \\n\",\n       \"Q 2613 4750 3031 4423 \\n\",\n       \"Q 3450 4097 3450 3541 \\n\",\n       \"Q 3450 3153 3228 2886 \\n\",\n       \"Q 3006 2619 2597 2516 \\n\",\n       \"z\\n\",\n       \"\\\" transform=\\\"scale(0.015625)\\\"/>\\n\",\n       \"       </defs>\\n\",\n       \"       <use xlink:href=\\\"#DejaVuSans-33\\\"/>\\n\",\n       \"      </g>\\n\",\n       \"     </g>\\n\",\n       \"    </g>\\n\",\n       \"    <g id=\\\"xtick_5\\\">\\n\",\n       \"     <g id=\\\"line2d_9\\\">\\n\",\n       \"      <path d=\\\"M 315.215341 173.52 \\n\",\n       \"L 315.215341 7.2 \\n\",\n       \"\\\" clip-path=\\\"url(#p568b3d077a)\\\" style=\\\"fill: none; stroke: #b0b0b0; stroke-width: 0.8; stroke-linecap: square\\\"/>\\n\",\n       \"     </g>\\n\",\n       \"     <g id=\\\"line2d_10\\\">\\n\",\n       \"      <g>\\n\",\n       \"       <use xlink:href=\\\"#m0940d2d85a\\\" x=\\\"315.215341\\\" y=\\\"173.52\\\" style=\\\"stroke: #000000; stroke-width: 0.8\\\"/>\\n\",\n       \"      </g>\\n\",\n       \"     </g>\\n\",\n       \"     <g id=\\\"text_5\\\">\\n\",\n       \"      <!-- 4 -->\\n\",\n       \"      <g transform=\\\"translate(312.034091 188.118438) scale(0.1 -0.1)\\\">\\n\",\n       \"       <defs>\\n\",\n       \"        <path id=\\\"DejaVuSans-34\\\" d=\\\"M 2419 4116 \\n\",\n       \"L 825 1625 \\n\",\n       \"L 2419 1625 \\n\",\n       \"L 2419 4116 \\n\",\n       \"z\\n\",\n       \"M 2253 4666 \\n\",\n       \"L 3047 4666 \\n\",\n       \"L 3047 1625 \\n\",\n       \"L 3713 1625 \\n\",\n       \"L 3713 1100 \\n\",\n       \"L 3047 1100 \\n\",\n       \"L 3047 0 \\n\",\n       \"L 2419 0 \\n\",\n       \"L 2419 1100 \\n\",\n       \"L 313 1100 \\n\",\n       \"L 313 1709 \\n\",\n       \"L 2253 4666 \\n\",\n       \"z\\n\",\n       \"\\\" transform=\\\"scale(0.015625)\\\"/>\\n\",\n       \"       </defs>\\n\",\n       \"       <use xlink:href=\\\"#DejaVuSans-34\\\"/>\\n\",\n       \"      </g>\\n\",\n       \"     </g>\\n\",\n       \"    </g>\\n\",\n       \"    <g id=\\\"xtick_6\\\">\\n\",\n       \"     <g id=\\\"line2d_11\\\">\\n\",\n       \"      <path d=\\\"M 376.088068 173.52 \\n\",\n       \"L 376.088068 7.2 \\n\",\n       \"\\\" clip-path=\\\"url(#p568b3d077a)\\\" style=\\\"fill: none; stroke: #b0b0b0; stroke-width: 0.8; stroke-linecap: square\\\"/>\\n\",\n       \"     </g>\\n\",\n       \"     <g id=\\\"line2d_12\\\">\\n\",\n       \"      <g>\\n\",\n       \"       <use xlink:href=\\\"#m0940d2d85a\\\" x=\\\"376.088068\\\" y=\\\"173.52\\\" style=\\\"stroke: #000000; stroke-width: 0.8\\\"/>\\n\",\n       \"      </g>\\n\",\n       \"     </g>\\n\",\n       \"     <g id=\\\"text_6\\\">\\n\",\n       \"      <!-- 5 -->\\n\",\n       \"      <g transform=\\\"translate(372.906818 188.118438) scale(0.1 -0.1)\\\">\\n\",\n       \"       <defs>\\n\",\n       \"        <path id=\\\"DejaVuSans-35\\\" d=\\\"M 691 4666 \\n\",\n       \"L 3169 4666 \\n\",\n       \"L 3169 4134 \\n\",\n       \"L 1269 4134 \\n\",\n       \"L 1269 2991 \\n\",\n       \"Q 1406 3038 1543 3061 \\n\",\n       \"Q 1681 3084 1819 3084 \\n\",\n       \"Q 2600 3084 3056 2656 \\n\",\n       \"Q 3513 2228 3513 1497 \\n\",\n       \"Q 3513 744 3044 326 \\n\",\n       \"Q 2575 -91 1722 -91 \\n\",\n       \"Q 1428 -91 1123 -41 \\n\",\n       \"Q 819 9 494 109 \\n\",\n       \"L 494 744 \\n\",\n       \"Q 775 591 1075 516 \\n\",\n       \"Q 1375 441 1709 441 \\n\",\n       \"Q 2250 441 2565 725 \\n\",\n       \"Q 2881 1009 2881 1497 \\n\",\n       \"Q 2881 1984 2565 2268 \\n\",\n       \"Q 2250 2553 1709 2553 \\n\",\n       \"Q 1456 2553 1204 2497 \\n\",\n       \"Q 953 2441 691 2322 \\n\",\n       \"L 691 4666 \\n\",\n       \"z\\n\",\n       \"\\\" transform=\\\"scale(0.015625)\\\"/>\\n\",\n       \"       </defs>\\n\",\n       \"       <use xlink:href=\\\"#DejaVuSans-35\\\"/>\\n\",\n       \"      </g>\\n\",\n       \"     </g>\\n\",\n       \"    </g>\\n\",\n       \"    <g id=\\\"text_7\\\">\\n\",\n       \"     <!-- time [s] -->\\n\",\n       \"     <g transform=\\\"translate(204.514844 201.796563) scale(0.1 -0.1)\\\">\\n\",\n       \"      <defs>\\n\",\n       \"       <path id=\\\"DejaVuSans-74\\\" d=\\\"M 1172 4494 \\n\",\n       \"L 1172 3500 \\n\",\n       \"L 2356 3500 \\n\",\n       \"L 2356 3053 \\n\",\n       \"L 1172 3053 \\n\",\n       \"L 1172 1153 \\n\",\n       \"Q 1172 725 1289 603 \\n\",\n       \"Q 1406 481 1766 481 \\n\",\n       \"L 2356 481 \\n\",\n       \"L 2356 0 \\n\",\n       \"L 1766 0 \\n\",\n       \"Q 1100 0 847 248 \\n\",\n       \"Q 594 497 594 1153 \\n\",\n       \"L 594 3053 \\n\",\n       \"L 172 3053 \\n\",\n       \"L 172 3500 \\n\",\n       \"L 594 3500 \\n\",\n       \"L 594 4494 \\n\",\n       \"L 1172 4494 \\n\",\n       \"z\\n\",\n       \"\\\" transform=\\\"scale(0.015625)\\\"/>\\n\",\n       \"       <path id=\\\"DejaVuSans-69\\\" d=\\\"M 603 3500 \\n\",\n       \"L 1178 3500 \\n\",\n       \"L 1178 0 \\n\",\n       \"L 603 0 \\n\",\n       \"L 603 3500 \\n\",\n       \"z\\n\",\n       \"M 603 4863 \\n\",\n       \"L 1178 4863 \\n\",\n       \"L 1178 4134 \\n\",\n       \"L 603 4134 \\n\",\n       \"L 603 4863 \\n\",\n       \"z\\n\",\n       \"\\\" transform=\\\"scale(0.015625)\\\"/>\\n\",\n       \"       <path id=\\\"DejaVuSans-6d\\\" d=\\\"M 3328 2828 \\n\",\n       \"Q 3544 3216 3844 3400 \\n\",\n       \"Q 4144 3584 4550 3584 \\n\",\n       \"Q 5097 3584 5394 3201 \\n\",\n       \"Q 5691 2819 5691 2113 \\n\",\n       \"L 5691 0 \\n\",\n       \"L 5113 0 \\n\",\n       \"L 5113 2094 \\n\",\n       \"Q 5113 2597 4934 2840 \\n\",\n       \"Q 4756 3084 4391 3084 \\n\",\n       \"Q 3944 3084 3684 2787 \\n\",\n       \"Q 3425 2491 3425 1978 \\n\",\n       \"L 3425 0 \\n\",\n       \"L 2847 0 \\n\",\n       \"L 2847 2094 \\n\",\n       \"Q 2847 2600 2669 2842 \\n\",\n       \"Q 2491 3084 2119 3084 \\n\",\n       \"Q 1678 3084 1418 2786 \\n\",\n       \"Q 1159 2488 1159 1978 \\n\",\n       \"L 1159 0 \\n\",\n       \"L 581 0 \\n\",\n       \"L 581 3500 \\n\",\n       \"L 1159 3500 \\n\",\n       \"L 1159 2956 \\n\",\n       \"Q 1356 3278 1631 3431 \\n\",\n       \"Q 1906 3584 2284 3584 \\n\",\n       \"Q 2666 3584 2933 3390 \\n\",\n       \"Q 3200 3197 3328 2828 \\n\",\n       \"z\\n\",\n       \"\\\" transform=\\\"scale(0.015625)\\\"/>\\n\",\n       \"       <path id=\\\"DejaVuSans-65\\\" d=\\\"M 3597 1894 \\n\",\n       \"L 3597 1613 \\n\",\n       \"L 953 1613 \\n\",\n       \"Q 991 1019 1311 708 \\n\",\n       \"Q 1631 397 2203 397 \\n\",\n       \"Q 2534 397 2845 478 \\n\",\n       \"Q 3156 559 3463 722 \\n\",\n       \"L 3463 178 \\n\",\n       \"Q 3153 47 2828 -22 \\n\",\n       \"Q 2503 -91 2169 -91 \\n\",\n       \"Q 1331 -91 842 396 \\n\",\n       \"Q 353 884 353 1716 \\n\",\n       \"Q 353 2575 817 3079 \\n\",\n       \"Q 1281 3584 2069 3584 \\n\",\n       \"Q 2775 3584 3186 3129 \\n\",\n       \"Q 3597 2675 3597 1894 \\n\",\n       \"z\\n\",\n       \"M 3022 2063 \\n\",\n       \"Q 3016 2534 2758 2815 \\n\",\n       \"Q 2500 3097 2075 3097 \\n\",\n       \"Q 1594 3097 1305 2825 \\n\",\n       \"Q 1016 2553 972 2059 \\n\",\n       \"L 3022 2063 \\n\",\n       \"z\\n\",\n       \"\\\" transform=\\\"scale(0.015625)\\\"/>\\n\",\n       \"       <path id=\\\"DejaVuSans-20\\\" transform=\\\"scale(0.015625)\\\"/>\\n\",\n       \"       <path id=\\\"DejaVuSans-5b\\\" d=\\\"M 550 4863 \\n\",\n       \"L 1875 4863 \\n\",\n       \"L 1875 4416 \\n\",\n       \"L 1125 4416 \\n\",\n       \"L 1125 -397 \\n\",\n       \"L 1875 -397 \\n\",\n       \"L 1875 -844 \\n\",\n       \"L 550 -844 \\n\",\n       \"L 550 4863 \\n\",\n       \"z\\n\",\n       \"\\\" transform=\\\"scale(0.015625)\\\"/>\\n\",\n       \"       <path id=\\\"DejaVuSans-73\\\" d=\\\"M 2834 3397 \\n\",\n       \"L 2834 2853 \\n\",\n       \"Q 2591 2978 2328 3040 \\n\",\n       \"Q 2066 3103 1784 3103 \\n\",\n       \"Q 1356 3103 1142 2972 \\n\",\n       \"Q 928 2841 928 2578 \\n\",\n       \"Q 928 2378 1081 2264 \\n\",\n       \"Q 1234 2150 1697 2047 \\n\",\n       \"L 1894 2003 \\n\",\n       \"Q 2506 1872 2764 1633 \\n\",\n       \"Q 3022 1394 3022 966 \\n\",\n       \"Q 3022 478 2636 193 \\n\",\n       \"Q 2250 -91 1575 -91 \\n\",\n       \"Q 1294 -91 989 -36 \\n\",\n       \"Q 684 19 347 128 \\n\",\n       \"L 347 722 \\n\",\n       \"Q 666 556 975 473 \\n\",\n       \"Q 1284 391 1588 391 \\n\",\n       \"Q 1994 391 2212 530 \\n\",\n       \"Q 2431 669 2431 922 \\n\",\n       \"Q 2431 1156 2273 1281 \\n\",\n       \"Q 2116 1406 1581 1522 \\n\",\n       \"L 1381 1569 \\n\",\n       \"Q 847 1681 609 1914 \\n\",\n       \"Q 372 2147 372 2553 \\n\",\n       \"Q 372 3047 722 3315 \\n\",\n       \"Q 1072 3584 1716 3584 \\n\",\n       \"Q 2034 3584 2315 3537 \\n\",\n       \"Q 2597 3491 2834 3397 \\n\",\n       \"z\\n\",\n       \"\\\" transform=\\\"scale(0.015625)\\\"/>\\n\",\n       \"       <path id=\\\"DejaVuSans-5d\\\" d=\\\"M 1947 4863 \\n\",\n       \"L 1947 -844 \\n\",\n       \"L 622 -844 \\n\",\n       \"L 622 -397 \\n\",\n       \"L 1369 -397 \\n\",\n       \"L 1369 4416 \\n\",\n       \"L 622 4416 \\n\",\n       \"L 622 4863 \\n\",\n       \"L 1947 4863 \\n\",\n       \"z\\n\",\n       \"\\\" transform=\\\"scale(0.015625)\\\"/>\\n\",\n       \"      </defs>\\n\",\n       \"      <use xlink:href=\\\"#DejaVuSans-74\\\"/>\\n\",\n       \"      <use xlink:href=\\\"#DejaVuSans-69\\\" x=\\\"39.208984\\\"/>\\n\",\n       \"      <use xlink:href=\\\"#DejaVuSans-6d\\\" x=\\\"66.992188\\\"/>\\n\",\n       \"      <use xlink:href=\\\"#DejaVuSans-65\\\" x=\\\"164.404297\\\"/>\\n\",\n       \"      <use xlink:href=\\\"#DejaVuSans-20\\\" x=\\\"225.927734\\\"/>\\n\",\n       \"      <use xlink:href=\\\"#DejaVuSans-5b\\\" x=\\\"257.714844\\\"/>\\n\",\n       \"      <use xlink:href=\\\"#DejaVuSans-73\\\" x=\\\"296.728516\\\"/>\\n\",\n       \"      <use xlink:href=\\\"#DejaVuSans-5d\\\" x=\\\"348.828125\\\"/>\\n\",\n       \"     </g>\\n\",\n       \"    </g>\\n\",\n       \"   </g>\\n\",\n       \"   <g id=\\\"matplotlib.axis_2\\\">\\n\",\n       \"    <g id=\\\"ytick_1\\\">\\n\",\n       \"     <g id=\\\"line2d_13\\\">\\n\",\n       \"      <path d=\\\"M 56.50625 159.861671 \\n\",\n       \"L 391.30625 159.861671 \\n\",\n       \"\\\" clip-path=\\\"url(#p568b3d077a)\\\" style=\\\"fill: none; stroke: #b0b0b0; stroke-width: 0.8; stroke-linecap: square\\\"/>\\n\",\n       \"     </g>\\n\",\n       \"     <g id=\\\"line2d_14\\\">\\n\",\n       \"      <defs>\\n\",\n       \"       <path id=\\\"m7a1eb594cb\\\" d=\\\"M 0 0 \\n\",\n       \"L -3.5 0 \\n\",\n       \"\\\" style=\\\"stroke: #000000; stroke-width: 0.8\\\"/>\\n\",\n       \"      </defs>\\n\",\n       \"      <g>\\n\",\n       \"       <use xlink:href=\\\"#m7a1eb594cb\\\" x=\\\"56.50625\\\" y=\\\"159.861671\\\" style=\\\"stroke: #000000; stroke-width: 0.8\\\"/>\\n\",\n       \"      </g>\\n\",\n       \"     </g>\\n\",\n       \"     <g id=\\\"text_8\\\">\\n\",\n       \"      <!-- 0.006 -->\\n\",\n       \"      <g transform=\\\"translate(20.878125 163.66089) scale(0.1 -0.1)\\\">\\n\",\n       \"       <defs>\\n\",\n       \"        <path id=\\\"DejaVuSans-2e\\\" d=\\\"M 684 794 \\n\",\n       \"L 1344 794 \\n\",\n       \"L 1344 0 \\n\",\n       \"L 684 0 \\n\",\n       \"L 684 794 \\n\",\n       \"z\\n\",\n       \"\\\" transform=\\\"scale(0.015625)\\\"/>\\n\",\n       \"        <path id=\\\"DejaVuSans-36\\\" d=\\\"M 2113 2584 \\n\",\n       \"Q 1688 2584 1439 2293 \\n\",\n       \"Q 1191 2003 1191 1497 \\n\",\n       \"Q 1191 994 1439 701 \\n\",\n       \"Q 1688 409 2113 409 \\n\",\n       \"Q 2538 409 2786 701 \\n\",\n       \"Q 3034 994 3034 1497 \\n\",\n       \"Q 3034 2003 2786 2293 \\n\",\n       \"Q 2538 2584 2113 2584 \\n\",\n       \"z\\n\",\n       \"M 3366 4563 \\n\",\n       \"L 3366 3988 \\n\",\n       \"Q 3128 4100 2886 4159 \\n\",\n       \"Q 2644 4219 2406 4219 \\n\",\n       \"Q 1781 4219 1451 3797 \\n\",\n       \"Q 1122 3375 1075 2522 \\n\",\n       \"Q 1259 2794 1537 2939 \\n\",\n       \"Q 1816 3084 2150 3084 \\n\",\n       \"Q 2853 3084 3261 2657 \\n\",\n       \"Q 3669 2231 3669 1497 \\n\",\n       \"Q 3669 778 3244 343 \\n\",\n       \"Q 2819 -91 2113 -91 \\n\",\n       \"Q 1303 -91 875 529 \\n\",\n       \"Q 447 1150 447 2328 \\n\",\n       \"Q 447 3434 972 4092 \\n\",\n       \"Q 1497 4750 2381 4750 \\n\",\n       \"Q 2619 4750 2861 4703 \\n\",\n       \"Q 3103 4656 3366 4563 \\n\",\n       \"z\\n\",\n       \"\\\" transform=\\\"scale(0.015625)\\\"/>\\n\",\n       \"       </defs>\\n\",\n       \"       <use xlink:href=\\\"#DejaVuSans-30\\\"/>\\n\",\n       \"       <use xlink:href=\\\"#DejaVuSans-2e\\\" x=\\\"63.623047\\\"/>\\n\",\n       \"       <use xlink:href=\\\"#DejaVuSans-30\\\" x=\\\"95.410156\\\"/>\\n\",\n       \"       <use xlink:href=\\\"#DejaVuSans-30\\\" x=\\\"159.033203\\\"/>\\n\",\n       \"       <use xlink:href=\\\"#DejaVuSans-36\\\" x=\\\"222.65625\\\"/>\\n\",\n       \"      </g>\\n\",\n       \"     </g>\\n\",\n       \"    </g>\\n\",\n       \"    <g id=\\\"ytick_2\\\">\\n\",\n       \"     <g id=\\\"line2d_15\\\">\\n\",\n       \"      <path d=\\\"M 56.50625 128.512532 \\n\",\n       \"L 391.30625 128.512532 \\n\",\n       \"\\\" clip-path=\\\"url(#p568b3d077a)\\\" style=\\\"fill: none; stroke: #b0b0b0; stroke-width: 0.8; stroke-linecap: square\\\"/>\\n\",\n       \"     </g>\\n\",\n       \"     <g id=\\\"line2d_16\\\">\\n\",\n       \"      <g>\\n\",\n       \"       <use xlink:href=\\\"#m7a1eb594cb\\\" x=\\\"56.50625\\\" y=\\\"128.512532\\\" style=\\\"stroke: #000000; stroke-width: 0.8\\\"/>\\n\",\n       \"      </g>\\n\",\n       \"     </g>\\n\",\n       \"     <g id=\\\"text_9\\\">\\n\",\n       \"      <!-- 0.008 -->\\n\",\n       \"      <g transform=\\\"translate(20.878125 132.311751) scale(0.1 -0.1)\\\">\\n\",\n       \"       <defs>\\n\",\n       \"        <path id=\\\"DejaVuSans-38\\\" d=\\\"M 2034 2216 \\n\",\n       \"Q 1584 2216 1326 1975 \\n\",\n       \"Q 1069 1734 1069 1313 \\n\",\n       \"Q 1069 891 1326 650 \\n\",\n       \"Q 1584 409 2034 409 \\n\",\n       \"Q 2484 409 2743 651 \\n\",\n       \"Q 3003 894 3003 1313 \\n\",\n       \"Q 3003 1734 2745 1975 \\n\",\n       \"Q 2488 2216 2034 2216 \\n\",\n       \"z\\n\",\n       \"M 1403 2484 \\n\",\n       \"Q 997 2584 770 2862 \\n\",\n       \"Q 544 3141 544 3541 \\n\",\n       \"Q 544 4100 942 4425 \\n\",\n       \"Q 1341 4750 2034 4750 \\n\",\n       \"Q 2731 4750 3128 4425 \\n\",\n       \"Q 3525 4100 3525 3541 \\n\",\n       \"Q 3525 3141 3298 2862 \\n\",\n       \"Q 3072 2584 2669 2484 \\n\",\n       \"Q 3125 2378 3379 2068 \\n\",\n       \"Q 3634 1759 3634 1313 \\n\",\n       \"Q 3634 634 3220 271 \\n\",\n       \"Q 2806 -91 2034 -91 \\n\",\n       \"Q 1263 -91 848 271 \\n\",\n       \"Q 434 634 434 1313 \\n\",\n       \"Q 434 1759 690 2068 \\n\",\n       \"Q 947 2378 1403 2484 \\n\",\n       \"z\\n\",\n       \"M 1172 3481 \\n\",\n       \"Q 1172 3119 1398 2916 \\n\",\n       \"Q 1625 2713 2034 2713 \\n\",\n       \"Q 2441 2713 2670 2916 \\n\",\n       \"Q 2900 3119 2900 3481 \\n\",\n       \"Q 2900 3844 2670 4047 \\n\",\n       \"Q 2441 4250 2034 4250 \\n\",\n       \"Q 1625 4250 1398 4047 \\n\",\n       \"Q 1172 3844 1172 3481 \\n\",\n       \"z\\n\",\n       \"\\\" transform=\\\"scale(0.015625)\\\"/>\\n\",\n       \"       </defs>\\n\",\n       \"       <use xlink:href=\\\"#DejaVuSans-30\\\"/>\\n\",\n       \"       <use xlink:href=\\\"#DejaVuSans-2e\\\" x=\\\"63.623047\\\"/>\\n\",\n       \"       <use xlink:href=\\\"#DejaVuSans-30\\\" x=\\\"95.410156\\\"/>\\n\",\n       \"       <use xlink:href=\\\"#DejaVuSans-30\\\" x=\\\"159.033203\\\"/>\\n\",\n       \"       <use xlink:href=\\\"#DejaVuSans-38\\\" x=\\\"222.65625\\\"/>\\n\",\n       \"      </g>\\n\",\n       \"     </g>\\n\",\n       \"    </g>\\n\",\n       \"    <g id=\\\"ytick_3\\\">\\n\",\n       \"     <g id=\\\"line2d_17\\\">\\n\",\n       \"      <path d=\\\"M 56.50625 97.163394 \\n\",\n       \"L 391.30625 97.163394 \\n\",\n       \"\\\" clip-path=\\\"url(#p568b3d077a)\\\" style=\\\"fill: none; stroke: #b0b0b0; stroke-width: 0.8; stroke-linecap: square\\\"/>\\n\",\n       \"     </g>\\n\",\n       \"     <g id=\\\"line2d_18\\\">\\n\",\n       \"      <g>\\n\",\n       \"       <use xlink:href=\\\"#m7a1eb594cb\\\" x=\\\"56.50625\\\" y=\\\"97.163394\\\" style=\\\"stroke: #000000; stroke-width: 0.8\\\"/>\\n\",\n       \"      </g>\\n\",\n       \"     </g>\\n\",\n       \"     <g id=\\\"text_10\\\">\\n\",\n       \"      <!-- 0.010 -->\\n\",\n       \"      <g transform=\\\"translate(20.878125 100.962613) scale(0.1 -0.1)\\\">\\n\",\n       \"       <use xlink:href=\\\"#DejaVuSans-30\\\"/>\\n\",\n       \"       <use xlink:href=\\\"#DejaVuSans-2e\\\" x=\\\"63.623047\\\"/>\\n\",\n       \"       <use xlink:href=\\\"#DejaVuSans-30\\\" x=\\\"95.410156\\\"/>\\n\",\n       \"       <use xlink:href=\\\"#DejaVuSans-31\\\" x=\\\"159.033203\\\"/>\\n\",\n       \"       <use xlink:href=\\\"#DejaVuSans-30\\\" x=\\\"222.65625\\\"/>\\n\",\n       \"      </g>\\n\",\n       \"     </g>\\n\",\n       \"    </g>\\n\",\n       \"    <g id=\\\"ytick_4\\\">\\n\",\n       \"     <g id=\\\"line2d_19\\\">\\n\",\n       \"      <path d=\\\"M 56.50625 65.814255 \\n\",\n       \"L 391.30625 65.814255 \\n\",\n       \"\\\" clip-path=\\\"url(#p568b3d077a)\\\" style=\\\"fill: none; stroke: #b0b0b0; stroke-width: 0.8; stroke-linecap: square\\\"/>\\n\",\n       \"     </g>\\n\",\n       \"     <g id=\\\"line2d_20\\\">\\n\",\n       \"      <g>\\n\",\n       \"       <use xlink:href=\\\"#m7a1eb594cb\\\" x=\\\"56.50625\\\" y=\\\"65.814255\\\" style=\\\"stroke: #000000; stroke-width: 0.8\\\"/>\\n\",\n       \"      </g>\\n\",\n       \"     </g>\\n\",\n       \"     <g id=\\\"text_11\\\">\\n\",\n       \"      <!-- 0.012 -->\\n\",\n       \"      <g transform=\\\"translate(20.878125 69.613474) scale(0.1 -0.1)\\\">\\n\",\n       \"       <use xlink:href=\\\"#DejaVuSans-30\\\"/>\\n\",\n       \"       <use xlink:href=\\\"#DejaVuSans-2e\\\" x=\\\"63.623047\\\"/>\\n\",\n       \"       <use xlink:href=\\\"#DejaVuSans-30\\\" x=\\\"95.410156\\\"/>\\n\",\n       \"       <use xlink:href=\\\"#DejaVuSans-31\\\" x=\\\"159.033203\\\"/>\\n\",\n       \"       <use xlink:href=\\\"#DejaVuSans-32\\\" x=\\\"222.65625\\\"/>\\n\",\n       \"      </g>\\n\",\n       \"     </g>\\n\",\n       \"    </g>\\n\",\n       \"    <g id=\\\"ytick_5\\\">\\n\",\n       \"     <g id=\\\"line2d_21\\\">\\n\",\n       \"      <path d=\\\"M 56.50625 34.465117 \\n\",\n       \"L 391.30625 34.465117 \\n\",\n       \"\\\" clip-path=\\\"url(#p568b3d077a)\\\" style=\\\"fill: none; stroke: #b0b0b0; stroke-width: 0.8; stroke-linecap: square\\\"/>\\n\",\n       \"     </g>\\n\",\n       \"     <g id=\\\"line2d_22\\\">\\n\",\n       \"      <g>\\n\",\n       \"       <use xlink:href=\\\"#m7a1eb594cb\\\" x=\\\"56.50625\\\" y=\\\"34.465117\\\" style=\\\"stroke: #000000; stroke-width: 0.8\\\"/>\\n\",\n       \"      </g>\\n\",\n       \"     </g>\\n\",\n       \"     <g id=\\\"text_12\\\">\\n\",\n       \"      <!-- 0.014 -->\\n\",\n       \"      <g transform=\\\"translate(20.878125 38.264336) scale(0.1 -0.1)\\\">\\n\",\n       \"       <use xlink:href=\\\"#DejaVuSans-30\\\"/>\\n\",\n       \"       <use xlink:href=\\\"#DejaVuSans-2e\\\" x=\\\"63.623047\\\"/>\\n\",\n       \"       <use xlink:href=\\\"#DejaVuSans-30\\\" x=\\\"95.410156\\\"/>\\n\",\n       \"       <use xlink:href=\\\"#DejaVuSans-31\\\" x=\\\"159.033203\\\"/>\\n\",\n       \"       <use xlink:href=\\\"#DejaVuSans-34\\\" x=\\\"222.65625\\\"/>\\n\",\n       \"      </g>\\n\",\n       \"     </g>\\n\",\n       \"    </g>\\n\",\n       \"    <g id=\\\"text_13\\\">\\n\",\n       \"     <!-- tip position [m] -->\\n\",\n       \"     <g transform=\\\"translate(14.798437 128.638125) rotate(-90) scale(0.1 -0.1)\\\">\\n\",\n       \"      <defs>\\n\",\n       \"       <path id=\\\"DejaVuSans-70\\\" d=\\\"M 1159 525 \\n\",\n       \"L 1159 -1331 \\n\",\n       \"L 581 -1331 \\n\",\n       \"L 581 3500 \\n\",\n       \"L 1159 3500 \\n\",\n       \"L 1159 2969 \\n\",\n       \"Q 1341 3281 1617 3432 \\n\",\n       \"Q 1894 3584 2278 3584 \\n\",\n       \"Q 2916 3584 3314 3078 \\n\",\n       \"Q 3713 2572 3713 1747 \\n\",\n       \"Q 3713 922 3314 415 \\n\",\n       \"Q 2916 -91 2278 -91 \\n\",\n       \"Q 1894 -91 1617 61 \\n\",\n       \"Q 1341 213 1159 525 \\n\",\n       \"z\\n\",\n       \"M 3116 1747 \\n\",\n       \"Q 3116 2381 2855 2742 \\n\",\n       \"Q 2594 3103 2138 3103 \\n\",\n       \"Q 1681 3103 1420 2742 \\n\",\n       \"Q 1159 2381 1159 1747 \\n\",\n       \"Q 1159 1113 1420 752 \\n\",\n       \"Q 1681 391 2138 391 \\n\",\n       \"Q 2594 391 2855 752 \\n\",\n       \"Q 3116 1113 3116 1747 \\n\",\n       \"z\\n\",\n       \"\\\" transform=\\\"scale(0.015625)\\\"/>\\n\",\n       \"       <path id=\\\"DejaVuSans-6f\\\" d=\\\"M 1959 3097 \\n\",\n       \"Q 1497 3097 1228 2736 \\n\",\n       \"Q 959 2375 959 1747 \\n\",\n       \"Q 959 1119 1226 758 \\n\",\n       \"Q 1494 397 1959 397 \\n\",\n       \"Q 2419 397 2687 759 \\n\",\n       \"Q 2956 1122 2956 1747 \\n\",\n       \"Q 2956 2369 2687 2733 \\n\",\n       \"Q 2419 3097 1959 3097 \\n\",\n       \"z\\n\",\n       \"M 1959 3584 \\n\",\n       \"Q 2709 3584 3137 3096 \\n\",\n       \"Q 3566 2609 3566 1747 \\n\",\n       \"Q 3566 888 3137 398 \\n\",\n       \"Q 2709 -91 1959 -91 \\n\",\n       \"Q 1206 -91 779 398 \\n\",\n       \"Q 353 888 353 1747 \\n\",\n       \"Q 353 2609 779 3096 \\n\",\n       \"Q 1206 3584 1959 3584 \\n\",\n       \"z\\n\",\n       \"\\\" transform=\\\"scale(0.015625)\\\"/>\\n\",\n       \"       <path id=\\\"DejaVuSans-6e\\\" d=\\\"M 3513 2113 \\n\",\n       \"L 3513 0 \\n\",\n       \"L 2938 0 \\n\",\n       \"L 2938 2094 \\n\",\n       \"Q 2938 2591 2744 2837 \\n\",\n       \"Q 2550 3084 2163 3084 \\n\",\n       \"Q 1697 3084 1428 2787 \\n\",\n       \"Q 1159 2491 1159 1978 \\n\",\n       \"L 1159 0 \\n\",\n       \"L 581 0 \\n\",\n       \"L 581 3500 \\n\",\n       \"L 1159 3500 \\n\",\n       \"L 1159 2956 \\n\",\n       \"Q 1366 3272 1645 3428 \\n\",\n       \"Q 1925 3584 2291 3584 \\n\",\n       \"Q 2894 3584 3203 3211 \\n\",\n       \"Q 3513 2838 3513 2113 \\n\",\n       \"z\\n\",\n       \"\\\" transform=\\\"scale(0.015625)\\\"/>\\n\",\n       \"      </defs>\\n\",\n       \"      <use xlink:href=\\\"#DejaVuSans-74\\\"/>\\n\",\n       \"      <use xlink:href=\\\"#DejaVuSans-69\\\" x=\\\"39.208984\\\"/>\\n\",\n       \"      <use xlink:href=\\\"#DejaVuSans-70\\\" x=\\\"66.992188\\\"/>\\n\",\n       \"      <use xlink:href=\\\"#DejaVuSans-20\\\" x=\\\"130.46875\\\"/>\\n\",\n       \"      <use xlink:href=\\\"#DejaVuSans-70\\\" x=\\\"162.255859\\\"/>\\n\",\n       \"      <use xlink:href=\\\"#DejaVuSans-6f\\\" x=\\\"225.732422\\\"/>\\n\",\n       \"      <use xlink:href=\\\"#DejaVuSans-73\\\" x=\\\"286.914062\\\"/>\\n\",\n       \"      <use xlink:href=\\\"#DejaVuSans-69\\\" x=\\\"339.013672\\\"/>\\n\",\n       \"      <use xlink:href=\\\"#DejaVuSans-74\\\" x=\\\"366.796875\\\"/>\\n\",\n       \"      <use xlink:href=\\\"#DejaVuSans-69\\\" x=\\\"406.005859\\\"/>\\n\",\n       \"      <use xlink:href=\\\"#DejaVuSans-6f\\\" x=\\\"433.789062\\\"/>\\n\",\n       \"      <use xlink:href=\\\"#DejaVuSans-6e\\\" x=\\\"494.970703\\\"/>\\n\",\n       \"      <use xlink:href=\\\"#DejaVuSans-20\\\" x=\\\"558.349609\\\"/>\\n\",\n       \"      <use xlink:href=\\\"#DejaVuSans-5b\\\" x=\\\"590.136719\\\"/>\\n\",\n       \"      <use xlink:href=\\\"#DejaVuSans-6d\\\" x=\\\"629.150391\\\"/>\\n\",\n       \"      <use xlink:href=\\\"#DejaVuSans-5d\\\" x=\\\"726.5625\\\"/>\\n\",\n       \"     </g>\\n\",\n       \"    </g>\\n\",\n       \"   </g>\\n\",\n       \"   <g id=\\\"line2d_23\\\">\\n\",\n       \"    <path d=\\\"M 71.724432 14.76 \\n\",\n       \"L 79.528628 15.270284 \\n\",\n       \"L 87.332823 17.77718 \\n\",\n       \"L 95.137019 24.079861 \\n\",\n       \"L 102.941215 34.960713 \\n\",\n       \"L 110.745411 49.427471 \\n\",\n       \"L 118.549607 66.005178 \\n\",\n       \"L 126.353802 84.091609 \\n\",\n       \"L 134.157998 103.14396 \\n\",\n       \"L 141.962194 121.725371 \\n\",\n       \"L 149.76639 137.841598 \\n\",\n       \"L 157.570586 150.404992 \\n\",\n       \"L 165.374781 159.544834 \\n\",\n       \"L 173.178977 165.001054 \\n\",\n       \"L 180.983173 165.96 \\n\",\n       \"L 188.787369 162.318848 \\n\",\n       \"L 196.591565 155.186404 \\n\",\n       \"L 204.39576 145.986724 \\n\",\n       \"L 212.199956 135.246836 \\n\",\n       \"L 220.004152 123.315586 \\n\",\n       \"L 227.808348 111.598242 \\n\",\n       \"L 235.612544 101.775638 \\n\",\n       \"L 243.41674 94.566127 \\n\",\n       \"L 251.220935 89.863559 \\n\",\n       \"L 259.025131 87.799225 \\n\",\n       \"L 266.829327 89.175776 \\n\",\n       \"L 274.633523 94.084013 \\n\",\n       \"L 282.437719 101.377749 \\n\",\n       \"L 290.241914 110.025338 \\n\",\n       \"L 298.04611 119.685371 \\n\",\n       \"L 305.850306 130.110251 \\n\",\n       \"L 313.654502 140.189162 \\n\",\n       \"L 321.458698 148.443998 \\n\",\n       \"L 329.262893 154.476512 \\n\",\n       \"L 337.067089 158.56021 \\n\",\n       \"L 344.871285 160.464812 \\n\",\n       \"L 352.675481 159.574432 \\n\",\n       \"L 360.479677 155.855609 \\n\",\n       \"L 368.283872 150.315773 \\n\",\n       \"L 376.088068 143.907063 \\n\",\n       \"\\\" clip-path=\\\"url(#p568b3d077a)\\\" style=\\\"fill: none; stroke: #1f77b4; stroke-width: 1.5; stroke-linecap: square\\\"/>\\n\",\n       \"   </g>\\n\",\n       \"   <g id=\\\"patch_3\\\">\\n\",\n       \"    <path d=\\\"M 56.50625 173.52 \\n\",\n       \"L 56.50625 7.2 \\n\",\n       \"\\\" style=\\\"fill: none; stroke: #000000; stroke-width: 0.8; stroke-linejoin: miter; stroke-linecap: square\\\"/>\\n\",\n       \"   </g>\\n\",\n       \"   <g id=\\\"patch_4\\\">\\n\",\n       \"    <path d=\\\"M 391.30625 173.52 \\n\",\n       \"L 391.30625 7.2 \\n\",\n       \"\\\" style=\\\"fill: none; stroke: #000000; stroke-width: 0.8; stroke-linejoin: miter; stroke-linecap: square\\\"/>\\n\",\n       \"   </g>\\n\",\n       \"   <g id=\\\"patch_5\\\">\\n\",\n       \"    <path d=\\\"M 56.50625 173.52 \\n\",\n       \"L 391.30625 173.52 \\n\",\n       \"\\\" style=\\\"fill: none; stroke: #000000; stroke-width: 0.8; stroke-linejoin: miter; stroke-linecap: square\\\"/>\\n\",\n       \"   </g>\\n\",\n       \"   <g id=\\\"patch_6\\\">\\n\",\n       \"    <path d=\\\"M 56.50625 7.2 \\n\",\n       \"L 391.30625 7.2 \\n\",\n       \"\\\" style=\\\"fill: none; stroke: #000000; stroke-width: 0.8; stroke-linejoin: miter; stroke-linecap: square\\\"/>\\n\",\n       \"   </g>\\n\",\n       \"  </g>\\n\",\n       \" </g>\\n\",\n       \" <defs>\\n\",\n       \"  <clipPath id=\\\"p568b3d077a\\\">\\n\",\n       \"   <rect x=\\\"56.50625\\\" y=\\\"7.2\\\" width=\\\"334.8\\\" height=\\\"166.32\\\"/>\\n\",\n       \"  </clipPath>\\n\",\n       \" </defs>\\n\",\n       \"</svg>\\n\"\n      ],\n      \"text/plain\": [\n       \"<Figure size 600x300 with 1 Axes>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    }\n   ],\n   \"source\": [\n    \"time = np.linspace(0, dt*time_steps, time_steps)\\n\",\n    \"tip_pos = np.zeros((time_steps))\\n\",\n    \"for it in range(time_steps):\\n\",\n    \"    tip_pos[it] = sharpy_output.structure.timestep_info[it].pos[-1, 2]\\n\",\n    \"\\n\",\n    \"fig, plots = plt.subplots(1, 1, figsize=(6, 3))\\n\",\n    \"\\n\",\n    \"plots.grid()\\n\",\n    \"plots.set_xlabel(\\\"time [s]\\\")\\n\",\n    \"plots.set_ylabel(\\\"tip position [m]\\\")\\n\",\n    \"plots.plot(time, tip_pos, '-')\\n\",\n    \"\\n\",\n    \"plt.show()\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## Conclusions\\n\",\n    \"This notebook provides the big picture of the simulations with SHARPy. We recommend to go through the [documentation](https://ic-sharpy.readthedocs.io/en/main/) with special attention to the [SHARPy file description](https://ic-sharpy.readthedocs.io/en/main/content/casefiles.html) and the [examples](https://ic-sharpy.readthedocs.io/en/main/content/examples.html).\"\n   ]\n  }\n ],\n \"metadata\": {\n  \"kernelspec\": {\n   \"display_name\": \"sharpy env)\",\n   \"language\": \"python\",\n   \"name\": \"sharpy\"\n  },\n  \"language_info\": {\n   \"codemirror_mode\": {\n    \"name\": \"ipython\",\n    \"version\": 3\n   },\n   \"file_extension\": \".py\",\n   \"mimetype\": \"text/x-python\",\n   \"name\": \"python\",\n   \"nbconvert_exporter\": \"python\",\n   \"pygments_lexer\": \"ipython3\",\n   \"version\": \"3.10.12\"\n  }\n },\n \"nbformat\": 4,\n \"nbformat_minor\": 4\n}\n"
  },
  {
    "path": "docs/source/content/example_notebooks/linear_goland_flutter.ipynb",
    "content": "{\n \"cells\": [\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {\n    \"tags\": []\n   },\n   \"source\": [\n    \"\\n\",\n    \"# Flutter Analysis of Goland's Wing\\n\",\n    \"\\n\",\n    \"## Description\\n\",\n    \"This is  simple rectangular wing with constant properties originally proposed by Martin Goland in 1945 as a flutter benchmark case. This example generates a beam/UVLM model with the original properties in SHARPy and computes flutter around an arbitrary equilibrium point using the following general process:\\n\",\n    \"\\n\",\n    \"* Calculate steady aerodynamic forces and deflections for a given angle of attack using a nonlinear solver\\n\",\n    \"\\n\",\n    \"* Linearise the dynamic aeroelastic equations about this reference condition\\n\",\n    \"\\n\",\n    \"* Reduce the size of the (linearized) structural subsystem using modal projection\\n\",\n    \"\\n\",\n    \"* Reduce the size of the (linearized) aerodyanic subsystem using a Krylov projection\\n\",\n    \"\\n\",\n    \"* Evaluate the stability of the linearised aeroelastic system at different velocities and plot the results.\\n\",\n    \"\\n\",\n    \"## Wing properties\\n\",\n    \"Span: b=20 ft., chord: c=6 ft., weight: 4 psi., radius of gyration about CG: .25c, elastic axis: 0.33c, centre of gravity: 0.43c\\n\",\n    \"\\n\",\n    \"### References\\n\",\n    \"\\n\",\n    \"Goland, M. (1945). The Flutter o a Uniorm Cantilever Wing. Journal of Applied Mechanics,12(4):197-208.\\n\",\n    \"\\n\",\n    \"Maraniello, S., & Palacios, R. (2019). State-Space Realizations and Internal Balancing in Potential-Flow Aerodynamics with Arbitrary Kinematics. AIAA Journal, 57(6):1–14. https://doi.org/10.2514/1.J058153\\n\",\n    \"\\n\",\n    \"#### Latest update, RPN 14.05.2023\\n\",\n    \"\\n\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## Required Packages\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 1,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"import numpy as np\\n\",\n    \"import matplotlib.pyplot as plt\\n\",\n    \"import os\\n\",\n    \"import sys\\n\",\n    \"import sharpy.cases.templates.flying_wings as wings  # See this package for the Goland wing structural and aerodynamic definition\\n\",\n    \"import sharpy.sharpy_main  # used to run SHARPy from Jupyter\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## Problem Set-up\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"### Operatig conditions\\n\",\n    \"\\n\",\n    \"The UVLM is assembled in normalised time at a velocity of $1 m/s$. The only matrices that need updating then with free stream velocity are the structural matrices, which is significantly cheaper to do than to update the UVLM.\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 2,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"u_inf = 1.\\n\",\n    \"alpha_deg = 2.  # Define angle of attack for static aeroelastic analysis.\\n\",\n    \"rho = 1.02      # Air density.\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"### Discretisation\\n\",\n    \"\\n\",\n    \"Note: To achieve convergence of the flutter results with the ones found in the literature, a fine grid is needed. If you are running this notebook for the first time, set `M = 4` initially to verify that your system can perform!\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 3,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"M = 16             # Number of chordwise panels\\n\",\n    \"N = 32             # Number of spanwise panels\\n\",\n    \"M_star_fact = 10   # Length of the wake in chords.\\n\",\n    \"num_modes =  8     # Number of vibration modes retained in the structural model.\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"### ROM\\n\",\n    \"\\n\",\n    \"A moment-matching (Krylov subspace) model order reduction technique is employed. This ROM method offers the ability to interpolate the transfer functions at a desired point in the complex plane. See the ROM documentation pages for more info. Note that this ROM method matches the transfer function but does not guarantee stability. Therefore the resulting system may be unstable. These unstable modes may appear far in the right hand plane but will not affect the flutter speed calculations.\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 4,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"c_ref = 1.8288 # Goland wing reference chord. Used for reduced frequency normalisation\\n\",\n    \"rom_settings = dict()\\n\",\n    \"rom_settings['algorithm'] = 'mimo_rational_arnoldi'  # reduction algorithm\\n\",\n    \"rom_settings['r'] = 6  # Krylov subspace order\\n\",\n    \"frequency_continuous_k = np.array([0.])  # Interpolation point in the complex plane with reduced frequency units\\n\",\n    \"frequency_continuous_w = 2 * u_inf * frequency_continuous_k / c_ref\\n\",\n    \"rom_settings['frequency'] = frequency_continuous_w\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"### Case Admin\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 5,\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"name\": \"stdout\",\n     \"output_type\": \"stream\",\n     \"text\": [\n      \"The case to run will be: goland_csM16N32Ms10_nmodes8rom_MIMORA_r6_sig0000_0000j\\n\",\n      \"Case files will be saved in ./cases/goland_csM16N32Ms10_nmodes8rom_MIMORA_r6_sig0000_0000j\\n\",\n      \"Output files will be saved in ./output/goland_csM16N32Ms10_nmodes8rom_MIMORA_r6_sig0000_0000j/\\n\"\n     ]\n    }\n   ],\n   \"source\": [\n    \"case_name = 'goland_cs'\\n\",\n    \"case_nlin_info = 'M%dN%dMs%d_nmodes%d' % (M, N, M_star_fact, num_modes)\\n\",\n    \"case_rom_info = 'rom_MIMORA_r%d_sig%04d_%04dj' % (rom_settings['r'], frequency_continuous_k[-1].real * 100,\\n\",\n    \"                                                  frequency_continuous_k[-1].imag * 100)\\n\",\n    \"\\n\",\n    \"case_name += case_nlin_info + case_rom_info\\n\",\n    \"route_test_dir = os.path.abspath('')\\n\",\n    \"\\n\",\n    \"print('The case to run will be: %s' % case_name)\\n\",\n    \"print('Case files will be saved in ./cases/%s' %case_name)\\n\",\n    \"print('Output files will be saved in ./output/%s/' %case_name)\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## Simulation Set-Up\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"### Goland Wing\\n\",\n    \"\\n\",\n    \"`ws` is an instance of a Goland wing with a control surface. Reference the template file `sharpy.cases.templates.flying_wings.GolandControlSurface` for more info on the geometrical, structural and aerodynamic definition of the Goland wing here used.\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 6,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"ws = wings.GolandControlSurface(M=M,\\n\",\n    \"                                N=N,\\n\",\n    \"                                Mstar_fact=M_star_fact,\\n\",\n    \"                                u_inf=u_inf,\\n\",\n    \"                                alpha=alpha_deg,\\n\",\n    \"                                cs_deflection=[0, 0],\\n\",\n    \"                                rho=rho,\\n\",\n    \"                                sweep=0,\\n\",\n    \"                                physical_time=2,\\n\",\n    \"                                n_surfaces=2,\\n\",\n    \"                                route=route_test_dir + '/cases',\\n\",\n    \"                                case_name=case_name)\\n\",\n    \"\\n\",\n    \"ws.clean_test_files()\\n\",\n    \"ws.update_derived_params()\\n\",\n    \"ws.set_default_config_dict()\\n\",\n    \"\\n\",\n    \"ws.generate_aero_file()\\n\",\n    \"ws.generate_fem_file()\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"### Simulation Settings\\n\",\n    \"\\n\",\n    \"The settings for each of the solvers are now set. For a detailed description on them please reference their respective documentation pages\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"#### SHARPy Settings\\n\",\n    \"\\n\",\n    \"The most important setting is the `flow` list. It tells SHARPy which solvers to run and in which order.\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 7,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"ws.config['SHARPy'] = {\\n\",\n    \"    'flow':\\n\",\n    \"        ['BeamLoader', 'AerogridLoader',\\n\",\n    \"         'StaticCoupled',\\n\",\n    \"         'AerogridPlot',\\n\",\n    \"         'BeamPlot',\\n\",\n    \"         'Modal',\\n\",\n    \"         'LinearAssembler',\\n\",\n    \"         'AsymptoticStability',\\n\",\n    \"         ],\\n\",\n    \"    'case': ws.case_name, 'route': ws.route,\\n\",\n    \"    'write_screen': 'off', 'write_log': 'on',    # Change to 'on' as neded.\\n\",\n    \"    'log_folder': route_test_dir + '/output/',\\n\",\n    \"    'log_file': ws.case_name + '.log'}\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"#### Beam Loader Settings\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 8,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"ws.config['BeamLoader'] = {\\n\",\n    \"    'unsteady': 'off',\\n\",\n    \"    'orientation': ws.quat}\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"#### Aerogrid Loader Settings\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 9,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"ws.config['AerogridLoader'] = {\\n\",\n    \"    'unsteady': 'off',\\n\",\n    \"    'aligned_grid': 'on',\\n\",\n    \"    'mstar': ws.Mstar_fact * ws.M,\\n\",\n    \"    'freestream_dir': ws.u_inf_direction,\\n\",\n    \"    'wake_shape_generator': 'StraightWake',\\n\",\n    \"    'wake_shape_generator_input': {'u_inf': ws.u_inf,\\n\",\n    \"                                    'u_inf_direction': ws.u_inf_direction,\\n\",\n    \"                                    'dt': ws.dt}}\\n\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"#### Static Coupled Solver\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 10,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"ws.config['StaticCoupled'] = {\\n\",\n    \"    'print_info': 'on',\\n\",\n    \"    'max_iter': 200,\\n\",\n    \"    'n_load_steps': 1,\\n\",\n    \"    'tolerance': 1e-10,\\n\",\n    \"    'relaxation_factor': 0.,\\n\",\n    \"    'aero_solver': 'StaticUvlm',\\n\",\n    \"    'aero_solver_settings': {\\n\",\n    \"        'rho': ws.rho,\\n\",\n    \"        'print_info': 'off',\\n\",\n    \"        'horseshoe': 'off',\\n\",\n    \"        'num_cores': 4,\\n\",\n    \"        'n_rollup': 0,\\n\",\n    \"        'rollup_dt': ws.dt,\\n\",\n    \"        'rollup_aic_refresh': 1,\\n\",\n    \"        'rollup_tolerance': 1e-4,\\n\",\n    \"        'velocity_field_generator': 'SteadyVelocityField',\\n\",\n    \"        'velocity_field_input': {\\n\",\n    \"            'u_inf': ws.u_inf,\\n\",\n    \"            'u_inf_direction': ws.u_inf_direction}},\\n\",\n    \"    'structural_solver': 'NonLinearStatic',\\n\",\n    \"    'structural_solver_settings': {'print_info': 'off',\\n\",\n    \"                                   'max_iterations': 150,\\n\",\n    \"                                   'num_load_steps': 4,\\n\",\n    \"                                   'delta_curved': 1e-1,\\n\",\n    \"                                   'min_delta': 1e-10,\\n\",\n    \"                                   'gravity_on': 'on',\\n\",\n    \"                                   'gravity': 9.81}}\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"#### AerogridPlot Settings\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 11,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"ws.config['AerogridPlot'] = {'include_rbm': 'off',\\n\",\n    \"                             'include_applied_forces': 'on',\\n\",\n    \"                             'minus_m_star': 0}\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"#### BeamPlot Settings\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 12,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"ws.config['BeamPlot'] = {'include_rbm': 'off',\\n\",\n    \"                         'include_applied_forces': 'on'}\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"#### Modal Solver Settings\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 13,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"ws.config['Modal'] = {'NumLambda': 20,\\n\",\n    \"                      'rigid_body_modes': 'off',\\n\",\n    \"                      'print_matrices': 'on', # 'keep_linear_matrices': 'on',            'write_dat': 'off',\\n\",\n    \"                      'rigid_modes_cg': 'off',\\n\",\n    \"                      'continuous_eigenvalues': 'off',\\n\",\n    \"                      'dt': 0,\\n\",\n    \"                      'plot_eigenvalues': False,\\n\",\n    \"                      'max_rotation_deg': 15.,\\n\",\n    \"                      'max_displacement': 0.15,\\n\",\n    \"                      'write_modes_vtk': True,\\n\",\n    \"                      'use_undamped_modes': True}\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"#### Linear System Assembly Settings\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 14,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"ws.config['LinearAssembler'] = {'linear_system': 'LinearAeroelastic',\\n\",\n    \"                                'linear_system_settings': {\\n\",\n    \"                                    'beam_settings': {'modal_projection': 'on',\\n\",\n    \"                                                      'inout_coords': 'modes',\\n\",\n    \"                                                      'discrete_time': 'on',\\n\",\n    \"                                                      'newmark_damp': 0.5e-4,\\n\",\n    \"                                                      'discr_method': 'newmark',\\n\",\n    \"                                                      'dt': ws.dt,\\n\",\n    \"                                                      'proj_modes': 'undamped',\\n\",\n    \"                                                      'use_euler': 'off',\\n\",\n    \"                                                      'num_modes': num_modes,\\n\",\n    \"                                                      'print_info': 'on',\\n\",\n    \"                                                      'gravity': 'on',\\n\",\n    \"                                                      'remove_sym_modes': 'on',\\n\",\n    \"                                                      'remove_dofs': []},\\n\",\n    \"                                    'aero_settings': {'dt': ws.dt,\\n\",\n    \"                                                      'ScalingDict': {'length': 0.5 * ws.c_ref,\\n\",\n    \"                                                                      'speed': u_inf,\\n\",\n    \"                                                                      'density': rho},\\n\",\n    \"                                                      'integr_order': 2,\\n\",\n    \"                                                      'density': ws.rho,\\n\",\n    \"                                                      'remove_predictor': 'on',\\n\",\n    \"                                                      'use_sparse': 'on',\\n\",\n    \"                                                      'remove_inputs': ['u_gust'],\\n\",\n    \"                                                      'rom_method': ['Krylov'],\\n\",\n    \"                                                      'rom_method_settings': {'Krylov': rom_settings}},\\n\",\n    \"                                    }}\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"#### Asymptotic Stability Analysis Settings\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 15,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"ws.config['AsymptoticStability'] = {'print_info': True,\\n\",\n    \"                                    'velocity_analysis': [100, 180, 81],\\n\",\n    \"                                   'modes_to_plot': []}\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"### Write solver settings config file\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 16,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"ws.config.write()\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## Run SHARPy\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 17,\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"name\": \"stderr\",\n     \"output_type\": \"stream\",\n     \"text\": [\n      \"fatal: not a git repository (or any of the parent directories): .git\\n\",\n      \"/home/rpalacio/anaconda3/envs/sharpy/lib/python3.10/site-packages/scipy/sparse/_index.py:146: SparseEfficiencyWarning: Changing the sparsity structure of a csc_matrix is expensive. lil_matrix is more efficient.\\n\",\n      \"  self._set_arrayXarray(i, j, x)\\n\",\n      \"/home/rpalacio/anaconda3/envs/sharpy/lib/python3.10/site-packages/sharpy/linear/src/lingebm.py:313: UserWarning: Euler parametrisation not implemented - Either rigid body modes are not being used or this method has already been called.\\n\",\n      \"  warnings.warn('Euler parametrisation not implemented - Either rigid body modes are not being used or this '\\n\",\n      \"/home/rpalacio/anaconda3/envs/sharpy/lib/python3.10/site-packages/sharpy/rom/krylov.py:242: UserWarning: Reduced Order Model Unstable\\n\",\n      \"  warn.warn('Reduced Order Model Unstable')\\n\"\n     ]\n    },\n    {\n     \"data\": {\n      \"text/plain\": [\n       \"<sharpy.presharpy.presharpy.PreSharpy at 0x7f90aedb16c0>\"\n      ]\n     },\n     \"execution_count\": 17,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"sharpy.sharpy_main.main(['', ws.route + ws.case_name + '.sharpy'])\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## Analysis\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"### Nonlinear equilibrium\\n\",\n    \"\\n\",\n    \"The nonlinear equilibrium condition can be visualised and analysed by opening, with Paraview, the files in the `/output/<case_name>/aero` and `/output/<case_name>/beam` folders to see the deflection and aerodynamic forces acting on the wing.\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"### Stability \\n\",\n    \"\\n\",\n    \"The stability of the Goland wing is now analysed under changing free stream velocity. The flutter modes involves the two lowest frequency modes near the imaginary axis (1st bending and 1st torsion if aerodynamics is removed). The two modes are seen quite separated at 100 m/s. As speed is increased, the damping of the torsion mode decreases until it crosses the imaginary axis onto the right hand plane and flutter begins.\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 18,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"file_name = './output/%s/stability/velocity_analysis_min1000_max1800_nvel0081.dat' % case_name\\n\",\n    \"\\n\",\n    \"velocity_analysis = np.loadtxt(file_name)\\n\",\n    \"u_inf = velocity_analysis[:, 0]\\n\",\n    \"eigs_r = velocity_analysis[:, 1]\\n\",\n    \"eigs_i = velocity_analysis[:, 2]\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 23,\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"data\": {\n      \"image/png\": \"iVBORw0KGgoAAAANSUhEUgAAAkMAAAG4CAYAAABGhOPcAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/bCgiHAAAACXBIWXMAAA9hAAAPYQGoP6dpAACDp0lEQVR4nO3deXxU1f038M+5d7YsJJAEskhAEFQQRIWKUEQim6mAioKKCii2WgvKEqk7qAgttqAGdxEUH4utCmr1J8SWVSpKhLJZFGUnMQIhe2a59zx/3JnJTPaZSUKG+bx9XTNzl3PPPSSZb84qpJQSRERERBFKOdMZICIiIjqTGAwRERFRRGMwRERERBGNwRARERFFNAZDREREFNEYDBEREVFEYzBEREREEY3BEBEREUU0BkNEREQU0RgMERERUURrVcHQyy+/jIsvvhhxcXGIi4vDgAED8H//93/e41JKzJ07F2lpaYiKisKQIUOwZ88evzTsdjumTZuGpKQkxMTEYMyYMTh69GhLPwoREVHY27hxI0aPHo20tDQIIbB69Wq/46WlpZg6dSo6duyIqKgo9OjRAy+//LLfOeHwudyqgqGOHTviT3/6E7Zt24Zt27bh6quvxnXXXecNeBYuXIhFixZhyZIl+Oabb5CSkoLhw4ejpKTEm8b06dOxatUqrFy5Eps3b0ZpaSlGjRoFTdPO1GMRERGFpbKyMvTp0wdLliyp9fiMGTPw+eef45133sF3332HGTNmYNq0afjoo4+854TF57Js5dq1ayffeOMNqeu6TElJkX/605+8xyorK2V8fLx85ZVXpJRSnj59WprNZrly5UrvOceOHZOKosjPP/+8xfNORER0tgAgV61a5bfvoosukk899ZTfvssuu0w+9thjUsrw+Vw2nelgrC6apuEf//gHysrKMGDAABw4cAD5+fkYMWKE9xyr1YqrrroKW7ZswT333IPc3Fw4nU6/c9LS0tCrVy9s2bIFI0eOrPVedrsddrvd+17XdZw6dQqJiYkQQjTfQxIRUdiTUqKkpARpaWlQlOZrcKmsrITD4Qg5HSlljc82q9UKq9UacFqDBg3Cxx9/jLvuugtpaWlYv349vv/+ezz//PMAEPTncktrdcHQrl27MGDAAFRWViI2NharVq1Cz549sWXLFgBAcnKy3/nJyck4dOgQACA/Px8WiwXt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iKimSA6G9u7dix07dmD79u345ptv8Oqrr+LUqVOIiorCRRddhK1btwaddsDB0COPPILrr78el19+OVJSUrzD3T0uv/zyoDNDREREVJsLL7wQF154IW655RYARteazz//HNOmTcPQoUNDSjvgofV5eXkYNWoUUlNT8bvf/Q6ffvqp31IWRERE1Dw8HahD2c4WQghkZmbinXfewfHjx0NKK+BgaNmyZfj555/x97//HW3btsWsWbOQlJSEsWPHYvny5Thx4kRIGSIiIqLaeZrJQtnCla7rte6/4oorsH79+pDSDmrSRSEErrzySixcuBD/+9//8PXXX+OKK67A66+/jrS0NAwePBh/+ctfcOzYsZAyR0RERGfOxo0bMXr0aKSlpUEIgdWrV/sdnzx5co1g64orrvA7x263Y9q0aUhKSkJMTAzGjBmDo0ePBpyX2NhYXH755fjd736HF198EV9++SVOnDiBzz77DKWlpaE8ZvAzUPvq0aMHZs+ejS+//BLHjh3D5MmTsWnTJvztb39riuSJiIgILd9MVlZWhj59+mDJkiV1nnPNNdcgLy/Pu3322Wd+x6dPn45Vq1Zh5cqV2Lx5M0pLSzFq1ChomhZQXj788EPceOONKC0txYsvvoghQ4YgOTkZY8aMwaxZswJ7sGoC6kDtu5hpQz766KOAM0NERER1a6rRZNUXl61rjc7MzExkZmbWm6bVaq0xmMqjqKgIS5cuxYoVK7yrQLzzzjtIT0/HF198gZEjRzY679dccw2uueYa7/vKykr8+OOPSExMrPP+jRVQMLR9+3a/97m5udA0DRdccAEA4Pvvv4eqqujbt29ImSIiIqKaBEKcgdr9NT093W//nDlz6p3MuD7r169Hhw4d0LZtW1x11VV45pln0KFDBwBGnOB0Ov0WcE9LS0OvXr2wZcuWgIKh6mw2Gy666KKgr/cVUDC0bt067+tFixahTZs2eOutt7yrwxcWFuLOO+/ElVde2SSZIyIioqZ35MgRv9UiaqsVaozMzEyMGzcOnTt3xoEDB/D444/j6quvRm5uLqxWK/Lz82GxWLxxgkdycrJ3/dHWIOhJF//6179i7dq1fg/Yrl07zJs3DyNGjAi5/Y6IiIj8KUJACaFqyHNtXFxc0Etn+br55pu9r3v16oV+/fqhc+fO+PTTTzF27Ng6r5NStqqRbUF3oC4u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a/HEE0+gd+/e6N69O1RVDSlDREREVLtIW47D17Zt2zBy5EhERUXh8ssvh5QSixYtwjPPPIO1a9fisssuCzrtgEaTvf/++8jOzkZpaSmOHz+OqVOnYu3atfjmm2/QuXNnBkJERETULGbMmIExY8bg4MGD+PDDD7Fq1SocOHAAo0aNwvTp00NKO6Bg6MEHH8TEiRNhs9kQGxuL559/Hl9++SXWrVuHnj174vPPPw8pM0RERFQ3RYiQt3C1bds2/PGPf4TJVNWoZTKZMHv2bGzbti2ktAMKhp5++mnExsb67evbty++/vprTJ8+HTfffDMmTJiAX375JaRMERERUU1ChL6Fq7i4OBw+fLjG/iNHjqBNmzYhpd0kky4KIfDAAw9g7969sNvttU6XTURERKGJ5OU4br75ZkyZMgXvvfcejhw5gqNHj2LlypW4++67ceutt4aUdpPOM3TOOefggw8+wKefftqUyRIREVGE+8tf/gIhBCZOnAiXywUAMJvN+P3vf48//elPIaXdLJMuXnvttc2RLBERUUQLtakrjCuGYLFY8Pzzz2PBggX48ccfIaVEt27dEB0dHXLanIGaiIgoTITaCTqcO1B7REdHN/l8hq1qodaNGzdi9OjRSEtLgxACq1ev9js+efLkGm2fV1xxhd85drsd06ZNQ1JSEmJiYjBmzBgcPXq0BZ+CiIjo7NDQ57Kve+65B0IIPPfcc377Q/lcnjlzZqO3ULSqmqGysjL06dMHd955J2688cZaz7nmmmuwbNky73uLxeJ3fPr06fjkk0+wcuVKJCYmYtasWRg1ahRyc3M5DxIREYW1lm4ma8znMgCsXr0aW7durXX1+FA+l7dv396ofIbaMbxVBUOZmZnIzMys9xyr1YqUlJRajxUVFWHp0qVYsWIFhg0bBgB45513kJ6eji+++AIjR45s8jwTERG1lJZejqMxn8vHjh3D1KlTsWbNmhp9hkP9XF63bl1A+Q1WswRDiqJgyJAhePbZZ9G3b98mTXv9+vXo0KED2rZti6uuugrPPPMMOnToAADIzc2F0+nEiBEjvOenpaWhV69e2LJlS52FbrfbYbfbve+Li4sBAE6nE06ns0nzfzbwlAnLpnYsn/qxfOrH8mlYayuj1pKPQHg+5zysVmtQC57quo477rgDDz74IC666KIax4P9XG5pzRIMvfnmmzh0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669x/vnnh5RBIiIiMkTypIuapiE2NhYAkJSUhOPHjwMAOnfujH379oWUdtB9hl599VXMmDEDt9xyC1wul5GYyYRJkyZ5Jz668MIL8cYbb4SUQSIiIqJevXph586d6Nq1K/r374+FCxfCYrHgtddeQ9euXUNKO+iaodjYWLz++us4efKkd2TZyZMn8dprr3kjt0suuQSXXHJJSBkkIiIig6cDdShbIDZu3IjRo0cjLS0NQgisXr3a7/jcuXNx4YUXIiYmBu3atcOwYcOwdetWv3PsdjumTZuGpKQkxMTEYMyYMTh69GjAz/7YY49B13UAwNNPP41Dhw7hyiuvxGeffYYXXngh4PR8hTzp4uHDh3H8+HE4HA4cOnTIuz+UIW5ERERUk4LQmroCHVpfVlaGPn364M4778SNN95Y4/j555+PJUuWoGvXrqioqMDixYsxYsQI7N+/H+3btwcATJ8+HZ988glWrlyJxMREzJo1C6NGjUJubi5UVW10XkaOHOl9fd5552Hv3r04deoU2rVrd+ZmoG7OIW5ERERUU0sPrc/MzERmZmadxydMmOD3ftGiRVi6dCl27tyJoUOHoqioCEuXLsWKFSswbNgwAMA777yD9PR0fPHFF34BTmNs2rQJr776Kn788Ue8//77OOecc7BixQp06dIFgwYNCuzhfATdTFZ9iNvu3bubbIgbERERNZ/i4mK/zW63h5ymw+HAa6+9hvj4ePTp0wcAkJubC6fTiREjRnjPS0tLQ69evbBly5aA0v/ggw8wcuRIREVFYfv27d48l5SUYP78+SHlPehgqPoQN1VVm2yIGxEREdWkNMEGAOnp6YiPj/duCxYsCDpP//znPxEbGwubzYbFixcjJycHSUlJAID8/HxYLBa0a9fO75rk5GTk5+cHdJ958+bhlVdeweuvv+63Yv3AgQPx7bffBp1/IIRmstqGuF1wwQVNMsSNiIiIahJChNQ/xnPtkSNH/CZNtlqtQaeZkZGBHTt24MSJE3j99dcxfvx4bN26FR06dKjzGillwM+xb98+DB48uMb+uLg4nD59OtBs+wm6ZsgzxA2Ad4jbl19+iaeeeirkIW5ERETUfOLi4vy2UIKhmJgYdOvWDVdccQWWLl0Kk8mEpUuXAgBSUlLgcDhQWFjod01BQQGSk5MDuk9qair2799fY//mzZvP3NB63yFu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E3v37kWnTp3OdPYonJ2BxWFbtc6dO8vFixfXefyzzz6TiqLIY8eOeff97W9/k1arVRYVFbVADs+8zz77TF544YVyz549EoDcvn2737FILx9fH330kRRCSIfDIaVk+VS3cOFC2aVLF+97lo9h2bJlMj4+vsb+SC+fyy+/XN57771++y688EL50EMPnaEc0dmCzWS1+POf/4zExERccskleOaZZ/yqoP/zn/+gV69efqsTjxw5Ena7Hbm5uWciuy3q559/xm9/+1usWLEC0dHRNY5Hevn4OnXqFP7f//t/GDhwIMxmMwCWT3VFRUVISEjwvmf51C+Sy8fhcCA3NxcjRozw2z9ixAhvzStRsBgMVfPAAw9g5cqVWLduHaZOnYrnnnsO9913n/d4fn5+jcXl2rVrB4vFUmOxurONlBKTJ0/Gvffei379+tV6TiSXj8cf//hHxMTEIDExEYcPH8ZHH33kPcbyqfLjjz8iOzvbb5kclk/9Irl8Tpw4AU3Tajx/cnLyWf/s1PwiIhiaO3dujU7R1bdt27YBAGbMmIGrrroKF198Me6++2688sorWLp0KU6ePOlNTwhR4x5Sylr3h4PGlk92djaKi4vx8MMP15tepJaPx4MPPojt27dj7dq1UFUVEydOhPSZ6D3SywcAjh8/jmuuuQbjxo3D3Xff7XeM5VO/s618AlX9OSPp2an5REQH6qlTp+KWW26p95xzzz231v1XXHEFAGD//v1ITExESkoKtm7d6ndOYWEhnE5njb9YwkVjy2fevHn46quvaiyO2K9fP9x222146623Irp8PJKSkpCUlITzzz8fPXr0QHp6Or766isMGDCA5QMjEMrIyPAuouyL5VO/s7F8GispKQmqqtaoBSooKDjrn51awJnrrhQePvnkEwlAHjp0SEpZ1YHx+PHj3nNWrlwZER0YDx06JHft2uXd1qxZIwHI999/Xx45ckRKGdnlU5vDhw9LAHLdunVSSpbP0aNHZffu3eUtt9wiXS5XjeORXj4eDXWgjtTyufzyy+Xvf/97v309evRgB2oKGYMhH1u2bJGLFi2S27dvlz/99JN87733ZFpamhwzZoz3HJfLJXv16iWHDh0qv/32W/nFF1/Ijh07yqlTp57BnJ8ZBw4cqDGaLJLLZ+vWrTI7O1tu375dHjx4UP773/+WgwYNkuedd56srKyU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HkRsbCwSEhKgKPX/7XT//fcjMzMT1157LQDAZDKhR48eTRYMNeZ5YmNjMWXKFDz44INITExEcnIyHn30UW/eCwoK8M033/iNuNu6dSv+9a9/YcSIEejQoQO2bt2KX375BT169GiSfBNR68eaIaImMnPmTLz++us4cuQInn76aTzxxBNYsGABevTogZEjR+KTTz7xNrsoioKVK1ciNzcXvXr1wowZM/Dss882aX5CuUdWVhZUVUXPnj3Rvn17b5+c5cuXQwhR4/x//vOf+Pe//43nn3/eb3/v3r2bLBhq7PM8++yzGDx4MMaMGYNhw4Zh0KBB6Nu3LwDgk08+Qf/+/dGhQwfv+XFxcdi4cSN+85vf4Pzzz8djjz2Gv/71r8jMzGySfBNR6ydkYxrZiYgAzJ07F+vXr8f69eubLM0hQ4bgkksuwXPPPddkadZlzJgxGDRoEGbPnh3wtUIIrFq1Ctdff33TZ4yIzijWDBFRo61ZswYLFy5s8nRfeuklxMbGNnrG6mANGjQIt956a0DX3HvvvYiNjW2mHBFRa8CaISI6o44dO4aKigoAQKdOnWCxWM5wjvwVFBSguLgYAJCamtqko++IqHVgMEREREQRjc1kREREFNEYDBEREVFEYzBEREREEY3BEBEREUU0BkNEREQU0RgMERERUURjMEREREQRjcEQERERRTQGQ0RERBTR/j9N034c0UoO3QAAAABJRU5ErkJggg==\",\n      \"text/plain\": [\n       \"<Figure size 640x480 with 2 Axes>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    }\n   ],\n   \"source\": [\n    \"fig = plt.figure()\\n\",\n    \"plt.scatter(eigs_r, eigs_i, c=u_inf, cmap='Blues')\\n\",\n    \"cbar = plt.colorbar()\\n\",\n    \"cbar.set_label('Free Stream Velocity, $u_\\\\infty$ [m/s]')\\n\",\n    \"\\n\",\n    \"plt.grid()\\n\",\n    \"plt.xlim(-50, 5)\\n\",\n    \"plt.ylim(0, 300)\\n\",\n    \"plt.xlabel('Real Part, $\\\\lambda$ [rad/s]')\\n\",\n    \"plt.ylabel('Imag Part, $\\\\lambda$ [rad/s]');\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 20,\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"data\": {\n      \"image/png\": \"iVBORw0KGgoAAAANSUhEUgAAAkcAAAG0CAYAAAA4rYPdAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/bCgiHAAAACXBIWXMAAA9hAAAPYQGoP6dpAABCg0lEQVR4nO3de3RTVf7//1cKvUGhAm2BYikwyEW5KSiCqKC0wAxUEQVFuVk6owwiVFFRUcQZQFQu6oDQ4aJLYMT5KoJ0gIogKAjKZUBhoR8Ey9UiIhUobWjP7w9+zSRt0jZpkuaE52MtluRk52S/09q+2HuffSyGYRgCAACAJCmkqjsAAAAQSAhHAAAAdghHAAAAdghHAAAAdghHAAAAdghHAAAAdghHAAAAdqpXdQfMpqioSMePH1etWrVksViqujsAAKACDMPQ77//rvj4eIWElD02RDhy0/Hjx5WQkFDV3QAAAB44cuSIrr766jLbEI7cVKtWLUmXP9zatWt79dxWq1Xr1q1TcnKyQkNDvXruQEB95hfsNVKf+QV7jdTnudzcXCUkJNh+j5eFcOSm4qm02rVr+yQc1ahRQ7Vr1w7ab3rqM7dgr5H6zC/Ya6S+yqvIkhgWZAMAANghHAEAANghHAEAANghHAEAANghHAEAANghHAEAANghHAEAANghHAEAANghHAEAANghHAEAANghHAEAANghHAEAANghHAEAANghHAEAANghHAEAANghHAEAANghHAEAANghHAEAANghHAEAANghHAEAANghHAEAANghHAEAANghHAEAANghHAEAANghHAEAANghHAEAANghHAEAANghHAEAANghHAEAANghHAEAANgxfTiaM2eOmjZtqoiICHXs2FGbN2922fbDDz9UUlKSYmNjVbt2bXXp0kVr1671Y28BAECgM3U4ev/99zV27Fg999xz2rVrl2699Vb16dNH2dnZTttv2rRJSUlJyszM1I4dO9SjRw/169dPu3bt8nPPAQBAoDJ1OJoxY4ZSU1M1cuRItW7dWrNmzVJCQoLmzp3rtP2sWbP01FNP6cYbb9Q111yjKVOm6JprrtGqVav83HMAABCoqld1BzxVUFCgHTt26JlnnnE4npycrC1btlToHEVFRfr9999Vt25dl23y8/OVn59ve5ybmytJslqtslqtHvTcteLzefu8gYL6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kvnrKyoq0pAhQzR+/Hhdd911pZ43e33FNm7cqLi4OLVo0UJpaWnKycmxPWfmGouKirR69Wq1aNFCvXr1UlxcnDp37uwwbWPm+kr6+eeftXr1aqWmptqOBUN93bp108qVK3Xs2DEZhqENGzbo+++/V69evST5v0bCURU6efKkJKl+/foOx+vXr2977uTJkwoLC1OdOnVctjGzYKvv4sWLeuaZZzR48GDbTRODocZPPvlEUVFRioiI0MyZM5WVlaWYmBhJ5q/vlVdeUfXq1TVmzBinz5u9Pknq06ePlixZos8++0yvv/66vv76a91xxx3Kz8+XZO4ac3JydO7cOU2bNk29e/fWunXr1L9/f91zzz36/PPPJZm7vpLeeecd1apVS/fcc4/tWDDU98Ybb+jaa6/V1VdfrbCwMPXu3Vtz5sxRt27dJPm/xupePyPcZrFYHB4bhlHqWEkVaWNmZqzParXq/vvvV1FRkebMmVNuezPV2KNHD+3evVu//PKLMjIyNHDgQG3btk1xcXEuX2OG+nbs2KHZs2dr586dbvfVDPUVGzRokO3vbdq0UadOnZSYmKjVq1c7/JItyQw1FhUVSZLuuusujRs3TpLUoUMHbdmyRW+//bZuv/12l681Q30lLVy4UA8++KDDeipXzFTfG2+8oa+++korV65UYmKiNm3apFGjRqlhw4bq2bOny9f5qkZGjqpQgwYNJKlU6s3JybGNJjVo0EAFBQU6c+aMyzZmFiz1Wa1WDRw4UIcOHVJWVpZt1EgKjhpr1qyp5s2b6+abb9aCBQtUvXp1LViwQJK569u8ebNycnLUuHFjVa9eXdWrV9dPP/2kJ554Qk2aNJFk7vpcadiwoRITE/XDDz9IMneNMTExql69uq699lqH461bt7ZdrWbm+uxt3rxZBw4c0MiRIx2Om72+vLw8Pfvss5oxY4b69eundu3aafTo0Ro0aJBee+01Sf6vkXBUhZo2baoGDRooKyvLdqygoECff/65unbtKknq2LGjQkNDHdqcOHFC3377ra2NmQVDfcXB6IcfftCnn36qevXqOTwfDDWWZBiGbUrGzPUNGTJEe/bs0e7du21/4uPjNX78eK1du1aSuetz5fTp0zpy5IgaNmwoydw1hoWF6cYbb9SBAwccjn///fdKTEyUZO767C1YsEAdO3a0rfcrZvb6rFarrFarQkIcI0m1atVsI4P+rpFpNR87d+6c/u///s/2+NChQ9q9e7fq1q2rxo0ba+zYsZoyZYquueYaXXPNNZoyZYpq1KihwYMHS5Kio6OVmpqqJ554QvXq1VPdunX15JNPqm3btmUONfpLefX9+uuvys7Otu37U/wDrEGDBmrQoEHA1yeVXWN8fLzuvfde7dy5U5988okKCwttI4F169ZVWFhYwNdYVn316tXT3//+d6WkpKhhw4Y6ffq05syZo6NHj+q+++6TZP7v0ZJhNjQ0VA0aNFDLli0lBX59Utk11q1bV5MmTdKAAQPUsGFDHT58WM8++6xiYmLUv39/SYFfY3lfw/Hjx2vQoEG67bbb1KNHD61Zs0arVq3Sxo0bJZm/PknKzc3VBx98oNdff73U6wO9Pqn8Gm+//XaNHz9ekZGRSkxM1Oeff653331XM2bMkFQFNXr9+jc42LBhgyGp1J9hw4YZhnH5cv4XX3zRaNCggREeHm7cdtttxt69ex3OkZeXZ4wePdqoW7euERkZafTt29fIzs6ugmpKK6++RYsWOX3+xRdftJ0jkOszjLJrLN6iwNmfDRs22M4RyDWWVV9eXp7Rv39/Iz4+3ggLCzMaNmxopKSkGNu3b3c4h1nrc6bkpfyGEdj1GUbZNV64cMFITk42YmNjjdDQUKNx48bGsGHDSvU/kGusyNdwwYIFRvPmzY2IiAijffv2xooVKxzOYfb65s2bZ0RGRhq//fab03MEcn2GUX6NJ06cMIYPH27Ex8cbERERRsuWLY3XX3/dKCoqsp3DnzVaDMMwvBe1AAAAzI01RwAAAHYIRwAAAHYIRwAAAHYIRwAAAHYIRwAAAHYIRwAAAHYIRwAAAHYIRwAAAHYIRwAAAHYIRwAAAHYIRwDgQvfu3TV27NiAPZ+/de/eXRaLRRaLRbt37/brew8fPtz23itWrPDre+PKQzgC/Mj+B7z9H/u7VftLTk6O/vKXv6hx48YKDw9XgwYN1KtXL23dutXWxoy/zPv16+fyLt1bt26VxWLRzp07/dyryz788EO9/PLLtsdm/HzT0tJ04sQJtWnTxivnGz58uJ555ply282ePVsnTpzwynsC5ale1R0ArjS9e/fWokWLHI7FxsaWaldQUKCwsDCf9WPAgAGyWq1655131KxZM/38889av369fv31V7fO4+t+uis1NVX33HOPfvrpJyUmJjo8t3DhQnXo0EE33HBDlfStbt26VfK+3lSjRg01aNDAK+cqKirS6tWrtXLlynLbRkdHKzo62ivvC5SHkSPAz4pHaez/VKtWTd27d9fo0aOVnp6umJgYJSUlSZIMw9D06dPVrFkzRUZGqn379vr3v//tcM6KtLH322+/6YsvvtArr7yiHj16KDExUTfddJMmTJigP/3pT5Iu/4v+888/1+zZs20jXIcPH/a4n2vWrFG3bt101VVXqV69eurbt68OHjzo0K/u3bvrscce09ixY1WnTh3Vr19f8+fP1/nz5zVixAjVqlVLf/jDH/Sf//zHZW19+/ZVXFycFi9e7HD8woULev/995WamurRZyZJ+fn5GjNmjOLi4hQREaFu3brp66+/tj1fVFSkV155Rc2bN1d4eLgaN26sv//97w71FY8UOft8J0+erHr16ik/P9/hfQcMGKChQ4eW2Td7a9asUWRkpC5dumQ7tn//flksFv3yyy8VPk9FVOZr9uWXXyokJESdO3fWv//9b7Vt21aRkZGqV6+eevbsqfPnz3u1r0BFEY6AAPLOO++oevXq+vLLLzVv3jxJ0vPPP69FixZp7ty5+u677zRu3Dg99NBD+vzzz22vq0gbe1FRUYqKitKKFStK/SIuNnv2bHXp0sU2jXLixAklJCR43M/z588rPT1dX3/9tdavX6+QkBD1799fRUVFpT6DmJgYbd++XY899pgeffRR3Xffferatat27typXr16aciQIbpw4YLTflevXl1Dhw7V4sWLZRiG7fgHH3yggoICPfjggx59ZpL01FNP6f/9v/+nd955Rzt37lTz5s3Vq1cv22jbhAkT9Morr2jixInat2+fli5dqvr161f4833iiSdUWFjoMJLyyy+/6JNPPtGIESNc9quk3bt367rrrlP16tUdjjVq1EgxMTEVPk9Fefo1W7lypfr166eff/5ZDzzwgB5++GHt379fGzdu1D333OPw9QP8ygDgN8OGDTOqVatm1KxZ0/bn3nvvNQzDMG6//XajQ4cODu3PnTtnREREGFu2bHE4npqaajzwwAMVbuPMv//9b6NOnTpGRESE0bVrV2PChAnGf//7X4c2t99+u/H444+XOuZJP0vKyckxJBl79+51OHe3bt1sjy9dumTUrFnTGDJkiO3YiRMnDEnG1q1bXda2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\",\n      \"text/plain\": [\n       \"<Figure size 640x480 with 1 Axes>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    }\n   ],\n   \"source\": [\n    \"fig = plt.figure()\\n\",\n    \"natural_frequency = np.sqrt(eigs_r ** 2 + eigs_i ** 2)\\n\",\n    \"damping_ratio = eigs_r / natural_frequency\\n\",\n    \"cond = (eigs_r>-25) * (eigs_r<10) * (natural_frequency<100) # filter unwanted eigenvalues for this plot (mostly aero modes)\\n\",\n    \"\\n\",\n    \"plt.scatter(u_inf[cond], damping_ratio[cond], color='k', marker='s', s=9)\\n\",\n    \"\\n\",\n    \"plt.grid()\\n\",\n    \"plt.ylim(-0.25, 0.25)\\n\",\n    \"plt.xlabel('Free Stream Velocity, $u_\\\\infty$ [m/s]')\\n\",\n    \"plt.ylabel('Damping Ratio, $\\\\zeta$ [-]');\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 21,\n   \"metadata\": {\n    \"tags\": []\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"image/png\": \"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EZGo9A4/O3bsQHh4OGQyGU6dOoWKigoAQElJCRITE0UbIBEREZGY9A4/y5Ytw7p165Camqr2YLJ+/frh1KlTogyOiIiISGx6h59Lly5h0KBB9dpbtmyJe/fuGTImIiIiIqPRO/z4+Pjg119/rdd+9OhRBAYGGjQoIiIiImPRO/zMnDkTc+fOxfHjxyGRSHDz5k188skniI2NxaxZs8QcIxEREZFo9N7qHhcXh6KiIgwZMgR//vknBg0aBKlUitjYWMyePVvMMRIRERGJRu/wAwBvv/02Fi1ahAsXLqC6uhpdunSBq6urWGMjIiIiEp1et72USiWGDBmCy5cvw9nZGX369EHfvn0ZfIiIiMjs6RV+HB0dce7cOUgkErHHQ0RERGRUei94njJlCjZu3CjmWIiIiIiMTu81P5WVlfjoo4+QlZWFPn361HumV0pKisGDIyIiIhKb3uHn3Llz6NWrFwDg8uXLau/xdhgRERGZK73Dz6FDh8QcBxEREZFJ6Lzm57fffoMgCMYYCxEREZHR6Rx+goKCcPv2bdXrCRMm4NatW6IOioiIiMhYdA4/dWd99u7di9LSUtEGRERERGRMem91JyIiIrJEOocfiURSbzcXd3cRERGRpdB5t5cgCJg6dSqkUikA4M8//8SLL75Y75yfL774QpwREhEREYlI5/ATFRWl9nrSpEmiDYaIiIjI2HQOP2lpacYYBxEREZFJcMEzERER2RSGHyIiIrIpDD9ERERkUxh+iIiIyKYw/BAREZFN0Wm31/z585t8bUpKis6DISIiIjI2ncLP6dOnm3QdT3wmIiIic6VT+Dl06JCxxkFERERkEha35ufGjRuYNGkSPDw84OzsjB49euCnn35SvS8IAhISEuDr6wuZTIbQ0FCcP3++GUdMRERE5kTnE57runDhAq5evYrKykq19pEjRxradT2FhYXo378/hgwZgv/85z/w8vLClStX8NBDD6muSU5ORkpKCjZv3oyOHTti2bJlUCgUuHTpEtzc3EQfExEREVkWvcPPb7/9hjFjxuDs2bOQSCQQBAHA/633qaqqEmeEtaxYsQJ+fn5qj9ho37696veCIGD16tVYtGgRxo4dCwBIT0+Ht7c3MjIyMHPmTNHHRERERJZF79tec+fORUBAAG7dugVnZ2ecP38e3377Lfr06YPDhw+LOMT/s3v3bvTp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\",\n      \"text/plain\": [\n       \"<Figure size 640x480 with 1 Axes>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    }\n   ],\n   \"source\": [\n    \"fig = plt.figure()\\n\",\n    \"cond = (eigs_r>-25) * (eigs_r<10) # filter unwanted eigenvalues for this plot (mostly aero modes)\\n\",\n    \"plt.scatter(u_inf[cond], natural_frequency[cond], color='k', marker='s', s=9)\\n\",\n    \"\\n\",\n    \"plt.grid()\\n\",\n    \"plt.ylim(40, 100)\\n\",\n    \"plt.xlabel('Free Stream Velocity, $u_\\\\infty$ [m/s]')\\n\",\n    \"plt.ylabel('Natural Frequency, $\\\\omega_n$ [rad/s]');\"\n   ]\n  }\n ],\n \"metadata\": {\n  \"kernelspec\": {\n   \"display_name\": \"Python 3 (ipykernel)\",\n   \"language\": \"python\",\n   \"name\": \"python3\"\n  },\n  \"language_info\": {\n   \"codemirror_mode\": {\n    \"name\": \"ipython\",\n    \"version\": 3\n   },\n   \"file_extension\": \".py\",\n   \"mimetype\": \"text/x-python\",\n   \"name\": \"python\",\n   \"nbconvert_exporter\": \"python\",\n   \"pygments_lexer\": \"ipython3\",\n   \"version\": \"3.10.11\"\n  }\n },\n \"nbformat\": 4,\n \"nbformat_minor\": 4\n}\n"
  },
  {
    "path": "docs/source/content/example_notebooks/linear_horten.ipynb",
    "content": "{\n\t\"cells\": [\n\t\t{\n\t\t\t\"cell_type\": \"markdown\",\n\t\t\t\"metadata\": {},\n\t\t\t\"source\": [\n\t\t\t\t\"# Asymptotic Stability of a Flying Wing in Cruise Trimmed Conditions\\n\",\n\t\t\t\t\"\\n\",\n\t\t\t\t\"A Horten flying wing is analysed. The nonlinear trim condition is found and the system is linearised. The eigenvalues of the linearised system are then used to evaluate the stability at the cruise trimmed flight conditions.\"\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\t\"cell_type\": \"code\",\n\t\t\t\"execution_count\": 1,\n\t\t\t\"metadata\": {},\n\t\t\t\"outputs\": [],\n\t\t\t\"source\": [\n\t\t\t\t\"# required packages\\n\",\n\t\t\t\t\"import sharpy.utils.algebra as algebra\\n\",\n\t\t\t\t\"import sharpy.sharpy_main\\n\",\n\t\t\t\t\"from sharpy.cases.hangar.richards_wing import Baseline\\n\",\n\t\t\t\t\"import numpy as np\\n\",\n\t\t\t\t\"import configobj\\n\",\n\t\t\t\t\"import matplotlib.pyplot as plt\"\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\t\"cell_type\": \"markdown\",\n\t\t\t\"metadata\": {},\n\t\t\t\"source\": [\n\t\t\t\t\"## Flight Conditions\\n\",\n\t\t\t\t\"\\n\",\n\t\t\t\t\"Initial flight conditions. The values for angle of attack ``alpha``, control surface deflection ``cs_deflection`` and ``thrust`` are only initial values. The values required for trim will be calculated by the ``StaticTrim`` routine\"\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\t\"cell_type\": \"code\",\n\t\t\t\"execution_count\": 2,\n\t\t\t\"metadata\": {},\n\t\t\t\"outputs\": [],\n\t\t\t\"source\": [\n\t\t\t\t\"u_inf = 28\\n\",\n\t\t\t\t\"alpha_deg = 4.5135\\n\",\n\t\t\t\t\"cs_deflection = 0.1814\\n\",\n\t\t\t\t\"thrust = 5.5129\"\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\t\"cell_type\": \"markdown\",\n\t\t\t\"metadata\": {},\n\t\t\t\"source\": [\n\t\t\t\t\"## Discretisation\"\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\t\"cell_type\": \"code\",\n\t\t\t\"execution_count\": 3,\n\t\t\t\"metadata\": {},\n\t\t\t\"outputs\": [],\n\t\t\t\"source\": [\n\t\t\t\t\"M = 4  # chordwise panels\\n\",\n\t\t\t\t\"N = 11  # spanwise panels\\n\",\n\t\t\t\t\"Msf = 5  # wake length in chord numbers\"\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\t\"cell_type\": \"markdown\",\n\t\t\t\"metadata\": {},\n\t\t\t\"source\": [\n\t\t\t\t\"## Create Horten Wing\"\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\t\"cell_type\": \"code\",\n\t\t\t\"execution_count\": 4,\n\t\t\t\"metadata\": {},\n\t\t\t\"outputs\": [\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"stdout\",\n\t\t\t\t\t\"output_type\": \"stream\",\n\t\t\t\t\t\"text\": [\n\t\t\t\t\t\t\"0\\n\",\n\t\t\t\t\t\t\"Section Mass: 11.88 \\n\",\n\t\t\t\t\t\t\"Linear Mass: 11.88\\n\",\n\t\t\t\t\t\t\"Section Ixx: 1.8777\\n\",\n\t\t\t\t\t\t\"Section Iyy: 1.0137\\n\",\n\t\t\t\t\t\t\"Section Izz: 2.5496\\n\",\n\t\t\t\t\t\t\"Linear Ixx: 1.88\\n\",\n\t\t\t\t\t\t\"1\\n\",\n\t\t\t\t\t\t\"Section Mass: 10.99 \\n\",\n\t\t\t\t\t\t\"Linear Mass: 10.99\\n\",\n\t\t\t\t\t\t\"Section Ixx: 1.4694\\n\",\n\t\t\t\t\t\t\"Section Iyy: 0.9345\\n\",\n\t\t\t\t\t\t\"Section Izz: 2.1501\\n\",\n\t\t\t\t\t\t\"Linear Ixx: 1.74\\n\",\n\t\t\t\t\t\t\"2\\n\",\n\t\t\t\t\t\t\"Section Mass: 10.10 \\n\",\n\t\t\t\t\t\t\"Linear Mass: 10.10\\n\",\n\t\t\t\t\t\t\"Section Ixx: 1.1257\\n\",\n\t\t\t\t\t\t\"Section Iyy: 0.8561\\n\",\n\t\t\t\t\t\t\"Section Izz: 1.7993\\n\",\n\t\t\t\t\t\t\"Linear Ixx: 1.60\\n\",\n\t\t\t\t\t\t\"3\\n\",\n\t\t\t\t\t\t\"Section Mass: 9.21 \\n\",\n\t\t\t\t\t\t\"Linear Mass: 9.21\\n\",\n\t\t\t\t\t\t\"Section Ixx: 0.8410\\n\",\n\t\t\t\t\t\t\"Section Iyy: 0.7783\\n\",\n\t\t\t\t\t\t\"Section Izz: 1.4933\\n\",\n\t\t\t\t\t\t\"Linear Ixx: 1.46\\n\",\n\t\t\t\t\t\t\"4\\n\",\n\t\t\t\t\t\t\"Section Mass: 8.32 \\n\",\n\t\t\t\t\t\t\"Linear Mass: 8.32\\n\",\n\t\t\t\t\t\t\"Section Ixx: 0.6096\\n\",\n\t\t\t\t\t\t\"Section Iyy: 0.7011\\n\",\n\t\t\t\t\t\t\"Section Izz: 1.2280\\n\",\n\t\t\t\t\t\t\"Linear Ixx: 1.31\\n\",\n\t\t\t\t\t\t\"5\\n\",\n\t\t\t\t\t\t\"Section Mass: 7.43 \\n\",\n\t\t\t\t\t\t\"Linear Mass: 7.43\\n\",\n\t\t\t\t\t\t\"Section Ixx: 0.4260\\n\",\n\t\t\t\t\t\t\"Section Iyy: 0.6246\\n\",\n\t\t\t\t\t\t\"Section Izz: 0.9996\\n\",\n\t\t\t\t\t\t\"Linear Ixx: 1.17\\n\",\n\t\t\t\t\t\t\"6\\n\",\n\t\t\t\t\t\t\"Section Mass: 6.54 \\n\",\n\t\t\t\t\t\t\"Linear Mass: 6.54\\n\",\n\t\t\t\t\t\t\"Section Ixx: 0.2845\\n\",\n\t\t\t\t\t\t\"Section Iyy: 0.5485\\n\",\n\t\t\t\t\t\t\"Section Izz: 0.8040\\n\",\n\t\t\t\t\t\t\"Linear Ixx: 1.03\\n\",\n\t\t\t\t\t\t\"7\\n\",\n\t\t\t\t\t\t\"Section Mass: 5.64 \\n\",\n\t\t\t\t\t\t\"Linear Mass: 5.64\\n\",\n\t\t\t\t\t\t\"Section Ixx: 0.1796\\n\",\n\t\t\t\t\t\t\"Section Iyy: 0.4728\\n\",\n\t\t\t\t\t\t\"Section Izz: 0.6374\\n\",\n\t\t\t\t\t\t\"Linear Ixx: 0.89\\n\",\n\t\t\t\t\t\t\"8\\n\",\n\t\t\t\t\t\t\"Section Mass: 4.75 \\n\",\n\t\t\t\t\t\t\"Linear Mass: 4.75\\n\",\n\t\t\t\t\t\t\"Section Ixx: 0.1055\\n\",\n\t\t\t\t\t\t\"Section Iyy: 0.3975\\n\",\n\t\t\t\t\t\t\"Section Izz: 0.4959\\n\",\n\t\t\t\t\t\t\"Linear Ixx: 0.75\\n\",\n\t\t\t\t\t\t\"9\\n\",\n\t\t\t\t\t\t\"Section Mass: 3.86 \\n\",\n\t\t\t\t\t\t\"Linear Mass: 3.86\\n\",\n\t\t\t\t\t\t\"Section Ixx: 0.0567\\n\",\n\t\t\t\t\t\t\"Section Iyy: 0.3226\\n\",\n\t\t\t\t\t\t\"Section Izz: 0.3753\\n\",\n\t\t\t\t\t\t\"Linear Ixx: 0.61\\n\",\n\t\t\t\t\t\t\"10\\n\",\n\t\t\t\t\t\t\"Section Mass: 2.97 \\n\",\n\t\t\t\t\t\t\"Linear Mass: 2.97\\n\",\n\t\t\t\t\t\t\"Section Ixx: 0.0275\\n\",\n\t\t\t\t\t\t\"Section Iyy: 0.2479\\n\",\n\t\t\t\t\t\t\"Section Izz: 0.2719\\n\",\n\t\t\t\t\t\t\"Linear Ixx: 0.47\\n\"\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t],\n\t\t\t\"source\": [\n\t\t\t\t\"ws = Baseline(M=M,\\n\",\n\t\t\t\t\"              N=N,\\n\",\n\t\t\t\t\"              Mstarfactor=Msf,\\n\",\n\t\t\t\t\"              u_inf=u_inf,\\n\",\n\t\t\t\t\"              rho=1.02,\\n\",\n\t\t\t\t\"              alpha_deg=alpha_deg,\\n\",\n\t\t\t\t\"              roll_deg=0,\\n\",\n\t\t\t\t\"              cs_deflection_deg=cs_deflection,\\n\",\n\t\t\t\t\"              thrust=thrust,\\n\",\n\t\t\t\t\"              physical_time=20,\\n\",\n\t\t\t\t\"              case_name='horten',\\n\",\n\t\t\t\t\"              case_name_format=4,\\n\",\n\t\t\t\t\"              case_remarks='M%gN%gMsf%g' % (M, N, Msf))\\n\",\n\t\t\t\t\"\\n\",\n\t\t\t\t\"ws.set_properties()\\n\",\n\t\t\t\t\"ws.initialise()\\n\",\n\t\t\t\t\"ws.clean_test_files()\\n\",\n\t\t\t\t\"\\n\",\n\t\t\t\t\"ws.update_mass_stiffness(sigma=1., sigma_mass=2.5)\\n\",\n\t\t\t\t\"ws.update_fem_prop()\\n\",\n\t\t\t\t\"ws.generate_fem_file()\\n\",\n\t\t\t\t\"ws.update_aero_properties()\\n\",\n\t\t\t\t\"ws.generate_aero_file()\"\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\t\"cell_type\": \"markdown\",\n\t\t\t\"metadata\": {},\n\t\t\t\"source\": [\n\t\t\t\t\"## Simulation Information\\n\",\n\t\t\t\t\"\\n\",\n\t\t\t\t\"The ``flow`` setting tells SHARPy which solvers to run and in which order. You may be stranged by the presence of the ``DynamicCoupled`` solver but it is necessary to give an initial speed to the structure. This will allow proper linearisation of the structural and rigid body equations.\"\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\t\"cell_type\": \"code\",\n\t\t\t\"execution_count\": 5,\n\t\t\t\"metadata\": {},\n\t\t\t\"outputs\": [],\n\t\t\t\"source\": [\n\t\t\t\t\"flow = ['BeamLoader',\\n\",\n\t\t\t\t\"        'AerogridLoader',\\n\",\n\t\t\t\t\"        'StaticTrim',\\n\",\n\t\t\t\t\"        'BeamPlot',\\n\",\n\t\t\t\t\"        'AerogridPlot',\\n\",\n\t\t\t\t\"        'AeroForcesCalculator',\\n\",\n\t\t\t\t\"        'DynamicCoupled',\\n\",\n\t\t\t\t\"        'Modal',\\n\",\n\t\t\t\t\"        'LinearAssembler',\\n\",\n\t\t\t\t\"        'AsymptoticStability',\\n\",\n\t\t\t\t\"        ]\"\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\t\"cell_type\": \"markdown\",\n\t\t\t\"metadata\": {},\n\t\t\t\"source\": [\n\t\t\t\t\"### SHARPy Settings\"\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\t\"cell_type\": \"code\",\n\t\t\t\"execution_count\": 6,\n\t\t\t\"metadata\": {},\n\t\t\t\"outputs\": [],\n\t\t\t\"source\": [\n\t\t\t\t\"settings = dict()\\n\",\n\t\t\t\t\"settings['SHARPy'] = {'case': ws.case_name,\\n\",\n\t\t\t\t\"                      'route': ws.case_route,\\n\",\n\t\t\t\t\"                      'flow': flow,\\n\",\n\t\t\t\t\"                      'write_screen': 'on',\\n\",\n\t\t\t\t\"                      'write_log': 'on',\\n\",\n\t\t\t\t\"                      'log_folder': './output/',\\n\",\n\t\t\t\t\"                      'log_file': ws.case_name + '.log'}\\n\",\n\t\t\t\t\"\\n\"\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\t\"cell_type\": \"markdown\",\n\t\t\t\"metadata\": {},\n\t\t\t\"source\": [\n\t\t\t\t\"### Loaders\"\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\t\"cell_type\": \"code\",\n\t\t\t\"execution_count\": 7,\n\t\t\t\"metadata\": {},\n\t\t\t\"outputs\": [],\n\t\t\t\"source\": [\n\t\t\t\t\"settings['BeamLoader'] = {'unsteady': 'off',\\n\",\n\t\t\t\t\"                          'orientation': algebra.euler2quat(np.array([ws.roll,\\n\",\n\t\t\t\t\"                                                                      ws.alpha,\\n\",\n\t\t\t\t\"                                                                      ws.beta]))}\\n\",\n\t\t\t\t\"settings['AerogridLoader'] = {'unsteady': 'off',\\n\",\n\t\t\t\t\"                              'aligned_grid': 'on',\\n\",\n\t\t\t\t\"                              'mstar': int(ws.M * ws.Mstarfactor),\\n\",\n\t\t\t\t\"                              'freestream_dir': ['1', '0', '0'],\\n\",\n\t\t\t\t\"                              'control_surface_deflection': [''],\\n\",\n\t\t\t\t\"                              'wake_shape_generator': 'StraightWake',\\n\",\n\t\t\t\t\"                              'wake_shape_generator_input': {'u_inf': ws.u_inf,\\n\",\n\t\t\t\t\"                                    'u_inf_direction': ['1', '0', '0'],\\n\",\n\t\t\t\t\"                                    'dt': ws.dt}}\"\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\t\"cell_type\": \"markdown\",\n\t\t\t\"metadata\": {},\n\t\t\t\"source\": [\n\t\t\t\t\"### StaticCoupled Solver\"\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\t\"cell_type\": \"code\",\n\t\t\t\"execution_count\": 8,\n\t\t\t\"metadata\": {},\n\t\t\t\"outputs\": [],\n\t\t\t\"source\": [\n\t\t\t\t\"settings['StaticCoupled'] = {'print_info': 'on',\\n\",\n\t\t\t\t\"                             'structural_solver': 'NonLinearStatic',\\n\",\n\t\t\t\t\"                             'structural_solver_settings': {'print_info': 'off',\\n\",\n\t\t\t\t\"                                                            'max_iterations': 200,\\n\",\n\t\t\t\t\"                                                            'num_load_steps': 1,\\n\",\n\t\t\t\t\"                                                            'delta_curved': 1e-5,\\n\",\n\t\t\t\t\"                                                            'min_delta': ws.tolerance,\\n\",\n\t\t\t\t\"                                                            'gravity_on': 'on',\\n\",\n\t\t\t\t\"                                                            'gravity': 9.81},\\n\",\n\t\t\t\t\"                             'aero_solver': 'StaticUvlm',\\n\",\n\t\t\t\t\"                             'aero_solver_settings': {'print_info': 'on',\\n\",\n\t\t\t\t\"                                                      'horseshoe': ws.horseshoe,\\n\",\n\t\t\t\t\"                                                      'num_cores': 4,\\n\",\n\t\t\t\t\"                                                      'n_rollup': int(0),\\n\",\n\t\t\t\t\"                                                      'rollup_dt': ws.dt,\\n\",\n\t\t\t\t\"                                                      'rollup_aic_refresh': 1,\\n\",\n\t\t\t\t\"                                                      'rollup_tolerance': 1e-4,\\n\",\n\t\t\t\t\"                                                      'velocity_field_generator': 'SteadyVelocityField',\\n\",\n\t\t\t\t\"                                                      'velocity_field_input': {'u_inf': ws.u_inf,\\n\",\n\t\t\t\t\"                                                                               'u_inf_direction': [1., 0, 0]},\\n\",\n\t\t\t\t\"                                                      'rho': ws.rho},\\n\",\n\t\t\t\t\"                             'max_iter': 200,\\n\",\n\t\t\t\t\"                             'n_load_steps': 1,\\n\",\n\t\t\t\t\"                             'tolerance': ws.tolerance,\\n\",\n\t\t\t\t\"                             'relaxation_factor': 0.2}\"\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\t\"cell_type\": \"markdown\",\n\t\t\t\"metadata\": {},\n\t\t\t\"source\": [\n\t\t\t\t\"### Trim solver\"\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\t\"cell_type\": \"code\",\n\t\t\t\"execution_count\": 9,\n\t\t\t\"metadata\": {},\n\t\t\t\"outputs\": [],\n\t\t\t\"source\": [\n\t\t\t\t\"settings['StaticTrim'] = {'solver': 'StaticCoupled',\\n\",\n\t\t\t\t\"                          'solver_settings': settings['StaticCoupled'],\\n\",\n\t\t\t\t\"                          'thrust_nodes': ws.thrust_nodes,\\n\",\n\t\t\t\t\"                          'initial_alpha': ws.alpha,\\n\",\n\t\t\t\t\"                          'initial_deflection': ws.cs_deflection,\\n\",\n\t\t\t\t\"                          'initial_thrust': ws.thrust,\\n\",\n\t\t\t\t\"                          'max_iter': 200,\\n\",\n\t\t\t\t\"                          'fz_tolerance': 1e-2,\\n\",\n\t\t\t\t\"                          'fx_tolerance': 1e-2,\\n\",\n\t\t\t\t\"                          'm_tolerance': 1e-2}\"\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\t\"cell_type\": \"markdown\",\n\t\t\t\"metadata\": {},\n\t\t\t\"source\": [\n\t\t\t\t\"### Nonlinear Equilibrium Post-process\"\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\t\"cell_type\": \"code\",\n\t\t\t\"execution_count\": 10,\n\t\t\t\"metadata\": {},\n\t\t\t\"outputs\": [],\n\t\t\t\"source\": [\n\t\t\t\t\"settings['AerogridPlot'] = {\\n\",\n\t\t\t\t\"                            'include_rbm': 'off',\\n\",\n\t\t\t\t\"                            'include_applied_forces': 'on',\\n\",\n\t\t\t\t\"                            'minus_m_star': 0,\\n\",\n\t\t\t\t\"                            'u_inf': ws.u_inf\\n\",\n\t\t\t\t\"                            }\\n\",\n\t\t\t\t\"settings['AeroForcesCalculator'] = {\\n\",\n\t\t\t\t\"                                    'write_text_file': 'off',\\n\",\n\t\t\t\t\"                                    'text_file_name': ws.case_name + '_aeroforces.csv',\\n\",\n\t\t\t\t\"                                    'screen_output': 'on',\\n\",\n\t\t\t\t\"                                    'coefficients': True,\\n\",\n\t\t\t\t\"                                    'q_ref': 0.5 * ws.rho * ws.u_inf ** 2,\\n\",\n\t\t\t\t\"                                    'S_ref': 12.809,\\n\",\n\t\t\t\t\"                                    }\\n\",\n\t\t\t\t\"\\n\",\n\t\t\t\t\"settings['BeamPlot'] = {\\n\",\n\t\t\t\t\"                        'include_rbm': 'on',\\n\",\n\t\t\t\t\"                        'include_applied_forces': 'on',\\n\",\n\t\t\t\t\"                        'include_FoR': 'on'}\"\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\t\"cell_type\": \"markdown\",\n\t\t\t\"metadata\": {},\n\t\t\t\"source\": [\n\t\t\t\t\"### DynamicCoupled Solver\\n\",\n\t\t\t\t\"\\n\",\n\t\t\t\t\"As mentioned before, a single time step of ``DynamicCoupled`` is required to give the structure the velocity required for the linearisation of the rigid body equations to be correct. Hence `n_time_steps = 1`\"\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\t\"cell_type\": \"code\",\n\t\t\t\"execution_count\": 11,\n\t\t\t\"metadata\": {},\n\t\t\t\"outputs\": [],\n\t\t\t\"source\": [\n\t\t\t\t\"struct_solver_settings = {'print_info': 'off',\\n\",\n\t\t\t\t\"                          'initial_velocity_direction': [-1., 0., 0.],\\n\",\n\t\t\t\t\"                          'max_iterations': 950,\\n\",\n\t\t\t\t\"                          'delta_curved': 1e-6,\\n\",\n\t\t\t\t\"                          'min_delta': ws.tolerance,\\n\",\n\t\t\t\t\"                          'newmark_damp': 5e-3,\\n\",\n\t\t\t\t\"                          'gravity_on': True,\\n\",\n\t\t\t\t\"                          'gravity': 9.81,\\n\",\n\t\t\t\t\"                          'num_steps': ws.n_tstep,\\n\",\n\t\t\t\t\"                          'dt': ws.dt,\\n\",\n\t\t\t\t\"                          'initial_velocity': ws.u_inf * 1}\\n\",\n\t\t\t\t\"\\n\",\n\t\t\t\t\"step_uvlm_settings = {'print_info': 'on',\\n\",\n\t\t\t\t\"                      'num_cores': 4,\\n\",\n\t\t\t\t\"                      'convection_scheme': ws.wake_type,\\n\",\n\t\t\t\t\"                      'velocity_field_generator': 'SteadyVelocityField',\\n\",\n\t\t\t\t\"                      'velocity_field_input': {'u_inf': ws.u_inf * 0,\\n\",\n\t\t\t\t\"                                               'u_inf_direction': [1., 0., 0.]},\\n\",\n\t\t\t\t\"                      'rho': ws.rho,\\n\",\n\t\t\t\t\"                      'n_time_steps': ws.n_tstep,\\n\",\n\t\t\t\t\"                      'dt': ws.dt,\\n\",\n\t\t\t\t\"                      'gamma_dot_filtering': 3}\\n\",\n\t\t\t\t\"\\n\",\n\t\t\t\t\"settings['DynamicCoupled'] = {'print_info': 'on',\\n\",\n\t\t\t\t\"                              'structural_solver': 'NonLinearDynamicCoupledStep',\\n\",\n\t\t\t\t\"                              'structural_solver_settings': struct_solver_settings,\\n\",\n\t\t\t\t\"                              'aero_solver': 'StepUvlm',\\n\",\n\t\t\t\t\"                              'aero_solver_settings': step_uvlm_settings,\\n\",\n\t\t\t\t\"                              'fsi_substeps': 200,\\n\",\n\t\t\t\t\"                              'fsi_tolerance': ws.fsi_tolerance,\\n\",\n\t\t\t\t\"                              'relaxation_factor': ws.relaxation_factor,\\n\",\n\t\t\t\t\"                              'minimum_steps': 1,\\n\",\n\t\t\t\t\"                              'relaxation_steps': 150,\\n\",\n\t\t\t\t\"                              'final_relaxation_factor': 0.5,\\n\",\n\t\t\t\t\"                              'n_time_steps': 1,\\n\",\n\t\t\t\t\"                              'dt': ws.dt,\\n\",\n\t\t\t\t\"                              'include_unsteady_force_contribution': 'off',\\n\",\n\t\t\t\t\"                                                          }\"\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\t\"cell_type\": \"markdown\",\n\t\t\t\"metadata\": {},\n\t\t\t\"source\": [\n\t\t\t\t\"### Modal Solver Settings\"\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\t\"cell_type\": \"code\",\n\t\t\t\"execution_count\": 12,\n\t\t\t\"metadata\": {},\n\t\t\t\"outputs\": [],\n\t\t\t\"source\": [\n\t\t\t\t\"settings['Modal'] = {'print_info': True,\\n\",\n\t\t\t\t\"                     'use_undamped_modes': True,\\n\",\n\t\t\t\t\"                     'NumLambda': 30,\\n\",\n\t\t\t\t\"                     'rigid_body_modes': True,\\n\",\n\t\t\t\t\"                     'write_modes_vtk': 'on',\\n\",\n\t\t\t\t\"                     'continuous_eigenvalues': 'off',\\n\",\n\t\t\t\t\"                     'dt': ws.dt,\\n\",\n\t\t\t\t\"                     'plot_eigenvalues': False,\\n\",\n\t\t\t\t\"                     'rigid_modes_cg': False}\"\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\t\"cell_type\": \"markdown\",\n\t\t\t\"metadata\": {},\n\t\t\t\"source\": [\n\t\t\t\t\"### Linear Assembler Settings\\n\",\n\t\t\t\t\"\\n\",\n\t\t\t\t\"Note that for the assembly of the linear system, we replace the parametrisation of the orientation with Euler angles instead of quaternions.\"\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\t\"cell_type\": \"code\",\n\t\t\t\"execution_count\": 13,\n\t\t\t\"metadata\": {},\n\t\t\t\"outputs\": [],\n\t\t\t\"source\": [\n\t\t\t\t\"settings['LinearAssembler'] = {'linear_system': 'LinearAeroelastic',\\n\",\n\t\t\t\t\"                               'linear_system_settings': {\\n\",\n\t\t\t\t\"                                   'beam_settings': {'modal_projection': 'off',\\n\",\n\t\t\t\t\"                                                     'inout_coords': 'modes',\\n\",\n\t\t\t\t\"                                                     'discrete_time': True,\\n\",\n\t\t\t\t\"                                                     'newmark_damp': 0.5e-2,\\n\",\n\t\t\t\t\"                                                     'discr_method': 'newmark',\\n\",\n\t\t\t\t\"                                                     'dt': ws.dt,\\n\",\n\t\t\t\t\"                                                     'proj_modes': 'undamped',\\n\",\n\t\t\t\t\"                                                     'num_modes': 9,\\n\",\n\t\t\t\t\"                                                     'print_info': 'on',\\n\",\n\t\t\t\t\"                                                     'gravity': 'on',\\n\",\n\t\t\t\t\"                                                     'remove_dofs': []},\\n\",\n\t\t\t\t\"                                   'aero_settings': {'dt': ws.dt,\\n\",\n\t\t\t\t\"                                                     'integr_order': 2,\\n\",\n\t\t\t\t\"                                                     'density': ws.rho,\\n\",\n\t\t\t\t\"                                                     'remove_predictor': 'off',\\n\",\n\t\t\t\t\"                                                     'use_sparse': 'off',\\n\",\n\t\t\t\t\"                                                     'remove_inputs': ['u_gust']},\\n\",\n\t\t\t\t\"                                   'track_body': 'on',\\n\",\n\t\t\t\t\"                                   'use_euler': 'on',\\n\",\n\t\t\t\t\"                                }}\"\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\t\"cell_type\": \"markdown\",\n\t\t\t\"metadata\": {},\n\t\t\t\"source\": [\n\t\t\t\t\"### Asymptotic Stability Post-processor\"\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\t\"cell_type\": \"code\",\n\t\t\t\"execution_count\": 14,\n\t\t\t\"metadata\": {},\n\t\t\t\"outputs\": [],\n\t\t\t\"source\": [\n\t\t\t\t\"settings['AsymptoticStability'] = {\\n\",\n\t\t\t\t\"                                    'print_info': 'on',\\n\",\n\t\t\t\t\"                                    'frequency_cutoff': 0,\\n\",\n\t\t\t\t\"                                    'export_eigenvalues': 'on',\\n\",\n\t\t\t\t\"                                    'num_evals': 100,\\n\",\n\t\t\t\t\"                                    }\"\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\t\"cell_type\": \"markdown\",\n\t\t\t\"metadata\": {},\n\t\t\t\"source\": [\n\t\t\t\t\"### Write solver file\"\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\t\"cell_type\": \"code\",\n\t\t\t\"execution_count\": 15,\n\t\t\t\"metadata\": {},\n\t\t\t\"outputs\": [],\n\t\t\t\"source\": [\n\t\t\t\t\"config = configobj.ConfigObj()\\n\",\n\t\t\t\t\"np.set_printoptions(precision=16)\\n\",\n\t\t\t\t\"file_name = ws.case_route + '/' + ws.case_name + '.sharpy'\\n\",\n\t\t\t\t\"config.filename = file_name\\n\",\n\t\t\t\t\"for k, v in settings.items():\\n\",\n\t\t\t\t\"    config[k] = v\\n\",\n\t\t\t\t\"config.write()\"\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\t\"cell_type\": \"markdown\",\n\t\t\t\"metadata\": {},\n\t\t\t\"source\": [\n\t\t\t\t\"## Run Simulation\"\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\t\"cell_type\": \"code\",\n\t\t\t\"execution_count\": 16,\n\t\t\t\"metadata\": {},\n\t\t\t\"outputs\": [\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"stdout\",\n\t\t\t\t\t\"output_type\": \"stream\",\n\t\t\t\t\t\"text\": [\n\t\t\t\t\t\t\"--------------------------------------------------------------------------------\\u001b[0m\\n\",\n\t\t\t\t\t\t\"            ######  ##     ##    ###    ########  ########  ##    ##\\u001b[0m\\n\",\n\t\t\t\t\t\t\"           ##    ## ##     ##   ## ##   ##     ## ##     ##  ##  ##\\u001b[0m\\n\",\n\t\t\t\t\t\t\"           ##       ##     ##  ##   ##  ##     ## ##     ##   ####\\u001b[0m\\n\",\n\t\t\t\t\t\t\"            ######  ######### ##     ## ########  ########     ##\\u001b[0m\\n\",\n\t\t\t\t\t\t\"                 ## ##     ## ######### ##   ##   ##           ##\\u001b[0m\\n\",\n\t\t\t\t\t\t\"           ##    ## ##     ## ##     ## ##    ##  ##           ##\\u001b[0m\\n\",\n\t\t\t\t\t\t\"            ######  ##     ## ##     ## ##     ## ##           ##\\u001b[0m\\n\",\n\t\t\t\t\t\t\"--------------------------------------------------------------------------------\\u001b[0m\\n\",\n\t\t\t\t\t\t\"Aeroelastics Lab, Aeronautics Department.\\u001b[0m\\n\",\n\t\t\t\t\t\t\"    Copyright (c), Imperial College London.\\u001b[0m\\n\",\n\t\t\t\t\t\t\"    All rights reserved.\\u001b[0m\\n\",\n\t\t\t\t\t\t\"    License available at https://github.com/imperialcollegelondon/sharpy\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[36mRunning SHARPy from /home/ng213/2TB/pazy_code/pazy-sharpy/lib/sharpy/docs/source/content/example_notebooks\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[36mSHARPy being run is in /home/ng213/2TB/pazy_code/pazy-sharpy/lib/sharpy\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[36mThe branch being run is dev_setting_error\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[36mThe version and commit hash are: v1.2.1-344-g0239644-0239644\\u001b[0m\\n\",\n\t\t\t\t\t\t\"SHARPy output folder set\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[34m\\t./output//horten_u_inf2800_M4N11Msf5/\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[36mGenerating an instance of BeamLoader\\u001b[0m\\n\",\n\t\t\t\t\t\t\"Variable for_pos has no assigned value in the settings file.\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[34m    will default to the value: [0.0, 0, 0]\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[36mGenerating an instance of AerogridLoader\\u001b[0m\\n\",\n\t\t\t\t\t\t\"Variable control_surface_deflection_generator_settings has no assigned value in the settings file.\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[34m    will default to the value: {}\\u001b[0m\\n\",\n\t\t\t\t\t\t\"Variable dx1 has no assigned value in the settings file.\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[34m    will default to the value: -1.0\\u001b[0m\\n\",\n\t\t\t\t\t\t\"Variable ndx1 has no assigned value in the settings file.\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[34m    will default to the value: 1\\u001b[0m\\n\",\n\t\t\t\t\t\t\"Variable r has no assigned value in the settings file.\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[34m    will default to the value: 1.0\\u001b[0m\\n\",\n\t\t\t\t\t\t\"Variable dxmax has no assigned value in the settings file.\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[34m    will default to the value: -1.0\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[34mThe aerodynamic grid contains 4 surfaces\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[34m  Surface 0, M=4, N=2\\u001b[0m\\n\",\n\t\t\t\t\t\t\"     Wake 0, M=20, N=2\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[34m  Surface 1, M=4, N=22\\u001b[0m\\n\",\n\t\t\t\t\t\t\"     Wake 1, M=20, N=22\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[34m  Surface 2, M=4, N=2\\u001b[0m\\n\",\n\t\t\t\t\t\t\"     Wake 2, M=20, N=2\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[34m  Surface 3, M=4, N=22\\u001b[0m\\n\",\n\t\t\t\t\t\t\"     Wake 3, M=20, N=22\\u001b[0m\\n\",\n\t\t\t\t\t\t\"  In total: 192 bound panels\\u001b[0m\\n\",\n\t\t\t\t\t\t\"  In total: 960 wake panels\\u001b[0m\\n\",\n\t\t\t\t\t\t\"  Total number of panels = 1152\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[36mGenerating an instance of StaticTrim\\u001b[0m\\n\",\n\t\t\t\t\t\t\"Variable print_info has no assigned value in the settings file.\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[34m    will default to the value: True\\u001b[0m\\n\",\n\t\t\t\t\t\t\"Variable tail_cs_index has no assigned value in the settings file.\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[34m    will default to the value: 0\\u001b[0m\\n\",\n\t\t\t\t\t\t\"Variable initial_angle_eps has no assigned value in the settings file.\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[34m    will default to the value: 0.05\\u001b[0m\\n\",\n\t\t\t\t\t\t\"Variable initial_thrust_eps has no assigned value in the settings file.\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[34m    will default to the value: 2.0\\u001b[0m\\n\",\n\t\t\t\t\t\t\"Variable relaxation_factor has no assigned value in the settings file.\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[34m    will default to the value: 0.2\\u001b[0m\\n\",\n\t\t\t\t\t\t\"Variable save_info has no assigned value in the settings file.\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[34m    will default to the value: False\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[36mGenerating an instance of StaticCoupled\\u001b[0m\\n\",\n\t\t\t\t\t\t\"Variable correct_forces_method has no assigned value in the settings file.\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[34m    will default to the value: \\u001b[0m\\n\",\n\t\t\t\t\t\t\"Variable runtime_generators has no assigned value in the settings file.\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[34m    will default to the value: {}\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[36mGenerating an instance of NonLinearStatic\\u001b[0m\\n\",\n\t\t\t\t\t\t\"Variable newmark_damp has no assigned value in the settings file.\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[34m    will default to the value: 0.0001\\u001b[0m\\n\",\n\t\t\t\t\t\t\"Variable gravity_dir has no assigned value in the settings file.\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[34m    will default to the value: [0.0, 0.0, 1.0]\\u001b[0m\\n\",\n\t\t\t\t\t\t\"Variable relaxation_factor has no assigned value in the settings file.\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[34m    will default to the value: 0.3\\u001b[0m\\n\",\n\t\t\t\t\t\t\"Variable dt has no assigned value in the settings file.\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[34m    will default to the value: 0.01\\u001b[0m\\n\",\n\t\t\t\t\t\t\"Variable num_steps has no assigned value in the settings file.\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[34m    will default to the value: 500\\u001b[0m\\n\",\n\t\t\t\t\t\t\"Variable initial_position has no assigned value in the settings file.\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[34m    will default to the value: [0. 0. 0.]\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[36mGenerating an instance of StaticUvlm\\u001b[0m\\n\",\n\t\t\t\t\t\t\"Variable iterative_solver has no assigned value in the settings file.\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[34m    will default to the value: False\\u001b[0m\\n\",\n\t\t\t\t\t\t\"Variable iterative_tol has no assigned value in the settings file.\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[34m    will default to the value: 0.0001\\u001b[0m\\n\",\n\t\t\t\t\t\t\"Variable iterative_precond has no assigned value in the settings file.\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[34m    will default to the value: False\\u001b[0m\\n\",\n\t\t\t\t\t\t\"Variable cfl1 has no assigned value in the settings file.\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[34m    will default to the value: True\\u001b[0m\\n\",\n\t\t\t\t\t\t\"Variable vortex_radius has no assigned value in the settings file.\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[34m    will default to the value: 1e-06\\u001b[0m\\n\",\n\t\t\t\t\t\t\"Variable vortex_radius_wake_ind has no assigned value in the settings file.\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[34m    will default to the value: 1e-06\\u001b[0m\\n\",\n\t\t\t\t\t\t\"Variable rbm_vel_g has no assigned value in the settings file.\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[34m    will default to the value: [0.0, 0.0, 0.0, 0.0, 0.0, 0.0]\\u001b[0m\\n\",\n\t\t\t\t\t\t\"Variable centre_rot_g has no assigned value in the settings file.\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[34m    will default to the value: [0.0, 0.0, 0.0]\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[0m\\n\",\n\t\t\t\t\t\t\"|=====|=====|============|==========|==========|==========|==========|==========|==========|\\u001b[0m\\n\",\n\t\t\t\t\t\t\"|iter |step | log10(res) |    Fx    |    Fy    |    Fz    |    Mx    |    My    |    Mz    |\\u001b[0m\\n\",\n\t\t\t\t\t\t\"|=====|=====|============|==========|==========|==========|==========|==========|==========|\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[0m\\n\",\n\t\t\t\t\t\t\"|==========|==========|==========|==========|==========|==========|==========|==========|==========|==========|\\u001b[0m\\n\",\n\t\t\t\t\t\t\"|   iter   |alpha[deg]|elev[deg] |  thrust  |    Fx    |    Fy    |    Fz    |    Mx    |    My    |    Mz    |\\u001b[0m\\n\",\n\t\t\t\t\t\t\"|==========|==========|==========|==========|==========|==========|==========|==========|==========|==========|\\u001b[0m\\n\",\n\t\t\t\t\t\t\"|  0  |  0  |  0.00000   | -0.1051  | -0.0000  |  0.0598  | -0.0000  |  1.0837  | -0.0000  |\\u001b[0m\\n\",\n\t\t\t\t\t\t\"|  1  |  0  |  -7.62384  | -0.1284  | -0.0000  |  0.1276  | -0.0000  |  0.0045  | -0.0000  |\\u001b[0m\\n\",\n\t\t\t\t\t\t\"|  2  |  0  |  -8.33392  | -0.1190  | -0.0000  |  0.0397  | -0.0000  | -0.0774  | -0.0000  |\\u001b[0m\\n\",\n\t\t\t\t\t\t\"|  3  |  0  |  -9.30379  | -0.1133  |  0.0000  |  0.0011  | -0.0000  | -0.0070  |  0.0000  |\\u001b[0m\\n\",\n\t\t\t\t\t\t\"|  4  |  0  | -10.71602  | -0.1136  | -0.0000  |  0.0032  |  0.0000  | -0.0100  | -0.0000  |\\u001b[0m\\n\",\n\t\t\t\t\t\t\"|  5  |  0  | -10.88827  | -0.1138  | -0.0000  |  0.0043  |  0.0000  | -0.0119  | -0.0000  |\\u001b[0m\\n\",\n\t\t\t\t\t\t\"|  6  |  0  | -11.66331  | -0.1138  | -0.0000  |  0.0042  |  0.0000  | -0.0116  | -0.0000  |\\u001b[0m\\n\",\n\t\t\t\t\t\t\"|  7  |  0  | -12.88496  | -0.1138  | -0.0000  |  0.0041  |  0.0000  | -0.0116  |  0.0000  |\\u001b[0m\\n\",\n\t\t\t\t\t\t\"|    0     |  4.5135  |  0.1814  |  5.5129  | -0.1138  | -0.0000  |  0.0041  |  0.0000  | -0.0116  |  0.0000  |\\u001b[0m\\n\",\n\t\t\t\t\t\t\"|  0  |  0  |  0.00000   |-116.9870 | -0.0000  | 994.8063 | -0.0000  |-882.4104 | -0.0000  |\\u001b[0m\\n\",\n\t\t\t\t\t\t\"|  1  |  0  |  -5.79178  | -72.3841 |  0.0000  | 944.6140 |  0.0000  |-802.5912 |  0.0000  |\\u001b[0m\\n\",\n\t\t\t\t\t\t\"|  2  |  0  |  -6.63730  | -62.4378 |  0.0000  | 937.6662 |  0.0000  |-792.1259 | -0.0000  |\\u001b[0m\\n\",\n\t\t\t\t\t\t\"|  3  |  0  |  -7.22937  | -62.8923 | -0.0000  | 939.7866 | -0.0000  |-795.7093 | -0.0000  |\\u001b[0m\\n\",\n\t\t\t\t\t\t\"|  4  |  0  |  -8.65323  | -62.8757 | -0.0000  | 939.7100 | -0.0000  |-795.5764 | -0.0000  |\\u001b[0m\\n\",\n\t\t\t\t\t\t\"|  5  |  0  |  -8.81438  | -62.8640 | -0.0000  | 939.6554 | -0.0000  |-795.4837 | -0.0000  |\\u001b[0m\\n\",\n\t\t\t\t\t\t\"|  6  |  0  |  -9.59386  | -62.8660 |  0.0000  | 939.6644 | -0.0000  |-795.4991 |  0.0000  |\\u001b[0m\\n\",\n\t\t\t\t\t\t\"|  7  |  0  | -10.80422  | -62.8661 |  0.0000  | 939.6650 | -0.0000  |-795.5000 |  0.0000  |\\u001b[0m\\n\",\n\t\t\t\t\t\t\"|  8  |  0  | -11.01365  | -62.8660 | -0.0000  | 939.6647 | -0.0000  |-795.4994 | -0.0000  |\\u001b[0m\\n\",\n\t\t\t\t\t\t\"|  9  |  0  | -12.15197  | -62.8660 |  0.0000  | 939.6647 | -0.0000  |-795.4995 |  0.0000  |\\u001b[0m\\n\",\n\t\t\t\t\t\t\"|    0     |  7.3783  | -2.6834  |  5.5129  | -62.8660 |  0.0000  | 939.6647 | -0.0000  |-795.4995 |  0.0000  |\\u001b[0m\\n\",\n\t\t\t\t\t\t\"|  0  |  0  |  0.00000   | -32.9132 | -0.0000  | 371.4715 | -0.0000  |-902.7953 | -0.0000  |\\u001b[0m\\n\",\n\t\t\t\t\t\t\"|  1  |  0  |  -5.48409  | -8.7241  | -0.0000  | 298.8484 |  0.0000  |-777.2938 |  0.0000  |\\u001b[0m\\n\",\n\t\t\t\t\t\t\"|  2  |  0  |  -6.39387  | -4.0957  | -0.0000  | 289.8092 | -0.0000  |-761.4855 | -0.0000  |\\u001b[0m\\n\",\n\t\t\t\t\t\t\"|  3  |  0  |  -6.85613  | -4.6263  | -0.0000  | 293.2407 | -0.0000  |-767.3376 |  0.0000  |\\u001b[0m\\n\",\n\t\t\t\t\t\t\"|  4  |  0  |  -8.25962  | -4.6052  | -0.0000  | 293.1048 | -0.0000  |-767.1066 |  0.0000  |\\u001b[0m\\n\",\n\t\t\t\t\t\t\"|  5  |  0  |  -8.44065  | -4.5914  | -0.0000  | 293.0156 |  0.0000  |-766.9545 |  0.0000  |\\u001b[0m\\n\",\n\t\t\t\t\t\t\"|  6  |  0  |  -9.20968  | -4.5937  | -0.0000  | 293.0308 | -0.0000  |-766.9804 | -0.0000  |\\u001b[0m\\n\",\n\t\t\t\t\t\t\"|  7  |  0  | -10.44736  | -4.5939  | -0.0000  | 293.0316 | -0.0000  |-766.9819 | -0.0000  |\\u001b[0m\\n\",\n\t\t\t\t\t\t\"|  8  |  0  | -10.63000  | -4.5938  | -0.0000  | 293.0311 |  0.0000  |-766.9809 | -0.0000  |\\u001b[0m\\n\",\n\t\t\t\t\t\t\"|  9  |  0  | -11.74670  | -4.5938  |  0.0000  | 293.0311 |  0.0000  |-766.9810 |  0.0000  |\\u001b[0m\\n\",\n\t\t\t\t\t\t\"| 10  |  0  | -12.29943  | -4.5938  | -0.0000  | 293.0311 |  0.0000  |-766.9810 |  0.0000  |\\u001b[0m\\n\",\n\t\t\t\t\t\t\"|    0     |  4.5135  |  3.0462  |  5.5129  | -4.5938  | -0.0000  | 293.0311 |  0.0000  |-766.9810 |  0.0000  |\\u001b[0m\\n\",\n\t\t\t\t\t\t\"|  0  |  0  |  0.00000   | -4.1051  | -0.0000  |  0.0598  | -0.0000  |  1.0834  | -0.0000  |\\u001b[0m\\n\",\n\t\t\t\t\t\t\"|  1  |  0  |  -7.62384  | -4.1284  | -0.0000  |  0.1276  | -0.0000  |  0.0042  | -0.0000  |\\u001b[0m\\n\",\n\t\t\t\t\t\t\"|  2  |  0  |  -8.33392  | -4.1190  | -0.0000  |  0.0397  |  0.0000  | -0.0778  | -0.0000  |\\u001b[0m\\n\",\n\t\t\t\t\t\t\"|  3  |  0  |  -9.30379  | -4.1133  | -0.0000  |  0.0011  |  0.0000  | -0.0074  | -0.0000  |\\u001b[0m\\n\",\n\t\t\t\t\t\t\"|  4  |  0  | -10.71602  | -4.1136  |  0.0000  |  0.0032  | -0.0000  | -0.0104  |  0.0000  |\\u001b[0m\\n\",\n\t\t\t\t\t\t\"|  5  |  0  | -10.88827  | -4.1138  |  0.0000  |  0.0043  |  0.0000  | -0.0123  |  0.0000  |\\u001b[0m\\n\",\n\t\t\t\t\t\t\"|  6  |  0  | -11.66331  | -4.1138  | -0.0000  |  0.0042  |  0.0000  | -0.0119  | -0.0000  |\\u001b[0m\\n\",\n\t\t\t\t\t\t\"|  7  |  0  | -12.88496  | -4.1138  | -0.0000  |  0.0041  |  0.0000  | -0.0119  | -0.0000  |\\u001b[0m\\n\",\n\t\t\t\t\t\t\"|    0     |  4.5135  |  0.1814  |  7.5129  | -4.1138  | -0.0000  |  0.0041  |  0.0000  | -0.0119  | -0.0000  |\\u001b[0m\\n\",\n\t\t\t\t\t\t\"|  0  |  0  |  0.00000   |  0.0095  | -0.0000  |  0.0498  |  0.0000  |  1.1013  | -0.0000  |\\u001b[0m\\n\",\n\t\t\t\t\t\t\"|  1  |  0  |  -7.62357  | -0.0140  |  0.0000  |  0.1189  |  0.0000  |  0.0198  |  0.0000  |\\u001b[0m\\n\",\n\t\t\t\t\t\t\"|  2  |  0  |  -8.33375  | -0.0046  | -0.0000  |  0.0312  | -0.0000  | -0.0624  |  0.0000  |\\u001b[0m\\n\",\n\t\t\t\t\t\t\"|  3  |  0  |  -9.30318  |  0.0010  | -0.0000  | -0.0075  |  0.0000  |  0.0081  | -0.0000  |\\u001b[0m\\n\",\n\t\t\t\t\t\t\"|  4  |  0  | -10.71542  |  0.0007  | -0.0000  | -0.0054  |  0.0000  |  0.0051  |  0.0000  |\\u001b[0m\\n\",\n\t\t\t\t\t\t\"|  5  |  0  | -10.88766  |  0.0006  | -0.0000  | -0.0043  |  0.0000  |  0.0032  | -0.0000  |\\u001b[0m\\n\",\n\t\t\t\t\t\t\"|  6  |  0  | -11.66271  |  0.0006  |  0.0000  | -0.0044  | -0.0000  |  0.0035  |  0.0000  |\\u001b[0m\\n\",\n\t\t\t\t\t\t\"|  7  |  0  | -12.88441  |  0.0006  | -0.0000  | -0.0045  |  0.0000  |  0.0035  | -0.0000  |\\u001b[0m\\n\",\n\t\t\t\t\t\t\"|    1     |  4.5135  |  0.1814  |  5.4560  |  0.0006  | -0.0000  | -0.0045  |  0.0000  |  0.0035  | -0.0000  |\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[36mGenerating an instance of BeamPlot\\u001b[0m\\n\",\n\t\t\t\t\t\t\"Variable include_applied_moments has no assigned value in the settings file.\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[34m    will default to the value: True\\u001b[0m\\n\",\n\t\t\t\t\t\t\"Variable name_prefix has no assigned value in the settings file.\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[34m    will default to the value: \\u001b[0m\\n\",\n\t\t\t\t\t\t\"Variable output_rbm has no assigned value in the settings file.\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[34m    will default to the value: True\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[34m...Finished\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[36mGenerating an instance of AerogridPlot\\u001b[0m\\n\",\n\t\t\t\t\t\t\"Variable include_forward_motion has no assigned value in the settings file.\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[34m    will default to the value: False\\u001b[0m\\n\",\n\t\t\t\t\t\t\"Variable include_unsteady_applied_forces has no assigned value in the settings file.\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[34m    will default to the value: False\\u001b[0m\\n\",\n\t\t\t\t\t\t\"Variable name_prefix has no assigned value in the settings file.\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[34m    will default to the value: \\u001b[0m\\n\",\n\t\t\t\t\t\t\"Variable dt has no assigned value in the settings file.\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[34m    will default to the value: 0.0\\u001b[0m\\n\",\n\t\t\t\t\t\t\"Variable include_velocities has no assigned value in the settings file.\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[34m    will default to the value: False\\u001b[0m\\n\",\n\t\t\t\t\t\t\"Variable include_incidence_angle has no assigned value in the settings file.\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[34m    will default to the value: False\\u001b[0m\\n\",\n\t\t\t\t\t\t\"Variable num_cores has no assigned value in the settings file.\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[34m    will default to the value: 1\\u001b[0m\\n\",\n\t\t\t\t\t\t\"Variable vortex_radius has no assigned value in the settings file.\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[34m    will default to the value: 1e-06\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[34m...Finished\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[36mGenerating an instance of AeroForcesCalculator\\u001b[0m\\n\",\n\t\t\t\t\t\t\"--------------------------------------------------------------------------------\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[34mtstep |   fx_g     |   fy_g     |   fz_g     |   Cfx_g    |   Cfy_g    |   Cfz_g   \\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[34m    0 |  1.088e+01 | -4.476e-13 |  1.835e+03 |  2.124e-03 | -8.740e-17 |  3.583e-01\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[34m...Finished\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[36mGenerating an instance of DynamicCoupled\\u001b[0m\\n\",\n\t\t\t\t\t\t\"Variable structural_substeps has no assigned value in the settings file.\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[34m    will default to the value: 0\\u001b[0m\\n\",\n\t\t\t\t\t\t\"Variable dynamic_relaxation has no assigned value in the settings file.\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[34m    will default to the value: False\\u001b[0m\\n\",\n\t\t\t\t\t\t\"Variable postprocessors has no assigned value in the settings file.\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[34m    will default to the value: []\\u001b[0m\\n\",\n\t\t\t\t\t\t\"Variable postprocessors_settings has no assigned value in the settings file.\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[34m    will default to the value: {}\\u001b[0m\\n\",\n\t\t\t\t\t\t\"Variable controller_id has no assigned value in the settings file.\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[34m    will default to the value: {}\\u001b[0m\\n\",\n\t\t\t\t\t\t\"Variable controller_settings has no assigned value in the settings file.\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[34m    will default to the value: {}\\u001b[0m\\n\",\n\t\t\t\t\t\t\"Variable cleanup_previous_solution has no assigned value in the settings file.\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[34m    will default to the value: False\\u001b[0m\\n\",\n\t\t\t\t\t\t\"Variable steps_without_unsteady_force has no assigned value in the settings file.\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[34m    will default to the value: 0\\u001b[0m\\n\",\n\t\t\t\t\t\t\"Variable pseudosteps_ramp_unsteady_force has no assigned value in the settings file.\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[34m    will default to the value: 0\\u001b[0m\\n\",\n\t\t\t\t\t\t\"Variable correct_forces_method has no assigned value in the settings file.\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[34m    will default to the value: \\u001b[0m\\n\",\n\t\t\t\t\t\t\"Variable network_settings has no assigned value in the settings file.\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[34m    will default to the value: {}\\u001b[0m\\n\",\n\t\t\t\t\t\t\"Variable runtime_generators has no assigned value in the settings file.\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[34m    will default to the value: {}\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[36mGenerating an instance of NonLinearDynamicCoupledStep\\u001b[0m\\n\",\n\t\t\t\t\t\t\"Variable num_load_steps has no assigned value in the settings file.\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[34m    will default to the value: 1\\u001b[0m\\n\",\n\t\t\t\t\t\t\"Variable gravity_dir has no assigned value in the settings file.\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[34m    will default to the value: [0.0, 0.0, 1.0]\\u001b[0m\\n\",\n\t\t\t\t\t\t\"Variable relaxation_factor has no assigned value in the settings file.\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[34m    will default to the value: 0.3\\u001b[0m\\n\",\n\t\t\t\t\t\t\"Variable balancing has no assigned value in the settings file.\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[34m    will default to the value: False\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[36mGenerating an instance of StepUvlm\\u001b[0m\\n\",\n\t\t\t\t\t\t\"Variable iterative_solver has no assigned value in the settings file.\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[34m    will default to the value: False\\u001b[0m\\n\",\n\t\t\t\t\t\t\"Variable iterative_tol has no assigned value in the settings file.\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[34m    will default to the value: 0.0001\\u001b[0m\\n\",\n\t\t\t\t\t\t\"Variable iterative_precond has no assigned value in the settings file.\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[34m    will default to the value: False\\u001b[0m\\n\",\n\t\t\t\t\t\t\"Variable cfl1 has no assigned value in the settings file.\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[34m    will default to the value: True\\u001b[0m\\n\",\n\t\t\t\t\t\t\"Variable vortex_radius has no assigned value in the settings file.\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[34m    will default to the value: 1e-06\\u001b[0m\\n\",\n\t\t\t\t\t\t\"Variable vortex_radius_wake_ind has no assigned value in the settings file.\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[34m    will default to the value: 1e-06\\u001b[0m\\n\",\n\t\t\t\t\t\t\"Variable interp_coords has no assigned value in the settings file.\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[34m    will default to the value: 0\\u001b[0m\\n\",\n\t\t\t\t\t\t\"Variable filter_method has no assigned value in the settings file.\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[34m    will default to the value: 0\\u001b[0m\\n\",\n\t\t\t\t\t\t\"Variable interp_method has no assigned value in the settings file.\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[34m    will default to the value: 0\\u001b[0m\\n\",\n\t\t\t\t\t\t\"Variable yaw_slerp has no assigned value in the settings file.\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[34m    will default to the value: 0.0\\u001b[0m\\n\",\n\t\t\t\t\t\t\"Variable centre_rot has no assigned value in the settings file.\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[34m    will default to the value: [0.0, 0.0, 0.0]\\u001b[0m\\n\",\n\t\t\t\t\t\t\"Variable quasi_steady has no assigned value in the settings file.\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[34m    will default to the value: False\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[0m\\n\",\n\t\t\t\t\t\t\"|=======|========|======|==============|==============|==============|==============|==============|\\u001b[0m\\n\",\n\t\t\t\t\t\t\"|  ts   |   t    | iter | struc ratio  |  iter time   | residual vel |  FoR_vel(x)  |  FoR_vel(z)  |\\u001b[0m\\n\",\n\t\t\t\t\t\t\"|=======|========|======|==============|==============|==============|==============|==============|\\u001b[0m\\n\"\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"stderr\",\n\t\t\t\t\t\"output_type\": \"stream\",\n\t\t\t\t\t\"text\": [\n\t\t\t\t\t\t\"/home/ng213/2TB/pazy_code/pazy-sharpy/lib/sharpy/sharpy/aero/utils/uvlmlib.py:264: RuntimeWarning: invalid value encountered in true_divide\\n\",\n\t\t\t\t\t\t\"  flightconditions.uinf_direction = np.ctypeslib.as_ctypes(ts_info.u_ext[0][:, 0, 0]/flightconditions.uinf)\\n\"\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"stdout\",\n\t\t\t\t\t\"output_type\": \"stream\",\n\t\t\t\t\t\"text\": [\n\t\t\t\t\t\t\"|   1   | 0.0089 |  3   |   0.877319   |   0.593232   |  -10.598250  |-2.791317e+01 |-2.203426e+00 |\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[34m...Finished\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[36mGenerating an instance of Modal\\u001b[0m\\n\",\n\t\t\t\t\t\t\"Variable keep_linear_matrices has no assigned value in the settings file.\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[34m    will default to the value: True\\u001b[0m\\n\",\n\t\t\t\t\t\t\"Variable write_dat has no assigned value in the settings file.\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[34m    will default to the value: True\\u001b[0m\\n\",\n\t\t\t\t\t\t\"Variable delta_curved has no assigned value in the settings file.\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[34m    will default to the value: 0.01\\u001b[0m\\n\",\n\t\t\t\t\t\t\"Variable max_rotation_deg has no assigned value in the settings file.\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[34m    will default to the value: 15.0\\u001b[0m\\n\",\n\t\t\t\t\t\t\"Variable max_displacement has no assigned value in the settings file.\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[34m    will default to the value: 0.15\\u001b[0m\\n\",\n\t\t\t\t\t\t\"Variable use_custom_timestep has no assigned value in the settings file.\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[34m    will default to the value: -1\\u001b[0m\\n\",\n\t\t\t\t\t\t\"Structural eigenvalues\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[0m\\n\",\n\t\t\t\t\t\t\"|==============|==============|==============|==============|==============|==============|==============|\\u001b[0m\\n\",\n\t\t\t\t\t\t\"|     mode     |  eval_real   |  eval_imag   | freq_n (Hz)  | freq_d (Hz)  |   damping    |  period (s)  |\\u001b[0m\\n\",\n\t\t\t\t\t\t\"|==============|==============|==============|==============|==============|==============|==============|\\u001b[0m\\n\"\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"stderr\",\n\t\t\t\t\t\"output_type\": \"stream\",\n\t\t\t\t\t\"text\": [\n\t\t\t\t\t\t\"/home/ng213/2TB/pazy_code/pazy-sharpy/lib/sharpy/sharpy/solvers/modal.py:265: UserWarning: Projecting a system with damping on undamped modal shapes\\n\",\n\t\t\t\t\t\t\"  warnings.warn('Projecting a system with damping on undamped modal shapes')\\n\"\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"name\": \"stdout\",\n\t\t\t\t\t\"output_type\": \"stream\",\n\t\t\t\t\t\"text\": [\n\t\t\t\t\t\t\"|      0       |  -0.000000   |   0.000000   |   0.000000   |   0.000000   |   1.000000   |     inf      |\\u001b[0m\\n\",\n\t\t\t\t\t\t\"|      1       |   0.000000   |   0.000000   |   0.000000   |   0.000000   |   1.000000   |     inf      |\\u001b[0m\\n\",\n\t\t\t\t\t\t\"|      2       |   0.000000   |   0.000000   |   0.000000   |   0.000000   |   1.000000   |     inf      |\\u001b[0m\\n\",\n\t\t\t\t\t\t\"|      3       |   0.000000   |   0.000000   |   0.000000   |   0.000000   |   1.000000   |     inf      |\\u001b[0m\\n\",\n\t\t\t\t\t\t\"|      4       |  -0.000000   |   0.000000   |   0.000000   |   0.000000   |   1.000000   |     inf      |\\u001b[0m\\n\",\n\t\t\t\t\t\t\"|      5       |   0.000000   |   0.000000   |   0.000000   |   0.000000   |   1.000000   |     inf      |\\u001b[0m\\n\",\n\t\t\t\t\t\t\"|      6       |   0.000000   |   0.000000   |   0.000000   |   0.000000   |   1.000000   |     inf      |\\u001b[0m\\n\",\n\t\t\t\t\t\t\"|      7       |  -0.000000   |   0.000000   |   0.000000   |   0.000000   |   1.000000   |     inf      |\\u001b[0m\\n\",\n\t\t\t\t\t\t\"|      8       |  -0.000000   |   0.000000   |   0.000000   |   0.000000   |   1.000000   |     inf      |\\u001b[0m\\n\",\n\t\t\t\t\t\t\"|      9       |  -0.000000   |   0.000000   |   0.000000   |   0.000000   |   1.000000   |     inf      |\\u001b[0m\\n\",\n\t\t\t\t\t\t\"|      10      |   0.000000   |  28.293939   |   4.503120   |   4.503120   |  -0.000000   |   0.222068   |\\u001b[0m\\n\",\n\t\t\t\t\t\t\"|      11      |   0.000000   |  29.271318   |   4.658675   |   4.658675   |  -0.000000   |   0.214653   |\\u001b[0m\\n\",\n\t\t\t\t\t\t\"|      12      |   0.000000   |  54.780234   |   8.718545   |   8.718545   |  -0.000000   |   0.114698   |\\u001b[0m\\n\",\n\t\t\t\t\t\t\"|      13      |   0.000000   |  58.999779   |   9.390106   |   9.390106   |  -0.000000   |   0.106495   |\\u001b[0m\\n\",\n\t\t\t\t\t\t\"|      14      |   0.000000   |  70.520741   |  11.223724   |  11.223724   |  -0.000000   |   0.089097   |\\u001b[0m\\n\",\n\t\t\t\t\t\t\"|      15      |   0.000000   |  76.917111   |  12.241738   |  12.241738   |  -0.000000   |   0.081688   |\\u001b[0m\\n\",\n\t\t\t\t\t\t\"|      16      |   0.000000   |  87.324076   |  13.898058   |  13.898058   |  -0.000000   |   0.071952   |\\u001b[0m\\n\",\n\t\t\t\t\t\t\"|      17      |   0.000000   |  108.035577  |  17.194396   |  17.194396   |  -0.000000   |   0.058158   |\\u001b[0m\\n\",\n\t\t\t\t\t\t\"|      18      |   0.000000   |  119.692139  |  19.049596   |  19.049596   |  -0.000000   |   0.052495   |\\u001b[0m\\n\",\n\t\t\t\t\t\t\"|      19      |   0.000000   |  133.495187  |  21.246419   |  21.246419   |  -0.000000   |   0.047067   |\\u001b[0m\\n\",\n\t\t\t\t\t\t\"|      20      |   0.000000   |  134.444788  |  21.397553   |  21.397553   |  -0.000000   |   0.046734   |\\u001b[0m\\n\",\n\t\t\t\t\t\t\"|      21      |   0.000000   |  151.060442  |  24.042016   |  24.042016   |  -0.000000   |   0.041594   |\\u001b[0m\\n\",\n\t\t\t\t\t\t\"|      22      |   0.000000   |  159.369020  |  25.364367   |  25.364367   |  -0.000000   |   0.039425   |\\u001b[0m\\n\",\n\t\t\t\t\t\t\"|      23      |   0.000000   |  171.256102  |  27.256255   |  27.256255   |  -0.000000   |   0.036689   |\\u001b[0m\\n\",\n\t\t\t\t\t\t\"|      24      |   0.000000   |  173.895881  |  27.676389   |  27.676389   |  -0.000000   |   0.036132   |\\u001b[0m\\n\",\n\t\t\t\t\t\t\"|      25      |   0.000000   |  199.016557  |  31.674469   |  31.674469   |  -0.000000   |   0.031571   |\\u001b[0m\\n\",\n\t\t\t\t\t\t\"|      26      |   0.000000   |  205.412581  |  32.692428   |  32.692428   |  -0.000000   |   0.030588   |\\u001b[0m\\n\",\n\t\t\t\t\t\t\"|      27      |   0.000000   |  205.419531  |  32.693534   |  32.693534   |  -0.000000   |   0.030587   |\\u001b[0m\\n\",\n\t\t\t\t\t\t\"|      28      |   0.000000   |  223.563796  |  35.581283   |  35.581283   |  -0.000000   |   0.028105   |\\u001b[0m\\n\",\n\t\t\t\t\t\t\"|      29      |   0.000000   |  227.924750  |  36.275351   |  36.275351   |  -0.000000   |   0.027567   |\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[36mGenerating an instance of LinearAssembler\\u001b[0m\\n\",\n\t\t\t\t\t\t\"Variable linearisation_tstep has no assigned value in the settings file.\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[34m    will default to the value: -1\\u001b[0m\\n\",\n\t\t\t\t\t\t\"Variable modal_tstep has no assigned value in the settings file.\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[34m    will default to the value: -1\\u001b[0m\\n\",\n\t\t\t\t\t\t\"Variable inout_coordinates has no assigned value in the settings file.\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[34m    will default to the value: \\u001b[0m\\n\",\n\t\t\t\t\t\t\"Variable retain_inputs has no assigned value in the settings file.\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[34m    will default to the value: []\\u001b[0m\\n\",\n\t\t\t\t\t\t\"Variable retain_outputs has no assigned value in the settings file.\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[34m    will default to the value: []\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[36mGenerating an instance of LinearAeroelastic\\u001b[0m\\n\",\n\t\t\t\t\t\t\"Variable uvlm_filename has no assigned value in the settings file.\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[34m    will default to the value: \\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[36mGenerating an instance of LinearUVLM\\u001b[0m\\n\",\n\t\t\t\t\t\t\"Variable ScalingDict has no assigned value in the settings file.\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[34m    will default to the value: {}\\u001b[0m\\n\",\n\t\t\t\t\t\t\"Variable gust_assembler has no assigned value in the settings file.\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[34m    will default to the value: \\u001b[0m\\n\",\n\t\t\t\t\t\t\"Variable rom_method has no assigned value in the settings file.\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[34m    will default to the value: []\\u001b[0m\\n\",\n\t\t\t\t\t\t\"Variable rom_method_settings has no assigned value in the settings file.\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[34m    will default to the value: {}\\u001b[0m\\n\",\n\t\t\t\t\t\t\"Variable vortex_radius has no assigned value in the settings file.\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[34m    will default to the value: 1e-06\\u001b[0m\\n\",\n\t\t\t\t\t\t\"Variable cfl1 has no assigned value in the settings file.\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[34m    will default to the value: True\\u001b[0m\\n\",\n\t\t\t\t\t\t\"Variable length has no assigned value in the settings file.\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[34m    will default to the value: 1.0\\u001b[0m\\n\",\n\t\t\t\t\t\t\"Variable speed has no assigned value in the settings file.\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[34m    will default to the value: 1.0\\u001b[0m\\n\",\n\t\t\t\t\t\t\"Variable density has no assigned value in the settings file.\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[34m    will default to the value: 1.0\\u001b[0m\\n\",\n\t\t\t\t\t\t\"Variable velocity_field_generator has no assigned value in the settings file.\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[34m    will default to the value: SteadyVelocityField\\u001b[0m\\n\",\n\t\t\t\t\t\t\"Variable velocity_field_input has no assigned value in the settings file.\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[34m    will default to the value: {}\\u001b[0m\\n\",\n\t\t\t\t\t\t\"Variable physical_model has no assigned value in the settings file.\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[34m    will default to the value: True\\u001b[0m\\n\",\n\t\t\t\t\t\t\"Variable track_body has no assigned value in the settings file.\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[34m    will default to the value: False\\u001b[0m\\n\",\n\t\t\t\t\t\t\"Variable track_body_number has no assigned value in the settings file.\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[34m    will default to the value: -1\\u001b[0m\\n\",\n\t\t\t\t\t\t\"Initialising Static linear UVLM solver class...\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\t\\t\\t...done in 0.39 sec\\u001b[0m\\n\",\n\t\t\t\t\t\t\"State-space realisation of UVLM equations started...\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[34mComputing wake propagation matrix with CFL1=True\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[34m\\tstate-space model produced in form:\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[34m\\tx_{n+1} = A x_{n} + Bp u_{n+1}\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\t\\t\\t...done in 2.43 sec\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[36mGenerating an instance of LinearBeam\\u001b[0m\\n\",\n\t\t\t\t\t\t\"Variable remove_sym_modes has no assigned value in the settings file.\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[34m    will default to the value: False\\u001b[0m\\n\",\n\t\t\t\t\t\t\"Warning, projecting system with damping onto undamped modes\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[0m\\n\",\n\t\t\t\t\t\t\"Linearising gravity terms...\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[34m\\tM = 187.12 kg\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[34m\\tX_CG A -> 1.19 0.00 0.01\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[36mNode  1 \\t-> B 0.000 -0.089 -0.000\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[36m\\t\\t\\t-> A 0.089 0.206 0.000\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[36m\\t\\t\\t-> G 0.089 0.206 -0.007\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[36m\\tNode mass:\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[36m\\t\\tMatrix: 2.6141\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[36mNode  2 \\t-> B -0.010 -0.019 -0.000\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[36m\\t\\t\\t-> A 0.019 0.403 0.000\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[36m\\t\\t\\t-> G 0.019 0.403 -0.001\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[36m\\tNode mass:\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[36m\\t\\tMatrix: 7.3672\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[36mNode  3 \\t-> B -0.019 -0.087 -0.000\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[36m\\t\\t\\t-> A 0.234 0.800 0.000\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[36m\\t\\t\\t-> G 0.234 0.800 -0.018\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[36m\\tNode mass:\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[36m\\t\\tMatrix: 5.8780\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[36mNode  4 \\t-> B -0.019 -0.084 -0.000\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[36m\\t\\t\\t-> A 0.390 1.238 0.001\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[36m\\t\\t\\t-> G 0.389 1.238 -0.030\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[36m\\tNode mass:\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[36m\\t\\tMatrix: 2.8288\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[36mNode  5 \\t-> B -0.018 -0.081 -0.000\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[36m\\t\\t\\t-> A 0.546 1.676 0.001\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[36m\\t\\t\\t-> G 0.544 1.676 -0.041\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[36m\\tNode mass:\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[36m\\t\\tMatrix: 5.4372\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[36mNode  6 \\t-> B -0.017 -0.078 -0.000\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[36m\\t\\t\\t-> A 0.702 2.113 0.002\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[36m\\t\\t\\t-> G 0.700 2.113 -0.053\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[36m\\tNode mass:\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[36m\\t\\tMatrix: 2.6084\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[36mNode  7 \\t-> B -0.016 -0.074 -0.000\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[36m\\t\\t\\t-> A 0.857 2.551 0.003\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[36m\\t\\t\\t-> G 0.855 2.551 -0.064\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[36m\\tNode mass:\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[36m\\t\\tMatrix: 4.9963\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[36mNode  8 \\t-> B -0.016 -0.071 -0.000\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[36m\\t\\t\\t-> A 1.013 2.988 0.004\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[36m\\t\\t\\t-> G 1.010 2.988 -0.076\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[36m\\tNode mass:\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[36m\\t\\tMatrix: 2.3879\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[36mNode  9 \\t-> B -0.015 -0.068 -0.000\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[36m\\t\\t\\t-> A 1.169 3.426 0.005\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[36m\\t\\t\\t-> G 1.166 3.426 -0.087\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[36m\\tNode mass:\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[36m\\t\\tMatrix: 4.5555\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[36mNode 10 \\t-> B -0.014 -0.065 -0.000\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[36m\\t\\t\\t-> A 1.325 3.863 0.006\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[36m\\t\\t\\t-> G 1.321 3.863 -0.098\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[36m\\tNode mass:\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[36m\\t\\tMatrix: 2.1675\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[36mNode 11 \\t-> B -0.013 -0.061 -0.000\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[36m\\t\\t\\t-> A 1.480 4.301 0.007\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[36m\\t\\t\\t-> G 1.476 4.301 -0.109\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[36m\\tNode mass:\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[36m\\t\\tMatrix: 4.1146\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[36mNode 12 \\t-> B -0.013 -0.058 -0.000\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[36m\\t\\t\\t-> A 1.636 4.739 0.009\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[36m\\t\\t\\t-> G 1.632 4.739 -0.120\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[36m\\tNode mass:\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[36m\\t\\tMatrix: 1.9471\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[36mNode 13 \\t-> B -0.012 -0.055 -0.000\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[36m\\t\\t\\t-> A 1.792 5.176 0.010\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[36m\\t\\t\\t-> G 1.787 5.176 -0.131\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[36m\\tNode mass:\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[36m\\t\\tMatrix: 3.6738\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[36mNode 14 \\t-> B -0.011 -0.052 -0.000\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[36m\\t\\t\\t-> A 1.948 5.614 0.011\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[36m\\t\\t\\t-> G 1.943 5.614 -0.142\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[36m\\tNode mass:\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[36m\\t\\tMatrix: 1.7267\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[36mNode 15 \\t-> B -0.011 -0.048 -0.000\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[36m\\t\\t\\t-> A 2.104 6.052 0.012\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[36m\\t\\t\\t-> G 2.098 6.052 -0.153\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[36m\\tNode mass:\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[36m\\t\\tMatrix: 3.2329\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[36mNode 16 \\t-> B -0.010 -0.045 -0.000\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[36m\\t\\t\\t-> A 2.260 6.489 0.014\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[36m\\t\\t\\t-> G 2.254 6.489 -0.164\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[36m\\tNode mass:\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[36m\\t\\tMatrix: 1.5062\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[36mNode 17 \\t-> B -0.009 -0.042 -0.000\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[36m\\t\\t\\t-> A 2.415 6.927 0.015\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[36m\\t\\t\\t-> G 2.409 6.927 -0.175\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[36m\\tNode mass:\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[36m\\t\\tMatrix: 2.7921\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[36mNode 18 \\t-> B -0.008 -0.039 -0.000\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[36m\\t\\t\\t-> A 2.571 7.364 0.016\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[36m\\t\\t\\t-> G 2.564 7.364 -0.186\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[36m\\tNode mass:\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[36m\\t\\tMatrix: 1.2858\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[36mNode 19 \\t-> B -0.008 -0.035 -0.000\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[36m\\t\\t\\t-> A 2.727 7.802 0.017\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[36m\\t\\t\\t-> G 2.720 7.802 -0.197\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[36m\\tNode mass:\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[36m\\t\\tMatrix: 2.3512\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[36mNode 20 \\t-> B -0.007 -0.032 -0.000\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[36m\\t\\t\\t-> A 2.883 8.239 0.019\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[36m\\t\\t\\t-> G 2.875 8.239 -0.208\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[36m\\tNode mass:\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[36m\\t\\tMatrix: 1.0654\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[36mNode 21 \\t-> B -0.006 -0.028 -0.000\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[36m\\t\\t\\t-> A 3.038 8.677 0.020\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[36m\\t\\t\\t-> G 3.030 8.677 -0.219\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[36m\\tNode mass:\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[36m\\t\\tMatrix: 1.9104\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[36mNode 22 \\t-> B -0.006 -0.026 -0.000\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[36m\\t\\t\\t-> A 3.194 9.114 0.021\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[36m\\t\\t\\t-> G 3.186 9.114 -0.230\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[36m\\tNode mass:\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[36m\\t\\tMatrix: 0.8450\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[36mNode 23 \\t-> B -0.005 -0.022 -0.000\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[36m\\t\\t\\t-> A 3.350 9.552 0.023\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[36m\\t\\t\\t-> G 3.341 9.552 -0.241\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[36m\\tNode mass:\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[36m\\t\\tMatrix: 1.4695\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[36mNode 24 \\t-> B -0.005 -0.022 -0.000\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[36m\\t\\t\\t-> A 3.508 9.988 0.024\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[36m\\t\\t\\t-> G 3.499 9.988 -0.252\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[36m\\tNode mass:\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[36m\\t\\tMatrix: 0.3674\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[36mNode 25 \\t-> B 0.000 0.089 -0.000\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[36m\\t\\t\\t-> A 0.089 -0.206 0.000\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[36m\\t\\t\\t-> G 0.089 -0.206 -0.007\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[36m\\tNode mass:\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[36m\\t\\tMatrix: 2.6141\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[36mNode 26 \\t-> B -0.010 0.019 -0.000\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[36m\\t\\t\\t-> A 0.019 -0.403 0.000\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[36m\\t\\t\\t-> G 0.019 -0.403 -0.001\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[36m\\tNode mass:\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[36m\\t\\tMatrix: 7.3672\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[36mNode 27 \\t-> B -0.019 0.087 -0.000\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[36m\\t\\t\\t-> A 0.234 -0.800 0.000\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[36m\\t\\t\\t-> G 0.234 -0.800 -0.018\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[36m\\tNode mass:\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[36m\\t\\tMatrix: 5.8780\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[36mNode 28 \\t-> B -0.019 0.084 -0.000\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[36m\\t\\t\\t-> A 0.390 -1.238 0.001\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[36m\\t\\t\\t-> G 0.389 -1.238 -0.030\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[36m\\tNode mass:\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[36m\\t\\tMatrix: 2.8288\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[36mNode 29 \\t-> B -0.018 0.081 -0.000\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[36m\\t\\t\\t-> A 0.546 -1.676 0.001\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[36m\\t\\t\\t-> G 0.544 -1.676 -0.041\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[36m\\tNode mass:\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[36m\\t\\tMatrix: 5.4372\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[36mNode 30 \\t-> B -0.017 0.078 -0.000\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[36m\\t\\t\\t-> A 0.702 -2.113 0.002\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[36m\\t\\t\\t-> G 0.700 -2.113 -0.053\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[36m\\tNode mass:\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[36m\\t\\tMatrix: 2.6084\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[36mNode 31 \\t-> B -0.016 0.074 -0.000\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[36m\\t\\t\\t-> A 0.857 -2.551 0.003\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[36m\\t\\t\\t-> G 0.855 -2.551 -0.064\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[36m\\tNode mass:\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[36m\\t\\tMatrix: 4.9963\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[36mNode 32 \\t-> B -0.016 0.071 -0.000\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[36m\\t\\t\\t-> A 1.013 -2.988 0.004\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[36m\\t\\t\\t-> G 1.010 -2.988 -0.076\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[36m\\tNode mass:\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[36m\\t\\tMatrix: 2.3879\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[36mNode 33 \\t-> B -0.015 0.068 -0.000\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[36m\\t\\t\\t-> A 1.169 -3.426 0.005\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[36m\\t\\t\\t-> G 1.166 -3.426 -0.087\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[36m\\tNode mass:\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[36m\\t\\tMatrix: 4.5555\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[36mNode 34 \\t-> B -0.014 0.065 -0.000\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[36m\\t\\t\\t-> A 1.325 -3.863 0.006\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[36m\\t\\t\\t-> G 1.321 -3.863 -0.098\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[36m\\tNode mass:\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[36m\\t\\tMatrix: 2.1675\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[36mNode 35 \\t-> B -0.013 0.061 -0.000\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[36m\\t\\t\\t-> A 1.480 -4.301 0.007\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[36m\\t\\t\\t-> G 1.476 -4.301 -0.109\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[36m\\tNode mass:\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[36m\\t\\tMatrix: 4.1146\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[36mNode 36 \\t-> B -0.013 0.058 -0.000\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[36m\\t\\t\\t-> A 1.636 -4.739 0.009\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[36m\\t\\t\\t-> G 1.632 -4.739 -0.120\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[36m\\tNode mass:\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[36m\\t\\tMatrix: 1.9471\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[36mNode 37 \\t-> B -0.012 0.055 -0.000\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[36m\\t\\t\\t-> A 1.792 -5.176 0.010\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[36m\\t\\t\\t-> G 1.787 -5.176 -0.131\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[36m\\tNode mass:\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[36m\\t\\tMatrix: 3.6738\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[36mNode 38 \\t-> B -0.011 0.052 -0.000\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[36m\\t\\t\\t-> A 1.948 -5.614 0.011\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[36m\\t\\t\\t-> G 1.943 -5.614 -0.142\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[36m\\tNode mass:\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[36m\\t\\tMatrix: 1.7267\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[36mNode 39 \\t-> B -0.011 0.048 -0.000\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[36m\\t\\t\\t-> A 2.104 -6.052 0.012\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[36m\\t\\t\\t-> G 2.098 -6.052 -0.153\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[36m\\tNode mass:\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[36m\\t\\tMatrix: 3.2329\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[36mNode 40 \\t-> B -0.010 0.045 -0.000\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[36m\\t\\t\\t-> A 2.260 -6.489 0.014\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[36m\\t\\t\\t-> G 2.254 -6.489 -0.164\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[36m\\tNode mass:\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[36m\\t\\tMatrix: 1.5062\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[36mNode 41 \\t-> B -0.009 0.042 -0.000\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[36m\\t\\t\\t-> A 2.415 -6.927 0.015\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[36m\\t\\t\\t-> G 2.409 -6.927 -0.175\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[36m\\tNode mass:\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[36m\\t\\tMatrix: 2.7921\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[36mNode 42 \\t-> B -0.008 0.039 -0.000\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[36m\\t\\t\\t-> A 2.571 -7.364 0.016\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[36m\\t\\t\\t-> G 2.564 -7.364 -0.186\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[36m\\tNode mass:\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[36m\\t\\tMatrix: 1.2858\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[36mNode 43 \\t-> B -0.008 0.035 -0.000\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[36m\\t\\t\\t-> A 2.727 -7.802 0.017\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[36m\\t\\t\\t-> G 2.720 -7.802 -0.197\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[36m\\tNode mass:\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[36m\\t\\tMatrix: 2.3512\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[36mNode 44 \\t-> B -0.007 0.032 -0.000\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[36m\\t\\t\\t-> A 2.883 -8.239 0.019\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[36m\\t\\t\\t-> G 2.875 -8.239 -0.208\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[36m\\tNode mass:\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[36m\\t\\tMatrix: 1.0654\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[36mNode 45 \\t-> B -0.006 0.028 -0.000\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[36m\\t\\t\\t-> A 3.038 -8.677 0.020\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[36m\\t\\t\\t-> G 3.030 -8.677 -0.219\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[36m\\tNode mass:\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[36m\\t\\tMatrix: 1.9104\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[36mNode 46 \\t-> B -0.006 0.026 -0.000\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[36m\\t\\t\\t-> A 3.194 -9.114 0.021\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[36m\\t\\t\\t-> G 3.186 -9.114 -0.230\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[36m\\tNode mass:\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[36m\\t\\tMatrix: 0.8450\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[36mNode 47 \\t-> B -0.005 0.022 -0.000\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[36m\\t\\t\\t-> A 3.350 -9.552 0.023\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[36m\\t\\t\\t-> G 3.341 -9.552 -0.241\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[36m\\tNode mass:\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[36m\\t\\tMatrix: 1.4695\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[36mNode 48 \\t-> B -0.005 0.022 -0.000\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[36m\\t\\t\\t-> A 3.508 -9.988 0.024\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[36m\\t\\t\\t-> G 3.499 -9.988 -0.252\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[36m\\tNode mass:\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[36m\\t\\tMatrix: 0.3674\\u001b[0m\\n\",\n\t\t\t\t\t\t\"        Updated the beam C, modal C and K matrices with the terms from the\\n\",\n\t\t\t\t\t\t\"gravity linearisation\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[0m\\n\",\n\t\t\t\t\t\t\"Aeroelastic system assembled:\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[34m\\tAerodynamic states: 1536\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[34m\\tStructural states: 594\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[34m\\tTotal states: 2130\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[34m\\tInputs: 893\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[34m\\tOutputs: 891\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[34mFinal system is:\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[34mState-space system\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[34mStates: 2130\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[34mInputs: 893\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[34mOutputs: 891\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[34m\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[36mGenerating an instance of AsymptoticStability\\u001b[0m\\n\",\n\t\t\t\t\t\t\"Variable reference_velocity has no assigned value in the settings file.\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[34m    will default to the value: 1.0\\u001b[0m\\n\",\n\t\t\t\t\t\t\"Variable display_root_locus has no assigned value in the settings file.\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[34m    will default to the value: False\\u001b[0m\\n\",\n\t\t\t\t\t\t\"Variable velocity_analysis has no assigned value in the settings file.\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[34m    will default to the value: []\\u001b[0m\\n\",\n\t\t\t\t\t\t\"Variable iterative_eigvals has no assigned value in the settings file.\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[34m    will default to the value: False\\u001b[0m\\n\",\n\t\t\t\t\t\t\"Variable modes_to_plot has no assigned value in the settings file.\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[34m    will default to the value: []\\u001b[0m\\n\",\n\t\t\t\t\t\t\"Variable postprocessors has no assigned value in the settings file.\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[34m    will default to the value: []\\u001b[0m\\n\",\n\t\t\t\t\t\t\"Variable postprocessors_settings has no assigned value in the settings file.\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[34m    will default to the value: {}\\u001b[0m\\n\",\n\t\t\t\t\t\t\"Dynamical System Eigenvalues\\u001b[0m\\n\",\n\t\t\t\t\t\t\"Calculating eigenvalues using direct method\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[0m\\n\",\n\t\t\t\t\t\t\"|==============|==============|==============|==============|==============|==============|==============|\\u001b[0m\\n\",\n\t\t\t\t\t\t\"|     mode     |  eval_real   |  eval_imag   | freq_n (Hz)  | freq_d (Hz)  |   damping    |  period (s)  |\\u001b[0m\\n\",\n\t\t\t\t\t\t\"|==============|==============|==============|==============|==============|==============|==============|\\u001b[0m\\n\",\n\t\t\t\t\t\t\"|      0       |   0.000000   |   0.000000   |   0.000000   |   0.000000   |   1.000000   |     inf      |\\u001b[0m\\n\",\n\t\t\t\t\t\t\"|      1       |   0.000000   |   0.000000   |   0.000000   |   0.000000   |   1.000000   |     inf      |\\u001b[0m\\n\",\n\t\t\t\t\t\t\"|      2       |   0.000000   |   0.000000   |   0.000000   |   0.000000   |   1.000000   |     inf      |\\u001b[0m\\n\",\n\t\t\t\t\t\t\"|      3       |   0.000000   |   0.000000   |   0.000000   |   0.000000   |   1.000000   |     inf      |\\u001b[0m\\n\",\n\t\t\t\t\t\t\"|      4       |   0.000000   |   0.000000   |   0.000000   |   0.000000   |   1.000000   |     inf      |\\u001b[0m\\n\",\n\t\t\t\t\t\t\"|      5       |   0.000000   |   0.000000   |   0.000000   |   0.000000   |   1.000000   |     inf      |\\u001b[0m\\n\",\n\t\t\t\t\t\t\"|      6       |   0.000000   |   0.000000   |   0.000000   |   0.000000   |   1.000000   |     inf      |\\u001b[0m\\n\",\n\t\t\t\t\t\t\"|      7       |   0.000000   |   0.000000   |   0.000000   |   0.000000   |   1.000000   |     inf      |\\u001b[0m\\n\",\n\t\t\t\t\t\t\"|      8       |   0.000000   |   0.000000   |   0.000000   |   0.000000   |   1.000000   |     inf      |\\u001b[0m\\n\",\n\t\t\t\t\t\t\"|      9       |  -0.000000   |   0.000000   |   0.000000   |   0.000000   |   1.000000   |     inf      |\\u001b[0m\\n\",\n\t\t\t\t\t\t\"|      10      |  -0.000884   |  -0.321712   |   0.051202   |   0.051202   |   0.002747   |  19.530439   |\\u001b[0m\\n\",\n\t\t\t\t\t\t\"|      11      |  -0.000884   |   0.321712   |   0.051202   |   0.051202   |   0.002747   |  19.530439   |\\u001b[0m\\n\",\n\t\t\t\t\t\t\"|      12      |  -0.008470   |  -0.391287   |   0.062290   |   0.062275   |   0.021642   |  16.057731   |\\u001b[0m\\n\",\n\t\t\t\t\t\t\"|      13      |  -0.008470   |   0.391287   |   0.062290   |   0.062275   |   0.021642   |  16.057731   |\\u001b[0m\\n\",\n\t\t\t\t\t\t\"|      14      |  -0.022506   |   0.000000   |   0.003582   |   0.000000   |   1.000000   |     inf      |\\u001b[0m\\n\",\n\t\t\t\t\t\t\"|      15      |  -0.064808   |  -53.732514  |   8.551801   |   8.551795   |   0.001206   |   0.116935   |\\u001b[0m\\n\",\n\t\t\t\t\t\t\"|      16      |  -0.064808   |  53.732514   |   8.551801   |   8.551795   |   0.001206   |   0.116935   |\\u001b[0m\\n\",\n\t\t\t\t\t\t\"|      17      |  -0.101946   |  68.319141   |  10.873341   |  10.873329   |   0.001492   |   0.091968   |\\u001b[0m\\n\",\n\t\t\t\t\t\t\"|      18      |  -0.101946   |  -68.319141  |  10.873341   |  10.873329   |   0.001492   |   0.091968   |\\u001b[0m\\n\",\n\t\t\t\t\t\t\"|      19      |  -0.147587   |  83.265282   |  13.252102   |  13.252081   |   0.001772   |   0.075460   |\\u001b[0m\\n\",\n\t\t\t\t\t\t\"|      20      |  -0.147587   |  -83.265282  |  13.252102   |  13.252081   |   0.001772   |   0.075460   |\\u001b[0m\\n\",\n\t\t\t\t\t\t\"|      21      |  -0.248703   | -109.925782  |  17.495276   |  17.495232   |   0.002262   |   0.057158   |\\u001b[0m\\n\",\n\t\t\t\t\t\t\"|      22      |  -0.248703   |  109.925782  |  17.495276   |  17.495232   |   0.002262   |   0.057158   |\\u001b[0m\\n\",\n\t\t\t\t\t\t\"|      23      |  -0.293472   |  120.387631  |  19.160344   |  19.160287   |   0.002438   |   0.052191   |\\u001b[0m\\n\",\n\t\t\t\t\t\t\"|      24      |  -0.293472   | -120.387631  |  19.160344   |  19.160287   |   0.002438   |   0.052191   |\\u001b[0m\\n\",\n\t\t\t\t\t\t\"|      25      |  -0.350319   |  132.903280  |  21.152288   |  21.152214   |   0.002636   |   0.047276   |\\u001b[0m\\n\",\n\t\t\t\t\t\t\"|      26      |  -0.350319   | -132.903280  |  21.152288   |  21.152214   |   0.002636   |   0.047276   |\\u001b[0m\\n\",\n\t\t\t\t\t\t\"|      27      |  -0.376401   |  138.516954  |  22.045739   |  22.045658   |   0.002717   |   0.045360   |\\u001b[0m\\n\",\n\t\t\t\t\t\t\"|      28      |  -0.376401   | -138.516954  |  22.045739   |  22.045658   |   0.002717   |   0.045360   |\\u001b[0m\\n\",\n\t\t\t\t\t\t\"|      29      |  -0.494445   |  162.714232  |  25.896894   |  25.896774   |   0.003039   |   0.038615   |\\u001b[0m\\n\",\n\t\t\t\t\t\t\"|      30      |  -0.494445   | -162.714232  |  25.896894   |  25.896774   |   0.003039   |   0.038615   |\\u001b[0m\\n\",\n\t\t\t\t\t\t\"|      31      |  -0.511651   | -166.238306  |  26.457773   |  26.457648   |   0.003078   |   0.037796   |\\u001b[0m\\n\",\n\t\t\t\t\t\t\"|      32      |  -0.511651   |  166.238306  |  26.457773   |  26.457648   |   0.003078   |   0.037796   |\\u001b[0m\\n\",\n\t\t\t\t\t\t\"|      33      |  -0.559180   |  175.709816  |  27.965227   |  27.965086   |   0.003182   |   0.035759   |\\u001b[0m\\n\",\n\t\t\t\t\t\t\"|      34      |  -0.559180   | -175.709816  |  27.965227   |  27.965086   |   0.003182   |   0.035759   |\\u001b[0m\\n\",\n\t\t\t\t\t\t\"|      35      |  -0.569755   |  177.873274  |  28.309556   |  28.309411   |   0.003203   |   0.035324   |\\u001b[0m\\n\",\n\t\t\t\t\t\t\"|      36      |  -0.569755   | -177.873274  |  28.309556   |  28.309411   |   0.003203   |   0.035324   |\\u001b[0m\\n\",\n\t\t\t\t\t\t\"|      37      |  -0.669914   | -197.999020  |  31.512703   |  31.512523   |   0.003383   |   0.031733   |\\u001b[0m\\n\",\n\t\t\t\t\t\t\"|      38      |  -0.669914   |  197.999020  |  31.512703   |  31.512523   |   0.003383   |   0.031733   |\\u001b[0m\\n\",\n\t\t\t\t\t\t\"|      39      |  -0.678424   |  199.782714  |  31.796590   |  31.796406   |   0.003396   |   0.031450   |\\u001b[0m\\n\",\n\t\t\t\t\t\t\"|      40      |  -0.678424   | -199.782714  |  31.796590   |  31.796406   |   0.003396   |   0.031450   |\\u001b[0m\\n\",\n\t\t\t\t\t\t\"|      41      |  -0.715684   |  207.440562  |  33.015387   |  33.015191   |   0.003450   |   0.030289   |\\u001b[0m\\n\",\n\t\t\t\t\t\t\"|      42      |  -0.715684   | -207.440562  |  33.015387   |  33.015191   |   0.003450   |   0.030289   |\\u001b[0m\\n\",\n\t\t\t\t\t\t\"|      43      |  -0.721193   | -208.623018  |  33.203583   |  33.203385   |   0.003457   |   0.030117   |\\u001b[0m\\n\",\n\t\t\t\t\t\t\"|      44      |  -0.721193   |  208.623018  |  33.203583   |  33.203385   |   0.003457   |   0.030117   |\\u001b[0m\\n\",\n\t\t\t\t\t\t\"|      45      |  -0.796838   | -224.809928  |  35.779836   |  35.779611   |   0.003544   |   0.027949   |\\u001b[0m\\n\",\n\t\t\t\t\t\t\"|      46      |  -0.796838   |  224.809928  |  35.779836   |  35.779611   |   0.003544   |   0.027949   |\\u001b[0m\\n\",\n\t\t\t\t\t\t\"|      47      |  -0.801462   | -225.851223  |  35.945565   |  35.945339   |   0.003549   |   0.027820   |\\u001b[0m\\n\",\n\t\t\t\t\t\t\"|      48      |  -0.801462   |  225.851223  |  35.945565   |  35.945339   |   0.003549   |   0.027820   |\\u001b[0m\\n\",\n\t\t\t\t\t\t\"|      49      |  -0.823218   |  257.880058  |  41.043095   |  41.042886   |   0.003192   |   0.024365   |\\u001b[0m\\n\",\n\t\t\t\t\t\t\"|      50      |  -0.823218   | -257.880058  |  41.043095   |  41.042886   |   0.003192   |   0.024365   |\\u001b[0m\\n\",\n\t\t\t\t\t\t\"|      51      |  -0.829849   |  232.223377  |  36.959734   |  36.959498   |   0.003573   |   0.027057   |\\u001b[0m\\n\",\n\t\t\t\t\t\t\"|      52      |  -0.829849   | -232.223377  |  36.959734   |  36.959498   |   0.003573   |   0.027057   |\\u001b[0m\\n\",\n\t\t\t\t\t\t\"|      53      |  -0.833132   |  232.986723  |  37.081226   |  37.080989   |   0.003576   |   0.026968   |\\u001b[0m\\n\",\n\t\t\t\t\t\t\"|      54      |  -0.833132   | -232.986723  |  37.081226   |  37.080989   |   0.003576   |   0.026968   |\\u001b[0m\\n\",\n\t\t\t\t\t\t\"|      55      |  -0.837692   |  252.830750  |  40.239484   |  40.239264   |   0.003313   |   0.024851   |\\u001b[0m\\n\",\n\t\t\t\t\t\t\"|      56      |  -0.837692   | -252.830750  |  40.239484   |  40.239264   |   0.003313   |   0.024851   |\\u001b[0m\\n\",\n\t\t\t\t\t\t\"|      57      |  -0.843057   | -274.636584  |  43.709976   |  43.709770   |   0.003070   |   0.022878   |\\u001b[0m\\n\",\n\t\t\t\t\t\t\"|      58      |  -0.843057   |  274.636584  |  43.709976   |  43.709770   |   0.003070   |   0.022878   |\\u001b[0m\\n\",\n\t\t\t\t\t\t\"|      59      |  -0.855990   | -264.468496  |  42.091689   |  42.091468   |   0.003237   |   0.023758   |\\u001b[0m\\n\",\n\t\t\t\t\t\t\"|      60      |  -0.855990   |  264.468496  |  42.091689   |  42.091468   |   0.003237   |   0.023758   |\\u001b[0m\\n\",\n\t\t\t\t\t\t\"|      61      |  -0.864725   |  271.184095  |  43.160509   |  43.160289   |   0.003189   |   0.023169   |\\u001b[0m\\n\",\n\t\t\t\t\t\t\"|      62      |  -0.864725   | -271.184095  |  43.160509   |  43.160289   |   0.003189   |   0.023169   |\\u001b[0m\\n\",\n\t\t\t\t\t\t\"|      63      |  -0.871325   | -283.421756  |  45.108187   |  45.107973   |   0.003074   |   0.022169   |\\u001b[0m\\n\",\n\t\t\t\t\t\t\"|      64      |  -0.871325   |  283.421756  |  45.108187   |  45.107973   |   0.003074   |   0.022169   |\\u001b[0m\\n\",\n\t\t\t\t\t\t\"|      65      |  -0.878445   |  267.336890  |  42.548217   |  42.547987   |   0.003286   |   0.023503   |\\u001b[0m\\n\",\n\t\t\t\t\t\t\"|      66      |  -0.878445   | -267.336890  |  42.548217   |  42.547987   |   0.003286   |   0.023503   |\\u001b[0m\\n\",\n\t\t\t\t\t\t\"|      67      |  -0.882869   | -280.833495  |  44.696260   |  44.696039   |   0.003144   |   0.022373   |\\u001b[0m\\n\",\n\t\t\t\t\t\t\"|      68      |  -0.882869   |  280.833495  |  44.696260   |  44.696039   |   0.003144   |   0.022373   |\\u001b[0m\\n\",\n\t\t\t\t\t\t\"|      69      |  -0.884024   | -245.027542  |  38.997598   |  38.997344   |   0.003608   |   0.025643   |\\u001b[0m\\n\",\n\t\t\t\t\t\t\"|      70      |  -0.884024   |  245.027542  |  38.997598   |  38.997344   |   0.003608   |   0.025643   |\\u001b[0m\\n\",\n\t\t\t\t\t\t\"|      71      |  -0.886589   | -245.661879  |  39.098557   |  39.098302   |   0.003609   |   0.025577   |\\u001b[0m\\n\",\n\t\t\t\t\t\t\"|      72      |  -0.886589   |  245.661879  |  39.098557   |  39.098302   |   0.003609   |   0.025577   |\\u001b[0m\\n\",\n\t\t\t\t\t\t\"|      73      |  -0.891210   | -288.915188  |  45.982499   |  45.982280   |   0.003085   |   0.021748   |\\u001b[0m\\n\",\n\t\t\t\t\t\t\"|      74      |  -0.891210   |  288.915188  |  45.982499   |  45.982280   |   0.003085   |   0.021748   |\\u001b[0m\\n\",\n\t\t\t\t\t\t\"|      75      |  -0.908699   |  251.206723  |  39.981053   |  39.980792   |   0.003617   |   0.025012   |\\u001b[0m\\n\",\n\t\t\t\t\t\t\"|      76      |  -0.908699   | -251.206723  |  39.981053   |  39.980792   |   0.003617   |   0.025012   |\\u001b[0m\\n\",\n\t\t\t\t\t\t\"|      77      |  -0.910251   | -251.606127  |  40.044621   |  40.044359   |   0.003618   |   0.024972   |\\u001b[0m\\n\",\n\t\t\t\t\t\t\"|      78      |  -0.910251   |  251.606127  |  40.044621   |  40.044359   |   0.003618   |   0.024972   |\\u001b[0m\\n\",\n\t\t\t\t\t\t\"|      79      |  -0.914184   | -241.156682  |  38.381554   |  38.381278   |   0.003791   |   0.026054   |\\u001b[0m\\n\",\n\t\t\t\t\t\t\"|      80      |  -0.914184   |  241.156682  |  38.381554   |  38.381278   |   0.003791   |   0.026054   |\\u001b[0m\\n\",\n\t\t\t\t\t\t\"|      81      |  -0.915395   |  290.517030  |  46.237451   |  46.237221   |   0.003151   |   0.021628   |\\u001b[0m\\n\",\n\t\t\t\t\t\t\"|      82      |  -0.915395   | -290.517030  |  46.237451   |  46.237221   |   0.003151   |   0.021628   |\\u001b[0m\\n\",\n\t\t\t\t\t\t\"|      83      |  -0.933974   | -278.955360  |  44.397373   |  44.397124   |   0.003348   |   0.022524   |\\u001b[0m\\n\",\n\t\t\t\t\t\t\"|      84      |  -0.933974   |  278.955360  |  44.397373   |  44.397124   |   0.003348   |   0.022524   |\\u001b[0m\\n\",\n\t\t\t\t\t\t\"|      85      |  -0.943144   | -260.320871  |  41.431625   |  41.431353   |   0.003623   |   0.024136   |\\u001b[0m\\n\",\n\t\t\t\t\t\t\"|      86      |  -0.943144   |  260.320871  |  41.431625   |  41.431353   |   0.003623   |   0.024136   |\\u001b[0m\\n\",\n\t\t\t\t\t\t\"|      87      |  -0.944542   | -260.700481  |  41.492043   |  41.491770   |   0.003623   |   0.024101   |\\u001b[0m\\n\",\n\t\t\t\t\t\t\"|      88      |  -0.944542   |  260.700481  |  41.492043   |  41.491770   |   0.003623   |   0.024101   |\\u001b[0m\\n\",\n\t\t\t\t\t\t\"|      89      |  -0.953003   | -294.814043  |  46.921357   |  46.921112   |   0.003233   |   0.021312   |\\u001b[0m\\n\",\n\t\t\t\t\t\t\"|      90      |  -0.953003   |  294.814043  |  46.921357   |  46.921112   |   0.003233   |   0.021312   |\\u001b[0m\\n\",\n\t\t\t\t\t\t\"|      91      |  -0.960626   | -295.652742  |  47.054844   |  47.054595   |   0.003249   |   0.021252   |\\u001b[0m\\n\",\n\t\t\t\t\t\t\"|      92      |  -0.960626   |  295.652742  |  47.054844   |  47.054595   |   0.003249   |   0.021252   |\\u001b[0m\\n\",\n\t\t\t\t\t\t\"|      93      |  -0.960976   | -265.315963  |  42.226624   |  42.226347   |   0.003622   |   0.023682   |\\u001b[0m\\n\",\n\t\t\t\t\t\t\"|      94      |  -0.960976   |  265.315963  |  42.226624   |  42.226347   |   0.003622   |   0.023682   |\\u001b[0m\\n\",\n\t\t\t\t\t\t\"|      95      |  -0.961739   |  300.017779  |  47.749558   |  47.749313   |   0.003206   |   0.020943   |\\u001b[0m\\n\",\n\t\t\t\t\t\t\"|      96      |  -0.961739   | -300.017779  |  47.749558   |  47.749313   |   0.003206   |   0.020943   |\\u001b[0m\\n\",\n\t\t\t\t\t\t\"|      97      |  -0.961940   | -265.596058  |  42.271203   |  42.270925   |   0.003622   |   0.023657   |\\u001b[0m\\n\",\n\t\t\t\t\t\t\"|      98      |  -0.961940   |  265.596058  |  42.271203   |  42.270925   |   0.003622   |   0.023657   |\\u001b[0m\\n\",\n\t\t\t\t\t\t\"|      99      |  -0.965385   | -266.582863  |  42.428259   |  42.427980   |   0.003621   |   0.023569   |\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[36mFINISHED - Elapsed time = 16.3462206 seconds\\u001b[0m\\n\",\n\t\t\t\t\t\t\"\\u001b[36mFINISHED - CPU process time = 68.0131146 seconds\\u001b[0m\\n\"\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t],\n\t\t\t\"source\": [\n\t\t\t\t\"data = sharpy.sharpy_main.main(['', ws.case_route + '/' + ws.case_name + '.sharpy'])\"\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\t\"cell_type\": \"markdown\",\n\t\t\t\"metadata\": {},\n\t\t\t\"source\": [\n\t\t\t\t\"## Post-processing\"\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\t\"cell_type\": \"markdown\",\n\t\t\t\"metadata\": {},\n\t\t\t\"source\": [\n\t\t\t\t\"### Nonlinear Equilibrium\\n\",\n\t\t\t\t\"\\n\",\n\t\t\t\t\"The files can be opened with Paraview to see the deformation and aerodynamic loading on the flying wing in trim conditions.\"\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\t\"cell_type\": \"markdown\",\n\t\t\t\"metadata\": {},\n\t\t\t\"source\": [\n\t\t\t\t\"### Asymptotic Stability\"\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\t\"cell_type\": \"code\",\n\t\t\t\"execution_count\": 17,\n\t\t\t\"metadata\": {},\n\t\t\t\"outputs\": [],\n\t\t\t\"source\": [\n\t\t\t\t\"eigenvalues_trim = np.loadtxt('./output/horten_u_inf2800_M4N11Msf5/stability/eigenvalues.dat')\\n\"\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\t\"cell_type\": \"markdown\",\n\t\t\t\"metadata\": {},\n\t\t\t\"source\": [\n\t\t\t\t\"#### Flight Dynamics modes\\n\",\n\t\t\t\t\"\\n\",\n\t\t\t\t\"The flight dynamics modes can be found close to the origin of the Argand diagram. In particular, the phugoid is the mode that is closest to the imaginary axis. An exercise is left to the user to compare this phugoid predicition with the nonlinear response!\"\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\t\"cell_type\": \"code\",\n\t\t\t\"execution_count\": 18,\n\t\t\t\"metadata\": {},\n\t\t\t\"outputs\": [\n\t\t\t\t{\n\t\t\t\t\t\"data\": {\n\t\t\t\t\t\t\"image/png\": \"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\",\n\t\t\t\t\t\t\"text/plain\": [\n\t\t\t\t\t\t\t\"<Figure size 432x288 with 1 Axes>\"\n\t\t\t\t\t\t]\n\t\t\t\t\t},\n\t\t\t\t\t\"metadata\": {\n\t\t\t\t\t\t\"needs_background\": \"light\"\n\t\t\t\t\t},\n\t\t\t\t\t\"output_type\": \"display_data\"\n\t\t\t\t}\n\t\t\t],\n\t\t\t\"source\": [\n\t\t\t\t\"fig = plt.figure()\\n\",\n\t\t\t\t\"plt.scatter(eigenvalues_trim[:, 0], eigenvalues_trim[:, 1],\\n\",\n\t\t\t\t\"           marker='x',\\n\",\n\t\t\t\t\"           color='k')\\n\",\n\t\t\t\t\"plt.xlim(-0.5, 0.5)\\n\",\n\t\t\t\t\"plt.ylim(-0.5, 0.5)\\n\",\n\t\t\t\t\"plt.grid()\\n\",\n\t\t\t\t\"plt.xlabel('Real Part, $Re(\\\\lambda)$ [rad/s]')\\n\",\n\t\t\t\t\"plt.ylabel('Imaginary Part, $Im(\\\\lambda)$ [rad/s]');\"\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\t\"cell_type\": \"markdown\",\n\t\t\t\"metadata\": {},\n\t\t\t\"source\": [\n\t\t\t\t\"#### Structural Modes\\n\",\n\t\t\t\t\"\\n\",\n\t\t\t\t\"Looking further out on the plot, the structural modes appear. There is a curve given the Newmark-$\\\\beta$ integration scheme and on top of it several modes are damped by the presence of the aerodynamics.\\n\",\n\t\t\t\t\"\\n\",\n\t\t\t\t\"Try changing `newmark_damp` in the `LinearAssembler` settings to see how this plot changes!\"\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\t\"cell_type\": \"code\",\n\t\t\t\"execution_count\": 19,\n\t\t\t\"metadata\": {},\n\t\t\t\"outputs\": [\n\t\t\t\t{\n\t\t\t\t\t\"data\": {\n\t\t\t\t\t\t\"image/png\": \"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\",\n\t\t\t\t\t\t\"text/plain\": [\n\t\t\t\t\t\t\t\"<Figure size 432x288 with 1 Axes>\"\n\t\t\t\t\t\t]\n\t\t\t\t\t},\n\t\t\t\t\t\"metadata\": {\n\t\t\t\t\t\t\"needs_background\": \"light\"\n\t\t\t\t\t},\n\t\t\t\t\t\"output_type\": \"display_data\"\n\t\t\t\t}\n\t\t\t],\n\t\t\t\"source\": [\n\t\t\t\t\"fig = plt.figure()\\n\",\n\t\t\t\t\"plt.scatter(eigenvalues_trim[:, 0], eigenvalues_trim[:, 1],\\n\",\n\t\t\t\t\"           marker='x',\\n\",\n\t\t\t\t\"           color='k')\\n\",\n\t\t\t\t\"plt.xlim(-5, 0.5)\\n\",\n\t\t\t\t\"plt.ylim(-200, 200)\\n\",\n\t\t\t\t\"plt.grid()\\n\",\n\t\t\t\t\"plt.xlabel('Real Part, $Re(\\\\lambda)$ [rad/s]')\\n\",\n\t\t\t\t\"plt.ylabel('Imaginary Part, $Im(\\\\lambda)$ [rad/s]');\"\n\t\t\t]\n\t\t}\n\t],\n\t\"metadata\": {\n\t\t\"kernelspec\": {\n\t\t\t\"display_name\": \"Python 3\",\n\t\t\t\"language\": \"python\",\n\t\t\t\"name\": \"python3\"\n\t\t},\n\t\t\"language_info\": {\n\t\t\t\"codemirror_mode\": {\n\t\t\t\t\"name\": \"ipython\",\n\t\t\t\t\"version\": 3\n\t\t\t},\n\t\t\t\"file_extension\": \".py\",\n\t\t\t\"mimetype\": \"text/x-python\",\n\t\t\t\"name\": \"python\",\n\t\t\t\"nbconvert_exporter\": \"python\",\n\t\t\t\"pygments_lexer\": \"ipython3\",\n\t\t\t\"version\": \"3.7.5\"\n\t\t}\n\t},\n\t\"nbformat\": 4,\n\t\"nbformat_minor\": 4\n}\n"
  },
  {
    "path": "docs/source/content/example_notebooks/nonlinear_t-tail_HALE.ipynb",
    "content": "{\n \"cells\": [\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 1,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"%load_ext autoreload\\n\",\n    \"%autoreload 2\\n\",\n    \"%matplotlib inline\\n\",\n    \"%config InlineBackend.figure_format = 'svg'\\n\",\n    \"import numpy as np\\n\",\n    \"import matplotlib.pyplot as plt\\n\",\n    \"from IPython.display import Image\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"# T-Tail HALE Model tutorial\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"The HALE T-Tail model intends to be a representative example of a typical HALE configuration, with high flexibility and aspect-ratio.\\n\",\n    \"\\n\",\n    \"A geometry outline and a summary of the beam properties are given next\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 2,\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<img src=\\\"https://raw.githubusercontent.com/ImperialCollegeLondon/sharpy/dev_doc/docs/source/content/example_notebooks/images/t-tail_geometry.png\\\" width=\\\"800\\\"/>\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Image object>\"\n      ]\n     },\n     \"execution_count\": 2,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"url = 'https://raw.githubusercontent.com/ImperialCollegeLondon/sharpy/dev_doc/docs/source/content/example_notebooks/images/t-tail_geometry.png'\\n\",\n    \"Image(url=url, width=800)\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 3,\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<img src=\\\"https://raw.githubusercontent.com/ImperialCollegeLondon/sharpy/dev_doc/docs/source/content/example_notebooks/images/t-tail_properties.png\\\" width=\\\"500\\\"/>\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Image object>\"\n      ]\n     },\n     \"execution_count\": 3,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"url = 'https://raw.githubusercontent.com/ImperialCollegeLondon/sharpy/dev_doc/docs/source/content/example_notebooks/images/t-tail_properties.png'\\n\",\n    \"Image(url=url, width=500)\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"This case is included in `tests/coupled/simple_HALE/`. The `generate_hale.py` file in that folder is the one that, if executed, generates all the required SHARPy files. This document is a step by step guide to how to process that case.\\n\",\n    \"\\n\",\n    \"The T-Tail HALE model is subject to a 20% 1-cos spanwise constant gust.\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"First, let's start with importing SHARPy in our Python environment.\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 4,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"import sharpy\\n\",\n    \"import sharpy.sharpy_main as sharpy_main\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"And now the `generate_HALE.py` file needs to be executed.\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 5,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"route_to_case = '../../../../sharpy/cases/coupled/simple_HALE/'\\n\",\n    \"%run '../../../../sharpy/cases/coupled/simple_HALE/generate_hale.py'\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"There should be 3 new files, apart from the original `generate_hale.py`:\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 6,\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"name\": \"stdout\",\n     \"output_type\": \"stream\",\n     \"text\": [\n      \"__init__.py         \\u001b[34moutput\\u001b[m\\u001b[m              simple_HALE.fem.h5\\n\",\n      \"generate_hale.py    simple_HALE.aero.h5 simple_HALE.sharpy\\n\"\n     ]\n    }\n   ],\n   \"source\": [\n    \"!ls ../../../../sharpy/cases/coupled/simple_HALE/\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"SHARPy can be run now. In the terminal, doing `cd` to the `simple_HALE` folder, the command would look like:\\n\",\n    \"```\\n\",\n    \"sharpy simple_HALE.sharpy\\n\",\n    \"```\\n\",\n    \"\\n\",\n    \"From a python console with `import sharpy` already run, the command is:\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 7,\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"name\": \"stdout\",\n     \"output_type\": \"stream\",\n     \"text\": [\n      \"--------------------------------------------------------------------------------\\u001b[0m\\n\",\n      \"            ######  ##     ##    ###    ########  ########  ##    ##\\u001b[0m\\n\",\n      \"           ##    ## ##     ##   ## ##   ##     ## ##     ##  ##  ##\\u001b[0m\\n\",\n      \"           ##       ##     ##  ##   ##  ##     ## ##     ##   ####\\u001b[0m\\n\",\n      \"            ######  ######### ##     ## ########  ########     ##\\u001b[0m\\n\",\n      \"                 ## ##     ## ######### ##   ##   ##           ##\\u001b[0m\\n\",\n      \"           ##    ## ##     ## ##     ## ##    ##  ##           ##\\u001b[0m\\n\",\n      \"            ######  ##     ## ##     ## ##     ## ##           ##\\u001b[0m\\n\",\n      \"--------------------------------------------------------------------------------\\u001b[0m\\n\",\n      \"Aeroelastics Lab, Aeronautics Department.\\u001b[0m\\n\",\n      \"    Copyright (c), Imperial College London.\\u001b[0m\\n\",\n      \"    All rights reserved.\\u001b[0m\\n\",\n      \"    License available at https://github.com/imperialcollegelondon/sharpy\\u001b[0m\\n\",\n      \"\\u001b[36mRunning SHARPy from /home/ng213/2TB/pazy_code/pazy-sharpy/lib/sharpy/docs/source/content/example_notebooks\\u001b[0m\\n\",\n      \"\\u001b[36mSHARPy being run is in /home/ng213/2TB/pazy_code/pazy-sharpy/lib/sharpy\\u001b[0m\\n\",\n      \"\\u001b[36mThe branch being run is dev_setting_error\\u001b[0m\\n\",\n      \"\\u001b[36mThe version and commit hash are: v1.2.1-348-g402e87e-402e87e\\u001b[0m\\n\",\n      \"SHARPy output folder set\\u001b[0m\\n\",\n      \"\\u001b[34m\\t/home/ng213/2TB/pazy_code/pazy-sharpy/lib/sharpy/cases/coupled/simple_HALE//output//simple_HALE/\\u001b[0m\\n\",\n      \"\\u001b[36mGenerating an instance of BeamLoader\\u001b[0m\\n\",\n      \"Variable for_pos has no assigned value in the settings file.\\u001b[0m\\n\",\n      \"\\u001b[34m    will default to the value: [0.0, 0, 0]\\u001b[0m\\n\",\n      \"\\u001b[36mGenerating an instance of AerogridLoader\\u001b[0m\\n\",\n      \"Variable control_surface_deflection has no assigned value in the settings file.\\u001b[0m\\n\",\n      \"\\u001b[34m    will default to the value: []\\u001b[0m\\n\",\n      \"Variable control_surface_deflection_generator_settings has no assigned value in the settings file.\\u001b[0m\\n\",\n      \"\\u001b[34m    will default to the value: {}\\u001b[0m\\n\",\n      \"Variable dx1 has no assigned value in the settings file.\\u001b[0m\\n\",\n      \"\\u001b[34m    will default to the value: -1.0\\u001b[0m\\n\",\n      \"Variable ndx1 has no assigned value in the settings file.\\u001b[0m\\n\",\n      \"\\u001b[34m    will default to the value: 1\\u001b[0m\\n\",\n      \"Variable r has no assigned value in the settings file.\\u001b[0m\\n\",\n      \"\\u001b[34m    will default to the value: 1.0\\u001b[0m\\n\",\n      \"Variable dxmax has no assigned value in the settings file.\\u001b[0m\\n\",\n      \"\\u001b[34m    will default to the value: -1.0\\u001b[0m\\n\",\n      \"\\u001b[34mThe aerodynamic grid contains 5 surfaces\\u001b[0m\\n\",\n      \"\\u001b[34m  Surface 0, M=4, N=16\\u001b[0m\\n\",\n      \"     Wake 0, M=20, N=16\\u001b[0m\\n\",\n      \"\\u001b[34m  Surface 1, M=4, N=16\\u001b[0m\\n\",\n      \"     Wake 1, M=20, N=16\\u001b[0m\\n\",\n      \"\\u001b[34m  Surface 2, M=4, N=8\\u001b[0m\\n\",\n      \"     Wake 2, M=20, N=8\\u001b[0m\\n\",\n      \"\\u001b[34m  Surface 3, M=4, N=8\\u001b[0m\\n\",\n      \"     Wake 3, M=20, N=8\\u001b[0m\\n\",\n      \"\\u001b[34m  Surface 4, M=4, N=8\\u001b[0m\\n\",\n      \"     Wake 4, M=20, N=8\\u001b[0m\\n\",\n      \"  In total: 224 bound panels\\u001b[0m\\n\",\n      \"  In total: 1120 wake panels\\u001b[0m\\n\",\n      \"  Total number of panels = 1344\\u001b[0m\\n\",\n      \"\\u001b[36mGenerating an instance of StaticTrim\\u001b[0m\\n\",\n      \"Variable print_info has no assigned value in the settings file.\\u001b[0m\\n\",\n      \"\\u001b[34m    will default to the value: True\\u001b[0m\\n\",\n      \"Variable max_iter has no assigned value in the settings file.\\u001b[0m\\n\",\n      \"\\u001b[34m    will default to the value: 100\\u001b[0m\\n\",\n      \"Variable fz_tolerance has no assigned value in the settings file.\\u001b[0m\\n\",\n      \"\\u001b[34m    will default to the value: 0.01\\u001b[0m\\n\",\n      \"Variable fx_tolerance has no assigned value in the settings file.\\u001b[0m\\n\",\n      \"\\u001b[34m    will default to the value: 0.01\\u001b[0m\\n\",\n      \"Variable m_tolerance has no assigned value in the settings file.\\u001b[0m\\n\",\n      \"\\u001b[34m    will default to the value: 0.01\\u001b[0m\\n\",\n      \"Variable tail_cs_index has no assigned value in the settings file.\\u001b[0m\\n\",\n      \"\\u001b[34m    will default to the value: 0\\u001b[0m\\n\",\n      \"Variable thrust_nodes has no assigned value in the settings file.\\u001b[0m\\n\",\n      \"\\u001b[34m    will default to the value: [0]\\u001b[0m\\n\",\n      \"Variable initial_angle_eps has no assigned value in the settings file.\\u001b[0m\\n\",\n      \"\\u001b[34m    will default to the value: 0.05\\u001b[0m\\n\",\n      \"Variable initial_thrust_eps has no assigned value in the settings file.\\u001b[0m\\n\",\n      \"\\u001b[34m    will default to the value: 2.0\\u001b[0m\\n\",\n      \"Variable relaxation_factor has no assigned value in the settings file.\\u001b[0m\\n\",\n      \"\\u001b[34m    will default to the value: 0.2\\u001b[0m\\n\",\n      \"Variable save_info has no assigned value in the settings file.\\u001b[0m\\n\",\n      \"\\u001b[34m    will default to the value: False\\u001b[0m\\n\",\n      \"\\u001b[36mGenerating an instance of StaticCoupled\\u001b[0m\\n\",\n      \"Variable correct_forces_method has no assigned value in the settings file.\\u001b[0m\\n\",\n      \"\\u001b[34m    will default to the value: \\u001b[0m\\n\",\n      \"Variable runtime_generators has no assigned value in the settings file.\\u001b[0m\\n\",\n      \"\\u001b[34m    will default to the value: {}\\u001b[0m\\n\",\n      \"\\u001b[36mGenerating an instance of NonLinearStatic\\u001b[0m\\n\",\n      \"Variable newmark_damp has no assigned value in the settings file.\\u001b[0m\\n\",\n      \"\\u001b[34m    will default to the value: 0.0001\\u001b[0m\\n\",\n      \"Variable gravity_dir has no assigned value in the settings file.\\u001b[0m\\n\",\n      \"\\u001b[34m    will default to the value: [0.0, 0.0, 1.0]\\u001b[0m\\n\",\n      \"Variable relaxation_factor has no assigned value in the settings file.\\u001b[0m\\n\",\n      \"\\u001b[34m    will default to the value: 0.3\\u001b[0m\\n\",\n      \"Variable dt has no assigned value in the settings file.\\u001b[0m\\n\",\n      \"\\u001b[34m    will default to the value: 0.01\\u001b[0m\\n\",\n      \"Variable num_steps has no assigned value in the settings file.\\u001b[0m\\n\",\n      \"\\u001b[34m    will default to the value: 500\\u001b[0m\\n\",\n      \"Variable initial_position has no assigned value in the settings file.\\u001b[0m\\n\",\n      \"\\u001b[34m    will default to the value: [0. 0. 0.]\\u001b[0m\\n\",\n      \"\\u001b[36mGenerating an instance of StaticUvlm\\u001b[0m\\n\",\n      \"Variable iterative_solver has no assigned value in the settings file.\\u001b[0m\\n\",\n      \"\\u001b[34m    will default to the value: False\\u001b[0m\\n\",\n      \"Variable iterative_tol has no assigned value in the settings file.\\u001b[0m\\n\",\n      \"\\u001b[34m    will default to the value: 0.0001\\u001b[0m\\n\",\n      \"Variable iterative_precond has no assigned value in the settings file.\\u001b[0m\\n\",\n      \"\\u001b[34m    will default to the value: False\\u001b[0m\\n\",\n      \"Variable cfl1 has no assigned value in the settings file.\\u001b[0m\\n\",\n      \"\\u001b[34m    will default to the value: True\\u001b[0m\\n\",\n      \"Variable vortex_radius has no assigned value in the settings file.\\u001b[0m\\n\",\n      \"\\u001b[34m    will default to the value: 1e-06\\u001b[0m\\n\",\n      \"Variable vortex_radius_wake_ind has no assigned value in the settings file.\\u001b[0m\\n\",\n      \"\\u001b[34m    will default to the value: 1e-06\\u001b[0m\\n\",\n      \"Variable rbm_vel_g has no assigned value in the settings file.\\u001b[0m\\n\",\n      \"\\u001b[34m    will default to the value: [0.0, 0.0, 0.0, 0.0, 0.0, 0.0]\\u001b[0m\\n\",\n      \"Variable centre_rot_g has no assigned value in the settings file.\\u001b[0m\\n\",\n      \"\\u001b[34m    will default to the value: [0.0, 0.0, 0.0]\\u001b[0m\\n\",\n      \"\\u001b[0m\\n\",\n      \"\\u001b[0m\\n\",\n      \"\\u001b[0m\\n\",\n      \"|==========|==========|==========|==========|==========|==========|==========|==========|==========|==========|\\u001b[0m\\n\",\n      \"|   iter   |alpha[deg]|elev[deg] |  thrust  |    Fx    |    Fy    |    Fz    |    Mx    |    My    |    Mz    |\\u001b[0m\\n\",\n      \"|==========|==========|==========|==========|==========|==========|==========|==========|==========|==========|\\u001b[0m\\n\",\n      \"|    0     |  4.3100  | -2.0800  |  6.1600  | -0.3600  | -0.0000  |  0.8010  |  0.0000  | -0.6935  |  0.0000  |\\u001b[0m\\n\",\n      \"|    0     |  7.1748  | -4.9448  |  6.1600  | -27.8570 | -0.0000  | 280.1530 |  0.0000  |-105.5351 |  0.0000  |\\u001b[0m\\n\",\n      \"|    0     |  4.3100  |  0.7848  |  6.1600  | -2.4506  | -0.0000  | 38.7819  |  0.0000  |-377.3661 | -0.0000  |\\u001b[0m\\n\",\n      \"|    0     |  4.3100  | -2.0800  |  8.1600  | -2.3600  | -0.0000  |  0.8010  |  0.0000  | -0.6935  |  0.0000  |\\u001b[0m\\n\",\n      \"|    1     |  4.3018  | -2.0771  |  5.8000  |  0.0660  |  0.0000  | -0.2782  | -0.0000  |  0.2446  |  0.0000  |\\u001b[0m\\n\",\n      \"|    2     |  4.3039  | -2.0778  |  5.8558  | -0.0068  | -0.0000  |  0.0003  |  0.0000  |  0.0008  |  0.0000  |\\u001b[0m\\n\",\n      \"\\u001b[36mGenerating an instance of BeamLoads\\u001b[0m\\n\",\n      \"Variable output_file_name has no assigned value in the settings file.\\u001b[0m\\n\",\n      \"\\u001b[34m    will default to the value: beam_loads\\u001b[0m\\n\",\n      \"\\u001b[36mGenerating an instance of AerogridPlot\\u001b[0m\\n\",\n      \"Variable include_unsteady_applied_forces has no assigned value in the settings file.\\u001b[0m\\n\",\n      \"\\u001b[34m    will default to the value: False\\u001b[0m\\n\",\n      \"Variable name_prefix has no assigned value in the settings file.\\u001b[0m\\n\",\n      \"\\u001b[34m    will default to the value: \\u001b[0m\\n\",\n      \"Variable include_velocities has no assigned value in the settings file.\\u001b[0m\\n\",\n      \"\\u001b[34m    will default to the value: False\\u001b[0m\\n\",\n      \"Variable include_incidence_angle has no assigned value in the settings file.\\u001b[0m\\n\",\n      \"\\u001b[34m    will default to the value: False\\u001b[0m\\n\",\n      \"Variable num_cores has no assigned value in the settings file.\\u001b[0m\\n\",\n      \"\\u001b[34m    will default to the value: 1\\u001b[0m\\n\",\n      \"Variable vortex_radius has no assigned value in the settings file.\\u001b[0m\\n\",\n      \"\\u001b[34m    will default to the value: 1e-06\\u001b[0m\\n\",\n      \"\\u001b[34m...Finished\\u001b[0m\\n\",\n      \"\\u001b[36mGenerating an instance of BeamPlot\\u001b[0m\\n\",\n      \"Variable include_FoR has no assigned value in the settings file.\\u001b[0m\\n\",\n      \"\\u001b[34m    will default to the value: False\\u001b[0m\\n\",\n      \"Variable include_applied_moments has no assigned value in the settings file.\\u001b[0m\\n\",\n      \"\\u001b[34m    will default to the value: True\\u001b[0m\\n\",\n      \"Variable name_prefix has no assigned value in the settings file.\\u001b[0m\\n\",\n      \"\\u001b[34m    will default to the value: \\u001b[0m\\n\",\n      \"Variable output_rbm has no assigned value in the settings file.\\u001b[0m\\n\",\n      \"\\u001b[34m    will default to the value: True\\u001b[0m\\n\",\n      \"\\u001b[34m...Finished\\u001b[0m\\n\",\n      \"\\u001b[36mGenerating an instance of DynamicCoupled\\u001b[0m\\n\",\n      \"Variable print_info has no assigned value in the settings file.\\u001b[0m\\n\",\n      \"\\u001b[34m    will default to the value: True\\u001b[0m\\n\",\n      \"Variable structural_substeps has no assigned value in the settings file.\\u001b[0m\\n\",\n      \"\\u001b[34m    will default to the value: 0\\u001b[0m\\n\",\n      \"Variable dynamic_relaxation has no assigned value in the settings file.\\u001b[0m\\n\",\n      \"\\u001b[34m    will default to the value: False\\u001b[0m\\n\",\n      \"Variable controller_id has no assigned value in the settings file.\\u001b[0m\\n\",\n      \"\\u001b[34m    will default to the value: {}\\u001b[0m\\n\",\n      \"Variable controller_settings has no assigned value in the settings file.\\u001b[0m\\n\",\n      \"\\u001b[34m    will default to the value: {}\\u001b[0m\\n\",\n      \"Variable cleanup_previous_solution has no assigned value in the settings file.\\u001b[0m\\n\",\n      \"\\u001b[34m    will default to the value: False\\u001b[0m\\n\",\n      \"Variable steps_without_unsteady_force has no assigned value in the settings file.\\u001b[0m\\n\",\n      \"\\u001b[34m    will default to the value: 0\\u001b[0m\\n\",\n      \"Variable pseudosteps_ramp_unsteady_force has no assigned value in the settings file.\\u001b[0m\\n\",\n      \"\\u001b[34m    will default to the value: 0\\u001b[0m\\n\",\n      \"Variable correct_forces_method has no assigned value in the settings file.\\u001b[0m\\n\",\n      \"\\u001b[34m    will default to the value: \\u001b[0m\\n\",\n      \"Variable network_settings has no assigned value in the settings file.\\u001b[0m\\n\",\n      \"\\u001b[34m    will default to the value: {}\\u001b[0m\\n\",\n      \"Variable runtime_generators has no assigned value in the settings file.\\u001b[0m\\n\",\n      \"\\u001b[34m    will default to the value: {}\\u001b[0m\\n\",\n      \"\\u001b[36mGenerating an instance of NonLinearDynamicCoupledStep\\u001b[0m\\n\",\n      \"Variable num_load_steps has no assigned value in the settings file.\\u001b[0m\\n\",\n      \"\\u001b[34m    will default to the value: 1\\u001b[0m\\n\",\n      \"Variable gravity_dir has no assigned value in the settings file.\\u001b[0m\\n\",\n      \"\\u001b[34m    will default to the value: [0.0, 0.0, 1.0]\\u001b[0m\\n\",\n      \"Variable relaxation_factor has no assigned value in the settings file.\\u001b[0m\\n\",\n      \"\\u001b[34m    will default to the value: 0.3\\u001b[0m\\n\",\n      \"Variable balancing has no assigned value in the settings file.\\u001b[0m\\n\",\n      \"\\u001b[34m    will default to the value: False\\u001b[0m\\n\",\n      \"Variable initial_velocity_direction has no assigned value in the settings file.\\u001b[0m\\n\",\n      \"\\u001b[34m    will default to the value: [-1.0, 0.0, 0.0]\\u001b[0m\\n\",\n      \"\\u001b[36mGenerating an instance of StepUvlm\\u001b[0m\\n\",\n      \"Variable iterative_solver has no assigned value in the settings file.\\u001b[0m\\n\",\n      \"\\u001b[34m    will default to the value: False\\u001b[0m\\n\",\n      \"Variable iterative_tol has no assigned value in the settings file.\\u001b[0m\\n\",\n      \"\\u001b[34m    will default to the value: 0.0001\\u001b[0m\\n\",\n      \"Variable iterative_precond has no assigned value in the settings file.\\u001b[0m\\n\",\n      \"\\u001b[34m    will default to the value: False\\u001b[0m\\n\",\n      \"Variable cfl1 has no assigned value in the settings file.\\u001b[0m\\n\",\n      \"\\u001b[34m    will default to the value: True\\u001b[0m\\n\",\n      \"Variable vortex_radius has no assigned value in the settings file.\\u001b[0m\\n\",\n      \"\\u001b[34m    will default to the value: 1e-06\\u001b[0m\\n\",\n      \"Variable vortex_radius_wake_ind has no assigned value in the settings file.\\u001b[0m\\n\",\n      \"\\u001b[34m    will default to the value: 1e-06\\u001b[0m\\n\",\n      \"Variable interp_coords has no assigned value in the settings file.\\u001b[0m\\n\",\n      \"\\u001b[34m    will default to the value: 0\\u001b[0m\\n\",\n      \"Variable filter_method has no assigned value in the settings file.\\u001b[0m\\n\",\n      \"\\u001b[34m    will default to the value: 0\\u001b[0m\\n\",\n      \"Variable interp_method has no assigned value in the settings file.\\u001b[0m\\n\",\n      \"\\u001b[34m    will default to the value: 0\\u001b[0m\\n\",\n      \"Variable yaw_slerp has no assigned value in the settings file.\\u001b[0m\\n\",\n      \"\\u001b[34m    will default to the value: 0.0\\u001b[0m\\n\",\n      \"Variable centre_rot has no assigned value in the settings file.\\u001b[0m\\n\",\n      \"\\u001b[34m    will default to the value: [0.0, 0.0, 0.0]\\u001b[0m\\n\",\n      \"Variable quasi_steady has no assigned value in the settings file.\\u001b[0m\\n\",\n      \"\\u001b[34m    will default to the value: False\\u001b[0m\\n\",\n      \"\\u001b[36mgamma_dot_filtering does not support even numbers.Changing 6 to 7\\u001b[0m\\n\",\n      \"\\u001b[36mGenerating an instance of BeamLoads\\u001b[0m\\n\",\n      \"Variable output_file_name has no assigned value in the settings file.\\u001b[0m\\n\",\n      \"\\u001b[34m    will default to the value: beam_loads\\u001b[0m\\n\",\n      \"\\u001b[36mGenerating an instance of BeamPlot\\u001b[0m\\n\",\n      \"Variable include_FoR has no assigned value in the settings file.\\u001b[0m\\n\",\n      \"\\u001b[34m    will default to the value: False\\u001b[0m\\n\",\n      \"Variable include_applied_moments has no assigned value in the settings file.\\u001b[0m\\n\",\n      \"\\u001b[34m    will default to the value: True\\u001b[0m\\n\",\n      \"Variable name_prefix has no assigned value in the settings file.\\u001b[0m\\n\",\n      \"\\u001b[34m    will default to the value: \\u001b[0m\\n\",\n      \"Variable output_rbm has no assigned value in the settings file.\\u001b[0m\\n\",\n      \"\\u001b[34m    will default to the value: True\\u001b[0m\\n\",\n      \"\\u001b[36mGenerating an instance of AerogridPlot\\u001b[0m\\n\",\n      \"Variable include_forward_motion has no assigned value in the settings file.\\u001b[0m\\n\",\n      \"\\u001b[34m    will default to the value: False\\u001b[0m\\n\",\n      \"Variable include_unsteady_applied_forces has no assigned value in the settings file.\\u001b[0m\\n\",\n      \"\\u001b[34m    will default to the value: False\\u001b[0m\\n\",\n      \"Variable name_prefix has no assigned value in the settings file.\\u001b[0m\\n\",\n      \"\\u001b[34m    will default to the value: \\u001b[0m\\n\",\n      \"Variable u_inf has no assigned value in the settings file.\\u001b[0m\\n\",\n      \"\\u001b[34m    will default to the value: 0.0\\u001b[0m\\n\",\n      \"Variable dt has no assigned value in the settings file.\\u001b[0m\\n\",\n      \"\\u001b[34m    will default to the value: 0.0\\u001b[0m\\n\",\n      \"Variable include_velocities has no assigned value in the settings file.\\u001b[0m\\n\",\n      \"\\u001b[34m    will default to the value: False\\u001b[0m\\n\",\n      \"Variable include_incidence_angle has no assigned value in the settings file.\\u001b[0m\\n\",\n      \"\\u001b[34m    will default to the value: False\\u001b[0m\\n\",\n      \"Variable num_cores has no assigned value in the settings file.\\u001b[0m\\n\",\n      \"\\u001b[34m    will default to the value: 1\\u001b[0m\\n\",\n      \"Variable vortex_radius has no assigned value in the settings file.\\u001b[0m\\n\",\n      \"\\u001b[34m    will default to the value: 1e-06\\u001b[0m\\n\",\n      \"\\u001b[0m\\n\",\n      \"\\u001b[0m\\n\",\n      \"\\u001b[0m\\n\",\n      \"|=======|========|======|==============|==============|==============|==============|==============|\\u001b[0m\\n\",\n      \"|  ts   |   t    | iter | struc ratio  |  iter time   | residual vel |  FoR_vel(x)  |  FoR_vel(z)  |\\u001b[0m\\n\",\n      \"|=======|========|======|==============|==============|==============|==============|==============|\\u001b[0m\\n\"\n     ]\n    },\n    {\n     \"name\": \"stderr\",\n     \"output_type\": \"stream\",\n     \"text\": [\n      \"/home/ng213/2TB/pazy_code/pazy-sharpy/lib/sharpy/sharpy/aero/utils/uvlmlib.py:264: RuntimeWarning: invalid value encountered in true_divide\\n\",\n      \"  flightconditions.uinf_direction = np.ctypeslib.as_ctypes(ts_info.u_ext[0][:, 0, 0]/flightconditions.uinf)\\n\",\n      \"/home/ng213/2TB/pazy_code/pazy-sharpy/lib/sharpy/sharpy/aero/utils/uvlmlib.py:325: RuntimeWarning: invalid value encountered in true_divide\\n\",\n      \"  flightconditions.uinf_direction = np.ctypeslib.as_ctypes(ts_info.u_ext[0][:, 0, 0]/flightconditions.uinf)\\n\"\n     ]\n    },\n    {\n     \"name\": \"stdout\",\n     \"output_type\": \"stream\",\n     \"text\": [\n      \"|   1   | 0.0250 |  2   |   0.660158   |   0.788767   |  -4.245993   |-9.971789e+00 |-7.504783e-01 |\\u001b[0m\\n\",\n      \"|   2   | 0.0500 |  3   |   0.698975   |   0.965136   |  -4.635143   |-9.971745e+00 |-7.505379e-01 |\\u001b[0m\\n\",\n      \"|   3   | 0.0750 |  2   |   0.699509   |   0.744684   |  -4.142638   |-9.971678e+00 |-7.506741e-01 |\\u001b[0m\\n\",\n      \"|   4   | 0.1000 |  2   |   0.702553   |   0.742001   |  -4.583042   |-9.971654e+00 |-7.508442e-01 |\\u001b[0m\\n\",\n      \"|   5   | 0.1250 |  1   |   0.705584   |   0.512845   |  -4.384776   |-9.971729e+00 |-7.509873e-01 |\\u001b[0m\\n\",\n      \"|   6   | 0.1500 |  2   |   0.710967   |   0.733027   |  -4.729199   |-9.971808e+00 |-7.510934e-01 |\\u001b[0m\\n\",\n      \"|   7   | 0.1750 |  1   |   0.717295   |   0.511901   |  -4.049012   |-9.971749e+00 |-7.511575e-01 |\\u001b[0m\\n\",\n      \"|   8   | 0.2000 |  1   |   0.687752   |   0.519393   |  -4.147149   |-9.971609e+00 |-7.511620e-01 |\\u001b[0m\\n\",\n      \"|   9   | 0.2250 |  1   |   0.657027   |   0.533608   |  -4.243231   |-9.971483e+00 |-7.511461e-01 |\\u001b[0m\\n\",\n      \"|  10   | 0.2500 |  1   |   0.650443   |   0.540742   |  -4.352169   |-9.971378e+00 |-7.511644e-01 |\\u001b[0m\\n\",\n      \"|  11   | 0.2750 |  1   |   0.656218   |   0.534101   |  -4.191190   |-9.971371e+00 |-7.511728e-01 |\\u001b[0m\\n\",\n      \"|  12   | 0.3000 |  1   |   0.671768   |   0.554114   |  -4.122823   |-9.971442e+00 |-7.511539e-01 |\\u001b[0m\\n\",\n      \"|  13   | 0.3250 |  1   |   0.656158   |   0.537498   |  -4.418002   |-9.971429e+00 |-7.511300e-01 |\\u001b[0m\\n\",\n      \"|  14   | 0.3500 |  1   |   0.704366   |   0.508580   |  -4.678378   |-9.971349e+00 |-7.510900e-01 |\\u001b[0m\\n\",\n      \"|  15   | 0.3750 |  1   |   0.719952   |   0.514705   |  -4.402185   |-9.971299e+00 |-7.510668e-01 |\\u001b[0m\\n\",\n      \"|  16   | 0.4000 |  1   |   0.705019   |   0.512428   |  -4.448460   |-9.971290e+00 |-7.510571e-01 |\\u001b[0m\\n\",\n      \"|  17   | 0.4250 |  1   |   0.713898   |   0.511336   |  -4.476767   |-9.971358e+00 |-7.510533e-01 |\\u001b[0m\\n\",\n      \"|  18   | 0.4500 |  1   |   0.715516   |   0.511316   |  -4.534268   |-9.971488e+00 |-7.510753e-01 |\\u001b[0m\\n\",\n      \"|  19   | 0.4750 |  1   |   0.709680   |   0.508300   |  -4.662816   |-9.971575e+00 |-7.510784e-01 |\\u001b[0m\\n\",\n      \"|  20   | 0.5000 |  2   |   0.704182   |   0.744397   |  -4.812376   |-9.971586e+00 |-7.510241e-01 |\\u001b[0m\\n\",\n      \"|  21   | 0.5250 |  3   |   0.708522   |   0.965943   |  -4.402757   |-9.971726e+00 |-7.507397e-01 |\\u001b[0m\\n\",\n      \"|  22   | 0.5500 |  4   |   0.708365   |   1.200794   |  -4.475885   |-9.972374e+00 |-7.497152e-01 |\\u001b[0m\\n\",\n      \"|  23   | 0.5750 |  4   |   0.708962   |   1.199187   |  -4.264700   |-9.973956e+00 |-7.471042e-01 |\\u001b[0m\\n\",\n      \"|  24   | 0.6000 |  4   |   0.709056   |   1.201371   |  -4.148547   |-9.977005e+00 |-7.417512e-01 |\\u001b[0m\\n\",\n      \"|  25   | 0.6250 |  4   |   0.707360   |   1.214448   |  -4.101431   |-9.982064e+00 |-7.323149e-01 |\\u001b[0m\\n\",\n      \"|  26   | 0.6500 |  4   |   0.707825   |   1.211973   |  -4.083226   |-9.989506e+00 |-7.173484e-01 |\\u001b[0m\\n\",\n      \"|  27   | 0.6750 |  4   |   0.705636   |   1.209574   |  -4.081045   |-9.999533e+00 |-6.954412e-01 |\\u001b[0m\\n\",\n      \"|  28   | 0.7000 |  4   |   0.702970   |   1.199970   |  -4.095091   |-1.001216e+01 |-6.653667e-01 |\\u001b[0m\\n\",\n      \"|  29   | 0.7250 |  4   |   0.705531   |   1.206136   |  -4.120431   |-1.002734e+01 |-6.261403e-01 |\\u001b[0m\\n\",\n      \"|  30   | 0.7500 |  4   |   0.702935   |   1.213436   |  -4.153507   |-1.004515e+01 |-5.771350e-01 |\\u001b[0m\\n\",\n      \"|  31   | 0.7750 |  4   |   0.698230   |   1.203890   |  -4.194909   |-1.006573e+01 |-5.180671e-01 |\\u001b[0m\\n\",\n      \"|  32   | 0.8000 |  4   |   0.703664   |   1.208508   |  -4.236529   |-1.008907e+01 |-4.489843e-01 |\\u001b[0m\\n\",\n      \"|  33   | 0.8250 |  4   |   0.701559   |   1.203176   |  -4.281618   |-1.011502e+01 |-3.702984e-01 |\\u001b[0m\\n\",\n      \"|  34   | 0.8500 |  4   |   0.700114   |   1.215140   |  -4.272027   |-1.014323e+01 |-2.827796e-01 |\\u001b[0m\\n\",\n      \"|  35   | 0.8750 |  4   |   0.701394   |   1.206869   |  -4.137638   |-1.017318e+01 |-1.875441e-01 |\\u001b[0m\\n\",\n      \"|  36   | 0.9000 |  4   |   0.698019   |   1.213434   |  -4.087979   |-1.020434e+01 |-8.606667e-02 |\\u001b[0m\\n\",\n      \"|  37   | 0.9250 |  4   |   0.697820   |   1.213205   |  -4.081173   |-1.023614e+01 | 1.986601e-02 |\\u001b[0m\\n\",\n      \"|  38   | 0.9500 |  4   |   0.692925   |   1.210431   |  -4.067952   |-1.026798e+01 | 1.282642e-01 |\\u001b[0m\\n\",\n      \"|  39   | 0.9750 |  4   |   0.692719   |   1.203242   |  -4.040392   |-1.029913e+01 | 2.371167e-01 |\\u001b[0m\\n\",\n      \"|  40   | 1.0000 |  4   |   0.695089   |   1.205393   |  -4.023531   |-1.032875e+01 | 3.445071e-01 |\\u001b[0m\\n\",\n      \"|  41   | 1.0250 |  5   |   0.696443   |   1.438348   |  -4.548408   |-1.035594e+01 | 4.482817e-01 |\\u001b[0m\\n\",\n      \"|  42   | 1.0500 |  5   |   0.699286   |   1.456647   |  -4.496733   |-1.037989e+01 | 5.458046e-01 |\\u001b[0m\\n\",\n      \"|  43   | 1.0750 |  5   |   0.693181   |   1.451422   |  -4.426046   |-1.040006e+01 | 6.342879e-01 |\\u001b[0m\\n\",\n      \"|  44   | 1.1000 |  5   |   0.672004   |   1.475300   |  -4.379701   |-1.041606e+01 | 7.112695e-01 |\\u001b[0m\\n\",\n      \"|  45   | 1.1250 |  5   |   0.672251   |   1.468131   |  -4.402469   |-1.042753e+01 | 7.747229e-01 |\\u001b[0m\\n\",\n      \"|  46   | 1.1500 |  5   |   0.689079   |   1.445732   |  -4.477108   |-1.043429e+01 | 8.230013e-01 |\\u001b[0m\\n\",\n      \"|  47   | 1.1750 |  5   |   0.690835   |   1.446807   |  -4.548994   |-1.043627e+01 | 8.549797e-01 |\\u001b[0m\\n\",\n      \"|  48   | 1.2000 |  5   |   0.692859   |   1.458130   |  -4.602614   |-1.043347e+01 | 8.701306e-01 |\\u001b[0m\\n\",\n      \"|  49   | 1.2250 |  5   |   0.692201   |   1.450715   |  -4.670662   |-1.042601e+01 | 8.683187e-01 |\\u001b[0m\\n\",\n      \"|  50   | 1.2500 |  4   |   0.692043   |   1.211332   |  -4.009458   |-1.041409e+01 | 8.498052e-01 |\\u001b[0m\\n\",\n      \"|  51   | 1.2750 |  5   |   0.691406   |   1.450458   |  -4.437774   |-1.039785e+01 | 8.153184e-01 |\\u001b[0m\\n\",\n      \"|  52   | 1.3000 |  5   |   0.690078   |   1.456433   |  -4.400817   |-1.037756e+01 | 7.658481e-01 |\\u001b[0m\\n\",\n      \"|  53   | 1.3250 |  5   |   0.642589   |   1.516374   |  -4.491993   |-1.035352e+01 | 7.027470e-01 |\\u001b[0m\\n\",\n      \"|  54   | 1.3500 |  5   |   0.636213   |   1.529562   |  -4.660919   |-1.032602e+01 | 6.277602e-01 |\\u001b[0m\\n\",\n      \"|  55   | 1.3750 |  4   |   0.654913   |   1.257229   |  -4.127066   |-1.029540e+01 | 5.429281e-01 |\\u001b[0m\\n\",\n      \"|  56   | 1.4000 |  4   |   0.690183   |   1.213338   |  -4.180862   |-1.026211e+01 | 4.504884e-01 |\\u001b[0m\\n\",\n      \"|  57   | 1.4250 |  4   |   0.690784   |   1.220024   |  -4.119756   |-1.022658e+01 | 3.526569e-01 |\\u001b[0m\\n\",\n      \"|  58   | 1.4500 |  4   |   0.693190   |   1.230164   |  -4.115756   |-1.018920e+01 | 2.516427e-01 |\\u001b[0m\\n\",\n      \"|  59   | 1.4750 |  4   |   0.689614   |   1.227466   |  -4.089544   |-1.015042e+01 | 1.494680e-01 |\\u001b[0m\\n\",\n      \"|  60   | 1.5000 |  4   |   0.686766   |   1.221660   |  -4.073221   |-1.011070e+01 | 4.789509e-02 |\\u001b[0m\\n\",\n      \"|  61   | 1.5250 |  4   |   0.688439   |   1.225181   |  -4.065044   |-1.007052e+01 |-5.142849e-02 |\\u001b[0m\\n\",\n      \"|  62   | 1.5500 |  4   |   0.686541   |   1.221131   |  -4.066648   |-1.003034e+01 |-1.468432e-01 |\\u001b[0m\\n\",\n      \"|  63   | 1.5750 |  4   |   0.649074   |   1.269069   |  -4.116776   |-9.990515e+00 |-2.367221e-01 |\\u001b[0m\\n\",\n      \"|  64   | 1.6000 |  4   |   0.634231   |   1.298771   |  -4.232749   |-9.951260e+00 |-3.197660e-01 |\\u001b[0m\\n\",\n      \"|  65   | 1.6250 |  4   |   0.631620   |   1.295939   |  -4.346372   |-9.912713e+00 |-3.949816e-01 |\\u001b[0m\\n\",\n      \"|  66   | 1.6500 |  4   |   0.676708   |   1.241231   |  -4.462283   |-9.875008e+00 |-4.616848e-01 |\\u001b[0m\\n\",\n      \"|  67   | 1.6750 |  4   |   0.690826   |   1.236500   |  -4.536211   |-9.838289e+00 |-5.194903e-01 |\\u001b[0m\\n\",\n      \"|  68   | 1.7000 |  4   |   0.685831   |   1.222472   |  -4.557395   |-9.802717e+00 |-5.683337e-01 |\\u001b[0m\\n\",\n      \"|  69   | 1.7250 |  4   |   0.683209   |   1.225972   |  -4.514445   |-9.768493e+00 |-6.084703e-01 |\\u001b[0m\\n\",\n      \"|  70   | 1.7500 |  4   |   0.681402   |   1.219586   |  -4.515767   |-9.735644e+00 |-6.403299e-01 |\\u001b[0m\\n\",\n      \"|  71   | 1.7750 |  4   |   0.679701   |   1.241776   |  -4.561782   |-9.704041e+00 |-6.644313e-01 |\\u001b[0m\\n\",\n      \"|  72   | 1.8000 |  4   |   0.687585   |   1.233221   |  -4.576978   |-9.673585e+00 |-6.813177e-01 |\\u001b[0m\\n\",\n      \"|  73   | 1.8250 |  3   |   0.685128   |   0.992525   |  -4.085489   |-9.644153e+00 |-6.916357e-01 |\\u001b[0m\\n\",\n      \"|  74   | 1.8500 |  3   |   0.630406   |   1.081735   |  -4.228827   |-9.615525e+00 |-6.960345e-01 |\\u001b[0m\\n\",\n      \"|  75   | 1.8750 |  3   |   0.633953   |   1.068277   |  -4.281040   |-9.587600e+00 |-6.952011e-01 |\\u001b[0m\\n\",\n      \"|  76   | 1.9000 |  3   |   0.631463   |   1.060051   |  -4.298619   |-9.560401e+00 |-6.899257e-01 |\\u001b[0m\\n\",\n      \"|  77   | 1.9250 |  3   |   0.641269   |   1.076329   |  -4.263283   |-9.533905e+00 |-6.810428e-01 |\\u001b[0m\\n\",\n      \"|  78   | 1.9500 |  3   |   0.632168   |   1.056881   |  -4.172553   |-9.508183e+00 |-6.694250e-01 |\\u001b[0m\\n\",\n      \"|  79   | 1.9750 |  3   |   0.644723   |   1.078860   |  -4.087294   |-9.483448e+00 |-6.559401e-01 |\\u001b[0m\\n\",\n      \"|  80   | 2.0000 |  3   |   0.629024   |   1.058206   |  -4.017983   |-9.459903e+00 |-6.414764e-01 |\\u001b[0m\\n\",\n      \"|  81   | 2.0250 |  4   |   0.641541   |   1.337528   |  -4.489993   |-9.437808e+00 |-6.269365e-01 |\\u001b[0m\\n\",\n      \"|  82   | 2.0500 |  4   |   0.628707   |   1.310679   |  -4.470211   |-9.417538e+00 |-6.131778e-01 |\\u001b[0m\\n\",\n      \"|  83   | 2.0750 |  4   |   0.628663   |   1.307533   |  -4.453642   |-9.399441e+00 |-6.009539e-01 |\\u001b[0m\\n\",\n      \"|  84   | 2.1000 |  4   |   0.631778   |   1.301269   |  -4.451153   |-9.383802e+00 |-5.909513e-01 |\\u001b[0m\\n\",\n      \"|  85   | 2.1250 |  4   |   0.629938   |   1.308679   |  -4.454054   |-9.370919e+00 |-5.837527e-01 |\\u001b[0m\\n\",\n      \"|  86   | 2.1500 |  4   |   0.630758   |   1.309061   |  -4.489244   |-9.361058e+00 |-5.798117e-01 |\\u001b[0m\\n\",\n      \"|  87   | 2.1750 |  4   |   0.630606   |   1.308830   |  -4.529495   |-9.354357e+00 |-5.794602e-01 |\\u001b[0m\\n\",\n      \"|  88   | 2.2000 |  4   |   0.629895   |   1.306216   |  -4.555062   |-9.350910e+00 |-5.828920e-01 |\\u001b[0m\\n\",\n      \"|  89   | 2.2250 |  4   |   0.627658   |   1.299544   |  -4.583501   |-9.350758e+00 |-5.901807e-01 |\\u001b[0m\\n\",\n      \"|  90   | 2.2500 |  4   |   0.631380   |   1.304904   |  -4.577435   |-9.353747e+00 |-6.012367e-01 |\\u001b[0m\\n\",\n      \"|  91   | 2.2750 |  3   |   0.632640   |   1.049719   |  -4.015225   |-9.359659e+00 |-6.158432e-01 |\\u001b[0m\\n\",\n      \"|  92   | 2.3000 |  3   |   0.677727   |   0.998599   |  -4.029324   |-9.368239e+00 |-6.336696e-01 |\\u001b[0m\\n\",\n      \"|  93   | 2.3250 |  3   |   0.681171   |   0.994001   |  -4.027658   |-9.379037e+00 |-6.542748e-01 |\\u001b[0m\\n\",\n      \"|  94   | 2.3500 |  3   |   0.681259   |   0.989943   |  -4.032139   |-9.391519e+00 |-6.771019e-01 |\\u001b[0m\\n\",\n      \"|  95   | 2.3750 |  3   |   0.662018   |   1.012158   |  -4.018542   |-9.405213e+00 |-7.015133e-01 |\\u001b[0m\\n\",\n      \"|  96   | 2.4000 |  4   |   0.649296   |   1.280039   |  -4.507534   |-9.419633e+00 |-7.269046e-01 |\\u001b[0m\\n\",\n      \"|  97   | 2.4250 |  4   |   0.643727   |   1.278447   |  -4.486197   |-9.434238e+00 |-7.525958e-01 |\\u001b[0m\\n\",\n      \"|  98   | 2.4500 |  4   |   0.626945   |   1.300289   |  -4.469752   |-9.448552e+00 |-7.778583e-01 |\\u001b[0m\\n\",\n      \"|  99   | 2.4750 |  4   |   0.630502   |   1.316456   |  -4.479896   |-9.462111e+00 |-8.020210e-01 |\\u001b[0m\\n\",\n      \"|  100  | 2.5000 |  4   |   0.624389   |   1.310294   |  -4.502345   |-9.474427e+00 |-8.243816e-01 |\\u001b[0m\\n\",\n      \"|  101  | 2.5250 |  4   |   0.631037   |   1.315843   |  -4.533404   |-9.485161e+00 |-8.442818e-01 |\\u001b[0m\\n\",\n      \"|  102  | 2.5500 |  4   |   0.644611   |   1.283856   |  -4.554463   |-9.494088e+00 |-8.611748e-01 |\\u001b[0m\\n\",\n      \"|  103  | 2.5750 |  4   |   0.680174   |   1.237591   |  -4.579594   |-9.501053e+00 |-8.746547e-01 |\\u001b[0m\\n\",\n      \"|  104  | 2.6000 |  4   |   0.680077   |   1.236782   |  -4.596771   |-9.506032e+00 |-8.844994e-01 |\\u001b[0m\\n\",\n      \"|  105  | 2.6250 |  4   |   0.675584   |   1.232872   |  -4.484950   |-9.509125e+00 |-8.907008e-01 |\\u001b[0m\\n\",\n      \"|  106  | 2.6500 |  4   |   0.678916   |   1.235079   |  -4.463714   |-9.510468e+00 |-8.934511e-01 |\\u001b[0m\\n\",\n      \"|  107  | 2.6750 |  4   |   0.677563   |   1.234071   |  -4.381520   |-9.510274e+00 |-8.931021e-01 |\\u001b[0m\\n\",\n      \"|  108  | 2.7000 |  4   |   0.674451   |   1.246872   |  -4.443680   |-9.508969e+00 |-8.901755e-01 |\\u001b[0m\\n\",\n      \"|  109  | 2.7250 |  4   |   0.680008   |   1.243277   |  -4.646030   |-9.507028e+00 |-8.852282e-01 |\\u001b[0m\\n\",\n      \"|  110  | 2.7500 |  3   |   0.687824   |   1.013889   |  -4.095041   |-9.504803e+00 |-8.787479e-01 |\\u001b[0m\\n\",\n      \"|  111  | 2.7750 |  3   |   0.678555   |   1.000272   |  -4.324971   |-9.502690e+00 |-8.711948e-01 |\\u001b[0m\\n\",\n      \"|  112  | 2.8000 |  3   |   0.629410   |   1.056518   |  -4.391682   |-9.501123e+00 |-8.630844e-01 |\\u001b[0m\\n\",\n      \"|  113  | 2.8250 |  3   |   0.631289   |   1.061790   |  -4.405523   |-9.500417e+00 |-8.548953e-01 |\\u001b[0m\\n\",\n      \"|  114  | 2.8500 |  3   |   0.623451   |   1.061574   |  -4.405133   |-9.500842e+00 |-8.469691e-01 |\\u001b[0m\\n\",\n      \"|  115  | 2.8750 |  3   |   0.629521   |   1.063894   |  -4.364937   |-9.502651e+00 |-8.395888e-01 |\\u001b[0m\\n\",\n      \"|  116  | 2.9000 |  3   |   0.625789   |   1.052592   |  -4.333192   |-9.505900e+00 |-8.329495e-01 |\\u001b[0m\\n\",\n      \"|  117  | 2.9250 |  3   |   0.634558   |   1.059645   |  -4.287009   |-9.510496e+00 |-8.271466e-01 |\\u001b[0m\\n\",\n      \"|  118  | 2.9500 |  3   |   0.676550   |   1.015943   |  -4.245942   |-9.516385e+00 |-8.222099e-01 |\\u001b[0m\\n\",\n      \"|  119  | 2.9750 |  3   |   0.680614   |   1.002676   |  -4.205825   |-9.523418e+00 |-8.181140e-01 |\\u001b[0m\\n\",\n      \"|  120  | 3.0000 |  3   |   0.682271   |   1.006870   |  -4.188187   |-9.531318e+00 |-8.148053e-01 |\\u001b[0m\\n\",\n      \"|  121  | 3.0250 |  3   |   0.680266   |   0.996102   |  -4.232299   |-9.539814e+00 |-8.121677e-01 |\\u001b[0m\\n\",\n      \"|  122  | 3.0500 |  3   |   0.681732   |   0.999955   |  -4.231690   |-9.548602e+00 |-8.100300e-01 |\\u001b[0m\\n\",\n      \"|  123  | 3.0750 |  3   |   0.682858   |   1.010936   |  -4.279188   |-9.557348e+00 |-8.082342e-01 |\\u001b[0m\\n\",\n      \"|  124  | 3.1000 |  3   |   0.681190   |   1.009030   |  -4.271080   |-9.565764e+00 |-8.066818e-01 |\\u001b[0m\\n\",\n      \"|  125  | 3.1250 |  3   |   0.683038   |   1.007188   |  -4.392752   |-9.573620e+00 |-8.052156e-01 |\\u001b[0m\\n\",\n      \"|  126  | 3.1500 |  3   |   0.678701   |   1.000200   |  -4.449904   |-9.580739e+00 |-8.036619e-01 |\\u001b[0m\\n\",\n      \"|  127  | 3.1750 |  2   |   0.676607   |   0.762312   |  -4.000854   |-9.587007e+00 |-8.019792e-01 |\\u001b[0m\\n\",\n      \"|  128  | 3.2000 |  3   |   0.676056   |   1.006674   |  -4.538007   |-9.592408e+00 |-8.001705e-01 |\\u001b[0m\\n\",\n      \"|  129  | 3.2250 |  3   |   0.675263   |   1.005720   |  -4.547103   |-9.596953e+00 |-7.981922e-01 |\\u001b[0m\\n\",\n      \"|  130  | 3.2500 |  3   |   0.676868   |   1.006415   |  -4.525018   |-9.600665e+00 |-7.960410e-01 |\\u001b[0m\\n\",\n      \"|  131  | 3.2750 |  3   |   0.675184   |   1.010851   |  -4.506300   |-9.603640e+00 |-7.937587e-01 |\\u001b[0m\\n\",\n      \"|  132  | 3.3000 |  3   |   0.672328   |   1.002885   |  -4.509537   |-9.606035e+00 |-7.913608e-01 |\\u001b[0m\\n\",\n      \"|  133  | 3.3250 |  3   |   0.671273   |   1.006276   |  -4.517757   |-9.608054e+00 |-7.889411e-01 |\\u001b[0m\\n\",\n      \"|  134  | 3.3500 |  2   |   0.667902   |   0.767805   |  -4.004169   |-9.609914e+00 |-7.866119e-01 |\\u001b[0m\\n\",\n      \"|  135  | 3.3750 |  2   |   0.672012   |   0.762166   |  -4.037206   |-9.611796e+00 |-7.844475e-01 |\\u001b[0m\\n\",\n      \"|  136  | 3.4000 |  2   |   0.674040   |   0.766492   |  -4.091199   |-9.613836e+00 |-7.825251e-01 |\\u001b[0m\\n\",\n      \"|  137  | 3.4250 |  2   |   0.677833   |   0.764682   |  -4.161763   |-9.616142e+00 |-7.808889e-01 |\\u001b[0m\\n\",\n      \"|  138  | 3.4500 |  2   |   0.678520   |   0.772371   |  -4.208416   |-9.618837e+00 |-7.795641e-01 |\\u001b[0m\\n\",\n      \"|  139  | 3.4750 |  2   |   0.675557   |   0.769200   |  -4.185191   |-9.622012e+00 |-7.786017e-01 |\\u001b[0m\\n\",\n      \"|  140  | 3.5000 |  2   |   0.658891   |   0.777941   |  -4.143336   |-9.625717e+00 |-7.780201e-01 |\\u001b[0m\\n\",\n      \"|  141  | 3.5250 |  2   |   0.670239   |   0.764967   |  -4.111505   |-9.629952e+00 |-7.777878e-01 |\\u001b[0m\\n\",\n      \"|  142  | 3.5500 |  2   |   0.675294   |   0.780672   |  -4.095589   |-9.634644e+00 |-7.778791e-01 |\\u001b[0m\\n\",\n      \"|  143  | 3.5750 |  2   |   0.674070   |   0.768821   |  -4.089987   |-9.639706e+00 |-7.782389e-01 |\\u001b[0m\\n\",\n      \"|  144  | 3.6000 |  2   |   0.675235   |   0.770859   |  -4.092880   |-9.645044e+00 |-7.787973e-01 |\\u001b[0m\\n\",\n      \"|  145  | 3.6250 |  2   |   0.667235   |   0.766770   |  -4.113065   |-9.650579e+00 |-7.794970e-01 |\\u001b[0m\\n\",\n      \"|  146  | 3.6500 |  2   |   0.664948   |   0.775005   |  -4.162262   |-9.656221e+00 |-7.802848e-01 |\\u001b[0m\\n\",\n      \"|  147  | 3.6750 |  2   |   0.669905   |   0.778505   |  -4.233073   |-9.661859e+00 |-7.810839e-01 |\\u001b[0m\\n\",\n      \"|  148  | 3.7000 |  2   |   0.673135   |   0.772653   |  -4.300425   |-9.667393e+00 |-7.818259e-01 |\\u001b[0m\\n\",\n      \"|  149  | 3.7250 |  2   |   0.668814   |   0.767011   |  -4.341062   |-9.672713e+00 |-7.824584e-01 |\\u001b[0m\\n\",\n      \"|  150  | 3.7500 |  2   |   0.667366   |   0.768942   |  -4.347827   |-9.677758e+00 |-7.829222e-01 |\\u001b[0m\\n\",\n      \"|  151  | 3.7750 |  2   |   0.671508   |   0.768175   |  -4.340552   |-9.682512e+00 |-7.832059e-01 |\\u001b[0m\\n\",\n      \"|  152  | 3.8000 |  2   |   0.657508   |   0.783694   |  -4.331623   |-9.686971e+00 |-7.832953e-01 |\\u001b[0m\\n\",\n      \"|  153  | 3.8250 |  2   |   0.672415   |   0.768370   |  -4.316722   |-9.691148e+00 |-7.831777e-01 |\\u001b[0m\\n\",\n      \"|  154  | 3.8500 |  2   |   0.677129   |   0.779227   |  -4.299262   |-9.695058e+00 |-7.828747e-01 |\\u001b[0m\\n\",\n      \"|  155  | 3.8750 |  2   |   0.673584   |   0.770337   |  -4.305853   |-9.698731e+00 |-7.823999e-01 |\\u001b[0m\\n\",\n      \"|  156  | 3.9000 |  2   |   0.665485   |   0.772028   |  -4.334291   |-9.702215e+00 |-7.817778e-01 |\\u001b[0m\\n\",\n      \"|  157  | 3.9250 |  2   |   0.666994   |   0.776969   |  -4.377407   |-9.705587e+00 |-7.810551e-01 |\\u001b[0m\\n\",\n      \"|  158  | 3.9500 |  2   |   0.665925   |   0.780606   |  -4.439104   |-9.708933e+00 |-7.802775e-01 |\\u001b[0m\\n\",\n      \"|  159  | 3.9750 |  2   |   0.670904   |   0.771282   |  -4.498475   |-9.712316e+00 |-7.794772e-01 |\\u001b[0m\\n\",\n      \"|  160  | 4.0000 |  1   |   0.671639   |   0.530210   |  -4.008078   |-9.715787e+00 |-7.786931e-01 |\\u001b[0m\\n\",\n      \"|  161  | 4.0250 |  1   |   0.670327   |   0.533749   |  -4.092355   |-9.719380e+00 |-7.779506e-01 |\\u001b[0m\\n\",\n      \"|  162  | 4.0500 |  1   |   0.668751   |   0.537579   |  -4.156978   |-9.723116e+00 |-7.772698e-01 |\\u001b[0m\\n\",\n      \"|  163  | 4.0750 |  1   |   0.663677   |   0.531485   |  -4.072783   |-9.727029e+00 |-7.766788e-01 |\\u001b[0m\\n\",\n      \"|  164  | 4.1000 |  2   |   0.666350   |   0.773267   |  -4.569537   |-9.731146e+00 |-7.761920e-01 |\\u001b[0m\\n\",\n      \"|  165  | 4.1250 |  2   |   0.682839   |   0.788505   |  -4.570174   |-9.735472e+00 |-7.758138e-01 |\\u001b[0m\\n\",\n      \"|  166  | 4.1500 |  2   |   0.620765   |   0.812113   |  -4.549853   |-9.739981e+00 |-7.755403e-01 |\\u001b[0m\\n\",\n      \"|  167  | 4.1750 |  2   |   0.618753   |   0.825905   |  -4.537868   |-9.744625e+00 |-7.753472e-01 |\\u001b[0m\\n\",\n      \"|  168  | 4.2000 |  2   |   0.618510   |   0.819368   |  -4.524976   |-9.749356e+00 |-7.752100e-01 |\\u001b[0m\\n\",\n      \"|  169  | 4.2250 |  2   |   0.613543   |   0.817032   |  -4.515910   |-9.754134e+00 |-7.751152e-01 |\\u001b[0m\\n\",\n      \"|  170  | 4.2500 |  2   |   0.614536   |   0.814042   |  -4.538699   |-9.758943e+00 |-7.750408e-01 |\\u001b[0m\\n\",\n      \"|  171  | 4.2750 |  1   |   0.625472   |   0.574294   |  -4.020787   |-9.763759e+00 |-7.749700e-01 |\\u001b[0m\\n\",\n      \"|  172  | 4.3000 |  1   |   0.608604   |   0.560485   |  -4.061045   |-9.768537e+00 |-7.748838e-01 |\\u001b[0m\\n\",\n      \"|  173  | 4.3250 |  1   |   0.613070   |   0.563931   |  -4.121220   |-9.773242e+00 |-7.747597e-01 |\\u001b[0m\\n\",\n      \"|  174  | 4.3500 |  1   |   0.642887   |   0.551584   |  -4.110854   |-9.777831e+00 |-7.745740e-01 |\\u001b[0m\\n\",\n      \"|  175  | 4.3750 |  1   |   0.666433   |   0.534772   |  -4.088306   |-9.782291e+00 |-7.743221e-01 |\\u001b[0m\\n\",\n      \"|  176  | 4.4000 |  1   |   0.673361   |   0.543510   |  -4.077439   |-9.786631e+00 |-7.740007e-01 |\\u001b[0m\\n\",\n      \"|  177  | 4.4250 |  1   |   0.675407   |   0.545999   |  -4.085008   |-9.790868e+00 |-7.736116e-01 |\\u001b[0m\\n\",\n      \"|  178  | 4.4500 |  1   |   0.663487   |   0.537923   |  -4.084174   |-9.795016e+00 |-7.731651e-01 |\\u001b[0m\\n\",\n      \"|  179  | 4.4750 |  1   |   0.656179   |   0.541705   |  -4.095747   |-9.799077e+00 |-7.726600e-01 |\\u001b[0m\\n\",\n      \"|  180  | 4.5000 |  1   |   0.665239   |   0.538480   |  -4.143039   |-9.803063e+00 |-7.721067e-01 |\\u001b[0m\\n\",\n      \"|  181  | 4.5250 |  1   |   0.671591   |   0.542443   |  -4.219653   |-9.806995e+00 |-7.715207e-01 |\\u001b[0m\\n\",\n      \"|  182  | 4.5500 |  1   |   0.663922   |   0.536485   |  -4.324315   |-9.810904e+00 |-7.709163e-01 |\\u001b[0m\\n\",\n      \"|  183  | 4.5750 |  1   |   0.657884   |   0.540013   |  -4.462694   |-9.814833e+00 |-7.703121e-01 |\\u001b[0m\\n\",\n      \"|  184  | 4.6000 |  1   |   0.664151   |   0.536879   |  -4.555594   |-9.818801e+00 |-7.697261e-01 |\\u001b[0m\\n\",\n      \"|  185  | 4.6250 |  1   |   0.664279   |   0.534583   |  -4.636689   |-9.822816e+00 |-7.691634e-01 |\\u001b[0m\\n\",\n      \"|  186  | 4.6500 |  1   |   0.663570   |   0.535142   |  -4.623202   |-9.826877e+00 |-7.686317e-01 |\\u001b[0m\\n\",\n      \"|  187  | 4.6750 |  1   |   0.654862   |   0.535068   |  -4.465982   |-9.830990e+00 |-7.681383e-01 |\\u001b[0m\\n\",\n      \"|  188  | 4.7000 |  1   |   0.664028   |   0.540949   |  -4.338112   |-9.835165e+00 |-7.676893e-01 |\\u001b[0m\\n\",\n      \"|  189  | 4.7250 |  1   |   0.663004   |   0.538335   |  -4.294846   |-9.839409e+00 |-7.672874e-01 |\\u001b[0m\\n\",\n      \"|  190  | 4.7500 |  1   |   0.661509   |   0.535572   |  -4.283904   |-9.843723e+00 |-7.669317e-01 |\\u001b[0m\\n\",\n      \"|  191  | 4.7750 |  1   |   0.667410   |   0.544977   |  -4.289664   |-9.848084e+00 |-7.666140e-01 |\\u001b[0m\\n\",\n      \"|  192  | 4.8000 |  1   |   0.631005   |   0.557035   |  -4.285048   |-9.852468e+00 |-7.663236e-01 |\\u001b[0m\\n\",\n      \"|  193  | 4.8250 |  1   |   0.655634   |   0.543174   |  -4.249586   |-9.856861e+00 |-7.660553e-01 |\\u001b[0m\\n\",\n      \"|  194  | 4.8500 |  1   |   0.663471   |   0.540511   |  -4.240242   |-9.861248e+00 |-7.657973e-01 |\\u001b[0m\\n\",\n      \"|  195  | 4.8750 |  1   |   0.663061   |   0.537256   |  -4.279527   |-9.865630e+00 |-7.655457e-01 |\\u001b[0m\\n\",\n      \"|  196  | 4.9000 |  1   |   0.666065   |   0.559327   |  -4.341423   |-9.869997e+00 |-7.652934e-01 |\\u001b[0m\\n\",\n      \"|  197  | 4.9250 |  1   |   0.655532   |   0.540197   |  -4.389727   |-9.874334e+00 |-7.650274e-01 |\\u001b[0m\\n\",\n      \"|  198  | 4.9500 |  1   |   0.653665   |   0.536703   |  -4.392163   |-9.878621e+00 |-7.647419e-01 |\\u001b[0m\\n\",\n      \"|  199  | 4.9750 |  1   |   0.643891   |   0.551159   |  -4.356375   |-9.882848e+00 |-7.644317e-01 |\\u001b[0m\\n\",\n      \"|  200  | 5.0000 |  1   |   0.658182   |   0.536739   |  -4.357632   |-9.887023e+00 |-7.640960e-01 |\\u001b[0m\\n\",\n      \"|  201  | 5.0250 |  1   |   0.666568   |   0.547456   |  -4.374468   |-9.891152e+00 |-7.637354e-01 |\\u001b[0m\\n\",\n      \"|  202  | 5.0500 |  1   |   0.690858   |   0.576716   |  -4.405701   |-9.895246e+00 |-7.633546e-01 |\\u001b[0m\\n\",\n      \"|  203  | 5.0750 |  1   |   0.648976   |   0.543039   |  -4.457054   |-9.899310e+00 |-7.629532e-01 |\\u001b[0m\\n\",\n      \"|  204  | 5.1000 |  1   |   0.645745   |   0.541463   |  -4.487556   |-9.903338e+00 |-7.625328e-01 |\\u001b[0m\\n\",\n      \"|  205  | 5.1250 |  1   |   0.591463   |   0.597350   |  -4.532516   |-9.907334e+00 |-7.620999e-01 |\\u001b[0m\\n\",\n      \"|  206  | 5.1500 |  1   |   0.602864   |   0.567360   |  -4.584225   |-9.911313e+00 |-7.616581e-01 |\\u001b[0m\\n\",\n      \"|  207  | 5.1750 |  1   |   0.607332   |   0.564882   |  -4.653390   |-9.915290e+00 |-7.612183e-01 |\\u001b[0m\\n\",\n      \"|  208  | 5.2000 |  1   |   0.617578   |   0.575872   |  -4.738979   |-9.919278e+00 |-7.607846e-01 |\\u001b[0m\\n\",\n      \"|  209  | 5.2250 |  1   |   0.608336   |   0.568334   |  -4.813565   |-9.923281e+00 |-7.603606e-01 |\\u001b[0m\\n\",\n      \"|  210  | 5.2500 |  1   |   0.608519   |   0.571894   |  -4.767231   |-9.927295e+00 |-7.599484e-01 |\\u001b[0m\\n\",\n      \"|  211  | 5.2750 |  1   |   0.611513   |   0.573648   |  -4.664724   |-9.931315e+00 |-7.595504e-01 |\\u001b[0m\\n\",\n      \"|  212  | 5.3000 |  1   |   0.663295   |   0.546204   |  -4.542805   |-9.935346e+00 |-7.591674e-01 |\\u001b[0m\\n\",\n      \"|  213  | 5.3250 |  1   |   0.653387   |   0.540858   |  -4.498708   |-9.939397e+00 |-7.588020e-01 |\\u001b[0m\\n\",\n      \"|  214  | 5.3500 |  1   |   0.651487   |   0.537849   |  -4.514320   |-9.943465e+00 |-7.584560e-01 |\\u001b[0m\\n\",\n      \"|  215  | 5.3750 |  1   |   0.662014   |   0.545498   |  -4.531746   |-9.947549e+00 |-7.581246e-01 |\\u001b[0m\\n\",\n      \"|  216  | 5.4000 |  1   |   0.650294   |   0.540917   |  -4.526842   |-9.951634e+00 |-7.578047e-01 |\\u001b[0m\\n\",\n      \"|  217  | 5.4250 |  1   |   0.653085   |   0.536544   |  -4.480060   |-9.955710e+00 |-7.574922e-01 |\\u001b[0m\\n\",\n      \"|  218  | 5.4500 |  1   |   0.661230   |   0.548448   |  -4.442806   |-9.959772e+00 |-7.571838e-01 |\\u001b[0m\\n\",\n      \"|  219  | 5.4750 |  1   |   0.655229   |   0.543616   |  -4.442100   |-9.963823e+00 |-7.568782e-01 |\\u001b[0m\\n\",\n      \"|  220  | 5.5000 |  1   |   0.655222   |   0.546932   |  -4.480309   |-9.967864e+00 |-7.565737e-01 |\\u001b[0m\\n\",\n      \"|  221  | 5.5250 |  1   |   0.650105   |   0.542159   |  -4.527770   |-9.971886e+00 |-7.562652e-01 |\\u001b[0m\\n\",\n      \"|  222  | 5.5500 |  1   |   0.651475   |   0.537507   |  -4.542362   |-9.975885e+00 |-7.559507e-01 |\\u001b[0m\\n\",\n      \"|  223  | 5.5750 |  1   |   0.659401   |   0.547510   |  -4.506293   |-9.979850e+00 |-7.556271e-01 |\\u001b[0m\\n\",\n      \"|  224  | 5.6000 |  1   |   0.601784   |   0.569276   |  -4.504088   |-9.983780e+00 |-7.552935e-01 |\\u001b[0m\\n\",\n      \"|  225  | 5.6250 |  1   |   0.623897   |   0.557574   |  -4.512552   |-9.987687e+00 |-7.549518e-01 |\\u001b[0m\\n\",\n      \"|  226  | 5.6500 |  1   |   0.600244   |   0.569273   |  -4.550006   |-9.991573e+00 |-7.546024e-01 |\\u001b[0m\\n\",\n      \"|  227  | 5.6750 |  1   |   0.624355   |   0.556274   |  -4.608499   |-9.995440e+00 |-7.542473e-01 |\\u001b[0m\\n\",\n      \"|  228  | 5.7000 |  1   |   0.660840   |   0.555257   |  -4.628774   |-9.999287e+00 |-7.538857e-01 |\\u001b[0m\\n\",\n      \"|  229  | 5.7250 |  1   |   0.648993   |   0.540272   |  -4.638629   |-1.000311e+01 |-7.535194e-01 |\\u001b[0m\\n\",\n      \"|  230  | 5.7500 |  1   |   0.649691   |   0.542594   |  -4.620373   |-1.000691e+01 |-7.531502e-01 |\\u001b[0m\\n\",\n      \"|  231  | 5.7750 |  1   |   0.654206   |   0.542916   |  -4.623969   |-1.001071e+01 |-7.527814e-01 |\\u001b[0m\\n\",\n      \"|  232  | 5.8000 |  1   |   0.651407   |   0.541567   |  -4.658962   |-1.001450e+01 |-7.524169e-01 |\\u001b[0m\\n\",\n      \"|  233  | 5.8250 |  1   |   0.634053   |   0.546768   |  -4.709952   |-1.001828e+01 |-7.520571e-01 |\\u001b[0m\\n\",\n      \"|  234  | 5.8500 |  1   |   0.649142   |   0.540074   |  -4.711982   |-1.002206e+01 |-7.517035e-01 |\\u001b[0m\\n\",\n      \"|  235  | 5.8750 |  1   |   0.651331   |   0.541255   |  -4.674097   |-1.002584e+01 |-7.513553e-01 |\\u001b[0m\\n\",\n      \"|  236  | 5.9000 |  1   |   0.650602   |   0.540557   |  -4.609681   |-1.002960e+01 |-7.510131e-01 |\\u001b[0m\\n\",\n      \"|  237  | 5.9250 |  1   |   0.625181   |   0.556794   |  -4.572926   |-1.003336e+01 |-7.506790e-01 |\\u001b[0m\\n\",\n      \"|  238  | 5.9500 |  1   |   0.598372   |   0.577537   |  -4.593342   |-1.003712e+01 |-7.503529e-01 |\\u001b[0m\\n\",\n      \"|  239  | 5.9750 |  1   |   0.597025   |   0.572500   |  -4.606399   |-1.004088e+01 |-7.500343e-01 |\\u001b[0m\\n\",\n      \"|  240  | 6.0000 |  1   |   0.597859   |   0.576480   |  -4.633256   |-1.004462e+01 |-7.497216e-01 |\\u001b[0m\\n\",\n      \"|  241  | 6.0250 |  1   |   0.598875   |   0.573635   |  -4.596024   |-1.004836e+01 |-7.494121e-01 |\\u001b[0m\\n\",\n      \"|  242  | 6.0500 |  1   |   0.597534   |   0.573711   |  -4.557101   |-1.005207e+01 |-7.491049e-01 |\\u001b[0m\\n\",\n      \"|  243  | 6.0750 |  1   |   0.615834   |   0.560475   |  -4.544709   |-1.005577e+01 |-7.487993e-01 |\\u001b[0m\\n\",\n      \"|  244  | 6.1000 |  1   |   0.645833   |   0.545940   |  -4.560556   |-1.005945e+01 |-7.484956e-01 |\\u001b[0m\\n\",\n      \"|  245  | 6.1250 |  1   |   0.641262   |   0.550605   |  -4.599376   |-1.006312e+01 |-7.481921e-01 |\\u001b[0m\\n\",\n      \"|  246  | 6.1500 |  1   |   0.650546   |   0.543172   |  -4.621850   |-1.006677e+01 |-7.478876e-01 |\\u001b[0m\\n\",\n      \"|  247  | 6.1750 |  1   |   0.650686   |   0.547601   |  -4.613310   |-1.007040e+01 |-7.475803e-01 |\\u001b[0m\\n\",\n      \"|  248  | 6.2000 |  1   |   0.643572   |   0.551210   |  -4.588594   |-1.007400e+01 |-7.472693e-01 |\\u001b[0m\\n\",\n      \"|  249  | 6.2250 |  1   |   0.643333   |   0.539960   |  -4.585553   |-1.007758e+01 |-7.469564e-01 |\\u001b[0m\\n\",\n      \"|  250  | 6.2500 |  1   |   0.631976   |   0.548090   |  -4.600869   |-1.008114e+01 |-7.466414e-01 |\\u001b[0m\\n\",\n      \"|  251  | 6.2750 |  1   |   0.647855   |   0.541747   |  -4.650767   |-1.008469e+01 |-7.463261e-01 |\\u001b[0m\\n\",\n      \"|  252  | 6.3000 |  1   |   0.649241   |   0.544522   |  -4.672520   |-1.008821e+01 |-7.460094e-01 |\\u001b[0m\\n\",\n      \"|  253  | 6.3250 |  1   |   0.643516   |   0.545110   |  -4.673014   |-1.009172e+01 |-7.456916e-01 |\\u001b[0m\\n\",\n      \"|  254  | 6.3500 |  1   |   0.638767   |   0.540989   |  -4.653989   |-1.009520e+01 |-7.453734e-01 |\\u001b[0m\\n\",\n      \"|  255  | 6.3750 |  1   |   0.631475   |   0.546431   |  -4.631053   |-1.009867e+01 |-7.450557e-01 |\\u001b[0m\\n\",\n      \"|  256  | 6.4000 |  1   |   0.644038   |   0.541411   |  -4.653231   |-1.010213e+01 |-7.447412e-01 |\\u001b[0m\\n\",\n      \"|  257  | 6.4250 |  1   |   0.645015   |   0.541870   |  -4.678113   |-1.010557e+01 |-7.444295e-01 |\\u001b[0m\\n\",\n      \"|  258  | 6.4500 |  1   |   0.646439   |   0.544957   |  -4.706046   |-1.010900e+01 |-7.441219e-01 |\\u001b[0m\\n\",\n      \"|  259  | 6.4750 |  1   |   0.636618   |   0.544506   |  -4.688480   |-1.011242e+01 |-7.438168e-01 |\\u001b[0m\\n\",\n      \"|  260  | 6.5000 |  1   |   0.636472   |   0.544515   |  -4.660864   |-1.011582e+01 |-7.435149e-01 |\\u001b[0m\\n\",\n      \"|  261  | 6.5250 |  1   |   0.642801   |   0.547305   |  -4.622978   |-1.011920e+01 |-7.432168e-01 |\\u001b[0m\\n\",\n      \"|  262  | 6.5500 |  1   |   0.642521   |   0.549237   |  -4.634656   |-1.012258e+01 |-7.429228e-01 |\\u001b[0m\\n\",\n      \"|  263  | 6.5750 |  1   |   0.640326   |   0.546690   |  -4.652540   |-1.012594e+01 |-7.426333e-01 |\\u001b[0m\\n\",\n      \"|  264  | 6.6000 |  1   |   0.646080   |   0.569616   |  -4.675082   |-1.012928e+01 |-7.423474e-01 |\\u001b[0m\\n\",\n      \"|  265  | 6.6250 |  1   |   0.637068   |   0.545332   |  -4.671475   |-1.013261e+01 |-7.420636e-01 |\\u001b[0m\\n\",\n      \"|  266  | 6.6500 |  1   |   0.641454   |   0.542948   |  -4.635937   |-1.013592e+01 |-7.417815e-01 |\\u001b[0m\\n\",\n      \"|  267  | 6.6750 |  1   |   0.648429   |   0.563219   |  -4.626090   |-1.013921e+01 |-7.415010e-01 |\\u001b[0m\\n\",\n      \"|  268  | 6.7000 |  1   |   0.638889   |   0.546413   |  -4.619397   |-1.014248e+01 |-7.412219e-01 |\\u001b[0m\\n\",\n      \"|  269  | 6.7250 |  1   |   0.645476   |   0.551120   |  -4.654354   |-1.014573e+01 |-7.409449e-01 |\\u001b[0m\\n\",\n      \"|  270  | 6.7500 |  1   |   0.644807   |   0.553462   |  -4.677256   |-1.014897e+01 |-7.406684e-01 |\\u001b[0m\\n\",\n      \"|  271  | 6.7750 |  1   |   0.643342   |   0.545453   |  -4.677941   |-1.015219e+01 |-7.403922e-01 |\\u001b[0m\\n\",\n      \"|  272  | 6.8000 |  1   |   0.642737   |   0.554577   |  -4.663328   |-1.015538e+01 |-7.401152e-01 |\\u001b[0m\\n\",\n      \"|  273  | 6.8250 |  1   |   0.636924   |   0.547193   |  -4.647117   |-1.015854e+01 |-7.398382e-01 |\\u001b[0m\\n\",\n      \"|  274  | 6.8500 |  1   |   0.636881   |   0.549125   |  -4.652275   |-1.016169e+01 |-7.395617e-01 |\\u001b[0m\\n\",\n      \"|  275  | 6.8750 |  1   |   0.642097   |   0.546781   |  -4.679255   |-1.016482e+01 |-7.392860e-01 |\\u001b[0m\\n\",\n      \"|  276  | 6.9000 |  1   |   0.644362   |   0.546495   |  -4.710093   |-1.016793e+01 |-7.390117e-01 |\\u001b[0m\\n\",\n      \"|  277  | 6.9250 |  1   |   0.636971   |   0.552398   |  -4.709777   |-1.017103e+01 |-7.387375e-01 |\\u001b[0m\\n\",\n      \"|  278  | 6.9500 |  1   |   0.642068   |   0.550708   |  -4.702989   |-1.017410e+01 |-7.384642e-01 |\\u001b[0m\\n\",\n      \"|  279  | 6.9750 |  1   |   0.636245   |   0.548906   |  -4.675771   |-1.017714e+01 |-7.381918e-01 |\\u001b[0m\\n\",\n      \"|  280  | 7.0000 |  1   |   0.631892   |   0.553548   |  -4.683037   |-1.018018e+01 |-7.379216e-01 |\\u001b[0m\\n\",\n      \"|  281  | 7.0250 |  1   |   0.636876   |   0.548173   |  -4.700304   |-1.018319e+01 |-7.376540e-01 |\\u001b[0m\\n\",\n      \"|  282  | 7.0500 |  1   |   0.641117   |   0.548960   |  -4.723800   |-1.018619e+01 |-7.373891e-01 |\\u001b[0m\\n\",\n      \"|  283  | 7.0750 |  1   |   0.639323   |   0.547961   |  -4.733571   |-1.018917e+01 |-7.371265e-01 |\\u001b[0m\\n\",\n      \"|  284  | 7.1000 |  1   |   0.636166   |   0.555813   |  -4.706688   |-1.019212e+01 |-7.368659e-01 |\\u001b[0m\\n\",\n      \"|  285  | 7.1250 |  1   |   0.634238   |   0.555710   |  -4.691827   |-1.019506e+01 |-7.366075e-01 |\\u001b[0m\\n\",\n      \"|  286  | 7.1500 |  1   |   0.635902   |   0.551450   |  -4.681559   |-1.019798e+01 |-7.363519e-01 |\\u001b[0m\\n\",\n      \"|  287  | 7.1750 |  1   |   0.637927   |   0.565596   |  -4.702253   |-1.020088e+01 |-7.360992e-01 |\\u001b[0m\\n\",\n      \"|  288  | 7.2000 |  1   |   0.636154   |   0.548763   |  -4.718294   |-1.020377e+01 |-7.358495e-01 |\\u001b[0m\\n\",\n      \"|  289  | 7.2250 |  1   |   0.635841   |   0.549645   |  -4.734186   |-1.020663e+01 |-7.356017e-01 |\\u001b[0m\\n\",\n      \"|  290  | 7.2500 |  1   |   0.633560   |   0.553457   |  -4.709277   |-1.020948e+01 |-7.353555e-01 |\\u001b[0m\\n\",\n      \"|  291  | 7.2750 |  1   |   0.633063   |   0.551744   |  -4.697645   |-1.021230e+01 |-7.351108e-01 |\\u001b[0m\\n\",\n      \"|  292  | 7.3000 |  1   |   0.596012   |   0.573846   |  -4.690652   |-1.021510e+01 |-7.348676e-01 |\\u001b[0m\\n\",\n      \"|  293  | 7.3250 |  1   |   0.628225   |   0.550297   |  -4.705748   |-1.021788e+01 |-7.346267e-01 |\\u001b[0m\\n\",\n      \"|  294  | 7.3500 |  1   |   0.635229   |   0.558756   |  -4.733700   |-1.022064e+01 |-7.343873e-01 |\\u001b[0m\\n\",\n      \"|  295  | 7.3750 |  1   |   0.633064   |   0.553635   |  -4.738990   |-1.022338e+01 |-7.341492e-01 |\\u001b[0m\\n\",\n      \"|  296  | 7.4000 |  1   |   0.636859   |   0.550407   |  -4.735953   |-1.022610e+01 |-7.339119e-01 |\\u001b[0m\\n\",\n      \"|  297  | 7.4250 |  1   |   0.623950   |   0.565263   |  -4.716011   |-1.022879e+01 |-7.336753e-01 |\\u001b[0m\\n\",\n      \"|  298  | 7.4500 |  1   |   0.642621   |   0.555373   |  -4.714487   |-1.023146e+01 |-7.334401e-01 |\\u001b[0m\\n\",\n      \"|  299  | 7.4750 |  1   |   0.631974   |   0.548812   |  -4.730516   |-1.023411e+01 |-7.332063e-01 |\\u001b[0m\\n\",\n      \"|  300  | 7.5000 |  1   |   0.635308   |   0.557555   |  -4.753499   |-1.023674e+01 |-7.329746e-01 |\\u001b[0m\\n\",\n      \"|  301  | 7.5250 |  1   |   0.629950   |   0.550125   |  -4.765495   |-1.023935e+01 |-7.327439e-01 |\\u001b[0m\\n\",\n      \"|  302  | 7.5500 |  1   |   0.615770   |   0.560338   |  -4.762381   |-1.024194e+01 |-7.325148e-01 |\\u001b[0m\\n\",\n      \"|  303  | 7.5750 |  1   |   0.584256   |   0.590264   |  -4.742845   |-1.024450e+01 |-7.322869e-01 |\\u001b[0m\\n\",\n      \"|  304  | 7.6000 |  1   |   0.582597   |   0.587076   |  -4.737265   |-1.024704e+01 |-7.320607e-01 |\\u001b[0m\\n\",\n      \"|  305  | 7.6250 |  1   |   0.584283   |   0.579482   |  -4.752925   |-1.024956e+01 |-7.318370e-01 |\\u001b[0m\\n\",\n      \"|  306  | 7.6500 |  1   |   0.586216   |   0.584941   |  -4.767222   |-1.025207e+01 |-7.316154e-01 |\\u001b[0m\\n\",\n      \"|  307  | 7.6750 |  1   |   0.585430   |   0.579851   |  -4.787773   |-1.025455e+01 |-7.313962e-01 |\\u001b[0m\\n\",\n      \"|  308  | 7.7000 |  1   |   0.631306   |   0.551397   |  -4.774572   |-1.025701e+01 |-7.311787e-01 |\\u001b[0m\\n\",\n      \"|  309  | 7.7250 |  1   |   0.634317   |   0.553543   |  -4.762915   |-1.025944e+01 |-7.309630e-01 |\\u001b[0m\\n\",\n      \"|  310  | 7.7500 |  1   |   0.636891   |   0.556693   |  -4.750823   |-1.026186e+01 |-7.307494e-01 |\\u001b[0m\\n\",\n      \"|  311  | 7.7750 |  1   |   0.639769   |   0.563616   |  -4.761181   |-1.026425e+01 |-7.305383e-01 |\\u001b[0m\\n\",\n      \"|  312  | 7.8000 |  1   |   0.631767   |   0.554912   |  -4.781589   |-1.026663e+01 |-7.303294e-01 |\\u001b[0m\\n\",\n      \"|  313  | 7.8250 |  1   |   0.634194   |   0.558768   |  -4.793059   |-1.026898e+01 |-7.301229e-01 |\\u001b[0m\\n\",\n      \"|  314  | 7.8500 |  1   |   0.626796   |   0.556363   |  -4.791256   |-1.027131e+01 |-7.299178e-01 |\\u001b[0m\\n\",\n      \"|  315  | 7.8750 |  1   |   0.625787   |   0.550935   |  -4.775101   |-1.027361e+01 |-7.297145e-01 |\\u001b[0m\\n\",\n      \"|  316  | 7.9000 |  1   |   0.631936   |   0.553434   |  -4.770127   |-1.027590e+01 |-7.295127e-01 |\\u001b[0m\\n\",\n      \"|  317  | 7.9250 |  1   |   0.632807   |   0.554769   |  -4.771512   |-1.027816e+01 |-7.293129e-01 |\\u001b[0m\\n\",\n      \"|  318  | 7.9500 |  1   |   0.636354   |   0.555106   |  -4.801316   |-1.028040e+01 |-7.291153e-01 |\\u001b[0m\\n\",\n      \"|  319  | 7.9750 |  1   |   0.651982   |   0.601691   |  -4.806386   |-1.028262e+01 |-7.289192e-01 |\\u001b[0m\\n\",\n      \"|  320  | 8.0000 |  1   |   0.642667   |   0.630753   |  -4.813430   |-1.028481e+01 |-7.287248e-01 |\\u001b[0m\\n\",\n      \"|  321  | 8.0250 |  1   |   0.638641   |   0.626061   |  -4.798908   |-1.028698e+01 |-7.285314e-01 |\\u001b[0m\\n\",\n      \"|  322  | 8.0500 |  1   |   0.627977   |   0.630209   |  -4.790992   |-1.028913e+01 |-7.283397e-01 |\\u001b[0m\\n\",\n      \"|  323  | 8.0750 |  1   |   0.615535   |   0.632846   |  -4.799474   |-1.029125e+01 |-7.281498e-01 |\\u001b[0m\\n\",\n      \"|  324  | 8.1000 |  1   |   0.628741   |   0.623770   |  -4.816641   |-1.029336e+01 |-7.279618e-01 |\\u001b[0m\\n\",\n      \"|  325  | 8.1250 |  1   |   0.646119   |   0.631292   |  -4.835626   |-1.029544e+01 |-7.277758e-01 |\\u001b[0m\\n\",\n      \"|  326  | 8.1500 |  1   |   0.635751   |   0.604086   |  -4.834189   |-1.029750e+01 |-7.275912e-01 |\\u001b[0m\\n\",\n      \"|  327  | 8.1750 |  1   |   0.635591   |   0.596375   |  -4.826611   |-1.029953e+01 |-7.274083e-01 |\\u001b[0m\\n\",\n      \"|  328  | 8.2000 |  1   |   0.654686   |   0.625780   |  -4.815149   |-1.030154e+01 |-7.272270e-01 |\\u001b[0m\\n\",\n      \"|  329  | 8.2250 |  1   |   0.631972   |   0.593750   |  -4.822991   |-1.030353e+01 |-7.270479e-01 |\\u001b[0m\\n\",\n      \"|  330  | 8.2500 |  1   |   0.627881   |   0.594475   |  -4.835602   |-1.030549e+01 |-7.268709e-01 |\\u001b[0m\\n\",\n      \"|  331  | 8.2750 |  1   |   0.632779   |   0.588022   |  -4.856780   |-1.030744e+01 |-7.266960e-01 |\\u001b[0m\\n\",\n      \"|  332  | 8.3000 |  1   |   0.623576   |   0.572123   |  -4.856935   |-1.030936e+01 |-7.265231e-01 |\\u001b[0m\\n\",\n      \"|  333  | 8.3250 |  1   |   0.616926   |   0.572569   |  -4.844436   |-1.031125e+01 |-7.263517e-01 |\\u001b[0m\\n\",\n      \"|  334  | 8.3500 |  1   |   0.656718   |   0.615642   |  -4.841857   |-1.031313e+01 |-7.261824e-01 |\\u001b[0m\\n\",\n      \"|  335  | 8.3750 |  1   |   0.647848   |   0.593447   |  -4.836181   |-1.031498e+01 |-7.260150e-01 |\\u001b[0m\\n\",\n      \"|  336  | 8.4000 |  1   |   0.620897   |   0.556400   |  -4.858940   |-1.031681e+01 |-7.258500e-01 |\\u001b[0m\\n\",\n      \"|  337  | 8.4250 |  1   |   0.636878   |   0.568918   |  -4.870038   |-1.031861e+01 |-7.256870e-01 |\\u001b[0m\\n\",\n      \"|  338  | 8.4500 |  1   |   0.624409   |   0.560472   |  -4.878751   |-1.032040e+01 |-7.255258e-01 |\\u001b[0m\\n\",\n      \"|  339  | 8.4750 |  1   |   0.626291   |   0.560779   |  -4.866752   |-1.032216e+01 |-7.253663e-01 |\\u001b[0m\\n\",\n      \"|  340  | 8.5000 |  1   |   0.624523   |   0.557208   |  -4.860873   |-1.032389e+01 |-7.252085e-01 |\\u001b[0m\\n\",\n      \"|  341  | 8.5250 |  1   |   0.621932   |   0.557273   |  -4.861571   |-1.032560e+01 |-7.250526e-01 |\\u001b[0m\\n\",\n      \"|  342  | 8.5500 |  1   |   0.620140   |   0.558312   |  -4.876236   |-1.032729e+01 |-7.248988e-01 |\\u001b[0m\\n\",\n      \"|  343  | 8.5750 |  1   |   0.618488   |   0.558703   |  -4.894443   |-1.032896e+01 |-7.247469e-01 |\\u001b[0m\\n\",\n      \"|  344  | 8.6000 |  1   |   0.614675   |   0.555611   |  -4.898885   |-1.033060e+01 |-7.245967e-01 |\\u001b[0m\\n\",\n      \"|  345  | 8.6250 |  1   |   0.608933   |   0.564743   |  -4.897533   |-1.033222e+01 |-7.244482e-01 |\\u001b[0m\\n\",\n      \"|  346  | 8.6500 |  1   |   0.577061   |   0.585133   |  -4.881841   |-1.033381e+01 |-7.243012e-01 |\\u001b[0m\\n\",\n      \"|  347  | 8.6750 |  1   |   0.608953   |   0.587979   |  -4.892088   |-1.033539e+01 |-7.241562e-01 |\\u001b[0m\\n\",\n      \"|  348  | 8.7000 |  1   |   0.624541   |   0.558283   |  -4.899079   |-1.033693e+01 |-7.240130e-01 |\\u001b[0m\\n\",\n      \"|  349  | 8.7250 |  1   |   0.625952   |   0.557111   |  -4.918737   |-1.033846e+01 |-7.238720e-01 |\\u001b[0m\\n\",\n      \"|  350  | 8.7500 |  1   |   0.623287   |   0.557909   |  -4.928123   |-1.033996e+01 |-7.237327e-01 |\\u001b[0m\\n\",\n      \"|  351  | 8.7750 |  1   |   0.622417   |   0.555740   |  -4.921486   |-1.034144e+01 |-7.235950e-01 |\\u001b[0m\\n\",\n      \"|  352  | 8.8000 |  1   |   0.621352   |   0.554043   |  -4.914257   |-1.034289e+01 |-7.234592e-01 |\\u001b[0m\\n\",\n      \"|  353  | 8.8250 |  1   |   0.625442   |   0.559248   |  -4.914487   |-1.034432e+01 |-7.233251e-01 |\\u001b[0m\\n\",\n      \"|  354  | 8.8500 |  1   |   0.621001   |   0.554895   |  -4.927093   |-1.034573e+01 |-7.231933e-01 |\\u001b[0m\\n\",\n      \"|  355  | 8.8750 |  1   |   0.616331   |   0.556795   |  -4.942194   |-1.034711e+01 |-7.230634e-01 |\\u001b[0m\\n\",\n      \"|  356  | 8.9000 |  1   |   0.620400   |   0.561975   |  -4.953444   |-1.034848e+01 |-7.229356e-01 |\\u001b[0m\\n\",\n      \"|  357  | 8.9250 |  1   |   0.617789   |   0.557966   |  -4.948106   |-1.034981e+01 |-7.228093e-01 |\\u001b[0m\\n\",\n      \"|  358  | 8.9500 |  1   |   0.617529   |   0.559993   |  -4.942308   |-1.035113e+01 |-7.226850e-01 |\\u001b[0m\\n\",\n      \"|  359  | 8.9750 |  1   |   0.618381   |   0.557392   |  -4.938375   |-1.035241e+01 |-7.225625e-01 |\\u001b[0m\\n\",\n      \"|  360  | 9.0000 |  1   |   0.615879   |   0.559019   |  -4.952078   |-1.035368e+01 |-7.224422e-01 |\\u001b[0m\\n\",\n      \"|  361  | 9.0250 |  1   |   0.619261   |   0.558077   |  -4.968153   |-1.035492e+01 |-7.223238e-01 |\\u001b[0m\\n\",\n      \"|  362  | 9.0500 |  1   |   0.620542   |   0.558342   |  -4.974721   |-1.035614e+01 |-7.222074e-01 |\\u001b[0m\\n\",\n      \"|  363  | 9.0750 |  1   |   0.620811   |   0.562190   |  -4.979177   |-1.035734e+01 |-7.220928e-01 |\\u001b[0m\\n\",\n      \"|  364  | 9.1000 |  1   |   0.621215   |   0.561517   |  -4.966813   |-1.035851e+01 |-7.219798e-01 |\\u001b[0m\\n\",\n      \"|  365  | 9.1250 |  1   |   0.619293   |   0.556963   |  -4.968124   |-1.035966e+01 |-7.218687e-01 |\\u001b[0m\\n\",\n      \"|  366  | 9.1500 |  1   |   0.617414   |   0.560206   |  -4.976628   |-1.036079e+01 |-7.217596e-01 |\\u001b[0m\\n\",\n      \"|  367  | 9.1750 |  1   |   0.617224   |   0.560026   |  -4.995733   |-1.036189e+01 |-7.216525e-01 |\\u001b[0m\\n\",\n      \"|  368  | 9.2000 |  1   |   0.594361   |   0.572718   |  -5.002079   |-1.036297e+01 |-7.215472e-01 |\\u001b[0m\\n\",\n      \"|  369  | 9.2250 |  1   |   0.591752   |   0.620408   |  -5.007823   |-1.036402e+01 |-7.214437e-01 |\\u001b[0m\\n\",\n      \"|  370  | 9.2500 |  1   |   0.573933   |   0.595363   |  -4.998087   |-1.036505e+01 |-7.213418e-01 |\\u001b[0m\\n\",\n      \"|  371  | 9.2750 |  1   |   0.574780   |   0.599225   |  -4.997593   |-1.036606e+01 |-7.212418e-01 |\\u001b[0m\\n\",\n      \"|  372  | 9.3000 |  1   |   0.573589   |   0.590403   |  -5.006758   |-1.036704e+01 |-7.211437e-01 |\\u001b[0m\\n\",\n      \"|  373  | 9.3250 |  1   |   0.609827   |   0.562178   |  -5.021476   |-1.036800e+01 |-7.210476e-01 |\\u001b[0m\\n\",\n      \"|  374  | 9.3500 |  1   |   0.614184   |   0.559384   |  -5.036294   |-1.036894e+01 |-7.209533e-01 |\\u001b[0m\\n\",\n      \"|  375  | 9.3750 |  1   |   0.613003   |   0.559421   |  -5.033179   |-1.036985e+01 |-7.208608e-01 |\\u001b[0m\\n\",\n      \"|  376  | 9.4000 |  1   |   0.615698   |   0.562315   |  -5.033218   |-1.037074e+01 |-7.207701e-01 |\\u001b[0m\\n\",\n      \"|  377  | 9.4250 |  1   |   0.614765   |   0.561798   |  -5.027569   |-1.037161e+01 |-7.206811e-01 |\\u001b[0m\\n\",\n      \"|  378  | 9.4500 |  1   |   0.617829   |   0.560943   |  -5.035541   |-1.037245e+01 |-7.205942e-01 |\\u001b[0m\\n\",\n      \"|  379  | 9.4750 |  1   |   0.618720   |   0.564336   |  -5.051179   |-1.037327e+01 |-7.205092e-01 |\\u001b[0m\\n\",\n      \"|  380  | 9.5000 |  1   |   0.612249   |   0.559879   |  -5.064730   |-1.037407e+01 |-7.204262e-01 |\\u001b[0m\\n\",\n      \"|  381  | 9.5250 |  1   |   0.616751   |   0.558819   |  -5.064004   |-1.037484e+01 |-7.203449e-01 |\\u001b[0m\\n\",\n      \"|  382  | 9.5500 |  1   |   0.609852   |   0.562424   |  -5.062977   |-1.037559e+01 |-7.202654e-01 |\\u001b[0m\\n\",\n      \"|  383  | 9.5750 |  1   |   0.610932   |   0.561283   |  -5.059836   |-1.037632e+01 |-7.201877e-01 |\\u001b[0m\\n\",\n      \"|  384  | 9.6000 |  1   |   0.609683   |   0.559666   |  -5.063394   |-1.037702e+01 |-7.201119e-01 |\\u001b[0m\\n\",\n      \"|  385  | 9.6250 |  1   |   0.614492   |   0.563530   |  -5.081452   |-1.037770e+01 |-7.200382e-01 |\\u001b[0m\\n\",\n      \"|  386  | 9.6500 |  1   |   0.606921   |   0.560035   |  -5.090793   |-1.037835e+01 |-7.199663e-01 |\\u001b[0m\\n\",\n      \"|  387  | 9.6750 |  1   |   0.614644   |   0.567031   |  -5.097605   |-1.037899e+01 |-7.198962e-01 |\\u001b[0m\\n\",\n      \"|  388  | 9.7000 |  1   |   0.584276   |   0.590999   |  -5.091026   |-1.037960e+01 |-7.198278e-01 |\\u001b[0m\\n\",\n      \"|  389  | 9.7250 |  1   |   0.567643   |   0.593811   |  -5.091591   |-1.038018e+01 |-7.197613e-01 |\\u001b[0m\\n\",\n      \"|  390  | 9.7500 |  1   |   0.567374   |   0.596893   |  -5.095862   |-1.038075e+01 |-7.196965e-01 |\\u001b[0m\\n\",\n      \"|  391  | 9.7750 |  1   |   0.572616   |   0.596802   |  -5.106980   |-1.038129e+01 |-7.196338e-01 |\\u001b[0m\\n\",\n      \"|  392  | 9.8000 |  1   |   0.570078   |   0.591577   |  -5.123029   |-1.038181e+01 |-7.195729e-01 |\\u001b[0m\\n\",\n      \"|  393  | 9.8250 |  1   |   0.568206   |   0.592200   |  -5.126210   |-1.038230e+01 |-7.195138e-01 |\\u001b[0m\\n\",\n      \"|  394  | 9.8500 |  1   |   0.571314   |   0.611958   |  -5.123923   |-1.038277e+01 |-7.194564e-01 |\\u001b[0m\\n\",\n      \"|  395  | 9.8750 |  1   |   0.567253   |   0.597897   |  -5.121337   |-1.038322e+01 |-7.194006e-01 |\\u001b[0m\\n\",\n      \"|  396  | 9.9000 |  1   |   0.568210   |   0.593683   |  -5.128361   |-1.038365e+01 |-7.193469e-01 |\\u001b[0m\\n\",\n      \"|  397  | 9.9250 |  1   |   0.565010   |   0.597851   |  -5.135472   |-1.038405e+01 |-7.192949e-01 |\\u001b[0m\\n\",\n      \"|  398  | 9.9500 |  1   |   0.607473   |   0.563262   |  -5.151271   |-1.038443e+01 |-7.192449e-01 |\\u001b[0m\\n\",\n      \"|  399  | 9.9750 |  1   |   0.611926   |   0.565768   |  -5.156484   |-1.038479e+01 |-7.191966e-01 |\\u001b[0m\\n\",\n      \"|  400  |10.0000 |  1   |   0.609614   |   0.566774   |  -5.154040   |-1.038512e+01 |-7.191501e-01 |\\u001b[0m\\n\",\n      \"|  401  |10.0250 |  1   |   0.609190   |   0.563351   |  -5.151962   |-1.038543e+01 |-7.191053e-01 |\\u001b[0m\\n\",\n      \"|  402  |10.0500 |  1   |   0.609842   |   0.560413   |  -5.156639   |-1.038572e+01 |-7.190623e-01 |\\u001b[0m\\n\",\n      \"|  403  |10.0750 |  1   |   0.608545   |   0.562862   |  -5.165364   |-1.038599e+01 |-7.190212e-01 |\\u001b[0m\\n\",\n      \"|  404  |10.1000 |  1   |   0.609280   |   0.574591   |  -5.175709   |-1.038623e+01 |-7.189820e-01 |\\u001b[0m\\n\",\n      \"|  405  |10.1250 |  1   |   0.606715   |   0.563175   |  -5.184143   |-1.038645e+01 |-7.189446e-01 |\\u001b[0m\\n\",\n      \"|  406  |10.1500 |  1   |   0.604479   |   0.564748   |  -5.181991   |-1.038665e+01 |-7.189088e-01 |\\u001b[0m\\n\",\n      \"|  407  |10.1750 |  1   |   0.606050   |   0.565112   |  -5.179552   |-1.038683e+01 |-7.188749e-01 |\\u001b[0m\\n\",\n      \"|  408  |10.2000 |  1   |   0.607161   |   0.564970   |  -5.182516   |-1.038698e+01 |-7.188427e-01 |\\u001b[0m\\n\",\n      \"|  409  |10.2250 |  1   |   0.611589   |   0.565026   |  -5.191318   |-1.038711e+01 |-7.188124e-01 |\\u001b[0m\\n\",\n      \"|  410  |10.2500 |  1   |   0.609824   |   0.564363   |  -5.199527   |-1.038722e+01 |-7.187839e-01 |\\u001b[0m\\n\",\n      \"|  411  |10.2750 |  1   |   0.608612   |   0.565428   |  -5.204957   |-1.038731e+01 |-7.187572e-01 |\\u001b[0m\\n\",\n      \"|  412  |10.3000 |  1   |   0.607257   |   0.561791   |  -5.208673   |-1.038738e+01 |-7.187322e-01 |\\u001b[0m\\n\",\n      \"|  413  |10.3250 |  1   |   0.609691   |   0.568279   |  -5.201979   |-1.038742e+01 |-7.187089e-01 |\\u001b[0m\\n\",\n      \"|  414  |10.3500 |  1   |   0.601743   |   0.568179   |  -5.206076   |-1.038744e+01 |-7.186873e-01 |\\u001b[0m\\n\",\n      \"|  415  |10.3750 |  1   |   0.601717   |   0.567023   |  -5.212946   |-1.038744e+01 |-7.186677e-01 |\\u001b[0m\\n\",\n      \"|  416  |10.4000 |  1   |   0.559912   |   0.595790   |  -5.218419   |-1.038742e+01 |-7.186497e-01 |\\u001b[0m\\n\",\n      \"|  417  |10.4250 |  1   |   0.564230   |   0.598142   |  -5.224424   |-1.038737e+01 |-7.186336e-01 |\\u001b[0m\\n\",\n      \"|  418  |10.4500 |  1   |   0.583181   |   0.581345   |  -5.225489   |-1.038730e+01 |-7.186191e-01 |\\u001b[0m\\n\",\n      \"|  419  |10.4750 |  1   |   0.602301   |   0.565017   |  -5.224159   |-1.038721e+01 |-7.186063e-01 |\\u001b[0m\\n\",\n      \"|  420  |10.5000 |  1   |   0.603593   |   0.566494   |  -5.222729   |-1.038710e+01 |-7.185953e-01 |\\u001b[0m\\n\",\n      \"|  421  |10.5250 |  1   |   0.601339   |   0.567735   |  -5.228588   |-1.038697e+01 |-7.185860e-01 |\\u001b[0m\\n\",\n      \"|  422  |10.5500 |  1   |   0.600440   |   0.570387   |  -5.234701   |-1.038682e+01 |-7.185785e-01 |\\u001b[0m\\n\",\n      \"|  423  |10.5750 |  1   |   0.578888   |   0.583202   |  -5.234590   |-1.038664e+01 |-7.185728e-01 |\\u001b[0m\\n\",\n      \"|  424  |10.6000 |  1   |   0.604815   |   0.565890   |  -5.239249   |-1.038645e+01 |-7.185687e-01 |\\u001b[0m\\n\",\n      \"|  425  |10.6250 |  1   |   0.604126   |   0.569152   |  -5.236159   |-1.038623e+01 |-7.185663e-01 |\\u001b[0m\\n\",\n      \"|  426  |10.6500 |  1   |   0.603547   |   0.566174   |  -5.235546   |-1.038599e+01 |-7.185655e-01 |\\u001b[0m\\n\",\n      \"|  427  |10.6750 |  1   |   0.602865   |   0.569464   |  -5.237490   |-1.038573e+01 |-7.185666e-01 |\\u001b[0m\\n\",\n      \"|  428  |10.7000 |  1   |   0.600635   |   0.568652   |  -5.241270   |-1.038545e+01 |-7.185694e-01 |\\u001b[0m\\n\",\n      \"|  429  |10.7250 |  1   |   0.605226   |   0.574795   |  -5.242437   |-1.038514e+01 |-7.185739e-01 |\\u001b[0m\\n\",\n      \"|  430  |10.7500 |  1   |   0.600788   |   0.571143   |  -5.241394   |-1.038482e+01 |-7.185801e-01 |\\u001b[0m\\n\",\n      \"|  431  |10.7750 |  1   |   0.577222   |   0.591226   |  -5.242569   |-1.038448e+01 |-7.185880e-01 |\\u001b[0m\\n\",\n      \"|  432  |10.8000 |  1   |   0.560620   |   0.597055   |  -5.240958   |-1.038411e+01 |-7.185975e-01 |\\u001b[0m\\n\",\n      \"|  433  |10.8250 |  1   |   0.556709   |   0.596082   |  -5.238278   |-1.038372e+01 |-7.186087e-01 |\\u001b[0m\\n\",\n      \"|  434  |10.8500 |  1   |   0.556684   |   0.597562   |  -5.242316   |-1.038332e+01 |-7.186217e-01 |\\u001b[0m\\n\",\n      \"|  435  |10.8750 |  1   |   0.559204   |   0.599864   |  -5.240932   |-1.038289e+01 |-7.186363e-01 |\\u001b[0m\\n\",\n      \"|  436  |10.9000 |  1   |   0.554305   |   0.620321   |  -5.238040   |-1.038244e+01 |-7.186526e-01 |\\u001b[0m\\n\",\n      \"|  437  |10.9250 |  1   |   0.577513   |   0.588008   |  -5.241438   |-1.038197e+01 |-7.186705e-01 |\\u001b[0m\\n\",\n      \"|  438  |10.9500 |  1   |   0.599971   |   0.568971   |  -5.235789   |-1.038148e+01 |-7.186901e-01 |\\u001b[0m\\n\",\n      \"|  439  |10.9750 |  1   |   0.599382   |   0.571610   |  -5.237054   |-1.038097e+01 |-7.187113e-01 |\\u001b[0m\\n\",\n      \"|  440  |11.0000 |  1   |   0.597518   |   0.569614   |  -5.232763   |-1.038044e+01 |-7.187342e-01 |\\u001b[0m\\n\",\n      \"|  441  |11.0250 |  1   |   0.603696   |   0.575074   |  -5.233276   |-1.037989e+01 |-7.187588e-01 |\\u001b[0m\\n\",\n      \"|  442  |11.0500 |  1   |   0.583094   |   0.697022   |  -5.231065   |-1.037932e+01 |-7.187850e-01 |\\u001b[0m\\n\",\n      \"|  443  |11.0750 |  1   |   0.619875   |   0.676204   |  -5.227894   |-1.037873e+01 |-7.188128e-01 |\\u001b[0m\\n\",\n      \"|  444  |11.1000 |  1   |   0.598458   |   0.604789   |  -5.230200   |-1.037812e+01 |-7.188422e-01 |\\u001b[0m\\n\",\n      \"|  445  |11.1250 |  1   |   0.604274   |   0.596907   |  -5.223329   |-1.037749e+01 |-7.188732e-01 |\\u001b[0m\\n\",\n      \"|  446  |11.1500 |  1   |   0.573906   |   0.610394   |  -5.222229   |-1.037684e+01 |-7.189059e-01 |\\u001b[0m\\n\",\n      \"|  447  |11.1750 |  1   |   0.561556   |   0.624831   |  -5.217935   |-1.037617e+01 |-7.189403e-01 |\\u001b[0m\\n\",\n      \"|  448  |11.2000 |  1   |   0.569148   |   0.626453   |  -5.216896   |-1.037548e+01 |-7.189761e-01 |\\u001b[0m\\n\",\n      \"|  449  |11.2250 |  1   |   0.564965   |   0.673984   |  -5.213489   |-1.037477e+01 |-7.190136e-01 |\\u001b[0m\\n\",\n      \"|  450  |11.2500 |  1   |   0.561458   |   0.614712   |  -5.212846   |-1.037404e+01 |-7.190527e-01 |\\u001b[0m\\n\",\n      \"|  451  |11.2750 |  1   |   0.573335   |   0.635211   |  -5.209958   |-1.037329e+01 |-7.190933e-01 |\\u001b[0m\\n\",\n      \"|  452  |11.3000 |  1   |   0.601036   |   0.589727   |  -5.203174   |-1.037253e+01 |-7.191356e-01 |\\u001b[0m\\n\",\n      \"|  453  |11.3250 |  1   |   0.588650   |   0.649352   |  -5.201050   |-1.037174e+01 |-7.191795e-01 |\\u001b[0m\\n\",\n      \"|  454  |11.3500 |  1   |   0.581506   |   0.609257   |  -5.196793   |-1.037094e+01 |-7.192250e-01 |\\u001b[0m\\n\",\n      \"|  455  |11.3750 |  1   |   0.589146   |   0.602935   |  -5.195584   |-1.037011e+01 |-7.192719e-01 |\\u001b[0m\\n\",\n      \"|  456  |11.4000 |  1   |   0.604540   |   0.602902   |  -5.192228   |-1.036927e+01 |-7.193204e-01 |\\u001b[0m\\n\",\n      \"|  457  |11.4250 |  1   |   0.600579   |   0.594754   |  -5.191012   |-1.036841e+01 |-7.193705e-01 |\\u001b[0m\\n\",\n      \"|  458  |11.4500 |  1   |   0.594932   |   0.585988   |  -5.182644   |-1.036753e+01 |-7.194222e-01 |\\u001b[0m\\n\",\n      \"|  459  |11.4750 |  1   |   0.594136   |   0.587465   |  -5.180474   |-1.036663e+01 |-7.194754e-01 |\\u001b[0m\\n\",\n      \"|  460  |11.5000 |  1   |   0.615072   |   0.617353   |  -5.174101   |-1.036571e+01 |-7.195302e-01 |\\u001b[0m\\n\",\n      \"|  461  |11.5250 |  1   |   0.580867   |   0.632210   |  -5.174853   |-1.036478e+01 |-7.195865e-01 |\\u001b[0m\\n\",\n      \"|  462  |11.5500 |  1   |   0.594978   |   0.646045   |  -5.170050   |-1.036382e+01 |-7.196442e-01 |\\u001b[0m\\n\",\n      \"|  463  |11.5750 |  1   |   0.578537   |   0.617545   |  -5.167418   |-1.036285e+01 |-7.197035e-01 |\\u001b[0m\\n\",\n      \"|  464  |11.6000 |  1   |   0.591423   |   0.656918   |  -5.163354   |-1.036186e+01 |-7.197643e-01 |\\u001b[0m\\n\",\n      \"|  465  |11.6250 |  1   |   0.596206   |   0.593319   |  -5.154243   |-1.036085e+01 |-7.198267e-01 |\\u001b[0m\\n\",\n      \"|  466  |11.6500 |  1   |   0.594452   |   0.615504   |  -5.154289   |-1.035983e+01 |-7.198905e-01 |\\u001b[0m\\n\",\n      \"|  467  |11.6750 |  1   |   0.585962   |   0.589556   |  -5.148727   |-1.035878e+01 |-7.199559e-01 |\\u001b[0m\\n\",\n      \"|  468  |11.7000 |  1   |   0.590704   |   0.592317   |  -5.148438   |-1.035772e+01 |-7.200226e-01 |\\u001b[0m\\n\",\n      \"|  469  |11.7250 |  1   |   0.588268   |   0.610512   |  -5.143636   |-1.035664e+01 |-7.200909e-01 |\\u001b[0m\\n\",\n      \"|  470  |11.7500 |  1   |   0.613000   |   0.604874   |  -5.138982   |-1.035554e+01 |-7.201607e-01 |\\u001b[0m\\n\",\n      \"|  471  |11.7750 |  1   |   0.597844   |   0.624120   |  -5.133073   |-1.035443e+01 |-7.202319e-01 |\\u001b[0m\\n\",\n      \"|  472  |11.8000 |  1   |   0.612249   |   0.607180   |  -5.128111   |-1.035330e+01 |-7.203046e-01 |\\u001b[0m\\n\",\n      \"|  473  |11.8250 |  1   |   0.589453   |   0.613552   |  -5.126736   |-1.035215e+01 |-7.203787e-01 |\\u001b[0m\\n\",\n      \"|  474  |11.8500 |  1   |   0.593775   |   0.611720   |  -5.123366   |-1.035098e+01 |-7.204543e-01 |\\u001b[0m\\n\",\n      \"|  475  |11.8750 |  1   |   0.589657   |   0.587944   |  -5.120797   |-1.034980e+01 |-7.205313e-01 |\\u001b[0m\\n\",\n      \"|  476  |11.9000 |  1   |   0.589097   |   0.606891   |  -5.114568   |-1.034860e+01 |-7.206098e-01 |\\u001b[0m\\n\",\n      \"|  477  |11.9250 |  1   |   0.587495   |   0.629681   |  -5.110620   |-1.034739e+01 |-7.206897e-01 |\\u001b[0m\\n\",\n      \"|  478  |11.9500 |  1   |   0.584468   |   0.608920   |  -5.103850   |-1.034615e+01 |-7.207710e-01 |\\u001b[0m\\n\",\n      \"|  479  |11.9750 |  1   |   0.590653   |   0.613406   |  -5.103272   |-1.034491e+01 |-7.208537e-01 |\\u001b[0m\\n\",\n      \"|  480  |12.0000 |  1   |   0.622715   |   0.666483   |  -5.099819   |-1.034364e+01 |-7.209378e-01 |\\u001b[0m\\n\",\n      \"|  481  |12.0250 |  1   |   0.604598   |   0.600735   |  -5.096876   |-1.034236e+01 |-7.210233e-01 |\\u001b[0m\\n\",\n      \"|  482  |12.0500 |  1   |   0.607466   |   0.600419   |  -5.092345   |-1.034106e+01 |-7.211102e-01 |\\u001b[0m\\n\",\n      \"|  483  |12.0750 |  1   |   0.611803   |   0.651007   |  -5.086132   |-1.033975e+01 |-7.211985e-01 |\\u001b[0m\\n\",\n      \"|  484  |12.1000 |  1   |   0.600163   |   0.604296   |  -5.082930   |-1.033842e+01 |-7.212882e-01 |\\u001b[0m\\n\",\n      \"|  485  |12.1250 |  1   |   0.597081   |   0.608633   |  -5.078037   |-1.033707e+01 |-7.213792e-01 |\\u001b[0m\\n\",\n      \"|  486  |12.1500 |  1   |   0.599493   |   0.694460   |  -5.078534   |-1.033571e+01 |-7.214716e-01 |\\u001b[0m\\n\",\n      \"|  487  |12.1750 |  1   |   0.569671   |   0.611804   |  -5.072894   |-1.033433e+01 |-7.215653e-01 |\\u001b[0m\\n\",\n      \"|  488  |12.2000 |  1   |   0.590231   |   0.592073   |  -5.070548   |-1.033294e+01 |-7.216604e-01 |\\u001b[0m\\n\",\n      \"|  489  |12.2250 |  1   |   0.586426   |   0.587308   |  -5.063791   |-1.033153e+01 |-7.217569e-01 |\\u001b[0m\\n\",\n      \"|  490  |12.2500 |  1   |   0.605616   |   0.639888   |  -5.060453   |-1.033011e+01 |-7.218546e-01 |\\u001b[0m\\n\",\n      \"|  491  |12.2750 |  1   |   0.601391   |   0.589785   |  -5.056911   |-1.032867e+01 |-7.219537e-01 |\\u001b[0m\\n\",\n      \"|  492  |12.3000 |  1   |   0.583376   |   0.588843   |  -5.054795   |-1.032722e+01 |-7.220541e-01 |\\u001b[0m\\n\",\n      \"|  493  |12.3250 |  1   |   0.591293   |   0.608539   |  -5.052808   |-1.032575e+01 |-7.221558e-01 |\\u001b[0m\\n\",\n      \"|  494  |12.3500 |  1   |   0.568992   |   0.595768   |  -5.047491   |-1.032427e+01 |-7.222588e-01 |\\u001b[0m\\n\",\n      \"|  495  |12.3750 |  1   |   0.563630   |   0.599818   |  -5.043728   |-1.032277e+01 |-7.223631e-01 |\\u001b[0m\\n\",\n      \"|  496  |12.4000 |  1   |   0.583918   |   0.582994   |  -5.038711   |-1.032126e+01 |-7.224687e-01 |\\u001b[0m\\n\",\n      \"|  497  |12.4250 |  1   |   0.587738   |   0.584071   |  -5.036205   |-1.031973e+01 |-7.225755e-01 |\\u001b[0m\\n\",\n      \"|  498  |12.4500 |  1   |   0.575600   |   0.588839   |  -5.033715   |-1.031819e+01 |-7.226837e-01 |\\u001b[0m\\n\",\n      \"|  499  |12.4750 |  1   |   0.586772   |   0.589606   |  -5.031815   |-1.031664e+01 |-7.227930e-01 |\\u001b[0m\\n\",\n      \"|  500  |12.5000 |  1   |   0.577898   |   0.602334   |  -5.027416   |-1.031507e+01 |-7.229037e-01 |\\u001b[0m\\n\",\n      \"|  501  |12.5250 |  1   |   0.585324   |   0.589641   |  -5.023384   |-1.031348e+01 |-7.230155e-01 |\\u001b[0m\\n\",\n      \"|  502  |12.5500 |  1   |   0.585512   |   0.584594   |  -5.019042   |-1.031189e+01 |-7.231287e-01 |\\u001b[0m\\n\",\n      \"|  503  |12.5750 |  1   |   0.583865   |   0.582880   |  -5.016063   |-1.031028e+01 |-7.232430e-01 |\\u001b[0m\\n\",\n      \"|  504  |12.6000 |  1   |   0.588496   |   0.592948   |  -5.014501   |-1.030865e+01 |-7.233586e-01 |\\u001b[0m\\n\",\n      \"|  505  |12.6250 |  1   |   0.587081   |   0.593772   |  -5.011221   |-1.030702e+01 |-7.234753e-01 |\\u001b[0m\\n\",\n      \"|  506  |12.6500 |  1   |   0.585744   |   0.587407   |  -5.009390   |-1.030537e+01 |-7.235933e-01 |\\u001b[0m\\n\",\n      \"|  507  |12.6750 |  1   |   0.584881   |   0.596360   |  -5.003415   |-1.030370e+01 |-7.237125e-01 |\\u001b[0m\\n\",\n      \"|  508  |12.7000 |  1   |   0.596729   |   0.591525   |  -5.001095   |-1.030203e+01 |-7.238329e-01 |\\u001b[0m\\n\",\n      \"|  509  |12.7250 |  1   |   0.596917   |   0.597681   |  -4.997208   |-1.030034e+01 |-7.239544e-01 |\\u001b[0m\\n\",\n      \"|  510  |12.7500 |  1   |   0.591709   |   0.586425   |  -4.995682   |-1.029863e+01 |-7.240771e-01 |\\u001b[0m\\n\",\n      \"|  511  |12.7750 |  1   |   0.587641   |   0.591100   |  -4.993524   |-1.029692e+01 |-7.242010e-01 |\\u001b[0m\\n\",\n      \"|  512  |12.8000 |  1   |   0.587204   |   0.586659   |  -4.990360   |-1.029519e+01 |-7.243260e-01 |\\u001b[0m\\n\",\n      \"|  513  |12.8250 |  1   |   0.591092   |   0.587204   |  -4.986833   |-1.029345e+01 |-7.244521e-01 |\\u001b[0m\\n\",\n      \"|  514  |12.8500 |  1   |   0.585463   |   0.583301   |  -4.982664   |-1.029170e+01 |-7.245795e-01 |\\u001b[0m\\n\",\n      \"|  515  |12.8750 |  1   |   0.589045   |   0.586801   |  -4.980566   |-1.028993e+01 |-7.247079e-01 |\\u001b[0m\\n\",\n      \"|  516  |12.9000 |  1   |   0.596714   |   0.601805   |  -4.977829   |-1.028816e+01 |-7.248374e-01 |\\u001b[0m\\n\",\n      \"|  517  |12.9250 |  1   |   0.584486   |   0.594004   |  -4.976834   |-1.028637e+01 |-7.249680e-01 |\\u001b[0m\\n\",\n      \"|  518  |12.9500 |  1   |   0.577005   |   0.592874   |  -4.973053   |-1.028457e+01 |-7.250998e-01 |\\u001b[0m\\n\",\n      \"|  519  |12.9750 |  1   |   0.576873   |   0.590686   |  -4.970798   |-1.028276e+01 |-7.252326e-01 |\\u001b[0m\\n\",\n      \"|  520  |13.0000 |  1   |   0.588123   |   0.584250   |  -4.966119   |-1.028094e+01 |-7.253666e-01 |\\u001b[0m\\n\",\n      \"|  521  |13.0250 |  1   |   0.588080   |   0.592052   |  -4.964473   |-1.027910e+01 |-7.255016e-01 |\\u001b[0m\\n\",\n      \"|  522  |13.0500 |  1   |   0.586211   |   0.588701   |  -4.961953   |-1.027726e+01 |-7.256376e-01 |\\u001b[0m\\n\",\n      \"|  523  |13.0750 |  1   |   0.582357   |   0.595669   |  -4.960468   |-1.027540e+01 |-7.257747e-01 |\\u001b[0m\\n\",\n      \"|  524  |13.1000 |  1   |   0.569600   |   0.594107   |  -4.958069   |-1.027353e+01 |-7.259128e-01 |\\u001b[0m\\n\",\n      \"|  525  |13.1250 |  1   |   0.575376   |   0.594160   |  -4.954661   |-1.027165e+01 |-7.260521e-01 |\\u001b[0m\\n\",\n      \"|  526  |13.1500 |  1   |   0.578324   |   0.588696   |  -4.952012   |-1.026976e+01 |-7.261923e-01 |\\u001b[0m\\n\",\n      \"|  527  |13.1750 |  1   |   0.587095   |   0.592266   |  -4.948571   |-1.026786e+01 |-7.263335e-01 |\\u001b[0m\\n\",\n      \"|  528  |13.2000 |  1   |   0.569050   |   0.599524   |  -4.947926   |-1.026595e+01 |-7.264758e-01 |\\u001b[0m\\n\",\n      \"|  529  |13.2250 |  1   |   0.542086   |   0.614471   |  -4.945114   |-1.026403e+01 |-7.266190e-01 |\\u001b[0m\\n\",\n      \"|  530  |13.2500 |  1   |   0.540521   |   0.611883   |  -4.943929   |-1.026210e+01 |-7.267632e-01 |\\u001b[0m\\n\",\n      \"|  531  |13.2750 |  1   |   0.543265   |   0.621184   |  -4.940566   |-1.026016e+01 |-7.269084e-01 |\\u001b[0m\\n\",\n      \"|  532  |13.3000 |  1   |   0.541681   |   0.615142   |  -4.937617   |-1.025821e+01 |-7.270546e-01 |\\u001b[0m\\n\",\n      \"|  533  |13.3250 |  1   |   0.540352   |   0.616832   |  -4.935709   |-1.025625e+01 |-7.272018e-01 |\\u001b[0m\\n\",\n      \"|  534  |13.3500 |  1   |   0.544213   |   0.620769   |  -4.933038   |-1.025428e+01 |-7.273499e-01 |\\u001b[0m\\n\",\n      \"|  535  |13.3750 |  1   |   0.580695   |   0.590777   |  -4.932776   |-1.025230e+01 |-7.274989e-01 |\\u001b[0m\\n\",\n      \"|  536  |13.4000 |  1   |   0.575465   |   0.596223   |  -4.929595   |-1.025031e+01 |-7.276489e-01 |\\u001b[0m\\n\",\n      \"|  537  |13.4250 |  1   |   0.542536   |   0.618744   |  -4.928176   |-1.024831e+01 |-7.277998e-01 |\\u001b[0m\\n\",\n      \"|  538  |13.4500 |  1   |   0.580911   |   0.591514   |  -4.924586   |-1.024631e+01 |-7.279516e-01 |\\u001b[0m\\n\",\n      \"|  539  |13.4750 |  1   |   0.581108   |   0.591034   |  -4.922988   |-1.024429e+01 |-7.281044e-01 |\\u001b[0m\\n\",\n      \"|  540  |13.5000 |  1   |   0.545993   |   0.614974   |  -4.920767   |-1.024227e+01 |-7.282580e-01 |\\u001b[0m\\n\",\n      \"|  541  |13.5250 |  1   |   0.545921   |   0.615012   |  -4.919915   |-1.024023e+01 |-7.284125e-01 |\\u001b[0m\\n\",\n      \"|  542  |13.5500 |  1   |   0.542495   |   0.613665   |  -4.917870   |-1.023819e+01 |-7.285679e-01 |\\u001b[0m\\n\",\n      \"|  543  |13.5750 |  1   |   0.536964   |   0.622532   |  -4.915675   |-1.023614e+01 |-7.287241e-01 |\\u001b[0m\\n\",\n      \"|  544  |13.6000 |  1   |   0.554106   |   0.603419   |  -4.913529   |-1.023408e+01 |-7.288812e-01 |\\u001b[0m\\n\",\n      \"|  545  |13.6250 |  1   |   0.578840   |   0.604562   |  -4.910680   |-1.023202e+01 |-7.290392e-01 |\\u001b[0m\\n\",\n      \"|  546  |13.6500 |  1   |   0.585058   |   0.606280   |  -4.910137   |-1.022994e+01 |-7.291979e-01 |\\u001b[0m\\n\",\n      \"|  547  |13.6750 |  1   |   0.579318   |   0.591994   |  -4.907749   |-1.022786e+01 |-7.293575e-01 |\\u001b[0m\\n\",\n      \"|  548  |13.7000 |  1   |   0.580380   |   0.589279   |  -4.907371   |-1.022577e+01 |-7.295179e-01 |\\u001b[0m\\n\",\n      \"|  549  |13.7250 |  1   |   0.584794   |   0.591958   |  -4.904445   |-1.022367e+01 |-7.296792e-01 |\\u001b[0m\\n\",\n      \"|  550  |13.7500 |  1   |   0.588687   |   0.601052   |  -4.902856   |-1.022157e+01 |-7.298412e-01 |\\u001b[0m\\n\",\n      \"|  551  |13.7750 |  1   |   0.579102   |   0.595429   |  -4.900526   |-1.021945e+01 |-7.300040e-01 |\\u001b[0m\\n\",\n      \"|  552  |13.8000 |  1   |   0.579922   |   0.596135   |  -4.899156   |-1.021733e+01 |-7.301676e-01 |\\u001b[0m\\n\",\n      \"|  553  |13.8250 |  1   |   0.579598   |   0.597193   |  -4.898152   |-1.021521e+01 |-7.303320e-01 |\\u001b[0m\\n\",\n      \"|  554  |13.8500 |  1   |   0.589419   |   0.608047   |  -4.896538   |-1.021307e+01 |-7.304971e-01 |\\u001b[0m\\n\",\n      \"|  555  |13.8750 |  1   |   0.584321   |   0.601955   |  -4.895262   |-1.021093e+01 |-7.306629e-01 |\\u001b[0m\\n\",\n      \"|  556  |13.9000 |  1   |   0.579038   |   0.593430   |  -4.892631   |-1.020879e+01 |-7.308295e-01 |\\u001b[0m\\n\",\n      \"|  557  |13.9250 |  1   |   0.577858   |   0.591474   |  -4.891491   |-1.020663e+01 |-7.309968e-01 |\\u001b[0m\\n\",\n      \"|  558  |13.9500 |  1   |   0.578370   |   0.601104   |  -4.889505   |-1.020447e+01 |-7.311649e-01 |\\u001b[0m\\n\",\n      \"|  559  |13.9750 |  1   |   0.574518   |   0.594961   |  -4.888943   |-1.020231e+01 |-7.313336e-01 |\\u001b[0m\\n\",\n      \"|  560  |14.0000 |  1   |   0.578717   |   0.588370   |  -4.887586   |-1.020014e+01 |-7.315030e-01 |\\u001b[0m\\n\",\n      \"|  561  |14.0250 |  1   |   0.569221   |   0.592313   |  -4.886037   |-1.019796e+01 |-7.316731e-01 |\\u001b[0m\\n\",\n      \"|  562  |14.0500 |  1   |   0.569323   |   0.588773   |  -4.884458   |-1.019577e+01 |-7.318439e-01 |\\u001b[0m\\n\",\n      \"|  563  |14.0750 |  1   |   0.575350   |   0.590234   |  -4.882463   |-1.019359e+01 |-7.320154e-01 |\\u001b[0m\\n\",\n      \"|  564  |14.1000 |  1   |   0.565140   |   0.597502   |  -4.881607   |-1.019139e+01 |-7.321875e-01 |\\u001b[0m\\n\",\n      \"|  565  |14.1250 |  1   |   0.555995   |   0.601872   |  -4.880250   |-1.018919e+01 |-7.323602e-01 |\\u001b[0m\\n\",\n      \"|  566  |14.1500 |  1   |   0.582065   |   0.599824   |  -4.879771   |-1.018699e+01 |-7.325336e-01 |\\u001b[0m\\n\",\n      \"|  567  |14.1750 |  1   |   0.573287   |   0.591480   |  -4.877873   |-1.018478e+01 |-7.327076e-01 |\\u001b[0m\\n\",\n      \"|  568  |14.2000 |  1   |   0.574334   |   0.602253   |  -4.876963   |-1.018256e+01 |-7.328822e-01 |\\u001b[0m\\n\",\n      \"|  569  |14.2250 |  1   |   0.531243   |   0.628437   |  -4.874752   |-1.018034e+01 |-7.330574e-01 |\\u001b[0m\\n\",\n      \"|  570  |14.2500 |  1   |   0.530046   |   0.617958   |  -4.874261   |-1.017812e+01 |-7.332332e-01 |\\u001b[0m\\n\",\n      \"|  571  |14.2750 |  1   |   0.533493   |   0.621578   |  -4.872975   |-1.017589e+01 |-7.334095e-01 |\\u001b[0m\\n\",\n      \"|  572  |14.3000 |  1   |   0.531280   |   0.620959   |  -4.872344   |-1.017365e+01 |-7.335865e-01 |\\u001b[0m\\n\",\n      \"|  573  |14.3250 |  1   |   0.533888   |   0.617618   |  -4.871330   |-1.017142e+01 |-7.337640e-01 |\\u001b[0m\\n\",\n      \"|  574  |14.3500 |  1   |   0.538329   |   0.615710   |  -4.869608   |-1.016917e+01 |-7.339420e-01 |\\u001b[0m\\n\",\n      \"|  575  |14.3750 |  1   |   0.538880   |   0.617203   |  -4.868750   |-1.016693e+01 |-7.341206e-01 |\\u001b[0m\\n\",\n      \"|  576  |14.4000 |  1   |   0.538717   |   0.619451   |  -4.867217   |-1.016468e+01 |-7.342997e-01 |\\u001b[0m\\n\",\n      \"|  577  |14.4250 |  1   |   0.521259   |   0.628772   |  -4.866965   |-1.016243e+01 |-7.344794e-01 |\\u001b[0m\\n\",\n      \"|  578  |14.4500 |  1   |   0.532905   |   0.622927   |  -4.865877   |-1.016017e+01 |-7.346595e-01 |\\u001b[0m\\n\",\n      \"|  579  |14.4750 |  1   |   0.533617   |   0.622496   |  -4.865300   |-1.015791e+01 |-7.348401e-01 |\\u001b[0m\\n\",\n      \"|  580  |14.5000 |  1   |   0.534588   |   0.619178   |  -4.863812   |-1.015565e+01 |-7.350212e-01 |\\u001b[0m\\n\",\n      \"|  581  |14.5250 |  1   |   0.541063   |   0.619951   |  -4.862879   |-1.015338e+01 |-7.352028e-01 |\\u001b[0m\\n\",\n      \"|  582  |14.5500 |  1   |   0.552002   |   0.630617   |  -4.861832   |-1.015111e+01 |-7.353848e-01 |\\u001b[0m\\n\",\n      \"|  583  |14.5750 |  1   |   0.534411   |   0.618651   |  -4.861210   |-1.014884e+01 |-7.355673e-01 |\\u001b[0m\\n\",\n      \"|  584  |14.6000 |  1   |   0.519947   |   0.634783   |  -4.860831   |-1.014656e+01 |-7.357502e-01 |\\u001b[0m\\n\",\n      \"|  585  |14.6250 |  1   |   0.532511   |   0.623628   |  -4.859751   |-1.014429e+01 |-7.359336e-01 |\\u001b[0m\\n\",\n      \"|  586  |14.6500 |  1   |   0.533837   |   0.631545   |  -4.859199   |-1.014201e+01 |-7.361174e-01 |\\u001b[0m\\n\",\n      \"|  587  |14.6750 |  1   |   0.531337   |   0.621002   |  -4.857699   |-1.013972e+01 |-7.363016e-01 |\\u001b[0m\\n\",\n      \"|  588  |14.7000 |  1   |   0.533695   |   0.628152   |  -4.857362   |-1.013744e+01 |-7.364862e-01 |\\u001b[0m\\n\",\n      \"|  589  |14.7250 |  1   |   0.537053   |   0.620282   |  -4.856500   |-1.013515e+01 |-7.366711e-01 |\\u001b[0m\\n\",\n      \"|  590  |14.7500 |  1   |   0.530726   |   0.624015   |  -4.856289   |-1.013286e+01 |-7.368564e-01 |\\u001b[0m\\n\",\n      \"|  591  |14.7750 |  1   |   0.536236   |   0.627392   |  -4.855632   |-1.013057e+01 |-7.370421e-01 |\\u001b[0m\\n\",\n      \"|  592  |14.8000 |  1   |   0.543870   |   0.627993   |  -4.854757   |-1.012828e+01 |-7.372282e-01 |\\u001b[0m\\n\",\n      \"|  593  |14.8250 |  1   |   0.526978   |   0.622442   |  -4.854112   |-1.012599e+01 |-7.374146e-01 |\\u001b[0m\\n\",\n      \"|  594  |14.8500 |  1   |   0.533051   |   0.620095   |  -4.853078   |-1.012369e+01 |-7.376013e-01 |\\u001b[0m\\n\",\n      \"|  595  |14.8750 |  1   |   0.537832   |   0.629321   |  -4.853194   |-1.012140e+01 |-7.377884e-01 |\\u001b[0m\\n\",\n      \"|  596  |14.9000 |  1   |   0.534586   |   0.618118   |  -4.852261   |-1.011910e+01 |-7.379757e-01 |\\u001b[0m\\n\",\n      \"|  597  |14.9250 |  1   |   0.567604   |   0.593661   |  -4.852487   |-1.011680e+01 |-7.381634e-01 |\\u001b[0m\\n\",\n      \"|  598  |14.9500 |  1   |   0.572954   |   0.599532   |  -4.851275   |-1.011451e+01 |-7.383513e-01 |\\u001b[0m\\n\",\n      \"|  599  |14.9750 |  1   |   0.562174   |   0.595357   |  -4.851012   |-1.011221e+01 |-7.385395e-01 |\\u001b[0m\\n\",\n      \"|  600  |15.0000 |  1   |   0.565041   |   0.594815   |  -4.850216   |-1.010991e+01 |-7.387280e-01 |\\u001b[0m\\n\",\n      \"|  601  |15.0250 |  1   |   0.568619   |   0.602458   |  -4.849993   |-1.010761e+01 |-7.389167e-01 |\\u001b[0m\\n\",\n      \"|  602  |15.0500 |  1   |   0.565685   |   0.599703   |  -4.849887   |-1.010531e+01 |-7.391057e-01 |\\u001b[0m\\n\",\n      \"|  603  |15.0750 |  1   |   0.559376   |   0.612765   |  -4.849425   |-1.010300e+01 |-7.392949e-01 |\\u001b[0m\\n\",\n      \"|  604  |15.1000 |  1   |   0.558552   |   0.602107   |  -4.849206   |-1.010070e+01 |-7.394843e-01 |\\u001b[0m\\n\",\n      \"|  605  |15.1250 |  1   |   0.582718   |   0.633646   |  -4.848406   |-1.009840e+01 |-7.396740e-01 |\\u001b[0m\\n\",\n      \"|  606  |15.1500 |  1   |   0.581577   |   0.623610   |  -4.848264   |-1.009610e+01 |-7.398638e-01 |\\u001b[0m\\n\",\n      \"|  607  |15.1750 |  1   |   0.565744   |   0.594525   |  -4.847774   |-1.009380e+01 |-7.400538e-01 |\\u001b[0m\\n\",\n      \"|  608  |15.2000 |  1   |   0.564061   |   0.594557   |  -4.848037   |-1.009150e+01 |-7.402440e-01 |\\u001b[0m\\n\",\n      \"|  609  |15.2250 |  1   |   0.567888   |   0.599122   |  -4.847578   |-1.008921e+01 |-7.404344e-01 |\\u001b[0m\\n\",\n      \"|  610  |15.2500 |  1   |   0.570234   |   0.602823   |  -4.847542   |-1.008691e+01 |-7.406249e-01 |\\u001b[0m\\n\",\n      \"|  611  |15.2750 |  1   |   0.561263   |   0.598452   |  -4.847030   |-1.008461e+01 |-7.408156e-01 |\\u001b[0m\\n\",\n      \"|  612  |15.3000 |  1   |   0.568963   |   0.599018   |  -4.846710   |-1.008231e+01 |-7.410064e-01 |\\u001b[0m\\n\",\n      \"|  613  |15.3250 |  1   |   0.559163   |   0.605724   |  -4.846813   |-1.008002e+01 |-7.411973e-01 |\\u001b[0m\\n\",\n      \"|  614  |15.3500 |  1   |   0.564462   |   0.599463   |  -4.846562   |-1.007773e+01 |-7.413883e-01 |\\u001b[0m\\n\",\n      \"|  615  |15.3750 |  1   |   0.580952   |   0.610074   |  -4.846943   |-1.007543e+01 |-7.415794e-01 |\\u001b[0m\\n\",\n      \"|  616  |15.4000 |  1   |   0.568574   |   0.597096   |  -4.846413   |-1.007314e+01 |-7.417706e-01 |\\u001b[0m\\n\",\n      \"|  617  |15.4250 |  1   |   0.565757   |   0.596118   |  -4.846541   |-1.007085e+01 |-7.419619e-01 |\\u001b[0m\\n\",\n      \"|  618  |15.4500 |  1   |   0.537671   |   0.632581   |  -4.846117   |-1.006857e+01 |-7.421533e-01 |\\u001b[0m\\n\",\n      \"|  619  |15.4750 |  1   |   0.561591   |   0.596576   |  -4.846302   |-1.006628e+01 |-7.423447e-01 |\\u001b[0m\\n\",\n      \"|  620  |15.5000 |  1   |   0.559380   |   0.594044   |  -4.846417   |-1.006400e+01 |-7.425361e-01 |\\u001b[0m\\n\",\n      \"|  621  |15.5250 |  1   |   0.550661   |   0.639299   |  -4.846521   |-1.006172e+01 |-7.427276e-01 |\\u001b[0m\\n\",\n      \"|  622  |15.5500 |  1   |   0.564344   |   0.599497   |  -4.846664   |-1.005944e+01 |-7.429191e-01 |\\u001b[0m\\n\",\n      \"|  623  |15.5750 |  1   |   0.564470   |   0.598390   |  -4.846375   |-1.005716e+01 |-7.431107e-01 |\\u001b[0m\\n\",\n      \"|  624  |15.6000 |  1   |   0.582095   |   0.621527   |  -4.846646   |-1.005489e+01 |-7.433022e-01 |\\u001b[0m\\n\",\n      \"|  625  |15.6250 |  1   |   0.563067   |   0.594485   |  -4.846450   |-1.005262e+01 |-7.434937e-01 |\\u001b[0m\\n\",\n      \"|  626  |15.6500 |  1   |   0.556217   |   0.597713   |  -4.847057   |-1.005035e+01 |-7.436852e-01 |\\u001b[0m\\n\",\n      \"|  627  |15.6750 |  1   |   0.556730   |   0.599759   |  -4.847059   |-1.004809e+01 |-7.438766e-01 |\\u001b[0m\\n\",\n      \"|  628  |15.7000 |  1   |   0.559253   |   0.596950   |  -4.847442   |-1.004582e+01 |-7.440680e-01 |\\u001b[0m\\n\",\n      \"|  629  |15.7250 |  1   |   0.566564   |   0.599786   |  -4.847356   |-1.004357e+01 |-7.442594e-01 |\\u001b[0m\\n\",\n      \"|  630  |15.7500 |  1   |   0.541901   |   0.610011   |  -4.847580   |-1.004131e+01 |-7.444507e-01 |\\u001b[0m\\n\",\n      \"|  631  |15.7750 |  1   |   0.552107   |   0.603683   |  -4.847782   |-1.003906e+01 |-7.446419e-01 |\\u001b[0m\\n\",\n      \"|  632  |15.8000 |  1   |   0.559163   |   0.600536   |  -4.848163   |-1.003681e+01 |-7.448331e-01 |\\u001b[0m\\n\",\n      \"|  633  |15.8250 |  1   |   0.565520   |   0.607117   |  -4.848649   |-1.003456e+01 |-7.450241e-01 |\\u001b[0m\\n\",\n      \"|  634  |15.8500 |  1   |   0.563058   |   0.602004   |  -4.848834   |-1.003232e+01 |-7.452150e-01 |\\u001b[0m\\n\",\n      \"|  635  |15.8750 |  1   |   0.565077   |   0.604592   |  -4.849242   |-1.003009e+01 |-7.454058e-01 |\\u001b[0m\\n\",\n      \"|  636  |15.9000 |  1   |   0.561084   |   0.613315   |  -4.849257   |-1.002785e+01 |-7.455965e-01 |\\u001b[0m\\n\",\n      \"|  637  |15.9250 |  1   |   0.562131   |   0.608055   |  -4.849893   |-1.002562e+01 |-7.457870e-01 |\\u001b[0m\\n\",\n      \"|  638  |15.9500 |  1   |   0.567037   |   0.607231   |  -4.850162   |-1.002340e+01 |-7.459774e-01 |\\u001b[0m\\n\",\n      \"|  639  |15.9750 |  1   |   0.559362   |   0.605681   |  -4.850853   |-1.002118e+01 |-7.461676e-01 |\\u001b[0m\\n\",\n      \"|  640  |16.0000 |  1   |   0.559990   |   0.606771   |  -4.851290   |-1.001896e+01 |-7.463577e-01 |\\u001b[0m\\n\",\n      \"|  641  |16.0250 |  1   |   0.563540   |   0.604675   |  -4.851567   |-1.001675e+01 |-7.465476e-01 |\\u001b[0m\\n\",\n      \"|  642  |16.0500 |  1   |   0.569776   |   0.614118   |  -4.852131   |-1.001455e+01 |-7.467372e-01 |\\u001b[0m\\n\",\n      \"|  643  |16.0750 |  1   |   0.526022   |   0.638151   |  -4.852404   |-1.001234e+01 |-7.469267e-01 |\\u001b[0m\\n\",\n      \"|  644  |16.1000 |  1   |   0.561008   |   0.613815   |  -4.853264   |-1.001015e+01 |-7.471159e-01 |\\u001b[0m\\n\",\n      \"|  645  |16.1250 |  1   |   0.558149   |   0.610124   |  -4.853699   |-1.000796e+01 |-7.473050e-01 |\\u001b[0m\\n\",\n      \"|  646  |16.1500 |  1   |   0.558817   |   0.602424   |  -4.854509   |-1.000577e+01 |-7.474938e-01 |\\u001b[0m\\n\",\n      \"|  647  |16.1750 |  1   |   0.551800   |   0.649783   |  -4.854874   |-1.000359e+01 |-7.476823e-01 |\\u001b[0m\\n\",\n      \"|  648  |16.2000 |  1   |   0.563560   |   0.614133   |  -4.830412   |-1.000141e+01 |-7.478702e-01 |\\u001b[0m\\n\",\n      \"|  649  |16.2250 |  1   |   0.527692   |   0.637038   |  -4.860230   |-9.999242e+00 |-7.480574e-01 |\\u001b[0m\\n\",\n      \"|  650  |16.2500 |  1   |   0.520572   |   0.630335   |  -4.856936   |-9.997077e+00 |-7.482449e-01 |\\u001b[0m\\n\",\n      \"|  651  |16.2750 |  1   |   0.538065   |   0.623007   |  -4.855762   |-9.994918e+00 |-7.484321e-01 |\\u001b[0m\\n\",\n      \"|  652  |16.3000 |  1   |   0.563850   |   0.606399   |  -4.859225   |-9.992765e+00 |-7.486189e-01 |\\u001b[0m\\n\",\n      \"|  653  |16.3250 |  1   |   0.569525   |   0.613083   |  -4.857579   |-9.990618e+00 |-7.488056e-01 |\\u001b[0m\\n\",\n      \"|  654  |16.3500 |  1   |   0.572920   |   0.616659   |  -4.856411   |-9.988477e+00 |-7.489920e-01 |\\u001b[0m\\n\",\n      \"|  655  |16.3750 |  1   |   0.565054   |   0.622951   |  -4.859712   |-9.986343e+00 |-7.491781e-01 |\\u001b[0m\\n\",\n      \"|  656  |16.4000 |  1   |   0.538484   |   0.637184   |  -4.858656   |-9.984214e+00 |-7.493640e-01 |\\u001b[0m\\n\",\n      \"|  657  |16.4250 |  1   |   0.572575   |   0.628920   |  -4.863059   |-9.982092e+00 |-7.495496e-01 |\\u001b[0m\\n\",\n      \"|  658  |16.4500 |  1   |   0.553086   |   0.615147   |  -4.865486   |-9.979977e+00 |-7.497349e-01 |\\u001b[0m\\n\",\n      \"|  659  |16.4750 |  1   |   0.554584   |   0.608671   |  -4.862494   |-9.977868e+00 |-7.499197e-01 |\\u001b[0m\\n\",\n      \"|  660  |16.5000 |  1   |   0.566182   |   0.632013   |  -4.865031   |-9.975766e+00 |-7.501042e-01 |\\u001b[0m\\n\",\n      \"|  661  |16.5250 |  1   |   0.559237   |   0.607847   |  -4.864222   |-9.973671e+00 |-7.502883e-01 |\\u001b[0m\\n\",\n      \"|  662  |16.5500 |  1   |   0.547495   |   0.609668   |  -4.865897   |-9.971582e+00 |-7.504721e-01 |\\u001b[0m\\n\",\n      \"|  663  |16.5750 |  1   |   0.554912   |   0.604920   |  -4.870242   |-9.969500e+00 |-7.506554e-01 |\\u001b[0m\\n\",\n      \"|  664  |16.6000 |  1   |   0.563164   |   0.608630   |  -4.868999   |-9.967426e+00 |-7.508382e-01 |\\u001b[0m\\n\",\n      \"|  665  |16.6250 |  1   |   0.557828   |   0.607771   |  -4.870617   |-9.965359e+00 |-7.510206e-01 |\\u001b[0m\\n\",\n      \"|  666  |16.6500 |  1   |   0.564567   |   0.611154   |  -4.869702   |-9.963299e+00 |-7.512027e-01 |\\u001b[0m\\n\",\n      \"|  667  |16.6750 |  1   |   0.570958   |   0.634616   |  -4.868988   |-9.961247e+00 |-7.513841e-01 |\\u001b[0m\\n\",\n      \"|  668  |16.7000 |  1   |   0.555363   |   0.608414   |  -4.873698   |-9.959202e+00 |-7.515652e-01 |\\u001b[0m\\n\",\n      \"|  669  |16.7250 |  1   |   0.550943   |   0.608364   |  -4.874542   |-9.957164e+00 |-7.517458e-01 |\\u001b[0m\\n\",\n      \"|  670  |16.7500 |  1   |   0.555703   |   0.608518   |  -4.875535   |-9.955134e+00 |-7.519257e-01 |\\u001b[0m\\n\",\n      \"|  671  |16.7750 |  1   |   0.545052   |   0.613267   |  -4.877426   |-9.953112e+00 |-7.521053e-01 |\\u001b[0m\\n\",\n      \"|  672  |16.8000 |  1   |   0.553070   |   0.605358   |  -4.874922   |-9.951098e+00 |-7.522844e-01 |\\u001b[0m\\n\",\n      \"|  673  |16.8250 |  1   |   0.561627   |   0.612107   |  -4.876898   |-9.949092e+00 |-7.524629e-01 |\\u001b[0m\\n\",\n      \"|  674  |16.8500 |  1   |   0.555659   |   0.607956   |  -4.879987   |-9.947094e+00 |-7.526409e-01 |\\u001b[0m\\n\",\n      \"|  675  |16.8750 |  1   |   0.553403   |   0.616417   |  -4.880702   |-9.945105e+00 |-7.528184e-01 |\\u001b[0m\\n\",\n      \"|  676  |16.9000 |  1   |   0.553432   |   0.612899   |  -4.884087   |-9.943123e+00 |-7.529953e-01 |\\u001b[0m\\n\",\n      \"|  677  |16.9250 |  1   |   0.559188   |   0.618660   |  -4.883577   |-9.941150e+00 |-7.531718e-01 |\\u001b[0m\\n\",\n      \"|  678  |16.9500 |  1   |   0.555787   |   0.615341   |  -4.883057   |-9.939185e+00 |-7.533476e-01 |\\u001b[0m\\n\",\n      \"|  679  |16.9750 |  1   |   0.558311   |   0.612354   |  -4.885587   |-9.937229e+00 |-7.535229e-01 |\\u001b[0m\\n\",\n      \"|  680  |17.0000 |  1   |   0.561945   |   0.618028   |  -4.886378   |-9.935282e+00 |-7.536977e-01 |\\u001b[0m\\n\",\n      \"|  681  |17.0250 |  1   |   0.539489   |   0.628249   |  -4.890029   |-9.933343e+00 |-7.538718e-01 |\\u001b[0m\\n\",\n      \"|  682  |17.0500 |  1   |   0.514794   |   0.643622   |  -4.892106   |-9.931413e+00 |-7.540454e-01 |\\u001b[0m\\n\",\n      \"|  683  |17.0750 |  1   |   0.539393   |   0.626948   |  -4.890958   |-9.929493e+00 |-7.542183e-01 |\\u001b[0m\\n\",\n      \"|  684  |17.1000 |  1   |   0.560875   |   0.618428   |  -4.893438   |-9.927581e+00 |-7.543907e-01 |\\u001b[0m\\n\",\n      \"|  685  |17.1250 |  1   |   0.554366   |   0.611880   |  -4.893277   |-9.925678e+00 |-7.545624e-01 |\\u001b[0m\\n\",\n      \"|  686  |17.1500 |  1   |   0.553763   |   0.618234   |  -4.894869   |-9.923784e+00 |-7.547335e-01 |\\u001b[0m\\n\",\n      \"|  687  |17.1750 |  1   |   0.553390   |   0.611751   |  -4.899919   |-9.921900e+00 |-7.549040e-01 |\\u001b[0m\\n\",\n      \"|  688  |17.2000 |  1   |   0.556929   |   0.626983   |  -4.899359   |-9.920025e+00 |-7.550737e-01 |\\u001b[0m\\n\",\n      \"|  689  |17.2250 |  1   |   0.551784   |   0.617594   |  -4.901290   |-9.918159e+00 |-7.552428e-01 |\\u001b[0m\\n\",\n      \"|  690  |17.2500 |  1   |   0.534141   |   0.623701   |  -4.902376   |-9.916303e+00 |-7.554113e-01 |\\u001b[0m\\n\",\n      \"|  691  |17.2750 |  1   |   0.520007   |   0.638176   |  -4.901707   |-9.914456e+00 |-7.555791e-01 |\\u001b[0m\\n\",\n      \"|  692  |17.3000 |  1   |   0.514522   |   0.638778   |  -4.905930   |-9.912619e+00 |-7.557462e-01 |\\u001b[0m\\n\",\n      \"|  693  |17.3250 |  1   |   0.510692   |   0.643761   |  -4.907376   |-9.910792e+00 |-7.559126e-01 |\\u001b[0m\\n\",\n      \"|  694  |17.3500 |  1   |   0.517713   |   0.643936   |  -4.909717   |-9.908974e+00 |-7.560782e-01 |\\u001b[0m\\n\",\n      \"|  695  |17.3750 |  1   |   0.541182   |   0.655376   |  -4.911696   |-9.907166e+00 |-7.562432e-01 |\\u001b[0m\\n\",\n      \"|  696  |17.4000 |  1   |   0.551757   |   0.611377   |  -4.910876   |-9.905369e+00 |-7.564075e-01 |\\u001b[0m\\n\",\n      \"|  697  |17.4250 |  1   |   0.555262   |   0.614891   |  -4.913403   |-9.903581e+00 |-7.565710e-01 |\\u001b[0m\\n\",\n      \"|  698  |17.4500 |  1   |   0.564454   |   0.624082   |  -4.915500   |-9.901804e+00 |-7.567338e-01 |\\u001b[0m\\n\",\n      \"|  699  |17.4750 |  1   |   0.553199   |   0.610732   |  -4.917215   |-9.900037e+00 |-7.568959e-01 |\\u001b[0m\\n\",\n      \"|  700  |17.5000 |  1   |   0.548138   |   0.608044   |  -4.921356   |-9.898280e+00 |-7.570572e-01 |\\u001b[0m\\n\",\n      \"|  701  |17.5250 |  1   |   0.549388   |   0.607808   |  -4.921642   |-9.896533e+00 |-7.572177e-01 |\\u001b[0m\\n\",\n      \"|  702  |17.5500 |  1   |   0.553081   |   0.618402   |  -4.922276   |-9.894797e+00 |-7.573775e-01 |\\u001b[0m\\n\",\n      \"|  703  |17.5750 |  1   |   0.551544   |   0.613274   |  -4.925124   |-9.893071e+00 |-7.575366e-01 |\\u001b[0m\\n\",\n      \"|  704  |17.6000 |  1   |   0.537771   |   0.622332   |  -4.925960   |-9.891356e+00 |-7.576948e-01 |\\u001b[0m\\n\",\n      \"|  705  |17.6250 |  1   |   0.547941   |   0.612396   |  -4.929428   |-9.889651e+00 |-7.578523e-01 |\\u001b[0m\\n\",\n      \"|  706  |17.6500 |  1   |   0.558546   |   0.618044   |  -4.932578   |-9.887957e+00 |-7.580090e-01 |\\u001b[0m\\n\",\n      \"|  707  |17.6750 |  1   |   0.550670   |   0.613128   |  -4.933198   |-9.886274e+00 |-7.581648e-01 |\\u001b[0m\\n\",\n      \"|  708  |17.7000 |  1   |   0.549359   |   0.610619   |  -4.935304   |-9.884602e+00 |-7.583199e-01 |\\u001b[0m\\n\",\n      \"|  709  |17.7250 |  1   |   0.548109   |   0.608598   |  -4.936363   |-9.882941e+00 |-7.584741e-01 |\\u001b[0m\\n\",\n      \"|  710  |17.7500 |  1   |   0.550066   |   0.621723   |  -4.938473   |-9.881290e+00 |-7.586276e-01 |\\u001b[0m\\n\",\n      \"|  711  |17.7750 |  1   |   0.547227   |   0.613100   |  -4.942387   |-9.879651e+00 |-7.587801e-01 |\\u001b[0m\\n\",\n      \"|  712  |17.8000 |  1   |   0.549032   |   0.607084   |  -4.943841   |-9.878023e+00 |-7.589318e-01 |\\u001b[0m\\n\",\n      \"|  713  |17.8250 |  1   |   0.553408   |   0.626393   |  -4.946716   |-9.876405e+00 |-7.590827e-01 |\\u001b[0m\\n\",\n      \"|  714  |17.8500 |  1   |   0.552940   |   0.612425   |  -4.948343   |-9.874799e+00 |-7.592327e-01 |\\u001b[0m\\n\",\n      \"|  715  |17.8750 |  1   |   0.547835   |   0.608350   |  -4.948430   |-9.873205e+00 |-7.593819e-01 |\\u001b[0m\\n\",\n      \"|  716  |17.9000 |  1   |   0.540325   |   0.615331   |  -4.952754   |-9.871621e+00 |-7.595302e-01 |\\u001b[0m\\n\",\n      \"|  717  |17.9250 |  1   |   0.541983   |   0.615043   |  -4.954732   |-9.870049e+00 |-7.596776e-01 |\\u001b[0m\\n\",\n      \"|  718  |17.9500 |  1   |   0.545322   |   0.613781   |  -4.957229   |-9.868489e+00 |-7.598241e-01 |\\u001b[0m\\n\",\n      \"|  719  |17.9750 |  1   |   0.550283   |   0.619134   |  -4.960988   |-9.866940e+00 |-7.599697e-01 |\\u001b[0m\\n\",\n      \"|  720  |18.0000 |  1   |   0.545893   |   0.614056   |  -4.961059   |-9.865402e+00 |-7.601144e-01 |\\u001b[0m\\n\",\n      \"|  721  |18.0250 |  1   |   0.545672   |   0.612643   |  -4.963571   |-9.863876e+00 |-7.602583e-01 |\\u001b[0m\\n\",\n      \"|  722  |18.0500 |  1   |   0.547688   |   0.613754   |  -4.966223   |-9.862362e+00 |-7.604012e-01 |\\u001b[0m\\n\",\n      \"|  723  |18.0750 |  1   |   0.552767   |   0.618856   |  -4.968695   |-9.860860e+00 |-7.605432e-01 |\\u001b[0m\\n\",\n      \"|  724  |18.1000 |  1   |   0.536194   |   0.619256   |  -4.972596   |-9.859369e+00 |-7.606842e-01 |\\u001b[0m\\n\",\n      \"|  725  |18.1250 |  1   |   0.547934   |   0.614264   |  -4.974514   |-9.857890e+00 |-7.608244e-01 |\\u001b[0m\\n\",\n      \"|  726  |18.1500 |  1   |   0.546250   |   0.609647   |  -4.976536   |-9.856423e+00 |-7.609636e-01 |\\u001b[0m\\n\",\n      \"|  727  |18.1750 |  1   |   0.543682   |   0.612869   |  -4.979007   |-9.854968e+00 |-7.611018e-01 |\\u001b[0m\\n\",\n      \"|  728  |18.2000 |  1   |   0.540415   |   0.613370   |  -4.980559   |-9.853525e+00 |-7.612392e-01 |\\u001b[0m\\n\",\n      \"|  729  |18.2250 |  1   |   0.545937   |   0.614889   |  -4.984680   |-9.852095e+00 |-7.613755e-01 |\\u001b[0m\\n\",\n      \"|  730  |18.2500 |  1   |   0.545980   |   0.617822   |  -4.988031   |-9.850676e+00 |-7.615109e-01 |\\u001b[0m\\n\",\n      \"|  731  |18.2750 |  1   |   0.542477   |   0.615399   |  -4.989711   |-9.849269e+00 |-7.616453e-01 |\\u001b[0m\\n\",\n      \"|  732  |18.3000 |  1   |   0.547334   |   0.637717   |  -4.993188   |-9.847874e+00 |-7.617788e-01 |\\u001b[0m\\n\",\n      \"|  733  |18.3250 |  1   |   0.553981   |   0.623099   |  -4.994720   |-9.846492e+00 |-7.619113e-01 |\\u001b[0m\\n\",\n      \"|  734  |18.3500 |  1   |   0.548177   |   0.615461   |  -4.996885   |-9.845122e+00 |-7.620428e-01 |\\u001b[0m\\n\",\n      \"|  735  |18.3750 |  1   |   0.541814   |   0.619284   |  -5.001297   |-9.843764e+00 |-7.621732e-01 |\\u001b[0m\\n\",\n      \"|  736  |18.4000 |  1   |   0.545819   |   0.612507   |  -5.004011   |-9.842419e+00 |-7.623028e-01 |\\u001b[0m\\n\",\n      \"|  737  |18.4250 |  1   |   0.544200   |   0.612841   |  -5.007008   |-9.841085e+00 |-7.624312e-01 |\\u001b[0m\\n\",\n      \"|  738  |18.4500 |  1   |   0.542160   |   0.613612   |  -5.009954   |-9.839765e+00 |-7.625587e-01 |\\u001b[0m\\n\",\n      \"|  739  |18.4750 |  1   |   0.579838   |   0.652729   |  -5.011577   |-9.838457e+00 |-7.626852e-01 |\\u001b[0m\\n\",\n      \"|  740  |18.5000 |  1   |   0.502843   |   0.647341   |  -5.014921   |-9.837161e+00 |-7.628107e-01 |\\u001b[0m\\n\",\n      \"|  741  |18.5250 |  1   |   0.551553   |   0.615329   |  -5.018108   |-9.835878e+00 |-7.629351e-01 |\\u001b[0m\\n\",\n      \"|  742  |18.5500 |  1   |   0.527083   |   0.626063   |  -5.021511   |-9.834607e+00 |-7.630585e-01 |\\u001b[0m\\n\",\n      \"|  743  |18.5750 |  1   |   0.539414   |   0.623069   |  -5.025618   |-9.833349e+00 |-7.631809e-01 |\\u001b[0m\\n\",\n      \"|  744  |18.6000 |  1   |   0.525490   |   0.626166   |  -5.027066   |-9.832104e+00 |-7.633022e-01 |\\u001b[0m\\n\",\n      \"|  745  |18.6250 |  1   |   0.517001   |   0.654233   |  -5.030386   |-9.830872e+00 |-7.634225e-01 |\\u001b[0m\\n\",\n      \"|  746  |18.6500 |  1   |   0.534137   |   0.626574   |  -5.033620   |-9.829652e+00 |-7.635418e-01 |\\u001b[0m\\n\",\n      \"|  747  |18.6750 |  1   |   0.542476   |   0.619676   |  -5.035894   |-9.828445e+00 |-7.636599e-01 |\\u001b[0m\\n\",\n      \"|  748  |18.7000 |  1   |   0.553023   |   0.625866   |  -5.041104   |-9.827250e+00 |-7.637771e-01 |\\u001b[0m\\n\",\n      \"|  749  |18.7250 |  1   |   0.540949   |   0.619120   |  -5.044064   |-9.826069e+00 |-7.638931e-01 |\\u001b[0m\\n\",\n      \"|  750  |18.7500 |  1   |   0.537734   |   0.621421   |  -5.046464   |-9.824900e+00 |-7.640081e-01 |\\u001b[0m\\n\",\n      \"|  751  |18.7750 |  1   |   0.538831   |   0.623689   |  -5.050195   |-9.823745e+00 |-7.641221e-01 |\\u001b[0m\\n\",\n      \"|  752  |18.8000 |  1   |   0.541038   |   0.621485   |  -5.052620   |-9.822602e+00 |-7.642350e-01 |\\u001b[0m\\n\",\n      \"|  753  |18.8250 |  1   |   0.535511   |   0.620073   |  -5.056418   |-9.821472e+00 |-7.643467e-01 |\\u001b[0m\\n\",\n      \"|  754  |18.8500 |  1   |   0.530924   |   0.626769   |  -5.060668   |-9.820355e+00 |-7.644574e-01 |\\u001b[0m\\n\",\n      \"|  755  |18.8750 |  1   |   0.537222   |   0.615511   |  -5.064038   |-9.819251e+00 |-7.645670e-01 |\\u001b[0m\\n\",\n      \"|  756  |18.9000 |  1   |   0.534256   |   0.619716   |  -5.067645   |-9.818160e+00 |-7.646756e-01 |\\u001b[0m\\n\",\n      \"|  757  |18.9250 |  1   |   0.535977   |   0.618753   |  -5.070290   |-9.817082e+00 |-7.647830e-01 |\\u001b[0m\\n\",\n      \"|  758  |18.9500 |  1   |   0.540988   |   0.623975   |  -5.073509   |-9.816018e+00 |-7.648893e-01 |\\u001b[0m\\n\",\n      \"|  759  |18.9750 |  1   |   0.549132   |   0.621750   |  -5.078004   |-9.814966e+00 |-7.649945e-01 |\\u001b[0m\\n\",\n      \"|  760  |19.0000 |  1   |   0.539145   |   0.617640   |  -5.081158   |-9.813927e+00 |-7.650987e-01 |\\u001b[0m\\n\",\n      \"|  761  |19.0250 |  1   |   0.540759   |   0.626675   |  -5.085734   |-9.812902e+00 |-7.652017e-01 |\\u001b[0m\\n\",\n      \"|  762  |19.0500 |  1   |   0.538078   |   0.622588   |  -5.089589   |-9.811890e+00 |-7.653036e-01 |\\u001b[0m\\n\",\n      \"|  763  |19.0750 |  1   |   0.522208   |   0.636657   |  -5.091690   |-9.810890e+00 |-7.654044e-01 |\\u001b[0m\\n\",\n      \"|  764  |19.1000 |  1   |   0.533418   |   0.625254   |  -5.096080   |-9.809904e+00 |-7.655040e-01 |\\u001b[0m\\n\",\n      \"|  765  |19.1250 |  1   |   0.539772   |   0.619554   |  -5.100005   |-9.808932e+00 |-7.656026e-01 |\\u001b[0m\\n\",\n      \"|  766  |19.1500 |  1   |   0.539060   |   0.621184   |  -5.103610   |-9.807972e+00 |-7.657000e-01 |\\u001b[0m\\n\",\n      \"|  767  |19.1750 |  1   |   0.535861   |   0.620145   |  -5.108621   |-9.807026e+00 |-7.657963e-01 |\\u001b[0m\\n\",\n      \"|  768  |19.2000 |  1   |   0.536273   |   0.636314   |  -5.112126   |-9.806093e+00 |-7.658914e-01 |\\u001b[0m\\n\",\n      \"|  769  |19.2250 |  1   |   0.527759   |   0.633821   |  -5.115285   |-9.805173e+00 |-7.659854e-01 |\\u001b[0m\\n\",\n      \"|  770  |19.2500 |  1   |   0.544239   |   0.628317   |  -5.119466   |-9.804266e+00 |-7.660783e-01 |\\u001b[0m\\n\",\n      \"|  771  |19.2750 |  1   |   0.537259   |   0.622405   |  -5.123024   |-9.803373e+00 |-7.661701e-01 |\\u001b[0m\\n\",\n      \"|  772  |19.3000 |  1   |   0.534405   |   0.621513   |  -5.128168   |-9.802493e+00 |-7.662607e-01 |\\u001b[0m\\n\",\n      \"|  773  |19.3250 |  1   |   0.536213   |   0.619574   |  -5.132116   |-9.801626e+00 |-7.663501e-01 |\\u001b[0m\\n\",\n      \"|  774  |19.3500 |  1   |   0.547262   |   0.633010   |  -5.136146   |-9.800773e+00 |-7.664384e-01 |\\u001b[0m\\n\",\n      \"|  775  |19.3750 |  1   |   0.532413   |   0.624157   |  -5.140640   |-9.799933e+00 |-7.665256e-01 |\\u001b[0m\\n\",\n      \"|  776  |19.4000 |  1   |   0.528069   |   0.631161   |  -5.143361   |-9.799106e+00 |-7.666116e-01 |\\u001b[0m\\n\",\n      \"|  777  |19.4250 |  1   |   0.508258   |   0.655418   |  -5.148293   |-9.798293e+00 |-7.666965e-01 |\\u001b[0m\\n\",\n      \"|  778  |19.4500 |  1   |   0.531947   |   0.619965   |  -5.153388   |-9.797493e+00 |-7.667802e-01 |\\u001b[0m\\n\",\n      \"|  779  |19.4750 |  1   |   0.538257   |   0.624263   |  -5.157054   |-9.796706e+00 |-7.668627e-01 |\\u001b[0m\\n\",\n      \"|  780  |19.5000 |  1   |   0.513675   |   0.639047   |  -5.162093   |-9.795933e+00 |-7.669441e-01 |\\u001b[0m\\n\",\n      \"|  781  |19.5250 |  1   |   0.524592   |   0.629631   |  -5.166237   |-9.795173e+00 |-7.670243e-01 |\\u001b[0m\\n\",\n      \"|  782  |19.5500 |  1   |   0.501278   |   0.646392   |  -5.169515   |-9.794426e+00 |-7.671034e-01 |\\u001b[0m\\n\",\n      \"|  783  |19.5750 |  1   |   0.508310   |   0.653496   |  -5.174678   |-9.793693e+00 |-7.671812e-01 |\\u001b[0m\\n\",\n      \"|  784  |19.6000 |  1   |   0.501368   |   0.644803   |  -5.179349   |-9.792973e+00 |-7.672580e-01 |\\u001b[0m\\n\",\n      \"|  785  |19.6250 |  1   |   0.505631   |   0.653741   |  -5.184141   |-9.792267e+00 |-7.673335e-01 |\\u001b[0m\\n\",\n      \"|  786  |19.6500 |  1   |   0.501214   |   0.647573   |  -5.188924   |-9.791574e+00 |-7.674079e-01 |\\u001b[0m\\n\",\n      \"|  787  |19.6750 |  1   |   0.495648   |   0.655176   |  -5.192845   |-9.790894e+00 |-7.674811e-01 |\\u001b[0m\\n\",\n      \"|  788  |19.7000 |  1   |   0.499932   |   0.647758   |  -5.197708   |-9.790228e+00 |-7.675532e-01 |\\u001b[0m\\n\",\n      \"|  789  |19.7250 |  1   |   0.518200   |   0.630863   |  -5.201669   |-9.789575e+00 |-7.676241e-01 |\\u001b[0m\\n\",\n      \"|  790  |19.7500 |  1   |   0.536332   |   0.619421   |  -5.206930   |-9.788935e+00 |-7.676937e-01 |\\u001b[0m\\n\",\n      \"|  791  |19.7750 |  1   |   0.531387   |   0.621932   |  -5.212611   |-9.788309e+00 |-7.677623e-01 |\\u001b[0m\\n\",\n      \"|  792  |19.8000 |  1   |   0.527384   |   0.622412   |  -5.216559   |-9.787696e+00 |-7.678296e-01 |\\u001b[0m\\n\",\n      \"|  793  |19.8250 |  1   |   0.529678   |   0.620205   |  -5.221430   |-9.787096e+00 |-7.678958e-01 |\\u001b[0m\\n\",\n      \"|  794  |19.8500 |  1   |   0.508913   |   0.648031   |  -5.226400   |-9.786510e+00 |-7.679608e-01 |\\u001b[0m\\n\",\n      \"|  795  |19.8750 |  1   |   0.504351   |   0.648719   |  -5.230347   |-9.785937e+00 |-7.680246e-01 |\\u001b[0m\\n\",\n      \"|  796  |19.9000 |  1   |   0.500118   |   0.648664   |  -5.235880   |-9.785377e+00 |-7.680872e-01 |\\u001b[0m\\n\",\n      \"|  797  |19.9250 |  1   |   0.528246   |   0.630585   |  -5.241694   |-9.784831e+00 |-7.681487e-01 |\\u001b[0m\\n\",\n      \"|  798  |19.9500 |  1   |   0.542162   |   0.629759   |  -5.245912   |-9.784298e+00 |-7.682090e-01 |\\u001b[0m\\n\",\n      \"|  799  |19.9750 |  1   |   0.529981   |   0.619840   |  -5.251163   |-9.783778e+00 |-7.682681e-01 |\\u001b[0m\\n\",\n      \"|  800  |20.0000 |  1   |   0.529003   |   0.618461   |  -5.255740   |-9.783271e+00 |-7.683260e-01 |\\u001b[0m\\n\",\n      \"|  801  |20.0250 |  1   |   0.531965   |   0.615729   |  -5.260634   |-9.782778e+00 |-7.683827e-01 |\\u001b[0m\\n\",\n      \"|  802  |20.0500 |  1   |   0.535846   |   0.625167   |  -5.265935   |-9.782298e+00 |-7.684383e-01 |\\u001b[0m\\n\",\n      \"|  803  |20.0750 |  1   |   0.530973   |   0.621185   |  -5.271230   |-9.781831e+00 |-7.684927e-01 |\\u001b[0m\\n\",\n      \"|  804  |20.1000 |  1   |   0.534419   |   0.622091   |  -5.277057   |-9.781378e+00 |-7.685459e-01 |\\u001b[0m\\n\",\n      \"|  805  |20.1250 |  1   |   0.534982   |   0.622699   |  -5.281286   |-9.780938e+00 |-7.685979e-01 |\\u001b[0m\\n\",\n      \"|  806  |20.1500 |  1   |   0.530764   |   0.620805   |  -5.286196   |-9.780510e+00 |-7.686487e-01 |\\u001b[0m\\n\",\n      \"|  807  |20.1750 |  1   |   0.511985   |   0.636388   |  -5.291943   |-9.780096e+00 |-7.686984e-01 |\\u001b[0m\\n\",\n      \"|  808  |20.2000 |  1   |   0.496395   |   0.650078   |  -5.296389   |-9.779696e+00 |-7.687469e-01 |\\u001b[0m\\n\",\n      \"|  809  |20.2250 |  1   |   0.500372   |   0.658939   |  -5.302208   |-9.779308e+00 |-7.687942e-01 |\\u001b[0m\\n\",\n      \"|  810  |20.2500 |  1   |   0.499443   |   0.650036   |  -5.308191   |-9.778933e+00 |-7.688403e-01 |\\u001b[0m\\n\",\n      \"|  811  |20.2750 |  1   |   0.507094   |   0.660675   |  -5.312377   |-9.778572e+00 |-7.688852e-01 |\\u001b[0m\\n\",\n      \"|  812  |20.3000 |  1   |   0.501244   |   0.655777   |  -5.317533   |-9.778224e+00 |-7.689290e-01 |\\u001b[0m\\n\",\n      \"|  813  |20.3250 |  1   |   0.497886   |   0.659485   |  -5.322998   |-9.777888e+00 |-7.689716e-01 |\\u001b[0m\\n\",\n      \"|  814  |20.3500 |  1   |   0.531331   |   0.625960   |  -5.327874   |-9.777566e+00 |-7.690130e-01 |\\u001b[0m\\n\",\n      \"|  815  |20.3750 |  1   |   0.520818   |   0.633773   |  -5.333552   |-9.777257e+00 |-7.690533e-01 |\\u001b[0m\\n\",\n      \"|  816  |20.4000 |  1   |   0.528115   |   0.629487   |  -5.338954   |-9.776961e+00 |-7.690924e-01 |\\u001b[0m\\n\",\n      \"|  817  |20.4250 |  1   |   0.533945   |   0.639602   |  -5.344271   |-9.776677e+00 |-7.691303e-01 |\\u001b[0m\\n\",\n      \"|  818  |20.4500 |  1   |   0.518692   |   0.616616   |  -5.348659   |-9.776407e+00 |-7.691670e-01 |\\u001b[0m\\n\",\n      \"|  819  |20.4750 |  1   |   0.522226   |   0.616927   |  -5.353802   |-9.776149e+00 |-7.692026e-01 |\\u001b[0m\\n\",\n      \"|  820  |20.5000 |  1   |   0.488609   |   0.653811   |  -5.359571   |-9.775905e+00 |-7.692370e-01 |\\u001b[0m\\n\",\n      \"|  821  |20.5250 |  1   |   0.484709   |   0.644598   |  -5.364204   |-9.775673e+00 |-7.692702e-01 |\\u001b[0m\\n\",\n      \"|  822  |20.5500 |  1   |   0.486915   |   0.644077   |  -5.369689   |-9.775454e+00 |-7.693023e-01 |\\u001b[0m\\n\",\n      \"|  823  |20.5750 |  1   |   0.486652   |   0.644571   |  -5.375147   |-9.775248e+00 |-7.693332e-01 |\\u001b[0m\\n\",\n      \"|  824  |20.6000 |  1   |   0.504305   |   0.636577   |  -5.379300   |-9.775055e+00 |-7.693629e-01 |\\u001b[0m\\n\",\n      \"|  825  |20.6250 |  1   |   0.498041   |   0.634625   |  -5.383927   |-9.774875e+00 |-7.693915e-01 |\\u001b[0m\\n\",\n      \"|  826  |20.6500 |  1   |   0.491458   |   0.658197   |  -5.389699   |-9.774707e+00 |-7.694190e-01 |\\u001b[0m\\n\",\n      \"|  827  |20.6750 |  1   |   0.496825   |   0.658731   |  -5.394111   |-9.774552e+00 |-7.694452e-01 |\\u001b[0m\\n\",\n      \"|  828  |20.7000 |  1   |   0.502448   |   0.654295   |  -5.398969   |-9.774409e+00 |-7.694703e-01 |\\u001b[0m\\n\",\n      \"|  829  |20.7250 |  1   |   0.526343   |   0.629665   |  -5.404191   |-9.774279e+00 |-7.694943e-01 |\\u001b[0m\\n\",\n      \"|  830  |20.7500 |  1   |   0.527985   |   0.637049   |  -5.408232   |-9.774162e+00 |-7.695171e-01 |\\u001b[0m\\n\",\n      \"|  831  |20.7750 |  1   |   0.526428   |   0.631766   |  -5.412435   |-9.774057e+00 |-7.695388e-01 |\\u001b[0m\\n\",\n      \"|  832  |20.8000 |  1   |   0.549858   |   0.656701   |  -5.417086   |-9.773965e+00 |-7.695593e-01 |\\u001b[0m\\n\",\n      \"|  833  |20.8250 |  1   |   0.525367   |   0.640356   |  -5.421889   |-9.773886e+00 |-7.695787e-01 |\\u001b[0m\\n\",\n      \"|  834  |20.8500 |  1   |   0.526791   |   0.632546   |  -5.425807   |-9.773818e+00 |-7.695970e-01 |\\u001b[0m\\n\",\n      \"|  835  |20.8750 |  1   |   0.527689   |   0.634832   |  -5.429904   |-9.773763e+00 |-7.696141e-01 |\\u001b[0m\\n\",\n      \"|  836  |20.9000 |  1   |   0.527279   |   0.632626   |  -5.434402   |-9.773721e+00 |-7.696301e-01 |\\u001b[0m\\n\",\n      \"|  837  |20.9250 |  1   |   0.522657   |   0.645628   |  -5.437396   |-9.773691e+00 |-7.696449e-01 |\\u001b[0m\\n\",\n      \"|  838  |20.9500 |  1   |   0.525489   |   0.635935   |  -5.441073   |-9.773673e+00 |-7.696586e-01 |\\u001b[0m\\n\",\n      \"|  839  |20.9750 |  1   |   0.532311   |   0.650099   |  -5.445642   |-9.773668e+00 |-7.696712e-01 |\\u001b[0m\\n\",\n      \"|  840  |21.0000 |  1   |   0.529552   |   0.651858   |  -5.448456   |-9.773674e+00 |-7.696827e-01 |\\u001b[0m\\n\",\n      \"|  841  |21.0250 |  1   |   0.503458   |   0.671841   |  -5.451750   |-9.773693e+00 |-7.696930e-01 |\\u001b[0m\\n\",\n      \"|  842  |21.0500 |  1   |   0.501758   |   0.675092   |  -5.455281   |-9.773724e+00 |-7.697022e-01 |\\u001b[0m\\n\",\n      \"|  843  |21.0750 |  1   |   0.514197   |   0.677148   |  -5.457769   |-9.773768e+00 |-7.697103e-01 |\\u001b[0m\\n\",\n      \"|  844  |21.1000 |  1   |   0.501449   |   0.669868   |  -5.460336   |-9.773823e+00 |-7.697173e-01 |\\u001b[0m\\n\",\n      \"|  845  |21.1250 |  1   |   0.497707   |   0.677975   |  -5.463272   |-9.773890e+00 |-7.697232e-01 |\\u001b[0m\\n\",\n      \"|  846  |21.1500 |  1   |   0.500228   |   0.670709   |  -5.466064   |-9.773969e+00 |-7.697280e-01 |\\u001b[0m\\n\",\n      \"|  847  |21.1750 |  1   |   0.504896   |   0.676630   |  -5.467633   |-9.774060e+00 |-7.697316e-01 |\\u001b[0m\\n\",\n      \"|  848  |21.2000 |  1   |   0.500956   |   0.671256   |  -5.469894   |-9.774164e+00 |-7.697342e-01 |\\u001b[0m\\n\",\n      \"|  849  |21.2250 |  1   |   0.496505   |   0.674550   |  -5.472033   |-9.774278e+00 |-7.697357e-01 |\\u001b[0m\\n\",\n      \"|  850  |21.2500 |  1   |   0.529665   |   0.644782   |  -5.472924   |-9.774405e+00 |-7.697361e-01 |\\u001b[0m\\n\",\n      \"|  851  |21.2750 |  1   |   0.528408   |   0.645465   |  -5.474619   |-9.774544e+00 |-7.697354e-01 |\\u001b[0m\\n\",\n      \"|  852  |21.3000 |  1   |   0.519741   |   0.635947   |  -5.476252   |-9.774694e+00 |-7.697336e-01 |\\u001b[0m\\n\",\n      \"|  853  |21.3250 |  1   |   0.504346   |   0.651090   |  -5.476890   |-9.774856e+00 |-7.697307e-01 |\\u001b[0m\\n\",\n      \"|  854  |21.3500 |  1   |   0.532271   |   0.638573   |  -5.477458   |-9.775029e+00 |-7.697268e-01 |\\u001b[0m\\n\",\n      \"|  855  |21.3750 |  1   |   0.523634   |   0.638200   |  -5.478494   |-9.775214e+00 |-7.697218e-01 |\\u001b[0m\\n\",\n      \"|  856  |21.4000 |  1   |   0.519422   |   0.638265   |  -5.478639   |-9.775411e+00 |-7.697157e-01 |\\u001b[0m\\n\",\n      \"|  857  |21.4250 |  1   |   0.518510   |   0.639035   |  -5.478368   |-9.775619e+00 |-7.697085e-01 |\\u001b[0m\\n\",\n      \"|  858  |21.4500 |  1   |   0.510864   |   0.672835   |  -5.478909   |-9.775839e+00 |-7.697003e-01 |\\u001b[0m\\n\",\n      \"|  859  |21.4750 |  1   |   0.524935   |   0.637128   |  -5.478554   |-9.776069e+00 |-7.696910e-01 |\\u001b[0m\\n\",\n      \"|  860  |21.5000 |  1   |   0.507660   |   0.648373   |  -5.477690   |-9.776312e+00 |-7.696807e-01 |\\u001b[0m\\n\",\n      \"|  861  |21.5250 |  1   |   0.499457   |   0.665963   |  -5.477335   |-9.776565e+00 |-7.696693e-01 |\\u001b[0m\\n\",\n      \"|  862  |21.5500 |  1   |   0.499270   |   0.658582   |  -5.476603   |-9.776830e+00 |-7.696569e-01 |\\u001b[0m\\n\",\n      \"|  863  |21.5750 |  1   |   0.519785   |   0.638694   |  -5.475176   |-9.777106e+00 |-7.696434e-01 |\\u001b[0m\\n\",\n      \"|  864  |21.6000 |  1   |   0.534959   |   0.658340   |  -5.473925   |-9.777393e+00 |-7.696289e-01 |\\u001b[0m\\n\",\n      \"|  865  |21.6250 |  1   |   0.516683   |   0.652932   |  -5.472998   |-9.777691e+00 |-7.696133e-01 |\\u001b[0m\\n\",\n      \"|  866  |21.6500 |  1   |   0.524993   |   0.643355   |  -5.470927   |-9.778000e+00 |-7.695968e-01 |\\u001b[0m\\n\",\n      \"|  867  |21.6750 |  1   |   0.521338   |   0.641387   |  -5.469193   |-9.778320e+00 |-7.695792e-01 |\\u001b[0m\\n\",\n      \"|  868  |21.7000 |  1   |   0.511949   |   0.650276   |  -5.467707   |-9.778651e+00 |-7.695606e-01 |\\u001b[0m\\n\",\n      \"|  869  |21.7250 |  1   |   0.516787   |   0.641368   |  -5.465221   |-9.778993e+00 |-7.695409e-01 |\\u001b[0m\\n\",\n      \"|  870  |21.7500 |  1   |   0.526370   |   0.644767   |  -5.462966   |-9.779345e+00 |-7.695203e-01 |\\u001b[0m\\n\",\n      \"|  871  |21.7750 |  1   |   0.527064   |   0.650980   |  -5.460746   |-9.779709e+00 |-7.694986e-01 |\\u001b[0m\\n\",\n      \"|  872  |21.8000 |  1   |   0.516300   |   0.660074   |  -5.458348   |-9.780083e+00 |-7.694760e-01 |\\u001b[0m\\n\",\n      \"|  873  |21.8250 |  1   |   0.516653   |   0.640115   |  -5.455473   |-9.780468e+00 |-7.694523e-01 |\\u001b[0m\\n\",\n      \"|  874  |21.8500 |  1   |   0.519911   |   0.637954   |  -5.452906   |-9.780863e+00 |-7.694277e-01 |\\u001b[0m\\n\",\n      \"|  875  |21.8750 |  1   |   0.515326   |   0.653226   |  -5.450254   |-9.781269e+00 |-7.694021e-01 |\\u001b[0m\\n\",\n      \"|  876  |21.9000 |  1   |   0.519997   |   0.639056   |  -5.446816   |-9.781685e+00 |-7.693755e-01 |\\u001b[0m\\n\",\n      \"|  877  |21.9250 |  1   |   0.520825   |   0.640152   |  -5.443891   |-9.782112e+00 |-7.693479e-01 |\\u001b[0m\\n\",\n      \"|  878  |21.9500 |  1   |   0.517811   |   0.643432   |  -5.441052   |-9.782549e+00 |-7.693193e-01 |\\u001b[0m\\n\",\n      \"|  879  |21.9750 |  1   |   0.514777   |   0.645231   |  -5.437508   |-9.782996e+00 |-7.692898e-01 |\\u001b[0m\\n\",\n      \"|  880  |22.0000 |  1   |   0.509819   |   0.664910   |  -5.434299   |-9.783453e+00 |-7.692593e-01 |\\u001b[0m\\n\",\n      \"|  881  |22.0250 |  1   |   0.533964   |   0.644499   |  -5.431166   |-9.783921e+00 |-7.692279e-01 |\\u001b[0m\\n\",\n      \"|  882  |22.0500 |  1   |   0.515048   |   0.643263   |  -5.427340   |-9.784399e+00 |-7.691955e-01 |\\u001b[0m\\n\",\n      \"|  883  |22.0750 |  1   |   0.528883   |   0.638636   |  -5.423886   |-9.784887e+00 |-7.691622e-01 |\\u001b[0m\\n\",\n      \"|  884  |22.1000 |  1   |   0.520719   |   0.634711   |  -5.420468   |-9.785385e+00 |-7.691279e-01 |\\u001b[0m\\n\",\n      \"|  885  |22.1250 |  1   |   0.520284   |   0.649912   |  -5.416873   |-9.785892e+00 |-7.690927e-01 |\\u001b[0m\\n\",\n      \"|  886  |22.1500 |  1   |   0.528762   |   0.647822   |  -5.413226   |-9.786410e+00 |-7.690565e-01 |\\u001b[0m\\n\",\n      \"|  887  |22.1750 |  1   |   0.509786   |   0.659574   |  -5.409500   |-9.786937e+00 |-7.690194e-01 |\\u001b[0m\\n\",\n      \"|  888  |22.2000 |  1   |   0.520104   |   0.640645   |  -5.405926   |-9.787475e+00 |-7.689815e-01 |\\u001b[0m\\n\",\n      \"|  889  |22.2250 |  1   |   0.528201   |   0.646174   |  -5.401876   |-9.788022e+00 |-7.689426e-01 |\\u001b[0m\\n\",\n      \"|  890  |22.2500 |  1   |   0.517401   |   0.639639   |  -5.398218   |-9.788578e+00 |-7.689027e-01 |\\u001b[0m\\n\",\n      \"|  891  |22.2750 |  1   |   0.520639   |   0.632424   |  -5.394694   |-9.789144e+00 |-7.688620e-01 |\\u001b[0m\\n\",\n      \"|  892  |22.3000 |  1   |   0.522067   |   0.636225   |  -5.390716   |-9.789720e+00 |-7.688204e-01 |\\u001b[0m\\n\",\n      \"|  893  |22.3250 |  1   |   0.517790   |   0.632747   |  -5.386888   |-9.790305e+00 |-7.687779e-01 |\\u001b[0m\\n\",\n      \"|  894  |22.3500 |  1   |   0.507874   |   0.644954   |  -5.383266   |-9.790899e+00 |-7.687345e-01 |\\u001b[0m\\n\",\n      \"|  895  |22.3750 |  1   |   0.464989   |   0.691658   |  -5.379134   |-9.791502e+00 |-7.686902e-01 |\\u001b[0m\\n\",\n      \"|  896  |22.4000 |  1   |   0.480783   |   0.677711   |  -5.375381   |-9.792115e+00 |-7.686451e-01 |\\u001b[0m\\n\",\n      \"|  897  |22.4250 |  1   |   0.490632   |   0.674024   |  -5.371811   |-9.792737e+00 |-7.685991e-01 |\\u001b[0m\\n\",\n      \"|  898  |22.4500 |  1   |   0.481621   |   0.671897   |  -5.367827   |-9.793368e+00 |-7.685522e-01 |\\u001b[0m\\n\",\n      \"|  899  |22.4750 |  1   |   0.474796   |   0.677255   |  -5.364149   |-9.794009e+00 |-7.685045e-01 |\\u001b[0m\\n\",\n      \"|  900  |22.5000 |  1   |   0.491788   |   0.670256   |  -5.360229   |-9.794658e+00 |-7.684559e-01 |\\u001b[0m\\n\",\n      \"|  901  |22.5250 |  1   |   0.484136   |   0.663273   |  -5.356469   |-9.795316e+00 |-7.684065e-01 |\\u001b[0m\\n\",\n      \"|  902  |22.5500 |  1   |   0.494571   |   0.674221   |  -5.352664   |-9.795983e+00 |-7.683562e-01 |\\u001b[0m\\n\",\n      \"|  903  |22.5750 |  1   |   0.484502   |   0.666114   |  -5.348923   |-9.796658e+00 |-7.683051e-01 |\\u001b[0m\\n\",\n      \"|  904  |22.6000 |  1   |   0.500552   |   0.659357   |  -5.345406   |-9.797343e+00 |-7.682532e-01 |\\u001b[0m\\n\",\n      \"|  905  |22.6250 |  1   |   0.474210   |   0.675963   |  -5.341552   |-9.798036e+00 |-7.682004e-01 |\\u001b[0m\\n\",\n      \"|  906  |22.6500 |  1   |   0.512181   |   0.642814   |  -5.337793   |-9.798737e+00 |-7.681468e-01 |\\u001b[0m\\n\",\n      \"|  907  |22.6750 |  1   |   0.530902   |   0.671671   |  -5.334230   |-9.799447e+00 |-7.680925e-01 |\\u001b[0m\\n\",\n      \"|  908  |22.7000 |  1   |   0.514472   |   0.642086   |  -5.330476   |-9.800166e+00 |-7.680373e-01 |\\u001b[0m\\n\",\n      \"|  909  |22.7250 |  1   |   0.511914   |   0.644290   |  -5.326850   |-9.800893e+00 |-7.679813e-01 |\\u001b[0m\\n\",\n      \"|  910  |22.7500 |  1   |   0.510064   |   0.648282   |  -5.323523   |-9.801628e+00 |-7.679245e-01 |\\u001b[0m\\n\",\n      \"|  911  |22.7750 |  1   |   0.513836   |   0.638366   |  -5.319777   |-9.802371e+00 |-7.678670e-01 |\\u001b[0m\\n\",\n      \"|  912  |22.8000 |  1   |   0.522687   |   0.642639   |  -5.316235   |-9.803123e+00 |-7.678087e-01 |\\u001b[0m\\n\",\n      \"|  913  |22.8250 |  1   |   0.513428   |   0.637363   |  -5.312791   |-9.803882e+00 |-7.677496e-01 |\\u001b[0m\\n\",\n      \"|  914  |22.8500 |  1   |   0.512795   |   0.639266   |  -5.309169   |-9.804650e+00 |-7.676897e-01 |\\u001b[0m\\n\",\n      \"|  915  |22.8750 |  1   |   0.519954   |   0.638287   |  -5.305885   |-9.805425e+00 |-7.676291e-01 |\\u001b[0m\\n\",\n      \"|  916  |22.9000 |  1   |   0.481317   |   0.673174   |  -5.302459   |-9.806209e+00 |-7.675677e-01 |\\u001b[0m\\n\",\n      \"|  917  |22.9250 |  1   |   0.498218   |   0.656933   |  -5.299122   |-9.807000e+00 |-7.675056e-01 |\\u001b[0m\\n\",\n      \"|  918  |22.9500 |  1   |   0.515562   |   0.638124   |  -5.295768   |-9.807799e+00 |-7.674427e-01 |\\u001b[0m\\n\",\n      \"|  919  |22.9750 |  1   |   0.518832   |   0.657375   |  -5.292315   |-9.808606e+00 |-7.673791e-01 |\\u001b[0m\\n\",\n      \"|  920  |23.0000 |  1   |   0.509751   |   0.646163   |  -5.289145   |-9.809420e+00 |-7.673148e-01 |\\u001b[0m\\n\",\n      \"|  921  |23.0250 |  1   |   0.521466   |   0.646805   |  -5.285912   |-9.810242e+00 |-7.672497e-01 |\\u001b[0m\\n\",\n      \"|  922  |23.0500 |  1   |   0.512008   |   0.637779   |  -5.282643   |-9.811071e+00 |-7.671840e-01 |\\u001b[0m\\n\",\n      \"|  923  |23.0750 |  1   |   0.517762   |   0.647592   |  -5.279669   |-9.811908e+00 |-7.671175e-01 |\\u001b[0m\\n\",\n      \"|  924  |23.1000 |  1   |   0.521314   |   0.644842   |  -5.276377   |-9.812752e+00 |-7.670503e-01 |\\u001b[0m\\n\",\n      \"|  925  |23.1250 |  1   |   0.495290   |   0.652850   |  -5.273205   |-9.813603e+00 |-7.669824e-01 |\\u001b[0m\\n\",\n      \"|  926  |23.1500 |  1   |   0.516843   |   0.640946   |  -5.270279   |-9.814461e+00 |-7.669139e-01 |\\u001b[0m\\n\",\n      \"|  927  |23.1750 |  1   |   0.511137   |   0.637577   |  -5.267108   |-9.815327e+00 |-7.668446e-01 |\\u001b[0m\\n\",\n      \"|  928  |23.2000 |  1   |   0.512721   |   0.636781   |  -5.264265   |-9.816199e+00 |-7.667747e-01 |\\u001b[0m\\n\",\n      \"|  929  |23.2250 |  1   |   0.514486   |   0.641128   |  -5.261287   |-9.817078e+00 |-7.667042e-01 |\\u001b[0m\\n\",\n      \"|  930  |23.2500 |  1   |   0.502929   |   0.654364   |  -5.258338   |-9.817965e+00 |-7.666329e-01 |\\u001b[0m\\n\",\n      \"|  931  |23.2750 |  1   |   0.482228   |   0.677815   |  -5.255424   |-9.818858e+00 |-7.665610e-01 |\\u001b[0m\\n\",\n      \"|  932  |23.3000 |  1   |   0.476847   |   0.674906   |  -5.252544   |-9.819758e+00 |-7.664885e-01 |\\u001b[0m\\n\",\n      \"|  933  |23.3250 |  1   |   0.479599   |   0.666247   |  -5.249762   |-9.820664e+00 |-7.664153e-01 |\\u001b[0m\\n\",\n      \"|  934  |23.3500 |  1   |   0.481180   |   0.669578   |  -5.247035   |-9.821577e+00 |-7.663414e-01 |\\u001b[0m\\n\",\n      \"|  935  |23.3750 |  1   |   0.480612   |   0.667914   |  -5.244279   |-9.822497e+00 |-7.662670e-01 |\\u001b[0m\\n\",\n      \"|  936  |23.4000 |  1   |   0.494679   |   0.679912   |  -5.241565   |-9.823423e+00 |-7.661919e-01 |\\u001b[0m\\n\",\n      \"|  937  |23.4250 |  1   |   0.480638   |   0.670267   |  -5.238915   |-9.824355e+00 |-7.661162e-01 |\\u001b[0m\\n\",\n      \"|  938  |23.4500 |  1   |   0.476561   |   0.677960   |  -5.236134   |-9.825294e+00 |-7.660399e-01 |\\u001b[0m\\n\",\n      \"|  939  |23.4750 |  1   |   0.479632   |   0.672821   |  -5.233690   |-9.826238e+00 |-7.659630e-01 |\\u001b[0m\\n\",\n      \"|  940  |23.5000 |  1   |   0.473291   |   0.676737   |  -5.231094   |-9.827189e+00 |-7.658855e-01 |\\u001b[0m\\n\",\n      \"|  941  |23.5250 |  1   |   0.474442   |   0.677697   |  -5.228548   |-9.828146e+00 |-7.658074e-01 |\\u001b[0m\\n\",\n      \"|  942  |23.5500 |  1   |   0.485998   |   0.658387   |  -5.226139   |-9.829110e+00 |-7.657288e-01 |\\u001b[0m\\n\",\n      \"|  943  |23.5750 |  1   |   0.514283   |   0.634293   |  -5.223562   |-9.830079e+00 |-7.656495e-01 |\\u001b[0m\\n\",\n      \"|  944  |23.6000 |  1   |   0.516713   |   0.646159   |  -5.221143   |-9.831053e+00 |-7.655697e-01 |\\u001b[0m\\n\",\n      \"|  945  |23.6250 |  1   |   0.509222   |   0.641191   |  -5.218806   |-9.832034e+00 |-7.654894e-01 |\\u001b[0m\\n\",\n      \"|  946  |23.6500 |  1   |   0.511243   |   0.639904   |  -5.216415   |-9.833020e+00 |-7.654084e-01 |\\u001b[0m\\n\",\n      \"|  947  |23.6750 |  1   |   0.504852   |   0.645054   |  -5.214173   |-9.834012e+00 |-7.653270e-01 |\\u001b[0m\\n\",\n      \"|  948  |23.7000 |  1   |   0.481507   |   0.668694   |  -5.211857   |-9.835010e+00 |-7.652450e-01 |\\u001b[0m\\n\",\n      \"|  949  |23.7250 |  1   |   0.478430   |   0.667698   |  -5.209544   |-9.836013e+00 |-7.651624e-01 |\\u001b[0m\\n\",\n      \"|  950  |23.7500 |  1   |   0.473767   |   0.672205   |  -5.207393   |-9.837021e+00 |-7.650793e-01 |\\u001b[0m\\n\",\n      \"|  951  |23.7750 |  1   |   0.477168   |   0.673745   |  -5.205109   |-9.838035e+00 |-7.649957e-01 |\\u001b[0m\\n\",\n      \"|  952  |23.8000 |  1   |   0.473230   |   0.681051   |  -5.203066   |-9.839054e+00 |-7.649116e-01 |\\u001b[0m\\n\",\n      \"|  953  |23.8250 |  1   |   0.474712   |   0.669055   |  -5.200959   |-9.840078e+00 |-7.648270e-01 |\\u001b[0m\\n\",\n      \"|  954  |23.8500 |  1   |   0.478994   |   0.672140   |  -5.198806   |-9.841107e+00 |-7.647419e-01 |\\u001b[0m\\n\",\n      \"|  955  |23.8750 |  1   |   0.510193   |   0.643556   |  -5.196823   |-9.842141e+00 |-7.646563e-01 |\\u001b[0m\\n\",\n      \"|  956  |23.9000 |  1   |   0.510342   |   0.649685   |  -5.194717   |-9.843180e+00 |-7.645702e-01 |\\u001b[0m\\n\",\n      \"|  957  |23.9250 |  1   |   0.502699   |   0.645553   |  -5.192758   |-9.844224e+00 |-7.644836e-01 |\\u001b[0m\\n\",\n      \"|  958  |23.9500 |  1   |   0.509565   |   0.643627   |  -5.190837   |-9.845273e+00 |-7.643966e-01 |\\u001b[0m\\n\",\n      \"|  959  |23.9750 |  1   |   0.505842   |   0.650800   |  -5.188929   |-9.846327e+00 |-7.643091e-01 |\\u001b[0m\\n\",\n      \"|  960  |24.0000 |  1   |   0.509080   |   0.639700   |  -5.187018   |-9.847385e+00 |-7.642211e-01 |\\u001b[0m\\n\",\n      \"|  961  |24.0250 |  1   |   0.506969   |   0.643642   |  -5.185180   |-9.848448e+00 |-7.641327e-01 |\\u001b[0m\\n\",\n      \"|  962  |24.0500 |  1   |   0.502202   |   0.644327   |  -5.183292   |-9.849515e+00 |-7.640438e-01 |\\u001b[0m\\n\",\n      \"|  963  |24.0750 |  1   |   0.504608   |   0.646704   |  -5.181523   |-9.850587e+00 |-7.639545e-01 |\\u001b[0m\\n\",\n      \"|  964  |24.1000 |  1   |   0.506113   |   0.640549   |  -5.179790   |-9.851663e+00 |-7.638648e-01 |\\u001b[0m\\n\",\n      \"|  965  |24.1250 |  1   |   0.516273   |   0.650328   |  -5.178029   |-9.852743e+00 |-7.637746e-01 |\\u001b[0m\\n\",\n      \"|  966  |24.1500 |  1   |   0.514624   |   0.656699   |  -5.176397   |-9.853828e+00 |-7.636840e-01 |\\u001b[0m\\n\",\n      \"|  967  |24.1750 |  1   |   0.509777   |   0.652485   |  -5.174642   |-9.854916e+00 |-7.635931e-01 |\\u001b[0m\\n\",\n      \"|  968  |24.2000 |  1   |   0.506223   |   0.644373   |  -5.173014   |-9.856009e+00 |-7.635017e-01 |\\u001b[0m\\n\",\n      \"|  969  |24.2250 |  1   |   0.497977   |   0.651589   |  -5.171420   |-9.857106e+00 |-7.634099e-01 |\\u001b[0m\\n\",\n      \"|  970  |24.2500 |  1   |   0.542505   |   0.823516   |  -5.169807   |-9.858206e+00 |-7.633177e-01 |\\u001b[0m\\n\",\n      \"|  971  |24.2750 |  1   |   0.458664   |   0.726943   |  -5.168319   |-9.859311e+00 |-7.632251e-01 |\\u001b[0m\\n\",\n      \"|  972  |24.3000 |  1   |   0.501798   |   0.644348   |  -5.166790   |-9.860419e+00 |-7.631322e-01 |\\u001b[0m\\n\",\n      \"|  973  |24.3250 |  1   |   0.514156   |   0.663782   |  -5.165249   |-9.861531e+00 |-7.630389e-01 |\\u001b[0m\\n\",\n      \"|  974  |24.3500 |  1   |   0.509705   |   0.649251   |  -5.163825   |-9.862646e+00 |-7.629452e-01 |\\u001b[0m\\n\",\n      \"|  975  |24.3750 |  1   |   0.500570   |   0.646102   |  -5.162345   |-9.863765e+00 |-7.628512e-01 |\\u001b[0m\\n\",\n      \"|  976  |24.4000 |  1   |   0.501039   |   0.644028   |  -5.160961   |-9.864888e+00 |-7.627568e-01 |\\u001b[0m\\n\",\n      \"|  977  |24.4250 |  1   |   0.504128   |   0.646994   |  -5.159634   |-9.866014e+00 |-7.626621e-01 |\\u001b[0m\\n\",\n      \"|  978  |24.4500 |  1   |   0.509705   |   0.643946   |  -5.158234   |-9.867143e+00 |-7.625670e-01 |\\u001b[0m\\n\",\n      \"|  979  |24.4750 |  1   |   0.504889   |   0.642303   |  -5.156955   |-9.868275e+00 |-7.624717e-01 |\\u001b[0m\\n\",\n      \"|  980  |24.5000 |  1   |   0.511998   |   0.654649   |  -5.155620   |-9.869411e+00 |-7.623759e-01 |\\u001b[0m\\n\",\n      \"|  981  |24.5250 |  1   |   0.505531   |   0.643071   |  -5.154346   |-9.870549e+00 |-7.622799e-01 |\\u001b[0m\\n\",\n      \"|  982  |24.5500 |  1   |   0.505855   |   0.644088   |  -5.153156   |-9.871691e+00 |-7.621836e-01 |\\u001b[0m\\n\",\n      \"|  983  |24.5750 |  1   |   0.503710   |   0.643562   |  -5.151921   |-9.872835e+00 |-7.620870e-01 |\\u001b[0m\\n\",\n      \"|  984  |24.6000 |  1   |   0.503625   |   0.652749   |  -5.150775   |-9.873983e+00 |-7.619900e-01 |\\u001b[0m\\n\",\n      \"|  985  |24.6250 |  1   |   0.497902   |   0.668819   |  -5.149604   |-9.875133e+00 |-7.618928e-01 |\\u001b[0m\\n\",\n      \"|  986  |24.6500 |  1   |   0.508365   |   0.655839   |  -5.148454   |-9.876286e+00 |-7.617953e-01 |\\u001b[0m\\n\",\n      \"|  987  |24.6750 |  1   |   0.499875   |   0.649295   |  -5.147360   |-9.877441e+00 |-7.616975e-01 |\\u001b[0m\\n\",\n      \"|  988  |24.7000 |  1   |   0.507928   |   0.651539   |  -5.146301   |-9.878599e+00 |-7.615995e-01 |\\u001b[0m\\n\",\n      \"|  989  |24.7250 |  1   |   0.504901   |   0.643364   |  -5.145247   |-9.879760e+00 |-7.615012e-01 |\\u001b[0m\\n\",\n      \"|  990  |24.7500 |  1   |   0.496468   |   0.650975   |  -5.144263   |-9.880923e+00 |-7.614026e-01 |\\u001b[0m\\n\",\n      \"|  991  |24.7750 |  1   |   0.485625   |   0.660757   |  -5.143244   |-9.882088e+00 |-7.613038e-01 |\\u001b[0m\\n\",\n      \"|  992  |24.8000 |  1   |   0.511090   |   0.655112   |  -5.142258   |-9.883256e+00 |-7.612048e-01 |\\u001b[0m\\n\",\n      \"|  993  |24.8250 |  1   |   0.499859   |   0.652944   |  -5.141341   |-9.884426e+00 |-7.611055e-01 |\\u001b[0m\\n\",\n      \"|  994  |24.8500 |  1   |   0.503584   |   0.657031   |  -5.140395   |-9.885598e+00 |-7.610060e-01 |\\u001b[0m\\n\",\n      \"|  995  |24.8750 |  1   |   0.487252   |   0.669019   |  -5.139545   |-9.886772e+00 |-7.609062e-01 |\\u001b[0m\\n\",\n      \"|  996  |24.9000 |  1   |   0.486750   |   0.677291   |  -5.138686   |-9.887948e+00 |-7.608063e-01 |\\u001b[0m\\n\",\n      \"|  997  |24.9250 |  1   |   0.499252   |   0.655279   |  -5.137821   |-9.889126e+00 |-7.607061e-01 |\\u001b[0m\\n\",\n      \"|  998  |24.9500 |  1   |   0.490417   |   0.702562   |  -5.137027   |-9.890305e+00 |-7.606058e-01 |\\u001b[0m\\n\",\n      \"|  999  |24.9750 |  1   |   0.503546   |   0.651132   |  -5.136210   |-9.891487e+00 |-7.605052e-01 |\\u001b[0m\\n\",\n      \"| 1000  |25.0000 |  1   |   0.483413   |   0.668655   |  -5.135456   |-9.892670e+00 |-7.604045e-01 |\\u001b[0m\\n\",\n      \"| 1001  |25.0250 |  1   |   0.493134   |   0.660787   |  -5.134750   |-9.893855e+00 |-7.603035e-01 |\\u001b[0m\\n\",\n      \"| 1002  |25.0500 |  1   |   0.499426   |   0.657750   |  -5.134009   |-9.895041e+00 |-7.602024e-01 |\\u001b[0m\\n\",\n      \"| 1003  |25.0750 |  1   |   0.494080   |   0.661456   |  -5.133351   |-9.896229e+00 |-7.601011e-01 |\\u001b[0m\\n\",\n      \"| 1004  |25.1000 |  1   |   0.507680   |   0.664709   |  -5.132659   |-9.897418e+00 |-7.599997e-01 |\\u001b[0m\\n\",\n      \"| 1005  |25.1250 |  1   |   0.494671   |   0.669049   |  -5.132007   |-9.898609e+00 |-7.598981e-01 |\\u001b[0m\\n\",\n      \"| 1006  |25.1500 |  1   |   0.509767   |   0.652732   |  -5.131421   |-9.899801e+00 |-7.597964e-01 |\\u001b[0m\\n\",\n      \"| 1007  |25.1750 |  1   |   0.495492   |   0.653077   |  -5.130814   |-9.900994e+00 |-7.596945e-01 |\\u001b[0m\\n\",\n      \"| 1008  |25.2000 |  1   |   0.498837   |   0.670956   |  -5.130269   |-9.902188e+00 |-7.595924e-01 |\\u001b[0m\\n\",\n      \"| 1009  |25.2250 |  1   |   0.500010   |   0.651370   |  -5.129726   |-9.903383e+00 |-7.594903e-01 |\\u001b[0m\\n\",\n      \"| 1010  |25.2500 |  1   |   0.499026   |   0.649779   |  -5.129186   |-9.904579e+00 |-7.593880e-01 |\\u001b[0m\\n\",\n      \"| 1011  |25.2750 |  1   |   0.503929   |   0.657456   |  -5.128693   |-9.905776e+00 |-7.592856e-01 |\\u001b[0m\\n\",\n      \"| 1012  |25.3000 |  1   |   0.502894   |   0.652709   |  -5.128228   |-9.906974e+00 |-7.591831e-01 |\\u001b[0m\\n\",\n      \"| 1013  |25.3250 |  1   |   0.493295   |   0.659944   |  -5.127776   |-9.908173e+00 |-7.590805e-01 |\\u001b[0m\\n\",\n      \"| 1014  |25.3500 |  1   |   0.496672   |   0.655548   |  -5.127374   |-9.909372e+00 |-7.589777e-01 |\\u001b[0m\\n\",\n      \"| 1015  |25.3750 |  1   |   0.496958   |   0.668447   |  -5.126963   |-9.910572e+00 |-7.588749e-01 |\\u001b[0m\\n\",\n      \"| 1016  |25.4000 |  1   |   0.477043   |   0.671800   |  -5.126575   |-9.911773e+00 |-7.587720e-01 |\\u001b[0m\\n\",\n      \"| 1017  |25.4250 |  1   |   0.493859   |   0.660183   |  -5.126228   |-9.912974e+00 |-7.586690e-01 |\\u001b[0m\\n\",\n      \"| 1018  |25.4500 |  1   |   0.497632   |   0.654123   |  -5.125876   |-9.914176e+00 |-7.585660e-01 |\\u001b[0m\\n\",\n      \"| 1019  |25.4750 |  1   |   0.502519   |   0.653777   |  -5.125597   |-9.915378e+00 |-7.584628e-01 |\\u001b[0m\\n\",\n      \"| 1020  |25.5000 |  1   |   0.499899   |   0.652161   |  -5.125308   |-9.916580e+00 |-7.583596e-01 |\\u001b[0m\\n\",\n      \"| 1021  |25.5250 |  1   |   0.505590   |   0.660761   |  -5.125039   |-9.917782e+00 |-7.582564e-01 |\\u001b[0m\\n\",\n      \"| 1022  |25.5500 |  1   |   0.499622   |   0.658219   |  -5.124808   |-9.918985e+00 |-7.581531e-01 |\\u001b[0m\\n\",\n      \"| 1023  |25.5750 |  1   |   0.494296   |   0.658807   |  -5.124571   |-9.920187e+00 |-7.580498e-01 |\\u001b[0m\\n\",\n      \"| 1024  |25.6000 |  1   |   0.499221   |   0.654806   |  -5.124375   |-9.921390e+00 |-7.579464e-01 |\\u001b[0m\\n\",\n      \"| 1025  |25.6250 |  1   |   0.499540   |   0.652259   |  -5.124226   |-9.922592e+00 |-7.578430e-01 |\\u001b[0m\\n\",\n      \"| 1026  |25.6500 |  1   |   0.497204   |   0.653026   |  -5.124062   |-9.923795e+00 |-7.577395e-01 |\\u001b[0m\\n\",\n      \"| 1027  |25.6750 |  1   |   0.498324   |   0.660967   |  -5.123947   |-9.924997e+00 |-7.576361e-01 |\\u001b[0m\\n\",\n      \"| 1028  |25.7000 |  1   |   0.495586   |   0.657316   |  -5.123838   |-9.926199e+00 |-7.575326e-01 |\\u001b[0m\\n\",\n      \"| 1029  |25.7250 |  1   |   0.495336   |   0.659465   |  -5.123735   |-9.927401e+00 |-7.574291e-01 |\\u001b[0m\\n\",\n      \"| 1030  |25.7500 |  1   |   0.498829   |   0.654207   |  -5.123691   |-9.928602e+00 |-7.573256e-01 |\\u001b[0m\\n\",\n      \"| 1031  |25.7750 |  1   |   0.496229   |   0.656042   |  -5.123643   |-9.929803e+00 |-7.572221e-01 |\\u001b[0m\\n\",\n      \"| 1032  |25.8000 |  1   |   0.498100   |   0.658060   |  -5.123639   |-9.931003e+00 |-7.571187e-01 |\\u001b[0m\\n\",\n      \"| 1033  |25.8250 |  1   |   0.493844   |   0.656294   |  -5.123650   |-9.932203e+00 |-7.570152e-01 |\\u001b[0m\\n\",\n      \"| 1034  |25.8500 |  1   |   0.496206   |   0.652885   |  -5.123656   |-9.933402e+00 |-7.569118e-01 |\\u001b[0m\\n\",\n      \"| 1035  |25.8750 |  1   |   0.493092   |   0.655715   |  -5.123718   |-9.934600e+00 |-7.568084e-01 |\\u001b[0m\\n\",\n      \"| 1036  |25.9000 |  1   |   0.499616   |   0.658027   |  -5.123774   |-9.935798e+00 |-7.567050e-01 |\\u001b[0m\\n\",\n      \"| 1037  |25.9250 |  1   |   0.491226   |   0.658937   |  -5.123870   |-9.936995e+00 |-7.566016e-01 |\\u001b[0m\\n\",\n      \"| 1038  |25.9500 |  1   |   0.500340   |   0.653876   |  -5.124001   |-9.938190e+00 |-7.564983e-01 |\\u001b[0m\\n\",\n      \"| 1039  |25.9750 |  1   |   0.495677   |   0.650797   |  -5.124126   |-9.939385e+00 |-7.563951e-01 |\\u001b[0m\\n\",\n      \"| 1040  |26.0000 |  1   |   0.476759   |   0.680443   |  -5.124280   |-9.940579e+00 |-7.562919e-01 |\\u001b[0m\\n\",\n      \"| 1041  |26.0250 |  1   |   0.488234   |   0.659470   |  -5.124460   |-9.941772e+00 |-7.561888e-01 |\\u001b[0m\\n\",\n      \"| 1042  |26.0500 |  1   |   0.504142   |   0.662927   |  -5.124649   |-9.942963e+00 |-7.560857e-01 |\\u001b[0m\\n\",\n      \"| 1043  |26.0750 |  1   |   0.493124   |   0.657806   |  -5.124875   |-9.944154e+00 |-7.559827e-01 |\\u001b[0m\\n\",\n      \"| 1044  |26.1000 |  1   |   0.494713   |   0.663481   |  -5.125130   |-9.945343e+00 |-7.558798e-01 |\\u001b[0m\\n\",\n      \"| 1045  |26.1250 |  1   |   0.490307   |   0.656816   |  -5.125384   |-9.946530e+00 |-7.557770e-01 |\\u001b[0m\\n\",\n      \"| 1046  |26.1500 |  1   |   0.484677   |   0.662911   |  -5.125675   |-9.947717e+00 |-7.556742e-01 |\\u001b[0m\\n\",\n      \"| 1047  |26.1750 |  1   |   0.493045   |   0.654708   |  -5.125970   |-9.948901e+00 |-7.555716e-01 |\\u001b[0m\\n\",\n      \"| 1048  |26.2000 |  1   |   0.538497   |   0.726460   |  -5.126294   |-9.950085e+00 |-7.554690e-01 |\\u001b[0m\\n\",\n      \"| 1049  |26.2250 |  1   |   0.549513   |   0.737299   |  -5.126653   |-9.951266e+00 |-7.553666e-01 |\\u001b[0m\\n\",\n      \"| 1050  |26.2500 |  1   |   0.492540   |   0.664606   |  -5.127014   |-9.952446e+00 |-7.552643e-01 |\\u001b[0m\\n\",\n      \"| 1051  |26.2750 |  1   |   0.493577   |   0.659932   |  -5.127419   |-9.953625e+00 |-7.551620e-01 |\\u001b[0m\\n\",\n      \"| 1052  |26.3000 |  1   |   0.467239   |   0.712753   |  -5.127825   |-9.954801e+00 |-7.550599e-01 |\\u001b[0m\\n\",\n      \"| 1053  |26.3250 |  1   |   0.455075   |   0.725685   |  -5.128240   |-9.955976e+00 |-7.549580e-01 |\\u001b[0m\\n\",\n      \"| 1054  |26.3500 |  1   |   0.475621   |   0.676184   |  -5.128711   |-9.957149e+00 |-7.548561e-01 |\\u001b[0m\\n\",\n      \"| 1055  |26.3750 |  1   |   0.534025   |   0.705199   |  -5.129171   |-9.958320e+00 |-7.547544e-01 |\\u001b[0m\\n\",\n      \"| 1056  |26.4000 |  1   |   0.535417   |   0.733416   |  -5.129674   |-9.959488e+00 |-7.546529e-01 |\\u001b[0m\\n\",\n      \"| 1057  |26.4250 |  1   |   0.490559   |   0.667110   |  -5.130201   |-9.960655e+00 |-7.545515e-01 |\\u001b[0m\\n\",\n      \"| 1058  |26.4500 |  1   |   0.492721   |   0.667776   |  -5.130724   |-9.961820e+00 |-7.544502e-01 |\\u001b[0m\\n\",\n      \"| 1059  |26.4750 |  1   |   0.469686   |   0.716404   |  -5.131284   |-9.962982e+00 |-7.543491e-01 |\\u001b[0m\\n\",\n      \"| 1060  |26.5000 |  1   |   0.461801   |   0.727427   |  -5.131858   |-9.964142e+00 |-7.542482e-01 |\\u001b[0m\\n\",\n      \"| 1061  |26.5250 |  1   |   0.464589   |   0.694128   |  -5.132457   |-9.965300e+00 |-7.541474e-01 |\\u001b[0m\\n\",\n      \"| 1062  |26.5500 |  1   |   0.471781   |   0.706331   |  -5.133085   |-9.966456e+00 |-7.540468e-01 |\\u001b[0m\\n\",\n      \"| 1063  |26.5750 |  1   |   0.459214   |   0.698293   |  -5.133724   |-9.967609e+00 |-7.539464e-01 |\\u001b[0m\\n\",\n      \"| 1064  |26.6000 |  1   |   0.465039   |   0.701240   |  -5.134387   |-9.968759e+00 |-7.538461e-01 |\\u001b[0m\\n\",\n      \"| 1065  |26.6250 |  1   |   0.469236   |   0.698958   |  -5.135067   |-9.969907e+00 |-7.537461e-01 |\\u001b[0m\\n\",\n      \"| 1066  |26.6500 |  1   |   0.464358   |   0.702767   |  -5.135759   |-9.971053e+00 |-7.536462e-01 |\\u001b[0m\\n\",\n      \"| 1067  |26.6750 |  1   |   0.465766   |   0.699608   |  -5.136493   |-9.972195e+00 |-7.535466e-01 |\\u001b[0m\\n\",\n      \"| 1068  |26.7000 |  1   |   0.459619   |   0.698973   |  -5.084913   |-9.973335e+00 |-7.534475e-01 |\\u001b[0m\\n\",\n      \"| 1069  |26.7250 |  1   |   0.476216   |   0.700416   |  -5.145987   |-9.974473e+00 |-7.533490e-01 |\\u001b[0m\\n\",\n      \"| 1070  |26.7500 |  1   |   0.480763   |   0.738047   |  -5.138887   |-9.975607e+00 |-7.532503e-01 |\\u001b[0m\\n\",\n      \"| 1071  |26.7750 |  1   |   0.461171   |   0.701831   |  -5.135784   |-9.976739e+00 |-7.531516e-01 |\\u001b[0m\\n\",\n      \"| 1072  |26.8000 |  1   |   0.447415   |   0.732048   |  -5.142042   |-9.977868e+00 |-7.530534e-01 |\\u001b[0m\\n\",\n      \"| 1073  |26.8250 |  1   |   0.463453   |   0.697525   |  -5.138247   |-9.978994e+00 |-7.529551e-01 |\\u001b[0m\\n\",\n      \"| 1074  |26.8500 |  1   |   0.461543   |   0.697473   |  -5.135863   |-9.980116e+00 |-7.528572e-01 |\\u001b[0m\\n\",\n      \"| 1075  |26.8750 |  1   |   0.457196   |   0.716596   |  -5.141322   |-9.981236e+00 |-7.527593e-01 |\\u001b[0m\\n\",\n      \"| 1076  |26.9000 |  1   |   0.468679   |   0.696296   |  -5.138910   |-9.982352e+00 |-7.526616e-01 |\\u001b[0m\\n\",\n      \"| 1077  |26.9250 |  1   |   0.461713   |   0.706081   |  -5.146215   |-9.983465e+00 |-7.525640e-01 |\\u001b[0m\\n\",\n      \"| 1078  |26.9500 |  1   |   0.466057   |   0.697697   |  -5.150453   |-9.984575e+00 |-7.524668e-01 |\\u001b[0m\\n\",\n      \"| 1079  |26.9750 |  1   |   0.464665   |   0.702892   |  -5.143797   |-9.985682e+00 |-7.523698e-01 |\\u001b[0m\\n\",\n      \"| 1080  |27.0000 |  1   |   0.460304   |   0.700288   |  -5.148337   |-9.986785e+00 |-7.522730e-01 |\\u001b[0m\\n\",\n      \"| 1081  |27.0250 |  1   |   0.487071   |   0.704852   |  -5.146060   |-9.987885e+00 |-7.521765e-01 |\\u001b[0m\\n\",\n      \"| 1082  |27.0500 |  1   |   0.491921   |   0.701263   |  -5.148301   |-9.988981e+00 |-7.520802e-01 |\\u001b[0m\\n\",\n      \"| 1083  |27.0750 |  1   |   0.514891   |   0.691098   |  -5.155984   |-9.990075e+00 |-7.519842e-01 |\\u001b[0m\\n\",\n      \"| 1084  |27.1000 |  1   |   0.511289   |   0.700004   |  -5.152389   |-9.991164e+00 |-7.518885e-01 |\\u001b[0m\\n\",\n      \"| 1085  |27.1250 |  1   |   0.464907   |   0.689621   |  -5.154942   |-9.992250e+00 |-7.517932e-01 |\\u001b[0m\\n\",\n      \"| 1086  |27.1500 |  1   |   0.522192   |   0.703924   |  -5.152321   |-9.993332e+00 |-7.516980e-01 |\\u001b[0m\\n\",\n      \"| 1087  |27.1750 |  1   |   0.482099   |   0.686301   |  -5.150296   |-9.994411e+00 |-7.516032e-01 |\\u001b[0m\\n\",\n      \"| 1088  |27.2000 |  1   |   0.484473   |   0.666338   |  -5.158286   |-9.995485e+00 |-7.515087e-01 |\\u001b[0m\\n\",\n      \"| 1089  |27.2250 |  1   |   0.465606   |   0.714366   |  -5.158936   |-9.996557e+00 |-7.514145e-01 |\\u001b[0m\\n\",\n      \"| 1090  |27.2500 |  1   |   0.455517   |   0.696506   |  -5.159762   |-9.997624e+00 |-7.513207e-01 |\\u001b[0m\\n\",\n      \"| 1091  |27.2750 |  1   |   0.466815   |   0.703345   |  -5.162399   |-9.998687e+00 |-7.512272e-01 |\\u001b[0m\\n\",\n      \"| 1092  |27.3000 |  1   |   0.456211   |   0.701992   |  -5.156860   |-9.999747e+00 |-7.511339e-01 |\\u001b[0m\\n\",\n      \"| 1093  |27.3250 |  1   |   0.465226   |   0.696526   |  -5.159533   |-1.000080e+01 |-7.510410e-01 |\\u001b[0m\\n\",\n      \"| 1094  |27.3500 |  1   |   0.512126   |   0.700777   |  -5.164709   |-1.000185e+01 |-7.509483e-01 |\\u001b[0m\\n\",\n      \"| 1095  |27.3750 |  1   |   0.479834   |   0.671114   |  -5.164529   |-1.000290e+01 |-7.508561e-01 |\\u001b[0m\\n\",\n      \"| 1096  |27.4000 |  1   |   0.492537   |   0.673946   |  -5.170199   |-1.000394e+01 |-7.507642e-01 |\\u001b[0m\\n\",\n      \"| 1097  |27.4250 |  1   |   0.489561   |   0.672850   |  -5.167845   |-1.000498e+01 |-7.506725e-01 |\\u001b[0m\\n\",\n      \"| 1098  |27.4500 |  1   |   0.488160   |   0.668952   |  -5.165967   |-1.000602e+01 |-7.505812e-01 |\\u001b[0m\\n\",\n      \"| 1099  |27.4750 |  1   |   0.519246   |   0.695777   |  -5.169713   |-1.000705e+01 |-7.504902e-01 |\\u001b[0m\\n\",\n      \"| 1100  |27.5000 |  1   |   0.489192   |   0.667250   |  -5.170115   |-1.000808e+01 |-7.503995e-01 |\\u001b[0m\\n\",\n      \"| 1101  |27.5250 |  1   |   0.499167   |   0.682266   |  -5.175767   |-1.000910e+01 |-7.503093e-01 |\\u001b[0m\\n\",\n      \"| 1102  |27.5500 |  1   |   0.492088   |   0.672850   |  -5.178382   |-1.001011e+01 |-7.502193e-01 |\\u001b[0m\\n\",\n      \"| 1103  |27.5750 |  1   |   0.487768   |   0.663787   |  -5.175107   |-1.001113e+01 |-7.501297e-01 |\\u001b[0m\\n\",\n      \"| 1104  |27.6000 |  1   |   0.493979   |   0.674322   |  -5.178327   |-1.001214e+01 |-7.500404e-01 |\\u001b[0m\\n\",\n      \"| 1105  |27.6250 |  1   |   0.490692   |   0.663366   |  -5.177274   |-1.001314e+01 |-7.499515e-01 |\\u001b[0m\\n\",\n      \"| 1106  |27.6500 |  1   |   0.492805   |   0.674422   |  -5.178603   |-1.001414e+01 |-7.498630e-01 |\\u001b[0m\\n\",\n      \"| 1107  |27.6750 |  1   |   0.485858   |   0.664090   |  -5.187219   |-1.001513e+01 |-7.497748e-01 |\\u001b[0m\\n\",\n      \"| 1108  |27.7000 |  1   |   0.486335   |   0.663156   |  -5.184418   |-1.001613e+01 |-7.496872e-01 |\\u001b[0m\\n\",\n      \"| 1109  |27.7250 |  1   |   0.494404   |   0.702291   |  -5.186787   |-1.001711e+01 |-7.495997e-01 |\\u001b[0m\\n\",\n      \"| 1110  |27.7500 |  1   |   0.446076   |   0.705973   |  -5.187599   |-1.001809e+01 |-7.495127e-01 |\\u001b[0m\\n\",\n      \"| 1111  |27.7750 |  1   |   0.482750   |   0.662560   |  -5.184811   |-1.001907e+01 |-7.494261e-01 |\\u001b[0m\\n\",\n      \"| 1112  |27.8000 |  1   |   0.476889   |   0.669748   |  -5.191664   |-1.002004e+01 |-7.493398e-01 |\\u001b[0m\\n\",\n      \"| 1113  |27.8250 |  1   |   0.492741   |   0.670303   |  -5.192749   |-1.002101e+01 |-7.492541e-01 |\\u001b[0m\\n\",\n      \"| 1114  |27.8500 |  1   |   0.481042   |   0.663581   |  -5.195669   |-1.002197e+01 |-7.491686e-01 |\\u001b[0m\\n\",\n      \"| 1115  |27.8750 |  1   |   0.484773   |   0.664162   |  -5.197804   |-1.002292e+01 |-7.490836e-01 |\\u001b[0m\\n\",\n      \"| 1116  |27.9000 |  1   |   0.471439   |   0.679314   |  -5.194899   |-1.002388e+01 |-7.489990e-01 |\\u001b[0m\\n\",\n      \"| 1117  |27.9250 |  1   |   0.484387   |   0.664117   |  -5.198012   |-1.002482e+01 |-7.489147e-01 |\\u001b[0m\\n\",\n      \"| 1118  |27.9500 |  1   |   0.485070   |   0.664848   |  -5.200681   |-1.002576e+01 |-7.488309e-01 |\\u001b[0m\\n\",\n      \"| 1119  |27.9750 |  1   |   0.483672   |   0.663051   |  -5.202168   |-1.002670e+01 |-7.487475e-01 |\\u001b[0m\\n\",\n      \"| 1120  |28.0000 |  1   |   0.483831   |   0.665529   |  -5.208302   |-1.002763e+01 |-7.486645e-01 |\\u001b[0m\\n\",\n      \"| 1121  |28.0250 |  1   |   0.486482   |   0.662659   |  -5.207243   |-1.002856e+01 |-7.485818e-01 |\\u001b[0m\\n\",\n      \"| 1122  |28.0500 |  1   |   0.484792   |   0.665026   |  -5.206583   |-1.002948e+01 |-7.484996e-01 |\\u001b[0m\\n\",\n      \"| 1123  |28.0750 |  1   |   0.484451   |   0.669203   |  -5.210633   |-1.003040e+01 |-7.484179e-01 |\\u001b[0m\\n\",\n      \"| 1124  |28.1000 |  1   |   0.483054   |   0.665843   |  -5.210285   |-1.003131e+01 |-7.483365e-01 |\\u001b[0m\\n\",\n      \"| 1125  |28.1250 |  1   |   0.479900   |   0.666058   |  -5.215282   |-1.003221e+01 |-7.482556e-01 |\\u001b[0m\\n\",\n      \"| 1126  |28.1500 |  1   |   0.481851   |   0.666201   |  -5.219299   |-1.003311e+01 |-7.481751e-01 |\\u001b[0m\\n\",\n      \"| 1127  |28.1750 |  1   |   0.483100   |   0.663770   |  -5.218610   |-1.003401e+01 |-7.480950e-01 |\\u001b[0m\\n\",\n      \"| 1128  |28.2000 |  1   |   0.485134   |   0.663042   |  -5.220768   |-1.003490e+01 |-7.480154e-01 |\\u001b[0m\\n\",\n      \"| 1129  |28.2250 |  1   |   0.489655   |   0.667828   |  -5.221060   |-1.003578e+01 |-7.479362e-01 |\\u001b[0m\\n\",\n      \"| 1130  |28.2500 |  1   |   0.480716   |   0.672463   |  -5.223165   |-1.003666e+01 |-7.478574e-01 |\\u001b[0m\\n\",\n      \"| 1131  |28.2750 |  1   |   0.483455   |   0.666447   |  -5.228675   |-1.003753e+01 |-7.477791e-01 |\\u001b[0m\\n\",\n      \"| 1132  |28.3000 |  1   |   0.483978   |   0.671011   |  -5.229529   |-1.003840e+01 |-7.477012e-01 |\\u001b[0m\\n\",\n      \"| 1133  |28.3250 |  1   |   0.475710   |   0.669280   |  -5.232726   |-1.003926e+01 |-7.476238e-01 |\\u001b[0m\\n\",\n      \"| 1134  |28.3500 |  1   |   0.479361   |   0.669395   |  -5.234044   |-1.004012e+01 |-7.475468e-01 |\\u001b[0m\\n\",\n      \"| 1135  |28.3750 |  1   |   0.496386   |   0.682017   |  -5.232092   |-1.004097e+01 |-7.474703e-01 |\\u001b[0m\\n\",\n      \"| 1136  |28.4000 |  1   |   0.485283   |   0.674847   |  -5.238405   |-1.004182e+01 |-7.473943e-01 |\\u001b[0m\\n\",\n      \"| 1137  |28.4250 |  1   |   0.479666   |   0.672826   |  -5.240062   |-1.004266e+01 |-7.473187e-01 |\\u001b[0m\\n\",\n      \"| 1138  |28.4500 |  1   |   0.479845   |   0.676287   |  -5.242591   |-1.004349e+01 |-7.472436e-01 |\\u001b[0m\\n\",\n      \"| 1139  |28.4750 |  1   |   0.481158   |   0.666536   |  -5.247594   |-1.004432e+01 |-7.471689e-01 |\\u001b[0m\\n\",\n      \"| 1140  |28.5000 |  1   |   0.483141   |   0.667308   |  -5.245477   |-1.004514e+01 |-7.470948e-01 |\\u001b[0m\\n\",\n      \"| 1141  |28.5250 |  1   |   0.486443   |   0.666994   |  -5.248138   |-1.004596e+01 |-7.470210e-01 |\\u001b[0m\\n\",\n      \"| 1142  |28.5500 |  1   |   0.479723   |   0.665961   |  -5.251076   |-1.004677e+01 |-7.469478e-01 |\\u001b[0m\\n\",\n      \"| 1143  |28.5750 |  1   |   0.478889   |   0.668256   |  -5.253471   |-1.004757e+01 |-7.468750e-01 |\\u001b[0m\\n\",\n      \"| 1144  |28.6000 |  1   |   0.480882   |   0.666810   |  -5.258529   |-1.004837e+01 |-7.468027e-01 |\\u001b[0m\\n\",\n      \"| 1145  |28.6250 |  1   |   0.474088   |   0.675753   |  -5.259920   |-1.004917e+01 |-7.467310e-01 |\\u001b[0m\\n\",\n      \"| 1146  |28.6500 |  1   |   0.480283   |   0.668231   |  -5.261212   |-1.004995e+01 |-7.466596e-01 |\\u001b[0m\\n\",\n      \"| 1147  |28.6750 |  1   |   0.480788   |   0.674629   |  -5.263745   |-1.005073e+01 |-7.465887e-01 |\\u001b[0m\\n\",\n      \"| 1148  |28.7000 |  1   |   0.480191   |   0.669986   |  -5.264326   |-1.005151e+01 |-7.465184e-01 |\\u001b[0m\\n\",\n      \"| 1149  |28.7250 |  1   |   0.470319   |   0.675661   |  -5.269713   |-1.005228e+01 |-7.464485e-01 |\\u001b[0m\\n\",\n      \"| 1150  |28.7500 |  1   |   0.480411   |   0.673238   |  -5.273651   |-1.005304e+01 |-7.463791e-01 |\\u001b[0m\\n\",\n      \"| 1151  |28.7750 |  1   |   0.473258   |   0.678330   |  -5.274198   |-1.005380e+01 |-7.463102e-01 |\\u001b[0m\\n\",\n      \"| 1152  |28.8000 |  1   |   0.478426   |   0.670399   |  -5.278360   |-1.005455e+01 |-7.462418e-01 |\\u001b[0m\\n\",\n      \"| 1153  |28.8250 |  1   |   0.481835   |   0.677192   |  -5.278659   |-1.005530e+01 |-7.461739e-01 |\\u001b[0m\\n\",\n      \"| 1154  |28.8500 |  1   |   0.477153   |   0.671792   |  -5.280378   |-1.005604e+01 |-7.461065e-01 |\\u001b[0m\\n\",\n      \"| 1155  |28.8750 |  1   |   0.483710   |   0.675545   |  -5.286094   |-1.005677e+01 |-7.460396e-01 |\\u001b[0m\\n\",\n      \"| 1156  |28.9000 |  1   |   0.478907   |   0.667440   |  -5.288677   |-1.005750e+01 |-7.459732e-01 |\\u001b[0m\\n\",\n      \"| 1157  |28.9250 |  1   |   0.476032   |   0.683400   |  -5.291475   |-1.005822e+01 |-7.459074e-01 |\\u001b[0m\\n\",\n      \"| 1158  |28.9500 |  1   |   0.478212   |   0.670153   |  -5.294549   |-1.005893e+01 |-7.458420e-01 |\\u001b[0m\\n\",\n      \"| 1159  |28.9750 |  1   |   0.490696   |   0.674169   |  -5.294755   |-1.005964e+01 |-7.457771e-01 |\\u001b[0m\\n\",\n      \"| 1160  |29.0000 |  1   |   0.478562   |   0.668860   |  -5.298482   |-1.006034e+01 |-7.457127e-01 |\\u001b[0m\\n\",\n      \"| 1161  |29.0250 |  1   |   0.477472   |   0.670187   |  -5.301871   |-1.006104e+01 |-7.456489e-01 |\\u001b[0m\\n\",\n      \"| 1162  |29.0500 |  1   |   0.481258   |   0.684804   |  -5.305298   |-1.006173e+01 |-7.455856e-01 |\\u001b[0m\\n\",\n      \"| 1163  |29.0750 |  1   |   0.460059   |   0.686929   |  -5.310364   |-1.006241e+01 |-7.455228e-01 |\\u001b[0m\\n\",\n      \"| 1164  |29.1000 |  1   |   0.448954   |   0.699926   |  -5.310048   |-1.006309e+01 |-7.454605e-01 |\\u001b[0m\\n\",\n      \"| 1165  |29.1250 |  1   |   0.453478   |   0.709623   |  -5.313561   |-1.006376e+01 |-7.453987e-01 |\\u001b[0m\\n\",\n      \"| 1166  |29.1500 |  1   |   0.445714   |   0.707670   |  -5.316738   |-1.006442e+01 |-7.453374e-01 |\\u001b[0m\\n\",\n      \"| 1167  |29.1750 |  1   |   0.452987   |   0.698719   |  -5.318177   |-1.006508e+01 |-7.452767e-01 |\\u001b[0m\\n\",\n      \"| 1168  |29.2000 |  1   |   0.449597   |   0.705269   |  -5.325022   |-1.006573e+01 |-7.452165e-01 |\\u001b[0m\\n\",\n      \"| 1169  |29.2250 |  1   |   0.490915   |   0.676666   |  -5.327513   |-1.006637e+01 |-7.451568e-01 |\\u001b[0m\\n\",\n      \"| 1170  |29.2500 |  1   |   0.449594   |   0.712068   |  -5.328948   |-1.006701e+01 |-7.450977e-01 |\\u001b[0m\\n\",\n      \"| 1171  |29.2750 |  1   |   0.457821   |   0.707891   |  -5.332960   |-1.006764e+01 |-7.450391e-01 |\\u001b[0m\\n\",\n      \"| 1172  |29.3000 |  1   |   0.451920   |   0.700959   |  -5.334478   |-1.006827e+01 |-7.449809e-01 |\\u001b[0m\\n\",\n      \"| 1173  |29.3250 |  1   |   0.457635   |   0.705507   |  -5.338479   |-1.006889e+01 |-7.449234e-01 |\\u001b[0m\\n\",\n      \"| 1174  |29.3500 |  1   |   0.447267   |   0.700000   |  -5.343494   |-1.006950e+01 |-7.448664e-01 |\\u001b[0m\\n\",\n      \"| 1175  |29.3750 |  1   |   0.458476   |   0.705746   |  -5.346398   |-1.007011e+01 |-7.448099e-01 |\\u001b[0m\\n\",\n      \"| 1176  |29.4000 |  1   |   0.450082   |   0.701366   |  -5.350024   |-1.007071e+01 |-7.447539e-01 |\\u001b[0m\\n\",\n      \"| 1177  |29.4250 |  1   |   0.476268   |   0.681734   |  -5.351738   |-1.007130e+01 |-7.446985e-01 |\\u001b[0m\\n\",\n      \"| 1178  |29.4500 |  1   |   0.460729   |   0.691428   |  -5.354504   |-1.007189e+01 |-7.446436e-01 |\\u001b[0m\\n\",\n      \"| 1179  |29.4750 |  1   |   0.457731   |   0.717534   |  -5.359754   |-1.007247e+01 |-7.445893e-01 |\\u001b[0m\\n\",\n      \"| 1180  |29.5000 |  1   |   0.448818   |   0.702547   |  -5.362285   |-1.007304e+01 |-7.445355e-01 |\\u001b[0m\\n\",\n      \"| 1181  |29.5250 |  1   |   0.444427   |   0.710591   |  -5.367519   |-1.007361e+01 |-7.444822e-01 |\\u001b[0m\\n\",\n      \"| 1182  |29.5500 |  1   |   0.449657   |   0.703114   |  -5.371200   |-1.007417e+01 |-7.444295e-01 |\\u001b[0m\\n\",\n      \"| 1183  |29.5750 |  1   |   0.440618   |   0.711450   |  -5.371774   |-1.007472e+01 |-7.443773e-01 |\\u001b[0m\\n\",\n      \"| 1184  |29.6000 |  1   |   0.446356   |   0.706056   |  -5.376509   |-1.007527e+01 |-7.443257e-01 |\\u001b[0m\\n\",\n      \"| 1185  |29.6250 |  1   |   0.448475   |   0.708371   |  -5.380511   |-1.007581e+01 |-7.442746e-01 |\\u001b[0m\\n\",\n      \"| 1186  |29.6500 |  1   |   0.448725   |   0.706641   |  -5.383604   |-1.007634e+01 |-7.442241e-01 |\\u001b[0m\\n\",\n      \"| 1187  |29.6750 |  1   |   0.467714   |   0.685492   |  -5.389558   |-1.007687e+01 |-7.441741e-01 |\\u001b[0m\\n\",\n      \"| 1188  |29.7000 |  1   |   0.469720   |   0.679917   |  -5.392343   |-1.007739e+01 |-7.441247e-01 |\\u001b[0m\\n\",\n      \"| 1189  |29.7250 |  1   |   0.472234   |   0.676739   |  -5.394581   |-1.007790e+01 |-7.440758e-01 |\\u001b[0m\\n\",\n      \"| 1190  |29.7500 |  1   |   0.471790   |   0.681953   |  -5.398936   |-1.007841e+01 |-7.440275e-01 |\\u001b[0m\\n\",\n      \"| 1191  |29.7750 |  1   |   0.467655   |   0.680340   |  -5.401760   |-1.007891e+01 |-7.439797e-01 |\\u001b[0m\\n\",\n      \"| 1192  |29.8000 |  1   |   0.474229   |   0.672687   |  -5.407802   |-1.007940e+01 |-7.439325e-01 |\\u001b[0m\\n\",\n      \"| 1193  |29.8250 |  1   |   0.476449   |   0.675359   |  -5.411367   |-1.007989e+01 |-7.438858e-01 |\\u001b[0m\\n\",\n      \"| 1194  |29.8500 |  1   |   0.476582   |   0.678527   |  -5.415002   |-1.008037e+01 |-7.438397e-01 |\\u001b[0m\\n\",\n      \"| 1195  |29.8750 |  1   |   0.472185   |   0.686604   |  -5.419606   |-1.008084e+01 |-7.437942e-01 |\\u001b[0m\\n\",\n      \"| 1196  |29.9000 |  1   |   0.471914   |   0.678537   |  -5.420797   |-1.008131e+01 |-7.437492e-01 |\\u001b[0m\\n\",\n      \"| 1197  |29.9250 |  1   |   0.466368   |   0.687928   |  -5.426230   |-1.008177e+01 |-7.437047e-01 |\\u001b[0m\\n\",\n      \"| 1198  |29.9500 |  1   |   0.471255   |   0.677494   |  -5.431831   |-1.008222e+01 |-7.436608e-01 |\\u001b[0m\\n\",\n      \"| 1199  |29.9750 |  1   |   0.474277   |   0.679189   |  -5.434645   |-1.008267e+01 |-7.436175e-01 |\\u001b[0m\\n\",\n      \"| 1200  |30.0000 |  1   |   0.470302   |   0.680280   |  -5.440101   |-1.008311e+01 |-7.435748e-01 |\\u001b[0m\\n\",\n      \"\\u001b[34m...Finished\\u001b[0m\\n\",\n      \"\\u001b[36mFINISHED - Elapsed time = 897.2004556 seconds\\u001b[0m\\n\",\n      \"\\u001b[36mFINISHED - CPU process time = 1055.3392616 seconds\\u001b[0m\\n\"\n     ]\n    }\n   ],\n   \"source\": [\n    \"case_data = sharpy_main.main(['', route_to_case + 'simple_HALE.sharpy'])\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"The resulting data structure that is returned from the call to `main` contains all the time-dependant variables for both the structural and aerodynamic solvers.\\n\",\n    \"\\n\",\n    \"`timestep_info` can be found in `case_data.structure` and `case_data.aero`. It is an array with custom-made structure to contain the data of each solver.\\n\",\n    \"\\n\",\n    \"In the `.sharpy` file, we can see which solvers are run:\\n\",\n    \"```\\n\",\n    \"flow = ['BeamLoader',\\n\",\n    \"        'AerogridLoader',\\n\",\n    \"        'StaticTrim',\\n\",\n    \"        'BeamLoads',\\n\",\n    \"        'AerogridPlot',\\n\",\n    \"        'BeamPlot',\\n\",\n    \"        'DynamicCoupled',\\n\",\n    \"        ]\\n\",\n    \"```\\n\",\n    \"\\n\",\n    \"In order:\\n\",\n    \"\\n\",\n    \"* BeamLoader: reads the `fem.h5` file and generates the structure for the beam solver.\\n\",\n    \"\\n\",\n    \"* AerogridLoader: reads the `aero.h5` file and generates the aerodynamic grid for the aerodynamic solver.\\n\",\n    \"\\n\",\n    \"* StaticTrim: this solver performs a longitudinal trim (Thrust, Angle of attack and Elevator deflection) using the StaticCoupled solver.\\n\",\n    \"\\n\",\n    \"* BeamLoads: calculates the internal beam loads for the static solution\\n\",\n    \"\\n\",\n    \"* AerogridPlot: outputs the aerodynamic grid for the static solution.\\n\",\n    \"\\n\",\n    \"* BeamPlot: outputs the structural discretisation for the static solution.\\n\",\n    \"\\n\",\n    \"* DynamicCoupled: is the main driver of the dynamic simulation: executes the structural and aerodynamic solvers and couples both. Every converged time step is followed by a BeamLoads, AerogridPlot and BeamPlot execution.\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"### Structural data organisation\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"The `timestep_info` structure contains several relevant variables:\\n\",\n    \"\\n\",\n    \"* `for_pos`: position of the body-attached frame of reference in inertial FoR.\\n\",\n    \"\\n\",\n    \"* `for_vel`: velocity (in body FoR) of the body FoR wrt inertial FoR.\\n\",\n    \"\\n\",\n    \"* `pos`: nodal position in A FoR.\\n\",\n    \"\\n\",\n    \"* `psi`: nodal rotations (from the material B FoR to A FoR) in a Cartesian Rotation Vector parametrisation.\\n\",\n    \"\\n\",\n    \"* `applied_steady_forces`: nodal forces from the aero solver and the applied forces.\\n\",\n    \"\\n\",\n    \"* `postproc_cell`: is a dictionary that contains the variables generated by a postprocessor, such as the internal beam loads.\\n\",\n    \"\\n\",\n    \"\\n\",\n    \"The structural `timestep_info` also contains some useful variables:\\n\",\n    \"\\n\",\n    \"* `cag` and `cga` return $C^{AG}$ and $C^{GA}$, the rotation matrices from the body-attached (A) FoR to the inertial (G).\\n\",\n    \"\\n\",\n    \"* `glob_pos` rotates the `pos` variable to give you the inertial nodal position. If `include_rbm = True` is passed, `for_pos` is added to it.\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"### Aerodynamic data organisation\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"The aerodynamic datastructure can be found in `case_data.aero.timestep_info`.\\n\",\n    \"It contains useful variables, such as:\\n\",\n    \"\\n\",\n    \"* `dimensions` and `dimensions_star`: gives the dimensions of every surface and wake surface. Organised as: `dimensions[i_surf, 0] = chordwise panels`, `dimensions[i_surf, 1] = spanwise panels`.\\n\",\n    \"\\n\",\n    \"* `zeta` and `zeta_star`: they are the $G$ FoR coordinates of the surface vertices.\\n\",\n    \"\\n\",\n    \"* `gamma` and `gamma_star`: vortex ring circulations.\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"### Structural dynamics\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"We can now plot the rigid body dynamics:\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"*RBM trajectory*\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 8,\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"data\": {\n      \"image/svg+xml\": [\n       \"<?xml version=\\\"1.0\\\" encoding=\\\"utf-8\\\" standalone=\\\"no\\\"?>\\n\",\n       \"<!DOCTYPE svg PUBLIC \\\"-//W3C//DTD SVG 1.1//EN\\\"\\n\",\n       \"  \\\"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\\\">\\n\",\n       \"<!-- Created with matplotlib (https://matplotlib.org/) -->\\n\",\n       \"<svg height=\\\"290.99625pt\\\" version=\\\"1.1\\\" viewBox=\\\"0 0 466.599062 290.99625\\\" width=\\\"466.599062pt\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\" xmlns:xlink=\\\"http://www.w3.org/1999/xlink\\\">\\n\",\n       \" <defs>\\n\",\n       \"  <style type=\\\"text/css\\\">\\n\",\n       \"*{stroke-linecap:butt;stroke-linejoin:round;}\\n\",\n       \"  </style>\\n\",\n       \" </defs>\\n\",\n       \" <g id=\\\"figure_1\\\">\\n\",\n       \"  <g id=\\\"patch_1\\\">\\n\",\n       \"   <path d=\\\"M 0 290.99625 \\n\",\n       \"L 466.599062 290.99625 \\n\",\n       \"L 466.599062 0 \\n\",\n       \"L 0 0 \\n\",\n       \"z\\n\",\n       \"\\\" style=\\\"fill:none;\\\"/>\\n\",\n       \"  </g>\\n\",\n       \"  <g id=\\\"axes_1\\\">\\n\",\n       \"   <g id=\\\"patch_2\\\">\\n\",\n       \"    <path d=\\\"M 50.14375 253.44 \\n\",\n       \"L 440.74375 253.44 \\n\",\n       \"L 440.74375 36 \\n\",\n       \"L 50.14375 36 \\n\",\n       \"z\\n\",\n       \"\\\" style=\\\"fill:#ffffff;\\\"/>\\n\",\n       \"   </g>\\n\",\n       \"   <g id=\\\"matplotlib.axis_1\\\">\\n\",\n       \"    <g id=\\\"xtick_1\\\">\\n\",\n       \"     <g id=\\\"line2d_1\\\">\\n\",\n       \"      <defs>\\n\",\n       \"       <path d=\\\"M 0 0 \\n\",\n       \"L 0 3.5 \\n\",\n       \"\\\" id=\\\"mfc95c3eb39\\\" style=\\\"stroke:#000000;stroke-width:0.8;\\\"/>\\n\",\n       \"      </defs>\\n\",\n       \"      <g>\\n\",\n       \"       <use style=\\\"stroke:#000000;stroke-width:0.8;\\\" x=\\\"67.898295\\\" xlink:href=\\\"#mfc95c3eb39\\\" y=\\\"253.44\\\"/>\\n\",\n       \"      </g>\\n\",\n       \"     </g>\\n\",\n       \"     <g id=\\\"text_1\\\">\\n\",\n       \"      <!-- 0 -->\\n\",\n       \"      <defs>\\n\",\n       \"       <path d=\\\"M 31.78125 66.40625 \\n\",\n       \"Q 24.171875 66.40625 20.328125 58.90625 \\n\",\n       \"Q 16.5 51.421875 16.5 36.375 \\n\",\n       \"Q 16.5 21.390625 20.328125 13.890625 \\n\",\n       \"Q 24.171875 6.390625 31.78125 6.390625 \\n\",\n       \"Q 39.453125 6.390625 43.28125 13.890625 \\n\",\n       \"Q 47.125 21.390625 47.125 36.375 \\n\",\n       \"Q 47.125 51.421875 43.28125 58.90625 \\n\",\n       \"Q 39.453125 66.40625 31.78125 66.40625 \\n\",\n       \"z\\n\",\n       \"M 31.78125 74.21875 \\n\",\n       \"Q 44.046875 74.21875 50.515625 64.515625 \\n\",\n       \"Q 56.984375 54.828125 56.984375 36.375 \\n\",\n       \"Q 56.984375 17.96875 50.515625 8.265625 \\n\",\n       \"Q 44.046875 -1.421875 31.78125 -1.421875 \\n\",\n       \"Q 19.53125 -1.421875 13.0625 8.265625 \\n\",\n       \"Q 6.59375 17.96875 6.59375 36.375 \\n\",\n       \"Q 6.59375 54.828125 13.0625 64.515625 \\n\",\n       \"Q 19.53125 74.21875 31.78125 74.21875 \\n\",\n       \"z\\n\",\n       \"\\\" id=\\\"DejaVuSans-48\\\"/>\\n\",\n       \"      </defs>\\n\",\n       \"      <g transform=\\\"translate(64.717045 268.038437)scale(0.1 -0.1)\\\">\\n\",\n       \"       <use xlink:href=\\\"#DejaVuSans-48\\\"/>\\n\",\n       \"      </g>\\n\",\n       \"     </g>\\n\",\n       \"    </g>\\n\",\n       \"    <g id=\\\"xtick_2\\\">\\n\",\n       \"     <g id=\\\"line2d_2\\\">\\n\",\n       \"      <g>\\n\",\n       \"       <use style=\\\"stroke:#000000;stroke-width:0.8;\\\" x=\\\"126.932396\\\" xlink:href=\\\"#mfc95c3eb39\\\" y=\\\"253.44\\\"/>\\n\",\n       \"      </g>\\n\",\n       \"     </g>\\n\",\n       \"     <g id=\\\"text_2\\\">\\n\",\n       \"      <!-- 50 -->\\n\",\n       \"      <defs>\\n\",\n       \"       <path d=\\\"M 10.796875 72.90625 \\n\",\n       \"L 49.515625 72.90625 \\n\",\n       \"L 49.515625 64.59375 \\n\",\n       \"L 19.828125 64.59375 \\n\",\n       \"L 19.828125 46.734375 \\n\",\n       \"Q 21.96875 47.46875 24.109375 47.828125 \\n\",\n       \"Q 26.265625 48.1875 28.421875 48.1875 \\n\",\n       \"Q 40.625 48.1875 47.75 41.5 \\n\",\n       \"Q 54.890625 34.8125 54.890625 23.390625 \\n\",\n       \"Q 54.890625 11.625 47.5625 5.09375 \\n\",\n       \"Q 40.234375 -1.421875 26.90625 -1.421875 \\n\",\n       \"Q 22.3125 -1.421875 17.546875 -0.640625 \\n\",\n       \"Q 12.796875 0.140625 7.71875 1.703125 \\n\",\n       \"L 7.71875 11.625 \\n\",\n       \"Q 12.109375 9.234375 16.796875 8.0625 \\n\",\n       \"Q 21.484375 6.890625 26.703125 6.890625 \\n\",\n       \"Q 35.15625 6.890625 40.078125 11.328125 \\n\",\n       \"Q 45.015625 15.765625 45.015625 23.390625 \\n\",\n       \"Q 45.015625 31 40.078125 35.4375 \\n\",\n       \"Q 35.15625 39.890625 26.703125 39.890625 \\n\",\n       \"Q 22.75 39.890625 18.8125 39.015625 \\n\",\n       \"Q 14.890625 38.140625 10.796875 36.28125 \\n\",\n       \"z\\n\",\n       \"\\\" id=\\\"DejaVuSans-53\\\"/>\\n\",\n       \"      </defs>\\n\",\n       \"      <g transform=\\\"translate(120.569896 268.038437)scale(0.1 -0.1)\\\">\\n\",\n       \"       <use xlink:href=\\\"#DejaVuSans-53\\\"/>\\n\",\n       \"       <use x=\\\"63.623047\\\" xlink:href=\\\"#DejaVuSans-48\\\"/>\\n\",\n       \"      </g>\\n\",\n       \"     </g>\\n\",\n       \"    </g>\\n\",\n       \"    <g id=\\\"xtick_3\\\">\\n\",\n       \"     <g id=\\\"line2d_3\\\">\\n\",\n       \"      <g>\\n\",\n       \"       <use style=\\\"stroke:#000000;stroke-width:0.8;\\\" x=\\\"185.966496\\\" xlink:href=\\\"#mfc95c3eb39\\\" y=\\\"253.44\\\"/>\\n\",\n       \"      </g>\\n\",\n       \"     </g>\\n\",\n       \"     <g id=\\\"text_3\\\">\\n\",\n       \"      <!-- 100 -->\\n\",\n       \"      <defs>\\n\",\n       \"       <path d=\\\"M 12.40625 8.296875 \\n\",\n       \"L 28.515625 8.296875 \\n\",\n       \"L 28.515625 63.921875 \\n\",\n       \"L 10.984375 60.40625 \\n\",\n       \"L 10.984375 69.390625 \\n\",\n       \"L 28.421875 72.90625 \\n\",\n       \"L 38.28125 72.90625 \\n\",\n       \"L 38.28125 8.296875 \\n\",\n       \"L 54.390625 8.296875 \\n\",\n       \"L 54.390625 0 \\n\",\n       \"L 12.40625 0 \\n\",\n       \"z\\n\",\n       \"\\\" id=\\\"DejaVuSans-49\\\"/>\\n\",\n       \"      </defs>\\n\",\n       \"      <g transform=\\\"translate(176.422746 268.038437)scale(0.1 -0.1)\\\">\\n\",\n       \"       <use xlink:href=\\\"#DejaVuSans-49\\\"/>\\n\",\n       \"       <use x=\\\"63.623047\\\" xlink:href=\\\"#DejaVuSans-48\\\"/>\\n\",\n       \"       <use x=\\\"127.246094\\\" xlink:href=\\\"#DejaVuSans-48\\\"/>\\n\",\n       \"      </g>\\n\",\n       \"     </g>\\n\",\n       \"    </g>\\n\",\n       \"    <g id=\\\"xtick_4\\\">\\n\",\n       \"     <g id=\\\"line2d_4\\\">\\n\",\n       \"      <g>\\n\",\n       \"       <use style=\\\"stroke:#000000;stroke-width:0.8;\\\" x=\\\"245.000596\\\" xlink:href=\\\"#mfc95c3eb39\\\" y=\\\"253.44\\\"/>\\n\",\n       \"      </g>\\n\",\n       \"     </g>\\n\",\n       \"     <g id=\\\"text_4\\\">\\n\",\n       \"      <!-- 150 -->\\n\",\n       \"      <g transform=\\\"translate(235.456846 268.038437)scale(0.1 -0.1)\\\">\\n\",\n       \"       <use xlink:href=\\\"#DejaVuSans-49\\\"/>\\n\",\n       \"       <use x=\\\"63.623047\\\" xlink:href=\\\"#DejaVuSans-53\\\"/>\\n\",\n       \"       <use x=\\\"127.246094\\\" xlink:href=\\\"#DejaVuSans-48\\\"/>\\n\",\n       \"      </g>\\n\",\n       \"     </g>\\n\",\n       \"    </g>\\n\",\n       \"    <g id=\\\"xtick_5\\\">\\n\",\n       \"     <g id=\\\"line2d_5\\\">\\n\",\n       \"      <g>\\n\",\n       \"       <use style=\\\"stroke:#000000;stroke-width:0.8;\\\" x=\\\"304.034696\\\" xlink:href=\\\"#mfc95c3eb39\\\" y=\\\"253.44\\\"/>\\n\",\n       \"      </g>\\n\",\n       \"     </g>\\n\",\n       \"     <g id=\\\"text_5\\\">\\n\",\n       \"      <!-- 200 -->\\n\",\n       \"      <defs>\\n\",\n       \"       <path d=\\\"M 19.1875 8.296875 \\n\",\n       \"L 53.609375 8.296875 \\n\",\n       \"L 53.609375 0 \\n\",\n       \"L 7.328125 0 \\n\",\n       \"L 7.328125 8.296875 \\n\",\n       \"Q 12.9375 14.109375 22.625 23.890625 \\n\",\n       \"Q 32.328125 33.6875 34.8125 36.53125 \\n\",\n       \"Q 39.546875 41.84375 41.421875 45.53125 \\n\",\n       \"Q 43.3125 49.21875 43.3125 52.78125 \\n\",\n       \"Q 43.3125 58.59375 39.234375 62.25 \\n\",\n       \"Q 35.15625 65.921875 28.609375 65.921875 \\n\",\n       \"Q 23.96875 65.921875 18.8125 64.3125 \\n\",\n       \"Q 13.671875 62.703125 7.8125 59.421875 \\n\",\n       \"L 7.8125 69.390625 \\n\",\n       \"Q 13.765625 71.78125 18.9375 73 \\n\",\n       \"Q 24.125 74.21875 28.421875 74.21875 \\n\",\n       \"Q 39.75 74.21875 46.484375 68.546875 \\n\",\n       \"Q 53.21875 62.890625 53.21875 53.421875 \\n\",\n       \"Q 53.21875 48.921875 51.53125 44.890625 \\n\",\n       \"Q 49.859375 40.875 45.40625 35.40625 \\n\",\n       \"Q 44.1875 33.984375 37.640625 27.21875 \\n\",\n       \"Q 31.109375 20.453125 19.1875 8.296875 \\n\",\n       \"z\\n\",\n       \"\\\" id=\\\"DejaVuSans-50\\\"/>\\n\",\n       \"      </defs>\\n\",\n       \"      <g transform=\\\"translate(294.490946 268.038437)scale(0.1 -0.1)\\\">\\n\",\n       \"       <use xlink:href=\\\"#DejaVuSans-50\\\"/>\\n\",\n       \"       <use x=\\\"63.623047\\\" xlink:href=\\\"#DejaVuSans-48\\\"/>\\n\",\n       \"       <use x=\\\"127.246094\\\" xlink:href=\\\"#DejaVuSans-48\\\"/>\\n\",\n       \"      </g>\\n\",\n       \"     </g>\\n\",\n       \"    </g>\\n\",\n       \"    <g id=\\\"xtick_6\\\">\\n\",\n       \"     <g id=\\\"line2d_6\\\">\\n\",\n       \"      <g>\\n\",\n       \"       <use style=\\\"stroke:#000000;stroke-width:0.8;\\\" x=\\\"363.068796\\\" xlink:href=\\\"#mfc95c3eb39\\\" y=\\\"253.44\\\"/>\\n\",\n       \"      </g>\\n\",\n       \"     </g>\\n\",\n       \"     <g id=\\\"text_6\\\">\\n\",\n       \"      <!-- 250 -->\\n\",\n       \"      <g transform=\\\"translate(353.525046 268.038437)scale(0.1 -0.1)\\\">\\n\",\n       \"       <use xlink:href=\\\"#DejaVuSans-50\\\"/>\\n\",\n       \"       <use x=\\\"63.623047\\\" xlink:href=\\\"#DejaVuSans-53\\\"/>\\n\",\n       \"       <use x=\\\"127.246094\\\" xlink:href=\\\"#DejaVuSans-48\\\"/>\\n\",\n       \"      </g>\\n\",\n       \"     </g>\\n\",\n       \"    </g>\\n\",\n       \"    <g id=\\\"xtick_7\\\">\\n\",\n       \"     <g id=\\\"line2d_7\\\">\\n\",\n       \"      <g>\\n\",\n       \"       <use style=\\\"stroke:#000000;stroke-width:0.8;\\\" x=\\\"422.102896\\\" xlink:href=\\\"#mfc95c3eb39\\\" y=\\\"253.44\\\"/>\\n\",\n       \"      </g>\\n\",\n       \"     </g>\\n\",\n       \"     <g id=\\\"text_7\\\">\\n\",\n       \"      <!-- 300 -->\\n\",\n       \"      <defs>\\n\",\n       \"       <path d=\\\"M 40.578125 39.3125 \\n\",\n       \"Q 47.65625 37.796875 51.625 33 \\n\",\n       \"Q 55.609375 28.21875 55.609375 21.1875 \\n\",\n       \"Q 55.609375 10.40625 48.1875 4.484375 \\n\",\n       \"Q 40.765625 -1.421875 27.09375 -1.421875 \\n\",\n       \"Q 22.515625 -1.421875 17.65625 -0.515625 \\n\",\n       \"Q 12.796875 0.390625 7.625 2.203125 \\n\",\n       \"L 7.625 11.71875 \\n\",\n       \"Q 11.71875 9.328125 16.59375 8.109375 \\n\",\n       \"Q 21.484375 6.890625 26.8125 6.890625 \\n\",\n       \"Q 36.078125 6.890625 40.9375 10.546875 \\n\",\n       \"Q 45.796875 14.203125 45.796875 21.1875 \\n\",\n       \"Q 45.796875 27.640625 41.28125 31.265625 \\n\",\n       \"Q 36.765625 34.90625 28.71875 34.90625 \\n\",\n       \"L 20.21875 34.90625 \\n\",\n       \"L 20.21875 43.015625 \\n\",\n       \"L 29.109375 43.015625 \\n\",\n       \"Q 36.375 43.015625 40.234375 45.921875 \\n\",\n       \"Q 44.09375 48.828125 44.09375 54.296875 \\n\",\n       \"Q 44.09375 59.90625 40.109375 62.90625 \\n\",\n       \"Q 36.140625 65.921875 28.71875 65.921875 \\n\",\n       \"Q 24.65625 65.921875 20.015625 65.03125 \\n\",\n       \"Q 15.375 64.15625 9.8125 62.3125 \\n\",\n       \"L 9.8125 71.09375 \\n\",\n       \"Q 15.4375 72.65625 20.34375 73.4375 \\n\",\n       \"Q 25.25 74.21875 29.59375 74.21875 \\n\",\n       \"Q 40.828125 74.21875 47.359375 69.109375 \\n\",\n       \"Q 53.90625 64.015625 53.90625 55.328125 \\n\",\n       \"Q 53.90625 49.265625 50.4375 45.09375 \\n\",\n       \"Q 46.96875 40.921875 40.578125 39.3125 \\n\",\n       \"z\\n\",\n       \"\\\" id=\\\"DejaVuSans-51\\\"/>\\n\",\n       \"      </defs>\\n\",\n       \"      <g transform=\\\"translate(412.559146 268.038437)scale(0.1 -0.1)\\\">\\n\",\n       \"       <use xlink:href=\\\"#DejaVuSans-51\\\"/>\\n\",\n       \"       <use x=\\\"63.623047\\\" xlink:href=\\\"#DejaVuSans-48\\\"/>\\n\",\n       \"       <use x=\\\"127.246094\\\" xlink:href=\\\"#DejaVuSans-48\\\"/>\\n\",\n       \"      </g>\\n\",\n       \"     </g>\\n\",\n       \"    </g>\\n\",\n       \"    <g id=\\\"text_8\\\">\\n\",\n       \"     <!-- X [m] -->\\n\",\n       \"     <defs>\\n\",\n       \"      <path d=\\\"M 6.296875 72.90625 \\n\",\n       \"L 16.890625 72.90625 \\n\",\n       \"L 35.015625 45.796875 \\n\",\n       \"L 53.21875 72.90625 \\n\",\n       \"L 63.8125 72.90625 \\n\",\n       \"L 40.375 37.890625 \\n\",\n       \"L 65.375 0 \\n\",\n       \"L 54.78125 0 \\n\",\n       \"L 34.28125 31 \\n\",\n       \"L 13.625 0 \\n\",\n       \"L 2.984375 0 \\n\",\n       \"L 29 38.921875 \\n\",\n       \"z\\n\",\n       \"\\\" id=\\\"DejaVuSans-88\\\"/>\\n\",\n       \"      <path id=\\\"DejaVuSans-32\\\"/>\\n\",\n       \"      <path d=\\\"M 8.59375 75.984375 \\n\",\n       \"L 29.296875 75.984375 \\n\",\n       \"L 29.296875 69 \\n\",\n       \"L 17.578125 69 \\n\",\n       \"L 17.578125 -6.203125 \\n\",\n       \"L 29.296875 -6.203125 \\n\",\n       \"L 29.296875 -13.1875 \\n\",\n       \"L 8.59375 -13.1875 \\n\",\n       \"z\\n\",\n       \"\\\" id=\\\"DejaVuSans-91\\\"/>\\n\",\n       \"      <path d=\\\"M 52 44.1875 \\n\",\n       \"Q 55.375 50.25 60.0625 53.125 \\n\",\n       \"Q 64.75 56 71.09375 56 \\n\",\n       \"Q 79.640625 56 84.28125 50.015625 \\n\",\n       \"Q 88.921875 44.046875 88.921875 33.015625 \\n\",\n       \"L 88.921875 0 \\n\",\n       \"L 79.890625 0 \\n\",\n       \"L 79.890625 32.71875 \\n\",\n       \"Q 79.890625 40.578125 77.09375 44.375 \\n\",\n       \"Q 74.3125 48.1875 68.609375 48.1875 \\n\",\n       \"Q 61.625 48.1875 57.5625 43.546875 \\n\",\n       \"Q 53.515625 38.921875 53.515625 30.90625 \\n\",\n       \"L 53.515625 0 \\n\",\n       \"L 44.484375 0 \\n\",\n       \"L 44.484375 32.71875 \\n\",\n       \"Q 44.484375 40.625 41.703125 44.40625 \\n\",\n       \"Q 38.921875 48.1875 33.109375 48.1875 \\n\",\n       \"Q 26.21875 48.1875 22.15625 43.53125 \\n\",\n       \"Q 18.109375 38.875 18.109375 30.90625 \\n\",\n       \"L 18.109375 0 \\n\",\n       \"L 9.078125 0 \\n\",\n       \"L 9.078125 54.6875 \\n\",\n       \"L 18.109375 54.6875 \\n\",\n       \"L 18.109375 46.1875 \\n\",\n       \"Q 21.1875 51.21875 25.484375 53.609375 \\n\",\n       \"Q 29.78125 56 35.6875 56 \\n\",\n       \"Q 41.65625 56 45.828125 52.96875 \\n\",\n       \"Q 50 49.953125 52 44.1875 \\n\",\n       \"z\\n\",\n       \"\\\" id=\\\"DejaVuSans-109\\\"/>\\n\",\n       \"      <path d=\\\"M 30.421875 75.984375 \\n\",\n       \"L 30.421875 -13.1875 \\n\",\n       \"L 9.71875 -13.1875 \\n\",\n       \"L 9.71875 -6.203125 \\n\",\n       \"L 21.390625 -6.203125 \\n\",\n       \"L 21.390625 69 \\n\",\n       \"L 9.71875 69 \\n\",\n       \"L 9.71875 75.984375 \\n\",\n       \"z\\n\",\n       \"\\\" id=\\\"DejaVuSans-93\\\"/>\\n\",\n       \"     </defs>\\n\",\n       \"     <g transform=\\\"translate(231.657813 281.716562)scale(0.1 -0.1)\\\">\\n\",\n       \"      <use xlink:href=\\\"#DejaVuSans-88\\\"/>\\n\",\n       \"      <use x=\\\"68.505859\\\" xlink:href=\\\"#DejaVuSans-32\\\"/>\\n\",\n       \"      <use x=\\\"100.292969\\\" xlink:href=\\\"#DejaVuSans-91\\\"/>\\n\",\n       \"      <use x=\\\"139.306641\\\" xlink:href=\\\"#DejaVuSans-109\\\"/>\\n\",\n       \"      <use x=\\\"236.71875\\\" xlink:href=\\\"#DejaVuSans-93\\\"/>\\n\",\n       \"     </g>\\n\",\n       \"    </g>\\n\",\n       \"   </g>\\n\",\n       \"   <g id=\\\"matplotlib.axis_2\\\">\\n\",\n       \"    <g id=\\\"ytick_1\\\">\\n\",\n       \"     <g id=\\\"line2d_8\\\">\\n\",\n       \"      <defs>\\n\",\n       \"       <path d=\\\"M 0 0 \\n\",\n       \"L -3.5 0 \\n\",\n       \"\\\" id=\\\"m5ad7c10a5b\\\" style=\\\"stroke:#000000;stroke-width:0.8;\\\"/>\\n\",\n       \"      </defs>\\n\",\n       \"      <g>\\n\",\n       \"       <use style=\\\"stroke:#000000;stroke-width:0.8;\\\" x=\\\"50.14375\\\" xlink:href=\\\"#m5ad7c10a5b\\\" y=\\\"243.520941\\\"/>\\n\",\n       \"      </g>\\n\",\n       \"     </g>\\n\",\n       \"     <g id=\\\"text_9\\\">\\n\",\n       \"      <!-- 0.00 -->\\n\",\n       \"      <defs>\\n\",\n       \"       <path d=\\\"M 10.6875 12.40625 \\n\",\n       \"L 21 12.40625 \\n\",\n       \"L 21 0 \\n\",\n       \"L 10.6875 0 \\n\",\n       \"z\\n\",\n       \"\\\" id=\\\"DejaVuSans-46\\\"/>\\n\",\n       \"      </defs>\\n\",\n       \"      <g transform=\\\"translate(20.878125 247.32016)scale(0.1 -0.1)\\\">\\n\",\n       \"       <use xlink:href=\\\"#DejaVuSans-48\\\"/>\\n\",\n       \"       <use x=\\\"63.623047\\\" xlink:href=\\\"#DejaVuSans-46\\\"/>\\n\",\n       \"       <use x=\\\"95.410156\\\" xlink:href=\\\"#DejaVuSans-48\\\"/>\\n\",\n       \"       <use x=\\\"159.033203\\\" xlink:href=\\\"#DejaVuSans-48\\\"/>\\n\",\n       \"      </g>\\n\",\n       \"     </g>\\n\",\n       \"    </g>\\n\",\n       \"    <g id=\\\"ytick_2\\\">\\n\",\n       \"     <g id=\\\"line2d_9\\\">\\n\",\n       \"      <g>\\n\",\n       \"       <use style=\\\"stroke:#000000;stroke-width:0.8;\\\" x=\\\"50.14375\\\" xlink:href=\\\"#m5ad7c10a5b\\\" y=\\\"216.138529\\\"/>\\n\",\n       \"      </g>\\n\",\n       \"     </g>\\n\",\n       \"     <g id=\\\"text_10\\\">\\n\",\n       \"      <!-- 0.25 -->\\n\",\n       \"      <g transform=\\\"translate(20.878125 219.937748)scale(0.1 -0.1)\\\">\\n\",\n       \"       <use xlink:href=\\\"#DejaVuSans-48\\\"/>\\n\",\n       \"       <use x=\\\"63.623047\\\" xlink:href=\\\"#DejaVuSans-46\\\"/>\\n\",\n       \"       <use x=\\\"95.410156\\\" xlink:href=\\\"#DejaVuSans-50\\\"/>\\n\",\n       \"       <use x=\\\"159.033203\\\" xlink:href=\\\"#DejaVuSans-53\\\"/>\\n\",\n       \"      </g>\\n\",\n       \"     </g>\\n\",\n       \"    </g>\\n\",\n       \"    <g id=\\\"ytick_3\\\">\\n\",\n       \"     <g id=\\\"line2d_10\\\">\\n\",\n       \"      <g>\\n\",\n       \"       <use style=\\\"stroke:#000000;stroke-width:0.8;\\\" x=\\\"50.14375\\\" xlink:href=\\\"#m5ad7c10a5b\\\" y=\\\"188.756118\\\"/>\\n\",\n       \"      </g>\\n\",\n       \"     </g>\\n\",\n       \"     <g id=\\\"text_11\\\">\\n\",\n       \"      <!-- 0.50 -->\\n\",\n       \"      <g transform=\\\"translate(20.878125 192.555337)scale(0.1 -0.1)\\\">\\n\",\n       \"       <use xlink:href=\\\"#DejaVuSans-48\\\"/>\\n\",\n       \"       <use x=\\\"63.623047\\\" xlink:href=\\\"#DejaVuSans-46\\\"/>\\n\",\n       \"       <use x=\\\"95.410156\\\" xlink:href=\\\"#DejaVuSans-53\\\"/>\\n\",\n       \"       <use x=\\\"159.033203\\\" xlink:href=\\\"#DejaVuSans-48\\\"/>\\n\",\n       \"      </g>\\n\",\n       \"     </g>\\n\",\n       \"    </g>\\n\",\n       \"    <g id=\\\"ytick_4\\\">\\n\",\n       \"     <g id=\\\"line2d_11\\\">\\n\",\n       \"      <g>\\n\",\n       \"       <use style=\\\"stroke:#000000;stroke-width:0.8;\\\" x=\\\"50.14375\\\" xlink:href=\\\"#m5ad7c10a5b\\\" y=\\\"161.373706\\\"/>\\n\",\n       \"      </g>\\n\",\n       \"     </g>\\n\",\n       \"     <g id=\\\"text_12\\\">\\n\",\n       \"      <!-- 0.75 -->\\n\",\n       \"      <defs>\\n\",\n       \"       <path d=\\\"M 8.203125 72.90625 \\n\",\n       \"L 55.078125 72.90625 \\n\",\n       \"L 55.078125 68.703125 \\n\",\n       \"L 28.609375 0 \\n\",\n       \"L 18.3125 0 \\n\",\n       \"L 43.21875 64.59375 \\n\",\n       \"L 8.203125 64.59375 \\n\",\n       \"z\\n\",\n       \"\\\" id=\\\"DejaVuSans-55\\\"/>\\n\",\n       \"      </defs>\\n\",\n       \"      <g transform=\\\"translate(20.878125 165.172925)scale(0.1 -0.1)\\\">\\n\",\n       \"       <use xlink:href=\\\"#DejaVuSans-48\\\"/>\\n\",\n       \"       <use x=\\\"63.623047\\\" xlink:href=\\\"#DejaVuSans-46\\\"/>\\n\",\n       \"       <use x=\\\"95.410156\\\" xlink:href=\\\"#DejaVuSans-55\\\"/>\\n\",\n       \"       <use x=\\\"159.033203\\\" xlink:href=\\\"#DejaVuSans-53\\\"/>\\n\",\n       \"      </g>\\n\",\n       \"     </g>\\n\",\n       \"    </g>\\n\",\n       \"    <g id=\\\"ytick_5\\\">\\n\",\n       \"     <g id=\\\"line2d_12\\\">\\n\",\n       \"      <g>\\n\",\n       \"       <use style=\\\"stroke:#000000;stroke-width:0.8;\\\" x=\\\"50.14375\\\" xlink:href=\\\"#m5ad7c10a5b\\\" y=\\\"133.991295\\\"/>\\n\",\n       \"      </g>\\n\",\n       \"     </g>\\n\",\n       \"     <g id=\\\"text_13\\\">\\n\",\n       \"      <!-- 1.00 -->\\n\",\n       \"      <g transform=\\\"translate(20.878125 137.790513)scale(0.1 -0.1)\\\">\\n\",\n       \"       <use xlink:href=\\\"#DejaVuSans-49\\\"/>\\n\",\n       \"       <use x=\\\"63.623047\\\" xlink:href=\\\"#DejaVuSans-46\\\"/>\\n\",\n       \"       <use x=\\\"95.410156\\\" xlink:href=\\\"#DejaVuSans-48\\\"/>\\n\",\n       \"       <use x=\\\"159.033203\\\" xlink:href=\\\"#DejaVuSans-48\\\"/>\\n\",\n       \"      </g>\\n\",\n       \"     </g>\\n\",\n       \"    </g>\\n\",\n       \"    <g id=\\\"ytick_6\\\">\\n\",\n       \"     <g id=\\\"line2d_13\\\">\\n\",\n       \"      <g>\\n\",\n       \"       <use style=\\\"stroke:#000000;stroke-width:0.8;\\\" x=\\\"50.14375\\\" xlink:href=\\\"#m5ad7c10a5b\\\" y=\\\"106.608883\\\"/>\\n\",\n       \"      </g>\\n\",\n       \"     </g>\\n\",\n       \"     <g id=\\\"text_14\\\">\\n\",\n       \"      <!-- 1.25 -->\\n\",\n       \"      <g transform=\\\"translate(20.878125 110.408102)scale(0.1 -0.1)\\\">\\n\",\n       \"       <use xlink:href=\\\"#DejaVuSans-49\\\"/>\\n\",\n       \"       <use x=\\\"63.623047\\\" xlink:href=\\\"#DejaVuSans-46\\\"/>\\n\",\n       \"       <use x=\\\"95.410156\\\" xlink:href=\\\"#DejaVuSans-50\\\"/>\\n\",\n       \"       <use x=\\\"159.033203\\\" xlink:href=\\\"#DejaVuSans-53\\\"/>\\n\",\n       \"      </g>\\n\",\n       \"     </g>\\n\",\n       \"    </g>\\n\",\n       \"    <g id=\\\"ytick_7\\\">\\n\",\n       \"     <g id=\\\"line2d_14\\\">\\n\",\n       \"      <g>\\n\",\n       \"       <use style=\\\"stroke:#000000;stroke-width:0.8;\\\" x=\\\"50.14375\\\" xlink:href=\\\"#m5ad7c10a5b\\\" y=\\\"79.226471\\\"/>\\n\",\n       \"      </g>\\n\",\n       \"     </g>\\n\",\n       \"     <g id=\\\"text_15\\\">\\n\",\n       \"      <!-- 1.50 -->\\n\",\n       \"      <g transform=\\\"translate(20.878125 83.02569)scale(0.1 -0.1)\\\">\\n\",\n       \"       <use xlink:href=\\\"#DejaVuSans-49\\\"/>\\n\",\n       \"       <use x=\\\"63.623047\\\" xlink:href=\\\"#DejaVuSans-46\\\"/>\\n\",\n       \"       <use x=\\\"95.410156\\\" xlink:href=\\\"#DejaVuSans-53\\\"/>\\n\",\n       \"       <use x=\\\"159.033203\\\" xlink:href=\\\"#DejaVuSans-48\\\"/>\\n\",\n       \"      </g>\\n\",\n       \"     </g>\\n\",\n       \"    </g>\\n\",\n       \"    <g id=\\\"ytick_8\\\">\\n\",\n       \"     <g id=\\\"line2d_15\\\">\\n\",\n       \"      <g>\\n\",\n       \"       <use style=\\\"stroke:#000000;stroke-width:0.8;\\\" x=\\\"50.14375\\\" xlink:href=\\\"#m5ad7c10a5b\\\" y=\\\"51.84406\\\"/>\\n\",\n       \"      </g>\\n\",\n       \"     </g>\\n\",\n       \"     <g id=\\\"text_16\\\">\\n\",\n       \"      <!-- 1.75 -->\\n\",\n       \"      <g transform=\\\"translate(20.878125 55.643278)scale(0.1 -0.1)\\\">\\n\",\n       \"       <use xlink:href=\\\"#DejaVuSans-49\\\"/>\\n\",\n       \"       <use x=\\\"63.623047\\\" xlink:href=\\\"#DejaVuSans-46\\\"/>\\n\",\n       \"       <use x=\\\"95.410156\\\" xlink:href=\\\"#DejaVuSans-55\\\"/>\\n\",\n       \"       <use x=\\\"159.033203\\\" xlink:href=\\\"#DejaVuSans-53\\\"/>\\n\",\n       \"      </g>\\n\",\n       \"     </g>\\n\",\n       \"    </g>\\n\",\n       \"    <g id=\\\"text_17\\\">\\n\",\n       \"     <!-- Z [m] -->\\n\",\n       \"     <defs>\\n\",\n       \"      <path d=\\\"M 5.609375 72.90625 \\n\",\n       \"L 62.890625 72.90625 \\n\",\n       \"L 62.890625 65.375 \\n\",\n       \"L 16.796875 8.296875 \\n\",\n       \"L 64.015625 8.296875 \\n\",\n       \"L 64.015625 0 \\n\",\n       \"L 4.5 0 \\n\",\n       \"L 4.5 7.515625 \\n\",\n       \"L 50.59375 64.59375 \\n\",\n       \"L 5.609375 64.59375 \\n\",\n       \"z\\n\",\n       \"\\\" id=\\\"DejaVuSans-90\\\"/>\\n\",\n       \"     </defs>\\n\",\n       \"     <g transform=\\\"translate(14.798438 158.505937)rotate(-90)scale(0.1 -0.1)\\\">\\n\",\n       \"      <use xlink:href=\\\"#DejaVuSans-90\\\"/>\\n\",\n       \"      <use x=\\\"68.505859\\\" xlink:href=\\\"#DejaVuSans-32\\\"/>\\n\",\n       \"      <use x=\\\"100.292969\\\" xlink:href=\\\"#DejaVuSans-91\\\"/>\\n\",\n       \"      <use x=\\\"139.306641\\\" xlink:href=\\\"#DejaVuSans-109\\\"/>\\n\",\n       \"      <use x=\\\"236.71875\\\" xlink:href=\\\"#DejaVuSans-93\\\"/>\\n\",\n       \"     </g>\\n\",\n       \"    </g>\\n\",\n       \"   </g>\\n\",\n       \"   <g id=\\\"line2d_16\\\">\\n\",\n       \"    <path clip-path=\\\"url(#p1ce600a667)\\\" d=\\\"M 67.898295 243.520941 \\n\",\n       \"L 75.277894 243.468601 \\n\",\n       \"L 75.869377 243.211142 \\n\",\n       \"L 76.462074 242.593062 \\n\",\n       \"L 77.056423 241.382777 \\n\",\n       \"L 77.652865 239.324306 \\n\",\n       \"L 78.251739 236.168969 \\n\",\n       \"L 78.853163 231.709093 \\n\",\n       \"L 79.456995 225.80872 \\n\",\n       \"L 80.366159 214.179524 \\n\",\n       \"L 81.276885 199.526606 \\n\",\n       \"L 82.79001 170.908863 \\n\",\n       \"L 84.883147 131.343315 \\n\",\n       \"L 86.062454 112.791487 \\n\",\n       \"L 87.22906 97.801432 \\n\",\n       \"L 88.382992 85.676856 \\n\",\n       \"L 89.807992 73.249619 \\n\",\n       \"L 91.214345 62.949606 \\n\",\n       \"L 92.327534 56.106454 \\n\",\n       \"L 93.434172 50.755004 \\n\",\n       \"L 94.263382 47.949612 \\n\",\n       \"L 94.817245 46.729108 \\n\",\n       \"L 95.372638 46.045649 \\n\",\n       \"L 95.651019 45.901565 \\n\",\n       \"L 95.929885 45.883636 \\n\",\n       \"L 96.489066 46.198637 \\n\",\n       \"L 97.05002 46.918969 \\n\",\n       \"L 97.893933 48.554265 \\n\",\n       \"L 101.837301 57.307133 \\n\",\n       \"L 106.656963 65.869491 \\n\",\n       \"L 129.814553 104.306172 \\n\",\n       \"L 134.835846 111.967286 \\n\",\n       \"L 139.293316 118.367286 \\n\",\n       \"L 143.475193 123.98636 \\n\",\n       \"L 147.375815 128.85368 \\n\",\n       \"L 150.990291 133.020385 \\n\",\n       \"L 154.617107 136.850873 \\n\",\n       \"L 157.951643 140.051047 \\n\",\n       \"L 161.294838 142.940832 \\n\",\n       \"L 164.340894 145.290507 \\n\",\n       \"L 167.392724 147.369753 \\n\",\n       \"L 170.449651 149.174613 \\n\",\n       \"L 173.510988 150.70237 \\n\",\n       \"L 176.26939 151.839601 \\n\",\n       \"L 179.0303 152.751919 \\n\",\n       \"L 181.793214 153.440637 \\n\",\n       \"L 184.557633 153.908111 \\n\",\n       \"L 187.323062 154.157616 \\n\",\n       \"L 190.089014 154.193375 \\n\",\n       \"L 192.855013 154.020513 \\n\",\n       \"L 195.927833 153.591062 \\n\",\n       \"L 198.999513 152.92084 \\n\",\n       \"L 202.069455 152.020402 \\n\",\n       \"L 205.137086 150.901389 \\n\",\n       \"L 208.508159 149.433124 \\n\",\n       \"L 211.87509 147.733749 \\n\",\n       \"L 215.542631 145.638906 \\n\",\n       \"L 219.5085 143.11542 \\n\",\n       \"L 223.769977 140.141343 \\n\",\n       \"L 228.627052 136.473152 \\n\",\n       \"L 234.375037 131.835064 \\n\",\n       \"L 241.903172 125.450253 \\n\",\n       \"L 258.318542 111.442654 \\n\",\n       \"L 264.238471 106.727505 \\n\",\n       \"L 269.251007 102.999509 \\n\",\n       \"L 273.953413 99.773606 \\n\",\n       \"L 278.349446 97.030491 \\n\",\n       \"L 282.442429 94.737379 \\n\",\n       \"L 286.235233 92.8529 \\n\",\n       \"L 290.021288 91.213851 \\n\",\n       \"L 293.8014 89.826788 \\n\",\n       \"L 297.286176 88.773431 \\n\",\n       \"L 300.76726 87.939082 \\n\",\n       \"L 304.245325 87.322919 \\n\",\n       \"L 307.721043 86.922376 \\n\",\n       \"L 311.195079 86.733249 \\n\",\n       \"L 314.957482 86.760252 \\n\",\n       \"L 318.719492 87.019468 \\n\",\n       \"L 322.481893 87.49998 \\n\",\n       \"L 326.535001 88.250579 \\n\",\n       \"L 330.590307 89.225935 \\n\",\n       \"L 334.938641 90.498791 \\n\",\n       \"L 339.581706 92.088689 \\n\",\n       \"L 344.812323 94.124705 \\n\",\n       \"L 350.634421 96.638543 \\n\",\n       \"L 357.637021 99.914128 \\n\",\n       \"L 368.470379 105.265426 \\n\",\n       \"L 381.710414 111.753342 \\n\",\n       \"L 389.09578 115.126185 \\n\",\n       \"L 395.61124 117.861061 \\n\",\n       \"L 401.546521 120.111047 \\n\",\n       \"L 407.194635 122.009557 \\n\",\n       \"L 412.553049 123.573362 \\n\",\n       \"L 417.619571 124.828218 \\n\",\n       \"L 422.690773 125.859973 \\n\",\n       \"L 422.989205 125.913627 \\n\",\n       \"L 422.989205 125.913627 \\n\",\n       \"\\\" style=\\\"fill:none;stroke:#1f77b4;stroke-linecap:square;stroke-width:1.5;\\\"/>\\n\",\n       \"   </g>\\n\",\n       \"   <g id=\\\"patch_3\\\">\\n\",\n       \"    <path d=\\\"M 50.14375 253.44 \\n\",\n       \"L 50.14375 36 \\n\",\n       \"\\\" style=\\\"fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;stroke-width:0.8;\\\"/>\\n\",\n       \"   </g>\\n\",\n       \"   <g id=\\\"patch_4\\\">\\n\",\n       \"    <path d=\\\"M 440.74375 253.44 \\n\",\n       \"L 440.74375 36 \\n\",\n       \"\\\" style=\\\"fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;stroke-width:0.8;\\\"/>\\n\",\n       \"   </g>\\n\",\n       \"   <g id=\\\"patch_5\\\">\\n\",\n       \"    <path d=\\\"M 50.14375 253.44 \\n\",\n       \"L 440.74375 253.44 \\n\",\n       \"\\\" style=\\\"fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;stroke-width:0.8;\\\"/>\\n\",\n       \"   </g>\\n\",\n       \"   <g id=\\\"patch_6\\\">\\n\",\n       \"    <path d=\\\"M 50.14375 36 \\n\",\n       \"L 440.74375 36 \\n\",\n       \"\\\" style=\\\"fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;stroke-width:0.8;\\\"/>\\n\",\n       \"   </g>\\n\",\n       \"  </g>\\n\",\n       \"  <g id=\\\"text_18\\\">\\n\",\n       \"   <!-- Longitudinal trajectory of the T-Tail model in a 20% 1-cos gust encounter -->\\n\",\n       \"   <defs>\\n\",\n       \"    <path d=\\\"M 9.8125 72.90625 \\n\",\n       \"L 19.671875 72.90625 \\n\",\n       \"L 19.671875 8.296875 \\n\",\n       \"L 55.171875 8.296875 \\n\",\n       \"L 55.171875 0 \\n\",\n       \"L 9.8125 0 \\n\",\n       \"z\\n\",\n       \"\\\" id=\\\"DejaVuSans-76\\\"/>\\n\",\n       \"    <path d=\\\"M 30.609375 48.390625 \\n\",\n       \"Q 23.390625 48.390625 19.1875 42.75 \\n\",\n       \"Q 14.984375 37.109375 14.984375 27.296875 \\n\",\n       \"Q 14.984375 17.484375 19.15625 11.84375 \\n\",\n       \"Q 23.34375 6.203125 30.609375 6.203125 \\n\",\n       \"Q 37.796875 6.203125 41.984375 11.859375 \\n\",\n       \"Q 46.1875 17.53125 46.1875 27.296875 \\n\",\n       \"Q 46.1875 37.015625 41.984375 42.703125 \\n\",\n       \"Q 37.796875 48.390625 30.609375 48.390625 \\n\",\n       \"z\\n\",\n       \"M 30.609375 56 \\n\",\n       \"Q 42.328125 56 49.015625 48.375 \\n\",\n       \"Q 55.71875 40.765625 55.71875 27.296875 \\n\",\n       \"Q 55.71875 13.875 49.015625 6.21875 \\n\",\n       \"Q 42.328125 -1.421875 30.609375 -1.421875 \\n\",\n       \"Q 18.84375 -1.421875 12.171875 6.21875 \\n\",\n       \"Q 5.515625 13.875 5.515625 27.296875 \\n\",\n       \"Q 5.515625 40.765625 12.171875 48.375 \\n\",\n       \"Q 18.84375 56 30.609375 56 \\n\",\n       \"z\\n\",\n       \"\\\" id=\\\"DejaVuSans-111\\\"/>\\n\",\n       \"    <path d=\\\"M 54.890625 33.015625 \\n\",\n       \"L 54.890625 0 \\n\",\n       \"L 45.90625 0 \\n\",\n       \"L 45.90625 32.71875 \\n\",\n       \"Q 45.90625 40.484375 42.875 44.328125 \\n\",\n       \"Q 39.84375 48.1875 33.796875 48.1875 \\n\",\n       \"Q 26.515625 48.1875 22.3125 43.546875 \\n\",\n       \"Q 18.109375 38.921875 18.109375 30.90625 \\n\",\n       \"L 18.109375 0 \\n\",\n       \"L 9.078125 0 \\n\",\n       \"L 9.078125 54.6875 \\n\",\n       \"L 18.109375 54.6875 \\n\",\n       \"L 18.109375 46.1875 \\n\",\n       \"Q 21.34375 51.125 25.703125 53.5625 \\n\",\n       \"Q 30.078125 56 35.796875 56 \\n\",\n       \"Q 45.21875 56 50.046875 50.171875 \\n\",\n       \"Q 54.890625 44.34375 54.890625 33.015625 \\n\",\n       \"z\\n\",\n       \"\\\" id=\\\"DejaVuSans-110\\\"/>\\n\",\n       \"    <path d=\\\"M 45.40625 27.984375 \\n\",\n       \"Q 45.40625 37.75 41.375 43.109375 \\n\",\n       \"Q 37.359375 48.484375 30.078125 48.484375 \\n\",\n       \"Q 22.859375 48.484375 18.828125 43.109375 \\n\",\n       \"Q 14.796875 37.75 14.796875 27.984375 \\n\",\n       \"Q 14.796875 18.265625 18.828125 12.890625 \\n\",\n       \"Q 22.859375 7.515625 30.078125 7.515625 \\n\",\n       \"Q 37.359375 7.515625 41.375 12.890625 \\n\",\n       \"Q 45.40625 18.265625 45.40625 27.984375 \\n\",\n       \"z\\n\",\n       \"M 54.390625 6.78125 \\n\",\n       \"Q 54.390625 -7.171875 48.1875 -13.984375 \\n\",\n       \"Q 42 -20.796875 29.203125 -20.796875 \\n\",\n       \"Q 24.46875 -20.796875 20.265625 -20.09375 \\n\",\n       \"Q 16.0625 -19.390625 12.109375 -17.921875 \\n\",\n       \"L 12.109375 -9.1875 \\n\",\n       \"Q 16.0625 -11.328125 19.921875 -12.34375 \\n\",\n       \"Q 23.78125 -13.375 27.78125 -13.375 \\n\",\n       \"Q 36.625 -13.375 41.015625 -8.765625 \\n\",\n       \"Q 45.40625 -4.15625 45.40625 5.171875 \\n\",\n       \"L 45.40625 9.625 \\n\",\n       \"Q 42.625 4.78125 38.28125 2.390625 \\n\",\n       \"Q 33.9375 0 27.875 0 \\n\",\n       \"Q 17.828125 0 11.671875 7.65625 \\n\",\n       \"Q 5.515625 15.328125 5.515625 27.984375 \\n\",\n       \"Q 5.515625 40.671875 11.671875 48.328125 \\n\",\n       \"Q 17.828125 56 27.875 56 \\n\",\n       \"Q 33.9375 56 38.28125 53.609375 \\n\",\n       \"Q 42.625 51.21875 45.40625 46.390625 \\n\",\n       \"L 45.40625 54.6875 \\n\",\n       \"L 54.390625 54.6875 \\n\",\n       \"z\\n\",\n       \"\\\" id=\\\"DejaVuSans-103\\\"/>\\n\",\n       \"    <path d=\\\"M 9.421875 54.6875 \\n\",\n       \"L 18.40625 54.6875 \\n\",\n       \"L 18.40625 0 \\n\",\n       \"L 9.421875 0 \\n\",\n       \"z\\n\",\n       \"M 9.421875 75.984375 \\n\",\n       \"L 18.40625 75.984375 \\n\",\n       \"L 18.40625 64.59375 \\n\",\n       \"L 9.421875 64.59375 \\n\",\n       \"z\\n\",\n       \"\\\" id=\\\"DejaVuSans-105\\\"/>\\n\",\n       \"    <path d=\\\"M 18.3125 70.21875 \\n\",\n       \"L 18.3125 54.6875 \\n\",\n       \"L 36.8125 54.6875 \\n\",\n       \"L 36.8125 47.703125 \\n\",\n       \"L 18.3125 47.703125 \\n\",\n       \"L 18.3125 18.015625 \\n\",\n       \"Q 18.3125 11.328125 20.140625 9.421875 \\n\",\n       \"Q 21.96875 7.515625 27.59375 7.515625 \\n\",\n       \"L 36.8125 7.515625 \\n\",\n       \"L 36.8125 0 \\n\",\n       \"L 27.59375 0 \\n\",\n       \"Q 17.1875 0 13.234375 3.875 \\n\",\n       \"Q 9.28125 7.765625 9.28125 18.015625 \\n\",\n       \"L 9.28125 47.703125 \\n\",\n       \"L 2.6875 47.703125 \\n\",\n       \"L 2.6875 54.6875 \\n\",\n       \"L 9.28125 54.6875 \\n\",\n       \"L 9.28125 70.21875 \\n\",\n       \"z\\n\",\n       \"\\\" id=\\\"DejaVuSans-116\\\"/>\\n\",\n       \"    <path d=\\\"M 8.5 21.578125 \\n\",\n       \"L 8.5 54.6875 \\n\",\n       \"L 17.484375 54.6875 \\n\",\n       \"L 17.484375 21.921875 \\n\",\n       \"Q 17.484375 14.15625 20.5 10.265625 \\n\",\n       \"Q 23.53125 6.390625 29.59375 6.390625 \\n\",\n       \"Q 36.859375 6.390625 41.078125 11.03125 \\n\",\n       \"Q 45.3125 15.671875 45.3125 23.6875 \\n\",\n       \"L 45.3125 54.6875 \\n\",\n       \"L 54.296875 54.6875 \\n\",\n       \"L 54.296875 0 \\n\",\n       \"L 45.3125 0 \\n\",\n       \"L 45.3125 8.40625 \\n\",\n       \"Q 42.046875 3.421875 37.71875 1 \\n\",\n       \"Q 33.40625 -1.421875 27.6875 -1.421875 \\n\",\n       \"Q 18.265625 -1.421875 13.375 4.4375 \\n\",\n       \"Q 8.5 10.296875 8.5 21.578125 \\n\",\n       \"z\\n\",\n       \"M 31.109375 56 \\n\",\n       \"z\\n\",\n       \"\\\" id=\\\"DejaVuSans-117\\\"/>\\n\",\n       \"    <path d=\\\"M 45.40625 46.390625 \\n\",\n       \"L 45.40625 75.984375 \\n\",\n       \"L 54.390625 75.984375 \\n\",\n       \"L 54.390625 0 \\n\",\n       \"L 45.40625 0 \\n\",\n       \"L 45.40625 8.203125 \\n\",\n       \"Q 42.578125 3.328125 38.25 0.953125 \\n\",\n       \"Q 33.9375 -1.421875 27.875 -1.421875 \\n\",\n       \"Q 17.96875 -1.421875 11.734375 6.484375 \\n\",\n       \"Q 5.515625 14.40625 5.515625 27.296875 \\n\",\n       \"Q 5.515625 40.1875 11.734375 48.09375 \\n\",\n       \"Q 17.96875 56 27.875 56 \\n\",\n       \"Q 33.9375 56 38.25 53.625 \\n\",\n       \"Q 42.578125 51.265625 45.40625 46.390625 \\n\",\n       \"z\\n\",\n       \"M 14.796875 27.296875 \\n\",\n       \"Q 14.796875 17.390625 18.875 11.75 \\n\",\n       \"Q 22.953125 6.109375 30.078125 6.109375 \\n\",\n       \"Q 37.203125 6.109375 41.296875 11.75 \\n\",\n       \"Q 45.40625 17.390625 45.40625 27.296875 \\n\",\n       \"Q 45.40625 37.203125 41.296875 42.84375 \\n\",\n       \"Q 37.203125 48.484375 30.078125 48.484375 \\n\",\n       \"Q 22.953125 48.484375 18.875 42.84375 \\n\",\n       \"Q 14.796875 37.203125 14.796875 27.296875 \\n\",\n       \"z\\n\",\n       \"\\\" id=\\\"DejaVuSans-100\\\"/>\\n\",\n       \"    <path d=\\\"M 34.28125 27.484375 \\n\",\n       \"Q 23.390625 27.484375 19.1875 25 \\n\",\n       \"Q 14.984375 22.515625 14.984375 16.5 \\n\",\n       \"Q 14.984375 11.71875 18.140625 8.90625 \\n\",\n       \"Q 21.296875 6.109375 26.703125 6.109375 \\n\",\n       \"Q 34.1875 6.109375 38.703125 11.40625 \\n\",\n       \"Q 43.21875 16.703125 43.21875 25.484375 \\n\",\n       \"L 43.21875 27.484375 \\n\",\n       \"z\\n\",\n       \"M 52.203125 31.203125 \\n\",\n       \"L 52.203125 0 \\n\",\n       \"L 43.21875 0 \\n\",\n       \"L 43.21875 8.296875 \\n\",\n       \"Q 40.140625 3.328125 35.546875 0.953125 \\n\",\n       \"Q 30.953125 -1.421875 24.3125 -1.421875 \\n\",\n       \"Q 15.921875 -1.421875 10.953125 3.296875 \\n\",\n       \"Q 6 8.015625 6 15.921875 \\n\",\n       \"Q 6 25.140625 12.171875 29.828125 \\n\",\n       \"Q 18.359375 34.515625 30.609375 34.515625 \\n\",\n       \"L 43.21875 34.515625 \\n\",\n       \"L 43.21875 35.40625 \\n\",\n       \"Q 43.21875 41.609375 39.140625 45 \\n\",\n       \"Q 35.0625 48.390625 27.6875 48.390625 \\n\",\n       \"Q 23 48.390625 18.546875 47.265625 \\n\",\n       \"Q 14.109375 46.140625 10.015625 43.890625 \\n\",\n       \"L 10.015625 52.203125 \\n\",\n       \"Q 14.9375 54.109375 19.578125 55.046875 \\n\",\n       \"Q 24.21875 56 28.609375 56 \\n\",\n       \"Q 40.484375 56 46.34375 49.84375 \\n\",\n       \"Q 52.203125 43.703125 52.203125 31.203125 \\n\",\n       \"z\\n\",\n       \"\\\" id=\\\"DejaVuSans-97\\\"/>\\n\",\n       \"    <path d=\\\"M 9.421875 75.984375 \\n\",\n       \"L 18.40625 75.984375 \\n\",\n       \"L 18.40625 0 \\n\",\n       \"L 9.421875 0 \\n\",\n       \"z\\n\",\n       \"\\\" id=\\\"DejaVuSans-108\\\"/>\\n\",\n       \"    <path d=\\\"M 41.109375 46.296875 \\n\",\n       \"Q 39.59375 47.171875 37.8125 47.578125 \\n\",\n       \"Q 36.03125 48 33.890625 48 \\n\",\n       \"Q 26.265625 48 22.1875 43.046875 \\n\",\n       \"Q 18.109375 38.09375 18.109375 28.8125 \\n\",\n       \"L 18.109375 0 \\n\",\n       \"L 9.078125 0 \\n\",\n       \"L 9.078125 54.6875 \\n\",\n       \"L 18.109375 54.6875 \\n\",\n       \"L 18.109375 46.1875 \\n\",\n       \"Q 20.953125 51.171875 25.484375 53.578125 \\n\",\n       \"Q 30.03125 56 36.53125 56 \\n\",\n       \"Q 37.453125 56 38.578125 55.875 \\n\",\n       \"Q 39.703125 55.765625 41.0625 55.515625 \\n\",\n       \"z\\n\",\n       \"\\\" id=\\\"DejaVuSans-114\\\"/>\\n\",\n       \"    <path d=\\\"M 9.421875 54.6875 \\n\",\n       \"L 18.40625 54.6875 \\n\",\n       \"L 18.40625 -0.984375 \\n\",\n       \"Q 18.40625 -11.421875 14.421875 -16.109375 \\n\",\n       \"Q 10.453125 -20.796875 1.609375 -20.796875 \\n\",\n       \"L -1.8125 -20.796875 \\n\",\n       \"L -1.8125 -13.1875 \\n\",\n       \"L 0.59375 -13.1875 \\n\",\n       \"Q 5.71875 -13.1875 7.5625 -10.8125 \\n\",\n       \"Q 9.421875 -8.453125 9.421875 -0.984375 \\n\",\n       \"z\\n\",\n       \"M 9.421875 75.984375 \\n\",\n       \"L 18.40625 75.984375 \\n\",\n       \"L 18.40625 64.59375 \\n\",\n       \"L 9.421875 64.59375 \\n\",\n       \"z\\n\",\n       \"\\\" id=\\\"DejaVuSans-106\\\"/>\\n\",\n       \"    <path d=\\\"M 56.203125 29.59375 \\n\",\n       \"L 56.203125 25.203125 \\n\",\n       \"L 14.890625 25.203125 \\n\",\n       \"Q 15.484375 15.921875 20.484375 11.0625 \\n\",\n       \"Q 25.484375 6.203125 34.421875 6.203125 \\n\",\n       \"Q 39.59375 6.203125 44.453125 7.46875 \\n\",\n       \"Q 49.3125 8.734375 54.109375 11.28125 \\n\",\n       \"L 54.109375 2.78125 \\n\",\n       \"Q 49.265625 0.734375 44.1875 -0.34375 \\n\",\n       \"Q 39.109375 -1.421875 33.890625 -1.421875 \\n\",\n       \"Q 20.796875 -1.421875 13.15625 6.1875 \\n\",\n       \"Q 5.515625 13.8125 5.515625 26.8125 \\n\",\n       \"Q 5.515625 40.234375 12.765625 48.109375 \\n\",\n       \"Q 20.015625 56 32.328125 56 \\n\",\n       \"Q 43.359375 56 49.78125 48.890625 \\n\",\n       \"Q 56.203125 41.796875 56.203125 29.59375 \\n\",\n       \"z\\n\",\n       \"M 47.21875 32.234375 \\n\",\n       \"Q 47.125 39.59375 43.09375 43.984375 \\n\",\n       \"Q 39.0625 48.390625 32.421875 48.390625 \\n\",\n       \"Q 24.90625 48.390625 20.390625 44.140625 \\n\",\n       \"Q 15.875 39.890625 15.1875 32.171875 \\n\",\n       \"z\\n\",\n       \"\\\" id=\\\"DejaVuSans-101\\\"/>\\n\",\n       \"    <path d=\\\"M 48.78125 52.59375 \\n\",\n       \"L 48.78125 44.1875 \\n\",\n       \"Q 44.96875 46.296875 41.140625 47.34375 \\n\",\n       \"Q 37.3125 48.390625 33.40625 48.390625 \\n\",\n       \"Q 24.65625 48.390625 19.8125 42.84375 \\n\",\n       \"Q 14.984375 37.3125 14.984375 27.296875 \\n\",\n       \"Q 14.984375 17.28125 19.8125 11.734375 \\n\",\n       \"Q 24.65625 6.203125 33.40625 6.203125 \\n\",\n       \"Q 37.3125 6.203125 41.140625 7.25 \\n\",\n       \"Q 44.96875 8.296875 48.78125 10.40625 \\n\",\n       \"L 48.78125 2.09375 \\n\",\n       \"Q 45.015625 0.34375 40.984375 -0.53125 \\n\",\n       \"Q 36.96875 -1.421875 32.421875 -1.421875 \\n\",\n       \"Q 20.0625 -1.421875 12.78125 6.34375 \\n\",\n       \"Q 5.515625 14.109375 5.515625 27.296875 \\n\",\n       \"Q 5.515625 40.671875 12.859375 48.328125 \\n\",\n       \"Q 20.21875 56 33.015625 56 \\n\",\n       \"Q 37.15625 56 41.109375 55.140625 \\n\",\n       \"Q 45.0625 54.296875 48.78125 52.59375 \\n\",\n       \"z\\n\",\n       \"\\\" id=\\\"DejaVuSans-99\\\"/>\\n\",\n       \"    <path d=\\\"M 32.171875 -5.078125 \\n\",\n       \"Q 28.375 -14.84375 24.75 -17.8125 \\n\",\n       \"Q 21.140625 -20.796875 15.09375 -20.796875 \\n\",\n       \"L 7.90625 -20.796875 \\n\",\n       \"L 7.90625 -13.28125 \\n\",\n       \"L 13.1875 -13.28125 \\n\",\n       \"Q 16.890625 -13.28125 18.9375 -11.515625 \\n\",\n       \"Q 21 -9.765625 23.484375 -3.21875 \\n\",\n       \"L 25.09375 0.875 \\n\",\n       \"L 2.984375 54.6875 \\n\",\n       \"L 12.5 54.6875 \\n\",\n       \"L 29.59375 11.921875 \\n\",\n       \"L 46.6875 54.6875 \\n\",\n       \"L 56.203125 54.6875 \\n\",\n       \"z\\n\",\n       \"\\\" id=\\\"DejaVuSans-121\\\"/>\\n\",\n       \"    <path d=\\\"M 37.109375 75.984375 \\n\",\n       \"L 37.109375 68.5 \\n\",\n       \"L 28.515625 68.5 \\n\",\n       \"Q 23.6875 68.5 21.796875 66.546875 \\n\",\n       \"Q 19.921875 64.59375 19.921875 59.515625 \\n\",\n       \"L 19.921875 54.6875 \\n\",\n       \"L 34.71875 54.6875 \\n\",\n       \"L 34.71875 47.703125 \\n\",\n       \"L 19.921875 47.703125 \\n\",\n       \"L 19.921875 0 \\n\",\n       \"L 10.890625 0 \\n\",\n       \"L 10.890625 47.703125 \\n\",\n       \"L 2.296875 47.703125 \\n\",\n       \"L 2.296875 54.6875 \\n\",\n       \"L 10.890625 54.6875 \\n\",\n       \"L 10.890625 58.5 \\n\",\n       \"Q 10.890625 67.625 15.140625 71.796875 \\n\",\n       \"Q 19.390625 75.984375 28.609375 75.984375 \\n\",\n       \"z\\n\",\n       \"\\\" id=\\\"DejaVuSans-102\\\"/>\\n\",\n       \"    <path d=\\\"M 54.890625 33.015625 \\n\",\n       \"L 54.890625 0 \\n\",\n       \"L 45.90625 0 \\n\",\n       \"L 45.90625 32.71875 \\n\",\n       \"Q 45.90625 40.484375 42.875 44.328125 \\n\",\n       \"Q 39.84375 48.1875 33.796875 48.1875 \\n\",\n       \"Q 26.515625 48.1875 22.3125 43.546875 \\n\",\n       \"Q 18.109375 38.921875 18.109375 30.90625 \\n\",\n       \"L 18.109375 0 \\n\",\n       \"L 9.078125 0 \\n\",\n       \"L 9.078125 75.984375 \\n\",\n       \"L 18.109375 75.984375 \\n\",\n       \"L 18.109375 46.1875 \\n\",\n       \"Q 21.34375 51.125 25.703125 53.5625 \\n\",\n       \"Q 30.078125 56 35.796875 56 \\n\",\n       \"Q 45.21875 56 50.046875 50.171875 \\n\",\n       \"Q 54.890625 44.34375 54.890625 33.015625 \\n\",\n       \"z\\n\",\n       \"\\\" id=\\\"DejaVuSans-104\\\"/>\\n\",\n       \"    <path d=\\\"M -0.296875 72.90625 \\n\",\n       \"L 61.375 72.90625 \\n\",\n       \"L 61.375 64.59375 \\n\",\n       \"L 35.5 64.59375 \\n\",\n       \"L 35.5 0 \\n\",\n       \"L 25.59375 0 \\n\",\n       \"L 25.59375 64.59375 \\n\",\n       \"L -0.296875 64.59375 \\n\",\n       \"z\\n\",\n       \"\\\" id=\\\"DejaVuSans-84\\\"/>\\n\",\n       \"    <path d=\\\"M 4.890625 31.390625 \\n\",\n       \"L 31.203125 31.390625 \\n\",\n       \"L 31.203125 23.390625 \\n\",\n       \"L 4.890625 23.390625 \\n\",\n       \"z\\n\",\n       \"\\\" id=\\\"DejaVuSans-45\\\"/>\\n\",\n       \"    <path d=\\\"M 72.703125 32.078125 \\n\",\n       \"Q 68.453125 32.078125 66.03125 28.46875 \\n\",\n       \"Q 63.625 24.859375 63.625 18.40625 \\n\",\n       \"Q 63.625 12.0625 66.03125 8.421875 \\n\",\n       \"Q 68.453125 4.78125 72.703125 4.78125 \\n\",\n       \"Q 76.859375 4.78125 79.265625 8.421875 \\n\",\n       \"Q 81.6875 12.0625 81.6875 18.40625 \\n\",\n       \"Q 81.6875 24.8125 79.265625 28.4375 \\n\",\n       \"Q 76.859375 32.078125 72.703125 32.078125 \\n\",\n       \"z\\n\",\n       \"M 72.703125 38.28125 \\n\",\n       \"Q 80.421875 38.28125 84.953125 32.90625 \\n\",\n       \"Q 89.5 27.546875 89.5 18.40625 \\n\",\n       \"Q 89.5 9.28125 84.9375 3.921875 \\n\",\n       \"Q 80.375 -1.421875 72.703125 -1.421875 \\n\",\n       \"Q 64.890625 -1.421875 60.34375 3.921875 \\n\",\n       \"Q 55.8125 9.28125 55.8125 18.40625 \\n\",\n       \"Q 55.8125 27.59375 60.375 32.9375 \\n\",\n       \"Q 64.9375 38.28125 72.703125 38.28125 \\n\",\n       \"z\\n\",\n       \"M 22.3125 68.015625 \\n\",\n       \"Q 18.109375 68.015625 15.6875 64.375 \\n\",\n       \"Q 13.28125 60.75 13.28125 54.390625 \\n\",\n       \"Q 13.28125 47.953125 15.671875 44.328125 \\n\",\n       \"Q 18.0625 40.71875 22.3125 40.71875 \\n\",\n       \"Q 26.5625 40.71875 28.96875 44.328125 \\n\",\n       \"Q 31.390625 47.953125 31.390625 54.390625 \\n\",\n       \"Q 31.390625 60.6875 28.953125 64.34375 \\n\",\n       \"Q 26.515625 68.015625 22.3125 68.015625 \\n\",\n       \"z\\n\",\n       \"M 66.40625 74.21875 \\n\",\n       \"L 74.21875 74.21875 \\n\",\n       \"L 28.609375 -1.421875 \\n\",\n       \"L 20.796875 -1.421875 \\n\",\n       \"z\\n\",\n       \"M 22.3125 74.21875 \\n\",\n       \"Q 30.03125 74.21875 34.609375 68.875 \\n\",\n       \"Q 39.203125 63.53125 39.203125 54.390625 \\n\",\n       \"Q 39.203125 45.171875 34.640625 39.84375 \\n\",\n       \"Q 30.078125 34.515625 22.3125 34.515625 \\n\",\n       \"Q 14.546875 34.515625 10.03125 39.859375 \\n\",\n       \"Q 5.515625 45.21875 5.515625 54.390625 \\n\",\n       \"Q 5.515625 63.484375 10.046875 68.84375 \\n\",\n       \"Q 14.59375 74.21875 22.3125 74.21875 \\n\",\n       \"z\\n\",\n       \"\\\" id=\\\"DejaVuSans-37\\\"/>\\n\",\n       \"    <path d=\\\"M 44.28125 53.078125 \\n\",\n       \"L 44.28125 44.578125 \\n\",\n       \"Q 40.484375 46.53125 36.375 47.5 \\n\",\n       \"Q 32.28125 48.484375 27.875 48.484375 \\n\",\n       \"Q 21.1875 48.484375 17.84375 46.4375 \\n\",\n       \"Q 14.5 44.390625 14.5 40.28125 \\n\",\n       \"Q 14.5 37.15625 16.890625 35.375 \\n\",\n       \"Q 19.28125 33.59375 26.515625 31.984375 \\n\",\n       \"L 29.59375 31.296875 \\n\",\n       \"Q 39.15625 29.25 43.1875 25.515625 \\n\",\n       \"Q 47.21875 21.78125 47.21875 15.09375 \\n\",\n       \"Q 47.21875 7.46875 41.1875 3.015625 \\n\",\n       \"Q 35.15625 -1.421875 24.609375 -1.421875 \\n\",\n       \"Q 20.21875 -1.421875 15.453125 -0.5625 \\n\",\n       \"Q 10.6875 0.296875 5.421875 2 \\n\",\n       \"L 5.421875 11.28125 \\n\",\n       \"Q 10.40625 8.6875 15.234375 7.390625 \\n\",\n       \"Q 20.0625 6.109375 24.8125 6.109375 \\n\",\n       \"Q 31.15625 6.109375 34.5625 8.28125 \\n\",\n       \"Q 37.984375 10.453125 37.984375 14.40625 \\n\",\n       \"Q 37.984375 18.0625 35.515625 20.015625 \\n\",\n       \"Q 33.0625 21.96875 24.703125 23.78125 \\n\",\n       \"L 21.578125 24.515625 \\n\",\n       \"Q 13.234375 26.265625 9.515625 29.90625 \\n\",\n       \"Q 5.8125 33.546875 5.8125 39.890625 \\n\",\n       \"Q 5.8125 47.609375 11.28125 51.796875 \\n\",\n       \"Q 16.75 56 26.8125 56 \\n\",\n       \"Q 31.78125 56 36.171875 55.265625 \\n\",\n       \"Q 40.578125 54.546875 44.28125 53.078125 \\n\",\n       \"z\\n\",\n       \"\\\" id=\\\"DejaVuSans-115\\\"/>\\n\",\n       \"   </defs>\\n\",\n       \"   <g transform=\\\"translate(18.888438 16.318125)scale(0.12 -0.12)\\\">\\n\",\n       \"    <use xlink:href=\\\"#DejaVuSans-76\\\"/>\\n\",\n       \"    <use x=\\\"55.697266\\\" xlink:href=\\\"#DejaVuSans-111\\\"/>\\n\",\n       \"    <use x=\\\"116.878906\\\" xlink:href=\\\"#DejaVuSans-110\\\"/>\\n\",\n       \"    <use x=\\\"180.257812\\\" xlink:href=\\\"#DejaVuSans-103\\\"/>\\n\",\n       \"    <use x=\\\"243.734375\\\" xlink:href=\\\"#DejaVuSans-105\\\"/>\\n\",\n       \"    <use x=\\\"271.517578\\\" xlink:href=\\\"#DejaVuSans-116\\\"/>\\n\",\n       \"    <use x=\\\"310.726562\\\" xlink:href=\\\"#DejaVuSans-117\\\"/>\\n\",\n       \"    <use x=\\\"374.105469\\\" xlink:href=\\\"#DejaVuSans-100\\\"/>\\n\",\n       \"    <use x=\\\"437.582031\\\" xlink:href=\\\"#DejaVuSans-105\\\"/>\\n\",\n       \"    <use x=\\\"465.365234\\\" xlink:href=\\\"#DejaVuSans-110\\\"/>\\n\",\n       \"    <use x=\\\"528.744141\\\" xlink:href=\\\"#DejaVuSans-97\\\"/>\\n\",\n       \"    <use x=\\\"590.023438\\\" xlink:href=\\\"#DejaVuSans-108\\\"/>\\n\",\n       \"    <use x=\\\"617.806641\\\" xlink:href=\\\"#DejaVuSans-32\\\"/>\\n\",\n       \"    <use x=\\\"649.59375\\\" xlink:href=\\\"#DejaVuSans-116\\\"/>\\n\",\n       \"    <use x=\\\"688.802734\\\" xlink:href=\\\"#DejaVuSans-114\\\"/>\\n\",\n       \"    <use x=\\\"729.916016\\\" xlink:href=\\\"#DejaVuSans-97\\\"/>\\n\",\n       \"    <use x=\\\"791.195312\\\" xlink:href=\\\"#DejaVuSans-106\\\"/>\\n\",\n       \"    <use x=\\\"818.978516\\\" xlink:href=\\\"#DejaVuSans-101\\\"/>\\n\",\n       \"    <use x=\\\"880.501953\\\" xlink:href=\\\"#DejaVuSans-99\\\"/>\\n\",\n       \"    <use x=\\\"935.482422\\\" xlink:href=\\\"#DejaVuSans-116\\\"/>\\n\",\n       \"    <use x=\\\"974.691406\\\" xlink:href=\\\"#DejaVuSans-111\\\"/>\\n\",\n       \"    <use x=\\\"1035.873047\\\" xlink:href=\\\"#DejaVuSans-114\\\"/>\\n\",\n       \"    <use x=\\\"1076.986328\\\" xlink:href=\\\"#DejaVuSans-121\\\"/>\\n\",\n       \"    <use x=\\\"1136.166016\\\" xlink:href=\\\"#DejaVuSans-32\\\"/>\\n\",\n       \"    <use x=\\\"1167.953125\\\" xlink:href=\\\"#DejaVuSans-111\\\"/>\\n\",\n       \"    <use x=\\\"1229.134766\\\" xlink:href=\\\"#DejaVuSans-102\\\"/>\\n\",\n       \"    <use x=\\\"1264.339844\\\" xlink:href=\\\"#DejaVuSans-32\\\"/>\\n\",\n       \"    <use x=\\\"1296.126953\\\" xlink:href=\\\"#DejaVuSans-116\\\"/>\\n\",\n       \"    <use x=\\\"1335.335938\\\" xlink:href=\\\"#DejaVuSans-104\\\"/>\\n\",\n       \"    <use x=\\\"1398.714844\\\" xlink:href=\\\"#DejaVuSans-101\\\"/>\\n\",\n       \"    <use x=\\\"1460.238281\\\" xlink:href=\\\"#DejaVuSans-32\\\"/>\\n\",\n       \"    <use x=\\\"1492.025391\\\" xlink:href=\\\"#DejaVuSans-84\\\"/>\\n\",\n       \"    <use x=\\\"1552.96875\\\" xlink:href=\\\"#DejaVuSans-45\\\"/>\\n\",\n       \"    <use x=\\\"1588.912109\\\" xlink:href=\\\"#DejaVuSans-84\\\"/>\\n\",\n       \"    <use x=\\\"1649.746094\\\" xlink:href=\\\"#DejaVuSans-97\\\"/>\\n\",\n       \"    <use x=\\\"1711.025391\\\" xlink:href=\\\"#DejaVuSans-105\\\"/>\\n\",\n       \"    <use x=\\\"1738.808594\\\" xlink:href=\\\"#DejaVuSans-108\\\"/>\\n\",\n       \"    <use x=\\\"1766.591797\\\" xlink:href=\\\"#DejaVuSans-32\\\"/>\\n\",\n       \"    <use x=\\\"1798.378906\\\" xlink:href=\\\"#DejaVuSans-109\\\"/>\\n\",\n       \"    <use x=\\\"1895.791016\\\" xlink:href=\\\"#DejaVuSans-111\\\"/>\\n\",\n       \"    <use x=\\\"1956.972656\\\" xlink:href=\\\"#DejaVuSans-100\\\"/>\\n\",\n       \"    <use x=\\\"2020.449219\\\" xlink:href=\\\"#DejaVuSans-101\\\"/>\\n\",\n       \"    <use x=\\\"2081.972656\\\" xlink:href=\\\"#DejaVuSans-108\\\"/>\\n\",\n       \"    <use x=\\\"2109.755859\\\" xlink:href=\\\"#DejaVuSans-32\\\"/>\\n\",\n       \"    <use x=\\\"2141.542969\\\" xlink:href=\\\"#DejaVuSans-105\\\"/>\\n\",\n       \"    <use x=\\\"2169.326172\\\" xlink:href=\\\"#DejaVuSans-110\\\"/>\\n\",\n       \"    <use x=\\\"2232.705078\\\" xlink:href=\\\"#DejaVuSans-32\\\"/>\\n\",\n       \"    <use x=\\\"2264.492188\\\" xlink:href=\\\"#DejaVuSans-97\\\"/>\\n\",\n       \"    <use x=\\\"2325.771484\\\" xlink:href=\\\"#DejaVuSans-32\\\"/>\\n\",\n       \"    <use x=\\\"2357.558594\\\" xlink:href=\\\"#DejaVuSans-50\\\"/>\\n\",\n       \"    <use x=\\\"2421.181641\\\" xlink:href=\\\"#DejaVuSans-48\\\"/>\\n\",\n       \"    <use x=\\\"2484.804688\\\" xlink:href=\\\"#DejaVuSans-37\\\"/>\\n\",\n       \"    <use x=\\\"2579.824219\\\" xlink:href=\\\"#DejaVuSans-32\\\"/>\\n\",\n       \"    <use x=\\\"2611.611328\\\" xlink:href=\\\"#DejaVuSans-49\\\"/>\\n\",\n       \"    <use x=\\\"2675.234375\\\" xlink:href=\\\"#DejaVuSans-45\\\"/>\\n\",\n       \"    <use x=\\\"2711.318359\\\" xlink:href=\\\"#DejaVuSans-99\\\"/>\\n\",\n       \"    <use x=\\\"2766.298828\\\" xlink:href=\\\"#DejaVuSans-111\\\"/>\\n\",\n       \"    <use x=\\\"2827.480469\\\" xlink:href=\\\"#DejaVuSans-115\\\"/>\\n\",\n       \"    <use x=\\\"2879.580078\\\" xlink:href=\\\"#DejaVuSans-32\\\"/>\\n\",\n       \"    <use x=\\\"2911.367188\\\" xlink:href=\\\"#DejaVuSans-103\\\"/>\\n\",\n       \"    <use x=\\\"2974.84375\\\" xlink:href=\\\"#DejaVuSans-117\\\"/>\\n\",\n       \"    <use x=\\\"3038.222656\\\" xlink:href=\\\"#DejaVuSans-115\\\"/>\\n\",\n       \"    <use x=\\\"3090.322266\\\" xlink:href=\\\"#DejaVuSans-116\\\"/>\\n\",\n       \"    <use x=\\\"3129.53125\\\" xlink:href=\\\"#DejaVuSans-32\\\"/>\\n\",\n       \"    <use x=\\\"3161.318359\\\" xlink:href=\\\"#DejaVuSans-101\\\"/>\\n\",\n       \"    <use x=\\\"3222.841797\\\" xlink:href=\\\"#DejaVuSans-110\\\"/>\\n\",\n       \"    <use x=\\\"3286.220703\\\" xlink:href=\\\"#DejaVuSans-99\\\"/>\\n\",\n       \"    <use x=\\\"3341.201172\\\" xlink:href=\\\"#DejaVuSans-111\\\"/>\\n\",\n       \"    <use x=\\\"3402.382812\\\" xlink:href=\\\"#DejaVuSans-117\\\"/>\\n\",\n       \"    <use x=\\\"3465.761719\\\" xlink:href=\\\"#DejaVuSans-110\\\"/>\\n\",\n       \"    <use x=\\\"3529.140625\\\" xlink:href=\\\"#DejaVuSans-116\\\"/>\\n\",\n       \"    <use x=\\\"3568.349609\\\" xlink:href=\\\"#DejaVuSans-101\\\"/>\\n\",\n       \"    <use x=\\\"3629.873047\\\" xlink:href=\\\"#DejaVuSans-114\\\"/>\\n\",\n       \"   </g>\\n\",\n       \"  </g>\\n\",\n       \" </g>\\n\",\n       \" <defs>\\n\",\n       \"  <clipPath id=\\\"p1ce600a667\\\">\\n\",\n       \"   <rect height=\\\"217.44\\\" width=\\\"390.6\\\" x=\\\"50.14375\\\" y=\\\"36\\\"/>\\n\",\n       \"  </clipPath>\\n\",\n       \" </defs>\\n\",\n       \"</svg>\\n\"\n      ],\n      \"text/plain\": [\n       \"<Figure size 504x288 with 1 Axes>\"\n      ]\n     },\n     \"metadata\": {\n      \"needs_background\": \"light\"\n     },\n     \"output_type\": \"display_data\"\n    }\n   ],\n   \"source\": [\n    \"fig, ax = plt.subplots(1, 1, figsize=(7, 4))\\n\",\n    \"\\n\",\n    \"# extract information\\n\",\n    \"n_tsteps = len(case_data.structure.timestep_info)\\n\",\n    \"xz = np.zeros((n_tsteps, 2))\\n\",\n    \"for it in range(n_tsteps):\\n\",\n    \"    xz[it, 0] = -case_data.structure.timestep_info[it].for_pos[0] # the - is so that increasing time -> increasing x\\n\",\n    \"    xz[it, 1] = case_data.structure.timestep_info[it].for_pos[2]\\n\",\n    \"ax.plot(xz[:, 0], xz[:, 1])\\n\",\n    \"fig.suptitle('Longitudinal trajectory of the T-Tail model in a 20% 1-cos gust encounter')\\n\",\n    \"ax.set_xlabel('X [m]')\\n\",\n    \"ax.set_ylabel('Z [m]');\\n\",\n    \"plt.show()\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"*RBM velocities*\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 10,\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"data\": {\n      \"image/svg+xml\": [\n       \"<?xml version=\\\"1.0\\\" encoding=\\\"utf-8\\\" standalone=\\\"no\\\"?>\\n\",\n       \"<!DOCTYPE svg PUBLIC \\\"-//W3C//DTD SVG 1.1//EN\\\"\\n\",\n       \"  \\\"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\\\">\\n\",\n       \"<!-- Created with matplotlib (https://matplotlib.org/) -->\\n\",\n       \"<svg height=\\\"414.11625pt\\\" version=\\\"1.1\\\" viewBox=\\\"0 0 462.685937 414.11625\\\" width=\\\"462.685937pt\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\" xmlns:xlink=\\\"http://www.w3.org/1999/xlink\\\">\\n\",\n       \" <defs>\\n\",\n       \"  <style type=\\\"text/css\\\">\\n\",\n       \"*{stroke-linecap:butt;stroke-linejoin:round;}\\n\",\n       \"  </style>\\n\",\n       \" </defs>\\n\",\n       \" <g id=\\\"figure_1\\\">\\n\",\n       \"  <g id=\\\"patch_1\\\">\\n\",\n       \"   <path d=\\\"M 0 414.11625 \\n\",\n       \"L 462.685937 414.11625 \\n\",\n       \"L 462.685937 0 \\n\",\n       \"L 0 0 \\n\",\n       \"z\\n\",\n       \"\\\" style=\\\"fill:none;\\\"/>\\n\",\n       \"  </g>\\n\",\n       \"  <g id=\\\"axes_1\\\">\\n\",\n       \"   <g id=\\\"patch_2\\\">\\n\",\n       \"    <path d=\\\"M 64.885937 159.12 \\n\",\n       \"L 455.485938 159.12 \\n\",\n       \"L 455.485938 50.4 \\n\",\n       \"L 64.885937 50.4 \\n\",\n       \"z\\n\",\n       \"\\\" style=\\\"fill:#ffffff;\\\"/>\\n\",\n       \"   </g>\\n\",\n       \"   <g id=\\\"matplotlib.axis_1\\\">\\n\",\n       \"    <g id=\\\"xtick_1\\\">\\n\",\n       \"     <g id=\\\"line2d_1\\\">\\n\",\n       \"      <defs>\\n\",\n       \"       <path d=\\\"M 0 0 \\n\",\n       \"L 0 3.5 \\n\",\n       \"\\\" id=\\\"md45cc03867\\\" style=\\\"stroke:#000000;stroke-width:0.8;\\\"/>\\n\",\n       \"      </defs>\\n\",\n       \"      <g>\\n\",\n       \"       <use style=\\\"stroke:#000000;stroke-width:0.8;\\\" x=\\\"82.640483\\\" xlink:href=\\\"#md45cc03867\\\" y=\\\"159.12\\\"/>\\n\",\n       \"      </g>\\n\",\n       \"     </g>\\n\",\n       \"    </g>\\n\",\n       \"    <g id=\\\"xtick_2\\\">\\n\",\n       \"     <g id=\\\"line2d_2\\\">\\n\",\n       \"      <g>\\n\",\n       \"       <use style=\\\"stroke:#000000;stroke-width:0.8;\\\" x=\\\"141.773024\\\" xlink:href=\\\"#md45cc03867\\\" y=\\\"159.12\\\"/>\\n\",\n       \"      </g>\\n\",\n       \"     </g>\\n\",\n       \"    </g>\\n\",\n       \"    <g id=\\\"xtick_3\\\">\\n\",\n       \"     <g id=\\\"line2d_3\\\">\\n\",\n       \"      <g>\\n\",\n       \"       <use style=\\\"stroke:#000000;stroke-width:0.8;\\\" x=\\\"200.905565\\\" xlink:href=\\\"#md45cc03867\\\" y=\\\"159.12\\\"/>\\n\",\n       \"      </g>\\n\",\n       \"     </g>\\n\",\n       \"    </g>\\n\",\n       \"    <g id=\\\"xtick_4\\\">\\n\",\n       \"     <g id=\\\"line2d_4\\\">\\n\",\n       \"      <g>\\n\",\n       \"       <use style=\\\"stroke:#000000;stroke-width:0.8;\\\" x=\\\"260.038106\\\" xlink:href=\\\"#md45cc03867\\\" y=\\\"159.12\\\"/>\\n\",\n       \"      </g>\\n\",\n       \"     </g>\\n\",\n       \"    </g>\\n\",\n       \"    <g id=\\\"xtick_5\\\">\\n\",\n       \"     <g id=\\\"line2d_5\\\">\\n\",\n       \"      <g>\\n\",\n       \"       <use style=\\\"stroke:#000000;stroke-width:0.8;\\\" x=\\\"319.170647\\\" xlink:href=\\\"#md45cc03867\\\" y=\\\"159.12\\\"/>\\n\",\n       \"      </g>\\n\",\n       \"     </g>\\n\",\n       \"    </g>\\n\",\n       \"    <g id=\\\"xtick_6\\\">\\n\",\n       \"     <g id=\\\"line2d_6\\\">\\n\",\n       \"      <g>\\n\",\n       \"       <use style=\\\"stroke:#000000;stroke-width:0.8;\\\" x=\\\"378.303188\\\" xlink:href=\\\"#md45cc03867\\\" y=\\\"159.12\\\"/>\\n\",\n       \"      </g>\\n\",\n       \"     </g>\\n\",\n       \"    </g>\\n\",\n       \"    <g id=\\\"xtick_7\\\">\\n\",\n       \"     <g id=\\\"line2d_7\\\">\\n\",\n       \"      <g>\\n\",\n       \"       <use style=\\\"stroke:#000000;stroke-width:0.8;\\\" x=\\\"437.435729\\\" xlink:href=\\\"#md45cc03867\\\" y=\\\"159.12\\\"/>\\n\",\n       \"      </g>\\n\",\n       \"     </g>\\n\",\n       \"    </g>\\n\",\n       \"   </g>\\n\",\n       \"   <g id=\\\"matplotlib.axis_2\\\">\\n\",\n       \"    <g id=\\\"ytick_1\\\">\\n\",\n       \"     <g id=\\\"line2d_8\\\">\\n\",\n       \"      <defs>\\n\",\n       \"       <path d=\\\"M 0 0 \\n\",\n       \"L -3.5 0 \\n\",\n       \"\\\" id=\\\"mf5e7fea873\\\" style=\\\"stroke:#000000;stroke-width:0.8;\\\"/>\\n\",\n       \"      </defs>\\n\",\n       \"      <g>\\n\",\n       \"       <use style=\\\"stroke:#000000;stroke-width:0.8;\\\" x=\\\"64.885937\\\" xlink:href=\\\"#mf5e7fea873\\\" y=\\\"137.218168\\\"/>\\n\",\n       \"      </g>\\n\",\n       \"     </g>\\n\",\n       \"     <g id=\\\"text_1\\\">\\n\",\n       \"      <!-- −10.25 -->\\n\",\n       \"      <defs>\\n\",\n       \"       <path d=\\\"M 10.59375 35.5 \\n\",\n       \"L 73.1875 35.5 \\n\",\n       \"L 73.1875 27.203125 \\n\",\n       \"L 10.59375 27.203125 \\n\",\n       \"z\\n\",\n       \"\\\" id=\\\"DejaVuSans-8722\\\"/>\\n\",\n       \"       <path d=\\\"M 12.40625 8.296875 \\n\",\n       \"L 28.515625 8.296875 \\n\",\n       \"L 28.515625 63.921875 \\n\",\n       \"L 10.984375 60.40625 \\n\",\n       \"L 10.984375 69.390625 \\n\",\n       \"L 28.421875 72.90625 \\n\",\n       \"L 38.28125 72.90625 \\n\",\n       \"L 38.28125 8.296875 \\n\",\n       \"L 54.390625 8.296875 \\n\",\n       \"L 54.390625 0 \\n\",\n       \"L 12.40625 0 \\n\",\n       \"z\\n\",\n       \"\\\" id=\\\"DejaVuSans-49\\\"/>\\n\",\n       \"       <path d=\\\"M 31.78125 66.40625 \\n\",\n       \"Q 24.171875 66.40625 20.328125 58.90625 \\n\",\n       \"Q 16.5 51.421875 16.5 36.375 \\n\",\n       \"Q 16.5 21.390625 20.328125 13.890625 \\n\",\n       \"Q 24.171875 6.390625 31.78125 6.390625 \\n\",\n       \"Q 39.453125 6.390625 43.28125 13.890625 \\n\",\n       \"Q 47.125 21.390625 47.125 36.375 \\n\",\n       \"Q 47.125 51.421875 43.28125 58.90625 \\n\",\n       \"Q 39.453125 66.40625 31.78125 66.40625 \\n\",\n       \"z\\n\",\n       \"M 31.78125 74.21875 \\n\",\n       \"Q 44.046875 74.21875 50.515625 64.515625 \\n\",\n       \"Q 56.984375 54.828125 56.984375 36.375 \\n\",\n       \"Q 56.984375 17.96875 50.515625 8.265625 \\n\",\n       \"Q 44.046875 -1.421875 31.78125 -1.421875 \\n\",\n       \"Q 19.53125 -1.421875 13.0625 8.265625 \\n\",\n       \"Q 6.59375 17.96875 6.59375 36.375 \\n\",\n       \"Q 6.59375 54.828125 13.0625 64.515625 \\n\",\n       \"Q 19.53125 74.21875 31.78125 74.21875 \\n\",\n       \"z\\n\",\n       \"\\\" id=\\\"DejaVuSans-48\\\"/>\\n\",\n       \"       <path d=\\\"M 10.6875 12.40625 \\n\",\n       \"L 21 12.40625 \\n\",\n       \"L 21 0 \\n\",\n       \"L 10.6875 0 \\n\",\n       \"z\\n\",\n       \"\\\" id=\\\"DejaVuSans-46\\\"/>\\n\",\n       \"       <path d=\\\"M 19.1875 8.296875 \\n\",\n       \"L 53.609375 8.296875 \\n\",\n       \"L 53.609375 0 \\n\",\n       \"L 7.328125 0 \\n\",\n       \"L 7.328125 8.296875 \\n\",\n       \"Q 12.9375 14.109375 22.625 23.890625 \\n\",\n       \"Q 32.328125 33.6875 34.8125 36.53125 \\n\",\n       \"Q 39.546875 41.84375 41.421875 45.53125 \\n\",\n       \"Q 43.3125 49.21875 43.3125 52.78125 \\n\",\n       \"Q 43.3125 58.59375 39.234375 62.25 \\n\",\n       \"Q 35.15625 65.921875 28.609375 65.921875 \\n\",\n       \"Q 23.96875 65.921875 18.8125 64.3125 \\n\",\n       \"Q 13.671875 62.703125 7.8125 59.421875 \\n\",\n       \"L 7.8125 69.390625 \\n\",\n       \"Q 13.765625 71.78125 18.9375 73 \\n\",\n       \"Q 24.125 74.21875 28.421875 74.21875 \\n\",\n       \"Q 39.75 74.21875 46.484375 68.546875 \\n\",\n       \"Q 53.21875 62.890625 53.21875 53.421875 \\n\",\n       \"Q 53.21875 48.921875 51.53125 44.890625 \\n\",\n       \"Q 49.859375 40.875 45.40625 35.40625 \\n\",\n       \"Q 44.1875 33.984375 37.640625 27.21875 \\n\",\n       \"Q 31.109375 20.453125 19.1875 8.296875 \\n\",\n       \"z\\n\",\n       \"\\\" id=\\\"DejaVuSans-50\\\"/>\\n\",\n       \"       <path d=\\\"M 10.796875 72.90625 \\n\",\n       \"L 49.515625 72.90625 \\n\",\n       \"L 49.515625 64.59375 \\n\",\n       \"L 19.828125 64.59375 \\n\",\n       \"L 19.828125 46.734375 \\n\",\n       \"Q 21.96875 47.46875 24.109375 47.828125 \\n\",\n       \"Q 26.265625 48.1875 28.421875 48.1875 \\n\",\n       \"Q 40.625 48.1875 47.75 41.5 \\n\",\n       \"Q 54.890625 34.8125 54.890625 23.390625 \\n\",\n       \"Q 54.890625 11.625 47.5625 5.09375 \\n\",\n       \"Q 40.234375 -1.421875 26.90625 -1.421875 \\n\",\n       \"Q 22.3125 -1.421875 17.546875 -0.640625 \\n\",\n       \"Q 12.796875 0.140625 7.71875 1.703125 \\n\",\n       \"L 7.71875 11.625 \\n\",\n       \"Q 12.109375 9.234375 16.796875 8.0625 \\n\",\n       \"Q 21.484375 6.890625 26.703125 6.890625 \\n\",\n       \"Q 35.15625 6.890625 40.078125 11.328125 \\n\",\n       \"Q 45.015625 15.765625 45.015625 23.390625 \\n\",\n       \"Q 45.015625 31 40.078125 35.4375 \\n\",\n       \"Q 35.15625 39.890625 26.703125 39.890625 \\n\",\n       \"Q 22.75 39.890625 18.8125 39.015625 \\n\",\n       \"Q 14.890625 38.140625 10.796875 36.28125 \\n\",\n       \"z\\n\",\n       \"\\\" id=\\\"DejaVuSans-53\\\"/>\\n\",\n       \"      </defs>\\n\",\n       \"      <g transform=\\\"translate(20.878125 141.017386)scale(0.1 -0.1)\\\">\\n\",\n       \"       <use xlink:href=\\\"#DejaVuSans-8722\\\"/>\\n\",\n       \"       <use x=\\\"83.789062\\\" xlink:href=\\\"#DejaVuSans-49\\\"/>\\n\",\n       \"       <use x=\\\"147.412109\\\" xlink:href=\\\"#DejaVuSans-48\\\"/>\\n\",\n       \"       <use x=\\\"211.035156\\\" xlink:href=\\\"#DejaVuSans-46\\\"/>\\n\",\n       \"       <use x=\\\"242.822266\\\" xlink:href=\\\"#DejaVuSans-50\\\"/>\\n\",\n       \"       <use x=\\\"306.445312\\\" xlink:href=\\\"#DejaVuSans-53\\\"/>\\n\",\n       \"      </g>\\n\",\n       \"     </g>\\n\",\n       \"    </g>\\n\",\n       \"    <g id=\\\"ytick_2\\\">\\n\",\n       \"     <g id=\\\"line2d_9\\\">\\n\",\n       \"      <g>\\n\",\n       \"       <use style=\\\"stroke:#000000;stroke-width:0.8;\\\" x=\\\"64.885937\\\" xlink:href=\\\"#mf5e7fea873\\\" y=\\\"114.455562\\\"/>\\n\",\n       \"      </g>\\n\",\n       \"     </g>\\n\",\n       \"     <g id=\\\"text_2\\\">\\n\",\n       \"      <!-- −10.00 -->\\n\",\n       \"      <g transform=\\\"translate(20.878125 118.254781)scale(0.1 -0.1)\\\">\\n\",\n       \"       <use xlink:href=\\\"#DejaVuSans-8722\\\"/>\\n\",\n       \"       <use x=\\\"83.789062\\\" xlink:href=\\\"#DejaVuSans-49\\\"/>\\n\",\n       \"       <use x=\\\"147.412109\\\" xlink:href=\\\"#DejaVuSans-48\\\"/>\\n\",\n       \"       <use x=\\\"211.035156\\\" xlink:href=\\\"#DejaVuSans-46\\\"/>\\n\",\n       \"       <use x=\\\"242.822266\\\" xlink:href=\\\"#DejaVuSans-48\\\"/>\\n\",\n       \"       <use x=\\\"306.445312\\\" xlink:href=\\\"#DejaVuSans-48\\\"/>\\n\",\n       \"      </g>\\n\",\n       \"     </g>\\n\",\n       \"    </g>\\n\",\n       \"    <g id=\\\"ytick_3\\\">\\n\",\n       \"     <g id=\\\"line2d_10\\\">\\n\",\n       \"      <g>\\n\",\n       \"       <use style=\\\"stroke:#000000;stroke-width:0.8;\\\" x=\\\"64.885937\\\" xlink:href=\\\"#mf5e7fea873\\\" y=\\\"91.692957\\\"/>\\n\",\n       \"      </g>\\n\",\n       \"     </g>\\n\",\n       \"     <g id=\\\"text_3\\\">\\n\",\n       \"      <!-- −9.75 -->\\n\",\n       \"      <defs>\\n\",\n       \"       <path d=\\\"M 10.984375 1.515625 \\n\",\n       \"L 10.984375 10.5 \\n\",\n       \"Q 14.703125 8.734375 18.5 7.8125 \\n\",\n       \"Q 22.3125 6.890625 25.984375 6.890625 \\n\",\n       \"Q 35.75 6.890625 40.890625 13.453125 \\n\",\n       \"Q 46.046875 20.015625 46.78125 33.40625 \\n\",\n       \"Q 43.953125 29.203125 39.59375 26.953125 \\n\",\n       \"Q 35.25 24.703125 29.984375 24.703125 \\n\",\n       \"Q 19.046875 24.703125 12.671875 31.3125 \\n\",\n       \"Q 6.296875 37.9375 6.296875 49.421875 \\n\",\n       \"Q 6.296875 60.640625 12.9375 67.421875 \\n\",\n       \"Q 19.578125 74.21875 30.609375 74.21875 \\n\",\n       \"Q 43.265625 74.21875 49.921875 64.515625 \\n\",\n       \"Q 56.59375 54.828125 56.59375 36.375 \\n\",\n       \"Q 56.59375 19.140625 48.40625 8.859375 \\n\",\n       \"Q 40.234375 -1.421875 26.421875 -1.421875 \\n\",\n       \"Q 22.703125 -1.421875 18.890625 -0.6875 \\n\",\n       \"Q 15.09375 0.046875 10.984375 1.515625 \\n\",\n       \"z\\n\",\n       \"M 30.609375 32.421875 \\n\",\n       \"Q 37.25 32.421875 41.125 36.953125 \\n\",\n       \"Q 45.015625 41.5 45.015625 49.421875 \\n\",\n       \"Q 45.015625 57.28125 41.125 61.84375 \\n\",\n       \"Q 37.25 66.40625 30.609375 66.40625 \\n\",\n       \"Q 23.96875 66.40625 20.09375 61.84375 \\n\",\n       \"Q 16.21875 57.28125 16.21875 49.421875 \\n\",\n       \"Q 16.21875 41.5 20.09375 36.953125 \\n\",\n       \"Q 23.96875 32.421875 30.609375 32.421875 \\n\",\n       \"z\\n\",\n       \"\\\" id=\\\"DejaVuSans-57\\\"/>\\n\",\n       \"       <path d=\\\"M 8.203125 72.90625 \\n\",\n       \"L 55.078125 72.90625 \\n\",\n       \"L 55.078125 68.703125 \\n\",\n       \"L 28.609375 0 \\n\",\n       \"L 18.3125 0 \\n\",\n       \"L 43.21875 64.59375 \\n\",\n       \"L 8.203125 64.59375 \\n\",\n       \"z\\n\",\n       \"\\\" id=\\\"DejaVuSans-55\\\"/>\\n\",\n       \"      </defs>\\n\",\n       \"      <g transform=\\\"translate(27.240625 95.492176)scale(0.1 -0.1)\\\">\\n\",\n       \"       <use xlink:href=\\\"#DejaVuSans-8722\\\"/>\\n\",\n       \"       <use x=\\\"83.789062\\\" xlink:href=\\\"#DejaVuSans-57\\\"/>\\n\",\n       \"       <use x=\\\"147.412109\\\" xlink:href=\\\"#DejaVuSans-46\\\"/>\\n\",\n       \"       <use x=\\\"179.199219\\\" xlink:href=\\\"#DejaVuSans-55\\\"/>\\n\",\n       \"       <use x=\\\"242.822266\\\" xlink:href=\\\"#DejaVuSans-53\\\"/>\\n\",\n       \"      </g>\\n\",\n       \"     </g>\\n\",\n       \"    </g>\\n\",\n       \"    <g id=\\\"ytick_4\\\">\\n\",\n       \"     <g id=\\\"line2d_11\\\">\\n\",\n       \"      <g>\\n\",\n       \"       <use style=\\\"stroke:#000000;stroke-width:0.8;\\\" x=\\\"64.885937\\\" xlink:href=\\\"#mf5e7fea873\\\" y=\\\"68.930352\\\"/>\\n\",\n       \"      </g>\\n\",\n       \"     </g>\\n\",\n       \"     <g id=\\\"text_4\\\">\\n\",\n       \"      <!-- −9.50 -->\\n\",\n       \"      <g transform=\\\"translate(27.240625 72.72957)scale(0.1 -0.1)\\\">\\n\",\n       \"       <use xlink:href=\\\"#DejaVuSans-8722\\\"/>\\n\",\n       \"       <use x=\\\"83.789062\\\" xlink:href=\\\"#DejaVuSans-57\\\"/>\\n\",\n       \"       <use x=\\\"147.412109\\\" xlink:href=\\\"#DejaVuSans-46\\\"/>\\n\",\n       \"       <use x=\\\"179.199219\\\" xlink:href=\\\"#DejaVuSans-53\\\"/>\\n\",\n       \"       <use x=\\\"242.822266\\\" xlink:href=\\\"#DejaVuSans-48\\\"/>\\n\",\n       \"      </g>\\n\",\n       \"     </g>\\n\",\n       \"    </g>\\n\",\n       \"    <g id=\\\"text_5\\\">\\n\",\n       \"     <!-- Vx [m/s] -->\\n\",\n       \"     <defs>\\n\",\n       \"      <path d=\\\"M 28.609375 0 \\n\",\n       \"L 0.78125 72.90625 \\n\",\n       \"L 11.078125 72.90625 \\n\",\n       \"L 34.1875 11.53125 \\n\",\n       \"L 57.328125 72.90625 \\n\",\n       \"L 67.578125 72.90625 \\n\",\n       \"L 39.796875 0 \\n\",\n       \"z\\n\",\n       \"\\\" id=\\\"DejaVuSans-86\\\"/>\\n\",\n       \"      <path d=\\\"M 54.890625 54.6875 \\n\",\n       \"L 35.109375 28.078125 \\n\",\n       \"L 55.90625 0 \\n\",\n       \"L 45.3125 0 \\n\",\n       \"L 29.390625 21.484375 \\n\",\n       \"L 13.484375 0 \\n\",\n       \"L 2.875 0 \\n\",\n       \"L 24.125 28.609375 \\n\",\n       \"L 4.6875 54.6875 \\n\",\n       \"L 15.28125 54.6875 \\n\",\n       \"L 29.78125 35.203125 \\n\",\n       \"L 44.28125 54.6875 \\n\",\n       \"z\\n\",\n       \"\\\" id=\\\"DejaVuSans-120\\\"/>\\n\",\n       \"      <path id=\\\"DejaVuSans-32\\\"/>\\n\",\n       \"      <path d=\\\"M 8.59375 75.984375 \\n\",\n       \"L 29.296875 75.984375 \\n\",\n       \"L 29.296875 69 \\n\",\n       \"L 17.578125 69 \\n\",\n       \"L 17.578125 -6.203125 \\n\",\n       \"L 29.296875 -6.203125 \\n\",\n       \"L 29.296875 -13.1875 \\n\",\n       \"L 8.59375 -13.1875 \\n\",\n       \"z\\n\",\n       \"\\\" id=\\\"DejaVuSans-91\\\"/>\\n\",\n       \"      <path d=\\\"M 52 44.1875 \\n\",\n       \"Q 55.375 50.25 60.0625 53.125 \\n\",\n       \"Q 64.75 56 71.09375 56 \\n\",\n       \"Q 79.640625 56 84.28125 50.015625 \\n\",\n       \"Q 88.921875 44.046875 88.921875 33.015625 \\n\",\n       \"L 88.921875 0 \\n\",\n       \"L 79.890625 0 \\n\",\n       \"L 79.890625 32.71875 \\n\",\n       \"Q 79.890625 40.578125 77.09375 44.375 \\n\",\n       \"Q 74.3125 48.1875 68.609375 48.1875 \\n\",\n       \"Q 61.625 48.1875 57.5625 43.546875 \\n\",\n       \"Q 53.515625 38.921875 53.515625 30.90625 \\n\",\n       \"L 53.515625 0 \\n\",\n       \"L 44.484375 0 \\n\",\n       \"L 44.484375 32.71875 \\n\",\n       \"Q 44.484375 40.625 41.703125 44.40625 \\n\",\n       \"Q 38.921875 48.1875 33.109375 48.1875 \\n\",\n       \"Q 26.21875 48.1875 22.15625 43.53125 \\n\",\n       \"Q 18.109375 38.875 18.109375 30.90625 \\n\",\n       \"L 18.109375 0 \\n\",\n       \"L 9.078125 0 \\n\",\n       \"L 9.078125 54.6875 \\n\",\n       \"L 18.109375 54.6875 \\n\",\n       \"L 18.109375 46.1875 \\n\",\n       \"Q 21.1875 51.21875 25.484375 53.609375 \\n\",\n       \"Q 29.78125 56 35.6875 56 \\n\",\n       \"Q 41.65625 56 45.828125 52.96875 \\n\",\n       \"Q 50 49.953125 52 44.1875 \\n\",\n       \"z\\n\",\n       \"\\\" id=\\\"DejaVuSans-109\\\"/>\\n\",\n       \"      <path d=\\\"M 25.390625 72.90625 \\n\",\n       \"L 33.6875 72.90625 \\n\",\n       \"L 8.296875 -9.28125 \\n\",\n       \"L 0 -9.28125 \\n\",\n       \"z\\n\",\n       \"\\\" id=\\\"DejaVuSans-47\\\"/>\\n\",\n       \"      <path d=\\\"M 44.28125 53.078125 \\n\",\n       \"L 44.28125 44.578125 \\n\",\n       \"Q 40.484375 46.53125 36.375 47.5 \\n\",\n       \"Q 32.28125 48.484375 27.875 48.484375 \\n\",\n       \"Q 21.1875 48.484375 17.84375 46.4375 \\n\",\n       \"Q 14.5 44.390625 14.5 40.28125 \\n\",\n       \"Q 14.5 37.15625 16.890625 35.375 \\n\",\n       \"Q 19.28125 33.59375 26.515625 31.984375 \\n\",\n       \"L 29.59375 31.296875 \\n\",\n       \"Q 39.15625 29.25 43.1875 25.515625 \\n\",\n       \"Q 47.21875 21.78125 47.21875 15.09375 \\n\",\n       \"Q 47.21875 7.46875 41.1875 3.015625 \\n\",\n       \"Q 35.15625 -1.421875 24.609375 -1.421875 \\n\",\n       \"Q 20.21875 -1.421875 15.453125 -0.5625 \\n\",\n       \"Q 10.6875 0.296875 5.421875 2 \\n\",\n       \"L 5.421875 11.28125 \\n\",\n       \"Q 10.40625 8.6875 15.234375 7.390625 \\n\",\n       \"Q 20.0625 6.109375 24.8125 6.109375 \\n\",\n       \"Q 31.15625 6.109375 34.5625 8.28125 \\n\",\n       \"Q 37.984375 10.453125 37.984375 14.40625 \\n\",\n       \"Q 37.984375 18.0625 35.515625 20.015625 \\n\",\n       \"Q 33.0625 21.96875 24.703125 23.78125 \\n\",\n       \"L 21.578125 24.515625 \\n\",\n       \"Q 13.234375 26.265625 9.515625 29.90625 \\n\",\n       \"Q 5.8125 33.546875 5.8125 39.890625 \\n\",\n       \"Q 5.8125 47.609375 11.28125 51.796875 \\n\",\n       \"Q 16.75 56 26.8125 56 \\n\",\n       \"Q 31.78125 56 36.171875 55.265625 \\n\",\n       \"Q 40.578125 54.546875 44.28125 53.078125 \\n\",\n       \"z\\n\",\n       \"\\\" id=\\\"DejaVuSans-115\\\"/>\\n\",\n       \"      <path d=\\\"M 30.421875 75.984375 \\n\",\n       \"L 30.421875 -13.1875 \\n\",\n       \"L 9.71875 -13.1875 \\n\",\n       \"L 9.71875 -6.203125 \\n\",\n       \"L 21.390625 -6.203125 \\n\",\n       \"L 21.390625 69 \\n\",\n       \"L 9.71875 69 \\n\",\n       \"L 9.71875 75.984375 \\n\",\n       \"z\\n\",\n       \"\\\" id=\\\"DejaVuSans-93\\\"/>\\n\",\n       \"     </defs>\\n\",\n       \"     <g transform=\\\"translate(14.798437 125.789687)rotate(-90)scale(0.1 -0.1)\\\">\\n\",\n       \"      <use xlink:href=\\\"#DejaVuSans-86\\\"/>\\n\",\n       \"      <use x=\\\"68.408203\\\" xlink:href=\\\"#DejaVuSans-120\\\"/>\\n\",\n       \"      <use x=\\\"127.587891\\\" xlink:href=\\\"#DejaVuSans-32\\\"/>\\n\",\n       \"      <use x=\\\"159.375\\\" xlink:href=\\\"#DejaVuSans-91\\\"/>\\n\",\n       \"      <use x=\\\"198.388672\\\" xlink:href=\\\"#DejaVuSans-109\\\"/>\\n\",\n       \"      <use x=\\\"295.800781\\\" xlink:href=\\\"#DejaVuSans-47\\\"/>\\n\",\n       \"      <use x=\\\"329.492188\\\" xlink:href=\\\"#DejaVuSans-115\\\"/>\\n\",\n       \"      <use x=\\\"381.591797\\\" xlink:href=\\\"#DejaVuSans-93\\\"/>\\n\",\n       \"     </g>\\n\",\n       \"    </g>\\n\",\n       \"   </g>\\n\",\n       \"   <g id=\\\"line2d_12\\\">\\n\",\n       \"    <path clip-path=\\\"url(#p03149fd8c1)\\\" d=\\\"M 82.640483 111.887961 \\n\",\n       \"L 89.150483 111.940185 \\n\",\n       \"L 89.446392 112.084233 \\n\",\n       \"L 89.742301 112.361827 \\n\",\n       \"L 90.03821 112.822491 \\n\",\n       \"L 90.630028 114.413017 \\n\",\n       \"L 91.221847 116.944732 \\n\",\n       \"L 91.813665 120.44009 \\n\",\n       \"L 92.701392 127.496463 \\n\",\n       \"L 95.068665 149.045018 \\n\",\n       \"L 95.660483 152.337793 \\n\",\n       \"L 95.956392 153.38255 \\n\",\n       \"L 96.252301 153.997554 \\n\",\n       \"L 96.54821 154.178182 \\n\",\n       \"L 96.844119 153.923014 \\n\",\n       \"L 97.140028 153.244034 \\n\",\n       \"L 97.731847 150.679594 \\n\",\n       \"L 98.323665 146.643847 \\n\",\n       \"L 99.211392 138.32053 \\n\",\n       \"L 100.395028 124.535278 \\n\",\n       \"L 102.762301 96.492891 \\n\",\n       \"L 104.241847 82.055526 \\n\",\n       \"L 105.721392 69.675453 \\n\",\n       \"L 106.905028 61.422136 \\n\",\n       \"L 107.496847 58.350501 \\n\",\n       \"L 108.088665 56.279649 \\n\",\n       \"L 108.384574 55.669473 \\n\",\n       \"L 108.680483 55.355602 \\n\",\n       \"L 108.976392 55.341818 \\n\",\n       \"L 109.272301 55.613927 \\n\",\n       \"L 109.56821 56.152264 \\n\",\n       \"L 110.160028 57.916601 \\n\",\n       \"L 111.047756 61.612934 \\n\",\n       \"L 112.231392 66.601954 \\n\",\n       \"L 112.82321 68.392096 \\n\",\n       \"L 113.415028 69.479527 \\n\",\n       \"L 113.710938 69.761179 \\n\",\n       \"L 114.006847 69.883504 \\n\",\n       \"L 114.598665 69.747008 \\n\",\n       \"L 116.07821 68.968328 \\n\",\n       \"L 116.374119 69.006998 \\n\",\n       \"L 116.670028 69.171743 \\n\",\n       \"L 117.261847 69.886047 \\n\",\n       \"L 117.853665 71.062543 \\n\",\n       \"L 120.516847 77.344139 \\n\",\n       \"L 121.108665 78.095914 \\n\",\n       \"L 121.996392 78.768727 \\n\",\n       \"L 123.180028 79.505092 \\n\",\n       \"L 124.067756 80.376895 \\n\",\n       \"L 124.955483 81.650631 \\n\",\n       \"L 127.914574 86.33447 \\n\",\n       \"L 129.394119 87.953788 \\n\",\n       \"L 130.873665 89.601402 \\n\",\n       \"L 132.35321 91.634323 \\n\",\n       \"L 135.312301 95.79171 \\n\",\n       \"L 140.638665 102.618748 \\n\",\n       \"L 143.301847 106.018266 \\n\",\n       \"L 153.362756 118.177437 \\n\",\n       \"L 157.505483 122.806597 \\n\",\n       \"L 162.240028 127.724731 \\n\",\n       \"L 166.086847 131.407992 \\n\",\n       \"L 169.933665 134.794354 \\n\",\n       \"L 173.484574 137.632296 \\n\",\n       \"L 177.035483 140.187949 \\n\",\n       \"L 180.290483 142.270773 \\n\",\n       \"L 183.545483 144.101849 \\n\",\n       \"L 186.800483 145.676067 \\n\",\n       \"L 190.055483 146.991566 \\n\",\n       \"L 193.310483 148.047609 \\n\",\n       \"L 196.269574 148.783202 \\n\",\n       \"L 199.228665 149.307283 \\n\",\n       \"L 202.187756 149.622232 \\n\",\n       \"L 205.146847 149.732113 \\n\",\n       \"L 208.401847 149.621849 \\n\",\n       \"L 211.656847 149.276816 \\n\",\n       \"L 214.911847 148.705858 \\n\",\n       \"L 218.166847 147.919111 \\n\",\n       \"L 221.717756 146.827932 \\n\",\n       \"L 225.268665 145.509204 \\n\",\n       \"L 229.115483 143.843824 \\n\",\n       \"L 233.25821 141.801251 \\n\",\n       \"L 237.696847 139.360631 \\n\",\n       \"L 242.727301 136.328884 \\n\",\n       \"L 248.645483 132.479716 \\n\",\n       \"L 256.339119 127.177438 \\n\",\n       \"L 275.277301 113.992856 \\n\",\n       \"L 281.491392 110.003038 \\n\",\n       \"L 286.817756 106.834884 \\n\",\n       \"L 291.84821 104.100789 \\n\",\n       \"L 296.582756 101.786802 \\n\",\n       \"L 301.021392 99.866074 \\n\",\n       \"L 305.164119 98.303394 \\n\",\n       \"L 309.306847 96.971335 \\n\",\n       \"L 313.449574 95.875168 \\n\",\n       \"L 317.592301 95.01718 \\n\",\n       \"L 321.735028 94.396761 \\n\",\n       \"L 325.877756 94.010586 \\n\",\n       \"L 330.020483 93.852771 \\n\",\n       \"L 334.16321 93.915061 \\n\",\n       \"L 338.601847 94.214214 \\n\",\n       \"L 343.040483 94.738901 \\n\",\n       \"L 347.775028 95.527575 \\n\",\n       \"L 352.805483 96.598955 \\n\",\n       \"L 358.131847 97.962481 \\n\",\n       \"L 364.050028 99.708543 \\n\",\n       \"L 371.151847 102.051331 \\n\",\n       \"L 380.325028 105.332383 \\n\",\n       \"L 402.222301 113.252341 \\n\",\n       \"L 409.915938 115.74301 \\n\",\n       \"L 416.721847 117.713546 \\n\",\n       \"L 422.935938 119.285125 \\n\",\n       \"L 428.854119 120.55708 \\n\",\n       \"L 434.772301 121.594738 \\n\",\n       \"L 437.731392 122.022716 \\n\",\n       \"L 437.731392 122.022716 \\n\",\n       \"\\\" style=\\\"fill:none;stroke:#1f77b4;stroke-linecap:square;stroke-width:1.5;\\\"/>\\n\",\n       \"   </g>\\n\",\n       \"   <g id=\\\"patch_3\\\">\\n\",\n       \"    <path d=\\\"M 64.885937 159.12 \\n\",\n       \"L 64.885937 50.4 \\n\",\n       \"\\\" style=\\\"fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;stroke-width:0.8;\\\"/>\\n\",\n       \"   </g>\\n\",\n       \"   <g id=\\\"patch_4\\\">\\n\",\n       \"    <path d=\\\"M 455.485938 159.12 \\n\",\n       \"L 455.485938 50.4 \\n\",\n       \"\\\" style=\\\"fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;stroke-width:0.8;\\\"/>\\n\",\n       \"   </g>\\n\",\n       \"   <g id=\\\"patch_5\\\">\\n\",\n       \"    <path d=\\\"M 64.885938 159.12 \\n\",\n       \"L 455.485937 159.12 \\n\",\n       \"\\\" style=\\\"fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;stroke-width:0.8;\\\"/>\\n\",\n       \"   </g>\\n\",\n       \"   <g id=\\\"patch_6\\\">\\n\",\n       \"    <path d=\\\"M 64.885938 50.4 \\n\",\n       \"L 455.485937 50.4 \\n\",\n       \"\\\" style=\\\"fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;stroke-width:0.8;\\\"/>\\n\",\n       \"   </g>\\n\",\n       \"  </g>\\n\",\n       \"  <g id=\\\"axes_2\\\">\\n\",\n       \"   <g id=\\\"patch_7\\\">\\n\",\n       \"    <path d=\\\"M 64.885937 267.84 \\n\",\n       \"L 455.485938 267.84 \\n\",\n       \"L 455.485938 159.12 \\n\",\n       \"L 64.885937 159.12 \\n\",\n       \"z\\n\",\n       \"\\\" style=\\\"fill:#ffffff;\\\"/>\\n\",\n       \"   </g>\\n\",\n       \"   <g id=\\\"matplotlib.axis_3\\\">\\n\",\n       \"    <g id=\\\"xtick_8\\\">\\n\",\n       \"     <g id=\\\"line2d_13\\\">\\n\",\n       \"      <g>\\n\",\n       \"       <use style=\\\"stroke:#000000;stroke-width:0.8;\\\" x=\\\"82.640483\\\" xlink:href=\\\"#md45cc03867\\\" y=\\\"267.84\\\"/>\\n\",\n       \"      </g>\\n\",\n       \"     </g>\\n\",\n       \"    </g>\\n\",\n       \"    <g id=\\\"xtick_9\\\">\\n\",\n       \"     <g id=\\\"line2d_14\\\">\\n\",\n       \"      <g>\\n\",\n       \"       <use style=\\\"stroke:#000000;stroke-width:0.8;\\\" x=\\\"141.773024\\\" xlink:href=\\\"#md45cc03867\\\" y=\\\"267.84\\\"/>\\n\",\n       \"      </g>\\n\",\n       \"     </g>\\n\",\n       \"    </g>\\n\",\n       \"    <g id=\\\"xtick_10\\\">\\n\",\n       \"     <g id=\\\"line2d_15\\\">\\n\",\n       \"      <g>\\n\",\n       \"       <use style=\\\"stroke:#000000;stroke-width:0.8;\\\" x=\\\"200.905565\\\" xlink:href=\\\"#md45cc03867\\\" y=\\\"267.84\\\"/>\\n\",\n       \"      </g>\\n\",\n       \"     </g>\\n\",\n       \"    </g>\\n\",\n       \"    <g id=\\\"xtick_11\\\">\\n\",\n       \"     <g id=\\\"line2d_16\\\">\\n\",\n       \"      <g>\\n\",\n       \"       <use style=\\\"stroke:#000000;stroke-width:0.8;\\\" x=\\\"260.038106\\\" xlink:href=\\\"#md45cc03867\\\" y=\\\"267.84\\\"/>\\n\",\n       \"      </g>\\n\",\n       \"     </g>\\n\",\n       \"    </g>\\n\",\n       \"    <g id=\\\"xtick_12\\\">\\n\",\n       \"     <g id=\\\"line2d_17\\\">\\n\",\n       \"      <g>\\n\",\n       \"       <use style=\\\"stroke:#000000;stroke-width:0.8;\\\" x=\\\"319.170647\\\" xlink:href=\\\"#md45cc03867\\\" y=\\\"267.84\\\"/>\\n\",\n       \"      </g>\\n\",\n       \"     </g>\\n\",\n       \"    </g>\\n\",\n       \"    <g id=\\\"xtick_13\\\">\\n\",\n       \"     <g id=\\\"line2d_18\\\">\\n\",\n       \"      <g>\\n\",\n       \"       <use style=\\\"stroke:#000000;stroke-width:0.8;\\\" x=\\\"378.303188\\\" xlink:href=\\\"#md45cc03867\\\" y=\\\"267.84\\\"/>\\n\",\n       \"      </g>\\n\",\n       \"     </g>\\n\",\n       \"    </g>\\n\",\n       \"    <g id=\\\"xtick_14\\\">\\n\",\n       \"     <g id=\\\"line2d_19\\\">\\n\",\n       \"      <g>\\n\",\n       \"       <use style=\\\"stroke:#000000;stroke-width:0.8;\\\" x=\\\"437.435729\\\" xlink:href=\\\"#md45cc03867\\\" y=\\\"267.84\\\"/>\\n\",\n       \"      </g>\\n\",\n       \"     </g>\\n\",\n       \"    </g>\\n\",\n       \"   </g>\\n\",\n       \"   <g id=\\\"matplotlib.axis_4\\\">\\n\",\n       \"    <g id=\\\"ytick_5\\\">\\n\",\n       \"     <g id=\\\"line2d_20\\\">\\n\",\n       \"      <g>\\n\",\n       \"       <use style=\\\"stroke:#000000;stroke-width:0.8;\\\" x=\\\"64.885937\\\" xlink:href=\\\"#mf5e7fea873\\\" y=\\\"237.690177\\\"/>\\n\",\n       \"      </g>\\n\",\n       \"     </g>\\n\",\n       \"     <g id=\\\"text_6\\\">\\n\",\n       \"      <!-- −5 -->\\n\",\n       \"      <g transform=\\\"translate(43.14375 241.489396)scale(0.1 -0.1)\\\">\\n\",\n       \"       <use xlink:href=\\\"#DejaVuSans-8722\\\"/>\\n\",\n       \"       <use x=\\\"83.789062\\\" xlink:href=\\\"#DejaVuSans-53\\\"/>\\n\",\n       \"      </g>\\n\",\n       \"     </g>\\n\",\n       \"    </g>\\n\",\n       \"    <g id=\\\"ytick_6\\\">\\n\",\n       \"     <g id=\\\"line2d_21\\\">\\n\",\n       \"      <g>\\n\",\n       \"       <use style=\\\"stroke:#000000;stroke-width:0.8;\\\" x=\\\"64.885937\\\" xlink:href=\\\"#mf5e7fea873\\\" y=\\\"205.938218\\\"/>\\n\",\n       \"      </g>\\n\",\n       \"     </g>\\n\",\n       \"     <g id=\\\"text_7\\\">\\n\",\n       \"      <!-- 0 -->\\n\",\n       \"      <g transform=\\\"translate(51.523438 209.737437)scale(0.1 -0.1)\\\">\\n\",\n       \"       <use xlink:href=\\\"#DejaVuSans-48\\\"/>\\n\",\n       \"      </g>\\n\",\n       \"     </g>\\n\",\n       \"    </g>\\n\",\n       \"    <g id=\\\"ytick_7\\\">\\n\",\n       \"     <g id=\\\"line2d_22\\\">\\n\",\n       \"      <g>\\n\",\n       \"       <use style=\\\"stroke:#000000;stroke-width:0.8;\\\" x=\\\"64.885937\\\" xlink:href=\\\"#mf5e7fea873\\\" y=\\\"174.186259\\\"/>\\n\",\n       \"      </g>\\n\",\n       \"     </g>\\n\",\n       \"     <g id=\\\"text_8\\\">\\n\",\n       \"      <!-- 5 -->\\n\",\n       \"      <g transform=\\\"translate(51.523438 177.985478)scale(0.1 -0.1)\\\">\\n\",\n       \"       <use xlink:href=\\\"#DejaVuSans-53\\\"/>\\n\",\n       \"      </g>\\n\",\n       \"     </g>\\n\",\n       \"    </g>\\n\",\n       \"    <g id=\\\"text_9\\\">\\n\",\n       \"     <!-- Vy [m/s] -->\\n\",\n       \"     <defs>\\n\",\n       \"      <path d=\\\"M 32.171875 -5.078125 \\n\",\n       \"Q 28.375 -14.84375 24.75 -17.8125 \\n\",\n       \"Q 21.140625 -20.796875 15.09375 -20.796875 \\n\",\n       \"L 7.90625 -20.796875 \\n\",\n       \"L 7.90625 -13.28125 \\n\",\n       \"L 13.1875 -13.28125 \\n\",\n       \"Q 16.890625 -13.28125 18.9375 -11.515625 \\n\",\n       \"Q 21 -9.765625 23.484375 -3.21875 \\n\",\n       \"L 25.09375 0.875 \\n\",\n       \"L 2.984375 54.6875 \\n\",\n       \"L 12.5 54.6875 \\n\",\n       \"L 29.59375 11.921875 \\n\",\n       \"L 46.6875 54.6875 \\n\",\n       \"L 56.203125 54.6875 \\n\",\n       \"z\\n\",\n       \"\\\" id=\\\"DejaVuSans-121\\\"/>\\n\",\n       \"     </defs>\\n\",\n       \"     <g transform=\\\"translate(37.064062 234.508125)rotate(-90)scale(0.1 -0.1)\\\">\\n\",\n       \"      <use xlink:href=\\\"#DejaVuSans-86\\\"/>\\n\",\n       \"      <use x=\\\"68.376953\\\" xlink:href=\\\"#DejaVuSans-121\\\"/>\\n\",\n       \"      <use x=\\\"127.556641\\\" xlink:href=\\\"#DejaVuSans-32\\\"/>\\n\",\n       \"      <use x=\\\"159.34375\\\" xlink:href=\\\"#DejaVuSans-91\\\"/>\\n\",\n       \"      <use x=\\\"198.357422\\\" xlink:href=\\\"#DejaVuSans-109\\\"/>\\n\",\n       \"      <use x=\\\"295.769531\\\" xlink:href=\\\"#DejaVuSans-47\\\"/>\\n\",\n       \"      <use x=\\\"329.460938\\\" xlink:href=\\\"#DejaVuSans-115\\\"/>\\n\",\n       \"      <use x=\\\"381.560547\\\" xlink:href=\\\"#DejaVuSans-93\\\"/>\\n\",\n       \"     </g>\\n\",\n       \"    </g>\\n\",\n       \"    <g id=\\\"text_10\\\">\\n\",\n       \"     <!-- 1e−9 -->\\n\",\n       \"     <defs>\\n\",\n       \"      <path d=\\\"M 56.203125 29.59375 \\n\",\n       \"L 56.203125 25.203125 \\n\",\n       \"L 14.890625 25.203125 \\n\",\n       \"Q 15.484375 15.921875 20.484375 11.0625 \\n\",\n       \"Q 25.484375 6.203125 34.421875 6.203125 \\n\",\n       \"Q 39.59375 6.203125 44.453125 7.46875 \\n\",\n       \"Q 49.3125 8.734375 54.109375 11.28125 \\n\",\n       \"L 54.109375 2.78125 \\n\",\n       \"Q 49.265625 0.734375 44.1875 -0.34375 \\n\",\n       \"Q 39.109375 -1.421875 33.890625 -1.421875 \\n\",\n       \"Q 20.796875 -1.421875 13.15625 6.1875 \\n\",\n       \"Q 5.515625 13.8125 5.515625 26.8125 \\n\",\n       \"Q 5.515625 40.234375 12.765625 48.109375 \\n\",\n       \"Q 20.015625 56 32.328125 56 \\n\",\n       \"Q 43.359375 56 49.78125 48.890625 \\n\",\n       \"Q 56.203125 41.796875 56.203125 29.59375 \\n\",\n       \"z\\n\",\n       \"M 47.21875 32.234375 \\n\",\n       \"Q 47.125 39.59375 43.09375 43.984375 \\n\",\n       \"Q 39.0625 48.390625 32.421875 48.390625 \\n\",\n       \"Q 24.90625 48.390625 20.390625 44.140625 \\n\",\n       \"Q 15.875 39.890625 15.1875 32.171875 \\n\",\n       \"z\\n\",\n       \"\\\" id=\\\"DejaVuSans-101\\\"/>\\n\",\n       \"     </defs>\\n\",\n       \"     <g transform=\\\"translate(64.885937 156.12)scale(0.1 -0.1)\\\">\\n\",\n       \"      <use xlink:href=\\\"#DejaVuSans-49\\\"/>\\n\",\n       \"      <use x=\\\"63.623047\\\" xlink:href=\\\"#DejaVuSans-101\\\"/>\\n\",\n       \"      <use x=\\\"125.146484\\\" xlink:href=\\\"#DejaVuSans-8722\\\"/>\\n\",\n       \"      <use x=\\\"208.935547\\\" xlink:href=\\\"#DejaVuSans-57\\\"/>\\n\",\n       \"     </g>\\n\",\n       \"    </g>\\n\",\n       \"   </g>\\n\",\n       \"   <g id=\\\"line2d_23\\\">\\n\",\n       \"    <path clip-path=\\\"url(#p100e91abe7)\\\" d=\\\"M 82.640483 205.938218 \\n\",\n       \"L 84.711847 205.823665 \\n\",\n       \"L 85.895483 205.423413 \\n\",\n       \"L 88.558665 205.672012 \\n\",\n       \"L 89.150483 205.872649 \\n\",\n       \"L 89.742301 205.95407 \\n\",\n       \"L 90.03821 206.281718 \\n\",\n       \"L 91.221847 208.3629 \\n\",\n       \"L 92.109574 209.176344 \\n\",\n       \"L 92.405483 209.407153 \\n\",\n       \"L 92.997301 210.20023 \\n\",\n       \"L 93.589119 211.592581 \\n\",\n       \"L 94.180938 213.858854 \\n\",\n       \"L 95.660483 220.74526 \\n\",\n       \"L 96.252301 222.347674 \\n\",\n       \"L 96.54821 222.685096 \\n\",\n       \"L 96.844119 222.67596 \\n\",\n       \"L 97.140028 222.165555 \\n\",\n       \"L 97.731847 219.729121 \\n\",\n       \"L 98.323665 215.577402 \\n\",\n       \"L 98.915483 209.23965 \\n\",\n       \"L 100.986847 184.019506 \\n\",\n       \"L 101.874574 178.371365 \\n\",\n       \"L 102.170483 177.853156 \\n\",\n       \"L 102.762301 177.441081 \\n\",\n       \"L 103.354119 180.577986 \\n\",\n       \"L 103.650028 180.470258 \\n\",\n       \"L 104.537756 177.335416 \\n\",\n       \"L 105.129574 173.144362 \\n\",\n       \"L 105.425483 169.60366 \\n\",\n       \"L 105.721392 167.41034 \\n\",\n       \"L 106.017301 166.258601 \\n\",\n       \"L 106.31321 164.353274 \\n\",\n       \"L 106.609119 164.061818 \\n\",\n       \"L 107.200938 171.624657 \\n\",\n       \"L 107.792756 181.50738 \\n\",\n       \"L 108.384574 196.99294 \\n\",\n       \"L 109.272301 223.920812 \\n\",\n       \"L 109.864119 241.338292 \\n\",\n       \"L 110.455938 252.372944 \\n\",\n       \"L 111.047756 260.380955 \\n\",\n       \"L 111.343665 262.372598 \\n\",\n       \"L 111.639574 262.898182 \\n\",\n       \"L 111.935483 262.109838 \\n\",\n       \"L 112.231392 259.938198 \\n\",\n       \"L 112.527301 256.777461 \\n\",\n       \"L 113.119119 245.180755 \\n\",\n       \"L 115.190483 200.661509 \\n\",\n       \"L 115.782301 195.207142 \\n\",\n       \"L 116.07821 195.360733 \\n\",\n       \"L 116.374119 197.844347 \\n\",\n       \"L 116.965938 206.524874 \\n\",\n       \"L 117.853665 217.872607 \\n\",\n       \"L 118.445483 224.639266 \\n\",\n       \"L 118.741392 226.359007 \\n\",\n       \"L 119.037301 226.855847 \\n\",\n       \"L 119.33321 226.179357 \\n\",\n       \"L 119.629119 224.402001 \\n\",\n       \"L 121.700483 206.273937 \\n\",\n       \"L 122.58821 202.722154 \\n\",\n       \"L 122.884119 201.982055 \\n\",\n       \"L 123.180028 201.585756 \\n\",\n       \"L 123.475938 202.369209 \\n\",\n       \"L 124.067756 204.789165 \\n\",\n       \"L 125.547301 210.207615 \\n\",\n       \"L 125.84321 210.829091 \\n\",\n       \"L 126.139119 211.139275 \\n\",\n       \"L 126.435028 211.249248 \\n\",\n       \"L 127.026847 209.699109 \\n\",\n       \"L 127.618665 207.835646 \\n\",\n       \"L 127.914574 206.532769 \\n\",\n       \"L 129.09821 203.669478 \\n\",\n       \"L 129.690028 203.029976 \\n\",\n       \"L 129.985938 203.108625 \\n\",\n       \"L 130.281847 203.688236 \\n\",\n       \"L 131.465483 204.583903 \\n\",\n       \"L 131.761392 204.98031 \\n\",\n       \"L 132.057301 206.000743 \\n\",\n       \"L 132.649119 206.626323 \\n\",\n       \"L 132.945028 206.760224 \\n\",\n       \"L 133.536847 206.732737 \\n\",\n       \"L 134.128665 206.998556 \\n\",\n       \"L 134.720483 206.545678 \\n\",\n       \"L 135.60821 204.735219 \\n\",\n       \"L 136.200028 204.344439 \\n\",\n       \"L 136.495938 204.32796 \\n\",\n       \"L 136.791847 204.445761 \\n\",\n       \"L 137.087756 204.27687 \\n\",\n       \"L 137.383665 204.307557 \\n\",\n       \"L 137.975483 204.712909 \\n\",\n       \"L 138.271392 205.302523 \\n\",\n       \"L 138.567301 205.5782 \\n\",\n       \"L 139.159119 205.521302 \\n\",\n       \"L 139.455028 206.050427 \\n\",\n       \"L 139.750938 206.060579 \\n\",\n       \"L 140.638665 205.60794 \\n\",\n       \"L 140.934574 205.678747 \\n\",\n       \"L 141.230483 205.934149 \\n\",\n       \"L 141.526392 206.352177 \\n\",\n       \"L 142.11821 206.445593 \\n\",\n       \"L 142.414119 206.147455 \\n\",\n       \"L 142.710028 206.065499 \\n\",\n       \"L 143.005938 205.706344 \\n\",\n       \"L 143.893665 205.515711 \\n\",\n       \"L 145.077301 206.104039 \\n\",\n       \"L 145.669119 206.089871 \\n\",\n       \"L 147.444574 207.156127 \\n\",\n       \"L 147.740483 206.947464 \\n\",\n       \"L 148.036392 206.520664 \\n\",\n       \"L 148.332301 206.320225 \\n\",\n       \"L 148.62821 206.271726 \\n\",\n       \"L 149.220028 206.495762 \\n\",\n       \"L 149.515938 206.964961 \\n\",\n       \"L 150.107756 207.480128 \\n\",\n       \"L 150.403665 207.322252 \\n\",\n       \"L 150.995483 206.364246 \\n\",\n       \"L 151.587301 206.20112 \\n\",\n       \"L 151.88321 206.490548 \\n\",\n       \"L 152.179119 207.097975 \\n\",\n       \"L 152.770938 207.568238 \\n\",\n       \"L 153.658665 206.504921 \\n\",\n       \"L 154.546392 206.912349 \\n\",\n       \"L 154.842301 207.33855 \\n\",\n       \"L 155.13821 207.499938 \\n\",\n       \"L 155.434119 207.372322 \\n\",\n       \"L 156.025937 206.440973 \\n\",\n       \"L 156.321847 206.33881 \\n\",\n       \"L 156.913665 206.332463 \\n\",\n       \"L 157.505483 207.313764 \\n\",\n       \"L 157.801392 207.412099 \\n\",\n       \"L 158.097301 207.372273 \\n\",\n       \"L 158.689119 206.379115 \\n\",\n       \"L 158.985028 206.252205 \\n\",\n       \"L 159.280937 206.287322 \\n\",\n       \"L 159.872756 206.653155 \\n\",\n       \"L 160.168665 206.973622 \\n\",\n       \"L 160.760483 207.181524 \\n\",\n       \"L 161.056392 207.155257 \\n\",\n       \"L 161.352301 207.352607 \\n\",\n       \"L 162.535938 207.408594 \\n\",\n       \"L 162.831847 207.582162 \\n\",\n       \"L 163.423665 207.346473 \\n\",\n       \"L 163.719574 206.879442 \\n\",\n       \"L 164.015483 206.737111 \\n\",\n       \"L 166.382756 207.675201 \\n\",\n       \"L 166.678665 207.76224 \\n\",\n       \"L 167.270483 207.190485 \\n\",\n       \"L 167.566392 206.940146 \\n\",\n       \"L 168.15821 206.88058 \\n\",\n       \"L 168.454119 206.851596 \\n\",\n       \"L 169.341847 207.309947 \\n\",\n       \"L 169.933665 207.203435 \\n\",\n       \"L 170.229574 207.177796 \\n\",\n       \"L 171.41321 207.852729 \\n\",\n       \"L 172.300938 206.577581 \\n\",\n       \"L 172.596847 206.348032 \\n\",\n       \"L 172.892756 206.644032 \\n\",\n       \"L 173.484574 207.704712 \\n\",\n       \"L 174.66821 207.571855 \\n\",\n       \"L 174.964119 207.377032 \\n\",\n       \"L 175.555938 207.917862 \\n\",\n       \"L 175.851847 208.05317 \\n\",\n       \"L 176.147756 207.88088 \\n\",\n       \"L 176.739574 207.28062 \\n\",\n       \"L 177.035483 207.202505 \\n\",\n       \"L 177.331392 207.259778 \\n\",\n       \"L 177.627301 207.194967 \\n\",\n       \"L 178.515028 208.319536 \\n\",\n       \"L 179.106847 208.460969 \\n\",\n       \"L 180.290483 207.322464 \\n\",\n       \"L 180.882301 207.731625 \\n\",\n       \"L 181.474119 208.251525 \\n\",\n       \"L 181.770028 208.192084 \\n\",\n       \"L 182.361847 207.463071 \\n\",\n       \"L 182.657756 207.44039 \\n\",\n       \"L 182.953665 207.82122 \\n\",\n       \"L 183.249574 208.523135 \\n\",\n       \"L 183.545483 208.745018 \\n\",\n       \"L 184.43321 208.441179 \\n\",\n       \"L 185.320938 207.517367 \\n\",\n       \"L 185.616847 207.522757 \\n\",\n       \"L 185.912756 207.802311 \\n\",\n       \"L 186.208665 207.911609 \\n\",\n       \"L 186.800483 208.387854 \\n\",\n       \"L 187.096392 208.424478 \\n\",\n       \"L 187.984119 207.700629 \\n\",\n       \"L 188.575938 207.470973 \\n\",\n       \"L 188.871847 207.529229 \\n\",\n       \"L 189.463665 208.111747 \\n\",\n       \"L 190.055483 208.014105 \\n\",\n       \"L 190.647301 207.424861 \\n\",\n       \"L 191.239119 207.580269 \\n\",\n       \"L 191.535028 207.859018 \\n\",\n       \"L 192.126847 208.678993 \\n\",\n       \"L 192.422756 208.595246 \\n\",\n       \"L 192.718665 208.10119 \\n\",\n       \"L 193.014574 207.301257 \\n\",\n       \"L 193.310483 207.024086 \\n\",\n       \"L 194.494119 208.543534 \\n\",\n       \"L 194.790028 208.602627 \\n\",\n       \"L 195.381847 207.837417 \\n\",\n       \"L 195.677756 207.101803 \\n\",\n       \"L 195.973665 206.726984 \\n\",\n       \"L 196.269574 206.994047 \\n\",\n       \"L 197.157301 208.470696 \\n\",\n       \"L 198.045028 206.931426 \\n\",\n       \"L 198.340937 206.679139 \\n\",\n       \"L 198.636847 206.838553 \\n\",\n       \"L 199.228665 207.932523 \\n\",\n       \"L 199.524574 208.099208 \\n\",\n       \"L 199.820483 207.863531 \\n\",\n       \"L 200.70821 206.519415 \\n\",\n       \"L 201.004119 206.475941 \\n\",\n       \"L 201.300028 206.780422 \\n\",\n       \"L 201.891847 207.967501 \\n\",\n       \"L 202.187756 207.911253 \\n\",\n       \"L 202.483665 207.429547 \\n\",\n       \"L 203.075483 206.044015 \\n\",\n       \"L 203.96321 207.242386 \\n\",\n       \"L 204.259119 207.610774 \\n\",\n       \"L 204.555028 207.757524 \\n\",\n       \"L 205.146847 207.244288 \\n\",\n       \"L 205.738665 206.307193 \\n\",\n       \"L 206.034574 206.314745 \\n\",\n       \"L 206.330483 206.467521 \\n\",\n       \"L 206.922301 207.507168 \\n\",\n       \"L 207.21821 207.672496 \\n\",\n       \"L 207.810028 207.501473 \\n\",\n       \"L 208.401847 206.384171 \\n\",\n       \"L 208.697756 206.318437 \\n\",\n       \"L 208.993665 206.4986 \\n\",\n       \"L 209.881392 207.647711 \\n\",\n       \"L 210.177301 207.582145 \\n\",\n       \"L 210.47321 207.075611 \\n\",\n       \"L 210.769119 206.161681 \\n\",\n       \"L 211.065028 205.854401 \\n\",\n       \"L 211.360938 205.978346 \\n\",\n       \"L 211.656847 206.496598 \\n\",\n       \"L 212.248665 208.137466 \\n\",\n       \"L 212.544574 207.878452 \\n\",\n       \"L 213.432301 205.672853 \\n\",\n       \"L 213.72821 205.922355 \\n\",\n       \"L 214.911847 207.984105 \\n\",\n       \"L 215.207756 207.640303 \\n\",\n       \"L 216.095483 206.032393 \\n\",\n       \"L 216.687301 206.838877 \\n\",\n       \"L 217.279119 207.780407 \\n\",\n       \"L 217.575028 207.729336 \\n\",\n       \"L 218.462756 206.332417 \\n\",\n       \"L 218.758665 206.331587 \\n\",\n       \"L 219.350483 206.970765 \\n\",\n       \"L 219.646392 207.599129 \\n\",\n       \"L 219.942301 207.954195 \\n\",\n       \"L 220.534119 206.927665 \\n\",\n       \"L 220.830028 206.411105 \\n\",\n       \"L 221.125938 206.158113 \\n\",\n       \"L 221.421847 206.362366 \\n\",\n       \"L 222.013665 207.166278 \\n\",\n       \"L 222.309574 207.742563 \\n\",\n       \"L 222.605483 207.78736 \\n\",\n       \"L 223.789119 206.207043 \\n\",\n       \"L 224.380938 207.026079 \\n\",\n       \"L 224.972756 207.871359 \\n\",\n       \"L 225.268665 207.70812 \\n\",\n       \"L 226.156392 206.46374 \\n\",\n       \"L 226.452301 206.359829 \\n\",\n       \"L 227.044119 207.066544 \\n\",\n       \"L 227.340028 207.622677 \\n\",\n       \"L 227.635938 207.889544 \\n\",\n       \"L 227.931847 207.58724 \\n\",\n       \"L 228.523665 206.557514 \\n\",\n       \"L 228.819574 206.26587 \\n\",\n       \"L 229.115483 206.395159 \\n\",\n       \"L 229.707301 207.256118 \\n\",\n       \"L 230.00321 207.716685 \\n\",\n       \"L 230.299119 207.740719 \\n\",\n       \"L 230.890938 207.076032 \\n\",\n       \"L 231.482756 206.220943 \\n\",\n       \"L 232.074574 207.041315 \\n\",\n       \"L 232.666392 207.875725 \\n\",\n       \"L 232.962301 207.68274 \\n\",\n       \"L 233.850028 206.428503 \\n\",\n       \"L 234.145938 206.333673 \\n\",\n       \"L 234.737756 207.037752 \\n\",\n       \"L 235.329574 207.884845 \\n\",\n       \"L 235.921392 207.017317 \\n\",\n       \"L 236.51321 206.243122 \\n\",\n       \"L 236.809119 206.344455 \\n\",\n       \"L 237.696847 207.622455 \\n\",\n       \"L 237.992756 207.6992 \\n\",\n       \"L 238.584574 207.012921 \\n\",\n       \"L 238.880483 206.464812 \\n\",\n       \"L 239.176392 206.178888 \\n\",\n       \"L 239.472301 206.475997 \\n\",\n       \"L 240.064119 207.471444 \\n\",\n       \"L 240.360028 207.781007 \\n\",\n       \"L 240.655938 207.607179 \\n\",\n       \"L 241.543665 206.327725 \\n\",\n       \"L 241.839574 206.26868 \\n\",\n       \"L 242.431392 206.940827 \\n\",\n       \"L 243.02321 207.77657 \\n\",\n       \"L 243.615028 206.924452 \\n\",\n       \"L 244.206847 206.124057 \\n\",\n       \"L 244.502756 206.259965 \\n\",\n       \"L 245.390483 207.510466 \\n\",\n       \"L 245.686392 207.585527 \\n\",\n       \"L 246.27821 206.885319 \\n\",\n       \"L 246.870028 206.053273 \\n\",\n       \"L 247.165938 206.368959 \\n\",\n       \"L 247.757756 207.354774 \\n\",\n       \"L 248.053665 207.630457 \\n\",\n       \"L 248.349574 207.494509 \\n\",\n       \"L 249.237301 206.222483 \\n\",\n       \"L 249.53321 206.138132 \\n\",\n       \"L 250.125028 206.799916 \\n\",\n       \"L 250.420938 207.34107 \\n\",\n       \"L 250.716847 207.621004 \\n\",\n       \"L 251.012756 207.291526 \\n\",\n       \"L 251.900483 205.991563 \\n\",\n       \"L 252.196392 206.135769 \\n\",\n       \"L 253.084119 207.371042 \\n\",\n       \"L 253.380028 207.437755 \\n\",\n       \"L 253.971847 206.743449 \\n\",\n       \"L 254.563665 205.905945 \\n\",\n       \"L 255.155483 206.720461 \\n\",\n       \"L 255.747301 207.477947 \\n\",\n       \"L 256.04321 207.345455 \\n\",\n       \"L 256.930938 206.076564 \\n\",\n       \"L 257.226847 205.999385 \\n\",\n       \"L 257.818665 206.662502 \\n\",\n       \"L 258.114574 207.175002 \\n\",\n       \"L 258.410483 207.456699 \\n\",\n       \"L 258.706392 207.141897 \\n\",\n       \"L 259.594119 205.848474 \\n\",\n       \"L 259.890028 205.988879 \\n\",\n       \"L 260.777756 207.207367 \\n\",\n       \"L 261.073665 207.271526 \\n\",\n       \"L 261.665483 206.591927 \\n\",\n       \"L 262.257301 205.759555 \\n\",\n       \"L 262.55321 206.07589 \\n\",\n       \"L 263.440938 207.315174 \\n\",\n       \"L 263.736847 207.177204 \\n\",\n       \"L 264.624574 205.921315 \\n\",\n       \"L 264.920483 205.839469 \\n\",\n       \"L 265.512301 206.499803 \\n\",\n       \"L 266.104119 207.290038 \\n\",\n       \"L 266.400028 206.974999 \\n\",\n       \"L 267.287756 205.704794 \\n\",\n       \"L 267.583665 205.821929 \\n\",\n       \"L 268.471392 207.035582 \\n\",\n       \"L 268.767301 207.098833 \\n\",\n       \"L 269.359119 206.425746 \\n\",\n       \"L 269.655028 205.899177 \\n\",\n       \"L 269.950938 205.610932 \\n\",\n       \"L 270.246847 205.909416 \\n\",\n       \"L 271.134574 207.14644 \\n\",\n       \"L 271.430483 207.000097 \\n\",\n       \"L 272.31821 205.760813 \\n\",\n       \"L 272.614119 205.68319 \\n\",\n       \"L 273.205938 206.335526 \\n\",\n       \"L 273.797756 207.122056 \\n\",\n       \"L 274.093665 206.804327 \\n\",\n       \"L 274.981392 205.545203 \\n\",\n       \"L 275.277301 205.664234 \\n\",\n       \"L 276.165028 206.862869 \\n\",\n       \"L 276.460938 206.929562 \\n\",\n       \"L 277.052756 206.257572 \\n\",\n       \"L 277.348665 205.744538 \\n\",\n       \"L 277.644574 205.455961 \\n\",\n       \"L 277.940483 205.749726 \\n\",\n       \"L 278.82821 206.968187 \\n\",\n       \"L 279.124119 206.835847 \\n\",\n       \"L 280.011847 205.604399 \\n\",\n       \"L 280.307756 205.529326 \\n\",\n       \"L 280.899574 206.169979 \\n\",\n       \"L 281.195483 206.670929 \\n\",\n       \"L 281.491392 206.948143 \\n\",\n       \"L 281.787301 206.642359 \\n\",\n       \"L 282.675028 205.388537 \\n\",\n       \"L 282.970937 205.511329 \\n\",\n       \"L 283.858665 206.69655 \\n\",\n       \"L 284.154574 206.763457 \\n\",\n       \"L 284.746392 206.094876 \\n\",\n       \"L 285.33821 205.299895 \\n\",\n       \"L 285.634119 205.593824 \\n\",\n       \"L 286.521847 206.800125 \\n\",\n       \"L 286.817756 206.671459 \\n\",\n       \"L 287.705483 205.454923 \\n\",\n       \"L 288.001392 205.378281 \\n\",\n       \"L 288.59321 206.015462 \\n\",\n       \"L 288.889119 206.50878 \\n\",\n       \"L 289.185028 206.783892 \\n\",\n       \"L 289.480937 206.483014 \\n\",\n       \"L 290.368665 205.241785 \\n\",\n       \"L 290.664574 205.363163 \\n\",\n       \"L 291.552301 206.537508 \\n\",\n       \"L 291.84821 206.604358 \\n\",\n       \"L 292.440028 205.944807 \\n\",\n       \"L 293.031847 205.156372 \\n\",\n       \"L 293.327756 205.442323 \\n\",\n       \"L 294.215483 206.645197 \\n\",\n       \"L 294.511392 206.51625 \\n\",\n       \"L 295.399119 205.31217 \\n\",\n       \"L 295.695028 205.235258 \\n\",\n       \"L 296.286847 205.869927 \\n\",\n       \"L 296.878665 206.631433 \\n\",\n       \"L 297.174574 206.335228 \\n\",\n       \"L 298.062301 205.107338 \\n\",\n       \"L 298.35821 205.222409 \\n\",\n       \"L 299.245938 206.391522 \\n\",\n       \"L 299.541847 206.45577 \\n\",\n       \"L 300.133665 205.803847 \\n\",\n       \"L 300.725483 205.022121 \\n\",\n       \"L 301.021392 205.307223 \\n\",\n       \"L 301.909119 206.502714 \\n\",\n       \"L 302.205028 206.374473 \\n\",\n       \"L 303.092756 205.183752 \\n\",\n       \"L 303.388665 205.103838 \\n\",\n       \"L 303.980483 205.73677 \\n\",\n       \"L 304.572301 206.495764 \\n\",\n       \"L 304.86821 206.202497 \\n\",\n       \"L 305.755938 204.984428 \\n\",\n       \"L 306.051847 205.097463 \\n\",\n       \"L 306.939574 206.259661 \\n\",\n       \"L 307.235483 206.327236 \\n\",\n       \"L 307.827301 205.680831 \\n\",\n       \"L 308.419119 204.905906 \\n\",\n       \"L 308.715028 205.186117 \\n\",\n       \"L 309.602756 206.376338 \\n\",\n       \"L 309.898665 206.254067 \\n\",\n       \"L 310.786392 205.068467 \\n\",\n       \"L 311.082301 204.993122 \\n\",\n       \"L 311.674119 205.621641 \\n\",\n       \"L 312.265938 206.378641 \\n\",\n       \"L 312.561847 206.090453 \\n\",\n       \"L 313.449574 204.876786 \\n\",\n       \"L 313.745483 204.993303 \\n\",\n       \"L 314.63321 206.148943 \\n\",\n       \"L 314.929119 206.220437 \\n\",\n       \"L 315.520938 205.576825 \\n\",\n       \"L 316.112756 204.805485 \\n\",\n       \"L 316.408665 205.087382 \\n\",\n       \"L 317.296392 206.273245 \\n\",\n       \"L 317.592301 206.154609 \\n\",\n       \"L 318.480028 204.977257 \\n\",\n       \"L 318.775937 204.89997 \\n\",\n       \"L 319.367756 205.527373 \\n\",\n       \"L 319.959574 206.285068 \\n\",\n       \"L 320.255483 206.000214 \\n\",\n       \"L 321.14321 204.794731 \\n\",\n       \"L 321.439119 204.907 \\n\",\n       \"L 322.326847 206.066451 \\n\",\n       \"L 322.622756 206.135895 \\n\",\n       \"L 323.214574 205.497591 \\n\",\n       \"L 323.806392 204.730133 \\n\",\n       \"L 324.102301 205.008222 \\n\",\n       \"L 324.990028 206.199294 \\n\",\n       \"L 325.285938 206.078392 \\n\",\n       \"L 326.173665 204.908616 \\n\",\n       \"L 326.469574 204.831129 \\n\",\n       \"L 327.061392 205.45962 \\n\",\n       \"L 327.65321 206.219502 \\n\",\n       \"L 327.949119 205.934796 \\n\",\n       \"L 328.836847 204.734882 \\n\",\n       \"L 329.132756 204.846871 \\n\",\n       \"L 330.020483 206.007647 \\n\",\n       \"L 330.316392 206.079932 \\n\",\n       \"L 330.90821 205.444798 \\n\",\n       \"L 331.500028 204.677554 \\n\",\n       \"L 331.795938 204.956554 \\n\",\n       \"L 332.683665 206.148783 \\n\",\n       \"L 332.979574 206.032348 \\n\",\n       \"L 333.867301 204.862992 \\n\",\n       \"L 334.16321 204.78746 \\n\",\n       \"L 334.755028 205.417158 \\n\",\n       \"L 335.346847 206.17992 \\n\",\n       \"L 335.642756 205.897969 \\n\",\n       \"L 336.530483 204.698244 \\n\",\n       \"L 336.826392 204.812588 \\n\",\n       \"L 337.714119 205.975782 \\n\",\n       \"L 338.010028 206.051295 \\n\",\n       \"L 338.601847 205.41773 \\n\",\n       \"L 339.193665 204.64986 \\n\",\n       \"L 339.489574 204.929635 \\n\",\n       \"L 340.377301 206.127228 \\n\",\n       \"L 340.67321 206.011702 \\n\",\n       \"L 341.560938 204.842535 \\n\",\n       \"L 341.856847 204.768005 \\n\",\n       \"L 342.448665 205.400355 \\n\",\n       \"L 343.040483 206.168005 \\n\",\n       \"L 343.336392 205.886928 \\n\",\n       \"L 344.224119 204.686404 \\n\",\n       \"L 344.520028 204.802219 \\n\",\n       \"L 345.407756 205.97151 \\n\",\n       \"L 345.703665 206.047949 \\n\",\n       \"L 346.295483 205.414674 \\n\",\n       \"L 346.887301 204.644975 \\n\",\n       \"L 347.18321 204.928249 \\n\",\n       \"L 348.070938 206.13115 \\n\",\n       \"L 348.366847 206.017215 \\n\",\n       \"L 349.254574 204.84672 \\n\",\n       \"L 349.550483 204.771371 \\n\",\n       \"L 350.142301 205.407075 \\n\",\n       \"L 350.734119 206.18145 \\n\",\n       \"L 351.030028 205.900472 \\n\",\n       \"L 351.917756 204.698123 \\n\",\n       \"L 352.213665 204.814898 \\n\",\n       \"L 353.101392 205.993093 \\n\",\n       \"L 353.397301 206.069261 \\n\",\n       \"L 353.989119 205.436356 \\n\",\n       \"L 354.580938 204.664304 \\n\",\n       \"L 354.876847 204.947359 \\n\",\n       \"L 355.764574 206.160798 \\n\",\n       \"L 356.060483 206.043587 \\n\",\n       \"L 356.94821 204.872507 \\n\",\n       \"L 357.244119 204.796287 \\n\",\n       \"L 357.835938 205.436815 \\n\",\n       \"L 358.427756 206.21845 \\n\",\n       \"L 358.723665 205.93507 \\n\",\n       \"L 359.611392 204.731005 \\n\",\n       \"L 359.907301 204.847967 \\n\",\n       \"L 360.795028 206.03517 \\n\",\n       \"L 361.090938 206.112802 \\n\",\n       \"L 361.682756 205.478362 \\n\",\n       \"L 362.274574 204.701544 \\n\",\n       \"L 362.570483 204.987847 \\n\",\n       \"L 363.45821 206.207952 \\n\",\n       \"L 363.754119 206.09295 \\n\",\n       \"L 364.641847 204.914848 \\n\",\n       \"L 364.937756 204.840741 \\n\",\n       \"L 365.529574 205.485317 \\n\",\n       \"L 366.121392 206.273481 \\n\",\n       \"L 366.417301 205.989695 \\n\",\n       \"L 367.305028 204.778907 \\n\",\n       \"L 367.600937 204.899769 \\n\",\n       \"L 368.488665 206.094104 \\n\",\n       \"L 368.784574 206.173714 \\n\",\n       \"L 369.376392 205.537209 \\n\",\n       \"L 369.96821 204.754602 \\n\",\n       \"L 370.264119 205.043582 \\n\",\n       \"L 371.151847 206.272412 \\n\",\n       \"L 371.447756 206.156166 \\n\",\n       \"L 372.335483 204.972432 \\n\",\n       \"L 372.631392 204.898506 \\n\",\n       \"L 373.22321 205.547182 \\n\",\n       \"L 373.815028 206.343308 \\n\",\n       \"L 374.110938 206.057443 \\n\",\n       \"L 374.998665 204.841101 \\n\",\n       \"L 375.294574 204.963528 \\n\",\n       \"L 376.182301 206.166677 \\n\",\n       \"L 376.47821 206.247029 \\n\",\n       \"L 377.070028 205.607243 \\n\",\n       \"L 377.661847 204.819036 \\n\",\n       \"L 377.957756 205.110891 \\n\",\n       \"L 378.845483 206.347664 \\n\",\n       \"L 379.141392 206.23128 \\n\",\n       \"L 380.029119 205.039952 \\n\",\n       \"L 380.325028 204.966818 \\n\",\n       \"L 380.916847 205.619537 \\n\",\n       \"L 381.508665 206.422625 \\n\",\n       \"L 381.804574 206.134532 \\n\",\n       \"L 382.692301 204.911782 \\n\",\n       \"L 382.98821 205.035945 \\n\",\n       \"L 383.875938 206.24795 \\n\",\n       \"L 384.171847 206.327884 \\n\",\n       \"L 384.763665 205.68479 \\n\",\n       \"L 385.355483 204.890258 \\n\",\n       \"L 385.651392 205.186807 \\n\",\n       \"L 386.539119 206.43037 \\n\",\n       \"L 386.835028 206.312395 \\n\",\n       \"L 387.722756 205.115812 \\n\",\n       \"L 388.018665 205.039016 \\n\",\n       \"L 388.610483 205.696006 \\n\",\n       \"L 389.202301 206.506382 \\n\",\n       \"L 389.49821 206.217532 \\n\",\n       \"L 390.385938 204.98796 \\n\",\n       \"L 390.681847 205.111842 \\n\",\n       \"L 391.569574 206.333358 \\n\",\n       \"L 391.865483 206.412747 \\n\",\n       \"L 392.457301 205.766563 \\n\",\n       \"L 393.049119 204.966602 \\n\",\n       \"L 393.345028 205.264038 \\n\",\n       \"L 394.232756 206.516321 \\n\",\n       \"L 394.528665 206.395888 \\n\",\n       \"L 395.416392 205.191388 \\n\",\n       \"L 395.712301 205.117125 \\n\",\n       \"L 396.304119 205.777581 \\n\",\n       \"L 396.895938 206.593198 \\n\",\n       \"L 397.191847 206.300001 \\n\",\n       \"L 398.079574 205.063484 \\n\",\n       \"L 398.375483 205.190055 \\n\",\n       \"L 399.26321 206.416603 \\n\",\n       \"L 399.559119 206.497371 \\n\",\n       \"L 400.150937 205.84709 \\n\",\n       \"L 400.742756 205.040653 \\n\",\n       \"L 401.038665 205.34073 \\n\",\n       \"L 401.926392 206.59868 \\n\",\n       \"L 402.222301 206.477497 \\n\",\n       \"L 403.110028 205.266343 \\n\",\n       \"L 403.405937 205.190803 \\n\",\n       \"L 403.997756 205.854741 \\n\",\n       \"L 404.589574 206.67581 \\n\",\n       \"L 404.885483 206.380307 \\n\",\n       \"L 405.77321 205.137864 \\n\",\n       \"L 406.069119 205.264166 \\n\",\n       \"L 406.956847 206.49714 \\n\",\n       \"L 407.252756 206.57847 \\n\",\n       \"L 407.844574 205.925071 \\n\",\n       \"L 408.436392 205.113363 \\n\",\n       \"L 408.732301 205.414859 \\n\",\n       \"L 409.620028 206.678581 \\n\",\n       \"L 409.915938 206.556959 \\n\",\n       \"L 410.803665 205.337466 \\n\",\n       \"L 411.099574 205.264325 \\n\",\n       \"L 411.691392 205.930008 \\n\",\n       \"L 412.28321 206.754006 \\n\",\n       \"L 412.579119 206.45721 \\n\",\n       \"L 413.466847 205.206211 \\n\",\n       \"L 413.762756 205.336125 \\n\",\n       \"L 414.650483 206.571694 \\n\",\n       \"L 414.946392 206.65314 \\n\",\n       \"L 415.53821 205.996186 \\n\",\n       \"L 416.130028 205.179057 \\n\",\n       \"L 416.425938 205.484799 \\n\",\n       \"L 417.313665 206.750292 \\n\",\n       \"L 417.609574 206.628491 \\n\",\n       \"L 418.497301 205.403772 \\n\",\n       \"L 418.79321 205.327984 \\n\",\n       \"L 419.385028 205.995104 \\n\",\n       \"L 419.976847 206.823305 \\n\",\n       \"L 420.272756 206.52525 \\n\",\n       \"L 421.160483 205.269439 \\n\",\n       \"L 421.456392 205.398193 \\n\",\n       \"L 422.344119 206.639451 \\n\",\n       \"L 422.640028 206.718039 \\n\",\n       \"L 423.231847 206.058747 \\n\",\n       \"L 423.823665 205.238136 \\n\",\n       \"L 424.119574 205.544942 \\n\",\n       \"L 425.007301 206.814494 \\n\",\n       \"L 425.30321 206.689399 \\n\",\n       \"L 426.190938 205.461366 \\n\",\n       \"L 426.486847 205.384786 \\n\",\n       \"L 427.078665 206.053812 \\n\",\n       \"L 427.670483 206.884979 \\n\",\n       \"L 427.966392 206.582733 \\n\",\n       \"L 428.854119 205.324551 \\n\",\n       \"L 429.150028 205.452541 \\n\",\n       \"L 430.037756 206.695973 \\n\",\n       \"L 430.333665 206.775171 \\n\",\n       \"L 430.925483 206.113766 \\n\",\n       \"L 431.517301 205.289782 \\n\",\n       \"L 431.81321 205.595166 \\n\",\n       \"L 432.700938 206.867782 \\n\",\n       \"L 432.996847 206.741133 \\n\",\n       \"L 433.884574 205.508719 \\n\",\n       \"L 434.180483 205.432936 \\n\",\n       \"L 434.772301 206.102431 \\n\",\n       \"L 435.364119 206.934758 \\n\",\n       \"L 435.660028 206.630944 \\n\",\n       \"L 436.547756 205.369224 \\n\",\n       \"L 436.843665 205.497759 \\n\",\n       \"L 437.731392 206.742061 \\n\",\n       \"L 437.731392 206.742061 \\n\",\n       \"\\\" style=\\\"fill:none;stroke:#1f77b4;stroke-linecap:square;stroke-width:1.5;\\\"/>\\n\",\n       \"   </g>\\n\",\n       \"   <g id=\\\"patch_8\\\">\\n\",\n       \"    <path d=\\\"M 64.885937 267.84 \\n\",\n       \"L 64.885937 159.12 \\n\",\n       \"\\\" style=\\\"fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;stroke-width:0.8;\\\"/>\\n\",\n       \"   </g>\\n\",\n       \"   <g id=\\\"patch_9\\\">\\n\",\n       \"    <path d=\\\"M 455.485938 267.84 \\n\",\n       \"L 455.485938 159.12 \\n\",\n       \"\\\" style=\\\"fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;stroke-width:0.8;\\\"/>\\n\",\n       \"   </g>\\n\",\n       \"   <g id=\\\"patch_10\\\">\\n\",\n       \"    <path d=\\\"M 64.885938 267.84 \\n\",\n       \"L 455.485937 267.84 \\n\",\n       \"\\\" style=\\\"fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;stroke-width:0.8;\\\"/>\\n\",\n       \"   </g>\\n\",\n       \"   <g id=\\\"patch_11\\\">\\n\",\n       \"    <path d=\\\"M 64.885938 159.12 \\n\",\n       \"L 455.485937 159.12 \\n\",\n       \"\\\" style=\\\"fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;stroke-width:0.8;\\\"/>\\n\",\n       \"   </g>\\n\",\n       \"  </g>\\n\",\n       \"  <g id=\\\"axes_3\\\">\\n\",\n       \"   <g id=\\\"patch_12\\\">\\n\",\n       \"    <path d=\\\"M 64.885937 376.56 \\n\",\n       \"L 455.485938 376.56 \\n\",\n       \"L 455.485938 267.84 \\n\",\n       \"L 64.885937 267.84 \\n\",\n       \"z\\n\",\n       \"\\\" style=\\\"fill:#ffffff;\\\"/>\\n\",\n       \"   </g>\\n\",\n       \"   <g id=\\\"matplotlib.axis_5\\\">\\n\",\n       \"    <g id=\\\"xtick_15\\\">\\n\",\n       \"     <g id=\\\"line2d_24\\\">\\n\",\n       \"      <g>\\n\",\n       \"       <use style=\\\"stroke:#000000;stroke-width:0.8;\\\" x=\\\"82.640483\\\" xlink:href=\\\"#md45cc03867\\\" y=\\\"376.56\\\"/>\\n\",\n       \"      </g>\\n\",\n       \"     </g>\\n\",\n       \"     <g id=\\\"text_11\\\">\\n\",\n       \"      <!-- 0 -->\\n\",\n       \"      <g transform=\\\"translate(79.459233 391.158437)scale(0.1 -0.1)\\\">\\n\",\n       \"       <use xlink:href=\\\"#DejaVuSans-48\\\"/>\\n\",\n       \"      </g>\\n\",\n       \"     </g>\\n\",\n       \"    </g>\\n\",\n       \"    <g id=\\\"xtick_16\\\">\\n\",\n       \"     <g id=\\\"line2d_25\\\">\\n\",\n       \"      <g>\\n\",\n       \"       <use style=\\\"stroke:#000000;stroke-width:0.8;\\\" x=\\\"141.773024\\\" xlink:href=\\\"#md45cc03867\\\" y=\\\"376.56\\\"/>\\n\",\n       \"      </g>\\n\",\n       \"     </g>\\n\",\n       \"     <g id=\\\"text_12\\\">\\n\",\n       \"      <!-- 5 -->\\n\",\n       \"      <g transform=\\\"translate(138.591774 391.158437)scale(0.1 -0.1)\\\">\\n\",\n       \"       <use xlink:href=\\\"#DejaVuSans-53\\\"/>\\n\",\n       \"      </g>\\n\",\n       \"     </g>\\n\",\n       \"    </g>\\n\",\n       \"    <g id=\\\"xtick_17\\\">\\n\",\n       \"     <g id=\\\"line2d_26\\\">\\n\",\n       \"      <g>\\n\",\n       \"       <use style=\\\"stroke:#000000;stroke-width:0.8;\\\" x=\\\"200.905565\\\" xlink:href=\\\"#md45cc03867\\\" y=\\\"376.56\\\"/>\\n\",\n       \"      </g>\\n\",\n       \"     </g>\\n\",\n       \"     <g id=\\\"text_13\\\">\\n\",\n       \"      <!-- 10 -->\\n\",\n       \"      <g transform=\\\"translate(194.543065 391.158437)scale(0.1 -0.1)\\\">\\n\",\n       \"       <use xlink:href=\\\"#DejaVuSans-49\\\"/>\\n\",\n       \"       <use x=\\\"63.623047\\\" xlink:href=\\\"#DejaVuSans-48\\\"/>\\n\",\n       \"      </g>\\n\",\n       \"     </g>\\n\",\n       \"    </g>\\n\",\n       \"    <g id=\\\"xtick_18\\\">\\n\",\n       \"     <g id=\\\"line2d_27\\\">\\n\",\n       \"      <g>\\n\",\n       \"       <use style=\\\"stroke:#000000;stroke-width:0.8;\\\" x=\\\"260.038106\\\" xlink:href=\\\"#md45cc03867\\\" y=\\\"376.56\\\"/>\\n\",\n       \"      </g>\\n\",\n       \"     </g>\\n\",\n       \"     <g id=\\\"text_14\\\">\\n\",\n       \"      <!-- 15 -->\\n\",\n       \"      <g transform=\\\"translate(253.675606 391.158437)scale(0.1 -0.1)\\\">\\n\",\n       \"       <use xlink:href=\\\"#DejaVuSans-49\\\"/>\\n\",\n       \"       <use x=\\\"63.623047\\\" xlink:href=\\\"#DejaVuSans-53\\\"/>\\n\",\n       \"      </g>\\n\",\n       \"     </g>\\n\",\n       \"    </g>\\n\",\n       \"    <g id=\\\"xtick_19\\\">\\n\",\n       \"     <g id=\\\"line2d_28\\\">\\n\",\n       \"      <g>\\n\",\n       \"       <use style=\\\"stroke:#000000;stroke-width:0.8;\\\" x=\\\"319.170647\\\" xlink:href=\\\"#md45cc03867\\\" y=\\\"376.56\\\"/>\\n\",\n       \"      </g>\\n\",\n       \"     </g>\\n\",\n       \"     <g id=\\\"text_15\\\">\\n\",\n       \"      <!-- 20 -->\\n\",\n       \"      <g transform=\\\"translate(312.808147 391.158437)scale(0.1 -0.1)\\\">\\n\",\n       \"       <use xlink:href=\\\"#DejaVuSans-50\\\"/>\\n\",\n       \"       <use x=\\\"63.623047\\\" xlink:href=\\\"#DejaVuSans-48\\\"/>\\n\",\n       \"      </g>\\n\",\n       \"     </g>\\n\",\n       \"    </g>\\n\",\n       \"    <g id=\\\"xtick_20\\\">\\n\",\n       \"     <g id=\\\"line2d_29\\\">\\n\",\n       \"      <g>\\n\",\n       \"       <use style=\\\"stroke:#000000;stroke-width:0.8;\\\" x=\\\"378.303188\\\" xlink:href=\\\"#md45cc03867\\\" y=\\\"376.56\\\"/>\\n\",\n       \"      </g>\\n\",\n       \"     </g>\\n\",\n       \"     <g id=\\\"text_16\\\">\\n\",\n       \"      <!-- 25 -->\\n\",\n       \"      <g transform=\\\"translate(371.940688 391.158437)scale(0.1 -0.1)\\\">\\n\",\n       \"       <use xlink:href=\\\"#DejaVuSans-50\\\"/>\\n\",\n       \"       <use x=\\\"63.623047\\\" xlink:href=\\\"#DejaVuSans-53\\\"/>\\n\",\n       \"      </g>\\n\",\n       \"     </g>\\n\",\n       \"    </g>\\n\",\n       \"    <g id=\\\"xtick_21\\\">\\n\",\n       \"     <g id=\\\"line2d_30\\\">\\n\",\n       \"      <g>\\n\",\n       \"       <use style=\\\"stroke:#000000;stroke-width:0.8;\\\" x=\\\"437.435729\\\" xlink:href=\\\"#md45cc03867\\\" y=\\\"376.56\\\"/>\\n\",\n       \"      </g>\\n\",\n       \"     </g>\\n\",\n       \"     <g id=\\\"text_17\\\">\\n\",\n       \"      <!-- 30 -->\\n\",\n       \"      <defs>\\n\",\n       \"       <path d=\\\"M 40.578125 39.3125 \\n\",\n       \"Q 47.65625 37.796875 51.625 33 \\n\",\n       \"Q 55.609375 28.21875 55.609375 21.1875 \\n\",\n       \"Q 55.609375 10.40625 48.1875 4.484375 \\n\",\n       \"Q 40.765625 -1.421875 27.09375 -1.421875 \\n\",\n       \"Q 22.515625 -1.421875 17.65625 -0.515625 \\n\",\n       \"Q 12.796875 0.390625 7.625 2.203125 \\n\",\n       \"L 7.625 11.71875 \\n\",\n       \"Q 11.71875 9.328125 16.59375 8.109375 \\n\",\n       \"Q 21.484375 6.890625 26.8125 6.890625 \\n\",\n       \"Q 36.078125 6.890625 40.9375 10.546875 \\n\",\n       \"Q 45.796875 14.203125 45.796875 21.1875 \\n\",\n       \"Q 45.796875 27.640625 41.28125 31.265625 \\n\",\n       \"Q 36.765625 34.90625 28.71875 34.90625 \\n\",\n       \"L 20.21875 34.90625 \\n\",\n       \"L 20.21875 43.015625 \\n\",\n       \"L 29.109375 43.015625 \\n\",\n       \"Q 36.375 43.015625 40.234375 45.921875 \\n\",\n       \"Q 44.09375 48.828125 44.09375 54.296875 \\n\",\n       \"Q 44.09375 59.90625 40.109375 62.90625 \\n\",\n       \"Q 36.140625 65.921875 28.71875 65.921875 \\n\",\n       \"Q 24.65625 65.921875 20.015625 65.03125 \\n\",\n       \"Q 15.375 64.15625 9.8125 62.3125 \\n\",\n       \"L 9.8125 71.09375 \\n\",\n       \"Q 15.4375 72.65625 20.34375 73.4375 \\n\",\n       \"Q 25.25 74.21875 29.59375 74.21875 \\n\",\n       \"Q 40.828125 74.21875 47.359375 69.109375 \\n\",\n       \"Q 53.90625 64.015625 53.90625 55.328125 \\n\",\n       \"Q 53.90625 49.265625 50.4375 45.09375 \\n\",\n       \"Q 46.96875 40.921875 40.578125 39.3125 \\n\",\n       \"z\\n\",\n       \"\\\" id=\\\"DejaVuSans-51\\\"/>\\n\",\n       \"      </defs>\\n\",\n       \"      <g transform=\\\"translate(431.073229 391.158437)scale(0.1 -0.1)\\\">\\n\",\n       \"       <use xlink:href=\\\"#DejaVuSans-51\\\"/>\\n\",\n       \"       <use x=\\\"63.623047\\\" xlink:href=\\\"#DejaVuSans-48\\\"/>\\n\",\n       \"      </g>\\n\",\n       \"     </g>\\n\",\n       \"    </g>\\n\",\n       \"    <g id=\\\"text_18\\\">\\n\",\n       \"     <!-- time [s] -->\\n\",\n       \"     <defs>\\n\",\n       \"      <path d=\\\"M 18.3125 70.21875 \\n\",\n       \"L 18.3125 54.6875 \\n\",\n       \"L 36.8125 54.6875 \\n\",\n       \"L 36.8125 47.703125 \\n\",\n       \"L 18.3125 47.703125 \\n\",\n       \"L 18.3125 18.015625 \\n\",\n       \"Q 18.3125 11.328125 20.140625 9.421875 \\n\",\n       \"Q 21.96875 7.515625 27.59375 7.515625 \\n\",\n       \"L 36.8125 7.515625 \\n\",\n       \"L 36.8125 0 \\n\",\n       \"L 27.59375 0 \\n\",\n       \"Q 17.1875 0 13.234375 3.875 \\n\",\n       \"Q 9.28125 7.765625 9.28125 18.015625 \\n\",\n       \"L 9.28125 47.703125 \\n\",\n       \"L 2.6875 47.703125 \\n\",\n       \"L 2.6875 54.6875 \\n\",\n       \"L 9.28125 54.6875 \\n\",\n       \"L 9.28125 70.21875 \\n\",\n       \"z\\n\",\n       \"\\\" id=\\\"DejaVuSans-116\\\"/>\\n\",\n       \"      <path d=\\\"M 9.421875 54.6875 \\n\",\n       \"L 18.40625 54.6875 \\n\",\n       \"L 18.40625 0 \\n\",\n       \"L 9.421875 0 \\n\",\n       \"z\\n\",\n       \"M 9.421875 75.984375 \\n\",\n       \"L 18.40625 75.984375 \\n\",\n       \"L 18.40625 64.59375 \\n\",\n       \"L 9.421875 64.59375 \\n\",\n       \"z\\n\",\n       \"\\\" id=\\\"DejaVuSans-105\\\"/>\\n\",\n       \"     </defs>\\n\",\n       \"     <g transform=\\\"translate(240.794531 404.836562)scale(0.1 -0.1)\\\">\\n\",\n       \"      <use xlink:href=\\\"#DejaVuSans-116\\\"/>\\n\",\n       \"      <use x=\\\"39.208984\\\" xlink:href=\\\"#DejaVuSans-105\\\"/>\\n\",\n       \"      <use x=\\\"66.992188\\\" xlink:href=\\\"#DejaVuSans-109\\\"/>\\n\",\n       \"      <use x=\\\"164.404297\\\" xlink:href=\\\"#DejaVuSans-101\\\"/>\\n\",\n       \"      <use x=\\\"225.927734\\\" xlink:href=\\\"#DejaVuSans-32\\\"/>\\n\",\n       \"      <use x=\\\"257.714844\\\" xlink:href=\\\"#DejaVuSans-91\\\"/>\\n\",\n       \"      <use x=\\\"296.728516\\\" xlink:href=\\\"#DejaVuSans-115\\\"/>\\n\",\n       \"      <use x=\\\"348.828125\\\" xlink:href=\\\"#DejaVuSans-93\\\"/>\\n\",\n       \"     </g>\\n\",\n       \"    </g>\\n\",\n       \"   </g>\\n\",\n       \"   <g id=\\\"matplotlib.axis_6\\\">\\n\",\n       \"    <g id=\\\"ytick_8\\\">\\n\",\n       \"     <g id=\\\"line2d_31\\\">\\n\",\n       \"      <g>\\n\",\n       \"       <use style=\\\"stroke:#000000;stroke-width:0.8;\\\" x=\\\"64.885937\\\" xlink:href=\\\"#mf5e7fea873\\\" y=\\\"349.568015\\\"/>\\n\",\n       \"      </g>\\n\",\n       \"     </g>\\n\",\n       \"     <g id=\\\"text_19\\\">\\n\",\n       \"      <!-- −0.5 -->\\n\",\n       \"      <g transform=\\\"translate(33.603125 353.367233)scale(0.1 -0.1)\\\">\\n\",\n       \"       <use xlink:href=\\\"#DejaVuSans-8722\\\"/>\\n\",\n       \"       <use x=\\\"83.789062\\\" xlink:href=\\\"#DejaVuSans-48\\\"/>\\n\",\n       \"       <use x=\\\"147.412109\\\" xlink:href=\\\"#DejaVuSans-46\\\"/>\\n\",\n       \"       <use x=\\\"179.199219\\\" xlink:href=\\\"#DejaVuSans-53\\\"/>\\n\",\n       \"      </g>\\n\",\n       \"     </g>\\n\",\n       \"    </g>\\n\",\n       \"    <g id=\\\"ytick_9\\\">\\n\",\n       \"     <g id=\\\"line2d_32\\\">\\n\",\n       \"      <g>\\n\",\n       \"       <use style=\\\"stroke:#000000;stroke-width:0.8;\\\" x=\\\"64.885937\\\" xlink:href=\\\"#mf5e7fea873\\\" y=\\\"321.546527\\\"/>\\n\",\n       \"      </g>\\n\",\n       \"     </g>\\n\",\n       \"     <g id=\\\"text_20\\\">\\n\",\n       \"      <!-- 0.0 -->\\n\",\n       \"      <g transform=\\\"translate(41.982812 325.345746)scale(0.1 -0.1)\\\">\\n\",\n       \"       <use xlink:href=\\\"#DejaVuSans-48\\\"/>\\n\",\n       \"       <use x=\\\"63.623047\\\" xlink:href=\\\"#DejaVuSans-46\\\"/>\\n\",\n       \"       <use x=\\\"95.410156\\\" xlink:href=\\\"#DejaVuSans-48\\\"/>\\n\",\n       \"      </g>\\n\",\n       \"     </g>\\n\",\n       \"    </g>\\n\",\n       \"    <g id=\\\"ytick_10\\\">\\n\",\n       \"     <g id=\\\"line2d_33\\\">\\n\",\n       \"      <g>\\n\",\n       \"       <use style=\\\"stroke:#000000;stroke-width:0.8;\\\" x=\\\"64.885937\\\" xlink:href=\\\"#mf5e7fea873\\\" y=\\\"293.52504\\\"/>\\n\",\n       \"      </g>\\n\",\n       \"     </g>\\n\",\n       \"     <g id=\\\"text_21\\\">\\n\",\n       \"      <!-- 0.5 -->\\n\",\n       \"      <g transform=\\\"translate(41.982812 297.324259)scale(0.1 -0.1)\\\">\\n\",\n       \"       <use xlink:href=\\\"#DejaVuSans-48\\\"/>\\n\",\n       \"       <use x=\\\"63.623047\\\" xlink:href=\\\"#DejaVuSans-46\\\"/>\\n\",\n       \"       <use x=\\\"95.410156\\\" xlink:href=\\\"#DejaVuSans-53\\\"/>\\n\",\n       \"      </g>\\n\",\n       \"     </g>\\n\",\n       \"    </g>\\n\",\n       \"    <g id=\\\"text_22\\\">\\n\",\n       \"     <!-- Vz [m/s] -->\\n\",\n       \"     <defs>\\n\",\n       \"      <path d=\\\"M 5.515625 54.6875 \\n\",\n       \"L 48.1875 54.6875 \\n\",\n       \"L 48.1875 46.484375 \\n\",\n       \"L 14.40625 7.171875 \\n\",\n       \"L 48.1875 7.171875 \\n\",\n       \"L 48.1875 0 \\n\",\n       \"L 4.296875 0 \\n\",\n       \"L 4.296875 8.203125 \\n\",\n       \"L 38.09375 47.515625 \\n\",\n       \"L 5.515625 47.515625 \\n\",\n       \"z\\n\",\n       \"\\\" id=\\\"DejaVuSans-122\\\"/>\\n\",\n       \"     </defs>\\n\",\n       \"     <g transform=\\\"translate(27.523437 342.894531)rotate(-90)scale(0.1 -0.1)\\\">\\n\",\n       \"      <use xlink:href=\\\"#DejaVuSans-86\\\"/>\\n\",\n       \"      <use x=\\\"68.408203\\\" xlink:href=\\\"#DejaVuSans-122\\\"/>\\n\",\n       \"      <use x=\\\"120.898438\\\" xlink:href=\\\"#DejaVuSans-32\\\"/>\\n\",\n       \"      <use x=\\\"152.685547\\\" xlink:href=\\\"#DejaVuSans-91\\\"/>\\n\",\n       \"      <use x=\\\"191.699219\\\" xlink:href=\\\"#DejaVuSans-109\\\"/>\\n\",\n       \"      <use x=\\\"289.111328\\\" xlink:href=\\\"#DejaVuSans-47\\\"/>\\n\",\n       \"      <use x=\\\"322.802734\\\" xlink:href=\\\"#DejaVuSans-115\\\"/>\\n\",\n       \"      <use x=\\\"374.902344\\\" xlink:href=\\\"#DejaVuSans-93\\\"/>\\n\",\n       \"     </g>\\n\",\n       \"    </g>\\n\",\n       \"   </g>\\n\",\n       \"   <g id=\\\"line2d_34\\\">\\n\",\n       \"    <path clip-path=\\\"url(#p86c5eb251c)\\\" d=\\\"M 82.640483 363.60491 \\n\",\n       \"L 89.150483 363.562797 \\n\",\n       \"L 89.446392 363.416467 \\n\",\n       \"L 89.742301 363.116468 \\n\",\n       \"L 90.03821 362.587633 \\n\",\n       \"L 90.334119 361.748864 \\n\",\n       \"L 90.925938 358.835658 \\n\",\n       \"L 91.517756 353.890888 \\n\",\n       \"L 92.109574 346.708944 \\n\",\n       \"L 92.997301 332.057057 \\n\",\n       \"L 95.660483 281.684871 \\n\",\n       \"L 96.252301 275.423084 \\n\",\n       \"L 96.54821 273.630922 \\n\",\n       \"L 96.844119 272.781818 \\n\",\n       \"L 97.140028 272.883364 \\n\",\n       \"L 97.435938 273.920915 \\n\",\n       \"L 97.731847 275.85366 \\n\",\n       \"L 98.323665 282.162495 \\n\",\n       \"L 99.211392 296.299819 \\n\",\n       \"L 101.874574 343.682471 \\n\",\n       \"L 102.466392 350.66031 \\n\",\n       \"L 103.05821 355.647013 \\n\",\n       \"L 103.650028 358.783232 \\n\",\n       \"L 104.241847 360.307847 \\n\",\n       \"L 104.537756 360.554374 \\n\",\n       \"L 104.833665 360.507667 \\n\",\n       \"L 105.129574 360.212014 \\n\",\n       \"L 105.721392 359.063095 \\n\",\n       \"L 107.496847 354.665195 \\n\",\n       \"L 108.088665 354.0409 \\n\",\n       \"L 108.384574 354.021201 \\n\",\n       \"L 108.680483 354.213527 \\n\",\n       \"L 108.976392 354.622009 \\n\",\n       \"L 109.56821 356.060213 \\n\",\n       \"L 110.160028 358.214032 \\n\",\n       \"L 111.343665 363.724234 \\n\",\n       \"L 112.527301 368.862594 \\n\",\n       \"L 113.119119 370.56478 \\n\",\n       \"L 113.710938 371.464049 \\n\",\n       \"L 114.006847 371.618182 \\n\",\n       \"L 114.302756 371.598625 \\n\",\n       \"L 114.894574 371.157346 \\n\",\n       \"L 115.782301 369.916342 \\n\",\n       \"L 116.965938 368.227494 \\n\",\n       \"L 117.853665 367.396071 \\n\",\n       \"L 118.741392 366.943017 \\n\",\n       \"L 122.292301 365.630597 \\n\",\n       \"L 123.475938 365.23562 \\n\",\n       \"L 124.363665 365.136066 \\n\",\n       \"L 125.547301 365.231859 \\n\",\n       \"L 127.618665 365.444729 \\n\",\n       \"L 129.09821 365.319178 \\n\",\n       \"L 131.761392 365.010112 \\n\",\n       \"L 136.791847 364.717109 \\n\",\n       \"L 140.046847 364.464084 \\n\",\n       \"L 145.077301 364.11399 \\n\",\n       \"L 156.321847 363.408189 \\n\",\n       \"L 170.821392 362.650691 \\n\",\n       \"L 184.43321 362.155084 \\n\",\n       \"L 198.045028 361.880463 \\n\",\n       \"L 211.952756 361.82296 \\n\",\n       \"L 226.74821 361.985194 \\n\",\n       \"L 243.910938 362.40405 \\n\",\n       \"L 269.655028 363.289187 \\n\",\n       \"L 298.062301 364.208634 \\n\",\n       \"L 316.112756 364.566463 \\n\",\n       \"L 333.275483 364.684578 \\n\",\n       \"L 351.917756 364.583303 \\n\",\n       \"L 375.886392 364.212258 \\n\",\n       \"L 431.81321 363.272509 \\n\",\n       \"L 437.731392 363.218669 \\n\",\n       \"L 437.731392 363.218669 \\n\",\n       \"\\\" style=\\\"fill:none;stroke:#1f77b4;stroke-linecap:square;stroke-width:1.5;\\\"/>\\n\",\n       \"   </g>\\n\",\n       \"   <g id=\\\"patch_13\\\">\\n\",\n       \"    <path d=\\\"M 64.885937 376.56 \\n\",\n       \"L 64.885937 267.84 \\n\",\n       \"\\\" style=\\\"fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;stroke-width:0.8;\\\"/>\\n\",\n       \"   </g>\\n\",\n       \"   <g id=\\\"patch_14\\\">\\n\",\n       \"    <path d=\\\"M 455.485938 376.56 \\n\",\n       \"L 455.485938 267.84 \\n\",\n       \"\\\" style=\\\"fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;stroke-width:0.8;\\\"/>\\n\",\n       \"   </g>\\n\",\n       \"   <g id=\\\"patch_15\\\">\\n\",\n       \"    <path d=\\\"M 64.885938 376.56 \\n\",\n       \"L 455.485937 376.56 \\n\",\n       \"\\\" style=\\\"fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;stroke-width:0.8;\\\"/>\\n\",\n       \"   </g>\\n\",\n       \"   <g id=\\\"patch_16\\\">\\n\",\n       \"    <path d=\\\"M 64.885938 267.84 \\n\",\n       \"L 455.485937 267.84 \\n\",\n       \"\\\" style=\\\"fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;stroke-width:0.8;\\\"/>\\n\",\n       \"   </g>\\n\",\n       \"  </g>\\n\",\n       \"  <g id=\\\"text_23\\\">\\n\",\n       \"   <!-- Linear RBM velocities. T-Tail model in a 20% 1-cos gust encounter -->\\n\",\n       \"   <defs>\\n\",\n       \"    <path d=\\\"M 9.8125 72.90625 \\n\",\n       \"L 19.671875 72.90625 \\n\",\n       \"L 19.671875 8.296875 \\n\",\n       \"L 55.171875 8.296875 \\n\",\n       \"L 55.171875 0 \\n\",\n       \"L 9.8125 0 \\n\",\n       \"z\\n\",\n       \"\\\" id=\\\"DejaVuSans-76\\\"/>\\n\",\n       \"    <path d=\\\"M 54.890625 33.015625 \\n\",\n       \"L 54.890625 0 \\n\",\n       \"L 45.90625 0 \\n\",\n       \"L 45.90625 32.71875 \\n\",\n       \"Q 45.90625 40.484375 42.875 44.328125 \\n\",\n       \"Q 39.84375 48.1875 33.796875 48.1875 \\n\",\n       \"Q 26.515625 48.1875 22.3125 43.546875 \\n\",\n       \"Q 18.109375 38.921875 18.109375 30.90625 \\n\",\n       \"L 18.109375 0 \\n\",\n       \"L 9.078125 0 \\n\",\n       \"L 9.078125 54.6875 \\n\",\n       \"L 18.109375 54.6875 \\n\",\n       \"L 18.109375 46.1875 \\n\",\n       \"Q 21.34375 51.125 25.703125 53.5625 \\n\",\n       \"Q 30.078125 56 35.796875 56 \\n\",\n       \"Q 45.21875 56 50.046875 50.171875 \\n\",\n       \"Q 54.890625 44.34375 54.890625 33.015625 \\n\",\n       \"z\\n\",\n       \"\\\" id=\\\"DejaVuSans-110\\\"/>\\n\",\n       \"    <path d=\\\"M 34.28125 27.484375 \\n\",\n       \"Q 23.390625 27.484375 19.1875 25 \\n\",\n       \"Q 14.984375 22.515625 14.984375 16.5 \\n\",\n       \"Q 14.984375 11.71875 18.140625 8.90625 \\n\",\n       \"Q 21.296875 6.109375 26.703125 6.109375 \\n\",\n       \"Q 34.1875 6.109375 38.703125 11.40625 \\n\",\n       \"Q 43.21875 16.703125 43.21875 25.484375 \\n\",\n       \"L 43.21875 27.484375 \\n\",\n       \"z\\n\",\n       \"M 52.203125 31.203125 \\n\",\n       \"L 52.203125 0 \\n\",\n       \"L 43.21875 0 \\n\",\n       \"L 43.21875 8.296875 \\n\",\n       \"Q 40.140625 3.328125 35.546875 0.953125 \\n\",\n       \"Q 30.953125 -1.421875 24.3125 -1.421875 \\n\",\n       \"Q 15.921875 -1.421875 10.953125 3.296875 \\n\",\n       \"Q 6 8.015625 6 15.921875 \\n\",\n       \"Q 6 25.140625 12.171875 29.828125 \\n\",\n       \"Q 18.359375 34.515625 30.609375 34.515625 \\n\",\n       \"L 43.21875 34.515625 \\n\",\n       \"L 43.21875 35.40625 \\n\",\n       \"Q 43.21875 41.609375 39.140625 45 \\n\",\n       \"Q 35.0625 48.390625 27.6875 48.390625 \\n\",\n       \"Q 23 48.390625 18.546875 47.265625 \\n\",\n       \"Q 14.109375 46.140625 10.015625 43.890625 \\n\",\n       \"L 10.015625 52.203125 \\n\",\n       \"Q 14.9375 54.109375 19.578125 55.046875 \\n\",\n       \"Q 24.21875 56 28.609375 56 \\n\",\n       \"Q 40.484375 56 46.34375 49.84375 \\n\",\n       \"Q 52.203125 43.703125 52.203125 31.203125 \\n\",\n       \"z\\n\",\n       \"\\\" id=\\\"DejaVuSans-97\\\"/>\\n\",\n       \"    <path d=\\\"M 41.109375 46.296875 \\n\",\n       \"Q 39.59375 47.171875 37.8125 47.578125 \\n\",\n       \"Q 36.03125 48 33.890625 48 \\n\",\n       \"Q 26.265625 48 22.1875 43.046875 \\n\",\n       \"Q 18.109375 38.09375 18.109375 28.8125 \\n\",\n       \"L 18.109375 0 \\n\",\n       \"L 9.078125 0 \\n\",\n       \"L 9.078125 54.6875 \\n\",\n       \"L 18.109375 54.6875 \\n\",\n       \"L 18.109375 46.1875 \\n\",\n       \"Q 20.953125 51.171875 25.484375 53.578125 \\n\",\n       \"Q 30.03125 56 36.53125 56 \\n\",\n       \"Q 37.453125 56 38.578125 55.875 \\n\",\n       \"Q 39.703125 55.765625 41.0625 55.515625 \\n\",\n       \"z\\n\",\n       \"\\\" id=\\\"DejaVuSans-114\\\"/>\\n\",\n       \"    <path d=\\\"M 44.390625 34.1875 \\n\",\n       \"Q 47.5625 33.109375 50.5625 29.59375 \\n\",\n       \"Q 53.5625 26.078125 56.59375 19.921875 \\n\",\n       \"L 66.609375 0 \\n\",\n       \"L 56 0 \\n\",\n       \"L 46.6875 18.703125 \\n\",\n       \"Q 43.0625 26.03125 39.671875 28.421875 \\n\",\n       \"Q 36.28125 30.8125 30.421875 30.8125 \\n\",\n       \"L 19.671875 30.8125 \\n\",\n       \"L 19.671875 0 \\n\",\n       \"L 9.8125 0 \\n\",\n       \"L 9.8125 72.90625 \\n\",\n       \"L 32.078125 72.90625 \\n\",\n       \"Q 44.578125 72.90625 50.734375 67.671875 \\n\",\n       \"Q 56.890625 62.453125 56.890625 51.90625 \\n\",\n       \"Q 56.890625 45.015625 53.6875 40.46875 \\n\",\n       \"Q 50.484375 35.9375 44.390625 34.1875 \\n\",\n       \"z\\n\",\n       \"M 19.671875 64.796875 \\n\",\n       \"L 19.671875 38.921875 \\n\",\n       \"L 32.078125 38.921875 \\n\",\n       \"Q 39.203125 38.921875 42.84375 42.21875 \\n\",\n       \"Q 46.484375 45.515625 46.484375 51.90625 \\n\",\n       \"Q 46.484375 58.296875 42.84375 61.546875 \\n\",\n       \"Q 39.203125 64.796875 32.078125 64.796875 \\n\",\n       \"z\\n\",\n       \"\\\" id=\\\"DejaVuSans-82\\\"/>\\n\",\n       \"    <path d=\\\"M 19.671875 34.8125 \\n\",\n       \"L 19.671875 8.109375 \\n\",\n       \"L 35.5 8.109375 \\n\",\n       \"Q 43.453125 8.109375 47.28125 11.40625 \\n\",\n       \"Q 51.125 14.703125 51.125 21.484375 \\n\",\n       \"Q 51.125 28.328125 47.28125 31.5625 \\n\",\n       \"Q 43.453125 34.8125 35.5 34.8125 \\n\",\n       \"z\\n\",\n       \"M 19.671875 64.796875 \\n\",\n       \"L 19.671875 42.828125 \\n\",\n       \"L 34.28125 42.828125 \\n\",\n       \"Q 41.5 42.828125 45.03125 45.53125 \\n\",\n       \"Q 48.578125 48.25 48.578125 53.8125 \\n\",\n       \"Q 48.578125 59.328125 45.03125 62.0625 \\n\",\n       \"Q 41.5 64.796875 34.28125 64.796875 \\n\",\n       \"z\\n\",\n       \"M 9.8125 72.90625 \\n\",\n       \"L 35.015625 72.90625 \\n\",\n       \"Q 46.296875 72.90625 52.390625 68.21875 \\n\",\n       \"Q 58.5 63.53125 58.5 54.890625 \\n\",\n       \"Q 58.5 48.1875 55.375 44.234375 \\n\",\n       \"Q 52.25 40.28125 46.1875 39.3125 \\n\",\n       \"Q 53.46875 37.75 57.5 32.78125 \\n\",\n       \"Q 61.53125 27.828125 61.53125 20.40625 \\n\",\n       \"Q 61.53125 10.640625 54.890625 5.3125 \\n\",\n       \"Q 48.25 0 35.984375 0 \\n\",\n       \"L 9.8125 0 \\n\",\n       \"z\\n\",\n       \"\\\" id=\\\"DejaVuSans-66\\\"/>\\n\",\n       \"    <path d=\\\"M 9.8125 72.90625 \\n\",\n       \"L 24.515625 72.90625 \\n\",\n       \"L 43.109375 23.296875 \\n\",\n       \"L 61.8125 72.90625 \\n\",\n       \"L 76.515625 72.90625 \\n\",\n       \"L 76.515625 0 \\n\",\n       \"L 66.890625 0 \\n\",\n       \"L 66.890625 64.015625 \\n\",\n       \"L 48.09375 14.015625 \\n\",\n       \"L 38.1875 14.015625 \\n\",\n       \"L 19.390625 64.015625 \\n\",\n       \"L 19.390625 0 \\n\",\n       \"L 9.8125 0 \\n\",\n       \"z\\n\",\n       \"\\\" id=\\\"DejaVuSans-77\\\"/>\\n\",\n       \"    <path d=\\\"M 2.984375 54.6875 \\n\",\n       \"L 12.5 54.6875 \\n\",\n       \"L 29.59375 8.796875 \\n\",\n       \"L 46.6875 54.6875 \\n\",\n       \"L 56.203125 54.6875 \\n\",\n       \"L 35.6875 0 \\n\",\n       \"L 23.484375 0 \\n\",\n       \"z\\n\",\n       \"\\\" id=\\\"DejaVuSans-118\\\"/>\\n\",\n       \"    <path d=\\\"M 9.421875 75.984375 \\n\",\n       \"L 18.40625 75.984375 \\n\",\n       \"L 18.40625 0 \\n\",\n       \"L 9.421875 0 \\n\",\n       \"z\\n\",\n       \"\\\" id=\\\"DejaVuSans-108\\\"/>\\n\",\n       \"    <path d=\\\"M 30.609375 48.390625 \\n\",\n       \"Q 23.390625 48.390625 19.1875 42.75 \\n\",\n       \"Q 14.984375 37.109375 14.984375 27.296875 \\n\",\n       \"Q 14.984375 17.484375 19.15625 11.84375 \\n\",\n       \"Q 23.34375 6.203125 30.609375 6.203125 \\n\",\n       \"Q 37.796875 6.203125 41.984375 11.859375 \\n\",\n       \"Q 46.1875 17.53125 46.1875 27.296875 \\n\",\n       \"Q 46.1875 37.015625 41.984375 42.703125 \\n\",\n       \"Q 37.796875 48.390625 30.609375 48.390625 \\n\",\n       \"z\\n\",\n       \"M 30.609375 56 \\n\",\n       \"Q 42.328125 56 49.015625 48.375 \\n\",\n       \"Q 55.71875 40.765625 55.71875 27.296875 \\n\",\n       \"Q 55.71875 13.875 49.015625 6.21875 \\n\",\n       \"Q 42.328125 -1.421875 30.609375 -1.421875 \\n\",\n       \"Q 18.84375 -1.421875 12.171875 6.21875 \\n\",\n       \"Q 5.515625 13.875 5.515625 27.296875 \\n\",\n       \"Q 5.515625 40.765625 12.171875 48.375 \\n\",\n       \"Q 18.84375 56 30.609375 56 \\n\",\n       \"z\\n\",\n       \"\\\" id=\\\"DejaVuSans-111\\\"/>\\n\",\n       \"    <path d=\\\"M 48.78125 52.59375 \\n\",\n       \"L 48.78125 44.1875 \\n\",\n       \"Q 44.96875 46.296875 41.140625 47.34375 \\n\",\n       \"Q 37.3125 48.390625 33.40625 48.390625 \\n\",\n       \"Q 24.65625 48.390625 19.8125 42.84375 \\n\",\n       \"Q 14.984375 37.3125 14.984375 27.296875 \\n\",\n       \"Q 14.984375 17.28125 19.8125 11.734375 \\n\",\n       \"Q 24.65625 6.203125 33.40625 6.203125 \\n\",\n       \"Q 37.3125 6.203125 41.140625 7.25 \\n\",\n       \"Q 44.96875 8.296875 48.78125 10.40625 \\n\",\n       \"L 48.78125 2.09375 \\n\",\n       \"Q 45.015625 0.34375 40.984375 -0.53125 \\n\",\n       \"Q 36.96875 -1.421875 32.421875 -1.421875 \\n\",\n       \"Q 20.0625 -1.421875 12.78125 6.34375 \\n\",\n       \"Q 5.515625 14.109375 5.515625 27.296875 \\n\",\n       \"Q 5.515625 40.671875 12.859375 48.328125 \\n\",\n       \"Q 20.21875 56 33.015625 56 \\n\",\n       \"Q 37.15625 56 41.109375 55.140625 \\n\",\n       \"Q 45.0625 54.296875 48.78125 52.59375 \\n\",\n       \"z\\n\",\n       \"\\\" id=\\\"DejaVuSans-99\\\"/>\\n\",\n       \"    <path d=\\\"M -0.296875 72.90625 \\n\",\n       \"L 61.375 72.90625 \\n\",\n       \"L 61.375 64.59375 \\n\",\n       \"L 35.5 64.59375 \\n\",\n       \"L 35.5 0 \\n\",\n       \"L 25.59375 0 \\n\",\n       \"L 25.59375 64.59375 \\n\",\n       \"L -0.296875 64.59375 \\n\",\n       \"z\\n\",\n       \"\\\" id=\\\"DejaVuSans-84\\\"/>\\n\",\n       \"    <path d=\\\"M 4.890625 31.390625 \\n\",\n       \"L 31.203125 31.390625 \\n\",\n       \"L 31.203125 23.390625 \\n\",\n       \"L 4.890625 23.390625 \\n\",\n       \"z\\n\",\n       \"\\\" id=\\\"DejaVuSans-45\\\"/>\\n\",\n       \"    <path d=\\\"M 45.40625 46.390625 \\n\",\n       \"L 45.40625 75.984375 \\n\",\n       \"L 54.390625 75.984375 \\n\",\n       \"L 54.390625 0 \\n\",\n       \"L 45.40625 0 \\n\",\n       \"L 45.40625 8.203125 \\n\",\n       \"Q 42.578125 3.328125 38.25 0.953125 \\n\",\n       \"Q 33.9375 -1.421875 27.875 -1.421875 \\n\",\n       \"Q 17.96875 -1.421875 11.734375 6.484375 \\n\",\n       \"Q 5.515625 14.40625 5.515625 27.296875 \\n\",\n       \"Q 5.515625 40.1875 11.734375 48.09375 \\n\",\n       \"Q 17.96875 56 27.875 56 \\n\",\n       \"Q 33.9375 56 38.25 53.625 \\n\",\n       \"Q 42.578125 51.265625 45.40625 46.390625 \\n\",\n       \"z\\n\",\n       \"M 14.796875 27.296875 \\n\",\n       \"Q 14.796875 17.390625 18.875 11.75 \\n\",\n       \"Q 22.953125 6.109375 30.078125 6.109375 \\n\",\n       \"Q 37.203125 6.109375 41.296875 11.75 \\n\",\n       \"Q 45.40625 17.390625 45.40625 27.296875 \\n\",\n       \"Q 45.40625 37.203125 41.296875 42.84375 \\n\",\n       \"Q 37.203125 48.484375 30.078125 48.484375 \\n\",\n       \"Q 22.953125 48.484375 18.875 42.84375 \\n\",\n       \"Q 14.796875 37.203125 14.796875 27.296875 \\n\",\n       \"z\\n\",\n       \"\\\" id=\\\"DejaVuSans-100\\\"/>\\n\",\n       \"    <path d=\\\"M 72.703125 32.078125 \\n\",\n       \"Q 68.453125 32.078125 66.03125 28.46875 \\n\",\n       \"Q 63.625 24.859375 63.625 18.40625 \\n\",\n       \"Q 63.625 12.0625 66.03125 8.421875 \\n\",\n       \"Q 68.453125 4.78125 72.703125 4.78125 \\n\",\n       \"Q 76.859375 4.78125 79.265625 8.421875 \\n\",\n       \"Q 81.6875 12.0625 81.6875 18.40625 \\n\",\n       \"Q 81.6875 24.8125 79.265625 28.4375 \\n\",\n       \"Q 76.859375 32.078125 72.703125 32.078125 \\n\",\n       \"z\\n\",\n       \"M 72.703125 38.28125 \\n\",\n       \"Q 80.421875 38.28125 84.953125 32.90625 \\n\",\n       \"Q 89.5 27.546875 89.5 18.40625 \\n\",\n       \"Q 89.5 9.28125 84.9375 3.921875 \\n\",\n       \"Q 80.375 -1.421875 72.703125 -1.421875 \\n\",\n       \"Q 64.890625 -1.421875 60.34375 3.921875 \\n\",\n       \"Q 55.8125 9.28125 55.8125 18.40625 \\n\",\n       \"Q 55.8125 27.59375 60.375 32.9375 \\n\",\n       \"Q 64.9375 38.28125 72.703125 38.28125 \\n\",\n       \"z\\n\",\n       \"M 22.3125 68.015625 \\n\",\n       \"Q 18.109375 68.015625 15.6875 64.375 \\n\",\n       \"Q 13.28125 60.75 13.28125 54.390625 \\n\",\n       \"Q 13.28125 47.953125 15.671875 44.328125 \\n\",\n       \"Q 18.0625 40.71875 22.3125 40.71875 \\n\",\n       \"Q 26.5625 40.71875 28.96875 44.328125 \\n\",\n       \"Q 31.390625 47.953125 31.390625 54.390625 \\n\",\n       \"Q 31.390625 60.6875 28.953125 64.34375 \\n\",\n       \"Q 26.515625 68.015625 22.3125 68.015625 \\n\",\n       \"z\\n\",\n       \"M 66.40625 74.21875 \\n\",\n       \"L 74.21875 74.21875 \\n\",\n       \"L 28.609375 -1.421875 \\n\",\n       \"L 20.796875 -1.421875 \\n\",\n       \"z\\n\",\n       \"M 22.3125 74.21875 \\n\",\n       \"Q 30.03125 74.21875 34.609375 68.875 \\n\",\n       \"Q 39.203125 63.53125 39.203125 54.390625 \\n\",\n       \"Q 39.203125 45.171875 34.640625 39.84375 \\n\",\n       \"Q 30.078125 34.515625 22.3125 34.515625 \\n\",\n       \"Q 14.546875 34.515625 10.03125 39.859375 \\n\",\n       \"Q 5.515625 45.21875 5.515625 54.390625 \\n\",\n       \"Q 5.515625 63.484375 10.046875 68.84375 \\n\",\n       \"Q 14.59375 74.21875 22.3125 74.21875 \\n\",\n       \"z\\n\",\n       \"\\\" id=\\\"DejaVuSans-37\\\"/>\\n\",\n       \"    <path d=\\\"M 45.40625 27.984375 \\n\",\n       \"Q 45.40625 37.75 41.375 43.109375 \\n\",\n       \"Q 37.359375 48.484375 30.078125 48.484375 \\n\",\n       \"Q 22.859375 48.484375 18.828125 43.109375 \\n\",\n       \"Q 14.796875 37.75 14.796875 27.984375 \\n\",\n       \"Q 14.796875 18.265625 18.828125 12.890625 \\n\",\n       \"Q 22.859375 7.515625 30.078125 7.515625 \\n\",\n       \"Q 37.359375 7.515625 41.375 12.890625 \\n\",\n       \"Q 45.40625 18.265625 45.40625 27.984375 \\n\",\n       \"z\\n\",\n       \"M 54.390625 6.78125 \\n\",\n       \"Q 54.390625 -7.171875 48.1875 -13.984375 \\n\",\n       \"Q 42 -20.796875 29.203125 -20.796875 \\n\",\n       \"Q 24.46875 -20.796875 20.265625 -20.09375 \\n\",\n       \"Q 16.0625 -19.390625 12.109375 -17.921875 \\n\",\n       \"L 12.109375 -9.1875 \\n\",\n       \"Q 16.0625 -11.328125 19.921875 -12.34375 \\n\",\n       \"Q 23.78125 -13.375 27.78125 -13.375 \\n\",\n       \"Q 36.625 -13.375 41.015625 -8.765625 \\n\",\n       \"Q 45.40625 -4.15625 45.40625 5.171875 \\n\",\n       \"L 45.40625 9.625 \\n\",\n       \"Q 42.625 4.78125 38.28125 2.390625 \\n\",\n       \"Q 33.9375 0 27.875 0 \\n\",\n       \"Q 17.828125 0 11.671875 7.65625 \\n\",\n       \"Q 5.515625 15.328125 5.515625 27.984375 \\n\",\n       \"Q 5.515625 40.671875 11.671875 48.328125 \\n\",\n       \"Q 17.828125 56 27.875 56 \\n\",\n       \"Q 33.9375 56 38.28125 53.609375 \\n\",\n       \"Q 42.625 51.21875 45.40625 46.390625 \\n\",\n       \"L 45.40625 54.6875 \\n\",\n       \"L 54.390625 54.6875 \\n\",\n       \"z\\n\",\n       \"\\\" id=\\\"DejaVuSans-103\\\"/>\\n\",\n       \"    <path d=\\\"M 8.5 21.578125 \\n\",\n       \"L 8.5 54.6875 \\n\",\n       \"L 17.484375 54.6875 \\n\",\n       \"L 17.484375 21.921875 \\n\",\n       \"Q 17.484375 14.15625 20.5 10.265625 \\n\",\n       \"Q 23.53125 6.390625 29.59375 6.390625 \\n\",\n       \"Q 36.859375 6.390625 41.078125 11.03125 \\n\",\n       \"Q 45.3125 15.671875 45.3125 23.6875 \\n\",\n       \"L 45.3125 54.6875 \\n\",\n       \"L 54.296875 54.6875 \\n\",\n       \"L 54.296875 0 \\n\",\n       \"L 45.3125 0 \\n\",\n       \"L 45.3125 8.40625 \\n\",\n       \"Q 42.046875 3.421875 37.71875 1 \\n\",\n       \"Q 33.40625 -1.421875 27.6875 -1.421875 \\n\",\n       \"Q 18.265625 -1.421875 13.375 4.4375 \\n\",\n       \"Q 8.5 10.296875 8.5 21.578125 \\n\",\n       \"z\\n\",\n       \"M 31.109375 56 \\n\",\n       \"z\\n\",\n       \"\\\" id=\\\"DejaVuSans-117\\\"/>\\n\",\n       \"   </defs>\\n\",\n       \"   <g transform=\\\"translate(55.03 16.318125)scale(0.12 -0.12)\\\">\\n\",\n       \"    <use xlink:href=\\\"#DejaVuSans-76\\\"/>\\n\",\n       \"    <use x=\\\"55.712891\\\" xlink:href=\\\"#DejaVuSans-105\\\"/>\\n\",\n       \"    <use x=\\\"83.496094\\\" xlink:href=\\\"#DejaVuSans-110\\\"/>\\n\",\n       \"    <use x=\\\"146.875\\\" xlink:href=\\\"#DejaVuSans-101\\\"/>\\n\",\n       \"    <use x=\\\"208.398438\\\" xlink:href=\\\"#DejaVuSans-97\\\"/>\\n\",\n       \"    <use x=\\\"269.677734\\\" xlink:href=\\\"#DejaVuSans-114\\\"/>\\n\",\n       \"    <use x=\\\"310.791016\\\" xlink:href=\\\"#DejaVuSans-32\\\"/>\\n\",\n       \"    <use x=\\\"342.578125\\\" xlink:href=\\\"#DejaVuSans-82\\\"/>\\n\",\n       \"    <use x=\\\"412.060547\\\" xlink:href=\\\"#DejaVuSans-66\\\"/>\\n\",\n       \"    <use x=\\\"480.664062\\\" xlink:href=\\\"#DejaVuSans-77\\\"/>\\n\",\n       \"    <use x=\\\"566.943359\\\" xlink:href=\\\"#DejaVuSans-32\\\"/>\\n\",\n       \"    <use x=\\\"598.730469\\\" xlink:href=\\\"#DejaVuSans-118\\\"/>\\n\",\n       \"    <use x=\\\"657.910156\\\" xlink:href=\\\"#DejaVuSans-101\\\"/>\\n\",\n       \"    <use x=\\\"719.433594\\\" xlink:href=\\\"#DejaVuSans-108\\\"/>\\n\",\n       \"    <use x=\\\"747.216797\\\" xlink:href=\\\"#DejaVuSans-111\\\"/>\\n\",\n       \"    <use x=\\\"808.398438\\\" xlink:href=\\\"#DejaVuSans-99\\\"/>\\n\",\n       \"    <use x=\\\"863.378906\\\" xlink:href=\\\"#DejaVuSans-105\\\"/>\\n\",\n       \"    <use x=\\\"891.162109\\\" xlink:href=\\\"#DejaVuSans-116\\\"/>\\n\",\n       \"    <use x=\\\"930.371094\\\" xlink:href=\\\"#DejaVuSans-105\\\"/>\\n\",\n       \"    <use x=\\\"958.154297\\\" xlink:href=\\\"#DejaVuSans-101\\\"/>\\n\",\n       \"    <use x=\\\"1019.677734\\\" xlink:href=\\\"#DejaVuSans-115\\\"/>\\n\",\n       \"    <use x=\\\"1071.777344\\\" xlink:href=\\\"#DejaVuSans-46\\\"/>\\n\",\n       \"    <use x=\\\"1103.564453\\\" xlink:href=\\\"#DejaVuSans-32\\\"/>\\n\",\n       \"    <use x=\\\"1135.351562\\\" xlink:href=\\\"#DejaVuSans-84\\\"/>\\n\",\n       \"    <use x=\\\"1196.294922\\\" xlink:href=\\\"#DejaVuSans-45\\\"/>\\n\",\n       \"    <use x=\\\"1232.238281\\\" xlink:href=\\\"#DejaVuSans-84\\\"/>\\n\",\n       \"    <use x=\\\"1293.072266\\\" xlink:href=\\\"#DejaVuSans-97\\\"/>\\n\",\n       \"    <use x=\\\"1354.351562\\\" xlink:href=\\\"#DejaVuSans-105\\\"/>\\n\",\n       \"    <use x=\\\"1382.134766\\\" xlink:href=\\\"#DejaVuSans-108\\\"/>\\n\",\n       \"    <use x=\\\"1409.917969\\\" xlink:href=\\\"#DejaVuSans-32\\\"/>\\n\",\n       \"    <use x=\\\"1441.705078\\\" xlink:href=\\\"#DejaVuSans-109\\\"/>\\n\",\n       \"    <use x=\\\"1539.117188\\\" xlink:href=\\\"#DejaVuSans-111\\\"/>\\n\",\n       \"    <use x=\\\"1600.298828\\\" xlink:href=\\\"#DejaVuSans-100\\\"/>\\n\",\n       \"    <use x=\\\"1663.775391\\\" xlink:href=\\\"#DejaVuSans-101\\\"/>\\n\",\n       \"    <use x=\\\"1725.298828\\\" xlink:href=\\\"#DejaVuSans-108\\\"/>\\n\",\n       \"    <use x=\\\"1753.082031\\\" xlink:href=\\\"#DejaVuSans-32\\\"/>\\n\",\n       \"    <use x=\\\"1784.869141\\\" xlink:href=\\\"#DejaVuSans-105\\\"/>\\n\",\n       \"    <use x=\\\"1812.652344\\\" xlink:href=\\\"#DejaVuSans-110\\\"/>\\n\",\n       \"    <use x=\\\"1876.03125\\\" xlink:href=\\\"#DejaVuSans-32\\\"/>\\n\",\n       \"    <use x=\\\"1907.818359\\\" xlink:href=\\\"#DejaVuSans-97\\\"/>\\n\",\n       \"    <use x=\\\"1969.097656\\\" xlink:href=\\\"#DejaVuSans-32\\\"/>\\n\",\n       \"    <use x=\\\"2000.884766\\\" xlink:href=\\\"#DejaVuSans-50\\\"/>\\n\",\n       \"    <use x=\\\"2064.507812\\\" xlink:href=\\\"#DejaVuSans-48\\\"/>\\n\",\n       \"    <use x=\\\"2128.130859\\\" xlink:href=\\\"#DejaVuSans-37\\\"/>\\n\",\n       \"    <use x=\\\"2223.150391\\\" xlink:href=\\\"#DejaVuSans-32\\\"/>\\n\",\n       \"    <use x=\\\"2254.9375\\\" xlink:href=\\\"#DejaVuSans-49\\\"/>\\n\",\n       \"    <use x=\\\"2318.560547\\\" xlink:href=\\\"#DejaVuSans-45\\\"/>\\n\",\n       \"    <use x=\\\"2354.644531\\\" xlink:href=\\\"#DejaVuSans-99\\\"/>\\n\",\n       \"    <use x=\\\"2409.625\\\" xlink:href=\\\"#DejaVuSans-111\\\"/>\\n\",\n       \"    <use x=\\\"2470.806641\\\" xlink:href=\\\"#DejaVuSans-115\\\"/>\\n\",\n       \"    <use x=\\\"2522.90625\\\" xlink:href=\\\"#DejaVuSans-32\\\"/>\\n\",\n       \"    <use x=\\\"2554.693359\\\" xlink:href=\\\"#DejaVuSans-103\\\"/>\\n\",\n       \"    <use x=\\\"2618.169922\\\" xlink:href=\\\"#DejaVuSans-117\\\"/>\\n\",\n       \"    <use x=\\\"2681.548828\\\" xlink:href=\\\"#DejaVuSans-115\\\"/>\\n\",\n       \"    <use x=\\\"2733.648438\\\" xlink:href=\\\"#DejaVuSans-116\\\"/>\\n\",\n       \"    <use x=\\\"2772.857422\\\" xlink:href=\\\"#DejaVuSans-32\\\"/>\\n\",\n       \"    <use x=\\\"2804.644531\\\" xlink:href=\\\"#DejaVuSans-101\\\"/>\\n\",\n       \"    <use x=\\\"2866.167969\\\" xlink:href=\\\"#DejaVuSans-110\\\"/>\\n\",\n       \"    <use x=\\\"2929.546875\\\" xlink:href=\\\"#DejaVuSans-99\\\"/>\\n\",\n       \"    <use x=\\\"2984.527344\\\" xlink:href=\\\"#DejaVuSans-111\\\"/>\\n\",\n       \"    <use x=\\\"3045.708984\\\" xlink:href=\\\"#DejaVuSans-117\\\"/>\\n\",\n       \"    <use x=\\\"3109.087891\\\" xlink:href=\\\"#DejaVuSans-110\\\"/>\\n\",\n       \"    <use x=\\\"3172.466797\\\" xlink:href=\\\"#DejaVuSans-116\\\"/>\\n\",\n       \"    <use x=\\\"3211.675781\\\" xlink:href=\\\"#DejaVuSans-101\\\"/>\\n\",\n       \"    <use x=\\\"3273.199219\\\" xlink:href=\\\"#DejaVuSans-114\\\"/>\\n\",\n       \"   </g>\\n\",\n       \"  </g>\\n\",\n       \" </g>\\n\",\n       \" <defs>\\n\",\n       \"  <clipPath id=\\\"p03149fd8c1\\\">\\n\",\n       \"   <rect height=\\\"108.72\\\" width=\\\"390.6\\\" x=\\\"64.885937\\\" y=\\\"50.4\\\"/>\\n\",\n       \"  </clipPath>\\n\",\n       \"  <clipPath id=\\\"p100e91abe7\\\">\\n\",\n       \"   <rect height=\\\"108.72\\\" width=\\\"390.6\\\" x=\\\"64.885937\\\" y=\\\"159.12\\\"/>\\n\",\n       \"  </clipPath>\\n\",\n       \"  <clipPath id=\\\"p86c5eb251c\\\">\\n\",\n       \"   <rect height=\\\"108.72\\\" width=\\\"390.6\\\" x=\\\"64.885937\\\" y=\\\"267.84\\\"/>\\n\",\n       \"  </clipPath>\\n\",\n       \" </defs>\\n\",\n       \"</svg>\\n\"\n      ],\n      \"text/plain\": [\n       \"<Figure size 504x432 with 3 Axes>\"\n      ]\n     },\n     \"metadata\": {\n      \"needs_background\": \"light\"\n     },\n     \"output_type\": \"display_data\"\n    }\n   ],\n   \"source\": [\n    \"fig, ax = plt.subplots(3, 1, figsize=(7, 6), sharex=True)\\n\",\n    \"ylabels = ['Vx [m/s]', 'Vy [m/s]', 'Vz [m/s]']\\n\",\n    \"\\n\",\n    \"# extract information\\n\",\n    \"n_tsteps = len(case_data.structure.timestep_info)\\n\",\n    \"dt = case_data.settings['DynamicCoupled']['dt']\\n\",\n    \"time_vec = np.linspace(0, n_tsteps*dt, n_tsteps)\\n\",\n    \"for_vel = np.zeros((n_tsteps, 3))\\n\",\n    \"for it in range(n_tsteps):\\n\",\n    \"    for_vel[it, 0:3] = case_data.structure.timestep_info[it].for_vel[0:3]\\n\",\n    \"    \\n\",\n    \"for idim in range(3):\\n\",\n    \"    ax[idim].plot(time_vec, for_vel[:, idim])\\n\",\n    \"    ax[idim].set_ylabel(ylabels[idim])\\n\",\n    \"    \\n\",\n    \"ax[2].set_xlabel('time [s]')\\n\",\n    \"plt.subplots_adjust(hspace=0)\\n\",\n    \"fig.suptitle('Linear RBM velocities. T-Tail model in a 20% 1-cos gust encounter');\\n\",\n    \"# ax.set_xlabel('X [m]')\\n\",\n    \"# ax.set_ylabel('Z [m]');\\n\",\n    \"plt.show()\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 12,\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"data\": {\n      \"image/svg+xml\": [\n       \"<?xml version=\\\"1.0\\\" encoding=\\\"utf-8\\\" standalone=\\\"no\\\"?>\\n\",\n       \"<!DOCTYPE svg PUBLIC \\\"-//W3C//DTD SVG 1.1//EN\\\"\\n\",\n       \"  \\\"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\\\">\\n\",\n       \"<!-- Created with matplotlib (https://matplotlib.org/) -->\\n\",\n       \"<svg height=\\\"414.11625pt\\\" version=\\\"1.1\\\" viewBox=\\\"0 0 448.719687 414.11625\\\" width=\\\"448.719687pt\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\" xmlns:xlink=\\\"http://www.w3.org/1999/xlink\\\">\\n\",\n       \" <defs>\\n\",\n       \"  <style type=\\\"text/css\\\">\\n\",\n       \"*{stroke-linecap:butt;stroke-linejoin:round;}\\n\",\n       \"  </style>\\n\",\n       \" </defs>\\n\",\n       \" <g id=\\\"figure_1\\\">\\n\",\n       \"  <g id=\\\"patch_1\\\">\\n\",\n       \"   <path d=\\\"M 0 414.11625 \\n\",\n       \"L 448.719687 414.11625 \\n\",\n       \"L 448.719687 0 \\n\",\n       \"L 0 0 \\n\",\n       \"z\\n\",\n       \"\\\" style=\\\"fill:none;\\\"/>\\n\",\n       \"  </g>\\n\",\n       \"  <g id=\\\"axes_1\\\">\\n\",\n       \"   <g id=\\\"patch_2\\\">\\n\",\n       \"    <path d=\\\"M 48.982813 159.12 \\n\",\n       \"L 439.582813 159.12 \\n\",\n       \"L 439.582813 50.4 \\n\",\n       \"L 48.982813 50.4 \\n\",\n       \"z\\n\",\n       \"\\\" style=\\\"fill:#ffffff;\\\"/>\\n\",\n       \"   </g>\\n\",\n       \"   <g id=\\\"matplotlib.axis_1\\\">\\n\",\n       \"    <g id=\\\"xtick_1\\\">\\n\",\n       \"     <g id=\\\"line2d_1\\\">\\n\",\n       \"      <defs>\\n\",\n       \"       <path d=\\\"M 0 0 \\n\",\n       \"L 0 3.5 \\n\",\n       \"\\\" id=\\\"m3044d31f40\\\" style=\\\"stroke:#000000;stroke-width:0.8;\\\"/>\\n\",\n       \"      </defs>\\n\",\n       \"      <g>\\n\",\n       \"       <use style=\\\"stroke:#000000;stroke-width:0.8;\\\" x=\\\"66.737358\\\" xlink:href=\\\"#m3044d31f40\\\" y=\\\"159.12\\\"/>\\n\",\n       \"      </g>\\n\",\n       \"     </g>\\n\",\n       \"    </g>\\n\",\n       \"    <g id=\\\"xtick_2\\\">\\n\",\n       \"     <g id=\\\"line2d_2\\\">\\n\",\n       \"      <g>\\n\",\n       \"       <use style=\\\"stroke:#000000;stroke-width:0.8;\\\" x=\\\"125.869899\\\" xlink:href=\\\"#m3044d31f40\\\" y=\\\"159.12\\\"/>\\n\",\n       \"      </g>\\n\",\n       \"     </g>\\n\",\n       \"    </g>\\n\",\n       \"    <g id=\\\"xtick_3\\\">\\n\",\n       \"     <g id=\\\"line2d_3\\\">\\n\",\n       \"      <g>\\n\",\n       \"       <use style=\\\"stroke:#000000;stroke-width:0.8;\\\" x=\\\"185.00244\\\" xlink:href=\\\"#m3044d31f40\\\" y=\\\"159.12\\\"/>\\n\",\n       \"      </g>\\n\",\n       \"     </g>\\n\",\n       \"    </g>\\n\",\n       \"    <g id=\\\"xtick_4\\\">\\n\",\n       \"     <g id=\\\"line2d_4\\\">\\n\",\n       \"      <g>\\n\",\n       \"       <use style=\\\"stroke:#000000;stroke-width:0.8;\\\" x=\\\"244.134981\\\" xlink:href=\\\"#m3044d31f40\\\" y=\\\"159.12\\\"/>\\n\",\n       \"      </g>\\n\",\n       \"     </g>\\n\",\n       \"    </g>\\n\",\n       \"    <g id=\\\"xtick_5\\\">\\n\",\n       \"     <g id=\\\"line2d_5\\\">\\n\",\n       \"      <g>\\n\",\n       \"       <use style=\\\"stroke:#000000;stroke-width:0.8;\\\" x=\\\"303.267522\\\" xlink:href=\\\"#m3044d31f40\\\" y=\\\"159.12\\\"/>\\n\",\n       \"      </g>\\n\",\n       \"     </g>\\n\",\n       \"    </g>\\n\",\n       \"    <g id=\\\"xtick_6\\\">\\n\",\n       \"     <g id=\\\"line2d_6\\\">\\n\",\n       \"      <g>\\n\",\n       \"       <use style=\\\"stroke:#000000;stroke-width:0.8;\\\" x=\\\"362.400063\\\" xlink:href=\\\"#m3044d31f40\\\" y=\\\"159.12\\\"/>\\n\",\n       \"      </g>\\n\",\n       \"     </g>\\n\",\n       \"    </g>\\n\",\n       \"    <g id=\\\"xtick_7\\\">\\n\",\n       \"     <g id=\\\"line2d_7\\\">\\n\",\n       \"      <g>\\n\",\n       \"       <use style=\\\"stroke:#000000;stroke-width:0.8;\\\" x=\\\"421.532604\\\" xlink:href=\\\"#m3044d31f40\\\" y=\\\"159.12\\\"/>\\n\",\n       \"      </g>\\n\",\n       \"     </g>\\n\",\n       \"    </g>\\n\",\n       \"   </g>\\n\",\n       \"   <g id=\\\"matplotlib.axis_2\\\">\\n\",\n       \"    <g id=\\\"ytick_1\\\">\\n\",\n       \"     <g id=\\\"line2d_8\\\">\\n\",\n       \"      <defs>\\n\",\n       \"       <path d=\\\"M 0 0 \\n\",\n       \"L -3.5 0 \\n\",\n       \"\\\" id=\\\"m8fbb032ec0\\\" style=\\\"stroke:#000000;stroke-width:0.8;\\\"/>\\n\",\n       \"      </defs>\\n\",\n       \"      <g>\\n\",\n       \"       <use style=\\\"stroke:#000000;stroke-width:0.8;\\\" x=\\\"48.982813\\\" xlink:href=\\\"#m8fbb032ec0\\\" y=\\\"158.328395\\\"/>\\n\",\n       \"      </g>\\n\",\n       \"     </g>\\n\",\n       \"     <g id=\\\"text_1\\\">\\n\",\n       \"      <!-- −2 -->\\n\",\n       \"      <defs>\\n\",\n       \"       <path d=\\\"M 10.59375 35.5 \\n\",\n       \"L 73.1875 35.5 \\n\",\n       \"L 73.1875 27.203125 \\n\",\n       \"L 10.59375 27.203125 \\n\",\n       \"z\\n\",\n       \"\\\" id=\\\"DejaVuSans-8722\\\"/>\\n\",\n       \"       <path d=\\\"M 19.1875 8.296875 \\n\",\n       \"L 53.609375 8.296875 \\n\",\n       \"L 53.609375 0 \\n\",\n       \"L 7.328125 0 \\n\",\n       \"L 7.328125 8.296875 \\n\",\n       \"Q 12.9375 14.109375 22.625 23.890625 \\n\",\n       \"Q 32.328125 33.6875 34.8125 36.53125 \\n\",\n       \"Q 39.546875 41.84375 41.421875 45.53125 \\n\",\n       \"Q 43.3125 49.21875 43.3125 52.78125 \\n\",\n       \"Q 43.3125 58.59375 39.234375 62.25 \\n\",\n       \"Q 35.15625 65.921875 28.609375 65.921875 \\n\",\n       \"Q 23.96875 65.921875 18.8125 64.3125 \\n\",\n       \"Q 13.671875 62.703125 7.8125 59.421875 \\n\",\n       \"L 7.8125 69.390625 \\n\",\n       \"Q 13.765625 71.78125 18.9375 73 \\n\",\n       \"Q 24.125 74.21875 28.421875 74.21875 \\n\",\n       \"Q 39.75 74.21875 46.484375 68.546875 \\n\",\n       \"Q 53.21875 62.890625 53.21875 53.421875 \\n\",\n       \"Q 53.21875 48.921875 51.53125 44.890625 \\n\",\n       \"Q 49.859375 40.875 45.40625 35.40625 \\n\",\n       \"Q 44.1875 33.984375 37.640625 27.21875 \\n\",\n       \"Q 31.109375 20.453125 19.1875 8.296875 \\n\",\n       \"z\\n\",\n       \"\\\" id=\\\"DejaVuSans-50\\\"/>\\n\",\n       \"      </defs>\\n\",\n       \"      <g transform=\\\"translate(27.240625 162.127614)scale(0.1 -0.1)\\\">\\n\",\n       \"       <use xlink:href=\\\"#DejaVuSans-8722\\\"/>\\n\",\n       \"       <use x=\\\"83.789062\\\" xlink:href=\\\"#DejaVuSans-50\\\"/>\\n\",\n       \"      </g>\\n\",\n       \"     </g>\\n\",\n       \"    </g>\\n\",\n       \"    <g id=\\\"ytick_2\\\">\\n\",\n       \"     <g id=\\\"line2d_9\\\">\\n\",\n       \"      <g>\\n\",\n       \"       <use style=\\\"stroke:#000000;stroke-width:0.8;\\\" x=\\\"48.982813\\\" xlink:href=\\\"#m8fbb032ec0\\\" y=\\\"133.225345\\\"/>\\n\",\n       \"      </g>\\n\",\n       \"     </g>\\n\",\n       \"     <g id=\\\"text_2\\\">\\n\",\n       \"      <!-- −1 -->\\n\",\n       \"      <defs>\\n\",\n       \"       <path d=\\\"M 12.40625 8.296875 \\n\",\n       \"L 28.515625 8.296875 \\n\",\n       \"L 28.515625 63.921875 \\n\",\n       \"L 10.984375 60.40625 \\n\",\n       \"L 10.984375 69.390625 \\n\",\n       \"L 28.421875 72.90625 \\n\",\n       \"L 38.28125 72.90625 \\n\",\n       \"L 38.28125 8.296875 \\n\",\n       \"L 54.390625 8.296875 \\n\",\n       \"L 54.390625 0 \\n\",\n       \"L 12.40625 0 \\n\",\n       \"z\\n\",\n       \"\\\" id=\\\"DejaVuSans-49\\\"/>\\n\",\n       \"      </defs>\\n\",\n       \"      <g transform=\\\"translate(27.240625 137.024564)scale(0.1 -0.1)\\\">\\n\",\n       \"       <use xlink:href=\\\"#DejaVuSans-8722\\\"/>\\n\",\n       \"       <use x=\\\"83.789062\\\" xlink:href=\\\"#DejaVuSans-49\\\"/>\\n\",\n       \"      </g>\\n\",\n       \"     </g>\\n\",\n       \"    </g>\\n\",\n       \"    <g id=\\\"ytick_3\\\">\\n\",\n       \"     <g id=\\\"line2d_10\\\">\\n\",\n       \"      <g>\\n\",\n       \"       <use style=\\\"stroke:#000000;stroke-width:0.8;\\\" x=\\\"48.982813\\\" xlink:href=\\\"#m8fbb032ec0\\\" y=\\\"108.122295\\\"/>\\n\",\n       \"      </g>\\n\",\n       \"     </g>\\n\",\n       \"     <g id=\\\"text_3\\\">\\n\",\n       \"      <!-- 0 -->\\n\",\n       \"      <defs>\\n\",\n       \"       <path d=\\\"M 31.78125 66.40625 \\n\",\n       \"Q 24.171875 66.40625 20.328125 58.90625 \\n\",\n       \"Q 16.5 51.421875 16.5 36.375 \\n\",\n       \"Q 16.5 21.390625 20.328125 13.890625 \\n\",\n       \"Q 24.171875 6.390625 31.78125 6.390625 \\n\",\n       \"Q 39.453125 6.390625 43.28125 13.890625 \\n\",\n       \"Q 47.125 21.390625 47.125 36.375 \\n\",\n       \"Q 47.125 51.421875 43.28125 58.90625 \\n\",\n       \"Q 39.453125 66.40625 31.78125 66.40625 \\n\",\n       \"z\\n\",\n       \"M 31.78125 74.21875 \\n\",\n       \"Q 44.046875 74.21875 50.515625 64.515625 \\n\",\n       \"Q 56.984375 54.828125 56.984375 36.375 \\n\",\n       \"Q 56.984375 17.96875 50.515625 8.265625 \\n\",\n       \"Q 44.046875 -1.421875 31.78125 -1.421875 \\n\",\n       \"Q 19.53125 -1.421875 13.0625 8.265625 \\n\",\n       \"Q 6.59375 17.96875 6.59375 36.375 \\n\",\n       \"Q 6.59375 54.828125 13.0625 64.515625 \\n\",\n       \"Q 19.53125 74.21875 31.78125 74.21875 \\n\",\n       \"z\\n\",\n       \"\\\" id=\\\"DejaVuSans-48\\\"/>\\n\",\n       \"      </defs>\\n\",\n       \"      <g transform=\\\"translate(35.620312 111.921514)scale(0.1 -0.1)\\\">\\n\",\n       \"       <use xlink:href=\\\"#DejaVuSans-48\\\"/>\\n\",\n       \"      </g>\\n\",\n       \"     </g>\\n\",\n       \"    </g>\\n\",\n       \"    <g id=\\\"ytick_4\\\">\\n\",\n       \"     <g id=\\\"line2d_11\\\">\\n\",\n       \"      <g>\\n\",\n       \"       <use style=\\\"stroke:#000000;stroke-width:0.8;\\\" x=\\\"48.982813\\\" xlink:href=\\\"#m8fbb032ec0\\\" y=\\\"83.019245\\\"/>\\n\",\n       \"      </g>\\n\",\n       \"     </g>\\n\",\n       \"     <g id=\\\"text_4\\\">\\n\",\n       \"      <!-- 1 -->\\n\",\n       \"      <g transform=\\\"translate(35.620312 86.818463)scale(0.1 -0.1)\\\">\\n\",\n       \"       <use xlink:href=\\\"#DejaVuSans-49\\\"/>\\n\",\n       \"      </g>\\n\",\n       \"     </g>\\n\",\n       \"    </g>\\n\",\n       \"    <g id=\\\"ytick_5\\\">\\n\",\n       \"     <g id=\\\"line2d_12\\\">\\n\",\n       \"      <g>\\n\",\n       \"       <use style=\\\"stroke:#000000;stroke-width:0.8;\\\" x=\\\"48.982813\\\" xlink:href=\\\"#m8fbb032ec0\\\" y=\\\"57.916194\\\"/>\\n\",\n       \"      </g>\\n\",\n       \"     </g>\\n\",\n       \"     <g id=\\\"text_5\\\">\\n\",\n       \"      <!-- 2 -->\\n\",\n       \"      <g transform=\\\"translate(35.620312 61.715413)scale(0.1 -0.1)\\\">\\n\",\n       \"       <use xlink:href=\\\"#DejaVuSans-50\\\"/>\\n\",\n       \"      </g>\\n\",\n       \"     </g>\\n\",\n       \"    </g>\\n\",\n       \"    <g id=\\\"text_6\\\">\\n\",\n       \"     <!-- Roll rate [deg/s] -->\\n\",\n       \"     <defs>\\n\",\n       \"      <path d=\\\"M 44.390625 34.1875 \\n\",\n       \"Q 47.5625 33.109375 50.5625 29.59375 \\n\",\n       \"Q 53.5625 26.078125 56.59375 19.921875 \\n\",\n       \"L 66.609375 0 \\n\",\n       \"L 56 0 \\n\",\n       \"L 46.6875 18.703125 \\n\",\n       \"Q 43.0625 26.03125 39.671875 28.421875 \\n\",\n       \"Q 36.28125 30.8125 30.421875 30.8125 \\n\",\n       \"L 19.671875 30.8125 \\n\",\n       \"L 19.671875 0 \\n\",\n       \"L 9.8125 0 \\n\",\n       \"L 9.8125 72.90625 \\n\",\n       \"L 32.078125 72.90625 \\n\",\n       \"Q 44.578125 72.90625 50.734375 67.671875 \\n\",\n       \"Q 56.890625 62.453125 56.890625 51.90625 \\n\",\n       \"Q 56.890625 45.015625 53.6875 40.46875 \\n\",\n       \"Q 50.484375 35.9375 44.390625 34.1875 \\n\",\n       \"z\\n\",\n       \"M 19.671875 64.796875 \\n\",\n       \"L 19.671875 38.921875 \\n\",\n       \"L 32.078125 38.921875 \\n\",\n       \"Q 39.203125 38.921875 42.84375 42.21875 \\n\",\n       \"Q 46.484375 45.515625 46.484375 51.90625 \\n\",\n       \"Q 46.484375 58.296875 42.84375 61.546875 \\n\",\n       \"Q 39.203125 64.796875 32.078125 64.796875 \\n\",\n       \"z\\n\",\n       \"\\\" id=\\\"DejaVuSans-82\\\"/>\\n\",\n       \"      <path d=\\\"M 30.609375 48.390625 \\n\",\n       \"Q 23.390625 48.390625 19.1875 42.75 \\n\",\n       \"Q 14.984375 37.109375 14.984375 27.296875 \\n\",\n       \"Q 14.984375 17.484375 19.15625 11.84375 \\n\",\n       \"Q 23.34375 6.203125 30.609375 6.203125 \\n\",\n       \"Q 37.796875 6.203125 41.984375 11.859375 \\n\",\n       \"Q 46.1875 17.53125 46.1875 27.296875 \\n\",\n       \"Q 46.1875 37.015625 41.984375 42.703125 \\n\",\n       \"Q 37.796875 48.390625 30.609375 48.390625 \\n\",\n       \"z\\n\",\n       \"M 30.609375 56 \\n\",\n       \"Q 42.328125 56 49.015625 48.375 \\n\",\n       \"Q 55.71875 40.765625 55.71875 27.296875 \\n\",\n       \"Q 55.71875 13.875 49.015625 6.21875 \\n\",\n       \"Q 42.328125 -1.421875 30.609375 -1.421875 \\n\",\n       \"Q 18.84375 -1.421875 12.171875 6.21875 \\n\",\n       \"Q 5.515625 13.875 5.515625 27.296875 \\n\",\n       \"Q 5.515625 40.765625 12.171875 48.375 \\n\",\n       \"Q 18.84375 56 30.609375 56 \\n\",\n       \"z\\n\",\n       \"\\\" id=\\\"DejaVuSans-111\\\"/>\\n\",\n       \"      <path d=\\\"M 9.421875 75.984375 \\n\",\n       \"L 18.40625 75.984375 \\n\",\n       \"L 18.40625 0 \\n\",\n       \"L 9.421875 0 \\n\",\n       \"z\\n\",\n       \"\\\" id=\\\"DejaVuSans-108\\\"/>\\n\",\n       \"      <path id=\\\"DejaVuSans-32\\\"/>\\n\",\n       \"      <path d=\\\"M 41.109375 46.296875 \\n\",\n       \"Q 39.59375 47.171875 37.8125 47.578125 \\n\",\n       \"Q 36.03125 48 33.890625 48 \\n\",\n       \"Q 26.265625 48 22.1875 43.046875 \\n\",\n       \"Q 18.109375 38.09375 18.109375 28.8125 \\n\",\n       \"L 18.109375 0 \\n\",\n       \"L 9.078125 0 \\n\",\n       \"L 9.078125 54.6875 \\n\",\n       \"L 18.109375 54.6875 \\n\",\n       \"L 18.109375 46.1875 \\n\",\n       \"Q 20.953125 51.171875 25.484375 53.578125 \\n\",\n       \"Q 30.03125 56 36.53125 56 \\n\",\n       \"Q 37.453125 56 38.578125 55.875 \\n\",\n       \"Q 39.703125 55.765625 41.0625 55.515625 \\n\",\n       \"z\\n\",\n       \"\\\" id=\\\"DejaVuSans-114\\\"/>\\n\",\n       \"      <path d=\\\"M 34.28125 27.484375 \\n\",\n       \"Q 23.390625 27.484375 19.1875 25 \\n\",\n       \"Q 14.984375 22.515625 14.984375 16.5 \\n\",\n       \"Q 14.984375 11.71875 18.140625 8.90625 \\n\",\n       \"Q 21.296875 6.109375 26.703125 6.109375 \\n\",\n       \"Q 34.1875 6.109375 38.703125 11.40625 \\n\",\n       \"Q 43.21875 16.703125 43.21875 25.484375 \\n\",\n       \"L 43.21875 27.484375 \\n\",\n       \"z\\n\",\n       \"M 52.203125 31.203125 \\n\",\n       \"L 52.203125 0 \\n\",\n       \"L 43.21875 0 \\n\",\n       \"L 43.21875 8.296875 \\n\",\n       \"Q 40.140625 3.328125 35.546875 0.953125 \\n\",\n       \"Q 30.953125 -1.421875 24.3125 -1.421875 \\n\",\n       \"Q 15.921875 -1.421875 10.953125 3.296875 \\n\",\n       \"Q 6 8.015625 6 15.921875 \\n\",\n       \"Q 6 25.140625 12.171875 29.828125 \\n\",\n       \"Q 18.359375 34.515625 30.609375 34.515625 \\n\",\n       \"L 43.21875 34.515625 \\n\",\n       \"L 43.21875 35.40625 \\n\",\n       \"Q 43.21875 41.609375 39.140625 45 \\n\",\n       \"Q 35.0625 48.390625 27.6875 48.390625 \\n\",\n       \"Q 23 48.390625 18.546875 47.265625 \\n\",\n       \"Q 14.109375 46.140625 10.015625 43.890625 \\n\",\n       \"L 10.015625 52.203125 \\n\",\n       \"Q 14.9375 54.109375 19.578125 55.046875 \\n\",\n       \"Q 24.21875 56 28.609375 56 \\n\",\n       \"Q 40.484375 56 46.34375 49.84375 \\n\",\n       \"Q 52.203125 43.703125 52.203125 31.203125 \\n\",\n       \"z\\n\",\n       \"\\\" id=\\\"DejaVuSans-97\\\"/>\\n\",\n       \"      <path d=\\\"M 18.3125 70.21875 \\n\",\n       \"L 18.3125 54.6875 \\n\",\n       \"L 36.8125 54.6875 \\n\",\n       \"L 36.8125 47.703125 \\n\",\n       \"L 18.3125 47.703125 \\n\",\n       \"L 18.3125 18.015625 \\n\",\n       \"Q 18.3125 11.328125 20.140625 9.421875 \\n\",\n       \"Q 21.96875 7.515625 27.59375 7.515625 \\n\",\n       \"L 36.8125 7.515625 \\n\",\n       \"L 36.8125 0 \\n\",\n       \"L 27.59375 0 \\n\",\n       \"Q 17.1875 0 13.234375 3.875 \\n\",\n       \"Q 9.28125 7.765625 9.28125 18.015625 \\n\",\n       \"L 9.28125 47.703125 \\n\",\n       \"L 2.6875 47.703125 \\n\",\n       \"L 2.6875 54.6875 \\n\",\n       \"L 9.28125 54.6875 \\n\",\n       \"L 9.28125 70.21875 \\n\",\n       \"z\\n\",\n       \"\\\" id=\\\"DejaVuSans-116\\\"/>\\n\",\n       \"      <path d=\\\"M 56.203125 29.59375 \\n\",\n       \"L 56.203125 25.203125 \\n\",\n       \"L 14.890625 25.203125 \\n\",\n       \"Q 15.484375 15.921875 20.484375 11.0625 \\n\",\n       \"Q 25.484375 6.203125 34.421875 6.203125 \\n\",\n       \"Q 39.59375 6.203125 44.453125 7.46875 \\n\",\n       \"Q 49.3125 8.734375 54.109375 11.28125 \\n\",\n       \"L 54.109375 2.78125 \\n\",\n       \"Q 49.265625 0.734375 44.1875 -0.34375 \\n\",\n       \"Q 39.109375 -1.421875 33.890625 -1.421875 \\n\",\n       \"Q 20.796875 -1.421875 13.15625 6.1875 \\n\",\n       \"Q 5.515625 13.8125 5.515625 26.8125 \\n\",\n       \"Q 5.515625 40.234375 12.765625 48.109375 \\n\",\n       \"Q 20.015625 56 32.328125 56 \\n\",\n       \"Q 43.359375 56 49.78125 48.890625 \\n\",\n       \"Q 56.203125 41.796875 56.203125 29.59375 \\n\",\n       \"z\\n\",\n       \"M 47.21875 32.234375 \\n\",\n       \"Q 47.125 39.59375 43.09375 43.984375 \\n\",\n       \"Q 39.0625 48.390625 32.421875 48.390625 \\n\",\n       \"Q 24.90625 48.390625 20.390625 44.140625 \\n\",\n       \"Q 15.875 39.890625 15.1875 32.171875 \\n\",\n       \"z\\n\",\n       \"\\\" id=\\\"DejaVuSans-101\\\"/>\\n\",\n       \"      <path d=\\\"M 8.59375 75.984375 \\n\",\n       \"L 29.296875 75.984375 \\n\",\n       \"L 29.296875 69 \\n\",\n       \"L 17.578125 69 \\n\",\n       \"L 17.578125 -6.203125 \\n\",\n       \"L 29.296875 -6.203125 \\n\",\n       \"L 29.296875 -13.1875 \\n\",\n       \"L 8.59375 -13.1875 \\n\",\n       \"z\\n\",\n       \"\\\" id=\\\"DejaVuSans-91\\\"/>\\n\",\n       \"      <path d=\\\"M 45.40625 46.390625 \\n\",\n       \"L 45.40625 75.984375 \\n\",\n       \"L 54.390625 75.984375 \\n\",\n       \"L 54.390625 0 \\n\",\n       \"L 45.40625 0 \\n\",\n       \"L 45.40625 8.203125 \\n\",\n       \"Q 42.578125 3.328125 38.25 0.953125 \\n\",\n       \"Q 33.9375 -1.421875 27.875 -1.421875 \\n\",\n       \"Q 17.96875 -1.421875 11.734375 6.484375 \\n\",\n       \"Q 5.515625 14.40625 5.515625 27.296875 \\n\",\n       \"Q 5.515625 40.1875 11.734375 48.09375 \\n\",\n       \"Q 17.96875 56 27.875 56 \\n\",\n       \"Q 33.9375 56 38.25 53.625 \\n\",\n       \"Q 42.578125 51.265625 45.40625 46.390625 \\n\",\n       \"z\\n\",\n       \"M 14.796875 27.296875 \\n\",\n       \"Q 14.796875 17.390625 18.875 11.75 \\n\",\n       \"Q 22.953125 6.109375 30.078125 6.109375 \\n\",\n       \"Q 37.203125 6.109375 41.296875 11.75 \\n\",\n       \"Q 45.40625 17.390625 45.40625 27.296875 \\n\",\n       \"Q 45.40625 37.203125 41.296875 42.84375 \\n\",\n       \"Q 37.203125 48.484375 30.078125 48.484375 \\n\",\n       \"Q 22.953125 48.484375 18.875 42.84375 \\n\",\n       \"Q 14.796875 37.203125 14.796875 27.296875 \\n\",\n       \"z\\n\",\n       \"\\\" id=\\\"DejaVuSans-100\\\"/>\\n\",\n       \"      <path d=\\\"M 45.40625 27.984375 \\n\",\n       \"Q 45.40625 37.75 41.375 43.109375 \\n\",\n       \"Q 37.359375 48.484375 30.078125 48.484375 \\n\",\n       \"Q 22.859375 48.484375 18.828125 43.109375 \\n\",\n       \"Q 14.796875 37.75 14.796875 27.984375 \\n\",\n       \"Q 14.796875 18.265625 18.828125 12.890625 \\n\",\n       \"Q 22.859375 7.515625 30.078125 7.515625 \\n\",\n       \"Q 37.359375 7.515625 41.375 12.890625 \\n\",\n       \"Q 45.40625 18.265625 45.40625 27.984375 \\n\",\n       \"z\\n\",\n       \"M 54.390625 6.78125 \\n\",\n       \"Q 54.390625 -7.171875 48.1875 -13.984375 \\n\",\n       \"Q 42 -20.796875 29.203125 -20.796875 \\n\",\n       \"Q 24.46875 -20.796875 20.265625 -20.09375 \\n\",\n       \"Q 16.0625 -19.390625 12.109375 -17.921875 \\n\",\n       \"L 12.109375 -9.1875 \\n\",\n       \"Q 16.0625 -11.328125 19.921875 -12.34375 \\n\",\n       \"Q 23.78125 -13.375 27.78125 -13.375 \\n\",\n       \"Q 36.625 -13.375 41.015625 -8.765625 \\n\",\n       \"Q 45.40625 -4.15625 45.40625 5.171875 \\n\",\n       \"L 45.40625 9.625 \\n\",\n       \"Q 42.625 4.78125 38.28125 2.390625 \\n\",\n       \"Q 33.9375 0 27.875 0 \\n\",\n       \"Q 17.828125 0 11.671875 7.65625 \\n\",\n       \"Q 5.515625 15.328125 5.515625 27.984375 \\n\",\n       \"Q 5.515625 40.671875 11.671875 48.328125 \\n\",\n       \"Q 17.828125 56 27.875 56 \\n\",\n       \"Q 33.9375 56 38.28125 53.609375 \\n\",\n       \"Q 42.625 51.21875 45.40625 46.390625 \\n\",\n       \"L 45.40625 54.6875 \\n\",\n       \"L 54.390625 54.6875 \\n\",\n       \"z\\n\",\n       \"\\\" id=\\\"DejaVuSans-103\\\"/>\\n\",\n       \"      <path d=\\\"M 25.390625 72.90625 \\n\",\n       \"L 33.6875 72.90625 \\n\",\n       \"L 8.296875 -9.28125 \\n\",\n       \"L 0 -9.28125 \\n\",\n       \"z\\n\",\n       \"\\\" id=\\\"DejaVuSans-47\\\"/>\\n\",\n       \"      <path d=\\\"M 44.28125 53.078125 \\n\",\n       \"L 44.28125 44.578125 \\n\",\n       \"Q 40.484375 46.53125 36.375 47.5 \\n\",\n       \"Q 32.28125 48.484375 27.875 48.484375 \\n\",\n       \"Q 21.1875 48.484375 17.84375 46.4375 \\n\",\n       \"Q 14.5 44.390625 14.5 40.28125 \\n\",\n       \"Q 14.5 37.15625 16.890625 35.375 \\n\",\n       \"Q 19.28125 33.59375 26.515625 31.984375 \\n\",\n       \"L 29.59375 31.296875 \\n\",\n       \"Q 39.15625 29.25 43.1875 25.515625 \\n\",\n       \"Q 47.21875 21.78125 47.21875 15.09375 \\n\",\n       \"Q 47.21875 7.46875 41.1875 3.015625 \\n\",\n       \"Q 35.15625 -1.421875 24.609375 -1.421875 \\n\",\n       \"Q 20.21875 -1.421875 15.453125 -0.5625 \\n\",\n       \"Q 10.6875 0.296875 5.421875 2 \\n\",\n       \"L 5.421875 11.28125 \\n\",\n       \"Q 10.40625 8.6875 15.234375 7.390625 \\n\",\n       \"Q 20.0625 6.109375 24.8125 6.109375 \\n\",\n       \"Q 31.15625 6.109375 34.5625 8.28125 \\n\",\n       \"Q 37.984375 10.453125 37.984375 14.40625 \\n\",\n       \"Q 37.984375 18.0625 35.515625 20.015625 \\n\",\n       \"Q 33.0625 21.96875 24.703125 23.78125 \\n\",\n       \"L 21.578125 24.515625 \\n\",\n       \"Q 13.234375 26.265625 9.515625 29.90625 \\n\",\n       \"Q 5.8125 33.546875 5.8125 39.890625 \\n\",\n       \"Q 5.8125 47.609375 11.28125 51.796875 \\n\",\n       \"Q 16.75 56 26.8125 56 \\n\",\n       \"Q 31.78125 56 36.171875 55.265625 \\n\",\n       \"Q 40.578125 54.546875 44.28125 53.078125 \\n\",\n       \"z\\n\",\n       \"\\\" id=\\\"DejaVuSans-115\\\"/>\\n\",\n       \"      <path d=\\\"M 30.421875 75.984375 \\n\",\n       \"L 30.421875 -13.1875 \\n\",\n       \"L 9.71875 -13.1875 \\n\",\n       \"L 9.71875 -6.203125 \\n\",\n       \"L 21.390625 -6.203125 \\n\",\n       \"L 21.390625 69 \\n\",\n       \"L 9.71875 69 \\n\",\n       \"L 9.71875 75.984375 \\n\",\n       \"z\\n\",\n       \"\\\" id=\\\"DejaVuSans-93\\\"/>\\n\",\n       \"     </defs>\\n\",\n       \"     <g transform=\\\"translate(21.160937 145.018594)rotate(-90)scale(0.1 -0.1)\\\">\\n\",\n       \"      <use xlink:href=\\\"#DejaVuSans-82\\\"/>\\n\",\n       \"      <use x=\\\"69.419922\\\" xlink:href=\\\"#DejaVuSans-111\\\"/>\\n\",\n       \"      <use x=\\\"130.601562\\\" xlink:href=\\\"#DejaVuSans-108\\\"/>\\n\",\n       \"      <use x=\\\"158.384766\\\" xlink:href=\\\"#DejaVuSans-108\\\"/>\\n\",\n       \"      <use x=\\\"186.167969\\\" xlink:href=\\\"#DejaVuSans-32\\\"/>\\n\",\n       \"      <use x=\\\"217.955078\\\" xlink:href=\\\"#DejaVuSans-114\\\"/>\\n\",\n       \"      <use x=\\\"259.068359\\\" xlink:href=\\\"#DejaVuSans-97\\\"/>\\n\",\n       \"      <use x=\\\"320.347656\\\" xlink:href=\\\"#DejaVuSans-116\\\"/>\\n\",\n       \"      <use x=\\\"359.556641\\\" xlink:href=\\\"#DejaVuSans-101\\\"/>\\n\",\n       \"      <use x=\\\"421.080078\\\" xlink:href=\\\"#DejaVuSans-32\\\"/>\\n\",\n       \"      <use x=\\\"452.867188\\\" xlink:href=\\\"#DejaVuSans-91\\\"/>\\n\",\n       \"      <use x=\\\"491.880859\\\" xlink:href=\\\"#DejaVuSans-100\\\"/>\\n\",\n       \"      <use x=\\\"555.357422\\\" xlink:href=\\\"#DejaVuSans-101\\\"/>\\n\",\n       \"      <use x=\\\"616.880859\\\" xlink:href=\\\"#DejaVuSans-103\\\"/>\\n\",\n       \"      <use x=\\\"680.357422\\\" xlink:href=\\\"#DejaVuSans-47\\\"/>\\n\",\n       \"      <use x=\\\"714.048828\\\" xlink:href=\\\"#DejaVuSans-115\\\"/>\\n\",\n       \"      <use x=\\\"766.148438\\\" xlink:href=\\\"#DejaVuSans-93\\\"/>\\n\",\n       \"     </g>\\n\",\n       \"    </g>\\n\",\n       \"    <g id=\\\"text_7\\\">\\n\",\n       \"     <!-- 1e−7 -->\\n\",\n       \"     <defs>\\n\",\n       \"      <path d=\\\"M 8.203125 72.90625 \\n\",\n       \"L 55.078125 72.90625 \\n\",\n       \"L 55.078125 68.703125 \\n\",\n       \"L 28.609375 0 \\n\",\n       \"L 18.3125 0 \\n\",\n       \"L 43.21875 64.59375 \\n\",\n       \"L 8.203125 64.59375 \\n\",\n       \"z\\n\",\n       \"\\\" id=\\\"DejaVuSans-55\\\"/>\\n\",\n       \"     </defs>\\n\",\n       \"     <g transform=\\\"translate(48.982813 47.4)scale(0.1 -0.1)\\\">\\n\",\n       \"      <use xlink:href=\\\"#DejaVuSans-49\\\"/>\\n\",\n       \"      <use x=\\\"63.623047\\\" xlink:href=\\\"#DejaVuSans-101\\\"/>\\n\",\n       \"      <use x=\\\"125.146484\\\" xlink:href=\\\"#DejaVuSans-8722\\\"/>\\n\",\n       \"      <use x=\\\"208.935547\\\" xlink:href=\\\"#DejaVuSans-55\\\"/>\\n\",\n       \"     </g>\\n\",\n       \"    </g>\\n\",\n       \"   </g>\\n\",\n       \"   <g id=\\\"line2d_13\\\">\\n\",\n       \"    <path clip-path=\\\"url(#p3d5d9b0efe)\\\" d=\\\"M 66.737358 108.122295 \\n\",\n       \"L 67.625085 108.15042 \\n\",\n       \"L 68.512813 106.982805 \\n\",\n       \"L 68.808722 106.81345 \\n\",\n       \"L 69.104631 106.965208 \\n\",\n       \"L 69.40054 106.955985 \\n\",\n       \"L 69.696449 105.985395 \\n\",\n       \"L 69.992358 104.522336 \\n\",\n       \"L 70.584176 105.565288 \\n\",\n       \"L 71.175994 108.824356 \\n\",\n       \"L 71.471903 108.955066 \\n\",\n       \"L 71.767813 109.584431 \\n\",\n       \"L 72.063722 108.170255 \\n\",\n       \"L 72.359631 107.617087 \\n\",\n       \"L 72.65554 109.133684 \\n\",\n       \"L 72.951449 111.733122 \\n\",\n       \"L 73.247358 111.568764 \\n\",\n       \"L 73.543267 111.552462 \\n\",\n       \"L 73.839176 110.237478 \\n\",\n       \"L 74.430994 106.923662 \\n\",\n       \"L 74.726903 105.185007 \\n\",\n       \"L 75.318722 108.577909 \\n\",\n       \"L 75.614631 111.938013 \\n\",\n       \"L 75.91054 112.196686 \\n\",\n       \"L 76.206449 112.211185 \\n\",\n       \"L 76.798267 109.079453 \\n\",\n       \"L 77.390085 107.19751 \\n\",\n       \"L 77.685994 107.882326 \\n\",\n       \"L 77.981903 107.620035 \\n\",\n       \"L 78.277813 108.863611 \\n\",\n       \"L 78.573722 109.171013 \\n\",\n       \"L 78.869631 110.42906 \\n\",\n       \"L 79.16554 111.124179 \\n\",\n       \"L 79.757358 114.043704 \\n\",\n       \"L 80.053267 114.714699 \\n\",\n       \"L 80.349176 114.201531 \\n\",\n       \"L 80.645085 114.287575 \\n\",\n       \"L 80.940994 113.136469 \\n\",\n       \"L 81.532813 108.20539 \\n\",\n       \"L 81.828722 108.709824 \\n\",\n       \"L 82.124631 108.144861 \\n\",\n       \"L 82.42054 108.276467 \\n\",\n       \"L 83.308267 105.878801 \\n\",\n       \"L 84.195994 97.848875 \\n\",\n       \"L 84.491903 97.539228 \\n\",\n       \"L 84.787813 95.526904 \\n\",\n       \"L 85.083722 95.34395 \\n\",\n       \"L 85.379631 93.964471 \\n\",\n       \"L 85.971449 76.158024 \\n\",\n       \"L 86.267358 83.677662 \\n\",\n       \"L 86.563267 71.874856 \\n\",\n       \"L 86.859176 82.794023 \\n\",\n       \"L 87.155085 118.182694 \\n\",\n       \"L 87.746903 142.095915 \\n\",\n       \"L 88.042812 150.747658 \\n\",\n       \"L 88.338722 154.178182 \\n\",\n       \"L 89.522358 78.814029 \\n\",\n       \"L 89.818267 89.946836 \\n\",\n       \"L 90.114176 57.610325 \\n\",\n       \"L 90.410085 55.341818 \\n\",\n       \"L 91.001903 102.302725 \\n\",\n       \"L 91.297813 102.475654 \\n\",\n       \"L 91.593722 106.908011 \\n\",\n       \"L 91.889631 113.330425 \\n\",\n       \"L 92.18554 111.962 \\n\",\n       \"L 92.481449 115.586505 \\n\",\n       \"L 92.777358 100.25839 \\n\",\n       \"L 93.073267 105.943166 \\n\",\n       \"L 93.665085 146.564743 \\n\",\n       \"L 93.960994 134.534417 \\n\",\n       \"L 94.256903 136.83895 \\n\",\n       \"L 94.552813 148.189844 \\n\",\n       \"L 95.144631 125.848701 \\n\",\n       \"L 95.44054 121.089913 \\n\",\n       \"L 95.736449 121.470299 \\n\",\n       \"L 96.032358 123.412812 \\n\",\n       \"L 96.328267 129.233341 \\n\",\n       \"L 96.920085 116.316113 \\n\",\n       \"L 97.215994 121.631136 \\n\",\n       \"L 97.511903 113.244556 \\n\",\n       \"L 97.807813 101.176204 \\n\",\n       \"L 98.103722 104.094727 \\n\",\n       \"L 98.69554 94.312274 \\n\",\n       \"L 98.991449 84.015526 \\n\",\n       \"L 99.287358 80.242646 \\n\",\n       \"L 99.583267 60.790761 \\n\",\n       \"L 99.879176 58.575825 \\n\",\n       \"L 100.470994 67.992009 \\n\",\n       \"L 101.062813 126.342425 \\n\",\n       \"L 101.358722 128.589754 \\n\",\n       \"L 101.654631 137.678042 \\n\",\n       \"L 101.95054 132.359879 \\n\",\n       \"L 102.542358 112.338736 \\n\",\n       \"L 102.838267 113.640161 \\n\",\n       \"L 103.134176 126.514069 \\n\",\n       \"L 103.430085 127.088318 \\n\",\n       \"L 103.725994 135.72964 \\n\",\n       \"L 104.021903 118.974918 \\n\",\n       \"L 104.317813 116.852608 \\n\",\n       \"L 105.20554 92.64434 \\n\",\n       \"L 105.797358 108.028638 \\n\",\n       \"L 106.093267 102.601395 \\n\",\n       \"L 106.389176 105.34098 \\n\",\n       \"L 106.685085 101.85164 \\n\",\n       \"L 106.980994 95.033433 \\n\",\n       \"L 107.276903 92.047767 \\n\",\n       \"L 107.572812 98.379469 \\n\",\n       \"L 107.868722 99.916942 \\n\",\n       \"L 108.46054 119.842601 \\n\",\n       \"L 108.756449 115.220526 \\n\",\n       \"L 109.052358 115.763235 \\n\",\n       \"L 109.348267 114.048833 \\n\",\n       \"L 109.644176 106.849025 \\n\",\n       \"L 109.940085 111.824154 \\n\",\n       \"L 110.235994 111.866326 \\n\",\n       \"L 110.531903 117.312587 \\n\",\n       \"L 110.827813 112.223741 \\n\",\n       \"L 111.123722 120.933609 \\n\",\n       \"L 111.419631 109.60659 \\n\",\n       \"L 111.71554 106.256443 \\n\",\n       \"L 112.011449 105.44333 \\n\",\n       \"L 112.307358 102.502847 \\n\",\n       \"L 112.603267 104.534697 \\n\",\n       \"L 112.899176 103.874323 \\n\",\n       \"L 113.195085 108.562315 \\n\",\n       \"L 113.490994 104.327951 \\n\",\n       \"L 113.786903 106.348017 \\n\",\n       \"L 114.378722 109.025479 \\n\",\n       \"L 114.97054 113.887471 \\n\",\n       \"L 115.266449 105.360372 \\n\",\n       \"L 115.562358 104.068731 \\n\",\n       \"L 115.858267 103.960605 \\n\",\n       \"L 116.154176 102.921768 \\n\",\n       \"L 116.450085 104.383209 \\n\",\n       \"L 116.745994 113.135465 \\n\",\n       \"L 117.041903 111.468621 \\n\",\n       \"L 117.337813 110.513373 \\n\",\n       \"L 117.633722 110.853572 \\n\",\n       \"L 117.929631 109.02555 \\n\",\n       \"L 118.22554 109.223989 \\n\",\n       \"L 118.521449 115.129673 \\n\",\n       \"L 119.113267 110.189059 \\n\",\n       \"L 119.705085 101.537568 \\n\",\n       \"L 120.000994 94.170975 \\n\",\n       \"L 120.296903 97.538006 \\n\",\n       \"L 120.592813 104.297229 \\n\",\n       \"L 120.888722 104.86112 \\n\",\n       \"L 121.184631 111.811795 \\n\",\n       \"L 121.48054 109.455866 \\n\",\n       \"L 121.776449 109.815893 \\n\",\n       \"L 122.072358 107.223152 \\n\",\n       \"L 122.368267 114.736898 \\n\",\n       \"L 122.664176 107.994164 \\n\",\n       \"L 122.960085 112.899255 \\n\",\n       \"L 123.255994 115.498365 \\n\",\n       \"L 123.551903 114.496172 \\n\",\n       \"L 124.143722 108.595565 \\n\",\n       \"L 124.439631 106.822216 \\n\",\n       \"L 124.73554 100.448398 \\n\",\n       \"L 125.031449 102.89747 \\n\",\n       \"L 125.327358 99.60976 \\n\",\n       \"L 125.623267 110.559824 \\n\",\n       \"L 125.919176 116.092803 \\n\",\n       \"L 126.215085 113.824164 \\n\",\n       \"L 126.510994 116.215943 \\n\",\n       \"L 126.806903 112.697391 \\n\",\n       \"L 127.398722 96.811012 \\n\",\n       \"L 127.694631 97.245876 \\n\",\n       \"L 127.99054 100.954019 \\n\",\n       \"L 128.286449 103.185539 \\n\",\n       \"L 128.582358 111.888088 \\n\",\n       \"L 128.878267 116.666144 \\n\",\n       \"L 129.174176 119.039332 \\n\",\n       \"L 129.470085 112.629592 \\n\",\n       \"L 129.765994 112.411804 \\n\",\n       \"L 130.061903 102.637379 \\n\",\n       \"L 130.357813 102.243562 \\n\",\n       \"L 130.653722 104.599817 \\n\",\n       \"L 130.949631 103.621553 \\n\",\n       \"L 131.24554 115.45681 \\n\",\n       \"L 131.541449 117.307337 \\n\",\n       \"L 131.837358 115.87021 \\n\",\n       \"L 132.133267 109.849085 \\n\",\n       \"L 132.429176 106.262482 \\n\",\n       \"L 132.725085 95.631351 \\n\",\n       \"L 133.020994 93.637839 \\n\",\n       \"L 133.316903 95.401992 \\n\",\n       \"L 134.204631 122.709011 \\n\",\n       \"L 134.50054 123.247298 \\n\",\n       \"L 135.092358 109.319926 \\n\",\n       \"L 135.388267 93.545283 \\n\",\n       \"L 135.684176 88.726473 \\n\",\n       \"L 136.275994 104.983537 \\n\",\n       \"L 136.867813 127.948461 \\n\",\n       \"L 137.163722 123.980856 \\n\",\n       \"L 137.459631 116.513678 \\n\",\n       \"L 138.051449 90.130842 \\n\",\n       \"L 138.347358 86.450465 \\n\",\n       \"L 138.643267 92.721605 \\n\",\n       \"L 139.530994 122.943058 \\n\",\n       \"L 139.826903 119.229302 \\n\",\n       \"L 140.418722 107.260149 \\n\",\n       \"L 140.714631 94.349452 \\n\",\n       \"L 141.01054 95.837714 \\n\",\n       \"L 142.194176 127.076335 \\n\",\n       \"L 142.490085 123.508052 \\n\",\n       \"L 143.377813 91.632636 \\n\",\n       \"L 143.673722 92.171888 \\n\",\n       \"L 143.969631 95.422743 \\n\",\n       \"L 144.561449 112.544554 \\n\",\n       \"L 144.857358 116.620246 \\n\",\n       \"L 145.153267 122.502729 \\n\",\n       \"L 145.449176 119.414221 \\n\",\n       \"L 146.336903 105.68193 \\n\",\n       \"L 146.632812 106.83314 \\n\",\n       \"L 146.928722 105.254585 \\n\",\n       \"L 147.224631 105.303101 \\n\",\n       \"L 147.52054 109.688476 \\n\",\n       \"L 147.816449 104.316075 \\n\",\n       \"L 148.112358 102.571946 \\n\",\n       \"L 148.408267 102.170184 \\n\",\n       \"L 148.704176 100.163562 \\n\",\n       \"L 149.000085 102.857193 \\n\",\n       \"L 149.295994 104.150493 \\n\",\n       \"L 149.591903 107.608911 \\n\",\n       \"L 149.887812 113.224604 \\n\",\n       \"L 150.183722 113.253267 \\n\",\n       \"L 150.77554 119.865975 \\n\",\n       \"L 151.071449 114.028731 \\n\",\n       \"L 151.367358 111.780965 \\n\",\n       \"L 151.959176 100.478867 \\n\",\n       \"L 152.550994 96.692862 \\n\",\n       \"L 153.142813 108.093836 \\n\",\n       \"L 153.438722 110.40812 \\n\",\n       \"L 153.734631 111.223045 \\n\",\n       \"L 154.03054 109.742176 \\n\",\n       \"L 154.326449 108.958992 \\n\",\n       \"L 154.622358 106.837306 \\n\",\n       \"L 154.918267 109.820141 \\n\",\n       \"L 155.510085 119.968513 \\n\",\n       \"L 155.805994 113.898738 \\n\",\n       \"L 156.101903 111.233259 \\n\",\n       \"L 156.693722 93.926905 \\n\",\n       \"L 157.28554 101.266204 \\n\",\n       \"L 157.581449 114.090034 \\n\",\n       \"L 158.173267 122.515775 \\n\",\n       \"L 158.469176 119.506846 \\n\",\n       \"L 159.060994 102.822618 \\n\",\n       \"L 159.356903 105.672762 \\n\",\n       \"L 159.652813 106.697747 \\n\",\n       \"L 159.948722 110.887005 \\n\",\n       \"L 160.244631 113.316575 \\n\",\n       \"L 160.54054 110.112306 \\n\",\n       \"L 160.836449 109.734824 \\n\",\n       \"L 161.132358 99.476637 \\n\",\n       \"L 161.428267 94.294939 \\n\",\n       \"L 161.724176 95.181359 \\n\",\n       \"L 162.315994 107.735499 \\n\",\n       \"L 162.907813 122.253581 \\n\",\n       \"L 163.203722 125.369205 \\n\",\n       \"L 164.387358 96.610974 \\n\",\n       \"L 164.683267 96.794613 \\n\",\n       \"L 164.979176 99.732593 \\n\",\n       \"L 165.570994 123.211046 \\n\",\n       \"L 165.866903 120.043012 \\n\",\n       \"L 166.458722 105.90603 \\n\",\n       \"L 166.754631 96.445153 \\n\",\n       \"L 167.05054 93.867123 \\n\",\n       \"L 167.642358 109.569895 \\n\",\n       \"L 167.938267 122.782964 \\n\",\n       \"L 168.234176 128.0353 \\n\",\n       \"L 168.825994 115.168727 \\n\",\n       \"L 169.121903 100.96449 \\n\",\n       \"L 169.713722 85.675411 \\n\",\n       \"L 170.009631 88.654083 \\n\",\n       \"L 170.30554 96.683803 \\n\",\n       \"L 170.897358 118.910925 \\n\",\n       \"L 171.193267 121.677795 \\n\",\n       \"L 171.489176 122.60787 \\n\",\n       \"L 171.785085 116.759377 \\n\",\n       \"L 172.376903 97.559789 \\n\",\n       \"L 172.672813 91.323862 \\n\",\n       \"L 173.264631 107.597965 \\n\",\n       \"L 173.856449 128.171382 \\n\",\n       \"L 174.152358 129.439519 \\n\",\n       \"L 174.448267 122.827179 \\n\",\n       \"L 175.040085 99.916269 \\n\",\n       \"L 175.335994 90.284841 \\n\",\n       \"L 175.927813 100.800529 \\n\",\n       \"L 176.519631 122.993276 \\n\",\n       \"L 176.81554 116.843414 \\n\",\n       \"L 177.703267 93.558006 \\n\",\n       \"L 177.999176 91.706422 \\n\",\n       \"L 178.886903 122.988152 \\n\",\n       \"L 179.182813 122.337165 \\n\",\n       \"L 179.478722 115.624405 \\n\",\n       \"L 179.774631 101.25595 \\n\",\n       \"L 180.366449 89.189041 \\n\",\n       \"L 180.662358 96.633412 \\n\",\n       \"L 180.958267 117.469839 \\n\",\n       \"L 181.254176 126.492438 \\n\",\n       \"L 181.550085 122.091281 \\n\",\n       \"L 181.845994 121.732041 \\n\",\n       \"L 182.437813 89.733978 \\n\",\n       \"L 182.733722 87.421854 \\n\",\n       \"L 183.029631 95.117855 \\n\",\n       \"L 183.621449 123.539452 \\n\",\n       \"L 183.917358 125.636683 \\n\",\n       \"L 184.213267 124.615419 \\n\",\n       \"L 185.100994 84.752572 \\n\",\n       \"L 185.396903 89.583829 \\n\",\n       \"L 185.692813 107.458848 \\n\",\n       \"L 185.988722 113.391354 \\n\",\n       \"L 186.284631 126.000002 \\n\",\n       \"L 186.58054 126.515281 \\n\",\n       \"L 187.172358 98.966448 \\n\",\n       \"L 187.468267 95.32513 \\n\",\n       \"L 187.764176 89.136553 \\n\",\n       \"L 188.355994 118.804221 \\n\",\n       \"L 188.651903 121.617425 \\n\",\n       \"L 188.947812 131.500411 \\n\",\n       \"L 189.243722 122.740364 \\n\",\n       \"L 189.83554 95.122819 \\n\",\n       \"L 190.131449 86.02102 \\n\",\n       \"L 190.427358 86.989663 \\n\",\n       \"L 191.315085 126.284456 \\n\",\n       \"L 191.610994 132.661767 \\n\",\n       \"L 191.906903 127.152406 \\n\",\n       \"L 192.498722 96.750719 \\n\",\n       \"L 192.794631 86.883282 \\n\",\n       \"L 193.09054 82.18348 \\n\",\n       \"L 193.386449 90.327592 \\n\",\n       \"L 193.978267 128.902007 \\n\",\n       \"L 194.274176 133.83651 \\n\",\n       \"L 194.570085 128.308362 \\n\",\n       \"L 195.457812 82.127375 \\n\",\n       \"L 195.753722 82.321418 \\n\",\n       \"L 196.34554 123.719251 \\n\",\n       \"L 196.641449 130.799109 \\n\",\n       \"L 196.937358 131.016554 \\n\",\n       \"L 197.825085 85.365009 \\n\",\n       \"L 198.120994 82.206146 \\n\",\n       \"L 199.008722 128.836426 \\n\",\n       \"L 199.304631 131.934143 \\n\",\n       \"L 199.60054 123.876051 \\n\",\n       \"L 200.192358 90.322422 \\n\",\n       \"L 200.488267 82.934886 \\n\",\n       \"L 200.784176 90.20963 \\n\",\n       \"L 201.375994 118.834327 \\n\",\n       \"L 201.671903 127.553274 \\n\",\n       \"L 201.967812 126.124743 \\n\",\n       \"L 202.559631 99.983619 \\n\",\n       \"L 202.85554 87.835028 \\n\",\n       \"L 203.151449 86.587707 \\n\",\n       \"L 203.447358 97.054041 \\n\",\n       \"L 204.039176 124.089546 \\n\",\n       \"L 204.335085 129.001955 \\n\",\n       \"L 204.630994 125.136855 \\n\",\n       \"L 205.222813 96.902966 \\n\",\n       \"L 205.518722 88.592921 \\n\",\n       \"L 205.814631 89.818581 \\n\",\n       \"L 206.406449 116.90474 \\n\",\n       \"L 206.702358 125.668698 \\n\",\n       \"L 206.998267 129.610379 \\n\",\n       \"L 207.294176 121.043502 \\n\",\n       \"L 207.885994 91.849445 \\n\",\n       \"L 208.181903 88.36248 \\n\",\n       \"L 208.477813 91.428397 \\n\",\n       \"L 209.069631 118.114521 \\n\",\n       \"L 209.36554 125.923365 \\n\",\n       \"L 209.661449 126.844564 \\n\",\n       \"L 210.253267 99.612295 \\n\",\n       \"L 210.549176 89.709234 \\n\",\n       \"L 210.845085 88.722586 \\n\",\n       \"L 211.140994 96.281921 \\n\",\n       \"L 211.732813 125.365166 \\n\",\n       \"L 212.028722 127.205866 \\n\",\n       \"L 212.324631 124.704901 \\n\",\n       \"L 212.916449 97.325202 \\n\",\n       \"L 213.212358 90.088706 \\n\",\n       \"L 213.508267 90.547836 \\n\",\n       \"L 214.100085 116.153724 \\n\",\n       \"L 214.395994 126.594128 \\n\",\n       \"L 214.691903 128.17591 \\n\",\n       \"L 214.987813 120.11926 \\n\",\n       \"L 215.579631 91.588674 \\n\",\n       \"L 215.87554 88.840599 \\n\",\n       \"L 216.171449 91.81158 \\n\",\n       \"L 216.763267 117.845464 \\n\",\n       \"L 217.059176 126.211479 \\n\",\n       \"L 217.355085 126.465623 \\n\",\n       \"L 217.946903 99.964743 \\n\",\n       \"L 218.242813 90.42716 \\n\",\n       \"L 218.538722 88.076796 \\n\",\n       \"L 218.834631 96.597078 \\n\",\n       \"L 219.426449 124.408118 \\n\",\n       \"L 219.722358 127.530418 \\n\",\n       \"L 220.018267 124.824756 \\n\",\n       \"L 220.610085 98.149931 \\n\",\n       \"L 220.905994 90.250572 \\n\",\n       \"L 221.201903 90.53387 \\n\",\n       \"L 221.793722 115.923015 \\n\",\n       \"L 222.089631 126.714615 \\n\",\n       \"L 222.38554 127.50475 \\n\",\n       \"L 222.681449 120.478387 \\n\",\n       \"L 223.273267 91.842255 \\n\",\n       \"L 223.569176 89.288893 \\n\",\n       \"L 223.865085 91.725239 \\n\",\n       \"L 224.456903 117.975308 \\n\",\n       \"L 224.752813 126.149719 \\n\",\n       \"L 225.048722 126.120335 \\n\",\n       \"L 225.64054 100.478801 \\n\",\n       \"L 225.936449 90.135444 \\n\",\n       \"L 226.232358 88.726238 \\n\",\n       \"L 226.528267 96.243727 \\n\",\n       \"L 227.120085 124.443261 \\n\",\n       \"L 227.415994 126.954304 \\n\",\n       \"L 227.711903 125.109393 \\n\",\n       \"L 228.007812 108.76276 \\n\",\n       \"L 228.599631 90.240633 \\n\",\n       \"L 228.89554 90.578466 \\n\",\n       \"L 229.487358 115.934314 \\n\",\n       \"L 229.783267 126.308465 \\n\",\n       \"L 230.079176 127.462269 \\n\",\n       \"L 230.375085 120.163488 \\n\",\n       \"L 230.966903 91.974037 \\n\",\n       \"L 231.262812 89.491899 \\n\",\n       \"L 231.558722 91.868844 \\n\",\n       \"L 232.15054 117.931641 \\n\",\n       \"L 232.446449 126.028688 \\n\",\n       \"L 232.742358 125.661624 \\n\",\n       \"L 233.334176 100.67131 \\n\",\n       \"L 233.630085 90.066962 \\n\",\n       \"L 233.925994 89.201407 \\n\",\n       \"L 234.221903 96.143594 \\n\",\n       \"L 234.813722 124.005766 \\n\",\n       \"L 235.109631 127.057328 \\n\",\n       \"L 235.40554 124.517188 \\n\",\n       \"L 235.997358 98.843182 \\n\",\n       \"L 236.293267 90.457014 \\n\",\n       \"L 236.589176 90.694914 \\n\",\n       \"L 237.180994 115.766944 \\n\",\n       \"L 237.476903 126.03529 \\n\",\n       \"L 237.772812 127.204235 \\n\",\n       \"L 238.068722 120.236315 \\n\",\n       \"L 238.66054 92.528515 \\n\",\n       \"L 238.956449 89.607827 \\n\",\n       \"L 239.252358 91.788541 \\n\",\n       \"L 239.844176 117.396012 \\n\",\n       \"L 240.140085 126.0634 \\n\",\n       \"L 240.435994 125.249275 \\n\",\n       \"L 241.027813 100.67518 \\n\",\n       \"L 241.323722 90.276778 \\n\",\n       \"L 241.619631 89.535773 \\n\",\n       \"L 241.91554 96.137288 \\n\",\n       \"L 242.507358 123.90405 \\n\",\n       \"L 242.803267 126.646225 \\n\",\n       \"L 243.099176 124.395242 \\n\",\n       \"L 243.690994 99.036486 \\n\",\n       \"L 243.986903 90.468876 \\n\",\n       \"L 244.282813 91.124075 \\n\",\n       \"L 244.874631 115.590325 \\n\",\n       \"L 245.17054 125.905754 \\n\",\n       \"L 245.466449 126.847017 \\n\",\n       \"L 245.762358 120.1638 \\n\",\n       \"L 246.354176 92.854919 \\n\",\n       \"L 246.650085 89.674648 \\n\",\n       \"L 246.945994 92.089539 \\n\",\n       \"L 247.537813 117.293873 \\n\",\n       \"L 247.833722 125.710933 \\n\",\n       \"L 248.129631 125.17524 \\n\",\n       \"L 248.721449 100.70666 \\n\",\n       \"L 249.017358 90.726427 \\n\",\n       \"L 249.313267 89.533517 \\n\",\n       \"L 249.609176 96.367787 \\n\",\n       \"L 250.200994 123.582477 \\n\",\n       \"L 250.496903 126.461648 \\n\",\n       \"L 250.792813 124.145032 \\n\",\n       \"L 251.384631 99.125452 \\n\",\n       \"L 251.68054 90.644115 \\n\",\n       \"L 251.976449 91.460863 \\n\",\n       \"L 252.864176 125.600307 \\n\",\n       \"L 253.160085 126.596904 \\n\",\n       \"L 253.455994 120.027006 \\n\",\n       \"L 254.047813 93.075855 \\n\",\n       \"L 254.343722 89.833974 \\n\",\n       \"L 254.639631 92.375642 \\n\",\n       \"L 255.231449 117.134191 \\n\",\n       \"L 255.527358 125.536103 \\n\",\n       \"L 255.823267 124.883719 \\n\",\n       \"L 256.415085 100.801566 \\n\",\n       \"L 256.710994 90.980686 \\n\",\n       \"L 257.006903 89.758031 \\n\",\n       \"L 257.302813 96.405609 \\n\",\n       \"L 257.894631 123.179665 \\n\",\n       \"L 258.19054 126.297161 \\n\",\n       \"L 258.486449 123.970704 \\n\",\n       \"L 259.078267 99.315791 \\n\",\n       \"L 259.374176 90.836102 \\n\",\n       \"L 259.670085 91.664543 \\n\",\n       \"L 260.557813 125.259049 \\n\",\n       \"L 260.853722 126.426457 \\n\",\n       \"L 261.149631 119.836385 \\n\",\n       \"L 261.741449 93.216434 \\n\",\n       \"L 262.037358 90.087148 \\n\",\n       \"L 262.333267 92.587439 \\n\",\n       \"L 262.925085 117.077969 \\n\",\n       \"L 263.220994 125.252561 \\n\",\n       \"L 263.516903 124.69033 \\n\",\n       \"L 264.108722 100.982569 \\n\",\n       \"L 264.404631 91.13585 \\n\",\n       \"L 264.70054 90.002631 \\n\",\n       \"L 264.996449 96.503087 \\n\",\n       \"L 265.588267 122.876439 \\n\",\n       \"L 265.884176 126.176234 \\n\",\n       \"L 266.180085 123.649376 \\n\",\n       \"L 266.771903 99.32381 \\n\",\n       \"L 267.067813 91.161358 \\n\",\n       \"L 267.363722 91.730325 \\n\",\n       \"L 268.251449 124.935555 \\n\",\n       \"L 268.547358 126.287332 \\n\",\n       \"L 268.843267 119.671954 \\n\",\n       \"L 269.435085 93.434869 \\n\",\n       \"L 269.730994 90.295316 \\n\",\n       \"L 270.026903 92.714285 \\n\",\n       \"L 270.618722 116.895049 \\n\",\n       \"L 270.914631 125.094825 \\n\",\n       \"L 271.21054 124.392777 \\n\",\n       \"L 272.098267 91.42286 \\n\",\n       \"L 272.394176 90.132017 \\n\",\n       \"L 272.690085 96.658744 \\n\",\n       \"L 273.281903 122.712757 \\n\",\n       \"L 273.577812 125.945554 \\n\",\n       \"L 273.873722 123.450266 \\n\",\n       \"L 274.46554 99.412903 \\n\",\n       \"L 274.761449 91.356633 \\n\",\n       \"L 275.057358 91.871467 \\n\",\n       \"L 275.945085 124.7366 \\n\",\n       \"L 276.240994 126.08039 \\n\",\n       \"L 276.536903 119.563796 \\n\",\n       \"L 277.128722 93.642339 \\n\",\n       \"L 277.424631 90.455546 \\n\",\n       \"L 277.72054 92.860249 \\n\",\n       \"L 278.312358 116.821815 \\n\",\n       \"L 278.608267 124.798475 \\n\",\n       \"L 278.904176 124.328558 \\n\",\n       \"L 279.791903 91.599984 \\n\",\n       \"L 280.087813 90.281018 \\n\",\n       \"L 280.383722 96.764579 \\n\",\n       \"L 280.97554 122.579948 \\n\",\n       \"L 281.271449 125.702101 \\n\",\n       \"L 281.567358 123.327531 \\n\",\n       \"L 282.159176 99.507579 \\n\",\n       \"L 282.455085 91.502985 \\n\",\n       \"L 282.750994 92.032529 \\n\",\n       \"L 283.638722 124.524368 \\n\",\n       \"L 283.934631 125.944666 \\n\",\n       \"L 284.23054 119.417048 \\n\",\n       \"L 284.822358 93.761713 \\n\",\n       \"L 285.118267 90.620513 \\n\",\n       \"L 285.414176 92.963748 \\n\",\n       \"L 286.005994 116.69421 \\n\",\n       \"L 286.301903 124.636103 \\n\",\n       \"L 286.597813 124.188942 \\n\",\n       \"L 287.48554 91.775843 \\n\",\n       \"L 287.781449 90.392769 \\n\",\n       \"L 288.077358 96.821905 \\n\",\n       \"L 288.669176 122.397771 \\n\",\n       \"L 288.965085 125.553927 \\n\",\n       \"L 289.260994 123.203963 \\n\",\n       \"L 289.852813 99.561721 \\n\",\n       \"L 290.148722 91.667692 \\n\",\n       \"L 290.444631 92.100319 \\n\",\n       \"L 291.332358 124.403372 \\n\",\n       \"L 291.628267 125.780925 \\n\",\n       \"L 291.924176 119.352268 \\n\",\n       \"L 292.515994 93.857016 \\n\",\n       \"L 292.811903 90.756075 \\n\",\n       \"L 293.107813 93.038724 \\n\",\n       \"L 293.699631 116.601897 \\n\",\n       \"L 293.99554 124.501191 \\n\",\n       \"L 294.291449 124.090816 \\n\",\n       \"L 295.179176 91.885068 \\n\",\n       \"L 295.475085 90.476272 \\n\",\n       \"L 295.770994 96.882461 \\n\",\n       \"L 296.362813 122.294857 \\n\",\n       \"L 296.658722 125.40976 \\n\",\n       \"L 296.954631 123.144466 \\n\",\n       \"L 297.546449 99.624722 \\n\",\n       \"L 297.842358 91.778025 \\n\",\n       \"L 298.138267 92.144224 \\n\",\n       \"L 299.025994 124.292346 \\n\",\n       \"L 299.321903 125.677227 \\n\",\n       \"L 299.617813 119.315003 \\n\",\n       \"L 300.209631 93.941586 \\n\",\n       \"L 300.50554 90.839716 \\n\",\n       \"L 300.801449 93.088351 \\n\",\n       \"L 301.393267 116.535113 \\n\",\n       \"L 301.689176 124.411665 \\n\",\n       \"L 301.985085 124.010777 \\n\",\n       \"L 302.872813 91.950052 \\n\",\n       \"L 303.168722 90.539502 \\n\",\n       \"L 303.464631 96.903612 \\n\",\n       \"L 304.056449 122.219559 \\n\",\n       \"L 304.352358 125.32726 \\n\",\n       \"L 304.648267 123.095251 \\n\",\n       \"L 305.240085 99.673606 \\n\",\n       \"L 305.535994 91.828307 \\n\",\n       \"L 305.831903 92.177923 \\n\",\n       \"L 306.719631 124.224772 \\n\",\n       \"L 307.01554 125.615707 \\n\",\n       \"L 307.311449 119.303383 \\n\",\n       \"L 307.903267 94.003186 \\n\",\n       \"L 308.199176 90.873888 \\n\",\n       \"L 308.495085 93.107846 \\n\",\n       \"L 309.086903 116.504562 \\n\",\n       \"L 309.382812 124.338713 \\n\",\n       \"L 309.678722 123.996959 \\n\",\n       \"L 310.566449 91.969226 \\n\",\n       \"L 310.862358 90.569624 \\n\",\n       \"L 311.158267 96.896597 \\n\",\n       \"L 311.750085 122.190573 \\n\",\n       \"L 312.045994 125.27594 \\n\",\n       \"L 312.341903 123.092209 \\n\",\n       \"L 312.933722 99.713866 \\n\",\n       \"L 313.229631 91.819369 \\n\",\n       \"L 313.52554 92.20398 \\n\",\n       \"L 314.413267 124.182359 \\n\",\n       \"L 314.709176 125.617877 \\n\",\n       \"L 315.005085 119.287948 \\n\",\n       \"L 315.596903 94.002721 \\n\",\n       \"L 315.892812 90.88541 \\n\",\n       \"L 316.188722 93.085379 \\n\",\n       \"L 316.78054 116.478415 \\n\",\n       \"L 317.076449 124.327325 \\n\",\n       \"L 317.372358 124.002831 \\n\",\n       \"L 318.260085 91.962419 \\n\",\n       \"L 318.555994 90.562502 \\n\",\n       \"L 318.851903 96.856884 \\n\",\n       \"L 319.443722 122.170347 \\n\",\n       \"L 319.739631 125.295562 \\n\",\n       \"L 320.03554 123.094911 \\n\",\n       \"L 320.627358 99.695036 \\n\",\n       \"L 320.923267 91.817023 \\n\",\n       \"L 321.219176 92.160885 \\n\",\n       \"L 322.106903 124.217168 \\n\",\n       \"L 322.402813 125.624745 \\n\",\n       \"L 322.698722 119.321953 \\n\",\n       \"L 323.29054 93.977276 \\n\",\n       \"L 323.586449 90.857882 \\n\",\n       \"L 323.882358 93.035264 \\n\",\n       \"L 324.474176 116.462511 \\n\",\n       \"L 324.770085 124.376331 \\n\",\n       \"L 325.065994 124.018015 \\n\",\n       \"L 325.953722 91.936164 \\n\",\n       \"L 326.249631 90.501812 \\n\",\n       \"L 326.54554 96.821205 \\n\",\n       \"L 327.137358 122.202073 \\n\",\n       \"L 327.433267 125.338984 \\n\",\n       \"L 327.729176 123.143463 \\n\",\n       \"L 328.320994 99.674356 \\n\",\n       \"L 328.616903 91.765369 \\n\",\n       \"L 328.912813 92.109755 \\n\",\n       \"L 329.80054 124.255458 \\n\",\n       \"L 330.096449 125.693479 \\n\",\n       \"L 330.392358 119.363237 \\n\",\n       \"L 330.984176 93.928486 \\n\",\n       \"L 331.280085 90.782646 \\n\",\n       \"L 331.575994 92.984987 \\n\",\n       \"L 332.167813 116.498247 \\n\",\n       \"L 332.463722 124.434309 \\n\",\n       \"L 332.759631 124.082033 \\n\",\n       \"L 333.647358 91.867807 \\n\",\n       \"L 333.943267 90.423987 \\n\",\n       \"L 334.239176 96.761629 \\n\",\n       \"L 334.830994 122.25818 \\n\",\n       \"L 335.126903 125.425743 \\n\",\n       \"L 335.422813 123.205411 \\n\",\n       \"L 336.014631 99.633159 \\n\",\n       \"L 336.31054 91.689879 \\n\",\n       \"L 336.606449 92.030069 \\n\",\n       \"L 337.494176 124.337044 \\n\",\n       \"L 337.790085 125.785106 \\n\",\n       \"L 338.085994 119.421433 \\n\",\n       \"L 338.677813 93.848993 \\n\",\n       \"L 338.973722 90.691406 \\n\",\n       \"L 339.269631 92.906401 \\n\",\n       \"L 339.861449 116.549806 \\n\",\n       \"L 340.157358 124.515735 \\n\",\n       \"L 340.453267 124.175554 \\n\",\n       \"L 341.340994 91.778615 \\n\",\n       \"L 341.636903 90.310549 \\n\",\n       \"L 341.932813 96.711701 \\n\",\n       \"L 342.524631 122.356587 \\n\",\n       \"L 342.82054 125.525815 \\n\",\n       \"L 343.116449 123.296271 \\n\",\n       \"L 343.708267 99.57715 \\n\",\n       \"L 344.004176 91.59907 \\n\",\n       \"L 344.300085 91.930241 \\n\",\n       \"L 345.187813 124.432396 \\n\",\n       \"L 345.483722 125.913315 \\n\",\n       \"L 345.779631 119.481671 \\n\",\n       \"L 346.371449 93.747577 \\n\",\n       \"L 346.667358 90.579995 \\n\",\n       \"L 346.963267 92.817255 \\n\",\n       \"L 347.555085 116.621674 \\n\",\n       \"L 347.850994 124.613957 \\n\",\n       \"L 348.146903 124.288269 \\n\",\n       \"L 349.034631 91.674389 \\n\",\n       \"L 349.33054 90.183441 \\n\",\n       \"L 349.626449 96.650477 \\n\",\n       \"L 350.218267 122.476336 \\n\",\n       \"L 350.514176 125.646452 \\n\",\n       \"L 350.810085 123.39741 \\n\",\n       \"L 351.401903 99.509045 \\n\",\n       \"L 351.697812 91.496385 \\n\",\n       \"L 351.993722 91.813371 \\n\",\n       \"L 352.881449 124.562454 \\n\",\n       \"L 353.177358 126.042865 \\n\",\n       \"L 353.473267 119.557339 \\n\",\n       \"L 354.065085 93.635226 \\n\",\n       \"L 354.360994 90.454442 \\n\",\n       \"L 354.656903 92.715172 \\n\",\n       \"L 355.248722 116.6964 \\n\",\n       \"L 355.544631 124.731342 \\n\",\n       \"L 355.84054 124.414363 \\n\",\n       \"L 356.728267 91.54731 \\n\",\n       \"L 357.024176 90.05578 \\n\",\n       \"L 357.320085 96.576479 \\n\",\n       \"L 357.911903 122.60649 \\n\",\n       \"L 358.207813 125.772562 \\n\",\n       \"L 358.503722 123.522012 \\n\",\n       \"L 359.09554 99.445403 \\n\",\n       \"L 359.391449 91.3751 \\n\",\n       \"L 359.687358 91.699674 \\n\",\n       \"L 360.575085 124.700324 \\n\",\n       \"L 360.870994 126.179973 \\n\",\n       \"L 361.166903 119.642392 \\n\",\n       \"L 361.758722 93.508001 \\n\",\n       \"L 362.054631 90.330927 \\n\",\n       \"L 362.35054 92.602722 \\n\",\n       \"L 362.942358 116.771213 \\n\",\n       \"L 363.238267 124.863432 \\n\",\n       \"L 363.534176 124.542901 \\n\",\n       \"L 364.421903 91.408548 \\n\",\n       \"L 364.717813 89.92853 \\n\",\n       \"L 365.013722 96.503691 \\n\",\n       \"L 365.60554 122.745946 \\n\",\n       \"L 365.901449 125.909456 \\n\",\n       \"L 366.197358 123.643308 \\n\",\n       \"L 366.789176 99.380517 \\n\",\n       \"L 367.085085 91.24811 \\n\",\n       \"L 367.380994 91.584742 \\n\",\n       \"L 367.972813 115.14728 \\n\",\n       \"L 368.268722 124.843864 \\n\",\n       \"L 368.564631 126.322774 \\n\",\n       \"L 368.86054 119.723767 \\n\",\n       \"L 369.452358 93.382179 \\n\",\n       \"L 369.748267 90.201611 \\n\",\n       \"L 370.044176 92.492867 \\n\",\n       \"L 370.635994 116.847805 \\n\",\n       \"L 370.931903 125.000605 \\n\",\n       \"L 371.227813 124.668097 \\n\",\n       \"L 371.819631 101.012989 \\n\",\n       \"L 372.11554 91.268334 \\n\",\n       \"L 372.411449 89.808948 \\n\",\n       \"L 372.707358 96.420702 \\n\",\n       \"L 373.299176 122.866379 \\n\",\n       \"L 373.595085 126.06304 \\n\",\n       \"L 373.890994 123.751054 \\n\",\n       \"L 374.482813 99.305698 \\n\",\n       \"L 374.778722 91.129383 \\n\",\n       \"L 375.074631 91.471856 \\n\",\n       \"L 375.666449 115.225675 \\n\",\n       \"L 375.962358 124.988471 \\n\",\n       \"L 376.258267 126.459001 \\n\",\n       \"L 376.554176 119.805126 \\n\",\n       \"L 377.145994 93.251871 \\n\",\n       \"L 377.441903 90.086343 \\n\",\n       \"L 377.737813 92.380642 \\n\",\n       \"L 378.329631 116.920933 \\n\",\n       \"L 378.62554 125.136936 \\n\",\n       \"L 378.921449 124.786121 \\n\",\n       \"L 379.513267 100.944499 \\n\",\n       \"L 379.809176 91.144985 \\n\",\n       \"L 380.105085 89.681196 \\n\",\n       \"L 380.400994 96.365729 \\n\",\n       \"L 380.992813 123.014586 \\n\",\n       \"L 381.288722 126.182072 \\n\",\n       \"L 381.584631 123.874277 \\n\",\n       \"L 382.176449 99.244327 \\n\",\n       \"L 382.472358 91.017429 \\n\",\n       \"L 382.768267 91.36071 \\n\",\n       \"L 383.360085 115.294077 \\n\",\n       \"L 383.655994 125.126933 \\n\",\n       \"L 383.951903 126.586397 \\n\",\n       \"L 384.247813 119.881315 \\n\",\n       \"L 384.839631 93.145774 \\n\",\n       \"L 385.13554 89.959278 \\n\",\n       \"L 385.431449 92.297141 \\n\",\n       \"L 386.023267 117.005848 \\n\",\n       \"L 386.319176 125.249416 \\n\",\n       \"L 386.615085 124.904206 \\n\",\n       \"L 387.206903 100.884885 \\n\",\n       \"L 387.502813 91.026687 \\n\",\n       \"L 387.798722 89.573686 \\n\",\n       \"L 388.094631 96.300994 \\n\",\n       \"L 388.686449 123.129188 \\n\",\n       \"L 388.982358 126.312885 \\n\",\n       \"L 389.278267 123.97056 \\n\",\n       \"L 389.870085 99.189788 \\n\",\n       \"L 390.165994 90.906029 \\n\",\n       \"L 390.461903 91.278055 \\n\",\n       \"L 391.053722 115.374592 \\n\",\n       \"L 391.349631 125.245796 \\n\",\n       \"L 391.64554 126.704136 \\n\",\n       \"L 391.941449 119.950075 \\n\",\n       \"L 392.533267 93.038942 \\n\",\n       \"L 392.829176 89.860142 \\n\",\n       \"L 393.125085 92.204198 \\n\",\n       \"L 393.716903 117.064127 \\n\",\n       \"L 394.012813 125.369703 \\n\",\n       \"L 394.308722 124.999093 \\n\",\n       \"L 394.90054 100.83045 \\n\",\n       \"L 395.196449 90.91935 \\n\",\n       \"L 395.492358 89.482 \\n\",\n       \"L 395.788267 96.25014 \\n\",\n       \"L 396.380085 123.24377 \\n\",\n       \"L 396.675994 126.418747 \\n\",\n       \"L 396.971903 124.064142 \\n\",\n       \"L 397.563722 99.137083 \\n\",\n       \"L 397.859631 90.817416 \\n\",\n       \"L 398.15554 91.190939 \\n\",\n       \"L 398.747358 115.428455 \\n\",\n       \"L 399.043267 125.365641 \\n\",\n       \"L 399.339176 126.796262 \\n\",\n       \"L 399.635085 120.015347 \\n\",\n       \"L 400.226903 92.957342 \\n\",\n       \"L 400.522813 89.76335 \\n\",\n       \"L 400.818722 92.141939 \\n\",\n       \"L 401.41054 117.127805 \\n\",\n       \"L 401.706449 125.461531 \\n\",\n       \"L 402.002358 125.086192 \\n\",\n       \"L 402.594176 100.784447 \\n\",\n       \"L 402.890085 90.8301 \\n\",\n       \"L 403.185994 89.404141 \\n\",\n       \"L 403.481903 96.202081 \\n\",\n       \"L 404.073722 123.328283 \\n\",\n       \"L 404.369631 126.517218 \\n\",\n       \"L 404.66554 124.136545 \\n\",\n       \"L 405.257358 99.098872 \\n\",\n       \"L 405.553267 90.733386 \\n\",\n       \"L 405.849176 91.136993 \\n\",\n       \"L 406.440994 115.495766 \\n\",\n       \"L 406.736903 125.445297 \\n\",\n       \"L 407.032813 126.890159 \\n\",\n       \"L 407.328722 120.049418 \\n\",\n       \"L 407.92054 92.866549 \\n\",\n       \"L 408.216449 89.707502 \\n\",\n       \"L 408.512358 92.073216 \\n\",\n       \"L 409.104176 117.16927 \\n\",\n       \"L 409.400085 125.544709 \\n\",\n       \"L 409.695994 125.153648 \\n\",\n       \"L 410.287813 100.75321 \\n\",\n       \"L 410.583722 90.749988 \\n\",\n       \"L 410.879631 89.350264 \\n\",\n       \"L 411.17554 96.164589 \\n\",\n       \"L 411.767358 123.400526 \\n\",\n       \"L 412.063267 126.594321 \\n\",\n       \"L 412.359176 124.193605 \\n\",\n       \"L 412.950994 99.066493 \\n\",\n       \"L 413.246903 90.677136 \\n\",\n       \"L 413.542813 91.083726 \\n\",\n       \"L 414.134631 115.531683 \\n\",\n       \"L 414.43054 125.527481 \\n\",\n       \"L 414.726449 126.943626 \\n\",\n       \"L 415.022358 120.095 \\n\",\n       \"L 415.614176 92.818436 \\n\",\n       \"L 415.910085 89.645173 \\n\",\n       \"L 416.205994 92.038519 \\n\",\n       \"L 416.797813 117.214446 \\n\",\n       \"L 417.093722 125.600089 \\n\",\n       \"L 417.389631 125.205148 \\n\",\n       \"L 417.981449 100.720375 \\n\",\n       \"L 418.277358 90.700454 \\n\",\n       \"L 418.573267 89.299549 \\n\",\n       \"L 418.869176 96.149541 \\n\",\n       \"L 419.460994 123.462773 \\n\",\n       \"L 419.756903 126.644949 \\n\",\n       \"L 420.052813 124.238575 \\n\",\n       \"L 420.644631 99.043512 \\n\",\n       \"L 420.94054 90.633889 \\n\",\n       \"L 421.236449 91.054069 \\n\",\n       \"L 421.828267 115.570553 \\n\",\n       \"L 421.828267 115.570553 \\n\",\n       \"\\\" style=\\\"fill:none;stroke:#1f77b4;stroke-linecap:square;stroke-width:1.5;\\\"/>\\n\",\n       \"   </g>\\n\",\n       \"   <g id=\\\"patch_3\\\">\\n\",\n       \"    <path d=\\\"M 48.982813 159.12 \\n\",\n       \"L 48.982813 50.4 \\n\",\n       \"\\\" style=\\\"fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;stroke-width:0.8;\\\"/>\\n\",\n       \"   </g>\\n\",\n       \"   <g id=\\\"patch_4\\\">\\n\",\n       \"    <path d=\\\"M 439.582813 159.12 \\n\",\n       \"L 439.582813 50.4 \\n\",\n       \"\\\" style=\\\"fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;stroke-width:0.8;\\\"/>\\n\",\n       \"   </g>\\n\",\n       \"   <g id=\\\"patch_5\\\">\\n\",\n       \"    <path d=\\\"M 48.982813 159.12 \\n\",\n       \"L 439.582812 159.12 \\n\",\n       \"\\\" style=\\\"fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;stroke-width:0.8;\\\"/>\\n\",\n       \"   </g>\\n\",\n       \"   <g id=\\\"patch_6\\\">\\n\",\n       \"    <path d=\\\"M 48.982813 50.4 \\n\",\n       \"L 439.582812 50.4 \\n\",\n       \"\\\" style=\\\"fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;stroke-width:0.8;\\\"/>\\n\",\n       \"   </g>\\n\",\n       \"  </g>\\n\",\n       \"  <g id=\\\"axes_2\\\">\\n\",\n       \"   <g id=\\\"patch_7\\\">\\n\",\n       \"    <path d=\\\"M 48.982813 267.84 \\n\",\n       \"L 439.582813 267.84 \\n\",\n       \"L 439.582813 159.12 \\n\",\n       \"L 48.982813 159.12 \\n\",\n       \"z\\n\",\n       \"\\\" style=\\\"fill:#ffffff;\\\"/>\\n\",\n       \"   </g>\\n\",\n       \"   <g id=\\\"matplotlib.axis_3\\\">\\n\",\n       \"    <g id=\\\"xtick_8\\\">\\n\",\n       \"     <g id=\\\"line2d_14\\\">\\n\",\n       \"      <g>\\n\",\n       \"       <use style=\\\"stroke:#000000;stroke-width:0.8;\\\" x=\\\"66.737358\\\" xlink:href=\\\"#m3044d31f40\\\" y=\\\"267.84\\\"/>\\n\",\n       \"      </g>\\n\",\n       \"     </g>\\n\",\n       \"    </g>\\n\",\n       \"    <g id=\\\"xtick_9\\\">\\n\",\n       \"     <g id=\\\"line2d_15\\\">\\n\",\n       \"      <g>\\n\",\n       \"       <use style=\\\"stroke:#000000;stroke-width:0.8;\\\" x=\\\"125.869899\\\" xlink:href=\\\"#m3044d31f40\\\" y=\\\"267.84\\\"/>\\n\",\n       \"      </g>\\n\",\n       \"     </g>\\n\",\n       \"    </g>\\n\",\n       \"    <g id=\\\"xtick_10\\\">\\n\",\n       \"     <g id=\\\"line2d_16\\\">\\n\",\n       \"      <g>\\n\",\n       \"       <use style=\\\"stroke:#000000;stroke-width:0.8;\\\" x=\\\"185.00244\\\" xlink:href=\\\"#m3044d31f40\\\" y=\\\"267.84\\\"/>\\n\",\n       \"      </g>\\n\",\n       \"     </g>\\n\",\n       \"    </g>\\n\",\n       \"    <g id=\\\"xtick_11\\\">\\n\",\n       \"     <g id=\\\"line2d_17\\\">\\n\",\n       \"      <g>\\n\",\n       \"       <use style=\\\"stroke:#000000;stroke-width:0.8;\\\" x=\\\"244.134981\\\" xlink:href=\\\"#m3044d31f40\\\" y=\\\"267.84\\\"/>\\n\",\n       \"      </g>\\n\",\n       \"     </g>\\n\",\n       \"    </g>\\n\",\n       \"    <g id=\\\"xtick_12\\\">\\n\",\n       \"     <g id=\\\"line2d_18\\\">\\n\",\n       \"      <g>\\n\",\n       \"       <use style=\\\"stroke:#000000;stroke-width:0.8;\\\" x=\\\"303.267522\\\" xlink:href=\\\"#m3044d31f40\\\" y=\\\"267.84\\\"/>\\n\",\n       \"      </g>\\n\",\n       \"     </g>\\n\",\n       \"    </g>\\n\",\n       \"    <g id=\\\"xtick_13\\\">\\n\",\n       \"     <g id=\\\"line2d_19\\\">\\n\",\n       \"      <g>\\n\",\n       \"       <use style=\\\"stroke:#000000;stroke-width:0.8;\\\" x=\\\"362.400063\\\" xlink:href=\\\"#m3044d31f40\\\" y=\\\"267.84\\\"/>\\n\",\n       \"      </g>\\n\",\n       \"     </g>\\n\",\n       \"    </g>\\n\",\n       \"    <g id=\\\"xtick_14\\\">\\n\",\n       \"     <g id=\\\"line2d_20\\\">\\n\",\n       \"      <g>\\n\",\n       \"       <use style=\\\"stroke:#000000;stroke-width:0.8;\\\" x=\\\"421.532604\\\" xlink:href=\\\"#m3044d31f40\\\" y=\\\"267.84\\\"/>\\n\",\n       \"      </g>\\n\",\n       \"     </g>\\n\",\n       \"    </g>\\n\",\n       \"   </g>\\n\",\n       \"   <g id=\\\"matplotlib.axis_4\\\">\\n\",\n       \"    <g id=\\\"ytick_6\\\">\\n\",\n       \"     <g id=\\\"line2d_21\\\">\\n\",\n       \"      <g>\\n\",\n       \"       <use style=\\\"stroke:#000000;stroke-width:0.8;\\\" x=\\\"48.982813\\\" xlink:href=\\\"#m8fbb032ec0\\\" y=\\\"261.860554\\\"/>\\n\",\n       \"      </g>\\n\",\n       \"     </g>\\n\",\n       \"     <g id=\\\"text_8\\\">\\n\",\n       \"      <!-- −10 -->\\n\",\n       \"      <g transform=\\\"translate(20.878125 265.659772)scale(0.1 -0.1)\\\">\\n\",\n       \"       <use xlink:href=\\\"#DejaVuSans-8722\\\"/>\\n\",\n       \"       <use x=\\\"83.789062\\\" xlink:href=\\\"#DejaVuSans-49\\\"/>\\n\",\n       \"       <use x=\\\"147.412109\\\" xlink:href=\\\"#DejaVuSans-48\\\"/>\\n\",\n       \"      </g>\\n\",\n       \"     </g>\\n\",\n       \"    </g>\\n\",\n       \"    <g id=\\\"ytick_7\\\">\\n\",\n       \"     <g id=\\\"line2d_22\\\">\\n\",\n       \"      <g>\\n\",\n       \"       <use style=\\\"stroke:#000000;stroke-width:0.8;\\\" x=\\\"48.982813\\\" xlink:href=\\\"#m8fbb032ec0\\\" y=\\\"236.450278\\\"/>\\n\",\n       \"      </g>\\n\",\n       \"     </g>\\n\",\n       \"     <g id=\\\"text_9\\\">\\n\",\n       \"      <!-- −5 -->\\n\",\n       \"      <defs>\\n\",\n       \"       <path d=\\\"M 10.796875 72.90625 \\n\",\n       \"L 49.515625 72.90625 \\n\",\n       \"L 49.515625 64.59375 \\n\",\n       \"L 19.828125 64.59375 \\n\",\n       \"L 19.828125 46.734375 \\n\",\n       \"Q 21.96875 47.46875 24.109375 47.828125 \\n\",\n       \"Q 26.265625 48.1875 28.421875 48.1875 \\n\",\n       \"Q 40.625 48.1875 47.75 41.5 \\n\",\n       \"Q 54.890625 34.8125 54.890625 23.390625 \\n\",\n       \"Q 54.890625 11.625 47.5625 5.09375 \\n\",\n       \"Q 40.234375 -1.421875 26.90625 -1.421875 \\n\",\n       \"Q 22.3125 -1.421875 17.546875 -0.640625 \\n\",\n       \"Q 12.796875 0.140625 7.71875 1.703125 \\n\",\n       \"L 7.71875 11.625 \\n\",\n       \"Q 12.109375 9.234375 16.796875 8.0625 \\n\",\n       \"Q 21.484375 6.890625 26.703125 6.890625 \\n\",\n       \"Q 35.15625 6.890625 40.078125 11.328125 \\n\",\n       \"Q 45.015625 15.765625 45.015625 23.390625 \\n\",\n       \"Q 45.015625 31 40.078125 35.4375 \\n\",\n       \"Q 35.15625 39.890625 26.703125 39.890625 \\n\",\n       \"Q 22.75 39.890625 18.8125 39.015625 \\n\",\n       \"Q 14.890625 38.140625 10.796875 36.28125 \\n\",\n       \"z\\n\",\n       \"\\\" id=\\\"DejaVuSans-53\\\"/>\\n\",\n       \"      </defs>\\n\",\n       \"      <g transform=\\\"translate(27.240625 240.249496)scale(0.1 -0.1)\\\">\\n\",\n       \"       <use xlink:href=\\\"#DejaVuSans-8722\\\"/>\\n\",\n       \"       <use x=\\\"83.789062\\\" xlink:href=\\\"#DejaVuSans-53\\\"/>\\n\",\n       \"      </g>\\n\",\n       \"     </g>\\n\",\n       \"    </g>\\n\",\n       \"    <g id=\\\"ytick_8\\\">\\n\",\n       \"     <g id=\\\"line2d_23\\\">\\n\",\n       \"      <g>\\n\",\n       \"       <use style=\\\"stroke:#000000;stroke-width:0.8;\\\" x=\\\"48.982813\\\" xlink:href=\\\"#m8fbb032ec0\\\" y=\\\"211.040002\\\"/>\\n\",\n       \"      </g>\\n\",\n       \"     </g>\\n\",\n       \"     <g id=\\\"text_10\\\">\\n\",\n       \"      <!-- 0 -->\\n\",\n       \"      <g transform=\\\"translate(35.620312 214.83922)scale(0.1 -0.1)\\\">\\n\",\n       \"       <use xlink:href=\\\"#DejaVuSans-48\\\"/>\\n\",\n       \"      </g>\\n\",\n       \"     </g>\\n\",\n       \"    </g>\\n\",\n       \"    <g id=\\\"ytick_9\\\">\\n\",\n       \"     <g id=\\\"line2d_24\\\">\\n\",\n       \"      <g>\\n\",\n       \"       <use style=\\\"stroke:#000000;stroke-width:0.8;\\\" x=\\\"48.982813\\\" xlink:href=\\\"#m8fbb032ec0\\\" y=\\\"185.629725\\\"/>\\n\",\n       \"      </g>\\n\",\n       \"     </g>\\n\",\n       \"     <g id=\\\"text_11\\\">\\n\",\n       \"      <!-- 5 -->\\n\",\n       \"      <g transform=\\\"translate(35.620312 189.428944)scale(0.1 -0.1)\\\">\\n\",\n       \"       <use xlink:href=\\\"#DejaVuSans-53\\\"/>\\n\",\n       \"      </g>\\n\",\n       \"     </g>\\n\",\n       \"    </g>\\n\",\n       \"    <g id=\\\"ytick_10\\\">\\n\",\n       \"     <g id=\\\"line2d_25\\\">\\n\",\n       \"      <g>\\n\",\n       \"       <use style=\\\"stroke:#000000;stroke-width:0.8;\\\" x=\\\"48.982813\\\" xlink:href=\\\"#m8fbb032ec0\\\" y=\\\"160.219449\\\"/>\\n\",\n       \"      </g>\\n\",\n       \"     </g>\\n\",\n       \"     <g id=\\\"text_12\\\">\\n\",\n       \"      <!-- 10 -->\\n\",\n       \"      <g transform=\\\"translate(29.257812 164.018668)scale(0.1 -0.1)\\\">\\n\",\n       \"       <use xlink:href=\\\"#DejaVuSans-49\\\"/>\\n\",\n       \"       <use x=\\\"63.623047\\\" xlink:href=\\\"#DejaVuSans-48\\\"/>\\n\",\n       \"      </g>\\n\",\n       \"     </g>\\n\",\n       \"    </g>\\n\",\n       \"    <g id=\\\"text_13\\\">\\n\",\n       \"     <!-- Pitch rate [deg/s] -->\\n\",\n       \"     <defs>\\n\",\n       \"      <path d=\\\"M 19.671875 64.796875 \\n\",\n       \"L 19.671875 37.40625 \\n\",\n       \"L 32.078125 37.40625 \\n\",\n       \"Q 38.96875 37.40625 42.71875 40.96875 \\n\",\n       \"Q 46.484375 44.53125 46.484375 51.125 \\n\",\n       \"Q 46.484375 57.671875 42.71875 61.234375 \\n\",\n       \"Q 38.96875 64.796875 32.078125 64.796875 \\n\",\n       \"z\\n\",\n       \"M 9.8125 72.90625 \\n\",\n       \"L 32.078125 72.90625 \\n\",\n       \"Q 44.34375 72.90625 50.609375 67.359375 \\n\",\n       \"Q 56.890625 61.8125 56.890625 51.125 \\n\",\n       \"Q 56.890625 40.328125 50.609375 34.8125 \\n\",\n       \"Q 44.34375 29.296875 32.078125 29.296875 \\n\",\n       \"L 19.671875 29.296875 \\n\",\n       \"L 19.671875 0 \\n\",\n       \"L 9.8125 0 \\n\",\n       \"z\\n\",\n       \"\\\" id=\\\"DejaVuSans-80\\\"/>\\n\",\n       \"      <path d=\\\"M 9.421875 54.6875 \\n\",\n       \"L 18.40625 54.6875 \\n\",\n       \"L 18.40625 0 \\n\",\n       \"L 9.421875 0 \\n\",\n       \"z\\n\",\n       \"M 9.421875 75.984375 \\n\",\n       \"L 18.40625 75.984375 \\n\",\n       \"L 18.40625 64.59375 \\n\",\n       \"L 9.421875 64.59375 \\n\",\n       \"z\\n\",\n       \"\\\" id=\\\"DejaVuSans-105\\\"/>\\n\",\n       \"      <path d=\\\"M 48.78125 52.59375 \\n\",\n       \"L 48.78125 44.1875 \\n\",\n       \"Q 44.96875 46.296875 41.140625 47.34375 \\n\",\n       \"Q 37.3125 48.390625 33.40625 48.390625 \\n\",\n       \"Q 24.65625 48.390625 19.8125 42.84375 \\n\",\n       \"Q 14.984375 37.3125 14.984375 27.296875 \\n\",\n       \"Q 14.984375 17.28125 19.8125 11.734375 \\n\",\n       \"Q 24.65625 6.203125 33.40625 6.203125 \\n\",\n       \"Q 37.3125 6.203125 41.140625 7.25 \\n\",\n       \"Q 44.96875 8.296875 48.78125 10.40625 \\n\",\n       \"L 48.78125 2.09375 \\n\",\n       \"Q 45.015625 0.34375 40.984375 -0.53125 \\n\",\n       \"Q 36.96875 -1.421875 32.421875 -1.421875 \\n\",\n       \"Q 20.0625 -1.421875 12.78125 6.34375 \\n\",\n       \"Q 5.515625 14.109375 5.515625 27.296875 \\n\",\n       \"Q 5.515625 40.671875 12.859375 48.328125 \\n\",\n       \"Q 20.21875 56 33.015625 56 \\n\",\n       \"Q 37.15625 56 41.109375 55.140625 \\n\",\n       \"Q 45.0625 54.296875 48.78125 52.59375 \\n\",\n       \"z\\n\",\n       \"\\\" id=\\\"DejaVuSans-99\\\"/>\\n\",\n       \"      <path d=\\\"M 54.890625 33.015625 \\n\",\n       \"L 54.890625 0 \\n\",\n       \"L 45.90625 0 \\n\",\n       \"L 45.90625 32.71875 \\n\",\n       \"Q 45.90625 40.484375 42.875 44.328125 \\n\",\n       \"Q 39.84375 48.1875 33.796875 48.1875 \\n\",\n       \"Q 26.515625 48.1875 22.3125 43.546875 \\n\",\n       \"Q 18.109375 38.921875 18.109375 30.90625 \\n\",\n       \"L 18.109375 0 \\n\",\n       \"L 9.078125 0 \\n\",\n       \"L 9.078125 75.984375 \\n\",\n       \"L 18.109375 75.984375 \\n\",\n       \"L 18.109375 46.1875 \\n\",\n       \"Q 21.34375 51.125 25.703125 53.5625 \\n\",\n       \"Q 30.078125 56 35.796875 56 \\n\",\n       \"Q 45.21875 56 50.046875 50.171875 \\n\",\n       \"Q 54.890625 44.34375 54.890625 33.015625 \\n\",\n       \"z\\n\",\n       \"\\\" id=\\\"DejaVuSans-104\\\"/>\\n\",\n       \"     </defs>\\n\",\n       \"     <g transform=\\\"translate(14.798437 256.710469)rotate(-90)scale(0.1 -0.1)\\\">\\n\",\n       \"      <use xlink:href=\\\"#DejaVuSans-80\\\"/>\\n\",\n       \"      <use x=\\\"60.271484\\\" xlink:href=\\\"#DejaVuSans-105\\\"/>\\n\",\n       \"      <use x=\\\"88.054688\\\" xlink:href=\\\"#DejaVuSans-116\\\"/>\\n\",\n       \"      <use x=\\\"127.263672\\\" xlink:href=\\\"#DejaVuSans-99\\\"/>\\n\",\n       \"      <use x=\\\"182.244141\\\" xlink:href=\\\"#DejaVuSans-104\\\"/>\\n\",\n       \"      <use x=\\\"245.623047\\\" xlink:href=\\\"#DejaVuSans-32\\\"/>\\n\",\n       \"      <use x=\\\"277.410156\\\" xlink:href=\\\"#DejaVuSans-114\\\"/>\\n\",\n       \"      <use x=\\\"318.523438\\\" xlink:href=\\\"#DejaVuSans-97\\\"/>\\n\",\n       \"      <use x=\\\"379.802734\\\" xlink:href=\\\"#DejaVuSans-116\\\"/>\\n\",\n       \"      <use x=\\\"419.011719\\\" xlink:href=\\\"#DejaVuSans-101\\\"/>\\n\",\n       \"      <use x=\\\"480.535156\\\" xlink:href=\\\"#DejaVuSans-32\\\"/>\\n\",\n       \"      <use x=\\\"512.322266\\\" xlink:href=\\\"#DejaVuSans-91\\\"/>\\n\",\n       \"      <use x=\\\"551.335938\\\" xlink:href=\\\"#DejaVuSans-100\\\"/>\\n\",\n       \"      <use x=\\\"614.8125\\\" xlink:href=\\\"#DejaVuSans-101\\\"/>\\n\",\n       \"      <use x=\\\"676.335938\\\" xlink:href=\\\"#DejaVuSans-103\\\"/>\\n\",\n       \"      <use x=\\\"739.8125\\\" xlink:href=\\\"#DejaVuSans-47\\\"/>\\n\",\n       \"      <use x=\\\"773.503906\\\" xlink:href=\\\"#DejaVuSans-115\\\"/>\\n\",\n       \"      <use x=\\\"825.603516\\\" xlink:href=\\\"#DejaVuSans-93\\\"/>\\n\",\n       \"     </g>\\n\",\n       \"    </g>\\n\",\n       \"   </g>\\n\",\n       \"   <g id=\\\"line2d_26\\\">\\n\",\n       \"    <path clip-path=\\\"url(#pe5253510b2)\\\" d=\\\"M 66.737358 211.040002 \\n\",\n       \"L 73.543267 210.955656 \\n\",\n       \"L 74.135085 210.562103 \\n\",\n       \"L 74.430994 210.152307 \\n\",\n       \"L 75.022813 208.65452 \\n\",\n       \"L 75.614631 206.008675 \\n\",\n       \"L 76.206449 202.150654 \\n\",\n       \"L 77.094176 194.384162 \\n\",\n       \"L 79.757358 168.537712 \\n\",\n       \"L 80.349176 165.377743 \\n\",\n       \"L 80.645085 164.480922 \\n\",\n       \"L 80.940994 164.061818 \\n\",\n       \"L 81.236903 164.118571 \\n\",\n       \"L 81.532813 164.640245 \\n\",\n       \"L 81.828722 165.60198 \\n\",\n       \"L 82.42054 168.695552 \\n\",\n       \"L 83.308267 175.515751 \\n\",\n       \"L 85.379631 194.871793 \\n\",\n       \"L 86.267358 205.306352 \\n\",\n       \"L 87.450994 222.839749 \\n\",\n       \"L 88.93054 245.257053 \\n\",\n       \"L 89.818267 255.378121 \\n\",\n       \"L 90.410085 259.802734 \\n\",\n       \"L 91.001903 262.291124 \\n\",\n       \"L 91.297813 262.824384 \\n\",\n       \"L 91.593722 262.898182 \\n\",\n       \"L 91.889631 262.525964 \\n\",\n       \"L 92.18554 261.724855 \\n\",\n       \"L 92.777358 258.919056 \\n\",\n       \"L 93.369176 254.682522 \\n\",\n       \"L 94.256903 246.243171 \\n\",\n       \"L 96.624176 221.517652 \\n\",\n       \"L 97.215994 217.811662 \\n\",\n       \"L 97.807813 215.27137 \\n\",\n       \"L 98.69554 212.590197 \\n\",\n       \"L 99.287358 211.457606 \\n\",\n       \"L 99.583267 211.122313 \\n\",\n       \"L 99.879176 210.962041 \\n\",\n       \"L 100.175085 210.995396 \\n\",\n       \"L 100.470994 211.224384 \\n\",\n       \"L 101.062813 212.124877 \\n\",\n       \"L 102.246449 214.211896 \\n\",\n       \"L 102.838267 214.69453 \\n\",\n       \"L 103.134176 214.716547 \\n\",\n       \"L 103.430085 214.596057 \\n\",\n       \"L 104.021903 213.994082 \\n\",\n       \"L 106.093267 211.124714 \\n\",\n       \"L 106.685085 210.86608 \\n\",\n       \"L 107.276903 210.96804 \\n\",\n       \"L 107.868722 211.330647 \\n\",\n       \"L 109.348267 212.43756 \\n\",\n       \"L 109.940085 212.637915 \\n\",\n       \"L 110.531903 212.632122 \\n\",\n       \"L 111.419631 212.310155 \\n\",\n       \"L 113.195085 211.525019 \\n\",\n       \"L 114.082813 211.461475 \\n\",\n       \"L 115.266449 211.703546 \\n\",\n       \"L 116.745994 211.99821 \\n\",\n       \"L 117.929631 211.943053 \\n\",\n       \"L 121.184631 211.445149 \\n\",\n       \"L 125.623267 211.45593 \\n\",\n       \"L 128.286449 211.259782 \\n\",\n       \"L 134.50054 211.065894 \\n\",\n       \"L 144.561449 210.75266 \\n\",\n       \"L 171.785085 210.14379 \\n\",\n       \"L 190.427358 210.011149 \\n\",\n       \"L 209.661449 210.100416 \\n\",\n       \"L 233.038267 210.442199 \\n\",\n       \"L 298.730085 211.538403 \\n\",\n       \"L 322.106903 211.60637 \\n\",\n       \"L 349.034631 211.4505 \\n\",\n       \"L 421.828267 210.79469 \\n\",\n       \"L 421.828267 210.79469 \\n\",\n       \"\\\" style=\\\"fill:none;stroke:#1f77b4;stroke-linecap:square;stroke-width:1.5;\\\"/>\\n\",\n       \"   </g>\\n\",\n       \"   <g id=\\\"patch_8\\\">\\n\",\n       \"    <path d=\\\"M 48.982813 267.84 \\n\",\n       \"L 48.982813 159.12 \\n\",\n       \"\\\" style=\\\"fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;stroke-width:0.8;\\\"/>\\n\",\n       \"   </g>\\n\",\n       \"   <g id=\\\"patch_9\\\">\\n\",\n       \"    <path d=\\\"M 439.582813 267.84 \\n\",\n       \"L 439.582813 159.12 \\n\",\n       \"\\\" style=\\\"fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;stroke-width:0.8;\\\"/>\\n\",\n       \"   </g>\\n\",\n       \"   <g id=\\\"patch_10\\\">\\n\",\n       \"    <path d=\\\"M 48.982813 267.84 \\n\",\n       \"L 439.582812 267.84 \\n\",\n       \"\\\" style=\\\"fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;stroke-width:0.8;\\\"/>\\n\",\n       \"   </g>\\n\",\n       \"   <g id=\\\"patch_11\\\">\\n\",\n       \"    <path d=\\\"M 48.982813 159.12 \\n\",\n       \"L 439.582812 159.12 \\n\",\n       \"\\\" style=\\\"fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;stroke-width:0.8;\\\"/>\\n\",\n       \"   </g>\\n\",\n       \"  </g>\\n\",\n       \"  <g id=\\\"axes_3\\\">\\n\",\n       \"   <g id=\\\"patch_12\\\">\\n\",\n       \"    <path d=\\\"M 48.982813 376.56 \\n\",\n       \"L 439.582813 376.56 \\n\",\n       \"L 439.582813 267.84 \\n\",\n       \"L 48.982813 267.84 \\n\",\n       \"z\\n\",\n       \"\\\" style=\\\"fill:#ffffff;\\\"/>\\n\",\n       \"   </g>\\n\",\n       \"   <g id=\\\"matplotlib.axis_5\\\">\\n\",\n       \"    <g id=\\\"xtick_15\\\">\\n\",\n       \"     <g id=\\\"line2d_27\\\">\\n\",\n       \"      <g>\\n\",\n       \"       <use style=\\\"stroke:#000000;stroke-width:0.8;\\\" x=\\\"66.737358\\\" xlink:href=\\\"#m3044d31f40\\\" y=\\\"376.56\\\"/>\\n\",\n       \"      </g>\\n\",\n       \"     </g>\\n\",\n       \"     <g id=\\\"text_14\\\">\\n\",\n       \"      <!-- 0 -->\\n\",\n       \"      <g transform=\\\"translate(63.556108 391.158437)scale(0.1 -0.1)\\\">\\n\",\n       \"       <use xlink:href=\\\"#DejaVuSans-48\\\"/>\\n\",\n       \"      </g>\\n\",\n       \"     </g>\\n\",\n       \"    </g>\\n\",\n       \"    <g id=\\\"xtick_16\\\">\\n\",\n       \"     <g id=\\\"line2d_28\\\">\\n\",\n       \"      <g>\\n\",\n       \"       <use style=\\\"stroke:#000000;stroke-width:0.8;\\\" x=\\\"125.869899\\\" xlink:href=\\\"#m3044d31f40\\\" y=\\\"376.56\\\"/>\\n\",\n       \"      </g>\\n\",\n       \"     </g>\\n\",\n       \"     <g id=\\\"text_15\\\">\\n\",\n       \"      <!-- 5 -->\\n\",\n       \"      <g transform=\\\"translate(122.688649 391.158437)scale(0.1 -0.1)\\\">\\n\",\n       \"       <use xlink:href=\\\"#DejaVuSans-53\\\"/>\\n\",\n       \"      </g>\\n\",\n       \"     </g>\\n\",\n       \"    </g>\\n\",\n       \"    <g id=\\\"xtick_17\\\">\\n\",\n       \"     <g id=\\\"line2d_29\\\">\\n\",\n       \"      <g>\\n\",\n       \"       <use style=\\\"stroke:#000000;stroke-width:0.8;\\\" x=\\\"185.00244\\\" xlink:href=\\\"#m3044d31f40\\\" y=\\\"376.56\\\"/>\\n\",\n       \"      </g>\\n\",\n       \"     </g>\\n\",\n       \"     <g id=\\\"text_16\\\">\\n\",\n       \"      <!-- 10 -->\\n\",\n       \"      <g transform=\\\"translate(178.63994 391.158437)scale(0.1 -0.1)\\\">\\n\",\n       \"       <use xlink:href=\\\"#DejaVuSans-49\\\"/>\\n\",\n       \"       <use x=\\\"63.623047\\\" xlink:href=\\\"#DejaVuSans-48\\\"/>\\n\",\n       \"      </g>\\n\",\n       \"     </g>\\n\",\n       \"    </g>\\n\",\n       \"    <g id=\\\"xtick_18\\\">\\n\",\n       \"     <g id=\\\"line2d_30\\\">\\n\",\n       \"      <g>\\n\",\n       \"       <use style=\\\"stroke:#000000;stroke-width:0.8;\\\" x=\\\"244.134981\\\" xlink:href=\\\"#m3044d31f40\\\" y=\\\"376.56\\\"/>\\n\",\n       \"      </g>\\n\",\n       \"     </g>\\n\",\n       \"     <g id=\\\"text_17\\\">\\n\",\n       \"      <!-- 15 -->\\n\",\n       \"      <g transform=\\\"translate(237.772481 391.158437)scale(0.1 -0.1)\\\">\\n\",\n       \"       <use xlink:href=\\\"#DejaVuSans-49\\\"/>\\n\",\n       \"       <use x=\\\"63.623047\\\" xlink:href=\\\"#DejaVuSans-53\\\"/>\\n\",\n       \"      </g>\\n\",\n       \"     </g>\\n\",\n       \"    </g>\\n\",\n       \"    <g id=\\\"xtick_19\\\">\\n\",\n       \"     <g id=\\\"line2d_31\\\">\\n\",\n       \"      <g>\\n\",\n       \"       <use style=\\\"stroke:#000000;stroke-width:0.8;\\\" x=\\\"303.267522\\\" xlink:href=\\\"#m3044d31f40\\\" y=\\\"376.56\\\"/>\\n\",\n       \"      </g>\\n\",\n       \"     </g>\\n\",\n       \"     <g id=\\\"text_18\\\">\\n\",\n       \"      <!-- 20 -->\\n\",\n       \"      <g transform=\\\"translate(296.905022 391.158437)scale(0.1 -0.1)\\\">\\n\",\n       \"       <use xlink:href=\\\"#DejaVuSans-50\\\"/>\\n\",\n       \"       <use x=\\\"63.623047\\\" xlink:href=\\\"#DejaVuSans-48\\\"/>\\n\",\n       \"      </g>\\n\",\n       \"     </g>\\n\",\n       \"    </g>\\n\",\n       \"    <g id=\\\"xtick_20\\\">\\n\",\n       \"     <g id=\\\"line2d_32\\\">\\n\",\n       \"      <g>\\n\",\n       \"       <use style=\\\"stroke:#000000;stroke-width:0.8;\\\" x=\\\"362.400063\\\" xlink:href=\\\"#m3044d31f40\\\" y=\\\"376.56\\\"/>\\n\",\n       \"      </g>\\n\",\n       \"     </g>\\n\",\n       \"     <g id=\\\"text_19\\\">\\n\",\n       \"      <!-- 25 -->\\n\",\n       \"      <g transform=\\\"translate(356.037563 391.158437)scale(0.1 -0.1)\\\">\\n\",\n       \"       <use xlink:href=\\\"#DejaVuSans-50\\\"/>\\n\",\n       \"       <use x=\\\"63.623047\\\" xlink:href=\\\"#DejaVuSans-53\\\"/>\\n\",\n       \"      </g>\\n\",\n       \"     </g>\\n\",\n       \"    </g>\\n\",\n       \"    <g id=\\\"xtick_21\\\">\\n\",\n       \"     <g id=\\\"line2d_33\\\">\\n\",\n       \"      <g>\\n\",\n       \"       <use style=\\\"stroke:#000000;stroke-width:0.8;\\\" x=\\\"421.532604\\\" xlink:href=\\\"#m3044d31f40\\\" y=\\\"376.56\\\"/>\\n\",\n       \"      </g>\\n\",\n       \"     </g>\\n\",\n       \"     <g id=\\\"text_20\\\">\\n\",\n       \"      <!-- 30 -->\\n\",\n       \"      <defs>\\n\",\n       \"       <path d=\\\"M 40.578125 39.3125 \\n\",\n       \"Q 47.65625 37.796875 51.625 33 \\n\",\n       \"Q 55.609375 28.21875 55.609375 21.1875 \\n\",\n       \"Q 55.609375 10.40625 48.1875 4.484375 \\n\",\n       \"Q 40.765625 -1.421875 27.09375 -1.421875 \\n\",\n       \"Q 22.515625 -1.421875 17.65625 -0.515625 \\n\",\n       \"Q 12.796875 0.390625 7.625 2.203125 \\n\",\n       \"L 7.625 11.71875 \\n\",\n       \"Q 11.71875 9.328125 16.59375 8.109375 \\n\",\n       \"Q 21.484375 6.890625 26.8125 6.890625 \\n\",\n       \"Q 36.078125 6.890625 40.9375 10.546875 \\n\",\n       \"Q 45.796875 14.203125 45.796875 21.1875 \\n\",\n       \"Q 45.796875 27.640625 41.28125 31.265625 \\n\",\n       \"Q 36.765625 34.90625 28.71875 34.90625 \\n\",\n       \"L 20.21875 34.90625 \\n\",\n       \"L 20.21875 43.015625 \\n\",\n       \"L 29.109375 43.015625 \\n\",\n       \"Q 36.375 43.015625 40.234375 45.921875 \\n\",\n       \"Q 44.09375 48.828125 44.09375 54.296875 \\n\",\n       \"Q 44.09375 59.90625 40.109375 62.90625 \\n\",\n       \"Q 36.140625 65.921875 28.71875 65.921875 \\n\",\n       \"Q 24.65625 65.921875 20.015625 65.03125 \\n\",\n       \"Q 15.375 64.15625 9.8125 62.3125 \\n\",\n       \"L 9.8125 71.09375 \\n\",\n       \"Q 15.4375 72.65625 20.34375 73.4375 \\n\",\n       \"Q 25.25 74.21875 29.59375 74.21875 \\n\",\n       \"Q 40.828125 74.21875 47.359375 69.109375 \\n\",\n       \"Q 53.90625 64.015625 53.90625 55.328125 \\n\",\n       \"Q 53.90625 49.265625 50.4375 45.09375 \\n\",\n       \"Q 46.96875 40.921875 40.578125 39.3125 \\n\",\n       \"z\\n\",\n       \"\\\" id=\\\"DejaVuSans-51\\\"/>\\n\",\n       \"      </defs>\\n\",\n       \"      <g transform=\\\"translate(415.170104 391.158437)scale(0.1 -0.1)\\\">\\n\",\n       \"       <use xlink:href=\\\"#DejaVuSans-51\\\"/>\\n\",\n       \"       <use x=\\\"63.623047\\\" xlink:href=\\\"#DejaVuSans-48\\\"/>\\n\",\n       \"      </g>\\n\",\n       \"     </g>\\n\",\n       \"    </g>\\n\",\n       \"    <g id=\\\"text_21\\\">\\n\",\n       \"     <!-- time [s] -->\\n\",\n       \"     <defs>\\n\",\n       \"      <path d=\\\"M 52 44.1875 \\n\",\n       \"Q 55.375 50.25 60.0625 53.125 \\n\",\n       \"Q 64.75 56 71.09375 56 \\n\",\n       \"Q 79.640625 56 84.28125 50.015625 \\n\",\n       \"Q 88.921875 44.046875 88.921875 33.015625 \\n\",\n       \"L 88.921875 0 \\n\",\n       \"L 79.890625 0 \\n\",\n       \"L 79.890625 32.71875 \\n\",\n       \"Q 79.890625 40.578125 77.09375 44.375 \\n\",\n       \"Q 74.3125 48.1875 68.609375 48.1875 \\n\",\n       \"Q 61.625 48.1875 57.5625 43.546875 \\n\",\n       \"Q 53.515625 38.921875 53.515625 30.90625 \\n\",\n       \"L 53.515625 0 \\n\",\n       \"L 44.484375 0 \\n\",\n       \"L 44.484375 32.71875 \\n\",\n       \"Q 44.484375 40.625 41.703125 44.40625 \\n\",\n       \"Q 38.921875 48.1875 33.109375 48.1875 \\n\",\n       \"Q 26.21875 48.1875 22.15625 43.53125 \\n\",\n       \"Q 18.109375 38.875 18.109375 30.90625 \\n\",\n       \"L 18.109375 0 \\n\",\n       \"L 9.078125 0 \\n\",\n       \"L 9.078125 54.6875 \\n\",\n       \"L 18.109375 54.6875 \\n\",\n       \"L 18.109375 46.1875 \\n\",\n       \"Q 21.1875 51.21875 25.484375 53.609375 \\n\",\n       \"Q 29.78125 56 35.6875 56 \\n\",\n       \"Q 41.65625 56 45.828125 52.96875 \\n\",\n       \"Q 50 49.953125 52 44.1875 \\n\",\n       \"z\\n\",\n       \"\\\" id=\\\"DejaVuSans-109\\\"/>\\n\",\n       \"     </defs>\\n\",\n       \"     <g transform=\\\"translate(224.891406 404.836562)scale(0.1 -0.1)\\\">\\n\",\n       \"      <use xlink:href=\\\"#DejaVuSans-116\\\"/>\\n\",\n       \"      <use x=\\\"39.208984\\\" xlink:href=\\\"#DejaVuSans-105\\\"/>\\n\",\n       \"      <use x=\\\"66.992188\\\" xlink:href=\\\"#DejaVuSans-109\\\"/>\\n\",\n       \"      <use x=\\\"164.404297\\\" xlink:href=\\\"#DejaVuSans-101\\\"/>\\n\",\n       \"      <use x=\\\"225.927734\\\" xlink:href=\\\"#DejaVuSans-32\\\"/>\\n\",\n       \"      <use x=\\\"257.714844\\\" xlink:href=\\\"#DejaVuSans-91\\\"/>\\n\",\n       \"      <use x=\\\"296.728516\\\" xlink:href=\\\"#DejaVuSans-115\\\"/>\\n\",\n       \"      <use x=\\\"348.828125\\\" xlink:href=\\\"#DejaVuSans-93\\\"/>\\n\",\n       \"     </g>\\n\",\n       \"    </g>\\n\",\n       \"   </g>\\n\",\n       \"   <g id=\\\"matplotlib.axis_6\\\">\\n\",\n       \"    <g id=\\\"ytick_11\\\">\\n\",\n       \"     <g id=\\\"line2d_34\\\">\\n\",\n       \"      <g>\\n\",\n       \"       <use style=\\\"stroke:#000000;stroke-width:0.8;\\\" x=\\\"48.982813\\\" xlink:href=\\\"#m8fbb032ec0\\\" y=\\\"368.454405\\\"/>\\n\",\n       \"      </g>\\n\",\n       \"     </g>\\n\",\n       \"     <g id=\\\"text_22\\\">\\n\",\n       \"      <!-- −1 -->\\n\",\n       \"      <g transform=\\\"translate(27.240625 372.253624)scale(0.1 -0.1)\\\">\\n\",\n       \"       <use xlink:href=\\\"#DejaVuSans-8722\\\"/>\\n\",\n       \"       <use x=\\\"83.789062\\\" xlink:href=\\\"#DejaVuSans-49\\\"/>\\n\",\n       \"      </g>\\n\",\n       \"     </g>\\n\",\n       \"    </g>\\n\",\n       \"    <g id=\\\"ytick_12\\\">\\n\",\n       \"     <g id=\\\"line2d_35\\\">\\n\",\n       \"      <g>\\n\",\n       \"       <use style=\\\"stroke:#000000;stroke-width:0.8;\\\" x=\\\"48.982813\\\" xlink:href=\\\"#m8fbb032ec0\\\" y=\\\"329.472756\\\"/>\\n\",\n       \"      </g>\\n\",\n       \"     </g>\\n\",\n       \"     <g id=\\\"text_23\\\">\\n\",\n       \"      <!-- 0 -->\\n\",\n       \"      <g transform=\\\"translate(35.620312 333.271975)scale(0.1 -0.1)\\\">\\n\",\n       \"       <use xlink:href=\\\"#DejaVuSans-48\\\"/>\\n\",\n       \"      </g>\\n\",\n       \"     </g>\\n\",\n       \"    </g>\\n\",\n       \"    <g id=\\\"ytick_13\\\">\\n\",\n       \"     <g id=\\\"line2d_36\\\">\\n\",\n       \"      <g>\\n\",\n       \"       <use style=\\\"stroke:#000000;stroke-width:0.8;\\\" x=\\\"48.982813\\\" xlink:href=\\\"#m8fbb032ec0\\\" y=\\\"290.491107\\\"/>\\n\",\n       \"      </g>\\n\",\n       \"     </g>\\n\",\n       \"     <g id=\\\"text_24\\\">\\n\",\n       \"      <!-- 1 -->\\n\",\n       \"      <g transform=\\\"translate(35.620312 294.290326)scale(0.1 -0.1)\\\">\\n\",\n       \"       <use xlink:href=\\\"#DejaVuSans-49\\\"/>\\n\",\n       \"      </g>\\n\",\n       \"     </g>\\n\",\n       \"    </g>\\n\",\n       \"    <g id=\\\"text_25\\\">\\n\",\n       \"     <!-- Yaw rate [deg/s] -->\\n\",\n       \"     <defs>\\n\",\n       \"      <path d=\\\"M -0.203125 72.90625 \\n\",\n       \"L 10.40625 72.90625 \\n\",\n       \"L 30.609375 42.921875 \\n\",\n       \"L 50.6875 72.90625 \\n\",\n       \"L 61.28125 72.90625 \\n\",\n       \"L 35.5 34.71875 \\n\",\n       \"L 35.5 0 \\n\",\n       \"L 25.59375 0 \\n\",\n       \"L 25.59375 34.71875 \\n\",\n       \"z\\n\",\n       \"\\\" id=\\\"DejaVuSans-89\\\"/>\\n\",\n       \"      <path d=\\\"M 4.203125 54.6875 \\n\",\n       \"L 13.1875 54.6875 \\n\",\n       \"L 24.421875 12.015625 \\n\",\n       \"L 35.59375 54.6875 \\n\",\n       \"L 46.1875 54.6875 \\n\",\n       \"L 57.421875 12.015625 \\n\",\n       \"L 68.609375 54.6875 \\n\",\n       \"L 77.59375 54.6875 \\n\",\n       \"L 63.28125 0 \\n\",\n       \"L 52.6875 0 \\n\",\n       \"L 40.921875 44.828125 \\n\",\n       \"L 29.109375 0 \\n\",\n       \"L 18.5 0 \\n\",\n       \"z\\n\",\n       \"\\\" id=\\\"DejaVuSans-119\\\"/>\\n\",\n       \"     </defs>\\n\",\n       \"     <g transform=\\\"translate(21.160937 363.346875)rotate(-90)scale(0.1 -0.1)\\\">\\n\",\n       \"      <use xlink:href=\\\"#DejaVuSans-89\\\"/>\\n\",\n       \"      <use x=\\\"60.880859\\\" xlink:href=\\\"#DejaVuSans-97\\\"/>\\n\",\n       \"      <use x=\\\"122.160156\\\" xlink:href=\\\"#DejaVuSans-119\\\"/>\\n\",\n       \"      <use x=\\\"203.947266\\\" xlink:href=\\\"#DejaVuSans-32\\\"/>\\n\",\n       \"      <use x=\\\"235.734375\\\" xlink:href=\\\"#DejaVuSans-114\\\"/>\\n\",\n       \"      <use x=\\\"276.847656\\\" xlink:href=\\\"#DejaVuSans-97\\\"/>\\n\",\n       \"      <use x=\\\"338.126953\\\" xlink:href=\\\"#DejaVuSans-116\\\"/>\\n\",\n       \"      <use x=\\\"377.335938\\\" xlink:href=\\\"#DejaVuSans-101\\\"/>\\n\",\n       \"      <use x=\\\"438.859375\\\" xlink:href=\\\"#DejaVuSans-32\\\"/>\\n\",\n       \"      <use x=\\\"470.646484\\\" xlink:href=\\\"#DejaVuSans-91\\\"/>\\n\",\n       \"      <use x=\\\"509.660156\\\" xlink:href=\\\"#DejaVuSans-100\\\"/>\\n\",\n       \"      <use x=\\\"573.136719\\\" xlink:href=\\\"#DejaVuSans-101\\\"/>\\n\",\n       \"      <use x=\\\"634.660156\\\" xlink:href=\\\"#DejaVuSans-103\\\"/>\\n\",\n       \"      <use x=\\\"698.136719\\\" xlink:href=\\\"#DejaVuSans-47\\\"/>\\n\",\n       \"      <use x=\\\"731.828125\\\" xlink:href=\\\"#DejaVuSans-115\\\"/>\\n\",\n       \"      <use x=\\\"783.927734\\\" xlink:href=\\\"#DejaVuSans-93\\\"/>\\n\",\n       \"     </g>\\n\",\n       \"    </g>\\n\",\n       \"    <g id=\\\"text_26\\\">\\n\",\n       \"     <!-- 1e−7 -->\\n\",\n       \"     <g transform=\\\"translate(48.982813 264.84)scale(0.1 -0.1)\\\">\\n\",\n       \"      <use xlink:href=\\\"#DejaVuSans-49\\\"/>\\n\",\n       \"      <use x=\\\"63.623047\\\" xlink:href=\\\"#DejaVuSans-101\\\"/>\\n\",\n       \"      <use x=\\\"125.146484\\\" xlink:href=\\\"#DejaVuSans-8722\\\"/>\\n\",\n       \"      <use x=\\\"208.935547\\\" xlink:href=\\\"#DejaVuSans-55\\\"/>\\n\",\n       \"     </g>\\n\",\n       \"    </g>\\n\",\n       \"   </g>\\n\",\n       \"   <g id=\\\"line2d_37\\\">\\n\",\n       \"    <path clip-path=\\\"url(#paf502f4d96)\\\" d=\\\"M 66.737358 329.472756 \\n\",\n       \"L 67.625085 329.418354 \\n\",\n       \"L 67.920994 329.191727 \\n\",\n       \"L 68.216903 329.417414 \\n\",\n       \"L 68.512813 329.158565 \\n\",\n       \"L 68.808722 329.058093 \\n\",\n       \"L 69.104631 328.691818 \\n\",\n       \"L 69.40054 329.265863 \\n\",\n       \"L 69.696449 328.537894 \\n\",\n       \"L 70.288267 330.091044 \\n\",\n       \"L 70.584176 329.924633 \\n\",\n       \"L 71.175994 330.301478 \\n\",\n       \"L 71.767813 329.926647 \\n\",\n       \"L 72.359631 328.146131 \\n\",\n       \"L 72.65554 330.163734 \\n\",\n       \"L 73.247358 329.078381 \\n\",\n       \"L 73.543267 329.799839 \\n\",\n       \"L 74.135085 332.596209 \\n\",\n       \"L 74.430994 332.943045 \\n\",\n       \"L 74.726903 332.984904 \\n\",\n       \"L 75.318722 332.740026 \\n\",\n       \"L 76.206449 330.280064 \\n\",\n       \"L 76.502358 330.874818 \\n\",\n       \"L 76.798267 331.865305 \\n\",\n       \"L 77.390085 335.555761 \\n\",\n       \"L 77.981903 339.398222 \\n\",\n       \"L 78.277813 340.446325 \\n\",\n       \"L 78.573722 340.805305 \\n\",\n       \"L 78.869631 340.200661 \\n\",\n       \"L 79.461449 337.864644 \\n\",\n       \"L 80.940994 331.520777 \\n\",\n       \"L 81.236903 329.205259 \\n\",\n       \"L 81.532813 329.204628 \\n\",\n       \"L 81.828722 328.284105 \\n\",\n       \"L 83.900085 312.261957 \\n\",\n       \"L 84.195994 312.506924 \\n\",\n       \"L 85.083722 315.199234 \\n\",\n       \"L 85.379631 316.813518 \\n\",\n       \"L 85.67554 308.023511 \\n\",\n       \"L 85.971449 315.344401 \\n\",\n       \"L 86.267358 317.754249 \\n\",\n       \"L 86.563267 303.19024 \\n\",\n       \"L 87.155085 326.999993 \\n\",\n       \"L 87.746903 302.864085 \\n\",\n       \"L 88.042812 312.646936 \\n\",\n       \"L 88.634631 289.360888 \\n\",\n       \"L 88.93054 282.550126 \\n\",\n       \"L 89.226449 272.781818 \\n\",\n       \"L 89.522358 296.723852 \\n\",\n       \"L 89.818267 309.162644 \\n\",\n       \"L 90.114176 297.049784 \\n\",\n       \"L 90.410085 323.749569 \\n\",\n       \"L 90.705994 365.734686 \\n\",\n       \"L 91.297813 356.024995 \\n\",\n       \"L 91.593722 361.081353 \\n\",\n       \"L 91.889631 362.471502 \\n\",\n       \"L 92.18554 358.836389 \\n\",\n       \"L 92.777358 332.276641 \\n\",\n       \"L 93.073267 339.9615 \\n\",\n       \"L 93.369176 357.225742 \\n\",\n       \"L 93.665085 354.538707 \\n\",\n       \"L 93.960994 353.090697 \\n\",\n       \"L 94.256903 365.628403 \\n\",\n       \"L 94.552813 371.618182 \\n\",\n       \"L 94.848722 367.277908 \\n\",\n       \"L 95.144631 365.206199 \\n\",\n       \"L 95.44054 364.028904 \\n\",\n       \"L 95.736449 363.67593 \\n\",\n       \"L 96.032358 362.616736 \\n\",\n       \"L 96.328267 357.855632 \\n\",\n       \"L 96.624176 350.065336 \\n\",\n       \"L 97.215994 345.337884 \\n\",\n       \"L 97.511903 336.306717 \\n\",\n       \"L 97.807813 331.755112 \\n\",\n       \"L 98.103722 330.78336 \\n\",\n       \"L 98.69554 323.938074 \\n\",\n       \"L 98.991449 326.949954 \\n\",\n       \"L 99.287358 326.928224 \\n\",\n       \"L 99.583267 319.153823 \\n\",\n       \"L 100.175085 334.126767 \\n\",\n       \"L 100.470994 332.820662 \\n\",\n       \"L 100.766903 342.08421 \\n\",\n       \"L 101.358722 322.646248 \\n\",\n       \"L 101.654631 320.003705 \\n\",\n       \"L 101.95054 311.908732 \\n\",\n       \"L 102.246449 296.8765 \\n\",\n       \"L 102.542358 292.175373 \\n\",\n       \"L 102.838267 298.541516 \\n\",\n       \"L 103.430085 315.97079 \\n\",\n       \"L 103.725994 320.026296 \\n\",\n       \"L 104.613722 337.133358 \\n\",\n       \"L 104.909631 330.070608 \\n\",\n       \"L 105.20554 331.102307 \\n\",\n       \"L 105.501449 335.227833 \\n\",\n       \"L 105.797358 332.911485 \\n\",\n       \"L 106.093267 326.825781 \\n\",\n       \"L 106.685085 325.594437 \\n\",\n       \"L 106.980994 319.511853 \\n\",\n       \"L 107.276903 322.634822 \\n\",\n       \"L 107.572812 327.126572 \\n\",\n       \"L 107.868722 322.211644 \\n\",\n       \"L 108.164631 326.215499 \\n\",\n       \"L 108.46054 328.247857 \\n\",\n       \"L 108.756449 325.931451 \\n\",\n       \"L 109.052358 324.896263 \\n\",\n       \"L 109.644176 317.915561 \\n\",\n       \"L 109.940085 321.819387 \\n\",\n       \"L 110.235994 321.938495 \\n\",\n       \"L 110.531903 319.023518 \\n\",\n       \"L 110.827813 325.385065 \\n\",\n       \"L 111.123722 327.688497 \\n\",\n       \"L 111.419631 325.746267 \\n\",\n       \"L 111.71554 325.968068 \\n\",\n       \"L 112.011449 329.985483 \\n\",\n       \"L 112.307358 329.683655 \\n\",\n       \"L 112.603267 328.636555 \\n\",\n       \"L 112.899176 330.021906 \\n\",\n       \"L 113.195085 330.318241 \\n\",\n       \"L 113.490994 329.629254 \\n\",\n       \"L 113.786903 328.240914 \\n\",\n       \"L 114.082813 330.065906 \\n\",\n       \"L 114.674631 326.394275 \\n\",\n       \"L 114.97054 325.453952 \\n\",\n       \"L 115.266449 323.359676 \\n\",\n       \"L 115.858267 327.665772 \\n\",\n       \"L 116.154176 324.418349 \\n\",\n       \"L 116.450085 326.690046 \\n\",\n       \"L 116.745994 331.328597 \\n\",\n       \"L 117.041903 328.574385 \\n\",\n       \"L 117.337813 328.142271 \\n\",\n       \"L 117.633722 330.195805 \\n\",\n       \"L 117.929631 327.089657 \\n\",\n       \"L 118.22554 327.304388 \\n\",\n       \"L 118.521449 327.868106 \\n\",\n       \"L 118.817358 326.783516 \\n\",\n       \"L 119.113267 324.496445 \\n\",\n       \"L 119.409176 327.712985 \\n\",\n       \"L 119.705085 326.391209 \\n\",\n       \"L 120.000994 326.887974 \\n\",\n       \"L 120.296903 330.81644 \\n\",\n       \"L 120.592813 331.837651 \\n\",\n       \"L 120.888722 332.005103 \\n\",\n       \"L 121.184631 332.947145 \\n\",\n       \"L 121.48054 332.158176 \\n\",\n       \"L 121.776449 328.285108 \\n\",\n       \"L 122.072358 329.843376 \\n\",\n       \"L 122.664176 323.33025 \\n\",\n       \"L 122.960085 324.990894 \\n\",\n       \"L 123.255994 329.992202 \\n\",\n       \"L 123.551903 327.160244 \\n\",\n       \"L 123.847813 325.799449 \\n\",\n       \"L 124.143722 328.868261 \\n\",\n       \"L 124.439631 328.979361 \\n\",\n       \"L 124.73554 330.626432 \\n\",\n       \"L 125.031449 328.3544 \\n\",\n       \"L 125.327358 330.707133 \\n\",\n       \"L 125.623267 334.872236 \\n\",\n       \"L 126.215085 328.250802 \\n\",\n       \"L 126.510994 331.756398 \\n\",\n       \"L 126.806903 327.782055 \\n\",\n       \"L 127.102812 321.568429 \\n\",\n       \"L 127.694631 326.469714 \\n\",\n       \"L 127.99054 329.038381 \\n\",\n       \"L 128.286449 330.011109 \\n\",\n       \"L 128.582358 333.456286 \\n\",\n       \"L 128.878267 338.558764 \\n\",\n       \"L 129.174176 332.085078 \\n\",\n       \"L 129.470085 329.401207 \\n\",\n       \"L 129.765994 329.09731 \\n\",\n       \"L 130.061903 324.981892 \\n\",\n       \"L 130.357813 322.557353 \\n\",\n       \"L 130.653722 323.707624 \\n\",\n       \"L 131.24554 332.387933 \\n\",\n       \"L 131.837358 329.744159 \\n\",\n       \"L 132.133267 332.692709 \\n\",\n       \"L 132.725085 325.838946 \\n\",\n       \"L 133.020994 324.295443 \\n\",\n       \"L 133.316903 329.92869 \\n\",\n       \"L 133.908722 332.769774 \\n\",\n       \"L 134.204631 333.22651 \\n\",\n       \"L 134.796449 329.449181 \\n\",\n       \"L 135.388267 319.723616 \\n\",\n       \"L 135.980085 328.533043 \\n\",\n       \"L 136.275994 328.734171 \\n\",\n       \"L 136.571903 336.974073 \\n\",\n       \"L 136.867813 337.683186 \\n\",\n       \"L 138.051449 320.478018 \\n\",\n       \"L 138.347358 320.219861 \\n\",\n       \"L 139.235085 335.022177 \\n\",\n       \"L 139.530994 335.109618 \\n\",\n       \"L 139.826903 332.814902 \\n\",\n       \"L 140.122813 334.774889 \\n\",\n       \"L 140.714631 319.251198 \\n\",\n       \"L 141.306449 329.221487 \\n\",\n       \"L 141.602358 327.058442 \\n\",\n       \"L 141.898267 332.355289 \\n\",\n       \"L 142.194176 333.319838 \\n\",\n       \"L 142.490085 331.098745 \\n\",\n       \"L 142.785994 330.143465 \\n\",\n       \"L 143.081903 323.581917 \\n\",\n       \"L 143.377813 323.935607 \\n\",\n       \"L 143.673722 326.246331 \\n\",\n       \"L 143.969631 325.993494 \\n\",\n       \"L 144.561449 336.249231 \\n\",\n       \"L 144.857358 334.162269 \\n\",\n       \"L 145.153267 335.768751 \\n\",\n       \"L 145.449176 332.184111 \\n\",\n       \"L 145.745085 326.644787 \\n\",\n       \"L 146.040994 323.426252 \\n\",\n       \"L 146.336903 323.334332 \\n\",\n       \"L 146.632812 324.908584 \\n\",\n       \"L 146.928722 322.674194 \\n\",\n       \"L 147.224631 328.850418 \\n\",\n       \"L 147.52054 330.989973 \\n\",\n       \"L 147.816449 330.508818 \\n\",\n       \"L 148.112358 334.904085 \\n\",\n       \"L 148.408267 331.74188 \\n\",\n       \"L 148.704176 330.520275 \\n\",\n       \"L 149.000085 331.670533 \\n\",\n       \"L 149.295994 326.913214 \\n\",\n       \"L 149.591903 330.141463 \\n\",\n       \"L 149.887812 330.037816 \\n\",\n       \"L 150.183722 324.836866 \\n\",\n       \"L 150.479631 330.167215 \\n\",\n       \"L 150.77554 328.754549 \\n\",\n       \"L 151.071449 324.565245 \\n\",\n       \"L 151.367358 326.759994 \\n\",\n       \"L 151.663267 326.926606 \\n\",\n       \"L 151.959176 327.361015 \\n\",\n       \"L 152.255085 326.630194 \\n\",\n       \"L 152.846903 333.881405 \\n\",\n       \"L 153.142813 333.706728 \\n\",\n       \"L 154.326449 328.19964 \\n\",\n       \"L 154.622358 324.323628 \\n\",\n       \"L 154.918267 325.958608 \\n\",\n       \"L 155.214176 330.356464 \\n\",\n       \"L 155.510085 325.05919 \\n\",\n       \"L 155.805994 327.938032 \\n\",\n       \"L 156.101903 328.568345 \\n\",\n       \"L 156.397813 326.643652 \\n\",\n       \"L 156.989631 329.869969 \\n\",\n       \"L 157.28554 333.764631 \\n\",\n       \"L 157.581449 333.744823 \\n\",\n       \"L 157.877358 332.040057 \\n\",\n       \"L 158.173267 333.988786 \\n\",\n       \"L 158.469176 331.819917 \\n\",\n       \"L 158.765085 322.24871 \\n\",\n       \"L 159.060994 323.310747 \\n\",\n       \"L 159.356903 325.762796 \\n\",\n       \"L 159.652813 326.492253 \\n\",\n       \"L 159.948722 326.133816 \\n\",\n       \"L 160.244631 328.828873 \\n\",\n       \"L 160.54054 333.970561 \\n\",\n       \"L 161.428267 326.97172 \\n\",\n       \"L 161.724176 331.023921 \\n\",\n       \"L 162.020085 332.080376 \\n\",\n       \"L 162.315994 328.403699 \\n\",\n       \"L 162.611903 330.767692 \\n\",\n       \"L 162.907813 334.673241 \\n\",\n       \"L 163.499631 324.28706 \\n\",\n       \"L 163.79554 324.321941 \\n\",\n       \"L 164.091449 322.518767 \\n\",\n       \"L 164.387358 324.68372 \\n\",\n       \"L 164.683267 324.75056 \\n\",\n       \"L 165.275085 338.631754 \\n\",\n       \"L 165.570994 336.942984 \\n\",\n       \"L 165.866903 331.772738 \\n\",\n       \"L 166.162813 331.331036 \\n\",\n       \"L 166.458722 328.746779 \\n\",\n       \"L 166.754631 321.827809 \\n\",\n       \"L 167.05054 323.05752 \\n\",\n       \"L 167.642358 327.954337 \\n\",\n       \"L 167.938267 332.604964 \\n\",\n       \"L 168.234176 335.261588 \\n\",\n       \"L 168.825994 328.394539 \\n\",\n       \"L 169.121903 324.370339 \\n\",\n       \"L 169.417813 322.8189 \\n\",\n       \"L 169.713722 324.683071 \\n\",\n       \"L 170.009631 324.473841 \\n\",\n       \"L 170.30554 328.795121 \\n\",\n       \"L 170.601449 337.700581 \\n\",\n       \"L 170.897358 337.079968 \\n\",\n       \"L 171.193267 333.85515 \\n\",\n       \"L 171.489176 334.218642 \\n\",\n       \"L 171.785085 326.669616 \\n\",\n       \"L 172.376903 318.998561 \\n\",\n       \"L 172.672813 318.477727 \\n\",\n       \"L 172.968722 327.146356 \\n\",\n       \"L 173.264631 330.893641 \\n\",\n       \"L 173.56054 333.221779 \\n\",\n       \"L 173.856449 340.110343 \\n\",\n       \"L 174.152358 337.721689 \\n\",\n       \"L 174.448267 330.758841 \\n\",\n       \"L 175.335994 319.823407 \\n\",\n       \"L 175.927813 327.120528 \\n\",\n       \"L 176.223722 333.041423 \\n\",\n       \"L 176.519631 335.235583 \\n\",\n       \"L 176.81554 330.591552 \\n\",\n       \"L 177.407358 332.636675 \\n\",\n       \"L 177.703267 324.639816 \\n\",\n       \"L 177.999176 321.739132 \\n\",\n       \"L 178.295085 330.651332 \\n\",\n       \"L 178.590994 332.978545 \\n\",\n       \"L 178.886903 329.022182 \\n\",\n       \"L 179.182813 330.617592 \\n\",\n       \"L 179.774631 324.483947 \\n\",\n       \"L 180.07054 325.567549 \\n\",\n       \"L 180.366449 322.082505 \\n\",\n       \"L 180.958267 338.115008 \\n\",\n       \"L 181.254176 329.51296 \\n\",\n       \"L 181.550085 332.287806 \\n\",\n       \"L 181.845994 336.308278 \\n\",\n       \"L 182.141903 323.975214 \\n\",\n       \"L 182.437813 318.61491 \\n\",\n       \"L 183.029631 327.35683 \\n\",\n       \"L 183.32554 331.881762 \\n\",\n       \"L 183.621449 331.768667 \\n\",\n       \"L 183.917358 334.442627 \\n\",\n       \"L 184.213267 335.659864 \\n\",\n       \"L 184.509176 328.954942 \\n\",\n       \"L 184.805085 319.453193 \\n\",\n       \"L 185.100994 322.208831 \\n\",\n       \"L 185.396903 329.380747 \\n\",\n       \"L 185.692813 327.81692 \\n\",\n       \"L 185.988722 329.694271 \\n\",\n       \"L 186.284631 337.438363 \\n\",\n       \"L 186.58054 334.494038 \\n\",\n       \"L 186.876449 326.141632 \\n\",\n       \"L 187.172358 328.573737 \\n\",\n       \"L 187.468267 324.254568 \\n\",\n       \"L 187.764176 322.796784 \\n\",\n       \"L 188.060085 328.691759 \\n\",\n       \"L 188.355994 330.958583 \\n\",\n       \"L 188.651903 334.844496 \\n\",\n       \"L 188.947812 337.047015 \\n\",\n       \"L 189.243722 327.147776 \\n\",\n       \"L 189.539631 325.03332 \\n\",\n       \"L 189.83554 326.207012 \\n\",\n       \"L 190.131449 319.35867 \\n\",\n       \"L 190.723267 332.179777 \\n\",\n       \"L 191.019176 333.343536 \\n\",\n       \"L 191.315085 338.875364 \\n\",\n       \"L 191.610994 340.71151 \\n\",\n       \"L 191.906903 329.320016 \\n\",\n       \"L 192.202813 324.66795 \\n\",\n       \"L 192.498722 322.806996 \\n\",\n       \"L 192.794631 316.131376 \\n\",\n       \"L 193.09054 319.856508 \\n\",\n       \"L 193.978267 342.336904 \\n\",\n       \"L 194.274176 339.046454 \\n\",\n       \"L 194.570085 332.053489 \\n\",\n       \"L 194.865994 331.284325 \\n\",\n       \"L 195.457812 314.83266 \\n\",\n       \"L 196.049631 331.798421 \\n\",\n       \"L 196.34554 330.828532 \\n\",\n       \"L 196.937358 337.290201 \\n\",\n       \"L 197.825085 320.606549 \\n\",\n       \"L 198.120994 321.708764 \\n\",\n       \"L 198.416903 332.075802 \\n\",\n       \"L 198.712813 332.76713 \\n\",\n       \"L 199.008722 332.273499 \\n\",\n       \"L 199.304631 337.176605 \\n\",\n       \"L 199.60054 332.658795 \\n\",\n       \"L 199.896449 323.100637 \\n\",\n       \"L 200.192358 322.628214 \\n\",\n       \"L 200.488267 322.559721 \\n\",\n       \"L 200.784176 324.284919 \\n\",\n       \"L 201.080085 332.103189 \\n\",\n       \"L 201.671903 337.452193 \\n\",\n       \"L 201.967812 336.694063 \\n\",\n       \"L 202.263722 328.478822 \\n\",\n       \"L 202.559631 324.681637 \\n\",\n       \"L 202.85554 323.061988 \\n\",\n       \"L 203.151449 320.4852 \\n\",\n       \"L 203.743267 334.406746 \\n\",\n       \"L 204.039176 333.8505 \\n\",\n       \"L 204.335085 334.918783 \\n\",\n       \"L 204.630994 334.188909 \\n\",\n       \"L 204.926903 327.711562 \\n\",\n       \"L 205.518722 321.106555 \\n\",\n       \"L 205.814631 323.345253 \\n\",\n       \"L 206.11054 332.34851 \\n\",\n       \"L 206.702358 333.866009 \\n\",\n       \"L 206.998267 337.502869 \\n\",\n       \"L 207.590085 323.042475 \\n\",\n       \"L 207.885994 323.992952 \\n\",\n       \"L 208.181903 323.205458 \\n\",\n       \"L 208.477813 324.792975 \\n\",\n       \"L 208.773722 331.796385 \\n\",\n       \"L 209.069631 333.853592 \\n\",\n       \"L 209.36554 336.894005 \\n\",\n       \"L 209.661449 336.03921 \\n\",\n       \"L 209.957358 327.38132 \\n\",\n       \"L 210.253267 324.731023 \\n\",\n       \"L 210.549176 324.239949 \\n\",\n       \"L 210.845085 321.289619 \\n\",\n       \"L 211.436903 334.856733 \\n\",\n       \"L 211.732813 334.085048 \\n\",\n       \"L 212.028722 334.660591 \\n\",\n       \"L 212.324631 334.110132 \\n\",\n       \"L 212.62054 327.290909 \\n\",\n       \"L 213.212358 321.47751 \\n\",\n       \"L 213.508267 323.525032 \\n\",\n       \"L 213.804176 331.632569 \\n\",\n       \"L 214.395994 334.169509 \\n\",\n       \"L 214.691903 337.495533 \\n\",\n       \"L 215.283722 323.422796 \\n\",\n       \"L 215.579631 324.334234 \\n\",\n       \"L 215.87554 323.507832 \\n\",\n       \"L 216.171449 324.904727 \\n\",\n       \"L 216.467358 331.413636 \\n\",\n       \"L 216.763267 333.590405 \\n\",\n       \"L 217.059176 337.088569 \\n\",\n       \"L 217.355085 335.796814 \\n\",\n       \"L 217.650994 326.904832 \\n\",\n       \"L 217.946903 325.110258 \\n\",\n       \"L 218.242813 324.583001 \\n\",\n       \"L 218.538722 321.334001 \\n\",\n       \"L 218.834631 327.029172 \\n\",\n       \"L 219.13054 335.052294 \\n\",\n       \"L 219.426449 334.045771 \\n\",\n       \"L 219.722358 334.85636 \\n\",\n       \"L 220.018267 333.977922 \\n\",\n       \"L 220.314176 327.205506 \\n\",\n       \"L 220.905994 321.821293 \\n\",\n       \"L 221.201903 323.288513 \\n\",\n       \"L 221.497813 331.350566 \\n\",\n       \"L 221.793722 333.443301 \\n\",\n       \"L 222.089631 334.19348 \\n\",\n       \"L 222.38554 337.237504 \\n\",\n       \"L 222.977358 323.708175 \\n\",\n       \"L 223.273267 324.358942 \\n\",\n       \"L 223.569176 323.789718 \\n\",\n       \"L 223.865085 324.859789 \\n\",\n       \"L 224.160994 331.295765 \\n\",\n       \"L 224.456903 333.695924 \\n\",\n       \"L 224.752813 337.10095 \\n\",\n       \"L 225.048722 335.467044 \\n\",\n       \"L 225.344631 327.01252 \\n\",\n       \"L 225.64054 325.38457 \\n\",\n       \"L 225.936449 324.58923 \\n\",\n       \"L 226.232358 321.347257 \\n\",\n       \"L 226.824176 334.973296 \\n\",\n       \"L 227.120085 334.001019 \\n\",\n       \"L 227.415994 334.985473 \\n\",\n       \"L 227.711903 333.867495 \\n\",\n       \"L 228.007812 327.226441 \\n\",\n       \"L 228.599631 321.92609 \\n\",\n       \"L 228.89554 323.164058 \\n\",\n       \"L 229.191449 331.50398 \\n\",\n       \"L 229.487358 333.418806 \\n\",\n       \"L 229.783267 334.102165 \\n\",\n       \"L 230.079176 337.162032 \\n\",\n       \"L 230.375085 331.579022 \\n\",\n       \"L 230.670994 323.745143 \\n\",\n       \"L 230.966903 324.55162 \\n\",\n       \"L 231.262812 323.944893 \\n\",\n       \"L 231.558722 324.864939 \\n\",\n       \"L 231.854631 331.2675 \\n\",\n       \"L 232.446449 336.913863 \\n\",\n       \"L 232.742358 335.351149 \\n\",\n       \"L 233.038267 327.270847 \\n\",\n       \"L 233.334176 325.43827 \\n\",\n       \"L 233.630085 324.634677 \\n\",\n       \"L 233.925994 321.558083 \\n\",\n       \"L 234.517813 334.821062 \\n\",\n       \"L 234.813722 334.109546 \\n\",\n       \"L 235.109631 334.934182 \\n\",\n       \"L 235.40554 333.797419 \\n\",\n       \"L 235.701449 327.381483 \\n\",\n       \"L 236.293267 321.956385 \\n\",\n       \"L 236.589176 323.29358 \\n\",\n       \"L 236.885085 331.584125 \\n\",\n       \"L 237.180994 333.320602 \\n\",\n       \"L 237.476903 334.056752 \\n\",\n       \"L 237.772812 337.189343 \\n\",\n       \"L 238.364631 323.886579 \\n\",\n       \"L 238.66054 324.777059 \\n\",\n       \"L 238.956449 323.980951 \\n\",\n       \"L 239.252358 324.951077 \\n\",\n       \"L 239.548267 331.326539 \\n\",\n       \"L 240.140085 336.732162 \\n\",\n       \"L 240.435994 335.41695 \\n\",\n       \"L 240.731903 327.381206 \\n\",\n       \"L 241.027813 325.518904 \\n\",\n       \"L 241.323722 324.746701 \\n\",\n       \"L 241.619631 321.78401 \\n\",\n       \"L 242.211449 334.789472 \\n\",\n       \"L 242.507358 334.140999 \\n\",\n       \"L 242.803267 334.836821 \\n\",\n       \"L 243.099176 333.803444 \\n\",\n       \"L 243.395085 327.557376 \\n\",\n       \"L 243.986903 322.068726 \\n\",\n       \"L 244.282813 323.519404 \\n\",\n       \"L 244.578722 331.516462 \\n\",\n       \"L 244.874631 333.282001 \\n\",\n       \"L 245.17054 334.059102 \\n\",\n       \"L 245.466449 337.151642 \\n\",\n       \"L 246.058267 324.12416 \\n\",\n       \"L 246.354176 324.892853 \\n\",\n       \"L 246.650085 324.058276 \\n\",\n       \"L 246.945994 325.069509 \\n\",\n       \"L 247.241903 331.384406 \\n\",\n       \"L 247.833722 336.69844 \\n\",\n       \"L 248.129631 335.421329 \\n\",\n       \"L 248.42554 327.452503 \\n\",\n       \"L 248.721449 325.6345 \\n\",\n       \"L 249.017358 324.910775 \\n\",\n       \"L 249.313267 321.911423 \\n\",\n       \"L 249.905085 334.781006 \\n\",\n       \"L 250.200994 334.07824 \\n\",\n       \"L 250.496903 334.791632 \\n\",\n       \"L 250.792813 333.833357 \\n\",\n       \"L 251.088722 327.675222 \\n\",\n       \"L 251.68054 322.282405 \\n\",\n       \"L 251.976449 323.65402 \\n\",\n       \"L 252.272358 331.459022 \\n\",\n       \"L 252.568267 333.266644 \\n\",\n       \"L 252.864176 334.072068 \\n\",\n       \"L 253.160085 337.030511 \\n\",\n       \"L 253.751903 324.326519 \\n\",\n       \"L 254.047813 324.954364 \\n\",\n       \"L 254.343722 324.197315 \\n\",\n       \"L 254.639631 325.18435 \\n\",\n       \"L 254.93554 331.372065 \\n\",\n       \"L 255.527358 336.69303 \\n\",\n       \"L 255.823267 335.350843 \\n\",\n       \"L 256.119176 327.548653 \\n\",\n       \"L 256.415085 325.774095 \\n\",\n       \"L 256.710994 325.034165 \\n\",\n       \"L 257.006903 322.017184 \\n\",\n       \"L 257.598722 334.707938 \\n\",\n       \"L 257.894631 334.014563 \\n\",\n       \"L 258.19054 334.778976 \\n\",\n       \"L 258.486449 333.851548 \\n\",\n       \"L 258.782358 327.723706 \\n\",\n       \"L 259.374176 322.458361 \\n\",\n       \"L 259.670085 323.746881 \\n\",\n       \"L 259.965994 331.441272 \\n\",\n       \"L 260.261903 333.255341 \\n\",\n       \"L 260.557813 334.037258 \\n\",\n       \"L 260.853722 336.936903 \\n\",\n       \"L 261.44554 324.452175 \\n\",\n       \"L 261.741449 325.055267 \\n\",\n       \"L 262.037358 324.323827 \\n\",\n       \"L 262.333267 325.286967 \\n\",\n       \"L 262.629176 331.313502 \\n\",\n       \"L 263.220994 336.61661 \\n\",\n       \"L 263.516903 335.290208 \\n\",\n       \"L 263.812813 327.658517 \\n\",\n       \"L 264.108722 325.900685 \\n\",\n       \"L 264.404631 325.108737 \\n\",\n       \"L 264.70054 322.165476 \\n\",\n       \"L 265.292358 334.605109 \\n\",\n       \"L 265.588267 333.989593 \\n\",\n       \"L 265.884176 334.756003 \\n\",\n       \"L 266.180085 333.836852 \\n\",\n       \"L 266.475994 327.781385 \\n\",\n       \"L 267.067813 322.578051 \\n\",\n       \"L 267.363722 323.84505 \\n\",\n       \"L 267.659631 331.436188 \\n\",\n       \"L 267.95554 333.217763 \\n\",\n       \"L 268.251449 333.982581 \\n\",\n       \"L 268.547358 336.889387 \\n\",\n       \"L 269.139176 324.562286 \\n\",\n       \"L 269.435085 325.171152 \\n\",\n       \"L 269.730994 324.427424 \\n\",\n       \"L 270.026903 325.350475 \\n\",\n       \"L 270.322813 331.294584 \\n\",\n       \"L 270.914631 336.520703 \\n\",\n       \"L 271.21054 335.25346 \\n\",\n       \"L 271.506449 327.749747 \\n\",\n       \"L 271.802358 325.996153 \\n\",\n       \"L 272.098267 325.173885 \\n\",\n       \"L 272.394176 322.324927 \\n\",\n       \"L 272.985994 334.536384 \\n\",\n       \"L 273.281903 333.958177 \\n\",\n       \"L 273.577812 334.731727 \\n\",\n       \"L 273.873722 333.790953 \\n\",\n       \"L 274.169631 327.878928 \\n\",\n       \"L 274.761449 322.688571 \\n\",\n       \"L 275.057358 323.945509 \\n\",\n       \"L 275.353267 331.420347 \\n\",\n       \"L 275.649176 333.165429 \\n\",\n       \"L 275.945085 333.951224 \\n\",\n       \"L 276.240994 336.841222 \\n\",\n       \"L 276.832812 324.678778 \\n\",\n       \"L 277.128722 325.267977 \\n\",\n       \"L 277.424631 324.504115 \\n\",\n       \"L 277.72054 325.402953 \\n\",\n       \"L 278.016449 331.298162 \\n\",\n       \"L 278.608267 336.44896 \\n\",\n       \"L 278.904176 335.222872 \\n\",\n       \"L 279.200085 327.817564 \\n\",\n       \"L 279.495994 326.065361 \\n\",\n       \"L 279.791903 325.256334 \\n\",\n       \"L 280.087813 322.435635 \\n\",\n       \"L 280.679631 334.486372 \\n\",\n       \"L 280.97554 333.922279 \\n\",\n       \"L 281.271449 334.691291 \\n\",\n       \"L 281.567358 333.767734 \\n\",\n       \"L 281.863267 327.954811 \\n\",\n       \"L 282.455085 322.793042 \\n\",\n       \"L 282.750994 324.028104 \\n\",\n       \"L 283.046903 331.395084 \\n\",\n       \"L 283.342813 333.114748 \\n\",\n       \"L 283.638722 333.941878 \\n\",\n       \"L 283.934631 336.768153 \\n\",\n       \"L 284.526449 324.774523 \\n\",\n       \"L 284.822358 325.340179 \\n\",\n       \"L 285.118267 324.557113 \\n\",\n       \"L 285.414176 325.462146 \\n\",\n       \"L 285.710085 331.282636 \\n\",\n       \"L 286.301903 336.400036 \\n\",\n       \"L 286.597813 335.185677 \\n\",\n       \"L 286.893722 327.865002 \\n\",\n       \"L 287.189631 326.12414 \\n\",\n       \"L 287.48554 325.328718 \\n\",\n       \"L 287.781449 322.501151 \\n\",\n       \"L 288.373267 334.435014 \\n\",\n       \"L 288.669176 333.886176 \\n\",\n       \"L 288.965085 334.650494 \\n\",\n       \"L 289.260994 333.763456 \\n\",\n       \"L 289.556903 327.988703 \\n\",\n       \"L 290.148722 322.874287 \\n\",\n       \"L 290.444631 324.087229 \\n\",\n       \"L 290.74054 331.363223 \\n\",\n       \"L 291.036449 333.086649 \\n\",\n       \"L 291.332358 333.916889 \\n\",\n       \"L 291.628267 336.708141 \\n\",\n       \"L 292.220085 324.845046 \\n\",\n       \"L 292.515994 325.38423 \\n\",\n       \"L 292.811903 324.60368 \\n\",\n       \"L 293.107813 325.50578 \\n\",\n       \"L 293.403722 331.251846 \\n\",\n       \"L 293.99554 336.354458 \\n\",\n       \"L 294.291449 335.150457 \\n\",\n       \"L 294.587358 327.893762 \\n\",\n       \"L 294.883267 326.179879 \\n\",\n       \"L 295.179176 325.362138 \\n\",\n       \"L 295.475085 322.554463 \\n\",\n       \"L 296.066903 334.389694 \\n\",\n       \"L 296.362813 333.850462 \\n\",\n       \"L 296.658722 334.624521 \\n\",\n       \"L 296.954631 333.752555 \\n\",\n       \"L 297.25054 328.003848 \\n\",\n       \"L 297.842358 322.922724 \\n\",\n       \"L 298.138267 324.123649 \\n\",\n       \"L 298.434176 331.338374 \\n\",\n       \"L 298.730085 333.066331 \\n\",\n       \"L 299.025994 333.881108 \\n\",\n       \"L 299.321903 336.673964 \\n\",\n       \"L 299.913722 324.88627 \\n\",\n       \"L 300.209631 325.411309 \\n\",\n       \"L 300.50554 324.638663 \\n\",\n       \"L 300.801449 325.520378 \\n\",\n       \"L 301.097358 331.229505 \\n\",\n       \"L 301.689176 336.317563 \\n\",\n       \"L 301.985085 335.117611 \\n\",\n       \"L 302.280994 327.916242 \\n\",\n       \"L 302.576903 326.207946 \\n\",\n       \"L 302.872813 325.377786 \\n\",\n       \"L 303.168722 322.588225 \\n\",\n       \"L 303.76054 334.3532 \\n\",\n       \"L 304.056449 333.824122 \\n\",\n       \"L 304.352358 334.608285 \\n\",\n       \"L 304.648267 333.729077 \\n\",\n       \"L 304.944176 328.020552 \\n\",\n       \"L 305.535994 322.947705 \\n\",\n       \"L 305.831903 324.13471 \\n\",\n       \"L 306.127813 331.326911 \\n\",\n       \"L 306.423722 333.038362 \\n\",\n       \"L 306.719631 333.857483 \\n\",\n       \"L 307.01554 336.651624 \\n\",\n       \"L 307.607358 324.901966 \\n\",\n       \"L 307.903267 325.425695 \\n\",\n       \"L 308.199176 324.650278 \\n\",\n       \"L 308.495085 325.515411 \\n\",\n       \"L 308.790994 331.218258 \\n\",\n       \"L 309.382812 336.290916 \\n\",\n       \"L 309.678722 335.096547 \\n\",\n       \"L 309.974631 327.923732 \\n\",\n       \"L 310.27054 326.211173 \\n\",\n       \"L 310.566449 325.381594 \\n\",\n       \"L 310.862358 322.596276 \\n\",\n       \"L 311.454176 334.33113 \\n\",\n       \"L 311.750085 333.805472 \\n\",\n       \"L 312.045994 334.591918 \\n\",\n       \"L 312.341903 333.712816 \\n\",\n       \"L 312.637812 328.024262 \\n\",\n       \"L 313.229631 322.946654 \\n\",\n       \"L 313.52554 324.132349 \\n\",\n       \"L 313.821449 331.314112 \\n\",\n       \"L 314.117358 333.013749 \\n\",\n       \"L 314.413267 333.845771 \\n\",\n       \"L 314.709176 336.636654 \\n\",\n       \"L 315.300994 324.893953 \\n\",\n       \"L 315.596903 325.424505 \\n\",\n       \"L 315.892812 324.63589 \\n\",\n       \"L 316.188722 325.505406 \\n\",\n       \"L 316.484631 331.202466 \\n\",\n       \"L 317.076449 336.275664 \\n\",\n       \"L 317.372358 335.089012 \\n\",\n       \"L 317.668267 327.909488 \\n\",\n       \"L 317.964176 326.200184 \\n\",\n       \"L 318.260085 325.371481 \\n\",\n       \"L 318.555994 322.575524 \\n\",\n       \"L 319.147813 334.320327 \\n\",\n       \"L 319.443722 333.794593 \\n\",\n       \"L 319.739631 334.576892 \\n\",\n       \"L 320.03554 333.708337 \\n\",\n       \"L 320.331449 328.007572 \\n\",\n       \"L 320.923267 322.921676 \\n\",\n       \"L 321.219176 324.113657 \\n\",\n       \"L 321.515085 331.298869 \\n\",\n       \"L 321.810994 333.002261 \\n\",\n       \"L 322.106903 333.835872 \\n\",\n       \"L 322.402813 336.634972 \\n\",\n       \"L 322.994631 324.868774 \\n\",\n       \"L 323.29054 325.401264 \\n\",\n       \"L 323.586449 324.609226 \\n\",\n       \"L 323.882358 325.480519 \\n\",\n       \"L 324.178267 331.18885 \\n\",\n       \"L 324.770085 336.276404 \\n\",\n       \"L 325.065994 335.086455 \\n\",\n       \"L 325.361903 327.882126 \\n\",\n       \"L 325.657813 326.17605 \\n\",\n       \"L 325.953722 325.344431 \\n\",\n       \"L 326.249631 322.534236 \\n\",\n       \"L 326.841449 334.321381 \\n\",\n       \"L 327.137358 333.786965 \\n\",\n       \"L 327.433267 334.571671 \\n\",\n       \"L 327.729176 333.706424 \\n\",\n       \"L 328.025085 327.978362 \\n\",\n       \"L 328.616903 322.877731 \\n\",\n       \"L 328.912813 324.077068 \\n\",\n       \"L 329.208722 331.287031 \\n\",\n       \"L 329.504631 332.999507 \\n\",\n       \"L 329.80054 333.828566 \\n\",\n       \"L 330.096449 336.646754 \\n\",\n       \"L 330.688267 324.826582 \\n\",\n       \"L 330.984176 325.360382 \\n\",\n       \"L 331.280085 324.573412 \\n\",\n       \"L 331.575994 325.440519 \\n\",\n       \"L 331.871903 331.179914 \\n\",\n       \"L 332.463722 336.290555 \\n\",\n       \"L 332.759631 335.086758 \\n\",\n       \"L 333.05554 327.847206 \\n\",\n       \"L 333.351449 326.137832 \\n\",\n       \"L 333.647358 325.304579 \\n\",\n       \"L 333.943267 322.473852 \\n\",\n       \"L 334.535085 334.331293 \\n\",\n       \"L 334.830994 333.786379 \\n\",\n       \"L 335.126903 334.574505 \\n\",\n       \"L 335.422813 333.705415 \\n\",\n       \"L 335.718722 327.942525 \\n\",\n       \"L 336.31054 322.817937 \\n\",\n       \"L 336.606449 324.023077 \\n\",\n       \"L 336.902358 331.284177 \\n\",\n       \"L 337.198267 332.998737 \\n\",\n       \"L 337.494176 333.827733 \\n\",\n       \"L 337.790085 336.667436 \\n\",\n       \"L 338.381903 324.764683 \\n\",\n       \"L 338.677813 325.31087 \\n\",\n       \"L 338.973722 324.524656 \\n\",\n       \"L 339.269631 325.391115 \\n\",\n       \"L 339.56554 331.173242 \\n\",\n       \"L 340.157358 336.312992 \\n\",\n       \"L 340.453267 335.094877 \\n\",\n       \"L 340.749176 327.805603 \\n\",\n       \"L 341.045085 326.086825 \\n\",\n       \"L 341.340994 325.255469 \\n\",\n       \"L 341.636903 322.401502 \\n\",\n       \"L 342.228722 334.349222 \\n\",\n       \"L 342.524631 333.792491 \\n\",\n       \"L 342.82054 334.582296 \\n\",\n       \"L 343.116449 333.7062 \\n\",\n       \"L 343.412358 327.901354 \\n\",\n       \"L 344.004176 322.744352 \\n\",\n       \"L 344.300085 323.960112 \\n\",\n       \"L 344.595994 331.28454 \\n\",\n       \"L 344.891903 333.001238 \\n\",\n       \"L 345.187813 333.833916 \\n\",\n       \"L 345.483722 336.695015 \\n\",\n       \"L 346.07554 324.690183 \\n\",\n       \"L 346.371449 325.256707 \\n\",\n       \"L 346.667358 324.463086 \\n\",\n       \"L 346.963267 325.33974 \\n\",\n       \"L 347.259176 331.167124 \\n\",\n       \"L 347.850994 336.339453 \\n\",\n       \"L 348.146903 335.113657 \\n\",\n       \"L 348.442813 327.754123 \\n\",\n       \"L 348.738722 326.032056 \\n\",\n       \"L 349.034631 325.197009 \\n\",\n       \"L 349.33054 322.320711 \\n\",\n       \"L 349.922358 334.377213 \\n\",\n       \"L 350.218267 333.802229 \\n\",\n       \"L 350.514176 334.593519 \\n\",\n       \"L 350.810085 333.711666 \\n\",\n       \"L 351.105994 327.855074 \\n\",\n       \"L 351.697812 322.660049 \\n\",\n       \"L 351.993722 323.892064 \\n\",\n       \"L 352.289631 331.286001 \\n\",\n       \"L 352.58554 333.010254 \\n\",\n       \"L 352.881449 333.842502 \\n\",\n       \"L 353.177358 336.730806 \\n\",\n       \"L 353.769176 324.610491 \\n\",\n       \"L 354.065085 325.194231 \\n\",\n       \"L 354.360994 324.398211 \\n\",\n       \"L 354.656903 325.282963 \\n\",\n       \"L 354.952813 331.165032 \\n\",\n       \"L 355.544631 336.374772 \\n\",\n       \"L 355.84054 335.135236 \\n\",\n       \"L 356.136449 327.700055 \\n\",\n       \"L 356.432358 325.970471 \\n\",\n       \"L 356.728267 325.136504 \\n\",\n       \"L 357.024176 322.232781 \\n\",\n       \"L 357.615994 334.40986 \\n\",\n       \"L 357.911903 333.816076 \\n\",\n       \"L 358.207813 334.609644 \\n\",\n       \"L 358.503722 333.719344 \\n\",\n       \"L 358.799631 327.805927 \\n\",\n       \"L 359.391449 322.572802 \\n\",\n       \"L 359.687358 323.819783 \\n\",\n       \"L 359.983267 331.290251 \\n\",\n       \"L 360.279176 333.0238 \\n\",\n       \"L 360.575085 333.854463 \\n\",\n       \"L 360.870994 336.771225 \\n\",\n       \"L 361.462813 324.527921 \\n\",\n       \"L 361.758722 325.12847 \\n\",\n       \"L 362.054631 324.332355 \\n\",\n       \"L 362.35054 325.224712 \\n\",\n       \"L 362.646449 331.166529 \\n\",\n       \"L 363.238267 336.414806 \\n\",\n       \"L 363.534176 335.1589 \\n\",\n       \"L 363.830085 327.645552 \\n\",\n       \"L 364.125994 325.90718 \\n\",\n       \"L 364.421903 325.074715 \\n\",\n       \"L 364.717813 322.141651 \\n\",\n       \"L 365.309631 334.446972 \\n\",\n       \"L 365.60554 333.833057 \\n\",\n       \"L 365.901449 334.627584 \\n\",\n       \"L 366.197358 333.729449 \\n\",\n       \"L 366.493267 327.757179 \\n\",\n       \"L 367.085085 322.484521 \\n\",\n       \"L 367.380994 323.746694 \\n\",\n       \"L 367.676903 331.298776 \\n\",\n       \"L 367.972813 333.040552 \\n\",\n       \"L 368.268722 333.868959 \\n\",\n       \"L 368.564631 336.814059 \\n\",\n       \"L 369.156449 324.443711 \\n\",\n       \"L 369.452358 325.063066 \\n\",\n       \"L 369.748267 324.267023 \\n\",\n       \"L 370.044176 325.169368 \\n\",\n       \"L 370.340085 331.169404 \\n\",\n       \"L 370.931903 336.457884 \\n\",\n       \"L 371.227813 335.18545 \\n\",\n       \"L 371.523722 327.592788 \\n\",\n       \"L 371.819631 325.843426 \\n\",\n       \"L 372.11554 325.015576 \\n\",\n       \"L 372.411449 322.052338 \\n\",\n       \"L 373.003267 334.484144 \\n\",\n       \"L 373.299176 333.854612 \\n\",\n       \"L 373.595085 334.647131 \\n\",\n       \"L 373.890994 333.741571 \\n\",\n       \"L 374.186903 327.708388 \\n\",\n       \"L 374.778722 322.397999 \\n\",\n       \"L 375.074631 323.676486 \\n\",\n       \"L 375.37054 331.308379 \\n\",\n       \"L 375.666449 333.060345 \\n\",\n       \"L 375.962358 333.884963 \\n\",\n       \"L 376.258267 336.859347 \\n\",\n       \"L 376.850085 324.363099 \\n\",\n       \"L 377.145994 325.0001 \\n\",\n       \"L 377.441903 324.205767 \\n\",\n       \"L 377.737813 325.11566 \\n\",\n       \"L 378.033722 331.175464 \\n\",\n       \"L 378.62554 336.501838 \\n\",\n       \"L 378.921449 335.213577 \\n\",\n       \"L 379.217358 327.542395 \\n\",\n       \"L 379.513267 325.783674 \\n\",\n       \"L 379.809176 324.958554 \\n\",\n       \"L 380.105085 321.969518 \\n\",\n       \"L 380.696903 334.523382 \\n\",\n       \"L 380.992813 333.876089 \\n\",\n       \"L 381.288722 334.6689 \\n\",\n       \"L 381.584631 333.754928 \\n\",\n       \"L 381.88054 327.662979 \\n\",\n       \"L 382.472358 322.316416 \\n\",\n       \"L 382.768267 323.611786 \\n\",\n       \"L 383.064176 331.318258 \\n\",\n       \"L 383.360085 333.080918 \\n\",\n       \"L 383.655994 333.900868 \\n\",\n       \"L 383.951903 336.904009 \\n\",\n       \"L 384.543722 324.287488 \\n\",\n       \"L 384.839631 324.942222 \\n\",\n       \"L 385.13554 324.149288 \\n\",\n       \"L 385.431449 325.06617 \\n\",\n       \"L 385.727358 331.182872 \\n\",\n       \"L 386.319176 336.544261 \\n\",\n       \"L 386.615085 335.242304 \\n\",\n       \"L 386.910994 327.497698 \\n\",\n       \"L 387.206903 325.729071 \\n\",\n       \"L 387.502813 324.908067 \\n\",\n       \"L 387.798722 321.893742 \\n\",\n       \"L 388.39054 334.561907 \\n\",\n       \"L 388.686449 333.897528 \\n\",\n       \"L 388.982358 334.690865 \\n\",\n       \"L 389.278267 333.768022 \\n\",\n       \"L 389.574176 327.625627 \\n\",\n       \"L 390.165994 322.246125 \\n\",\n       \"L 390.461903 323.552645 \\n\",\n       \"L 390.757813 331.331116 \\n\",\n       \"L 391.053722 333.101572 \\n\",\n       \"L 391.349631 333.920189 \\n\",\n       \"L 391.64554 336.946578 \\n\",\n       \"L 392.237358 324.222554 \\n\",\n       \"L 392.533267 324.893403 \\n\",\n       \"L 392.829176 324.101106 \\n\",\n       \"L 393.125085 325.024492 \\n\",\n       \"L 393.420994 331.192866 \\n\",\n       \"L 394.012813 336.585367 \\n\",\n       \"L 394.308722 335.270285 \\n\",\n       \"L 394.604631 327.459134 \\n\",\n       \"L 394.90054 325.682436 \\n\",\n       \"L 395.196449 324.865548 \\n\",\n       \"L 395.492358 321.827526 \\n\",\n       \"L 396.084176 334.598955 \\n\",\n       \"L 396.380085 333.92115 \\n\",\n       \"L 396.675994 334.711174 \\n\",\n       \"L 396.971903 333.783749 \\n\",\n       \"L 397.267813 327.591802 \\n\",\n       \"L 397.859631 322.183152 \\n\",\n       \"L 398.15554 323.504002 \\n\",\n       \"L 398.451449 331.343572 \\n\",\n       \"L 398.747358 333.123937 \\n\",\n       \"L 399.043267 333.938392 \\n\",\n       \"L 399.339176 336.985668 \\n\",\n       \"L 399.930994 324.166044 \\n\",\n       \"L 400.226903 324.851163 \\n\",\n       \"L 400.522813 324.058231 \\n\",\n       \"L 400.818722 324.990486 \\n\",\n       \"L 401.114631 331.200692 \\n\",\n       \"L 401.706449 336.621531 \\n\",\n       \"L 402.002358 335.297121 \\n\",\n       \"L 402.298267 327.427896 \\n\",\n       \"L 402.594176 325.643623 \\n\",\n       \"L 402.890085 324.830029 \\n\",\n       \"L 403.185994 321.77284 \\n\",\n       \"L 403.777813 334.631848 \\n\",\n       \"L 404.073722 333.941733 \\n\",\n       \"L 404.369631 334.731782 \\n\",\n       \"L 404.66554 333.797528 \\n\",\n       \"L 404.961449 327.56682 \\n\",\n       \"L 405.553267 322.134323 \\n\",\n       \"L 405.849176 323.462454 \\n\",\n       \"L 406.145085 331.356081 \\n\",\n       \"L 406.440994 333.142588 \\n\",\n       \"L 406.736903 333.956699 \\n\",\n       \"L 407.032813 337.018639 \\n\",\n       \"L 407.624631 324.121071 \\n\",\n       \"L 407.92054 324.818644 \\n\",\n       \"L 408.216449 324.025703 \\n\",\n       \"L 408.512358 324.964695 \\n\",\n       \"L 408.808267 331.209298 \\n\",\n       \"L 409.400085 336.653631 \\n\",\n       \"L 409.695994 335.321619 \\n\",\n       \"L 409.991903 327.403467 \\n\",\n       \"L 410.287813 325.616159 \\n\",\n       \"L 410.583722 324.80163 \\n\",\n       \"L 410.879631 321.732222 \\n\",\n       \"L 411.471449 334.662685 \\n\",\n       \"L 411.767358 333.959368 \\n\",\n       \"L 412.063267 334.752331 \\n\",\n       \"L 412.359176 333.81042 \\n\",\n       \"L 412.655085 327.550035 \\n\",\n       \"L 413.246903 322.096957 \\n\",\n       \"L 413.542813 323.431175 \\n\",\n       \"L 413.838722 331.368815 \\n\",\n       \"L 414.134631 333.160317 \\n\",\n       \"L 414.43054 333.971992 \\n\",\n       \"L 414.726449 337.047908 \\n\",\n       \"L 415.318267 324.088811 \\n\",\n       \"L 415.614176 324.794949 \\n\",\n       \"L 415.910085 324.003407 \\n\",\n       \"L 416.205994 324.946541 \\n\",\n       \"L 416.501903 331.218944 \\n\",\n       \"L 417.093722 336.680311 \\n\",\n       \"L 417.389631 335.342956 \\n\",\n       \"L 417.68554 327.388464 \\n\",\n       \"L 417.981449 325.595868 \\n\",\n       \"L 418.277358 324.783053 \\n\",\n       \"L 418.573267 321.703503 \\n\",\n       \"L 419.165085 334.687009 \\n\",\n       \"L 419.460994 333.97697 \\n\",\n       \"L 419.756903 334.769277 \\n\",\n       \"L 420.052813 333.822286 \\n\",\n       \"L 420.348722 327.540692 \\n\",\n       \"L 420.94054 322.072065 \\n\",\n       \"L 421.236449 323.410069 \\n\",\n       \"L 421.532358 331.381067 \\n\",\n       \"L 421.828267 333.17565 \\n\",\n       \"L 421.828267 333.17565 \\n\",\n       \"\\\" style=\\\"fill:none;stroke:#1f77b4;stroke-linecap:square;stroke-width:1.5;\\\"/>\\n\",\n       \"   </g>\\n\",\n       \"   <g id=\\\"patch_13\\\">\\n\",\n       \"    <path d=\\\"M 48.982813 376.56 \\n\",\n       \"L 48.982813 267.84 \\n\",\n       \"\\\" style=\\\"fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;stroke-width:0.8;\\\"/>\\n\",\n       \"   </g>\\n\",\n       \"   <g id=\\\"patch_14\\\">\\n\",\n       \"    <path d=\\\"M 439.582813 376.56 \\n\",\n       \"L 439.582813 267.84 \\n\",\n       \"\\\" style=\\\"fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;stroke-width:0.8;\\\"/>\\n\",\n       \"   </g>\\n\",\n       \"   <g id=\\\"patch_15\\\">\\n\",\n       \"    <path d=\\\"M 48.982813 376.56 \\n\",\n       \"L 439.582812 376.56 \\n\",\n       \"\\\" style=\\\"fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;stroke-width:0.8;\\\"/>\\n\",\n       \"   </g>\\n\",\n       \"   <g id=\\\"patch_16\\\">\\n\",\n       \"    <path d=\\\"M 48.982813 267.84 \\n\",\n       \"L 439.582812 267.84 \\n\",\n       \"\\\" style=\\\"fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;stroke-width:0.8;\\\"/>\\n\",\n       \"   </g>\\n\",\n       \"  </g>\\n\",\n       \"  <g id=\\\"text_27\\\">\\n\",\n       \"   <!-- Angular RBM velocities. T-Tail model in a 20% 1-cos gust encounter -->\\n\",\n       \"   <defs>\\n\",\n       \"    <path d=\\\"M 34.1875 63.1875 \\n\",\n       \"L 20.796875 26.90625 \\n\",\n       \"L 47.609375 26.90625 \\n\",\n       \"z\\n\",\n       \"M 28.609375 72.90625 \\n\",\n       \"L 39.796875 72.90625 \\n\",\n       \"L 67.578125 0 \\n\",\n       \"L 57.328125 0 \\n\",\n       \"L 50.6875 18.703125 \\n\",\n       \"L 17.828125 18.703125 \\n\",\n       \"L 11.1875 0 \\n\",\n       \"L 0.78125 0 \\n\",\n       \"z\\n\",\n       \"\\\" id=\\\"DejaVuSans-65\\\"/>\\n\",\n       \"    <path d=\\\"M 54.890625 33.015625 \\n\",\n       \"L 54.890625 0 \\n\",\n       \"L 45.90625 0 \\n\",\n       \"L 45.90625 32.71875 \\n\",\n       \"Q 45.90625 40.484375 42.875 44.328125 \\n\",\n       \"Q 39.84375 48.1875 33.796875 48.1875 \\n\",\n       \"Q 26.515625 48.1875 22.3125 43.546875 \\n\",\n       \"Q 18.109375 38.921875 18.109375 30.90625 \\n\",\n       \"L 18.109375 0 \\n\",\n       \"L 9.078125 0 \\n\",\n       \"L 9.078125 54.6875 \\n\",\n       \"L 18.109375 54.6875 \\n\",\n       \"L 18.109375 46.1875 \\n\",\n       \"Q 21.34375 51.125 25.703125 53.5625 \\n\",\n       \"Q 30.078125 56 35.796875 56 \\n\",\n       \"Q 45.21875 56 50.046875 50.171875 \\n\",\n       \"Q 54.890625 44.34375 54.890625 33.015625 \\n\",\n       \"z\\n\",\n       \"\\\" id=\\\"DejaVuSans-110\\\"/>\\n\",\n       \"    <path d=\\\"M 8.5 21.578125 \\n\",\n       \"L 8.5 54.6875 \\n\",\n       \"L 17.484375 54.6875 \\n\",\n       \"L 17.484375 21.921875 \\n\",\n       \"Q 17.484375 14.15625 20.5 10.265625 \\n\",\n       \"Q 23.53125 6.390625 29.59375 6.390625 \\n\",\n       \"Q 36.859375 6.390625 41.078125 11.03125 \\n\",\n       \"Q 45.3125 15.671875 45.3125 23.6875 \\n\",\n       \"L 45.3125 54.6875 \\n\",\n       \"L 54.296875 54.6875 \\n\",\n       \"L 54.296875 0 \\n\",\n       \"L 45.3125 0 \\n\",\n       \"L 45.3125 8.40625 \\n\",\n       \"Q 42.046875 3.421875 37.71875 1 \\n\",\n       \"Q 33.40625 -1.421875 27.6875 -1.421875 \\n\",\n       \"Q 18.265625 -1.421875 13.375 4.4375 \\n\",\n       \"Q 8.5 10.296875 8.5 21.578125 \\n\",\n       \"z\\n\",\n       \"M 31.109375 56 \\n\",\n       \"z\\n\",\n       \"\\\" id=\\\"DejaVuSans-117\\\"/>\\n\",\n       \"    <path d=\\\"M 19.671875 34.8125 \\n\",\n       \"L 19.671875 8.109375 \\n\",\n       \"L 35.5 8.109375 \\n\",\n       \"Q 43.453125 8.109375 47.28125 11.40625 \\n\",\n       \"Q 51.125 14.703125 51.125 21.484375 \\n\",\n       \"Q 51.125 28.328125 47.28125 31.5625 \\n\",\n       \"Q 43.453125 34.8125 35.5 34.8125 \\n\",\n       \"z\\n\",\n       \"M 19.671875 64.796875 \\n\",\n       \"L 19.671875 42.828125 \\n\",\n       \"L 34.28125 42.828125 \\n\",\n       \"Q 41.5 42.828125 45.03125 45.53125 \\n\",\n       \"Q 48.578125 48.25 48.578125 53.8125 \\n\",\n       \"Q 48.578125 59.328125 45.03125 62.0625 \\n\",\n       \"Q 41.5 64.796875 34.28125 64.796875 \\n\",\n       \"z\\n\",\n       \"M 9.8125 72.90625 \\n\",\n       \"L 35.015625 72.90625 \\n\",\n       \"Q 46.296875 72.90625 52.390625 68.21875 \\n\",\n       \"Q 58.5 63.53125 58.5 54.890625 \\n\",\n       \"Q 58.5 48.1875 55.375 44.234375 \\n\",\n       \"Q 52.25 40.28125 46.1875 39.3125 \\n\",\n       \"Q 53.46875 37.75 57.5 32.78125 \\n\",\n       \"Q 61.53125 27.828125 61.53125 20.40625 \\n\",\n       \"Q 61.53125 10.640625 54.890625 5.3125 \\n\",\n       \"Q 48.25 0 35.984375 0 \\n\",\n       \"L 9.8125 0 \\n\",\n       \"z\\n\",\n       \"\\\" id=\\\"DejaVuSans-66\\\"/>\\n\",\n       \"    <path d=\\\"M 9.8125 72.90625 \\n\",\n       \"L 24.515625 72.90625 \\n\",\n       \"L 43.109375 23.296875 \\n\",\n       \"L 61.8125 72.90625 \\n\",\n       \"L 76.515625 72.90625 \\n\",\n       \"L 76.515625 0 \\n\",\n       \"L 66.890625 0 \\n\",\n       \"L 66.890625 64.015625 \\n\",\n       \"L 48.09375 14.015625 \\n\",\n       \"L 38.1875 14.015625 \\n\",\n       \"L 19.390625 64.015625 \\n\",\n       \"L 19.390625 0 \\n\",\n       \"L 9.8125 0 \\n\",\n       \"z\\n\",\n       \"\\\" id=\\\"DejaVuSans-77\\\"/>\\n\",\n       \"    <path d=\\\"M 2.984375 54.6875 \\n\",\n       \"L 12.5 54.6875 \\n\",\n       \"L 29.59375 8.796875 \\n\",\n       \"L 46.6875 54.6875 \\n\",\n       \"L 56.203125 54.6875 \\n\",\n       \"L 35.6875 0 \\n\",\n       \"L 23.484375 0 \\n\",\n       \"z\\n\",\n       \"\\\" id=\\\"DejaVuSans-118\\\"/>\\n\",\n       \"    <path d=\\\"M 10.6875 12.40625 \\n\",\n       \"L 21 12.40625 \\n\",\n       \"L 21 0 \\n\",\n       \"L 10.6875 0 \\n\",\n       \"z\\n\",\n       \"\\\" id=\\\"DejaVuSans-46\\\"/>\\n\",\n       \"    <path d=\\\"M -0.296875 72.90625 \\n\",\n       \"L 61.375 72.90625 \\n\",\n       \"L 61.375 64.59375 \\n\",\n       \"L 35.5 64.59375 \\n\",\n       \"L 35.5 0 \\n\",\n       \"L 25.59375 0 \\n\",\n       \"L 25.59375 64.59375 \\n\",\n       \"L -0.296875 64.59375 \\n\",\n       \"z\\n\",\n       \"\\\" id=\\\"DejaVuSans-84\\\"/>\\n\",\n       \"    <path d=\\\"M 4.890625 31.390625 \\n\",\n       \"L 31.203125 31.390625 \\n\",\n       \"L 31.203125 23.390625 \\n\",\n       \"L 4.890625 23.390625 \\n\",\n       \"z\\n\",\n       \"\\\" id=\\\"DejaVuSans-45\\\"/>\\n\",\n       \"    <path d=\\\"M 72.703125 32.078125 \\n\",\n       \"Q 68.453125 32.078125 66.03125 28.46875 \\n\",\n       \"Q 63.625 24.859375 63.625 18.40625 \\n\",\n       \"Q 63.625 12.0625 66.03125 8.421875 \\n\",\n       \"Q 68.453125 4.78125 72.703125 4.78125 \\n\",\n       \"Q 76.859375 4.78125 79.265625 8.421875 \\n\",\n       \"Q 81.6875 12.0625 81.6875 18.40625 \\n\",\n       \"Q 81.6875 24.8125 79.265625 28.4375 \\n\",\n       \"Q 76.859375 32.078125 72.703125 32.078125 \\n\",\n       \"z\\n\",\n       \"M 72.703125 38.28125 \\n\",\n       \"Q 80.421875 38.28125 84.953125 32.90625 \\n\",\n       \"Q 89.5 27.546875 89.5 18.40625 \\n\",\n       \"Q 89.5 9.28125 84.9375 3.921875 \\n\",\n       \"Q 80.375 -1.421875 72.703125 -1.421875 \\n\",\n       \"Q 64.890625 -1.421875 60.34375 3.921875 \\n\",\n       \"Q 55.8125 9.28125 55.8125 18.40625 \\n\",\n       \"Q 55.8125 27.59375 60.375 32.9375 \\n\",\n       \"Q 64.9375 38.28125 72.703125 38.28125 \\n\",\n       \"z\\n\",\n       \"M 22.3125 68.015625 \\n\",\n       \"Q 18.109375 68.015625 15.6875 64.375 \\n\",\n       \"Q 13.28125 60.75 13.28125 54.390625 \\n\",\n       \"Q 13.28125 47.953125 15.671875 44.328125 \\n\",\n       \"Q 18.0625 40.71875 22.3125 40.71875 \\n\",\n       \"Q 26.5625 40.71875 28.96875 44.328125 \\n\",\n       \"Q 31.390625 47.953125 31.390625 54.390625 \\n\",\n       \"Q 31.390625 60.6875 28.953125 64.34375 \\n\",\n       \"Q 26.515625 68.015625 22.3125 68.015625 \\n\",\n       \"z\\n\",\n       \"M 66.40625 74.21875 \\n\",\n       \"L 74.21875 74.21875 \\n\",\n       \"L 28.609375 -1.421875 \\n\",\n       \"L 20.796875 -1.421875 \\n\",\n       \"z\\n\",\n       \"M 22.3125 74.21875 \\n\",\n       \"Q 30.03125 74.21875 34.609375 68.875 \\n\",\n       \"Q 39.203125 63.53125 39.203125 54.390625 \\n\",\n       \"Q 39.203125 45.171875 34.640625 39.84375 \\n\",\n       \"Q 30.078125 34.515625 22.3125 34.515625 \\n\",\n       \"Q 14.546875 34.515625 10.03125 39.859375 \\n\",\n       \"Q 5.515625 45.21875 5.515625 54.390625 \\n\",\n       \"Q 5.515625 63.484375 10.046875 68.84375 \\n\",\n       \"Q 14.59375 74.21875 22.3125 74.21875 \\n\",\n       \"z\\n\",\n       \"\\\" id=\\\"DejaVuSans-37\\\"/>\\n\",\n       \"   </defs>\\n\",\n       \"   <g transform=\\\"translate(34.445938 16.318125)scale(0.12 -0.12)\\\">\\n\",\n       \"    <use xlink:href=\\\"#DejaVuSans-65\\\"/>\\n\",\n       \"    <use x=\\\"68.408203\\\" xlink:href=\\\"#DejaVuSans-110\\\"/>\\n\",\n       \"    <use x=\\\"131.787109\\\" xlink:href=\\\"#DejaVuSans-103\\\"/>\\n\",\n       \"    <use x=\\\"195.263672\\\" xlink:href=\\\"#DejaVuSans-117\\\"/>\\n\",\n       \"    <use x=\\\"258.642578\\\" xlink:href=\\\"#DejaVuSans-108\\\"/>\\n\",\n       \"    <use x=\\\"286.425781\\\" xlink:href=\\\"#DejaVuSans-97\\\"/>\\n\",\n       \"    <use x=\\\"347.705078\\\" xlink:href=\\\"#DejaVuSans-114\\\"/>\\n\",\n       \"    <use x=\\\"388.818359\\\" xlink:href=\\\"#DejaVuSans-32\\\"/>\\n\",\n       \"    <use x=\\\"420.605469\\\" xlink:href=\\\"#DejaVuSans-82\\\"/>\\n\",\n       \"    <use x=\\\"490.087891\\\" xlink:href=\\\"#DejaVuSans-66\\\"/>\\n\",\n       \"    <use x=\\\"558.691406\\\" xlink:href=\\\"#DejaVuSans-77\\\"/>\\n\",\n       \"    <use x=\\\"644.970703\\\" xlink:href=\\\"#DejaVuSans-32\\\"/>\\n\",\n       \"    <use x=\\\"676.757812\\\" xlink:href=\\\"#DejaVuSans-118\\\"/>\\n\",\n       \"    <use x=\\\"735.9375\\\" xlink:href=\\\"#DejaVuSans-101\\\"/>\\n\",\n       \"    <use x=\\\"797.460938\\\" xlink:href=\\\"#DejaVuSans-108\\\"/>\\n\",\n       \"    <use x=\\\"825.244141\\\" xlink:href=\\\"#DejaVuSans-111\\\"/>\\n\",\n       \"    <use x=\\\"886.425781\\\" xlink:href=\\\"#DejaVuSans-99\\\"/>\\n\",\n       \"    <use x=\\\"941.40625\\\" xlink:href=\\\"#DejaVuSans-105\\\"/>\\n\",\n       \"    <use x=\\\"969.189453\\\" xlink:href=\\\"#DejaVuSans-116\\\"/>\\n\",\n       \"    <use x=\\\"1008.398438\\\" xlink:href=\\\"#DejaVuSans-105\\\"/>\\n\",\n       \"    <use x=\\\"1036.181641\\\" xlink:href=\\\"#DejaVuSans-101\\\"/>\\n\",\n       \"    <use x=\\\"1097.705078\\\" xlink:href=\\\"#DejaVuSans-115\\\"/>\\n\",\n       \"    <use x=\\\"1149.804688\\\" xlink:href=\\\"#DejaVuSans-46\\\"/>\\n\",\n       \"    <use x=\\\"1181.591797\\\" xlink:href=\\\"#DejaVuSans-32\\\"/>\\n\",\n       \"    <use x=\\\"1213.378906\\\" xlink:href=\\\"#DejaVuSans-84\\\"/>\\n\",\n       \"    <use x=\\\"1274.322266\\\" xlink:href=\\\"#DejaVuSans-45\\\"/>\\n\",\n       \"    <use x=\\\"1310.265625\\\" xlink:href=\\\"#DejaVuSans-84\\\"/>\\n\",\n       \"    <use x=\\\"1371.099609\\\" xlink:href=\\\"#DejaVuSans-97\\\"/>\\n\",\n       \"    <use x=\\\"1432.378906\\\" xlink:href=\\\"#DejaVuSans-105\\\"/>\\n\",\n       \"    <use x=\\\"1460.162109\\\" xlink:href=\\\"#DejaVuSans-108\\\"/>\\n\",\n       \"    <use x=\\\"1487.945312\\\" xlink:href=\\\"#DejaVuSans-32\\\"/>\\n\",\n       \"    <use x=\\\"1519.732422\\\" xlink:href=\\\"#DejaVuSans-109\\\"/>\\n\",\n       \"    <use x=\\\"1617.144531\\\" xlink:href=\\\"#DejaVuSans-111\\\"/>\\n\",\n       \"    <use x=\\\"1678.326172\\\" xlink:href=\\\"#DejaVuSans-100\\\"/>\\n\",\n       \"    <use x=\\\"1741.802734\\\" xlink:href=\\\"#DejaVuSans-101\\\"/>\\n\",\n       \"    <use x=\\\"1803.326172\\\" xlink:href=\\\"#DejaVuSans-108\\\"/>\\n\",\n       \"    <use x=\\\"1831.109375\\\" xlink:href=\\\"#DejaVuSans-32\\\"/>\\n\",\n       \"    <use x=\\\"1862.896484\\\" xlink:href=\\\"#DejaVuSans-105\\\"/>\\n\",\n       \"    <use x=\\\"1890.679688\\\" xlink:href=\\\"#DejaVuSans-110\\\"/>\\n\",\n       \"    <use x=\\\"1954.058594\\\" xlink:href=\\\"#DejaVuSans-32\\\"/>\\n\",\n       \"    <use x=\\\"1985.845703\\\" xlink:href=\\\"#DejaVuSans-97\\\"/>\\n\",\n       \"    <use x=\\\"2047.125\\\" xlink:href=\\\"#DejaVuSans-32\\\"/>\\n\",\n       \"    <use x=\\\"2078.912109\\\" xlink:href=\\\"#DejaVuSans-50\\\"/>\\n\",\n       \"    <use x=\\\"2142.535156\\\" xlink:href=\\\"#DejaVuSans-48\\\"/>\\n\",\n       \"    <use x=\\\"2206.158203\\\" xlink:href=\\\"#DejaVuSans-37\\\"/>\\n\",\n       \"    <use x=\\\"2301.177734\\\" xlink:href=\\\"#DejaVuSans-32\\\"/>\\n\",\n       \"    <use x=\\\"2332.964844\\\" xlink:href=\\\"#DejaVuSans-49\\\"/>\\n\",\n       \"    <use x=\\\"2396.587891\\\" xlink:href=\\\"#DejaVuSans-45\\\"/>\\n\",\n       \"    <use x=\\\"2432.671875\\\" xlink:href=\\\"#DejaVuSans-99\\\"/>\\n\",\n       \"    <use x=\\\"2487.652344\\\" xlink:href=\\\"#DejaVuSans-111\\\"/>\\n\",\n       \"    <use x=\\\"2548.833984\\\" xlink:href=\\\"#DejaVuSans-115\\\"/>\\n\",\n       \"    <use x=\\\"2600.933594\\\" xlink:href=\\\"#DejaVuSans-32\\\"/>\\n\",\n       \"    <use x=\\\"2632.720703\\\" xlink:href=\\\"#DejaVuSans-103\\\"/>\\n\",\n       \"    <use x=\\\"2696.197266\\\" xlink:href=\\\"#DejaVuSans-117\\\"/>\\n\",\n       \"    <use x=\\\"2759.576172\\\" xlink:href=\\\"#DejaVuSans-115\\\"/>\\n\",\n       \"    <use x=\\\"2811.675781\\\" xlink:href=\\\"#DejaVuSans-116\\\"/>\\n\",\n       \"    <use x=\\\"2850.884766\\\" xlink:href=\\\"#DejaVuSans-32\\\"/>\\n\",\n       \"    <use x=\\\"2882.671875\\\" xlink:href=\\\"#DejaVuSans-101\\\"/>\\n\",\n       \"    <use x=\\\"2944.195312\\\" xlink:href=\\\"#DejaVuSans-110\\\"/>\\n\",\n       \"    <use x=\\\"3007.574219\\\" xlink:href=\\\"#DejaVuSans-99\\\"/>\\n\",\n       \"    <use x=\\\"3062.554688\\\" xlink:href=\\\"#DejaVuSans-111\\\"/>\\n\",\n       \"    <use x=\\\"3123.736328\\\" xlink:href=\\\"#DejaVuSans-117\\\"/>\\n\",\n       \"    <use x=\\\"3187.115234\\\" xlink:href=\\\"#DejaVuSans-110\\\"/>\\n\",\n       \"    <use x=\\\"3250.494141\\\" xlink:href=\\\"#DejaVuSans-116\\\"/>\\n\",\n       \"    <use x=\\\"3289.703125\\\" xlink:href=\\\"#DejaVuSans-101\\\"/>\\n\",\n       \"    <use x=\\\"3351.226562\\\" xlink:href=\\\"#DejaVuSans-114\\\"/>\\n\",\n       \"   </g>\\n\",\n       \"  </g>\\n\",\n       \" </g>\\n\",\n       \" <defs>\\n\",\n       \"  <clipPath id=\\\"p3d5d9b0efe\\\">\\n\",\n       \"   <rect height=\\\"108.72\\\" width=\\\"390.6\\\" x=\\\"48.982813\\\" y=\\\"50.4\\\"/>\\n\",\n       \"  </clipPath>\\n\",\n       \"  <clipPath id=\\\"pe5253510b2\\\">\\n\",\n       \"   <rect height=\\\"108.72\\\" width=\\\"390.6\\\" x=\\\"48.982813\\\" y=\\\"159.12\\\"/>\\n\",\n       \"  </clipPath>\\n\",\n       \"  <clipPath id=\\\"paf502f4d96\\\">\\n\",\n       \"   <rect height=\\\"108.72\\\" width=\\\"390.6\\\" x=\\\"48.982813\\\" y=\\\"267.84\\\"/>\\n\",\n       \"  </clipPath>\\n\",\n       \" </defs>\\n\",\n       \"</svg>\\n\"\n      ],\n      \"text/plain\": [\n       \"<Figure size 504x432 with 3 Axes>\"\n      ]\n     },\n     \"metadata\": {\n      \"needs_background\": \"light\"\n     },\n     \"output_type\": \"display_data\"\n    }\n   ],\n   \"source\": [\n    \"fig, ax = plt.subplots(3, 1, figsize=(7, 6), sharex=True)\\n\",\n    \"ylabels = ['Roll rate [deg/s]', 'Pitch rate [deg/s]', 'Yaw rate [deg/s]']\\n\",\n    \"\\n\",\n    \"# extract information\\n\",\n    \"n_tsteps = len(case_data.structure.timestep_info)\\n\",\n    \"dt = case_data.settings['DynamicCoupled']['dt']\\n\",\n    \"time_vec = np.linspace(0, n_tsteps*dt, n_tsteps)\\n\",\n    \"for_vel = np.zeros((n_tsteps, 3))\\n\",\n    \"for it in range(n_tsteps):\\n\",\n    \"    for_vel[it, 0:3] = case_data.structure.timestep_info[it].for_vel[3:6]*180/np.pi\\n\",\n    \"    \\n\",\n    \"for idim in range(3):\\n\",\n    \"    ax[idim].plot(time_vec, for_vel[:, idim])\\n\",\n    \"    ax[idim].set_ylabel(ylabels[idim])\\n\",\n    \"    \\n\",\n    \"ax[2].set_xlabel('time [s]')\\n\",\n    \"plt.subplots_adjust(hspace=0)\\n\",\n    \"fig.suptitle('Angular RBM velocities. T-Tail model in a 20% 1-cos gust encounter');\\n\",\n    \"# ax.set_xlabel('X [m]')\\n\",\n    \"# ax.set_ylabel('Z [m]');\\n\",\n    \"plt.show()\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"*Wing tip deformation*\\n\",\n    \"\\n\",\n    \"It is stored in `timestep_info` as `pos`. We need to find the correct node.\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 13,\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"name\": \"stdout\",\n     \"output_type\": \"stream\",\n     \"text\": [\n      \"Wing tip node is the maximum Y one:  16\\n\"\n     ]\n    },\n    {\n     \"data\": {\n      \"image/svg+xml\": [\n       \"<?xml version=\\\"1.0\\\" encoding=\\\"utf-8\\\" standalone=\\\"no\\\"?>\\n\",\n       \"<!DOCTYPE svg PUBLIC \\\"-//W3C//DTD SVG 1.1//EN\\\"\\n\",\n       \"  \\\"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\\\">\\n\",\n       \"<!-- Created with matplotlib (https://matplotlib.org/) -->\\n\",\n       \"<svg height=\\\"357.238125pt\\\" version=\\\"1.1\\\" viewBox=\\\"0 0 377.304687 357.238125\\\" width=\\\"377.304687pt\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\" xmlns:xlink=\\\"http://www.w3.org/1999/xlink\\\">\\n\",\n       \" <defs>\\n\",\n       \"  <style type=\\\"text/css\\\">\\n\",\n       \"*{stroke-linecap:butt;stroke-linejoin:round;}\\n\",\n       \"  </style>\\n\",\n       \" </defs>\\n\",\n       \" <g id=\\\"figure_1\\\">\\n\",\n       \"  <g id=\\\"patch_1\\\">\\n\",\n       \"   <path d=\\\"M 0 357.238125 \\n\",\n       \"L 377.304687 357.238125 \\n\",\n       \"L 377.304687 0 \\n\",\n       \"L 0 0 \\n\",\n       \"z\\n\",\n       \"\\\" style=\\\"fill:none;\\\"/>\\n\",\n       \"  </g>\\n\",\n       \"  <g id=\\\"axes_1\\\">\\n\",\n       \"   <g id=\\\"patch_2\\\">\\n\",\n       \"    <path d=\\\"M 35.304688 333.36 \\n\",\n       \"L 370.104688 333.36 \\n\",\n       \"L 370.104688 7.2 \\n\",\n       \"L 35.304688 7.2 \\n\",\n       \"z\\n\",\n       \"\\\" style=\\\"fill:#ffffff;\\\"/>\\n\",\n       \"   </g>\\n\",\n       \"   <g id=\\\"PathCollection_1\\\">\\n\",\n       \"    <defs>\\n\",\n       \"     <path d=\\\"M 0 3 \\n\",\n       \"C 0.795609 3 1.55874 2.683901 2.12132 2.12132 \\n\",\n       \"C 2.683901 1.55874 3 0.795609 3 0 \\n\",\n       \"C 3 -0.795609 2.683901 -1.55874 2.12132 -2.12132 \\n\",\n       \"C 1.55874 -2.683901 0.795609 -3 0 -3 \\n\",\n       \"C -0.795609 -3 -1.55874 -2.683901 -2.12132 -2.12132 \\n\",\n       \"C -2.683901 -1.55874 -3 -0.795609 -3 0 \\n\",\n       \"C -3 0.795609 -2.683901 1.55874 -2.12132 2.12132 \\n\",\n       \"C -1.55874 2.683901 -0.795609 3 0 3 \\n\",\n       \"z\\n\",\n       \"\\\" id=\\\"m09b2c4ce55\\\" style=\\\"stroke:#1f77b4;\\\"/>\\n\",\n       \"    </defs>\\n\",\n       \"    <g clip-path=\\\"url(#pf00a2a4f93)\\\">\\n\",\n       \"     <use style=\\\"fill:#1f77b4;stroke:#1f77b4;\\\" x=\\\"156.568798\\\" xlink:href=\\\"#m09b2c4ce55\\\" y=\\\"171.722584\\\"/>\\n\",\n       \"     <use style=\\\"fill:#1f77b4;stroke:#1f77b4;\\\" x=\\\"156.568798\\\" xlink:href=\\\"#m09b2c4ce55\\\" y=\\\"162.411812\\\"/>\\n\",\n       \"     <use style=\\\"fill:#1f77b4;stroke:#1f77b4;\\\" x=\\\"156.568798\\\" xlink:href=\\\"#m09b2c4ce55\\\" y=\\\"153.10104\\\"/>\\n\",\n       \"     <use style=\\\"fill:#1f77b4;stroke:#1f77b4;\\\" x=\\\"156.568798\\\" xlink:href=\\\"#m09b2c4ce55\\\" y=\\\"143.790268\\\"/>\\n\",\n       \"     <use style=\\\"fill:#1f77b4;stroke:#1f77b4;\\\" x=\\\"156.568798\\\" xlink:href=\\\"#m09b2c4ce55\\\" y=\\\"134.479496\\\"/>\\n\",\n       \"     <use style=\\\"fill:#1f77b4;stroke:#1f77b4;\\\" x=\\\"156.568798\\\" xlink:href=\\\"#m09b2c4ce55\\\" y=\\\"125.168724\\\"/>\\n\",\n       \"     <use style=\\\"fill:#1f77b4;stroke:#1f77b4;\\\" x=\\\"156.568798\\\" xlink:href=\\\"#m09b2c4ce55\\\" y=\\\"115.857952\\\"/>\\n\",\n       \"     <use style=\\\"fill:#1f77b4;stroke:#1f77b4;\\\" x=\\\"156.568798\\\" xlink:href=\\\"#m09b2c4ce55\\\" y=\\\"106.547179\\\"/>\\n\",\n       \"     <use style=\\\"fill:#1f77b4;stroke:#1f77b4;\\\" x=\\\"156.568798\\\" xlink:href=\\\"#m09b2c4ce55\\\" y=\\\"97.236407\\\"/>\\n\",\n       \"     <use style=\\\"fill:#1f77b4;stroke:#1f77b4;\\\" x=\\\"156.568798\\\" xlink:href=\\\"#m09b2c4ce55\\\" y=\\\"87.925635\\\"/>\\n\",\n       \"     <use style=\\\"fill:#1f77b4;stroke:#1f77b4;\\\" x=\\\"156.568798\\\" xlink:href=\\\"#m09b2c4ce55\\\" y=\\\"78.614863\\\"/>\\n\",\n       \"     <use style=\\\"fill:#1f77b4;stroke:#1f77b4;\\\" x=\\\"156.568798\\\" xlink:href=\\\"#m09b2c4ce55\\\" y=\\\"69.304091\\\"/>\\n\",\n       \"     <use style=\\\"fill:#1f77b4;stroke:#1f77b4;\\\" x=\\\"156.568798\\\" xlink:href=\\\"#m09b2c4ce55\\\" y=\\\"59.993319\\\"/>\\n\",\n       \"     <use style=\\\"fill:#1f77b4;stroke:#1f77b4;\\\" x=\\\"156.568798\\\" xlink:href=\\\"#m09b2c4ce55\\\" y=\\\"51.244055\\\"/>\\n\",\n       \"     <use style=\\\"fill:#1f77b4;stroke:#1f77b4;\\\" x=\\\"156.568798\\\" xlink:href=\\\"#m09b2c4ce55\\\" y=\\\"42.494791\\\"/>\\n\",\n       \"     <use style=\\\"fill:#1f77b4;stroke:#1f77b4;\\\" x=\\\"156.568798\\\" xlink:href=\\\"#m09b2c4ce55\\\" y=\\\"33.745527\\\"/>\\n\",\n       \"     <use style=\\\"fill:#1f77b4;stroke:#1f77b4;\\\" x=\\\"156.568798\\\" xlink:href=\\\"#m09b2c4ce55\\\" y=\\\"24.996263\\\"/>\\n\",\n       \"     <use style=\\\"fill:#1f77b4;stroke:#1f77b4;\\\" x=\\\"156.568798\\\" xlink:href=\\\"#m09b2c4ce55\\\" y=\\\"181.033356\\\"/>\\n\",\n       \"     <use style=\\\"fill:#1f77b4;stroke:#1f77b4;\\\" x=\\\"156.568798\\\" xlink:href=\\\"#m09b2c4ce55\\\" y=\\\"190.344129\\\"/>\\n\",\n       \"     <use style=\\\"fill:#1f77b4;stroke:#1f77b4;\\\" x=\\\"156.568798\\\" xlink:href=\\\"#m09b2c4ce55\\\" y=\\\"199.654901\\\"/>\\n\",\n       \"     <use style=\\\"fill:#1f77b4;stroke:#1f77b4;\\\" x=\\\"156.568798\\\" xlink:href=\\\"#m09b2c4ce55\\\" y=\\\"208.965673\\\"/>\\n\",\n       \"     <use style=\\\"fill:#1f77b4;stroke:#1f77b4;\\\" x=\\\"156.568798\\\" xlink:href=\\\"#m09b2c4ce55\\\" y=\\\"218.276445\\\"/>\\n\",\n       \"     <use style=\\\"fill:#1f77b4;stroke:#1f77b4;\\\" x=\\\"156.568798\\\" xlink:href=\\\"#m09b2c4ce55\\\" y=\\\"227.587217\\\"/>\\n\",\n       \"     <use style=\\\"fill:#1f77b4;stroke:#1f77b4;\\\" x=\\\"156.568798\\\" xlink:href=\\\"#m09b2c4ce55\\\" y=\\\"236.897989\\\"/>\\n\",\n       \"     <use style=\\\"fill:#1f77b4;stroke:#1f77b4;\\\" x=\\\"156.568798\\\" xlink:href=\\\"#m09b2c4ce55\\\" y=\\\"246.208761\\\"/>\\n\",\n       \"     <use style=\\\"fill:#1f77b4;stroke:#1f77b4;\\\" x=\\\"156.568798\\\" xlink:href=\\\"#m09b2c4ce55\\\" y=\\\"255.519534\\\"/>\\n\",\n       \"     <use style=\\\"fill:#1f77b4;stroke:#1f77b4;\\\" x=\\\"156.568798\\\" xlink:href=\\\"#m09b2c4ce55\\\" y=\\\"264.830306\\\"/>\\n\",\n       \"     <use style=\\\"fill:#1f77b4;stroke:#1f77b4;\\\" x=\\\"156.568798\\\" xlink:href=\\\"#m09b2c4ce55\\\" y=\\\"274.141078\\\"/>\\n\",\n       \"     <use style=\\\"fill:#1f77b4;stroke:#1f77b4;\\\" x=\\\"156.568798\\\" xlink:href=\\\"#m09b2c4ce55\\\" y=\\\"283.45185\\\"/>\\n\",\n       \"     <use style=\\\"fill:#1f77b4;stroke:#1f77b4;\\\" x=\\\"156.568798\\\" xlink:href=\\\"#m09b2c4ce55\\\" y=\\\"292.201114\\\"/>\\n\",\n       \"     <use style=\\\"fill:#1f77b4;stroke:#1f77b4;\\\" x=\\\"156.568798\\\" xlink:href=\\\"#m09b2c4ce55\\\" y=\\\"300.950378\\\"/>\\n\",\n       \"     <use style=\\\"fill:#1f77b4;stroke:#1f77b4;\\\" x=\\\"156.568798\\\" xlink:href=\\\"#m09b2c4ce55\\\" y=\\\"309.699642\\\"/>\\n\",\n       \"     <use style=\\\"fill:#1f77b4;stroke:#1f77b4;\\\" x=\\\"156.568798\\\" xlink:href=\\\"#m09b2c4ce55\\\" y=\\\"318.448906\\\"/>\\n\",\n       \"     <use style=\\\"fill:#1f77b4;stroke:#1f77b4;\\\" x=\\\"168.207264\\\" xlink:href=\\\"#m09b2c4ce55\\\" y=\\\"171.722584\\\"/>\\n\",\n       \"     <use style=\\\"fill:#1f77b4;stroke:#1f77b4;\\\" x=\\\"179.845729\\\" xlink:href=\\\"#m09b2c4ce55\\\" y=\\\"171.722584\\\"/>\\n\",\n       \"     <use style=\\\"fill:#1f77b4;stroke:#1f77b4;\\\" x=\\\"191.484194\\\" xlink:href=\\\"#m09b2c4ce55\\\" y=\\\"171.722584\\\"/>\\n\",\n       \"     <use style=\\\"fill:#1f77b4;stroke:#1f77b4;\\\" x=\\\"203.122659\\\" xlink:href=\\\"#m09b2c4ce55\\\" y=\\\"171.722584\\\"/>\\n\",\n       \"     <use style=\\\"fill:#1f77b4;stroke:#1f77b4;\\\" x=\\\"214.761124\\\" xlink:href=\\\"#m09b2c4ce55\\\" y=\\\"171.722584\\\"/>\\n\",\n       \"     <use style=\\\"fill:#1f77b4;stroke:#1f77b4;\\\" x=\\\"226.399589\\\" xlink:href=\\\"#m09b2c4ce55\\\" y=\\\"171.722584\\\"/>\\n\",\n       \"     <use style=\\\"fill:#1f77b4;stroke:#1f77b4;\\\" x=\\\"238.038055\\\" xlink:href=\\\"#m09b2c4ce55\\\" y=\\\"171.722584\\\"/>\\n\",\n       \"     <use style=\\\"fill:#1f77b4;stroke:#1f77b4;\\\" x=\\\"249.67652\\\" xlink:href=\\\"#m09b2c4ce55\\\" y=\\\"171.722584\\\"/>\\n\",\n       \"     <use style=\\\"fill:#1f77b4;stroke:#1f77b4;\\\" x=\\\"249.67652\\\" xlink:href=\\\"#m09b2c4ce55\\\" y=\\\"171.722584\\\"/>\\n\",\n       \"     <use style=\\\"fill:#1f77b4;stroke:#1f77b4;\\\" x=\\\"249.67652\\\" xlink:href=\\\"#m09b2c4ce55\\\" y=\\\"171.722584\\\"/>\\n\",\n       \"     <use style=\\\"fill:#1f77b4;stroke:#1f77b4;\\\" x=\\\"249.67652\\\" xlink:href=\\\"#m09b2c4ce55\\\" y=\\\"171.722584\\\"/>\\n\",\n       \"     <use style=\\\"fill:#1f77b4;stroke:#1f77b4;\\\" x=\\\"249.67652\\\" xlink:href=\\\"#m09b2c4ce55\\\" y=\\\"171.722584\\\"/>\\n\",\n       \"     <use style=\\\"fill:#1f77b4;stroke:#1f77b4;\\\" x=\\\"249.67652\\\" xlink:href=\\\"#m09b2c4ce55\\\" y=\\\"171.722584\\\"/>\\n\",\n       \"     <use style=\\\"fill:#1f77b4;stroke:#1f77b4;\\\" x=\\\"249.67652\\\" xlink:href=\\\"#m09b2c4ce55\\\" y=\\\"171.722584\\\"/>\\n\",\n       \"     <use style=\\\"fill:#1f77b4;stroke:#1f77b4;\\\" x=\\\"249.67652\\\" xlink:href=\\\"#m09b2c4ce55\\\" y=\\\"171.722584\\\"/>\\n\",\n       \"     <use style=\\\"fill:#1f77b4;stroke:#1f77b4;\\\" x=\\\"249.67652\\\" xlink:href=\\\"#m09b2c4ce55\\\" y=\\\"171.722584\\\"/>\\n\",\n       \"     <use style=\\\"fill:#1f77b4;stroke:#1f77b4;\\\" x=\\\"249.67652\\\" xlink:href=\\\"#m09b2c4ce55\\\" y=\\\"168.812968\\\"/>\\n\",\n       \"     <use style=\\\"fill:#1f77b4;stroke:#1f77b4;\\\" x=\\\"249.67652\\\" xlink:href=\\\"#m09b2c4ce55\\\" y=\\\"165.903352\\\"/>\\n\",\n       \"     <use style=\\\"fill:#1f77b4;stroke:#1f77b4;\\\" x=\\\"249.67652\\\" xlink:href=\\\"#m09b2c4ce55\\\" y=\\\"162.993735\\\"/>\\n\",\n       \"     <use style=\\\"fill:#1f77b4;stroke:#1f77b4;\\\" x=\\\"249.67652\\\" xlink:href=\\\"#m09b2c4ce55\\\" y=\\\"160.084119\\\"/>\\n\",\n       \"     <use style=\\\"fill:#1f77b4;stroke:#1f77b4;\\\" x=\\\"249.67652\\\" xlink:href=\\\"#m09b2c4ce55\\\" y=\\\"157.174503\\\"/>\\n\",\n       \"     <use style=\\\"fill:#1f77b4;stroke:#1f77b4;\\\" x=\\\"249.67652\\\" xlink:href=\\\"#m09b2c4ce55\\\" y=\\\"154.264887\\\"/>\\n\",\n       \"     <use style=\\\"fill:#1f77b4;stroke:#1f77b4;\\\" x=\\\"249.67652\\\" xlink:href=\\\"#m09b2c4ce55\\\" y=\\\"151.35527\\\"/>\\n\",\n       \"     <use style=\\\"fill:#1f77b4;stroke:#1f77b4;\\\" x=\\\"249.67652\\\" xlink:href=\\\"#m09b2c4ce55\\\" y=\\\"148.445654\\\"/>\\n\",\n       \"     <use style=\\\"fill:#1f77b4;stroke:#1f77b4;\\\" x=\\\"249.67652\\\" xlink:href=\\\"#m09b2c4ce55\\\" y=\\\"174.632201\\\"/>\\n\",\n       \"     <use style=\\\"fill:#1f77b4;stroke:#1f77b4;\\\" x=\\\"249.67652\\\" xlink:href=\\\"#m09b2c4ce55\\\" y=\\\"177.541817\\\"/>\\n\",\n       \"     <use style=\\\"fill:#1f77b4;stroke:#1f77b4;\\\" x=\\\"249.67652\\\" xlink:href=\\\"#m09b2c4ce55\\\" y=\\\"180.451433\\\"/>\\n\",\n       \"     <use style=\\\"fill:#1f77b4;stroke:#1f77b4;\\\" x=\\\"249.67652\\\" xlink:href=\\\"#m09b2c4ce55\\\" y=\\\"183.36105\\\"/>\\n\",\n       \"     <use style=\\\"fill:#1f77b4;stroke:#1f77b4;\\\" x=\\\"249.67652\\\" xlink:href=\\\"#m09b2c4ce55\\\" y=\\\"186.270666\\\"/>\\n\",\n       \"     <use style=\\\"fill:#1f77b4;stroke:#1f77b4;\\\" x=\\\"249.67652\\\" xlink:href=\\\"#m09b2c4ce55\\\" y=\\\"189.180282\\\"/>\\n\",\n       \"     <use style=\\\"fill:#1f77b4;stroke:#1f77b4;\\\" x=\\\"249.67652\\\" xlink:href=\\\"#m09b2c4ce55\\\" y=\\\"192.089898\\\"/>\\n\",\n       \"     <use style=\\\"fill:#1f77b4;stroke:#1f77b4;\\\" x=\\\"249.67652\\\" xlink:href=\\\"#m09b2c4ce55\\\" y=\\\"194.999515\\\"/>\\n\",\n       \"    </g>\\n\",\n       \"   </g>\\n\",\n       \"   <g id=\\\"PathCollection_2\\\">\\n\",\n       \"    <defs>\\n\",\n       \"     <path d=\\\"M 0 3 \\n\",\n       \"C 0.795609 3 1.55874 2.683901 2.12132 2.12132 \\n\",\n       \"C 2.683901 1.55874 3 0.795609 3 0 \\n\",\n       \"C 3 -0.795609 2.683901 -1.55874 2.12132 -2.12132 \\n\",\n       \"C 1.55874 -2.683901 0.795609 -3 0 -3 \\n\",\n       \"C -0.795609 -3 -1.55874 -2.683901 -2.12132 -2.12132 \\n\",\n       \"C -2.683901 -1.55874 -3 -0.795609 -3 0 \\n\",\n       \"C -3 0.795609 -2.683901 1.55874 -2.12132 2.12132 \\n\",\n       \"C -1.55874 2.683901 -0.795609 3 0 3 \\n\",\n       \"z\\n\",\n       \"\\\" id=\\\"m1737c6c3f1\\\" style=\\\"stroke:#ff0000;\\\"/>\\n\",\n       \"    </defs>\\n\",\n       \"    <g clip-path=\\\"url(#pf00a2a4f93)\\\">\\n\",\n       \"     <use style=\\\"fill:#ff0000;stroke:#ff0000;\\\" x=\\\"156.568798\\\" xlink:href=\\\"#m1737c6c3f1\\\" y=\\\"24.996263\\\"/>\\n\",\n       \"    </g>\\n\",\n       \"   </g>\\n\",\n       \"   <g id=\\\"matplotlib.axis_1\\\">\\n\",\n       \"    <g id=\\\"xtick_1\\\">\\n\",\n       \"     <g id=\\\"line2d_1\\\">\\n\",\n       \"      <defs>\\n\",\n       \"       <path d=\\\"M 0 0 \\n\",\n       \"L 0 3.5 \\n\",\n       \"\\\" id=\\\"md06f0c660e\\\" style=\\\"stroke:#000000;stroke-width:0.8;\\\"/>\\n\",\n       \"      </defs>\\n\",\n       \"      <g>\\n\",\n       \"       <use style=\\\"stroke:#000000;stroke-width:0.8;\\\" x=\\\"63.461077\\\" xlink:href=\\\"#md06f0c660e\\\" y=\\\"333.36\\\"/>\\n\",\n       \"      </g>\\n\",\n       \"     </g>\\n\",\n       \"     <g id=\\\"text_1\\\">\\n\",\n       \"      <!-- −10 -->\\n\",\n       \"      <defs>\\n\",\n       \"       <path d=\\\"M 10.59375 35.5 \\n\",\n       \"L 73.1875 35.5 \\n\",\n       \"L 73.1875 27.203125 \\n\",\n       \"L 10.59375 27.203125 \\n\",\n       \"z\\n\",\n       \"\\\" id=\\\"DejaVuSans-8722\\\"/>\\n\",\n       \"       <path d=\\\"M 12.40625 8.296875 \\n\",\n       \"L 28.515625 8.296875 \\n\",\n       \"L 28.515625 63.921875 \\n\",\n       \"L 10.984375 60.40625 \\n\",\n       \"L 10.984375 69.390625 \\n\",\n       \"L 28.421875 72.90625 \\n\",\n       \"L 38.28125 72.90625 \\n\",\n       \"L 38.28125 8.296875 \\n\",\n       \"L 54.390625 8.296875 \\n\",\n       \"L 54.390625 0 \\n\",\n       \"L 12.40625 0 \\n\",\n       \"z\\n\",\n       \"\\\" id=\\\"DejaVuSans-49\\\"/>\\n\",\n       \"       <path d=\\\"M 31.78125 66.40625 \\n\",\n       \"Q 24.171875 66.40625 20.328125 58.90625 \\n\",\n       \"Q 16.5 51.421875 16.5 36.375 \\n\",\n       \"Q 16.5 21.390625 20.328125 13.890625 \\n\",\n       \"Q 24.171875 6.390625 31.78125 6.390625 \\n\",\n       \"Q 39.453125 6.390625 43.28125 13.890625 \\n\",\n       \"Q 47.125 21.390625 47.125 36.375 \\n\",\n       \"Q 47.125 51.421875 43.28125 58.90625 \\n\",\n       \"Q 39.453125 66.40625 31.78125 66.40625 \\n\",\n       \"z\\n\",\n       \"M 31.78125 74.21875 \\n\",\n       \"Q 44.046875 74.21875 50.515625 64.515625 \\n\",\n       \"Q 56.984375 54.828125 56.984375 36.375 \\n\",\n       \"Q 56.984375 17.96875 50.515625 8.265625 \\n\",\n       \"Q 44.046875 -1.421875 31.78125 -1.421875 \\n\",\n       \"Q 19.53125 -1.421875 13.0625 8.265625 \\n\",\n       \"Q 6.59375 17.96875 6.59375 36.375 \\n\",\n       \"Q 6.59375 54.828125 13.0625 64.515625 \\n\",\n       \"Q 19.53125 74.21875 31.78125 74.21875 \\n\",\n       \"z\\n\",\n       \"\\\" id=\\\"DejaVuSans-48\\\"/>\\n\",\n       \"      </defs>\\n\",\n       \"      <g transform=\\\"translate(52.908733 347.958438)scale(0.1 -0.1)\\\">\\n\",\n       \"       <use xlink:href=\\\"#DejaVuSans-8722\\\"/>\\n\",\n       \"       <use x=\\\"83.789062\\\" xlink:href=\\\"#DejaVuSans-49\\\"/>\\n\",\n       \"       <use x=\\\"147.412109\\\" xlink:href=\\\"#DejaVuSans-48\\\"/>\\n\",\n       \"      </g>\\n\",\n       \"     </g>\\n\",\n       \"    </g>\\n\",\n       \"    <g id=\\\"xtick_2\\\">\\n\",\n       \"     <g id=\\\"line2d_2\\\">\\n\",\n       \"      <g>\\n\",\n       \"       <use style=\\\"stroke:#000000;stroke-width:0.8;\\\" x=\\\"110.014938\\\" xlink:href=\\\"#md06f0c660e\\\" y=\\\"333.36\\\"/>\\n\",\n       \"      </g>\\n\",\n       \"     </g>\\n\",\n       \"     <g id=\\\"text_2\\\">\\n\",\n       \"      <!-- −5 -->\\n\",\n       \"      <defs>\\n\",\n       \"       <path d=\\\"M 10.796875 72.90625 \\n\",\n       \"L 49.515625 72.90625 \\n\",\n       \"L 49.515625 64.59375 \\n\",\n       \"L 19.828125 64.59375 \\n\",\n       \"L 19.828125 46.734375 \\n\",\n       \"Q 21.96875 47.46875 24.109375 47.828125 \\n\",\n       \"Q 26.265625 48.1875 28.421875 48.1875 \\n\",\n       \"Q 40.625 48.1875 47.75 41.5 \\n\",\n       \"Q 54.890625 34.8125 54.890625 23.390625 \\n\",\n       \"Q 54.890625 11.625 47.5625 5.09375 \\n\",\n       \"Q 40.234375 -1.421875 26.90625 -1.421875 \\n\",\n       \"Q 22.3125 -1.421875 17.546875 -0.640625 \\n\",\n       \"Q 12.796875 0.140625 7.71875 1.703125 \\n\",\n       \"L 7.71875 11.625 \\n\",\n       \"Q 12.109375 9.234375 16.796875 8.0625 \\n\",\n       \"Q 21.484375 6.890625 26.703125 6.890625 \\n\",\n       \"Q 35.15625 6.890625 40.078125 11.328125 \\n\",\n       \"Q 45.015625 15.765625 45.015625 23.390625 \\n\",\n       \"Q 45.015625 31 40.078125 35.4375 \\n\",\n       \"Q 35.15625 39.890625 26.703125 39.890625 \\n\",\n       \"Q 22.75 39.890625 18.8125 39.015625 \\n\",\n       \"Q 14.890625 38.140625 10.796875 36.28125 \\n\",\n       \"z\\n\",\n       \"\\\" id=\\\"DejaVuSans-53\\\"/>\\n\",\n       \"      </defs>\\n\",\n       \"      <g transform=\\\"translate(102.643844 347.958438)scale(0.1 -0.1)\\\">\\n\",\n       \"       <use xlink:href=\\\"#DejaVuSans-8722\\\"/>\\n\",\n       \"       <use x=\\\"83.789062\\\" xlink:href=\\\"#DejaVuSans-53\\\"/>\\n\",\n       \"      </g>\\n\",\n       \"     </g>\\n\",\n       \"    </g>\\n\",\n       \"    <g id=\\\"xtick_3\\\">\\n\",\n       \"     <g id=\\\"line2d_3\\\">\\n\",\n       \"      <g>\\n\",\n       \"       <use style=\\\"stroke:#000000;stroke-width:0.8;\\\" x=\\\"156.568798\\\" xlink:href=\\\"#md06f0c660e\\\" y=\\\"333.36\\\"/>\\n\",\n       \"      </g>\\n\",\n       \"     </g>\\n\",\n       \"     <g id=\\\"text_3\\\">\\n\",\n       \"      <!-- 0 -->\\n\",\n       \"      <g transform=\\\"translate(153.387548 347.958438)scale(0.1 -0.1)\\\">\\n\",\n       \"       <use xlink:href=\\\"#DejaVuSans-48\\\"/>\\n\",\n       \"      </g>\\n\",\n       \"     </g>\\n\",\n       \"    </g>\\n\",\n       \"    <g id=\\\"xtick_4\\\">\\n\",\n       \"     <g id=\\\"line2d_4\\\">\\n\",\n       \"      <g>\\n\",\n       \"       <use style=\\\"stroke:#000000;stroke-width:0.8;\\\" x=\\\"203.122659\\\" xlink:href=\\\"#md06f0c660e\\\" y=\\\"333.36\\\"/>\\n\",\n       \"      </g>\\n\",\n       \"     </g>\\n\",\n       \"     <g id=\\\"text_4\\\">\\n\",\n       \"      <!-- 5 -->\\n\",\n       \"      <g transform=\\\"translate(199.941409 347.958438)scale(0.1 -0.1)\\\">\\n\",\n       \"       <use xlink:href=\\\"#DejaVuSans-53\\\"/>\\n\",\n       \"      </g>\\n\",\n       \"     </g>\\n\",\n       \"    </g>\\n\",\n       \"    <g id=\\\"xtick_5\\\">\\n\",\n       \"     <g id=\\\"line2d_5\\\">\\n\",\n       \"      <g>\\n\",\n       \"       <use style=\\\"stroke:#000000;stroke-width:0.8;\\\" x=\\\"249.67652\\\" xlink:href=\\\"#md06f0c660e\\\" y=\\\"333.36\\\"/>\\n\",\n       \"      </g>\\n\",\n       \"     </g>\\n\",\n       \"     <g id=\\\"text_5\\\">\\n\",\n       \"      <!-- 10 -->\\n\",\n       \"      <g transform=\\\"translate(243.31402 347.958438)scale(0.1 -0.1)\\\">\\n\",\n       \"       <use xlink:href=\\\"#DejaVuSans-49\\\"/>\\n\",\n       \"       <use x=\\\"63.623047\\\" xlink:href=\\\"#DejaVuSans-48\\\"/>\\n\",\n       \"      </g>\\n\",\n       \"     </g>\\n\",\n       \"    </g>\\n\",\n       \"    <g id=\\\"xtick_6\\\">\\n\",\n       \"     <g id=\\\"line2d_6\\\">\\n\",\n       \"      <g>\\n\",\n       \"       <use style=\\\"stroke:#000000;stroke-width:0.8;\\\" x=\\\"296.230381\\\" xlink:href=\\\"#md06f0c660e\\\" y=\\\"333.36\\\"/>\\n\",\n       \"      </g>\\n\",\n       \"     </g>\\n\",\n       \"     <g id=\\\"text_6\\\">\\n\",\n       \"      <!-- 15 -->\\n\",\n       \"      <g transform=\\\"translate(289.867881 347.958438)scale(0.1 -0.1)\\\">\\n\",\n       \"       <use xlink:href=\\\"#DejaVuSans-49\\\"/>\\n\",\n       \"       <use x=\\\"63.623047\\\" xlink:href=\\\"#DejaVuSans-53\\\"/>\\n\",\n       \"      </g>\\n\",\n       \"     </g>\\n\",\n       \"    </g>\\n\",\n       \"    <g id=\\\"xtick_7\\\">\\n\",\n       \"     <g id=\\\"line2d_7\\\">\\n\",\n       \"      <g>\\n\",\n       \"       <use style=\\\"stroke:#000000;stroke-width:0.8;\\\" x=\\\"342.784241\\\" xlink:href=\\\"#md06f0c660e\\\" y=\\\"333.36\\\"/>\\n\",\n       \"      </g>\\n\",\n       \"     </g>\\n\",\n       \"     <g id=\\\"text_7\\\">\\n\",\n       \"      <!-- 20 -->\\n\",\n       \"      <defs>\\n\",\n       \"       <path d=\\\"M 19.1875 8.296875 \\n\",\n       \"L 53.609375 8.296875 \\n\",\n       \"L 53.609375 0 \\n\",\n       \"L 7.328125 0 \\n\",\n       \"L 7.328125 8.296875 \\n\",\n       \"Q 12.9375 14.109375 22.625 23.890625 \\n\",\n       \"Q 32.328125 33.6875 34.8125 36.53125 \\n\",\n       \"Q 39.546875 41.84375 41.421875 45.53125 \\n\",\n       \"Q 43.3125 49.21875 43.3125 52.78125 \\n\",\n       \"Q 43.3125 58.59375 39.234375 62.25 \\n\",\n       \"Q 35.15625 65.921875 28.609375 65.921875 \\n\",\n       \"Q 23.96875 65.921875 18.8125 64.3125 \\n\",\n       \"Q 13.671875 62.703125 7.8125 59.421875 \\n\",\n       \"L 7.8125 69.390625 \\n\",\n       \"Q 13.765625 71.78125 18.9375 73 \\n\",\n       \"Q 24.125 74.21875 28.421875 74.21875 \\n\",\n       \"Q 39.75 74.21875 46.484375 68.546875 \\n\",\n       \"Q 53.21875 62.890625 53.21875 53.421875 \\n\",\n       \"Q 53.21875 48.921875 51.53125 44.890625 \\n\",\n       \"Q 49.859375 40.875 45.40625 35.40625 \\n\",\n       \"Q 44.1875 33.984375 37.640625 27.21875 \\n\",\n       \"Q 31.109375 20.453125 19.1875 8.296875 \\n\",\n       \"z\\n\",\n       \"\\\" id=\\\"DejaVuSans-50\\\"/>\\n\",\n       \"      </defs>\\n\",\n       \"      <g transform=\\\"translate(336.421741 347.958438)scale(0.1 -0.1)\\\">\\n\",\n       \"       <use xlink:href=\\\"#DejaVuSans-50\\\"/>\\n\",\n       \"       <use x=\\\"63.623047\\\" xlink:href=\\\"#DejaVuSans-48\\\"/>\\n\",\n       \"      </g>\\n\",\n       \"     </g>\\n\",\n       \"    </g>\\n\",\n       \"   </g>\\n\",\n       \"   <g id=\\\"matplotlib.axis_2\\\">\\n\",\n       \"    <g id=\\\"ytick_1\\\">\\n\",\n       \"     <g id=\\\"line2d_8\\\">\\n\",\n       \"      <defs>\\n\",\n       \"       <path d=\\\"M 0 0 \\n\",\n       \"L -3.5 0 \\n\",\n       \"\\\" id=\\\"mc34abf2f2a\\\" style=\\\"stroke:#000000;stroke-width:0.8;\\\"/>\\n\",\n       \"      </defs>\\n\",\n       \"      <g>\\n\",\n       \"       <use style=\\\"stroke:#000000;stroke-width:0.8;\\\" x=\\\"35.304688\\\" xlink:href=\\\"#mc34abf2f2a\\\" y=\\\"311.384166\\\"/>\\n\",\n       \"      </g>\\n\",\n       \"     </g>\\n\",\n       \"     <g id=\\\"text_8\\\">\\n\",\n       \"      <!-- −15 -->\\n\",\n       \"      <g transform=\\\"translate(7.2 315.183385)scale(0.1 -0.1)\\\">\\n\",\n       \"       <use xlink:href=\\\"#DejaVuSans-8722\\\"/>\\n\",\n       \"       <use x=\\\"83.789062\\\" xlink:href=\\\"#DejaVuSans-49\\\"/>\\n\",\n       \"       <use x=\\\"147.412109\\\" xlink:href=\\\"#DejaVuSans-53\\\"/>\\n\",\n       \"      </g>\\n\",\n       \"     </g>\\n\",\n       \"    </g>\\n\",\n       \"    <g id=\\\"ytick_2\\\">\\n\",\n       \"     <g id=\\\"line2d_9\\\">\\n\",\n       \"      <g>\\n\",\n       \"       <use style=\\\"stroke:#000000;stroke-width:0.8;\\\" x=\\\"35.304688\\\" xlink:href=\\\"#mc34abf2f2a\\\" y=\\\"264.830306\\\"/>\\n\",\n       \"      </g>\\n\",\n       \"     </g>\\n\",\n       \"     <g id=\\\"text_9\\\">\\n\",\n       \"      <!-- −10 -->\\n\",\n       \"      <g transform=\\\"translate(7.2 268.629525)scale(0.1 -0.1)\\\">\\n\",\n       \"       <use xlink:href=\\\"#DejaVuSans-8722\\\"/>\\n\",\n       \"       <use x=\\\"83.789062\\\" xlink:href=\\\"#DejaVuSans-49\\\"/>\\n\",\n       \"       <use x=\\\"147.412109\\\" xlink:href=\\\"#DejaVuSans-48\\\"/>\\n\",\n       \"      </g>\\n\",\n       \"     </g>\\n\",\n       \"    </g>\\n\",\n       \"    <g id=\\\"ytick_3\\\">\\n\",\n       \"     <g id=\\\"line2d_10\\\">\\n\",\n       \"      <g>\\n\",\n       \"       <use style=\\\"stroke:#000000;stroke-width:0.8;\\\" x=\\\"35.304688\\\" xlink:href=\\\"#mc34abf2f2a\\\" y=\\\"218.276445\\\"/>\\n\",\n       \"      </g>\\n\",\n       \"     </g>\\n\",\n       \"     <g id=\\\"text_10\\\">\\n\",\n       \"      <!-- −5 -->\\n\",\n       \"      <g transform=\\\"translate(13.5625 222.075664)scale(0.1 -0.1)\\\">\\n\",\n       \"       <use xlink:href=\\\"#DejaVuSans-8722\\\"/>\\n\",\n       \"       <use x=\\\"83.789062\\\" xlink:href=\\\"#DejaVuSans-53\\\"/>\\n\",\n       \"      </g>\\n\",\n       \"     </g>\\n\",\n       \"    </g>\\n\",\n       \"    <g id=\\\"ytick_4\\\">\\n\",\n       \"     <g id=\\\"line2d_11\\\">\\n\",\n       \"      <g>\\n\",\n       \"       <use style=\\\"stroke:#000000;stroke-width:0.8;\\\" x=\\\"35.304688\\\" xlink:href=\\\"#mc34abf2f2a\\\" y=\\\"171.722584\\\"/>\\n\",\n       \"      </g>\\n\",\n       \"     </g>\\n\",\n       \"     <g id=\\\"text_11\\\">\\n\",\n       \"      <!-- 0 -->\\n\",\n       \"      <g transform=\\\"translate(21.942188 175.521803)scale(0.1 -0.1)\\\">\\n\",\n       \"       <use xlink:href=\\\"#DejaVuSans-48\\\"/>\\n\",\n       \"      </g>\\n\",\n       \"     </g>\\n\",\n       \"    </g>\\n\",\n       \"    <g id=\\\"ytick_5\\\">\\n\",\n       \"     <g id=\\\"line2d_12\\\">\\n\",\n       \"      <g>\\n\",\n       \"       <use style=\\\"stroke:#000000;stroke-width:0.8;\\\" x=\\\"35.304688\\\" xlink:href=\\\"#mc34abf2f2a\\\" y=\\\"125.168724\\\"/>\\n\",\n       \"      </g>\\n\",\n       \"     </g>\\n\",\n       \"     <g id=\\\"text_12\\\">\\n\",\n       \"      <!-- 5 -->\\n\",\n       \"      <g transform=\\\"translate(21.942188 128.967942)scale(0.1 -0.1)\\\">\\n\",\n       \"       <use xlink:href=\\\"#DejaVuSans-53\\\"/>\\n\",\n       \"      </g>\\n\",\n       \"     </g>\\n\",\n       \"    </g>\\n\",\n       \"    <g id=\\\"ytick_6\\\">\\n\",\n       \"     <g id=\\\"line2d_13\\\">\\n\",\n       \"      <g>\\n\",\n       \"       <use style=\\\"stroke:#000000;stroke-width:0.8;\\\" x=\\\"35.304688\\\" xlink:href=\\\"#mc34abf2f2a\\\" y=\\\"78.614863\\\"/>\\n\",\n       \"      </g>\\n\",\n       \"     </g>\\n\",\n       \"     <g id=\\\"text_13\\\">\\n\",\n       \"      <!-- 10 -->\\n\",\n       \"      <g transform=\\\"translate(15.579688 82.414082)scale(0.1 -0.1)\\\">\\n\",\n       \"       <use xlink:href=\\\"#DejaVuSans-49\\\"/>\\n\",\n       \"       <use x=\\\"63.623047\\\" xlink:href=\\\"#DejaVuSans-48\\\"/>\\n\",\n       \"      </g>\\n\",\n       \"     </g>\\n\",\n       \"    </g>\\n\",\n       \"    <g id=\\\"ytick_7\\\">\\n\",\n       \"     <g id=\\\"line2d_14\\\">\\n\",\n       \"      <g>\\n\",\n       \"       <use style=\\\"stroke:#000000;stroke-width:0.8;\\\" x=\\\"35.304688\\\" xlink:href=\\\"#mc34abf2f2a\\\" y=\\\"32.061002\\\"/>\\n\",\n       \"      </g>\\n\",\n       \"     </g>\\n\",\n       \"     <g id=\\\"text_14\\\">\\n\",\n       \"      <!-- 15 -->\\n\",\n       \"      <g transform=\\\"translate(15.579688 35.860221)scale(0.1 -0.1)\\\">\\n\",\n       \"       <use xlink:href=\\\"#DejaVuSans-49\\\"/>\\n\",\n       \"       <use x=\\\"63.623047\\\" xlink:href=\\\"#DejaVuSans-53\\\"/>\\n\",\n       \"      </g>\\n\",\n       \"     </g>\\n\",\n       \"    </g>\\n\",\n       \"   </g>\\n\",\n       \"   <g id=\\\"patch_3\\\">\\n\",\n       \"    <path d=\\\"M 35.304688 333.36 \\n\",\n       \"L 35.304688 7.2 \\n\",\n       \"\\\" style=\\\"fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;stroke-width:0.8;\\\"/>\\n\",\n       \"   </g>\\n\",\n       \"   <g id=\\\"patch_4\\\">\\n\",\n       \"    <path d=\\\"M 370.104688 333.36 \\n\",\n       \"L 370.104688 7.2 \\n\",\n       \"\\\" style=\\\"fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;stroke-width:0.8;\\\"/>\\n\",\n       \"   </g>\\n\",\n       \"   <g id=\\\"patch_5\\\">\\n\",\n       \"    <path d=\\\"M 35.304688 333.36 \\n\",\n       \"L 370.104687 333.36 \\n\",\n       \"\\\" style=\\\"fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;stroke-width:0.8;\\\"/>\\n\",\n       \"   </g>\\n\",\n       \"   <g id=\\\"patch_6\\\">\\n\",\n       \"    <path d=\\\"M 35.304688 7.2 \\n\",\n       \"L 370.104687 7.2 \\n\",\n       \"\\\" style=\\\"fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;stroke-width:0.8;\\\"/>\\n\",\n       \"   </g>\\n\",\n       \"  </g>\\n\",\n       \" </g>\\n\",\n       \" <defs>\\n\",\n       \"  <clipPath id=\\\"pf00a2a4f93\\\">\\n\",\n       \"   <rect height=\\\"326.16\\\" width=\\\"334.8\\\" x=\\\"35.304688\\\" y=\\\"7.2\\\"/>\\n\",\n       \"  </clipPath>\\n\",\n       \" </defs>\\n\",\n       \"</svg>\\n\"\n      ],\n      \"text/plain\": [\n       \"<Figure size 432x432 with 1 Axes>\"\n      ]\n     },\n     \"metadata\": {\n      \"needs_background\": \"light\"\n     },\n     \"output_type\": \"display_data\"\n    }\n   ],\n   \"source\": [\n    \"fig, ax = plt.subplots(1, 1, figsize=(6, 6))\\n\",\n    \"ax.scatter(case_data.structure.ini_info.pos[:, 0], case_data.structure.ini_info.pos[:, 1])\\n\",\n    \"ax.axis('equal')\\n\",\n    \"tip_node = np.argmax(case_data.structure.ini_info.pos[:, 1])\\n\",\n    \"print('Wing tip node is the maximum Y one: ', tip_node)\\n\",\n    \"ax.scatter(case_data.structure.ini_info.pos[tip_node, 0], case_data.structure.ini_info.pos[tip_node, 1], color='red')\\n\",\n    \"plt.show()\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"We can plot now the `pos[tip_node,:]` variable:\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 14,\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"data\": {\n      \"image/svg+xml\": [\n       \"<?xml version=\\\"1.0\\\" encoding=\\\"utf-8\\\" standalone=\\\"no\\\"?>\\n\",\n       \"<!DOCTYPE svg PUBLIC \\\"-//W3C//DTD SVG 1.1//EN\\\"\\n\",\n       \"  \\\"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\\\">\\n\",\n       \"<!-- Created with matplotlib (https://matplotlib.org/) -->\\n\",\n       \"<svg height=\\\"207.83625pt\\\" version=\\\"1.1\\\" viewBox=\\\"0 0 441.58125 207.83625\\\" width=\\\"441.58125pt\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\" xmlns:xlink=\\\"http://www.w3.org/1999/xlink\\\">\\n\",\n       \" <defs>\\n\",\n       \"  <style type=\\\"text/css\\\">\\n\",\n       \"*{stroke-linecap:butt;stroke-linejoin:round;}\\n\",\n       \"  </style>\\n\",\n       \" </defs>\\n\",\n       \" <g id=\\\"figure_1\\\">\\n\",\n       \"  <g id=\\\"patch_1\\\">\\n\",\n       \"   <path d=\\\"M 0 207.83625 \\n\",\n       \"L 441.58125 207.83625 \\n\",\n       \"L 441.58125 0 \\n\",\n       \"L 0 0 \\n\",\n       \"z\\n\",\n       \"\\\" style=\\\"fill:none;\\\"/>\\n\",\n       \"  </g>\\n\",\n       \"  <g id=\\\"axes_1\\\">\\n\",\n       \"   <g id=\\\"patch_2\\\">\\n\",\n       \"    <path d=\\\"M 43.78125 170.28 \\n\",\n       \"L 434.38125 170.28 \\n\",\n       \"L 434.38125 7.2 \\n\",\n       \"L 43.78125 7.2 \\n\",\n       \"z\\n\",\n       \"\\\" style=\\\"fill:#ffffff;\\\"/>\\n\",\n       \"   </g>\\n\",\n       \"   <g id=\\\"matplotlib.axis_1\\\">\\n\",\n       \"    <g id=\\\"xtick_1\\\">\\n\",\n       \"     <g id=\\\"line2d_1\\\">\\n\",\n       \"      <defs>\\n\",\n       \"       <path d=\\\"M 0 0 \\n\",\n       \"L 0 3.5 \\n\",\n       \"\\\" id=\\\"mc1be67e9a7\\\" style=\\\"stroke:#000000;stroke-width:0.8;\\\"/>\\n\",\n       \"      </defs>\\n\",\n       \"      <g>\\n\",\n       \"       <use style=\\\"stroke:#000000;stroke-width:0.8;\\\" x=\\\"61.535795\\\" xlink:href=\\\"#mc1be67e9a7\\\" y=\\\"170.28\\\"/>\\n\",\n       \"      </g>\\n\",\n       \"     </g>\\n\",\n       \"     <g id=\\\"text_1\\\">\\n\",\n       \"      <!-- 0 -->\\n\",\n       \"      <defs>\\n\",\n       \"       <path d=\\\"M 31.78125 66.40625 \\n\",\n       \"Q 24.171875 66.40625 20.328125 58.90625 \\n\",\n       \"Q 16.5 51.421875 16.5 36.375 \\n\",\n       \"Q 16.5 21.390625 20.328125 13.890625 \\n\",\n       \"Q 24.171875 6.390625 31.78125 6.390625 \\n\",\n       \"Q 39.453125 6.390625 43.28125 13.890625 \\n\",\n       \"Q 47.125 21.390625 47.125 36.375 \\n\",\n       \"Q 47.125 51.421875 43.28125 58.90625 \\n\",\n       \"Q 39.453125 66.40625 31.78125 66.40625 \\n\",\n       \"z\\n\",\n       \"M 31.78125 74.21875 \\n\",\n       \"Q 44.046875 74.21875 50.515625 64.515625 \\n\",\n       \"Q 56.984375 54.828125 56.984375 36.375 \\n\",\n       \"Q 56.984375 17.96875 50.515625 8.265625 \\n\",\n       \"Q 44.046875 -1.421875 31.78125 -1.421875 \\n\",\n       \"Q 19.53125 -1.421875 13.0625 8.265625 \\n\",\n       \"Q 6.59375 17.96875 6.59375 36.375 \\n\",\n       \"Q 6.59375 54.828125 13.0625 64.515625 \\n\",\n       \"Q 19.53125 74.21875 31.78125 74.21875 \\n\",\n       \"z\\n\",\n       \"\\\" id=\\\"DejaVuSans-48\\\"/>\\n\",\n       \"      </defs>\\n\",\n       \"      <g transform=\\\"translate(58.354545 184.878438)scale(0.1 -0.1)\\\">\\n\",\n       \"       <use xlink:href=\\\"#DejaVuSans-48\\\"/>\\n\",\n       \"      </g>\\n\",\n       \"     </g>\\n\",\n       \"    </g>\\n\",\n       \"    <g id=\\\"xtick_2\\\">\\n\",\n       \"     <g id=\\\"line2d_2\\\">\\n\",\n       \"      <g>\\n\",\n       \"       <use style=\\\"stroke:#000000;stroke-width:0.8;\\\" x=\\\"120.668337\\\" xlink:href=\\\"#mc1be67e9a7\\\" y=\\\"170.28\\\"/>\\n\",\n       \"      </g>\\n\",\n       \"     </g>\\n\",\n       \"     <g id=\\\"text_2\\\">\\n\",\n       \"      <!-- 5 -->\\n\",\n       \"      <defs>\\n\",\n       \"       <path d=\\\"M 10.796875 72.90625 \\n\",\n       \"L 49.515625 72.90625 \\n\",\n       \"L 49.515625 64.59375 \\n\",\n       \"L 19.828125 64.59375 \\n\",\n       \"L 19.828125 46.734375 \\n\",\n       \"Q 21.96875 47.46875 24.109375 47.828125 \\n\",\n       \"Q 26.265625 48.1875 28.421875 48.1875 \\n\",\n       \"Q 40.625 48.1875 47.75 41.5 \\n\",\n       \"Q 54.890625 34.8125 54.890625 23.390625 \\n\",\n       \"Q 54.890625 11.625 47.5625 5.09375 \\n\",\n       \"Q 40.234375 -1.421875 26.90625 -1.421875 \\n\",\n       \"Q 22.3125 -1.421875 17.546875 -0.640625 \\n\",\n       \"Q 12.796875 0.140625 7.71875 1.703125 \\n\",\n       \"L 7.71875 11.625 \\n\",\n       \"Q 12.109375 9.234375 16.796875 8.0625 \\n\",\n       \"Q 21.484375 6.890625 26.703125 6.890625 \\n\",\n       \"Q 35.15625 6.890625 40.078125 11.328125 \\n\",\n       \"Q 45.015625 15.765625 45.015625 23.390625 \\n\",\n       \"Q 45.015625 31 40.078125 35.4375 \\n\",\n       \"Q 35.15625 39.890625 26.703125 39.890625 \\n\",\n       \"Q 22.75 39.890625 18.8125 39.015625 \\n\",\n       \"Q 14.890625 38.140625 10.796875 36.28125 \\n\",\n       \"z\\n\",\n       \"\\\" id=\\\"DejaVuSans-53\\\"/>\\n\",\n       \"      </defs>\\n\",\n       \"      <g transform=\\\"translate(117.487087 184.878438)scale(0.1 -0.1)\\\">\\n\",\n       \"       <use xlink:href=\\\"#DejaVuSans-53\\\"/>\\n\",\n       \"      </g>\\n\",\n       \"     </g>\\n\",\n       \"    </g>\\n\",\n       \"    <g id=\\\"xtick_3\\\">\\n\",\n       \"     <g id=\\\"line2d_3\\\">\\n\",\n       \"      <g>\\n\",\n       \"       <use style=\\\"stroke:#000000;stroke-width:0.8;\\\" x=\\\"179.800878\\\" xlink:href=\\\"#mc1be67e9a7\\\" y=\\\"170.28\\\"/>\\n\",\n       \"      </g>\\n\",\n       \"     </g>\\n\",\n       \"     <g id=\\\"text_3\\\">\\n\",\n       \"      <!-- 10 -->\\n\",\n       \"      <defs>\\n\",\n       \"       <path d=\\\"M 12.40625 8.296875 \\n\",\n       \"L 28.515625 8.296875 \\n\",\n       \"L 28.515625 63.921875 \\n\",\n       \"L 10.984375 60.40625 \\n\",\n       \"L 10.984375 69.390625 \\n\",\n       \"L 28.421875 72.90625 \\n\",\n       \"L 38.28125 72.90625 \\n\",\n       \"L 38.28125 8.296875 \\n\",\n       \"L 54.390625 8.296875 \\n\",\n       \"L 54.390625 0 \\n\",\n       \"L 12.40625 0 \\n\",\n       \"z\\n\",\n       \"\\\" id=\\\"DejaVuSans-49\\\"/>\\n\",\n       \"      </defs>\\n\",\n       \"      <g transform=\\\"translate(173.438378 184.878438)scale(0.1 -0.1)\\\">\\n\",\n       \"       <use xlink:href=\\\"#DejaVuSans-49\\\"/>\\n\",\n       \"       <use x=\\\"63.623047\\\" xlink:href=\\\"#DejaVuSans-48\\\"/>\\n\",\n       \"      </g>\\n\",\n       \"     </g>\\n\",\n       \"    </g>\\n\",\n       \"    <g id=\\\"xtick_4\\\">\\n\",\n       \"     <g id=\\\"line2d_4\\\">\\n\",\n       \"      <g>\\n\",\n       \"       <use style=\\\"stroke:#000000;stroke-width:0.8;\\\" x=\\\"238.933419\\\" xlink:href=\\\"#mc1be67e9a7\\\" y=\\\"170.28\\\"/>\\n\",\n       \"      </g>\\n\",\n       \"     </g>\\n\",\n       \"     <g id=\\\"text_4\\\">\\n\",\n       \"      <!-- 15 -->\\n\",\n       \"      <g transform=\\\"translate(232.570919 184.878438)scale(0.1 -0.1)\\\">\\n\",\n       \"       <use xlink:href=\\\"#DejaVuSans-49\\\"/>\\n\",\n       \"       <use x=\\\"63.623047\\\" xlink:href=\\\"#DejaVuSans-53\\\"/>\\n\",\n       \"      </g>\\n\",\n       \"     </g>\\n\",\n       \"    </g>\\n\",\n       \"    <g id=\\\"xtick_5\\\">\\n\",\n       \"     <g id=\\\"line2d_5\\\">\\n\",\n       \"      <g>\\n\",\n       \"       <use style=\\\"stroke:#000000;stroke-width:0.8;\\\" x=\\\"298.06596\\\" xlink:href=\\\"#mc1be67e9a7\\\" y=\\\"170.28\\\"/>\\n\",\n       \"      </g>\\n\",\n       \"     </g>\\n\",\n       \"     <g id=\\\"text_5\\\">\\n\",\n       \"      <!-- 20 -->\\n\",\n       \"      <defs>\\n\",\n       \"       <path d=\\\"M 19.1875 8.296875 \\n\",\n       \"L 53.609375 8.296875 \\n\",\n       \"L 53.609375 0 \\n\",\n       \"L 7.328125 0 \\n\",\n       \"L 7.328125 8.296875 \\n\",\n       \"Q 12.9375 14.109375 22.625 23.890625 \\n\",\n       \"Q 32.328125 33.6875 34.8125 36.53125 \\n\",\n       \"Q 39.546875 41.84375 41.421875 45.53125 \\n\",\n       \"Q 43.3125 49.21875 43.3125 52.78125 \\n\",\n       \"Q 43.3125 58.59375 39.234375 62.25 \\n\",\n       \"Q 35.15625 65.921875 28.609375 65.921875 \\n\",\n       \"Q 23.96875 65.921875 18.8125 64.3125 \\n\",\n       \"Q 13.671875 62.703125 7.8125 59.421875 \\n\",\n       \"L 7.8125 69.390625 \\n\",\n       \"Q 13.765625 71.78125 18.9375 73 \\n\",\n       \"Q 24.125 74.21875 28.421875 74.21875 \\n\",\n       \"Q 39.75 74.21875 46.484375 68.546875 \\n\",\n       \"Q 53.21875 62.890625 53.21875 53.421875 \\n\",\n       \"Q 53.21875 48.921875 51.53125 44.890625 \\n\",\n       \"Q 49.859375 40.875 45.40625 35.40625 \\n\",\n       \"Q 44.1875 33.984375 37.640625 27.21875 \\n\",\n       \"Q 31.109375 20.453125 19.1875 8.296875 \\n\",\n       \"z\\n\",\n       \"\\\" id=\\\"DejaVuSans-50\\\"/>\\n\",\n       \"      </defs>\\n\",\n       \"      <g transform=\\\"translate(291.70346 184.878438)scale(0.1 -0.1)\\\">\\n\",\n       \"       <use xlink:href=\\\"#DejaVuSans-50\\\"/>\\n\",\n       \"       <use x=\\\"63.623047\\\" xlink:href=\\\"#DejaVuSans-48\\\"/>\\n\",\n       \"      </g>\\n\",\n       \"     </g>\\n\",\n       \"    </g>\\n\",\n       \"    <g id=\\\"xtick_6\\\">\\n\",\n       \"     <g id=\\\"line2d_6\\\">\\n\",\n       \"      <g>\\n\",\n       \"       <use style=\\\"stroke:#000000;stroke-width:0.8;\\\" x=\\\"357.198501\\\" xlink:href=\\\"#mc1be67e9a7\\\" y=\\\"170.28\\\"/>\\n\",\n       \"      </g>\\n\",\n       \"     </g>\\n\",\n       \"     <g id=\\\"text_6\\\">\\n\",\n       \"      <!-- 25 -->\\n\",\n       \"      <g transform=\\\"translate(350.836001 184.878438)scale(0.1 -0.1)\\\">\\n\",\n       \"       <use xlink:href=\\\"#DejaVuSans-50\\\"/>\\n\",\n       \"       <use x=\\\"63.623047\\\" xlink:href=\\\"#DejaVuSans-53\\\"/>\\n\",\n       \"      </g>\\n\",\n       \"     </g>\\n\",\n       \"    </g>\\n\",\n       \"    <g id=\\\"xtick_7\\\">\\n\",\n       \"     <g id=\\\"line2d_7\\\">\\n\",\n       \"      <g>\\n\",\n       \"       <use style=\\\"stroke:#000000;stroke-width:0.8;\\\" x=\\\"416.331042\\\" xlink:href=\\\"#mc1be67e9a7\\\" y=\\\"170.28\\\"/>\\n\",\n       \"      </g>\\n\",\n       \"     </g>\\n\",\n       \"     <g id=\\\"text_7\\\">\\n\",\n       \"      <!-- 30 -->\\n\",\n       \"      <defs>\\n\",\n       \"       <path d=\\\"M 40.578125 39.3125 \\n\",\n       \"Q 47.65625 37.796875 51.625 33 \\n\",\n       \"Q 55.609375 28.21875 55.609375 21.1875 \\n\",\n       \"Q 55.609375 10.40625 48.1875 4.484375 \\n\",\n       \"Q 40.765625 -1.421875 27.09375 -1.421875 \\n\",\n       \"Q 22.515625 -1.421875 17.65625 -0.515625 \\n\",\n       \"Q 12.796875 0.390625 7.625 2.203125 \\n\",\n       \"L 7.625 11.71875 \\n\",\n       \"Q 11.71875 9.328125 16.59375 8.109375 \\n\",\n       \"Q 21.484375 6.890625 26.8125 6.890625 \\n\",\n       \"Q 36.078125 6.890625 40.9375 10.546875 \\n\",\n       \"Q 45.796875 14.203125 45.796875 21.1875 \\n\",\n       \"Q 45.796875 27.640625 41.28125 31.265625 \\n\",\n       \"Q 36.765625 34.90625 28.71875 34.90625 \\n\",\n       \"L 20.21875 34.90625 \\n\",\n       \"L 20.21875 43.015625 \\n\",\n       \"L 29.109375 43.015625 \\n\",\n       \"Q 36.375 43.015625 40.234375 45.921875 \\n\",\n       \"Q 44.09375 48.828125 44.09375 54.296875 \\n\",\n       \"Q 44.09375 59.90625 40.109375 62.90625 \\n\",\n       \"Q 36.140625 65.921875 28.71875 65.921875 \\n\",\n       \"Q 24.65625 65.921875 20.015625 65.03125 \\n\",\n       \"Q 15.375 64.15625 9.8125 62.3125 \\n\",\n       \"L 9.8125 71.09375 \\n\",\n       \"Q 15.4375 72.65625 20.34375 73.4375 \\n\",\n       \"Q 25.25 74.21875 29.59375 74.21875 \\n\",\n       \"Q 40.828125 74.21875 47.359375 69.109375 \\n\",\n       \"Q 53.90625 64.015625 53.90625 55.328125 \\n\",\n       \"Q 53.90625 49.265625 50.4375 45.09375 \\n\",\n       \"Q 46.96875 40.921875 40.578125 39.3125 \\n\",\n       \"z\\n\",\n       \"\\\" id=\\\"DejaVuSans-51\\\"/>\\n\",\n       \"      </defs>\\n\",\n       \"      <g transform=\\\"translate(409.968542 184.878438)scale(0.1 -0.1)\\\">\\n\",\n       \"       <use xlink:href=\\\"#DejaVuSans-51\\\"/>\\n\",\n       \"       <use x=\\\"63.623047\\\" xlink:href=\\\"#DejaVuSans-48\\\"/>\\n\",\n       \"      </g>\\n\",\n       \"     </g>\\n\",\n       \"    </g>\\n\",\n       \"    <g id=\\\"text_8\\\">\\n\",\n       \"     <!-- time [s] -->\\n\",\n       \"     <defs>\\n\",\n       \"      <path d=\\\"M 18.3125 70.21875 \\n\",\n       \"L 18.3125 54.6875 \\n\",\n       \"L 36.8125 54.6875 \\n\",\n       \"L 36.8125 47.703125 \\n\",\n       \"L 18.3125 47.703125 \\n\",\n       \"L 18.3125 18.015625 \\n\",\n       \"Q 18.3125 11.328125 20.140625 9.421875 \\n\",\n       \"Q 21.96875 7.515625 27.59375 7.515625 \\n\",\n       \"L 36.8125 7.515625 \\n\",\n       \"L 36.8125 0 \\n\",\n       \"L 27.59375 0 \\n\",\n       \"Q 17.1875 0 13.234375 3.875 \\n\",\n       \"Q 9.28125 7.765625 9.28125 18.015625 \\n\",\n       \"L 9.28125 47.703125 \\n\",\n       \"L 2.6875 47.703125 \\n\",\n       \"L 2.6875 54.6875 \\n\",\n       \"L 9.28125 54.6875 \\n\",\n       \"L 9.28125 70.21875 \\n\",\n       \"z\\n\",\n       \"\\\" id=\\\"DejaVuSans-116\\\"/>\\n\",\n       \"      <path d=\\\"M 9.421875 54.6875 \\n\",\n       \"L 18.40625 54.6875 \\n\",\n       \"L 18.40625 0 \\n\",\n       \"L 9.421875 0 \\n\",\n       \"z\\n\",\n       \"M 9.421875 75.984375 \\n\",\n       \"L 18.40625 75.984375 \\n\",\n       \"L 18.40625 64.59375 \\n\",\n       \"L 9.421875 64.59375 \\n\",\n       \"z\\n\",\n       \"\\\" id=\\\"DejaVuSans-105\\\"/>\\n\",\n       \"      <path d=\\\"M 52 44.1875 \\n\",\n       \"Q 55.375 50.25 60.0625 53.125 \\n\",\n       \"Q 64.75 56 71.09375 56 \\n\",\n       \"Q 79.640625 56 84.28125 50.015625 \\n\",\n       \"Q 88.921875 44.046875 88.921875 33.015625 \\n\",\n       \"L 88.921875 0 \\n\",\n       \"L 79.890625 0 \\n\",\n       \"L 79.890625 32.71875 \\n\",\n       \"Q 79.890625 40.578125 77.09375 44.375 \\n\",\n       \"Q 74.3125 48.1875 68.609375 48.1875 \\n\",\n       \"Q 61.625 48.1875 57.5625 43.546875 \\n\",\n       \"Q 53.515625 38.921875 53.515625 30.90625 \\n\",\n       \"L 53.515625 0 \\n\",\n       \"L 44.484375 0 \\n\",\n       \"L 44.484375 32.71875 \\n\",\n       \"Q 44.484375 40.625 41.703125 44.40625 \\n\",\n       \"Q 38.921875 48.1875 33.109375 48.1875 \\n\",\n       \"Q 26.21875 48.1875 22.15625 43.53125 \\n\",\n       \"Q 18.109375 38.875 18.109375 30.90625 \\n\",\n       \"L 18.109375 0 \\n\",\n       \"L 9.078125 0 \\n\",\n       \"L 9.078125 54.6875 \\n\",\n       \"L 18.109375 54.6875 \\n\",\n       \"L 18.109375 46.1875 \\n\",\n       \"Q 21.1875 51.21875 25.484375 53.609375 \\n\",\n       \"Q 29.78125 56 35.6875 56 \\n\",\n       \"Q 41.65625 56 45.828125 52.96875 \\n\",\n       \"Q 50 49.953125 52 44.1875 \\n\",\n       \"z\\n\",\n       \"\\\" id=\\\"DejaVuSans-109\\\"/>\\n\",\n       \"      <path d=\\\"M 56.203125 29.59375 \\n\",\n       \"L 56.203125 25.203125 \\n\",\n       \"L 14.890625 25.203125 \\n\",\n       \"Q 15.484375 15.921875 20.484375 11.0625 \\n\",\n       \"Q 25.484375 6.203125 34.421875 6.203125 \\n\",\n       \"Q 39.59375 6.203125 44.453125 7.46875 \\n\",\n       \"Q 49.3125 8.734375 54.109375 11.28125 \\n\",\n       \"L 54.109375 2.78125 \\n\",\n       \"Q 49.265625 0.734375 44.1875 -0.34375 \\n\",\n       \"Q 39.109375 -1.421875 33.890625 -1.421875 \\n\",\n       \"Q 20.796875 -1.421875 13.15625 6.1875 \\n\",\n       \"Q 5.515625 13.8125 5.515625 26.8125 \\n\",\n       \"Q 5.515625 40.234375 12.765625 48.109375 \\n\",\n       \"Q 20.015625 56 32.328125 56 \\n\",\n       \"Q 43.359375 56 49.78125 48.890625 \\n\",\n       \"Q 56.203125 41.796875 56.203125 29.59375 \\n\",\n       \"z\\n\",\n       \"M 47.21875 32.234375 \\n\",\n       \"Q 47.125 39.59375 43.09375 43.984375 \\n\",\n       \"Q 39.0625 48.390625 32.421875 48.390625 \\n\",\n       \"Q 24.90625 48.390625 20.390625 44.140625 \\n\",\n       \"Q 15.875 39.890625 15.1875 32.171875 \\n\",\n       \"z\\n\",\n       \"\\\" id=\\\"DejaVuSans-101\\\"/>\\n\",\n       \"      <path id=\\\"DejaVuSans-32\\\"/>\\n\",\n       \"      <path d=\\\"M 8.59375 75.984375 \\n\",\n       \"L 29.296875 75.984375 \\n\",\n       \"L 29.296875 69 \\n\",\n       \"L 17.578125 69 \\n\",\n       \"L 17.578125 -6.203125 \\n\",\n       \"L 29.296875 -6.203125 \\n\",\n       \"L 29.296875 -13.1875 \\n\",\n       \"L 8.59375 -13.1875 \\n\",\n       \"z\\n\",\n       \"\\\" id=\\\"DejaVuSans-91\\\"/>\\n\",\n       \"      <path d=\\\"M 44.28125 53.078125 \\n\",\n       \"L 44.28125 44.578125 \\n\",\n       \"Q 40.484375 46.53125 36.375 47.5 \\n\",\n       \"Q 32.28125 48.484375 27.875 48.484375 \\n\",\n       \"Q 21.1875 48.484375 17.84375 46.4375 \\n\",\n       \"Q 14.5 44.390625 14.5 40.28125 \\n\",\n       \"Q 14.5 37.15625 16.890625 35.375 \\n\",\n       \"Q 19.28125 33.59375 26.515625 31.984375 \\n\",\n       \"L 29.59375 31.296875 \\n\",\n       \"Q 39.15625 29.25 43.1875 25.515625 \\n\",\n       \"Q 47.21875 21.78125 47.21875 15.09375 \\n\",\n       \"Q 47.21875 7.46875 41.1875 3.015625 \\n\",\n       \"Q 35.15625 -1.421875 24.609375 -1.421875 \\n\",\n       \"Q 20.21875 -1.421875 15.453125 -0.5625 \\n\",\n       \"Q 10.6875 0.296875 5.421875 2 \\n\",\n       \"L 5.421875 11.28125 \\n\",\n       \"Q 10.40625 8.6875 15.234375 7.390625 \\n\",\n       \"Q 20.0625 6.109375 24.8125 6.109375 \\n\",\n       \"Q 31.15625 6.109375 34.5625 8.28125 \\n\",\n       \"Q 37.984375 10.453125 37.984375 14.40625 \\n\",\n       \"Q 37.984375 18.0625 35.515625 20.015625 \\n\",\n       \"Q 33.0625 21.96875 24.703125 23.78125 \\n\",\n       \"L 21.578125 24.515625 \\n\",\n       \"Q 13.234375 26.265625 9.515625 29.90625 \\n\",\n       \"Q 5.8125 33.546875 5.8125 39.890625 \\n\",\n       \"Q 5.8125 47.609375 11.28125 51.796875 \\n\",\n       \"Q 16.75 56 26.8125 56 \\n\",\n       \"Q 31.78125 56 36.171875 55.265625 \\n\",\n       \"Q 40.578125 54.546875 44.28125 53.078125 \\n\",\n       \"z\\n\",\n       \"\\\" id=\\\"DejaVuSans-115\\\"/>\\n\",\n       \"      <path d=\\\"M 30.421875 75.984375 \\n\",\n       \"L 30.421875 -13.1875 \\n\",\n       \"L 9.71875 -13.1875 \\n\",\n       \"L 9.71875 -6.203125 \\n\",\n       \"L 21.390625 -6.203125 \\n\",\n       \"L 21.390625 69 \\n\",\n       \"L 9.71875 69 \\n\",\n       \"L 9.71875 75.984375 \\n\",\n       \"z\\n\",\n       \"\\\" id=\\\"DejaVuSans-93\\\"/>\\n\",\n       \"     </defs>\\n\",\n       \"     <g transform=\\\"translate(219.689844 198.556563)scale(0.1 -0.1)\\\">\\n\",\n       \"      <use xlink:href=\\\"#DejaVuSans-116\\\"/>\\n\",\n       \"      <use x=\\\"39.208984\\\" xlink:href=\\\"#DejaVuSans-105\\\"/>\\n\",\n       \"      <use x=\\\"66.992188\\\" xlink:href=\\\"#DejaVuSans-109\\\"/>\\n\",\n       \"      <use x=\\\"164.404297\\\" xlink:href=\\\"#DejaVuSans-101\\\"/>\\n\",\n       \"      <use x=\\\"225.927734\\\" xlink:href=\\\"#DejaVuSans-32\\\"/>\\n\",\n       \"      <use x=\\\"257.714844\\\" xlink:href=\\\"#DejaVuSans-91\\\"/>\\n\",\n       \"      <use x=\\\"296.728516\\\" xlink:href=\\\"#DejaVuSans-115\\\"/>\\n\",\n       \"      <use x=\\\"348.828125\\\" xlink:href=\\\"#DejaVuSans-93\\\"/>\\n\",\n       \"     </g>\\n\",\n       \"    </g>\\n\",\n       \"   </g>\\n\",\n       \"   <g id=\\\"matplotlib.axis_2\\\">\\n\",\n       \"    <g id=\\\"ytick_1\\\">\\n\",\n       \"     <g id=\\\"line2d_8\\\">\\n\",\n       \"      <defs>\\n\",\n       \"       <path d=\\\"M 0 0 \\n\",\n       \"L -3.5 0 \\n\",\n       \"\\\" id=\\\"m3027c25693\\\" style=\\\"stroke:#000000;stroke-width:0.8;\\\"/>\\n\",\n       \"      </defs>\\n\",\n       \"      <g>\\n\",\n       \"       <use style=\\\"stroke:#000000;stroke-width:0.8;\\\" x=\\\"43.78125\\\" xlink:href=\\\"#m3027c25693\\\" y=\\\"139.691684\\\"/>\\n\",\n       \"      </g>\\n\",\n       \"     </g>\\n\",\n       \"     <g id=\\\"text_9\\\">\\n\",\n       \"      <!-- 5.2 -->\\n\",\n       \"      <defs>\\n\",\n       \"       <path d=\\\"M 10.6875 12.40625 \\n\",\n       \"L 21 12.40625 \\n\",\n       \"L 21 0 \\n\",\n       \"L 10.6875 0 \\n\",\n       \"z\\n\",\n       \"\\\" id=\\\"DejaVuSans-46\\\"/>\\n\",\n       \"      </defs>\\n\",\n       \"      <g transform=\\\"translate(20.878125 143.490903)scale(0.1 -0.1)\\\">\\n\",\n       \"       <use xlink:href=\\\"#DejaVuSans-53\\\"/>\\n\",\n       \"       <use x=\\\"63.623047\\\" xlink:href=\\\"#DejaVuSans-46\\\"/>\\n\",\n       \"       <use x=\\\"95.410156\\\" xlink:href=\\\"#DejaVuSans-50\\\"/>\\n\",\n       \"      </g>\\n\",\n       \"     </g>\\n\",\n       \"    </g>\\n\",\n       \"    <g id=\\\"ytick_2\\\">\\n\",\n       \"     <g id=\\\"line2d_9\\\">\\n\",\n       \"      <g>\\n\",\n       \"       <use style=\\\"stroke:#000000;stroke-width:0.8;\\\" x=\\\"43.78125\\\" xlink:href=\\\"#m3027c25693\\\" y=\\\"101.57418\\\"/>\\n\",\n       \"      </g>\\n\",\n       \"     </g>\\n\",\n       \"     <g id=\\\"text_10\\\">\\n\",\n       \"      <!-- 5.3 -->\\n\",\n       \"      <g transform=\\\"translate(20.878125 105.373399)scale(0.1 -0.1)\\\">\\n\",\n       \"       <use xlink:href=\\\"#DejaVuSans-53\\\"/>\\n\",\n       \"       <use x=\\\"63.623047\\\" xlink:href=\\\"#DejaVuSans-46\\\"/>\\n\",\n       \"       <use x=\\\"95.410156\\\" xlink:href=\\\"#DejaVuSans-51\\\"/>\\n\",\n       \"      </g>\\n\",\n       \"     </g>\\n\",\n       \"    </g>\\n\",\n       \"    <g id=\\\"ytick_3\\\">\\n\",\n       \"     <g id=\\\"line2d_10\\\">\\n\",\n       \"      <g>\\n\",\n       \"       <use style=\\\"stroke:#000000;stroke-width:0.8;\\\" x=\\\"43.78125\\\" xlink:href=\\\"#m3027c25693\\\" y=\\\"63.456676\\\"/>\\n\",\n       \"      </g>\\n\",\n       \"     </g>\\n\",\n       \"     <g id=\\\"text_11\\\">\\n\",\n       \"      <!-- 5.4 -->\\n\",\n       \"      <defs>\\n\",\n       \"       <path d=\\\"M 37.796875 64.3125 \\n\",\n       \"L 12.890625 25.390625 \\n\",\n       \"L 37.796875 25.390625 \\n\",\n       \"z\\n\",\n       \"M 35.203125 72.90625 \\n\",\n       \"L 47.609375 72.90625 \\n\",\n       \"L 47.609375 25.390625 \\n\",\n       \"L 58.015625 25.390625 \\n\",\n       \"L 58.015625 17.1875 \\n\",\n       \"L 47.609375 17.1875 \\n\",\n       \"L 47.609375 0 \\n\",\n       \"L 37.796875 0 \\n\",\n       \"L 37.796875 17.1875 \\n\",\n       \"L 4.890625 17.1875 \\n\",\n       \"L 4.890625 26.703125 \\n\",\n       \"z\\n\",\n       \"\\\" id=\\\"DejaVuSans-52\\\"/>\\n\",\n       \"      </defs>\\n\",\n       \"      <g transform=\\\"translate(20.878125 67.255895)scale(0.1 -0.1)\\\">\\n\",\n       \"       <use xlink:href=\\\"#DejaVuSans-53\\\"/>\\n\",\n       \"       <use x=\\\"63.623047\\\" xlink:href=\\\"#DejaVuSans-46\\\"/>\\n\",\n       \"       <use x=\\\"95.410156\\\" xlink:href=\\\"#DejaVuSans-52\\\"/>\\n\",\n       \"      </g>\\n\",\n       \"     </g>\\n\",\n       \"    </g>\\n\",\n       \"    <g id=\\\"ytick_4\\\">\\n\",\n       \"     <g id=\\\"line2d_11\\\">\\n\",\n       \"      <g>\\n\",\n       \"       <use style=\\\"stroke:#000000;stroke-width:0.8;\\\" x=\\\"43.78125\\\" xlink:href=\\\"#m3027c25693\\\" y=\\\"25.339172\\\"/>\\n\",\n       \"      </g>\\n\",\n       \"     </g>\\n\",\n       \"     <g id=\\\"text_12\\\">\\n\",\n       \"      <!-- 5.5 -->\\n\",\n       \"      <g transform=\\\"translate(20.878125 29.138391)scale(0.1 -0.1)\\\">\\n\",\n       \"       <use xlink:href=\\\"#DejaVuSans-53\\\"/>\\n\",\n       \"       <use x=\\\"63.623047\\\" xlink:href=\\\"#DejaVuSans-46\\\"/>\\n\",\n       \"       <use x=\\\"95.410156\\\" xlink:href=\\\"#DejaVuSans-53\\\"/>\\n\",\n       \"      </g>\\n\",\n       \"     </g>\\n\",\n       \"    </g>\\n\",\n       \"    <g id=\\\"text_13\\\">\\n\",\n       \"     <!-- Vertical disp. [m] -->\\n\",\n       \"     <defs>\\n\",\n       \"      <path d=\\\"M 28.609375 0 \\n\",\n       \"L 0.78125 72.90625 \\n\",\n       \"L 11.078125 72.90625 \\n\",\n       \"L 34.1875 11.53125 \\n\",\n       \"L 57.328125 72.90625 \\n\",\n       \"L 67.578125 72.90625 \\n\",\n       \"L 39.796875 0 \\n\",\n       \"z\\n\",\n       \"\\\" id=\\\"DejaVuSans-86\\\"/>\\n\",\n       \"      <path d=\\\"M 41.109375 46.296875 \\n\",\n       \"Q 39.59375 47.171875 37.8125 47.578125 \\n\",\n       \"Q 36.03125 48 33.890625 48 \\n\",\n       \"Q 26.265625 48 22.1875 43.046875 \\n\",\n       \"Q 18.109375 38.09375 18.109375 28.8125 \\n\",\n       \"L 18.109375 0 \\n\",\n       \"L 9.078125 0 \\n\",\n       \"L 9.078125 54.6875 \\n\",\n       \"L 18.109375 54.6875 \\n\",\n       \"L 18.109375 46.1875 \\n\",\n       \"Q 20.953125 51.171875 25.484375 53.578125 \\n\",\n       \"Q 30.03125 56 36.53125 56 \\n\",\n       \"Q 37.453125 56 38.578125 55.875 \\n\",\n       \"Q 39.703125 55.765625 41.0625 55.515625 \\n\",\n       \"z\\n\",\n       \"\\\" id=\\\"DejaVuSans-114\\\"/>\\n\",\n       \"      <path d=\\\"M 48.78125 52.59375 \\n\",\n       \"L 48.78125 44.1875 \\n\",\n       \"Q 44.96875 46.296875 41.140625 47.34375 \\n\",\n       \"Q 37.3125 48.390625 33.40625 48.390625 \\n\",\n       \"Q 24.65625 48.390625 19.8125 42.84375 \\n\",\n       \"Q 14.984375 37.3125 14.984375 27.296875 \\n\",\n       \"Q 14.984375 17.28125 19.8125 11.734375 \\n\",\n       \"Q 24.65625 6.203125 33.40625 6.203125 \\n\",\n       \"Q 37.3125 6.203125 41.140625 7.25 \\n\",\n       \"Q 44.96875 8.296875 48.78125 10.40625 \\n\",\n       \"L 48.78125 2.09375 \\n\",\n       \"Q 45.015625 0.34375 40.984375 -0.53125 \\n\",\n       \"Q 36.96875 -1.421875 32.421875 -1.421875 \\n\",\n       \"Q 20.0625 -1.421875 12.78125 6.34375 \\n\",\n       \"Q 5.515625 14.109375 5.515625 27.296875 \\n\",\n       \"Q 5.515625 40.671875 12.859375 48.328125 \\n\",\n       \"Q 20.21875 56 33.015625 56 \\n\",\n       \"Q 37.15625 56 41.109375 55.140625 \\n\",\n       \"Q 45.0625 54.296875 48.78125 52.59375 \\n\",\n       \"z\\n\",\n       \"\\\" id=\\\"DejaVuSans-99\\\"/>\\n\",\n       \"      <path d=\\\"M 34.28125 27.484375 \\n\",\n       \"Q 23.390625 27.484375 19.1875 25 \\n\",\n       \"Q 14.984375 22.515625 14.984375 16.5 \\n\",\n       \"Q 14.984375 11.71875 18.140625 8.90625 \\n\",\n       \"Q 21.296875 6.109375 26.703125 6.109375 \\n\",\n       \"Q 34.1875 6.109375 38.703125 11.40625 \\n\",\n       \"Q 43.21875 16.703125 43.21875 25.484375 \\n\",\n       \"L 43.21875 27.484375 \\n\",\n       \"z\\n\",\n       \"M 52.203125 31.203125 \\n\",\n       \"L 52.203125 0 \\n\",\n       \"L 43.21875 0 \\n\",\n       \"L 43.21875 8.296875 \\n\",\n       \"Q 40.140625 3.328125 35.546875 0.953125 \\n\",\n       \"Q 30.953125 -1.421875 24.3125 -1.421875 \\n\",\n       \"Q 15.921875 -1.421875 10.953125 3.296875 \\n\",\n       \"Q 6 8.015625 6 15.921875 \\n\",\n       \"Q 6 25.140625 12.171875 29.828125 \\n\",\n       \"Q 18.359375 34.515625 30.609375 34.515625 \\n\",\n       \"L 43.21875 34.515625 \\n\",\n       \"L 43.21875 35.40625 \\n\",\n       \"Q 43.21875 41.609375 39.140625 45 \\n\",\n       \"Q 35.0625 48.390625 27.6875 48.390625 \\n\",\n       \"Q 23 48.390625 18.546875 47.265625 \\n\",\n       \"Q 14.109375 46.140625 10.015625 43.890625 \\n\",\n       \"L 10.015625 52.203125 \\n\",\n       \"Q 14.9375 54.109375 19.578125 55.046875 \\n\",\n       \"Q 24.21875 56 28.609375 56 \\n\",\n       \"Q 40.484375 56 46.34375 49.84375 \\n\",\n       \"Q 52.203125 43.703125 52.203125 31.203125 \\n\",\n       \"z\\n\",\n       \"\\\" id=\\\"DejaVuSans-97\\\"/>\\n\",\n       \"      <path d=\\\"M 9.421875 75.984375 \\n\",\n       \"L 18.40625 75.984375 \\n\",\n       \"L 18.40625 0 \\n\",\n       \"L 9.421875 0 \\n\",\n       \"z\\n\",\n       \"\\\" id=\\\"DejaVuSans-108\\\"/>\\n\",\n       \"      <path d=\\\"M 45.40625 46.390625 \\n\",\n       \"L 45.40625 75.984375 \\n\",\n       \"L 54.390625 75.984375 \\n\",\n       \"L 54.390625 0 \\n\",\n       \"L 45.40625 0 \\n\",\n       \"L 45.40625 8.203125 \\n\",\n       \"Q 42.578125 3.328125 38.25 0.953125 \\n\",\n       \"Q 33.9375 -1.421875 27.875 -1.421875 \\n\",\n       \"Q 17.96875 -1.421875 11.734375 6.484375 \\n\",\n       \"Q 5.515625 14.40625 5.515625 27.296875 \\n\",\n       \"Q 5.515625 40.1875 11.734375 48.09375 \\n\",\n       \"Q 17.96875 56 27.875 56 \\n\",\n       \"Q 33.9375 56 38.25 53.625 \\n\",\n       \"Q 42.578125 51.265625 45.40625 46.390625 \\n\",\n       \"z\\n\",\n       \"M 14.796875 27.296875 \\n\",\n       \"Q 14.796875 17.390625 18.875 11.75 \\n\",\n       \"Q 22.953125 6.109375 30.078125 6.109375 \\n\",\n       \"Q 37.203125 6.109375 41.296875 11.75 \\n\",\n       \"Q 45.40625 17.390625 45.40625 27.296875 \\n\",\n       \"Q 45.40625 37.203125 41.296875 42.84375 \\n\",\n       \"Q 37.203125 48.484375 30.078125 48.484375 \\n\",\n       \"Q 22.953125 48.484375 18.875 42.84375 \\n\",\n       \"Q 14.796875 37.203125 14.796875 27.296875 \\n\",\n       \"z\\n\",\n       \"\\\" id=\\\"DejaVuSans-100\\\"/>\\n\",\n       \"      <path d=\\\"M 18.109375 8.203125 \\n\",\n       \"L 18.109375 -20.796875 \\n\",\n       \"L 9.078125 -20.796875 \\n\",\n       \"L 9.078125 54.6875 \\n\",\n       \"L 18.109375 54.6875 \\n\",\n       \"L 18.109375 46.390625 \\n\",\n       \"Q 20.953125 51.265625 25.265625 53.625 \\n\",\n       \"Q 29.59375 56 35.59375 56 \\n\",\n       \"Q 45.5625 56 51.78125 48.09375 \\n\",\n       \"Q 58.015625 40.1875 58.015625 27.296875 \\n\",\n       \"Q 58.015625 14.40625 51.78125 6.484375 \\n\",\n       \"Q 45.5625 -1.421875 35.59375 -1.421875 \\n\",\n       \"Q 29.59375 -1.421875 25.265625 0.953125 \\n\",\n       \"Q 20.953125 3.328125 18.109375 8.203125 \\n\",\n       \"z\\n\",\n       \"M 48.6875 27.296875 \\n\",\n       \"Q 48.6875 37.203125 44.609375 42.84375 \\n\",\n       \"Q 40.53125 48.484375 33.40625 48.484375 \\n\",\n       \"Q 26.265625 48.484375 22.1875 42.84375 \\n\",\n       \"Q 18.109375 37.203125 18.109375 27.296875 \\n\",\n       \"Q 18.109375 17.390625 22.1875 11.75 \\n\",\n       \"Q 26.265625 6.109375 33.40625 6.109375 \\n\",\n       \"Q 40.53125 6.109375 44.609375 11.75 \\n\",\n       \"Q 48.6875 17.390625 48.6875 27.296875 \\n\",\n       \"z\\n\",\n       \"\\\" id=\\\"DejaVuSans-112\\\"/>\\n\",\n       \"     </defs>\\n\",\n       \"     <g transform=\\\"translate(14.798438 131.719687)rotate(-90)scale(0.1 -0.1)\\\">\\n\",\n       \"      <use xlink:href=\\\"#DejaVuSans-86\\\"/>\\n\",\n       \"      <use x=\\\"68.298828\\\" xlink:href=\\\"#DejaVuSans-101\\\"/>\\n\",\n       \"      <use x=\\\"129.822266\\\" xlink:href=\\\"#DejaVuSans-114\\\"/>\\n\",\n       \"      <use x=\\\"170.935547\\\" xlink:href=\\\"#DejaVuSans-116\\\"/>\\n\",\n       \"      <use x=\\\"210.144531\\\" xlink:href=\\\"#DejaVuSans-105\\\"/>\\n\",\n       \"      <use x=\\\"237.927734\\\" xlink:href=\\\"#DejaVuSans-99\\\"/>\\n\",\n       \"      <use x=\\\"292.908203\\\" xlink:href=\\\"#DejaVuSans-97\\\"/>\\n\",\n       \"      <use x=\\\"354.1875\\\" xlink:href=\\\"#DejaVuSans-108\\\"/>\\n\",\n       \"      <use x=\\\"381.970703\\\" xlink:href=\\\"#DejaVuSans-32\\\"/>\\n\",\n       \"      <use x=\\\"413.757812\\\" xlink:href=\\\"#DejaVuSans-100\\\"/>\\n\",\n       \"      <use x=\\\"477.234375\\\" xlink:href=\\\"#DejaVuSans-105\\\"/>\\n\",\n       \"      <use x=\\\"505.017578\\\" xlink:href=\\\"#DejaVuSans-115\\\"/>\\n\",\n       \"      <use x=\\\"557.117188\\\" xlink:href=\\\"#DejaVuSans-112\\\"/>\\n\",\n       \"      <use x=\\\"620.59375\\\" xlink:href=\\\"#DejaVuSans-46\\\"/>\\n\",\n       \"      <use x=\\\"652.380859\\\" xlink:href=\\\"#DejaVuSans-32\\\"/>\\n\",\n       \"      <use x=\\\"684.167969\\\" xlink:href=\\\"#DejaVuSans-91\\\"/>\\n\",\n       \"      <use x=\\\"723.181641\\\" xlink:href=\\\"#DejaVuSans-109\\\"/>\\n\",\n       \"      <use x=\\\"820.59375\\\" xlink:href=\\\"#DejaVuSans-93\\\"/>\\n\",\n       \"     </g>\\n\",\n       \"    </g>\\n\",\n       \"   </g>\\n\",\n       \"   <g id=\\\"line2d_12\\\">\\n\",\n       \"    <path clip-path=\\\"url(#pbf4da662ad)\\\" d=\\\"M 61.535795 126.055773 \\n\",\n       \"L 62.127614 126.14429 \\n\",\n       \"L 65.382614 127.348296 \\n\",\n       \"L 68.341705 128.088635 \\n\",\n       \"L 68.637614 128.043603 \\n\",\n       \"L 68.933523 127.847564 \\n\",\n       \"L 69.229432 127.423595 \\n\",\n       \"L 69.525341 126.690256 \\n\",\n       \"L 69.82125 125.564338 \\n\",\n       \"L 70.413068 121.814189 \\n\",\n       \"L 71.004886 115.600674 \\n\",\n       \"L 71.596705 106.594269 \\n\",\n       \"L 72.484432 88.184606 \\n\",\n       \"L 74.851705 31.968818 \\n\",\n       \"L 75.443523 22.571079 \\n\",\n       \"L 76.035341 16.639501 \\n\",\n       \"L 76.33125 15.116638 \\n\",\n       \"L 76.627159 14.612727 \\n\",\n       \"L 76.923068 15.123526 \\n\",\n       \"L 77.218977 16.607406 \\n\",\n       \"L 77.810795 22.199175 \\n\",\n       \"L 78.402614 30.670188 \\n\",\n       \"L 79.58625 52.735721 \\n\",\n       \"L 80.769886 74.779374 \\n\",\n       \"L 81.657614 87.064531 \\n\",\n       \"L 82.249432 92.626861 \\n\",\n       \"L 82.84125 96.343014 \\n\",\n       \"L 83.433068 98.714204 \\n\",\n       \"L 84.024886 100.248438 \\n\",\n       \"L 85.800341 103.849541 \\n\",\n       \"L 86.392159 106.067099 \\n\",\n       \"L 86.983977 109.439707 \\n\",\n       \"L 87.575795 114.199846 \\n\",\n       \"L 88.463523 123.878728 \\n\",\n       \"L 91.126705 156.38919 \\n\",\n       \"L 91.718523 160.502386 \\n\",\n       \"L 92.014432 161.809479 \\n\",\n       \"L 92.310341 162.595879 \\n\",\n       \"L 92.60625 162.867273 \\n\",\n       \"L 92.902159 162.652296 \\n\",\n       \"L 93.198068 162.001644 \\n\",\n       \"L 93.789886 159.665219 \\n\",\n       \"L 96.157159 147.915039 \\n\",\n       \"L 96.748977 146.773155 \\n\",\n       \"L 97.044886 146.571904 \\n\",\n       \"L 97.340795 146.581212 \\n\",\n       \"L 97.932614 147.044714 \\n\",\n       \"L 99.11625 148.365083 \\n\",\n       \"L 99.708068 148.61915 \\n\",\n       \"L 100.003977 148.571734 \\n\",\n       \"L 100.595795 148.143254 \\n\",\n       \"L 101.483523 146.960155 \\n\",\n       \"L 102.37125 145.723354 \\n\",\n       \"L 102.963068 145.181959 \\n\",\n       \"L 103.554886 144.961564 \\n\",\n       \"L 104.146705 145.040941 \\n\",\n       \"L 105.034432 145.510348 \\n\",\n       \"L 105.922159 145.989218 \\n\",\n       \"L 106.513977 146.130082 \\n\",\n       \"L 107.105795 146.063738 \\n\",\n       \"L 107.697614 145.801679 \\n\",\n       \"L 108.88125 144.951102 \\n\",\n       \"L 110.064886 144.191673 \\n\",\n       \"L 110.952614 143.91185 \\n\",\n       \"L 112.13625 143.839379 \\n\",\n       \"L 113.615795 143.727044 \\n\",\n       \"L 114.799432 143.338442 \\n\",\n       \"L 117.758523 142.090541 \\n\",\n       \"L 119.829886 141.656882 \\n\",\n       \"L 121.605341 141.185655 \\n\",\n       \"L 126.339886 139.675722 \\n\",\n       \"L 129.594886 138.739957 \\n\",\n       \"L 134.033523 137.434052 \\n\",\n       \"L 151.492159 132.713678 \\n\",\n       \"L 159.185795 130.927447 \\n\",\n       \"L 166.287614 129.491109 \\n\",\n       \"L 173.093523 128.332022 \\n\",\n       \"L 179.603523 127.440544 \\n\",\n       \"L 186.113523 126.773487 \\n\",\n       \"L 192.623523 126.337325 \\n\",\n       \"L 199.133523 126.132866 \\n\",\n       \"L 205.643523 126.154944 \\n\",\n       \"L 212.449432 126.408287 \\n\",\n       \"L 219.55125 126.903126 \\n\",\n       \"L 227.244886 127.671786 \\n\",\n       \"L 235.82625 128.761021 \\n\",\n       \"L 246.478977 130.349985 \\n\",\n       \"L 280.508523 135.603989 \\n\",\n       \"L 289.977614 136.736815 \\n\",\n       \"L 298.854886 137.571003 \\n\",\n       \"L 307.43625 138.147785 \\n\",\n       \"L 316.017614 138.493912 \\n\",\n       \"L 324.598977 138.616406 \\n\",\n       \"L 333.772159 138.519154 \\n\",\n       \"L 343.537159 138.189593 \\n\",\n       \"L 354.781705 137.578331 \\n\",\n       \"L 368.985341 136.564907 \\n\",\n       \"L 412.779886 133.272247 \\n\",\n       \"L 416.626705 133.054606 \\n\",\n       \"L 416.626705 133.054606 \\n\",\n       \"\\\" style=\\\"fill:none;stroke:#1f77b4;stroke-linecap:square;stroke-width:1.5;\\\"/>\\n\",\n       \"   </g>\\n\",\n       \"   <g id=\\\"patch_3\\\">\\n\",\n       \"    <path d=\\\"M 43.78125 170.28 \\n\",\n       \"L 43.78125 7.2 \\n\",\n       \"\\\" style=\\\"fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;stroke-width:0.8;\\\"/>\\n\",\n       \"   </g>\\n\",\n       \"   <g id=\\\"patch_4\\\">\\n\",\n       \"    <path d=\\\"M 434.38125 170.28 \\n\",\n       \"L 434.38125 7.2 \\n\",\n       \"\\\" style=\\\"fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;stroke-width:0.8;\\\"/>\\n\",\n       \"   </g>\\n\",\n       \"   <g id=\\\"patch_5\\\">\\n\",\n       \"    <path d=\\\"M 43.78125 170.28 \\n\",\n       \"L 434.38125 170.28 \\n\",\n       \"\\\" style=\\\"fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;stroke-width:0.8;\\\"/>\\n\",\n       \"   </g>\\n\",\n       \"   <g id=\\\"patch_6\\\">\\n\",\n       \"    <path d=\\\"M 43.78125 7.2 \\n\",\n       \"L 434.38125 7.2 \\n\",\n       \"\\\" style=\\\"fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;stroke-width:0.8;\\\"/>\\n\",\n       \"   </g>\\n\",\n       \"  </g>\\n\",\n       \" </g>\\n\",\n       \" <defs>\\n\",\n       \"  <clipPath id=\\\"pbf4da662ad\\\">\\n\",\n       \"   <rect height=\\\"163.08\\\" width=\\\"390.6\\\" x=\\\"43.78125\\\" y=\\\"7.2\\\"/>\\n\",\n       \"  </clipPath>\\n\",\n       \" </defs>\\n\",\n       \"</svg>\\n\"\n      ],\n      \"text/plain\": [\n       \"<Figure size 504x216 with 1 Axes>\"\n      ]\n     },\n     \"metadata\": {\n      \"needs_background\": \"light\"\n     },\n     \"output_type\": \"display_data\"\n    }\n   ],\n   \"source\": [\n    \"fig, ax = plt.subplots(1, 1, figsize=(7, 3))\\n\",\n    \"\\n\",\n    \"# extract information\\n\",\n    \"n_tsteps = len(case_data.structure.timestep_info)\\n\",\n    \"xz = np.zeros((n_tsteps, 2))\\n\",\n    \"for it in range(n_tsteps):\\n\",\n    \"    xz[it, 0] = case_data.structure.timestep_info[it].pos[tip_node, 0]\\n\",\n    \"    xz[it, 1] = case_data.structure.timestep_info[it].pos[tip_node, 2]\\n\",\n    \"ax.plot(time_vec, xz[:, 1])\\n\",\n    \"# fig.suptitle('Longitudinal trajectory of the T-Tail model in a 20% 1-cos gust encounter')\\n\",\n    \"ax.set_xlabel('time [s]')\\n\",\n    \"ax.set_ylabel('Vertical disp. [m]');\\n\",\n    \"plt.show()\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 15,\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"data\": {\n      \"image/svg+xml\": [\n       \"<?xml version=\\\"1.0\\\" encoding=\\\"utf-8\\\" standalone=\\\"no\\\"?>\\n\",\n       \"<!DOCTYPE svg PUBLIC \\\"-//W3C//DTD SVG 1.1//EN\\\"\\n\",\n       \"  \\\"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\\\">\\n\",\n       \"<!-- Created with matplotlib (https://matplotlib.org/) -->\\n\",\n       \"<svg height=\\\"207.83625pt\\\" version=\\\"1.1\\\" viewBox=\\\"0 0 467.52125 207.83625\\\" width=\\\"467.52125pt\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\" xmlns:xlink=\\\"http://www.w3.org/1999/xlink\\\">\\n\",\n       \" <defs>\\n\",\n       \"  <style type=\\\"text/css\\\">\\n\",\n       \"*{stroke-linecap:butt;stroke-linejoin:round;}\\n\",\n       \"  </style>\\n\",\n       \" </defs>\\n\",\n       \" <g id=\\\"figure_1\\\">\\n\",\n       \"  <g id=\\\"patch_1\\\">\\n\",\n       \"   <path d=\\\"M 0 207.83625 \\n\",\n       \"L 467.52125 207.83625 \\n\",\n       \"L 467.52125 0 \\n\",\n       \"L 0 0 \\n\",\n       \"z\\n\",\n       \"\\\" style=\\\"fill:none;\\\"/>\\n\",\n       \"  </g>\\n\",\n       \"  <g id=\\\"axes_1\\\">\\n\",\n       \"   <g id=\\\"patch_2\\\">\\n\",\n       \"    <path d=\\\"M 69.72125 170.28 \\n\",\n       \"L 460.32125 170.28 \\n\",\n       \"L 460.32125 7.2 \\n\",\n       \"L 69.72125 7.2 \\n\",\n       \"z\\n\",\n       \"\\\" style=\\\"fill:#ffffff;\\\"/>\\n\",\n       \"   </g>\\n\",\n       \"   <g id=\\\"matplotlib.axis_1\\\">\\n\",\n       \"    <g id=\\\"xtick_1\\\">\\n\",\n       \"     <g id=\\\"line2d_1\\\">\\n\",\n       \"      <defs>\\n\",\n       \"       <path d=\\\"M 0 0 \\n\",\n       \"L 0 3.5 \\n\",\n       \"\\\" id=\\\"mc7eb5682df\\\" style=\\\"stroke:#000000;stroke-width:0.8;\\\"/>\\n\",\n       \"      </defs>\\n\",\n       \"      <g>\\n\",\n       \"       <use style=\\\"stroke:#000000;stroke-width:0.8;\\\" x=\\\"87.475795\\\" xlink:href=\\\"#mc7eb5682df\\\" y=\\\"170.28\\\"/>\\n\",\n       \"      </g>\\n\",\n       \"     </g>\\n\",\n       \"     <g id=\\\"text_1\\\">\\n\",\n       \"      <!-- 0 -->\\n\",\n       \"      <defs>\\n\",\n       \"       <path d=\\\"M 31.78125 66.40625 \\n\",\n       \"Q 24.171875 66.40625 20.328125 58.90625 \\n\",\n       \"Q 16.5 51.421875 16.5 36.375 \\n\",\n       \"Q 16.5 21.390625 20.328125 13.890625 \\n\",\n       \"Q 24.171875 6.390625 31.78125 6.390625 \\n\",\n       \"Q 39.453125 6.390625 43.28125 13.890625 \\n\",\n       \"Q 47.125 21.390625 47.125 36.375 \\n\",\n       \"Q 47.125 51.421875 43.28125 58.90625 \\n\",\n       \"Q 39.453125 66.40625 31.78125 66.40625 \\n\",\n       \"z\\n\",\n       \"M 31.78125 74.21875 \\n\",\n       \"Q 44.046875 74.21875 50.515625 64.515625 \\n\",\n       \"Q 56.984375 54.828125 56.984375 36.375 \\n\",\n       \"Q 56.984375 17.96875 50.515625 8.265625 \\n\",\n       \"Q 44.046875 -1.421875 31.78125 -1.421875 \\n\",\n       \"Q 19.53125 -1.421875 13.0625 8.265625 \\n\",\n       \"Q 6.59375 17.96875 6.59375 36.375 \\n\",\n       \"Q 6.59375 54.828125 13.0625 64.515625 \\n\",\n       \"Q 19.53125 74.21875 31.78125 74.21875 \\n\",\n       \"z\\n\",\n       \"\\\" id=\\\"DejaVuSans-48\\\"/>\\n\",\n       \"      </defs>\\n\",\n       \"      <g transform=\\\"translate(84.294545 184.878438)scale(0.1 -0.1)\\\">\\n\",\n       \"       <use xlink:href=\\\"#DejaVuSans-48\\\"/>\\n\",\n       \"      </g>\\n\",\n       \"     </g>\\n\",\n       \"    </g>\\n\",\n       \"    <g id=\\\"xtick_2\\\">\\n\",\n       \"     <g id=\\\"line2d_2\\\">\\n\",\n       \"      <g>\\n\",\n       \"       <use style=\\\"stroke:#000000;stroke-width:0.8;\\\" x=\\\"146.608337\\\" xlink:href=\\\"#mc7eb5682df\\\" y=\\\"170.28\\\"/>\\n\",\n       \"      </g>\\n\",\n       \"     </g>\\n\",\n       \"     <g id=\\\"text_2\\\">\\n\",\n       \"      <!-- 5 -->\\n\",\n       \"      <defs>\\n\",\n       \"       <path d=\\\"M 10.796875 72.90625 \\n\",\n       \"L 49.515625 72.90625 \\n\",\n       \"L 49.515625 64.59375 \\n\",\n       \"L 19.828125 64.59375 \\n\",\n       \"L 19.828125 46.734375 \\n\",\n       \"Q 21.96875 47.46875 24.109375 47.828125 \\n\",\n       \"Q 26.265625 48.1875 28.421875 48.1875 \\n\",\n       \"Q 40.625 48.1875 47.75 41.5 \\n\",\n       \"Q 54.890625 34.8125 54.890625 23.390625 \\n\",\n       \"Q 54.890625 11.625 47.5625 5.09375 \\n\",\n       \"Q 40.234375 -1.421875 26.90625 -1.421875 \\n\",\n       \"Q 22.3125 -1.421875 17.546875 -0.640625 \\n\",\n       \"Q 12.796875 0.140625 7.71875 1.703125 \\n\",\n       \"L 7.71875 11.625 \\n\",\n       \"Q 12.109375 9.234375 16.796875 8.0625 \\n\",\n       \"Q 21.484375 6.890625 26.703125 6.890625 \\n\",\n       \"Q 35.15625 6.890625 40.078125 11.328125 \\n\",\n       \"Q 45.015625 15.765625 45.015625 23.390625 \\n\",\n       \"Q 45.015625 31 40.078125 35.4375 \\n\",\n       \"Q 35.15625 39.890625 26.703125 39.890625 \\n\",\n       \"Q 22.75 39.890625 18.8125 39.015625 \\n\",\n       \"Q 14.890625 38.140625 10.796875 36.28125 \\n\",\n       \"z\\n\",\n       \"\\\" id=\\\"DejaVuSans-53\\\"/>\\n\",\n       \"      </defs>\\n\",\n       \"      <g transform=\\\"translate(143.427087 184.878438)scale(0.1 -0.1)\\\">\\n\",\n       \"       <use xlink:href=\\\"#DejaVuSans-53\\\"/>\\n\",\n       \"      </g>\\n\",\n       \"     </g>\\n\",\n       \"    </g>\\n\",\n       \"    <g id=\\\"xtick_3\\\">\\n\",\n       \"     <g id=\\\"line2d_3\\\">\\n\",\n       \"      <g>\\n\",\n       \"       <use style=\\\"stroke:#000000;stroke-width:0.8;\\\" x=\\\"205.740878\\\" xlink:href=\\\"#mc7eb5682df\\\" y=\\\"170.28\\\"/>\\n\",\n       \"      </g>\\n\",\n       \"     </g>\\n\",\n       \"     <g id=\\\"text_3\\\">\\n\",\n       \"      <!-- 10 -->\\n\",\n       \"      <defs>\\n\",\n       \"       <path d=\\\"M 12.40625 8.296875 \\n\",\n       \"L 28.515625 8.296875 \\n\",\n       \"L 28.515625 63.921875 \\n\",\n       \"L 10.984375 60.40625 \\n\",\n       \"L 10.984375 69.390625 \\n\",\n       \"L 28.421875 72.90625 \\n\",\n       \"L 38.28125 72.90625 \\n\",\n       \"L 38.28125 8.296875 \\n\",\n       \"L 54.390625 8.296875 \\n\",\n       \"L 54.390625 0 \\n\",\n       \"L 12.40625 0 \\n\",\n       \"z\\n\",\n       \"\\\" id=\\\"DejaVuSans-49\\\"/>\\n\",\n       \"      </defs>\\n\",\n       \"      <g transform=\\\"translate(199.378378 184.878438)scale(0.1 -0.1)\\\">\\n\",\n       \"       <use xlink:href=\\\"#DejaVuSans-49\\\"/>\\n\",\n       \"       <use x=\\\"63.623047\\\" xlink:href=\\\"#DejaVuSans-48\\\"/>\\n\",\n       \"      </g>\\n\",\n       \"     </g>\\n\",\n       \"    </g>\\n\",\n       \"    <g id=\\\"xtick_4\\\">\\n\",\n       \"     <g id=\\\"line2d_4\\\">\\n\",\n       \"      <g>\\n\",\n       \"       <use style=\\\"stroke:#000000;stroke-width:0.8;\\\" x=\\\"264.873419\\\" xlink:href=\\\"#mc7eb5682df\\\" y=\\\"170.28\\\"/>\\n\",\n       \"      </g>\\n\",\n       \"     </g>\\n\",\n       \"     <g id=\\\"text_4\\\">\\n\",\n       \"      <!-- 15 -->\\n\",\n       \"      <g transform=\\\"translate(258.510919 184.878438)scale(0.1 -0.1)\\\">\\n\",\n       \"       <use xlink:href=\\\"#DejaVuSans-49\\\"/>\\n\",\n       \"       <use x=\\\"63.623047\\\" xlink:href=\\\"#DejaVuSans-53\\\"/>\\n\",\n       \"      </g>\\n\",\n       \"     </g>\\n\",\n       \"    </g>\\n\",\n       \"    <g id=\\\"xtick_5\\\">\\n\",\n       \"     <g id=\\\"line2d_5\\\">\\n\",\n       \"      <g>\\n\",\n       \"       <use style=\\\"stroke:#000000;stroke-width:0.8;\\\" x=\\\"324.00596\\\" xlink:href=\\\"#mc7eb5682df\\\" y=\\\"170.28\\\"/>\\n\",\n       \"      </g>\\n\",\n       \"     </g>\\n\",\n       \"     <g id=\\\"text_5\\\">\\n\",\n       \"      <!-- 20 -->\\n\",\n       \"      <defs>\\n\",\n       \"       <path d=\\\"M 19.1875 8.296875 \\n\",\n       \"L 53.609375 8.296875 \\n\",\n       \"L 53.609375 0 \\n\",\n       \"L 7.328125 0 \\n\",\n       \"L 7.328125 8.296875 \\n\",\n       \"Q 12.9375 14.109375 22.625 23.890625 \\n\",\n       \"Q 32.328125 33.6875 34.8125 36.53125 \\n\",\n       \"Q 39.546875 41.84375 41.421875 45.53125 \\n\",\n       \"Q 43.3125 49.21875 43.3125 52.78125 \\n\",\n       \"Q 43.3125 58.59375 39.234375 62.25 \\n\",\n       \"Q 35.15625 65.921875 28.609375 65.921875 \\n\",\n       \"Q 23.96875 65.921875 18.8125 64.3125 \\n\",\n       \"Q 13.671875 62.703125 7.8125 59.421875 \\n\",\n       \"L 7.8125 69.390625 \\n\",\n       \"Q 13.765625 71.78125 18.9375 73 \\n\",\n       \"Q 24.125 74.21875 28.421875 74.21875 \\n\",\n       \"Q 39.75 74.21875 46.484375 68.546875 \\n\",\n       \"Q 53.21875 62.890625 53.21875 53.421875 \\n\",\n       \"Q 53.21875 48.921875 51.53125 44.890625 \\n\",\n       \"Q 49.859375 40.875 45.40625 35.40625 \\n\",\n       \"Q 44.1875 33.984375 37.640625 27.21875 \\n\",\n       \"Q 31.109375 20.453125 19.1875 8.296875 \\n\",\n       \"z\\n\",\n       \"\\\" id=\\\"DejaVuSans-50\\\"/>\\n\",\n       \"      </defs>\\n\",\n       \"      <g transform=\\\"translate(317.64346 184.878438)scale(0.1 -0.1)\\\">\\n\",\n       \"       <use xlink:href=\\\"#DejaVuSans-50\\\"/>\\n\",\n       \"       <use x=\\\"63.623047\\\" xlink:href=\\\"#DejaVuSans-48\\\"/>\\n\",\n       \"      </g>\\n\",\n       \"     </g>\\n\",\n       \"    </g>\\n\",\n       \"    <g id=\\\"xtick_6\\\">\\n\",\n       \"     <g id=\\\"line2d_6\\\">\\n\",\n       \"      <g>\\n\",\n       \"       <use style=\\\"stroke:#000000;stroke-width:0.8;\\\" x=\\\"383.138501\\\" xlink:href=\\\"#mc7eb5682df\\\" y=\\\"170.28\\\"/>\\n\",\n       \"      </g>\\n\",\n       \"     </g>\\n\",\n       \"     <g id=\\\"text_6\\\">\\n\",\n       \"      <!-- 25 -->\\n\",\n       \"      <g transform=\\\"translate(376.776001 184.878438)scale(0.1 -0.1)\\\">\\n\",\n       \"       <use xlink:href=\\\"#DejaVuSans-50\\\"/>\\n\",\n       \"       <use x=\\\"63.623047\\\" xlink:href=\\\"#DejaVuSans-53\\\"/>\\n\",\n       \"      </g>\\n\",\n       \"     </g>\\n\",\n       \"    </g>\\n\",\n       \"    <g id=\\\"xtick_7\\\">\\n\",\n       \"     <g id=\\\"line2d_7\\\">\\n\",\n       \"      <g>\\n\",\n       \"       <use style=\\\"stroke:#000000;stroke-width:0.8;\\\" x=\\\"442.271042\\\" xlink:href=\\\"#mc7eb5682df\\\" y=\\\"170.28\\\"/>\\n\",\n       \"      </g>\\n\",\n       \"     </g>\\n\",\n       \"     <g id=\\\"text_7\\\">\\n\",\n       \"      <!-- 30 -->\\n\",\n       \"      <defs>\\n\",\n       \"       <path d=\\\"M 40.578125 39.3125 \\n\",\n       \"Q 47.65625 37.796875 51.625 33 \\n\",\n       \"Q 55.609375 28.21875 55.609375 21.1875 \\n\",\n       \"Q 55.609375 10.40625 48.1875 4.484375 \\n\",\n       \"Q 40.765625 -1.421875 27.09375 -1.421875 \\n\",\n       \"Q 22.515625 -1.421875 17.65625 -0.515625 \\n\",\n       \"Q 12.796875 0.390625 7.625 2.203125 \\n\",\n       \"L 7.625 11.71875 \\n\",\n       \"Q 11.71875 9.328125 16.59375 8.109375 \\n\",\n       \"Q 21.484375 6.890625 26.8125 6.890625 \\n\",\n       \"Q 36.078125 6.890625 40.9375 10.546875 \\n\",\n       \"Q 45.796875 14.203125 45.796875 21.1875 \\n\",\n       \"Q 45.796875 27.640625 41.28125 31.265625 \\n\",\n       \"Q 36.765625 34.90625 28.71875 34.90625 \\n\",\n       \"L 20.21875 34.90625 \\n\",\n       \"L 20.21875 43.015625 \\n\",\n       \"L 29.109375 43.015625 \\n\",\n       \"Q 36.375 43.015625 40.234375 45.921875 \\n\",\n       \"Q 44.09375 48.828125 44.09375 54.296875 \\n\",\n       \"Q 44.09375 59.90625 40.109375 62.90625 \\n\",\n       \"Q 36.140625 65.921875 28.71875 65.921875 \\n\",\n       \"Q 24.65625 65.921875 20.015625 65.03125 \\n\",\n       \"Q 15.375 64.15625 9.8125 62.3125 \\n\",\n       \"L 9.8125 71.09375 \\n\",\n       \"Q 15.4375 72.65625 20.34375 73.4375 \\n\",\n       \"Q 25.25 74.21875 29.59375 74.21875 \\n\",\n       \"Q 40.828125 74.21875 47.359375 69.109375 \\n\",\n       \"Q 53.90625 64.015625 53.90625 55.328125 \\n\",\n       \"Q 53.90625 49.265625 50.4375 45.09375 \\n\",\n       \"Q 46.96875 40.921875 40.578125 39.3125 \\n\",\n       \"z\\n\",\n       \"\\\" id=\\\"DejaVuSans-51\\\"/>\\n\",\n       \"      </defs>\\n\",\n       \"      <g transform=\\\"translate(435.908542 184.878438)scale(0.1 -0.1)\\\">\\n\",\n       \"       <use xlink:href=\\\"#DejaVuSans-51\\\"/>\\n\",\n       \"       <use x=\\\"63.623047\\\" xlink:href=\\\"#DejaVuSans-48\\\"/>\\n\",\n       \"      </g>\\n\",\n       \"     </g>\\n\",\n       \"    </g>\\n\",\n       \"    <g id=\\\"text_8\\\">\\n\",\n       \"     <!-- time [s] -->\\n\",\n       \"     <defs>\\n\",\n       \"      <path d=\\\"M 18.3125 70.21875 \\n\",\n       \"L 18.3125 54.6875 \\n\",\n       \"L 36.8125 54.6875 \\n\",\n       \"L 36.8125 47.703125 \\n\",\n       \"L 18.3125 47.703125 \\n\",\n       \"L 18.3125 18.015625 \\n\",\n       \"Q 18.3125 11.328125 20.140625 9.421875 \\n\",\n       \"Q 21.96875 7.515625 27.59375 7.515625 \\n\",\n       \"L 36.8125 7.515625 \\n\",\n       \"L 36.8125 0 \\n\",\n       \"L 27.59375 0 \\n\",\n       \"Q 17.1875 0 13.234375 3.875 \\n\",\n       \"Q 9.28125 7.765625 9.28125 18.015625 \\n\",\n       \"L 9.28125 47.703125 \\n\",\n       \"L 2.6875 47.703125 \\n\",\n       \"L 2.6875 54.6875 \\n\",\n       \"L 9.28125 54.6875 \\n\",\n       \"L 9.28125 70.21875 \\n\",\n       \"z\\n\",\n       \"\\\" id=\\\"DejaVuSans-116\\\"/>\\n\",\n       \"      <path d=\\\"M 9.421875 54.6875 \\n\",\n       \"L 18.40625 54.6875 \\n\",\n       \"L 18.40625 0 \\n\",\n       \"L 9.421875 0 \\n\",\n       \"z\\n\",\n       \"M 9.421875 75.984375 \\n\",\n       \"L 18.40625 75.984375 \\n\",\n       \"L 18.40625 64.59375 \\n\",\n       \"L 9.421875 64.59375 \\n\",\n       \"z\\n\",\n       \"\\\" id=\\\"DejaVuSans-105\\\"/>\\n\",\n       \"      <path d=\\\"M 52 44.1875 \\n\",\n       \"Q 55.375 50.25 60.0625 53.125 \\n\",\n       \"Q 64.75 56 71.09375 56 \\n\",\n       \"Q 79.640625 56 84.28125 50.015625 \\n\",\n       \"Q 88.921875 44.046875 88.921875 33.015625 \\n\",\n       \"L 88.921875 0 \\n\",\n       \"L 79.890625 0 \\n\",\n       \"L 79.890625 32.71875 \\n\",\n       \"Q 79.890625 40.578125 77.09375 44.375 \\n\",\n       \"Q 74.3125 48.1875 68.609375 48.1875 \\n\",\n       \"Q 61.625 48.1875 57.5625 43.546875 \\n\",\n       \"Q 53.515625 38.921875 53.515625 30.90625 \\n\",\n       \"L 53.515625 0 \\n\",\n       \"L 44.484375 0 \\n\",\n       \"L 44.484375 32.71875 \\n\",\n       \"Q 44.484375 40.625 41.703125 44.40625 \\n\",\n       \"Q 38.921875 48.1875 33.109375 48.1875 \\n\",\n       \"Q 26.21875 48.1875 22.15625 43.53125 \\n\",\n       \"Q 18.109375 38.875 18.109375 30.90625 \\n\",\n       \"L 18.109375 0 \\n\",\n       \"L 9.078125 0 \\n\",\n       \"L 9.078125 54.6875 \\n\",\n       \"L 18.109375 54.6875 \\n\",\n       \"L 18.109375 46.1875 \\n\",\n       \"Q 21.1875 51.21875 25.484375 53.609375 \\n\",\n       \"Q 29.78125 56 35.6875 56 \\n\",\n       \"Q 41.65625 56 45.828125 52.96875 \\n\",\n       \"Q 50 49.953125 52 44.1875 \\n\",\n       \"z\\n\",\n       \"\\\" id=\\\"DejaVuSans-109\\\"/>\\n\",\n       \"      <path d=\\\"M 56.203125 29.59375 \\n\",\n       \"L 56.203125 25.203125 \\n\",\n       \"L 14.890625 25.203125 \\n\",\n       \"Q 15.484375 15.921875 20.484375 11.0625 \\n\",\n       \"Q 25.484375 6.203125 34.421875 6.203125 \\n\",\n       \"Q 39.59375 6.203125 44.453125 7.46875 \\n\",\n       \"Q 49.3125 8.734375 54.109375 11.28125 \\n\",\n       \"L 54.109375 2.78125 \\n\",\n       \"Q 49.265625 0.734375 44.1875 -0.34375 \\n\",\n       \"Q 39.109375 -1.421875 33.890625 -1.421875 \\n\",\n       \"Q 20.796875 -1.421875 13.15625 6.1875 \\n\",\n       \"Q 5.515625 13.8125 5.515625 26.8125 \\n\",\n       \"Q 5.515625 40.234375 12.765625 48.109375 \\n\",\n       \"Q 20.015625 56 32.328125 56 \\n\",\n       \"Q 43.359375 56 49.78125 48.890625 \\n\",\n       \"Q 56.203125 41.796875 56.203125 29.59375 \\n\",\n       \"z\\n\",\n       \"M 47.21875 32.234375 \\n\",\n       \"Q 47.125 39.59375 43.09375 43.984375 \\n\",\n       \"Q 39.0625 48.390625 32.421875 48.390625 \\n\",\n       \"Q 24.90625 48.390625 20.390625 44.140625 \\n\",\n       \"Q 15.875 39.890625 15.1875 32.171875 \\n\",\n       \"z\\n\",\n       \"\\\" id=\\\"DejaVuSans-101\\\"/>\\n\",\n       \"      <path id=\\\"DejaVuSans-32\\\"/>\\n\",\n       \"      <path d=\\\"M 8.59375 75.984375 \\n\",\n       \"L 29.296875 75.984375 \\n\",\n       \"L 29.296875 69 \\n\",\n       \"L 17.578125 69 \\n\",\n       \"L 17.578125 -6.203125 \\n\",\n       \"L 29.296875 -6.203125 \\n\",\n       \"L 29.296875 -13.1875 \\n\",\n       \"L 8.59375 -13.1875 \\n\",\n       \"z\\n\",\n       \"\\\" id=\\\"DejaVuSans-91\\\"/>\\n\",\n       \"      <path d=\\\"M 44.28125 53.078125 \\n\",\n       \"L 44.28125 44.578125 \\n\",\n       \"Q 40.484375 46.53125 36.375 47.5 \\n\",\n       \"Q 32.28125 48.484375 27.875 48.484375 \\n\",\n       \"Q 21.1875 48.484375 17.84375 46.4375 \\n\",\n       \"Q 14.5 44.390625 14.5 40.28125 \\n\",\n       \"Q 14.5 37.15625 16.890625 35.375 \\n\",\n       \"Q 19.28125 33.59375 26.515625 31.984375 \\n\",\n       \"L 29.59375 31.296875 \\n\",\n       \"Q 39.15625 29.25 43.1875 25.515625 \\n\",\n       \"Q 47.21875 21.78125 47.21875 15.09375 \\n\",\n       \"Q 47.21875 7.46875 41.1875 3.015625 \\n\",\n       \"Q 35.15625 -1.421875 24.609375 -1.421875 \\n\",\n       \"Q 20.21875 -1.421875 15.453125 -0.5625 \\n\",\n       \"Q 10.6875 0.296875 5.421875 2 \\n\",\n       \"L 5.421875 11.28125 \\n\",\n       \"Q 10.40625 8.6875 15.234375 7.390625 \\n\",\n       \"Q 20.0625 6.109375 24.8125 6.109375 \\n\",\n       \"Q 31.15625 6.109375 34.5625 8.28125 \\n\",\n       \"Q 37.984375 10.453125 37.984375 14.40625 \\n\",\n       \"Q 37.984375 18.0625 35.515625 20.015625 \\n\",\n       \"Q 33.0625 21.96875 24.703125 23.78125 \\n\",\n       \"L 21.578125 24.515625 \\n\",\n       \"Q 13.234375 26.265625 9.515625 29.90625 \\n\",\n       \"Q 5.8125 33.546875 5.8125 39.890625 \\n\",\n       \"Q 5.8125 47.609375 11.28125 51.796875 \\n\",\n       \"Q 16.75 56 26.8125 56 \\n\",\n       \"Q 31.78125 56 36.171875 55.265625 \\n\",\n       \"Q 40.578125 54.546875 44.28125 53.078125 \\n\",\n       \"z\\n\",\n       \"\\\" id=\\\"DejaVuSans-115\\\"/>\\n\",\n       \"      <path d=\\\"M 30.421875 75.984375 \\n\",\n       \"L 30.421875 -13.1875 \\n\",\n       \"L 9.71875 -13.1875 \\n\",\n       \"L 9.71875 -6.203125 \\n\",\n       \"L 21.390625 -6.203125 \\n\",\n       \"L 21.390625 69 \\n\",\n       \"L 9.71875 69 \\n\",\n       \"L 9.71875 75.984375 \\n\",\n       \"z\\n\",\n       \"\\\" id=\\\"DejaVuSans-93\\\"/>\\n\",\n       \"     </defs>\\n\",\n       \"     <g transform=\\\"translate(245.629844 198.556563)scale(0.1 -0.1)\\\">\\n\",\n       \"      <use xlink:href=\\\"#DejaVuSans-116\\\"/>\\n\",\n       \"      <use x=\\\"39.208984\\\" xlink:href=\\\"#DejaVuSans-105\\\"/>\\n\",\n       \"      <use x=\\\"66.992188\\\" xlink:href=\\\"#DejaVuSans-109\\\"/>\\n\",\n       \"      <use x=\\\"164.404297\\\" xlink:href=\\\"#DejaVuSans-101\\\"/>\\n\",\n       \"      <use x=\\\"225.927734\\\" xlink:href=\\\"#DejaVuSans-32\\\"/>\\n\",\n       \"      <use x=\\\"257.714844\\\" xlink:href=\\\"#DejaVuSans-91\\\"/>\\n\",\n       \"      <use x=\\\"296.728516\\\" xlink:href=\\\"#DejaVuSans-115\\\"/>\\n\",\n       \"      <use x=\\\"348.828125\\\" xlink:href=\\\"#DejaVuSans-93\\\"/>\\n\",\n       \"     </g>\\n\",\n       \"    </g>\\n\",\n       \"   </g>\\n\",\n       \"   <g id=\\\"matplotlib.axis_2\\\">\\n\",\n       \"    <g id=\\\"ytick_1\\\">\\n\",\n       \"     <g id=\\\"line2d_8\\\">\\n\",\n       \"      <defs>\\n\",\n       \"       <path d=\\\"M 0 0 \\n\",\n       \"L -3.5 0 \\n\",\n       \"\\\" id=\\\"m889b0fbc13\\\" style=\\\"stroke:#000000;stroke-width:0.8;\\\"/>\\n\",\n       \"      </defs>\\n\",\n       \"      <g>\\n\",\n       \"       <use style=\\\"stroke:#000000;stroke-width:0.8;\\\" x=\\\"69.72125\\\" xlink:href=\\\"#m889b0fbc13\\\" y=\\\"148.235316\\\"/>\\n\",\n       \"      </g>\\n\",\n       \"     </g>\\n\",\n       \"     <g id=\\\"text_9\\\">\\n\",\n       \"      <!-- −0.04 -->\\n\",\n       \"      <defs>\\n\",\n       \"       <path d=\\\"M 10.59375 35.5 \\n\",\n       \"L 73.1875 35.5 \\n\",\n       \"L 73.1875 27.203125 \\n\",\n       \"L 10.59375 27.203125 \\n\",\n       \"z\\n\",\n       \"\\\" id=\\\"DejaVuSans-8722\\\"/>\\n\",\n       \"       <path d=\\\"M 10.6875 12.40625 \\n\",\n       \"L 21 12.40625 \\n\",\n       \"L 21 0 \\n\",\n       \"L 10.6875 0 \\n\",\n       \"z\\n\",\n       \"\\\" id=\\\"DejaVuSans-46\\\"/>\\n\",\n       \"       <path d=\\\"M 37.796875 64.3125 \\n\",\n       \"L 12.890625 25.390625 \\n\",\n       \"L 37.796875 25.390625 \\n\",\n       \"z\\n\",\n       \"M 35.203125 72.90625 \\n\",\n       \"L 47.609375 72.90625 \\n\",\n       \"L 47.609375 25.390625 \\n\",\n       \"L 58.015625 25.390625 \\n\",\n       \"L 58.015625 17.1875 \\n\",\n       \"L 47.609375 17.1875 \\n\",\n       \"L 47.609375 0 \\n\",\n       \"L 37.796875 0 \\n\",\n       \"L 37.796875 17.1875 \\n\",\n       \"L 4.890625 17.1875 \\n\",\n       \"L 4.890625 26.703125 \\n\",\n       \"z\\n\",\n       \"\\\" id=\\\"DejaVuSans-52\\\"/>\\n\",\n       \"      </defs>\\n\",\n       \"      <g transform=\\\"translate(32.075938 152.034535)scale(0.1 -0.1)\\\">\\n\",\n       \"       <use xlink:href=\\\"#DejaVuSans-8722\\\"/>\\n\",\n       \"       <use x=\\\"83.789062\\\" xlink:href=\\\"#DejaVuSans-48\\\"/>\\n\",\n       \"       <use x=\\\"147.412109\\\" xlink:href=\\\"#DejaVuSans-46\\\"/>\\n\",\n       \"       <use x=\\\"179.199219\\\" xlink:href=\\\"#DejaVuSans-48\\\"/>\\n\",\n       \"       <use x=\\\"242.822266\\\" xlink:href=\\\"#DejaVuSans-52\\\"/>\\n\",\n       \"      </g>\\n\",\n       \"     </g>\\n\",\n       \"    </g>\\n\",\n       \"    <g id=\\\"ytick_2\\\">\\n\",\n       \"     <g id=\\\"line2d_9\\\">\\n\",\n       \"      <g>\\n\",\n       \"       <use style=\\\"stroke:#000000;stroke-width:0.8;\\\" x=\\\"69.72125\\\" xlink:href=\\\"#m889b0fbc13\\\" y=\\\"117.006507\\\"/>\\n\",\n       \"      </g>\\n\",\n       \"     </g>\\n\",\n       \"     <g id=\\\"text_10\\\">\\n\",\n       \"      <!-- −0.02 -->\\n\",\n       \"      <g transform=\\\"translate(32.075938 120.805725)scale(0.1 -0.1)\\\">\\n\",\n       \"       <use xlink:href=\\\"#DejaVuSans-8722\\\"/>\\n\",\n       \"       <use x=\\\"83.789062\\\" xlink:href=\\\"#DejaVuSans-48\\\"/>\\n\",\n       \"       <use x=\\\"147.412109\\\" xlink:href=\\\"#DejaVuSans-46\\\"/>\\n\",\n       \"       <use x=\\\"179.199219\\\" xlink:href=\\\"#DejaVuSans-48\\\"/>\\n\",\n       \"       <use x=\\\"242.822266\\\" xlink:href=\\\"#DejaVuSans-50\\\"/>\\n\",\n       \"      </g>\\n\",\n       \"     </g>\\n\",\n       \"    </g>\\n\",\n       \"    <g id=\\\"ytick_3\\\">\\n\",\n       \"     <g id=\\\"line2d_10\\\">\\n\",\n       \"      <g>\\n\",\n       \"       <use style=\\\"stroke:#000000;stroke-width:0.8;\\\" x=\\\"69.72125\\\" xlink:href=\\\"#m889b0fbc13\\\" y=\\\"85.777697\\\"/>\\n\",\n       \"      </g>\\n\",\n       \"     </g>\\n\",\n       \"     <g id=\\\"text_11\\\">\\n\",\n       \"      <!-- 0.00 -->\\n\",\n       \"      <g transform=\\\"translate(40.455625 89.576916)scale(0.1 -0.1)\\\">\\n\",\n       \"       <use xlink:href=\\\"#DejaVuSans-48\\\"/>\\n\",\n       \"       <use x=\\\"63.623047\\\" xlink:href=\\\"#DejaVuSans-46\\\"/>\\n\",\n       \"       <use x=\\\"95.410156\\\" xlink:href=\\\"#DejaVuSans-48\\\"/>\\n\",\n       \"       <use x=\\\"159.033203\\\" xlink:href=\\\"#DejaVuSans-48\\\"/>\\n\",\n       \"      </g>\\n\",\n       \"     </g>\\n\",\n       \"    </g>\\n\",\n       \"    <g id=\\\"ytick_4\\\">\\n\",\n       \"     <g id=\\\"line2d_11\\\">\\n\",\n       \"      <g>\\n\",\n       \"       <use style=\\\"stroke:#000000;stroke-width:0.8;\\\" x=\\\"69.72125\\\" xlink:href=\\\"#m889b0fbc13\\\" y=\\\"54.548888\\\"/>\\n\",\n       \"      </g>\\n\",\n       \"     </g>\\n\",\n       \"     <g id=\\\"text_12\\\">\\n\",\n       \"      <!-- 0.02 -->\\n\",\n       \"      <g transform=\\\"translate(40.455625 58.348106)scale(0.1 -0.1)\\\">\\n\",\n       \"       <use xlink:href=\\\"#DejaVuSans-48\\\"/>\\n\",\n       \"       <use x=\\\"63.623047\\\" xlink:href=\\\"#DejaVuSans-46\\\"/>\\n\",\n       \"       <use x=\\\"95.410156\\\" xlink:href=\\\"#DejaVuSans-48\\\"/>\\n\",\n       \"       <use x=\\\"159.033203\\\" xlink:href=\\\"#DejaVuSans-50\\\"/>\\n\",\n       \"      </g>\\n\",\n       \"     </g>\\n\",\n       \"    </g>\\n\",\n       \"    <g id=\\\"ytick_5\\\">\\n\",\n       \"     <g id=\\\"line2d_12\\\">\\n\",\n       \"      <g>\\n\",\n       \"       <use style=\\\"stroke:#000000;stroke-width:0.8;\\\" x=\\\"69.72125\\\" xlink:href=\\\"#m889b0fbc13\\\" y=\\\"23.320078\\\"/>\\n\",\n       \"      </g>\\n\",\n       \"     </g>\\n\",\n       \"     <g id=\\\"text_13\\\">\\n\",\n       \"      <!-- 0.04 -->\\n\",\n       \"      <g transform=\\\"translate(40.455625 27.119297)scale(0.1 -0.1)\\\">\\n\",\n       \"       <use xlink:href=\\\"#DejaVuSans-48\\\"/>\\n\",\n       \"       <use x=\\\"63.623047\\\" xlink:href=\\\"#DejaVuSans-46\\\"/>\\n\",\n       \"       <use x=\\\"95.410156\\\" xlink:href=\\\"#DejaVuSans-48\\\"/>\\n\",\n       \"       <use x=\\\"159.033203\\\" xlink:href=\\\"#DejaVuSans-52\\\"/>\\n\",\n       \"      </g>\\n\",\n       \"     </g>\\n\",\n       \"    </g>\\n\",\n       \"    <g id=\\\"text_14\\\">\\n\",\n       \"     <!-- Horizontal disp. [m] -->\\n\",\n       \"     <defs>\\n\",\n       \"      <path d=\\\"M 9.8125 72.90625 \\n\",\n       \"L 19.671875 72.90625 \\n\",\n       \"L 19.671875 43.015625 \\n\",\n       \"L 55.515625 43.015625 \\n\",\n       \"L 55.515625 72.90625 \\n\",\n       \"L 65.375 72.90625 \\n\",\n       \"L 65.375 0 \\n\",\n       \"L 55.515625 0 \\n\",\n       \"L 55.515625 34.71875 \\n\",\n       \"L 19.671875 34.71875 \\n\",\n       \"L 19.671875 0 \\n\",\n       \"L 9.8125 0 \\n\",\n       \"z\\n\",\n       \"\\\" id=\\\"DejaVuSans-72\\\"/>\\n\",\n       \"      <path d=\\\"M 30.609375 48.390625 \\n\",\n       \"Q 23.390625 48.390625 19.1875 42.75 \\n\",\n       \"Q 14.984375 37.109375 14.984375 27.296875 \\n\",\n       \"Q 14.984375 17.484375 19.15625 11.84375 \\n\",\n       \"Q 23.34375 6.203125 30.609375 6.203125 \\n\",\n       \"Q 37.796875 6.203125 41.984375 11.859375 \\n\",\n       \"Q 46.1875 17.53125 46.1875 27.296875 \\n\",\n       \"Q 46.1875 37.015625 41.984375 42.703125 \\n\",\n       \"Q 37.796875 48.390625 30.609375 48.390625 \\n\",\n       \"z\\n\",\n       \"M 30.609375 56 \\n\",\n       \"Q 42.328125 56 49.015625 48.375 \\n\",\n       \"Q 55.71875 40.765625 55.71875 27.296875 \\n\",\n       \"Q 55.71875 13.875 49.015625 6.21875 \\n\",\n       \"Q 42.328125 -1.421875 30.609375 -1.421875 \\n\",\n       \"Q 18.84375 -1.421875 12.171875 6.21875 \\n\",\n       \"Q 5.515625 13.875 5.515625 27.296875 \\n\",\n       \"Q 5.515625 40.765625 12.171875 48.375 \\n\",\n       \"Q 18.84375 56 30.609375 56 \\n\",\n       \"z\\n\",\n       \"\\\" id=\\\"DejaVuSans-111\\\"/>\\n\",\n       \"      <path d=\\\"M 41.109375 46.296875 \\n\",\n       \"Q 39.59375 47.171875 37.8125 47.578125 \\n\",\n       \"Q 36.03125 48 33.890625 48 \\n\",\n       \"Q 26.265625 48 22.1875 43.046875 \\n\",\n       \"Q 18.109375 38.09375 18.109375 28.8125 \\n\",\n       \"L 18.109375 0 \\n\",\n       \"L 9.078125 0 \\n\",\n       \"L 9.078125 54.6875 \\n\",\n       \"L 18.109375 54.6875 \\n\",\n       \"L 18.109375 46.1875 \\n\",\n       \"Q 20.953125 51.171875 25.484375 53.578125 \\n\",\n       \"Q 30.03125 56 36.53125 56 \\n\",\n       \"Q 37.453125 56 38.578125 55.875 \\n\",\n       \"Q 39.703125 55.765625 41.0625 55.515625 \\n\",\n       \"z\\n\",\n       \"\\\" id=\\\"DejaVuSans-114\\\"/>\\n\",\n       \"      <path d=\\\"M 5.515625 54.6875 \\n\",\n       \"L 48.1875 54.6875 \\n\",\n       \"L 48.1875 46.484375 \\n\",\n       \"L 14.40625 7.171875 \\n\",\n       \"L 48.1875 7.171875 \\n\",\n       \"L 48.1875 0 \\n\",\n       \"L 4.296875 0 \\n\",\n       \"L 4.296875 8.203125 \\n\",\n       \"L 38.09375 47.515625 \\n\",\n       \"L 5.515625 47.515625 \\n\",\n       \"z\\n\",\n       \"\\\" id=\\\"DejaVuSans-122\\\"/>\\n\",\n       \"      <path d=\\\"M 54.890625 33.015625 \\n\",\n       \"L 54.890625 0 \\n\",\n       \"L 45.90625 0 \\n\",\n       \"L 45.90625 32.71875 \\n\",\n       \"Q 45.90625 40.484375 42.875 44.328125 \\n\",\n       \"Q 39.84375 48.1875 33.796875 48.1875 \\n\",\n       \"Q 26.515625 48.1875 22.3125 43.546875 \\n\",\n       \"Q 18.109375 38.921875 18.109375 30.90625 \\n\",\n       \"L 18.109375 0 \\n\",\n       \"L 9.078125 0 \\n\",\n       \"L 9.078125 54.6875 \\n\",\n       \"L 18.109375 54.6875 \\n\",\n       \"L 18.109375 46.1875 \\n\",\n       \"Q 21.34375 51.125 25.703125 53.5625 \\n\",\n       \"Q 30.078125 56 35.796875 56 \\n\",\n       \"Q 45.21875 56 50.046875 50.171875 \\n\",\n       \"Q 54.890625 44.34375 54.890625 33.015625 \\n\",\n       \"z\\n\",\n       \"\\\" id=\\\"DejaVuSans-110\\\"/>\\n\",\n       \"      <path d=\\\"M 34.28125 27.484375 \\n\",\n       \"Q 23.390625 27.484375 19.1875 25 \\n\",\n       \"Q 14.984375 22.515625 14.984375 16.5 \\n\",\n       \"Q 14.984375 11.71875 18.140625 8.90625 \\n\",\n       \"Q 21.296875 6.109375 26.703125 6.109375 \\n\",\n       \"Q 34.1875 6.109375 38.703125 11.40625 \\n\",\n       \"Q 43.21875 16.703125 43.21875 25.484375 \\n\",\n       \"L 43.21875 27.484375 \\n\",\n       \"z\\n\",\n       \"M 52.203125 31.203125 \\n\",\n       \"L 52.203125 0 \\n\",\n       \"L 43.21875 0 \\n\",\n       \"L 43.21875 8.296875 \\n\",\n       \"Q 40.140625 3.328125 35.546875 0.953125 \\n\",\n       \"Q 30.953125 -1.421875 24.3125 -1.421875 \\n\",\n       \"Q 15.921875 -1.421875 10.953125 3.296875 \\n\",\n       \"Q 6 8.015625 6 15.921875 \\n\",\n       \"Q 6 25.140625 12.171875 29.828125 \\n\",\n       \"Q 18.359375 34.515625 30.609375 34.515625 \\n\",\n       \"L 43.21875 34.515625 \\n\",\n       \"L 43.21875 35.40625 \\n\",\n       \"Q 43.21875 41.609375 39.140625 45 \\n\",\n       \"Q 35.0625 48.390625 27.6875 48.390625 \\n\",\n       \"Q 23 48.390625 18.546875 47.265625 \\n\",\n       \"Q 14.109375 46.140625 10.015625 43.890625 \\n\",\n       \"L 10.015625 52.203125 \\n\",\n       \"Q 14.9375 54.109375 19.578125 55.046875 \\n\",\n       \"Q 24.21875 56 28.609375 56 \\n\",\n       \"Q 40.484375 56 46.34375 49.84375 \\n\",\n       \"Q 52.203125 43.703125 52.203125 31.203125 \\n\",\n       \"z\\n\",\n       \"\\\" id=\\\"DejaVuSans-97\\\"/>\\n\",\n       \"      <path d=\\\"M 9.421875 75.984375 \\n\",\n       \"L 18.40625 75.984375 \\n\",\n       \"L 18.40625 0 \\n\",\n       \"L 9.421875 0 \\n\",\n       \"z\\n\",\n       \"\\\" id=\\\"DejaVuSans-108\\\"/>\\n\",\n       \"      <path d=\\\"M 45.40625 46.390625 \\n\",\n       \"L 45.40625 75.984375 \\n\",\n       \"L 54.390625 75.984375 \\n\",\n       \"L 54.390625 0 \\n\",\n       \"L 45.40625 0 \\n\",\n       \"L 45.40625 8.203125 \\n\",\n       \"Q 42.578125 3.328125 38.25 0.953125 \\n\",\n       \"Q 33.9375 -1.421875 27.875 -1.421875 \\n\",\n       \"Q 17.96875 -1.421875 11.734375 6.484375 \\n\",\n       \"Q 5.515625 14.40625 5.515625 27.296875 \\n\",\n       \"Q 5.515625 40.1875 11.734375 48.09375 \\n\",\n       \"Q 17.96875 56 27.875 56 \\n\",\n       \"Q 33.9375 56 38.25 53.625 \\n\",\n       \"Q 42.578125 51.265625 45.40625 46.390625 \\n\",\n       \"z\\n\",\n       \"M 14.796875 27.296875 \\n\",\n       \"Q 14.796875 17.390625 18.875 11.75 \\n\",\n       \"Q 22.953125 6.109375 30.078125 6.109375 \\n\",\n       \"Q 37.203125 6.109375 41.296875 11.75 \\n\",\n       \"Q 45.40625 17.390625 45.40625 27.296875 \\n\",\n       \"Q 45.40625 37.203125 41.296875 42.84375 \\n\",\n       \"Q 37.203125 48.484375 30.078125 48.484375 \\n\",\n       \"Q 22.953125 48.484375 18.875 42.84375 \\n\",\n       \"Q 14.796875 37.203125 14.796875 27.296875 \\n\",\n       \"z\\n\",\n       \"\\\" id=\\\"DejaVuSans-100\\\"/>\\n\",\n       \"      <path d=\\\"M 18.109375 8.203125 \\n\",\n       \"L 18.109375 -20.796875 \\n\",\n       \"L 9.078125 -20.796875 \\n\",\n       \"L 9.078125 54.6875 \\n\",\n       \"L 18.109375 54.6875 \\n\",\n       \"L 18.109375 46.390625 \\n\",\n       \"Q 20.953125 51.265625 25.265625 53.625 \\n\",\n       \"Q 29.59375 56 35.59375 56 \\n\",\n       \"Q 45.5625 56 51.78125 48.09375 \\n\",\n       \"Q 58.015625 40.1875 58.015625 27.296875 \\n\",\n       \"Q 58.015625 14.40625 51.78125 6.484375 \\n\",\n       \"Q 45.5625 -1.421875 35.59375 -1.421875 \\n\",\n       \"Q 29.59375 -1.421875 25.265625 0.953125 \\n\",\n       \"Q 20.953125 3.328125 18.109375 8.203125 \\n\",\n       \"z\\n\",\n       \"M 48.6875 27.296875 \\n\",\n       \"Q 48.6875 37.203125 44.609375 42.84375 \\n\",\n       \"Q 40.53125 48.484375 33.40625 48.484375 \\n\",\n       \"Q 26.265625 48.484375 22.1875 42.84375 \\n\",\n       \"Q 18.109375 37.203125 18.109375 27.296875 \\n\",\n       \"Q 18.109375 17.390625 22.1875 11.75 \\n\",\n       \"Q 26.265625 6.109375 33.40625 6.109375 \\n\",\n       \"Q 40.53125 6.109375 44.609375 11.75 \\n\",\n       \"Q 48.6875 17.390625 48.6875 27.296875 \\n\",\n       \"z\\n\",\n       \"\\\" id=\\\"DejaVuSans-112\\\"/>\\n\",\n       \"     </defs>\\n\",\n       \"     <g transform=\\\"translate(14.798438 138.150937)rotate(-90)scale(0.1 -0.1)\\\">\\n\",\n       \"      <use xlink:href=\\\"#DejaVuSans-72\\\"/>\\n\",\n       \"      <use x=\\\"75.195312\\\" xlink:href=\\\"#DejaVuSans-111\\\"/>\\n\",\n       \"      <use x=\\\"136.376953\\\" xlink:href=\\\"#DejaVuSans-114\\\"/>\\n\",\n       \"      <use x=\\\"177.490234\\\" xlink:href=\\\"#DejaVuSans-105\\\"/>\\n\",\n       \"      <use x=\\\"205.273438\\\" xlink:href=\\\"#DejaVuSans-122\\\"/>\\n\",\n       \"      <use x=\\\"257.763672\\\" xlink:href=\\\"#DejaVuSans-111\\\"/>\\n\",\n       \"      <use x=\\\"318.945312\\\" xlink:href=\\\"#DejaVuSans-110\\\"/>\\n\",\n       \"      <use x=\\\"382.324219\\\" xlink:href=\\\"#DejaVuSans-116\\\"/>\\n\",\n       \"      <use x=\\\"421.533203\\\" xlink:href=\\\"#DejaVuSans-97\\\"/>\\n\",\n       \"      <use x=\\\"482.8125\\\" xlink:href=\\\"#DejaVuSans-108\\\"/>\\n\",\n       \"      <use x=\\\"510.595703\\\" xlink:href=\\\"#DejaVuSans-32\\\"/>\\n\",\n       \"      <use x=\\\"542.382812\\\" xlink:href=\\\"#DejaVuSans-100\\\"/>\\n\",\n       \"      <use x=\\\"605.859375\\\" xlink:href=\\\"#DejaVuSans-105\\\"/>\\n\",\n       \"      <use x=\\\"633.642578\\\" xlink:href=\\\"#DejaVuSans-115\\\"/>\\n\",\n       \"      <use x=\\\"685.742188\\\" xlink:href=\\\"#DejaVuSans-112\\\"/>\\n\",\n       \"      <use x=\\\"749.21875\\\" xlink:href=\\\"#DejaVuSans-46\\\"/>\\n\",\n       \"      <use x=\\\"781.005859\\\" xlink:href=\\\"#DejaVuSans-32\\\"/>\\n\",\n       \"      <use x=\\\"812.792969\\\" xlink:href=\\\"#DejaVuSans-91\\\"/>\\n\",\n       \"      <use x=\\\"851.806641\\\" xlink:href=\\\"#DejaVuSans-109\\\"/>\\n\",\n       \"      <use x=\\\"949.21875\\\" xlink:href=\\\"#DejaVuSans-93\\\"/>\\n\",\n       \"     </g>\\n\",\n       \"     <!-- Positive is aft -->\\n\",\n       \"     <defs>\\n\",\n       \"      <path d=\\\"M 19.671875 64.796875 \\n\",\n       \"L 19.671875 37.40625 \\n\",\n       \"L 32.078125 37.40625 \\n\",\n       \"Q 38.96875 37.40625 42.71875 40.96875 \\n\",\n       \"Q 46.484375 44.53125 46.484375 51.125 \\n\",\n       \"Q 46.484375 57.671875 42.71875 61.234375 \\n\",\n       \"Q 38.96875 64.796875 32.078125 64.796875 \\n\",\n       \"z\\n\",\n       \"M 9.8125 72.90625 \\n\",\n       \"L 32.078125 72.90625 \\n\",\n       \"Q 44.34375 72.90625 50.609375 67.359375 \\n\",\n       \"Q 56.890625 61.8125 56.890625 51.125 \\n\",\n       \"Q 56.890625 40.328125 50.609375 34.8125 \\n\",\n       \"Q 44.34375 29.296875 32.078125 29.296875 \\n\",\n       \"L 19.671875 29.296875 \\n\",\n       \"L 19.671875 0 \\n\",\n       \"L 9.8125 0 \\n\",\n       \"z\\n\",\n       \"\\\" id=\\\"DejaVuSans-80\\\"/>\\n\",\n       \"      <path d=\\\"M 2.984375 54.6875 \\n\",\n       \"L 12.5 54.6875 \\n\",\n       \"L 29.59375 8.796875 \\n\",\n       \"L 46.6875 54.6875 \\n\",\n       \"L 56.203125 54.6875 \\n\",\n       \"L 35.6875 0 \\n\",\n       \"L 23.484375 0 \\n\",\n       \"z\\n\",\n       \"\\\" id=\\\"DejaVuSans-118\\\"/>\\n\",\n       \"      <path d=\\\"M 37.109375 75.984375 \\n\",\n       \"L 37.109375 68.5 \\n\",\n       \"L 28.515625 68.5 \\n\",\n       \"Q 23.6875 68.5 21.796875 66.546875 \\n\",\n       \"Q 19.921875 64.59375 19.921875 59.515625 \\n\",\n       \"L 19.921875 54.6875 \\n\",\n       \"L 34.71875 54.6875 \\n\",\n       \"L 34.71875 47.703125 \\n\",\n       \"L 19.921875 47.703125 \\n\",\n       \"L 19.921875 0 \\n\",\n       \"L 10.890625 0 \\n\",\n       \"L 10.890625 47.703125 \\n\",\n       \"L 2.296875 47.703125 \\n\",\n       \"L 2.296875 54.6875 \\n\",\n       \"L 10.890625 54.6875 \\n\",\n       \"L 10.890625 58.5 \\n\",\n       \"Q 10.890625 67.625 15.140625 71.796875 \\n\",\n       \"Q 19.390625 75.984375 28.609375 75.984375 \\n\",\n       \"z\\n\",\n       \"\\\" id=\\\"DejaVuSans-102\\\"/>\\n\",\n       \"     </defs>\\n\",\n       \"     <g transform=\\\"translate(25.99625 122.14625)rotate(-90)scale(0.1 -0.1)\\\">\\n\",\n       \"      <use xlink:href=\\\"#DejaVuSans-80\\\"/>\\n\",\n       \"      <use x=\\\"60.255859\\\" xlink:href=\\\"#DejaVuSans-111\\\"/>\\n\",\n       \"      <use x=\\\"121.4375\\\" xlink:href=\\\"#DejaVuSans-115\\\"/>\\n\",\n       \"      <use x=\\\"173.537109\\\" xlink:href=\\\"#DejaVuSans-105\\\"/>\\n\",\n       \"      <use x=\\\"201.320312\\\" xlink:href=\\\"#DejaVuSans-116\\\"/>\\n\",\n       \"      <use x=\\\"240.529297\\\" xlink:href=\\\"#DejaVuSans-105\\\"/>\\n\",\n       \"      <use x=\\\"268.3125\\\" xlink:href=\\\"#DejaVuSans-118\\\"/>\\n\",\n       \"      <use x=\\\"327.492188\\\" xlink:href=\\\"#DejaVuSans-101\\\"/>\\n\",\n       \"      <use x=\\\"389.015625\\\" xlink:href=\\\"#DejaVuSans-32\\\"/>\\n\",\n       \"      <use x=\\\"420.802734\\\" xlink:href=\\\"#DejaVuSans-105\\\"/>\\n\",\n       \"      <use x=\\\"448.585938\\\" xlink:href=\\\"#DejaVuSans-115\\\"/>\\n\",\n       \"      <use x=\\\"500.685547\\\" xlink:href=\\\"#DejaVuSans-32\\\"/>\\n\",\n       \"      <use x=\\\"532.472656\\\" xlink:href=\\\"#DejaVuSans-97\\\"/>\\n\",\n       \"      <use x=\\\"593.751953\\\" xlink:href=\\\"#DejaVuSans-102\\\"/>\\n\",\n       \"      <use x=\\\"628.941406\\\" xlink:href=\\\"#DejaVuSans-116\\\"/>\\n\",\n       \"     </g>\\n\",\n       \"    </g>\\n\",\n       \"   </g>\\n\",\n       \"   <g id=\\\"line2d_13\\\">\\n\",\n       \"    <path clip-path=\\\"url(#pae6d710e33)\\\" d=\\\"M 87.475795 69.710742 \\n\",\n       \"L 88.363523 69.586864 \\n\",\n       \"L 89.25125 69.284953 \\n\",\n       \"L 90.434886 69.263126 \\n\",\n       \"L 91.322614 69.497019 \\n\",\n       \"L 92.210341 69.737797 \\n\",\n       \"L 93.689886 69.83359 \\n\",\n       \"L 93.985795 69.698425 \\n\",\n       \"L 94.281705 69.376722 \\n\",\n       \"L 94.577614 68.773036 \\n\",\n       \"L 95.169432 66.577327 \\n\",\n       \"L 96.648977 59.463092 \\n\",\n       \"L 96.944886 58.791694 \\n\",\n       \"L 97.240795 58.729551 \\n\",\n       \"L 97.536705 59.378051 \\n\",\n       \"L 97.832614 60.773283 \\n\",\n       \"L 98.424432 65.63612 \\n\",\n       \"L 99.312159 76.726864 \\n\",\n       \"L 101.087614 100.649059 \\n\",\n       \"L 101.383523 102.963577 \\n\",\n       \"L 101.679432 104.220248 \\n\",\n       \"L 101.975341 104.268265 \\n\",\n       \"L 102.27125 103.003724 \\n\",\n       \"L 102.567159 100.383782 \\n\",\n       \"L 103.158977 91.283728 \\n\",\n       \"L 104.046705 70.511694 \\n\",\n       \"L 105.230341 42.369231 \\n\",\n       \"L 105.822159 34.136378 \\n\",\n       \"L 106.118068 32.134306 \\n\",\n       \"L 106.413977 31.46769 \\n\",\n       \"L 106.709886 31.922427 \\n\",\n       \"L 107.301705 34.779988 \\n\",\n       \"L 107.893523 37.472156 \\n\",\n       \"L 108.189432 37.857288 \\n\",\n       \"L 108.485341 37.290981 \\n\",\n       \"L 108.78125 35.695389 \\n\",\n       \"L 109.373068 29.777728 \\n\",\n       \"L 110.556705 15.870113 \\n\",\n       \"L 110.852614 14.612727 \\n\",\n       \"L 111.148523 15.142846 \\n\",\n       \"L 111.444432 17.768988 \\n\",\n       \"L 111.740341 22.672315 \\n\",\n       \"L 112.332159 39.335259 \\n\",\n       \"L 112.923977 63.77191 \\n\",\n       \"L 114.699432 144.873774 \\n\",\n       \"L 115.29125 159.543482 \\n\",\n       \"L 115.587159 162.697238 \\n\",\n       \"L 115.883068 162.867273 \\n\",\n       \"L 116.178977 160.093271 \\n\",\n       \"L 116.474886 154.548856 \\n\",\n       \"L 117.066705 136.30092 \\n\",\n       \"L 117.954432 97.058746 \\n\",\n       \"L 118.842159 56.921738 \\n\",\n       \"L 119.433977 38.270245 \\n\",\n       \"L 119.729886 32.875959 \\n\",\n       \"L 120.025795 30.415208 \\n\",\n       \"L 120.321705 30.871378 \\n\",\n       \"L 120.617614 34.018172 \\n\",\n       \"L 121.209432 46.60284 \\n\",\n       \"L 122.688977 86.30428 \\n\",\n       \"L 123.280795 94.303092 \\n\",\n       \"L 123.576705 95.557745 \\n\",\n       \"L 123.872614 95.032758 \\n\",\n       \"L 124.168523 92.916602 \\n\",\n       \"L 124.760341 85.082066 \\n\",\n       \"L 126.239886 61.573804 \\n\",\n       \"L 126.535795 58.766949 \\n\",\n       \"L 126.831705 57.020515 \\n\",\n       \"L 127.127614 56.370966 \\n\",\n       \"L 127.423523 56.780155 \\n\",\n       \"L 127.719432 58.135772 \\n\",\n       \"L 128.31125 62.93737 \\n\",\n       \"L 129.494886 74.605461 \\n\",\n       \"L 130.086705 78.344475 \\n\",\n       \"L 130.382614 79.264066 \\n\",\n       \"L 130.678523 79.51943 \\n\",\n       \"L 130.974432 79.150191 \\n\",\n       \"L 131.270341 78.233271 \\n\",\n       \"L 131.862159 75.189 \\n\",\n       \"L 133.045795 67.959779 \\n\",\n       \"L 133.637614 65.68379 \\n\",\n       \"L 133.933523 65.11747 \\n\",\n       \"L 134.229432 64.948584 \\n\",\n       \"L 134.525341 65.158856 \\n\",\n       \"L 134.82125 65.705478 \\n\",\n       \"L 135.413068 67.530338 \\n\",\n       \"L 136.596705 71.74665 \\n\",\n       \"L 137.188523 73.048901 \\n\",\n       \"L 137.484432 73.346491 \\n\",\n       \"L 137.780341 73.395782 \\n\",\n       \"L 138.07625 73.213578 \\n\",\n       \"L 138.668068 72.296124 \\n\",\n       \"L 140.443523 68.473888 \\n\",\n       \"L 141.035341 67.932972 \\n\",\n       \"L 141.33125 67.876782 \\n\",\n       \"L 141.627159 67.954417 \\n\",\n       \"L 142.218977 68.444859 \\n\",\n       \"L 143.994432 70.547108 \\n\",\n       \"L 144.58625 70.815252 \\n\",\n       \"L 145.178068 70.73001 \\n\",\n       \"L 145.769886 70.363337 \\n\",\n       \"L 147.84125 68.759104 \\n\",\n       \"L 148.433068 68.644887 \\n\",\n       \"L 149.024886 68.720405 \\n\",\n       \"L 150.208523 69.207924 \\n\",\n       \"L 151.09625 69.521225 \\n\",\n       \"L 151.983977 69.589767 \\n\",\n       \"L 152.871705 69.389102 \\n\",\n       \"L 155.238977 68.676484 \\n\",\n       \"L 156.422614 68.683283 \\n\",\n       \"L 159.085795 68.884566 \\n\",\n       \"L 160.86125 68.633215 \\n\",\n       \"L 162.636705 68.421706 \\n\",\n       \"L 165.299886 68.42903 \\n\",\n       \"L 167.667159 68.289284 \\n\",\n       \"L 170.922159 68.100797 \\n\",\n       \"L 175.656705 67.921918 \\n\",\n       \"L 181.278977 67.739168 \\n\",\n       \"L 190.748068 67.487681 \\n\",\n       \"L 204.063977 67.331768 \\n\",\n       \"L 218.267614 67.383994 \\n\",\n       \"L 234.246705 67.675913 \\n\",\n       \"L 253.776705 68.271222 \\n\",\n       \"L 304.08125 69.914082 \\n\",\n       \"L 321.539886 70.183592 \\n\",\n       \"L 338.702614 70.225339 \\n\",\n       \"L 358.232614 70.041338 \\n\",\n       \"L 387.231705 69.512516 \\n\",\n       \"L 425.699886 68.850777 \\n\",\n       \"L 442.566705 68.695608 \\n\",\n       \"L 442.566705 68.695608 \\n\",\n       \"\\\" style=\\\"fill:none;stroke:#1f77b4;stroke-linecap:square;stroke-width:1.5;\\\"/>\\n\",\n       \"   </g>\\n\",\n       \"   <g id=\\\"patch_3\\\">\\n\",\n       \"    <path d=\\\"M 69.72125 170.28 \\n\",\n       \"L 69.72125 7.2 \\n\",\n       \"\\\" style=\\\"fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;stroke-width:0.8;\\\"/>\\n\",\n       \"   </g>\\n\",\n       \"   <g id=\\\"patch_4\\\">\\n\",\n       \"    <path d=\\\"M 460.32125 170.28 \\n\",\n       \"L 460.32125 7.2 \\n\",\n       \"\\\" style=\\\"fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;stroke-width:0.8;\\\"/>\\n\",\n       \"   </g>\\n\",\n       \"   <g id=\\\"patch_5\\\">\\n\",\n       \"    <path d=\\\"M 69.72125 170.28 \\n\",\n       \"L 460.32125 170.28 \\n\",\n       \"\\\" style=\\\"fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;stroke-width:0.8;\\\"/>\\n\",\n       \"   </g>\\n\",\n       \"   <g id=\\\"patch_6\\\">\\n\",\n       \"    <path d=\\\"M 69.72125 7.2 \\n\",\n       \"L 460.32125 7.2 \\n\",\n       \"\\\" style=\\\"fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;stroke-width:0.8;\\\"/>\\n\",\n       \"   </g>\\n\",\n       \"  </g>\\n\",\n       \" </g>\\n\",\n       \" <defs>\\n\",\n       \"  <clipPath id=\\\"pae6d710e33\\\">\\n\",\n       \"   <rect height=\\\"163.08\\\" width=\\\"390.6\\\" x=\\\"69.72125\\\" y=\\\"7.2\\\"/>\\n\",\n       \"  </clipPath>\\n\",\n       \" </defs>\\n\",\n       \"</svg>\\n\"\n      ],\n      \"text/plain\": [\n       \"<Figure size 504x216 with 1 Axes>\"\n      ]\n     },\n     \"metadata\": {\n      \"needs_background\": \"light\"\n     },\n     \"output_type\": \"display_data\"\n    }\n   ],\n   \"source\": [\n    \"fig, ax = plt.subplots(1, 1, figsize=(7, 3))\\n\",\n    \"\\n\",\n    \"# extract information\\n\",\n    \"n_tsteps = len(case_data.structure.timestep_info)\\n\",\n    \"xz = np.zeros((n_tsteps, 2))\\n\",\n    \"for it in range(n_tsteps):\\n\",\n    \"    xz[it, 0] = case_data.structure.timestep_info[it].pos[tip_node, 0]\\n\",\n    \"    xz[it, 1] = case_data.structure.timestep_info[it].pos[tip_node, 2]\\n\",\n    \"ax.plot(time_vec, xz[:, 0])\\n\",\n    \"# fig.suptitle('Longitudinal trajectory of the T-Tail model in a 20% 1-cos gust encounter')\\n\",\n    \"ax.set_xlabel('time [s]')\\n\",\n    \"ax.set_ylabel('Horizontal disp. [m]\\\\nPositive is aft');\\n\",\n    \"plt.show()\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"*Wing root loads*\\n\",\n    \"\\n\",\n    \"The wing root loads can be extracted from the `postproc_cell` structure in `timestep_info`.\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 17,\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"data\": {\n      \"image/svg+xml\": [\n       \"<?xml version=\\\"1.0\\\" encoding=\\\"utf-8\\\" standalone=\\\"no\\\"?>\\n\",\n       \"<!DOCTYPE svg PUBLIC \\\"-//W3C//DTD SVG 1.1//EN\\\"\\n\",\n       \"  \\\"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\\\">\\n\",\n       \"<!-- Created with matplotlib (https://matplotlib.org/) -->\\n\",\n       \"<svg height=\\\"414.11625pt\\\" version=\\\"1.1\\\" viewBox=\\\"0 0 459.507812 414.11625\\\" width=\\\"459.507812pt\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\" xmlns:xlink=\\\"http://www.w3.org/1999/xlink\\\">\\n\",\n       \" <defs>\\n\",\n       \"  <style type=\\\"text/css\\\">\\n\",\n       \"*{stroke-linecap:butt;stroke-linejoin:round;}\\n\",\n       \"  </style>\\n\",\n       \" </defs>\\n\",\n       \" <g id=\\\"figure_1\\\">\\n\",\n       \"  <g id=\\\"patch_1\\\">\\n\",\n       \"   <path d=\\\"M 0 414.11625 \\n\",\n       \"L 459.507812 414.11625 \\n\",\n       \"L 459.507812 0 \\n\",\n       \"L 0 0 \\n\",\n       \"z\\n\",\n       \"\\\" style=\\\"fill:none;\\\"/>\\n\",\n       \"  </g>\\n\",\n       \"  <g id=\\\"axes_1\\\">\\n\",\n       \"   <g id=\\\"patch_2\\\">\\n\",\n       \"    <path d=\\\"M 61.707813 159.12 \\n\",\n       \"L 452.307813 159.12 \\n\",\n       \"L 452.307813 50.4 \\n\",\n       \"L 61.707813 50.4 \\n\",\n       \"z\\n\",\n       \"\\\" style=\\\"fill:#ffffff;\\\"/>\\n\",\n       \"   </g>\\n\",\n       \"   <g id=\\\"matplotlib.axis_1\\\">\\n\",\n       \"    <g id=\\\"xtick_1\\\">\\n\",\n       \"     <g id=\\\"line2d_1\\\">\\n\",\n       \"      <defs>\\n\",\n       \"       <path d=\\\"M 0 0 \\n\",\n       \"L 0 3.5 \\n\",\n       \"\\\" id=\\\"m992738daa6\\\" style=\\\"stroke:#000000;stroke-width:0.8;\\\"/>\\n\",\n       \"      </defs>\\n\",\n       \"      <g>\\n\",\n       \"       <use style=\\\"stroke:#000000;stroke-width:0.8;\\\" x=\\\"79.462358\\\" xlink:href=\\\"#m992738daa6\\\" y=\\\"159.12\\\"/>\\n\",\n       \"      </g>\\n\",\n       \"     </g>\\n\",\n       \"    </g>\\n\",\n       \"    <g id=\\\"xtick_2\\\">\\n\",\n       \"     <g id=\\\"line2d_2\\\">\\n\",\n       \"      <g>\\n\",\n       \"       <use style=\\\"stroke:#000000;stroke-width:0.8;\\\" x=\\\"138.594899\\\" xlink:href=\\\"#m992738daa6\\\" y=\\\"159.12\\\"/>\\n\",\n       \"      </g>\\n\",\n       \"     </g>\\n\",\n       \"    </g>\\n\",\n       \"    <g id=\\\"xtick_3\\\">\\n\",\n       \"     <g id=\\\"line2d_3\\\">\\n\",\n       \"      <g>\\n\",\n       \"       <use style=\\\"stroke:#000000;stroke-width:0.8;\\\" x=\\\"197.72744\\\" xlink:href=\\\"#m992738daa6\\\" y=\\\"159.12\\\"/>\\n\",\n       \"      </g>\\n\",\n       \"     </g>\\n\",\n       \"    </g>\\n\",\n       \"    <g id=\\\"xtick_4\\\">\\n\",\n       \"     <g id=\\\"line2d_4\\\">\\n\",\n       \"      <g>\\n\",\n       \"       <use style=\\\"stroke:#000000;stroke-width:0.8;\\\" x=\\\"256.859981\\\" xlink:href=\\\"#m992738daa6\\\" y=\\\"159.12\\\"/>\\n\",\n       \"      </g>\\n\",\n       \"     </g>\\n\",\n       \"    </g>\\n\",\n       \"    <g id=\\\"xtick_5\\\">\\n\",\n       \"     <g id=\\\"line2d_5\\\">\\n\",\n       \"      <g>\\n\",\n       \"       <use style=\\\"stroke:#000000;stroke-width:0.8;\\\" x=\\\"315.992522\\\" xlink:href=\\\"#m992738daa6\\\" y=\\\"159.12\\\"/>\\n\",\n       \"      </g>\\n\",\n       \"     </g>\\n\",\n       \"    </g>\\n\",\n       \"    <g id=\\\"xtick_6\\\">\\n\",\n       \"     <g id=\\\"line2d_6\\\">\\n\",\n       \"      <g>\\n\",\n       \"       <use style=\\\"stroke:#000000;stroke-width:0.8;\\\" x=\\\"375.125063\\\" xlink:href=\\\"#m992738daa6\\\" y=\\\"159.12\\\"/>\\n\",\n       \"      </g>\\n\",\n       \"     </g>\\n\",\n       \"    </g>\\n\",\n       \"    <g id=\\\"xtick_7\\\">\\n\",\n       \"     <g id=\\\"line2d_7\\\">\\n\",\n       \"      <g>\\n\",\n       \"       <use style=\\\"stroke:#000000;stroke-width:0.8;\\\" x=\\\"434.257604\\\" xlink:href=\\\"#m992738daa6\\\" y=\\\"159.12\\\"/>\\n\",\n       \"      </g>\\n\",\n       \"     </g>\\n\",\n       \"    </g>\\n\",\n       \"   </g>\\n\",\n       \"   <g id=\\\"matplotlib.axis_2\\\">\\n\",\n       \"    <g id=\\\"ytick_1\\\">\\n\",\n       \"     <g id=\\\"line2d_8\\\">\\n\",\n       \"      <defs>\\n\",\n       \"       <path d=\\\"M 0 0 \\n\",\n       \"L -3.5 0 \\n\",\n       \"\\\" id=\\\"m9a60ae2c5e\\\" style=\\\"stroke:#000000;stroke-width:0.8;\\\"/>\\n\",\n       \"      </defs>\\n\",\n       \"      <g>\\n\",\n       \"       <use style=\\\"stroke:#000000;stroke-width:0.8;\\\" x=\\\"61.707813\\\" xlink:href=\\\"#m9a60ae2c5e\\\" y=\\\"145.541384\\\"/>\\n\",\n       \"      </g>\\n\",\n       \"     </g>\\n\",\n       \"     <g id=\\\"text_1\\\">\\n\",\n       \"      <!-- −40 -->\\n\",\n       \"      <defs>\\n\",\n       \"       <path d=\\\"M 10.59375 35.5 \\n\",\n       \"L 73.1875 35.5 \\n\",\n       \"L 73.1875 27.203125 \\n\",\n       \"L 10.59375 27.203125 \\n\",\n       \"z\\n\",\n       \"\\\" id=\\\"DejaVuSans-8722\\\"/>\\n\",\n       \"       <path d=\\\"M 37.796875 64.3125 \\n\",\n       \"L 12.890625 25.390625 \\n\",\n       \"L 37.796875 25.390625 \\n\",\n       \"z\\n\",\n       \"M 35.203125 72.90625 \\n\",\n       \"L 47.609375 72.90625 \\n\",\n       \"L 47.609375 25.390625 \\n\",\n       \"L 58.015625 25.390625 \\n\",\n       \"L 58.015625 17.1875 \\n\",\n       \"L 47.609375 17.1875 \\n\",\n       \"L 47.609375 0 \\n\",\n       \"L 37.796875 0 \\n\",\n       \"L 37.796875 17.1875 \\n\",\n       \"L 4.890625 17.1875 \\n\",\n       \"L 4.890625 26.703125 \\n\",\n       \"z\\n\",\n       \"\\\" id=\\\"DejaVuSans-52\\\"/>\\n\",\n       \"       <path d=\\\"M 31.78125 66.40625 \\n\",\n       \"Q 24.171875 66.40625 20.328125 58.90625 \\n\",\n       \"Q 16.5 51.421875 16.5 36.375 \\n\",\n       \"Q 16.5 21.390625 20.328125 13.890625 \\n\",\n       \"Q 24.171875 6.390625 31.78125 6.390625 \\n\",\n       \"Q 39.453125 6.390625 43.28125 13.890625 \\n\",\n       \"Q 47.125 21.390625 47.125 36.375 \\n\",\n       \"Q 47.125 51.421875 43.28125 58.90625 \\n\",\n       \"Q 39.453125 66.40625 31.78125 66.40625 \\n\",\n       \"z\\n\",\n       \"M 31.78125 74.21875 \\n\",\n       \"Q 44.046875 74.21875 50.515625 64.515625 \\n\",\n       \"Q 56.984375 54.828125 56.984375 36.375 \\n\",\n       \"Q 56.984375 17.96875 50.515625 8.265625 \\n\",\n       \"Q 44.046875 -1.421875 31.78125 -1.421875 \\n\",\n       \"Q 19.53125 -1.421875 13.0625 8.265625 \\n\",\n       \"Q 6.59375 17.96875 6.59375 36.375 \\n\",\n       \"Q 6.59375 54.828125 13.0625 64.515625 \\n\",\n       \"Q 19.53125 74.21875 31.78125 74.21875 \\n\",\n       \"z\\n\",\n       \"\\\" id=\\\"DejaVuSans-48\\\"/>\\n\",\n       \"      </defs>\\n\",\n       \"      <g transform=\\\"translate(33.603125 149.340603)scale(0.1 -0.1)\\\">\\n\",\n       \"       <use xlink:href=\\\"#DejaVuSans-8722\\\"/>\\n\",\n       \"       <use x=\\\"83.789062\\\" xlink:href=\\\"#DejaVuSans-52\\\"/>\\n\",\n       \"       <use x=\\\"147.412109\\\" xlink:href=\\\"#DejaVuSans-48\\\"/>\\n\",\n       \"      </g>\\n\",\n       \"     </g>\\n\",\n       \"    </g>\\n\",\n       \"    <g id=\\\"ytick_2\\\">\\n\",\n       \"     <g id=\\\"line2d_9\\\">\\n\",\n       \"      <g>\\n\",\n       \"       <use style=\\\"stroke:#000000;stroke-width:0.8;\\\" x=\\\"61.707813\\\" xlink:href=\\\"#m9a60ae2c5e\\\" y=\\\"120.12446\\\"/>\\n\",\n       \"      </g>\\n\",\n       \"     </g>\\n\",\n       \"     <g id=\\\"text_2\\\">\\n\",\n       \"      <!-- −20 -->\\n\",\n       \"      <defs>\\n\",\n       \"       <path d=\\\"M 19.1875 8.296875 \\n\",\n       \"L 53.609375 8.296875 \\n\",\n       \"L 53.609375 0 \\n\",\n       \"L 7.328125 0 \\n\",\n       \"L 7.328125 8.296875 \\n\",\n       \"Q 12.9375 14.109375 22.625 23.890625 \\n\",\n       \"Q 32.328125 33.6875 34.8125 36.53125 \\n\",\n       \"Q 39.546875 41.84375 41.421875 45.53125 \\n\",\n       \"Q 43.3125 49.21875 43.3125 52.78125 \\n\",\n       \"Q 43.3125 58.59375 39.234375 62.25 \\n\",\n       \"Q 35.15625 65.921875 28.609375 65.921875 \\n\",\n       \"Q 23.96875 65.921875 18.8125 64.3125 \\n\",\n       \"Q 13.671875 62.703125 7.8125 59.421875 \\n\",\n       \"L 7.8125 69.390625 \\n\",\n       \"Q 13.765625 71.78125 18.9375 73 \\n\",\n       \"Q 24.125 74.21875 28.421875 74.21875 \\n\",\n       \"Q 39.75 74.21875 46.484375 68.546875 \\n\",\n       \"Q 53.21875 62.890625 53.21875 53.421875 \\n\",\n       \"Q 53.21875 48.921875 51.53125 44.890625 \\n\",\n       \"Q 49.859375 40.875 45.40625 35.40625 \\n\",\n       \"Q 44.1875 33.984375 37.640625 27.21875 \\n\",\n       \"Q 31.109375 20.453125 19.1875 8.296875 \\n\",\n       \"z\\n\",\n       \"\\\" id=\\\"DejaVuSans-50\\\"/>\\n\",\n       \"      </defs>\\n\",\n       \"      <g transform=\\\"translate(33.603125 123.923678)scale(0.1 -0.1)\\\">\\n\",\n       \"       <use xlink:href=\\\"#DejaVuSans-8722\\\"/>\\n\",\n       \"       <use x=\\\"83.789062\\\" xlink:href=\\\"#DejaVuSans-50\\\"/>\\n\",\n       \"       <use x=\\\"147.412109\\\" xlink:href=\\\"#DejaVuSans-48\\\"/>\\n\",\n       \"      </g>\\n\",\n       \"     </g>\\n\",\n       \"    </g>\\n\",\n       \"    <g id=\\\"ytick_3\\\">\\n\",\n       \"     <g id=\\\"line2d_10\\\">\\n\",\n       \"      <g>\\n\",\n       \"       <use style=\\\"stroke:#000000;stroke-width:0.8;\\\" x=\\\"61.707813\\\" xlink:href=\\\"#m9a60ae2c5e\\\" y=\\\"94.707535\\\"/>\\n\",\n       \"      </g>\\n\",\n       \"     </g>\\n\",\n       \"     <g id=\\\"text_3\\\">\\n\",\n       \"      <!-- 0 -->\\n\",\n       \"      <g transform=\\\"translate(48.345313 98.506754)scale(0.1 -0.1)\\\">\\n\",\n       \"       <use xlink:href=\\\"#DejaVuSans-48\\\"/>\\n\",\n       \"      </g>\\n\",\n       \"     </g>\\n\",\n       \"    </g>\\n\",\n       \"    <g id=\\\"ytick_4\\\">\\n\",\n       \"     <g id=\\\"line2d_11\\\">\\n\",\n       \"      <g>\\n\",\n       \"       <use style=\\\"stroke:#000000;stroke-width:0.8;\\\" x=\\\"61.707813\\\" xlink:href=\\\"#m9a60ae2c5e\\\" y=\\\"69.290611\\\"/>\\n\",\n       \"      </g>\\n\",\n       \"     </g>\\n\",\n       \"     <g id=\\\"text_4\\\">\\n\",\n       \"      <!-- 20 -->\\n\",\n       \"      <g transform=\\\"translate(41.982813 73.08983)scale(0.1 -0.1)\\\">\\n\",\n       \"       <use xlink:href=\\\"#DejaVuSans-50\\\"/>\\n\",\n       \"       <use x=\\\"63.623047\\\" xlink:href=\\\"#DejaVuSans-48\\\"/>\\n\",\n       \"      </g>\\n\",\n       \"     </g>\\n\",\n       \"    </g>\\n\",\n       \"    <g id=\\\"text_5\\\">\\n\",\n       \"     <!-- Torsion [Nm2] -->\\n\",\n       \"     <defs>\\n\",\n       \"      <path d=\\\"M -0.296875 72.90625 \\n\",\n       \"L 61.375 72.90625 \\n\",\n       \"L 61.375 64.59375 \\n\",\n       \"L 35.5 64.59375 \\n\",\n       \"L 35.5 0 \\n\",\n       \"L 25.59375 0 \\n\",\n       \"L 25.59375 64.59375 \\n\",\n       \"L -0.296875 64.59375 \\n\",\n       \"z\\n\",\n       \"\\\" id=\\\"DejaVuSans-84\\\"/>\\n\",\n       \"      <path d=\\\"M 30.609375 48.390625 \\n\",\n       \"Q 23.390625 48.390625 19.1875 42.75 \\n\",\n       \"Q 14.984375 37.109375 14.984375 27.296875 \\n\",\n       \"Q 14.984375 17.484375 19.15625 11.84375 \\n\",\n       \"Q 23.34375 6.203125 30.609375 6.203125 \\n\",\n       \"Q 37.796875 6.203125 41.984375 11.859375 \\n\",\n       \"Q 46.1875 17.53125 46.1875 27.296875 \\n\",\n       \"Q 46.1875 37.015625 41.984375 42.703125 \\n\",\n       \"Q 37.796875 48.390625 30.609375 48.390625 \\n\",\n       \"z\\n\",\n       \"M 30.609375 56 \\n\",\n       \"Q 42.328125 56 49.015625 48.375 \\n\",\n       \"Q 55.71875 40.765625 55.71875 27.296875 \\n\",\n       \"Q 55.71875 13.875 49.015625 6.21875 \\n\",\n       \"Q 42.328125 -1.421875 30.609375 -1.421875 \\n\",\n       \"Q 18.84375 -1.421875 12.171875 6.21875 \\n\",\n       \"Q 5.515625 13.875 5.515625 27.296875 \\n\",\n       \"Q 5.515625 40.765625 12.171875 48.375 \\n\",\n       \"Q 18.84375 56 30.609375 56 \\n\",\n       \"z\\n\",\n       \"\\\" id=\\\"DejaVuSans-111\\\"/>\\n\",\n       \"      <path d=\\\"M 41.109375 46.296875 \\n\",\n       \"Q 39.59375 47.171875 37.8125 47.578125 \\n\",\n       \"Q 36.03125 48 33.890625 48 \\n\",\n       \"Q 26.265625 48 22.1875 43.046875 \\n\",\n       \"Q 18.109375 38.09375 18.109375 28.8125 \\n\",\n       \"L 18.109375 0 \\n\",\n       \"L 9.078125 0 \\n\",\n       \"L 9.078125 54.6875 \\n\",\n       \"L 18.109375 54.6875 \\n\",\n       \"L 18.109375 46.1875 \\n\",\n       \"Q 20.953125 51.171875 25.484375 53.578125 \\n\",\n       \"Q 30.03125 56 36.53125 56 \\n\",\n       \"Q 37.453125 56 38.578125 55.875 \\n\",\n       \"Q 39.703125 55.765625 41.0625 55.515625 \\n\",\n       \"z\\n\",\n       \"\\\" id=\\\"DejaVuSans-114\\\"/>\\n\",\n       \"      <path d=\\\"M 44.28125 53.078125 \\n\",\n       \"L 44.28125 44.578125 \\n\",\n       \"Q 40.484375 46.53125 36.375 47.5 \\n\",\n       \"Q 32.28125 48.484375 27.875 48.484375 \\n\",\n       \"Q 21.1875 48.484375 17.84375 46.4375 \\n\",\n       \"Q 14.5 44.390625 14.5 40.28125 \\n\",\n       \"Q 14.5 37.15625 16.890625 35.375 \\n\",\n       \"Q 19.28125 33.59375 26.515625 31.984375 \\n\",\n       \"L 29.59375 31.296875 \\n\",\n       \"Q 39.15625 29.25 43.1875 25.515625 \\n\",\n       \"Q 47.21875 21.78125 47.21875 15.09375 \\n\",\n       \"Q 47.21875 7.46875 41.1875 3.015625 \\n\",\n       \"Q 35.15625 -1.421875 24.609375 -1.421875 \\n\",\n       \"Q 20.21875 -1.421875 15.453125 -0.5625 \\n\",\n       \"Q 10.6875 0.296875 5.421875 2 \\n\",\n       \"L 5.421875 11.28125 \\n\",\n       \"Q 10.40625 8.6875 15.234375 7.390625 \\n\",\n       \"Q 20.0625 6.109375 24.8125 6.109375 \\n\",\n       \"Q 31.15625 6.109375 34.5625 8.28125 \\n\",\n       \"Q 37.984375 10.453125 37.984375 14.40625 \\n\",\n       \"Q 37.984375 18.0625 35.515625 20.015625 \\n\",\n       \"Q 33.0625 21.96875 24.703125 23.78125 \\n\",\n       \"L 21.578125 24.515625 \\n\",\n       \"Q 13.234375 26.265625 9.515625 29.90625 \\n\",\n       \"Q 5.8125 33.546875 5.8125 39.890625 \\n\",\n       \"Q 5.8125 47.609375 11.28125 51.796875 \\n\",\n       \"Q 16.75 56 26.8125 56 \\n\",\n       \"Q 31.78125 56 36.171875 55.265625 \\n\",\n       \"Q 40.578125 54.546875 44.28125 53.078125 \\n\",\n       \"z\\n\",\n       \"\\\" id=\\\"DejaVuSans-115\\\"/>\\n\",\n       \"      <path d=\\\"M 9.421875 54.6875 \\n\",\n       \"L 18.40625 54.6875 \\n\",\n       \"L 18.40625 0 \\n\",\n       \"L 9.421875 0 \\n\",\n       \"z\\n\",\n       \"M 9.421875 75.984375 \\n\",\n       \"L 18.40625 75.984375 \\n\",\n       \"L 18.40625 64.59375 \\n\",\n       \"L 9.421875 64.59375 \\n\",\n       \"z\\n\",\n       \"\\\" id=\\\"DejaVuSans-105\\\"/>\\n\",\n       \"      <path d=\\\"M 54.890625 33.015625 \\n\",\n       \"L 54.890625 0 \\n\",\n       \"L 45.90625 0 \\n\",\n       \"L 45.90625 32.71875 \\n\",\n       \"Q 45.90625 40.484375 42.875 44.328125 \\n\",\n       \"Q 39.84375 48.1875 33.796875 48.1875 \\n\",\n       \"Q 26.515625 48.1875 22.3125 43.546875 \\n\",\n       \"Q 18.109375 38.921875 18.109375 30.90625 \\n\",\n       \"L 18.109375 0 \\n\",\n       \"L 9.078125 0 \\n\",\n       \"L 9.078125 54.6875 \\n\",\n       \"L 18.109375 54.6875 \\n\",\n       \"L 18.109375 46.1875 \\n\",\n       \"Q 21.34375 51.125 25.703125 53.5625 \\n\",\n       \"Q 30.078125 56 35.796875 56 \\n\",\n       \"Q 45.21875 56 50.046875 50.171875 \\n\",\n       \"Q 54.890625 44.34375 54.890625 33.015625 \\n\",\n       \"z\\n\",\n       \"\\\" id=\\\"DejaVuSans-110\\\"/>\\n\",\n       \"      <path id=\\\"DejaVuSans-32\\\"/>\\n\",\n       \"      <path d=\\\"M 8.59375 75.984375 \\n\",\n       \"L 29.296875 75.984375 \\n\",\n       \"L 29.296875 69 \\n\",\n       \"L 17.578125 69 \\n\",\n       \"L 17.578125 -6.203125 \\n\",\n       \"L 29.296875 -6.203125 \\n\",\n       \"L 29.296875 -13.1875 \\n\",\n       \"L 8.59375 -13.1875 \\n\",\n       \"z\\n\",\n       \"\\\" id=\\\"DejaVuSans-91\\\"/>\\n\",\n       \"      <path d=\\\"M 9.8125 72.90625 \\n\",\n       \"L 23.09375 72.90625 \\n\",\n       \"L 55.421875 11.921875 \\n\",\n       \"L 55.421875 72.90625 \\n\",\n       \"L 64.984375 72.90625 \\n\",\n       \"L 64.984375 0 \\n\",\n       \"L 51.703125 0 \\n\",\n       \"L 19.390625 60.984375 \\n\",\n       \"L 19.390625 0 \\n\",\n       \"L 9.8125 0 \\n\",\n       \"z\\n\",\n       \"\\\" id=\\\"DejaVuSans-78\\\"/>\\n\",\n       \"      <path d=\\\"M 52 44.1875 \\n\",\n       \"Q 55.375 50.25 60.0625 53.125 \\n\",\n       \"Q 64.75 56 71.09375 56 \\n\",\n       \"Q 79.640625 56 84.28125 50.015625 \\n\",\n       \"Q 88.921875 44.046875 88.921875 33.015625 \\n\",\n       \"L 88.921875 0 \\n\",\n       \"L 79.890625 0 \\n\",\n       \"L 79.890625 32.71875 \\n\",\n       \"Q 79.890625 40.578125 77.09375 44.375 \\n\",\n       \"Q 74.3125 48.1875 68.609375 48.1875 \\n\",\n       \"Q 61.625 48.1875 57.5625 43.546875 \\n\",\n       \"Q 53.515625 38.921875 53.515625 30.90625 \\n\",\n       \"L 53.515625 0 \\n\",\n       \"L 44.484375 0 \\n\",\n       \"L 44.484375 32.71875 \\n\",\n       \"Q 44.484375 40.625 41.703125 44.40625 \\n\",\n       \"Q 38.921875 48.1875 33.109375 48.1875 \\n\",\n       \"Q 26.21875 48.1875 22.15625 43.53125 \\n\",\n       \"Q 18.109375 38.875 18.109375 30.90625 \\n\",\n       \"L 18.109375 0 \\n\",\n       \"L 9.078125 0 \\n\",\n       \"L 9.078125 54.6875 \\n\",\n       \"L 18.109375 54.6875 \\n\",\n       \"L 18.109375 46.1875 \\n\",\n       \"Q 21.1875 51.21875 25.484375 53.609375 \\n\",\n       \"Q 29.78125 56 35.6875 56 \\n\",\n       \"Q 41.65625 56 45.828125 52.96875 \\n\",\n       \"Q 50 49.953125 52 44.1875 \\n\",\n       \"z\\n\",\n       \"\\\" id=\\\"DejaVuSans-109\\\"/>\\n\",\n       \"      <path d=\\\"M 30.421875 75.984375 \\n\",\n       \"L 30.421875 -13.1875 \\n\",\n       \"L 9.71875 -13.1875 \\n\",\n       \"L 9.71875 -6.203125 \\n\",\n       \"L 21.390625 -6.203125 \\n\",\n       \"L 21.390625 69 \\n\",\n       \"L 9.71875 69 \\n\",\n       \"L 9.71875 75.984375 \\n\",\n       \"z\\n\",\n       \"\\\" id=\\\"DejaVuSans-93\\\"/>\\n\",\n       \"     </defs>\\n\",\n       \"     <g transform=\\\"translate(27.523438 140.420156)rotate(-90)scale(0.1 -0.1)\\\">\\n\",\n       \"      <use xlink:href=\\\"#DejaVuSans-84\\\"/>\\n\",\n       \"      <use x=\\\"60.818359\\\" xlink:href=\\\"#DejaVuSans-111\\\"/>\\n\",\n       \"      <use x=\\\"122\\\" xlink:href=\\\"#DejaVuSans-114\\\"/>\\n\",\n       \"      <use x=\\\"163.113281\\\" xlink:href=\\\"#DejaVuSans-115\\\"/>\\n\",\n       \"      <use x=\\\"215.212891\\\" xlink:href=\\\"#DejaVuSans-105\\\"/>\\n\",\n       \"      <use x=\\\"242.996094\\\" xlink:href=\\\"#DejaVuSans-111\\\"/>\\n\",\n       \"      <use x=\\\"304.177734\\\" xlink:href=\\\"#DejaVuSans-110\\\"/>\\n\",\n       \"      <use x=\\\"367.556641\\\" xlink:href=\\\"#DejaVuSans-32\\\"/>\\n\",\n       \"      <use x=\\\"399.34375\\\" xlink:href=\\\"#DejaVuSans-91\\\"/>\\n\",\n       \"      <use x=\\\"438.357422\\\" xlink:href=\\\"#DejaVuSans-78\\\"/>\\n\",\n       \"      <use x=\\\"513.162109\\\" xlink:href=\\\"#DejaVuSans-109\\\"/>\\n\",\n       \"      <use x=\\\"610.574219\\\" xlink:href=\\\"#DejaVuSans-50\\\"/>\\n\",\n       \"      <use x=\\\"674.197266\\\" xlink:href=\\\"#DejaVuSans-93\\\"/>\\n\",\n       \"     </g>\\n\",\n       \"    </g>\\n\",\n       \"   </g>\\n\",\n       \"   <g id=\\\"line2d_12\\\">\\n\",\n       \"    <path clip-path=\\\"url(#pdff94b1ab1)\\\" d=\\\"M 79.462358 91.053498 \\n\",\n       \"L 80.941903 90.94861 \\n\",\n       \"L 82.12554 90.700582 \\n\",\n       \"L 83.309176 90.907686 \\n\",\n       \"L 83.900994 90.988235 \\n\",\n       \"L 84.788722 91.182634 \\n\",\n       \"L 86.268267 91.110125 \\n\",\n       \"L 87.155994 91.68769 \\n\",\n       \"L 87.451903 91.599391 \\n\",\n       \"L 88.63554 90.293456 \\n\",\n       \"L 88.931449 90.40704 \\n\",\n       \"L 89.227358 90.781079 \\n\",\n       \"L 89.523267 91.412093 \\n\",\n       \"L 90.115085 93.5809 \\n\",\n       \"L 90.706903 97.058468 \\n\",\n       \"L 92.482358 108.761539 \\n\",\n       \"L 93.074176 110.631583 \\n\",\n       \"L 93.370085 110.890204 \\n\",\n       \"L 93.665994 110.594249 \\n\",\n       \"L 93.961903 109.638995 \\n\",\n       \"L 94.257813 107.963566 \\n\",\n       \"L 94.849631 102.439523 \\n\",\n       \"L 95.737358 90.030231 \\n\",\n       \"L 96.920994 73.032027 \\n\",\n       \"L 97.512813 67.353127 \\n\",\n       \"L 97.808722 65.818147 \\n\",\n       \"L 98.104631 65.184295 \\n\",\n       \"L 98.40054 65.244923 \\n\",\n       \"L 98.696449 65.793125 \\n\",\n       \"L 99.880085 69.288944 \\n\",\n       \"L 100.175994 69.558376 \\n\",\n       \"L 100.471903 69.22816 \\n\",\n       \"L 100.767813 68.215392 \\n\",\n       \"L 101.359631 64.436141 \\n\",\n       \"L 102.247358 57.435412 \\n\",\n       \"L 102.543267 55.920866 \\n\",\n       \"L 102.839176 55.341818 \\n\",\n       \"L 103.135085 55.983969 \\n\",\n       \"L 103.430994 58.033484 \\n\",\n       \"L 103.726903 61.609608 \\n\",\n       \"L 104.318722 73.267061 \\n\",\n       \"L 105.206449 99.358473 \\n\",\n       \"L 106.390085 136.329238 \\n\",\n       \"L 106.981903 148.77127 \\n\",\n       \"L 107.277813 152.423638 \\n\",\n       \"L 107.573722 154.178182 \\n\",\n       \"L 107.869631 154.003027 \\n\",\n       \"L 108.16554 151.925496 \\n\",\n       \"L 108.461449 148.022998 \\n\",\n       \"L 109.053267 135.442337 \\n\",\n       \"L 109.940994 108.585971 \\n\",\n       \"L 110.828722 81.288242 \\n\",\n       \"L 111.42054 68.870245 \\n\",\n       \"L 111.716449 65.422712 \\n\",\n       \"L 112.012358 63.967934 \\n\",\n       \"L 112.308267 64.460699 \\n\",\n       \"L 112.604176 66.75417 \\n\",\n       \"L 113.195994 75.625001 \\n\",\n       \"L 114.67554 102.90267 \\n\",\n       \"L 115.267358 108.307128 \\n\",\n       \"L 115.563267 109.092158 \\n\",\n       \"L 115.859176 108.637723 \\n\",\n       \"L 116.155085 107.078802 \\n\",\n       \"L 116.746903 101.531688 \\n\",\n       \"L 118.226449 85.303054 \\n\",\n       \"L 118.522358 83.385803 \\n\",\n       \"L 118.818267 82.230699 \\n\",\n       \"L 119.114176 81.853274 \\n\",\n       \"L 119.410085 82.192896 \\n\",\n       \"L 119.705994 83.157344 \\n\",\n       \"L 120.297813 86.495826 \\n\",\n       \"L 121.481449 94.583373 \\n\",\n       \"L 122.073267 97.073776 \\n\",\n       \"L 122.369176 97.675973 \\n\",\n       \"L 122.665085 97.83863 \\n\",\n       \"L 122.960994 97.559798 \\n\",\n       \"L 123.256903 96.892681 \\n\",\n       \"L 123.848722 94.72071 \\n\",\n       \"L 125.032358 89.748966 \\n\",\n       \"L 125.624176 88.179654 \\n\",\n       \"L 125.920085 87.806579 \\n\",\n       \"L 126.215994 87.719758 \\n\",\n       \"L 126.511903 87.89231 \\n\",\n       \"L 127.103722 88.844737 \\n\",\n       \"L 128.879176 92.979245 \\n\",\n       \"L 129.470994 93.509862 \\n\",\n       \"L 129.766903 93.538747 \\n\",\n       \"L 130.062813 93.417639 \\n\",\n       \"L 130.654631 92.766169 \\n\",\n       \"L 132.430085 90.111589 \\n\",\n       \"L 133.021903 89.727757 \\n\",\n       \"L 133.613722 89.766355 \\n\",\n       \"L 134.20554 90.118754 \\n\",\n       \"L 136.276903 91.670346 \\n\",\n       \"L 136.868722 91.712815 \\n\",\n       \"L 137.46054 91.549817 \\n\",\n       \"L 138.644176 90.829972 \\n\",\n       \"L 139.531903 90.374516 \\n\",\n       \"L 140.419631 90.190236 \\n\",\n       \"L 141.307358 90.32395 \\n\",\n       \"L 143.378722 90.831946 \\n\",\n       \"L 144.562358 90.752993 \\n\",\n       \"L 147.817358 90.161243 \\n\",\n       \"L 151.960085 90.238107 \\n\",\n       \"L 155.215085 89.963324 \\n\",\n       \"L 159.357813 89.88841 \\n\",\n       \"L 162.908722 89.729284 \\n\",\n       \"L 200.193267 89.161419 \\n\",\n       \"L 217.947813 89.311178 \\n\",\n       \"L 238.069631 89.722288 \\n\",\n       \"L 305.832813 91.321721 \\n\",\n       \"L 325.362813 91.4236 \\n\",\n       \"L 346.668267 91.301963 \\n\",\n       \"L 377.442813 90.874039 \\n\",\n       \"L 420.349631 90.312545 \\n\",\n       \"L 434.553267 90.219991 \\n\",\n       \"L 434.553267 90.219991 \\n\",\n       \"\\\" style=\\\"fill:none;stroke:#1f77b4;stroke-linecap:square;stroke-width:1.5;\\\"/>\\n\",\n       \"   </g>\\n\",\n       \"   <g id=\\\"patch_3\\\">\\n\",\n       \"    <path d=\\\"M 61.707813 159.12 \\n\",\n       \"L 61.707813 50.4 \\n\",\n       \"\\\" style=\\\"fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;stroke-width:0.8;\\\"/>\\n\",\n       \"   </g>\\n\",\n       \"   <g id=\\\"patch_4\\\">\\n\",\n       \"    <path d=\\\"M 452.307813 159.12 \\n\",\n       \"L 452.307813 50.4 \\n\",\n       \"\\\" style=\\\"fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;stroke-width:0.8;\\\"/>\\n\",\n       \"   </g>\\n\",\n       \"   <g id=\\\"patch_5\\\">\\n\",\n       \"    <path d=\\\"M 61.707813 159.12 \\n\",\n       \"L 452.307812 159.12 \\n\",\n       \"\\\" style=\\\"fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;stroke-width:0.8;\\\"/>\\n\",\n       \"   </g>\\n\",\n       \"   <g id=\\\"patch_6\\\">\\n\",\n       \"    <path d=\\\"M 61.707813 50.4 \\n\",\n       \"L 452.307812 50.4 \\n\",\n       \"\\\" style=\\\"fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;stroke-width:0.8;\\\"/>\\n\",\n       \"   </g>\\n\",\n       \"  </g>\\n\",\n       \"  <g id=\\\"axes_2\\\">\\n\",\n       \"   <g id=\\\"patch_7\\\">\\n\",\n       \"    <path d=\\\"M 61.707813 267.84 \\n\",\n       \"L 452.307813 267.84 \\n\",\n       \"L 452.307813 159.12 \\n\",\n       \"L 61.707813 159.12 \\n\",\n       \"z\\n\",\n       \"\\\" style=\\\"fill:#ffffff;\\\"/>\\n\",\n       \"   </g>\\n\",\n       \"   <g id=\\\"matplotlib.axis_3\\\">\\n\",\n       \"    <g id=\\\"xtick_8\\\">\\n\",\n       \"     <g id=\\\"line2d_13\\\">\\n\",\n       \"      <g>\\n\",\n       \"       <use style=\\\"stroke:#000000;stroke-width:0.8;\\\" x=\\\"79.462358\\\" xlink:href=\\\"#m992738daa6\\\" y=\\\"267.84\\\"/>\\n\",\n       \"      </g>\\n\",\n       \"     </g>\\n\",\n       \"    </g>\\n\",\n       \"    <g id=\\\"xtick_9\\\">\\n\",\n       \"     <g id=\\\"line2d_14\\\">\\n\",\n       \"      <g>\\n\",\n       \"       <use style=\\\"stroke:#000000;stroke-width:0.8;\\\" x=\\\"138.594899\\\" xlink:href=\\\"#m992738daa6\\\" y=\\\"267.84\\\"/>\\n\",\n       \"      </g>\\n\",\n       \"     </g>\\n\",\n       \"    </g>\\n\",\n       \"    <g id=\\\"xtick_10\\\">\\n\",\n       \"     <g id=\\\"line2d_15\\\">\\n\",\n       \"      <g>\\n\",\n       \"       <use style=\\\"stroke:#000000;stroke-width:0.8;\\\" x=\\\"197.72744\\\" xlink:href=\\\"#m992738daa6\\\" y=\\\"267.84\\\"/>\\n\",\n       \"      </g>\\n\",\n       \"     </g>\\n\",\n       \"    </g>\\n\",\n       \"    <g id=\\\"xtick_11\\\">\\n\",\n       \"     <g id=\\\"line2d_16\\\">\\n\",\n       \"      <g>\\n\",\n       \"       <use style=\\\"stroke:#000000;stroke-width:0.8;\\\" x=\\\"256.859981\\\" xlink:href=\\\"#m992738daa6\\\" y=\\\"267.84\\\"/>\\n\",\n       \"      </g>\\n\",\n       \"     </g>\\n\",\n       \"    </g>\\n\",\n       \"    <g id=\\\"xtick_12\\\">\\n\",\n       \"     <g id=\\\"line2d_17\\\">\\n\",\n       \"      <g>\\n\",\n       \"       <use style=\\\"stroke:#000000;stroke-width:0.8;\\\" x=\\\"315.992522\\\" xlink:href=\\\"#m992738daa6\\\" y=\\\"267.84\\\"/>\\n\",\n       \"      </g>\\n\",\n       \"     </g>\\n\",\n       \"    </g>\\n\",\n       \"    <g id=\\\"xtick_13\\\">\\n\",\n       \"     <g id=\\\"line2d_18\\\">\\n\",\n       \"      <g>\\n\",\n       \"       <use style=\\\"stroke:#000000;stroke-width:0.8;\\\" x=\\\"375.125063\\\" xlink:href=\\\"#m992738daa6\\\" y=\\\"267.84\\\"/>\\n\",\n       \"      </g>\\n\",\n       \"     </g>\\n\",\n       \"    </g>\\n\",\n       \"    <g id=\\\"xtick_14\\\">\\n\",\n       \"     <g id=\\\"line2d_19\\\">\\n\",\n       \"      <g>\\n\",\n       \"       <use style=\\\"stroke:#000000;stroke-width:0.8;\\\" x=\\\"434.257604\\\" xlink:href=\\\"#m992738daa6\\\" y=\\\"267.84\\\"/>\\n\",\n       \"      </g>\\n\",\n       \"     </g>\\n\",\n       \"    </g>\\n\",\n       \"   </g>\\n\",\n       \"   <g id=\\\"matplotlib.axis_4\\\">\\n\",\n       \"    <g id=\\\"ytick_5\\\">\\n\",\n       \"     <g id=\\\"line2d_20\\\">\\n\",\n       \"      <g>\\n\",\n       \"       <use style=\\\"stroke:#000000;stroke-width:0.8;\\\" x=\\\"61.707813\\\" xlink:href=\\\"#m9a60ae2c5e\\\" y=\\\"260.553301\\\"/>\\n\",\n       \"      </g>\\n\",\n       \"     </g>\\n\",\n       \"     <g id=\\\"text_6\\\">\\n\",\n       \"      <!-- −2000 -->\\n\",\n       \"      <g transform=\\\"translate(20.878125 264.35252)scale(0.1 -0.1)\\\">\\n\",\n       \"       <use xlink:href=\\\"#DejaVuSans-8722\\\"/>\\n\",\n       \"       <use x=\\\"83.789062\\\" xlink:href=\\\"#DejaVuSans-50\\\"/>\\n\",\n       \"       <use x=\\\"147.412109\\\" xlink:href=\\\"#DejaVuSans-48\\\"/>\\n\",\n       \"       <use x=\\\"211.035156\\\" xlink:href=\\\"#DejaVuSans-48\\\"/>\\n\",\n       \"       <use x=\\\"274.658203\\\" xlink:href=\\\"#DejaVuSans-48\\\"/>\\n\",\n       \"      </g>\\n\",\n       \"     </g>\\n\",\n       \"    </g>\\n\",\n       \"    <g id=\\\"ytick_6\\\">\\n\",\n       \"     <g id=\\\"line2d_21\\\">\\n\",\n       \"      <g>\\n\",\n       \"       <use style=\\\"stroke:#000000;stroke-width:0.8;\\\" x=\\\"61.707813\\\" xlink:href=\\\"#m9a60ae2c5e\\\" y=\\\"234.498639\\\"/>\\n\",\n       \"      </g>\\n\",\n       \"     </g>\\n\",\n       \"     <g id=\\\"text_7\\\">\\n\",\n       \"      <!-- −1900 -->\\n\",\n       \"      <defs>\\n\",\n       \"       <path d=\\\"M 12.40625 8.296875 \\n\",\n       \"L 28.515625 8.296875 \\n\",\n       \"L 28.515625 63.921875 \\n\",\n       \"L 10.984375 60.40625 \\n\",\n       \"L 10.984375 69.390625 \\n\",\n       \"L 28.421875 72.90625 \\n\",\n       \"L 38.28125 72.90625 \\n\",\n       \"L 38.28125 8.296875 \\n\",\n       \"L 54.390625 8.296875 \\n\",\n       \"L 54.390625 0 \\n\",\n       \"L 12.40625 0 \\n\",\n       \"z\\n\",\n       \"\\\" id=\\\"DejaVuSans-49\\\"/>\\n\",\n       \"       <path d=\\\"M 10.984375 1.515625 \\n\",\n       \"L 10.984375 10.5 \\n\",\n       \"Q 14.703125 8.734375 18.5 7.8125 \\n\",\n       \"Q 22.3125 6.890625 25.984375 6.890625 \\n\",\n       \"Q 35.75 6.890625 40.890625 13.453125 \\n\",\n       \"Q 46.046875 20.015625 46.78125 33.40625 \\n\",\n       \"Q 43.953125 29.203125 39.59375 26.953125 \\n\",\n       \"Q 35.25 24.703125 29.984375 24.703125 \\n\",\n       \"Q 19.046875 24.703125 12.671875 31.3125 \\n\",\n       \"Q 6.296875 37.9375 6.296875 49.421875 \\n\",\n       \"Q 6.296875 60.640625 12.9375 67.421875 \\n\",\n       \"Q 19.578125 74.21875 30.609375 74.21875 \\n\",\n       \"Q 43.265625 74.21875 49.921875 64.515625 \\n\",\n       \"Q 56.59375 54.828125 56.59375 36.375 \\n\",\n       \"Q 56.59375 19.140625 48.40625 8.859375 \\n\",\n       \"Q 40.234375 -1.421875 26.421875 -1.421875 \\n\",\n       \"Q 22.703125 -1.421875 18.890625 -0.6875 \\n\",\n       \"Q 15.09375 0.046875 10.984375 1.515625 \\n\",\n       \"z\\n\",\n       \"M 30.609375 32.421875 \\n\",\n       \"Q 37.25 32.421875 41.125 36.953125 \\n\",\n       \"Q 45.015625 41.5 45.015625 49.421875 \\n\",\n       \"Q 45.015625 57.28125 41.125 61.84375 \\n\",\n       \"Q 37.25 66.40625 30.609375 66.40625 \\n\",\n       \"Q 23.96875 66.40625 20.09375 61.84375 \\n\",\n       \"Q 16.21875 57.28125 16.21875 49.421875 \\n\",\n       \"Q 16.21875 41.5 20.09375 36.953125 \\n\",\n       \"Q 23.96875 32.421875 30.609375 32.421875 \\n\",\n       \"z\\n\",\n       \"\\\" id=\\\"DejaVuSans-57\\\"/>\\n\",\n       \"      </defs>\\n\",\n       \"      <g transform=\\\"translate(20.878125 238.297858)scale(0.1 -0.1)\\\">\\n\",\n       \"       <use xlink:href=\\\"#DejaVuSans-8722\\\"/>\\n\",\n       \"       <use x=\\\"83.789062\\\" xlink:href=\\\"#DejaVuSans-49\\\"/>\\n\",\n       \"       <use x=\\\"147.412109\\\" xlink:href=\\\"#DejaVuSans-57\\\"/>\\n\",\n       \"       <use x=\\\"211.035156\\\" xlink:href=\\\"#DejaVuSans-48\\\"/>\\n\",\n       \"       <use x=\\\"274.658203\\\" xlink:href=\\\"#DejaVuSans-48\\\"/>\\n\",\n       \"      </g>\\n\",\n       \"     </g>\\n\",\n       \"    </g>\\n\",\n       \"    <g id=\\\"ytick_7\\\">\\n\",\n       \"     <g id=\\\"line2d_22\\\">\\n\",\n       \"      <g>\\n\",\n       \"       <use style=\\\"stroke:#000000;stroke-width:0.8;\\\" x=\\\"61.707813\\\" xlink:href=\\\"#m9a60ae2c5e\\\" y=\\\"208.443978\\\"/>\\n\",\n       \"      </g>\\n\",\n       \"     </g>\\n\",\n       \"     <g id=\\\"text_8\\\">\\n\",\n       \"      <!-- −1800 -->\\n\",\n       \"      <defs>\\n\",\n       \"       <path d=\\\"M 31.78125 34.625 \\n\",\n       \"Q 24.75 34.625 20.71875 30.859375 \\n\",\n       \"Q 16.703125 27.09375 16.703125 20.515625 \\n\",\n       \"Q 16.703125 13.921875 20.71875 10.15625 \\n\",\n       \"Q 24.75 6.390625 31.78125 6.390625 \\n\",\n       \"Q 38.8125 6.390625 42.859375 10.171875 \\n\",\n       \"Q 46.921875 13.96875 46.921875 20.515625 \\n\",\n       \"Q 46.921875 27.09375 42.890625 30.859375 \\n\",\n       \"Q 38.875 34.625 31.78125 34.625 \\n\",\n       \"z\\n\",\n       \"M 21.921875 38.8125 \\n\",\n       \"Q 15.578125 40.375 12.03125 44.71875 \\n\",\n       \"Q 8.5 49.078125 8.5 55.328125 \\n\",\n       \"Q 8.5 64.0625 14.71875 69.140625 \\n\",\n       \"Q 20.953125 74.21875 31.78125 74.21875 \\n\",\n       \"Q 42.671875 74.21875 48.875 69.140625 \\n\",\n       \"Q 55.078125 64.0625 55.078125 55.328125 \\n\",\n       \"Q 55.078125 49.078125 51.53125 44.71875 \\n\",\n       \"Q 48 40.375 41.703125 38.8125 \\n\",\n       \"Q 48.828125 37.15625 52.796875 32.3125 \\n\",\n       \"Q 56.78125 27.484375 56.78125 20.515625 \\n\",\n       \"Q 56.78125 9.90625 50.3125 4.234375 \\n\",\n       \"Q 43.84375 -1.421875 31.78125 -1.421875 \\n\",\n       \"Q 19.734375 -1.421875 13.25 4.234375 \\n\",\n       \"Q 6.78125 9.90625 6.78125 20.515625 \\n\",\n       \"Q 6.78125 27.484375 10.78125 32.3125 \\n\",\n       \"Q 14.796875 37.15625 21.921875 38.8125 \\n\",\n       \"z\\n\",\n       \"M 18.3125 54.390625 \\n\",\n       \"Q 18.3125 48.734375 21.84375 45.5625 \\n\",\n       \"Q 25.390625 42.390625 31.78125 42.390625 \\n\",\n       \"Q 38.140625 42.390625 41.71875 45.5625 \\n\",\n       \"Q 45.3125 48.734375 45.3125 54.390625 \\n\",\n       \"Q 45.3125 60.0625 41.71875 63.234375 \\n\",\n       \"Q 38.140625 66.40625 31.78125 66.40625 \\n\",\n       \"Q 25.390625 66.40625 21.84375 63.234375 \\n\",\n       \"Q 18.3125 60.0625 18.3125 54.390625 \\n\",\n       \"z\\n\",\n       \"\\\" id=\\\"DejaVuSans-56\\\"/>\\n\",\n       \"      </defs>\\n\",\n       \"      <g transform=\\\"translate(20.878125 212.243196)scale(0.1 -0.1)\\\">\\n\",\n       \"       <use xlink:href=\\\"#DejaVuSans-8722\\\"/>\\n\",\n       \"       <use x=\\\"83.789062\\\" xlink:href=\\\"#DejaVuSans-49\\\"/>\\n\",\n       \"       <use x=\\\"147.412109\\\" xlink:href=\\\"#DejaVuSans-56\\\"/>\\n\",\n       \"       <use x=\\\"211.035156\\\" xlink:href=\\\"#DejaVuSans-48\\\"/>\\n\",\n       \"       <use x=\\\"274.658203\\\" xlink:href=\\\"#DejaVuSans-48\\\"/>\\n\",\n       \"      </g>\\n\",\n       \"     </g>\\n\",\n       \"    </g>\\n\",\n       \"    <g id=\\\"ytick_8\\\">\\n\",\n       \"     <g id=\\\"line2d_23\\\">\\n\",\n       \"      <g>\\n\",\n       \"       <use style=\\\"stroke:#000000;stroke-width:0.8;\\\" x=\\\"61.707813\\\" xlink:href=\\\"#m9a60ae2c5e\\\" y=\\\"182.389316\\\"/>\\n\",\n       \"      </g>\\n\",\n       \"     </g>\\n\",\n       \"     <g id=\\\"text_9\\\">\\n\",\n       \"      <!-- −1700 -->\\n\",\n       \"      <defs>\\n\",\n       \"       <path d=\\\"M 8.203125 72.90625 \\n\",\n       \"L 55.078125 72.90625 \\n\",\n       \"L 55.078125 68.703125 \\n\",\n       \"L 28.609375 0 \\n\",\n       \"L 18.3125 0 \\n\",\n       \"L 43.21875 64.59375 \\n\",\n       \"L 8.203125 64.59375 \\n\",\n       \"z\\n\",\n       \"\\\" id=\\\"DejaVuSans-55\\\"/>\\n\",\n       \"      </defs>\\n\",\n       \"      <g transform=\\\"translate(20.878125 186.188535)scale(0.1 -0.1)\\\">\\n\",\n       \"       <use xlink:href=\\\"#DejaVuSans-8722\\\"/>\\n\",\n       \"       <use x=\\\"83.789062\\\" xlink:href=\\\"#DejaVuSans-49\\\"/>\\n\",\n       \"       <use x=\\\"147.412109\\\" xlink:href=\\\"#DejaVuSans-55\\\"/>\\n\",\n       \"       <use x=\\\"211.035156\\\" xlink:href=\\\"#DejaVuSans-48\\\"/>\\n\",\n       \"       <use x=\\\"274.658203\\\" xlink:href=\\\"#DejaVuSans-48\\\"/>\\n\",\n       \"      </g>\\n\",\n       \"     </g>\\n\",\n       \"    </g>\\n\",\n       \"    <g id=\\\"text_10\\\">\\n\",\n       \"     <!-- OOP [Nm2] -->\\n\",\n       \"     <defs>\\n\",\n       \"      <path d=\\\"M 39.40625 66.21875 \\n\",\n       \"Q 28.65625 66.21875 22.328125 58.203125 \\n\",\n       \"Q 16.015625 50.203125 16.015625 36.375 \\n\",\n       \"Q 16.015625 22.609375 22.328125 14.59375 \\n\",\n       \"Q 28.65625 6.59375 39.40625 6.59375 \\n\",\n       \"Q 50.140625 6.59375 56.421875 14.59375 \\n\",\n       \"Q 62.703125 22.609375 62.703125 36.375 \\n\",\n       \"Q 62.703125 50.203125 56.421875 58.203125 \\n\",\n       \"Q 50.140625 66.21875 39.40625 66.21875 \\n\",\n       \"z\\n\",\n       \"M 39.40625 74.21875 \\n\",\n       \"Q 54.734375 74.21875 63.90625 63.9375 \\n\",\n       \"Q 73.09375 53.65625 73.09375 36.375 \\n\",\n       \"Q 73.09375 19.140625 63.90625 8.859375 \\n\",\n       \"Q 54.734375 -1.421875 39.40625 -1.421875 \\n\",\n       \"Q 24.03125 -1.421875 14.8125 8.828125 \\n\",\n       \"Q 5.609375 19.09375 5.609375 36.375 \\n\",\n       \"Q 5.609375 53.65625 14.8125 63.9375 \\n\",\n       \"Q 24.03125 74.21875 39.40625 74.21875 \\n\",\n       \"z\\n\",\n       \"\\\" id=\\\"DejaVuSans-79\\\"/>\\n\",\n       \"      <path d=\\\"M 19.671875 64.796875 \\n\",\n       \"L 19.671875 37.40625 \\n\",\n       \"L 32.078125 37.40625 \\n\",\n       \"Q 38.96875 37.40625 42.71875 40.96875 \\n\",\n       \"Q 46.484375 44.53125 46.484375 51.125 \\n\",\n       \"Q 46.484375 57.671875 42.71875 61.234375 \\n\",\n       \"Q 38.96875 64.796875 32.078125 64.796875 \\n\",\n       \"z\\n\",\n       \"M 9.8125 72.90625 \\n\",\n       \"L 32.078125 72.90625 \\n\",\n       \"Q 44.34375 72.90625 50.609375 67.359375 \\n\",\n       \"Q 56.890625 61.8125 56.890625 51.125 \\n\",\n       \"Q 56.890625 40.328125 50.609375 34.8125 \\n\",\n       \"Q 44.34375 29.296875 32.078125 29.296875 \\n\",\n       \"L 19.671875 29.296875 \\n\",\n       \"L 19.671875 0 \\n\",\n       \"L 9.8125 0 \\n\",\n       \"z\\n\",\n       \"\\\" id=\\\"DejaVuSans-80\\\"/>\\n\",\n       \"     </defs>\\n\",\n       \"     <g transform=\\\"translate(14.798438 241.649531)rotate(-90)scale(0.1 -0.1)\\\">\\n\",\n       \"      <use xlink:href=\\\"#DejaVuSans-79\\\"/>\\n\",\n       \"      <use x=\\\"78.710938\\\" xlink:href=\\\"#DejaVuSans-79\\\"/>\\n\",\n       \"      <use x=\\\"157.421875\\\" xlink:href=\\\"#DejaVuSans-80\\\"/>\\n\",\n       \"      <use x=\\\"217.724609\\\" xlink:href=\\\"#DejaVuSans-32\\\"/>\\n\",\n       \"      <use x=\\\"249.511719\\\" xlink:href=\\\"#DejaVuSans-91\\\"/>\\n\",\n       \"      <use x=\\\"288.525391\\\" xlink:href=\\\"#DejaVuSans-78\\\"/>\\n\",\n       \"      <use x=\\\"363.330078\\\" xlink:href=\\\"#DejaVuSans-109\\\"/>\\n\",\n       \"      <use x=\\\"460.742188\\\" xlink:href=\\\"#DejaVuSans-50\\\"/>\\n\",\n       \"      <use x=\\\"524.365234\\\" xlink:href=\\\"#DejaVuSans-93\\\"/>\\n\",\n       \"     </g>\\n\",\n       \"    </g>\\n\",\n       \"   </g>\\n\",\n       \"   <g id=\\\"line2d_24\\\">\\n\",\n       \"    <path clip-path=\\\"url(#p518eb580f2)\\\" d=\\\"M 79.462358 188.188052 \\n\",\n       \"L 83.605085 187.905508 \\n\",\n       \"L 85.676449 187.797191 \\n\",\n       \"L 85.972358 187.918624 \\n\",\n       \"L 86.268267 188.262256 \\n\",\n       \"L 86.564176 188.962144 \\n\",\n       \"L 86.860085 190.156992 \\n\",\n       \"L 87.155994 191.961396 \\n\",\n       \"L 87.747813 197.679623 \\n\",\n       \"L 88.339631 206.236814 \\n\",\n       \"L 89.227358 223.134418 \\n\",\n       \"L 90.410994 246.81199 \\n\",\n       \"L 91.002813 255.779709 \\n\",\n       \"L 91.594631 261.427796 \\n\",\n       \"L 91.89054 262.747649 \\n\",\n       \"L 92.186449 262.898182 \\n\",\n       \"L 92.482358 261.798516 \\n\",\n       \"L 92.778267 259.439989 \\n\",\n       \"L 93.370085 251.35088 \\n\",\n       \"L 94.257813 233.122465 \\n\",\n       \"L 96.329176 186.446072 \\n\",\n       \"L 96.920994 177.862608 \\n\",\n       \"L 97.512813 172.688037 \\n\",\n       \"L 97.808722 171.345121 \\n\",\n       \"L 98.104631 170.778502 \\n\",\n       \"L 98.40054 170.906594 \\n\",\n       \"L 98.696449 171.602312 \\n\",\n       \"L 99.288267 174.090413 \\n\",\n       \"L 100.471903 179.493025 \\n\",\n       \"L 101.063722 181.43397 \\n\",\n       \"L 101.65554 182.773535 \\n\",\n       \"L 102.247358 183.451478 \\n\",\n       \"L 102.543267 183.533501 \\n\",\n       \"L 102.839176 183.43359 \\n\",\n       \"L 103.135085 183.133129 \\n\",\n       \"L 103.726903 181.8928 \\n\",\n       \"L 104.318722 179.836911 \\n\",\n       \"L 105.206449 175.539908 \\n\",\n       \"L 106.685994 167.628415 \\n\",\n       \"L 107.277813 165.373816 \\n\",\n       \"L 107.869631 164.178196 \\n\",\n       \"L 108.16554 164.061818 \\n\",\n       \"L 108.461449 164.292768 \\n\",\n       \"L 108.757358 164.863553 \\n\",\n       \"L 109.349176 166.942048 \\n\",\n       \"L 110.236903 171.706395 \\n\",\n       \"L 111.716449 180.197754 \\n\",\n       \"L 112.308267 182.704179 \\n\",\n       \"L 112.900085 184.292006 \\n\",\n       \"L 113.195994 184.718722 \\n\",\n       \"L 113.491903 184.918316 \\n\",\n       \"L 113.787813 184.919828 \\n\",\n       \"L 114.379631 184.488639 \\n\",\n       \"L 116.155085 182.525297 \\n\",\n       \"L 116.746903 182.394948 \\n\",\n       \"L 117.338722 182.548845 \\n\",\n       \"L 118.226449 183.149014 \\n\",\n       \"L 119.114176 183.741907 \\n\",\n       \"L 119.705994 183.925351 \\n\",\n       \"L 120.297813 183.906797 \\n\",\n       \"L 121.18554 183.531013 \\n\",\n       \"L 122.665085 182.741327 \\n\",\n       \"L 123.256903 182.603467 \\n\",\n       \"L 124.144631 182.692873 \\n\",\n       \"L 125.328267 183.17153 \\n\",\n       \"L 126.511903 183.631461 \\n\",\n       \"L 127.399631 183.774169 \\n\",\n       \"L 128.583267 183.704123 \\n\",\n       \"L 130.358722 183.583267 \\n\",\n       \"L 131.542358 183.736687 \\n\",\n       \"L 134.501449 184.263253 \\n\",\n       \"L 140.123722 184.65704 \\n\",\n       \"L 142.786903 184.888443 \\n\",\n       \"L 146.633722 185.201465 \\n\",\n       \"L 151.664176 185.622053 \\n\",\n       \"L 172.377813 187.179534 \\n\",\n       \"L 185.397813 187.904366 \\n\",\n       \"L 197.530085 188.35631 \\n\",\n       \"L 209.07054 188.568522 \\n\",\n       \"L 220.906903 188.565739 \\n\",\n       \"L 233.630994 188.335469 \\n\",\n       \"L 248.13054 187.843665 \\n\",\n       \"L 269.731903 186.857944 \\n\",\n       \"L 296.95554 185.659837 \\n\",\n       \"L 313.23054 185.174085 \\n\",\n       \"L 328.617813 184.934876 \\n\",\n       \"L 344.596903 184.910638 \\n\",\n       \"L 362.647358 185.111105 \\n\",\n       \"L 387.503722 185.630519 \\n\",\n       \"L 432.185994 186.581305 \\n\",\n       \"L 434.553267 186.615635 \\n\",\n       \"L 434.553267 186.615635 \\n\",\n       \"\\\" style=\\\"fill:none;stroke:#1f77b4;stroke-linecap:square;stroke-width:1.5;\\\"/>\\n\",\n       \"   </g>\\n\",\n       \"   <g id=\\\"patch_8\\\">\\n\",\n       \"    <path d=\\\"M 61.707813 267.84 \\n\",\n       \"L 61.707813 159.12 \\n\",\n       \"\\\" style=\\\"fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;stroke-width:0.8;\\\"/>\\n\",\n       \"   </g>\\n\",\n       \"   <g id=\\\"patch_9\\\">\\n\",\n       \"    <path d=\\\"M 452.307813 267.84 \\n\",\n       \"L 452.307813 159.12 \\n\",\n       \"\\\" style=\\\"fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;stroke-width:0.8;\\\"/>\\n\",\n       \"   </g>\\n\",\n       \"   <g id=\\\"patch_10\\\">\\n\",\n       \"    <path d=\\\"M 61.707813 267.84 \\n\",\n       \"L 452.307812 267.84 \\n\",\n       \"\\\" style=\\\"fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;stroke-width:0.8;\\\"/>\\n\",\n       \"   </g>\\n\",\n       \"   <g id=\\\"patch_11\\\">\\n\",\n       \"    <path d=\\\"M 61.707813 159.12 \\n\",\n       \"L 452.307812 159.12 \\n\",\n       \"\\\" style=\\\"fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;stroke-width:0.8;\\\"/>\\n\",\n       \"   </g>\\n\",\n       \"  </g>\\n\",\n       \"  <g id=\\\"axes_3\\\">\\n\",\n       \"   <g id=\\\"patch_12\\\">\\n\",\n       \"    <path d=\\\"M 61.707813 376.56 \\n\",\n       \"L 452.307813 376.56 \\n\",\n       \"L 452.307813 267.84 \\n\",\n       \"L 61.707813 267.84 \\n\",\n       \"z\\n\",\n       \"\\\" style=\\\"fill:#ffffff;\\\"/>\\n\",\n       \"   </g>\\n\",\n       \"   <g id=\\\"matplotlib.axis_5\\\">\\n\",\n       \"    <g id=\\\"xtick_15\\\">\\n\",\n       \"     <g id=\\\"line2d_25\\\">\\n\",\n       \"      <g>\\n\",\n       \"       <use style=\\\"stroke:#000000;stroke-width:0.8;\\\" x=\\\"79.462358\\\" xlink:href=\\\"#m992738daa6\\\" y=\\\"376.56\\\"/>\\n\",\n       \"      </g>\\n\",\n       \"     </g>\\n\",\n       \"     <g id=\\\"text_11\\\">\\n\",\n       \"      <!-- 0 -->\\n\",\n       \"      <g transform=\\\"translate(76.281108 391.158437)scale(0.1 -0.1)\\\">\\n\",\n       \"       <use xlink:href=\\\"#DejaVuSans-48\\\"/>\\n\",\n       \"      </g>\\n\",\n       \"     </g>\\n\",\n       \"    </g>\\n\",\n       \"    <g id=\\\"xtick_16\\\">\\n\",\n       \"     <g id=\\\"line2d_26\\\">\\n\",\n       \"      <g>\\n\",\n       \"       <use style=\\\"stroke:#000000;stroke-width:0.8;\\\" x=\\\"138.594899\\\" xlink:href=\\\"#m992738daa6\\\" y=\\\"376.56\\\"/>\\n\",\n       \"      </g>\\n\",\n       \"     </g>\\n\",\n       \"     <g id=\\\"text_12\\\">\\n\",\n       \"      <!-- 5 -->\\n\",\n       \"      <defs>\\n\",\n       \"       <path d=\\\"M 10.796875 72.90625 \\n\",\n       \"L 49.515625 72.90625 \\n\",\n       \"L 49.515625 64.59375 \\n\",\n       \"L 19.828125 64.59375 \\n\",\n       \"L 19.828125 46.734375 \\n\",\n       \"Q 21.96875 47.46875 24.109375 47.828125 \\n\",\n       \"Q 26.265625 48.1875 28.421875 48.1875 \\n\",\n       \"Q 40.625 48.1875 47.75 41.5 \\n\",\n       \"Q 54.890625 34.8125 54.890625 23.390625 \\n\",\n       \"Q 54.890625 11.625 47.5625 5.09375 \\n\",\n       \"Q 40.234375 -1.421875 26.90625 -1.421875 \\n\",\n       \"Q 22.3125 -1.421875 17.546875 -0.640625 \\n\",\n       \"Q 12.796875 0.140625 7.71875 1.703125 \\n\",\n       \"L 7.71875 11.625 \\n\",\n       \"Q 12.109375 9.234375 16.796875 8.0625 \\n\",\n       \"Q 21.484375 6.890625 26.703125 6.890625 \\n\",\n       \"Q 35.15625 6.890625 40.078125 11.328125 \\n\",\n       \"Q 45.015625 15.765625 45.015625 23.390625 \\n\",\n       \"Q 45.015625 31 40.078125 35.4375 \\n\",\n       \"Q 35.15625 39.890625 26.703125 39.890625 \\n\",\n       \"Q 22.75 39.890625 18.8125 39.015625 \\n\",\n       \"Q 14.890625 38.140625 10.796875 36.28125 \\n\",\n       \"z\\n\",\n       \"\\\" id=\\\"DejaVuSans-53\\\"/>\\n\",\n       \"      </defs>\\n\",\n       \"      <g transform=\\\"translate(135.413649 391.158437)scale(0.1 -0.1)\\\">\\n\",\n       \"       <use xlink:href=\\\"#DejaVuSans-53\\\"/>\\n\",\n       \"      </g>\\n\",\n       \"     </g>\\n\",\n       \"    </g>\\n\",\n       \"    <g id=\\\"xtick_17\\\">\\n\",\n       \"     <g id=\\\"line2d_27\\\">\\n\",\n       \"      <g>\\n\",\n       \"       <use style=\\\"stroke:#000000;stroke-width:0.8;\\\" x=\\\"197.72744\\\" xlink:href=\\\"#m992738daa6\\\" y=\\\"376.56\\\"/>\\n\",\n       \"      </g>\\n\",\n       \"     </g>\\n\",\n       \"     <g id=\\\"text_13\\\">\\n\",\n       \"      <!-- 10 -->\\n\",\n       \"      <g transform=\\\"translate(191.36494 391.158437)scale(0.1 -0.1)\\\">\\n\",\n       \"       <use xlink:href=\\\"#DejaVuSans-49\\\"/>\\n\",\n       \"       <use x=\\\"63.623047\\\" xlink:href=\\\"#DejaVuSans-48\\\"/>\\n\",\n       \"      </g>\\n\",\n       \"     </g>\\n\",\n       \"    </g>\\n\",\n       \"    <g id=\\\"xtick_18\\\">\\n\",\n       \"     <g id=\\\"line2d_28\\\">\\n\",\n       \"      <g>\\n\",\n       \"       <use style=\\\"stroke:#000000;stroke-width:0.8;\\\" x=\\\"256.859981\\\" xlink:href=\\\"#m992738daa6\\\" y=\\\"376.56\\\"/>\\n\",\n       \"      </g>\\n\",\n       \"     </g>\\n\",\n       \"     <g id=\\\"text_14\\\">\\n\",\n       \"      <!-- 15 -->\\n\",\n       \"      <g transform=\\\"translate(250.497481 391.158437)scale(0.1 -0.1)\\\">\\n\",\n       \"       <use xlink:href=\\\"#DejaVuSans-49\\\"/>\\n\",\n       \"       <use x=\\\"63.623047\\\" xlink:href=\\\"#DejaVuSans-53\\\"/>\\n\",\n       \"      </g>\\n\",\n       \"     </g>\\n\",\n       \"    </g>\\n\",\n       \"    <g id=\\\"xtick_19\\\">\\n\",\n       \"     <g id=\\\"line2d_29\\\">\\n\",\n       \"      <g>\\n\",\n       \"       <use style=\\\"stroke:#000000;stroke-width:0.8;\\\" x=\\\"315.992522\\\" xlink:href=\\\"#m992738daa6\\\" y=\\\"376.56\\\"/>\\n\",\n       \"      </g>\\n\",\n       \"     </g>\\n\",\n       \"     <g id=\\\"text_15\\\">\\n\",\n       \"      <!-- 20 -->\\n\",\n       \"      <g transform=\\\"translate(309.630022 391.158437)scale(0.1 -0.1)\\\">\\n\",\n       \"       <use xlink:href=\\\"#DejaVuSans-50\\\"/>\\n\",\n       \"       <use x=\\\"63.623047\\\" xlink:href=\\\"#DejaVuSans-48\\\"/>\\n\",\n       \"      </g>\\n\",\n       \"     </g>\\n\",\n       \"    </g>\\n\",\n       \"    <g id=\\\"xtick_20\\\">\\n\",\n       \"     <g id=\\\"line2d_30\\\">\\n\",\n       \"      <g>\\n\",\n       \"       <use style=\\\"stroke:#000000;stroke-width:0.8;\\\" x=\\\"375.125063\\\" xlink:href=\\\"#m992738daa6\\\" y=\\\"376.56\\\"/>\\n\",\n       \"      </g>\\n\",\n       \"     </g>\\n\",\n       \"     <g id=\\\"text_16\\\">\\n\",\n       \"      <!-- 25 -->\\n\",\n       \"      <g transform=\\\"translate(368.762563 391.158437)scale(0.1 -0.1)\\\">\\n\",\n       \"       <use xlink:href=\\\"#DejaVuSans-50\\\"/>\\n\",\n       \"       <use x=\\\"63.623047\\\" xlink:href=\\\"#DejaVuSans-53\\\"/>\\n\",\n       \"      </g>\\n\",\n       \"     </g>\\n\",\n       \"    </g>\\n\",\n       \"    <g id=\\\"xtick_21\\\">\\n\",\n       \"     <g id=\\\"line2d_31\\\">\\n\",\n       \"      <g>\\n\",\n       \"       <use style=\\\"stroke:#000000;stroke-width:0.8;\\\" x=\\\"434.257604\\\" xlink:href=\\\"#m992738daa6\\\" y=\\\"376.56\\\"/>\\n\",\n       \"      </g>\\n\",\n       \"     </g>\\n\",\n       \"     <g id=\\\"text_17\\\">\\n\",\n       \"      <!-- 30 -->\\n\",\n       \"      <defs>\\n\",\n       \"       <path d=\\\"M 40.578125 39.3125 \\n\",\n       \"Q 47.65625 37.796875 51.625 33 \\n\",\n       \"Q 55.609375 28.21875 55.609375 21.1875 \\n\",\n       \"Q 55.609375 10.40625 48.1875 4.484375 \\n\",\n       \"Q 40.765625 -1.421875 27.09375 -1.421875 \\n\",\n       \"Q 22.515625 -1.421875 17.65625 -0.515625 \\n\",\n       \"Q 12.796875 0.390625 7.625 2.203125 \\n\",\n       \"L 7.625 11.71875 \\n\",\n       \"Q 11.71875 9.328125 16.59375 8.109375 \\n\",\n       \"Q 21.484375 6.890625 26.8125 6.890625 \\n\",\n       \"Q 36.078125 6.890625 40.9375 10.546875 \\n\",\n       \"Q 45.796875 14.203125 45.796875 21.1875 \\n\",\n       \"Q 45.796875 27.640625 41.28125 31.265625 \\n\",\n       \"Q 36.765625 34.90625 28.71875 34.90625 \\n\",\n       \"L 20.21875 34.90625 \\n\",\n       \"L 20.21875 43.015625 \\n\",\n       \"L 29.109375 43.015625 \\n\",\n       \"Q 36.375 43.015625 40.234375 45.921875 \\n\",\n       \"Q 44.09375 48.828125 44.09375 54.296875 \\n\",\n       \"Q 44.09375 59.90625 40.109375 62.90625 \\n\",\n       \"Q 36.140625 65.921875 28.71875 65.921875 \\n\",\n       \"Q 24.65625 65.921875 20.015625 65.03125 \\n\",\n       \"Q 15.375 64.15625 9.8125 62.3125 \\n\",\n       \"L 9.8125 71.09375 \\n\",\n       \"Q 15.4375 72.65625 20.34375 73.4375 \\n\",\n       \"Q 25.25 74.21875 29.59375 74.21875 \\n\",\n       \"Q 40.828125 74.21875 47.359375 69.109375 \\n\",\n       \"Q 53.90625 64.015625 53.90625 55.328125 \\n\",\n       \"Q 53.90625 49.265625 50.4375 45.09375 \\n\",\n       \"Q 46.96875 40.921875 40.578125 39.3125 \\n\",\n       \"z\\n\",\n       \"\\\" id=\\\"DejaVuSans-51\\\"/>\\n\",\n       \"      </defs>\\n\",\n       \"      <g transform=\\\"translate(427.895104 391.158437)scale(0.1 -0.1)\\\">\\n\",\n       \"       <use xlink:href=\\\"#DejaVuSans-51\\\"/>\\n\",\n       \"       <use x=\\\"63.623047\\\" xlink:href=\\\"#DejaVuSans-48\\\"/>\\n\",\n       \"      </g>\\n\",\n       \"     </g>\\n\",\n       \"    </g>\\n\",\n       \"    <g id=\\\"text_18\\\">\\n\",\n       \"     <!-- time [s] -->\\n\",\n       \"     <defs>\\n\",\n       \"      <path d=\\\"M 18.3125 70.21875 \\n\",\n       \"L 18.3125 54.6875 \\n\",\n       \"L 36.8125 54.6875 \\n\",\n       \"L 36.8125 47.703125 \\n\",\n       \"L 18.3125 47.703125 \\n\",\n       \"L 18.3125 18.015625 \\n\",\n       \"Q 18.3125 11.328125 20.140625 9.421875 \\n\",\n       \"Q 21.96875 7.515625 27.59375 7.515625 \\n\",\n       \"L 36.8125 7.515625 \\n\",\n       \"L 36.8125 0 \\n\",\n       \"L 27.59375 0 \\n\",\n       \"Q 17.1875 0 13.234375 3.875 \\n\",\n       \"Q 9.28125 7.765625 9.28125 18.015625 \\n\",\n       \"L 9.28125 47.703125 \\n\",\n       \"L 2.6875 47.703125 \\n\",\n       \"L 2.6875 54.6875 \\n\",\n       \"L 9.28125 54.6875 \\n\",\n       \"L 9.28125 70.21875 \\n\",\n       \"z\\n\",\n       \"\\\" id=\\\"DejaVuSans-116\\\"/>\\n\",\n       \"      <path d=\\\"M 56.203125 29.59375 \\n\",\n       \"L 56.203125 25.203125 \\n\",\n       \"L 14.890625 25.203125 \\n\",\n       \"Q 15.484375 15.921875 20.484375 11.0625 \\n\",\n       \"Q 25.484375 6.203125 34.421875 6.203125 \\n\",\n       \"Q 39.59375 6.203125 44.453125 7.46875 \\n\",\n       \"Q 49.3125 8.734375 54.109375 11.28125 \\n\",\n       \"L 54.109375 2.78125 \\n\",\n       \"Q 49.265625 0.734375 44.1875 -0.34375 \\n\",\n       \"Q 39.109375 -1.421875 33.890625 -1.421875 \\n\",\n       \"Q 20.796875 -1.421875 13.15625 6.1875 \\n\",\n       \"Q 5.515625 13.8125 5.515625 26.8125 \\n\",\n       \"Q 5.515625 40.234375 12.765625 48.109375 \\n\",\n       \"Q 20.015625 56 32.328125 56 \\n\",\n       \"Q 43.359375 56 49.78125 48.890625 \\n\",\n       \"Q 56.203125 41.796875 56.203125 29.59375 \\n\",\n       \"z\\n\",\n       \"M 47.21875 32.234375 \\n\",\n       \"Q 47.125 39.59375 43.09375 43.984375 \\n\",\n       \"Q 39.0625 48.390625 32.421875 48.390625 \\n\",\n       \"Q 24.90625 48.390625 20.390625 44.140625 \\n\",\n       \"Q 15.875 39.890625 15.1875 32.171875 \\n\",\n       \"z\\n\",\n       \"\\\" id=\\\"DejaVuSans-101\\\"/>\\n\",\n       \"     </defs>\\n\",\n       \"     <g transform=\\\"translate(237.616406 404.836562)scale(0.1 -0.1)\\\">\\n\",\n       \"      <use xlink:href=\\\"#DejaVuSans-116\\\"/>\\n\",\n       \"      <use x=\\\"39.208984\\\" xlink:href=\\\"#DejaVuSans-105\\\"/>\\n\",\n       \"      <use x=\\\"66.992188\\\" xlink:href=\\\"#DejaVuSans-109\\\"/>\\n\",\n       \"      <use x=\\\"164.404297\\\" xlink:href=\\\"#DejaVuSans-101\\\"/>\\n\",\n       \"      <use x=\\\"225.927734\\\" xlink:href=\\\"#DejaVuSans-32\\\"/>\\n\",\n       \"      <use x=\\\"257.714844\\\" xlink:href=\\\"#DejaVuSans-91\\\"/>\\n\",\n       \"      <use x=\\\"296.728516\\\" xlink:href=\\\"#DejaVuSans-115\\\"/>\\n\",\n       \"      <use x=\\\"348.828125\\\" xlink:href=\\\"#DejaVuSans-93\\\"/>\\n\",\n       \"     </g>\\n\",\n       \"    </g>\\n\",\n       \"   </g>\\n\",\n       \"   <g id=\\\"matplotlib.axis_6\\\">\\n\",\n       \"    <g id=\\\"ytick_9\\\">\\n\",\n       \"     <g id=\\\"line2d_32\\\">\\n\",\n       \"      <g>\\n\",\n       \"       <use style=\\\"stroke:#000000;stroke-width:0.8;\\\" x=\\\"61.707813\\\" xlink:href=\\\"#m9a60ae2c5e\\\" y=\\\"372.42244\\\"/>\\n\",\n       \"      </g>\\n\",\n       \"     </g>\\n\",\n       \"     <g id=\\\"text_19\\\">\\n\",\n       \"      <!-- 200 -->\\n\",\n       \"      <g transform=\\\"translate(35.620312 376.221659)scale(0.1 -0.1)\\\">\\n\",\n       \"       <use xlink:href=\\\"#DejaVuSans-50\\\"/>\\n\",\n       \"       <use x=\\\"63.623047\\\" xlink:href=\\\"#DejaVuSans-48\\\"/>\\n\",\n       \"       <use x=\\\"127.246094\\\" xlink:href=\\\"#DejaVuSans-48\\\"/>\\n\",\n       \"      </g>\\n\",\n       \"     </g>\\n\",\n       \"    </g>\\n\",\n       \"    <g id=\\\"ytick_10\\\">\\n\",\n       \"     <g id=\\\"line2d_33\\\">\\n\",\n       \"      <g>\\n\",\n       \"       <use style=\\\"stroke:#000000;stroke-width:0.8;\\\" x=\\\"61.707813\\\" xlink:href=\\\"#m9a60ae2c5e\\\" y=\\\"345.129441\\\"/>\\n\",\n       \"      </g>\\n\",\n       \"     </g>\\n\",\n       \"     <g id=\\\"text_20\\\">\\n\",\n       \"      <!-- 400 -->\\n\",\n       \"      <g transform=\\\"translate(35.620312 348.928659)scale(0.1 -0.1)\\\">\\n\",\n       \"       <use xlink:href=\\\"#DejaVuSans-52\\\"/>\\n\",\n       \"       <use x=\\\"63.623047\\\" xlink:href=\\\"#DejaVuSans-48\\\"/>\\n\",\n       \"       <use x=\\\"127.246094\\\" xlink:href=\\\"#DejaVuSans-48\\\"/>\\n\",\n       \"      </g>\\n\",\n       \"     </g>\\n\",\n       \"    </g>\\n\",\n       \"    <g id=\\\"ytick_11\\\">\\n\",\n       \"     <g id=\\\"line2d_34\\\">\\n\",\n       \"      <g>\\n\",\n       \"       <use style=\\\"stroke:#000000;stroke-width:0.8;\\\" x=\\\"61.707813\\\" xlink:href=\\\"#m9a60ae2c5e\\\" y=\\\"317.836441\\\"/>\\n\",\n       \"      </g>\\n\",\n       \"     </g>\\n\",\n       \"     <g id=\\\"text_21\\\">\\n\",\n       \"      <!-- 600 -->\\n\",\n       \"      <defs>\\n\",\n       \"       <path d=\\\"M 33.015625 40.375 \\n\",\n       \"Q 26.375 40.375 22.484375 35.828125 \\n\",\n       \"Q 18.609375 31.296875 18.609375 23.390625 \\n\",\n       \"Q 18.609375 15.53125 22.484375 10.953125 \\n\",\n       \"Q 26.375 6.390625 33.015625 6.390625 \\n\",\n       \"Q 39.65625 6.390625 43.53125 10.953125 \\n\",\n       \"Q 47.40625 15.53125 47.40625 23.390625 \\n\",\n       \"Q 47.40625 31.296875 43.53125 35.828125 \\n\",\n       \"Q 39.65625 40.375 33.015625 40.375 \\n\",\n       \"z\\n\",\n       \"M 52.59375 71.296875 \\n\",\n       \"L 52.59375 62.3125 \\n\",\n       \"Q 48.875 64.0625 45.09375 64.984375 \\n\",\n       \"Q 41.3125 65.921875 37.59375 65.921875 \\n\",\n       \"Q 27.828125 65.921875 22.671875 59.328125 \\n\",\n       \"Q 17.53125 52.734375 16.796875 39.40625 \\n\",\n       \"Q 19.671875 43.65625 24.015625 45.921875 \\n\",\n       \"Q 28.375 48.1875 33.59375 48.1875 \\n\",\n       \"Q 44.578125 48.1875 50.953125 41.515625 \\n\",\n       \"Q 57.328125 34.859375 57.328125 23.390625 \\n\",\n       \"Q 57.328125 12.15625 50.6875 5.359375 \\n\",\n       \"Q 44.046875 -1.421875 33.015625 -1.421875 \\n\",\n       \"Q 20.359375 -1.421875 13.671875 8.265625 \\n\",\n       \"Q 6.984375 17.96875 6.984375 36.375 \\n\",\n       \"Q 6.984375 53.65625 15.1875 63.9375 \\n\",\n       \"Q 23.390625 74.21875 37.203125 74.21875 \\n\",\n       \"Q 40.921875 74.21875 44.703125 73.484375 \\n\",\n       \"Q 48.484375 72.75 52.59375 71.296875 \\n\",\n       \"z\\n\",\n       \"\\\" id=\\\"DejaVuSans-54\\\"/>\\n\",\n       \"      </defs>\\n\",\n       \"      <g transform=\\\"translate(35.620312 321.63566)scale(0.1 -0.1)\\\">\\n\",\n       \"       <use xlink:href=\\\"#DejaVuSans-54\\\"/>\\n\",\n       \"       <use x=\\\"63.623047\\\" xlink:href=\\\"#DejaVuSans-48\\\"/>\\n\",\n       \"       <use x=\\\"127.246094\\\" xlink:href=\\\"#DejaVuSans-48\\\"/>\\n\",\n       \"      </g>\\n\",\n       \"     </g>\\n\",\n       \"    </g>\\n\",\n       \"    <g id=\\\"ytick_12\\\">\\n\",\n       \"     <g id=\\\"line2d_35\\\">\\n\",\n       \"      <g>\\n\",\n       \"       <use style=\\\"stroke:#000000;stroke-width:0.8;\\\" x=\\\"61.707813\\\" xlink:href=\\\"#m9a60ae2c5e\\\" y=\\\"290.543442\\\"/>\\n\",\n       \"      </g>\\n\",\n       \"     </g>\\n\",\n       \"     <g id=\\\"text_22\\\">\\n\",\n       \"      <!-- 800 -->\\n\",\n       \"      <g transform=\\\"translate(35.620312 294.342661)scale(0.1 -0.1)\\\">\\n\",\n       \"       <use xlink:href=\\\"#DejaVuSans-56\\\"/>\\n\",\n       \"       <use x=\\\"63.623047\\\" xlink:href=\\\"#DejaVuSans-48\\\"/>\\n\",\n       \"       <use x=\\\"127.246094\\\" xlink:href=\\\"#DejaVuSans-48\\\"/>\\n\",\n       \"      </g>\\n\",\n       \"     </g>\\n\",\n       \"    </g>\\n\",\n       \"    <g id=\\\"text_23\\\">\\n\",\n       \"     <!-- IP [Nm2] -->\\n\",\n       \"     <defs>\\n\",\n       \"      <path d=\\\"M 9.8125 72.90625 \\n\",\n       \"L 19.671875 72.90625 \\n\",\n       \"L 19.671875 0 \\n\",\n       \"L 9.8125 0 \\n\",\n       \"z\\n\",\n       \"\\\" id=\\\"DejaVuSans-73\\\"/>\\n\",\n       \"     </defs>\\n\",\n       \"     <g transform=\\\"translate(29.540625 343.972656)rotate(-90)scale(0.1 -0.1)\\\">\\n\",\n       \"      <use xlink:href=\\\"#DejaVuSans-73\\\"/>\\n\",\n       \"      <use x=\\\"29.492188\\\" xlink:href=\\\"#DejaVuSans-80\\\"/>\\n\",\n       \"      <use x=\\\"89.794922\\\" xlink:href=\\\"#DejaVuSans-32\\\"/>\\n\",\n       \"      <use x=\\\"121.582031\\\" xlink:href=\\\"#DejaVuSans-91\\\"/>\\n\",\n       \"      <use x=\\\"160.595703\\\" xlink:href=\\\"#DejaVuSans-78\\\"/>\\n\",\n       \"      <use x=\\\"235.400391\\\" xlink:href=\\\"#DejaVuSans-109\\\"/>\\n\",\n       \"      <use x=\\\"332.8125\\\" xlink:href=\\\"#DejaVuSans-50\\\"/>\\n\",\n       \"      <use x=\\\"396.435547\\\" xlink:href=\\\"#DejaVuSans-93\\\"/>\\n\",\n       \"     </g>\\n\",\n       \"    </g>\\n\",\n       \"   </g>\\n\",\n       \"   <g id=\\\"line2d_36\\\">\\n\",\n       \"    <path clip-path=\\\"url(#pe9ca29881f)\\\" d=\\\"M 79.462358 332.606979 \\n\",\n       \"L 80.645994 332.600816 \\n\",\n       \"L 80.941903 332.545468 \\n\",\n       \"L 82.12554 332.839622 \\n\",\n       \"L 83.013267 332.626453 \\n\",\n       \"L 83.605085 332.739911 \\n\",\n       \"L 84.196903 332.598921 \\n\",\n       \"L 84.788722 332.51411 \\n\",\n       \"L 85.38054 332.657555 \\n\",\n       \"L 85.676449 332.412595 \\n\",\n       \"L 85.972358 331.611773 \\n\",\n       \"L 86.268267 330.08375 \\n\",\n       \"L 86.860085 324.676621 \\n\",\n       \"L 88.043722 309.329484 \\n\",\n       \"L 90.115085 278.883825 \\n\",\n       \"L 90.706903 273.985159 \\n\",\n       \"L 91.002813 272.835498 \\n\",\n       \"L 91.298722 272.781818 \\n\",\n       \"L 91.594631 274.027662 \\n\",\n       \"L 91.89054 276.579153 \\n\",\n       \"L 92.482358 284.805278 \\n\",\n       \"L 93.370085 303.296286 \\n\",\n       \"L 95.737358 358.16468 \\n\",\n       \"L 96.329176 366.422988 \\n\",\n       \"L 96.920994 370.884278 \\n\",\n       \"L 97.216903 371.618182 \\n\",\n       \"L 97.512813 371.35794 \\n\",\n       \"L 97.808722 370.223865 \\n\",\n       \"L 98.40054 366.498822 \\n\",\n       \"L 100.175994 354.062801 \\n\",\n       \"L 100.471903 352.921532 \\n\",\n       \"L 100.767813 352.250621 \\n\",\n       \"L 101.063722 352.070348 \\n\",\n       \"L 101.359631 352.276158 \\n\",\n       \"L 101.951449 353.283237 \\n\",\n       \"L 102.543267 354.234393 \\n\",\n       \"L 102.839176 354.263724 \\n\",\n       \"L 103.135085 353.88913 \\n\",\n       \"L 103.430994 352.961715 \\n\",\n       \"L 104.022813 349.294416 \\n\",\n       \"L 104.614631 343.446532 \\n\",\n       \"L 106.981903 316.0402 \\n\",\n       \"L 107.277813 314.62422 \\n\",\n       \"L 107.573722 313.9277 \\n\",\n       \"L 107.869631 313.98738 \\n\",\n       \"L 108.16554 314.736116 \\n\",\n       \"L 108.461449 316.145643 \\n\",\n       \"L 109.053267 320.819067 \\n\",\n       \"L 110.236903 334.047662 \\n\",\n       \"L 110.828722 340.047135 \\n\",\n       \"L 111.42054 343.656246 \\n\",\n       \"L 111.716449 344.277389 \\n\",\n       \"L 112.012358 344.131508 \\n\",\n       \"L 112.308267 343.243547 \\n\",\n       \"L 112.900085 339.645217 \\n\",\n       \"L 114.67554 325.56472 \\n\",\n       \"L 114.971449 324.370287 \\n\",\n       \"L 115.267358 323.732553 \\n\",\n       \"L 115.563267 323.675816 \\n\",\n       \"L 115.859176 324.188618 \\n\",\n       \"L 116.450994 326.493376 \\n\",\n       \"L 118.226449 335.412527 \\n\",\n       \"L 118.522358 336.200435 \\n\",\n       \"L 118.818267 336.617101 \\n\",\n       \"L 119.114176 336.68018 \\n\",\n       \"L 119.410085 336.444787 \\n\",\n       \"L 120.001903 335.314214 \\n\",\n       \"L 121.777358 330.49065 \\n\",\n       \"L 122.369176 329.942301 \\n\",\n       \"L 122.665085 329.945291 \\n\",\n       \"L 122.960994 330.126366 \\n\",\n       \"L 123.552813 330.992377 \\n\",\n       \"L 125.032358 333.654063 \\n\",\n       \"L 125.624176 334.268265 \\n\",\n       \"L 125.920085 334.371523 \\n\",\n       \"L 126.511903 334.203858 \\n\",\n       \"L 127.103722 333.72629 \\n\",\n       \"L 128.879176 331.91687 \\n\",\n       \"L 129.470994 331.771767 \\n\",\n       \"L 130.062813 331.837097 \\n\",\n       \"L 130.654631 332.161755 \\n\",\n       \"L 132.134176 333.176932 \\n\",\n       \"L 133.021903 333.463244 \\n\",\n       \"L 133.613722 333.394479 \\n\",\n       \"L 135.093267 332.877498 \\n\",\n       \"L 135.980994 332.594276 \\n\",\n       \"L 136.868722 332.582177 \\n\",\n       \"L 137.756449 332.732616 \\n\",\n       \"L 139.531903 333.175578 \\n\",\n       \"L 140.419631 333.253008 \\n\",\n       \"L 144.858267 333.035234 \\n\",\n       \"L 147.22554 333.260912 \\n\",\n       \"L 149.296903 333.220206 \\n\",\n       \"L 151.664176 333.222893 \\n\",\n       \"L 161.429176 333.44058 \\n\",\n       \"L 170.01054 333.540322 \\n\",\n       \"L 196.346449 333.683656 \\n\",\n       \"L 228.304631 333.53824 \\n\",\n       \"L 267.956449 333.101939 \\n\",\n       \"L 308.495994 332.736642 \\n\",\n       \"L 337.199176 332.710529 \\n\",\n       \"L 375.07554 332.92235 \\n\",\n       \"L 434.257358 333.234681 \\n\",\n       \"L 434.553267 333.235325 \\n\",\n       \"L 434.553267 333.235325 \\n\",\n       \"\\\" style=\\\"fill:none;stroke:#1f77b4;stroke-linecap:square;stroke-width:1.5;\\\"/>\\n\",\n       \"   </g>\\n\",\n       \"   <g id=\\\"patch_13\\\">\\n\",\n       \"    <path d=\\\"M 61.707813 376.56 \\n\",\n       \"L 61.707813 267.84 \\n\",\n       \"\\\" style=\\\"fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;stroke-width:0.8;\\\"/>\\n\",\n       \"   </g>\\n\",\n       \"   <g id=\\\"patch_14\\\">\\n\",\n       \"    <path d=\\\"M 452.307813 376.56 \\n\",\n       \"L 452.307813 267.84 \\n\",\n       \"\\\" style=\\\"fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;stroke-width:0.8;\\\"/>\\n\",\n       \"   </g>\\n\",\n       \"   <g id=\\\"patch_15\\\">\\n\",\n       \"    <path d=\\\"M 61.707813 376.56 \\n\",\n       \"L 452.307812 376.56 \\n\",\n       \"\\\" style=\\\"fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;stroke-width:0.8;\\\"/>\\n\",\n       \"   </g>\\n\",\n       \"   <g id=\\\"patch_16\\\">\\n\",\n       \"    <path d=\\\"M 61.707813 267.84 \\n\",\n       \"L 452.307812 267.84 \\n\",\n       \"\\\" style=\\\"fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;stroke-width:0.8;\\\"/>\\n\",\n       \"   </g>\\n\",\n       \"  </g>\\n\",\n       \"  <g id=\\\"text_24\\\">\\n\",\n       \"   <!-- Wing root loads. T-Tail model in a 20% 1-cos gust encounter -->\\n\",\n       \"   <defs>\\n\",\n       \"    <path d=\\\"M 3.328125 72.90625 \\n\",\n       \"L 13.28125 72.90625 \\n\",\n       \"L 28.609375 11.28125 \\n\",\n       \"L 43.890625 72.90625 \\n\",\n       \"L 54.984375 72.90625 \\n\",\n       \"L 70.3125 11.28125 \\n\",\n       \"L 85.59375 72.90625 \\n\",\n       \"L 95.609375 72.90625 \\n\",\n       \"L 77.296875 0 \\n\",\n       \"L 64.890625 0 \\n\",\n       \"L 49.515625 63.28125 \\n\",\n       \"L 33.984375 0 \\n\",\n       \"L 21.578125 0 \\n\",\n       \"z\\n\",\n       \"\\\" id=\\\"DejaVuSans-87\\\"/>\\n\",\n       \"    <path d=\\\"M 45.40625 27.984375 \\n\",\n       \"Q 45.40625 37.75 41.375 43.109375 \\n\",\n       \"Q 37.359375 48.484375 30.078125 48.484375 \\n\",\n       \"Q 22.859375 48.484375 18.828125 43.109375 \\n\",\n       \"Q 14.796875 37.75 14.796875 27.984375 \\n\",\n       \"Q 14.796875 18.265625 18.828125 12.890625 \\n\",\n       \"Q 22.859375 7.515625 30.078125 7.515625 \\n\",\n       \"Q 37.359375 7.515625 41.375 12.890625 \\n\",\n       \"Q 45.40625 18.265625 45.40625 27.984375 \\n\",\n       \"z\\n\",\n       \"M 54.390625 6.78125 \\n\",\n       \"Q 54.390625 -7.171875 48.1875 -13.984375 \\n\",\n       \"Q 42 -20.796875 29.203125 -20.796875 \\n\",\n       \"Q 24.46875 -20.796875 20.265625 -20.09375 \\n\",\n       \"Q 16.0625 -19.390625 12.109375 -17.921875 \\n\",\n       \"L 12.109375 -9.1875 \\n\",\n       \"Q 16.0625 -11.328125 19.921875 -12.34375 \\n\",\n       \"Q 23.78125 -13.375 27.78125 -13.375 \\n\",\n       \"Q 36.625 -13.375 41.015625 -8.765625 \\n\",\n       \"Q 45.40625 -4.15625 45.40625 5.171875 \\n\",\n       \"L 45.40625 9.625 \\n\",\n       \"Q 42.625 4.78125 38.28125 2.390625 \\n\",\n       \"Q 33.9375 0 27.875 0 \\n\",\n       \"Q 17.828125 0 11.671875 7.65625 \\n\",\n       \"Q 5.515625 15.328125 5.515625 27.984375 \\n\",\n       \"Q 5.515625 40.671875 11.671875 48.328125 \\n\",\n       \"Q 17.828125 56 27.875 56 \\n\",\n       \"Q 33.9375 56 38.28125 53.609375 \\n\",\n       \"Q 42.625 51.21875 45.40625 46.390625 \\n\",\n       \"L 45.40625 54.6875 \\n\",\n       \"L 54.390625 54.6875 \\n\",\n       \"z\\n\",\n       \"\\\" id=\\\"DejaVuSans-103\\\"/>\\n\",\n       \"    <path d=\\\"M 9.421875 75.984375 \\n\",\n       \"L 18.40625 75.984375 \\n\",\n       \"L 18.40625 0 \\n\",\n       \"L 9.421875 0 \\n\",\n       \"z\\n\",\n       \"\\\" id=\\\"DejaVuSans-108\\\"/>\\n\",\n       \"    <path d=\\\"M 34.28125 27.484375 \\n\",\n       \"Q 23.390625 27.484375 19.1875 25 \\n\",\n       \"Q 14.984375 22.515625 14.984375 16.5 \\n\",\n       \"Q 14.984375 11.71875 18.140625 8.90625 \\n\",\n       \"Q 21.296875 6.109375 26.703125 6.109375 \\n\",\n       \"Q 34.1875 6.109375 38.703125 11.40625 \\n\",\n       \"Q 43.21875 16.703125 43.21875 25.484375 \\n\",\n       \"L 43.21875 27.484375 \\n\",\n       \"z\\n\",\n       \"M 52.203125 31.203125 \\n\",\n       \"L 52.203125 0 \\n\",\n       \"L 43.21875 0 \\n\",\n       \"L 43.21875 8.296875 \\n\",\n       \"Q 40.140625 3.328125 35.546875 0.953125 \\n\",\n       \"Q 30.953125 -1.421875 24.3125 -1.421875 \\n\",\n       \"Q 15.921875 -1.421875 10.953125 3.296875 \\n\",\n       \"Q 6 8.015625 6 15.921875 \\n\",\n       \"Q 6 25.140625 12.171875 29.828125 \\n\",\n       \"Q 18.359375 34.515625 30.609375 34.515625 \\n\",\n       \"L 43.21875 34.515625 \\n\",\n       \"L 43.21875 35.40625 \\n\",\n       \"Q 43.21875 41.609375 39.140625 45 \\n\",\n       \"Q 35.0625 48.390625 27.6875 48.390625 \\n\",\n       \"Q 23 48.390625 18.546875 47.265625 \\n\",\n       \"Q 14.109375 46.140625 10.015625 43.890625 \\n\",\n       \"L 10.015625 52.203125 \\n\",\n       \"Q 14.9375 54.109375 19.578125 55.046875 \\n\",\n       \"Q 24.21875 56 28.609375 56 \\n\",\n       \"Q 40.484375 56 46.34375 49.84375 \\n\",\n       \"Q 52.203125 43.703125 52.203125 31.203125 \\n\",\n       \"z\\n\",\n       \"\\\" id=\\\"DejaVuSans-97\\\"/>\\n\",\n       \"    <path d=\\\"M 45.40625 46.390625 \\n\",\n       \"L 45.40625 75.984375 \\n\",\n       \"L 54.390625 75.984375 \\n\",\n       \"L 54.390625 0 \\n\",\n       \"L 45.40625 0 \\n\",\n       \"L 45.40625 8.203125 \\n\",\n       \"Q 42.578125 3.328125 38.25 0.953125 \\n\",\n       \"Q 33.9375 -1.421875 27.875 -1.421875 \\n\",\n       \"Q 17.96875 -1.421875 11.734375 6.484375 \\n\",\n       \"Q 5.515625 14.40625 5.515625 27.296875 \\n\",\n       \"Q 5.515625 40.1875 11.734375 48.09375 \\n\",\n       \"Q 17.96875 56 27.875 56 \\n\",\n       \"Q 33.9375 56 38.25 53.625 \\n\",\n       \"Q 42.578125 51.265625 45.40625 46.390625 \\n\",\n       \"z\\n\",\n       \"M 14.796875 27.296875 \\n\",\n       \"Q 14.796875 17.390625 18.875 11.75 \\n\",\n       \"Q 22.953125 6.109375 30.078125 6.109375 \\n\",\n       \"Q 37.203125 6.109375 41.296875 11.75 \\n\",\n       \"Q 45.40625 17.390625 45.40625 27.296875 \\n\",\n       \"Q 45.40625 37.203125 41.296875 42.84375 \\n\",\n       \"Q 37.203125 48.484375 30.078125 48.484375 \\n\",\n       \"Q 22.953125 48.484375 18.875 42.84375 \\n\",\n       \"Q 14.796875 37.203125 14.796875 27.296875 \\n\",\n       \"z\\n\",\n       \"\\\" id=\\\"DejaVuSans-100\\\"/>\\n\",\n       \"    <path d=\\\"M 10.6875 12.40625 \\n\",\n       \"L 21 12.40625 \\n\",\n       \"L 21 0 \\n\",\n       \"L 10.6875 0 \\n\",\n       \"z\\n\",\n       \"\\\" id=\\\"DejaVuSans-46\\\"/>\\n\",\n       \"    <path d=\\\"M 4.890625 31.390625 \\n\",\n       \"L 31.203125 31.390625 \\n\",\n       \"L 31.203125 23.390625 \\n\",\n       \"L 4.890625 23.390625 \\n\",\n       \"z\\n\",\n       \"\\\" id=\\\"DejaVuSans-45\\\"/>\\n\",\n       \"    <path d=\\\"M 72.703125 32.078125 \\n\",\n       \"Q 68.453125 32.078125 66.03125 28.46875 \\n\",\n       \"Q 63.625 24.859375 63.625 18.40625 \\n\",\n       \"Q 63.625 12.0625 66.03125 8.421875 \\n\",\n       \"Q 68.453125 4.78125 72.703125 4.78125 \\n\",\n       \"Q 76.859375 4.78125 79.265625 8.421875 \\n\",\n       \"Q 81.6875 12.0625 81.6875 18.40625 \\n\",\n       \"Q 81.6875 24.8125 79.265625 28.4375 \\n\",\n       \"Q 76.859375 32.078125 72.703125 32.078125 \\n\",\n       \"z\\n\",\n       \"M 72.703125 38.28125 \\n\",\n       \"Q 80.421875 38.28125 84.953125 32.90625 \\n\",\n       \"Q 89.5 27.546875 89.5 18.40625 \\n\",\n       \"Q 89.5 9.28125 84.9375 3.921875 \\n\",\n       \"Q 80.375 -1.421875 72.703125 -1.421875 \\n\",\n       \"Q 64.890625 -1.421875 60.34375 3.921875 \\n\",\n       \"Q 55.8125 9.28125 55.8125 18.40625 \\n\",\n       \"Q 55.8125 27.59375 60.375 32.9375 \\n\",\n       \"Q 64.9375 38.28125 72.703125 38.28125 \\n\",\n       \"z\\n\",\n       \"M 22.3125 68.015625 \\n\",\n       \"Q 18.109375 68.015625 15.6875 64.375 \\n\",\n       \"Q 13.28125 60.75 13.28125 54.390625 \\n\",\n       \"Q 13.28125 47.953125 15.671875 44.328125 \\n\",\n       \"Q 18.0625 40.71875 22.3125 40.71875 \\n\",\n       \"Q 26.5625 40.71875 28.96875 44.328125 \\n\",\n       \"Q 31.390625 47.953125 31.390625 54.390625 \\n\",\n       \"Q 31.390625 60.6875 28.953125 64.34375 \\n\",\n       \"Q 26.515625 68.015625 22.3125 68.015625 \\n\",\n       \"z\\n\",\n       \"M 66.40625 74.21875 \\n\",\n       \"L 74.21875 74.21875 \\n\",\n       \"L 28.609375 -1.421875 \\n\",\n       \"L 20.796875 -1.421875 \\n\",\n       \"z\\n\",\n       \"M 22.3125 74.21875 \\n\",\n       \"Q 30.03125 74.21875 34.609375 68.875 \\n\",\n       \"Q 39.203125 63.53125 39.203125 54.390625 \\n\",\n       \"Q 39.203125 45.171875 34.640625 39.84375 \\n\",\n       \"Q 30.078125 34.515625 22.3125 34.515625 \\n\",\n       \"Q 14.546875 34.515625 10.03125 39.859375 \\n\",\n       \"Q 5.515625 45.21875 5.515625 54.390625 \\n\",\n       \"Q 5.515625 63.484375 10.046875 68.84375 \\n\",\n       \"Q 14.59375 74.21875 22.3125 74.21875 \\n\",\n       \"z\\n\",\n       \"\\\" id=\\\"DejaVuSans-37\\\"/>\\n\",\n       \"    <path d=\\\"M 48.78125 52.59375 \\n\",\n       \"L 48.78125 44.1875 \\n\",\n       \"Q 44.96875 46.296875 41.140625 47.34375 \\n\",\n       \"Q 37.3125 48.390625 33.40625 48.390625 \\n\",\n       \"Q 24.65625 48.390625 19.8125 42.84375 \\n\",\n       \"Q 14.984375 37.3125 14.984375 27.296875 \\n\",\n       \"Q 14.984375 17.28125 19.8125 11.734375 \\n\",\n       \"Q 24.65625 6.203125 33.40625 6.203125 \\n\",\n       \"Q 37.3125 6.203125 41.140625 7.25 \\n\",\n       \"Q 44.96875 8.296875 48.78125 10.40625 \\n\",\n       \"L 48.78125 2.09375 \\n\",\n       \"Q 45.015625 0.34375 40.984375 -0.53125 \\n\",\n       \"Q 36.96875 -1.421875 32.421875 -1.421875 \\n\",\n       \"Q 20.0625 -1.421875 12.78125 6.34375 \\n\",\n       \"Q 5.515625 14.109375 5.515625 27.296875 \\n\",\n       \"Q 5.515625 40.671875 12.859375 48.328125 \\n\",\n       \"Q 20.21875 56 33.015625 56 \\n\",\n       \"Q 37.15625 56 41.109375 55.140625 \\n\",\n       \"Q 45.0625 54.296875 48.78125 52.59375 \\n\",\n       \"z\\n\",\n       \"\\\" id=\\\"DejaVuSans-99\\\"/>\\n\",\n       \"    <path d=\\\"M 8.5 21.578125 \\n\",\n       \"L 8.5 54.6875 \\n\",\n       \"L 17.484375 54.6875 \\n\",\n       \"L 17.484375 21.921875 \\n\",\n       \"Q 17.484375 14.15625 20.5 10.265625 \\n\",\n       \"Q 23.53125 6.390625 29.59375 6.390625 \\n\",\n       \"Q 36.859375 6.390625 41.078125 11.03125 \\n\",\n       \"Q 45.3125 15.671875 45.3125 23.6875 \\n\",\n       \"L 45.3125 54.6875 \\n\",\n       \"L 54.296875 54.6875 \\n\",\n       \"L 54.296875 0 \\n\",\n       \"L 45.3125 0 \\n\",\n       \"L 45.3125 8.40625 \\n\",\n       \"Q 42.046875 3.421875 37.71875 1 \\n\",\n       \"Q 33.40625 -1.421875 27.6875 -1.421875 \\n\",\n       \"Q 18.265625 -1.421875 13.375 4.4375 \\n\",\n       \"Q 8.5 10.296875 8.5 21.578125 \\n\",\n       \"z\\n\",\n       \"M 31.109375 56 \\n\",\n       \"z\\n\",\n       \"\\\" id=\\\"DejaVuSans-117\\\"/>\\n\",\n       \"   </defs>\\n\",\n       \"   <g transform=\\\"translate(69.027812 16.318125)scale(0.12 -0.12)\\\">\\n\",\n       \"    <use xlink:href=\\\"#DejaVuSans-87\\\"/>\\n\",\n       \"    <use x=\\\"98.845703\\\" xlink:href=\\\"#DejaVuSans-105\\\"/>\\n\",\n       \"    <use x=\\\"126.628906\\\" xlink:href=\\\"#DejaVuSans-110\\\"/>\\n\",\n       \"    <use x=\\\"190.007812\\\" xlink:href=\\\"#DejaVuSans-103\\\"/>\\n\",\n       \"    <use x=\\\"253.484375\\\" xlink:href=\\\"#DejaVuSans-32\\\"/>\\n\",\n       \"    <use x=\\\"285.271484\\\" xlink:href=\\\"#DejaVuSans-114\\\"/>\\n\",\n       \"    <use x=\\\"326.353516\\\" xlink:href=\\\"#DejaVuSans-111\\\"/>\\n\",\n       \"    <use x=\\\"387.535156\\\" xlink:href=\\\"#DejaVuSans-111\\\"/>\\n\",\n       \"    <use x=\\\"448.716797\\\" xlink:href=\\\"#DejaVuSans-116\\\"/>\\n\",\n       \"    <use x=\\\"487.925781\\\" xlink:href=\\\"#DejaVuSans-32\\\"/>\\n\",\n       \"    <use x=\\\"519.712891\\\" xlink:href=\\\"#DejaVuSans-108\\\"/>\\n\",\n       \"    <use x=\\\"547.496094\\\" xlink:href=\\\"#DejaVuSans-111\\\"/>\\n\",\n       \"    <use x=\\\"608.677734\\\" xlink:href=\\\"#DejaVuSans-97\\\"/>\\n\",\n       \"    <use x=\\\"669.957031\\\" xlink:href=\\\"#DejaVuSans-100\\\"/>\\n\",\n       \"    <use x=\\\"733.433594\\\" xlink:href=\\\"#DejaVuSans-115\\\"/>\\n\",\n       \"    <use x=\\\"785.533203\\\" xlink:href=\\\"#DejaVuSans-46\\\"/>\\n\",\n       \"    <use x=\\\"817.320312\\\" xlink:href=\\\"#DejaVuSans-32\\\"/>\\n\",\n       \"    <use x=\\\"849.107422\\\" xlink:href=\\\"#DejaVuSans-84\\\"/>\\n\",\n       \"    <use x=\\\"910.050781\\\" xlink:href=\\\"#DejaVuSans-45\\\"/>\\n\",\n       \"    <use x=\\\"945.994141\\\" xlink:href=\\\"#DejaVuSans-84\\\"/>\\n\",\n       \"    <use x=\\\"1006.828125\\\" xlink:href=\\\"#DejaVuSans-97\\\"/>\\n\",\n       \"    <use x=\\\"1068.107422\\\" xlink:href=\\\"#DejaVuSans-105\\\"/>\\n\",\n       \"    <use x=\\\"1095.890625\\\" xlink:href=\\\"#DejaVuSans-108\\\"/>\\n\",\n       \"    <use x=\\\"1123.673828\\\" xlink:href=\\\"#DejaVuSans-32\\\"/>\\n\",\n       \"    <use x=\\\"1155.460938\\\" xlink:href=\\\"#DejaVuSans-109\\\"/>\\n\",\n       \"    <use x=\\\"1252.873047\\\" xlink:href=\\\"#DejaVuSans-111\\\"/>\\n\",\n       \"    <use x=\\\"1314.054688\\\" xlink:href=\\\"#DejaVuSans-100\\\"/>\\n\",\n       \"    <use x=\\\"1377.53125\\\" xlink:href=\\\"#DejaVuSans-101\\\"/>\\n\",\n       \"    <use x=\\\"1439.054688\\\" xlink:href=\\\"#DejaVuSans-108\\\"/>\\n\",\n       \"    <use x=\\\"1466.837891\\\" xlink:href=\\\"#DejaVuSans-32\\\"/>\\n\",\n       \"    <use x=\\\"1498.625\\\" xlink:href=\\\"#DejaVuSans-105\\\"/>\\n\",\n       \"    <use x=\\\"1526.408203\\\" xlink:href=\\\"#DejaVuSans-110\\\"/>\\n\",\n       \"    <use x=\\\"1589.787109\\\" xlink:href=\\\"#DejaVuSans-32\\\"/>\\n\",\n       \"    <use x=\\\"1621.574219\\\" xlink:href=\\\"#DejaVuSans-97\\\"/>\\n\",\n       \"    <use x=\\\"1682.853516\\\" xlink:href=\\\"#DejaVuSans-32\\\"/>\\n\",\n       \"    <use x=\\\"1714.640625\\\" xlink:href=\\\"#DejaVuSans-50\\\"/>\\n\",\n       \"    <use x=\\\"1778.263672\\\" xlink:href=\\\"#DejaVuSans-48\\\"/>\\n\",\n       \"    <use x=\\\"1841.886719\\\" xlink:href=\\\"#DejaVuSans-37\\\"/>\\n\",\n       \"    <use x=\\\"1936.90625\\\" xlink:href=\\\"#DejaVuSans-32\\\"/>\\n\",\n       \"    <use x=\\\"1968.693359\\\" xlink:href=\\\"#DejaVuSans-49\\\"/>\\n\",\n       \"    <use x=\\\"2032.316406\\\" xlink:href=\\\"#DejaVuSans-45\\\"/>\\n\",\n       \"    <use x=\\\"2068.400391\\\" xlink:href=\\\"#DejaVuSans-99\\\"/>\\n\",\n       \"    <use x=\\\"2123.380859\\\" xlink:href=\\\"#DejaVuSans-111\\\"/>\\n\",\n       \"    <use x=\\\"2184.5625\\\" xlink:href=\\\"#DejaVuSans-115\\\"/>\\n\",\n       \"    <use x=\\\"2236.662109\\\" xlink:href=\\\"#DejaVuSans-32\\\"/>\\n\",\n       \"    <use x=\\\"2268.449219\\\" xlink:href=\\\"#DejaVuSans-103\\\"/>\\n\",\n       \"    <use x=\\\"2331.925781\\\" xlink:href=\\\"#DejaVuSans-117\\\"/>\\n\",\n       \"    <use x=\\\"2395.304688\\\" xlink:href=\\\"#DejaVuSans-115\\\"/>\\n\",\n       \"    <use x=\\\"2447.404297\\\" xlink:href=\\\"#DejaVuSans-116\\\"/>\\n\",\n       \"    <use x=\\\"2486.613281\\\" xlink:href=\\\"#DejaVuSans-32\\\"/>\\n\",\n       \"    <use x=\\\"2518.400391\\\" xlink:href=\\\"#DejaVuSans-101\\\"/>\\n\",\n       \"    <use x=\\\"2579.923828\\\" xlink:href=\\\"#DejaVuSans-110\\\"/>\\n\",\n       \"    <use x=\\\"2643.302734\\\" xlink:href=\\\"#DejaVuSans-99\\\"/>\\n\",\n       \"    <use x=\\\"2698.283203\\\" xlink:href=\\\"#DejaVuSans-111\\\"/>\\n\",\n       \"    <use x=\\\"2759.464844\\\" xlink:href=\\\"#DejaVuSans-117\\\"/>\\n\",\n       \"    <use x=\\\"2822.84375\\\" xlink:href=\\\"#DejaVuSans-110\\\"/>\\n\",\n       \"    <use x=\\\"2886.222656\\\" xlink:href=\\\"#DejaVuSans-116\\\"/>\\n\",\n       \"    <use x=\\\"2925.431641\\\" xlink:href=\\\"#DejaVuSans-101\\\"/>\\n\",\n       \"    <use x=\\\"2986.955078\\\" xlink:href=\\\"#DejaVuSans-114\\\"/>\\n\",\n       \"   </g>\\n\",\n       \"  </g>\\n\",\n       \" </g>\\n\",\n       \" <defs>\\n\",\n       \"  <clipPath id=\\\"pdff94b1ab1\\\">\\n\",\n       \"   <rect height=\\\"108.72\\\" width=\\\"390.6\\\" x=\\\"61.707813\\\" y=\\\"50.4\\\"/>\\n\",\n       \"  </clipPath>\\n\",\n       \"  <clipPath id=\\\"p518eb580f2\\\">\\n\",\n       \"   <rect height=\\\"108.72\\\" width=\\\"390.6\\\" x=\\\"61.707813\\\" y=\\\"159.12\\\"/>\\n\",\n       \"  </clipPath>\\n\",\n       \"  <clipPath id=\\\"pe9ca29881f\\\">\\n\",\n       \"   <rect height=\\\"108.72\\\" width=\\\"390.6\\\" x=\\\"61.707813\\\" y=\\\"267.84\\\"/>\\n\",\n       \"  </clipPath>\\n\",\n       \" </defs>\\n\",\n       \"</svg>\\n\"\n      ],\n      \"text/plain\": [\n       \"<Figure size 504x432 with 3 Axes>\"\n      ]\n     },\n     \"metadata\": {\n      \"needs_background\": \"light\"\n     },\n     \"output_type\": \"display_data\"\n    }\n   ],\n   \"source\": [\n    \"fig, ax = plt.subplots(3, 1, figsize=(7, 6), sharex=True)\\n\",\n    \"ylabels = ['Torsion [Nm2]', 'OOP [Nm2]', 'IP [Nm2]']\\n\",\n    \"\\n\",\n    \"# extract information\\n\",\n    \"n_tsteps = len(case_data.structure.timestep_info)\\n\",\n    \"dt = case_data.settings['DynamicCoupled']['dt']\\n\",\n    \"time_vec = np.linspace(0, n_tsteps*dt, n_tsteps)\\n\",\n    \"loads = np.zeros((n_tsteps, 3))\\n\",\n    \"for it in range(n_tsteps):\\n\",\n    \"    loads[it, 0:3] = case_data.structure.timestep_info[it].postproc_cell['loads'][0, 3:6]\\n\",\n    \"    \\n\",\n    \"for idim in range(3):\\n\",\n    \"    ax[idim].plot(time_vec, loads[:, idim])\\n\",\n    \"    ax[idim].set_ylabel(ylabels[idim])\\n\",\n    \"    \\n\",\n    \"ax[2].set_xlabel('time [s]')\\n\",\n    \"plt.subplots_adjust(hspace=0)\\n\",\n    \"fig.suptitle('Wing root loads. T-Tail model in a 20% 1-cos gust encounter');\\n\",\n    \"# ax.set_xlabel('X [m]')\\n\",\n    \"# ax.set_ylabel('Z [m]');\\n\",\n    \"plt.show()\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## Aerodynamic analysis\\n\",\n    \"\\n\",\n    \"The aerodynamic analysis can be obviously conducted using python. However, the easiest way is to run the case by yourself and open the files in `output/simple_HALE/beam` and `output/simple_HALE/aero` with [Paraview](https://www.paraview.org/).\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 18,\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<img src=\\\"https://raw.githubusercontent.com/ImperialCollegeLondon/sharpy/dev_doc/docs/source/content/example_notebooks/images/t-tail_solution.png\\\" width=\\\"600\\\"/>\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Image object>\"\n      ]\n     },\n     \"execution_count\": 18,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"url = 'https://raw.githubusercontent.com/ImperialCollegeLondon/sharpy/dev_doc/docs/source/content/example_notebooks/images/t-tail_solution.png'\\n\",\n    \"Image(url=url, width=600)\"\n   ]\n  }\n ],\n \"metadata\": {\n  \"kernelspec\": {\n   \"display_name\": \"Python 3\",\n   \"language\": \"python\",\n   \"name\": \"python3\"\n  },\n  \"language_info\": {\n   \"codemirror_mode\": {\n    \"name\": \"ipython\",\n    \"version\": 3\n   },\n   \"file_extension\": \".py\",\n   \"mimetype\": \"text/x-python\",\n   \"name\": \"python\",\n   \"nbconvert_exporter\": \"python\",\n   \"pygments_lexer\": \"ipython3\",\n   \"version\": \"3.7.5\"\n  }\n },\n \"nbformat\": 4,\n \"nbformat_minor\": 4\n}\n"
  },
  {
    "path": "docs/source/content/example_notebooks/wind_turbine.ipynb",
    "content": "{\n \"cells\": [\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"# Simulation NREL 5MW wind turbine\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 1,\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<img src=\\\"https://raw.githubusercontent.com/ImperialCollegeLondon/sharpy/dev_doc/docs/source/content/example_notebooks/images/turbulence_no_legend.png\\\" width=\\\"800\\\"/>\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Image object>\"\n      ]\n     },\n     \"execution_count\": 1,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"%config InlineBackend.figure_format = 'svg'\\n\",\n    \"from IPython.display import Image\\n\",\n    \"url = 'https://raw.githubusercontent.com/ImperialCollegeLondon/sharpy/dev_doc/docs/source/content/example_notebooks/images/turbulence_no_legend.png'\\n\",\n    \"Image(url=url, width=800)\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"In this notebook:\\n\",\n    \"\\n\",\n    \"The blade loads on the NREL-5MW reference wind turbine computed with SHARPy and OpenFAST will be compared. However, zero-drag airfoils have been used.\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"OpenFAST: _https://openfast.readthedocs.io_\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"NREL-5MW: Jonkman, J.; Butterfield, S.; Musial, W. and Scott, G.. _Definition of a 5-MW Reference Wind Turbine for Offshore System Development_, Technical Report, NREL 2009\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"Load the required packages:\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 2,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"# Required packages\\n\",\n    \"%matplotlib inline\\n\",\n    \"import numpy as np\\n\",\n    \"import os\\n\",\n    \"import matplotlib.pyplot as plt\\n\",\n    \"\\n\",\n    \"# Required SHARPy modules\\n\",\n    \"import sharpy.sharpy_main\\n\",\n    \"import sharpy.utils.algebra as algebra\\n\",\n    \"import sharpy.utils.generate_cases as gc\\n\",\n    \"import sharpy.cases.templates.template_wt as template_wt\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"These are the results from the OpenFAST simulation for comparison: out-of-plane `of_cNdrR` and in-plane `of_cTdrR` coefficients along the blade and thrust `of_ct` and power `of_cp` rotor coefficients\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 3,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"of_rR = np.array([0.20158356, 0.3127131, 0.40794048, 0.5984148, 0.6936519, 0.85238045, 0.899999, 0.95555407, 0.98729974, 1.0])\\n\",\n    \"of_cNdrR = np.array([0.08621394, 0.14687876, 0.19345148, 0.2942731, 0.36003628, 0.43748564, 0.44762507, 0.38839236, 0.29782477, 0.0])\\n\",\n    \"of_cTdrR = np.array([0.048268348, 0.051957503, 0.05304592, 0.052862607, 0.056001827, 0.0536646, 0.050112925, 0.038993906, 0.023664437, 0.0])\\n\",\n    \"\\n\",\n    \"of_ct = 0.69787693\\n\",\n    \"of_cp = 0.48813498\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## Create SHARPy case\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"We define our parameters:\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 4,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"# Mathematical constants\\n\",\n    \"deg2rad = np.pi/180.\\n\",\n    \"\\n\",\n    \"# Case\\n\",\n    \"case = 'rotor'\\n\",\n    \"route = './'\\n\",\n    \"\\n\",\n    \"# Geometry discretization\\n\",\n    \"chord_panels = np.array([8], dtype=int)\\n\",\n    \"revs_in_wake = 5\\n\",\n    \"\\n\",\n    \"# Operation\\n\",\n    \"rotation_velocity = 12.1*2*np.pi/60\\n\",\n    \"pitch_deg = 0. #degrees\\n\",\n    \"\\n\",\n    \"# Wind\\n\",\n    \"WSP = 12.\\n\",\n    \"air_density = 1.225\\n\",\n    \"\\n\",\n    \"# Simulation\\n\",\n    \"dphi = 4.*deg2rad\\n\",\n    \"revs_to_simulate = 5\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"Computation of associated parameters\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 5,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"dt = dphi/rotation_velocity\\n\",\n    \"time_steps = int(revs_to_simulate*2.*np.pi/dphi)\\n\",\n    \"mstar = int(revs_in_wake*2.*np.pi/dphi)\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"Generation of the rotor geometry based on information in the excel file:\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 6,\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"name\": \"stdout\",\n     \"output_type\": \"stream\",\n     \"text\": [\n      \"\\u001b[33mWARNING: The poisson cofficient is assumed equal to 0.3\\u001b[0m\\n\",\n      \"\\u001b[33mWARNING: Cross-section area is used as shear area\\u001b[0m\\n\",\n      \"\\u001b[33mWARNING: Using perpendicular axis theorem to compute the inertia around xB\\u001b[0m\\n\",\n      \"\\u001b[33mWARNING: Replacing node 29 by node 0\\u001b[0m\\n\",\n      \"\\u001b[33mWARNING: Replacing node 58 by node 0\\u001b[0m\\n\"\n     ]\n    }\n   ],\n   \"source\": [\n    \"op_params = {}                                                                                                                                                                                     \\n\",\n    \"op_params['rotation_velocity'] = rotation_velocity                                                                                                                                                 \\n\",\n    \"op_params['pitch_deg'] = pitch_deg                                                                                                                                                                 \\n\",\n    \"op_params['wsp'] = WSP                                                                                                                                                                             \\n\",\n    \"op_params['dt'] = dt                                                                                                                                                                               \\n\",\n    \"                                                                                                                                                                                                   \\n\",\n    \"geom_params = {}                                                                                                                                                                                   \\n\",\n    \"geom_params['chord_panels'] = chord_panels                                                                                                                                                         \\n\",\n    \"geom_params['tol_remove_points'] = 1e-8                                                                                                                                                            \\n\",\n    \"geom_params['n_points_camber'] = 100                                                                                                                                                               \\n\",\n    \"geom_params['h5_cross_sec_prop'] = None                                                                                                                                                            \\n\",\n    \"geom_params['m_distribution'] = 'uniform'                                                                                                                                                          \\n\",\n    \"                                                                                                                                                                                                   \\n\",\n    \"options = {}                                                                                                                                                                                       \\n\",\n    \"options['camber_effect_on_twist'] = False                                                                                                                                                          \\n\",\n    \"options['user_defined_m_distribution_type'] = None                                                                                                                                                 \\n\",\n    \"options['include_polars'] = False                                                                                                                                                                  \\n\",\n    \"options['separate_blades'] = False                                                                                                                                                                 \\n\",\n    \"                                                                                                                                                                                                   \\n\",\n    \"excel_description = {}                                                                                                                                                                             \\n\",\n    \"excel_description['excel_file_name'] = 'source/type04_db_nrel5mw_oc3_v06.xlsx'                                                                          \\n\",\n    \"excel_description['excel_sheet_parameters'] = 'parameters'                                                                                                                                         \\n\",\n    \"excel_description['excel_sheet_structural_blade'] = 'structural_blade'                                                                                                                             \\n\",\n    \"excel_description['excel_sheet_discretization_blade'] = 'discretization_blade'                                                                                                                     \\n\",\n    \"excel_description['excel_sheet_aero_blade'] = 'aero_blade'                                                                                                                                         \\n\",\n    \"excel_description['excel_sheet_airfoil_info'] = 'airfoil_info'                                                                                                                                     \\n\",\n    \"excel_description['excel_sheet_airfoil_chord'] = 'airfoil_coord'                                                                                                                                   \\n\",\n    \"                                                                                                                                                                                                   \\n\",\n    \"rotor, hub_nodes = template_wt.rotor_from_excel_type03(op_params,                                                                                                                                  \\n\",\n    \"                                            geom_params,                                                                                                                                           \\n\",\n    \"                                            excel_description,                                                                                                                                     \\n\",\n    \"                                            options) \"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"Define simulation details. The steady simulation is faster than the dynamic simulation. However, the dynamic simulation includes wake self-induction and provides more accurate results.\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 7,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"steady_simulation = False\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 8,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"SimInfo = gc.SimulationInformation()\\n\",\n    \"SimInfo.set_default_values()\\n\",\n    \"\\n\",\n    \"if steady_simulation:\\n\",\n    \"    SimInfo.solvers['SHARPy']['flow'] = ['BeamLoader',\\n\",\n    \"                            'AerogridLoader',\\n\",\n    \"                            'StaticCoupled',\\n\",\n    \"                            'BeamPlot',\\n\",\n    \"                            'AerogridPlot',            \\n\",\n    \"                            'SaveData'] \\n\",\n    \"else:\\n\",\n    \"    SimInfo.solvers['SHARPy']['flow'] = ['BeamLoader',\\n\",\n    \"                            'AerogridLoader',\\n\",\n    \"                            'StaticCoupled',\\n\",\n    \"                            'DynamicCoupled']\\n\",\n    \"                                         \\n\",\n    \"SimInfo.solvers['SHARPy']['case'] = case\\n\",\n    \"SimInfo.solvers['SHARPy']['route'] = route\\n\",\n    \"SimInfo.solvers['SHARPy']['write_log'] = True\\n\",\n    \"SimInfo.set_variable_all_dicts('dt', dt)\\n\",\n    \"SimInfo.set_variable_all_dicts('rho', air_density)\\n\",\n    \"\\n\",\n    \"SimInfo.solvers['SteadyVelocityField']['u_inf'] = WSP\\n\",\n    \"SimInfo.solvers['SteadyVelocityField']['u_inf_direction'] = np.array([0., 0., 1.])\\n\",\n    \"\\n\",\n    \"SimInfo.solvers['BeamLoader']['unsteady'] = 'on'\\n\",\n    \"\\n\",\n    \"SimInfo.solvers['AerogridLoader']['unsteady'] = 'on'\\n\",\n    \"SimInfo.solvers['AerogridLoader']['mstar'] = mstar\\n\",\n    \"SimInfo.solvers['AerogridLoader']['freestream_dir'] = np.array([0.,0.,0.])\\n\",\n    \"SimInfo.solvers['AerogridLoader']['wake_shape_generator'] = 'HelicoidalWake'\\n\",\n    \"SimInfo.solvers['AerogridLoader']['wake_shape_generator_input'] = {'u_inf': WSP,\\n\",\n    \"                                                                   'u_inf_direction': SimInfo.solvers['SteadyVelocityField']['u_inf_direction'],\\n\",\n    \"                                                                   'rotation_velocity': rotation_velocity*np.array([0., 0., 1.]),\\n\",\n    \"                                                                   'dt': dt,\\n\",\n    \"                                                                   'dphi1': dphi,\\n\",\n    \"                                                                   'ndphi1': mstar,\\n\",\n    \"                                                                   'r': 1.,\\n\",\n    \"                                                                   'dphimax': 10*deg2rad}\\n\",\n    \"    \\n\",\n    \"SimInfo.solvers['StaticCoupled']['structural_solver'] = 'RigidDynamicPrescribedStep'\\n\",\n    \"SimInfo.solvers['StaticCoupled']['structural_solver_settings'] = SimInfo.solvers['RigidDynamicPrescribedStep']\\n\",\n    \"SimInfo.solvers['StaticCoupled']['aero_solver'] = 'StaticUvlm'\\n\",\n    \"SimInfo.solvers['StaticCoupled']['aero_solver_settings'] = SimInfo.solvers['StaticUvlm']\\n\",\n    \"\\n\",\n    \"SimInfo.solvers['StaticCoupled']['tolerance'] = 1e-8\\n\",\n    \"SimInfo.solvers['StaticCoupled']['n_load_steps'] = 0\\n\",\n    \"SimInfo.solvers['StaticCoupled']['relaxation_factor'] = 0.\\n\",\n    \"\\n\",\n    \"SimInfo.solvers['StaticUvlm']['num_cores'] = 8\\n\",\n    \"SimInfo.solvers['StaticUvlm']['velocity_field_generator'] = 'SteadyVelocityField'\\n\",\n    \"SimInfo.solvers['StaticUvlm']['velocity_field_input'] = SimInfo.solvers['SteadyVelocityField']\\n\",\n    \"\\n\",\n    \"SimInfo.solvers['SaveData']['compress_float'] = True\\n\",\n    \"                                         \\n\",\n    \"# Only used for steady_simulation = False\\n\",\n    \"SimInfo.solvers['StepUvlm']['convection_scheme'] = 3\\n\",\n    \"SimInfo.solvers['StepUvlm']['num_cores'] = 8\\n\",\n    \"SimInfo.solvers['StepUvlm']['velocity_field_generator'] = 'SteadyVelocityField'\\n\",\n    \"SimInfo.solvers['StepUvlm']['velocity_field_input'] = SimInfo.solvers['SteadyVelocityField']\\n\",\n    \"\\n\",\n    \"SimInfo.solvers['DynamicCoupled']['structural_solver'] = 'RigidDynamicPrescribedStep'\\n\",\n    \"SimInfo.solvers['DynamicCoupled']['structural_solver_settings'] = SimInfo.solvers['RigidDynamicPrescribedStep']\\n\",\n    \"SimInfo.solvers['DynamicCoupled']['aero_solver'] = 'StepUvlm'\\n\",\n    \"SimInfo.solvers['DynamicCoupled']['aero_solver_settings'] = SimInfo.solvers['StepUvlm']\\n\",\n    \"SimInfo.solvers['DynamicCoupled']['postprocessors'] = ['BeamPlot', 'AerogridPlot', 'Cleanup', 'SaveData']\\n\",\n    \"SimInfo.solvers['DynamicCoupled']['postprocessors_settings'] = {'BeamPlot': SimInfo.solvers['BeamPlot'],\\n\",\n    \"                                                             'AerogridPlot': SimInfo.solvers['AerogridPlot'],\\n\",\n    \"                                                             'Cleanup': SimInfo.solvers['Cleanup'],\\n\",\n    \"                                                             'SaveData': SimInfo.solvers['SaveData']}\\n\",\n    \"SimInfo.solvers['DynamicCoupled']['minimum_steps'] = 0\\n\",\n    \"SimInfo.solvers['DynamicCoupled']['include_unsteady_force_contribution'] = True\\n\",\n    \"SimInfo.solvers['DynamicCoupled']['relaxation_factor'] = 0.\\n\",\n    \"SimInfo.solvers['DynamicCoupled']['final_relaxation_factor'] = 0.\\n\",\n    \"SimInfo.solvers['DynamicCoupled']['dynamic_relaxation'] = False\\n\",\n    \"SimInfo.solvers['DynamicCoupled']['relaxation_steps'] = 0\\n\",\n    \"\\n\",\n    \"# Define dynamic simulation (used regardless the value of \\\"steady_simulation\\\" variable)\\n\",\n    \"SimInfo.define_num_steps(time_steps)\\n\",\n    \"SimInfo.with_forced_vel = True\\n\",\n    \"SimInfo.for_vel = np.zeros((time_steps,6), dtype=float)\\n\",\n    \"SimInfo.for_vel[:,5] = rotation_velocity\\n\",\n    \"SimInfo.for_acc = np.zeros((time_steps,6), dtype=float)\\n\",\n    \"SimInfo.with_dynamic_forces = True\\n\",\n    \"SimInfo.dynamic_forces = np.zeros((time_steps,rotor.StructuralInformation.num_node,6), dtype=float)\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"Generate simulation files\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 9,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"gc.clean_test_files(SimInfo.solvers['SHARPy']['route'], SimInfo.solvers['SHARPy']['case'])\\n\",\n    \"rotor.generate_h5_files(SimInfo.solvers['SHARPy']['route'], SimInfo.solvers['SHARPy']['case'])\\n\",\n    \"SimInfo.generate_solver_file()\\n\",\n    \"SimInfo.generate_dyn_file(time_steps)\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## Run SHARPy case\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 10,\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"name\": \"stdout\",\n     \"output_type\": \"stream\",\n     \"text\": [\n      \"--------------------------------------------------------------------------------\\u001b[0m\\n\",\n      \"            ######  ##     ##    ###    ########  ########  ##    ##\\u001b[0m\\n\",\n      \"           ##    ## ##     ##   ## ##   ##     ## ##     ##  ##  ##\\u001b[0m\\n\",\n      \"           ##       ##     ##  ##   ##  ##     ## ##     ##   ####\\u001b[0m\\n\",\n      \"            ######  ######### ##     ## ########  ########     ##\\u001b[0m\\n\",\n      \"                 ## ##     ## ######### ##   ##   ##           ##\\u001b[0m\\n\",\n      \"           ##    ## ##     ## ##     ## ##    ##  ##           ##\\u001b[0m\\n\",\n      \"            ######  ##     ## ##     ## ##     ## ##           ##\\u001b[0m\\n\",\n      \"--------------------------------------------------------------------------------\\u001b[0m\\n\",\n      \"Aeroelastics Lab, Aeronautics Department.\\u001b[0m\\n\",\n      \"    Copyright (c), Imperial College London.\\u001b[0m\\n\",\n      \"    All rights reserved.\\u001b[0m\\n\",\n      \"    License available at https://github.com/imperialcollegelondon/sharpy\\u001b[0m\\n\",\n      \"\\u001b[36mRunning SHARPy from /home/arturo/code/sharpy/docs/source/content/example_notebooks\\u001b[0m\\n\",\n      \"\\u001b[36mSHARPy being run is in /home/arturo/code/sharpy\\u001b[0m\\n\",\n      \"\\u001b[36mThe branch being run is dev_blade_pitch_v2\\u001b[0m\\n\",\n      \"\\u001b[36mThe version and commit hash are: v1.2.1-546-g05602d1f-05602d1f\\u001b[0m\\n\",\n      \"SHARPy output folder set\\u001b[0m\\n\",\n      \"\\u001b[34m\\t./output//rotor/\\u001b[0m\\n\",\n      \"\\u001b[36mGenerating an instance of BeamLoader\\u001b[0m\\n\",\n      \"\\u001b[36mGenerating an instance of AerogridLoader\\u001b[0m\\n\",\n      \"Variable shear_direction has no assigned value in the settings file.\\u001b[0m\\n\",\n      \"\\u001b[34m    will default to the value: [1. 0. 0.]\\u001b[0m\\n\",\n      \"Variable shear_exp has no assigned value in the settings file.\\u001b[0m\\n\",\n      \"\\u001b[34m    will default to the value: 0.0\\u001b[0m\\n\",\n      \"Variable h_ref has no assigned value in the settings file.\\u001b[0m\\n\",\n      \"\\u001b[34m    will default to the value: 1.0\\u001b[0m\\n\",\n      \"Variable h_corr has no assigned value in the settings file.\\u001b[0m\\n\",\n      \"\\u001b[34m    will default to the value: 1.0\\u001b[0m\\n\",\n      \"\\u001b[34mThe aerodynamic grid contains 3 surfaces\\u001b[0m\\n\",\n      \"\\u001b[34m  Surface 0, M=8, N=26\\u001b[0m\\n\",\n      \"     Wake 0, M=450, N=26\\u001b[0m\\n\",\n      \"\\u001b[34m  Surface 1, M=8, N=26\\u001b[0m\\n\",\n      \"     Wake 1, M=450, N=26\\u001b[0m\\n\",\n      \"\\u001b[34m  Surface 2, M=8, N=26\\u001b[0m\\n\",\n      \"     Wake 2, M=450, N=26\\u001b[0m\\n\",\n      \"  In total: 624 bound panels\\u001b[0m\\n\",\n      \"  In total: 35100 wake panels\\u001b[0m\\n\",\n      \"  Total number of panels = 35724\\u001b[0m\\n\",\n      \"\\u001b[36mGenerating an instance of StaticCoupled\\u001b[0m\\n\",\n      \"\\u001b[36mGenerating an instance of RigidDynamicPrescribedStep\\u001b[0m\\n\",\n      \"\\u001b[36mGenerating an instance of StaticUvlm\\u001b[0m\\n\",\n      \"\\u001b[0m\\n\",\n      \"\\u001b[0m\\n\",\n      \"\\u001b[0m\\n\",\n      \"|=====|=====|============|==========|==========|==========|==========|==========|==========|\\u001b[0m\\n\",\n      \"|iter |step | log10(res) |    Fx    |    Fy    |    Fz    |    Mx    |    My    |    Mz    |\\u001b[0m\\n\",\n      \"|=====|=====|============|==========|==========|==========|==========|==========|==========|\\u001b[0m\\n\",\n      \"|  0  |  0  |  0.00000   | -0.0000  |  0.0000  |21927.8250|  0.0000  | -0.0000  |5962997.5361|\\u001b[0m\\n\",\n      \"|  1  |  0  |    -inf    | -0.0000  |  0.0000  |21927.8250|  0.0000  | -0.0000  |5962997.5361|\\u001b[0m\\n\",\n      \"\\u001b[36mGenerating an instance of DynamicCoupled\\u001b[0m\\n\",\n      \"\\u001b[36mGenerating an instance of RigidDynamicPrescribedStep\\u001b[0m\\n\",\n      \"\\u001b[36mGenerating an instance of StepUvlm\\u001b[0m\\n\",\n      \"\\u001b[36mGenerating an instance of BeamPlot\\u001b[0m\\n\",\n      \"\\u001b[36mGenerating an instance of AerogridPlot\\u001b[0m\\n\",\n      \"\\u001b[36mGenerating an instance of Cleanup\\u001b[0m\\n\",\n      \"\\u001b[36mGenerating an instance of SaveData\\u001b[0m\\n\",\n      \"\\u001b[0m\\n\",\n      \"\\u001b[0m\\n\",\n      \"\\u001b[0m\\n\",\n      \"|=======|========|======|==============|==============|==============|==============|==============|\\u001b[0m\\n\",\n      \"|  ts   |   t    | iter | struc ratio  |  iter time   | residual vel |  FoR_vel(x)  |  FoR_vel(z)  |\\u001b[0m\\n\",\n      \"|=======|========|======|==============|==============|==============|==============|==============|\\u001b[0m\\n\",\n      \"|   1   | 0.0551 |  1   |   0.001471   |  11.072773   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|   2   | 0.1102 |  1   |   0.001529   |  11.094774   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|   3   | 0.1653 |  1   |   0.001487   |  11.017530   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|   4   | 0.2204 |  1   |   0.001487   |  11.053551   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|   5   | 0.2755 |  1   |   0.001495   |  10.972424   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|   6   | 0.3306 |  1   |   0.001496   |  10.951425   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|   7   | 0.3857 |  1   |   0.001492   |  11.018625   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|   8   | 0.4408 |  1   |   0.001476   |  11.044770   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|   9   | 0.4959 |  1   |   0.001478   |  11.122489   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  10   | 0.5510 |  1   |   0.001500   |  10.997606   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  11   | 0.6061 |  1   |   0.001481   |  11.076450   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  12   | 0.6612 |  1   |   0.001513   |  10.976762   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  13   | 0.7163 |  1   |   0.001489   |  11.056770   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  14   | 0.7713 |  1   |   0.001473   |  11.147662   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  15   | 0.8264 |  1   |   0.001485   |  11.047932   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  16   | 0.8815 |  1   |   0.001500   |  10.984375   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  17   | 0.9366 |  1   |   0.001492   |  10.999334   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  18   | 0.9917 |  1   |   0.001492   |  11.036468   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  19   | 1.0468 |  1   |   0.001490   |  10.989860   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  20   | 1.1019 |  1   |   0.001487   |  10.981977   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  21   | 1.1570 |  1   |   0.001480   |  11.026050   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  22   | 1.2121 |  1   |   0.001501   |  10.964416   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  23   | 1.2672 |  1   |   0.001483   |  11.061231   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  24   | 1.3223 |  1   |   0.001502   |  11.026285   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  25   | 1.3774 |  1   |   0.001497   |  10.937541   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  26   | 1.4325 |  1   |   0.001464   |  11.216671   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  27   | 1.4876 |  1   |   0.001489   |  11.077631   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  28   | 1.5427 |  1   |   0.001487   |  11.029765   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  29   | 1.5978 |  1   |   0.001484   |  11.057365   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  30   | 1.6529 |  1   |   0.001499   |  10.988523   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  31   | 1.7080 |  1   |   0.001480   |  11.082585   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  32   | 1.7631 |  1   |   0.001493   |  11.026814   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  33   | 1.8182 |  1   |   0.001500   |  10.964227   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  34   | 1.8733 |  1   |   0.001496   |  11.070894   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  35   | 1.9284 |  1   |   0.001499   |  10.991359   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  36   | 1.9835 |  1   |   0.001493   |  10.956692   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  37   | 2.0386 |  1   |   0.001489   |  11.022953   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  38   | 2.0937 |  1   |   0.001493   |  11.002933   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  39   | 2.1488 |  1   |   0.001494   |  10.971854   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  40   | 2.2039 |  1   |   0.001499   |  10.956611   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  41   | 2.2590 |  1   |   0.001484   |  11.020658   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  42   | 2.3140 |  1   |   0.001484   |  11.016274   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  43   | 2.3691 |  1   |   0.001490   |  11.171444   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  44   | 2.4242 |  1   |   0.001496   |  10.975332   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  45   | 2.4793 |  1   |   0.001479   |  11.094840   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  46   | 2.5344 |  1   |   0.001484   |  11.060059   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  47   | 2.5895 |  1   |   0.001329   |  12.309849   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  48   | 2.6446 |  1   |   0.001455   |  11.269876   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  49   | 2.6997 |  1   |   0.001489   |  11.076657   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  50   | 2.7548 |  1   |   0.001496   |  10.998456   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  51   | 2.8099 |  1   |   0.001471   |  11.215534   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  52   | 2.8650 |  1   |   0.001494   |  10.981076   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  53   | 2.9201 |  1   |   0.001476   |  11.089418   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  54   | 2.9752 |  1   |   0.001482   |  10.973016   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  55   | 3.0303 |  1   |   0.001469   |  11.115966   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  56   | 3.0854 |  1   |   0.001458   |  11.172810   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  57   | 3.1405 |  1   |   0.001496   |  10.984580   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  58   | 3.1956 |  1   |   0.001451   |  11.196615   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  59   | 3.2507 |  1   |   0.001498   |  10.961545   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  60   | 3.3058 |  1   |   0.001492   |  11.053819   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  61   | 3.3609 |  1   |   0.001492   |  11.066293   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  62   | 3.4160 |  1   |   0.001489   |  11.025009   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  63   | 3.4711 |  1   |   0.001485   |  10.999920   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  64   | 3.5262 |  1   |   0.001505   |  10.973439   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  65   | 3.5813 |  1   |   0.001495   |  10.981763   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  66   | 3.6364 |  1   |   0.001481   |  10.997240   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  67   | 3.6915 |  1   |   0.001489   |  11.030007   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  68   | 3.7466 |  1   |   0.001487   |  10.977346   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  69   | 3.8017 |  1   |   0.001490   |  11.086072   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  70   | 3.8567 |  1   |   0.001478   |  11.027897   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  71   | 3.9118 |  1   |   0.001492   |  10.997195   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  72   | 3.9669 |  1   |   0.001476   |  11.129629   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  73   | 4.0220 |  1   |   0.001491   |  10.996616   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  74   | 4.0771 |  1   |   0.001513   |  10.996785   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  75   | 4.1322 |  1   |   0.001487   |  11.010984   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  76   | 4.1873 |  1   |   0.001504   |  10.960333   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  77   | 4.2424 |  1   |   0.001483   |  11.062480   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  78   | 4.2975 |  1   |   0.001502   |  10.999189   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  79   | 4.3526 |  1   |   0.001504   |  10.989805   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  80   | 4.4077 |  1   |   0.001499   |  10.986292   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  81   | 4.4628 |  1   |   0.001471   |  11.064248   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  82   | 4.5179 |  1   |   0.001478   |  11.030763   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  83   | 4.5730 |  1   |   0.001423   |  11.418318   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  84   | 4.6281 |  1   |   0.001513   |  10.934981   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  85   | 4.6832 |  1   |   0.001477   |  10.947891   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  86   | 4.7383 |  1   |   0.001449   |  11.337449   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  87   | 4.7934 |  1   |   0.001446   |  11.356113   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  88   | 4.8485 |  1   |   0.001493   |  11.006986   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  89   | 4.9036 |  1   |   0.001508   |  10.995290   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  90   | 4.9587 |  1   |   0.001519   |  10.961908   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  91   | 5.0138 |  1   |   0.001511   |  11.004637   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  92   | 5.0689 |  1   |   0.001493   |  11.060139   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  93   | 5.1240 |  1   |   0.001475   |  11.108975   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  94   | 5.1791 |  1   |   0.001501   |  10.946505   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  95   | 5.2342 |  1   |   0.001504   |  10.936386   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  96   | 5.2893 |  1   |   0.001486   |  10.994701   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  97   | 5.3444 |  1   |   0.001483   |  11.023811   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  98   | 5.3994 |  1   |   0.001494   |  10.979126   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  99   | 5.4545 |  1   |   0.001481   |  11.163518   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  100  | 5.5096 |  1   |   0.001479   |  11.047313   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  101  | 5.5647 |  1   |   0.001473   |  11.060119   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  102  | 5.6198 |  1   |   0.001486   |  11.053105   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  103  | 5.6749 |  1   |   0.001486   |  11.092742   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  104  | 5.7300 |  1   |   0.001477   |  11.137425   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  105  | 5.7851 |  1   |   0.001491   |  11.010371   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  106  | 5.8402 |  1   |   0.001496   |  10.990369   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  107  | 5.8953 |  1   |   0.001473   |  11.243003   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  108  | 5.9504 |  1   |   0.001388   |  11.929604   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  109  | 6.0055 |  1   |   0.001458   |  11.222341   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  110  | 6.0606 |  1   |   0.001499   |  11.021925   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  111  | 6.1157 |  1   |   0.001489   |  10.988726   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  112  | 6.1708 |  1   |   0.001464   |  11.127002   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  113  | 6.2259 |  1   |   0.001490   |  10.982098   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  114  | 6.2810 |  1   |   0.001490   |  11.058744   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  115  | 6.3361 |  1   |   0.001501   |  11.036917   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  116  | 6.3912 |  1   |   0.001487   |  11.093127   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  117  | 6.4463 |  1   |   0.001511   |  10.986041   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  118  | 6.5014 |  1   |   0.001473   |  11.067499   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  119  | 6.5565 |  1   |   0.001495   |  10.978576   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  120  | 6.6116 |  1   |   0.001497   |  11.027401   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  121  | 6.6667 |  1   |   0.001487   |  11.056618   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  122  | 6.7218 |  1   |   0.001492   |  10.946566   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  123  | 6.7769 |  1   |   0.001492   |  10.977270   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  124  | 6.8320 |  1   |   0.001466   |  11.212596   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  125  | 6.8871 |  1   |   0.001493   |  10.996106   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  126  | 6.9421 |  1   |   0.001480   |  11.018607   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  127  | 6.9972 |  1   |   0.001509   |  10.976320   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  128  | 7.0523 |  1   |   0.001329   |  12.417034   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  129  | 7.1074 |  1   |   0.001510   |  10.938081   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  130  | 7.1625 |  1   |   0.001496   |  10.964072   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  131  | 7.2176 |  1   |   0.001497   |  11.006588   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  132  | 7.2727 |  1   |   0.001493   |  11.018465   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  133  | 7.3278 |  1   |   0.001493   |  11.030553   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  134  | 7.3829 |  1   |   0.001490   |  11.034491   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  135  | 7.4380 |  1   |   0.001493   |  10.942718   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  136  | 7.4931 |  1   |   0.001485   |  11.063141   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  137  | 7.5482 |  1   |   0.001490   |  10.940797   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  138  | 7.6033 |  1   |   0.001496   |  11.094267   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  139  | 7.6584 |  1   |   0.001476   |  11.092305   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  140  | 7.7135 |  1   |   0.001489   |  10.999871   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  141  | 7.7686 |  1   |   0.001486   |  10.969563   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  142  | 7.8237 |  1   |   0.001485   |  11.045270   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  143  | 7.8788 |  1   |   0.001493   |  10.999192   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  144  | 7.9339 |  1   |   0.001498   |  11.051950   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  145  | 7.9890 |  1   |   0.001489   |  11.134410   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  146  | 8.0441 |  1   |   0.001474   |  11.101941   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  147  | 8.0992 |  1   |   0.001480   |  11.063681   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  148  | 8.1543 |  1   |   0.001486   |  10.946801   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  149  | 8.2094 |  1   |   0.001484   |  11.076774   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  150  | 8.2645 |  1   |   0.001480   |  11.143664   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  151  | 8.3196 |  1   |   0.001509   |  10.947056   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  152  | 8.3747 |  1   |   0.001447   |  11.226169   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  153  | 8.4298 |  1   |   0.001479   |  11.063754   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  154  | 8.4848 |  1   |   0.001484   |  10.961506   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  155  | 8.5399 |  1   |   0.001497   |  11.050401   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  156  | 8.5950 |  1   |   0.001503   |  11.018204   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  157  | 8.6501 |  1   |   0.001472   |  11.145519   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  158  | 8.7052 |  1   |   0.001486   |  11.037257   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  159  | 8.7603 |  1   |   0.001492   |  11.036405   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  160  | 8.8154 |  1   |   0.001480   |  11.015381   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  161  | 8.8705 |  1   |   0.001498   |  10.979052   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  162  | 8.9256 |  1   |   0.001496   |  11.051611   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  163  | 8.9807 |  1   |   0.001486   |  11.052557   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  164  | 9.0358 |  1   |   0.001491   |  11.034617   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  165  | 9.0909 |  1   |   0.001488   |  11.049273   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  166  | 9.1460 |  1   |   0.001491   |  11.085268   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  167  | 9.2011 |  1   |   0.001503   |  10.958939   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  168  | 9.2562 |  1   |   0.001497   |  11.062020   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  169  | 9.3113 |  1   |   0.001518   |  10.996845   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  170  | 9.3664 |  1   |   0.001470   |  11.209611   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  171  | 9.4215 |  1   |   0.001477   |  11.023668   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  172  | 9.4766 |  1   |   0.001481   |  11.090508   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  173  | 9.5317 |  1   |   0.001512   |  10.958598   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  174  | 9.5868 |  1   |   0.001472   |  11.093911   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  175  | 9.6419 |  1   |   0.001495   |  11.022321   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  176  | 9.6970 |  1   |   0.001497   |  10.963686   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  177  | 9.7521 |  1   |   0.001495   |  11.014677   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  178  | 9.8072 |  1   |   0.001494   |  10.971079   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  179  | 9.8623 |  1   |   0.001478   |  11.075295   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  180  | 9.9174 |  1   |   0.001492   |  10.967837   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  181  | 9.9725 |  1   |   0.001502   |  11.002055   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  182  |10.0275 |  1   |   0.001478   |  11.256881   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  183  |10.0826 |  1   |   0.001503   |  10.965836   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  184  |10.1377 |  1   |   0.001492   |  11.003513   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  185  |10.1928 |  1   |   0.001499   |  11.033890   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  186  |10.2479 |  1   |   0.001477   |  11.086396   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  187  |10.3030 |  1   |   0.001494   |  11.022237   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  188  |10.3581 |  1   |   0.001488   |  11.065405   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  189  |10.4132 |  1   |   0.001479   |  11.172747   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  190  |10.4683 |  1   |   0.001488   |  11.135500   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  191  |10.5234 |  1   |   0.001485   |  10.995766   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  192  |10.5785 |  1   |   0.001494   |  10.953639   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  193  |10.6336 |  1   |   0.001492   |  11.006385   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  194  |10.6887 |  1   |   0.001384   |  11.898180   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  195  |10.7438 |  1   |   0.001505   |  10.971906   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  196  |10.7989 |  1   |   0.001506   |  10.982670   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  197  |10.8540 |  1   |   0.001324   |  12.325860   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  198  |10.9091 |  1   |   0.001502   |  11.026861   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  199  |10.9642 |  1   |   0.001505   |  10.987199   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  200  |11.0193 |  1   |   0.001488   |  11.061289   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  201  |11.0744 |  1   |   0.001489   |  11.049199   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  202  |11.1295 |  1   |   0.001501   |  10.973437   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  203  |11.1846 |  1   |   0.001500   |  10.937448   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  204  |11.2397 |  1   |   0.001499   |  10.940185   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  205  |11.2948 |  1   |   0.001506   |  10.956871   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  206  |11.3499 |  1   |   0.001496   |  10.959225   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  207  |11.4050 |  1   |   0.001380   |  11.911324   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  208  |11.4601 |  1   |   0.001505   |  10.983367   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  209  |11.5152 |  1   |   0.001483   |  11.116040   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  210  |11.5702 |  1   |   0.001499   |  10.946843   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  211  |11.6253 |  1   |   0.001495   |  11.007702   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  212  |11.6804 |  1   |   0.001484   |  11.036537   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  213  |11.7355 |  1   |   0.001501   |  10.962850   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  214  |11.7906 |  1   |   0.001458   |  11.231765   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  215  |11.8457 |  1   |   0.001500   |  10.974388   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  216  |11.9008 |  1   |   0.001502   |  10.971881   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  217  |11.9559 |  1   |   0.001484   |  11.094227   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  218  |12.0110 |  1   |   0.001465   |  11.285769   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  219  |12.0661 |  1   |   0.001472   |  11.138884   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  220  |12.1212 |  1   |   0.001462   |  11.085258   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  221  |12.1763 |  1   |   0.001506   |  10.962956   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  222  |12.2314 |  1   |   0.001481   |  11.063845   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  223  |12.2865 |  1   |   0.001490   |  10.940562   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  224  |12.3416 |  1   |   0.001487   |  11.074080   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  225  |12.3967 |  1   |   0.001500   |  10.966088   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  226  |12.4518 |  1   |   0.001503   |  10.940730   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  227  |12.5069 |  1   |   0.001500   |  10.983767   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  228  |12.5620 |  1   |   0.001495   |  11.087621   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  229  |12.6171 |  1   |   0.001491   |  11.030768   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  230  |12.6722 |  1   |   0.001501   |  10.986019   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  231  |12.7273 |  1   |   0.001471   |  11.210606   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  232  |12.7824 |  1   |   0.001496   |  10.989540   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  233  |12.8375 |  1   |   0.001479   |  10.991125   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  234  |12.8926 |  1   |   0.001484   |  10.997315   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  235  |12.9477 |  1   |   0.001495   |  10.981242   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  236  |13.0028 |  1   |   0.001494   |  11.034151   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  237  |13.0579 |  1   |   0.001521   |  11.393696   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  238  |13.1129 |  1   |   0.001483   |  11.187673   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  239  |13.1680 |  1   |   0.001476   |  11.165030   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  240  |13.2231 |  1   |   0.001461   |  11.121420   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  241  |13.2782 |  1   |   0.001497   |  11.077922   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  242  |13.3333 |  1   |   0.001472   |  11.274707   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  243  |13.3884 |  1   |   0.001477   |  11.087600   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  244  |13.4435 |  1   |   0.001469   |  11.061153   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  245  |13.4986 |  1   |   0.001449   |  11.292755   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  246  |13.5537 |  1   |   0.001495   |  11.001245   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  247  |13.6088 |  1   |   0.001493   |  11.024726   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  248  |13.6639 |  1   |   0.001480   |  10.968597   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  249  |13.7190 |  1   |   0.001478   |  11.008988   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  250  |13.7741 |  1   |   0.001464   |  11.120604   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  251  |13.8292 |  1   |   0.001494   |  10.976703   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  252  |13.8843 |  1   |   0.001464   |  11.173856   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  253  |13.9394 |  1   |   0.001478   |  11.182188   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  254  |13.9945 |  1   |   0.001474   |  11.138903   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  255  |14.0496 |  1   |   0.001498   |  10.998538   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  256  |14.1047 |  1   |   0.001490   |  10.959735   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  257  |14.1598 |  1   |   0.001497   |  11.015843   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  258  |14.2149 |  1   |   0.001442   |  11.296236   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  259  |14.2700 |  1   |   0.001470   |  11.035043   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  260  |14.3251 |  1   |   0.001499   |  11.025067   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  261  |14.3802 |  1   |   0.001483   |  11.032883   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  262  |14.4353 |  1   |   0.001450   |  11.225693   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  263  |14.4904 |  1   |   0.001490   |  11.049877   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  264  |14.5455 |  1   |   0.001500   |  10.961913   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  265  |14.6006 |  1   |   0.001468   |  11.227395   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  266  |14.6556 |  1   |   0.001500   |  10.950821   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  267  |14.7107 |  1   |   0.001496   |  11.034819   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  268  |14.7658 |  1   |   0.001478   |  11.039118   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  269  |14.8209 |  1   |   0.001480   |  11.054862   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  270  |14.8760 |  1   |   0.001499   |  10.966170   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  271  |14.9311 |  1   |   0.001492   |  11.013549   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  272  |14.9862 |  1   |   0.001487   |  11.063011   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  273  |15.0413 |  1   |   0.001494   |  11.025787   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  274  |15.0964 |  1   |   0.001492   |  11.056323   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  275  |15.1515 |  1   |   0.001502   |  11.017958   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  276  |15.2066 |  1   |   0.001498   |  10.993303   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  277  |15.2617 |  1   |   0.001492   |  11.045624   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  278  |15.3168 |  1   |   0.001488   |  11.001706   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  279  |15.3719 |  1   |   0.001501   |  11.019076   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  280  |15.4270 |  1   |   0.001482   |  10.980229   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  281  |15.4821 |  1   |   0.001500   |  10.990641   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  282  |15.5372 |  1   |   0.001482   |  11.039660   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  283  |15.5923 |  1   |   0.001506   |  10.960431   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  284  |15.6474 |  1   |   0.001483   |  11.035762   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  285  |15.7025 |  1   |   0.001483   |  10.972536   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  286  |15.7576 |  1   |   0.001497   |  11.078446   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  287  |15.8127 |  1   |   0.001494   |  11.003910   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  288  |15.8678 |  1   |   0.001524   |  10.954572   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  289  |15.9229 |  1   |   0.001468   |  11.170064   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  290  |15.9780 |  1   |   0.001466   |  11.078832   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  291  |16.0331 |  1   |   0.001500   |  10.965774   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  292  |16.0882 |  1   |   0.001492   |  10.988034   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  293  |16.1433 |  1   |   0.001498   |  11.034559   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  294  |16.1983 |  1   |   0.001485   |  10.967131   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  295  |16.2534 |  1   |   0.001480   |  11.102506   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  296  |16.3085 |  1   |   0.001504   |  10.998471   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  297  |16.3636 |  1   |   0.001499   |  10.959420   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  298  |16.4187 |  1   |   0.001483   |  11.099791   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  299  |16.4738 |  1   |   0.001493   |  10.974991   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  300  |16.5289 |  1   |   0.001487   |  10.989717   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  301  |16.5840 |  1   |   0.001484   |  11.069229   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  302  |16.6391 |  1   |   0.001503   |  10.985806   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  303  |16.6942 |  1   |   0.001496   |  11.041107   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  304  |16.7493 |  1   |   0.001487   |  10.991144   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  305  |16.8044 |  1   |   0.001492   |  11.005035   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  306  |16.8595 |  1   |   0.001488   |  11.087163   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  307  |16.9146 |  1   |   0.001491   |  11.002862   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  308  |16.9697 |  1   |   0.001519   |  11.018252   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  309  |17.0248 |  1   |   0.001489   |  11.030986   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  310  |17.0799 |  1   |   0.001509   |  11.001859   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  311  |17.1350 |  1   |   0.001492   |  11.019300   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  312  |17.1901 |  1   |   0.001488   |  11.036436   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  313  |17.2452 |  1   |   0.001493   |  11.046922   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  314  |17.3003 |  1   |   0.001485   |  10.976898   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  315  |17.3554 |  1   |   0.001497   |  10.941875   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  316  |17.4105 |  1   |   0.001497   |  11.056621   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  317  |17.4656 |  1   |   0.001471   |  11.117604   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  318  |17.5207 |  1   |   0.001469   |  11.168160   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  319  |17.5758 |  1   |   0.001476   |  11.020628   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  320  |17.6309 |  1   |   0.001490   |  11.020211   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  321  |17.6860 |  1   |   0.001488   |  11.010496   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  322  |17.7410 |  1   |   0.001475   |  11.125369   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  323  |17.7961 |  1   |   0.001494   |  10.955690   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  324  |17.8512 |  1   |   0.001493   |  11.078510   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  325  |17.9063 |  1   |   0.001362   |  12.022863   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  326  |17.9614 |  1   |   0.001489   |  11.021870   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  327  |18.0165 |  1   |   0.001463   |  11.139775   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  328  |18.0716 |  1   |   0.001475   |  11.015395   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  329  |18.1267 |  1   |   0.001475   |  10.995628   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  330  |18.1818 |  1   |   0.001490   |  11.037015   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  331  |18.2369 |  1   |   0.001489   |  10.994272   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  332  |18.2920 |  1   |   0.001485   |  11.023925   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  333  |18.3471 |  1   |   0.001465   |  11.131615   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  334  |18.4022 |  1   |   0.001481   |  10.996215   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  335  |18.4573 |  1   |   0.001493   |  11.042847   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  336  |18.5124 |  1   |   0.001493   |  11.153712   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  337  |18.5675 |  1   |   0.001497   |  10.981005   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  338  |18.6226 |  1   |   0.001490   |  10.993124   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  339  |18.6777 |  1   |   0.001498   |  10.970379   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  340  |18.7328 |  1   |   0.001492   |  10.992345   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  341  |18.7879 |  1   |   0.001492   |  10.998224   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  342  |18.8430 |  1   |   0.001523   |  10.982035   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  343  |18.8981 |  1   |   0.001485   |  11.054384   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  344  |18.9532 |  1   |   0.001486   |  11.027520   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  345  |19.0083 |  1   |   0.001482   |  11.016985   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  346  |19.0634 |  1   |   0.001484   |  11.169659   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  347  |19.1185 |  1   |   0.001476   |  11.164135   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  348  |19.1736 |  1   |   0.001499   |  10.963815   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  349  |19.2287 |  1   |   0.001481   |  11.041115   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  350  |19.2837 |  1   |   0.001478   |  11.025983   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  351  |19.3388 |  1   |   0.001504   |  10.984140   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  352  |19.3939 |  1   |   0.001478   |  11.033161   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  353  |19.4490 |  1   |   0.001490   |  11.040692   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  354  |19.5041 |  1   |   0.001479   |  11.018249   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  355  |19.5592 |  1   |   0.001471   |  10.995813   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  356  |19.6143 |  1   |   0.001478   |  11.009744   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  357  |19.6694 |  1   |   0.001489   |  11.012060   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  358  |19.7245 |  1   |   0.001487   |  11.043458   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  359  |19.7796 |  1   |   0.001492   |  10.996924   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  360  |19.8347 |  1   |   0.001486   |  10.997914   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  361  |19.8898 |  1   |   0.001462   |  11.193126   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  362  |19.9449 |  1   |   0.001476   |  11.131790   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  363  |20.0000 |  1   |   0.001456   |  11.255347   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  364  |20.0551 |  1   |   0.001443   |  11.262457   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  365  |20.1102 |  1   |   0.001442   |  11.282331   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  366  |20.1653 |  1   |   0.001460   |  11.133270   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  367  |20.2204 |  1   |   0.001461   |  11.137590   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  368  |20.2755 |  1   |   0.001458   |  11.279287   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  369  |20.3306 |  1   |   0.001473   |  11.155934   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  370  |20.3857 |  1   |   0.001480   |  11.140440   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  371  |20.4408 |  1   |   0.001464   |  11.196868   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  372  |20.4959 |  1   |   0.001473   |  11.196430   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  373  |20.5510 |  1   |   0.001467   |  11.166742   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  374  |20.6061 |  1   |   0.001488   |  11.095840   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  375  |20.6612 |  1   |   0.001456   |  11.119288   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  376  |20.7163 |  1   |   0.001514   |  10.997535   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  377  |20.7713 |  1   |   0.001500   |  10.973636   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  378  |20.8264 |  1   |   0.001485   |  11.041631   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  379  |20.8815 |  1   |   0.001474   |  11.054704   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  380  |20.9366 |  1   |   0.001505   |  10.956344   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  381  |20.9917 |  1   |   0.001485   |  11.037928   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  382  |21.0468 |  1   |   0.001494   |  11.004072   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  383  |21.1019 |  1   |   0.001460   |  11.191711   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  384  |21.1570 |  1   |   0.001464   |  11.213192   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  385  |21.2121 |  1   |   0.001297   |  12.715977   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  386  |21.2672 |  1   |   0.001473   |  11.214244   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  387  |21.3223 |  1   |   0.001488   |  11.175076   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  388  |21.3774 |  1   |   0.001477   |  11.140157   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  389  |21.4325 |  1   |   0.001476   |  11.217773   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  390  |21.4876 |  1   |   0.001487   |  11.070076   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  391  |21.5427 |  1   |   0.001476   |  11.079977   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  392  |21.5978 |  1   |   0.001497   |  10.963420   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  393  |21.6529 |  1   |   0.001492   |  10.965270   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  394  |21.7080 |  1   |   0.001499   |  11.031488   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  395  |21.7631 |  1   |   0.001379   |  11.928026   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  396  |21.8182 |  1   |   0.001474   |  11.124487   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  397  |21.8733 |  1   |   0.001482   |  11.037149   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  398  |21.9284 |  1   |   0.001491   |  11.062619   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  399  |21.9835 |  1   |   0.001483   |  11.227740   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  400  |22.0386 |  1   |   0.001460   |  11.253708   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  401  |22.0937 |  1   |   0.001474   |  11.210907   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  402  |22.1488 |  1   |   0.001483   |  11.119041   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  403  |22.2039 |  1   |   0.001490   |  11.014906   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  404  |22.2590 |  1   |   0.001499   |  10.956471   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  405  |22.3140 |  1   |   0.001468   |  11.109550   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  406  |22.3691 |  1   |   0.001490   |  10.982853   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  407  |22.4242 |  1   |   0.001478   |  11.193154   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  408  |22.4793 |  1   |   0.001498   |  11.031459   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  409  |22.5344 |  1   |   0.001508   |  10.978516   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  410  |22.5895 |  1   |   0.001481   |  11.028180   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  411  |22.6446 |  1   |   0.001492   |  11.037275   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  412  |22.6997 |  1   |   0.001483   |  10.967960   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  413  |22.7548 |  1   |   0.001493   |  10.990911   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  414  |22.8099 |  1   |   0.001484   |  11.067482   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  415  |22.8650 |  1   |   0.001486   |  10.987234   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  416  |22.9201 |  1   |   0.001453   |  11.105183   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  417  |22.9752 |  1   |   0.001484   |  11.019325   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  418  |23.0303 |  1   |   0.001489   |  11.033711   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  419  |23.0854 |  1   |   0.001486   |  10.961752   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  420  |23.1405 |  1   |   0.001488   |  11.020402   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  421  |23.1956 |  1   |   0.001485   |  10.985927   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  422  |23.2507 |  1   |   0.001484   |  11.122986   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  423  |23.3058 |  1   |   0.001488   |  11.010117   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  424  |23.3609 |  1   |   0.001494   |  11.027276   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  425  |23.4160 |  1   |   0.001498   |  11.002853   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  426  |23.4711 |  1   |   0.001504   |  10.948009   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  427  |23.5262 |  1   |   0.001537   |  10.965587   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  428  |23.5813 |  1   |   0.001480   |  11.023513   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  429  |23.6364 |  1   |   0.001495   |  11.016430   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  430  |23.6915 |  1   |   0.001498   |  10.990407   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  431  |23.7466 |  1   |   0.001482   |  11.029547   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  432  |23.8017 |  1   |   0.001489   |  11.028503   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  433  |23.8567 |  1   |   0.001494   |  10.994521   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  434  |23.9118 |  1   |   0.001497   |  11.033860   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  435  |23.9669 |  1   |   0.001472   |  11.085127   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  436  |24.0220 |  1   |   0.001519   |  10.940756   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  437  |24.0771 |  1   |   0.001477   |  11.058848   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  438  |24.1322 |  1   |   0.001479   |  11.067911   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  439  |24.1873 |  1   |   0.001488   |  11.029004   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  440  |24.2424 |  1   |   0.001497   |  10.977903   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  441  |24.2975 |  1   |   0.001486   |  11.038936   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  442  |24.3526 |  1   |   0.001492   |  11.042946   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  443  |24.4077 |  1   |   0.001492   |  10.970813   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  444  |24.4628 |  1   |   0.001486   |  11.023437   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  445  |24.5179 |  1   |   0.001504   |  10.981979   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  446  |24.5730 |  1   |   0.001487   |  10.943550   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  447  |24.6281 |  1   |   0.001504   |  10.990585   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  448  |24.6832 |  1   |   0.001488   |  11.020756   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  449  |24.7383 |  1   |   0.001502   |  11.020719   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"|  450  |24.7934 |  1   |   0.001490   |  10.944653   |   0.000000   | 0.000000e+00 | 0.000000e+00 |\\u001b[0m\\n\",\n      \"\\u001b[34m...Finished\\u001b[0m\\n\",\n      \"\\u001b[36mFINISHED - Elapsed time = 5192.1956986 seconds\\u001b[0m\\n\",\n      \"\\u001b[36mFINISHED - CPU process time = 38238.0321676 seconds\\u001b[0m\\n\"\n     ]\n    }\n   ],\n   \"source\": [\n    \"sharpy_output = sharpy.sharpy_main.main(['', SimInfo.solvers['SHARPy']['route'] + SimInfo.solvers['SHARPy']['case'] + '.sharpy'])\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## Postprocessing\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"This reads the structural and aerodynamic information of the last time step.\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 11,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"tstep = sharpy_output.structure.timestep_info[-1]\\n\",\n    \"astep = sharpy_output.aero.timestep_info[-1]\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"Now we separate the structure into blades:\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 12,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"# Define beams\\n\",\n    \"ielem = 0\\n\",\n    \"nblades = np.max(sharpy_output.structure.beam_number) + 1\\n\",\n    \"nodes_blade = []\\n\",\n    \"first_node = 0\\n\",\n    \"for iblade in range(nblades):\\n\",\n    \"    nodes_blade.append(np.zeros((sharpy_output.structure.num_node,), dtype=bool))\\n\",\n    \"    while sharpy_output.structure.beam_number[ielem] <= iblade:\\n\",\n    \"        ielem += 1\\n\",\n    \"        if ielem == sharpy_output.structure.num_elem:\\n\",\n    \"            break\\n\",\n    \"    nodes_blade[iblade][first_node:sharpy_output.structure.connectivities[ielem-1,1]+1] = True\\n\",\n    \"    first_node = sharpy_output.structure.connectivities[ielem-1,1]+1\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"Compute the radial position of the nodes and initialise the rest of the variables.\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 13,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"r = []\\n\",\n    \"c = []\\n\",\n    \"dr = []\\n\",\n    \"forces = []\\n\",\n    \"CN_drR = []\\n\",\n    \"CTan_drR = []\\n\",\n    \"CP_drR = []\\n\",\n    \"nodes_num = []\\n\",\n    \"for iblade in range(nblades):\\n\",\n    \"    forces.append(tstep.steady_applied_forces[nodes_blade[iblade]].copy())\\n\",\n    \"\\n\",\n    \"    nodes_num.append(np.arange(0, sharpy_output.structure.num_node, 1)[nodes_blade[iblade]])\\n\",\n    \"\\n\",\n    \"    r.append(np.linalg.norm(tstep.pos[nodes_blade[iblade], :], axis=1))\\n\",\n    \"    dr.append(np.zeros(np.sum(nodes_blade[iblade])))\\n\",\n    \"    dr[iblade][0] = 0.5*(r[iblade][1]-r[iblade][0])\\n\",\n    \"    dr[iblade][-1] = 0.5 * (r[iblade][-1] - r[iblade][-2])\\n\",\n    \"    for inode in range(1,len(r[iblade]) - 1):\\n\",\n    \"        dr[iblade][inode] = 0.5*(r[iblade][inode+1] - r[iblade][inode-1])\\n\",\n    \"\\n\",\n    \"    CN_drR.append(np.zeros(len(r[iblade])))\\n\",\n    \"    c.append(np.zeros(len(r[iblade])))\\n\",\n    \"    CTan_drR.append(np.zeros(len(r[iblade])))\\n\",\n    \"    CP_drR.append(np.zeros(len(r[iblade])))\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"Transform the loads computed by SHARPy into out-of-plane and in-plane components:\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 14,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"rho = sharpy_output.settings['StaticCoupled']['aero_solver_settings']['rho']\\n\",\n    \"uinf = sharpy_output.settings['StaticCoupled']['aero_solver_settings']['velocity_field_input']['u_inf']\\n\",\n    \"R = np.max(r[0])\\n\",\n    \"Cp = 0\\n\",\n    \"Ct = 0\\n\",\n    \"\\n\",\n    \"global_force_factor = 0.5 * rho * uinf** 2 * np.pi * R**2\\n\",\n    \"global_power_factor = global_force_factor*uinf\\n\",\n    \"for iblade in range(nblades):\\n\",\n    \"    for inode in range(len(r[iblade])):\\n\",\n    \"        forces[iblade][inode, 0] *= 0. # Discard the spanwise component\\n\",\n    \"\\n\",\n    \"        node_global_index = nodes_num[iblade][inode]\\n\",\n    \"        ielem = sharpy_output.structure.node_master_elem[node_global_index, 0]\\n\",\n    \"        inode_in_elem = sharpy_output.structure.node_master_elem[node_global_index, 1]\\n\",\n    \"        CAB = algebra.crv2rotation(tstep.psi[ielem, inode_in_elem, :])\\n\",\n    \"\\n\",\n    \"        c[iblade][inode] = sharpy_output.aero.data_dict['chord'][ielem,inode_in_elem]\\n\",\n    \"\\n\",\n    \"        forces_AFoR = np.dot(CAB, forces[iblade][inode, 0:3])\\n\",\n    \"\\n\",\n    \"        CN_drR[iblade][inode] = forces_AFoR[2]/dr[iblade][inode]*R / global_force_factor\\n\",\n    \"        CTan_drR[iblade][inode] = np.linalg.norm(forces_AFoR[0:2])/dr[iblade][inode]*R  / global_force_factor\\n\",\n    \"        CP_drR[iblade][inode] = np.linalg.norm(forces_AFoR[0:2])/dr[iblade][inode]*R  * r[iblade][inode]*rotation_velocity / global_power_factor\\n\",\n    \"\\n\",\n    \"    Cp += np.sum(CP_drR[iblade]*dr[iblade]/R)\\n\",\n    \"    Ct += np.sum(CN_drR[iblade]*dr[iblade]/R)\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## Results\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"Plot of the loads along the blade:\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 15,\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"data\": {\n      \"image/svg+xml\": [\n       \"<?xml version=\\\"1.0\\\" encoding=\\\"utf-8\\\" standalone=\\\"no\\\"?>\\n\",\n       \"<!DOCTYPE svg PUBLIC \\\"-//W3C//DTD SVG 1.1//EN\\\"\\n\",\n       \"  \\\"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\\\">\\n\",\n       \"<!-- Created with matplotlib (https://matplotlib.org/) -->\\n\",\n       \"<svg height=\\\"207.83625pt\\\" version=\\\"1.1\\\" viewBox=\\\"0 0 720.58125 207.83625\\\" width=\\\"720.58125pt\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\" xmlns:xlink=\\\"http://www.w3.org/1999/xlink\\\">\\n\",\n       \" <defs>\\n\",\n       \"  <style type=\\\"text/css\\\">\\n\",\n       \"*{stroke-linecap:butt;stroke-linejoin:round;}\\n\",\n       \"  </style>\\n\",\n       \" </defs>\\n\",\n       \" <g id=\\\"figure_1\\\">\\n\",\n       \"  <g id=\\\"patch_1\\\">\\n\",\n       \"   <path d=\\\"M 0 207.83625 \\n\",\n       \"L 720.58125 207.83625 \\n\",\n       \"L 720.58125 0 \\n\",\n       \"L 0 0 \\n\",\n       \"z\\n\",\n       \"\\\" style=\\\"fill:none;\\\"/>\\n\",\n       \"  </g>\\n\",\n       \"  <g id=\\\"axes_1\\\">\\n\",\n       \"   <g id=\\\"patch_2\\\">\\n\",\n       \"    <path d=\\\"M 43.78125 170.28 \\n\",\n       \"L 348.144886 170.28 \\n\",\n       \"L 348.144886 7.2 \\n\",\n       \"L 43.78125 7.2 \\n\",\n       \"z\\n\",\n       \"\\\" style=\\\"fill:#ffffff;\\\"/>\\n\",\n       \"   </g>\\n\",\n       \"   <g id=\\\"matplotlib.axis_1\\\">\\n\",\n       \"    <g id=\\\"xtick_1\\\">\\n\",\n       \"     <g id=\\\"line2d_1\\\">\\n\",\n       \"      <path clip-path=\\\"url(#p19e32ab1d1)\\\" d=\\\"M 57.615961 170.28 \\n\",\n       \"L 57.615961 7.2 \\n\",\n       \"\\\" style=\\\"fill:none;stroke:#b0b0b0;stroke-linecap:square;stroke-width:0.8;\\\"/>\\n\",\n       \"     </g>\\n\",\n       \"     <g id=\\\"line2d_2\\\">\\n\",\n       \"      <defs>\\n\",\n       \"       <path d=\\\"M 0 0 \\n\",\n       \"L 0 3.5 \\n\",\n       \"\\\" id=\\\"m6e3d9edeb4\\\" style=\\\"stroke:#000000;stroke-width:0.8;\\\"/>\\n\",\n       \"      </defs>\\n\",\n       \"      <g>\\n\",\n       \"       <use style=\\\"stroke:#000000;stroke-width:0.8;\\\" x=\\\"57.615961\\\" xlink:href=\\\"#m6e3d9edeb4\\\" y=\\\"170.28\\\"/>\\n\",\n       \"      </g>\\n\",\n       \"     </g>\\n\",\n       \"     <g id=\\\"text_1\\\">\\n\",\n       \"      <!-- 0.0 -->\\n\",\n       \"      <defs>\\n\",\n       \"       <path d=\\\"M 31.78125 66.40625 \\n\",\n       \"Q 24.171875 66.40625 20.328125 58.90625 \\n\",\n       \"Q 16.5 51.421875 16.5 36.375 \\n\",\n       \"Q 16.5 21.390625 20.328125 13.890625 \\n\",\n       \"Q 24.171875 6.390625 31.78125 6.390625 \\n\",\n       \"Q 39.453125 6.390625 43.28125 13.890625 \\n\",\n       \"Q 47.125 21.390625 47.125 36.375 \\n\",\n       \"Q 47.125 51.421875 43.28125 58.90625 \\n\",\n       \"Q 39.453125 66.40625 31.78125 66.40625 \\n\",\n       \"z\\n\",\n       \"M 31.78125 74.21875 \\n\",\n       \"Q 44.046875 74.21875 50.515625 64.515625 \\n\",\n       \"Q 56.984375 54.828125 56.984375 36.375 \\n\",\n       \"Q 56.984375 17.96875 50.515625 8.265625 \\n\",\n       \"Q 44.046875 -1.421875 31.78125 -1.421875 \\n\",\n       \"Q 19.53125 -1.421875 13.0625 8.265625 \\n\",\n       \"Q 6.59375 17.96875 6.59375 36.375 \\n\",\n       \"Q 6.59375 54.828125 13.0625 64.515625 \\n\",\n       \"Q 19.53125 74.21875 31.78125 74.21875 \\n\",\n       \"z\\n\",\n       \"\\\" id=\\\"DejaVuSans-48\\\"/>\\n\",\n       \"       <path d=\\\"M 10.6875 12.40625 \\n\",\n       \"L 21 12.40625 \\n\",\n       \"L 21 0 \\n\",\n       \"L 10.6875 0 \\n\",\n       \"z\\n\",\n       \"\\\" id=\\\"DejaVuSans-46\\\"/>\\n\",\n       \"      </defs>\\n\",\n       \"      <g transform=\\\"translate(49.664398 184.878438)scale(0.1 -0.1)\\\">\\n\",\n       \"       <use xlink:href=\\\"#DejaVuSans-48\\\"/>\\n\",\n       \"       <use x=\\\"63.623047\\\" xlink:href=\\\"#DejaVuSans-46\\\"/>\\n\",\n       \"       <use x=\\\"95.410156\\\" xlink:href=\\\"#DejaVuSans-48\\\"/>\\n\",\n       \"      </g>\\n\",\n       \"     </g>\\n\",\n       \"    </g>\\n\",\n       \"    <g id=\\\"xtick_2\\\">\\n\",\n       \"     <g id=\\\"line2d_3\\\">\\n\",\n       \"      <path clip-path=\\\"url(#p19e32ab1d1)\\\" d=\\\"M 112.954804 170.28 \\n\",\n       \"L 112.954804 7.2 \\n\",\n       \"\\\" style=\\\"fill:none;stroke:#b0b0b0;stroke-linecap:square;stroke-width:0.8;\\\"/>\\n\",\n       \"     </g>\\n\",\n       \"     <g id=\\\"line2d_4\\\">\\n\",\n       \"      <g>\\n\",\n       \"       <use style=\\\"stroke:#000000;stroke-width:0.8;\\\" x=\\\"112.954804\\\" xlink:href=\\\"#m6e3d9edeb4\\\" y=\\\"170.28\\\"/>\\n\",\n       \"      </g>\\n\",\n       \"     </g>\\n\",\n       \"     <g id=\\\"text_2\\\">\\n\",\n       \"      <!-- 0.2 -->\\n\",\n       \"      <defs>\\n\",\n       \"       <path d=\\\"M 19.1875 8.296875 \\n\",\n       \"L 53.609375 8.296875 \\n\",\n       \"L 53.609375 0 \\n\",\n       \"L 7.328125 0 \\n\",\n       \"L 7.328125 8.296875 \\n\",\n       \"Q 12.9375 14.109375 22.625 23.890625 \\n\",\n       \"Q 32.328125 33.6875 34.8125 36.53125 \\n\",\n       \"Q 39.546875 41.84375 41.421875 45.53125 \\n\",\n       \"Q 43.3125 49.21875 43.3125 52.78125 \\n\",\n       \"Q 43.3125 58.59375 39.234375 62.25 \\n\",\n       \"Q 35.15625 65.921875 28.609375 65.921875 \\n\",\n       \"Q 23.96875 65.921875 18.8125 64.3125 \\n\",\n       \"Q 13.671875 62.703125 7.8125 59.421875 \\n\",\n       \"L 7.8125 69.390625 \\n\",\n       \"Q 13.765625 71.78125 18.9375 73 \\n\",\n       \"Q 24.125 74.21875 28.421875 74.21875 \\n\",\n       \"Q 39.75 74.21875 46.484375 68.546875 \\n\",\n       \"Q 53.21875 62.890625 53.21875 53.421875 \\n\",\n       \"Q 53.21875 48.921875 51.53125 44.890625 \\n\",\n       \"Q 49.859375 40.875 45.40625 35.40625 \\n\",\n       \"Q 44.1875 33.984375 37.640625 27.21875 \\n\",\n       \"Q 31.109375 20.453125 19.1875 8.296875 \\n\",\n       \"z\\n\",\n       \"\\\" id=\\\"DejaVuSans-50\\\"/>\\n\",\n       \"      </defs>\\n\",\n       \"      <g transform=\\\"translate(105.003241 184.878438)scale(0.1 -0.1)\\\">\\n\",\n       \"       <use xlink:href=\\\"#DejaVuSans-48\\\"/>\\n\",\n       \"       <use x=\\\"63.623047\\\" xlink:href=\\\"#DejaVuSans-46\\\"/>\\n\",\n       \"       <use x=\\\"95.410156\\\" xlink:href=\\\"#DejaVuSans-50\\\"/>\\n\",\n       \"      </g>\\n\",\n       \"     </g>\\n\",\n       \"    </g>\\n\",\n       \"    <g id=\\\"xtick_3\\\">\\n\",\n       \"     <g id=\\\"line2d_5\\\">\\n\",\n       \"      <path clip-path=\\\"url(#p19e32ab1d1)\\\" d=\\\"M 168.293647 170.28 \\n\",\n       \"L 168.293647 7.2 \\n\",\n       \"\\\" style=\\\"fill:none;stroke:#b0b0b0;stroke-linecap:square;stroke-width:0.8;\\\"/>\\n\",\n       \"     </g>\\n\",\n       \"     <g id=\\\"line2d_6\\\">\\n\",\n       \"      <g>\\n\",\n       \"       <use style=\\\"stroke:#000000;stroke-width:0.8;\\\" x=\\\"168.293647\\\" xlink:href=\\\"#m6e3d9edeb4\\\" y=\\\"170.28\\\"/>\\n\",\n       \"      </g>\\n\",\n       \"     </g>\\n\",\n       \"     <g id=\\\"text_3\\\">\\n\",\n       \"      <!-- 0.4 -->\\n\",\n       \"      <defs>\\n\",\n       \"       <path d=\\\"M 37.796875 64.3125 \\n\",\n       \"L 12.890625 25.390625 \\n\",\n       \"L 37.796875 25.390625 \\n\",\n       \"z\\n\",\n       \"M 35.203125 72.90625 \\n\",\n       \"L 47.609375 72.90625 \\n\",\n       \"L 47.609375 25.390625 \\n\",\n       \"L 58.015625 25.390625 \\n\",\n       \"L 58.015625 17.1875 \\n\",\n       \"L 47.609375 17.1875 \\n\",\n       \"L 47.609375 0 \\n\",\n       \"L 37.796875 0 \\n\",\n       \"L 37.796875 17.1875 \\n\",\n       \"L 4.890625 17.1875 \\n\",\n       \"L 4.890625 26.703125 \\n\",\n       \"z\\n\",\n       \"\\\" id=\\\"DejaVuSans-52\\\"/>\\n\",\n       \"      </defs>\\n\",\n       \"      <g transform=\\\"translate(160.342084 184.878438)scale(0.1 -0.1)\\\">\\n\",\n       \"       <use xlink:href=\\\"#DejaVuSans-48\\\"/>\\n\",\n       \"       <use x=\\\"63.623047\\\" xlink:href=\\\"#DejaVuSans-46\\\"/>\\n\",\n       \"       <use x=\\\"95.410156\\\" xlink:href=\\\"#DejaVuSans-52\\\"/>\\n\",\n       \"      </g>\\n\",\n       \"     </g>\\n\",\n       \"    </g>\\n\",\n       \"    <g id=\\\"xtick_4\\\">\\n\",\n       \"     <g id=\\\"line2d_7\\\">\\n\",\n       \"      <path clip-path=\\\"url(#p19e32ab1d1)\\\" d=\\\"M 223.63249 170.28 \\n\",\n       \"L 223.63249 7.2 \\n\",\n       \"\\\" style=\\\"fill:none;stroke:#b0b0b0;stroke-linecap:square;stroke-width:0.8;\\\"/>\\n\",\n       \"     </g>\\n\",\n       \"     <g id=\\\"line2d_8\\\">\\n\",\n       \"      <g>\\n\",\n       \"       <use style=\\\"stroke:#000000;stroke-width:0.8;\\\" x=\\\"223.63249\\\" xlink:href=\\\"#m6e3d9edeb4\\\" y=\\\"170.28\\\"/>\\n\",\n       \"      </g>\\n\",\n       \"     </g>\\n\",\n       \"     <g id=\\\"text_4\\\">\\n\",\n       \"      <!-- 0.6 -->\\n\",\n       \"      <defs>\\n\",\n       \"       <path d=\\\"M 33.015625 40.375 \\n\",\n       \"Q 26.375 40.375 22.484375 35.828125 \\n\",\n       \"Q 18.609375 31.296875 18.609375 23.390625 \\n\",\n       \"Q 18.609375 15.53125 22.484375 10.953125 \\n\",\n       \"Q 26.375 6.390625 33.015625 6.390625 \\n\",\n       \"Q 39.65625 6.390625 43.53125 10.953125 \\n\",\n       \"Q 47.40625 15.53125 47.40625 23.390625 \\n\",\n       \"Q 47.40625 31.296875 43.53125 35.828125 \\n\",\n       \"Q 39.65625 40.375 33.015625 40.375 \\n\",\n       \"z\\n\",\n       \"M 52.59375 71.296875 \\n\",\n       \"L 52.59375 62.3125 \\n\",\n       \"Q 48.875 64.0625 45.09375 64.984375 \\n\",\n       \"Q 41.3125 65.921875 37.59375 65.921875 \\n\",\n       \"Q 27.828125 65.921875 22.671875 59.328125 \\n\",\n       \"Q 17.53125 52.734375 16.796875 39.40625 \\n\",\n       \"Q 19.671875 43.65625 24.015625 45.921875 \\n\",\n       \"Q 28.375 48.1875 33.59375 48.1875 \\n\",\n       \"Q 44.578125 48.1875 50.953125 41.515625 \\n\",\n       \"Q 57.328125 34.859375 57.328125 23.390625 \\n\",\n       \"Q 57.328125 12.15625 50.6875 5.359375 \\n\",\n       \"Q 44.046875 -1.421875 33.015625 -1.421875 \\n\",\n       \"Q 20.359375 -1.421875 13.671875 8.265625 \\n\",\n       \"Q 6.984375 17.96875 6.984375 36.375 \\n\",\n       \"Q 6.984375 53.65625 15.1875 63.9375 \\n\",\n       \"Q 23.390625 74.21875 37.203125 74.21875 \\n\",\n       \"Q 40.921875 74.21875 44.703125 73.484375 \\n\",\n       \"Q 48.484375 72.75 52.59375 71.296875 \\n\",\n       \"z\\n\",\n       \"\\\" id=\\\"DejaVuSans-54\\\"/>\\n\",\n       \"      </defs>\\n\",\n       \"      <g transform=\\\"translate(215.680927 184.878438)scale(0.1 -0.1)\\\">\\n\",\n       \"       <use xlink:href=\\\"#DejaVuSans-48\\\"/>\\n\",\n       \"       <use x=\\\"63.623047\\\" xlink:href=\\\"#DejaVuSans-46\\\"/>\\n\",\n       \"       <use x=\\\"95.410156\\\" xlink:href=\\\"#DejaVuSans-54\\\"/>\\n\",\n       \"      </g>\\n\",\n       \"     </g>\\n\",\n       \"    </g>\\n\",\n       \"    <g id=\\\"xtick_5\\\">\\n\",\n       \"     <g id=\\\"line2d_9\\\">\\n\",\n       \"      <path clip-path=\\\"url(#p19e32ab1d1)\\\" d=\\\"M 278.971333 170.28 \\n\",\n       \"L 278.971333 7.2 \\n\",\n       \"\\\" style=\\\"fill:none;stroke:#b0b0b0;stroke-linecap:square;stroke-width:0.8;\\\"/>\\n\",\n       \"     </g>\\n\",\n       \"     <g id=\\\"line2d_10\\\">\\n\",\n       \"      <g>\\n\",\n       \"       <use style=\\\"stroke:#000000;stroke-width:0.8;\\\" x=\\\"278.971333\\\" xlink:href=\\\"#m6e3d9edeb4\\\" y=\\\"170.28\\\"/>\\n\",\n       \"      </g>\\n\",\n       \"     </g>\\n\",\n       \"     <g id=\\\"text_5\\\">\\n\",\n       \"      <!-- 0.8 -->\\n\",\n       \"      <defs>\\n\",\n       \"       <path d=\\\"M 31.78125 34.625 \\n\",\n       \"Q 24.75 34.625 20.71875 30.859375 \\n\",\n       \"Q 16.703125 27.09375 16.703125 20.515625 \\n\",\n       \"Q 16.703125 13.921875 20.71875 10.15625 \\n\",\n       \"Q 24.75 6.390625 31.78125 6.390625 \\n\",\n       \"Q 38.8125 6.390625 42.859375 10.171875 \\n\",\n       \"Q 46.921875 13.96875 46.921875 20.515625 \\n\",\n       \"Q 46.921875 27.09375 42.890625 30.859375 \\n\",\n       \"Q 38.875 34.625 31.78125 34.625 \\n\",\n       \"z\\n\",\n       \"M 21.921875 38.8125 \\n\",\n       \"Q 15.578125 40.375 12.03125 44.71875 \\n\",\n       \"Q 8.5 49.078125 8.5 55.328125 \\n\",\n       \"Q 8.5 64.0625 14.71875 69.140625 \\n\",\n       \"Q 20.953125 74.21875 31.78125 74.21875 \\n\",\n       \"Q 42.671875 74.21875 48.875 69.140625 \\n\",\n       \"Q 55.078125 64.0625 55.078125 55.328125 \\n\",\n       \"Q 55.078125 49.078125 51.53125 44.71875 \\n\",\n       \"Q 48 40.375 41.703125 38.8125 \\n\",\n       \"Q 48.828125 37.15625 52.796875 32.3125 \\n\",\n       \"Q 56.78125 27.484375 56.78125 20.515625 \\n\",\n       \"Q 56.78125 9.90625 50.3125 4.234375 \\n\",\n       \"Q 43.84375 -1.421875 31.78125 -1.421875 \\n\",\n       \"Q 19.734375 -1.421875 13.25 4.234375 \\n\",\n       \"Q 6.78125 9.90625 6.78125 20.515625 \\n\",\n       \"Q 6.78125 27.484375 10.78125 32.3125 \\n\",\n       \"Q 14.796875 37.15625 21.921875 38.8125 \\n\",\n       \"z\\n\",\n       \"M 18.3125 54.390625 \\n\",\n       \"Q 18.3125 48.734375 21.84375 45.5625 \\n\",\n       \"Q 25.390625 42.390625 31.78125 42.390625 \\n\",\n       \"Q 38.140625 42.390625 41.71875 45.5625 \\n\",\n       \"Q 45.3125 48.734375 45.3125 54.390625 \\n\",\n       \"Q 45.3125 60.0625 41.71875 63.234375 \\n\",\n       \"Q 38.140625 66.40625 31.78125 66.40625 \\n\",\n       \"Q 25.390625 66.40625 21.84375 63.234375 \\n\",\n       \"Q 18.3125 60.0625 18.3125 54.390625 \\n\",\n       \"z\\n\",\n       \"\\\" id=\\\"DejaVuSans-56\\\"/>\\n\",\n       \"      </defs>\\n\",\n       \"      <g transform=\\\"translate(271.01977 184.878438)scale(0.1 -0.1)\\\">\\n\",\n       \"       <use xlink:href=\\\"#DejaVuSans-48\\\"/>\\n\",\n       \"       <use x=\\\"63.623047\\\" xlink:href=\\\"#DejaVuSans-46\\\"/>\\n\",\n       \"       <use x=\\\"95.410156\\\" xlink:href=\\\"#DejaVuSans-56\\\"/>\\n\",\n       \"      </g>\\n\",\n       \"     </g>\\n\",\n       \"    </g>\\n\",\n       \"    <g id=\\\"xtick_6\\\">\\n\",\n       \"     <g id=\\\"line2d_11\\\">\\n\",\n       \"      <path clip-path=\\\"url(#p19e32ab1d1)\\\" d=\\\"M 334.310176 170.28 \\n\",\n       \"L 334.310176 7.2 \\n\",\n       \"\\\" style=\\\"fill:none;stroke:#b0b0b0;stroke-linecap:square;stroke-width:0.8;\\\"/>\\n\",\n       \"     </g>\\n\",\n       \"     <g id=\\\"line2d_12\\\">\\n\",\n       \"      <g>\\n\",\n       \"       <use style=\\\"stroke:#000000;stroke-width:0.8;\\\" x=\\\"334.310176\\\" xlink:href=\\\"#m6e3d9edeb4\\\" y=\\\"170.28\\\"/>\\n\",\n       \"      </g>\\n\",\n       \"     </g>\\n\",\n       \"     <g id=\\\"text_6\\\">\\n\",\n       \"      <!-- 1.0 -->\\n\",\n       \"      <defs>\\n\",\n       \"       <path d=\\\"M 12.40625 8.296875 \\n\",\n       \"L 28.515625 8.296875 \\n\",\n       \"L 28.515625 63.921875 \\n\",\n       \"L 10.984375 60.40625 \\n\",\n       \"L 10.984375 69.390625 \\n\",\n       \"L 28.421875 72.90625 \\n\",\n       \"L 38.28125 72.90625 \\n\",\n       \"L 38.28125 8.296875 \\n\",\n       \"L 54.390625 8.296875 \\n\",\n       \"L 54.390625 0 \\n\",\n       \"L 12.40625 0 \\n\",\n       \"z\\n\",\n       \"\\\" id=\\\"DejaVuSans-49\\\"/>\\n\",\n       \"      </defs>\\n\",\n       \"      <g transform=\\\"translate(326.358613 184.878438)scale(0.1 -0.1)\\\">\\n\",\n       \"       <use xlink:href=\\\"#DejaVuSans-49\\\"/>\\n\",\n       \"       <use x=\\\"63.623047\\\" xlink:href=\\\"#DejaVuSans-46\\\"/>\\n\",\n       \"       <use x=\\\"95.410156\\\" xlink:href=\\\"#DejaVuSans-48\\\"/>\\n\",\n       \"      </g>\\n\",\n       \"     </g>\\n\",\n       \"    </g>\\n\",\n       \"    <g id=\\\"text_7\\\">\\n\",\n       \"     <!-- r/R [-] -->\\n\",\n       \"     <defs>\\n\",\n       \"      <path d=\\\"M 41.109375 46.296875 \\n\",\n       \"Q 39.59375 47.171875 37.8125 47.578125 \\n\",\n       \"Q 36.03125 48 33.890625 48 \\n\",\n       \"Q 26.265625 48 22.1875 43.046875 \\n\",\n       \"Q 18.109375 38.09375 18.109375 28.8125 \\n\",\n       \"L 18.109375 0 \\n\",\n       \"L 9.078125 0 \\n\",\n       \"L 9.078125 54.6875 \\n\",\n       \"L 18.109375 54.6875 \\n\",\n       \"L 18.109375 46.1875 \\n\",\n       \"Q 20.953125 51.171875 25.484375 53.578125 \\n\",\n       \"Q 30.03125 56 36.53125 56 \\n\",\n       \"Q 37.453125 56 38.578125 55.875 \\n\",\n       \"Q 39.703125 55.765625 41.0625 55.515625 \\n\",\n       \"z\\n\",\n       \"\\\" id=\\\"DejaVuSans-114\\\"/>\\n\",\n       \"      <path d=\\\"M 25.390625 72.90625 \\n\",\n       \"L 33.6875 72.90625 \\n\",\n       \"L 8.296875 -9.28125 \\n\",\n       \"L 0 -9.28125 \\n\",\n       \"z\\n\",\n       \"\\\" id=\\\"DejaVuSans-47\\\"/>\\n\",\n       \"      <path d=\\\"M 44.390625 34.1875 \\n\",\n       \"Q 47.5625 33.109375 50.5625 29.59375 \\n\",\n       \"Q 53.5625 26.078125 56.59375 19.921875 \\n\",\n       \"L 66.609375 0 \\n\",\n       \"L 56 0 \\n\",\n       \"L 46.6875 18.703125 \\n\",\n       \"Q 43.0625 26.03125 39.671875 28.421875 \\n\",\n       \"Q 36.28125 30.8125 30.421875 30.8125 \\n\",\n       \"L 19.671875 30.8125 \\n\",\n       \"L 19.671875 0 \\n\",\n       \"L 9.8125 0 \\n\",\n       \"L 9.8125 72.90625 \\n\",\n       \"L 32.078125 72.90625 \\n\",\n       \"Q 44.578125 72.90625 50.734375 67.671875 \\n\",\n       \"Q 56.890625 62.453125 56.890625 51.90625 \\n\",\n       \"Q 56.890625 45.015625 53.6875 40.46875 \\n\",\n       \"Q 50.484375 35.9375 44.390625 34.1875 \\n\",\n       \"z\\n\",\n       \"M 19.671875 64.796875 \\n\",\n       \"L 19.671875 38.921875 \\n\",\n       \"L 32.078125 38.921875 \\n\",\n       \"Q 39.203125 38.921875 42.84375 42.21875 \\n\",\n       \"Q 46.484375 45.515625 46.484375 51.90625 \\n\",\n       \"Q 46.484375 58.296875 42.84375 61.546875 \\n\",\n       \"Q 39.203125 64.796875 32.078125 64.796875 \\n\",\n       \"z\\n\",\n       \"\\\" id=\\\"DejaVuSans-82\\\"/>\\n\",\n       \"      <path id=\\\"DejaVuSans-32\\\"/>\\n\",\n       \"      <path d=\\\"M 8.59375 75.984375 \\n\",\n       \"L 29.296875 75.984375 \\n\",\n       \"L 29.296875 69 \\n\",\n       \"L 17.578125 69 \\n\",\n       \"L 17.578125 -6.203125 \\n\",\n       \"L 29.296875 -6.203125 \\n\",\n       \"L 29.296875 -13.1875 \\n\",\n       \"L 8.59375 -13.1875 \\n\",\n       \"z\\n\",\n       \"\\\" id=\\\"DejaVuSans-91\\\"/>\\n\",\n       \"      <path d=\\\"M 4.890625 31.390625 \\n\",\n       \"L 31.203125 31.390625 \\n\",\n       \"L 31.203125 23.390625 \\n\",\n       \"L 4.890625 23.390625 \\n\",\n       \"z\\n\",\n       \"\\\" id=\\\"DejaVuSans-45\\\"/>\\n\",\n       \"      <path d=\\\"M 30.421875 75.984375 \\n\",\n       \"L 30.421875 -13.1875 \\n\",\n       \"L 9.71875 -13.1875 \\n\",\n       \"L 9.71875 -6.203125 \\n\",\n       \"L 21.390625 -6.203125 \\n\",\n       \"L 21.390625 69 \\n\",\n       \"L 9.71875 69 \\n\",\n       \"L 9.71875 75.984375 \\n\",\n       \"z\\n\",\n       \"\\\" id=\\\"DejaVuSans-93\\\"/>\\n\",\n       \"     </defs>\\n\",\n       \"     <g transform=\\\"translate(181.454474 198.556563)scale(0.1 -0.1)\\\">\\n\",\n       \"      <use xlink:href=\\\"#DejaVuSans-114\\\"/>\\n\",\n       \"      <use x=\\\"41.113281\\\" xlink:href=\\\"#DejaVuSans-47\\\"/>\\n\",\n       \"      <use x=\\\"74.804688\\\" xlink:href=\\\"#DejaVuSans-82\\\"/>\\n\",\n       \"      <use x=\\\"144.287109\\\" xlink:href=\\\"#DejaVuSans-32\\\"/>\\n\",\n       \"      <use x=\\\"176.074219\\\" xlink:href=\\\"#DejaVuSans-91\\\"/>\\n\",\n       \"      <use x=\\\"215.087891\\\" xlink:href=\\\"#DejaVuSans-45\\\"/>\\n\",\n       \"      <use x=\\\"251.171875\\\" xlink:href=\\\"#DejaVuSans-93\\\"/>\\n\",\n       \"     </g>\\n\",\n       \"    </g>\\n\",\n       \"   </g>\\n\",\n       \"   <g id=\\\"matplotlib.axis_2\\\">\\n\",\n       \"    <g id=\\\"ytick_1\\\">\\n\",\n       \"     <g id=\\\"line2d_13\\\">\\n\",\n       \"      <path clip-path=\\\"url(#p19e32ab1d1)\\\" d=\\\"M 43.78125 162.867273 \\n\",\n       \"L 348.144886 162.867273 \\n\",\n       \"\\\" style=\\\"fill:none;stroke:#b0b0b0;stroke-linecap:square;stroke-width:0.8;\\\"/>\\n\",\n       \"     </g>\\n\",\n       \"     <g id=\\\"line2d_14\\\">\\n\",\n       \"      <defs>\\n\",\n       \"       <path d=\\\"M 0 0 \\n\",\n       \"L -3.5 0 \\n\",\n       \"\\\" id=\\\"m60ac5f1668\\\" style=\\\"stroke:#000000;stroke-width:0.8;\\\"/>\\n\",\n       \"      </defs>\\n\",\n       \"      <g>\\n\",\n       \"       <use style=\\\"stroke:#000000;stroke-width:0.8;\\\" x=\\\"43.78125\\\" xlink:href=\\\"#m60ac5f1668\\\" y=\\\"162.867273\\\"/>\\n\",\n       \"      </g>\\n\",\n       \"     </g>\\n\",\n       \"     <g id=\\\"text_8\\\">\\n\",\n       \"      <!-- 0.0 -->\\n\",\n       \"      <g transform=\\\"translate(20.878125 166.666491)scale(0.1 -0.1)\\\">\\n\",\n       \"       <use xlink:href=\\\"#DejaVuSans-48\\\"/>\\n\",\n       \"       <use x=\\\"63.623047\\\" xlink:href=\\\"#DejaVuSans-46\\\"/>\\n\",\n       \"       <use x=\\\"95.410156\\\" xlink:href=\\\"#DejaVuSans-48\\\"/>\\n\",\n       \"      </g>\\n\",\n       \"     </g>\\n\",\n       \"    </g>\\n\",\n       \"    <g id=\\\"ytick_2\\\">\\n\",\n       \"     <g id=\\\"line2d_15\\\">\\n\",\n       \"      <path clip-path=\\\"url(#p19e32ab1d1)\\\" d=\\\"M 43.78125 129.747022 \\n\",\n       \"L 348.144886 129.747022 \\n\",\n       \"\\\" style=\\\"fill:none;stroke:#b0b0b0;stroke-linecap:square;stroke-width:0.8;\\\"/>\\n\",\n       \"     </g>\\n\",\n       \"     <g id=\\\"line2d_16\\\">\\n\",\n       \"      <g>\\n\",\n       \"       <use style=\\\"stroke:#000000;stroke-width:0.8;\\\" x=\\\"43.78125\\\" xlink:href=\\\"#m60ac5f1668\\\" y=\\\"129.747022\\\"/>\\n\",\n       \"      </g>\\n\",\n       \"     </g>\\n\",\n       \"     <g id=\\\"text_9\\\">\\n\",\n       \"      <!-- 0.1 -->\\n\",\n       \"      <g transform=\\\"translate(20.878125 133.546241)scale(0.1 -0.1)\\\">\\n\",\n       \"       <use xlink:href=\\\"#DejaVuSans-48\\\"/>\\n\",\n       \"       <use x=\\\"63.623047\\\" xlink:href=\\\"#DejaVuSans-46\\\"/>\\n\",\n       \"       <use x=\\\"95.410156\\\" xlink:href=\\\"#DejaVuSans-49\\\"/>\\n\",\n       \"      </g>\\n\",\n       \"     </g>\\n\",\n       \"    </g>\\n\",\n       \"    <g id=\\\"ytick_3\\\">\\n\",\n       \"     <g id=\\\"line2d_17\\\">\\n\",\n       \"      <path clip-path=\\\"url(#p19e32ab1d1)\\\" d=\\\"M 43.78125 96.626771 \\n\",\n       \"L 348.144886 96.626771 \\n\",\n       \"\\\" style=\\\"fill:none;stroke:#b0b0b0;stroke-linecap:square;stroke-width:0.8;\\\"/>\\n\",\n       \"     </g>\\n\",\n       \"     <g id=\\\"line2d_18\\\">\\n\",\n       \"      <g>\\n\",\n       \"       <use style=\\\"stroke:#000000;stroke-width:0.8;\\\" x=\\\"43.78125\\\" xlink:href=\\\"#m60ac5f1668\\\" y=\\\"96.626771\\\"/>\\n\",\n       \"      </g>\\n\",\n       \"     </g>\\n\",\n       \"     <g id=\\\"text_10\\\">\\n\",\n       \"      <!-- 0.2 -->\\n\",\n       \"      <g transform=\\\"translate(20.878125 100.42599)scale(0.1 -0.1)\\\">\\n\",\n       \"       <use xlink:href=\\\"#DejaVuSans-48\\\"/>\\n\",\n       \"       <use x=\\\"63.623047\\\" xlink:href=\\\"#DejaVuSans-46\\\"/>\\n\",\n       \"       <use x=\\\"95.410156\\\" xlink:href=\\\"#DejaVuSans-50\\\"/>\\n\",\n       \"      </g>\\n\",\n       \"     </g>\\n\",\n       \"    </g>\\n\",\n       \"    <g id=\\\"ytick_4\\\">\\n\",\n       \"     <g id=\\\"line2d_19\\\">\\n\",\n       \"      <path clip-path=\\\"url(#p19e32ab1d1)\\\" d=\\\"M 43.78125 63.506521 \\n\",\n       \"L 348.144886 63.506521 \\n\",\n       \"\\\" style=\\\"fill:none;stroke:#b0b0b0;stroke-linecap:square;stroke-width:0.8;\\\"/>\\n\",\n       \"     </g>\\n\",\n       \"     <g id=\\\"line2d_20\\\">\\n\",\n       \"      <g>\\n\",\n       \"       <use style=\\\"stroke:#000000;stroke-width:0.8;\\\" x=\\\"43.78125\\\" xlink:href=\\\"#m60ac5f1668\\\" y=\\\"63.506521\\\"/>\\n\",\n       \"      </g>\\n\",\n       \"     </g>\\n\",\n       \"     <g id=\\\"text_11\\\">\\n\",\n       \"      <!-- 0.3 -->\\n\",\n       \"      <defs>\\n\",\n       \"       <path d=\\\"M 40.578125 39.3125 \\n\",\n       \"Q 47.65625 37.796875 51.625 33 \\n\",\n       \"Q 55.609375 28.21875 55.609375 21.1875 \\n\",\n       \"Q 55.609375 10.40625 48.1875 4.484375 \\n\",\n       \"Q 40.765625 -1.421875 27.09375 -1.421875 \\n\",\n       \"Q 22.515625 -1.421875 17.65625 -0.515625 \\n\",\n       \"Q 12.796875 0.390625 7.625 2.203125 \\n\",\n       \"L 7.625 11.71875 \\n\",\n       \"Q 11.71875 9.328125 16.59375 8.109375 \\n\",\n       \"Q 21.484375 6.890625 26.8125 6.890625 \\n\",\n       \"Q 36.078125 6.890625 40.9375 10.546875 \\n\",\n       \"Q 45.796875 14.203125 45.796875 21.1875 \\n\",\n       \"Q 45.796875 27.640625 41.28125 31.265625 \\n\",\n       \"Q 36.765625 34.90625 28.71875 34.90625 \\n\",\n       \"L 20.21875 34.90625 \\n\",\n       \"L 20.21875 43.015625 \\n\",\n       \"L 29.109375 43.015625 \\n\",\n       \"Q 36.375 43.015625 40.234375 45.921875 \\n\",\n       \"Q 44.09375 48.828125 44.09375 54.296875 \\n\",\n       \"Q 44.09375 59.90625 40.109375 62.90625 \\n\",\n       \"Q 36.140625 65.921875 28.71875 65.921875 \\n\",\n       \"Q 24.65625 65.921875 20.015625 65.03125 \\n\",\n       \"Q 15.375 64.15625 9.8125 62.3125 \\n\",\n       \"L 9.8125 71.09375 \\n\",\n       \"Q 15.4375 72.65625 20.34375 73.4375 \\n\",\n       \"Q 25.25 74.21875 29.59375 74.21875 \\n\",\n       \"Q 40.828125 74.21875 47.359375 69.109375 \\n\",\n       \"Q 53.90625 64.015625 53.90625 55.328125 \\n\",\n       \"Q 53.90625 49.265625 50.4375 45.09375 \\n\",\n       \"Q 46.96875 40.921875 40.578125 39.3125 \\n\",\n       \"z\\n\",\n       \"\\\" id=\\\"DejaVuSans-51\\\"/>\\n\",\n       \"      </defs>\\n\",\n       \"      <g transform=\\\"translate(20.878125 67.305739)scale(0.1 -0.1)\\\">\\n\",\n       \"       <use xlink:href=\\\"#DejaVuSans-48\\\"/>\\n\",\n       \"       <use x=\\\"63.623047\\\" xlink:href=\\\"#DejaVuSans-46\\\"/>\\n\",\n       \"       <use x=\\\"95.410156\\\" xlink:href=\\\"#DejaVuSans-51\\\"/>\\n\",\n       \"      </g>\\n\",\n       \"     </g>\\n\",\n       \"    </g>\\n\",\n       \"    <g id=\\\"ytick_5\\\">\\n\",\n       \"     <g id=\\\"line2d_21\\\">\\n\",\n       \"      <path clip-path=\\\"url(#p19e32ab1d1)\\\" d=\\\"M 43.78125 30.38627 \\n\",\n       \"L 348.144886 30.38627 \\n\",\n       \"\\\" style=\\\"fill:none;stroke:#b0b0b0;stroke-linecap:square;stroke-width:0.8;\\\"/>\\n\",\n       \"     </g>\\n\",\n       \"     <g id=\\\"line2d_22\\\">\\n\",\n       \"      <g>\\n\",\n       \"       <use style=\\\"stroke:#000000;stroke-width:0.8;\\\" x=\\\"43.78125\\\" xlink:href=\\\"#m60ac5f1668\\\" y=\\\"30.38627\\\"/>\\n\",\n       \"      </g>\\n\",\n       \"     </g>\\n\",\n       \"     <g id=\\\"text_12\\\">\\n\",\n       \"      <!-- 0.4 -->\\n\",\n       \"      <g transform=\\\"translate(20.878125 34.185489)scale(0.1 -0.1)\\\">\\n\",\n       \"       <use xlink:href=\\\"#DejaVuSans-48\\\"/>\\n\",\n       \"       <use x=\\\"63.623047\\\" xlink:href=\\\"#DejaVuSans-46\\\"/>\\n\",\n       \"       <use x=\\\"95.410156\\\" xlink:href=\\\"#DejaVuSans-52\\\"/>\\n\",\n       \"      </g>\\n\",\n       \"     </g>\\n\",\n       \"    </g>\\n\",\n       \"    <g id=\\\"text_13\\\">\\n\",\n       \"     <!-- CN/d(r/R) [-] -->\\n\",\n       \"     <defs>\\n\",\n       \"      <path d=\\\"M 64.40625 67.28125 \\n\",\n       \"L 64.40625 56.890625 \\n\",\n       \"Q 59.421875 61.53125 53.78125 63.8125 \\n\",\n       \"Q 48.140625 66.109375 41.796875 66.109375 \\n\",\n       \"Q 29.296875 66.109375 22.65625 58.46875 \\n\",\n       \"Q 16.015625 50.828125 16.015625 36.375 \\n\",\n       \"Q 16.015625 21.96875 22.65625 14.328125 \\n\",\n       \"Q 29.296875 6.6875 41.796875 6.6875 \\n\",\n       \"Q 48.140625 6.6875 53.78125 8.984375 \\n\",\n       \"Q 59.421875 11.28125 64.40625 15.921875 \\n\",\n       \"L 64.40625 5.609375 \\n\",\n       \"Q 59.234375 2.09375 53.4375 0.328125 \\n\",\n       \"Q 47.65625 -1.421875 41.21875 -1.421875 \\n\",\n       \"Q 24.65625 -1.421875 15.125 8.703125 \\n\",\n       \"Q 5.609375 18.84375 5.609375 36.375 \\n\",\n       \"Q 5.609375 53.953125 15.125 64.078125 \\n\",\n       \"Q 24.65625 74.21875 41.21875 74.21875 \\n\",\n       \"Q 47.75 74.21875 53.53125 72.484375 \\n\",\n       \"Q 59.328125 70.75 64.40625 67.28125 \\n\",\n       \"z\\n\",\n       \"\\\" id=\\\"DejaVuSans-67\\\"/>\\n\",\n       \"      <path d=\\\"M 9.8125 72.90625 \\n\",\n       \"L 23.09375 72.90625 \\n\",\n       \"L 55.421875 11.921875 \\n\",\n       \"L 55.421875 72.90625 \\n\",\n       \"L 64.984375 72.90625 \\n\",\n       \"L 64.984375 0 \\n\",\n       \"L 51.703125 0 \\n\",\n       \"L 19.390625 60.984375 \\n\",\n       \"L 19.390625 0 \\n\",\n       \"L 9.8125 0 \\n\",\n       \"z\\n\",\n       \"\\\" id=\\\"DejaVuSans-78\\\"/>\\n\",\n       \"      <path d=\\\"M 45.40625 46.390625 \\n\",\n       \"L 45.40625 75.984375 \\n\",\n       \"L 54.390625 75.984375 \\n\",\n       \"L 54.390625 0 \\n\",\n       \"L 45.40625 0 \\n\",\n       \"L 45.40625 8.203125 \\n\",\n       \"Q 42.578125 3.328125 38.25 0.953125 \\n\",\n       \"Q 33.9375 -1.421875 27.875 -1.421875 \\n\",\n       \"Q 17.96875 -1.421875 11.734375 6.484375 \\n\",\n       \"Q 5.515625 14.40625 5.515625 27.296875 \\n\",\n       \"Q 5.515625 40.1875 11.734375 48.09375 \\n\",\n       \"Q 17.96875 56 27.875 56 \\n\",\n       \"Q 33.9375 56 38.25 53.625 \\n\",\n       \"Q 42.578125 51.265625 45.40625 46.390625 \\n\",\n       \"z\\n\",\n       \"M 14.796875 27.296875 \\n\",\n       \"Q 14.796875 17.390625 18.875 11.75 \\n\",\n       \"Q 22.953125 6.109375 30.078125 6.109375 \\n\",\n       \"Q 37.203125 6.109375 41.296875 11.75 \\n\",\n       \"Q 45.40625 17.390625 45.40625 27.296875 \\n\",\n       \"Q 45.40625 37.203125 41.296875 42.84375 \\n\",\n       \"Q 37.203125 48.484375 30.078125 48.484375 \\n\",\n       \"Q 22.953125 48.484375 18.875 42.84375 \\n\",\n       \"Q 14.796875 37.203125 14.796875 27.296875 \\n\",\n       \"z\\n\",\n       \"\\\" id=\\\"DejaVuSans-100\\\"/>\\n\",\n       \"      <path d=\\\"M 31 75.875 \\n\",\n       \"Q 24.46875 64.65625 21.28125 53.65625 \\n\",\n       \"Q 18.109375 42.671875 18.109375 31.390625 \\n\",\n       \"Q 18.109375 20.125 21.3125 9.0625 \\n\",\n       \"Q 24.515625 -2 31 -13.1875 \\n\",\n       \"L 23.1875 -13.1875 \\n\",\n       \"Q 15.875 -1.703125 12.234375 9.375 \\n\",\n       \"Q 8.59375 20.453125 8.59375 31.390625 \\n\",\n       \"Q 8.59375 42.28125 12.203125 53.3125 \\n\",\n       \"Q 15.828125 64.359375 23.1875 75.875 \\n\",\n       \"z\\n\",\n       \"\\\" id=\\\"DejaVuSans-40\\\"/>\\n\",\n       \"      <path d=\\\"M 8.015625 75.875 \\n\",\n       \"L 15.828125 75.875 \\n\",\n       \"Q 23.140625 64.359375 26.78125 53.3125 \\n\",\n       \"Q 30.421875 42.28125 30.421875 31.390625 \\n\",\n       \"Q 30.421875 20.453125 26.78125 9.375 \\n\",\n       \"Q 23.140625 -1.703125 15.828125 -13.1875 \\n\",\n       \"L 8.015625 -13.1875 \\n\",\n       \"Q 14.5 -2 17.703125 9.0625 \\n\",\n       \"Q 20.90625 20.125 20.90625 31.390625 \\n\",\n       \"Q 20.90625 42.671875 17.703125 53.65625 \\n\",\n       \"Q 14.5 64.65625 8.015625 75.875 \\n\",\n       \"z\\n\",\n       \"\\\" id=\\\"DejaVuSans-41\\\"/>\\n\",\n       \"     </defs>\\n\",\n       \"     <g transform=\\\"translate(14.798438 119.240781)rotate(-90)scale(0.1 -0.1)\\\">\\n\",\n       \"      <use xlink:href=\\\"#DejaVuSans-67\\\"/>\\n\",\n       \"      <use x=\\\"69.824219\\\" xlink:href=\\\"#DejaVuSans-78\\\"/>\\n\",\n       \"      <use x=\\\"144.628906\\\" xlink:href=\\\"#DejaVuSans-47\\\"/>\\n\",\n       \"      <use x=\\\"178.320312\\\" xlink:href=\\\"#DejaVuSans-100\\\"/>\\n\",\n       \"      <use x=\\\"241.796875\\\" xlink:href=\\\"#DejaVuSans-40\\\"/>\\n\",\n       \"      <use x=\\\"280.810547\\\" xlink:href=\\\"#DejaVuSans-114\\\"/>\\n\",\n       \"      <use x=\\\"321.923828\\\" xlink:href=\\\"#DejaVuSans-47\\\"/>\\n\",\n       \"      <use x=\\\"355.615234\\\" xlink:href=\\\"#DejaVuSans-82\\\"/>\\n\",\n       \"      <use x=\\\"425.097656\\\" xlink:href=\\\"#DejaVuSans-41\\\"/>\\n\",\n       \"      <use x=\\\"464.111328\\\" xlink:href=\\\"#DejaVuSans-32\\\"/>\\n\",\n       \"      <use x=\\\"495.898438\\\" xlink:href=\\\"#DejaVuSans-91\\\"/>\\n\",\n       \"      <use x=\\\"534.912109\\\" xlink:href=\\\"#DejaVuSans-45\\\"/>\\n\",\n       \"      <use x=\\\"570.996094\\\" xlink:href=\\\"#DejaVuSans-93\\\"/>\\n\",\n       \"     </g>\\n\",\n       \"    </g>\\n\",\n       \"   </g>\\n\",\n       \"   <g id=\\\"line2d_23\\\">\\n\",\n       \"    <path clip-path=\\\"url(#p19e32ab1d1)\\\" d=\\\"M 57.615961 162.867273 \\n\",\n       \"L 73.130329 162.867273 \\n\",\n       \"L 88.595884 151.198309 \\n\",\n       \"L 103.963964 136.634632 \\n\",\n       \"L 119.186216 128.573349 \\n\",\n       \"L 126.789514 118.267999 \\n\",\n       \"L 149.002266 112.315897 \\n\",\n       \"L 163.502253 100.781432 \\n\",\n       \"L 182.128357 93.633305 \\n\",\n       \"L 191.458178 83.798905 \\n\",\n       \"L 204.826158 76.740354 \\n\",\n       \"L 217.730961 68.28959 \\n\",\n       \"L 230.131982 59.797073 \\n\",\n       \"L 241.990204 51.604997 \\n\",\n       \"L 253.268316 43.766327 \\n\",\n       \"L 265.136622 37.507221 \\n\",\n       \"L 273.944209 31.387125 \\n\",\n       \"L 283.276935 26.902704 \\n\",\n       \"L 291.899648 23.217086 \\n\",\n       \"L 299.785218 21.080717 \\n\",\n       \"L 306.908834 21.163383 \\n\",\n       \"L 313.248083 24.028153 \\n\",\n       \"L 317.708523 32.386809 \\n\",\n       \"L 323.496225 42.364374 \\n\",\n       \"L 327.372874 57.246164 \\n\",\n       \"L 330.400768 71.982645 \\n\",\n       \"L 332.57038 89.376094 \\n\",\n       \"L 333.874884 109.07552 \\n\",\n       \"L 334.310176 133.385298 \\n\",\n       \"\\\" style=\\\"fill:none;stroke:#1f77b4;stroke-linecap:square;stroke-width:1.5;\\\"/>\\n\",\n       \"   </g>\\n\",\n       \"   <g id=\\\"line2d_24\\\">\\n\",\n       \"    <path clip-path=\\\"url(#p19e32ab1d1)\\\" d=\\\"M 113.392966 134.313 \\n\",\n       \"L 144.141866 114.220659 \\n\",\n       \"L 170.490732 98.795658 \\n\",\n       \"L 223.193874 65.403284 \\n\",\n       \"L 249.545429 43.622354 \\n\",\n       \"L 293.4647 17.970932 \\n\",\n       \"L 306.640477 14.612727 \\n\",\n       \"L 322.012244 34.230749 \\n\",\n       \"L 330.796087 64.226962 \\n\",\n       \"L 334.310176 162.867273 \\n\",\n       \"\\\" style=\\\"fill:none;stroke:#ff7f0e;stroke-linecap:square;stroke-width:1.5;\\\"/>\\n\",\n       \"   </g>\\n\",\n       \"   <g id=\\\"patch_3\\\">\\n\",\n       \"    <path d=\\\"M 43.78125 170.28 \\n\",\n       \"L 43.78125 7.2 \\n\",\n       \"\\\" style=\\\"fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;stroke-width:0.8;\\\"/>\\n\",\n       \"   </g>\\n\",\n       \"   <g id=\\\"patch_4\\\">\\n\",\n       \"    <path d=\\\"M 348.144886 170.28 \\n\",\n       \"L 348.144886 7.2 \\n\",\n       \"\\\" style=\\\"fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;stroke-width:0.8;\\\"/>\\n\",\n       \"   </g>\\n\",\n       \"   <g id=\\\"patch_5\\\">\\n\",\n       \"    <path d=\\\"M 43.78125 170.28 \\n\",\n       \"L 348.144886 170.28 \\n\",\n       \"\\\" style=\\\"fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;stroke-width:0.8;\\\"/>\\n\",\n       \"   </g>\\n\",\n       \"   <g id=\\\"patch_6\\\">\\n\",\n       \"    <path d=\\\"M 43.78125 7.2 \\n\",\n       \"L 348.144886 7.2 \\n\",\n       \"\\\" style=\\\"fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;stroke-width:0.8;\\\"/>\\n\",\n       \"   </g>\\n\",\n       \"   <g id=\\\"legend_1\\\">\\n\",\n       \"    <g id=\\\"patch_7\\\">\\n\",\n       \"     <path d=\\\"M 50.78125 44.55625 \\n\",\n       \"L 134.526563 44.55625 \\n\",\n       \"Q 136.526563 44.55625 136.526563 42.55625 \\n\",\n       \"L 136.526563 14.2 \\n\",\n       \"Q 136.526563 12.2 134.526563 12.2 \\n\",\n       \"L 50.78125 12.2 \\n\",\n       \"Q 48.78125 12.2 48.78125 14.2 \\n\",\n       \"L 48.78125 42.55625 \\n\",\n       \"Q 48.78125 44.55625 50.78125 44.55625 \\n\",\n       \"z\\n\",\n       \"\\\" style=\\\"fill:#ffffff;opacity:0.8;stroke:#cccccc;stroke-linejoin:miter;\\\"/>\\n\",\n       \"    </g>\\n\",\n       \"    <g id=\\\"line2d_25\\\">\\n\",\n       \"     <path d=\\\"M 52.78125 20.298437 \\n\",\n       \"L 72.78125 20.298437 \\n\",\n       \"\\\" style=\\\"fill:none;stroke:#1f77b4;stroke-linecap:square;stroke-width:1.5;\\\"/>\\n\",\n       \"    </g>\\n\",\n       \"    <g id=\\\"line2d_26\\\"/>\\n\",\n       \"    <g id=\\\"text_14\\\">\\n\",\n       \"     <!-- SHARPy -->\\n\",\n       \"     <defs>\\n\",\n       \"      <path d=\\\"M 53.515625 70.515625 \\n\",\n       \"L 53.515625 60.890625 \\n\",\n       \"Q 47.90625 63.578125 42.921875 64.890625 \\n\",\n       \"Q 37.9375 66.21875 33.296875 66.21875 \\n\",\n       \"Q 25.25 66.21875 20.875 63.09375 \\n\",\n       \"Q 16.5 59.96875 16.5 54.203125 \\n\",\n       \"Q 16.5 49.359375 19.40625 46.890625 \\n\",\n       \"Q 22.3125 44.4375 30.421875 42.921875 \\n\",\n       \"L 36.375 41.703125 \\n\",\n       \"Q 47.40625 39.59375 52.65625 34.296875 \\n\",\n       \"Q 57.90625 29 57.90625 20.125 \\n\",\n       \"Q 57.90625 9.515625 50.796875 4.046875 \\n\",\n       \"Q 43.703125 -1.421875 29.984375 -1.421875 \\n\",\n       \"Q 24.8125 -1.421875 18.96875 -0.25 \\n\",\n       \"Q 13.140625 0.921875 6.890625 3.21875 \\n\",\n       \"L 6.890625 13.375 \\n\",\n       \"Q 12.890625 10.015625 18.65625 8.296875 \\n\",\n       \"Q 24.421875 6.59375 29.984375 6.59375 \\n\",\n       \"Q 38.421875 6.59375 43.015625 9.90625 \\n\",\n       \"Q 47.609375 13.234375 47.609375 19.390625 \\n\",\n       \"Q 47.609375 24.75 44.3125 27.78125 \\n\",\n       \"Q 41.015625 30.8125 33.5 32.328125 \\n\",\n       \"L 27.484375 33.5 \\n\",\n       \"Q 16.453125 35.6875 11.515625 40.375 \\n\",\n       \"Q 6.59375 45.0625 6.59375 53.421875 \\n\",\n       \"Q 6.59375 63.09375 13.40625 68.65625 \\n\",\n       \"Q 20.21875 74.21875 32.171875 74.21875 \\n\",\n       \"Q 37.3125 74.21875 42.625 73.28125 \\n\",\n       \"Q 47.953125 72.359375 53.515625 70.515625 \\n\",\n       \"z\\n\",\n       \"\\\" id=\\\"DejaVuSans-83\\\"/>\\n\",\n       \"      <path d=\\\"M 9.8125 72.90625 \\n\",\n       \"L 19.671875 72.90625 \\n\",\n       \"L 19.671875 43.015625 \\n\",\n       \"L 55.515625 43.015625 \\n\",\n       \"L 55.515625 72.90625 \\n\",\n       \"L 65.375 72.90625 \\n\",\n       \"L 65.375 0 \\n\",\n       \"L 55.515625 0 \\n\",\n       \"L 55.515625 34.71875 \\n\",\n       \"L 19.671875 34.71875 \\n\",\n       \"L 19.671875 0 \\n\",\n       \"L 9.8125 0 \\n\",\n       \"z\\n\",\n       \"\\\" id=\\\"DejaVuSans-72\\\"/>\\n\",\n       \"      <path d=\\\"M 34.1875 63.1875 \\n\",\n       \"L 20.796875 26.90625 \\n\",\n       \"L 47.609375 26.90625 \\n\",\n       \"z\\n\",\n       \"M 28.609375 72.90625 \\n\",\n       \"L 39.796875 72.90625 \\n\",\n       \"L 67.578125 0 \\n\",\n       \"L 57.328125 0 \\n\",\n       \"L 50.6875 18.703125 \\n\",\n       \"L 17.828125 18.703125 \\n\",\n       \"L 11.1875 0 \\n\",\n       \"L 0.78125 0 \\n\",\n       \"z\\n\",\n       \"\\\" id=\\\"DejaVuSans-65\\\"/>\\n\",\n       \"      <path d=\\\"M 19.671875 64.796875 \\n\",\n       \"L 19.671875 37.40625 \\n\",\n       \"L 32.078125 37.40625 \\n\",\n       \"Q 38.96875 37.40625 42.71875 40.96875 \\n\",\n       \"Q 46.484375 44.53125 46.484375 51.125 \\n\",\n       \"Q 46.484375 57.671875 42.71875 61.234375 \\n\",\n       \"Q 38.96875 64.796875 32.078125 64.796875 \\n\",\n       \"z\\n\",\n       \"M 9.8125 72.90625 \\n\",\n       \"L 32.078125 72.90625 \\n\",\n       \"Q 44.34375 72.90625 50.609375 67.359375 \\n\",\n       \"Q 56.890625 61.8125 56.890625 51.125 \\n\",\n       \"Q 56.890625 40.328125 50.609375 34.8125 \\n\",\n       \"Q 44.34375 29.296875 32.078125 29.296875 \\n\",\n       \"L 19.671875 29.296875 \\n\",\n       \"L 19.671875 0 \\n\",\n       \"L 9.8125 0 \\n\",\n       \"z\\n\",\n       \"\\\" id=\\\"DejaVuSans-80\\\"/>\\n\",\n       \"      <path d=\\\"M 32.171875 -5.078125 \\n\",\n       \"Q 28.375 -14.84375 24.75 -17.8125 \\n\",\n       \"Q 21.140625 -20.796875 15.09375 -20.796875 \\n\",\n       \"L 7.90625 -20.796875 \\n\",\n       \"L 7.90625 -13.28125 \\n\",\n       \"L 13.1875 -13.28125 \\n\",\n       \"Q 16.890625 -13.28125 18.9375 -11.515625 \\n\",\n       \"Q 21 -9.765625 23.484375 -3.21875 \\n\",\n       \"L 25.09375 0.875 \\n\",\n       \"L 2.984375 54.6875 \\n\",\n       \"L 12.5 54.6875 \\n\",\n       \"L 29.59375 11.921875 \\n\",\n       \"L 46.6875 54.6875 \\n\",\n       \"L 56.203125 54.6875 \\n\",\n       \"z\\n\",\n       \"\\\" id=\\\"DejaVuSans-121\\\"/>\\n\",\n       \"     </defs>\\n\",\n       \"     <g transform=\\\"translate(80.78125 23.798437)scale(0.1 -0.1)\\\">\\n\",\n       \"      <use xlink:href=\\\"#DejaVuSans-83\\\"/>\\n\",\n       \"      <use x=\\\"63.476562\\\" xlink:href=\\\"#DejaVuSans-72\\\"/>\\n\",\n       \"      <use x=\\\"138.671875\\\" xlink:href=\\\"#DejaVuSans-65\\\"/>\\n\",\n       \"      <use x=\\\"207.080078\\\" xlink:href=\\\"#DejaVuSans-82\\\"/>\\n\",\n       \"      <use x=\\\"276.5625\\\" xlink:href=\\\"#DejaVuSans-80\\\"/>\\n\",\n       \"      <use x=\\\"336.865234\\\" xlink:href=\\\"#DejaVuSans-121\\\"/>\\n\",\n       \"     </g>\\n\",\n       \"    </g>\\n\",\n       \"    <g id=\\\"line2d_27\\\">\\n\",\n       \"     <path d=\\\"M 52.78125 34.976562 \\n\",\n       \"L 72.78125 34.976562 \\n\",\n       \"\\\" style=\\\"fill:none;stroke:#ff7f0e;stroke-linecap:square;stroke-width:1.5;\\\"/>\\n\",\n       \"    </g>\\n\",\n       \"    <g id=\\\"line2d_28\\\"/>\\n\",\n       \"    <g id=\\\"text_15\\\">\\n\",\n       \"     <!-- OpenFAST -->\\n\",\n       \"     <defs>\\n\",\n       \"      <path d=\\\"M 39.40625 66.21875 \\n\",\n       \"Q 28.65625 66.21875 22.328125 58.203125 \\n\",\n       \"Q 16.015625 50.203125 16.015625 36.375 \\n\",\n       \"Q 16.015625 22.609375 22.328125 14.59375 \\n\",\n       \"Q 28.65625 6.59375 39.40625 6.59375 \\n\",\n       \"Q 50.140625 6.59375 56.421875 14.59375 \\n\",\n       \"Q 62.703125 22.609375 62.703125 36.375 \\n\",\n       \"Q 62.703125 50.203125 56.421875 58.203125 \\n\",\n       \"Q 50.140625 66.21875 39.40625 66.21875 \\n\",\n       \"z\\n\",\n       \"M 39.40625 74.21875 \\n\",\n       \"Q 54.734375 74.21875 63.90625 63.9375 \\n\",\n       \"Q 73.09375 53.65625 73.09375 36.375 \\n\",\n       \"Q 73.09375 19.140625 63.90625 8.859375 \\n\",\n       \"Q 54.734375 -1.421875 39.40625 -1.421875 \\n\",\n       \"Q 24.03125 -1.421875 14.8125 8.828125 \\n\",\n       \"Q 5.609375 19.09375 5.609375 36.375 \\n\",\n       \"Q 5.609375 53.65625 14.8125 63.9375 \\n\",\n       \"Q 24.03125 74.21875 39.40625 74.21875 \\n\",\n       \"z\\n\",\n       \"\\\" id=\\\"DejaVuSans-79\\\"/>\\n\",\n       \"      <path d=\\\"M 18.109375 8.203125 \\n\",\n       \"L 18.109375 -20.796875 \\n\",\n       \"L 9.078125 -20.796875 \\n\",\n       \"L 9.078125 54.6875 \\n\",\n       \"L 18.109375 54.6875 \\n\",\n       \"L 18.109375 46.390625 \\n\",\n       \"Q 20.953125 51.265625 25.265625 53.625 \\n\",\n       \"Q 29.59375 56 35.59375 56 \\n\",\n       \"Q 45.5625 56 51.78125 48.09375 \\n\",\n       \"Q 58.015625 40.1875 58.015625 27.296875 \\n\",\n       \"Q 58.015625 14.40625 51.78125 6.484375 \\n\",\n       \"Q 45.5625 -1.421875 35.59375 -1.421875 \\n\",\n       \"Q 29.59375 -1.421875 25.265625 0.953125 \\n\",\n       \"Q 20.953125 3.328125 18.109375 8.203125 \\n\",\n       \"z\\n\",\n       \"M 48.6875 27.296875 \\n\",\n       \"Q 48.6875 37.203125 44.609375 42.84375 \\n\",\n       \"Q 40.53125 48.484375 33.40625 48.484375 \\n\",\n       \"Q 26.265625 48.484375 22.1875 42.84375 \\n\",\n       \"Q 18.109375 37.203125 18.109375 27.296875 \\n\",\n       \"Q 18.109375 17.390625 22.1875 11.75 \\n\",\n       \"Q 26.265625 6.109375 33.40625 6.109375 \\n\",\n       \"Q 40.53125 6.109375 44.609375 11.75 \\n\",\n       \"Q 48.6875 17.390625 48.6875 27.296875 \\n\",\n       \"z\\n\",\n       \"\\\" id=\\\"DejaVuSans-112\\\"/>\\n\",\n       \"      <path d=\\\"M 56.203125 29.59375 \\n\",\n       \"L 56.203125 25.203125 \\n\",\n       \"L 14.890625 25.203125 \\n\",\n       \"Q 15.484375 15.921875 20.484375 11.0625 \\n\",\n       \"Q 25.484375 6.203125 34.421875 6.203125 \\n\",\n       \"Q 39.59375 6.203125 44.453125 7.46875 \\n\",\n       \"Q 49.3125 8.734375 54.109375 11.28125 \\n\",\n       \"L 54.109375 2.78125 \\n\",\n       \"Q 49.265625 0.734375 44.1875 -0.34375 \\n\",\n       \"Q 39.109375 -1.421875 33.890625 -1.421875 \\n\",\n       \"Q 20.796875 -1.421875 13.15625 6.1875 \\n\",\n       \"Q 5.515625 13.8125 5.515625 26.8125 \\n\",\n       \"Q 5.515625 40.234375 12.765625 48.109375 \\n\",\n       \"Q 20.015625 56 32.328125 56 \\n\",\n       \"Q 43.359375 56 49.78125 48.890625 \\n\",\n       \"Q 56.203125 41.796875 56.203125 29.59375 \\n\",\n       \"z\\n\",\n       \"M 47.21875 32.234375 \\n\",\n       \"Q 47.125 39.59375 43.09375 43.984375 \\n\",\n       \"Q 39.0625 48.390625 32.421875 48.390625 \\n\",\n       \"Q 24.90625 48.390625 20.390625 44.140625 \\n\",\n       \"Q 15.875 39.890625 15.1875 32.171875 \\n\",\n       \"z\\n\",\n       \"\\\" id=\\\"DejaVuSans-101\\\"/>\\n\",\n       \"      <path d=\\\"M 54.890625 33.015625 \\n\",\n       \"L 54.890625 0 \\n\",\n       \"L 45.90625 0 \\n\",\n       \"L 45.90625 32.71875 \\n\",\n       \"Q 45.90625 40.484375 42.875 44.328125 \\n\",\n       \"Q 39.84375 48.1875 33.796875 48.1875 \\n\",\n       \"Q 26.515625 48.1875 22.3125 43.546875 \\n\",\n       \"Q 18.109375 38.921875 18.109375 30.90625 \\n\",\n       \"L 18.109375 0 \\n\",\n       \"L 9.078125 0 \\n\",\n       \"L 9.078125 54.6875 \\n\",\n       \"L 18.109375 54.6875 \\n\",\n       \"L 18.109375 46.1875 \\n\",\n       \"Q 21.34375 51.125 25.703125 53.5625 \\n\",\n       \"Q 30.078125 56 35.796875 56 \\n\",\n       \"Q 45.21875 56 50.046875 50.171875 \\n\",\n       \"Q 54.890625 44.34375 54.890625 33.015625 \\n\",\n       \"z\\n\",\n       \"\\\" id=\\\"DejaVuSans-110\\\"/>\\n\",\n       \"      <path d=\\\"M 9.8125 72.90625 \\n\",\n       \"L 51.703125 72.90625 \\n\",\n       \"L 51.703125 64.59375 \\n\",\n       \"L 19.671875 64.59375 \\n\",\n       \"L 19.671875 43.109375 \\n\",\n       \"L 48.578125 43.109375 \\n\",\n       \"L 48.578125 34.8125 \\n\",\n       \"L 19.671875 34.8125 \\n\",\n       \"L 19.671875 0 \\n\",\n       \"L 9.8125 0 \\n\",\n       \"z\\n\",\n       \"\\\" id=\\\"DejaVuSans-70\\\"/>\\n\",\n       \"      <path d=\\\"M -0.296875 72.90625 \\n\",\n       \"L 61.375 72.90625 \\n\",\n       \"L 61.375 64.59375 \\n\",\n       \"L 35.5 64.59375 \\n\",\n       \"L 35.5 0 \\n\",\n       \"L 25.59375 0 \\n\",\n       \"L 25.59375 64.59375 \\n\",\n       \"L -0.296875 64.59375 \\n\",\n       \"z\\n\",\n       \"\\\" id=\\\"DejaVuSans-84\\\"/>\\n\",\n       \"     </defs>\\n\",\n       \"     <g transform=\\\"translate(80.78125 38.476562)scale(0.1 -0.1)\\\">\\n\",\n       \"      <use xlink:href=\\\"#DejaVuSans-79\\\"/>\\n\",\n       \"      <use x=\\\"78.710938\\\" xlink:href=\\\"#DejaVuSans-112\\\"/>\\n\",\n       \"      <use x=\\\"142.1875\\\" xlink:href=\\\"#DejaVuSans-101\\\"/>\\n\",\n       \"      <use x=\\\"203.710938\\\" xlink:href=\\\"#DejaVuSans-110\\\"/>\\n\",\n       \"      <use x=\\\"267.089844\\\" xlink:href=\\\"#DejaVuSans-70\\\"/>\\n\",\n       \"      <use x=\\\"324.46875\\\" xlink:href=\\\"#DejaVuSans-65\\\"/>\\n\",\n       \"      <use x=\\\"392.876953\\\" xlink:href=\\\"#DejaVuSans-83\\\"/>\\n\",\n       \"      <use x=\\\"456.353516\\\" xlink:href=\\\"#DejaVuSans-84\\\"/>\\n\",\n       \"     </g>\\n\",\n       \"    </g>\\n\",\n       \"   </g>\\n\",\n       \"  </g>\\n\",\n       \"  <g id=\\\"axes_2\\\">\\n\",\n       \"   <g id=\\\"patch_8\\\">\\n\",\n       \"    <path d=\\\"M 409.017614 170.28 \\n\",\n       \"L 713.38125 170.28 \\n\",\n       \"L 713.38125 7.2 \\n\",\n       \"L 409.017614 7.2 \\n\",\n       \"z\\n\",\n       \"\\\" style=\\\"fill:#ffffff;\\\"/>\\n\",\n       \"   </g>\\n\",\n       \"   <g id=\\\"matplotlib.axis_3\\\">\\n\",\n       \"    <g id=\\\"xtick_7\\\">\\n\",\n       \"     <g id=\\\"line2d_29\\\">\\n\",\n       \"      <path clip-path=\\\"url(#p8917949baa)\\\" d=\\\"M 422.852324 170.28 \\n\",\n       \"L 422.852324 7.2 \\n\",\n       \"\\\" style=\\\"fill:none;stroke:#b0b0b0;stroke-linecap:square;stroke-width:0.8;\\\"/>\\n\",\n       \"     </g>\\n\",\n       \"     <g id=\\\"line2d_30\\\">\\n\",\n       \"      <g>\\n\",\n       \"       <use style=\\\"stroke:#000000;stroke-width:0.8;\\\" x=\\\"422.852324\\\" xlink:href=\\\"#m6e3d9edeb4\\\" y=\\\"170.28\\\"/>\\n\",\n       \"      </g>\\n\",\n       \"     </g>\\n\",\n       \"     <g id=\\\"text_16\\\">\\n\",\n       \"      <!-- 0.0 -->\\n\",\n       \"      <g transform=\\\"translate(414.900762 184.878438)scale(0.1 -0.1)\\\">\\n\",\n       \"       <use xlink:href=\\\"#DejaVuSans-48\\\"/>\\n\",\n       \"       <use x=\\\"63.623047\\\" xlink:href=\\\"#DejaVuSans-46\\\"/>\\n\",\n       \"       <use x=\\\"95.410156\\\" xlink:href=\\\"#DejaVuSans-48\\\"/>\\n\",\n       \"      </g>\\n\",\n       \"     </g>\\n\",\n       \"    </g>\\n\",\n       \"    <g id=\\\"xtick_8\\\">\\n\",\n       \"     <g id=\\\"line2d_31\\\">\\n\",\n       \"      <path clip-path=\\\"url(#p8917949baa)\\\" d=\\\"M 478.191167 170.28 \\n\",\n       \"L 478.191167 7.2 \\n\",\n       \"\\\" style=\\\"fill:none;stroke:#b0b0b0;stroke-linecap:square;stroke-width:0.8;\\\"/>\\n\",\n       \"     </g>\\n\",\n       \"     <g id=\\\"line2d_32\\\">\\n\",\n       \"      <g>\\n\",\n       \"       <use style=\\\"stroke:#000000;stroke-width:0.8;\\\" x=\\\"478.191167\\\" xlink:href=\\\"#m6e3d9edeb4\\\" y=\\\"170.28\\\"/>\\n\",\n       \"      </g>\\n\",\n       \"     </g>\\n\",\n       \"     <g id=\\\"text_17\\\">\\n\",\n       \"      <!-- 0.2 -->\\n\",\n       \"      <g transform=\\\"translate(470.239605 184.878438)scale(0.1 -0.1)\\\">\\n\",\n       \"       <use xlink:href=\\\"#DejaVuSans-48\\\"/>\\n\",\n       \"       <use x=\\\"63.623047\\\" xlink:href=\\\"#DejaVuSans-46\\\"/>\\n\",\n       \"       <use x=\\\"95.410156\\\" xlink:href=\\\"#DejaVuSans-50\\\"/>\\n\",\n       \"      </g>\\n\",\n       \"     </g>\\n\",\n       \"    </g>\\n\",\n       \"    <g id=\\\"xtick_9\\\">\\n\",\n       \"     <g id=\\\"line2d_33\\\">\\n\",\n       \"      <path clip-path=\\\"url(#p8917949baa)\\\" d=\\\"M 533.53001 170.28 \\n\",\n       \"L 533.53001 7.2 \\n\",\n       \"\\\" style=\\\"fill:none;stroke:#b0b0b0;stroke-linecap:square;stroke-width:0.8;\\\"/>\\n\",\n       \"     </g>\\n\",\n       \"     <g id=\\\"line2d_34\\\">\\n\",\n       \"      <g>\\n\",\n       \"       <use style=\\\"stroke:#000000;stroke-width:0.8;\\\" x=\\\"533.53001\\\" xlink:href=\\\"#m6e3d9edeb4\\\" y=\\\"170.28\\\"/>\\n\",\n       \"      </g>\\n\",\n       \"     </g>\\n\",\n       \"     <g id=\\\"text_18\\\">\\n\",\n       \"      <!-- 0.4 -->\\n\",\n       \"      <g transform=\\\"translate(525.578448 184.878438)scale(0.1 -0.1)\\\">\\n\",\n       \"       <use xlink:href=\\\"#DejaVuSans-48\\\"/>\\n\",\n       \"       <use x=\\\"63.623047\\\" xlink:href=\\\"#DejaVuSans-46\\\"/>\\n\",\n       \"       <use x=\\\"95.410156\\\" xlink:href=\\\"#DejaVuSans-52\\\"/>\\n\",\n       \"      </g>\\n\",\n       \"     </g>\\n\",\n       \"    </g>\\n\",\n       \"    <g id=\\\"xtick_10\\\">\\n\",\n       \"     <g id=\\\"line2d_35\\\">\\n\",\n       \"      <path clip-path=\\\"url(#p8917949baa)\\\" d=\\\"M 588.868853 170.28 \\n\",\n       \"L 588.868853 7.2 \\n\",\n       \"\\\" style=\\\"fill:none;stroke:#b0b0b0;stroke-linecap:square;stroke-width:0.8;\\\"/>\\n\",\n       \"     </g>\\n\",\n       \"     <g id=\\\"line2d_36\\\">\\n\",\n       \"      <g>\\n\",\n       \"       <use style=\\\"stroke:#000000;stroke-width:0.8;\\\" x=\\\"588.868853\\\" xlink:href=\\\"#m6e3d9edeb4\\\" y=\\\"170.28\\\"/>\\n\",\n       \"      </g>\\n\",\n       \"     </g>\\n\",\n       \"     <g id=\\\"text_19\\\">\\n\",\n       \"      <!-- 0.6 -->\\n\",\n       \"      <g transform=\\\"translate(580.917291 184.878438)scale(0.1 -0.1)\\\">\\n\",\n       \"       <use xlink:href=\\\"#DejaVuSans-48\\\"/>\\n\",\n       \"       <use x=\\\"63.623047\\\" xlink:href=\\\"#DejaVuSans-46\\\"/>\\n\",\n       \"       <use x=\\\"95.410156\\\" xlink:href=\\\"#DejaVuSans-54\\\"/>\\n\",\n       \"      </g>\\n\",\n       \"     </g>\\n\",\n       \"    </g>\\n\",\n       \"    <g id=\\\"xtick_11\\\">\\n\",\n       \"     <g id=\\\"line2d_37\\\">\\n\",\n       \"      <path clip-path=\\\"url(#p8917949baa)\\\" d=\\\"M 644.207696 170.28 \\n\",\n       \"L 644.207696 7.2 \\n\",\n       \"\\\" style=\\\"fill:none;stroke:#b0b0b0;stroke-linecap:square;stroke-width:0.8;\\\"/>\\n\",\n       \"     </g>\\n\",\n       \"     <g id=\\\"line2d_38\\\">\\n\",\n       \"      <g>\\n\",\n       \"       <use style=\\\"stroke:#000000;stroke-width:0.8;\\\" x=\\\"644.207696\\\" xlink:href=\\\"#m6e3d9edeb4\\\" y=\\\"170.28\\\"/>\\n\",\n       \"      </g>\\n\",\n       \"     </g>\\n\",\n       \"     <g id=\\\"text_20\\\">\\n\",\n       \"      <!-- 0.8 -->\\n\",\n       \"      <g transform=\\\"translate(636.256134 184.878438)scale(0.1 -0.1)\\\">\\n\",\n       \"       <use xlink:href=\\\"#DejaVuSans-48\\\"/>\\n\",\n       \"       <use x=\\\"63.623047\\\" xlink:href=\\\"#DejaVuSans-46\\\"/>\\n\",\n       \"       <use x=\\\"95.410156\\\" xlink:href=\\\"#DejaVuSans-56\\\"/>\\n\",\n       \"      </g>\\n\",\n       \"     </g>\\n\",\n       \"    </g>\\n\",\n       \"    <g id=\\\"xtick_12\\\">\\n\",\n       \"     <g id=\\\"line2d_39\\\">\\n\",\n       \"      <path clip-path=\\\"url(#p8917949baa)\\\" d=\\\"M 699.546539 170.28 \\n\",\n       \"L 699.546539 7.2 \\n\",\n       \"\\\" style=\\\"fill:none;stroke:#b0b0b0;stroke-linecap:square;stroke-width:0.8;\\\"/>\\n\",\n       \"     </g>\\n\",\n       \"     <g id=\\\"line2d_40\\\">\\n\",\n       \"      <g>\\n\",\n       \"       <use style=\\\"stroke:#000000;stroke-width:0.8;\\\" x=\\\"699.546539\\\" xlink:href=\\\"#m6e3d9edeb4\\\" y=\\\"170.28\\\"/>\\n\",\n       \"      </g>\\n\",\n       \"     </g>\\n\",\n       \"     <g id=\\\"text_21\\\">\\n\",\n       \"      <!-- 1.0 -->\\n\",\n       \"      <g transform=\\\"translate(691.594977 184.878438)scale(0.1 -0.1)\\\">\\n\",\n       \"       <use xlink:href=\\\"#DejaVuSans-49\\\"/>\\n\",\n       \"       <use x=\\\"63.623047\\\" xlink:href=\\\"#DejaVuSans-46\\\"/>\\n\",\n       \"       <use x=\\\"95.410156\\\" xlink:href=\\\"#DejaVuSans-48\\\"/>\\n\",\n       \"      </g>\\n\",\n       \"     </g>\\n\",\n       \"    </g>\\n\",\n       \"    <g id=\\\"text_22\\\">\\n\",\n       \"     <!-- r/R [-] -->\\n\",\n       \"     <g transform=\\\"translate(546.690838 198.556563)scale(0.1 -0.1)\\\">\\n\",\n       \"      <use xlink:href=\\\"#DejaVuSans-114\\\"/>\\n\",\n       \"      <use x=\\\"41.113281\\\" xlink:href=\\\"#DejaVuSans-47\\\"/>\\n\",\n       \"      <use x=\\\"74.804688\\\" xlink:href=\\\"#DejaVuSans-82\\\"/>\\n\",\n       \"      <use x=\\\"144.287109\\\" xlink:href=\\\"#DejaVuSans-32\\\"/>\\n\",\n       \"      <use x=\\\"176.074219\\\" xlink:href=\\\"#DejaVuSans-91\\\"/>\\n\",\n       \"      <use x=\\\"215.087891\\\" xlink:href=\\\"#DejaVuSans-45\\\"/>\\n\",\n       \"      <use x=\\\"251.171875\\\" xlink:href=\\\"#DejaVuSans-93\\\"/>\\n\",\n       \"     </g>\\n\",\n       \"    </g>\\n\",\n       \"   </g>\\n\",\n       \"   <g id=\\\"matplotlib.axis_4\\\">\\n\",\n       \"    <g id=\\\"ytick_6\\\">\\n\",\n       \"     <g id=\\\"line2d_41\\\">\\n\",\n       \"      <path clip-path=\\\"url(#p8917949baa)\\\" d=\\\"M 409.017614 162.867273 \\n\",\n       \"L 713.38125 162.867273 \\n\",\n       \"\\\" style=\\\"fill:none;stroke:#b0b0b0;stroke-linecap:square;stroke-width:0.8;\\\"/>\\n\",\n       \"     </g>\\n\",\n       \"     <g id=\\\"line2d_42\\\">\\n\",\n       \"      <g>\\n\",\n       \"       <use style=\\\"stroke:#000000;stroke-width:0.8;\\\" x=\\\"409.017614\\\" xlink:href=\\\"#m60ac5f1668\\\" y=\\\"162.867273\\\"/>\\n\",\n       \"      </g>\\n\",\n       \"     </g>\\n\",\n       \"     <g id=\\\"text_23\\\">\\n\",\n       \"      <!-- 0.00 -->\\n\",\n       \"      <g transform=\\\"translate(379.751989 166.666491)scale(0.1 -0.1)\\\">\\n\",\n       \"       <use xlink:href=\\\"#DejaVuSans-48\\\"/>\\n\",\n       \"       <use x=\\\"63.623047\\\" xlink:href=\\\"#DejaVuSans-46\\\"/>\\n\",\n       \"       <use x=\\\"95.410156\\\" xlink:href=\\\"#DejaVuSans-48\\\"/>\\n\",\n       \"       <use x=\\\"159.033203\\\" xlink:href=\\\"#DejaVuSans-48\\\"/>\\n\",\n       \"      </g>\\n\",\n       \"     </g>\\n\",\n       \"    </g>\\n\",\n       \"    <g id=\\\"ytick_7\\\">\\n\",\n       \"     <g id=\\\"line2d_43\\\">\\n\",\n       \"      <path clip-path=\\\"url(#p8917949baa)\\\" d=\\\"M 409.017614 138.65226 \\n\",\n       \"L 713.38125 138.65226 \\n\",\n       \"\\\" style=\\\"fill:none;stroke:#b0b0b0;stroke-linecap:square;stroke-width:0.8;\\\"/>\\n\",\n       \"     </g>\\n\",\n       \"     <g id=\\\"line2d_44\\\">\\n\",\n       \"      <g>\\n\",\n       \"       <use style=\\\"stroke:#000000;stroke-width:0.8;\\\" x=\\\"409.017614\\\" xlink:href=\\\"#m60ac5f1668\\\" y=\\\"138.65226\\\"/>\\n\",\n       \"      </g>\\n\",\n       \"     </g>\\n\",\n       \"     <g id=\\\"text_24\\\">\\n\",\n       \"      <!-- 0.01 -->\\n\",\n       \"      <g transform=\\\"translate(379.751989 142.451479)scale(0.1 -0.1)\\\">\\n\",\n       \"       <use xlink:href=\\\"#DejaVuSans-48\\\"/>\\n\",\n       \"       <use x=\\\"63.623047\\\" xlink:href=\\\"#DejaVuSans-46\\\"/>\\n\",\n       \"       <use x=\\\"95.410156\\\" xlink:href=\\\"#DejaVuSans-48\\\"/>\\n\",\n       \"       <use x=\\\"159.033203\\\" xlink:href=\\\"#DejaVuSans-49\\\"/>\\n\",\n       \"      </g>\\n\",\n       \"     </g>\\n\",\n       \"    </g>\\n\",\n       \"    <g id=\\\"ytick_8\\\">\\n\",\n       \"     <g id=\\\"line2d_45\\\">\\n\",\n       \"      <path clip-path=\\\"url(#p8917949baa)\\\" d=\\\"M 409.017614 114.437248 \\n\",\n       \"L 713.38125 114.437248 \\n\",\n       \"\\\" style=\\\"fill:none;stroke:#b0b0b0;stroke-linecap:square;stroke-width:0.8;\\\"/>\\n\",\n       \"     </g>\\n\",\n       \"     <g id=\\\"line2d_46\\\">\\n\",\n       \"      <g>\\n\",\n       \"       <use style=\\\"stroke:#000000;stroke-width:0.8;\\\" x=\\\"409.017614\\\" xlink:href=\\\"#m60ac5f1668\\\" y=\\\"114.437248\\\"/>\\n\",\n       \"      </g>\\n\",\n       \"     </g>\\n\",\n       \"     <g id=\\\"text_25\\\">\\n\",\n       \"      <!-- 0.02 -->\\n\",\n       \"      <g transform=\\\"translate(379.751989 118.236467)scale(0.1 -0.1)\\\">\\n\",\n       \"       <use xlink:href=\\\"#DejaVuSans-48\\\"/>\\n\",\n       \"       <use x=\\\"63.623047\\\" xlink:href=\\\"#DejaVuSans-46\\\"/>\\n\",\n       \"       <use x=\\\"95.410156\\\" xlink:href=\\\"#DejaVuSans-48\\\"/>\\n\",\n       \"       <use x=\\\"159.033203\\\" xlink:href=\\\"#DejaVuSans-50\\\"/>\\n\",\n       \"      </g>\\n\",\n       \"     </g>\\n\",\n       \"    </g>\\n\",\n       \"    <g id=\\\"ytick_9\\\">\\n\",\n       \"     <g id=\\\"line2d_47\\\">\\n\",\n       \"      <path clip-path=\\\"url(#p8917949baa)\\\" d=\\\"M 409.017614 90.222236 \\n\",\n       \"L 713.38125 90.222236 \\n\",\n       \"\\\" style=\\\"fill:none;stroke:#b0b0b0;stroke-linecap:square;stroke-width:0.8;\\\"/>\\n\",\n       \"     </g>\\n\",\n       \"     <g id=\\\"line2d_48\\\">\\n\",\n       \"      <g>\\n\",\n       \"       <use style=\\\"stroke:#000000;stroke-width:0.8;\\\" x=\\\"409.017614\\\" xlink:href=\\\"#m60ac5f1668\\\" y=\\\"90.222236\\\"/>\\n\",\n       \"      </g>\\n\",\n       \"     </g>\\n\",\n       \"     <g id=\\\"text_26\\\">\\n\",\n       \"      <!-- 0.03 -->\\n\",\n       \"      <g transform=\\\"translate(379.751989 94.021454)scale(0.1 -0.1)\\\">\\n\",\n       \"       <use xlink:href=\\\"#DejaVuSans-48\\\"/>\\n\",\n       \"       <use x=\\\"63.623047\\\" xlink:href=\\\"#DejaVuSans-46\\\"/>\\n\",\n       \"       <use x=\\\"95.410156\\\" xlink:href=\\\"#DejaVuSans-48\\\"/>\\n\",\n       \"       <use x=\\\"159.033203\\\" xlink:href=\\\"#DejaVuSans-51\\\"/>\\n\",\n       \"      </g>\\n\",\n       \"     </g>\\n\",\n       \"    </g>\\n\",\n       \"    <g id=\\\"ytick_10\\\">\\n\",\n       \"     <g id=\\\"line2d_49\\\">\\n\",\n       \"      <path clip-path=\\\"url(#p8917949baa)\\\" d=\\\"M 409.017614 66.007223 \\n\",\n       \"L 713.38125 66.007223 \\n\",\n       \"\\\" style=\\\"fill:none;stroke:#b0b0b0;stroke-linecap:square;stroke-width:0.8;\\\"/>\\n\",\n       \"     </g>\\n\",\n       \"     <g id=\\\"line2d_50\\\">\\n\",\n       \"      <g>\\n\",\n       \"       <use style=\\\"stroke:#000000;stroke-width:0.8;\\\" x=\\\"409.017614\\\" xlink:href=\\\"#m60ac5f1668\\\" y=\\\"66.007223\\\"/>\\n\",\n       \"      </g>\\n\",\n       \"     </g>\\n\",\n       \"     <g id=\\\"text_27\\\">\\n\",\n       \"      <!-- 0.04 -->\\n\",\n       \"      <g transform=\\\"translate(379.751989 69.806442)scale(0.1 -0.1)\\\">\\n\",\n       \"       <use xlink:href=\\\"#DejaVuSans-48\\\"/>\\n\",\n       \"       <use x=\\\"63.623047\\\" xlink:href=\\\"#DejaVuSans-46\\\"/>\\n\",\n       \"       <use x=\\\"95.410156\\\" xlink:href=\\\"#DejaVuSans-48\\\"/>\\n\",\n       \"       <use x=\\\"159.033203\\\" xlink:href=\\\"#DejaVuSans-52\\\"/>\\n\",\n       \"      </g>\\n\",\n       \"     </g>\\n\",\n       \"    </g>\\n\",\n       \"    <g id=\\\"ytick_11\\\">\\n\",\n       \"     <g id=\\\"line2d_51\\\">\\n\",\n       \"      <path clip-path=\\\"url(#p8917949baa)\\\" d=\\\"M 409.017614 41.792211 \\n\",\n       \"L 713.38125 41.792211 \\n\",\n       \"\\\" style=\\\"fill:none;stroke:#b0b0b0;stroke-linecap:square;stroke-width:0.8;\\\"/>\\n\",\n       \"     </g>\\n\",\n       \"     <g id=\\\"line2d_52\\\">\\n\",\n       \"      <g>\\n\",\n       \"       <use style=\\\"stroke:#000000;stroke-width:0.8;\\\" x=\\\"409.017614\\\" xlink:href=\\\"#m60ac5f1668\\\" y=\\\"41.792211\\\"/>\\n\",\n       \"      </g>\\n\",\n       \"     </g>\\n\",\n       \"     <g id=\\\"text_28\\\">\\n\",\n       \"      <!-- 0.05 -->\\n\",\n       \"      <defs>\\n\",\n       \"       <path d=\\\"M 10.796875 72.90625 \\n\",\n       \"L 49.515625 72.90625 \\n\",\n       \"L 49.515625 64.59375 \\n\",\n       \"L 19.828125 64.59375 \\n\",\n       \"L 19.828125 46.734375 \\n\",\n       \"Q 21.96875 47.46875 24.109375 47.828125 \\n\",\n       \"Q 26.265625 48.1875 28.421875 48.1875 \\n\",\n       \"Q 40.625 48.1875 47.75 41.5 \\n\",\n       \"Q 54.890625 34.8125 54.890625 23.390625 \\n\",\n       \"Q 54.890625 11.625 47.5625 5.09375 \\n\",\n       \"Q 40.234375 -1.421875 26.90625 -1.421875 \\n\",\n       \"Q 22.3125 -1.421875 17.546875 -0.640625 \\n\",\n       \"Q 12.796875 0.140625 7.71875 1.703125 \\n\",\n       \"L 7.71875 11.625 \\n\",\n       \"Q 12.109375 9.234375 16.796875 8.0625 \\n\",\n       \"Q 21.484375 6.890625 26.703125 6.890625 \\n\",\n       \"Q 35.15625 6.890625 40.078125 11.328125 \\n\",\n       \"Q 45.015625 15.765625 45.015625 23.390625 \\n\",\n       \"Q 45.015625 31 40.078125 35.4375 \\n\",\n       \"Q 35.15625 39.890625 26.703125 39.890625 \\n\",\n       \"Q 22.75 39.890625 18.8125 39.015625 \\n\",\n       \"Q 14.890625 38.140625 10.796875 36.28125 \\n\",\n       \"z\\n\",\n       \"\\\" id=\\\"DejaVuSans-53\\\"/>\\n\",\n       \"      </defs>\\n\",\n       \"      <g transform=\\\"translate(379.751989 45.59143)scale(0.1 -0.1)\\\">\\n\",\n       \"       <use xlink:href=\\\"#DejaVuSans-48\\\"/>\\n\",\n       \"       <use x=\\\"63.623047\\\" xlink:href=\\\"#DejaVuSans-46\\\"/>\\n\",\n       \"       <use x=\\\"95.410156\\\" xlink:href=\\\"#DejaVuSans-48\\\"/>\\n\",\n       \"       <use x=\\\"159.033203\\\" xlink:href=\\\"#DejaVuSans-53\\\"/>\\n\",\n       \"      </g>\\n\",\n       \"     </g>\\n\",\n       \"    </g>\\n\",\n       \"    <g id=\\\"ytick_12\\\">\\n\",\n       \"     <g id=\\\"line2d_53\\\">\\n\",\n       \"      <path clip-path=\\\"url(#p8917949baa)\\\" d=\\\"M 409.017614 17.577199 \\n\",\n       \"L 713.38125 17.577199 \\n\",\n       \"\\\" style=\\\"fill:none;stroke:#b0b0b0;stroke-linecap:square;stroke-width:0.8;\\\"/>\\n\",\n       \"     </g>\\n\",\n       \"     <g id=\\\"line2d_54\\\">\\n\",\n       \"      <g>\\n\",\n       \"       <use style=\\\"stroke:#000000;stroke-width:0.8;\\\" x=\\\"409.017614\\\" xlink:href=\\\"#m60ac5f1668\\\" y=\\\"17.577199\\\"/>\\n\",\n       \"      </g>\\n\",\n       \"     </g>\\n\",\n       \"     <g id=\\\"text_29\\\">\\n\",\n       \"      <!-- 0.06 -->\\n\",\n       \"      <g transform=\\\"translate(379.751989 21.376417)scale(0.1 -0.1)\\\">\\n\",\n       \"       <use xlink:href=\\\"#DejaVuSans-48\\\"/>\\n\",\n       \"       <use x=\\\"63.623047\\\" xlink:href=\\\"#DejaVuSans-46\\\"/>\\n\",\n       \"       <use x=\\\"95.410156\\\" xlink:href=\\\"#DejaVuSans-48\\\"/>\\n\",\n       \"       <use x=\\\"159.033203\\\" xlink:href=\\\"#DejaVuSans-54\\\"/>\\n\",\n       \"      </g>\\n\",\n       \"     </g>\\n\",\n       \"    </g>\\n\",\n       \"    <g id=\\\"text_30\\\">\\n\",\n       \"     <!-- CT/d(r/R) [-] -->\\n\",\n       \"     <g transform=\\\"translate(373.672301 118.554063)rotate(-90)scale(0.1 -0.1)\\\">\\n\",\n       \"      <use xlink:href=\\\"#DejaVuSans-67\\\"/>\\n\",\n       \"      <use x=\\\"69.824219\\\" xlink:href=\\\"#DejaVuSans-84\\\"/>\\n\",\n       \"      <use x=\\\"130.908203\\\" xlink:href=\\\"#DejaVuSans-47\\\"/>\\n\",\n       \"      <use x=\\\"164.599609\\\" xlink:href=\\\"#DejaVuSans-100\\\"/>\\n\",\n       \"      <use x=\\\"228.076172\\\" xlink:href=\\\"#DejaVuSans-40\\\"/>\\n\",\n       \"      <use x=\\\"267.089844\\\" xlink:href=\\\"#DejaVuSans-114\\\"/>\\n\",\n       \"      <use x=\\\"308.203125\\\" xlink:href=\\\"#DejaVuSans-47\\\"/>\\n\",\n       \"      <use x=\\\"341.894531\\\" xlink:href=\\\"#DejaVuSans-82\\\"/>\\n\",\n       \"      <use x=\\\"411.376953\\\" xlink:href=\\\"#DejaVuSans-41\\\"/>\\n\",\n       \"      <use x=\\\"450.390625\\\" xlink:href=\\\"#DejaVuSans-32\\\"/>\\n\",\n       \"      <use x=\\\"482.177734\\\" xlink:href=\\\"#DejaVuSans-91\\\"/>\\n\",\n       \"      <use x=\\\"521.191406\\\" xlink:href=\\\"#DejaVuSans-45\\\"/>\\n\",\n       \"      <use x=\\\"557.275391\\\" xlink:href=\\\"#DejaVuSans-93\\\"/>\\n\",\n       \"     </g>\\n\",\n       \"    </g>\\n\",\n       \"   </g>\\n\",\n       \"   <g id=\\\"line2d_55\\\">\\n\",\n       \"    <path clip-path=\\\"url(#p8917949baa)\\\" d=\\\"M 422.852324 162.867273 \\n\",\n       \"L 438.366693 162.867273 \\n\",\n       \"L 453.832247 116.564768 \\n\",\n       \"L 469.200327 51.646525 \\n\",\n       \"L 484.422579 36.028121 \\n\",\n       \"L 492.025878 30.676052 \\n\",\n       \"L 514.23863 29.475378 \\n\",\n       \"L 528.738616 28.128245 \\n\",\n       \"L 547.364721 27.272783 \\n\",\n       \"L 556.694542 26.129473 \\n\",\n       \"L 570.062522 25.488263 \\n\",\n       \"L 582.967324 24.655189 \\n\",\n       \"L 595.368346 23.863476 \\n\",\n       \"L 607.226568 23.459217 \\n\",\n       \"L 618.50468 23.385531 \\n\",\n       \"L 630.372986 23.643781 \\n\",\n       \"L 639.180573 24.599816 \\n\",\n       \"L 648.513299 26.230545 \\n\",\n       \"L 657.136012 29.062176 \\n\",\n       \"L 665.021582 33.411016 \\n\",\n       \"L 672.145198 39.692453 \\n\",\n       \"L 678.484446 47.388722 \\n\",\n       \"L 682.944886 57.442048 \\n\",\n       \"L 688.732588 66.136341 \\n\",\n       \"L 692.609238 81.04617 \\n\",\n       \"L 695.637132 99.399803 \\n\",\n       \"L 697.806744 119.163547 \\n\",\n       \"L 699.111248 141.56949 \\n\",\n       \"L 699.546539 14.612727 \\n\",\n       \"\\\" style=\\\"fill:none;stroke:#1f77b4;stroke-linecap:square;stroke-width:1.5;\\\"/>\\n\",\n       \"   </g>\\n\",\n       \"   <g id=\\\"line2d_56\\\">\\n\",\n       \"    <path clip-path=\\\"url(#p8917949baa)\\\" d=\\\"M 478.629329 45.985408 \\n\",\n       \"L 509.37823 37.052115 \\n\",\n       \"L 535.727095 34.416512 \\n\",\n       \"L 588.430238 34.860405 \\n\",\n       \"L 614.781792 27.25878 \\n\",\n       \"L 658.701064 32.918378 \\n\",\n       \"L 671.876841 41.518763 \\n\",\n       \"L 687.248608 68.443481 \\n\",\n       \"L 696.032451 105.563809 \\n\",\n       \"L 699.546539 162.867273 \\n\",\n       \"\\\" style=\\\"fill:none;stroke:#ff7f0e;stroke-linecap:square;stroke-width:1.5;\\\"/>\\n\",\n       \"   </g>\\n\",\n       \"   <g id=\\\"patch_9\\\">\\n\",\n       \"    <path d=\\\"M 409.017614 170.28 \\n\",\n       \"L 409.017614 7.2 \\n\",\n       \"\\\" style=\\\"fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;stroke-width:0.8;\\\"/>\\n\",\n       \"   </g>\\n\",\n       \"   <g id=\\\"patch_10\\\">\\n\",\n       \"    <path d=\\\"M 713.38125 170.28 \\n\",\n       \"L 713.38125 7.2 \\n\",\n       \"\\\" style=\\\"fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;stroke-width:0.8;\\\"/>\\n\",\n       \"   </g>\\n\",\n       \"   <g id=\\\"patch_11\\\">\\n\",\n       \"    <path d=\\\"M 409.017614 170.28 \\n\",\n       \"L 713.38125 170.28 \\n\",\n       \"\\\" style=\\\"fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;stroke-width:0.8;\\\"/>\\n\",\n       \"   </g>\\n\",\n       \"   <g id=\\\"patch_12\\\">\\n\",\n       \"    <path d=\\\"M 409.017614 7.2 \\n\",\n       \"L 713.38125 7.2 \\n\",\n       \"\\\" style=\\\"fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;stroke-width:0.8;\\\"/>\\n\",\n       \"   </g>\\n\",\n       \"   <g id=\\\"legend_2\\\">\\n\",\n       \"    <g id=\\\"patch_13\\\">\\n\",\n       \"     <path d=\\\"M 519.326776 165.28 \\n\",\n       \"L 603.072088 165.28 \\n\",\n       \"Q 605.072088 165.28 605.072088 163.28 \\n\",\n       \"L 605.072088 134.92375 \\n\",\n       \"Q 605.072088 132.92375 603.072088 132.92375 \\n\",\n       \"L 519.326776 132.92375 \\n\",\n       \"Q 517.326776 132.92375 517.326776 134.92375 \\n\",\n       \"L 517.326776 163.28 \\n\",\n       \"Q 517.326776 165.28 519.326776 165.28 \\n\",\n       \"z\\n\",\n       \"\\\" style=\\\"fill:#ffffff;opacity:0.8;stroke:#cccccc;stroke-linejoin:miter;\\\"/>\\n\",\n       \"    </g>\\n\",\n       \"    <g id=\\\"line2d_57\\\">\\n\",\n       \"     <path d=\\\"M 521.326776 141.022188 \\n\",\n       \"L 541.326776 141.022188 \\n\",\n       \"\\\" style=\\\"fill:none;stroke:#1f77b4;stroke-linecap:square;stroke-width:1.5;\\\"/>\\n\",\n       \"    </g>\\n\",\n       \"    <g id=\\\"line2d_58\\\"/>\\n\",\n       \"    <g id=\\\"text_31\\\">\\n\",\n       \"     <!-- SHARPy -->\\n\",\n       \"     <g transform=\\\"translate(549.326776 144.522188)scale(0.1 -0.1)\\\">\\n\",\n       \"      <use xlink:href=\\\"#DejaVuSans-83\\\"/>\\n\",\n       \"      <use x=\\\"63.476562\\\" xlink:href=\\\"#DejaVuSans-72\\\"/>\\n\",\n       \"      <use x=\\\"138.671875\\\" xlink:href=\\\"#DejaVuSans-65\\\"/>\\n\",\n       \"      <use x=\\\"207.080078\\\" xlink:href=\\\"#DejaVuSans-82\\\"/>\\n\",\n       \"      <use x=\\\"276.5625\\\" xlink:href=\\\"#DejaVuSans-80\\\"/>\\n\",\n       \"      <use x=\\\"336.865234\\\" xlink:href=\\\"#DejaVuSans-121\\\"/>\\n\",\n       \"     </g>\\n\",\n       \"    </g>\\n\",\n       \"    <g id=\\\"line2d_59\\\">\\n\",\n       \"     <path d=\\\"M 521.326776 155.700312 \\n\",\n       \"L 541.326776 155.700312 \\n\",\n       \"\\\" style=\\\"fill:none;stroke:#ff7f0e;stroke-linecap:square;stroke-width:1.5;\\\"/>\\n\",\n       \"    </g>\\n\",\n       \"    <g id=\\\"line2d_60\\\"/>\\n\",\n       \"    <g id=\\\"text_32\\\">\\n\",\n       \"     <!-- OpenFAST -->\\n\",\n       \"     <g transform=\\\"translate(549.326776 159.200312)scale(0.1 -0.1)\\\">\\n\",\n       \"      <use xlink:href=\\\"#DejaVuSans-79\\\"/>\\n\",\n       \"      <use x=\\\"78.710938\\\" xlink:href=\\\"#DejaVuSans-112\\\"/>\\n\",\n       \"      <use x=\\\"142.1875\\\" xlink:href=\\\"#DejaVuSans-101\\\"/>\\n\",\n       \"      <use x=\\\"203.710938\\\" xlink:href=\\\"#DejaVuSans-110\\\"/>\\n\",\n       \"      <use x=\\\"267.089844\\\" xlink:href=\\\"#DejaVuSans-70\\\"/>\\n\",\n       \"      <use x=\\\"324.46875\\\" xlink:href=\\\"#DejaVuSans-65\\\"/>\\n\",\n       \"      <use x=\\\"392.876953\\\" xlink:href=\\\"#DejaVuSans-83\\\"/>\\n\",\n       \"      <use x=\\\"456.353516\\\" xlink:href=\\\"#DejaVuSans-84\\\"/>\\n\",\n       \"     </g>\\n\",\n       \"    </g>\\n\",\n       \"   </g>\\n\",\n       \"  </g>\\n\",\n       \" </g>\\n\",\n       \" <defs>\\n\",\n       \"  <clipPath id=\\\"p19e32ab1d1\\\">\\n\",\n       \"   <rect height=\\\"163.08\\\" width=\\\"304.363636\\\" x=\\\"43.78125\\\" y=\\\"7.2\\\"/>\\n\",\n       \"  </clipPath>\\n\",\n       \"  <clipPath id=\\\"p8917949baa\\\">\\n\",\n       \"   <rect height=\\\"163.08\\\" width=\\\"304.363636\\\" x=\\\"409.017614\\\" y=\\\"7.2\\\"/>\\n\",\n       \"  </clipPath>\\n\",\n       \" </defs>\\n\",\n       \"</svg>\\n\"\n      ],\n      \"text/plain\": [\n       \"<Figure size 864x216 with 2 Axes>\"\n      ]\n     },\n     \"metadata\": {\n      \"needs_background\": \"light\"\n     },\n     \"output_type\": \"display_data\"\n    }\n   ],\n   \"source\": [\n    \"fig, list_plots = plt.subplots(1, 2, figsize=(12, 3))\\n\",\n    \"\\n\",\n    \"list_plots[0].grid()\\n\",\n    \"list_plots[0].set_xlabel(\\\"r/R [-]\\\")\\n\",\n    \"list_plots[0].set_ylabel(\\\"CN/d(r/R) [-]\\\")\\n\",\n    \"list_plots[0].plot(r[0]/R, CN_drR[0], '-', label='SHARPy')\\n\",\n    \"list_plots[0].plot(of_rR, of_cNdrR, '-', label='OpenFAST')\\n\",\n    \"list_plots[0].legend()\\n\",\n    \"\\n\",\n    \"list_plots[1].grid()\\n\",\n    \"list_plots[1].set_xlabel(\\\"r/R [-]\\\")\\n\",\n    \"list_plots[1].set_ylabel(\\\"CT/d(r/R) [-]\\\")\\n\",\n    \"list_plots[1].plot(r[0]/R, CTan_drR[0], '-', label='SHARPy')\\n\",\n    \"list_plots[1].plot(of_rR, of_cTdrR, '-', label='OpenFAST')\\n\",\n    \"list_plots[1].legend()\\n\",\n    \"\\n\",\n    \"plt.show()\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"Print the rotor thrust and power coefficients:\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 16,\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"name\": \"stdout\",\n     \"output_type\": \"stream\",\n     \"text\": [\n      \"      OpenFAST SHARPy\\n\",\n      \"Cp[-] 0.49       0.52\\n\",\n      \"Ct[-] 0.70       0.70\\n\"\n     ]\n    }\n   ],\n   \"source\": [\n    \"print(\\\"      OpenFAST SHARPy\\\")\\n\",\n    \"print(\\\"Cp[-] %.2f       %.2f\\\" % (of_cp, Cp))\\n\",\n    \"print(\\\"Ct[-] %.2f       %.2f\\\" % (of_ct, Ct))\"\n   ]\n  }\n ],\n \"metadata\": {\n  \"kernelspec\": {\n   \"display_name\": \"Python 3 (ipykernel)\",\n   \"language\": \"python\",\n   \"name\": \"python3\"\n  },\n  \"language_info\": {\n   \"codemirror_mode\": {\n    \"name\": \"ipython\",\n    \"version\": 3\n   },\n   \"file_extension\": \".py\",\n   \"mimetype\": \"text/x-python\",\n   \"name\": \"python\",\n   \"nbconvert_exporter\": \"python\",\n   \"pygments_lexer\": \"ipython3\",\n   \"version\": \"3.10.9\"\n  }\n },\n \"nbformat\": 4,\n \"nbformat_minor\": 4\n}\n"
  },
  {
    "path": "docs/source/content/examples.rst",
    "content": "Examples\n========\n\nA set of SHARPy examples created with Jupyter Notebooks is provided for users to interact and modify\ncases running on SHARPy.\n\n.. toctree::\n    :maxdepth: 1\n    :caption: SHARPy Examples\n\n    example_notebooks/linear_goland_flutter\n    example_notebooks/nonlinear_t-tail_HALE\n    example_notebooks/linear_horten\n    example_notebooks/wind_turbine\n    example_notebooks/cantilever/static_cantilever\n    example_notebooks/cantilever_wing\n    example_notebooks/UDP_control/tutorial_udp_control\n\nDownloadable files\n------------------\n\n* :download:`./example_notebooks/linear_goland_flutter.ipynb`\n* :download:`./example_notebooks/nonlinear_t-tail_HALE.ipynb`\n* :download:`./example_notebooks/linear_horten.ipynb`\n* :download:`./example_notebooks/wind_turbine.ipynb`\n* :download:`./example_notebooks/cantilever_wing.ipynb`\n* :download:`./example_notebooks/cantilever/static_cantilever.ipynb`\n* :download:`./example_notebooks/UDP_control/tutorial_udp_control.ipynb`\n\nInput data for wind turbine: \n\n* :download:`./example_notebooks/source/type02_db_NREL5MW_v02.xlsx`\n\nInput data for static cantilever:\n\n* :download:`./example_notebooks/cantilever/model_static_cantilever.py`\n\nExternal Scripts UDP control:\n\n* :download:`./example_notebooks/UDP_control/pazy_PID_controller_UDP.py`\n* :download:`./example_notebooks/UDP_control/control_design_script.m`\n\n\n\nNote: some of these examples may need additional files which would be located in the ``./example_notebooks/`` directory. It is recommended that you run these cases directly from there rather than downloading. If you download, make sure you replicate the folder structure such that the examples are capable of finding the required files.\n\n"
  },
  {
    "path": "docs/source/content/faqs.md",
    "content": "# Frequently Asked Questions [FAQs]\n\nOver the years, we have gathered a valuable experience running SHARPy so we would like to collect here a few of the\nmost frequently asked questions we get here to hopefully help other users.\n\nIn addition to the questions listed below, do check the [issues](https://github.com/ImperialCollegeLondon/sharpy/issues?q=is%3Aissue) page in our GitHub repo as you may find useful \ninformation there. Do also check our [Short Debugging Guide](./debug.html).\n\n* __[Q] I get a `ModuleNotFound Error` when trying to run SHARPy.__\n\n    _[A]_ Make sure you have loaded the SHARPy variables using the command `source <path_to_sharpy>/bin_sharpy_var.sh`.\n    \n* __[Q] When plotting the aerodynamic forces in Paraview from the UVLM, the forces at the boundary between two \nsurfaces (for instance at the wing root) appears halved. Is my simulation incorrect?__\n\n    _[A]_ This is most likely not an issue with your simulation. We have observed over time that Paraview actually only\n    plots the result from one of the surfaces, hence why it appears half of what it should be. If you extract the forces\n    without using Paraview using the \n    [WriteVariablesTime](https://ic-sharpy.readthedocs.io/en/master/includes/postprocs/WriteVariablesTime.html) postprocessor you will get the correct result.\n     \n* __[Q] My time-domain simulation does not converge. I get a `SolverNotConverged` error. What can I do?__\n\n    _[A]_ This is quite an open question and it could be for a wide variety of reasons. Things that should be in your \n    First Aid kit for these situations:\n    \n    - Is your tolerance appropriate? If you raise the tolerance to something (maybe unreasonably) high does it \n    converge?\n    \n    - Is your number of iterations sufficient? Increase the number of maximum allowed iterations.\n    \n    - Is there anything happening at all in your simulation? We have all fallen into the trap of trying to run \n    a time domain simulation of something that is already in steady state. I.e. you calculate its static\n    equilibrium and then try to advance in time. Since nothing is happening the convergence criteria in the solvers\n    may not be triggered and reach the maximum number of iterations. Solution: make sure something happens in your time\n    domain simulation: gusts, external forces, control surface deflections...\n    \n    - Are you giving your simulation too much of a \"kick\"? Sometimes we simulate things that dramatically change the\n    state of the problem from one time step to another (like adding very large external forces at once) which may lead\n    to trouble. You can choose to load the forces progressively by increasing the `num_load_steps` setting in our\n    structural solvers.\n    \nHopefully this list will grow over time with some of the common questions previous users encounter. If you cannot solve\nyour problem please open an [issue](https://github.com/ImperialCollegeLondon/sharpy/issues) on Github and assign it the\nlabel `label:question` so we can keep track of it and others can benefit of the discussion."
  },
  {
    "path": "docs/source/content/installation.md",
    "content": "# SHARPy v2.3 Installation Guide\n__Last revision 10 June 2024__\n\nThe following step by step tutorial will guide you through the installation process of SHARPy. This is the updated process valid from v2.3.\n\n## Requirements\n\n__Operating System Requirements__\n\nSHARPy is being developed and tested on the following operating systems:\n* CentOS 7 and CentOS 8\n* Ubuntu 22.04 LTS\n* Debian 12\n* MacOS Mojave and Catalina (Intel)\n* MacOS Sonoma (Apple Silicon M2)\n\nWindows users can also run it by first installing the Windows Subsystem for Linux (https://learn.microsoft.com/en-us/windows/wsl/install) and a XServer such as GWSL, which can be installed through the Microsoft Store. SHARPy is also available to the vast majority of operating systems that are supported by Docker\n\n__Required Distributions__\n\n* Python 3.10 or higher\n* CMake\n* GCC 6.0 or higher, G++, GFortran (all included in Anaconda) \n* Eigen3, BLAS, MKL/LAPACK (all included in Anaconda)\n\nIf the prerequisite packages are not installed and you are not using Anaconda, they can be installed as following on Linux (with a Homebrew equivelent available for Mac installs):\n```bash\nsudo apt install -y cmake g++ gfortran libblas-dev liblapack-dev libeigen3-dev\n```\n\n__Recommended Software__\n\nYou may find the applications below useful, we recommend you use them but cannot provide any direct support.\n\n* [HDFView](https://portal.hdfgroup.org/display/HDFVIEW/HDFView) to read and view `.h5` files. HDF5 is the SHARPy\ninput file format.\n* [Paraview](https://www.paraview.org/) to visualise SHARPy's output.\n\n\nSHARPy can be installed from the source code available on GitHub or you can get it packed in a Docker container.\nIf what you want is to give it a go and run some static or simple dynamic cases (and are familiar with Docker),\nwe recommend the [Docker route](#using-sharpy-from-a-docker-container). If you want to check the code, modify it and\ncompile the libraries with custom flags, build it from source (recommended).\n\n## Building SHARPy from source (release or development builds)\n\nSHARPy can be built from source so that you can get the latest release or (stable) development build.\n\nSHARPy depends on two external libraries, [xbeam](http://github.com/imperialcollegelondon/xbeam) and\n[UVLM](http://github.com/imperialcollegelondon/UVLM). These are included as submodules to SHARPy and therefore\nonce you initialise SHARPy you will also automatically clone the relevant versions of each library.\n\n### Set up the folder structure\n\nClone `sharpy` in your desired location, if you agree with the license in `license.txt`.\n```bash\ngit clone --recursive http://github.com/ImperialCollegeLondon/sharpy\n```\nThe `--recursive` flag will also initialise and update the submodules SHARPy depends on,\n[xbeam](http://github.com/imperialcollegelondon/xbeam) and [UVLM](http://github.com/imperialcollegelondon/UVLM).\n\n\n### Quick install (Standalone)\n\nSHARPy can be installed as a standalone package, without the use of a package manager. If you wish to install using the Anaconda package manager, please use the following tutorial [HERE](#setting-up-the-python-environment-anaconda), or make a custom installation with a develop build or modified compilation settings [HERE](#custom-installation). The quick install is geared towards getting the release build of SHARPy running as quickly and simply as possible. \n\n1. Check that your Python version is 3.10 or higher. Other versions may be incompatible with the required modules.\n    ```bash\n    python --version\n    ```\n    \n2. Move into the cloned repository:\n    ```bash\n    cd sharpy\n    ```\n\n3. Install SHARPy. This will install any required Python packages as well as building the xbeam and UVLM libraries, and may take a  few  minutes.\n    ```bash\n    pip install --user .\n    ```\n   The ```--user``` flag is included for systems without root access (often Linux) as the install will fail otherwise. This flag can be removed when a global install is required, and your machine allows it (works on Mac).\n   \n    There are options for what to install if required. For instance, to install the basic package with documentation, just do ```bash pip install --user .[docs]```. For the whole lot, ```bash pip install --user .[all]```.\n\n4. You can check the version of SHARPy you are running with:\n    ```bash\n    sharpy --version\n    ```\n\n__You are ready to run SHARPy__. Continue reading the [Running SHARPy](#running-sharpy) section.\n\n### Setting up the Python Environment (Anaconda)\n\nSHARPy can use the Anaconda package manager to provide the necessary Python packages.\nThese are specified in an Anaconda environment that shall be activated prior to compiling the xbeam and UVLM libraries or running any SHARPy cases.\n\n1. If you still do not have it in your system, install the [Anaconda](https://conda.io/docs/) Python 3 distribution.\n\n2. Check that your Python version is at least 3.10:\n    ```bash\n    python --version\n    ```\n3. If a specific python version is required, for example 3.10, use:\n\n    ```bash\n    conda install python=3.10\n    ```\n   \n4. Create the conda environment that SHARPy will use:\n\n    ```bash\n    conda env create -f environment.yml\n    ```\n    This should take approximately 5 minutes to complete (Tested on Ubuntu 22.04.1). For installation on Apple Silicon, use ```environment_arm64.yml```; this requires GCC and GFortran to be installed prior.\n\n   Installation using Conda can be memory intensive, and will give the message ```Collecting package metadata (repodata.json): - Killed``` if all the available RAM is filled. From testing, 16GB of total system RAM is reliable for Conda install, whereas 8GB may have issues. Three solutions are available:\n   * Increase available RAM (if running on a compute cluster etc)\n   * Use [Mamba](https://mamba.readthedocs.io/en/latest/), a more efficient drop-in replacement for Conda\n   * Create a blank conda environment and install the required packages:\n     \t```bash\n      conda create --name sharpy python=3.10\n      conda config –add channels conda-forge\n      conda install eigen libopenblas libblas libcblas liblapack libgfortran libgcc libgfortran-ng\n      ```\n      \n6. Activate the `sharpy` conda environment:\n    ```bash\n    conda activate sharpy\n    ```\n    You should now see ```(sharpy)``` on your command line. \n\n\n### Quick install (Anaconda)\nThe quick install is geared towards getting the release build of SHARPy running as quickly and simply as possible.\n1. Move into the cloned repository:\n    ```bash\n    cd sharpy\n    ```\n\n2. Ensure that the SHARPy environment is active in the session. Your terminal prompt line should begin with:\n    ```bash\n    (sharpy) [usr@host] $\n    ```\n\n3. Install SHARPy. This will install any required Python packages as well as building the xbeam and UVLM libraries, and may take a few minutes.\n    ```bash\n    pip install --user .\n    ```\n   The ```--user``` flag is included for systems without root access (often Linux) as the install will fail otherwise. This flag can be removed when a global install is required, and your machine allows it (works on Mac).\n   \n   There are options for what to install if required. For instance, to install the basic package with documentation, just do ```bash pip install --user .[docs]```. For the whole lot, ```bash pip install --user .[all]```.\n\n4. You can check the version of SHARPy you are running with:\n    ```bash\n    sharpy --version\n    ```\n\nIf running SHARPy from Anaconda, you need to load the conda environment. Therefore, __before you run any SHARPy case or test__, activate the SHARPy conda environment: \n```bash\nconda activate sharpy\n```\n\n__You are ready to run SHARPy__. Continue reading the [Running SHARPy](#running-sharpy) section.\n\n### Custom installation\n\nThese steps will show you how to compile the xbeam and UVLM libraries such that you can modify the compilation settings\nto your taste. This is compatible with both standalone and Anaconda installations.\n\n1. If you want to use SHARPy's latest release, skip this step. If you would like to use the latest development work,\n   you will need to checkout the `develop` branch. For more info on how we structure our development and what branches\n   are used for what kind of features have a look at the [Contributing](contributing.html) page.\n    ```bash\n    git checkout develop\n    git submodule update --recursive\n    ```\n    This command will check out the `develop` branch and set it to track the remote origin. It will also set the submodules (xbeam and UVLM) to the right commit.\n\n2. If using Anaconda, create the conda environment that SHARPy will use and activate the environment:\n    ```bash\n    conda env create -f environment.yml\n    ```\n\n    ```bash\n    conda activate sharpy\n    ```\n\n4. Create a directory `build` that will be used during CMake's building process and `cd` into it:\n    ```bash\n    mkdir build\n    cd build\n    ```\n\n5. Run CMake with custom flags:\n    1. Choose your compilers for Fortran `FC` and C++ `CXX`, for instance:\n        ```bash\n        FC=gfortran CXX=g++ cmake ..\n        ```\n        If you'd like to use the Intel compilers you can set them using:\n        ```bash\n        FC=ifort CXX=icpc cmake ..\n        ```\n    2. Alternatively, you can build the libraries in debug mode with the following flag for cmake:\n        ```bash\n        -DCMAKE_BUILD_TYPE=Debug\n        ```\n\n6. Compile the libraries and parallelise as you prefer.\n    ```bash\n    make install -j 4\n    ```\n\n7. Finally, leave the build directory and install SHARPy.\n    ```bash\n    cd ..\n    pip install .\n    ```\n    If you want to install it in development mode (the source files will stay\n    where the are so you can modify them), you can make an editable install:\n    ```\n    pip install -e .\n    ```\n    You can obtain further information on editable installs [here](https://pip.pypa.io/en/stable/cli/pip_install/#editable-installs)\n\n8. This concludes the installation! Continue reading the [Running SHARPy](#running-sharpy) section.\n\n## Using SHARPy from a Docker container\n\n> **Tip** To install the Python environment, miniconda needs approximatelly 16GB of\n> memory. It is recommended to have at least that amount available for the\n> container in which you are building SHARPy.\n\nDocker containers are similar to lightweight virtual machines. The SHARPy container\ndistributed through [Docker Hub](https://hub.docker.com/) is a CentOS 8\nmachine with the libraries compiled with `gfortran` and `g++` and an\nAnaconda Python distribution.\n\nMake sure your machine has Docker working. The instructions are here:\n[link](https://docs.docker.com/v17.09/engine/installation/).\n\nYou might want to run a test in your terminal:\n```\ndocker pull hello-world\ndocker run hello-world\n```\nIf this works, you're good to go!\n\nFirst, obtain the SHARPy docker container:\n```\ndocker pull ghcr.io/imperialcollegelondon/sharpy:main\n```\nYou can obtain other versions as well, check those available in the [containers](https://github.com/ImperialCollegeLondon/sharpy/pkgs/container/sharpy) page.\n\nThis will donwload a Docker image of SHARPy to your machine, from where you can create and run Docker containers. To create and run a container from the downloaded image use:\n\n```\ndocker run --name sharpy -it -p 8080:8080 ghcr.io/imperialcollegelondon/sharpy:main\n```\n\nA few details about the above command, although if in doubt please check the Docker documentation. The `--name` argument gives a name to the container. Note you can create multiple containers from a single image. \n\nThe `-it` is an important command as it runs the container in interactive mode with a terminal attached. Thus you can use it an navigate it. Otherwise the container will finish as soon as it is created. \n\nThe `-p 8080:8080` argument connects the container to your machine through port `8080` (it could be any other) which may be useful for some applications. For instance, running SHARPy as hardware-in-the-loop through UDP.\n\nOnce you run it, you should see a welcome dialog such as:\n```\n>>>> docker run --name sharpy -it -p 8080:8080 ghcr.io/imperialcollegelondon/sharpy:main\nSHARPy added to PATH from the directory: /sharpy_dir/bin\n=======================================================================\nWelcome to the Docker image of SHARPy\nSHARPy is located in /sharpy_dir/ and the\nenvironment is already set up!\nCopyright Imperial College London. Released under BSD 3-Clause license.\n=======================================================================\nSHARPy>\n```\nYou are now good to go.\n\nYou can check the version of SHARPy you are running with\n```\nsharpy --version\n```\n\nIt is important to note that a docker container runs as an independent\noperating system with no access to your hard drive. If you want to copy your own\nfiles, run the container and from another terminal run:\n```\ndocker cp my_file.txt sharpy:/my_file.txt     # copy from host to container\ndocker cp sharpy:/my_file.txt my_file.txt     # copy from container to host\n```\nThe `sharpy:` part is the `--name` argument you wrote in the `docker run` command.\n\n**Enjoy!**\n\n## Testing with Docker\n\nYou can run the test suite once inside the container as:\n```\ncd sharpy_dir\npython -m unittest\n```\n\n**Enjoy!**\n\n## Obtain SHARPy from PyPI (experimental!)\n\nYou can obtain a built version of SHARPy, ic-sharpy, from PyPI [here](https://pypi.org/project/ic-sharpy/).\n\nTo install at default directory use\n```\npython3 -m pip install ic-sharpy\n```\nTo install at current directory use\n```\npython3 -m pip install --prefix . ic-sharpy\n```\nThe source code can be found at `/lib/python3.10/site-packages/sharpy` and the executable at `/bin/sharpy`.\n\n## Running SHARPy\n\n### Automated tests\n\nSHARPy uses unittests to verify the integrity of the code.\n\nThese tests can be run from the `./sharpy` directory.\n```bash\npython -m unittest\n```\nThe tests will run and you should see a success message. If you don't... check the following options:\n* Check you are running the latest version. Running the following from the root directory should update to the\nlatest release version:\n    - `git pull`\n    - `git submodule update --init --recursive`\n* If the tests don't run, make sure you have followed correctly the instructions and that you managed to compile xbeam\nand UVLM.\n* If some tests fail, i.e. you get a message after the tests run saying that certain tests did not pass, please open\nan [issue](http://www.github.com/imperialcollegelondon/sharpy/issues) with the following information:\n    - Operating system\n    - Whether you did a Custom/quick install\n    - UVLM and xbeam compiler of choice\n    - A log of the tests that failed\n\n### The SHARPy Case Structure and input files\n\n__Setting up a SHARPy case__\n\nSHARPy cases are usually structured in the following way:\n\n1. A `generate_case.py` file: contains the setup of the problem like geometry, flight conditions etc.\nThis script creates the output files that will then be used by SHARPy, namely:\n    * The [structural](./casefiles.html#fem-file) `.fem.h5` file.\n    * The [aerodynamic](./casefiles.html#aerodynamics-file) `.aero.h5` file.\n    * [Simulation information](./casefiles.html#solver-configuration-file) and settings `.sharpy` file.\n    * The dynamic forces file `.dyn.h5` (when required).\n    * The linear input files `.lininput.h5` (when required).\n    * The ROM settings file `.rom.h5` (when required).\n\n    See the [chapter](./casefiles.html) on the case files for a detailed description on the contents of each one.\n    Data is exchanged in binary format by means of `.h5` files that make the transmission efficient between the different\n    languages of the required libraries. To view these `.h5` files, a viewer like [HDF5](https://portal.hdfgroup.org/display/support) is recommended.\n\n2. The `h5` files contain data of the FEM, aerodynamics, dynamic conditions. They are later read by SHARPy.\n\n3. The `.sharpy` file contains the settings for SHARPy and is the file that is parsed to SHARPy.\n\n__To run a SHARPy case__\n\nSHARPy cases are therefore usually ran in the following way:\n\n1. Create a `generate_case.py` file following the provided templates.\n\n2. Run it to produce the `.h5` files and the `.sharpy` files.\n    ```bash\n    python generate_case.py\n    ```\n\n3. Run SHARPy (ensure the environment is activated).\n    ```bash\n    sharpy case.sharpy\n    ```\n\n#### Output\n\nBy default, the output is located in the `output` folder.\n\nThe contents of the folder will typically be a `beam` and `aero` folders, which contain the output data that can then be\nloaded in Paraview. These are the `.vtu` format files that can be used with [Paraview](https://www.paraview.org/).\n\n\n### Running (and modifiying) a test case\n\n1.  This command generates the required files for running a static, clamped beam case that is used as part of code\nverification:\n    ```sh\n    cd ../sharpy\n    python ./tests/xbeam/geradin/generate_geradin.py\n    ```\n\nNow you should see a success message, and if you check the\n`./tests/xbeam/geradin/` folder, you should see two new files:\n+ geradin_cardona.sharpy\n+ geradin_cardona.fem.h5\n\nTry to open the `sharpy` file with a plain text editor and have a quick look. The `sharpy` file is\nthe main settings file. We'll get deeper into this later.\n\nIf you try to open the `fem.h5` file, you'll get an error or something meaningless. This is because the structural data\nis stored in [HDF5](https://support.hdfgroup.org/HDF5/) format, which is compressed binary.\n\n5. Run it (part 1)\n\n    The `sharpy` call is:\n    ```bash\n    sharpy <path to solver file>\n    ```\n\n6. Results (part 1)\n\n    Since this is a test case, there is no output directly to screen.\n\n    We will therefore change this setting first.\n    In the `generate_geradin.py` file, look for the `SHARPy` setting `write_screen` and set it to `on`. This will\n    output the progress of the execution to the terminal.\n\n    We would also like to create a Paraview file to view the beam deformation. Append the post-processor `BeamPlot` to\n    the end of the `SHARPy` setting `flow`, which is a list. This will run the post-processor and plot the beam in Paraview format with the settings specified in\n    the `generate_geradin.py` file under `config['BeamPlot]`.\n\n7. Run (part 2)\n\n    Now that we have made these modifications, run again the generation script:\n    ```sh\n    python ./tests/xbeam/geradin/generate_geradin.py\n    ```\n\n    Check the solver file `geradin.sharpy` and look for the settings we just changed. Make sure they read what we wanted.\n\n\n    You are now ready to run the case again:\n    ```bash\n    sharpy <path to solver file>\n    ```\n\n8. Post-processing\n\n    After a successful execution, you should a long display of information in the terminal as the case is being\n    executed.\n\n    The deformed beam will have been written in a `.vtu` file and will be located in the `output/` folder (or where\n    you specified in the settings) which you can open using Paraview.\n\n    In the `output` directory you will also note a folder named `WriteVariablesTime` which outputs certain variables\n    as a function of time to a `.dat` file. In this case, the beam tip position deflection and rotation is written.\n    Check the values of those files and look for the following result:\n    ```\n\t    Pos_def:\n\t\t      4.403530 0.000000 -2.159692\n\t    Psi_def:\n\t\t      0.000000 0.672006 0.000000\n    ```\n    FYI, the correct solution for this test case by Geradin and Cardona is\n    `Delta R_3 = -2.159 m` and `Psi_2 = 0.6720 rad`.\n\nCongratulations, you've run your first case. You can now check the [Examples](examples.html) section for further cases.\n"
  },
  {
    "path": "docs/source/content/postproc.rst",
    "content": "Post-Processing\n---------------\n\n.. toctree::\n    :glob:\n\n    ../includes/postprocs/*"
  },
  {
    "path": "docs/source/content/publications.md",
    "content": "# Publications\n\nSHARPy has been used in many technical papers that have been both published in Journals and presented at conferences.\nHere we present a list of past papers which have used SHARPy for research purposes:\n\n## 2022\n\n* Goizueta, N. (2022). Parametric reduced-order aeroelastic modelling for analysis, dynamic system interpolation and control of flexible aircraft. PhD Thesis. [http://doi.org/10.25560/100137](http://doi.org/10.25560/100137)\n\n* Goizueta, N., Wynn, A., & Palacios, R. (2022). Adaptive sampling for interpolation of reduced-order aeroelastic dynamical systems. AIAA Journal. Article in Advance. [https://doi.org/10.2514/1.J062050](https://doi.org/10.2514/1.J062050)\n\n* Muñoz Simón, A. (2022). Vortex-lattice-based nonlinear aeroservoelastic modelling and analysis of large floating wind turbines. PhD Thesis. [https://doi.org/10.25560/96986](https://doi.org/10.25560/96986)\n\n* Goizueta, N., Wynn, A., Palacios, R., Drachinsky, A., & Raveh, D. E. (2022). Flutter Predictions for Very Flexible Wing Wind Tunnel Test. Journal of Aircraft: 59(4), pp. 1082-1097. [https://doi.org/10.2514/1.C036710](https://doi.org/10.2514/1.C036710)\n\n* Düssler, S., Goizueta, N., Muñoz-Simón, A., &#38; Palacios, R. (2022). Modelling and Numerical Enhancements on a UVLM for Nonlinear Aeroelastic Simulation. AIAA SciTech Forum. [https://doi.org/10.2514/6.2022-2455](https://doi.org/10.2514/6.2022-2455)\n\n* Cea, A., Palacios, R. (2022). Parametric Reduced Order Models for Aeroelastic Design of Very Flexible Aircraft. AIAA SciTech Forum. [https://doi.org/10.2514/6.2022-0727](https://doi.org/10.2514/6.2022-0727)\n\n* Wynn, A., Artola, M., Palacios, R. (2022). Nonlinear optimal control for gust load alleviation with a physics-constrained data-driven internal model. AIAA SciTech Forum. [https://doi.org/10.2514/6.2022-0442](https://doi.org/10.2514/6.2022-0442)\n\n* Goizueta, N., Wynn, A., Palacios, R. (2022). Fast flutter evaluation of very flexible wing using interpolation on an optimal training dataset. In AIAA SciTech Forum, AIAA Paper 2022-1345. [https://doi.org/10.2514/6.2022-1345](https://doi.org/10.2514/6.2022-1345)\n\n## 2021\n\n* Artola, M., Goizueta, N., Wynn, A., & Palacios, R. (2021). Aeroelastic Control and Estimation with a Minimal \nNonlinear Modal Description. AIAA Journal: 59(7), pp. 2697–2713. [https://doi.org/10.2514/1.j060018](https://doi.org/10.2514/1.j060018)\n\n* Artola, M., Goizueta, N., Wynn, A., & Palacios, R. (2021). Proof of Concept for a Hardware-in-the-Loop Nonlinear. \nIn AIAA SciTech Forum (pp. 1–26). [https://doi.org/10.2514/6.2021-1392](https://doi.org/10.2514/6.2021-1392)\n\n* Goizueta, N., Drachinsky, A., Wynn, A., Raveh, D. E., & Palacios, R. (2021). Flutter prediction for a very \nflexible wing wind tunnel test. In AIAA SciTech Forum (pp. 1–17). \n[https://doi.org/10.2514/6.2021-1711](https://doi.org/10.2514/6.2021-1711)\n\n* Goizueta, N., Wynn, A., & Palacios, R. (2021). Parametric Krylov-based order reduction of aircraft aeroelastic \nmodels. In AIAA SciTech Forum (pp. 1–25). [https://doi.org/10.2514/6.2021-1798](https://doi.org/10.2514/6.2021-1798)\n\n## 2020\n\n* del Carre, A. (2020). Aeroelasticity of very flexible aircraft at low altitudes. PhD Thesis. [https://doi.org/10.25560/88269](https://doi.org/10.25560/88269)\n\n* Muñoz-Simón, A., Palacios, R., & Wynn, A. (2020). Benchmarking different fidelities in wind turbine aerodynamics \nunder yaw. Journal of Physics: Conference Series, 1618, 42017. \n[https://doi.org/10.1088/1742-6596/1618/4/042017](https://doi.org/10.1088/1742-6596/1618/4/042017)\n\n* del Carre, A., & Palacios, R. (2020). Simulation and Optimization of Takeoff Maneuvers of Very Flexible Aircraft. \nJournal of Aircraft: 57(6)\n1097-1110. [https://doi.org/10.2514/1.C035901](https://doi.org/10.2514/1.C035901)\n\n* Maraniello, S. & Palacios, R. (2020). Parametric Reduced-Order Modeling of the Unsteady Vortex-Lattice Method. \nAIAA Journal, 58(5), 2206-2220. [https://doi.org/10.2514/1.J058894](https://doi.org/10.2514/1.J058894)\n\n* Deskos, G., del Carre, A., & Palacios, R. (2020). Assessment of low-altitude atmospheric \nturbulence models for aircraft aeroelasticity. Journal of Fluids and Structures, 95, 102981.\n[https://doi.org/10.1016/j.jfluidstructs.2020.102981](https://doi.org/10.1016/j.jfluidstructs.2020.102981)\n\n* Goizueta, Norberto, del Carre, Alfonso, Muñoz-Simón, Arturo, & Palacios, Rafael. (2020, February). \nSHARPy: from a research code to an open-source software tool for the simulation of very flexible aircraft. \nRSLondonSouthEast 2020 Conference.\nZenodo: [http://doi.org/10.5281/zenodo.3641216](http://doi.org/10.5281/zenodo.3641216)\n\n* Del Carre, A., Deskos, G., & Palacios, R. (2020). Realistic turbulence effects in low altitude dynamics of very \nflexible aircraft. In AIAA SciTech Forum (pp. 1–18). \n[https://doi.org/10.2514/6.2020-1187](https://doi.org/10.2514/6.2020-1187)\n\n* Artola, M., Goizueta, N., Wynn, A., & Palacios, R. (2020). Modal-Based Nonlinear Estimation and Control for Highly \nFlexible Aeroelastic Systems. In AIAA SciTech Forum (pp. 1–23). \n[https://doi.org/10.2514/6.2020-1192](https://doi.org/10.2514/6.2020-1192)\n\n* Muñoz-Simón, A., Wynn, A., & Palacios, R. (2020). Unsteady and three-dimensional aerodynamic effects on wind turbine \nrotor loads. In AIAA SciTech Forum. [https://doi.org/10.2514/6.2020-0991](https://doi.org/10.2514/6.2020-0991)\n\n## 2019\n\n* del Carre, A., Muñoz-Simón, A., Goizueta, N., & Palacios, R. (2019). SHARPy : A dynamic aeroelastic simulation toolbox \nfor very flexible aircraft and wind turbines. Journal of Open Source \nSoftware, 4(44), 1885. [https://doi.org/10.21105/joss.01885](https://doi.org/10.21105/joss.01885)\n\n* del Carre, A., Teixeira, P. C., Palacios, R., & Cesnik, C. E. S. (2019). Nonlinear Response of a Very Flexible \nAircraft Under Lateral Gust. In International Forum on Aeroelasticity and Structural Dynamics.\n\n* del Carre, A., & Palacios, R. (2019). Efficient Time-Domain Simulations in Nonlinear Aeroelasticity. In AIAA Scitech \nForum (pp. 1–20). [https://doi.org/10.2514/6.2019-2038](https://doi.org/10.2514/6.2019-2038)\n\n* Maraniello, S., & Palacios, R. (2019). State-Space Realizations and Internal Balancing in Potential-Flow Aerodynamics \nwith Arbitrary Kinematics. AIAA Journal, 57(6), 2308-2321. \n[https://doi.org/10.2514/1.J058153](https://doi.org/10.2514/1.J058153)\n"
  },
  {
    "path": "docs/source/content/solvers.rst",
    "content": "SHARPy Solvers\n------------------\n\nThe available SHARPy solvers are listed below. Attending to SHARPy's modular structure, they can be run\nindependently so the order in which you desire to run them is important.\n\nThe starting point is the PreSharpy loader. It contains the simulation configuration and which solvers are to be run\nand in the order that should happen.\n\n.. toctree::\n    :glob:\n\n    ../includes/solvers/*\n\n"
  },
  {
    "path": "docs/source/content/test_cases.rst",
    "content": "``SHARPy`` Test Cases\n---------------------\n\nThe following test cases are provided as a tutorial and introduction to ``SHARPy`` as well as for code validation purposes.\n\n* Geradin and Cardona Beam - See Installation_ and see test case in ``./sharpy/tests/xbeam/``\n\n.. _Installation: https://ic-sharpy.readthedocs.io/en/dev_doc/content/installation.html#running-and-modifiying-a-test-case\n\n"
  },
  {
    "path": "docs/source/includes/aero/index.rst",
    "content": "Aerodynamic Packages\n--------------------\n\n\n.. toctree::\n\t:maxdepth: 1\n\n\t./models/index\n\t./utils/index\n"
  },
  {
    "path": "docs/source/includes/aero/models/aerogrid/AeroTimeStepInfo.rst",
    "content": "AeroTimeStepInfo\n----------------\n\n.. autoclass:: sharpy.aero.models.aerogrid.AeroTimeStepInfo\n\t:members:"
  },
  {
    "path": "docs/source/includes/aero/models/aerogrid/Aerogrid.rst",
    "content": "Aerogrid\n--------\n\n.. autoclass:: sharpy.aero.models.aerogrid.Aerogrid\n\t:members:"
  },
  {
    "path": "docs/source/includes/aero/models/aerogrid/generate_strip.rst",
    "content": "generate_strip\n--------------\n\n.. automodule:: sharpy.aero.models.aerogrid.generate_strip"
  },
  {
    "path": "docs/source/includes/aero/models/aerogrid/index.rst",
    "content": "Aerogrid\n++++++++\n\n\nAerogrid contains all the necessary routines to generate an aerodynamic\ngrid based on the input dictionaries.\n\n\n.. toctree::\n\t:glob:\n\n\t./AeroTimeStepInfo\n\t./Aerogrid\n\t./generate_strip\n"
  },
  {
    "path": "docs/source/includes/aero/models/index.rst",
    "content": "Models\n------\n\n.. toctree::\n\t:maxdepth: 1\n\n\t./aerogrid/index\n"
  },
  {
    "path": "docs/source/includes/aero/utils/airfoilpolars/Polar.rst",
    "content": "Polar\n-----\n\n.. autoclass:: sharpy.aero.utils.airfoilpolars.Polar\n\t:members:"
  },
  {
    "path": "docs/source/includes/aero/utils/airfoilpolars/index.rst",
    "content": ".. toctree::\n\t:glob:\n\n\t./Polar\n"
  },
  {
    "path": "docs/source/includes/aero/utils/index.rst",
    "content": "Aerodynamic Utilities\n---------------------\n\n\n.. toctree::\n\t:maxdepth: 1\n\n\t./airfoilpolars/index\n\t./mapping/index\n"
  },
  {
    "path": "docs/source/includes/aero/utils/mapping/aero2struct_force_mapping.rst",
    "content": "aero2struct_force_mapping\n-------------------------\n\n.. automodule:: sharpy.aero.utils.mapping.aero2struct_force_mapping"
  },
  {
    "path": "docs/source/includes/aero/utils/mapping/index.rst",
    "content": "Force Mapping Utilities\n+++++++++++++++++++++++\n\n\n\n.. toctree::\n\t:glob:\n\n\t./aero2struct_force_mapping\n\t./total_forces_moments\n"
  },
  {
    "path": "docs/source/includes/aero/utils/mapping/total_forces_moments.rst",
    "content": "total_forces_moments\n--------------------\n\n.. automodule:: sharpy.aero.utils.mapping.total_forces_moments"
  },
  {
    "path": "docs/source/includes/cases/coupled/X-HALE/generate_xhale/generate_naca_camber.rst",
    "content": "generate_naca_camber\n--------------------\n\n.. automodule:: sharpy.cases.coupled.X-HALE.generate_xhale.generate_naca_camber"
  },
  {
    "path": "docs/source/includes/cases/coupled/X-HALE/generate_xhale/generate_solver_file.rst",
    "content": "generate_solver_file\n--------------------\n\n.. automodule:: sharpy.cases.coupled.X-HALE.generate_xhale.generate_solver_file"
  },
  {
    "path": "docs/source/includes/cases/coupled/X-HALE/generate_xhale/index.rst",
    "content": ".. toctree::\n\t:glob:\n\n\t./generate_naca_camber\n\t./generate_solver_file\n\t./read_beam_data\n"
  },
  {
    "path": "docs/source/includes/cases/coupled/X-HALE/generate_xhale/read_beam_data.rst",
    "content": "read_beam_data\n--------------\n\n.. automodule:: sharpy.cases.coupled.X-HALE.generate_xhale.read_beam_data"
  },
  {
    "path": "docs/source/includes/cases/coupled/X-HALE/index.rst",
    "content": "X-hale\n------\n\n.. toctree::\n\t:maxdepth: 1\n\n\t./generate_xhale/index\n"
  },
  {
    "path": "docs/source/includes/cases/coupled/index.rst",
    "content": "Coupled\n-------\n\n.. toctree::\n\t:maxdepth: 1\n\n\t./X-HALE/index\n"
  },
  {
    "path": "docs/source/includes/cases/hangar/horten_wing/HortenWing.rst",
    "content": "HortenWing\n----------\n\n.. autoclass:: sharpy.cases.hangar.horten_wing.HortenWing\n\t:members:"
  },
  {
    "path": "docs/source/includes/cases/hangar/horten_wing/index.rst",
    "content": "Horten Wing Class Generator\n+++++++++++++++++++++++++++\n\nHorten Wing Class Generator\nN Goizueta Nov 18\n\n\n.. toctree::\n\t:glob:\n\n\t./HortenWing\n"
  },
  {
    "path": "docs/source/includes/cases/hangar/index.rst",
    "content": "Hangar\n------\n\n.. toctree::\n\t:maxdepth: 1\n\n\t./horten_wing/index\n\t./richards_wing/index\n\t./swept_flying_wing/index\n"
  },
  {
    "path": "docs/source/includes/cases/hangar/richards_wing/HortenWing.rst",
    "content": "HortenWing\n----------\n\n.. autoclass:: sharpy.cases.hangar.richards_wing.HortenWing\n\t:members:"
  },
  {
    "path": "docs/source/includes/cases/hangar/richards_wing/index.rst",
    "content": "Simple Horten Wing as used by Richards. Baseline and simplified models\n++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\n\nSimple Horten Wing as used by Richards. Baseline and simplified models\n\nRichards, P. W., Yao, Y., Herd, R. A., Hodges, D. H., & Mardanpour, P. (2016). Effect of Inertial and Constitutive\nProperties on Body-Freedom Flutter for Flying Wings. Journal of Aircraft. https://doi.org/10.2514/1.C033435\n\n\n.. toctree::\n\t:glob:\n\n\t./HortenWing\n"
  },
  {
    "path": "docs/source/includes/cases/hangar/swept_flying_wing/SweptWing.rst",
    "content": "SweptWing\n---------\n\n.. autoclass:: sharpy.cases.hangar.swept_flying_wing.SweptWing\n\t:members:"
  },
  {
    "path": "docs/source/includes/cases/hangar/swept_flying_wing/index.rst",
    "content": "Generic Swept Flying Wing Class Generator\n+++++++++++++++++++++++++++++++++++++++++\n\nGeneric Swept Flying Wing Class Generator\nN Goizueta Nov 18\n\n\n.. toctree::\n\t:glob:\n\n\t./SweptWing\n"
  },
  {
    "path": "docs/source/includes/cases/index.rst",
    "content": "Cases\n-----\n\n.. toctree::\n\t:maxdepth: 1\n\n\t./coupled/index\n\t./hangar/index\n\t./templates/index\n"
  },
  {
    "path": "docs/source/includes/cases/templates/Ttail/Ttail_3beams.rst",
    "content": "Ttail_3beams\n------------\n\n.. autoclass:: sharpy.cases.templates.Ttail.Ttail_3beams\n\t:members:"
  },
  {
    "path": "docs/source/includes/cases/templates/Ttail/Ttail_canonical.rst",
    "content": "Ttail_canonical\n---------------\n\n.. autoclass:: sharpy.cases.templates.Ttail.Ttail_canonical\n\t:members:"
  },
  {
    "path": "docs/source/includes/cases/templates/Ttail/index.rst",
    "content": "Templates to build T-tail models\n++++++++++++++++++++++++++++++++\n\nTemplates to build T-tail models\nS. Maraniello, Oct 2018\n\nclasses:\n- Ttail_3beam allows to generate general T-tail models with 3-beam.\n- Ttail_canonical:  builds the canonical test case as per\n    Murua et al., Prog. Aerosp. Sci., 71 (2014) 54-84\n\n\n.. toctree::\n\t:glob:\n\n\t./Ttail_3beams\n\t./Ttail_canonical\n"
  },
  {
    "path": "docs/source/includes/cases/templates/flying_wings/FlyingWing.rst",
    "content": "FlyingWing\n----------\n\n.. autoclass:: sharpy.cases.templates.flying_wings.FlyingWing\n\t:members:"
  },
  {
    "path": "docs/source/includes/cases/templates/flying_wings/Goland.rst",
    "content": "Goland\n------\n\n.. autoclass:: sharpy.cases.templates.flying_wings.Goland\n\t:members:"
  },
  {
    "path": "docs/source/includes/cases/templates/flying_wings/Pazy.rst",
    "content": "Pazy\n----\n\n.. autoclass:: sharpy.cases.templates.flying_wings.Pazy\n\t:members:"
  },
  {
    "path": "docs/source/includes/cases/templates/flying_wings/QuasiInfinite.rst",
    "content": "QuasiInfinite\n-------------\n\n.. autoclass:: sharpy.cases.templates.flying_wings.QuasiInfinite\n\t:members:"
  },
  {
    "path": "docs/source/includes/cases/templates/flying_wings/Smith.rst",
    "content": "Smith\n-----\n\n.. autoclass:: sharpy.cases.templates.flying_wings.Smith\n\t:members:"
  },
  {
    "path": "docs/source/includes/cases/templates/flying_wings/index.rst",
    "content": "Templates to build flying wing models\n+++++++++++++++++++++++++++++++++++++\n\nTemplates to build flying wing models\nS. Maraniello, Jul 2018\n\nclasses:\n- FlyingWing: generate a flying wing model from a reduced set of input. The\nbuilt in method 'update_mass_stiff' can be re-defined by the user to enter more\ncomplex inertial/stiffness properties\n- Smith(FlyingWing): generate HALE wing model\n- Goland(FlyingWing): generate Goland wing model\n\n\n.. toctree::\n\t:glob:\n\n\t./FlyingWing\n\t./Goland\n\t./Pazy\n\t./QuasiInfinite\n\t./Smith\n"
  },
  {
    "path": "docs/source/includes/cases/templates/index.rst",
    "content": "Templates\n---------\n\n.. toctree::\n\t:maxdepth: 1\n\n\t./Ttail/index\n\t./flying_wings/index\n\t./template_wt/index\n"
  },
  {
    "path": "docs/source/includes/cases/templates/template_wt/create_blade_coordinates.rst",
    "content": "create_blade_coordinates\n------------------------\n\n.. automodule:: sharpy.cases.templates.template_wt.create_blade_coordinates"
  },
  {
    "path": "docs/source/includes/cases/templates/template_wt/create_node_radial_pos_from_elem_centres.rst",
    "content": "create_node_radial_pos_from_elem_centres\n----------------------------------------\n\n.. automodule:: sharpy.cases.templates.template_wt.create_node_radial_pos_from_elem_centres"
  },
  {
    "path": "docs/source/includes/cases/templates/template_wt/generate_from_excel_type03.rst",
    "content": "generate_from_excel_type03\n--------------------------\n\n.. automodule:: sharpy.cases.templates.template_wt.generate_from_excel_type03"
  },
  {
    "path": "docs/source/includes/cases/templates/template_wt/index.rst",
    "content": "template_wt\n+++++++++++\n\ntemplate_wt\n\nFunctions needed to generate a wind turbines\n\nNotes:\n    To load this library: import cases.templates.template_wt as template_wt\n\n\n.. toctree::\n\t:glob:\n\n\t./create_blade_coordinates\n\t./create_node_radial_pos_from_elem_centres\n\t./generate_from_excel_type03\n\t./rotor_from_excel_type03\n\t./spar_from_excel_type04\n"
  },
  {
    "path": "docs/source/includes/cases/templates/template_wt/rotor_from_excel_type03.rst",
    "content": "rotor_from_excel_type03\n-----------------------\n\n.. automodule:: sharpy.cases.templates.template_wt.rotor_from_excel_type03"
  },
  {
    "path": "docs/source/includes/cases/templates/template_wt/spar_from_excel_type04.rst",
    "content": "spar_from_excel_type04\n----------------------\n\n.. automodule:: sharpy.cases.templates.template_wt.spar_from_excel_type04"
  },
  {
    "path": "docs/source/includes/controllers/controlsurfacepidcontroller/ControlSurfacePidController.rst",
    "content": "ControlSurfacePidController\n---------------------------\n\n.. autoclass:: sharpy.controllers.controlsurfacepidcontroller.ControlSurfacePidController\n\t:members:"
  },
  {
    "path": "docs/source/includes/controllers/controlsurfacepidcontroller/index.rst",
    "content": ".. toctree::\n\t:glob:\n\n\t./ControlSurfacePidController\n"
  },
  {
    "path": "docs/source/includes/controllers/index.rst",
    "content": "Controllers\n-----------\n\n.. toctree::\n\t:maxdepth: 1\n\n\t./controlsurfacepidcontroller/index\n\t./takeofftrajectorycontroller/index\n"
  },
  {
    "path": "docs/source/includes/controllers/takeofftrajectorycontroller/TakeOffTrajectoryController.rst",
    "content": "TakeOffTrajectoryController\n---------------------------\n\n.. autoclass:: sharpy.controllers.takeofftrajectorycontroller.TakeOffTrajectoryController\n\t:members:"
  },
  {
    "path": "docs/source/includes/controllers/takeofftrajectorycontroller/index.rst",
    "content": ".. toctree::\n\t:glob:\n\n\t./TakeOffTrajectoryController\n"
  },
  {
    "path": "docs/source/includes/generators/bumpvelocityfield/BumpVelocityField.rst",
    "content": "BumpVelocityField\n-----------------\n\n.. autoclass:: sharpy.generators.bumpvelocityfield.BumpVelocityField\n\t:members:"
  },
  {
    "path": "docs/source/includes/generators/bumpvelocityfield/index.rst",
    "content": ".. toctree::\n\t:glob:\n\n\t./BumpVelocityField\n"
  },
  {
    "path": "docs/source/includes/generators/dynamiccontrolsurface/DynamicControlSurface.rst",
    "content": "DynamicControlSurface\n---------------------\n\n.. autoclass:: sharpy.generators.dynamiccontrolsurface.DynamicControlSurface\n\t:members:"
  },
  {
    "path": "docs/source/includes/generators/dynamiccontrolsurface/index.rst",
    "content": ".. toctree::\n\t:glob:\n\n\t./DynamicControlSurface\n"
  },
  {
    "path": "docs/source/includes/generators/floatingforces/FloatingForces.rst",
    "content": "FloatingForces\n--------------\n\n.. autoclass:: sharpy.generators.floatingforces.FloatingForces\n\t:members:"
  },
  {
    "path": "docs/source/includes/generators/floatingforces/change_of_to_sharpy.rst",
    "content": "change_of_to_sharpy\n-------------------\n\n.. automodule:: sharpy.generators.floatingforces.change_of_to_sharpy"
  },
  {
    "path": "docs/source/includes/generators/floatingforces/compute_equiv_hd_added_mass.rst",
    "content": "compute_equiv_hd_added_mass\n---------------------------\n\n.. automodule:: sharpy.generators.floatingforces.compute_equiv_hd_added_mass"
  },
  {
    "path": "docs/source/includes/generators/floatingforces/compute_jacobian.rst",
    "content": "compute_jacobian\n----------------\n\n.. automodule:: sharpy.generators.floatingforces.compute_jacobian"
  },
  {
    "path": "docs/source/includes/generators/floatingforces/compute_xf_zf.rst",
    "content": "compute_xf_zf\n-------------\n\n.. automodule:: sharpy.generators.floatingforces.compute_xf_zf"
  },
  {
    "path": "docs/source/includes/generators/floatingforces/index.rst",
    "content": ".. toctree::\n\t:glob:\n\n\t./FloatingForces\n\t./change_of_to_sharpy\n\t./compute_equiv_hd_added_mass\n\t./compute_jacobian\n\t./compute_xf_zf\n\t./jonswap_spectrum\n\t./matrix_from_rf\n\t./noise_freq_1s\n\t./quasisteady_mooring\n\t./rename_terms\n\t./response_freq_dep_matrix\n\t./rfval\n\t./time_wave_forces\n\t./wave_radiation_damping\n"
  },
  {
    "path": "docs/source/includes/generators/floatingforces/jonswap_spectrum.rst",
    "content": "jonswap_spectrum\n----------------\n\n.. automodule:: sharpy.generators.floatingforces.jonswap_spectrum"
  },
  {
    "path": "docs/source/includes/generators/floatingforces/matrix_from_rf.rst",
    "content": "matrix_from_rf\n--------------\n\n.. automodule:: sharpy.generators.floatingforces.matrix_from_rf"
  },
  {
    "path": "docs/source/includes/generators/floatingforces/noise_freq_1s.rst",
    "content": "noise_freq_1s\n-------------\n\n.. automodule:: sharpy.generators.floatingforces.noise_freq_1s"
  },
  {
    "path": "docs/source/includes/generators/floatingforces/quasisteady_mooring.rst",
    "content": "quasisteady_mooring\n-------------------\n\n.. automodule:: sharpy.generators.floatingforces.quasisteady_mooring"
  },
  {
    "path": "docs/source/includes/generators/floatingforces/rename_terms.rst",
    "content": "rename_terms\n------------\n\n.. automodule:: sharpy.generators.floatingforces.rename_terms"
  },
  {
    "path": "docs/source/includes/generators/floatingforces/response_freq_dep_matrix.rst",
    "content": "response_freq_dep_matrix\n------------------------\n\n.. automodule:: sharpy.generators.floatingforces.response_freq_dep_matrix"
  },
  {
    "path": "docs/source/includes/generators/floatingforces/rfval.rst",
    "content": "rfval\n-----\n\n.. automodule:: sharpy.generators.floatingforces.rfval"
  },
  {
    "path": "docs/source/includes/generators/floatingforces/time_wave_forces.rst",
    "content": "time_wave_forces\n----------------\n\n.. automodule:: sharpy.generators.floatingforces.time_wave_forces"
  },
  {
    "path": "docs/source/includes/generators/floatingforces/wave_radiation_damping.rst",
    "content": "wave_radiation_damping\n----------------------\n\n.. automodule:: sharpy.generators.floatingforces.wave_radiation_damping"
  },
  {
    "path": "docs/source/includes/generators/gridbox/GridBox.rst",
    "content": "GridBox\n-------\n\n.. autoclass:: sharpy.generators.gridbox.GridBox\n\t:members:"
  },
  {
    "path": "docs/source/includes/generators/gridbox/index.rst",
    "content": ".. toctree::\n\t:glob:\n\n\t./GridBox\n"
  },
  {
    "path": "docs/source/includes/generators/gustvelocityfield/DARPA.rst",
    "content": "DARPA\n-----\n\n.. autoclass:: sharpy.generators.gustvelocityfield.DARPA\n\t:members:"
  },
  {
    "path": "docs/source/includes/generators/gustvelocityfield/GustVelocityField.rst",
    "content": "GustVelocityField\n-----------------\n\n.. autoclass:: sharpy.generators.gustvelocityfield.GustVelocityField\n\t:members:"
  },
  {
    "path": "docs/source/includes/generators/gustvelocityfield/continuous_sin.rst",
    "content": "continuous_sin\n--------------\n\n.. autoclass:: sharpy.generators.gustvelocityfield.continuous_sin\n\t:members:"
  },
  {
    "path": "docs/source/includes/generators/gustvelocityfield/index.rst",
    "content": "Gust Velocity Field Generators\n++++++++++++++++++++++++++++++\n\n\nThese generators are used to create a gust velocity field. :class:`.GustVelocityField` is the main class that should be\nparsed as the ``velocity_field_input`` to the desired aerodynamic solver.\n\nThe remaining classes are the specific gust profiles and parsed as ``gust_shape``.\n\nExamples:\n    The typical input to the aerodynamic solver settings would therefore read similar to:\n\n    >>> aero_settings = {'<some_aero_settings>': '<some_aero_settings>',\n    >>>                  'velocity_field_generator': 'GustVelocityField',\n    >>>                  'velocity_field_input': {'u_inf': 1,\n    >>>                                           'gust_shape': '<desired_gust>',\n    >>>                                           'gust_parameters': '<gust_settings>'}}\n\n\n\n.. toctree::\n\t:glob:\n\n\t./DARPA\n\t./GustVelocityField\n\t./continuous_sin\n\t./lateral_one_minus_cos\n\t./one_minus_cos\n\t./span_sine\n\t./time_varying\n\t./time_varying_global\n"
  },
  {
    "path": "docs/source/includes/generators/gustvelocityfield/lateral_one_minus_cos.rst",
    "content": "lateral_one_minus_cos\n---------------------\n\n.. autoclass:: sharpy.generators.gustvelocityfield.lateral_one_minus_cos\n\t:members:"
  },
  {
    "path": "docs/source/includes/generators/gustvelocityfield/one_minus_cos.rst",
    "content": "one_minus_cos\n-------------\n\n.. autoclass:: sharpy.generators.gustvelocityfield.one_minus_cos\n\t:members:"
  },
  {
    "path": "docs/source/includes/generators/gustvelocityfield/span_sine.rst",
    "content": "span_sine\n---------\n\n.. autoclass:: sharpy.generators.gustvelocityfield.span_sine\n\t:members:"
  },
  {
    "path": "docs/source/includes/generators/gustvelocityfield/time_varying.rst",
    "content": "time_varying\n------------\n\n.. autoclass:: sharpy.generators.gustvelocityfield.time_varying\n\t:members:"
  },
  {
    "path": "docs/source/includes/generators/gustvelocityfield/time_varying_global.rst",
    "content": "time_varying_global\n-------------------\n\n.. autoclass:: sharpy.generators.gustvelocityfield.time_varying_global\n\t:members:"
  },
  {
    "path": "docs/source/includes/generators/helicoidalwake/HelicoidalWake.rst",
    "content": "HelicoidalWake\n--------------\n\n.. autoclass:: sharpy.generators.helicoidalwake.HelicoidalWake\n\t:members:"
  },
  {
    "path": "docs/source/includes/generators/helicoidalwake/index.rst",
    "content": ".. toctree::\n\t:glob:\n\n\t./HelicoidalWake\n"
  },
  {
    "path": "docs/source/includes/generators/index.rst",
    "content": "Generators\n----------\n\n\nVelocity field generators prescribe the flow conditions for your problem. For instance, you can have an aircraft at\na prescribed fixed location in a velocity field towards the aircraft. Alternatively, you can have a free moving\naircraft in a static velocity field.\n\nDynamic Control Surface generators enable the user to prescribe a certain control surface deflection in time.\n\n.. toctree::\n\t:maxdepth: 1\n\n\t./bumpvelocityfield/index\n\t./dynamiccontrolsurface/index\n\t./floatingforces/index\n\t./gridbox/index\n\t./gustvelocityfield/index\n\t./helicoidalwake/index\n\t./modifystructure/index\n\t./polaraeroforces/index\n\t./shearvelocityfield/index\n\t./steadyvelocityfield/index\n\t./straightwake/index\n\t./trajectorygenerator/index\n\t./turbvelocityfield/index\n\t./turbvelocityfieldbts/index\n"
  },
  {
    "path": "docs/source/includes/generators/modifystructure/ChangeLumpedMass.rst",
    "content": "ChangeLumpedMass\n----------------\n\n.. autoclass:: sharpy.generators.modifystructure.ChangeLumpedMass\n\t:members:"
  },
  {
    "path": "docs/source/includes/generators/modifystructure/ChangedVariable.rst",
    "content": "ChangedVariable\n---------------\n\n.. autoclass:: sharpy.generators.modifystructure.ChangedVariable\n\t:members:"
  },
  {
    "path": "docs/source/includes/generators/modifystructure/LumpedMassControl.rst",
    "content": "LumpedMassControl\n-----------------\n\n.. autoclass:: sharpy.generators.modifystructure.LumpedMassControl\n\t:members:"
  },
  {
    "path": "docs/source/includes/generators/modifystructure/ModifyStructure.rst",
    "content": "ModifyStructure\n---------------\n\n.. autoclass:: sharpy.generators.modifystructure.ModifyStructure\n\t:members:"
  },
  {
    "path": "docs/source/includes/generators/modifystructure/index.rst",
    "content": ".. toctree::\n\t:glob:\n\n\t./ChangeLumpedMass\n\t./ChangedVariable\n\t./LumpedMassControl\n\t./ModifyStructure\n"
  },
  {
    "path": "docs/source/includes/generators/polaraeroforces/EfficiencyCorrection.rst",
    "content": "EfficiencyCorrection\n--------------------\n\n.. autoclass:: sharpy.generators.polaraeroforces.EfficiencyCorrection\n\t:members:"
  },
  {
    "path": "docs/source/includes/generators/polaraeroforces/PolarCorrection.rst",
    "content": "PolarCorrection\n---------------\n\n.. autoclass:: sharpy.generators.polaraeroforces.PolarCorrection\n\t:members:"
  },
  {
    "path": "docs/source/includes/generators/polaraeroforces/get_aoacl0_from_camber.rst",
    "content": "get_aoacl0_from_camber\n----------------------\n\n.. automodule:: sharpy.generators.polaraeroforces.get_aoacl0_from_camber"
  },
  {
    "path": "docs/source/includes/generators/polaraeroforces/index.rst",
    "content": ".. toctree::\n\t:glob:\n\n\t./EfficiencyCorrection\n\t./PolarCorrection\n\t./get_aoacl0_from_camber\n\t./local_stability_axes\n\t./magnitude_and_direction_of_relative_velocity\n\t./span_chord\n"
  },
  {
    "path": "docs/source/includes/generators/polaraeroforces/local_stability_axes.rst",
    "content": "local_stability_axes\n--------------------\n\n.. automodule:: sharpy.generators.polaraeroforces.local_stability_axes"
  },
  {
    "path": "docs/source/includes/generators/polaraeroforces/magnitude_and_direction_of_relative_velocity.rst",
    "content": "magnitude_and_direction_of_relative_velocity\n--------------------------------------------\n\n.. automodule:: sharpy.generators.polaraeroforces.magnitude_and_direction_of_relative_velocity"
  },
  {
    "path": "docs/source/includes/generators/polaraeroforces/span_chord.rst",
    "content": "span_chord\n----------\n\n.. automodule:: sharpy.generators.polaraeroforces.span_chord"
  },
  {
    "path": "docs/source/includes/generators/shearvelocityfield/ShearVelocityField.rst",
    "content": "ShearVelocityField\n------------------\n\n.. autoclass:: sharpy.generators.shearvelocityfield.ShearVelocityField\n\t:members:"
  },
  {
    "path": "docs/source/includes/generators/shearvelocityfield/index.rst",
    "content": ".. toctree::\n\t:glob:\n\n\t./ShearVelocityField\n"
  },
  {
    "path": "docs/source/includes/generators/steadyvelocityfield/SteadyVelocityField.rst",
    "content": "SteadyVelocityField\n-------------------\n\n.. autoclass:: sharpy.generators.steadyvelocityfield.SteadyVelocityField\n\t:members:"
  },
  {
    "path": "docs/source/includes/generators/steadyvelocityfield/index.rst",
    "content": ".. toctree::\n\t:glob:\n\n\t./SteadyVelocityField\n"
  },
  {
    "path": "docs/source/includes/generators/straightwake/StraightWake.rst",
    "content": "StraightWake\n------------\n\n.. autoclass:: sharpy.generators.straightwake.StraightWake\n\t:members:"
  },
  {
    "path": "docs/source/includes/generators/straightwake/index.rst",
    "content": ".. toctree::\n\t:glob:\n\n\t./StraightWake\n"
  },
  {
    "path": "docs/source/includes/generators/trajectorygenerator/TrajectoryGenerator.rst",
    "content": "TrajectoryGenerator\n-------------------\n\n.. autoclass:: sharpy.generators.trajectorygenerator.TrajectoryGenerator\n\t:members:"
  },
  {
    "path": "docs/source/includes/generators/trajectorygenerator/index.rst",
    "content": ".. toctree::\n\t:glob:\n\n\t./TrajectoryGenerator\n"
  },
  {
    "path": "docs/source/includes/generators/turbvelocityfield/TurbVelocityField.rst",
    "content": "TurbVelocityField\n-----------------\n\n.. autoclass:: sharpy.generators.turbvelocityfield.TurbVelocityField\n\t:members:"
  },
  {
    "path": "docs/source/includes/generators/turbvelocityfield/index.rst",
    "content": ".. toctree::\n\t:glob:\n\n\t./TurbVelocityField\n"
  },
  {
    "path": "docs/source/includes/generators/turbvelocityfieldbts/TurbVelocityFieldBts.rst",
    "content": "TurbVelocityFieldBts\n--------------------\n\n.. autoclass:: sharpy.generators.turbvelocityfieldbts.TurbVelocityFieldBts\n\t:members:"
  },
  {
    "path": "docs/source/includes/generators/turbvelocityfieldbts/index.rst",
    "content": ".. toctree::\n\t:glob:\n\n\t./TurbVelocityFieldBts\n"
  },
  {
    "path": "docs/source/includes/index.rst",
    "content": "SHARPy Source Code\n------------------\n\nThe core SHARPy documentation is found herein.\n\n.. note::\n\n\tThe docs are still a work in progress and therefore, most functions/classes with which there is not much user interaction are not fully documented. We would appreciate any help by means of you contributing to our growing documentation!\n\n\nIf you feel that a function/class is not well documented and, hence, you cannot use it, feel free to raise an issue so that we can improve it.\n\n\n.. toctree::\n\t:maxdepth: 1\n\n\t./aero/index\n\t./cases/index\n\t./controllers/index\n\t./generators/index\n\t./io/index\n\t./linear/index\n\t./rom/index\n\t./structure/index\n\t./utils/index\n"
  },
  {
    "path": "docs/source/includes/io/index.rst",
    "content": "UDP Input/Output\n----------------\n\n\n\nThis package contains the routines for the SHARPy input and output via UDP.\n\nThe main interface is performed through the :class:`~sharpy.io.network_interface.NetworkLoader`\n\n.. toctree::\n\t:maxdepth: 1\n\n\t./inout_variables/index\n\t./network_interface/index\n"
  },
  {
    "path": "docs/source/includes/io/inout_variables/SetOfVariables.rst",
    "content": "SetOfVariables\n--------------\n\n.. autoclass:: sharpy.io.inout_variables.SetOfVariables\n\t:members:"
  },
  {
    "path": "docs/source/includes/io/inout_variables/index.rst",
    "content": ".. toctree::\n\t:glob:\n\n\t./SetOfVariables\n"
  },
  {
    "path": "docs/source/includes/io/network_interface/InNetwork.rst",
    "content": "InNetwork\n---------\n\n.. autoclass:: sharpy.io.network_interface.InNetwork\n\t:members:"
  },
  {
    "path": "docs/source/includes/io/network_interface/Network.rst",
    "content": "Network\n-------\n\n.. autoclass:: sharpy.io.network_interface.Network\n\t:members:"
  },
  {
    "path": "docs/source/includes/io/network_interface/NetworkLoader.rst",
    "content": "NetworkLoader\n-------------\n\n.. autoclass:: sharpy.io.network_interface.NetworkLoader\n\t:members:"
  },
  {
    "path": "docs/source/includes/io/network_interface/OutNetwork.rst",
    "content": "OutNetwork\n----------\n\n.. autoclass:: sharpy.io.network_interface.OutNetwork\n\t:members:"
  },
  {
    "path": "docs/source/includes/io/network_interface/index.rst",
    "content": ".. toctree::\n\t:glob:\n\n\t./InNetwork\n\t./Network\n\t./NetworkLoader\n\t./OutNetwork\n"
  },
  {
    "path": "docs/source/includes/linear/assembler/index.rst",
    "content": "Assembler\n---------\n\n.. toctree::\n\t:maxdepth: 1\n\n\t./lincontrolsurfacedeflector/index\n\t./linearaeroelastic/index\n\t./linearbeam/index\n\t./lineargustassembler/index\n\t./linearuvlm/index\n"
  },
  {
    "path": "docs/source/includes/linear/assembler/lincontrolsurfacedeflector/LinControlSurfaceDeflector.rst",
    "content": "LinControlSurfaceDeflector\n--------------------------\n\n.. autoclass:: sharpy.linear.assembler.lincontrolsurfacedeflector.LinControlSurfaceDeflector\n\t:members:"
  },
  {
    "path": "docs/source/includes/linear/assembler/lincontrolsurfacedeflector/der_R_arbitrary_axis_times_v.rst",
    "content": "der_R_arbitrary_axis_times_v\n----------------------------\n\n.. automodule:: sharpy.linear.assembler.lincontrolsurfacedeflector.der_R_arbitrary_axis_times_v"
  },
  {
    "path": "docs/source/includes/linear/assembler/lincontrolsurfacedeflector/index.rst",
    "content": "Control surface deflector for linear systems\n++++++++++++++++++++++++++++++++++++++++++++\n\nControl surface deflector for linear systems\n\n\n.. toctree::\n\t:glob:\n\n\t./LinControlSurfaceDeflector\n\t./der_R_arbitrary_axis_times_v\n"
  },
  {
    "path": "docs/source/includes/linear/assembler/linearaeroelastic/LinearAeroelastic.rst",
    "content": "LinearAeroelastic\n-----------------\n\n.. autoclass:: sharpy.linear.assembler.linearaeroelastic.LinearAeroelastic\n\t:members:"
  },
  {
    "path": "docs/source/includes/linear/assembler/linearaeroelastic/index.rst",
    "content": ".. toctree::\n\t:glob:\n\n\t./LinearAeroelastic\n"
  },
  {
    "path": "docs/source/includes/linear/assembler/linearbeam/LinearBeam.rst",
    "content": "LinearBeam\n----------\n\n.. autoclass:: sharpy.linear.assembler.linearbeam.LinearBeam\n\t:members:"
  },
  {
    "path": "docs/source/includes/linear/assembler/linearbeam/index.rst",
    "content": "Linear State Beam Element Class\n+++++++++++++++++++++++++++++++\n\nLinear State Beam Element Class\n\n\n\n.. toctree::\n\t:glob:\n\n\t./LinearBeam\n"
  },
  {
    "path": "docs/source/includes/linear/assembler/lineargustassembler/LeadingEdge.rst",
    "content": "LeadingEdge\n-----------\n\n.. autoclass:: sharpy.linear.assembler.lineargustassembler.LeadingEdge\n\t:members:"
  },
  {
    "path": "docs/source/includes/linear/assembler/lineargustassembler/MultiLeadingEdge.rst",
    "content": "MultiLeadingEdge\n----------------\n\n.. autoclass:: sharpy.linear.assembler.lineargustassembler.MultiLeadingEdge\n\t:members:"
  },
  {
    "path": "docs/source/includes/linear/assembler/lineargustassembler/campbell.rst",
    "content": "campbell\n--------\n\n.. automodule:: sharpy.linear.assembler.lineargustassembler.campbell"
  },
  {
    "path": "docs/source/includes/linear/assembler/lineargustassembler/gust_from_string.rst",
    "content": "gust_from_string\n----------------\n\n.. automodule:: sharpy.linear.assembler.lineargustassembler.gust_from_string"
  },
  {
    "path": "docs/source/includes/linear/assembler/lineargustassembler/index.rst",
    "content": ".. toctree::\n\t:glob:\n\n\t./LeadingEdge\n\t./MultiLeadingEdge\n\t./campbell\n\t./gust_from_string\n\t./spanwise_interpolation\n"
  },
  {
    "path": "docs/source/includes/linear/assembler/lineargustassembler/spanwise_interpolation.rst",
    "content": "spanwise_interpolation\n----------------------\n\n.. automodule:: sharpy.linear.assembler.lineargustassembler.spanwise_interpolation"
  },
  {
    "path": "docs/source/includes/linear/assembler/linearuvlm/LinearUVLM.rst",
    "content": "LinearUVLM\n----------\n\n.. autoclass:: sharpy.linear.assembler.linearuvlm.LinearUVLM\n\t:members:"
  },
  {
    "path": "docs/source/includes/linear/assembler/linearuvlm/index.rst",
    "content": "Linear UVLM State Space System\n++++++++++++++++++++++++++++++\n\nLinear UVLM State Space System\n\n\n.. toctree::\n\t:glob:\n\n\t./LinearUVLM\n"
  },
  {
    "path": "docs/source/includes/linear/index.rst",
    "content": "Linear SHARPy\n-------------\n\n\nThe code included herein enables the assembly of linearised state-space systems based on the previous solution\nof a nonlinear problem that will be used as linearisation reference.\n\nThe code is structured in the following way:\n\n    * Assembler: different state-spaces to assemble, from only structural/aerodynamic to fully coupled aeroelastic\n\n    * Src: source code required for the linearisation and utilities for the manipulation of state-space elements\n\n\nReferences:\n\n    Maraniello, S. , Palacios, R.. State-Space Realizations and Internal Balancing in Potential-Flow Aerodynamics\n    with Arbitrary Kinematics. AIAA Journal, Vol. 57, No.6, June 2019\n\n.. toctree::\n\t:maxdepth: 1\n\n\t./assembler/index\n\t./src/index\n"
  },
  {
    "path": "docs/source/includes/linear/src/assembly/AICs.rst",
    "content": "AICs\n----\n\n.. automodule:: sharpy.linear.src.assembly.AICs"
  },
  {
    "path": "docs/source/includes/linear/src/assembly/dfqsdgamma_vrel0.rst",
    "content": "dfqsdgamma_vrel0\n----------------\n\n.. automodule:: sharpy.linear.src.assembly.dfqsdgamma_vrel0"
  },
  {
    "path": "docs/source/includes/linear/src/assembly/dfqsduinput.rst",
    "content": "dfqsduinput\n-----------\n\n.. automodule:: sharpy.linear.src.assembly.dfqsduinput"
  },
  {
    "path": "docs/source/includes/linear/src/assembly/dfqsdvind_gamma.rst",
    "content": "dfqsdvind_gamma\n---------------\n\n.. automodule:: sharpy.linear.src.assembly.dfqsdvind_gamma"
  },
  {
    "path": "docs/source/includes/linear/src/assembly/dfqsdvind_zeta.rst",
    "content": "dfqsdvind_zeta\n--------------\n\n.. automodule:: sharpy.linear.src.assembly.dfqsdvind_zeta"
  },
  {
    "path": "docs/source/includes/linear/src/assembly/dfqsdzeta_omega.rst",
    "content": "dfqsdzeta_omega\n---------------\n\n.. automodule:: sharpy.linear.src.assembly.dfqsdzeta_omega"
  },
  {
    "path": "docs/source/includes/linear/src/assembly/dfqsdzeta_vrel0.rst",
    "content": "dfqsdzeta_vrel0\n---------------\n\n.. automodule:: sharpy.linear.src.assembly.dfqsdzeta_vrel0"
  },
  {
    "path": "docs/source/includes/linear/src/assembly/dfunstdgamma_dot.rst",
    "content": "dfunstdgamma_dot\n----------------\n\n.. automodule:: sharpy.linear.src.assembly.dfunstdgamma_dot"
  },
  {
    "path": "docs/source/includes/linear/src/assembly/dvinddzeta.rst",
    "content": "dvinddzeta\n----------\n\n.. automodule:: sharpy.linear.src.assembly.dvinddzeta"
  },
  {
    "path": "docs/source/includes/linear/src/assembly/dvinddzeta_cpp.rst",
    "content": "dvinddzeta_cpp\n--------------\n\n.. automodule:: sharpy.linear.src.assembly.dvinddzeta_cpp"
  },
  {
    "path": "docs/source/includes/linear/src/assembly/eval_panel_cpp.rst",
    "content": "eval_panel_cpp\n--------------\n\n.. automodule:: sharpy.linear.src.assembly.eval_panel_cpp"
  },
  {
    "path": "docs/source/includes/linear/src/assembly/index.rst",
    "content": "Assembly of linearised UVLM system\n++++++++++++++++++++++++++++++++++\n\n\nS. Maraniello, 25 May 2018\n\nIncludes:\n    - Boundary conditions methods:\n        - AICs: allocate aero influence coefficient matrices of multi-surfaces\n          configurations\n        - ``nc_dqcdzeta_Sin_to_Sout``: derivative matrix of ``nc*dQ/dzeta``\n          where Q is the induced velocity at the bound collocation points of one\n          surface to another.\n        - ``nc_dqcdzeta_coll``: assembles ``nc_dqcdzeta_coll_Sin_to_Sout`` matrices in\n          multi-surfaces configurations\n        - ``uc_dncdzeta``: assemble derivative matrix dnc/dzeta*Uc at bound collocation\n          points\n\n\n.. toctree::\n\t:glob:\n\n\t./AICs\n\t./dfqsdgamma_vrel0\n\t./dfqsduinput\n\t./dfqsdvind_gamma\n\t./dfqsdvind_zeta\n\t./dfqsdzeta_omega\n\t./dfqsdzeta_vrel0\n\t./dfunstdgamma_dot\n\t./dvinddzeta\n\t./dvinddzeta_cpp\n\t./eval_panel_cpp\n\t./nc_domegazetadzeta\n\t./nc_dqcdzeta\n\t./nc_dqcdzeta_Sin_to_Sout\n\t./test_wake_prop_term\n\t./uc_dncdzeta\n\t./wake_prop\n\t./wake_prop_from_dimensions\n"
  },
  {
    "path": "docs/source/includes/linear/src/assembly/nc_domegazetadzeta.rst",
    "content": "nc_domegazetadzeta\n------------------\n\n.. automodule:: sharpy.linear.src.assembly.nc_domegazetadzeta"
  },
  {
    "path": "docs/source/includes/linear/src/assembly/nc_dqcdzeta.rst",
    "content": "nc_dqcdzeta\n-----------\n\n.. automodule:: sharpy.linear.src.assembly.nc_dqcdzeta"
  },
  {
    "path": "docs/source/includes/linear/src/assembly/nc_dqcdzeta_Sin_to_Sout.rst",
    "content": "nc_dqcdzeta_Sin_to_Sout\n-----------------------\n\n.. automodule:: sharpy.linear.src.assembly.nc_dqcdzeta_Sin_to_Sout"
  },
  {
    "path": "docs/source/includes/linear/src/assembly/test_wake_prop_term.rst",
    "content": "test_wake_prop_term\n-------------------\n\n.. automodule:: sharpy.linear.src.assembly.test_wake_prop_term"
  },
  {
    "path": "docs/source/includes/linear/src/assembly/uc_dncdzeta.rst",
    "content": "uc_dncdzeta\n-----------\n\n.. automodule:: sharpy.linear.src.assembly.uc_dncdzeta"
  },
  {
    "path": "docs/source/includes/linear/src/assembly/wake_prop.rst",
    "content": "wake_prop\n---------\n\n.. automodule:: sharpy.linear.src.assembly.wake_prop"
  },
  {
    "path": "docs/source/includes/linear/src/assembly/wake_prop_from_dimensions.rst",
    "content": "wake_prop_from_dimensions\n-------------------------\n\n.. automodule:: sharpy.linear.src.assembly.wake_prop_from_dimensions"
  },
  {
    "path": "docs/source/includes/linear/src/gridmapping/AeroGridMap.rst",
    "content": "AeroGridMap\n-----------\n\n.. autoclass:: sharpy.linear.src.gridmapping.AeroGridMap\n\t:members:"
  },
  {
    "path": "docs/source/includes/linear/src/gridmapping/index.rst",
    "content": "Mapping methods for bound surface panels\n++++++++++++++++++++++++++++++++++++++++\n\n\nS. Maraniello, 19 May 2018\n\n\n.. toctree::\n\t:glob:\n\n\t./AeroGridMap\n"
  },
  {
    "path": "docs/source/includes/linear/src/index.rst",
    "content": "Linearised System Source Code\n-----------------------------\n\n\n.. toctree::\n\t:maxdepth: 1\n\n\t./assembly/index\n\t./gridmapping/index\n\t./interp/index\n\t./lib_dbiot/index\n\t./lib_ucdncdzeta/index\n\t./libfit/index\n\t./libsparse/index\n\t./libss/index\n\t./lin_aeroelastic/index\n\t./lin_utils/index\n\t./lingebm/index\n\t./linuvlm/index\n\t./multisurfaces/index\n\t./surface/index\n"
  },
  {
    "path": "docs/source/includes/linear/src/interp/get_Wnv_vector.rst",
    "content": "get_Wnv_vector\n--------------\n\n.. automodule:: sharpy.linear.src.interp.get_Wnv_vector"
  },
  {
    "path": "docs/source/includes/linear/src/interp/get_Wvc_scalar.rst",
    "content": "get_Wvc_scalar\n--------------\n\n.. automodule:: sharpy.linear.src.interp.get_Wvc_scalar"
  },
  {
    "path": "docs/source/includes/linear/src/interp/get_panel_wcv.rst",
    "content": "get_panel_wcv\n-------------\n\n.. automodule:: sharpy.linear.src.interp.get_panel_wcv"
  },
  {
    "path": "docs/source/includes/linear/src/interp/index.rst",
    "content": "Defines interpolation methods (geometrically-exact) and matrices (linearisation)\n++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\n\nDefines interpolation methods (geometrically-exact) and matrices (linearisation)\nS. Maraniello, 20 May 2018\n\n\n.. toctree::\n\t:glob:\n\n\t./get_Wnv_vector\n\t./get_Wvc_scalar\n\t./get_panel_wcv\n"
  },
  {
    "path": "docs/source/includes/linear/src/lib_dbiot/Dvcross_by_skew3d.rst",
    "content": "Dvcross_by_skew3d\n-----------------\n\n.. automodule:: sharpy.linear.src.lib_dbiot.Dvcross_by_skew3d"
  },
  {
    "path": "docs/source/includes/linear/src/lib_dbiot/eval_panel_comp.rst",
    "content": "eval_panel_comp\n---------------\n\n.. automodule:: sharpy.linear.src.lib_dbiot.eval_panel_comp"
  },
  {
    "path": "docs/source/includes/linear/src/lib_dbiot/eval_panel_cpp.rst",
    "content": "eval_panel_cpp\n--------------\n\n.. automodule:: sharpy.linear.src.lib_dbiot.eval_panel_cpp"
  },
  {
    "path": "docs/source/includes/linear/src/lib_dbiot/eval_panel_exp.rst",
    "content": "eval_panel_exp\n--------------\n\n.. automodule:: sharpy.linear.src.lib_dbiot.eval_panel_exp"
  },
  {
    "path": "docs/source/includes/linear/src/lib_dbiot/eval_panel_fast.rst",
    "content": "eval_panel_fast\n---------------\n\n.. automodule:: sharpy.linear.src.lib_dbiot.eval_panel_fast"
  },
  {
    "path": "docs/source/includes/linear/src/lib_dbiot/eval_panel_fast_coll.rst",
    "content": "eval_panel_fast_coll\n--------------------\n\n.. automodule:: sharpy.linear.src.lib_dbiot.eval_panel_fast_coll"
  },
  {
    "path": "docs/source/includes/linear/src/lib_dbiot/eval_seg_comp_loop.rst",
    "content": "eval_seg_comp_loop\n------------------\n\n.. automodule:: sharpy.linear.src.lib_dbiot.eval_seg_comp_loop"
  },
  {
    "path": "docs/source/includes/linear/src/lib_dbiot/eval_seg_exp.rst",
    "content": "eval_seg_exp\n------------\n\n.. automodule:: sharpy.linear.src.lib_dbiot.eval_seg_exp"
  },
  {
    "path": "docs/source/includes/linear/src/lib_dbiot/eval_seg_exp_loop.rst",
    "content": "eval_seg_exp_loop\n-----------------\n\n.. automodule:: sharpy.linear.src.lib_dbiot.eval_seg_exp_loop"
  },
  {
    "path": "docs/source/includes/linear/src/lib_dbiot/index.rst",
    "content": "Induced Velocity Derivatives\n++++++++++++++++++++++++++++\n\n\nCalculate derivatives of induced velocity.\n\nMethods:\n\n- eval_seg_exp and eval_seg_exp_loop: profide ders in format\n    [Q_{x,y,z},ZetaPoint_{x,y,z}]\n  and use fully-expanded analytical formula.\n- eval_panel_exp: iterates through whole panel\n\n- eval_seg_comp and eval_seg_comp_loop: profide ders in format\n    [Q_{x,y,z},ZetaPoint_{x,y,z}]\n  and use compact analytical formula.\n\n\n.. toctree::\n\t:glob:\n\n\t./Dvcross_by_skew3d\n\t./eval_panel_comp\n\t./eval_panel_cpp\n\t./eval_panel_exp\n\t./eval_panel_fast\n\t./eval_panel_fast_coll\n\t./eval_seg_comp_loop\n\t./eval_seg_exp\n\t./eval_seg_exp_loop\n"
  },
  {
    "path": "docs/source/includes/linear/src/lib_ucdncdzeta/eval.rst",
    "content": "eval\n----\n\n.. automodule:: sharpy.linear.src.lib_ucdncdzeta.eval"
  },
  {
    "path": "docs/source/includes/linear/src/lib_ucdncdzeta/index.rst",
    "content": "Induced Velocity Derivatives with respect to Panel Normal\n+++++++++++++++++++++++++++++++++++++++++++++++++++++++++\n\n\nCalculate derivative of\n\n    ..  math:: \\boldsymbol{u}_c\\frac{\\partial\\boldsymbol{n}_c}{\\partial\\boldsymbol{zeta}}\n\nwith respect to local panel coordinates.\n\n\n.. toctree::\n\t:glob:\n\n\t./eval\n"
  },
  {
    "path": "docs/source/includes/linear/src/libfit/fitfrd.rst",
    "content": "fitfrd\n------\n\n.. automodule:: sharpy.linear.src.libfit.fitfrd"
  },
  {
    "path": "docs/source/includes/linear/src/libfit/get_rfa_res.rst",
    "content": "get_rfa_res\n-----------\n\n.. automodule:: sharpy.linear.src.libfit.get_rfa_res"
  },
  {
    "path": "docs/source/includes/linear/src/libfit/get_rfa_res_norm.rst",
    "content": "get_rfa_res_norm\n----------------\n\n.. automodule:: sharpy.linear.src.libfit.get_rfa_res_norm"
  },
  {
    "path": "docs/source/includes/linear/src/libfit/index.rst",
    "content": "Fitting Tools Library\n+++++++++++++++++++++\n\n\n@author: Salvatore Maraniello\n\n@date: 15 Jan 2018\n\n\n.. toctree::\n\t:glob:\n\n\t./fitfrd\n\t./get_rfa_res\n\t./get_rfa_res_norm\n\t./poly_fit\n\t./rfa\n\t./rfa_fit_dev\n\t./rfa_mimo\n\t./rfader\n"
  },
  {
    "path": "docs/source/includes/linear/src/libfit/poly_fit.rst",
    "content": "poly_fit\n--------\n\n.. automodule:: sharpy.linear.src.libfit.poly_fit"
  },
  {
    "path": "docs/source/includes/linear/src/libfit/rfa.rst",
    "content": "rfa\n---\n\n.. automodule:: sharpy.linear.src.libfit.rfa"
  },
  {
    "path": "docs/source/includes/linear/src/libfit/rfa_fit_dev.rst",
    "content": "rfa_fit_dev\n-----------\n\n.. automodule:: sharpy.linear.src.libfit.rfa_fit_dev"
  },
  {
    "path": "docs/source/includes/linear/src/libfit/rfa_mimo.rst",
    "content": "rfa_mimo\n--------\n\n.. automodule:: sharpy.linear.src.libfit.rfa_mimo"
  },
  {
    "path": "docs/source/includes/linear/src/libfit/rfader.rst",
    "content": "rfader\n------\n\n.. automodule:: sharpy.linear.src.libfit.rfader"
  },
  {
    "path": "docs/source/includes/linear/src/libsparse/block_dot.rst",
    "content": "block_dot\n---------\n\n.. automodule:: sharpy.linear.src.libsparse.block_dot"
  },
  {
    "path": "docs/source/includes/linear/src/libsparse/block_matrix_dot_vector.rst",
    "content": "block_matrix_dot_vector\n-----------------------\n\n.. automodule:: sharpy.linear.src.libsparse.block_matrix_dot_vector"
  },
  {
    "path": "docs/source/includes/linear/src/libsparse/block_sum.rst",
    "content": "block_sum\n---------\n\n.. automodule:: sharpy.linear.src.libsparse.block_sum"
  },
  {
    "path": "docs/source/includes/linear/src/libsparse/csc_matrix.rst",
    "content": "csc_matrix\n----------\n\n.. autoclass:: sharpy.linear.src.libsparse.csc_matrix\n\t:members:"
  },
  {
    "path": "docs/source/includes/linear/src/libsparse/dense.rst",
    "content": "dense\n-----\n\n.. automodule:: sharpy.linear.src.libsparse.dense"
  },
  {
    "path": "docs/source/includes/linear/src/libsparse/dot.rst",
    "content": "dot\n---\n\n.. automodule:: sharpy.linear.src.libsparse.dot"
  },
  {
    "path": "docs/source/includes/linear/src/libsparse/eye_as.rst",
    "content": "eye_as\n------\n\n.. automodule:: sharpy.linear.src.libsparse.eye_as"
  },
  {
    "path": "docs/source/includes/linear/src/libsparse/index.rst",
    "content": "Collect tools to manipulate sparse and/or mixed dense/sparse matrices.\n++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\n\nCollect tools to manipulate sparse and/or mixed dense/sparse matrices.\n\nauthor: S. Maraniello\ndate: Dec 2018\n\nComment: manipulating large linear system may require using both dense and sparse\nmatrices. While numpy/scipy automatically handle most operations between mixed\ndense/sparse arrays, some (e.g. dot product) require more attention. This\nlibrary collects methods to handle these situations.\n\nClasses:\nscipy.sparse matrices are wrapped so as to ensure compatibility with numpy arrays\nupon conversion to dense.\n- csc_matrix: this is a wrapper of scipy.csc_matrix.\n- SupportedTypes: types supported for operations\n- WarningTypes: due to some bugs in scipy (v.1.1.0), sum (+) operations between\nnp.ndarray and scipy.sparse matrices can result in numpy.matrixlib.defmatrix.matrix\ntypes. This list contains such undesired types that can result from dense/sparse\noperations and raises a warning if required.\n(b) convert these types into numpy.ndarrays.\n\nMethods:\n- dot: handles matrix dot products across different types.\n- solve: solves linear systems Ax=b with A and b dense, sparse or mixed.\n- dense: convert matrix to numpy array\n\nWarning:\n- only sparse types into SupportedTypes are supported!\n\nTo Do:\n- move these methods into an algebra module?\n\n\n.. toctree::\n\t:glob:\n\n\t./block_dot\n\t./block_matrix_dot_vector\n\t./block_sum\n\t./csc_matrix\n\t./dense\n\t./dot\n\t./eye_as\n\t./solve\n\t./zeros_as\n"
  },
  {
    "path": "docs/source/includes/linear/src/libsparse/solve.rst",
    "content": "solve\n-----\n\n.. automodule:: sharpy.linear.src.libsparse.solve"
  },
  {
    "path": "docs/source/includes/linear/src/libsparse/zeros_as.rst",
    "content": "zeros_as\n--------\n\n.. automodule:: sharpy.linear.src.libsparse.zeros_as"
  },
  {
    "path": "docs/source/includes/linear/src/libss/Hnorm_from_freq_resp.rst",
    "content": "Hnorm_from_freq_resp\n--------------------\n\n.. automodule:: sharpy.linear.src.libss.Hnorm_from_freq_resp"
  },
  {
    "path": "docs/source/includes/linear/src/libss/SSconv.rst",
    "content": "SSconv\n------\n\n.. automodule:: sharpy.linear.src.libss.SSconv"
  },
  {
    "path": "docs/source/includes/linear/src/libss/SSderivative.rst",
    "content": "SSderivative\n------------\n\n.. automodule:: sharpy.linear.src.libss.SSderivative"
  },
  {
    "path": "docs/source/includes/linear/src/libss/SSintegr.rst",
    "content": "SSintegr\n--------\n\n.. automodule:: sharpy.linear.src.libss.SSintegr"
  },
  {
    "path": "docs/source/includes/linear/src/libss/StateSpace.rst",
    "content": "StateSpace\n----------\n\n.. autoclass:: sharpy.linear.src.libss.StateSpace\n\t:members:"
  },
  {
    "path": "docs/source/includes/linear/src/libss/addGain.rst",
    "content": "addGain\n-------\n\n.. automodule:: sharpy.linear.src.libss.addGain"
  },
  {
    "path": "docs/source/includes/linear/src/libss/adjust_phase.rst",
    "content": "adjust_phase\n------------\n\n.. automodule:: sharpy.linear.src.libss.adjust_phase"
  },
  {
    "path": "docs/source/includes/linear/src/libss/build_SS_poly.rst",
    "content": "build_SS_poly\n-------------\n\n.. automodule:: sharpy.linear.src.libss.build_SS_poly"
  },
  {
    "path": "docs/source/includes/linear/src/libss/butter.rst",
    "content": "butter\n------\n\n.. automodule:: sharpy.linear.src.libss.butter"
  },
  {
    "path": "docs/source/includes/linear/src/libss/compare_ss.rst",
    "content": "compare_ss\n----------\n\n.. automodule:: sharpy.linear.src.libss.compare_ss"
  },
  {
    "path": "docs/source/includes/linear/src/libss/couple.rst",
    "content": "couple\n------\n\n.. automodule:: sharpy.linear.src.libss.couple"
  },
  {
    "path": "docs/source/includes/linear/src/libss/disc2cont.rst",
    "content": "disc2cont\n---------\n\n.. automodule:: sharpy.linear.src.libss.disc2cont"
  },
  {
    "path": "docs/source/includes/linear/src/libss/eigvals.rst",
    "content": "eigvals\n-------\n\n.. automodule:: sharpy.linear.src.libss.eigvals"
  },
  {
    "path": "docs/source/includes/linear/src/libss/freqresp.rst",
    "content": "freqresp\n--------\n\n.. automodule:: sharpy.linear.src.libss.freqresp"
  },
  {
    "path": "docs/source/includes/linear/src/libss/get_freq_from_eigs.rst",
    "content": "get_freq_from_eigs\n------------------\n\n.. automodule:: sharpy.linear.src.libss.get_freq_from_eigs"
  },
  {
    "path": "docs/source/includes/linear/src/libss/index.rst",
    "content": "Linear Time Invariant systems\n+++++++++++++++++++++++++++++\n\nLinear Time Invariant systems\nauthor: S. Maraniello\ndate: 15 Sep 2017 (still basement...)\n\nLibrary of methods to build/manipulate state-space models. The module supports\nthe sparse arrays types defined in libsparse.\n\nThe module includes:\n\nClasses:\n- StateSpace: provides a class to build DLTI/LTI systems with full and/or sparse\n\tmatrices and wraps many of the methods in these library. Methods include:\n\t- freqresp: wraps the freqresp function\n\t- addGain: adds gains in input/output. This is not a wrapper of addGain, as\n\tthe system matrices are overwritten\n\nMethods for state-space manipulation:\n- couple: feedback coupling. Does not support sparsity\n- freqresp: calculate frequency response. Supports sparsity.\n- series: series connection between systems\n- parallel: parallel connection between systems\n- SSconv: convert state-space model with predictions and delays\n- addGain: add gains to state-space model.\n- join2: merge two state-space models into one.\n- join: merge a list of state-space models into one.\n- sum state-space models and/or gains\n- scale_SS: scale state-space model\n- simulate: simulates discrete time solution\n- Hnorm_from_freq_resp: compute H norm of a frequency response\n- adjust_phase: remove discontinuities from a frequency response\n\nSpecial Models:\n- SSderivative: produces DLTI of a numerical derivative scheme\n- SSintegr: produces DLTI of an integration scheme\n- build_SS_poly: build state-space model with polynomial terms.\n\nFiltering:\n- butter\n\nUtilities:\n- get_freq_from_eigs: clculate frequency corresponding to eigenvalues\n\nComments:\n- the module supports sparse matrices hence relies on libsparse.\n\nto do:\n\t- remove unnecessary coupling routines\n\t- couple function can handle sparse matrices but only outputs dense matrices\n\t\t- verify if typical coupled systems are sparse\n\t\t- update routine\n\t\t- add method to automatically determine whether to use sparse or dense?\n\n\n.. toctree::\n\t:glob:\n\n\t./Hnorm_from_freq_resp\n\t./SSconv\n\t./SSderivative\n\t./SSintegr\n\t./StateSpace\n\t./addGain\n\t./adjust_phase\n\t./build_SS_poly\n\t./butter\n\t./compare_ss\n\t./couple\n\t./disc2cont\n\t./eigvals\n\t./freqresp\n\t./get_freq_from_eigs\n\t./join\n\t./join2\n\t./parallel\n\t./project\n\t./random_ss\n\t./retain_inout_channels\n\t./scale_SS\n\t./series\n\t./simulate\n\t./ss_block\n\t./ss_to_scipy\n\t./sum_ss\n"
  },
  {
    "path": "docs/source/includes/linear/src/libss/join.rst",
    "content": "join\n----\n\n.. automodule:: sharpy.linear.src.libss.join"
  },
  {
    "path": "docs/source/includes/linear/src/libss/join2.rst",
    "content": "join2\n-----\n\n.. automodule:: sharpy.linear.src.libss.join2"
  },
  {
    "path": "docs/source/includes/linear/src/libss/parallel.rst",
    "content": "parallel\n--------\n\n.. automodule:: sharpy.linear.src.libss.parallel"
  },
  {
    "path": "docs/source/includes/linear/src/libss/project.rst",
    "content": "project\n-------\n\n.. automodule:: sharpy.linear.src.libss.project"
  },
  {
    "path": "docs/source/includes/linear/src/libss/random_ss.rst",
    "content": "random_ss\n---------\n\n.. automodule:: sharpy.linear.src.libss.random_ss"
  },
  {
    "path": "docs/source/includes/linear/src/libss/retain_inout_channels.rst",
    "content": "retain_inout_channels\n---------------------\n\n.. automodule:: sharpy.linear.src.libss.retain_inout_channels"
  },
  {
    "path": "docs/source/includes/linear/src/libss/scale_SS.rst",
    "content": "scale_SS\n--------\n\n.. automodule:: sharpy.linear.src.libss.scale_SS"
  },
  {
    "path": "docs/source/includes/linear/src/libss/series.rst",
    "content": "series\n------\n\n.. automodule:: sharpy.linear.src.libss.series"
  },
  {
    "path": "docs/source/includes/linear/src/libss/simulate.rst",
    "content": "simulate\n--------\n\n.. automodule:: sharpy.linear.src.libss.simulate"
  },
  {
    "path": "docs/source/includes/linear/src/libss/ss_block.rst",
    "content": "ss_block\n--------\n\n.. autoclass:: sharpy.linear.src.libss.ss_block\n\t:members:"
  },
  {
    "path": "docs/source/includes/linear/src/libss/ss_to_scipy.rst",
    "content": "ss_to_scipy\n-----------\n\n.. automodule:: sharpy.linear.src.libss.ss_to_scipy"
  },
  {
    "path": "docs/source/includes/linear/src/libss/sum_ss.rst",
    "content": "sum_ss\n------\n\n.. automodule:: sharpy.linear.src.libss.sum_ss"
  },
  {
    "path": "docs/source/includes/linear/src/lin_aeroelastic/LinAeroEla.rst",
    "content": "LinAeroEla\n----------\n\n.. autoclass:: sharpy.linear.src.lin_aeroelastic.LinAeroEla\n\t:members:"
  },
  {
    "path": "docs/source/includes/linear/src/lin_aeroelastic/index.rst",
    "content": "Linear aeroelastic model based on coupled GEBM + UVLM\n+++++++++++++++++++++++++++++++++++++++++++++++++++++\n\nLinear aeroelastic model based on coupled GEBM + UVLM\nS. Maraniello, Jul 2018\n\n\n.. toctree::\n\t:glob:\n\n\t./LinAeroEla\n"
  },
  {
    "path": "docs/source/includes/linear/src/lin_utils/Info.rst",
    "content": "Info\n----\n\n.. autoclass:: sharpy.linear.src.lin_utils.Info\n\t:members:"
  },
  {
    "path": "docs/source/includes/linear/src/lin_utils/comp_tot_force.rst",
    "content": "comp_tot_force\n--------------\n\n.. automodule:: sharpy.linear.src.lin_utils.comp_tot_force"
  },
  {
    "path": "docs/source/includes/linear/src/lin_utils/extract_from_data.rst",
    "content": "extract_from_data\n-----------------\n\n.. automodule:: sharpy.linear.src.lin_utils.extract_from_data"
  },
  {
    "path": "docs/source/includes/linear/src/lin_utils/index.rst",
    "content": "Utilities functions for linear analysis\n+++++++++++++++++++++++++++++++++++++++\n\nUtilities functions for linear analysis\n\n\n.. toctree::\n\t:glob:\n\n\t./Info\n\t./comp_tot_force\n\t./extract_from_data\n\t./solve_linear\n"
  },
  {
    "path": "docs/source/includes/linear/src/lin_utils/solve_linear.rst",
    "content": "solve_linear\n------------\n\n.. automodule:: sharpy.linear.src.lin_utils.solve_linear"
  },
  {
    "path": "docs/source/includes/linear/src/lingebm/FlexDynamic.rst",
    "content": "FlexDynamic\n-----------\n\n.. autoclass:: sharpy.linear.src.lingebm.FlexDynamic\n\t:members:"
  },
  {
    "path": "docs/source/includes/linear/src/lingebm/index.rst",
    "content": "Linear beam model class\n+++++++++++++++++++++++\n\nLinear beam model class\n\nS. Maraniello, Aug 2018\nN. Goizueta\n\n\n.. toctree::\n\t:glob:\n\n\t./FlexDynamic\n\t./newmark_ss\n\t./sort_eigvals\n"
  },
  {
    "path": "docs/source/includes/linear/src/lingebm/newmark_ss.rst",
    "content": "newmark_ss\n----------\n\n.. autofunction:: sharpy.linear.src.lingebm.newmark_ss\n"
  },
  {
    "path": "docs/source/includes/linear/src/lingebm/sort_eigvals.rst",
    "content": "sort_eigvals\n------------\n\n.. automodule:: sharpy.linear.src.lingebm.sort_eigvals"
  },
  {
    "path": "docs/source/includes/linear/src/linuvlm/Dynamic.rst",
    "content": "Dynamic\n-------\n\n.. autoclass:: sharpy.linear.src.linuvlm.Dynamic\n\t:members:"
  },
  {
    "path": "docs/source/includes/linear/src/linuvlm/DynamicBlock.rst",
    "content": "DynamicBlock\n------------\n\n.. autoclass:: sharpy.linear.src.linuvlm.DynamicBlock\n\t:members:"
  },
  {
    "path": "docs/source/includes/linear/src/linuvlm/Frequency.rst",
    "content": "Frequency\n---------\n\n.. autoclass:: sharpy.linear.src.linuvlm.Frequency\n\t:members:"
  },
  {
    "path": "docs/source/includes/linear/src/linuvlm/Static.rst",
    "content": "Static\n------\n\n.. autoclass:: sharpy.linear.src.linuvlm.Static\n\t:members:"
  },
  {
    "path": "docs/source/includes/linear/src/linuvlm/get_Cw_cpx.rst",
    "content": "get_Cw_cpx\n----------\n\n.. automodule:: sharpy.linear.src.linuvlm.get_Cw_cpx"
  },
  {
    "path": "docs/source/includes/linear/src/linuvlm/index.rst",
    "content": "Linear UVLM solver classes\n++++++++++++++++++++++++++\n\nLinear UVLM solver classes\n\nContains classes to assemble a linear UVLM system. The three main classes are:\n\n* :class:`~sharpy.linear.src.linuvlm.Static`: : for static VLM solutions.\n\n* :class:`~sharpy.linear.src.linuvlm.Dynamic`: for dynamic UVLM solutions.\n\n* :class:`~sharpy.linear.src.linuvlm.DynamicBlock`: a more efficient representation of ``Dynamic`` using lists for the\n  different blocks in the UVLM equations\n\nReferences:\n\n    Maraniello, S., & Palacios, R.. State-Space Realizations and Internal Balancing in Potential-Flow\n    Aerodynamics with Arbitrary Kinematics. AIAA Journal, 57(6), 1–14. 2019. https://doi.org/10.2514/1.J058153\n\n\n\n.. toctree::\n\t:glob:\n\n\t./Dynamic\n\t./DynamicBlock\n\t./Frequency\n\t./Static\n\t./get_Cw_cpx\n"
  },
  {
    "path": "docs/source/includes/linear/src/multisurfaces/MultiAeroGridSurfaces.rst",
    "content": "MultiAeroGridSurfaces\n---------------------\n\n.. autoclass:: sharpy.linear.src.multisurfaces.MultiAeroGridSurfaces\n\t:members:"
  },
  {
    "path": "docs/source/includes/linear/src/multisurfaces/index.rst",
    "content": "Generation of multiple aerodynamic surfaces\n+++++++++++++++++++++++++++++++++++++++++++\n\n\nS. Maraniello, 25 May 2018\n\n\n.. toctree::\n\t:glob:\n\n\t./MultiAeroGridSurfaces\n"
  },
  {
    "path": "docs/source/includes/linear/src/surface/AeroGridGeo.rst",
    "content": "AeroGridGeo\n-----------\n\n.. autoclass:: sharpy.linear.src.surface.AeroGridGeo\n\t:members:"
  },
  {
    "path": "docs/source/includes/linear/src/surface/AeroGridSurface.rst",
    "content": "AeroGridSurface\n---------------\n\n.. autoclass:: sharpy.linear.src.surface.AeroGridSurface\n\t:members:"
  },
  {
    "path": "docs/source/includes/linear/src/surface/get_aic3_cpp.rst",
    "content": "get_aic3_cpp\n------------\n\n.. automodule:: sharpy.linear.src.surface.get_aic3_cpp"
  },
  {
    "path": "docs/source/includes/linear/src/surface/index.rst",
    "content": "Geometrical methods for bound surfaces\n++++++++++++++++++++++++++++++++++++++\n\nGeometrical methods for bound surfaces\n\n\nS. Maraniello, 20 May 2018\n\n\n.. toctree::\n\t:glob:\n\n\t./AeroGridGeo\n\t./AeroGridSurface\n\t./get_aic3_cpp\n"
  },
  {
    "path": "docs/source/includes/postprocs/AeroForcesCalculator.rst",
    "content": "AeroForcesCalculator\n--------------------\n\n\n\n.. autoclass:: sharpy.postproc.aeroforcescalculator.AeroForcesCalculator\n\t:members:"
  },
  {
    "path": "docs/source/includes/postprocs/AerogridPlot.rst",
    "content": "AerogridPlot\n------------\n\n\n\n.. autoclass:: sharpy.postproc.aerogridplot.AerogridPlot\n\t:members:"
  },
  {
    "path": "docs/source/includes/postprocs/AsymptoticStability.rst",
    "content": "AsymptoticStability\n-------------------\n\n\n\n.. autoclass:: sharpy.postproc.asymptoticstability.AsymptoticStability\n\t:members:"
  },
  {
    "path": "docs/source/includes/postprocs/BeamLoads.rst",
    "content": "BeamLoads\n---------\n\n\n\n.. autoclass:: sharpy.postproc.beamloads.BeamLoads\n\t:members:"
  },
  {
    "path": "docs/source/includes/postprocs/BeamPlot.rst",
    "content": "BeamPlot\n--------\n\n\n\n.. autoclass:: sharpy.postproc.beamplot.BeamPlot\n\t:members:"
  },
  {
    "path": "docs/source/includes/postprocs/Cleanup.rst",
    "content": "Cleanup\n-------\n\n\n\n.. autoclass:: sharpy.postproc.cleanup.Cleanup\n\t:members:"
  },
  {
    "path": "docs/source/includes/postprocs/FrequencyResponse.rst",
    "content": "FrequencyResponse\n-----------------\n\n\n\n.. autoclass:: sharpy.postproc.frequencyresponse.FrequencyResponse\n\t:members:"
  },
  {
    "path": "docs/source/includes/postprocs/LiftDistribution.rst",
    "content": "LiftDistribution\n----------------\n\n\n\n.. autoclass:: sharpy.postproc.liftdistribution.LiftDistribution\n\t:members:"
  },
  {
    "path": "docs/source/includes/postprocs/PickleData.rst",
    "content": "PickleData\n----------\n\n\n\n.. autoclass:: sharpy.postproc.pickledata.PickleData\n\t:members:"
  },
  {
    "path": "docs/source/includes/postprocs/PlotFlowField.rst",
    "content": "PlotFlowField\n-------------\n\n\n\n.. autoclass:: sharpy.postproc.plotflowfield.PlotFlowField\n\t:members:"
  },
  {
    "path": "docs/source/includes/postprocs/SaveData.rst",
    "content": "SaveData\n--------\n\n\n\n.. autoclass:: sharpy.postproc.savedata.SaveData\n\t:members:"
  },
  {
    "path": "docs/source/includes/postprocs/SaveParametricCase.rst",
    "content": "SaveParametricCase\n------------------\n\n\n\n.. autoclass:: sharpy.postproc.saveparametriccase.SaveParametricCase\n\t:members:"
  },
  {
    "path": "docs/source/includes/postprocs/StabilityDerivatives.rst",
    "content": "StabilityDerivatives\n--------------------\n\n\n\n.. autoclass:: sharpy.postproc.stabilityderivatives.StabilityDerivatives\n\t:members:"
  },
  {
    "path": "docs/source/includes/postprocs/StallCheck.rst",
    "content": "StallCheck\n----------\n\n\n\n.. autoclass:: sharpy.postproc.stallcheck.StallCheck\n\t:members:"
  },
  {
    "path": "docs/source/includes/postprocs/UDPout.rst",
    "content": "UDPout\n------\n\n\n\n.. autoclass:: sharpy.postproc.udpout.UDPout\n\t:members:"
  },
  {
    "path": "docs/source/includes/postprocs/WriteVariablesTime.rst",
    "content": "WriteVariablesTime\n------------------\n\n\n\n.. autoclass:: sharpy.postproc.writevariablestime.WriteVariablesTime\n\t:members:"
  },
  {
    "path": "docs/source/includes/rom/balanced/Balanced.rst",
    "content": "Balanced\n--------\n\n.. autoclass:: sharpy.rom.balanced.Balanced\n\t:members:"
  },
  {
    "path": "docs/source/includes/rom/balanced/Direct.rst",
    "content": "Direct\n------\n\n.. autoclass:: sharpy.rom.balanced.Direct\n\t:members:"
  },
  {
    "path": "docs/source/includes/rom/balanced/FrequencyLimited.rst",
    "content": "FrequencyLimited\n----------------\n\n.. autoclass:: sharpy.rom.balanced.FrequencyLimited\n\t:members:"
  },
  {
    "path": "docs/source/includes/rom/balanced/Iterative.rst",
    "content": "Iterative\n---------\n\n.. autoclass:: sharpy.rom.balanced.Iterative\n\t:members:"
  },
  {
    "path": "docs/source/includes/rom/balanced/index.rst",
    "content": "Balancing Methods\n+++++++++++++++++\n\n\nThe following classes are available to reduce a linear system employing balancing methods.\n\nThe main class is :class:`.Balanced` and the other available classes:\n\n* :class:`.Direct`\n\n* :class:`.Iterative`\n\n* :class:`.FrequencyLimited`\n\ncorrespond to the reduction algorithm.\n\n\n\n.. toctree::\n\t:glob:\n\n\t./Balanced\n\t./Direct\n\t./FrequencyLimited\n\t./Iterative\n"
  },
  {
    "path": "docs/source/includes/rom/index.rst",
    "content": "Model Order Reduction\n---------------------\n\n\n.. toctree::\n\t:maxdepth: 1\n\n\t./balanced/index\n\t./krylov/index\n\t./utils/index\n"
  },
  {
    "path": "docs/source/includes/rom/krylov/Krylov.rst",
    "content": "Krylov\n------\n\n.. autoclass:: sharpy.rom.krylov.Krylov\n\t:members:"
  },
  {
    "path": "docs/source/includes/rom/krylov/index.rst",
    "content": "Krylov-subspaces model order reduction techniques\n+++++++++++++++++++++++++++++++++++++++++++++++++\n\n\n\n.. toctree::\n\t:glob:\n\n\t./Krylov\n"
  },
  {
    "path": "docs/source/includes/rom/utils/index.rst",
    "content": "Utils\n-----\n\n.. toctree::\n\t:maxdepth: 1\n\n\t./krylovutils/index\n\t./librom/index\n\t./librom_interp/index\n"
  },
  {
    "path": "docs/source/includes/rom/utils/krylovutils/check_eye.rst",
    "content": "check_eye\n---------\n\n.. automodule:: sharpy.rom.utils.krylovutils.check_eye"
  },
  {
    "path": "docs/source/includes/rom/utils/krylovutils/construct_krylov.rst",
    "content": "construct_krylov\n----------------\n\n.. automodule:: sharpy.rom.utils.krylovutils.construct_krylov"
  },
  {
    "path": "docs/source/includes/rom/utils/krylovutils/evec.rst",
    "content": "evec\n----\n\n.. automodule:: sharpy.rom.utils.krylovutils.evec"
  },
  {
    "path": "docs/source/includes/rom/utils/krylovutils/index.rst",
    "content": "Krylov Model Reduction Methods Utilities\n++++++++++++++++++++++++++++++++++++++++\n\n\n\n.. toctree::\n\t:glob:\n\n\t./check_eye\n\t./construct_krylov\n\t./evec\n\t./lu_factor\n\t./lu_solve\n\t./mgs_ortho\n\t./remove_a12\n\t./schur_ordered\n"
  },
  {
    "path": "docs/source/includes/rom/utils/krylovutils/lu_factor.rst",
    "content": "lu_factor\n---------\n\n.. automodule:: sharpy.rom.utils.krylovutils.lu_factor"
  },
  {
    "path": "docs/source/includes/rom/utils/krylovutils/lu_solve.rst",
    "content": "lu_solve\n--------\n\n.. automodule:: sharpy.rom.utils.krylovutils.lu_solve"
  },
  {
    "path": "docs/source/includes/rom/utils/krylovutils/mgs_ortho.rst",
    "content": "mgs_ortho\n---------\n\n.. automodule:: sharpy.rom.utils.krylovutils.mgs_ortho"
  },
  {
    "path": "docs/source/includes/rom/utils/krylovutils/remove_a12.rst",
    "content": "remove_a12\n----------\n\n.. automodule:: sharpy.rom.utils.krylovutils.remove_a12"
  },
  {
    "path": "docs/source/includes/rom/utils/krylovutils/schur_ordered.rst",
    "content": "schur_ordered\n-------------\n\n.. automodule:: sharpy.rom.utils.krylovutils.schur_ordered"
  },
  {
    "path": "docs/source/includes/rom/utils/librom/balfreq.rst",
    "content": "balfreq\n-------\n\n.. automodule:: sharpy.rom.utils.librom.balfreq"
  },
  {
    "path": "docs/source/includes/rom/utils/librom/balreal_direct_py.rst",
    "content": "balreal_direct_py\n-----------------\n\n.. automodule:: sharpy.rom.utils.librom.balreal_direct_py"
  },
  {
    "path": "docs/source/includes/rom/utils/librom/balreal_iter.rst",
    "content": "balreal_iter\n------------\n\n.. automodule:: sharpy.rom.utils.librom.balreal_iter"
  },
  {
    "path": "docs/source/includes/rom/utils/librom/balreal_iter_old.rst",
    "content": "balreal_iter_old\n----------------\n\n.. automodule:: sharpy.rom.utils.librom.balreal_iter_old"
  },
  {
    "path": "docs/source/includes/rom/utils/librom/check_stability.rst",
    "content": "check_stability\n---------------\n\n.. automodule:: sharpy.rom.utils.librom.check_stability"
  },
  {
    "path": "docs/source/includes/rom/utils/librom/eigen_dec.rst",
    "content": "eigen_dec\n---------\n\n.. automodule:: sharpy.rom.utils.librom.eigen_dec"
  },
  {
    "path": "docs/source/includes/rom/utils/librom/get_gauss_weights.rst",
    "content": "get_gauss_weights\n-----------------\n\n.. automodule:: sharpy.rom.utils.librom.get_gauss_weights"
  },
  {
    "path": "docs/source/includes/rom/utils/librom/get_trapz_weights.rst",
    "content": "get_trapz_weights\n-----------------\n\n.. automodule:: sharpy.rom.utils.librom.get_trapz_weights"
  },
  {
    "path": "docs/source/includes/rom/utils/librom/index.rst",
    "content": "General ROM utilities\n+++++++++++++++++++++\n\n\nS. Maraniello, 14 Feb 2018\n\n\n.. toctree::\n\t:glob:\n\n\t./balfreq\n\t./balreal_direct_py\n\t./balreal_iter\n\t./balreal_iter_old\n\t./check_stability\n\t./eigen_dec\n\t./get_gauss_weights\n\t./get_trapz_weights\n\t./low_rank_smith\n\t./modred\n\t./res_discrete_lyap\n\t./smith_iter\n\t./tune_rom\n"
  },
  {
    "path": "docs/source/includes/rom/utils/librom/low_rank_smith.rst",
    "content": "low_rank_smith\n--------------\n\n.. automodule:: sharpy.rom.utils.librom.low_rank_smith"
  },
  {
    "path": "docs/source/includes/rom/utils/librom/modred.rst",
    "content": "modred\n------\n\n.. automodule:: sharpy.rom.utils.librom.modred"
  },
  {
    "path": "docs/source/includes/rom/utils/librom/res_discrete_lyap.rst",
    "content": "res_discrete_lyap\n-----------------\n\n.. automodule:: sharpy.rom.utils.librom.res_discrete_lyap"
  },
  {
    "path": "docs/source/includes/rom/utils/librom/smith_iter.rst",
    "content": "smith_iter\n----------\n\n.. automodule:: sharpy.rom.utils.librom.smith_iter"
  },
  {
    "path": "docs/source/includes/rom/utils/librom/tune_rom.rst",
    "content": "tune_rom\n--------\n\n.. automodule:: sharpy.rom.utils.librom.tune_rom"
  },
  {
    "path": "docs/source/includes/rom/utils/librom_interp/FLB_transfer_function.rst",
    "content": "FLB_transfer_function\n---------------------\n\n.. automodule:: sharpy.rom.utils.librom_interp.FLB_transfer_function"
  },
  {
    "path": "docs/source/includes/rom/utils/librom_interp/InterpROM.rst",
    "content": "InterpROM\n---------\n\n.. autoclass:: sharpy.rom.utils.librom_interp.InterpROM\n\t:members:"
  },
  {
    "path": "docs/source/includes/rom/utils/librom_interp/index.rst",
    "content": "Methods for the interpolation of DLTI ROMs\n++++++++++++++++++++++++++++++++++++++++++\n\n\nThis is library for  state-space models interpolation. These routines are intended\nfor small size state-space models (ROMs), hence some methods may not be optimised\nto exploit sparsity structures. For generality purposes, all methods require in\ninput interpolatory weights.\n\n\nThe module includes the methods:\n\n    - :func:`~sharpy.rom.utils.librom_interp.transfer_function`: returns an interpolatory state-space model based on the\n      transfer function method [1]. This method is general and is, effectively, a\n      wrapper of the :func:`sharpy.linear.src.libss.join` method.\n\n    - :func:`~sharpy.rom.utils.librom_interp.BT_transfer_function`: evolution of transfer function methods. The growth of\n      the interpolated system size is avoided through balancing.\n\n\nReferences:\n\n    [1] Benner, P., Gugercin, S. & Willcox, K., 2015. A Survey of Projection-Based\n    Model Reduction Methods for Parametric Dynamical Systems. SIAM Review, 57(4),\n    pp.483–531.\n\n\nAuthor: S. Maraniello\n\nDate: Mar-Apr 2019\n\n\n\n\n.. toctree::\n\t:glob:\n\n\t./FLB_transfer_function\n\t./InterpROM\n\t./transfer_function\n"
  },
  {
    "path": "docs/source/includes/rom/utils/librom_interp/transfer_function.rst",
    "content": "transfer_function\n-----------------\n\n.. automodule:: sharpy.rom.utils.librom_interp.transfer_function"
  },
  {
    "path": "docs/source/includes/solvers/aero/DynamicUVLM.rst",
    "content": "DynamicUVLM\n-----------\n\n\n\n.. autoclass:: sharpy.solvers.dynamicuvlm.DynamicUVLM\n\t:members:"
  },
  {
    "path": "docs/source/includes/solvers/aero/NoAero.rst",
    "content": "NoAero\n------\n\n\n\n.. autoclass:: sharpy.solvers.noaero.NoAero\n\t:members:"
  },
  {
    "path": "docs/source/includes/solvers/aero/PrescribedUvlm.rst",
    "content": "PrescribedUvlm\n--------------\n\n\n\n.. autoclass:: sharpy.solvers.prescribeduvlm.PrescribedUvlm\n\t:members:"
  },
  {
    "path": "docs/source/includes/solvers/aero/StaticUvlm.rst",
    "content": "StaticUvlm\n----------\n\n\n\n.. autoclass:: sharpy.solvers.staticuvlm.StaticUvlm\n\t:members:"
  },
  {
    "path": "docs/source/includes/solvers/aero/StepLinearUVLM.rst",
    "content": "StepLinearUVLM\n--------------\n\n\n\n.. autoclass:: sharpy.solvers.steplinearuvlm.StepLinearUVLM\n\t:members:"
  },
  {
    "path": "docs/source/includes/solvers/aero/StepUvlm.rst",
    "content": "StepUvlm\n--------\n\n\n\n.. autoclass:: sharpy.solvers.stepuvlm.StepUvlm\n\t:members:"
  },
  {
    "path": "docs/source/includes/solvers/aero_solvers.rst",
    "content": "Aero Solvers\n++++++++++++\n\n.. toctree::\n    ./aero/DynamicUVLM\n    ./aero/NoAero\n    ./aero/PrescribedUvlm\n    ./aero/StaticUvlm\n    ./aero/StepLinearUVLM\n    ./aero/StepUvlm\n"
  },
  {
    "path": "docs/source/includes/solvers/coupled/DynamicCoupled.rst",
    "content": "DynamicCoupled\n--------------\n\n\n\n.. autoclass:: sharpy.solvers.dynamiccoupled.DynamicCoupled\n\t:members:"
  },
  {
    "path": "docs/source/includes/solvers/coupled/LinDynamicSim.rst",
    "content": "LinDynamicSim\n-------------\n\n\n\n.. autoclass:: sharpy.solvers.lindynamicsim.LinDynamicSim\n\t:members:"
  },
  {
    "path": "docs/source/includes/solvers/coupled/StaticCoupled.rst",
    "content": "StaticCoupled\n-------------\n\n\n\n.. autoclass:: sharpy.solvers.staticcoupled.StaticCoupled\n\t:members:"
  },
  {
    "path": "docs/source/includes/solvers/coupled/StaticCoupledRBM.rst",
    "content": "StaticCoupledRBM\n----------------\n\n\n\n.. autoclass:: sharpy.solvers.staticcoupledrbm.StaticCoupledRBM\n\t:members:"
  },
  {
    "path": "docs/source/includes/solvers/coupled_solvers.rst",
    "content": "Coupled Solvers\n+++++++++++++++\n\n.. toctree::\n    ./coupled/DynamicCoupled\n    ./coupled/LinDynamicSim\n    ./coupled/StaticCoupled\n    ./coupled/StaticCoupledRBM\n"
  },
  {
    "path": "docs/source/includes/solvers/flight dynamics/StaticTrim.rst",
    "content": "StaticTrim\n----------\n\n\n\n.. autoclass:: sharpy.solvers.statictrim.StaticTrim\n\t:members:"
  },
  {
    "path": "docs/source/includes/solvers/flight dynamics/Trim.rst",
    "content": "Trim\n----\n\n\n\n.. autoclass:: sharpy.solvers.trim.Trim\n\t:members:"
  },
  {
    "path": "docs/source/includes/solvers/flight dynamics_solvers.rst",
    "content": "Flight dynamics Solvers\n+++++++++++++++++++++++\n\n.. toctree::\n    ./flight dynamics/StaticTrim\n    ./flight dynamics/Trim\n"
  },
  {
    "path": "docs/source/includes/solvers/linear/LinearAssembler.rst",
    "content": "LinearAssembler\n---------------\n\n\n\n.. autoclass:: sharpy.solvers.linearassembler.LinearAssembler\n\t:members:"
  },
  {
    "path": "docs/source/includes/solvers/linear/Modal.rst",
    "content": "Modal\n-----\n\n\n\n.. autoclass:: sharpy.solvers.modal.Modal\n\t:members:"
  },
  {
    "path": "docs/source/includes/solvers/linear_solvers.rst",
    "content": "Linear Solvers\n++++++++++++++\n\n.. toctree::\n    ./linear/LinearAssembler\n    ./linear/Modal\n"
  },
  {
    "path": "docs/source/includes/solvers/loader/AerogridLoader.rst",
    "content": "AerogridLoader\n--------------\n\n\n\n.. autoclass:: sharpy.solvers.aerogridloader.AerogridLoader\n\t:members:"
  },
  {
    "path": "docs/source/includes/solvers/loader/BeamLoader.rst",
    "content": "BeamLoader\n----------\n\n\n\n.. autoclass:: sharpy.solvers.beamloader.BeamLoader\n\t:members:"
  },
  {
    "path": "docs/source/includes/solvers/loader/PreSharpy.rst",
    "content": "PreSharpy\n---------\n\n\n\n.. autoclass:: sharpy.presharpy.presharpy.PreSharpy\n\t:members:"
  },
  {
    "path": "docs/source/includes/solvers/loader_solvers.rst",
    "content": "Loader Solvers\n++++++++++++++\n\n.. toctree::\n    ./loader/PreSharpy\n    ./loader/AerogridLoader\n    ./loader/BeamLoader\n"
  },
  {
    "path": "docs/source/includes/solvers/structural/NonLinearDynamic.rst",
    "content": "NonLinearDynamic\n----------------\n\n\n\n.. autoclass:: sharpy.solvers.nonlineardynamic.NonLinearDynamic\n\t:members:"
  },
  {
    "path": "docs/source/includes/solvers/structural/NonLinearDynamicCoupledStep.rst",
    "content": "NonLinearDynamicCoupledStep\n---------------------------\n\n\n\n.. autoclass:: sharpy.solvers.nonlineardynamiccoupledstep.NonLinearDynamicCoupledStep\n\t:members:"
  },
  {
    "path": "docs/source/includes/solvers/structural/NonLinearDynamicMultibody.rst",
    "content": "NonLinearDynamicMultibody\n-------------------------\n\n\n\n.. autoclass:: sharpy.solvers.nonlineardynamicmultibody.NonLinearDynamicMultibody\n\t:members:"
  },
  {
    "path": "docs/source/includes/solvers/structural/NonLinearDynamicPrescribedStep.rst",
    "content": "NonLinearDynamicPrescribedStep\n------------------------------\n\n\n\n.. autoclass:: sharpy.solvers.nonlineardynamicprescribedstep.NonLinearDynamicPrescribedStep\n\t:members:"
  },
  {
    "path": "docs/source/includes/solvers/structural/NonLinearStatic.rst",
    "content": "NonLinearStatic\n---------------\n\n\n\n.. autoclass:: sharpy.solvers.nonlinearstatic.NonLinearStatic\n\t:members:"
  },
  {
    "path": "docs/source/includes/solvers/structural/RigidDynamicCoupledStep.rst",
    "content": "RigidDynamicCoupledStep\n-----------------------\n\n\n\n.. autoclass:: sharpy.solvers.rigiddynamiccoupledstep.RigidDynamicCoupledStep\n\t:members:"
  },
  {
    "path": "docs/source/includes/solvers/structural/RigidDynamicPrescribedStep.rst",
    "content": "RigidDynamicPrescribedStep\n--------------------------\n\n\n\n.. autoclass:: sharpy.solvers.rigiddynamicprescribedstep.RigidDynamicPrescribedStep\n\t:members:"
  },
  {
    "path": "docs/source/includes/solvers/structural_solvers.rst",
    "content": "Structural Solvers\n++++++++++++++++++\n\n.. toctree::\n    ./structural/NonLinearDynamic\n    ./structural/NonLinearDynamicCoupledStep\n    ./structural/NonLinearDynamicMultibody\n    ./structural/NonLinearDynamicPrescribedStep\n    ./structural/NonLinearStatic\n    ./structural/RigidDynamicCoupledStep\n    ./structural/RigidDynamicPrescribedStep\n"
  },
  {
    "path": "docs/source/includes/solvers/time_integrator/GeneralisedAlpha.rst",
    "content": "GeneralisedAlpha\n----------------\n\n\n\n.. autoclass:: sharpy.solvers.generalisedalpha.GeneralisedAlpha\n\t:members:"
  },
  {
    "path": "docs/source/includes/solvers/time_integrator/NewmarkBeta.rst",
    "content": "NewmarkBeta\n-----------\n\n\n\n.. autoclass:: sharpy.solvers.newmarkbeta.NewmarkBeta\n\t:members:"
  },
  {
    "path": "docs/source/includes/solvers/time_integrator_solvers.rst",
    "content": "Time_integrator Solvers\n+++++++++++++++++++++++\n\n.. toctree::\n    ./time_integrator/NewmarkBeta\n    ./time_integrator/GeneralisedAlpha\n"
  },
  {
    "path": "docs/source/includes/structure/index.rst",
    "content": "Structural Packages\n-------------------\n\n\n.. toctree::\n\t:maxdepth: 1\n\n\t./models/index\n\t./utils/index\n"
  },
  {
    "path": "docs/source/includes/structure/models/beam/StructTimeStepInfo.rst",
    "content": "StructTimeStepInfo\n------------------\n\n.. autoclass:: sharpy.structure.models.beam.StructTimeStepInfo\n\t:members:"
  },
  {
    "path": "docs/source/includes/structure/models/beam/index.rst",
    "content": ".. toctree::\n\t:glob:\n\n\t./StructTimeStepInfo\n"
  },
  {
    "path": "docs/source/includes/structure/models/beamstructures/Element.rst",
    "content": "Element\n-------\n\n.. autoclass:: sharpy.structure.models.beamstructures.Element\n\t:members:"
  },
  {
    "path": "docs/source/includes/structure/models/beamstructures/index.rst",
    "content": ".. toctree::\n\t:glob:\n\n\t./Element\n"
  },
  {
    "path": "docs/source/includes/structure/models/index.rst",
    "content": "Models\n------\n\n.. toctree::\n\t:maxdepth: 1\n\n\t./beam/index\n\t./beamstructures/index\n"
  },
  {
    "path": "docs/source/includes/structure/utils/index.rst",
    "content": "Utils\n-----\n\n.. toctree::\n\t:maxdepth: 1\n\n\t./lagrangeconstraints/index\n\t./modalutils/index\n\t./xbeamlib/index\n"
  },
  {
    "path": "docs/source/includes/structure/utils/lagrangeconstraints/BaseLagrangeConstraint.rst",
    "content": "BaseLagrangeConstraint\n----------------------\n\n.. autoclass:: sharpy.structure.utils.lagrangeconstraints.BaseLagrangeConstraint\n\t:members:"
  },
  {
    "path": "docs/source/includes/structure/utils/lagrangeconstraints/constant_rot_vel_FoR.rst",
    "content": "constant_rot_vel_FoR\n--------------------\n\n.. autoclass:: sharpy.structure.utils.lagrangeconstraints.constant_rot_vel_FoR\n\t:members:"
  },
  {
    "path": "docs/source/includes/structure/utils/lagrangeconstraints/constant_vel_FoR.rst",
    "content": "constant_vel_FoR\n----------------\n\n.. autoclass:: sharpy.structure.utils.lagrangeconstraints.constant_vel_FoR\n\t:members:"
  },
  {
    "path": "docs/source/includes/structure/utils/lagrangeconstraints/def_rot_axis_FoR_wrt_node_general.rst",
    "content": "def_rot_axis_FoR_wrt_node_general\n---------------------------------\n\n.. automodule:: sharpy.structure.utils.lagrangeconstraints.def_rot_axis_FoR_wrt_node_general"
  },
  {
    "path": "docs/source/includes/structure/utils/lagrangeconstraints/def_rot_axis_FoR_wrt_node_xyz.rst",
    "content": "def_rot_axis_FoR_wrt_node_xyz\n-----------------------------\n\n.. automodule:: sharpy.structure.utils.lagrangeconstraints.def_rot_axis_FoR_wrt_node_xyz"
  },
  {
    "path": "docs/source/includes/structure/utils/lagrangeconstraints/def_rot_vect_FoR_wrt_node.rst",
    "content": "def_rot_vect_FoR_wrt_node\n-------------------------\n\n.. automodule:: sharpy.structure.utils.lagrangeconstraints.def_rot_vect_FoR_wrt_node"
  },
  {
    "path": "docs/source/includes/structure/utils/lagrangeconstraints/def_rot_vel_FoR_wrt_node.rst",
    "content": "def_rot_vel_FoR_wrt_node\n------------------------\n\n.. automodule:: sharpy.structure.utils.lagrangeconstraints.def_rot_vel_FoR_wrt_node"
  },
  {
    "path": "docs/source/includes/structure/utils/lagrangeconstraints/define_FoR_dof.rst",
    "content": "define_FoR_dof\n--------------\n\n.. automodule:: sharpy.structure.utils.lagrangeconstraints.define_FoR_dof"
  },
  {
    "path": "docs/source/includes/structure/utils/lagrangeconstraints/define_node_dof.rst",
    "content": "define_node_dof\n---------------\n\n.. automodule:: sharpy.structure.utils.lagrangeconstraints.define_node_dof"
  },
  {
    "path": "docs/source/includes/structure/utils/lagrangeconstraints/define_num_LM_eq.rst",
    "content": "define_num_LM_eq\n----------------\n\n.. automodule:: sharpy.structure.utils.lagrangeconstraints.define_num_LM_eq"
  },
  {
    "path": "docs/source/includes/structure/utils/lagrangeconstraints/equal_lin_vel_node_FoR.rst",
    "content": "equal_lin_vel_node_FoR\n----------------------\n\n.. automodule:: sharpy.structure.utils.lagrangeconstraints.equal_lin_vel_node_FoR"
  },
  {
    "path": "docs/source/includes/structure/utils/lagrangeconstraints/equal_pos_node_FoR.rst",
    "content": "equal_pos_node_FoR\n------------------\n\n.. automodule:: sharpy.structure.utils.lagrangeconstraints.equal_pos_node_FoR"
  },
  {
    "path": "docs/source/includes/structure/utils/lagrangeconstraints/free.rst",
    "content": "free\n----\n\n.. autoclass:: sharpy.structure.utils.lagrangeconstraints.free\n\t:members:"
  },
  {
    "path": "docs/source/includes/structure/utils/lagrangeconstraints/fully_constrained_node_FoR.rst",
    "content": "fully_constrained_node_FoR\n--------------------------\n\n.. autoclass:: sharpy.structure.utils.lagrangeconstraints.fully_constrained_node_FoR\n\t:members:"
  },
  {
    "path": "docs/source/includes/structure/utils/lagrangeconstraints/generate_lagrange_matrix.rst",
    "content": "generate_lagrange_matrix\n------------------------\n\n.. automodule:: sharpy.structure.utils.lagrangeconstraints.generate_lagrange_matrix"
  },
  {
    "path": "docs/source/includes/structure/utils/lagrangeconstraints/hinge_FoR.rst",
    "content": "hinge_FoR\n---------\n\n.. autoclass:: sharpy.structure.utils.lagrangeconstraints.hinge_FoR\n\t:members:"
  },
  {
    "path": "docs/source/includes/structure/utils/lagrangeconstraints/hinge_FoR_wrtG.rst",
    "content": "hinge_FoR_wrtG\n--------------\n\n.. autoclass:: sharpy.structure.utils.lagrangeconstraints.hinge_FoR_wrtG\n\t:members:"
  },
  {
    "path": "docs/source/includes/structure/utils/lagrangeconstraints/hinge_node_FoR.rst",
    "content": "hinge_node_FoR\n--------------\n\n.. autoclass:: sharpy.structure.utils.lagrangeconstraints.hinge_node_FoR\n\t:members:"
  },
  {
    "path": "docs/source/includes/structure/utils/lagrangeconstraints/hinge_node_FoR_constant_vel.rst",
    "content": "hinge_node_FoR_constant_vel\n---------------------------\n\n.. autoclass:: sharpy.structure.utils.lagrangeconstraints.hinge_node_FoR_constant_vel\n\t:members:"
  },
  {
    "path": "docs/source/includes/structure/utils/lagrangeconstraints/index.rst",
    "content": "LagrangeConstraints library\n+++++++++++++++++++++++++++\n\nLagrangeConstraints library\n\nLibrary used to create the matrices associated to boundary conditions through\nthe method of Lagrange Multipliers. The source code includes four different sections.\n\n* Basic structures: basic functions and variables needed to organise the library with different Lagrange Constraints to enhance the interaction with this library.\n\n* Auxiliar functions: basic queries that are performed repeatedly.\n\n* Equations: functions that generate the equations associated to the constraint of basic degrees of freedom.\n\n* Lagrange Constraints: different available Lagrange Constraints. They tipically use the basic functions in \"Equations\" to assembly the required set of equations.\n\nAttributes:\n    dict_of_lc (dict): Dictionary including the available Lagrange Contraint identifier\n    (``_lc_id``) and the associated ``BaseLagrangeConstraint`` class\n\nNotes:\n    To use this library: import sharpy.structure.utils.lagrangeconstraints as lagrangeconstraints\n\nArgs:\n    lc_list (list): list of all the defined contraints\n    MBdict (dict): dictionary with the MultiBody and LagrangeMultipliers information\n    MB_beam (list): list of :class:`~sharpy.structure.models.beam.Beam` of each of the bodies that form the system\n    MB_tstep (list): list of :class:`~sharpy.utils.datastructures.StructTimeStepInfo` of each of the bodies that form the system\n    num_LM_eq (int): number of new equations needed to define the boundary boundary conditions\n    sys_size (int): total number of degrees of freedom of the multibody system\n    dt (float): time step\n    Lambda (np.ndarray): list of Lagrange multipliers values\n    Lambda_dot (np.ndarray): list of the first derivative of the Lagrange multipliers values\n    dynamic_or_static (str): string defining if the computation is dynamic or static\n    LM_C (np.ndarray): Damping matrix associated to the Lagrange Multipliers equations\n    LM_K (np.ndarray): Stiffness matrix associated to the Lagrange Multipliers equations\n    LM_Q (np.ndarray): Vector of independent terms associated to the Lagrange Multipliers equations\n\n\n.. toctree::\n\t:glob:\n\n\t./BaseLagrangeConstraint\n\t./constant_rot_vel_FoR\n\t./constant_vel_FoR\n\t./def_rot_axis_FoR_wrt_node_general\n\t./def_rot_axis_FoR_wrt_node_xyz\n\t./def_rot_vect_FoR_wrt_node\n\t./def_rot_vel_FoR_wrt_node\n\t./define_FoR_dof\n\t./define_node_dof\n\t./define_num_LM_eq\n\t./equal_lin_vel_node_FoR\n\t./equal_pos_node_FoR\n\t./free\n\t./fully_constrained_node_FoR\n\t./generate_lagrange_matrix\n\t./hinge_FoR\n\t./hinge_FoR_wrtG\n\t./hinge_node_FoR\n\t./hinge_node_FoR_constant_vel\n\t./initialise_lc\n\t./lagrangeconstraint\n\t./lc_from_string\n\t./lin_vel_node_wrtA\n\t./lin_vel_node_wrtG\n\t./postprocess\n\t./print_available_lc\n\t./remove_constraint\n\t./spherical_FoR\n\t./spherical_node_FoR\n"
  },
  {
    "path": "docs/source/includes/structure/utils/lagrangeconstraints/initialise_lc.rst",
    "content": "initialise_lc\n-------------\n\n.. automodule:: sharpy.structure.utils.lagrangeconstraints.initialise_lc"
  },
  {
    "path": "docs/source/includes/structure/utils/lagrangeconstraints/lagrangeconstraint.rst",
    "content": "lagrangeconstraint\n------------------\n\n.. automodule:: sharpy.structure.utils.lagrangeconstraints.lagrangeconstraint"
  },
  {
    "path": "docs/source/includes/structure/utils/lagrangeconstraints/lc_from_string.rst",
    "content": "lc_from_string\n--------------\n\n.. automodule:: sharpy.structure.utils.lagrangeconstraints.lc_from_string"
  },
  {
    "path": "docs/source/includes/structure/utils/lagrangeconstraints/lin_vel_node_wrtA.rst",
    "content": "lin_vel_node_wrtA\n-----------------\n\n.. autoclass:: sharpy.structure.utils.lagrangeconstraints.lin_vel_node_wrtA\n\t:members:"
  },
  {
    "path": "docs/source/includes/structure/utils/lagrangeconstraints/lin_vel_node_wrtG.rst",
    "content": "lin_vel_node_wrtG\n-----------------\n\n.. autoclass:: sharpy.structure.utils.lagrangeconstraints.lin_vel_node_wrtG\n\t:members:"
  },
  {
    "path": "docs/source/includes/structure/utils/lagrangeconstraints/postprocess.rst",
    "content": "postprocess\n-----------\n\n.. automodule:: sharpy.structure.utils.lagrangeconstraints.postprocess"
  },
  {
    "path": "docs/source/includes/structure/utils/lagrangeconstraints/print_available_lc.rst",
    "content": "print_available_lc\n------------------\n\n.. automodule:: sharpy.structure.utils.lagrangeconstraints.print_available_lc"
  },
  {
    "path": "docs/source/includes/structure/utils/lagrangeconstraints/remove_constraint.rst",
    "content": "remove_constraint\n-----------------\n\n.. automodule:: sharpy.structure.utils.lagrangeconstraints.remove_constraint"
  },
  {
    "path": "docs/source/includes/structure/utils/lagrangeconstraints/spherical_FoR.rst",
    "content": "spherical_FoR\n-------------\n\n.. autoclass:: sharpy.structure.utils.lagrangeconstraints.spherical_FoR\n\t:members:"
  },
  {
    "path": "docs/source/includes/structure/utils/lagrangeconstraints/spherical_node_FoR.rst",
    "content": "spherical_node_FoR\n------------------\n\n.. autoclass:: sharpy.structure.utils.lagrangeconstraints.spherical_node_FoR\n\t:members:"
  },
  {
    "path": "docs/source/includes/structure/utils/modalutils/assert_modes_mass_normalised.rst",
    "content": "assert_modes_mass_normalised\n----------------------------\n\n.. automodule:: sharpy.structure.utils.modalutils.assert_modes_mass_normalised"
  },
  {
    "path": "docs/source/includes/structure/utils/modalutils/assert_orthogonal_eigenvectors.rst",
    "content": "assert_orthogonal_eigenvectors\n------------------------------\n\n.. automodule:: sharpy.structure.utils.modalutils.assert_orthogonal_eigenvectors"
  },
  {
    "path": "docs/source/includes/structure/utils/modalutils/free_modes_principal_axes.rst",
    "content": "free_modes_principal_axes\n-------------------------\n\n.. automodule:: sharpy.structure.utils.modalutils.free_modes_principal_axes"
  },
  {
    "path": "docs/source/includes/structure/utils/modalutils/get_mode_zeta.rst",
    "content": "get_mode_zeta\n-------------\n\n.. automodule:: sharpy.structure.utils.modalutils.get_mode_zeta"
  },
  {
    "path": "docs/source/includes/structure/utils/modalutils/index.rst",
    "content": ".. toctree::\n\t:glob:\n\n\t./assert_modes_mass_normalised\n\t./assert_orthogonal_eigenvectors\n\t./free_modes_principal_axes\n\t./get_mode_zeta\n\t./mode_sign_convention\n\t./modes_to_cg_ref\n\t./principal_axes_inertia\n\t./scale_mass_normalised_modes\n\t./scale_mode\n\t./write_modes_vtk\n\t./write_zeta_vtk\n"
  },
  {
    "path": "docs/source/includes/structure/utils/modalutils/mode_sign_convention.rst",
    "content": "mode_sign_convention\n--------------------\n\n.. automodule:: sharpy.structure.utils.modalutils.mode_sign_convention"
  },
  {
    "path": "docs/source/includes/structure/utils/modalutils/modes_to_cg_ref.rst",
    "content": "modes_to_cg_ref\n---------------\n\n.. automodule:: sharpy.structure.utils.modalutils.modes_to_cg_ref"
  },
  {
    "path": "docs/source/includes/structure/utils/modalutils/principal_axes_inertia.rst",
    "content": "principal_axes_inertia\n----------------------\n\n.. automodule:: sharpy.structure.utils.modalutils.principal_axes_inertia"
  },
  {
    "path": "docs/source/includes/structure/utils/modalutils/scale_mass_normalised_modes.rst",
    "content": "scale_mass_normalised_modes\n---------------------------\n\n.. automodule:: sharpy.structure.utils.modalutils.scale_mass_normalised_modes"
  },
  {
    "path": "docs/source/includes/structure/utils/modalutils/scale_mode.rst",
    "content": "scale_mode\n----------\n\n.. automodule:: sharpy.structure.utils.modalutils.scale_mode"
  },
  {
    "path": "docs/source/includes/structure/utils/modalutils/write_modes_vtk.rst",
    "content": "write_modes_vtk\n---------------\n\n.. automodule:: sharpy.structure.utils.modalutils.write_modes_vtk"
  },
  {
    "path": "docs/source/includes/structure/utils/modalutils/write_zeta_vtk.rst",
    "content": "write_zeta_vtk\n--------------\n\n.. automodule:: sharpy.structure.utils.modalutils.write_zeta_vtk"
  },
  {
    "path": "docs/source/includes/structure/utils/xbeamlib/Xbopts.rst",
    "content": "Xbopts\n------\n\n.. autoclass:: sharpy.structure.utils.xbeamlib.Xbopts\n\t:members:"
  },
  {
    "path": "docs/source/includes/structure/utils/xbeamlib/cbeam3_asbly_dynamic.rst",
    "content": "cbeam3_asbly_dynamic\n--------------------\n\n.. automodule:: sharpy.structure.utils.xbeamlib.cbeam3_asbly_dynamic"
  },
  {
    "path": "docs/source/includes/structure/utils/xbeamlib/cbeam3_asbly_static.rst",
    "content": "cbeam3_asbly_static\n-------------------\n\n.. automodule:: sharpy.structure.utils.xbeamlib.cbeam3_asbly_static"
  },
  {
    "path": "docs/source/includes/structure/utils/xbeamlib/cbeam3_correct_gravity_forces.rst",
    "content": "cbeam3_correct_gravity_forces\n-----------------------------\n\n.. automodule:: sharpy.structure.utils.xbeamlib.cbeam3_correct_gravity_forces"
  },
  {
    "path": "docs/source/includes/structure/utils/xbeamlib/cbeam3_loads.rst",
    "content": "cbeam3_loads\n------------\n\n.. automodule:: sharpy.structure.utils.xbeamlib.cbeam3_loads"
  },
  {
    "path": "docs/source/includes/structure/utils/xbeamlib/cbeam3_solv_modal.rst",
    "content": "cbeam3_solv_modal\n-----------------\n\n.. automodule:: sharpy.structure.utils.xbeamlib.cbeam3_solv_modal"
  },
  {
    "path": "docs/source/includes/structure/utils/xbeamlib/cbeam3_solv_nlnstatic.rst",
    "content": "cbeam3_solv_nlnstatic\n---------------------\n\n.. automodule:: sharpy.structure.utils.xbeamlib.cbeam3_solv_nlnstatic"
  },
  {
    "path": "docs/source/includes/structure/utils/xbeamlib/index.rst",
    "content": ".. toctree::\n\t:glob:\n\n\t./Xbopts\n\t./cbeam3_asbly_dynamic\n\t./cbeam3_asbly_static\n\t./cbeam3_correct_gravity_forces\n\t./cbeam3_loads\n\t./cbeam3_solv_modal\n\t./cbeam3_solv_nlnstatic\n\t./xbeam3_asbly_dynamic\n"
  },
  {
    "path": "docs/source/includes/structure/utils/xbeamlib/xbeam3_asbly_dynamic.rst",
    "content": "xbeam3_asbly_dynamic\n--------------------\n\n.. automodule:: sharpy.structure.utils.xbeamlib.xbeam3_asbly_dynamic"
  },
  {
    "path": "docs/source/includes/utils/algebra/cross3.rst",
    "content": "cross3\n------\n\n.. automodule:: sharpy.utils.algebra.cross3"
  },
  {
    "path": "docs/source/includes/utils/algebra/crv2quat.rst",
    "content": "crv2quat\n--------\n\n.. automodule:: sharpy.utils.algebra.crv2quat"
  },
  {
    "path": "docs/source/includes/utils/algebra/crv2rotation.rst",
    "content": "crv2rotation\n------------\n\n.. automodule:: sharpy.utils.algebra.crv2rotation"
  },
  {
    "path": "docs/source/includes/utils/algebra/crv2tan.rst",
    "content": "crv2tan\n-------\n\n.. automodule:: sharpy.utils.algebra.crv2tan"
  },
  {
    "path": "docs/source/includes/utils/algebra/crv_bounds.rst",
    "content": "crv_bounds\n----------\n\n.. automodule:: sharpy.utils.algebra.crv_bounds"
  },
  {
    "path": "docs/source/includes/utils/algebra/der_CcrvT_by_v.rst",
    "content": "der_CcrvT_by_v\n--------------\n\n.. automodule:: sharpy.utils.algebra.der_CcrvT_by_v"
  },
  {
    "path": "docs/source/includes/utils/algebra/der_Ccrv_by_v.rst",
    "content": "der_Ccrv_by_v\n-------------\n\n.. automodule:: sharpy.utils.algebra.der_Ccrv_by_v"
  },
  {
    "path": "docs/source/includes/utils/algebra/der_Ceuler_by_v.rst",
    "content": "der_Ceuler_by_v\n---------------\n\n.. automodule:: sharpy.utils.algebra.der_Ceuler_by_v"
  },
  {
    "path": "docs/source/includes/utils/algebra/der_Ceuler_by_v_NED.rst",
    "content": "der_Ceuler_by_v_NED\n-------------------\n\n.. automodule:: sharpy.utils.algebra.der_Ceuler_by_v_NED"
  },
  {
    "path": "docs/source/includes/utils/algebra/der_CquatT_by_v.rst",
    "content": "der_CquatT_by_v\n---------------\n\n.. automodule:: sharpy.utils.algebra.der_CquatT_by_v"
  },
  {
    "path": "docs/source/includes/utils/algebra/der_Cquat_by_v.rst",
    "content": "der_Cquat_by_v\n--------------\n\n.. automodule:: sharpy.utils.algebra.der_Cquat_by_v"
  },
  {
    "path": "docs/source/includes/utils/algebra/der_Peuler_by_v.rst",
    "content": "der_Peuler_by_v\n---------------\n\n.. automodule:: sharpy.utils.algebra.der_Peuler_by_v"
  },
  {
    "path": "docs/source/includes/utils/algebra/der_TanT_by_xv.rst",
    "content": "der_TanT_by_xv\n--------------\n\n.. automodule:: sharpy.utils.algebra.der_TanT_by_xv"
  },
  {
    "path": "docs/source/includes/utils/algebra/der_Tan_by_xv.rst",
    "content": "der_Tan_by_xv\n-------------\n\n.. automodule:: sharpy.utils.algebra.der_Tan_by_xv"
  },
  {
    "path": "docs/source/includes/utils/algebra/der_Teuler_by_w.rst",
    "content": "der_Teuler_by_w\n---------------\n\n.. automodule:: sharpy.utils.algebra.der_Teuler_by_w"
  },
  {
    "path": "docs/source/includes/utils/algebra/der_Teuler_by_w_NED.rst",
    "content": "der_Teuler_by_w_NED\n-------------------\n\n.. automodule:: sharpy.utils.algebra.der_Teuler_by_w_NED"
  },
  {
    "path": "docs/source/includes/utils/algebra/der_quat_wrt_crv.rst",
    "content": "der_quat_wrt_crv\n----------------\n\n.. automodule:: sharpy.utils.algebra.der_quat_wrt_crv"
  },
  {
    "path": "docs/source/includes/utils/algebra/der_skewp_skewp_v.rst",
    "content": "der_skewp_skewp_v\n-----------------\n\n.. automodule:: sharpy.utils.algebra.der_skewp_skewp_v"
  },
  {
    "path": "docs/source/includes/utils/algebra/deuler_dt.rst",
    "content": "deuler_dt\n---------\n\n.. automodule:: sharpy.utils.algebra.deuler_dt"
  },
  {
    "path": "docs/source/includes/utils/algebra/deuler_dt_NED.rst",
    "content": "deuler_dt_NED\n-------------\n\n.. automodule:: sharpy.utils.algebra.deuler_dt_NED"
  },
  {
    "path": "docs/source/includes/utils/algebra/euler2quat.rst",
    "content": "euler2quat\n----------\n\n.. automodule:: sharpy.utils.algebra.euler2quat"
  },
  {
    "path": "docs/source/includes/utils/algebra/euler2rot.rst",
    "content": "euler2rot\n---------\n\n.. automodule:: sharpy.utils.algebra.euler2rot"
  },
  {
    "path": "docs/source/includes/utils/algebra/get_transformation_matrix.rst",
    "content": "get_transformation_matrix\n-------------------------\n\n.. automodule:: sharpy.utils.algebra.get_transformation_matrix"
  },
  {
    "path": "docs/source/includes/utils/algebra/get_triad.rst",
    "content": "get_triad\n---------\n\n.. automodule:: sharpy.utils.algebra.get_triad"
  },
  {
    "path": "docs/source/includes/utils/algebra/index.rst",
    "content": "Algebra package\n+++++++++++++++\n\nAlgebra package\n\nExtensive library with geometrical and algebraic operations\n\nNote:\n    Tests can be found in ``tests/utils/algebra_test``\n\n\n.. toctree::\n\t:glob:\n\n\t./cross3\n\t./crv2quat\n\t./crv2rotation\n\t./crv2tan\n\t./crv_bounds\n\t./der_CcrvT_by_v\n\t./der_Ccrv_by_v\n\t./der_Ceuler_by_v\n\t./der_Ceuler_by_v_NED\n\t./der_CquatT_by_v\n\t./der_Cquat_by_v\n\t./der_Peuler_by_v\n\t./der_TanT_by_xv\n\t./der_Tan_by_xv\n\t./der_Teuler_by_w\n\t./der_Teuler_by_w_NED\n\t./der_quat_wrt_crv\n\t./der_skewp_skewp_v\n\t./deuler_dt\n\t./deuler_dt_NED\n\t./euler2quat\n\t./euler2rot\n\t./get_transformation_matrix\n\t./get_triad\n\t./mat2quat\n\t./multiply_matrices\n\t./norm3d\n\t./normsq3d\n\t./panel_area\n\t./quadskew\n\t./quat2euler\n\t./quat2rotation\n\t./quat_bound\n\t./rotation2crv\n\t./rotation2quat\n\t./rotation3d_x\n\t./rotation3d_y\n\t./rotation3d_z\n\t./skew\n\t./tangent_vector\n\t./triad2rotation\n\t./unit_vector\n"
  },
  {
    "path": "docs/source/includes/utils/algebra/mat2quat.rst",
    "content": "mat2quat\n--------\n\n.. automodule:: sharpy.utils.algebra.mat2quat"
  },
  {
    "path": "docs/source/includes/utils/algebra/multiply_matrices.rst",
    "content": "multiply_matrices\n-----------------\n\n.. automodule:: sharpy.utils.algebra.multiply_matrices"
  },
  {
    "path": "docs/source/includes/utils/algebra/norm3d.rst",
    "content": "norm3d\n------\n\n.. automodule:: sharpy.utils.algebra.norm3d"
  },
  {
    "path": "docs/source/includes/utils/algebra/normsq3d.rst",
    "content": "normsq3d\n--------\n\n.. automodule:: sharpy.utils.algebra.normsq3d"
  },
  {
    "path": "docs/source/includes/utils/algebra/panel_area.rst",
    "content": "panel_area\n----------\n\n.. automodule:: sharpy.utils.algebra.panel_area"
  },
  {
    "path": "docs/source/includes/utils/algebra/quadskew.rst",
    "content": "quadskew\n--------\n\n.. automodule:: sharpy.utils.algebra.quadskew"
  },
  {
    "path": "docs/source/includes/utils/algebra/quat2euler.rst",
    "content": "quat2euler\n----------\n\n.. automodule:: sharpy.utils.algebra.quat2euler"
  },
  {
    "path": "docs/source/includes/utils/algebra/quat2rotation.rst",
    "content": "quat2rotation\n-------------\n\n.. automodule:: sharpy.utils.algebra.quat2rotation"
  },
  {
    "path": "docs/source/includes/utils/algebra/quat_bound.rst",
    "content": "quat_bound\n----------\n\n.. automodule:: sharpy.utils.algebra.quat_bound"
  },
  {
    "path": "docs/source/includes/utils/algebra/rotation2crv.rst",
    "content": "rotation2crv\n------------\n\n.. automodule:: sharpy.utils.algebra.rotation2crv"
  },
  {
    "path": "docs/source/includes/utils/algebra/rotation2quat.rst",
    "content": "rotation2quat\n-------------\n\n.. automodule:: sharpy.utils.algebra.rotation2quat"
  },
  {
    "path": "docs/source/includes/utils/algebra/rotation3d_x.rst",
    "content": "rotation3d_x\n------------\n\n.. automodule:: sharpy.utils.algebra.rotation3d_x"
  },
  {
    "path": "docs/source/includes/utils/algebra/rotation3d_y.rst",
    "content": "rotation3d_y\n------------\n\n.. automodule:: sharpy.utils.algebra.rotation3d_y"
  },
  {
    "path": "docs/source/includes/utils/algebra/rotation3d_z.rst",
    "content": "rotation3d_z\n------------\n\n.. automodule:: sharpy.utils.algebra.rotation3d_z"
  },
  {
    "path": "docs/source/includes/utils/algebra/skew.rst",
    "content": "skew\n----\n\n.. automodule:: sharpy.utils.algebra.skew"
  },
  {
    "path": "docs/source/includes/utils/algebra/tangent_vector.rst",
    "content": "tangent_vector\n--------------\n\n.. automodule:: sharpy.utils.algebra.tangent_vector"
  },
  {
    "path": "docs/source/includes/utils/algebra/triad2rotation.rst",
    "content": "triad2rotation\n--------------\n\n.. automodule:: sharpy.utils.algebra.triad2rotation"
  },
  {
    "path": "docs/source/includes/utils/algebra/unit_vector.rst",
    "content": "unit_vector\n-----------\n\n.. automodule:: sharpy.utils.algebra.unit_vector"
  },
  {
    "path": "docs/source/includes/utils/analytical/flat_plate_analytical.rst",
    "content": "flat_plate_analytical\n---------------------\n\n.. automodule:: sharpy.utils.analytical.flat_plate_analytical"
  },
  {
    "path": "docs/source/includes/utils/analytical/garrick_drag_pitch.rst",
    "content": "garrick_drag_pitch\n------------------\n\n.. automodule:: sharpy.utils.analytical.garrick_drag_pitch"
  },
  {
    "path": "docs/source/includes/utils/analytical/garrick_drag_plunge.rst",
    "content": "garrick_drag_plunge\n-------------------\n\n.. automodule:: sharpy.utils.analytical.garrick_drag_plunge"
  },
  {
    "path": "docs/source/includes/utils/analytical/index.rst",
    "content": "Analytical Functions\n++++++++++++++++++++\n\n\nAnalytical solutions for 2D aerofoil based on thin plates theory\n\nAuthor: Salvatore Maraniello\n\nDate: 23 May 2017\n\nReferences:\n\n1. Simpson, R.J.S., Palacios, R. & Murua, J., 2013. Induced-Drag Calculations in the Unsteady Vortex Lattice Method.\n   AIAA Journal, 51(7), pp.1775–1779.\n\n2. Gulcat, U., 2009. Propulsive Force of a Flexible Flapping Thin Airfoil. Journal of Aircraft, 46(2), pp.465–473.\n\n\n\n.. toctree::\n\t:glob:\n\n\t./flat_plate_analytical\n\t./garrick_drag_pitch\n\t./garrick_drag_plunge\n\t./nc_derivs\n\t./qs_derivs\n\t./sears_CL_freq_resp\n\t./sears_fun\n\t./sears_lift_sin_gust\n\t./theo_CL_freq_resp\n\t./theo_CM_freq_resp\n\t./theo_fun\n\t./theo_lift\n\t./wagner_imp_start\n"
  },
  {
    "path": "docs/source/includes/utils/analytical/nc_derivs.rst",
    "content": "nc_derivs\n---------\n\n.. automodule:: sharpy.utils.analytical.nc_derivs"
  },
  {
    "path": "docs/source/includes/utils/analytical/qs_derivs.rst",
    "content": "qs_derivs\n---------\n\n.. automodule:: sharpy.utils.analytical.qs_derivs"
  },
  {
    "path": "docs/source/includes/utils/analytical/sears_CL_freq_resp.rst",
    "content": "sears_CL_freq_resp\n------------------\n\n.. automodule:: sharpy.utils.analytical.sears_CL_freq_resp"
  },
  {
    "path": "docs/source/includes/utils/analytical/sears_fun.rst",
    "content": "sears_fun\n---------\n\n.. automodule:: sharpy.utils.analytical.sears_fun"
  },
  {
    "path": "docs/source/includes/utils/analytical/sears_lift_sin_gust.rst",
    "content": "sears_lift_sin_gust\n-------------------\n\n.. automodule:: sharpy.utils.analytical.sears_lift_sin_gust"
  },
  {
    "path": "docs/source/includes/utils/analytical/theo_CL_freq_resp.rst",
    "content": "theo_CL_freq_resp\n-----------------\n\n.. automodule:: sharpy.utils.analytical.theo_CL_freq_resp"
  },
  {
    "path": "docs/source/includes/utils/analytical/theo_CM_freq_resp.rst",
    "content": "theo_CM_freq_resp\n-----------------\n\n.. automodule:: sharpy.utils.analytical.theo_CM_freq_resp"
  },
  {
    "path": "docs/source/includes/utils/analytical/theo_fun.rst",
    "content": "theo_fun\n--------\n\n.. automodule:: sharpy.utils.analytical.theo_fun"
  },
  {
    "path": "docs/source/includes/utils/analytical/theo_lift.rst",
    "content": "theo_lift\n---------\n\n.. automodule:: sharpy.utils.analytical.theo_lift"
  },
  {
    "path": "docs/source/includes/utils/analytical/wagner_imp_start.rst",
    "content": "wagner_imp_start\n----------------\n\n.. automodule:: sharpy.utils.analytical.wagner_imp_start"
  },
  {
    "path": "docs/source/includes/utils/control_utils/PID.rst",
    "content": "PID\n---\n\n.. autoclass:: sharpy.utils.control_utils.PID\n\t:members:"
  },
  {
    "path": "docs/source/includes/utils/control_utils/index.rst",
    "content": "Controller Utilities\n++++++++++++++++++++\n\n\n\n.. toctree::\n\t:glob:\n\n\t./PID\n"
  },
  {
    "path": "docs/source/includes/utils/datastructures/AeroTimeStepInfo.rst",
    "content": "AeroTimeStepInfo\n----------------\n\n.. autoclass:: sharpy.utils.datastructures.AeroTimeStepInfo\n\t:members:"
  },
  {
    "path": "docs/source/includes/utils/datastructures/Linear.rst",
    "content": "Linear\n------\n\n.. autoclass:: sharpy.utils.datastructures.Linear\n\t:members:"
  },
  {
    "path": "docs/source/includes/utils/datastructures/LinearTimeStepInfo.rst",
    "content": "LinearTimeStepInfo\n------------------\n\n.. autoclass:: sharpy.utils.datastructures.LinearTimeStepInfo\n\t:members:"
  },
  {
    "path": "docs/source/includes/utils/datastructures/StructTimeStepInfo.rst",
    "content": "StructTimeStepInfo\n------------------\n\n.. autoclass:: sharpy.utils.datastructures.StructTimeStepInfo\n\t:members:"
  },
  {
    "path": "docs/source/includes/utils/datastructures/index.rst",
    "content": "Data Management Structures\n++++++++++++++++++++++++++\n\n\nThese classes are responsible for storing the aerodynamic and structural time step information and relevant variables.\n\n\n\n.. toctree::\n\t:glob:\n\n\t./AeroTimeStepInfo\n\t./Linear\n\t./LinearTimeStepInfo\n\t./StructTimeStepInfo\n"
  },
  {
    "path": "docs/source/includes/utils/docutils/check_folder_in_ignore.rst",
    "content": "check_folder_in_ignore\n----------------------\n\n.. automodule:: sharpy.utils.docutils.check_folder_in_ignore"
  },
  {
    "path": "docs/source/includes/utils/docutils/generate_documentation.rst",
    "content": "generate_documentation\n----------------------\n\n.. automodule:: sharpy.utils.docutils.generate_documentation"
  },
  {
    "path": "docs/source/includes/utils/docutils/index.rst",
    "content": "Documentation Generator\n+++++++++++++++++++++++\n\n\nFunctions to automatically document the code.\n\nComments and complaints: N. Goizueta\n\n\n.. toctree::\n\t:glob:\n\n\t./check_folder_in_ignore\n\t./generate_documentation\n\t./output_documentation_module_page\n\t./write_file\n\t./write_folder\n"
  },
  {
    "path": "docs/source/includes/utils/docutils/output_documentation_module_page.rst",
    "content": "output_documentation_module_page\n--------------------------------\n\n.. automodule:: sharpy.utils.docutils.output_documentation_module_page"
  },
  {
    "path": "docs/source/includes/utils/docutils/write_file.rst",
    "content": "write_file\n----------\n\n.. automodule:: sharpy.utils.docutils.write_file"
  },
  {
    "path": "docs/source/includes/utils/docutils/write_folder.rst",
    "content": "write_folder\n------------\n\n.. automodule:: sharpy.utils.docutils.write_folder"
  },
  {
    "path": "docs/source/includes/utils/exceptions/DocumentationError.rst",
    "content": "DocumentationError\n------------------\n\n.. autoclass:: sharpy.utils.exceptions.DocumentationError\n\t:members:"
  },
  {
    "path": "docs/source/includes/utils/exceptions/NotConvergedSolver.rst",
    "content": "NotConvergedSolver\n------------------\n\n.. autoclass:: sharpy.utils.exceptions.NotConvergedSolver\n\t:members:"
  },
  {
    "path": "docs/source/includes/utils/exceptions/NotRecognisedSetting.rst",
    "content": "NotRecognisedSetting\n--------------------\n\n.. autoclass:: sharpy.utils.exceptions.NotRecognisedSetting\n\t:members:"
  },
  {
    "path": "docs/source/includes/utils/exceptions/NotValidSetting.rst",
    "content": "NotValidSetting\n---------------\n\n.. autoclass:: sharpy.utils.exceptions.NotValidSetting\n\t:members:"
  },
  {
    "path": "docs/source/includes/utils/exceptions/index.rst",
    "content": "SHARPy Exception Classes\n++++++++++++++++++++++++\n\n\n\n.. toctree::\n\t:glob:\n\n\t./DocumentationError\n\t./NotConvergedSolver\n\t./NotRecognisedSetting\n\t./NotValidSetting\n"
  },
  {
    "path": "docs/source/includes/utils/frequencyutils/find_limits.rst",
    "content": "find_limits\n-----------\n\n.. automodule:: sharpy.utils.frequencyutils.find_limits"
  },
  {
    "path": "docs/source/includes/utils/frequencyutils/find_target_system.rst",
    "content": "find_target_system\n------------------\n\n.. automodule:: sharpy.utils.frequencyutils.find_target_system"
  },
  {
    "path": "docs/source/includes/utils/frequencyutils/freqresp_relative_error.rst",
    "content": "freqresp_relative_error\n-----------------------\n\n.. automodule:: sharpy.utils.frequencyutils.freqresp_relative_error"
  },
  {
    "path": "docs/source/includes/utils/frequencyutils/frobenius_norm.rst",
    "content": "frobenius_norm\n--------------\n\n.. automodule:: sharpy.utils.frequencyutils.frobenius_norm"
  },
  {
    "path": "docs/source/includes/utils/frequencyutils/h_infinity_norm.rst",
    "content": "h_infinity_norm\n---------------\n\n.. automodule:: sharpy.utils.frequencyutils.h_infinity_norm"
  },
  {
    "path": "docs/source/includes/utils/frequencyutils/hamiltonian.rst",
    "content": "hamiltonian\n-----------\n\n.. automodule:: sharpy.utils.frequencyutils.hamiltonian"
  },
  {
    "path": "docs/source/includes/utils/frequencyutils/index.rst",
    "content": "Frequency Space Tools\n+++++++++++++++++++++\n\n\n\n\n.. toctree::\n\t:glob:\n\n\t./find_limits\n\t./find_target_system\n\t./freqresp_relative_error\n\t./frobenius_norm\n\t./h_infinity_norm\n\t./hamiltonian\n\t./l2norm\n\t./max_eigs\n"
  },
  {
    "path": "docs/source/includes/utils/frequencyutils/l2norm.rst",
    "content": "l2norm\n------\n\n.. automodule:: sharpy.utils.frequencyutils.l2norm"
  },
  {
    "path": "docs/source/includes/utils/frequencyutils/max_eigs.rst",
    "content": "max_eigs\n--------\n\n.. automodule:: sharpy.utils.frequencyutils.max_eigs"
  },
  {
    "path": "docs/source/includes/utils/generate_cases/AerodynamicInformation.rst",
    "content": "AerodynamicInformation\n----------------------\n\n.. autoclass:: sharpy.utils.generate_cases.AerodynamicInformation\n\t:members:"
  },
  {
    "path": "docs/source/includes/utils/generate_cases/AeroelasticInformation.rst",
    "content": "AeroelasticInformation\n----------------------\n\n.. autoclass:: sharpy.utils.generate_cases.AeroelasticInformation\n\t:members:"
  },
  {
    "path": "docs/source/includes/utils/generate_cases/SimulationInformation.rst",
    "content": "SimulationInformation\n---------------------\n\n.. autoclass:: sharpy.utils.generate_cases.SimulationInformation\n\t:members:"
  },
  {
    "path": "docs/source/includes/utils/generate_cases/StructuralInformation.rst",
    "content": "StructuralInformation\n---------------------\n\n.. autoclass:: sharpy.utils.generate_cases.StructuralInformation\n\t:members:"
  },
  {
    "path": "docs/source/includes/utils/generate_cases/clean_test_files.rst",
    "content": "clean_test_files\n----------------\n\n.. automodule:: sharpy.utils.generate_cases.clean_test_files"
  },
  {
    "path": "docs/source/includes/utils/generate_cases/from_node_array_to_elem_matrix.rst",
    "content": "from_node_array_to_elem_matrix\n------------------------------\n\n.. automodule:: sharpy.utils.generate_cases.from_node_array_to_elem_matrix"
  },
  {
    "path": "docs/source/includes/utils/generate_cases/from_node_list_to_elem_matrix.rst",
    "content": "from_node_list_to_elem_matrix\n-----------------------------\n\n.. automodule:: sharpy.utils.generate_cases.from_node_list_to_elem_matrix"
  },
  {
    "path": "docs/source/includes/utils/generate_cases/get_airfoil_camber.rst",
    "content": "get_airfoil_camber\n------------------\n\n.. automodule:: sharpy.utils.generate_cases.get_airfoil_camber"
  },
  {
    "path": "docs/source/includes/utils/generate_cases/get_aoacl0_from_camber.rst",
    "content": "get_aoacl0_from_camber\n----------------------\n\n.. automodule:: sharpy.utils.generate_cases.get_aoacl0_from_camber"
  },
  {
    "path": "docs/source/includes/utils/generate_cases/get_factor_geometric_progression.rst",
    "content": "get_factor_geometric_progression\n--------------------------------\n\n.. automodule:: sharpy.utils.generate_cases.get_factor_geometric_progression"
  },
  {
    "path": "docs/source/includes/utils/generate_cases/get_mu0_from_camber.rst",
    "content": "get_mu0_from_camber\n-------------------\n\n.. automodule:: sharpy.utils.generate_cases.get_mu0_from_camber"
  },
  {
    "path": "docs/source/includes/utils/generate_cases/index.rst",
    "content": "Generate cases\n++++++++++++++\n\nGenerate cases\n\nThis library provides functions and classes to help in the definition of SHARPy cases\n\nExamples:\n\n    tests in: tests/utils/generate_cases\n    examples: test/coupled/multibody/fix_node_velocity_wrtG/test_fix_node_velocity_wrtG\n              test/coupled/multibody/fix_node_velocity_wrtA/test_fix_node_velocity_wrtA\n              test/coupled/multibody/double_pendulum/test_double_pendulum_geradin\n              test/coupled/prescribed/WindTurbine/test_rotor\n\nNotes:\n\n    To use this library: import sharpy.utils.generate_cases as generate_cases\n\n\n\n.. toctree::\n\t:glob:\n\n\t./AerodynamicInformation\n\t./AeroelasticInformation\n\t./SimulationInformation\n\t./StructuralInformation\n\t./clean_test_files\n\t./from_node_array_to_elem_matrix\n\t./from_node_list_to_elem_matrix\n\t./get_airfoil_camber\n\t./get_aoacl0_from_camber\n\t./get_factor_geometric_progression\n\t./get_mu0_from_camber\n\t./read_column_sheet_type01\n"
  },
  {
    "path": "docs/source/includes/utils/generate_cases/read_column_sheet_type01.rst",
    "content": "read_column_sheet_type01\n------------------------\n\n.. automodule:: sharpy.utils.generate_cases.read_column_sheet_type01"
  },
  {
    "path": "docs/source/includes/utils/generator_interface/index.rst",
    "content": "Generator Interface\n+++++++++++++++++++\n\n\n\n.. toctree::\n\t:glob:\n\n\t./output_documentation\n"
  },
  {
    "path": "docs/source/includes/utils/generator_interface/output_documentation.rst",
    "content": "output_documentation\n--------------------\n\n.. automodule:: sharpy.utils.generator_interface.output_documentation"
  },
  {
    "path": "docs/source/includes/utils/geo_utils/generate_naca_camber.rst",
    "content": "generate_naca_camber\n--------------------\n\n.. automodule:: sharpy.utils.geo_utils.generate_naca_camber"
  },
  {
    "path": "docs/source/includes/utils/geo_utils/index.rst",
    "content": "Airfoil Geometry Utils\n++++++++++++++++++++++\n\n\n\n\n.. toctree::\n\t:glob:\n\n\t./generate_naca_camber\n\t./interpolate_naca_camber\n"
  },
  {
    "path": "docs/source/includes/utils/geo_utils/interpolate_naca_camber.rst",
    "content": "interpolate_naca_camber\n-----------------------\n\n.. automodule:: sharpy.utils.geo_utils.interpolate_naca_camber"
  },
  {
    "path": "docs/source/includes/utils/h5utils/add_array_to_grp.rst",
    "content": "add_array_to_grp\n----------------\n\n.. automodule:: sharpy.utils.h5utils.add_array_to_grp"
  },
  {
    "path": "docs/source/includes/utils/h5utils/add_as_grp.rst",
    "content": "add_as_grp\n----------\n\n.. automodule:: sharpy.utils.h5utils.add_as_grp"
  },
  {
    "path": "docs/source/includes/utils/h5utils/check_file_exists.rst",
    "content": "check_file_exists\n-----------------\n\n.. automodule:: sharpy.utils.h5utils.check_file_exists"
  },
  {
    "path": "docs/source/includes/utils/h5utils/index.rst",
    "content": "H5 File Management Utilities\n++++++++++++++++++++++++++++\n\nSet of utilities for opening/reading files\n\n\n.. toctree::\n\t:glob:\n\n\t./add_array_to_grp\n\t./add_as_grp\n\t./check_file_exists\n\t./read_group\n\t./readh5\n\t./save_list_as_array\n\t./saveh5\n"
  },
  {
    "path": "docs/source/includes/utils/h5utils/read_group.rst",
    "content": "read_group\n----------\n\n.. automodule:: sharpy.utils.h5utils.read_group"
  },
  {
    "path": "docs/source/includes/utils/h5utils/readh5.rst",
    "content": "readh5\n------\n\n.. automodule:: sharpy.utils.h5utils.readh5"
  },
  {
    "path": "docs/source/includes/utils/h5utils/save_list_as_array.rst",
    "content": "save_list_as_array\n------------------\n\n.. automodule:: sharpy.utils.h5utils.save_list_as_array"
  },
  {
    "path": "docs/source/includes/utils/h5utils/saveh5.rst",
    "content": "saveh5\n------\n\n.. automodule:: sharpy.utils.h5utils.saveh5"
  },
  {
    "path": "docs/source/includes/utils/index.rst",
    "content": "Utilities\n---------\n\n\n.. toctree::\n\t:maxdepth: 1\n\n\t./algebra/index\n\t./analytical/index\n\t./control_utils/index\n\t./datastructures/index\n\t./docutils/index\n\t./exceptions/index\n\t./frequencyutils/index\n\t./generate_cases/index\n\t./generator_interface/index\n\t./geo_utils/index\n\t./h5utils/index\n\t./model_utils/index\n\t./multibody/index\n\t./plotutils/index\n\t./settings/index\n"
  },
  {
    "path": "docs/source/includes/utils/model_utils/index.rst",
    "content": "Modelling Utilities\n+++++++++++++++++++\n\nModelling Utilities\n\n\n.. toctree::\n\t:glob:\n\n\t./mass_matrix_generator\n"
  },
  {
    "path": "docs/source/includes/utils/model_utils/mass_matrix_generator.rst",
    "content": "mass_matrix_generator\n---------------------\n\n.. automodule:: sharpy.utils.model_utils.mass_matrix_generator"
  },
  {
    "path": "docs/source/includes/utils/multibody/disp_and_accel2state.rst",
    "content": "disp_and_accel2state\n--------------------\n\n.. automodule:: sharpy.utils.multibody.disp_and_accel2state"
  },
  {
    "path": "docs/source/includes/utils/multibody/get_elems_nodes_list.rst",
    "content": "get_elems_nodes_list\n--------------------\n\n.. automodule:: sharpy.utils.multibody.get_elems_nodes_list"
  },
  {
    "path": "docs/source/includes/utils/multibody/index.rst",
    "content": "Multibody library\n+++++++++++++++++\n\nMultibody library\n\nLibrary used to manipulate multibody systems\n\nTo use this library: import sharpy.utils.multibody as mb\n\n\n\n.. toctree::\n\t:glob:\n\n\t./disp_and_accel2state\n\t./get_elems_nodes_list\n\t./merge_multibody\n\t./split_multibody\n\t./state2disp_and_accel\n\t./update_mb_dB_before_merge\n"
  },
  {
    "path": "docs/source/includes/utils/multibody/merge_multibody.rst",
    "content": "merge_multibody\n---------------\n\n.. automodule:: sharpy.utils.multibody.merge_multibody"
  },
  {
    "path": "docs/source/includes/utils/multibody/split_multibody.rst",
    "content": "split_multibody\n---------------\n\n.. automodule:: sharpy.utils.multibody.split_multibody"
  },
  {
    "path": "docs/source/includes/utils/multibody/state2disp_and_accel.rst",
    "content": "state2disp_and_accel\n--------------------\n\n.. automodule:: sharpy.utils.multibody.state2disp_and_accel"
  },
  {
    "path": "docs/source/includes/utils/multibody/update_mb_dB_before_merge.rst",
    "content": "update_mb_dB_before_merge\n-------------------------\n\n.. automodule:: sharpy.utils.multibody.update_mb_dB_before_merge"
  },
  {
    "path": "docs/source/includes/utils/plotutils/index.rst",
    "content": "Plotting utilities\n++++++++++++++++++\n\n\n\n.. toctree::\n\t:glob:\n\n\t./plot_timestep\n\t./set_axes_equal\n"
  },
  {
    "path": "docs/source/includes/utils/plotutils/plot_timestep.rst",
    "content": "plot_timestep\n-------------\n\n.. automodule:: sharpy.utils.plotutils.plot_timestep"
  },
  {
    "path": "docs/source/includes/utils/plotutils/set_axes_equal.rst",
    "content": "set_axes_equal\n--------------\n\n.. automodule:: sharpy.utils.plotutils.set_axes_equal"
  },
  {
    "path": "docs/source/includes/utils/settings/SettingsTable.rst",
    "content": "SettingsTable\n-------------\n\n.. autoclass:: sharpy.utils.settings.SettingsTable\n\t:members:"
  },
  {
    "path": "docs/source/includes/utils/settings/check_settings_in_options.rst",
    "content": "check_settings_in_options\n-------------------------\n\n.. automodule:: sharpy.utils.settings.check_settings_in_options"
  },
  {
    "path": "docs/source/includes/utils/settings/index.rst",
    "content": "Settings Generator Utilities\n++++++++++++++++++++++++++++\n\nSettings Generator Utilities\n\n\n.. toctree::\n\t:glob:\n\n\t./SettingsTable\n\t./check_settings_in_options\n\t./load_config_file\n"
  },
  {
    "path": "docs/source/includes/utils/settings/load_config_file.rst",
    "content": "load_config_file\n----------------\n\n.. automodule:: sharpy.utils.settings.load_config_file"
  },
  {
    "path": "docs/source/index.rst",
    "content": ".. SHARPy documentation master file, created by\n   sphinx-quickstart on Wed Oct 19 16:40:48 2016.\n   You can adapt this file completely to your liking, but it should at least\n   contain the root `toctree` directive.\n\nSimulation of High Aspect Ratio planes in Python [SHARPy]\n=========================================================\n\n\n.. image:: https://img.shields.io/endpoint.svg?url=https%3A%2F%2Fraw.githubusercontent.com%2FImperialCollegeLondon%2Fsharpy%2Fmaster%2F.version.json\n\n.. image:: https://codecov.io/gh/ImperialCollegeLondon/sharpy/branch/main/graph/badge.svg\n    :target: https://codecov.io/gh/ImperialCollegeLondon/sharpy\n\n.. image:: https://img.shields.io/badge/License-BSD%203--Clause-blue.svg\n   :target: https://opensource.org/licenses/BSD-3-Clause\n\n.. image:: https://readthedocs.org/projects/ic-sharpy/badge/?version=main\n\n.. image:: https://joss.theoj.org/papers/f7ccd562160f1a54f64a81e90f5d9af9/status.svg\n   :target: https://joss.theoj.org/papers/f7ccd562160f1a54f64a81e90f5d9af9\n\n.. image:: https://zenodo.org/badge/DOI/10.5281/zenodo.3531965.svg\n   :target: https://doi.org/10.5281/zenodo.3531965\n\nWelcome to SHARPy (Simulation of High Aspect Ratio aeroplanes in Python)!\n\nSHARPy is an aeroelastic analysis package currently under development at the Department of Aeronautics,\nImperial College London. It can be used for the structural, aerodynamic, aeroelastic and flight dynamics\nanalysis of flexible aircraft, flying wings and wind turbines. Amongst other capabilities_, it offers the following solutions to the user:\n\n* Static aerodynamic, structural and aeroelastic solutions including fuselage effects\n* Finding trim conditions for aeroelastic configurations\n* Nonlinear, dynamic time domain simulations under a large number of conditions such as:\n\n    + Prescribed trajectories.\n    + Free flight.\n    + Dynamic follower forces.\n    + Control inputs in thrust, control surface deflection...\n    + Arbitrary time-domain gusts, including non span-constant ones.\n    + Full 3D turbulent fields.\n\n* Multibody dynamics with hinges, articulations and prescribed nodal motions.\n\n    + Applicable to wind turbines.\n    + Hinged aircraft.\n    + Catapult assisted takeoffs.\n\n* Linear analysis\n\n    + Linearisation around a nonlinear equilibrium.\n    + Frequency response analysis.\n    + Asymptotic stability analysis.\n\n* Model order reduction\n\n    + Krylov-subspace reduction methods.\n    + Balancing reduction methods.\n\nThe modular design of SHARPy allows to simulate complex aeroelastic cases involving very flexible aircraft.\nThe structural solver supports very complex beam arrangements, while retaining geometrical nonlinearity.\nThe UVLM solver features different wake modelling fidelities while supporting large lifting surface deformations in a\nnative way. Detailed information on each of the solvers is presented in their respective documentation packages.\n\nContents\n--------\n\n.. toctree::\n   :maxdepth: 1\n\n   content/installation\n   content/capabilities\n   content/publications\n   content/examples\n   content/contributing\n   content/casefiles\n   content/solvers\n   content/postproc\n   includes/index\n   content/test_cases\n   content/debug\n   content/faqs\n\nCiting SHARPy\n-------------\nSHARPy has been published in the Journal of Open Source Software (JOSS) and the relevant paper can be found\nhere_.\n\nIf you are using SHARPy for your work, please remember to cite it using the paper in JOSS as:\n\n    del Carre et al., (2019). SHARPy: A dynamic aeroelastic simulation toolbox for very flexible aircraft and wind\n    turbines. Journal of Open Source Software, 4(44), 1885, https://doi.org/10.21105/joss.01885\n\nThe bibtex entry for this citation is:\n\n.. code-block:: none\n\n    @Article{delCarre2019,\n    doi = {10.21105/joss.01885},\n    url = {https://doi.org/10.21105/joss.01885},\n    year = {2019},\n    month = dec,\n    publisher = {The Open Journal},\n    volume = {4},\n    number = {44},\n    pages = {1885},\n    author = {Alfonso del Carre and Arturo Mu{\\~{n}}oz-Sim\\'on and Norberto Goizueta and Rafael Palacios},\n    title = {{SHARPy}: A dynamic aeroelastic simulation toolbox for very flexible aircraft and wind turbines},\n    journal = {Journal of Open Source Software}\n    }\n\n.. _here: https://joss.theoj.org/papers/10.21105/joss.01885\n\n\nIndices and tables\n------------------\n\n* :ref:`genindex`\n* :ref:`modindex`\n* :ref:`search`\n\nContact\n-------\n\nSHARPy is developed at the Department of Aeronautics, Imperial College London. To get in touch, visit the `Loads Control\nand Aeroelastics Lab <http://imperial.ac.uk/aeroelastics>`_ website.\n\n.. _capabilities: ./content/capabilities.html\n"
  },
  {
    "path": "environment.yml",
    "content": "name: sharpy\nchannels:\n  - conda-forge\n  - defaults\ndependencies:\n  - eigen\n  - libopenblas\n  - libblas\n  - libcblas\n  - liblapack\n  - libgfortran\n  - libgcc\n  - libgfortran-ng\n  - python=3.10\n"
  },
  {
    "path": "environment_arm64.yml",
    "content": "name: sharpy\nchannels:\n  - conda-forge\n  - defaults\ndependencies:\n  - eigen\n  - libopenblas\n  - libblas\n  - libcblas\n  - liblapack\n  - libgfortran\n  - python=3.10"
  },
  {
    "path": "lib/.placeholder",
    "content": ""
  },
  {
    "path": "lib/CMakeLists.txt",
    "content": "add_subdirectory(xbeam)\nadd_subdirectory(UVLM)\n"
  },
  {
    "path": "pyproject.toml",
    "content": "[build-system]\nrequires = [\n    \"setuptools\",\n    #\"scikit-build>=0.13\",\n    \"cmake>=3.14.3\"\n    ]"
  },
  {
    "path": "scripts/__init__.py",
    "content": ""
  },
  {
    "path": "scripts/optimiser/__init__.py",
    "content": ""
  },
  {
    "path": "scripts/optimiser/base_case/generate.py",
    "content": "#! /usr/bin/env python3\nimport os\nimport math\nimport h5py as h5\nimport numpy as np\nimport sharpy.utils.algebra as algebra\nimport sharpy.utils.generate_cases as gc\n\n\ndef generate(x_dict={}, case_name=None):\n    \"\"\"\n\n    \"\"\"\n    if case_name is None:\n        case_name = 'base'\n    route = os.path.dirname(os.path.realpath(__file__)) + '/'\n\n    case_notes = str(x_dict)\n\n# EXECUTION\n    flow = ['BeamLoader',\n            'AerogridLoader',\n            # 'StaticTrim',\n            'StaticCoupled',\n            'BeamLoads',\n            'DynamicCoupled',\n            'PickleData'\n            ]\n\n# FLIGHT CONDITIONS\n# the simulation is set such that the aircraft flies at a u_inf velocity while\n# the air is calm.\n    try:\n        u_inf = x_dict['release_velocity']\n    except KeyError:\n        print('Using default value of 10 for u_inf')\n        u_inf = 10\n\n    u_inf_cruise = 10\n    original_u_inf = u_inf\n    u_background = 0.5\n    rho = 1.225\n\n# trim sigma = 1.5\n    try:\n        alpha_cato_delta = x_dict['dAoA']*np.pi/180\n    except KeyError:\n        print('Using default value of 0 for dAoA')\n        alpha_cato_delta = 0*np.pi/180\n\n    try:\n        ramp_angle = x_dict['ramp_angle']*np.pi/180\n    except KeyError:\n        print('Using default value of 0 for ramp_angle')\n        ramp_angle = 0.0\n\n    alpha = 4.0782*np.pi/180 + alpha_cato_delta\n    beta = 0\n    roll = 0\n    gravity = 'on'\n    cs_deflection = -1.2703*np.pi/180\n    rudder_static_deflection = 0.0\n    # rudder_step = 0.0*np.pi/180\n    thrust = 3.8682\n    sigma = 1.5\n    lambda_dihedral = 20*np.pi/180\n\n\n# trajectory\n    t_start = 1.5\n\n    try:\n        acceleration = x_dict['acceleration']\n    except KeyError:\n        print('Using default value of 3 for acceleration')\n        acceleration = 3.\n\n    t_ramp = u_inf/acceleration\n    t_finish = t_start + t_ramp\n    t_free = 8\n    controller_ramp = -1\n\n# numerics\n    n_step = 1\n    relaxation_factor = 0.4\n    tolerance = 1e-6\n    fsi_tolerance = 1e-5\n    structural_substeps = 1\n\n    num_cores = 4\n\n# MODEL GEOMETRY\n# beam\n    span_main = 16.0\n    lambda_main = 0.25\n    ea_main = 0.3\n\n    ea = 1e7\n    ga = 1e5\n    gj = 1e4\n    eiy = 2e4\n    eiz = 4e5\n    m_bar_main = 0.75\n    j_bar_main = 0.075\n\n    length_fuselage = 10\n    offset_fuselage = 0\n    sigma_fuselage = 10\n    m_bar_fuselage = 0.2\n    j_bar_fuselage = 0.08\n\n    span_tail = 2.5\n    ea_tail = 0.5\n    fin_height = 2.5\n    ea_fin = 0.5\n    sigma_tail = 10\n    m_bar_tail = 0.3\n    j_bar_tail = 0.08\n\n# lumped masses\n    n_lumped_mass = 1\n    lumped_mass_nodes = np.zeros((n_lumped_mass, ), dtype=int)\n    lumped_mass = np.zeros((n_lumped_mass, ))\n    lumped_mass[0] = 50\n    lumped_mass_inertia = np.zeros((n_lumped_mass, 3, 3))\n    lumped_mass_position = np.zeros((n_lumped_mass, 3))\n\n# aero\n    chord_main = 1.0\n    chord_tail = 0.5\n    chord_fin = 0.5\n\n# DISCRETISATION\n# spatial discretisation\n# chordiwse panels\n    m = 4\n# spanwise elements\n    n_elem_multiplier = 2\n    n_elem_main = int(4*n_elem_multiplier)\n    n_elem_tail = int(2*n_elem_multiplier)\n    n_elem_fin = int(2*n_elem_multiplier)\n    n_elem_fuselage = int(2*n_elem_multiplier)\n    n_surfaces = 5\n\n# temporal discretisation\n    physical_time = t_finish + t_free\n    tstep_factor = 1.\n    dt = 1.0/m/u_inf_cruise*tstep_factor\n    n_tstep = int(round(physical_time/dt))\n\n# END OF INPUT-----------------------------------------------------------------\n\n    end_of_fuselage_node = 0\n    flat_end_node = np.zeros((2, ), dtype=int) - 1\n\n# beam processing\n    n_node_elem = 3\n    span_main1 = (1.0 - lambda_main)*span_main\n    span_main2 = lambda_main*span_main\n\n    n_elem_main1 = round(n_elem_main*(1 - lambda_main))\n    n_elem_main2 = n_elem_main - n_elem_main1\n\n# total number of elements\n    n_elem = 0\n    n_elem += n_elem_main1 + n_elem_main1\n    n_elem += n_elem_main2 + n_elem_main2\n    n_elem += n_elem_fuselage\n    n_elem += n_elem_fin\n    n_elem += n_elem_tail + n_elem_tail\n\n# number of nodes per part\n    n_node_main1 = n_elem_main1*(n_node_elem - 1) + 1\n    n_node_main2 = n_elem_main2*(n_node_elem - 1) + 1\n    n_node_main = n_node_main1 + n_node_main2 - 1\n    n_node_fuselage = n_elem_fuselage*(n_node_elem - 1) + 1\n    n_node_fin = n_elem_fin*(n_node_elem - 1) + 1\n    n_node_tail = n_elem_tail*(n_node_elem - 1) + 1\n\n# total number of nodes\n    n_node = 0\n    n_node += n_node_main1 + n_node_main1 - 1\n    n_node += n_node_main2 - 1 + n_node_main2 - 1\n    n_node += n_node_fuselage - 1\n    n_node += n_node_fin - 1\n    n_node += n_node_tail - 1\n    n_node += n_node_tail - 1\n\n# stiffness and mass matrices\n    n_stiffness = 3\n    base_stiffness_main = sigma*np.diag([ea, ga, ga, gj, eiy, eiz])\n    base_stiffness_fuselage = base_stiffness_main.copy()*sigma_fuselage\n    base_stiffness_fuselage[4, 4] = base_stiffness_fuselage[5, 5]\n    base_stiffness_tail = base_stiffness_main.copy()*sigma_tail\n    base_stiffness_tail[4, 4] = base_stiffness_tail[5, 5]\n\n    n_mass = 3\n    base_mass_main = np.diag([m_bar_main, m_bar_main, m_bar_main, j_bar_main, 0.5*j_bar_main, 0.5*j_bar_main])\n    base_mass_fuselage = np.diag([m_bar_fuselage,\n                                  m_bar_fuselage,\n                                  m_bar_fuselage,\n                                  j_bar_fuselage,\n                                  j_bar_fuselage*0.5,\n                                  j_bar_fuselage*0.5])\n    base_mass_tail = np.diag([m_bar_tail,\n                              m_bar_tail,\n                              m_bar_tail,\n                              j_bar_tail,\n                              j_bar_tail*0.5,\n                              j_bar_tail*0.5])\n\n\n# PLACEHOLDERS\n# beam\n    x = np.zeros((n_node, ))\n    y = np.zeros((n_node, ))\n    z = np.zeros((n_node, ))\n    beam_number = np.zeros((n_elem, ), dtype=int)\n    frame_of_reference_delta = np.zeros((n_elem, n_node_elem, 3))\n    structural_twist = np.zeros((n_elem, n_node_elem))\n    conn = np.zeros((n_elem, n_node_elem), dtype=int)\n    stiffness = np.zeros((n_stiffness, 6, 6))\n    elem_stiffness = np.zeros((n_elem, ), dtype=int)\n    mass = np.zeros((n_mass, 6, 6))\n    elem_mass = np.zeros((n_elem, ), dtype=int)\n    boundary_conditions = np.zeros((n_node, ), dtype=int)\n    app_forces = np.zeros((n_node, 6))\n\n    trajectory_file = route + '/' + case_name + '.traj.csv'\n    LC = None\n    first_node_centre = np.zeros((2, ), dtype=int)\n\n# aero\n    airfoil_distribution = np.zeros((n_elem, n_node_elem), dtype=int)\n    surface_distribution = np.zeros((n_elem,), dtype=int) - 1\n    surface_m = np.zeros((n_surfaces, ), dtype=int)\n    m_distribution = 'uniform'\n    aero_node = np.zeros((n_node,), dtype=bool)\n    twist = np.zeros((n_elem, n_node_elem))\n    sweep = np.zeros((n_elem, n_node_elem))\n    chord = np.zeros((n_elem, n_node_elem,))\n    elastic_axis = np.zeros((n_elem, n_node_elem,))\n\n\n# FUNCTIONS-------------------------------------------------------------\n    def clean_test_files():\n        fem_file_name = route + '/' + case_name + '.fem.h5'\n        if os.path.isfile(fem_file_name):\n            os.remove(fem_file_name)\n\n        dyn_file_name = route + '/' + case_name + '.dyn.h5'\n        if os.path.isfile(dyn_file_name):\n            os.remove(dyn_file_name)\n\n        aero_file_name = route + '/' + case_name + '.aero.h5'\n        if os.path.isfile(aero_file_name):\n            os.remove(aero_file_name)\n\n        solver_file_name = route + '/' + case_name + '.sharpy'\n        if os.path.isfile(solver_file_name):\n            os.remove(solver_file_name)\n\n        traj_file_name = route + '/' + case_name + '.traj.csv'\n        if os.path.isfile(traj_file_name):\n            os.remove(traj_file_name)\n\n        flightcon_file_name = route + '/' + case_name + '.flightcon.txt'\n        if os.path.isfile(flightcon_file_name):\n            os.remove(flightcon_file_name)\n\n\n    def generate_trajectory_file():\n        it_start = math.ceil(t_start/dt)\n        it_ramp = math.ceil(t_ramp/dt)\n        it_total = it_start + it_ramp\n        out_t = np.linspace(0, it_total*dt, it_total)\n        out_x = np.zeros((it_total, ))\n        out_y = np.zeros((it_total, ))\n        out_z = np.zeros((it_total, ))\n\n        t_hist_ramp = np.linspace(0, dt*it_ramp, it_ramp)\n        x_ramp = -0.5*np.cos(ramp_angle)*acceleration*t_hist_ramp**2\n        z_ramp = 0.5*np.sin(ramp_angle)*acceleration*t_hist_ramp**2\n\n        out_x[:it_start] = 0.0\n        out_x[it_start:] = x_ramp\n        out_z[it_start:] = z_ramp\n\n        out = np.zeros((it_total, 4))\n        out[:, 0] = out_t\n        out[:, 1] = out_x\n        out[:, 2] = out_y\n        out[:, 3] = out_z\n        np.savetxt(trajectory_file, out, delimiter=',')\n\n    def generate_dyn_file():\n        global dt\n        global n_tstep\n        global route\n        global case_name\n        global num_elem\n        global num_node_elem\n        global num_node\n        global amplitude\n        global period\n\n        dynamic_forces_time = None\n        with_dynamic_forces = False\n        with_forced_vel = False\n\n        if with_dynamic_forces:\n            f1 = 100\n            dynamic_forces = np.zeros((num_node, 6))\n            app_node = [int(num_node_main - 1), int(num_node_main)]\n            dynamic_forces[app_node, 2] = f1\n            force_time = np.zeros((n_tstep, ))\n            limit = round(0.05/dt)\n            force_time[50:61] = 1\n\n            dynamic_forces_time = np.zeros((n_tstep, num_node, 6))\n            for it in range(n_tstep):\n                dynamic_forces_time[it, :, :] = force_time[it]*dynamic_forces\n\n        forced_for_vel = None\n        if with_forced_vel:\n            forced_for_vel = np.zeros((n_tstep, 6))\n            forced_for_acc = np.zeros((n_tstep, 6))\n            for it in range(n_tstep):\n                # if dt*it < period:\n                # forced_for_vel[it, 2] = 2*np.pi/period*amplitude*np.sin(2*np.pi*dt*it/period)\n                # forced_for_acc[it, 2] = (2*np.pi/period)**2*amplitude*np.cos(2*np.pi*dt*it/period)\n\n                forced_for_vel[it, 3] = 2*np.pi/period*amplitude*np.sin(2*np.pi*dt*it/period)\n                forced_for_acc[it, 3] = (2*np.pi/period)**2*amplitude*np.cos(2*np.pi*dt*it/period)\n\n        if with_dynamic_forces or with_forced_vel:\n            with h5.File(route + '/' + case_name + '.dyn.h5', 'a') as h5file:\n                if with_dynamic_forces:\n                    h5file.create_dataset(\n                        'dynamic_forces', data=dynamic_forces_time)\n                if with_forced_vel:\n                    h5file.create_dataset(\n                        'for_vel', data=forced_for_vel)\n                    h5file.create_dataset(\n                        'for_acc', data=forced_for_acc)\n                h5file.create_dataset(\n                    'num_steps', data=n_tstep)\n\n    def generate_fem():\n        stiffness[0, ...] = base_stiffness_main\n        stiffness[1, ...] = base_stiffness_fuselage\n        stiffness[2, ...] = base_stiffness_tail\n\n        mass[0, ...] = base_mass_main\n        mass[1, ...] = base_mass_fuselage\n        mass[2, ...] = base_mass_tail\n\n        we = 0\n        wn = 0\n        # inner right wing\n        beam_number[we:we + n_elem_main1] = 0\n        y[wn:wn + n_node_main1] = np.linspace(0.0, span_main1, n_node_main1)\n\n        for ielem in range(n_elem_main1):\n            conn[we + ielem, :] = ((np.ones((3, ))*(we + ielem)*(n_node_elem - 1)) +\n                                   [0, 2, 1])\n            for inode in range(n_node_elem):\n                frame_of_reference_delta[we + ielem, inode, :] = [-1.0, 0.0, 0.0]\n\n        elem_stiffness[we:we + n_elem_main1] = 0\n        elem_mass[we:we + n_elem_main1] = 0\n        flat_end_node[0] = n_node_main1 - 1\n        first_node_centre[0] = wn + 1 + 1\n        boundary_conditions[0] = 1\n        # remember this is in B FoR\n        app_forces[0] = [0, thrust, 0, 0, 0, 0]\n        we += n_elem_main1\n        wn += n_node_main1\n\n        # outer right wing\n        beam_number[we:we + n_elem_main1] = 0\n        y[wn:wn + n_node_main2 - 1] = y[wn - 1] + np.linspace(0.0, np.cos(lambda_dihedral)*span_main2, n_node_main2)[1:]\n        z[wn:wn + n_node_main2 - 1] = z[wn - 1] + np.linspace(0.0, np.sin(lambda_dihedral)*span_main2, n_node_main2)[1:]\n        for ielem in range(n_elem_main2):\n            conn[we + ielem, :] = ((np.ones((3, ))*(we + ielem)*(n_node_elem - 1)) +\n                                   [0, 2, 1])\n            for inode in range(n_node_elem):\n                frame_of_reference_delta[we + ielem, inode, :] = [-1.0, 0.0, 0.0]\n        elem_stiffness[we:we + n_elem_main2] = 0\n        elem_mass[we:we + n_elem_main2] = 0\n        boundary_conditions[wn + n_node_main2 - 2] = -1\n        we += n_elem_main2\n        wn += n_node_main2 - 1\n\n        # inner left wing\n        beam_number[we:we + n_elem_main1 - 1] = 1\n        y[wn:wn + n_node_main1 - 1] = np.linspace(0.0, -span_main1, n_node_main1)[1:]\n        for ielem in range(n_elem_main1):\n            conn[we + ielem, :] = ((np.ones((3, ))*(we+ielem)*(n_node_elem - 1)) +\n                                   [0, 2, 1])\n            for inode in range(n_node_elem):\n                frame_of_reference_delta[we + ielem, inode, :] = [1.0, 0.0, 0.0]\n        conn[we, 0] = 0\n        elem_stiffness[we:we + n_elem_main1] = 0\n        elem_mass[we:we + n_elem_main1] = 0\n        flat_end_node[1] = wn + n_node_main1 - 1 - 1\n        first_node_centre[1] = wn + 1\n        we += n_elem_main1\n        wn += n_node_main1 - 1\n\n        # outer left wing\n        beam_number[we:we + n_elem_main2] = 1\n        y[wn:wn + n_node_main2 - 1] = y[wn - 1] + np.linspace(0.0, -np.cos(lambda_dihedral)*span_main2, n_node_main2)[1:]\n        z[wn:wn + n_node_main2 - 1] = z[wn - 1] + np.linspace(0.0, np.sin(lambda_dihedral)*span_main2, n_node_main2)[1:]\n        for ielem in range(n_elem_main2):\n            conn[we + ielem, :] = ((np.ones((3, ))*(we+ielem)*(n_node_elem - 1)) +\n                                   [0, 2, 1])\n            for inode in range(n_node_elem):\n                frame_of_reference_delta[we + ielem, inode, :] = [1.0, 0.0, 0.0]\n        elem_stiffness[we:we + n_elem_main2] = 0\n        elem_mass[we:we + n_elem_main2] = 0\n        boundary_conditions[wn + n_node_main2 - 2] = -1\n        we += n_elem_main2\n        wn += n_node_main2 - 1\n\n        # fuselage\n        beam_number[we:we + n_elem_fuselage] = 2\n        x[wn:wn + n_node_fuselage - 1] = np.linspace(0.0, length_fuselage, n_node_fuselage)[1:]\n        z[wn:wn + n_node_fuselage - 1] = np.linspace(0.0, offset_fuselage, n_node_fuselage)[1:]\n        for ielem in range(n_elem_fuselage):\n            conn[we + ielem, :] = ((np.ones((3,))*(we + ielem)*(n_node_elem - 1)) +\n                                   [0, 2, 1])\n            for inode in range(n_node_elem):\n                frame_of_reference_delta[we + ielem, inode, :] = [0.0, 1.0, 0.0]\n        conn[we, 0] = 0\n        elem_stiffness[we:we + n_elem_fuselage] = 1\n        elem_mass[we:we + n_elem_fuselage] = 1\n        we += n_elem_fuselage\n        wn += n_node_fuselage - 1\n        global end_of_fuselage_node\n        end_of_fuselage_node = wn - 1\n\n        # fin\n        beam_number[we:we + n_elem_fin] = 3\n        x[wn:wn + n_node_fin - 1] = x[end_of_fuselage_node]\n        z[wn:wn + n_node_fin - 1] = z[end_of_fuselage_node] + np.linspace(0.0, fin_height, n_node_fin)[1:]\n        for ielem in range(n_elem_fin):\n            conn[we + ielem, :] = ((np.ones((3,))*(we + ielem)*(n_node_elem - 1)) +\n                                   [0, 2, 1])\n            for inode in range(n_node_elem):\n                frame_of_reference_delta[we + ielem, inode, :] = [-1.0, 0.0, 0.0]\n        conn[we, 0] = end_of_fuselage_node\n        elem_stiffness[we:we + n_elem_fin] = 2\n        elem_mass[we:we + n_elem_fin] = 2\n        we += n_elem_fin\n        wn += n_node_fin - 1\n        end_of_fin_node = wn - 1\n\n        # right tail\n        beam_number[we:we + n_elem_tail] = 4\n        x[wn:wn + n_node_tail - 1] = x[end_of_fin_node]\n        y[wn:wn + n_node_tail - 1] = np.linspace(0.0, span_tail, n_node_tail)[1:]\n        z[wn:wn + n_node_tail - 1] = z[end_of_fin_node]\n        for ielem in range(n_elem_tail):\n            conn[we + ielem, :] = ((np.ones((3, ))*(we + ielem)*(n_node_elem - 1)) +\n                                   [0, 2, 1])\n            for inode in range(n_node_elem):\n                frame_of_reference_delta[we + ielem, inode, :] = [-1.0, 0.0, 0.0]\n        conn[we, 0] = end_of_fin_node\n        elem_stiffness[we:we + n_elem_tail] = 2\n        elem_mass[we:we + n_elem_tail] = 2\n        boundary_conditions[wn + n_node_tail - 2] = -1\n        we += n_elem_tail\n        wn += n_node_tail - 1\n\n        # left tail\n        beam_number[we:we + n_elem_tail] = 5\n        x[wn:wn + n_node_tail - 1] = x[end_of_fin_node]\n        y[wn:wn + n_node_tail - 1] = np.linspace(0.0, -span_tail, n_node_tail)[1:]\n        z[wn:wn + n_node_tail - 1] = z[end_of_fin_node]\n        for ielem in range(n_elem_tail):\n            conn[we + ielem, :] = ((np.ones((3, ))*(we + ielem)*(n_node_elem - 1)) +\n                                   [0, 2, 1])\n            for inode in range(n_node_elem):\n                frame_of_reference_delta[we + ielem, inode, :] = [1.0, 0.0, 0.0]\n        conn[we, 0] = end_of_fin_node\n        elem_stiffness[we:we + n_elem_tail] = 2\n        elem_mass[we:we + n_elem_tail] = 2\n        boundary_conditions[wn + n_node_tail - 2] = -1\n        we += n_elem_tail\n        wn += n_node_tail - 1\n\n        with h5.File(route + '/' + case_name + '.fem.h5', 'a') as h5file:\n            coordinates = h5file.create_dataset('coordinates', data=np.column_stack((x, y, z)))\n            conectivities = h5file.create_dataset('connectivities', data=conn)\n            num_nodes_elem_handle = h5file.create_dataset(\n                'num_node_elem', data=n_node_elem)\n            num_nodes_handle = h5file.create_dataset(\n                'num_node', data=n_node)\n            num_elem_handle = h5file.create_dataset(\n                'num_elem', data=n_elem)\n            stiffness_db_handle = h5file.create_dataset(\n                'stiffness_db', data=stiffness)\n            stiffness_handle = h5file.create_dataset(\n                'elem_stiffness', data=elem_stiffness)\n            mass_db_handle = h5file.create_dataset(\n                'mass_db', data=mass)\n            mass_handle = h5file.create_dataset(\n                'elem_mass', data=elem_mass)\n            frame_of_reference_delta_handle = h5file.create_dataset(\n                'frame_of_reference_delta', data=frame_of_reference_delta)\n            structural_twist_handle = h5file.create_dataset(\n                'structural_twist', data=structural_twist)\n            bocos_handle = h5file.create_dataset(\n                'boundary_conditions', data=boundary_conditions)\n            beam_handle = h5file.create_dataset(\n                'beam_number', data=beam_number)\n            app_forces_handle = h5file.create_dataset(\n                'app_forces', data=app_forces)\n            lumped_mass_nodes_handle = h5file.create_dataset(\n                'lumped_mass_nodes', data=lumped_mass_nodes)\n            lumped_mass_handle = h5file.create_dataset(\n                'lumped_mass', data=lumped_mass)\n            lumped_mass_inertia_handle = h5file.create_dataset(\n                'lumped_mass_inertia', data=lumped_mass_inertia)\n            lumped_mass_position_handle = h5file.create_dataset(\n                'lumped_mass_position', data=lumped_mass_position)\n\n    def generate_aero_file():\n        global x, y, z\n        # control surfaces\n        n_control_surfaces = 2\n        control_surface = np.zeros((n_elem, n_node_elem), dtype=int) - 1\n        control_surface_type = np.zeros((n_control_surfaces, ), dtype=int)\n        control_surface_deflection = np.zeros((n_control_surfaces, ))\n        control_surface_chord = np.zeros((n_control_surfaces, ), dtype=int)\n        control_surface_hinge_coord = np.zeros((n_control_surfaces, ), dtype=float)\n\n        # control surface type 0 = static\n        # control surface type 1 = dynamic\n        control_surface_type[0] = 0\n        control_surface_deflection[0] = cs_deflection\n        control_surface_chord[0] = m\n        control_surface_hinge_coord[0] = -0.25 # nondimensional wrt elastic axis (+ towards the trailing edge)\n\n        control_surface_type[1] = 0\n        control_surface_deflection[1] = rudder_static_deflection\n        control_surface_chord[1] = 1\n        control_surface_hinge_coord[1] = -0. # nondimensional wrt elastic axis (+ towards the trailing edge)\n\n        we = 0\n        wn = 0\n        # right wing (surface 0, beam 0)\n        i_surf = 0\n        airfoil_distribution[we:we + n_elem_main, :] = 0\n        surface_distribution[we:we + n_elem_main] = i_surf\n        surface_m[i_surf] = m\n        aero_node[wn:wn + n_node_main] = True\n        temp_chord = np.linspace(chord_main, chord_main, n_node_main)\n        temp_sweep = np.linspace(0.0, 0*np.pi/180, n_node_main)\n        node_counter = 0\n        for i_elem in range(we, we + n_elem_main):\n            for i_local_node in range(n_node_elem):\n                if not i_local_node == 0:\n                    node_counter += 1\n                chord[i_elem, i_local_node] = temp_chord[node_counter]\n                elastic_axis[i_elem, i_local_node] = ea_main\n                sweep[i_elem, i_local_node] = temp_sweep[node_counter]\n\n        we += n_elem_main\n        wn += n_node_main\n\n        # left wing (surface 1, beam 1)\n        i_surf = 1\n        airfoil_distribution[we:we + n_elem_main, :] = 0\n        # airfoil_distribution[wn:wn + n_node_main - 1] = 0\n        surface_distribution[we:we + n_elem_main] = i_surf\n        surface_m[i_surf] = m\n        aero_node[wn:wn + n_node_main - 1] = True\n        # chord[wn:wn + num_node_main - 1] = np.linspace(main_chord, main_tip_chord, num_node_main)[1:]\n        # chord[wn:wn + num_node_main - 1] = main_chord\n        # elastic_axis[wn:wn + num_node_main - 1] = main_ea\n        temp_chord = np.linspace(chord_main, chord_main, n_node_main)\n        node_counter = 0\n        for i_elem in range(we, we + n_elem_main):\n            for i_local_node in range(n_node_elem):\n                if not i_local_node == 0:\n                    node_counter += 1\n                chord[i_elem, i_local_node] = temp_chord[node_counter]\n                elastic_axis[i_elem, i_local_node] = ea_main\n                sweep[i_elem, i_local_node] = -temp_sweep[node_counter]\n\n        we += n_elem_main\n        wn += n_node_main - 1\n\n        we += n_elem_fuselage\n        wn += n_node_fuselage - 1 - 1\n        \n        # fin (surface 2, beam 3)\n        i_surf = 2\n        airfoil_distribution[we:we + n_elem_fin, :] = 1\n        # airfoil_distribution[wn:wn + n_node_fin] = 0\n        surface_distribution[we:we + n_elem_fin] = i_surf\n        surface_m[i_surf] = m\n        aero_node[wn:wn + n_node_fin] = True\n        # chord[wn:wn + num_node_fin] = fin_chord\n        for i_elem in range(we, we + n_elem_fin):\n            for i_local_node in range(n_node_elem):\n                chord[i_elem, i_local_node] = chord_fin\n                elastic_axis[i_elem, i_local_node] = ea_fin\n                control_surface[i_elem, i_local_node] = 1\n                # twist[end_of_fuselage_node] = 0\n                # twist[wn:] = 0\n                # elastic_axis[wn:wn + num_node_main] = fin_ea\n        we += n_elem_fin\n        wn += n_node_fin - 1\n        #\n        # # # right tail (surface 3, beam 4)\n        i_surf = 3\n        airfoil_distribution[we:we + n_elem_tail, :] = 2\n        # airfoil_distribution[wn:wn + n_node_tail] = 0\n        surface_distribution[we:we + n_elem_tail] = i_surf\n        surface_m[i_surf] = m\n        # XXX not very elegant\n        aero_node[wn:] = True\n        # chord[wn:wn + num_node_tail] = tail_chord\n        # elastic_axis[wn:wn + num_node_main] = tail_ea\n        for i_elem in range(we, we + n_elem_tail):\n            for i_local_node in range(n_node_elem):\n                twist[i_elem, i_local_node] = -0\n        for i_elem in range(we, we + n_elem_tail):\n            for i_local_node in range(n_node_elem):\n                chord[i_elem, i_local_node] = chord_tail\n                elastic_axis[i_elem, i_local_node] = ea_tail\n                control_surface[i_elem, i_local_node] = 0\n\n        we += n_elem_tail\n        wn += n_node_tail\n        #\n        # # left tail (surface 4, beam 5)\n        i_surf = 4\n        airfoil_distribution[we:we + n_elem_tail, :] = 2\n        # airfoil_distribution[wn:wn + n_node_tail - 1] = 0\n        surface_distribution[we:we + n_elem_tail] = i_surf\n        surface_m[i_surf] = m\n        aero_node[wn:wn + n_node_tail - 1] = True\n        # chord[wn:wn + num_node_tail] = tail_chord\n        # elastic_axis[wn:wn + num_node_main] = tail_ea\n        # twist[we:we + num_elem_tail] = -tail_twist\n        for i_elem in range(we, we + n_elem_tail):\n            for i_local_node in range(n_node_elem):\n                twist[i_elem, i_local_node] = -0\n        for i_elem in range(we, we + n_elem_tail):\n            for i_local_node in range(n_node_elem):\n                chord[i_elem, i_local_node] = chord_tail\n                elastic_axis[i_elem, i_local_node] = ea_tail\n                control_surface[i_elem, i_local_node] = 0\n        we += n_elem_tail\n        wn += n_node_tail\n\n\n        with h5.File(route + '/' + case_name + '.aero.h5', 'a') as h5file:\n            airfoils_group = h5file.create_group('airfoils')\n            # add one airfoil\n            naca_airfoil_main = airfoils_group.create_dataset('0', data=np.column_stack(\n                generate_naca_camber(P=0, M=0)))\n            naca_airfoil_tail = airfoils_group.create_dataset('1', data=np.column_stack(\n                generate_naca_camber(P=0, M=0)))\n            naca_airfoil_fin = airfoils_group.create_dataset('2', data=np.column_stack(\n                generate_naca_camber(P=0, M=0)))\n\n            # chord\n            chord_input = h5file.create_dataset('chord', data=chord)\n            dim_attr = chord_input .attrs['units'] = 'm'\n\n            # twist\n            twist_input = h5file.create_dataset('twist', data=twist)\n            dim_attr = twist_input.attrs['units'] = 'rad'\n\n            # sweep\n            sweep_input = h5file.create_dataset('sweep', data=sweep)\n            dim_attr = sweep_input.attrs['units'] = 'rad'\n\n            # airfoil distribution\n            airfoil_distribution_input = h5file.create_dataset('airfoil_distribution', data=airfoil_distribution)\n\n            surface_distribution_input = h5file.create_dataset('surface_distribution', data=surface_distribution)\n            surface_m_input = h5file.create_dataset('surface_m', data=surface_m)\n            m_distribution_input = h5file.create_dataset('m_distribution', data=m_distribution.encode('ascii', 'ignore'))\n\n            aero_node_input = h5file.create_dataset('aero_node', data=aero_node)\n            elastic_axis_input = h5file.create_dataset('elastic_axis', data=elastic_axis)\n\n            control_surface_input = h5file.create_dataset('control_surface', data=control_surface)\n            control_surface_deflection_input = h5file.create_dataset('control_surface_deflection', data=control_surface_deflection)\n            control_surface_chord_input = h5file.create_dataset('control_surface_chord', data=control_surface_chord)\n            control_surface_hinge_coord_input = h5file.create_dataset('control_surface_hinge_coord', data=control_surface_hinge_coord)\n            control_surface_types_input = h5file.create_dataset('control_surface_type', data=control_surface_type)\n\n\n    def generate_naca_camber(M=0, P=0):\n        mm = M*1e-2\n        p = P*1e-1\n\n        def naca(x, mm, p):\n            if x < 1e-6:\n                return 0.0\n            elif x < p:\n                return mm/(p*p)*(2*p*x - x*x)\n            elif x > p and x < 1+1e-6:\n                return mm/((1-p)*(1-p))*(1 - 2*p + 2*p*x - x*x)\n\n        x_vec = np.linspace(0, 1, 1000)\n        y_vec = np.array([naca(x, mm, p) for x in x_vec])\n        return x_vec, y_vec\n\n    def generate_multibody_file():\n        global end_of_fuselage_node\n        global LC\n        # LCR = gc.LagrangeConstraint()\n        # LCR.behaviour = 'lin_vel_node_wrtG'\n        # LCR.velocity = np.zeros((3,))\n        # LCR.body_number = 0\n        # LCR.node_number = flat_end_node[0]\n\n        # LCL = gc.LagrangeConstraint()\n        # LCL.behaviour = 'lin_vel_node_wrtG'\n        # LCL.velocity = np.zeros((3,))\n        # LCL.body_number = 0\n        # LCL.node_number = flat_end_node[1]\n\n        LCF = gc.LagrangeConstraint()\n        LCF.behaviour = 'lin_vel_node_wrtG'\n        LCF.velocity = np.zeros((3,))\n        LCF.body_number = 0\n        LCF.node_number = end_of_fuselage_node\n\n        LCCR = gc.LagrangeConstraint()\n        LCCR.behaviour = 'lin_vel_node_wrtG'\n        LCCR.velocity = np.zeros((3,))\n        LCCR.body_number = 0\n        LCCR.node_number = first_node_centre[0]\n\n        LCCL = gc.LagrangeConstraint()\n        LCCL.behaviour = 'lin_vel_node_wrtG'\n        LCCL.velocity = np.zeros((3,))\n        LCCL.body_number = 0\n        LCCL.node_number = first_node_centre[1]\n\n        # LC = [LCR, LCL, LCF, LCCR, LCCL]\n        LC = [LCF, LCCR, LCCL]\n\n        MB1 = gc.BodyInformation()\n        MB1.body_number = 0\n        MB1.FoR_position = np.zeros((6,))\n        MB1.FoR_velocity = np.zeros((6,))\n        MB1.FoR_acceleration = np.zeros((6,))\n        MB1.FoR_movement = 'free'\n        MB1.quat = np.array([1.0, 0.0, 0.0, 0.0])\n\n        MB = [MB1]\n        gc.generate_multibody_file(LC, MB, route, case_name)\n\n\n    def generate_solver_file():\n        file_name = route + '/' + case_name + '.sharpy'\n        settings = dict()\n        settings['SHARPy'] = {'case': case_name,\n                              'route': route,\n                              'flow': flow,\n                              'write_screen': 'off',\n                              'write_log': 'on',\n                              'log_folder': route + '/output/',\n                              'log_file': case_name + '.log'}\n\n        settings['BeamLoader'] = {'unsteady': 'on',\n                                  'orientation':\n                                      algebra.euler2quat(np.array([roll,\n                                                                   alpha,\n                                                                   beta]))}\n        settings['AerogridLoader'] = {'unsteady': 'on',\n                                      'aligned_grid': 'on',\n                                      # 'mstar': int(160/tstep_factor),\n                                      'mstar': int(100/tstep_factor),\n                                      'freestream_dir': ['1', '0', '0'],\n                                      'control_surface_deflection': ['', ''],\n                                      'control_surface_deflection_generator':\n                                      {'0': {},\n                                       '1': {}}}\n\n        settings['NonLinearStatic'] = {'print_info': 'off',\n                                       'max_iterations': 150,\n                                       'num_load_steps': 1,\n                                       'delta_curved': 1e-1,\n                                       'min_delta': tolerance,\n                                       'gravity_on': gravity,\n                                       'gravity': 0*9.81}\n\n        settings['StaticUvlm'] = {'print_info': 'off',\n                                  'horseshoe': 'off',\n                                  'num_cores': num_cores,\n                                  'n_rollup': 0,\n                                  'rollup_dt': dt,\n                                  'rollup_aic_refresh': 1,\n                                  'rollup_tolerance': 1e-4,\n                                  'velocity_field_generator': 'SteadyVelocityField',\n                                  'velocity_field_input': {'u_inf': u_background,\n                                                           'u_inf_direction': [1., 0, 0]},\n                                  'rho': 0*rho}\n\n        settings['StaticCoupled'] = {'print_info': 'off',\n                                     'structural_solver': 'NonLinearStatic',\n                                     'structural_solver_settings':\n                                          settings['NonLinearStatic'],\n                                     'aero_solver': 'StaticUvlm',\n                                     'aero_solver_settings': settings['StaticUvlm'],\n                                     'max_iter': 100,\n                                     'n_load_steps': n_step,\n                                     'tolerance': fsi_tolerance,\n                                     'relaxation_factor': relaxation_factor}\n\n        settings['StaticTrim'] = {'solver': 'StaticCoupled',\n                                  'solver_settings': settings['StaticCoupled'],\n                                  'initial_alpha': alpha,\n                                  'initial_deflection': cs_deflection,\n                                  'initial_thrust': thrust}\n\n        settings['NonLinearDynamicCoupledStep'] = {'print_info': 'off',\n                                                   'max_iterations': 950,\n                                                   'delta_curved': 1e-1,\n                                                   'min_delta': tolerance,\n                                                   'newmark_damp': 1e-2,\n                                                   'gravity_on': gravity,\n                                                   'gravity': 9.81,\n                                                   'num_steps': n_tstep,\n                                                   'dt': dt,\n                                                   'initial_velocity': 0}\n\n        settings['NonLinearDynamicMultibody'] = {'print_info': 'off',\n                                                 'max_iterations': 950,\n                                                 'delta_curved': 1e-1,\n                                                 'min_delta': tolerance,\n                                                 'newmark_damp': 1e-2,\n                                                 'gravity_on': gravity,\n                                                 'gravity': 9.81,\n                                                 'num_steps': n_tstep,\n                                                 'dt': dt}\n\n        relative_motion = 'off'\n        settings['StepUvlm'] = {'print_info': 'off',\n                                'horseshoe': 'off',\n                                'num_cores': num_cores,\n                                'n_rollup': 0,\n                                'convection_scheme': 2,\n                                'rollup_dt': dt,\n                                'rollup_aic_refresh': 1,\n                                'rollup_tolerance': 1e-4,\n                                'gamma_dot_filtering': 6,\n                                'velocity_field_generator': 'SteadyVelocityField',\n                                'velocity_field_input': {'u_inf': u_background,\n                                                         'u_inf_direction': [1., 0, 0]},\n                                'rho': rho,\n                                'n_time_steps': n_tstep,\n                                'dt': dt}\n\n        solver = 'NonLinearDynamicMultibody'\n        settings['PickleData'] = {'folder': route + '/'}\n        settings['DynamicCoupled'] = {'structural_solver': solver,\n                                      'structural_solver_settings': settings[solver],\n                                      'aero_solver': 'StepUvlm',\n                                      'aero_solver_settings': settings['StepUvlm'],\n                                      'fsi_substeps': 200,\n                                      'fsi_tolerance': fsi_tolerance,\n                                      'relaxation_factor': relaxation_factor,\n                                      'minimum_steps': 2,\n                                      'relaxation_steps': 150,\n                                      'dynamic_relaxation': 'off',\n                                      'final_relaxation_factor': 0.5,\n                                      'n_time_steps': n_tstep,\n                                      'dt': dt,\n                                      'structural_substeps': structural_substeps,\n                                      'include_unsteady_force_contribution': 'on',\n                                      'steps_without_unsteady_force': 9,\n                                      'controller_id': {#'controller_right': 'TakeOffTrajectoryController',\n                                                        # 'controller_left': 'TakeOffTrajectoryController',\n                                                        'controller_tail': 'TakeOffTrajectoryController',\n                                                        'controller_cright': 'TakeOffTrajectoryController',\n                                                        'controller_cleft': 'TakeOffTrajectoryController',\n                                                        },\n                                      'controller_settings': {\n                                          # 'controller_right':\n                                      # {\n                                          # 'trajectory_input_file': trajectory_file,\n                                          # 'dt': dt,\n                                          # 'trajectory_method': 'lagrange',\n                                          # 'controlled_constraint': 'constraint_00',\n                                          # 'initial_ramp_length_structural_substeps': controller_ramp,\n                                          # 'write_controller_log': 'off',\n                                      # },\n                                          # 'controller_left':\n                                      # {\n                                          # 'trajectory_input_file': trajectory_file,\n                                          # 'dt': dt,\n                                          # 'trajectory_method': 'lagrange',\n                                          # 'controlled_constraint': 'constraint_01',\n                                          # 'initial_ramp_length_structural_substeps': controller_ramp,\n                                          # 'write_controller_log': 'off',\n                                      # },\n                                      'controller_tail':\n                                      {\n                                          'trajectory_input_file': trajectory_file,\n                                          'dt': dt,\n                                          'trajectory_method': 'lagrange',\n                                          'controlled_constraint': 'constraint_00',\n                                          'initial_ramp_length_structural_substeps': controller_ramp,\n                                          'write_controller_log': 'off',\n                                      }, 'controller_cright':\n                                      {\n                                          'trajectory_input_file': trajectory_file,\n                                          'dt': dt,\n                                          'trajectory_method': 'lagrange',\n                                          'controlled_constraint': 'constraint_01',\n                                          'initial_ramp_length_structural_substeps': controller_ramp,\n                                          'write_controller_log': 'off',\n                                      }, 'controller_cleft':\n                                      {\n                                          'trajectory_input_file': trajectory_file,\n                                          'dt': dt,\n                                          'trajectory_method': 'lagrange',\n                                          'controlled_constraint': 'constraint_02',\n                                          'initial_ramp_length_structural_substeps': controller_ramp,\n                                          'write_controller_log': 'off',\n                                      }},\n                                      'postprocessors': ['BeamLoads'],\n                                      'postprocessors_settings': {'BeamLoads': {'folder': route + '/output/',\n                                                                                'csv_output': 'off'},\n                                                                  'BeamPlot': {'folder': route + '/output/',\n                                                                               'include_rbm': 'on',\n                                                                               'include_applied_forces': 'on'},\n                                                                  'AerogridPlot': {\n                                                                      'folder': route + '/output/',\n                                                                      'include_rbm': 'on',\n                                                                      'include_applied_forces': 'on',\n                                                                      'minus_m_star': 0},\n                                                                 }\n                                      }\n\n        settings['BeamLoads'] = {'folder': route + '/output/',\n                                 'csv_output': 'off'}\n\n        settings['BeamPlot'] = {'folder': route + '/output/',\n                                'include_rbm': 'on',\n                                'include_applied_forces': 'on',\n                                'include_forward_motion': 'on'}\n\n        settings['AerogridPlot'] = {'folder': route + '/output/',\n                                    'include_rbm': 'on',\n                                    'include_forward_motion': 'off',\n                                    'include_applied_forces': 'on',\n                                    'minus_m_star': 0,\n                                    'u_inf': 0,\n                                    'dt': dt}\n\n        settings['Notes'] = {'note': case_notes}\n\n        import configobj\n        config = configobj.ConfigObj()\n        config.filename = file_name\n        for k, v in settings.items():\n            config[k] = v\n        config.write()\n\n    gc.clean_test_files(route, case_name)\n    generate_fem()\n    generate_multibody_file()\n    generate_aero_file()\n    generate_solver_file()\n    generate_dyn_file()\n    if 'StaticTrim' not in flow:\n        generate_trajectory_file()\n\n    return {'sharpy': route + '/' + case_name + '.sharpy'}\n\n\nif __name__ == \"__main__\":\n    generate()\n"
  },
  {
    "path": "scripts/optimiser/optimiser.py",
    "content": "#! /usr/bin/env python3\n\"\"\"\nThis script is an example of the use of sharpy as a \"black box\"\nfor optimisation.\n\nIt works like this:\n\n*DRIVER\n    ->\n*PARSE_INPUTS\n    -> parser.input_file\n*READ_YAML\n    -> yaml_dict\nOPTIMISER\n(\n    -> yaml_dict, x\n    *WRAPPER\n    (\n        -> yaml_dict, x\n        *UNFOLD_X\n        -> yaml_dict, x_dict\n        *EVALUATE\n        (\n            *CASE_ID\n            -> yaml_dict, case_name, x_dict\n            SET_CASE\n            -> file_names\n            RUN_CASE\n            -> data, x_dict, cost_dict\n            *COST_FUNCTION\n            (\n                # GROUND CLEARANCE CONTRIBUTION\n                *GET_GROUND_CLEARANCE\n                *COST_SIGMOID\n            )\n            -> cost\n            CLEAN_CASE\n            ->\n        )\n    )\n)\n\n\n\n\"\"\"\n\nimport os\nimport sys\nimport glob\nimport shutil\nimport argparse\nimport warnings\nimport random\nimport pprint\nimport numpy as np\nimport scipy\nimport scipy.optimize as optimize\nfrom scipy.interpolate import Rbf\nimport yaml\nimport dill as pickle\nimport GPyOpt\n\n\nimport sharpy.sharpy_main\nimport sharpy.utils.exceptions as exc\n\ncases = list()\n\nloads_cost_array = None\nprev_result = None\n\n\ndef driver():\n    # print information\n\n    # parse args\n    parser = parse_inputs()\n\n    # read yaml\n    yaml_dict = read_yaml(parser.input_file)\n    pprint.pprint(yaml_dict)\n\n    # get previous cases\n    previous_x, previous_y = process_previous_cases(yaml_dict)\n\n    # call optimiser\n    optimiser(yaml_dict, previous_x, previous_y)\n\n    # postprocess output\n\n    return 0\n\n\ndef parse_inputs():\n    parser = argparse.ArgumentParser(description=\n        \"\"\"The optimiser.py script is an example of the use of SHARPy as a\nblack box for an optimiser. \"\"\")\n\n    parser.add_argument('input_file', help='input file in YAML format')\n    parser.add_argument(\"-v\", \"--verbosity\", action=\"count\", default=0,\n                        help=\"increase output verbosity\")\n    parser = parser.parse_args()\n\n    return parser\n\n\ndef read_yaml(file_name):\n    \"\"\"read_yaml\n\n    \"\"\"\n    with open(file_name, 'r') as ifile:\n        try:\n            yaml_dict = yaml.safe_load(ifile)\n        except yaml.YAMLError as exc:\n            print(exc)\n\n    return yaml_dict\n\n\ndef optimiser(in_dict, previous_x, previous_y):\n    settings_dict = in_dict['settings']\n    case_dict = in_dict['case']\n    base_dict = in_dict['base']\n    # create folder for cases if it doesn't exist\n    try:\n        os.mkdir(settings_dict['cases_folder'])\n    except FileExistsError:\n        pass\n    # create folder for cases if it doesn't exist\n    try:\n        os.mkdir((settings_dict['cases_folder'] + '/' + case_dict['name'] + '/').replace('//', '/'))\n        print('Folder made')\n    except FileExistsError:\n        print('cases_folder already exists')\n\n    # clean folder for the new case to be run\n    case_route = (settings_dict['cases_folder'] + '/' + case_dict['name'] + '/').replace('//', '/')\n\n    # copy case\n    try:\n        print(base_dict['route'] + '/generate.py', case_route + 'generate.py')\n        shutil.copyfile(base_dict['route'] + '/generate.py', case_route + 'generate.py')\n    except IOError as error:\n        print('Problem copying the case')\n        print('Original error was: {}'.format(error))\n\n    # add the case folder to the python path to run generate with it\n    sys.path.append(case_route)\n    # create folder for output if doesnt exist\n    try:\n        os.mkdir(in_dict['case']['output_folder'])\n    except FileExistsError:\n        pass\n\n    output_route = in_dict['case']['output_folder'] + '/' + in_dict['case']['name'] + '/'\n    if os.path.exists(output_route):\n        warnings.warn('The folder ' + output_route + ' exists, cleaning it.')\n        # cleanup folder\n        try:\n            shutil.rmtree(output_route)\n        except:\n            pass\n\n    os.mkdir(output_route)\n\n    n_params = len(in_dict['optimiser']['parameters'])\n    bounds = []\n    for k, v in in_dict['optimiser']['parameters_initial'].items():\n        bounds.append({'name': in_dict['optimiser']['parameters'][k],\n                       'type': 'continuous',\n                       'domain': in_dict['optimiser']['parameters_bounds'][k]})\n        pprint.pprint(bounds)\n\n    constraints = list()\n    try:\n        length = in_dict['optimiser']['constraints']['ramp_length']\n        acc_var_i = None\n        release_vel_var_i = None\n        for k, v in in_dict['optimiser']['parameters'].items():\n            if v == 'acceleration':\n                acc_var_i = k\n\n            if v == 'release_velocity':\n                release_vel_var_i = k\n\n        # ramp_length = release_vel**2 / acceleration\n        constraints.append({'name': 'length',\n                            'constraint': '0.5*(x[:, ' + str(release_vel_var_i) + ']**2' +\n                                          '/x[:, ' + str(acc_var_i) + '])' +\n                                          ' - ' + str(length)})\n    except KeyError:\n        pass\n\n    try:\n        limit = in_dict['optimiser']['constraints']['incidence_angle']['limit']\n        base_aoa = in_dict['optimiser']['constraints']['incidence_angle']['base_aoa']\n\n        dAoA_var_i = None\n        ramp_angle_var_i = None\n        for k, v in in_dict['optimiser']['parameters'].items():\n            if v == 'dAoA':\n                dAoA_var_i = k\n            if v == 'ramp_angle':\n                ramp_angle_var_i = k\n\n        # base_aoa + dAoA - ramp_angle < limit\n        constraint_string = ''\n        constraint_string += str(base_aoa) + ' + '\n        constraint_string += 'x[:, ' + str(dAoA_var_i) + '] - '\n        constraint_string += 'x[:, ' + str(ramp_angle_var_i) + '] - '\n        constraint_string += str(limit)\n        constraints.append({'name': 'angle',\n                            'constraint': constraint_string})\n    except KeyError:\n        pass\n\n    print(constraints)\n\n    gpyopt_wrapper = lambda x: wrapper(x, in_dict)\n    batch_size = in_dict['optimiser']['numerics']['batch_size']\n    num_cores = in_dict['optimiser']['numerics']['n_cores']\n    opt = GPyOpt.methods.BayesianOptimization(\n        f=gpyopt_wrapper,\n        domain=bounds,\n        exact_feval=True,\n        model_type='GP',\n        acquisition_type='EI',\n        normalize_y=False,\n        initial_design_numdata=in_dict['optimiser']['numerics']['initial_design_numdata'],\n        evaluator_type='local_penalization',\n        batch_size=batch_size,\n        num_cores=num_cores,\n        acquisition_jitter=0,\n        de_duplication=True,\n        constraints=constraints,\n        X=previous_x,\n        Y=previous_y)\n\n    opt.run_optimization(in_dict['optimiser']['numerics']['n_iter'],\n                         report_file=output_route + 'report.log',\n                         evaluations_file=output_route + 'evaluations.log',\n                         models_file=output_route + 'models.log',\n                         verbosity=True\n                        )\n\n    print('*'*60)\n    print('Best one cost: ', opt.fx_opt)\n    print('\\tParameters: ', opt.x_opt)\n    print('*'*60)\n    with open(output_route + 'optimiser.pkl', 'wb') as f:\n        pickle.dump(opt, f, protocol=pickle.HIGHEST_PROTOCOL)\n\n    print('Running local optimisation step')\n    local_x, local_cost = local_optimisation(opt, in_dict)\n\n    if np.linalg.norm(opt.x_opt - local_x) < 1e-1:\n        print('Results are very close, no need to dig deeper')\n    else:\n        new_cost = gpyopt_wrapper(local_x)\n        print('New cost: ', new_cost)\n        print('Improvement over the previous solution with the local min.: ',\n              -(local_cost - opt.fx_opt)/opt.fx_opt*100, '%')\n        print('The RBF estimation of the cost was off by: ',\n              (local_cost - new_cost)/new_cost)\n\n    print('FINISHED')\n\ndef local_optimisation(opt, yaml_dict=None, min_method='Powell'):\n    x_in = opt.X\n    y_in = opt.Y\n\n    # rbf = create_rbf_surrogate(x_in, y_in)\n\n    points = x_in\n    values = y_in\n    method = 'linear'\n    options = {'eps': 0.1,\n               'gtol': 1e-3}\n    # scipy.optimize\n    local_opt = optimize.minimize(\n                                  lambda x: gp_constrained(x, opt, yaml_dict),\n                                  x0=opt.x_opt,\n                                  method=min_method,\n                                  options=options,\n                                  jac='2-point')\n\n    print('Local optimisation result: ')\n    print('X = ', local_opt.x)\n    print('f(X) = ', local_opt.fun)\n    print('sucess = ', local_opt.success)\n    print('n_inter = ', local_opt.nit)\n    print('message = ', local_opt.message)\n    return local_opt.x, local_opt.fun\n\n\n# def create_gp_surrogate(opt, yaml_dict):\n    # breakpoint()\n    # opt.mode\n\ndef gp_constrained(x_in, opt, yaml_dict):\n    values, _ = opt.model.predict(np.atleast_2d(x_in))\n\n    parameters = yaml_dict['optimiser']['parameters']\n    bounds = np.zeros((len(parameters), 2))\n    for k, v in parameters.items():\n        bounds[k, :] = yaml_dict['optimiser']['parameters_bounds'][k]\n\n    constraints_list = opt.constraints\n    constraints = list()\n    for v in constraints_list:\n        constraints.append(v['constraint'])\n        constraints[-1] = constraints[-1].replace(':,', '') + ' <= 0'\n\n    multidim = True\n    if len(x_in.shape) == 1:\n        multidim = False\n\n    if multidim:\n        for i in range(x_in.shape[0]):\n            for i_cons in range(len(constraints)):\n                x = x_in[i, :]\n                if not eval(constraints[i_cons]):\n                    values[i] += 15\n    else:\n        for i_cons in range(len(constraints)):\n            x = x_in\n            if not eval(constraints[i_cons]):\n                values += 15\n\n    return values\n\ndef rbf_constrained(x_in, rbf, yaml_dict, opt):\n    parameters = yaml_dict['optimiser']['parameters']\n    bounds = np.zeros((len(parameters), 2))\n    for k, v in parameters.items():\n        bounds[k, :] = yaml_dict['optimiser']['parameters_bounds'][k]\n\n    constraints_list = opt.constraints\n    constraints = list()\n    for v in constraints_list:\n        constraints.append(v['constraint'])\n        constraints[-1] = constraints[-1].replace(':,', '') + ' <= 0'\n\n    values = rbf(*x_in)\n\n    multidim = True\n    if len(x_in.shape) == 1:\n        multidim = False\n\n    if multidim:\n        for i in range(x_in.shape[0]):\n            for i_cons in range(len(constraints)):\n                x = x_in[i, :]\n                if not eval(constraints[i_cons]):\n                    values[i] += 15\n    else:\n        for i_cons in range(len(constraints)):\n            x = x_in\n            if not eval(constraints[i_cons]):\n                values += 15\n\n    return values\n\ndef create_rbf_surrogate(X, Y):\n    rbf = Rbf(*(X.T), Y, function='multiquadric')\n    return rbf\n\n\ndef case_id(case, x_dict):\n    case_name = case\n    for k, v in x_dict.items():\n        case_name += f'_{k}_{v:7.5f}'\n    case_name = case_name.replace('.', 'p')\n\n    return case_name\n\n\ndef evaluate(x_dict, yaml_dict):\n    case_name = case_id(yaml_dict['case']['name'], x_dict)\n\n    print('Running ' + case_name)\n    files, case_name = set_case(case_name,\n                                yaml_dict['base'],\n                                x_dict,\n                                yaml_dict['settings'],\n                                yaml_dict['case'])\n    data = run_case(files)\n    cost = cost_function(data, x_dict, yaml_dict['optimiser']['cost'])\n    print('   Case: ' + str(case_name) + '; cost = ', cost)\n\n    if data is not None:\n        data.cost = cost\n\n        if yaml_dict['settings']['delete_case_folders']:\n            raise NotImplementedError('delete_case_folders not supported yet')\n        if yaml_dict['settings']['save_data']:\n            try:\n                os.mkdir(yaml_dict['settings']['cases_folder'] +\n                          '/' + yaml_dict['case']['name'] + '/')\n            except FileExistsError:\n                pass\n            with open(yaml_dict['settings']['cases_folder'] +\n                      '/' + yaml_dict['case']['name'] + '/' +\n                      'data.pkl', 'wb') as data_file:\n                pickle.dump(data, data_file, -1)\n\n    return cost\n\n\ndef wrapper(x, yaml_dict):\n    x_dict = unfold_x(x, yaml_dict['optimiser']['parameters'])\n    cost = evaluate(x_dict, yaml_dict)\n    return cost\n\n\ndef set_case(case_name, base_dict, x_dict, settings_dict, case_dict):\n    \"\"\"set_case: takes care of the setup of the case\n\n    This function copies the original case, given by route_base, then\n    adds the folder to the python path, runs the generate.py file in there\n    and removes the folder from the path.\n\n    Args:\n        case_name (str): name of the new case.\n        base_dict(dict): dictionary with the base case info\n        x_dict(dict): dictionary of state variables\n    \"\"\"\n\n    # runs the generate.py\n    import generate\n    file_names = generate.generate(x_dict, case_name)\n\n    return file_names, case_name\n\ndef run_case(files):\n    try:\n        warnings.filterwarnings('ignore')\n        data = sharpy.sharpy_main.main(args=['', files['sharpy']])\n    except exc.NotConvergedSolver:\n        print('The solver is not converged in this simulation with inputs')\n        print('Returning None as data')\n        data = None\n    return data\n\n\ndef cost_function(data,\n                  x_dict,\n                  cost_dict,\n                  insight=False):\n    \"\"\"\n    x_dict is here to potentially impose constraints on the optimised\n    parameters\n    \"\"\"\n    cost = 0.0\n    clearance_cost = 0.0\n    loading_cost = 0.0\n    output_dict = dict()\n    # check for data == None:\n    if data is None:\n        cost = 15.  # need a better way\n        return cost\n    # ground clearance cost contribution\n    try:\n        cost_dict['ground_clearance']\n        clearance, ts_clearance = get_ground_clearance(data)\n        output_dict['ground_clearance'] = dict()\n        clearance_cost = cost_sigmoid(clearance,\n                                      **cost_dict['ground_clearance'])\n        output_dict['ground_clearance']['clearance'] = clearance\n        output_dict['ground_clearance']['cost'] = clearance_cost\n        cost += clearance_cost\n    except KeyError:\n        pass\n\n    # loads cost contribution\n    try:\n        cost_dict['loads']\n        loading_cost = loads_cost(data, cost_dict['loads'])\n        cost += loading_cost\n        output_dict['loads'] = {'cost': loading_cost}\n    except KeyError:\n        pass\n\n    if insight:\n        return cost, output_dict\n    else:\n        return cost\n\n# def loads_cost(data, cost_loads_dict):\n    # index2load = {0: 'Torsion',\n                  # 1: 'OOP',\n                  # 2: 'IP'}\n    # try:\n        # loads_array = np.loadtxt(\n            # cost_loads_dict['reference_loads'],\n            # skiprows=1,\n            # delimiter=',')\n    # except OSError:\n        # try:\n            # warnings.warn(\n                # 'Not found reference_loads file, trying parent folder')\n            # loads_array = np.loadtxt(\n                # '../' + cost_loads_dict['reference_loads'],\n                # skiprows=1,\n                # delimiter=',')\n        # except OSError:\n            # warnings.warn('Not found reference_loads file, anywhere. Filling up with ones instead')\n            # loads_array = np.ones((data.structure.ini_info.psi.shape[0], 4))\n\n    # separate_cost = np.zeros((3,))\n\n    # loads_array = np.abs(loads_array)\n    # loads_array_norm = np.linalg.norm(loads_array, axis=0)\n    # for row in range(loads_array.shape[0]):\n        # for col in range(loads_array.shape[1]):\n            # if loads_array[row, col] < loads_array_norm[col]:\n                # loads_array[row, col] = loads_array_norm[col]\n\n    # max_cost = np.zeros((3,))\n    # for it, tstep in enumerate(data.structure.timestep_info):\n        # temp = np.abs(tstep.postproc_cell['loads'][:, 3:])\n        # max_vals = np.max(temp/loads_array[:, 1:] - 1.0, axis=0)\n        # for i_dim in range(3):\n            # max_cost[i_dim] = max(max_cost[i_dim], max_vals[i_dim])\n    # separate_cost = max_cost\n\n    # for k, v in index2load.items():\n        # separate_cost[k] *= cost_loads_dict[v]['scale']\n    # return np.sum(separate_cost)\n\ndef loads_cost(data, cost_loads_dict):\n    index2load = {0: 'Torsion',\n                  1: 'OOP',\n                  2: 'IP'}\n    try:\n        loads_array = np.loadtxt(\n            cost_loads_dict['reference_loads'],\n            skiprows=1,\n            delimiter=',')\n    except OSError:\n        try:\n            warnings.warn(\n                'Not found reference_loads file, trying parent folder')\n            loads_array = np.loadtxt(\n                '../' + cost_loads_dict['reference_loads'],\n                skiprows=1,\n                delimiter=',')\n        except OSError:\n            warnings.warn('Not found reference_loads file, anywhere. Filling up with ones instead')\n            loads_array = np.ones((data.structure.ini_info.psi.shape[0], 4))\n\n    separate_cost = np.zeros((3,))\n\n    loads_array_root = np.abs(loads_array[0, 1:])\n\n    # max_cost = np.zeros((3,))\n    # for it, tstep in enumerate(data.structure.timestep_info):\n        # temp = np.abs(tstep.postproc_cell['loads'][:, 3:])\n        # max_vals = np.max(temp/loads_array[:, 1:] - 1.0, axis=0)\n        # for i_dim in range(3):\n            # max_cost[i_dim] = max(max_cost[i_dim], max_vals[i_dim])\n    # separate_cost = max_cost\n    loads_history = np.zeros((len(data.structure.timestep_info), 3))\n    for it, tstep in enumerate(data.structure.timestep_info):\n        loads_history[it, :] = tstep.postproc_cell['loads'][0, 3:]/loads_array_root\n\n    separate_cost = np.max(loads_history, axis=0) - 1.\n    separate_cost = separate_cost*(separate_cost > 0)\n\n    for k, v in index2load.items():\n        separate_cost[k] *= cost_loads_dict[v]['scale']\n    return np.sum(separate_cost)\n\n\ndef get_ground_clearance(data):\n    \"\"\"\n    Extracts the minimum value of for_pos[2] and returns that value and the\n    timestep it happened at.\n    \"\"\"\n    structure = data.structure\n    min_clear = np.PINF\n    ts_min_clear = None\n    for ts, tstep in enumerate(structure.timestep_info):\n        try:\n            tstep.mb_dict['constraint_00']\n            continue\n        except KeyError:\n            pass\n        if tstep.for_pos[2] < min_clear:\n            min_clear = tstep.for_pos[2]\n            ts_min_clear = ts\n    return min_clear, ts_min_clear\n\n\ndef cost_sigmoid(z, z_min, z_0, x_offset=0.5, offset=0.0, scale=1.):\n    # I need the input to f to be between 0 and 1 for relevant values\n    def sigmoid_mod(x, c=4, x_offset=0.0, offset=0.0, scale=1.):\n        return scale/(1. + np.exp(c*(x - x_offset))) + offset\n\n    val = sigmoid_mod((z - z_min)/(z_0 - z_min),\n                      x_offset=x_offset,\n                      offset=offset,\n                      c=5,\n                      scale=scale)\n    return val\n\n\ndef unfold_x(x, parameters_dict):\n    x_dict = dict()\n    for k, v in parameters_dict.items():\n        x_dict[v] = x.flatten()[k]\n\n    return x_dict\n\n\ndef process_previous_cases(yaml_dict):\n    try:\n        previous_cases_string = yaml_dict['previous_data']['cases']\n    except KeyError:\n        return None, None\n\n    n_cases = len(glob.glob(previous_cases_string))\n    x_out = np.zeros((n_cases, len(yaml_dict['optimiser']['parameters'])))\n    y_out = np.zeros((n_cases, 1))\n\n    for i, f in enumerate(glob.glob(previous_cases_string)):\n        print('Loading ', f)\n        with open(f, 'rb') as fhandle:\n            data = pickle.load(fhandle)\n\n        x_vec, x_dict = x_vec_from_data(data, yaml_dict['optimiser']['parameters'])\n        x_out[i, :] = x_vec\n\n        cost = cost_function(data, x_dict, yaml_dict['optimiser']['cost'])\n        y_out[i, 0] = cost\n\n    return x_out, y_out\n\n\ndef x_vec_from_data(data, param_dict):\n    input_dict = eval(data.settings['Notes']['note'])\n\n    x_vec = np.zeros((len(param_dict),))\n    for k, v in param_dict.items():\n        x_vec[k] = input_dict[v]\n    return x_vec, input_dict\n\n\nif __name__ == '__main__':\n    driver()\n\n\n\n"
  },
  {
    "path": "scripts/optimiser/optimiser_input.yaml",
    "content": "case:\n    name: r05_sc0p2_newcost\n    output_folder: ./output/\nbase:\n    name: base\n    route: ./base_case/\n    generate_file: generate.py\n\nsettings:\n    delete_case_folders: false\n    cases_folder: ./cases/\n    save_data: true\n\nprevious_data:\n    cases: ../../../../optimisers_postproc/cases/r10_sc0p1_newcost/*.pkl\n\noptimiser:\n    numerics:\n        tolerance: 0.01 \n        n_iter: 30\n        batch_size: 4\n        n_cores: 16\n        initial_design_numdata: 4\n    parameters:\n        0: acceleration\n        1: dAoA\n        2: ramp_angle\n        3: release_velocity\n    parameters_initial:\n        0: 2.0\n        1: 0.1\n        2: 0.0\n        3: 9.5\n    parameters_bounds:\n        0: [1.0, 7.0]\n        1: [-1.0, 8.0]\n        2: [-1.0, 8.0]\n        3: [3.0, 15.0]\n    cost:\n        ground_clearance:\n            z_min: -4\n            z_0: 2\n            scale: 10\n        loads:\n            reference_loads: 'input/cruise_loads.csv'\n            Torsion:\n                scale: 0.2\n            OOP:\n                scale: 0.2\n            IP:\n                scale: 0.2\n    constraints:\n        ramp_length: 5.0\n        incidence_angle:\n            limit: 9.0\n            base_aoa: 4.09\n\n"
  },
  {
    "path": "scripts/xplaneUDPout/HALE_varDIe.acf",
    "content": "I\n1004 version\nACF\n\nPROPERTIES_BEGIN\nP _cgpt/0/_name empty craft\nP _cgpt/0/_w_max 142.199996948\nP _cgpt/0/_w_now 142.199996948\nP _cgpt/0/_w_test 142.198120117\nP _cgpt/0/_z_ref 0.0\nP _cgpt/1/_name fuel tank #1\nP _cgpt/1/_w_max 0.0\nP _cgpt/1/_w_now 1.0\nP _cgpt/1/_w_test 0.0\nP _cgpt/1/_z_ref 0.0\nP _cgpt/10/_w_max 0.0\nP _cgpt/10/_w_now 1.0\nP _cgpt/10/_w_test 0.0\nP _cgpt/10/_z_ref 0.0\nP _cgpt/11/_w_max 0.0\nP _cgpt/11/_w_now 1.0\nP _cgpt/11/_w_test 0.0\nP _cgpt/11/_z_ref 0.0\nP _cgpt/12/_w_max 0.0\nP _cgpt/12/_w_now 1.0\nP _cgpt/12/_w_test 0.0\nP _cgpt/12/_z_ref 0.0\nP _cgpt/13/_w_max 0.0\nP _cgpt/13/_w_now 1.0\nP _cgpt/13/_w_test 0.0\nP _cgpt/13/_z_ref 0.0\nP _cgpt/14/_w_max 0.0\nP _cgpt/14/_w_now 1.0\nP _cgpt/14/_w_test 0.0\nP _cgpt/14/_z_ref 0.0\nP _cgpt/15/_w_max 0.0\nP _cgpt/15/_w_now 1.0\nP _cgpt/15/_w_test 0.0\nP _cgpt/15/_z_ref 0.0\nP _cgpt/16/_w_max 0.0\nP _cgpt/16/_w_now 1.0\nP _cgpt/16/_w_test 0.0\nP _cgpt/16/_z_ref 0.0\nP _cgpt/17/_w_max 0.0\nP _cgpt/17/_w_now 1.0\nP _cgpt/17/_w_test 0.0\nP _cgpt/17/_z_ref 0.0\nP _cgpt/18/_w_max 0.0\nP _cgpt/18/_w_now 1.0\nP _cgpt/18/_w_test 0.0\nP _cgpt/18/_z_ref 0.0\nP _cgpt/19/_w_max 0.0\nP _cgpt/19/_w_now 1.0\nP _cgpt/19/_w_test 0.0\nP _cgpt/19/_z_ref 0.0\nP _cgpt/2/_name fuel tank #2\nP _cgpt/2/_w_max 0.0\nP _cgpt/2/_w_now 1.0\nP _cgpt/2/_w_test 0.0\nP _cgpt/2/_z_ref 0.0\nP _cgpt/3/_name fuel tank #3\nP _cgpt/3/_w_max 0.0\nP _cgpt/3/_w_now 1.0\nP _cgpt/3/_w_test 0.0\nP _cgpt/3/_z_ref 0.0\nP _cgpt/4/_name fuel tank #4\nP _cgpt/4/_w_max 0.0\nP _cgpt/4/_w_now 1.0\nP _cgpt/4/_w_test 0.0\nP _cgpt/4/_z_ref 0.0\nP _cgpt/5/_name fuel tank #5\nP _cgpt/5/_w_max 0.0\nP _cgpt/5/_w_now 1.0\nP _cgpt/5/_w_test 0.0\nP _cgpt/5/_z_ref 0.0\nP _cgpt/6/_name fuel tank #6\nP _cgpt/6/_w_max 0.0\nP _cgpt/6/_w_now 1.0\nP _cgpt/6/_w_test 0.0\nP _cgpt/6/_z_ref 0.0\nP _cgpt/7/_name fuel tank #7\nP _cgpt/7/_w_max 0.0\nP _cgpt/7/_w_now 1.0\nP _cgpt/7/_w_test 0.0\nP _cgpt/7/_z_ref 0.0\nP _cgpt/8/_name fuel tank #8\nP _cgpt/8/_w_max 0.0\nP _cgpt/8/_w_now 1.0\nP _cgpt/8/_w_test 0.0\nP _cgpt/8/_z_ref 0.0\nP _cgpt/9/_name fuel tank #9\nP _cgpt/9/_w_max 0.0\nP _cgpt/9/_w_now 1.0\nP _cgpt/9/_w_test 0.0\nP _cgpt/9/_z_ref 0.0\nP _cgpt/count 20\nP _door/0/_type 0\nP _door/1/_type 0\nP _door/10/_type 0\nP _door/11/_type 0\nP _door/12/_type 0\nP _door/13/_type 0\nP _door/14/_type 0\nP _door/15/_type 0\nP _door/16/_type 0\nP _door/17/_type 0\nP _door/18/_type 0\nP _door/19/_type 0\nP _door/2/_type 0\nP _door/3/_type 0\nP _door/4/_type 0\nP _door/5/_type 0\nP _door/6/_type 0\nP _door/7/_type 0\nP _door/8/_type 0\nP _door/9/_type 0\nP _door/count 20\nP _engn/count 8\nP _gear/0/_axiE 0.0\nP _gear/0/_axiN 0.0\nP _gear/0/_axiR 0.0\nP _gear/0/_cyc_time 5.0\nP _gear/0/_damp -nan\nP _gear/0/_dep_rat 1.0\nP _gear/0/_eagle_claw_deg 0.0\nP _gear/0/_gear_brakes 0\nP _gear/0/_gear_can_retract 0\nP _gear/0/_gear_castors 0\nP _gear/0/_gear_def_empty 0.0\nP _gear/0/_gear_def_gross 0.0\nP _gear/0/_gear_load_fraction -nan\nP _gear/0/_gear_type 2\nP _gear/0/_gear_x 0.0\nP _gear/0/_gear_y 0.0\nP _gear/0/_gear_z 0.0\nP _gear/0/_latE 0.0\nP _gear/0/_latN 0.0\nP _gear/0/_latR 0.0\nP _gear/0/_leg_len 0.0\nP _gear/0/_lonE 0.0\nP _gear/0/_lonN 0.0\nP _gear/0/_lonR 0.0\nP _gear/0/_scon -nan\nP _gear/0/_stat_def 0.0\nP _gear/0/_steerdeg_hispeed 0.0\nP _gear/0/_steerdeg_lospeed 0.0\nP _gear/0/_strut_comp 0.0\nP _gear/0/_strut_s1 0.0\nP _gear/0/_strut_s2 0.015625000\nP _gear/0/_strut_t1 0.128906250\nP _gear/0/_strut_t2 0.252929688\nP _gear/0/_tire_mi 0.0\nP _gear/0/_tire_radius 0.0\nP _gear/0/_tire_swidth 0.0\nP _gear/1/_axiE 0.0\nP _gear/1/_axiN 0.0\nP _gear/1/_axiR 0.0\nP _gear/1/_cyc_time 5.0\nP _gear/1/_damp -nan\nP _gear/1/_dep_rat 1.0\nP _gear/1/_eagle_claw_deg 0.0\nP _gear/1/_gear_brakes 0\nP _gear/1/_gear_can_retract 0\nP _gear/1/_gear_castors 0\nP _gear/1/_gear_def_empty 0.0\nP _gear/1/_gear_def_gross 0.0\nP _gear/1/_gear_load_fraction -nan\nP _gear/1/_gear_type 2\nP _gear/1/_gear_x 0.0\nP _gear/1/_gear_y 0.0\nP _gear/1/_gear_z 0.0\nP _gear/1/_latE 0.0\nP _gear/1/_latN 0.0\nP _gear/1/_latR 0.0\nP _gear/1/_leg_len 0.0\nP _gear/1/_lonE 0.0\nP _gear/1/_lonN 0.0\nP _gear/1/_lonR 0.0\nP _gear/1/_scon -nan\nP _gear/1/_stat_def 0.0\nP _gear/1/_steerdeg_hispeed 0.0\nP _gear/1/_steerdeg_lospeed 0.0\nP _gear/1/_strut_comp 0.0\nP _gear/1/_strut_s1 0.0\nP _gear/1/_strut_s2 0.015625000\nP _gear/1/_strut_t1 0.128906250\nP _gear/1/_strut_t2 0.252929688\nP _gear/1/_tire_mi 0.0\nP _gear/1/_tire_radius 0.0\nP _gear/1/_tire_swidth 0.0\nP _gear/2/_axiE 0.0\nP _gear/2/_axiN 0.0\nP _gear/2/_axiR 0.0\nP _gear/2/_cyc_time 5.0\nP _gear/2/_damp -nan\nP _gear/2/_dep_rat 1.0\nP _gear/2/_eagle_claw_deg 0.0\nP _gear/2/_gear_brakes 0\nP _gear/2/_gear_can_retract 0\nP _gear/2/_gear_castors 0\nP _gear/2/_gear_def_empty 0.0\nP _gear/2/_gear_def_gross 0.0\nP _gear/2/_gear_load_fraction -nan\nP _gear/2/_gear_type 2\nP _gear/2/_gear_x 0.0\nP _gear/2/_gear_y 0.0\nP _gear/2/_gear_z 0.0\nP _gear/2/_latE 0.0\nP _gear/2/_latN 0.0\nP _gear/2/_latR 0.0\nP _gear/2/_leg_len 0.0\nP _gear/2/_lonE 0.0\nP _gear/2/_lonN 0.0\nP _gear/2/_lonR 0.0\nP _gear/2/_scon -nan\nP _gear/2/_stat_def 0.0\nP _gear/2/_steerdeg_hispeed 0.0\nP _gear/2/_steerdeg_lospeed 0.0\nP _gear/2/_strut_comp 0.0\nP _gear/2/_strut_s1 0.0\nP _gear/2/_strut_s2 0.015625000\nP _gear/2/_strut_t1 0.128906250\nP _gear/2/_strut_t2 0.252929688\nP _gear/2/_tire_mi 0.0\nP _gear/2/_tire_radius 0.0\nP _gear/2/_tire_swidth 0.0\nP _gear/3/_gear_type 0\nP _gear/4/_gear_type 0\nP _gear/5/_gear_type 0\nP _gear/6/_gear_type 0\nP _gear/7/_gear_type 0\nP _gear/8/_gear_type 0\nP _gear/9/_gear_type 0\nP _gear/count 10\nP _lite/count 0\nP _lite_equip/_land_lite_off_on_retract_EQ 0\nP _lite_equip/_taxi_lite_off_on_retract_EQ 0\nP _obja/count 0\nP _panel_inst_3d 1\nP _part/16/_aero_x_os 0.0\nP _part/16/_aero_y_os 0.0\nP _part/16/_aero_z_os 0.0\nP _part/16/_area_frnt 0.0\nP _part/16/_area_side 0.0\nP _part/16/_area_vert 0.0\nP _part/16/_bot_s1 0.755999982\nP _part/16/_bot_s2 1.0\nP _part/16/_bot_t1 0.509999990\nP _part/16/_bot_t2 0.754000008\nP _part/16/_damp 1.883831739\nP _part/16/_geo_xyz/0,0,0 0.0\nP _part/16/_geo_xyz/0,0,1 12.303149223\nP _part/16/_geo_xyz/0,0,2 32.398292542\nP _part/16/_geo_xyz/0,1,0 0.0\nP _part/16/_geo_xyz/0,1,1 12.332676888\nP _part/16/_geo_xyz/0,1,2 32.447505951\nP _part/16/_geo_xyz/0,10,0 0.0\nP _part/16/_geo_xyz/0,10,1 12.229330063\nP _part/16/_geo_xyz/0,10,2 32.808399200\nP _part/16/_geo_xyz/0,11,0 0.0\nP _part/16/_geo_xyz/0,11,1 12.244093895\nP _part/16/_geo_xyz/0,11,2 32.562335968\nP _part/16/_geo_xyz/0,12,0 0.0\nP _part/16/_geo_xyz/0,12,1 12.273621559\nP _part/16/_geo_xyz/0,12,2 32.447505951\nP _part/16/_geo_xyz/0,13,0 0.0\nP _part/16/_geo_xyz/0,13,1 12.303149223\nP _part/16/_geo_xyz/0,13,2 32.398292542\nP _part/16/_geo_xyz/0,14,0 0.0\nP _part/16/_geo_xyz/0,14,1 0.0\nP _part/16/_geo_xyz/0,14,2 0.0\nP _part/16/_geo_xyz/0,15,0 0.0\nP _part/16/_geo_xyz/0,15,1 0.0\nP _part/16/_geo_xyz/0,15,2 0.0\nP _part/16/_geo_xyz/0,16,0 0.0\nP _part/16/_geo_xyz/0,16,1 0.0\nP _part/16/_geo_xyz/0,16,2 0.0\nP _part/16/_geo_xyz/0,17,0 0.0\nP _part/16/_geo_xyz/0,17,1 0.0\nP _part/16/_geo_xyz/0,17,2 0.0\nP _part/16/_geo_xyz/0,2,0 0.0\nP _part/16/_geo_xyz/0,2,1 12.362204552\nP _part/16/_geo_xyz/0,2,2 32.562335968\nP _part/16/_geo_xyz/0,3,0 0.0\nP _part/16/_geo_xyz/0,3,1 12.376968384\nP _part/16/_geo_xyz/0,3,2 32.808399200\nP _part/16/_geo_xyz/0,4,0 0.0\nP _part/16/_geo_xyz/0,4,1 12.376968384\nP _part/16/_geo_xyz/0,4,2 33.136482239\nP _part/16/_geo_xyz/0,5,0 0.0\nP _part/16/_geo_xyz/0,5,1 12.336703300\nP _part/16/_geo_xyz/0,5,2 33.628608704\nP _part/16/_geo_xyz/0,6,0 0.0\nP _part/16/_geo_xyz/0,6,1 12.303149223\nP _part/16/_geo_xyz/0,6,2 34.038715363\nP _part/16/_geo_xyz/0,7,0 0.0\nP _part/16/_geo_xyz/0,7,1 12.303149223\nP _part/16/_geo_xyz/0,7,2 34.038715363\nP _part/16/_geo_xyz/0,8,0 0.0\nP _part/16/_geo_xyz/0,8,1 12.269595146\nP _part/16/_geo_xyz/0,8,2 33.628608704\nP _part/16/_geo_xyz/0,9,0 0.0\nP _part/16/_geo_xyz/0,9,1 12.229330063\nP _part/16/_geo_xyz/0,9,2 33.136482239\nP _part/16/_geo_xyz/1,0,0 -4.101049900\nP _part/16/_geo_xyz/1,0,1 12.303149223\nP _part/16/_geo_xyz/1,0,2 32.398292542\nP _part/16/_geo_xyz/1,1,0 -4.101049900\nP _part/16/_geo_xyz/1,1,1 12.332676888\nP _part/16/_geo_xyz/1,1,2 32.447505951\nP _part/16/_geo_xyz/1,10,0 -4.101049900\nP _part/16/_geo_xyz/1,10,1 12.229330063\nP _part/16/_geo_xyz/1,10,2 32.808399200\nP _part/16/_geo_xyz/1,11,0 -4.101049900\nP _part/16/_geo_xyz/1,11,1 12.244093895\nP _part/16/_geo_xyz/1,11,2 32.562335968\nP _part/16/_geo_xyz/1,12,0 -4.101049900\nP _part/16/_geo_xyz/1,12,1 12.273621559\nP _part/16/_geo_xyz/1,12,2 32.447505951\nP _part/16/_geo_xyz/1,13,0 -4.101049900\nP _part/16/_geo_xyz/1,13,1 12.303149223\nP _part/16/_geo_xyz/1,13,2 32.398292542\nP _part/16/_geo_xyz/1,14,0 0.0\nP _part/16/_geo_xyz/1,14,1 0.0\nP _part/16/_geo_xyz/1,14,2 0.0\nP _part/16/_geo_xyz/1,15,0 0.0\nP _part/16/_geo_xyz/1,15,1 0.0\nP _part/16/_geo_xyz/1,15,2 0.0\nP _part/16/_geo_xyz/1,16,0 0.0\nP _part/16/_geo_xyz/1,16,1 0.0\nP _part/16/_geo_xyz/1,16,2 0.0\nP _part/16/_geo_xyz/1,17,0 0.0\nP _part/16/_geo_xyz/1,17,1 0.0\nP _part/16/_geo_xyz/1,17,2 0.0\nP _part/16/_geo_xyz/1,2,0 -4.101049900\nP _part/16/_geo_xyz/1,2,1 12.362204552\nP _part/16/_geo_xyz/1,2,2 32.562335968\nP _part/16/_geo_xyz/1,3,0 -4.101049900\nP _part/16/_geo_xyz/1,3,1 12.376968384\nP _part/16/_geo_xyz/1,3,2 32.808399200\nP _part/16/_geo_xyz/1,4,0 -4.101049900\nP _part/16/_geo_xyz/1,4,1 12.376968384\nP _part/16/_geo_xyz/1,4,2 33.136482239\nP _part/16/_geo_xyz/1,5,0 -4.101049900\nP _part/16/_geo_xyz/1,5,1 12.336703300\nP _part/16/_geo_xyz/1,5,2 33.628608704\nP _part/16/_geo_xyz/1,6,0 -4.101049900\nP _part/16/_geo_xyz/1,6,1 12.303149223\nP _part/16/_geo_xyz/1,6,2 34.038715363\nP _part/16/_geo_xyz/1,7,0 -4.101049900\nP _part/16/_geo_xyz/1,7,1 12.303149223\nP _part/16/_geo_xyz/1,7,2 34.038715363\nP _part/16/_geo_xyz/1,8,0 -4.101049900\nP _part/16/_geo_xyz/1,8,1 12.269595146\nP _part/16/_geo_xyz/1,8,2 33.628608704\nP _part/16/_geo_xyz/1,9,0 -4.101049900\nP _part/16/_geo_xyz/1,9,1 12.229330063\nP _part/16/_geo_xyz/1,9,2 33.136482239\nP _part/16/_geo_xyz/10,0,0 0.0\nP _part/16/_geo_xyz/10,0,1 0.0\nP _part/16/_geo_xyz/10,0,2 0.0\nP _part/16/_geo_xyz/10,1,0 0.0\nP _part/16/_geo_xyz/10,1,1 0.0\nP _part/16/_geo_xyz/10,1,2 0.0\nP _part/16/_geo_xyz/10,10,0 0.0\nP _part/16/_geo_xyz/10,10,1 0.0\nP _part/16/_geo_xyz/10,10,2 0.0\nP _part/16/_geo_xyz/10,11,0 0.0\nP _part/16/_geo_xyz/10,11,1 0.0\nP _part/16/_geo_xyz/10,11,2 0.0\nP _part/16/_geo_xyz/10,12,0 0.0\nP _part/16/_geo_xyz/10,12,1 0.0\nP _part/16/_geo_xyz/10,12,2 0.0\nP _part/16/_geo_xyz/10,13,0 0.0\nP _part/16/_geo_xyz/10,13,1 0.0\nP _part/16/_geo_xyz/10,13,2 0.0\nP _part/16/_geo_xyz/10,14,0 0.0\nP _part/16/_geo_xyz/10,14,1 0.0\nP _part/16/_geo_xyz/10,14,2 0.0\nP _part/16/_geo_xyz/10,15,0 0.0\nP _part/16/_geo_xyz/10,15,1 0.0\nP _part/16/_geo_xyz/10,15,2 0.0\nP _part/16/_geo_xyz/10,16,0 0.0\nP _part/16/_geo_xyz/10,16,1 0.0\nP _part/16/_geo_xyz/10,16,2 0.0\nP _part/16/_geo_xyz/10,17,0 0.0\nP _part/16/_geo_xyz/10,17,1 0.0\nP _part/16/_geo_xyz/10,17,2 0.0\nP _part/16/_geo_xyz/10,2,0 0.0\nP _part/16/_geo_xyz/10,2,1 0.0\nP _part/16/_geo_xyz/10,2,2 0.0\nP _part/16/_geo_xyz/10,3,0 0.0\nP _part/16/_geo_xyz/10,3,1 0.0\nP _part/16/_geo_xyz/10,3,2 0.0\nP _part/16/_geo_xyz/10,4,0 0.0\nP _part/16/_geo_xyz/10,4,1 0.0\nP _part/16/_geo_xyz/10,4,2 0.0\nP _part/16/_geo_xyz/10,5,0 0.0\nP _part/16/_geo_xyz/10,5,1 0.0\nP _part/16/_geo_xyz/10,5,2 0.0\nP _part/16/_geo_xyz/10,6,0 0.0\nP _part/16/_geo_xyz/10,6,1 0.0\nP _part/16/_geo_xyz/10,6,2 0.0\nP _part/16/_geo_xyz/10,7,0 0.0\nP _part/16/_geo_xyz/10,7,1 0.0\nP _part/16/_geo_xyz/10,7,2 0.0\nP _part/16/_geo_xyz/10,8,0 0.0\nP _part/16/_geo_xyz/10,8,1 0.0\nP _part/16/_geo_xyz/10,8,2 0.0\nP _part/16/_geo_xyz/10,9,0 0.0\nP _part/16/_geo_xyz/10,9,1 0.0\nP _part/16/_geo_xyz/10,9,2 0.0\nP _part/16/_geo_xyz/11,0,0 0.0\nP _part/16/_geo_xyz/11,0,1 0.0\nP _part/16/_geo_xyz/11,0,2 0.0\nP _part/16/_geo_xyz/11,1,0 0.0\nP _part/16/_geo_xyz/11,1,1 0.0\nP _part/16/_geo_xyz/11,1,2 0.0\nP _part/16/_geo_xyz/11,10,0 0.0\nP _part/16/_geo_xyz/11,10,1 0.0\nP _part/16/_geo_xyz/11,10,2 0.0\nP _part/16/_geo_xyz/11,11,0 0.0\nP _part/16/_geo_xyz/11,11,1 0.0\nP _part/16/_geo_xyz/11,11,2 0.0\nP _part/16/_geo_xyz/11,12,0 0.0\nP _part/16/_geo_xyz/11,12,1 0.0\nP _part/16/_geo_xyz/11,12,2 0.0\nP _part/16/_geo_xyz/11,13,0 0.0\nP _part/16/_geo_xyz/11,13,1 0.0\nP _part/16/_geo_xyz/11,13,2 0.0\nP _part/16/_geo_xyz/11,14,0 0.0\nP _part/16/_geo_xyz/11,14,1 0.0\nP _part/16/_geo_xyz/11,14,2 0.0\nP _part/16/_geo_xyz/11,15,0 0.0\nP _part/16/_geo_xyz/11,15,1 0.0\nP _part/16/_geo_xyz/11,15,2 0.0\nP _part/16/_geo_xyz/11,16,0 0.0\nP _part/16/_geo_xyz/11,16,1 0.0\nP _part/16/_geo_xyz/11,16,2 0.0\nP _part/16/_geo_xyz/11,17,0 0.0\nP _part/16/_geo_xyz/11,17,1 0.0\nP _part/16/_geo_xyz/11,17,2 0.0\nP _part/16/_geo_xyz/11,2,0 0.0\nP _part/16/_geo_xyz/11,2,1 0.0\nP _part/16/_geo_xyz/11,2,2 0.0\nP _part/16/_geo_xyz/11,3,0 0.0\nP _part/16/_geo_xyz/11,3,1 0.0\nP _part/16/_geo_xyz/11,3,2 0.0\nP _part/16/_geo_xyz/11,4,0 0.0\nP _part/16/_geo_xyz/11,4,1 0.0\nP _part/16/_geo_xyz/11,4,2 0.0\nP _part/16/_geo_xyz/11,5,0 0.0\nP _part/16/_geo_xyz/11,5,1 0.0\nP _part/16/_geo_xyz/11,5,2 0.0\nP _part/16/_geo_xyz/11,6,0 0.0\nP _part/16/_geo_xyz/11,6,1 0.0\nP _part/16/_geo_xyz/11,6,2 0.0\nP _part/16/_geo_xyz/11,7,0 0.0\nP _part/16/_geo_xyz/11,7,1 0.0\nP _part/16/_geo_xyz/11,7,2 0.0\nP _part/16/_geo_xyz/11,8,0 0.0\nP _part/16/_geo_xyz/11,8,1 0.0\nP _part/16/_geo_xyz/11,8,2 0.0\nP _part/16/_geo_xyz/11,9,0 0.0\nP _part/16/_geo_xyz/11,9,1 0.0\nP _part/16/_geo_xyz/11,9,2 0.0\nP _part/16/_geo_xyz/12,0,0 0.0\nP _part/16/_geo_xyz/12,0,1 0.0\nP _part/16/_geo_xyz/12,0,2 0.0\nP _part/16/_geo_xyz/12,1,0 0.0\nP _part/16/_geo_xyz/12,1,1 0.0\nP _part/16/_geo_xyz/12,1,2 0.0\nP _part/16/_geo_xyz/12,10,0 0.0\nP _part/16/_geo_xyz/12,10,1 0.0\nP _part/16/_geo_xyz/12,10,2 0.0\nP _part/16/_geo_xyz/12,11,0 0.0\nP _part/16/_geo_xyz/12,11,1 0.0\nP _part/16/_geo_xyz/12,11,2 0.0\nP _part/16/_geo_xyz/12,12,0 0.0\nP _part/16/_geo_xyz/12,12,1 0.0\nP _part/16/_geo_xyz/12,12,2 0.0\nP _part/16/_geo_xyz/12,13,0 0.0\nP _part/16/_geo_xyz/12,13,1 0.0\nP _part/16/_geo_xyz/12,13,2 0.0\nP _part/16/_geo_xyz/12,14,0 0.0\nP _part/16/_geo_xyz/12,14,1 0.0\nP _part/16/_geo_xyz/12,14,2 0.0\nP _part/16/_geo_xyz/12,15,0 0.0\nP _part/16/_geo_xyz/12,15,1 0.0\nP _part/16/_geo_xyz/12,15,2 0.0\nP _part/16/_geo_xyz/12,16,0 0.0\nP _part/16/_geo_xyz/12,16,1 0.0\nP _part/16/_geo_xyz/12,16,2 0.0\nP _part/16/_geo_xyz/12,17,0 0.0\nP _part/16/_geo_xyz/12,17,1 0.0\nP _part/16/_geo_xyz/12,17,2 0.0\nP _part/16/_geo_xyz/12,2,0 0.0\nP _part/16/_geo_xyz/12,2,1 0.0\nP _part/16/_geo_xyz/12,2,2 0.0\nP _part/16/_geo_xyz/12,3,0 0.0\nP _part/16/_geo_xyz/12,3,1 0.0\nP _part/16/_geo_xyz/12,3,2 0.0\nP _part/16/_geo_xyz/12,4,0 0.0\nP _part/16/_geo_xyz/12,4,1 0.0\nP _part/16/_geo_xyz/12,4,2 0.0\nP _part/16/_geo_xyz/12,5,0 0.0\nP _part/16/_geo_xyz/12,5,1 0.0\nP _part/16/_geo_xyz/12,5,2 0.0\nP _part/16/_geo_xyz/12,6,0 0.0\nP _part/16/_geo_xyz/12,6,1 0.0\nP _part/16/_geo_xyz/12,6,2 0.0\nP _part/16/_geo_xyz/12,7,0 0.0\nP _part/16/_geo_xyz/12,7,1 0.0\nP _part/16/_geo_xyz/12,7,2 0.0\nP _part/16/_geo_xyz/12,8,0 0.0\nP _part/16/_geo_xyz/12,8,1 0.0\nP _part/16/_geo_xyz/12,8,2 0.0\nP _part/16/_geo_xyz/12,9,0 0.0\nP _part/16/_geo_xyz/12,9,1 0.0\nP _part/16/_geo_xyz/12,9,2 0.0\nP _part/16/_geo_xyz/13,0,0 0.0\nP _part/16/_geo_xyz/13,0,1 0.0\nP _part/16/_geo_xyz/13,0,2 0.0\nP _part/16/_geo_xyz/13,1,0 0.0\nP _part/16/_geo_xyz/13,1,1 0.0\nP _part/16/_geo_xyz/13,1,2 0.0\nP _part/16/_geo_xyz/13,10,0 0.0\nP _part/16/_geo_xyz/13,10,1 0.0\nP _part/16/_geo_xyz/13,10,2 0.0\nP _part/16/_geo_xyz/13,11,0 0.0\nP _part/16/_geo_xyz/13,11,1 0.0\nP _part/16/_geo_xyz/13,11,2 0.0\nP _part/16/_geo_xyz/13,12,0 0.0\nP _part/16/_geo_xyz/13,12,1 0.0\nP _part/16/_geo_xyz/13,12,2 0.0\nP _part/16/_geo_xyz/13,13,0 0.0\nP _part/16/_geo_xyz/13,13,1 0.0\nP _part/16/_geo_xyz/13,13,2 0.0\nP _part/16/_geo_xyz/13,14,0 0.0\nP _part/16/_geo_xyz/13,14,1 0.0\nP _part/16/_geo_xyz/13,14,2 0.0\nP _part/16/_geo_xyz/13,15,0 0.0\nP _part/16/_geo_xyz/13,15,1 0.0\nP _part/16/_geo_xyz/13,15,2 0.0\nP _part/16/_geo_xyz/13,16,0 0.0\nP _part/16/_geo_xyz/13,16,1 0.0\nP _part/16/_geo_xyz/13,16,2 0.0\nP _part/16/_geo_xyz/13,17,0 0.0\nP _part/16/_geo_xyz/13,17,1 0.0\nP _part/16/_geo_xyz/13,17,2 0.0\nP _part/16/_geo_xyz/13,2,0 0.0\nP _part/16/_geo_xyz/13,2,1 0.0\nP _part/16/_geo_xyz/13,2,2 0.0\nP _part/16/_geo_xyz/13,3,0 0.0\nP _part/16/_geo_xyz/13,3,1 0.0\nP _part/16/_geo_xyz/13,3,2 0.0\nP _part/16/_geo_xyz/13,4,0 0.0\nP _part/16/_geo_xyz/13,4,1 0.0\nP _part/16/_geo_xyz/13,4,2 0.0\nP _part/16/_geo_xyz/13,5,0 0.0\nP _part/16/_geo_xyz/13,5,1 0.0\nP _part/16/_geo_xyz/13,5,2 0.0\nP _part/16/_geo_xyz/13,6,0 0.0\nP _part/16/_geo_xyz/13,6,1 0.0\nP _part/16/_geo_xyz/13,6,2 0.0\nP _part/16/_geo_xyz/13,7,0 0.0\nP _part/16/_geo_xyz/13,7,1 0.0\nP _part/16/_geo_xyz/13,7,2 0.0\nP _part/16/_geo_xyz/13,8,0 0.0\nP _part/16/_geo_xyz/13,8,1 0.0\nP _part/16/_geo_xyz/13,8,2 0.0\nP _part/16/_geo_xyz/13,9,0 0.0\nP _part/16/_geo_xyz/13,9,1 0.0\nP _part/16/_geo_xyz/13,9,2 0.0\nP _part/16/_geo_xyz/14,0,0 0.0\nP _part/16/_geo_xyz/14,0,1 0.0\nP _part/16/_geo_xyz/14,0,2 0.0\nP _part/16/_geo_xyz/14,1,0 0.0\nP _part/16/_geo_xyz/14,1,1 0.0\nP _part/16/_geo_xyz/14,1,2 0.0\nP _part/16/_geo_xyz/14,10,0 0.0\nP _part/16/_geo_xyz/14,10,1 0.0\nP _part/16/_geo_xyz/14,10,2 0.0\nP _part/16/_geo_xyz/14,11,0 0.0\nP _part/16/_geo_xyz/14,11,1 0.0\nP _part/16/_geo_xyz/14,11,2 0.0\nP _part/16/_geo_xyz/14,12,0 0.0\nP _part/16/_geo_xyz/14,12,1 0.0\nP _part/16/_geo_xyz/14,12,2 0.0\nP _part/16/_geo_xyz/14,13,0 0.0\nP _part/16/_geo_xyz/14,13,1 0.0\nP _part/16/_geo_xyz/14,13,2 0.0\nP _part/16/_geo_xyz/14,14,0 0.0\nP _part/16/_geo_xyz/14,14,1 0.0\nP _part/16/_geo_xyz/14,14,2 0.0\nP _part/16/_geo_xyz/14,15,0 0.0\nP _part/16/_geo_xyz/14,15,1 0.0\nP _part/16/_geo_xyz/14,15,2 0.0\nP _part/16/_geo_xyz/14,16,0 0.0\nP _part/16/_geo_xyz/14,16,1 0.0\nP _part/16/_geo_xyz/14,16,2 0.0\nP _part/16/_geo_xyz/14,17,0 0.0\nP _part/16/_geo_xyz/14,17,1 0.0\nP _part/16/_geo_xyz/14,17,2 0.0\nP _part/16/_geo_xyz/14,2,0 0.0\nP _part/16/_geo_xyz/14,2,1 0.0\nP _part/16/_geo_xyz/14,2,2 0.0\nP _part/16/_geo_xyz/14,3,0 0.0\nP _part/16/_geo_xyz/14,3,1 0.0\nP _part/16/_geo_xyz/14,3,2 0.0\nP _part/16/_geo_xyz/14,4,0 0.0\nP _part/16/_geo_xyz/14,4,1 0.0\nP _part/16/_geo_xyz/14,4,2 0.0\nP _part/16/_geo_xyz/14,5,0 0.0\nP _part/16/_geo_xyz/14,5,1 0.0\nP _part/16/_geo_xyz/14,5,2 0.0\nP _part/16/_geo_xyz/14,6,0 0.0\nP _part/16/_geo_xyz/14,6,1 0.0\nP _part/16/_geo_xyz/14,6,2 0.0\nP _part/16/_geo_xyz/14,7,0 0.0\nP _part/16/_geo_xyz/14,7,1 0.0\nP _part/16/_geo_xyz/14,7,2 0.0\nP _part/16/_geo_xyz/14,8,0 0.0\nP _part/16/_geo_xyz/14,8,1 0.0\nP _part/16/_geo_xyz/14,8,2 0.0\nP _part/16/_geo_xyz/14,9,0 0.0\nP _part/16/_geo_xyz/14,9,1 0.0\nP _part/16/_geo_xyz/14,9,2 0.0\nP _part/16/_geo_xyz/15,0,0 0.0\nP _part/16/_geo_xyz/15,0,1 0.0\nP _part/16/_geo_xyz/15,0,2 0.0\nP _part/16/_geo_xyz/15,1,0 0.0\nP _part/16/_geo_xyz/15,1,1 0.0\nP _part/16/_geo_xyz/15,1,2 0.0\nP _part/16/_geo_xyz/15,10,0 0.0\nP _part/16/_geo_xyz/15,10,1 0.0\nP _part/16/_geo_xyz/15,10,2 0.0\nP _part/16/_geo_xyz/15,11,0 0.0\nP _part/16/_geo_xyz/15,11,1 0.0\nP _part/16/_geo_xyz/15,11,2 0.0\nP _part/16/_geo_xyz/15,12,0 0.0\nP _part/16/_geo_xyz/15,12,1 0.0\nP _part/16/_geo_xyz/15,12,2 0.0\nP _part/16/_geo_xyz/15,13,0 0.0\nP _part/16/_geo_xyz/15,13,1 0.0\nP _part/16/_geo_xyz/15,13,2 0.0\nP _part/16/_geo_xyz/15,14,0 0.0\nP _part/16/_geo_xyz/15,14,1 0.0\nP _part/16/_geo_xyz/15,14,2 0.0\nP _part/16/_geo_xyz/15,15,0 0.0\nP _part/16/_geo_xyz/15,15,1 0.0\nP _part/16/_geo_xyz/15,15,2 0.0\nP _part/16/_geo_xyz/15,16,0 0.0\nP _part/16/_geo_xyz/15,16,1 0.0\nP _part/16/_geo_xyz/15,16,2 0.0\nP _part/16/_geo_xyz/15,17,0 0.0\nP _part/16/_geo_xyz/15,17,1 0.0\nP _part/16/_geo_xyz/15,17,2 0.0\nP _part/16/_geo_xyz/15,2,0 0.0\nP _part/16/_geo_xyz/15,2,1 0.0\nP _part/16/_geo_xyz/15,2,2 0.0\nP _part/16/_geo_xyz/15,3,0 0.0\nP _part/16/_geo_xyz/15,3,1 0.0\nP _part/16/_geo_xyz/15,3,2 0.0\nP _part/16/_geo_xyz/15,4,0 0.0\nP _part/16/_geo_xyz/15,4,1 0.0\nP _part/16/_geo_xyz/15,4,2 0.0\nP _part/16/_geo_xyz/15,5,0 0.0\nP _part/16/_geo_xyz/15,5,1 0.0\nP _part/16/_geo_xyz/15,5,2 0.0\nP _part/16/_geo_xyz/15,6,0 0.0\nP _part/16/_geo_xyz/15,6,1 0.0\nP _part/16/_geo_xyz/15,6,2 0.0\nP _part/16/_geo_xyz/15,7,0 0.0\nP _part/16/_geo_xyz/15,7,1 0.0\nP _part/16/_geo_xyz/15,7,2 0.0\nP _part/16/_geo_xyz/15,8,0 0.0\nP _part/16/_geo_xyz/15,8,1 0.0\nP _part/16/_geo_xyz/15,8,2 0.0\nP _part/16/_geo_xyz/15,9,0 0.0\nP _part/16/_geo_xyz/15,9,1 0.0\nP _part/16/_geo_xyz/15,9,2 0.0\nP _part/16/_geo_xyz/16,0,0 0.0\nP _part/16/_geo_xyz/16,0,1 0.0\nP _part/16/_geo_xyz/16,0,2 0.0\nP _part/16/_geo_xyz/16,1,0 0.0\nP _part/16/_geo_xyz/16,1,1 0.0\nP _part/16/_geo_xyz/16,1,2 0.0\nP _part/16/_geo_xyz/16,10,0 0.0\nP _part/16/_geo_xyz/16,10,1 0.0\nP _part/16/_geo_xyz/16,10,2 0.0\nP _part/16/_geo_xyz/16,11,0 0.0\nP _part/16/_geo_xyz/16,11,1 0.0\nP _part/16/_geo_xyz/16,11,2 0.0\nP _part/16/_geo_xyz/16,12,0 0.0\nP _part/16/_geo_xyz/16,12,1 0.0\nP _part/16/_geo_xyz/16,12,2 0.0\nP _part/16/_geo_xyz/16,13,0 0.0\nP _part/16/_geo_xyz/16,13,1 0.0\nP _part/16/_geo_xyz/16,13,2 0.0\nP _part/16/_geo_xyz/16,14,0 0.0\nP _part/16/_geo_xyz/16,14,1 0.0\nP _part/16/_geo_xyz/16,14,2 0.0\nP _part/16/_geo_xyz/16,15,0 0.0\nP _part/16/_geo_xyz/16,15,1 0.0\nP _part/16/_geo_xyz/16,15,2 0.0\nP _part/16/_geo_xyz/16,16,0 0.0\nP _part/16/_geo_xyz/16,16,1 0.0\nP _part/16/_geo_xyz/16,16,2 0.0\nP _part/16/_geo_xyz/16,17,0 0.0\nP _part/16/_geo_xyz/16,17,1 0.0\nP _part/16/_geo_xyz/16,17,2 0.0\nP _part/16/_geo_xyz/16,2,0 0.0\nP _part/16/_geo_xyz/16,2,1 0.0\nP _part/16/_geo_xyz/16,2,2 0.0\nP _part/16/_geo_xyz/16,3,0 0.0\nP _part/16/_geo_xyz/16,3,1 0.0\nP _part/16/_geo_xyz/16,3,2 0.0\nP _part/16/_geo_xyz/16,4,0 0.0\nP _part/16/_geo_xyz/16,4,1 0.0\nP _part/16/_geo_xyz/16,4,2 0.0\nP _part/16/_geo_xyz/16,5,0 0.0\nP _part/16/_geo_xyz/16,5,1 0.0\nP _part/16/_geo_xyz/16,5,2 0.0\nP _part/16/_geo_xyz/16,6,0 0.0\nP _part/16/_geo_xyz/16,6,1 0.0\nP _part/16/_geo_xyz/16,6,2 0.0\nP _part/16/_geo_xyz/16,7,0 0.0\nP _part/16/_geo_xyz/16,7,1 0.0\nP _part/16/_geo_xyz/16,7,2 0.0\nP _part/16/_geo_xyz/16,8,0 0.0\nP _part/16/_geo_xyz/16,8,1 0.0\nP _part/16/_geo_xyz/16,8,2 0.0\nP _part/16/_geo_xyz/16,9,0 0.0\nP _part/16/_geo_xyz/16,9,1 0.0\nP _part/16/_geo_xyz/16,9,2 0.0\nP _part/16/_geo_xyz/17,0,0 0.0\nP _part/16/_geo_xyz/17,0,1 0.0\nP _part/16/_geo_xyz/17,0,2 0.0\nP _part/16/_geo_xyz/17,1,0 0.0\nP _part/16/_geo_xyz/17,1,1 0.0\nP _part/16/_geo_xyz/17,1,2 0.0\nP _part/16/_geo_xyz/17,10,0 0.0\nP _part/16/_geo_xyz/17,10,1 0.0\nP _part/16/_geo_xyz/17,10,2 0.0\nP _part/16/_geo_xyz/17,11,0 0.0\nP _part/16/_geo_xyz/17,11,1 0.0\nP _part/16/_geo_xyz/17,11,2 0.0\nP _part/16/_geo_xyz/17,12,0 0.0\nP _part/16/_geo_xyz/17,12,1 0.0\nP _part/16/_geo_xyz/17,12,2 0.0\nP _part/16/_geo_xyz/17,13,0 0.0\nP _part/16/_geo_xyz/17,13,1 0.0\nP _part/16/_geo_xyz/17,13,2 0.0\nP _part/16/_geo_xyz/17,14,0 0.0\nP _part/16/_geo_xyz/17,14,1 0.0\nP _part/16/_geo_xyz/17,14,2 0.0\nP _part/16/_geo_xyz/17,15,0 0.0\nP _part/16/_geo_xyz/17,15,1 0.0\nP _part/16/_geo_xyz/17,15,2 0.0\nP _part/16/_geo_xyz/17,16,0 0.0\nP _part/16/_geo_xyz/17,16,1 0.0\nP _part/16/_geo_xyz/17,16,2 0.0\nP _part/16/_geo_xyz/17,17,0 0.0\nP _part/16/_geo_xyz/17,17,1 0.0\nP _part/16/_geo_xyz/17,17,2 0.0\nP _part/16/_geo_xyz/17,2,0 0.0\nP _part/16/_geo_xyz/17,2,1 0.0\nP _part/16/_geo_xyz/17,2,2 0.0\nP _part/16/_geo_xyz/17,3,0 0.0\nP _part/16/_geo_xyz/17,3,1 0.0\nP _part/16/_geo_xyz/17,3,2 0.0\nP _part/16/_geo_xyz/17,4,0 0.0\nP _part/16/_geo_xyz/17,4,1 0.0\nP _part/16/_geo_xyz/17,4,2 0.0\nP _part/16/_geo_xyz/17,5,0 0.0\nP _part/16/_geo_xyz/17,5,1 0.0\nP _part/16/_geo_xyz/17,5,2 0.0\nP _part/16/_geo_xyz/17,6,0 0.0\nP _part/16/_geo_xyz/17,6,1 0.0\nP _part/16/_geo_xyz/17,6,2 0.0\nP _part/16/_geo_xyz/17,7,0 0.0\nP _part/16/_geo_xyz/17,7,1 0.0\nP _part/16/_geo_xyz/17,7,2 0.0\nP _part/16/_geo_xyz/17,8,0 0.0\nP _part/16/_geo_xyz/17,8,1 0.0\nP _part/16/_geo_xyz/17,8,2 0.0\nP _part/16/_geo_xyz/17,9,0 0.0\nP _part/16/_geo_xyz/17,9,1 0.0\nP _part/16/_geo_xyz/17,9,2 0.0\nP _part/16/_geo_xyz/18,0,0 0.0\nP _part/16/_geo_xyz/18,0,1 0.0\nP _part/16/_geo_xyz/18,0,2 0.0\nP _part/16/_geo_xyz/18,1,0 0.0\nP _part/16/_geo_xyz/18,1,1 0.0\nP _part/16/_geo_xyz/18,1,2 0.0\nP _part/16/_geo_xyz/18,10,0 0.0\nP _part/16/_geo_xyz/18,10,1 0.0\nP _part/16/_geo_xyz/18,10,2 0.0\nP _part/16/_geo_xyz/18,11,0 0.0\nP _part/16/_geo_xyz/18,11,1 0.0\nP _part/16/_geo_xyz/18,11,2 0.0\nP _part/16/_geo_xyz/18,12,0 0.0\nP _part/16/_geo_xyz/18,12,1 0.0\nP _part/16/_geo_xyz/18,12,2 0.0\nP _part/16/_geo_xyz/18,13,0 0.0\nP _part/16/_geo_xyz/18,13,1 0.0\nP _part/16/_geo_xyz/18,13,2 0.0\nP _part/16/_geo_xyz/18,14,0 0.0\nP _part/16/_geo_xyz/18,14,1 0.0\nP _part/16/_geo_xyz/18,14,2 0.0\nP _part/16/_geo_xyz/18,15,0 0.0\nP _part/16/_geo_xyz/18,15,1 0.0\nP _part/16/_geo_xyz/18,15,2 0.0\nP _part/16/_geo_xyz/18,16,0 0.0\nP _part/16/_geo_xyz/18,16,1 0.0\nP _part/16/_geo_xyz/18,16,2 0.0\nP _part/16/_geo_xyz/18,17,0 0.0\nP _part/16/_geo_xyz/18,17,1 0.0\nP _part/16/_geo_xyz/18,17,2 0.0\nP _part/16/_geo_xyz/18,2,0 0.0\nP _part/16/_geo_xyz/18,2,1 0.0\nP _part/16/_geo_xyz/18,2,2 0.0\nP _part/16/_geo_xyz/18,3,0 0.0\nP _part/16/_geo_xyz/18,3,1 0.0\nP _part/16/_geo_xyz/18,3,2 0.0\nP _part/16/_geo_xyz/18,4,0 0.0\nP _part/16/_geo_xyz/18,4,1 0.0\nP _part/16/_geo_xyz/18,4,2 0.0\nP _part/16/_geo_xyz/18,5,0 0.0\nP _part/16/_geo_xyz/18,5,1 0.0\nP _part/16/_geo_xyz/18,5,2 0.0\nP _part/16/_geo_xyz/18,6,0 0.0\nP _part/16/_geo_xyz/18,6,1 0.0\nP _part/16/_geo_xyz/18,6,2 0.0\nP _part/16/_geo_xyz/18,7,0 0.0\nP _part/16/_geo_xyz/18,7,1 0.0\nP _part/16/_geo_xyz/18,7,2 0.0\nP _part/16/_geo_xyz/18,8,0 0.0\nP _part/16/_geo_xyz/18,8,1 0.0\nP _part/16/_geo_xyz/18,8,2 0.0\nP _part/16/_geo_xyz/18,9,0 0.0\nP _part/16/_geo_xyz/18,9,1 0.0\nP _part/16/_geo_xyz/18,9,2 0.0\nP _part/16/_geo_xyz/19,0,0 0.0\nP _part/16/_geo_xyz/19,0,1 0.0\nP _part/16/_geo_xyz/19,0,2 0.0\nP _part/16/_geo_xyz/19,1,0 0.0\nP _part/16/_geo_xyz/19,1,1 0.0\nP _part/16/_geo_xyz/19,1,2 0.0\nP _part/16/_geo_xyz/19,10,0 0.0\nP _part/16/_geo_xyz/19,10,1 0.0\nP _part/16/_geo_xyz/19,10,2 0.0\nP _part/16/_geo_xyz/19,11,0 0.0\nP _part/16/_geo_xyz/19,11,1 0.0\nP _part/16/_geo_xyz/19,11,2 0.0\nP _part/16/_geo_xyz/19,12,0 0.0\nP _part/16/_geo_xyz/19,12,1 0.0\nP _part/16/_geo_xyz/19,12,2 0.0\nP _part/16/_geo_xyz/19,13,0 0.0\nP _part/16/_geo_xyz/19,13,1 0.0\nP _part/16/_geo_xyz/19,13,2 0.0\nP _part/16/_geo_xyz/19,14,0 0.0\nP _part/16/_geo_xyz/19,14,1 0.0\nP _part/16/_geo_xyz/19,14,2 0.0\nP _part/16/_geo_xyz/19,15,0 0.0\nP _part/16/_geo_xyz/19,15,1 0.0\nP _part/16/_geo_xyz/19,15,2 0.0\nP _part/16/_geo_xyz/19,16,0 0.0\nP _part/16/_geo_xyz/19,16,1 0.0\nP _part/16/_geo_xyz/19,16,2 0.0\nP _part/16/_geo_xyz/19,17,0 0.0\nP _part/16/_geo_xyz/19,17,1 0.0\nP _part/16/_geo_xyz/19,17,2 0.0\nP _part/16/_geo_xyz/19,2,0 0.0\nP _part/16/_geo_xyz/19,2,1 0.0\nP _part/16/_geo_xyz/19,2,2 0.0\nP _part/16/_geo_xyz/19,3,0 0.0\nP _part/16/_geo_xyz/19,3,1 0.0\nP _part/16/_geo_xyz/19,3,2 0.0\nP _part/16/_geo_xyz/19,4,0 0.0\nP _part/16/_geo_xyz/19,4,1 0.0\nP _part/16/_geo_xyz/19,4,2 0.0\nP _part/16/_geo_xyz/19,5,0 0.0\nP _part/16/_geo_xyz/19,5,1 0.0\nP _part/16/_geo_xyz/19,5,2 0.0\nP _part/16/_geo_xyz/19,6,0 0.0\nP _part/16/_geo_xyz/19,6,1 0.0\nP _part/16/_geo_xyz/19,6,2 0.0\nP _part/16/_geo_xyz/19,7,0 0.0\nP _part/16/_geo_xyz/19,7,1 0.0\nP _part/16/_geo_xyz/19,7,2 0.0\nP _part/16/_geo_xyz/19,8,0 0.0\nP _part/16/_geo_xyz/19,8,1 0.0\nP _part/16/_geo_xyz/19,8,2 0.0\nP _part/16/_geo_xyz/19,9,0 0.0\nP _part/16/_geo_xyz/19,9,1 0.0\nP _part/16/_geo_xyz/19,9,2 0.0\nP _part/16/_geo_xyz/2,0,0 -4.101049900\nP _part/16/_geo_xyz/2,0,1 12.303149223\nP _part/16/_geo_xyz/2,0,2 32.398292542\nP _part/16/_geo_xyz/2,1,0 -4.101049900\nP _part/16/_geo_xyz/2,1,1 12.332676888\nP _part/16/_geo_xyz/2,1,2 32.447505951\nP _part/16/_geo_xyz/2,10,0 -4.101049900\nP _part/16/_geo_xyz/2,10,1 12.229330063\nP _part/16/_geo_xyz/2,10,2 32.808399200\nP _part/16/_geo_xyz/2,11,0 -4.101049900\nP _part/16/_geo_xyz/2,11,1 12.244093895\nP _part/16/_geo_xyz/2,11,2 32.562335968\nP _part/16/_geo_xyz/2,12,0 -4.101049900\nP _part/16/_geo_xyz/2,12,1 12.273621559\nP _part/16/_geo_xyz/2,12,2 32.447505951\nP _part/16/_geo_xyz/2,13,0 -4.101049900\nP _part/16/_geo_xyz/2,13,1 12.303149223\nP _part/16/_geo_xyz/2,13,2 32.398292542\nP _part/16/_geo_xyz/2,14,0 0.0\nP _part/16/_geo_xyz/2,14,1 0.0\nP _part/16/_geo_xyz/2,14,2 0.0\nP _part/16/_geo_xyz/2,15,0 0.0\nP _part/16/_geo_xyz/2,15,1 0.0\nP _part/16/_geo_xyz/2,15,2 0.0\nP _part/16/_geo_xyz/2,16,0 0.0\nP _part/16/_geo_xyz/2,16,1 0.0\nP _part/16/_geo_xyz/2,16,2 0.0\nP _part/16/_geo_xyz/2,17,0 0.0\nP _part/16/_geo_xyz/2,17,1 0.0\nP _part/16/_geo_xyz/2,17,2 0.0\nP _part/16/_geo_xyz/2,2,0 -4.101049900\nP _part/16/_geo_xyz/2,2,1 12.362204552\nP _part/16/_geo_xyz/2,2,2 32.562335968\nP _part/16/_geo_xyz/2,3,0 -4.101049900\nP _part/16/_geo_xyz/2,3,1 12.376968384\nP _part/16/_geo_xyz/2,3,2 32.808399200\nP _part/16/_geo_xyz/2,4,0 -4.101049900\nP _part/16/_geo_xyz/2,4,1 12.376968384\nP _part/16/_geo_xyz/2,4,2 33.136482239\nP _part/16/_geo_xyz/2,5,0 -4.101049900\nP _part/16/_geo_xyz/2,5,1 12.336703300\nP _part/16/_geo_xyz/2,5,2 33.628608704\nP _part/16/_geo_xyz/2,6,0 -4.101049900\nP _part/16/_geo_xyz/2,6,1 12.303149223\nP _part/16/_geo_xyz/2,6,2 34.038715363\nP _part/16/_geo_xyz/2,7,0 -4.101049900\nP _part/16/_geo_xyz/2,7,1 12.303149223\nP _part/16/_geo_xyz/2,7,2 34.038715363\nP _part/16/_geo_xyz/2,8,0 -4.101049900\nP _part/16/_geo_xyz/2,8,1 12.269595146\nP _part/16/_geo_xyz/2,8,2 33.628608704\nP _part/16/_geo_xyz/2,9,0 -4.101049900\nP _part/16/_geo_xyz/2,9,1 12.229330063\nP _part/16/_geo_xyz/2,9,2 33.136482239\nP _part/16/_geo_xyz/3,0,0 -8.202099800\nP _part/16/_geo_xyz/3,0,1 12.303149223\nP _part/16/_geo_xyz/3,0,2 32.398292542\nP _part/16/_geo_xyz/3,1,0 -8.202099800\nP _part/16/_geo_xyz/3,1,1 12.332676888\nP _part/16/_geo_xyz/3,1,2 32.447505951\nP _part/16/_geo_xyz/3,10,0 -8.202099800\nP _part/16/_geo_xyz/3,10,1 12.229330063\nP _part/16/_geo_xyz/3,10,2 32.808399200\nP _part/16/_geo_xyz/3,11,0 -8.202099800\nP _part/16/_geo_xyz/3,11,1 12.244093895\nP _part/16/_geo_xyz/3,11,2 32.562335968\nP _part/16/_geo_xyz/3,12,0 -8.202099800\nP _part/16/_geo_xyz/3,12,1 12.273621559\nP _part/16/_geo_xyz/3,12,2 32.447505951\nP _part/16/_geo_xyz/3,13,0 -8.202099800\nP _part/16/_geo_xyz/3,13,1 12.303149223\nP _part/16/_geo_xyz/3,13,2 32.398292542\nP _part/16/_geo_xyz/3,14,0 0.0\nP _part/16/_geo_xyz/3,14,1 0.0\nP _part/16/_geo_xyz/3,14,2 0.0\nP _part/16/_geo_xyz/3,15,0 0.0\nP _part/16/_geo_xyz/3,15,1 0.0\nP _part/16/_geo_xyz/3,15,2 0.0\nP _part/16/_geo_xyz/3,16,0 0.0\nP _part/16/_geo_xyz/3,16,1 0.0\nP _part/16/_geo_xyz/3,16,2 0.0\nP _part/16/_geo_xyz/3,17,0 0.0\nP _part/16/_geo_xyz/3,17,1 0.0\nP _part/16/_geo_xyz/3,17,2 0.0\nP _part/16/_geo_xyz/3,2,0 -8.202099800\nP _part/16/_geo_xyz/3,2,1 12.362204552\nP _part/16/_geo_xyz/3,2,2 32.562335968\nP _part/16/_geo_xyz/3,3,0 -8.202099800\nP _part/16/_geo_xyz/3,3,1 12.376968384\nP _part/16/_geo_xyz/3,3,2 32.808399200\nP _part/16/_geo_xyz/3,4,0 -8.202099800\nP _part/16/_geo_xyz/3,4,1 12.376968384\nP _part/16/_geo_xyz/3,4,2 33.136482239\nP _part/16/_geo_xyz/3,5,0 -8.202099800\nP _part/16/_geo_xyz/3,5,1 12.336703300\nP _part/16/_geo_xyz/3,5,2 33.628608704\nP _part/16/_geo_xyz/3,6,0 -8.202099800\nP _part/16/_geo_xyz/3,6,1 12.303149223\nP _part/16/_geo_xyz/3,6,2 34.038715363\nP _part/16/_geo_xyz/3,7,0 -8.202099800\nP _part/16/_geo_xyz/3,7,1 12.303149223\nP _part/16/_geo_xyz/3,7,2 34.038715363\nP _part/16/_geo_xyz/3,8,0 -8.202099800\nP _part/16/_geo_xyz/3,8,1 12.269595146\nP _part/16/_geo_xyz/3,8,2 33.628608704\nP _part/16/_geo_xyz/3,9,0 -8.202099800\nP _part/16/_geo_xyz/3,9,1 12.229330063\nP _part/16/_geo_xyz/3,9,2 33.136482239\nP _part/16/_geo_xyz/4,0,0 -8.202099800\nP _part/16/_geo_xyz/4,0,1 12.303149223\nP _part/16/_geo_xyz/4,0,2 32.398292542\nP _part/16/_geo_xyz/4,1,0 -8.202099800\nP _part/16/_geo_xyz/4,1,1 12.332676888\nP _part/16/_geo_xyz/4,1,2 32.447505951\nP _part/16/_geo_xyz/4,10,0 -8.202099800\nP _part/16/_geo_xyz/4,10,1 12.229330063\nP _part/16/_geo_xyz/4,10,2 32.808399200\nP _part/16/_geo_xyz/4,11,0 -8.202099800\nP _part/16/_geo_xyz/4,11,1 12.244093895\nP _part/16/_geo_xyz/4,11,2 32.562335968\nP _part/16/_geo_xyz/4,12,0 -8.202099800\nP _part/16/_geo_xyz/4,12,1 12.273621559\nP _part/16/_geo_xyz/4,12,2 32.447505951\nP _part/16/_geo_xyz/4,13,0 -8.202099800\nP _part/16/_geo_xyz/4,13,1 12.303149223\nP _part/16/_geo_xyz/4,13,2 32.398292542\nP _part/16/_geo_xyz/4,14,0 0.0\nP _part/16/_geo_xyz/4,14,1 0.0\nP _part/16/_geo_xyz/4,14,2 0.0\nP _part/16/_geo_xyz/4,15,0 0.0\nP _part/16/_geo_xyz/4,15,1 0.0\nP _part/16/_geo_xyz/4,15,2 0.0\nP _part/16/_geo_xyz/4,16,0 0.0\nP _part/16/_geo_xyz/4,16,1 0.0\nP _part/16/_geo_xyz/4,16,2 0.0\nP _part/16/_geo_xyz/4,17,0 0.0\nP _part/16/_geo_xyz/4,17,1 0.0\nP _part/16/_geo_xyz/4,17,2 0.0\nP _part/16/_geo_xyz/4,2,0 -8.202099800\nP _part/16/_geo_xyz/4,2,1 12.362204552\nP _part/16/_geo_xyz/4,2,2 32.562335968\nP _part/16/_geo_xyz/4,3,0 -8.202099800\nP _part/16/_geo_xyz/4,3,1 12.376968384\nP _part/16/_geo_xyz/4,3,2 32.808399200\nP _part/16/_geo_xyz/4,4,0 -8.202099800\nP _part/16/_geo_xyz/4,4,1 12.376968384\nP _part/16/_geo_xyz/4,4,2 33.136482239\nP _part/16/_geo_xyz/4,5,0 -8.202099800\nP _part/16/_geo_xyz/4,5,1 12.336703300\nP _part/16/_geo_xyz/4,5,2 33.628608704\nP _part/16/_geo_xyz/4,6,0 -8.202099800\nP _part/16/_geo_xyz/4,6,1 12.303149223\nP _part/16/_geo_xyz/4,6,2 34.038715363\nP _part/16/_geo_xyz/4,7,0 -8.202099800\nP _part/16/_geo_xyz/4,7,1 12.303149223\nP _part/16/_geo_xyz/4,7,2 34.038715363\nP _part/16/_geo_xyz/4,8,0 -8.202099800\nP _part/16/_geo_xyz/4,8,1 12.269595146\nP _part/16/_geo_xyz/4,8,2 33.628608704\nP _part/16/_geo_xyz/4,9,0 -8.202099800\nP _part/16/_geo_xyz/4,9,1 12.229330063\nP _part/16/_geo_xyz/4,9,2 33.136482239\nP _part/16/_geo_xyz/5,0,0 -8.202099800\nP _part/16/_geo_xyz/5,0,1 12.303149223\nP _part/16/_geo_xyz/5,0,2 32.398292542\nP _part/16/_geo_xyz/5,1,0 -8.202099800\nP _part/16/_geo_xyz/5,1,1 12.332676888\nP _part/16/_geo_xyz/5,1,2 32.447505951\nP _part/16/_geo_xyz/5,10,0 -8.202099800\nP _part/16/_geo_xyz/5,10,1 12.229330063\nP _part/16/_geo_xyz/5,10,2 32.808399200\nP _part/16/_geo_xyz/5,11,0 -8.202099800\nP _part/16/_geo_xyz/5,11,1 12.244093895\nP _part/16/_geo_xyz/5,11,2 32.562335968\nP _part/16/_geo_xyz/5,12,0 -8.202099800\nP _part/16/_geo_xyz/5,12,1 12.273621559\nP _part/16/_geo_xyz/5,12,2 32.447505951\nP _part/16/_geo_xyz/5,13,0 -8.202099800\nP _part/16/_geo_xyz/5,13,1 12.303149223\nP _part/16/_geo_xyz/5,13,2 32.398292542\nP _part/16/_geo_xyz/5,14,0 0.0\nP _part/16/_geo_xyz/5,14,1 0.0\nP _part/16/_geo_xyz/5,14,2 0.0\nP _part/16/_geo_xyz/5,15,0 0.0\nP _part/16/_geo_xyz/5,15,1 0.0\nP _part/16/_geo_xyz/5,15,2 0.0\nP _part/16/_geo_xyz/5,16,0 0.0\nP _part/16/_geo_xyz/5,16,1 0.0\nP _part/16/_geo_xyz/5,16,2 0.0\nP _part/16/_geo_xyz/5,17,0 0.0\nP _part/16/_geo_xyz/5,17,1 0.0\nP _part/16/_geo_xyz/5,17,2 0.0\nP _part/16/_geo_xyz/5,2,0 -8.202099800\nP _part/16/_geo_xyz/5,2,1 12.362204552\nP _part/16/_geo_xyz/5,2,2 32.562335968\nP _part/16/_geo_xyz/5,3,0 -8.202099800\nP _part/16/_geo_xyz/5,3,1 12.376968384\nP _part/16/_geo_xyz/5,3,2 32.808399200\nP _part/16/_geo_xyz/5,4,0 -8.202099800\nP _part/16/_geo_xyz/5,4,1 12.376968384\nP _part/16/_geo_xyz/5,4,2 33.136482239\nP _part/16/_geo_xyz/5,5,0 -8.202099800\nP _part/16/_geo_xyz/5,5,1 12.303149223\nP _part/16/_geo_xyz/5,5,2 34.038715363\nP _part/16/_geo_xyz/5,6,0 -8.202099800\nP _part/16/_geo_xyz/5,6,1 12.303149223\nP _part/16/_geo_xyz/5,6,2 34.038715363\nP _part/16/_geo_xyz/5,7,0 -8.202099800\nP _part/16/_geo_xyz/5,7,1 12.303149223\nP _part/16/_geo_xyz/5,7,2 34.038715363\nP _part/16/_geo_xyz/5,8,0 -8.202099800\nP _part/16/_geo_xyz/5,8,1 12.303149223\nP _part/16/_geo_xyz/5,8,2 34.038715363\nP _part/16/_geo_xyz/5,9,0 -8.202099800\nP _part/16/_geo_xyz/5,9,1 12.229330063\nP _part/16/_geo_xyz/5,9,2 33.136482239\nP _part/16/_geo_xyz/6,0,0 -8.202099800\nP _part/16/_geo_xyz/6,0,1 12.303149223\nP _part/16/_geo_xyz/6,0,2 32.398292542\nP _part/16/_geo_xyz/6,1,0 -8.202099800\nP _part/16/_geo_xyz/6,1,1 12.332676888\nP _part/16/_geo_xyz/6,1,2 32.447505951\nP _part/16/_geo_xyz/6,10,0 -8.202099800\nP _part/16/_geo_xyz/6,10,1 12.229330063\nP _part/16/_geo_xyz/6,10,2 32.808399200\nP _part/16/_geo_xyz/6,11,0 -8.202099800\nP _part/16/_geo_xyz/6,11,1 12.244093895\nP _part/16/_geo_xyz/6,11,2 32.562335968\nP _part/16/_geo_xyz/6,12,0 -8.202099800\nP _part/16/_geo_xyz/6,12,1 12.273621559\nP _part/16/_geo_xyz/6,12,2 32.447505951\nP _part/16/_geo_xyz/6,13,0 -8.202099800\nP _part/16/_geo_xyz/6,13,1 12.303149223\nP _part/16/_geo_xyz/6,13,2 32.398292542\nP _part/16/_geo_xyz/6,14,0 0.0\nP _part/16/_geo_xyz/6,14,1 0.0\nP _part/16/_geo_xyz/6,14,2 0.0\nP _part/16/_geo_xyz/6,15,0 0.0\nP _part/16/_geo_xyz/6,15,1 0.0\nP _part/16/_geo_xyz/6,15,2 0.0\nP _part/16/_geo_xyz/6,16,0 0.0\nP _part/16/_geo_xyz/6,16,1 0.0\nP _part/16/_geo_xyz/6,16,2 0.0\nP _part/16/_geo_xyz/6,17,0 0.0\nP _part/16/_geo_xyz/6,17,1 0.0\nP _part/16/_geo_xyz/6,17,2 0.0\nP _part/16/_geo_xyz/6,2,0 -8.202099800\nP _part/16/_geo_xyz/6,2,1 12.362204552\nP _part/16/_geo_xyz/6,2,2 32.562335968\nP _part/16/_geo_xyz/6,3,0 -8.202099800\nP _part/16/_geo_xyz/6,3,1 12.376968384\nP _part/16/_geo_xyz/6,3,2 32.808399200\nP _part/16/_geo_xyz/6,4,0 -8.202099800\nP _part/16/_geo_xyz/6,4,1 12.376968384\nP _part/16/_geo_xyz/6,4,2 33.136482239\nP _part/16/_geo_xyz/6,5,0 -8.202099800\nP _part/16/_geo_xyz/6,5,1 12.303149223\nP _part/16/_geo_xyz/6,5,2 34.038715363\nP _part/16/_geo_xyz/6,6,0 -8.202099800\nP _part/16/_geo_xyz/6,6,1 12.303149223\nP _part/16/_geo_xyz/6,6,2 34.038715363\nP _part/16/_geo_xyz/6,7,0 -8.202099800\nP _part/16/_geo_xyz/6,7,1 12.303149223\nP _part/16/_geo_xyz/6,7,2 34.038715363\nP _part/16/_geo_xyz/6,8,0 -8.202099800\nP _part/16/_geo_xyz/6,8,1 12.303149223\nP _part/16/_geo_xyz/6,8,2 34.038715363\nP _part/16/_geo_xyz/6,9,0 -8.202099800\nP _part/16/_geo_xyz/6,9,1 12.229330063\nP _part/16/_geo_xyz/6,9,2 33.136482239\nP _part/16/_geo_xyz/7,0,0 -8.202099800\nP _part/16/_geo_xyz/7,0,1 12.303149223\nP _part/16/_geo_xyz/7,0,2 32.398292542\nP _part/16/_geo_xyz/7,1,0 -8.202099800\nP _part/16/_geo_xyz/7,1,1 12.332676888\nP _part/16/_geo_xyz/7,1,2 32.447505951\nP _part/16/_geo_xyz/7,10,0 -8.202099800\nP _part/16/_geo_xyz/7,10,1 12.229330063\nP _part/16/_geo_xyz/7,10,2 32.808399200\nP _part/16/_geo_xyz/7,11,0 -8.202099800\nP _part/16/_geo_xyz/7,11,1 12.244093895\nP _part/16/_geo_xyz/7,11,2 32.562335968\nP _part/16/_geo_xyz/7,12,0 -8.202099800\nP _part/16/_geo_xyz/7,12,1 12.273621559\nP _part/16/_geo_xyz/7,12,2 32.447505951\nP _part/16/_geo_xyz/7,13,0 -8.202099800\nP _part/16/_geo_xyz/7,13,1 12.303149223\nP _part/16/_geo_xyz/7,13,2 32.398292542\nP _part/16/_geo_xyz/7,14,0 0.0\nP _part/16/_geo_xyz/7,14,1 0.0\nP _part/16/_geo_xyz/7,14,2 0.0\nP _part/16/_geo_xyz/7,15,0 0.0\nP _part/16/_geo_xyz/7,15,1 0.0\nP _part/16/_geo_xyz/7,15,2 0.0\nP _part/16/_geo_xyz/7,16,0 0.0\nP _part/16/_geo_xyz/7,16,1 0.0\nP _part/16/_geo_xyz/7,16,2 0.0\nP _part/16/_geo_xyz/7,17,0 0.0\nP _part/16/_geo_xyz/7,17,1 0.0\nP _part/16/_geo_xyz/7,17,2 0.0\nP _part/16/_geo_xyz/7,2,0 -8.202099800\nP _part/16/_geo_xyz/7,2,1 12.362204552\nP _part/16/_geo_xyz/7,2,2 32.562335968\nP _part/16/_geo_xyz/7,3,0 -8.202099800\nP _part/16/_geo_xyz/7,3,1 12.376968384\nP _part/16/_geo_xyz/7,3,2 32.808399200\nP _part/16/_geo_xyz/7,4,0 -8.202099800\nP _part/16/_geo_xyz/7,4,1 12.376968384\nP _part/16/_geo_xyz/7,4,2 33.136482239\nP _part/16/_geo_xyz/7,5,0 -8.202099800\nP _part/16/_geo_xyz/7,5,1 12.303149223\nP _part/16/_geo_xyz/7,5,2 34.038715363\nP _part/16/_geo_xyz/7,6,0 -8.202099800\nP _part/16/_geo_xyz/7,6,1 12.303149223\nP _part/16/_geo_xyz/7,6,2 34.038715363\nP _part/16/_geo_xyz/7,7,0 -8.202099800\nP _part/16/_geo_xyz/7,7,1 12.303149223\nP _part/16/_geo_xyz/7,7,2 34.038715363\nP _part/16/_geo_xyz/7,8,0 -8.202099800\nP _part/16/_geo_xyz/7,8,1 12.303149223\nP _part/16/_geo_xyz/7,8,2 34.038715363\nP _part/16/_geo_xyz/7,9,0 -8.202099800\nP _part/16/_geo_xyz/7,9,1 12.229330063\nP _part/16/_geo_xyz/7,9,2 33.136482239\nP _part/16/_geo_xyz/8,0,0 -8.202099800\nP _part/16/_geo_xyz/8,0,1 12.303149223\nP _part/16/_geo_xyz/8,0,2 32.398292542\nP _part/16/_geo_xyz/8,1,0 -8.202099800\nP _part/16/_geo_xyz/8,1,1 12.332676888\nP _part/16/_geo_xyz/8,1,2 32.447505951\nP _part/16/_geo_xyz/8,10,0 -8.202099800\nP _part/16/_geo_xyz/8,10,1 12.229330063\nP _part/16/_geo_xyz/8,10,2 32.808399200\nP _part/16/_geo_xyz/8,11,0 -8.202099800\nP _part/16/_geo_xyz/8,11,1 12.244093895\nP _part/16/_geo_xyz/8,11,2 32.562335968\nP _part/16/_geo_xyz/8,12,0 -8.202099800\nP _part/16/_geo_xyz/8,12,1 12.273621559\nP _part/16/_geo_xyz/8,12,2 32.447505951\nP _part/16/_geo_xyz/8,13,0 -8.202099800\nP _part/16/_geo_xyz/8,13,1 12.303149223\nP _part/16/_geo_xyz/8,13,2 32.398292542\nP _part/16/_geo_xyz/8,14,0 0.0\nP _part/16/_geo_xyz/8,14,1 0.0\nP _part/16/_geo_xyz/8,14,2 0.0\nP _part/16/_geo_xyz/8,15,0 0.0\nP _part/16/_geo_xyz/8,15,1 0.0\nP _part/16/_geo_xyz/8,15,2 0.0\nP _part/16/_geo_xyz/8,16,0 0.0\nP _part/16/_geo_xyz/8,16,1 0.0\nP _part/16/_geo_xyz/8,16,2 0.0\nP _part/16/_geo_xyz/8,17,0 0.0\nP _part/16/_geo_xyz/8,17,1 0.0\nP _part/16/_geo_xyz/8,17,2 0.0\nP _part/16/_geo_xyz/8,2,0 -8.202099800\nP _part/16/_geo_xyz/8,2,1 12.362204552\nP _part/16/_geo_xyz/8,2,2 32.562335968\nP _part/16/_geo_xyz/8,3,0 -8.202099800\nP _part/16/_geo_xyz/8,3,1 12.376968384\nP _part/16/_geo_xyz/8,3,2 32.808399200\nP _part/16/_geo_xyz/8,4,0 -8.202099800\nP _part/16/_geo_xyz/8,4,1 12.376968384\nP _part/16/_geo_xyz/8,4,2 33.136482239\nP _part/16/_geo_xyz/8,5,0 -8.202099800\nP _part/16/_geo_xyz/8,5,1 12.303149223\nP _part/16/_geo_xyz/8,5,2 34.038715363\nP _part/16/_geo_xyz/8,6,0 -8.202099800\nP _part/16/_geo_xyz/8,6,1 12.303149223\nP _part/16/_geo_xyz/8,6,2 34.038715363\nP _part/16/_geo_xyz/8,7,0 -8.202099800\nP _part/16/_geo_xyz/8,7,1 12.303149223\nP _part/16/_geo_xyz/8,7,2 34.038715363\nP _part/16/_geo_xyz/8,8,0 -8.202099800\nP _part/16/_geo_xyz/8,8,1 12.303149223\nP _part/16/_geo_xyz/8,8,2 34.038715363\nP _part/16/_geo_xyz/8,9,0 -8.202099800\nP _part/16/_geo_xyz/8,9,1 12.229330063\nP _part/16/_geo_xyz/8,9,2 33.136482239\nP _part/16/_geo_xyz/9,0,0 0.0\nP _part/16/_geo_xyz/9,0,1 0.0\nP _part/16/_geo_xyz/9,0,2 0.0\nP _part/16/_geo_xyz/9,1,0 0.0\nP _part/16/_geo_xyz/9,1,1 0.0\nP _part/16/_geo_xyz/9,1,2 0.0\nP _part/16/_geo_xyz/9,10,0 0.0\nP _part/16/_geo_xyz/9,10,1 0.0\nP _part/16/_geo_xyz/9,10,2 0.0\nP _part/16/_geo_xyz/9,11,0 0.0\nP _part/16/_geo_xyz/9,11,1 0.0\nP _part/16/_geo_xyz/9,11,2 0.0\nP _part/16/_geo_xyz/9,12,0 0.0\nP _part/16/_geo_xyz/9,12,1 0.0\nP _part/16/_geo_xyz/9,12,2 0.0\nP _part/16/_geo_xyz/9,13,0 0.0\nP _part/16/_geo_xyz/9,13,1 0.0\nP _part/16/_geo_xyz/9,13,2 0.0\nP _part/16/_geo_xyz/9,14,0 0.0\nP _part/16/_geo_xyz/9,14,1 0.0\nP _part/16/_geo_xyz/9,14,2 0.0\nP _part/16/_geo_xyz/9,15,0 0.0\nP _part/16/_geo_xyz/9,15,1 0.0\nP _part/16/_geo_xyz/9,15,2 0.0\nP _part/16/_geo_xyz/9,16,0 0.0\nP _part/16/_geo_xyz/9,16,1 0.0\nP _part/16/_geo_xyz/9,16,2 0.0\nP _part/16/_geo_xyz/9,17,0 0.0\nP _part/16/_geo_xyz/9,17,1 0.0\nP _part/16/_geo_xyz/9,17,2 0.0\nP _part/16/_geo_xyz/9,2,0 0.0\nP _part/16/_geo_xyz/9,2,1 0.0\nP _part/16/_geo_xyz/9,2,2 0.0\nP _part/16/_geo_xyz/9,3,0 0.0\nP _part/16/_geo_xyz/9,3,1 0.0\nP _part/16/_geo_xyz/9,3,2 0.0\nP _part/16/_geo_xyz/9,4,0 0.0\nP _part/16/_geo_xyz/9,4,1 0.0\nP _part/16/_geo_xyz/9,4,2 0.0\nP _part/16/_geo_xyz/9,5,0 0.0\nP _part/16/_geo_xyz/9,5,1 0.0\nP _part/16/_geo_xyz/9,5,2 0.0\nP _part/16/_geo_xyz/9,6,0 0.0\nP _part/16/_geo_xyz/9,6,1 0.0\nP _part/16/_geo_xyz/9,6,2 0.0\nP _part/16/_geo_xyz/9,7,0 0.0\nP _part/16/_geo_xyz/9,7,1 0.0\nP _part/16/_geo_xyz/9,7,2 0.0\nP _part/16/_geo_xyz/9,8,0 0.0\nP _part/16/_geo_xyz/9,8,1 0.0\nP _part/16/_geo_xyz/9,8,2 0.0\nP _part/16/_geo_xyz/9,9,0 0.0\nP _part/16/_geo_xyz/9,9,1 0.0\nP _part/16/_geo_xyz/9,9,2 0.0\nP _part/16/_geo_xyz/i_count 20\nP _part/16/_geo_xyz/j_count 18\nP _part/16/_geo_xyz/k_count 3\nP _part/16/_locked/0,0 0\nP _part/16/_locked/0,1 0\nP _part/16/_locked/0,10 0\nP _part/16/_locked/0,11 0\nP _part/16/_locked/0,12 0\nP _part/16/_locked/0,13 0\nP _part/16/_locked/0,14 0\nP _part/16/_locked/0,15 0\nP _part/16/_locked/0,16 0\nP _part/16/_locked/0,17 0\nP _part/16/_locked/0,2 0\nP _part/16/_locked/0,3 0\nP _part/16/_locked/0,4 0\nP _part/16/_locked/0,5 0\nP _part/16/_locked/0,6 0\nP _part/16/_locked/0,7 0\nP _part/16/_locked/0,8 0\nP _part/16/_locked/0,9 0\nP _part/16/_locked/1,0 0\nP _part/16/_locked/1,1 0\nP _part/16/_locked/1,10 0\nP _part/16/_locked/1,11 0\nP _part/16/_locked/1,12 0\nP _part/16/_locked/1,13 0\nP _part/16/_locked/1,14 0\nP _part/16/_locked/1,15 0\nP _part/16/_locked/1,16 0\nP _part/16/_locked/1,17 0\nP _part/16/_locked/1,2 0\nP _part/16/_locked/1,3 0\nP _part/16/_locked/1,4 0\nP _part/16/_locked/1,5 0\nP _part/16/_locked/1,6 0\nP _part/16/_locked/1,7 0\nP _part/16/_locked/1,8 0\nP _part/16/_locked/1,9 0\nP _part/16/_locked/10,0 0\nP _part/16/_locked/10,1 0\nP _part/16/_locked/10,10 0\nP _part/16/_locked/10,11 0\nP _part/16/_locked/10,12 0\nP _part/16/_locked/10,13 0\nP _part/16/_locked/10,14 0\nP _part/16/_locked/10,15 0\nP _part/16/_locked/10,16 0\nP _part/16/_locked/10,17 0\nP _part/16/_locked/10,2 0\nP _part/16/_locked/10,3 0\nP _part/16/_locked/10,4 0\nP _part/16/_locked/10,5 0\nP _part/16/_locked/10,6 0\nP _part/16/_locked/10,7 0\nP _part/16/_locked/10,8 0\nP _part/16/_locked/10,9 0\nP _part/16/_locked/11,0 0\nP _part/16/_locked/11,1 0\nP _part/16/_locked/11,10 0\nP _part/16/_locked/11,11 0\nP _part/16/_locked/11,12 0\nP _part/16/_locked/11,13 0\nP _part/16/_locked/11,14 0\nP _part/16/_locked/11,15 0\nP _part/16/_locked/11,16 0\nP _part/16/_locked/11,17 0\nP _part/16/_locked/11,2 0\nP _part/16/_locked/11,3 0\nP _part/16/_locked/11,4 0\nP _part/16/_locked/11,5 0\nP _part/16/_locked/11,6 0\nP _part/16/_locked/11,7 0\nP _part/16/_locked/11,8 0\nP _part/16/_locked/11,9 0\nP _part/16/_locked/12,0 0\nP _part/16/_locked/12,1 0\nP _part/16/_locked/12,10 0\nP _part/16/_locked/12,11 0\nP _part/16/_locked/12,12 0\nP _part/16/_locked/12,13 0\nP _part/16/_locked/12,14 0\nP _part/16/_locked/12,15 0\nP _part/16/_locked/12,16 0\nP _part/16/_locked/12,17 0\nP _part/16/_locked/12,2 0\nP _part/16/_locked/12,3 0\nP _part/16/_locked/12,4 0\nP _part/16/_locked/12,5 0\nP _part/16/_locked/12,6 0\nP _part/16/_locked/12,7 0\nP _part/16/_locked/12,8 0\nP _part/16/_locked/12,9 0\nP _part/16/_locked/13,0 0\nP _part/16/_locked/13,1 0\nP _part/16/_locked/13,10 0\nP _part/16/_locked/13,11 0\nP _part/16/_locked/13,12 0\nP _part/16/_locked/13,13 0\nP _part/16/_locked/13,14 0\nP _part/16/_locked/13,15 0\nP _part/16/_locked/13,16 0\nP _part/16/_locked/13,17 0\nP _part/16/_locked/13,2 0\nP _part/16/_locked/13,3 0\nP _part/16/_locked/13,4 0\nP _part/16/_locked/13,5 0\nP _part/16/_locked/13,6 0\nP _part/16/_locked/13,7 0\nP _part/16/_locked/13,8 0\nP _part/16/_locked/13,9 0\nP _part/16/_locked/14,0 0\nP _part/16/_locked/14,1 0\nP _part/16/_locked/14,10 0\nP _part/16/_locked/14,11 0\nP _part/16/_locked/14,12 0\nP _part/16/_locked/14,13 0\nP _part/16/_locked/14,14 0\nP _part/16/_locked/14,15 0\nP _part/16/_locked/14,16 0\nP _part/16/_locked/14,17 0\nP _part/16/_locked/14,2 0\nP _part/16/_locked/14,3 0\nP _part/16/_locked/14,4 0\nP _part/16/_locked/14,5 0\nP _part/16/_locked/14,6 0\nP _part/16/_locked/14,7 0\nP _part/16/_locked/14,8 0\nP _part/16/_locked/14,9 0\nP _part/16/_locked/15,0 0\nP _part/16/_locked/15,1 0\nP _part/16/_locked/15,10 0\nP _part/16/_locked/15,11 0\nP _part/16/_locked/15,12 0\nP _part/16/_locked/15,13 0\nP _part/16/_locked/15,14 0\nP _part/16/_locked/15,15 0\nP _part/16/_locked/15,16 0\nP _part/16/_locked/15,17 0\nP _part/16/_locked/15,2 0\nP _part/16/_locked/15,3 0\nP _part/16/_locked/15,4 0\nP _part/16/_locked/15,5 0\nP _part/16/_locked/15,6 0\nP _part/16/_locked/15,7 0\nP _part/16/_locked/15,8 0\nP _part/16/_locked/15,9 0\nP _part/16/_locked/16,0 0\nP _part/16/_locked/16,1 0\nP _part/16/_locked/16,10 0\nP _part/16/_locked/16,11 0\nP _part/16/_locked/16,12 0\nP _part/16/_locked/16,13 0\nP _part/16/_locked/16,14 0\nP _part/16/_locked/16,15 0\nP _part/16/_locked/16,16 0\nP _part/16/_locked/16,17 0\nP _part/16/_locked/16,2 0\nP _part/16/_locked/16,3 0\nP _part/16/_locked/16,4 0\nP _part/16/_locked/16,5 0\nP _part/16/_locked/16,6 0\nP _part/16/_locked/16,7 0\nP _part/16/_locked/16,8 0\nP _part/16/_locked/16,9 0\nP _part/16/_locked/17,0 0\nP _part/16/_locked/17,1 0\nP _part/16/_locked/17,10 0\nP _part/16/_locked/17,11 0\nP _part/16/_locked/17,12 0\nP _part/16/_locked/17,13 0\nP _part/16/_locked/17,14 0\nP _part/16/_locked/17,15 0\nP _part/16/_locked/17,16 0\nP _part/16/_locked/17,17 0\nP _part/16/_locked/17,2 0\nP _part/16/_locked/17,3 0\nP _part/16/_locked/17,4 0\nP _part/16/_locked/17,5 0\nP _part/16/_locked/17,6 0\nP _part/16/_locked/17,7 0\nP _part/16/_locked/17,8 0\nP _part/16/_locked/17,9 0\nP _part/16/_locked/18,0 0\nP _part/16/_locked/18,1 0\nP _part/16/_locked/18,10 0\nP _part/16/_locked/18,11 0\nP _part/16/_locked/18,12 0\nP _part/16/_locked/18,13 0\nP _part/16/_locked/18,14 0\nP _part/16/_locked/18,15 0\nP _part/16/_locked/18,16 0\nP _part/16/_locked/18,17 0\nP _part/16/_locked/18,2 0\nP _part/16/_locked/18,3 0\nP _part/16/_locked/18,4 0\nP _part/16/_locked/18,5 0\nP _part/16/_locked/18,6 0\nP _part/16/_locked/18,7 0\nP _part/16/_locked/18,8 0\nP _part/16/_locked/18,9 0\nP _part/16/_locked/19,0 0\nP _part/16/_locked/19,1 0\nP _part/16/_locked/19,10 0\nP _part/16/_locked/19,11 0\nP _part/16/_locked/19,12 0\nP _part/16/_locked/19,13 0\nP _part/16/_locked/19,14 0\nP _part/16/_locked/19,15 0\nP _part/16/_locked/19,16 0\nP _part/16/_locked/19,17 0\nP _part/16/_locked/19,2 0\nP _part/16/_locked/19,3 0\nP _part/16/_locked/19,4 0\nP _part/16/_locked/19,5 0\nP _part/16/_locked/19,6 0\nP _part/16/_locked/19,7 0\nP _part/16/_locked/19,8 0\nP _part/16/_locked/19,9 0\nP _part/16/_locked/2,0 0\nP _part/16/_locked/2,1 0\nP _part/16/_locked/2,10 0\nP _part/16/_locked/2,11 0\nP _part/16/_locked/2,12 0\nP _part/16/_locked/2,13 0\nP _part/16/_locked/2,14 0\nP _part/16/_locked/2,15 0\nP _part/16/_locked/2,16 0\nP _part/16/_locked/2,17 0\nP _part/16/_locked/2,2 0\nP _part/16/_locked/2,3 0\nP _part/16/_locked/2,4 0\nP _part/16/_locked/2,5 0\nP _part/16/_locked/2,6 0\nP _part/16/_locked/2,7 0\nP _part/16/_locked/2,8 0\nP _part/16/_locked/2,9 0\nP _part/16/_locked/3,0 0\nP _part/16/_locked/3,1 0\nP _part/16/_locked/3,10 0\nP _part/16/_locked/3,11 0\nP _part/16/_locked/3,12 0\nP _part/16/_locked/3,13 0\nP _part/16/_locked/3,14 0\nP _part/16/_locked/3,15 0\nP _part/16/_locked/3,16 0\nP _part/16/_locked/3,17 0\nP _part/16/_locked/3,2 0\nP _part/16/_locked/3,3 0\nP _part/16/_locked/3,4 0\nP _part/16/_locked/3,5 0\nP _part/16/_locked/3,6 0\nP _part/16/_locked/3,7 0\nP _part/16/_locked/3,8 0\nP _part/16/_locked/3,9 0\nP _part/16/_locked/4,0 0\nP _part/16/_locked/4,1 0\nP _part/16/_locked/4,10 0\nP _part/16/_locked/4,11 0\nP _part/16/_locked/4,12 0\nP _part/16/_locked/4,13 0\nP _part/16/_locked/4,14 0\nP _part/16/_locked/4,15 0\nP _part/16/_locked/4,16 0\nP _part/16/_locked/4,17 0\nP _part/16/_locked/4,2 0\nP _part/16/_locked/4,3 0\nP _part/16/_locked/4,4 0\nP _part/16/_locked/4,5 0\nP _part/16/_locked/4,6 0\nP _part/16/_locked/4,7 0\nP _part/16/_locked/4,8 0\nP _part/16/_locked/4,9 0\nP _part/16/_locked/5,0 0\nP _part/16/_locked/5,1 0\nP _part/16/_locked/5,10 0\nP _part/16/_locked/5,11 0\nP _part/16/_locked/5,12 0\nP _part/16/_locked/5,13 0\nP _part/16/_locked/5,14 0\nP _part/16/_locked/5,15 0\nP _part/16/_locked/5,16 0\nP _part/16/_locked/5,17 0\nP _part/16/_locked/5,2 0\nP _part/16/_locked/5,3 0\nP _part/16/_locked/5,4 0\nP _part/16/_locked/5,5 0\nP _part/16/_locked/5,6 0\nP _part/16/_locked/5,7 0\nP _part/16/_locked/5,8 0\nP _part/16/_locked/5,9 0\nP _part/16/_locked/6,0 0\nP _part/16/_locked/6,1 0\nP _part/16/_locked/6,10 0\nP _part/16/_locked/6,11 0\nP _part/16/_locked/6,12 0\nP _part/16/_locked/6,13 0\nP _part/16/_locked/6,14 0\nP _part/16/_locked/6,15 0\nP _part/16/_locked/6,16 0\nP _part/16/_locked/6,17 0\nP _part/16/_locked/6,2 0\nP _part/16/_locked/6,3 0\nP _part/16/_locked/6,4 0\nP _part/16/_locked/6,5 0\nP _part/16/_locked/6,6 0\nP _part/16/_locked/6,7 0\nP _part/16/_locked/6,8 0\nP _part/16/_locked/6,9 0\nP _part/16/_locked/7,0 0\nP _part/16/_locked/7,1 0\nP _part/16/_locked/7,10 0\nP _part/16/_locked/7,11 0\nP _part/16/_locked/7,12 0\nP _part/16/_locked/7,13 0\nP _part/16/_locked/7,14 0\nP _part/16/_locked/7,15 0\nP _part/16/_locked/7,16 0\nP _part/16/_locked/7,17 0\nP _part/16/_locked/7,2 0\nP _part/16/_locked/7,3 0\nP _part/16/_locked/7,4 0\nP _part/16/_locked/7,5 0\nP _part/16/_locked/7,6 0\nP _part/16/_locked/7,7 0\nP _part/16/_locked/7,8 0\nP _part/16/_locked/7,9 0\nP _part/16/_locked/8,0 0\nP _part/16/_locked/8,1 0\nP _part/16/_locked/8,10 0\nP _part/16/_locked/8,11 0\nP _part/16/_locked/8,12 0\nP _part/16/_locked/8,13 0\nP _part/16/_locked/8,14 0\nP _part/16/_locked/8,15 0\nP _part/16/_locked/8,16 0\nP _part/16/_locked/8,17 0\nP _part/16/_locked/8,2 0\nP _part/16/_locked/8,3 0\nP _part/16/_locked/8,4 0\nP _part/16/_locked/8,5 0\nP _part/16/_locked/8,6 0\nP _part/16/_locked/8,7 0\nP _part/16/_locked/8,8 0\nP _part/16/_locked/8,9 0\nP _part/16/_locked/9,0 0\nP _part/16/_locked/9,1 0\nP _part/16/_locked/9,10 0\nP _part/16/_locked/9,11 0\nP _part/16/_locked/9,12 0\nP _part/16/_locked/9,13 0\nP _part/16/_locked/9,14 0\nP _part/16/_locked/9,15 0\nP _part/16/_locked/9,16 0\nP _part/16/_locked/9,17 0\nP _part/16/_locked/9,2 0\nP _part/16/_locked/9,3 0\nP _part/16/_locked/9,4 0\nP _part/16/_locked/9,5 0\nP _part/16/_locked/9,6 0\nP _part/16/_locked/9,7 0\nP _part/16/_locked/9,8 0\nP _part/16/_locked/9,9 0\nP _part/16/_locked/i_count 20\nP _part/16/_locked/j_count 18\nP _part/16/_part_cd 0.075000003\nP _part/16/_part_phi 0.0\nP _part/16/_part_psi 0.0\nP _part/16/_part_rad 2.0\nP _part/16/_part_specs_eq 1\nP _part/16/_part_specs_invis 0\nP _part/16/_part_specs_unused1 0\nP _part/16/_part_specs_unused2 0\nP _part/16/_part_tex 0\nP _part/16/_part_the 0.0\nP _part/16/_part_x -0.0\nP _part/16/_part_y 12.303149223\nP _part/16/_part_z 32.808399200\nP _part/16/_patt_con 0\nP _part/16/_patt_prt 0\nP _part/16/_patt_rat 0.0\nP _part/16/_r_dim 14\nP _part/16/_s_dim 4\nP _part/16/_scon 37.676635742\nP _part/16/_top_s1 0.755999982\nP _part/16/_top_s2 1.0\nP _part/16/_top_t1 0.509999990\nP _part/16/_top_t2 0.754000008\nP _part/17/_aero_x_os 0.0\nP _part/17/_aero_y_os 0.0\nP _part/17/_aero_z_os 0.0\nP _part/17/_area_frnt 0.0\nP _part/17/_area_side 0.0\nP _part/17/_area_vert 0.0\nP _part/17/_bot_s1 0.755999982\nP _part/17/_bot_s2 1.0\nP _part/17/_bot_t1 0.509999990\nP _part/17/_bot_t2 0.754000008\nP _part/17/_damp 1.883831739\nP _part/17/_geo_xyz/0,0,0 0.0\nP _part/17/_geo_xyz/0,0,1 12.303149223\nP _part/17/_geo_xyz/0,0,2 32.398292542\nP _part/17/_geo_xyz/0,1,0 0.0\nP _part/17/_geo_xyz/0,1,1 12.332676888\nP _part/17/_geo_xyz/0,1,2 32.447505951\nP _part/17/_geo_xyz/0,10,0 0.0\nP _part/17/_geo_xyz/0,10,1 12.229330063\nP _part/17/_geo_xyz/0,10,2 32.808399200\nP _part/17/_geo_xyz/0,11,0 0.0\nP _part/17/_geo_xyz/0,11,1 12.244093895\nP _part/17/_geo_xyz/0,11,2 32.562335968\nP _part/17/_geo_xyz/0,12,0 0.0\nP _part/17/_geo_xyz/0,12,1 12.273621559\nP _part/17/_geo_xyz/0,12,2 32.447505951\nP _part/17/_geo_xyz/0,13,0 0.0\nP _part/17/_geo_xyz/0,13,1 12.303149223\nP _part/17/_geo_xyz/0,13,2 32.398292542\nP _part/17/_geo_xyz/0,14,0 0.0\nP _part/17/_geo_xyz/0,14,1 0.0\nP _part/17/_geo_xyz/0,14,2 0.0\nP _part/17/_geo_xyz/0,15,0 0.0\nP _part/17/_geo_xyz/0,15,1 0.0\nP _part/17/_geo_xyz/0,15,2 0.0\nP _part/17/_geo_xyz/0,16,0 0.0\nP _part/17/_geo_xyz/0,16,1 0.0\nP _part/17/_geo_xyz/0,16,2 0.0\nP _part/17/_geo_xyz/0,17,0 0.0\nP _part/17/_geo_xyz/0,17,1 0.0\nP _part/17/_geo_xyz/0,17,2 0.0\nP _part/17/_geo_xyz/0,2,0 0.0\nP _part/17/_geo_xyz/0,2,1 12.362204552\nP _part/17/_geo_xyz/0,2,2 32.562335968\nP _part/17/_geo_xyz/0,3,0 0.0\nP _part/17/_geo_xyz/0,3,1 12.376968384\nP _part/17/_geo_xyz/0,3,2 32.808399200\nP _part/17/_geo_xyz/0,4,0 0.0\nP _part/17/_geo_xyz/0,4,1 12.376968384\nP _part/17/_geo_xyz/0,4,2 33.136482239\nP _part/17/_geo_xyz/0,5,0 0.0\nP _part/17/_geo_xyz/0,5,1 12.336703300\nP _part/17/_geo_xyz/0,5,2 33.628608704\nP _part/17/_geo_xyz/0,6,0 0.0\nP _part/17/_geo_xyz/0,6,1 12.303149223\nP _part/17/_geo_xyz/0,6,2 34.038715363\nP _part/17/_geo_xyz/0,7,0 0.0\nP _part/17/_geo_xyz/0,7,1 12.303149223\nP _part/17/_geo_xyz/0,7,2 34.038715363\nP _part/17/_geo_xyz/0,8,0 0.0\nP _part/17/_geo_xyz/0,8,1 12.269595146\nP _part/17/_geo_xyz/0,8,2 33.628608704\nP _part/17/_geo_xyz/0,9,0 0.0\nP _part/17/_geo_xyz/0,9,1 12.229330063\nP _part/17/_geo_xyz/0,9,2 33.136482239\nP _part/17/_geo_xyz/1,0,0 4.101049900\nP _part/17/_geo_xyz/1,0,1 12.303149223\nP _part/17/_geo_xyz/1,0,2 32.398292542\nP _part/17/_geo_xyz/1,1,0 4.101049900\nP _part/17/_geo_xyz/1,1,1 12.332676888\nP _part/17/_geo_xyz/1,1,2 32.447505951\nP _part/17/_geo_xyz/1,10,0 4.101049900\nP _part/17/_geo_xyz/1,10,1 12.229330063\nP _part/17/_geo_xyz/1,10,2 32.808399200\nP _part/17/_geo_xyz/1,11,0 4.101049900\nP _part/17/_geo_xyz/1,11,1 12.244093895\nP _part/17/_geo_xyz/1,11,2 32.562335968\nP _part/17/_geo_xyz/1,12,0 4.101049900\nP _part/17/_geo_xyz/1,12,1 12.273621559\nP _part/17/_geo_xyz/1,12,2 32.447505951\nP _part/17/_geo_xyz/1,13,0 4.101049900\nP _part/17/_geo_xyz/1,13,1 12.303149223\nP _part/17/_geo_xyz/1,13,2 32.398292542\nP _part/17/_geo_xyz/1,14,0 0.0\nP _part/17/_geo_xyz/1,14,1 0.0\nP _part/17/_geo_xyz/1,14,2 0.0\nP _part/17/_geo_xyz/1,15,0 0.0\nP _part/17/_geo_xyz/1,15,1 0.0\nP _part/17/_geo_xyz/1,15,2 0.0\nP _part/17/_geo_xyz/1,16,0 0.0\nP _part/17/_geo_xyz/1,16,1 0.0\nP _part/17/_geo_xyz/1,16,2 0.0\nP _part/17/_geo_xyz/1,17,0 0.0\nP _part/17/_geo_xyz/1,17,1 0.0\nP _part/17/_geo_xyz/1,17,2 0.0\nP _part/17/_geo_xyz/1,2,0 4.101049900\nP _part/17/_geo_xyz/1,2,1 12.362204552\nP _part/17/_geo_xyz/1,2,2 32.562335968\nP _part/17/_geo_xyz/1,3,0 4.101049900\nP _part/17/_geo_xyz/1,3,1 12.376968384\nP _part/17/_geo_xyz/1,3,2 32.808399200\nP _part/17/_geo_xyz/1,4,0 4.101049900\nP _part/17/_geo_xyz/1,4,1 12.376968384\nP _part/17/_geo_xyz/1,4,2 33.136482239\nP _part/17/_geo_xyz/1,5,0 4.101049900\nP _part/17/_geo_xyz/1,5,1 12.336703300\nP _part/17/_geo_xyz/1,5,2 33.628608704\nP _part/17/_geo_xyz/1,6,0 4.101049900\nP _part/17/_geo_xyz/1,6,1 12.303149223\nP _part/17/_geo_xyz/1,6,2 34.038715363\nP _part/17/_geo_xyz/1,7,0 4.101049900\nP _part/17/_geo_xyz/1,7,1 12.303149223\nP _part/17/_geo_xyz/1,7,2 34.038715363\nP _part/17/_geo_xyz/1,8,0 4.101049900\nP _part/17/_geo_xyz/1,8,1 12.269595146\nP _part/17/_geo_xyz/1,8,2 33.628608704\nP _part/17/_geo_xyz/1,9,0 4.101049900\nP _part/17/_geo_xyz/1,9,1 12.229330063\nP _part/17/_geo_xyz/1,9,2 33.136482239\nP _part/17/_geo_xyz/10,0,0 0.0\nP _part/17/_geo_xyz/10,0,1 0.0\nP _part/17/_geo_xyz/10,0,2 0.0\nP _part/17/_geo_xyz/10,1,0 0.0\nP _part/17/_geo_xyz/10,1,1 0.0\nP _part/17/_geo_xyz/10,1,2 0.0\nP _part/17/_geo_xyz/10,10,0 0.0\nP _part/17/_geo_xyz/10,10,1 0.0\nP _part/17/_geo_xyz/10,10,2 0.0\nP _part/17/_geo_xyz/10,11,0 0.0\nP _part/17/_geo_xyz/10,11,1 0.0\nP _part/17/_geo_xyz/10,11,2 0.0\nP _part/17/_geo_xyz/10,12,0 0.0\nP _part/17/_geo_xyz/10,12,1 0.0\nP _part/17/_geo_xyz/10,12,2 0.0\nP _part/17/_geo_xyz/10,13,0 0.0\nP _part/17/_geo_xyz/10,13,1 0.0\nP _part/17/_geo_xyz/10,13,2 0.0\nP _part/17/_geo_xyz/10,14,0 0.0\nP _part/17/_geo_xyz/10,14,1 0.0\nP _part/17/_geo_xyz/10,14,2 0.0\nP _part/17/_geo_xyz/10,15,0 0.0\nP _part/17/_geo_xyz/10,15,1 0.0\nP _part/17/_geo_xyz/10,15,2 0.0\nP _part/17/_geo_xyz/10,16,0 0.0\nP _part/17/_geo_xyz/10,16,1 0.0\nP _part/17/_geo_xyz/10,16,2 0.0\nP _part/17/_geo_xyz/10,17,0 0.0\nP _part/17/_geo_xyz/10,17,1 0.0\nP _part/17/_geo_xyz/10,17,2 0.0\nP _part/17/_geo_xyz/10,2,0 0.0\nP _part/17/_geo_xyz/10,2,1 0.0\nP _part/17/_geo_xyz/10,2,2 0.0\nP _part/17/_geo_xyz/10,3,0 0.0\nP _part/17/_geo_xyz/10,3,1 0.0\nP _part/17/_geo_xyz/10,3,2 0.0\nP _part/17/_geo_xyz/10,4,0 0.0\nP _part/17/_geo_xyz/10,4,1 0.0\nP _part/17/_geo_xyz/10,4,2 0.0\nP _part/17/_geo_xyz/10,5,0 0.0\nP _part/17/_geo_xyz/10,5,1 0.0\nP _part/17/_geo_xyz/10,5,2 0.0\nP _part/17/_geo_xyz/10,6,0 0.0\nP _part/17/_geo_xyz/10,6,1 0.0\nP _part/17/_geo_xyz/10,6,2 0.0\nP _part/17/_geo_xyz/10,7,0 0.0\nP _part/17/_geo_xyz/10,7,1 0.0\nP _part/17/_geo_xyz/10,7,2 0.0\nP _part/17/_geo_xyz/10,8,0 0.0\nP _part/17/_geo_xyz/10,8,1 0.0\nP _part/17/_geo_xyz/10,8,2 0.0\nP _part/17/_geo_xyz/10,9,0 0.0\nP _part/17/_geo_xyz/10,9,1 0.0\nP _part/17/_geo_xyz/10,9,2 0.0\nP _part/17/_geo_xyz/11,0,0 0.0\nP _part/17/_geo_xyz/11,0,1 0.0\nP _part/17/_geo_xyz/11,0,2 0.0\nP _part/17/_geo_xyz/11,1,0 0.0\nP _part/17/_geo_xyz/11,1,1 0.0\nP _part/17/_geo_xyz/11,1,2 0.0\nP _part/17/_geo_xyz/11,10,0 0.0\nP _part/17/_geo_xyz/11,10,1 0.0\nP _part/17/_geo_xyz/11,10,2 0.0\nP _part/17/_geo_xyz/11,11,0 0.0\nP _part/17/_geo_xyz/11,11,1 0.0\nP _part/17/_geo_xyz/11,11,2 0.0\nP _part/17/_geo_xyz/11,12,0 0.0\nP _part/17/_geo_xyz/11,12,1 0.0\nP _part/17/_geo_xyz/11,12,2 0.0\nP _part/17/_geo_xyz/11,13,0 0.0\nP _part/17/_geo_xyz/11,13,1 0.0\nP _part/17/_geo_xyz/11,13,2 0.0\nP _part/17/_geo_xyz/11,14,0 0.0\nP _part/17/_geo_xyz/11,14,1 0.0\nP _part/17/_geo_xyz/11,14,2 0.0\nP _part/17/_geo_xyz/11,15,0 0.0\nP _part/17/_geo_xyz/11,15,1 0.0\nP _part/17/_geo_xyz/11,15,2 0.0\nP _part/17/_geo_xyz/11,16,0 0.0\nP _part/17/_geo_xyz/11,16,1 0.0\nP _part/17/_geo_xyz/11,16,2 0.0\nP _part/17/_geo_xyz/11,17,0 0.0\nP _part/17/_geo_xyz/11,17,1 0.0\nP _part/17/_geo_xyz/11,17,2 0.0\nP _part/17/_geo_xyz/11,2,0 0.0\nP _part/17/_geo_xyz/11,2,1 0.0\nP _part/17/_geo_xyz/11,2,2 0.0\nP _part/17/_geo_xyz/11,3,0 0.0\nP _part/17/_geo_xyz/11,3,1 0.0\nP _part/17/_geo_xyz/11,3,2 0.0\nP _part/17/_geo_xyz/11,4,0 0.0\nP _part/17/_geo_xyz/11,4,1 0.0\nP _part/17/_geo_xyz/11,4,2 0.0\nP _part/17/_geo_xyz/11,5,0 0.0\nP _part/17/_geo_xyz/11,5,1 0.0\nP _part/17/_geo_xyz/11,5,2 0.0\nP _part/17/_geo_xyz/11,6,0 0.0\nP _part/17/_geo_xyz/11,6,1 0.0\nP _part/17/_geo_xyz/11,6,2 0.0\nP _part/17/_geo_xyz/11,7,0 0.0\nP _part/17/_geo_xyz/11,7,1 0.0\nP _part/17/_geo_xyz/11,7,2 0.0\nP _part/17/_geo_xyz/11,8,0 0.0\nP _part/17/_geo_xyz/11,8,1 0.0\nP _part/17/_geo_xyz/11,8,2 0.0\nP _part/17/_geo_xyz/11,9,0 0.0\nP _part/17/_geo_xyz/11,9,1 0.0\nP _part/17/_geo_xyz/11,9,2 0.0\nP _part/17/_geo_xyz/12,0,0 0.0\nP _part/17/_geo_xyz/12,0,1 0.0\nP _part/17/_geo_xyz/12,0,2 0.0\nP _part/17/_geo_xyz/12,1,0 0.0\nP _part/17/_geo_xyz/12,1,1 0.0\nP _part/17/_geo_xyz/12,1,2 0.0\nP _part/17/_geo_xyz/12,10,0 0.0\nP _part/17/_geo_xyz/12,10,1 0.0\nP _part/17/_geo_xyz/12,10,2 0.0\nP _part/17/_geo_xyz/12,11,0 0.0\nP _part/17/_geo_xyz/12,11,1 0.0\nP _part/17/_geo_xyz/12,11,2 0.0\nP _part/17/_geo_xyz/12,12,0 0.0\nP _part/17/_geo_xyz/12,12,1 0.0\nP _part/17/_geo_xyz/12,12,2 0.0\nP _part/17/_geo_xyz/12,13,0 0.0\nP _part/17/_geo_xyz/12,13,1 0.0\nP _part/17/_geo_xyz/12,13,2 0.0\nP _part/17/_geo_xyz/12,14,0 0.0\nP _part/17/_geo_xyz/12,14,1 0.0\nP _part/17/_geo_xyz/12,14,2 0.0\nP _part/17/_geo_xyz/12,15,0 0.0\nP _part/17/_geo_xyz/12,15,1 0.0\nP _part/17/_geo_xyz/12,15,2 0.0\nP _part/17/_geo_xyz/12,16,0 0.0\nP _part/17/_geo_xyz/12,16,1 0.0\nP _part/17/_geo_xyz/12,16,2 0.0\nP _part/17/_geo_xyz/12,17,0 0.0\nP _part/17/_geo_xyz/12,17,1 0.0\nP _part/17/_geo_xyz/12,17,2 0.0\nP _part/17/_geo_xyz/12,2,0 0.0\nP _part/17/_geo_xyz/12,2,1 0.0\nP _part/17/_geo_xyz/12,2,2 0.0\nP _part/17/_geo_xyz/12,3,0 0.0\nP _part/17/_geo_xyz/12,3,1 0.0\nP _part/17/_geo_xyz/12,3,2 0.0\nP _part/17/_geo_xyz/12,4,0 0.0\nP _part/17/_geo_xyz/12,4,1 0.0\nP _part/17/_geo_xyz/12,4,2 0.0\nP _part/17/_geo_xyz/12,5,0 0.0\nP _part/17/_geo_xyz/12,5,1 0.0\nP _part/17/_geo_xyz/12,5,2 0.0\nP _part/17/_geo_xyz/12,6,0 0.0\nP _part/17/_geo_xyz/12,6,1 0.0\nP _part/17/_geo_xyz/12,6,2 0.0\nP _part/17/_geo_xyz/12,7,0 0.0\nP _part/17/_geo_xyz/12,7,1 0.0\nP _part/17/_geo_xyz/12,7,2 0.0\nP _part/17/_geo_xyz/12,8,0 0.0\nP _part/17/_geo_xyz/12,8,1 0.0\nP _part/17/_geo_xyz/12,8,2 0.0\nP _part/17/_geo_xyz/12,9,0 0.0\nP _part/17/_geo_xyz/12,9,1 0.0\nP _part/17/_geo_xyz/12,9,2 0.0\nP _part/17/_geo_xyz/13,0,0 0.0\nP _part/17/_geo_xyz/13,0,1 0.0\nP _part/17/_geo_xyz/13,0,2 0.0\nP _part/17/_geo_xyz/13,1,0 0.0\nP _part/17/_geo_xyz/13,1,1 0.0\nP _part/17/_geo_xyz/13,1,2 0.0\nP _part/17/_geo_xyz/13,10,0 0.0\nP _part/17/_geo_xyz/13,10,1 0.0\nP _part/17/_geo_xyz/13,10,2 0.0\nP _part/17/_geo_xyz/13,11,0 0.0\nP _part/17/_geo_xyz/13,11,1 0.0\nP _part/17/_geo_xyz/13,11,2 0.0\nP _part/17/_geo_xyz/13,12,0 0.0\nP _part/17/_geo_xyz/13,12,1 0.0\nP _part/17/_geo_xyz/13,12,2 0.0\nP _part/17/_geo_xyz/13,13,0 0.0\nP _part/17/_geo_xyz/13,13,1 0.0\nP _part/17/_geo_xyz/13,13,2 0.0\nP _part/17/_geo_xyz/13,14,0 0.0\nP _part/17/_geo_xyz/13,14,1 0.0\nP _part/17/_geo_xyz/13,14,2 0.0\nP _part/17/_geo_xyz/13,15,0 0.0\nP _part/17/_geo_xyz/13,15,1 0.0\nP _part/17/_geo_xyz/13,15,2 0.0\nP _part/17/_geo_xyz/13,16,0 0.0\nP _part/17/_geo_xyz/13,16,1 0.0\nP _part/17/_geo_xyz/13,16,2 0.0\nP _part/17/_geo_xyz/13,17,0 0.0\nP _part/17/_geo_xyz/13,17,1 0.0\nP _part/17/_geo_xyz/13,17,2 0.0\nP _part/17/_geo_xyz/13,2,0 0.0\nP _part/17/_geo_xyz/13,2,1 0.0\nP _part/17/_geo_xyz/13,2,2 0.0\nP _part/17/_geo_xyz/13,3,0 0.0\nP _part/17/_geo_xyz/13,3,1 0.0\nP _part/17/_geo_xyz/13,3,2 0.0\nP _part/17/_geo_xyz/13,4,0 0.0\nP _part/17/_geo_xyz/13,4,1 0.0\nP _part/17/_geo_xyz/13,4,2 0.0\nP _part/17/_geo_xyz/13,5,0 0.0\nP _part/17/_geo_xyz/13,5,1 0.0\nP _part/17/_geo_xyz/13,5,2 0.0\nP _part/17/_geo_xyz/13,6,0 0.0\nP _part/17/_geo_xyz/13,6,1 0.0\nP _part/17/_geo_xyz/13,6,2 0.0\nP _part/17/_geo_xyz/13,7,0 0.0\nP _part/17/_geo_xyz/13,7,1 0.0\nP _part/17/_geo_xyz/13,7,2 0.0\nP _part/17/_geo_xyz/13,8,0 0.0\nP _part/17/_geo_xyz/13,8,1 0.0\nP _part/17/_geo_xyz/13,8,2 0.0\nP _part/17/_geo_xyz/13,9,0 0.0\nP _part/17/_geo_xyz/13,9,1 0.0\nP _part/17/_geo_xyz/13,9,2 0.0\nP _part/17/_geo_xyz/14,0,0 0.0\nP _part/17/_geo_xyz/14,0,1 0.0\nP _part/17/_geo_xyz/14,0,2 0.0\nP _part/17/_geo_xyz/14,1,0 0.0\nP _part/17/_geo_xyz/14,1,1 0.0\nP _part/17/_geo_xyz/14,1,2 0.0\nP _part/17/_geo_xyz/14,10,0 0.0\nP _part/17/_geo_xyz/14,10,1 0.0\nP _part/17/_geo_xyz/14,10,2 0.0\nP _part/17/_geo_xyz/14,11,0 0.0\nP _part/17/_geo_xyz/14,11,1 0.0\nP _part/17/_geo_xyz/14,11,2 0.0\nP _part/17/_geo_xyz/14,12,0 0.0\nP _part/17/_geo_xyz/14,12,1 0.0\nP _part/17/_geo_xyz/14,12,2 0.0\nP _part/17/_geo_xyz/14,13,0 0.0\nP _part/17/_geo_xyz/14,13,1 0.0\nP _part/17/_geo_xyz/14,13,2 0.0\nP _part/17/_geo_xyz/14,14,0 0.0\nP _part/17/_geo_xyz/14,14,1 0.0\nP _part/17/_geo_xyz/14,14,2 0.0\nP _part/17/_geo_xyz/14,15,0 0.0\nP _part/17/_geo_xyz/14,15,1 0.0\nP _part/17/_geo_xyz/14,15,2 0.0\nP _part/17/_geo_xyz/14,16,0 0.0\nP _part/17/_geo_xyz/14,16,1 0.0\nP _part/17/_geo_xyz/14,16,2 0.0\nP _part/17/_geo_xyz/14,17,0 0.0\nP _part/17/_geo_xyz/14,17,1 0.0\nP _part/17/_geo_xyz/14,17,2 0.0\nP _part/17/_geo_xyz/14,2,0 0.0\nP _part/17/_geo_xyz/14,2,1 0.0\nP _part/17/_geo_xyz/14,2,2 0.0\nP _part/17/_geo_xyz/14,3,0 0.0\nP _part/17/_geo_xyz/14,3,1 0.0\nP _part/17/_geo_xyz/14,3,2 0.0\nP _part/17/_geo_xyz/14,4,0 0.0\nP _part/17/_geo_xyz/14,4,1 0.0\nP _part/17/_geo_xyz/14,4,2 0.0\nP _part/17/_geo_xyz/14,5,0 0.0\nP _part/17/_geo_xyz/14,5,1 0.0\nP _part/17/_geo_xyz/14,5,2 0.0\nP _part/17/_geo_xyz/14,6,0 0.0\nP _part/17/_geo_xyz/14,6,1 0.0\nP _part/17/_geo_xyz/14,6,2 0.0\nP _part/17/_geo_xyz/14,7,0 0.0\nP _part/17/_geo_xyz/14,7,1 0.0\nP _part/17/_geo_xyz/14,7,2 0.0\nP _part/17/_geo_xyz/14,8,0 0.0\nP _part/17/_geo_xyz/14,8,1 0.0\nP _part/17/_geo_xyz/14,8,2 0.0\nP _part/17/_geo_xyz/14,9,0 0.0\nP _part/17/_geo_xyz/14,9,1 0.0\nP _part/17/_geo_xyz/14,9,2 0.0\nP _part/17/_geo_xyz/15,0,0 0.0\nP _part/17/_geo_xyz/15,0,1 0.0\nP _part/17/_geo_xyz/15,0,2 0.0\nP _part/17/_geo_xyz/15,1,0 0.0\nP _part/17/_geo_xyz/15,1,1 0.0\nP _part/17/_geo_xyz/15,1,2 0.0\nP _part/17/_geo_xyz/15,10,0 0.0\nP _part/17/_geo_xyz/15,10,1 0.0\nP _part/17/_geo_xyz/15,10,2 0.0\nP _part/17/_geo_xyz/15,11,0 0.0\nP _part/17/_geo_xyz/15,11,1 0.0\nP _part/17/_geo_xyz/15,11,2 0.0\nP _part/17/_geo_xyz/15,12,0 0.0\nP _part/17/_geo_xyz/15,12,1 0.0\nP _part/17/_geo_xyz/15,12,2 0.0\nP _part/17/_geo_xyz/15,13,0 0.0\nP _part/17/_geo_xyz/15,13,1 0.0\nP _part/17/_geo_xyz/15,13,2 0.0\nP _part/17/_geo_xyz/15,14,0 0.0\nP _part/17/_geo_xyz/15,14,1 0.0\nP _part/17/_geo_xyz/15,14,2 0.0\nP _part/17/_geo_xyz/15,15,0 0.0\nP _part/17/_geo_xyz/15,15,1 0.0\nP _part/17/_geo_xyz/15,15,2 0.0\nP _part/17/_geo_xyz/15,16,0 0.0\nP _part/17/_geo_xyz/15,16,1 0.0\nP _part/17/_geo_xyz/15,16,2 0.0\nP _part/17/_geo_xyz/15,17,0 0.0\nP _part/17/_geo_xyz/15,17,1 0.0\nP _part/17/_geo_xyz/15,17,2 0.0\nP _part/17/_geo_xyz/15,2,0 0.0\nP _part/17/_geo_xyz/15,2,1 0.0\nP _part/17/_geo_xyz/15,2,2 0.0\nP _part/17/_geo_xyz/15,3,0 0.0\nP _part/17/_geo_xyz/15,3,1 0.0\nP _part/17/_geo_xyz/15,3,2 0.0\nP _part/17/_geo_xyz/15,4,0 0.0\nP _part/17/_geo_xyz/15,4,1 0.0\nP _part/17/_geo_xyz/15,4,2 0.0\nP _part/17/_geo_xyz/15,5,0 0.0\nP _part/17/_geo_xyz/15,5,1 0.0\nP _part/17/_geo_xyz/15,5,2 0.0\nP _part/17/_geo_xyz/15,6,0 0.0\nP _part/17/_geo_xyz/15,6,1 0.0\nP _part/17/_geo_xyz/15,6,2 0.0\nP _part/17/_geo_xyz/15,7,0 0.0\nP _part/17/_geo_xyz/15,7,1 0.0\nP _part/17/_geo_xyz/15,7,2 0.0\nP _part/17/_geo_xyz/15,8,0 0.0\nP _part/17/_geo_xyz/15,8,1 0.0\nP _part/17/_geo_xyz/15,8,2 0.0\nP _part/17/_geo_xyz/15,9,0 0.0\nP _part/17/_geo_xyz/15,9,1 0.0\nP _part/17/_geo_xyz/15,9,2 0.0\nP _part/17/_geo_xyz/16,0,0 0.0\nP _part/17/_geo_xyz/16,0,1 0.0\nP _part/17/_geo_xyz/16,0,2 0.0\nP _part/17/_geo_xyz/16,1,0 0.0\nP _part/17/_geo_xyz/16,1,1 0.0\nP _part/17/_geo_xyz/16,1,2 0.0\nP _part/17/_geo_xyz/16,10,0 0.0\nP _part/17/_geo_xyz/16,10,1 0.0\nP _part/17/_geo_xyz/16,10,2 0.0\nP _part/17/_geo_xyz/16,11,0 0.0\nP _part/17/_geo_xyz/16,11,1 0.0\nP _part/17/_geo_xyz/16,11,2 0.0\nP _part/17/_geo_xyz/16,12,0 0.0\nP _part/17/_geo_xyz/16,12,1 0.0\nP _part/17/_geo_xyz/16,12,2 0.0\nP _part/17/_geo_xyz/16,13,0 0.0\nP _part/17/_geo_xyz/16,13,1 0.0\nP _part/17/_geo_xyz/16,13,2 0.0\nP _part/17/_geo_xyz/16,14,0 0.0\nP _part/17/_geo_xyz/16,14,1 0.0\nP _part/17/_geo_xyz/16,14,2 0.0\nP _part/17/_geo_xyz/16,15,0 0.0\nP _part/17/_geo_xyz/16,15,1 0.0\nP _part/17/_geo_xyz/16,15,2 0.0\nP _part/17/_geo_xyz/16,16,0 0.0\nP _part/17/_geo_xyz/16,16,1 0.0\nP _part/17/_geo_xyz/16,16,2 0.0\nP _part/17/_geo_xyz/16,17,0 0.0\nP _part/17/_geo_xyz/16,17,1 0.0\nP _part/17/_geo_xyz/16,17,2 0.0\nP _part/17/_geo_xyz/16,2,0 0.0\nP _part/17/_geo_xyz/16,2,1 0.0\nP _part/17/_geo_xyz/16,2,2 0.0\nP _part/17/_geo_xyz/16,3,0 0.0\nP _part/17/_geo_xyz/16,3,1 0.0\nP _part/17/_geo_xyz/16,3,2 0.0\nP _part/17/_geo_xyz/16,4,0 0.0\nP _part/17/_geo_xyz/16,4,1 0.0\nP _part/17/_geo_xyz/16,4,2 0.0\nP _part/17/_geo_xyz/16,5,0 0.0\nP _part/17/_geo_xyz/16,5,1 0.0\nP _part/17/_geo_xyz/16,5,2 0.0\nP _part/17/_geo_xyz/16,6,0 0.0\nP _part/17/_geo_xyz/16,6,1 0.0\nP _part/17/_geo_xyz/16,6,2 0.0\nP _part/17/_geo_xyz/16,7,0 0.0\nP _part/17/_geo_xyz/16,7,1 0.0\nP _part/17/_geo_xyz/16,7,2 0.0\nP _part/17/_geo_xyz/16,8,0 0.0\nP _part/17/_geo_xyz/16,8,1 0.0\nP _part/17/_geo_xyz/16,8,2 0.0\nP _part/17/_geo_xyz/16,9,0 0.0\nP _part/17/_geo_xyz/16,9,1 0.0\nP _part/17/_geo_xyz/16,9,2 0.0\nP _part/17/_geo_xyz/17,0,0 0.0\nP _part/17/_geo_xyz/17,0,1 0.0\nP _part/17/_geo_xyz/17,0,2 0.0\nP _part/17/_geo_xyz/17,1,0 0.0\nP _part/17/_geo_xyz/17,1,1 0.0\nP _part/17/_geo_xyz/17,1,2 0.0\nP _part/17/_geo_xyz/17,10,0 0.0\nP _part/17/_geo_xyz/17,10,1 0.0\nP _part/17/_geo_xyz/17,10,2 0.0\nP _part/17/_geo_xyz/17,11,0 0.0\nP _part/17/_geo_xyz/17,11,1 0.0\nP _part/17/_geo_xyz/17,11,2 0.0\nP _part/17/_geo_xyz/17,12,0 0.0\nP _part/17/_geo_xyz/17,12,1 0.0\nP _part/17/_geo_xyz/17,12,2 0.0\nP _part/17/_geo_xyz/17,13,0 0.0\nP _part/17/_geo_xyz/17,13,1 0.0\nP _part/17/_geo_xyz/17,13,2 0.0\nP _part/17/_geo_xyz/17,14,0 0.0\nP _part/17/_geo_xyz/17,14,1 0.0\nP _part/17/_geo_xyz/17,14,2 0.0\nP _part/17/_geo_xyz/17,15,0 0.0\nP _part/17/_geo_xyz/17,15,1 0.0\nP _part/17/_geo_xyz/17,15,2 0.0\nP _part/17/_geo_xyz/17,16,0 0.0\nP _part/17/_geo_xyz/17,16,1 0.0\nP _part/17/_geo_xyz/17,16,2 0.0\nP _part/17/_geo_xyz/17,17,0 0.0\nP _part/17/_geo_xyz/17,17,1 0.0\nP _part/17/_geo_xyz/17,17,2 0.0\nP _part/17/_geo_xyz/17,2,0 0.0\nP _part/17/_geo_xyz/17,2,1 0.0\nP _part/17/_geo_xyz/17,2,2 0.0\nP _part/17/_geo_xyz/17,3,0 0.0\nP _part/17/_geo_xyz/17,3,1 0.0\nP _part/17/_geo_xyz/17,3,2 0.0\nP _part/17/_geo_xyz/17,4,0 0.0\nP _part/17/_geo_xyz/17,4,1 0.0\nP _part/17/_geo_xyz/17,4,2 0.0\nP _part/17/_geo_xyz/17,5,0 0.0\nP _part/17/_geo_xyz/17,5,1 0.0\nP _part/17/_geo_xyz/17,5,2 0.0\nP _part/17/_geo_xyz/17,6,0 0.0\nP _part/17/_geo_xyz/17,6,1 0.0\nP _part/17/_geo_xyz/17,6,2 0.0\nP _part/17/_geo_xyz/17,7,0 0.0\nP _part/17/_geo_xyz/17,7,1 0.0\nP _part/17/_geo_xyz/17,7,2 0.0\nP _part/17/_geo_xyz/17,8,0 0.0\nP _part/17/_geo_xyz/17,8,1 0.0\nP _part/17/_geo_xyz/17,8,2 0.0\nP _part/17/_geo_xyz/17,9,0 0.0\nP _part/17/_geo_xyz/17,9,1 0.0\nP _part/17/_geo_xyz/17,9,2 0.0\nP _part/17/_geo_xyz/18,0,0 0.0\nP _part/17/_geo_xyz/18,0,1 0.0\nP _part/17/_geo_xyz/18,0,2 0.0\nP _part/17/_geo_xyz/18,1,0 0.0\nP _part/17/_geo_xyz/18,1,1 0.0\nP _part/17/_geo_xyz/18,1,2 0.0\nP _part/17/_geo_xyz/18,10,0 0.0\nP _part/17/_geo_xyz/18,10,1 0.0\nP _part/17/_geo_xyz/18,10,2 0.0\nP _part/17/_geo_xyz/18,11,0 0.0\nP _part/17/_geo_xyz/18,11,1 0.0\nP _part/17/_geo_xyz/18,11,2 0.0\nP _part/17/_geo_xyz/18,12,0 0.0\nP _part/17/_geo_xyz/18,12,1 0.0\nP _part/17/_geo_xyz/18,12,2 0.0\nP _part/17/_geo_xyz/18,13,0 0.0\nP _part/17/_geo_xyz/18,13,1 0.0\nP _part/17/_geo_xyz/18,13,2 0.0\nP _part/17/_geo_xyz/18,14,0 0.0\nP _part/17/_geo_xyz/18,14,1 0.0\nP _part/17/_geo_xyz/18,14,2 0.0\nP _part/17/_geo_xyz/18,15,0 0.0\nP _part/17/_geo_xyz/18,15,1 0.0\nP _part/17/_geo_xyz/18,15,2 0.0\nP _part/17/_geo_xyz/18,16,0 0.0\nP _part/17/_geo_xyz/18,16,1 0.0\nP _part/17/_geo_xyz/18,16,2 0.0\nP _part/17/_geo_xyz/18,17,0 0.0\nP _part/17/_geo_xyz/18,17,1 0.0\nP _part/17/_geo_xyz/18,17,2 0.0\nP _part/17/_geo_xyz/18,2,0 0.0\nP _part/17/_geo_xyz/18,2,1 0.0\nP _part/17/_geo_xyz/18,2,2 0.0\nP _part/17/_geo_xyz/18,3,0 0.0\nP _part/17/_geo_xyz/18,3,1 0.0\nP _part/17/_geo_xyz/18,3,2 0.0\nP _part/17/_geo_xyz/18,4,0 0.0\nP _part/17/_geo_xyz/18,4,1 0.0\nP _part/17/_geo_xyz/18,4,2 0.0\nP _part/17/_geo_xyz/18,5,0 0.0\nP _part/17/_geo_xyz/18,5,1 0.0\nP _part/17/_geo_xyz/18,5,2 0.0\nP _part/17/_geo_xyz/18,6,0 0.0\nP _part/17/_geo_xyz/18,6,1 0.0\nP _part/17/_geo_xyz/18,6,2 0.0\nP _part/17/_geo_xyz/18,7,0 0.0\nP _part/17/_geo_xyz/18,7,1 0.0\nP _part/17/_geo_xyz/18,7,2 0.0\nP _part/17/_geo_xyz/18,8,0 0.0\nP _part/17/_geo_xyz/18,8,1 0.0\nP _part/17/_geo_xyz/18,8,2 0.0\nP _part/17/_geo_xyz/18,9,0 0.0\nP _part/17/_geo_xyz/18,9,1 0.0\nP _part/17/_geo_xyz/18,9,2 0.0\nP _part/17/_geo_xyz/19,0,0 0.0\nP _part/17/_geo_xyz/19,0,1 0.0\nP _part/17/_geo_xyz/19,0,2 0.0\nP _part/17/_geo_xyz/19,1,0 0.0\nP _part/17/_geo_xyz/19,1,1 0.0\nP _part/17/_geo_xyz/19,1,2 0.0\nP _part/17/_geo_xyz/19,10,0 0.0\nP _part/17/_geo_xyz/19,10,1 0.0\nP _part/17/_geo_xyz/19,10,2 0.0\nP _part/17/_geo_xyz/19,11,0 0.0\nP _part/17/_geo_xyz/19,11,1 0.0\nP _part/17/_geo_xyz/19,11,2 0.0\nP _part/17/_geo_xyz/19,12,0 0.0\nP _part/17/_geo_xyz/19,12,1 0.0\nP _part/17/_geo_xyz/19,12,2 0.0\nP _part/17/_geo_xyz/19,13,0 0.0\nP _part/17/_geo_xyz/19,13,1 0.0\nP _part/17/_geo_xyz/19,13,2 0.0\nP _part/17/_geo_xyz/19,14,0 0.0\nP _part/17/_geo_xyz/19,14,1 0.0\nP _part/17/_geo_xyz/19,14,2 0.0\nP _part/17/_geo_xyz/19,15,0 0.0\nP _part/17/_geo_xyz/19,15,1 0.0\nP _part/17/_geo_xyz/19,15,2 0.0\nP _part/17/_geo_xyz/19,16,0 0.0\nP _part/17/_geo_xyz/19,16,1 0.0\nP _part/17/_geo_xyz/19,16,2 0.0\nP _part/17/_geo_xyz/19,17,0 0.0\nP _part/17/_geo_xyz/19,17,1 0.0\nP _part/17/_geo_xyz/19,17,2 0.0\nP _part/17/_geo_xyz/19,2,0 0.0\nP _part/17/_geo_xyz/19,2,1 0.0\nP _part/17/_geo_xyz/19,2,2 0.0\nP _part/17/_geo_xyz/19,3,0 0.0\nP _part/17/_geo_xyz/19,3,1 0.0\nP _part/17/_geo_xyz/19,3,2 0.0\nP _part/17/_geo_xyz/19,4,0 0.0\nP _part/17/_geo_xyz/19,4,1 0.0\nP _part/17/_geo_xyz/19,4,2 0.0\nP _part/17/_geo_xyz/19,5,0 0.0\nP _part/17/_geo_xyz/19,5,1 0.0\nP _part/17/_geo_xyz/19,5,2 0.0\nP _part/17/_geo_xyz/19,6,0 0.0\nP _part/17/_geo_xyz/19,6,1 0.0\nP _part/17/_geo_xyz/19,6,2 0.0\nP _part/17/_geo_xyz/19,7,0 0.0\nP _part/17/_geo_xyz/19,7,1 0.0\nP _part/17/_geo_xyz/19,7,2 0.0\nP _part/17/_geo_xyz/19,8,0 0.0\nP _part/17/_geo_xyz/19,8,1 0.0\nP _part/17/_geo_xyz/19,8,2 0.0\nP _part/17/_geo_xyz/19,9,0 0.0\nP _part/17/_geo_xyz/19,9,1 0.0\nP _part/17/_geo_xyz/19,9,2 0.0\nP _part/17/_geo_xyz/2,0,0 4.101049900\nP _part/17/_geo_xyz/2,0,1 12.303149223\nP _part/17/_geo_xyz/2,0,2 32.398292542\nP _part/17/_geo_xyz/2,1,0 4.101049900\nP _part/17/_geo_xyz/2,1,1 12.332676888\nP _part/17/_geo_xyz/2,1,2 32.447505951\nP _part/17/_geo_xyz/2,10,0 4.101049900\nP _part/17/_geo_xyz/2,10,1 12.229330063\nP _part/17/_geo_xyz/2,10,2 32.808399200\nP _part/17/_geo_xyz/2,11,0 4.101049900\nP _part/17/_geo_xyz/2,11,1 12.244093895\nP _part/17/_geo_xyz/2,11,2 32.562335968\nP _part/17/_geo_xyz/2,12,0 4.101049900\nP _part/17/_geo_xyz/2,12,1 12.273621559\nP _part/17/_geo_xyz/2,12,2 32.447505951\nP _part/17/_geo_xyz/2,13,0 4.101049900\nP _part/17/_geo_xyz/2,13,1 12.303149223\nP _part/17/_geo_xyz/2,13,2 32.398292542\nP _part/17/_geo_xyz/2,14,0 0.0\nP _part/17/_geo_xyz/2,14,1 0.0\nP _part/17/_geo_xyz/2,14,2 0.0\nP _part/17/_geo_xyz/2,15,0 0.0\nP _part/17/_geo_xyz/2,15,1 0.0\nP _part/17/_geo_xyz/2,15,2 0.0\nP _part/17/_geo_xyz/2,16,0 0.0\nP _part/17/_geo_xyz/2,16,1 0.0\nP _part/17/_geo_xyz/2,16,2 0.0\nP _part/17/_geo_xyz/2,17,0 0.0\nP _part/17/_geo_xyz/2,17,1 0.0\nP _part/17/_geo_xyz/2,17,2 0.0\nP _part/17/_geo_xyz/2,2,0 4.101049900\nP _part/17/_geo_xyz/2,2,1 12.362204552\nP _part/17/_geo_xyz/2,2,2 32.562335968\nP _part/17/_geo_xyz/2,3,0 4.101049900\nP _part/17/_geo_xyz/2,3,1 12.376968384\nP _part/17/_geo_xyz/2,3,2 32.808399200\nP _part/17/_geo_xyz/2,4,0 4.101049900\nP _part/17/_geo_xyz/2,4,1 12.376968384\nP _part/17/_geo_xyz/2,4,2 33.136482239\nP _part/17/_geo_xyz/2,5,0 4.101049900\nP _part/17/_geo_xyz/2,5,1 12.336703300\nP _part/17/_geo_xyz/2,5,2 33.628608704\nP _part/17/_geo_xyz/2,6,0 4.101049900\nP _part/17/_geo_xyz/2,6,1 12.303149223\nP _part/17/_geo_xyz/2,6,2 34.038715363\nP _part/17/_geo_xyz/2,7,0 4.101049900\nP _part/17/_geo_xyz/2,7,1 12.303149223\nP _part/17/_geo_xyz/2,7,2 34.038715363\nP _part/17/_geo_xyz/2,8,0 4.101049900\nP _part/17/_geo_xyz/2,8,1 12.269595146\nP _part/17/_geo_xyz/2,8,2 33.628608704\nP _part/17/_geo_xyz/2,9,0 4.101049900\nP _part/17/_geo_xyz/2,9,1 12.229330063\nP _part/17/_geo_xyz/2,9,2 33.136482239\nP _part/17/_geo_xyz/3,0,0 8.202099800\nP _part/17/_geo_xyz/3,0,1 12.303149223\nP _part/17/_geo_xyz/3,0,2 32.398292542\nP _part/17/_geo_xyz/3,1,0 8.202099800\nP _part/17/_geo_xyz/3,1,1 12.332676888\nP _part/17/_geo_xyz/3,1,2 32.447505951\nP _part/17/_geo_xyz/3,10,0 8.202099800\nP _part/17/_geo_xyz/3,10,1 12.229330063\nP _part/17/_geo_xyz/3,10,2 32.808399200\nP _part/17/_geo_xyz/3,11,0 8.202099800\nP _part/17/_geo_xyz/3,11,1 12.244093895\nP _part/17/_geo_xyz/3,11,2 32.562335968\nP _part/17/_geo_xyz/3,12,0 8.202099800\nP _part/17/_geo_xyz/3,12,1 12.273621559\nP _part/17/_geo_xyz/3,12,2 32.447505951\nP _part/17/_geo_xyz/3,13,0 8.202099800\nP _part/17/_geo_xyz/3,13,1 12.303149223\nP _part/17/_geo_xyz/3,13,2 32.398292542\nP _part/17/_geo_xyz/3,14,0 0.0\nP _part/17/_geo_xyz/3,14,1 0.0\nP _part/17/_geo_xyz/3,14,2 0.0\nP _part/17/_geo_xyz/3,15,0 0.0\nP _part/17/_geo_xyz/3,15,1 0.0\nP _part/17/_geo_xyz/3,15,2 0.0\nP _part/17/_geo_xyz/3,16,0 0.0\nP _part/17/_geo_xyz/3,16,1 0.0\nP _part/17/_geo_xyz/3,16,2 0.0\nP _part/17/_geo_xyz/3,17,0 0.0\nP _part/17/_geo_xyz/3,17,1 0.0\nP _part/17/_geo_xyz/3,17,2 0.0\nP _part/17/_geo_xyz/3,2,0 8.202099800\nP _part/17/_geo_xyz/3,2,1 12.362204552\nP _part/17/_geo_xyz/3,2,2 32.562335968\nP _part/17/_geo_xyz/3,3,0 8.202099800\nP _part/17/_geo_xyz/3,3,1 12.376968384\nP _part/17/_geo_xyz/3,3,2 32.808399200\nP _part/17/_geo_xyz/3,4,0 8.202099800\nP _part/17/_geo_xyz/3,4,1 12.376968384\nP _part/17/_geo_xyz/3,4,2 33.136482239\nP _part/17/_geo_xyz/3,5,0 8.202099800\nP _part/17/_geo_xyz/3,5,1 12.336703300\nP _part/17/_geo_xyz/3,5,2 33.628608704\nP _part/17/_geo_xyz/3,6,0 8.202099800\nP _part/17/_geo_xyz/3,6,1 12.303149223\nP _part/17/_geo_xyz/3,6,2 34.038715363\nP _part/17/_geo_xyz/3,7,0 8.202099800\nP _part/17/_geo_xyz/3,7,1 12.303149223\nP _part/17/_geo_xyz/3,7,2 34.038715363\nP _part/17/_geo_xyz/3,8,0 8.202099800\nP _part/17/_geo_xyz/3,8,1 12.269595146\nP _part/17/_geo_xyz/3,8,2 33.628608704\nP _part/17/_geo_xyz/3,9,0 8.202099800\nP _part/17/_geo_xyz/3,9,1 12.229330063\nP _part/17/_geo_xyz/3,9,2 33.136482239\nP _part/17/_geo_xyz/4,0,0 8.202099800\nP _part/17/_geo_xyz/4,0,1 12.303149223\nP _part/17/_geo_xyz/4,0,2 32.398292542\nP _part/17/_geo_xyz/4,1,0 8.202099800\nP _part/17/_geo_xyz/4,1,1 12.332676888\nP _part/17/_geo_xyz/4,1,2 32.447505951\nP _part/17/_geo_xyz/4,10,0 8.202099800\nP _part/17/_geo_xyz/4,10,1 12.229330063\nP _part/17/_geo_xyz/4,10,2 32.808399200\nP _part/17/_geo_xyz/4,11,0 8.202099800\nP _part/17/_geo_xyz/4,11,1 12.244093895\nP _part/17/_geo_xyz/4,11,2 32.562335968\nP _part/17/_geo_xyz/4,12,0 8.202099800\nP _part/17/_geo_xyz/4,12,1 12.273621559\nP _part/17/_geo_xyz/4,12,2 32.447505951\nP _part/17/_geo_xyz/4,13,0 8.202099800\nP _part/17/_geo_xyz/4,13,1 12.303149223\nP _part/17/_geo_xyz/4,13,2 32.398292542\nP _part/17/_geo_xyz/4,14,0 0.0\nP _part/17/_geo_xyz/4,14,1 0.0\nP _part/17/_geo_xyz/4,14,2 0.0\nP _part/17/_geo_xyz/4,15,0 0.0\nP _part/17/_geo_xyz/4,15,1 0.0\nP _part/17/_geo_xyz/4,15,2 0.0\nP _part/17/_geo_xyz/4,16,0 0.0\nP _part/17/_geo_xyz/4,16,1 0.0\nP _part/17/_geo_xyz/4,16,2 0.0\nP _part/17/_geo_xyz/4,17,0 0.0\nP _part/17/_geo_xyz/4,17,1 0.0\nP _part/17/_geo_xyz/4,17,2 0.0\nP _part/17/_geo_xyz/4,2,0 8.202099800\nP _part/17/_geo_xyz/4,2,1 12.362204552\nP _part/17/_geo_xyz/4,2,2 32.562335968\nP _part/17/_geo_xyz/4,3,0 8.202099800\nP _part/17/_geo_xyz/4,3,1 12.376968384\nP _part/17/_geo_xyz/4,3,2 32.808399200\nP _part/17/_geo_xyz/4,4,0 8.202099800\nP _part/17/_geo_xyz/4,4,1 12.376968384\nP _part/17/_geo_xyz/4,4,2 33.136482239\nP _part/17/_geo_xyz/4,5,0 8.202099800\nP _part/17/_geo_xyz/4,5,1 12.336703300\nP _part/17/_geo_xyz/4,5,2 33.628608704\nP _part/17/_geo_xyz/4,6,0 8.202099800\nP _part/17/_geo_xyz/4,6,1 12.303149223\nP _part/17/_geo_xyz/4,6,2 34.038715363\nP _part/17/_geo_xyz/4,7,0 8.202099800\nP _part/17/_geo_xyz/4,7,1 12.303149223\nP _part/17/_geo_xyz/4,7,2 34.038715363\nP _part/17/_geo_xyz/4,8,0 8.202099800\nP _part/17/_geo_xyz/4,8,1 12.269595146\nP _part/17/_geo_xyz/4,8,2 33.628608704\nP _part/17/_geo_xyz/4,9,0 8.202099800\nP _part/17/_geo_xyz/4,9,1 12.229330063\nP _part/17/_geo_xyz/4,9,2 33.136482239\nP _part/17/_geo_xyz/5,0,0 8.202099800\nP _part/17/_geo_xyz/5,0,1 12.303149223\nP _part/17/_geo_xyz/5,0,2 32.398292542\nP _part/17/_geo_xyz/5,1,0 8.202099800\nP _part/17/_geo_xyz/5,1,1 12.332676888\nP _part/17/_geo_xyz/5,1,2 32.447505951\nP _part/17/_geo_xyz/5,10,0 8.202099800\nP _part/17/_geo_xyz/5,10,1 12.229330063\nP _part/17/_geo_xyz/5,10,2 32.808399200\nP _part/17/_geo_xyz/5,11,0 8.202099800\nP _part/17/_geo_xyz/5,11,1 12.244093895\nP _part/17/_geo_xyz/5,11,2 32.562335968\nP _part/17/_geo_xyz/5,12,0 8.202099800\nP _part/17/_geo_xyz/5,12,1 12.273621559\nP _part/17/_geo_xyz/5,12,2 32.447505951\nP _part/17/_geo_xyz/5,13,0 8.202099800\nP _part/17/_geo_xyz/5,13,1 12.303149223\nP _part/17/_geo_xyz/5,13,2 32.398292542\nP _part/17/_geo_xyz/5,14,0 0.0\nP _part/17/_geo_xyz/5,14,1 0.0\nP _part/17/_geo_xyz/5,14,2 0.0\nP _part/17/_geo_xyz/5,15,0 0.0\nP _part/17/_geo_xyz/5,15,1 0.0\nP _part/17/_geo_xyz/5,15,2 0.0\nP _part/17/_geo_xyz/5,16,0 0.0\nP _part/17/_geo_xyz/5,16,1 0.0\nP _part/17/_geo_xyz/5,16,2 0.0\nP _part/17/_geo_xyz/5,17,0 0.0\nP _part/17/_geo_xyz/5,17,1 0.0\nP _part/17/_geo_xyz/5,17,2 0.0\nP _part/17/_geo_xyz/5,2,0 8.202099800\nP _part/17/_geo_xyz/5,2,1 12.362204552\nP _part/17/_geo_xyz/5,2,2 32.562335968\nP _part/17/_geo_xyz/5,3,0 8.202099800\nP _part/17/_geo_xyz/5,3,1 12.376968384\nP _part/17/_geo_xyz/5,3,2 32.808399200\nP _part/17/_geo_xyz/5,4,0 8.202099800\nP _part/17/_geo_xyz/5,4,1 12.376968384\nP _part/17/_geo_xyz/5,4,2 33.136482239\nP _part/17/_geo_xyz/5,5,0 8.202099800\nP _part/17/_geo_xyz/5,5,1 12.303149223\nP _part/17/_geo_xyz/5,5,2 34.038715363\nP _part/17/_geo_xyz/5,6,0 8.202099800\nP _part/17/_geo_xyz/5,6,1 12.303149223\nP _part/17/_geo_xyz/5,6,2 34.038715363\nP _part/17/_geo_xyz/5,7,0 8.202099800\nP _part/17/_geo_xyz/5,7,1 12.303149223\nP _part/17/_geo_xyz/5,7,2 34.038715363\nP _part/17/_geo_xyz/5,8,0 8.202099800\nP _part/17/_geo_xyz/5,8,1 12.303149223\nP _part/17/_geo_xyz/5,8,2 34.038715363\nP _part/17/_geo_xyz/5,9,0 8.202099800\nP _part/17/_geo_xyz/5,9,1 12.229330063\nP _part/17/_geo_xyz/5,9,2 33.136482239\nP _part/17/_geo_xyz/6,0,0 8.202099800\nP _part/17/_geo_xyz/6,0,1 12.303149223\nP _part/17/_geo_xyz/6,0,2 32.398292542\nP _part/17/_geo_xyz/6,1,0 8.202099800\nP _part/17/_geo_xyz/6,1,1 12.332676888\nP _part/17/_geo_xyz/6,1,2 32.447505951\nP _part/17/_geo_xyz/6,10,0 8.202099800\nP _part/17/_geo_xyz/6,10,1 12.229330063\nP _part/17/_geo_xyz/6,10,2 32.808399200\nP _part/17/_geo_xyz/6,11,0 8.202099800\nP _part/17/_geo_xyz/6,11,1 12.244093895\nP _part/17/_geo_xyz/6,11,2 32.562335968\nP _part/17/_geo_xyz/6,12,0 8.202099800\nP _part/17/_geo_xyz/6,12,1 12.273621559\nP _part/17/_geo_xyz/6,12,2 32.447505951\nP _part/17/_geo_xyz/6,13,0 8.202099800\nP _part/17/_geo_xyz/6,13,1 12.303149223\nP _part/17/_geo_xyz/6,13,2 32.398292542\nP _part/17/_geo_xyz/6,14,0 0.0\nP _part/17/_geo_xyz/6,14,1 0.0\nP _part/17/_geo_xyz/6,14,2 0.0\nP _part/17/_geo_xyz/6,15,0 0.0\nP _part/17/_geo_xyz/6,15,1 0.0\nP _part/17/_geo_xyz/6,15,2 0.0\nP _part/17/_geo_xyz/6,16,0 0.0\nP _part/17/_geo_xyz/6,16,1 0.0\nP _part/17/_geo_xyz/6,16,2 0.0\nP _part/17/_geo_xyz/6,17,0 0.0\nP _part/17/_geo_xyz/6,17,1 0.0\nP _part/17/_geo_xyz/6,17,2 0.0\nP _part/17/_geo_xyz/6,2,0 8.202099800\nP _part/17/_geo_xyz/6,2,1 12.362204552\nP _part/17/_geo_xyz/6,2,2 32.562335968\nP _part/17/_geo_xyz/6,3,0 8.202099800\nP _part/17/_geo_xyz/6,3,1 12.376968384\nP _part/17/_geo_xyz/6,3,2 32.808399200\nP _part/17/_geo_xyz/6,4,0 8.202099800\nP _part/17/_geo_xyz/6,4,1 12.376968384\nP _part/17/_geo_xyz/6,4,2 33.136482239\nP _part/17/_geo_xyz/6,5,0 8.202099800\nP _part/17/_geo_xyz/6,5,1 12.303149223\nP _part/17/_geo_xyz/6,5,2 34.038715363\nP _part/17/_geo_xyz/6,6,0 8.202099800\nP _part/17/_geo_xyz/6,6,1 12.303149223\nP _part/17/_geo_xyz/6,6,2 34.038715363\nP _part/17/_geo_xyz/6,7,0 8.202099800\nP _part/17/_geo_xyz/6,7,1 12.303149223\nP _part/17/_geo_xyz/6,7,2 34.038715363\nP _part/17/_geo_xyz/6,8,0 8.202099800\nP _part/17/_geo_xyz/6,8,1 12.303149223\nP _part/17/_geo_xyz/6,8,2 34.038715363\nP _part/17/_geo_xyz/6,9,0 8.202099800\nP _part/17/_geo_xyz/6,9,1 12.229330063\nP _part/17/_geo_xyz/6,9,2 33.136482239\nP _part/17/_geo_xyz/7,0,0 8.202099800\nP _part/17/_geo_xyz/7,0,1 12.303149223\nP _part/17/_geo_xyz/7,0,2 32.398292542\nP _part/17/_geo_xyz/7,1,0 8.202099800\nP _part/17/_geo_xyz/7,1,1 12.332676888\nP _part/17/_geo_xyz/7,1,2 32.447505951\nP _part/17/_geo_xyz/7,10,0 8.202099800\nP _part/17/_geo_xyz/7,10,1 12.229330063\nP _part/17/_geo_xyz/7,10,2 32.808399200\nP _part/17/_geo_xyz/7,11,0 8.202099800\nP _part/17/_geo_xyz/7,11,1 12.244093895\nP _part/17/_geo_xyz/7,11,2 32.562335968\nP _part/17/_geo_xyz/7,12,0 8.202099800\nP _part/17/_geo_xyz/7,12,1 12.273621559\nP _part/17/_geo_xyz/7,12,2 32.447505951\nP _part/17/_geo_xyz/7,13,0 8.202099800\nP _part/17/_geo_xyz/7,13,1 12.303149223\nP _part/17/_geo_xyz/7,13,2 32.398292542\nP _part/17/_geo_xyz/7,14,0 0.0\nP _part/17/_geo_xyz/7,14,1 0.0\nP _part/17/_geo_xyz/7,14,2 0.0\nP _part/17/_geo_xyz/7,15,0 0.0\nP _part/17/_geo_xyz/7,15,1 0.0\nP _part/17/_geo_xyz/7,15,2 0.0\nP _part/17/_geo_xyz/7,16,0 0.0\nP _part/17/_geo_xyz/7,16,1 0.0\nP _part/17/_geo_xyz/7,16,2 0.0\nP _part/17/_geo_xyz/7,17,0 0.0\nP _part/17/_geo_xyz/7,17,1 0.0\nP _part/17/_geo_xyz/7,17,2 0.0\nP _part/17/_geo_xyz/7,2,0 8.202099800\nP _part/17/_geo_xyz/7,2,1 12.362204552\nP _part/17/_geo_xyz/7,2,2 32.562335968\nP _part/17/_geo_xyz/7,3,0 8.202099800\nP _part/17/_geo_xyz/7,3,1 12.376968384\nP _part/17/_geo_xyz/7,3,2 32.808399200\nP _part/17/_geo_xyz/7,4,0 8.202099800\nP _part/17/_geo_xyz/7,4,1 12.376968384\nP _part/17/_geo_xyz/7,4,2 33.136482239\nP _part/17/_geo_xyz/7,5,0 8.202099800\nP _part/17/_geo_xyz/7,5,1 12.303149223\nP _part/17/_geo_xyz/7,5,2 34.038715363\nP _part/17/_geo_xyz/7,6,0 8.202099800\nP _part/17/_geo_xyz/7,6,1 12.303149223\nP _part/17/_geo_xyz/7,6,2 34.038715363\nP _part/17/_geo_xyz/7,7,0 8.202099800\nP _part/17/_geo_xyz/7,7,1 12.303149223\nP _part/17/_geo_xyz/7,7,2 34.038715363\nP _part/17/_geo_xyz/7,8,0 8.202099800\nP _part/17/_geo_xyz/7,8,1 12.303149223\nP _part/17/_geo_xyz/7,8,2 34.038715363\nP _part/17/_geo_xyz/7,9,0 8.202099800\nP _part/17/_geo_xyz/7,9,1 12.229330063\nP _part/17/_geo_xyz/7,9,2 33.136482239\nP _part/17/_geo_xyz/8,0,0 8.202099800\nP _part/17/_geo_xyz/8,0,1 12.303149223\nP _part/17/_geo_xyz/8,0,2 32.398292542\nP _part/17/_geo_xyz/8,1,0 8.202099800\nP _part/17/_geo_xyz/8,1,1 12.332676888\nP _part/17/_geo_xyz/8,1,2 32.447505951\nP _part/17/_geo_xyz/8,10,0 8.202099800\nP _part/17/_geo_xyz/8,10,1 12.229330063\nP _part/17/_geo_xyz/8,10,2 32.808399200\nP _part/17/_geo_xyz/8,11,0 8.202099800\nP _part/17/_geo_xyz/8,11,1 12.244093895\nP _part/17/_geo_xyz/8,11,2 32.562335968\nP _part/17/_geo_xyz/8,12,0 8.202099800\nP _part/17/_geo_xyz/8,12,1 12.273621559\nP _part/17/_geo_xyz/8,12,2 32.447505951\nP _part/17/_geo_xyz/8,13,0 8.202099800\nP _part/17/_geo_xyz/8,13,1 12.303149223\nP _part/17/_geo_xyz/8,13,2 32.398292542\nP _part/17/_geo_xyz/8,14,0 0.0\nP _part/17/_geo_xyz/8,14,1 0.0\nP _part/17/_geo_xyz/8,14,2 0.0\nP _part/17/_geo_xyz/8,15,0 0.0\nP _part/17/_geo_xyz/8,15,1 0.0\nP _part/17/_geo_xyz/8,15,2 0.0\nP _part/17/_geo_xyz/8,16,0 0.0\nP _part/17/_geo_xyz/8,16,1 0.0\nP _part/17/_geo_xyz/8,16,2 0.0\nP _part/17/_geo_xyz/8,17,0 0.0\nP _part/17/_geo_xyz/8,17,1 0.0\nP _part/17/_geo_xyz/8,17,2 0.0\nP _part/17/_geo_xyz/8,2,0 8.202099800\nP _part/17/_geo_xyz/8,2,1 12.362204552\nP _part/17/_geo_xyz/8,2,2 32.562335968\nP _part/17/_geo_xyz/8,3,0 8.202099800\nP _part/17/_geo_xyz/8,3,1 12.376968384\nP _part/17/_geo_xyz/8,3,2 32.808399200\nP _part/17/_geo_xyz/8,4,0 8.202099800\nP _part/17/_geo_xyz/8,4,1 12.376968384\nP _part/17/_geo_xyz/8,4,2 33.136482239\nP _part/17/_geo_xyz/8,5,0 8.202099800\nP _part/17/_geo_xyz/8,5,1 12.303149223\nP _part/17/_geo_xyz/8,5,2 34.038715363\nP _part/17/_geo_xyz/8,6,0 8.202099800\nP _part/17/_geo_xyz/8,6,1 12.303149223\nP _part/17/_geo_xyz/8,6,2 34.038715363\nP _part/17/_geo_xyz/8,7,0 8.202099800\nP _part/17/_geo_xyz/8,7,1 12.303149223\nP _part/17/_geo_xyz/8,7,2 34.038715363\nP _part/17/_geo_xyz/8,8,0 8.202099800\nP _part/17/_geo_xyz/8,8,1 12.303149223\nP _part/17/_geo_xyz/8,8,2 34.038715363\nP _part/17/_geo_xyz/8,9,0 8.202099800\nP _part/17/_geo_xyz/8,9,1 12.229330063\nP _part/17/_geo_xyz/8,9,2 33.136482239\nP _part/17/_geo_xyz/9,0,0 0.0\nP _part/17/_geo_xyz/9,0,1 0.0\nP _part/17/_geo_xyz/9,0,2 0.0\nP _part/17/_geo_xyz/9,1,0 0.0\nP _part/17/_geo_xyz/9,1,1 0.0\nP _part/17/_geo_xyz/9,1,2 0.0\nP _part/17/_geo_xyz/9,10,0 0.0\nP _part/17/_geo_xyz/9,10,1 0.0\nP _part/17/_geo_xyz/9,10,2 0.0\nP _part/17/_geo_xyz/9,11,0 0.0\nP _part/17/_geo_xyz/9,11,1 0.0\nP _part/17/_geo_xyz/9,11,2 0.0\nP _part/17/_geo_xyz/9,12,0 0.0\nP _part/17/_geo_xyz/9,12,1 0.0\nP _part/17/_geo_xyz/9,12,2 0.0\nP _part/17/_geo_xyz/9,13,0 0.0\nP _part/17/_geo_xyz/9,13,1 0.0\nP _part/17/_geo_xyz/9,13,2 0.0\nP _part/17/_geo_xyz/9,14,0 0.0\nP _part/17/_geo_xyz/9,14,1 0.0\nP _part/17/_geo_xyz/9,14,2 0.0\nP _part/17/_geo_xyz/9,15,0 0.0\nP _part/17/_geo_xyz/9,15,1 0.0\nP _part/17/_geo_xyz/9,15,2 0.0\nP _part/17/_geo_xyz/9,16,0 0.0\nP _part/17/_geo_xyz/9,16,1 0.0\nP _part/17/_geo_xyz/9,16,2 0.0\nP _part/17/_geo_xyz/9,17,0 0.0\nP _part/17/_geo_xyz/9,17,1 0.0\nP _part/17/_geo_xyz/9,17,2 0.0\nP _part/17/_geo_xyz/9,2,0 0.0\nP _part/17/_geo_xyz/9,2,1 0.0\nP _part/17/_geo_xyz/9,2,2 0.0\nP _part/17/_geo_xyz/9,3,0 0.0\nP _part/17/_geo_xyz/9,3,1 0.0\nP _part/17/_geo_xyz/9,3,2 0.0\nP _part/17/_geo_xyz/9,4,0 0.0\nP _part/17/_geo_xyz/9,4,1 0.0\nP _part/17/_geo_xyz/9,4,2 0.0\nP _part/17/_geo_xyz/9,5,0 0.0\nP _part/17/_geo_xyz/9,5,1 0.0\nP _part/17/_geo_xyz/9,5,2 0.0\nP _part/17/_geo_xyz/9,6,0 0.0\nP _part/17/_geo_xyz/9,6,1 0.0\nP _part/17/_geo_xyz/9,6,2 0.0\nP _part/17/_geo_xyz/9,7,0 0.0\nP _part/17/_geo_xyz/9,7,1 0.0\nP _part/17/_geo_xyz/9,7,2 0.0\nP _part/17/_geo_xyz/9,8,0 0.0\nP _part/17/_geo_xyz/9,8,1 0.0\nP _part/17/_geo_xyz/9,8,2 0.0\nP _part/17/_geo_xyz/9,9,0 0.0\nP _part/17/_geo_xyz/9,9,1 0.0\nP _part/17/_geo_xyz/9,9,2 0.0\nP _part/17/_geo_xyz/i_count 20\nP _part/17/_geo_xyz/j_count 18\nP _part/17/_geo_xyz/k_count 3\nP _part/17/_locked/0,0 0\nP _part/17/_locked/0,1 0\nP _part/17/_locked/0,10 0\nP _part/17/_locked/0,11 0\nP _part/17/_locked/0,12 0\nP _part/17/_locked/0,13 0\nP _part/17/_locked/0,14 0\nP _part/17/_locked/0,15 0\nP _part/17/_locked/0,16 0\nP _part/17/_locked/0,17 0\nP _part/17/_locked/0,2 0\nP _part/17/_locked/0,3 0\nP _part/17/_locked/0,4 0\nP _part/17/_locked/0,5 0\nP _part/17/_locked/0,6 0\nP _part/17/_locked/0,7 0\nP _part/17/_locked/0,8 0\nP _part/17/_locked/0,9 0\nP _part/17/_locked/1,0 0\nP _part/17/_locked/1,1 0\nP _part/17/_locked/1,10 0\nP _part/17/_locked/1,11 0\nP _part/17/_locked/1,12 0\nP _part/17/_locked/1,13 0\nP _part/17/_locked/1,14 0\nP _part/17/_locked/1,15 0\nP _part/17/_locked/1,16 0\nP _part/17/_locked/1,17 0\nP _part/17/_locked/1,2 0\nP _part/17/_locked/1,3 0\nP _part/17/_locked/1,4 0\nP _part/17/_locked/1,5 0\nP _part/17/_locked/1,6 0\nP _part/17/_locked/1,7 0\nP _part/17/_locked/1,8 0\nP _part/17/_locked/1,9 0\nP _part/17/_locked/10,0 0\nP _part/17/_locked/10,1 0\nP _part/17/_locked/10,10 0\nP _part/17/_locked/10,11 0\nP _part/17/_locked/10,12 0\nP _part/17/_locked/10,13 0\nP _part/17/_locked/10,14 0\nP _part/17/_locked/10,15 0\nP _part/17/_locked/10,16 0\nP _part/17/_locked/10,17 0\nP _part/17/_locked/10,2 0\nP _part/17/_locked/10,3 0\nP _part/17/_locked/10,4 0\nP _part/17/_locked/10,5 0\nP _part/17/_locked/10,6 0\nP _part/17/_locked/10,7 0\nP _part/17/_locked/10,8 0\nP _part/17/_locked/10,9 0\nP _part/17/_locked/11,0 0\nP _part/17/_locked/11,1 0\nP _part/17/_locked/11,10 0\nP _part/17/_locked/11,11 0\nP _part/17/_locked/11,12 0\nP _part/17/_locked/11,13 0\nP _part/17/_locked/11,14 0\nP _part/17/_locked/11,15 0\nP _part/17/_locked/11,16 0\nP _part/17/_locked/11,17 0\nP _part/17/_locked/11,2 0\nP _part/17/_locked/11,3 0\nP _part/17/_locked/11,4 0\nP _part/17/_locked/11,5 0\nP _part/17/_locked/11,6 0\nP _part/17/_locked/11,7 0\nP _part/17/_locked/11,8 0\nP _part/17/_locked/11,9 0\nP _part/17/_locked/12,0 0\nP _part/17/_locked/12,1 0\nP _part/17/_locked/12,10 0\nP _part/17/_locked/12,11 0\nP _part/17/_locked/12,12 0\nP _part/17/_locked/12,13 0\nP _part/17/_locked/12,14 0\nP _part/17/_locked/12,15 0\nP _part/17/_locked/12,16 0\nP _part/17/_locked/12,17 0\nP _part/17/_locked/12,2 0\nP _part/17/_locked/12,3 0\nP _part/17/_locked/12,4 0\nP _part/17/_locked/12,5 0\nP _part/17/_locked/12,6 0\nP _part/17/_locked/12,7 0\nP _part/17/_locked/12,8 0\nP _part/17/_locked/12,9 0\nP _part/17/_locked/13,0 0\nP _part/17/_locked/13,1 0\nP _part/17/_locked/13,10 0\nP _part/17/_locked/13,11 0\nP _part/17/_locked/13,12 0\nP _part/17/_locked/13,13 0\nP _part/17/_locked/13,14 0\nP _part/17/_locked/13,15 0\nP _part/17/_locked/13,16 0\nP _part/17/_locked/13,17 0\nP _part/17/_locked/13,2 0\nP _part/17/_locked/13,3 0\nP _part/17/_locked/13,4 0\nP _part/17/_locked/13,5 0\nP _part/17/_locked/13,6 0\nP _part/17/_locked/13,7 0\nP _part/17/_locked/13,8 0\nP _part/17/_locked/13,9 0\nP _part/17/_locked/14,0 0\nP _part/17/_locked/14,1 0\nP _part/17/_locked/14,10 0\nP _part/17/_locked/14,11 0\nP _part/17/_locked/14,12 0\nP _part/17/_locked/14,13 0\nP _part/17/_locked/14,14 0\nP _part/17/_locked/14,15 0\nP _part/17/_locked/14,16 0\nP _part/17/_locked/14,17 0\nP _part/17/_locked/14,2 0\nP _part/17/_locked/14,3 0\nP _part/17/_locked/14,4 0\nP _part/17/_locked/14,5 0\nP _part/17/_locked/14,6 0\nP _part/17/_locked/14,7 0\nP _part/17/_locked/14,8 0\nP _part/17/_locked/14,9 0\nP _part/17/_locked/15,0 0\nP _part/17/_locked/15,1 0\nP _part/17/_locked/15,10 0\nP _part/17/_locked/15,11 0\nP _part/17/_locked/15,12 0\nP _part/17/_locked/15,13 0\nP _part/17/_locked/15,14 0\nP _part/17/_locked/15,15 0\nP _part/17/_locked/15,16 0\nP _part/17/_locked/15,17 0\nP _part/17/_locked/15,2 0\nP _part/17/_locked/15,3 0\nP _part/17/_locked/15,4 0\nP _part/17/_locked/15,5 0\nP _part/17/_locked/15,6 0\nP _part/17/_locked/15,7 0\nP _part/17/_locked/15,8 0\nP _part/17/_locked/15,9 0\nP _part/17/_locked/16,0 0\nP _part/17/_locked/16,1 0\nP _part/17/_locked/16,10 0\nP _part/17/_locked/16,11 0\nP _part/17/_locked/16,12 0\nP _part/17/_locked/16,13 0\nP _part/17/_locked/16,14 0\nP _part/17/_locked/16,15 0\nP _part/17/_locked/16,16 0\nP _part/17/_locked/16,17 0\nP _part/17/_locked/16,2 0\nP _part/17/_locked/16,3 0\nP _part/17/_locked/16,4 0\nP _part/17/_locked/16,5 0\nP _part/17/_locked/16,6 0\nP _part/17/_locked/16,7 0\nP _part/17/_locked/16,8 0\nP _part/17/_locked/16,9 0\nP _part/17/_locked/17,0 0\nP _part/17/_locked/17,1 0\nP _part/17/_locked/17,10 0\nP _part/17/_locked/17,11 0\nP _part/17/_locked/17,12 0\nP _part/17/_locked/17,13 0\nP _part/17/_locked/17,14 0\nP _part/17/_locked/17,15 0\nP _part/17/_locked/17,16 0\nP _part/17/_locked/17,17 0\nP _part/17/_locked/17,2 0\nP _part/17/_locked/17,3 0\nP _part/17/_locked/17,4 0\nP _part/17/_locked/17,5 0\nP _part/17/_locked/17,6 0\nP _part/17/_locked/17,7 0\nP _part/17/_locked/17,8 0\nP _part/17/_locked/17,9 0\nP _part/17/_locked/18,0 0\nP _part/17/_locked/18,1 0\nP _part/17/_locked/18,10 0\nP _part/17/_locked/18,11 0\nP _part/17/_locked/18,12 0\nP _part/17/_locked/18,13 0\nP _part/17/_locked/18,14 0\nP _part/17/_locked/18,15 0\nP _part/17/_locked/18,16 0\nP _part/17/_locked/18,17 0\nP _part/17/_locked/18,2 0\nP _part/17/_locked/18,3 0\nP _part/17/_locked/18,4 0\nP _part/17/_locked/18,5 0\nP _part/17/_locked/18,6 0\nP _part/17/_locked/18,7 0\nP _part/17/_locked/18,8 0\nP _part/17/_locked/18,9 0\nP _part/17/_locked/19,0 0\nP _part/17/_locked/19,1 0\nP _part/17/_locked/19,10 0\nP _part/17/_locked/19,11 0\nP _part/17/_locked/19,12 0\nP _part/17/_locked/19,13 0\nP _part/17/_locked/19,14 0\nP _part/17/_locked/19,15 0\nP _part/17/_locked/19,16 0\nP _part/17/_locked/19,17 0\nP _part/17/_locked/19,2 0\nP _part/17/_locked/19,3 0\nP _part/17/_locked/19,4 0\nP _part/17/_locked/19,5 0\nP _part/17/_locked/19,6 0\nP _part/17/_locked/19,7 0\nP _part/17/_locked/19,8 0\nP _part/17/_locked/19,9 0\nP _part/17/_locked/2,0 0\nP _part/17/_locked/2,1 0\nP _part/17/_locked/2,10 0\nP _part/17/_locked/2,11 0\nP _part/17/_locked/2,12 0\nP _part/17/_locked/2,13 0\nP _part/17/_locked/2,14 0\nP _part/17/_locked/2,15 0\nP _part/17/_locked/2,16 0\nP _part/17/_locked/2,17 0\nP _part/17/_locked/2,2 0\nP _part/17/_locked/2,3 0\nP _part/17/_locked/2,4 0\nP _part/17/_locked/2,5 0\nP _part/17/_locked/2,6 0\nP _part/17/_locked/2,7 0\nP _part/17/_locked/2,8 0\nP _part/17/_locked/2,9 0\nP _part/17/_locked/3,0 0\nP _part/17/_locked/3,1 0\nP _part/17/_locked/3,10 0\nP _part/17/_locked/3,11 0\nP _part/17/_locked/3,12 0\nP _part/17/_locked/3,13 0\nP _part/17/_locked/3,14 0\nP _part/17/_locked/3,15 0\nP _part/17/_locked/3,16 0\nP _part/17/_locked/3,17 0\nP _part/17/_locked/3,2 0\nP _part/17/_locked/3,3 0\nP _part/17/_locked/3,4 0\nP _part/17/_locked/3,5 0\nP _part/17/_locked/3,6 0\nP _part/17/_locked/3,7 0\nP _part/17/_locked/3,8 0\nP _part/17/_locked/3,9 0\nP _part/17/_locked/4,0 0\nP _part/17/_locked/4,1 0\nP _part/17/_locked/4,10 0\nP _part/17/_locked/4,11 0\nP _part/17/_locked/4,12 0\nP _part/17/_locked/4,13 0\nP _part/17/_locked/4,14 0\nP _part/17/_locked/4,15 0\nP _part/17/_locked/4,16 0\nP _part/17/_locked/4,17 0\nP _part/17/_locked/4,2 0\nP _part/17/_locked/4,3 0\nP _part/17/_locked/4,4 0\nP _part/17/_locked/4,5 0\nP _part/17/_locked/4,6 0\nP _part/17/_locked/4,7 0\nP _part/17/_locked/4,8 0\nP _part/17/_locked/4,9 0\nP _part/17/_locked/5,0 0\nP _part/17/_locked/5,1 0\nP _part/17/_locked/5,10 0\nP _part/17/_locked/5,11 0\nP _part/17/_locked/5,12 0\nP _part/17/_locked/5,13 0\nP _part/17/_locked/5,14 0\nP _part/17/_locked/5,15 0\nP _part/17/_locked/5,16 0\nP _part/17/_locked/5,17 0\nP _part/17/_locked/5,2 0\nP _part/17/_locked/5,3 0\nP _part/17/_locked/5,4 0\nP _part/17/_locked/5,5 0\nP _part/17/_locked/5,6 0\nP _part/17/_locked/5,7 0\nP _part/17/_locked/5,8 0\nP _part/17/_locked/5,9 0\nP _part/17/_locked/6,0 0\nP _part/17/_locked/6,1 0\nP _part/17/_locked/6,10 0\nP _part/17/_locked/6,11 0\nP _part/17/_locked/6,12 0\nP _part/17/_locked/6,13 0\nP _part/17/_locked/6,14 0\nP _part/17/_locked/6,15 0\nP _part/17/_locked/6,16 0\nP _part/17/_locked/6,17 0\nP _part/17/_locked/6,2 0\nP _part/17/_locked/6,3 0\nP _part/17/_locked/6,4 0\nP _part/17/_locked/6,5 0\nP _part/17/_locked/6,6 0\nP _part/17/_locked/6,7 0\nP _part/17/_locked/6,8 0\nP _part/17/_locked/6,9 0\nP _part/17/_locked/7,0 0\nP _part/17/_locked/7,1 0\nP _part/17/_locked/7,10 0\nP _part/17/_locked/7,11 0\nP _part/17/_locked/7,12 0\nP _part/17/_locked/7,13 0\nP _part/17/_locked/7,14 0\nP _part/17/_locked/7,15 0\nP _part/17/_locked/7,16 0\nP _part/17/_locked/7,17 0\nP _part/17/_locked/7,2 0\nP _part/17/_locked/7,3 0\nP _part/17/_locked/7,4 0\nP _part/17/_locked/7,5 0\nP _part/17/_locked/7,6 0\nP _part/17/_locked/7,7 0\nP _part/17/_locked/7,8 0\nP _part/17/_locked/7,9 0\nP _part/17/_locked/8,0 0\nP _part/17/_locked/8,1 0\nP _part/17/_locked/8,10 0\nP _part/17/_locked/8,11 0\nP _part/17/_locked/8,12 0\nP _part/17/_locked/8,13 0\nP _part/17/_locked/8,14 0\nP _part/17/_locked/8,15 0\nP _part/17/_locked/8,16 0\nP _part/17/_locked/8,17 0\nP _part/17/_locked/8,2 0\nP _part/17/_locked/8,3 0\nP _part/17/_locked/8,4 0\nP _part/17/_locked/8,5 0\nP _part/17/_locked/8,6 0\nP _part/17/_locked/8,7 0\nP _part/17/_locked/8,8 0\nP _part/17/_locked/8,9 0\nP _part/17/_locked/9,0 0\nP _part/17/_locked/9,1 0\nP _part/17/_locked/9,10 0\nP _part/17/_locked/9,11 0\nP _part/17/_locked/9,12 0\nP _part/17/_locked/9,13 0\nP _part/17/_locked/9,14 0\nP _part/17/_locked/9,15 0\nP _part/17/_locked/9,16 0\nP _part/17/_locked/9,17 0\nP _part/17/_locked/9,2 0\nP _part/17/_locked/9,3 0\nP _part/17/_locked/9,4 0\nP _part/17/_locked/9,5 0\nP _part/17/_locked/9,6 0\nP _part/17/_locked/9,7 0\nP _part/17/_locked/9,8 0\nP _part/17/_locked/9,9 0\nP _part/17/_locked/i_count 20\nP _part/17/_locked/j_count 18\nP _part/17/_part_cd 0.075000003\nP _part/17/_part_phi 0.0\nP _part/17/_part_psi 0.0\nP _part/17/_part_rad 2.0\nP _part/17/_part_specs_eq 1\nP _part/17/_part_specs_invis 0\nP _part/17/_part_specs_unused1 0\nP _part/17/_part_specs_unused2 0\nP _part/17/_part_tex 0\nP _part/17/_part_the 0.0\nP _part/17/_part_x 0.0\nP _part/17/_part_y 12.303149223\nP _part/17/_part_z 32.808399200\nP _part/17/_patt_con 0\nP _part/17/_patt_prt 0\nP _part/17/_patt_rat 0.0\nP _part/17/_r_dim 14\nP _part/17/_s_dim 4\nP _part/17/_scon 37.676635742\nP _part/17/_top_s1 0.755999982\nP _part/17/_top_s2 1.0\nP _part/17/_top_t1 0.509999990\nP _part/17/_top_t2 0.754000008\nP _part/18/_aero_x_os 0.0\nP _part/18/_aero_y_os 0.0\nP _part/18/_aero_z_os 0.0\nP _part/18/_area_frnt 0.0\nP _part/18/_area_side 0.0\nP _part/18/_area_vert 0.0\nP _part/18/_bot_s1 0.263999999\nP _part/18/_bot_s2 0.508000016\nP _part/18/_bot_t1 0.0\nP _part/18/_bot_t2 0.252999991\nP _part/18/_damp 1.883831739\nP _part/18/_geo_xyz/0,0,0 0.0\nP _part/18/_geo_xyz/0,0,1 0.0\nP _part/18/_geo_xyz/0,0,2 32.800197601\nP _part/18/_geo_xyz/0,1,0 -0.000590551\nP _part/18/_geo_xyz/0,1,1 0.000000000\nP _part/18/_geo_xyz/0,1,2 32.801181793\nP _part/18/_geo_xyz/0,10,0 0.001476378\nP _part/18/_geo_xyz/0,10,1 -0.000000000\nP _part/18/_geo_xyz/0,10,2 32.808399200\nP _part/18/_geo_xyz/0,11,0 0.001181102\nP _part/18/_geo_xyz/0,11,1 -0.000000000\nP _part/18/_geo_xyz/0,11,2 32.803478241\nP _part/18/_geo_xyz/0,12,0 0.000590551\nP _part/18/_geo_xyz/0,12,1 -0.000000000\nP _part/18/_geo_xyz/0,12,2 32.801181793\nP _part/18/_geo_xyz/0,13,0 0.0\nP _part/18/_geo_xyz/0,13,1 0.0\nP _part/18/_geo_xyz/0,13,2 32.800197601\nP _part/18/_geo_xyz/0,14,0 0.0\nP _part/18/_geo_xyz/0,14,1 0.0\nP _part/18/_geo_xyz/0,14,2 0.0\nP _part/18/_geo_xyz/0,15,0 0.0\nP _part/18/_geo_xyz/0,15,1 0.0\nP _part/18/_geo_xyz/0,15,2 0.0\nP _part/18/_geo_xyz/0,16,0 0.0\nP _part/18/_geo_xyz/0,16,1 0.0\nP _part/18/_geo_xyz/0,16,2 0.0\nP _part/18/_geo_xyz/0,17,0 0.0\nP _part/18/_geo_xyz/0,17,1 0.0\nP _part/18/_geo_xyz/0,17,2 0.0\nP _part/18/_geo_xyz/0,2,0 -0.001181102\nP _part/18/_geo_xyz/0,2,1 0.000000000\nP _part/18/_geo_xyz/0,2,2 32.803478241\nP _part/18/_geo_xyz/0,3,0 -0.001476378\nP _part/18/_geo_xyz/0,3,1 0.000000000\nP _part/18/_geo_xyz/0,3,2 32.808399200\nP _part/18/_geo_xyz/0,4,0 -0.001476378\nP _part/18/_geo_xyz/0,4,1 0.000000000\nP _part/18/_geo_xyz/0,4,2 32.814960480\nP _part/18/_geo_xyz/0,5,0 -0.000671081\nP _part/18/_geo_xyz/0,5,1 0.000000000\nP _part/18/_geo_xyz/0,5,2 32.824802399\nP _part/18/_geo_xyz/0,6,0 0.0\nP _part/18/_geo_xyz/0,6,1 0.0\nP _part/18/_geo_xyz/0,6,2 32.833003998\nP _part/18/_geo_xyz/0,7,0 0.0\nP _part/18/_geo_xyz/0,7,1 0.0\nP _part/18/_geo_xyz/0,7,2 32.833003998\nP _part/18/_geo_xyz/0,8,0 0.000671081\nP _part/18/_geo_xyz/0,8,1 -0.000000000\nP _part/18/_geo_xyz/0,8,2 32.824802399\nP _part/18/_geo_xyz/0,9,0 0.001476378\nP _part/18/_geo_xyz/0,9,1 -0.000000000\nP _part/18/_geo_xyz/0,9,2 32.814960480\nP _part/18/_geo_xyz/1,0,0 -0.000000501\nP _part/18/_geo_xyz/1,0,1 3.075787306\nP _part/18/_geo_xyz/1,0,2 32.800197601\nP _part/18/_geo_xyz/1,1,0 -0.000591052\nP _part/18/_geo_xyz/1,1,1 3.075787306\nP _part/18/_geo_xyz/1,1,2 32.801181793\nP _part/18/_geo_xyz/1,10,0 0.001475877\nP _part/18/_geo_xyz/1,10,1 3.075787306\nP _part/18/_geo_xyz/1,10,2 32.808399200\nP _part/18/_geo_xyz/1,11,0 0.001180601\nP _part/18/_geo_xyz/1,11,1 3.075787306\nP _part/18/_geo_xyz/1,11,2 32.803478241\nP _part/18/_geo_xyz/1,12,0 0.000590050\nP _part/18/_geo_xyz/1,12,1 3.075787306\nP _part/18/_geo_xyz/1,12,2 32.801181793\nP _part/18/_geo_xyz/1,13,0 -0.000000501\nP _part/18/_geo_xyz/1,13,1 3.075787306\nP _part/18/_geo_xyz/1,13,2 32.800197601\nP _part/18/_geo_xyz/1,14,0 0.0\nP _part/18/_geo_xyz/1,14,1 0.0\nP _part/18/_geo_xyz/1,14,2 0.0\nP _part/18/_geo_xyz/1,15,0 0.0\nP _part/18/_geo_xyz/1,15,1 0.0\nP _part/18/_geo_xyz/1,15,2 0.0\nP _part/18/_geo_xyz/1,16,0 0.0\nP _part/18/_geo_xyz/1,16,1 0.0\nP _part/18/_geo_xyz/1,16,2 0.0\nP _part/18/_geo_xyz/1,17,0 0.0\nP _part/18/_geo_xyz/1,17,1 0.0\nP _part/18/_geo_xyz/1,17,2 0.0\nP _part/18/_geo_xyz/1,2,0 -0.001181603\nP _part/18/_geo_xyz/1,2,1 3.075787306\nP _part/18/_geo_xyz/1,2,2 32.803478241\nP _part/18/_geo_xyz/1,3,0 -0.001476879\nP _part/18/_geo_xyz/1,3,1 3.075787306\nP _part/18/_geo_xyz/1,3,2 32.808399200\nP _part/18/_geo_xyz/1,4,0 -0.001476879\nP _part/18/_geo_xyz/1,4,1 3.075787306\nP _part/18/_geo_xyz/1,4,2 32.814960480\nP _part/18/_geo_xyz/1,5,0 -0.000671582\nP _part/18/_geo_xyz/1,5,1 3.075787306\nP _part/18/_geo_xyz/1,5,2 32.824802399\nP _part/18/_geo_xyz/1,6,0 -0.000000501\nP _part/18/_geo_xyz/1,6,1 3.075787306\nP _part/18/_geo_xyz/1,6,2 32.833003998\nP _part/18/_geo_xyz/1,7,0 -0.000000501\nP _part/18/_geo_xyz/1,7,1 3.075787306\nP _part/18/_geo_xyz/1,7,2 32.833003998\nP _part/18/_geo_xyz/1,8,0 0.000670580\nP _part/18/_geo_xyz/1,8,1 3.075787306\nP _part/18/_geo_xyz/1,8,2 32.824802399\nP _part/18/_geo_xyz/1,9,0 0.001475877\nP _part/18/_geo_xyz/1,9,1 3.075787306\nP _part/18/_geo_xyz/1,9,2 32.814960480\nP _part/18/_geo_xyz/10,0,0 0.0\nP _part/18/_geo_xyz/10,0,1 0.0\nP _part/18/_geo_xyz/10,0,2 0.0\nP _part/18/_geo_xyz/10,1,0 0.0\nP _part/18/_geo_xyz/10,1,1 0.0\nP _part/18/_geo_xyz/10,1,2 0.0\nP _part/18/_geo_xyz/10,10,0 0.0\nP _part/18/_geo_xyz/10,10,1 0.0\nP _part/18/_geo_xyz/10,10,2 0.0\nP _part/18/_geo_xyz/10,11,0 0.0\nP _part/18/_geo_xyz/10,11,1 0.0\nP _part/18/_geo_xyz/10,11,2 0.0\nP _part/18/_geo_xyz/10,12,0 0.0\nP _part/18/_geo_xyz/10,12,1 0.0\nP _part/18/_geo_xyz/10,12,2 0.0\nP _part/18/_geo_xyz/10,13,0 0.0\nP _part/18/_geo_xyz/10,13,1 0.0\nP _part/18/_geo_xyz/10,13,2 0.0\nP _part/18/_geo_xyz/10,14,0 0.0\nP _part/18/_geo_xyz/10,14,1 0.0\nP _part/18/_geo_xyz/10,14,2 0.0\nP _part/18/_geo_xyz/10,15,0 0.0\nP _part/18/_geo_xyz/10,15,1 0.0\nP _part/18/_geo_xyz/10,15,2 0.0\nP _part/18/_geo_xyz/10,16,0 0.0\nP _part/18/_geo_xyz/10,16,1 0.0\nP _part/18/_geo_xyz/10,16,2 0.0\nP _part/18/_geo_xyz/10,17,0 0.0\nP _part/18/_geo_xyz/10,17,1 0.0\nP _part/18/_geo_xyz/10,17,2 0.0\nP _part/18/_geo_xyz/10,2,0 0.0\nP _part/18/_geo_xyz/10,2,1 0.0\nP _part/18/_geo_xyz/10,2,2 0.0\nP _part/18/_geo_xyz/10,3,0 0.0\nP _part/18/_geo_xyz/10,3,1 0.0\nP _part/18/_geo_xyz/10,3,2 0.0\nP _part/18/_geo_xyz/10,4,0 0.0\nP _part/18/_geo_xyz/10,4,1 0.0\nP _part/18/_geo_xyz/10,4,2 0.0\nP _part/18/_geo_xyz/10,5,0 0.0\nP _part/18/_geo_xyz/10,5,1 0.0\nP _part/18/_geo_xyz/10,5,2 0.0\nP _part/18/_geo_xyz/10,6,0 0.0\nP _part/18/_geo_xyz/10,6,1 0.0\nP _part/18/_geo_xyz/10,6,2 0.0\nP _part/18/_geo_xyz/10,7,0 0.0\nP _part/18/_geo_xyz/10,7,1 0.0\nP _part/18/_geo_xyz/10,7,2 0.0\nP _part/18/_geo_xyz/10,8,0 0.0\nP _part/18/_geo_xyz/10,8,1 0.0\nP _part/18/_geo_xyz/10,8,2 0.0\nP _part/18/_geo_xyz/10,9,0 0.0\nP _part/18/_geo_xyz/10,9,1 0.0\nP _part/18/_geo_xyz/10,9,2 0.0\nP _part/18/_geo_xyz/11,0,0 0.0\nP _part/18/_geo_xyz/11,0,1 0.0\nP _part/18/_geo_xyz/11,0,2 0.0\nP _part/18/_geo_xyz/11,1,0 0.0\nP _part/18/_geo_xyz/11,1,1 0.0\nP _part/18/_geo_xyz/11,1,2 0.0\nP _part/18/_geo_xyz/11,10,0 0.0\nP _part/18/_geo_xyz/11,10,1 0.0\nP _part/18/_geo_xyz/11,10,2 0.0\nP _part/18/_geo_xyz/11,11,0 0.0\nP _part/18/_geo_xyz/11,11,1 0.0\nP _part/18/_geo_xyz/11,11,2 0.0\nP _part/18/_geo_xyz/11,12,0 0.0\nP _part/18/_geo_xyz/11,12,1 0.0\nP _part/18/_geo_xyz/11,12,2 0.0\nP _part/18/_geo_xyz/11,13,0 0.0\nP _part/18/_geo_xyz/11,13,1 0.0\nP _part/18/_geo_xyz/11,13,2 0.0\nP _part/18/_geo_xyz/11,14,0 0.0\nP _part/18/_geo_xyz/11,14,1 0.0\nP _part/18/_geo_xyz/11,14,2 0.0\nP _part/18/_geo_xyz/11,15,0 0.0\nP _part/18/_geo_xyz/11,15,1 0.0\nP _part/18/_geo_xyz/11,15,2 0.0\nP _part/18/_geo_xyz/11,16,0 0.0\nP _part/18/_geo_xyz/11,16,1 0.0\nP _part/18/_geo_xyz/11,16,2 0.0\nP _part/18/_geo_xyz/11,17,0 0.0\nP _part/18/_geo_xyz/11,17,1 0.0\nP _part/18/_geo_xyz/11,17,2 0.0\nP _part/18/_geo_xyz/11,2,0 0.0\nP _part/18/_geo_xyz/11,2,1 0.0\nP _part/18/_geo_xyz/11,2,2 0.0\nP _part/18/_geo_xyz/11,3,0 0.0\nP _part/18/_geo_xyz/11,3,1 0.0\nP _part/18/_geo_xyz/11,3,2 0.0\nP _part/18/_geo_xyz/11,4,0 0.0\nP _part/18/_geo_xyz/11,4,1 0.0\nP _part/18/_geo_xyz/11,4,2 0.0\nP _part/18/_geo_xyz/11,5,0 0.0\nP _part/18/_geo_xyz/11,5,1 0.0\nP _part/18/_geo_xyz/11,5,2 0.0\nP _part/18/_geo_xyz/11,6,0 0.0\nP _part/18/_geo_xyz/11,6,1 0.0\nP _part/18/_geo_xyz/11,6,2 0.0\nP _part/18/_geo_xyz/11,7,0 0.0\nP _part/18/_geo_xyz/11,7,1 0.0\nP _part/18/_geo_xyz/11,7,2 0.0\nP _part/18/_geo_xyz/11,8,0 0.0\nP _part/18/_geo_xyz/11,8,1 0.0\nP _part/18/_geo_xyz/11,8,2 0.0\nP _part/18/_geo_xyz/11,9,0 0.0\nP _part/18/_geo_xyz/11,9,1 0.0\nP _part/18/_geo_xyz/11,9,2 0.0\nP _part/18/_geo_xyz/12,0,0 0.0\nP _part/18/_geo_xyz/12,0,1 0.0\nP _part/18/_geo_xyz/12,0,2 0.0\nP _part/18/_geo_xyz/12,1,0 0.0\nP _part/18/_geo_xyz/12,1,1 0.0\nP _part/18/_geo_xyz/12,1,2 0.0\nP _part/18/_geo_xyz/12,10,0 0.0\nP _part/18/_geo_xyz/12,10,1 0.0\nP _part/18/_geo_xyz/12,10,2 0.0\nP _part/18/_geo_xyz/12,11,0 0.0\nP _part/18/_geo_xyz/12,11,1 0.0\nP _part/18/_geo_xyz/12,11,2 0.0\nP _part/18/_geo_xyz/12,12,0 0.0\nP _part/18/_geo_xyz/12,12,1 0.0\nP _part/18/_geo_xyz/12,12,2 0.0\nP _part/18/_geo_xyz/12,13,0 0.0\nP _part/18/_geo_xyz/12,13,1 0.0\nP _part/18/_geo_xyz/12,13,2 0.0\nP _part/18/_geo_xyz/12,14,0 0.0\nP _part/18/_geo_xyz/12,14,1 0.0\nP _part/18/_geo_xyz/12,14,2 0.0\nP _part/18/_geo_xyz/12,15,0 0.0\nP _part/18/_geo_xyz/12,15,1 0.0\nP _part/18/_geo_xyz/12,15,2 0.0\nP _part/18/_geo_xyz/12,16,0 0.0\nP _part/18/_geo_xyz/12,16,1 0.0\nP _part/18/_geo_xyz/12,16,2 0.0\nP _part/18/_geo_xyz/12,17,0 0.0\nP _part/18/_geo_xyz/12,17,1 0.0\nP _part/18/_geo_xyz/12,17,2 0.0\nP _part/18/_geo_xyz/12,2,0 0.0\nP _part/18/_geo_xyz/12,2,1 0.0\nP _part/18/_geo_xyz/12,2,2 0.0\nP _part/18/_geo_xyz/12,3,0 0.0\nP _part/18/_geo_xyz/12,3,1 0.0\nP _part/18/_geo_xyz/12,3,2 0.0\nP _part/18/_geo_xyz/12,4,0 0.0\nP _part/18/_geo_xyz/12,4,1 0.0\nP _part/18/_geo_xyz/12,4,2 0.0\nP _part/18/_geo_xyz/12,5,0 0.0\nP _part/18/_geo_xyz/12,5,1 0.0\nP _part/18/_geo_xyz/12,5,2 0.0\nP _part/18/_geo_xyz/12,6,0 0.0\nP _part/18/_geo_xyz/12,6,1 0.0\nP _part/18/_geo_xyz/12,6,2 0.0\nP _part/18/_geo_xyz/12,7,0 0.0\nP _part/18/_geo_xyz/12,7,1 0.0\nP _part/18/_geo_xyz/12,7,2 0.0\nP _part/18/_geo_xyz/12,8,0 0.0\nP _part/18/_geo_xyz/12,8,1 0.0\nP _part/18/_geo_xyz/12,8,2 0.0\nP _part/18/_geo_xyz/12,9,0 0.0\nP _part/18/_geo_xyz/12,9,1 0.0\nP _part/18/_geo_xyz/12,9,2 0.0\nP _part/18/_geo_xyz/13,0,0 0.0\nP _part/18/_geo_xyz/13,0,1 0.0\nP _part/18/_geo_xyz/13,0,2 0.0\nP _part/18/_geo_xyz/13,1,0 0.0\nP _part/18/_geo_xyz/13,1,1 0.0\nP _part/18/_geo_xyz/13,1,2 0.0\nP _part/18/_geo_xyz/13,10,0 0.0\nP _part/18/_geo_xyz/13,10,1 0.0\nP _part/18/_geo_xyz/13,10,2 0.0\nP _part/18/_geo_xyz/13,11,0 0.0\nP _part/18/_geo_xyz/13,11,1 0.0\nP _part/18/_geo_xyz/13,11,2 0.0\nP _part/18/_geo_xyz/13,12,0 0.0\nP _part/18/_geo_xyz/13,12,1 0.0\nP _part/18/_geo_xyz/13,12,2 0.0\nP _part/18/_geo_xyz/13,13,0 0.0\nP _part/18/_geo_xyz/13,13,1 0.0\nP _part/18/_geo_xyz/13,13,2 0.0\nP _part/18/_geo_xyz/13,14,0 0.0\nP _part/18/_geo_xyz/13,14,1 0.0\nP _part/18/_geo_xyz/13,14,2 0.0\nP _part/18/_geo_xyz/13,15,0 0.0\nP _part/18/_geo_xyz/13,15,1 0.0\nP _part/18/_geo_xyz/13,15,2 0.0\nP _part/18/_geo_xyz/13,16,0 0.0\nP _part/18/_geo_xyz/13,16,1 0.0\nP _part/18/_geo_xyz/13,16,2 0.0\nP _part/18/_geo_xyz/13,17,0 0.0\nP _part/18/_geo_xyz/13,17,1 0.0\nP _part/18/_geo_xyz/13,17,2 0.0\nP _part/18/_geo_xyz/13,2,0 0.0\nP _part/18/_geo_xyz/13,2,1 0.0\nP _part/18/_geo_xyz/13,2,2 0.0\nP _part/18/_geo_xyz/13,3,0 0.0\nP _part/18/_geo_xyz/13,3,1 0.0\nP _part/18/_geo_xyz/13,3,2 0.0\nP _part/18/_geo_xyz/13,4,0 0.0\nP _part/18/_geo_xyz/13,4,1 0.0\nP _part/18/_geo_xyz/13,4,2 0.0\nP _part/18/_geo_xyz/13,5,0 0.0\nP _part/18/_geo_xyz/13,5,1 0.0\nP _part/18/_geo_xyz/13,5,2 0.0\nP _part/18/_geo_xyz/13,6,0 0.0\nP _part/18/_geo_xyz/13,6,1 0.0\nP _part/18/_geo_xyz/13,6,2 0.0\nP _part/18/_geo_xyz/13,7,0 0.0\nP _part/18/_geo_xyz/13,7,1 0.0\nP _part/18/_geo_xyz/13,7,2 0.0\nP _part/18/_geo_xyz/13,8,0 0.0\nP _part/18/_geo_xyz/13,8,1 0.0\nP _part/18/_geo_xyz/13,8,2 0.0\nP _part/18/_geo_xyz/13,9,0 0.0\nP _part/18/_geo_xyz/13,9,1 0.0\nP _part/18/_geo_xyz/13,9,2 0.0\nP _part/18/_geo_xyz/14,0,0 0.0\nP _part/18/_geo_xyz/14,0,1 0.0\nP _part/18/_geo_xyz/14,0,2 0.0\nP _part/18/_geo_xyz/14,1,0 0.0\nP _part/18/_geo_xyz/14,1,1 0.0\nP _part/18/_geo_xyz/14,1,2 0.0\nP _part/18/_geo_xyz/14,10,0 0.0\nP _part/18/_geo_xyz/14,10,1 0.0\nP _part/18/_geo_xyz/14,10,2 0.0\nP _part/18/_geo_xyz/14,11,0 0.0\nP _part/18/_geo_xyz/14,11,1 0.0\nP _part/18/_geo_xyz/14,11,2 0.0\nP _part/18/_geo_xyz/14,12,0 0.0\nP _part/18/_geo_xyz/14,12,1 0.0\nP _part/18/_geo_xyz/14,12,2 0.0\nP _part/18/_geo_xyz/14,13,0 0.0\nP _part/18/_geo_xyz/14,13,1 0.0\nP _part/18/_geo_xyz/14,13,2 0.0\nP _part/18/_geo_xyz/14,14,0 0.0\nP _part/18/_geo_xyz/14,14,1 0.0\nP _part/18/_geo_xyz/14,14,2 0.0\nP _part/18/_geo_xyz/14,15,0 0.0\nP _part/18/_geo_xyz/14,15,1 0.0\nP _part/18/_geo_xyz/14,15,2 0.0\nP _part/18/_geo_xyz/14,16,0 0.0\nP _part/18/_geo_xyz/14,16,1 0.0\nP _part/18/_geo_xyz/14,16,2 0.0\nP _part/18/_geo_xyz/14,17,0 0.0\nP _part/18/_geo_xyz/14,17,1 0.0\nP _part/18/_geo_xyz/14,17,2 0.0\nP _part/18/_geo_xyz/14,2,0 0.0\nP _part/18/_geo_xyz/14,2,1 0.0\nP _part/18/_geo_xyz/14,2,2 0.0\nP _part/18/_geo_xyz/14,3,0 0.0\nP _part/18/_geo_xyz/14,3,1 0.0\nP _part/18/_geo_xyz/14,3,2 0.0\nP _part/18/_geo_xyz/14,4,0 0.0\nP _part/18/_geo_xyz/14,4,1 0.0\nP _part/18/_geo_xyz/14,4,2 0.0\nP _part/18/_geo_xyz/14,5,0 0.0\nP _part/18/_geo_xyz/14,5,1 0.0\nP _part/18/_geo_xyz/14,5,2 0.0\nP _part/18/_geo_xyz/14,6,0 0.0\nP _part/18/_geo_xyz/14,6,1 0.0\nP _part/18/_geo_xyz/14,6,2 0.0\nP _part/18/_geo_xyz/14,7,0 0.0\nP _part/18/_geo_xyz/14,7,1 0.0\nP _part/18/_geo_xyz/14,7,2 0.0\nP _part/18/_geo_xyz/14,8,0 0.0\nP _part/18/_geo_xyz/14,8,1 0.0\nP _part/18/_geo_xyz/14,8,2 0.0\nP _part/18/_geo_xyz/14,9,0 0.0\nP _part/18/_geo_xyz/14,9,1 0.0\nP _part/18/_geo_xyz/14,9,2 0.0\nP _part/18/_geo_xyz/15,0,0 0.0\nP _part/18/_geo_xyz/15,0,1 0.0\nP _part/18/_geo_xyz/15,0,2 0.0\nP _part/18/_geo_xyz/15,1,0 0.0\nP _part/18/_geo_xyz/15,1,1 0.0\nP _part/18/_geo_xyz/15,1,2 0.0\nP _part/18/_geo_xyz/15,10,0 0.0\nP _part/18/_geo_xyz/15,10,1 0.0\nP _part/18/_geo_xyz/15,10,2 0.0\nP _part/18/_geo_xyz/15,11,0 0.0\nP _part/18/_geo_xyz/15,11,1 0.0\nP _part/18/_geo_xyz/15,11,2 0.0\nP _part/18/_geo_xyz/15,12,0 0.0\nP _part/18/_geo_xyz/15,12,1 0.0\nP _part/18/_geo_xyz/15,12,2 0.0\nP _part/18/_geo_xyz/15,13,0 0.0\nP _part/18/_geo_xyz/15,13,1 0.0\nP _part/18/_geo_xyz/15,13,2 0.0\nP _part/18/_geo_xyz/15,14,0 0.0\nP _part/18/_geo_xyz/15,14,1 0.0\nP _part/18/_geo_xyz/15,14,2 0.0\nP _part/18/_geo_xyz/15,15,0 0.0\nP _part/18/_geo_xyz/15,15,1 0.0\nP _part/18/_geo_xyz/15,15,2 0.0\nP _part/18/_geo_xyz/15,16,0 0.0\nP _part/18/_geo_xyz/15,16,1 0.0\nP _part/18/_geo_xyz/15,16,2 0.0\nP _part/18/_geo_xyz/15,17,0 0.0\nP _part/18/_geo_xyz/15,17,1 0.0\nP _part/18/_geo_xyz/15,17,2 0.0\nP _part/18/_geo_xyz/15,2,0 0.0\nP _part/18/_geo_xyz/15,2,1 0.0\nP _part/18/_geo_xyz/15,2,2 0.0\nP _part/18/_geo_xyz/15,3,0 0.0\nP _part/18/_geo_xyz/15,3,1 0.0\nP _part/18/_geo_xyz/15,3,2 0.0\nP _part/18/_geo_xyz/15,4,0 0.0\nP _part/18/_geo_xyz/15,4,1 0.0\nP _part/18/_geo_xyz/15,4,2 0.0\nP _part/18/_geo_xyz/15,5,0 0.0\nP _part/18/_geo_xyz/15,5,1 0.0\nP _part/18/_geo_xyz/15,5,2 0.0\nP _part/18/_geo_xyz/15,6,0 0.0\nP _part/18/_geo_xyz/15,6,1 0.0\nP _part/18/_geo_xyz/15,6,2 0.0\nP _part/18/_geo_xyz/15,7,0 0.0\nP _part/18/_geo_xyz/15,7,1 0.0\nP _part/18/_geo_xyz/15,7,2 0.0\nP _part/18/_geo_xyz/15,8,0 0.0\nP _part/18/_geo_xyz/15,8,1 0.0\nP _part/18/_geo_xyz/15,8,2 0.0\nP _part/18/_geo_xyz/15,9,0 0.0\nP _part/18/_geo_xyz/15,9,1 0.0\nP _part/18/_geo_xyz/15,9,2 0.0\nP _part/18/_geo_xyz/16,0,0 0.0\nP _part/18/_geo_xyz/16,0,1 0.0\nP _part/18/_geo_xyz/16,0,2 0.0\nP _part/18/_geo_xyz/16,1,0 0.0\nP _part/18/_geo_xyz/16,1,1 0.0\nP _part/18/_geo_xyz/16,1,2 0.0\nP _part/18/_geo_xyz/16,10,0 0.0\nP _part/18/_geo_xyz/16,10,1 0.0\nP _part/18/_geo_xyz/16,10,2 0.0\nP _part/18/_geo_xyz/16,11,0 0.0\nP _part/18/_geo_xyz/16,11,1 0.0\nP _part/18/_geo_xyz/16,11,2 0.0\nP _part/18/_geo_xyz/16,12,0 0.0\nP _part/18/_geo_xyz/16,12,1 0.0\nP _part/18/_geo_xyz/16,12,2 0.0\nP _part/18/_geo_xyz/16,13,0 0.0\nP _part/18/_geo_xyz/16,13,1 0.0\nP _part/18/_geo_xyz/16,13,2 0.0\nP _part/18/_geo_xyz/16,14,0 0.0\nP _part/18/_geo_xyz/16,14,1 0.0\nP _part/18/_geo_xyz/16,14,2 0.0\nP _part/18/_geo_xyz/16,15,0 0.0\nP _part/18/_geo_xyz/16,15,1 0.0\nP _part/18/_geo_xyz/16,15,2 0.0\nP _part/18/_geo_xyz/16,16,0 0.0\nP _part/18/_geo_xyz/16,16,1 0.0\nP _part/18/_geo_xyz/16,16,2 0.0\nP _part/18/_geo_xyz/16,17,0 0.0\nP _part/18/_geo_xyz/16,17,1 0.0\nP _part/18/_geo_xyz/16,17,2 0.0\nP _part/18/_geo_xyz/16,2,0 0.0\nP _part/18/_geo_xyz/16,2,1 0.0\nP _part/18/_geo_xyz/16,2,2 0.0\nP _part/18/_geo_xyz/16,3,0 0.0\nP _part/18/_geo_xyz/16,3,1 0.0\nP _part/18/_geo_xyz/16,3,2 0.0\nP _part/18/_geo_xyz/16,4,0 0.0\nP _part/18/_geo_xyz/16,4,1 0.0\nP _part/18/_geo_xyz/16,4,2 0.0\nP _part/18/_geo_xyz/16,5,0 0.0\nP _part/18/_geo_xyz/16,5,1 0.0\nP _part/18/_geo_xyz/16,5,2 0.0\nP _part/18/_geo_xyz/16,6,0 0.0\nP _part/18/_geo_xyz/16,6,1 0.0\nP _part/18/_geo_xyz/16,6,2 0.0\nP _part/18/_geo_xyz/16,7,0 0.0\nP _part/18/_geo_xyz/16,7,1 0.0\nP _part/18/_geo_xyz/16,7,2 0.0\nP _part/18/_geo_xyz/16,8,0 0.0\nP _part/18/_geo_xyz/16,8,1 0.0\nP _part/18/_geo_xyz/16,8,2 0.0\nP _part/18/_geo_xyz/16,9,0 0.0\nP _part/18/_geo_xyz/16,9,1 0.0\nP _part/18/_geo_xyz/16,9,2 0.0\nP _part/18/_geo_xyz/17,0,0 0.0\nP _part/18/_geo_xyz/17,0,1 0.0\nP _part/18/_geo_xyz/17,0,2 0.0\nP _part/18/_geo_xyz/17,1,0 0.0\nP _part/18/_geo_xyz/17,1,1 0.0\nP _part/18/_geo_xyz/17,1,2 0.0\nP _part/18/_geo_xyz/17,10,0 0.0\nP _part/18/_geo_xyz/17,10,1 0.0\nP _part/18/_geo_xyz/17,10,2 0.0\nP _part/18/_geo_xyz/17,11,0 0.0\nP _part/18/_geo_xyz/17,11,1 0.0\nP _part/18/_geo_xyz/17,11,2 0.0\nP _part/18/_geo_xyz/17,12,0 0.0\nP _part/18/_geo_xyz/17,12,1 0.0\nP _part/18/_geo_xyz/17,12,2 0.0\nP _part/18/_geo_xyz/17,13,0 0.0\nP _part/18/_geo_xyz/17,13,1 0.0\nP _part/18/_geo_xyz/17,13,2 0.0\nP _part/18/_geo_xyz/17,14,0 0.0\nP _part/18/_geo_xyz/17,14,1 0.0\nP _part/18/_geo_xyz/17,14,2 0.0\nP _part/18/_geo_xyz/17,15,0 0.0\nP _part/18/_geo_xyz/17,15,1 0.0\nP _part/18/_geo_xyz/17,15,2 0.0\nP _part/18/_geo_xyz/17,16,0 0.0\nP _part/18/_geo_xyz/17,16,1 0.0\nP _part/18/_geo_xyz/17,16,2 0.0\nP _part/18/_geo_xyz/17,17,0 0.0\nP _part/18/_geo_xyz/17,17,1 0.0\nP _part/18/_geo_xyz/17,17,2 0.0\nP _part/18/_geo_xyz/17,2,0 0.0\nP _part/18/_geo_xyz/17,2,1 0.0\nP _part/18/_geo_xyz/17,2,2 0.0\nP _part/18/_geo_xyz/17,3,0 0.0\nP _part/18/_geo_xyz/17,3,1 0.0\nP _part/18/_geo_xyz/17,3,2 0.0\nP _part/18/_geo_xyz/17,4,0 0.0\nP _part/18/_geo_xyz/17,4,1 0.0\nP _part/18/_geo_xyz/17,4,2 0.0\nP _part/18/_geo_xyz/17,5,0 0.0\nP _part/18/_geo_xyz/17,5,1 0.0\nP _part/18/_geo_xyz/17,5,2 0.0\nP _part/18/_geo_xyz/17,6,0 0.0\nP _part/18/_geo_xyz/17,6,1 0.0\nP _part/18/_geo_xyz/17,6,2 0.0\nP _part/18/_geo_xyz/17,7,0 0.0\nP _part/18/_geo_xyz/17,7,1 0.0\nP _part/18/_geo_xyz/17,7,2 0.0\nP _part/18/_geo_xyz/17,8,0 0.0\nP _part/18/_geo_xyz/17,8,1 0.0\nP _part/18/_geo_xyz/17,8,2 0.0\nP _part/18/_geo_xyz/17,9,0 0.0\nP _part/18/_geo_xyz/17,9,1 0.0\nP _part/18/_geo_xyz/17,9,2 0.0\nP _part/18/_geo_xyz/18,0,0 0.0\nP _part/18/_geo_xyz/18,0,1 0.0\nP _part/18/_geo_xyz/18,0,2 0.0\nP _part/18/_geo_xyz/18,1,0 0.0\nP _part/18/_geo_xyz/18,1,1 0.0\nP _part/18/_geo_xyz/18,1,2 0.0\nP _part/18/_geo_xyz/18,10,0 0.0\nP _part/18/_geo_xyz/18,10,1 0.0\nP _part/18/_geo_xyz/18,10,2 0.0\nP _part/18/_geo_xyz/18,11,0 0.0\nP _part/18/_geo_xyz/18,11,1 0.0\nP _part/18/_geo_xyz/18,11,2 0.0\nP _part/18/_geo_xyz/18,12,0 0.0\nP _part/18/_geo_xyz/18,12,1 0.0\nP _part/18/_geo_xyz/18,12,2 0.0\nP _part/18/_geo_xyz/18,13,0 0.0\nP _part/18/_geo_xyz/18,13,1 0.0\nP _part/18/_geo_xyz/18,13,2 0.0\nP _part/18/_geo_xyz/18,14,0 0.0\nP _part/18/_geo_xyz/18,14,1 0.0\nP _part/18/_geo_xyz/18,14,2 0.0\nP _part/18/_geo_xyz/18,15,0 0.0\nP _part/18/_geo_xyz/18,15,1 0.0\nP _part/18/_geo_xyz/18,15,2 0.0\nP _part/18/_geo_xyz/18,16,0 0.0\nP _part/18/_geo_xyz/18,16,1 0.0\nP _part/18/_geo_xyz/18,16,2 0.0\nP _part/18/_geo_xyz/18,17,0 0.0\nP _part/18/_geo_xyz/18,17,1 0.0\nP _part/18/_geo_xyz/18,17,2 0.0\nP _part/18/_geo_xyz/18,2,0 0.0\nP _part/18/_geo_xyz/18,2,1 0.0\nP _part/18/_geo_xyz/18,2,2 0.0\nP _part/18/_geo_xyz/18,3,0 0.0\nP _part/18/_geo_xyz/18,3,1 0.0\nP _part/18/_geo_xyz/18,3,2 0.0\nP _part/18/_geo_xyz/18,4,0 0.0\nP _part/18/_geo_xyz/18,4,1 0.0\nP _part/18/_geo_xyz/18,4,2 0.0\nP _part/18/_geo_xyz/18,5,0 0.0\nP _part/18/_geo_xyz/18,5,1 0.0\nP _part/18/_geo_xyz/18,5,2 0.0\nP _part/18/_geo_xyz/18,6,0 0.0\nP _part/18/_geo_xyz/18,6,1 0.0\nP _part/18/_geo_xyz/18,6,2 0.0\nP _part/18/_geo_xyz/18,7,0 0.0\nP _part/18/_geo_xyz/18,7,1 0.0\nP _part/18/_geo_xyz/18,7,2 0.0\nP _part/18/_geo_xyz/18,8,0 0.0\nP _part/18/_geo_xyz/18,8,1 0.0\nP _part/18/_geo_xyz/18,8,2 0.0\nP _part/18/_geo_xyz/18,9,0 0.0\nP _part/18/_geo_xyz/18,9,1 0.0\nP _part/18/_geo_xyz/18,9,2 0.0\nP _part/18/_geo_xyz/19,0,0 0.0\nP _part/18/_geo_xyz/19,0,1 0.0\nP _part/18/_geo_xyz/19,0,2 0.0\nP _part/18/_geo_xyz/19,1,0 0.0\nP _part/18/_geo_xyz/19,1,1 0.0\nP _part/18/_geo_xyz/19,1,2 0.0\nP _part/18/_geo_xyz/19,10,0 0.0\nP _part/18/_geo_xyz/19,10,1 0.0\nP _part/18/_geo_xyz/19,10,2 0.0\nP _part/18/_geo_xyz/19,11,0 0.0\nP _part/18/_geo_xyz/19,11,1 0.0\nP _part/18/_geo_xyz/19,11,2 0.0\nP _part/18/_geo_xyz/19,12,0 0.0\nP _part/18/_geo_xyz/19,12,1 0.0\nP _part/18/_geo_xyz/19,12,2 0.0\nP _part/18/_geo_xyz/19,13,0 0.0\nP _part/18/_geo_xyz/19,13,1 0.0\nP _part/18/_geo_xyz/19,13,2 0.0\nP _part/18/_geo_xyz/19,14,0 0.0\nP _part/18/_geo_xyz/19,14,1 0.0\nP _part/18/_geo_xyz/19,14,2 0.0\nP _part/18/_geo_xyz/19,15,0 0.0\nP _part/18/_geo_xyz/19,15,1 0.0\nP _part/18/_geo_xyz/19,15,2 0.0\nP _part/18/_geo_xyz/19,16,0 0.0\nP _part/18/_geo_xyz/19,16,1 0.0\nP _part/18/_geo_xyz/19,16,2 0.0\nP _part/18/_geo_xyz/19,17,0 0.0\nP _part/18/_geo_xyz/19,17,1 0.0\nP _part/18/_geo_xyz/19,17,2 0.0\nP _part/18/_geo_xyz/19,2,0 0.0\nP _part/18/_geo_xyz/19,2,1 0.0\nP _part/18/_geo_xyz/19,2,2 0.0\nP _part/18/_geo_xyz/19,3,0 0.0\nP _part/18/_geo_xyz/19,3,1 0.0\nP _part/18/_geo_xyz/19,3,2 0.0\nP _part/18/_geo_xyz/19,4,0 0.0\nP _part/18/_geo_xyz/19,4,1 0.0\nP _part/18/_geo_xyz/19,4,2 0.0\nP _part/18/_geo_xyz/19,5,0 0.0\nP _part/18/_geo_xyz/19,5,1 0.0\nP _part/18/_geo_xyz/19,5,2 0.0\nP _part/18/_geo_xyz/19,6,0 0.0\nP _part/18/_geo_xyz/19,6,1 0.0\nP _part/18/_geo_xyz/19,6,2 0.0\nP _part/18/_geo_xyz/19,7,0 0.0\nP _part/18/_geo_xyz/19,7,1 0.0\nP _part/18/_geo_xyz/19,7,2 0.0\nP _part/18/_geo_xyz/19,8,0 0.0\nP _part/18/_geo_xyz/19,8,1 0.0\nP _part/18/_geo_xyz/19,8,2 0.0\nP _part/18/_geo_xyz/19,9,0 0.0\nP _part/18/_geo_xyz/19,9,1 0.0\nP _part/18/_geo_xyz/19,9,2 0.0\nP _part/18/_geo_xyz/2,0,0 -0.000000501\nP _part/18/_geo_xyz/2,0,1 3.075787306\nP _part/18/_geo_xyz/2,0,2 32.800197601\nP _part/18/_geo_xyz/2,1,0 -0.000591052\nP _part/18/_geo_xyz/2,1,1 3.075787306\nP _part/18/_geo_xyz/2,1,2 32.801181793\nP _part/18/_geo_xyz/2,10,0 0.001475877\nP _part/18/_geo_xyz/2,10,1 3.075787306\nP _part/18/_geo_xyz/2,10,2 32.808399200\nP _part/18/_geo_xyz/2,11,0 0.001180601\nP _part/18/_geo_xyz/2,11,1 3.075787306\nP _part/18/_geo_xyz/2,11,2 32.803478241\nP _part/18/_geo_xyz/2,12,0 0.000590050\nP _part/18/_geo_xyz/2,12,1 3.075787306\nP _part/18/_geo_xyz/2,12,2 32.801181793\nP _part/18/_geo_xyz/2,13,0 -0.000000501\nP _part/18/_geo_xyz/2,13,1 3.075787306\nP _part/18/_geo_xyz/2,13,2 32.800197601\nP _part/18/_geo_xyz/2,14,0 0.0\nP _part/18/_geo_xyz/2,14,1 0.0\nP _part/18/_geo_xyz/2,14,2 0.0\nP _part/18/_geo_xyz/2,15,0 0.0\nP _part/18/_geo_xyz/2,15,1 0.0\nP _part/18/_geo_xyz/2,15,2 0.0\nP _part/18/_geo_xyz/2,16,0 0.0\nP _part/18/_geo_xyz/2,16,1 0.0\nP _part/18/_geo_xyz/2,16,2 0.0\nP _part/18/_geo_xyz/2,17,0 0.0\nP _part/18/_geo_xyz/2,17,1 0.0\nP _part/18/_geo_xyz/2,17,2 0.0\nP _part/18/_geo_xyz/2,2,0 -0.001181603\nP _part/18/_geo_xyz/2,2,1 3.075787306\nP _part/18/_geo_xyz/2,2,2 32.803478241\nP _part/18/_geo_xyz/2,3,0 -0.001476879\nP _part/18/_geo_xyz/2,3,1 3.075787306\nP _part/18/_geo_xyz/2,3,2 32.808399200\nP _part/18/_geo_xyz/2,4,0 -0.001476879\nP _part/18/_geo_xyz/2,4,1 3.075787306\nP _part/18/_geo_xyz/2,4,2 32.814960480\nP _part/18/_geo_xyz/2,5,0 -0.000671582\nP _part/18/_geo_xyz/2,5,1 3.075787306\nP _part/18/_geo_xyz/2,5,2 32.824802399\nP _part/18/_geo_xyz/2,6,0 -0.000000501\nP _part/18/_geo_xyz/2,6,1 3.075787306\nP _part/18/_geo_xyz/2,6,2 32.833003998\nP _part/18/_geo_xyz/2,7,0 -0.000000501\nP _part/18/_geo_xyz/2,7,1 3.075787306\nP _part/18/_geo_xyz/2,7,2 32.833003998\nP _part/18/_geo_xyz/2,8,0 0.000670580\nP _part/18/_geo_xyz/2,8,1 3.075787306\nP _part/18/_geo_xyz/2,8,2 32.824802399\nP _part/18/_geo_xyz/2,9,0 0.001475877\nP _part/18/_geo_xyz/2,9,1 3.075787306\nP _part/18/_geo_xyz/2,9,2 32.814960480\nP _part/18/_geo_xyz/3,0,0 -0.000001002\nP _part/18/_geo_xyz/3,0,1 6.151574612\nP _part/18/_geo_xyz/3,0,2 32.800197601\nP _part/18/_geo_xyz/3,1,0 -0.000591553\nP _part/18/_geo_xyz/3,1,1 6.151574612\nP _part/18/_geo_xyz/3,1,2 32.801181793\nP _part/18/_geo_xyz/3,10,0 0.001475376\nP _part/18/_geo_xyz/3,10,1 6.151574612\nP _part/18/_geo_xyz/3,10,2 32.808399200\nP _part/18/_geo_xyz/3,11,0 0.001180100\nP _part/18/_geo_xyz/3,11,1 6.151574612\nP _part/18/_geo_xyz/3,11,2 32.803478241\nP _part/18/_geo_xyz/3,12,0 0.000589549\nP _part/18/_geo_xyz/3,12,1 6.151574612\nP _part/18/_geo_xyz/3,12,2 32.801181793\nP _part/18/_geo_xyz/3,13,0 -0.000001002\nP _part/18/_geo_xyz/3,13,1 6.151574612\nP _part/18/_geo_xyz/3,13,2 32.800197601\nP _part/18/_geo_xyz/3,14,0 0.0\nP _part/18/_geo_xyz/3,14,1 0.0\nP _part/18/_geo_xyz/3,14,2 0.0\nP _part/18/_geo_xyz/3,15,0 0.0\nP _part/18/_geo_xyz/3,15,1 0.0\nP _part/18/_geo_xyz/3,15,2 0.0\nP _part/18/_geo_xyz/3,16,0 0.0\nP _part/18/_geo_xyz/3,16,1 0.0\nP _part/18/_geo_xyz/3,16,2 0.0\nP _part/18/_geo_xyz/3,17,0 0.0\nP _part/18/_geo_xyz/3,17,1 0.0\nP _part/18/_geo_xyz/3,17,2 0.0\nP _part/18/_geo_xyz/3,2,0 -0.001182105\nP _part/18/_geo_xyz/3,2,1 6.151574612\nP _part/18/_geo_xyz/3,2,2 32.803478241\nP _part/18/_geo_xyz/3,3,0 -0.001477380\nP _part/18/_geo_xyz/3,3,1 6.151574612\nP _part/18/_geo_xyz/3,3,2 32.808399200\nP _part/18/_geo_xyz/3,4,0 -0.001477380\nP _part/18/_geo_xyz/3,4,1 6.151574612\nP _part/18/_geo_xyz/3,4,2 32.814960480\nP _part/18/_geo_xyz/3,5,0 -0.000672083\nP _part/18/_geo_xyz/3,5,1 6.151574612\nP _part/18/_geo_xyz/3,5,2 32.824802399\nP _part/18/_geo_xyz/3,6,0 -0.000001002\nP _part/18/_geo_xyz/3,6,1 6.151574612\nP _part/18/_geo_xyz/3,6,2 32.833003998\nP _part/18/_geo_xyz/3,7,0 -0.000001002\nP _part/18/_geo_xyz/3,7,1 6.151574612\nP _part/18/_geo_xyz/3,7,2 32.833003998\nP _part/18/_geo_xyz/3,8,0 0.000670079\nP _part/18/_geo_xyz/3,8,1 6.151574612\nP _part/18/_geo_xyz/3,8,2 32.824802399\nP _part/18/_geo_xyz/3,9,0 0.001475376\nP _part/18/_geo_xyz/3,9,1 6.151574612\nP _part/18/_geo_xyz/3,9,2 32.814960480\nP _part/18/_geo_xyz/4,0,0 -0.000001002\nP _part/18/_geo_xyz/4,0,1 6.151574612\nP _part/18/_geo_xyz/4,0,2 32.800197601\nP _part/18/_geo_xyz/4,1,0 -0.000591553\nP _part/18/_geo_xyz/4,1,1 6.151574612\nP _part/18/_geo_xyz/4,1,2 32.801181793\nP _part/18/_geo_xyz/4,10,0 0.001475376\nP _part/18/_geo_xyz/4,10,1 6.151574612\nP _part/18/_geo_xyz/4,10,2 32.808399200\nP _part/18/_geo_xyz/4,11,0 0.001180100\nP _part/18/_geo_xyz/4,11,1 6.151574612\nP _part/18/_geo_xyz/4,11,2 32.803478241\nP _part/18/_geo_xyz/4,12,0 0.000589549\nP _part/18/_geo_xyz/4,12,1 6.151574612\nP _part/18/_geo_xyz/4,12,2 32.801181793\nP _part/18/_geo_xyz/4,13,0 -0.000001002\nP _part/18/_geo_xyz/4,13,1 6.151574612\nP _part/18/_geo_xyz/4,13,2 32.800197601\nP _part/18/_geo_xyz/4,14,0 0.0\nP _part/18/_geo_xyz/4,14,1 0.0\nP _part/18/_geo_xyz/4,14,2 0.0\nP _part/18/_geo_xyz/4,15,0 0.0\nP _part/18/_geo_xyz/4,15,1 0.0\nP _part/18/_geo_xyz/4,15,2 0.0\nP _part/18/_geo_xyz/4,16,0 0.0\nP _part/18/_geo_xyz/4,16,1 0.0\nP _part/18/_geo_xyz/4,16,2 0.0\nP _part/18/_geo_xyz/4,17,0 0.0\nP _part/18/_geo_xyz/4,17,1 0.0\nP _part/18/_geo_xyz/4,17,2 0.0\nP _part/18/_geo_xyz/4,2,0 -0.001182105\nP _part/18/_geo_xyz/4,2,1 6.151574612\nP _part/18/_geo_xyz/4,2,2 32.803478241\nP _part/18/_geo_xyz/4,3,0 -0.001477380\nP _part/18/_geo_xyz/4,3,1 6.151574612\nP _part/18/_geo_xyz/4,3,2 32.808399200\nP _part/18/_geo_xyz/4,4,0 -0.001477380\nP _part/18/_geo_xyz/4,4,1 6.151574612\nP _part/18/_geo_xyz/4,4,2 32.814960480\nP _part/18/_geo_xyz/4,5,0 -0.000672083\nP _part/18/_geo_xyz/4,5,1 6.151574612\nP _part/18/_geo_xyz/4,5,2 32.824802399\nP _part/18/_geo_xyz/4,6,0 -0.000001002\nP _part/18/_geo_xyz/4,6,1 6.151574612\nP _part/18/_geo_xyz/4,6,2 32.833003998\nP _part/18/_geo_xyz/4,7,0 -0.000001002\nP _part/18/_geo_xyz/4,7,1 6.151574612\nP _part/18/_geo_xyz/4,7,2 32.833003998\nP _part/18/_geo_xyz/4,8,0 0.000670079\nP _part/18/_geo_xyz/4,8,1 6.151574612\nP _part/18/_geo_xyz/4,8,2 32.824802399\nP _part/18/_geo_xyz/4,9,0 0.001475376\nP _part/18/_geo_xyz/4,9,1 6.151574612\nP _part/18/_geo_xyz/4,9,2 32.814960480\nP _part/18/_geo_xyz/5,0,0 -0.000001503\nP _part/18/_geo_xyz/5,0,1 9.227361679\nP _part/18/_geo_xyz/5,0,2 32.800197601\nP _part/18/_geo_xyz/5,1,0 -0.000592055\nP _part/18/_geo_xyz/5,1,1 9.227361679\nP _part/18/_geo_xyz/5,1,2 32.801181793\nP _part/18/_geo_xyz/5,10,0 0.001474875\nP _part/18/_geo_xyz/5,10,1 9.227361679\nP _part/18/_geo_xyz/5,10,2 32.808399200\nP _part/18/_geo_xyz/5,11,0 0.001179599\nP _part/18/_geo_xyz/5,11,1 9.227361679\nP _part/18/_geo_xyz/5,11,2 32.803478241\nP _part/18/_geo_xyz/5,12,0 0.000589048\nP _part/18/_geo_xyz/5,12,1 9.227361679\nP _part/18/_geo_xyz/5,12,2 32.801181793\nP _part/18/_geo_xyz/5,13,0 -0.000001503\nP _part/18/_geo_xyz/5,13,1 9.227361679\nP _part/18/_geo_xyz/5,13,2 32.800197601\nP _part/18/_geo_xyz/5,14,0 0.0\nP _part/18/_geo_xyz/5,14,1 0.0\nP _part/18/_geo_xyz/5,14,2 0.0\nP _part/18/_geo_xyz/5,15,0 0.0\nP _part/18/_geo_xyz/5,15,1 0.0\nP _part/18/_geo_xyz/5,15,2 0.0\nP _part/18/_geo_xyz/5,16,0 0.0\nP _part/18/_geo_xyz/5,16,1 0.0\nP _part/18/_geo_xyz/5,16,2 0.0\nP _part/18/_geo_xyz/5,17,0 0.0\nP _part/18/_geo_xyz/5,17,1 0.0\nP _part/18/_geo_xyz/5,17,2 0.0\nP _part/18/_geo_xyz/5,2,0 -0.001182606\nP _part/18/_geo_xyz/5,2,1 9.227361679\nP _part/18/_geo_xyz/5,2,2 32.803478241\nP _part/18/_geo_xyz/5,3,0 -0.001477881\nP _part/18/_geo_xyz/5,3,1 9.227361679\nP _part/18/_geo_xyz/5,3,2 32.808399200\nP _part/18/_geo_xyz/5,4,0 -0.001477881\nP _part/18/_geo_xyz/5,4,1 9.227361679\nP _part/18/_geo_xyz/5,4,2 32.814960480\nP _part/18/_geo_xyz/5,5,0 -0.000672584\nP _part/18/_geo_xyz/5,5,1 9.227361679\nP _part/18/_geo_xyz/5,5,2 32.824802399\nP _part/18/_geo_xyz/5,6,0 -0.000001503\nP _part/18/_geo_xyz/5,6,1 9.227361679\nP _part/18/_geo_xyz/5,6,2 32.833003998\nP _part/18/_geo_xyz/5,7,0 -0.000001503\nP _part/18/_geo_xyz/5,7,1 9.227361679\nP _part/18/_geo_xyz/5,7,2 32.833003998\nP _part/18/_geo_xyz/5,8,0 0.000669578\nP _part/18/_geo_xyz/5,8,1 9.227361679\nP _part/18/_geo_xyz/5,8,2 32.824802399\nP _part/18/_geo_xyz/5,9,0 0.001474875\nP _part/18/_geo_xyz/5,9,1 9.227361679\nP _part/18/_geo_xyz/5,9,2 32.814960480\nP _part/18/_geo_xyz/6,0,0 -0.000001503\nP _part/18/_geo_xyz/6,0,1 9.227361679\nP _part/18/_geo_xyz/6,0,2 32.800197601\nP _part/18/_geo_xyz/6,1,0 -0.000592055\nP _part/18/_geo_xyz/6,1,1 9.227361679\nP _part/18/_geo_xyz/6,1,2 32.801181793\nP _part/18/_geo_xyz/6,10,0 0.001474875\nP _part/18/_geo_xyz/6,10,1 9.227361679\nP _part/18/_geo_xyz/6,10,2 32.808399200\nP _part/18/_geo_xyz/6,11,0 0.001179599\nP _part/18/_geo_xyz/6,11,1 9.227361679\nP _part/18/_geo_xyz/6,11,2 32.803478241\nP _part/18/_geo_xyz/6,12,0 0.000589048\nP _part/18/_geo_xyz/6,12,1 9.227361679\nP _part/18/_geo_xyz/6,12,2 32.801181793\nP _part/18/_geo_xyz/6,13,0 -0.000001503\nP _part/18/_geo_xyz/6,13,1 9.227361679\nP _part/18/_geo_xyz/6,13,2 32.800197601\nP _part/18/_geo_xyz/6,14,0 0.0\nP _part/18/_geo_xyz/6,14,1 0.0\nP _part/18/_geo_xyz/6,14,2 0.0\nP _part/18/_geo_xyz/6,15,0 0.0\nP _part/18/_geo_xyz/6,15,1 0.0\nP _part/18/_geo_xyz/6,15,2 0.0\nP _part/18/_geo_xyz/6,16,0 0.0\nP _part/18/_geo_xyz/6,16,1 0.0\nP _part/18/_geo_xyz/6,16,2 0.0\nP _part/18/_geo_xyz/6,17,0 0.0\nP _part/18/_geo_xyz/6,17,1 0.0\nP _part/18/_geo_xyz/6,17,2 0.0\nP _part/18/_geo_xyz/6,2,0 -0.001182606\nP _part/18/_geo_xyz/6,2,1 9.227361679\nP _part/18/_geo_xyz/6,2,2 32.803478241\nP _part/18/_geo_xyz/6,3,0 -0.001477881\nP _part/18/_geo_xyz/6,3,1 9.227361679\nP _part/18/_geo_xyz/6,3,2 32.808399200\nP _part/18/_geo_xyz/6,4,0 -0.001477881\nP _part/18/_geo_xyz/6,4,1 9.227361679\nP _part/18/_geo_xyz/6,4,2 32.814960480\nP _part/18/_geo_xyz/6,5,0 -0.000672584\nP _part/18/_geo_xyz/6,5,1 9.227361679\nP _part/18/_geo_xyz/6,5,2 32.824802399\nP _part/18/_geo_xyz/6,6,0 -0.000001503\nP _part/18/_geo_xyz/6,6,1 9.227361679\nP _part/18/_geo_xyz/6,6,2 32.833003998\nP _part/18/_geo_xyz/6,7,0 -0.000001503\nP _part/18/_geo_xyz/6,7,1 9.227361679\nP _part/18/_geo_xyz/6,7,2 32.833003998\nP _part/18/_geo_xyz/6,8,0 0.000669578\nP _part/18/_geo_xyz/6,8,1 9.227361679\nP _part/18/_geo_xyz/6,8,2 32.824802399\nP _part/18/_geo_xyz/6,9,0 0.001474875\nP _part/18/_geo_xyz/6,9,1 9.227361679\nP _part/18/_geo_xyz/6,9,2 32.814960480\nP _part/18/_geo_xyz/7,0,0 -0.000002004\nP _part/18/_geo_xyz/7,0,1 12.303149223\nP _part/18/_geo_xyz/7,0,2 32.800197601\nP _part/18/_geo_xyz/7,1,0 -0.000592556\nP _part/18/_geo_xyz/7,1,1 12.303149223\nP _part/18/_geo_xyz/7,1,2 32.801181793\nP _part/18/_geo_xyz/7,10,0 0.001474374\nP _part/18/_geo_xyz/7,10,1 12.303149223\nP _part/18/_geo_xyz/7,10,2 32.808399200\nP _part/18/_geo_xyz/7,11,0 0.001179098\nP _part/18/_geo_xyz/7,11,1 12.303149223\nP _part/18/_geo_xyz/7,11,2 32.803478241\nP _part/18/_geo_xyz/7,12,0 0.000588547\nP _part/18/_geo_xyz/7,12,1 12.303149223\nP _part/18/_geo_xyz/7,12,2 32.801181793\nP _part/18/_geo_xyz/7,13,0 -0.000002004\nP _part/18/_geo_xyz/7,13,1 12.303149223\nP _part/18/_geo_xyz/7,13,2 32.800197601\nP _part/18/_geo_xyz/7,14,0 0.0\nP _part/18/_geo_xyz/7,14,1 0.0\nP _part/18/_geo_xyz/7,14,2 0.0\nP _part/18/_geo_xyz/7,15,0 0.0\nP _part/18/_geo_xyz/7,15,1 0.0\nP _part/18/_geo_xyz/7,15,2 0.0\nP _part/18/_geo_xyz/7,16,0 0.0\nP _part/18/_geo_xyz/7,16,1 0.0\nP _part/18/_geo_xyz/7,16,2 0.0\nP _part/18/_geo_xyz/7,17,0 0.0\nP _part/18/_geo_xyz/7,17,1 0.0\nP _part/18/_geo_xyz/7,17,2 0.0\nP _part/18/_geo_xyz/7,2,0 -0.001183107\nP _part/18/_geo_xyz/7,2,1 12.303149223\nP _part/18/_geo_xyz/7,2,2 32.803478241\nP _part/18/_geo_xyz/7,3,0 -0.001478382\nP _part/18/_geo_xyz/7,3,1 12.303149223\nP _part/18/_geo_xyz/7,3,2 32.808399200\nP _part/18/_geo_xyz/7,4,0 -0.001478382\nP _part/18/_geo_xyz/7,4,1 12.303149223\nP _part/18/_geo_xyz/7,4,2 32.814960480\nP _part/18/_geo_xyz/7,5,0 -0.000673085\nP _part/18/_geo_xyz/7,5,1 12.303149223\nP _part/18/_geo_xyz/7,5,2 32.824802399\nP _part/18/_geo_xyz/7,6,0 -0.000002004\nP _part/18/_geo_xyz/7,6,1 12.303149223\nP _part/18/_geo_xyz/7,6,2 32.833003998\nP _part/18/_geo_xyz/7,7,0 -0.000002004\nP _part/18/_geo_xyz/7,7,1 12.303149223\nP _part/18/_geo_xyz/7,7,2 32.833003998\nP _part/18/_geo_xyz/7,8,0 0.000669076\nP _part/18/_geo_xyz/7,8,1 12.303149223\nP _part/18/_geo_xyz/7,8,2 32.824802399\nP _part/18/_geo_xyz/7,9,0 0.001474374\nP _part/18/_geo_xyz/7,9,1 12.303149223\nP _part/18/_geo_xyz/7,9,2 32.814960480\nP _part/18/_geo_xyz/8,0,0 -0.000002004\nP _part/18/_geo_xyz/8,0,1 12.303149223\nP _part/18/_geo_xyz/8,0,2 32.800197601\nP _part/18/_geo_xyz/8,1,0 -0.000592556\nP _part/18/_geo_xyz/8,1,1 12.303149223\nP _part/18/_geo_xyz/8,1,2 32.801181793\nP _part/18/_geo_xyz/8,10,0 0.001474374\nP _part/18/_geo_xyz/8,10,1 12.303149223\nP _part/18/_geo_xyz/8,10,2 32.808399200\nP _part/18/_geo_xyz/8,11,0 0.001179098\nP _part/18/_geo_xyz/8,11,1 12.303149223\nP _part/18/_geo_xyz/8,11,2 32.803478241\nP _part/18/_geo_xyz/8,12,0 0.000588547\nP _part/18/_geo_xyz/8,12,1 12.303149223\nP _part/18/_geo_xyz/8,12,2 32.801181793\nP _part/18/_geo_xyz/8,13,0 -0.000002004\nP _part/18/_geo_xyz/8,13,1 12.303149223\nP _part/18/_geo_xyz/8,13,2 32.800197601\nP _part/18/_geo_xyz/8,14,0 0.0\nP _part/18/_geo_xyz/8,14,1 0.0\nP _part/18/_geo_xyz/8,14,2 0.0\nP _part/18/_geo_xyz/8,15,0 0.0\nP _part/18/_geo_xyz/8,15,1 0.0\nP _part/18/_geo_xyz/8,15,2 0.0\nP _part/18/_geo_xyz/8,16,0 0.0\nP _part/18/_geo_xyz/8,16,1 0.0\nP _part/18/_geo_xyz/8,16,2 0.0\nP _part/18/_geo_xyz/8,17,0 0.0\nP _part/18/_geo_xyz/8,17,1 0.0\nP _part/18/_geo_xyz/8,17,2 0.0\nP _part/18/_geo_xyz/8,2,0 -0.001183107\nP _part/18/_geo_xyz/8,2,1 12.303149223\nP _part/18/_geo_xyz/8,2,2 32.803478241\nP _part/18/_geo_xyz/8,3,0 -0.001478382\nP _part/18/_geo_xyz/8,3,1 12.303149223\nP _part/18/_geo_xyz/8,3,2 32.808399200\nP _part/18/_geo_xyz/8,4,0 -0.001478382\nP _part/18/_geo_xyz/8,4,1 12.303149223\nP _part/18/_geo_xyz/8,4,2 32.814960480\nP _part/18/_geo_xyz/8,5,0 -0.000673085\nP _part/18/_geo_xyz/8,5,1 12.303149223\nP _part/18/_geo_xyz/8,5,2 32.824802399\nP _part/18/_geo_xyz/8,6,0 -0.000002004\nP _part/18/_geo_xyz/8,6,1 12.303149223\nP _part/18/_geo_xyz/8,6,2 32.833003998\nP _part/18/_geo_xyz/8,7,0 -0.000002004\nP _part/18/_geo_xyz/8,7,1 12.303149223\nP _part/18/_geo_xyz/8,7,2 32.833003998\nP _part/18/_geo_xyz/8,8,0 0.000669076\nP _part/18/_geo_xyz/8,8,1 12.303149223\nP _part/18/_geo_xyz/8,8,2 32.824802399\nP _part/18/_geo_xyz/8,9,0 0.001474374\nP _part/18/_geo_xyz/8,9,1 12.303149223\nP _part/18/_geo_xyz/8,9,2 32.814960480\nP _part/18/_geo_xyz/9,0,0 0.0\nP _part/18/_geo_xyz/9,0,1 0.0\nP _part/18/_geo_xyz/9,0,2 0.0\nP _part/18/_geo_xyz/9,1,0 0.0\nP _part/18/_geo_xyz/9,1,1 0.0\nP _part/18/_geo_xyz/9,1,2 0.0\nP _part/18/_geo_xyz/9,10,0 0.0\nP _part/18/_geo_xyz/9,10,1 0.0\nP _part/18/_geo_xyz/9,10,2 0.0\nP _part/18/_geo_xyz/9,11,0 0.0\nP _part/18/_geo_xyz/9,11,1 0.0\nP _part/18/_geo_xyz/9,11,2 0.0\nP _part/18/_geo_xyz/9,12,0 0.0\nP _part/18/_geo_xyz/9,12,1 0.0\nP _part/18/_geo_xyz/9,12,2 0.0\nP _part/18/_geo_xyz/9,13,0 0.0\nP _part/18/_geo_xyz/9,13,1 0.0\nP _part/18/_geo_xyz/9,13,2 0.0\nP _part/18/_geo_xyz/9,14,0 0.0\nP _part/18/_geo_xyz/9,14,1 0.0\nP _part/18/_geo_xyz/9,14,2 0.0\nP _part/18/_geo_xyz/9,15,0 0.0\nP _part/18/_geo_xyz/9,15,1 0.0\nP _part/18/_geo_xyz/9,15,2 0.0\nP _part/18/_geo_xyz/9,16,0 0.0\nP _part/18/_geo_xyz/9,16,1 0.0\nP _part/18/_geo_xyz/9,16,2 0.0\nP _part/18/_geo_xyz/9,17,0 0.0\nP _part/18/_geo_xyz/9,17,1 0.0\nP _part/18/_geo_xyz/9,17,2 0.0\nP _part/18/_geo_xyz/9,2,0 0.0\nP _part/18/_geo_xyz/9,2,1 0.0\nP _part/18/_geo_xyz/9,2,2 0.0\nP _part/18/_geo_xyz/9,3,0 0.0\nP _part/18/_geo_xyz/9,3,1 0.0\nP _part/18/_geo_xyz/9,3,2 0.0\nP _part/18/_geo_xyz/9,4,0 0.0\nP _part/18/_geo_xyz/9,4,1 0.0\nP _part/18/_geo_xyz/9,4,2 0.0\nP _part/18/_geo_xyz/9,5,0 0.0\nP _part/18/_geo_xyz/9,5,1 0.0\nP _part/18/_geo_xyz/9,5,2 0.0\nP _part/18/_geo_xyz/9,6,0 0.0\nP _part/18/_geo_xyz/9,6,1 0.0\nP _part/18/_geo_xyz/9,6,2 0.0\nP _part/18/_geo_xyz/9,7,0 0.0\nP _part/18/_geo_xyz/9,7,1 0.0\nP _part/18/_geo_xyz/9,7,2 0.0\nP _part/18/_geo_xyz/9,8,0 0.0\nP _part/18/_geo_xyz/9,8,1 0.0\nP _part/18/_geo_xyz/9,8,2 0.0\nP _part/18/_geo_xyz/9,9,0 0.0\nP _part/18/_geo_xyz/9,9,1 0.0\nP _part/18/_geo_xyz/9,9,2 0.0\nP _part/18/_geo_xyz/i_count 20\nP _part/18/_geo_xyz/j_count 18\nP _part/18/_geo_xyz/k_count 3\nP _part/18/_locked/0,0 0\nP _part/18/_locked/0,1 0\nP _part/18/_locked/0,10 0\nP _part/18/_locked/0,11 0\nP _part/18/_locked/0,12 0\nP _part/18/_locked/0,13 0\nP _part/18/_locked/0,14 0\nP _part/18/_locked/0,15 0\nP _part/18/_locked/0,16 0\nP _part/18/_locked/0,17 0\nP _part/18/_locked/0,2 0\nP _part/18/_locked/0,3 0\nP _part/18/_locked/0,4 0\nP _part/18/_locked/0,5 0\nP _part/18/_locked/0,6 0\nP _part/18/_locked/0,7 0\nP _part/18/_locked/0,8 0\nP _part/18/_locked/0,9 0\nP _part/18/_locked/1,0 0\nP _part/18/_locked/1,1 0\nP _part/18/_locked/1,10 0\nP _part/18/_locked/1,11 0\nP _part/18/_locked/1,12 0\nP _part/18/_locked/1,13 0\nP _part/18/_locked/1,14 0\nP _part/18/_locked/1,15 0\nP _part/18/_locked/1,16 0\nP _part/18/_locked/1,17 0\nP _part/18/_locked/1,2 0\nP _part/18/_locked/1,3 0\nP _part/18/_locked/1,4 0\nP _part/18/_locked/1,5 0\nP _part/18/_locked/1,6 0\nP _part/18/_locked/1,7 0\nP _part/18/_locked/1,8 0\nP _part/18/_locked/1,9 0\nP _part/18/_locked/10,0 0\nP _part/18/_locked/10,1 0\nP _part/18/_locked/10,10 0\nP _part/18/_locked/10,11 0\nP _part/18/_locked/10,12 0\nP _part/18/_locked/10,13 0\nP _part/18/_locked/10,14 0\nP _part/18/_locked/10,15 0\nP _part/18/_locked/10,16 0\nP _part/18/_locked/10,17 0\nP _part/18/_locked/10,2 0\nP _part/18/_locked/10,3 0\nP _part/18/_locked/10,4 0\nP _part/18/_locked/10,5 0\nP _part/18/_locked/10,6 0\nP _part/18/_locked/10,7 0\nP _part/18/_locked/10,8 0\nP _part/18/_locked/10,9 0\nP _part/18/_locked/11,0 0\nP _part/18/_locked/11,1 0\nP _part/18/_locked/11,10 0\nP _part/18/_locked/11,11 0\nP _part/18/_locked/11,12 0\nP _part/18/_locked/11,13 0\nP _part/18/_locked/11,14 0\nP _part/18/_locked/11,15 0\nP _part/18/_locked/11,16 0\nP _part/18/_locked/11,17 0\nP _part/18/_locked/11,2 0\nP _part/18/_locked/11,3 0\nP _part/18/_locked/11,4 0\nP _part/18/_locked/11,5 0\nP _part/18/_locked/11,6 0\nP _part/18/_locked/11,7 0\nP _part/18/_locked/11,8 0\nP _part/18/_locked/11,9 0\nP _part/18/_locked/12,0 0\nP _part/18/_locked/12,1 0\nP _part/18/_locked/12,10 0\nP _part/18/_locked/12,11 0\nP _part/18/_locked/12,12 0\nP _part/18/_locked/12,13 0\nP _part/18/_locked/12,14 0\nP _part/18/_locked/12,15 0\nP _part/18/_locked/12,16 0\nP _part/18/_locked/12,17 0\nP _part/18/_locked/12,2 0\nP _part/18/_locked/12,3 0\nP _part/18/_locked/12,4 0\nP _part/18/_locked/12,5 0\nP _part/18/_locked/12,6 0\nP _part/18/_locked/12,7 0\nP _part/18/_locked/12,8 0\nP _part/18/_locked/12,9 0\nP _part/18/_locked/13,0 0\nP _part/18/_locked/13,1 0\nP _part/18/_locked/13,10 0\nP _part/18/_locked/13,11 0\nP _part/18/_locked/13,12 0\nP _part/18/_locked/13,13 0\nP _part/18/_locked/13,14 0\nP _part/18/_locked/13,15 0\nP _part/18/_locked/13,16 0\nP _part/18/_locked/13,17 0\nP _part/18/_locked/13,2 0\nP _part/18/_locked/13,3 0\nP _part/18/_locked/13,4 0\nP _part/18/_locked/13,5 0\nP _part/18/_locked/13,6 0\nP _part/18/_locked/13,7 0\nP _part/18/_locked/13,8 0\nP _part/18/_locked/13,9 0\nP _part/18/_locked/14,0 0\nP _part/18/_locked/14,1 0\nP _part/18/_locked/14,10 0\nP _part/18/_locked/14,11 0\nP _part/18/_locked/14,12 0\nP _part/18/_locked/14,13 0\nP _part/18/_locked/14,14 0\nP _part/18/_locked/14,15 0\nP _part/18/_locked/14,16 0\nP _part/18/_locked/14,17 0\nP _part/18/_locked/14,2 0\nP _part/18/_locked/14,3 0\nP _part/18/_locked/14,4 0\nP _part/18/_locked/14,5 0\nP _part/18/_locked/14,6 0\nP _part/18/_locked/14,7 0\nP _part/18/_locked/14,8 0\nP _part/18/_locked/14,9 0\nP _part/18/_locked/15,0 0\nP _part/18/_locked/15,1 0\nP _part/18/_locked/15,10 0\nP _part/18/_locked/15,11 0\nP _part/18/_locked/15,12 0\nP _part/18/_locked/15,13 0\nP _part/18/_locked/15,14 0\nP _part/18/_locked/15,15 0\nP _part/18/_locked/15,16 0\nP _part/18/_locked/15,17 0\nP _part/18/_locked/15,2 0\nP _part/18/_locked/15,3 0\nP _part/18/_locked/15,4 0\nP _part/18/_locked/15,5 0\nP _part/18/_locked/15,6 0\nP _part/18/_locked/15,7 0\nP _part/18/_locked/15,8 0\nP _part/18/_locked/15,9 0\nP _part/18/_locked/16,0 0\nP _part/18/_locked/16,1 0\nP _part/18/_locked/16,10 0\nP _part/18/_locked/16,11 0\nP _part/18/_locked/16,12 0\nP _part/18/_locked/16,13 0\nP _part/18/_locked/16,14 0\nP _part/18/_locked/16,15 0\nP _part/18/_locked/16,16 0\nP _part/18/_locked/16,17 0\nP _part/18/_locked/16,2 0\nP _part/18/_locked/16,3 0\nP _part/18/_locked/16,4 0\nP _part/18/_locked/16,5 0\nP _part/18/_locked/16,6 0\nP _part/18/_locked/16,7 0\nP _part/18/_locked/16,8 0\nP _part/18/_locked/16,9 0\nP _part/18/_locked/17,0 0\nP _part/18/_locked/17,1 0\nP _part/18/_locked/17,10 0\nP _part/18/_locked/17,11 0\nP _part/18/_locked/17,12 0\nP _part/18/_locked/17,13 0\nP _part/18/_locked/17,14 0\nP _part/18/_locked/17,15 0\nP _part/18/_locked/17,16 0\nP _part/18/_locked/17,17 0\nP _part/18/_locked/17,2 0\nP _part/18/_locked/17,3 0\nP _part/18/_locked/17,4 0\nP _part/18/_locked/17,5 0\nP _part/18/_locked/17,6 0\nP _part/18/_locked/17,7 0\nP _part/18/_locked/17,8 0\nP _part/18/_locked/17,9 0\nP _part/18/_locked/18,0 0\nP _part/18/_locked/18,1 0\nP _part/18/_locked/18,10 0\nP _part/18/_locked/18,11 0\nP _part/18/_locked/18,12 0\nP _part/18/_locked/18,13 0\nP _part/18/_locked/18,14 0\nP _part/18/_locked/18,15 0\nP _part/18/_locked/18,16 0\nP _part/18/_locked/18,17 0\nP _part/18/_locked/18,2 0\nP _part/18/_locked/18,3 0\nP _part/18/_locked/18,4 0\nP _part/18/_locked/18,5 0\nP _part/18/_locked/18,6 0\nP _part/18/_locked/18,7 0\nP _part/18/_locked/18,8 0\nP _part/18/_locked/18,9 0\nP _part/18/_locked/19,0 0\nP _part/18/_locked/19,1 0\nP _part/18/_locked/19,10 0\nP _part/18/_locked/19,11 0\nP _part/18/_locked/19,12 0\nP _part/18/_locked/19,13 0\nP _part/18/_locked/19,14 0\nP _part/18/_locked/19,15 0\nP _part/18/_locked/19,16 0\nP _part/18/_locked/19,17 0\nP _part/18/_locked/19,2 0\nP _part/18/_locked/19,3 0\nP _part/18/_locked/19,4 0\nP _part/18/_locked/19,5 0\nP _part/18/_locked/19,6 0\nP _part/18/_locked/19,7 0\nP _part/18/_locked/19,8 0\nP _part/18/_locked/19,9 0\nP _part/18/_locked/2,0 0\nP _part/18/_locked/2,1 0\nP _part/18/_locked/2,10 0\nP _part/18/_locked/2,11 0\nP _part/18/_locked/2,12 0\nP _part/18/_locked/2,13 0\nP _part/18/_locked/2,14 0\nP _part/18/_locked/2,15 0\nP _part/18/_locked/2,16 0\nP _part/18/_locked/2,17 0\nP _part/18/_locked/2,2 0\nP _part/18/_locked/2,3 0\nP _part/18/_locked/2,4 0\nP _part/18/_locked/2,5 0\nP _part/18/_locked/2,6 0\nP _part/18/_locked/2,7 0\nP _part/18/_locked/2,8 0\nP _part/18/_locked/2,9 0\nP _part/18/_locked/3,0 0\nP _part/18/_locked/3,1 0\nP _part/18/_locked/3,10 0\nP _part/18/_locked/3,11 0\nP _part/18/_locked/3,12 0\nP _part/18/_locked/3,13 0\nP _part/18/_locked/3,14 0\nP _part/18/_locked/3,15 0\nP _part/18/_locked/3,16 0\nP _part/18/_locked/3,17 0\nP _part/18/_locked/3,2 0\nP _part/18/_locked/3,3 0\nP _part/18/_locked/3,4 0\nP _part/18/_locked/3,5 0\nP _part/18/_locked/3,6 0\nP _part/18/_locked/3,7 0\nP _part/18/_locked/3,8 0\nP _part/18/_locked/3,9 0\nP _part/18/_locked/4,0 0\nP _part/18/_locked/4,1 0\nP _part/18/_locked/4,10 0\nP _part/18/_locked/4,11 0\nP _part/18/_locked/4,12 0\nP _part/18/_locked/4,13 0\nP _part/18/_locked/4,14 0\nP _part/18/_locked/4,15 0\nP _part/18/_locked/4,16 0\nP _part/18/_locked/4,17 0\nP _part/18/_locked/4,2 0\nP _part/18/_locked/4,3 0\nP _part/18/_locked/4,4 0\nP _part/18/_locked/4,5 0\nP _part/18/_locked/4,6 0\nP _part/18/_locked/4,7 0\nP _part/18/_locked/4,8 0\nP _part/18/_locked/4,9 0\nP _part/18/_locked/5,0 0\nP _part/18/_locked/5,1 0\nP _part/18/_locked/5,10 0\nP _part/18/_locked/5,11 0\nP _part/18/_locked/5,12 0\nP _part/18/_locked/5,13 0\nP _part/18/_locked/5,14 0\nP _part/18/_locked/5,15 0\nP _part/18/_locked/5,16 0\nP _part/18/_locked/5,17 0\nP _part/18/_locked/5,2 0\nP _part/18/_locked/5,3 0\nP _part/18/_locked/5,4 0\nP _part/18/_locked/5,5 0\nP _part/18/_locked/5,6 0\nP _part/18/_locked/5,7 0\nP _part/18/_locked/5,8 0\nP _part/18/_locked/5,9 0\nP _part/18/_locked/6,0 0\nP _part/18/_locked/6,1 0\nP _part/18/_locked/6,10 0\nP _part/18/_locked/6,11 0\nP _part/18/_locked/6,12 0\nP _part/18/_locked/6,13 0\nP _part/18/_locked/6,14 0\nP _part/18/_locked/6,15 0\nP _part/18/_locked/6,16 0\nP _part/18/_locked/6,17 0\nP _part/18/_locked/6,2 0\nP _part/18/_locked/6,3 0\nP _part/18/_locked/6,4 0\nP _part/18/_locked/6,5 0\nP _part/18/_locked/6,6 0\nP _part/18/_locked/6,7 0\nP _part/18/_locked/6,8 0\nP _part/18/_locked/6,9 0\nP _part/18/_locked/7,0 0\nP _part/18/_locked/7,1 0\nP _part/18/_locked/7,10 0\nP _part/18/_locked/7,11 0\nP _part/18/_locked/7,12 0\nP _part/18/_locked/7,13 0\nP _part/18/_locked/7,14 0\nP _part/18/_locked/7,15 0\nP _part/18/_locked/7,16 0\nP _part/18/_locked/7,17 0\nP _part/18/_locked/7,2 0\nP _part/18/_locked/7,3 0\nP _part/18/_locked/7,4 0\nP _part/18/_locked/7,5 0\nP _part/18/_locked/7,6 0\nP _part/18/_locked/7,7 0\nP _part/18/_locked/7,8 0\nP _part/18/_locked/7,9 0\nP _part/18/_locked/8,0 0\nP _part/18/_locked/8,1 0\nP _part/18/_locked/8,10 0\nP _part/18/_locked/8,11 0\nP _part/18/_locked/8,12 0\nP _part/18/_locked/8,13 0\nP _part/18/_locked/8,14 0\nP _part/18/_locked/8,15 0\nP _part/18/_locked/8,16 0\nP _part/18/_locked/8,17 0\nP _part/18/_locked/8,2 0\nP _part/18/_locked/8,3 0\nP _part/18/_locked/8,4 0\nP _part/18/_locked/8,5 0\nP _part/18/_locked/8,6 0\nP _part/18/_locked/8,7 0\nP _part/18/_locked/8,8 0\nP _part/18/_locked/8,9 0\nP _part/18/_locked/9,0 0\nP _part/18/_locked/9,1 0\nP _part/18/_locked/9,10 0\nP _part/18/_locked/9,11 0\nP _part/18/_locked/9,12 0\nP _part/18/_locked/9,13 0\nP _part/18/_locked/9,14 0\nP _part/18/_locked/9,15 0\nP _part/18/_locked/9,16 0\nP _part/18/_locked/9,17 0\nP _part/18/_locked/9,2 0\nP _part/18/_locked/9,3 0\nP _part/18/_locked/9,4 0\nP _part/18/_locked/9,5 0\nP _part/18/_locked/9,6 0\nP _part/18/_locked/9,7 0\nP _part/18/_locked/9,8 0\nP _part/18/_locked/9,9 0\nP _part/18/_locked/i_count 20\nP _part/18/_locked/j_count 18\nP _part/18/_part_cd 0.075000003\nP _part/18/_part_phi 0.0\nP _part/18/_part_psi 0.0\nP _part/18/_part_rad 2.0\nP _part/18/_part_specs_eq 1\nP _part/18/_part_specs_invis 0\nP _part/18/_part_specs_unused1 0\nP _part/18/_part_specs_unused2 0\nP _part/18/_part_tex 0\nP _part/18/_part_the 0.0\nP _part/18/_part_x 0.0\nP _part/18/_part_y 0.0\nP _part/18/_part_z 32.808399200\nP _part/18/_patt_con 0\nP _part/18/_patt_prt 0\nP _part/18/_patt_rat 0.0\nP _part/18/_r_dim 14\nP _part/18/_s_dim 8\nP _part/18/_scon 37.676635742\nP _part/18/_top_s1 0.017999999\nP _part/18/_top_s2 0.261999995\nP _part/18/_top_t1 0.0\nP _part/18/_top_t2 0.252999991\nP _part/56/_aero_x_os 0.0\nP _part/56/_aero_y_os 0.0\nP _part/56/_aero_z_os 0.0\nP _part/56/_area_frnt 0.0\nP _part/56/_area_side 0.0\nP _part/56/_area_vert 0.0\nP _part/56/_bot_s1 0.0\nP _part/56/_bot_s2 0.754000008\nP _part/56/_bot_t1 0.509999990\nP _part/56/_bot_t2 0.754000008\nP _part/56/_damp 1.883831739\nP _part/56/_geo_xyz/0,0,0 0.0\nP _part/56/_geo_xyz/0,0,1 0.032808393\nP _part/56/_geo_xyz/0,0,2 0.0\nP _part/56/_geo_xyz/0,1,0 0.012555230\nP _part/56/_geo_xyz/0,1,1 0.030311007\nP _part/56/_geo_xyz/0,1,2 0.0\nP _part/56/_geo_xyz/0,10,0 -0.012555226\nP _part/56/_geo_xyz/0,10,1 -0.030311018\nP _part/56/_geo_xyz/0,10,2 0.0\nP _part/56/_geo_xyz/0,11,0 -0.023199040\nP _part/56/_geo_xyz/0,11,1 -0.023199048\nP _part/56/_geo_xyz/0,11,2 0.0\nP _part/56/_geo_xyz/0,12,0 -0.030311007\nP _part/56/_geo_xyz/0,12,1 -0.012555236\nP _part/56/_geo_xyz/0,12,2 0.0\nP _part/56/_geo_xyz/0,13,0 -0.032808397\nP _part/56/_geo_xyz/0,13,1 -0.000000006\nP _part/56/_geo_xyz/0,13,2 0.0\nP _part/56/_geo_xyz/0,14,0 -0.030311007\nP _part/56/_geo_xyz/0,14,1 0.012555228\nP _part/56/_geo_xyz/0,14,2 0.0\nP _part/56/_geo_xyz/0,15,0 -0.023199039\nP _part/56/_geo_xyz/0,15,1 0.023199040\nP _part/56/_geo_xyz/0,15,2 0.0\nP _part/56/_geo_xyz/0,16,0 -0.012555230\nP _part/56/_geo_xyz/0,16,1 0.030311007\nP _part/56/_geo_xyz/0,16,2 0.0\nP _part/56/_geo_xyz/0,17,0 0.000000001\nP _part/56/_geo_xyz/0,17,1 0.032808393\nP _part/56/_geo_xyz/0,17,2 0.0\nP _part/56/_geo_xyz/0,2,0 0.023199040\nP _part/56/_geo_xyz/0,2,1 0.023199039\nP _part/56/_geo_xyz/0,2,2 0.0\nP _part/56/_geo_xyz/0,3,0 0.030311007\nP _part/56/_geo_xyz/0,3,1 0.012555227\nP _part/56/_geo_xyz/0,3,2 0.0\nP _part/56/_geo_xyz/0,4,0 0.032808397\nP _part/56/_geo_xyz/0,4,1 -0.000000006\nP _part/56/_geo_xyz/0,4,2 0.0\nP _part/56/_geo_xyz/0,5,0 0.030311005\nP _part/56/_geo_xyz/0,5,1 -0.012555238\nP _part/56/_geo_xyz/0,5,2 0.0\nP _part/56/_geo_xyz/0,6,0 0.023199040\nP _part/56/_geo_xyz/0,6,1 -0.023199048\nP _part/56/_geo_xyz/0,6,2 0.0\nP _part/56/_geo_xyz/0,7,0 0.012555225\nP _part/56/_geo_xyz/0,7,1 -0.030311018\nP _part/56/_geo_xyz/0,7,2 0.0\nP _part/56/_geo_xyz/0,8,0 -0.000000001\nP _part/56/_geo_xyz/0,8,1 -0.032808408\nP _part/56/_geo_xyz/0,8,2 0.0\nP _part/56/_geo_xyz/0,9,0 -0.000000001\nP _part/56/_geo_xyz/0,9,1 -0.032808408\nP _part/56/_geo_xyz/0,9,2 0.0\nP _part/56/_geo_xyz/1,0,0 0.0\nP _part/56/_geo_xyz/1,0,1 0.032808397\nP _part/56/_geo_xyz/1,0,2 3.280839920\nP _part/56/_geo_xyz/1,1,0 0.012555230\nP _part/56/_geo_xyz/1,1,1 0.030311001\nP _part/56/_geo_xyz/1,1,2 3.293788195\nP _part/56/_geo_xyz/1,10,0 -0.012555226\nP _part/56/_geo_xyz/1,10,1 -0.030311013\nP _part/56/_geo_xyz/1,10,2 3.296237946\nP _part/56/_geo_xyz/1,11,0 -0.023199040\nP _part/56/_geo_xyz/1,11,1 -0.023199044\nP _part/56/_geo_xyz/1,11,2 3.295887947\nP _part/56/_geo_xyz/1,12,0 -0.030311007\nP _part/56/_geo_xyz/1,12,1 -0.012555235\nP _part/56/_geo_xyz/1,12,2 3.295538187\nP _part/56/_geo_xyz/1,13,0 -0.032808397\nP _part/56/_geo_xyz/1,13,1 -0.000000006\nP _part/56/_geo_xyz/1,13,2 3.295188189\nP _part/56/_geo_xyz/1,14,0 -0.030311007\nP _part/56/_geo_xyz/1,14,1 0.012555227\nP _part/56/_geo_xyz/1,14,2 3.294838190\nP _part/56/_geo_xyz/1,15,0 -0.023199039\nP _part/56/_geo_xyz/1,15,1 0.023199037\nP _part/56/_geo_xyz/1,15,2 3.294488192\nP _part/56/_geo_xyz/1,16,0 -0.012555230\nP _part/56/_geo_xyz/1,16,1 0.030311001\nP _part/56/_geo_xyz/1,16,2 3.294138193\nP _part/56/_geo_xyz/1,17,0 0.000000001\nP _part/56/_geo_xyz/1,17,1 0.032808397\nP _part/56/_geo_xyz/1,17,2 3.281189919\nP _part/56/_geo_xyz/1,2,0 0.023199040\nP _part/56/_geo_xyz/1,2,1 0.023199035\nP _part/56/_geo_xyz/1,2,2 3.294138193\nP _part/56/_geo_xyz/1,3,0 0.030311007\nP _part/56/_geo_xyz/1,3,1 0.012555225\nP _part/56/_geo_xyz/1,3,2 3.294488192\nP _part/56/_geo_xyz/1,4,0 0.032808397\nP _part/56/_geo_xyz/1,4,1 -0.000000006\nP _part/56/_geo_xyz/1,4,2 3.294838190\nP _part/56/_geo_xyz/1,5,0 0.030311005\nP _part/56/_geo_xyz/1,5,1 -0.012555238\nP _part/56/_geo_xyz/1,5,2 3.295188189\nP _part/56/_geo_xyz/1,6,0 0.023199040\nP _part/56/_geo_xyz/1,6,1 -0.023199044\nP _part/56/_geo_xyz/1,6,2 3.295538187\nP _part/56/_geo_xyz/1,7,0 0.012555225\nP _part/56/_geo_xyz/1,7,1 -0.030311016\nP _part/56/_geo_xyz/1,7,2 3.295887947\nP _part/56/_geo_xyz/1,8,0 -0.000000001\nP _part/56/_geo_xyz/1,8,1 -0.032808401\nP _part/56/_geo_xyz/1,8,2 3.296237946\nP _part/56/_geo_xyz/1,9,0 -0.000000001\nP _part/56/_geo_xyz/1,9,1 -0.032808401\nP _part/56/_geo_xyz/1,9,2 3.296587944\nP _part/56/_geo_xyz/10,0,0 0.0\nP _part/56/_geo_xyz/10,0,1 0.032808397\nP _part/56/_geo_xyz/10,0,2 32.808399200\nP _part/56/_geo_xyz/10,1,0 0.012555230\nP _part/56/_geo_xyz/10,1,1 0.030311001\nP _part/56/_geo_xyz/10,1,2 32.818111420\nP _part/56/_geo_xyz/10,10,0 -0.012555226\nP _part/56/_geo_xyz/10,10,1 -0.030311013\nP _part/56/_geo_xyz/10,10,2 32.819946289\nP _part/56/_geo_xyz/10,11,0 -0.023199040\nP _part/56/_geo_xyz/10,11,1 -0.023199044\nP _part/56/_geo_xyz/10,11,2 32.819683075\nP _part/56/_geo_xyz/10,12,0 -0.030311007\nP _part/56/_geo_xyz/10,12,1 -0.012555235\nP _part/56/_geo_xyz/10,12,2 32.819423676\nP _part/56/_geo_xyz/10,13,0 -0.032808397\nP _part/56/_geo_xyz/10,13,1 -0.000000006\nP _part/56/_geo_xyz/10,13,2 32.819160461\nP _part/56/_geo_xyz/10,14,0 -0.030311007\nP _part/56/_geo_xyz/10,14,1 0.012555227\nP _part/56/_geo_xyz/10,14,2 32.818897247\nP _part/56/_geo_xyz/10,15,0 -0.023199039\nP _part/56/_geo_xyz/10,15,1 0.023199037\nP _part/56/_geo_xyz/10,15,2 32.818634033\nP _part/56/_geo_xyz/10,16,0 -0.012555230\nP _part/56/_geo_xyz/10,16,1 0.030311001\nP _part/56/_geo_xyz/10,16,2 32.818370819\nP _part/56/_geo_xyz/10,17,0 0.000000001\nP _part/56/_geo_xyz/10,17,1 0.032808397\nP _part/56/_geo_xyz/10,17,2 32.808662415\nP _part/56/_geo_xyz/10,2,0 0.023199040\nP _part/56/_geo_xyz/10,2,1 0.023199035\nP _part/56/_geo_xyz/10,2,2 32.818370819\nP _part/56/_geo_xyz/10,3,0 0.030311007\nP _part/56/_geo_xyz/10,3,1 0.012555225\nP _part/56/_geo_xyz/10,3,2 32.818634033\nP _part/56/_geo_xyz/10,4,0 0.032808397\nP _part/56/_geo_xyz/10,4,1 -0.000000006\nP _part/56/_geo_xyz/10,4,2 32.818897247\nP _part/56/_geo_xyz/10,5,0 0.030311005\nP _part/56/_geo_xyz/10,5,1 -0.012555238\nP _part/56/_geo_xyz/10,5,2 32.819160461\nP _part/56/_geo_xyz/10,6,0 0.023199040\nP _part/56/_geo_xyz/10,6,1 -0.023199044\nP _part/56/_geo_xyz/10,6,2 32.819423676\nP _part/56/_geo_xyz/10,7,0 0.012555225\nP _part/56/_geo_xyz/10,7,1 -0.030311016\nP _part/56/_geo_xyz/10,7,2 32.819683075\nP _part/56/_geo_xyz/10,8,0 -0.000000001\nP _part/56/_geo_xyz/10,8,1 -0.032808401\nP _part/56/_geo_xyz/10,8,2 32.819946289\nP _part/56/_geo_xyz/10,9,0 -0.000000001\nP _part/56/_geo_xyz/10,9,1 -0.032808401\nP _part/56/_geo_xyz/10,9,2 32.820209503\nP _part/56/_geo_xyz/11,0,0 0.0\nP _part/56/_geo_xyz/11,0,1 2.001312256\nP _part/56/_geo_xyz/11,0,2 6.988189220\nP _part/56/_geo_xyz/11,1,0 0.765366912\nP _part/56/_geo_xyz/11,1,1 1.847759008\nP _part/56/_geo_xyz/11,1,2 7.0\nP _part/56/_geo_xyz/11,10,0 -0.0\nP _part/56/_geo_xyz/11,10,1 -1.847759247\nP _part/56/_geo_xyz/11,10,2 7.0\nP _part/56/_geo_xyz/11,11,0 -1.414213538\nP _part/56/_geo_xyz/11,11,1 -1.414213538\nP _part/56/_geo_xyz/11,11,2 7.0\nP _part/56/_geo_xyz/11,12,0 -1.847759008\nP _part/56/_geo_xyz/11,12,1 -0.765367031\nP _part/56/_geo_xyz/11,12,2 7.0\nP _part/56/_geo_xyz/11,13,0 -2.0\nP _part/56/_geo_xyz/11,13,1 -0.000000087\nP _part/56/_geo_xyz/11,13,2 7.0\nP _part/56/_geo_xyz/11,14,0 -1.847759008\nP _part/56/_geo_xyz/11,14,1 0.765366852\nP _part/56/_geo_xyz/11,14,2 7.0\nP _part/56/_geo_xyz/11,15,0 -1.414213538\nP _part/56/_geo_xyz/11,15,1 1.414213538\nP _part/56/_geo_xyz/11,15,2 7.0\nP _part/56/_geo_xyz/11,16,0 -0.765366912\nP _part/56/_geo_xyz/11,16,1 1.847759008\nP _part/56/_geo_xyz/11,16,2 7.0\nP _part/56/_geo_xyz/11,17,0 -0.0\nP _part/56/_geo_xyz/11,17,1 2.001312256\nP _part/56/_geo_xyz/11,17,2 6.988189220\nP _part/56/_geo_xyz/11,2,0 1.414213538\nP _part/56/_geo_xyz/11,2,1 1.414213538\nP _part/56/_geo_xyz/11,2,2 7.0\nP _part/56/_geo_xyz/11,3,0 1.847759008\nP _part/56/_geo_xyz/11,3,1 0.765366852\nP _part/56/_geo_xyz/11,3,2 7.0\nP _part/56/_geo_xyz/11,4,0 2.0\nP _part/56/_geo_xyz/11,4,1 -0.000000087\nP _part/56/_geo_xyz/11,4,2 7.0\nP _part/56/_geo_xyz/11,5,0 1.847759008\nP _part/56/_geo_xyz/11,5,1 -0.765367031\nP _part/56/_geo_xyz/11,5,2 7.0\nP _part/56/_geo_xyz/11,6,0 1.414213538\nP _part/56/_geo_xyz/11,6,1 -1.414213538\nP _part/56/_geo_xyz/11,6,2 7.0\nP _part/56/_geo_xyz/11,7,0 0.0\nP _part/56/_geo_xyz/11,7,1 -1.847759247\nP _part/56/_geo_xyz/11,7,2 7.0\nP _part/56/_geo_xyz/11,8,0 0.0\nP _part/56/_geo_xyz/11,8,1 -1.847759247\nP _part/56/_geo_xyz/11,8,2 7.0\nP _part/56/_geo_xyz/11,9,0 -0.0\nP _part/56/_geo_xyz/11,9,1 -1.847759247\nP _part/56/_geo_xyz/11,9,2 7.0\nP _part/56/_geo_xyz/12,0,0 0.0\nP _part/56/_geo_xyz/12,0,1 2.001312256\nP _part/56/_geo_xyz/12,0,2 8.005249023\nP _part/56/_geo_xyz/12,1,0 0.765366912\nP _part/56/_geo_xyz/12,1,1 1.847759008\nP _part/56/_geo_xyz/12,1,2 8.0\nP _part/56/_geo_xyz/12,10,0 -0.0\nP _part/56/_geo_xyz/12,10,1 -1.847759247\nP _part/56/_geo_xyz/12,10,2 8.0\nP _part/56/_geo_xyz/12,11,0 -1.414213538\nP _part/56/_geo_xyz/12,11,1 -1.414213538\nP _part/56/_geo_xyz/12,11,2 8.0\nP _part/56/_geo_xyz/12,12,0 -1.847759008\nP _part/56/_geo_xyz/12,12,1 -0.765367031\nP _part/56/_geo_xyz/12,12,2 8.0\nP _part/56/_geo_xyz/12,13,0 -2.0\nP _part/56/_geo_xyz/12,13,1 -0.000000087\nP _part/56/_geo_xyz/12,13,2 8.0\nP _part/56/_geo_xyz/12,14,0 -1.847759008\nP _part/56/_geo_xyz/12,14,1 0.765366852\nP _part/56/_geo_xyz/12,14,2 8.0\nP _part/56/_geo_xyz/12,15,0 -1.414213538\nP _part/56/_geo_xyz/12,15,1 1.414213538\nP _part/56/_geo_xyz/12,15,2 8.0\nP _part/56/_geo_xyz/12,16,0 -0.765366912\nP _part/56/_geo_xyz/12,16,1 1.847759008\nP _part/56/_geo_xyz/12,16,2 8.0\nP _part/56/_geo_xyz/12,17,0 -0.0\nP _part/56/_geo_xyz/12,17,1 2.001312256\nP _part/56/_geo_xyz/12,17,2 8.005249023\nP _part/56/_geo_xyz/12,2,0 1.414213538\nP _part/56/_geo_xyz/12,2,1 1.414213538\nP _part/56/_geo_xyz/12,2,2 8.0\nP _part/56/_geo_xyz/12,3,0 1.847759008\nP _part/56/_geo_xyz/12,3,1 0.765366852\nP _part/56/_geo_xyz/12,3,2 8.0\nP _part/56/_geo_xyz/12,4,0 2.0\nP _part/56/_geo_xyz/12,4,1 -0.000000087\nP _part/56/_geo_xyz/12,4,2 8.0\nP _part/56/_geo_xyz/12,5,0 1.847759008\nP _part/56/_geo_xyz/12,5,1 -0.765367031\nP _part/56/_geo_xyz/12,5,2 8.0\nP _part/56/_geo_xyz/12,6,0 1.414213538\nP _part/56/_geo_xyz/12,6,1 -1.414213538\nP _part/56/_geo_xyz/12,6,2 8.0\nP _part/56/_geo_xyz/12,7,0 0.0\nP _part/56/_geo_xyz/12,7,1 -1.847759247\nP _part/56/_geo_xyz/12,7,2 8.0\nP _part/56/_geo_xyz/12,8,0 0.0\nP _part/56/_geo_xyz/12,8,1 -1.847759247\nP _part/56/_geo_xyz/12,8,2 8.0\nP _part/56/_geo_xyz/12,9,0 -0.0\nP _part/56/_geo_xyz/12,9,1 -1.847759247\nP _part/56/_geo_xyz/12,9,2 8.0\nP _part/56/_geo_xyz/13,0,0 0.0\nP _part/56/_geo_xyz/13,0,1 0.0\nP _part/56/_geo_xyz/13,0,2 32.808399200\nP _part/56/_geo_xyz/13,1,0 0.0\nP _part/56/_geo_xyz/13,1,1 0.0\nP _part/56/_geo_xyz/13,1,2 32.808399200\nP _part/56/_geo_xyz/13,10,0 -0.0\nP _part/56/_geo_xyz/13,10,1 0.0\nP _part/56/_geo_xyz/13,10,2 32.808399200\nP _part/56/_geo_xyz/13,11,0 -0.0\nP _part/56/_geo_xyz/13,11,1 0.0\nP _part/56/_geo_xyz/13,11,2 32.808399200\nP _part/56/_geo_xyz/13,12,0 -0.0\nP _part/56/_geo_xyz/13,12,1 0.0\nP _part/56/_geo_xyz/13,12,2 32.808399200\nP _part/56/_geo_xyz/13,13,0 -0.0\nP _part/56/_geo_xyz/13,13,1 0.0\nP _part/56/_geo_xyz/13,13,2 32.808399200\nP _part/56/_geo_xyz/13,14,0 -0.0\nP _part/56/_geo_xyz/13,14,1 0.0\nP _part/56/_geo_xyz/13,14,2 32.808399200\nP _part/56/_geo_xyz/13,15,0 -0.0\nP _part/56/_geo_xyz/13,15,1 0.0\nP _part/56/_geo_xyz/13,15,2 32.808399200\nP _part/56/_geo_xyz/13,16,0 -0.0\nP _part/56/_geo_xyz/13,16,1 0.0\nP _part/56/_geo_xyz/13,16,2 32.808399200\nP _part/56/_geo_xyz/13,17,0 -0.0\nP _part/56/_geo_xyz/13,17,1 0.0\nP _part/56/_geo_xyz/13,17,2 32.808399200\nP _part/56/_geo_xyz/13,2,0 0.0\nP _part/56/_geo_xyz/13,2,1 0.0\nP _part/56/_geo_xyz/13,2,2 32.808399200\nP _part/56/_geo_xyz/13,3,0 0.0\nP _part/56/_geo_xyz/13,3,1 0.0\nP _part/56/_geo_xyz/13,3,2 32.808399200\nP _part/56/_geo_xyz/13,4,0 0.0\nP _part/56/_geo_xyz/13,4,1 0.0\nP _part/56/_geo_xyz/13,4,2 32.808399200\nP _part/56/_geo_xyz/13,5,0 0.0\nP _part/56/_geo_xyz/13,5,1 0.0\nP _part/56/_geo_xyz/13,5,2 32.808399200\nP _part/56/_geo_xyz/13,6,0 0.0\nP _part/56/_geo_xyz/13,6,1 0.0\nP _part/56/_geo_xyz/13,6,2 32.808399200\nP _part/56/_geo_xyz/13,7,0 0.0\nP _part/56/_geo_xyz/13,7,1 0.0\nP _part/56/_geo_xyz/13,7,2 32.808399200\nP _part/56/_geo_xyz/13,8,0 0.0\nP _part/56/_geo_xyz/13,8,1 0.0\nP _part/56/_geo_xyz/13,8,2 32.808399200\nP _part/56/_geo_xyz/13,9,0 -0.0\nP _part/56/_geo_xyz/13,9,1 0.0\nP _part/56/_geo_xyz/13,9,2 32.808399200\nP _part/56/_geo_xyz/14,0,0 0.0\nP _part/56/_geo_xyz/14,0,1 0.0\nP _part/56/_geo_xyz/14,0,2 0.0\nP _part/56/_geo_xyz/14,1,0 0.0\nP _part/56/_geo_xyz/14,1,1 0.0\nP _part/56/_geo_xyz/14,1,2 0.0\nP _part/56/_geo_xyz/14,10,0 0.0\nP _part/56/_geo_xyz/14,10,1 0.0\nP _part/56/_geo_xyz/14,10,2 0.0\nP _part/56/_geo_xyz/14,11,0 0.0\nP _part/56/_geo_xyz/14,11,1 0.0\nP _part/56/_geo_xyz/14,11,2 0.0\nP _part/56/_geo_xyz/14,12,0 0.0\nP _part/56/_geo_xyz/14,12,1 0.0\nP _part/56/_geo_xyz/14,12,2 0.0\nP _part/56/_geo_xyz/14,13,0 0.0\nP _part/56/_geo_xyz/14,13,1 0.0\nP _part/56/_geo_xyz/14,13,2 0.0\nP _part/56/_geo_xyz/14,14,0 0.0\nP _part/56/_geo_xyz/14,14,1 0.0\nP _part/56/_geo_xyz/14,14,2 0.0\nP _part/56/_geo_xyz/14,15,0 0.0\nP _part/56/_geo_xyz/14,15,1 0.0\nP _part/56/_geo_xyz/14,15,2 0.0\nP _part/56/_geo_xyz/14,16,0 0.0\nP _part/56/_geo_xyz/14,16,1 0.0\nP _part/56/_geo_xyz/14,16,2 0.0\nP _part/56/_geo_xyz/14,17,0 0.0\nP _part/56/_geo_xyz/14,17,1 0.0\nP _part/56/_geo_xyz/14,17,2 0.0\nP _part/56/_geo_xyz/14,2,0 0.0\nP _part/56/_geo_xyz/14,2,1 0.0\nP _part/56/_geo_xyz/14,2,2 0.0\nP _part/56/_geo_xyz/14,3,0 0.0\nP _part/56/_geo_xyz/14,3,1 0.0\nP _part/56/_geo_xyz/14,3,2 0.0\nP _part/56/_geo_xyz/14,4,0 0.0\nP _part/56/_geo_xyz/14,4,1 0.0\nP _part/56/_geo_xyz/14,4,2 0.0\nP _part/56/_geo_xyz/14,5,0 0.0\nP _part/56/_geo_xyz/14,5,1 0.0\nP _part/56/_geo_xyz/14,5,2 0.0\nP _part/56/_geo_xyz/14,6,0 0.0\nP _part/56/_geo_xyz/14,6,1 0.0\nP _part/56/_geo_xyz/14,6,2 0.0\nP _part/56/_geo_xyz/14,7,0 0.0\nP _part/56/_geo_xyz/14,7,1 0.0\nP _part/56/_geo_xyz/14,7,2 0.0\nP _part/56/_geo_xyz/14,8,0 0.0\nP _part/56/_geo_xyz/14,8,1 0.0\nP _part/56/_geo_xyz/14,8,2 0.0\nP _part/56/_geo_xyz/14,9,0 0.0\nP _part/56/_geo_xyz/14,9,1 0.0\nP _part/56/_geo_xyz/14,9,2 0.0\nP _part/56/_geo_xyz/15,0,0 0.0\nP _part/56/_geo_xyz/15,0,1 0.0\nP _part/56/_geo_xyz/15,0,2 0.0\nP _part/56/_geo_xyz/15,1,0 0.0\nP _part/56/_geo_xyz/15,1,1 0.0\nP _part/56/_geo_xyz/15,1,2 0.0\nP _part/56/_geo_xyz/15,10,0 0.0\nP _part/56/_geo_xyz/15,10,1 0.0\nP _part/56/_geo_xyz/15,10,2 0.0\nP _part/56/_geo_xyz/15,11,0 0.0\nP _part/56/_geo_xyz/15,11,1 0.0\nP _part/56/_geo_xyz/15,11,2 0.0\nP _part/56/_geo_xyz/15,12,0 0.0\nP _part/56/_geo_xyz/15,12,1 0.0\nP _part/56/_geo_xyz/15,12,2 0.0\nP _part/56/_geo_xyz/15,13,0 0.0\nP _part/56/_geo_xyz/15,13,1 0.0\nP _part/56/_geo_xyz/15,13,2 0.0\nP _part/56/_geo_xyz/15,14,0 0.0\nP _part/56/_geo_xyz/15,14,1 0.0\nP _part/56/_geo_xyz/15,14,2 0.0\nP _part/56/_geo_xyz/15,15,0 0.0\nP _part/56/_geo_xyz/15,15,1 0.0\nP _part/56/_geo_xyz/15,15,2 0.0\nP _part/56/_geo_xyz/15,16,0 0.0\nP _part/56/_geo_xyz/15,16,1 0.0\nP _part/56/_geo_xyz/15,16,2 0.0\nP _part/56/_geo_xyz/15,17,0 0.0\nP _part/56/_geo_xyz/15,17,1 0.0\nP _part/56/_geo_xyz/15,17,2 0.0\nP _part/56/_geo_xyz/15,2,0 0.0\nP _part/56/_geo_xyz/15,2,1 0.0\nP _part/56/_geo_xyz/15,2,2 0.0\nP _part/56/_geo_xyz/15,3,0 0.0\nP _part/56/_geo_xyz/15,3,1 0.0\nP _part/56/_geo_xyz/15,3,2 0.0\nP _part/56/_geo_xyz/15,4,0 0.0\nP _part/56/_geo_xyz/15,4,1 0.0\nP _part/56/_geo_xyz/15,4,2 0.0\nP _part/56/_geo_xyz/15,5,0 0.0\nP _part/56/_geo_xyz/15,5,1 0.0\nP _part/56/_geo_xyz/15,5,2 0.0\nP _part/56/_geo_xyz/15,6,0 0.0\nP _part/56/_geo_xyz/15,6,1 0.0\nP _part/56/_geo_xyz/15,6,2 0.0\nP _part/56/_geo_xyz/15,7,0 0.0\nP _part/56/_geo_xyz/15,7,1 0.0\nP _part/56/_geo_xyz/15,7,2 0.0\nP _part/56/_geo_xyz/15,8,0 0.0\nP _part/56/_geo_xyz/15,8,1 0.0\nP _part/56/_geo_xyz/15,8,2 0.0\nP _part/56/_geo_xyz/15,9,0 0.0\nP _part/56/_geo_xyz/15,9,1 0.0\nP _part/56/_geo_xyz/15,9,2 0.0\nP _part/56/_geo_xyz/16,0,0 0.0\nP _part/56/_geo_xyz/16,0,1 0.0\nP _part/56/_geo_xyz/16,0,2 0.0\nP _part/56/_geo_xyz/16,1,0 0.0\nP _part/56/_geo_xyz/16,1,1 0.0\nP _part/56/_geo_xyz/16,1,2 0.0\nP _part/56/_geo_xyz/16,10,0 0.0\nP _part/56/_geo_xyz/16,10,1 0.0\nP _part/56/_geo_xyz/16,10,2 0.0\nP _part/56/_geo_xyz/16,11,0 0.0\nP _part/56/_geo_xyz/16,11,1 0.0\nP _part/56/_geo_xyz/16,11,2 0.0\nP _part/56/_geo_xyz/16,12,0 0.0\nP _part/56/_geo_xyz/16,12,1 0.0\nP _part/56/_geo_xyz/16,12,2 0.0\nP _part/56/_geo_xyz/16,13,0 0.0\nP _part/56/_geo_xyz/16,13,1 0.0\nP _part/56/_geo_xyz/16,13,2 0.0\nP _part/56/_geo_xyz/16,14,0 0.0\nP _part/56/_geo_xyz/16,14,1 0.0\nP _part/56/_geo_xyz/16,14,2 0.0\nP _part/56/_geo_xyz/16,15,0 0.0\nP _part/56/_geo_xyz/16,15,1 0.0\nP _part/56/_geo_xyz/16,15,2 0.0\nP _part/56/_geo_xyz/16,16,0 0.0\nP _part/56/_geo_xyz/16,16,1 0.0\nP _part/56/_geo_xyz/16,16,2 0.0\nP _part/56/_geo_xyz/16,17,0 0.0\nP _part/56/_geo_xyz/16,17,1 0.0\nP _part/56/_geo_xyz/16,17,2 0.0\nP _part/56/_geo_xyz/16,2,0 0.0\nP _part/56/_geo_xyz/16,2,1 0.0\nP _part/56/_geo_xyz/16,2,2 0.0\nP _part/56/_geo_xyz/16,3,0 0.0\nP _part/56/_geo_xyz/16,3,1 0.0\nP _part/56/_geo_xyz/16,3,2 0.0\nP _part/56/_geo_xyz/16,4,0 0.0\nP _part/56/_geo_xyz/16,4,1 0.0\nP _part/56/_geo_xyz/16,4,2 0.0\nP _part/56/_geo_xyz/16,5,0 0.0\nP _part/56/_geo_xyz/16,5,1 0.0\nP _part/56/_geo_xyz/16,5,2 0.0\nP _part/56/_geo_xyz/16,6,0 0.0\nP _part/56/_geo_xyz/16,6,1 0.0\nP _part/56/_geo_xyz/16,6,2 0.0\nP _part/56/_geo_xyz/16,7,0 0.0\nP _part/56/_geo_xyz/16,7,1 0.0\nP _part/56/_geo_xyz/16,7,2 0.0\nP _part/56/_geo_xyz/16,8,0 0.0\nP _part/56/_geo_xyz/16,8,1 0.0\nP _part/56/_geo_xyz/16,8,2 0.0\nP _part/56/_geo_xyz/16,9,0 0.0\nP _part/56/_geo_xyz/16,9,1 0.0\nP _part/56/_geo_xyz/16,9,2 0.0\nP _part/56/_geo_xyz/17,0,0 0.0\nP _part/56/_geo_xyz/17,0,1 0.0\nP _part/56/_geo_xyz/17,0,2 0.0\nP _part/56/_geo_xyz/17,1,0 0.0\nP _part/56/_geo_xyz/17,1,1 0.0\nP _part/56/_geo_xyz/17,1,2 0.0\nP _part/56/_geo_xyz/17,10,0 0.0\nP _part/56/_geo_xyz/17,10,1 0.0\nP _part/56/_geo_xyz/17,10,2 0.0\nP _part/56/_geo_xyz/17,11,0 0.0\nP _part/56/_geo_xyz/17,11,1 0.0\nP _part/56/_geo_xyz/17,11,2 0.0\nP _part/56/_geo_xyz/17,12,0 0.0\nP _part/56/_geo_xyz/17,12,1 0.0\nP _part/56/_geo_xyz/17,12,2 0.0\nP _part/56/_geo_xyz/17,13,0 0.0\nP _part/56/_geo_xyz/17,13,1 0.0\nP _part/56/_geo_xyz/17,13,2 0.0\nP _part/56/_geo_xyz/17,14,0 0.0\nP _part/56/_geo_xyz/17,14,1 0.0\nP _part/56/_geo_xyz/17,14,2 0.0\nP _part/56/_geo_xyz/17,15,0 0.0\nP _part/56/_geo_xyz/17,15,1 0.0\nP _part/56/_geo_xyz/17,15,2 0.0\nP _part/56/_geo_xyz/17,16,0 0.0\nP _part/56/_geo_xyz/17,16,1 0.0\nP _part/56/_geo_xyz/17,16,2 0.0\nP _part/56/_geo_xyz/17,17,0 0.0\nP _part/56/_geo_xyz/17,17,1 0.0\nP _part/56/_geo_xyz/17,17,2 0.0\nP _part/56/_geo_xyz/17,2,0 0.0\nP _part/56/_geo_xyz/17,2,1 0.0\nP _part/56/_geo_xyz/17,2,2 0.0\nP _part/56/_geo_xyz/17,3,0 0.0\nP _part/56/_geo_xyz/17,3,1 0.0\nP _part/56/_geo_xyz/17,3,2 0.0\nP _part/56/_geo_xyz/17,4,0 0.0\nP _part/56/_geo_xyz/17,4,1 0.0\nP _part/56/_geo_xyz/17,4,2 0.0\nP _part/56/_geo_xyz/17,5,0 0.0\nP _part/56/_geo_xyz/17,5,1 0.0\nP _part/56/_geo_xyz/17,5,2 0.0\nP _part/56/_geo_xyz/17,6,0 0.0\nP _part/56/_geo_xyz/17,6,1 0.0\nP _part/56/_geo_xyz/17,6,2 0.0\nP _part/56/_geo_xyz/17,7,0 0.0\nP _part/56/_geo_xyz/17,7,1 0.0\nP _part/56/_geo_xyz/17,7,2 0.0\nP _part/56/_geo_xyz/17,8,0 0.0\nP _part/56/_geo_xyz/17,8,1 0.0\nP _part/56/_geo_xyz/17,8,2 0.0\nP _part/56/_geo_xyz/17,9,0 0.0\nP _part/56/_geo_xyz/17,9,1 0.0\nP _part/56/_geo_xyz/17,9,2 0.0\nP _part/56/_geo_xyz/18,0,0 0.0\nP _part/56/_geo_xyz/18,0,1 0.0\nP _part/56/_geo_xyz/18,0,2 0.0\nP _part/56/_geo_xyz/18,1,0 0.0\nP _part/56/_geo_xyz/18,1,1 0.0\nP _part/56/_geo_xyz/18,1,2 0.0\nP _part/56/_geo_xyz/18,10,0 0.0\nP _part/56/_geo_xyz/18,10,1 0.0\nP _part/56/_geo_xyz/18,10,2 0.0\nP _part/56/_geo_xyz/18,11,0 0.0\nP _part/56/_geo_xyz/18,11,1 0.0\nP _part/56/_geo_xyz/18,11,2 0.0\nP _part/56/_geo_xyz/18,12,0 0.0\nP _part/56/_geo_xyz/18,12,1 0.0\nP _part/56/_geo_xyz/18,12,2 0.0\nP _part/56/_geo_xyz/18,13,0 0.0\nP _part/56/_geo_xyz/18,13,1 0.0\nP _part/56/_geo_xyz/18,13,2 0.0\nP _part/56/_geo_xyz/18,14,0 0.0\nP _part/56/_geo_xyz/18,14,1 0.0\nP _part/56/_geo_xyz/18,14,2 0.0\nP _part/56/_geo_xyz/18,15,0 0.0\nP _part/56/_geo_xyz/18,15,1 0.0\nP _part/56/_geo_xyz/18,15,2 0.0\nP _part/56/_geo_xyz/18,16,0 0.0\nP _part/56/_geo_xyz/18,16,1 0.0\nP _part/56/_geo_xyz/18,16,2 0.0\nP _part/56/_geo_xyz/18,17,0 0.0\nP _part/56/_geo_xyz/18,17,1 0.0\nP _part/56/_geo_xyz/18,17,2 0.0\nP _part/56/_geo_xyz/18,2,0 0.0\nP _part/56/_geo_xyz/18,2,1 0.0\nP _part/56/_geo_xyz/18,2,2 0.0\nP _part/56/_geo_xyz/18,3,0 0.0\nP _part/56/_geo_xyz/18,3,1 0.0\nP _part/56/_geo_xyz/18,3,2 0.0\nP _part/56/_geo_xyz/18,4,0 0.0\nP _part/56/_geo_xyz/18,4,1 0.0\nP _part/56/_geo_xyz/18,4,2 0.0\nP _part/56/_geo_xyz/18,5,0 0.0\nP _part/56/_geo_xyz/18,5,1 0.0\nP _part/56/_geo_xyz/18,5,2 0.0\nP _part/56/_geo_xyz/18,6,0 0.0\nP _part/56/_geo_xyz/18,6,1 0.0\nP _part/56/_geo_xyz/18,6,2 0.0\nP _part/56/_geo_xyz/18,7,0 0.0\nP _part/56/_geo_xyz/18,7,1 0.0\nP _part/56/_geo_xyz/18,7,2 0.0\nP _part/56/_geo_xyz/18,8,0 0.0\nP _part/56/_geo_xyz/18,8,1 0.0\nP _part/56/_geo_xyz/18,8,2 0.0\nP _part/56/_geo_xyz/18,9,0 0.0\nP _part/56/_geo_xyz/18,9,1 0.0\nP _part/56/_geo_xyz/18,9,2 0.0\nP _part/56/_geo_xyz/19,0,0 0.0\nP _part/56/_geo_xyz/19,0,1 0.0\nP _part/56/_geo_xyz/19,0,2 0.0\nP _part/56/_geo_xyz/19,1,0 0.0\nP _part/56/_geo_xyz/19,1,1 0.0\nP _part/56/_geo_xyz/19,1,2 0.0\nP _part/56/_geo_xyz/19,10,0 0.0\nP _part/56/_geo_xyz/19,10,1 0.0\nP _part/56/_geo_xyz/19,10,2 0.0\nP _part/56/_geo_xyz/19,11,0 0.0\nP _part/56/_geo_xyz/19,11,1 0.0\nP _part/56/_geo_xyz/19,11,2 0.0\nP _part/56/_geo_xyz/19,12,0 0.0\nP _part/56/_geo_xyz/19,12,1 0.0\nP _part/56/_geo_xyz/19,12,2 0.0\nP _part/56/_geo_xyz/19,13,0 0.0\nP _part/56/_geo_xyz/19,13,1 0.0\nP _part/56/_geo_xyz/19,13,2 0.0\nP _part/56/_geo_xyz/19,14,0 0.0\nP _part/56/_geo_xyz/19,14,1 0.0\nP _part/56/_geo_xyz/19,14,2 0.0\nP _part/56/_geo_xyz/19,15,0 0.0\nP _part/56/_geo_xyz/19,15,1 0.0\nP _part/56/_geo_xyz/19,15,2 0.0\nP _part/56/_geo_xyz/19,16,0 0.0\nP _part/56/_geo_xyz/19,16,1 0.0\nP _part/56/_geo_xyz/19,16,2 0.0\nP _part/56/_geo_xyz/19,17,0 0.0\nP _part/56/_geo_xyz/19,17,1 0.0\nP _part/56/_geo_xyz/19,17,2 0.0\nP _part/56/_geo_xyz/19,2,0 0.0\nP _part/56/_geo_xyz/19,2,1 0.0\nP _part/56/_geo_xyz/19,2,2 0.0\nP _part/56/_geo_xyz/19,3,0 0.0\nP _part/56/_geo_xyz/19,3,1 0.0\nP _part/56/_geo_xyz/19,3,2 0.0\nP _part/56/_geo_xyz/19,4,0 0.0\nP _part/56/_geo_xyz/19,4,1 0.0\nP _part/56/_geo_xyz/19,4,2 0.0\nP _part/56/_geo_xyz/19,5,0 0.0\nP _part/56/_geo_xyz/19,5,1 0.0\nP _part/56/_geo_xyz/19,5,2 0.0\nP _part/56/_geo_xyz/19,6,0 0.0\nP _part/56/_geo_xyz/19,6,1 0.0\nP _part/56/_geo_xyz/19,6,2 0.0\nP _part/56/_geo_xyz/19,7,0 0.0\nP _part/56/_geo_xyz/19,7,1 0.0\nP _part/56/_geo_xyz/19,7,2 0.0\nP _part/56/_geo_xyz/19,8,0 0.0\nP _part/56/_geo_xyz/19,8,1 0.0\nP _part/56/_geo_xyz/19,8,2 0.0\nP _part/56/_geo_xyz/19,9,0 0.0\nP _part/56/_geo_xyz/19,9,1 0.0\nP _part/56/_geo_xyz/19,9,2 0.0\nP _part/56/_geo_xyz/2,0,0 0.0\nP _part/56/_geo_xyz/2,0,1 0.032808397\nP _part/56/_geo_xyz/2,0,2 6.561679840\nP _part/56/_geo_xyz/2,1,0 0.012555230\nP _part/56/_geo_xyz/2,1,1 0.030311001\nP _part/56/_geo_xyz/2,1,2 6.560600758\nP _part/56/_geo_xyz/2,10,0 -0.012555226\nP _part/56/_geo_xyz/2,10,1 -0.030311013\nP _part/56/_geo_xyz/2,10,2 6.560396671\nP _part/56/_geo_xyz/2,11,0 -0.023199040\nP _part/56/_geo_xyz/2,11,1 -0.023199044\nP _part/56/_geo_xyz/2,11,2 6.560425758\nP _part/56/_geo_xyz/2,12,0 -0.030311007\nP _part/56/_geo_xyz/2,12,1 -0.012555235\nP _part/56/_geo_xyz/2,12,2 6.560454845\nP _part/56/_geo_xyz/2,13,0 -0.032808397\nP _part/56/_geo_xyz/2,13,1 -0.000000006\nP _part/56/_geo_xyz/2,13,2 6.560484409\nP _part/56/_geo_xyz/2,14,0 -0.030311007\nP _part/56/_geo_xyz/2,14,1 0.012555227\nP _part/56/_geo_xyz/2,14,2 6.560513496\nP _part/56/_geo_xyz/2,15,0 -0.023199039\nP _part/56/_geo_xyz/2,15,1 0.023199037\nP _part/56/_geo_xyz/2,15,2 6.560542583\nP _part/56/_geo_xyz/2,16,0 -0.012555230\nP _part/56/_geo_xyz/2,16,1 0.030311001\nP _part/56/_geo_xyz/2,16,2 6.560571671\nP _part/56/_geo_xyz/2,17,0 0.000000001\nP _part/56/_geo_xyz/2,17,1 0.032808397\nP _part/56/_geo_xyz/2,17,2 6.561650753\nP _part/56/_geo_xyz/2,2,0 0.023199040\nP _part/56/_geo_xyz/2,2,1 0.023199035\nP _part/56/_geo_xyz/2,2,2 6.560571671\nP _part/56/_geo_xyz/2,3,0 0.030311007\nP _part/56/_geo_xyz/2,3,1 0.012555225\nP _part/56/_geo_xyz/2,3,2 6.560542583\nP _part/56/_geo_xyz/2,4,0 0.032808397\nP _part/56/_geo_xyz/2,4,1 -0.000000006\nP _part/56/_geo_xyz/2,4,2 6.560513496\nP _part/56/_geo_xyz/2,5,0 0.030311005\nP _part/56/_geo_xyz/2,5,1 -0.012555238\nP _part/56/_geo_xyz/2,5,2 6.560484409\nP _part/56/_geo_xyz/2,6,0 0.023199040\nP _part/56/_geo_xyz/2,6,1 -0.023199044\nP _part/56/_geo_xyz/2,6,2 6.560454845\nP _part/56/_geo_xyz/2,7,0 0.012555225\nP _part/56/_geo_xyz/2,7,1 -0.030311016\nP _part/56/_geo_xyz/2,7,2 6.560425758\nP _part/56/_geo_xyz/2,8,0 -0.000000001\nP _part/56/_geo_xyz/2,8,1 -0.032808401\nP _part/56/_geo_xyz/2,8,2 6.560396671\nP _part/56/_geo_xyz/2,9,0 -0.000000001\nP _part/56/_geo_xyz/2,9,1 -0.032808401\nP _part/56/_geo_xyz/2,9,2 6.560367584\nP _part/56/_geo_xyz/3,0,0 0.0\nP _part/56/_geo_xyz/3,0,1 0.032808397\nP _part/56/_geo_xyz/3,0,2 9.842519760\nP _part/56/_geo_xyz/3,1,0 0.012555230\nP _part/56/_geo_xyz/3,1,1 0.030311001\nP _part/56/_geo_xyz/3,1,2 9.854390144\nP _part/56/_geo_xyz/3,10,0 -0.012555226\nP _part/56/_geo_xyz/3,10,1 -0.030311013\nP _part/56/_geo_xyz/3,10,2 9.856636047\nP _part/56/_geo_xyz/3,11,0 -0.023199040\nP _part/56/_geo_xyz/3,11,1 -0.023199044\nP _part/56/_geo_xyz/3,11,2 9.856314659\nP _part/56/_geo_xyz/3,12,0 -0.030311007\nP _part/56/_geo_xyz/3,12,1 -0.012555235\nP _part/56/_geo_xyz/3,12,2 9.855994225\nP _part/56/_geo_xyz/3,13,0 -0.032808397\nP _part/56/_geo_xyz/3,13,1 -0.000000006\nP _part/56/_geo_xyz/3,13,2 9.855672836\nP _part/56/_geo_xyz/3,14,0 -0.030311007\nP _part/56/_geo_xyz/3,14,1 0.012555227\nP _part/56/_geo_xyz/3,14,2 9.855352402\nP _part/56/_geo_xyz/3,15,0 -0.023199039\nP _part/56/_geo_xyz/3,15,1 0.023199037\nP _part/56/_geo_xyz/3,15,2 9.855031967\nP _part/56/_geo_xyz/3,16,0 -0.012555230\nP _part/56/_geo_xyz/3,16,1 0.030311001\nP _part/56/_geo_xyz/3,16,2 9.854710579\nP _part/56/_geo_xyz/3,17,0 0.000000001\nP _part/56/_geo_xyz/3,17,1 0.032808397\nP _part/56/_geo_xyz/3,17,2 9.842840195\nP _part/56/_geo_xyz/3,2,0 0.023199040\nP _part/56/_geo_xyz/3,2,1 0.023199035\nP _part/56/_geo_xyz/3,2,2 9.854710579\nP _part/56/_geo_xyz/3,3,0 0.030311007\nP _part/56/_geo_xyz/3,3,1 0.012555225\nP _part/56/_geo_xyz/3,3,2 9.855031967\nP _part/56/_geo_xyz/3,4,0 0.032808397\nP _part/56/_geo_xyz/3,4,1 -0.000000006\nP _part/56/_geo_xyz/3,4,2 9.855352402\nP _part/56/_geo_xyz/3,5,0 0.030311005\nP _part/56/_geo_xyz/3,5,1 -0.012555238\nP _part/56/_geo_xyz/3,5,2 9.855672836\nP _part/56/_geo_xyz/3,6,0 0.023199040\nP _part/56/_geo_xyz/3,6,1 -0.023199044\nP _part/56/_geo_xyz/3,6,2 9.855994225\nP _part/56/_geo_xyz/3,7,0 0.012555225\nP _part/56/_geo_xyz/3,7,1 -0.030311016\nP _part/56/_geo_xyz/3,7,2 9.856314659\nP _part/56/_geo_xyz/3,8,0 -0.000000001\nP _part/56/_geo_xyz/3,8,1 -0.032808401\nP _part/56/_geo_xyz/3,8,2 9.856636047\nP _part/56/_geo_xyz/3,9,0 -0.000000001\nP _part/56/_geo_xyz/3,9,1 -0.032808401\nP _part/56/_geo_xyz/3,9,2 9.856956482\nP _part/56/_geo_xyz/4,0,0 0.0\nP _part/56/_geo_xyz/4,0,1 0.032808397\nP _part/56/_geo_xyz/4,0,2 13.123359680\nP _part/56/_geo_xyz/4,1,0 0.012555230\nP _part/56/_geo_xyz/4,1,1 0.030311001\nP _part/56/_geo_xyz/4,1,2 13.121201515\nP _part/56/_geo_xyz/4,10,0 -0.012555226\nP _part/56/_geo_xyz/4,10,1 -0.030311013\nP _part/56/_geo_xyz/4,10,2 13.120793343\nP _part/56/_geo_xyz/4,11,0 -0.023199040\nP _part/56/_geo_xyz/4,11,1 -0.023199044\nP _part/56/_geo_xyz/4,11,2 13.120851517\nP _part/56/_geo_xyz/4,12,0 -0.030311007\nP _part/56/_geo_xyz/4,12,1 -0.012555235\nP _part/56/_geo_xyz/4,12,2 13.120909691\nP _part/56/_geo_xyz/4,13,0 -0.032808397\nP _part/56/_geo_xyz/4,13,1 -0.000000006\nP _part/56/_geo_xyz/4,13,2 13.120968819\nP _part/56/_geo_xyz/4,14,0 -0.030311007\nP _part/56/_geo_xyz/4,14,1 0.012555227\nP _part/56/_geo_xyz/4,14,2 13.121026993\nP _part/56/_geo_xyz/4,15,0 -0.023199039\nP _part/56/_geo_xyz/4,15,1 0.023199037\nP _part/56/_geo_xyz/4,15,2 13.121085167\nP _part/56/_geo_xyz/4,16,0 -0.012555230\nP _part/56/_geo_xyz/4,16,1 0.030311001\nP _part/56/_geo_xyz/4,16,2 13.121143341\nP _part/56/_geo_xyz/4,17,0 0.000000001\nP _part/56/_geo_xyz/4,17,1 0.032808397\nP _part/56/_geo_xyz/4,17,2 13.123301506\nP _part/56/_geo_xyz/4,2,0 0.023199040\nP _part/56/_geo_xyz/4,2,1 0.023199035\nP _part/56/_geo_xyz/4,2,2 13.121143341\nP _part/56/_geo_xyz/4,3,0 0.030311007\nP _part/56/_geo_xyz/4,3,1 0.012555225\nP _part/56/_geo_xyz/4,3,2 13.121085167\nP _part/56/_geo_xyz/4,4,0 0.032808397\nP _part/56/_geo_xyz/4,4,1 -0.000000006\nP _part/56/_geo_xyz/4,4,2 13.121026993\nP _part/56/_geo_xyz/4,5,0 0.030311005\nP _part/56/_geo_xyz/4,5,1 -0.012555238\nP _part/56/_geo_xyz/4,5,2 13.120968819\nP _part/56/_geo_xyz/4,6,0 0.023199040\nP _part/56/_geo_xyz/4,6,1 -0.023199044\nP _part/56/_geo_xyz/4,6,2 13.120909691\nP _part/56/_geo_xyz/4,7,0 0.012555225\nP _part/56/_geo_xyz/4,7,1 -0.030311016\nP _part/56/_geo_xyz/4,7,2 13.120851517\nP _part/56/_geo_xyz/4,8,0 -0.000000001\nP _part/56/_geo_xyz/4,8,1 -0.032808401\nP _part/56/_geo_xyz/4,8,2 13.120793343\nP _part/56/_geo_xyz/4,9,0 -0.000000001\nP _part/56/_geo_xyz/4,9,1 -0.032808401\nP _part/56/_geo_xyz/4,9,2 13.120735168\nP _part/56/_geo_xyz/5,0,0 0.0\nP _part/56/_geo_xyz/5,0,1 0.032808397\nP _part/56/_geo_xyz/5,0,2 16.404199600\nP _part/56/_geo_xyz/5,1,0 0.012555230\nP _part/56/_geo_xyz/5,1,1 0.030311001\nP _part/56/_geo_xyz/5,1,2 16.414991379\nP _part/56/_geo_xyz/5,10,0 -0.012555226\nP _part/56/_geo_xyz/5,10,1 -0.030311013\nP _part/56/_geo_xyz/5,10,2 16.417032242\nP _part/56/_geo_xyz/5,11,0 -0.023199040\nP _part/56/_geo_xyz/5,11,1 -0.023199044\nP _part/56/_geo_xyz/5,11,2 16.416740417\nP _part/56/_geo_xyz/5,12,0 -0.030311007\nP _part/56/_geo_xyz/5,12,1 -0.012555235\nP _part/56/_geo_xyz/5,12,2 16.416448593\nP _part/56/_geo_xyz/5,13,0 -0.032808397\nP _part/56/_geo_xyz/5,13,1 -0.000000006\nP _part/56/_geo_xyz/5,13,2 16.416156769\nP _part/56/_geo_xyz/5,14,0 -0.030311007\nP _part/56/_geo_xyz/5,14,1 0.012555227\nP _part/56/_geo_xyz/5,14,2 16.415864944\nP _part/56/_geo_xyz/5,15,0 -0.023199039\nP _part/56/_geo_xyz/5,15,1 0.023199037\nP _part/56/_geo_xyz/5,15,2 16.415575027\nP _part/56/_geo_xyz/5,16,0 -0.012555230\nP _part/56/_geo_xyz/5,16,1 0.030311001\nP _part/56/_geo_xyz/5,16,2 16.415283203\nP _part/56/_geo_xyz/5,17,0 0.000000001\nP _part/56/_geo_xyz/5,17,1 0.032808397\nP _part/56/_geo_xyz/5,17,2 16.404491425\nP _part/56/_geo_xyz/5,2,0 0.023199040\nP _part/56/_geo_xyz/5,2,1 0.023199035\nP _part/56/_geo_xyz/5,2,2 16.415283203\nP _part/56/_geo_xyz/5,3,0 0.030311007\nP _part/56/_geo_xyz/5,3,1 0.012555225\nP _part/56/_geo_xyz/5,3,2 16.415575027\nP _part/56/_geo_xyz/5,4,0 0.032808397\nP _part/56/_geo_xyz/5,4,1 -0.000000006\nP _part/56/_geo_xyz/5,4,2 16.415864944\nP _part/56/_geo_xyz/5,5,0 0.030311005\nP _part/56/_geo_xyz/5,5,1 -0.012555238\nP _part/56/_geo_xyz/5,5,2 16.416156769\nP _part/56/_geo_xyz/5,6,0 0.023199040\nP _part/56/_geo_xyz/5,6,1 -0.023199044\nP _part/56/_geo_xyz/5,6,2 16.416448593\nP _part/56/_geo_xyz/5,7,0 0.012555225\nP _part/56/_geo_xyz/5,7,1 -0.030311016\nP _part/56/_geo_xyz/5,7,2 16.416740417\nP _part/56/_geo_xyz/5,8,0 -0.000000001\nP _part/56/_geo_xyz/5,8,1 -0.032808401\nP _part/56/_geo_xyz/5,8,2 16.417032242\nP _part/56/_geo_xyz/5,9,0 -0.000000001\nP _part/56/_geo_xyz/5,9,1 -0.032808401\nP _part/56/_geo_xyz/5,9,2 16.417324066\nP _part/56/_geo_xyz/6,0,0 0.0\nP _part/56/_geo_xyz/6,0,1 0.032808397\nP _part/56/_geo_xyz/6,0,2 19.685039520\nP _part/56/_geo_xyz/6,1,0 0.012555230\nP _part/56/_geo_xyz/6,1,1 0.030311001\nP _part/56/_geo_xyz/6,1,2 19.695831299\nP _part/56/_geo_xyz/6,10,0 -0.012555226\nP _part/56/_geo_xyz/6,10,1 -0.030311013\nP _part/56/_geo_xyz/6,10,2 19.697872162\nP _part/56/_geo_xyz/6,11,0 -0.023199040\nP _part/56/_geo_xyz/6,11,1 -0.023199044\nP _part/56/_geo_xyz/6,11,2 19.697580338\nP _part/56/_geo_xyz/6,12,0 -0.030311007\nP _part/56/_geo_xyz/6,12,1 -0.012555235\nP _part/56/_geo_xyz/6,12,2 19.697288513\nP _part/56/_geo_xyz/6,13,0 -0.032808397\nP _part/56/_geo_xyz/6,13,1 -0.000000006\nP _part/56/_geo_xyz/6,13,2 19.696996689\nP _part/56/_geo_xyz/6,14,0 -0.030311007\nP _part/56/_geo_xyz/6,14,1 0.012555227\nP _part/56/_geo_xyz/6,14,2 19.696704865\nP _part/56/_geo_xyz/6,15,0 -0.023199039\nP _part/56/_geo_xyz/6,15,1 0.023199037\nP _part/56/_geo_xyz/6,15,2 19.696414948\nP _part/56/_geo_xyz/6,16,0 -0.012555230\nP _part/56/_geo_xyz/6,16,1 0.030311001\nP _part/56/_geo_xyz/6,16,2 19.696123123\nP _part/56/_geo_xyz/6,17,0 0.000000001\nP _part/56/_geo_xyz/6,17,1 0.032808397\nP _part/56/_geo_xyz/6,17,2 19.685331345\nP _part/56/_geo_xyz/6,2,0 0.023199040\nP _part/56/_geo_xyz/6,2,1 0.023199035\nP _part/56/_geo_xyz/6,2,2 19.696123123\nP _part/56/_geo_xyz/6,3,0 0.030311007\nP _part/56/_geo_xyz/6,3,1 0.012555225\nP _part/56/_geo_xyz/6,3,2 19.696414948\nP _part/56/_geo_xyz/6,4,0 0.032808397\nP _part/56/_geo_xyz/6,4,1 -0.000000006\nP _part/56/_geo_xyz/6,4,2 19.696704865\nP _part/56/_geo_xyz/6,5,0 0.030311005\nP _part/56/_geo_xyz/6,5,1 -0.012555238\nP _part/56/_geo_xyz/6,5,2 19.696996689\nP _part/56/_geo_xyz/6,6,0 0.023199040\nP _part/56/_geo_xyz/6,6,1 -0.023199044\nP _part/56/_geo_xyz/6,6,2 19.697288513\nP _part/56/_geo_xyz/6,7,0 0.012555225\nP _part/56/_geo_xyz/6,7,1 -0.030311016\nP _part/56/_geo_xyz/6,7,2 19.697580338\nP _part/56/_geo_xyz/6,8,0 -0.000000001\nP _part/56/_geo_xyz/6,8,1 -0.032808401\nP _part/56/_geo_xyz/6,8,2 19.697872162\nP _part/56/_geo_xyz/6,9,0 -0.000000001\nP _part/56/_geo_xyz/6,9,1 -0.032808401\nP _part/56/_geo_xyz/6,9,2 19.698163986\nP _part/56/_geo_xyz/7,0,0 0.0\nP _part/56/_geo_xyz/7,0,1 0.032808397\nP _part/56/_geo_xyz/7,0,2 22.965879440\nP _part/56/_geo_xyz/7,1,0 0.012555230\nP _part/56/_geo_xyz/7,1,1 0.030311001\nP _part/56/_geo_xyz/7,1,2 22.962642670\nP _part/56/_geo_xyz/7,10,0 -0.012555226\nP _part/56/_geo_xyz/7,10,1 -0.030311013\nP _part/56/_geo_xyz/7,10,2 22.962030411\nP _part/56/_geo_xyz/7,11,0 -0.023199040\nP _part/56/_geo_xyz/7,11,1 -0.023199044\nP _part/56/_geo_xyz/7,11,2 22.962118149\nP _part/56/_geo_xyz/7,12,0 -0.030311007\nP _part/56/_geo_xyz/7,12,1 -0.012555235\nP _part/56/_geo_xyz/7,12,2 22.962205887\nP _part/56/_geo_xyz/7,13,0 -0.032808397\nP _part/56/_geo_xyz/7,13,1 -0.000000006\nP _part/56/_geo_xyz/7,13,2 22.962293625\nP _part/56/_geo_xyz/7,14,0 -0.030311007\nP _part/56/_geo_xyz/7,14,1 0.012555227\nP _part/56/_geo_xyz/7,14,2 22.962381363\nP _part/56/_geo_xyz/7,15,0 -0.023199039\nP _part/56/_geo_xyz/7,15,1 0.023199037\nP _part/56/_geo_xyz/7,15,2 22.962467194\nP _part/56/_geo_xyz/7,16,0 -0.012555230\nP _part/56/_geo_xyz/7,16,1 0.030311001\nP _part/56/_geo_xyz/7,16,2 22.962554932\nP _part/56/_geo_xyz/7,17,0 0.000000001\nP _part/56/_geo_xyz/7,17,1 0.032808397\nP _part/56/_geo_xyz/7,17,2 22.965791702\nP _part/56/_geo_xyz/7,2,0 0.023199040\nP _part/56/_geo_xyz/7,2,1 0.023199035\nP _part/56/_geo_xyz/7,2,2 22.962554932\nP _part/56/_geo_xyz/7,3,0 0.030311007\nP _part/56/_geo_xyz/7,3,1 0.012555225\nP _part/56/_geo_xyz/7,3,2 22.962467194\nP _part/56/_geo_xyz/7,4,0 0.032808397\nP _part/56/_geo_xyz/7,4,1 -0.000000006\nP _part/56/_geo_xyz/7,4,2 22.962381363\nP _part/56/_geo_xyz/7,5,0 0.030311005\nP _part/56/_geo_xyz/7,5,1 -0.012555238\nP _part/56/_geo_xyz/7,5,2 22.962293625\nP _part/56/_geo_xyz/7,6,0 0.023199040\nP _part/56/_geo_xyz/7,6,1 -0.023199044\nP _part/56/_geo_xyz/7,6,2 22.962205887\nP _part/56/_geo_xyz/7,7,0 0.012555225\nP _part/56/_geo_xyz/7,7,1 -0.030311016\nP _part/56/_geo_xyz/7,7,2 22.962118149\nP _part/56/_geo_xyz/7,8,0 -0.000000001\nP _part/56/_geo_xyz/7,8,1 -0.032808401\nP _part/56/_geo_xyz/7,8,2 22.962030411\nP _part/56/_geo_xyz/7,9,0 -0.000000001\nP _part/56/_geo_xyz/7,9,1 -0.032808401\nP _part/56/_geo_xyz/7,9,2 22.961942673\nP _part/56/_geo_xyz/8,0,0 0.0\nP _part/56/_geo_xyz/8,0,1 0.032808397\nP _part/56/_geo_xyz/8,0,2 26.246719360\nP _part/56/_geo_xyz/8,1,0 0.012555230\nP _part/56/_geo_xyz/8,1,1 0.030311001\nP _part/56/_geo_xyz/8,1,2 26.256431580\nP _part/56/_geo_xyz/8,10,0 -0.012555226\nP _part/56/_geo_xyz/8,10,1 -0.030311013\nP _part/56/_geo_xyz/8,10,2 26.258268356\nP _part/56/_geo_xyz/8,11,0 -0.023199040\nP _part/56/_geo_xyz/8,11,1 -0.023199044\nP _part/56/_geo_xyz/8,11,2 26.258007050\nP _part/56/_geo_xyz/8,12,0 -0.030311007\nP _part/56/_geo_xyz/8,12,1 -0.012555235\nP _part/56/_geo_xyz/8,12,2 26.257743835\nP _part/56/_geo_xyz/8,13,0 -0.032808397\nP _part/56/_geo_xyz/8,13,1 -0.000000006\nP _part/56/_geo_xyz/8,13,2 26.257482529\nP _part/56/_geo_xyz/8,14,0 -0.030311007\nP _part/56/_geo_xyz/8,14,1 0.012555227\nP _part/56/_geo_xyz/8,14,2 26.257219315\nP _part/56/_geo_xyz/8,15,0 -0.023199039\nP _part/56/_geo_xyz/8,15,1 0.023199037\nP _part/56/_geo_xyz/8,15,2 26.256956100\nP _part/56/_geo_xyz/8,16,0 -0.012555230\nP _part/56/_geo_xyz/8,16,1 0.030311001\nP _part/56/_geo_xyz/8,16,2 26.256694794\nP _part/56/_geo_xyz/8,17,0 0.000000001\nP _part/56/_geo_xyz/8,17,1 0.032808397\nP _part/56/_geo_xyz/8,17,2 26.246982574\nP _part/56/_geo_xyz/8,2,0 0.023199040\nP _part/56/_geo_xyz/8,2,1 0.023199035\nP _part/56/_geo_xyz/8,2,2 26.256694794\nP _part/56/_geo_xyz/8,3,0 0.030311007\nP _part/56/_geo_xyz/8,3,1 0.012555225\nP _part/56/_geo_xyz/8,3,2 26.256956100\nP _part/56/_geo_xyz/8,4,0 0.032808397\nP _part/56/_geo_xyz/8,4,1 -0.000000006\nP _part/56/_geo_xyz/8,4,2 26.257219315\nP _part/56/_geo_xyz/8,5,0 0.030311005\nP _part/56/_geo_xyz/8,5,1 -0.012555238\nP _part/56/_geo_xyz/8,5,2 26.257482529\nP _part/56/_geo_xyz/8,6,0 0.023199040\nP _part/56/_geo_xyz/8,6,1 -0.023199044\nP _part/56/_geo_xyz/8,6,2 26.257743835\nP _part/56/_geo_xyz/8,7,0 0.012555225\nP _part/56/_geo_xyz/8,7,1 -0.030311016\nP _part/56/_geo_xyz/8,7,2 26.258007050\nP _part/56/_geo_xyz/8,8,0 -0.000000001\nP _part/56/_geo_xyz/8,8,1 -0.032808401\nP _part/56/_geo_xyz/8,8,2 26.258268356\nP _part/56/_geo_xyz/8,9,0 -0.000000001\nP _part/56/_geo_xyz/8,9,1 -0.032808401\nP _part/56/_geo_xyz/8,9,2 26.258531570\nP _part/56/_geo_xyz/9,0,0 0.0\nP _part/56/_geo_xyz/9,0,1 0.032808397\nP _part/56/_geo_xyz/9,0,2 29.527559280\nP _part/56/_geo_xyz/9,1,0 0.012555230\nP _part/56/_geo_xyz/9,1,1 0.030311001\nP _part/56/_geo_xyz/9,1,2 29.537271500\nP _part/56/_geo_xyz/9,10,0 -0.012555226\nP _part/56/_geo_xyz/9,10,1 -0.030311013\nP _part/56/_geo_xyz/9,10,2 29.539108276\nP _part/56/_geo_xyz/9,11,0 -0.023199040\nP _part/56/_geo_xyz/9,11,1 -0.023199044\nP _part/56/_geo_xyz/9,11,2 29.538846970\nP _part/56/_geo_xyz/9,12,0 -0.030311007\nP _part/56/_geo_xyz/9,12,1 -0.012555235\nP _part/56/_geo_xyz/9,12,2 29.538583755\nP _part/56/_geo_xyz/9,13,0 -0.032808397\nP _part/56/_geo_xyz/9,13,1 -0.000000006\nP _part/56/_geo_xyz/9,13,2 29.538322449\nP _part/56/_geo_xyz/9,14,0 -0.030311007\nP _part/56/_geo_xyz/9,14,1 0.012555227\nP _part/56/_geo_xyz/9,14,2 29.538059235\nP _part/56/_geo_xyz/9,15,0 -0.023199039\nP _part/56/_geo_xyz/9,15,1 0.023199037\nP _part/56/_geo_xyz/9,15,2 29.537796021\nP _part/56/_geo_xyz/9,16,0 -0.012555230\nP _part/56/_geo_xyz/9,16,1 0.030311001\nP _part/56/_geo_xyz/9,16,2 29.537534714\nP _part/56/_geo_xyz/9,17,0 0.000000001\nP _part/56/_geo_xyz/9,17,1 0.032808397\nP _part/56/_geo_xyz/9,17,2 29.527822495\nP _part/56/_geo_xyz/9,2,0 0.023199040\nP _part/56/_geo_xyz/9,2,1 0.023199035\nP _part/56/_geo_xyz/9,2,2 29.537534714\nP _part/56/_geo_xyz/9,3,0 0.030311007\nP _part/56/_geo_xyz/9,3,1 0.012555225\nP _part/56/_geo_xyz/9,3,2 29.537796021\nP _part/56/_geo_xyz/9,4,0 0.032808397\nP _part/56/_geo_xyz/9,4,1 -0.000000006\nP _part/56/_geo_xyz/9,4,2 29.538059235\nP _part/56/_geo_xyz/9,5,0 0.030311005\nP _part/56/_geo_xyz/9,5,1 -0.012555238\nP _part/56/_geo_xyz/9,5,2 29.538322449\nP _part/56/_geo_xyz/9,6,0 0.023199040\nP _part/56/_geo_xyz/9,6,1 -0.023199044\nP _part/56/_geo_xyz/9,6,2 29.538583755\nP _part/56/_geo_xyz/9,7,0 0.012555225\nP _part/56/_geo_xyz/9,7,1 -0.030311016\nP _part/56/_geo_xyz/9,7,2 29.538846970\nP _part/56/_geo_xyz/9,8,0 -0.000000001\nP _part/56/_geo_xyz/9,8,1 -0.032808401\nP _part/56/_geo_xyz/9,8,2 29.539108276\nP _part/56/_geo_xyz/9,9,0 -0.000000001\nP _part/56/_geo_xyz/9,9,1 -0.032808401\nP _part/56/_geo_xyz/9,9,2 29.539371490\nP _part/56/_geo_xyz/i_count 20\nP _part/56/_geo_xyz/j_count 18\nP _part/56/_geo_xyz/k_count 3\nP _part/56/_locked/0,0 0\nP _part/56/_locked/0,1 0\nP _part/56/_locked/0,10 0\nP _part/56/_locked/0,11 0\nP _part/56/_locked/0,12 0\nP _part/56/_locked/0,13 0\nP _part/56/_locked/0,14 0\nP _part/56/_locked/0,15 0\nP _part/56/_locked/0,16 0\nP _part/56/_locked/0,17 0\nP _part/56/_locked/0,2 0\nP _part/56/_locked/0,3 0\nP _part/56/_locked/0,4 0\nP _part/56/_locked/0,5 0\nP _part/56/_locked/0,6 0\nP _part/56/_locked/0,7 0\nP _part/56/_locked/0,8 0\nP _part/56/_locked/0,9 0\nP _part/56/_locked/1,0 0\nP _part/56/_locked/1,1 0\nP _part/56/_locked/1,10 0\nP _part/56/_locked/1,11 0\nP _part/56/_locked/1,12 0\nP _part/56/_locked/1,13 0\nP _part/56/_locked/1,14 0\nP _part/56/_locked/1,15 0\nP _part/56/_locked/1,16 0\nP _part/56/_locked/1,17 0\nP _part/56/_locked/1,2 0\nP _part/56/_locked/1,3 0\nP _part/56/_locked/1,4 0\nP _part/56/_locked/1,5 0\nP _part/56/_locked/1,6 0\nP _part/56/_locked/1,7 0\nP _part/56/_locked/1,8 0\nP _part/56/_locked/1,9 0\nP _part/56/_locked/10,0 0\nP _part/56/_locked/10,1 0\nP _part/56/_locked/10,10 0\nP _part/56/_locked/10,11 0\nP _part/56/_locked/10,12 0\nP _part/56/_locked/10,13 0\nP _part/56/_locked/10,14 0\nP _part/56/_locked/10,15 0\nP _part/56/_locked/10,16 0\nP _part/56/_locked/10,17 0\nP _part/56/_locked/10,2 0\nP _part/56/_locked/10,3 0\nP _part/56/_locked/10,4 0\nP _part/56/_locked/10,5 0\nP _part/56/_locked/10,6 0\nP _part/56/_locked/10,7 0\nP _part/56/_locked/10,8 0\nP _part/56/_locked/10,9 0\nP _part/56/_locked/11,0 0\nP _part/56/_locked/11,1 0\nP _part/56/_locked/11,10 0\nP _part/56/_locked/11,11 0\nP _part/56/_locked/11,12 0\nP _part/56/_locked/11,13 0\nP _part/56/_locked/11,14 0\nP _part/56/_locked/11,15 0\nP _part/56/_locked/11,16 0\nP _part/56/_locked/11,17 0\nP _part/56/_locked/11,2 0\nP _part/56/_locked/11,3 0\nP _part/56/_locked/11,4 0\nP _part/56/_locked/11,5 0\nP _part/56/_locked/11,6 0\nP _part/56/_locked/11,7 0\nP _part/56/_locked/11,8 0\nP _part/56/_locked/11,9 0\nP _part/56/_locked/12,0 0\nP _part/56/_locked/12,1 0\nP _part/56/_locked/12,10 0\nP _part/56/_locked/12,11 0\nP _part/56/_locked/12,12 0\nP _part/56/_locked/12,13 0\nP _part/56/_locked/12,14 0\nP _part/56/_locked/12,15 0\nP _part/56/_locked/12,16 0\nP _part/56/_locked/12,17 0\nP _part/56/_locked/12,2 0\nP _part/56/_locked/12,3 0\nP _part/56/_locked/12,4 0\nP _part/56/_locked/12,5 0\nP _part/56/_locked/12,6 0\nP _part/56/_locked/12,7 0\nP _part/56/_locked/12,8 0\nP _part/56/_locked/12,9 0\nP _part/56/_locked/13,0 0\nP _part/56/_locked/13,1 0\nP _part/56/_locked/13,10 0\nP _part/56/_locked/13,11 0\nP _part/56/_locked/13,12 0\nP _part/56/_locked/13,13 0\nP _part/56/_locked/13,14 0\nP _part/56/_locked/13,15 0\nP _part/56/_locked/13,16 0\nP _part/56/_locked/13,17 0\nP _part/56/_locked/13,2 0\nP _part/56/_locked/13,3 0\nP _part/56/_locked/13,4 0\nP _part/56/_locked/13,5 0\nP _part/56/_locked/13,6 0\nP _part/56/_locked/13,7 0\nP _part/56/_locked/13,8 0\nP _part/56/_locked/13,9 0\nP _part/56/_locked/14,0 0\nP _part/56/_locked/14,1 0\nP _part/56/_locked/14,10 0\nP _part/56/_locked/14,11 0\nP _part/56/_locked/14,12 0\nP _part/56/_locked/14,13 0\nP _part/56/_locked/14,14 0\nP _part/56/_locked/14,15 0\nP _part/56/_locked/14,16 0\nP _part/56/_locked/14,17 0\nP _part/56/_locked/14,2 0\nP _part/56/_locked/14,3 0\nP _part/56/_locked/14,4 0\nP _part/56/_locked/14,5 0\nP _part/56/_locked/14,6 0\nP _part/56/_locked/14,7 0\nP _part/56/_locked/14,8 0\nP _part/56/_locked/14,9 0\nP _part/56/_locked/15,0 0\nP _part/56/_locked/15,1 0\nP _part/56/_locked/15,10 0\nP _part/56/_locked/15,11 0\nP _part/56/_locked/15,12 0\nP _part/56/_locked/15,13 0\nP _part/56/_locked/15,14 0\nP _part/56/_locked/15,15 0\nP _part/56/_locked/15,16 0\nP _part/56/_locked/15,17 0\nP _part/56/_locked/15,2 0\nP _part/56/_locked/15,3 0\nP _part/56/_locked/15,4 0\nP _part/56/_locked/15,5 0\nP _part/56/_locked/15,6 0\nP _part/56/_locked/15,7 0\nP _part/56/_locked/15,8 0\nP _part/56/_locked/15,9 0\nP _part/56/_locked/16,0 0\nP _part/56/_locked/16,1 0\nP _part/56/_locked/16,10 0\nP _part/56/_locked/16,11 0\nP _part/56/_locked/16,12 0\nP _part/56/_locked/16,13 0\nP _part/56/_locked/16,14 0\nP _part/56/_locked/16,15 0\nP _part/56/_locked/16,16 0\nP _part/56/_locked/16,17 0\nP _part/56/_locked/16,2 0\nP _part/56/_locked/16,3 0\nP _part/56/_locked/16,4 0\nP _part/56/_locked/16,5 0\nP _part/56/_locked/16,6 0\nP _part/56/_locked/16,7 0\nP _part/56/_locked/16,8 0\nP _part/56/_locked/16,9 0\nP _part/56/_locked/17,0 0\nP _part/56/_locked/17,1 0\nP _part/56/_locked/17,10 0\nP _part/56/_locked/17,11 0\nP _part/56/_locked/17,12 0\nP _part/56/_locked/17,13 0\nP _part/56/_locked/17,14 0\nP _part/56/_locked/17,15 0\nP _part/56/_locked/17,16 0\nP _part/56/_locked/17,17 0\nP _part/56/_locked/17,2 0\nP _part/56/_locked/17,3 0\nP _part/56/_locked/17,4 0\nP _part/56/_locked/17,5 0\nP _part/56/_locked/17,6 0\nP _part/56/_locked/17,7 0\nP _part/56/_locked/17,8 0\nP _part/56/_locked/17,9 0\nP _part/56/_locked/18,0 0\nP _part/56/_locked/18,1 0\nP _part/56/_locked/18,10 0\nP _part/56/_locked/18,11 0\nP _part/56/_locked/18,12 0\nP _part/56/_locked/18,13 0\nP _part/56/_locked/18,14 0\nP _part/56/_locked/18,15 0\nP _part/56/_locked/18,16 0\nP _part/56/_locked/18,17 0\nP _part/56/_locked/18,2 0\nP _part/56/_locked/18,3 0\nP _part/56/_locked/18,4 0\nP _part/56/_locked/18,5 0\nP _part/56/_locked/18,6 0\nP _part/56/_locked/18,7 0\nP _part/56/_locked/18,8 0\nP _part/56/_locked/18,9 0\nP _part/56/_locked/19,0 0\nP _part/56/_locked/19,1 0\nP _part/56/_locked/19,10 0\nP _part/56/_locked/19,11 0\nP _part/56/_locked/19,12 0\nP _part/56/_locked/19,13 0\nP _part/56/_locked/19,14 0\nP _part/56/_locked/19,15 0\nP _part/56/_locked/19,16 0\nP _part/56/_locked/19,17 0\nP _part/56/_locked/19,2 0\nP _part/56/_locked/19,3 0\nP _part/56/_locked/19,4 0\nP _part/56/_locked/19,5 0\nP _part/56/_locked/19,6 0\nP _part/56/_locked/19,7 0\nP _part/56/_locked/19,8 0\nP _part/56/_locked/19,9 0\nP _part/56/_locked/2,0 0\nP _part/56/_locked/2,1 0\nP _part/56/_locked/2,10 0\nP _part/56/_locked/2,11 0\nP _part/56/_locked/2,12 0\nP _part/56/_locked/2,13 0\nP _part/56/_locked/2,14 0\nP _part/56/_locked/2,15 0\nP _part/56/_locked/2,16 0\nP _part/56/_locked/2,17 0\nP _part/56/_locked/2,2 0\nP _part/56/_locked/2,3 0\nP _part/56/_locked/2,4 0\nP _part/56/_locked/2,5 0\nP _part/56/_locked/2,6 0\nP _part/56/_locked/2,7 0\nP _part/56/_locked/2,8 0\nP _part/56/_locked/2,9 0\nP _part/56/_locked/3,0 0\nP _part/56/_locked/3,1 0\nP _part/56/_locked/3,10 0\nP _part/56/_locked/3,11 0\nP _part/56/_locked/3,12 0\nP _part/56/_locked/3,13 0\nP _part/56/_locked/3,14 0\nP _part/56/_locked/3,15 0\nP _part/56/_locked/3,16 0\nP _part/56/_locked/3,17 0\nP _part/56/_locked/3,2 0\nP _part/56/_locked/3,3 0\nP _part/56/_locked/3,4 0\nP _part/56/_locked/3,5 0\nP _part/56/_locked/3,6 0\nP _part/56/_locked/3,7 0\nP _part/56/_locked/3,8 0\nP _part/56/_locked/3,9 0\nP _part/56/_locked/4,0 0\nP _part/56/_locked/4,1 0\nP _part/56/_locked/4,10 0\nP _part/56/_locked/4,11 0\nP _part/56/_locked/4,12 0\nP _part/56/_locked/4,13 0\nP _part/56/_locked/4,14 0\nP _part/56/_locked/4,15 0\nP _part/56/_locked/4,16 0\nP _part/56/_locked/4,17 0\nP _part/56/_locked/4,2 0\nP _part/56/_locked/4,3 0\nP _part/56/_locked/4,4 0\nP _part/56/_locked/4,5 0\nP _part/56/_locked/4,6 0\nP _part/56/_locked/4,7 0\nP _part/56/_locked/4,8 0\nP _part/56/_locked/4,9 0\nP _part/56/_locked/5,0 0\nP _part/56/_locked/5,1 0\nP _part/56/_locked/5,10 0\nP _part/56/_locked/5,11 0\nP _part/56/_locked/5,12 0\nP _part/56/_locked/5,13 0\nP _part/56/_locked/5,14 0\nP _part/56/_locked/5,15 0\nP _part/56/_locked/5,16 0\nP _part/56/_locked/5,17 0\nP _part/56/_locked/5,2 0\nP _part/56/_locked/5,3 0\nP _part/56/_locked/5,4 0\nP _part/56/_locked/5,5 0\nP _part/56/_locked/5,6 0\nP _part/56/_locked/5,7 0\nP _part/56/_locked/5,8 0\nP _part/56/_locked/5,9 0\nP _part/56/_locked/6,0 0\nP _part/56/_locked/6,1 0\nP _part/56/_locked/6,10 0\nP _part/56/_locked/6,11 0\nP _part/56/_locked/6,12 0\nP _part/56/_locked/6,13 0\nP _part/56/_locked/6,14 0\nP _part/56/_locked/6,15 0\nP _part/56/_locked/6,16 0\nP _part/56/_locked/6,17 0\nP _part/56/_locked/6,2 0\nP _part/56/_locked/6,3 0\nP _part/56/_locked/6,4 0\nP _part/56/_locked/6,5 0\nP _part/56/_locked/6,6 0\nP _part/56/_locked/6,7 0\nP _part/56/_locked/6,8 0\nP _part/56/_locked/6,9 0\nP _part/56/_locked/7,0 0\nP _part/56/_locked/7,1 0\nP _part/56/_locked/7,10 0\nP _part/56/_locked/7,11 0\nP _part/56/_locked/7,12 0\nP _part/56/_locked/7,13 0\nP _part/56/_locked/7,14 0\nP _part/56/_locked/7,15 0\nP _part/56/_locked/7,16 0\nP _part/56/_locked/7,17 0\nP _part/56/_locked/7,2 0\nP _part/56/_locked/7,3 0\nP _part/56/_locked/7,4 0\nP _part/56/_locked/7,5 0\nP _part/56/_locked/7,6 0\nP _part/56/_locked/7,7 0\nP _part/56/_locked/7,8 0\nP _part/56/_locked/7,9 0\nP _part/56/_locked/8,0 0\nP _part/56/_locked/8,1 0\nP _part/56/_locked/8,10 0\nP _part/56/_locked/8,11 0\nP _part/56/_locked/8,12 0\nP _part/56/_locked/8,13 0\nP _part/56/_locked/8,14 0\nP _part/56/_locked/8,15 0\nP _part/56/_locked/8,16 0\nP _part/56/_locked/8,17 0\nP _part/56/_locked/8,2 0\nP _part/56/_locked/8,3 0\nP _part/56/_locked/8,4 0\nP _part/56/_locked/8,5 0\nP _part/56/_locked/8,6 0\nP _part/56/_locked/8,7 0\nP _part/56/_locked/8,8 0\nP _part/56/_locked/8,9 0\nP _part/56/_locked/9,0 0\nP _part/56/_locked/9,1 0\nP _part/56/_locked/9,10 0\nP _part/56/_locked/9,11 0\nP _part/56/_locked/9,12 0\nP _part/56/_locked/9,13 0\nP _part/56/_locked/9,14 0\nP _part/56/_locked/9,15 0\nP _part/56/_locked/9,16 0\nP _part/56/_locked/9,17 0\nP _part/56/_locked/9,2 0\nP _part/56/_locked/9,3 0\nP _part/56/_locked/9,4 0\nP _part/56/_locked/9,5 0\nP _part/56/_locked/9,6 0\nP _part/56/_locked/9,7 0\nP _part/56/_locked/9,8 0\nP _part/56/_locked/9,9 0\nP _part/56/_locked/i_count 20\nP _part/56/_locked/j_count 18\nP _part/56/_part_cd 0.075000003\nP _part/56/_part_phi 0.0\nP _part/56/_part_psi 0.0\nP _part/56/_part_rad 0.360892385\nP _part/56/_part_specs_eq 1\nP _part/56/_part_specs_invis 0\nP _part/56/_part_specs_unused1 0\nP _part/56/_part_specs_unused2 0\nP _part/56/_part_tex 0\nP _part/56/_part_the 0.0\nP _part/56/_part_x 0.0\nP _part/56/_part_y 0.0\nP _part/56/_part_z 0.0\nP _part/56/_patt_con 0\nP _part/56/_patt_prt 0\nP _part/56/_patt_rat 0.0\nP _part/56/_r_dim 18\nP _part/56/_s_dim 11\nP _part/56/_scon 37.676635742\nP _part/56/_top_s1 0.0\nP _part/56/_top_s2 0.754000008\nP _part/56/_top_t1 0.755999982\nP _part/56/_top_t2 1.0\nP _part/8/_aero_x_os 0.0\nP _part/8/_aero_y_os 0.0\nP _part/8/_aero_z_os 0.0\nP _part/8/_area_frnt 0.0\nP _part/8/_area_side 0.0\nP _part/8/_area_vert 0.0\nP _part/8/_bot_s1 0.755999982\nP _part/8/_bot_s2 1.0\nP _part/8/_bot_t1 0.0\nP _part/8/_bot_t2 0.384000003\nP _part/8/_damp 1.883831739\nP _part/8/_geo_xyz/0,0,0 0.0\nP _part/8/_geo_xyz/0,0,1 0.0\nP _part/8/_geo_xyz/0,0,2 -0.820209980\nP _part/8/_geo_xyz/0,1,0 0.0\nP _part/8/_geo_xyz/0,1,1 0.139720470\nP _part/8/_geo_xyz/0,1,2 -0.716699481\nP _part/8/_geo_xyz/0,10,0 0.0\nP _part/8/_geo_xyz/0,10,1 -0.134547234\nP _part/8/_geo_xyz/0,10,2 -0.069849081\nP _part/8/_geo_xyz/0,11,0 0.0\nP _part/8/_geo_xyz/0,11,1 -0.113846451\nP _part/8/_geo_xyz/0,11,2 -0.597703397\nP _part/8/_geo_xyz/0,12,0 0.0\nP _part/8/_geo_xyz/0,12,1 -0.082795277\nP _part/8/_geo_xyz/0,12,2 -0.747768998\nP _part/8/_geo_xyz/0,13,0 0.0\nP _part/8/_geo_xyz/0,13,1 0.0\nP _part/8/_geo_xyz/0,13,2 -0.820209980\nP _part/8/_geo_xyz/0,14,0 0.0\nP _part/8/_geo_xyz/0,14,1 0.0\nP _part/8/_geo_xyz/0,14,2 0.0\nP _part/8/_geo_xyz/0,15,0 0.0\nP _part/8/_geo_xyz/0,15,1 0.0\nP _part/8/_geo_xyz/0,15,2 0.0\nP _part/8/_geo_xyz/0,16,0 0.0\nP _part/8/_geo_xyz/0,16,1 0.0\nP _part/8/_geo_xyz/0,16,2 0.0\nP _part/8/_geo_xyz/0,17,0 0.0\nP _part/8/_geo_xyz/0,17,1 0.0\nP _part/8/_geo_xyz/0,17,2 0.0\nP _part/8/_geo_xyz/0,2,0 0.0\nP _part/8/_geo_xyz/0,2,1 0.227692902\nP _part/8/_geo_xyz/0,2,2 -0.468307078\nP _part/8/_geo_xyz/0,3,0 0.0\nP _part/8/_geo_xyz/0,3,1 0.263917327\nP _part/8/_geo_xyz/0,3,2 -0.018110236\nP _part/8/_geo_xyz/0,4,0 0.0\nP _part/8/_geo_xyz/0,4,1 0.238043293\nP _part/8/_geo_xyz/0,4,2 0.628740191\nP _part/8/_geo_xyz/0,5,0 0.0\nP _part/8/_geo_xyz/0,5,1 0.213162914\nP _part/8/_geo_xyz/0,5,2 0.820209980\nP _part/8/_geo_xyz/0,6,0 0.0\nP _part/8/_geo_xyz/0,6,1 0.0\nP _part/8/_geo_xyz/0,6,2 2.460629940\nP _part/8/_geo_xyz/0,7,0 0.0\nP _part/8/_geo_xyz/0,7,1 0.0\nP _part/8/_geo_xyz/0,7,2 2.460629940\nP _part/8/_geo_xyz/0,8,0 0.0\nP _part/8/_geo_xyz/0,8,1 -0.092678614\nP _part/8/_geo_xyz/0,8,2 0.820209980\nP _part/8/_geo_xyz/0,9,0 0.0\nP _part/8/_geo_xyz/0,9,1 -0.103496060\nP _part/8/_geo_xyz/0,9,2 0.628740191\nP _part/8/_geo_xyz/1,0,0 -6.561679840\nP _part/8/_geo_xyz/1,0,1 0.0\nP _part/8/_geo_xyz/1,0,2 -0.820209980\nP _part/8/_geo_xyz/1,1,0 -6.561679840\nP _part/8/_geo_xyz/1,1,1 0.139720470\nP _part/8/_geo_xyz/1,1,2 -0.716699481\nP _part/8/_geo_xyz/1,10,0 -6.561679840\nP _part/8/_geo_xyz/1,10,1 -0.134547234\nP _part/8/_geo_xyz/1,10,2 -0.069849081\nP _part/8/_geo_xyz/1,11,0 -6.561679840\nP _part/8/_geo_xyz/1,11,1 -0.113846451\nP _part/8/_geo_xyz/1,11,2 -0.597703397\nP _part/8/_geo_xyz/1,12,0 -6.561679840\nP _part/8/_geo_xyz/1,12,1 -0.082795277\nP _part/8/_geo_xyz/1,12,2 -0.747768998\nP _part/8/_geo_xyz/1,13,0 -6.561679840\nP _part/8/_geo_xyz/1,13,1 0.0\nP _part/8/_geo_xyz/1,13,2 -0.820209980\nP _part/8/_geo_xyz/1,14,0 0.0\nP _part/8/_geo_xyz/1,14,1 0.0\nP _part/8/_geo_xyz/1,14,2 0.0\nP _part/8/_geo_xyz/1,15,0 0.0\nP _part/8/_geo_xyz/1,15,1 0.0\nP _part/8/_geo_xyz/1,15,2 0.0\nP _part/8/_geo_xyz/1,16,0 0.0\nP _part/8/_geo_xyz/1,16,1 0.0\nP _part/8/_geo_xyz/1,16,2 0.0\nP _part/8/_geo_xyz/1,17,0 0.0\nP _part/8/_geo_xyz/1,17,1 0.0\nP _part/8/_geo_xyz/1,17,2 0.0\nP _part/8/_geo_xyz/1,2,0 -6.561679840\nP _part/8/_geo_xyz/1,2,1 0.227692902\nP _part/8/_geo_xyz/1,2,2 -0.468307078\nP _part/8/_geo_xyz/1,3,0 -6.561679840\nP _part/8/_geo_xyz/1,3,1 0.263917327\nP _part/8/_geo_xyz/1,3,2 -0.018110236\nP _part/8/_geo_xyz/1,4,0 -6.561679840\nP _part/8/_geo_xyz/1,4,1 0.238043293\nP _part/8/_geo_xyz/1,4,2 0.628740191\nP _part/8/_geo_xyz/1,5,0 -6.561679840\nP _part/8/_geo_xyz/1,5,1 0.213162914\nP _part/8/_geo_xyz/1,5,2 0.820209980\nP _part/8/_geo_xyz/1,6,0 -6.561679840\nP _part/8/_geo_xyz/1,6,1 0.0\nP _part/8/_geo_xyz/1,6,2 2.460629940\nP _part/8/_geo_xyz/1,7,0 -6.561679840\nP _part/8/_geo_xyz/1,7,1 0.0\nP _part/8/_geo_xyz/1,7,2 2.460629940\nP _part/8/_geo_xyz/1,8,0 -6.561679840\nP _part/8/_geo_xyz/1,8,1 -0.092678614\nP _part/8/_geo_xyz/1,8,2 0.820209980\nP _part/8/_geo_xyz/1,9,0 -6.561679840\nP _part/8/_geo_xyz/1,9,1 -0.103496060\nP _part/8/_geo_xyz/1,9,2 0.628740191\nP _part/8/_geo_xyz/10,0,0 -32.808399200\nP _part/8/_geo_xyz/10,0,1 0.0\nP _part/8/_geo_xyz/10,0,2 -0.820209980\nP _part/8/_geo_xyz/10,1,0 -32.808399200\nP _part/8/_geo_xyz/10,1,1 0.139720470\nP _part/8/_geo_xyz/10,1,2 -0.716699481\nP _part/8/_geo_xyz/10,10,0 -32.808399200\nP _part/8/_geo_xyz/10,10,1 -0.134547234\nP _part/8/_geo_xyz/10,10,2 -0.069849081\nP _part/8/_geo_xyz/10,11,0 -32.808399200\nP _part/8/_geo_xyz/10,11,1 -0.113846451\nP _part/8/_geo_xyz/10,11,2 -0.597703397\nP _part/8/_geo_xyz/10,12,0 -32.808399200\nP _part/8/_geo_xyz/10,12,1 -0.082795277\nP _part/8/_geo_xyz/10,12,2 -0.747768998\nP _part/8/_geo_xyz/10,13,0 -32.808399200\nP _part/8/_geo_xyz/10,13,1 0.0\nP _part/8/_geo_xyz/10,13,2 -0.820209980\nP _part/8/_geo_xyz/10,14,0 0.0\nP _part/8/_geo_xyz/10,14,1 0.0\nP _part/8/_geo_xyz/10,14,2 0.0\nP _part/8/_geo_xyz/10,15,0 0.0\nP _part/8/_geo_xyz/10,15,1 0.0\nP _part/8/_geo_xyz/10,15,2 0.0\nP _part/8/_geo_xyz/10,16,0 0.0\nP _part/8/_geo_xyz/10,16,1 0.0\nP _part/8/_geo_xyz/10,16,2 0.0\nP _part/8/_geo_xyz/10,17,0 0.0\nP _part/8/_geo_xyz/10,17,1 0.0\nP _part/8/_geo_xyz/10,17,2 0.0\nP _part/8/_geo_xyz/10,2,0 -32.808399200\nP _part/8/_geo_xyz/10,2,1 0.227692902\nP _part/8/_geo_xyz/10,2,2 -0.468307078\nP _part/8/_geo_xyz/10,3,0 -32.808399200\nP _part/8/_geo_xyz/10,3,1 0.263917327\nP _part/8/_geo_xyz/10,3,2 -0.018110236\nP _part/8/_geo_xyz/10,4,0 -32.808399200\nP _part/8/_geo_xyz/10,4,1 0.238043293\nP _part/8/_geo_xyz/10,4,2 0.628740191\nP _part/8/_geo_xyz/10,5,0 -32.808399200\nP _part/8/_geo_xyz/10,5,1 0.106581457\nP _part/8/_geo_xyz/10,5,2 1.640419960\nP _part/8/_geo_xyz/10,6,0 -32.808399200\nP _part/8/_geo_xyz/10,6,1 0.0\nP _part/8/_geo_xyz/10,6,2 2.460629940\nP _part/8/_geo_xyz/10,7,0 -32.808399200\nP _part/8/_geo_xyz/10,7,1 0.0\nP _part/8/_geo_xyz/10,7,2 2.460629940\nP _part/8/_geo_xyz/10,8,0 -32.808399200\nP _part/8/_geo_xyz/10,8,1 -0.046339307\nP _part/8/_geo_xyz/10,8,2 1.640419960\nP _part/8/_geo_xyz/10,9,0 -32.808399200\nP _part/8/_geo_xyz/10,9,1 -0.103496060\nP _part/8/_geo_xyz/10,9,2 0.628740191\nP _part/8/_geo_xyz/11,0,0 -39.370079041\nP _part/8/_geo_xyz/11,0,1 0.0\nP _part/8/_geo_xyz/11,0,2 -0.820209980\nP _part/8/_geo_xyz/11,1,0 -39.370079041\nP _part/8/_geo_xyz/11,1,1 0.139720470\nP _part/8/_geo_xyz/11,1,2 -0.716699481\nP _part/8/_geo_xyz/11,10,0 -39.370079041\nP _part/8/_geo_xyz/11,10,1 -0.134547234\nP _part/8/_geo_xyz/11,10,2 -0.069849081\nP _part/8/_geo_xyz/11,11,0 -39.370079041\nP _part/8/_geo_xyz/11,11,1 -0.113846451\nP _part/8/_geo_xyz/11,11,2 -0.597703397\nP _part/8/_geo_xyz/11,12,0 -39.370079041\nP _part/8/_geo_xyz/11,12,1 -0.082795277\nP _part/8/_geo_xyz/11,12,2 -0.747768998\nP _part/8/_geo_xyz/11,13,0 -39.370079041\nP _part/8/_geo_xyz/11,13,1 0.0\nP _part/8/_geo_xyz/11,13,2 -0.820209980\nP _part/8/_geo_xyz/11,14,0 0.0\nP _part/8/_geo_xyz/11,14,1 0.0\nP _part/8/_geo_xyz/11,14,2 0.0\nP _part/8/_geo_xyz/11,15,0 0.0\nP _part/8/_geo_xyz/11,15,1 0.0\nP _part/8/_geo_xyz/11,15,2 0.0\nP _part/8/_geo_xyz/11,16,0 0.0\nP _part/8/_geo_xyz/11,16,1 0.0\nP _part/8/_geo_xyz/11,16,2 0.0\nP _part/8/_geo_xyz/11,17,0 0.0\nP _part/8/_geo_xyz/11,17,1 0.0\nP _part/8/_geo_xyz/11,17,2 0.0\nP _part/8/_geo_xyz/11,2,0 -39.370079041\nP _part/8/_geo_xyz/11,2,1 0.227692902\nP _part/8/_geo_xyz/11,2,2 -0.468307078\nP _part/8/_geo_xyz/11,3,0 -39.370079041\nP _part/8/_geo_xyz/11,3,1 0.263917327\nP _part/8/_geo_xyz/11,3,2 -0.018110236\nP _part/8/_geo_xyz/11,4,0 -39.370079041\nP _part/8/_geo_xyz/11,4,1 0.238043293\nP _part/8/_geo_xyz/11,4,2 0.628740191\nP _part/8/_geo_xyz/11,5,0 -39.370079041\nP _part/8/_geo_xyz/11,5,1 0.106581457\nP _part/8/_geo_xyz/11,5,2 1.640419960\nP _part/8/_geo_xyz/11,6,0 -39.370079041\nP _part/8/_geo_xyz/11,6,1 0.0\nP _part/8/_geo_xyz/11,6,2 2.460629940\nP _part/8/_geo_xyz/11,7,0 -39.370079041\nP _part/8/_geo_xyz/11,7,1 0.0\nP _part/8/_geo_xyz/11,7,2 2.460629940\nP _part/8/_geo_xyz/11,8,0 -39.370079041\nP _part/8/_geo_xyz/11,8,1 -0.046339307\nP _part/8/_geo_xyz/11,8,2 1.640419960\nP _part/8/_geo_xyz/11,9,0 -39.370079041\nP _part/8/_geo_xyz/11,9,1 -0.103496060\nP _part/8/_geo_xyz/11,9,2 0.628740191\nP _part/8/_geo_xyz/12,0,0 -39.370079041\nP _part/8/_geo_xyz/12,0,1 0.0\nP _part/8/_geo_xyz/12,0,2 -0.820209980\nP _part/8/_geo_xyz/12,1,0 -39.370079041\nP _part/8/_geo_xyz/12,1,1 0.139720470\nP _part/8/_geo_xyz/12,1,2 -0.716699481\nP _part/8/_geo_xyz/12,10,0 -39.370079041\nP _part/8/_geo_xyz/12,10,1 -0.134547234\nP _part/8/_geo_xyz/12,10,2 -0.069849081\nP _part/8/_geo_xyz/12,11,0 -39.370079041\nP _part/8/_geo_xyz/12,11,1 -0.113846451\nP _part/8/_geo_xyz/12,11,2 -0.597703397\nP _part/8/_geo_xyz/12,12,0 -39.370079041\nP _part/8/_geo_xyz/12,12,1 -0.082795277\nP _part/8/_geo_xyz/12,12,2 -0.747768998\nP _part/8/_geo_xyz/12,13,0 -39.370079041\nP _part/8/_geo_xyz/12,13,1 0.0\nP _part/8/_geo_xyz/12,13,2 -0.820209980\nP _part/8/_geo_xyz/12,14,0 0.0\nP _part/8/_geo_xyz/12,14,1 0.0\nP _part/8/_geo_xyz/12,14,2 0.0\nP _part/8/_geo_xyz/12,15,0 0.0\nP _part/8/_geo_xyz/12,15,1 0.0\nP _part/8/_geo_xyz/12,15,2 0.0\nP _part/8/_geo_xyz/12,16,0 0.0\nP _part/8/_geo_xyz/12,16,1 0.0\nP _part/8/_geo_xyz/12,16,2 0.0\nP _part/8/_geo_xyz/12,17,0 0.0\nP _part/8/_geo_xyz/12,17,1 0.0\nP _part/8/_geo_xyz/12,17,2 0.0\nP _part/8/_geo_xyz/12,2,0 -39.370079041\nP _part/8/_geo_xyz/12,2,1 0.227692902\nP _part/8/_geo_xyz/12,2,2 -0.468307078\nP _part/8/_geo_xyz/12,3,0 -39.370079041\nP _part/8/_geo_xyz/12,3,1 0.263917327\nP _part/8/_geo_xyz/12,3,2 -0.018110236\nP _part/8/_geo_xyz/12,4,0 -39.370079041\nP _part/8/_geo_xyz/12,4,1 0.238043293\nP _part/8/_geo_xyz/12,4,2 0.628740191\nP _part/8/_geo_xyz/12,5,0 -39.370079041\nP _part/8/_geo_xyz/12,5,1 0.213162914\nP _part/8/_geo_xyz/12,5,2 0.820209980\nP _part/8/_geo_xyz/12,6,0 -39.370079041\nP _part/8/_geo_xyz/12,6,1 0.0\nP _part/8/_geo_xyz/12,6,2 2.460629940\nP _part/8/_geo_xyz/12,7,0 -39.370079041\nP _part/8/_geo_xyz/12,7,1 0.0\nP _part/8/_geo_xyz/12,7,2 2.460629940\nP _part/8/_geo_xyz/12,8,0 -39.370079041\nP _part/8/_geo_xyz/12,8,1 -0.092678614\nP _part/8/_geo_xyz/12,8,2 0.820209980\nP _part/8/_geo_xyz/12,9,0 -39.370079041\nP _part/8/_geo_xyz/12,9,1 -0.103496060\nP _part/8/_geo_xyz/12,9,2 0.628740191\nP _part/8/_geo_xyz/13,0,0 -45.931758881\nP _part/8/_geo_xyz/13,0,1 0.0\nP _part/8/_geo_xyz/13,0,2 -0.820209980\nP _part/8/_geo_xyz/13,1,0 -45.931758881\nP _part/8/_geo_xyz/13,1,1 0.139720470\nP _part/8/_geo_xyz/13,1,2 -0.716699481\nP _part/8/_geo_xyz/13,10,0 -45.931758881\nP _part/8/_geo_xyz/13,10,1 -0.134547234\nP _part/8/_geo_xyz/13,10,2 -0.069849081\nP _part/8/_geo_xyz/13,11,0 -45.931758881\nP _part/8/_geo_xyz/13,11,1 -0.113846451\nP _part/8/_geo_xyz/13,11,2 -0.597703397\nP _part/8/_geo_xyz/13,12,0 -45.931758881\nP _part/8/_geo_xyz/13,12,1 -0.082795277\nP _part/8/_geo_xyz/13,12,2 -0.747768998\nP _part/8/_geo_xyz/13,13,0 -45.931758881\nP _part/8/_geo_xyz/13,13,1 0.0\nP _part/8/_geo_xyz/13,13,2 -0.820209980\nP _part/8/_geo_xyz/13,14,0 0.0\nP _part/8/_geo_xyz/13,14,1 0.0\nP _part/8/_geo_xyz/13,14,2 0.0\nP _part/8/_geo_xyz/13,15,0 0.0\nP _part/8/_geo_xyz/13,15,1 0.0\nP _part/8/_geo_xyz/13,15,2 0.0\nP _part/8/_geo_xyz/13,16,0 0.0\nP _part/8/_geo_xyz/13,16,1 0.0\nP _part/8/_geo_xyz/13,16,2 0.0\nP _part/8/_geo_xyz/13,17,0 0.0\nP _part/8/_geo_xyz/13,17,1 0.0\nP _part/8/_geo_xyz/13,17,2 0.0\nP _part/8/_geo_xyz/13,2,0 -45.931758881\nP _part/8/_geo_xyz/13,2,1 0.227692902\nP _part/8/_geo_xyz/13,2,2 -0.468307078\nP _part/8/_geo_xyz/13,3,0 -45.931758881\nP _part/8/_geo_xyz/13,3,1 0.263917327\nP _part/8/_geo_xyz/13,3,2 -0.018110236\nP _part/8/_geo_xyz/13,4,0 -45.931758881\nP _part/8/_geo_xyz/13,4,1 0.238043293\nP _part/8/_geo_xyz/13,4,2 0.628740191\nP _part/8/_geo_xyz/13,5,0 -45.931758881\nP _part/8/_geo_xyz/13,5,1 0.213162914\nP _part/8/_geo_xyz/13,5,2 0.820209980\nP _part/8/_geo_xyz/13,6,0 -45.931758881\nP _part/8/_geo_xyz/13,6,1 0.0\nP _part/8/_geo_xyz/13,6,2 2.460629940\nP _part/8/_geo_xyz/13,7,0 -45.931758881\nP _part/8/_geo_xyz/13,7,1 0.0\nP _part/8/_geo_xyz/13,7,2 2.460629940\nP _part/8/_geo_xyz/13,8,0 -45.931758881\nP _part/8/_geo_xyz/13,8,1 -0.092678614\nP _part/8/_geo_xyz/13,8,2 0.820209980\nP _part/8/_geo_xyz/13,9,0 -45.931758881\nP _part/8/_geo_xyz/13,9,1 -0.103496060\nP _part/8/_geo_xyz/13,9,2 0.628740191\nP _part/8/_geo_xyz/14,0,0 -45.931758881\nP _part/8/_geo_xyz/14,0,1 0.0\nP _part/8/_geo_xyz/14,0,2 -0.820209980\nP _part/8/_geo_xyz/14,1,0 -45.931758881\nP _part/8/_geo_xyz/14,1,1 0.139720470\nP _part/8/_geo_xyz/14,1,2 -0.716699481\nP _part/8/_geo_xyz/14,10,0 -45.931758881\nP _part/8/_geo_xyz/14,10,1 -0.134547234\nP _part/8/_geo_xyz/14,10,2 -0.069849081\nP _part/8/_geo_xyz/14,11,0 -45.931758881\nP _part/8/_geo_xyz/14,11,1 -0.113846451\nP _part/8/_geo_xyz/14,11,2 -0.597703397\nP _part/8/_geo_xyz/14,12,0 -45.931758881\nP _part/8/_geo_xyz/14,12,1 -0.082795277\nP _part/8/_geo_xyz/14,12,2 -0.747768998\nP _part/8/_geo_xyz/14,13,0 -45.931758881\nP _part/8/_geo_xyz/14,13,1 0.0\nP _part/8/_geo_xyz/14,13,2 -0.820209980\nP _part/8/_geo_xyz/14,14,0 0.0\nP _part/8/_geo_xyz/14,14,1 0.0\nP _part/8/_geo_xyz/14,14,2 0.0\nP _part/8/_geo_xyz/14,15,0 0.0\nP _part/8/_geo_xyz/14,15,1 0.0\nP _part/8/_geo_xyz/14,15,2 0.0\nP _part/8/_geo_xyz/14,16,0 0.0\nP _part/8/_geo_xyz/14,16,1 0.0\nP _part/8/_geo_xyz/14,16,2 0.0\nP _part/8/_geo_xyz/14,17,0 0.0\nP _part/8/_geo_xyz/14,17,1 0.0\nP _part/8/_geo_xyz/14,17,2 0.0\nP _part/8/_geo_xyz/14,2,0 -45.931758881\nP _part/8/_geo_xyz/14,2,1 0.227692902\nP _part/8/_geo_xyz/14,2,2 -0.468307078\nP _part/8/_geo_xyz/14,3,0 -45.931758881\nP _part/8/_geo_xyz/14,3,1 0.263917327\nP _part/8/_geo_xyz/14,3,2 -0.018110236\nP _part/8/_geo_xyz/14,4,0 -45.931758881\nP _part/8/_geo_xyz/14,4,1 0.238043293\nP _part/8/_geo_xyz/14,4,2 0.628740191\nP _part/8/_geo_xyz/14,5,0 -45.931758881\nP _part/8/_geo_xyz/14,5,1 0.213162914\nP _part/8/_geo_xyz/14,5,2 0.820209980\nP _part/8/_geo_xyz/14,6,0 -45.931758881\nP _part/8/_geo_xyz/14,6,1 0.0\nP _part/8/_geo_xyz/14,6,2 2.460629940\nP _part/8/_geo_xyz/14,7,0 -45.931758881\nP _part/8/_geo_xyz/14,7,1 0.0\nP _part/8/_geo_xyz/14,7,2 2.460629940\nP _part/8/_geo_xyz/14,8,0 -45.931758881\nP _part/8/_geo_xyz/14,8,1 -0.092678614\nP _part/8/_geo_xyz/14,8,2 0.820209980\nP _part/8/_geo_xyz/14,9,0 -45.931758881\nP _part/8/_geo_xyz/14,9,1 -0.103496060\nP _part/8/_geo_xyz/14,9,2 0.628740191\nP _part/8/_geo_xyz/15,0,0 -52.493438721\nP _part/8/_geo_xyz/15,0,1 0.0\nP _part/8/_geo_xyz/15,0,2 -0.820209980\nP _part/8/_geo_xyz/15,1,0 -52.493438721\nP _part/8/_geo_xyz/15,1,1 0.139720470\nP _part/8/_geo_xyz/15,1,2 -0.716699481\nP _part/8/_geo_xyz/15,10,0 -52.493438721\nP _part/8/_geo_xyz/15,10,1 -0.134547234\nP _part/8/_geo_xyz/15,10,2 -0.069849081\nP _part/8/_geo_xyz/15,11,0 -52.493438721\nP _part/8/_geo_xyz/15,11,1 -0.113846451\nP _part/8/_geo_xyz/15,11,2 -0.597703397\nP _part/8/_geo_xyz/15,12,0 -52.493438721\nP _part/8/_geo_xyz/15,12,1 -0.082795277\nP _part/8/_geo_xyz/15,12,2 -0.747768998\nP _part/8/_geo_xyz/15,13,0 -52.493438721\nP _part/8/_geo_xyz/15,13,1 0.0\nP _part/8/_geo_xyz/15,13,2 -0.820209980\nP _part/8/_geo_xyz/15,14,0 0.0\nP _part/8/_geo_xyz/15,14,1 0.0\nP _part/8/_geo_xyz/15,14,2 0.0\nP _part/8/_geo_xyz/15,15,0 0.0\nP _part/8/_geo_xyz/15,15,1 0.0\nP _part/8/_geo_xyz/15,15,2 0.0\nP _part/8/_geo_xyz/15,16,0 0.0\nP _part/8/_geo_xyz/15,16,1 0.0\nP _part/8/_geo_xyz/15,16,2 0.0\nP _part/8/_geo_xyz/15,17,0 0.0\nP _part/8/_geo_xyz/15,17,1 0.0\nP _part/8/_geo_xyz/15,17,2 0.0\nP _part/8/_geo_xyz/15,2,0 -52.493438721\nP _part/8/_geo_xyz/15,2,1 0.227692902\nP _part/8/_geo_xyz/15,2,2 -0.468307078\nP _part/8/_geo_xyz/15,3,0 -52.493438721\nP _part/8/_geo_xyz/15,3,1 0.263917327\nP _part/8/_geo_xyz/15,3,2 -0.018110236\nP _part/8/_geo_xyz/15,4,0 -52.493438721\nP _part/8/_geo_xyz/15,4,1 0.238043293\nP _part/8/_geo_xyz/15,4,2 0.628740191\nP _part/8/_geo_xyz/15,5,0 -52.493438721\nP _part/8/_geo_xyz/15,5,1 0.213162914\nP _part/8/_geo_xyz/15,5,2 0.820209980\nP _part/8/_geo_xyz/15,6,0 -52.493438721\nP _part/8/_geo_xyz/15,6,1 0.0\nP _part/8/_geo_xyz/15,6,2 2.460629940\nP _part/8/_geo_xyz/15,7,0 -52.493438721\nP _part/8/_geo_xyz/15,7,1 0.0\nP _part/8/_geo_xyz/15,7,2 2.460629940\nP _part/8/_geo_xyz/15,8,0 -52.493438721\nP _part/8/_geo_xyz/15,8,1 -0.092678614\nP _part/8/_geo_xyz/15,8,2 0.820209980\nP _part/8/_geo_xyz/15,9,0 -52.493438721\nP _part/8/_geo_xyz/15,9,1 -0.103496060\nP _part/8/_geo_xyz/15,9,2 0.628740191\nP _part/8/_geo_xyz/16,0,0 -52.493438721\nP _part/8/_geo_xyz/16,0,1 0.0\nP _part/8/_geo_xyz/16,0,2 -0.820209980\nP _part/8/_geo_xyz/16,1,0 -52.493438721\nP _part/8/_geo_xyz/16,1,1 0.139720470\nP _part/8/_geo_xyz/16,1,2 -0.716699481\nP _part/8/_geo_xyz/16,10,0 -52.493438721\nP _part/8/_geo_xyz/16,10,1 -0.134547234\nP _part/8/_geo_xyz/16,10,2 -0.069849081\nP _part/8/_geo_xyz/16,11,0 -52.493438721\nP _part/8/_geo_xyz/16,11,1 -0.113846451\nP _part/8/_geo_xyz/16,11,2 -0.597703397\nP _part/8/_geo_xyz/16,12,0 -52.493438721\nP _part/8/_geo_xyz/16,12,1 -0.082795277\nP _part/8/_geo_xyz/16,12,2 -0.747768998\nP _part/8/_geo_xyz/16,13,0 -52.493438721\nP _part/8/_geo_xyz/16,13,1 0.0\nP _part/8/_geo_xyz/16,13,2 -0.820209980\nP _part/8/_geo_xyz/16,14,0 0.0\nP _part/8/_geo_xyz/16,14,1 0.0\nP _part/8/_geo_xyz/16,14,2 0.0\nP _part/8/_geo_xyz/16,15,0 0.0\nP _part/8/_geo_xyz/16,15,1 0.0\nP _part/8/_geo_xyz/16,15,2 0.0\nP _part/8/_geo_xyz/16,16,0 0.0\nP _part/8/_geo_xyz/16,16,1 0.0\nP _part/8/_geo_xyz/16,16,2 0.0\nP _part/8/_geo_xyz/16,17,0 0.0\nP _part/8/_geo_xyz/16,17,1 0.0\nP _part/8/_geo_xyz/16,17,2 0.0\nP _part/8/_geo_xyz/16,2,0 -52.493438721\nP _part/8/_geo_xyz/16,2,1 0.227692902\nP _part/8/_geo_xyz/16,2,2 -0.468307078\nP _part/8/_geo_xyz/16,3,0 -52.493438721\nP _part/8/_geo_xyz/16,3,1 0.263917327\nP _part/8/_geo_xyz/16,3,2 -0.018110236\nP _part/8/_geo_xyz/16,4,0 -52.493438721\nP _part/8/_geo_xyz/16,4,1 0.238043293\nP _part/8/_geo_xyz/16,4,2 0.628740191\nP _part/8/_geo_xyz/16,5,0 -52.493438721\nP _part/8/_geo_xyz/16,5,1 0.213162914\nP _part/8/_geo_xyz/16,5,2 0.820209980\nP _part/8/_geo_xyz/16,6,0 -52.493438721\nP _part/8/_geo_xyz/16,6,1 0.0\nP _part/8/_geo_xyz/16,6,2 2.460629940\nP _part/8/_geo_xyz/16,7,0 -52.493438721\nP _part/8/_geo_xyz/16,7,1 0.0\nP _part/8/_geo_xyz/16,7,2 2.460629940\nP _part/8/_geo_xyz/16,8,0 -52.493438721\nP _part/8/_geo_xyz/16,8,1 -0.092678614\nP _part/8/_geo_xyz/16,8,2 0.820209980\nP _part/8/_geo_xyz/16,9,0 -52.493438721\nP _part/8/_geo_xyz/16,9,1 -0.103496060\nP _part/8/_geo_xyz/16,9,2 0.628740191\nP _part/8/_geo_xyz/17,0,0 0.0\nP _part/8/_geo_xyz/17,0,1 0.0\nP _part/8/_geo_xyz/17,0,2 0.0\nP _part/8/_geo_xyz/17,1,0 0.0\nP _part/8/_geo_xyz/17,1,1 0.0\nP _part/8/_geo_xyz/17,1,2 0.0\nP _part/8/_geo_xyz/17,10,0 0.0\nP _part/8/_geo_xyz/17,10,1 0.0\nP _part/8/_geo_xyz/17,10,2 0.0\nP _part/8/_geo_xyz/17,11,0 0.0\nP _part/8/_geo_xyz/17,11,1 0.0\nP _part/8/_geo_xyz/17,11,2 0.0\nP _part/8/_geo_xyz/17,12,0 0.0\nP _part/8/_geo_xyz/17,12,1 0.0\nP _part/8/_geo_xyz/17,12,2 0.0\nP _part/8/_geo_xyz/17,13,0 0.0\nP _part/8/_geo_xyz/17,13,1 0.0\nP _part/8/_geo_xyz/17,13,2 0.0\nP _part/8/_geo_xyz/17,14,0 0.0\nP _part/8/_geo_xyz/17,14,1 0.0\nP _part/8/_geo_xyz/17,14,2 0.0\nP _part/8/_geo_xyz/17,15,0 0.0\nP _part/8/_geo_xyz/17,15,1 0.0\nP _part/8/_geo_xyz/17,15,2 0.0\nP _part/8/_geo_xyz/17,16,0 0.0\nP _part/8/_geo_xyz/17,16,1 0.0\nP _part/8/_geo_xyz/17,16,2 0.0\nP _part/8/_geo_xyz/17,17,0 0.0\nP _part/8/_geo_xyz/17,17,1 0.0\nP _part/8/_geo_xyz/17,17,2 0.0\nP _part/8/_geo_xyz/17,2,0 0.0\nP _part/8/_geo_xyz/17,2,1 0.0\nP _part/8/_geo_xyz/17,2,2 0.0\nP _part/8/_geo_xyz/17,3,0 0.0\nP _part/8/_geo_xyz/17,3,1 0.0\nP _part/8/_geo_xyz/17,3,2 0.0\nP _part/8/_geo_xyz/17,4,0 0.0\nP _part/8/_geo_xyz/17,4,1 0.0\nP _part/8/_geo_xyz/17,4,2 0.0\nP _part/8/_geo_xyz/17,5,0 0.0\nP _part/8/_geo_xyz/17,5,1 0.0\nP _part/8/_geo_xyz/17,5,2 0.0\nP _part/8/_geo_xyz/17,6,0 0.0\nP _part/8/_geo_xyz/17,6,1 0.0\nP _part/8/_geo_xyz/17,6,2 0.0\nP _part/8/_geo_xyz/17,7,0 0.0\nP _part/8/_geo_xyz/17,7,1 0.0\nP _part/8/_geo_xyz/17,7,2 0.0\nP _part/8/_geo_xyz/17,8,0 0.0\nP _part/8/_geo_xyz/17,8,1 0.0\nP _part/8/_geo_xyz/17,8,2 0.0\nP _part/8/_geo_xyz/17,9,0 0.0\nP _part/8/_geo_xyz/17,9,1 0.0\nP _part/8/_geo_xyz/17,9,2 0.0\nP _part/8/_geo_xyz/18,0,0 0.0\nP _part/8/_geo_xyz/18,0,1 0.0\nP _part/8/_geo_xyz/18,0,2 0.0\nP _part/8/_geo_xyz/18,1,0 0.0\nP _part/8/_geo_xyz/18,1,1 0.0\nP _part/8/_geo_xyz/18,1,2 0.0\nP _part/8/_geo_xyz/18,10,0 0.0\nP _part/8/_geo_xyz/18,10,1 0.0\nP _part/8/_geo_xyz/18,10,2 0.0\nP _part/8/_geo_xyz/18,11,0 0.0\nP _part/8/_geo_xyz/18,11,1 0.0\nP _part/8/_geo_xyz/18,11,2 0.0\nP _part/8/_geo_xyz/18,12,0 0.0\nP _part/8/_geo_xyz/18,12,1 0.0\nP _part/8/_geo_xyz/18,12,2 0.0\nP _part/8/_geo_xyz/18,13,0 0.0\nP _part/8/_geo_xyz/18,13,1 0.0\nP _part/8/_geo_xyz/18,13,2 0.0\nP _part/8/_geo_xyz/18,14,0 0.0\nP _part/8/_geo_xyz/18,14,1 0.0\nP _part/8/_geo_xyz/18,14,2 0.0\nP _part/8/_geo_xyz/18,15,0 0.0\nP _part/8/_geo_xyz/18,15,1 0.0\nP _part/8/_geo_xyz/18,15,2 0.0\nP _part/8/_geo_xyz/18,16,0 0.0\nP _part/8/_geo_xyz/18,16,1 0.0\nP _part/8/_geo_xyz/18,16,2 0.0\nP _part/8/_geo_xyz/18,17,0 0.0\nP _part/8/_geo_xyz/18,17,1 0.0\nP _part/8/_geo_xyz/18,17,2 0.0\nP _part/8/_geo_xyz/18,2,0 0.0\nP _part/8/_geo_xyz/18,2,1 0.0\nP _part/8/_geo_xyz/18,2,2 0.0\nP _part/8/_geo_xyz/18,3,0 0.0\nP _part/8/_geo_xyz/18,3,1 0.0\nP _part/8/_geo_xyz/18,3,2 0.0\nP _part/8/_geo_xyz/18,4,0 0.0\nP _part/8/_geo_xyz/18,4,1 0.0\nP _part/8/_geo_xyz/18,4,2 0.0\nP _part/8/_geo_xyz/18,5,0 0.0\nP _part/8/_geo_xyz/18,5,1 0.0\nP _part/8/_geo_xyz/18,5,2 0.0\nP _part/8/_geo_xyz/18,6,0 0.0\nP _part/8/_geo_xyz/18,6,1 0.0\nP _part/8/_geo_xyz/18,6,2 0.0\nP _part/8/_geo_xyz/18,7,0 0.0\nP _part/8/_geo_xyz/18,7,1 0.0\nP _part/8/_geo_xyz/18,7,2 0.0\nP _part/8/_geo_xyz/18,8,0 0.0\nP _part/8/_geo_xyz/18,8,1 0.0\nP _part/8/_geo_xyz/18,8,2 0.0\nP _part/8/_geo_xyz/18,9,0 0.0\nP _part/8/_geo_xyz/18,9,1 0.0\nP _part/8/_geo_xyz/18,9,2 0.0\nP _part/8/_geo_xyz/19,0,0 0.0\nP _part/8/_geo_xyz/19,0,1 0.0\nP _part/8/_geo_xyz/19,0,2 0.0\nP _part/8/_geo_xyz/19,1,0 0.0\nP _part/8/_geo_xyz/19,1,1 0.0\nP _part/8/_geo_xyz/19,1,2 0.0\nP _part/8/_geo_xyz/19,10,0 0.0\nP _part/8/_geo_xyz/19,10,1 0.0\nP _part/8/_geo_xyz/19,10,2 0.0\nP _part/8/_geo_xyz/19,11,0 0.0\nP _part/8/_geo_xyz/19,11,1 0.0\nP _part/8/_geo_xyz/19,11,2 0.0\nP _part/8/_geo_xyz/19,12,0 0.0\nP _part/8/_geo_xyz/19,12,1 0.0\nP _part/8/_geo_xyz/19,12,2 0.0\nP _part/8/_geo_xyz/19,13,0 0.0\nP _part/8/_geo_xyz/19,13,1 0.0\nP _part/8/_geo_xyz/19,13,2 0.0\nP _part/8/_geo_xyz/19,14,0 0.0\nP _part/8/_geo_xyz/19,14,1 0.0\nP _part/8/_geo_xyz/19,14,2 0.0\nP _part/8/_geo_xyz/19,15,0 0.0\nP _part/8/_geo_xyz/19,15,1 0.0\nP _part/8/_geo_xyz/19,15,2 0.0\nP _part/8/_geo_xyz/19,16,0 0.0\nP _part/8/_geo_xyz/19,16,1 0.0\nP _part/8/_geo_xyz/19,16,2 0.0\nP _part/8/_geo_xyz/19,17,0 0.0\nP _part/8/_geo_xyz/19,17,1 0.0\nP _part/8/_geo_xyz/19,17,2 0.0\nP _part/8/_geo_xyz/19,2,0 0.0\nP _part/8/_geo_xyz/19,2,1 0.0\nP _part/8/_geo_xyz/19,2,2 0.0\nP _part/8/_geo_xyz/19,3,0 0.0\nP _part/8/_geo_xyz/19,3,1 0.0\nP _part/8/_geo_xyz/19,3,2 0.0\nP _part/8/_geo_xyz/19,4,0 0.0\nP _part/8/_geo_xyz/19,4,1 0.0\nP _part/8/_geo_xyz/19,4,2 0.0\nP _part/8/_geo_xyz/19,5,0 0.0\nP _part/8/_geo_xyz/19,5,1 0.0\nP _part/8/_geo_xyz/19,5,2 0.0\nP _part/8/_geo_xyz/19,6,0 0.0\nP _part/8/_geo_xyz/19,6,1 0.0\nP _part/8/_geo_xyz/19,6,2 0.0\nP _part/8/_geo_xyz/19,7,0 0.0\nP _part/8/_geo_xyz/19,7,1 0.0\nP _part/8/_geo_xyz/19,7,2 0.0\nP _part/8/_geo_xyz/19,8,0 0.0\nP _part/8/_geo_xyz/19,8,1 0.0\nP _part/8/_geo_xyz/19,8,2 0.0\nP _part/8/_geo_xyz/19,9,0 0.0\nP _part/8/_geo_xyz/19,9,1 0.0\nP _part/8/_geo_xyz/19,9,2 0.0\nP _part/8/_geo_xyz/2,0,0 -6.561679840\nP _part/8/_geo_xyz/2,0,1 0.0\nP _part/8/_geo_xyz/2,0,2 -0.820209980\nP _part/8/_geo_xyz/2,1,0 -6.561679840\nP _part/8/_geo_xyz/2,1,1 0.139720470\nP _part/8/_geo_xyz/2,1,2 -0.716699481\nP _part/8/_geo_xyz/2,10,0 -6.561679840\nP _part/8/_geo_xyz/2,10,1 -0.134547234\nP _part/8/_geo_xyz/2,10,2 -0.069849081\nP _part/8/_geo_xyz/2,11,0 -6.561679840\nP _part/8/_geo_xyz/2,11,1 -0.113846451\nP _part/8/_geo_xyz/2,11,2 -0.597703397\nP _part/8/_geo_xyz/2,12,0 -6.561679840\nP _part/8/_geo_xyz/2,12,1 -0.082795277\nP _part/8/_geo_xyz/2,12,2 -0.747768998\nP _part/8/_geo_xyz/2,13,0 -6.561679840\nP _part/8/_geo_xyz/2,13,1 0.0\nP _part/8/_geo_xyz/2,13,2 -0.820209980\nP _part/8/_geo_xyz/2,14,0 0.0\nP _part/8/_geo_xyz/2,14,1 0.0\nP _part/8/_geo_xyz/2,14,2 0.0\nP _part/8/_geo_xyz/2,15,0 0.0\nP _part/8/_geo_xyz/2,15,1 0.0\nP _part/8/_geo_xyz/2,15,2 0.0\nP _part/8/_geo_xyz/2,16,0 0.0\nP _part/8/_geo_xyz/2,16,1 0.0\nP _part/8/_geo_xyz/2,16,2 0.0\nP _part/8/_geo_xyz/2,17,0 0.0\nP _part/8/_geo_xyz/2,17,1 0.0\nP _part/8/_geo_xyz/2,17,2 0.0\nP _part/8/_geo_xyz/2,2,0 -6.561679840\nP _part/8/_geo_xyz/2,2,1 0.227692902\nP _part/8/_geo_xyz/2,2,2 -0.468307078\nP _part/8/_geo_xyz/2,3,0 -6.561679840\nP _part/8/_geo_xyz/2,3,1 0.263917327\nP _part/8/_geo_xyz/2,3,2 -0.018110236\nP _part/8/_geo_xyz/2,4,0 -6.561679840\nP _part/8/_geo_xyz/2,4,1 0.238043293\nP _part/8/_geo_xyz/2,4,2 0.628740191\nP _part/8/_geo_xyz/2,5,0 -6.561679840\nP _part/8/_geo_xyz/2,5,1 0.106581457\nP _part/8/_geo_xyz/2,5,2 1.640419960\nP _part/8/_geo_xyz/2,6,0 -6.561679840\nP _part/8/_geo_xyz/2,6,1 0.0\nP _part/8/_geo_xyz/2,6,2 2.460629940\nP _part/8/_geo_xyz/2,7,0 -6.561679840\nP _part/8/_geo_xyz/2,7,1 0.0\nP _part/8/_geo_xyz/2,7,2 2.460629940\nP _part/8/_geo_xyz/2,8,0 -6.561679840\nP _part/8/_geo_xyz/2,8,1 -0.046339307\nP _part/8/_geo_xyz/2,8,2 1.640419960\nP _part/8/_geo_xyz/2,9,0 -6.561679840\nP _part/8/_geo_xyz/2,9,1 -0.103496060\nP _part/8/_geo_xyz/2,9,2 0.628740191\nP _part/8/_geo_xyz/3,0,0 -13.123359680\nP _part/8/_geo_xyz/3,0,1 0.0\nP _part/8/_geo_xyz/3,0,2 -0.820209980\nP _part/8/_geo_xyz/3,1,0 -13.123359680\nP _part/8/_geo_xyz/3,1,1 0.139720470\nP _part/8/_geo_xyz/3,1,2 -0.716699481\nP _part/8/_geo_xyz/3,10,0 -13.123359680\nP _part/8/_geo_xyz/3,10,1 -0.134547234\nP _part/8/_geo_xyz/3,10,2 -0.069849081\nP _part/8/_geo_xyz/3,11,0 -13.123359680\nP _part/8/_geo_xyz/3,11,1 -0.113846451\nP _part/8/_geo_xyz/3,11,2 -0.597703397\nP _part/8/_geo_xyz/3,12,0 -13.123359680\nP _part/8/_geo_xyz/3,12,1 -0.082795277\nP _part/8/_geo_xyz/3,12,2 -0.747768998\nP _part/8/_geo_xyz/3,13,0 -13.123359680\nP _part/8/_geo_xyz/3,13,1 0.0\nP _part/8/_geo_xyz/3,13,2 -0.820209980\nP _part/8/_geo_xyz/3,14,0 0.0\nP _part/8/_geo_xyz/3,14,1 0.0\nP _part/8/_geo_xyz/3,14,2 0.0\nP _part/8/_geo_xyz/3,15,0 0.0\nP _part/8/_geo_xyz/3,15,1 0.0\nP _part/8/_geo_xyz/3,15,2 0.0\nP _part/8/_geo_xyz/3,16,0 0.0\nP _part/8/_geo_xyz/3,16,1 0.0\nP _part/8/_geo_xyz/3,16,2 0.0\nP _part/8/_geo_xyz/3,17,0 0.0\nP _part/8/_geo_xyz/3,17,1 0.0\nP _part/8/_geo_xyz/3,17,2 0.0\nP _part/8/_geo_xyz/3,2,0 -13.123359680\nP _part/8/_geo_xyz/3,2,1 0.227692902\nP _part/8/_geo_xyz/3,2,2 -0.468307078\nP _part/8/_geo_xyz/3,3,0 -13.123359680\nP _part/8/_geo_xyz/3,3,1 0.263917327\nP _part/8/_geo_xyz/3,3,2 -0.018110236\nP _part/8/_geo_xyz/3,4,0 -13.123359680\nP _part/8/_geo_xyz/3,4,1 0.238043293\nP _part/8/_geo_xyz/3,4,2 0.628740191\nP _part/8/_geo_xyz/3,5,0 -13.123359680\nP _part/8/_geo_xyz/3,5,1 0.106581457\nP _part/8/_geo_xyz/3,5,2 1.640419960\nP _part/8/_geo_xyz/3,6,0 -13.123359680\nP _part/8/_geo_xyz/3,6,1 0.0\nP _part/8/_geo_xyz/3,6,2 2.460629940\nP _part/8/_geo_xyz/3,7,0 -13.123359680\nP _part/8/_geo_xyz/3,7,1 0.0\nP _part/8/_geo_xyz/3,7,2 2.460629940\nP _part/8/_geo_xyz/3,8,0 -13.123359680\nP _part/8/_geo_xyz/3,8,1 -0.046339307\nP _part/8/_geo_xyz/3,8,2 1.640419960\nP _part/8/_geo_xyz/3,9,0 -13.123359680\nP _part/8/_geo_xyz/3,9,1 -0.103496060\nP _part/8/_geo_xyz/3,9,2 0.628740191\nP _part/8/_geo_xyz/4,0,0 -13.123359680\nP _part/8/_geo_xyz/4,0,1 0.0\nP _part/8/_geo_xyz/4,0,2 -0.820209980\nP _part/8/_geo_xyz/4,1,0 -13.123359680\nP _part/8/_geo_xyz/4,1,1 0.139720470\nP _part/8/_geo_xyz/4,1,2 -0.716699481\nP _part/8/_geo_xyz/4,10,0 -13.123359680\nP _part/8/_geo_xyz/4,10,1 -0.134547234\nP _part/8/_geo_xyz/4,10,2 -0.069849081\nP _part/8/_geo_xyz/4,11,0 -13.123359680\nP _part/8/_geo_xyz/4,11,1 -0.113846451\nP _part/8/_geo_xyz/4,11,2 -0.597703397\nP _part/8/_geo_xyz/4,12,0 -13.123359680\nP _part/8/_geo_xyz/4,12,1 -0.082795277\nP _part/8/_geo_xyz/4,12,2 -0.747768998\nP _part/8/_geo_xyz/4,13,0 -13.123359680\nP _part/8/_geo_xyz/4,13,1 0.0\nP _part/8/_geo_xyz/4,13,2 -0.820209980\nP _part/8/_geo_xyz/4,14,0 0.0\nP _part/8/_geo_xyz/4,14,1 0.0\nP _part/8/_geo_xyz/4,14,2 0.0\nP _part/8/_geo_xyz/4,15,0 0.0\nP _part/8/_geo_xyz/4,15,1 0.0\nP _part/8/_geo_xyz/4,15,2 0.0\nP _part/8/_geo_xyz/4,16,0 0.0\nP _part/8/_geo_xyz/4,16,1 0.0\nP _part/8/_geo_xyz/4,16,2 0.0\nP _part/8/_geo_xyz/4,17,0 0.0\nP _part/8/_geo_xyz/4,17,1 0.0\nP _part/8/_geo_xyz/4,17,2 0.0\nP _part/8/_geo_xyz/4,2,0 -13.123359680\nP _part/8/_geo_xyz/4,2,1 0.227692902\nP _part/8/_geo_xyz/4,2,2 -0.468307078\nP _part/8/_geo_xyz/4,3,0 -13.123359680\nP _part/8/_geo_xyz/4,3,1 0.263917327\nP _part/8/_geo_xyz/4,3,2 -0.018110236\nP _part/8/_geo_xyz/4,4,0 -13.123359680\nP _part/8/_geo_xyz/4,4,1 0.238043293\nP _part/8/_geo_xyz/4,4,2 0.628740191\nP _part/8/_geo_xyz/4,5,0 -13.123359680\nP _part/8/_geo_xyz/4,5,1 0.106581457\nP _part/8/_geo_xyz/4,5,2 1.640419960\nP _part/8/_geo_xyz/4,6,0 -13.123359680\nP _part/8/_geo_xyz/4,6,1 0.0\nP _part/8/_geo_xyz/4,6,2 2.460629940\nP _part/8/_geo_xyz/4,7,0 -13.123359680\nP _part/8/_geo_xyz/4,7,1 0.0\nP _part/8/_geo_xyz/4,7,2 2.460629940\nP _part/8/_geo_xyz/4,8,0 -13.123359680\nP _part/8/_geo_xyz/4,8,1 -0.046339307\nP _part/8/_geo_xyz/4,8,2 1.640419960\nP _part/8/_geo_xyz/4,9,0 -13.123359680\nP _part/8/_geo_xyz/4,9,1 -0.103496060\nP _part/8/_geo_xyz/4,9,2 0.628740191\nP _part/8/_geo_xyz/5,0,0 -19.685039520\nP _part/8/_geo_xyz/5,0,1 0.0\nP _part/8/_geo_xyz/5,0,2 -0.820209980\nP _part/8/_geo_xyz/5,1,0 -19.685039520\nP _part/8/_geo_xyz/5,1,1 0.139720470\nP _part/8/_geo_xyz/5,1,2 -0.716699481\nP _part/8/_geo_xyz/5,10,0 -19.685039520\nP _part/8/_geo_xyz/5,10,1 -0.134547234\nP _part/8/_geo_xyz/5,10,2 -0.069849081\nP _part/8/_geo_xyz/5,11,0 -19.685039520\nP _part/8/_geo_xyz/5,11,1 -0.113846451\nP _part/8/_geo_xyz/5,11,2 -0.597703397\nP _part/8/_geo_xyz/5,12,0 -19.685039520\nP _part/8/_geo_xyz/5,12,1 -0.082795277\nP _part/8/_geo_xyz/5,12,2 -0.747768998\nP _part/8/_geo_xyz/5,13,0 -19.685039520\nP _part/8/_geo_xyz/5,13,1 0.0\nP _part/8/_geo_xyz/5,13,2 -0.820209980\nP _part/8/_geo_xyz/5,14,0 0.0\nP _part/8/_geo_xyz/5,14,1 0.0\nP _part/8/_geo_xyz/5,14,2 0.0\nP _part/8/_geo_xyz/5,15,0 0.0\nP _part/8/_geo_xyz/5,15,1 0.0\nP _part/8/_geo_xyz/5,15,2 0.0\nP _part/8/_geo_xyz/5,16,0 0.0\nP _part/8/_geo_xyz/5,16,1 0.0\nP _part/8/_geo_xyz/5,16,2 0.0\nP _part/8/_geo_xyz/5,17,0 0.0\nP _part/8/_geo_xyz/5,17,1 0.0\nP _part/8/_geo_xyz/5,17,2 0.0\nP _part/8/_geo_xyz/5,2,0 -19.685039520\nP _part/8/_geo_xyz/5,2,1 0.227692902\nP _part/8/_geo_xyz/5,2,2 -0.468307078\nP _part/8/_geo_xyz/5,3,0 -19.685039520\nP _part/8/_geo_xyz/5,3,1 0.263917327\nP _part/8/_geo_xyz/5,3,2 -0.018110236\nP _part/8/_geo_xyz/5,4,0 -19.685039520\nP _part/8/_geo_xyz/5,4,1 0.238043293\nP _part/8/_geo_xyz/5,4,2 0.628740191\nP _part/8/_geo_xyz/5,5,0 -19.685039520\nP _part/8/_geo_xyz/5,5,1 0.106581457\nP _part/8/_geo_xyz/5,5,2 1.640419960\nP _part/8/_geo_xyz/5,6,0 -19.685039520\nP _part/8/_geo_xyz/5,6,1 0.0\nP _part/8/_geo_xyz/5,6,2 2.460629940\nP _part/8/_geo_xyz/5,7,0 -19.685039520\nP _part/8/_geo_xyz/5,7,1 0.0\nP _part/8/_geo_xyz/5,7,2 2.460629940\nP _part/8/_geo_xyz/5,8,0 -19.685039520\nP _part/8/_geo_xyz/5,8,1 -0.046339307\nP _part/8/_geo_xyz/5,8,2 1.640419960\nP _part/8/_geo_xyz/5,9,0 -19.685039520\nP _part/8/_geo_xyz/5,9,1 -0.103496060\nP _part/8/_geo_xyz/5,9,2 0.628740191\nP _part/8/_geo_xyz/6,0,0 -19.685039520\nP _part/8/_geo_xyz/6,0,1 0.0\nP _part/8/_geo_xyz/6,0,2 -0.820209980\nP _part/8/_geo_xyz/6,1,0 -19.685039520\nP _part/8/_geo_xyz/6,1,1 0.139720470\nP _part/8/_geo_xyz/6,1,2 -0.716699481\nP _part/8/_geo_xyz/6,10,0 -19.685039520\nP _part/8/_geo_xyz/6,10,1 -0.134547234\nP _part/8/_geo_xyz/6,10,2 -0.069849081\nP _part/8/_geo_xyz/6,11,0 -19.685039520\nP _part/8/_geo_xyz/6,11,1 -0.113846451\nP _part/8/_geo_xyz/6,11,2 -0.597703397\nP _part/8/_geo_xyz/6,12,0 -19.685039520\nP _part/8/_geo_xyz/6,12,1 -0.082795277\nP _part/8/_geo_xyz/6,12,2 -0.747768998\nP _part/8/_geo_xyz/6,13,0 -19.685039520\nP _part/8/_geo_xyz/6,13,1 0.0\nP _part/8/_geo_xyz/6,13,2 -0.820209980\nP _part/8/_geo_xyz/6,14,0 0.0\nP _part/8/_geo_xyz/6,14,1 0.0\nP _part/8/_geo_xyz/6,14,2 0.0\nP _part/8/_geo_xyz/6,15,0 0.0\nP _part/8/_geo_xyz/6,15,1 0.0\nP _part/8/_geo_xyz/6,15,2 0.0\nP _part/8/_geo_xyz/6,16,0 0.0\nP _part/8/_geo_xyz/6,16,1 0.0\nP _part/8/_geo_xyz/6,16,2 0.0\nP _part/8/_geo_xyz/6,17,0 0.0\nP _part/8/_geo_xyz/6,17,1 0.0\nP _part/8/_geo_xyz/6,17,2 0.0\nP _part/8/_geo_xyz/6,2,0 -19.685039520\nP _part/8/_geo_xyz/6,2,1 0.227692902\nP _part/8/_geo_xyz/6,2,2 -0.468307078\nP _part/8/_geo_xyz/6,3,0 -19.685039520\nP _part/8/_geo_xyz/6,3,1 0.263917327\nP _part/8/_geo_xyz/6,3,2 -0.018110236\nP _part/8/_geo_xyz/6,4,0 -19.685039520\nP _part/8/_geo_xyz/6,4,1 0.238043293\nP _part/8/_geo_xyz/6,4,2 0.628740191\nP _part/8/_geo_xyz/6,5,0 -19.685039520\nP _part/8/_geo_xyz/6,5,1 0.106581457\nP _part/8/_geo_xyz/6,5,2 1.640419960\nP _part/8/_geo_xyz/6,6,0 -19.685039520\nP _part/8/_geo_xyz/6,6,1 0.0\nP _part/8/_geo_xyz/6,6,2 2.460629940\nP _part/8/_geo_xyz/6,7,0 -19.685039520\nP _part/8/_geo_xyz/6,7,1 0.0\nP _part/8/_geo_xyz/6,7,2 2.460629940\nP _part/8/_geo_xyz/6,8,0 -19.685039520\nP _part/8/_geo_xyz/6,8,1 -0.046339307\nP _part/8/_geo_xyz/6,8,2 1.640419960\nP _part/8/_geo_xyz/6,9,0 -19.685039520\nP _part/8/_geo_xyz/6,9,1 -0.103496060\nP _part/8/_geo_xyz/6,9,2 0.628740191\nP _part/8/_geo_xyz/7,0,0 -26.246719360\nP _part/8/_geo_xyz/7,0,1 0.0\nP _part/8/_geo_xyz/7,0,2 -0.820209980\nP _part/8/_geo_xyz/7,1,0 -26.246719360\nP _part/8/_geo_xyz/7,1,1 0.139720470\nP _part/8/_geo_xyz/7,1,2 -0.716699481\nP _part/8/_geo_xyz/7,10,0 -26.246719360\nP _part/8/_geo_xyz/7,10,1 -0.134547234\nP _part/8/_geo_xyz/7,10,2 -0.069849081\nP _part/8/_geo_xyz/7,11,0 -26.246719360\nP _part/8/_geo_xyz/7,11,1 -0.113846451\nP _part/8/_geo_xyz/7,11,2 -0.597703397\nP _part/8/_geo_xyz/7,12,0 -26.246719360\nP _part/8/_geo_xyz/7,12,1 -0.082795277\nP _part/8/_geo_xyz/7,12,2 -0.747768998\nP _part/8/_geo_xyz/7,13,0 -26.246719360\nP _part/8/_geo_xyz/7,13,1 0.0\nP _part/8/_geo_xyz/7,13,2 -0.820209980\nP _part/8/_geo_xyz/7,14,0 0.0\nP _part/8/_geo_xyz/7,14,1 0.0\nP _part/8/_geo_xyz/7,14,2 0.0\nP _part/8/_geo_xyz/7,15,0 0.0\nP _part/8/_geo_xyz/7,15,1 0.0\nP _part/8/_geo_xyz/7,15,2 0.0\nP _part/8/_geo_xyz/7,16,0 0.0\nP _part/8/_geo_xyz/7,16,1 0.0\nP _part/8/_geo_xyz/7,16,2 0.0\nP _part/8/_geo_xyz/7,17,0 0.0\nP _part/8/_geo_xyz/7,17,1 0.0\nP _part/8/_geo_xyz/7,17,2 0.0\nP _part/8/_geo_xyz/7,2,0 -26.246719360\nP _part/8/_geo_xyz/7,2,1 0.227692902\nP _part/8/_geo_xyz/7,2,2 -0.468307078\nP _part/8/_geo_xyz/7,3,0 -26.246719360\nP _part/8/_geo_xyz/7,3,1 0.263917327\nP _part/8/_geo_xyz/7,3,2 -0.018110236\nP _part/8/_geo_xyz/7,4,0 -26.246719360\nP _part/8/_geo_xyz/7,4,1 0.238043293\nP _part/8/_geo_xyz/7,4,2 0.628740191\nP _part/8/_geo_xyz/7,5,0 -26.246719360\nP _part/8/_geo_xyz/7,5,1 0.106581457\nP _part/8/_geo_xyz/7,5,2 1.640419960\nP _part/8/_geo_xyz/7,6,0 -26.246719360\nP _part/8/_geo_xyz/7,6,1 0.0\nP _part/8/_geo_xyz/7,6,2 2.460629940\nP _part/8/_geo_xyz/7,7,0 -26.246719360\nP _part/8/_geo_xyz/7,7,1 0.0\nP _part/8/_geo_xyz/7,7,2 2.460629940\nP _part/8/_geo_xyz/7,8,0 -26.246719360\nP _part/8/_geo_xyz/7,8,1 -0.046339307\nP _part/8/_geo_xyz/7,8,2 1.640419960\nP _part/8/_geo_xyz/7,9,0 -26.246719360\nP _part/8/_geo_xyz/7,9,1 -0.103496060\nP _part/8/_geo_xyz/7,9,2 0.628740191\nP _part/8/_geo_xyz/8,0,0 -26.246719360\nP _part/8/_geo_xyz/8,0,1 0.0\nP _part/8/_geo_xyz/8,0,2 -0.820209980\nP _part/8/_geo_xyz/8,1,0 -26.246719360\nP _part/8/_geo_xyz/8,1,1 0.139720470\nP _part/8/_geo_xyz/8,1,2 -0.716699481\nP _part/8/_geo_xyz/8,10,0 -26.246719360\nP _part/8/_geo_xyz/8,10,1 -0.134547234\nP _part/8/_geo_xyz/8,10,2 -0.069849081\nP _part/8/_geo_xyz/8,11,0 -26.246719360\nP _part/8/_geo_xyz/8,11,1 -0.113846451\nP _part/8/_geo_xyz/8,11,2 -0.597703397\nP _part/8/_geo_xyz/8,12,0 -26.246719360\nP _part/8/_geo_xyz/8,12,1 -0.082795277\nP _part/8/_geo_xyz/8,12,2 -0.747768998\nP _part/8/_geo_xyz/8,13,0 -26.246719360\nP _part/8/_geo_xyz/8,13,1 0.0\nP _part/8/_geo_xyz/8,13,2 -0.820209980\nP _part/8/_geo_xyz/8,14,0 0.0\nP _part/8/_geo_xyz/8,14,1 0.0\nP _part/8/_geo_xyz/8,14,2 0.0\nP _part/8/_geo_xyz/8,15,0 0.0\nP _part/8/_geo_xyz/8,15,1 0.0\nP _part/8/_geo_xyz/8,15,2 0.0\nP _part/8/_geo_xyz/8,16,0 0.0\nP _part/8/_geo_xyz/8,16,1 0.0\nP _part/8/_geo_xyz/8,16,2 0.0\nP _part/8/_geo_xyz/8,17,0 0.0\nP _part/8/_geo_xyz/8,17,1 0.0\nP _part/8/_geo_xyz/8,17,2 0.0\nP _part/8/_geo_xyz/8,2,0 -26.246719360\nP _part/8/_geo_xyz/8,2,1 0.227692902\nP _part/8/_geo_xyz/8,2,2 -0.468307078\nP _part/8/_geo_xyz/8,3,0 -26.246719360\nP _part/8/_geo_xyz/8,3,1 0.263917327\nP _part/8/_geo_xyz/8,3,2 -0.018110236\nP _part/8/_geo_xyz/8,4,0 -26.246719360\nP _part/8/_geo_xyz/8,4,1 0.238043293\nP _part/8/_geo_xyz/8,4,2 0.628740191\nP _part/8/_geo_xyz/8,5,0 -26.246719360\nP _part/8/_geo_xyz/8,5,1 0.106581457\nP _part/8/_geo_xyz/8,5,2 1.640419960\nP _part/8/_geo_xyz/8,6,0 -26.246719360\nP _part/8/_geo_xyz/8,6,1 0.0\nP _part/8/_geo_xyz/8,6,2 2.460629940\nP _part/8/_geo_xyz/8,7,0 -26.246719360\nP _part/8/_geo_xyz/8,7,1 0.0\nP _part/8/_geo_xyz/8,7,2 2.460629940\nP _part/8/_geo_xyz/8,8,0 -26.246719360\nP _part/8/_geo_xyz/8,8,1 -0.046339307\nP _part/8/_geo_xyz/8,8,2 1.640419960\nP _part/8/_geo_xyz/8,9,0 -26.246719360\nP _part/8/_geo_xyz/8,9,1 -0.103496060\nP _part/8/_geo_xyz/8,9,2 0.628740191\nP _part/8/_geo_xyz/9,0,0 -32.808399200\nP _part/8/_geo_xyz/9,0,1 0.0\nP _part/8/_geo_xyz/9,0,2 -0.820209980\nP _part/8/_geo_xyz/9,1,0 -32.808399200\nP _part/8/_geo_xyz/9,1,1 0.139720470\nP _part/8/_geo_xyz/9,1,2 -0.716699481\nP _part/8/_geo_xyz/9,10,0 -32.808399200\nP _part/8/_geo_xyz/9,10,1 -0.134547234\nP _part/8/_geo_xyz/9,10,2 -0.069849081\nP _part/8/_geo_xyz/9,11,0 -32.808399200\nP _part/8/_geo_xyz/9,11,1 -0.113846451\nP _part/8/_geo_xyz/9,11,2 -0.597703397\nP _part/8/_geo_xyz/9,12,0 -32.808399200\nP _part/8/_geo_xyz/9,12,1 -0.082795277\nP _part/8/_geo_xyz/9,12,2 -0.747768998\nP _part/8/_geo_xyz/9,13,0 -32.808399200\nP _part/8/_geo_xyz/9,13,1 0.0\nP _part/8/_geo_xyz/9,13,2 -0.820209980\nP _part/8/_geo_xyz/9,14,0 0.0\nP _part/8/_geo_xyz/9,14,1 0.0\nP _part/8/_geo_xyz/9,14,2 0.0\nP _part/8/_geo_xyz/9,15,0 0.0\nP _part/8/_geo_xyz/9,15,1 0.0\nP _part/8/_geo_xyz/9,15,2 0.0\nP _part/8/_geo_xyz/9,16,0 0.0\nP _part/8/_geo_xyz/9,16,1 0.0\nP _part/8/_geo_xyz/9,16,2 0.0\nP _part/8/_geo_xyz/9,17,0 0.0\nP _part/8/_geo_xyz/9,17,1 0.0\nP _part/8/_geo_xyz/9,17,2 0.0\nP _part/8/_geo_xyz/9,2,0 -32.808399200\nP _part/8/_geo_xyz/9,2,1 0.227692902\nP _part/8/_geo_xyz/9,2,2 -0.468307078\nP _part/8/_geo_xyz/9,3,0 -32.808399200\nP _part/8/_geo_xyz/9,3,1 0.263917327\nP _part/8/_geo_xyz/9,3,2 -0.018110236\nP _part/8/_geo_xyz/9,4,0 -32.808399200\nP _part/8/_geo_xyz/9,4,1 0.238043293\nP _part/8/_geo_xyz/9,4,2 0.628740191\nP _part/8/_geo_xyz/9,5,0 -32.808399200\nP _part/8/_geo_xyz/9,5,1 0.106581457\nP _part/8/_geo_xyz/9,5,2 1.640419960\nP _part/8/_geo_xyz/9,6,0 -32.808399200\nP _part/8/_geo_xyz/9,6,1 0.0\nP _part/8/_geo_xyz/9,6,2 2.460629940\nP _part/8/_geo_xyz/9,7,0 -32.808399200\nP _part/8/_geo_xyz/9,7,1 0.0\nP _part/8/_geo_xyz/9,7,2 2.460629940\nP _part/8/_geo_xyz/9,8,0 -32.808399200\nP _part/8/_geo_xyz/9,8,1 -0.046339307\nP _part/8/_geo_xyz/9,8,2 1.640419960\nP _part/8/_geo_xyz/9,9,0 -32.808399200\nP _part/8/_geo_xyz/9,9,1 -0.103496060\nP _part/8/_geo_xyz/9,9,2 0.628740191\nP _part/8/_geo_xyz/i_count 20\nP _part/8/_geo_xyz/j_count 18\nP _part/8/_geo_xyz/k_count 3\nP _part/8/_locked/0,0 0\nP _part/8/_locked/0,1 0\nP _part/8/_locked/0,10 0\nP _part/8/_locked/0,11 0\nP _part/8/_locked/0,12 0\nP _part/8/_locked/0,13 0\nP _part/8/_locked/0,14 0\nP _part/8/_locked/0,15 0\nP _part/8/_locked/0,16 0\nP _part/8/_locked/0,17 0\nP _part/8/_locked/0,2 0\nP _part/8/_locked/0,3 0\nP _part/8/_locked/0,4 0\nP _part/8/_locked/0,5 0\nP _part/8/_locked/0,6 0\nP _part/8/_locked/0,7 0\nP _part/8/_locked/0,8 0\nP _part/8/_locked/0,9 0\nP _part/8/_locked/1,0 0\nP _part/8/_locked/1,1 0\nP _part/8/_locked/1,10 0\nP _part/8/_locked/1,11 0\nP _part/8/_locked/1,12 0\nP _part/8/_locked/1,13 0\nP _part/8/_locked/1,14 0\nP _part/8/_locked/1,15 0\nP _part/8/_locked/1,16 0\nP _part/8/_locked/1,17 0\nP _part/8/_locked/1,2 0\nP _part/8/_locked/1,3 0\nP _part/8/_locked/1,4 0\nP _part/8/_locked/1,5 0\nP _part/8/_locked/1,6 0\nP _part/8/_locked/1,7 0\nP _part/8/_locked/1,8 0\nP _part/8/_locked/1,9 0\nP _part/8/_locked/10,0 0\nP _part/8/_locked/10,1 0\nP _part/8/_locked/10,10 0\nP _part/8/_locked/10,11 0\nP _part/8/_locked/10,12 0\nP _part/8/_locked/10,13 0\nP _part/8/_locked/10,14 0\nP _part/8/_locked/10,15 0\nP _part/8/_locked/10,16 0\nP _part/8/_locked/10,17 0\nP _part/8/_locked/10,2 0\nP _part/8/_locked/10,3 0\nP _part/8/_locked/10,4 0\nP _part/8/_locked/10,5 0\nP _part/8/_locked/10,6 0\nP _part/8/_locked/10,7 0\nP _part/8/_locked/10,8 0\nP _part/8/_locked/10,9 0\nP _part/8/_locked/11,0 0\nP _part/8/_locked/11,1 0\nP _part/8/_locked/11,10 0\nP _part/8/_locked/11,11 0\nP _part/8/_locked/11,12 0\nP _part/8/_locked/11,13 0\nP _part/8/_locked/11,14 0\nP _part/8/_locked/11,15 0\nP _part/8/_locked/11,16 0\nP _part/8/_locked/11,17 0\nP _part/8/_locked/11,2 0\nP _part/8/_locked/11,3 0\nP _part/8/_locked/11,4 0\nP _part/8/_locked/11,5 0\nP _part/8/_locked/11,6 0\nP _part/8/_locked/11,7 0\nP _part/8/_locked/11,8 0\nP _part/8/_locked/11,9 0\nP _part/8/_locked/12,0 0\nP _part/8/_locked/12,1 0\nP _part/8/_locked/12,10 0\nP _part/8/_locked/12,11 0\nP _part/8/_locked/12,12 0\nP _part/8/_locked/12,13 0\nP _part/8/_locked/12,14 0\nP _part/8/_locked/12,15 0\nP _part/8/_locked/12,16 0\nP _part/8/_locked/12,17 0\nP _part/8/_locked/12,2 0\nP _part/8/_locked/12,3 0\nP _part/8/_locked/12,4 0\nP _part/8/_locked/12,5 0\nP _part/8/_locked/12,6 0\nP _part/8/_locked/12,7 0\nP _part/8/_locked/12,8 0\nP _part/8/_locked/12,9 0\nP _part/8/_locked/13,0 0\nP _part/8/_locked/13,1 0\nP _part/8/_locked/13,10 0\nP _part/8/_locked/13,11 0\nP _part/8/_locked/13,12 0\nP _part/8/_locked/13,13 0\nP _part/8/_locked/13,14 0\nP _part/8/_locked/13,15 0\nP _part/8/_locked/13,16 0\nP _part/8/_locked/13,17 0\nP _part/8/_locked/13,2 0\nP _part/8/_locked/13,3 0\nP _part/8/_locked/13,4 0\nP _part/8/_locked/13,5 0\nP _part/8/_locked/13,6 0\nP _part/8/_locked/13,7 0\nP _part/8/_locked/13,8 0\nP _part/8/_locked/13,9 0\nP _part/8/_locked/14,0 0\nP _part/8/_locked/14,1 0\nP _part/8/_locked/14,10 0\nP _part/8/_locked/14,11 0\nP _part/8/_locked/14,12 0\nP _part/8/_locked/14,13 0\nP _part/8/_locked/14,14 0\nP _part/8/_locked/14,15 0\nP _part/8/_locked/14,16 0\nP _part/8/_locked/14,17 0\nP _part/8/_locked/14,2 0\nP _part/8/_locked/14,3 0\nP _part/8/_locked/14,4 0\nP _part/8/_locked/14,5 0\nP _part/8/_locked/14,6 0\nP _part/8/_locked/14,7 0\nP _part/8/_locked/14,8 0\nP _part/8/_locked/14,9 0\nP _part/8/_locked/15,0 0\nP _part/8/_locked/15,1 0\nP _part/8/_locked/15,10 0\nP _part/8/_locked/15,11 0\nP _part/8/_locked/15,12 0\nP _part/8/_locked/15,13 0\nP _part/8/_locked/15,14 0\nP _part/8/_locked/15,15 0\nP _part/8/_locked/15,16 0\nP _part/8/_locked/15,17 0\nP _part/8/_locked/15,2 0\nP _part/8/_locked/15,3 0\nP _part/8/_locked/15,4 0\nP _part/8/_locked/15,5 0\nP _part/8/_locked/15,6 0\nP _part/8/_locked/15,7 0\nP _part/8/_locked/15,8 0\nP _part/8/_locked/15,9 0\nP _part/8/_locked/16,0 0\nP _part/8/_locked/16,1 0\nP _part/8/_locked/16,10 0\nP _part/8/_locked/16,11 0\nP _part/8/_locked/16,12 0\nP _part/8/_locked/16,13 0\nP _part/8/_locked/16,14 0\nP _part/8/_locked/16,15 0\nP _part/8/_locked/16,16 0\nP _part/8/_locked/16,17 0\nP _part/8/_locked/16,2 0\nP _part/8/_locked/16,3 0\nP _part/8/_locked/16,4 0\nP _part/8/_locked/16,5 0\nP _part/8/_locked/16,6 0\nP _part/8/_locked/16,7 0\nP _part/8/_locked/16,8 0\nP _part/8/_locked/16,9 0\nP _part/8/_locked/17,0 0\nP _part/8/_locked/17,1 0\nP _part/8/_locked/17,10 0\nP _part/8/_locked/17,11 0\nP _part/8/_locked/17,12 0\nP _part/8/_locked/17,13 0\nP _part/8/_locked/17,14 0\nP _part/8/_locked/17,15 0\nP _part/8/_locked/17,16 0\nP _part/8/_locked/17,17 0\nP _part/8/_locked/17,2 0\nP _part/8/_locked/17,3 0\nP _part/8/_locked/17,4 0\nP _part/8/_locked/17,5 0\nP _part/8/_locked/17,6 0\nP _part/8/_locked/17,7 0\nP _part/8/_locked/17,8 0\nP _part/8/_locked/17,9 0\nP _part/8/_locked/18,0 0\nP _part/8/_locked/18,1 0\nP _part/8/_locked/18,10 0\nP _part/8/_locked/18,11 0\nP _part/8/_locked/18,12 0\nP _part/8/_locked/18,13 0\nP _part/8/_locked/18,14 0\nP _part/8/_locked/18,15 0\nP _part/8/_locked/18,16 0\nP _part/8/_locked/18,17 0\nP _part/8/_locked/18,2 0\nP _part/8/_locked/18,3 0\nP _part/8/_locked/18,4 0\nP _part/8/_locked/18,5 0\nP _part/8/_locked/18,6 0\nP _part/8/_locked/18,7 0\nP _part/8/_locked/18,8 0\nP _part/8/_locked/18,9 0\nP _part/8/_locked/19,0 0\nP _part/8/_locked/19,1 0\nP _part/8/_locked/19,10 0\nP _part/8/_locked/19,11 0\nP _part/8/_locked/19,12 0\nP _part/8/_locked/19,13 0\nP _part/8/_locked/19,14 0\nP _part/8/_locked/19,15 0\nP _part/8/_locked/19,16 0\nP _part/8/_locked/19,17 0\nP _part/8/_locked/19,2 0\nP _part/8/_locked/19,3 0\nP _part/8/_locked/19,4 0\nP _part/8/_locked/19,5 0\nP _part/8/_locked/19,6 0\nP _part/8/_locked/19,7 0\nP _part/8/_locked/19,8 0\nP _part/8/_locked/19,9 0\nP _part/8/_locked/2,0 0\nP _part/8/_locked/2,1 0\nP _part/8/_locked/2,10 0\nP _part/8/_locked/2,11 0\nP _part/8/_locked/2,12 0\nP _part/8/_locked/2,13 0\nP _part/8/_locked/2,14 0\nP _part/8/_locked/2,15 0\nP _part/8/_locked/2,16 0\nP _part/8/_locked/2,17 0\nP _part/8/_locked/2,2 0\nP _part/8/_locked/2,3 0\nP _part/8/_locked/2,4 0\nP _part/8/_locked/2,5 0\nP _part/8/_locked/2,6 0\nP _part/8/_locked/2,7 0\nP _part/8/_locked/2,8 0\nP _part/8/_locked/2,9 0\nP _part/8/_locked/3,0 0\nP _part/8/_locked/3,1 0\nP _part/8/_locked/3,10 0\nP _part/8/_locked/3,11 0\nP _part/8/_locked/3,12 0\nP _part/8/_locked/3,13 0\nP _part/8/_locked/3,14 0\nP _part/8/_locked/3,15 0\nP _part/8/_locked/3,16 0\nP _part/8/_locked/3,17 0\nP _part/8/_locked/3,2 0\nP _part/8/_locked/3,3 0\nP _part/8/_locked/3,4 0\nP _part/8/_locked/3,5 0\nP _part/8/_locked/3,6 0\nP _part/8/_locked/3,7 0\nP _part/8/_locked/3,8 0\nP _part/8/_locked/3,9 0\nP _part/8/_locked/4,0 0\nP _part/8/_locked/4,1 0\nP _part/8/_locked/4,10 0\nP _part/8/_locked/4,11 0\nP _part/8/_locked/4,12 0\nP _part/8/_locked/4,13 0\nP _part/8/_locked/4,14 0\nP _part/8/_locked/4,15 0\nP _part/8/_locked/4,16 0\nP _part/8/_locked/4,17 0\nP _part/8/_locked/4,2 0\nP _part/8/_locked/4,3 0\nP _part/8/_locked/4,4 0\nP _part/8/_locked/4,5 0\nP _part/8/_locked/4,6 0\nP _part/8/_locked/4,7 0\nP _part/8/_locked/4,8 0\nP _part/8/_locked/4,9 0\nP _part/8/_locked/5,0 0\nP _part/8/_locked/5,1 0\nP _part/8/_locked/5,10 0\nP _part/8/_locked/5,11 0\nP _part/8/_locked/5,12 0\nP _part/8/_locked/5,13 0\nP _part/8/_locked/5,14 0\nP _part/8/_locked/5,15 0\nP _part/8/_locked/5,16 0\nP _part/8/_locked/5,17 0\nP _part/8/_locked/5,2 0\nP _part/8/_locked/5,3 0\nP _part/8/_locked/5,4 0\nP _part/8/_locked/5,5 0\nP _part/8/_locked/5,6 0\nP _part/8/_locked/5,7 0\nP _part/8/_locked/5,8 0\nP _part/8/_locked/5,9 0\nP _part/8/_locked/6,0 0\nP _part/8/_locked/6,1 0\nP _part/8/_locked/6,10 0\nP _part/8/_locked/6,11 0\nP _part/8/_locked/6,12 0\nP _part/8/_locked/6,13 0\nP _part/8/_locked/6,14 0\nP _part/8/_locked/6,15 0\nP _part/8/_locked/6,16 0\nP _part/8/_locked/6,17 0\nP _part/8/_locked/6,2 0\nP _part/8/_locked/6,3 0\nP _part/8/_locked/6,4 0\nP _part/8/_locked/6,5 0\nP _part/8/_locked/6,6 0\nP _part/8/_locked/6,7 0\nP _part/8/_locked/6,8 0\nP _part/8/_locked/6,9 0\nP _part/8/_locked/7,0 0\nP _part/8/_locked/7,1 0\nP _part/8/_locked/7,10 0\nP _part/8/_locked/7,11 0\nP _part/8/_locked/7,12 0\nP _part/8/_locked/7,13 0\nP _part/8/_locked/7,14 0\nP _part/8/_locked/7,15 0\nP _part/8/_locked/7,16 0\nP _part/8/_locked/7,17 0\nP _part/8/_locked/7,2 0\nP _part/8/_locked/7,3 0\nP _part/8/_locked/7,4 0\nP _part/8/_locked/7,5 0\nP _part/8/_locked/7,6 0\nP _part/8/_locked/7,7 0\nP _part/8/_locked/7,8 0\nP _part/8/_locked/7,9 0\nP _part/8/_locked/8,0 0\nP _part/8/_locked/8,1 0\nP _part/8/_locked/8,10 0\nP _part/8/_locked/8,11 0\nP _part/8/_locked/8,12 0\nP _part/8/_locked/8,13 0\nP _part/8/_locked/8,14 0\nP _part/8/_locked/8,15 0\nP _part/8/_locked/8,16 0\nP _part/8/_locked/8,17 0\nP _part/8/_locked/8,2 0\nP _part/8/_locked/8,3 0\nP _part/8/_locked/8,4 0\nP _part/8/_locked/8,5 0\nP _part/8/_locked/8,6 0\nP _part/8/_locked/8,7 0\nP _part/8/_locked/8,8 0\nP _part/8/_locked/8,9 0\nP _part/8/_locked/9,0 0\nP _part/8/_locked/9,1 0\nP _part/8/_locked/9,10 0\nP _part/8/_locked/9,11 0\nP _part/8/_locked/9,12 0\nP _part/8/_locked/9,13 0\nP _part/8/_locked/9,14 0\nP _part/8/_locked/9,15 0\nP _part/8/_locked/9,16 0\nP _part/8/_locked/9,17 0\nP _part/8/_locked/9,2 0\nP _part/8/_locked/9,3 0\nP _part/8/_locked/9,4 0\nP _part/8/_locked/9,5 0\nP _part/8/_locked/9,6 0\nP _part/8/_locked/9,7 0\nP _part/8/_locked/9,8 0\nP _part/8/_locked/9,9 0\nP _part/8/_locked/i_count 20\nP _part/8/_locked/j_count 18\nP _part/8/_part_cd 0.075000003\nP _part/8/_part_phi 0.0\nP _part/8/_part_psi 0.0\nP _part/8/_part_rad 2.0\nP _part/8/_part_specs_eq 1\nP _part/8/_part_specs_invis 0\nP _part/8/_part_specs_unused1 0\nP _part/8/_part_specs_unused2 0\nP _part/8/_part_tex 1\nP _part/8/_part_the 0.0\nP _part/8/_part_x -0.0\nP _part/8/_part_y 0.0\nP _part/8/_part_z 0.0\nP _part/8/_patt_con 0\nP _part/8/_patt_prt 0\nP _part/8/_patt_rat 0.0\nP _part/8/_r_dim 14\nP _part/8/_s_dim 16\nP _part/8/_scon 37.676635742\nP _part/8/_top_s1 0.755999982\nP _part/8/_top_s2 1.0\nP _part/8/_top_t1 0.0\nP _part/8/_top_t2 0.384000003\nP _part/85/_aero_x_os 0.0\nP _part/85/_aero_y_os 0.0\nP _part/85/_aero_z_os 0.0\nP _part/85/_area_frnt 0.0\nP _part/85/_area_side 0.0\nP _part/85/_area_vert 0.0\nP _part/85/_bot_s1 0.632812500\nP _part/85/_bot_s2 0.753906250\nP _part/85/_bot_t1 0.254882812\nP _part/85/_bot_t2 0.295898438\nP _part/85/_damp 1.883831739\nP _part/85/_geo_xyz/0,0,0 0.0\nP _part/85/_geo_xyz/0,0,1 2.0\nP _part/85/_geo_xyz/0,0,2 0.0\nP _part/85/_geo_xyz/0,1,0 1.414213538\nP _part/85/_geo_xyz/0,1,1 1.414213538\nP _part/85/_geo_xyz/0,1,2 0.0\nP _part/85/_geo_xyz/0,10,0 0.0\nP _part/85/_geo_xyz/0,10,1 0.0\nP _part/85/_geo_xyz/0,10,2 0.0\nP _part/85/_geo_xyz/0,11,0 0.0\nP _part/85/_geo_xyz/0,11,1 0.0\nP _part/85/_geo_xyz/0,11,2 0.0\nP _part/85/_geo_xyz/0,12,0 0.0\nP _part/85/_geo_xyz/0,12,1 0.0\nP _part/85/_geo_xyz/0,12,2 0.0\nP _part/85/_geo_xyz/0,13,0 0.0\nP _part/85/_geo_xyz/0,13,1 0.0\nP _part/85/_geo_xyz/0,13,2 0.0\nP _part/85/_geo_xyz/0,14,0 0.0\nP _part/85/_geo_xyz/0,14,1 0.0\nP _part/85/_geo_xyz/0,14,2 0.0\nP _part/85/_geo_xyz/0,15,0 0.0\nP _part/85/_geo_xyz/0,15,1 0.0\nP _part/85/_geo_xyz/0,15,2 0.0\nP _part/85/_geo_xyz/0,16,0 0.0\nP _part/85/_geo_xyz/0,16,1 0.0\nP _part/85/_geo_xyz/0,16,2 0.0\nP _part/85/_geo_xyz/0,17,0 0.0\nP _part/85/_geo_xyz/0,17,1 0.0\nP _part/85/_geo_xyz/0,17,2 0.0\nP _part/85/_geo_xyz/0,2,0 2.0\nP _part/85/_geo_xyz/0,2,1 -0.000000087\nP _part/85/_geo_xyz/0,2,2 0.0\nP _part/85/_geo_xyz/0,3,0 1.414213538\nP _part/85/_geo_xyz/0,3,1 -1.414213538\nP _part/85/_geo_xyz/0,3,2 0.0\nP _part/85/_geo_xyz/0,4,0 -0.000000175\nP _part/85/_geo_xyz/0,4,1 -2.0\nP _part/85/_geo_xyz/0,4,2 0.0\nP _part/85/_geo_xyz/0,5,0 -0.000000175\nP _part/85/_geo_xyz/0,5,1 -2.0\nP _part/85/_geo_xyz/0,5,2 0.0\nP _part/85/_geo_xyz/0,6,0 -1.414213777\nP _part/85/_geo_xyz/0,6,1 -1.414213300\nP _part/85/_geo_xyz/0,6,2 0.0\nP _part/85/_geo_xyz/0,7,0 -2.0\nP _part/85/_geo_xyz/0,7,1 0.000000024\nP _part/85/_geo_xyz/0,7,2 0.0\nP _part/85/_geo_xyz/0,8,0 -1.414213061\nP _part/85/_geo_xyz/0,8,1 1.414214015\nP _part/85/_geo_xyz/0,8,2 0.0\nP _part/85/_geo_xyz/0,9,0 0.000000350\nP _part/85/_geo_xyz/0,9,1 2.0\nP _part/85/_geo_xyz/0,9,2 0.0\nP _part/85/_geo_xyz/1,0,0 0.0\nP _part/85/_geo_xyz/1,0,1 2.0\nP _part/85/_geo_xyz/1,0,2 1.0\nP _part/85/_geo_xyz/1,1,0 1.414213538\nP _part/85/_geo_xyz/1,1,1 1.414213538\nP _part/85/_geo_xyz/1,1,2 1.0\nP _part/85/_geo_xyz/1,10,0 0.0\nP _part/85/_geo_xyz/1,10,1 0.0\nP _part/85/_geo_xyz/1,10,2 0.0\nP _part/85/_geo_xyz/1,11,0 0.0\nP _part/85/_geo_xyz/1,11,1 0.0\nP _part/85/_geo_xyz/1,11,2 0.0\nP _part/85/_geo_xyz/1,12,0 0.0\nP _part/85/_geo_xyz/1,12,1 0.0\nP _part/85/_geo_xyz/1,12,2 0.0\nP _part/85/_geo_xyz/1,13,0 0.0\nP _part/85/_geo_xyz/1,13,1 0.0\nP _part/85/_geo_xyz/1,13,2 0.0\nP _part/85/_geo_xyz/1,14,0 0.0\nP _part/85/_geo_xyz/1,14,1 0.0\nP _part/85/_geo_xyz/1,14,2 0.0\nP _part/85/_geo_xyz/1,15,0 0.0\nP _part/85/_geo_xyz/1,15,1 0.0\nP _part/85/_geo_xyz/1,15,2 0.0\nP _part/85/_geo_xyz/1,16,0 0.0\nP _part/85/_geo_xyz/1,16,1 0.0\nP _part/85/_geo_xyz/1,16,2 0.0\nP _part/85/_geo_xyz/1,17,0 0.0\nP _part/85/_geo_xyz/1,17,1 0.0\nP _part/85/_geo_xyz/1,17,2 0.0\nP _part/85/_geo_xyz/1,2,0 2.0\nP _part/85/_geo_xyz/1,2,1 -0.000000087\nP _part/85/_geo_xyz/1,2,2 1.0\nP _part/85/_geo_xyz/1,3,0 1.414213538\nP _part/85/_geo_xyz/1,3,1 -1.414213538\nP _part/85/_geo_xyz/1,3,2 1.0\nP _part/85/_geo_xyz/1,4,0 -0.000000175\nP _part/85/_geo_xyz/1,4,1 -2.0\nP _part/85/_geo_xyz/1,4,2 1.0\nP _part/85/_geo_xyz/1,5,0 -0.000000175\nP _part/85/_geo_xyz/1,5,1 -2.0\nP _part/85/_geo_xyz/1,5,2 1.0\nP _part/85/_geo_xyz/1,6,0 -1.414213777\nP _part/85/_geo_xyz/1,6,1 -1.414213300\nP _part/85/_geo_xyz/1,6,2 1.0\nP _part/85/_geo_xyz/1,7,0 -2.0\nP _part/85/_geo_xyz/1,7,1 0.000000024\nP _part/85/_geo_xyz/1,7,2 1.0\nP _part/85/_geo_xyz/1,8,0 -1.414213061\nP _part/85/_geo_xyz/1,8,1 1.414214015\nP _part/85/_geo_xyz/1,8,2 1.0\nP _part/85/_geo_xyz/1,9,0 0.000000350\nP _part/85/_geo_xyz/1,9,1 2.0\nP _part/85/_geo_xyz/1,9,2 1.0\nP _part/85/_geo_xyz/10,0,0 0.0\nP _part/85/_geo_xyz/10,0,1 0.0\nP _part/85/_geo_xyz/10,0,2 0.0\nP _part/85/_geo_xyz/10,1,0 0.0\nP _part/85/_geo_xyz/10,1,1 0.0\nP _part/85/_geo_xyz/10,1,2 0.0\nP _part/85/_geo_xyz/10,10,0 0.0\nP _part/85/_geo_xyz/10,10,1 0.0\nP _part/85/_geo_xyz/10,10,2 0.0\nP _part/85/_geo_xyz/10,11,0 0.0\nP _part/85/_geo_xyz/10,11,1 0.0\nP _part/85/_geo_xyz/10,11,2 0.0\nP _part/85/_geo_xyz/10,12,0 0.0\nP _part/85/_geo_xyz/10,12,1 0.0\nP _part/85/_geo_xyz/10,12,2 0.0\nP _part/85/_geo_xyz/10,13,0 0.0\nP _part/85/_geo_xyz/10,13,1 0.0\nP _part/85/_geo_xyz/10,13,2 0.0\nP _part/85/_geo_xyz/10,14,0 0.0\nP _part/85/_geo_xyz/10,14,1 0.0\nP _part/85/_geo_xyz/10,14,2 0.0\nP _part/85/_geo_xyz/10,15,0 0.0\nP _part/85/_geo_xyz/10,15,1 0.0\nP _part/85/_geo_xyz/10,15,2 0.0\nP _part/85/_geo_xyz/10,16,0 0.0\nP _part/85/_geo_xyz/10,16,1 0.0\nP _part/85/_geo_xyz/10,16,2 0.0\nP _part/85/_geo_xyz/10,17,0 0.0\nP _part/85/_geo_xyz/10,17,1 0.0\nP _part/85/_geo_xyz/10,17,2 0.0\nP _part/85/_geo_xyz/10,2,0 0.0\nP _part/85/_geo_xyz/10,2,1 0.0\nP _part/85/_geo_xyz/10,2,2 0.0\nP _part/85/_geo_xyz/10,3,0 0.0\nP _part/85/_geo_xyz/10,3,1 0.0\nP _part/85/_geo_xyz/10,3,2 0.0\nP _part/85/_geo_xyz/10,4,0 0.0\nP _part/85/_geo_xyz/10,4,1 0.0\nP _part/85/_geo_xyz/10,4,2 0.0\nP _part/85/_geo_xyz/10,5,0 0.0\nP _part/85/_geo_xyz/10,5,1 0.0\nP _part/85/_geo_xyz/10,5,2 0.0\nP _part/85/_geo_xyz/10,6,0 0.0\nP _part/85/_geo_xyz/10,6,1 0.0\nP _part/85/_geo_xyz/10,6,2 0.0\nP _part/85/_geo_xyz/10,7,0 0.0\nP _part/85/_geo_xyz/10,7,1 0.0\nP _part/85/_geo_xyz/10,7,2 0.0\nP _part/85/_geo_xyz/10,8,0 0.0\nP _part/85/_geo_xyz/10,8,1 0.0\nP _part/85/_geo_xyz/10,8,2 0.0\nP _part/85/_geo_xyz/10,9,0 0.0\nP _part/85/_geo_xyz/10,9,1 0.0\nP _part/85/_geo_xyz/10,9,2 0.0\nP _part/85/_geo_xyz/11,0,0 0.0\nP _part/85/_geo_xyz/11,0,1 0.0\nP _part/85/_geo_xyz/11,0,2 0.0\nP _part/85/_geo_xyz/11,1,0 0.0\nP _part/85/_geo_xyz/11,1,1 0.0\nP _part/85/_geo_xyz/11,1,2 0.0\nP _part/85/_geo_xyz/11,10,0 0.0\nP _part/85/_geo_xyz/11,10,1 0.0\nP _part/85/_geo_xyz/11,10,2 0.0\nP _part/85/_geo_xyz/11,11,0 0.0\nP _part/85/_geo_xyz/11,11,1 0.0\nP _part/85/_geo_xyz/11,11,2 0.0\nP _part/85/_geo_xyz/11,12,0 0.0\nP _part/85/_geo_xyz/11,12,1 0.0\nP _part/85/_geo_xyz/11,12,2 0.0\nP _part/85/_geo_xyz/11,13,0 0.0\nP _part/85/_geo_xyz/11,13,1 0.0\nP _part/85/_geo_xyz/11,13,2 0.0\nP _part/85/_geo_xyz/11,14,0 0.0\nP _part/85/_geo_xyz/11,14,1 0.0\nP _part/85/_geo_xyz/11,14,2 0.0\nP _part/85/_geo_xyz/11,15,0 0.0\nP _part/85/_geo_xyz/11,15,1 0.0\nP _part/85/_geo_xyz/11,15,2 0.0\nP _part/85/_geo_xyz/11,16,0 0.0\nP _part/85/_geo_xyz/11,16,1 0.0\nP _part/85/_geo_xyz/11,16,2 0.0\nP _part/85/_geo_xyz/11,17,0 0.0\nP _part/85/_geo_xyz/11,17,1 0.0\nP _part/85/_geo_xyz/11,17,2 0.0\nP _part/85/_geo_xyz/11,2,0 0.0\nP _part/85/_geo_xyz/11,2,1 0.0\nP _part/85/_geo_xyz/11,2,2 0.0\nP _part/85/_geo_xyz/11,3,0 0.0\nP _part/85/_geo_xyz/11,3,1 0.0\nP _part/85/_geo_xyz/11,3,2 0.0\nP _part/85/_geo_xyz/11,4,0 0.0\nP _part/85/_geo_xyz/11,4,1 0.0\nP _part/85/_geo_xyz/11,4,2 0.0\nP _part/85/_geo_xyz/11,5,0 0.0\nP _part/85/_geo_xyz/11,5,1 0.0\nP _part/85/_geo_xyz/11,5,2 0.0\nP _part/85/_geo_xyz/11,6,0 0.0\nP _part/85/_geo_xyz/11,6,1 0.0\nP _part/85/_geo_xyz/11,6,2 0.0\nP _part/85/_geo_xyz/11,7,0 0.0\nP _part/85/_geo_xyz/11,7,1 0.0\nP _part/85/_geo_xyz/11,7,2 0.0\nP _part/85/_geo_xyz/11,8,0 0.0\nP _part/85/_geo_xyz/11,8,1 0.0\nP _part/85/_geo_xyz/11,8,2 0.0\nP _part/85/_geo_xyz/11,9,0 0.0\nP _part/85/_geo_xyz/11,9,1 0.0\nP _part/85/_geo_xyz/11,9,2 0.0\nP _part/85/_geo_xyz/12,0,0 0.0\nP _part/85/_geo_xyz/12,0,1 0.0\nP _part/85/_geo_xyz/12,0,2 0.0\nP _part/85/_geo_xyz/12,1,0 0.0\nP _part/85/_geo_xyz/12,1,1 0.0\nP _part/85/_geo_xyz/12,1,2 0.0\nP _part/85/_geo_xyz/12,10,0 0.0\nP _part/85/_geo_xyz/12,10,1 0.0\nP _part/85/_geo_xyz/12,10,2 0.0\nP _part/85/_geo_xyz/12,11,0 0.0\nP _part/85/_geo_xyz/12,11,1 0.0\nP _part/85/_geo_xyz/12,11,2 0.0\nP _part/85/_geo_xyz/12,12,0 0.0\nP _part/85/_geo_xyz/12,12,1 0.0\nP _part/85/_geo_xyz/12,12,2 0.0\nP _part/85/_geo_xyz/12,13,0 0.0\nP _part/85/_geo_xyz/12,13,1 0.0\nP _part/85/_geo_xyz/12,13,2 0.0\nP _part/85/_geo_xyz/12,14,0 0.0\nP _part/85/_geo_xyz/12,14,1 0.0\nP _part/85/_geo_xyz/12,14,2 0.0\nP _part/85/_geo_xyz/12,15,0 0.0\nP _part/85/_geo_xyz/12,15,1 0.0\nP _part/85/_geo_xyz/12,15,2 0.0\nP _part/85/_geo_xyz/12,16,0 0.0\nP _part/85/_geo_xyz/12,16,1 0.0\nP _part/85/_geo_xyz/12,16,2 0.0\nP _part/85/_geo_xyz/12,17,0 0.0\nP _part/85/_geo_xyz/12,17,1 0.0\nP _part/85/_geo_xyz/12,17,2 0.0\nP _part/85/_geo_xyz/12,2,0 0.0\nP _part/85/_geo_xyz/12,2,1 0.0\nP _part/85/_geo_xyz/12,2,2 0.0\nP _part/85/_geo_xyz/12,3,0 0.0\nP _part/85/_geo_xyz/12,3,1 0.0\nP _part/85/_geo_xyz/12,3,2 0.0\nP _part/85/_geo_xyz/12,4,0 0.0\nP _part/85/_geo_xyz/12,4,1 0.0\nP _part/85/_geo_xyz/12,4,2 0.0\nP _part/85/_geo_xyz/12,5,0 0.0\nP _part/85/_geo_xyz/12,5,1 0.0\nP _part/85/_geo_xyz/12,5,2 0.0\nP _part/85/_geo_xyz/12,6,0 0.0\nP _part/85/_geo_xyz/12,6,1 0.0\nP _part/85/_geo_xyz/12,6,2 0.0\nP _part/85/_geo_xyz/12,7,0 0.0\nP _part/85/_geo_xyz/12,7,1 0.0\nP _part/85/_geo_xyz/12,7,2 0.0\nP _part/85/_geo_xyz/12,8,0 0.0\nP _part/85/_geo_xyz/12,8,1 0.0\nP _part/85/_geo_xyz/12,8,2 0.0\nP _part/85/_geo_xyz/12,9,0 0.0\nP _part/85/_geo_xyz/12,9,1 0.0\nP _part/85/_geo_xyz/12,9,2 0.0\nP _part/85/_geo_xyz/13,0,0 0.0\nP _part/85/_geo_xyz/13,0,1 0.0\nP _part/85/_geo_xyz/13,0,2 0.0\nP _part/85/_geo_xyz/13,1,0 0.0\nP _part/85/_geo_xyz/13,1,1 0.0\nP _part/85/_geo_xyz/13,1,2 0.0\nP _part/85/_geo_xyz/13,10,0 0.0\nP _part/85/_geo_xyz/13,10,1 0.0\nP _part/85/_geo_xyz/13,10,2 0.0\nP _part/85/_geo_xyz/13,11,0 0.0\nP _part/85/_geo_xyz/13,11,1 0.0\nP _part/85/_geo_xyz/13,11,2 0.0\nP _part/85/_geo_xyz/13,12,0 0.0\nP _part/85/_geo_xyz/13,12,1 0.0\nP _part/85/_geo_xyz/13,12,2 0.0\nP _part/85/_geo_xyz/13,13,0 0.0\nP _part/85/_geo_xyz/13,13,1 0.0\nP _part/85/_geo_xyz/13,13,2 0.0\nP _part/85/_geo_xyz/13,14,0 0.0\nP _part/85/_geo_xyz/13,14,1 0.0\nP _part/85/_geo_xyz/13,14,2 0.0\nP _part/85/_geo_xyz/13,15,0 0.0\nP _part/85/_geo_xyz/13,15,1 0.0\nP _part/85/_geo_xyz/13,15,2 0.0\nP _part/85/_geo_xyz/13,16,0 0.0\nP _part/85/_geo_xyz/13,16,1 0.0\nP _part/85/_geo_xyz/13,16,2 0.0\nP _part/85/_geo_xyz/13,17,0 0.0\nP _part/85/_geo_xyz/13,17,1 0.0\nP _part/85/_geo_xyz/13,17,2 0.0\nP _part/85/_geo_xyz/13,2,0 0.0\nP _part/85/_geo_xyz/13,2,1 0.0\nP _part/85/_geo_xyz/13,2,2 0.0\nP _part/85/_geo_xyz/13,3,0 0.0\nP _part/85/_geo_xyz/13,3,1 0.0\nP _part/85/_geo_xyz/13,3,2 0.0\nP _part/85/_geo_xyz/13,4,0 0.0\nP _part/85/_geo_xyz/13,4,1 0.0\nP _part/85/_geo_xyz/13,4,2 0.0\nP _part/85/_geo_xyz/13,5,0 0.0\nP _part/85/_geo_xyz/13,5,1 0.0\nP _part/85/_geo_xyz/13,5,2 0.0\nP _part/85/_geo_xyz/13,6,0 0.0\nP _part/85/_geo_xyz/13,6,1 0.0\nP _part/85/_geo_xyz/13,6,2 0.0\nP _part/85/_geo_xyz/13,7,0 0.0\nP _part/85/_geo_xyz/13,7,1 0.0\nP _part/85/_geo_xyz/13,7,2 0.0\nP _part/85/_geo_xyz/13,8,0 0.0\nP _part/85/_geo_xyz/13,8,1 0.0\nP _part/85/_geo_xyz/13,8,2 0.0\nP _part/85/_geo_xyz/13,9,0 0.0\nP _part/85/_geo_xyz/13,9,1 0.0\nP _part/85/_geo_xyz/13,9,2 0.0\nP _part/85/_geo_xyz/14,0,0 0.0\nP _part/85/_geo_xyz/14,0,1 0.0\nP _part/85/_geo_xyz/14,0,2 0.0\nP _part/85/_geo_xyz/14,1,0 0.0\nP _part/85/_geo_xyz/14,1,1 0.0\nP _part/85/_geo_xyz/14,1,2 0.0\nP _part/85/_geo_xyz/14,10,0 0.0\nP _part/85/_geo_xyz/14,10,1 0.0\nP _part/85/_geo_xyz/14,10,2 0.0\nP _part/85/_geo_xyz/14,11,0 0.0\nP _part/85/_geo_xyz/14,11,1 0.0\nP _part/85/_geo_xyz/14,11,2 0.0\nP _part/85/_geo_xyz/14,12,0 0.0\nP _part/85/_geo_xyz/14,12,1 0.0\nP _part/85/_geo_xyz/14,12,2 0.0\nP _part/85/_geo_xyz/14,13,0 0.0\nP _part/85/_geo_xyz/14,13,1 0.0\nP _part/85/_geo_xyz/14,13,2 0.0\nP _part/85/_geo_xyz/14,14,0 0.0\nP _part/85/_geo_xyz/14,14,1 0.0\nP _part/85/_geo_xyz/14,14,2 0.0\nP _part/85/_geo_xyz/14,15,0 0.0\nP _part/85/_geo_xyz/14,15,1 0.0\nP _part/85/_geo_xyz/14,15,2 0.0\nP _part/85/_geo_xyz/14,16,0 0.0\nP _part/85/_geo_xyz/14,16,1 0.0\nP _part/85/_geo_xyz/14,16,2 0.0\nP _part/85/_geo_xyz/14,17,0 0.0\nP _part/85/_geo_xyz/14,17,1 0.0\nP _part/85/_geo_xyz/14,17,2 0.0\nP _part/85/_geo_xyz/14,2,0 0.0\nP _part/85/_geo_xyz/14,2,1 0.0\nP _part/85/_geo_xyz/14,2,2 0.0\nP _part/85/_geo_xyz/14,3,0 0.0\nP _part/85/_geo_xyz/14,3,1 0.0\nP _part/85/_geo_xyz/14,3,2 0.0\nP _part/85/_geo_xyz/14,4,0 0.0\nP _part/85/_geo_xyz/14,4,1 0.0\nP _part/85/_geo_xyz/14,4,2 0.0\nP _part/85/_geo_xyz/14,5,0 0.0\nP _part/85/_geo_xyz/14,5,1 0.0\nP _part/85/_geo_xyz/14,5,2 0.0\nP _part/85/_geo_xyz/14,6,0 0.0\nP _part/85/_geo_xyz/14,6,1 0.0\nP _part/85/_geo_xyz/14,6,2 0.0\nP _part/85/_geo_xyz/14,7,0 0.0\nP _part/85/_geo_xyz/14,7,1 0.0\nP _part/85/_geo_xyz/14,7,2 0.0\nP _part/85/_geo_xyz/14,8,0 0.0\nP _part/85/_geo_xyz/14,8,1 0.0\nP _part/85/_geo_xyz/14,8,2 0.0\nP _part/85/_geo_xyz/14,9,0 0.0\nP _part/85/_geo_xyz/14,9,1 0.0\nP _part/85/_geo_xyz/14,9,2 0.0\nP _part/85/_geo_xyz/15,0,0 0.0\nP _part/85/_geo_xyz/15,0,1 0.0\nP _part/85/_geo_xyz/15,0,2 0.0\nP _part/85/_geo_xyz/15,1,0 0.0\nP _part/85/_geo_xyz/15,1,1 0.0\nP _part/85/_geo_xyz/15,1,2 0.0\nP _part/85/_geo_xyz/15,10,0 0.0\nP _part/85/_geo_xyz/15,10,1 0.0\nP _part/85/_geo_xyz/15,10,2 0.0\nP _part/85/_geo_xyz/15,11,0 0.0\nP _part/85/_geo_xyz/15,11,1 0.0\nP _part/85/_geo_xyz/15,11,2 0.0\nP _part/85/_geo_xyz/15,12,0 0.0\nP _part/85/_geo_xyz/15,12,1 0.0\nP _part/85/_geo_xyz/15,12,2 0.0\nP _part/85/_geo_xyz/15,13,0 0.0\nP _part/85/_geo_xyz/15,13,1 0.0\nP _part/85/_geo_xyz/15,13,2 0.0\nP _part/85/_geo_xyz/15,14,0 0.0\nP _part/85/_geo_xyz/15,14,1 0.0\nP _part/85/_geo_xyz/15,14,2 0.0\nP _part/85/_geo_xyz/15,15,0 0.0\nP _part/85/_geo_xyz/15,15,1 0.0\nP _part/85/_geo_xyz/15,15,2 0.0\nP _part/85/_geo_xyz/15,16,0 0.0\nP _part/85/_geo_xyz/15,16,1 0.0\nP _part/85/_geo_xyz/15,16,2 0.0\nP _part/85/_geo_xyz/15,17,0 0.0\nP _part/85/_geo_xyz/15,17,1 0.0\nP _part/85/_geo_xyz/15,17,2 0.0\nP _part/85/_geo_xyz/15,2,0 0.0\nP _part/85/_geo_xyz/15,2,1 0.0\nP _part/85/_geo_xyz/15,2,2 0.0\nP _part/85/_geo_xyz/15,3,0 0.0\nP _part/85/_geo_xyz/15,3,1 0.0\nP _part/85/_geo_xyz/15,3,2 0.0\nP _part/85/_geo_xyz/15,4,0 0.0\nP _part/85/_geo_xyz/15,4,1 0.0\nP _part/85/_geo_xyz/15,4,2 0.0\nP _part/85/_geo_xyz/15,5,0 0.0\nP _part/85/_geo_xyz/15,5,1 0.0\nP _part/85/_geo_xyz/15,5,2 0.0\nP _part/85/_geo_xyz/15,6,0 0.0\nP _part/85/_geo_xyz/15,6,1 0.0\nP _part/85/_geo_xyz/15,6,2 0.0\nP _part/85/_geo_xyz/15,7,0 0.0\nP _part/85/_geo_xyz/15,7,1 0.0\nP _part/85/_geo_xyz/15,7,2 0.0\nP _part/85/_geo_xyz/15,8,0 0.0\nP _part/85/_geo_xyz/15,8,1 0.0\nP _part/85/_geo_xyz/15,8,2 0.0\nP _part/85/_geo_xyz/15,9,0 0.0\nP _part/85/_geo_xyz/15,9,1 0.0\nP _part/85/_geo_xyz/15,9,2 0.0\nP _part/85/_geo_xyz/16,0,0 0.0\nP _part/85/_geo_xyz/16,0,1 0.0\nP _part/85/_geo_xyz/16,0,2 0.0\nP _part/85/_geo_xyz/16,1,0 0.0\nP _part/85/_geo_xyz/16,1,1 0.0\nP _part/85/_geo_xyz/16,1,2 0.0\nP _part/85/_geo_xyz/16,10,0 0.0\nP _part/85/_geo_xyz/16,10,1 0.0\nP _part/85/_geo_xyz/16,10,2 0.0\nP _part/85/_geo_xyz/16,11,0 0.0\nP _part/85/_geo_xyz/16,11,1 0.0\nP _part/85/_geo_xyz/16,11,2 0.0\nP _part/85/_geo_xyz/16,12,0 0.0\nP _part/85/_geo_xyz/16,12,1 0.0\nP _part/85/_geo_xyz/16,12,2 0.0\nP _part/85/_geo_xyz/16,13,0 0.0\nP _part/85/_geo_xyz/16,13,1 0.0\nP _part/85/_geo_xyz/16,13,2 0.0\nP _part/85/_geo_xyz/16,14,0 0.0\nP _part/85/_geo_xyz/16,14,1 0.0\nP _part/85/_geo_xyz/16,14,2 0.0\nP _part/85/_geo_xyz/16,15,0 0.0\nP _part/85/_geo_xyz/16,15,1 0.0\nP _part/85/_geo_xyz/16,15,2 0.0\nP _part/85/_geo_xyz/16,16,0 0.0\nP _part/85/_geo_xyz/16,16,1 0.0\nP _part/85/_geo_xyz/16,16,2 0.0\nP _part/85/_geo_xyz/16,17,0 0.0\nP _part/85/_geo_xyz/16,17,1 0.0\nP _part/85/_geo_xyz/16,17,2 0.0\nP _part/85/_geo_xyz/16,2,0 0.0\nP _part/85/_geo_xyz/16,2,1 0.0\nP _part/85/_geo_xyz/16,2,2 0.0\nP _part/85/_geo_xyz/16,3,0 0.0\nP _part/85/_geo_xyz/16,3,1 0.0\nP _part/85/_geo_xyz/16,3,2 0.0\nP _part/85/_geo_xyz/16,4,0 0.0\nP _part/85/_geo_xyz/16,4,1 0.0\nP _part/85/_geo_xyz/16,4,2 0.0\nP _part/85/_geo_xyz/16,5,0 0.0\nP _part/85/_geo_xyz/16,5,1 0.0\nP _part/85/_geo_xyz/16,5,2 0.0\nP _part/85/_geo_xyz/16,6,0 0.0\nP _part/85/_geo_xyz/16,6,1 0.0\nP _part/85/_geo_xyz/16,6,2 0.0\nP _part/85/_geo_xyz/16,7,0 0.0\nP _part/85/_geo_xyz/16,7,1 0.0\nP _part/85/_geo_xyz/16,7,2 0.0\nP _part/85/_geo_xyz/16,8,0 0.0\nP _part/85/_geo_xyz/16,8,1 0.0\nP _part/85/_geo_xyz/16,8,2 0.0\nP _part/85/_geo_xyz/16,9,0 0.0\nP _part/85/_geo_xyz/16,9,1 0.0\nP _part/85/_geo_xyz/16,9,2 0.0\nP _part/85/_geo_xyz/17,0,0 0.0\nP _part/85/_geo_xyz/17,0,1 0.0\nP _part/85/_geo_xyz/17,0,2 0.0\nP _part/85/_geo_xyz/17,1,0 0.0\nP _part/85/_geo_xyz/17,1,1 0.0\nP _part/85/_geo_xyz/17,1,2 0.0\nP _part/85/_geo_xyz/17,10,0 0.0\nP _part/85/_geo_xyz/17,10,1 0.0\nP _part/85/_geo_xyz/17,10,2 0.0\nP _part/85/_geo_xyz/17,11,0 0.0\nP _part/85/_geo_xyz/17,11,1 0.0\nP _part/85/_geo_xyz/17,11,2 0.0\nP _part/85/_geo_xyz/17,12,0 0.0\nP _part/85/_geo_xyz/17,12,1 0.0\nP _part/85/_geo_xyz/17,12,2 0.0\nP _part/85/_geo_xyz/17,13,0 0.0\nP _part/85/_geo_xyz/17,13,1 0.0\nP _part/85/_geo_xyz/17,13,2 0.0\nP _part/85/_geo_xyz/17,14,0 0.0\nP _part/85/_geo_xyz/17,14,1 0.0\nP _part/85/_geo_xyz/17,14,2 0.0\nP _part/85/_geo_xyz/17,15,0 0.0\nP _part/85/_geo_xyz/17,15,1 0.0\nP _part/85/_geo_xyz/17,15,2 0.0\nP _part/85/_geo_xyz/17,16,0 0.0\nP _part/85/_geo_xyz/17,16,1 0.0\nP _part/85/_geo_xyz/17,16,2 0.0\nP _part/85/_geo_xyz/17,17,0 0.0\nP _part/85/_geo_xyz/17,17,1 0.0\nP _part/85/_geo_xyz/17,17,2 0.0\nP _part/85/_geo_xyz/17,2,0 0.0\nP _part/85/_geo_xyz/17,2,1 0.0\nP _part/85/_geo_xyz/17,2,2 0.0\nP _part/85/_geo_xyz/17,3,0 0.0\nP _part/85/_geo_xyz/17,3,1 0.0\nP _part/85/_geo_xyz/17,3,2 0.0\nP _part/85/_geo_xyz/17,4,0 0.0\nP _part/85/_geo_xyz/17,4,1 0.0\nP _part/85/_geo_xyz/17,4,2 0.0\nP _part/85/_geo_xyz/17,5,0 0.0\nP _part/85/_geo_xyz/17,5,1 0.0\nP _part/85/_geo_xyz/17,5,2 0.0\nP _part/85/_geo_xyz/17,6,0 0.0\nP _part/85/_geo_xyz/17,6,1 0.0\nP _part/85/_geo_xyz/17,6,2 0.0\nP _part/85/_geo_xyz/17,7,0 0.0\nP _part/85/_geo_xyz/17,7,1 0.0\nP _part/85/_geo_xyz/17,7,2 0.0\nP _part/85/_geo_xyz/17,8,0 0.0\nP _part/85/_geo_xyz/17,8,1 0.0\nP _part/85/_geo_xyz/17,8,2 0.0\nP _part/85/_geo_xyz/17,9,0 0.0\nP _part/85/_geo_xyz/17,9,1 0.0\nP _part/85/_geo_xyz/17,9,2 0.0\nP _part/85/_geo_xyz/18,0,0 0.0\nP _part/85/_geo_xyz/18,0,1 0.0\nP _part/85/_geo_xyz/18,0,2 0.0\nP _part/85/_geo_xyz/18,1,0 0.0\nP _part/85/_geo_xyz/18,1,1 0.0\nP _part/85/_geo_xyz/18,1,2 0.0\nP _part/85/_geo_xyz/18,10,0 0.0\nP _part/85/_geo_xyz/18,10,1 0.0\nP _part/85/_geo_xyz/18,10,2 0.0\nP _part/85/_geo_xyz/18,11,0 0.0\nP _part/85/_geo_xyz/18,11,1 0.0\nP _part/85/_geo_xyz/18,11,2 0.0\nP _part/85/_geo_xyz/18,12,0 0.0\nP _part/85/_geo_xyz/18,12,1 0.0\nP _part/85/_geo_xyz/18,12,2 0.0\nP _part/85/_geo_xyz/18,13,0 0.0\nP _part/85/_geo_xyz/18,13,1 0.0\nP _part/85/_geo_xyz/18,13,2 0.0\nP _part/85/_geo_xyz/18,14,0 0.0\nP _part/85/_geo_xyz/18,14,1 0.0\nP _part/85/_geo_xyz/18,14,2 0.0\nP _part/85/_geo_xyz/18,15,0 0.0\nP _part/85/_geo_xyz/18,15,1 0.0\nP _part/85/_geo_xyz/18,15,2 0.0\nP _part/85/_geo_xyz/18,16,0 0.0\nP _part/85/_geo_xyz/18,16,1 0.0\nP _part/85/_geo_xyz/18,16,2 0.0\nP _part/85/_geo_xyz/18,17,0 0.0\nP _part/85/_geo_xyz/18,17,1 0.0\nP _part/85/_geo_xyz/18,17,2 0.0\nP _part/85/_geo_xyz/18,2,0 0.0\nP _part/85/_geo_xyz/18,2,1 0.0\nP _part/85/_geo_xyz/18,2,2 0.0\nP _part/85/_geo_xyz/18,3,0 0.0\nP _part/85/_geo_xyz/18,3,1 0.0\nP _part/85/_geo_xyz/18,3,2 0.0\nP _part/85/_geo_xyz/18,4,0 0.0\nP _part/85/_geo_xyz/18,4,1 0.0\nP _part/85/_geo_xyz/18,4,2 0.0\nP _part/85/_geo_xyz/18,5,0 0.0\nP _part/85/_geo_xyz/18,5,1 0.0\nP _part/85/_geo_xyz/18,5,2 0.0\nP _part/85/_geo_xyz/18,6,0 0.0\nP _part/85/_geo_xyz/18,6,1 0.0\nP _part/85/_geo_xyz/18,6,2 0.0\nP _part/85/_geo_xyz/18,7,0 0.0\nP _part/85/_geo_xyz/18,7,1 0.0\nP _part/85/_geo_xyz/18,7,2 0.0\nP _part/85/_geo_xyz/18,8,0 0.0\nP _part/85/_geo_xyz/18,8,1 0.0\nP _part/85/_geo_xyz/18,8,2 0.0\nP _part/85/_geo_xyz/18,9,0 0.0\nP _part/85/_geo_xyz/18,9,1 0.0\nP _part/85/_geo_xyz/18,9,2 0.0\nP _part/85/_geo_xyz/19,0,0 0.0\nP _part/85/_geo_xyz/19,0,1 0.0\nP _part/85/_geo_xyz/19,0,2 0.0\nP _part/85/_geo_xyz/19,1,0 0.0\nP _part/85/_geo_xyz/19,1,1 0.0\nP _part/85/_geo_xyz/19,1,2 0.0\nP _part/85/_geo_xyz/19,10,0 0.0\nP _part/85/_geo_xyz/19,10,1 0.0\nP _part/85/_geo_xyz/19,10,2 0.0\nP _part/85/_geo_xyz/19,11,0 0.0\nP _part/85/_geo_xyz/19,11,1 0.0\nP _part/85/_geo_xyz/19,11,2 0.0\nP _part/85/_geo_xyz/19,12,0 0.0\nP _part/85/_geo_xyz/19,12,1 0.0\nP _part/85/_geo_xyz/19,12,2 0.0\nP _part/85/_geo_xyz/19,13,0 0.0\nP _part/85/_geo_xyz/19,13,1 0.0\nP _part/85/_geo_xyz/19,13,2 0.0\nP _part/85/_geo_xyz/19,14,0 0.0\nP _part/85/_geo_xyz/19,14,1 0.0\nP _part/85/_geo_xyz/19,14,2 0.0\nP _part/85/_geo_xyz/19,15,0 0.0\nP _part/85/_geo_xyz/19,15,1 0.0\nP _part/85/_geo_xyz/19,15,2 0.0\nP _part/85/_geo_xyz/19,16,0 0.0\nP _part/85/_geo_xyz/19,16,1 0.0\nP _part/85/_geo_xyz/19,16,2 0.0\nP _part/85/_geo_xyz/19,17,0 0.0\nP _part/85/_geo_xyz/19,17,1 0.0\nP _part/85/_geo_xyz/19,17,2 0.0\nP _part/85/_geo_xyz/19,2,0 0.0\nP _part/85/_geo_xyz/19,2,1 0.0\nP _part/85/_geo_xyz/19,2,2 0.0\nP _part/85/_geo_xyz/19,3,0 0.0\nP _part/85/_geo_xyz/19,3,1 0.0\nP _part/85/_geo_xyz/19,3,2 0.0\nP _part/85/_geo_xyz/19,4,0 0.0\nP _part/85/_geo_xyz/19,4,1 0.0\nP _part/85/_geo_xyz/19,4,2 0.0\nP _part/85/_geo_xyz/19,5,0 0.0\nP _part/85/_geo_xyz/19,5,1 0.0\nP _part/85/_geo_xyz/19,5,2 0.0\nP _part/85/_geo_xyz/19,6,0 0.0\nP _part/85/_geo_xyz/19,6,1 0.0\nP _part/85/_geo_xyz/19,6,2 0.0\nP _part/85/_geo_xyz/19,7,0 0.0\nP _part/85/_geo_xyz/19,7,1 0.0\nP _part/85/_geo_xyz/19,7,2 0.0\nP _part/85/_geo_xyz/19,8,0 0.0\nP _part/85/_geo_xyz/19,8,1 0.0\nP _part/85/_geo_xyz/19,8,2 0.0\nP _part/85/_geo_xyz/19,9,0 0.0\nP _part/85/_geo_xyz/19,9,1 0.0\nP _part/85/_geo_xyz/19,9,2 0.0\nP _part/85/_geo_xyz/2,0,0 0.0\nP _part/85/_geo_xyz/2,0,1 2.0\nP _part/85/_geo_xyz/2,0,2 2.0\nP _part/85/_geo_xyz/2,1,0 1.414213538\nP _part/85/_geo_xyz/2,1,1 1.414213538\nP _part/85/_geo_xyz/2,1,2 2.0\nP _part/85/_geo_xyz/2,10,0 0.0\nP _part/85/_geo_xyz/2,10,1 0.0\nP _part/85/_geo_xyz/2,10,2 0.0\nP _part/85/_geo_xyz/2,11,0 0.0\nP _part/85/_geo_xyz/2,11,1 0.0\nP _part/85/_geo_xyz/2,11,2 0.0\nP _part/85/_geo_xyz/2,12,0 0.0\nP _part/85/_geo_xyz/2,12,1 0.0\nP _part/85/_geo_xyz/2,12,2 0.0\nP _part/85/_geo_xyz/2,13,0 0.0\nP _part/85/_geo_xyz/2,13,1 0.0\nP _part/85/_geo_xyz/2,13,2 0.0\nP _part/85/_geo_xyz/2,14,0 0.0\nP _part/85/_geo_xyz/2,14,1 0.0\nP _part/85/_geo_xyz/2,14,2 0.0\nP _part/85/_geo_xyz/2,15,0 0.0\nP _part/85/_geo_xyz/2,15,1 0.0\nP _part/85/_geo_xyz/2,15,2 0.0\nP _part/85/_geo_xyz/2,16,0 0.0\nP _part/85/_geo_xyz/2,16,1 0.0\nP _part/85/_geo_xyz/2,16,2 0.0\nP _part/85/_geo_xyz/2,17,0 0.0\nP _part/85/_geo_xyz/2,17,1 0.0\nP _part/85/_geo_xyz/2,17,2 0.0\nP _part/85/_geo_xyz/2,2,0 2.0\nP _part/85/_geo_xyz/2,2,1 -0.000000087\nP _part/85/_geo_xyz/2,2,2 2.0\nP _part/85/_geo_xyz/2,3,0 1.414213538\nP _part/85/_geo_xyz/2,3,1 -1.414213538\nP _part/85/_geo_xyz/2,3,2 2.0\nP _part/85/_geo_xyz/2,4,0 -0.000000175\nP _part/85/_geo_xyz/2,4,1 -2.0\nP _part/85/_geo_xyz/2,4,2 2.0\nP _part/85/_geo_xyz/2,5,0 -0.000000175\nP _part/85/_geo_xyz/2,5,1 -2.0\nP _part/85/_geo_xyz/2,5,2 2.0\nP _part/85/_geo_xyz/2,6,0 -1.414213777\nP _part/85/_geo_xyz/2,6,1 -1.414213300\nP _part/85/_geo_xyz/2,6,2 2.0\nP _part/85/_geo_xyz/2,7,0 -2.0\nP _part/85/_geo_xyz/2,7,1 0.000000024\nP _part/85/_geo_xyz/2,7,2 2.0\nP _part/85/_geo_xyz/2,8,0 -1.414213061\nP _part/85/_geo_xyz/2,8,1 1.414214015\nP _part/85/_geo_xyz/2,8,2 2.0\nP _part/85/_geo_xyz/2,9,0 0.000000350\nP _part/85/_geo_xyz/2,9,1 2.0\nP _part/85/_geo_xyz/2,9,2 2.0\nP _part/85/_geo_xyz/3,0,0 0.0\nP _part/85/_geo_xyz/3,0,1 2.0\nP _part/85/_geo_xyz/3,0,2 3.0\nP _part/85/_geo_xyz/3,1,0 1.414213538\nP _part/85/_geo_xyz/3,1,1 1.414213538\nP _part/85/_geo_xyz/3,1,2 3.0\nP _part/85/_geo_xyz/3,10,0 0.0\nP _part/85/_geo_xyz/3,10,1 0.0\nP _part/85/_geo_xyz/3,10,2 0.0\nP _part/85/_geo_xyz/3,11,0 0.0\nP _part/85/_geo_xyz/3,11,1 0.0\nP _part/85/_geo_xyz/3,11,2 0.0\nP _part/85/_geo_xyz/3,12,0 0.0\nP _part/85/_geo_xyz/3,12,1 0.0\nP _part/85/_geo_xyz/3,12,2 0.0\nP _part/85/_geo_xyz/3,13,0 0.0\nP _part/85/_geo_xyz/3,13,1 0.0\nP _part/85/_geo_xyz/3,13,2 0.0\nP _part/85/_geo_xyz/3,14,0 0.0\nP _part/85/_geo_xyz/3,14,1 0.0\nP _part/85/_geo_xyz/3,14,2 0.0\nP _part/85/_geo_xyz/3,15,0 0.0\nP _part/85/_geo_xyz/3,15,1 0.0\nP _part/85/_geo_xyz/3,15,2 0.0\nP _part/85/_geo_xyz/3,16,0 0.0\nP _part/85/_geo_xyz/3,16,1 0.0\nP _part/85/_geo_xyz/3,16,2 0.0\nP _part/85/_geo_xyz/3,17,0 0.0\nP _part/85/_geo_xyz/3,17,1 0.0\nP _part/85/_geo_xyz/3,17,2 0.0\nP _part/85/_geo_xyz/3,2,0 2.0\nP _part/85/_geo_xyz/3,2,1 -0.000000087\nP _part/85/_geo_xyz/3,2,2 3.0\nP _part/85/_geo_xyz/3,3,0 1.414213538\nP _part/85/_geo_xyz/3,3,1 -1.414213538\nP _part/85/_geo_xyz/3,3,2 3.0\nP _part/85/_geo_xyz/3,4,0 -0.000000175\nP _part/85/_geo_xyz/3,4,1 -2.0\nP _part/85/_geo_xyz/3,4,2 3.0\nP _part/85/_geo_xyz/3,5,0 -0.000000175\nP _part/85/_geo_xyz/3,5,1 -2.0\nP _part/85/_geo_xyz/3,5,2 3.0\nP _part/85/_geo_xyz/3,6,0 -1.414213777\nP _part/85/_geo_xyz/3,6,1 -1.414213300\nP _part/85/_geo_xyz/3,6,2 3.0\nP _part/85/_geo_xyz/3,7,0 -2.0\nP _part/85/_geo_xyz/3,7,1 0.000000024\nP _part/85/_geo_xyz/3,7,2 3.0\nP _part/85/_geo_xyz/3,8,0 -1.414213061\nP _part/85/_geo_xyz/3,8,1 1.414214015\nP _part/85/_geo_xyz/3,8,2 3.0\nP _part/85/_geo_xyz/3,9,0 0.000000350\nP _part/85/_geo_xyz/3,9,1 2.0\nP _part/85/_geo_xyz/3,9,2 3.0\nP _part/85/_geo_xyz/4,0,0 0.0\nP _part/85/_geo_xyz/4,0,1 2.0\nP _part/85/_geo_xyz/4,0,2 4.0\nP _part/85/_geo_xyz/4,1,0 1.414213538\nP _part/85/_geo_xyz/4,1,1 1.414213538\nP _part/85/_geo_xyz/4,1,2 4.0\nP _part/85/_geo_xyz/4,10,0 0.0\nP _part/85/_geo_xyz/4,10,1 0.0\nP _part/85/_geo_xyz/4,10,2 0.0\nP _part/85/_geo_xyz/4,11,0 0.0\nP _part/85/_geo_xyz/4,11,1 0.0\nP _part/85/_geo_xyz/4,11,2 0.0\nP _part/85/_geo_xyz/4,12,0 0.0\nP _part/85/_geo_xyz/4,12,1 0.0\nP _part/85/_geo_xyz/4,12,2 0.0\nP _part/85/_geo_xyz/4,13,0 0.0\nP _part/85/_geo_xyz/4,13,1 0.0\nP _part/85/_geo_xyz/4,13,2 0.0\nP _part/85/_geo_xyz/4,14,0 0.0\nP _part/85/_geo_xyz/4,14,1 0.0\nP _part/85/_geo_xyz/4,14,2 0.0\nP _part/85/_geo_xyz/4,15,0 0.0\nP _part/85/_geo_xyz/4,15,1 0.0\nP _part/85/_geo_xyz/4,15,2 0.0\nP _part/85/_geo_xyz/4,16,0 0.0\nP _part/85/_geo_xyz/4,16,1 0.0\nP _part/85/_geo_xyz/4,16,2 0.0\nP _part/85/_geo_xyz/4,17,0 0.0\nP _part/85/_geo_xyz/4,17,1 0.0\nP _part/85/_geo_xyz/4,17,2 0.0\nP _part/85/_geo_xyz/4,2,0 2.0\nP _part/85/_geo_xyz/4,2,1 -0.000000087\nP _part/85/_geo_xyz/4,2,2 4.0\nP _part/85/_geo_xyz/4,3,0 1.414213538\nP _part/85/_geo_xyz/4,3,1 -1.414213538\nP _part/85/_geo_xyz/4,3,2 4.0\nP _part/85/_geo_xyz/4,4,0 -0.000000175\nP _part/85/_geo_xyz/4,4,1 -2.0\nP _part/85/_geo_xyz/4,4,2 4.0\nP _part/85/_geo_xyz/4,5,0 -0.000000175\nP _part/85/_geo_xyz/4,5,1 -2.0\nP _part/85/_geo_xyz/4,5,2 4.0\nP _part/85/_geo_xyz/4,6,0 -1.414213777\nP _part/85/_geo_xyz/4,6,1 -1.414213300\nP _part/85/_geo_xyz/4,6,2 4.0\nP _part/85/_geo_xyz/4,7,0 -2.0\nP _part/85/_geo_xyz/4,7,1 0.000000024\nP _part/85/_geo_xyz/4,7,2 4.0\nP _part/85/_geo_xyz/4,8,0 -1.414213061\nP _part/85/_geo_xyz/4,8,1 1.414214015\nP _part/85/_geo_xyz/4,8,2 4.0\nP _part/85/_geo_xyz/4,9,0 0.000000350\nP _part/85/_geo_xyz/4,9,1 2.0\nP _part/85/_geo_xyz/4,9,2 4.0\nP _part/85/_geo_xyz/5,0,0 0.0\nP _part/85/_geo_xyz/5,0,1 2.0\nP _part/85/_geo_xyz/5,0,2 5.0\nP _part/85/_geo_xyz/5,1,0 1.414213538\nP _part/85/_geo_xyz/5,1,1 1.414213538\nP _part/85/_geo_xyz/5,1,2 5.0\nP _part/85/_geo_xyz/5,10,0 0.0\nP _part/85/_geo_xyz/5,10,1 0.0\nP _part/85/_geo_xyz/5,10,2 0.0\nP _part/85/_geo_xyz/5,11,0 0.0\nP _part/85/_geo_xyz/5,11,1 0.0\nP _part/85/_geo_xyz/5,11,2 0.0\nP _part/85/_geo_xyz/5,12,0 0.0\nP _part/85/_geo_xyz/5,12,1 0.0\nP _part/85/_geo_xyz/5,12,2 0.0\nP _part/85/_geo_xyz/5,13,0 0.0\nP _part/85/_geo_xyz/5,13,1 0.0\nP _part/85/_geo_xyz/5,13,2 0.0\nP _part/85/_geo_xyz/5,14,0 0.0\nP _part/85/_geo_xyz/5,14,1 0.0\nP _part/85/_geo_xyz/5,14,2 0.0\nP _part/85/_geo_xyz/5,15,0 0.0\nP _part/85/_geo_xyz/5,15,1 0.0\nP _part/85/_geo_xyz/5,15,2 0.0\nP _part/85/_geo_xyz/5,16,0 0.0\nP _part/85/_geo_xyz/5,16,1 0.0\nP _part/85/_geo_xyz/5,16,2 0.0\nP _part/85/_geo_xyz/5,17,0 0.0\nP _part/85/_geo_xyz/5,17,1 0.0\nP _part/85/_geo_xyz/5,17,2 0.0\nP _part/85/_geo_xyz/5,2,0 2.0\nP _part/85/_geo_xyz/5,2,1 -0.000000087\nP _part/85/_geo_xyz/5,2,2 5.0\nP _part/85/_geo_xyz/5,3,0 1.414213538\nP _part/85/_geo_xyz/5,3,1 -1.414213538\nP _part/85/_geo_xyz/5,3,2 5.0\nP _part/85/_geo_xyz/5,4,0 -0.000000175\nP _part/85/_geo_xyz/5,4,1 -2.0\nP _part/85/_geo_xyz/5,4,2 5.0\nP _part/85/_geo_xyz/5,5,0 -0.000000175\nP _part/85/_geo_xyz/5,5,1 -2.0\nP _part/85/_geo_xyz/5,5,2 5.0\nP _part/85/_geo_xyz/5,6,0 -1.414213777\nP _part/85/_geo_xyz/5,6,1 -1.414213300\nP _part/85/_geo_xyz/5,6,2 5.0\nP _part/85/_geo_xyz/5,7,0 -2.0\nP _part/85/_geo_xyz/5,7,1 0.000000024\nP _part/85/_geo_xyz/5,7,2 5.0\nP _part/85/_geo_xyz/5,8,0 -1.414213061\nP _part/85/_geo_xyz/5,8,1 1.414214015\nP _part/85/_geo_xyz/5,8,2 5.0\nP _part/85/_geo_xyz/5,9,0 0.000000350\nP _part/85/_geo_xyz/5,9,1 2.0\nP _part/85/_geo_xyz/5,9,2 5.0\nP _part/85/_geo_xyz/6,0,0 0.0\nP _part/85/_geo_xyz/6,0,1 2.0\nP _part/85/_geo_xyz/6,0,2 6.0\nP _part/85/_geo_xyz/6,1,0 1.414213538\nP _part/85/_geo_xyz/6,1,1 1.414213538\nP _part/85/_geo_xyz/6,1,2 6.0\nP _part/85/_geo_xyz/6,10,0 0.0\nP _part/85/_geo_xyz/6,10,1 0.0\nP _part/85/_geo_xyz/6,10,2 0.0\nP _part/85/_geo_xyz/6,11,0 0.0\nP _part/85/_geo_xyz/6,11,1 0.0\nP _part/85/_geo_xyz/6,11,2 0.0\nP _part/85/_geo_xyz/6,12,0 0.0\nP _part/85/_geo_xyz/6,12,1 0.0\nP _part/85/_geo_xyz/6,12,2 0.0\nP _part/85/_geo_xyz/6,13,0 0.0\nP _part/85/_geo_xyz/6,13,1 0.0\nP _part/85/_geo_xyz/6,13,2 0.0\nP _part/85/_geo_xyz/6,14,0 0.0\nP _part/85/_geo_xyz/6,14,1 0.0\nP _part/85/_geo_xyz/6,14,2 0.0\nP _part/85/_geo_xyz/6,15,0 0.0\nP _part/85/_geo_xyz/6,15,1 0.0\nP _part/85/_geo_xyz/6,15,2 0.0\nP _part/85/_geo_xyz/6,16,0 0.0\nP _part/85/_geo_xyz/6,16,1 0.0\nP _part/85/_geo_xyz/6,16,2 0.0\nP _part/85/_geo_xyz/6,17,0 0.0\nP _part/85/_geo_xyz/6,17,1 0.0\nP _part/85/_geo_xyz/6,17,2 0.0\nP _part/85/_geo_xyz/6,2,0 2.0\nP _part/85/_geo_xyz/6,2,1 -0.000000087\nP _part/85/_geo_xyz/6,2,2 6.0\nP _part/85/_geo_xyz/6,3,0 1.414213538\nP _part/85/_geo_xyz/6,3,1 -1.414213538\nP _part/85/_geo_xyz/6,3,2 6.0\nP _part/85/_geo_xyz/6,4,0 -0.000000175\nP _part/85/_geo_xyz/6,4,1 -2.0\nP _part/85/_geo_xyz/6,4,2 6.0\nP _part/85/_geo_xyz/6,5,0 -0.000000175\nP _part/85/_geo_xyz/6,5,1 -2.0\nP _part/85/_geo_xyz/6,5,2 6.0\nP _part/85/_geo_xyz/6,6,0 -1.414213777\nP _part/85/_geo_xyz/6,6,1 -1.414213300\nP _part/85/_geo_xyz/6,6,2 6.0\nP _part/85/_geo_xyz/6,7,0 -2.0\nP _part/85/_geo_xyz/6,7,1 0.000000024\nP _part/85/_geo_xyz/6,7,2 6.0\nP _part/85/_geo_xyz/6,8,0 -1.414213061\nP _part/85/_geo_xyz/6,8,1 1.414214015\nP _part/85/_geo_xyz/6,8,2 6.0\nP _part/85/_geo_xyz/6,9,0 0.000000350\nP _part/85/_geo_xyz/6,9,1 2.0\nP _part/85/_geo_xyz/6,9,2 6.0\nP _part/85/_geo_xyz/7,0,0 0.0\nP _part/85/_geo_xyz/7,0,1 2.0\nP _part/85/_geo_xyz/7,0,2 7.0\nP _part/85/_geo_xyz/7,1,0 1.414213538\nP _part/85/_geo_xyz/7,1,1 1.414213538\nP _part/85/_geo_xyz/7,1,2 7.0\nP _part/85/_geo_xyz/7,10,0 0.0\nP _part/85/_geo_xyz/7,10,1 0.0\nP _part/85/_geo_xyz/7,10,2 0.0\nP _part/85/_geo_xyz/7,11,0 0.0\nP _part/85/_geo_xyz/7,11,1 0.0\nP _part/85/_geo_xyz/7,11,2 0.0\nP _part/85/_geo_xyz/7,12,0 0.0\nP _part/85/_geo_xyz/7,12,1 0.0\nP _part/85/_geo_xyz/7,12,2 0.0\nP _part/85/_geo_xyz/7,13,0 0.0\nP _part/85/_geo_xyz/7,13,1 0.0\nP _part/85/_geo_xyz/7,13,2 0.0\nP _part/85/_geo_xyz/7,14,0 0.0\nP _part/85/_geo_xyz/7,14,1 0.0\nP _part/85/_geo_xyz/7,14,2 0.0\nP _part/85/_geo_xyz/7,15,0 0.0\nP _part/85/_geo_xyz/7,15,1 0.0\nP _part/85/_geo_xyz/7,15,2 0.0\nP _part/85/_geo_xyz/7,16,0 0.0\nP _part/85/_geo_xyz/7,16,1 0.0\nP _part/85/_geo_xyz/7,16,2 0.0\nP _part/85/_geo_xyz/7,17,0 0.0\nP _part/85/_geo_xyz/7,17,1 0.0\nP _part/85/_geo_xyz/7,17,2 0.0\nP _part/85/_geo_xyz/7,2,0 2.0\nP _part/85/_geo_xyz/7,2,1 -0.000000087\nP _part/85/_geo_xyz/7,2,2 7.0\nP _part/85/_geo_xyz/7,3,0 1.414213538\nP _part/85/_geo_xyz/7,3,1 -1.414213538\nP _part/85/_geo_xyz/7,3,2 7.0\nP _part/85/_geo_xyz/7,4,0 -0.000000175\nP _part/85/_geo_xyz/7,4,1 -2.0\nP _part/85/_geo_xyz/7,4,2 7.0\nP _part/85/_geo_xyz/7,5,0 -0.000000175\nP _part/85/_geo_xyz/7,5,1 -2.0\nP _part/85/_geo_xyz/7,5,2 7.0\nP _part/85/_geo_xyz/7,6,0 -1.414213777\nP _part/85/_geo_xyz/7,6,1 -1.414213300\nP _part/85/_geo_xyz/7,6,2 7.0\nP _part/85/_geo_xyz/7,7,0 -2.0\nP _part/85/_geo_xyz/7,7,1 0.000000024\nP _part/85/_geo_xyz/7,7,2 7.0\nP _part/85/_geo_xyz/7,8,0 -1.414213061\nP _part/85/_geo_xyz/7,8,1 1.414214015\nP _part/85/_geo_xyz/7,8,2 7.0\nP _part/85/_geo_xyz/7,9,0 0.000000350\nP _part/85/_geo_xyz/7,9,1 2.0\nP _part/85/_geo_xyz/7,9,2 7.0\nP _part/85/_geo_xyz/8,0,0 0.0\nP _part/85/_geo_xyz/8,0,1 0.0\nP _part/85/_geo_xyz/8,0,2 0.0\nP _part/85/_geo_xyz/8,1,0 0.0\nP _part/85/_geo_xyz/8,1,1 0.0\nP _part/85/_geo_xyz/8,1,2 0.0\nP _part/85/_geo_xyz/8,10,0 0.0\nP _part/85/_geo_xyz/8,10,1 0.0\nP _part/85/_geo_xyz/8,10,2 0.0\nP _part/85/_geo_xyz/8,11,0 0.0\nP _part/85/_geo_xyz/8,11,1 0.0\nP _part/85/_geo_xyz/8,11,2 0.0\nP _part/85/_geo_xyz/8,12,0 0.0\nP _part/85/_geo_xyz/8,12,1 0.0\nP _part/85/_geo_xyz/8,12,2 0.0\nP _part/85/_geo_xyz/8,13,0 0.0\nP _part/85/_geo_xyz/8,13,1 0.0\nP _part/85/_geo_xyz/8,13,2 0.0\nP _part/85/_geo_xyz/8,14,0 0.0\nP _part/85/_geo_xyz/8,14,1 0.0\nP _part/85/_geo_xyz/8,14,2 0.0\nP _part/85/_geo_xyz/8,15,0 0.0\nP _part/85/_geo_xyz/8,15,1 0.0\nP _part/85/_geo_xyz/8,15,2 0.0\nP _part/85/_geo_xyz/8,16,0 0.0\nP _part/85/_geo_xyz/8,16,1 0.0\nP _part/85/_geo_xyz/8,16,2 0.0\nP _part/85/_geo_xyz/8,17,0 0.0\nP _part/85/_geo_xyz/8,17,1 0.0\nP _part/85/_geo_xyz/8,17,2 0.0\nP _part/85/_geo_xyz/8,2,0 0.0\nP _part/85/_geo_xyz/8,2,1 0.0\nP _part/85/_geo_xyz/8,2,2 0.0\nP _part/85/_geo_xyz/8,3,0 0.0\nP _part/85/_geo_xyz/8,3,1 0.0\nP _part/85/_geo_xyz/8,3,2 0.0\nP _part/85/_geo_xyz/8,4,0 0.0\nP _part/85/_geo_xyz/8,4,1 0.0\nP _part/85/_geo_xyz/8,4,2 0.0\nP _part/85/_geo_xyz/8,5,0 0.0\nP _part/85/_geo_xyz/8,5,1 0.0\nP _part/85/_geo_xyz/8,5,2 0.0\nP _part/85/_geo_xyz/8,6,0 0.0\nP _part/85/_geo_xyz/8,6,1 0.0\nP _part/85/_geo_xyz/8,6,2 0.0\nP _part/85/_geo_xyz/8,7,0 0.0\nP _part/85/_geo_xyz/8,7,1 0.0\nP _part/85/_geo_xyz/8,7,2 0.0\nP _part/85/_geo_xyz/8,8,0 0.0\nP _part/85/_geo_xyz/8,8,1 0.0\nP _part/85/_geo_xyz/8,8,2 0.0\nP _part/85/_geo_xyz/8,9,0 0.0\nP _part/85/_geo_xyz/8,9,1 0.0\nP _part/85/_geo_xyz/8,9,2 0.0\nP _part/85/_geo_xyz/9,0,0 0.0\nP _part/85/_geo_xyz/9,0,1 0.0\nP _part/85/_geo_xyz/9,0,2 0.0\nP _part/85/_geo_xyz/9,1,0 0.0\nP _part/85/_geo_xyz/9,1,1 0.0\nP _part/85/_geo_xyz/9,1,2 0.0\nP _part/85/_geo_xyz/9,10,0 0.0\nP _part/85/_geo_xyz/9,10,1 0.0\nP _part/85/_geo_xyz/9,10,2 0.0\nP _part/85/_geo_xyz/9,11,0 0.0\nP _part/85/_geo_xyz/9,11,1 0.0\nP _part/85/_geo_xyz/9,11,2 0.0\nP _part/85/_geo_xyz/9,12,0 0.0\nP _part/85/_geo_xyz/9,12,1 0.0\nP _part/85/_geo_xyz/9,12,2 0.0\nP _part/85/_geo_xyz/9,13,0 0.0\nP _part/85/_geo_xyz/9,13,1 0.0\nP _part/85/_geo_xyz/9,13,2 0.0\nP _part/85/_geo_xyz/9,14,0 0.0\nP _part/85/_geo_xyz/9,14,1 0.0\nP _part/85/_geo_xyz/9,14,2 0.0\nP _part/85/_geo_xyz/9,15,0 0.0\nP _part/85/_geo_xyz/9,15,1 0.0\nP _part/85/_geo_xyz/9,15,2 0.0\nP _part/85/_geo_xyz/9,16,0 0.0\nP _part/85/_geo_xyz/9,16,1 0.0\nP _part/85/_geo_xyz/9,16,2 0.0\nP _part/85/_geo_xyz/9,17,0 0.0\nP _part/85/_geo_xyz/9,17,1 0.0\nP _part/85/_geo_xyz/9,17,2 0.0\nP _part/85/_geo_xyz/9,2,0 0.0\nP _part/85/_geo_xyz/9,2,1 0.0\nP _part/85/_geo_xyz/9,2,2 0.0\nP _part/85/_geo_xyz/9,3,0 0.0\nP _part/85/_geo_xyz/9,3,1 0.0\nP _part/85/_geo_xyz/9,3,2 0.0\nP _part/85/_geo_xyz/9,4,0 0.0\nP _part/85/_geo_xyz/9,4,1 0.0\nP _part/85/_geo_xyz/9,4,2 0.0\nP _part/85/_geo_xyz/9,5,0 0.0\nP _part/85/_geo_xyz/9,5,1 0.0\nP _part/85/_geo_xyz/9,5,2 0.0\nP _part/85/_geo_xyz/9,6,0 0.0\nP _part/85/_geo_xyz/9,6,1 0.0\nP _part/85/_geo_xyz/9,6,2 0.0\nP _part/85/_geo_xyz/9,7,0 0.0\nP _part/85/_geo_xyz/9,7,1 0.0\nP _part/85/_geo_xyz/9,7,2 0.0\nP _part/85/_geo_xyz/9,8,0 0.0\nP _part/85/_geo_xyz/9,8,1 0.0\nP _part/85/_geo_xyz/9,8,2 0.0\nP _part/85/_geo_xyz/9,9,0 0.0\nP _part/85/_geo_xyz/9,9,1 0.0\nP _part/85/_geo_xyz/9,9,2 0.0\nP _part/85/_geo_xyz/i_count 20\nP _part/85/_geo_xyz/j_count 18\nP _part/85/_geo_xyz/k_count 3\nP _part/85/_locked/0,0 0\nP _part/85/_locked/0,1 0\nP _part/85/_locked/0,10 0\nP _part/85/_locked/0,11 0\nP _part/85/_locked/0,12 0\nP _part/85/_locked/0,13 0\nP _part/85/_locked/0,14 0\nP _part/85/_locked/0,15 0\nP _part/85/_locked/0,16 0\nP _part/85/_locked/0,17 0\nP _part/85/_locked/0,2 0\nP _part/85/_locked/0,3 0\nP _part/85/_locked/0,4 0\nP _part/85/_locked/0,5 0\nP _part/85/_locked/0,6 0\nP _part/85/_locked/0,7 0\nP _part/85/_locked/0,8 0\nP _part/85/_locked/0,9 0\nP _part/85/_locked/1,0 0\nP _part/85/_locked/1,1 0\nP _part/85/_locked/1,10 0\nP _part/85/_locked/1,11 0\nP _part/85/_locked/1,12 0\nP _part/85/_locked/1,13 0\nP _part/85/_locked/1,14 0\nP _part/85/_locked/1,15 0\nP _part/85/_locked/1,16 0\nP _part/85/_locked/1,17 0\nP _part/85/_locked/1,2 0\nP _part/85/_locked/1,3 0\nP _part/85/_locked/1,4 0\nP _part/85/_locked/1,5 0\nP _part/85/_locked/1,6 0\nP _part/85/_locked/1,7 0\nP _part/85/_locked/1,8 0\nP _part/85/_locked/1,9 0\nP _part/85/_locked/10,0 0\nP _part/85/_locked/10,1 0\nP _part/85/_locked/10,10 0\nP _part/85/_locked/10,11 0\nP _part/85/_locked/10,12 0\nP _part/85/_locked/10,13 0\nP _part/85/_locked/10,14 0\nP _part/85/_locked/10,15 0\nP _part/85/_locked/10,16 0\nP _part/85/_locked/10,17 0\nP _part/85/_locked/10,2 0\nP _part/85/_locked/10,3 0\nP _part/85/_locked/10,4 0\nP _part/85/_locked/10,5 0\nP _part/85/_locked/10,6 0\nP _part/85/_locked/10,7 0\nP _part/85/_locked/10,8 0\nP _part/85/_locked/10,9 0\nP _part/85/_locked/11,0 0\nP _part/85/_locked/11,1 0\nP _part/85/_locked/11,10 0\nP _part/85/_locked/11,11 0\nP _part/85/_locked/11,12 0\nP _part/85/_locked/11,13 0\nP _part/85/_locked/11,14 0\nP _part/85/_locked/11,15 0\nP _part/85/_locked/11,16 0\nP _part/85/_locked/11,17 0\nP _part/85/_locked/11,2 0\nP _part/85/_locked/11,3 0\nP _part/85/_locked/11,4 0\nP _part/85/_locked/11,5 0\nP _part/85/_locked/11,6 0\nP _part/85/_locked/11,7 0\nP _part/85/_locked/11,8 0\nP _part/85/_locked/11,9 0\nP _part/85/_locked/12,0 0\nP _part/85/_locked/12,1 0\nP _part/85/_locked/12,10 0\nP _part/85/_locked/12,11 0\nP _part/85/_locked/12,12 0\nP _part/85/_locked/12,13 0\nP _part/85/_locked/12,14 0\nP _part/85/_locked/12,15 0\nP _part/85/_locked/12,16 0\nP _part/85/_locked/12,17 0\nP _part/85/_locked/12,2 0\nP _part/85/_locked/12,3 0\nP _part/85/_locked/12,4 0\nP _part/85/_locked/12,5 0\nP _part/85/_locked/12,6 0\nP _part/85/_locked/12,7 0\nP _part/85/_locked/12,8 0\nP _part/85/_locked/12,9 0\nP _part/85/_locked/13,0 0\nP _part/85/_locked/13,1 0\nP _part/85/_locked/13,10 0\nP _part/85/_locked/13,11 0\nP _part/85/_locked/13,12 0\nP _part/85/_locked/13,13 0\nP _part/85/_locked/13,14 0\nP _part/85/_locked/13,15 0\nP _part/85/_locked/13,16 0\nP _part/85/_locked/13,17 0\nP _part/85/_locked/13,2 0\nP _part/85/_locked/13,3 0\nP _part/85/_locked/13,4 0\nP _part/85/_locked/13,5 0\nP _part/85/_locked/13,6 0\nP _part/85/_locked/13,7 0\nP _part/85/_locked/13,8 0\nP _part/85/_locked/13,9 0\nP _part/85/_locked/14,0 0\nP _part/85/_locked/14,1 0\nP _part/85/_locked/14,10 0\nP _part/85/_locked/14,11 0\nP _part/85/_locked/14,12 0\nP _part/85/_locked/14,13 0\nP _part/85/_locked/14,14 0\nP _part/85/_locked/14,15 0\nP _part/85/_locked/14,16 0\nP _part/85/_locked/14,17 0\nP _part/85/_locked/14,2 0\nP _part/85/_locked/14,3 0\nP _part/85/_locked/14,4 0\nP _part/85/_locked/14,5 0\nP _part/85/_locked/14,6 0\nP _part/85/_locked/14,7 0\nP _part/85/_locked/14,8 0\nP _part/85/_locked/14,9 0\nP _part/85/_locked/15,0 0\nP _part/85/_locked/15,1 0\nP _part/85/_locked/15,10 0\nP _part/85/_locked/15,11 0\nP _part/85/_locked/15,12 0\nP _part/85/_locked/15,13 0\nP _part/85/_locked/15,14 0\nP _part/85/_locked/15,15 0\nP _part/85/_locked/15,16 0\nP _part/85/_locked/15,17 0\nP _part/85/_locked/15,2 0\nP _part/85/_locked/15,3 0\nP _part/85/_locked/15,4 0\nP _part/85/_locked/15,5 0\nP _part/85/_locked/15,6 0\nP _part/85/_locked/15,7 0\nP _part/85/_locked/15,8 0\nP _part/85/_locked/15,9 0\nP _part/85/_locked/16,0 0\nP _part/85/_locked/16,1 0\nP _part/85/_locked/16,10 0\nP _part/85/_locked/16,11 0\nP _part/85/_locked/16,12 0\nP _part/85/_locked/16,13 0\nP _part/85/_locked/16,14 0\nP _part/85/_locked/16,15 0\nP _part/85/_locked/16,16 0\nP _part/85/_locked/16,17 0\nP _part/85/_locked/16,2 0\nP _part/85/_locked/16,3 0\nP _part/85/_locked/16,4 0\nP _part/85/_locked/16,5 0\nP _part/85/_locked/16,6 0\nP _part/85/_locked/16,7 0\nP _part/85/_locked/16,8 0\nP _part/85/_locked/16,9 0\nP _part/85/_locked/17,0 0\nP _part/85/_locked/17,1 0\nP _part/85/_locked/17,10 0\nP _part/85/_locked/17,11 0\nP _part/85/_locked/17,12 0\nP _part/85/_locked/17,13 0\nP _part/85/_locked/17,14 0\nP _part/85/_locked/17,15 0\nP _part/85/_locked/17,16 0\nP _part/85/_locked/17,17 0\nP _part/85/_locked/17,2 0\nP _part/85/_locked/17,3 0\nP _part/85/_locked/17,4 0\nP _part/85/_locked/17,5 0\nP _part/85/_locked/17,6 0\nP _part/85/_locked/17,7 0\nP _part/85/_locked/17,8 0\nP _part/85/_locked/17,9 0\nP _part/85/_locked/18,0 0\nP _part/85/_locked/18,1 0\nP _part/85/_locked/18,10 0\nP _part/85/_locked/18,11 0\nP _part/85/_locked/18,12 0\nP _part/85/_locked/18,13 0\nP _part/85/_locked/18,14 0\nP _part/85/_locked/18,15 0\nP _part/85/_locked/18,16 0\nP _part/85/_locked/18,17 0\nP _part/85/_locked/18,2 0\nP _part/85/_locked/18,3 0\nP _part/85/_locked/18,4 0\nP _part/85/_locked/18,5 0\nP _part/85/_locked/18,6 0\nP _part/85/_locked/18,7 0\nP _part/85/_locked/18,8 0\nP _part/85/_locked/18,9 0\nP _part/85/_locked/19,0 0\nP _part/85/_locked/19,1 0\nP _part/85/_locked/19,10 0\nP _part/85/_locked/19,11 0\nP _part/85/_locked/19,12 0\nP _part/85/_locked/19,13 0\nP _part/85/_locked/19,14 0\nP _part/85/_locked/19,15 0\nP _part/85/_locked/19,16 0\nP _part/85/_locked/19,17 0\nP _part/85/_locked/19,2 0\nP _part/85/_locked/19,3 0\nP _part/85/_locked/19,4 0\nP _part/85/_locked/19,5 0\nP _part/85/_locked/19,6 0\nP _part/85/_locked/19,7 0\nP _part/85/_locked/19,8 0\nP _part/85/_locked/19,9 0\nP _part/85/_locked/2,0 0\nP _part/85/_locked/2,1 0\nP _part/85/_locked/2,10 0\nP _part/85/_locked/2,11 0\nP _part/85/_locked/2,12 0\nP _part/85/_locked/2,13 0\nP _part/85/_locked/2,14 0\nP _part/85/_locked/2,15 0\nP _part/85/_locked/2,16 0\nP _part/85/_locked/2,17 0\nP _part/85/_locked/2,2 0\nP _part/85/_locked/2,3 0\nP _part/85/_locked/2,4 0\nP _part/85/_locked/2,5 0\nP _part/85/_locked/2,6 0\nP _part/85/_locked/2,7 0\nP _part/85/_locked/2,8 0\nP _part/85/_locked/2,9 0\nP _part/85/_locked/3,0 0\nP _part/85/_locked/3,1 0\nP _part/85/_locked/3,10 0\nP _part/85/_locked/3,11 0\nP _part/85/_locked/3,12 0\nP _part/85/_locked/3,13 0\nP _part/85/_locked/3,14 0\nP _part/85/_locked/3,15 0\nP _part/85/_locked/3,16 0\nP _part/85/_locked/3,17 0\nP _part/85/_locked/3,2 0\nP _part/85/_locked/3,3 0\nP _part/85/_locked/3,4 0\nP _part/85/_locked/3,5 0\nP _part/85/_locked/3,6 0\nP _part/85/_locked/3,7 0\nP _part/85/_locked/3,8 0\nP _part/85/_locked/3,9 0\nP _part/85/_locked/4,0 0\nP _part/85/_locked/4,1 0\nP _part/85/_locked/4,10 0\nP _part/85/_locked/4,11 0\nP _part/85/_locked/4,12 0\nP _part/85/_locked/4,13 0\nP _part/85/_locked/4,14 0\nP _part/85/_locked/4,15 0\nP _part/85/_locked/4,16 0\nP _part/85/_locked/4,17 0\nP _part/85/_locked/4,2 0\nP _part/85/_locked/4,3 0\nP _part/85/_locked/4,4 0\nP _part/85/_locked/4,5 0\nP _part/85/_locked/4,6 0\nP _part/85/_locked/4,7 0\nP _part/85/_locked/4,8 0\nP _part/85/_locked/4,9 0\nP _part/85/_locked/5,0 0\nP _part/85/_locked/5,1 0\nP _part/85/_locked/5,10 0\nP _part/85/_locked/5,11 0\nP _part/85/_locked/5,12 0\nP _part/85/_locked/5,13 0\nP _part/85/_locked/5,14 0\nP _part/85/_locked/5,15 0\nP _part/85/_locked/5,16 0\nP _part/85/_locked/5,17 0\nP _part/85/_locked/5,2 0\nP _part/85/_locked/5,3 0\nP _part/85/_locked/5,4 0\nP _part/85/_locked/5,5 0\nP _part/85/_locked/5,6 0\nP _part/85/_locked/5,7 0\nP _part/85/_locked/5,8 0\nP _part/85/_locked/5,9 0\nP _part/85/_locked/6,0 0\nP _part/85/_locked/6,1 0\nP _part/85/_locked/6,10 0\nP _part/85/_locked/6,11 0\nP _part/85/_locked/6,12 0\nP _part/85/_locked/6,13 0\nP _part/85/_locked/6,14 0\nP _part/85/_locked/6,15 0\nP _part/85/_locked/6,16 0\nP _part/85/_locked/6,17 0\nP _part/85/_locked/6,2 0\nP _part/85/_locked/6,3 0\nP _part/85/_locked/6,4 0\nP _part/85/_locked/6,5 0\nP _part/85/_locked/6,6 0\nP _part/85/_locked/6,7 0\nP _part/85/_locked/6,8 0\nP _part/85/_locked/6,9 0\nP _part/85/_locked/7,0 0\nP _part/85/_locked/7,1 0\nP _part/85/_locked/7,10 0\nP _part/85/_locked/7,11 0\nP _part/85/_locked/7,12 0\nP _part/85/_locked/7,13 0\nP _part/85/_locked/7,14 0\nP _part/85/_locked/7,15 0\nP _part/85/_locked/7,16 0\nP _part/85/_locked/7,17 0\nP _part/85/_locked/7,2 0\nP _part/85/_locked/7,3 0\nP _part/85/_locked/7,4 0\nP _part/85/_locked/7,5 0\nP _part/85/_locked/7,6 0\nP _part/85/_locked/7,7 0\nP _part/85/_locked/7,8 0\nP _part/85/_locked/7,9 0\nP _part/85/_locked/8,0 0\nP _part/85/_locked/8,1 0\nP _part/85/_locked/8,10 0\nP _part/85/_locked/8,11 0\nP _part/85/_locked/8,12 0\nP _part/85/_locked/8,13 0\nP _part/85/_locked/8,14 0\nP _part/85/_locked/8,15 0\nP _part/85/_locked/8,16 0\nP _part/85/_locked/8,17 0\nP _part/85/_locked/8,2 0\nP _part/85/_locked/8,3 0\nP _part/85/_locked/8,4 0\nP _part/85/_locked/8,5 0\nP _part/85/_locked/8,6 0\nP _part/85/_locked/8,7 0\nP _part/85/_locked/8,8 0\nP _part/85/_locked/8,9 0\nP _part/85/_locked/9,0 0\nP _part/85/_locked/9,1 0\nP _part/85/_locked/9,10 0\nP _part/85/_locked/9,11 0\nP _part/85/_locked/9,12 0\nP _part/85/_locked/9,13 0\nP _part/85/_locked/9,14 0\nP _part/85/_locked/9,15 0\nP _part/85/_locked/9,16 0\nP _part/85/_locked/9,17 0\nP _part/85/_locked/9,2 0\nP _part/85/_locked/9,3 0\nP _part/85/_locked/9,4 0\nP _part/85/_locked/9,5 0\nP _part/85/_locked/9,6 0\nP _part/85/_locked/9,7 0\nP _part/85/_locked/9,8 0\nP _part/85/_locked/9,9 0\nP _part/85/_locked/i_count 20\nP _part/85/_locked/j_count 18\nP _part/85/_part_cd 0.075000003\nP _part/85/_part_phi 0.0\nP _part/85/_part_psi 0.0\nP _part/85/_part_rad 2.0\nP _part/85/_part_specs_eq 0\nP _part/85/_part_specs_invis 0\nP _part/85/_part_specs_unused1 0\nP _part/85/_part_specs_unused2 0\nP _part/85/_part_tex 0\nP _part/85/_part_the 0.0\nP _part/85/_part_x 0.0\nP _part/85/_part_y 0.0\nP _part/85/_part_z 0.0\nP _part/85/_patt_con 0\nP _part/85/_patt_prt 0\nP _part/85/_patt_rat 0.0\nP _part/85/_r_dim 10\nP _part/85/_s_dim 8\nP _part/85/_scon 37.676635742\nP _part/85/_top_s1 0.632812500\nP _part/85/_top_s2 0.753906250\nP _part/85/_top_t1 0.254882812\nP _part/85/_top_t2 0.295898438\nP _part/86/_aero_x_os 0.0\nP _part/86/_aero_y_os 0.0\nP _part/86/_aero_z_os 0.0\nP _part/86/_area_frnt 0.0\nP _part/86/_area_side 0.0\nP _part/86/_area_vert 0.0\nP _part/86/_bot_s1 0.632812500\nP _part/86/_bot_s2 0.753906250\nP _part/86/_bot_t1 0.254882812\nP _part/86/_bot_t2 0.295898438\nP _part/86/_damp 1.883831739\nP _part/86/_geo_xyz/0,0,0 0.0\nP _part/86/_geo_xyz/0,0,1 2.0\nP _part/86/_geo_xyz/0,0,2 0.0\nP _part/86/_geo_xyz/0,1,0 1.414213538\nP _part/86/_geo_xyz/0,1,1 1.414213538\nP _part/86/_geo_xyz/0,1,2 0.0\nP _part/86/_geo_xyz/0,10,0 0.0\nP _part/86/_geo_xyz/0,10,1 0.0\nP _part/86/_geo_xyz/0,10,2 0.0\nP _part/86/_geo_xyz/0,11,0 0.0\nP _part/86/_geo_xyz/0,11,1 0.0\nP _part/86/_geo_xyz/0,11,2 0.0\nP _part/86/_geo_xyz/0,12,0 0.0\nP _part/86/_geo_xyz/0,12,1 0.0\nP _part/86/_geo_xyz/0,12,2 0.0\nP _part/86/_geo_xyz/0,13,0 0.0\nP _part/86/_geo_xyz/0,13,1 0.0\nP _part/86/_geo_xyz/0,13,2 0.0\nP _part/86/_geo_xyz/0,14,0 0.0\nP _part/86/_geo_xyz/0,14,1 0.0\nP _part/86/_geo_xyz/0,14,2 0.0\nP _part/86/_geo_xyz/0,15,0 0.0\nP _part/86/_geo_xyz/0,15,1 0.0\nP _part/86/_geo_xyz/0,15,2 0.0\nP _part/86/_geo_xyz/0,16,0 0.0\nP _part/86/_geo_xyz/0,16,1 0.0\nP _part/86/_geo_xyz/0,16,2 0.0\nP _part/86/_geo_xyz/0,17,0 0.0\nP _part/86/_geo_xyz/0,17,1 0.0\nP _part/86/_geo_xyz/0,17,2 0.0\nP _part/86/_geo_xyz/0,2,0 2.0\nP _part/86/_geo_xyz/0,2,1 -0.000000087\nP _part/86/_geo_xyz/0,2,2 0.0\nP _part/86/_geo_xyz/0,3,0 1.414213538\nP _part/86/_geo_xyz/0,3,1 -1.414213538\nP _part/86/_geo_xyz/0,3,2 0.0\nP _part/86/_geo_xyz/0,4,0 -0.000000175\nP _part/86/_geo_xyz/0,4,1 -2.0\nP _part/86/_geo_xyz/0,4,2 0.0\nP _part/86/_geo_xyz/0,5,0 -0.000000175\nP _part/86/_geo_xyz/0,5,1 -2.0\nP _part/86/_geo_xyz/0,5,2 0.0\nP _part/86/_geo_xyz/0,6,0 -1.414213777\nP _part/86/_geo_xyz/0,6,1 -1.414213300\nP _part/86/_geo_xyz/0,6,2 0.0\nP _part/86/_geo_xyz/0,7,0 -2.0\nP _part/86/_geo_xyz/0,7,1 0.000000024\nP _part/86/_geo_xyz/0,7,2 0.0\nP _part/86/_geo_xyz/0,8,0 -1.414213061\nP _part/86/_geo_xyz/0,8,1 1.414214015\nP _part/86/_geo_xyz/0,8,2 0.0\nP _part/86/_geo_xyz/0,9,0 0.000000350\nP _part/86/_geo_xyz/0,9,1 2.0\nP _part/86/_geo_xyz/0,9,2 0.0\nP _part/86/_geo_xyz/1,0,0 0.0\nP _part/86/_geo_xyz/1,0,1 2.0\nP _part/86/_geo_xyz/1,0,2 1.0\nP _part/86/_geo_xyz/1,1,0 1.414213538\nP _part/86/_geo_xyz/1,1,1 1.414213538\nP _part/86/_geo_xyz/1,1,2 1.0\nP _part/86/_geo_xyz/1,10,0 0.0\nP _part/86/_geo_xyz/1,10,1 0.0\nP _part/86/_geo_xyz/1,10,2 0.0\nP _part/86/_geo_xyz/1,11,0 0.0\nP _part/86/_geo_xyz/1,11,1 0.0\nP _part/86/_geo_xyz/1,11,2 0.0\nP _part/86/_geo_xyz/1,12,0 0.0\nP _part/86/_geo_xyz/1,12,1 0.0\nP _part/86/_geo_xyz/1,12,2 0.0\nP _part/86/_geo_xyz/1,13,0 0.0\nP _part/86/_geo_xyz/1,13,1 0.0\nP _part/86/_geo_xyz/1,13,2 0.0\nP _part/86/_geo_xyz/1,14,0 0.0\nP _part/86/_geo_xyz/1,14,1 0.0\nP _part/86/_geo_xyz/1,14,2 0.0\nP _part/86/_geo_xyz/1,15,0 0.0\nP _part/86/_geo_xyz/1,15,1 0.0\nP _part/86/_geo_xyz/1,15,2 0.0\nP _part/86/_geo_xyz/1,16,0 0.0\nP _part/86/_geo_xyz/1,16,1 0.0\nP _part/86/_geo_xyz/1,16,2 0.0\nP _part/86/_geo_xyz/1,17,0 0.0\nP _part/86/_geo_xyz/1,17,1 0.0\nP _part/86/_geo_xyz/1,17,2 0.0\nP _part/86/_geo_xyz/1,2,0 2.0\nP _part/86/_geo_xyz/1,2,1 -0.000000087\nP _part/86/_geo_xyz/1,2,2 1.0\nP _part/86/_geo_xyz/1,3,0 1.414213538\nP _part/86/_geo_xyz/1,3,1 -1.414213538\nP _part/86/_geo_xyz/1,3,2 1.0\nP _part/86/_geo_xyz/1,4,0 -0.000000175\nP _part/86/_geo_xyz/1,4,1 -2.0\nP _part/86/_geo_xyz/1,4,2 1.0\nP _part/86/_geo_xyz/1,5,0 -0.000000175\nP _part/86/_geo_xyz/1,5,1 -2.0\nP _part/86/_geo_xyz/1,5,2 1.0\nP _part/86/_geo_xyz/1,6,0 -1.414213777\nP _part/86/_geo_xyz/1,6,1 -1.414213300\nP _part/86/_geo_xyz/1,6,2 1.0\nP _part/86/_geo_xyz/1,7,0 -2.0\nP _part/86/_geo_xyz/1,7,1 0.000000024\nP _part/86/_geo_xyz/1,7,2 1.0\nP _part/86/_geo_xyz/1,8,0 -1.414213061\nP _part/86/_geo_xyz/1,8,1 1.414214015\nP _part/86/_geo_xyz/1,8,2 1.0\nP _part/86/_geo_xyz/1,9,0 0.000000350\nP _part/86/_geo_xyz/1,9,1 2.0\nP _part/86/_geo_xyz/1,9,2 1.0\nP _part/86/_geo_xyz/10,0,0 0.0\nP _part/86/_geo_xyz/10,0,1 0.0\nP _part/86/_geo_xyz/10,0,2 0.0\nP _part/86/_geo_xyz/10,1,0 0.0\nP _part/86/_geo_xyz/10,1,1 0.0\nP _part/86/_geo_xyz/10,1,2 0.0\nP _part/86/_geo_xyz/10,10,0 0.0\nP _part/86/_geo_xyz/10,10,1 0.0\nP _part/86/_geo_xyz/10,10,2 0.0\nP _part/86/_geo_xyz/10,11,0 0.0\nP _part/86/_geo_xyz/10,11,1 0.0\nP _part/86/_geo_xyz/10,11,2 0.0\nP _part/86/_geo_xyz/10,12,0 0.0\nP _part/86/_geo_xyz/10,12,1 0.0\nP _part/86/_geo_xyz/10,12,2 0.0\nP _part/86/_geo_xyz/10,13,0 0.0\nP _part/86/_geo_xyz/10,13,1 0.0\nP _part/86/_geo_xyz/10,13,2 0.0\nP _part/86/_geo_xyz/10,14,0 0.0\nP _part/86/_geo_xyz/10,14,1 0.0\nP _part/86/_geo_xyz/10,14,2 0.0\nP _part/86/_geo_xyz/10,15,0 0.0\nP _part/86/_geo_xyz/10,15,1 0.0\nP _part/86/_geo_xyz/10,15,2 0.0\nP _part/86/_geo_xyz/10,16,0 0.0\nP _part/86/_geo_xyz/10,16,1 0.0\nP _part/86/_geo_xyz/10,16,2 0.0\nP _part/86/_geo_xyz/10,17,0 0.0\nP _part/86/_geo_xyz/10,17,1 0.0\nP _part/86/_geo_xyz/10,17,2 0.0\nP _part/86/_geo_xyz/10,2,0 0.0\nP _part/86/_geo_xyz/10,2,1 0.0\nP _part/86/_geo_xyz/10,2,2 0.0\nP _part/86/_geo_xyz/10,3,0 0.0\nP _part/86/_geo_xyz/10,3,1 0.0\nP _part/86/_geo_xyz/10,3,2 0.0\nP _part/86/_geo_xyz/10,4,0 0.0\nP _part/86/_geo_xyz/10,4,1 0.0\nP _part/86/_geo_xyz/10,4,2 0.0\nP _part/86/_geo_xyz/10,5,0 0.0\nP _part/86/_geo_xyz/10,5,1 0.0\nP _part/86/_geo_xyz/10,5,2 0.0\nP _part/86/_geo_xyz/10,6,0 0.0\nP _part/86/_geo_xyz/10,6,1 0.0\nP _part/86/_geo_xyz/10,6,2 0.0\nP _part/86/_geo_xyz/10,7,0 0.0\nP _part/86/_geo_xyz/10,7,1 0.0\nP _part/86/_geo_xyz/10,7,2 0.0\nP _part/86/_geo_xyz/10,8,0 0.0\nP _part/86/_geo_xyz/10,8,1 0.0\nP _part/86/_geo_xyz/10,8,2 0.0\nP _part/86/_geo_xyz/10,9,0 0.0\nP _part/86/_geo_xyz/10,9,1 0.0\nP _part/86/_geo_xyz/10,9,2 0.0\nP _part/86/_geo_xyz/11,0,0 0.0\nP _part/86/_geo_xyz/11,0,1 0.0\nP _part/86/_geo_xyz/11,0,2 0.0\nP _part/86/_geo_xyz/11,1,0 0.0\nP _part/86/_geo_xyz/11,1,1 0.0\nP _part/86/_geo_xyz/11,1,2 0.0\nP _part/86/_geo_xyz/11,10,0 0.0\nP _part/86/_geo_xyz/11,10,1 0.0\nP _part/86/_geo_xyz/11,10,2 0.0\nP _part/86/_geo_xyz/11,11,0 0.0\nP _part/86/_geo_xyz/11,11,1 0.0\nP _part/86/_geo_xyz/11,11,2 0.0\nP _part/86/_geo_xyz/11,12,0 0.0\nP _part/86/_geo_xyz/11,12,1 0.0\nP _part/86/_geo_xyz/11,12,2 0.0\nP _part/86/_geo_xyz/11,13,0 0.0\nP _part/86/_geo_xyz/11,13,1 0.0\nP _part/86/_geo_xyz/11,13,2 0.0\nP _part/86/_geo_xyz/11,14,0 0.0\nP _part/86/_geo_xyz/11,14,1 0.0\nP _part/86/_geo_xyz/11,14,2 0.0\nP _part/86/_geo_xyz/11,15,0 0.0\nP _part/86/_geo_xyz/11,15,1 0.0\nP _part/86/_geo_xyz/11,15,2 0.0\nP _part/86/_geo_xyz/11,16,0 0.0\nP _part/86/_geo_xyz/11,16,1 0.0\nP _part/86/_geo_xyz/11,16,2 0.0\nP _part/86/_geo_xyz/11,17,0 0.0\nP _part/86/_geo_xyz/11,17,1 0.0\nP _part/86/_geo_xyz/11,17,2 0.0\nP _part/86/_geo_xyz/11,2,0 0.0\nP _part/86/_geo_xyz/11,2,1 0.0\nP _part/86/_geo_xyz/11,2,2 0.0\nP _part/86/_geo_xyz/11,3,0 0.0\nP _part/86/_geo_xyz/11,3,1 0.0\nP _part/86/_geo_xyz/11,3,2 0.0\nP _part/86/_geo_xyz/11,4,0 0.0\nP _part/86/_geo_xyz/11,4,1 0.0\nP _part/86/_geo_xyz/11,4,2 0.0\nP _part/86/_geo_xyz/11,5,0 0.0\nP _part/86/_geo_xyz/11,5,1 0.0\nP _part/86/_geo_xyz/11,5,2 0.0\nP _part/86/_geo_xyz/11,6,0 0.0\nP _part/86/_geo_xyz/11,6,1 0.0\nP _part/86/_geo_xyz/11,6,2 0.0\nP _part/86/_geo_xyz/11,7,0 0.0\nP _part/86/_geo_xyz/11,7,1 0.0\nP _part/86/_geo_xyz/11,7,2 0.0\nP _part/86/_geo_xyz/11,8,0 0.0\nP _part/86/_geo_xyz/11,8,1 0.0\nP _part/86/_geo_xyz/11,8,2 0.0\nP _part/86/_geo_xyz/11,9,0 0.0\nP _part/86/_geo_xyz/11,9,1 0.0\nP _part/86/_geo_xyz/11,9,2 0.0\nP _part/86/_geo_xyz/12,0,0 0.0\nP _part/86/_geo_xyz/12,0,1 0.0\nP _part/86/_geo_xyz/12,0,2 0.0\nP _part/86/_geo_xyz/12,1,0 0.0\nP _part/86/_geo_xyz/12,1,1 0.0\nP _part/86/_geo_xyz/12,1,2 0.0\nP _part/86/_geo_xyz/12,10,0 0.0\nP _part/86/_geo_xyz/12,10,1 0.0\nP _part/86/_geo_xyz/12,10,2 0.0\nP _part/86/_geo_xyz/12,11,0 0.0\nP _part/86/_geo_xyz/12,11,1 0.0\nP _part/86/_geo_xyz/12,11,2 0.0\nP _part/86/_geo_xyz/12,12,0 0.0\nP _part/86/_geo_xyz/12,12,1 0.0\nP _part/86/_geo_xyz/12,12,2 0.0\nP _part/86/_geo_xyz/12,13,0 0.0\nP _part/86/_geo_xyz/12,13,1 0.0\nP _part/86/_geo_xyz/12,13,2 0.0\nP _part/86/_geo_xyz/12,14,0 0.0\nP _part/86/_geo_xyz/12,14,1 0.0\nP _part/86/_geo_xyz/12,14,2 0.0\nP _part/86/_geo_xyz/12,15,0 0.0\nP _part/86/_geo_xyz/12,15,1 0.0\nP _part/86/_geo_xyz/12,15,2 0.0\nP _part/86/_geo_xyz/12,16,0 0.0\nP _part/86/_geo_xyz/12,16,1 0.0\nP _part/86/_geo_xyz/12,16,2 0.0\nP _part/86/_geo_xyz/12,17,0 0.0\nP _part/86/_geo_xyz/12,17,1 0.0\nP _part/86/_geo_xyz/12,17,2 0.0\nP _part/86/_geo_xyz/12,2,0 0.0\nP _part/86/_geo_xyz/12,2,1 0.0\nP _part/86/_geo_xyz/12,2,2 0.0\nP _part/86/_geo_xyz/12,3,0 0.0\nP _part/86/_geo_xyz/12,3,1 0.0\nP _part/86/_geo_xyz/12,3,2 0.0\nP _part/86/_geo_xyz/12,4,0 0.0\nP _part/86/_geo_xyz/12,4,1 0.0\nP _part/86/_geo_xyz/12,4,2 0.0\nP _part/86/_geo_xyz/12,5,0 0.0\nP _part/86/_geo_xyz/12,5,1 0.0\nP _part/86/_geo_xyz/12,5,2 0.0\nP _part/86/_geo_xyz/12,6,0 0.0\nP _part/86/_geo_xyz/12,6,1 0.0\nP _part/86/_geo_xyz/12,6,2 0.0\nP _part/86/_geo_xyz/12,7,0 0.0\nP _part/86/_geo_xyz/12,7,1 0.0\nP _part/86/_geo_xyz/12,7,2 0.0\nP _part/86/_geo_xyz/12,8,0 0.0\nP _part/86/_geo_xyz/12,8,1 0.0\nP _part/86/_geo_xyz/12,8,2 0.0\nP _part/86/_geo_xyz/12,9,0 0.0\nP _part/86/_geo_xyz/12,9,1 0.0\nP _part/86/_geo_xyz/12,9,2 0.0\nP _part/86/_geo_xyz/13,0,0 0.0\nP _part/86/_geo_xyz/13,0,1 0.0\nP _part/86/_geo_xyz/13,0,2 0.0\nP _part/86/_geo_xyz/13,1,0 0.0\nP _part/86/_geo_xyz/13,1,1 0.0\nP _part/86/_geo_xyz/13,1,2 0.0\nP _part/86/_geo_xyz/13,10,0 0.0\nP _part/86/_geo_xyz/13,10,1 0.0\nP _part/86/_geo_xyz/13,10,2 0.0\nP _part/86/_geo_xyz/13,11,0 0.0\nP _part/86/_geo_xyz/13,11,1 0.0\nP _part/86/_geo_xyz/13,11,2 0.0\nP _part/86/_geo_xyz/13,12,0 0.0\nP _part/86/_geo_xyz/13,12,1 0.0\nP _part/86/_geo_xyz/13,12,2 0.0\nP _part/86/_geo_xyz/13,13,0 0.0\nP _part/86/_geo_xyz/13,13,1 0.0\nP _part/86/_geo_xyz/13,13,2 0.0\nP _part/86/_geo_xyz/13,14,0 0.0\nP _part/86/_geo_xyz/13,14,1 0.0\nP _part/86/_geo_xyz/13,14,2 0.0\nP _part/86/_geo_xyz/13,15,0 0.0\nP _part/86/_geo_xyz/13,15,1 0.0\nP _part/86/_geo_xyz/13,15,2 0.0\nP _part/86/_geo_xyz/13,16,0 0.0\nP _part/86/_geo_xyz/13,16,1 0.0\nP _part/86/_geo_xyz/13,16,2 0.0\nP _part/86/_geo_xyz/13,17,0 0.0\nP _part/86/_geo_xyz/13,17,1 0.0\nP _part/86/_geo_xyz/13,17,2 0.0\nP _part/86/_geo_xyz/13,2,0 0.0\nP _part/86/_geo_xyz/13,2,1 0.0\nP _part/86/_geo_xyz/13,2,2 0.0\nP _part/86/_geo_xyz/13,3,0 0.0\nP _part/86/_geo_xyz/13,3,1 0.0\nP _part/86/_geo_xyz/13,3,2 0.0\nP _part/86/_geo_xyz/13,4,0 0.0\nP _part/86/_geo_xyz/13,4,1 0.0\nP _part/86/_geo_xyz/13,4,2 0.0\nP _part/86/_geo_xyz/13,5,0 0.0\nP _part/86/_geo_xyz/13,5,1 0.0\nP _part/86/_geo_xyz/13,5,2 0.0\nP _part/86/_geo_xyz/13,6,0 0.0\nP _part/86/_geo_xyz/13,6,1 0.0\nP _part/86/_geo_xyz/13,6,2 0.0\nP _part/86/_geo_xyz/13,7,0 0.0\nP _part/86/_geo_xyz/13,7,1 0.0\nP _part/86/_geo_xyz/13,7,2 0.0\nP _part/86/_geo_xyz/13,8,0 0.0\nP _part/86/_geo_xyz/13,8,1 0.0\nP _part/86/_geo_xyz/13,8,2 0.0\nP _part/86/_geo_xyz/13,9,0 0.0\nP _part/86/_geo_xyz/13,9,1 0.0\nP _part/86/_geo_xyz/13,9,2 0.0\nP _part/86/_geo_xyz/14,0,0 0.0\nP _part/86/_geo_xyz/14,0,1 0.0\nP _part/86/_geo_xyz/14,0,2 0.0\nP _part/86/_geo_xyz/14,1,0 0.0\nP _part/86/_geo_xyz/14,1,1 0.0\nP _part/86/_geo_xyz/14,1,2 0.0\nP _part/86/_geo_xyz/14,10,0 0.0\nP _part/86/_geo_xyz/14,10,1 0.0\nP _part/86/_geo_xyz/14,10,2 0.0\nP _part/86/_geo_xyz/14,11,0 0.0\nP _part/86/_geo_xyz/14,11,1 0.0\nP _part/86/_geo_xyz/14,11,2 0.0\nP _part/86/_geo_xyz/14,12,0 0.0\nP _part/86/_geo_xyz/14,12,1 0.0\nP _part/86/_geo_xyz/14,12,2 0.0\nP _part/86/_geo_xyz/14,13,0 0.0\nP _part/86/_geo_xyz/14,13,1 0.0\nP _part/86/_geo_xyz/14,13,2 0.0\nP _part/86/_geo_xyz/14,14,0 0.0\nP _part/86/_geo_xyz/14,14,1 0.0\nP _part/86/_geo_xyz/14,14,2 0.0\nP _part/86/_geo_xyz/14,15,0 0.0\nP _part/86/_geo_xyz/14,15,1 0.0\nP _part/86/_geo_xyz/14,15,2 0.0\nP _part/86/_geo_xyz/14,16,0 0.0\nP _part/86/_geo_xyz/14,16,1 0.0\nP _part/86/_geo_xyz/14,16,2 0.0\nP _part/86/_geo_xyz/14,17,0 0.0\nP _part/86/_geo_xyz/14,17,1 0.0\nP _part/86/_geo_xyz/14,17,2 0.0\nP _part/86/_geo_xyz/14,2,0 0.0\nP _part/86/_geo_xyz/14,2,1 0.0\nP _part/86/_geo_xyz/14,2,2 0.0\nP _part/86/_geo_xyz/14,3,0 0.0\nP _part/86/_geo_xyz/14,3,1 0.0\nP _part/86/_geo_xyz/14,3,2 0.0\nP _part/86/_geo_xyz/14,4,0 0.0\nP _part/86/_geo_xyz/14,4,1 0.0\nP _part/86/_geo_xyz/14,4,2 0.0\nP _part/86/_geo_xyz/14,5,0 0.0\nP _part/86/_geo_xyz/14,5,1 0.0\nP _part/86/_geo_xyz/14,5,2 0.0\nP _part/86/_geo_xyz/14,6,0 0.0\nP _part/86/_geo_xyz/14,6,1 0.0\nP _part/86/_geo_xyz/14,6,2 0.0\nP _part/86/_geo_xyz/14,7,0 0.0\nP _part/86/_geo_xyz/14,7,1 0.0\nP _part/86/_geo_xyz/14,7,2 0.0\nP _part/86/_geo_xyz/14,8,0 0.0\nP _part/86/_geo_xyz/14,8,1 0.0\nP _part/86/_geo_xyz/14,8,2 0.0\nP _part/86/_geo_xyz/14,9,0 0.0\nP _part/86/_geo_xyz/14,9,1 0.0\nP _part/86/_geo_xyz/14,9,2 0.0\nP _part/86/_geo_xyz/15,0,0 0.0\nP _part/86/_geo_xyz/15,0,1 0.0\nP _part/86/_geo_xyz/15,0,2 0.0\nP _part/86/_geo_xyz/15,1,0 0.0\nP _part/86/_geo_xyz/15,1,1 0.0\nP _part/86/_geo_xyz/15,1,2 0.0\nP _part/86/_geo_xyz/15,10,0 0.0\nP _part/86/_geo_xyz/15,10,1 0.0\nP _part/86/_geo_xyz/15,10,2 0.0\nP _part/86/_geo_xyz/15,11,0 0.0\nP _part/86/_geo_xyz/15,11,1 0.0\nP _part/86/_geo_xyz/15,11,2 0.0\nP _part/86/_geo_xyz/15,12,0 0.0\nP _part/86/_geo_xyz/15,12,1 0.0\nP _part/86/_geo_xyz/15,12,2 0.0\nP _part/86/_geo_xyz/15,13,0 0.0\nP _part/86/_geo_xyz/15,13,1 0.0\nP _part/86/_geo_xyz/15,13,2 0.0\nP _part/86/_geo_xyz/15,14,0 0.0\nP _part/86/_geo_xyz/15,14,1 0.0\nP _part/86/_geo_xyz/15,14,2 0.0\nP _part/86/_geo_xyz/15,15,0 0.0\nP _part/86/_geo_xyz/15,15,1 0.0\nP _part/86/_geo_xyz/15,15,2 0.0\nP _part/86/_geo_xyz/15,16,0 0.0\nP _part/86/_geo_xyz/15,16,1 0.0\nP _part/86/_geo_xyz/15,16,2 0.0\nP _part/86/_geo_xyz/15,17,0 0.0\nP _part/86/_geo_xyz/15,17,1 0.0\nP _part/86/_geo_xyz/15,17,2 0.0\nP _part/86/_geo_xyz/15,2,0 0.0\nP _part/86/_geo_xyz/15,2,1 0.0\nP _part/86/_geo_xyz/15,2,2 0.0\nP _part/86/_geo_xyz/15,3,0 0.0\nP _part/86/_geo_xyz/15,3,1 0.0\nP _part/86/_geo_xyz/15,3,2 0.0\nP _part/86/_geo_xyz/15,4,0 0.0\nP _part/86/_geo_xyz/15,4,1 0.0\nP _part/86/_geo_xyz/15,4,2 0.0\nP _part/86/_geo_xyz/15,5,0 0.0\nP _part/86/_geo_xyz/15,5,1 0.0\nP _part/86/_geo_xyz/15,5,2 0.0\nP _part/86/_geo_xyz/15,6,0 0.0\nP _part/86/_geo_xyz/15,6,1 0.0\nP _part/86/_geo_xyz/15,6,2 0.0\nP _part/86/_geo_xyz/15,7,0 0.0\nP _part/86/_geo_xyz/15,7,1 0.0\nP _part/86/_geo_xyz/15,7,2 0.0\nP _part/86/_geo_xyz/15,8,0 0.0\nP _part/86/_geo_xyz/15,8,1 0.0\nP _part/86/_geo_xyz/15,8,2 0.0\nP _part/86/_geo_xyz/15,9,0 0.0\nP _part/86/_geo_xyz/15,9,1 0.0\nP _part/86/_geo_xyz/15,9,2 0.0\nP _part/86/_geo_xyz/16,0,0 0.0\nP _part/86/_geo_xyz/16,0,1 0.0\nP _part/86/_geo_xyz/16,0,2 0.0\nP _part/86/_geo_xyz/16,1,0 0.0\nP _part/86/_geo_xyz/16,1,1 0.0\nP _part/86/_geo_xyz/16,1,2 0.0\nP _part/86/_geo_xyz/16,10,0 0.0\nP _part/86/_geo_xyz/16,10,1 0.0\nP _part/86/_geo_xyz/16,10,2 0.0\nP _part/86/_geo_xyz/16,11,0 0.0\nP _part/86/_geo_xyz/16,11,1 0.0\nP _part/86/_geo_xyz/16,11,2 0.0\nP _part/86/_geo_xyz/16,12,0 0.0\nP _part/86/_geo_xyz/16,12,1 0.0\nP _part/86/_geo_xyz/16,12,2 0.0\nP _part/86/_geo_xyz/16,13,0 0.0\nP _part/86/_geo_xyz/16,13,1 0.0\nP _part/86/_geo_xyz/16,13,2 0.0\nP _part/86/_geo_xyz/16,14,0 0.0\nP _part/86/_geo_xyz/16,14,1 0.0\nP _part/86/_geo_xyz/16,14,2 0.0\nP _part/86/_geo_xyz/16,15,0 0.0\nP _part/86/_geo_xyz/16,15,1 0.0\nP _part/86/_geo_xyz/16,15,2 0.0\nP _part/86/_geo_xyz/16,16,0 0.0\nP _part/86/_geo_xyz/16,16,1 0.0\nP _part/86/_geo_xyz/16,16,2 0.0\nP _part/86/_geo_xyz/16,17,0 0.0\nP _part/86/_geo_xyz/16,17,1 0.0\nP _part/86/_geo_xyz/16,17,2 0.0\nP _part/86/_geo_xyz/16,2,0 0.0\nP _part/86/_geo_xyz/16,2,1 0.0\nP _part/86/_geo_xyz/16,2,2 0.0\nP _part/86/_geo_xyz/16,3,0 0.0\nP _part/86/_geo_xyz/16,3,1 0.0\nP _part/86/_geo_xyz/16,3,2 0.0\nP _part/86/_geo_xyz/16,4,0 0.0\nP _part/86/_geo_xyz/16,4,1 0.0\nP _part/86/_geo_xyz/16,4,2 0.0\nP _part/86/_geo_xyz/16,5,0 0.0\nP _part/86/_geo_xyz/16,5,1 0.0\nP _part/86/_geo_xyz/16,5,2 0.0\nP _part/86/_geo_xyz/16,6,0 0.0\nP _part/86/_geo_xyz/16,6,1 0.0\nP _part/86/_geo_xyz/16,6,2 0.0\nP _part/86/_geo_xyz/16,7,0 0.0\nP _part/86/_geo_xyz/16,7,1 0.0\nP _part/86/_geo_xyz/16,7,2 0.0\nP _part/86/_geo_xyz/16,8,0 0.0\nP _part/86/_geo_xyz/16,8,1 0.0\nP _part/86/_geo_xyz/16,8,2 0.0\nP _part/86/_geo_xyz/16,9,0 0.0\nP _part/86/_geo_xyz/16,9,1 0.0\nP _part/86/_geo_xyz/16,9,2 0.0\nP _part/86/_geo_xyz/17,0,0 0.0\nP _part/86/_geo_xyz/17,0,1 0.0\nP _part/86/_geo_xyz/17,0,2 0.0\nP _part/86/_geo_xyz/17,1,0 0.0\nP _part/86/_geo_xyz/17,1,1 0.0\nP _part/86/_geo_xyz/17,1,2 0.0\nP _part/86/_geo_xyz/17,10,0 0.0\nP _part/86/_geo_xyz/17,10,1 0.0\nP _part/86/_geo_xyz/17,10,2 0.0\nP _part/86/_geo_xyz/17,11,0 0.0\nP _part/86/_geo_xyz/17,11,1 0.0\nP _part/86/_geo_xyz/17,11,2 0.0\nP _part/86/_geo_xyz/17,12,0 0.0\nP _part/86/_geo_xyz/17,12,1 0.0\nP _part/86/_geo_xyz/17,12,2 0.0\nP _part/86/_geo_xyz/17,13,0 0.0\nP _part/86/_geo_xyz/17,13,1 0.0\nP _part/86/_geo_xyz/17,13,2 0.0\nP _part/86/_geo_xyz/17,14,0 0.0\nP _part/86/_geo_xyz/17,14,1 0.0\nP _part/86/_geo_xyz/17,14,2 0.0\nP _part/86/_geo_xyz/17,15,0 0.0\nP _part/86/_geo_xyz/17,15,1 0.0\nP _part/86/_geo_xyz/17,15,2 0.0\nP _part/86/_geo_xyz/17,16,0 0.0\nP _part/86/_geo_xyz/17,16,1 0.0\nP _part/86/_geo_xyz/17,16,2 0.0\nP _part/86/_geo_xyz/17,17,0 0.0\nP _part/86/_geo_xyz/17,17,1 0.0\nP _part/86/_geo_xyz/17,17,2 0.0\nP _part/86/_geo_xyz/17,2,0 0.0\nP _part/86/_geo_xyz/17,2,1 0.0\nP _part/86/_geo_xyz/17,2,2 0.0\nP _part/86/_geo_xyz/17,3,0 0.0\nP _part/86/_geo_xyz/17,3,1 0.0\nP _part/86/_geo_xyz/17,3,2 0.0\nP _part/86/_geo_xyz/17,4,0 0.0\nP _part/86/_geo_xyz/17,4,1 0.0\nP _part/86/_geo_xyz/17,4,2 0.0\nP _part/86/_geo_xyz/17,5,0 0.0\nP _part/86/_geo_xyz/17,5,1 0.0\nP _part/86/_geo_xyz/17,5,2 0.0\nP _part/86/_geo_xyz/17,6,0 0.0\nP _part/86/_geo_xyz/17,6,1 0.0\nP _part/86/_geo_xyz/17,6,2 0.0\nP _part/86/_geo_xyz/17,7,0 0.0\nP _part/86/_geo_xyz/17,7,1 0.0\nP _part/86/_geo_xyz/17,7,2 0.0\nP _part/86/_geo_xyz/17,8,0 0.0\nP _part/86/_geo_xyz/17,8,1 0.0\nP _part/86/_geo_xyz/17,8,2 0.0\nP _part/86/_geo_xyz/17,9,0 0.0\nP _part/86/_geo_xyz/17,9,1 0.0\nP _part/86/_geo_xyz/17,9,2 0.0\nP _part/86/_geo_xyz/18,0,0 0.0\nP _part/86/_geo_xyz/18,0,1 0.0\nP _part/86/_geo_xyz/18,0,2 0.0\nP _part/86/_geo_xyz/18,1,0 0.0\nP _part/86/_geo_xyz/18,1,1 0.0\nP _part/86/_geo_xyz/18,1,2 0.0\nP _part/86/_geo_xyz/18,10,0 0.0\nP _part/86/_geo_xyz/18,10,1 0.0\nP _part/86/_geo_xyz/18,10,2 0.0\nP _part/86/_geo_xyz/18,11,0 0.0\nP _part/86/_geo_xyz/18,11,1 0.0\nP _part/86/_geo_xyz/18,11,2 0.0\nP _part/86/_geo_xyz/18,12,0 0.0\nP _part/86/_geo_xyz/18,12,1 0.0\nP _part/86/_geo_xyz/18,12,2 0.0\nP _part/86/_geo_xyz/18,13,0 0.0\nP _part/86/_geo_xyz/18,13,1 0.0\nP _part/86/_geo_xyz/18,13,2 0.0\nP _part/86/_geo_xyz/18,14,0 0.0\nP _part/86/_geo_xyz/18,14,1 0.0\nP _part/86/_geo_xyz/18,14,2 0.0\nP _part/86/_geo_xyz/18,15,0 0.0\nP _part/86/_geo_xyz/18,15,1 0.0\nP _part/86/_geo_xyz/18,15,2 0.0\nP _part/86/_geo_xyz/18,16,0 0.0\nP _part/86/_geo_xyz/18,16,1 0.0\nP _part/86/_geo_xyz/18,16,2 0.0\nP _part/86/_geo_xyz/18,17,0 0.0\nP _part/86/_geo_xyz/18,17,1 0.0\nP _part/86/_geo_xyz/18,17,2 0.0\nP _part/86/_geo_xyz/18,2,0 0.0\nP _part/86/_geo_xyz/18,2,1 0.0\nP _part/86/_geo_xyz/18,2,2 0.0\nP _part/86/_geo_xyz/18,3,0 0.0\nP _part/86/_geo_xyz/18,3,1 0.0\nP _part/86/_geo_xyz/18,3,2 0.0\nP _part/86/_geo_xyz/18,4,0 0.0\nP _part/86/_geo_xyz/18,4,1 0.0\nP _part/86/_geo_xyz/18,4,2 0.0\nP _part/86/_geo_xyz/18,5,0 0.0\nP _part/86/_geo_xyz/18,5,1 0.0\nP _part/86/_geo_xyz/18,5,2 0.0\nP _part/86/_geo_xyz/18,6,0 0.0\nP _part/86/_geo_xyz/18,6,1 0.0\nP _part/86/_geo_xyz/18,6,2 0.0\nP _part/86/_geo_xyz/18,7,0 0.0\nP _part/86/_geo_xyz/18,7,1 0.0\nP _part/86/_geo_xyz/18,7,2 0.0\nP _part/86/_geo_xyz/18,8,0 0.0\nP _part/86/_geo_xyz/18,8,1 0.0\nP _part/86/_geo_xyz/18,8,2 0.0\nP _part/86/_geo_xyz/18,9,0 0.0\nP _part/86/_geo_xyz/18,9,1 0.0\nP _part/86/_geo_xyz/18,9,2 0.0\nP _part/86/_geo_xyz/19,0,0 0.0\nP _part/86/_geo_xyz/19,0,1 0.0\nP _part/86/_geo_xyz/19,0,2 0.0\nP _part/86/_geo_xyz/19,1,0 0.0\nP _part/86/_geo_xyz/19,1,1 0.0\nP _part/86/_geo_xyz/19,1,2 0.0\nP _part/86/_geo_xyz/19,10,0 0.0\nP _part/86/_geo_xyz/19,10,1 0.0\nP _part/86/_geo_xyz/19,10,2 0.0\nP _part/86/_geo_xyz/19,11,0 0.0\nP _part/86/_geo_xyz/19,11,1 0.0\nP _part/86/_geo_xyz/19,11,2 0.0\nP _part/86/_geo_xyz/19,12,0 0.0\nP _part/86/_geo_xyz/19,12,1 0.0\nP _part/86/_geo_xyz/19,12,2 0.0\nP _part/86/_geo_xyz/19,13,0 0.0\nP _part/86/_geo_xyz/19,13,1 0.0\nP _part/86/_geo_xyz/19,13,2 0.0\nP _part/86/_geo_xyz/19,14,0 0.0\nP _part/86/_geo_xyz/19,14,1 0.0\nP _part/86/_geo_xyz/19,14,2 0.0\nP _part/86/_geo_xyz/19,15,0 0.0\nP _part/86/_geo_xyz/19,15,1 0.0\nP _part/86/_geo_xyz/19,15,2 0.0\nP _part/86/_geo_xyz/19,16,0 0.0\nP _part/86/_geo_xyz/19,16,1 0.0\nP _part/86/_geo_xyz/19,16,2 0.0\nP _part/86/_geo_xyz/19,17,0 0.0\nP _part/86/_geo_xyz/19,17,1 0.0\nP _part/86/_geo_xyz/19,17,2 0.0\nP _part/86/_geo_xyz/19,2,0 0.0\nP _part/86/_geo_xyz/19,2,1 0.0\nP _part/86/_geo_xyz/19,2,2 0.0\nP _part/86/_geo_xyz/19,3,0 0.0\nP _part/86/_geo_xyz/19,3,1 0.0\nP _part/86/_geo_xyz/19,3,2 0.0\nP _part/86/_geo_xyz/19,4,0 0.0\nP _part/86/_geo_xyz/19,4,1 0.0\nP _part/86/_geo_xyz/19,4,2 0.0\nP _part/86/_geo_xyz/19,5,0 0.0\nP _part/86/_geo_xyz/19,5,1 0.0\nP _part/86/_geo_xyz/19,5,2 0.0\nP _part/86/_geo_xyz/19,6,0 0.0\nP _part/86/_geo_xyz/19,6,1 0.0\nP _part/86/_geo_xyz/19,6,2 0.0\nP _part/86/_geo_xyz/19,7,0 0.0\nP _part/86/_geo_xyz/19,7,1 0.0\nP _part/86/_geo_xyz/19,7,2 0.0\nP _part/86/_geo_xyz/19,8,0 0.0\nP _part/86/_geo_xyz/19,8,1 0.0\nP _part/86/_geo_xyz/19,8,2 0.0\nP _part/86/_geo_xyz/19,9,0 0.0\nP _part/86/_geo_xyz/19,9,1 0.0\nP _part/86/_geo_xyz/19,9,2 0.0\nP _part/86/_geo_xyz/2,0,0 0.0\nP _part/86/_geo_xyz/2,0,1 2.0\nP _part/86/_geo_xyz/2,0,2 2.0\nP _part/86/_geo_xyz/2,1,0 1.414213538\nP _part/86/_geo_xyz/2,1,1 1.414213538\nP _part/86/_geo_xyz/2,1,2 2.0\nP _part/86/_geo_xyz/2,10,0 0.0\nP _part/86/_geo_xyz/2,10,1 0.0\nP _part/86/_geo_xyz/2,10,2 0.0\nP _part/86/_geo_xyz/2,11,0 0.0\nP _part/86/_geo_xyz/2,11,1 0.0\nP _part/86/_geo_xyz/2,11,2 0.0\nP _part/86/_geo_xyz/2,12,0 0.0\nP _part/86/_geo_xyz/2,12,1 0.0\nP _part/86/_geo_xyz/2,12,2 0.0\nP _part/86/_geo_xyz/2,13,0 0.0\nP _part/86/_geo_xyz/2,13,1 0.0\nP _part/86/_geo_xyz/2,13,2 0.0\nP _part/86/_geo_xyz/2,14,0 0.0\nP _part/86/_geo_xyz/2,14,1 0.0\nP _part/86/_geo_xyz/2,14,2 0.0\nP _part/86/_geo_xyz/2,15,0 0.0\nP _part/86/_geo_xyz/2,15,1 0.0\nP _part/86/_geo_xyz/2,15,2 0.0\nP _part/86/_geo_xyz/2,16,0 0.0\nP _part/86/_geo_xyz/2,16,1 0.0\nP _part/86/_geo_xyz/2,16,2 0.0\nP _part/86/_geo_xyz/2,17,0 0.0\nP _part/86/_geo_xyz/2,17,1 0.0\nP _part/86/_geo_xyz/2,17,2 0.0\nP _part/86/_geo_xyz/2,2,0 2.0\nP _part/86/_geo_xyz/2,2,1 -0.000000087\nP _part/86/_geo_xyz/2,2,2 2.0\nP _part/86/_geo_xyz/2,3,0 1.414213538\nP _part/86/_geo_xyz/2,3,1 -1.414213538\nP _part/86/_geo_xyz/2,3,2 2.0\nP _part/86/_geo_xyz/2,4,0 -0.000000175\nP _part/86/_geo_xyz/2,4,1 -2.0\nP _part/86/_geo_xyz/2,4,2 2.0\nP _part/86/_geo_xyz/2,5,0 -0.000000175\nP _part/86/_geo_xyz/2,5,1 -2.0\nP _part/86/_geo_xyz/2,5,2 2.0\nP _part/86/_geo_xyz/2,6,0 -1.414213777\nP _part/86/_geo_xyz/2,6,1 -1.414213300\nP _part/86/_geo_xyz/2,6,2 2.0\nP _part/86/_geo_xyz/2,7,0 -2.0\nP _part/86/_geo_xyz/2,7,1 0.000000024\nP _part/86/_geo_xyz/2,7,2 2.0\nP _part/86/_geo_xyz/2,8,0 -1.414213061\nP _part/86/_geo_xyz/2,8,1 1.414214015\nP _part/86/_geo_xyz/2,8,2 2.0\nP _part/86/_geo_xyz/2,9,0 0.000000350\nP _part/86/_geo_xyz/2,9,1 2.0\nP _part/86/_geo_xyz/2,9,2 2.0\nP _part/86/_geo_xyz/3,0,0 0.0\nP _part/86/_geo_xyz/3,0,1 2.0\nP _part/86/_geo_xyz/3,0,2 3.0\nP _part/86/_geo_xyz/3,1,0 1.414213538\nP _part/86/_geo_xyz/3,1,1 1.414213538\nP _part/86/_geo_xyz/3,1,2 3.0\nP _part/86/_geo_xyz/3,10,0 0.0\nP _part/86/_geo_xyz/3,10,1 0.0\nP _part/86/_geo_xyz/3,10,2 0.0\nP _part/86/_geo_xyz/3,11,0 0.0\nP _part/86/_geo_xyz/3,11,1 0.0\nP _part/86/_geo_xyz/3,11,2 0.0\nP _part/86/_geo_xyz/3,12,0 0.0\nP _part/86/_geo_xyz/3,12,1 0.0\nP _part/86/_geo_xyz/3,12,2 0.0\nP _part/86/_geo_xyz/3,13,0 0.0\nP _part/86/_geo_xyz/3,13,1 0.0\nP _part/86/_geo_xyz/3,13,2 0.0\nP _part/86/_geo_xyz/3,14,0 0.0\nP _part/86/_geo_xyz/3,14,1 0.0\nP _part/86/_geo_xyz/3,14,2 0.0\nP _part/86/_geo_xyz/3,15,0 0.0\nP _part/86/_geo_xyz/3,15,1 0.0\nP _part/86/_geo_xyz/3,15,2 0.0\nP _part/86/_geo_xyz/3,16,0 0.0\nP _part/86/_geo_xyz/3,16,1 0.0\nP _part/86/_geo_xyz/3,16,2 0.0\nP _part/86/_geo_xyz/3,17,0 0.0\nP _part/86/_geo_xyz/3,17,1 0.0\nP _part/86/_geo_xyz/3,17,2 0.0\nP _part/86/_geo_xyz/3,2,0 2.0\nP _part/86/_geo_xyz/3,2,1 -0.000000087\nP _part/86/_geo_xyz/3,2,2 3.0\nP _part/86/_geo_xyz/3,3,0 1.414213538\nP _part/86/_geo_xyz/3,3,1 -1.414213538\nP _part/86/_geo_xyz/3,3,2 3.0\nP _part/86/_geo_xyz/3,4,0 -0.000000175\nP _part/86/_geo_xyz/3,4,1 -2.0\nP _part/86/_geo_xyz/3,4,2 3.0\nP _part/86/_geo_xyz/3,5,0 -0.000000175\nP _part/86/_geo_xyz/3,5,1 -2.0\nP _part/86/_geo_xyz/3,5,2 3.0\nP _part/86/_geo_xyz/3,6,0 -1.414213777\nP _part/86/_geo_xyz/3,6,1 -1.414213300\nP _part/86/_geo_xyz/3,6,2 3.0\nP _part/86/_geo_xyz/3,7,0 -2.0\nP _part/86/_geo_xyz/3,7,1 0.000000024\nP _part/86/_geo_xyz/3,7,2 3.0\nP _part/86/_geo_xyz/3,8,0 -1.414213061\nP _part/86/_geo_xyz/3,8,1 1.414214015\nP _part/86/_geo_xyz/3,8,2 3.0\nP _part/86/_geo_xyz/3,9,0 0.000000350\nP _part/86/_geo_xyz/3,9,1 2.0\nP _part/86/_geo_xyz/3,9,2 3.0\nP _part/86/_geo_xyz/4,0,0 0.0\nP _part/86/_geo_xyz/4,0,1 2.0\nP _part/86/_geo_xyz/4,0,2 4.0\nP _part/86/_geo_xyz/4,1,0 1.414213538\nP _part/86/_geo_xyz/4,1,1 1.414213538\nP _part/86/_geo_xyz/4,1,2 4.0\nP _part/86/_geo_xyz/4,10,0 0.0\nP _part/86/_geo_xyz/4,10,1 0.0\nP _part/86/_geo_xyz/4,10,2 0.0\nP _part/86/_geo_xyz/4,11,0 0.0\nP _part/86/_geo_xyz/4,11,1 0.0\nP _part/86/_geo_xyz/4,11,2 0.0\nP _part/86/_geo_xyz/4,12,0 0.0\nP _part/86/_geo_xyz/4,12,1 0.0\nP _part/86/_geo_xyz/4,12,2 0.0\nP _part/86/_geo_xyz/4,13,0 0.0\nP _part/86/_geo_xyz/4,13,1 0.0\nP _part/86/_geo_xyz/4,13,2 0.0\nP _part/86/_geo_xyz/4,14,0 0.0\nP _part/86/_geo_xyz/4,14,1 0.0\nP _part/86/_geo_xyz/4,14,2 0.0\nP _part/86/_geo_xyz/4,15,0 0.0\nP _part/86/_geo_xyz/4,15,1 0.0\nP _part/86/_geo_xyz/4,15,2 0.0\nP _part/86/_geo_xyz/4,16,0 0.0\nP _part/86/_geo_xyz/4,16,1 0.0\nP _part/86/_geo_xyz/4,16,2 0.0\nP _part/86/_geo_xyz/4,17,0 0.0\nP _part/86/_geo_xyz/4,17,1 0.0\nP _part/86/_geo_xyz/4,17,2 0.0\nP _part/86/_geo_xyz/4,2,0 2.0\nP _part/86/_geo_xyz/4,2,1 -0.000000087\nP _part/86/_geo_xyz/4,2,2 4.0\nP _part/86/_geo_xyz/4,3,0 1.414213538\nP _part/86/_geo_xyz/4,3,1 -1.414213538\nP _part/86/_geo_xyz/4,3,2 4.0\nP _part/86/_geo_xyz/4,4,0 -0.000000175\nP _part/86/_geo_xyz/4,4,1 -2.0\nP _part/86/_geo_xyz/4,4,2 4.0\nP _part/86/_geo_xyz/4,5,0 -0.000000175\nP _part/86/_geo_xyz/4,5,1 -2.0\nP _part/86/_geo_xyz/4,5,2 4.0\nP _part/86/_geo_xyz/4,6,0 -1.414213777\nP _part/86/_geo_xyz/4,6,1 -1.414213300\nP _part/86/_geo_xyz/4,6,2 4.0\nP _part/86/_geo_xyz/4,7,0 -2.0\nP _part/86/_geo_xyz/4,7,1 0.000000024\nP _part/86/_geo_xyz/4,7,2 4.0\nP _part/86/_geo_xyz/4,8,0 -1.414213061\nP _part/86/_geo_xyz/4,8,1 1.414214015\nP _part/86/_geo_xyz/4,8,2 4.0\nP _part/86/_geo_xyz/4,9,0 0.000000350\nP _part/86/_geo_xyz/4,9,1 2.0\nP _part/86/_geo_xyz/4,9,2 4.0\nP _part/86/_geo_xyz/5,0,0 0.0\nP _part/86/_geo_xyz/5,0,1 2.0\nP _part/86/_geo_xyz/5,0,2 5.0\nP _part/86/_geo_xyz/5,1,0 1.414213538\nP _part/86/_geo_xyz/5,1,1 1.414213538\nP _part/86/_geo_xyz/5,1,2 5.0\nP _part/86/_geo_xyz/5,10,0 0.0\nP _part/86/_geo_xyz/5,10,1 0.0\nP _part/86/_geo_xyz/5,10,2 0.0\nP _part/86/_geo_xyz/5,11,0 0.0\nP _part/86/_geo_xyz/5,11,1 0.0\nP _part/86/_geo_xyz/5,11,2 0.0\nP _part/86/_geo_xyz/5,12,0 0.0\nP _part/86/_geo_xyz/5,12,1 0.0\nP _part/86/_geo_xyz/5,12,2 0.0\nP _part/86/_geo_xyz/5,13,0 0.0\nP _part/86/_geo_xyz/5,13,1 0.0\nP _part/86/_geo_xyz/5,13,2 0.0\nP _part/86/_geo_xyz/5,14,0 0.0\nP _part/86/_geo_xyz/5,14,1 0.0\nP _part/86/_geo_xyz/5,14,2 0.0\nP _part/86/_geo_xyz/5,15,0 0.0\nP _part/86/_geo_xyz/5,15,1 0.0\nP _part/86/_geo_xyz/5,15,2 0.0\nP _part/86/_geo_xyz/5,16,0 0.0\nP _part/86/_geo_xyz/5,16,1 0.0\nP _part/86/_geo_xyz/5,16,2 0.0\nP _part/86/_geo_xyz/5,17,0 0.0\nP _part/86/_geo_xyz/5,17,1 0.0\nP _part/86/_geo_xyz/5,17,2 0.0\nP _part/86/_geo_xyz/5,2,0 2.0\nP _part/86/_geo_xyz/5,2,1 -0.000000087\nP _part/86/_geo_xyz/5,2,2 5.0\nP _part/86/_geo_xyz/5,3,0 1.414213538\nP _part/86/_geo_xyz/5,3,1 -1.414213538\nP _part/86/_geo_xyz/5,3,2 5.0\nP _part/86/_geo_xyz/5,4,0 -0.000000175\nP _part/86/_geo_xyz/5,4,1 -2.0\nP _part/86/_geo_xyz/5,4,2 5.0\nP _part/86/_geo_xyz/5,5,0 -0.000000175\nP _part/86/_geo_xyz/5,5,1 -2.0\nP _part/86/_geo_xyz/5,5,2 5.0\nP _part/86/_geo_xyz/5,6,0 -1.414213777\nP _part/86/_geo_xyz/5,6,1 -1.414213300\nP _part/86/_geo_xyz/5,6,2 5.0\nP _part/86/_geo_xyz/5,7,0 -2.0\nP _part/86/_geo_xyz/5,7,1 0.000000024\nP _part/86/_geo_xyz/5,7,2 5.0\nP _part/86/_geo_xyz/5,8,0 -1.414213061\nP _part/86/_geo_xyz/5,8,1 1.414214015\nP _part/86/_geo_xyz/5,8,2 5.0\nP _part/86/_geo_xyz/5,9,0 0.000000350\nP _part/86/_geo_xyz/5,9,1 2.0\nP _part/86/_geo_xyz/5,9,2 5.0\nP _part/86/_geo_xyz/6,0,0 0.0\nP _part/86/_geo_xyz/6,0,1 2.0\nP _part/86/_geo_xyz/6,0,2 6.0\nP _part/86/_geo_xyz/6,1,0 1.414213538\nP _part/86/_geo_xyz/6,1,1 1.414213538\nP _part/86/_geo_xyz/6,1,2 6.0\nP _part/86/_geo_xyz/6,10,0 0.0\nP _part/86/_geo_xyz/6,10,1 0.0\nP _part/86/_geo_xyz/6,10,2 0.0\nP _part/86/_geo_xyz/6,11,0 0.0\nP _part/86/_geo_xyz/6,11,1 0.0\nP _part/86/_geo_xyz/6,11,2 0.0\nP _part/86/_geo_xyz/6,12,0 0.0\nP _part/86/_geo_xyz/6,12,1 0.0\nP _part/86/_geo_xyz/6,12,2 0.0\nP _part/86/_geo_xyz/6,13,0 0.0\nP _part/86/_geo_xyz/6,13,1 0.0\nP _part/86/_geo_xyz/6,13,2 0.0\nP _part/86/_geo_xyz/6,14,0 0.0\nP _part/86/_geo_xyz/6,14,1 0.0\nP _part/86/_geo_xyz/6,14,2 0.0\nP _part/86/_geo_xyz/6,15,0 0.0\nP _part/86/_geo_xyz/6,15,1 0.0\nP _part/86/_geo_xyz/6,15,2 0.0\nP _part/86/_geo_xyz/6,16,0 0.0\nP _part/86/_geo_xyz/6,16,1 0.0\nP _part/86/_geo_xyz/6,16,2 0.0\nP _part/86/_geo_xyz/6,17,0 0.0\nP _part/86/_geo_xyz/6,17,1 0.0\nP _part/86/_geo_xyz/6,17,2 0.0\nP _part/86/_geo_xyz/6,2,0 2.0\nP _part/86/_geo_xyz/6,2,1 -0.000000087\nP _part/86/_geo_xyz/6,2,2 6.0\nP _part/86/_geo_xyz/6,3,0 1.414213538\nP _part/86/_geo_xyz/6,3,1 -1.414213538\nP _part/86/_geo_xyz/6,3,2 6.0\nP _part/86/_geo_xyz/6,4,0 -0.000000175\nP _part/86/_geo_xyz/6,4,1 -2.0\nP _part/86/_geo_xyz/6,4,2 6.0\nP _part/86/_geo_xyz/6,5,0 -0.000000175\nP _part/86/_geo_xyz/6,5,1 -2.0\nP _part/86/_geo_xyz/6,5,2 6.0\nP _part/86/_geo_xyz/6,6,0 -1.414213777\nP _part/86/_geo_xyz/6,6,1 -1.414213300\nP _part/86/_geo_xyz/6,6,2 6.0\nP _part/86/_geo_xyz/6,7,0 -2.0\nP _part/86/_geo_xyz/6,7,1 0.000000024\nP _part/86/_geo_xyz/6,7,2 6.0\nP _part/86/_geo_xyz/6,8,0 -1.414213061\nP _part/86/_geo_xyz/6,8,1 1.414214015\nP _part/86/_geo_xyz/6,8,2 6.0\nP _part/86/_geo_xyz/6,9,0 0.000000350\nP _part/86/_geo_xyz/6,9,1 2.0\nP _part/86/_geo_xyz/6,9,2 6.0\nP _part/86/_geo_xyz/7,0,0 0.0\nP _part/86/_geo_xyz/7,0,1 2.0\nP _part/86/_geo_xyz/7,0,2 7.0\nP _part/86/_geo_xyz/7,1,0 1.414213538\nP _part/86/_geo_xyz/7,1,1 1.414213538\nP _part/86/_geo_xyz/7,1,2 7.0\nP _part/86/_geo_xyz/7,10,0 0.0\nP _part/86/_geo_xyz/7,10,1 0.0\nP _part/86/_geo_xyz/7,10,2 0.0\nP _part/86/_geo_xyz/7,11,0 0.0\nP _part/86/_geo_xyz/7,11,1 0.0\nP _part/86/_geo_xyz/7,11,2 0.0\nP _part/86/_geo_xyz/7,12,0 0.0\nP _part/86/_geo_xyz/7,12,1 0.0\nP _part/86/_geo_xyz/7,12,2 0.0\nP _part/86/_geo_xyz/7,13,0 0.0\nP _part/86/_geo_xyz/7,13,1 0.0\nP _part/86/_geo_xyz/7,13,2 0.0\nP _part/86/_geo_xyz/7,14,0 0.0\nP _part/86/_geo_xyz/7,14,1 0.0\nP _part/86/_geo_xyz/7,14,2 0.0\nP _part/86/_geo_xyz/7,15,0 0.0\nP _part/86/_geo_xyz/7,15,1 0.0\nP _part/86/_geo_xyz/7,15,2 0.0\nP _part/86/_geo_xyz/7,16,0 0.0\nP _part/86/_geo_xyz/7,16,1 0.0\nP _part/86/_geo_xyz/7,16,2 0.0\nP _part/86/_geo_xyz/7,17,0 0.0\nP _part/86/_geo_xyz/7,17,1 0.0\nP _part/86/_geo_xyz/7,17,2 0.0\nP _part/86/_geo_xyz/7,2,0 2.0\nP _part/86/_geo_xyz/7,2,1 -0.000000087\nP _part/86/_geo_xyz/7,2,2 7.0\nP _part/86/_geo_xyz/7,3,0 1.414213538\nP _part/86/_geo_xyz/7,3,1 -1.414213538\nP _part/86/_geo_xyz/7,3,2 7.0\nP _part/86/_geo_xyz/7,4,0 -0.000000175\nP _part/86/_geo_xyz/7,4,1 -2.0\nP _part/86/_geo_xyz/7,4,2 7.0\nP _part/86/_geo_xyz/7,5,0 -0.000000175\nP _part/86/_geo_xyz/7,5,1 -2.0\nP _part/86/_geo_xyz/7,5,2 7.0\nP _part/86/_geo_xyz/7,6,0 -1.414213777\nP _part/86/_geo_xyz/7,6,1 -1.414213300\nP _part/86/_geo_xyz/7,6,2 7.0\nP _part/86/_geo_xyz/7,7,0 -2.0\nP _part/86/_geo_xyz/7,7,1 0.000000024\nP _part/86/_geo_xyz/7,7,2 7.0\nP _part/86/_geo_xyz/7,8,0 -1.414213061\nP _part/86/_geo_xyz/7,8,1 1.414214015\nP _part/86/_geo_xyz/7,8,2 7.0\nP _part/86/_geo_xyz/7,9,0 0.000000350\nP _part/86/_geo_xyz/7,9,1 2.0\nP _part/86/_geo_xyz/7,9,2 7.0\nP _part/86/_geo_xyz/8,0,0 0.0\nP _part/86/_geo_xyz/8,0,1 0.0\nP _part/86/_geo_xyz/8,0,2 0.0\nP _part/86/_geo_xyz/8,1,0 0.0\nP _part/86/_geo_xyz/8,1,1 0.0\nP _part/86/_geo_xyz/8,1,2 0.0\nP _part/86/_geo_xyz/8,10,0 0.0\nP _part/86/_geo_xyz/8,10,1 0.0\nP _part/86/_geo_xyz/8,10,2 0.0\nP _part/86/_geo_xyz/8,11,0 0.0\nP _part/86/_geo_xyz/8,11,1 0.0\nP _part/86/_geo_xyz/8,11,2 0.0\nP _part/86/_geo_xyz/8,12,0 0.0\nP _part/86/_geo_xyz/8,12,1 0.0\nP _part/86/_geo_xyz/8,12,2 0.0\nP _part/86/_geo_xyz/8,13,0 0.0\nP _part/86/_geo_xyz/8,13,1 0.0\nP _part/86/_geo_xyz/8,13,2 0.0\nP _part/86/_geo_xyz/8,14,0 0.0\nP _part/86/_geo_xyz/8,14,1 0.0\nP _part/86/_geo_xyz/8,14,2 0.0\nP _part/86/_geo_xyz/8,15,0 0.0\nP _part/86/_geo_xyz/8,15,1 0.0\nP _part/86/_geo_xyz/8,15,2 0.0\nP _part/86/_geo_xyz/8,16,0 0.0\nP _part/86/_geo_xyz/8,16,1 0.0\nP _part/86/_geo_xyz/8,16,2 0.0\nP _part/86/_geo_xyz/8,17,0 0.0\nP _part/86/_geo_xyz/8,17,1 0.0\nP _part/86/_geo_xyz/8,17,2 0.0\nP _part/86/_geo_xyz/8,2,0 0.0\nP _part/86/_geo_xyz/8,2,1 0.0\nP _part/86/_geo_xyz/8,2,2 0.0\nP _part/86/_geo_xyz/8,3,0 0.0\nP _part/86/_geo_xyz/8,3,1 0.0\nP _part/86/_geo_xyz/8,3,2 0.0\nP _part/86/_geo_xyz/8,4,0 0.0\nP _part/86/_geo_xyz/8,4,1 0.0\nP _part/86/_geo_xyz/8,4,2 0.0\nP _part/86/_geo_xyz/8,5,0 0.0\nP _part/86/_geo_xyz/8,5,1 0.0\nP _part/86/_geo_xyz/8,5,2 0.0\nP _part/86/_geo_xyz/8,6,0 0.0\nP _part/86/_geo_xyz/8,6,1 0.0\nP _part/86/_geo_xyz/8,6,2 0.0\nP _part/86/_geo_xyz/8,7,0 0.0\nP _part/86/_geo_xyz/8,7,1 0.0\nP _part/86/_geo_xyz/8,7,2 0.0\nP _part/86/_geo_xyz/8,8,0 0.0\nP _part/86/_geo_xyz/8,8,1 0.0\nP _part/86/_geo_xyz/8,8,2 0.0\nP _part/86/_geo_xyz/8,9,0 0.0\nP _part/86/_geo_xyz/8,9,1 0.0\nP _part/86/_geo_xyz/8,9,2 0.0\nP _part/86/_geo_xyz/9,0,0 0.0\nP _part/86/_geo_xyz/9,0,1 0.0\nP _part/86/_geo_xyz/9,0,2 0.0\nP _part/86/_geo_xyz/9,1,0 0.0\nP _part/86/_geo_xyz/9,1,1 0.0\nP _part/86/_geo_xyz/9,1,2 0.0\nP _part/86/_geo_xyz/9,10,0 0.0\nP _part/86/_geo_xyz/9,10,1 0.0\nP _part/86/_geo_xyz/9,10,2 0.0\nP _part/86/_geo_xyz/9,11,0 0.0\nP _part/86/_geo_xyz/9,11,1 0.0\nP _part/86/_geo_xyz/9,11,2 0.0\nP _part/86/_geo_xyz/9,12,0 0.0\nP _part/86/_geo_xyz/9,12,1 0.0\nP _part/86/_geo_xyz/9,12,2 0.0\nP _part/86/_geo_xyz/9,13,0 0.0\nP _part/86/_geo_xyz/9,13,1 0.0\nP _part/86/_geo_xyz/9,13,2 0.0\nP _part/86/_geo_xyz/9,14,0 0.0\nP _part/86/_geo_xyz/9,14,1 0.0\nP _part/86/_geo_xyz/9,14,2 0.0\nP _part/86/_geo_xyz/9,15,0 0.0\nP _part/86/_geo_xyz/9,15,1 0.0\nP _part/86/_geo_xyz/9,15,2 0.0\nP _part/86/_geo_xyz/9,16,0 0.0\nP _part/86/_geo_xyz/9,16,1 0.0\nP _part/86/_geo_xyz/9,16,2 0.0\nP _part/86/_geo_xyz/9,17,0 0.0\nP _part/86/_geo_xyz/9,17,1 0.0\nP _part/86/_geo_xyz/9,17,2 0.0\nP _part/86/_geo_xyz/9,2,0 0.0\nP _part/86/_geo_xyz/9,2,1 0.0\nP _part/86/_geo_xyz/9,2,2 0.0\nP _part/86/_geo_xyz/9,3,0 0.0\nP _part/86/_geo_xyz/9,3,1 0.0\nP _part/86/_geo_xyz/9,3,2 0.0\nP _part/86/_geo_xyz/9,4,0 0.0\nP _part/86/_geo_xyz/9,4,1 0.0\nP _part/86/_geo_xyz/9,4,2 0.0\nP _part/86/_geo_xyz/9,5,0 0.0\nP _part/86/_geo_xyz/9,5,1 0.0\nP _part/86/_geo_xyz/9,5,2 0.0\nP _part/86/_geo_xyz/9,6,0 0.0\nP _part/86/_geo_xyz/9,6,1 0.0\nP _part/86/_geo_xyz/9,6,2 0.0\nP _part/86/_geo_xyz/9,7,0 0.0\nP _part/86/_geo_xyz/9,7,1 0.0\nP _part/86/_geo_xyz/9,7,2 0.0\nP _part/86/_geo_xyz/9,8,0 0.0\nP _part/86/_geo_xyz/9,8,1 0.0\nP _part/86/_geo_xyz/9,8,2 0.0\nP _part/86/_geo_xyz/9,9,0 0.0\nP _part/86/_geo_xyz/9,9,1 0.0\nP _part/86/_geo_xyz/9,9,2 0.0\nP _part/86/_geo_xyz/i_count 20\nP _part/86/_geo_xyz/j_count 18\nP _part/86/_geo_xyz/k_count 3\nP _part/86/_locked/0,0 0\nP _part/86/_locked/0,1 0\nP _part/86/_locked/0,10 0\nP _part/86/_locked/0,11 0\nP _part/86/_locked/0,12 0\nP _part/86/_locked/0,13 0\nP _part/86/_locked/0,14 0\nP _part/86/_locked/0,15 0\nP _part/86/_locked/0,16 0\nP _part/86/_locked/0,17 0\nP _part/86/_locked/0,2 0\nP _part/86/_locked/0,3 0\nP _part/86/_locked/0,4 0\nP _part/86/_locked/0,5 0\nP _part/86/_locked/0,6 0\nP _part/86/_locked/0,7 0\nP _part/86/_locked/0,8 0\nP _part/86/_locked/0,9 0\nP _part/86/_locked/1,0 0\nP _part/86/_locked/1,1 0\nP _part/86/_locked/1,10 0\nP _part/86/_locked/1,11 0\nP _part/86/_locked/1,12 0\nP _part/86/_locked/1,13 0\nP _part/86/_locked/1,14 0\nP _part/86/_locked/1,15 0\nP _part/86/_locked/1,16 0\nP _part/86/_locked/1,17 0\nP _part/86/_locked/1,2 0\nP _part/86/_locked/1,3 0\nP _part/86/_locked/1,4 0\nP _part/86/_locked/1,5 0\nP _part/86/_locked/1,6 0\nP _part/86/_locked/1,7 0\nP _part/86/_locked/1,8 0\nP _part/86/_locked/1,9 0\nP _part/86/_locked/10,0 0\nP _part/86/_locked/10,1 0\nP _part/86/_locked/10,10 0\nP _part/86/_locked/10,11 0\nP _part/86/_locked/10,12 0\nP _part/86/_locked/10,13 0\nP _part/86/_locked/10,14 0\nP _part/86/_locked/10,15 0\nP _part/86/_locked/10,16 0\nP _part/86/_locked/10,17 0\nP _part/86/_locked/10,2 0\nP _part/86/_locked/10,3 0\nP _part/86/_locked/10,4 0\nP _part/86/_locked/10,5 0\nP _part/86/_locked/10,6 0\nP _part/86/_locked/10,7 0\nP _part/86/_locked/10,8 0\nP _part/86/_locked/10,9 0\nP _part/86/_locked/11,0 0\nP _part/86/_locked/11,1 0\nP _part/86/_locked/11,10 0\nP _part/86/_locked/11,11 0\nP _part/86/_locked/11,12 0\nP _part/86/_locked/11,13 0\nP _part/86/_locked/11,14 0\nP _part/86/_locked/11,15 0\nP _part/86/_locked/11,16 0\nP _part/86/_locked/11,17 0\nP _part/86/_locked/11,2 0\nP _part/86/_locked/11,3 0\nP _part/86/_locked/11,4 0\nP _part/86/_locked/11,5 0\nP _part/86/_locked/11,6 0\nP _part/86/_locked/11,7 0\nP _part/86/_locked/11,8 0\nP _part/86/_locked/11,9 0\nP _part/86/_locked/12,0 0\nP _part/86/_locked/12,1 0\nP _part/86/_locked/12,10 0\nP _part/86/_locked/12,11 0\nP _part/86/_locked/12,12 0\nP _part/86/_locked/12,13 0\nP _part/86/_locked/12,14 0\nP _part/86/_locked/12,15 0\nP _part/86/_locked/12,16 0\nP _part/86/_locked/12,17 0\nP _part/86/_locked/12,2 0\nP _part/86/_locked/12,3 0\nP _part/86/_locked/12,4 0\nP _part/86/_locked/12,5 0\nP _part/86/_locked/12,6 0\nP _part/86/_locked/12,7 0\nP _part/86/_locked/12,8 0\nP _part/86/_locked/12,9 0\nP _part/86/_locked/13,0 0\nP _part/86/_locked/13,1 0\nP _part/86/_locked/13,10 0\nP _part/86/_locked/13,11 0\nP _part/86/_locked/13,12 0\nP _part/86/_locked/13,13 0\nP _part/86/_locked/13,14 0\nP _part/86/_locked/13,15 0\nP _part/86/_locked/13,16 0\nP _part/86/_locked/13,17 0\nP _part/86/_locked/13,2 0\nP _part/86/_locked/13,3 0\nP _part/86/_locked/13,4 0\nP _part/86/_locked/13,5 0\nP _part/86/_locked/13,6 0\nP _part/86/_locked/13,7 0\nP _part/86/_locked/13,8 0\nP _part/86/_locked/13,9 0\nP _part/86/_locked/14,0 0\nP _part/86/_locked/14,1 0\nP _part/86/_locked/14,10 0\nP _part/86/_locked/14,11 0\nP _part/86/_locked/14,12 0\nP _part/86/_locked/14,13 0\nP _part/86/_locked/14,14 0\nP _part/86/_locked/14,15 0\nP _part/86/_locked/14,16 0\nP _part/86/_locked/14,17 0\nP _part/86/_locked/14,2 0\nP _part/86/_locked/14,3 0\nP _part/86/_locked/14,4 0\nP _part/86/_locked/14,5 0\nP _part/86/_locked/14,6 0\nP _part/86/_locked/14,7 0\nP _part/86/_locked/14,8 0\nP _part/86/_locked/14,9 0\nP _part/86/_locked/15,0 0\nP _part/86/_locked/15,1 0\nP _part/86/_locked/15,10 0\nP _part/86/_locked/15,11 0\nP _part/86/_locked/15,12 0\nP _part/86/_locked/15,13 0\nP _part/86/_locked/15,14 0\nP _part/86/_locked/15,15 0\nP _part/86/_locked/15,16 0\nP _part/86/_locked/15,17 0\nP _part/86/_locked/15,2 0\nP _part/86/_locked/15,3 0\nP _part/86/_locked/15,4 0\nP _part/86/_locked/15,5 0\nP _part/86/_locked/15,6 0\nP _part/86/_locked/15,7 0\nP _part/86/_locked/15,8 0\nP _part/86/_locked/15,9 0\nP _part/86/_locked/16,0 0\nP _part/86/_locked/16,1 0\nP _part/86/_locked/16,10 0\nP _part/86/_locked/16,11 0\nP _part/86/_locked/16,12 0\nP _part/86/_locked/16,13 0\nP _part/86/_locked/16,14 0\nP _part/86/_locked/16,15 0\nP _part/86/_locked/16,16 0\nP _part/86/_locked/16,17 0\nP _part/86/_locked/16,2 0\nP _part/86/_locked/16,3 0\nP _part/86/_locked/16,4 0\nP _part/86/_locked/16,5 0\nP _part/86/_locked/16,6 0\nP _part/86/_locked/16,7 0\nP _part/86/_locked/16,8 0\nP _part/86/_locked/16,9 0\nP _part/86/_locked/17,0 0\nP _part/86/_locked/17,1 0\nP _part/86/_locked/17,10 0\nP _part/86/_locked/17,11 0\nP _part/86/_locked/17,12 0\nP _part/86/_locked/17,13 0\nP _part/86/_locked/17,14 0\nP _part/86/_locked/17,15 0\nP _part/86/_locked/17,16 0\nP _part/86/_locked/17,17 0\nP _part/86/_locked/17,2 0\nP _part/86/_locked/17,3 0\nP _part/86/_locked/17,4 0\nP _part/86/_locked/17,5 0\nP _part/86/_locked/17,6 0\nP _part/86/_locked/17,7 0\nP _part/86/_locked/17,8 0\nP _part/86/_locked/17,9 0\nP _part/86/_locked/18,0 0\nP _part/86/_locked/18,1 0\nP _part/86/_locked/18,10 0\nP _part/86/_locked/18,11 0\nP _part/86/_locked/18,12 0\nP _part/86/_locked/18,13 0\nP _part/86/_locked/18,14 0\nP _part/86/_locked/18,15 0\nP _part/86/_locked/18,16 0\nP _part/86/_locked/18,17 0\nP _part/86/_locked/18,2 0\nP _part/86/_locked/18,3 0\nP _part/86/_locked/18,4 0\nP _part/86/_locked/18,5 0\nP _part/86/_locked/18,6 0\nP _part/86/_locked/18,7 0\nP _part/86/_locked/18,8 0\nP _part/86/_locked/18,9 0\nP _part/86/_locked/19,0 0\nP _part/86/_locked/19,1 0\nP _part/86/_locked/19,10 0\nP _part/86/_locked/19,11 0\nP _part/86/_locked/19,12 0\nP _part/86/_locked/19,13 0\nP _part/86/_locked/19,14 0\nP _part/86/_locked/19,15 0\nP _part/86/_locked/19,16 0\nP _part/86/_locked/19,17 0\nP _part/86/_locked/19,2 0\nP _part/86/_locked/19,3 0\nP _part/86/_locked/19,4 0\nP _part/86/_locked/19,5 0\nP _part/86/_locked/19,6 0\nP _part/86/_locked/19,7 0\nP _part/86/_locked/19,8 0\nP _part/86/_locked/19,9 0\nP _part/86/_locked/2,0 0\nP _part/86/_locked/2,1 0\nP _part/86/_locked/2,10 0\nP _part/86/_locked/2,11 0\nP _part/86/_locked/2,12 0\nP _part/86/_locked/2,13 0\nP _part/86/_locked/2,14 0\nP _part/86/_locked/2,15 0\nP _part/86/_locked/2,16 0\nP _part/86/_locked/2,17 0\nP _part/86/_locked/2,2 0\nP _part/86/_locked/2,3 0\nP _part/86/_locked/2,4 0\nP _part/86/_locked/2,5 0\nP _part/86/_locked/2,6 0\nP _part/86/_locked/2,7 0\nP _part/86/_locked/2,8 0\nP _part/86/_locked/2,9 0\nP _part/86/_locked/3,0 0\nP _part/86/_locked/3,1 0\nP _part/86/_locked/3,10 0\nP _part/86/_locked/3,11 0\nP _part/86/_locked/3,12 0\nP _part/86/_locked/3,13 0\nP _part/86/_locked/3,14 0\nP _part/86/_locked/3,15 0\nP _part/86/_locked/3,16 0\nP _part/86/_locked/3,17 0\nP _part/86/_locked/3,2 0\nP _part/86/_locked/3,3 0\nP _part/86/_locked/3,4 0\nP _part/86/_locked/3,5 0\nP _part/86/_locked/3,6 0\nP _part/86/_locked/3,7 0\nP _part/86/_locked/3,8 0\nP _part/86/_locked/3,9 0\nP _part/86/_locked/4,0 0\nP _part/86/_locked/4,1 0\nP _part/86/_locked/4,10 0\nP _part/86/_locked/4,11 0\nP _part/86/_locked/4,12 0\nP _part/86/_locked/4,13 0\nP _part/86/_locked/4,14 0\nP _part/86/_locked/4,15 0\nP _part/86/_locked/4,16 0\nP _part/86/_locked/4,17 0\nP _part/86/_locked/4,2 0\nP _part/86/_locked/4,3 0\nP _part/86/_locked/4,4 0\nP _part/86/_locked/4,5 0\nP _part/86/_locked/4,6 0\nP _part/86/_locked/4,7 0\nP _part/86/_locked/4,8 0\nP _part/86/_locked/4,9 0\nP _part/86/_locked/5,0 0\nP _part/86/_locked/5,1 0\nP _part/86/_locked/5,10 0\nP _part/86/_locked/5,11 0\nP _part/86/_locked/5,12 0\nP _part/86/_locked/5,13 0\nP _part/86/_locked/5,14 0\nP _part/86/_locked/5,15 0\nP _part/86/_locked/5,16 0\nP _part/86/_locked/5,17 0\nP _part/86/_locked/5,2 0\nP _part/86/_locked/5,3 0\nP _part/86/_locked/5,4 0\nP _part/86/_locked/5,5 0\nP _part/86/_locked/5,6 0\nP _part/86/_locked/5,7 0\nP _part/86/_locked/5,8 0\nP _part/86/_locked/5,9 0\nP _part/86/_locked/6,0 0\nP _part/86/_locked/6,1 0\nP _part/86/_locked/6,10 0\nP _part/86/_locked/6,11 0\nP _part/86/_locked/6,12 0\nP _part/86/_locked/6,13 0\nP _part/86/_locked/6,14 0\nP _part/86/_locked/6,15 0\nP _part/86/_locked/6,16 0\nP _part/86/_locked/6,17 0\nP _part/86/_locked/6,2 0\nP _part/86/_locked/6,3 0\nP _part/86/_locked/6,4 0\nP _part/86/_locked/6,5 0\nP _part/86/_locked/6,6 0\nP _part/86/_locked/6,7 0\nP _part/86/_locked/6,8 0\nP _part/86/_locked/6,9 0\nP _part/86/_locked/7,0 0\nP _part/86/_locked/7,1 0\nP _part/86/_locked/7,10 0\nP _part/86/_locked/7,11 0\nP _part/86/_locked/7,12 0\nP _part/86/_locked/7,13 0\nP _part/86/_locked/7,14 0\nP _part/86/_locked/7,15 0\nP _part/86/_locked/7,16 0\nP _part/86/_locked/7,17 0\nP _part/86/_locked/7,2 0\nP _part/86/_locked/7,3 0\nP _part/86/_locked/7,4 0\nP _part/86/_locked/7,5 0\nP _part/86/_locked/7,6 0\nP _part/86/_locked/7,7 0\nP _part/86/_locked/7,8 0\nP _part/86/_locked/7,9 0\nP _part/86/_locked/8,0 0\nP _part/86/_locked/8,1 0\nP _part/86/_locked/8,10 0\nP _part/86/_locked/8,11 0\nP _part/86/_locked/8,12 0\nP _part/86/_locked/8,13 0\nP _part/86/_locked/8,14 0\nP _part/86/_locked/8,15 0\nP _part/86/_locked/8,16 0\nP _part/86/_locked/8,17 0\nP _part/86/_locked/8,2 0\nP _part/86/_locked/8,3 0\nP _part/86/_locked/8,4 0\nP _part/86/_locked/8,5 0\nP _part/86/_locked/8,6 0\nP _part/86/_locked/8,7 0\nP _part/86/_locked/8,8 0\nP _part/86/_locked/8,9 0\nP _part/86/_locked/9,0 0\nP _part/86/_locked/9,1 0\nP _part/86/_locked/9,10 0\nP _part/86/_locked/9,11 0\nP _part/86/_locked/9,12 0\nP _part/86/_locked/9,13 0\nP _part/86/_locked/9,14 0\nP _part/86/_locked/9,15 0\nP _part/86/_locked/9,16 0\nP _part/86/_locked/9,17 0\nP _part/86/_locked/9,2 0\nP _part/86/_locked/9,3 0\nP _part/86/_locked/9,4 0\nP _part/86/_locked/9,5 0\nP _part/86/_locked/9,6 0\nP _part/86/_locked/9,7 0\nP _part/86/_locked/9,8 0\nP _part/86/_locked/9,9 0\nP _part/86/_locked/i_count 20\nP _part/86/_locked/j_count 18\nP _part/86/_part_cd 0.075000003\nP _part/86/_part_phi 0.0\nP _part/86/_part_psi 0.0\nP _part/86/_part_rad 2.0\nP _part/86/_part_specs_eq 0\nP _part/86/_part_specs_invis 0\nP _part/86/_part_specs_unused1 0\nP _part/86/_part_specs_unused2 0\nP _part/86/_part_tex 0\nP _part/86/_part_the 0.0\nP _part/86/_part_x 0.0\nP _part/86/_part_y 0.0\nP _part/86/_part_z 0.0\nP _part/86/_patt_con 0\nP _part/86/_patt_prt 0\nP _part/86/_patt_rat 0.0\nP _part/86/_r_dim 10\nP _part/86/_s_dim 8\nP _part/86/_scon 37.676635742\nP _part/86/_top_s1 0.632812500\nP _part/86/_top_s2 0.753906250\nP _part/86/_top_t1 0.254882812\nP _part/86/_top_t2 0.295898438\nP _part/87/_aero_x_os 0.0\nP _part/87/_aero_y_os 0.0\nP _part/87/_aero_z_os 0.0\nP _part/87/_area_frnt 0.0\nP _part/87/_area_side 0.0\nP _part/87/_area_vert 0.0\nP _part/87/_bot_s1 0.632812500\nP _part/87/_bot_s2 0.753906250\nP _part/87/_bot_t1 0.254882812\nP _part/87/_bot_t2 0.295898438\nP _part/87/_damp 1.883831739\nP _part/87/_geo_xyz/0,0,0 0.0\nP _part/87/_geo_xyz/0,0,1 2.0\nP _part/87/_geo_xyz/0,0,2 0.0\nP _part/87/_geo_xyz/0,1,0 1.414213538\nP _part/87/_geo_xyz/0,1,1 1.414213538\nP _part/87/_geo_xyz/0,1,2 0.0\nP _part/87/_geo_xyz/0,10,0 0.0\nP _part/87/_geo_xyz/0,10,1 0.0\nP _part/87/_geo_xyz/0,10,2 0.0\nP _part/87/_geo_xyz/0,11,0 0.0\nP _part/87/_geo_xyz/0,11,1 0.0\nP _part/87/_geo_xyz/0,11,2 0.0\nP _part/87/_geo_xyz/0,12,0 0.0\nP _part/87/_geo_xyz/0,12,1 0.0\nP _part/87/_geo_xyz/0,12,2 0.0\nP _part/87/_geo_xyz/0,13,0 0.0\nP _part/87/_geo_xyz/0,13,1 0.0\nP _part/87/_geo_xyz/0,13,2 0.0\nP _part/87/_geo_xyz/0,14,0 0.0\nP _part/87/_geo_xyz/0,14,1 0.0\nP _part/87/_geo_xyz/0,14,2 0.0\nP _part/87/_geo_xyz/0,15,0 0.0\nP _part/87/_geo_xyz/0,15,1 0.0\nP _part/87/_geo_xyz/0,15,2 0.0\nP _part/87/_geo_xyz/0,16,0 0.0\nP _part/87/_geo_xyz/0,16,1 0.0\nP _part/87/_geo_xyz/0,16,2 0.0\nP _part/87/_geo_xyz/0,17,0 0.0\nP _part/87/_geo_xyz/0,17,1 0.0\nP _part/87/_geo_xyz/0,17,2 0.0\nP _part/87/_geo_xyz/0,2,0 2.0\nP _part/87/_geo_xyz/0,2,1 -0.000000087\nP _part/87/_geo_xyz/0,2,2 0.0\nP _part/87/_geo_xyz/0,3,0 1.414213538\nP _part/87/_geo_xyz/0,3,1 -1.414213538\nP _part/87/_geo_xyz/0,3,2 0.0\nP _part/87/_geo_xyz/0,4,0 -0.000000175\nP _part/87/_geo_xyz/0,4,1 -2.0\nP _part/87/_geo_xyz/0,4,2 0.0\nP _part/87/_geo_xyz/0,5,0 -0.000000175\nP _part/87/_geo_xyz/0,5,1 -2.0\nP _part/87/_geo_xyz/0,5,2 0.0\nP _part/87/_geo_xyz/0,6,0 -1.414213777\nP _part/87/_geo_xyz/0,6,1 -1.414213300\nP _part/87/_geo_xyz/0,6,2 0.0\nP _part/87/_geo_xyz/0,7,0 -2.0\nP _part/87/_geo_xyz/0,7,1 0.000000024\nP _part/87/_geo_xyz/0,7,2 0.0\nP _part/87/_geo_xyz/0,8,0 -1.414213061\nP _part/87/_geo_xyz/0,8,1 1.414214015\nP _part/87/_geo_xyz/0,8,2 0.0\nP _part/87/_geo_xyz/0,9,0 0.000000350\nP _part/87/_geo_xyz/0,9,1 2.0\nP _part/87/_geo_xyz/0,9,2 0.0\nP _part/87/_geo_xyz/1,0,0 0.0\nP _part/87/_geo_xyz/1,0,1 2.0\nP _part/87/_geo_xyz/1,0,2 1.0\nP _part/87/_geo_xyz/1,1,0 1.414213538\nP _part/87/_geo_xyz/1,1,1 1.414213538\nP _part/87/_geo_xyz/1,1,2 1.0\nP _part/87/_geo_xyz/1,10,0 0.0\nP _part/87/_geo_xyz/1,10,1 0.0\nP _part/87/_geo_xyz/1,10,2 0.0\nP _part/87/_geo_xyz/1,11,0 0.0\nP _part/87/_geo_xyz/1,11,1 0.0\nP _part/87/_geo_xyz/1,11,2 0.0\nP _part/87/_geo_xyz/1,12,0 0.0\nP _part/87/_geo_xyz/1,12,1 0.0\nP _part/87/_geo_xyz/1,12,2 0.0\nP _part/87/_geo_xyz/1,13,0 0.0\nP _part/87/_geo_xyz/1,13,1 0.0\nP _part/87/_geo_xyz/1,13,2 0.0\nP _part/87/_geo_xyz/1,14,0 0.0\nP _part/87/_geo_xyz/1,14,1 0.0\nP _part/87/_geo_xyz/1,14,2 0.0\nP _part/87/_geo_xyz/1,15,0 0.0\nP _part/87/_geo_xyz/1,15,1 0.0\nP _part/87/_geo_xyz/1,15,2 0.0\nP _part/87/_geo_xyz/1,16,0 0.0\nP _part/87/_geo_xyz/1,16,1 0.0\nP _part/87/_geo_xyz/1,16,2 0.0\nP _part/87/_geo_xyz/1,17,0 0.0\nP _part/87/_geo_xyz/1,17,1 0.0\nP _part/87/_geo_xyz/1,17,2 0.0\nP _part/87/_geo_xyz/1,2,0 2.0\nP _part/87/_geo_xyz/1,2,1 -0.000000087\nP _part/87/_geo_xyz/1,2,2 1.0\nP _part/87/_geo_xyz/1,3,0 1.414213538\nP _part/87/_geo_xyz/1,3,1 -1.414213538\nP _part/87/_geo_xyz/1,3,2 1.0\nP _part/87/_geo_xyz/1,4,0 -0.000000175\nP _part/87/_geo_xyz/1,4,1 -2.0\nP _part/87/_geo_xyz/1,4,2 1.0\nP _part/87/_geo_xyz/1,5,0 -0.000000175\nP _part/87/_geo_xyz/1,5,1 -2.0\nP _part/87/_geo_xyz/1,5,2 1.0\nP _part/87/_geo_xyz/1,6,0 -1.414213777\nP _part/87/_geo_xyz/1,6,1 -1.414213300\nP _part/87/_geo_xyz/1,6,2 1.0\nP _part/87/_geo_xyz/1,7,0 -2.0\nP _part/87/_geo_xyz/1,7,1 0.000000024\nP _part/87/_geo_xyz/1,7,2 1.0\nP _part/87/_geo_xyz/1,8,0 -1.414213061\nP _part/87/_geo_xyz/1,8,1 1.414214015\nP _part/87/_geo_xyz/1,8,2 1.0\nP _part/87/_geo_xyz/1,9,0 0.000000350\nP _part/87/_geo_xyz/1,9,1 2.0\nP _part/87/_geo_xyz/1,9,2 1.0\nP _part/87/_geo_xyz/10,0,0 0.0\nP _part/87/_geo_xyz/10,0,1 0.0\nP _part/87/_geo_xyz/10,0,2 0.0\nP _part/87/_geo_xyz/10,1,0 0.0\nP _part/87/_geo_xyz/10,1,1 0.0\nP _part/87/_geo_xyz/10,1,2 0.0\nP _part/87/_geo_xyz/10,10,0 0.0\nP _part/87/_geo_xyz/10,10,1 0.0\nP _part/87/_geo_xyz/10,10,2 0.0\nP _part/87/_geo_xyz/10,11,0 0.0\nP _part/87/_geo_xyz/10,11,1 0.0\nP _part/87/_geo_xyz/10,11,2 0.0\nP _part/87/_geo_xyz/10,12,0 0.0\nP _part/87/_geo_xyz/10,12,1 0.0\nP _part/87/_geo_xyz/10,12,2 0.0\nP _part/87/_geo_xyz/10,13,0 0.0\nP _part/87/_geo_xyz/10,13,1 0.0\nP _part/87/_geo_xyz/10,13,2 0.0\nP _part/87/_geo_xyz/10,14,0 0.0\nP _part/87/_geo_xyz/10,14,1 0.0\nP _part/87/_geo_xyz/10,14,2 0.0\nP _part/87/_geo_xyz/10,15,0 0.0\nP _part/87/_geo_xyz/10,15,1 0.0\nP _part/87/_geo_xyz/10,15,2 0.0\nP _part/87/_geo_xyz/10,16,0 0.0\nP _part/87/_geo_xyz/10,16,1 0.0\nP _part/87/_geo_xyz/10,16,2 0.0\nP _part/87/_geo_xyz/10,17,0 0.0\nP _part/87/_geo_xyz/10,17,1 0.0\nP _part/87/_geo_xyz/10,17,2 0.0\nP _part/87/_geo_xyz/10,2,0 0.0\nP _part/87/_geo_xyz/10,2,1 0.0\nP _part/87/_geo_xyz/10,2,2 0.0\nP _part/87/_geo_xyz/10,3,0 0.0\nP _part/87/_geo_xyz/10,3,1 0.0\nP _part/87/_geo_xyz/10,3,2 0.0\nP _part/87/_geo_xyz/10,4,0 0.0\nP _part/87/_geo_xyz/10,4,1 0.0\nP _part/87/_geo_xyz/10,4,2 0.0\nP _part/87/_geo_xyz/10,5,0 0.0\nP _part/87/_geo_xyz/10,5,1 0.0\nP _part/87/_geo_xyz/10,5,2 0.0\nP _part/87/_geo_xyz/10,6,0 0.0\nP _part/87/_geo_xyz/10,6,1 0.0\nP _part/87/_geo_xyz/10,6,2 0.0\nP _part/87/_geo_xyz/10,7,0 0.0\nP _part/87/_geo_xyz/10,7,1 0.0\nP _part/87/_geo_xyz/10,7,2 0.0\nP _part/87/_geo_xyz/10,8,0 0.0\nP _part/87/_geo_xyz/10,8,1 0.0\nP _part/87/_geo_xyz/10,8,2 0.0\nP _part/87/_geo_xyz/10,9,0 0.0\nP _part/87/_geo_xyz/10,9,1 0.0\nP _part/87/_geo_xyz/10,9,2 0.0\nP _part/87/_geo_xyz/11,0,0 0.0\nP _part/87/_geo_xyz/11,0,1 0.0\nP _part/87/_geo_xyz/11,0,2 0.0\nP _part/87/_geo_xyz/11,1,0 0.0\nP _part/87/_geo_xyz/11,1,1 0.0\nP _part/87/_geo_xyz/11,1,2 0.0\nP _part/87/_geo_xyz/11,10,0 0.0\nP _part/87/_geo_xyz/11,10,1 0.0\nP _part/87/_geo_xyz/11,10,2 0.0\nP _part/87/_geo_xyz/11,11,0 0.0\nP _part/87/_geo_xyz/11,11,1 0.0\nP _part/87/_geo_xyz/11,11,2 0.0\nP _part/87/_geo_xyz/11,12,0 0.0\nP _part/87/_geo_xyz/11,12,1 0.0\nP _part/87/_geo_xyz/11,12,2 0.0\nP _part/87/_geo_xyz/11,13,0 0.0\nP _part/87/_geo_xyz/11,13,1 0.0\nP _part/87/_geo_xyz/11,13,2 0.0\nP _part/87/_geo_xyz/11,14,0 0.0\nP _part/87/_geo_xyz/11,14,1 0.0\nP _part/87/_geo_xyz/11,14,2 0.0\nP _part/87/_geo_xyz/11,15,0 0.0\nP _part/87/_geo_xyz/11,15,1 0.0\nP _part/87/_geo_xyz/11,15,2 0.0\nP _part/87/_geo_xyz/11,16,0 0.0\nP _part/87/_geo_xyz/11,16,1 0.0\nP _part/87/_geo_xyz/11,16,2 0.0\nP _part/87/_geo_xyz/11,17,0 0.0\nP _part/87/_geo_xyz/11,17,1 0.0\nP _part/87/_geo_xyz/11,17,2 0.0\nP _part/87/_geo_xyz/11,2,0 0.0\nP _part/87/_geo_xyz/11,2,1 0.0\nP _part/87/_geo_xyz/11,2,2 0.0\nP _part/87/_geo_xyz/11,3,0 0.0\nP _part/87/_geo_xyz/11,3,1 0.0\nP _part/87/_geo_xyz/11,3,2 0.0\nP _part/87/_geo_xyz/11,4,0 0.0\nP _part/87/_geo_xyz/11,4,1 0.0\nP _part/87/_geo_xyz/11,4,2 0.0\nP _part/87/_geo_xyz/11,5,0 0.0\nP _part/87/_geo_xyz/11,5,1 0.0\nP _part/87/_geo_xyz/11,5,2 0.0\nP _part/87/_geo_xyz/11,6,0 0.0\nP _part/87/_geo_xyz/11,6,1 0.0\nP _part/87/_geo_xyz/11,6,2 0.0\nP _part/87/_geo_xyz/11,7,0 0.0\nP _part/87/_geo_xyz/11,7,1 0.0\nP _part/87/_geo_xyz/11,7,2 0.0\nP _part/87/_geo_xyz/11,8,0 0.0\nP _part/87/_geo_xyz/11,8,1 0.0\nP _part/87/_geo_xyz/11,8,2 0.0\nP _part/87/_geo_xyz/11,9,0 0.0\nP _part/87/_geo_xyz/11,9,1 0.0\nP _part/87/_geo_xyz/11,9,2 0.0\nP _part/87/_geo_xyz/12,0,0 0.0\nP _part/87/_geo_xyz/12,0,1 0.0\nP _part/87/_geo_xyz/12,0,2 0.0\nP _part/87/_geo_xyz/12,1,0 0.0\nP _part/87/_geo_xyz/12,1,1 0.0\nP _part/87/_geo_xyz/12,1,2 0.0\nP _part/87/_geo_xyz/12,10,0 0.0\nP _part/87/_geo_xyz/12,10,1 0.0\nP _part/87/_geo_xyz/12,10,2 0.0\nP _part/87/_geo_xyz/12,11,0 0.0\nP _part/87/_geo_xyz/12,11,1 0.0\nP _part/87/_geo_xyz/12,11,2 0.0\nP _part/87/_geo_xyz/12,12,0 0.0\nP _part/87/_geo_xyz/12,12,1 0.0\nP _part/87/_geo_xyz/12,12,2 0.0\nP _part/87/_geo_xyz/12,13,0 0.0\nP _part/87/_geo_xyz/12,13,1 0.0\nP _part/87/_geo_xyz/12,13,2 0.0\nP _part/87/_geo_xyz/12,14,0 0.0\nP _part/87/_geo_xyz/12,14,1 0.0\nP _part/87/_geo_xyz/12,14,2 0.0\nP _part/87/_geo_xyz/12,15,0 0.0\nP _part/87/_geo_xyz/12,15,1 0.0\nP _part/87/_geo_xyz/12,15,2 0.0\nP _part/87/_geo_xyz/12,16,0 0.0\nP _part/87/_geo_xyz/12,16,1 0.0\nP _part/87/_geo_xyz/12,16,2 0.0\nP _part/87/_geo_xyz/12,17,0 0.0\nP _part/87/_geo_xyz/12,17,1 0.0\nP _part/87/_geo_xyz/12,17,2 0.0\nP _part/87/_geo_xyz/12,2,0 0.0\nP _part/87/_geo_xyz/12,2,1 0.0\nP _part/87/_geo_xyz/12,2,2 0.0\nP _part/87/_geo_xyz/12,3,0 0.0\nP _part/87/_geo_xyz/12,3,1 0.0\nP _part/87/_geo_xyz/12,3,2 0.0\nP _part/87/_geo_xyz/12,4,0 0.0\nP _part/87/_geo_xyz/12,4,1 0.0\nP _part/87/_geo_xyz/12,4,2 0.0\nP _part/87/_geo_xyz/12,5,0 0.0\nP _part/87/_geo_xyz/12,5,1 0.0\nP _part/87/_geo_xyz/12,5,2 0.0\nP _part/87/_geo_xyz/12,6,0 0.0\nP _part/87/_geo_xyz/12,6,1 0.0\nP _part/87/_geo_xyz/12,6,2 0.0\nP _part/87/_geo_xyz/12,7,0 0.0\nP _part/87/_geo_xyz/12,7,1 0.0\nP _part/87/_geo_xyz/12,7,2 0.0\nP _part/87/_geo_xyz/12,8,0 0.0\nP _part/87/_geo_xyz/12,8,1 0.0\nP _part/87/_geo_xyz/12,8,2 0.0\nP _part/87/_geo_xyz/12,9,0 0.0\nP _part/87/_geo_xyz/12,9,1 0.0\nP _part/87/_geo_xyz/12,9,2 0.0\nP _part/87/_geo_xyz/13,0,0 0.0\nP _part/87/_geo_xyz/13,0,1 0.0\nP _part/87/_geo_xyz/13,0,2 0.0\nP _part/87/_geo_xyz/13,1,0 0.0\nP _part/87/_geo_xyz/13,1,1 0.0\nP _part/87/_geo_xyz/13,1,2 0.0\nP _part/87/_geo_xyz/13,10,0 0.0\nP _part/87/_geo_xyz/13,10,1 0.0\nP _part/87/_geo_xyz/13,10,2 0.0\nP _part/87/_geo_xyz/13,11,0 0.0\nP _part/87/_geo_xyz/13,11,1 0.0\nP _part/87/_geo_xyz/13,11,2 0.0\nP _part/87/_geo_xyz/13,12,0 0.0\nP _part/87/_geo_xyz/13,12,1 0.0\nP _part/87/_geo_xyz/13,12,2 0.0\nP _part/87/_geo_xyz/13,13,0 0.0\nP _part/87/_geo_xyz/13,13,1 0.0\nP _part/87/_geo_xyz/13,13,2 0.0\nP _part/87/_geo_xyz/13,14,0 0.0\nP _part/87/_geo_xyz/13,14,1 0.0\nP _part/87/_geo_xyz/13,14,2 0.0\nP _part/87/_geo_xyz/13,15,0 0.0\nP _part/87/_geo_xyz/13,15,1 0.0\nP _part/87/_geo_xyz/13,15,2 0.0\nP _part/87/_geo_xyz/13,16,0 0.0\nP _part/87/_geo_xyz/13,16,1 0.0\nP _part/87/_geo_xyz/13,16,2 0.0\nP _part/87/_geo_xyz/13,17,0 0.0\nP _part/87/_geo_xyz/13,17,1 0.0\nP _part/87/_geo_xyz/13,17,2 0.0\nP _part/87/_geo_xyz/13,2,0 0.0\nP _part/87/_geo_xyz/13,2,1 0.0\nP _part/87/_geo_xyz/13,2,2 0.0\nP _part/87/_geo_xyz/13,3,0 0.0\nP _part/87/_geo_xyz/13,3,1 0.0\nP _part/87/_geo_xyz/13,3,2 0.0\nP _part/87/_geo_xyz/13,4,0 0.0\nP _part/87/_geo_xyz/13,4,1 0.0\nP _part/87/_geo_xyz/13,4,2 0.0\nP _part/87/_geo_xyz/13,5,0 0.0\nP _part/87/_geo_xyz/13,5,1 0.0\nP _part/87/_geo_xyz/13,5,2 0.0\nP _part/87/_geo_xyz/13,6,0 0.0\nP _part/87/_geo_xyz/13,6,1 0.0\nP _part/87/_geo_xyz/13,6,2 0.0\nP _part/87/_geo_xyz/13,7,0 0.0\nP _part/87/_geo_xyz/13,7,1 0.0\nP _part/87/_geo_xyz/13,7,2 0.0\nP _part/87/_geo_xyz/13,8,0 0.0\nP _part/87/_geo_xyz/13,8,1 0.0\nP _part/87/_geo_xyz/13,8,2 0.0\nP _part/87/_geo_xyz/13,9,0 0.0\nP _part/87/_geo_xyz/13,9,1 0.0\nP _part/87/_geo_xyz/13,9,2 0.0\nP _part/87/_geo_xyz/14,0,0 0.0\nP _part/87/_geo_xyz/14,0,1 0.0\nP _part/87/_geo_xyz/14,0,2 0.0\nP _part/87/_geo_xyz/14,1,0 0.0\nP _part/87/_geo_xyz/14,1,1 0.0\nP _part/87/_geo_xyz/14,1,2 0.0\nP _part/87/_geo_xyz/14,10,0 0.0\nP _part/87/_geo_xyz/14,10,1 0.0\nP _part/87/_geo_xyz/14,10,2 0.0\nP _part/87/_geo_xyz/14,11,0 0.0\nP _part/87/_geo_xyz/14,11,1 0.0\nP _part/87/_geo_xyz/14,11,2 0.0\nP _part/87/_geo_xyz/14,12,0 0.0\nP _part/87/_geo_xyz/14,12,1 0.0\nP _part/87/_geo_xyz/14,12,2 0.0\nP _part/87/_geo_xyz/14,13,0 0.0\nP _part/87/_geo_xyz/14,13,1 0.0\nP _part/87/_geo_xyz/14,13,2 0.0\nP _part/87/_geo_xyz/14,14,0 0.0\nP _part/87/_geo_xyz/14,14,1 0.0\nP _part/87/_geo_xyz/14,14,2 0.0\nP _part/87/_geo_xyz/14,15,0 0.0\nP _part/87/_geo_xyz/14,15,1 0.0\nP _part/87/_geo_xyz/14,15,2 0.0\nP _part/87/_geo_xyz/14,16,0 0.0\nP _part/87/_geo_xyz/14,16,1 0.0\nP _part/87/_geo_xyz/14,16,2 0.0\nP _part/87/_geo_xyz/14,17,0 0.0\nP _part/87/_geo_xyz/14,17,1 0.0\nP _part/87/_geo_xyz/14,17,2 0.0\nP _part/87/_geo_xyz/14,2,0 0.0\nP _part/87/_geo_xyz/14,2,1 0.0\nP _part/87/_geo_xyz/14,2,2 0.0\nP _part/87/_geo_xyz/14,3,0 0.0\nP _part/87/_geo_xyz/14,3,1 0.0\nP _part/87/_geo_xyz/14,3,2 0.0\nP _part/87/_geo_xyz/14,4,0 0.0\nP _part/87/_geo_xyz/14,4,1 0.0\nP _part/87/_geo_xyz/14,4,2 0.0\nP _part/87/_geo_xyz/14,5,0 0.0\nP _part/87/_geo_xyz/14,5,1 0.0\nP _part/87/_geo_xyz/14,5,2 0.0\nP _part/87/_geo_xyz/14,6,0 0.0\nP _part/87/_geo_xyz/14,6,1 0.0\nP _part/87/_geo_xyz/14,6,2 0.0\nP _part/87/_geo_xyz/14,7,0 0.0\nP _part/87/_geo_xyz/14,7,1 0.0\nP _part/87/_geo_xyz/14,7,2 0.0\nP _part/87/_geo_xyz/14,8,0 0.0\nP _part/87/_geo_xyz/14,8,1 0.0\nP _part/87/_geo_xyz/14,8,2 0.0\nP _part/87/_geo_xyz/14,9,0 0.0\nP _part/87/_geo_xyz/14,9,1 0.0\nP _part/87/_geo_xyz/14,9,2 0.0\nP _part/87/_geo_xyz/15,0,0 0.0\nP _part/87/_geo_xyz/15,0,1 0.0\nP _part/87/_geo_xyz/15,0,2 0.0\nP _part/87/_geo_xyz/15,1,0 0.0\nP _part/87/_geo_xyz/15,1,1 0.0\nP _part/87/_geo_xyz/15,1,2 0.0\nP _part/87/_geo_xyz/15,10,0 0.0\nP _part/87/_geo_xyz/15,10,1 0.0\nP _part/87/_geo_xyz/15,10,2 0.0\nP _part/87/_geo_xyz/15,11,0 0.0\nP _part/87/_geo_xyz/15,11,1 0.0\nP _part/87/_geo_xyz/15,11,2 0.0\nP _part/87/_geo_xyz/15,12,0 0.0\nP _part/87/_geo_xyz/15,12,1 0.0\nP _part/87/_geo_xyz/15,12,2 0.0\nP _part/87/_geo_xyz/15,13,0 0.0\nP _part/87/_geo_xyz/15,13,1 0.0\nP _part/87/_geo_xyz/15,13,2 0.0\nP _part/87/_geo_xyz/15,14,0 0.0\nP _part/87/_geo_xyz/15,14,1 0.0\nP _part/87/_geo_xyz/15,14,2 0.0\nP _part/87/_geo_xyz/15,15,0 0.0\nP _part/87/_geo_xyz/15,15,1 0.0\nP _part/87/_geo_xyz/15,15,2 0.0\nP _part/87/_geo_xyz/15,16,0 0.0\nP _part/87/_geo_xyz/15,16,1 0.0\nP _part/87/_geo_xyz/15,16,2 0.0\nP _part/87/_geo_xyz/15,17,0 0.0\nP _part/87/_geo_xyz/15,17,1 0.0\nP _part/87/_geo_xyz/15,17,2 0.0\nP _part/87/_geo_xyz/15,2,0 0.0\nP _part/87/_geo_xyz/15,2,1 0.0\nP _part/87/_geo_xyz/15,2,2 0.0\nP _part/87/_geo_xyz/15,3,0 0.0\nP _part/87/_geo_xyz/15,3,1 0.0\nP _part/87/_geo_xyz/15,3,2 0.0\nP _part/87/_geo_xyz/15,4,0 0.0\nP _part/87/_geo_xyz/15,4,1 0.0\nP _part/87/_geo_xyz/15,4,2 0.0\nP _part/87/_geo_xyz/15,5,0 0.0\nP _part/87/_geo_xyz/15,5,1 0.0\nP _part/87/_geo_xyz/15,5,2 0.0\nP _part/87/_geo_xyz/15,6,0 0.0\nP _part/87/_geo_xyz/15,6,1 0.0\nP _part/87/_geo_xyz/15,6,2 0.0\nP _part/87/_geo_xyz/15,7,0 0.0\nP _part/87/_geo_xyz/15,7,1 0.0\nP _part/87/_geo_xyz/15,7,2 0.0\nP _part/87/_geo_xyz/15,8,0 0.0\nP _part/87/_geo_xyz/15,8,1 0.0\nP _part/87/_geo_xyz/15,8,2 0.0\nP _part/87/_geo_xyz/15,9,0 0.0\nP _part/87/_geo_xyz/15,9,1 0.0\nP _part/87/_geo_xyz/15,9,2 0.0\nP _part/87/_geo_xyz/16,0,0 0.0\nP _part/87/_geo_xyz/16,0,1 0.0\nP _part/87/_geo_xyz/16,0,2 0.0\nP _part/87/_geo_xyz/16,1,0 0.0\nP _part/87/_geo_xyz/16,1,1 0.0\nP _part/87/_geo_xyz/16,1,2 0.0\nP _part/87/_geo_xyz/16,10,0 0.0\nP _part/87/_geo_xyz/16,10,1 0.0\nP _part/87/_geo_xyz/16,10,2 0.0\nP _part/87/_geo_xyz/16,11,0 0.0\nP _part/87/_geo_xyz/16,11,1 0.0\nP _part/87/_geo_xyz/16,11,2 0.0\nP _part/87/_geo_xyz/16,12,0 0.0\nP _part/87/_geo_xyz/16,12,1 0.0\nP _part/87/_geo_xyz/16,12,2 0.0\nP _part/87/_geo_xyz/16,13,0 0.0\nP _part/87/_geo_xyz/16,13,1 0.0\nP _part/87/_geo_xyz/16,13,2 0.0\nP _part/87/_geo_xyz/16,14,0 0.0\nP _part/87/_geo_xyz/16,14,1 0.0\nP _part/87/_geo_xyz/16,14,2 0.0\nP _part/87/_geo_xyz/16,15,0 0.0\nP _part/87/_geo_xyz/16,15,1 0.0\nP _part/87/_geo_xyz/16,15,2 0.0\nP _part/87/_geo_xyz/16,16,0 0.0\nP _part/87/_geo_xyz/16,16,1 0.0\nP _part/87/_geo_xyz/16,16,2 0.0\nP _part/87/_geo_xyz/16,17,0 0.0\nP _part/87/_geo_xyz/16,17,1 0.0\nP _part/87/_geo_xyz/16,17,2 0.0\nP _part/87/_geo_xyz/16,2,0 0.0\nP _part/87/_geo_xyz/16,2,1 0.0\nP _part/87/_geo_xyz/16,2,2 0.0\nP _part/87/_geo_xyz/16,3,0 0.0\nP _part/87/_geo_xyz/16,3,1 0.0\nP _part/87/_geo_xyz/16,3,2 0.0\nP _part/87/_geo_xyz/16,4,0 0.0\nP _part/87/_geo_xyz/16,4,1 0.0\nP _part/87/_geo_xyz/16,4,2 0.0\nP _part/87/_geo_xyz/16,5,0 0.0\nP _part/87/_geo_xyz/16,5,1 0.0\nP _part/87/_geo_xyz/16,5,2 0.0\nP _part/87/_geo_xyz/16,6,0 0.0\nP _part/87/_geo_xyz/16,6,1 0.0\nP _part/87/_geo_xyz/16,6,2 0.0\nP _part/87/_geo_xyz/16,7,0 0.0\nP _part/87/_geo_xyz/16,7,1 0.0\nP _part/87/_geo_xyz/16,7,2 0.0\nP _part/87/_geo_xyz/16,8,0 0.0\nP _part/87/_geo_xyz/16,8,1 0.0\nP _part/87/_geo_xyz/16,8,2 0.0\nP _part/87/_geo_xyz/16,9,0 0.0\nP _part/87/_geo_xyz/16,9,1 0.0\nP _part/87/_geo_xyz/16,9,2 0.0\nP _part/87/_geo_xyz/17,0,0 0.0\nP _part/87/_geo_xyz/17,0,1 0.0\nP _part/87/_geo_xyz/17,0,2 0.0\nP _part/87/_geo_xyz/17,1,0 0.0\nP _part/87/_geo_xyz/17,1,1 0.0\nP _part/87/_geo_xyz/17,1,2 0.0\nP _part/87/_geo_xyz/17,10,0 0.0\nP _part/87/_geo_xyz/17,10,1 0.0\nP _part/87/_geo_xyz/17,10,2 0.0\nP _part/87/_geo_xyz/17,11,0 0.0\nP _part/87/_geo_xyz/17,11,1 0.0\nP _part/87/_geo_xyz/17,11,2 0.0\nP _part/87/_geo_xyz/17,12,0 0.0\nP _part/87/_geo_xyz/17,12,1 0.0\nP _part/87/_geo_xyz/17,12,2 0.0\nP _part/87/_geo_xyz/17,13,0 0.0\nP _part/87/_geo_xyz/17,13,1 0.0\nP _part/87/_geo_xyz/17,13,2 0.0\nP _part/87/_geo_xyz/17,14,0 0.0\nP _part/87/_geo_xyz/17,14,1 0.0\nP _part/87/_geo_xyz/17,14,2 0.0\nP _part/87/_geo_xyz/17,15,0 0.0\nP _part/87/_geo_xyz/17,15,1 0.0\nP _part/87/_geo_xyz/17,15,2 0.0\nP _part/87/_geo_xyz/17,16,0 0.0\nP _part/87/_geo_xyz/17,16,1 0.0\nP _part/87/_geo_xyz/17,16,2 0.0\nP _part/87/_geo_xyz/17,17,0 0.0\nP _part/87/_geo_xyz/17,17,1 0.0\nP _part/87/_geo_xyz/17,17,2 0.0\nP _part/87/_geo_xyz/17,2,0 0.0\nP _part/87/_geo_xyz/17,2,1 0.0\nP _part/87/_geo_xyz/17,2,2 0.0\nP _part/87/_geo_xyz/17,3,0 0.0\nP _part/87/_geo_xyz/17,3,1 0.0\nP _part/87/_geo_xyz/17,3,2 0.0\nP _part/87/_geo_xyz/17,4,0 0.0\nP _part/87/_geo_xyz/17,4,1 0.0\nP _part/87/_geo_xyz/17,4,2 0.0\nP _part/87/_geo_xyz/17,5,0 0.0\nP _part/87/_geo_xyz/17,5,1 0.0\nP _part/87/_geo_xyz/17,5,2 0.0\nP _part/87/_geo_xyz/17,6,0 0.0\nP _part/87/_geo_xyz/17,6,1 0.0\nP _part/87/_geo_xyz/17,6,2 0.0\nP _part/87/_geo_xyz/17,7,0 0.0\nP _part/87/_geo_xyz/17,7,1 0.0\nP _part/87/_geo_xyz/17,7,2 0.0\nP _part/87/_geo_xyz/17,8,0 0.0\nP _part/87/_geo_xyz/17,8,1 0.0\nP _part/87/_geo_xyz/17,8,2 0.0\nP _part/87/_geo_xyz/17,9,0 0.0\nP _part/87/_geo_xyz/17,9,1 0.0\nP _part/87/_geo_xyz/17,9,2 0.0\nP _part/87/_geo_xyz/18,0,0 0.0\nP _part/87/_geo_xyz/18,0,1 0.0\nP _part/87/_geo_xyz/18,0,2 0.0\nP _part/87/_geo_xyz/18,1,0 0.0\nP _part/87/_geo_xyz/18,1,1 0.0\nP _part/87/_geo_xyz/18,1,2 0.0\nP _part/87/_geo_xyz/18,10,0 0.0\nP _part/87/_geo_xyz/18,10,1 0.0\nP _part/87/_geo_xyz/18,10,2 0.0\nP _part/87/_geo_xyz/18,11,0 0.0\nP _part/87/_geo_xyz/18,11,1 0.0\nP _part/87/_geo_xyz/18,11,2 0.0\nP _part/87/_geo_xyz/18,12,0 0.0\nP _part/87/_geo_xyz/18,12,1 0.0\nP _part/87/_geo_xyz/18,12,2 0.0\nP _part/87/_geo_xyz/18,13,0 0.0\nP _part/87/_geo_xyz/18,13,1 0.0\nP _part/87/_geo_xyz/18,13,2 0.0\nP _part/87/_geo_xyz/18,14,0 0.0\nP _part/87/_geo_xyz/18,14,1 0.0\nP _part/87/_geo_xyz/18,14,2 0.0\nP _part/87/_geo_xyz/18,15,0 0.0\nP _part/87/_geo_xyz/18,15,1 0.0\nP _part/87/_geo_xyz/18,15,2 0.0\nP _part/87/_geo_xyz/18,16,0 0.0\nP _part/87/_geo_xyz/18,16,1 0.0\nP _part/87/_geo_xyz/18,16,2 0.0\nP _part/87/_geo_xyz/18,17,0 0.0\nP _part/87/_geo_xyz/18,17,1 0.0\nP _part/87/_geo_xyz/18,17,2 0.0\nP _part/87/_geo_xyz/18,2,0 0.0\nP _part/87/_geo_xyz/18,2,1 0.0\nP _part/87/_geo_xyz/18,2,2 0.0\nP _part/87/_geo_xyz/18,3,0 0.0\nP _part/87/_geo_xyz/18,3,1 0.0\nP _part/87/_geo_xyz/18,3,2 0.0\nP _part/87/_geo_xyz/18,4,0 0.0\nP _part/87/_geo_xyz/18,4,1 0.0\nP _part/87/_geo_xyz/18,4,2 0.0\nP _part/87/_geo_xyz/18,5,0 0.0\nP _part/87/_geo_xyz/18,5,1 0.0\nP _part/87/_geo_xyz/18,5,2 0.0\nP _part/87/_geo_xyz/18,6,0 0.0\nP _part/87/_geo_xyz/18,6,1 0.0\nP _part/87/_geo_xyz/18,6,2 0.0\nP _part/87/_geo_xyz/18,7,0 0.0\nP _part/87/_geo_xyz/18,7,1 0.0\nP _part/87/_geo_xyz/18,7,2 0.0\nP _part/87/_geo_xyz/18,8,0 0.0\nP _part/87/_geo_xyz/18,8,1 0.0\nP _part/87/_geo_xyz/18,8,2 0.0\nP _part/87/_geo_xyz/18,9,0 0.0\nP _part/87/_geo_xyz/18,9,1 0.0\nP _part/87/_geo_xyz/18,9,2 0.0\nP _part/87/_geo_xyz/19,0,0 0.0\nP _part/87/_geo_xyz/19,0,1 0.0\nP _part/87/_geo_xyz/19,0,2 0.0\nP _part/87/_geo_xyz/19,1,0 0.0\nP _part/87/_geo_xyz/19,1,1 0.0\nP _part/87/_geo_xyz/19,1,2 0.0\nP _part/87/_geo_xyz/19,10,0 0.0\nP _part/87/_geo_xyz/19,10,1 0.0\nP _part/87/_geo_xyz/19,10,2 0.0\nP _part/87/_geo_xyz/19,11,0 0.0\nP _part/87/_geo_xyz/19,11,1 0.0\nP _part/87/_geo_xyz/19,11,2 0.0\nP _part/87/_geo_xyz/19,12,0 0.0\nP _part/87/_geo_xyz/19,12,1 0.0\nP _part/87/_geo_xyz/19,12,2 0.0\nP _part/87/_geo_xyz/19,13,0 0.0\nP _part/87/_geo_xyz/19,13,1 0.0\nP _part/87/_geo_xyz/19,13,2 0.0\nP _part/87/_geo_xyz/19,14,0 0.0\nP _part/87/_geo_xyz/19,14,1 0.0\nP _part/87/_geo_xyz/19,14,2 0.0\nP _part/87/_geo_xyz/19,15,0 0.0\nP _part/87/_geo_xyz/19,15,1 0.0\nP _part/87/_geo_xyz/19,15,2 0.0\nP _part/87/_geo_xyz/19,16,0 0.0\nP _part/87/_geo_xyz/19,16,1 0.0\nP _part/87/_geo_xyz/19,16,2 0.0\nP _part/87/_geo_xyz/19,17,0 0.0\nP _part/87/_geo_xyz/19,17,1 0.0\nP _part/87/_geo_xyz/19,17,2 0.0\nP _part/87/_geo_xyz/19,2,0 0.0\nP _part/87/_geo_xyz/19,2,1 0.0\nP _part/87/_geo_xyz/19,2,2 0.0\nP _part/87/_geo_xyz/19,3,0 0.0\nP _part/87/_geo_xyz/19,3,1 0.0\nP _part/87/_geo_xyz/19,3,2 0.0\nP _part/87/_geo_xyz/19,4,0 0.0\nP _part/87/_geo_xyz/19,4,1 0.0\nP _part/87/_geo_xyz/19,4,2 0.0\nP _part/87/_geo_xyz/19,5,0 0.0\nP _part/87/_geo_xyz/19,5,1 0.0\nP _part/87/_geo_xyz/19,5,2 0.0\nP _part/87/_geo_xyz/19,6,0 0.0\nP _part/87/_geo_xyz/19,6,1 0.0\nP _part/87/_geo_xyz/19,6,2 0.0\nP _part/87/_geo_xyz/19,7,0 0.0\nP _part/87/_geo_xyz/19,7,1 0.0\nP _part/87/_geo_xyz/19,7,2 0.0\nP _part/87/_geo_xyz/19,8,0 0.0\nP _part/87/_geo_xyz/19,8,1 0.0\nP _part/87/_geo_xyz/19,8,2 0.0\nP _part/87/_geo_xyz/19,9,0 0.0\nP _part/87/_geo_xyz/19,9,1 0.0\nP _part/87/_geo_xyz/19,9,2 0.0\nP _part/87/_geo_xyz/2,0,0 0.0\nP _part/87/_geo_xyz/2,0,1 2.0\nP _part/87/_geo_xyz/2,0,2 2.0\nP _part/87/_geo_xyz/2,1,0 1.414213538\nP _part/87/_geo_xyz/2,1,1 1.414213538\nP _part/87/_geo_xyz/2,1,2 2.0\nP _part/87/_geo_xyz/2,10,0 0.0\nP _part/87/_geo_xyz/2,10,1 0.0\nP _part/87/_geo_xyz/2,10,2 0.0\nP _part/87/_geo_xyz/2,11,0 0.0\nP _part/87/_geo_xyz/2,11,1 0.0\nP _part/87/_geo_xyz/2,11,2 0.0\nP _part/87/_geo_xyz/2,12,0 0.0\nP _part/87/_geo_xyz/2,12,1 0.0\nP _part/87/_geo_xyz/2,12,2 0.0\nP _part/87/_geo_xyz/2,13,0 0.0\nP _part/87/_geo_xyz/2,13,1 0.0\nP _part/87/_geo_xyz/2,13,2 0.0\nP _part/87/_geo_xyz/2,14,0 0.0\nP _part/87/_geo_xyz/2,14,1 0.0\nP _part/87/_geo_xyz/2,14,2 0.0\nP _part/87/_geo_xyz/2,15,0 0.0\nP _part/87/_geo_xyz/2,15,1 0.0\nP _part/87/_geo_xyz/2,15,2 0.0\nP _part/87/_geo_xyz/2,16,0 0.0\nP _part/87/_geo_xyz/2,16,1 0.0\nP _part/87/_geo_xyz/2,16,2 0.0\nP _part/87/_geo_xyz/2,17,0 0.0\nP _part/87/_geo_xyz/2,17,1 0.0\nP _part/87/_geo_xyz/2,17,2 0.0\nP _part/87/_geo_xyz/2,2,0 2.0\nP _part/87/_geo_xyz/2,2,1 -0.000000087\nP _part/87/_geo_xyz/2,2,2 2.0\nP _part/87/_geo_xyz/2,3,0 1.414213538\nP _part/87/_geo_xyz/2,3,1 -1.414213538\nP _part/87/_geo_xyz/2,3,2 2.0\nP _part/87/_geo_xyz/2,4,0 -0.000000175\nP _part/87/_geo_xyz/2,4,1 -2.0\nP _part/87/_geo_xyz/2,4,2 2.0\nP _part/87/_geo_xyz/2,5,0 -0.000000175\nP _part/87/_geo_xyz/2,5,1 -2.0\nP _part/87/_geo_xyz/2,5,2 2.0\nP _part/87/_geo_xyz/2,6,0 -1.414213777\nP _part/87/_geo_xyz/2,6,1 -1.414213300\nP _part/87/_geo_xyz/2,6,2 2.0\nP _part/87/_geo_xyz/2,7,0 -2.0\nP _part/87/_geo_xyz/2,7,1 0.000000024\nP _part/87/_geo_xyz/2,7,2 2.0\nP _part/87/_geo_xyz/2,8,0 -1.414213061\nP _part/87/_geo_xyz/2,8,1 1.414214015\nP _part/87/_geo_xyz/2,8,2 2.0\nP _part/87/_geo_xyz/2,9,0 0.000000350\nP _part/87/_geo_xyz/2,9,1 2.0\nP _part/87/_geo_xyz/2,9,2 2.0\nP _part/87/_geo_xyz/3,0,0 0.0\nP _part/87/_geo_xyz/3,0,1 2.0\nP _part/87/_geo_xyz/3,0,2 3.0\nP _part/87/_geo_xyz/3,1,0 1.414213538\nP _part/87/_geo_xyz/3,1,1 1.414213538\nP _part/87/_geo_xyz/3,1,2 3.0\nP _part/87/_geo_xyz/3,10,0 0.0\nP _part/87/_geo_xyz/3,10,1 0.0\nP _part/87/_geo_xyz/3,10,2 0.0\nP _part/87/_geo_xyz/3,11,0 0.0\nP _part/87/_geo_xyz/3,11,1 0.0\nP _part/87/_geo_xyz/3,11,2 0.0\nP _part/87/_geo_xyz/3,12,0 0.0\nP _part/87/_geo_xyz/3,12,1 0.0\nP _part/87/_geo_xyz/3,12,2 0.0\nP _part/87/_geo_xyz/3,13,0 0.0\nP _part/87/_geo_xyz/3,13,1 0.0\nP _part/87/_geo_xyz/3,13,2 0.0\nP _part/87/_geo_xyz/3,14,0 0.0\nP _part/87/_geo_xyz/3,14,1 0.0\nP _part/87/_geo_xyz/3,14,2 0.0\nP _part/87/_geo_xyz/3,15,0 0.0\nP _part/87/_geo_xyz/3,15,1 0.0\nP _part/87/_geo_xyz/3,15,2 0.0\nP _part/87/_geo_xyz/3,16,0 0.0\nP _part/87/_geo_xyz/3,16,1 0.0\nP _part/87/_geo_xyz/3,16,2 0.0\nP _part/87/_geo_xyz/3,17,0 0.0\nP _part/87/_geo_xyz/3,17,1 0.0\nP _part/87/_geo_xyz/3,17,2 0.0\nP _part/87/_geo_xyz/3,2,0 2.0\nP _part/87/_geo_xyz/3,2,1 -0.000000087\nP _part/87/_geo_xyz/3,2,2 3.0\nP _part/87/_geo_xyz/3,3,0 1.414213538\nP _part/87/_geo_xyz/3,3,1 -1.414213538\nP _part/87/_geo_xyz/3,3,2 3.0\nP _part/87/_geo_xyz/3,4,0 -0.000000175\nP _part/87/_geo_xyz/3,4,1 -2.0\nP _part/87/_geo_xyz/3,4,2 3.0\nP _part/87/_geo_xyz/3,5,0 -0.000000175\nP _part/87/_geo_xyz/3,5,1 -2.0\nP _part/87/_geo_xyz/3,5,2 3.0\nP _part/87/_geo_xyz/3,6,0 -1.414213777\nP _part/87/_geo_xyz/3,6,1 -1.414213300\nP _part/87/_geo_xyz/3,6,2 3.0\nP _part/87/_geo_xyz/3,7,0 -2.0\nP _part/87/_geo_xyz/3,7,1 0.000000024\nP _part/87/_geo_xyz/3,7,2 3.0\nP _part/87/_geo_xyz/3,8,0 -1.414213061\nP _part/87/_geo_xyz/3,8,1 1.414214015\nP _part/87/_geo_xyz/3,8,2 3.0\nP _part/87/_geo_xyz/3,9,0 0.000000350\nP _part/87/_geo_xyz/3,9,1 2.0\nP _part/87/_geo_xyz/3,9,2 3.0\nP _part/87/_geo_xyz/4,0,0 0.0\nP _part/87/_geo_xyz/4,0,1 2.0\nP _part/87/_geo_xyz/4,0,2 4.0\nP _part/87/_geo_xyz/4,1,0 1.414213538\nP _part/87/_geo_xyz/4,1,1 1.414213538\nP _part/87/_geo_xyz/4,1,2 4.0\nP _part/87/_geo_xyz/4,10,0 0.0\nP _part/87/_geo_xyz/4,10,1 0.0\nP _part/87/_geo_xyz/4,10,2 0.0\nP _part/87/_geo_xyz/4,11,0 0.0\nP _part/87/_geo_xyz/4,11,1 0.0\nP _part/87/_geo_xyz/4,11,2 0.0\nP _part/87/_geo_xyz/4,12,0 0.0\nP _part/87/_geo_xyz/4,12,1 0.0\nP _part/87/_geo_xyz/4,12,2 0.0\nP _part/87/_geo_xyz/4,13,0 0.0\nP _part/87/_geo_xyz/4,13,1 0.0\nP _part/87/_geo_xyz/4,13,2 0.0\nP _part/87/_geo_xyz/4,14,0 0.0\nP _part/87/_geo_xyz/4,14,1 0.0\nP _part/87/_geo_xyz/4,14,2 0.0\nP _part/87/_geo_xyz/4,15,0 0.0\nP _part/87/_geo_xyz/4,15,1 0.0\nP _part/87/_geo_xyz/4,15,2 0.0\nP _part/87/_geo_xyz/4,16,0 0.0\nP _part/87/_geo_xyz/4,16,1 0.0\nP _part/87/_geo_xyz/4,16,2 0.0\nP _part/87/_geo_xyz/4,17,0 0.0\nP _part/87/_geo_xyz/4,17,1 0.0\nP _part/87/_geo_xyz/4,17,2 0.0\nP _part/87/_geo_xyz/4,2,0 2.0\nP _part/87/_geo_xyz/4,2,1 -0.000000087\nP _part/87/_geo_xyz/4,2,2 4.0\nP _part/87/_geo_xyz/4,3,0 1.414213538\nP _part/87/_geo_xyz/4,3,1 -1.414213538\nP _part/87/_geo_xyz/4,3,2 4.0\nP _part/87/_geo_xyz/4,4,0 -0.000000175\nP _part/87/_geo_xyz/4,4,1 -2.0\nP _part/87/_geo_xyz/4,4,2 4.0\nP _part/87/_geo_xyz/4,5,0 -0.000000175\nP _part/87/_geo_xyz/4,5,1 -2.0\nP _part/87/_geo_xyz/4,5,2 4.0\nP _part/87/_geo_xyz/4,6,0 -1.414213777\nP _part/87/_geo_xyz/4,6,1 -1.414213300\nP _part/87/_geo_xyz/4,6,2 4.0\nP _part/87/_geo_xyz/4,7,0 -2.0\nP _part/87/_geo_xyz/4,7,1 0.000000024\nP _part/87/_geo_xyz/4,7,2 4.0\nP _part/87/_geo_xyz/4,8,0 -1.414213061\nP _part/87/_geo_xyz/4,8,1 1.414214015\nP _part/87/_geo_xyz/4,8,2 4.0\nP _part/87/_geo_xyz/4,9,0 0.000000350\nP _part/87/_geo_xyz/4,9,1 2.0\nP _part/87/_geo_xyz/4,9,2 4.0\nP _part/87/_geo_xyz/5,0,0 0.0\nP _part/87/_geo_xyz/5,0,1 2.0\nP _part/87/_geo_xyz/5,0,2 5.0\nP _part/87/_geo_xyz/5,1,0 1.414213538\nP _part/87/_geo_xyz/5,1,1 1.414213538\nP _part/87/_geo_xyz/5,1,2 5.0\nP _part/87/_geo_xyz/5,10,0 0.0\nP _part/87/_geo_xyz/5,10,1 0.0\nP _part/87/_geo_xyz/5,10,2 0.0\nP _part/87/_geo_xyz/5,11,0 0.0\nP _part/87/_geo_xyz/5,11,1 0.0\nP _part/87/_geo_xyz/5,11,2 0.0\nP _part/87/_geo_xyz/5,12,0 0.0\nP _part/87/_geo_xyz/5,12,1 0.0\nP _part/87/_geo_xyz/5,12,2 0.0\nP _part/87/_geo_xyz/5,13,0 0.0\nP _part/87/_geo_xyz/5,13,1 0.0\nP _part/87/_geo_xyz/5,13,2 0.0\nP _part/87/_geo_xyz/5,14,0 0.0\nP _part/87/_geo_xyz/5,14,1 0.0\nP _part/87/_geo_xyz/5,14,2 0.0\nP _part/87/_geo_xyz/5,15,0 0.0\nP _part/87/_geo_xyz/5,15,1 0.0\nP _part/87/_geo_xyz/5,15,2 0.0\nP _part/87/_geo_xyz/5,16,0 0.0\nP _part/87/_geo_xyz/5,16,1 0.0\nP _part/87/_geo_xyz/5,16,2 0.0\nP _part/87/_geo_xyz/5,17,0 0.0\nP _part/87/_geo_xyz/5,17,1 0.0\nP _part/87/_geo_xyz/5,17,2 0.0\nP _part/87/_geo_xyz/5,2,0 2.0\nP _part/87/_geo_xyz/5,2,1 -0.000000087\nP _part/87/_geo_xyz/5,2,2 5.0\nP _part/87/_geo_xyz/5,3,0 1.414213538\nP _part/87/_geo_xyz/5,3,1 -1.414213538\nP _part/87/_geo_xyz/5,3,2 5.0\nP _part/87/_geo_xyz/5,4,0 -0.000000175\nP _part/87/_geo_xyz/5,4,1 -2.0\nP _part/87/_geo_xyz/5,4,2 5.0\nP _part/87/_geo_xyz/5,5,0 -0.000000175\nP _part/87/_geo_xyz/5,5,1 -2.0\nP _part/87/_geo_xyz/5,5,2 5.0\nP _part/87/_geo_xyz/5,6,0 -1.414213777\nP _part/87/_geo_xyz/5,6,1 -1.414213300\nP _part/87/_geo_xyz/5,6,2 5.0\nP _part/87/_geo_xyz/5,7,0 -2.0\nP _part/87/_geo_xyz/5,7,1 0.000000024\nP _part/87/_geo_xyz/5,7,2 5.0\nP _part/87/_geo_xyz/5,8,0 -1.414213061\nP _part/87/_geo_xyz/5,8,1 1.414214015\nP _part/87/_geo_xyz/5,8,2 5.0\nP _part/87/_geo_xyz/5,9,0 0.000000350\nP _part/87/_geo_xyz/5,9,1 2.0\nP _part/87/_geo_xyz/5,9,2 5.0\nP _part/87/_geo_xyz/6,0,0 0.0\nP _part/87/_geo_xyz/6,0,1 2.0\nP _part/87/_geo_xyz/6,0,2 6.0\nP _part/87/_geo_xyz/6,1,0 1.414213538\nP _part/87/_geo_xyz/6,1,1 1.414213538\nP _part/87/_geo_xyz/6,1,2 6.0\nP _part/87/_geo_xyz/6,10,0 0.0\nP _part/87/_geo_xyz/6,10,1 0.0\nP _part/87/_geo_xyz/6,10,2 0.0\nP _part/87/_geo_xyz/6,11,0 0.0\nP _part/87/_geo_xyz/6,11,1 0.0\nP _part/87/_geo_xyz/6,11,2 0.0\nP _part/87/_geo_xyz/6,12,0 0.0\nP _part/87/_geo_xyz/6,12,1 0.0\nP _part/87/_geo_xyz/6,12,2 0.0\nP _part/87/_geo_xyz/6,13,0 0.0\nP _part/87/_geo_xyz/6,13,1 0.0\nP _part/87/_geo_xyz/6,13,2 0.0\nP _part/87/_geo_xyz/6,14,0 0.0\nP _part/87/_geo_xyz/6,14,1 0.0\nP _part/87/_geo_xyz/6,14,2 0.0\nP _part/87/_geo_xyz/6,15,0 0.0\nP _part/87/_geo_xyz/6,15,1 0.0\nP _part/87/_geo_xyz/6,15,2 0.0\nP _part/87/_geo_xyz/6,16,0 0.0\nP _part/87/_geo_xyz/6,16,1 0.0\nP _part/87/_geo_xyz/6,16,2 0.0\nP _part/87/_geo_xyz/6,17,0 0.0\nP _part/87/_geo_xyz/6,17,1 0.0\nP _part/87/_geo_xyz/6,17,2 0.0\nP _part/87/_geo_xyz/6,2,0 2.0\nP _part/87/_geo_xyz/6,2,1 -0.000000087\nP _part/87/_geo_xyz/6,2,2 6.0\nP _part/87/_geo_xyz/6,3,0 1.414213538\nP _part/87/_geo_xyz/6,3,1 -1.414213538\nP _part/87/_geo_xyz/6,3,2 6.0\nP _part/87/_geo_xyz/6,4,0 -0.000000175\nP _part/87/_geo_xyz/6,4,1 -2.0\nP _part/87/_geo_xyz/6,4,2 6.0\nP _part/87/_geo_xyz/6,5,0 -0.000000175\nP _part/87/_geo_xyz/6,5,1 -2.0\nP _part/87/_geo_xyz/6,5,2 6.0\nP _part/87/_geo_xyz/6,6,0 -1.414213777\nP _part/87/_geo_xyz/6,6,1 -1.414213300\nP _part/87/_geo_xyz/6,6,2 6.0\nP _part/87/_geo_xyz/6,7,0 -2.0\nP _part/87/_geo_xyz/6,7,1 0.000000024\nP _part/87/_geo_xyz/6,7,2 6.0\nP _part/87/_geo_xyz/6,8,0 -1.414213061\nP _part/87/_geo_xyz/6,8,1 1.414214015\nP _part/87/_geo_xyz/6,8,2 6.0\nP _part/87/_geo_xyz/6,9,0 0.000000350\nP _part/87/_geo_xyz/6,9,1 2.0\nP _part/87/_geo_xyz/6,9,2 6.0\nP _part/87/_geo_xyz/7,0,0 0.0\nP _part/87/_geo_xyz/7,0,1 2.0\nP _part/87/_geo_xyz/7,0,2 7.0\nP _part/87/_geo_xyz/7,1,0 1.414213538\nP _part/87/_geo_xyz/7,1,1 1.414213538\nP _part/87/_geo_xyz/7,1,2 7.0\nP _part/87/_geo_xyz/7,10,0 0.0\nP _part/87/_geo_xyz/7,10,1 0.0\nP _part/87/_geo_xyz/7,10,2 0.0\nP _part/87/_geo_xyz/7,11,0 0.0\nP _part/87/_geo_xyz/7,11,1 0.0\nP _part/87/_geo_xyz/7,11,2 0.0\nP _part/87/_geo_xyz/7,12,0 0.0\nP _part/87/_geo_xyz/7,12,1 0.0\nP _part/87/_geo_xyz/7,12,2 0.0\nP _part/87/_geo_xyz/7,13,0 0.0\nP _part/87/_geo_xyz/7,13,1 0.0\nP _part/87/_geo_xyz/7,13,2 0.0\nP _part/87/_geo_xyz/7,14,0 0.0\nP _part/87/_geo_xyz/7,14,1 0.0\nP _part/87/_geo_xyz/7,14,2 0.0\nP _part/87/_geo_xyz/7,15,0 0.0\nP _part/87/_geo_xyz/7,15,1 0.0\nP _part/87/_geo_xyz/7,15,2 0.0\nP _part/87/_geo_xyz/7,16,0 0.0\nP _part/87/_geo_xyz/7,16,1 0.0\nP _part/87/_geo_xyz/7,16,2 0.0\nP _part/87/_geo_xyz/7,17,0 0.0\nP _part/87/_geo_xyz/7,17,1 0.0\nP _part/87/_geo_xyz/7,17,2 0.0\nP _part/87/_geo_xyz/7,2,0 2.0\nP _part/87/_geo_xyz/7,2,1 -0.000000087\nP _part/87/_geo_xyz/7,2,2 7.0\nP _part/87/_geo_xyz/7,3,0 1.414213538\nP _part/87/_geo_xyz/7,3,1 -1.414213538\nP _part/87/_geo_xyz/7,3,2 7.0\nP _part/87/_geo_xyz/7,4,0 -0.000000175\nP _part/87/_geo_xyz/7,4,1 -2.0\nP _part/87/_geo_xyz/7,4,2 7.0\nP _part/87/_geo_xyz/7,5,0 -0.000000175\nP _part/87/_geo_xyz/7,5,1 -2.0\nP _part/87/_geo_xyz/7,5,2 7.0\nP _part/87/_geo_xyz/7,6,0 -1.414213777\nP _part/87/_geo_xyz/7,6,1 -1.414213300\nP _part/87/_geo_xyz/7,6,2 7.0\nP _part/87/_geo_xyz/7,7,0 -2.0\nP _part/87/_geo_xyz/7,7,1 0.000000024\nP _part/87/_geo_xyz/7,7,2 7.0\nP _part/87/_geo_xyz/7,8,0 -1.414213061\nP _part/87/_geo_xyz/7,8,1 1.414214015\nP _part/87/_geo_xyz/7,8,2 7.0\nP _part/87/_geo_xyz/7,9,0 0.000000350\nP _part/87/_geo_xyz/7,9,1 2.0\nP _part/87/_geo_xyz/7,9,2 7.0\nP _part/87/_geo_xyz/8,0,0 0.0\nP _part/87/_geo_xyz/8,0,1 0.0\nP _part/87/_geo_xyz/8,0,2 0.0\nP _part/87/_geo_xyz/8,1,0 0.0\nP _part/87/_geo_xyz/8,1,1 0.0\nP _part/87/_geo_xyz/8,1,2 0.0\nP _part/87/_geo_xyz/8,10,0 0.0\nP _part/87/_geo_xyz/8,10,1 0.0\nP _part/87/_geo_xyz/8,10,2 0.0\nP _part/87/_geo_xyz/8,11,0 0.0\nP _part/87/_geo_xyz/8,11,1 0.0\nP _part/87/_geo_xyz/8,11,2 0.0\nP _part/87/_geo_xyz/8,12,0 0.0\nP _part/87/_geo_xyz/8,12,1 0.0\nP _part/87/_geo_xyz/8,12,2 0.0\nP _part/87/_geo_xyz/8,13,0 0.0\nP _part/87/_geo_xyz/8,13,1 0.0\nP _part/87/_geo_xyz/8,13,2 0.0\nP _part/87/_geo_xyz/8,14,0 0.0\nP _part/87/_geo_xyz/8,14,1 0.0\nP _part/87/_geo_xyz/8,14,2 0.0\nP _part/87/_geo_xyz/8,15,0 0.0\nP _part/87/_geo_xyz/8,15,1 0.0\nP _part/87/_geo_xyz/8,15,2 0.0\nP _part/87/_geo_xyz/8,16,0 0.0\nP _part/87/_geo_xyz/8,16,1 0.0\nP _part/87/_geo_xyz/8,16,2 0.0\nP _part/87/_geo_xyz/8,17,0 0.0\nP _part/87/_geo_xyz/8,17,1 0.0\nP _part/87/_geo_xyz/8,17,2 0.0\nP _part/87/_geo_xyz/8,2,0 0.0\nP _part/87/_geo_xyz/8,2,1 0.0\nP _part/87/_geo_xyz/8,2,2 0.0\nP _part/87/_geo_xyz/8,3,0 0.0\nP _part/87/_geo_xyz/8,3,1 0.0\nP _part/87/_geo_xyz/8,3,2 0.0\nP _part/87/_geo_xyz/8,4,0 0.0\nP _part/87/_geo_xyz/8,4,1 0.0\nP _part/87/_geo_xyz/8,4,2 0.0\nP _part/87/_geo_xyz/8,5,0 0.0\nP _part/87/_geo_xyz/8,5,1 0.0\nP _part/87/_geo_xyz/8,5,2 0.0\nP _part/87/_geo_xyz/8,6,0 0.0\nP _part/87/_geo_xyz/8,6,1 0.0\nP _part/87/_geo_xyz/8,6,2 0.0\nP _part/87/_geo_xyz/8,7,0 0.0\nP _part/87/_geo_xyz/8,7,1 0.0\nP _part/87/_geo_xyz/8,7,2 0.0\nP _part/87/_geo_xyz/8,8,0 0.0\nP _part/87/_geo_xyz/8,8,1 0.0\nP _part/87/_geo_xyz/8,8,2 0.0\nP _part/87/_geo_xyz/8,9,0 0.0\nP _part/87/_geo_xyz/8,9,1 0.0\nP _part/87/_geo_xyz/8,9,2 0.0\nP _part/87/_geo_xyz/9,0,0 0.0\nP _part/87/_geo_xyz/9,0,1 0.0\nP _part/87/_geo_xyz/9,0,2 0.0\nP _part/87/_geo_xyz/9,1,0 0.0\nP _part/87/_geo_xyz/9,1,1 0.0\nP _part/87/_geo_xyz/9,1,2 0.0\nP _part/87/_geo_xyz/9,10,0 0.0\nP _part/87/_geo_xyz/9,10,1 0.0\nP _part/87/_geo_xyz/9,10,2 0.0\nP _part/87/_geo_xyz/9,11,0 0.0\nP _part/87/_geo_xyz/9,11,1 0.0\nP _part/87/_geo_xyz/9,11,2 0.0\nP _part/87/_geo_xyz/9,12,0 0.0\nP _part/87/_geo_xyz/9,12,1 0.0\nP _part/87/_geo_xyz/9,12,2 0.0\nP _part/87/_geo_xyz/9,13,0 0.0\nP _part/87/_geo_xyz/9,13,1 0.0\nP _part/87/_geo_xyz/9,13,2 0.0\nP _part/87/_geo_xyz/9,14,0 0.0\nP _part/87/_geo_xyz/9,14,1 0.0\nP _part/87/_geo_xyz/9,14,2 0.0\nP _part/87/_geo_xyz/9,15,0 0.0\nP _part/87/_geo_xyz/9,15,1 0.0\nP _part/87/_geo_xyz/9,15,2 0.0\nP _part/87/_geo_xyz/9,16,0 0.0\nP _part/87/_geo_xyz/9,16,1 0.0\nP _part/87/_geo_xyz/9,16,2 0.0\nP _part/87/_geo_xyz/9,17,0 0.0\nP _part/87/_geo_xyz/9,17,1 0.0\nP _part/87/_geo_xyz/9,17,2 0.0\nP _part/87/_geo_xyz/9,2,0 0.0\nP _part/87/_geo_xyz/9,2,1 0.0\nP _part/87/_geo_xyz/9,2,2 0.0\nP _part/87/_geo_xyz/9,3,0 0.0\nP _part/87/_geo_xyz/9,3,1 0.0\nP _part/87/_geo_xyz/9,3,2 0.0\nP _part/87/_geo_xyz/9,4,0 0.0\nP _part/87/_geo_xyz/9,4,1 0.0\nP _part/87/_geo_xyz/9,4,2 0.0\nP _part/87/_geo_xyz/9,5,0 0.0\nP _part/87/_geo_xyz/9,5,1 0.0\nP _part/87/_geo_xyz/9,5,2 0.0\nP _part/87/_geo_xyz/9,6,0 0.0\nP _part/87/_geo_xyz/9,6,1 0.0\nP _part/87/_geo_xyz/9,6,2 0.0\nP _part/87/_geo_xyz/9,7,0 0.0\nP _part/87/_geo_xyz/9,7,1 0.0\nP _part/87/_geo_xyz/9,7,2 0.0\nP _part/87/_geo_xyz/9,8,0 0.0\nP _part/87/_geo_xyz/9,8,1 0.0\nP _part/87/_geo_xyz/9,8,2 0.0\nP _part/87/_geo_xyz/9,9,0 0.0\nP _part/87/_geo_xyz/9,9,1 0.0\nP _part/87/_geo_xyz/9,9,2 0.0\nP _part/87/_geo_xyz/i_count 20\nP _part/87/_geo_xyz/j_count 18\nP _part/87/_geo_xyz/k_count 3\nP _part/87/_locked/0,0 0\nP _part/87/_locked/0,1 0\nP _part/87/_locked/0,10 0\nP _part/87/_locked/0,11 0\nP _part/87/_locked/0,12 0\nP _part/87/_locked/0,13 0\nP _part/87/_locked/0,14 0\nP _part/87/_locked/0,15 0\nP _part/87/_locked/0,16 0\nP _part/87/_locked/0,17 0\nP _part/87/_locked/0,2 0\nP _part/87/_locked/0,3 0\nP _part/87/_locked/0,4 0\nP _part/87/_locked/0,5 0\nP _part/87/_locked/0,6 0\nP _part/87/_locked/0,7 0\nP _part/87/_locked/0,8 0\nP _part/87/_locked/0,9 0\nP _part/87/_locked/1,0 0\nP _part/87/_locked/1,1 0\nP _part/87/_locked/1,10 0\nP _part/87/_locked/1,11 0\nP _part/87/_locked/1,12 0\nP _part/87/_locked/1,13 0\nP _part/87/_locked/1,14 0\nP _part/87/_locked/1,15 0\nP _part/87/_locked/1,16 0\nP _part/87/_locked/1,17 0\nP _part/87/_locked/1,2 0\nP _part/87/_locked/1,3 0\nP _part/87/_locked/1,4 0\nP _part/87/_locked/1,5 0\nP _part/87/_locked/1,6 0\nP _part/87/_locked/1,7 0\nP _part/87/_locked/1,8 0\nP _part/87/_locked/1,9 0\nP _part/87/_locked/10,0 0\nP _part/87/_locked/10,1 0\nP _part/87/_locked/10,10 0\nP _part/87/_locked/10,11 0\nP _part/87/_locked/10,12 0\nP _part/87/_locked/10,13 0\nP _part/87/_locked/10,14 0\nP _part/87/_locked/10,15 0\nP _part/87/_locked/10,16 0\nP _part/87/_locked/10,17 0\nP _part/87/_locked/10,2 0\nP _part/87/_locked/10,3 0\nP _part/87/_locked/10,4 0\nP _part/87/_locked/10,5 0\nP _part/87/_locked/10,6 0\nP _part/87/_locked/10,7 0\nP _part/87/_locked/10,8 0\nP _part/87/_locked/10,9 0\nP _part/87/_locked/11,0 0\nP _part/87/_locked/11,1 0\nP _part/87/_locked/11,10 0\nP _part/87/_locked/11,11 0\nP _part/87/_locked/11,12 0\nP _part/87/_locked/11,13 0\nP _part/87/_locked/11,14 0\nP _part/87/_locked/11,15 0\nP _part/87/_locked/11,16 0\nP _part/87/_locked/11,17 0\nP _part/87/_locked/11,2 0\nP _part/87/_locked/11,3 0\nP _part/87/_locked/11,4 0\nP _part/87/_locked/11,5 0\nP _part/87/_locked/11,6 0\nP _part/87/_locked/11,7 0\nP _part/87/_locked/11,8 0\nP _part/87/_locked/11,9 0\nP _part/87/_locked/12,0 0\nP _part/87/_locked/12,1 0\nP _part/87/_locked/12,10 0\nP _part/87/_locked/12,11 0\nP _part/87/_locked/12,12 0\nP _part/87/_locked/12,13 0\nP _part/87/_locked/12,14 0\nP _part/87/_locked/12,15 0\nP _part/87/_locked/12,16 0\nP _part/87/_locked/12,17 0\nP _part/87/_locked/12,2 0\nP _part/87/_locked/12,3 0\nP _part/87/_locked/12,4 0\nP _part/87/_locked/12,5 0\nP _part/87/_locked/12,6 0\nP _part/87/_locked/12,7 0\nP _part/87/_locked/12,8 0\nP _part/87/_locked/12,9 0\nP _part/87/_locked/13,0 0\nP _part/87/_locked/13,1 0\nP _part/87/_locked/13,10 0\nP _part/87/_locked/13,11 0\nP _part/87/_locked/13,12 0\nP _part/87/_locked/13,13 0\nP _part/87/_locked/13,14 0\nP _part/87/_locked/13,15 0\nP _part/87/_locked/13,16 0\nP _part/87/_locked/13,17 0\nP _part/87/_locked/13,2 0\nP _part/87/_locked/13,3 0\nP _part/87/_locked/13,4 0\nP _part/87/_locked/13,5 0\nP _part/87/_locked/13,6 0\nP _part/87/_locked/13,7 0\nP _part/87/_locked/13,8 0\nP _part/87/_locked/13,9 0\nP _part/87/_locked/14,0 0\nP _part/87/_locked/14,1 0\nP _part/87/_locked/14,10 0\nP _part/87/_locked/14,11 0\nP _part/87/_locked/14,12 0\nP _part/87/_locked/14,13 0\nP _part/87/_locked/14,14 0\nP _part/87/_locked/14,15 0\nP _part/87/_locked/14,16 0\nP _part/87/_locked/14,17 0\nP _part/87/_locked/14,2 0\nP _part/87/_locked/14,3 0\nP _part/87/_locked/14,4 0\nP _part/87/_locked/14,5 0\nP _part/87/_locked/14,6 0\nP _part/87/_locked/14,7 0\nP _part/87/_locked/14,8 0\nP _part/87/_locked/14,9 0\nP _part/87/_locked/15,0 0\nP _part/87/_locked/15,1 0\nP _part/87/_locked/15,10 0\nP _part/87/_locked/15,11 0\nP _part/87/_locked/15,12 0\nP _part/87/_locked/15,13 0\nP _part/87/_locked/15,14 0\nP _part/87/_locked/15,15 0\nP _part/87/_locked/15,16 0\nP _part/87/_locked/15,17 0\nP _part/87/_locked/15,2 0\nP _part/87/_locked/15,3 0\nP _part/87/_locked/15,4 0\nP _part/87/_locked/15,5 0\nP _part/87/_locked/15,6 0\nP _part/87/_locked/15,7 0\nP _part/87/_locked/15,8 0\nP _part/87/_locked/15,9 0\nP _part/87/_locked/16,0 0\nP _part/87/_locked/16,1 0\nP _part/87/_locked/16,10 0\nP _part/87/_locked/16,11 0\nP _part/87/_locked/16,12 0\nP _part/87/_locked/16,13 0\nP _part/87/_locked/16,14 0\nP _part/87/_locked/16,15 0\nP _part/87/_locked/16,16 0\nP _part/87/_locked/16,17 0\nP _part/87/_locked/16,2 0\nP _part/87/_locked/16,3 0\nP _part/87/_locked/16,4 0\nP _part/87/_locked/16,5 0\nP _part/87/_locked/16,6 0\nP _part/87/_locked/16,7 0\nP _part/87/_locked/16,8 0\nP _part/87/_locked/16,9 0\nP _part/87/_locked/17,0 0\nP _part/87/_locked/17,1 0\nP _part/87/_locked/17,10 0\nP _part/87/_locked/17,11 0\nP _part/87/_locked/17,12 0\nP _part/87/_locked/17,13 0\nP _part/87/_locked/17,14 0\nP _part/87/_locked/17,15 0\nP _part/87/_locked/17,16 0\nP _part/87/_locked/17,17 0\nP _part/87/_locked/17,2 0\nP _part/87/_locked/17,3 0\nP _part/87/_locked/17,4 0\nP _part/87/_locked/17,5 0\nP _part/87/_locked/17,6 0\nP _part/87/_locked/17,7 0\nP _part/87/_locked/17,8 0\nP _part/87/_locked/17,9 0\nP _part/87/_locked/18,0 0\nP _part/87/_locked/18,1 0\nP _part/87/_locked/18,10 0\nP _part/87/_locked/18,11 0\nP _part/87/_locked/18,12 0\nP _part/87/_locked/18,13 0\nP _part/87/_locked/18,14 0\nP _part/87/_locked/18,15 0\nP _part/87/_locked/18,16 0\nP _part/87/_locked/18,17 0\nP _part/87/_locked/18,2 0\nP _part/87/_locked/18,3 0\nP _part/87/_locked/18,4 0\nP _part/87/_locked/18,5 0\nP _part/87/_locked/18,6 0\nP _part/87/_locked/18,7 0\nP _part/87/_locked/18,8 0\nP _part/87/_locked/18,9 0\nP _part/87/_locked/19,0 0\nP _part/87/_locked/19,1 0\nP _part/87/_locked/19,10 0\nP _part/87/_locked/19,11 0\nP _part/87/_locked/19,12 0\nP _part/87/_locked/19,13 0\nP _part/87/_locked/19,14 0\nP _part/87/_locked/19,15 0\nP _part/87/_locked/19,16 0\nP _part/87/_locked/19,17 0\nP _part/87/_locked/19,2 0\nP _part/87/_locked/19,3 0\nP _part/87/_locked/19,4 0\nP _part/87/_locked/19,5 0\nP _part/87/_locked/19,6 0\nP _part/87/_locked/19,7 0\nP _part/87/_locked/19,8 0\nP _part/87/_locked/19,9 0\nP _part/87/_locked/2,0 0\nP _part/87/_locked/2,1 0\nP _part/87/_locked/2,10 0\nP _part/87/_locked/2,11 0\nP _part/87/_locked/2,12 0\nP _part/87/_locked/2,13 0\nP _part/87/_locked/2,14 0\nP _part/87/_locked/2,15 0\nP _part/87/_locked/2,16 0\nP _part/87/_locked/2,17 0\nP _part/87/_locked/2,2 0\nP _part/87/_locked/2,3 0\nP _part/87/_locked/2,4 0\nP _part/87/_locked/2,5 0\nP _part/87/_locked/2,6 0\nP _part/87/_locked/2,7 0\nP _part/87/_locked/2,8 0\nP _part/87/_locked/2,9 0\nP _part/87/_locked/3,0 0\nP _part/87/_locked/3,1 0\nP _part/87/_locked/3,10 0\nP _part/87/_locked/3,11 0\nP _part/87/_locked/3,12 0\nP _part/87/_locked/3,13 0\nP _part/87/_locked/3,14 0\nP _part/87/_locked/3,15 0\nP _part/87/_locked/3,16 0\nP _part/87/_locked/3,17 0\nP _part/87/_locked/3,2 0\nP _part/87/_locked/3,3 0\nP _part/87/_locked/3,4 0\nP _part/87/_locked/3,5 0\nP _part/87/_locked/3,6 0\nP _part/87/_locked/3,7 0\nP _part/87/_locked/3,8 0\nP _part/87/_locked/3,9 0\nP _part/87/_locked/4,0 0\nP _part/87/_locked/4,1 0\nP _part/87/_locked/4,10 0\nP _part/87/_locked/4,11 0\nP _part/87/_locked/4,12 0\nP _part/87/_locked/4,13 0\nP _part/87/_locked/4,14 0\nP _part/87/_locked/4,15 0\nP _part/87/_locked/4,16 0\nP _part/87/_locked/4,17 0\nP _part/87/_locked/4,2 0\nP _part/87/_locked/4,3 0\nP _part/87/_locked/4,4 0\nP _part/87/_locked/4,5 0\nP _part/87/_locked/4,6 0\nP _part/87/_locked/4,7 0\nP _part/87/_locked/4,8 0\nP _part/87/_locked/4,9 0\nP _part/87/_locked/5,0 0\nP _part/87/_locked/5,1 0\nP _part/87/_locked/5,10 0\nP _part/87/_locked/5,11 0\nP _part/87/_locked/5,12 0\nP _part/87/_locked/5,13 0\nP _part/87/_locked/5,14 0\nP _part/87/_locked/5,15 0\nP _part/87/_locked/5,16 0\nP _part/87/_locked/5,17 0\nP _part/87/_locked/5,2 0\nP _part/87/_locked/5,3 0\nP _part/87/_locked/5,4 0\nP _part/87/_locked/5,5 0\nP _part/87/_locked/5,6 0\nP _part/87/_locked/5,7 0\nP _part/87/_locked/5,8 0\nP _part/87/_locked/5,9 0\nP _part/87/_locked/6,0 0\nP _part/87/_locked/6,1 0\nP _part/87/_locked/6,10 0\nP _part/87/_locked/6,11 0\nP _part/87/_locked/6,12 0\nP _part/87/_locked/6,13 0\nP _part/87/_locked/6,14 0\nP _part/87/_locked/6,15 0\nP _part/87/_locked/6,16 0\nP _part/87/_locked/6,17 0\nP _part/87/_locked/6,2 0\nP _part/87/_locked/6,3 0\nP _part/87/_locked/6,4 0\nP _part/87/_locked/6,5 0\nP _part/87/_locked/6,6 0\nP _part/87/_locked/6,7 0\nP _part/87/_locked/6,8 0\nP _part/87/_locked/6,9 0\nP _part/87/_locked/7,0 0\nP _part/87/_locked/7,1 0\nP _part/87/_locked/7,10 0\nP _part/87/_locked/7,11 0\nP _part/87/_locked/7,12 0\nP _part/87/_locked/7,13 0\nP _part/87/_locked/7,14 0\nP _part/87/_locked/7,15 0\nP _part/87/_locked/7,16 0\nP _part/87/_locked/7,17 0\nP _part/87/_locked/7,2 0\nP _part/87/_locked/7,3 0\nP _part/87/_locked/7,4 0\nP _part/87/_locked/7,5 0\nP _part/87/_locked/7,6 0\nP _part/87/_locked/7,7 0\nP _part/87/_locked/7,8 0\nP _part/87/_locked/7,9 0\nP _part/87/_locked/8,0 0\nP _part/87/_locked/8,1 0\nP _part/87/_locked/8,10 0\nP _part/87/_locked/8,11 0\nP _part/87/_locked/8,12 0\nP _part/87/_locked/8,13 0\nP _part/87/_locked/8,14 0\nP _part/87/_locked/8,15 0\nP _part/87/_locked/8,16 0\nP _part/87/_locked/8,17 0\nP _part/87/_locked/8,2 0\nP _part/87/_locked/8,3 0\nP _part/87/_locked/8,4 0\nP _part/87/_locked/8,5 0\nP _part/87/_locked/8,6 0\nP _part/87/_locked/8,7 0\nP _part/87/_locked/8,8 0\nP _part/87/_locked/8,9 0\nP _part/87/_locked/9,0 0\nP _part/87/_locked/9,1 0\nP _part/87/_locked/9,10 0\nP _part/87/_locked/9,11 0\nP _part/87/_locked/9,12 0\nP _part/87/_locked/9,13 0\nP _part/87/_locked/9,14 0\nP _part/87/_locked/9,15 0\nP _part/87/_locked/9,16 0\nP _part/87/_locked/9,17 0\nP _part/87/_locked/9,2 0\nP _part/87/_locked/9,3 0\nP _part/87/_locked/9,4 0\nP _part/87/_locked/9,5 0\nP _part/87/_locked/9,6 0\nP _part/87/_locked/9,7 0\nP _part/87/_locked/9,8 0\nP _part/87/_locked/9,9 0\nP _part/87/_locked/i_count 20\nP _part/87/_locked/j_count 18\nP _part/87/_part_cd 0.075000003\nP _part/87/_part_phi 0.0\nP _part/87/_part_psi 0.0\nP _part/87/_part_rad 2.0\nP _part/87/_part_specs_eq 0\nP _part/87/_part_specs_invis 0\nP _part/87/_part_specs_unused1 0\nP _part/87/_part_specs_unused2 0\nP _part/87/_part_tex 0\nP _part/87/_part_the 0.0\nP _part/87/_part_x 0.0\nP _part/87/_part_y 0.0\nP _part/87/_part_z 0.0\nP _part/87/_patt_con 0\nP _part/87/_patt_prt 0\nP _part/87/_patt_rat 0.0\nP _part/87/_r_dim 10\nP _part/87/_s_dim 8\nP _part/87/_scon 37.676635742\nP _part/87/_top_s1 0.632812500\nP _part/87/_top_s2 0.753906250\nP _part/87/_top_t1 0.254882812\nP _part/87/_top_t2 0.295898438\nP _part/9/_aero_x_os 0.0\nP _part/9/_aero_y_os 0.0\nP _part/9/_aero_z_os 0.0\nP _part/9/_area_frnt 0.0\nP _part/9/_area_side 0.0\nP _part/9/_area_vert 0.0\nP _part/9/_bot_s1 0.755999982\nP _part/9/_bot_s2 1.0\nP _part/9/_bot_t1 0.0\nP _part/9/_bot_t2 0.384000003\nP _part/9/_damp 1.883831739\nP _part/9/_geo_xyz/0,0,0 0.0\nP _part/9/_geo_xyz/0,0,1 0.0\nP _part/9/_geo_xyz/0,0,2 -0.820209980\nP _part/9/_geo_xyz/0,1,0 0.0\nP _part/9/_geo_xyz/0,1,1 0.139720470\nP _part/9/_geo_xyz/0,1,2 -0.716699481\nP _part/9/_geo_xyz/0,10,0 0.0\nP _part/9/_geo_xyz/0,10,1 -0.134547234\nP _part/9/_geo_xyz/0,10,2 -0.069849081\nP _part/9/_geo_xyz/0,11,0 0.0\nP _part/9/_geo_xyz/0,11,1 -0.113846451\nP _part/9/_geo_xyz/0,11,2 -0.597703397\nP _part/9/_geo_xyz/0,12,0 0.0\nP _part/9/_geo_xyz/0,12,1 -0.082795277\nP _part/9/_geo_xyz/0,12,2 -0.747768998\nP _part/9/_geo_xyz/0,13,0 0.0\nP _part/9/_geo_xyz/0,13,1 0.0\nP _part/9/_geo_xyz/0,13,2 -0.820209980\nP _part/9/_geo_xyz/0,14,0 0.0\nP _part/9/_geo_xyz/0,14,1 0.0\nP _part/9/_geo_xyz/0,14,2 0.0\nP _part/9/_geo_xyz/0,15,0 0.0\nP _part/9/_geo_xyz/0,15,1 0.0\nP _part/9/_geo_xyz/0,15,2 0.0\nP _part/9/_geo_xyz/0,16,0 0.0\nP _part/9/_geo_xyz/0,16,1 0.0\nP _part/9/_geo_xyz/0,16,2 0.0\nP _part/9/_geo_xyz/0,17,0 0.0\nP _part/9/_geo_xyz/0,17,1 0.0\nP _part/9/_geo_xyz/0,17,2 0.0\nP _part/9/_geo_xyz/0,2,0 0.0\nP _part/9/_geo_xyz/0,2,1 0.227692902\nP _part/9/_geo_xyz/0,2,2 -0.468307078\nP _part/9/_geo_xyz/0,3,0 0.0\nP _part/9/_geo_xyz/0,3,1 0.263917327\nP _part/9/_geo_xyz/0,3,2 -0.018110236\nP _part/9/_geo_xyz/0,4,0 0.0\nP _part/9/_geo_xyz/0,4,1 0.238043293\nP _part/9/_geo_xyz/0,4,2 0.628740191\nP _part/9/_geo_xyz/0,5,0 0.0\nP _part/9/_geo_xyz/0,5,1 0.213162914\nP _part/9/_geo_xyz/0,5,2 0.820209980\nP _part/9/_geo_xyz/0,6,0 0.0\nP _part/9/_geo_xyz/0,6,1 0.0\nP _part/9/_geo_xyz/0,6,2 2.460629940\nP _part/9/_geo_xyz/0,7,0 0.0\nP _part/9/_geo_xyz/0,7,1 0.0\nP _part/9/_geo_xyz/0,7,2 2.460629940\nP _part/9/_geo_xyz/0,8,0 0.0\nP _part/9/_geo_xyz/0,8,1 -0.092678614\nP _part/9/_geo_xyz/0,8,2 0.820209980\nP _part/9/_geo_xyz/0,9,0 0.0\nP _part/9/_geo_xyz/0,9,1 -0.103496060\nP _part/9/_geo_xyz/0,9,2 0.628740191\nP _part/9/_geo_xyz/1,0,0 6.561679840\nP _part/9/_geo_xyz/1,0,1 0.0\nP _part/9/_geo_xyz/1,0,2 -0.820209980\nP _part/9/_geo_xyz/1,1,0 6.561679840\nP _part/9/_geo_xyz/1,1,1 0.139720470\nP _part/9/_geo_xyz/1,1,2 -0.716699481\nP _part/9/_geo_xyz/1,10,0 6.561679840\nP _part/9/_geo_xyz/1,10,1 -0.134547234\nP _part/9/_geo_xyz/1,10,2 -0.069849081\nP _part/9/_geo_xyz/1,11,0 6.561679840\nP _part/9/_geo_xyz/1,11,1 -0.113846451\nP _part/9/_geo_xyz/1,11,2 -0.597703397\nP _part/9/_geo_xyz/1,12,0 6.561679840\nP _part/9/_geo_xyz/1,12,1 -0.082795277\nP _part/9/_geo_xyz/1,12,2 -0.747768998\nP _part/9/_geo_xyz/1,13,0 6.561679840\nP _part/9/_geo_xyz/1,13,1 0.0\nP _part/9/_geo_xyz/1,13,2 -0.820209980\nP _part/9/_geo_xyz/1,14,0 0.0\nP _part/9/_geo_xyz/1,14,1 0.0\nP _part/9/_geo_xyz/1,14,2 0.0\nP _part/9/_geo_xyz/1,15,0 0.0\nP _part/9/_geo_xyz/1,15,1 0.0\nP _part/9/_geo_xyz/1,15,2 0.0\nP _part/9/_geo_xyz/1,16,0 0.0\nP _part/9/_geo_xyz/1,16,1 0.0\nP _part/9/_geo_xyz/1,16,2 0.0\nP _part/9/_geo_xyz/1,17,0 0.0\nP _part/9/_geo_xyz/1,17,1 0.0\nP _part/9/_geo_xyz/1,17,2 0.0\nP _part/9/_geo_xyz/1,2,0 6.561679840\nP _part/9/_geo_xyz/1,2,1 0.227692902\nP _part/9/_geo_xyz/1,2,2 -0.468307078\nP _part/9/_geo_xyz/1,3,0 6.561679840\nP _part/9/_geo_xyz/1,3,1 0.263917327\nP _part/9/_geo_xyz/1,3,2 -0.018110236\nP _part/9/_geo_xyz/1,4,0 6.561679840\nP _part/9/_geo_xyz/1,4,1 0.238043293\nP _part/9/_geo_xyz/1,4,2 0.628740191\nP _part/9/_geo_xyz/1,5,0 6.561679840\nP _part/9/_geo_xyz/1,5,1 0.213162914\nP _part/9/_geo_xyz/1,5,2 0.820209980\nP _part/9/_geo_xyz/1,6,0 6.561679840\nP _part/9/_geo_xyz/1,6,1 0.0\nP _part/9/_geo_xyz/1,6,2 2.460629940\nP _part/9/_geo_xyz/1,7,0 6.561679840\nP _part/9/_geo_xyz/1,7,1 0.0\nP _part/9/_geo_xyz/1,7,2 2.460629940\nP _part/9/_geo_xyz/1,8,0 6.561679840\nP _part/9/_geo_xyz/1,8,1 -0.092678614\nP _part/9/_geo_xyz/1,8,2 0.820209980\nP _part/9/_geo_xyz/1,9,0 6.561679840\nP _part/9/_geo_xyz/1,9,1 -0.103496060\nP _part/9/_geo_xyz/1,9,2 0.628740191\nP _part/9/_geo_xyz/10,0,0 32.808399200\nP _part/9/_geo_xyz/10,0,1 0.0\nP _part/9/_geo_xyz/10,0,2 -0.820209980\nP _part/9/_geo_xyz/10,1,0 32.808399200\nP _part/9/_geo_xyz/10,1,1 0.139720470\nP _part/9/_geo_xyz/10,1,2 -0.716699481\nP _part/9/_geo_xyz/10,10,0 32.808399200\nP _part/9/_geo_xyz/10,10,1 -0.134547234\nP _part/9/_geo_xyz/10,10,2 -0.069849081\nP _part/9/_geo_xyz/10,11,0 32.808399200\nP _part/9/_geo_xyz/10,11,1 -0.113846451\nP _part/9/_geo_xyz/10,11,2 -0.597703397\nP _part/9/_geo_xyz/10,12,0 32.808399200\nP _part/9/_geo_xyz/10,12,1 -0.082795277\nP _part/9/_geo_xyz/10,12,2 -0.747768998\nP _part/9/_geo_xyz/10,13,0 32.808399200\nP _part/9/_geo_xyz/10,13,1 0.0\nP _part/9/_geo_xyz/10,13,2 -0.820209980\nP _part/9/_geo_xyz/10,14,0 0.0\nP _part/9/_geo_xyz/10,14,1 0.0\nP _part/9/_geo_xyz/10,14,2 0.0\nP _part/9/_geo_xyz/10,15,0 0.0\nP _part/9/_geo_xyz/10,15,1 0.0\nP _part/9/_geo_xyz/10,15,2 0.0\nP _part/9/_geo_xyz/10,16,0 0.0\nP _part/9/_geo_xyz/10,16,1 0.0\nP _part/9/_geo_xyz/10,16,2 0.0\nP _part/9/_geo_xyz/10,17,0 0.0\nP _part/9/_geo_xyz/10,17,1 0.0\nP _part/9/_geo_xyz/10,17,2 0.0\nP _part/9/_geo_xyz/10,2,0 32.808399200\nP _part/9/_geo_xyz/10,2,1 0.227692902\nP _part/9/_geo_xyz/10,2,2 -0.468307078\nP _part/9/_geo_xyz/10,3,0 32.808399200\nP _part/9/_geo_xyz/10,3,1 0.263917327\nP _part/9/_geo_xyz/10,3,2 -0.018110236\nP _part/9/_geo_xyz/10,4,0 32.808399200\nP _part/9/_geo_xyz/10,4,1 0.238043293\nP _part/9/_geo_xyz/10,4,2 0.628740191\nP _part/9/_geo_xyz/10,5,0 32.808399200\nP _part/9/_geo_xyz/10,5,1 0.106581457\nP _part/9/_geo_xyz/10,5,2 1.640419960\nP _part/9/_geo_xyz/10,6,0 32.808399200\nP _part/9/_geo_xyz/10,6,1 0.0\nP _part/9/_geo_xyz/10,6,2 2.460629940\nP _part/9/_geo_xyz/10,7,0 32.808399200\nP _part/9/_geo_xyz/10,7,1 0.0\nP _part/9/_geo_xyz/10,7,2 2.460629940\nP _part/9/_geo_xyz/10,8,0 32.808399200\nP _part/9/_geo_xyz/10,8,1 -0.046339307\nP _part/9/_geo_xyz/10,8,2 1.640419960\nP _part/9/_geo_xyz/10,9,0 32.808399200\nP _part/9/_geo_xyz/10,9,1 -0.103496060\nP _part/9/_geo_xyz/10,9,2 0.628740191\nP _part/9/_geo_xyz/11,0,0 39.370079041\nP _part/9/_geo_xyz/11,0,1 0.0\nP _part/9/_geo_xyz/11,0,2 -0.820209980\nP _part/9/_geo_xyz/11,1,0 39.370079041\nP _part/9/_geo_xyz/11,1,1 0.139720470\nP _part/9/_geo_xyz/11,1,2 -0.716699481\nP _part/9/_geo_xyz/11,10,0 39.370079041\nP _part/9/_geo_xyz/11,10,1 -0.134547234\nP _part/9/_geo_xyz/11,10,2 -0.069849081\nP _part/9/_geo_xyz/11,11,0 39.370079041\nP _part/9/_geo_xyz/11,11,1 -0.113846451\nP _part/9/_geo_xyz/11,11,2 -0.597703397\nP _part/9/_geo_xyz/11,12,0 39.370079041\nP _part/9/_geo_xyz/11,12,1 -0.082795277\nP _part/9/_geo_xyz/11,12,2 -0.747768998\nP _part/9/_geo_xyz/11,13,0 39.370079041\nP _part/9/_geo_xyz/11,13,1 0.0\nP _part/9/_geo_xyz/11,13,2 -0.820209980\nP _part/9/_geo_xyz/11,14,0 0.0\nP _part/9/_geo_xyz/11,14,1 0.0\nP _part/9/_geo_xyz/11,14,2 0.0\nP _part/9/_geo_xyz/11,15,0 0.0\nP _part/9/_geo_xyz/11,15,1 0.0\nP _part/9/_geo_xyz/11,15,2 0.0\nP _part/9/_geo_xyz/11,16,0 0.0\nP _part/9/_geo_xyz/11,16,1 0.0\nP _part/9/_geo_xyz/11,16,2 0.0\nP _part/9/_geo_xyz/11,17,0 0.0\nP _part/9/_geo_xyz/11,17,1 0.0\nP _part/9/_geo_xyz/11,17,2 0.0\nP _part/9/_geo_xyz/11,2,0 39.370079041\nP _part/9/_geo_xyz/11,2,1 0.227692902\nP _part/9/_geo_xyz/11,2,2 -0.468307078\nP _part/9/_geo_xyz/11,3,0 39.370079041\nP _part/9/_geo_xyz/11,3,1 0.263917327\nP _part/9/_geo_xyz/11,3,2 -0.018110236\nP _part/9/_geo_xyz/11,4,0 39.370079041\nP _part/9/_geo_xyz/11,4,1 0.238043293\nP _part/9/_geo_xyz/11,4,2 0.628740191\nP _part/9/_geo_xyz/11,5,0 39.370079041\nP _part/9/_geo_xyz/11,5,1 0.106581457\nP _part/9/_geo_xyz/11,5,2 1.640419960\nP _part/9/_geo_xyz/11,6,0 39.370079041\nP _part/9/_geo_xyz/11,6,1 0.0\nP _part/9/_geo_xyz/11,6,2 2.460629940\nP _part/9/_geo_xyz/11,7,0 39.370079041\nP _part/9/_geo_xyz/11,7,1 0.0\nP _part/9/_geo_xyz/11,7,2 2.460629940\nP _part/9/_geo_xyz/11,8,0 39.370079041\nP _part/9/_geo_xyz/11,8,1 -0.046339307\nP _part/9/_geo_xyz/11,8,2 1.640419960\nP _part/9/_geo_xyz/11,9,0 39.370079041\nP _part/9/_geo_xyz/11,9,1 -0.103496060\nP _part/9/_geo_xyz/11,9,2 0.628740191\nP _part/9/_geo_xyz/12,0,0 39.370079041\nP _part/9/_geo_xyz/12,0,1 0.0\nP _part/9/_geo_xyz/12,0,2 -0.820209980\nP _part/9/_geo_xyz/12,1,0 39.370079041\nP _part/9/_geo_xyz/12,1,1 0.139720470\nP _part/9/_geo_xyz/12,1,2 -0.716699481\nP _part/9/_geo_xyz/12,10,0 39.370079041\nP _part/9/_geo_xyz/12,10,1 -0.134547234\nP _part/9/_geo_xyz/12,10,2 -0.069849081\nP _part/9/_geo_xyz/12,11,0 39.370079041\nP _part/9/_geo_xyz/12,11,1 -0.113846451\nP _part/9/_geo_xyz/12,11,2 -0.597703397\nP _part/9/_geo_xyz/12,12,0 39.370079041\nP _part/9/_geo_xyz/12,12,1 -0.082795277\nP _part/9/_geo_xyz/12,12,2 -0.747768998\nP _part/9/_geo_xyz/12,13,0 39.370079041\nP _part/9/_geo_xyz/12,13,1 0.0\nP _part/9/_geo_xyz/12,13,2 -0.820209980\nP _part/9/_geo_xyz/12,14,0 0.0\nP _part/9/_geo_xyz/12,14,1 0.0\nP _part/9/_geo_xyz/12,14,2 0.0\nP _part/9/_geo_xyz/12,15,0 0.0\nP _part/9/_geo_xyz/12,15,1 0.0\nP _part/9/_geo_xyz/12,15,2 0.0\nP _part/9/_geo_xyz/12,16,0 0.0\nP _part/9/_geo_xyz/12,16,1 0.0\nP _part/9/_geo_xyz/12,16,2 0.0\nP _part/9/_geo_xyz/12,17,0 0.0\nP _part/9/_geo_xyz/12,17,1 0.0\nP _part/9/_geo_xyz/12,17,2 0.0\nP _part/9/_geo_xyz/12,2,0 39.370079041\nP _part/9/_geo_xyz/12,2,1 0.227692902\nP _part/9/_geo_xyz/12,2,2 -0.468307078\nP _part/9/_geo_xyz/12,3,0 39.370079041\nP _part/9/_geo_xyz/12,3,1 0.263917327\nP _part/9/_geo_xyz/12,3,2 -0.018110236\nP _part/9/_geo_xyz/12,4,0 39.370079041\nP _part/9/_geo_xyz/12,4,1 0.238043293\nP _part/9/_geo_xyz/12,4,2 0.628740191\nP _part/9/_geo_xyz/12,5,0 39.370079041\nP _part/9/_geo_xyz/12,5,1 0.213162914\nP _part/9/_geo_xyz/12,5,2 0.820209980\nP _part/9/_geo_xyz/12,6,0 39.370079041\nP _part/9/_geo_xyz/12,6,1 0.0\nP _part/9/_geo_xyz/12,6,2 2.460629940\nP _part/9/_geo_xyz/12,7,0 39.370079041\nP _part/9/_geo_xyz/12,7,1 0.0\nP _part/9/_geo_xyz/12,7,2 2.460629940\nP _part/9/_geo_xyz/12,8,0 39.370079041\nP _part/9/_geo_xyz/12,8,1 -0.092678614\nP _part/9/_geo_xyz/12,8,2 0.820209980\nP _part/9/_geo_xyz/12,9,0 39.370079041\nP _part/9/_geo_xyz/12,9,1 -0.103496060\nP _part/9/_geo_xyz/12,9,2 0.628740191\nP _part/9/_geo_xyz/13,0,0 45.931758881\nP _part/9/_geo_xyz/13,0,1 0.0\nP _part/9/_geo_xyz/13,0,2 -0.820209980\nP _part/9/_geo_xyz/13,1,0 45.931758881\nP _part/9/_geo_xyz/13,1,1 0.139720470\nP _part/9/_geo_xyz/13,1,2 -0.716699481\nP _part/9/_geo_xyz/13,10,0 45.931758881\nP _part/9/_geo_xyz/13,10,1 -0.134547234\nP _part/9/_geo_xyz/13,10,2 -0.069849081\nP _part/9/_geo_xyz/13,11,0 45.931758881\nP _part/9/_geo_xyz/13,11,1 -0.113846451\nP _part/9/_geo_xyz/13,11,2 -0.597703397\nP _part/9/_geo_xyz/13,12,0 45.931758881\nP _part/9/_geo_xyz/13,12,1 -0.082795277\nP _part/9/_geo_xyz/13,12,2 -0.747768998\nP _part/9/_geo_xyz/13,13,0 45.931758881\nP _part/9/_geo_xyz/13,13,1 0.0\nP _part/9/_geo_xyz/13,13,2 -0.820209980\nP _part/9/_geo_xyz/13,14,0 0.0\nP _part/9/_geo_xyz/13,14,1 0.0\nP _part/9/_geo_xyz/13,14,2 0.0\nP _part/9/_geo_xyz/13,15,0 0.0\nP _part/9/_geo_xyz/13,15,1 0.0\nP _part/9/_geo_xyz/13,15,2 0.0\nP _part/9/_geo_xyz/13,16,0 0.0\nP _part/9/_geo_xyz/13,16,1 0.0\nP _part/9/_geo_xyz/13,16,2 0.0\nP _part/9/_geo_xyz/13,17,0 0.0\nP _part/9/_geo_xyz/13,17,1 0.0\nP _part/9/_geo_xyz/13,17,2 0.0\nP _part/9/_geo_xyz/13,2,0 45.931758881\nP _part/9/_geo_xyz/13,2,1 0.227692902\nP _part/9/_geo_xyz/13,2,2 -0.468307078\nP _part/9/_geo_xyz/13,3,0 45.931758881\nP _part/9/_geo_xyz/13,3,1 0.263917327\nP _part/9/_geo_xyz/13,3,2 -0.018110236\nP _part/9/_geo_xyz/13,4,0 45.931758881\nP _part/9/_geo_xyz/13,4,1 0.238043293\nP _part/9/_geo_xyz/13,4,2 0.628740191\nP _part/9/_geo_xyz/13,5,0 45.931758881\nP _part/9/_geo_xyz/13,5,1 0.213162914\nP _part/9/_geo_xyz/13,5,2 0.820209980\nP _part/9/_geo_xyz/13,6,0 45.931758881\nP _part/9/_geo_xyz/13,6,1 0.0\nP _part/9/_geo_xyz/13,6,2 2.460629940\nP _part/9/_geo_xyz/13,7,0 45.931758881\nP _part/9/_geo_xyz/13,7,1 0.0\nP _part/9/_geo_xyz/13,7,2 2.460629940\nP _part/9/_geo_xyz/13,8,0 45.931758881\nP _part/9/_geo_xyz/13,8,1 -0.092678614\nP _part/9/_geo_xyz/13,8,2 0.820209980\nP _part/9/_geo_xyz/13,9,0 45.931758881\nP _part/9/_geo_xyz/13,9,1 -0.103496060\nP _part/9/_geo_xyz/13,9,2 0.628740191\nP _part/9/_geo_xyz/14,0,0 45.931758881\nP _part/9/_geo_xyz/14,0,1 0.0\nP _part/9/_geo_xyz/14,0,2 -0.820209980\nP _part/9/_geo_xyz/14,1,0 45.931758881\nP _part/9/_geo_xyz/14,1,1 0.139720470\nP _part/9/_geo_xyz/14,1,2 -0.716699481\nP _part/9/_geo_xyz/14,10,0 45.931758881\nP _part/9/_geo_xyz/14,10,1 -0.134547234\nP _part/9/_geo_xyz/14,10,2 -0.069849081\nP _part/9/_geo_xyz/14,11,0 45.931758881\nP _part/9/_geo_xyz/14,11,1 -0.113846451\nP _part/9/_geo_xyz/14,11,2 -0.597703397\nP _part/9/_geo_xyz/14,12,0 45.931758881\nP _part/9/_geo_xyz/14,12,1 -0.082795277\nP _part/9/_geo_xyz/14,12,2 -0.747768998\nP _part/9/_geo_xyz/14,13,0 45.931758881\nP _part/9/_geo_xyz/14,13,1 0.0\nP _part/9/_geo_xyz/14,13,2 -0.820209980\nP _part/9/_geo_xyz/14,14,0 0.0\nP _part/9/_geo_xyz/14,14,1 0.0\nP _part/9/_geo_xyz/14,14,2 0.0\nP _part/9/_geo_xyz/14,15,0 0.0\nP _part/9/_geo_xyz/14,15,1 0.0\nP _part/9/_geo_xyz/14,15,2 0.0\nP _part/9/_geo_xyz/14,16,0 0.0\nP _part/9/_geo_xyz/14,16,1 0.0\nP _part/9/_geo_xyz/14,16,2 0.0\nP _part/9/_geo_xyz/14,17,0 0.0\nP _part/9/_geo_xyz/14,17,1 0.0\nP _part/9/_geo_xyz/14,17,2 0.0\nP _part/9/_geo_xyz/14,2,0 45.931758881\nP _part/9/_geo_xyz/14,2,1 0.227692902\nP _part/9/_geo_xyz/14,2,2 -0.468307078\nP _part/9/_geo_xyz/14,3,0 45.931758881\nP _part/9/_geo_xyz/14,3,1 0.263917327\nP _part/9/_geo_xyz/14,3,2 -0.018110236\nP _part/9/_geo_xyz/14,4,0 45.931758881\nP _part/9/_geo_xyz/14,4,1 0.238043293\nP _part/9/_geo_xyz/14,4,2 0.628740191\nP _part/9/_geo_xyz/14,5,0 45.931758881\nP _part/9/_geo_xyz/14,5,1 0.213162914\nP _part/9/_geo_xyz/14,5,2 0.820209980\nP _part/9/_geo_xyz/14,6,0 45.931758881\nP _part/9/_geo_xyz/14,6,1 0.0\nP _part/9/_geo_xyz/14,6,2 2.460629940\nP _part/9/_geo_xyz/14,7,0 45.931758881\nP _part/9/_geo_xyz/14,7,1 0.0\nP _part/9/_geo_xyz/14,7,2 2.460629940\nP _part/9/_geo_xyz/14,8,0 45.931758881\nP _part/9/_geo_xyz/14,8,1 -0.092678614\nP _part/9/_geo_xyz/14,8,2 0.820209980\nP _part/9/_geo_xyz/14,9,0 45.931758881\nP _part/9/_geo_xyz/14,9,1 -0.103496060\nP _part/9/_geo_xyz/14,9,2 0.628740191\nP _part/9/_geo_xyz/15,0,0 52.493438721\nP _part/9/_geo_xyz/15,0,1 0.0\nP _part/9/_geo_xyz/15,0,2 -0.820209980\nP _part/9/_geo_xyz/15,1,0 52.493438721\nP _part/9/_geo_xyz/15,1,1 0.139720470\nP _part/9/_geo_xyz/15,1,2 -0.716699481\nP _part/9/_geo_xyz/15,10,0 52.493438721\nP _part/9/_geo_xyz/15,10,1 -0.134547234\nP _part/9/_geo_xyz/15,10,2 -0.069849081\nP _part/9/_geo_xyz/15,11,0 52.493438721\nP _part/9/_geo_xyz/15,11,1 -0.113846451\nP _part/9/_geo_xyz/15,11,2 -0.597703397\nP _part/9/_geo_xyz/15,12,0 52.493438721\nP _part/9/_geo_xyz/15,12,1 -0.082795277\nP _part/9/_geo_xyz/15,12,2 -0.747768998\nP _part/9/_geo_xyz/15,13,0 52.493438721\nP _part/9/_geo_xyz/15,13,1 0.0\nP _part/9/_geo_xyz/15,13,2 -0.820209980\nP _part/9/_geo_xyz/15,14,0 0.0\nP _part/9/_geo_xyz/15,14,1 0.0\nP _part/9/_geo_xyz/15,14,2 0.0\nP _part/9/_geo_xyz/15,15,0 0.0\nP _part/9/_geo_xyz/15,15,1 0.0\nP _part/9/_geo_xyz/15,15,2 0.0\nP _part/9/_geo_xyz/15,16,0 0.0\nP _part/9/_geo_xyz/15,16,1 0.0\nP _part/9/_geo_xyz/15,16,2 0.0\nP _part/9/_geo_xyz/15,17,0 0.0\nP _part/9/_geo_xyz/15,17,1 0.0\nP _part/9/_geo_xyz/15,17,2 0.0\nP _part/9/_geo_xyz/15,2,0 52.493438721\nP _part/9/_geo_xyz/15,2,1 0.227692902\nP _part/9/_geo_xyz/15,2,2 -0.468307078\nP _part/9/_geo_xyz/15,3,0 52.493438721\nP _part/9/_geo_xyz/15,3,1 0.263917327\nP _part/9/_geo_xyz/15,3,2 -0.018110236\nP _part/9/_geo_xyz/15,4,0 52.493438721\nP _part/9/_geo_xyz/15,4,1 0.238043293\nP _part/9/_geo_xyz/15,4,2 0.628740191\nP _part/9/_geo_xyz/15,5,0 52.493438721\nP _part/9/_geo_xyz/15,5,1 0.213162914\nP _part/9/_geo_xyz/15,5,2 0.820209980\nP _part/9/_geo_xyz/15,6,0 52.493438721\nP _part/9/_geo_xyz/15,6,1 0.0\nP _part/9/_geo_xyz/15,6,2 2.460629940\nP _part/9/_geo_xyz/15,7,0 52.493438721\nP _part/9/_geo_xyz/15,7,1 0.0\nP _part/9/_geo_xyz/15,7,2 2.460629940\nP _part/9/_geo_xyz/15,8,0 52.493438721\nP _part/9/_geo_xyz/15,8,1 -0.092678614\nP _part/9/_geo_xyz/15,8,2 0.820209980\nP _part/9/_geo_xyz/15,9,0 52.493438721\nP _part/9/_geo_xyz/15,9,1 -0.103496060\nP _part/9/_geo_xyz/15,9,2 0.628740191\nP _part/9/_geo_xyz/16,0,0 52.493438721\nP _part/9/_geo_xyz/16,0,1 0.0\nP _part/9/_geo_xyz/16,0,2 -0.820209980\nP _part/9/_geo_xyz/16,1,0 52.493438721\nP _part/9/_geo_xyz/16,1,1 0.139720470\nP _part/9/_geo_xyz/16,1,2 -0.716699481\nP _part/9/_geo_xyz/16,10,0 52.493438721\nP _part/9/_geo_xyz/16,10,1 -0.134547234\nP _part/9/_geo_xyz/16,10,2 -0.069849081\nP _part/9/_geo_xyz/16,11,0 52.493438721\nP _part/9/_geo_xyz/16,11,1 -0.113846451\nP _part/9/_geo_xyz/16,11,2 -0.597703397\nP _part/9/_geo_xyz/16,12,0 52.493438721\nP _part/9/_geo_xyz/16,12,1 -0.082795277\nP _part/9/_geo_xyz/16,12,2 -0.747768998\nP _part/9/_geo_xyz/16,13,0 52.493438721\nP _part/9/_geo_xyz/16,13,1 0.0\nP _part/9/_geo_xyz/16,13,2 -0.820209980\nP _part/9/_geo_xyz/16,14,0 0.0\nP _part/9/_geo_xyz/16,14,1 0.0\nP _part/9/_geo_xyz/16,14,2 0.0\nP _part/9/_geo_xyz/16,15,0 0.0\nP _part/9/_geo_xyz/16,15,1 0.0\nP _part/9/_geo_xyz/16,15,2 0.0\nP _part/9/_geo_xyz/16,16,0 0.0\nP _part/9/_geo_xyz/16,16,1 0.0\nP _part/9/_geo_xyz/16,16,2 0.0\nP _part/9/_geo_xyz/16,17,0 0.0\nP _part/9/_geo_xyz/16,17,1 0.0\nP _part/9/_geo_xyz/16,17,2 0.0\nP _part/9/_geo_xyz/16,2,0 52.493438721\nP _part/9/_geo_xyz/16,2,1 0.227692902\nP _part/9/_geo_xyz/16,2,2 -0.468307078\nP _part/9/_geo_xyz/16,3,0 52.493438721\nP _part/9/_geo_xyz/16,3,1 0.263917327\nP _part/9/_geo_xyz/16,3,2 -0.018110236\nP _part/9/_geo_xyz/16,4,0 52.493438721\nP _part/9/_geo_xyz/16,4,1 0.238043293\nP _part/9/_geo_xyz/16,4,2 0.628740191\nP _part/9/_geo_xyz/16,5,0 52.493438721\nP _part/9/_geo_xyz/16,5,1 0.213162914\nP _part/9/_geo_xyz/16,5,2 0.820209980\nP _part/9/_geo_xyz/16,6,0 52.493438721\nP _part/9/_geo_xyz/16,6,1 0.0\nP _part/9/_geo_xyz/16,6,2 2.460629940\nP _part/9/_geo_xyz/16,7,0 52.493438721\nP _part/9/_geo_xyz/16,7,1 0.0\nP _part/9/_geo_xyz/16,7,2 2.460629940\nP _part/9/_geo_xyz/16,8,0 52.493438721\nP _part/9/_geo_xyz/16,8,1 -0.092678614\nP _part/9/_geo_xyz/16,8,2 0.820209980\nP _part/9/_geo_xyz/16,9,0 52.493438721\nP _part/9/_geo_xyz/16,9,1 -0.103496060\nP _part/9/_geo_xyz/16,9,2 0.628740191\nP _part/9/_geo_xyz/17,0,0 0.0\nP _part/9/_geo_xyz/17,0,1 0.0\nP _part/9/_geo_xyz/17,0,2 0.0\nP _part/9/_geo_xyz/17,1,0 0.0\nP _part/9/_geo_xyz/17,1,1 0.0\nP _part/9/_geo_xyz/17,1,2 0.0\nP _part/9/_geo_xyz/17,10,0 0.0\nP _part/9/_geo_xyz/17,10,1 0.0\nP _part/9/_geo_xyz/17,10,2 0.0\nP _part/9/_geo_xyz/17,11,0 0.0\nP _part/9/_geo_xyz/17,11,1 0.0\nP _part/9/_geo_xyz/17,11,2 0.0\nP _part/9/_geo_xyz/17,12,0 0.0\nP _part/9/_geo_xyz/17,12,1 0.0\nP _part/9/_geo_xyz/17,12,2 0.0\nP _part/9/_geo_xyz/17,13,0 0.0\nP _part/9/_geo_xyz/17,13,1 0.0\nP _part/9/_geo_xyz/17,13,2 0.0\nP _part/9/_geo_xyz/17,14,0 0.0\nP _part/9/_geo_xyz/17,14,1 0.0\nP _part/9/_geo_xyz/17,14,2 0.0\nP _part/9/_geo_xyz/17,15,0 0.0\nP _part/9/_geo_xyz/17,15,1 0.0\nP _part/9/_geo_xyz/17,15,2 0.0\nP _part/9/_geo_xyz/17,16,0 0.0\nP _part/9/_geo_xyz/17,16,1 0.0\nP _part/9/_geo_xyz/17,16,2 0.0\nP _part/9/_geo_xyz/17,17,0 0.0\nP _part/9/_geo_xyz/17,17,1 0.0\nP _part/9/_geo_xyz/17,17,2 0.0\nP _part/9/_geo_xyz/17,2,0 0.0\nP _part/9/_geo_xyz/17,2,1 0.0\nP _part/9/_geo_xyz/17,2,2 0.0\nP _part/9/_geo_xyz/17,3,0 0.0\nP _part/9/_geo_xyz/17,3,1 0.0\nP _part/9/_geo_xyz/17,3,2 0.0\nP _part/9/_geo_xyz/17,4,0 0.0\nP _part/9/_geo_xyz/17,4,1 0.0\nP _part/9/_geo_xyz/17,4,2 0.0\nP _part/9/_geo_xyz/17,5,0 0.0\nP _part/9/_geo_xyz/17,5,1 0.0\nP _part/9/_geo_xyz/17,5,2 0.0\nP _part/9/_geo_xyz/17,6,0 0.0\nP _part/9/_geo_xyz/17,6,1 0.0\nP _part/9/_geo_xyz/17,6,2 0.0\nP _part/9/_geo_xyz/17,7,0 0.0\nP _part/9/_geo_xyz/17,7,1 0.0\nP _part/9/_geo_xyz/17,7,2 0.0\nP _part/9/_geo_xyz/17,8,0 0.0\nP _part/9/_geo_xyz/17,8,1 0.0\nP _part/9/_geo_xyz/17,8,2 0.0\nP _part/9/_geo_xyz/17,9,0 0.0\nP _part/9/_geo_xyz/17,9,1 0.0\nP _part/9/_geo_xyz/17,9,2 0.0\nP _part/9/_geo_xyz/18,0,0 0.0\nP _part/9/_geo_xyz/18,0,1 0.0\nP _part/9/_geo_xyz/18,0,2 0.0\nP _part/9/_geo_xyz/18,1,0 0.0\nP _part/9/_geo_xyz/18,1,1 0.0\nP _part/9/_geo_xyz/18,1,2 0.0\nP _part/9/_geo_xyz/18,10,0 0.0\nP _part/9/_geo_xyz/18,10,1 0.0\nP _part/9/_geo_xyz/18,10,2 0.0\nP _part/9/_geo_xyz/18,11,0 0.0\nP _part/9/_geo_xyz/18,11,1 0.0\nP _part/9/_geo_xyz/18,11,2 0.0\nP _part/9/_geo_xyz/18,12,0 0.0\nP _part/9/_geo_xyz/18,12,1 0.0\nP _part/9/_geo_xyz/18,12,2 0.0\nP _part/9/_geo_xyz/18,13,0 0.0\nP _part/9/_geo_xyz/18,13,1 0.0\nP _part/9/_geo_xyz/18,13,2 0.0\nP _part/9/_geo_xyz/18,14,0 0.0\nP _part/9/_geo_xyz/18,14,1 0.0\nP _part/9/_geo_xyz/18,14,2 0.0\nP _part/9/_geo_xyz/18,15,0 0.0\nP _part/9/_geo_xyz/18,15,1 0.0\nP _part/9/_geo_xyz/18,15,2 0.0\nP _part/9/_geo_xyz/18,16,0 0.0\nP _part/9/_geo_xyz/18,16,1 0.0\nP _part/9/_geo_xyz/18,16,2 0.0\nP _part/9/_geo_xyz/18,17,0 0.0\nP _part/9/_geo_xyz/18,17,1 0.0\nP _part/9/_geo_xyz/18,17,2 0.0\nP _part/9/_geo_xyz/18,2,0 0.0\nP _part/9/_geo_xyz/18,2,1 0.0\nP _part/9/_geo_xyz/18,2,2 0.0\nP _part/9/_geo_xyz/18,3,0 0.0\nP _part/9/_geo_xyz/18,3,1 0.0\nP _part/9/_geo_xyz/18,3,2 0.0\nP _part/9/_geo_xyz/18,4,0 0.0\nP _part/9/_geo_xyz/18,4,1 0.0\nP _part/9/_geo_xyz/18,4,2 0.0\nP _part/9/_geo_xyz/18,5,0 0.0\nP _part/9/_geo_xyz/18,5,1 0.0\nP _part/9/_geo_xyz/18,5,2 0.0\nP _part/9/_geo_xyz/18,6,0 0.0\nP _part/9/_geo_xyz/18,6,1 0.0\nP _part/9/_geo_xyz/18,6,2 0.0\nP _part/9/_geo_xyz/18,7,0 0.0\nP _part/9/_geo_xyz/18,7,1 0.0\nP _part/9/_geo_xyz/18,7,2 0.0\nP _part/9/_geo_xyz/18,8,0 0.0\nP _part/9/_geo_xyz/18,8,1 0.0\nP _part/9/_geo_xyz/18,8,2 0.0\nP _part/9/_geo_xyz/18,9,0 0.0\nP _part/9/_geo_xyz/18,9,1 0.0\nP _part/9/_geo_xyz/18,9,2 0.0\nP _part/9/_geo_xyz/19,0,0 0.0\nP _part/9/_geo_xyz/19,0,1 0.0\nP _part/9/_geo_xyz/19,0,2 0.0\nP _part/9/_geo_xyz/19,1,0 0.0\nP _part/9/_geo_xyz/19,1,1 0.0\nP _part/9/_geo_xyz/19,1,2 0.0\nP _part/9/_geo_xyz/19,10,0 0.0\nP _part/9/_geo_xyz/19,10,1 0.0\nP _part/9/_geo_xyz/19,10,2 0.0\nP _part/9/_geo_xyz/19,11,0 0.0\nP _part/9/_geo_xyz/19,11,1 0.0\nP _part/9/_geo_xyz/19,11,2 0.0\nP _part/9/_geo_xyz/19,12,0 0.0\nP _part/9/_geo_xyz/19,12,1 0.0\nP _part/9/_geo_xyz/19,12,2 0.0\nP _part/9/_geo_xyz/19,13,0 0.0\nP _part/9/_geo_xyz/19,13,1 0.0\nP _part/9/_geo_xyz/19,13,2 0.0\nP _part/9/_geo_xyz/19,14,0 0.0\nP _part/9/_geo_xyz/19,14,1 0.0\nP _part/9/_geo_xyz/19,14,2 0.0\nP _part/9/_geo_xyz/19,15,0 0.0\nP _part/9/_geo_xyz/19,15,1 0.0\nP _part/9/_geo_xyz/19,15,2 0.0\nP _part/9/_geo_xyz/19,16,0 0.0\nP _part/9/_geo_xyz/19,16,1 0.0\nP _part/9/_geo_xyz/19,16,2 0.0\nP _part/9/_geo_xyz/19,17,0 0.0\nP _part/9/_geo_xyz/19,17,1 0.0\nP _part/9/_geo_xyz/19,17,2 0.0\nP _part/9/_geo_xyz/19,2,0 0.0\nP _part/9/_geo_xyz/19,2,1 0.0\nP _part/9/_geo_xyz/19,2,2 0.0\nP _part/9/_geo_xyz/19,3,0 0.0\nP _part/9/_geo_xyz/19,3,1 0.0\nP _part/9/_geo_xyz/19,3,2 0.0\nP _part/9/_geo_xyz/19,4,0 0.0\nP _part/9/_geo_xyz/19,4,1 0.0\nP _part/9/_geo_xyz/19,4,2 0.0\nP _part/9/_geo_xyz/19,5,0 0.0\nP _part/9/_geo_xyz/19,5,1 0.0\nP _part/9/_geo_xyz/19,5,2 0.0\nP _part/9/_geo_xyz/19,6,0 0.0\nP _part/9/_geo_xyz/19,6,1 0.0\nP _part/9/_geo_xyz/19,6,2 0.0\nP _part/9/_geo_xyz/19,7,0 0.0\nP _part/9/_geo_xyz/19,7,1 0.0\nP _part/9/_geo_xyz/19,7,2 0.0\nP _part/9/_geo_xyz/19,8,0 0.0\nP _part/9/_geo_xyz/19,8,1 0.0\nP _part/9/_geo_xyz/19,8,2 0.0\nP _part/9/_geo_xyz/19,9,0 0.0\nP _part/9/_geo_xyz/19,9,1 0.0\nP _part/9/_geo_xyz/19,9,2 0.0\nP _part/9/_geo_xyz/2,0,0 6.561679840\nP _part/9/_geo_xyz/2,0,1 0.0\nP _part/9/_geo_xyz/2,0,2 -0.820209980\nP _part/9/_geo_xyz/2,1,0 6.561679840\nP _part/9/_geo_xyz/2,1,1 0.139720470\nP _part/9/_geo_xyz/2,1,2 -0.716699481\nP _part/9/_geo_xyz/2,10,0 6.561679840\nP _part/9/_geo_xyz/2,10,1 -0.134547234\nP _part/9/_geo_xyz/2,10,2 -0.069849081\nP _part/9/_geo_xyz/2,11,0 6.561679840\nP _part/9/_geo_xyz/2,11,1 -0.113846451\nP _part/9/_geo_xyz/2,11,2 -0.597703397\nP _part/9/_geo_xyz/2,12,0 6.561679840\nP _part/9/_geo_xyz/2,12,1 -0.082795277\nP _part/9/_geo_xyz/2,12,2 -0.747768998\nP _part/9/_geo_xyz/2,13,0 6.561679840\nP _part/9/_geo_xyz/2,13,1 0.0\nP _part/9/_geo_xyz/2,13,2 -0.820209980\nP _part/9/_geo_xyz/2,14,0 0.0\nP _part/9/_geo_xyz/2,14,1 0.0\nP _part/9/_geo_xyz/2,14,2 0.0\nP _part/9/_geo_xyz/2,15,0 0.0\nP _part/9/_geo_xyz/2,15,1 0.0\nP _part/9/_geo_xyz/2,15,2 0.0\nP _part/9/_geo_xyz/2,16,0 0.0\nP _part/9/_geo_xyz/2,16,1 0.0\nP _part/9/_geo_xyz/2,16,2 0.0\nP _part/9/_geo_xyz/2,17,0 0.0\nP _part/9/_geo_xyz/2,17,1 0.0\nP _part/9/_geo_xyz/2,17,2 0.0\nP _part/9/_geo_xyz/2,2,0 6.561679840\nP _part/9/_geo_xyz/2,2,1 0.227692902\nP _part/9/_geo_xyz/2,2,2 -0.468307078\nP _part/9/_geo_xyz/2,3,0 6.561679840\nP _part/9/_geo_xyz/2,3,1 0.263917327\nP _part/9/_geo_xyz/2,3,2 -0.018110236\nP _part/9/_geo_xyz/2,4,0 6.561679840\nP _part/9/_geo_xyz/2,4,1 0.238043293\nP _part/9/_geo_xyz/2,4,2 0.628740191\nP _part/9/_geo_xyz/2,5,0 6.561679840\nP _part/9/_geo_xyz/2,5,1 0.106581457\nP _part/9/_geo_xyz/2,5,2 1.640419960\nP _part/9/_geo_xyz/2,6,0 6.561679840\nP _part/9/_geo_xyz/2,6,1 0.0\nP _part/9/_geo_xyz/2,6,2 2.460629940\nP _part/9/_geo_xyz/2,7,0 6.561679840\nP _part/9/_geo_xyz/2,7,1 0.0\nP _part/9/_geo_xyz/2,7,2 2.460629940\nP _part/9/_geo_xyz/2,8,0 6.561679840\nP _part/9/_geo_xyz/2,8,1 -0.046339307\nP _part/9/_geo_xyz/2,8,2 1.640419960\nP _part/9/_geo_xyz/2,9,0 6.561679840\nP _part/9/_geo_xyz/2,9,1 -0.103496060\nP _part/9/_geo_xyz/2,9,2 0.628740191\nP _part/9/_geo_xyz/3,0,0 13.123359680\nP _part/9/_geo_xyz/3,0,1 0.0\nP _part/9/_geo_xyz/3,0,2 -0.820209980\nP _part/9/_geo_xyz/3,1,0 13.123359680\nP _part/9/_geo_xyz/3,1,1 0.139720470\nP _part/9/_geo_xyz/3,1,2 -0.716699481\nP _part/9/_geo_xyz/3,10,0 13.123359680\nP _part/9/_geo_xyz/3,10,1 -0.134547234\nP _part/9/_geo_xyz/3,10,2 -0.069849081\nP _part/9/_geo_xyz/3,11,0 13.123359680\nP _part/9/_geo_xyz/3,11,1 -0.113846451\nP _part/9/_geo_xyz/3,11,2 -0.597703397\nP _part/9/_geo_xyz/3,12,0 13.123359680\nP _part/9/_geo_xyz/3,12,1 -0.082795277\nP _part/9/_geo_xyz/3,12,2 -0.747768998\nP _part/9/_geo_xyz/3,13,0 13.123359680\nP _part/9/_geo_xyz/3,13,1 0.0\nP _part/9/_geo_xyz/3,13,2 -0.820209980\nP _part/9/_geo_xyz/3,14,0 0.0\nP _part/9/_geo_xyz/3,14,1 0.0\nP _part/9/_geo_xyz/3,14,2 0.0\nP _part/9/_geo_xyz/3,15,0 0.0\nP _part/9/_geo_xyz/3,15,1 0.0\nP _part/9/_geo_xyz/3,15,2 0.0\nP _part/9/_geo_xyz/3,16,0 0.0\nP _part/9/_geo_xyz/3,16,1 0.0\nP _part/9/_geo_xyz/3,16,2 0.0\nP _part/9/_geo_xyz/3,17,0 0.0\nP _part/9/_geo_xyz/3,17,1 0.0\nP _part/9/_geo_xyz/3,17,2 0.0\nP _part/9/_geo_xyz/3,2,0 13.123359680\nP _part/9/_geo_xyz/3,2,1 0.227692902\nP _part/9/_geo_xyz/3,2,2 -0.468307078\nP _part/9/_geo_xyz/3,3,0 13.123359680\nP _part/9/_geo_xyz/3,3,1 0.263917327\nP _part/9/_geo_xyz/3,3,2 -0.018110236\nP _part/9/_geo_xyz/3,4,0 13.123359680\nP _part/9/_geo_xyz/3,4,1 0.238043293\nP _part/9/_geo_xyz/3,4,2 0.628740191\nP _part/9/_geo_xyz/3,5,0 13.123359680\nP _part/9/_geo_xyz/3,5,1 0.106581457\nP _part/9/_geo_xyz/3,5,2 1.640419960\nP _part/9/_geo_xyz/3,6,0 13.123359680\nP _part/9/_geo_xyz/3,6,1 0.0\nP _part/9/_geo_xyz/3,6,2 2.460629940\nP _part/9/_geo_xyz/3,7,0 13.123359680\nP _part/9/_geo_xyz/3,7,1 0.0\nP _part/9/_geo_xyz/3,7,2 2.460629940\nP _part/9/_geo_xyz/3,8,0 13.123359680\nP _part/9/_geo_xyz/3,8,1 -0.046339307\nP _part/9/_geo_xyz/3,8,2 1.640419960\nP _part/9/_geo_xyz/3,9,0 13.123359680\nP _part/9/_geo_xyz/3,9,1 -0.103496060\nP _part/9/_geo_xyz/3,9,2 0.628740191\nP _part/9/_geo_xyz/4,0,0 13.123359680\nP _part/9/_geo_xyz/4,0,1 0.0\nP _part/9/_geo_xyz/4,0,2 -0.820209980\nP _part/9/_geo_xyz/4,1,0 13.123359680\nP _part/9/_geo_xyz/4,1,1 0.139720470\nP _part/9/_geo_xyz/4,1,2 -0.716699481\nP _part/9/_geo_xyz/4,10,0 13.123359680\nP _part/9/_geo_xyz/4,10,1 -0.134547234\nP _part/9/_geo_xyz/4,10,2 -0.069849081\nP _part/9/_geo_xyz/4,11,0 13.123359680\nP _part/9/_geo_xyz/4,11,1 -0.113846451\nP _part/9/_geo_xyz/4,11,2 -0.597703397\nP _part/9/_geo_xyz/4,12,0 13.123359680\nP _part/9/_geo_xyz/4,12,1 -0.082795277\nP _part/9/_geo_xyz/4,12,2 -0.747768998\nP _part/9/_geo_xyz/4,13,0 13.123359680\nP _part/9/_geo_xyz/4,13,1 0.0\nP _part/9/_geo_xyz/4,13,2 -0.820209980\nP _part/9/_geo_xyz/4,14,0 0.0\nP _part/9/_geo_xyz/4,14,1 0.0\nP _part/9/_geo_xyz/4,14,2 0.0\nP _part/9/_geo_xyz/4,15,0 0.0\nP _part/9/_geo_xyz/4,15,1 0.0\nP _part/9/_geo_xyz/4,15,2 0.0\nP _part/9/_geo_xyz/4,16,0 0.0\nP _part/9/_geo_xyz/4,16,1 0.0\nP _part/9/_geo_xyz/4,16,2 0.0\nP _part/9/_geo_xyz/4,17,0 0.0\nP _part/9/_geo_xyz/4,17,1 0.0\nP _part/9/_geo_xyz/4,17,2 0.0\nP _part/9/_geo_xyz/4,2,0 13.123359680\nP _part/9/_geo_xyz/4,2,1 0.227692902\nP _part/9/_geo_xyz/4,2,2 -0.468307078\nP _part/9/_geo_xyz/4,3,0 13.123359680\nP _part/9/_geo_xyz/4,3,1 0.263917327\nP _part/9/_geo_xyz/4,3,2 -0.018110236\nP _part/9/_geo_xyz/4,4,0 13.123359680\nP _part/9/_geo_xyz/4,4,1 0.238043293\nP _part/9/_geo_xyz/4,4,2 0.628740191\nP _part/9/_geo_xyz/4,5,0 13.123359680\nP _part/9/_geo_xyz/4,5,1 0.106581457\nP _part/9/_geo_xyz/4,5,2 1.640419960\nP _part/9/_geo_xyz/4,6,0 13.123359680\nP _part/9/_geo_xyz/4,6,1 0.0\nP _part/9/_geo_xyz/4,6,2 2.460629940\nP _part/9/_geo_xyz/4,7,0 13.123359680\nP _part/9/_geo_xyz/4,7,1 0.0\nP _part/9/_geo_xyz/4,7,2 2.460629940\nP _part/9/_geo_xyz/4,8,0 13.123359680\nP _part/9/_geo_xyz/4,8,1 -0.046339307\nP _part/9/_geo_xyz/4,8,2 1.640419960\nP _part/9/_geo_xyz/4,9,0 13.123359680\nP _part/9/_geo_xyz/4,9,1 -0.103496060\nP _part/9/_geo_xyz/4,9,2 0.628740191\nP _part/9/_geo_xyz/5,0,0 19.685039520\nP _part/9/_geo_xyz/5,0,1 0.0\nP _part/9/_geo_xyz/5,0,2 -0.820209980\nP _part/9/_geo_xyz/5,1,0 19.685039520\nP _part/9/_geo_xyz/5,1,1 0.139720470\nP _part/9/_geo_xyz/5,1,2 -0.716699481\nP _part/9/_geo_xyz/5,10,0 19.685039520\nP _part/9/_geo_xyz/5,10,1 -0.134547234\nP _part/9/_geo_xyz/5,10,2 -0.069849081\nP _part/9/_geo_xyz/5,11,0 19.685039520\nP _part/9/_geo_xyz/5,11,1 -0.113846451\nP _part/9/_geo_xyz/5,11,2 -0.597703397\nP _part/9/_geo_xyz/5,12,0 19.685039520\nP _part/9/_geo_xyz/5,12,1 -0.082795277\nP _part/9/_geo_xyz/5,12,2 -0.747768998\nP _part/9/_geo_xyz/5,13,0 19.685039520\nP _part/9/_geo_xyz/5,13,1 0.0\nP _part/9/_geo_xyz/5,13,2 -0.820209980\nP _part/9/_geo_xyz/5,14,0 0.0\nP _part/9/_geo_xyz/5,14,1 0.0\nP _part/9/_geo_xyz/5,14,2 0.0\nP _part/9/_geo_xyz/5,15,0 0.0\nP _part/9/_geo_xyz/5,15,1 0.0\nP _part/9/_geo_xyz/5,15,2 0.0\nP _part/9/_geo_xyz/5,16,0 0.0\nP _part/9/_geo_xyz/5,16,1 0.0\nP _part/9/_geo_xyz/5,16,2 0.0\nP _part/9/_geo_xyz/5,17,0 0.0\nP _part/9/_geo_xyz/5,17,1 0.0\nP _part/9/_geo_xyz/5,17,2 0.0\nP _part/9/_geo_xyz/5,2,0 19.685039520\nP _part/9/_geo_xyz/5,2,1 0.227692902\nP _part/9/_geo_xyz/5,2,2 -0.468307078\nP _part/9/_geo_xyz/5,3,0 19.685039520\nP _part/9/_geo_xyz/5,3,1 0.263917327\nP _part/9/_geo_xyz/5,3,2 -0.018110236\nP _part/9/_geo_xyz/5,4,0 19.685039520\nP _part/9/_geo_xyz/5,4,1 0.238043293\nP _part/9/_geo_xyz/5,4,2 0.628740191\nP _part/9/_geo_xyz/5,5,0 19.685039520\nP _part/9/_geo_xyz/5,5,1 0.106581457\nP _part/9/_geo_xyz/5,5,2 1.640419960\nP _part/9/_geo_xyz/5,6,0 19.685039520\nP _part/9/_geo_xyz/5,6,1 0.0\nP _part/9/_geo_xyz/5,6,2 2.460629940\nP _part/9/_geo_xyz/5,7,0 19.685039520\nP _part/9/_geo_xyz/5,7,1 0.0\nP _part/9/_geo_xyz/5,7,2 2.460629940\nP _part/9/_geo_xyz/5,8,0 19.685039520\nP _part/9/_geo_xyz/5,8,1 -0.046339307\nP _part/9/_geo_xyz/5,8,2 1.640419960\nP _part/9/_geo_xyz/5,9,0 19.685039520\nP _part/9/_geo_xyz/5,9,1 -0.103496060\nP _part/9/_geo_xyz/5,9,2 0.628740191\nP _part/9/_geo_xyz/6,0,0 19.685039520\nP _part/9/_geo_xyz/6,0,1 0.0\nP _part/9/_geo_xyz/6,0,2 -0.820209980\nP _part/9/_geo_xyz/6,1,0 19.685039520\nP _part/9/_geo_xyz/6,1,1 0.139720470\nP _part/9/_geo_xyz/6,1,2 -0.716699481\nP _part/9/_geo_xyz/6,10,0 19.685039520\nP _part/9/_geo_xyz/6,10,1 -0.134547234\nP _part/9/_geo_xyz/6,10,2 -0.069849081\nP _part/9/_geo_xyz/6,11,0 19.685039520\nP _part/9/_geo_xyz/6,11,1 -0.113846451\nP _part/9/_geo_xyz/6,11,2 -0.597703397\nP _part/9/_geo_xyz/6,12,0 19.685039520\nP _part/9/_geo_xyz/6,12,1 -0.082795277\nP _part/9/_geo_xyz/6,12,2 -0.747768998\nP _part/9/_geo_xyz/6,13,0 19.685039520\nP _part/9/_geo_xyz/6,13,1 0.0\nP _part/9/_geo_xyz/6,13,2 -0.820209980\nP _part/9/_geo_xyz/6,14,0 0.0\nP _part/9/_geo_xyz/6,14,1 0.0\nP _part/9/_geo_xyz/6,14,2 0.0\nP _part/9/_geo_xyz/6,15,0 0.0\nP _part/9/_geo_xyz/6,15,1 0.0\nP _part/9/_geo_xyz/6,15,2 0.0\nP _part/9/_geo_xyz/6,16,0 0.0\nP _part/9/_geo_xyz/6,16,1 0.0\nP _part/9/_geo_xyz/6,16,2 0.0\nP _part/9/_geo_xyz/6,17,0 0.0\nP _part/9/_geo_xyz/6,17,1 0.0\nP _part/9/_geo_xyz/6,17,2 0.0\nP _part/9/_geo_xyz/6,2,0 19.685039520\nP _part/9/_geo_xyz/6,2,1 0.227692902\nP _part/9/_geo_xyz/6,2,2 -0.468307078\nP _part/9/_geo_xyz/6,3,0 19.685039520\nP _part/9/_geo_xyz/6,3,1 0.263917327\nP _part/9/_geo_xyz/6,3,2 -0.018110236\nP _part/9/_geo_xyz/6,4,0 19.685039520\nP _part/9/_geo_xyz/6,4,1 0.238043293\nP _part/9/_geo_xyz/6,4,2 0.628740191\nP _part/9/_geo_xyz/6,5,0 19.685039520\nP _part/9/_geo_xyz/6,5,1 0.106581457\nP _part/9/_geo_xyz/6,5,2 1.640419960\nP _part/9/_geo_xyz/6,6,0 19.685039520\nP _part/9/_geo_xyz/6,6,1 0.0\nP _part/9/_geo_xyz/6,6,2 2.460629940\nP _part/9/_geo_xyz/6,7,0 19.685039520\nP _part/9/_geo_xyz/6,7,1 0.0\nP _part/9/_geo_xyz/6,7,2 2.460629940\nP _part/9/_geo_xyz/6,8,0 19.685039520\nP _part/9/_geo_xyz/6,8,1 -0.046339307\nP _part/9/_geo_xyz/6,8,2 1.640419960\nP _part/9/_geo_xyz/6,9,0 19.685039520\nP _part/9/_geo_xyz/6,9,1 -0.103496060\nP _part/9/_geo_xyz/6,9,2 0.628740191\nP _part/9/_geo_xyz/7,0,0 26.246719360\nP _part/9/_geo_xyz/7,0,1 0.0\nP _part/9/_geo_xyz/7,0,2 -0.820209980\nP _part/9/_geo_xyz/7,1,0 26.246719360\nP _part/9/_geo_xyz/7,1,1 0.139720470\nP _part/9/_geo_xyz/7,1,2 -0.716699481\nP _part/9/_geo_xyz/7,10,0 26.246719360\nP _part/9/_geo_xyz/7,10,1 -0.134547234\nP _part/9/_geo_xyz/7,10,2 -0.069849081\nP _part/9/_geo_xyz/7,11,0 26.246719360\nP _part/9/_geo_xyz/7,11,1 -0.113846451\nP _part/9/_geo_xyz/7,11,2 -0.597703397\nP _part/9/_geo_xyz/7,12,0 26.246719360\nP _part/9/_geo_xyz/7,12,1 -0.082795277\nP _part/9/_geo_xyz/7,12,2 -0.747768998\nP _part/9/_geo_xyz/7,13,0 26.246719360\nP _part/9/_geo_xyz/7,13,1 0.0\nP _part/9/_geo_xyz/7,13,2 -0.820209980\nP _part/9/_geo_xyz/7,14,0 0.0\nP _part/9/_geo_xyz/7,14,1 0.0\nP _part/9/_geo_xyz/7,14,2 0.0\nP _part/9/_geo_xyz/7,15,0 0.0\nP _part/9/_geo_xyz/7,15,1 0.0\nP _part/9/_geo_xyz/7,15,2 0.0\nP _part/9/_geo_xyz/7,16,0 0.0\nP _part/9/_geo_xyz/7,16,1 0.0\nP _part/9/_geo_xyz/7,16,2 0.0\nP _part/9/_geo_xyz/7,17,0 0.0\nP _part/9/_geo_xyz/7,17,1 0.0\nP _part/9/_geo_xyz/7,17,2 0.0\nP _part/9/_geo_xyz/7,2,0 26.246719360\nP _part/9/_geo_xyz/7,2,1 0.227692902\nP _part/9/_geo_xyz/7,2,2 -0.468307078\nP _part/9/_geo_xyz/7,3,0 26.246719360\nP _part/9/_geo_xyz/7,3,1 0.263917327\nP _part/9/_geo_xyz/7,3,2 -0.018110236\nP _part/9/_geo_xyz/7,4,0 26.246719360\nP _part/9/_geo_xyz/7,4,1 0.238043293\nP _part/9/_geo_xyz/7,4,2 0.628740191\nP _part/9/_geo_xyz/7,5,0 26.246719360\nP _part/9/_geo_xyz/7,5,1 0.106581457\nP _part/9/_geo_xyz/7,5,2 1.640419960\nP _part/9/_geo_xyz/7,6,0 26.246719360\nP _part/9/_geo_xyz/7,6,1 0.0\nP _part/9/_geo_xyz/7,6,2 2.460629940\nP _part/9/_geo_xyz/7,7,0 26.246719360\nP _part/9/_geo_xyz/7,7,1 0.0\nP _part/9/_geo_xyz/7,7,2 2.460629940\nP _part/9/_geo_xyz/7,8,0 26.246719360\nP _part/9/_geo_xyz/7,8,1 -0.046339307\nP _part/9/_geo_xyz/7,8,2 1.640419960\nP _part/9/_geo_xyz/7,9,0 26.246719360\nP _part/9/_geo_xyz/7,9,1 -0.103496060\nP _part/9/_geo_xyz/7,9,2 0.628740191\nP _part/9/_geo_xyz/8,0,0 26.246719360\nP _part/9/_geo_xyz/8,0,1 0.0\nP _part/9/_geo_xyz/8,0,2 -0.820209980\nP _part/9/_geo_xyz/8,1,0 26.246719360\nP _part/9/_geo_xyz/8,1,1 0.139720470\nP _part/9/_geo_xyz/8,1,2 -0.716699481\nP _part/9/_geo_xyz/8,10,0 26.246719360\nP _part/9/_geo_xyz/8,10,1 -0.134547234\nP _part/9/_geo_xyz/8,10,2 -0.069849081\nP _part/9/_geo_xyz/8,11,0 26.246719360\nP _part/9/_geo_xyz/8,11,1 -0.113846451\nP _part/9/_geo_xyz/8,11,2 -0.597703397\nP _part/9/_geo_xyz/8,12,0 26.246719360\nP _part/9/_geo_xyz/8,12,1 -0.082795277\nP _part/9/_geo_xyz/8,12,2 -0.747768998\nP _part/9/_geo_xyz/8,13,0 26.246719360\nP _part/9/_geo_xyz/8,13,1 0.0\nP _part/9/_geo_xyz/8,13,2 -0.820209980\nP _part/9/_geo_xyz/8,14,0 0.0\nP _part/9/_geo_xyz/8,14,1 0.0\nP _part/9/_geo_xyz/8,14,2 0.0\nP _part/9/_geo_xyz/8,15,0 0.0\nP _part/9/_geo_xyz/8,15,1 0.0\nP _part/9/_geo_xyz/8,15,2 0.0\nP _part/9/_geo_xyz/8,16,0 0.0\nP _part/9/_geo_xyz/8,16,1 0.0\nP _part/9/_geo_xyz/8,16,2 0.0\nP _part/9/_geo_xyz/8,17,0 0.0\nP _part/9/_geo_xyz/8,17,1 0.0\nP _part/9/_geo_xyz/8,17,2 0.0\nP _part/9/_geo_xyz/8,2,0 26.246719360\nP _part/9/_geo_xyz/8,2,1 0.227692902\nP _part/9/_geo_xyz/8,2,2 -0.468307078\nP _part/9/_geo_xyz/8,3,0 26.246719360\nP _part/9/_geo_xyz/8,3,1 0.263917327\nP _part/9/_geo_xyz/8,3,2 -0.018110236\nP _part/9/_geo_xyz/8,4,0 26.246719360\nP _part/9/_geo_xyz/8,4,1 0.238043293\nP _part/9/_geo_xyz/8,4,2 0.628740191\nP _part/9/_geo_xyz/8,5,0 26.246719360\nP _part/9/_geo_xyz/8,5,1 0.106581457\nP _part/9/_geo_xyz/8,5,2 1.640419960\nP _part/9/_geo_xyz/8,6,0 26.246719360\nP _part/9/_geo_xyz/8,6,1 0.0\nP _part/9/_geo_xyz/8,6,2 2.460629940\nP _part/9/_geo_xyz/8,7,0 26.246719360\nP _part/9/_geo_xyz/8,7,1 0.0\nP _part/9/_geo_xyz/8,7,2 2.460629940\nP _part/9/_geo_xyz/8,8,0 26.246719360\nP _part/9/_geo_xyz/8,8,1 -0.046339307\nP _part/9/_geo_xyz/8,8,2 1.640419960\nP _part/9/_geo_xyz/8,9,0 26.246719360\nP _part/9/_geo_xyz/8,9,1 -0.103496060\nP _part/9/_geo_xyz/8,9,2 0.628740191\nP _part/9/_geo_xyz/9,0,0 32.808399200\nP _part/9/_geo_xyz/9,0,1 0.0\nP _part/9/_geo_xyz/9,0,2 -0.820209980\nP _part/9/_geo_xyz/9,1,0 32.808399200\nP _part/9/_geo_xyz/9,1,1 0.139720470\nP _part/9/_geo_xyz/9,1,2 -0.716699481\nP _part/9/_geo_xyz/9,10,0 32.808399200\nP _part/9/_geo_xyz/9,10,1 -0.134547234\nP _part/9/_geo_xyz/9,10,2 -0.069849081\nP _part/9/_geo_xyz/9,11,0 32.808399200\nP _part/9/_geo_xyz/9,11,1 -0.113846451\nP _part/9/_geo_xyz/9,11,2 -0.597703397\nP _part/9/_geo_xyz/9,12,0 32.808399200\nP _part/9/_geo_xyz/9,12,1 -0.082795277\nP _part/9/_geo_xyz/9,12,2 -0.747768998\nP _part/9/_geo_xyz/9,13,0 32.808399200\nP _part/9/_geo_xyz/9,13,1 0.0\nP _part/9/_geo_xyz/9,13,2 -0.820209980\nP _part/9/_geo_xyz/9,14,0 0.0\nP _part/9/_geo_xyz/9,14,1 0.0\nP _part/9/_geo_xyz/9,14,2 0.0\nP _part/9/_geo_xyz/9,15,0 0.0\nP _part/9/_geo_xyz/9,15,1 0.0\nP _part/9/_geo_xyz/9,15,2 0.0\nP _part/9/_geo_xyz/9,16,0 0.0\nP _part/9/_geo_xyz/9,16,1 0.0\nP _part/9/_geo_xyz/9,16,2 0.0\nP _part/9/_geo_xyz/9,17,0 0.0\nP _part/9/_geo_xyz/9,17,1 0.0\nP _part/9/_geo_xyz/9,17,2 0.0\nP _part/9/_geo_xyz/9,2,0 32.808399200\nP _part/9/_geo_xyz/9,2,1 0.227692902\nP _part/9/_geo_xyz/9,2,2 -0.468307078\nP _part/9/_geo_xyz/9,3,0 32.808399200\nP _part/9/_geo_xyz/9,3,1 0.263917327\nP _part/9/_geo_xyz/9,3,2 -0.018110236\nP _part/9/_geo_xyz/9,4,0 32.808399200\nP _part/9/_geo_xyz/9,4,1 0.238043293\nP _part/9/_geo_xyz/9,4,2 0.628740191\nP _part/9/_geo_xyz/9,5,0 32.808399200\nP _part/9/_geo_xyz/9,5,1 0.106581457\nP _part/9/_geo_xyz/9,5,2 1.640419960\nP _part/9/_geo_xyz/9,6,0 32.808399200\nP _part/9/_geo_xyz/9,6,1 0.0\nP _part/9/_geo_xyz/9,6,2 2.460629940\nP _part/9/_geo_xyz/9,7,0 32.808399200\nP _part/9/_geo_xyz/9,7,1 0.0\nP _part/9/_geo_xyz/9,7,2 2.460629940\nP _part/9/_geo_xyz/9,8,0 32.808399200\nP _part/9/_geo_xyz/9,8,1 -0.046339307\nP _part/9/_geo_xyz/9,8,2 1.640419960\nP _part/9/_geo_xyz/9,9,0 32.808399200\nP _part/9/_geo_xyz/9,9,1 -0.103496060\nP _part/9/_geo_xyz/9,9,2 0.628740191\nP _part/9/_geo_xyz/i_count 20\nP _part/9/_geo_xyz/j_count 18\nP _part/9/_geo_xyz/k_count 3\nP _part/9/_locked/0,0 0\nP _part/9/_locked/0,1 0\nP _part/9/_locked/0,10 0\nP _part/9/_locked/0,11 0\nP _part/9/_locked/0,12 0\nP _part/9/_locked/0,13 0\nP _part/9/_locked/0,14 0\nP _part/9/_locked/0,15 0\nP _part/9/_locked/0,16 0\nP _part/9/_locked/0,17 0\nP _part/9/_locked/0,2 0\nP _part/9/_locked/0,3 0\nP _part/9/_locked/0,4 0\nP _part/9/_locked/0,5 0\nP _part/9/_locked/0,6 0\nP _part/9/_locked/0,7 0\nP _part/9/_locked/0,8 0\nP _part/9/_locked/0,9 0\nP _part/9/_locked/1,0 0\nP _part/9/_locked/1,1 0\nP _part/9/_locked/1,10 0\nP _part/9/_locked/1,11 0\nP _part/9/_locked/1,12 0\nP _part/9/_locked/1,13 0\nP _part/9/_locked/1,14 0\nP _part/9/_locked/1,15 0\nP _part/9/_locked/1,16 0\nP _part/9/_locked/1,17 0\nP _part/9/_locked/1,2 0\nP _part/9/_locked/1,3 0\nP _part/9/_locked/1,4 0\nP _part/9/_locked/1,5 0\nP _part/9/_locked/1,6 0\nP _part/9/_locked/1,7 0\nP _part/9/_locked/1,8 0\nP _part/9/_locked/1,9 0\nP _part/9/_locked/10,0 0\nP _part/9/_locked/10,1 0\nP _part/9/_locked/10,10 0\nP _part/9/_locked/10,11 0\nP _part/9/_locked/10,12 0\nP _part/9/_locked/10,13 0\nP _part/9/_locked/10,14 0\nP _part/9/_locked/10,15 0\nP _part/9/_locked/10,16 0\nP _part/9/_locked/10,17 0\nP _part/9/_locked/10,2 0\nP _part/9/_locked/10,3 0\nP _part/9/_locked/10,4 0\nP _part/9/_locked/10,5 0\nP _part/9/_locked/10,6 0\nP _part/9/_locked/10,7 0\nP _part/9/_locked/10,8 0\nP _part/9/_locked/10,9 0\nP _part/9/_locked/11,0 0\nP _part/9/_locked/11,1 0\nP _part/9/_locked/11,10 0\nP _part/9/_locked/11,11 0\nP _part/9/_locked/11,12 0\nP _part/9/_locked/11,13 0\nP _part/9/_locked/11,14 0\nP _part/9/_locked/11,15 0\nP _part/9/_locked/11,16 0\nP _part/9/_locked/11,17 0\nP _part/9/_locked/11,2 0\nP _part/9/_locked/11,3 0\nP _part/9/_locked/11,4 0\nP _part/9/_locked/11,5 0\nP _part/9/_locked/11,6 0\nP _part/9/_locked/11,7 0\nP _part/9/_locked/11,8 0\nP _part/9/_locked/11,9 0\nP _part/9/_locked/12,0 0\nP _part/9/_locked/12,1 0\nP _part/9/_locked/12,10 0\nP _part/9/_locked/12,11 0\nP _part/9/_locked/12,12 0\nP _part/9/_locked/12,13 0\nP _part/9/_locked/12,14 0\nP _part/9/_locked/12,15 0\nP _part/9/_locked/12,16 0\nP _part/9/_locked/12,17 0\nP _part/9/_locked/12,2 0\nP _part/9/_locked/12,3 0\nP _part/9/_locked/12,4 0\nP _part/9/_locked/12,5 0\nP _part/9/_locked/12,6 0\nP _part/9/_locked/12,7 0\nP _part/9/_locked/12,8 0\nP _part/9/_locked/12,9 0\nP _part/9/_locked/13,0 0\nP _part/9/_locked/13,1 0\nP _part/9/_locked/13,10 0\nP _part/9/_locked/13,11 0\nP _part/9/_locked/13,12 0\nP _part/9/_locked/13,13 0\nP _part/9/_locked/13,14 0\nP _part/9/_locked/13,15 0\nP _part/9/_locked/13,16 0\nP _part/9/_locked/13,17 0\nP _part/9/_locked/13,2 0\nP _part/9/_locked/13,3 0\nP _part/9/_locked/13,4 0\nP _part/9/_locked/13,5 0\nP _part/9/_locked/13,6 0\nP _part/9/_locked/13,7 0\nP _part/9/_locked/13,8 0\nP _part/9/_locked/13,9 0\nP _part/9/_locked/14,0 0\nP _part/9/_locked/14,1 0\nP _part/9/_locked/14,10 0\nP _part/9/_locked/14,11 0\nP _part/9/_locked/14,12 0\nP _part/9/_locked/14,13 0\nP _part/9/_locked/14,14 0\nP _part/9/_locked/14,15 0\nP _part/9/_locked/14,16 0\nP _part/9/_locked/14,17 0\nP _part/9/_locked/14,2 0\nP _part/9/_locked/14,3 0\nP _part/9/_locked/14,4 0\nP _part/9/_locked/14,5 0\nP _part/9/_locked/14,6 0\nP _part/9/_locked/14,7 0\nP _part/9/_locked/14,8 0\nP _part/9/_locked/14,9 0\nP _part/9/_locked/15,0 0\nP _part/9/_locked/15,1 0\nP _part/9/_locked/15,10 0\nP _part/9/_locked/15,11 0\nP _part/9/_locked/15,12 0\nP _part/9/_locked/15,13 0\nP _part/9/_locked/15,14 0\nP _part/9/_locked/15,15 0\nP _part/9/_locked/15,16 0\nP _part/9/_locked/15,17 0\nP _part/9/_locked/15,2 0\nP _part/9/_locked/15,3 0\nP _part/9/_locked/15,4 0\nP _part/9/_locked/15,5 0\nP _part/9/_locked/15,6 0\nP _part/9/_locked/15,7 0\nP _part/9/_locked/15,8 0\nP _part/9/_locked/15,9 0\nP _part/9/_locked/16,0 0\nP _part/9/_locked/16,1 0\nP _part/9/_locked/16,10 0\nP _part/9/_locked/16,11 0\nP _part/9/_locked/16,12 0\nP _part/9/_locked/16,13 0\nP _part/9/_locked/16,14 0\nP _part/9/_locked/16,15 0\nP _part/9/_locked/16,16 0\nP _part/9/_locked/16,17 0\nP _part/9/_locked/16,2 0\nP _part/9/_locked/16,3 0\nP _part/9/_locked/16,4 0\nP _part/9/_locked/16,5 0\nP _part/9/_locked/16,6 0\nP _part/9/_locked/16,7 0\nP _part/9/_locked/16,8 0\nP _part/9/_locked/16,9 0\nP _part/9/_locked/17,0 0\nP _part/9/_locked/17,1 0\nP _part/9/_locked/17,10 0\nP _part/9/_locked/17,11 0\nP _part/9/_locked/17,12 0\nP _part/9/_locked/17,13 0\nP _part/9/_locked/17,14 0\nP _part/9/_locked/17,15 0\nP _part/9/_locked/17,16 0\nP _part/9/_locked/17,17 0\nP _part/9/_locked/17,2 0\nP _part/9/_locked/17,3 0\nP _part/9/_locked/17,4 0\nP _part/9/_locked/17,5 0\nP _part/9/_locked/17,6 0\nP _part/9/_locked/17,7 0\nP _part/9/_locked/17,8 0\nP _part/9/_locked/17,9 0\nP _part/9/_locked/18,0 0\nP _part/9/_locked/18,1 0\nP _part/9/_locked/18,10 0\nP _part/9/_locked/18,11 0\nP _part/9/_locked/18,12 0\nP _part/9/_locked/18,13 0\nP _part/9/_locked/18,14 0\nP _part/9/_locked/18,15 0\nP _part/9/_locked/18,16 0\nP _part/9/_locked/18,17 0\nP _part/9/_locked/18,2 0\nP _part/9/_locked/18,3 0\nP _part/9/_locked/18,4 0\nP _part/9/_locked/18,5 0\nP _part/9/_locked/18,6 0\nP _part/9/_locked/18,7 0\nP _part/9/_locked/18,8 0\nP _part/9/_locked/18,9 0\nP _part/9/_locked/19,0 0\nP _part/9/_locked/19,1 0\nP _part/9/_locked/19,10 0\nP _part/9/_locked/19,11 0\nP _part/9/_locked/19,12 0\nP _part/9/_locked/19,13 0\nP _part/9/_locked/19,14 0\nP _part/9/_locked/19,15 0\nP _part/9/_locked/19,16 0\nP _part/9/_locked/19,17 0\nP _part/9/_locked/19,2 0\nP _part/9/_locked/19,3 0\nP _part/9/_locked/19,4 0\nP _part/9/_locked/19,5 0\nP _part/9/_locked/19,6 0\nP _part/9/_locked/19,7 0\nP _part/9/_locked/19,8 0\nP _part/9/_locked/19,9 0\nP _part/9/_locked/2,0 0\nP _part/9/_locked/2,1 0\nP _part/9/_locked/2,10 0\nP _part/9/_locked/2,11 0\nP _part/9/_locked/2,12 0\nP _part/9/_locked/2,13 0\nP _part/9/_locked/2,14 0\nP _part/9/_locked/2,15 0\nP _part/9/_locked/2,16 0\nP _part/9/_locked/2,17 0\nP _part/9/_locked/2,2 0\nP _part/9/_locked/2,3 0\nP _part/9/_locked/2,4 0\nP _part/9/_locked/2,5 0\nP _part/9/_locked/2,6 0\nP _part/9/_locked/2,7 0\nP _part/9/_locked/2,8 0\nP _part/9/_locked/2,9 0\nP _part/9/_locked/3,0 0\nP _part/9/_locked/3,1 0\nP _part/9/_locked/3,10 0\nP _part/9/_locked/3,11 0\nP _part/9/_locked/3,12 0\nP _part/9/_locked/3,13 0\nP _part/9/_locked/3,14 0\nP _part/9/_locked/3,15 0\nP _part/9/_locked/3,16 0\nP _part/9/_locked/3,17 0\nP _part/9/_locked/3,2 0\nP _part/9/_locked/3,3 0\nP _part/9/_locked/3,4 0\nP _part/9/_locked/3,5 0\nP _part/9/_locked/3,6 0\nP _part/9/_locked/3,7 0\nP _part/9/_locked/3,8 0\nP _part/9/_locked/3,9 0\nP _part/9/_locked/4,0 0\nP _part/9/_locked/4,1 0\nP _part/9/_locked/4,10 0\nP _part/9/_locked/4,11 0\nP _part/9/_locked/4,12 0\nP _part/9/_locked/4,13 0\nP _part/9/_locked/4,14 0\nP _part/9/_locked/4,15 0\nP _part/9/_locked/4,16 0\nP _part/9/_locked/4,17 0\nP _part/9/_locked/4,2 0\nP _part/9/_locked/4,3 0\nP _part/9/_locked/4,4 0\nP _part/9/_locked/4,5 0\nP _part/9/_locked/4,6 0\nP _part/9/_locked/4,7 0\nP _part/9/_locked/4,8 0\nP _part/9/_locked/4,9 0\nP _part/9/_locked/5,0 0\nP _part/9/_locked/5,1 0\nP _part/9/_locked/5,10 0\nP _part/9/_locked/5,11 0\nP _part/9/_locked/5,12 0\nP _part/9/_locked/5,13 0\nP _part/9/_locked/5,14 0\nP _part/9/_locked/5,15 0\nP _part/9/_locked/5,16 0\nP _part/9/_locked/5,17 0\nP _part/9/_locked/5,2 0\nP _part/9/_locked/5,3 0\nP _part/9/_locked/5,4 0\nP _part/9/_locked/5,5 0\nP _part/9/_locked/5,6 0\nP _part/9/_locked/5,7 0\nP _part/9/_locked/5,8 0\nP _part/9/_locked/5,9 0\nP _part/9/_locked/6,0 0\nP _part/9/_locked/6,1 0\nP _part/9/_locked/6,10 0\nP _part/9/_locked/6,11 0\nP _part/9/_locked/6,12 0\nP _part/9/_locked/6,13 0\nP _part/9/_locked/6,14 0\nP _part/9/_locked/6,15 0\nP _part/9/_locked/6,16 0\nP _part/9/_locked/6,17 0\nP _part/9/_locked/6,2 0\nP _part/9/_locked/6,3 0\nP _part/9/_locked/6,4 0\nP _part/9/_locked/6,5 0\nP _part/9/_locked/6,6 0\nP _part/9/_locked/6,7 0\nP _part/9/_locked/6,8 0\nP _part/9/_locked/6,9 0\nP _part/9/_locked/7,0 0\nP _part/9/_locked/7,1 0\nP _part/9/_locked/7,10 0\nP _part/9/_locked/7,11 0\nP _part/9/_locked/7,12 0\nP _part/9/_locked/7,13 0\nP _part/9/_locked/7,14 0\nP _part/9/_locked/7,15 0\nP _part/9/_locked/7,16 0\nP _part/9/_locked/7,17 0\nP _part/9/_locked/7,2 0\nP _part/9/_locked/7,3 0\nP _part/9/_locked/7,4 0\nP _part/9/_locked/7,5 0\nP _part/9/_locked/7,6 0\nP _part/9/_locked/7,7 0\nP _part/9/_locked/7,8 0\nP _part/9/_locked/7,9 0\nP _part/9/_locked/8,0 0\nP _part/9/_locked/8,1 0\nP _part/9/_locked/8,10 0\nP _part/9/_locked/8,11 0\nP _part/9/_locked/8,12 0\nP _part/9/_locked/8,13 0\nP _part/9/_locked/8,14 0\nP _part/9/_locked/8,15 0\nP _part/9/_locked/8,16 0\nP _part/9/_locked/8,17 0\nP _part/9/_locked/8,2 0\nP _part/9/_locked/8,3 0\nP _part/9/_locked/8,4 0\nP _part/9/_locked/8,5 0\nP _part/9/_locked/8,6 0\nP _part/9/_locked/8,7 0\nP _part/9/_locked/8,8 0\nP _part/9/_locked/8,9 0\nP _part/9/_locked/9,0 0\nP _part/9/_locked/9,1 0\nP _part/9/_locked/9,10 0\nP _part/9/_locked/9,11 0\nP _part/9/_locked/9,12 0\nP _part/9/_locked/9,13 0\nP _part/9/_locked/9,14 0\nP _part/9/_locked/9,15 0\nP _part/9/_locked/9,16 0\nP _part/9/_locked/9,17 0\nP _part/9/_locked/9,2 0\nP _part/9/_locked/9,3 0\nP _part/9/_locked/9,4 0\nP _part/9/_locked/9,5 0\nP _part/9/_locked/9,6 0\nP _part/9/_locked/9,7 0\nP _part/9/_locked/9,8 0\nP _part/9/_locked/9,9 0\nP _part/9/_locked/i_count 20\nP _part/9/_locked/j_count 18\nP _part/9/_part_cd 0.075000003\nP _part/9/_part_phi 0.0\nP _part/9/_part_psi 0.0\nP _part/9/_part_rad 2.0\nP _part/9/_part_specs_eq 1\nP _part/9/_part_specs_invis 0\nP _part/9/_part_specs_unused1 0\nP _part/9/_part_specs_unused2 0\nP _part/9/_part_tex 1\nP _part/9/_part_the 0.0\nP _part/9/_part_x 0.0\nP _part/9/_part_y 0.0\nP _part/9/_part_z 0.0\nP _part/9/_patt_con 0\nP _part/9/_patt_prt 0\nP _part/9/_patt_rat 0.0\nP _part/9/_r_dim 14\nP _part/9/_s_dim 16\nP _part/9/_scon 37.676635742\nP _part/9/_top_s1 0.755999982\nP _part/9/_top_s2 1.0\nP _part/9/_top_t1 0.0\nP _part/9/_top_t2 0.384000003\nP _part/count 95\nP _prop/count 8\nP _sbrk/0/_type 0\nP _sbrk/1/_type 0\nP _sbrk/2/_type 0\nP _sbrk/3/_type 0\nP _sbrk/count 4\nP _slid/0/_slider_has_dataref 0\nP _slid/0/_slider_power 0.0\nP _slid/0/_slider_time 0.0\nP _slid/1/_slider_has_dataref 0\nP _slid/1/_slider_power 0.0\nP _slid/1/_slider_time 0.0\nP _slid/10/_slider_has_dataref 0\nP _slid/10/_slider_power 0.0\nP _slid/10/_slider_time 0.0\nP _slid/11/_slider_has_dataref 0\nP _slid/11/_slider_power 0.0\nP _slid/11/_slider_time 0.0\nP _slid/12/_slider_has_dataref 0\nP _slid/12/_slider_power 0.0\nP _slid/12/_slider_time 0.0\nP _slid/13/_slider_has_dataref 0\nP _slid/13/_slider_power 0.0\nP _slid/13/_slider_time 0.0\nP _slid/14/_slider_has_dataref 0\nP _slid/14/_slider_power 0.0\nP _slid/14/_slider_time 0.0\nP _slid/15/_slider_has_dataref 0\nP _slid/15/_slider_power 0.0\nP _slid/15/_slider_time 0.0\nP _slid/16/_slider_has_dataref 0\nP _slid/16/_slider_power 0.0\nP _slid/16/_slider_time 0.0\nP _slid/17/_slider_has_dataref 0\nP _slid/17/_slider_power 0.0\nP _slid/17/_slider_time 0.0\nP _slid/18/_slider_has_dataref 0\nP _slid/18/_slider_power 0.0\nP _slid/18/_slider_time 0.0\nP _slid/19/_slider_has_dataref 0\nP _slid/19/_slider_power 0.0\nP _slid/19/_slider_time 0.0\nP _slid/2/_slider_has_dataref 0\nP _slid/2/_slider_power 0.0\nP _slid/2/_slider_time 0.0\nP _slid/20/_slider_has_dataref 0\nP _slid/20/_slider_power 0.0\nP _slid/20/_slider_time 0.0\nP _slid/21/_slider_has_dataref 0\nP _slid/21/_slider_power 0.0\nP _slid/21/_slider_time 0.0\nP _slid/22/_slider_has_dataref 0\nP _slid/22/_slider_power 0.0\nP _slid/22/_slider_time 0.0\nP _slid/23/_slider_has_dataref 0\nP _slid/23/_slider_power 0.0\nP _slid/23/_slider_time 0.0\nP _slid/3/_slider_has_dataref 0\nP _slid/3/_slider_power 0.0\nP _slid/3/_slider_time 0.0\nP _slid/4/_slider_has_dataref 0\nP _slid/4/_slider_power 0.0\nP _slid/4/_slider_time 0.0\nP _slid/5/_slider_has_dataref 0\nP _slid/5/_slider_power 0.0\nP _slid/5/_slider_time 0.0\nP _slid/6/_slider_has_dataref 0\nP _slid/6/_slider_power 0.0\nP _slid/6/_slider_time 0.0\nP _slid/7/_slider_has_dataref 0\nP _slid/7/_slider_power 0.0\nP _slid/7/_slider_time 0.0\nP _slid/8/_slider_has_dataref 0\nP _slid/8/_slider_power 0.0\nP _slid/8/_slider_time 0.0\nP _slid/9/_slider_has_dataref 0\nP _slid/9/_slider_power 0.0\nP _slid/9/_slider_time 0.0\nP _slid/count 24\nP _wing/16/_AR_geo 0.0\nP _wing/16/_Croot 1.640419960\nP _wing/16/_Ctip 1.640419960\nP _wing/16/_TR_geo 0.0\nP _wing/16/_afl_file_R0 NACA 0009 (symmetrical).afl\nP _wing/16/_afl_file_R1 NACA 0009 (symmetrical).afl\nP _wing/16/_afl_file_T0 NACA 0009 (symmetrical).afl\nP _wing/16/_afl_file_T1 NACA 0009 (symmetrical).afl\nP _wing/16/_ailn1/0 0\nP _wing/16/_ailn1/1 0\nP _wing/16/_ailn1/2 0\nP _wing/16/_ailn1/3 0\nP _wing/16/_ailn1/4 0\nP _wing/16/_ailn1/5 0\nP _wing/16/_ailn1/6 0\nP _wing/16/_ailn1/7 0\nP _wing/16/_ailn1/8 0\nP _wing/16/_ailn1/9 0\nP _wing/16/_ailn1/count 10\nP _wing/16/_ailn2/0 0\nP _wing/16/_ailn2/1 0\nP _wing/16/_ailn2/2 0\nP _wing/16/_ailn2/3 0\nP _wing/16/_ailn2/4 0\nP _wing/16/_ailn2/5 0\nP _wing/16/_ailn2/6 0\nP _wing/16/_ailn2/7 0\nP _wing/16/_ailn2/8 0\nP _wing/16/_ailn2/9 0\nP _wing/16/_ailn2/count 10\nP _wing/16/_average_mac 0.0\nP _wing/16/_base_wash_subsonic 0.0\nP _wing/16/_base_wash_supersonic 0.0\nP _wing/16/_c_off_for_RIB/0 0.0\nP _wing/16/_c_off_for_RIB/1 0.0\nP _wing/16/_c_off_for_RIB/10 0.0\nP _wing/16/_c_off_for_RIB/2 0.0\nP _wing/16/_c_off_for_RIB/3 0.0\nP _wing/16/_c_off_for_RIB/4 0.0\nP _wing/16/_c_off_for_RIB/5 0.0\nP _wing/16/_c_off_for_RIB/6 0.0\nP _wing/16/_c_off_for_RIB/7 0.0\nP _wing/16/_c_off_for_RIB/8 0.0\nP _wing/16/_c_off_for_RIB/9 0.0\nP _wing/16/_c_off_for_RIB/count 11\nP _wing/16/_c_rat_for_RIB/0 1.0\nP _wing/16/_c_rat_for_RIB/1 1.0\nP _wing/16/_c_rat_for_RIB/10 1.0\nP _wing/16/_c_rat_for_RIB/2 1.0\nP _wing/16/_c_rat_for_RIB/3 1.0\nP _wing/16/_c_rat_for_RIB/4 1.0\nP _wing/16/_c_rat_for_RIB/5 1.0\nP _wing/16/_c_rat_for_RIB/6 1.0\nP _wing/16/_c_rat_for_RIB/7 1.0\nP _wing/16/_c_rat_for_RIB/8 1.0\nP _wing/16/_c_rat_for_RIB/9 1.0\nP _wing/16/_c_rat_for_RIB/count 11\nP _wing/16/_chord_for_RIB/0 1.640419960\nP _wing/16/_chord_for_RIB/1 1.640419960\nP _wing/16/_chord_for_RIB/10 0.0\nP _wing/16/_chord_for_RIB/2 1.640419960\nP _wing/16/_chord_for_RIB/3 1.640419960\nP _wing/16/_chord_for_RIB/4 1.640419960\nP _wing/16/_chord_for_RIB/5 0.0\nP _wing/16/_chord_for_RIB/6 0.0\nP _wing/16/_chord_for_RIB/7 0.0\nP _wing/16/_chord_for_RIB/8 0.0\nP _wing/16/_chord_for_RIB/9 0.0\nP _wing/16/_chord_for_RIB/count 11\nP _wing/16/_chord_piv 0.250000000\nP _wing/16/_crib_x_arm/0 0.0\nP _wing/16/_crib_x_arm/1 -4.101049900\nP _wing/16/_crib_x_arm/10 0.0\nP _wing/16/_crib_x_arm/2 -8.202099800\nP _wing/16/_crib_x_arm/3 -8.202099800\nP _wing/16/_crib_x_arm/4 -8.202099800\nP _wing/16/_crib_x_arm/5 0.0\nP _wing/16/_crib_x_arm/6 0.0\nP _wing/16/_crib_x_arm/7 0.0\nP _wing/16/_crib_x_arm/8 0.0\nP _wing/16/_crib_x_arm/9 0.0\nP _wing/16/_crib_x_arm/count 11\nP _wing/16/_crib_y_arm/0 12.303149223\nP _wing/16/_crib_y_arm/1 12.303149223\nP _wing/16/_crib_y_arm/10 0.0\nP _wing/16/_crib_y_arm/2 12.303149223\nP _wing/16/_crib_y_arm/3 12.303149223\nP _wing/16/_crib_y_arm/4 12.303149223\nP _wing/16/_crib_y_arm/5 0.0\nP _wing/16/_crib_y_arm/6 0.0\nP _wing/16/_crib_y_arm/7 0.0\nP _wing/16/_crib_y_arm/8 0.0\nP _wing/16/_crib_y_arm/9 0.0\nP _wing/16/_crib_y_arm/count 11\nP _wing/16/_crib_z_arm/0 32.808399200\nP _wing/16/_crib_z_arm/1 32.808399200\nP _wing/16/_crib_z_arm/10 0.0\nP _wing/16/_crib_z_arm/2 32.808399200\nP _wing/16/_crib_z_arm/3 32.808399200\nP _wing/16/_crib_z_arm/4 32.808399200\nP _wing/16/_crib_z_arm/5 0.0\nP _wing/16/_crib_z_arm/6 0.0\nP _wing/16/_crib_z_arm/7 0.0\nP _wing/16/_crib_z_arm/8 0.0\nP _wing/16/_crib_z_arm/9 0.0\nP _wing/16/_crib_z_arm/count 11\nP _wing/16/_delta_fac 0.0\nP _wing/16/_dihed_design 0.0\nP _wing/16/_dihed_full_up 0.0\nP _wing/16/_dihed_root_inc 0.0\nP _wing/16/_elev1/0 1\nP _wing/16/_elev1/1 1\nP _wing/16/_elev1/2 1\nP _wing/16/_elev1/3 1\nP _wing/16/_elev1/4 0\nP _wing/16/_elev1/5 0\nP _wing/16/_elev1/6 0\nP _wing/16/_elev1/7 0\nP _wing/16/_elev1/8 0\nP _wing/16/_elev1/9 0\nP _wing/16/_elev1/count 10\nP _wing/16/_elev2/0 0\nP _wing/16/_elev2/1 0\nP _wing/16/_elev2/2 0\nP _wing/16/_elev2/3 0\nP _wing/16/_elev2/4 0\nP _wing/16/_elev2/5 0\nP _wing/16/_elev2/6 0\nP _wing/16/_elev2/7 0\nP _wing/16/_elev2/8 0\nP _wing/16/_elev2/9 0\nP _wing/16/_elev2/count 10\nP _wing/16/_els 2\nP _wing/16/_flap1/0 0\nP _wing/16/_flap1/1 0\nP _wing/16/_flap1/2 0\nP _wing/16/_flap1/3 0\nP _wing/16/_flap1/4 0\nP _wing/16/_flap1/5 0\nP _wing/16/_flap1/6 0\nP _wing/16/_flap1/7 0\nP _wing/16/_flap1/8 0\nP _wing/16/_flap1/9 0\nP _wing/16/_flap1/count 10\nP _wing/16/_flap2/0 0\nP _wing/16/_flap2/1 0\nP _wing/16/_flap2/2 0\nP _wing/16/_flap2/3 0\nP _wing/16/_flap2/4 0\nP _wing/16/_flap2/5 0\nP _wing/16/_flap2/6 0\nP _wing/16/_flap2/7 0\nP _wing/16/_flap2/8 0\nP _wing/16/_flap2/9 0\nP _wing/16/_flap2/count 10\nP _wing/16/_inc_ailn1/0 0\nP _wing/16/_inc_ailn1/1 0\nP _wing/16/_inc_ailn1/2 0\nP _wing/16/_inc_ailn1/3 0\nP _wing/16/_inc_ailn1/4 0\nP _wing/16/_inc_ailn1/5 0\nP _wing/16/_inc_ailn1/6 0\nP _wing/16/_inc_ailn1/7 0\nP _wing/16/_inc_ailn1/8 0\nP _wing/16/_inc_ailn1/9 0\nP _wing/16/_inc_ailn1/count 10\nP _wing/16/_inc_ailn2/0 0\nP _wing/16/_inc_ailn2/1 0\nP _wing/16/_inc_ailn2/2 0\nP _wing/16/_inc_ailn2/3 0\nP _wing/16/_inc_ailn2/4 0\nP _wing/16/_inc_ailn2/5 0\nP _wing/16/_inc_ailn2/6 0\nP _wing/16/_inc_ailn2/7 0\nP _wing/16/_inc_ailn2/8 0\nP _wing/16/_inc_ailn2/9 0\nP _wing/16/_inc_ailn2/count 10\nP _wing/16/_inc_elev1/0 0\nP _wing/16/_inc_elev1/1 0\nP _wing/16/_inc_elev1/2 0\nP _wing/16/_inc_elev1/3 0\nP _wing/16/_inc_elev1/4 0\nP _wing/16/_inc_elev1/5 0\nP _wing/16/_inc_elev1/6 0\nP _wing/16/_inc_elev1/7 0\nP _wing/16/_inc_elev1/8 0\nP _wing/16/_inc_elev1/9 0\nP _wing/16/_inc_elev1/count 10\nP _wing/16/_inc_elev2/0 0\nP _wing/16/_inc_elev2/1 0\nP _wing/16/_inc_elev2/2 0\nP _wing/16/_inc_elev2/3 0\nP _wing/16/_inc_elev2/4 0\nP _wing/16/_inc_elev2/5 0\nP _wing/16/_inc_elev2/6 0\nP _wing/16/_inc_elev2/7 0\nP _wing/16/_inc_elev2/8 0\nP _wing/16/_inc_elev2/9 0\nP _wing/16/_inc_elev2/count 10\nP _wing/16/_inc_incid/0 0.0\nP _wing/16/_inc_incid/1 0.0\nP _wing/16/_inc_incid/2 0.0\nP _wing/16/_inc_incid/3 0.0\nP _wing/16/_inc_incid/4 0.0\nP _wing/16/_inc_incid/5 0.0\nP _wing/16/_inc_incid/6 0.0\nP _wing/16/_inc_incid/7 0.0\nP _wing/16/_inc_incid/8 0.0\nP _wing/16/_inc_incid/9 0.0\nP _wing/16/_inc_incid/count 10\nP _wing/16/_inc_rudd1/0 0\nP _wing/16/_inc_rudd1/1 0\nP _wing/16/_inc_rudd1/2 0\nP _wing/16/_inc_rudd1/3 0\nP _wing/16/_inc_rudd1/4 0\nP _wing/16/_inc_rudd1/5 0\nP _wing/16/_inc_rudd1/6 0\nP _wing/16/_inc_rudd1/7 0\nP _wing/16/_inc_rudd1/8 0\nP _wing/16/_inc_rudd1/9 0\nP _wing/16/_inc_rudd1/count 10\nP _wing/16/_inc_rudd2/0 0\nP _wing/16/_inc_rudd2/1 0\nP _wing/16/_inc_rudd2/2 0\nP _wing/16/_inc_rudd2/3 0\nP _wing/16/_inc_rudd2/4 0\nP _wing/16/_inc_rudd2/5 0\nP _wing/16/_inc_rudd2/6 0\nP _wing/16/_inc_rudd2/7 0\nP _wing/16/_inc_rudd2/8 0\nP _wing/16/_inc_rudd2/9 0\nP _wing/16/_inc_rudd2/count 10\nP _wing/16/_inc_trim/0 0\nP _wing/16/_inc_trim/1 0\nP _wing/16/_inc_trim/2 0\nP _wing/16/_inc_trim/3 0\nP _wing/16/_inc_trim/4 0\nP _wing/16/_inc_trim/5 0\nP _wing/16/_inc_trim/6 0\nP _wing/16/_inc_trim/7 0\nP _wing/16/_inc_trim/8 0\nP _wing/16/_inc_trim/9 0\nP _wing/16/_inc_trim/count 10\nP _wing/16/_inc_vect/0 0\nP _wing/16/_inc_vect/1 0\nP _wing/16/_inc_vect/2 0\nP _wing/16/_inc_vect/3 0\nP _wing/16/_inc_vect/4 0\nP _wing/16/_inc_vect/5 0\nP _wing/16/_inc_vect/6 0\nP _wing/16/_inc_vect/7 0\nP _wing/16/_inc_vect/8 0\nP _wing/16/_inc_vect/9 0\nP _wing/16/_inc_vect/count 10\nP _wing/16/_incid_chrd_inc 0.0\nP _wing/16/_incid_full_up 0.0\nP _wing/16/_incidence/0 0.0\nP _wing/16/_incidence/1 0.0\nP _wing/16/_incidence/2 0.0\nP _wing/16/_incidence/3 0.0\nP _wing/16/_incidence/4 0.0\nP _wing/16/_incidence/5 0.0\nP _wing/16/_incidence/6 0.0\nP _wing/16/_incidence/7 0.0\nP _wing/16/_incidence/8 0.0\nP _wing/16/_incidence/9 0.0\nP _wing/16/_incidence/count 10\nP _wing/16/_is_right_mult -1.0\nP _wing/16/_oswalds_e 0.0\nP _wing/16/_retract_max 0.0\nP _wing/16/_retract_now 0.0\nP _wing/16/_rudd1/0 0\nP _wing/16/_rudd1/1 0\nP _wing/16/_rudd1/2 0\nP _wing/16/_rudd1/3 0\nP _wing/16/_rudd1/4 0\nP _wing/16/_rudd1/5 0\nP _wing/16/_rudd1/6 0\nP _wing/16/_rudd1/7 0\nP _wing/16/_rudd1/8 0\nP _wing/16/_rudd1/9 0\nP _wing/16/_rudd1/count 10\nP _wing/16/_rudd2/0 0\nP _wing/16/_rudd2/1 0\nP _wing/16/_rudd2/2 0\nP _wing/16/_rudd2/3 0\nP _wing/16/_rudd2/4 0\nP _wing/16/_rudd2/5 0\nP _wing/16/_rudd2/6 0\nP _wing/16/_rudd2/7 0\nP _wing/16/_rudd2/8 0\nP _wing/16/_rudd2/9 0\nP _wing/16/_rudd2/count 10\nP _wing/16/_sbrk1/0 0\nP _wing/16/_sbrk1/1 0\nP _wing/16/_sbrk1/2 0\nP _wing/16/_sbrk1/3 0\nP _wing/16/_sbrk1/4 0\nP _wing/16/_sbrk1/5 0\nP _wing/16/_sbrk1/6 0\nP _wing/16/_sbrk1/7 0\nP _wing/16/_sbrk1/8 0\nP _wing/16/_sbrk1/9 0\nP _wing/16/_sbrk1/count 10\nP _wing/16/_sbrk2/0 0\nP _wing/16/_sbrk2/1 0\nP _wing/16/_sbrk2/2 0\nP _wing/16/_sbrk2/3 0\nP _wing/16/_sbrk2/4 0\nP _wing/16/_sbrk2/5 0\nP _wing/16/_sbrk2/6 0\nP _wing/16/_sbrk2/7 0\nP _wing/16/_sbrk2/8 0\nP _wing/16/_sbrk2/9 0\nP _wing/16/_sbrk2/count 10\nP _wing/16/_semilen_JND 0.0\nP _wing/16/_semilen_SEG 8.202099800\nP _wing/16/_sla1_effect 0.0\nP _wing/16/_sla2_effect 0.0\nP _wing/16/_slat1/0 0\nP _wing/16/_slat1/1 0\nP _wing/16/_slat1/2 0\nP _wing/16/_slat1/3 0\nP _wing/16/_slat1/4 0\nP _wing/16/_slat1/5 0\nP _wing/16/_slat1/6 0\nP _wing/16/_slat1/7 0\nP _wing/16/_slat1/8 0\nP _wing/16/_slat1/9 0\nP _wing/16/_slat1/count 10\nP _wing/16/_slat2/0 0\nP _wing/16/_slat2/1 0\nP _wing/16/_slat2/2 0\nP _wing/16/_slat2/3 0\nP _wing/16/_slat2/4 0\nP _wing/16/_slat2/5 0\nP _wing/16/_slat2/6 0\nP _wing/16/_slat2/7 0\nP _wing/16/_slat2/8 0\nP _wing/16/_slat2/9 0\nP _wing/16/_slat2/count 10\nP _wing/16/_spoi1/0 0\nP _wing/16/_spoi1/1 0\nP _wing/16/_spoi1/2 0\nP _wing/16/_spoi1/3 0\nP _wing/16/_spoi1/4 0\nP _wing/16/_spoi1/5 0\nP _wing/16/_spoi1/6 0\nP _wing/16/_spoi1/7 0\nP _wing/16/_spoi1/8 0\nP _wing/16/_spoi1/9 0\nP _wing/16/_spoi1/count 10\nP _wing/16/_spoi2/0 0\nP _wing/16/_spoi2/1 0\nP _wing/16/_spoi2/2 0\nP _wing/16/_spoi2/3 0\nP _wing/16/_spoi2/4 0\nP _wing/16/_spoi2/5 0\nP _wing/16/_spoi2/6 0\nP _wing/16/_spoi2/7 0\nP _wing/16/_spoi2/8 0\nP _wing/16/_spoi2/9 0\nP _wing/16/_spoi2/count 10\nP _wing/16/_sweep_design 0.0\nP _wing/16/_sweep_full_aft 0.0\nP _wing/16/_sweep_root_inc 0.0\nP _wing/16/_var_dihed 0\nP _wing/16/_var_incid 0\nP _wing/16/_var_retract 0\nP _wing/16/_var_sweep 0\nP _wing/16/_yawbr/0 0\nP _wing/16/_yawbr/1 0\nP _wing/16/_yawbr/2 0\nP _wing/16/_yawbr/3 0\nP _wing/16/_yawbr/4 0\nP _wing/16/_yawbr/5 0\nP _wing/16/_yawbr/6 0\nP _wing/16/_yawbr/7 0\nP _wing/16/_yawbr/8 0\nP _wing/16/_yawbr/9 0\nP _wing/16/_yawbr/count 10\nP _wing/17/_AR_geo 0.0\nP _wing/17/_Croot 1.640419960\nP _wing/17/_Ctip 1.640419960\nP _wing/17/_TR_geo 0.0\nP _wing/17/_afl_file_R0 NACA 0009 (symmetrical).afl\nP _wing/17/_afl_file_R1 NACA 0009 (symmetrical).afl\nP _wing/17/_afl_file_T0 NACA 0009 (symmetrical).afl\nP _wing/17/_afl_file_T1 NACA 0009 (symmetrical).afl\nP _wing/17/_ailn1/0 0\nP _wing/17/_ailn1/1 0\nP _wing/17/_ailn1/2 0\nP _wing/17/_ailn1/3 0\nP _wing/17/_ailn1/4 0\nP _wing/17/_ailn1/5 0\nP _wing/17/_ailn1/6 0\nP _wing/17/_ailn1/7 0\nP _wing/17/_ailn1/8 0\nP _wing/17/_ailn1/9 0\nP _wing/17/_ailn1/count 10\nP _wing/17/_ailn2/0 0\nP _wing/17/_ailn2/1 0\nP _wing/17/_ailn2/2 0\nP _wing/17/_ailn2/3 0\nP _wing/17/_ailn2/4 0\nP _wing/17/_ailn2/5 0\nP _wing/17/_ailn2/6 0\nP _wing/17/_ailn2/7 0\nP _wing/17/_ailn2/8 0\nP _wing/17/_ailn2/9 0\nP _wing/17/_ailn2/count 10\nP _wing/17/_average_mac 0.0\nP _wing/17/_base_wash_subsonic 0.0\nP _wing/17/_base_wash_supersonic 0.0\nP _wing/17/_c_off_for_RIB/0 0.0\nP _wing/17/_c_off_for_RIB/1 0.0\nP _wing/17/_c_off_for_RIB/10 0.0\nP _wing/17/_c_off_for_RIB/2 0.0\nP _wing/17/_c_off_for_RIB/3 0.0\nP _wing/17/_c_off_for_RIB/4 0.0\nP _wing/17/_c_off_for_RIB/5 0.0\nP _wing/17/_c_off_for_RIB/6 0.0\nP _wing/17/_c_off_for_RIB/7 0.0\nP _wing/17/_c_off_for_RIB/8 0.0\nP _wing/17/_c_off_for_RIB/9 0.0\nP _wing/17/_c_off_for_RIB/count 11\nP _wing/17/_c_rat_for_RIB/0 1.0\nP _wing/17/_c_rat_for_RIB/1 1.0\nP _wing/17/_c_rat_for_RIB/10 1.0\nP _wing/17/_c_rat_for_RIB/2 1.0\nP _wing/17/_c_rat_for_RIB/3 1.0\nP _wing/17/_c_rat_for_RIB/4 1.0\nP _wing/17/_c_rat_for_RIB/5 1.0\nP _wing/17/_c_rat_for_RIB/6 1.0\nP _wing/17/_c_rat_for_RIB/7 1.0\nP _wing/17/_c_rat_for_RIB/8 1.0\nP _wing/17/_c_rat_for_RIB/9 1.0\nP _wing/17/_c_rat_for_RIB/count 11\nP _wing/17/_chord_for_RIB/0 1.640419960\nP _wing/17/_chord_for_RIB/1 1.640419960\nP _wing/17/_chord_for_RIB/10 0.0\nP _wing/17/_chord_for_RIB/2 1.640419960\nP _wing/17/_chord_for_RIB/3 1.640419960\nP _wing/17/_chord_for_RIB/4 1.640419960\nP _wing/17/_chord_for_RIB/5 0.0\nP _wing/17/_chord_for_RIB/6 0.0\nP _wing/17/_chord_for_RIB/7 0.0\nP _wing/17/_chord_for_RIB/8 0.0\nP _wing/17/_chord_for_RIB/9 0.0\nP _wing/17/_chord_for_RIB/count 11\nP _wing/17/_chord_piv 0.250000000\nP _wing/17/_crib_x_arm/0 0.0\nP _wing/17/_crib_x_arm/1 4.101049900\nP _wing/17/_crib_x_arm/10 0.0\nP _wing/17/_crib_x_arm/2 8.202099800\nP _wing/17/_crib_x_arm/3 8.202099800\nP _wing/17/_crib_x_arm/4 8.202099800\nP _wing/17/_crib_x_arm/5 0.0\nP _wing/17/_crib_x_arm/6 0.0\nP _wing/17/_crib_x_arm/7 0.0\nP _wing/17/_crib_x_arm/8 0.0\nP _wing/17/_crib_x_arm/9 0.0\nP _wing/17/_crib_x_arm/count 11\nP _wing/17/_crib_y_arm/0 12.303149223\nP _wing/17/_crib_y_arm/1 12.303149223\nP _wing/17/_crib_y_arm/10 0.0\nP _wing/17/_crib_y_arm/2 12.303149223\nP _wing/17/_crib_y_arm/3 12.303149223\nP _wing/17/_crib_y_arm/4 12.303149223\nP _wing/17/_crib_y_arm/5 0.0\nP _wing/17/_crib_y_arm/6 0.0\nP _wing/17/_crib_y_arm/7 0.0\nP _wing/17/_crib_y_arm/8 0.0\nP _wing/17/_crib_y_arm/9 0.0\nP _wing/17/_crib_y_arm/count 11\nP _wing/17/_crib_z_arm/0 32.808399200\nP _wing/17/_crib_z_arm/1 32.808399200\nP _wing/17/_crib_z_arm/10 0.0\nP _wing/17/_crib_z_arm/2 32.808399200\nP _wing/17/_crib_z_arm/3 32.808399200\nP _wing/17/_crib_z_arm/4 32.808399200\nP _wing/17/_crib_z_arm/5 0.0\nP _wing/17/_crib_z_arm/6 0.0\nP _wing/17/_crib_z_arm/7 0.0\nP _wing/17/_crib_z_arm/8 0.0\nP _wing/17/_crib_z_arm/9 0.0\nP _wing/17/_crib_z_arm/count 11\nP _wing/17/_delta_fac 0.0\nP _wing/17/_dihed_design 0.0\nP _wing/17/_dihed_full_up 0.0\nP _wing/17/_dihed_root_inc 0.0\nP _wing/17/_elev1/0 1\nP _wing/17/_elev1/1 1\nP _wing/17/_elev1/2 1\nP _wing/17/_elev1/3 1\nP _wing/17/_elev1/4 0\nP _wing/17/_elev1/5 0\nP _wing/17/_elev1/6 0\nP _wing/17/_elev1/7 0\nP _wing/17/_elev1/8 0\nP _wing/17/_elev1/9 0\nP _wing/17/_elev1/count 10\nP _wing/17/_elev2/0 0\nP _wing/17/_elev2/1 0\nP _wing/17/_elev2/2 0\nP _wing/17/_elev2/3 0\nP _wing/17/_elev2/4 0\nP _wing/17/_elev2/5 0\nP _wing/17/_elev2/6 0\nP _wing/17/_elev2/7 0\nP _wing/17/_elev2/8 0\nP _wing/17/_elev2/9 0\nP _wing/17/_elev2/count 10\nP _wing/17/_els 2\nP _wing/17/_flap1/0 0\nP _wing/17/_flap1/1 0\nP _wing/17/_flap1/2 0\nP _wing/17/_flap1/3 0\nP _wing/17/_flap1/4 0\nP _wing/17/_flap1/5 0\nP _wing/17/_flap1/6 0\nP _wing/17/_flap1/7 0\nP _wing/17/_flap1/8 0\nP _wing/17/_flap1/9 0\nP _wing/17/_flap1/count 10\nP _wing/17/_flap2/0 0\nP _wing/17/_flap2/1 0\nP _wing/17/_flap2/2 0\nP _wing/17/_flap2/3 0\nP _wing/17/_flap2/4 0\nP _wing/17/_flap2/5 0\nP _wing/17/_flap2/6 0\nP _wing/17/_flap2/7 0\nP _wing/17/_flap2/8 0\nP _wing/17/_flap2/9 0\nP _wing/17/_flap2/count 10\nP _wing/17/_inc_ailn1/0 0\nP _wing/17/_inc_ailn1/1 0\nP _wing/17/_inc_ailn1/2 0\nP _wing/17/_inc_ailn1/3 0\nP _wing/17/_inc_ailn1/4 0\nP _wing/17/_inc_ailn1/5 0\nP _wing/17/_inc_ailn1/6 0\nP _wing/17/_inc_ailn1/7 0\nP _wing/17/_inc_ailn1/8 0\nP _wing/17/_inc_ailn1/9 0\nP _wing/17/_inc_ailn1/count 10\nP _wing/17/_inc_ailn2/0 0\nP _wing/17/_inc_ailn2/1 0\nP _wing/17/_inc_ailn2/2 0\nP _wing/17/_inc_ailn2/3 0\nP _wing/17/_inc_ailn2/4 0\nP _wing/17/_inc_ailn2/5 0\nP _wing/17/_inc_ailn2/6 0\nP _wing/17/_inc_ailn2/7 0\nP _wing/17/_inc_ailn2/8 0\nP _wing/17/_inc_ailn2/9 0\nP _wing/17/_inc_ailn2/count 10\nP _wing/17/_inc_elev1/0 0\nP _wing/17/_inc_elev1/1 0\nP _wing/17/_inc_elev1/2 0\nP _wing/17/_inc_elev1/3 0\nP _wing/17/_inc_elev1/4 0\nP _wing/17/_inc_elev1/5 0\nP _wing/17/_inc_elev1/6 0\nP _wing/17/_inc_elev1/7 0\nP _wing/17/_inc_elev1/8 0\nP _wing/17/_inc_elev1/9 0\nP _wing/17/_inc_elev1/count 10\nP _wing/17/_inc_elev2/0 0\nP _wing/17/_inc_elev2/1 0\nP _wing/17/_inc_elev2/2 0\nP _wing/17/_inc_elev2/3 0\nP _wing/17/_inc_elev2/4 0\nP _wing/17/_inc_elev2/5 0\nP _wing/17/_inc_elev2/6 0\nP _wing/17/_inc_elev2/7 0\nP _wing/17/_inc_elev2/8 0\nP _wing/17/_inc_elev2/9 0\nP _wing/17/_inc_elev2/count 10\nP _wing/17/_inc_incid/0 0.0\nP _wing/17/_inc_incid/1 0.0\nP _wing/17/_inc_incid/2 0.0\nP _wing/17/_inc_incid/3 0.0\nP _wing/17/_inc_incid/4 0.0\nP _wing/17/_inc_incid/5 0.0\nP _wing/17/_inc_incid/6 0.0\nP _wing/17/_inc_incid/7 0.0\nP _wing/17/_inc_incid/8 0.0\nP _wing/17/_inc_incid/9 0.0\nP _wing/17/_inc_incid/count 10\nP _wing/17/_inc_rudd1/0 0\nP _wing/17/_inc_rudd1/1 0\nP _wing/17/_inc_rudd1/2 0\nP _wing/17/_inc_rudd1/3 0\nP _wing/17/_inc_rudd1/4 0\nP _wing/17/_inc_rudd1/5 0\nP _wing/17/_inc_rudd1/6 0\nP _wing/17/_inc_rudd1/7 0\nP _wing/17/_inc_rudd1/8 0\nP _wing/17/_inc_rudd1/9 0\nP _wing/17/_inc_rudd1/count 10\nP _wing/17/_inc_rudd2/0 0\nP _wing/17/_inc_rudd2/1 0\nP _wing/17/_inc_rudd2/2 0\nP _wing/17/_inc_rudd2/3 0\nP _wing/17/_inc_rudd2/4 0\nP _wing/17/_inc_rudd2/5 0\nP _wing/17/_inc_rudd2/6 0\nP _wing/17/_inc_rudd2/7 0\nP _wing/17/_inc_rudd2/8 0\nP _wing/17/_inc_rudd2/9 0\nP _wing/17/_inc_rudd2/count 10\nP _wing/17/_inc_trim/0 0\nP _wing/17/_inc_trim/1 0\nP _wing/17/_inc_trim/2 0\nP _wing/17/_inc_trim/3 0\nP _wing/17/_inc_trim/4 0\nP _wing/17/_inc_trim/5 0\nP _wing/17/_inc_trim/6 0\nP _wing/17/_inc_trim/7 0\nP _wing/17/_inc_trim/8 0\nP _wing/17/_inc_trim/9 0\nP _wing/17/_inc_trim/count 10\nP _wing/17/_inc_vect/0 0\nP _wing/17/_inc_vect/1 0\nP _wing/17/_inc_vect/2 0\nP _wing/17/_inc_vect/3 0\nP _wing/17/_inc_vect/4 0\nP _wing/17/_inc_vect/5 0\nP _wing/17/_inc_vect/6 0\nP _wing/17/_inc_vect/7 0\nP _wing/17/_inc_vect/8 0\nP _wing/17/_inc_vect/9 0\nP _wing/17/_inc_vect/count 10\nP _wing/17/_incid_chrd_inc 0.0\nP _wing/17/_incid_full_up 0.0\nP _wing/17/_incidence/0 0.0\nP _wing/17/_incidence/1 0.0\nP _wing/17/_incidence/2 0.0\nP _wing/17/_incidence/3 0.0\nP _wing/17/_incidence/4 0.0\nP _wing/17/_incidence/5 0.0\nP _wing/17/_incidence/6 0.0\nP _wing/17/_incidence/7 0.0\nP _wing/17/_incidence/8 0.0\nP _wing/17/_incidence/9 0.0\nP _wing/17/_incidence/count 10\nP _wing/17/_is_right_mult 1.0\nP _wing/17/_oswalds_e 0.0\nP _wing/17/_retract_max 0.0\nP _wing/17/_retract_now 0.0\nP _wing/17/_rudd1/0 0\nP _wing/17/_rudd1/1 0\nP _wing/17/_rudd1/2 0\nP _wing/17/_rudd1/3 0\nP _wing/17/_rudd1/4 0\nP _wing/17/_rudd1/5 0\nP _wing/17/_rudd1/6 0\nP _wing/17/_rudd1/7 0\nP _wing/17/_rudd1/8 0\nP _wing/17/_rudd1/9 0\nP _wing/17/_rudd1/count 10\nP _wing/17/_rudd2/0 0\nP _wing/17/_rudd2/1 0\nP _wing/17/_rudd2/2 0\nP _wing/17/_rudd2/3 0\nP _wing/17/_rudd2/4 0\nP _wing/17/_rudd2/5 0\nP _wing/17/_rudd2/6 0\nP _wing/17/_rudd2/7 0\nP _wing/17/_rudd2/8 0\nP _wing/17/_rudd2/9 0\nP _wing/17/_rudd2/count 10\nP _wing/17/_sbrk1/0 0\nP _wing/17/_sbrk1/1 0\nP _wing/17/_sbrk1/2 0\nP _wing/17/_sbrk1/3 0\nP _wing/17/_sbrk1/4 0\nP _wing/17/_sbrk1/5 0\nP _wing/17/_sbrk1/6 0\nP _wing/17/_sbrk1/7 0\nP _wing/17/_sbrk1/8 0\nP _wing/17/_sbrk1/9 0\nP _wing/17/_sbrk1/count 10\nP _wing/17/_sbrk2/0 0\nP _wing/17/_sbrk2/1 0\nP _wing/17/_sbrk2/2 0\nP _wing/17/_sbrk2/3 0\nP _wing/17/_sbrk2/4 0\nP _wing/17/_sbrk2/5 0\nP _wing/17/_sbrk2/6 0\nP _wing/17/_sbrk2/7 0\nP _wing/17/_sbrk2/8 0\nP _wing/17/_sbrk2/9 0\nP _wing/17/_sbrk2/count 10\nP _wing/17/_semilen_JND 0.0\nP _wing/17/_semilen_SEG 8.202099800\nP _wing/17/_sla1_effect 0.0\nP _wing/17/_sla2_effect 0.0\nP _wing/17/_slat1/0 0\nP _wing/17/_slat1/1 0\nP _wing/17/_slat1/2 0\nP _wing/17/_slat1/3 0\nP _wing/17/_slat1/4 0\nP _wing/17/_slat1/5 0\nP _wing/17/_slat1/6 0\nP _wing/17/_slat1/7 0\nP _wing/17/_slat1/8 0\nP _wing/17/_slat1/9 0\nP _wing/17/_slat1/count 10\nP _wing/17/_slat2/0 0\nP _wing/17/_slat2/1 0\nP _wing/17/_slat2/2 0\nP _wing/17/_slat2/3 0\nP _wing/17/_slat2/4 0\nP _wing/17/_slat2/5 0\nP _wing/17/_slat2/6 0\nP _wing/17/_slat2/7 0\nP _wing/17/_slat2/8 0\nP _wing/17/_slat2/9 0\nP _wing/17/_slat2/count 10\nP _wing/17/_spoi1/0 0\nP _wing/17/_spoi1/1 0\nP _wing/17/_spoi1/2 0\nP _wing/17/_spoi1/3 0\nP _wing/17/_spoi1/4 0\nP _wing/17/_spoi1/5 0\nP _wing/17/_spoi1/6 0\nP _wing/17/_spoi1/7 0\nP _wing/17/_spoi1/8 0\nP _wing/17/_spoi1/9 0\nP _wing/17/_spoi1/count 10\nP _wing/17/_spoi2/0 0\nP _wing/17/_spoi2/1 0\nP _wing/17/_spoi2/2 0\nP _wing/17/_spoi2/3 0\nP _wing/17/_spoi2/4 0\nP _wing/17/_spoi2/5 0\nP _wing/17/_spoi2/6 0\nP _wing/17/_spoi2/7 0\nP _wing/17/_spoi2/8 0\nP _wing/17/_spoi2/9 0\nP _wing/17/_spoi2/count 10\nP _wing/17/_sweep_design 0.0\nP _wing/17/_sweep_full_aft 0.0\nP _wing/17/_sweep_root_inc 0.0\nP _wing/17/_var_dihed 0\nP _wing/17/_var_incid 0\nP _wing/17/_var_retract 0\nP _wing/17/_var_sweep 0\nP _wing/17/_yawbr/0 0\nP _wing/17/_yawbr/1 0\nP _wing/17/_yawbr/2 0\nP _wing/17/_yawbr/3 0\nP _wing/17/_yawbr/4 0\nP _wing/17/_yawbr/5 0\nP _wing/17/_yawbr/6 0\nP _wing/17/_yawbr/7 0\nP _wing/17/_yawbr/8 0\nP _wing/17/_yawbr/9 0\nP _wing/17/_yawbr/count 10\nP _wing/18/_AR_geo 0.0\nP _wing/18/_Croot 0.032808397\nP _wing/18/_Ctip 0.032808397\nP _wing/18/_TR_geo 0.0\nP _wing/18/_afl_file_R0 NACA 0009 (symmetrical).afl\nP _wing/18/_afl_file_R1 NACA 0009 (symmetrical).afl\nP _wing/18/_afl_file_T0 NACA 0009 (symmetrical).afl\nP _wing/18/_afl_file_T1 NACA 0009 (symmetrical).afl\nP _wing/18/_ailn1/0 0\nP _wing/18/_ailn1/1 0\nP _wing/18/_ailn1/2 0\nP _wing/18/_ailn1/3 0\nP _wing/18/_ailn1/4 0\nP _wing/18/_ailn1/5 0\nP _wing/18/_ailn1/6 0\nP _wing/18/_ailn1/7 0\nP _wing/18/_ailn1/8 0\nP _wing/18/_ailn1/9 0\nP _wing/18/_ailn1/count 10\nP _wing/18/_ailn2/0 0\nP _wing/18/_ailn2/1 0\nP _wing/18/_ailn2/2 0\nP _wing/18/_ailn2/3 0\nP _wing/18/_ailn2/4 0\nP _wing/18/_ailn2/5 0\nP _wing/18/_ailn2/6 0\nP _wing/18/_ailn2/7 0\nP _wing/18/_ailn2/8 0\nP _wing/18/_ailn2/9 0\nP _wing/18/_ailn2/count 10\nP _wing/18/_average_mac 0.0\nP _wing/18/_base_wash_subsonic 0.0\nP _wing/18/_base_wash_supersonic 0.0\nP _wing/18/_c_off_for_RIB/0 0.0\nP _wing/18/_c_off_for_RIB/1 0.0\nP _wing/18/_c_off_for_RIB/10 0.0\nP _wing/18/_c_off_for_RIB/2 0.0\nP _wing/18/_c_off_for_RIB/3 0.0\nP _wing/18/_c_off_for_RIB/4 0.0\nP _wing/18/_c_off_for_RIB/5 0.0\nP _wing/18/_c_off_for_RIB/6 0.0\nP _wing/18/_c_off_for_RIB/7 0.0\nP _wing/18/_c_off_for_RIB/8 0.0\nP _wing/18/_c_off_for_RIB/9 0.0\nP _wing/18/_c_off_for_RIB/count 11\nP _wing/18/_c_rat_for_RIB/0 1.0\nP _wing/18/_c_rat_for_RIB/1 1.0\nP _wing/18/_c_rat_for_RIB/10 1.0\nP _wing/18/_c_rat_for_RIB/2 1.0\nP _wing/18/_c_rat_for_RIB/3 1.0\nP _wing/18/_c_rat_for_RIB/4 1.0\nP _wing/18/_c_rat_for_RIB/5 1.0\nP _wing/18/_c_rat_for_RIB/6 1.0\nP _wing/18/_c_rat_for_RIB/7 1.0\nP _wing/18/_c_rat_for_RIB/8 1.0\nP _wing/18/_c_rat_for_RIB/9 1.0\nP _wing/18/_c_rat_for_RIB/count 11\nP _wing/18/_chord_for_RIB/0 0.032808397\nP _wing/18/_chord_for_RIB/1 0.032808397\nP _wing/18/_chord_for_RIB/10 0.0\nP _wing/18/_chord_for_RIB/2 0.032808397\nP _wing/18/_chord_for_RIB/3 0.032808397\nP _wing/18/_chord_for_RIB/4 0.032808397\nP _wing/18/_chord_for_RIB/5 0.0\nP _wing/18/_chord_for_RIB/6 0.0\nP _wing/18/_chord_for_RIB/7 0.0\nP _wing/18/_chord_for_RIB/8 0.0\nP _wing/18/_chord_for_RIB/9 0.0\nP _wing/18/_chord_for_RIB/count 11\nP _wing/18/_chord_piv 0.250000000\nP _wing/18/_crib_x_arm/0 0.0\nP _wing/18/_crib_x_arm/1 -0.000000501\nP _wing/18/_crib_x_arm/10 0.0\nP _wing/18/_crib_x_arm/2 -0.000001002\nP _wing/18/_crib_x_arm/3 -0.000001503\nP _wing/18/_crib_x_arm/4 -0.000002004\nP _wing/18/_crib_x_arm/5 0.0\nP _wing/18/_crib_x_arm/6 0.0\nP _wing/18/_crib_x_arm/7 0.0\nP _wing/18/_crib_x_arm/8 0.0\nP _wing/18/_crib_x_arm/9 0.0\nP _wing/18/_crib_x_arm/count 11\nP _wing/18/_crib_y_arm/0 0.0\nP _wing/18/_crib_y_arm/1 3.075787306\nP _wing/18/_crib_y_arm/10 0.0\nP _wing/18/_crib_y_arm/2 6.151574612\nP _wing/18/_crib_y_arm/3 9.227361679\nP _wing/18/_crib_y_arm/4 12.303149223\nP _wing/18/_crib_y_arm/5 0.0\nP _wing/18/_crib_y_arm/6 0.0\nP _wing/18/_crib_y_arm/7 0.0\nP _wing/18/_crib_y_arm/8 0.0\nP _wing/18/_crib_y_arm/9 0.0\nP _wing/18/_crib_y_arm/count 11\nP _wing/18/_crib_z_arm/0 32.808399200\nP _wing/18/_crib_z_arm/1 32.808399200\nP _wing/18/_crib_z_arm/10 0.0\nP _wing/18/_crib_z_arm/2 32.808399200\nP _wing/18/_crib_z_arm/3 32.808399200\nP _wing/18/_crib_z_arm/4 32.808399200\nP _wing/18/_crib_z_arm/5 0.0\nP _wing/18/_crib_z_arm/6 0.0\nP _wing/18/_crib_z_arm/7 0.0\nP _wing/18/_crib_z_arm/8 0.0\nP _wing/18/_crib_z_arm/9 0.0\nP _wing/18/_crib_z_arm/count 11\nP _wing/18/_delta_fac 0.0\nP _wing/18/_dihed_design 90.0\nP _wing/18/_dihed_full_up 0.0\nP _wing/18/_dihed_root_inc 0.0\nP _wing/18/_elev1/0 0\nP _wing/18/_elev1/1 0\nP _wing/18/_elev1/2 0\nP _wing/18/_elev1/3 0\nP _wing/18/_elev1/4 0\nP _wing/18/_elev1/5 0\nP _wing/18/_elev1/6 0\nP _wing/18/_elev1/7 0\nP _wing/18/_elev1/8 0\nP _wing/18/_elev1/9 0\nP _wing/18/_elev1/count 10\nP _wing/18/_elev2/0 0\nP _wing/18/_elev2/1 0\nP _wing/18/_elev2/2 0\nP _wing/18/_elev2/3 0\nP _wing/18/_elev2/4 0\nP _wing/18/_elev2/5 0\nP _wing/18/_elev2/6 0\nP _wing/18/_elev2/7 0\nP _wing/18/_elev2/8 0\nP _wing/18/_elev2/9 0\nP _wing/18/_elev2/count 10\nP _wing/18/_els 4\nP _wing/18/_flap1/0 0\nP _wing/18/_flap1/1 0\nP _wing/18/_flap1/2 0\nP _wing/18/_flap1/3 0\nP _wing/18/_flap1/4 0\nP _wing/18/_flap1/5 0\nP _wing/18/_flap1/6 0\nP _wing/18/_flap1/7 0\nP _wing/18/_flap1/8 0\nP _wing/18/_flap1/9 0\nP _wing/18/_flap1/count 10\nP _wing/18/_flap2/0 0\nP _wing/18/_flap2/1 0\nP _wing/18/_flap2/2 0\nP _wing/18/_flap2/3 0\nP _wing/18/_flap2/4 0\nP _wing/18/_flap2/5 0\nP _wing/18/_flap2/6 0\nP _wing/18/_flap2/7 0\nP _wing/18/_flap2/8 0\nP _wing/18/_flap2/9 0\nP _wing/18/_flap2/count 10\nP _wing/18/_inc_ailn1/0 0\nP _wing/18/_inc_ailn1/1 0\nP _wing/18/_inc_ailn1/2 0\nP _wing/18/_inc_ailn1/3 0\nP _wing/18/_inc_ailn1/4 0\nP _wing/18/_inc_ailn1/5 0\nP _wing/18/_inc_ailn1/6 0\nP _wing/18/_inc_ailn1/7 0\nP _wing/18/_inc_ailn1/8 0\nP _wing/18/_inc_ailn1/9 0\nP _wing/18/_inc_ailn1/count 10\nP _wing/18/_inc_ailn2/0 0\nP _wing/18/_inc_ailn2/1 0\nP _wing/18/_inc_ailn2/2 0\nP _wing/18/_inc_ailn2/3 0\nP _wing/18/_inc_ailn2/4 0\nP _wing/18/_inc_ailn2/5 0\nP _wing/18/_inc_ailn2/6 0\nP _wing/18/_inc_ailn2/7 0\nP _wing/18/_inc_ailn2/8 0\nP _wing/18/_inc_ailn2/9 0\nP _wing/18/_inc_ailn2/count 10\nP _wing/18/_inc_elev1/0 0\nP _wing/18/_inc_elev1/1 0\nP _wing/18/_inc_elev1/2 0\nP _wing/18/_inc_elev1/3 0\nP _wing/18/_inc_elev1/4 0\nP _wing/18/_inc_elev1/5 0\nP _wing/18/_inc_elev1/6 0\nP _wing/18/_inc_elev1/7 0\nP _wing/18/_inc_elev1/8 0\nP _wing/18/_inc_elev1/9 0\nP _wing/18/_inc_elev1/count 10\nP _wing/18/_inc_elev2/0 0\nP _wing/18/_inc_elev2/1 0\nP _wing/18/_inc_elev2/2 0\nP _wing/18/_inc_elev2/3 0\nP _wing/18/_inc_elev2/4 0\nP _wing/18/_inc_elev2/5 0\nP _wing/18/_inc_elev2/6 0\nP _wing/18/_inc_elev2/7 0\nP _wing/18/_inc_elev2/8 0\nP _wing/18/_inc_elev2/9 0\nP _wing/18/_inc_elev2/count 10\nP _wing/18/_inc_incid/0 0.0\nP _wing/18/_inc_incid/1 0.0\nP _wing/18/_inc_incid/2 0.0\nP _wing/18/_inc_incid/3 0.0\nP _wing/18/_inc_incid/4 0.0\nP _wing/18/_inc_incid/5 0.0\nP _wing/18/_inc_incid/6 0.0\nP _wing/18/_inc_incid/7 0.0\nP _wing/18/_inc_incid/8 0.0\nP _wing/18/_inc_incid/9 0.0\nP _wing/18/_inc_incid/count 10\nP _wing/18/_inc_rudd1/0 0\nP _wing/18/_inc_rudd1/1 0\nP _wing/18/_inc_rudd1/2 0\nP _wing/18/_inc_rudd1/3 0\nP _wing/18/_inc_rudd1/4 0\nP _wing/18/_inc_rudd1/5 0\nP _wing/18/_inc_rudd1/6 0\nP _wing/18/_inc_rudd1/7 0\nP _wing/18/_inc_rudd1/8 0\nP _wing/18/_inc_rudd1/9 0\nP _wing/18/_inc_rudd1/count 10\nP _wing/18/_inc_rudd2/0 0\nP _wing/18/_inc_rudd2/1 0\nP _wing/18/_inc_rudd2/2 0\nP _wing/18/_inc_rudd2/3 0\nP _wing/18/_inc_rudd2/4 0\nP _wing/18/_inc_rudd2/5 0\nP _wing/18/_inc_rudd2/6 0\nP _wing/18/_inc_rudd2/7 0\nP _wing/18/_inc_rudd2/8 0\nP _wing/18/_inc_rudd2/9 0\nP _wing/18/_inc_rudd2/count 10\nP _wing/18/_inc_trim/0 0\nP _wing/18/_inc_trim/1 0\nP _wing/18/_inc_trim/2 0\nP _wing/18/_inc_trim/3 0\nP _wing/18/_inc_trim/4 0\nP _wing/18/_inc_trim/5 0\nP _wing/18/_inc_trim/6 0\nP _wing/18/_inc_trim/7 0\nP _wing/18/_inc_trim/8 0\nP _wing/18/_inc_trim/9 0\nP _wing/18/_inc_trim/count 10\nP _wing/18/_inc_vect/0 0\nP _wing/18/_inc_vect/1 0\nP _wing/18/_inc_vect/2 0\nP _wing/18/_inc_vect/3 0\nP _wing/18/_inc_vect/4 0\nP _wing/18/_inc_vect/5 0\nP _wing/18/_inc_vect/6 0\nP _wing/18/_inc_vect/7 0\nP _wing/18/_inc_vect/8 0\nP _wing/18/_inc_vect/9 0\nP _wing/18/_inc_vect/count 10\nP _wing/18/_incid_chrd_inc 0.0\nP _wing/18/_incid_full_up 0.0\nP _wing/18/_incidence/0 0.0\nP _wing/18/_incidence/1 0.0\nP _wing/18/_incidence/2 0.0\nP _wing/18/_incidence/3 0.0\nP _wing/18/_incidence/4 0.0\nP _wing/18/_incidence/5 0.0\nP _wing/18/_incidence/6 0.0\nP _wing/18/_incidence/7 0.0\nP _wing/18/_incidence/8 0.0\nP _wing/18/_incidence/9 0.0\nP _wing/18/_incidence/count 10\nP _wing/18/_is_right_mult 1.0\nP _wing/18/_oswalds_e 0.0\nP _wing/18/_retract_max 0.0\nP _wing/18/_retract_now 0.0\nP _wing/18/_rudd1/0 0\nP _wing/18/_rudd1/1 0\nP _wing/18/_rudd1/2 0\nP _wing/18/_rudd1/3 0\nP _wing/18/_rudd1/4 0\nP _wing/18/_rudd1/5 0\nP _wing/18/_rudd1/6 0\nP _wing/18/_rudd1/7 0\nP _wing/18/_rudd1/8 0\nP _wing/18/_rudd1/9 0\nP _wing/18/_rudd1/count 10\nP _wing/18/_rudd2/0 0\nP _wing/18/_rudd2/1 0\nP _wing/18/_rudd2/2 0\nP _wing/18/_rudd2/3 0\nP _wing/18/_rudd2/4 0\nP _wing/18/_rudd2/5 0\nP _wing/18/_rudd2/6 0\nP _wing/18/_rudd2/7 0\nP _wing/18/_rudd2/8 0\nP _wing/18/_rudd2/9 0\nP _wing/18/_rudd2/count 10\nP _wing/18/_sbrk1/0 0\nP _wing/18/_sbrk1/1 0\nP _wing/18/_sbrk1/2 0\nP _wing/18/_sbrk1/3 0\nP _wing/18/_sbrk1/4 0\nP _wing/18/_sbrk1/5 0\nP _wing/18/_sbrk1/6 0\nP _wing/18/_sbrk1/7 0\nP _wing/18/_sbrk1/8 0\nP _wing/18/_sbrk1/9 0\nP _wing/18/_sbrk1/count 10\nP _wing/18/_sbrk2/0 0\nP _wing/18/_sbrk2/1 0\nP _wing/18/_sbrk2/2 0\nP _wing/18/_sbrk2/3 0\nP _wing/18/_sbrk2/4 0\nP _wing/18/_sbrk2/5 0\nP _wing/18/_sbrk2/6 0\nP _wing/18/_sbrk2/7 0\nP _wing/18/_sbrk2/8 0\nP _wing/18/_sbrk2/9 0\nP _wing/18/_sbrk2/count 10\nP _wing/18/_semilen_JND 0.0\nP _wing/18/_semilen_SEG 12.303149223\nP _wing/18/_sla1_effect 0.0\nP _wing/18/_sla2_effect 0.0\nP _wing/18/_slat1/0 0\nP _wing/18/_slat1/1 0\nP _wing/18/_slat1/2 0\nP _wing/18/_slat1/3 0\nP _wing/18/_slat1/4 0\nP _wing/18/_slat1/5 0\nP _wing/18/_slat1/6 0\nP _wing/18/_slat1/7 0\nP _wing/18/_slat1/8 0\nP _wing/18/_slat1/9 0\nP _wing/18/_slat1/count 10\nP _wing/18/_slat2/0 0\nP _wing/18/_slat2/1 0\nP _wing/18/_slat2/2 0\nP _wing/18/_slat2/3 0\nP _wing/18/_slat2/4 0\nP _wing/18/_slat2/5 0\nP _wing/18/_slat2/6 0\nP _wing/18/_slat2/7 0\nP _wing/18/_slat2/8 0\nP _wing/18/_slat2/9 0\nP _wing/18/_slat2/count 10\nP _wing/18/_spoi1/0 0\nP _wing/18/_spoi1/1 0\nP _wing/18/_spoi1/2 0\nP _wing/18/_spoi1/3 0\nP _wing/18/_spoi1/4 0\nP _wing/18/_spoi1/5 0\nP _wing/18/_spoi1/6 0\nP _wing/18/_spoi1/7 0\nP _wing/18/_spoi1/8 0\nP _wing/18/_spoi1/9 0\nP _wing/18/_spoi1/count 10\nP _wing/18/_spoi2/0 0\nP _wing/18/_spoi2/1 0\nP _wing/18/_spoi2/2 0\nP _wing/18/_spoi2/3 0\nP _wing/18/_spoi2/4 0\nP _wing/18/_spoi2/5 0\nP _wing/18/_spoi2/6 0\nP _wing/18/_spoi2/7 0\nP _wing/18/_spoi2/8 0\nP _wing/18/_spoi2/9 0\nP _wing/18/_spoi2/count 10\nP _wing/18/_sweep_design 0.0\nP _wing/18/_sweep_full_aft 0.0\nP _wing/18/_sweep_root_inc 0.0\nP _wing/18/_var_dihed 0\nP _wing/18/_var_incid 0\nP _wing/18/_var_retract 0\nP _wing/18/_var_sweep 0\nP _wing/18/_yawbr/0 0\nP _wing/18/_yawbr/1 0\nP _wing/18/_yawbr/2 0\nP _wing/18/_yawbr/3 0\nP _wing/18/_yawbr/4 0\nP _wing/18/_yawbr/5 0\nP _wing/18/_yawbr/6 0\nP _wing/18/_yawbr/7 0\nP _wing/18/_yawbr/8 0\nP _wing/18/_yawbr/9 0\nP _wing/18/_yawbr/count 10\nP _wing/8/_AR_geo 0.0\nP _wing/8/_Croot 3.280839920\nP _wing/8/_Ctip 3.280839920\nP _wing/8/_TR_geo 0.0\nP _wing/8/_afl_file_R0 NACA 2412 (popular).afl\nP _wing/8/_afl_file_R1 NACA 2412 (popular).afl\nP _wing/8/_afl_file_T0 NACA 2412 (popular).afl\nP _wing/8/_afl_file_T1 NACA 2412 (popular).afl\nP _wing/8/_ailn1/0 0\nP _wing/8/_ailn1/1 0\nP _wing/8/_ailn1/2 0\nP _wing/8/_ailn1/3 0\nP _wing/8/_ailn1/4 0\nP _wing/8/_ailn1/5 0\nP _wing/8/_ailn1/6 1\nP _wing/8/_ailn1/7 1\nP _wing/8/_ailn1/8 0\nP _wing/8/_ailn1/9 0\nP _wing/8/_ailn1/count 10\nP _wing/8/_ailn2/0 0\nP _wing/8/_ailn2/1 0\nP _wing/8/_ailn2/2 0\nP _wing/8/_ailn2/3 0\nP _wing/8/_ailn2/4 0\nP _wing/8/_ailn2/5 0\nP _wing/8/_ailn2/6 0\nP _wing/8/_ailn2/7 0\nP _wing/8/_ailn2/8 0\nP _wing/8/_ailn2/9 0\nP _wing/8/_ailn2/count 10\nP _wing/8/_average_mac 0.0\nP _wing/8/_base_wash_subsonic 0.0\nP _wing/8/_base_wash_supersonic 0.0\nP _wing/8/_c_off_for_RIB/0 0.0\nP _wing/8/_c_off_for_RIB/1 0.0\nP _wing/8/_c_off_for_RIB/10 0.0\nP _wing/8/_c_off_for_RIB/2 0.0\nP _wing/8/_c_off_for_RIB/3 0.0\nP _wing/8/_c_off_for_RIB/4 0.0\nP _wing/8/_c_off_for_RIB/5 0.0\nP _wing/8/_c_off_for_RIB/6 0.0\nP _wing/8/_c_off_for_RIB/7 0.0\nP _wing/8/_c_off_for_RIB/8 0.0\nP _wing/8/_c_off_for_RIB/9 0.0\nP _wing/8/_c_off_for_RIB/count 11\nP _wing/8/_c_rat_for_RIB/0 1.0\nP _wing/8/_c_rat_for_RIB/1 1.0\nP _wing/8/_c_rat_for_RIB/10 1.0\nP _wing/8/_c_rat_for_RIB/2 1.0\nP _wing/8/_c_rat_for_RIB/3 1.0\nP _wing/8/_c_rat_for_RIB/4 1.0\nP _wing/8/_c_rat_for_RIB/5 1.0\nP _wing/8/_c_rat_for_RIB/6 1.0\nP _wing/8/_c_rat_for_RIB/7 1.0\nP _wing/8/_c_rat_for_RIB/8 1.0\nP _wing/8/_c_rat_for_RIB/9 1.0\nP _wing/8/_c_rat_for_RIB/count 11\nP _wing/8/_chord_for_RIB/0 3.280839920\nP _wing/8/_chord_for_RIB/1 3.280839920\nP _wing/8/_chord_for_RIB/10 0.0\nP _wing/8/_chord_for_RIB/2 3.280839920\nP _wing/8/_chord_for_RIB/3 3.280839920\nP _wing/8/_chord_for_RIB/4 3.280839920\nP _wing/8/_chord_for_RIB/5 3.280839920\nP _wing/8/_chord_for_RIB/6 3.280839920\nP _wing/8/_chord_for_RIB/7 3.280839920\nP _wing/8/_chord_for_RIB/8 3.280839920\nP _wing/8/_chord_for_RIB/9 0.0\nP _wing/8/_chord_for_RIB/count 11\nP _wing/8/_chord_piv 0.250000000\nP _wing/8/_crib_x_arm/0 0.0\nP _wing/8/_crib_x_arm/1 -6.561679840\nP _wing/8/_crib_x_arm/10 0.0\nP _wing/8/_crib_x_arm/2 -13.123359680\nP _wing/8/_crib_x_arm/3 -19.685039520\nP _wing/8/_crib_x_arm/4 -26.246719360\nP _wing/8/_crib_x_arm/5 -32.808399200\nP _wing/8/_crib_x_arm/6 -39.370079041\nP _wing/8/_crib_x_arm/7 -45.931758881\nP _wing/8/_crib_x_arm/8 -52.493438721\nP _wing/8/_crib_x_arm/9 0.0\nP _wing/8/_crib_x_arm/count 11\nP _wing/8/_crib_y_arm/0 0.0\nP _wing/8/_crib_y_arm/1 0.0\nP _wing/8/_crib_y_arm/10 0.0\nP _wing/8/_crib_y_arm/2 0.0\nP _wing/8/_crib_y_arm/3 0.0\nP _wing/8/_crib_y_arm/4 0.0\nP _wing/8/_crib_y_arm/5 0.0\nP _wing/8/_crib_y_arm/6 0.0\nP _wing/8/_crib_y_arm/7 0.0\nP _wing/8/_crib_y_arm/8 0.0\nP _wing/8/_crib_y_arm/9 0.0\nP _wing/8/_crib_y_arm/count 11\nP _wing/8/_crib_z_arm/0 0.0\nP _wing/8/_crib_z_arm/1 0.0\nP _wing/8/_crib_z_arm/10 0.0\nP _wing/8/_crib_z_arm/2 0.0\nP _wing/8/_crib_z_arm/3 0.0\nP _wing/8/_crib_z_arm/4 0.0\nP _wing/8/_crib_z_arm/5 0.0\nP _wing/8/_crib_z_arm/6 0.0\nP _wing/8/_crib_z_arm/7 0.0\nP _wing/8/_crib_z_arm/8 0.0\nP _wing/8/_crib_z_arm/9 0.0\nP _wing/8/_crib_z_arm/count 11\nP _wing/8/_delta_fac 0.0\nP _wing/8/_dihed_design 0.0\nP _wing/8/_dihed_full_up 180.0\nP _wing/8/_dihed_root_inc 0.0\nP _wing/8/_elev1/0 0\nP _wing/8/_elev1/1 0\nP _wing/8/_elev1/2 0\nP _wing/8/_elev1/3 0\nP _wing/8/_elev1/4 0\nP _wing/8/_elev1/5 0\nP _wing/8/_elev1/6 0\nP _wing/8/_elev1/7 0\nP _wing/8/_elev1/8 0\nP _wing/8/_elev1/9 0\nP _wing/8/_elev1/count 10\nP _wing/8/_elev2/0 0\nP _wing/8/_elev2/1 0\nP _wing/8/_elev2/2 0\nP _wing/8/_elev2/3 0\nP _wing/8/_elev2/4 0\nP _wing/8/_elev2/5 0\nP _wing/8/_elev2/6 0\nP _wing/8/_elev2/7 0\nP _wing/8/_elev2/8 0\nP _wing/8/_elev2/9 0\nP _wing/8/_elev2/count 10\nP _wing/8/_els 8\nP _wing/8/_flap1/0 1\nP _wing/8/_flap1/1 0\nP _wing/8/_flap1/2 0\nP _wing/8/_flap1/3 0\nP _wing/8/_flap1/4 0\nP _wing/8/_flap1/5 0\nP _wing/8/_flap1/6 0\nP _wing/8/_flap1/7 0\nP _wing/8/_flap1/8 0\nP _wing/8/_flap1/9 0\nP _wing/8/_flap1/count 10\nP _wing/8/_flap2/0 0\nP _wing/8/_flap2/1 0\nP _wing/8/_flap2/2 0\nP _wing/8/_flap2/3 0\nP _wing/8/_flap2/4 0\nP _wing/8/_flap2/5 0\nP _wing/8/_flap2/6 0\nP _wing/8/_flap2/7 0\nP _wing/8/_flap2/8 0\nP _wing/8/_flap2/9 0\nP _wing/8/_flap2/count 10\nP _wing/8/_inc_ailn1/0 0\nP _wing/8/_inc_ailn1/1 0\nP _wing/8/_inc_ailn1/2 0\nP _wing/8/_inc_ailn1/3 0\nP _wing/8/_inc_ailn1/4 0\nP _wing/8/_inc_ailn1/5 0\nP _wing/8/_inc_ailn1/6 0\nP _wing/8/_inc_ailn1/7 0\nP _wing/8/_inc_ailn1/8 0\nP _wing/8/_inc_ailn1/9 0\nP _wing/8/_inc_ailn1/count 10\nP _wing/8/_inc_ailn2/0 0\nP _wing/8/_inc_ailn2/1 0\nP _wing/8/_inc_ailn2/2 0\nP _wing/8/_inc_ailn2/3 0\nP _wing/8/_inc_ailn2/4 0\nP _wing/8/_inc_ailn2/5 0\nP _wing/8/_inc_ailn2/6 0\nP _wing/8/_inc_ailn2/7 0\nP _wing/8/_inc_ailn2/8 0\nP _wing/8/_inc_ailn2/9 0\nP _wing/8/_inc_ailn2/count 10\nP _wing/8/_inc_elev1/0 0\nP _wing/8/_inc_elev1/1 0\nP _wing/8/_inc_elev1/2 0\nP _wing/8/_inc_elev1/3 0\nP _wing/8/_inc_elev1/4 0\nP _wing/8/_inc_elev1/5 0\nP _wing/8/_inc_elev1/6 0\nP _wing/8/_inc_elev1/7 0\nP _wing/8/_inc_elev1/8 0\nP _wing/8/_inc_elev1/9 0\nP _wing/8/_inc_elev1/count 10\nP _wing/8/_inc_elev2/0 0\nP _wing/8/_inc_elev2/1 0\nP _wing/8/_inc_elev2/2 0\nP _wing/8/_inc_elev2/3 0\nP _wing/8/_inc_elev2/4 0\nP _wing/8/_inc_elev2/5 0\nP _wing/8/_inc_elev2/6 0\nP _wing/8/_inc_elev2/7 0\nP _wing/8/_inc_elev2/8 0\nP _wing/8/_inc_elev2/9 0\nP _wing/8/_inc_elev2/count 10\nP _wing/8/_inc_incid/0 0.0\nP _wing/8/_inc_incid/1 0.0\nP _wing/8/_inc_incid/2 0.0\nP _wing/8/_inc_incid/3 0.0\nP _wing/8/_inc_incid/4 0.0\nP _wing/8/_inc_incid/5 0.0\nP _wing/8/_inc_incid/6 0.0\nP _wing/8/_inc_incid/7 0.0\nP _wing/8/_inc_incid/8 0.0\nP _wing/8/_inc_incid/9 0.0\nP _wing/8/_inc_incid/count 10\nP _wing/8/_inc_rudd1/0 0\nP _wing/8/_inc_rudd1/1 0\nP _wing/8/_inc_rudd1/2 0\nP _wing/8/_inc_rudd1/3 0\nP _wing/8/_inc_rudd1/4 0\nP _wing/8/_inc_rudd1/5 0\nP _wing/8/_inc_rudd1/6 0\nP _wing/8/_inc_rudd1/7 0\nP _wing/8/_inc_rudd1/8 0\nP _wing/8/_inc_rudd1/9 0\nP _wing/8/_inc_rudd1/count 10\nP _wing/8/_inc_rudd2/0 0\nP _wing/8/_inc_rudd2/1 0\nP _wing/8/_inc_rudd2/2 0\nP _wing/8/_inc_rudd2/3 0\nP _wing/8/_inc_rudd2/4 0\nP _wing/8/_inc_rudd2/5 0\nP _wing/8/_inc_rudd2/6 0\nP _wing/8/_inc_rudd2/7 0\nP _wing/8/_inc_rudd2/8 0\nP _wing/8/_inc_rudd2/9 0\nP _wing/8/_inc_rudd2/count 10\nP _wing/8/_inc_trim/0 0\nP _wing/8/_inc_trim/1 0\nP _wing/8/_inc_trim/2 0\nP _wing/8/_inc_trim/3 0\nP _wing/8/_inc_trim/4 0\nP _wing/8/_inc_trim/5 0\nP _wing/8/_inc_trim/6 0\nP _wing/8/_inc_trim/7 0\nP _wing/8/_inc_trim/8 0\nP _wing/8/_inc_trim/9 0\nP _wing/8/_inc_trim/count 10\nP _wing/8/_inc_vect/0 0\nP _wing/8/_inc_vect/1 0\nP _wing/8/_inc_vect/2 0\nP _wing/8/_inc_vect/3 0\nP _wing/8/_inc_vect/4 0\nP _wing/8/_inc_vect/5 0\nP _wing/8/_inc_vect/6 0\nP _wing/8/_inc_vect/7 0\nP _wing/8/_inc_vect/8 0\nP _wing/8/_inc_vect/9 0\nP _wing/8/_inc_vect/count 10\nP _wing/8/_incid_chrd_inc 0.0\nP _wing/8/_incid_full_up 90.0\nP _wing/8/_incidence/0 0.0\nP _wing/8/_incidence/1 0.0\nP _wing/8/_incidence/2 0.0\nP _wing/8/_incidence/3 0.0\nP _wing/8/_incidence/4 0.0\nP _wing/8/_incidence/5 0.0\nP _wing/8/_incidence/6 0.0\nP _wing/8/_incidence/7 0.0\nP _wing/8/_incidence/8 0.0\nP _wing/8/_incidence/9 0.0\nP _wing/8/_incidence/count 10\nP _wing/8/_is_right_mult -1.0\nP _wing/8/_oswalds_e 0.0\nP _wing/8/_retract_max 1.0\nP _wing/8/_retract_now 0.0\nP _wing/8/_rudd1/0 0\nP _wing/8/_rudd1/1 0\nP _wing/8/_rudd1/2 0\nP _wing/8/_rudd1/3 0\nP _wing/8/_rudd1/4 0\nP _wing/8/_rudd1/5 0\nP _wing/8/_rudd1/6 0\nP _wing/8/_rudd1/7 0\nP _wing/8/_rudd1/8 0\nP _wing/8/_rudd1/9 0\nP _wing/8/_rudd1/count 10\nP _wing/8/_rudd2/0 0\nP _wing/8/_rudd2/1 0\nP _wing/8/_rudd2/2 0\nP _wing/8/_rudd2/3 0\nP _wing/8/_rudd2/4 0\nP _wing/8/_rudd2/5 0\nP _wing/8/_rudd2/6 0\nP _wing/8/_rudd2/7 0\nP _wing/8/_rudd2/8 0\nP _wing/8/_rudd2/9 0\nP _wing/8/_rudd2/count 10\nP _wing/8/_sbrk1/0 0\nP _wing/8/_sbrk1/1 0\nP _wing/8/_sbrk1/2 0\nP _wing/8/_sbrk1/3 0\nP _wing/8/_sbrk1/4 0\nP _wing/8/_sbrk1/5 0\nP _wing/8/_sbrk1/6 0\nP _wing/8/_sbrk1/7 0\nP _wing/8/_sbrk1/8 0\nP _wing/8/_sbrk1/9 0\nP _wing/8/_sbrk1/count 10\nP _wing/8/_sbrk2/0 0\nP _wing/8/_sbrk2/1 0\nP _wing/8/_sbrk2/2 0\nP _wing/8/_sbrk2/3 0\nP _wing/8/_sbrk2/4 0\nP _wing/8/_sbrk2/5 0\nP _wing/8/_sbrk2/6 0\nP _wing/8/_sbrk2/7 0\nP _wing/8/_sbrk2/8 0\nP _wing/8/_sbrk2/9 0\nP _wing/8/_sbrk2/count 10\nP _wing/8/_semilen_JND 0.0\nP _wing/8/_semilen_SEG 52.493438721\nP _wing/8/_sla1_effect 0.0\nP _wing/8/_sla2_effect 0.0\nP _wing/8/_slat1/0 0\nP _wing/8/_slat1/1 0\nP _wing/8/_slat1/2 0\nP _wing/8/_slat1/3 0\nP _wing/8/_slat1/4 0\nP _wing/8/_slat1/5 0\nP _wing/8/_slat1/6 0\nP _wing/8/_slat1/7 0\nP _wing/8/_slat1/8 0\nP _wing/8/_slat1/9 0\nP _wing/8/_slat1/count 10\nP _wing/8/_slat2/0 0\nP _wing/8/_slat2/1 0\nP _wing/8/_slat2/2 0\nP _wing/8/_slat2/3 0\nP _wing/8/_slat2/4 0\nP _wing/8/_slat2/5 0\nP _wing/8/_slat2/6 0\nP _wing/8/_slat2/7 0\nP _wing/8/_slat2/8 0\nP _wing/8/_slat2/9 0\nP _wing/8/_slat2/count 10\nP _wing/8/_spoi1/0 0\nP _wing/8/_spoi1/1 0\nP _wing/8/_spoi1/2 0\nP _wing/8/_spoi1/3 0\nP _wing/8/_spoi1/4 0\nP _wing/8/_spoi1/5 0\nP _wing/8/_spoi1/6 0\nP _wing/8/_spoi1/7 0\nP _wing/8/_spoi1/8 0\nP _wing/8/_spoi1/9 0\nP _wing/8/_spoi1/count 10\nP _wing/8/_spoi2/0 0\nP _wing/8/_spoi2/1 0\nP _wing/8/_spoi2/2 0\nP _wing/8/_spoi2/3 0\nP _wing/8/_spoi2/4 0\nP _wing/8/_spoi2/5 0\nP _wing/8/_spoi2/6 0\nP _wing/8/_spoi2/7 0\nP _wing/8/_spoi2/8 0\nP _wing/8/_spoi2/9 0\nP _wing/8/_spoi2/count 10\nP _wing/8/_sweep_design 0.0\nP _wing/8/_sweep_full_aft 90.0\nP _wing/8/_sweep_root_inc 0.0\nP _wing/8/_var_dihed 1\nP _wing/8/_var_incid 1\nP _wing/8/_var_retract 0\nP _wing/8/_var_sweep 1\nP _wing/8/_yawbr/0 0\nP _wing/8/_yawbr/1 0\nP _wing/8/_yawbr/2 0\nP _wing/8/_yawbr/3 0\nP _wing/8/_yawbr/4 0\nP _wing/8/_yawbr/5 0\nP _wing/8/_yawbr/6 0\nP _wing/8/_yawbr/7 0\nP _wing/8/_yawbr/8 0\nP _wing/8/_yawbr/9 0\nP _wing/8/_yawbr/count 10\nP _wing/9/_AR_geo 0.0\nP _wing/9/_Croot 3.280839920\nP _wing/9/_Ctip 3.280839920\nP _wing/9/_TR_geo 0.0\nP _wing/9/_afl_file_R0 NACA 2412 (popular).afl\nP _wing/9/_afl_file_R1 NACA 2412 (popular).afl\nP _wing/9/_afl_file_T0 NACA 2412 (popular).afl\nP _wing/9/_afl_file_T1 NACA 2412 (popular).afl\nP _wing/9/_ailn1/0 0\nP _wing/9/_ailn1/1 0\nP _wing/9/_ailn1/2 0\nP _wing/9/_ailn1/3 0\nP _wing/9/_ailn1/4 0\nP _wing/9/_ailn1/5 0\nP _wing/9/_ailn1/6 1\nP _wing/9/_ailn1/7 1\nP _wing/9/_ailn1/8 0\nP _wing/9/_ailn1/9 0\nP _wing/9/_ailn1/count 10\nP _wing/9/_ailn2/0 0\nP _wing/9/_ailn2/1 0\nP _wing/9/_ailn2/2 0\nP _wing/9/_ailn2/3 0\nP _wing/9/_ailn2/4 0\nP _wing/9/_ailn2/5 0\nP _wing/9/_ailn2/6 0\nP _wing/9/_ailn2/7 0\nP _wing/9/_ailn2/8 0\nP _wing/9/_ailn2/9 0\nP _wing/9/_ailn2/count 10\nP _wing/9/_average_mac 0.0\nP _wing/9/_base_wash_subsonic 0.0\nP _wing/9/_base_wash_supersonic 0.0\nP _wing/9/_c_off_for_RIB/0 0.0\nP _wing/9/_c_off_for_RIB/1 0.0\nP _wing/9/_c_off_for_RIB/10 0.0\nP _wing/9/_c_off_for_RIB/2 0.0\nP _wing/9/_c_off_for_RIB/3 0.0\nP _wing/9/_c_off_for_RIB/4 0.0\nP _wing/9/_c_off_for_RIB/5 0.0\nP _wing/9/_c_off_for_RIB/6 0.0\nP _wing/9/_c_off_for_RIB/7 0.0\nP _wing/9/_c_off_for_RIB/8 0.0\nP _wing/9/_c_off_for_RIB/9 0.0\nP _wing/9/_c_off_for_RIB/count 11\nP _wing/9/_c_rat_for_RIB/0 1.0\nP _wing/9/_c_rat_for_RIB/1 1.0\nP _wing/9/_c_rat_for_RIB/10 1.0\nP _wing/9/_c_rat_for_RIB/2 1.0\nP _wing/9/_c_rat_for_RIB/3 1.0\nP _wing/9/_c_rat_for_RIB/4 1.0\nP _wing/9/_c_rat_for_RIB/5 1.0\nP _wing/9/_c_rat_for_RIB/6 1.0\nP _wing/9/_c_rat_for_RIB/7 1.0\nP _wing/9/_c_rat_for_RIB/8 1.0\nP _wing/9/_c_rat_for_RIB/9 1.0\nP _wing/9/_c_rat_for_RIB/count 11\nP _wing/9/_chord_for_RIB/0 3.280839920\nP _wing/9/_chord_for_RIB/1 3.280839920\nP _wing/9/_chord_for_RIB/10 0.0\nP _wing/9/_chord_for_RIB/2 3.280839920\nP _wing/9/_chord_for_RIB/3 3.280839920\nP _wing/9/_chord_for_RIB/4 3.280839920\nP _wing/9/_chord_for_RIB/5 3.280839920\nP _wing/9/_chord_for_RIB/6 3.280839920\nP _wing/9/_chord_for_RIB/7 3.280839920\nP _wing/9/_chord_for_RIB/8 3.280839920\nP _wing/9/_chord_for_RIB/9 0.0\nP _wing/9/_chord_for_RIB/count 11\nP _wing/9/_chord_piv 0.250000000\nP _wing/9/_crib_x_arm/0 0.0\nP _wing/9/_crib_x_arm/1 6.561679840\nP _wing/9/_crib_x_arm/10 0.0\nP _wing/9/_crib_x_arm/2 13.123359680\nP _wing/9/_crib_x_arm/3 19.685039520\nP _wing/9/_crib_x_arm/4 26.246719360\nP _wing/9/_crib_x_arm/5 32.808399200\nP _wing/9/_crib_x_arm/6 39.370079041\nP _wing/9/_crib_x_arm/7 45.931758881\nP _wing/9/_crib_x_arm/8 52.493438721\nP _wing/9/_crib_x_arm/9 0.0\nP _wing/9/_crib_x_arm/count 11\nP _wing/9/_crib_y_arm/0 0.0\nP _wing/9/_crib_y_arm/1 0.0\nP _wing/9/_crib_y_arm/10 0.0\nP _wing/9/_crib_y_arm/2 0.0\nP _wing/9/_crib_y_arm/3 0.0\nP _wing/9/_crib_y_arm/4 0.0\nP _wing/9/_crib_y_arm/5 0.0\nP _wing/9/_crib_y_arm/6 0.0\nP _wing/9/_crib_y_arm/7 0.0\nP _wing/9/_crib_y_arm/8 0.0\nP _wing/9/_crib_y_arm/9 0.0\nP _wing/9/_crib_y_arm/count 11\nP _wing/9/_crib_z_arm/0 0.0\nP _wing/9/_crib_z_arm/1 0.0\nP _wing/9/_crib_z_arm/10 0.0\nP _wing/9/_crib_z_arm/2 0.0\nP _wing/9/_crib_z_arm/3 0.0\nP _wing/9/_crib_z_arm/4 0.0\nP _wing/9/_crib_z_arm/5 0.0\nP _wing/9/_crib_z_arm/6 0.0\nP _wing/9/_crib_z_arm/7 0.0\nP _wing/9/_crib_z_arm/8 0.0\nP _wing/9/_crib_z_arm/9 0.0\nP _wing/9/_crib_z_arm/count 11\nP _wing/9/_delta_fac 0.0\nP _wing/9/_dihed_design 0.0\nP _wing/9/_dihed_full_up 180.0\nP _wing/9/_dihed_root_inc 0.0\nP _wing/9/_elev1/0 0\nP _wing/9/_elev1/1 0\nP _wing/9/_elev1/2 0\nP _wing/9/_elev1/3 0\nP _wing/9/_elev1/4 0\nP _wing/9/_elev1/5 0\nP _wing/9/_elev1/6 0\nP _wing/9/_elev1/7 0\nP _wing/9/_elev1/8 0\nP _wing/9/_elev1/9 0\nP _wing/9/_elev1/count 10\nP _wing/9/_elev2/0 0\nP _wing/9/_elev2/1 0\nP _wing/9/_elev2/2 0\nP _wing/9/_elev2/3 0\nP _wing/9/_elev2/4 0\nP _wing/9/_elev2/5 0\nP _wing/9/_elev2/6 0\nP _wing/9/_elev2/7 0\nP _wing/9/_elev2/8 0\nP _wing/9/_elev2/9 0\nP _wing/9/_elev2/count 10\nP _wing/9/_els 8\nP _wing/9/_flap1/0 1\nP _wing/9/_flap1/1 0\nP _wing/9/_flap1/2 0\nP _wing/9/_flap1/3 0\nP _wing/9/_flap1/4 0\nP _wing/9/_flap1/5 0\nP _wing/9/_flap1/6 0\nP _wing/9/_flap1/7 0\nP _wing/9/_flap1/8 0\nP _wing/9/_flap1/9 0\nP _wing/9/_flap1/count 10\nP _wing/9/_flap2/0 0\nP _wing/9/_flap2/1 0\nP _wing/9/_flap2/2 0\nP _wing/9/_flap2/3 0\nP _wing/9/_flap2/4 0\nP _wing/9/_flap2/5 0\nP _wing/9/_flap2/6 0\nP _wing/9/_flap2/7 0\nP _wing/9/_flap2/8 0\nP _wing/9/_flap2/9 0\nP _wing/9/_flap2/count 10\nP _wing/9/_inc_ailn1/0 0\nP _wing/9/_inc_ailn1/1 0\nP _wing/9/_inc_ailn1/2 0\nP _wing/9/_inc_ailn1/3 0\nP _wing/9/_inc_ailn1/4 0\nP _wing/9/_inc_ailn1/5 0\nP _wing/9/_inc_ailn1/6 0\nP _wing/9/_inc_ailn1/7 0\nP _wing/9/_inc_ailn1/8 0\nP _wing/9/_inc_ailn1/9 0\nP _wing/9/_inc_ailn1/count 10\nP _wing/9/_inc_ailn2/0 0\nP _wing/9/_inc_ailn2/1 0\nP _wing/9/_inc_ailn2/2 0\nP _wing/9/_inc_ailn2/3 0\nP _wing/9/_inc_ailn2/4 0\nP _wing/9/_inc_ailn2/5 0\nP _wing/9/_inc_ailn2/6 0\nP _wing/9/_inc_ailn2/7 0\nP _wing/9/_inc_ailn2/8 0\nP _wing/9/_inc_ailn2/9 0\nP _wing/9/_inc_ailn2/count 10\nP _wing/9/_inc_elev1/0 0\nP _wing/9/_inc_elev1/1 0\nP _wing/9/_inc_elev1/2 0\nP _wing/9/_inc_elev1/3 0\nP _wing/9/_inc_elev1/4 0\nP _wing/9/_inc_elev1/5 0\nP _wing/9/_inc_elev1/6 0\nP _wing/9/_inc_elev1/7 0\nP _wing/9/_inc_elev1/8 0\nP _wing/9/_inc_elev1/9 0\nP _wing/9/_inc_elev1/count 10\nP _wing/9/_inc_elev2/0 0\nP _wing/9/_inc_elev2/1 0\nP _wing/9/_inc_elev2/2 0\nP _wing/9/_inc_elev2/3 0\nP _wing/9/_inc_elev2/4 0\nP _wing/9/_inc_elev2/5 0\nP _wing/9/_inc_elev2/6 0\nP _wing/9/_inc_elev2/7 0\nP _wing/9/_inc_elev2/8 0\nP _wing/9/_inc_elev2/9 0\nP _wing/9/_inc_elev2/count 10\nP _wing/9/_inc_incid/0 0.0\nP _wing/9/_inc_incid/1 0.0\nP _wing/9/_inc_incid/2 0.0\nP _wing/9/_inc_incid/3 0.0\nP _wing/9/_inc_incid/4 0.0\nP _wing/9/_inc_incid/5 0.0\nP _wing/9/_inc_incid/6 0.0\nP _wing/9/_inc_incid/7 0.0\nP _wing/9/_inc_incid/8 0.0\nP _wing/9/_inc_incid/9 0.0\nP _wing/9/_inc_incid/count 10\nP _wing/9/_inc_rudd1/0 0\nP _wing/9/_inc_rudd1/1 0\nP _wing/9/_inc_rudd1/2 0\nP _wing/9/_inc_rudd1/3 0\nP _wing/9/_inc_rudd1/4 0\nP _wing/9/_inc_rudd1/5 0\nP _wing/9/_inc_rudd1/6 0\nP _wing/9/_inc_rudd1/7 0\nP _wing/9/_inc_rudd1/8 0\nP _wing/9/_inc_rudd1/9 0\nP _wing/9/_inc_rudd1/count 10\nP _wing/9/_inc_rudd2/0 0\nP _wing/9/_inc_rudd2/1 0\nP _wing/9/_inc_rudd2/2 0\nP _wing/9/_inc_rudd2/3 0\nP _wing/9/_inc_rudd2/4 0\nP _wing/9/_inc_rudd2/5 0\nP _wing/9/_inc_rudd2/6 0\nP _wing/9/_inc_rudd2/7 0\nP _wing/9/_inc_rudd2/8 0\nP _wing/9/_inc_rudd2/9 0\nP _wing/9/_inc_rudd2/count 10\nP _wing/9/_inc_trim/0 0\nP _wing/9/_inc_trim/1 0\nP _wing/9/_inc_trim/2 0\nP _wing/9/_inc_trim/3 0\nP _wing/9/_inc_trim/4 0\nP _wing/9/_inc_trim/5 0\nP _wing/9/_inc_trim/6 0\nP _wing/9/_inc_trim/7 0\nP _wing/9/_inc_trim/8 0\nP _wing/9/_inc_trim/9 0\nP _wing/9/_inc_trim/count 10\nP _wing/9/_inc_vect/0 0\nP _wing/9/_inc_vect/1 0\nP _wing/9/_inc_vect/2 0\nP _wing/9/_inc_vect/3 0\nP _wing/9/_inc_vect/4 0\nP _wing/9/_inc_vect/5 0\nP _wing/9/_inc_vect/6 0\nP _wing/9/_inc_vect/7 0\nP _wing/9/_inc_vect/8 0\nP _wing/9/_inc_vect/9 0\nP _wing/9/_inc_vect/count 10\nP _wing/9/_incid_chrd_inc 0.0\nP _wing/9/_incid_full_up 90.0\nP _wing/9/_incidence/0 0.0\nP _wing/9/_incidence/1 0.0\nP _wing/9/_incidence/2 0.0\nP _wing/9/_incidence/3 0.0\nP _wing/9/_incidence/4 0.0\nP _wing/9/_incidence/5 0.0\nP _wing/9/_incidence/6 0.0\nP _wing/9/_incidence/7 0.0\nP _wing/9/_incidence/8 0.0\nP _wing/9/_incidence/9 0.0\nP _wing/9/_incidence/count 10\nP _wing/9/_is_right_mult 1.0\nP _wing/9/_oswalds_e 0.0\nP _wing/9/_retract_max 1.0\nP _wing/9/_retract_now 0.0\nP _wing/9/_rudd1/0 0\nP _wing/9/_rudd1/1 0\nP _wing/9/_rudd1/2 0\nP _wing/9/_rudd1/3 0\nP _wing/9/_rudd1/4 0\nP _wing/9/_rudd1/5 0\nP _wing/9/_rudd1/6 0\nP _wing/9/_rudd1/7 0\nP _wing/9/_rudd1/8 0\nP _wing/9/_rudd1/9 0\nP _wing/9/_rudd1/count 10\nP _wing/9/_rudd2/0 0\nP _wing/9/_rudd2/1 0\nP _wing/9/_rudd2/2 0\nP _wing/9/_rudd2/3 0\nP _wing/9/_rudd2/4 0\nP _wing/9/_rudd2/5 0\nP _wing/9/_rudd2/6 0\nP _wing/9/_rudd2/7 0\nP _wing/9/_rudd2/8 0\nP _wing/9/_rudd2/9 0\nP _wing/9/_rudd2/count 10\nP _wing/9/_sbrk1/0 0\nP _wing/9/_sbrk1/1 0\nP _wing/9/_sbrk1/2 0\nP _wing/9/_sbrk1/3 0\nP _wing/9/_sbrk1/4 0\nP _wing/9/_sbrk1/5 0\nP _wing/9/_sbrk1/6 0\nP _wing/9/_sbrk1/7 0\nP _wing/9/_sbrk1/8 0\nP _wing/9/_sbrk1/9 0\nP _wing/9/_sbrk1/count 10\nP _wing/9/_sbrk2/0 0\nP _wing/9/_sbrk2/1 0\nP _wing/9/_sbrk2/2 0\nP _wing/9/_sbrk2/3 0\nP _wing/9/_sbrk2/4 0\nP _wing/9/_sbrk2/5 0\nP _wing/9/_sbrk2/6 0\nP _wing/9/_sbrk2/7 0\nP _wing/9/_sbrk2/8 0\nP _wing/9/_sbrk2/9 0\nP _wing/9/_sbrk2/count 10\nP _wing/9/_semilen_JND 0.0\nP _wing/9/_semilen_SEG 52.493438721\nP _wing/9/_sla1_effect 0.0\nP _wing/9/_sla2_effect 0.0\nP _wing/9/_slat1/0 0\nP _wing/9/_slat1/1 0\nP _wing/9/_slat1/2 0\nP _wing/9/_slat1/3 0\nP _wing/9/_slat1/4 0\nP _wing/9/_slat1/5 0\nP _wing/9/_slat1/6 0\nP _wing/9/_slat1/7 0\nP _wing/9/_slat1/8 0\nP _wing/9/_slat1/9 0\nP _wing/9/_slat1/count 10\nP _wing/9/_slat2/0 0\nP _wing/9/_slat2/1 0\nP _wing/9/_slat2/2 0\nP _wing/9/_slat2/3 0\nP _wing/9/_slat2/4 0\nP _wing/9/_slat2/5 0\nP _wing/9/_slat2/6 0\nP _wing/9/_slat2/7 0\nP _wing/9/_slat2/8 0\nP _wing/9/_slat2/9 0\nP _wing/9/_slat2/count 10\nP _wing/9/_spoi1/0 0\nP _wing/9/_spoi1/1 0\nP _wing/9/_spoi1/2 0\nP _wing/9/_spoi1/3 0\nP _wing/9/_spoi1/4 0\nP _wing/9/_spoi1/5 0\nP _wing/9/_spoi1/6 0\nP _wing/9/_spoi1/7 0\nP _wing/9/_spoi1/8 0\nP _wing/9/_spoi1/9 0\nP _wing/9/_spoi1/count 10\nP _wing/9/_spoi2/0 0\nP _wing/9/_spoi2/1 0\nP _wing/9/_spoi2/2 0\nP _wing/9/_spoi2/3 0\nP _wing/9/_spoi2/4 0\nP _wing/9/_spoi2/5 0\nP _wing/9/_spoi2/6 0\nP _wing/9/_spoi2/7 0\nP _wing/9/_spoi2/8 0\nP _wing/9/_spoi2/9 0\nP _wing/9/_spoi2/count 10\nP _wing/9/_sweep_design 0.0\nP _wing/9/_sweep_full_aft 90.0\nP _wing/9/_sweep_root_inc 0.0\nP _wing/9/_var_dihed 1\nP _wing/9/_var_incid 1\nP _wing/9/_var_retract 0\nP _wing/9/_var_sweep 1\nP _wing/9/_yawbr/0 0\nP _wing/9/_yawbr/1 0\nP _wing/9/_yawbr/2 0\nP _wing/9/_yawbr/3 0\nP _wing/9/_yawbr/4 0\nP _wing/9/_yawbr/5 0\nP _wing/9/_yawbr/6 0\nP _wing/9/_yawbr/7 0\nP _wing/9/_yawbr/8 0\nP _wing/9/_yawbr/9 0\nP _wing/9/_yawbr/count 10\nP _wing/count 56\nP _wpna/count 24\nP acf/_AShi_G_k 0.0\nP acf/_AShi_Gdot_k 0.0\nP acf/_AShi_alpha_k 0.0\nP acf/_AShi_alphadot_k 0.0\nP acf/_AShi_beta_k 0.0\nP acf/_AShi_betadot_k 0.0\nP acf/_AShi_hdng_rat 1.0\nP acf/_AShi_max_G 0.0\nP acf/_AShi_max_alpha 0.0\nP acf/_AShi_max_beta 0.0\nP acf/_AShi_max_phidot 0.0\nP acf/_AShi_phi_V 1.0\nP acf/_AShi_phidot_k 0.0\nP acf/_AShi_psi_V 1.0\nP acf/_AShi_ptch_rat 1.0\nP acf/_AShi_roll_rat 1.0\nP acf/_AShi_the_V 1.0\nP acf/_ASlo_hdng_rat 1.0\nP acf/_ASlo_max_phi 0.0\nP acf/_ASlo_max_phidot 0.0\nP acf/_ASlo_max_psidot 0.0\nP acf/_ASlo_max_the 0.0\nP acf/_ASlo_max_thedot 0.0\nP acf/_ASlo_phi_V 0.0\nP acf/_ASlo_phi_k 0.0\nP acf/_ASlo_phidot_k 0.0\nP acf/_ASlo_psi_V 0.0\nP acf/_ASlo_psidot_k 0.0\nP acf/_ASlo_ptch_rat 1.0\nP acf/_ASlo_roll_rat 1.0\nP acf/_ASlo_the_V 0.0\nP acf/_ASlo_the_k 0.0\nP acf/_ASlo_thedot_k 0.0\nP acf/_B_ref 0.0\nP acf/_CHT_is_C 1\nP acf/_C_ref 0.0\nP acf/_EGT_is_C 0\nP acf/_Gneg 0.0\nP acf/_Gpos 99.900001526\nP acf/_HUD_del_x 240.0\nP acf/_HUD_del_y 120.0\nP acf/_ITT_is_C 1\nP acf/_Jxx_unitmass 0.0\nP acf/_Jyy_unitmass 0.0\nP acf/_Jzz_unitmass 0.0\nP acf/_Mmo 0.0\nP acf/_RSC_idlespeed_ENGN 0.0\nP acf/_RSC_maxgreen_ENGN 1.0\nP acf/_RSC_mingov_ENGN 0.0\nP acf/_RSC_mingreen_ENGN 0.0\nP acf/_RSC_redline_ENGN 1.0\nP acf/_SFC_ROC 9.970000267\nP acf/_SFC_alt_hi_JET 0.0\nP acf/_SFC_alt_hi_PRP 0.0\nP acf/_SFC_alt_lo_JET 0.0\nP acf/_SFC_alt_lo_PRP 0.0\nP acf/_SFC_full_hi_JET 0.550000012\nP acf/_SFC_full_hi_PRP 0.439999998\nP acf/_SFC_full_lo_JET 0.550000012\nP acf/_SFC_full_lo_PRP 0.439999998\nP acf/_SFC_half_hi_JET 0.550000012\nP acf/_SFC_half_hi_PRP 0.439999998\nP acf/_SFC_half_lo_JET 0.550000012\nP acf/_SFC_half_lo_PRP 0.439999998\nP acf/_S_ref 0.0\nP acf/_TOGA_discos_servos 0\nP acf/_TRQ_is_pcnt 0\nP acf/_V_ref_ms 0.0\nP acf/_Vfe1_kts 999.0\nP acf/_Vfem_kts 0.0\nP acf/_Vle_kts 99999.0\nP acf/_Vmca_kts 0.0\nP acf/_Vne_kts 400.0\nP acf/_Vno_kts 0.0\nP acf/_Vs_kts 0.0\nP acf/_Vso_kts 0.0\nP acf/_Vyse_kts 0.0\nP acf/_add_def_exceeds_base_def 0\nP acf/_additonal_gear_flatplate 0.0\nP acf/_ailn1_cratR 0.500000000\nP acf/_ailn1_cratT 0.500000000\nP acf/_ailn1_dn 90.0\nP acf/_ailn1_flaps 0.0\nP acf/_ailn1_pitch 0.0\nP acf/_ailn1_rat1 1.0\nP acf/_ailn1_rat2 1.0\nP acf/_ailn1_up 90.0\nP acf/_ailn1_v1 0.0\nP acf/_ailn1_v2 0.0\nP acf/_ailn2_cratR 0.0\nP acf/_ailn2_cratT 0.0\nP acf/_ailn2_dn 0.0\nP acf/_ailn2_flaps 0.0\nP acf/_ailn2_pitch 0.0\nP acf/_ailn2_rat1 1.0\nP acf/_ailn2_rat2 1.0\nP acf/_ailn2_up 0.0\nP acf/_ailn2_v1 0.0\nP acf/_ailn2_v2 0.0\nP acf/_ailn_def_time 0.0\nP acf/_ailn_dn_trim 5.0\nP acf/_ailn_tab 0.0\nP acf/_ailn_trim_time 20.0\nP acf/_ailn_up_trim 5.0\nP acf/_air_refuel/0 0.0\nP acf/_air_refuel/1 0.0\nP acf/_air_refuel/2 0.0\nP acf/_air_refuel/count 3\nP acf/_alt_always_armed 0\nP acf/_alt_hard_locked_on_cws 0\nP acf/_alta_x_ctr 0.0\nP acf/_anchor_xyz_acf/0 0.0\nP acf/_anchor_xyz_acf/1 0.0\nP acf/_anchor_xyz_acf/2 0.0\nP acf/_anchor_xyz_acf/count 3\nP acf/_ann_triggers_caution/0 0\nP acf/_ann_triggers_caution/1 0\nP acf/_ann_triggers_caution/10 0\nP acf/_ann_triggers_caution/100 0\nP acf/_ann_triggers_caution/101 0\nP acf/_ann_triggers_caution/102 0\nP acf/_ann_triggers_caution/103 0\nP acf/_ann_triggers_caution/104 0\nP acf/_ann_triggers_caution/105 0\nP acf/_ann_triggers_caution/106 0\nP acf/_ann_triggers_caution/107 0\nP acf/_ann_triggers_caution/108 0\nP acf/_ann_triggers_caution/109 0\nP acf/_ann_triggers_caution/11 0\nP acf/_ann_triggers_caution/110 0\nP acf/_ann_triggers_caution/111 0\nP acf/_ann_triggers_caution/112 0\nP acf/_ann_triggers_caution/113 0\nP acf/_ann_triggers_caution/114 0\nP acf/_ann_triggers_caution/115 0\nP acf/_ann_triggers_caution/116 0\nP acf/_ann_triggers_caution/117 0\nP acf/_ann_triggers_caution/118 0\nP acf/_ann_triggers_caution/119 0\nP acf/_ann_triggers_caution/12 0\nP acf/_ann_triggers_caution/120 0\nP acf/_ann_triggers_caution/121 0\nP acf/_ann_triggers_caution/122 0\nP acf/_ann_triggers_caution/123 0\nP acf/_ann_triggers_caution/124 0\nP acf/_ann_triggers_caution/125 0\nP acf/_ann_triggers_caution/126 0\nP acf/_ann_triggers_caution/127 0\nP acf/_ann_triggers_caution/128 0\nP acf/_ann_triggers_caution/129 0\nP acf/_ann_triggers_caution/13 0\nP acf/_ann_triggers_caution/130 0\nP acf/_ann_triggers_caution/131 0\nP acf/_ann_triggers_caution/132 0\nP acf/_ann_triggers_caution/133 0\nP acf/_ann_triggers_caution/134 0\nP acf/_ann_triggers_caution/135 0\nP acf/_ann_triggers_caution/136 0\nP acf/_ann_triggers_caution/137 0\nP acf/_ann_triggers_caution/138 0\nP acf/_ann_triggers_caution/139 0\nP acf/_ann_triggers_caution/14 0\nP acf/_ann_triggers_caution/140 0\nP acf/_ann_triggers_caution/141 0\nP acf/_ann_triggers_caution/142 0\nP acf/_ann_triggers_caution/143 0\nP acf/_ann_triggers_caution/144 0\nP acf/_ann_triggers_caution/145 0\nP acf/_ann_triggers_caution/146 0\nP acf/_ann_triggers_caution/147 0\nP acf/_ann_triggers_caution/148 0\nP acf/_ann_triggers_caution/149 0\nP acf/_ann_triggers_caution/15 0\nP acf/_ann_triggers_caution/150 0\nP acf/_ann_triggers_caution/151 0\nP acf/_ann_triggers_caution/152 0\nP acf/_ann_triggers_caution/153 0\nP acf/_ann_triggers_caution/154 0\nP acf/_ann_triggers_caution/155 0\nP acf/_ann_triggers_caution/156 0\nP acf/_ann_triggers_caution/157 0\nP acf/_ann_triggers_caution/158 0\nP acf/_ann_triggers_caution/159 0\nP acf/_ann_triggers_caution/16 0\nP acf/_ann_triggers_caution/160 0\nP acf/_ann_triggers_caution/161 0\nP acf/_ann_triggers_caution/162 0\nP acf/_ann_triggers_caution/163 0\nP acf/_ann_triggers_caution/164 0\nP acf/_ann_triggers_caution/165 0\nP acf/_ann_triggers_caution/166 0\nP acf/_ann_triggers_caution/167 0\nP acf/_ann_triggers_caution/168 0\nP acf/_ann_triggers_caution/169 0\nP acf/_ann_triggers_caution/17 0\nP acf/_ann_triggers_caution/170 0\nP acf/_ann_triggers_caution/171 0\nP acf/_ann_triggers_caution/172 0\nP acf/_ann_triggers_caution/173 0\nP acf/_ann_triggers_caution/174 0\nP acf/_ann_triggers_caution/175 0\nP acf/_ann_triggers_caution/176 0\nP acf/_ann_triggers_caution/177 0\nP acf/_ann_triggers_caution/178 0\nP acf/_ann_triggers_caution/179 0\nP acf/_ann_triggers_caution/18 0\nP acf/_ann_triggers_caution/180 0\nP acf/_ann_triggers_caution/181 0\nP acf/_ann_triggers_caution/182 0\nP acf/_ann_triggers_caution/19 0\nP acf/_ann_triggers_caution/2 0\nP acf/_ann_triggers_caution/20 0\nP acf/_ann_triggers_caution/21 0\nP acf/_ann_triggers_caution/22 0\nP acf/_ann_triggers_caution/23 0\nP acf/_ann_triggers_caution/24 0\nP acf/_ann_triggers_caution/25 0\nP acf/_ann_triggers_caution/26 0\nP acf/_ann_triggers_caution/27 0\nP acf/_ann_triggers_caution/28 0\nP acf/_ann_triggers_caution/29 0\nP acf/_ann_triggers_caution/3 0\nP acf/_ann_triggers_caution/30 0\nP acf/_ann_triggers_caution/31 0\nP acf/_ann_triggers_caution/32 0\nP acf/_ann_triggers_caution/33 0\nP acf/_ann_triggers_caution/34 0\nP acf/_ann_triggers_caution/35 0\nP acf/_ann_triggers_caution/36 0\nP acf/_ann_triggers_caution/37 0\nP acf/_ann_triggers_caution/38 0\nP acf/_ann_triggers_caution/39 0\nP acf/_ann_triggers_caution/4 0\nP acf/_ann_triggers_caution/40 0\nP acf/_ann_triggers_caution/41 0\nP acf/_ann_triggers_caution/42 0\nP acf/_ann_triggers_caution/43 0\nP acf/_ann_triggers_caution/44 0\nP acf/_ann_triggers_caution/45 0\nP acf/_ann_triggers_caution/46 0\nP acf/_ann_triggers_caution/47 0\nP acf/_ann_triggers_caution/48 0\nP acf/_ann_triggers_caution/49 0\nP acf/_ann_triggers_caution/5 0\nP acf/_ann_triggers_caution/50 0\nP acf/_ann_triggers_caution/51 0\nP acf/_ann_triggers_caution/52 0\nP acf/_ann_triggers_caution/53 0\nP acf/_ann_triggers_caution/54 0\nP acf/_ann_triggers_caution/55 0\nP acf/_ann_triggers_caution/56 0\nP acf/_ann_triggers_caution/57 0\nP acf/_ann_triggers_caution/58 0\nP acf/_ann_triggers_caution/59 0\nP acf/_ann_triggers_caution/6 0\nP acf/_ann_triggers_caution/60 0\nP acf/_ann_triggers_caution/61 0\nP acf/_ann_triggers_caution/62 0\nP acf/_ann_triggers_caution/63 0\nP acf/_ann_triggers_caution/64 0\nP acf/_ann_triggers_caution/65 0\nP acf/_ann_triggers_caution/66 0\nP acf/_ann_triggers_caution/67 0\nP acf/_ann_triggers_caution/68 0\nP acf/_ann_triggers_caution/69 0\nP acf/_ann_triggers_caution/7 0\nP acf/_ann_triggers_caution/70 0\nP acf/_ann_triggers_caution/71 0\nP acf/_ann_triggers_caution/72 0\nP acf/_ann_triggers_caution/73 0\nP acf/_ann_triggers_caution/74 0\nP acf/_ann_triggers_caution/75 0\nP acf/_ann_triggers_caution/76 0\nP acf/_ann_triggers_caution/77 0\nP acf/_ann_triggers_caution/78 0\nP acf/_ann_triggers_caution/79 0\nP acf/_ann_triggers_caution/8 0\nP acf/_ann_triggers_caution/80 0\nP acf/_ann_triggers_caution/81 0\nP acf/_ann_triggers_caution/82 0\nP acf/_ann_triggers_caution/83 0\nP acf/_ann_triggers_caution/84 0\nP acf/_ann_triggers_caution/85 0\nP acf/_ann_triggers_caution/86 0\nP acf/_ann_triggers_caution/87 0\nP acf/_ann_triggers_caution/88 0\nP acf/_ann_triggers_caution/89 0\nP acf/_ann_triggers_caution/9 0\nP acf/_ann_triggers_caution/90 0\nP acf/_ann_triggers_caution/91 0\nP acf/_ann_triggers_caution/92 0\nP acf/_ann_triggers_caution/93 0\nP acf/_ann_triggers_caution/94 0\nP acf/_ann_triggers_caution/95 0\nP acf/_ann_triggers_caution/96 0\nP acf/_ann_triggers_caution/97 0\nP acf/_ann_triggers_caution/98 0\nP acf/_ann_triggers_caution/99 0\nP acf/_ann_triggers_caution/count 183\nP acf/_ann_triggers_warning/0 0\nP acf/_ann_triggers_warning/1 0\nP acf/_ann_triggers_warning/10 0\nP acf/_ann_triggers_warning/100 0\nP acf/_ann_triggers_warning/101 0\nP acf/_ann_triggers_warning/102 0\nP acf/_ann_triggers_warning/103 0\nP acf/_ann_triggers_warning/104 0\nP acf/_ann_triggers_warning/105 0\nP acf/_ann_triggers_warning/106 0\nP acf/_ann_triggers_warning/107 0\nP acf/_ann_triggers_warning/108 0\nP acf/_ann_triggers_warning/109 0\nP acf/_ann_triggers_warning/11 0\nP acf/_ann_triggers_warning/110 0\nP acf/_ann_triggers_warning/111 0\nP acf/_ann_triggers_warning/112 0\nP acf/_ann_triggers_warning/113 0\nP acf/_ann_triggers_warning/114 0\nP acf/_ann_triggers_warning/115 0\nP acf/_ann_triggers_warning/116 0\nP acf/_ann_triggers_warning/117 0\nP acf/_ann_triggers_warning/118 0\nP acf/_ann_triggers_warning/119 0\nP acf/_ann_triggers_warning/12 0\nP acf/_ann_triggers_warning/120 0\nP acf/_ann_triggers_warning/121 0\nP acf/_ann_triggers_warning/122 0\nP acf/_ann_triggers_warning/123 0\nP acf/_ann_triggers_warning/124 0\nP acf/_ann_triggers_warning/125 0\nP acf/_ann_triggers_warning/126 0\nP acf/_ann_triggers_warning/127 0\nP acf/_ann_triggers_warning/128 0\nP acf/_ann_triggers_warning/129 0\nP acf/_ann_triggers_warning/13 0\nP acf/_ann_triggers_warning/130 0\nP acf/_ann_triggers_warning/131 0\nP acf/_ann_triggers_warning/132 0\nP acf/_ann_triggers_warning/133 0\nP acf/_ann_triggers_warning/134 0\nP acf/_ann_triggers_warning/135 0\nP acf/_ann_triggers_warning/136 0\nP acf/_ann_triggers_warning/137 0\nP acf/_ann_triggers_warning/138 0\nP acf/_ann_triggers_warning/139 0\nP acf/_ann_triggers_warning/14 0\nP acf/_ann_triggers_warning/140 0\nP acf/_ann_triggers_warning/141 0\nP acf/_ann_triggers_warning/142 0\nP acf/_ann_triggers_warning/143 0\nP acf/_ann_triggers_warning/144 0\nP acf/_ann_triggers_warning/145 0\nP acf/_ann_triggers_warning/146 0\nP acf/_ann_triggers_warning/147 0\nP acf/_ann_triggers_warning/148 0\nP acf/_ann_triggers_warning/149 0\nP acf/_ann_triggers_warning/15 0\nP acf/_ann_triggers_warning/150 0\nP acf/_ann_triggers_warning/151 0\nP acf/_ann_triggers_warning/152 0\nP acf/_ann_triggers_warning/153 0\nP acf/_ann_triggers_warning/154 0\nP acf/_ann_triggers_warning/155 0\nP acf/_ann_triggers_warning/156 0\nP acf/_ann_triggers_warning/157 0\nP acf/_ann_triggers_warning/158 0\nP acf/_ann_triggers_warning/159 0\nP acf/_ann_triggers_warning/16 0\nP acf/_ann_triggers_warning/160 0\nP acf/_ann_triggers_warning/161 0\nP acf/_ann_triggers_warning/162 0\nP acf/_ann_triggers_warning/163 0\nP acf/_ann_triggers_warning/164 0\nP acf/_ann_triggers_warning/165 0\nP acf/_ann_triggers_warning/166 0\nP acf/_ann_triggers_warning/167 0\nP acf/_ann_triggers_warning/168 0\nP acf/_ann_triggers_warning/169 0\nP acf/_ann_triggers_warning/17 0\nP acf/_ann_triggers_warning/170 0\nP acf/_ann_triggers_warning/171 0\nP acf/_ann_triggers_warning/172 0\nP acf/_ann_triggers_warning/173 0\nP acf/_ann_triggers_warning/174 0\nP acf/_ann_triggers_warning/175 0\nP acf/_ann_triggers_warning/176 0\nP acf/_ann_triggers_warning/177 0\nP acf/_ann_triggers_warning/178 0\nP acf/_ann_triggers_warning/179 0\nP acf/_ann_triggers_warning/18 0\nP acf/_ann_triggers_warning/180 0\nP acf/_ann_triggers_warning/181 0\nP acf/_ann_triggers_warning/182 0\nP acf/_ann_triggers_warning/19 0\nP acf/_ann_triggers_warning/2 0\nP acf/_ann_triggers_warning/20 0\nP acf/_ann_triggers_warning/21 0\nP acf/_ann_triggers_warning/22 0\nP acf/_ann_triggers_warning/23 0\nP acf/_ann_triggers_warning/24 0\nP acf/_ann_triggers_warning/25 0\nP acf/_ann_triggers_warning/26 0\nP acf/_ann_triggers_warning/27 0\nP acf/_ann_triggers_warning/28 0\nP acf/_ann_triggers_warning/29 0\nP acf/_ann_triggers_warning/3 0\nP acf/_ann_triggers_warning/30 0\nP acf/_ann_triggers_warning/31 0\nP acf/_ann_triggers_warning/32 0\nP acf/_ann_triggers_warning/33 0\nP acf/_ann_triggers_warning/34 0\nP acf/_ann_triggers_warning/35 0\nP acf/_ann_triggers_warning/36 0\nP acf/_ann_triggers_warning/37 0\nP acf/_ann_triggers_warning/38 0\nP acf/_ann_triggers_warning/39 0\nP acf/_ann_triggers_warning/4 0\nP acf/_ann_triggers_warning/40 0\nP acf/_ann_triggers_warning/41 0\nP acf/_ann_triggers_warning/42 0\nP acf/_ann_triggers_warning/43 0\nP acf/_ann_triggers_warning/44 0\nP acf/_ann_triggers_warning/45 0\nP acf/_ann_triggers_warning/46 0\nP acf/_ann_triggers_warning/47 0\nP acf/_ann_triggers_warning/48 0\nP acf/_ann_triggers_warning/49 0\nP acf/_ann_triggers_warning/5 0\nP acf/_ann_triggers_warning/50 0\nP acf/_ann_triggers_warning/51 0\nP acf/_ann_triggers_warning/52 0\nP acf/_ann_triggers_warning/53 0\nP acf/_ann_triggers_warning/54 0\nP acf/_ann_triggers_warning/55 0\nP acf/_ann_triggers_warning/56 0\nP acf/_ann_triggers_warning/57 0\nP acf/_ann_triggers_warning/58 0\nP acf/_ann_triggers_warning/59 0\nP acf/_ann_triggers_warning/6 0\nP acf/_ann_triggers_warning/60 0\nP acf/_ann_triggers_warning/61 0\nP acf/_ann_triggers_warning/62 0\nP acf/_ann_triggers_warning/63 0\nP acf/_ann_triggers_warning/64 0\nP acf/_ann_triggers_warning/65 0\nP acf/_ann_triggers_warning/66 0\nP acf/_ann_triggers_warning/67 0\nP acf/_ann_triggers_warning/68 0\nP acf/_ann_triggers_warning/69 0\nP acf/_ann_triggers_warning/7 0\nP acf/_ann_triggers_warning/70 0\nP acf/_ann_triggers_warning/71 0\nP acf/_ann_triggers_warning/72 0\nP acf/_ann_triggers_warning/73 0\nP acf/_ann_triggers_warning/74 0\nP acf/_ann_triggers_warning/75 0\nP acf/_ann_triggers_warning/76 0\nP acf/_ann_triggers_warning/77 0\nP acf/_ann_triggers_warning/78 0\nP acf/_ann_triggers_warning/79 0\nP acf/_ann_triggers_warning/8 0\nP acf/_ann_triggers_warning/80 0\nP acf/_ann_triggers_warning/81 0\nP acf/_ann_triggers_warning/82 0\nP acf/_ann_triggers_warning/83 0\nP acf/_ann_triggers_warning/84 0\nP acf/_ann_triggers_warning/85 0\nP acf/_ann_triggers_warning/86 0\nP acf/_ann_triggers_warning/87 0\nP acf/_ann_triggers_warning/88 0\nP acf/_ann_triggers_warning/89 0\nP acf/_ann_triggers_warning/9 0\nP acf/_ann_triggers_warning/90 0\nP acf/_ann_triggers_warning/91 0\nP acf/_ann_triggers_warning/92 0\nP acf/_ann_triggers_warning/93 0\nP acf/_ann_triggers_warning/94 0\nP acf/_ann_triggers_warning/95 0\nP acf/_ann_triggers_warning/96 0\nP acf/_ann_triggers_warning/97 0\nP acf/_ann_triggers_warning/98 0\nP acf/_ann_triggers_warning/99 0\nP acf/_ann_triggers_warning/count 183\nP acf/_ann_wav_file/10 alarm.wav\nP acf/_ann_wav_file/100 autopilot_fail.wav\nP acf/_ann_wav_file/101 autopilot_fail.wav\nP acf/_ann_wav_file/102 autopilot_fail.wav\nP acf/_ann_wav_file/103 autopilot_fail.wav\nP acf/_ann_wav_file/104 autopilot_fail.wav\nP acf/_ann_wav_file/105 autopilot_fail.wav\nP acf/_ann_wav_file/106 autopilot_fail.wav\nP acf/_ann_wav_file/107 autopilot_fail.wav\nP acf/_ann_wav_file/108 autopilot_fail.wav\nP acf/_ann_wav_file/117 silence.wav\nP acf/_ann_wav_file/118 silence.wav\nP acf/_ann_wav_file/119 silence.wav\nP acf/_ann_wav_file/120 silence.wav\nP acf/_ann_wav_file/121 silence.wav\nP acf/_ann_wav_file/122 silence.wav\nP acf/_ann_wav_file/123 silence.wav\nP acf/_ann_wav_file/124 silence.wav\nP acf/_ann_wav_file/125 silence.wav\nP acf/_ann_wav_file/126 silence.wav\nP acf/_ann_wav_file/127 silence.wav\nP acf/_ann_wav_file/128 silence.wav\nP acf/_ann_wav_file/129 silence.wav\nP acf/_ann_wav_file/13 silence.wav\nP acf/_ann_wav_file/130 silence.wav\nP acf/_ann_wav_file/131 silence.wav\nP acf/_ann_wav_file/132 silence.wav\nP acf/_ann_wav_file/133 autopilot_disco.wav\nP acf/_ann_wav_file/134 autopilot_disco.wav\nP acf/_ann_wav_file/135 autopilot_disco.wav\nP acf/_ann_wav_file/136 autopilot_disco.wav\nP acf/_ann_wav_file/137 autopilot_disco.wav\nP acf/_ann_wav_file/138 autopilot_disco.wav\nP acf/_ann_wav_file/139 autopilot_disco.wav\nP acf/_ann_wav_file/140 autopilot_disco.wav\nP acf/_ann_wav_file/141 autopilot_fail.wav\nP acf/_ann_wav_file/142 autopilot_fail.wav\nP acf/_ann_wav_file/143 autopilot_fail.wav\nP acf/_ann_wav_file/144 autopilot_fail.wav\nP acf/_ann_wav_file/145 autopilot_fail.wav\nP acf/_ann_wav_file/146 autopilot_fail.wav\nP acf/_ann_wav_file/147 autopilot_fail.wav\nP acf/_ann_wav_file/148 autopilot_fail.wav\nP acf/_ann_wav_file/15 RafaleC  flap.wav\nP acf/_ann_wav_file/16 autopilot_disco.wav\nP acf/_ann_wav_file/166 autopilot_disco.wav\nP acf/_ann_wav_file/167 autopilot_fail.wav\nP acf/_ann_wav_file/168 alarm.wav\nP acf/_ann_wav_file/169 autopilot_fail.wav\nP acf/_ann_wav_file/17 gear.wav\nP acf/_ann_wav_file/170 autopilot_disco.wav\nP acf/_ann_wav_file/171 mute.wav\nP acf/_ann_wav_file/172 mute.wav\nP acf/_ann_wav_file/173 mute.wav\nP acf/_ann_wav_file/174 Eclipse APU.wav\nP acf/_ann_wav_file/175 mute.wav\nP acf/_ann_wav_file/177 autopilot_fail.wav\nP acf/_ann_wav_file/178 mute.wav\nP acf/_ann_wav_file/179 mute.wav\nP acf/_ann_wav_file/18 autopilot_disco.wav\nP acf/_ann_wav_file/180 bankangle.wav\nP acf/_ann_wav_file/181 mute.wav\nP acf/_ann_wav_file/182 mute.wav\nP acf/_ann_wav_file/19 autopilot_disco.wav\nP acf/_ann_wav_file/20 mute.wav\nP acf/_ann_wav_file/21 autopilot_fail.wav\nP acf/_ann_wav_file/22 autopilot_fail.wav\nP acf/_ann_wav_file/23 autopilot_fail.wav\nP acf/_ann_wav_file/24 autopilot_fail.wav\nP acf/_ann_wav_file/25 autopilot_fail.wav\nP acf/_ann_wav_file/26 autopilot_fail.wav\nP acf/_ann_wav_file/27 autopilot_fail.wav\nP acf/_ann_wav_file/28 autopilot_fail.wav\nP acf/_ann_wav_file/29 Warning.wav\nP acf/_ann_wav_file/3 autopilotdisco.wav\nP acf/_ann_wav_file/30 Warning.wav\nP acf/_ann_wav_file/31 Warning.wav\nP acf/_ann_wav_file/32 Warning.wav\nP acf/_ann_wav_file/33 Warning.wav\nP acf/_ann_wav_file/34 Warning.wav\nP acf/_ann_wav_file/35 Warning.wav\nP acf/_ann_wav_file/36 Warning.wav\nP acf/_ann_wav_file/37 autopilot_fail.wav\nP acf/_ann_wav_file/38 autopilot_fail.wav\nP acf/_ann_wav_file/39 autopilot_fail.wav\nP acf/_ann_wav_file/4 alarm.wav\nP acf/_ann_wav_file/40 autopilot_fail.wav\nP acf/_ann_wav_file/41 autopilot_fail.wav\nP acf/_ann_wav_file/42 autopilot_fail.wav\nP acf/_ann_wav_file/43 autopilot_fail.wav\nP acf/_ann_wav_file/44 autopilot_fail.wav\nP acf/_ann_wav_file/45 Warning.wav\nP acf/_ann_wav_file/46 Warning.wav\nP acf/_ann_wav_file/47 Warning.wav\nP acf/_ann_wav_file/48 Warning.wav\nP acf/_ann_wav_file/49 Warning.wav\nP acf/_ann_wav_file/5 Warning.wav\nP acf/_ann_wav_file/50 Warning.wav\nP acf/_ann_wav_file/51 Warning.wav\nP acf/_ann_wav_file/52 Warning.wav\nP acf/_ann_wav_file/53 Warning.wav\nP acf/_ann_wav_file/54 Warning.wav\nP acf/_ann_wav_file/55 Warning.wav\nP acf/_ann_wav_file/56 Warning.wav\nP acf/_ann_wav_file/57 Warning.wav\nP acf/_ann_wav_file/58 Warning.wav\nP acf/_ann_wav_file/59 Warning.wav\nP acf/_ann_wav_file/6 VIGGEN37 avionics.wav\nP acf/_ann_wav_file/60 Warning.wav\nP acf/_ann_wav_file/61 Firebell.wav\nP acf/_ann_wav_file/62 Firebell.wav\nP acf/_ann_wav_file/63 Firebell.wav\nP acf/_ann_wav_file/64 Firebell.wav\nP acf/_ann_wav_file/65 Firebell.wav\nP acf/_ann_wav_file/66 Firebell.wav\nP acf/_ann_wav_file/67 Firebell.wav\nP acf/_ann_wav_file/68 Firebell.wav\nP acf/_ann_wav_file/69 silence.wav\nP acf/_ann_wav_file/7 Warning.wav\nP acf/_ann_wav_file/70 silence.wav\nP acf/_ann_wav_file/71 silence.wav\nP acf/_ann_wav_file/72 silence.wav\nP acf/_ann_wav_file/73 silence.wav\nP acf/_ann_wav_file/74 silence.wav\nP acf/_ann_wav_file/75 silence.wav\nP acf/_ann_wav_file/76 silence.wav\nP acf/_ann_wav_file/77 Warning.wav\nP acf/_ann_wav_file/78 Warning.wav\nP acf/_ann_wav_file/79 Warning.wav\nP acf/_ann_wav_file/8 mute.wav\nP acf/_ann_wav_file/80 Warning.wav\nP acf/_ann_wav_file/81 Warning.wav\nP acf/_ann_wav_file/82 Warning.wav\nP acf/_ann_wav_file/83 Warning.wav\nP acf/_ann_wav_file/84 Warning.wav\nP acf/_ann_wav_file/85 CUSTOM/\nP acf/_ann_wav_file/86 CUSTOM/\nP acf/_ann_wav_file/87 CUSTOM/\nP acf/_ann_wav_file/88 CUSTOM/\nP acf/_ann_wav_file/89 CUSTOM/\nP acf/_ann_wav_file/9 TooLowTerrain.wav\nP acf/_ann_wav_file/90 CUSTOM/\nP acf/_ann_wav_file/91 CUSTOM/\nP acf/_ann_wav_file/92 CUSTOM/\nP acf/_ann_wav_file/93 autopilot_fail.wav\nP acf/_ann_wav_file/94 autopilot_fail.wav\nP acf/_ann_wav_file/95 autopilot_fail.wav\nP acf/_ann_wav_file/96 autopilot_fail.wav\nP acf/_ann_wav_file/97 autopilot_fail.wav\nP acf/_ann_wav_file/98 autopilot_fail.wav\nP acf/_ann_wav_file/99 autopilot_fail.wav\nP acf/_ann_wav_file/count 183\nP acf/_anti_ice_EQ 0\nP acf/_ap_crs_src 0\nP acf/_apt_req_plane 0\nP acf/_arresting_EQ 0\nP acf/_asi_is_kts 1\nP acf/_auto_cowl_flaps_EQ 0\nP acf/_auto_engage_BC_deg 0.0\nP acf/_auto_omega_fire 0.0\nP acf/_auto_omega_idle 0.0\nP acf/_auto_omega_open 0.0\nP acf/_auto_pressurization 0\nP acf/_auto_psi_for_dir_change 180.0\nP acf/_auto_rpm_EQ 0\nP acf/_auto_rpm_with_tvec 0\nP acf/_auto_sync_EQ 0\nP acf/_auto_trim_EQ 0\nP acf/_autoland_dis_req_mtr 1852.0\nP acf/_average_mac_acf 0.0\nP acf/_avionics_EQ 0\nP acf/_bagg_1/0 0.0\nP acf/_bagg_1/1 0.0\nP acf/_bagg_1/2 0.0\nP acf/_bagg_1/count 3\nP acf/_bagg_2/0 0.0\nP acf/_bagg_2/1 0.0\nP acf/_bagg_2/2 0.0\nP acf/_bagg_2/count 3\nP acf/_bagg_3/0 0.0\nP acf/_bagg_3/1 0.0\nP acf/_bagg_3/2 0.0\nP acf/_bagg_3/count 3\nP acf/_bagg_4/0 0.0\nP acf/_bagg_4/1 0.0\nP acf/_bagg_4/2 0.0\nP acf/_bagg_4/count 3\nP acf/_ball_ang_acc_deg_ss 0.0\nP acf/_ball_ang_def_deg 0.0\nP acf/_ball_ang_spd_deg_s 0.0\nP acf/_battery_watt_hr_max 1000.0\nP acf/_beacon_EQ 0\nP acf/_beacon_is_strobe 0\nP acf/_beta_pitch 0.0\nP acf/_beta_prop_EQ 0\nP acf/_blown_flap_cl_inc 0.0\nP acf/_blown_flap_min_engag 0.0\nP acf/_blown_flap_throt_red 0.0\nP acf/_board_1/0 0.0\nP acf/_board_1/1 0.0\nP acf/_board_1/2 0.0\nP acf/_board_1/count 3\nP acf/_board_2/0 0.0\nP acf/_board_2/1 0.0\nP acf/_board_2/2 0.0\nP acf/_board_2/count 3\nP acf/_boost_max_seconds 0.0\nP acf/_boost_ratio 0.0\nP acf/_bouncer_can_float/0 0\nP acf/_bouncer_can_float/1 0\nP acf/_bouncer_can_float/10 0\nP acf/_bouncer_can_float/11 0\nP acf/_bouncer_can_float/12 0\nP acf/_bouncer_can_float/13 0\nP acf/_bouncer_can_float/2 0\nP acf/_bouncer_can_float/3 0\nP acf/_bouncer_can_float/4 0\nP acf/_bouncer_can_float/5 0\nP acf/_bouncer_can_float/6 0\nP acf/_bouncer_can_float/7 0\nP acf/_bouncer_can_float/8 0\nP acf/_bouncer_can_float/9 0\nP acf/_bouncer_can_float/count 14\nP acf/_bouncer_damp_k/0,0 0.0\nP acf/_bouncer_damp_k/0,1 0.0\nP acf/_bouncer_damp_k/0,2 0.0\nP acf/_bouncer_damp_k/1,0 0.0\nP acf/_bouncer_damp_k/1,1 0.0\nP acf/_bouncer_damp_k/1,2 0.0\nP acf/_bouncer_damp_k/10,0 0.0\nP acf/_bouncer_damp_k/10,1 0.0\nP acf/_bouncer_damp_k/10,2 0.0\nP acf/_bouncer_damp_k/11,0 0.0\nP acf/_bouncer_damp_k/11,1 0.0\nP acf/_bouncer_damp_k/11,2 0.0\nP acf/_bouncer_damp_k/12,0 0.0\nP acf/_bouncer_damp_k/12,1 0.0\nP acf/_bouncer_damp_k/12,2 0.0\nP acf/_bouncer_damp_k/13,0 0.0\nP acf/_bouncer_damp_k/13,1 0.0\nP acf/_bouncer_damp_k/13,2 0.0\nP acf/_bouncer_damp_k/2,0 0.0\nP acf/_bouncer_damp_k/2,1 0.0\nP acf/_bouncer_damp_k/2,2 0.0\nP acf/_bouncer_damp_k/3,0 0.0\nP acf/_bouncer_damp_k/3,1 0.0\nP acf/_bouncer_damp_k/3,2 0.0\nP acf/_bouncer_damp_k/4,0 0.0\nP acf/_bouncer_damp_k/4,1 0.0\nP acf/_bouncer_damp_k/4,2 0.0\nP acf/_bouncer_damp_k/5,0 0.0\nP acf/_bouncer_damp_k/5,1 0.0\nP acf/_bouncer_damp_k/5,2 0.0\nP acf/_bouncer_damp_k/6,0 0.0\nP acf/_bouncer_damp_k/6,1 0.0\nP acf/_bouncer_damp_k/6,2 0.0\nP acf/_bouncer_damp_k/7,0 0.0\nP acf/_bouncer_damp_k/7,1 0.0\nP acf/_bouncer_damp_k/7,2 0.0\nP acf/_bouncer_damp_k/8,0 0.0\nP acf/_bouncer_damp_k/8,1 0.0\nP acf/_bouncer_damp_k/8,2 0.0\nP acf/_bouncer_damp_k/9,0 0.0\nP acf/_bouncer_damp_k/9,1 0.0\nP acf/_bouncer_damp_k/9,2 0.0\nP acf/_bouncer_damp_k/i_count 14\nP acf/_bouncer_damp_k/j_count 3\nP acf/_bouncer_exists/0 0\nP acf/_bouncer_exists/1 0\nP acf/_bouncer_exists/10 0\nP acf/_bouncer_exists/11 0\nP acf/_bouncer_exists/12 0\nP acf/_bouncer_exists/13 0\nP acf/_bouncer_exists/2 0\nP acf/_bouncer_exists/3 0\nP acf/_bouncer_exists/4 0\nP acf/_bouncer_exists/5 0\nP acf/_bouncer_exists/6 0\nP acf/_bouncer_exists/7 0\nP acf/_bouncer_exists/8 0\nP acf/_bouncer_exists/9 0\nP acf/_bouncer_exists/count 14\nP acf/_bouncer_pos_limit/0 0.0\nP acf/_bouncer_pos_limit/1 0.0\nP acf/_bouncer_pos_limit/10 0.0\nP acf/_bouncer_pos_limit/11 0.0\nP acf/_bouncer_pos_limit/12 0.0\nP acf/_bouncer_pos_limit/13 0.0\nP acf/_bouncer_pos_limit/2 0.0\nP acf/_bouncer_pos_limit/3 0.0\nP acf/_bouncer_pos_limit/4 0.0\nP acf/_bouncer_pos_limit/5 0.0\nP acf/_bouncer_pos_limit/6 0.0\nP acf/_bouncer_pos_limit/7 0.0\nP acf/_bouncer_pos_limit/8 0.0\nP acf/_bouncer_pos_limit/9 0.0\nP acf/_bouncer_pos_limit/count 14\nP acf/_bouncer_rotor_acc/0 0.0\nP acf/_bouncer_rotor_acc/1 0.0\nP acf/_bouncer_rotor_acc/10 0.0\nP acf/_bouncer_rotor_acc/11 0.0\nP acf/_bouncer_rotor_acc/12 0.0\nP acf/_bouncer_rotor_acc/13 0.0\nP acf/_bouncer_rotor_acc/2 0.0\nP acf/_bouncer_rotor_acc/3 0.0\nP acf/_bouncer_rotor_acc/4 0.0\nP acf/_bouncer_rotor_acc/5 0.0\nP acf/_bouncer_rotor_acc/6 0.0\nP acf/_bouncer_rotor_acc/7 0.0\nP acf/_bouncer_rotor_acc/8 0.0\nP acf/_bouncer_rotor_acc/9 0.0\nP acf/_bouncer_rotor_acc/count 14\nP acf/_bouncer_spring_k/0,0 0.0\nP acf/_bouncer_spring_k/0,1 0.0\nP acf/_bouncer_spring_k/0,2 0.0\nP acf/_bouncer_spring_k/1,0 0.0\nP acf/_bouncer_spring_k/1,1 0.0\nP acf/_bouncer_spring_k/1,2 0.0\nP acf/_bouncer_spring_k/10,0 0.0\nP acf/_bouncer_spring_k/10,1 0.0\nP acf/_bouncer_spring_k/10,2 0.0\nP acf/_bouncer_spring_k/11,0 0.0\nP acf/_bouncer_spring_k/11,1 0.0\nP acf/_bouncer_spring_k/11,2 0.0\nP acf/_bouncer_spring_k/12,0 0.0\nP acf/_bouncer_spring_k/12,1 0.0\nP acf/_bouncer_spring_k/12,2 0.0\nP acf/_bouncer_spring_k/13,0 0.0\nP acf/_bouncer_spring_k/13,1 0.0\nP acf/_bouncer_spring_k/13,2 0.0\nP acf/_bouncer_spring_k/2,0 0.0\nP acf/_bouncer_spring_k/2,1 0.0\nP acf/_bouncer_spring_k/2,2 0.0\nP acf/_bouncer_spring_k/3,0 0.0\nP acf/_bouncer_spring_k/3,1 0.0\nP acf/_bouncer_spring_k/3,2 0.0\nP acf/_bouncer_spring_k/4,0 0.0\nP acf/_bouncer_spring_k/4,1 0.0\nP acf/_bouncer_spring_k/4,2 0.0\nP acf/_bouncer_spring_k/5,0 0.0\nP acf/_bouncer_spring_k/5,1 0.0\nP acf/_bouncer_spring_k/5,2 0.0\nP acf/_bouncer_spring_k/6,0 0.0\nP acf/_bouncer_spring_k/6,1 0.0\nP acf/_bouncer_spring_k/6,2 0.0\nP acf/_bouncer_spring_k/7,0 0.0\nP acf/_bouncer_spring_k/7,1 0.0\nP acf/_bouncer_spring_k/7,2 0.0\nP acf/_bouncer_spring_k/8,0 0.0\nP acf/_bouncer_spring_k/8,1 0.0\nP acf/_bouncer_spring_k/8,2 0.0\nP acf/_bouncer_spring_k/9,0 0.0\nP acf/_bouncer_spring_k/9,1 0.0\nP acf/_bouncer_spring_k/9,2 0.0\nP acf/_bouncer_spring_k/i_count 14\nP acf/_bouncer_spring_k/j_count 3\nP acf/_brake_co 0.750000000\nP acf/_burner_inc 0.0\nP acf/_bus_bat_is_on/0 0\nP acf/_bus_bat_is_on/1 0\nP acf/_bus_bat_is_on/2 0\nP acf/_bus_bat_is_on/3 0\nP acf/_bus_bat_is_on/4 0\nP acf/_bus_bat_is_on/5 0\nP acf/_bus_bat_is_on/6 0\nP acf/_bus_bat_is_on/7 0\nP acf/_bus_bat_is_on/count 8\nP acf/_bus_gen_is_on/0 0\nP acf/_bus_gen_is_on/1 0\nP acf/_bus_gen_is_on/2 0\nP acf/_bus_gen_is_on/3 0\nP acf/_bus_gen_is_on/4 0\nP acf/_bus_gen_is_on/5 0\nP acf/_bus_gen_is_on/6 0\nP acf/_bus_gen_is_on/7 0\nP acf/_bus_gen_is_on/count 8\nP acf/_buses_always_tied 0\nP acf/_bypass_ratio 0.0\nP acf/_camera_fov_zoom 60.0\nP acf/_camera_offset_phi 0.0\nP acf/_camera_offset_psi 0.0\nP acf/_camera_offset_the 0.0\nP acf/_camera_offset_x 0.0\nP acf/_camera_offset_y 0.0\nP acf/_camera_offset_z 0.0\nP acf/_cgY 0.0\nP acf/_cgY_pln_ref 0.0\nP acf/_cgZ 0.0\nP acf/_cgZ_aft 0.0\nP acf/_cgZ_fwd 0.0\nP acf/_cgZ_pln_ref 0.0\nP acf/_cgZ_ref_ft 0.0\nP acf/_chaff_max 0\nP acf/_chute_psi/0 0.0\nP acf/_chute_psi/1 0.0\nP acf/_chute_psi/2 0.0\nP acf/_chute_psi/count 3\nP acf/_chute_s/0 0.0\nP acf/_chute_s/1 0.0\nP acf/_chute_s/2 0.0\nP acf/_chute_s/count 3\nP acf/_chute_the/0 0.0\nP acf/_chute_the/1 0.0\nP acf/_chute_the/2 0.0\nP acf/_chute_the/count 3\nP acf/_chute_x/0 0.0\nP acf/_chute_x/1 0.0\nP acf/_chute_x/2 0.0\nP acf/_chute_x/count 3\nP acf/_chute_y/0 0.0\nP acf/_chute_y/1 0.0\nP acf/_chute_y/2 0.0\nP acf/_chute_y/count 3\nP acf/_chute_z/0 0.0\nP acf/_chute_z/1 0.0\nP acf/_chute_z/2 0.0\nP acf/_chute_z/count 3\nP acf/_cockpit_obj_flags 0\nP acf/_cockpit_planned_vanish_y/0 590.0\nP acf/_cockpit_planned_vanish_y/1 590.0\nP acf/_cockpit_planned_vanish_y/2 590.0\nP acf/_cockpit_planned_vanish_y/3 590.0\nP acf/_cockpit_planned_vanish_y/4 590.0\nP acf/_cockpit_planned_vanish_y/5 590.0\nP acf/_cockpit_planned_vanish_y/6 590.0\nP acf/_cockpit_planned_vanish_y/7 590.0\nP acf/_cockpit_planned_vanish_y/8 590.0\nP acf/_cockpit_planned_vanish_y/count 9\nP acf/_cockpit_type 0\nP acf/_cockpit_xyz/0 0.0\nP acf/_cockpit_xyz/1 0.0\nP acf/_cockpit_xyz/2 0.0\nP acf/_cockpit_xyz/count 3\nP acf/_collective_EQ 0\nP acf/_collective_en 0\nP acf/_con_smooth 1\nP acf/_cowl_x_ctr 0.0\nP acf/_crew_1/0 0.0\nP acf/_crew_1/1 0.0\nP acf/_crew_1/2 0.0\nP acf/_crew_1/count 3\nP acf/_crew_2/0 0.0\nP acf/_crew_2/1 0.0\nP acf/_crew_2/2 0.0\nP acf/_crew_2/count 3\nP acf/_crit_alt_mtr 0.0\nP acf/_cus_dig_dec/0 0\nP acf/_cus_dig_dec/1 0\nP acf/_cus_dig_dec/10 0\nP acf/_cus_dig_dec/11 0\nP acf/_cus_dig_dec/12 0\nP acf/_cus_dig_dec/13 0\nP acf/_cus_dig_dec/14 0\nP acf/_cus_dig_dec/15 0\nP acf/_cus_dig_dec/16 0\nP acf/_cus_dig_dec/17 0\nP acf/_cus_dig_dec/18 0\nP acf/_cus_dig_dec/19 0\nP acf/_cus_dig_dec/2 0\nP acf/_cus_dig_dec/20 0\nP acf/_cus_dig_dec/21 0\nP acf/_cus_dig_dec/22 0\nP acf/_cus_dig_dec/23 0\nP acf/_cus_dig_dec/24 0\nP acf/_cus_dig_dec/25 0\nP acf/_cus_dig_dec/26 0\nP acf/_cus_dig_dec/27 0\nP acf/_cus_dig_dec/28 0\nP acf/_cus_dig_dec/29 0\nP acf/_cus_dig_dec/3 0\nP acf/_cus_dig_dec/30 0\nP acf/_cus_dig_dec/31 0\nP acf/_cus_dig_dec/32 0\nP acf/_cus_dig_dec/33 0\nP acf/_cus_dig_dec/34 0\nP acf/_cus_dig_dec/35 0\nP acf/_cus_dig_dec/36 0\nP acf/_cus_dig_dec/37 0\nP acf/_cus_dig_dec/38 0\nP acf/_cus_dig_dec/39 0\nP acf/_cus_dig_dec/4 0\nP acf/_cus_dig_dec/40 0\nP acf/_cus_dig_dec/41 0\nP acf/_cus_dig_dec/42 0\nP acf/_cus_dig_dec/43 0\nP acf/_cus_dig_dec/44 0\nP acf/_cus_dig_dec/45 0\nP acf/_cus_dig_dec/46 0\nP acf/_cus_dig_dec/47 0\nP acf/_cus_dig_dec/48 0\nP acf/_cus_dig_dec/49 0\nP acf/_cus_dig_dec/5 0\nP acf/_cus_dig_dec/6 0\nP acf/_cus_dig_dec/7 0\nP acf/_cus_dig_dec/8 0\nP acf/_cus_dig_dec/9 0\nP acf/_cus_dig_dec/count 50\nP acf/_cus_dig_dig/0 0\nP acf/_cus_dig_dig/1 0\nP acf/_cus_dig_dig/10 0\nP acf/_cus_dig_dig/11 0\nP acf/_cus_dig_dig/12 0\nP acf/_cus_dig_dig/13 0\nP acf/_cus_dig_dig/14 0\nP acf/_cus_dig_dig/15 0\nP acf/_cus_dig_dig/16 0\nP acf/_cus_dig_dig/17 0\nP acf/_cus_dig_dig/18 0\nP acf/_cus_dig_dig/19 0\nP acf/_cus_dig_dig/2 0\nP acf/_cus_dig_dig/20 0\nP acf/_cus_dig_dig/21 0\nP acf/_cus_dig_dig/22 0\nP acf/_cus_dig_dig/23 0\nP acf/_cus_dig_dig/24 0\nP acf/_cus_dig_dig/25 0\nP acf/_cus_dig_dig/26 0\nP acf/_cus_dig_dig/27 0\nP acf/_cus_dig_dig/28 0\nP acf/_cus_dig_dig/29 0\nP acf/_cus_dig_dig/3 0\nP acf/_cus_dig_dig/30 0\nP acf/_cus_dig_dig/31 0\nP acf/_cus_dig_dig/32 0\nP acf/_cus_dig_dig/33 0\nP acf/_cus_dig_dig/34 0\nP acf/_cus_dig_dig/35 0\nP acf/_cus_dig_dig/36 0\nP acf/_cus_dig_dig/37 0\nP acf/_cus_dig_dig/38 0\nP acf/_cus_dig_dig/39 0\nP acf/_cus_dig_dig/4 0\nP acf/_cus_dig_dig/40 0\nP acf/_cus_dig_dig/41 0\nP acf/_cus_dig_dig/42 0\nP acf/_cus_dig_dig/43 0\nP acf/_cus_dig_dig/44 0\nP acf/_cus_dig_dig/45 0\nP acf/_cus_dig_dig/46 0\nP acf/_cus_dig_dig/47 0\nP acf/_cus_dig_dig/48 0\nP acf/_cus_dig_dig/49 0\nP acf/_cus_dig_dig/5 0\nP acf/_cus_dig_dig/6 0\nP acf/_cus_dig_dig/7 0\nP acf/_cus_dig_dig/8 0\nP acf/_cus_dig_dig/9 0\nP acf/_cus_dig_dig/count 50\nP acf/_cus_dig_offset/0 0.0\nP acf/_cus_dig_offset/1 0.0\nP acf/_cus_dig_offset/10 0.0\nP acf/_cus_dig_offset/11 0.0\nP acf/_cus_dig_offset/12 0.0\nP acf/_cus_dig_offset/13 0.0\nP acf/_cus_dig_offset/14 0.0\nP acf/_cus_dig_offset/15 0.0\nP acf/_cus_dig_offset/16 0.0\nP acf/_cus_dig_offset/17 0.0\nP acf/_cus_dig_offset/18 0.0\nP acf/_cus_dig_offset/19 0.0\nP acf/_cus_dig_offset/2 0.0\nP acf/_cus_dig_offset/20 0.0\nP acf/_cus_dig_offset/21 0.0\nP acf/_cus_dig_offset/22 0.0\nP acf/_cus_dig_offset/23 0.0\nP acf/_cus_dig_offset/24 0.0\nP acf/_cus_dig_offset/25 0.0\nP acf/_cus_dig_offset/26 0.0\nP acf/_cus_dig_offset/27 0.0\nP acf/_cus_dig_offset/28 0.0\nP acf/_cus_dig_offset/29 0.0\nP acf/_cus_dig_offset/3 0.0\nP acf/_cus_dig_offset/30 0.0\nP acf/_cus_dig_offset/31 0.0\nP acf/_cus_dig_offset/32 0.0\nP acf/_cus_dig_offset/33 0.0\nP acf/_cus_dig_offset/34 0.0\nP acf/_cus_dig_offset/35 0.0\nP acf/_cus_dig_offset/36 0.0\nP acf/_cus_dig_offset/37 0.0\nP acf/_cus_dig_offset/38 0.0\nP acf/_cus_dig_offset/39 0.0\nP acf/_cus_dig_offset/4 0.0\nP acf/_cus_dig_offset/40 0.0\nP acf/_cus_dig_offset/41 0.0\nP acf/_cus_dig_offset/42 0.0\nP acf/_cus_dig_offset/43 0.0\nP acf/_cus_dig_offset/44 0.0\nP acf/_cus_dig_offset/45 0.0\nP acf/_cus_dig_offset/46 0.0\nP acf/_cus_dig_offset/47 0.0\nP acf/_cus_dig_offset/48 0.0\nP acf/_cus_dig_offset/49 0.0\nP acf/_cus_dig_offset/5 0.0\nP acf/_cus_dig_offset/6 0.0\nP acf/_cus_dig_offset/7 0.0\nP acf/_cus_dig_offset/8 0.0\nP acf/_cus_dig_offset/9 0.0\nP acf/_cus_dig_offset/count 50\nP acf/_cus_dig_scale/0 0.0\nP acf/_cus_dig_scale/1 0.0\nP acf/_cus_dig_scale/10 0.0\nP acf/_cus_dig_scale/11 0.0\nP acf/_cus_dig_scale/12 0.0\nP acf/_cus_dig_scale/13 0.0\nP acf/_cus_dig_scale/14 0.0\nP acf/_cus_dig_scale/15 0.0\nP acf/_cus_dig_scale/16 0.0\nP acf/_cus_dig_scale/17 0.0\nP acf/_cus_dig_scale/18 0.0\nP acf/_cus_dig_scale/19 0.0\nP acf/_cus_dig_scale/2 0.0\nP acf/_cus_dig_scale/20 0.0\nP acf/_cus_dig_scale/21 0.0\nP acf/_cus_dig_scale/22 0.0\nP acf/_cus_dig_scale/23 0.0\nP acf/_cus_dig_scale/24 0.0\nP acf/_cus_dig_scale/25 0.0\nP acf/_cus_dig_scale/26 0.0\nP acf/_cus_dig_scale/27 0.0\nP acf/_cus_dig_scale/28 0.0\nP acf/_cus_dig_scale/29 0.0\nP acf/_cus_dig_scale/3 0.0\nP acf/_cus_dig_scale/30 0.0\nP acf/_cus_dig_scale/31 0.0\nP acf/_cus_dig_scale/32 0.0\nP acf/_cus_dig_scale/33 0.0\nP acf/_cus_dig_scale/34 0.0\nP acf/_cus_dig_scale/35 0.0\nP acf/_cus_dig_scale/36 0.0\nP acf/_cus_dig_scale/37 0.0\nP acf/_cus_dig_scale/38 0.0\nP acf/_cus_dig_scale/39 0.0\nP acf/_cus_dig_scale/4 0.0\nP acf/_cus_dig_scale/40 0.0\nP acf/_cus_dig_scale/41 0.0\nP acf/_cus_dig_scale/42 0.0\nP acf/_cus_dig_scale/43 0.0\nP acf/_cus_dig_scale/44 0.0\nP acf/_cus_dig_scale/45 0.0\nP acf/_cus_dig_scale/46 0.0\nP acf/_cus_dig_scale/47 0.0\nP acf/_cus_dig_scale/48 0.0\nP acf/_cus_dig_scale/49 0.0\nP acf/_cus_dig_scale/5 0.0\nP acf/_cus_dig_scale/6 0.0\nP acf/_cus_dig_scale/7 0.0\nP acf/_cus_dig_scale/8 0.0\nP acf/_cus_dig_scale/9 0.0\nP acf/_cus_dig_scale/count 50\nP acf/_cus_dig_use/0 0\nP acf/_cus_dig_use/1 0\nP acf/_cus_dig_use/10 0\nP acf/_cus_dig_use/11 0\nP acf/_cus_dig_use/12 0\nP acf/_cus_dig_use/13 0\nP acf/_cus_dig_use/14 0\nP acf/_cus_dig_use/15 0\nP acf/_cus_dig_use/16 0\nP acf/_cus_dig_use/17 0\nP acf/_cus_dig_use/18 0\nP acf/_cus_dig_use/19 0\nP acf/_cus_dig_use/2 0\nP acf/_cus_dig_use/20 0\nP acf/_cus_dig_use/21 0\nP acf/_cus_dig_use/22 0\nP acf/_cus_dig_use/23 0\nP acf/_cus_dig_use/24 0\nP acf/_cus_dig_use/25 0\nP acf/_cus_dig_use/26 0\nP acf/_cus_dig_use/27 0\nP acf/_cus_dig_use/28 0\nP acf/_cus_dig_use/29 0\nP acf/_cus_dig_use/3 0\nP acf/_cus_dig_use/30 0\nP acf/_cus_dig_use/31 0\nP acf/_cus_dig_use/32 0\nP acf/_cus_dig_use/33 0\nP acf/_cus_dig_use/34 0\nP acf/_cus_dig_use/35 0\nP acf/_cus_dig_use/36 0\nP acf/_cus_dig_use/37 0\nP acf/_cus_dig_use/38 0\nP acf/_cus_dig_use/39 0\nP acf/_cus_dig_use/4 0\nP acf/_cus_dig_use/40 0\nP acf/_cus_dig_use/41 0\nP acf/_cus_dig_use/42 0\nP acf/_cus_dig_use/43 0\nP acf/_cus_dig_use/44 0\nP acf/_cus_dig_use/45 0\nP acf/_cus_dig_use/46 0\nP acf/_cus_dig_use/47 0\nP acf/_cus_dig_use/48 0\nP acf/_cus_dig_use/49 0\nP acf/_cus_dig_use/5 0\nP acf/_cus_dig_use/6 0\nP acf/_cus_dig_use/7 0\nP acf/_cus_dig_use/8 0\nP acf/_cus_dig_use/9 0\nP acf/_cus_dig_use/count 50\nP acf/_cus_doub_val/0 0.0\nP acf/_cus_doub_val/1 0.0\nP acf/_cus_doub_val/10 0.0\nP acf/_cus_doub_val/11 0.0\nP acf/_cus_doub_val/12 0.0\nP acf/_cus_doub_val/13 0.0\nP acf/_cus_doub_val/14 0.0\nP acf/_cus_doub_val/15 0.0\nP acf/_cus_doub_val/16 0.0\nP acf/_cus_doub_val/17 0.0\nP acf/_cus_doub_val/18 0.0\nP acf/_cus_doub_val/19 0.0\nP acf/_cus_doub_val/2 0.0\nP acf/_cus_doub_val/20 0.0\nP acf/_cus_doub_val/21 0.0\nP acf/_cus_doub_val/22 0.0\nP acf/_cus_doub_val/23 0.0\nP acf/_cus_doub_val/24 0.0\nP acf/_cus_doub_val/25 0.0\nP acf/_cus_doub_val/26 0.0\nP acf/_cus_doub_val/27 0.0\nP acf/_cus_doub_val/28 0.0\nP acf/_cus_doub_val/29 0.0\nP acf/_cus_doub_val/3 0.0\nP acf/_cus_doub_val/30 0.0\nP acf/_cus_doub_val/31 0.0\nP acf/_cus_doub_val/32 0.0\nP acf/_cus_doub_val/33 0.0\nP acf/_cus_doub_val/34 0.0\nP acf/_cus_doub_val/35 0.0\nP acf/_cus_doub_val/36 0.0\nP acf/_cus_doub_val/37 0.0\nP acf/_cus_doub_val/38 0.0\nP acf/_cus_doub_val/39 0.0\nP acf/_cus_doub_val/4 0.0\nP acf/_cus_doub_val/40 0.0\nP acf/_cus_doub_val/41 0.0\nP acf/_cus_doub_val/42 0.0\nP acf/_cus_doub_val/43 0.0\nP acf/_cus_doub_val/44 0.0\nP acf/_cus_doub_val/45 0.0\nP acf/_cus_doub_val/46 0.0\nP acf/_cus_doub_val/47 0.0\nP acf/_cus_doub_val/48 0.0\nP acf/_cus_doub_val/49 0.0\nP acf/_cus_doub_val/5 0.0\nP acf/_cus_doub_val/6 0.0\nP acf/_cus_doub_val/7 0.0\nP acf/_cus_doub_val/8 0.0\nP acf/_cus_doub_val/9 0.0\nP acf/_cus_doub_val/count 50\nP acf/_cus_non_lin/0 0\nP acf/_cus_non_lin/1 0\nP acf/_cus_non_lin/10 0\nP acf/_cus_non_lin/11 0\nP acf/_cus_non_lin/12 0\nP acf/_cus_non_lin/13 0\nP acf/_cus_non_lin/14 0\nP acf/_cus_non_lin/15 0\nP acf/_cus_non_lin/16 0\nP acf/_cus_non_lin/17 0\nP acf/_cus_non_lin/18 0\nP acf/_cus_non_lin/19 0\nP acf/_cus_non_lin/2 0\nP acf/_cus_non_lin/20 0\nP acf/_cus_non_lin/21 0\nP acf/_cus_non_lin/22 0\nP acf/_cus_non_lin/23 0\nP acf/_cus_non_lin/24 0\nP acf/_cus_non_lin/25 0\nP acf/_cus_non_lin/26 0\nP acf/_cus_non_lin/27 0\nP acf/_cus_non_lin/28 0\nP acf/_cus_non_lin/29 0\nP acf/_cus_non_lin/3 0\nP acf/_cus_non_lin/30 0\nP acf/_cus_non_lin/31 0\nP acf/_cus_non_lin/32 0\nP acf/_cus_non_lin/33 0\nP acf/_cus_non_lin/34 0\nP acf/_cus_non_lin/35 0\nP acf/_cus_non_lin/36 0\nP acf/_cus_non_lin/37 0\nP acf/_cus_non_lin/38 0\nP acf/_cus_non_lin/39 0\nP acf/_cus_non_lin/4 0\nP acf/_cus_non_lin/40 0\nP acf/_cus_non_lin/41 0\nP acf/_cus_non_lin/42 0\nP acf/_cus_non_lin/43 0\nP acf/_cus_non_lin/44 0\nP acf/_cus_non_lin/45 0\nP acf/_cus_non_lin/46 0\nP acf/_cus_non_lin/47 0\nP acf/_cus_non_lin/48 0\nP acf/_cus_non_lin/49 0\nP acf/_cus_non_lin/5 0\nP acf/_cus_non_lin/6 0\nP acf/_cus_non_lin/7 0\nP acf/_cus_non_lin/8 0\nP acf/_cus_non_lin/9 0\nP acf/_cus_non_lin/count 50\nP acf/_cus_rnd_hi_ang/0 360.0\nP acf/_cus_rnd_hi_ang/1 360.0\nP acf/_cus_rnd_hi_ang/10 360.0\nP acf/_cus_rnd_hi_ang/11 360.0\nP acf/_cus_rnd_hi_ang/12 360.0\nP acf/_cus_rnd_hi_ang/13 360.0\nP acf/_cus_rnd_hi_ang/14 360.0\nP acf/_cus_rnd_hi_ang/15 360.0\nP acf/_cus_rnd_hi_ang/16 360.0\nP acf/_cus_rnd_hi_ang/17 360.0\nP acf/_cus_rnd_hi_ang/18 360.0\nP acf/_cus_rnd_hi_ang/19 360.0\nP acf/_cus_rnd_hi_ang/2 360.0\nP acf/_cus_rnd_hi_ang/20 360.0\nP acf/_cus_rnd_hi_ang/21 360.0\nP acf/_cus_rnd_hi_ang/22 360.0\nP acf/_cus_rnd_hi_ang/23 360.0\nP acf/_cus_rnd_hi_ang/24 360.0\nP acf/_cus_rnd_hi_ang/25 360.0\nP acf/_cus_rnd_hi_ang/26 360.0\nP acf/_cus_rnd_hi_ang/27 360.0\nP acf/_cus_rnd_hi_ang/28 360.0\nP acf/_cus_rnd_hi_ang/29 360.0\nP acf/_cus_rnd_hi_ang/3 360.0\nP acf/_cus_rnd_hi_ang/30 360.0\nP acf/_cus_rnd_hi_ang/31 360.0\nP acf/_cus_rnd_hi_ang/32 360.0\nP acf/_cus_rnd_hi_ang/33 360.0\nP acf/_cus_rnd_hi_ang/34 360.0\nP acf/_cus_rnd_hi_ang/35 360.0\nP acf/_cus_rnd_hi_ang/36 360.0\nP acf/_cus_rnd_hi_ang/37 360.0\nP acf/_cus_rnd_hi_ang/38 360.0\nP acf/_cus_rnd_hi_ang/39 360.0\nP acf/_cus_rnd_hi_ang/4 360.0\nP acf/_cus_rnd_hi_ang/40 360.0\nP acf/_cus_rnd_hi_ang/41 360.0\nP acf/_cus_rnd_hi_ang/42 360.0\nP acf/_cus_rnd_hi_ang/43 360.0\nP acf/_cus_rnd_hi_ang/44 360.0\nP acf/_cus_rnd_hi_ang/45 360.0\nP acf/_cus_rnd_hi_ang/46 360.0\nP acf/_cus_rnd_hi_ang/47 360.0\nP acf/_cus_rnd_hi_ang/48 360.0\nP acf/_cus_rnd_hi_ang/49 360.0\nP acf/_cus_rnd_hi_ang/5 360.0\nP acf/_cus_rnd_hi_ang/6 360.0\nP acf/_cus_rnd_hi_ang/7 360.0\nP acf/_cus_rnd_hi_ang/8 360.0\nP acf/_cus_rnd_hi_ang/9 360.0\nP acf/_cus_rnd_hi_ang/count 50\nP acf/_cus_rnd_hi_val/0 1.0\nP acf/_cus_rnd_hi_val/1 1.0\nP acf/_cus_rnd_hi_val/10 1.0\nP acf/_cus_rnd_hi_val/11 1.0\nP acf/_cus_rnd_hi_val/12 1.0\nP acf/_cus_rnd_hi_val/13 1.0\nP acf/_cus_rnd_hi_val/14 1.0\nP acf/_cus_rnd_hi_val/15 1.0\nP acf/_cus_rnd_hi_val/16 1.0\nP acf/_cus_rnd_hi_val/17 1.0\nP acf/_cus_rnd_hi_val/18 1.0\nP acf/_cus_rnd_hi_val/19 1.0\nP acf/_cus_rnd_hi_val/2 1.0\nP acf/_cus_rnd_hi_val/20 1.0\nP acf/_cus_rnd_hi_val/21 1.0\nP acf/_cus_rnd_hi_val/22 1.0\nP acf/_cus_rnd_hi_val/23 1.0\nP acf/_cus_rnd_hi_val/24 1.0\nP acf/_cus_rnd_hi_val/25 1.0\nP acf/_cus_rnd_hi_val/26 1.0\nP acf/_cus_rnd_hi_val/27 1.0\nP acf/_cus_rnd_hi_val/28 1.0\nP acf/_cus_rnd_hi_val/29 1.0\nP acf/_cus_rnd_hi_val/3 1.0\nP acf/_cus_rnd_hi_val/30 1.0\nP acf/_cus_rnd_hi_val/31 1.0\nP acf/_cus_rnd_hi_val/32 1.0\nP acf/_cus_rnd_hi_val/33 1.0\nP acf/_cus_rnd_hi_val/34 1.0\nP acf/_cus_rnd_hi_val/35 1.0\nP acf/_cus_rnd_hi_val/36 1.0\nP acf/_cus_rnd_hi_val/37 1.0\nP acf/_cus_rnd_hi_val/38 1.0\nP acf/_cus_rnd_hi_val/39 1.0\nP acf/_cus_rnd_hi_val/4 1.0\nP acf/_cus_rnd_hi_val/40 1.0\nP acf/_cus_rnd_hi_val/41 1.0\nP acf/_cus_rnd_hi_val/42 1.0\nP acf/_cus_rnd_hi_val/43 1.0\nP acf/_cus_rnd_hi_val/44 1.0\nP acf/_cus_rnd_hi_val/45 1.0\nP acf/_cus_rnd_hi_val/46 1.0\nP acf/_cus_rnd_hi_val/47 1.0\nP acf/_cus_rnd_hi_val/48 1.0\nP acf/_cus_rnd_hi_val/49 1.0\nP acf/_cus_rnd_hi_val/5 1.0\nP acf/_cus_rnd_hi_val/6 1.0\nP acf/_cus_rnd_hi_val/7 1.0\nP acf/_cus_rnd_hi_val/8 1.0\nP acf/_cus_rnd_hi_val/9 1.0\nP acf/_cus_rnd_hi_val/count 50\nP acf/_cus_rnd_label/0 0\nP acf/_cus_rnd_label/1 0\nP acf/_cus_rnd_label/10 0\nP acf/_cus_rnd_label/11 0\nP acf/_cus_rnd_label/12 0\nP acf/_cus_rnd_label/13 0\nP acf/_cus_rnd_label/14 0\nP acf/_cus_rnd_label/15 0\nP acf/_cus_rnd_label/16 0\nP acf/_cus_rnd_label/17 0\nP acf/_cus_rnd_label/18 0\nP acf/_cus_rnd_label/19 0\nP acf/_cus_rnd_label/2 0\nP acf/_cus_rnd_label/20 0\nP acf/_cus_rnd_label/21 0\nP acf/_cus_rnd_label/22 0\nP acf/_cus_rnd_label/23 0\nP acf/_cus_rnd_label/24 0\nP acf/_cus_rnd_label/25 0\nP acf/_cus_rnd_label/26 0\nP acf/_cus_rnd_label/27 0\nP acf/_cus_rnd_label/28 0\nP acf/_cus_rnd_label/29 0\nP acf/_cus_rnd_label/3 0\nP acf/_cus_rnd_label/30 0\nP acf/_cus_rnd_label/31 0\nP acf/_cus_rnd_label/32 0\nP acf/_cus_rnd_label/33 0\nP acf/_cus_rnd_label/34 0\nP acf/_cus_rnd_label/35 0\nP acf/_cus_rnd_label/36 0\nP acf/_cus_rnd_label/37 0\nP acf/_cus_rnd_label/38 0\nP acf/_cus_rnd_label/39 0\nP acf/_cus_rnd_label/4 0\nP acf/_cus_rnd_label/40 0\nP acf/_cus_rnd_label/41 0\nP acf/_cus_rnd_label/42 0\nP acf/_cus_rnd_label/43 0\nP acf/_cus_rnd_label/44 0\nP acf/_cus_rnd_label/45 0\nP acf/_cus_rnd_label/46 0\nP acf/_cus_rnd_label/47 0\nP acf/_cus_rnd_label/48 0\nP acf/_cus_rnd_label/49 0\nP acf/_cus_rnd_label/5 0\nP acf/_cus_rnd_label/6 0\nP acf/_cus_rnd_label/7 0\nP acf/_cus_rnd_label/8 0\nP acf/_cus_rnd_label/9 0\nP acf/_cus_rnd_label/count 50\nP acf/_cus_rnd_lo_ang/0 0.0\nP acf/_cus_rnd_lo_ang/1 0.0\nP acf/_cus_rnd_lo_ang/10 0.0\nP acf/_cus_rnd_lo_ang/11 0.0\nP acf/_cus_rnd_lo_ang/12 0.0\nP acf/_cus_rnd_lo_ang/13 0.0\nP acf/_cus_rnd_lo_ang/14 0.0\nP acf/_cus_rnd_lo_ang/15 0.0\nP acf/_cus_rnd_lo_ang/16 0.0\nP acf/_cus_rnd_lo_ang/17 0.0\nP acf/_cus_rnd_lo_ang/18 0.0\nP acf/_cus_rnd_lo_ang/19 0.0\nP acf/_cus_rnd_lo_ang/2 0.0\nP acf/_cus_rnd_lo_ang/20 0.0\nP acf/_cus_rnd_lo_ang/21 0.0\nP acf/_cus_rnd_lo_ang/22 0.0\nP acf/_cus_rnd_lo_ang/23 0.0\nP acf/_cus_rnd_lo_ang/24 0.0\nP acf/_cus_rnd_lo_ang/25 0.0\nP acf/_cus_rnd_lo_ang/26 0.0\nP acf/_cus_rnd_lo_ang/27 0.0\nP acf/_cus_rnd_lo_ang/28 0.0\nP acf/_cus_rnd_lo_ang/29 0.0\nP acf/_cus_rnd_lo_ang/3 0.0\nP acf/_cus_rnd_lo_ang/30 0.0\nP acf/_cus_rnd_lo_ang/31 0.0\nP acf/_cus_rnd_lo_ang/32 0.0\nP acf/_cus_rnd_lo_ang/33 0.0\nP acf/_cus_rnd_lo_ang/34 0.0\nP acf/_cus_rnd_lo_ang/35 0.0\nP acf/_cus_rnd_lo_ang/36 0.0\nP acf/_cus_rnd_lo_ang/37 0.0\nP acf/_cus_rnd_lo_ang/38 0.0\nP acf/_cus_rnd_lo_ang/39 0.0\nP acf/_cus_rnd_lo_ang/4 0.0\nP acf/_cus_rnd_lo_ang/40 0.0\nP acf/_cus_rnd_lo_ang/41 0.0\nP acf/_cus_rnd_lo_ang/42 0.0\nP acf/_cus_rnd_lo_ang/43 0.0\nP acf/_cus_rnd_lo_ang/44 0.0\nP acf/_cus_rnd_lo_ang/45 0.0\nP acf/_cus_rnd_lo_ang/46 0.0\nP acf/_cus_rnd_lo_ang/47 0.0\nP acf/_cus_rnd_lo_ang/48 0.0\nP acf/_cus_rnd_lo_ang/49 0.0\nP acf/_cus_rnd_lo_ang/5 0.0\nP acf/_cus_rnd_lo_ang/6 0.0\nP acf/_cus_rnd_lo_ang/7 0.0\nP acf/_cus_rnd_lo_ang/8 0.0\nP acf/_cus_rnd_lo_ang/9 0.0\nP acf/_cus_rnd_lo_ang/count 50\nP acf/_cus_rnd_lo_val/0 0.0\nP acf/_cus_rnd_lo_val/1 0.0\nP acf/_cus_rnd_lo_val/10 0.0\nP acf/_cus_rnd_lo_val/11 0.0\nP acf/_cus_rnd_lo_val/12 0.0\nP acf/_cus_rnd_lo_val/13 0.0\nP acf/_cus_rnd_lo_val/14 0.0\nP acf/_cus_rnd_lo_val/15 0.0\nP acf/_cus_rnd_lo_val/16 0.0\nP acf/_cus_rnd_lo_val/17 0.0\nP acf/_cus_rnd_lo_val/18 0.0\nP acf/_cus_rnd_lo_val/19 0.0\nP acf/_cus_rnd_lo_val/2 0.0\nP acf/_cus_rnd_lo_val/20 0.0\nP acf/_cus_rnd_lo_val/21 0.0\nP acf/_cus_rnd_lo_val/22 0.0\nP acf/_cus_rnd_lo_val/23 0.0\nP acf/_cus_rnd_lo_val/24 0.0\nP acf/_cus_rnd_lo_val/25 0.0\nP acf/_cus_rnd_lo_val/26 0.0\nP acf/_cus_rnd_lo_val/27 0.0\nP acf/_cus_rnd_lo_val/28 0.0\nP acf/_cus_rnd_lo_val/29 0.0\nP acf/_cus_rnd_lo_val/3 0.0\nP acf/_cus_rnd_lo_val/30 0.0\nP acf/_cus_rnd_lo_val/31 0.0\nP acf/_cus_rnd_lo_val/32 0.0\nP acf/_cus_rnd_lo_val/33 0.0\nP acf/_cus_rnd_lo_val/34 0.0\nP acf/_cus_rnd_lo_val/35 0.0\nP acf/_cus_rnd_lo_val/36 0.0\nP acf/_cus_rnd_lo_val/37 0.0\nP acf/_cus_rnd_lo_val/38 0.0\nP acf/_cus_rnd_lo_val/39 0.0\nP acf/_cus_rnd_lo_val/4 0.0\nP acf/_cus_rnd_lo_val/40 0.0\nP acf/_cus_rnd_lo_val/41 0.0\nP acf/_cus_rnd_lo_val/42 0.0\nP acf/_cus_rnd_lo_val/43 0.0\nP acf/_cus_rnd_lo_val/44 0.0\nP acf/_cus_rnd_lo_val/45 0.0\nP acf/_cus_rnd_lo_val/46 0.0\nP acf/_cus_rnd_lo_val/47 0.0\nP acf/_cus_rnd_lo_val/48 0.0\nP acf/_cus_rnd_lo_val/49 0.0\nP acf/_cus_rnd_lo_val/5 0.0\nP acf/_cus_rnd_lo_val/6 0.0\nP acf/_cus_rnd_lo_val/7 0.0\nP acf/_cus_rnd_lo_val/8 0.0\nP acf/_cus_rnd_lo_val/9 0.0\nP acf/_cus_rnd_lo_val/count 50\nP acf/_cus_rnd_mirror/0 0\nP acf/_cus_rnd_mirror/1 0\nP acf/_cus_rnd_mirror/10 0\nP acf/_cus_rnd_mirror/11 0\nP acf/_cus_rnd_mirror/12 0\nP acf/_cus_rnd_mirror/13 0\nP acf/_cus_rnd_mirror/14 0\nP acf/_cus_rnd_mirror/15 0\nP acf/_cus_rnd_mirror/16 0\nP acf/_cus_rnd_mirror/17 0\nP acf/_cus_rnd_mirror/18 0\nP acf/_cus_rnd_mirror/19 0\nP acf/_cus_rnd_mirror/2 0\nP acf/_cus_rnd_mirror/20 0\nP acf/_cus_rnd_mirror/21 0\nP acf/_cus_rnd_mirror/22 0\nP acf/_cus_rnd_mirror/23 0\nP acf/_cus_rnd_mirror/24 0\nP acf/_cus_rnd_mirror/25 0\nP acf/_cus_rnd_mirror/26 0\nP acf/_cus_rnd_mirror/27 0\nP acf/_cus_rnd_mirror/28 0\nP acf/_cus_rnd_mirror/29 0\nP acf/_cus_rnd_mirror/3 0\nP acf/_cus_rnd_mirror/30 0\nP acf/_cus_rnd_mirror/31 0\nP acf/_cus_rnd_mirror/32 0\nP acf/_cus_rnd_mirror/33 0\nP acf/_cus_rnd_mirror/34 0\nP acf/_cus_rnd_mirror/35 0\nP acf/_cus_rnd_mirror/36 0\nP acf/_cus_rnd_mirror/37 0\nP acf/_cus_rnd_mirror/38 0\nP acf/_cus_rnd_mirror/39 0\nP acf/_cus_rnd_mirror/4 0\nP acf/_cus_rnd_mirror/40 0\nP acf/_cus_rnd_mirror/41 0\nP acf/_cus_rnd_mirror/42 0\nP acf/_cus_rnd_mirror/43 0\nP acf/_cus_rnd_mirror/44 0\nP acf/_cus_rnd_mirror/45 0\nP acf/_cus_rnd_mirror/46 0\nP acf/_cus_rnd_mirror/47 0\nP acf/_cus_rnd_mirror/48 0\nP acf/_cus_rnd_mirror/49 0\nP acf/_cus_rnd_mirror/5 0\nP acf/_cus_rnd_mirror/6 0\nP acf/_cus_rnd_mirror/7 0\nP acf/_cus_rnd_mirror/8 0\nP acf/_cus_rnd_mirror/9 0\nP acf/_cus_rnd_mirror/count 50\nP acf/_cus_rnd_use/0 0\nP acf/_cus_rnd_use/1 0\nP acf/_cus_rnd_use/10 0\nP acf/_cus_rnd_use/11 0\nP acf/_cus_rnd_use/12 0\nP acf/_cus_rnd_use/13 0\nP acf/_cus_rnd_use/14 0\nP acf/_cus_rnd_use/15 0\nP acf/_cus_rnd_use/16 0\nP acf/_cus_rnd_use/17 0\nP acf/_cus_rnd_use/18 0\nP acf/_cus_rnd_use/19 0\nP acf/_cus_rnd_use/2 0\nP acf/_cus_rnd_use/20 0\nP acf/_cus_rnd_use/21 0\nP acf/_cus_rnd_use/22 0\nP acf/_cus_rnd_use/23 0\nP acf/_cus_rnd_use/24 0\nP acf/_cus_rnd_use/25 0\nP acf/_cus_rnd_use/26 0\nP acf/_cus_rnd_use/27 0\nP acf/_cus_rnd_use/28 0\nP acf/_cus_rnd_use/29 0\nP acf/_cus_rnd_use/3 0\nP acf/_cus_rnd_use/30 0\nP acf/_cus_rnd_use/31 0\nP acf/_cus_rnd_use/32 0\nP acf/_cus_rnd_use/33 0\nP acf/_cus_rnd_use/34 0\nP acf/_cus_rnd_use/35 0\nP acf/_cus_rnd_use/36 0\nP acf/_cus_rnd_use/37 0\nP acf/_cus_rnd_use/38 0\nP acf/_cus_rnd_use/39 0\nP acf/_cus_rnd_use/4 0\nP acf/_cus_rnd_use/40 0\nP acf/_cus_rnd_use/41 0\nP acf/_cus_rnd_use/42 0\nP acf/_cus_rnd_use/43 0\nP acf/_cus_rnd_use/44 0\nP acf/_cus_rnd_use/45 0\nP acf/_cus_rnd_use/46 0\nP acf/_cus_rnd_use/47 0\nP acf/_cus_rnd_use/48 0\nP acf/_cus_rnd_use/49 0\nP acf/_cus_rnd_use/5 0\nP acf/_cus_rnd_use/6 0\nP acf/_cus_rnd_use/7 0\nP acf/_cus_rnd_use/8 0\nP acf/_cus_rnd_use/9 0\nP acf/_cus_rnd_use/count 50\nP acf/_custom_autopilot 0\nP acf/_custom_govnr 0\nP acf/_cyclic_def_ailn 0.0\nP acf/_cyclic_def_elev 0.0\nP acf/_cyclic_dn_trim_rat 0.0\nP acf/_cyclic_lf_trim_rat 0.0\nP acf/_cyclic_rt_trim_rat 0.0\nP acf/_cyclic_up_trim_rat 0.0\nP acf/_deg_psi_per_deg_def 1.0\nP acf/_deg_the_per_deg_def 6.0\nP acf/_delta3 0.0\nP acf/_diff_coll_with_hdng 0.0\nP acf/_diff_coll_with_ptch 0.0\nP acf/_diff_coll_with_roll 0.0\nP acf/_diff_collective 0.0\nP acf/_diff_cycl_with_hdng_lat 0.0\nP acf/_diff_cycl_with_hdng_lon 0.0\nP acf/_diff_thro_hdng 0.0\nP acf/_diff_thro_ptch 0.0\nP acf/_diff_thro_roll 0.0\nP acf/_disp_rat 0.0\nP acf/_dump_altitude 0.0\nP acf/_dump_press_below_1k 0\nP acf/_elec_drive_eta 0.0\nP acf/_elec_fuelP 30.0\nP acf/_elec_regen_eta 0.0\nP acf/_elev1_cratR 0.250000000\nP acf/_elev1_cratT 0.250000000\nP acf/_elev1_dn 90.0\nP acf/_elev1_rat1 1.0\nP acf/_elev1_rat2 1.0\nP acf/_elev1_up 90.0\nP acf/_elev1_v1 0.0\nP acf/_elev1_v2 0.0\nP acf/_elev2_cratR 0.0\nP acf/_elev2_cratT 0.0\nP acf/_elev2_dn 0.0\nP acf/_elev2_rat1 1.0\nP acf/_elev2_rat2 1.0\nP acf/_elev2_up 0.0\nP acf/_elev2_v1 0.0\nP acf/_elev2_v2 0.0\nP acf/_elev_def_time 0.0\nP acf/_elev_dn_trim 5.0\nP acf/_elev_tab 0.0\nP acf/_elev_trim_time 20.0\nP acf/_elev_up_trim 10.0\nP acf/_elev_with_flap_rat 0.0\nP acf/_engine_pwr_rat_from_crit_alt 0.0\nP acf/_enter_beta_at_idle_EQ 0\nP acf/_esys_amperage/110 0.0\nP acf/_esys_amperage/112 0.0\nP acf/_esys_amperage/115 0.0\nP acf/_esys_amperage/116 0.0\nP acf/_esys_amperage/117 0.0\nP acf/_esys_amperage/120 0.0\nP acf/_esys_amperage/124 0.0\nP acf/_esys_amperage/125 0.0\nP acf/_esys_amperage/126 0.0\nP acf/_esys_amperage/127 0.0\nP acf/_esys_amperage/128 0.0\nP acf/_esys_amperage/129 0.0\nP acf/_esys_amperage/130 0.0\nP acf/_esys_amperage/131 0.0\nP acf/_esys_amperage/150 0.0\nP acf/_esys_amperage/151 0.0\nP acf/_esys_amperage/152 0.0\nP acf/_esys_amperage/153 0.0\nP acf/_esys_amperage/154 0.0\nP acf/_esys_amperage/155 0.0\nP acf/_esys_amperage/156 0.0\nP acf/_esys_amperage/157 0.0\nP acf/_esys_amperage/158 0.0\nP acf/_esys_amperage/159 0.0\nP acf/_esys_amperage/160 0.0\nP acf/_esys_amperage/161 0.0\nP acf/_esys_amperage/162 0.0\nP acf/_esys_amperage/163 0.0\nP acf/_esys_amperage/164 0.0\nP acf/_esys_amperage/165 0.0\nP acf/_esys_amperage/166 0.0\nP acf/_esys_amperage/197 0.0\nP acf/_esys_amperage/198 0.0\nP acf/_esys_amperage/199 0.0\nP acf/_esys_amperage/200 0.0\nP acf/_esys_amperage/201 0.0\nP acf/_esys_amperage/204 0.0\nP acf/_esys_amperage/30 0.0\nP acf/_esys_amperage/31 0.0\nP acf/_esys_amperage/32 0.0\nP acf/_esys_amperage/33 0.0\nP acf/_esys_amperage/34 0.0\nP acf/_esys_amperage/35 0.0\nP acf/_esys_amperage/36 0.0\nP acf/_esys_amperage/37 0.0\nP acf/_esys_amperage/38 0.0\nP acf/_esys_amperage/492 0.0\nP acf/_esys_amperage/493 0.0\nP acf/_esys_amperage/51 0.0\nP acf/_esys_amperage/52 0.0\nP acf/_esys_amperage/53 0.0\nP acf/_esys_amperage/54 0.0\nP acf/_esys_amperage/56 0.0\nP acf/_esys_amperage/57 0.0\nP acf/_esys_amperage/58 0.0\nP acf/_esys_amperage/59 0.0\nP acf/_esys_amperage/60 0.0\nP acf/_esys_amperage/61 0.0\nP acf/_esys_amperage/62 0.0\nP acf/_esys_amperage/66 0.0\nP acf/_esys_amperage/67 0.0\nP acf/_esys_amperage/74 0.0\nP acf/_esys_amperage/75 0.0\nP acf/_esys_amperage/76 0.0\nP acf/_esys_amperage/80 0.0\nP acf/_esys_amperage/81 0.0\nP acf/_esys_amperage/88 0.0\nP acf/_esys_amperage/rel_AOA 0.0\nP acf/_esys_amperage/rel_HVAC 0.0\nP acf/_esys_amperage/rel_adc_comp 0.0\nP acf/_esys_amperage/rel_adf1 0.0\nP acf/_esys_amperage/rel_adf2 0.0\nP acf/_esys_amperage/rel_ail_trim 0.0\nP acf/_esys_amperage/rel_auto_comp 0.0\nP acf/_esys_amperage/rel_auto_servos 0.0\nP acf/_esys_amperage/rel_bus0 0.0\nP acf/_esys_amperage/rel_bus1 0.0\nP acf/_esys_amperage/rel_bus2 0.0\nP acf/_esys_amperage/rel_bus3 0.0\nP acf/_esys_amperage/rel_bus4 0.0\nP acf/_esys_amperage/rel_bus5 0.0\nP acf/_esys_amperage/rel_dice_AOA_heat_0 0.0\nP acf/_esys_amperage/rel_dice_AOA_heat_1 0.0\nP acf/_esys_amperage/rel_dice_all 0.0\nP acf/_esys_amperage/rel_dice_alt_air_a_0 0.0\nP acf/_esys_amperage/rel_dice_alt_air_a_1 0.0\nP acf/_esys_amperage/rel_dice_brake_heat 0.0\nP acf/_esys_amperage/rel_dice_detect 0.0\nP acf/_esys_amperage/rel_dice_pitot_heat_0 0.0\nP acf/_esys_amperage/rel_dice_pitot_heat_1 0.0\nP acf/_esys_amperage/rel_dice_stat_heat_0 0.0\nP acf/_esys_amperage/rel_dice_stat_heat_1 0.0\nP acf/_esys_amperage/rel_dice_window_heat 0.0\nP acf/_esys_amperage/rel_dice_wing_heat_0 0.0\nP acf/_esys_amperage/rel_dice_wing_heat_1 0.0\nP acf/_esys_amperage/rel_dme 0.0\nP acf/_esys_amperage/rel_efis_1 0.0\nP acf/_esys_amperage/rel_efis_2 0.0\nP acf/_esys_amperage/rel_ele_fp0 0.0\nP acf/_esys_amperage/rel_ele_fp1 0.0\nP acf/_esys_amperage/rel_ele_fp2 0.0\nP acf/_esys_amperage/rel_ele_fp3 0.0\nP acf/_esys_amperage/rel_ele_fp4 0.0\nP acf/_esys_amperage/rel_ele_fp5 0.0\nP acf/_esys_amperage/rel_ele_fp6 0.0\nP acf/_esys_amperage/rel_ele_fp7 0.0\nP acf/_esys_amperage/rel_elv_trim 0.0\nP acf/_esys_amperage/rel_engn_sync 0.0\nP acf/_esys_amperage/rel_flap_act 0.0\nP acf/_esys_amperage/rel_g_AHRS 0.0\nP acf/_esys_amperage/rel_g_gea 0.0\nP acf/_esys_amperage/rel_g_gia1 0.0\nP acf/_esys_amperage/rel_g_gia2 0.0\nP acf/_esys_amperage/rel_g_magmtr 0.0\nP acf/_esys_amperage/rel_gear_act 0.0\nP acf/_esys_amperage/rel_gen_avio 0.0\nP acf/_esys_amperage/rel_gen_esys 0.0\nP acf/_esys_amperage/rel_gps1 0.0\nP acf/_esys_amperage/rel_gps2 0.0\nP acf/_esys_amperage/rel_heatIN0 0.0\nP acf/_esys_amperage/rel_heatIN1 0.0\nP acf/_esys_amperage/rel_heatIN2 0.0\nP acf/_esys_amperage/rel_heatIN3 0.0\nP acf/_esys_amperage/rel_heatIN4 0.0\nP acf/_esys_amperage/rel_heatIN5 0.0\nP acf/_esys_amperage/rel_heatIN6 0.0\nP acf/_esys_amperage/rel_heatIN7 0.0\nP acf/_esys_amperage/rel_heatPR0 0.0\nP acf/_esys_amperage/rel_heatPR1 0.0\nP acf/_esys_amperage/rel_heatPR2 0.0\nP acf/_esys_amperage/rel_heatPR3 0.0\nP acf/_esys_amperage/rel_heatPR4 0.0\nP acf/_esys_amperage/rel_heatPR5 0.0\nP acf/_esys_amperage/rel_heatPR6 0.0\nP acf/_esys_amperage/rel_heatPR7 0.0\nP acf/_esys_amperage/rel_inverter0 0.0\nP acf/_esys_amperage/rel_inverter1 0.0\nP acf/_esys_amperage/rel_lites_beac 0.0\nP acf/_esys_amperage/rel_lites_hud 0.0\nP acf/_esys_amperage/rel_lites_ins 0.0\nP acf/_esys_amperage/rel_lites_land 0.0\nP acf/_esys_amperage/rel_lites_nav 0.0\nP acf/_esys_amperage/rel_lites_pan 0.0\nP acf/_esys_amperage/rel_lites_strobe 0.0\nP acf/_esys_amperage/rel_lites_taxi 0.0\nP acf/_esys_amperage/rel_marker 0.0\nP acf/_esys_amperage/rel_navcom1 0.0\nP acf/_esys_amperage/rel_navcom2 0.0\nP acf/_esys_amperage/rel_rud_trim 0.0\nP acf/_esys_amperage/rel_servo_thro 0.0\nP acf/_esys_amperage/rel_slats 0.0\nP acf/_esys_amperage/rel_stab_aug 0.0\nP acf/_esys_amperage/rel_stall_warn 0.0\nP acf/_esys_amperage/rel_startr0 0.0\nP acf/_esys_amperage/rel_startr1 0.0\nP acf/_esys_amperage/rel_startr2 0.0\nP acf/_esys_amperage/rel_startr3 0.0\nP acf/_esys_amperage/rel_startr4 0.0\nP acf/_esys_amperage/rel_startr5 0.0\nP acf/_esys_amperage/rel_startr6 0.0\nP acf/_esys_amperage/rel_startr7 0.0\nP acf/_esys_amperage/rel_xpndr 0.0\nP acf/_esys_amperage/rel_yaw_damp 0.0\nP acf/_esys_bus_bit_add/110 0\nP acf/_esys_bus_bit_add/112 0\nP acf/_esys_bus_bit_add/115 0\nP acf/_esys_bus_bit_add/116 0\nP acf/_esys_bus_bit_add/117 0\nP acf/_esys_bus_bit_add/120 0\nP acf/_esys_bus_bit_add/124 0\nP acf/_esys_bus_bit_add/125 0\nP acf/_esys_bus_bit_add/126 0\nP acf/_esys_bus_bit_add/127 0\nP acf/_esys_bus_bit_add/128 0\nP acf/_esys_bus_bit_add/129 0\nP acf/_esys_bus_bit_add/130 0\nP acf/_esys_bus_bit_add/131 0\nP acf/_esys_bus_bit_add/150 0\nP acf/_esys_bus_bit_add/151 0\nP acf/_esys_bus_bit_add/152 0\nP acf/_esys_bus_bit_add/153 0\nP acf/_esys_bus_bit_add/154 0\nP acf/_esys_bus_bit_add/155 0\nP acf/_esys_bus_bit_add/156 0\nP acf/_esys_bus_bit_add/157 0\nP acf/_esys_bus_bit_add/158 0\nP acf/_esys_bus_bit_add/159 0\nP acf/_esys_bus_bit_add/160 0\nP acf/_esys_bus_bit_add/161 0\nP acf/_esys_bus_bit_add/162 0\nP acf/_esys_bus_bit_add/163 0\nP acf/_esys_bus_bit_add/164 0\nP acf/_esys_bus_bit_add/165 0\nP acf/_esys_bus_bit_add/166 0\nP acf/_esys_bus_bit_add/197 0\nP acf/_esys_bus_bit_add/198 0\nP acf/_esys_bus_bit_add/199 0\nP acf/_esys_bus_bit_add/200 0\nP acf/_esys_bus_bit_add/201 0\nP acf/_esys_bus_bit_add/204 0\nP acf/_esys_bus_bit_add/30 1\nP acf/_esys_bus_bit_add/31 2\nP acf/_esys_bus_bit_add/32 0\nP acf/_esys_bus_bit_add/33 0\nP acf/_esys_bus_bit_add/34 0\nP acf/_esys_bus_bit_add/35 0\nP acf/_esys_bus_bit_add/36 0\nP acf/_esys_bus_bit_add/37 0\nP acf/_esys_bus_bit_add/38 0\nP acf/_esys_bus_bit_add/492 0\nP acf/_esys_bus_bit_add/493 0\nP acf/_esys_bus_bit_add/51 0\nP acf/_esys_bus_bit_add/52 0\nP acf/_esys_bus_bit_add/53 0\nP acf/_esys_bus_bit_add/54 0\nP acf/_esys_bus_bit_add/56 0\nP acf/_esys_bus_bit_add/57 0\nP acf/_esys_bus_bit_add/58 0\nP acf/_esys_bus_bit_add/59 0\nP acf/_esys_bus_bit_add/60 0\nP acf/_esys_bus_bit_add/61 0\nP acf/_esys_bus_bit_add/62 0\nP acf/_esys_bus_bit_add/66 0\nP acf/_esys_bus_bit_add/67 0\nP acf/_esys_bus_bit_add/74 0\nP acf/_esys_bus_bit_add/75 0\nP acf/_esys_bus_bit_add/76 0\nP acf/_esys_bus_bit_add/80 0\nP acf/_esys_bus_bit_add/81 0\nP acf/_esys_bus_bit_add/88 0\nP acf/_esys_bus_bit_add/rel_AOA 0\nP acf/_esys_bus_bit_add/rel_HVAC 0\nP acf/_esys_bus_bit_add/rel_adc_comp 0\nP acf/_esys_bus_bit_add/rel_adf1 0\nP acf/_esys_bus_bit_add/rel_adf2 0\nP acf/_esys_bus_bit_add/rel_ail_trim 0\nP acf/_esys_bus_bit_add/rel_auto_comp 0\nP acf/_esys_bus_bit_add/rel_auto_servos 0\nP acf/_esys_bus_bit_add/rel_bus0 1\nP acf/_esys_bus_bit_add/rel_bus1 2\nP acf/_esys_bus_bit_add/rel_bus2 0\nP acf/_esys_bus_bit_add/rel_bus3 0\nP acf/_esys_bus_bit_add/rel_bus4 0\nP acf/_esys_bus_bit_add/rel_bus5 0\nP acf/_esys_bus_bit_add/rel_dice_AOA_heat_0 0\nP acf/_esys_bus_bit_add/rel_dice_AOA_heat_1 0\nP acf/_esys_bus_bit_add/rel_dice_all 0\nP acf/_esys_bus_bit_add/rel_dice_alt_air_a_0 0\nP acf/_esys_bus_bit_add/rel_dice_alt_air_a_1 0\nP acf/_esys_bus_bit_add/rel_dice_brake_heat 0\nP acf/_esys_bus_bit_add/rel_dice_detect 0\nP acf/_esys_bus_bit_add/rel_dice_pitot_heat_0 0\nP acf/_esys_bus_bit_add/rel_dice_pitot_heat_1 0\nP acf/_esys_bus_bit_add/rel_dice_stat_heat_0 0\nP acf/_esys_bus_bit_add/rel_dice_stat_heat_1 0\nP acf/_esys_bus_bit_add/rel_dice_window_heat 0\nP acf/_esys_bus_bit_add/rel_dice_wing_heat_0 0\nP acf/_esys_bus_bit_add/rel_dice_wing_heat_1 0\nP acf/_esys_bus_bit_add/rel_dme 0\nP acf/_esys_bus_bit_add/rel_efis_1 0\nP acf/_esys_bus_bit_add/rel_efis_2 0\nP acf/_esys_bus_bit_add/rel_ele_fp0 0\nP acf/_esys_bus_bit_add/rel_ele_fp1 0\nP acf/_esys_bus_bit_add/rel_ele_fp2 0\nP acf/_esys_bus_bit_add/rel_ele_fp3 0\nP acf/_esys_bus_bit_add/rel_ele_fp4 0\nP acf/_esys_bus_bit_add/rel_ele_fp5 0\nP acf/_esys_bus_bit_add/rel_ele_fp6 0\nP acf/_esys_bus_bit_add/rel_ele_fp7 0\nP acf/_esys_bus_bit_add/rel_elv_trim 0\nP acf/_esys_bus_bit_add/rel_engn_sync 0\nP acf/_esys_bus_bit_add/rel_flap_act 0\nP acf/_esys_bus_bit_add/rel_g_AHRS 0\nP acf/_esys_bus_bit_add/rel_g_gea 0\nP acf/_esys_bus_bit_add/rel_g_gia1 0\nP acf/_esys_bus_bit_add/rel_g_gia2 0\nP acf/_esys_bus_bit_add/rel_g_magmtr 0\nP acf/_esys_bus_bit_add/rel_gear_act 0\nP acf/_esys_bus_bit_add/rel_gen_avio 0\nP acf/_esys_bus_bit_add/rel_gen_esys 0\nP acf/_esys_bus_bit_add/rel_gps1 0\nP acf/_esys_bus_bit_add/rel_gps2 0\nP acf/_esys_bus_bit_add/rel_heatIN0 0\nP acf/_esys_bus_bit_add/rel_heatIN1 0\nP acf/_esys_bus_bit_add/rel_heatIN2 0\nP acf/_esys_bus_bit_add/rel_heatIN3 0\nP acf/_esys_bus_bit_add/rel_heatIN4 0\nP acf/_esys_bus_bit_add/rel_heatIN5 0\nP acf/_esys_bus_bit_add/rel_heatIN6 0\nP acf/_esys_bus_bit_add/rel_heatIN7 0\nP acf/_esys_bus_bit_add/rel_heatPR0 0\nP acf/_esys_bus_bit_add/rel_heatPR1 0\nP acf/_esys_bus_bit_add/rel_heatPR2 0\nP acf/_esys_bus_bit_add/rel_heatPR3 0\nP acf/_esys_bus_bit_add/rel_heatPR4 0\nP acf/_esys_bus_bit_add/rel_heatPR5 0\nP acf/_esys_bus_bit_add/rel_heatPR6 0\nP acf/_esys_bus_bit_add/rel_heatPR7 0\nP acf/_esys_bus_bit_add/rel_inverter0 0\nP acf/_esys_bus_bit_add/rel_inverter1 0\nP acf/_esys_bus_bit_add/rel_lites_beac 0\nP acf/_esys_bus_bit_add/rel_lites_hud 0\nP acf/_esys_bus_bit_add/rel_lites_ins 0\nP acf/_esys_bus_bit_add/rel_lites_land 0\nP acf/_esys_bus_bit_add/rel_lites_nav 0\nP acf/_esys_bus_bit_add/rel_lites_pan 0\nP acf/_esys_bus_bit_add/rel_lites_strobe 0\nP acf/_esys_bus_bit_add/rel_lites_taxi 0\nP acf/_esys_bus_bit_add/rel_marker 0\nP acf/_esys_bus_bit_add/rel_navcom1 0\nP acf/_esys_bus_bit_add/rel_navcom2 0\nP acf/_esys_bus_bit_add/rel_rud_trim 0\nP acf/_esys_bus_bit_add/rel_servo_thro 0\nP acf/_esys_bus_bit_add/rel_slats 0\nP acf/_esys_bus_bit_add/rel_stab_aug 0\nP acf/_esys_bus_bit_add/rel_stall_warn 0\nP acf/_esys_bus_bit_add/rel_startr0 0\nP acf/_esys_bus_bit_add/rel_startr1 0\nP acf/_esys_bus_bit_add/rel_startr2 0\nP acf/_esys_bus_bit_add/rel_startr3 0\nP acf/_esys_bus_bit_add/rel_startr4 0\nP acf/_esys_bus_bit_add/rel_startr5 0\nP acf/_esys_bus_bit_add/rel_startr6 0\nP acf/_esys_bus_bit_add/rel_startr7 0\nP acf/_esys_bus_bit_add/rel_xpndr 0\nP acf/_esys_bus_bit_add/rel_yaw_damp 0\nP acf/_exhaust_rat 1.0\nP acf/_face_jet 0.0\nP acf/_face_rocket 0.0\nP acf/_fadec_EQ_mixture 0\nP acf/_fadec_EQ_rpm_limit 0\nP acf/_fadec_allows_overboost 0\nP acf/_fan_rpm_for_n1_100 0.0\nP acf/_fbrk_on_td_EQ 0\nP acf/_fdir_needed_to_engage_servo 0\nP acf/_feather_on_engn_fail_EQ 0\nP acf/_feather_on_mixt_pull_EQ 0\nP acf/_feather_on_prop_pull_EQ 0\nP acf/_feathered_pitch 0.0\nP acf/_ff_rat_idle_JET 0.100000001\nP acf/_ff_rat_idle_PRP 0.100000001\nP acf/_file_writer_version 105101\nP acf/_flap1_cd 0.0\nP acf/_flap1_cl 0.0\nP acf/_flap1_cm 0.0\nP acf/_flap1_cratR 0.500000000\nP acf/_flap1_cratT 0.500000000\nP acf/_flap1_dn/0 0.0\nP acf/_flap1_dn/1 0.0\nP acf/_flap1_dn/2 0.0\nP acf/_flap1_dn/3 0.0\nP acf/_flap1_dn/4 0.0\nP acf/_flap1_dn/5 0.0\nP acf/_flap1_dn/6 0.0\nP acf/_flap1_dn/7 0.0\nP acf/_flap1_dn/8 0.0\nP acf/_flap1_dn/9 0.0\nP acf/_flap1_dn/count 10\nP acf/_flap1_ptch 0.0\nP acf/_flap1_ptch_above_50 0\nP acf/_flap1_roll 0.0\nP acf/_flap1_roll_above_50 0\nP acf/_flap1_type 0\nP acf/_flap2_cd 0.0\nP acf/_flap2_cl 0.0\nP acf/_flap2_cm 0.0\nP acf/_flap2_cratR 0.0\nP acf/_flap2_cratT 0.0\nP acf/_flap2_dn/0 0.0\nP acf/_flap2_dn/1 0.0\nP acf/_flap2_dn/2 0.0\nP acf/_flap2_dn/3 0.0\nP acf/_flap2_dn/4 0.0\nP acf/_flap2_dn/5 0.0\nP acf/_flap2_dn/6 0.0\nP acf/_flap2_dn/7 0.0\nP acf/_flap2_dn/8 0.0\nP acf/_flap2_dn/9 0.0\nP acf/_flap2_dn/count 10\nP acf/_flap2_ptch 0.0\nP acf/_flap2_ptch_above_50 0\nP acf/_flap2_roll 0.0\nP acf/_flap2_roll_above_50 0\nP acf/_flap2_type 0\nP acf/_flap_EQ 1\nP acf/_flap_arm 0.0\nP acf/_flap_deftime 5.0\nP acf/_flap_detents 3\nP acf/_flap_extend_protect 0\nP acf/_flap_pumps 25.0\nP acf/_flap_retract_protect 0\nP acf/_flap_with_stall_EQ 0\nP acf/_flaps_are_infinite 0\nP acf/_flaps_with_gear_EQ 0\nP acf/_flaps_with_vec_EQ 0\nP acf/_flare_max 0\nP acf/_fly_like_a_helo 0\nP acf/_folding_prop_EQ 0\nP acf/_food_1/0 0.0\nP acf/_food_1/1 0.0\nP acf/_food_1/2 0.0\nP acf/_food_1/count 3\nP acf/_food_2/0 0.0\nP acf/_food_2/1 0.0\nP acf/_food_2/2 0.0\nP acf/_food_2/count 3\nP acf/_frc_damp_brak_lb 0.0\nP acf/_frc_damp_hdng_lb 0.0\nP acf/_frc_damp_ptch_lb 0.0\nP acf/_frc_damp_roll_lb 0.0\nP acf/_frc_ground_hdng_lb 0.0\nP acf/_frc_ground_ptch_lb 0.0\nP acf/_frc_ground_roll_lb 0.0\nP acf/_frc_hdng_ias 0.0\nP acf/_frc_max_brak_lb 0.0\nP acf/_frc_max_hdng_lb 0.0\nP acf/_frc_max_ptch_lb 0.0\nP acf/_frc_max_roll_lb 0.0\nP acf/_frc_ptch_ias 0.0\nP acf/_frc_roll_ias 0.0\nP acf/_frc_spring_brak_lb 0.0\nP acf/_frc_spring_hdng_lb 0.0\nP acf/_frc_spring_ptch_lb 0.0\nP acf/_frc_spring_roll_lb 0.0\nP acf/_frc_stall_freq 0.0\nP acf/_frc_stall_lb 0.0\nP acf/_frc_stickshaker_freq 0.0\nP acf/_frc_stickshaker_lb 0.0\nP acf/_frc_turb_hdng_lb 0.0\nP acf/_frc_turb_ptch_lb 0.0\nP acf/_frc_turb_roll_lb 0.0\nP acf/_fuel_1/0 0.0\nP acf/_fuel_1/1 0.0\nP acf/_fuel_1/2 0.0\nP acf/_fuel_1/count 3\nP acf/_fuel_2/0 0.0\nP acf/_fuel_2/1 0.0\nP acf/_fuel_2/2 0.0\nP acf/_fuel_2/count 3\nP acf/_fuel_intro_time_jet 10.0\nP acf/_fuel_intro_time_prop 5.0\nP acf/_gear_EQ 1\nP acf/_gear_can_ret_on_ground 0\nP acf/_gear_extend_protect 0\nP acf/_gear_pumps 25.0\nP acf/_gear_steer_EN 0\nP acf/_gear_warn_above_flap_rat 0.0\nP acf/_gear_warn_below_kias 0.0\nP acf/_gear_warn_below_thro_pct 0.0\nP acf/_get_tow/0 0.0\nP acf/_get_tow/1 0.0\nP acf/_get_tow/2 0.0\nP acf/_get_tow/count 3\nP acf/_give_tow/0 0.0\nP acf/_give_tow/1 0.0\nP acf/_give_tow/2 0.0\nP acf/_give_tow/count 3\nP acf/_go_to_beta_below_thro 0.0\nP acf/_go_to_burner_50_above_thro 0.0\nP acf/_go_to_pitch_mode_on_alt_arm 0\nP acf/_go_to_revr_below_thro 0.0\nP acf/_govnr_EQ 0\nP acf/_govnr_del 0.005000000\nP acf/_govnr_dot 0.010000000\nP acf/_govnr_jrk 0.005000000\nP acf/_green_hi_CHT 0.0\nP acf/_green_hi_EGT 0.0\nP acf/_green_hi_EPR 0.0\nP acf/_green_hi_FF 0.0\nP acf/_green_hi_ITT 0.0\nP acf/_green_hi_MP 0.0\nP acf/_green_hi_N1 0.0\nP acf/_green_hi_N1_apu 0.0\nP acf/_green_hi_N2 0.0\nP acf/_green_hi_TRQ 0.0\nP acf/_green_hi_bat_amp 0.0\nP acf/_green_hi_bat_volt 0.0\nP acf/_green_hi_fuelP 0.0\nP acf/_green_hi_gen_amp 0.0\nP acf/_green_hi_gen_volt 0.0\nP acf/_green_hi_oilP 0.0\nP acf/_green_hi_oilT 0.0\nP acf/_green_hi_pwr 0.0\nP acf/_green_hi_vac 0.0\nP acf/_green_hi_xmsn_P 0.0\nP acf/_green_hi_xmsn_T 0.0\nP acf/_green_lo_CHT 0.0\nP acf/_green_lo_EGT 0.0\nP acf/_green_lo_EPR 0.0\nP acf/_green_lo_FF 0.0\nP acf/_green_lo_ITT 0.0\nP acf/_green_lo_MP 0.0\nP acf/_green_lo_N1 0.0\nP acf/_green_lo_N1_apu 0.0\nP acf/_green_lo_N2 0.0\nP acf/_green_lo_TRQ 0.0\nP acf/_green_lo_bat_amp 0.0\nP acf/_green_lo_bat_volt 0.0\nP acf/_green_lo_fuelP 0.0\nP acf/_green_lo_gen_amp 0.0\nP acf/_green_lo_gen_volt 0.0\nP acf/_green_lo_oilP 0.0\nP acf/_green_lo_oilT 0.0\nP acf/_green_lo_pwr 0.0\nP acf/_green_lo_vac 0.0\nP acf/_green_lo_xmsn_P 0.0\nP acf/_green_lo_xmsn_T 0.0\nP acf/_ground_pwr/0 0.0\nP acf/_ground_pwr/1 0.0\nP acf/_ground_pwr/2 0.0\nP acf/_ground_pwr/count 3\nP acf/_h_eqlbm 2.0\nP acf/_has_ADG 0\nP acf/_has_APU_switch 0\nP acf/_has_DC_fd 0\nP acf/_has_GLASS_hsi 0\nP acf/_has_SC_fd 0\nP acf/_has_TCAS 1\nP acf/_has_a_fuel_any 0\nP acf/_has_a_fuel_sel 0\nP acf/_has_air_refuel 0\nP acf/_has_bagg_1 0\nP acf/_has_bagg_2 0\nP acf/_has_bagg_3 0\nP acf/_has_bagg_4 0\nP acf/_has_board_1 0\nP acf/_has_board_2 0\nP acf/_has_clutch_switch 0\nP acf/_has_com_radios 1\nP acf/_has_crew_1 0\nP acf/_has_crew_2 0\nP acf/_has_crossfeed_but 0\nP acf/_has_elec_hyd_switch 0\nP acf/_has_food_1 0\nP acf/_has_food_2 0\nP acf/_has_fuel_1 0\nP acf/_has_fuel_2 0\nP acf/_has_full_bleed_air 0\nP acf/_has_get_tow 0\nP acf/_has_give_tow 0\nP acf/_has_ground_pwr 0\nP acf/_has_hsi 0\nP acf/_has_litemap_tex_1 0\nP acf/_has_litemap_tex_2 0\nP acf/_has_pre_rotate 0\nP acf/_has_radio_alt_callout 0\nP acf/_has_spot_lite 0\nP acf/_has_yawdamp_but 0\nP acf/_heat_x_ctr 0.0\nP acf/_hide_prop_at_90_vect 0\nP acf/_hoops_hud_EQ 0\nP acf/_hud_tapes_track_vector 0\nP acf/_hyd_brakes 0\nP acf/_hyd_ele_pump_0123 0\nP acf/_hyd_engn_pump_0123/0 0\nP acf/_hyd_engn_pump_0123/1 0\nP acf/_hyd_engn_pump_0123/2 0\nP acf/_hyd_engn_pump_0123/3 0\nP acf/_hyd_engn_pump_0123/4 0\nP acf/_hyd_engn_pump_0123/5 0\nP acf/_hyd_engn_pump_0123/6 0\nP acf/_hyd_engn_pump_0123/7 0\nP acf/_hyd_engn_pump_0123/count 8\nP acf/_hyd_flaps 0\nP acf/_hyd_flightcons 0\nP acf/_hyd_gear 0\nP acf/_hyd_gear_fail_mode 0\nP acf/_hyd_gear_fail_speed 0.0\nP acf/_hyd_max_p 1.0\nP acf/_hyd_max_p_RAT 0.0\nP acf/_hyd_max_p_ele 0.0\nP acf/_hyd_max_p_eng 0.0\nP acf/_hyd_max_p_rot 0.0\nP acf/_hyd_nw_steer 0\nP acf/_hyd_prop_pump_0123/0 0\nP acf/_hyd_prop_pump_0123/1 0\nP acf/_hyd_prop_pump_0123/2 0\nP acf/_hyd_prop_pump_0123/3 0\nP acf/_hyd_prop_pump_0123/4 0\nP acf/_hyd_prop_pump_0123/5 0\nP acf/_hyd_prop_pump_0123/6 0\nP acf/_hyd_prop_pump_0123/7 0\nP acf/_hyd_prop_pump_0123/count 8\nP acf/_hyd_rat_pump_0123 0\nP acf/_idle_rat/0 1.0\nP acf/_idle_rat/1 1.0\nP acf/_idle_rat/count 2\nP acf/_inverted_fuel_oil_EQ 0\nP acf/_inverter_for_elec_gyros 0\nP acf/_inverter_for_ind_trq 0\nP acf/_inverter_for_otto 0\nP acf/_inverter_for_radar 0\nP acf/_is_airliner 0\nP acf/_is_experimental 0\nP acf/_is_general_aviation 0\nP acf/_is_glider 0\nP acf/_is_glossy 0\nP acf/_is_helicopter 0\nP acf/_is_military 0\nP acf/_is_sci_fi 0\nP acf/_is_seaplane 0\nP acf/_is_ultralight 0\nP acf/_is_vtol 0\nP acf/_jato_Y 0.0\nP acf/_jato_Z 0.0\nP acf/_jato_dur 0.0\nP acf/_jato_sfc 5.0\nP acf/_jato_theta 0.0\nP acf/_jato_thrust 0.0\nP acf/_jett_is_acft 0\nP acf/_jett_is_ret 0\nP acf/_jett_is_slung 0\nP acf/_jett_is_water 0\nP acf/_jett_the 0.0\nP acf/_jett_xyz/0 0.0\nP acf/_jett_xyz/1 0.0\nP acf/_jett_xyz/2 0.0\nP acf/_jett_xyz/count 3\nP acf/_lo_speed_is_position 0\nP acf/_load_alt_presel_on_alt_hit 1\nP acf/_load_presel_on_asi_hit 0\nP acf/_load_presel_on_vvi_hit 0\nP acf/_lock_with_elev_EQ 0\nP acf/_m_displaced 0.0\nP acf/_m_displaced_Y 0.0\nP acf/_m_empty 142.198120117\nP acf/_m_fuel_max_tot 0.0\nP acf/_m_jett 0.0\nP acf/_m_max 164.244338989\nP acf/_m_shift 0.0\nP acf/_m_shift_dx 0.0\nP acf/_m_shift_dz 0.0\nP acf/_manual_rad_gyr 0\nP acf/_manual_reversion_rat 0.0\nP acf/_max_CHT 500.0\nP acf/_max_EGT 1450.0\nP acf/_max_ITT 680.0\nP acf/_max_MP_limit 29.920000076\nP acf/_max_bat_amp 60.0\nP acf/_max_gen_amp0 60.0\nP acf/_max_gen_amp_per_gen/0 60.0\nP acf/_max_gen_amp_per_gen/1 0.0\nP acf/_max_gen_amp_per_gen/2 0.0\nP acf/_max_gen_amp_per_gen/3 0.0\nP acf/_max_gen_amp_per_gen/4 0.0\nP acf/_max_gen_amp_per_gen/5 0.0\nP acf/_max_gen_amp_per_gen/6 0.0\nP acf/_max_gen_amp_per_gen/7 0.0\nP acf/_max_gen_amp_per_gen/count 8\nP acf/_max_mach_eff 0.800000012\nP acf/_max_oilT 245.0\nP acf/_max_press_diff 0.0\nP acf/_max_vac 8.0\nP acf/_max_xmsn_P 1.0\nP acf/_max_xmsn_T 1.0\nP acf/_min_n1 0.0\nP acf/_min_n2 0.0\nP acf/_min_rwy_len 0.0\nP acf/_min_vec_on_ground 0.0\nP acf/_mixt_x_ctr 0.0\nP acf/_n_ref 0.0\nP acf/_new_plot_XP3D_cock/0 1\nP acf/_new_plot_XP3D_cock/1 1\nP acf/_new_plot_XP3D_cock/2 0\nP acf/_new_plot_XP3D_cock/3 0\nP acf/_new_plot_XP3D_cock/4 0\nP acf/_new_plot_XP3D_cock/count 5\nP acf/_new_plot_outer_acf/0 0\nP acf/_new_plot_outer_acf/1 0\nP acf/_new_plot_outer_acf/2 0\nP acf/_new_plot_outer_acf/3 0\nP acf/_new_plot_outer_acf/4 1\nP acf/_new_plot_outer_acf/count 5\nP acf/_no_hydro_force_mult_brakes 1.0\nP acf/_no_hydro_force_mult_flcons 1.0\nP acf/_nom_bat_volt 24.0\nP acf/_nom_fuelP 30.0\nP acf/_nom_gen_volt 24.500000000\nP acf/_nom_oilP 115.0\nP acf/_num_batteries 1\nP acf/_num_braking_wheels 0.0\nP acf/_num_buses 2\nP acf/_num_engn 0\nP acf/_num_generators 1\nP acf/_num_inverters 2\nP acf/_num_prop 0\nP acf/_num_xmsn 1\nP acf/_nw_side_k 0.0\nP acf/_nw_transition_omega 0.0\nP acf/_oilT_is_C 0\nP acf/_ott_asi_kts_off_for_full_def 20.0\nP acf/_ott_asi_sec_into_future 10.0\nP acf/_ott_asi_thro_per_sec 0.100000001\nP acf/_ott_gls_sec_into_future 8.002954483\nP acf/_ott_phi_deg_off_for_full_def 19.997043610\nP acf/_ott_phi_sec_into_future 0.300443470\nP acf/_ott_phi_sec_to_tune 4.0\nP acf/_ott_roll_rate 8.0\nP acf/_ott_roll_response 4.002955437\nP acf/_ott_the_deg_off_for_full_def 39.994087219\nP acf/_ott_the_deg_per_kt 0.200000003\nP acf/_ott_the_sec_into_future 0.300443470\nP acf/_ott_the_sec_to_tune 4.0\nP acf/_otto_ah_source_type 10\nP acf/_otto_dg_source_type 10\nP acf/_paraf_dur 0.0\nP acf/_paraf_max 0\nP acf/_paraf_vvi 0.0\nP acf/_part_descrip/24 test1\nP acf/_part_descrip/56 fuselage\nP acf/_part_descrip/57 engine to body fairing\nP acf/_part_descrip/58 ventral static fin\nP acf/_part_descrip/59 Tail section\nP acf/_part_descrip/60 Exhaust\nP acf/_part_descrip/61 JA gun pod useless now\nP acf/_part_descrip/62 Nose\nP acf/_part_descrip/63 rear intake\nP acf/_part_descrip/64 front exhaust\nP acf/_part_descrip/65 norFaL tnidneG gS raturt\nP acf/_part_descrip/66 Main wing actuator\nP acf/_part_descrip/67 Main wing actuator\nP acf/_part_descrip/68 Main wing actuator\nP acf/_part_descrip/69 Main wing actuator\nP acf/_part_descrip/70 Main wing actuator\nP acf/_part_descrip/71 Main wing actuator\nP acf/_part_descrip/72 Main wing actuator\nP acf/_part_descrip/73 single seat canopy\nP acf/_part_descrip/74 front intake filler\nP acf/_part_descrip/75 tfeLnaL gnidaeG tS r\nP acf/_part_descrip/76 Fin Actuator\nP acf/_part_descrip/77 serpra e\nP acf/_part_descrip/78 serpra e\nP acf/_part_descrip/85 Front Wheel Fairing\nP acf/_part_descrip/86 hgiReG tW raleehnaP \nP acf/_part_descrip/87 Left Wheel Fairing\nP acf/_part_descrip/88 nose landing gear fairing\nP acf/_part_descrip/89 esoNaeG iS rF edgnal\nP acf/_part_descrip/count 95\nP acf/_pe_xyz/0 0.0\nP acf/_pe_xyz/1 0.0\nP acf/_pe_xyz/2 0.0\nP acf/_pe_xyz/count 3\nP acf/_phase_hdng_tvect_in_at_00 0\nP acf/_phase_hdng_tvect_in_at_90 0\nP acf/_phase_ptch_tvect_in_at_00 0\nP acf/_phase_ptch_tvect_in_at_90 0\nP acf/_phase_roll_tvect_in_at_00 0\nP acf/_phase_roll_tvect_in_at_90 0\nP acf/_philipp_fms_slot0 0\nP acf/_philipp_fms_slot1 0\nP acf/_pitch_cyc_with_v1_kts 0.0\nP acf/_pitch_cyc_with_v2_deg 0.0\nP acf/_pitch_cyc_with_v2_kts 0.0\nP acf/_power_max_limit 0.0\nP acf/_power_max_thermo 0.0\nP acf/_prop_inlet_recovery 0.0\nP acf/_prop_pitch_deg_per_sec 45.0\nP acf/_prop_x_ctr 0.0\nP acf/_ptch_but_adjusts_alt_hold 0\nP acf/_puff_LMN/0 0.0\nP acf/_puff_LMN/1 0.0\nP acf/_puff_LMN/2 0.0\nP acf/_puff_LMN/count 3\nP acf/_puff_xyz/0 0.0\nP acf/_puff_xyz/1 0.0\nP acf/_puff_xyz/2 0.0\nP acf/_puff_xyz/count 3\nP acf/_pwr_is_pcnt 0\nP acf/_radio_alt_callout_advance 0.0\nP acf/_red_hi_CHT 0.0\nP acf/_red_hi_EGT 0.0\nP acf/_red_hi_EPR 0.0\nP acf/_red_hi_FF 0.0\nP acf/_red_hi_ITT 0.0\nP acf/_red_hi_MP 0.0\nP acf/_red_hi_N1 0.0\nP acf/_red_hi_N1_apu 0.0\nP acf/_red_hi_N2 0.0\nP acf/_red_hi_TRQ 0.0\nP acf/_red_hi_bat_amp 0.0\nP acf/_red_hi_bat_volt 0.0\nP acf/_red_hi_fuelP 0.0\nP acf/_red_hi_gen_amp 0.0\nP acf/_red_hi_gen_volt 0.0\nP acf/_red_hi_oilP 0.0\nP acf/_red_hi_oilT 0.0\nP acf/_red_hi_pwr 0.0\nP acf/_red_hi_vac 0.0\nP acf/_red_hi_xmsn_P 0.0\nP acf/_red_hi_xmsn_T 0.0\nP acf/_red_lo_CHT 0.0\nP acf/_red_lo_EGT 0.0\nP acf/_red_lo_EPR 0.0\nP acf/_red_lo_FF 0.0\nP acf/_red_lo_ITT 0.0\nP acf/_red_lo_MP 0.0\nP acf/_red_lo_N1 0.0\nP acf/_red_lo_N1_apu 0.0\nP acf/_red_lo_N2 0.0\nP acf/_red_lo_TRQ 0.0\nP acf/_red_lo_bat_amp 0.0\nP acf/_red_lo_bat_volt 0.0\nP acf/_red_lo_fuelP 0.0\nP acf/_red_lo_gen_amp 0.0\nP acf/_red_lo_gen_volt 0.0\nP acf/_red_lo_oilP 0.0\nP acf/_red_lo_oilT 0.0\nP acf/_red_lo_pwr 0.0\nP acf/_red_lo_vac 0.0\nP acf/_red_lo_xmsn_P 0.0\nP acf/_red_lo_xmsn_T 0.0\nP acf/_rev_thrust_EQ 0\nP acf/_reversed_pitch 0.0\nP acf/_reverser_area 0.0\nP acf/_revt_on_td_EQ 0\nP acf/_rgb_green_arc/0 0.0\nP acf/_rgb_green_arc/1 0.0\nP acf/_rgb_green_arc/2 0.0\nP acf/_rgb_green_arc/count 3\nP acf/_rgb_lite_front/0 0.800000012\nP acf/_rgb_lite_front/1 0.200000003\nP acf/_rgb_lite_front/2 0.200000003\nP acf/_rgb_lite_front/count 3\nP acf/_rgb_lite_side/0 0.800000012\nP acf/_rgb_lite_side/1 0.200000003\nP acf/_rgb_lite_side/2 0.200000003\nP acf/_rgb_lite_side/count 3\nP acf/_rgb_red_arc/0 0.0\nP acf/_rgb_red_arc/1 0.0\nP acf/_rgb_red_arc/2 0.0\nP acf/_rgb_red_arc/count 3\nP acf/_rgb_spot1/0 0.0\nP acf/_rgb_spot1/1 0.0\nP acf/_rgb_spot1/2 0.0\nP acf/_rgb_spot1/count 3\nP acf/_rgb_spot2/0 0.0\nP acf/_rgb_spot2/1 0.0\nP acf/_rgb_spot2/2 0.0\nP acf/_rgb_spot2/count 3\nP acf/_rgb_spot3/0 0.0\nP acf/_rgb_spot3/1 0.0\nP acf/_rgb_spot3/2 0.0\nP acf/_rgb_spot3/count 3\nP acf/_rgb_yellow_arc/0 0.0\nP acf/_rgb_yellow_arc/1 0.0\nP acf/_rgb_yellow_arc/2 0.0\nP acf/_rgb_yellow_arc/count 3\nP acf/_rock_h_opt 0.0\nP acf/_rock_max_opt 0.0\nP acf/_rock_max_sl 0.0\nP acf/_rock_max_vac 0.0\nP acf/_roll_co 0.025000000\nP acf/_roll_to_eng_spo1 0.0\nP acf/_roll_to_eng_spo2 0.0\nP acf/_rotor_mi_rat 1.0\nP acf/_rotor_trim_max_aft 0.0\nP acf/_rotor_trim_max_fwd 0.0\nP acf/_rrpm_trim_rpm_fast 0.0\nP acf/_rrpm_trim_rpm_slow 0.0\nP acf/_rrpm_trim_time 0.0\nP acf/_rudd1_cratR 0.0\nP acf/_rudd1_cratT 0.0\nP acf/_rudd1_lf 0.0\nP acf/_rudd1_rat1 1.0\nP acf/_rudd1_rat2 1.0\nP acf/_rudd1_rt 0.0\nP acf/_rudd1_v1 0.0\nP acf/_rudd1_v2 0.0\nP acf/_rudd2_cratR 0.0\nP acf/_rudd2_cratT 0.0\nP acf/_rudd2_lf 0.0\nP acf/_rudd2_rat1 1.0\nP acf/_rudd2_rat2 1.0\nP acf/_rudd2_rt 0.0\nP acf/_rudd2_v1 0.0\nP acf/_rudd2_v2 0.0\nP acf/_rudd_def_time 0.0\nP acf/_rudd_lf_trim 5.0\nP acf/_rudd_rt_trim 5.0\nP acf/_rudd_tab 0.0\nP acf/_rudd_trim_time 20.0\nP acf/_rudd_with_ailn_rat 0.0\nP acf/_rudd_with_fail 0.0\nP acf/_rwy_req_pave 0\nP acf/_sbrk1_cratR 0.0\nP acf/_sbrk1_cratT 0.0\nP acf/_sbrk1_up_flit 0.0\nP acf/_sbrk1_up_grnd 0.0\nP acf/_sbrk2_cratR 0.0\nP acf/_sbrk2_cratT 0.0\nP acf/_sbrk2_up_flit 0.0\nP acf/_sbrk2_up_grnd 0.0\nP acf/_sbrk_EQ 0\nP acf/_sbrk_on_td_EQ 0\nP acf/_scrolldef_x 0.0\nP acf/_scrolldef_y 0.0\nP acf/_show_ott_asi 0\nP acf/_shut_off_fuel_at_min_prop 0\nP acf/_size_tot 63.761764526\nP acf/_size_x 52.493438721\nP acf/_size_y 12.303149223\nP acf/_size_z 34.038715363\nP acf/_skid_EQ 0\nP acf/_slat1_dn/0 0.0\nP acf/_slat1_dn/1 0.0\nP acf/_slat1_dn/2 0.0\nP acf/_slat1_dn/3 0.0\nP acf/_slat1_dn/4 0.0\nP acf/_slat1_dn/5 0.0\nP acf/_slat1_dn/6 0.0\nP acf/_slat1_dn/7 0.0\nP acf/_slat1_dn/8 0.0\nP acf/_slat1_dn/9 0.0\nP acf/_slat1_dn/count 10\nP acf/_slat1_inc 6.0\nP acf/_slat1_type 0\nP acf/_slat2_dn/0 0.0\nP acf/_slat2_dn/1 0.0\nP acf/_slat2_dn/2 0.0\nP acf/_slat2_dn/3 0.0\nP acf/_slat2_dn/4 0.0\nP acf/_slat2_dn/5 0.0\nP acf/_slat2_dn/6 0.0\nP acf/_slat2_dn/7 0.0\nP acf/_slat2_dn/8 0.0\nP acf/_slat2_dn/9 0.0\nP acf/_slat2_dn/count 10\nP acf/_slat2_inc 0.0\nP acf/_slat2_type 0\nP acf/_slat_EQ 0\nP acf/_slat_with_Vind 0.0\nP acf/_slat_with_stall_EQ 0\nP acf/_slung_len 0.0\nP acf/_snd_N1 100.0\nP acf/_snd_kias 200.0\nP acf/_snd_rpm_eng 2500.0\nP acf/_snd_rpm_prp 2500.0\nP acf/_solar_cover_part 0.0\nP acf/_solar_eta 0.0\nP acf/_speedbrake_ext_time 1.0\nP acf/_speedbrake_ret_time 1.0\nP acf/_speedbrake_size 2.0\nP acf/_spoi1_cratR 0.0\nP acf/_spoi1_cratT 0.0\nP acf/_spoi1_rat1 1.0\nP acf/_spoi1_rat2 1.0\nP acf/_spoi1_up 0.0\nP acf/_spoi1_v1 0.0\nP acf/_spoi1_v2 0.0\nP acf/_spoi1_with_flit_sbrk 0.0\nP acf/_spoi1_with_grnd_sbrk 0.0\nP acf/_spoi2_cratR 0.0\nP acf/_spoi2_cratT 0.0\nP acf/_spoi2_rat1 1.0\nP acf/_spoi2_rat2 1.0\nP acf/_spoi2_up 0.0\nP acf/_spoi2_v1 0.0\nP acf/_spoi2_v2 0.0\nP acf/_spoi2_with_flit_sbrk 0.0\nP acf/_spoi2_with_grnd_sbrk 0.0\nP acf/_spool_time_jet 10.0\nP acf/_spot1_3d_rgb/0 0.0\nP acf/_spot1_3d_rgb/1 0.0\nP acf/_spot1_3d_rgb/2 0.0\nP acf/_spot1_3d_rgb/count 3\nP acf/_spot1_3d_xyz/0 0.0\nP acf/_spot1_3d_xyz/1 0.0\nP acf/_spot1_3d_xyz/2 0.0\nP acf/_spot1_3d_xyz/count 3\nP acf/_spot2_3d_rgb/0 0.0\nP acf/_spot2_3d_rgb/1 0.0\nP acf/_spot2_3d_rgb/2 0.0\nP acf/_spot2_3d_rgb/count 3\nP acf/_spot2_3d_xyz/0 0.0\nP acf/_spot2_3d_xyz/1 0.0\nP acf/_spot2_3d_xyz/2 0.0\nP acf/_spot2_3d_xyz/count 3\nP acf/_spot3_3d_rgb/0 0.0\nP acf/_spot3_3d_rgb/1 0.0\nP acf/_spot3_3d_rgb/2 0.0\nP acf/_spot3_3d_rgb/count 3\nP acf/_spot3_3d_xyz/0 0.0\nP acf/_spot3_3d_xyz/1 0.0\nP acf/_spot3_3d_xyz/2 0.0\nP acf/_spot3_3d_xyz/count 3\nP acf/_spot_angle/0 0.0\nP acf/_spot_angle/1 0.0\nP acf/_spot_angle/2 0.0\nP acf/_spot_angle/count 3\nP acf/_spot_lite_psi_off 0.0\nP acf/_spot_lite_the_off 0.0\nP acf/_spot_name_3d/0 sim/cockpit2/electrical/panel_brightness_ratio[0]\nP acf/_spot_name_3d/1 sim/cockpit2/electrical/panel_brightness_ratio[0]\nP acf/_spot_name_3d/2 sim/cockpit2/electrical/panel_brightness_ratio[0]\nP acf/_spot_name_3d/count 3\nP acf/_spot_psi/0 0.0\nP acf/_spot_psi/1 0.0\nP acf/_spot_psi/2 0.0\nP acf/_spot_psi/count 3\nP acf/_spot_size/0 0.010000000\nP acf/_spot_size/1 0.010000000\nP acf/_spot_size/2 0.010000000\nP acf/_spot_size/count 3\nP acf/_spot_the/0 0.0\nP acf/_spot_the/1 0.0\nP acf/_spot_the/2 0.0\nP acf/_spot_the/count 3\nP acf/_stab_hdng 0.0\nP acf/_stab_roll 0.0\nP acf/_stab_trim_dn 0.0\nP acf/_stab_trim_up 0.0\nP acf/_stab_with_Vind 0.0\nP acf/_stab_with_flap 0.0\nP acf/_stall_warn_aoa 10.0\nP acf/_stall_warn_is_variable 0\nP acf/_start_on_water 0\nP acf/_starter_engages_fuel 0\nP acf/_starter_engages_igniter_arm 0\nP acf/_starter_engages_igniter_on 0\nP acf/_starter_engages_ignition 0\nP acf/_starter_is_air_driven 0\nP acf/_starter_max_rpm_rat 0.200000003\nP acf/_starter_torque_rat 0.250000000\nP acf/_stickshaker 0\nP acf/_sweep_m1 0.0\nP acf/_sweep_m2 0.0\nP acf/_sweep_with_flaps_EQ 0\nP acf/_sweep_with_vect_EQ 0\nP acf/_tail_rot_with_v1_kts 0.0\nP acf/_tail_rot_with_v2_deg 0.0\nP acf/_tail_rot_with_v2_kts 0.0\nP acf/_tail_with_coll 0.0\nP acf/_tailnum N809OL\nP acf/_tailrotor_EQ 0\nP acf/_takeoff_trim_11 0.0\nP acf/_tank_psi/0 0.0\nP acf/_tank_psi/1 0.0\nP acf/_tank_psi/2 0.0\nP acf/_tank_psi/3 0.0\nP acf/_tank_psi/4 0.0\nP acf/_tank_psi/5 0.0\nP acf/_tank_psi/6 0.0\nP acf/_tank_psi/7 0.0\nP acf/_tank_psi/8 0.0\nP acf/_tank_psi/count 9\nP acf/_tank_rat/0 0.0\nP acf/_tank_rat/1 0.0\nP acf/_tank_rat/2 0.0\nP acf/_tank_rat/3 0.0\nP acf/_tank_rat/4 0.0\nP acf/_tank_rat/5 0.0\nP acf/_tank_rat/6 0.0\nP acf/_tank_rat/7 0.0\nP acf/_tank_rat/8 0.0\nP acf/_tank_rat/count 9\nP acf/_tank_xyz/0,0 0.0\nP acf/_tank_xyz/0,1 0.0\nP acf/_tank_xyz/0,2 0.0\nP acf/_tank_xyz/1,0 0.0\nP acf/_tank_xyz/1,1 0.0\nP acf/_tank_xyz/1,2 0.0\nP acf/_tank_xyz/2,0 0.0\nP acf/_tank_xyz/2,1 0.0\nP acf/_tank_xyz/2,2 0.0\nP acf/_tank_xyz/3,0 0.0\nP acf/_tank_xyz/3,1 0.0\nP acf/_tank_xyz/3,2 0.0\nP acf/_tank_xyz/4,0 0.0\nP acf/_tank_xyz/4,1 0.0\nP acf/_tank_xyz/4,2 0.0\nP acf/_tank_xyz/5,0 0.0\nP acf/_tank_xyz/5,1 0.0\nP acf/_tank_xyz/5,2 0.0\nP acf/_tank_xyz/6,0 0.0\nP acf/_tank_xyz/6,1 0.0\nP acf/_tank_xyz/6,2 0.0\nP acf/_tank_xyz/7,0 0.0\nP acf/_tank_xyz/7,1 0.0\nP acf/_tank_xyz/7,2 0.0\nP acf/_tank_xyz/8,0 0.0\nP acf/_tank_xyz/8,1 0.0\nP acf/_tank_xyz/8,2 0.0\nP acf/_tank_xyz/i_count 9\nP acf/_tank_xyz/j_count 3\nP acf/_the_eqlbm 0.0\nP acf/_thro_x_ctr 0.0\nP acf/_throt_max_fwd_emr 1.0\nP acf/_throt_max_fwd_nrm 1.0\nP acf/_throt_max_rev 1.0\nP acf/_throt_time_jet 0.500000000\nP acf/_throt_time_prop 0.500000000\nP acf/_thrust_max_limit 0.0\nP acf/_thrust_max_thermo 0.0\nP acf/_thrust_rev_dep_time 1.0\nP acf/_tip_mach_des_100 0.0\nP acf/_tip_mach_des_50 0.0\nP acf/_tip_weight 0.0\nP acf/_total_S 0.0\nP acf/_total_elements 0.0\nP acf/_trans_loss 0.0\nP acf/_trq_max_eng_nm_limit 0.100000001\nP acf/_trq_max_eng_nm_thermo 0.0\nP acf/_truck_lat_sep 3.0\nP acf/_truck_lon_sep 3.0\nP acf/_tvec_hdng 0.0\nP acf/_tvec_ptch 0.0\nP acf/_tvec_roll 0.0\nP acf/_use_cus_gear_damping 0\nP acf/_use_cus_gear_defs 0\nP acf/_use_manual_prop_inc 0\nP acf/_vario_type -1\nP acf/_vect_EQ 0\nP acf/_vect_max_disc 0.0\nP acf/_vect_max_nace 0.0\nP acf/_vect_min_disc 0.0\nP acf/_vect_min_nace 0.0\nP acf/_vect_rate 15.0\nP acf/_vectarmY 0.0\nP acf/_vectarmZ 0.0\nP acf/_vvi_but_adjusts_pitch 0\nP acf/_warn_airliner 0\nP acf/_warn_alt_app_100 0\nP acf/_warn_alt_app_1000 0\nP acf/_warn_alt_app_200 0\nP acf/_warn_alt_app_300 0\nP acf/_warn_alt_app_mode 0\nP acf/_warn_alt_dep_100 0\nP acf/_warn_alt_dep_1000 0\nP acf/_warn_alt_dep_200 0\nP acf/_warn_alt_dep_300 0\nP acf/_warn_alt_dep_mode 0\nP acf/_warn_fighter 0\nP acf/_warn_fire_EQ 0\nP acf/_warn_fuelP 1.0\nP acf/_warn_gear 0\nP acf/_warn_hirot_EQ 0\nP acf/_warn_lorot_EQ 0\nP acf/_warn_stall 1\nP acf/_warn_transonic_EQ 0\nP acf/_warn_verbal_500_agl 0\nP acf/_wate_xyz/0 0.0\nP acf/_wate_xyz/1 0.0\nP acf/_wate_xyz/2 0.0\nP acf/_wate_xyz/count 3\nP acf/_water_drop_dep_time 0.100000001\nP acf/_water_rud_Z 0.0\nP acf/_water_rud_area 0.0\nP acf/_water_rud_maxdef 0.0\nP acf/_water_scoop_dep_time 0.100000001\nP acf/_wheel_tire_s1/0 0.509765625\nP acf/_wheel_tire_s1/1 0.552734375\nP acf/_wheel_tire_s1/count 2\nP acf/_wheel_tire_s2/0 0.550781250\nP acf/_wheel_tire_s2/1 0.630859375\nP acf/_wheel_tire_s2/count 2\nP acf/_wheel_tire_t1/0 0.254882812\nP acf/_wheel_tire_t1/1 0.254882812\nP acf/_wheel_tire_t1/count 2\nP acf/_wheel_tire_t2/0 0.295898438\nP acf/_wheel_tire_t2/1 0.295898438\nP acf/_wheel_tire_t2/count 2\nP acf/_windshield_scratchy 0\nP acf/_wing_damp_rat 1.0\nP acf/_wing_frac_mass 0.250000000\nP acf/_wing_mid_dihed_per_g 1.0\nP acf/_wing_tilt_ptch 0.0\nP acf/_wing_tilt_roll 0.0\nP acf/_wiper_ang1/0 0.0\nP acf/_wiper_ang1/1 0.0\nP acf/_wiper_ang1/2 0.0\nP acf/_wiper_ang1/3 0.0\nP acf/_wiper_ang1/count 4\nP acf/_wiper_ang2/0 0.0\nP acf/_wiper_ang2/1 0.0\nP acf/_wiper_ang2/2 0.0\nP acf/_wiper_ang2/3 0.0\nP acf/_wiper_ang2/count 4\nP acf/_wiper_max_cycles_second 2.0\nP acf/_xmsn_of_engn/0 0\nP acf/_xmsn_of_engn/1 0\nP acf/_xmsn_of_engn/2 0\nP acf/_xmsn_of_engn/3 0\nP acf/_xmsn_of_engn/4 0\nP acf/_xmsn_of_engn/5 0\nP acf/_xmsn_of_engn/6 0\nP acf/_xmsn_of_engn/7 0\nP acf/_xmsn_of_engn/count 8\nP acf/_xmsn_of_prop/0 0\nP acf/_xmsn_of_prop/1 0\nP acf/_xmsn_of_prop/2 0\nP acf/_xmsn_of_prop/3 0\nP acf/_xmsn_of_prop/4 0\nP acf/_xmsn_of_prop/5 0\nP acf/_xmsn_of_prop/6 0\nP acf/_xmsn_of_prop/7 0\nP acf/_xmsn_of_prop/count 8\nP acf/_yawbr_cratR 0.0\nP acf/_yawbr_cratT 0.0\nP acf/_yawbr_rat1 1.0\nP acf/_yawbr_rat2 1.0\nP acf/_yawbr_ud 0.0\nP acf/_yawbr_v1 0.0\nP acf/_yawbr_v2 0.0\nP acf/_yawstring_x 512.0\nP acf/_yawstring_y 431.0\nP acf/_yel_hi_CHT 0\nP acf/_yel_hi_EGT 0\nP acf/_yel_hi_EPR 0\nP acf/_yel_hi_FF 0\nP acf/_yel_hi_ITT 0\nP acf/_yel_hi_MP 0\nP acf/_yel_hi_N1 0\nP acf/_yel_hi_N1_apu 0\nP acf/_yel_hi_N2 0\nP acf/_yel_hi_TRQ 0\nP acf/_yel_hi_bat_amp 0\nP acf/_yel_hi_bat_volt 0\nP acf/_yel_hi_fuelP 0\nP acf/_yel_hi_gen_amp 0\nP acf/_yel_hi_gen_volt 0\nP acf/_yel_hi_oilP 0\nP acf/_yel_hi_oilT 0\nP acf/_yel_hi_pwr 0\nP acf/_yel_hi_vac 0\nP acf/_yel_hi_xmsn_P 0\nP acf/_yel_hi_xmsn_T 0\nP acf/_yel_lo_CHT 0\nP acf/_yel_lo_EGT 0\nP acf/_yel_lo_EPR 0\nP acf/_yel_lo_FF 0\nP acf/_yel_lo_ITT 0\nP acf/_yel_lo_MP 0\nP acf/_yel_lo_N1 0\nP acf/_yel_lo_N1_apu 0\nP acf/_yel_lo_N2 0\nP acf/_yel_lo_TRQ 0\nP acf/_yel_lo_bat_amp 0\nP acf/_yel_lo_bat_volt 0\nP acf/_yel_lo_fuelP 0\nP acf/_yel_lo_gen_amp 0\nP acf/_yel_lo_gen_volt 0\nP acf/_yel_lo_oilP 0\nP acf/_yel_lo_oilT 0\nP acf/_yel_lo_pwr 0\nP acf/_yel_lo_vac 0\nP acf/_yel_lo_xmsn_P 0\nP acf/_yel_lo_xmsn_T 0\nPROPERTIES_END\nPANEL_2D_BEGIN\nhoriz_vac horizon_GA_vac.png\n  POS 224.000000 307.000000\n  DATAREF \n  LIGHT_MODE MECHANICAL\n  LIGHT_RHEOSTAT 0\n  KEY_FRAME 0.000000 0.000000 1.000000\n  KEY_FRAME 1.000000 1.000000\n\nPANEL_2D_END\nPANEL_3D_BEGIN\nhoriz_vac_adj horizon_GA_vac_adj.\n  POS 294.000000 303.000000\n  DATAREF \n  LIGHT_MODE MECHANICAL\n  LIGHT_RHEOSTAT 0\n  KEY_FRAME 0.000000 0.000000 1.000000\n  KEY_FRAME 1.000000 1.000000\n\nPANEL_3D_END\n"
  },
  {
    "path": "scripts/xplaneUDPout/__init__.py",
    "content": ""
  },
  {
    "path": "scripts/xplaneUDPout/variables.yaml",
    "content": "---\n# for_pos needs positions 0 to 2 to get the x,y,z position\n- name: 'for_pos'\n  var_type: 'node'\n  inout: 'out'\n  position: 0\n- name: 'for_pos'\n  var_type: 'node'\n  inout: 'out'\n  position: 1\n- name: 'for_pos'\n  var_type: 'node'\n  inout: 'out'\n  position: 2\n# The quaternion has 4 terms. All are neeeded to carry out\n# the conversion to roll, pitch and yaw\n- name: 'quat'\n  var_type: 'node'\n  inout: 'out'\n  position: 0\n- name: 'quat'\n  var_type: 'node'\n  inout: 'out'\n  position: 1\n- name: 'quat'\n  var_type: 'node'\n  inout: 'out'\n  position: 2\n- name: 'quat'\n  var_type: 'node'\n  inout: 'out'\n  position: 3\n# Valid for simple HALE\n# Vertical tip deflection (In positive y-axis)\n- name: 'pos'\n  var_type: 'node'\n  inout: 'out'\n  # Row\n  position: 16\n  # Column\n  index: 2\n# Horizontal tip deflection\n- name: 'pos'\n  var_type: 'node'\n  inout: 'out'\n  position: 16\n  index: 0\n# # Simple HALE has two control surfaces\n# - name: 'control_surface_deflection' # variable name. those in the timestep_info are supported\n#   var_type: 'control_surface'\n#   inout: 'out'  # either `in`, `out` or `inout`\n#   position: 0  # control surface index\n# - name: 'control_surface_deflection' \n#   var_type: 'control_surface'\n#   inout: 'out' \n#   position: 1  \n# - name: 'control_surface_deflection' \n#   var_type: 'control_surface'\n#   inout: 'out' \n#   position: 2  \n...\n"
  },
  {
    "path": "scripts/xplaneUDPout/xplaneUDP.py",
    "content": "import socket\nimport struct\nimport binascii\nimport pickle\nimport os\nimport numpy as np\n\nimport sharpy.utils.solver_interface as solver_interface\nimport sharpy.postproc\nfrom sharpy.utils.algebra import quat2euler\n\nclass XPlaneIpNotFound(Exception):\n    args = \"Could not find any running XPlane instance in network.\"\n\n\nclass XPlaneTimeout(Exception):\n    args = \"XPlane timeout.\"\n\n\nclass XPlaneUdp:\n    \"\"\"\n        Class that co-ordinates the sending of data via UDP to X-Plane\n\n        ``YAML`` file assumed to be have variables in the order of, pos (x,y,z), quat (4 vars), vertical tip \n        deflection, horizontal tip deflection\n\n        Uses SHARPy UDPout postprocessor \n    \"\"\"\n\n    # Discover X-Plane via Beacon and uses multicast\n    # Constants\n    UDP_PORT = 49000\n    MCAST_GRP = \"239.255.1.1\"\n    MCAST_PORT = 49707  \n    EARTH_RADIUS = 6378.137*10 ** 3  # Equatorial radius in [m]\n\n    MAX_DIHEDRAL = 180  # Degrees\n    MAX_SWEEP = 90  # Degrees\n\n    HEIGHT_OFFSET = 100  # Meters\n    DEFLECTION_ANGLE_MULTIPLICATOR = 10\n\n    def __init__(self, pklFile):\n        # Find location of X-Plane\n        self.BeaconData = self.find_ip_xplane()\n\n        self._byte_ordering = '<'\n\n        _host, _port = self.find_local_ip()\n\n        settings = dict()\n\n        settings['UDPout'] = {\n            'output_network_settings': {\n                'destination_address': [self.BeaconData['IP']],\n                'destination_ports': [self.BeaconData['Port']],\n                'address': _host,\n                'port': _port,\n            },\n            'variables_filename': os.getcwd() + '/variables.yaml',\n        }\n\n        self.timestep_counter = 0\n        self.data = pklFile\n\n        self.udpSolver = solver_interface.initialise_solver('UDPout')\n        self.udpSolver.initialise(data, custom_settings=settings['UDPout'])\n\n        # Longitude and Latitude of LHR (arbitrarily set) \n        self.locLat = 51.470020  # 0\n        self.locLon = -0.454295  # 0\n        self.prevX = 0\n        self.prevY = 0\n\n        self.drefPaths = {}\n        self.drefPaths['overrideCS'] = \"sim/operation/override/override_control_surfaces\"\n        ### Ailerons ###\n        self.drefPaths['leftAileronDef'] = \"sim/flightmodel/controls/wing1l_ail1def\"\n        self.drefPaths['rightAileronDef'] = \"sim/flightmodel/controls/wing1r_ail1def\"\n        ### Stabilisers ###\n        self.drefPaths['elevatorDef'] = \"sim/flightmodel/controls/hstab1_elv1def\"\n        self.drefPaths['rudderDef'] = \"sim/flightmodel/controls/vstab1_rud1def\"\n        # Cockpit Panel Indicator \n        # Dref for: The indicated pitch on the panel for the first vacuum instrument\n        self.drefPaths['vertIndicator'] = \"sim/cockpit/gyros/the_vac_ind_deg\"\n        # Dref for: The indicated roll on the panel for the first vacuum instrument\n        self.drefPaths['horzIndicator'] = \"sim/cockpit/gyros/phi_vac_ind_deg\"\n        # The flightmodel2 section contains data about how the actual aircraft is being drawn\n        # Actual sweep in ratio (0=> no sweep, 1 => max sweep) [float, ratio]\n        self.drefPaths['variableSweep'] = \"sim/flightmodel2/controls/wingsweep_ratio\"\n        # Acutal dihedral [float, ratio]\n        self.drefPaths['variableDihedral'] = \"sim/flightmodel2/controls/dihedral_ratio\"\n        # Actual incidence [float, ratio]\n        self.drefPaths['variableIncidence'] = \"sim/flightmodel2/controls/incidence_ratio\"\n        # Datarefs above achieve the same\n        # self.drefPaths['variableSweep'] = \"sim/flightmodel/controls/swdi\"\n        # self.drefPaths['variableDihedral'] = \"sim/flightmodel/controls/dihed_rat\"\n        # self.drefPaths['variableIncidence'] = \"sim/flightmodel/controls/incid_ratio\"\n\n    def run(self):\n        # Get values for a given time step\n        vals = self.get_struct_value(\n            self.data, timestep_index=self.timestep_counter)\n        # Encode location information\n        dvisMsg = self.encode_dvis(vals)\n        # Send encoded information\n        self.udpSolver.out_network.send(\n            dvisMsg, self.udpSolver.out_network.clients)\n\n        # Aeroelastic Information on cockpit panel \n        vals = self.convert_tip_disp_to_angle(vals, [7, 8], 16)\n        indicatorMsg = self.encode_dref(\n            self.drefPaths['vertIndicator'], 7, lstOfVals=vals)\n        self.udpSolver.out_network.send(\n            indicatorMsg, self.udpSolver.out_network.clients)\n\n        indicatorMsg2 = self.encode_dref(\n            self.drefPaths['horzIndicator'], 8, lstOfVals=vals)\n        self.udpSolver.out_network.send(\n            indicatorMsg2, self.udpSolver.out_network.clients)\n\n        # The simulation used here has fixed control surfaces\n        vals = np.append(vals, np.asarray([-2.08, -2.08, 0]))\n\n        # Send control surface information\n        overrideMsg = self.encode_dref(self.drefPaths['overrideCS'], True)\n        self.udpSolver.out_network.send(\n            overrideMsg, self.udpSolver.out_network.clients)\n\n        leftAilMsg = self.encode_dref(\n            self.drefPaths['leftAileronDef'], 9, lstOfVals=vals)\n        self.udpSolver.out_network.send(\n            leftAilMsg, self.udpSolver.out_network.clients)\n\n        rightAilMsg = self.encode_dref(\n            self.drefPaths['rightAileronDef'], 10, lstOfVals=vals)\n        self.udpSolver.out_network.send(\n            rightAilMsg, self.udpSolver.out_network.clients)\n\n        elevatorMsg = self.encode_dref(\n            self.drefPaths['elevatorDef'], 11, lstOfVals=vals)\n        self.udpSolver.out_network.send(\n            elevatorMsg, self.udpSolver.out_network.clients)\n\n        # Aeroelastic Information on wing\n        vals = self.find_deflection_ratio(\n            vals, [7, 8], [self.MAX_DIHEDRAL, self.MAX_SWEEP])\n        dihedralMsg = self.encode_dref(\n            self.drefPaths['variableDihedral'], 12, lstOfVals=vals)\n        self.udpSolver.out_network.send(\n            dihedralMsg, self.udpSolver.out_network.clients)\n\n        sweepMsg = self.encode_dref(\n            self.drefPaths['variableSweep'], 13, lstOfVals=vals)\n        self.udpSolver.out_network.send(\n            sweepMsg, self.udpSolver.out_network.clients)\n\n        # incidenceMsg = self.encode_dref(\n        #     self.drefPaths['variableIncidence'], 14, lstOfVals=vals)\n        # self.udpSolver.out_network.send(\n        #     incidenceMsg, self.udpSolver.out_network.clients)\n\n        # # Incrementthe counter so it accesses the next time step values\n        self.timestep_counter += 1\n\n    def get_struct_value(self, data, timestep_index=-1):\n        numVars = len(self.udpSolver.set_of_variables.variables)\n        values = np.zeros(numVars)\n        for i in range(numVars):\n            try:\n                values[i] = self.udpSolver.set_of_variables.variables[i].get_variable_value(\n                    data, timestep_index)\n            except:\n                # This is very dangerous!!\n                # Created to handle the fact that the first control surface deflection angle is\n                # not stored in the pickle (list is empty)\n                values[i] = 0\n        return values\n\n    def encode_dref(self, drefPath, idx, lstOfVals=np.asarray([])):\n        \"\"\"Sets any dataref to a given value via UDP\n\n            The datarefs used by X-Plane can be found at, https://developer.x-plane.com/datarefs/\n            ::\n\n                struct dref_struct:\n                {\n                    xflt var;\n                    xchar dref_path[strDIM];\n                }\n\n            N.B. Instructions in the sending data to X-Plane manually state that the dref_path needs to be \n            null-terminated. However, doing so made the dataref unrecognisible to X-Plane. The issue\n            was fixed by removing the null value. \n            The instructions also state the the whole message should have size 509 bytes. However, this\n            made X-Plane throw an error stating that the message is the incorrect length. The issue was \n            resolves by changing the message length to be 512 bytes\n\n            Therefore, typical message looks like,\n            DREF0 + (4byte value) + dref_path + spaces to complte the whole message to 512 bytes. \n            (N.B. + => append. Don't include them in the actual message)\n\n            E.G. to switch on anti-ice switch\n            DREF0 + (4byte value of 1) + sim/cockpit/switches/anti_ice_surf_heat_left + spaces to complete \n            to 512 bytes \n\n            Args:\n                drefPath (str): Dataref path to the variable being set \n                idx (int): Location of value to set in lstOfVals \n                lstOfVals (array): All data \n\n            Returns:\n                Message to be sent to X-Plane in the required format\n        \"\"\"\n        msg = struct.pack('{}5s'.format(self._byte_ordering), b'DREF0')\n\n        if lstOfVals.size == 0 and type(idx) == bool:\n            # This is to send a boolean value (allows for override command to be sent)\n\n            # Based on the information from XPlane dataref website, the type should be\n            # int but when int is used for the format, XPlane always reads the value as\n            # 0 instead of what the actual value is. Therefore, the type for packing \n            # needs to be f (float) instead of int\n            msg += struct.pack('{}f'.format(self._byte_ordering), int(idx))\n        elif lstOfVals.size == 0:\n            raise ValueError(\n                \"If list of values is empty, idx must be a boolean to indicate override\")\n        else:\n            msg += struct.pack('{}f'.format(self._byte_ordering),\n                               lstOfVals[idx])\n\n        # Convert dref path which is a string to bytes\n        drefPath = bytes(drefPath, 'utf-8') # Add dreft path and null terminate it\n        msg += struct.pack(\"{}s\".format(len(drefPath)), drefPath)\n        # Find the size of the message\n        msgSize = struct.calcsize('5sf' + \"{}s\".format(len(drefPath)))\n        # Determine how many blank spaces to include\n        remainder = 512 - msgSize\n        # Append the black spaces to complete to 512 bytes\n        msg += struct.pack('{}x'.format(remainder))\n\n        return msg\n\n    def encode_dvis(self, lstOfVals):\n        \"\"\"Sends message to X-Plane to turn off flight engine and this sets location of aircraft\n\n            To run X-Plane as a visual, the flight engine needs to be turned off, this is achieved by sending\n            \"DVIS0\" followed by the struct:\n\n            ::\n\n                struct dvis_struct:\n                {\n                    xdob lat_lon_ele[3]; # double precision for lattitude, longitude & elevation above MSL (m)\n                    xdob psi_the_phi[3]; # True heading, pitch up, roll right in degrees \n                }\n            \n            Double precision is used to avoid byte-spacing confusion \n            N.B. This should be sent at a higher frame rate than X-Plane for smooth animation \n\n            Args:\n                lstOfVals (array): Numpy array that contains all the information obtained from pickled sim \n\n            Returns:\n                Message to be sent to X-Plane in the required format \n        \"\"\"\n        msg = struct.pack('{}5s'.format(self._byte_ordering), b'DVIS0')\n        lat, lon = self.convert_to_lat_lon(lstOfVals)\n        msg += struct.pack(\"{}ddd\".format(self._byte_ordering),\n                           lat, lon, lstOfVals[2]+self.HEIGHT_OFFSET)\n        # Information from pickle is in quaternion form. Therefore, this needs\n        # to be converted to euler angles\n        eulerAngles = quat2euler(lstOfVals[3:7])\n        # Above conversion results in radians but X-Plane requires degrees\n        eulerAngles = np.rad2deg(eulerAngles)\n        # Individual naming for clarity\n        roll, pitch, yaw = eulerAngles\n        msg += struct.pack('{}ddd'.format(self._byte_ordering),\n                           yaw, pitch, roll)\n\n        return msg\n\n    def convert_to_lat_lon(self, values):\n        \"\"\"Converts x, y positions[m] from simulation to latitude and logitude[degrees]\n\n            This method is taken from: \n            https://stackoverflow.com/questions/10122055/calculate-longitude-from-distance\n\n            Args:\n                values (array): Contains all simulation data for a given time step. It is assumed that \n                                the x, y position is in the 0th and 1st position respectively\n\n            Returns:\n                Local latitude [degrees], Local longitude [degrees] \n\n        \"\"\"\n        x = values[0]\n        dx = x - self.prevX\n        y = values[1]\n        dy = y - self.prevY\n\n        deltaLon = dx/self.EARTH_RADIUS\n        deltaLat = dx/self.EARTH_RADIUS\n\n        self.locLat = self.locLat + np.sign(dy)*np.rad2deg(deltaLat)\n        self.locLon = self.locLon + np.sign(dx)*np.rad2deg(deltaLon*1.195)\n\n        return self.locLat, self.locLon\n\n    def convert_tip_disp_to_angle(self, lstOfVals, indices, arm):\n        \"\"\"Converts tip displacement(m) to an angle(degrees)\n\n            Sign conventions are: Positive vertical displacmenet implies up. Positive horizontal \n            displacement implies aft\n\n            Args:\n                indices (iterable): Refers to the indices that need conversion\n                arm: (float)    Semi-span of the wing for tip displacement but any length along the wing can be used as \n                        long as it corresponds to be displacement seen  \n                lstOfVals (array): Numpy array that contains all the information for a given timestep\n\n            Returns:\n                Updated lstOfVals array\n        \"\"\"\n        for index in indices:\n            angle = np.rad2deg(np.arctan(float(lstOfVals[index])/arm))\n            lstOfVals[index] = angle\n\n        return lstOfVals\n\n    def find_deflection_ratio(self, lstOfVals, indices, limits):\n        \"\"\"Converts an angle of deflection to ratio with respect to the maximum deflection angle\n\n            N.B: This step MUST take place after the tip displacement has been converted to angles (degree) \n\n            Args:\n                indices (iterable): Location within origin array of vals\n                limits (iterable): Value which the ratio is found with respect to (i.e. the maximum value) \n                lstOfVals (array): Numpy array that contains all the information for a given timestep\n\n            Returns:\n                Updated lstOfVals array\n\n        \"\"\"\n        temp = np.zeros(len(indices))\n        for i, index in enumerate(indices):\n            temp[i] = float(lstOfVals[index])/limits[i]\n\n        lstOfVals = np.append(lstOfVals, temp)\n\n        return lstOfVals\n\n    def find_local_ip(self):\n        \"\"\"Finds default IP and open port\n\n            This automates the process of entering an IP address and port in the settings for SHARPy UDPout\n            post-processor \n\n            This function has been adapted from: https://stackoverflow.com/questions/166506/finding-local-ip-addresses-using-pythons-stdlib\n\n            Returns:\n                Single IP address that is the default route and an open port \n        \"\"\"\n        s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)\n        try:\n            # Doesn't even have to be reachable\n            s.connect(('10.255.255.255', 1))\n            IP, port = s.getsockname()\n        except Exception:\n            IP = '127.0.0.1'\n            # This is a randomly chosen number\n            port = 50585\n        finally:\n            s.close()\n        return IP, port\n\n    def find_ip_xplane(self):\n        \"\"\"Finds X-Plane host in network \n\n            This takes the first X-Plane 10 host it can find. To prevent confusion, ensure only one is running \n\n            This function is wholesale from: https://github.com/charlylima/XPlaneUDP/blob/master/XPlaneUdp.py\n\n            Returns:\n                Dictionary containing IP, port, hostname, X-Plane version and role\n        \"\"\"\n\n        self.BeaconData = {}\n\n        # open socket for multicast group.\n        sock = socket.socket(\n            socket.AF_INET, socket.SOCK_DGRAM, socket.IPPROTO_UDP)\n        sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)\n        sock.bind((self.MCAST_GRP, self.MCAST_PORT))\n        mreq = struct.pack(\"=4sl\", socket.inet_aton(\n            self.MCAST_GRP), socket.INADDR_ANY)\n        sock.setsockopt(socket.IPPROTO_IP, socket.IP_ADD_MEMBERSHIP, mreq)\n        sock.settimeout(3.0)\n\n        while not self.BeaconData:\n\n            # receive data\n            try:\n                packet, sender = sock.recvfrom(15000)\n\n                # decode data\n                # * Header\n                header = packet[0:5]\n                if header != b\"BECN\\x00\":\n                    print(\"Unknown packet from \"+sender[0])\n                    print(str(len(packet)) + \" bytes\")\n                    print(packet)\n                    print(binascii.hexlify(packet))\n\n                else:\n                    data = packet[5:21]\n                    # struct becn_struct\n                    # {\n                    # \tuchar beacon_major_version;\t\t// 1 at the time of X-Plane 10.40\n                    # \tuchar beacon_minor_version;\t\t// 1 at the time of X-Plane 10.40\n                    # \txint application_host_id;\t\t// 1 for X-Plane, 2 for PlaneMaker\n                    # \txint version_number;\t\t\t// 104014 for X-Plane 10.40b14\n                    # \tuint role;\t\t\t\t\t\t// 1 for master, 2 for extern visual, 3 for IOS\n                    # \tushort port;\t\t\t\t\t// port number X-Plane is listening on\n                    # \txchr\tcomputer_name[strDIM];\t// the hostname of the computer\n                    # };\n                    beacon_major_version = 0\n                    beacon_minor_version = 0\n                    application_host_id = 0\n                    xplane_version_number = 0\n                    role = 0\n                    port = 0\n                    (\n                        beacon_major_version,  # 1 at the time of X-Plane 10.40\n                        beacon_minor_version,  # 1 at the time of X-Plane 10.40\n                        application_host_id,   # 1 for X-Plane, 2 for PlaneMaker\n                        xplane_version_number,  # 104014 for X-Plane 10.40b14\n                        role,                  # 1 for master, 2 for extern visual, 3 for IOS\n                        port,                  # port number X-Plane is listening on\n                    ) = struct.unpack(\"<BBiiIH\", data)\n                    computer_name = packet[21:-1]\n                    if beacon_major_version == 1 \\\n                       and beacon_minor_version == 1 \\\n                       and application_host_id == 1:\n                        self.BeaconData[\"IP\"] = sender[0]\n                        self.BeaconData[\"Port\"] = port\n                        self.BeaconData[\"hostname\"] = computer_name.decode()\n                        self.BeaconData[\"XPlaneVersion\"] = xplane_version_number\n                        self.BeaconData[\"role\"] = role\n\n            except socket.timeout:\n                raise XPlaneIpNotFound()\n\n        sock.close()\n        return self.BeaconData\n\n\n\n\n\nif __name__ == \"__main__\":\n    \"\"\"\n    This allows for X-Plane 10 to be used as a visualisation tool for SHARPy simulations \n\n    Requirements:\n\n        1. X-Plane 10 (add something that says that it is running) with an aircraft loaded  \n\n        2. For visualisation of aeroelastic deformation of wing, an aircraft (created Plane Maker) with variable \n        diehedral and sweep is required. \n        For visualisation of control surface deflections, ensure the aircraft used has those surfaces and note on\n        which wing (X-Plane numbering) they are on. \n\n        3. Pickled SHARPy simulation \n\n        4. A ``YAML`` file that contains a list of output (sent to X-Plane) variables in the same folder as this file \n        Refer to :class:`~sharpy.io.network_interface.NetworkLoader` doc string for more info\n\n    How to use:\n        Before running script:\n\n            - Check that constants MAX_DIHEDRAL and MAX_SWEEP correspond to aircraft created in Plane Maker \n            - Check that the dataref paths correspond to the correct wing surfaces \n            - Include any additional dataref paths that maybe required\n            - Adapt run to include/exclude any dataref paths\n            - Open X-Plane with desired aircraft\n\n        To run in command line:\n        ::\n            python /path/to/<this file> -r /path/to/<pickled sharpy simulation> \n        \n        To check that X-Plane is receiving all information being sent, get X-Plane to dump net data to log.txt.\n        Under Settings > Operations & Warnings > Data > dumpt net data to log.txt.\n        Log.txt can be found under the X-Plane 10 folder in your computer.\n\n    How it works:\n\n        1.  Finds X-Plane 10 via Beacon (uses multicast)\n        2.  Finds default IP and an open port to send simulation information via \n        3.  Initialises SHARPy UDPout post-processor \n        4.  For every timestep in the simulation, send the information specified in run via UDP to the X-Plane datarefs\n\n    Adapted from:\n    https://github.com/charlylima/XPlaneUDP/blob/master/XPlaneUdp.py\n    Original is for receiving data from X-Plane and has been adapted to send data to X-Plane\n\n    See also: X-Plane Manual for sending and receiving info to X-Plane found in installed folder.\n    X-Plane 10 > Instructions > Sending Data to X-plane.rtfd > TXT.rtf\n\n    \"\"\"\n\n    import argparse\n    import time\n\n    parser = argparse.ArgumentParser()\n    parser.add_argument('-r', '--restart', help='restart the solution with a given snapshot', type=str,\n                        default=None, required=True)\n\n    args = parser.parse_args()\n\n    try:\n        with open(args.restart, 'rb') as restart_file:\n            data = pickle.load(restart_file)\n    except FileNotFoundError:\n        raise FileNotFoundError('The file specified for the snapshot \\\n            restart (-r) does not exist. Please check.')\n\n    xp = XPlaneUdp(data)\n\n    for _ in range(data.ts + 1):\n        xp.run()\n        # Prevents all simulaiton info from being sent all at once\n        time.sleep(0.03)\n"
  },
  {
    "path": "setup.py",
    "content": "from setuptools import setup, find_packages, Extension, Command\n#from skbuild import setup\nfrom setuptools.command.build_ext import build_ext\nimport subprocess\n\nimport re\nimport os\n\nclass CMakeBuildExt(build_ext):\n    \"\"\"Custom command to build Submodules packages during installation.\"\"\"\n\n    # def copy_extensions_to_source(self):\n    #     \"Override the method to prevent copying package files\"\n    #     pass\n    \n    def finalize_options(self):\n        super().finalize_options()\n        # Process and use os.environ['CUSTOM_CONFIG_SETTINGS'] as needed\n        self.pip_nobuild = os.environ.get('PIP_NOBUILD')\n\n    def run(self):\n\n        package_dir = os.path.dirname(os.path.abspath(__file__))\n        build_dir = package_dir + \"/build\"\n        cmake_args = []\n        if self.pip_nobuild==\"yes\":\n            pass\n        else:\n            if not os.path.isdir(build_dir):\n                os.makedirs(build_dir)\n            subprocess.check_call(\n                [\"cmake\", \"..\"] + cmake_args, cwd=build_dir\n            )\n            subprocess.check_call(\n                [\"make\", \"install\", \"-j4\"], cwd=build_dir\n            )\n\n        super().run()\n\ndef run():\n\n    pip_nobuild = os.environ.get('PIP_NOBUILD')\n    package_dir = os.path.dirname(os.path.abspath(__file__))\n    build_dir = package_dir + \"/build\"\n    cmake_args = []\n    if pip_nobuild==\"yes\":\n        pass\n    else:\n        if not os.path.isdir(build_dir):\n            os.makedirs(build_dir)\n        subprocess.check_call(\n            [\"cmake\", \"..\"] + cmake_args, cwd=build_dir\n        )\n        subprocess.check_call(\n            [\"make\", \"install\", \"-j4\"], cwd=build_dir\n        )\n\nclass BuildCommand(Command):\n    \"\"\"Custom command to build Submodules packages without installation.\"\"\"\n\n    description = 'Build Submodules in lib packages'\n    user_options = [\n        ('cmake-args=', None, 'Additional CMake arguments'),\n    ]\n\n    def initialize_options(self):\n        self.cmake_args = None\n\n    def finalize_options(self):\n        pass\n\n    def run(self):\n        # Run the CMake build step with additional cmake_args\n        package_dir = os.path.dirname(os.path.abspath(__file__))\n        build_dir = package_dir + \"/build\"\n        if not os.path.isdir(build_dir):\n            os.makedirs(build_dir)\n        if self.cmake_args is not None:\n            subprocess.check_call(\n                [\"cmake\", f\"{self.cmake_args}\", \"..\"], cwd=build_dir\n            )\n        else:\n            subprocess.check_call(\n                [\"cmake\", \"..\"], cwd=build_dir\n            )\n            \n        subprocess.check_call(\n            [\"make\", \"install\", \"-j4\"], cwd=build_dir\n        )\n\next_modules = [\n    Extension('lib', []),\n    # Add more Extension instances for additional extension modules\n]\n\nthis_directory = os.path.abspath(os.path.dirname(__file__))\n__version__ = re.findall(\n    r\"\"\"__version__ = [\"']+([0-9\\.]*)[\"']+\"\"\",\n    open(os.path.join(this_directory, \"sharpy/version.py\")).read(),\n)[0]\n\nwith open(os.path.join(this_directory, \"README.md\"), encoding=\"utf-8\") as f:\n    long_description = f.read()\nrun()\nsetup(\n    name=\"ic_sharpy\", # due to the name sharpy being taken on pypi\n    version=__version__,\n    description=\"\"\"SHARPy is a nonlinear aeroelastic analysis package developed\n    at the Department of Aeronautics, Imperial College London. It can be used\n    for the structural, aerodynamic and aeroelastic analysis of flexible\n    aircraft, flying wings and wind turbines.\"\"\",\n    long_description=long_description,\n    long_description_content_type=\"text/markdown\",\n    keywords=\"nonlinear aeroelastic structural aerodynamic analysis\",\n    author=\"\",\n    author_email=\"\",\n    url=\"https://github.com/ImperialCollegeLondon/sharpy\",\n    license=\"BSD 3-Clause License\",\n    #ext_modules=ext_modules,\n    cmdclass={#\"build_ext\": CMakeBuildExt,\n              \"build_subm\": BuildCommand},\n    packages=find_packages(\n        where='./',\n        include=['sharpy*'],\n        exclude=['tests']\n        ),\n    # data_files=[\n    #     (\"./lib/UVLM/lib\", [\"libuvlm.so\"]),\n    #     (\"./lib/xbeam/lib\", [\"libxbeam.so\"])\n    #     ],\n    python_requires=\">=3.8\",\n    install_requires=[\n        \"numpy<2.0\",\n        \"configobj\",\n        \"h5py\",\n        \"scipy<1.14.0\",\n        \"sympy\",\n        \"matplotlib\",\n        \"colorama\",\n        \"dill\",\n        \"jupyterlab\",\n        \"pandas\",\n        \"control\",\n        \"openpyxl>=3.0.10\",\n        \"lxml>=4.4.1\",\n        \"PySocks\",\n        \"PyYAML\",\n        \"jax\",\n        \"vtk\",\n    ],\n    extras_require={\n        \"docs\": [\n            \"sphinx\",\n            \"recommonmark>=0.6.0\",\n            \"sphinx_rtd_theme>=0.4.3\",\n            \"nbsphinx>=0.4.3\"\n                 ],\n        \"all\": [\n            \"sphinx\",\n            \"recommonmark>=0.6.0\",\n            \"sphinx_rtd_theme>=0.4.3\",\n            \"nbsphinx>=0.4.3\"\n                 ],\n    },\n    classifiers=[\n        \"Operating System :: MacOS\",\n        \"Operating System :: POSIX :: Linux\",\n        \"Programming Language :: Python :: 3.10\",\n        \"Programming Language :: Fortran\",\n        \"Programming Language :: C++\"\n        ],\n\n    entry_points={\n        'console_scripts': ['sharpy=sharpy.sharpy_main:sharpy_run'],\n        }\n)\n"
  },
  {
    "path": "sharpy/__init__.py",
    "content": "from .version import __version__\n"
  },
  {
    "path": "sharpy/aero/__init__.py",
    "content": "\"\"\"Aerodynamic Packages\"\"\""
  },
  {
    "path": "sharpy/aero/models/__init__.py",
    "content": ""
  },
  {
    "path": "sharpy/aero/models/aerogrid.py",
    "content": "\"\"\"Aerogrid\n\nAerogrid contains all the necessary routines to generate an aerodynamic\ngrid based on the input dictionaries.\n\"\"\"\nimport ctypes as ct\nimport warnings\n\nimport numpy as np\nimport scipy.interpolate\n\nimport sharpy.utils.algebra as algebra\nimport sharpy.utils.cout_utils as cout\nfrom sharpy.utils.datastructures import AeroTimeStepInfo\nimport sharpy.utils.generator_interface as gen_interface\n\nfrom sharpy.aero.models.grid import Grid\n\n\nclass Aerogrid(Grid):\n    \"\"\"\n    ``Aerogrid`` is the main object containing information of the grid of panels\n\n    It is created by the solver :class:`sharpy.solvers.aerogridloader.AerogridLoader`\n\n    \"\"\"\n\n    def __init__(self):\n        super().__init__()\n        self.dimensions_star = None\n        self.airfoil_db = dict()\n\n        self.grid_type = \"aero\"\n        self.n_control_surfaces = 0\n\n        self.cs_generators = []\n\n        self.initial_strip_z_rot = None\n\n    def generate(self, data_dict, beam, settings, ts):\n        super().generate(data_dict, beam, settings, ts)\n\n        # write grid info to screen\n        self.output_info()\n\n        # allocating initial grid storage\n        self.ini_info = AeroTimeStepInfo(self.dimensions,\n                                         self.dimensions_star)\n\n        # Initial panel orientation, used when aligned grid is off\n        self.initial_strip_z_rot = np.zeros([self.n_elem, 3])\n        if not settings['aligned_grid'] and settings['initial_align']:\n            for i_elem in range(self.n_elem):\n                for i_local_node in range(3):\n                    Cab = algebra.crv2rotation(beam.ini_info.psi[i_elem, i_local_node, :])\n                    self.initial_strip_z_rot[i_elem, i_local_node] = \\\n                        algebra.angle_between_vectors_sign(settings['freestream_dir'], Cab[:, 1], Cab[:, 2])\n\n        # load airfoils db\n        # for i_node in range(self.n_node):\n        for i_elem in range(self.n_elem):\n            for i_local_node in range(self.beam.num_node_elem):\n                try:\n                    self.airfoil_db[self.data_dict['airfoil_distribution'][i_elem, i_local_node]]\n                except KeyError:\n                    airfoil_coords = self.data_dict['airfoils'][\n                        str(self.data_dict['airfoil_distribution'][i_elem, i_local_node])]\n                    self.airfoil_db[self.data_dict['airfoil_distribution'][i_elem, i_local_node]] = (\n                        scipy.interpolate.interp1d(airfoil_coords[:, 0],\n                                                   airfoil_coords[:, 1],\n                                                   kind='quadratic',\n                                                   copy=False,\n                                                   fill_value='extrapolate',\n                                                   assume_sorted=True))\n        try:\n            self.n_control_surfaces = np.sum(np.unique(self.data_dict['control_surface']) >= 0)\n        except KeyError:\n            pass\n\n        # Backward compatibility: check whether control surface deflection aero_settings have been specified. If not, create\n        # section with empty list, such that no cs generator is appended\n        try:\n            settings['control_surface_deflection']\n        except KeyError:\n            settings.update({'control_surface_deflection': [''] * self.n_control_surfaces})\n\n        # pad ctrl surfaces dict with empty strings if not defined\n        if len(settings['control_surface_deflection']) != self.n_control_surfaces:\n            undef_ctrl_sfcs = [''] * (self.n_control_surfaces - len(settings['control_surface_deflection']))\n            settings['control_surface_deflection'].extend(undef_ctrl_sfcs)\n\n        # initialise generators\n        with_error_initialising_cs = False\n        for i_cs in range(self.n_control_surfaces):\n            if settings['control_surface_deflection'][i_cs] == '':\n                self.cs_generators.append(None)\n            else:\n                cout.cout_wrap('Initialising Control Surface {:g} generator'.format(i_cs), 1)\n                # check that the control surface is not static\n                if self.data_dict['control_surface_type'][i_cs] == 0:\n                    raise TypeError('Control surface {:g} is defined as static but there is a control surface generator'\n                                    'associated with it'.format(i_cs))\n                generator_type = gen_interface.generator_from_string(\n                    settings['control_surface_deflection'][i_cs])\n                self.cs_generators.append(generator_type())\n                try:\n                    self.cs_generators[i_cs].initialise(\n                        settings['control_surface_deflection_generator_settings'][str(i_cs)])\n                except KeyError:\n                    with_error_initialising_cs = True\n                    cout.cout_wrap('Error, unable to locate a settings dictionary for control surface '\n                                   '{:g}'.format(i_cs), 4)\n\n        if with_error_initialising_cs:\n            raise KeyError('Unable to locate settings for at least one control surface.')\n\n        self.add_timestep()\n        self.generate_mapping()\n        self.generate_zeta(self.beam, self.aero_settings, ts)\n\n        if 'polars' in self.data_dict:\n            import sharpy.aero.utils.airfoilpolars as ap\n            self.polars = []\n            nairfoils = np.amax(self.data_dict['airfoil_distribution']) + 1\n            for iairfoil in range(nairfoils):\n                new_polar = ap.Polar()\n                new_polar.initialise(data_dict['polars'][str(iairfoil)])\n                self.polars.append(new_polar)\n\n    def output_info(self):\n        cout.cout_wrap('The aerodynamic grid contains %u surfaces' % self.n_surf, 1)\n        for i_surf in range(self.n_surf):\n            cout.cout_wrap('  Surface %u, M=%u, N=%u' % (i_surf,\n                                                         self.dimensions[i_surf, 0],\n                                                         self.dimensions[i_surf, 1]), 1)\n            cout.cout_wrap('     Wake %u, M=%u, N=%u' % (i_surf,\n                                                         self.dimensions_star[i_surf, 0],\n                                                         self.dimensions_star[i_surf, 1]))\n        cout.cout_wrap('  In total: %u bound panels' % (sum(self.dimensions[:, 0] *\n                                                            self.dimensions[:, 1])))\n        cout.cout_wrap('  In total: %u wake panels' % (sum(self.dimensions_star[:, 0] *\n                                                           self.dimensions_star[:, 1])))\n        cout.cout_wrap('  Total number of panels = %u' % (sum(self.dimensions[:, 0] *\n                                                              self.dimensions[:, 1]) +\n                                                          sum(self.dimensions_star[:, 0] *\n                                                              self.dimensions_star[:, 1])))\n\n    def calculate_dimensions(self):\n        super().calculate_dimensions()\n\n        self.dimensions_star = self.dimensions.copy()\n        self.dimensions_star[:, 0] = self.aero_settings['mstar']\n\n    def generate_zeta_timestep_info(self, structure_tstep, aero_tstep, beam, settings, it=None, dt=None):\n        if it is None:\n            it = len(beam.timestep_info) - 1\n        global_node_in_surface = []\n        for i_surf in range(self.n_surf):\n            global_node_in_surface.append([])\n\n        # check that we have control surface information\n        try:\n            self.data_dict['control_surface']\n            with_control_surfaces = True\n        except KeyError:\n            with_control_surfaces = False\n\n        # check that we have sweep information\n        try:\n            self.data_dict['sweep']\n        except KeyError:\n            self.data_dict['sweep'] = np.zeros_like(self.data_dict['twist'])\n\n        # Define first_twist for backwards compatibility\n        if 'first_twist' not in self.data_dict:\n            self.data_dict['first_twist'] = [True] * self.data_dict['surface_m'].shape[0]\n\n        # one surface per element\n        for i_elem in range(self.n_elem):\n            i_surf = self.data_dict['surface_distribution'][i_elem]\n            # check if we have to generate a surface here\n            if i_surf == -1:\n                continue\n\n            for i_local_node in range(len(self.beam.elements[i_elem].global_connectivities)):\n                i_global_node = self.beam.elements[i_elem].global_connectivities[i_local_node]\n                # i_global_node = self.beam.elements[i_elem].global_connectivities[\n                #     self.beam.elements[i_elem].ordering[i_local_node]]\n                if not self.data_dict['aero_node'][i_global_node]:\n                    continue\n                if i_global_node in global_node_in_surface[i_surf]:\n                    continue\n                else:\n                    global_node_in_surface[i_surf].append(i_global_node)\n\n                # find the i_surf and i_n data from the mapping\n                i_n = -1\n                ii_surf = -1\n                for i in range(len(self.struct2aero_mapping[i_global_node])):\n                    i_n = self.struct2aero_mapping[i_global_node][i]['i_n']\n                    ii_surf = self.struct2aero_mapping[i_global_node][i]['i_surf']\n                    if ii_surf == i_surf:\n                        break\n                # make sure it found it\n                if i_n == -1 or ii_surf == -1:\n                    raise AssertionError('Error 12958: Something failed with the mapping in aerogrid.py. Check/report!')\n\n                # control surface implementation\n                control_surface_info = None\n                if with_control_surfaces:\n                    # 1) check that this node and elem have a control surface\n                    if self.data_dict['control_surface'][i_elem, i_local_node] >= 0:\n                        i_control_surface = self.data_dict['control_surface'][i_elem, i_local_node]\n                        # 2) type of control surface + write info\n                        control_surface_info = dict()\n                        if self.data_dict['control_surface_type'][i_control_surface] == 0:\n                            control_surface_info['type'] = 'static'\n                            control_surface_info['deflection'] = self.data_dict['control_surface_deflection'][\n                                i_control_surface]\n                            control_surface_info['chord'] = self.data_dict['control_surface_chord'][i_control_surface]\n                            try:\n                                control_surface_info['hinge_coords'] = self.data_dict['control_surface_hinge_coords'][\n                                    i_control_surface]\n                            except KeyError:\n                                control_surface_info['hinge_coords'] = None\n                        elif self.data_dict['control_surface_type'][i_control_surface] == 1:\n                            control_surface_info['type'] = 'dynamic'\n                            control_surface_info['chord'] = self.data_dict['control_surface_chord'][i_control_surface]\n                            try:\n                                control_surface_info['hinge_coords'] = self.data_dict['control_surface_hinge_coords'][\n                                    i_control_surface]\n                            except KeyError:\n                                control_surface_info['hinge_coords'] = None\n\n                            params = {'it': it}\n                            control_surface_info['deflection'], control_surface_info['deflection_dot'] = \\\n                                self.cs_generators[i_control_surface](params)\n\n                        elif self.data_dict['control_surface_type'][i_control_surface] == 2:\n                            control_surface_info['type'] = 'controlled'\n\n                            try:\n                                old_deflection = self.data.aero.timestep_info[-1].control_surface_deflection[\n                                    i_control_surface]\n                            except AttributeError:\n                                try:\n                                    old_deflection = aero_tstep.control_surface_deflection[i_control_surface]\n                                except IndexError:\n                                    old_deflection = self.data_dict['control_surface_deflection'][i_control_surface]\n\n                            try:\n                                control_surface_info['deflection'] = aero_tstep.control_surface_deflection[\n                                    i_control_surface]\n                            except IndexError:\n                                control_surface_info['deflection'] = self.data_dict['control_surface_deflection'][\n                                    i_control_surface]\n\n                            if dt is not None:\n                                control_surface_info['deflection_dot'] = (\n                                        (control_surface_info['deflection'] - old_deflection) / dt)\n                            else:\n                                control_surface_info['deflection_dot'] = 0.0\n\n                            control_surface_info['chord'] = self.data_dict['control_surface_chord'][i_control_surface]\n\n                            try:\n                                control_surface_info['hinge_coords'] = self.data_dict['control_surface_hinge_coords'][\n                                    i_control_surface]\n                            except KeyError:\n                                control_surface_info['hinge_coords'] = None\n                        else:\n                            raise NotImplementedError(str(self.data_dict['control_surface_type'][i_control_surface]) +\n                                                      ' control surfaces are not yet implemented')\n\n                # add sweep for aerogrid warping in constraint defintition\n                # if no constraint_xx.aerogrid warp factor is provided or the constraint is not an actuated type,\n                # this will be ignored\n                ang_warp = 0.\n                if structure_tstep.mb_dict is not None and structure_tstep.mb_prescribed_dict is not None:\n                    for i_constraint in range(structure_tstep.mb_dict['num_constraints']):\n                        cst_name = f\"constraint_{i_constraint:02d}\"\n                        if ('controller_id' in structure_tstep.mb_dict[cst_name]\n                                and 'aerogrid_warp_factor' in structure_tstep.mb_dict[cst_name]):\n                            ctrl_id = structure_tstep.mb_dict[cst_name]['controller_id'].decode('UTF-8')\n                            f_warp = structure_tstep.mb_dict[cst_name]['aerogrid_warp_factor'][i_elem, i_local_node]\n                            ang_z = structure_tstep.mb_prescribed_dict[ctrl_id]['delta_psi'][2]\n                            ang_warp += f_warp * ang_z\n\n                node_info = dict()\n                node_info['i_node'] = i_global_node\n                node_info['i_local_node'] = i_local_node\n                node_info['chord'] = self.data_dict['chord'][i_elem, i_local_node] / np.cos(ang_warp)\n                node_info['eaxis'] = self.data_dict['elastic_axis'][i_elem, i_local_node]\n                node_info['twist'] = self.data_dict['twist'][i_elem, i_local_node]\n                node_info['sweep'] = self.data_dict['sweep'][i_elem, i_local_node] + ang_warp\n                node_info['M'] = self.dimensions[i_surf, 0]\n                node_info['M_distribution'] = self.data_dict['m_distribution'].decode('ascii')\n                node_info['airfoil'] = self.data_dict['airfoil_distribution'][i_elem, i_local_node]\n                node_info['control_surface'] = control_surface_info\n                node_info['beam_coord'] = structure_tstep.pos[i_global_node, :]\n                node_info['pos_dot'] = structure_tstep.pos_dot[i_global_node, :]\n                node_info['beam_psi'] = structure_tstep.psi[i_elem, i_local_node, :]\n                node_info['psi_dot'] = structure_tstep.psi_dot[i_elem, i_local_node, :]\n                node_info['for_delta'] = beam.frame_of_reference_delta[i_elem, i_local_node, :]\n                node_info['elem'] = beam.elements[i_elem]\n                node_info['for_pos'] = structure_tstep.for_pos\n                node_info['cga'] = structure_tstep.cga()\n                if node_info['M_distribution'].lower() == 'user_defined':\n                    ielem_in_surf = i_elem - np.sum(self.surface_distribution < i_surf)\n                    node_info['user_defined_m_distribution'] = self.data_dict['user_defined_m_distribution'][\n                                                                   str(i_surf)][:, ielem_in_surf, i_local_node]\n                (aero_tstep.zeta[i_surf][:, :, i_n],\n                 aero_tstep.zeta_dot[i_surf][:, :, i_n]) = (\n                    generate_strip(node_info,\n                                   self.airfoil_db,\n                                   self.aero_settings['aligned_grid'],\n                                   initial_strip_z_rot=self.initial_strip_z_rot[i_elem, i_local_node],\n                                   orientation_in=self.aero_settings['freestream_dir'],\n                                   calculate_zeta_dot=True))\n        # set junction boundary conditions for later phantom cell creation in UVLM\n        if \"junction_boundary_condition\" in self.data_dict:\n            if np.any(self.data_dict[\"junction_boundary_condition\"] >= 0):\n                self.generate_phantom_panels_at_junction(aero_tstep)\n\n    def generate_phantom_panels_at_junction(self, aero_tstep):\n        for i_surf in range(self.n_surf):\n            aero_tstep.flag_zeta_phantom[0, i_surf] = self.data_dict[\"junction_boundary_condition\"][0, i_surf]\n\n    @staticmethod\n    def compute_gamma_dot(dt, tstep, previous_tsteps):\n        r\"\"\"\n        Computes the temporal derivative of circulation (gamma) using finite differences.\n\n        It will use a first order approximation for the first evaluation\n        (when ``len(previous_tsteps) == 1``), and then second order ones.\n\n        .. math:: \\left.\\frac{d\\Gamma}{dt}\\right|^n \\approx \\lim_{\\Delta t \\rightarrow 0}\\frac{\\Gamma^n-\\Gamma^{n-1}}{\\Delta t}\n\n        For the second time step and onwards, the following second order approximation is used:\n\n        .. math:: \\left.\\frac{d\\Gamma}{dt}\\right|^n \\approx \\lim_{\\Delta t \\rightarrow 0}\\frac{3\\Gamma^n -4\\Gamma^{n-1}+\\Gamma^{n-2}}{2\\Delta t}\n\n        Args:\n            dt (float): delta time for the finite differences\n            tstep (AeroTimeStepInfo): tstep at time n (current)\n            previous_tsteps (list(AeroTimeStepInfo)): previous tstep structure in order: ``[n-N,..., n-2, n-1]``\n\n        Returns:\n            float: first derivative of circulation with respect to time\n\n        See Also:\n            .. py:class:: sharpy.utils.datastructures.AeroTimeStepInfo\n        \"\"\"\n        # Check whether the iteration is part of FSI (ie the input is a k-step) or whether it is an only aerodynamic\n        # simulation\n        part_of_fsi = True\n        try:\n            if tstep is previous_tsteps[-1]:\n                part_of_fsi = False\n        except IndexError:\n            for i_surf in range(tstep.n_surf):\n                tstep.gamma_dot[i_surf].fill(0.0)\n            return\n\n        if len(previous_tsteps) == 0:\n            for i_surf in range(tstep.n_surf):\n                tstep.gamma_dot[i_surf].fill(0.0)\n\n        if part_of_fsi:\n            for i_surf in range(tstep.n_surf):\n                tstep.gamma_dot[i_surf] = (tstep.gamma[i_surf] - previous_tsteps[-1].gamma[i_surf]) / dt\n        else:\n            for i_surf in range(tstep.n_surf):\n                tstep.gamma_dot[i_surf] = (tstep.gamma[i_surf] - previous_tsteps[-2].gamma[i_surf]) / dt\n\n\ndef generate_strip(node_info, airfoil_db, aligned_grid,\n                   initial_strip_z_rot,\n                   orientation_in=np.array([1, 0, 0]),\n                   calculate_zeta_dot=False,\n                   first_twist=True):\n    \"\"\"\n    Returns a strip of panels in ``A`` frame of reference, it has to be then rotated to\n    simulate angles of attack, etc\n    \"\"\"\n    strip_coordinates_a_frame = np.zeros((3, node_info['M'] + 1), dtype=ct.c_double)\n    strip_coordinates_b_frame = np.zeros((3, node_info['M'] + 1), dtype=ct.c_double)\n    zeta_dot_a_frame = np.zeros((3, node_info['M'] + 1), dtype=ct.c_double)\n\n    # airfoil coordinates\n    # we are going to store everything in the x-z plane of the b\n    # FoR, so that the transformation Cab rotates everything in place.\n    if node_info['M_distribution'] == 'uniform':\n        strip_coordinates_b_frame[1, :] = np.linspace(0.0, 1.0, node_info['M'] + 1)\n    elif node_info['M_distribution'] == '1-cos':\n        domain = np.linspace(0, 1.0, node_info['M'] + 1)\n        strip_coordinates_b_frame[1, :] = 0.5 * (1.0 - np.cos(domain * np.pi))\n    elif node_info['M_distribution'].lower() == 'user_defined':\n        strip_coordinates_b_frame[1, :] = node_info['user_defined_m_distribution']\n    else:\n        raise NotImplemented('M_distribution is ' + node_info['M_distribution'] +\n                             ' and it is not yet supported')\n    strip_coordinates_b_frame[2, :] = airfoil_db[node_info['airfoil']](\n        strip_coordinates_b_frame[1, :])\n\n    # elastic axis correction\n    for i_M in range(node_info['M'] + 1):\n        strip_coordinates_b_frame[1, i_M] -= node_info['eaxis']\n\n    # chord_line_b_frame = strip_coordinates_b_frame[:, -1] - strip_coordinates_b_frame[:, 0]\n    cs_velocity = np.zeros_like(strip_coordinates_b_frame)\n\n    # control surface deflection\n    if node_info['control_surface'] is not None:\n        b_frame_hinge_coords = strip_coordinates_b_frame[:, node_info['M'] - node_info['control_surface']['chord']]\n        # support for different hinge location for fully articulated control surfaces\n        if node_info['control_surface']['hinge_coords'] is not None:\n            # make sure the hinge coordinates are only applied when M == cs_chord\n            if not node_info['M'] - node_info['control_surface']['chord'] == 0:\n                node_info['control_surface']['hinge_coords'] = None\n            else:\n                b_frame_hinge_coords = node_info['control_surface']['hinge_coords']\n\n        for i_M in range(node_info['M'] - node_info['control_surface']['chord'], node_info['M'] + 1):\n            relative_coords = strip_coordinates_b_frame[:, i_M] - b_frame_hinge_coords\n            # rotate the control surface\n            relative_coords = np.dot(algebra.rotation3d_x(-node_info['control_surface']['deflection']),\n                                     relative_coords)\n            # deflection velocity\n            try:\n                cs_velocity[:, i_M] += np.cross(np.array([-node_info['control_surface']['deflection_dot'], 0.0, 0.0]),\n                                                relative_coords)\n            except KeyError:\n                pass\n\n            # restore coordinates\n            relative_coords += b_frame_hinge_coords\n\n            # substitute with new coordinates\n            strip_coordinates_b_frame[:, i_M] = relative_coords\n\n    # chord scaling\n    strip_coordinates_b_frame *= node_info['chord']\n\n    # twist transformation (rotation around x_b axis)\n    if np.abs(node_info['twist']) > 1e-6:\n        Ctwist = algebra.rotation3d_x(node_info['twist'])\n    else:\n        Ctwist = np.eye(3)\n\n    # Cab transformation\n    Cab = algebra.crv2rotation(node_info['beam_psi'])\n\n    if aligned_grid:\n        rot_angle = algebra.angle_between_vectors_sign(orientation_in, Cab[:, 1], Cab[:, 2])\n    else:\n        rot_angle = initial_strip_z_rot\n    Crot = algebra.rotation3d_z(-rot_angle)\n\n    c_sweep = np.eye(3)\n    if np.abs(node_info['sweep']) > 1e-6:\n        c_sweep = algebra.rotation3d_z(node_info['sweep'])\n\n    # transformation from beam to beam prime (with sweep and twist)\n    for i_M in range(node_info['M'] + 1):\n        if first_twist:\n            strip_coordinates_b_frame[:, i_M] = np.dot(c_sweep, np.dot(Crot,\n                                                                       np.dot(Ctwist,\n                                                                              strip_coordinates_b_frame[:, i_M])))\n        else:\n            strip_coordinates_b_frame[:, i_M] = np.dot(Ctwist, np.dot(Crot,\n                                                                      np.dot(c_sweep,\n                                                                             strip_coordinates_b_frame[:, i_M])))\n        strip_coordinates_a_frame[:, i_M] = np.dot(Cab, strip_coordinates_b_frame[:, i_M])\n\n        cs_velocity[:, i_M] = np.dot(Cab, cs_velocity[:, i_M])\n\n    # zeta_dot\n    if calculate_zeta_dot:\n        # velocity due to pos_dot\n        for i_M in range(node_info['M'] + 1):\n            zeta_dot_a_frame[:, i_M] += node_info['pos_dot']\n\n        # velocity due to psi_dot\n        omega_a = algebra.crv_dot2omega(node_info['beam_psi'], node_info['psi_dot'])\n        for i_M in range(node_info['M'] + 1):\n            zeta_dot_a_frame[:, i_M] += (\n                np.dot(algebra.skew(omega_a), strip_coordinates_a_frame[:, i_M]))\n\n        # control surface deflection velocity contribution\n        try:\n            if node_info['control_surface'] is not None:\n                node_info['control_surface']['deflection_dot']\n                for i_M in range(node_info['M'] + 1):\n                    zeta_dot_a_frame[:, i_M] += cs_velocity[:, i_M]\n        except KeyError:\n            pass\n\n    else:\n        zeta_dot_a_frame = np.zeros((3, node_info['M'] + 1), dtype=ct.c_double)\n\n    # add node coords\n    for i_M in range(node_info['M'] + 1):\n        strip_coordinates_a_frame[:, i_M] += node_info['beam_coord']\n\n    # add quarter-chord disp\n    delta_c = (strip_coordinates_a_frame[:, -1] - strip_coordinates_a_frame[:, 0]) / node_info['M']\n    if node_info['M_distribution'] == 'uniform':\n        for i_M in range(node_info['M'] + 1):\n            strip_coordinates_a_frame[:, i_M] += 0.25 * delta_c\n    else:\n        warnings.warn(\"No quarter chord disp of grid for non-uniform grid distributions implemented\", UserWarning)\n\n    # rotation from a to g\n    for i_M in range(node_info['M'] + 1):\n        strip_coordinates_a_frame[:, i_M] = np.dot(node_info['cga'],\n                                                   strip_coordinates_a_frame[:, i_M])\n        zeta_dot_a_frame[:, i_M] = np.dot(node_info['cga'],\n                                          zeta_dot_a_frame[:, i_M])\n\n    return strip_coordinates_a_frame, zeta_dot_a_frame\n"
  },
  {
    "path": "sharpy/aero/models/grid.py",
    "content": "\"\"\"Grid\n\nGrid contains\n\"\"\"\nimport ctypes as ct\nimport warnings\n\nimport numpy as np\n\nimport sharpy.utils.algebra as algebra\nimport sharpy.utils.generator_interface as gen_interface\n\n\nclass Grid(object):\n    \"\"\"\n    ``Grid``is the parent class for the lifting surface grid and nonlifting\n    body grids.\n\n    It is created by the solver :class:`sharpy.solvers.aerogridloader.AerogridLoader`\n\n    \"\"\"\n    def __init__(self):\n        self.data_dict = None\n        self.beam = None\n        self.aero_settings = None\n        self.timestep_info = []\n        self.ini_info = None\n\n        self.surface_distribution = None\n        self.surface_m = None\n        self.dimensions = None\n        self.grid_type = None\n\n        self.n_node = 0\n        self.n_elem = 0\n        self.n_surf = 0\n        self.n_aero_node = 0\n        self.grid_type = None\n\n        self.struct2aero_mapping = None\n        self.aero2struct_mapping = []\n\n\n    def generate(self, data_dict, beam, aero_settings, ts):\n\n\n        self.data_dict = data_dict\n        self.beam = beam\n        self.aero_settings = aero_settings\n        # key words = safe in aero_settings? --> grid_type\n        # number of total nodes (structural + aero&struc)\n        self.n_node = len(data_dict[self.grid_type + '_node']) # gridtype + '_node'\n        # number of elements\n        self.n_elem = len(data_dict['surface_distribution'])\n        # surface distribution\n        self.surface_distribution = data_dict['surface_distribution']\n        # number of surfaces\n        temp = set(data_dict['surface_distribution'])\n        #TO-DO: improve: avoid for loops\n        self.n_surf = sum(1 for i in temp if i >= 0)\n        # number of chordwise panels\n        self.surface_m = data_dict['surface_m']\n        # number of aero nodes\n        self.n_aero_node = sum(data_dict[self.grid_type + '_node'])\n\n\n        # get N per surface\n        self.calculate_dimensions()\n\n        # write grid info to screen\n        # self.output_info()\n\n    def calculate_dimensions(self):\n        self.dimensions = np.zeros((self.n_surf, 2), dtype=int)\n        for i in range(self.n_surf):\n            # adding M values\n            self.dimensions[i, 0] = self.surface_m[i]\n        # Improvement:\n        # self.aero.dimensions[:, 0] = self.surface_m[:]\n        # count N values (actually, the count result\n        # will be N+1)\n        nodes_in_surface = []\n\n        #IMPROVEMENT\n        for i_surf in range(self.n_surf):\n            nodes_in_surface.append([])\n\n        # Improvement!\n        for i_elem in range(self.beam.num_elem):\n            nodes = self.beam.elements[i_elem].global_connectivities\n            i_surf = self.surface_distribution[i_elem]\n            if i_surf < 0:\n                continue\n            for i_global_node in nodes:\n                if i_global_node in nodes_in_surface[i_surf]:\n                    continue\n                else:\n                    nodes_in_surface[i_surf].append(i_global_node)\n                if self.data_dict[self.grid_type + '_node'][i_global_node]:\n                    self.dimensions[i_surf, 1] += 1\n\n        # accounting for N+1 nodes -> N panels\n        self.dimensions[:, 1] -= 1\n\n\n    def add_timestep(self):\n        try:\n            self.timestep_info.append(self.timestep_info[-1].copy())\n        except IndexError:\n            self.timestep_info.append(self.ini_info.copy())\n\n    def generate_zeta_timestep_info(self, structure_tstep, aero_tstep, beam, aero_settings, it=None, dt=None):\n        if it is None:\n            it = len(beam.timestep_info) - 1\n\n\n    def generate_zeta(self, beam, aero_settings, ts=-1, beam_ts=-1):\n        self.generate_zeta_timestep_info(beam.timestep_info[beam_ts],\n                                         self.timestep_info[ts],\n                                         beam,\n                                         aero_settings)\n\n    def generate_mapping(self):\n        self.struct2aero_mapping = [[]]*self.n_node\n        surf_n_counter = np.zeros((self.n_surf,), dtype=int)\n        nodes_in_surface = []\n        for i_surf in range(self.n_surf):\n            nodes_in_surface.append([])\n        for i_elem in range(self.n_elem):\n            i_surf = self.surface_distribution[i_elem]\n            if i_surf == -1:\n                continue\n            for i_global_node in self.beam.elements[i_elem].reordered_global_connectivities:\n                if not self.data_dict[self.grid_type + '_node'][i_global_node]:\n                    continue\n\n                if i_global_node in nodes_in_surface[i_surf]:\n                    continue\n                else:\n                    nodes_in_surface[i_surf].append(i_global_node)\n                    surf_n_counter[i_surf] += 1\n                    try:\n                        self.struct2aero_mapping[i_global_node][0]\n                    except IndexError:\n                        self.struct2aero_mapping[i_global_node] = []\n\n                i_n = surf_n_counter[i_surf] - 1\n                self.struct2aero_mapping[i_global_node].append({'i_surf': i_surf,\n                                                                'i_n': i_n})\n\n        nodes_in_surface = []\n        for i_surf in range(self.n_surf):\n            nodes_in_surface.append([])\n\n        for i_surf in range(self.n_surf):\n            self.aero2struct_mapping.append([-1]*(surf_n_counter[i_surf]))\n\n        for i_elem in range(self.n_elem):\n            for i_global_node in self.beam.elements[i_elem].global_connectivities:\n                for i in range(len(self.struct2aero_mapping[i_global_node])):\n                    try:\n                        i_surf = self.struct2aero_mapping[i_global_node][i]['i_surf']\n                        i_n = self.struct2aero_mapping[i_global_node][i]['i_n']\n                        if i_global_node in nodes_in_surface[i_surf]:\n                            continue\n                        else:\n                            nodes_in_surface[i_surf].append(i_global_node)\n                    except KeyError:\n                        continue\n                    self.aero2struct_mapping[i_surf][i_n] = i_global_node\n\n    def update_orientation(self, quat, ts=-1):\n        rot = algebra.quat2rotation(quat)\n        self.timestep_info[ts].update_orientation(rot.T)\n"
  },
  {
    "path": "sharpy/aero/models/nonliftingbodygrid.py",
    "content": "\"\"\"Nonlifting Body grid\n\nDescription\n\"\"\"\n\nfrom sharpy.aero.models.grid import Grid\nfrom sharpy.utils.datastructures import NonliftingBodyTimeStepInfo\nimport numpy as np\nimport sharpy.utils.algebra as algebra\n\n\nclass NonliftingBodyGrid(Grid):\n    \"\"\"\n    ``Nonlifting Body Grid`` is the main object containing information of the\n        nonlifting bodygrid, consisting of triangular and quadrilateral panels.\n    It is created by the solver :class:`sharpy.solvers.aerogridloader.AerogridLoader`\n\n    \"\"\"\n    def __init__(self):\n        super().__init__()\n        self.grid_type = 'nonlifting_body'\n\n\n    def generate(self, data_dict, beam, nonlifting_body_settings, ts):\n        super().generate(data_dict, beam, nonlifting_body_settings, ts)\n\n        # allocating initial grid storage\n        self.ini_info = NonliftingBodyTimeStepInfo(self.dimensions)\n\n        self.add_timestep()\n        self.generate_mapping()\n        self.generate_zeta(self.beam, self.aero_settings, ts)\n\n    def generate_zeta_timestep_info(self, structure_tstep, nonlifting_body_tstep, beam, aero_settings, it=None, dt=None):\n        super().generate_zeta_timestep_info(structure_tstep, nonlifting_body_tstep, beam, aero_settings, it, dt)\n\n        for i_surf in range(self.n_surf):\n            # Get Zeta and Zeta_dot (Panel node positions in G frame)\n            nonlifting_body_tstep.zeta[i_surf], nonlifting_body_tstep.zeta_dot[i_surf] = self.get_zeta_and_zeta_dot(i_surf, structure_tstep)\n\n    def get_zeta_and_zeta_dot(self,i_surf, structure_tstep):\n        numb_radial_nodes = self.dimensions[i_surf][0] +1\n        matrix_nodes = np.zeros((3, numb_radial_nodes,\n                                 self.dimensions[i_surf][1]+1))\n        matrix_nodes_dot = matrix_nodes.copy()\n        array_phi_coordinates = np.linspace(0, 2*np.pi, numb_radial_nodes)\n        # cache sin and cos values\n        array_sin_phi = np.sin(array_phi_coordinates)\n        array_cos_phi = np.cos(array_phi_coordinates)\n\n        cga_rotation_matrix = structure_tstep.cga()\n\n        for node_counter, i_global_node in enumerate(self.aero2struct_mapping[i_surf]):\n            # 1) Set B-Frame position\n            # 1a) get cross-sectional fuselage geometry at node\n            if self.data_dict[\"shape\"].decode() == 'specific':\n                a_ellipse = self.data_dict[\"a_ellipse\"][i_global_node]\n                b_ellipse = self.data_dict[\"b_ellipse\"][i_global_node]\n                z_0 =self.data_dict[\"z_0_ellipse\"][i_global_node]\n                if a_ellipse == 0. or b_ellipse == 0.:\n                    radius = 0\n                else:\n                    radius = a_ellipse*b_ellipse/np.sqrt(\n                        (b_ellipse*array_cos_phi)**2\n                        +(a_ellipse*array_sin_phi)**2)\n            else:\n                radius = self.data_dict[\"radius\"][i_global_node]\n                z_0 = 0\n            \n            # 1b) Get nodes position in B frame\n            matrix_nodes[1, :, node_counter] = radius*array_cos_phi\n            matrix_nodes[2, :, node_counter] = radius*array_sin_phi + z_0\n            \n            # 2) A frame\n            # 2a) Convert structural position from B to A frame \n            i_elem, i_local_node = self.get_elment_and_local_node_id(i_surf, i_global_node)\n            psi_node = structure_tstep.psi[i_elem, i_local_node,:]\n            if not (psi_node == [0, 0, 0]).all():\n                # just perform roation from B to A if psi not 0\n                Cab = algebra.crv2rotation(psi_node)\n                for idx in range(numb_radial_nodes):\n                    matrix_nodes[:, idx, node_counter] = np.dot(Cab, matrix_nodes[:, idx, node_counter])\n            # 2b) Add beam displacements (expressed in A-frame)\n            for dim in range(3):\n                matrix_nodes[dim, :, node_counter] += structure_tstep.pos[i_global_node,dim]\n\n            # 2c) Add structural beam velocities (expressed in A-frame)\n            for dim in range(3):\n                # velocity due to pos_dot\n                matrix_nodes_dot[dim, :, node_counter] += structure_tstep.pos_dot[i_global_node, dim]\n            # 2d) Add effect of structural beam rotations an node velocity (expressed in A-frame)\n            psi_dot_node = structure_tstep.psi_dot[i_elem, i_local_node,:]\n            omega_a = algebra.crv_dot2omega(psi_node, psi_dot_node)     \n            for idx in range(numb_radial_nodes):\n                matrix_nodes_dot[:, idx, node_counter] += (np.dot(algebra.skew(omega_a), matrix_nodes[:, idx, node_counter]))\n            \n            # 3) Convert position and velocities from A to G frame\n            for idx in range(numb_radial_nodes):\n                matrix_nodes[:, idx, node_counter] = np.dot(cga_rotation_matrix,\n                                          matrix_nodes[:, idx, node_counter])\n                matrix_nodes_dot[:, idx, node_counter] = np.dot(cga_rotation_matrix,\n                                          matrix_nodes_dot[:, idx, node_counter])\n        return matrix_nodes, matrix_nodes_dot\n\n\n    def get_elment_and_local_node_id(self, i_surf, i_global_node):\n        # get beam elements of surface\n        idx_beam_elements_surface = np.where(self.surface_distribution == i_surf)[0]\n        # find element and local node of the global node and return psi\n        for i_elem in idx_beam_elements_surface:\n            if i_global_node in self.beam.elements[i_elem].reordered_global_connectivities:\n                i_local_node = np.where(self.beam.elements[i_elem].reordered_global_connectivities == i_global_node)[0][0]\n                return i_elem, i_local_node\n        raise Exception(\"The global node %u could not be assigned to any element of surface %u.\" % (i_global_node, i_surf))\n\n\n\n\n\n\n\n"
  },
  {
    "path": "sharpy/aero/utils/__init__.py",
    "content": "\"\"\"Aerodynamic Utilities\"\"\""
  },
  {
    "path": "sharpy/aero/utils/airfoilpolars.py",
    "content": "import numpy as np\n# import sharpy.utils.algebra as algebra\nfrom sharpy.utils.constants import deg2rad\nfrom scipy.interpolate import interp1d\n\n\nclass Polar:\n    \"\"\"\n    Airfoil polar object\n    \"\"\"\n\n    def __init__(self):\n\n        self.cm_interp = None\n        self.cd_interp = None\n        self.cl_interp = None\n        self.table = None\n        self.aoa_cl0_deg = None\n\n    def initialise(self, table):\n        \"\"\"\n        Initialise polar\n\n        Args:\n            table (np.ndarray): 4-column array containing ``aoa`` (rad), ``cl``, ``cd`` and ``cm``\n\n        \"\"\"\n        # Store the table\n        if (np.diff(table[:, 0]) > 0.).all():\n            self.table = table[~np.isnan(table).any(axis=1), :]\n        else:\n            raise RuntimeError(\"ERROR: angles of attack not ordered\")\n\n        # Look for aoa where CL=0\n        npoints = self.table.shape[0]\n        matches = []\n        for ipoint in range(npoints - 1):\n            if self.table[ipoint, 1] == 0.:\n                matches.append(self.table[ipoint, 0])\n            elif self.table[ipoint, 1] < 0. and self.table[ipoint + 1, 1] > 0:\n                if self.table[ipoint, 0] <= 0.:\n                    matches.append(np.interp(0,\n                                             self.table[ipoint:ipoint+2, 1],\n                                             self.table[ipoint:ipoint+2, 0]))\n\n        iaoacl0 = 0\n        aux = np.abs(matches[0])\n        for imin in range(len(matches)):\n            if np.abs(matches[imin]) < aux:\n                aux = np.abs(matches[imin])\n                iaoacl0 = imin\n        self.aoa_cl0_deg = matches[iaoacl0]\n\n        self.cl_interp = interp1d(self.table[:, 0], self.table[:, 1])\n        self.cd_interp = interp1d(self.table[:, 0], self.table[:, 2])\n        self.cm_interp = interp1d(self.table[:, 0], self.table[:, 3])\n\n    def get_coefs(self, aoa_deg):\n\n        cl = self.cl_interp(aoa_deg)\n        cd = self.cd_interp(aoa_deg)\n        cm = self.cm_interp(aoa_deg)\n\n        return cl[0], cd[0], cm[0]\n\n    def get_aoa_deg_from_cl_2pi(self, cl):\n\n        return cl/2/np.pi/deg2rad + self.aoa_cl0_deg\n\n\n    def redefine_aoa(self, new_aoa):\n\n        naoa = len(new_aoa)\n        # Generate the same polar interpolated at different angles of attack\n        # by linear interpolation\n        table = np.zeros((naoa, 4))\n        table[:, 0] = new_aoa\n        for icol in range(1, 4):\n            table[:, icol] = np.interp(table[:, 0],\n                                       self.table[:, 0],\n                                       self.table[:, icol])\n\n        new_polar = Polar()\n        new_polar.initialise(table)\n        return new_polar\n\n    def get_cdcm_from_cl(self, cl):\n        # Computes the cd and cm from cl\n        # It provides the first match after (or before) the AOA of CL=0\n\n        cl_max = np.max(self.table[:,1])  \n        cl_min = np.min(self.table[:,1])\n\n        if cl_max < cl or cl_min > cl:\n            print((\"cl = %.2f out of range, forces at this point will not be corrected\" % cl))  \n            cd = 0.\n            cm = 0. \n        else: \n            if cl == 0.:\n                cl_new, cd, cm = self.get_coefs(self.aoa_cl0_deg)\n            elif cl > 0.:\n                dist = np.abs(self.table[:,0] - self.aoa_cl0_deg)\n                min_dist = np.min(dist)\n                i = np.where(dist == min_dist)[0][0]\n                while self.table[i, 1] < cl:\n                    i += 1\n                cd = np.interp(cl, self.table[i-1:i+1, 1], self.table[i-1:i+1, 2])\n                cm = np.interp(cl, self.table[i-1:i+1, 1], self.table[i-1:i+1, 3])\n            else:\n                dist = np.abs(self.table[:,0] - self.aoa_cl0_deg)\n                min_dist = np.min(dist)\n                i = np.where(dist == min_dist)[0][0]\n                while self.table[i, 1] > cl:\n                        i -= 1\n                cd = np.interp(cl, self.table[i:i+2, 1], self.table[i:i+2, 2])\n                cm = np.interp(cl, self.table[i:i+2, 1], self.table[i:i+2, 3])\n        \n        return float(cd), float(cm)\n\n    \ndef interpolate(polar1, polar2, coef=0.5):\n\n    all_aoa = np.sort(np.concatenate((polar1.table[:, 0], polar2.table[:, 0]),))\n\n    different_aoa = []\n    different_aoa.append(all_aoa[0])\n    for iaoa in range(1, len(all_aoa)):\n        if not all_aoa[iaoa] == different_aoa[-1]:\n            different_aoa.append(all_aoa[iaoa])\n\n    new_polar1 = polar1.redefine_aoa(different_aoa)\n    new_polar2 = polar2.redefine_aoa(different_aoa)\n\n    table = (1. - coef)*new_polar1.table + coef*new_polar2.table\n\n    new_polar = Polar()\n    new_polar.initialise(table)\n    return new_polar\n"
  },
  {
    "path": "sharpy/aero/utils/mapping.py",
    "content": "\"\"\"Force Mapping Utilities\"\"\"\nimport numpy as np\nimport sharpy.utils.algebra as algebra\n\n\ndef aero2struct_force_mapping(aero_forces,\n                              struct2aero_mapping,\n                              zeta,\n                              pos_def,\n                              psi_def,\n                              master,\n                              conn,\n                              cag=np.eye(3),\n                              data_dict=None,\n                              skip_moments_generated_by_forces = False):\n    r\"\"\"\n    Maps the aerodynamic forces at the lattice to the structural nodes\n\n    The aerodynamic forces from the UVLM are always in the inertial ``G`` frame of reference and have to be transformed\n    to the body or local ``B`` frame of reference in which the structural forces are defined.\n\n    Since the structural nodes and aerodynamic panels are coincident in a spanwise direction, the aerodynamic forces\n    that correspond to a structural node are the summation of the ``M+1`` forces defined at the lattice at that\n    spanwise location.\n\n    .. math::\n        \\mathbf{f}_{struct}^B &= \\sum\\limits_{i=0}^{m+1}C^{BG}\\mathbf{f}_{i,aero}^G \\\\\n        \\mathbf{m}_{struct}^B &= \\sum\\limits_{i=0}^{m+1}C^{BG}(\\mathbf{m}_{i,aero}^G +\n        \\tilde{\\boldsymbol{\\zeta}}^G\\mathbf{f}_{i, aero}^G)\n\n    where :math:`\\tilde{\\boldsymbol{\\zeta}}^G` is the skew-symmetric matrix of the vector between the lattice\n    grid vertex and the structural node.\n\n    Args:\n        aero_forces (list): Aerodynamic forces from the UVLM in inertial frame of reference\n        struct2aero_mapping (dict): Structural to aerodynamic node mapping\n        zeta (list): Aerodynamic grid coordinates\n        pos_def (np.ndarray): Vector of structural node displacements\n        psi_def (np.ndarray): Vector of structural node rotations (CRVs)\n        master: Unused\n        conn (np.ndarray): Connectivities matrix\n        cag (np.ndarray): Transformation matrix between inertial and body-attached reference ``A``\n        data_dict (dict): Dictionary containing the grid's information.\n        skip_moments_generated_by_forces (bool): Flag to skip local moment calculation.\n\n    Returns:\n        np.ndarray: structural forces in an ``n_node x 6`` vector\n    \"\"\"\n\n    n_node, _ = pos_def.shape\n    n_elem, _, _ = psi_def.shape\n    struct_forces = np.zeros((n_node, 6))\n\n    nodes = []\n\n    for i_elem in range(n_elem):\n        for i_local_node in range(3):\n\n            i_global_node = conn[i_elem, i_local_node]\n            if i_global_node in nodes:\n                continue\n\n            nodes.append(i_global_node)\n            for mapping in struct2aero_mapping[i_global_node]:\n                i_surf = mapping['i_surf']\n                i_n = mapping['i_n']\n                _, n_m, _ = aero_forces[i_surf].shape\n\n                crv = psi_def[i_elem, i_local_node, :]\n                cab = algebra.crv2rotation(crv)\n                cbg = np.dot(cab.T, cag)\n\n                for i_m in range(n_m):\n                    struct_forces[i_global_node, 0:3] += np.dot(cbg, aero_forces[i_surf][0:3, i_m, i_n])\n                    struct_forces[i_global_node, 3:6] += np.dot(cbg, aero_forces[i_surf][3:6, i_m, i_n])\n                    \"\"\"\n                        The calculation of the local moment is skipped for fuselage bodies, since this \n                        leads to noticeably asymmetric aeroforces. This transitional solution makes \n                        sense since we have only considered the stiff fuselage so far and the pitching \n                        moment coming from the fuselage is mainly caused by the longitudinal force distribution.\n                        TODO: Correct the calculation of the local moment for the fuselage model.\n                    \"\"\"\n                    if not skip_moments_generated_by_forces:\n                        chi_g = zeta[i_surf][:, i_m, i_n] - np.dot(cag.T, pos_def[i_global_node, :])\n                        struct_forces[i_global_node, 3:6] += np.dot(cbg, algebra.cross3(chi_g, aero_forces[i_surf][0:3, i_m, i_n]))\n\n    return struct_forces\n\n\ndef total_forces_moments(forces_nodes_a,\n                         pos_def,\n                         ref_pos=np.array([0., 0., 0.])):\n    \"\"\"\n    Performs a summation of the forces and moments expressed at the structural nodes in the A frame of reference.\n\n    Note:\n        If you need to transform forces and moments at the nodes from B to A, use the\n        :func:`~sharpy.structure.models.beam.Beam.nodal_b_for_2_a_for()` function.\n\n    Args:\n        forces_nodes_a (np.array): ``n_node x 6`` vector of forces and moments at the nodes in A\n        pos_def (np.array): ``n_node x 3`` vector of nodal positions in A\n        ref_pos (np.array (optional)): Location in A about which to compute moments. Defaults to ``[0, 0, 0]``\n\n    Returns:\n        np.array: Vector of length 6 containing the total forces and moments expressed in A at the desired location.\n    \"\"\"\n\n    num_node = pos_def.shape[0]\n    ra_vec = pos_def - ref_pos\n\n    total_forces = np.zeros(3)\n    total_moments = np.zeros(3)\n    for i_global_node in range(num_node):\n        total_forces += forces_nodes_a[i_global_node, :3]\n        total_moments += forces_nodes_a[i_global_node, 3:] + algebra.cross3(ra_vec[i_global_node], forces_nodes_a[i_global_node, :3])\n\n    return np.concatenate((total_forces, total_moments))\n"
  },
  {
    "path": "sharpy/aero/utils/utils.py",
    "content": "\"\"\"Aero utilities functions\"\"\"\nimport numpy as np\nimport sharpy.utils.algebra as algebra\nfrom sharpy.utils import algebra as algebra\n\n\ndef flightcon_file_parser(fc_dict):\n    fc = fc_dict['FlightCon']\n    fc['u_inf'] = float(fc['u_inf'])\n    fc['alpha'] = float(fc['alpha'])*np.pi/180.0\n    fc['beta'] = float(fc['beta'])*np.pi/180.0\n    fc['rho_inf'] = float(fc['rho_inf'])\n    fc['c_ref'] = float(fc['c_ref'])\n    fc['b_ref'] = float(fc['b_ref'])\n\n\ndef alpha_beta_to_direction(alpha, beta):\n    direction = np.array([1, 0, 0])\n    alpha_rot = algebra.rotation3d_y(alpha)\n    beta_rot = algebra.rotation3d_z(beta)\n    direction = np.dot(beta_rot, np.dot(alpha_rot, direction))\n    return direction\n\n\ndef magnitude_and_direction_of_relative_velocity(displacement, displacement_vel, for_vel, cga, uext,\n                                                 add_rotation=False, rot_vel_g=np.zeros((3)), centre_rot_g=np.zeros((3))):\n    r\"\"\"\n    Calculates the magnitude and direction of the relative velocity ``u_rel`` at a local section of the wing.\n\n    .. math::\n\n       u_{rel, i}^G = \\bar{U}_{\\infty, i}^G - C^{GA}(\\chi)(\\dot{\\eta}_i^A + v^A + \\tilde{\\omega}^A\\eta_i^A\n\n    where :math:`\\bar{U}_{\\infty, i}^G` is the average external velocity across all aerodynamic nodes at the\n    relevant cross section.\n\n    Args:\n        displacement (np.array): Unit vector in the direction of the free stream velocity expressed in A frame.\n        displacement_vel (np.array): Unit vector in the direction of the local chord expressed in A frame.\n        for_vel (np.array): ``A`` frame of reference (FoR) velocity. Expressed in A FoR\n        cga (np.array): Rotation vector from FoR ``G`` to FoR ``A``\n        uext (np.array): Background flow velocity on solid grid nodes\n        add_rotation (bool): Adds rotation velocity. Probalby needed in steady computations\n        rot_vel_g (np.array): Rotation velocity. Only used if add_rotation = True\n        centre_rot_g (np.array): Centre of rotation. Only used if add_rotation = True\n\n    Returns:\n        tuple: ``u_rel``, ``dir_u_rel`` expressed in the inertial, ``G`` frame.\n    \"\"\"\n    urel = (displacement_vel +\n            for_vel[0:3] +\n            algebra.cross3(for_vel[3:6], displacement))\n    urel = -np.dot(cga, urel)\n    urel += np.average(uext, axis=1)\n\n    if add_rotation:\n        urel -= algebra.cross3(rot_vel_g,\n                               np.dot(cga, displacement) - centre_rot_g)\n    dir_urel = algebra.unit_vector(urel)\n\n    return urel, dir_urel\n\n\ndef local_stability_axes(dir_urel, dir_chord):\n    \"\"\"\n    Rotates the body axes onto stability axes. This rotation is equivalent to the projection of a vector in S onto B.\n\n    The stability axes are defined as:\n\n        * ``x_s``: parallel to the free stream\n\n        * ``z_s``: perpendicular to the free stream and part of the plane formed by the local chord and the vertical\n          body axis ``z_b``.\n\n        * ``y_s``: completes the set\n\n    Args:\n        dir_urel (np.array): Unit vector in the direction of the free stream velocity expressed in B frame.\n        dir_chord (np.array): Unit vector in the direction of the local chord expressed in B frame.\n\n    Returns:\n        np.array: Rotation matrix from B to S, equivalent to the projection matrix :math:`C^{BS}` that projects a\n        vector from S onto B.\n    \"\"\"\n    xs = dir_urel\n\n    zb = np.array([0, 0, 1.])\n    zs = algebra.cross3(algebra.cross3(dir_chord, zb), dir_urel)\n\n    ys = -algebra.cross3(xs, zs)\n\n    return algebra.triad2rotation(xs, ys, zs)\n\n\ndef span_chord(i_node_surf, zeta):\n    \"\"\"\n    Retrieve the local span and local chord\n\n    Args:\n        i_node_surf (int): Node index in aerodynamic surface\n        zeta (np.array): Aerodynamic surface coordinates ``(3 x n_chord x m_span)``\n\n    Returns:\n        tuple: ``dir_span``, ``span``, ``dir_chord``, ``chord``\n    \"\"\"\n    N = zeta.shape[2] - 1 # spanwise vertices in surface (-1 for index)\n\n    # Deal with the extremes\n    if i_node_surf == 0:\n        node_p = 1\n        node_m = 0\n    elif i_node_surf == N:\n        node_p = N\n        node_m = N - 1\n    else:\n        node_p = i_node_surf + 1\n        node_m = i_node_surf - 1\n\n    # Define the span and the span direction\n    dir_span = 0.5 * (zeta[:, 0, node_p] - zeta[:, 0, node_m])\n\n    span = np.linalg.norm(dir_span)\n    dir_span = algebra.unit_vector(dir_span)\n\n    # Define the chord and the chord direction\n    dir_chord = zeta[:, -1, i_node_surf] - zeta[:, 0, i_node_surf]\n    chord = np.linalg.norm(dir_chord)\n    dir_chord = algebra.unit_vector(dir_chord)\n\n    return dir_span, span, dir_chord, chord\n\n\ndef find_aerodynamic_solver_settings(settings):\n    \"\"\"\n    Retrieves the settings of the first aerodynamic solver used in the solution ``flow``. \n    \n    For coupled solvers, the aerodynamic solver is found in the aero solver settings. \n    The StaticTrim solver can either contain a coupled or aero solver in its solver \n    settings (making it into a possible 3-level Matryoshka).\n\n    Args:\n        settings (dict): SHARPy settings (usually found in ``data.settings`` )\n\n    Returns:\n        tuple: Aerodynamic solver settings\n    \"\"\"\n    flow = settings['SHARPy']['flow']\n    for solver_name in ['StaticUvlm', 'StaticCoupled', 'StaticTrim', 'DynamicCoupled', 'StepUvlm']:\n        if solver_name in flow:\n            aero_solver_settings = settings[solver_name]\n            if solver_name == 'StaticTrim':\n                aero_solver_settings = aero_solver_settings['solver_settings']['aero_solver_settings']\n            elif 'aero_solver' in settings[solver_name].keys():\n                aero_solver_settings = aero_solver_settings['aero_solver_settings']\n                \n            return aero_solver_settings\n\n    raise KeyError(\"ERROR: Aerodynamic solver not found.\")\n\ndef find_velocity_generator(settings):\n    \"\"\"\n    Retrieves the name and settings of the fluid velocity generator in the first aerodynamic solver used in the\n    solution ``flow``.\n\n    Args:\n        settings (dict): SHARPy settings (usually found in ``data.settings`` )\n\n    Returns:\n        tuple: velocity generator name and velocity generator settings\n    \"\"\"\n    aero_solver_settings = find_aerodynamic_solver_settings(settings)\n\n    vel_gen_name = aero_solver_settings['velocity_field_generator']\n    vel_gen_settings = aero_solver_settings['velocity_field_input']\n\n    return vel_gen_name, vel_gen_settings\n"
  },
  {
    "path": "sharpy/aero/utils/uvlmlib.py",
    "content": "from sharpy.utils.sharpydir import SharpyDir\nimport sharpy.utils.ctypes_utils as ct_utils\n\nimport ctypes as ct\nfrom ctypes import *\nimport numpy as np\nfrom sharpy.utils.constants import vortex_radius_def\n\ntry:\n    UvlmLib = ct_utils.import_ctypes_lib(SharpyDir + '/UVLM', 'libuvlm')\nexcept OSError:\n    UvlmLib = ct_utils.import_ctypes_lib(SharpyDir + '/lib/UVLM/lib', 'libuvlm')\n\n# TODO: Combine VMOpts and UVMOpts (Class + inheritance)?\n\nclass VMopts(ct.Structure):\n    \"\"\"ctypes definition for VMopts class\n        struct VMopts {\n            bool ImageMethod;\n            unsigned int Mstar;\n            bool Steady;\n            bool horseshoe;\n            bool KJMeth;\n            bool NewAIC;\n            double DelTime;\n            bool Rollup;\n            bool only_lifting;\n            bool only_nonlifting;\n            unsigned int NumCores;\n            unsigned int NumSurfaces;\n            unsigned int NumSurfacesNonlifting;\n            double vortex_radius;\n            double vortex_radius_wake_ind;            \n            bool u_ind_by_sources_for_lifting_forces;\n            uint ignore_first_x_nodes_in_force_calculation;\n        };\n    \"\"\"\n    _fields_ = [(\"ImageMethod\", ct.c_bool),\n                (\"Steady\", ct.c_bool),\n                (\"horseshoe\", ct.c_bool),\n                (\"KJMeth\", ct.c_bool),\n                (\"NewAIC\", ct.c_bool),\n                (\"DelTime\", ct.c_double),\n                (\"Rollup\", ct.c_bool),\n                (\"only_lifting\", ct.c_bool),\n                (\"only_nonlifting\", ct.c_bool),\n                (\"phantom_wing_test\", ct.c_bool),\n                (\"NumCores\", ct.c_uint),\n                (\"NumSurfaces\", ct.c_uint),\n                (\"NumSurfacesNonlifting\", ct.c_uint),\n                (\"dt\", ct.c_double),\n                (\"n_rollup\", ct.c_uint),\n                (\"rollup_tolerance\", ct.c_double),\n                (\"rollup_aic_refresh\", ct.c_uint),\n                (\"iterative_solver\", ct.c_bool),\n                (\"iterative_tol\", ct.c_double),\n                (\"iterative_precond\", ct.c_bool),\n                (\"vortex_radius\", ct.c_double),\n                (\"vortex_radius_wake_ind\", ct.c_double),\n                (\"consider_u_ind_by_sources_for_lifting_forces\", ct.c_bool),\n                (\"ignore_first_x_nodes_in_force_calculation\", ct.c_uint)]\n    \n\n\n    def __init__(self):\n        ct.Structure.__init__(self)\n        self.ImageMethod = ct.c_bool(False)\n        self.Steady = ct.c_bool(True)\n        self.horseshoe = ct.c_bool(True)\n        self.KJMeth = ct.c_bool(False)  # legacy var\n        self.NewAIC = ct.c_bool(False)  # legacy var\n        self.DelTime = ct.c_double(1.0)\n        self.Rollup = ct.c_bool(False)\n        self.only_lifting = ct.c_bool(False)\n        self.only_nonlifting = ct.c_bool(False)\n        self.NumCores = ct.c_uint(4)\n        self.NumSurfaces = ct.c_uint(1)\n        self.NumSurfacesNonlifting = ct.c_uint(0)\n        self.dt = ct.c_double(0.01)\n        self.n_rollup = ct.c_uint(0)\n        self.rollup_tolerance = ct.c_double(1e-5)\n        self.rollup_aic_refresh = ct.c_uint(1)\n        self.iterative_solver = ct.c_bool(False)\n        self.iterative_tol = ct.c_double(0)\n        self.iterative_precond = ct.c_bool(False)\n        self.vortex_radius = ct.c_double(vortex_radius_def)\n        self.vortex_radius_wake_ind = ct.c_double(vortex_radius_def)\n        self.phantom_wing_test = ct.c_bool(False)\n        self.consider_u_ind_by_sources_for_lifting_forces = ct.c_bool(False)\n        self.ignore_first_x_nodes_in_force_calculation = ct.c_uint(0)\n\n\n    def set_options(self, options, n_surfaces = 0, n_surfaces_nonlifting = 0):\n        self.Steady = ct.c_bool(True)\n        self.NumSurfaces = ct.c_uint(n_surfaces)\n        self.NumSurfacesNonlifting = ct.c_uint(n_surfaces_nonlifting)\n        self.horseshoe = ct.c_bool(options['horseshoe'])\n        self.dt = ct.c_double(options[\"rollup_dt\"])\n        self.n_rollup = ct.c_uint(options[\"n_rollup\"])\n        self.rollup_tolerance = ct.c_double(options[\"rollup_tolerance\"])\n        self.rollup_aic_refresh = ct.c_uint(options['rollup_aic_refresh'])\n        self.NumCores = ct.c_uint(options['num_cores'])\n        self.iterative_solver = ct.c_bool(options['iterative_solver'])\n        self.iterative_tol = ct.c_double(options['iterative_tol'])\n        self.iterative_precond = ct.c_bool(options['iterative_precond'])\n        self.vortex_radius = ct.c_double(options['vortex_radius'])\n        self.vortex_radius_wake_ind = ct.c_double(options['vortex_radius_wake_ind'])\n\n        self.only_nonlifting = ct.c_bool(options[\"only_nonlifting\"])\n        self.only_lifting = ct.c_bool(not options[\"nonlifting_body_interactions\"])\n        self.phantom_wing_test = ct.c_bool(options[\"phantom_wing_test\"])\n        self.ignore_first_x_nodes_in_force_calculation = ct.c_uint(options[\"ignore_first_x_nodes_in_force_calculation\"])\n\n\nclass UVMopts(ct.Structure):\n    _fields_ = [(\"dt\", ct.c_double),\n                (\"NumCores\", ct.c_uint),\n                (\"NumSurfaces\", ct.c_uint),\n                (\"NumSurfacesNonlifting\", ct.c_uint),            \n                (\"only_lifting\", ct.c_bool),\n                (\"only_nonlifting\", ct.c_bool),\n                (\"phantom_wing_test\", ct.c_bool),\n                (\"convection_scheme\", ct.c_uint),\n                (\"ImageMethod\", ct.c_bool),\n                (\"iterative_solver\", ct.c_bool),\n                (\"iterative_tol\", ct.c_double),\n                (\"iterative_precond\", ct.c_bool),\n                (\"convect_wake\", ct.c_bool),             \n                (\"cfl1\", ct.c_bool),\n                (\"vortex_radius\", ct.c_double),\n                (\"vortex_radius_wake_ind\", ct.c_double),\n                (\"interp_coords\", ct.c_uint),\n                (\"filter_method\", ct.c_uint),\n                (\"interp_method\", ct.c_uint),\n                (\"yaw_slerp\", ct.c_double),\n                (\"quasi_steady\", ct.c_bool),\n                (\"num_spanwise_panels_wo_induced_velocity\", ct.c_uint),\n                (\"consider_u_ind_by_sources_for_lifting_forces\", ct.c_bool),\n                (\"ignore_first_x_nodes_in_force_calculation\", ct.c_uint)]\n\n    def __init__(self):\n        ct.Structure.__init__(self)\n        self.dt = ct.c_double(0.01)\n        self.NumCores = ct.c_uint(4)\n        self.NumSurfaces = ct.c_uint(1)\n        self.NumSurfacesNonlifting = ct.c_uint(1)\n        self.convection_scheme = ct.c_uint(2)\n        self.ImageMethod = ct.c_bool(False)\n        self.iterative_solver = ct.c_bool(False)\n        self.iterative_tol = ct.c_double(0)\n        self.iterative_precond = ct.c_bool(False)\n        self.convect_wake = ct.c_bool(True)\n        self.cfl1 = ct.c_bool(True)\n        self.vortex_radius = ct.c_double(vortex_radius_def)\n        self.vortex_radius_wake_ind = ct.c_double(vortex_radius_def)\n        self.yaw_slerp = ct.c_double(0.)\n        self.quasi_steady = ct.c_bool(False)\n        self.num_spanwise_panels_wo_induced_velocity = ct.c_uint(0)\n        self.phantom_wing_test = ct.c_bool(False)\n        self.consider_u_ind_by_sources_for_lifting_forces = ct.c_bool(False)\n        self.ignore_first_x_nodes_in_force_calculation = ct.c_uint(0)\n\n    def set_options(self, \n                    options, \n                    n_surfaces = 0, \n                    n_surfaces_nonlifting = 0, \n                    dt = None, \n                    convect_wake = False, \n                    n_span_panels_wo_u_ind = 0,\n                    only_lifting=True):\n        if dt is None:\n            self.dt = ct.c_double(options[\"dt\"])\n        else:\n            self.dt = ct.c_double(dt)\n        self.NumCores = ct.c_uint(options[\"num_cores\"])\n        self.NumSurfaces = ct.c_uint(n_surfaces)\n        self.NumSurfacesNonlifting = ct.c_uint(n_surfaces_nonlifting)\n        self.ImageMethod = ct.c_bool(False)\n        self.convection_scheme = ct.c_uint(options[\"convection_scheme\"])\n        self.iterative_solver = ct.c_bool(options['iterative_solver'])\n        self.iterative_tol = ct.c_double(options['iterative_tol'])\n        self.iterative_precond = ct.c_bool(options['iterative_precond'])\n        self.convect_wake = ct.c_bool(convect_wake)\n        self.cfl1 = ct.c_bool(options['cfl1'])\n        self.vortex_radius = ct.c_double(options['vortex_radius'])\n        self.vortex_radius_wake_ind = ct.c_double(options['vortex_radius_wake_ind'])\n        self.interp_coords = ct.c_uint(options[\"interp_coords\"])\n        self.filter_method = ct.c_uint(options[\"filter_method\"])\n        self.interp_method = ct.c_uint(options[\"interp_method\"])\n        self.yaw_slerp = ct.c_double(options[\"yaw_slerp\"])\n        self.quasi_steady = ct.c_bool(options['quasi_steady'])\n \n        self.only_nonlifting = ct.c_bool(options[\"only_nonlifting\"])\n        self.only_lifting = ct.c_bool(only_lifting)\n        self.phantom_wing_test = ct.c_bool(options[\"phantom_wing_test\"])\n        self.ignore_first_x_nodes_in_force_calculation = ct.c_uint(options[\"ignore_first_x_nodes_in_force_calculation\"])\n        self.num_spanwise_panels_wo_induced_velocity = n_span_panels_wo_u_ind\n\n\nclass FlightConditions(ct.Structure):\n    _fields_ = [(\"uinf\", ct.c_double),\n                (\"uinf_direction\", ct.c_double*3),\n                (\"rho\", ct.c_double),\n                (\"c_ref\", ct.c_double)]\n\n    def __init__(self, rho, vec_u_inf):\n        ct.Structure.__init__(self)\n        self.set_flight_conditions(rho, vec_u_inf)\n\n    def set_flight_conditions(self, rho, vec_u_inf):\n        self.rho = rho\n        self.uinf = np.ctypeslib.as_ctypes(np.linalg.norm(vec_u_inf))\n        self.uinf_direction = np.ctypeslib.as_ctypes(vec_u_inf/self.uinf)\n\n\n# type for 2d integer matrix\nt_2int = ct.POINTER(ct.c_int)*2\n\ndef vlm_solver(ts_info, options):\n    run_VLM = UvlmLib.run_VLM\n\n    vmopts = VMopts()\n    vmopts.set_options(options, n_surfaces = ts_info.n_surf)\n\n    flightconditions = FlightConditions(options['rho'], ts_info.u_ext[0][:, 0, 0])\n\n    p_rbm_vel_g = options['rbm_vel_g'].ctypes.data_as(ct.POINTER(ct.c_double))\n    p_centre_rot_g = options['centre_rot_g'].ctypes.data_as(ct.POINTER(ct.c_double))\n    ts_info.generate_ctypes_pointers()\n    run_VLM(ct.byref(vmopts),\n            ct.byref(flightconditions),\n            ts_info.ct_p_dimensions,\n            ts_info.ct_p_dimensions_star,\n            ts_info.ct_p_zeta,\n            ts_info.ct_p_zeta_star,\n            ts_info.ct_p_zeta_dot,\n            ts_info.ct_p_u_ext,\n            ts_info.ct_p_gamma,\n            ts_info.ct_p_gamma_star,\n            ts_info.ct_p_forces,\n            p_rbm_vel_g,\n            p_centre_rot_g)\n    ts_info.remove_ctypes_pointers()\n\ndef vlm_solver_nonlifting_body(ts_info, options):\n    run_linear_source_panel_method = UvlmLib.run_linear_source_panel_method\n\n    vmopts = VMopts()\n    vmopts.set_options(options, n_surfaces_nonlifting = ts_info.n_surf)\n\n    flightconditions = FlightConditions(options['rho'], ts_info.u_ext[0][:, 0, 0])\n\n    ts_info.generate_ctypes_pointers()\n    run_linear_source_panel_method(ct.byref(vmopts),\n                       ct.byref(flightconditions),\n                       ts_info.ct_p_dimensions,\n                       ts_info.ct_p_zeta,\n                       ts_info.ct_p_u_ext,\n                       ts_info.ct_p_sigma,\n                       ts_info.ct_p_forces,\n                       ts_info.ct_p_pressure_coefficients)\n    ts_info.remove_ctypes_pointers()\n\ndef vlm_solver_lifting_and_nonlifting_bodies(ts_info_lifting, ts_info_nonlifting, options):\n    run_VLM_coupled_with_LSPM = UvlmLib.run_VLM_coupled_with_LSPM\n\n    vmopts = VMopts()    \n    vmopts.set_options(options, n_surfaces = ts_info_lifting.n_surf, n_surfaces_nonlifting = ts_info_nonlifting.n_surf)\n\n    flightconditions = FlightConditions(options['rho'], ts_info_lifting.u_ext[0][:, 0, 0])\n\n    p_rbm_vel_g = options['rbm_vel_g'].ctypes.data_as(ct.POINTER(ct.c_double))\n    p_centre_rot = options['centre_rot_g'].ctypes.data_as(ct.POINTER(ct.c_double))\n    ts_info_lifting.generate_ctypes_pointers()\n    ts_info_nonlifting.generate_ctypes_pointers()\n    run_VLM_coupled_with_LSPM(ct.byref(vmopts),\n            ct.byref(flightconditions),\n            ts_info_lifting.ct_p_dimensions,\n            ts_info_lifting.ct_p_dimensions_star,\n            ts_info_lifting.ct_p_zeta,\n            ts_info_lifting.ct_p_zeta_star,\n            ts_info_lifting.ct_p_zeta_dot,\n            ts_info_lifting.ct_p_u_ext,\n            ts_info_lifting.ct_p_gamma,\n            ts_info_lifting.ct_p_gamma_star,\n            ts_info_lifting.ct_p_forces,\n            ts_info_lifting.ct_p_flag_zeta_phantom,\n            ts_info_nonlifting.ct_p_dimensions,\n            ts_info_nonlifting.ct_p_zeta,\n            ts_info_nonlifting.ct_p_u_ext,\n            ts_info_nonlifting.ct_p_sigma,\n            ts_info_nonlifting.ct_p_forces,\n            ts_info_nonlifting.ct_p_pressure_coefficients,\n            p_rbm_vel_g,\n            p_centre_rot)\n\n    ts_info_lifting.remove_ctypes_pointers()\n    ts_info_nonlifting.remove_ctypes_pointers()\n\n\ndef uvlm_solver(i_iter, ts_info, struct_ts_info, options, convect_wake=True, dt=None):\n\n    p_rbm_vel = get_ctype_pointer_of_rbm_vel_in_G_frame(struct_ts_info.for_vel.copy(), struct_ts_info.cga())\n    p_centre_rot = options['centre_rot'].ctypes.data_as(ct.POINTER(ct.c_double))\n\n    run_UVLM = UvlmLib.run_UVLM\n\n    uvmopts = UVMopts()\n    uvmopts.set_options(options,\n                        n_surfaces = ts_info.n_surf,\n                        n_surfaces_nonlifting = 0, \n                        dt = dt, \n                        convect_wake = convect_wake, \n                        n_span_panels_wo_u_ind=0)\n\n    flightconditions = FlightConditions(options['rho'], ts_info.u_ext[0][:, 0, 0])\n\n    i = ct.c_uint(i_iter)\n    ts_info.generate_ctypes_pointers()\n    run_UVLM(ct.byref(uvmopts),\n             ct.byref(flightconditions),\n             ts_info.ct_p_dimensions,\n             ts_info.ct_p_dimensions_star,\n             ct.byref(i),\n             ts_info.ct_p_u_ext,\n             ts_info.ct_p_u_ext_star,\n             ts_info.ct_p_zeta,\n             ts_info.ct_p_zeta_star,\n             ts_info.ct_p_zeta_dot,\n             ts_info.ct_p_gamma,\n             ts_info.ct_p_gamma_star,\n             ts_info.ct_p_dist_to_orig,\n             ts_info.ct_p_normals,\n             ts_info.ct_p_forces,\n             ts_info.ct_p_dynamic_forces,\n             p_rbm_vel,\n             p_centre_rot)\n    ts_info.remove_ctypes_pointers()\n\ndef uvlm_solver_lifting_and_nonlifting(i_iter, ts_info, ts_info_nonlifting, struct_ts_info, options, convect_wake=True, dt=None):\n\n    p_rbm_vel = get_ctype_pointer_of_rbm_vel_in_G_frame(struct_ts_info.for_vel.copy(), struct_ts_info.cga())\n    p_centre_rot = options['centre_rot'].ctypes.data_as(ct.POINTER(ct.c_double))\n\n    uvmopts = UVMopts()\n    uvmopts.set_options(options,\n                        n_surfaces = ts_info.n_surf,\n                        n_surfaces_nonlifting = ts_info_nonlifting.n_surf, \n                        dt = dt, \n                        convect_wake = convect_wake, \n                        n_span_panels_wo_u_ind=4,\n                        only_lifting=False)\n    run_UVLM = UvlmLib.run_UVLM_coupled_with_LSPM\n\n    flightconditions = FlightConditions(options['rho'], ts_info.u_ext[0][:, 0, 0])\n\n    i = ct.c_uint(i_iter)\n    ts_info.generate_ctypes_pointers()\n    ts_info_nonlifting.generate_ctypes_pointers()\n    run_UVLM(ct.byref(uvmopts),\n             ct.byref(flightconditions),\n             ts_info.ct_p_dimensions,\n             ts_info.ct_p_dimensions_star,\n             ct.byref(i),\n             ts_info.ct_p_u_ext,\n             ts_info.ct_p_u_ext_star,\n             ts_info.ct_p_zeta,\n             ts_info.ct_p_zeta_star,\n             ts_info.ct_p_zeta_dot,\n             ts_info.ct_p_gamma,\n             ts_info.ct_p_gamma_star,\n             ts_info.ct_p_dist_to_orig,\n             ts_info.ct_p_normals,\n             ts_info.ct_p_forces,\n             ts_info.ct_p_dynamic_forces,\n             ts_info.ct_p_flag_zeta_phantom,\n             ts_info_nonlifting.ct_p_dimensions,\n             ts_info_nonlifting.ct_p_zeta,\n             ts_info_nonlifting.ct_p_u_ext,\n             ts_info_nonlifting.ct_p_sigma,\n             ts_info_nonlifting.ct_p_forces,\n             ts_info_nonlifting.ct_p_pressure_coefficients,\n             p_rbm_vel,\n             p_centre_rot)\n\n    ts_info.remove_ctypes_pointers()\n    ts_info_nonlifting.remove_ctypes_pointers()\n\ndef uvlm_calculate_unsteady_forces(ts_info,\n                                   struct_ts_info,\n                                   options,\n                                   convect_wake=True,\n                                   dt=None):\n    calculate_unsteady_forces = UvlmLib.calculate_unsteady_forces\n\n    uvmopts = UVMopts()\n    if dt is None:\n        uvmopts.dt = ct.c_double(options[\"dt\"])\n    else:\n        uvmopts.dt = ct.c_double(dt)\n    uvmopts.NumCores = ct.c_uint(options[\"num_cores\"])\n    uvmopts.NumSurfaces = ct.c_uint(ts_info.n_surf)\n    uvmopts.ImageMethod = ct.c_bool(False)\n    uvmopts.convection_scheme = ct.c_uint(options[\"convection_scheme\"])\n    uvmopts.iterative_solver = ct.c_bool(options['iterative_solver'])\n    uvmopts.iterative_tol = ct.c_double(options['iterative_tol'])\n    uvmopts.iterative_precond = ct.c_bool(options['iterative_precond'])\n    uvmopts.convect_wake = ct.c_bool(convect_wake)\n    uvmopts.vortex_radius = ct.c_double(options['vortex_radius'])\n\n\n    flightconditions = FlightConditions(options['rho'], ts_info.u_ext[0][:, 0, 0])\n\n    p_rbm_vel = get_ctype_pointer_of_rbm_vel_in_G_frame(struct_ts_info.for_vel.copy(), struct_ts_info.cga())\n\n    for i_surf in range(ts_info.n_surf):\n        ts_info.dynamic_forces[i_surf].fill(0.0)\n\n    ts_info.generate_ctypes_pointers()\n    calculate_unsteady_forces(ct.byref(uvmopts),\n                              ct.byref(flightconditions),\n                              ts_info.ct_p_dimensions,\n                              ts_info.ct_p_dimensions_star,\n                              ts_info.ct_p_zeta,\n                              ts_info.ct_p_zeta_star,\n                              p_rbm_vel,\n                              ts_info.ct_p_gamma,\n                              ts_info.ct_p_gamma_star,\n                              ts_info.ct_p_gamma_dot,\n                              ts_info.ct_p_normals,\n                              ts_info.ct_p_dynamic_forces)\n    ts_info.remove_ctypes_pointers()\n\n\ndef uvlm_calculate_incidence_angle(ts_info,\n                                   struct_ts_info):\n    calculate_incidence_angle = UvlmLib.UVLM_check_incidence_angle\n\n    p_rbm_vel = get_ctype_pointer_of_rbm_vel_in_G_frame(struct_ts_info.for_vel.copy(), struct_ts_info.cga())\n\n    n_surf = ct.c_uint(ts_info.n_surf)\n\n    ts_info.generate_ctypes_pointers()\n    calculate_incidence_angle(ct.byref(n_surf),\n                              ts_info.ct_p_dimensions,\n                              ts_info.ct_p_u_ext,\n                              ts_info.ct_p_zeta,\n                              ts_info.ct_p_zeta_dot,\n                              ts_info.ct_p_normals,\n                              p_rbm_vel,\n                              ts_info.postproc_cell['incidence_angle_ct_pointer'])\n    ts_info.remove_ctypes_pointers()\n\n\ndef uvlm_calculate_total_induced_velocity_at_points(ts_info,\n                                                    target_triads,\n                                                    vortex_radius,\n                                                    for_pos=np.zeros((6)),\n                                                    ncores=ct.c_uint(1)):\n    \"\"\"\n    uvlm_calculate_total_induced_velocity_at_points\n\n    Caller to the UVLM library to compute the induced velocity of all the\n    surfaces and wakes at a list of points\n\n    Args:\n        ts_info (AeroTimeStepInfo): Time step information\n        target_triads (np.array): Point coordinates, size=(npoints, 3)\n        vortex_radius (float): Vortex radius threshold below which do not compute induced velocity\n        uind (np.array): Induced velocity\n\n    Returns:\n    \tuind (np.array): Induced velocity, size=(npoints, 3)\n\n    \"\"\"\n    calculate_uind_at_points = UvlmLib.total_induced_velocity_at_points\n\n    uvmopts = UVMopts()\n    uvmopts.NumSurfaces = ct.c_uint(ts_info.n_surf)\n    uvmopts.ImageMethod = ct.c_bool(False)\n    uvmopts.NumCores = ct.c_uint(ncores)\n    uvmopts.vortex_radius = ct.c_double(vortex_radius)\n\n    npoints = target_triads.shape[0]\n    uind = np.zeros((npoints, 3), dtype=ct.c_double)\n\n    if type(target_triads[0,0]) == ct.c_double:\n        aux_target_triads = target_triads\n    else:\n        aux_target_triads = target_triads.astype(dtype=ct.c_double)\n\n    p_target_triads = ((ct.POINTER(ct.c_double))(* [np.ctypeslib.as_ctypes(aux_target_triads.reshape(-1))]))\n    p_uind = ((ct.POINTER(ct.c_double))(* [np.ctypeslib.as_ctypes(uind.reshape(-1))]))\n\n    # make a copy of ts info and add for_pos to zeta and zeta_star\n    ts_info_copy = ts_info.copy()\n    for i_surf in range(ts_info_copy.n_surf):\n        # zeta\n        for iM in range(ts_info_copy.zeta[i_surf].shape[1]):\n            for iN in range(ts_info_copy.zeta[i_surf].shape[2]):\n                ts_info_copy.zeta[i_surf][:, iM, iN] += for_pos[0:3]\n        # zeta_star\n        for iM in range(ts_info_copy.zeta_star[i_surf].shape[1]):\n            for iN in range(ts_info_copy.zeta_star[i_surf].shape[2]):\n                ts_info_copy.zeta_star[i_surf][:, iM, iN] += for_pos[0:3]\n\n    ts_info_copy.generate_ctypes_pointers()\n    calculate_uind_at_points(ct.byref(uvmopts),\n                              ts_info_copy.ct_p_dimensions,\n                              ts_info_copy.ct_p_dimensions_star,\n                              ts_info_copy.ct_p_zeta,\n                              ts_info_copy.ct_p_zeta_star,\n                              ts_info_copy.ct_p_gamma,\n                              ts_info_copy.ct_p_gamma_star,\n                              p_target_triads,\n                              p_uind,\n                              ct.c_uint(npoints))\n    ts_info_copy.remove_ctypes_pointers()\n    del p_uind\n    del p_target_triads\n\n    return uind\n\n\ndef biot_panel_cpp(zeta_point, zeta_panel, vortex_radius, gamma=1.0):\n    \"\"\"\n    Linear UVLM function\n\n    Returns the induced velocity at a point ``zeta_point`` due to a panel located at ``zeta_panel`` with circulation\n    ``gamma``.\n\n    Args:\n        zeta_point (np.ndarray): Coordinates of the point with size ``(3,)``.\n        zeta_panel (np.ndarray): Panel coordinates with size ``(4, 3)``.\n        gamma (float): Panel circulation.\n\n    Returns:\n        np.ndarray: Induced velocity at point\n\n    \"\"\"\n\n    assert zeta_point.flags['C_CONTIGUOUS'] and zeta_panel.flags['C_CONTIGUOUS'], \\\n        'Input not C contiguous'\n\n    if type(vortex_radius) is ct.c_double:\n        vortex_radius_float = vortex_radius.value\n    else:\n        vortex_radius_float = vortex_radius\n    velP = np.zeros((3,), order='C')\n    UvlmLib.call_biot_panel(\n        velP.ctypes.data_as(ct.POINTER(ct.c_double)),\n        zeta_point.ctypes.data_as(ct.POINTER(ct.c_double)),\n        zeta_panel.ctypes.data_as(ct.POINTER(ct.c_double)),\n        ct.byref(ct.c_double(gamma)),\n        ct.byref(ct.c_double(vortex_radius_float)))\n\n    return velP\n\n\ndef eval_panel_cpp(zeta_point, zeta_panel,\n                   vortex_radius, gamma_pan=1.0):\n    \"\"\"\n    Linear UVLM function\n\n    Returns\n        tuple: The derivative of the induced velocity with respect to point ``P`` and panel vertices ``ZetaP``.\n\n    Warnings:\n        Function may fail if zeta_point is not stored contiguously.\n\n        Eg:\n\n        The following will fail\n\n            zeta_point=Mat[:,2,5]\n            eval_panel_cpp(zeta_point,zeta_panel, vortex_radius, gamma_pan=1.0)\n\n        but\n\n            zeta_point=Mat[:,2,5].copy()\n            eval_panel_cpp(zeta_point,zeta_panel, vortex_radius, gamma_pan=1.0)\n\n        will not.\n    \"\"\"\n\n    assert zeta_point.flags['C_CONTIGUOUS'] and zeta_panel.flags['C_CONTIGUOUS'], \\\n        'Input not C contiguous'\n\n    der_point = np.zeros((3, 3), order='C')\n    der_vertices = np.zeros((4, 3, 3), order='C')\n\n    if type(vortex_radius) is ct.c_double:\n        vortex_radius_float = vortex_radius.value\n    else:\n        vortex_radius_float = vortex_radius\n    UvlmLib.call_der_biot_panel(\n        der_point.ctypes.data_as(ct.POINTER(ct.c_double)),\n        der_vertices.ctypes.data_as(ct.POINTER(ct.c_double)),\n        zeta_point.ctypes.data_as(ct.POINTER(ct.c_double)),\n        zeta_panel.ctypes.data_as(ct.POINTER(ct.c_double)),\n        ct.byref(ct.c_double(gamma_pan)),\n        ct.byref(ct.c_double(vortex_radius_float)))\n\n    return der_point, der_vertices\n\n\ndef get_induced_velocity_cpp(maps, zeta, gamma, zeta_target,\n                             vortex_radius):\n    \"\"\"\n    Linear UVLM function used in bound surfaces\n\n    Computes induced velocity at a point zeta_target.\n\n    Args:\n        maps (sharpy.linear.src.surface.AeroGridSurface): instance of bound surface\n        zeta (np.ndarray): Coordinates of panel\n        gamma (float): Panel circulation strength\n        zeta_target (np.ndarray): Coordinates of target point\n\n    Returns:\n        np.ndarray: Induced velocity by panel at target point\n\n    \"\"\"\n    call_ind_vel = UvlmLib.call_ind_vel\n\n    assert zeta_target.flags['C_CONTIGUOUS'], \"Input not C contiguous\"\n\n    M, N = maps.M, maps.N\n    uind_target = np.zeros((3,), order='C')\n\n    if type(vortex_radius) is ct.c_double:\n        vortex_radius_float = vortex_radius.value\n    else:\n        vortex_radius_float = vortex_radius\n    call_ind_vel(\n        uind_target.ctypes.data_as(ct.POINTER(ct.c_double)),\n        zeta_target.ctypes.data_as(ct.POINTER(ct.c_double)),\n        zeta.ctypes.data_as(ct.POINTER(ct.c_double)),\n        gamma.ctypes.data_as(ct.POINTER(ct.c_double)),\n        ct.byref(ct.c_int(M)),\n        ct.byref(ct.c_int(N)),\n        ct.byref(ct.c_double(vortex_radius_float)))\n\n    return uind_target\n\n\ndef get_aic3_cpp(maps, zeta, zeta_target, vortex_radius):\n    \"\"\"\n    Linear UVLM function used in bound surfaces\n\n    Produces influence coefficient matrix to calculate the induced velocity\n    at a target point. The aic3 matrix has shape (3,K)\n\n    Args:\n        maps (sharpy.linear.src.surface.AeroGridSurface): instance of linear bound surface\n        zeta (np.ndarray): Coordinates of panel\n        zeta_target (np.ndarray): Coordinates of target point\n\n    Returns:\n        np.ndarray: Aerodynamic influence coefficient\n    \"\"\"\n\n    assert zeta_target.flags['C_CONTIGUOUS'], \"Input not C contiguous\"\n\n    K = maps.K\n    aic3 = np.zeros((3, K), order='C')\n\n    if type(vortex_radius) is ct.c_double:\n        vortex_radius_float = vortex_radius.value\n    else:\n        vortex_radius_float = vortex_radius\n    UvlmLib.call_aic3(\n        aic3.ctypes.data_as(ct.POINTER(ct.c_double)),\n        zeta_target.ctypes.data_as(ct.POINTER(ct.c_double)),\n        zeta.ctypes.data_as(ct.POINTER(ct.c_double)),\n        ct.byref(ct.c_int(maps.M)),\n        ct.byref(ct.c_int(maps.N)),\n        ct.byref(ct.c_double(vortex_radius_float)))\n\n    return aic3\n\n\ndef dvinddzeta_cpp(zetac, surf_in, is_bound,\n                   vortex_radius, M_in_bound=None):\n    \"\"\"\n    Linear UVLM function used in the assembly of the linear system\n\n    Produces derivatives of induced velocity by surf_in w.r.t. the zetac point.\n    Derivatives are divided into those associated to the movement of zetac, and\n    to the movement of the surf_in vertices (DerVert).\n\n    If surf_in is bound (is_bound==True), the circulation over the TE due to the\n    wake is not included in the input.\n\n    If surf_in is a wake (is_bound==False), derivatives w.r.t. collocation\n    points are computed ad the TE contribution on ``der_vert``. In this case, the\n    chordwise paneling Min_bound of the associated input is required so as to\n    calculate Kzeta and correctly allocate the derivative matrix.\n\n    Returns:\n         tuple: output derivatives are:\n                - der_coll: 3 x 3 matrix\n                - der_vert: 3 x 3*Kzeta (if surf_in is a wake, Kzeta is that of the bound)\n\n    Warning:\n        zetac must be contiguously stored!\n    \"\"\"\n\n    M_in, N_in = surf_in.maps.M, surf_in.maps.N\n    Kzeta_in = surf_in.maps.Kzeta\n    shape_zeta_in = (3, M_in + 1, N_in + 1)\n\n    # allocate matrices\n    der_coll = np.zeros((3, 3), order='C')\n\n    if is_bound:\n        M_in_bound = M_in\n    Kzeta_in_bound = (M_in_bound + 1) * (N_in + 1)\n    der_vert = np.zeros((3, 3 * Kzeta_in_bound))\n\n    if type(vortex_radius) is ct.c_double:\n        vortex_radius_float = vortex_radius.value\n    else:\n        vortex_radius_float = vortex_radius\n    UvlmLib.call_dvinddzeta(\n        der_coll.ctypes.data_as(ct.POINTER(ct.c_double)),\n        der_vert.ctypes.data_as(ct.POINTER(ct.c_double)),\n        zetac.ctypes.data_as(ct.POINTER(ct.c_double)),\n        surf_in.zeta.ctypes.data_as(ct.POINTER(ct.c_double)),\n        surf_in.gamma.ctypes.data_as(ct.POINTER(ct.c_double)),\n        ct.byref(ct.c_int(M_in)),\n        ct.byref(ct.c_int(N_in)),\n        ct.byref(ct.c_bool(is_bound)),\n        ct.byref(ct.c_int(M_in_bound)),\n        ct.byref(ct.c_double(vortex_radius_float))\n    )\n\n    return der_coll, der_vert\n\ndef get_ctype_pointer_of_rbm_vel_in_G_frame(rbm_vel, cga):\n    rbm_vel[0:3] = np.dot(cga, rbm_vel[0:3])\n    rbm_vel[3:6] = np.dot(cga, rbm_vel[3:6])\n    p_rbm_vel = rbm_vel.ctypes.data_as(ct.POINTER(ct.c_double))\n    return p_rbm_vel"
  },
  {
    "path": "sharpy/cases/__init__.py",
    "content": ""
  },
  {
    "path": "sharpy/cases/coupled/WindTurbine/__init__.py",
    "content": ""
  },
  {
    "path": "sharpy/cases/coupled/WindTurbine/generate_rotor.py",
    "content": "import numpy as np\nimport os\n\nimport sharpy.utils.generate_cases as gc\nimport sharpy.cases.templates.template_wt as template_wt\nfrom sharpy.utils.constants import deg2rad\nimport sharpy.utils.sharpydir as sharpydir\n\n######################################################################\n###########################  PARAMETERS  #############################\n######################################################################\n# Case\ncase = 'rotor'\nroute = os.path.dirname(os.path.realpath(__file__)) + '/'\n\n# Geometry discretization\nchord_panels = np.array([8], dtype=int)\nrevs_in_wake = 1\n\n# Operation\nrotation_velocity = 1.366190\npitch_deg = 0. #degrees\n\n# Wind\nWSP = 11.4\nair_density = 1.225\n\n# Simulation\ndphi = 4.*deg2rad\nrevs_to_simulate = 5\n\n######################################################################\n##########################  GENERATE WT  #############################\n######################################################################\ndt = dphi/rotation_velocity\n# time_steps = int(revs_to_simulate*2.*np.pi/dphi)\ntime_steps = 2 # For the test cases\n\nmstar = int(revs_in_wake*2.*np.pi/dphi)\n\nop_params = {'rotation_velocity': rotation_velocity,\n             'pitch_deg': pitch_deg,\n             'wsp': WSP,\n             'dt': dt}\n\ngeom_params = {'chord_panels':chord_panels,\n            'tol_remove_points': 1e-8,\n            'n_points_camber': 100,\n            'm_distribution': 'uniform'}\nexcel_description = {'excel_file_name': os.path.abspath(sharpydir.SharpyDir + '/docs/source/content/example_notebooks/source/type02_db_NREL5MW_v02.xlsx'),\n                    'excel_sheet_parameters': 'parameters',\n                    'excel_sheet_structural_blade': 'structural_blade',\n                    'excel_sheet_discretization_blade': 'discretization_blade',\n                    'excel_sheet_aero_blade': 'aero_blade',\n                    'excel_sheet_airfoil_info': 'airfoil_info',\n                    'excel_sheet_airfoil_chord': 'airfoil_coord'}\n\noptions = {'camber_effect_on_twist': False,\n           'user_defined_m_distribution_type': None,\n           'include_polars': False}\n\nrotor = template_wt.rotor_from_excel_type03(op_params,\n                                            geom_params,\n                                            excel_description,\n                                            options)\n\n######################################################################\n######################  DEFINE SIMULATION  ###########################\n######################################################################\nSimInfo = gc.SimulationInformation()\nSimInfo.set_default_values()\n\nSimInfo.solvers['SHARPy']['flow'] = ['BeamLoader',\n                        'AerogridLoader',\n                        'StaticCoupled',\n                        'BeamPlot',\n                        'AerogridPlot',\n                        'DynamicCoupled',\n                        'SaveData']\n\nSimInfo.solvers['SHARPy']['case'] = case\nSimInfo.solvers['SHARPy']['route'] = route\nSimInfo.solvers['SHARPy']['write_log'] = True\nSimInfo.set_variable_all_dicts('dt', dt)\nSimInfo.set_variable_all_dicts('rho', air_density)\n\nSimInfo.solvers['SteadyVelocityField']['u_inf'] = WSP\nSimInfo.solvers['SteadyVelocityField']['u_inf_direction'] = np.array([0., 0., 1.])\nSimInfo.set_variable_all_dicts('velocity_field_input', SimInfo.solvers['SteadyVelocityField'])\n\nSimInfo.solvers['BeamLoader']['unsteady'] = 'on'\n\nSimInfo.solvers['AerogridLoader']['unsteady'] = 'on'\nSimInfo.solvers['AerogridLoader']['mstar'] = mstar\nSimInfo.solvers['AerogridLoader']['freestream_dir'] = np.array([0.,0.,0.])\nSimInfo.solvers['AerogridLoader']['wake_shape_generator'] = 'HelicoidalWake'\nSimInfo.solvers['AerogridLoader']['wake_shape_generator_input'] = {'u_inf': WSP,\n                                                                   'u_inf_direction': SimInfo.solvers['SteadyVelocityField']['u_inf_direction'],\n                                                                   'rotation_velocity': rotation_velocity*np.array([0., 0., 1.]),\n                                                                   'dt': dt,\n                                                                   'dphi1': dphi,\n                                                                   'ndphi1': mstar,\n                                                                   'r': 1.,\n                                                                   'dphimax': 10*deg2rad}\n\nSimInfo.solvers['NonLinearStatic']['max_iterations'] = 200\nSimInfo.solvers['NonLinearStatic']['num_load_steps'] = 1\nSimInfo.solvers['NonLinearStatic']['min_delta'] = 1e-5\n\nSimInfo.solvers['StaticUvlm']['horseshoe'] = False\nSimInfo.solvers['StaticUvlm']['num_cores'] = 8\nSimInfo.solvers['StaticUvlm']['n_rollup'] = 0\nSimInfo.solvers['StaticUvlm']['rollup_dt'] = dt\nSimInfo.solvers['StaticUvlm']['rollup_aic_refresh'] = 1\nSimInfo.solvers['StaticUvlm']['rollup_tolerance'] = 1e-8\nSimInfo.solvers['StaticUvlm']['velocity_field_generator'] = 'SteadyVelocityField'\nSimInfo.solvers['StaticUvlm']['velocity_field_input'] = SimInfo.solvers['SteadyVelocityField']\n\nSimInfo.solvers['StaticCoupled']['structural_solver'] = 'NonLinearStatic'\nSimInfo.solvers['StaticCoupled']['structural_solver_settings'] = SimInfo.solvers['NonLinearStatic']\nSimInfo.solvers['StaticCoupled']['aero_solver'] = 'StaticUvlm'\nSimInfo.solvers['StaticCoupled']['aero_solver_settings'] = SimInfo.solvers['StaticUvlm']\n\nSimInfo.solvers['StaticCoupled']['tolerance'] = 1e-6\nSimInfo.solvers['StaticCoupled']['n_load_steps'] = 0\nSimInfo.solvers['StaticCoupled']['relaxation_factor'] = 0.\n\nSimInfo.solvers['StepUvlm']['convection_scheme'] = 2\nSimInfo.solvers['StepUvlm']['num_cores'] = 8\n\nSimInfo.solvers['WriteVariablesTime']['FoR_variables'] = ['total_forces',]\nSimInfo.solvers['WriteVariablesTime']['FoR_number'] = [0,]\n\nSimInfo.solvers['DynamicCoupled']['structural_solver'] = 'RigidDynamicPrescribedStep'\nSimInfo.solvers['DynamicCoupled']['structural_solver_settings'] = SimInfo.solvers['RigidDynamicPrescribedStep']\nSimInfo.solvers['DynamicCoupled']['aero_solver'] = 'StepUvlm'\nSimInfo.solvers['DynamicCoupled']['aero_solver_settings'] = SimInfo.solvers['StepUvlm']\nSimInfo.solvers['DynamicCoupled']['postprocessors'] = ['BeamPlot', 'AerogridPlot', 'WriteVariablesTime', 'Cleanup']\nSimInfo.solvers['DynamicCoupled']['postprocessors_settings'] = {'BeamPlot': SimInfo.solvers['BeamPlot'],\n                                                             'AerogridPlot': SimInfo.solvers['AerogridPlot'],\n                                                             'WriteVariablesTime': SimInfo.solvers['WriteVariablesTime'],\n                                                             'Cleanup': SimInfo.solvers['Cleanup']}\nSimInfo.solvers['DynamicCoupled']['minimum_steps'] = 0\n\nSimInfo.define_num_steps(time_steps)\n\n# Define dynamic simulation\nSimInfo.with_forced_vel = True\nSimInfo.for_vel = np.zeros((time_steps,6), dtype=float)\nSimInfo.for_vel[:,5] = rotation_velocity\nSimInfo.for_acc = np.zeros((time_steps,6), dtype=float)\nSimInfo.with_dynamic_forces = True\nSimInfo.dynamic_forces = np.zeros((time_steps,rotor.StructuralInformation.num_node,6), dtype=float)\n\n\n######################################################################\n#######################  GENERATE FILES  #############################\n######################################################################\ngc.clean_test_files(SimInfo.solvers['SHARPy']['route'], SimInfo.solvers['SHARPy']['case'])\nrotor.generate_h5_files(SimInfo.solvers['SHARPy']['route'], SimInfo.solvers['SHARPy']['case'])\nSimInfo.generate_solver_file()\nSimInfo.generate_dyn_file(time_steps)\n"
  },
  {
    "path": "sharpy/cases/coupled/X-HALE/generate_xhale.py",
    "content": "#!/usr/env python\n# X-HALE model for SHARPy.\n# Version 1.0\n# See IFASD 2019 paper by: del Carre, A and Teixeira, P and Palacios, R and Cesnik, C. E. S.\n#\n# Alfonso del Carre\n# June 2019\n# ============================================================================\n\nimport h5py as h5\nimport numpy as np\nimport os\nimport sharpy.utils.algebra as algebra\n\nroute = os.path.dirname(os.path.realpath(__file__)) + '/'\n\ncases = [\n    '0',    # 15%, 15 chords, lateral\n    ]\n\ndata = dict()\ndata['0'] = {\n    'gust_length': 15,              # in chords\n    'gust_intensity': 0.15,         # in % of uinf\n    'gust_shape': 'lateral 1-cos',  # '1-cos' for vertical gust\n}\n\nhorseshoe = 'off'\n\nfor case in cases:\n    vertical_tail = True\n    if vertical_tail:\n        case_name = 'xhale_ifasd' + '_' + case\n        print('Generating xhale with vertical Ctail')\n    else:\n        case_name = 'xhale_ifasd' + '_' + case\n        print('Generating xhale with horizontal Ctail')\n\n\n    flow = [\n            'BeamLoader',\n            'AerogridLoader',\n            # 'StaticTrim',     # uncomment for longitudinal static trim\n            'StaticCoupled',    # static coupled solver with GECB and UVLM\n            'BeamLoads',        # beam loads and strains computation for static\n            'BeamPlot',         # beam structure and data output for static\n            'AerogridPlot',     # aero grid output for static\n            'DynamicCoupled',   # dynamic coupled solver. See end of file:\n                                # settings['DynamicCoupled']['postprocessors']\n                                # for the corresponding 'BeamLoads', 'BeamPlot'\n                                # and 'AerogridPlot' settings and calls.\n            ]\n\n    u_inf = 14                  # free stream vel [SI]\n    rho = 1.225                 # density [SI]\n    chord = 0.2                 # main wing chord length for gust dimensioning.\n                                # the value used for the geometry generation is\n                                # given in the input/*.xslx files\n\n    if vertical_tail:\n        alpha = 2.4744791522743887*np.pi/180        # angle of attack [rad]\n        beta = 0.*np.pi/180                         # sideslip angle  [rad]\n        cs_deflection = 1.186515244051093*np.pi/180 # elevators deflection [rad]\n        aileron_deflection = 0*0.039011*np.pi/180   # aileron deflection [rad]\n        thrustC = 0.21033486522175712               # baseline thrust [N]\n        differential = 0                            # thrust of right side: T_R = thrustC*(1 + differential)\n                                                    # thrust of left side: T_L = thrustC*(1 - differential)\n        roll = 0                                    # initial/static roll angle [rad]\n        in_structural_twist = 5*np.pi/180\n\n\n    else:\n        # NOTE: These values are not the correct trim. Run StaticTrim with your\n        # current discretisation\n        alpha = 2.4744791522743887*np.pi/180        # angle of attack [rad]\n        beta = 0.*np.pi/180                         # sideslip angle  [rad]\n        cs_deflection = 1.186515244051093*np.pi/180 # elevators deflection [rad]\n        aileron_deflection = 0*0.039011*np.pi/180   # aileron deflection [rad]\n        thrustC = 0.21033486522175712               # baseline thrust [N]\n        differential = 0                            # thrust of right side: T_R = thrustC*(1 + differential)\n                                                    # thrust of left side: T_L = thrustC*(1 - differential)\n        roll = 0                                    # initial/static roll angle [rad]\n        in_structural_twist = 5*np.pi/180\n\n    gravity = 'on'\n    gravity_value = 9.807\n\n    # stiffness multiplier\n    sigma = 1\n    # shear stiffness multipliers\n    ga_mult = 0.1\n\n    # spatial offset [m] for the gust. (if == 1, gust 1 m in front of reference\n    # point [0, 0, 0].\n    space_offset = 1.\n\n    try:\n        gust_intensity = data[case]['gust_intensity']\n        gust_length = data[case]['gust_length']*chord\n        gust_shape = data[case]['gust_shape']\n    except KeyError:\n        gust_intensity = 0\n        gust_length = 0\n        gust_shape = '1-cos'\n\n    # number of load substeps in the static coupled solver.\n    n_step = 1\n\n    # relaxation factor for the static coupled solver\n    # static relaxation factor \\in [0, 1). 0 == no relaxation\n    static_relaxation_factor = 0.5\n    # Dynamic relaxation parameters. Relaxation is linearly varied between\n    # initial and final relaxation factor in relaxation_steps\n    initial_relaxation_factor = 0.4\n    final_relaxation_factor = 0.9\n    relaxation_steps = 15\n\n    # nonlinear beam tolerance.\n    tolerance = 1e-6\n    # FSI iteration tolerance\n    fsi_tolerance = 1e-6\n    # wake length when not running horseshoe\n    wake_length = 4 # meters\n\n    # geometrical data\n    span_section = 1.0\n    dihedral_outer = 10*np.pi/180\n\n    length_centre_tail = 1.106\n    length_outer_tail = 0.65\n    span_tail = 0.24\n    span_ctail_L = 0.145\n    span_ctail_R = 0.24\n    span_fin = 0.184\n    span_vfin = 0.15\n\n    n_sections = 3\n\n    # DISCRETISATION\n    # spatial discretisation\n    # chordwise discretisation\n    m = 8               # main wing\n    m_tail = 3          # tails\n    m_fin = 4           # fins and pods\n\n    # number of structural elements in inner and outer sections.\n    # note that you will have 2*n_elem spanwise aero panels\n    n_elem_section = 4\n    # structural elements in dihedral section\n    n_elem_section_dihedral = 8\n    # elements in central tail boom\n    n_elem_centre_tail = 1\n    # elements in outer tail booms\n    n_elem_outer_tail = 1\n    # elements in tails (per semi span)\n    n_elem_tail = 1\n    # elements in fins and pods\n    n_elem_fin = 1\n    n_elem_main = int((n_sections-1)*n_elem_section + n_elem_section_dihedral)\n    # number of aero surfaces. To understand the logic of this, check SHARPy's\n    # documentation\n    n_surfaces = 20\n\n    # temporal discretisation\n    # seconds of simulation\n    physical_time = 10\n    # factor multiplying the theoretical timestep\n    # (dt = chord/m/u_inf*tstep_factor)\n    tstep_factor = 1\n    dt = chord/m/u_inf*tstep_factor\n    n_tstep = round(physical_time/dt)\n    print('n_tstep: ', n_tstep)\n\n    # if horseshoe wake (only for static) is 'on'\n    # we only need one chordwise wake panel\n    if horseshoe == 'on':\n        mstar = 1\n    else:\n    # else, we put as many as we need to reach wake_length in steady conditions\n        mstar = int(wake_length/(u_inf*dt))\n    print('mstar = ', mstar)\n\n    # beam processing\n    # don't modify this\n    n_node_elem = 3\n    span_main = n_sections*span_section\n\n    # total elements, nodes... calculation\n    # total number of elements\n    n_elem = 0\n    n_elem += n_elem_main\n    n_elem += n_elem_main\n    n_elem += n_elem_centre_tail\n    n_elem += n_elem_tail\n    n_elem += n_elem_tail\n    n_elem += n_elem_fin\n    n_elem += n_elem_outer_tail\n    n_elem += n_elem_tail\n    n_elem += n_elem_tail\n    n_elem += n_elem_fin\n    n_elem += n_elem_outer_tail\n    n_elem += n_elem_tail\n    n_elem += n_elem_tail\n    n_elem += n_elem_fin\n    n_elem += n_elem_outer_tail\n    n_elem += n_elem_tail\n    n_elem += n_elem_tail\n    n_elem += n_elem_outer_tail\n    n_elem += n_elem_tail\n    n_elem += n_elem_tail\n    n_elem += n_elem_fin\n    n_elem += n_elem_fin\n    n_elem += n_elem_fin\n    n_elem += n_elem_fin\n    n_elem += n_elem_fin\n\n# number of nodes per part\n    n_node_section = n_elem_section*(n_node_elem - 1) + 1\n    n_node_section_dihedral = n_elem_section_dihedral*(n_node_elem - 1) + 1\n    n_node_main = n_elem_main*(n_node_elem - 1) + 1\n    n_node_centre_tail = n_elem_centre_tail*(n_node_elem - 1) + 1\n    n_node_tail = n_elem_tail*(n_node_elem - 1) + 1\n    n_node_outer_tail = n_elem_outer_tail*(n_node_elem - 1) + 1\n    n_node_fin = n_elem_fin*(n_node_elem - 1) + 1\n\n# total number of nodes\n    n_node = 0\n    n_node += n_node_main + n_node_main - 1\n    n_node += n_node_centre_tail - 1\n    n_node += n_node_tail - 1\n    n_node += n_node_tail - 1\n    n_node += n_node_fin - 1\n    n_node += n_node_outer_tail - 1\n    n_node += n_node_tail - 1\n    n_node += n_node_tail - 1\n    n_node += n_node_fin - 1\n    n_node += n_node_outer_tail - 1\n    n_node += n_node_tail - 1\n    n_node += n_node_tail - 1\n    n_node += n_node_fin - 1\n    n_node += n_node_outer_tail - 1\n    n_node += n_node_tail - 1\n    n_node += n_node_tail - 1\n    n_node += n_node_outer_tail - 1\n    n_node += n_node_tail - 1\n    n_node += n_node_tail - 1\n    n_node += n_node_fin - 1\n    n_node += n_node_fin - 1\n    n_node += n_node_fin - 1\n    n_node += n_node_fin - 1\n    n_node += n_node_fin - 1\n\n    # stiffness and mass matrices\n    # if you add custom stiffness/mass matrices, make sure to update this\n    # number\n    n_stiffness = 12\n    n_mass = 17\n\n    # PLACEHOLDERS\n    # beam\n    x = np.zeros((n_node, ))\n    y = np.zeros((n_node, ))\n    z = np.zeros((n_node, ))\n    stiffness_db = np.zeros((n_stiffness, 6, 6))\n    mass_db = np.zeros((n_mass, 6, 6))\n    beam_number = np.zeros((n_elem, ), dtype=int)\n    num_node_elements = np.zeros((n_elem, ), dtype=int) + 3\n    frame_of_reference_delta = np.zeros((n_elem, n_node_elem, 3))\n    structural_twist = np.zeros((n_elem, n_node_elem))\n    conn = np.zeros((n_elem, n_node_elem), dtype=int)\n    elem_stiffness = np.zeros((n_elem, ), dtype=int)\n    elem_mass = np.zeros((n_elem, ), dtype=int)\n    boundary_conditions = np.zeros((n_node, ), dtype=int)\n    app_forces = np.zeros((n_node, 6))\n    n_lumped_mass = 0\n    lumped_mass_nodes = None\n    lumped_mass = None\n    lumped_mass_inertia = None\n    lumped_mass_position = None\n\n    end_nodesL = np.zeros((n_sections,), dtype=int)\n    end_nodesR = np.zeros((n_sections,), dtype=int)\n    end_elementsL = np.zeros((n_sections,), dtype=int)\n    end_elementsR = np.zeros((n_sections,), dtype=int)\n    end_tails_nodesL = np.zeros((2, ), dtype=int)\n    end_tails_elementsL = np.zeros((2, ), dtype=int)\n    end_tails_nodesR = np.zeros((2, ), dtype=int)\n    end_tails_elementsR = np.zeros((2, ), dtype=int)\n    end_of_centre_tail_node  = 0\n    end_of_centre_tail_elem  = 0\n\n    end_tip_tail_nodeC = np.zeros((2, ), dtype=int)\n    end_tip_tail_elemC = np.zeros((2, ), dtype=int)\n\n    tail_beam_numbersR = np.zeros((2, 3)) # 0=centre spar, 1=R tail, 2=L tail\n    tail_beam_numbersL = np.zeros((2, 3)) # 0=centre spar, 1=R tail, 2=L tail\n    tail_beam_numbersC = np.zeros((3, ))\n\n    fin_beam_numberC = 0\n    fin_beam_numberL = 0\n    fin_beam_numberR = 0\n    vfin_beam_numberC = 0\n    vfin_beam_numberL = 0\n    vfin_beam_numberR = 0\n    fin_beam_numberLL = 0\n    fin_beam_numberRR = 0\n\n    # aero\n    airfoil_distribution = np.zeros((n_elem, n_node_elem), dtype=int)\n    surface_distribution = np.zeros((n_elem,), dtype=int) - 1\n    surface_m = np.zeros((n_surfaces, ), dtype=int)\n    # chordwise panel distribution. I'd leave there, but if you want,\n    # you can try '1-cos'\n    m_distribution = 'uniform'\n    aero_node = np.zeros((n_node,), dtype=bool)\n    twist = np.zeros((n_elem, n_node_elem))\n    chord = np.zeros((n_elem, n_node_elem,))\n    elastic_axis = np.zeros((n_elem, n_node_elem,))\n\n    thrust_nodes = np.zeros((5,), dtype=int)\n\n# FUNCTIONS-------------------------------------------------------------\n    def clean_test_files():\n        fem_file_name = route + '/' + case_name + '.fem.h5'\n        if os.path.isfile(fem_file_name):\n            os.remove(fem_file_name)\n\n        dyn_file_name = route + '/' + case_name + '.dyn.h5'\n        if os.path.isfile(dyn_file_name):\n            os.remove(dyn_file_name)\n\n        aero_file_name = route + '/' + case_name + '.aero.h5'\n        if os.path.isfile(aero_file_name):\n            os.remove(aero_file_name)\n\n        solver_file_name = route + '/' + case_name + '.sharpy'\n        if os.path.isfile(solver_file_name):\n            os.remove(solver_file_name)\n\n        flightcon_file_name = route + '/' + case_name + '.flightcon.txt'\n        if os.path.isfile(flightcon_file_name):\n            os.remove(flightcon_file_name)\n\n    def read_beam_data(filename=route + '/inputs/beam_properties.xlsx'):\n        \"\"\"\n        Function reading the xlsx file with beam properties, including\n        stiffness and distributed mass.\n\n        Data is then processed to obtain the 6x6 mass matrices.\n        \"\"\"\n        import pandas as pd\n        import sharpy.utils.model_utils as model_utils\n        # mass\n        mass_sheet = pd.read_excel(filename, sheet_name='mass', header=1, skip_rows=1, index_col=0)\n        # remove units\n        mass_sheet = mass_sheet.drop(['[-]'])\n        mass_data = dict()\n        for index, row in mass_sheet.iterrows():\n            mass_data[index] = dict()\n            mass_data[index]['mass'] = mass_sheet['mass'][index]\n            mass_data[index]['inertia'] = np.zeros((3, 3))\n            mass_data[index]['inertia'][0, 0] = mass_sheet['ixx'][index]\n            mass_data[index]['inertia'][1, 1] = mass_sheet['iyy'][index]\n            mass_data[index]['inertia'][2, 2] = mass_sheet['izz'][index]\n            mass_data[index]['inertia'][1, 2] = mass_sheet['iyz'][index]\n            mass_data[index]['inertia'][2, 1] = mass_sheet['iyz'][index]\n            mass_data[index]['xcg'] = np.zeros((3,))\n            mass_data[index]['xcg'][0] = mass_sheet['xcg'][index]\n            mass_data[index]['xcg'][1] = mass_sheet['ycg'][index]\n            mass_data[index]['xcg'][2] = mass_sheet['zcg'][index]\n\n            mass_data[index]['full_matrix'] = (\n                model_utils.mass_matrix_generator(mass_data[index]['mass'],\n                                                  mass_data[index]['xcg'],\n                                                  mass_data[index]['inertia']))\n        # stiffness\n        stiff_sheet = pd.read_excel(filename, sheet_name='stiffness', header=1, skip_rows=1, index_col=0)\n        # remove units\n        stiff_sheet = stiff_sheet.drop(['[-]'])\n        stiff_data = dict()\n        for index, row in stiff_sheet.iterrows():\n            stiff_data[index] = np.zeros((6, 6))\n            stiff_data[index][0, 0] = stiff_sheet['ea'][index]\n            stiff_data[index][1, 1] = stiff_sheet['gay'][index]*ga_mult\n            stiff_data[index][2, 2] = stiff_sheet['gaz'][index]*ga_mult\n            stiff_data[index][3, 3] = stiff_sheet['gj'][index]\n            stiff_data[index][4, 4] = stiff_sheet['eiy'][index]\n            stiff_data[index][5, 5] = stiff_sheet['eiz'][index]\n            stiff_data[index][0, 4] = stiff_sheet['k13'][index]     # cross-\n            stiff_data[index][4, 0] = stiff_sheet['k13'][index]     # stiffness\n            stiff_data[index][0, 5] = stiff_sheet['k14'][index]\n            stiff_data[index][5, 0] = stiff_sheet['k14'][index]     # 1-axial\n            stiff_data[index][4, 5] = stiff_sheet['k34'][index]     # 3-OOP\n            stiff_data[index][5, 4] = stiff_sheet['k34'][index]     # 4-IP\n\n        return mass_data, stiff_data\n\n    def read_lumped_mass_data(filename=route + '/inputs/lumped_mass.xlsx'):\n        import pandas as pd\n        xl = pd.ExcelFile(filename)\n        sheets = {sheet_name: xl.parse(sheet_name, header=0, skiprows=(0, 2)) for sheet_name in xl.sheet_names}\n\n        lumped_mass_data = dict()\n        n_lumped = 0\n        for sheet, val in sheets.items():\n            if sheet == 'Notes':\n                continue\n            lumped_mass_data[sheet] = list()\n            for row in range(len(val)):\n                n_lumped += 1\n                lumped_mass_data[sheet].append(dict())\n                lumped_mass_data[sheet][row]['mass'] = 0.0\n                lumped_mass_data[sheet][row]['inertia'] = np.zeros((3, 3))\n                lumped_mass_data[sheet][row]['xcg'] = np.zeros((3,))\n\n                lumped_mass_data[sheet][row]['mass'] = val['Mass'][row]\n                lumped_mass_data[sheet][row]['inertia'][0, 0] = val['Ixx'][row]\n                lumped_mass_data[sheet][row]['inertia'][1, 1] = val['Iyy'][row]\n                lumped_mass_data[sheet][row]['inertia'][2, 2] = val['Izz'][row]\n                lumped_mass_data[sheet][row]['inertia'][0, 1] = val['Ixy'][row]\n                lumped_mass_data[sheet][row]['inertia'][1, 0] = val['Ixy'][row]\n                lumped_mass_data[sheet][row]['inertia'][0, 2] = val['Ixz'][row]\n                lumped_mass_data[sheet][row]['inertia'][2, 0] = val['Ixz'][row]\n                lumped_mass_data[sheet][row]['inertia'][1, 2] = val['Iyz'][row]\n                lumped_mass_data[sheet][row]['inertia'][2, 1] = val['Iyz'][row]\n\n                # location of centre of gravity for lumped mass is given in\n                # material frame of reference, which depends on the element and\n                # node you are clamping it to. Check the documentation for\n                # a full explanation, but as a rule of thumb: check the\n                # frame_of_reference_delta vector parameter in the beam\n                # definition. It usually points towards \"y\" in material FoR, and\n                # \"x\" is always tangent to the beam, pointing towards increasing\n                # node numbers.\n                # This is valid as long as structural_twist is 0. If\n                # it is not, you need to take into account that the material\n                # FoR will be rotated a structrual_twist angle around\n                # the material \"x\" axis.\n                lumped_mass_data[sheet][row]['xcg'][0] = val['xcg'][row]\n                lumped_mass_data[sheet][row]['xcg'][1] = val['ycg'][row]\n                lumped_mass_data[sheet][row]['xcg'][2] = val['zcg'][row]\n\n        lumped_mass_data['n_lumped_mass'] = n_lumped\n        return lumped_mass_data\n\n    def generate_fem():\n        global end_of_centre_tail_node, end_of_centre_tail_elem\n        global fin_beam_numberC, fin_beam_numberL, fin_beam_numberR\n        global vfin_beam_numberC, vfin_beam_numberL, vfin_beam_numberR\n        global fin_beam_numberLL, fin_beam_numberRR\n        global residual_forces, residual_moments\n\n        mass_data, stiff_data = read_beam_data()\n        lumped_mass_data = read_lumped_mass_data()\n\n        # process lumped mass\n        n_lumped_mass = lumped_mass_data['n_lumped_mass']\n        lumped_mass_nodes = np.zeros((n_lumped_mass, ), dtype=int)\n        lumped_mass = np.zeros((n_lumped_mass, ))\n        lumped_mass_inertia = np.zeros((n_lumped_mass, 3, 3))\n        lumped_mass_position = np.zeros((n_lumped_mass, 3))\n        lumped_mass_indices = dict()\n        i_lm = 0\n        for i, k in enumerate(lumped_mass_data.keys()):\n            if k == 'n_lumped_mass':\n                continue\n            lumped_mass_indices[k] = list()\n            for j in range(len(lumped_mass_data[k])):\n                lumped_mass[i_lm] = lumped_mass_data[k][j]['mass']\n                lumped_mass_inertia[i_lm] = lumped_mass_data[k][j]['inertia']\n                lumped_mass_position[i_lm] = lumped_mass_data[k][j]['xcg']\n                lumped_mass_indices[k].append(i_lm)\n                i_lm += 1\n\n        # process distributed mass\n        mass_db[0, ...] = mass_data['Linboard']['full_matrix']\n        mass_db[1, ...] = mass_data['Loutboard']['full_matrix']\n        mass_db[2, ...] = mass_data['Ldihedral']['full_matrix']\n        mass_db[3, ...] = mass_data['Rinboard']['full_matrix']\n        mass_db[4, ...] = mass_data['Routboard']['full_matrix']\n        mass_db[5, ...] = mass_data['Rdihedral']['full_matrix']\n        mass_db[6, ...] = mass_data['boom']['full_matrix']\n        mass_db[7, ...] = mass_data['tailL']['full_matrix']\n        mass_db[8, ...] = mass_data['tailR']['full_matrix']\n        mass_db[9, ...] = mass_data['Cfin']['full_matrix']\n        mass_db[10, ...] = mass_data['Lfin']['full_matrix']\n        mass_db[11, ...] = mass_data['Rfin']['full_matrix']\n        mass_db[12, ...] = mass_data['LLfin']['full_matrix']\n        mass_db[13, ...] = mass_data['RRfin']['full_matrix']\n        mass_db[14, ...] = mass_data['Cvfin']['full_matrix']\n        mass_db[15, ...] = mass_data['Lvfin']['full_matrix']\n        mass_db[16, ...] = mass_data['Rvfin']['full_matrix']\n\n        # process stiffness data\n        stiffness_db[0, ...] = sigma*stiff_data['Linboard']\n        stiffness_db[1, ...] = sigma*stiff_data['Loutboard']\n        stiffness_db[2, ...] = sigma*stiff_data['Ldihedral']\n        stiffness_db[3, ...] = sigma*stiff_data['Rinboard']\n        stiffness_db[4, ...] = sigma*stiff_data['Routboard']\n        stiffness_db[5, ...] = sigma*stiff_data['Rdihedral']\n        stiffness_db[6, ...] = sigma*stiff_data['boom']\n        stiffness_db[7, ...] = sigma*stiff_data['tailL']\n        stiffness_db[8, ...] = sigma*stiff_data['tailR']\n        stiffness_db[9, ...] = sigma*stiff_data['Cfin']\n        stiffness_db[10, ...] = sigma*stiff_data['Lfin']\n        stiffness_db[11, ...] = sigma*stiff_data['Rfin']\n\n        # this matrix is useful when using symmetrical data for the mass, while\n        # your local frames of reference are not.\n        # For example, the right wing has a material \"y\" axis pointing fore,\n        # while the left points aft due to \"x\" pointing in opposite directions.\n        rotation_mat = algebra.rotation3d_z(np.pi)\n        # I use this matrix to convert from the canonical material FoR to the one with\n        # structural twist considered\n        rotation_mat_x = algebra.rotation3d_x(-in_structural_twist)\n\n        we = 0\n        wn = 0\n\n        # SECTION 0R\n        # add the lumped mass of the pods\n        lumped_mass_id = 'centre_pod'\n        for i in range(len(lumped_mass_indices[lumped_mass_id])):\n            lumped_mass_nodes[lumped_mass_indices[lumped_mass_id][i]] = 0\n            lumped_mass_position[lumped_mass_indices[lumped_mass_id][i]] = np.dot(rotation_mat_x,\n                                                                                  np.dot(np.eye(3),\n                                                                                         lumped_mass_position[lumped_mass_indices[lumped_mass_id][i]])\n                                                                            )\n\n        # add thrust as applied force\n        # it is necessary to rotate it in order to have a horizontal force,\n        # as \"y_materal\" points 5 deg above.\n        app_forces[0, 0:3] = thrustC*np.array([0.0, np.cos(in_structural_twist), -np.sin(in_structural_twist)])\n        thrust_nodes[0] = 0\n\n        beam_number[we:we + n_elem_section] = 0\n        y[wn:wn + n_node_section] = np.linspace(0.0, span_section, n_node_section)\n        structural_twist[we:we + n_elem_section, :] = in_structural_twist\n        for ielem in range(n_elem_section):\n            # connectivities. Order is [0, 2, 1]\n            conn[we + ielem, :] = ((np.ones((3, ))*(we + ielem)*(n_node_elem - 1)) + np.array([0, 2, 1]))\n            for inode in range(n_node_elem):\n                frame_of_reference_delta[we + ielem, inode, :] = [-1.0, 0.0, 0.0]\n        elem_stiffness[we:we + n_elem_section] = 3\n        elem_mass[we:we + n_elem_section] = 3\n        boundary_conditions[0] = 1\n        # we: working_element\n        # wn: working_node\n        we += n_elem_section\n        wn += n_node_section\n        # keeping track of the node and element of very end of section to then\n        # map the aero more easily.\n        end_nodesR[0] = wn - 1\n        end_elementsR[0] = we - 1\n\n        # SECTION 1R\n        # add the lumped mass of the pods\n        lumped_mass_id = 'R_inboard_pod'\n        for i in range(len(lumped_mass_indices[lumped_mass_id])):\n            lumped_mass_nodes[lumped_mass_indices[lumped_mass_id][i]] = wn - 1\n            lumped_mass_position[lumped_mass_indices[lumped_mass_id][i]] = np.dot(rotation_mat_x,\n                                                                                  np.dot(np.eye(3),\n                                                                                         lumped_mass_position[lumped_mass_indices[lumped_mass_id][i]])\n                                                                            )\n\n        app_forces[wn-1, 0:3] = thrustC*np.array([0.0, np.cos(in_structural_twist), -np.sin(in_structural_twist)])\n        thrust_nodes[1] = wn - 1\n\n        beam_number[we:we + n_elem_section] = 1\n        y[wn:wn + n_node_section - 1] = y[wn - 1] + np.linspace(0.0, span_section, n_node_section)[1:]\n        structural_twist[we:we + n_elem_section, :] = in_structural_twist\n        for ielem in range(n_elem_section):\n            conn[we + ielem, :] = ((np.ones((3, ))*(we + ielem)*(n_node_elem - 1)) + np.array([0, 2, 1]))\n            for inode in range(n_node_elem):\n                frame_of_reference_delta[we + ielem, inode, :] = [-1.0, 0.0, 0.0]\n        elem_stiffness[we:we + n_elem_section] = 4\n        elem_mass[we:we + n_elem_section] = 4\n        we += n_elem_section\n        wn += n_node_section - 1\n        end_nodesR[1] = wn - 1\n        end_elementsR[1] = we - 1\n\n        # SECTION 2R\n        # add the lumped mass of the pods\n        lumped_mass_id = 'R_outboard_pod'\n        for i in range(len(lumped_mass_indices[lumped_mass_id])):\n            lumped_mass_nodes[lumped_mass_indices[lumped_mass_id][i]] = wn - 1\n            lumped_mass_position[lumped_mass_indices[lumped_mass_id][i]] = np.dot(rotation_mat_x,\n                                                                                  np.dot(np.eye(3),\n                                                                                         lumped_mass_position[lumped_mass_indices[lumped_mass_id][i]])\n                                                                            )\n\n        app_forces[wn-1, 0:3] = thrustC*(1 + differential)*np.array([0.0, np.cos(in_structural_twist), -np.sin(in_structural_twist)])\n        thrust_nodes[2] = wn - 1\n\n        beam_number[we:we + n_elem_section_dihedral] = 2\n        structural_twist[we:we + n_elem_section_dihedral, :] = in_structural_twist\n        y[wn:wn + n_node_section_dihedral - 1] = y[wn - 1] + np.linspace(0.0,\n                                                                np.cos(dihedral_outer)*span_section,\n                                                                n_node_section_dihedral)[1:]\n        z[wn:wn + n_node_section_dihedral - 1] = z[wn - 1] + np.linspace(0.0,\n                                                                np.sin(dihedral_outer)*span_section,\n                                                                n_node_section_dihedral)[1:]\n        for ielem in range(n_elem_section_dihedral):\n            conn[we + ielem, :] = ((np.ones((3, ))*(we + ielem)*(n_node_elem - 1)) + np.array([0, 2, 1]))\n            for inode in range(n_node_elem):\n                frame_of_reference_delta[we + ielem, inode, :] = [-1.0, 0.0, 0.0]\n        elem_stiffness[we:we + n_elem_section_dihedral] = 5\n        elem_mass[we:we + n_elem_section_dihedral] = 5\n        boundary_conditions[wn + n_node_section_dihedral - 1 - 1] = -1\n        we += n_elem_section_dihedral\n        wn += n_node_section_dihedral - 1\n        end_nodesR[2] = wn - 1\n        end_elementsR[2] = we - 1\n\n        # SECTION 0L\n        beam_number[we:we + n_elem_section] = 3\n        structural_twist[we:we + n_elem_section, :] = -in_structural_twist\n        y[wn:wn + n_node_section - 1] = np.linspace(0.0, -span_section, n_node_section)[1:]\n        for ielem in range(n_elem_section):\n            conn[we + ielem, :] = ((np.ones((3, ))*(we + ielem)*(n_node_elem - 1)) + np.array([0, 2, 1]))\n            for inode in range(n_node_elem):\n                frame_of_reference_delta[we + ielem, inode, :] = [1.0, 0.0, 0.0]\n        conn[we, 0] = 0\n        elem_stiffness[we:we + n_elem_section] = 0\n        elem_mass[we:we + n_elem_section] = 0\n        we += n_elem_section\n        wn += n_node_section - 1\n        end_nodesL[0] = wn - 1\n        end_elementsL[0] = we - 1\n\n        # SECTION 1L\n        # add the lumped mass of the pods\n        lumped_mass_id = 'L_inboard_pod'\n        for i in range(len(lumped_mass_indices[lumped_mass_id])):\n            lumped_mass_nodes[lumped_mass_indices[lumped_mass_id][i]] = wn - 1\n            lumped_mass_position[lumped_mass_indices[lumped_mass_id][i]] = np.dot(rotation_mat_x.T,\n                                                                                  np.dot(rotation_mat,\n                                                                                         lumped_mass_position[lumped_mass_indices[lumped_mass_id][i]])\n                                                                            )\n            lumped_mass_position[lumped_mass_indices[lumped_mass_id][i]][0] *= -1\n        app_forces[wn-1, 0:3] = thrustC*np.array([0.0, -np.cos(in_structural_twist), -np.sin(in_structural_twist)])\n        thrust_nodes[3] = wn - 1\n\n\n        beam_number[we:we + n_elem_section] = 4\n        structural_twist[we:we + n_elem_section, :] = -in_structural_twist\n        y[wn:wn + n_node_section - 1] = y[wn - 1] + np.linspace(0.0, -span_section, n_node_section)[1:]\n        for ielem in range(n_elem_section):\n            conn[we + ielem, :] = ((np.ones((3, ))*(we + ielem)*(n_node_elem - 1)) + np.array([0, 2, 1]))\n            for inode in range(n_node_elem):\n                frame_of_reference_delta[we + ielem, inode, :] = [1.0, 0.0, 0.0]\n        elem_stiffness[we:we + n_elem_section] = 1\n        elem_mass[we:we + n_elem_section] = 1\n        we += n_elem_section\n        wn += n_node_section - 1\n        end_nodesL[1] = wn - 1\n        end_elementsL[1] = we - 1\n\n        # SECTION 2L\n        # add the lumped mass of the pods\n        lumped_mass_id = 'L_outboard_pod'\n        for i in range(len(lumped_mass_indices[lumped_mass_id])):\n            lumped_mass_nodes[lumped_mass_indices[lumped_mass_id][i]] = wn - 1\n            lumped_mass_position[lumped_mass_indices[lumped_mass_id][i]] = np.dot(rotation_mat_x.T,\n                                                                                  np.dot(rotation_mat,\n                                                                                         lumped_mass_position[lumped_mass_indices[lumped_mass_id][i]]))\n            lumped_mass_position[lumped_mass_indices[lumped_mass_id][i]][0] *= -1\n        app_forces[wn-1, 0:3] = thrustC*(1 - differential)*np.array([0.0, -np.cos(in_structural_twist), -np.sin(in_structural_twist)])\n        thrust_nodes[4] = wn - 1\n\n        beam_number[we:we + n_elem_section_dihedral] = 5\n        structural_twist[we:we + n_elem_section_dihedral, :] = -in_structural_twist\n        y[wn:wn + n_node_section_dihedral - 1] = y[wn - 1] + np.linspace(0.0, -np.cos(dihedral_outer)*span_section, n_node_section_dihedral)[1:]\n        z[wn:wn + n_node_section_dihedral - 1] = z[wn - 1] + np.linspace(0.0, np.sin(dihedral_outer)*span_section, n_node_section_dihedral)[1:]\n        for ielem in range(n_elem_section_dihedral):\n            conn[we + ielem, :] = ((np.ones((3, ))*(we + ielem)*(n_node_elem - 1)) + np.array([0, 2, 1]))\n            for inode in range(n_node_elem):\n                frame_of_reference_delta[we + ielem, inode, :] = [1.0, 0.0, 0.0]\n        elem_stiffness[we:we + n_elem_section_dihedral] = 2\n        elem_mass[we:we + n_elem_section_dihedral] = 2\n        boundary_conditions[wn + n_node_section_dihedral - 1 - 1] = -1\n        we += n_elem_section_dihedral\n        wn += n_node_section_dihedral - 1\n        end_nodesL[2] = wn - 1\n        end_elementsL[2] = we - 1\n\n\n        # centre tail\n        beam_number[we:we + n_elem_centre_tail] = 6\n        tail_beam_numbersC[0] = 6\n        x[wn:wn + n_node_centre_tail - 1] = np.linspace(0.0, length_centre_tail, n_node_centre_tail)[1:]\n        for ielem in range(n_elem_centre_tail):\n            conn[we + ielem, :] = ((np.ones((3, ))*(we + ielem)*(n_node_elem - 1)) + np.array([0, 2, 1]))\n            for inode in range(n_node_elem):\n                frame_of_reference_delta[we + ielem, inode, :] = [0.0, 1.0, 0.0]\n        conn[we, 0] = 0\n        elem_stiffness[we:we + n_elem_centre_tail] = 6\n        elem_mass[we:we + n_elem_centre_tail] = 6\n        we += n_elem_centre_tail\n        wn += n_node_centre_tail - 1\n        end_of_centre_tail_node = wn - 1\n        end_of_centre_tail_elem = we\n\n        if vertical_tail:\n            beam_number[we:we + n_elem_tail] = 7\n            tail_beam_numbersC[1] = 7\n            x[wn:wn + n_node_tail - 1] = x[wn - 1]\n            y[wn:wn + n_node_tail - 1] = y[wn - 1]\n            z[wn:wn + n_node_tail - 1] = z[wn - 1] + np.linspace(0.0, span_ctail_R, n_node_tail)[1:]\n            for ielem in range(n_elem_tail):\n                conn[we + ielem, :] = ((np.ones((3, ))*(we + ielem)*(n_node_elem - 1)) + np.array([0, 2, 1]))\n                for inode in range(n_node_elem):\n                    frame_of_reference_delta[we + ielem, inode, :] = [-1.0, 0.0, 0.0]\n            elem_stiffness[we:we + n_elem_tail] = 8\n            elem_mass[we:we + n_elem_tail] = 8\n            boundary_conditions[wn + n_node_tail - 1 - 1] = -1\n            end_tip_tail_nodeC[0] = wn + n_node_tail - 1 - 1\n            end_tip_tail_elemC[0] = we + n_elem_tail - 1\n            we += n_elem_tail\n            wn += n_node_tail - 1\n\n            beam_number[we:we + n_elem_tail] = 8\n            tail_beam_numbersC[2] = 8\n            x[wn:wn + n_node_tail - 1] = x[end_of_centre_tail_node]\n            y[wn:wn + n_node_tail - 1] = y[wn - 1]\n            z[wn:wn + n_node_tail - 1] = z[end_of_centre_tail_node] + np.linspace(0.0, -span_ctail_L, n_node_tail)[1:]\n            for ielem in range(n_elem_tail):\n                conn[we + ielem, :] = ((np.ones((3, ))*(we + ielem)*(n_node_elem - 1)) + np.array([0, 2, 1]))\n                for inode in range(n_node_elem):\n                    frame_of_reference_delta[we + ielem, inode, :] = [1.0, 0.0, 0.0]\n            conn[we, 0] = end_of_centre_tail_node\n            elem_stiffness[we:we + n_elem_tail] = 7\n            elem_mass[we:we + n_elem_tail] = 7\n            boundary_conditions[wn + n_node_tail - 1 -1] = -1\n            end_tip_tail_nodeC[1] = wn + n_node_tail - 1 - 1\n            end_tip_tail_elemC[1] = we + n_elem_tail - 1\n            we += n_elem_tail\n            wn += n_node_tail - 1\n        else:\n            beam_number[we:we + n_elem_tail] = 7\n            tail_beam_numbersC[1] = 7\n            x[wn:wn + n_node_tail - 1] = x[wn - 1]\n            y[wn:wn + n_node_tail - 1] = y[wn - 1] + np.linspace(0.0, span_ctail_R, n_node_tail)[1:]\n            for ielem in range(n_elem_tail):\n                conn[we + ielem, :] = ((np.ones((3, ))*(we + ielem)*(n_node_elem - 1)) + np.array([0, 2, 1]))\n                for inode in range(n_node_elem):\n                    frame_of_reference_delta[we + ielem, inode, :] = [-1.0, 0.0, 0.0]\n            elem_stiffness[we:we + n_elem_tail] = 8\n            elem_mass[we:we + n_elem_tail] = 8\n            boundary_conditions[wn + n_node_tail - 1 - 1] = -1\n            end_tip_tail_nodeC[0] = wn + n_node_tail - 1 - 1\n            end_tip_tail_elemC[0] = we + n_elem_tail - 1\n            we += n_elem_tail\n            wn += n_node_tail - 1\n\n            beam_number[we:we + n_elem_tail] = 8\n            tail_beam_numbersC[2] = 8\n            x[wn:wn + n_node_tail - 1] = x[end_of_centre_tail_node]\n            y[wn:wn + n_node_tail - 1] = y[end_of_centre_tail_node] + np.linspace(0.0, -span_ctail_L, n_node_tail)[1:]\n            for ielem in range(n_elem_tail):\n                conn[we + ielem, :] = ((np.ones((3, ))*(we + ielem)*(n_node_elem - 1)) + np.array([0, 2, 1]))\n                for inode in range(n_node_elem):\n                    frame_of_reference_delta[we + ielem, inode, :] = [1.0, 0.0, 0.0]\n            conn[we, 0] = end_of_centre_tail_node\n            elem_stiffness[we:we + n_elem_tail] = 7\n            elem_mass[we:we + n_elem_tail] = 7\n            boundary_conditions[wn + n_node_tail - 1 -1] = -1\n            end_tip_tail_nodeC[1] = wn + n_node_tail - 1 - 1\n            end_tip_tail_elemC[1] = we + n_elem_tail - 1\n            we += n_elem_tail\n            wn += n_node_tail - 1\n\n        # outer tail 0R\n        beam_number[we:we + n_elem_outer_tail] = 9\n        tail_beam_numbersR[0,0] = 9\n        x[wn:wn + n_node_outer_tail - 1] = np.linspace(0.0, length_outer_tail, n_node_outer_tail)[1:]\n        y[wn:wn + n_node_outer_tail - 1] = y[end_nodesR[0]]\n        for ielem in range(n_elem_outer_tail):\n            conn[we + ielem, :] = ((np.ones((3, ))*(we + ielem)*(n_node_elem - 1)) + np.array([0, 2, 1]))\n            for inode in range(n_node_elem):\n                frame_of_reference_delta[we + ielem, inode, :] = [0.0, 1.0, 0.0]\n        conn[we, 0] = end_nodesR[0]\n        elem_stiffness[we:we + n_elem_outer_tail] = 6\n        elem_mass[we:we + n_elem_outer_tail] = 6\n        we += n_elem_outer_tail\n        wn += n_node_outer_tail - 1\n        end_tails_nodesR[0] = wn - 1\n        end_tails_elementsR[0] = we - 1\n\n        beam_number[we:we + n_elem_tail] = 10\n        tail_beam_numbersR[0,1] = 10\n        x[wn:wn + n_node_tail - 1] = x[end_tails_nodesR[0]]\n        y[wn:wn + n_node_tail - 1] = y[end_tails_nodesR[0]] + np.linspace(0.0, span_tail, n_node_tail)[1:]\n        for ielem in range(n_elem_tail):\n            conn[we + ielem, :] = ((np.ones((3, ))*(we + ielem)*(n_node_elem - 1)) + np.array([0, 2, 1]))\n            for inode in range(n_node_elem):\n                frame_of_reference_delta[we + ielem, inode, :] = [-1.0, 0.0, 0.0]\n        elem_stiffness[we:we + n_elem_tail] = 8\n        elem_mass[we:we + n_elem_tail] = 8\n        boundary_conditions[wn + n_node_tail - 1 -1] = -1\n        we += n_elem_tail\n        wn += n_node_tail - 1\n\n        beam_number[we:we + n_elem_tail] = 11\n        tail_beam_numbersR[0,2] = 11\n        x[wn:wn + n_node_tail - 1] = x[end_tails_nodesR[0]]\n        y[wn:wn + n_node_tail - 1] = y[end_tails_nodesR[0]] + np.linspace(0.0, -span_tail, n_node_tail)[1:]\n        for ielem in range(n_elem_tail):\n            conn[we + ielem, :] = ((np.ones((3, ))*(we + ielem)*(n_node_elem - 1)) + np.array([0, 2, 1]))\n            for inode in range(n_node_elem):\n                frame_of_reference_delta[we + ielem, inode, :] = [1.0, 0.0, 0.0]\n        conn[we, 0] = end_tails_nodesR[0]\n        elem_stiffness[we:we + n_elem_tail] = 7\n        elem_mass[we:we + n_elem_tail] = 7\n        boundary_conditions[wn + n_node_tail - 1 -1] = -1\n        we += n_elem_tail\n        wn += n_node_tail - 1\n\n        # outer tail 1R\n        beam_number[we:we + n_elem_outer_tail] = 12\n        tail_beam_numbersR[1,0] = 12\n        x[wn:wn + n_node_outer_tail - 1] = np.linspace(0.0, length_outer_tail, n_node_outer_tail)[1:]\n        y[wn:wn + n_node_outer_tail - 1] = y[end_nodesR[1]]\n        for ielem in range(n_elem_outer_tail):\n            conn[we + ielem, :] = ((np.ones((3, ))*(we + ielem)*(n_node_elem - 1)) + np.array([0, 2, 1]))\n            for inode in range(n_node_elem):\n                frame_of_reference_delta[we + ielem, inode, :] = [0.0, 1.0, 0.0]\n        conn[we, 0] = end_nodesR[1]\n        elem_stiffness[we:we + n_elem_outer_tail] = 6\n        elem_mass[we:we + n_elem_outer_tail] = 6\n        we += n_elem_outer_tail\n        wn += n_node_outer_tail - 1\n        end_tails_nodesR[1] = wn - 1\n        end_tails_elementsR[1] = we - 1\n\n        beam_number[we:we + n_elem_tail] = 13\n        tail_beam_numbersR[1,1] = 13\n        x[wn:wn + n_node_tail - 1] = x[end_tails_nodesR[1]]\n        y[wn:wn + n_node_tail - 1] = y[end_tails_nodesR[1]] + np.linspace(0.0, span_tail, n_node_tail)[1:]\n        for ielem in range(n_elem_tail):\n            conn[we + ielem, :] = ((np.ones((3, ))*(we + ielem)*(n_node_elem - 1)) + np.array([0, 2, 1]))\n            for inode in range(n_node_elem):\n                frame_of_reference_delta[we + ielem, inode, :] = [-1.0, 0.0, 0.0]\n        elem_stiffness[we:we + n_elem_tail] = 8\n        elem_mass[we:we + n_elem_tail] = 8\n        boundary_conditions[wn + n_node_tail - 1 -1] = -1\n        we += n_elem_tail\n        wn += n_node_tail - 1\n\n        beam_number[we:we + n_elem_tail] = 14\n        tail_beam_numbersR[1,2] = 14\n        x[wn:wn + n_node_tail - 1] = x[end_tails_nodesR[1]]\n        y[wn:wn + n_node_tail - 1] = y[end_tails_nodesR[1]] + np.linspace(0.0, -span_tail, n_node_tail)[1:]\n        for ielem in range(n_elem_tail):\n            conn[we + ielem, :] = ((np.ones((3, ))*(we + ielem)*(n_node_elem - 1)) + np.array([0, 2, 1]))\n            for inode in range(n_node_elem):\n                frame_of_reference_delta[we + ielem, inode, :] = [1.0, 0.0, 0.0]\n        conn[we, 0] = end_tails_nodesR[1]\n        elem_stiffness[we:we + n_elem_tail] = 7\n        elem_mass[we:we + n_elem_tail] = 7\n        boundary_conditions[wn + n_node_tail - 1 -1] = -1\n        we += n_elem_tail\n        wn += n_node_tail - 1\n\n        # outer tail 0L\n        beam_number[we:we + n_elem_outer_tail] = 15\n        tail_beam_numbersL[0,0] = 15\n        x[wn:wn + n_node_outer_tail - 1] = np.linspace(0.0, length_outer_tail, n_node_outer_tail)[1:]\n        y[wn:wn + n_node_outer_tail - 1] = y[end_nodesL[0]]\n        for ielem in range(n_elem_outer_tail):\n            conn[we + ielem, :] = ((np.ones((3, ))*(we + ielem)*(n_node_elem - 1)) + np.array([0, 2, 1]))\n            for inode in range(n_node_elem):\n                frame_of_reference_delta[we + ielem, inode, :] = [0.0, 1.0, 0.0]\n        conn[we, 0] = end_nodesL[0]\n        elem_stiffness[we:we + n_elem_outer_tail] = 6\n        elem_mass[we:we + n_elem_outer_tail] = 6\n        we += n_elem_outer_tail\n        wn += n_node_outer_tail - 1\n        end_tails_nodesL[0] = wn - 1\n        end_tails_elementsL[0] = we - 1\n\n        beam_number[we:we + n_elem_tail] = 16\n        tail_beam_numbersL[0,1] = 16\n        x[wn:wn + n_node_tail - 1] = x[end_tails_nodesL[0]]\n        y[wn:wn + n_node_tail - 1] = y[end_tails_nodesL[0]] + np.linspace(0.0, span_tail, n_node_tail)[1:]\n        for ielem in range(n_elem_tail):\n            conn[we + ielem, :] = ((np.ones((3, ))*(we + ielem)*(n_node_elem - 1)) + np.array([0, 2, 1]))\n            for inode in range(n_node_elem):\n                frame_of_reference_delta[we + ielem, inode, :] = [-1.0, 0.0, 0.0]\n        conn[we, 0] = end_tails_nodesL[0]\n        elem_stiffness[we:we + n_elem_tail] = 8\n        elem_mass[we:we + n_elem_tail] = 8\n        boundary_conditions[wn + n_node_tail - 1 - 1] = -1\n        we += n_elem_tail\n        wn += n_node_tail - 1\n\n        beam_number[we:we + n_elem_tail] = 17\n        tail_beam_numbersL[0,2] = 17\n        x[wn:wn + n_node_tail - 1] = x[end_tails_nodesL[0]]\n        y[wn:wn + n_node_tail - 1] = y[end_tails_nodesL[0]] + np.linspace(0.0, -span_tail, n_node_tail)[1:]\n        for ielem in range(n_elem_tail):\n            conn[we + ielem, :] = ((np.ones((3, ))*(we + ielem)*(n_node_elem - 1)) + np.array([0, 2, 1]))\n            for inode in range(n_node_elem):\n                frame_of_reference_delta[we + ielem, inode, :] = [1.0, 0.0, 0.0]\n        conn[we, 0] = end_tails_nodesL[0]\n        elem_stiffness[we:we + n_elem_tail] = 7\n        elem_mass[we:we + n_elem_tail] = 7\n        boundary_conditions[wn + n_node_tail - 1 - 1] = -1\n        we += n_elem_tail\n        wn += n_node_tail - 1\n\n        # outer tail 1L\n        beam_number[we:we + n_elem_outer_tail] = 18\n        tail_beam_numbersL[1,0] = 18\n        x[wn:wn + n_node_outer_tail - 1] = np.linspace(0.0, length_outer_tail, n_node_outer_tail)[1:]\n        y[wn:wn + n_node_outer_tail - 1] = y[end_nodesL[1]]\n        for ielem in range(n_elem_outer_tail):\n            conn[we + ielem, :] = ((np.ones((3, ))*(we + ielem)*(n_node_elem - 1)) + np.array([0, 2, 1]))\n            for inode in range(n_node_elem):\n                frame_of_reference_delta[we + ielem, inode, :] = [0.0, 1.0, 0.0]\n        conn[we, 0] = end_nodesL[1]\n        elem_stiffness[we:we + n_elem_outer_tail] = 6\n        elem_mass[we:we + n_elem_outer_tail] = 6\n        we += n_elem_outer_tail\n        wn += n_node_outer_tail - 1\n        end_tails_nodesL[1] = wn - 1\n        end_tails_elementsL[1] = we - 1\n\n        beam_number[we:we + n_elem_tail] = 19\n        tail_beam_numbersL[1,1] = 19\n        x[wn:wn + n_node_tail - 1] = x[end_tails_nodesL[1]]\n        y[wn:wn + n_node_tail - 1] = y[end_tails_nodesL[1]] + np.linspace(0.0, span_tail, n_node_tail)[1:]\n        for ielem in range(n_elem_tail):\n            conn[we + ielem, :] = ((np.ones((3, ))*(we + ielem)*(n_node_elem - 1)) + np.array([0, 2, 1]))\n            for inode in range(n_node_elem):\n                frame_of_reference_delta[we + ielem, inode, :] = [-1.0, 0.0, 0.0]\n        elem_stiffness[we:we + n_elem_tail] = 8\n        elem_mass[we:we + n_elem_tail] = 8\n        boundary_conditions[wn + n_node_tail - 1 -1] = -1\n        we += n_elem_tail\n        wn += n_node_tail - 1\n\n        beam_number[we:we + n_elem_tail] = 20\n        tail_beam_numbersL[1,2] = 20\n        x[wn:wn + n_node_tail - 1] = x[end_tails_nodesL[1]]\n        y[wn:wn + n_node_tail - 1] = y[end_tails_nodesL[1]] + np.linspace(0.0, -span_tail, n_node_tail)[1:]\n        for ielem in range(n_elem_tail):\n            conn[we + ielem, :] = ((np.ones((3, ))*(we + ielem)*(n_node_elem - 1)) + np.array([0, 2, 1]))\n            for inode in range(n_node_elem):\n                frame_of_reference_delta[we + ielem, inode, :] = [1.0, 0.0, 0.0]\n        conn[we, 0] = end_tails_nodesL[1]\n        elem_stiffness[we:we + n_elem_tail] = 7\n        elem_mass[we:we + n_elem_tail] = 7\n        boundary_conditions[wn + n_node_tail - 1 -1] = -1\n        we += n_elem_tail\n        wn += n_node_tail - 1\n\n        # vertical fins (pods)\n        # centre one\n        beam_number[we:we + n_elem_fin] = 21\n        fin_beam_numberC = 21\n        x[wn:wn + n_node_fin - 1] = x[0]\n        y[wn:wn + n_node_fin - 1] = y[0]\n        z[wn:wn + n_node_fin - 1] = z[0] + np.linspace(0.0, -span_fin, n_node_fin)[1:]\n        for ielem in range(n_elem_fin):\n            conn[we + ielem, :] = ((np.ones((3, ))*(we + ielem)*(n_node_elem - 1)) + np.array([0, 2, 1]))\n            for inode in range(n_node_elem):\n                frame_of_reference_delta[we + ielem, inode, :] = [-1.0, 0.0, 0.0]\n        conn[we, 0] = 0\n        elem_stiffness[we:we + n_elem_fin] = 9\n        elem_mass[we:we + n_elem_fin] = 9\n        boundary_conditions[wn + n_node_fin - 1 - 1] = -1\n        we += n_elem_fin\n        wn += n_node_fin - 1\n\n        # left one\n        beam_number[we:we + n_elem_fin] = 22\n        fin_beam_numberL = 22\n        x[wn:wn + n_node_fin - 1] = x[end_nodesL[0]]\n        y[wn:wn + n_node_fin - 1] = y[end_nodesL[0]]\n        z[wn:wn + n_node_fin - 1] = z[end_nodesL[0]] + np.linspace(0.0, -span_fin, n_node_fin)[1:]\n        for ielem in range(n_elem_fin):\n            conn[we + ielem, :] = ((np.ones((3, ))*(we + ielem)*(n_node_elem - 1)) + np.array([0, 2, 1]))\n            for inode in range(n_node_elem):\n                frame_of_reference_delta[we + ielem, inode, :] = [-1.0, 0.0, 0.0]\n        conn[we, 0] = end_nodesL[0]\n        elem_stiffness[we:we + n_elem_fin] = 10\n        elem_mass[we:we + n_elem_fin] = 10\n        boundary_conditions[wn + n_node_fin - 1 - 1] = -1\n        we += n_elem_fin\n        wn += n_node_fin - 1\n\n        # right one\n        beam_number[we:we + n_elem_fin] = 23\n        fin_beam_numberR = 23\n        x[wn:wn + n_node_fin - 1] = x[end_nodesR[0]]\n        y[wn:wn + n_node_fin - 1] = y[end_nodesR[0]]\n        z[wn:wn + n_node_fin - 1] = z[end_nodesR[0]] + np.linspace(0.0, -span_fin, n_node_fin)[1:]\n        for ielem in range(n_elem_fin):\n            conn[we + ielem, :] = ((np.ones((3, ))*(we + ielem)*(n_node_elem - 1)) + np.array([0, 2, 1]))\n            for inode in range(n_node_elem):\n                frame_of_reference_delta[we + ielem, inode, :] = [-1.0, 0.0, 0.0]\n        conn[we, 0] = end_nodesR[0]\n        elem_stiffness[we:we + n_elem_fin] = 11\n        elem_mass[we:we + n_elem_fin] = 11\n        boundary_conditions[wn + n_node_fin - 1 - 1] = -1\n        we += n_elem_fin\n        wn += n_node_fin - 1\n\n        # left outer one\n        beam_number[we:we + n_elem_fin] = 24\n        fin_beam_numberLL = 24\n        x[wn:wn + n_node_fin - 1] = x[end_nodesL[1]]\n        y[wn:wn + n_node_fin - 1] = y[end_nodesL[1]]\n        z[wn:wn + n_node_fin - 1] = z[end_nodesL[1]] + np.linspace(0.0, -span_fin, n_node_fin)[1:]\n        for ielem in range(n_elem_fin):\n            conn[we + ielem, :] = ((np.ones((3, ))*(we + ielem)*(n_node_elem - 1)) + np.array([0, 2, 1]))\n            for inode in range(n_node_elem):\n                frame_of_reference_delta[we + ielem, inode, :] = [-1.0, 0.0, 0.0]\n        conn[we, 0] = end_nodesL[1]\n        elem_stiffness[we:we + n_elem_fin] = 10\n        elem_mass[we:we + n_elem_fin] = 12\n        boundary_conditions[wn + n_node_fin - 1 - 1] = -1\n        we += n_elem_fin\n        wn += n_node_fin - 1\n\n        # right outer one\n        beam_number[we:we + n_elem_fin] = 25\n        fin_beam_numberRR = 25\n        x[wn:wn + n_node_fin - 1] = x[end_nodesR[1]]\n        y[wn:wn + n_node_fin - 1] = y[end_nodesR[1]]\n        z[wn:wn + n_node_fin - 1] = z[end_nodesR[1]] + np.linspace(0.0, -span_fin, n_node_fin)[1:]\n        for ielem in range(n_elem_fin):\n            conn[we + ielem, :] = ((np.ones((3, ))*(we + ielem)*(n_node_elem - 1)) + np.array([0, 2, 1]))\n            for inode in range(n_node_elem):\n                frame_of_reference_delta[we + ielem, inode, :] = [-1.0, 0.0, 0.0]\n        conn[we, 0] = end_nodesR[1]\n        elem_stiffness[we:we + n_elem_fin] = 11\n        elem_mass[we:we + n_elem_fin] = 13\n        boundary_conditions[wn + n_node_fin - 1 - 1] = -1\n        we += n_elem_fin\n        wn += n_node_fin - 1\n\n        # vertical fins\n        # centre one\n        beam_number[we:we + n_elem_fin] = 26\n        vfin_beam_numberC = 26\n        x[wn:wn + n_node_fin - 1] = x[end_of_centre_tail_node]\n        y[wn:wn + n_node_fin - 1] = y[end_of_centre_tail_node]\n        z[wn:wn + n_node_fin - 1] = z[end_of_centre_tail_node] + np.linspace(0.0, -span_vfin, n_node_fin)[1:]\n        for ielem in range(n_elem_fin):\n            conn[we + ielem, :] = ((np.ones((3, ))*(we + ielem)*(n_node_elem - 1)) + np.array([0, 2, 1]))\n            for inode in range(n_node_elem):\n                frame_of_reference_delta[we + ielem, inode, :] = [-1.0, 0.0, 0.0]\n        conn[we, 0] = end_of_centre_tail_node\n        elem_stiffness[we:we + n_elem_fin] = 9\n        elem_mass[we:we + n_elem_fin] = 14\n        boundary_conditions[wn + n_node_fin - 1 - 1] = -1\n        we += n_elem_fin\n        wn += n_node_fin - 1\n\n        # left one\n        beam_number[we:we + n_elem_fin] = 27\n        vfin_beam_numberL = 27\n        x[wn:wn + n_node_fin - 1] = x[end_tails_nodesL[0]]\n        y[wn:wn + n_node_fin - 1] = y[end_tails_nodesL[0]]\n        z[wn:wn + n_node_fin - 1] = z[end_tails_nodesL[0]] + np.linspace(0.0, -span_vfin, n_node_fin)[1:]\n        for ielem in range(n_elem_fin):\n            conn[we + ielem, :] = ((np.ones((3, ))*(we + ielem)*(n_node_elem - 1)) + np.array([0, 2, 1]))\n            for inode in range(n_node_elem):\n                frame_of_reference_delta[we + ielem, inode, :] = [-1.0, 0.0, 0.0]\n        conn[we, 0] = end_tails_nodesL[0]\n        elem_stiffness[we:we + n_elem_fin] = 10\n        elem_mass[we:we + n_elem_fin] = 15\n        boundary_conditions[wn + n_node_fin - 1 - 1] = -1\n        we += n_elem_fin\n        wn += n_node_fin - 1\n\n        # right one\n        beam_number[we:we + n_elem_fin] = 28\n        vfin_beam_numberR = 28\n        x[wn:wn + n_node_fin - 1] = x[end_tails_nodesR[0]]\n        y[wn:wn + n_node_fin - 1] = y[end_tails_nodesR[0]]\n        z[wn:wn + n_node_fin - 1] = z[end_tails_nodesR[0]] + np.linspace(0.0, -span_vfin, n_node_fin)[1:]\n        for ielem in range(n_elem_fin):\n            conn[we + ielem, :] = ((np.ones((3, ))*(we + ielem)*(n_node_elem - 1)) + np.array([0, 2, 1]))\n            for inode in range(n_node_elem):\n                frame_of_reference_delta[we + ielem, inode, :] = [-1.0, 0.0, 0.0]\n        conn[we, 0] = end_tails_nodesR[0]\n        elem_stiffness[we:we + n_elem_fin] = 11\n        elem_mass[we:we + n_elem_fin] = 16\n        boundary_conditions[wn + n_node_fin - 1 - 1] = -1\n        we += n_elem_fin\n        wn += n_node_fin - 1\n\n\n        # this output to the HDF5 file that is read by 'BeamLoader'.\n        # if you want to see what's inside, check HDFView\n        with h5.File(route + '/' + case_name + '.fem.h5', 'a') as h5file:\n            coordinates = h5file.create_dataset('coordinates', data=np.column_stack((x, y, z)))\n            conectivities = h5file.create_dataset('connectivities', data=conn)\n            num_nodes_elem_handle = h5file.create_dataset(\n                'num_node_elem', data=n_node_elem)\n            num_nodes_handle = h5file.create_dataset(\n                'num_node', data=n_node)\n            num_elem_handle = h5file.create_dataset(\n                'num_elem', data=n_elem)\n            stiffness_db_handle = h5file.create_dataset(\n                'stiffness_db', data=stiffness_db)\n            stiffness_handle = h5file.create_dataset(\n                'elem_stiffness', data=elem_stiffness)\n            mass_db_handle = h5file.create_dataset(\n                'mass_db', data=mass_db)\n            mass_handle = h5file.create_dataset(\n                'elem_mass', data=elem_mass)\n            frame_of_reference_delta_handle = h5file.create_dataset(\n                'frame_of_reference_delta', data=frame_of_reference_delta)\n            structural_twist_handle = h5file.create_dataset(\n                'structural_twist', data=structural_twist)\n            bocos_handle = h5file.create_dataset(\n                'boundary_conditions', data=boundary_conditions)\n            beam_handle = h5file.create_dataset(\n                'beam_number', data=beam_number)\n            app_forces_handle = h5file.create_dataset(\n                'app_forces', data=app_forces)\n            lumped_mass_nodes_handle = h5file.create_dataset(\n                'lumped_mass_nodes', data=lumped_mass_nodes)\n            lumped_mass_handle = h5file.create_dataset(\n                'lumped_mass', data=lumped_mass)\n            lumped_mass_inertia_handle = h5file.create_dataset(\n                'lumped_mass_inertia', data=lumped_mass_inertia)\n            lumped_mass_position_handle = h5file.create_dataset(\n                'lumped_mass_position', data=lumped_mass_position)\n\n    def read_aero_data(filename=route + '/inputs/aero_properties.xlsx'):\n        import pandas as pd\n\n        xl = pd.ExcelFile(filename)\n        sheets = {sheet_name: xl.parse(sheet_name, header=0, index_col=0) for sheet_name in xl.sheet_names}\n\n        aero_data = dict()\n        for sheet, val in sheets.items():\n            aero_data[sheet] = dict()\n            for item in val['value'].items():\n                aero_data[sheet][item[0]] = item[1]\n\n        return aero_data\n\n\n    def generate_aero_file():\n        global x, y, z\n        global fin_beam_numberC, fin_beam_numberL, fin_beam_numberR\n        global vfin_beam_numberC, vfin_beam_numberL, vfin_beam_numberR\n        global fin_beam_numberLL, fin_beam_numberRR\n\n        aero_data = read_aero_data()\n        # control surfaces\n        n_control_surfaces = 3\n        control_surface = np.zeros((n_elem, n_node_elem), dtype=int) - 1\n        control_surface_type = np.zeros((n_control_surfaces, ), dtype=int)\n        control_surface_deflection = np.zeros((n_control_surfaces, ))\n        control_surface_chord = np.zeros((n_control_surfaces, ), dtype=int)\n        control_surface_hinge_coord = np.zeros((n_control_surfaces, ), dtype=float)\n\n        # control surface type is 0 if static, 1 if dynamic\n        control_surface_type[0] = 0\n        control_surface_deflection[0] = cs_deflection\n        # chord is given as number of panels, not length, so it has to be integer\n        control_surface_chord[0] = m_tail\n        # location of the hinge wrt e.axis when surface_chord == m_surface\n        control_surface_hinge_coord[0] = 0\n\n        control_surface_type[1] = 0\n        control_surface_deflection[1] = aileron_deflection\n        control_surface_chord[1] = int(m*0.25)\n        control_surface_hinge_coord[1] = 0\n\n        control_surface_type[2] = 0\n        control_surface_deflection[2] = -aileron_deflection\n        control_surface_chord[2] = int(m*0.25)\n        control_surface_hinge_coord[2] = 0\n\n        # right wing (surface 0, beams 0, 1, 2, 3)\n        type = 'inboard'\n        main_chord = aero_data[type]['chord']\n        initial_node = 0\n        final_node = end_nodesR[-1]\n        initial_elem = 0\n        final_elem = end_elementsR[-1]\n        i_surf = 0\n        airfoil_distribution[initial_elem: final_elem + 1, :] = aero_data['airfoil_indices'][aero_data[type]['airfoil']]\n        surface_distribution[initial_elem: final_elem + 1] = i_surf\n        surface_m[i_surf] = m\n        aero_node[initial_node:final_node + 1] = True\n        node_counter = 0\n        for i_elem in range(initial_elem, final_elem + 1):\n            for i_local_node in range(n_node_elem):\n                if not i_local_node == 0:\n                    node_counter += 1\n                chord[i_elem, i_local_node] = aero_data[type]['chord']\n                elastic_axis[i_elem, i_local_node] = aero_data[type]['elastic_axis']\n                twist[i_elem, i_local_node] = -aero_data[type]['twist']*np.pi/180\n        for i_elem in range(end_elementsR[1] + 1, end_elementsR[2] + 1):\n            if i_elem == 0 or i_elem == end_elementsR[2]:\n                continue\n            control_surface[i_elem, :] = 1\n\n        # left wing (surface 1, beams 4, 5, 6, 7)\n        initial_node = end_nodesR[-1] + 1\n        final_node = end_nodesL[-1]\n        initial_elem = end_elementsR[-1] + 1\n        final_elem = end_elementsL[-1]\n        i_surf += 1\n        airfoil_distribution[initial_elem: final_elem + 1, :] = aero_data['airfoil_indices'][aero_data[type]['airfoil']]\n        surface_distribution[initial_elem: final_elem + 1] = i_surf\n        surface_m[i_surf] = m\n        aero_node[initial_node:final_node + 1] = True\n        node_counter = 0\n        for i_elem in range(initial_elem, final_elem + 1):\n            for i_local_node in range(n_node_elem):\n                if not i_local_node == 0:\n                    node_counter += 1\n                chord[i_elem, i_local_node] = aero_data[type]['chord']\n                elastic_axis[i_elem, i_local_node] = aero_data[type]['elastic_axis']\n                twist[i_elem, i_local_node] = -aero_data[type]['twist']*np.pi/180\n        for i_elem in range(end_elementsL[1] + 1, end_elementsL[2] + 1):\n            if i_elem == 0 or i_elem == end_elementsL[2]:\n                continue\n            control_surface[i_elem, :] = 2\n\n        # centre tail\n        type = 'Ctail'\n        ctail_chord = aero_data[type]['chord']\n        ctail_m = m_tail\n        elements = np.linspace(0, n_elem - 1, n_elem, dtype=int)[beam_number == tail_beam_numbersC[1]]\n        i_surf += 1\n        for i_elem in elements:\n            for i_node in range(n_node_elem):\n                airfoil_distribution[i_elem, :] = aero_data['airfoil_indices'][aero_data[type]['airfoil']]\n                aero_node[conn[i_elem, i_node]] = True\n        surface_distribution[elements] = i_surf\n        surface_m[i_surf] = ctail_m\n        node_counter = 0\n        for i_elem in elements:\n            for i_local_node in [0, 1, 2]:\n                if not i_local_node == 0:\n                    node_counter += 1\n                chord[i_elem, i_local_node] = aero_data[type]['chord']\n                elastic_axis[i_elem, i_local_node] = aero_data[type]['elastic_axis']\n                twist[i_elem, i_local_node] = -aero_data[type]['twist']*np.pi/180\n\n        elements = np.linspace(0, n_elem - 1, n_elem, dtype=int)[beam_number == tail_beam_numbersC[2]]\n        i_surf += 1\n        for i_elem in elements:\n            for i_node in range(n_node_elem):\n                airfoil_distribution[i_elem, :] = aero_data['airfoil_indices'][aero_data[type]['airfoil']]\n                aero_node[conn[i_elem, i_node]] = True\n        surface_distribution[elements] = i_surf\n        surface_m[i_surf] = ctail_m\n        node_counter = 0\n        for i_elem in elements:\n            for i_local_node in [0, 1, 2]:\n                if not i_local_node == 0:\n                    node_counter += 1\n                chord[i_elem, i_local_node] = aero_data[type]['chord']\n                elastic_axis[i_elem, i_local_node] = aero_data[type]['elastic_axis']\n                twist[i_elem, i_local_node] = -aero_data[type]['twist']*np.pi/180\n\n        # 0R tail\n        type = '0Rtail'\n        rtail_chord = aero_data[type]['chord']\n        tail_m = max(3, int(m*rtail_chord/main_chord))\n        tail_m = m_tail\n        elements = np.linspace(0, n_elem - 1, n_elem, dtype=int)[beam_number == tail_beam_numbersR[0,1]]\n        i_surf += 1\n        for i_elem in elements:\n            for i_node in range(n_node_elem):\n                airfoil_distribution[i_elem, :] = aero_data['airfoil_indices'][aero_data[type]['airfoil']]\n                aero_node[conn[i_elem, i_node]] = True\n        surface_distribution[elements] = i_surf\n        surface_m[i_surf] = tail_m\n        node_counter = 0\n        for i_elem in elements:\n            for i_local_node in [0, 1, 2]:\n                if not i_local_node == 0:\n                    node_counter += 1\n                chord[i_elem, i_local_node] = aero_data[type]['chord']\n                elastic_axis[i_elem, i_local_node] = aero_data[type]['elastic_axis']\n                twist[i_elem, i_local_node] = -aero_data[type]['twist']*np.pi/180\n                control_surface[i_elem, i_local_node] = 0\n\n        elements = np.linspace(0, n_elem - 1, n_elem, dtype=int)[beam_number == tail_beam_numbersR[0,2]]\n        i_surf += 1\n        for i_elem in elements:\n            for i_node in range(n_node_elem):\n                airfoil_distribution[i_elem, :] = aero_data['airfoil_indices'][aero_data[type]['airfoil']]\n                aero_node[conn[i_elem, i_node]] = True\n        surface_distribution[elements] = i_surf\n        surface_m[i_surf] = tail_m\n        node_counter = 0\n        for i_elem in elements:\n            for i_local_node in [0, 1, 2]:\n                if not i_local_node == 0:\n                    node_counter += 1\n                chord[i_elem, i_local_node] = aero_data[type]['chord']\n                elastic_axis[i_elem, i_local_node] = aero_data[type]['elastic_axis']\n                twist[i_elem, i_local_node] = -aero_data[type]['twist']*np.pi/180\n                control_surface[i_elem, i_local_node] = 0\n\n        # 1R tail\n        type = '0Rtail'\n        elements = np.linspace(0, n_elem - 1, n_elem, dtype=int)[beam_number == tail_beam_numbersR[1,1]]\n        i_surf += 1\n        for i_elem in elements:\n            for i_node in range(n_node_elem):\n                airfoil_distribution[i_elem, :] = aero_data['airfoil_indices'][aero_data[type]['airfoil']]\n                aero_node[conn[i_elem, i_node]] = True\n        surface_distribution[elements] = i_surf\n        surface_m[i_surf] = tail_m\n        node_counter = 0\n        for i_elem in elements:\n            for i_local_node in [0, 1, 2]:\n                if not i_local_node == 0:\n                    node_counter += 1\n                chord[i_elem, i_local_node] = aero_data[type]['chord']\n                elastic_axis[i_elem, i_local_node] = aero_data[type]['elastic_axis']\n                twist[i_elem, i_local_node] = -aero_data[type]['twist']*np.pi/180\n                control_surface[i_elem, i_local_node] = 0\n\n        elements = np.linspace(0, n_elem - 1, n_elem, dtype=int)[beam_number == tail_beam_numbersR[1,2]]\n        i_surf += 1\n        for i_elem in elements:\n            for i_node in range(n_node_elem):\n                airfoil_distribution[i_elem, :] = aero_data['airfoil_indices'][aero_data[type]['airfoil']]\n                aero_node[conn[i_elem, i_node]] = True\n        surface_distribution[elements] = i_surf\n        surface_m[i_surf] = tail_m\n        node_counter = 0\n        for i_elem in elements:\n            for i_local_node in [0, 1, 2]:\n                if not i_local_node == 0:\n                    node_counter += 1\n                chord[i_elem, i_local_node] = aero_data[type]['chord']\n                elastic_axis[i_elem, i_local_node] = aero_data[type]['elastic_axis']\n                twist[i_elem, i_local_node] = -aero_data[type]['twist']*np.pi/180\n                control_surface[i_elem, i_local_node] = 0\n\n        # 0L tail\n        type = '0Ltail'\n        elements = np.linspace(0, n_elem - 1, n_elem, dtype=int)[beam_number == tail_beam_numbersL[0,1]]\n        i_surf += 1\n        for i_elem in elements:\n            for i_node in range(n_node_elem):\n                airfoil_distribution[i_elem, :] = aero_data['airfoil_indices'][aero_data[type]['airfoil']]\n                aero_node[conn[i_elem, i_node]] = True\n        surface_distribution[elements] = i_surf\n        surface_m[i_surf] = tail_m\n        node_counter = 0\n        for i_elem in elements:\n            for i_local_node in [0, 1, 2]:\n                if not i_local_node == 0:\n                    node_counter += 1\n                chord[i_elem, i_local_node] = aero_data[type]['chord']\n                elastic_axis[i_elem, i_local_node] = aero_data[type]['elastic_axis']\n                twist[i_elem, i_local_node] = -aero_data[type]['twist']*np.pi/180\n                control_surface[i_elem, i_local_node] = 0\n\n        elements = np.linspace(0, n_elem - 1, n_elem, dtype=int)[beam_number == tail_beam_numbersL[0,2]]\n        i_surf += 1\n        for i_elem in elements:\n            for i_node in range(n_node_elem):\n                airfoil_distribution[i_elem, :] = aero_data['airfoil_indices'][aero_data[type]['airfoil']]\n                aero_node[conn[i_elem, i_node]] = True\n        surface_distribution[elements] = i_surf\n        surface_m[i_surf] = tail_m\n        node_counter = 0\n        for i_elem in elements:\n            for i_local_node in [0, 1, 2]:\n                if not i_local_node == 0:\n                    node_counter += 1\n                chord[i_elem, i_local_node] = aero_data[type]['chord']\n                elastic_axis[i_elem, i_local_node] = aero_data[type]['elastic_axis']\n                twist[i_elem, i_local_node] = -aero_data[type]['twist']*np.pi/180\n                control_surface[i_elem, i_local_node] = 0\n\n        # 1L tail\n        type = '0Ltail'\n        elements = np.linspace(0, n_elem - 1, n_elem, dtype=int)[beam_number == tail_beam_numbersL[1,1]]\n        i_surf += 1\n        for i_elem in elements:\n            for i_node in range(n_node_elem):\n                airfoil_distribution[i_elem, :] = aero_data['airfoil_indices'][aero_data[type]['airfoil']]\n                aero_node[conn[i_elem, i_node]] = True\n        surface_distribution[elements] = i_surf\n        surface_m[i_surf] = tail_m\n        node_counter = 0\n        for i_elem in elements:\n            for i_local_node in [0, 1, 2]:\n                if not i_local_node == 0:\n                    node_counter += 1\n                chord[i_elem, i_local_node] = aero_data[type]['chord']\n                elastic_axis[i_elem, i_local_node] = aero_data[type]['elastic_axis']\n                twist[i_elem, i_local_node] = -aero_data[type]['twist']*np.pi/180\n                control_surface[i_elem, i_local_node] = 0\n\n        elements = np.linspace(0, n_elem - 1, n_elem, dtype=int)[beam_number == tail_beam_numbersL[1,2]]\n        i_surf += 1\n        for i_elem in elements:\n            for i_node in range(n_node_elem):\n                airfoil_distribution[i_elem, :] = aero_data['airfoil_indices'][aero_data[type]['airfoil']]\n                aero_node[conn[i_elem, i_node]] = True\n        surface_distribution[elements] = i_surf\n        surface_m[i_surf] = tail_m\n        node_counter = 0\n        for i_elem in elements:\n            for i_local_node in [0, 1, 2]:\n                if not i_local_node == 0:\n                    node_counter += 1\n                chord[i_elem, i_local_node] = aero_data[type]['chord']\n                elastic_axis[i_elem, i_local_node] = aero_data[type]['elastic_axis']\n                twist[i_elem, i_local_node] = -aero_data[type]['twist']*np.pi/180\n                control_surface[i_elem, i_local_node] = 0\n\n        type = 'Cfin'\n        cfin_chord = aero_data[type]['chord']\n        cfin_m = m_fin\n        elements = np.linspace(0, n_elem - 1, n_elem, dtype=int)[beam_number == fin_beam_numberC]\n        i_surf += 1\n        for i_elem in elements:\n            for i_node in range(n_node_elem):\n                airfoil_distribution[i_elem, :] = aero_data['airfoil_indices'][aero_data[type]['airfoil']]\n                aero_node[conn[i_elem, i_node]] = True\n        surface_distribution[elements] = i_surf\n        surface_m[i_surf] = cfin_m\n        node_counter = 0\n        for i_elem in elements:\n            for i_local_node in [0, 1, 2]:\n                if not i_local_node == 0:\n                    node_counter += 1\n                chord[i_elem, i_local_node] = aero_data[type]['chord']\n                elastic_axis[i_elem, i_local_node] = aero_data[type]['elastic_axis']\n                twist[i_elem, i_local_node] = -aero_data[type]['twist']*np.pi/180\n\n        type = 'Lfin'\n        lfin_chord = aero_data[type]['chord']\n        fin_m = m_fin\n        elements = np.linspace(0, n_elem - 1, n_elem, dtype=int)[beam_number == fin_beam_numberL]\n        i_surf += 1\n        for i_elem in elements:\n            for i_node in range(n_node_elem):\n                airfoil_distribution[i_elem, :] = aero_data['airfoil_indices'][aero_data[type]['airfoil']]\n                aero_node[conn[i_elem, i_node]] = True\n        surface_distribution[elements] = i_surf\n        surface_m[i_surf] = fin_m\n        node_counter = 0\n        for i_elem in elements:\n            for i_local_node in [0, 1, 2]:\n                if not i_local_node == 0:\n                    node_counter += 1\n                chord[i_elem, i_local_node] = aero_data[type]['chord']\n                elastic_axis[i_elem, i_local_node] = aero_data[type]['elastic_axis']\n                twist[i_elem, i_local_node] = -aero_data[type]['twist']*np.pi/180\n\n        type = 'Rfin'\n        elements = np.linspace(0, n_elem - 1, n_elem, dtype=int)[beam_number == fin_beam_numberR]\n        i_surf += 1\n        for i_elem in elements:\n            for i_node in range(n_node_elem):\n                airfoil_distribution[i_elem, :] = aero_data['airfoil_indices'][aero_data[type]['airfoil']]\n                aero_node[conn[i_elem, i_node]] = True\n        surface_distribution[elements] = i_surf\n        surface_m[i_surf] = fin_m\n        node_counter = 0\n        for i_elem in elements:\n            for i_local_node in [0, 1, 2]:\n                if not i_local_node == 0:\n                    node_counter += 1\n                chord[i_elem, i_local_node] = aero_data[type]['chord']\n                elastic_axis[i_elem, i_local_node] = aero_data[type]['elastic_axis']\n                twist[i_elem, i_local_node] = -aero_data[type]['twist']*np.pi/180\n\n        type = 'LLfin'\n        lfin_chord = aero_data[type]['chord']\n        fin_m = m_fin\n        elements = np.linspace(0, n_elem - 1, n_elem, dtype=int)[beam_number == fin_beam_numberLL]\n        i_surf += 1\n        for i_elem in elements:\n            for i_node in range(n_node_elem):\n                airfoil_distribution[i_elem, :] = aero_data['airfoil_indices'][aero_data[type]['airfoil']]\n                aero_node[conn[i_elem, i_node]] = True\n        surface_distribution[elements] = i_surf\n        surface_m[i_surf] = fin_m\n        node_counter = 0\n        for i_elem in elements:\n            for i_local_node in [0, 1, 2]:\n                if not i_local_node == 0:\n                    node_counter += 1\n                chord[i_elem, i_local_node] = aero_data[type]['chord']\n                elastic_axis[i_elem, i_local_node] = aero_data[type]['elastic_axis']\n                twist[i_elem, i_local_node] = -aero_data[type]['twist']*np.pi/180\n\n        type = 'RRfin'\n        elements = np.linspace(0, n_elem - 1, n_elem, dtype=int)[beam_number == fin_beam_numberRR]\n        i_surf += 1\n        for i_elem in elements:\n            for i_node in range(n_node_elem):\n                airfoil_distribution[i_elem, :] = aero_data['airfoil_indices'][aero_data[type]['airfoil']]\n                aero_node[conn[i_elem, i_node]] = True\n        surface_distribution[elements] = i_surf\n        surface_m[i_surf] = fin_m\n        node_counter = 0\n        for i_elem in elements:\n            for i_local_node in [0, 1, 2]:\n                if not i_local_node == 0:\n                    node_counter += 1\n                chord[i_elem, i_local_node] = aero_data[type]['chord']\n                elastic_axis[i_elem, i_local_node] = aero_data[type]['elastic_axis']\n                twist[i_elem, i_local_node] = -aero_data[type]['twist']*np.pi/180\n\n        type = 'Cvfin'\n        cfin_chord = aero_data[type]['chord']\n        cfin_m = m_fin\n        elements = np.linspace(0, n_elem - 1, n_elem, dtype=int)[beam_number == vfin_beam_numberC]\n        i_surf += 1\n        for i_elem in elements:\n            for i_node in range(n_node_elem):\n                airfoil_distribution[i_elem, :] = aero_data['airfoil_indices'][aero_data[type]['airfoil']]\n                aero_node[conn[i_elem, i_node]] = True\n        surface_distribution[elements] = i_surf\n        surface_m[i_surf] = cfin_m\n        node_counter = 0\n        for i_elem in elements:\n            for i_local_node in [0, 1, 2]:\n                if not i_local_node == 0:\n                    node_counter += 1\n                chord[i_elem, i_local_node] = aero_data[type]['chord']\n                elastic_axis[i_elem, i_local_node] = aero_data[type]['elastic_axis']\n                twist[i_elem, i_local_node] = -aero_data[type]['twist']*np.pi/180\n\n        type = 'Lvfin'\n        lfin_chord = aero_data[type]['chord']\n        fin_m = m_fin\n        elements = np.linspace(0, n_elem - 1, n_elem, dtype=int)[beam_number == vfin_beam_numberL]\n        i_surf += 1\n        for i_elem in elements:\n            for i_node in range(n_node_elem):\n                airfoil_distribution[i_elem, :] = aero_data['airfoil_indices'][aero_data[type]['airfoil']]\n                aero_node[conn[i_elem, i_node]] = True\n        surface_distribution[elements] = i_surf\n        surface_m[i_surf] = fin_m\n        node_counter = 0\n        for i_elem in elements:\n            for i_local_node in [0, 1, 2]:\n                if not i_local_node == 0:\n                    node_counter += 1\n                chord[i_elem, i_local_node] = aero_data[type]['chord']\n                elastic_axis[i_elem, i_local_node] = aero_data[type]['elastic_axis']\n                twist[i_elem, i_local_node] = -aero_data[type]['twist']*np.pi/180\n\n        type = 'Rvfin'\n        elements = np.linspace(0, n_elem - 1, n_elem, dtype=int)[beam_number == vfin_beam_numberR]\n        i_surf += 1\n        for i_elem in elements:\n            for i_node in range(n_node_elem):\n                airfoil_distribution[i_elem, :] = aero_data['airfoil_indices'][aero_data[type]['airfoil']]\n                aero_node[conn[i_elem, i_node]] = True\n        surface_distribution[elements] = i_surf\n        surface_m[i_surf] = fin_m\n        node_counter = 0\n        for i_elem in elements:\n            for i_local_node in [0, 1, 2]:\n                if not i_local_node == 0:\n                    node_counter += 1\n                chord[i_elem, i_local_node] = aero_data[type]['chord']\n                elastic_axis[i_elem, i_local_node] = aero_data[type]['elastic_axis']\n                twist[i_elem, i_local_node] = -aero_data[type]['twist']*np.pi/180\n\n        with h5.File(route + '/' + case_name + '.aero.h5', 'a') as h5file:\n            airfoils_group = h5file.create_group('airfoils')\n            # add one airfoil\n            emx07_main = airfoils_group.create_dataset('0', data=load_airfoil(route + '/inputs/EMX-07_camber.txt'))\n            flat_tail = airfoils_group.create_dataset('1', data=np.column_stack(\n                generate_naca_camber(P=0, M=0)))\n\n            # chord\n            chord_input = h5file.create_dataset('chord', data=chord)\n            dim_attr = chord_input .attrs['units'] = 'm'\n\n            # twist\n            twist_input = h5file.create_dataset('twist', data=twist)\n            dim_attr = twist_input.attrs['units'] = 'rad'\n\n            # airfoil distribution\n            airfoil_distribution_input = h5file.create_dataset('airfoil_distribution', data=airfoil_distribution)\n\n            surface_distribution_input = h5file.create_dataset('surface_distribution', data=surface_distribution)\n            surface_m_input = h5file.create_dataset('surface_m', data=surface_m)\n            m_distribution_input = h5file.create_dataset('m_distribution', data=m_distribution.encode('ascii', 'ignore'))\n\n            aero_node_input = h5file.create_dataset('aero_node', data=aero_node)\n            elastic_axis_input = h5file.create_dataset('elastic_axis', data=elastic_axis)\n\n            control_surface_input = h5file.create_dataset('control_surface', data=control_surface)\n            control_surface_deflection_input = h5file.create_dataset('control_surface_deflection', data=control_surface_deflection)\n            control_surface_chord_input = h5file.create_dataset('control_surface_chord', data=control_surface_chord)\n            control_surface_types_input = h5file.create_dataset('control_surface_type', data=control_surface_type)\n            control_surface_hinge_coord_input = h5file.create_dataset('control_surface_hinge_coord', data=control_surface_hinge_coord)\n\n    def load_airfoil(filename):\n        data = np.loadtxt(filename, skiprows=1)\n        return data\n\n\n    def generate_naca_camber(M=0, P=0):\n        \"\"\"\n        https://en.wikipedia.org/wiki/NACA_airfoil\n        \"\"\"\n        mm = M*1e-2\n        p = P*1e-1\n\n        def naca(x, mm, p):\n            if x < 1e-6:\n                return 0.0\n            elif x < p:\n                return mm/(p*p)*(2*p*x - x*x)\n            elif x > p and x < 1+1e-6:\n                return mm/((1-p)*(1-p))*(1 - 2*p + 2*p*x - x*x)\n\n        x_vec = np.linspace(0, 1, 1000)\n        y_vec = np.array([naca(x, mm, p) for x in x_vec])\n        return x_vec, y_vec\n\n\n    def generate_solver_file():\n        \"\"\"\n        Main file generator. This text file contains the location of the\n        case files, the case name and all the solvers to be run together\n        with their settings.\n        \"\"\"\n        file_name = route + '/' + case_name + '.sharpy'     # the extension\n                                                            # of the file is\n                                                            # not important\n        settings = dict()\n        settings['SHARPy'] = {'case': case_name,\n                              'route': route,\n                              'flow': flow,\n                              'write_screen': 'on',\n                              'write_log': 'on',\n                              'log_folder': route + '/output/',\n                              'log_file': case_name + '.log'}\n\n        settings['BeamLoader'] = {'unsteady': 'on',     # it's ok to leave it\n                                                        # 'on' for static\n                                  # initial orientation of the aircraft,\n                                  # this is where the trim conditions come\n                                  'orientation': algebra.euler2quat(np.array([roll,\n                                                                              alpha,\n                                                                              beta]))}\n\n        settings['AerogridLoader'] = {'unsteady': 'on',\n                                      'aligned_grid': 'on',\n                                      'mstar': mstar,\n                                      # freestream_dir only used for wake init\n                                      'freestream_dir': ['1', '0', '0']}\n\n        settings['NonLinearStatic'] = {'print_info': 'off',\n                                       'max_iterations': 350,\n                                       'num_load_steps': 1,\n                                       'delta_curved': 1e-1,\n                                       'min_delta': tolerance,\n                                       'gravity_on': gravity,\n                                       'gravity': gravity_value}\n\n        settings['StaticUvlm2'] = {'print_info': 'on',\n                                   'horseshoe': horseshoe,\n                                   'num_cores': 1,\n                                   'n_rollup': 0,\n                                   'rollup_dt': dt,\n                                   'rollup_aic_refresh': 1,\n                                   'rollup_tolerance': 1e-4,\n                                   'velocity_field_generator': 'SteadyVelocityField',\n                                   'velocity_field_input': {'u_inf': u_inf,\n                                                            'u_inf_direction': [1., 0, 0]},\n                                   'rho': rho}\n\n        settings['StaticCoupled'] = {'print_info': 'on',\n                                     'structural_solver': 'NonLinearStatic',\n                                     'structural_solver_settings': settings['NonLinearStatic'],\n                                     'aero_solver': 'StaticUvlm',\n                                     'aero_solver_settings': settings['StaticUvlm2'],\n                                     'max_iter': 100,\n                                     'n_load_steps': n_step,\n                                     'tolerance': fsi_tolerance,\n                                     'relaxation_factor': static_relaxation_factor}\n\n        settings['StaticUvlm'] = {'print_info': 'on',\n                                  'horseshoe': horseshoe,\n                                  'num_cores': 1,\n                                  'n_rollup': 0,\n                                  'rollup_dt': dt,\n                                  'rollup_aic_refresh': 1,\n                                  'rollup_tolerance': 1e-4,\n                                  'velocity_field_generator': 'SteadyVelocityField',\n                                  'velocity_field_input': {'u_inf': u_inf,\n                                                           'u_inf_direction': [1., 0, 0]},\n                                  'rho': rho}\n\n        # this trim solver is much slower, but supports lateral trim.\n        # it is based on scipy.optimize\n        settings['Trim'] = {'solver': 'StaticCoupled',\n                            'solver_settings': settings['StaticCoupled'],\n                            'initial_alpha': alpha,\n                            'initial_beta': beta,\n                            'initial_roll': roll,\n                            'cs_indices': 0,\n                            'initial_cs_deflection': cs_deflection,\n                            'initial_thrust': [],\n                            'thrust_nodes': [],\n                            'refine_solution': 'on',\n                            'special_case': {'case_name': 'differential_thrust',\n                                             'initial_base_thrust': thrustC,\n                                             'initial_differential_parameter': differential,\n                                             'base_thrust_nodes': [thrust_nodes[0]],\n                                             'negative_thrust_nodes': [thrust_nodes[2]],\n                                             'positive_thrust_nodes': [thrust_nodes[1]]}}\n\n        settings['NonLinearDynamicCoupledStep'] = {'print_info': 'off',\n                                                   'max_iterations': 500,\n                                                   'delta_curved': 1e-1,\n                                                   'min_delta': tolerance,\n                                                   # newmark damping parameter.\n                                                   # it affects higher freq\n                                                   # mostly.\n                                                   'newmark_damp': 1e-3,\n                                                   'gravity_on': gravity,\n                                                   'gravity': gravity_value,\n                                                   'num_steps': n_tstep,\n                                                   'balancing': 'off',\n                                                   'dt': dt,\n                                                   'initial_velocity_direction': np.array([-1.0, 0.0, 0.0]),\n                                                   'initial_velocity': u_inf}\n\n        settings['StaticTrim'] = {'solver': 'StaticCoupled',\n                                  'solver_settings': settings['StaticCoupled'],\n                                  'initial_alpha': alpha,\n                                  'initial_deflection': cs_deflection,\n                                  'initial_thrust': thrustC,\n                                  'thrust_nodes': thrust_nodes}\n\n        settings['StepUvlm'] = {'print_info': 'off',\n                                'num_cores': 6,\n                                'convection_scheme': 2,\n                                'gamma_dot_filtering': 6,\n                                # this is where the gust is input.\n                                'velocity_field_generator': 'GustVelocityField',\n                                'velocity_field_input': {'u_inf': u_inf,\n                                                         'u_inf_direction': [1., 0, 0],\n                                                         'gust_shape': gust_shape,\n                                                         'gust_parameters': {\n                                                             'gust_length': gust_length,\n                                                             'gust_intensity': gust_intensity * u_inf},\n                                                         'offset': -space_offset},\n                                'rho': rho,\n                                'n_time_steps': n_tstep,\n                                'dt': dt}\n\n        settings['DynamicCoupled'] = {'structural_solver': 'NonLinearDynamicCoupledStep',\n                                      'structural_solver_settings': settings['NonLinearDynamicCoupledStep'],\n                                      'aero_solver': 'StepUvlm',\n                                      'aero_solver_settings': settings['StepUvlm'],\n                                      'fsi_substeps': 100,\n                                      'fsi_tolerance': fsi_tolerance,\n                                      'relaxation_factor': initial_relaxation_factor,\n                                      'final_relaxation_factor': final_relaxation_factor,\n                                      'minimum_steps': 1,\n                                      'relaxation_steps': relaxation_steps,\n                                      'n_time_steps': n_tstep,\n                                      'dt': dt,\n                                      'include_unsteady_force_contribution': 'on',\n                                      'cleanup_previous_solution': 'on',\n                                      # the postprocessors in this list are\n                                      # called every time step. Some of them\n                                      # are the same you call in static simulations\n                                      # and you wrote at the beginning of the\n                                      # file\n                                      'postprocessors': [\n                                            # output some variables by text\n                                            'WriteVariablesTime',\n                                            # remove old timesteps\n                                            # already output to save RAM\n                                            'Cleanup',\n                                            # calculate internal\n                                            # beam loads and strains\n                                            'BeamLoads',\n                                            'BeamPlot',\n                                            'AerogridPlot',\n                                            # saves a copy of self.data\n                                            # (the state of the simulation)\n                                            # to restart later if needed.\n                                            # careful, because if you don't\n                                            # add Cleanup and don't pay attention\n                                            # to the 'frequency' and\n                                            # 'keep' parameters, you might\n                                            # fill you HD for long simulations\n                                            'CreateSnapshot',\n                                            ],\n                                      'postprocessors_settings': {'BeamLoads': {}, # you need to specify the dict even if empty\n                                                                  'BeamPlot': {'include_rbm': 'on',\n                                                                               'include_applied_forces': 'on'},\n                                                                  'AerogridPlot': {\n                                                                      'include_rbm': 'on',\n                                                                      'include_applied_forces': 'on',\n                                                                      'minus_m_star': 0},\n                                                                  'CreateSnapshot': {# every how many tsteps if should create a snapshot\n                                                                                     'frequency': 100,\n                                                                                     # how many old snapshots should it keep?\n                                                                                     # the rest will be discarded.\n                                                                                     'keep': 5},\n                                                                  'Cleanup': {# keep only the last 2000 tsteps.\n                                                                              # it is good to keep a relatively large number\n                                                                              # in order to have a good noise filter\n                                                                              # for gamma_dot\n                                                                              'remaining_steps': 2000\n                                                                              },\n                                                                  'WriteVariablesTime': {\n                                                                      # output a text file with\n                                                                      # quat: orientation of the aircraft in quaternion\n                                                                      # for_pos: FoR position in inertial FoR\n                                                                      # for_vel: the derivative of the previous\n                                                                      # for_acc: the derivative of the previous\n                                                                      'FoR_variables': ['quat', 'for_pos', 'for_vel', 'for_acc'],\n                                                                      'cleanup_old_solution': 'on',\n                                                                      'delimiter': ', ',\n                                                                  }\n                                                              }\n                                                            }\n\n        settings['Modal'] = {'print_info': 'on',\n            'use_undamped_modes': 'on',\n            'NumLambda': 100,\n            'write_modes_vtk': 'on',\n            'print_matrices': 'on',\n            'continuous_eigenvalues': 'off',\n            'dt': dt,\n            'plot_eigenvalues': 'on'}\n        settings['BeamPlot'] = {'include_rbm': 'on',\n            'include_applied_forces': 'on'}\n\n        settings['AerogridPlot'] = {'include_rbm': 'on',\n                                    'include_forward_motion': 'off',\n                                    'include_applied_forces': 'on',\n                                    'minus_m_star': 0,\n                                    'u_inf': u_inf,\n                                    'dt': dt}\n        settings['BeamLoads'] = dict()\n\n        import configobj\n        config = configobj.ConfigObj()\n        config.filename = file_name\n        for k, v in settings.items():\n            config[k] = v\n        config.write()\n\n\n\n    clean_test_files()\n    generate_fem()\n    generate_aero_file()\n    generate_solver_file()\n"
  },
  {
    "path": "sharpy/cases/coupled/X-HALE/inputs/EMX-07_camber.txt",
    "content": "   0.0            0.0\n   0.3527358E-06  0.5961561E-03\n   0.2736395E-02  0.1136788E-02\n   0.1092258E-01  0.4241672E-02\n   0.2445874E-01  0.7896996E-02\n   0.4321506E-01  0.1164179E-01\n   0.6697159E-01  0.1542114E-01\n   0.9546839E-01  0.1902119E-01\n   0.1284056      0.2208612E-01\n   0.1654034      0.2422109E-01\n   0.2060818      0.2527606E-01\n   0.2499709      0.2526599E-01\n   0.2966008      0.2410581E-01\n   0.3454613      0.2209060E-01\n   0.3960123      0.1946039E-01\n   0.4477137      0.1645021E-01\n   0.4999755      0.1325003E-01\n   0.5522375      0.1003985E-01\n   0.6039397      0.6979703E-02\n   0.6544919      0.4224549E-02\n   0.7033541      0.1969342E-02\n   0.7499865      0.3292383E-03\n   0.7938786     -0.8407012E-03\n   0.8345606     -0.1650622E-02\n   0.8715624     -0.2095578E-02\n   0.9045041     -0.2160548E-02\n   0.9330056     -0.1880469E-02\n   0.9567668     -0.1405372E-02\n   0.9755279     -0.8752758E-03\n   0.9890686     -0.4201971E-03\n   0.9972590     -0.1101422E-03\n   0.9999992      0.5238689E-09\n   1.0            0.0\n"
  },
  {
    "path": "sharpy/cases/coupled/__init__.py",
    "content": ""
  },
  {
    "path": "sharpy/cases/coupled/hinged_controlled_wing/__init__.py",
    "content": ""
  },
  {
    "path": "sharpy/cases/coupled/hinged_controlled_wing/generate_hinged_controlled_wing.py",
    "content": "import h5py as h5\nimport numpy as np\nimport configparser\nimport os\n\nimport sharpy.utils.algebra as algebra\nimport sharpy.utils.generate_cases as gc\n\ncase_name = 'hinged_controlled_wing'\nroute = os.path.dirname(os.path.realpath(__file__)) + '/'\n\n# m = 16 gives flutter with 165\nm_main = 4\namplitude = 5*np.pi/180\nperiod = 3\ndt_factor = 1.\nn_structural_substeps = 1\n\n# flight conditions\nu_inf = 10\nrho = 1.225\nalpha = 0.5\nbeta = 0\nc_ref = 1\nb_ref = 16\nsweep = 0*np.pi/180.\nsigma = 1\nwake_length = 10 # chords\n\nalpha_rad = alpha*np.pi/180\n\npitch_file = route + 'pitch.csv'\n\ngains = -np.array([0.9, 6.0, 0.75])\n\n# main geometry data\nmain_span = 10\nmain_chord = 2.\nmain_ea = 0.\nmain_cg = 0.3\nmain_sigma = 1\nmain_airfoil_P = 0\nmain_airfoil_M = 0\n\nn_surfaces = 1\n\ndt = main_chord/m_main/u_inf*dt_factor\nnum_steps = int(10./dt)\n\nalpha_hist = np.linspace(0, num_steps*dt, num_steps)\nalpha_hist = amplitude*np.sin(2.0*np.pi*alpha_hist/period)\nnp.savetxt(pitch_file, alpha_hist)\n\n# discretisation data\nnum_elem_main = 5\n\nnum_node_elem = 3\nnum_elem = num_elem_main\nnum_node_main = num_elem_main*(num_node_elem - 1) + 1\nnum_node = num_node_main\n\n\ndef clean_test_files():\n    fem_file_name = route + '/' + case_name + '.fem.h5'\n    if os.path.isfile(fem_file_name):\n        os.remove(fem_file_name)\n\n    aero_file_name = route + '/' + case_name + '.aero.h5'\n    if os.path.isfile(aero_file_name):\n        os.remove(aero_file_name)\n\n    dyn_file_name = route + '/' + case_name + '.dyn.h5'\n    if os.path.isfile(dyn_file_name):\n        os.remove(dyn_file_name)\n\n    solver_file_name = route + '/' + case_name + '.sharpy'\n    if os.path.isfile(solver_file_name):\n        os.remove(solver_file_name)\n\n    flightcon_file_name = route + '/' + case_name + '.flightcon.txt'\n    if os.path.isfile(flightcon_file_name):\n        os.remove(flightcon_file_name)\n\n\ndef generate_dyn_file():\n    global dt\n    global num_steps\n    global route\n    global case_name\n    global num_elem\n    global num_node_elem\n    global num_node\n    global amplitude\n    global period\n\n    dynamic_forces_time = None\n    with_dynamic_forces = False\n    with_forced_vel = False\n    if with_dynamic_forces:\n        f1 = 100\n        dynamic_forces = np.zeros((num_node, 6))\n        app_node = [int(num_node_main - 1), int(num_node_main)]\n        dynamic_forces[app_node, 2] = f1\n        force_time = np.zeros((num_steps, ))\n        limit = round(0.05/dt)\n        force_time[50:61] = 1\n\n        dynamic_forces_time = np.zeros((num_steps, num_node, 6))\n        for it in range(num_steps):\n            dynamic_forces_time[it, :, :] = force_time[it]*dynamic_forces\n\n    forced_for_vel = None\n    if with_forced_vel:\n        forced_for_vel = np.zeros((num_steps, 6))\n        forced_for_acc = np.zeros((num_steps, 6))\n        for it in range(num_steps):\n            # if dt*it < period:\n            forced_for_vel[it, 2] = 2*np.pi/period*amplitude*np.sin(2*np.pi*dt*it/period)\n            forced_for_acc[it, 2] = (2*np.pi/period)**2*amplitude*np.cos(2*np.pi*dt*it/period)\n            # forced_for_vel[it, 2] = 2*np.pi/period*np.pi/180*amplitude*np.cos(2*np.pi*dt*it/period)\n\n    with h5.File(route + '/' + case_name + '.dyn.h5', 'a') as h5file:\n        if with_dynamic_forces:\n            h5file.create_dataset(\n                'dynamic_forces', data=dynamic_forces_time)\n        if with_forced_vel:\n            h5file.create_dataset(\n                'for_vel', data=forced_for_vel)\n            h5file.create_dataset(\n                'for_acc', data=forced_for_acc)\n        h5file.create_dataset(\n            'num_steps', data=num_steps)\n\n\ndef generate_fem_file():\n    # placeholders\n    # coordinates\n    global x, y, z\n    global sigma\n    x = np.zeros((num_node, ))\n    y = np.zeros((num_node, ))\n    z = np.zeros((num_node, ))\n    # struct twist\n    structural_twist = np.zeros((num_elem, 3))\n    # beam number\n    beam_number = np.zeros((num_elem, ), dtype=int)\n    # frame of reference delta\n    frame_of_reference_delta = np.zeros((num_elem, num_node_elem, 3))\n    # connectivities\n    conn = np.zeros((num_elem, num_node_elem), dtype=int)\n    # stiffness\n    num_stiffness = 1\n    ea = 1e5\n    ga = 1e5\n    gj = 0.987581e6\n    eiy = 9.77221e6\n    eiz = 9.77221e8\n    base_stiffness = sigma*np.diag([ea, ga, ga, gj, eiy, eiz])\n    stiffness = np.zeros((num_stiffness, 6, 6))\n    stiffness[0, :, :] = main_sigma*base_stiffness\n    elem_stiffness = np.zeros((num_elem,), dtype=int)\n    # mass\n    num_mass = 1\n    m_base = 35.71\n    j_base = 8.64\n    import sharpy.utils.algebra as algebra\n    # m_chi_cg = algebra.skew(m_base*np.array([0., -(main_ea - main_cg), 0.]))\n    m_chi_cg = algebra.skew(m_base*np.array([0., (main_ea - main_cg), 0.]))\n    base_mass = np.diag([m_base, m_base, m_base, j_base, 0.1*j_base, 0.1*j_base])\n    base_mass[0:3, 3:6] = -m_chi_cg\n    base_mass[3:6, 0:3] = m_chi_cg\n    mass = np.zeros((num_mass, 6, 6))\n    mass[0, :, :] = base_mass\n    elem_mass = np.zeros((num_elem,), dtype=int)\n    # boundary conditions\n    boundary_conditions = np.zeros((num_node, ), dtype=int)\n    boundary_conditions[0] = 1\n    # applied forces\n    # n_app_forces = 2\n    # node_app_forces = np.zeros((n_app_forces,), dtype=int)\n    app_forces = np.zeros((num_node, 6))\n\n    spacing_param = 4\n\n    # right wing (beam 0) --------------------------------------------------------------\n    working_elem = 0\n    working_node = 0\n    beam_number[working_elem:working_elem + num_elem_main] = 0\n    domain = np.linspace(0, 1.0, num_node_main)\n    # 16 - (np.geomspace(20, 4, 10) - 4)\n    x[working_node:working_node + num_node_main] = np.sin(sweep)*(main_span - (np.geomspace(main_span + spacing_param,\n                                                                                            0 + spacing_param,\n                                                                                            num_node_main)\n                                                                               - spacing_param))\n    y[working_node:working_node + num_node_main] = np.abs(np.cos(sweep)*(main_span - (np.geomspace(main_span + spacing_param,\n                                                                                            0 + spacing_param,\n                                                                                            num_node_main)\n                                                                               - spacing_param)))\n    y[0] = 0\n    # y[working_node:working_node + num_node_main] = np.cos(sweep)*np.linspace(0.0, main_span, num_node_main)\n    # x[working_node:working_node + num_node_main] = np.sin(sweep)*np.linspace(0.0, main_span, num_node_main)\n    for ielem in range(num_elem_main):\n        for inode in range(num_node_elem):\n            frame_of_reference_delta[working_elem + ielem, inode, :] = [-1, 0, 0]\n    # connectivity\n    for ielem in range(num_elem_main):\n        conn[working_elem + ielem, :] = ((np.ones((3,))*(working_elem + ielem)*(num_node_elem - 1)) +\n                                         [0, 2, 1])\n    elem_stiffness[working_elem:working_elem + num_elem_main] = 0\n    elem_mass[working_elem:working_elem + num_elem_main] = 0\n    boundary_conditions[0] = 1\n    boundary_conditions[working_node + num_node_main - 1] = -1\n    working_elem += num_elem_main\n    working_node += num_node_main\n\n    # # left wing (beam 1) --------------------------------------------------------------\n    # beam_number[working_elem:working_elem + num_elem_main] = 1\n    # domain = np.linspace(0.0, 1.0, num_node_main)\n    # tempy = np.linspace(0.0, main_span, num_node_main)\n    # # x[working_node:working_node + num_node_main - 1] = -np.sin(sweep)*tempy[0:-1]\n    # # y[working_node:working_node + num_node_main - 1] = np.cos(sweep)*tempy[0:-1]\n    # x[working_node:working_node + num_node_main - 1] = -np.sin(sweep)*(main_span - (np.geomspace(0 + spacing_param,\n                                                                                            # main_span + spacing_param,\n                                                                                            # num_node_main)[:-1]\n                                                                               # - spacing_param))\n    # y[working_node:working_node + num_node_main - 1] = -np.abs(np.cos(sweep)*(main_span - (np.geomspace(0 + spacing_param,\n                                                                                                   # main_span + spacing_param,\n                                                                                                   # num_node_main)[:-1]\n                                                                                      # - spacing_param)))\n    # for ielem in range(num_elem_main):\n        # for inode in range(num_node_elem):\n            # frame_of_reference_delta[working_elem + ielem, inode, :] = [1, 0, 0]\n    # # connectivity\n    # for ielem in range(num_elem_main):\n        # conn[working_elem + ielem, :] = ((np.ones((3,))*(working_elem + ielem)*(num_node_elem - 1)) +\n                                         # [0, 2, 1])\n    # conn[working_elem , 0] = 0\n    # elem_stiffness[working_elem:working_elem + num_elem_main] = 0\n    # elem_mass[working_elem:working_elem + num_elem_main] = 0\n    # boundary_conditions[working_node + num_node_main - 1 - 1] = -1\n    # working_elem += num_elem_main\n    # working_node += num_node_main - 1\n\n    with h5.File(route + '/' + case_name + '.fem.h5', 'a') as h5file:\n        coordinates = h5file.create_dataset('coordinates', data=np.column_stack((x, y, z)))\n        conectivities = h5file.create_dataset('connectivities', data=conn)\n        num_nodes_elem_handle = h5file.create_dataset(\n            'num_node_elem', data=num_node_elem)\n        num_nodes_handle = h5file.create_dataset(\n            'num_node', data=num_node)\n        num_elem_handle = h5file.create_dataset(\n            'num_elem', data=num_elem)\n        stiffness_db_handle = h5file.create_dataset(\n            'stiffness_db', data=stiffness)\n        stiffness_handle = h5file.create_dataset(\n            'elem_stiffness', data=elem_stiffness)\n        mass_db_handle = h5file.create_dataset(\n            'mass_db', data=mass)\n        mass_handle = h5file.create_dataset(\n            'elem_mass', data=elem_mass)\n        frame_of_reference_delta_handle = h5file.create_dataset(\n            'frame_of_reference_delta', data=frame_of_reference_delta)\n        structural_twist_handle = h5file.create_dataset(\n            'structural_twist', data=structural_twist)\n        bocos_handle = h5file.create_dataset(\n            'boundary_conditions', data=boundary_conditions)\n        beam_handle = h5file.create_dataset(\n            'beam_number', data=beam_number)\n        app_forces_handle = h5file.create_dataset(\n            'app_forces', data=app_forces)\n        body_number_handle = h5file.create_dataset(\n            'body_number', data=np.zeros((num_elem, ), dtype=int))\n        # node_app_forces_handle = h5file.create_dataset(\n        #     'node_app_forces', data=node_app_forces)\n\n\ndef generate_aero_file():\n    global x, y, z\n\n    n_control_surfaces = 1\n    control_surface = np.zeros((num_elem, num_node_elem), dtype=int)\n    control_surface_type = np.zeros((n_control_surfaces,), dtype=int)\n    control_surface_deflection = np.zeros((n_control_surfaces,))\n    control_surface_chord = np.zeros((n_control_surfaces, ), dtype=int)\n    control_surface_hinge_coord = np.zeros((n_control_surfaces, ))\n\n    control_surface_type[0] = 2\n    control_surface_deflection[0] = 0.0\n    control_surface_chord[0] = 1\n\n    airfoil_distribution = np.zeros((num_elem, num_node_elem), dtype=int)\n    surface_distribution = np.zeros((num_elem,), dtype=int) - 1\n    surface_m = np.zeros((n_surfaces, ), dtype=int)\n    m_distribution = 'uniform'\n    aero_node = np.zeros((num_node,), dtype=bool)\n    twist = np.zeros((num_elem, 3))\n    chord = np.zeros((num_elem, 3))\n    elastic_axis = np.zeros((num_elem, 3,))\n\n    working_elem = 0\n    working_node = 0\n    # right wing (surface 0, beam 0)\n    i_surf = 0\n    chord[:] = main_chord\n    elastic_axis[:] = main_ea\n    airfoil_distribution[working_elem:working_elem + num_elem_main, :] = 0\n    surface_distribution[working_elem:working_elem + num_elem_main] = i_surf\n    surface_m[i_surf] = m_main\n    aero_node[working_node:working_node + num_node_main] = True\n    # chord[working_node:working_node + num_node_main] = main_chord\n    # elastic_axis[working_node:working_node + num_node_main] = main_ea\n    working_elem += num_elem_main\n    working_node += num_node_main\n\n    # left wing (surface 1, beam 1)\n    # i_surf = 1\n    # airfoil_distribution[working_elem:working_elem + num_elem_main, :] = 0\n    # # airfoil_distribution[working_node:working_node + num_node_main - 1] = 0\n    # surface_distribution[working_elem:working_elem + num_elem_main] = i_surf\n    # surface_m[i_surf] = m_main\n    # aero_node[working_node:working_node + num_node_main - 1] = True\n    # # chord[working_node:working_node + num_node_main - 1] = main_chord\n    # # elastic_axis[working_node:working_node + num_node_main - 1] = main_ea\n    # working_elem += num_elem_main\n    # working_node += num_node_main - 1\n\n    with h5.File(route + '/' + case_name + '.aero.h5', 'a') as h5file:\n        airfoils_group = h5file.create_group('airfoils')\n        # add one airfoil\n        naca_airfoil_main = airfoils_group.create_dataset('0', data=np.column_stack(\n                                generate_naca_camber(P=main_airfoil_P, M=main_airfoil_M)))\n        # chord\n        chord_input = h5file.create_dataset('chord', data=chord)\n        dim_attr = chord_input .attrs['units'] = 'm'\n\n        # twist\n        twist_input = h5file.create_dataset('twist', data=twist)\n        dim_attr = twist_input.attrs['units'] = 'rad'\n\n        # airfoil distribution\n        airfoil_distribution_input = h5file.create_dataset('airfoil_distribution', data=airfoil_distribution)\n\n        surface_distribution_input = h5file.create_dataset('surface_distribution', data=surface_distribution)\n        surface_m_input = h5file.create_dataset('surface_m', data=surface_m)\n        m_distribution_input = h5file.create_dataset('m_distribution', data=m_distribution.encode('ascii', 'ignore'))\n\n        aero_node_input = h5file.create_dataset('aero_node', data=aero_node)\n        elastic_axis_input = h5file.create_dataset('elastic_axis', data=elastic_axis)\n\n        control_surface_input = h5file.create_dataset('control_surface', data = control_surface)\n        control_surface_input = h5file.create_dataset('control_surface_deflection', data = control_surface_deflection)\n        control_surface_input = h5file.create_dataset('control_surface_chord', data = control_surface_chord)\n        control_surface_input = h5file.create_dataset('control_surface_hinge_coord', data = control_surface_hinge_coord)\n        control_surface_input = h5file.create_dataset('control_surface_type', data = control_surface_type)\n\n\ndef generate_naca_camber(M=0, P=0):\n    m = M*1e-2\n    p = P*1e-1\n\n    def naca(x, m, p):\n        if x < 1e-6:\n            return 0.0\n        elif x < p:\n            return m/(p*p)*(2*p*x - x*x)\n        elif x > p and x < 1+1e-6:\n            return m/((1-p)*(1-p))*(1 - 2*p + 2*p*x - x*x)\n\n    x_vec = np.linspace(0, 1, 1000)\n    y_vec = np.array([naca(x, m, p) for x in x_vec])\n    return x_vec, y_vec\n\ndef generate_multibody_file():\n    LC2 = gc.LagrangeConstraint()\n    LC2.behaviour = 'hinge_FoR'\n    LC2.rot_axis_AFoR = np.array([0.0, 1.0, 0.0])\n    LC2.body_FoR = 0\n    # LC2.node_number = int(0)\n\n    LC = []\n    LC.append(LC2)\n\n    MB1 = gc.BodyInformation()\n    MB1.body_number = 0\n    MB1.FoR_position = np.zeros((6,))\n    MB1.FoR_velocity = np.zeros((6,))\n    MB1.FoR_acceleration = np.zeros((6,))\n    MB1.FoR_movement = 'free'\n    MB1.quat = np.array([1.0, 0.0, 0.0, 0.0])\n\n    MB = []\n    MB.append(MB1)\n    gc.clean_test_files(route, case_name)\n    gc.generate_multibody_file(LC, MB, route, case_name)\n\ndef generate_solver_file(horseshoe=False):\n    file_name = route + '/' + case_name + '.sharpy'\n    # config = configparser.ConfigParser()\n    import configobj\n    config = configobj.ConfigObj()\n    config.filename = file_name\n    config['SHARPy'] = {'case': case_name,\n                        'route': route,\n                        'flow': ['BeamLoader',\n                                 'AerogridLoader',\n                                 'StaticCoupled',\n                                 'DynamicCoupled',\n                                 # 'AerogridPlot',\n                                 # 'BeamPlot',\n                                 ],\n                        'write_screen': 'on',\n                        'write_log': 'on',\n                        'log_folder': route + '/output/',\n                        'log_file': case_name + '.log'}\n    config['BeamLoader'] = {'unsteady': 'on',\n                            'orientation': algebra.euler2quat(np.array([0.0,\n                                                                        alpha_rad,\n                                                                        beta*np.pi/180]))}\n\n    config['StaticCoupled'] = {'print_info': 'on',\n                               'structural_solver': 'NonLinearStatic',\n                               'structural_solver_settings': {'print_info': 'off',\n                                                              'max_iterations': 150,\n                                                              'num_load_steps': 1,\n                                                              'delta_curved': 1e-5,\n                                                              'min_delta': 1e-13,\n                                                              'gravity_on': 'on',\n                                                              'gravity': 9.754},\n                               'aero_solver': 'StaticUvlm',\n                               'aero_solver_settings': {'print_info': 'off',\n                                                        'horseshoe': 'off',\n                                                        'num_cores': 4,\n                                                        'n_rollup': 0,\n                                                        'rollup_dt': main_chord/m_main/u_inf,\n                                                        'rollup_aic_refresh': 1,\n                                                        'rollup_tolerance': 1e-4,\n                                                        'velocity_field_generator': 'SteadyVelocityField',\n                                                        'velocity_field_input': {'u_inf': u_inf,\n                                                                                 'u_inf_direction': [1., 0, 0]},\n                                                        'rho': rho},\n                               'max_iter': 80,\n                               'n_load_steps': 1,\n                               'tolerance': 1e-5,\n                               'relaxation_factor': 0.0}\n\n    config['DynamicCoupled'] = {'print_info': 'on',\n                                'structural_solver': 'NonLinearDynamicMultibody',\n                                'structural_solver_settings': {'print_info': 'off',\n                                                               'max_iterations': 550,\n                                                               'num_load_steps': 1,\n                                                               'delta_curved': 1e-1,\n                                                               'min_delta': 1e-4,\n                                                               'newmark_damp': 5e-3,\n                                                               'gravity_on': 'on',\n                                                               'gravity': 9.754,\n                                                               'num_steps': num_steps,\n                                                               'dt': dt,\n                                                               'relax_factor_lm': 0.2,\n                                                               'time_integrator': 'NewmarkBeta',\n                                                               'time_integrator_settings':\n                                                                   {'dt': dt,\n                                                                    'newmark_damp': 5e-3,\n                                                                    'num_LM_eq': 5}},\n                                'aero_solver': 'StepUvlm',\n                                'aero_solver_settings':\n                                    {'print_info': 'off',\n                                     'num_cores': 4,\n                                     'convection_scheme': 2,\n                                     'velocity_field_generator': 'GustVelocityField',\n                                     'velocity_field_input': {'u_inf': u_inf,\n                                                              'u_inf_direction': [1., 0, 0],\n                                                              'gust_shape': '1-cos',\n                                                              'gust_parameters': {\n                                                                  'gust_length': 4.0 * main_chord,\n                                                                  'gust_intensity': 0.1 * u_inf},\n                                                              'offset': 1.0,\n                                                              'relative_motion': 'on'},\n                                     'rho': rho,\n                                     'n_time_steps': num_steps,\n                                     'dt': dt},\n                                'controller_id': {'controller_tip': 'ControlSurfacePidController'},\n                                'controller_settings': {'controller_tip': {'P': gains[0],\n                                                                           'I': gains[1],\n                                                                           'D': gains[2],\n                                                                           'dt': dt,\n                                                                           'input_type': 'pitch',\n                                                                           'controller_log_route': './output/' + case_name + '/',\n                                                                           'controlled_surfaces': 0,\n                                                                           'time_history_input_file': 'pitch.csv'}},\n                                'postprocessors': ['BeamPlot', 'AerogridPlot'],\n                                'postprocessors_settings': {'BeamPlot': {'include_rbm': 'on',\n                                                                         'include_applied_forces': 'on'},\n                                                            'AerogridPlot': {\n                                                                'include_rbm': 'on',\n                                                                'include_applied_forces': 'on',\n                                                                'minus_m_star': 0}},\n                                'fsi_substeps': 100,\n                                # 'fsi_substeps': 1,\n                                'fsi_tolerance': 1e-5,\n                                'relaxation_factor': 0.3,\n                                'dynamic_relaxation': 'off',\n                                'minimum_steps': 1,\n                                'relaxation_steps': 25,\n                                'structural_substeps': n_structural_substeps,\n                                'n_time_steps': num_steps,\n                                'dt': dt}\n\n    config['AerogridLoader'] = {'unsteady': 'on',\n                                'aligned_grid': 'on',\n                                'mstar': 1,\n                                'freestream_dir': ['1', '0', '0'],\n                                'wake_shape_generator': 'StraightWake',\n                                'wake_shape_generator_input': {'u_inf': u_inf,\n                                                               'u_inf_direction': ['1', '0', '0'],\n                                                               'dt': dt}}\n    if not horseshoe:\n        config['AerogridLoader']['mstar'] = int(m_main*wake_length)\n\n    config['AerogridPlot'] = {'include_rbm': 'on',\n                              'include_applied_forces': 'on',\n                              'minus_m_star': 0\n                              }\n    config['AeroForcesCalculator'] = {'write_text_file': 'on',\n                                      'text_file_name': case_name + '_aeroforces.csv',\n                                      'screen_output': 'on',\n                                      'unsteady': 'off'\n                                      }\n    config['BeamPlot'] = {'include_rbm': 'on',\n                          'include_applied_forces': 'on'}\n    config.write()\n\n\nclean_test_files()\ngenerate_multibody_file()\ngenerate_fem_file()\ngenerate_dyn_file()\ngenerate_solver_file(horseshoe=False)\ngenerate_aero_file()\n"
  },
  {
    "path": "sharpy/cases/coupled/hinged_controlled_wing/generate_hinged_roll_controlled_wing.py",
    "content": "import h5py as h5\nimport numpy as np\nimport configparser\nimport os\n\nimport sharpy.utils.algebra as algebra\nimport sharpy.utils.generate_cases as gc\n\ncase_name = 'hinged_roll_controlled_wing'\nroute = os.path.dirname(os.path.realpath(__file__)) + '/'\n\n# m = 16 gives flutter with 165\nm_main = 6\namplitude = 0*np.pi/180\nperiod = 5\ndt_factor = 1.\nn_structural_substeps = 10\n\n# flight conditions\nu_inf = 10\nrho = 1.225\nalpha = 0\nbeta = 0\nc_ref = 1\nb_ref = 16\nsweep = 0*np.pi/180.\nsigma = 1\nwake_length = 10 # chords\nlambda_control_surface = 0.5\n\nalpha_rad = alpha*np.pi/180\n\nroll_file = route + 'roll.csv'\n\ngains = -np.array([45, 50.0, 1.5])\n\n# main geometry data\nmain_span = 10\nmain_chord = 2.\nmain_ea = 0.4\nmain_cg = 0.3\nmain_sigma = 1\nmain_airfoil_P = 0\nmain_airfoil_M = 0\n\nn_surfaces = 1\n\ndt = main_chord/m_main/u_inf*dt_factor\nnum_steps = int(30./dt)\n\nroll_hist = np.linspace(0, num_steps*dt, num_steps)\nroll_hist = amplitude*np.sin(2.0*np.pi*roll_hist/period)\nnp.savetxt(roll_file, roll_hist)\n\n# discretisation data\nnum_elem_main = 5\n\nnum_elem_cs = round(lambda_control_surface*num_elem_main)\n\nnum_node_elem = 3\nnum_elem = num_elem_main\nnum_node_main = num_elem_main*(num_node_elem - 1) + 1\nnum_node = num_node_main\n\n\ndef clean_test_files():\n    fem_file_name = route + '/' + case_name + '.fem.h5'\n    if os.path.isfile(fem_file_name):\n        os.remove(fem_file_name)\n\n    aero_file_name = route + '/' + case_name + '.aero.h5'\n    if os.path.isfile(aero_file_name):\n        os.remove(aero_file_name)\n\n    dyn_file_name = route + '/' + case_name + '.dyn.h5'\n    if os.path.isfile(dyn_file_name):\n        os.remove(dyn_file_name)\n\n    solver_file_name = route + '/' + case_name + '.sharpy'\n    if os.path.isfile(solver_file_name):\n        os.remove(solver_file_name)\n\n    flightcon_file_name = route + '/' + case_name + '.flightcon.txt'\n    if os.path.isfile(flightcon_file_name):\n        os.remove(flightcon_file_name)\n\n\ndef generate_dyn_file():\n    global dt\n    global num_steps\n    global route\n    global case_name\n    global num_elem\n    global num_node_elem\n    global num_node\n    global amplitude\n    global period\n\n    dynamic_forces_time = None\n    with_dynamic_forces = False\n    with_forced_vel = False\n    if with_dynamic_forces:\n        f1 = 100\n        dynamic_forces = np.zeros((num_node, 6))\n        app_node = [int(num_node_main - 1), int(num_node_main)]\n        dynamic_forces[app_node, 2] = f1\n        force_time = np.zeros((num_steps, ))\n        limit = round(0.05/dt)\n        force_time[50:61] = 1\n\n        dynamic_forces_time = np.zeros((num_steps, num_node, 6))\n        for it in range(num_steps):\n            dynamic_forces_time[it, :, :] = force_time[it]*dynamic_forces\n\n    forced_for_vel = None\n    if with_forced_vel:\n        forced_for_vel = np.zeros((num_steps, 6))\n        forced_for_acc = np.zeros((num_steps, 6))\n        for it in range(num_steps):\n            # if dt*it < period:\n            forced_for_vel[it, 2] = 2*np.pi/period*amplitude*np.sin(2*np.pi*dt*it/period)\n            forced_for_acc[it, 2] = (2*np.pi/period)**2*amplitude*np.cos(2*np.pi*dt*it/period)\n            # forced_for_vel[it, 2] = 2*np.pi/period*np.pi/180*amplitude*np.cos(2*np.pi*dt*it/period)\n\n    with h5.File(route + '/' + case_name + '.dyn.h5', 'a') as h5file:\n        if with_dynamic_forces:\n            h5file.create_dataset(\n                'dynamic_forces', data=dynamic_forces_time)\n        if with_forced_vel:\n            h5file.create_dataset(\n                'for_vel', data=forced_for_vel)\n            h5file.create_dataset(\n                'for_acc', data=forced_for_acc)\n        h5file.create_dataset(\n            'num_steps', data=num_steps)\n\n\ndef generate_fem_file():\n    # placeholders\n    # coordinates\n    global x, y, z\n    global sigma\n    x = np.zeros((num_node, ))\n    y = np.zeros((num_node, ))\n    z = np.zeros((num_node, ))\n    # struct twist\n    structural_twist = np.zeros((num_elem, 3))\n    # beam number\n    beam_number = np.zeros((num_elem, ), dtype=int)\n    # frame of reference delta\n    frame_of_reference_delta = np.zeros((num_elem, num_node_elem, 3))\n    # connectivities\n    conn = np.zeros((num_elem, num_node_elem), dtype=int)\n    # stiffness\n    num_stiffness = 1\n    ea = 1e5\n    ga = 1e5\n    gj = 0.987581e6\n    eiy = 9.77221e6\n    eiz = 9.77221e8\n    base_stiffness = sigma*np.diag([ea, ga, ga, gj, eiy, eiz])\n    stiffness = np.zeros((num_stiffness, 6, 6))\n    stiffness[0, :, :] = main_sigma*base_stiffness\n    elem_stiffness = np.zeros((num_elem,), dtype=int)\n    # mass\n    num_mass = 1\n    m_base = 1\n    j_base = 0.5\n    import sharpy.utils.algebra as algebra\n    # m_chi_cg = algebra.skew(m_base*np.array([0., -(main_ea - main_cg), 0.]))\n    m_chi_cg = algebra.skew(m_base*np.array([0., (main_ea - main_cg), 0.]))\n    base_mass = np.diag([m_base, m_base, m_base, j_base, 0.5*j_base, 0.5*j_base])\n    base_mass[0:3, 3:6] = -m_chi_cg\n    base_mass[3:6, 0:3] = m_chi_cg\n    mass = np.zeros((num_mass, 6, 6))\n    mass[0, :, :] = base_mass\n    elem_mass = np.zeros((num_elem,), dtype=int)\n    # boundary conditions\n    boundary_conditions = np.zeros((num_node, ), dtype=int)\n    boundary_conditions[0] = 1\n    # applied forces\n    # n_app_forces = 2\n    # node_app_forces = np.zeros((n_app_forces,), dtype=int)\n    app_forces = np.zeros((num_node, 6))\n\n    spacing_param = 10\n\n    # right wing (beam 0) --------------------------------------------------------------\n    working_elem = 0\n    working_node = 0\n    beam_number[working_elem:working_elem + num_elem_main] = 0\n    domain = np.linspace(0, 1.0, num_node_main)\n    # 16 - (np.geomspace(20, 4, 10) - 4)\n    x[working_node:working_node + num_node_main] = np.sin(sweep)*(main_span - (np.geomspace(main_span + spacing_param,\n                                                                                            0 + spacing_param,\n                                                                                            num_node_main)\n                                                                               - spacing_param))\n    y[working_node:working_node + num_node_main] = np.abs(np.cos(sweep)*(main_span - (np.geomspace(main_span + spacing_param,\n                                                                                            0 + spacing_param,\n                                                                                            num_node_main)\n                                                                               - spacing_param)))\n    y[0] = 0\n    # y[working_node:working_node + num_node_main] = np.cos(sweep)*np.linspace(0.0, main_span, num_node_main)\n    # x[working_node:working_node + num_node_main] = np.sin(sweep)*np.linspace(0.0, main_span, num_node_main)\n    for ielem in range(num_elem_main):\n        for inode in range(num_node_elem):\n            frame_of_reference_delta[working_elem + ielem, inode, :] = [-1, 0, 0]\n    # connectivity\n    for ielem in range(num_elem_main):\n        conn[working_elem + ielem, :] = ((np.ones((3,))*(working_elem + ielem)*(num_node_elem - 1)) +\n                                         [0, 2, 1])\n    elem_stiffness[working_elem:working_elem + num_elem_main] = 0\n    elem_mass[working_elem:working_elem + num_elem_main] = 0\n    boundary_conditions[0] = 1\n    boundary_conditions[working_node + num_node_main - 1] = -1\n    working_elem += num_elem_main\n    working_node += num_node_main\n\n    # # left wing (beam 1) --------------------------------------------------------------\n    # beam_number[working_elem:working_elem + num_elem_main] = 1\n    # domain = np.linspace(0.0, 1.0, num_node_main)\n    # tempy = np.linspace(0.0, main_span, num_node_main)\n    # # x[working_node:working_node + num_node_main - 1] = -np.sin(sweep)*tempy[0:-1]\n    # # y[working_node:working_node + num_node_main - 1] = np.cos(sweep)*tempy[0:-1]\n    # x[working_node:working_node + num_node_main - 1] = -np.sin(sweep)*(main_span - (np.geomspace(0 + spacing_param,\n                                                                                            # main_span + spacing_param,\n                                                                                            # num_node_main)[:-1]\n                                                                               # - spacing_param))\n    # y[working_node:working_node + num_node_main - 1] = -np.abs(np.cos(sweep)*(main_span - (np.geomspace(0 + spacing_param,\n                                                                                                   # main_span + spacing_param,\n                                                                                                   # num_node_main)[:-1]\n                                                                                      # - spacing_param)))\n    # for ielem in range(num_elem_main):\n        # for inode in range(num_node_elem):\n            # frame_of_reference_delta[working_elem + ielem, inode, :] = [1, 0, 0]\n    # # connectivity\n    # for ielem in range(num_elem_main):\n        # conn[working_elem + ielem, :] = ((np.ones((3,))*(working_elem + ielem)*(num_node_elem - 1)) +\n                                         # [0, 2, 1])\n    # conn[working_elem , 0] = 0\n    # elem_stiffness[working_elem:working_elem + num_elem_main] = 0\n    # elem_mass[working_elem:working_elem + num_elem_main] = 0\n    # boundary_conditions[working_node + num_node_main - 1 - 1] = -1\n    # working_elem += num_elem_main\n    # working_node += num_node_main - 1\n\n    with h5.File(route + '/' + case_name + '.fem.h5', 'a') as h5file:\n        coordinates = h5file.create_dataset('coordinates', data=np.column_stack((x, y, z)))\n        conectivities = h5file.create_dataset('connectivities', data=conn)\n        num_nodes_elem_handle = h5file.create_dataset(\n            'num_node_elem', data=num_node_elem)\n        num_nodes_handle = h5file.create_dataset(\n            'num_node', data=num_node)\n        num_elem_handle = h5file.create_dataset(\n            'num_elem', data=num_elem)\n        stiffness_db_handle = h5file.create_dataset(\n            'stiffness_db', data=stiffness)\n        stiffness_handle = h5file.create_dataset(\n            'elem_stiffness', data=elem_stiffness)\n        mass_db_handle = h5file.create_dataset(\n            'mass_db', data=mass)\n        mass_handle = h5file.create_dataset(\n            'elem_mass', data=elem_mass)\n        frame_of_reference_delta_handle = h5file.create_dataset(\n            'frame_of_reference_delta', data=frame_of_reference_delta)\n        structural_twist_handle = h5file.create_dataset(\n            'structural_twist', data=structural_twist)\n        bocos_handle = h5file.create_dataset(\n            'boundary_conditions', data=boundary_conditions)\n        beam_handle = h5file.create_dataset(\n            'beam_number', data=beam_number)\n        app_forces_handle = h5file.create_dataset(\n            'app_forces', data=app_forces)\n        body_number_handle = h5file.create_dataset(\n            'body_number', data=np.zeros((num_elem, ), dtype=int))\n        # node_app_forces_handle = h5file.create_dataset(\n        #     'node_app_forces', data=node_app_forces)\n\n\ndef generate_aero_file():\n    global x, y, z\n\n    n_control_surfaces = 1\n    control_surface = np.zeros((num_elem, num_node_elem), dtype=int) - 1\n    control_surface_type = np.zeros((n_control_surfaces,), dtype=int)\n    control_surface_deflection = np.zeros((n_control_surfaces,))\n    control_surface_chord = np.zeros((n_control_surfaces, ), dtype=int)\n    control_surface_hinge_coord = np.zeros((n_control_surfaces, ))\n\n    control_surface[-num_elem_cs:, :] = 0\n    control_surface_type[0] = 2\n    control_surface_deflection[0] = 0.0\n    control_surface_chord[0] = int(0.35*m_main)\n\n    airfoil_distribution = np.zeros((num_elem, num_node_elem), dtype=int)\n    surface_distribution = np.zeros((num_elem,), dtype=int) - 1\n    surface_m = np.zeros((n_surfaces, ), dtype=int)\n    m_distribution = 'uniform'\n    aero_node = np.zeros((num_node,), dtype=bool)\n    twist = np.zeros((num_elem, 3))\n    chord = np.zeros((num_elem, 3))\n    elastic_axis = np.zeros((num_elem, 3,))\n\n    working_elem = 0\n    working_node = 0\n    # right wing (surface 0, beam 0)\n    i_surf = 0\n    chord[:] = main_chord\n    elastic_axis[:] = main_ea\n    airfoil_distribution[working_elem:working_elem + num_elem_main, :] = 0\n    surface_distribution[working_elem:working_elem + num_elem_main] = i_surf\n    surface_m[i_surf] = m_main\n    aero_node[working_node:working_node + num_node_main] = True\n    # chord[working_node:working_node + num_node_main] = main_chord\n    # elastic_axis[working_node:working_node + num_node_main] = main_ea\n    working_elem += num_elem_main\n    working_node += num_node_main\n\n    # left wing (surface 1, beam 1)\n    # i_surf = 1\n    # airfoil_distribution[working_elem:working_elem + num_elem_main, :] = 0\n    # # airfoil_distribution[working_node:working_node + num_node_main - 1] = 0\n    # surface_distribution[working_elem:working_elem + num_elem_main] = i_surf\n    # surface_m[i_surf] = m_main\n    # aero_node[working_node:working_node + num_node_main - 1] = True\n    # # chord[working_node:working_node + num_node_main - 1] = main_chord\n    # # elastic_axis[working_node:working_node + num_node_main - 1] = main_ea\n    # working_elem += num_elem_main\n    # working_node += num_node_main - 1\n\n    with h5.File(route + '/' + case_name + '.aero.h5', 'a') as h5file:\n        airfoils_group = h5file.create_group('airfoils')\n        # add one airfoil\n        naca_airfoil_main = airfoils_group.create_dataset('0', data=np.column_stack(\n                                generate_naca_camber(P=main_airfoil_P, M=main_airfoil_M)))\n        # chord\n        chord_input = h5file.create_dataset('chord', data=chord)\n        dim_attr = chord_input .attrs['units'] = 'm'\n\n        # twist\n        twist_input = h5file.create_dataset('twist', data=twist)\n        dim_attr = twist_input.attrs['units'] = 'rad'\n\n        # airfoil distribution\n        airfoil_distribution_input = h5file.create_dataset('airfoil_distribution', data=airfoil_distribution)\n\n        surface_distribution_input = h5file.create_dataset('surface_distribution', data=surface_distribution)\n        surface_m_input = h5file.create_dataset('surface_m', data=surface_m)\n        m_distribution_input = h5file.create_dataset('m_distribution', data=m_distribution.encode('ascii', 'ignore'))\n\n        aero_node_input = h5file.create_dataset('aero_node', data=aero_node)\n        elastic_axis_input = h5file.create_dataset('elastic_axis', data=elastic_axis)\n\n        control_surface_input = h5file.create_dataset('control_surface', data = control_surface)\n        control_surface_input = h5file.create_dataset('control_surface_deflection', data = control_surface_deflection)\n        control_surface_input = h5file.create_dataset('control_surface_chord', data = control_surface_chord)\n        control_surface_input = h5file.create_dataset('control_surface_hinge_coord', data = control_surface_hinge_coord)\n        control_surface_input = h5file.create_dataset('control_surface_type', data = control_surface_type)\n\n\ndef generate_naca_camber(M=0, P=0):\n    m = M*1e-2\n    p = P*1e-1\n\n    def naca(x, m, p):\n        if x < 1e-6:\n            return 0.0\n        elif x < p:\n            return m/(p*p)*(2*p*x - x*x)\n        elif x > p and x < 1+1e-6:\n            return m/((1-p)*(1-p))*(1 - 2*p + 2*p*x - x*x)\n\n    x_vec = np.linspace(0, 1, 1000)\n    y_vec = np.array([naca(x, m, p) for x in x_vec])\n    return x_vec, y_vec\n\ndef generate_multibody_file():\n    LC2 = gc.LagrangeConstraint()\n    LC2.behaviour = 'hinge_FoR'\n    LC2.rot_axis_AFoR = np.array([1.0, 0.0, 0.0])\n    LC2.body_FoR = 0\n    # LC2.node_number = int(0)\n\n    LC = []\n    LC.append(LC2)\n\n    MB1 = gc.BodyInformation()\n    MB1.body_number = 0\n    MB1.FoR_position = np.zeros((6,))\n    MB1.FoR_velocity = np.zeros((6,))\n    MB1.FoR_acceleration = np.zeros((6,))\n    MB1.FoR_movement = 'free'\n    MB1.quat = np.array([1.0, 0.0, 0.0, 0.0])\n\n    MB = []\n    MB.append(MB1)\n    gc.clean_test_files(route, case_name)\n    gc.generate_multibody_file(LC, MB, route, case_name)\n\ndef generate_solver_file(horseshoe=False):\n    file_name = route + '/' + case_name + '.sharpy'\n    # config = configparser.ConfigParser()\n    import configobj\n    config = configobj.ConfigObj()\n    config.filename = file_name\n    config['SHARPy'] = {'case': case_name,\n                        'route': route,\n                        'flow': ['BeamLoader',\n                                 'AerogridLoader',\n                                 'StaticCoupled',\n                                 'DynamicCoupled',\n                                 # 'AerogridPlot',\n                                 # 'BeamPlot',\n                                 ],\n                        'write_screen': 'on',\n                        'write_log': 'on',\n                        'log_folder': route + '/output/',\n                        'log_file': case_name + '.log'}\n    config['BeamLoader'] = {'unsteady': 'on',\n                            'orientation': algebra.euler2quat(np.array([0.0,\n                                                                        alpha_rad,\n                                                                        beta*np.pi/180]))}\n\n    config['StaticCoupled'] = {'print_info': 'on',\n                               'structural_solver': 'NonLinearStatic',\n                               'structural_solver_settings': {'print_info': 'off',\n                                                              'max_iterations': 150,\n                                                              'num_load_steps': 1,\n                                                              'delta_curved': 1e-5,\n                                                              'min_delta': 1e-13,\n                                                              'gravity_on': 'on',\n                                                              'gravity': 9.754},\n                               'aero_solver': 'StaticUvlm',\n                               'aero_solver_settings': {'print_info': 'off',\n                                                        'horseshoe': 'off',\n                                                        'num_cores': 4,\n                                                        'velocity_field_generator': 'SteadyVelocityField',\n                                                        'velocity_field_input': {'u_inf': u_inf,\n                                                                                 'u_inf_direction': [1., 0, 0]},\n                                                        'rho': rho},\n                               'max_iter': 80,\n                               'n_load_steps': 1,\n                               'tolerance': 1e-5,\n                               'relaxation_factor': 0.0}\n    config['DynamicCoupled'] = {'print_info': 'on',\n                                          'structural_solver': 'NonLinearDynamicMultibody',\n                                          'structural_solver_settings': {'print_info': 'off',\n                                                                         'max_iterations': 550,\n                                                                         'num_load_steps': 1,\n                                                                         'delta_curved': 1e-1,\n                                                                         'min_delta': 1e-6,\n                                                                         'newmark_damp': 1e-2,\n                                                                         'gravity_on': 'on',\n                                                                         'gravity': 9.754,\n                                                                         'num_steps': num_steps,\n                                                                         'time_integrator': 'NewmarkBeta',\n                                                                         'time_integrator_settings':\n                                                                             {'dt': dt,\n                                                                              'newmark_damp': 5e-3,\n                                                                              'num_LM_eq': 5},\n                                                                         },\n                                          'aero_solver': 'StepUvlm',\n                                          'aero_solver_settings': {'print_info': 'off',\n                                                                   'num_cores': 4,\n                                                                   'convection_scheme': 3,\n                                                                   'gamma_dot_filtering': 9,\n                                                                   'velocity_field_generator': 'GustVelocityField',\n                                                                   'velocity_field_input':\n                                                                       {'u_inf': u_inf,\n                                                                        'u_inf_direction': [1., 0, 0],\n                                                                        'gust_shape': '1-cos',\n                                                                        'gust_parameters': {\n                                                                            'gust_length': 10.0 * main_chord,\n                                                                            'gust_intensity': 0.15 * u_inf},\n                                                                        'offset': 20.0,\n                                                                        'relative_motion': 'on'},\n                                                                   'rho': rho,\n                                                                   'n_time_steps': num_steps,\n                                                                   'dt': dt},\n                                          'controller_id': {'controller_tip': 'ControlSurfacePidController'},\n                                          'controller_settings': {'controller_tip': {'P': gains[0],\n                                                                                     'I': gains[1],\n                                                                                     'D': gains[2],\n                                                                                     'dt': dt,\n                                                                                     'input_type': 'roll',\n                                                                                     'controller_log_route': './output/' + case_name + '/',\n                                                                                     'controlled_surfaces': 0,\n                                                                                     'time_history_input_file': 'roll.csv'}},\n                                          'postprocessors': ['BeamLoads', 'BeamPlot', 'AerogridPlot'],\n                                          'postprocessors_settings': {'BeamLoads': {},\n                                                                      'BeamPlot': {'include_rbm': 'on',\n                                                                                   'include_applied_forces': 'on'},\n                                                                      'AerogridPlot': {\n                                                                          'include_rbm': 'on',\n                                                                          'include_applied_forces': 'on',\n                                                                          'minus_m_star': 0}},\n                                          'fsi_substeps': 100,\n                                          # 'fsi_substeps': 1,\n                                          'fsi_tolerance': 1e-5,\n                                          'relaxation_factor': 0.2,\n                                          'dynamic_relaxation': 'off',\n                                          'minimum_steps': 1,\n                                          'relaxation_steps': 25,\n                                          'include_unsteady_force_contribution': 'off',\n                                          'steps_without_unsteady_force': 10,\n                                          'pseudosteps_ramp_unsteady_force': 6,\n                                          'structural_substeps': n_structural_substeps,\n                                          'n_time_steps': num_steps,\n                                          'dt': dt,\n                                          'structural_substeps': 0}\n\n    if horseshoe is True:\n        config['AerogridLoader'] = {'unsteady': 'on',\n                                    'aligned_grid': 'on',\n                                    'mstar': 1,\n                                    'wake_shape_generator': 'StraightWake',\n                                    'wake_shape_generator_input': {\n                                        'u_inf': u_inf,\n                                        'u_inf_direction': [1., 0., 0.],\n                                        'dt': dt,\n                                    },\n                                    'freestream_dir': ['1', '0', '0']}\n    else:\n        config['AerogridLoader'] = {'unsteady': 'on',\n                                    'aligned_grid': 'on',\n                                    'wake_shape_generator': 'StraightWake',\n                                    'wake_shape_generator_input': {\n                                        'u_inf': u_inf,\n                                        'u_inf_direction': [1., 0., 0.],\n                                        'dt': dt,\n                                    },\n                                    'mstar': int(m_main * wake_length),\n                                    'freestream_dir': ['1', '0', '0']}\n\n    config['AerogridPlot'] = {'include_rbm': 'on',\n                              'include_applied_forces': 'on',\n                              'minus_m_star': 0\n                              }\n    config['AeroForcesCalculator'] = {'write_text_file': 'on',\n                                      'text_file_name': case_name + '_aeroforces.csv',\n                                      'screen_output': 'on',\n                                      'unsteady': 'off'\n                                      }\n    config['BeamPlot'] = {'include_rbm': 'on',\n                          'include_applied_forces': 'on'}\n    config.write()\n\n\nclean_test_files()\ngenerate_multibody_file()\ngenerate_fem_file()\ngenerate_dyn_file()\ngenerate_solver_file(horseshoe=False)\ngenerate_aero_file()\n"
  },
  {
    "path": "sharpy/cases/coupled/linear_horten/__init__.py",
    "content": ""
  },
  {
    "path": "sharpy/cases/coupled/multibody_takeoff/__init__.py",
    "content": ""
  },
  {
    "path": "sharpy/cases/coupled/multibody_takeoff/generate_hale.py",
    "content": "#! /usr/bin/env python3\nimport h5py as h5\nimport numpy as np\nimport os\nimport sharpy.utils.algebra as algebra\n\ncase_name = 'simple_HALE_cato'\nroute = os.path.dirname(os.path.realpath(__file__)) + '/'\n\n# EXECUTION\nflow = ['BeamLoader',\n        'AerogridLoader',\n        # 'NonLinearStatic',\n        # 'StaticUvlm',\n        # 'StaticTrim',\n        'StaticCoupled',\n        'BeamLoads',\n        'AerogridPlot',\n        'BeamPlot',\n        'DynamicCoupled',\n        ]\n\n# if free_flight is False, the motion of the centre of the wing is prescribed.\nfree_flight = True\n\n# FLIGHT CONDITIONS\n# the simulation is set such that the aircraft flies at a u_inf velocity while\n# the air is calm.\nu_inf = 10\nrho = 1.225\n\n# trim sigma = 1.5\nalpha = 4.281820969436041*np.pi/180\nbeta = 0\nroll = 0\ngravity = 'on'\ncs_deflection = -1.588626664555141*np.pi/180\nrudder_static_deflection = 0.0\nrudder_step = 0.0*np.pi/180\nthrust = 8.482569525210431\nsigma = 100\nlambda_dihedral = 20*np.pi/180\n\n# gust settings\ngust_intensity = 0.00\ngust_length = 1*u_inf\ngust_offset = 0.5*u_inf\n\n# numerics\nn_step = 1\nrelaxation_factor = 0.5\ntolerance = 1e-7\nfsi_tolerance = 1e-6\n\nnum_cores = 2\n\n# MODEL GEOMETRY\n# beam\nspan_main = 16.0\nlambda_main = 0.25\nea_main = 0.3\n\nea = 1e7\nga = 1e7\ngj = 1e4\neiy = 2e4\neiz = 4e6\nm_bar_main = 0.75\nj_bar_main = 0.075\n\nlength_fuselage = 10\noffset_fuselage = 0\nsigma_fuselage = 100\nm_bar_fuselage = 0.2\nj_bar_fuselage = 0.08\n\nspan_tail = 2.5\nea_tail = 0.5\nfin_height = 2.5\nea_fin = 0.5\nsigma_tail = 100\nm_bar_tail = 0.3\nj_bar_tail = 0.08\n\n# lumped masses\nn_lumped_mass = 1\nlumped_mass_nodes = np.zeros((n_lumped_mass, ), dtype=int)\nlumped_mass = np.zeros((n_lumped_mass, ))\nlumped_mass[0] = 50\nlumped_mass_inertia = np.zeros((n_lumped_mass, 3, 3))\nlumped_mass_position = np.zeros((n_lumped_mass, 3))\n\n# aero\nchord_main = 1.0\nchord_tail = 0.5\nchord_fin = 0.5\n\n# DISCRETISATION\n# spatial discretisation\n# chordiwse panels\nm = 8\n# spanwise elements\nn_elem_multiplier = 2\nn_elem_main = int(4*n_elem_multiplier)\nn_elem_tail = int(2*n_elem_multiplier)\nn_elem_fin = int(2*n_elem_multiplier)\nn_elem_fuselage = int(2*n_elem_multiplier)\nn_surfaces = 5\n\n# temporal discretisation\nphysical_time = 30\ntstep_factor = 1.\ndt = 1.0/m/u_inf*tstep_factor\nn_tstep = round(physical_time/dt)\n\n# END OF INPUT-----------------------------------------------------------------\n\n# beam processing\nn_node_elem = 3\nspan_main1 = (1.0 - lambda_main)*span_main\nspan_main2 = lambda_main*span_main\n\nn_elem_main1 = round(n_elem_main*(1 - lambda_main))\nn_elem_main2 = n_elem_main - n_elem_main1\n\n# total number of elements\nn_elem = 0\nn_elem += n_elem_main1 + n_elem_main1\nn_elem += n_elem_main2 + n_elem_main2\nn_elem += n_elem_fuselage\nn_elem += n_elem_fin\nn_elem += n_elem_tail + n_elem_tail\n\n# number of nodes per part\nn_node_main1 = n_elem_main1*(n_node_elem - 1) + 1\nn_node_main2 = n_elem_main2*(n_node_elem - 1) + 1\nn_node_main = n_node_main1 + n_node_main2 - 1\nn_node_fuselage = n_elem_fuselage*(n_node_elem - 1) + 1\nn_node_fin = n_elem_fin*(n_node_elem - 1) + 1\nn_node_tail = n_elem_tail*(n_node_elem - 1) + 1\n\n# total number of nodes\nn_node = 0\nn_node += n_node_main1 + n_node_main1 - 1\nn_node += n_node_main2 - 1 + n_node_main2 - 1\nn_node += n_node_fuselage - 1\nn_node += n_node_fin - 1\nn_node += n_node_tail - 1\nn_node += n_node_tail - 1\n\n# stiffness and mass matrices\nn_stiffness = 3\nbase_stiffness_main = sigma*np.diag([ea, ga, ga, gj, eiy, eiz])\nbase_stiffness_fuselage = base_stiffness_main.copy()*sigma_fuselage\nbase_stiffness_fuselage[4, 4] = base_stiffness_fuselage[5, 5]\nbase_stiffness_tail = base_stiffness_main.copy()*sigma_tail\nbase_stiffness_tail[4, 4] = base_stiffness_tail[5, 5]\n\nn_mass = 3\nbase_mass_main = np.diag([m_bar_main, m_bar_main, m_bar_main, j_bar_main, 0.5*j_bar_main, 0.5*j_bar_main])\nbase_mass_fuselage = np.diag([m_bar_fuselage,\n                              m_bar_fuselage,\n                              m_bar_fuselage,\n                              j_bar_fuselage,\n                              j_bar_fuselage*0.5,\n                              j_bar_fuselage*0.5])\nbase_mass_tail = np.diag([m_bar_tail,\n                          m_bar_tail,\n                          m_bar_tail,\n                          j_bar_tail,\n                          j_bar_tail*0.5,\n                          j_bar_tail*0.5])\n\n\n# PLACEHOLDERS\n# beam\nx = np.zeros((n_node, ))\ny = np.zeros((n_node, ))\nz = np.zeros((n_node, ))\nbeam_number = np.zeros((n_elem, ), dtype=int)\nframe_of_reference_delta = np.zeros((n_elem, n_node_elem, 3))\nstructural_twist = np.zeros((n_elem, 3))\nconn = np.zeros((n_elem, n_node_elem), dtype=int)\nstiffness = np.zeros((n_stiffness, 6, 6))\nelem_stiffness = np.zeros((n_elem, ), dtype=int)\nmass = np.zeros((n_mass, 6, 6))\nelem_mass = np.zeros((n_elem, ), dtype=int)\nboundary_conditions = np.zeros((n_node, ), dtype=int)\napp_forces = np.zeros((n_node, 6))\n\n\n# aero\nairfoil_distribution = np.zeros((n_elem, n_node_elem), dtype=int)\nsurface_distribution = np.zeros((n_elem,), dtype=int) - 1\nsurface_m = np.zeros((n_surfaces, ), dtype=int)\nm_distribution = 'uniform'\naero_node = np.zeros((n_node,), dtype=bool)\ntwist = np.zeros((n_elem, n_node_elem))\nsweep = np.zeros((n_elem, n_node_elem))\nchord = np.zeros((n_elem, n_node_elem,))\nelastic_axis = np.zeros((n_elem, n_node_elem,))\n\n\n# FUNCTIONS-------------------------------------------------------------\ndef clean_test_files():\n    fem_file_name = route + '/' + case_name + '.fem.h5'\n    if os.path.isfile(fem_file_name):\n        os.remove(fem_file_name)\n\n    dyn_file_name = route + '/' + case_name + '.dyn.h5'\n    if os.path.isfile(dyn_file_name):\n        os.remove(dyn_file_name)\n\n    aero_file_name = route + '/' + case_name + '.aero.h5'\n    if os.path.isfile(aero_file_name):\n        os.remove(aero_file_name)\n\n    solver_file_name = route + '/' + case_name + '.sharpy'\n    if os.path.isfile(solver_file_name):\n        os.remove(solver_file_name)\n\n    flightcon_file_name = route + '/' + case_name + '.flightcon.txt'\n    if os.path.isfile(flightcon_file_name):\n        os.remove(flightcon_file_name)\n\ndef generate_dyn_file():\n    global dt\n    global n_tstep\n    global route\n    global case_name\n    global num_elem\n    global num_node_elem\n    global num_node\n    global amplitude\n    global period\n\n    dynamic_forces_time = None\n    with_dynamic_forces = False\n    with_forced_vel = False\n\n    if with_dynamic_forces:\n        f1 = 100\n        dynamic_forces = np.zeros((num_node, 6))\n        app_node = [int(num_node_main - 1), int(num_node_main)]\n        dynamic_forces[app_node, 2] = f1\n        force_time = np.zeros((n_tstep, ))\n        limit = round(0.05/dt)\n        force_time[50:61] = 1\n\n        dynamic_forces_time = np.zeros((n_tstep, num_node, 6))\n        for it in range(n_tstep):\n            dynamic_forces_time[it, :, :] = force_time[it]*dynamic_forces\n\n    forced_for_vel = None\n    if with_forced_vel:\n        forced_for_vel = np.zeros((n_tstep, 6))\n        forced_for_acc = np.zeros((n_tstep, 6))\n        for it in range(n_tstep):\n            # if dt*it < period:\n            # forced_for_vel[it, 2] = 2*np.pi/period*amplitude*np.sin(2*np.pi*dt*it/period)\n            # forced_for_acc[it, 2] = (2*np.pi/period)**2*amplitude*np.cos(2*np.pi*dt*it/period)\n\n            forced_for_vel[it, 3] = 2*np.pi/period*amplitude*np.sin(2*np.pi*dt*it/period)\n            forced_for_acc[it, 3] = (2*np.pi/period)**2*amplitude*np.cos(2*np.pi*dt*it/period)\n\n    if with_dynamic_forces or with_forced_vel:\n        with h5.File(route + '/' + case_name + '.dyn.h5', 'a') as h5file:\n            if with_dynamic_forces:\n                h5file.create_dataset(\n                    'dynamic_forces', data=dynamic_forces_time)\n            if with_forced_vel:\n                h5file.create_dataset(\n                    'for_vel', data=forced_for_vel)\n                h5file.create_dataset(\n                    'for_acc', data=forced_for_acc)\n            h5file.create_dataset(\n                'num_steps', data=n_tstep)\n\ndef generate_fem():\n    stiffness[0, ...] = base_stiffness_main\n    stiffness[1, ...] = base_stiffness_fuselage\n    stiffness[2, ...] = base_stiffness_tail\n\n    mass[0, ...] = base_mass_main\n    mass[1, ...] = base_mass_fuselage\n    mass[2, ...] = base_mass_tail\n\n    we = 0\n    wn = 0\n    # inner right wing\n    beam_number[we:we + n_elem_main1] = 0\n    y[wn:wn + n_node_main1] = np.linspace(0.0, span_main1, n_node_main1)\n\n    for ielem in range(n_elem_main1):\n        conn[we + ielem, :] = ((np.ones((3, ))*(we + ielem)*(n_node_elem - 1)) +\n                               [0, 2, 1])\n        for inode in range(n_node_elem):\n            frame_of_reference_delta[we + ielem, inode, :] = [-1.0, 0.0, 0.0]\n\n    elem_stiffness[we:we + n_elem_main1] = 0\n    elem_mass[we:we + n_elem_main1] = 0\n    boundary_conditions[0] = 1\n    # remember this is in B FoR\n    app_forces[0] = [0, thrust, 0, 0, 0, 0]\n    we += n_elem_main1\n    wn += n_node_main1\n\n    # outer right wing\n    beam_number[we:we + n_elem_main1] = 0\n    y[wn:wn + n_node_main2 - 1] = y[wn - 1] + np.linspace(0.0, np.cos(lambda_dihedral)*span_main2, n_node_main2)[1:]\n    z[wn:wn + n_node_main2 - 1] = z[wn - 1] + np.linspace(0.0, np.sin(lambda_dihedral)*span_main2, n_node_main2)[1:]\n    for ielem in range(n_elem_main2):\n        conn[we + ielem, :] = ((np.ones((3, ))*(we + ielem)*(n_node_elem - 1)) +\n                               [0, 2, 1])\n        for inode in range(n_node_elem):\n            frame_of_reference_delta[we + ielem, inode, :] = [-1.0, 0.0, 0.0]\n    elem_stiffness[we:we + n_elem_main2] = 0\n    elem_mass[we:we + n_elem_main2] = 0\n    boundary_conditions[wn + n_node_main2 - 2] = -1\n    we += n_elem_main2\n    wn += n_node_main2 - 1\n\n    # inner left wing\n    beam_number[we:we + n_elem_main1 - 1] = 1\n    y[wn:wn + n_node_main1 - 1] = np.linspace(0.0, -span_main1, n_node_main1)[1:]\n    for ielem in range(n_elem_main1):\n        conn[we + ielem, :] = ((np.ones((3, ))*(we+ielem)*(n_node_elem - 1)) +\n                               [0, 2, 1])\n        for inode in range(n_node_elem):\n            frame_of_reference_delta[we + ielem, inode, :] = [1.0, 0.0, 0.0]\n    conn[we, 0] = 0\n    elem_stiffness[we:we + n_elem_main1] = 0\n    elem_mass[we:we + n_elem_main1] = 0\n    we += n_elem_main1\n    wn += n_node_main1 - 1\n\n    # outer left wing\n    beam_number[we:we + n_elem_main2] = 1\n    y[wn:wn + n_node_main2 - 1] = y[wn - 1] + np.linspace(0.0, -np.cos(lambda_dihedral)*span_main2, n_node_main2)[1:]\n    z[wn:wn + n_node_main2 - 1] = z[wn - 1] + np.linspace(0.0, np.sin(lambda_dihedral)*span_main2, n_node_main2)[1:]\n    for ielem in range(n_elem_main2):\n        conn[we + ielem, :] = ((np.ones((3, ))*(we+ielem)*(n_node_elem - 1)) +\n                               [0, 2, 1])\n        for inode in range(n_node_elem):\n            frame_of_reference_delta[we + ielem, inode, :] = [1.0, 0.0, 0.0]\n    elem_stiffness[we:we + n_elem_main2] = 0\n    elem_mass[we:we + n_elem_main2] = 0\n    boundary_conditions[wn + n_node_main2 - 2] = -1\n    we += n_elem_main2\n    wn += n_node_main2 - 1\n\n    # fuselage\n    beam_number[we:we + n_elem_fuselage] = 2\n    x[wn:wn + n_node_fuselage - 1] = np.linspace(0.0, length_fuselage, n_node_fuselage)[1:]\n    z[wn:wn + n_node_fuselage - 1] = np.linspace(0.0, offset_fuselage, n_node_fuselage)[1:]\n    for ielem in range(n_elem_fuselage):\n        conn[we + ielem, :] = ((np.ones((3,))*(we + ielem)*(n_node_elem - 1)) +\n                               [0, 2, 1])\n        for inode in range(n_node_elem):\n            frame_of_reference_delta[we + ielem, inode, :] = [0.0, 1.0, 0.0]\n    conn[we, 0] = 0\n    elem_stiffness[we:we + n_elem_fuselage] = 1\n    elem_mass[we:we + n_elem_fuselage] = 1\n    we += n_elem_fuselage\n    wn += n_node_fuselage - 1\n    global end_of_fuselage_node\n    end_of_fuselage_node = wn - 1\n\n    # fin\n    beam_number[we:we + n_elem_fin] = 3\n    x[wn:wn + n_node_fin - 1] = x[end_of_fuselage_node]\n    z[wn:wn + n_node_fin - 1] = z[end_of_fuselage_node] + np.linspace(0.0, fin_height, n_node_fin)[1:]\n    for ielem in range(n_elem_fin):\n        conn[we + ielem, :] = ((np.ones((3,))*(we + ielem)*(n_node_elem - 1)) +\n                               [0, 2, 1])\n        for inode in range(n_node_elem):\n            frame_of_reference_delta[we + ielem, inode, :] = [-1.0, 0.0, 0.0]\n    conn[we, 0] = end_of_fuselage_node\n    elem_stiffness[we:we + n_elem_fin] = 2\n    elem_mass[we:we + n_elem_fin] = 2\n    we += n_elem_fin\n    wn += n_node_fin - 1\n    end_of_fin_node = wn - 1\n\n    # right tail\n    beam_number[we:we + n_elem_tail] = 4\n    x[wn:wn + n_node_tail - 1] = x[end_of_fin_node]\n    y[wn:wn + n_node_tail - 1] = np.linspace(0.0, span_tail, n_node_tail)[1:]\n    z[wn:wn + n_node_tail - 1] = z[end_of_fin_node]\n    for ielem in range(n_elem_tail):\n        conn[we + ielem, :] = ((np.ones((3, ))*(we + ielem)*(n_node_elem - 1)) +\n                               [0, 2, 1])\n        for inode in range(n_node_elem):\n            frame_of_reference_delta[we + ielem, inode, :] = [-1.0, 0.0, 0.0]\n    conn[we, 0] = end_of_fin_node\n    elem_stiffness[we:we + n_elem_tail] = 2\n    elem_mass[we:we + n_elem_tail] = 2\n    boundary_conditions[wn + n_node_tail - 2] = -1\n    we += n_elem_tail\n    wn += n_node_tail - 1\n\n    # left tail\n    beam_number[we:we + n_elem_tail] = 5\n    x[wn:wn + n_node_tail - 1] = x[end_of_fin_node]\n    y[wn:wn + n_node_tail - 1] = np.linspace(0.0, -span_tail, n_node_tail)[1:]\n    z[wn:wn + n_node_tail - 1] = z[end_of_fin_node]\n    for ielem in range(n_elem_tail):\n        conn[we + ielem, :] = ((np.ones((3, ))*(we + ielem)*(n_node_elem - 1)) +\n                               [0, 2, 1])\n        for inode in range(n_node_elem):\n            frame_of_reference_delta[we + ielem, inode, :] = [1.0, 0.0, 0.0]\n    conn[we, 0] = end_of_fin_node\n    elem_stiffness[we:we + n_elem_tail] = 2\n    elem_mass[we:we + n_elem_tail] = 2\n    boundary_conditions[wn + n_node_tail - 2] = -1\n    we += n_elem_tail\n    wn += n_node_tail - 1\n\n    with h5.File(route + '/' + case_name + '.fem.h5', 'a') as h5file:\n        coordinates = h5file.create_dataset('coordinates', data=np.column_stack((x, y, z)))\n        conectivities = h5file.create_dataset('connectivities', data=conn)\n        num_nodes_elem_handle = h5file.create_dataset(\n            'num_node_elem', data=n_node_elem)\n        num_nodes_handle = h5file.create_dataset(\n            'num_node', data=n_node)\n        num_elem_handle = h5file.create_dataset(\n            'num_elem', data=n_elem)\n        stiffness_db_handle = h5file.create_dataset(\n            'stiffness_db', data=stiffness)\n        stiffness_handle = h5file.create_dataset(\n            'elem_stiffness', data=elem_stiffness)\n        mass_db_handle = h5file.create_dataset(\n            'mass_db', data=mass)\n        mass_handle = h5file.create_dataset(\n            'elem_mass', data=elem_mass)\n        frame_of_reference_delta_handle = h5file.create_dataset(\n            'frame_of_reference_delta', data=frame_of_reference_delta)\n        structural_twist_handle = h5file.create_dataset(\n            'structural_twist', data=structural_twist)\n        bocos_handle = h5file.create_dataset(\n            'boundary_conditions', data=boundary_conditions)\n        beam_handle = h5file.create_dataset(\n            'beam_number', data=beam_number)\n        app_forces_handle = h5file.create_dataset(\n            'app_forces', data=app_forces)\n        lumped_mass_nodes_handle = h5file.create_dataset(\n            'lumped_mass_nodes', data=lumped_mass_nodes)\n        lumped_mass_handle = h5file.create_dataset(\n            'lumped_mass', data=lumped_mass)\n        lumped_mass_inertia_handle = h5file.create_dataset(\n            'lumped_mass_inertia', data=lumped_mass_inertia)\n        lumped_mass_position_handle = h5file.create_dataset(\n            'lumped_mass_position', data=lumped_mass_position)\n\ndef generate_aero_file():\n    global x, y, z\n    # control surfaces\n    n_control_surfaces = 2\n    control_surface = np.zeros((n_elem, n_node_elem), dtype=int) - 1\n    control_surface_type = np.zeros((n_control_surfaces, ), dtype=int)\n    control_surface_deflection = np.zeros((n_control_surfaces, ))\n    control_surface_chord = np.zeros((n_control_surfaces, ), dtype=int)\n    control_surface_hinge_coord = np.zeros((n_control_surfaces, ), dtype=float)\n\n    # control surface type 0 = static\n    # control surface type 1 = dynamic\n    control_surface_type[0] = 0\n    control_surface_deflection[0] = cs_deflection\n    control_surface_chord[0] = m\n    control_surface_hinge_coord[0] = -0.25 # nondimensional wrt elastic axis (+ towards the trailing edge)\n\n    control_surface_type[1] = 0\n    control_surface_deflection[1] = rudder_static_deflection\n    control_surface_chord[1] = 1\n    control_surface_hinge_coord[1] = -0. # nondimensional wrt elastic axis (+ towards the trailing edge)\n\n    we = 0\n    wn = 0\n    # right wing (surface 0, beam 0)\n    i_surf = 0\n    airfoil_distribution[we:we + n_elem_main, :] = 0\n    surface_distribution[we:we + n_elem_main] = i_surf\n    surface_m[i_surf] = m\n    aero_node[wn:wn + n_node_main] = True\n    temp_chord = np.linspace(chord_main, chord_main, n_node_main)\n    temp_sweep = np.linspace(0.0, 0*np.pi/180, n_node_main)\n    node_counter = 0\n    for i_elem in range(we, we + n_elem_main):\n        for i_local_node in range(n_node_elem):\n            if not i_local_node == 0:\n                node_counter += 1\n            chord[i_elem, i_local_node] = temp_chord[node_counter]\n            elastic_axis[i_elem, i_local_node] = ea_main\n            sweep[i_elem, i_local_node] = temp_sweep[node_counter]\n\n    we += n_elem_main\n    wn += n_node_main\n\n    # left wing (surface 1, beam 1)\n    i_surf = 1\n    airfoil_distribution[we:we + n_elem_main, :] = 0\n    # airfoil_distribution[wn:wn + n_node_main - 1] = 0\n    surface_distribution[we:we + n_elem_main] = i_surf\n    surface_m[i_surf] = m\n    aero_node[wn:wn + n_node_main - 1] = True\n    # chord[wn:wn + num_node_main - 1] = np.linspace(main_chord, main_tip_chord, num_node_main)[1:]\n    # chord[wn:wn + num_node_main - 1] = main_chord\n    # elastic_axis[wn:wn + num_node_main - 1] = main_ea\n    temp_chord = np.linspace(chord_main, chord_main, n_node_main)\n    node_counter = 0\n    for i_elem in range(we, we + n_elem_main):\n        for i_local_node in range(n_node_elem):\n            if not i_local_node == 0:\n                node_counter += 1\n            chord[i_elem, i_local_node] = temp_chord[node_counter]\n            elastic_axis[i_elem, i_local_node] = ea_main\n            sweep[i_elem, i_local_node] = -temp_sweep[node_counter]\n\n    we += n_elem_main\n    wn += n_node_main - 1\n\n    we += n_elem_fuselage\n    wn += n_node_fuselage - 1 - 1\n    #\n    # # fin (surface 2, beam 3)\n    i_surf = 2\n    airfoil_distribution[we:we + n_elem_fin, :] = 1\n    # airfoil_distribution[wn:wn + n_node_fin] = 0\n    surface_distribution[we:we + n_elem_fin] = i_surf\n    surface_m[i_surf] = m\n    aero_node[wn:wn + n_node_fin] = True\n    # chord[wn:wn + num_node_fin] = fin_chord\n    for i_elem in range(we, we + n_elem_fin):\n        for i_local_node in range(n_node_elem):\n            chord[i_elem, i_local_node] = chord_fin\n            elastic_axis[i_elem, i_local_node] = ea_fin\n            control_surface[i_elem, i_local_node] = 1\n    # twist[end_of_fuselage_node] = 0\n    # twist[wn:] = 0\n    # elastic_axis[wn:wn + num_node_main] = fin_ea\n    we += n_elem_fin\n    wn += n_node_fin - 1\n    #\n    # # # right tail (surface 3, beam 4)\n    i_surf = 3\n    airfoil_distribution[we:we + n_elem_tail, :] = 2\n    # airfoil_distribution[wn:wn + n_node_tail] = 0\n    surface_distribution[we:we + n_elem_tail] = i_surf\n    surface_m[i_surf] = m\n    # XXX not very elegant\n    aero_node[wn:] = True\n    # chord[wn:wn + num_node_tail] = tail_chord\n    # elastic_axis[wn:wn + num_node_main] = tail_ea\n    for i_elem in range(we, we + n_elem_tail):\n        for i_local_node in range(n_node_elem):\n            twist[i_elem, i_local_node] = -0\n    for i_elem in range(we, we + n_elem_tail):\n        for i_local_node in range(n_node_elem):\n            chord[i_elem, i_local_node] = chord_tail\n            elastic_axis[i_elem, i_local_node] = ea_tail\n            control_surface[i_elem, i_local_node] = 0\n\n    we += n_elem_tail\n    wn += n_node_tail\n    #\n    # # left tail (surface 4, beam 5)\n    i_surf = 4\n    airfoil_distribution[we:we + n_elem_tail, :] = 2\n    # airfoil_distribution[wn:wn + n_node_tail - 1] = 0\n    surface_distribution[we:we + n_elem_tail] = i_surf\n    surface_m[i_surf] = m\n    aero_node[wn:wn + n_node_tail - 1] = True\n    # chord[wn:wn + num_node_tail] = tail_chord\n    # elastic_axis[wn:wn + num_node_main] = tail_ea\n    # twist[we:we + num_elem_tail] = -tail_twist\n    for i_elem in range(we, we + n_elem_tail):\n        for i_local_node in range(n_node_elem):\n            twist[i_elem, i_local_node] = -0\n    for i_elem in range(we, we + n_elem_tail):\n        for i_local_node in range(n_node_elem):\n            chord[i_elem, i_local_node] = chord_tail\n            elastic_axis[i_elem, i_local_node] = ea_tail\n            control_surface[i_elem, i_local_node] = 0\n    we += n_elem_tail\n    wn += n_node_tail\n\n\n    with h5.File(route + '/' + case_name + '.aero.h5', 'a') as h5file:\n        airfoils_group = h5file.create_group('airfoils')\n        # add one airfoil\n        naca_airfoil_main = airfoils_group.create_dataset('0', data=np.column_stack(\n            generate_naca_camber(P=0, M=0)))\n        naca_airfoil_tail = airfoils_group.create_dataset('1', data=np.column_stack(\n            generate_naca_camber(P=0, M=0)))\n        naca_airfoil_fin = airfoils_group.create_dataset('2', data=np.column_stack(\n            generate_naca_camber(P=0, M=0)))\n\n        # chord\n        chord_input = h5file.create_dataset('chord', data=chord)\n        dim_attr = chord_input .attrs['units'] = 'm'\n\n        # twist\n        twist_input = h5file.create_dataset('twist', data=twist)\n        dim_attr = twist_input.attrs['units'] = 'rad'\n\n        # sweep\n        sweep_input = h5file.create_dataset('sweep', data=sweep)\n        dim_attr = sweep_input.attrs['units'] = 'rad'\n\n        # airfoil distribution\n        airfoil_distribution_input = h5file.create_dataset('airfoil_distribution', data=airfoil_distribution)\n\n        surface_distribution_input = h5file.create_dataset('surface_distribution', data=surface_distribution)\n        surface_m_input = h5file.create_dataset('surface_m', data=surface_m)\n        m_distribution_input = h5file.create_dataset('m_distribution', data=m_distribution.encode('ascii', 'ignore'))\n\n        aero_node_input = h5file.create_dataset('aero_node', data=aero_node)\n        elastic_axis_input = h5file.create_dataset('elastic_axis', data=elastic_axis)\n\n        control_surface_input = h5file.create_dataset('control_surface', data=control_surface)\n        control_surface_deflection_input = h5file.create_dataset('control_surface_deflection', data=control_surface_deflection)\n        control_surface_chord_input = h5file.create_dataset('control_surface_chord', data=control_surface_chord)\n        control_surface_hinge_coord_input = h5file.create_dataset('control_surface_hinge_coord', data=control_surface_hinge_coord)\n        control_surface_types_input = h5file.create_dataset('control_surface_type', data=control_surface_type)\n\n\ndef generate_naca_camber(M=0, P=0):\n    mm = M*1e-2\n    p = P*1e-1\n\n    def naca(x, mm, p):\n        if x < 1e-6:\n            return 0.0\n        elif x < p:\n            return mm/(p*p)*(2*p*x - x*x)\n        elif x > p and x < 1+1e-6:\n            return mm/((1-p)*(1-p))*(1 - 2*p + 2*p*x - x*x)\n\n    x_vec = np.linspace(0, 1, 1000)\n    y_vec = np.array([naca(x, mm, p) for x in x_vec])\n    return x_vec, y_vec\n\n\ndef generate_solver_file():\n    file_name = route + '/' + case_name + '.sharpy'\n    settings = dict()\n    settings['SHARPy'] = {'case': case_name,\n                          'route': route,\n                          'flow': flow,\n                          'write_screen': 'on',\n                          'write_log': 'on',\n                          'log_folder': route + '/output/',\n                          'log_file': case_name + '.log'}\n\n    settings['BeamLoader'] = {'unsteady': 'on',\n                              'orientation': algebra.euler2quat(np.array([roll,\n                                                                          alpha,\n                                                                          beta]))}\n\n    settings['AerogridLoader'] = {'unsteady': 'on',\n                                  'aligned_grid': 'on',\n                                  'mstar': int(20 / tstep_factor),\n                                  'freestream_dir': ['1', '0', '0'],\n                                  'wake_shape_generator': 'StraightWake',\n                                  'wake_shape_generator_input': {\n                                      'u_inf': u_inf,\n                                      'u_inf_direction': [1., 0., 0.],\n                                      'dt': dt,\n                                  },\n                                  'control_surface_deflection': ['', ''],\n                                  'control_surface_deflection_generator_settings':\n                                      {'0': {},\n                                       '1': {}}}\n\n    settings['NonLinearStatic'] = {'print_info': 'off',\n                                   'max_iterations': 150,\n                                   'num_load_steps': 1,\n                                   'delta_curved': 1e-1,\n                                   'min_delta': tolerance,\n                                   'gravity_on': gravity,\n                                   'gravity': 9.81}\n\n    settings['StaticUvlm'] = {'print_info': 'on',\n                              'horseshoe': 'off',\n                              'num_cores': num_cores,\n                              'n_rollup': 0,\n                              'rollup_dt': dt,\n                              'rollup_aic_refresh': 1,\n                              'rollup_tolerance': 1e-4,\n                              'velocity_field_generator': 'SteadyVelocityField',\n                              'velocity_field_input': {'u_inf': u_inf,\n                                                       'u_inf_direction': [1., 0, 0]},\n                              'rho': rho}\n\n    settings['StaticCoupled'] = {'print_info': 'on',\n                                 'structural_solver': 'NonLinearStatic',\n                                 'structural_solver_settings': settings['NonLinearStatic'],\n                                 'aero_solver': 'StaticUvlm',\n                                 'aero_solver_settings': settings['StaticUvlm'],\n                                 'max_iter': 100,\n                                 'n_load_steps': n_step,\n                                 'tolerance': fsi_tolerance,\n                                 'relaxation_factor': relaxation_factor}\n\n    settings['StaticTrim'] = {'solver': 'StaticCoupled',\n                              'solver_settings': settings['StaticCoupled'],\n                              'initial_alpha': alpha,\n                              'initial_deflection': cs_deflection,\n                              'initial_thrust': thrust}\n\n    settings['NonLinearDynamicCoupledStep'] = {'print_info': 'off',\n                                               'max_iterations': 950,\n                                               'delta_curved': 1e-1,\n                                               'min_delta': tolerance,\n                                               'newmark_damp': 5e-3,\n                                               'gravity_on': gravity,\n                                               'gravity': 9.81,\n                                               'num_steps': n_tstep,\n                                               'dt': dt,\n                                               'initial_velocity': u_inf}\n\n    settings['NonLinearDynamicPrescribedStep'] = {'print_info': 'off',\n                                           'max_iterations': 950,\n                                           'delta_curved': 1e-1,\n                                           'min_delta': tolerance,\n                                           'newmark_damp': 5e-3,\n                                           'gravity_on': gravity,\n                                           'gravity': 9.81,\n                                           'num_steps': n_tstep,\n                                           'dt': dt,\n                                           'initial_velocity': u_inf}\n\n    relative_motion = 'off'\n    settings['StepUvlm'] = {'print_info': 'off',\n                            'num_cores': num_cores,\n                            'convection_scheme': 2,\n                            'gamma_dot_filtering': 6,\n                            'velocity_field_generator': 'GustVelocityField',\n                            'velocity_field_input': {'u_inf': 0,\n                                                     'u_inf_direction': [1., 0, 0],\n                                                     'gust_shape': '1-cos',\n                                                     'gust_parameters': {\n                                                         'gust_length': gust_length,\n                                                         'gust_intensity': gust_intensity * u_inf},\n                                                     'offset': gust_offset,\n                                                     'relative_motion': relative_motion},\n                            'rho': rho,\n                            'n_time_steps': n_tstep,\n                            'dt': dt}\n\n    solver = 'NonLinearDynamicCoupledStep'\n    settings['DynamicCoupled'] = {'structural_solver': solver,\n                                  'structural_solver_settings': settings[solver],\n                                  'aero_solver': 'StepUvlm',\n                                  'aero_solver_settings': settings['StepUvlm'],\n                                  'fsi_substeps': 200,\n                                  'fsi_tolerance': fsi_tolerance,\n                                  'relaxation_factor': relaxation_factor,\n                                  'minimum_steps': 1,\n                                  'relaxation_steps': 150,\n                                  'final_relaxation_factor': 0.5,\n                                  'n_time_steps': n_tstep,\n                                  'dt': dt,\n                                  'include_unsteady_force_contribution': 'on',\n                                  'postprocessors': ['BeamLoads', 'BeamPlot', 'AerogridPlot'],\n                                  'postprocessors_settings': {'BeamLoads': {'csv_output': 'off'},\n                                                              'BeamPlot': {'include_rbm': 'on',\n                                                                           'include_applied_forces': 'on'},\n                                                              'AerogridPlot': {\n                                                                  'include_rbm': 'on',\n                                                                  'include_applied_forces': 'on',\n                                                                  'minus_m_star': 0},\n                                                              }}\n\n    settings['BeamLoads'] = {'csv_output': 'off'}\n\n    settings['BeamPlot'] = {'include_rbm': 'on',\n                            'include_applied_forces': 'on'}\n\n    settings['AerogridPlot'] = {'include_rbm': 'on',\n                                'include_forward_motion': 'off',\n                                'include_applied_forces': 'on',\n                                'minus_m_star': 0,\n                                'u_inf': u_inf,\n                                'dt': dt}\n\n\n\n\n    import configobj\n    config = configobj.ConfigObj()\n    config.filename = file_name\n    for k, v in settings.items():\n        config[k] = v\n    config.write()\n\n\n\nclean_test_files()\ngenerate_fem()\ngenerate_aero_file()\ngenerate_solver_file()\ngenerate_dyn_file()\n"
  },
  {
    "path": "sharpy/cases/coupled/simple_HALE/__init__.py",
    "content": ""
  },
  {
    "path": "sharpy/cases/coupled/simple_HALE/generate_hale.py",
    "content": "#! /usr/bin/env python3\nimport h5py as h5\nimport numpy as np\nimport os\nimport sharpy.utils.algebra as algebra\n\ncase_name = 'simple_HALE'\nroute = os.path.dirname(os.path.realpath(__file__)) + '/'\n\n# EXECUTION\nflow = ['BeamLoader',\n        'AerogridLoader',\n        # 'NonLinearStatic',\n        # 'StaticUvlm',\n        'StaticTrim',\n        # 'StaticCoupled',\n        'BeamLoads',\n        'AerogridPlot',\n        'BeamPlot',\n        'DynamicCoupled',\n        # 'Modal',\n        # 'LinearAssember',\n        # 'AsymptoticStability',\n        ]\n\n# if free_flight is False, the motion of the centre of the wing is prescribed.\nfree_flight = True\nif not free_flight:\n    case_name += '_prescribed'\n    amplitude = 0 * np.pi / 180\n    period = 3\n    case_name += '_amp_' + str(amplitude).replace('.', '') + '_period_' + str(period)\n\n# FLIGHT CONDITIONS\n# the simulation is set such that the aircraft flies at a u_inf velocity while\n# the air is calm.\nu_inf = 10\nrho = 1.225\n\n# trim sigma = 1.5\nalpha = 4.31 * np.pi / 180\nbeta = 0\nroll = 0\ngravity = 'on'\ncs_deflection = -2.08 * np.pi / 180\nrudder_static_deflection = 0.0\nrudder_step = 0.0 * np.pi / 180\nthrust = 6.16\nsigma = 1.5\nlambda_dihedral = 20 * np.pi / 180\n\n# gust settings\ngust_intensity = 0.20\ngust_length = 1 * u_inf\ngust_offset = 0.5 * u_inf\n\n# numerics\nn_step = 5\nstructural_relaxation_factor = 0.6\nrelaxation_factor = 0.35\ntolerance = 1e-6\nfsi_tolerance = 1e-4\n\nnum_cores = 2\n\n# MODEL GEOMETRY\n# beam\nspan_main = 16.0\nlambda_main = 0.25\nea_main = 0.3\n\nea = 1e7\nga = 1e5\ngj = 1e4\neiy = 2e4\neiz = 4e6\nm_bar_main = 0.75\nj_bar_main = 0.075\n\nlength_fuselage = 10\noffset_fuselage = 0\nsigma_fuselage = 10\nm_bar_fuselage = 0.2\nj_bar_fuselage = 0.08\n\nspan_tail = 2.5\nea_tail = 0.5\nfin_height = 2.5\nea_fin = 0.5\nsigma_tail = 100\nm_bar_tail = 0.3\nj_bar_tail = 0.08\n\n# lumped masses\nn_lumped_mass = 1\nlumped_mass_nodes = np.zeros((n_lumped_mass,), dtype=int)\nlumped_mass = np.zeros((n_lumped_mass,))\nlumped_mass[0] = 50\nlumped_mass_inertia = np.zeros((n_lumped_mass, 3, 3))\nlumped_mass_position = np.zeros((n_lumped_mass, 3))\n\n# aero\nchord_main = 1.0\nchord_tail = 0.5\nchord_fin = 0.5\n\n# DISCRETISATION\n# spatial discretisation\n# chordiwse panels\nm = 4\n# spanwise elements\nn_elem_multiplier = 2\nn_elem_main = int(4 * n_elem_multiplier)\nn_elem_tail = int(2 * n_elem_multiplier)\nn_elem_fin = int(2 * n_elem_multiplier)\nn_elem_fuselage = int(2 * n_elem_multiplier)\nn_surfaces = 5\n\n# temporal discretisation\nphysical_time = 30\ntstep_factor = 1.\ndt = 1.0 / m / u_inf * tstep_factor\nn_tstep = round(physical_time / dt)\n\n# END OF INPUT-----------------------------------------------------------------\n\n# beam processing\nn_node_elem = 3\nspan_main1 = (1.0 - lambda_main) * span_main\nspan_main2 = lambda_main * span_main\n\nn_elem_main1 = round(n_elem_main * (1 - lambda_main))\nn_elem_main2 = n_elem_main - n_elem_main1\n\n# total number of elements\nn_elem = 0\nn_elem += n_elem_main1 + n_elem_main1\nn_elem += n_elem_main2 + n_elem_main2\nn_elem += n_elem_fuselage\nn_elem += n_elem_fin\nn_elem += n_elem_tail + n_elem_tail\n\n# number of nodes per part\nn_node_main1 = n_elem_main1 * (n_node_elem - 1) + 1\nn_node_main2 = n_elem_main2 * (n_node_elem - 1) + 1\nn_node_main = n_node_main1 + n_node_main2 - 1\nn_node_fuselage = n_elem_fuselage * (n_node_elem - 1) + 1\nn_node_fin = n_elem_fin * (n_node_elem - 1) + 1\nn_node_tail = n_elem_tail * (n_node_elem - 1) + 1\n\n# total number of nodes\nn_node = 0\nn_node += n_node_main1 + n_node_main1 - 1\nn_node += n_node_main2 - 1 + n_node_main2 - 1\nn_node += n_node_fuselage - 1\nn_node += n_node_fin - 1\nn_node += n_node_tail - 1\nn_node += n_node_tail - 1\n\n# stiffness and mass matrices\nn_stiffness = 3\nbase_stiffness_main = sigma * np.diag([ea, ga, ga, gj, eiy, eiz])\nbase_stiffness_fuselage = base_stiffness_main.copy() * sigma_fuselage\nbase_stiffness_fuselage[4, 4] = base_stiffness_fuselage[5, 5]\nbase_stiffness_tail = base_stiffness_main.copy() * sigma_tail\nbase_stiffness_tail[4, 4] = base_stiffness_tail[5, 5]\n\nn_mass = 3\nbase_mass_main = np.diag([m_bar_main, m_bar_main, m_bar_main, j_bar_main, 0.5 * j_bar_main, 0.5 * j_bar_main])\nbase_mass_fuselage = np.diag([m_bar_fuselage,\n                              m_bar_fuselage,\n                              m_bar_fuselage,\n                              j_bar_fuselage,\n                              j_bar_fuselage * 0.5,\n                              j_bar_fuselage * 0.5])\nbase_mass_tail = np.diag([m_bar_tail,\n                          m_bar_tail,\n                          m_bar_tail,\n                          j_bar_tail,\n                          j_bar_tail * 0.5,\n                          j_bar_tail * 0.5])\n\n# PLACEHOLDERS\n# beam\nx = np.zeros((n_node,))\ny = np.zeros((n_node,))\nz = np.zeros((n_node,))\nbeam_number = np.zeros((n_elem,), dtype=int)\nframe_of_reference_delta = np.zeros((n_elem, n_node_elem, 3))\nstructural_twist = np.zeros((n_elem, 3))\nconn = np.zeros((n_elem, n_node_elem), dtype=int)\nstiffness = np.zeros((n_stiffness, 6, 6))\nelem_stiffness = np.zeros((n_elem,), dtype=int)\nmass = np.zeros((n_mass, 6, 6))\nelem_mass = np.zeros((n_elem,), dtype=int)\nboundary_conditions = np.zeros((n_node,), dtype=int)\napp_forces = np.zeros((n_node, 6))\n\n# aero\nairfoil_distribution = np.zeros((n_elem, n_node_elem), dtype=int)\nsurface_distribution = np.zeros((n_elem,), dtype=int) - 1\nsurface_m = np.zeros((n_surfaces,), dtype=int)\nm_distribution = 'uniform'\naero_node = np.zeros((n_node,), dtype=bool)\ntwist = np.zeros((n_elem, n_node_elem))\nsweep = np.zeros((n_elem, n_node_elem))\nchord = np.zeros((n_elem, n_node_elem,))\nelastic_axis = np.zeros((n_elem, n_node_elem,))\n\n\n# FUNCTIONS-------------------------------------------------------------\ndef clean_test_files():\n    fem_file_name = route + '/' + case_name + '.fem.h5'\n    if os.path.isfile(fem_file_name):\n        os.remove(fem_file_name)\n\n    dyn_file_name = route + '/' + case_name + '.dyn.h5'\n    if os.path.isfile(dyn_file_name):\n        os.remove(dyn_file_name)\n\n    aero_file_name = route + '/' + case_name + '.aero.h5'\n    if os.path.isfile(aero_file_name):\n        os.remove(aero_file_name)\n\n    solver_file_name = route + '/' + case_name + '.sharpy'\n    if os.path.isfile(solver_file_name):\n        os.remove(solver_file_name)\n\n    flightcon_file_name = route + '/' + case_name + '.flightcon.txt'\n    if os.path.isfile(flightcon_file_name):\n        os.remove(flightcon_file_name)\n\n\ndef generate_dyn_file():\n    global dt\n    global n_tstep\n    global route\n    global case_name\n    global num_elem\n    global num_node_elem\n    global num_node\n    global amplitude\n    global period\n    global free_flight\n\n    dynamic_forces_time = None\n    with_dynamic_forces = False\n    with_forced_vel = False\n    if not free_flight:\n        with_forced_vel = True\n\n    if with_dynamic_forces:\n        f1 = 100\n        dynamic_forces = np.zeros((num_node, 6))\n        app_node = [int(num_node_main - 1), int(num_node_main)]\n        dynamic_forces[app_node, 2] = f1\n        force_time = np.zeros((n_tstep,))\n        limit = round(0.05 / dt)\n        force_time[50:61] = 1\n\n        dynamic_forces_time = np.zeros((n_tstep, num_node, 6))\n        for it in range(n_tstep):\n            dynamic_forces_time[it, :, :] = force_time[it] * dynamic_forces\n\n    forced_for_vel = None\n    if with_forced_vel:\n        forced_for_vel = np.zeros((n_tstep, 6))\n        forced_for_acc = np.zeros((n_tstep, 6))\n        for it in range(n_tstep):\n            # if dt*it < period:\n            # forced_for_vel[it, 2] = 2*np.pi/period*amplitude*np.sin(2*np.pi*dt*it/period)\n            # forced_for_acc[it, 2] = (2*np.pi/period)**2*amplitude*np.cos(2*np.pi*dt*it/period)\n\n            forced_for_vel[it, 3] = 2 * np.pi / period * amplitude * np.sin(2 * np.pi * dt * it / period)\n            forced_for_acc[it, 3] = (2 * np.pi / period) ** 2 * amplitude * np.cos(2 * np.pi * dt * it / period)\n\n    if with_dynamic_forces or with_forced_vel:\n        with h5.File(route + '/' + case_name + '.dyn.h5', 'a') as h5file:\n            if with_dynamic_forces:\n                h5file.create_dataset(\n                    'dynamic_forces', data=dynamic_forces_time)\n            if with_forced_vel:\n                h5file.create_dataset(\n                    'for_vel', data=forced_for_vel)\n                h5file.create_dataset(\n                    'for_acc', data=forced_for_acc)\n            h5file.create_dataset(\n                'num_steps', data=n_tstep)\n\n\ndef generate_fem():\n    stiffness[0, ...] = base_stiffness_main\n    stiffness[1, ...] = base_stiffness_fuselage\n    stiffness[2, ...] = base_stiffness_tail\n\n    mass[0, ...] = base_mass_main\n    mass[1, ...] = base_mass_fuselage\n    mass[2, ...] = base_mass_tail\n\n    we = 0\n    wn = 0\n    # inner right wing\n    beam_number[we:we + n_elem_main1] = 0\n    y[wn:wn + n_node_main1] = np.linspace(0.0, span_main1, n_node_main1)\n\n    for ielem in range(n_elem_main1):\n        conn[we + ielem, :] = ((np.ones((3,)) * (we + ielem) * (n_node_elem - 1)) +\n                               [0, 2, 1])\n        for inode in range(n_node_elem):\n            frame_of_reference_delta[we + ielem, inode, :] = [-1.0, 0.0, 0.0]\n\n    elem_stiffness[we:we + n_elem_main1] = 0\n    elem_mass[we:we + n_elem_main1] = 0\n    boundary_conditions[0] = 1\n    # remember this is in B FoR\n    app_forces[0] = [0, thrust, 0, 0, 0, 0]\n    we += n_elem_main1\n    wn += n_node_main1\n\n    # outer right wing\n    beam_number[we:we + n_elem_main1] = 0\n    y[wn:wn + n_node_main2 - 1] = y[wn - 1] + np.linspace(0.0, np.cos(lambda_dihedral) * span_main2, n_node_main2)[1:]\n    z[wn:wn + n_node_main2 - 1] = z[wn - 1] + np.linspace(0.0, np.sin(lambda_dihedral) * span_main2, n_node_main2)[1:]\n    for ielem in range(n_elem_main2):\n        conn[we + ielem, :] = ((np.ones((3,)) * (we + ielem) * (n_node_elem - 1)) +\n                               [0, 2, 1])\n        for inode in range(n_node_elem):\n            frame_of_reference_delta[we + ielem, inode, :] = [-1.0, 0.0, 0.0]\n    elem_stiffness[we:we + n_elem_main2] = 0\n    elem_mass[we:we + n_elem_main2] = 0\n    boundary_conditions[wn + n_node_main2 - 2] = -1\n    we += n_elem_main2\n    wn += n_node_main2 - 1\n\n    # inner left wing\n    beam_number[we:we + n_elem_main1 - 1] = 1\n    y[wn:wn + n_node_main1 - 1] = np.linspace(0.0, -span_main1, n_node_main1)[1:]\n    for ielem in range(n_elem_main1):\n        conn[we + ielem, :] = ((np.ones((3,)) * (we + ielem) * (n_node_elem - 1)) +\n                               [0, 2, 1])\n        for inode in range(n_node_elem):\n            frame_of_reference_delta[we + ielem, inode, :] = [1.0, 0.0, 0.0]\n    conn[we, 0] = 0\n    elem_stiffness[we:we + n_elem_main1] = 0\n    elem_mass[we:we + n_elem_main1] = 0\n    we += n_elem_main1\n    wn += n_node_main1 - 1\n\n    # outer left wing\n    beam_number[we:we + n_elem_main2] = 1\n    y[wn:wn + n_node_main2 - 1] = y[wn - 1] + np.linspace(0.0, -np.cos(lambda_dihedral) * span_main2, n_node_main2)[1:]\n    z[wn:wn + n_node_main2 - 1] = z[wn - 1] + np.linspace(0.0, np.sin(lambda_dihedral) * span_main2, n_node_main2)[1:]\n    for ielem in range(n_elem_main2):\n        conn[we + ielem, :] = ((np.ones((3,)) * (we + ielem) * (n_node_elem - 1)) +\n                               [0, 2, 1])\n        for inode in range(n_node_elem):\n            frame_of_reference_delta[we + ielem, inode, :] = [1.0, 0.0, 0.0]\n    elem_stiffness[we:we + n_elem_main2] = 0\n    elem_mass[we:we + n_elem_main2] = 0\n    boundary_conditions[wn + n_node_main2 - 2] = -1\n    we += n_elem_main2\n    wn += n_node_main2 - 1\n\n    # fuselage\n    beam_number[we:we + n_elem_fuselage] = 2\n    x[wn:wn + n_node_fuselage - 1] = np.linspace(0.0, length_fuselage, n_node_fuselage)[1:]\n    z[wn:wn + n_node_fuselage - 1] = np.linspace(0.0, offset_fuselage, n_node_fuselage)[1:]\n    for ielem in range(n_elem_fuselage):\n        conn[we + ielem, :] = ((np.ones((3,)) * (we + ielem) * (n_node_elem - 1)) +\n                               [0, 2, 1])\n        for inode in range(n_node_elem):\n            frame_of_reference_delta[we + ielem, inode, :] = [0.0, 1.0, 0.0]\n    conn[we, 0] = 0\n    elem_stiffness[we:we + n_elem_fuselage] = 1\n    elem_mass[we:we + n_elem_fuselage] = 1\n    we += n_elem_fuselage\n    wn += n_node_fuselage - 1\n    global end_of_fuselage_node\n    end_of_fuselage_node = wn - 1\n\n    # fin\n    beam_number[we:we + n_elem_fin] = 3\n    x[wn:wn + n_node_fin - 1] = x[end_of_fuselage_node]\n    z[wn:wn + n_node_fin - 1] = z[end_of_fuselage_node] + np.linspace(0.0, fin_height, n_node_fin)[1:]\n    for ielem in range(n_elem_fin):\n        conn[we + ielem, :] = ((np.ones((3,)) * (we + ielem) * (n_node_elem - 1)) +\n                               [0, 2, 1])\n        for inode in range(n_node_elem):\n            frame_of_reference_delta[we + ielem, inode, :] = [-1.0, 0.0, 0.0]\n    conn[we, 0] = end_of_fuselage_node\n    elem_stiffness[we:we + n_elem_fin] = 2\n    elem_mass[we:we + n_elem_fin] = 2\n    we += n_elem_fin\n    wn += n_node_fin - 1\n    end_of_fin_node = wn - 1\n\n    # right tail\n    beam_number[we:we + n_elem_tail] = 4\n    x[wn:wn + n_node_tail - 1] = x[end_of_fin_node]\n    y[wn:wn + n_node_tail - 1] = np.linspace(0.0, span_tail, n_node_tail)[1:]\n    z[wn:wn + n_node_tail - 1] = z[end_of_fin_node]\n    for ielem in range(n_elem_tail):\n        conn[we + ielem, :] = ((np.ones((3,)) * (we + ielem) * (n_node_elem - 1)) +\n                               [0, 2, 1])\n        for inode in range(n_node_elem):\n            frame_of_reference_delta[we + ielem, inode, :] = [-1.0, 0.0, 0.0]\n    conn[we, 0] = end_of_fin_node\n    elem_stiffness[we:we + n_elem_tail] = 2\n    elem_mass[we:we + n_elem_tail] = 2\n    boundary_conditions[wn + n_node_tail - 2] = -1\n    we += n_elem_tail\n    wn += n_node_tail - 1\n\n    # left tail\n    beam_number[we:we + n_elem_tail] = 5\n    x[wn:wn + n_node_tail - 1] = x[end_of_fin_node]\n    y[wn:wn + n_node_tail - 1] = np.linspace(0.0, -span_tail, n_node_tail)[1:]\n    z[wn:wn + n_node_tail - 1] = z[end_of_fin_node]\n    for ielem in range(n_elem_tail):\n        conn[we + ielem, :] = ((np.ones((3,)) * (we + ielem) * (n_node_elem - 1)) +\n                               [0, 2, 1])\n        for inode in range(n_node_elem):\n            frame_of_reference_delta[we + ielem, inode, :] = [1.0, 0.0, 0.0]\n    conn[we, 0] = end_of_fin_node\n    elem_stiffness[we:we + n_elem_tail] = 2\n    elem_mass[we:we + n_elem_tail] = 2\n    boundary_conditions[wn + n_node_tail - 2] = -1\n    we += n_elem_tail\n    wn += n_node_tail - 1\n\n    with h5.File(route + '/' + case_name + '.fem.h5', 'a') as h5file:\n        coordinates = h5file.create_dataset('coordinates', data=np.column_stack((x, y, z)))\n        conectivities = h5file.create_dataset('connectivities', data=conn)\n        num_nodes_elem_handle = h5file.create_dataset(\n            'num_node_elem', data=n_node_elem)\n        num_nodes_handle = h5file.create_dataset(\n            'num_node', data=n_node)\n        num_elem_handle = h5file.create_dataset(\n            'num_elem', data=n_elem)\n        stiffness_db_handle = h5file.create_dataset(\n            'stiffness_db', data=stiffness)\n        stiffness_handle = h5file.create_dataset(\n            'elem_stiffness', data=elem_stiffness)\n        mass_db_handle = h5file.create_dataset(\n            'mass_db', data=mass)\n        mass_handle = h5file.create_dataset(\n            'elem_mass', data=elem_mass)\n        frame_of_reference_delta_handle = h5file.create_dataset(\n            'frame_of_reference_delta', data=frame_of_reference_delta)\n        structural_twist_handle = h5file.create_dataset(\n            'structural_twist', data=structural_twist)\n        bocos_handle = h5file.create_dataset(\n            'boundary_conditions', data=boundary_conditions)\n        beam_handle = h5file.create_dataset(\n            'beam_number', data=beam_number)\n        app_forces_handle = h5file.create_dataset(\n            'app_forces', data=app_forces)\n        lumped_mass_nodes_handle = h5file.create_dataset(\n            'lumped_mass_nodes', data=lumped_mass_nodes)\n        lumped_mass_handle = h5file.create_dataset(\n            'lumped_mass', data=lumped_mass)\n        lumped_mass_inertia_handle = h5file.create_dataset(\n            'lumped_mass_inertia', data=lumped_mass_inertia)\n        lumped_mass_position_handle = h5file.create_dataset(\n            'lumped_mass_position', data=lumped_mass_position)\n\n\ndef generate_aero_file():\n    global x, y, z\n    # control surfaces\n    n_control_surfaces = 2\n    control_surface = np.zeros((n_elem, n_node_elem), dtype=int) - 1\n    control_surface_type = np.zeros((n_control_surfaces,), dtype=int)\n    control_surface_deflection = np.zeros((n_control_surfaces,))\n    control_surface_chord = np.zeros((n_control_surfaces,), dtype=int)\n    control_surface_hinge_coord = np.zeros((n_control_surfaces,), dtype=float)\n\n    # control surface type 0 = static\n    # control surface type 1 = dynamic\n    control_surface_type[0] = 0\n    control_surface_deflection[0] = cs_deflection\n    control_surface_chord[0] = m\n    control_surface_hinge_coord[0] = -0.25  # nondimensional wrt elastic axis (+ towards the trailing edge)\n\n    control_surface_type[1] = 0\n    control_surface_deflection[1] = rudder_static_deflection\n    control_surface_chord[1] = 1\n    control_surface_hinge_coord[1] = -0.  # nondimensional wrt elastic axis (+ towards the trailing edge)\n\n    we = 0\n    wn = 0\n    # right wing (surface 0, beam 0)\n    i_surf = 0\n    airfoil_distribution[we:we + n_elem_main, :] = 0\n    surface_distribution[we:we + n_elem_main] = i_surf\n    surface_m[i_surf] = m\n    aero_node[wn:wn + n_node_main] = True\n    temp_chord = np.linspace(chord_main, chord_main, n_node_main)\n    temp_sweep = np.linspace(0.0, 0 * np.pi / 180, n_node_main)\n    node_counter = 0\n    for i_elem in range(we, we + n_elem_main):\n        for i_local_node in range(n_node_elem):\n            if not i_local_node == 0:\n                node_counter += 1\n            chord[i_elem, i_local_node] = temp_chord[node_counter]\n            elastic_axis[i_elem, i_local_node] = ea_main\n            sweep[i_elem, i_local_node] = temp_sweep[node_counter]\n\n    we += n_elem_main\n    wn += n_node_main\n\n    # left wing (surface 1, beam 1)\n    i_surf = 1\n    airfoil_distribution[we:we + n_elem_main, :] = 0\n    # airfoil_distribution[wn:wn + n_node_main - 1] = 0\n    surface_distribution[we:we + n_elem_main] = i_surf\n    surface_m[i_surf] = m\n    aero_node[wn:wn + n_node_main - 1] = True\n    # chord[wn:wn + num_node_main - 1] = np.linspace(main_chord, main_tip_chord, num_node_main)[1:]\n    # chord[wn:wn + num_node_main - 1] = main_chord\n    # elastic_axis[wn:wn + num_node_main - 1] = main_ea\n    temp_chord = np.linspace(chord_main, chord_main, n_node_main)\n    node_counter = 0\n    for i_elem in range(we, we + n_elem_main):\n        for i_local_node in range(n_node_elem):\n            if not i_local_node == 0:\n                node_counter += 1\n            chord[i_elem, i_local_node] = temp_chord[node_counter]\n            elastic_axis[i_elem, i_local_node] = ea_main\n            sweep[i_elem, i_local_node] = -temp_sweep[node_counter]\n\n    we += n_elem_main\n    wn += n_node_main - 1\n\n    we += n_elem_fuselage\n    wn += n_node_fuselage - 1 - 1\n    #\n    # # fin (surface 2, beam 3)\n    i_surf = 2\n    airfoil_distribution[we:we + n_elem_fin, :] = 1\n    # airfoil_distribution[wn:wn + n_node_fin] = 0\n    surface_distribution[we:we + n_elem_fin] = i_surf\n    surface_m[i_surf] = m\n    aero_node[wn:wn + n_node_fin] = True\n    # chord[wn:wn + num_node_fin] = fin_chord\n    for i_elem in range(we, we + n_elem_fin):\n        for i_local_node in range(n_node_elem):\n            chord[i_elem, i_local_node] = chord_fin\n            elastic_axis[i_elem, i_local_node] = ea_fin\n            control_surface[i_elem, i_local_node] = 1\n    # twist[end_of_fuselage_node] = 0\n    # twist[wn:] = 0\n    # elastic_axis[wn:wn + num_node_main] = fin_ea\n    we += n_elem_fin\n    wn += n_node_fin - 1\n    #\n    # # # right tail (surface 3, beam 4)\n    i_surf = 3\n    airfoil_distribution[we:we + n_elem_tail, :] = 2\n    # airfoil_distribution[wn:wn + n_node_tail] = 0\n    surface_distribution[we:we + n_elem_tail] = i_surf\n    surface_m[i_surf] = m\n    # XXX not very elegant\n    aero_node[wn:] = True\n    # chord[wn:wn + num_node_tail] = tail_chord\n    # elastic_axis[wn:wn + num_node_main] = tail_ea\n    for i_elem in range(we, we + n_elem_tail):\n        for i_local_node in range(n_node_elem):\n            twist[i_elem, i_local_node] = -0\n    for i_elem in range(we, we + n_elem_tail):\n        for i_local_node in range(n_node_elem):\n            chord[i_elem, i_local_node] = chord_tail\n            elastic_axis[i_elem, i_local_node] = ea_tail\n            control_surface[i_elem, i_local_node] = 0\n\n    we += n_elem_tail\n    wn += n_node_tail\n    #\n    # # left tail (surface 4, beam 5)\n    i_surf = 4\n    airfoil_distribution[we:we + n_elem_tail, :] = 2\n    # airfoil_distribution[wn:wn + n_node_tail - 1] = 0\n    surface_distribution[we:we + n_elem_tail] = i_surf\n    surface_m[i_surf] = m\n    aero_node[wn:wn + n_node_tail - 1] = True\n    # chord[wn:wn + num_node_tail] = tail_chord\n    # elastic_axis[wn:wn + num_node_main] = tail_ea\n    # twist[we:we + num_elem_tail] = -tail_twist\n    for i_elem in range(we, we + n_elem_tail):\n        for i_local_node in range(n_node_elem):\n            twist[i_elem, i_local_node] = -0\n    for i_elem in range(we, we + n_elem_tail):\n        for i_local_node in range(n_node_elem):\n            chord[i_elem, i_local_node] = chord_tail\n            elastic_axis[i_elem, i_local_node] = ea_tail\n            control_surface[i_elem, i_local_node] = 0\n    we += n_elem_tail\n    wn += n_node_tail\n\n    with h5.File(route + '/' + case_name + '.aero.h5', 'a') as h5file:\n        airfoils_group = h5file.create_group('airfoils')\n        # add one airfoil\n        naca_airfoil_main = airfoils_group.create_dataset('0', data=np.column_stack(\n            generate_naca_camber(P=0, M=0)))\n        naca_airfoil_tail = airfoils_group.create_dataset('1', data=np.column_stack(\n            generate_naca_camber(P=0, M=0)))\n        naca_airfoil_fin = airfoils_group.create_dataset('2', data=np.column_stack(\n            generate_naca_camber(P=0, M=0)))\n\n        # chord\n        chord_input = h5file.create_dataset('chord', data=chord)\n        dim_attr = chord_input.attrs['units'] = 'm'\n\n        # twist\n        twist_input = h5file.create_dataset('twist', data=twist)\n        dim_attr = twist_input.attrs['units'] = 'rad'\n\n        # sweep\n        sweep_input = h5file.create_dataset('sweep', data=sweep)\n        dim_attr = sweep_input.attrs['units'] = 'rad'\n\n        # airfoil distribution\n        airfoil_distribution_input = h5file.create_dataset('airfoil_distribution', data=airfoil_distribution)\n\n        surface_distribution_input = h5file.create_dataset('surface_distribution', data=surface_distribution)\n        surface_m_input = h5file.create_dataset('surface_m', data=surface_m)\n        m_distribution_input = h5file.create_dataset('m_distribution', data=m_distribution.encode('ascii', 'ignore'))\n\n        aero_node_input = h5file.create_dataset('aero_node', data=aero_node)\n        elastic_axis_input = h5file.create_dataset('elastic_axis', data=elastic_axis)\n\n        control_surface_input = h5file.create_dataset('control_surface', data=control_surface)\n        control_surface_deflection_input = h5file.create_dataset('control_surface_deflection',\n                                                                 data=control_surface_deflection)\n        control_surface_chord_input = h5file.create_dataset('control_surface_chord', data=control_surface_chord)\n        control_surface_hinge_coord_input = h5file.create_dataset('control_surface_hinge_coord',\n                                                                  data=control_surface_hinge_coord)\n        control_surface_types_input = h5file.create_dataset('control_surface_type', data=control_surface_type)\n\n\ndef generate_naca_camber(M=0, P=0):\n    mm = M * 1e-2\n    p = P * 1e-1\n\n    def naca(x, mm, p):\n        if x < 1e-6:\n            return 0.0\n        elif x < p:\n            return mm / (p * p) * (2 * p * x - x * x)\n        elif x > p and x < 1 + 1e-6:\n            return mm / ((1 - p) * (1 - p)) * (1 - 2 * p + 2 * p * x - x * x)\n\n    x_vec = np.linspace(0, 1, 1000)\n    y_vec = np.array([naca(x, mm, p) for x in x_vec])\n    return x_vec, y_vec\n\n\ndef generate_solver_file():\n    file_name = route + '/' + case_name + '.sharpy'\n    settings = dict()\n    settings['SHARPy'] = {'case': case_name,\n                          'route': route,\n                          'flow': flow,\n                          'write_screen': 'on',\n                          'write_log': 'on',\n                          'log_folder': route + '/output/',\n                          'log_file': case_name + '.log'}\n\n    settings['BeamLoader'] = {'unsteady': 'on',\n                              'orientation': algebra.euler2quat(np.array([roll,\n                                                                          alpha,\n                                                                          beta]))}\n    settings['AerogridLoader'] = {'unsteady': 'on',\n                                  'aligned_grid': 'on',\n                                  'mstar': int(20 / tstep_factor),\n                                  'freestream_dir': ['1', '0', '0'],\n                                  'wake_shape_generator': 'StraightWake',\n                                  'wake_shape_generator_input': {'u_inf': u_inf,\n                                                                 'u_inf_direction': ['1', '0', '0'],\n                                                                 'dt': dt}}\n\n    settings['NonLinearStatic'] = {'print_info': 'off',\n                                   'max_iterations': 150,\n                                   'num_load_steps': 1,\n                                   'delta_curved': 1e-1,\n                                   'min_delta': tolerance,\n                                   'gravity_on': gravity,\n                                   'gravity': 9.81}\n\n    settings['StaticUvlm'] = {'print_info': 'on',\n                              'horseshoe': 'off',\n                              'num_cores': num_cores,\n                              'n_rollup': 0,\n                              'rollup_dt': dt,\n                              'rollup_aic_refresh': 1,\n                              'rollup_tolerance': 1e-4,\n                              'velocity_field_generator': 'SteadyVelocityField',\n                              'velocity_field_input': {'u_inf': u_inf,\n                                                       'u_inf_direction': [1., 0, 0]},\n                              'rho': rho}\n\n    settings['StaticCoupled'] = {'print_info': 'off',\n                                 'structural_solver': 'NonLinearStatic',\n                                 'structural_solver_settings': settings['NonLinearStatic'],\n                                 'aero_solver': 'StaticUvlm',\n                                 'aero_solver_settings': settings['StaticUvlm'],\n                                 'max_iter': 100,\n                                 'n_load_steps': n_step,\n                                 'tolerance': fsi_tolerance,\n                                 'relaxation_factor': structural_relaxation_factor}\n\n    settings['StaticTrim'] = {'solver': 'StaticCoupled',\n                              'solver_settings': settings['StaticCoupled'],\n                              'initial_alpha': alpha,\n                              'initial_deflection': cs_deflection,\n                              'initial_thrust': thrust}\n\n    settings['NonLinearDynamicCoupledStep'] = {'print_info': 'off',\n                                               'max_iterations': 950,\n                                               'delta_curved': 1e-1,\n                                               'min_delta': tolerance,\n                                               'newmark_damp': 5e-3,\n                                               'gravity_on': gravity,\n                                               'gravity': 9.81,\n                                               'num_steps': n_tstep,\n                                               'dt': dt,\n                                               'initial_velocity': u_inf}\n\n    settings['NonLinearDynamicPrescribedStep'] = {'print_info': 'off',\n                                                  'max_iterations': 950,\n                                                  'delta_curved': 1e-1,\n                                                  'min_delta': tolerance,\n                                                  'newmark_damp': 5e-3,\n                                                  'gravity_on': gravity,\n                                                  'gravity': 9.81,\n                                                  'num_steps': n_tstep,\n                                                  'dt': dt,\n                                                  'initial_velocity': u_inf * int(free_flight)}\n\n    relative_motion = 'off'\n    if not free_flight:\n        relative_motion = 'on'\n    settings['StepUvlm'] = {'print_info': 'off',\n                            'num_cores': num_cores,\n                            'convection_scheme': 2,\n                            'gamma_dot_filtering': 6,\n                            'velocity_field_generator': 'GustVelocityField',\n                            'velocity_field_input': {'u_inf': int(not free_flight) * u_inf,\n                                                     'u_inf_direction': [1., 0, 0],\n                                                     'gust_shape': '1-cos',\n                                                     'gust_parameters': {'gust_length': gust_length,\n                                                                         'gust_intensity': gust_intensity * u_inf},\n                                                     'offset': gust_offset,\n                                                     'relative_motion': relative_motion},\n                            'rho': rho,\n                            'n_time_steps': n_tstep,\n                            'dt': dt}\n\n    if free_flight:\n        solver = 'NonLinearDynamicCoupledStep'\n    else:\n        solver = 'NonLinearDynamicPrescribedStep'\n    settings['DynamicCoupled'] = {'structural_solver': solver,\n                                  'structural_solver_settings': settings[solver],\n                                  'aero_solver': 'StepUvlm',\n                                  'aero_solver_settings': settings['StepUvlm'],\n                                  'fsi_substeps': 200,\n                                  'fsi_tolerance': fsi_tolerance,\n                                  'relaxation_factor': relaxation_factor,\n                                  'minimum_steps': 1,\n                                  'relaxation_steps': 150,\n                                  'final_relaxation_factor': 0.5,\n                                  'n_time_steps': n_tstep,\n                                  'dt': dt,\n                                  'include_unsteady_force_contribution': 'on',\n                                  'postprocessors': ['BeamLoads', 'BeamPlot', 'AerogridPlot'],\n                                  'postprocessors_settings': {'BeamLoads': {'csv_output': 'off'},\n                                                              'BeamPlot': {'include_rbm': 'on',\n                                                                           'include_applied_forces': 'on'},\n                                                              'AerogridPlot': {\n                                                                  'include_rbm': 'on',\n                                                                  'include_applied_forces': 'on',\n                                                                  'minus_m_star': 0},\n                                                              }}\n\n    settings['BeamLoads'] = {'csv_output': 'off'}\n\n    settings['BeamPlot'] = {'include_rbm': 'on',\n                            'include_applied_forces': 'on'}\n\n\n    settings['AerogridPlot'] = {'include_rbm': 'on',\n                                'include_forward_motion': 'off',\n                                'include_applied_forces': 'on',\n                                'minus_m_star': 0,\n                                'u_inf': u_inf,\n                                'dt': dt}\n\n    settings['Modal'] = {'print_info': True,\n                         'use_undamped_modes': True,\n                         'NumLambda': 30,\n                         'rigid_body_modes': True,\n                         'write_modes_vtk': 'on',\n                         'print_matrices': 'on',\n                         'continuous_eigenvalues': 'off',\n                         'dt': dt,\n                         'plot_eigenvalues': False}\n\n    settings['LinearAssembler'] = {'linear_system': 'LinearAeroelastic',\n                                   'linear_system_settings': {\n                                       'beam_settings': {'modal_projection': False,\n                                                         'inout_coords': 'nodes',\n                                                         'discrete_time': True,\n                                                         'newmark_damp': 0.05,\n                                                         'discr_method': 'newmark',\n                                                         'dt': dt,\n                                                         'proj_modes': 'undamped',\n                                                         'use_euler': 'off',\n                                                         'num_modes': 40,\n                                                         'print_info': 'on',\n                                                         'gravity': 'on',\n                                                         'remove_dofs': []},\n                                       'aero_settings': {'dt': dt,\n                                                         'integr_order': 2,\n                                                         'density': rho,\n                                                         'remove_predictor': False,\n                                                         'use_sparse': True,\n                                                         'remove_inputs': ['u_gust']}\n                                   }}\n\n    settings['AsymptoticStability'] = {'print_info': 'on',\n                                       'modes_to_plot': [],\n                                       'display_root_locus': 'off',\n                                       'frequency_cutoff': 0,\n                                       'export_eigenvalues': 'off',\n                                       'num_evals': 40}\n\n    import configobj\n    config = configobj.ConfigObj()\n    config.filename = file_name\n    for k, v in settings.items():\n        config[k] = v\n    config.write()\n\n\nclean_test_files()\ngenerate_fem()\ngenerate_aero_file()\ngenerate_solver_file()\ngenerate_dyn_file()\n"
  },
  {
    "path": "sharpy/cases/hangar/__init__.py",
    "content": ""
  },
  {
    "path": "sharpy/cases/hangar/horten_wing.py",
    "content": "\"\"\"\nHorten Wing Class Generator\nN Goizueta Nov 18\n\"\"\"\n\nimport numpy as np\nimport os\nimport h5py as h5\nimport sharpy.utils.geo_utils as geo_utils\nimport sharpy.utils.algebra as algebra\nimport configobj\nimport scipy.linalg as sclalg\n\n\nclass HortenWing:\n    \"\"\"\n    Horten Wing Class Generator\n\n    A ``HortenWing`` class contains the basic geometry and properties of a simplified Horten wing, as\n    described by Richards (2016)\n\n    This class allows the user to quickly obtain SHARPy cases for the purposes of parametric analyses.\n\n    \"\"\"\n\n    def __init__(self,\n                 M,\n                 N,\n                 Mstarfactor,\n                 u_inf,\n                 rho=1.225,\n                 alpha_deg=0.,\n                 beta_deg=0.,\n                 roll_deg=0.,\n                 cs_deflection_deg=0.,\n                 thrust=5.,\n                 physical_time=10,\n                 case_name_format=2,\n                 case_remarks=None,\n                 case_route='./cases/',\n                 case_name='horten'):\n\n        # Discretisation\n        self.M = M\n        self.N = N\n        self.Mstarfactor = Mstarfactor\n\n        self.n_node_elem = 3\n        self.n_elem_wing = N\n        self.n_elem_fuselage = 1\n        self.n_surfaces = 4\n\n        # Case admin\n        if case_name_format == 0:\n            self.case_name = case_name + '_u_inf%.4d_a%.4d' % (int(u_inf*100), int(alpha_deg * 100))\n        elif case_name_format == 1:\n            self.case_name = case_name + '_u_inf%.4d' % int(u_inf*100)\n        elif case_name_format == 2:\n            self.case_name = case_name\n        else:\n            self.case_name = case_name + '_u_inf%.4d_%s' % (int(u_inf*100), case_remarks)\n\n        self.case_route = os.path.abspath(case_route + self.case_name + '/')\n\n        self.config = None\n\n        # Flight conditions\n        self.u_inf = u_inf\n        self.rho = rho\n        self.alpha = alpha_deg * np.pi / 180\n        self.roll = roll_deg * np.pi / 180\n        self.beta = beta_deg * np.pi / 180\n        self.cs_deflection = cs_deflection_deg * np.pi / 180\n        self.thrust = thrust\n\n        # Compute number of nodes\n        n_node = 0\n        self.n_node_wing = self.n_elem_wing * (self.n_node_elem - 1)\n        self.n_node_fuselage = self.n_elem_fuselage * self.n_node_elem\n        n_node += 2 * self.n_node_fuselage - 1 + 2 * self.n_node_wing\n        self.n_node = n_node\n\n        # Compute number of elements\n        self.n_elem = 2 * (self.n_elem_wing + self.n_elem_fuselage)\n\n        # Wing geometry\n        self.span = 20.0  # [m]\n        self.sweep_LE = 20 * np.pi / 180  # [rad] Leading Edge Sweep\n        # self.c_root = 1.0  # [m] Root chord - Richards\n        self.c_root = 1.5819  # [m] Root chord - Mardanpour 2014\n        self.taper_ratio = 0.17 # Mardanpour 2014\n        # self.taper_ratio = 0.25 # Richards\n        self.thrust_nodes = [self.n_node_fuselage - 1,\n                             self.n_node_fuselage + self.n_node_wing + 1]\n\n        self.loc_cg = 0.45  # CG position wrt to LE (from sectional analysis)\n        # EA is the reference in NATASHA - defined with respect to the midchord. SHARPy is wrt to LE and as a pct of\n        # local chord\n        self.main_ea_root = 0.5 + 0.15*0.0254 / self.c_root\n        self.main_ea_tip = 0.5 + 0.21*0.0254 / (self.c_root*self.taper_ratio)\n\n        # FUSELAGE GEOMETRY\n        # self.fuselage_width = 1.\n        self.fuselage_width = 0.8248\n        self.c_fuselage = 84*0.0254\n\n        # WASH OUT\n        self.washout_root = 0*np.pi/180\n        self.washout_tip = -2 * np.pi / 180\n\n        # Horseshoe wake\n        self.horseshoe = False\n        self.wake_type = 2\n        self.dt_factor = 1\n        self.dt = 1 / self.M / self.u_inf * self.dt_factor\n\n        # Dynamics\n        self.physical_time = physical_time\n        self.n_tstep = int(physical_time/self.dt)\n        self.gust_intensity = 0.05\n\n        # Numerics\n        self.tolerance = 1e-12\n        self.fsi_tolerance = 1e-10\n        self.relaxation_factor = 0.2\n\n        # H5 Variables initialisation as class attributes\n        # coordinates\n        self.x = np.zeros((n_node,))\n        self.y = np.zeros((n_node,))\n        self.z = np.zeros((n_node,))\n        # beam number\n        self.beam_number = np.zeros(self.n_elem, dtype=int)\n        # frame of reference delta\n        self.frame_of_reference_delta = np.zeros((self.n_elem, self.n_node_elem, 3))\n        # connectivity of beams\n        self.connectivities = np.zeros((self.n_elem, self.n_node_elem), dtype=int)\n        # stiffness\n        self.n_stiffness = self.n_elem_wing + self.n_elem_fuselage\n        self.base_stiffness = np.zeros((self.n_stiffness, 6, 6))\n        self.elem_stiffness = np.zeros((self.n_elem,), dtype=int)\n        # mass\n        self.n_mass = self.n_elem_wing * 2 // 2\n        self.base_mass = np.zeros((self.n_mass, 6, 6))\n        self.elem_mass = np.zeros(self.n_elem, dtype=int)\n        # boundary conditions\n        self.boundary_conditions = np.zeros((n_node,), dtype=int)\n        # applied forces\n        self.app_forces = np.zeros((n_node, 6))\n        self.n_lumped_mass = 3\n\n        self.lumped_mass_nodes = np.zeros((self.n_lumped_mass), dtype=int)\n        self.lumped_mass = np.zeros(self.n_lumped_mass)\n        self.lumped_mass_inertia = np.zeros((self.n_lumped_mass, 3, 3))\n        self.lumped_mass_position = np.zeros((self.n_lumped_mass, 3))\n\n        # Aerodynamic properties\n        # H5 AERO FILE VARIABLES INITIALISATION\n        # airfoil distribution\n        self.airfoil_distribution = np.zeros((self.n_elem, self.n_node_elem), dtype=int)\n        # surface distribution\n        self.surface_distribution = np.zeros((self.n_elem,), dtype=int) - 1\n        self.surface_m = np.zeros((self.n_surfaces,), dtype=int)\n        self.m_distribution = 'uniform'\n        # aerodynamic nodes boolean\n        self.aero_nodes = np.zeros((self.n_node,), dtype=bool)\n        # aero twist\n        self.twist = np.zeros((self.n_elem, self.n_node_elem))\n        # chord\n        self.chord = np.zeros((self.n_elem, self.n_node_elem))\n        # elastic axis\n        self.elastic_axis = np.zeros((self.n_elem, self.n_node_elem))\n\n        # control surfaces attributes initialisation\n        self.n_control_surfaces = 1\n        self.control_surface = np.zeros((self.n_elem, self.n_node_elem), dtype=int) - 1\n        self.control_surface_type = np.zeros((self.n_control_surfaces,), dtype=int)\n        self.control_surface_deflection = np.zeros((self.n_control_surfaces,))\n        self.control_surface_chord = np.zeros((self.n_control_surfaces,), dtype=int)\n        self.control_surface_hinge_coord = np.zeros((self.n_control_surfaces,), dtype=float)\n\n        self.settings = dict()\n\n    def initialise(self):\n\n        if not os.path.exists(self.case_route):\n            os.makedirs(self.case_route)\n\n        # Compute number of nodes\n        n_node = 0\n        self.n_node_wing = self.n_elem_wing * (self.n_node_elem - 1)\n        self.n_node_fuselage = self.n_elem_fuselage * self.n_node_elem\n        n_node += 2 * self.n_node_fuselage - 1 + 2 * self.n_node_wing\n        self.n_node = n_node\n\n        # Compute number of elements\n        self.n_elem = 2 * (self.n_elem_wing + self.n_elem_fuselage)\n\n        self.dt = 1 / self.M / self.u_inf * self.dt_factor\n\n        # H5 Variables initialisation as class attributes\n        # coordinates\n        self.x = np.zeros((n_node,))\n        self.y = np.zeros((n_node,))\n        self.z = np.zeros((n_node,))\n        # beam number\n        self.beam_number = np.zeros(self.n_elem, dtype=int)\n        # frame of reference delta\n        self.frame_of_reference_delta = np.zeros((self.n_elem, self.n_node_elem, 3))\n        # connectivity of beams\n        self.connectivities = np.zeros((self.n_elem, self.n_node_elem), dtype=int)\n        # stiffness\n        self.n_stiffness = self.n_elem_wing + self.n_elem_fuselage\n        self.base_stiffness = np.zeros((self.n_stiffness, 6, 6))\n        self.elem_stiffness = np.zeros((self.n_elem,), dtype=int)\n        # mass\n        self.base_mass = np.zeros((self.n_mass, 6, 6))\n        self.elem_mass = np.zeros(self.n_elem, dtype=int)\n        # boundary conditions\n        self.boundary_conditions = np.zeros((n_node,), dtype=int)\n        # applied forces\n        self.app_forces = np.zeros((n_node, 6))\n        self.n_lumped_mass = 3\n\n        self.lumped_mass_nodes = np.zeros((self.n_lumped_mass), dtype=int)\n        self.lumped_mass = np.zeros(self.n_lumped_mass)\n        self.lumped_mass_inertia = np.zeros((self.n_lumped_mass, 3, 3))\n        self.lumped_mass_position = np.zeros((self.n_lumped_mass, 3))\n\n        # Aerodynamic properties\n        # H5 AERO FILE VARIABLES INITIALISATION\n        # airfoil distribution\n        self.airfoil_distribution = np.zeros((self.n_elem, self.n_node_elem), dtype=int)\n        # surface distribution\n        self.surface_distribution = np.zeros((self.n_elem,), dtype=int) - 1\n        self.surface_m = np.zeros((self.n_surfaces,), dtype=int)\n        self.m_distribution = 'uniform'\n        # aerodynamic nodes boolean\n        self.aero_nodes = np.zeros((self.n_node,), dtype=bool)\n        # aero twist\n        self.twist = np.zeros((self.n_elem, self.n_node_elem))\n        # chord\n        self.chord = np.zeros((self.n_elem, self.n_node_elem))\n        # elastic axis\n        self.elastic_axis = np.zeros((self.n_elem, self.n_node_elem))\n\n        # control surfaces attributes initialisation\n        self.n_control_surfaces = 1\n        self.control_surface = np.zeros((self.n_elem, self.n_node_elem), dtype=int) - 1\n        self.control_surface_type = np.zeros((self.n_control_surfaces,), dtype=int)\n        self.control_surface_deflection = np.zeros((self.n_control_surfaces,))\n        self.control_surface_chord = np.zeros((self.n_control_surfaces,), dtype=int)\n        self.control_surface_hinge_coord = np.zeros((self.n_control_surfaces,), dtype=float)\n\n        self.settings = dict()\n\n    def dynamic_control_surface(self, *delta):\n        \"\"\"\n        Generate dynamic control surface input files\n\n        Args:\n            delta (list): list of numpy arrays containing deflection time history\n\n        Returns:\n\n        \"\"\"\n        i = 0\n        for cs in delta:\n            self.control_surface_type[i] = 1\n            np.savetxt(self.case_route + '/' + self.case_name + '.input.txt', cs)\n            i += 1\n\n    def planform_area(self):\n        S_fus = 0.5 * (self.c_fuselage + self.c_root) * self.fuselage_width\n        S_wing = 0.5 * (self.c_root + self.c_root*self.taper_ratio) * self.span / 2\n        return 2*S_fus + 2*S_wing\n\n    def update_mass_stiffness(self, sigma=1.):\n        r\"\"\"\n        The mass and stiffness matrices are computed. Both vary over the span of the wing, hence a\n        dictionary is created that acts as a database of the different properties along the wing.\n\n        The variation of the stiffness is cubic along the span:\n\n            .. math:: \\mathbf{K} = \\mathbf{K}_0\\bar{c}^3\n\n        where :math:`\\mathbf{K}_0 is the stiffness of the wing root section and :math:`\\bar{c}` is\n        the ratio between the local chord and the root chord.\n\n        The variation of the sectional mass is quadratic along the span:\n\n            .. math:: \\mu = \\mu_0\\,\\bar{c}^2\n\n        where :math:`\\mu` is the mass per unit span and the zero subscript denotes the root value.\n\n        The sectional inertia is varied linearly along the span, based on the information by Mardanpour 2013.\n\n        Three lumped masses are included with the following properties (Richards, 2013)\n\n        =====  =====  =================  =========  ===============================  ============\n        No     Node   Relative Position  Mass [kg]  Inertia [kg m^2]                 Description\n        =====  =====  =================  =========  ===============================  ============\n        ``0``  ``2``  ``[0,0,0]``        ``5.24``   ``[0.29547, 0.29322, 0.29547]``  Right Engine\n        ``1``  ``S``  ``[0,0,0]``        ``5.24``   ``[0.29547, 0.29322, 0.29547]``  Left Engine\n        ``2``  ``0``  ``[0,0,0]``        ``15.29``  ``[0.5, 1.0, 1.0]*15.29``        Fuselage\n        =====  =====  =================  =========  ===============================  ============\n\n\n        Args:\n            sigma (float): stiffening factor\n\n        Returns:\n\n        \"\"\"\n\n        n_elem_fuselage = self.n_elem_fuselage\n        n_elem_wing = self.n_elem_wing\n        n_node_wing = self.n_node_wing\n        n_node_fuselage = self.n_node_fuselage\n        c_root = self.c_root\n        taper_ratio = self.taper_ratio\n\n        # Local chord to root chord initialisation\n        c_bar_temp = np.linspace(c_root, taper_ratio * c_root, n_elem_wing)\n\n        # Structural properties at the wing root section from Richards 2016\n        ea = 1e6\n        ga = 1e6\n        gj = 4.24e5\n        eiy = 3.84e5\n        eiz = 2.46e7\n\n        # Sectional mass from Richards 2016\n        mu_0 = 9.761\n        # Bending inertia properties from Mardanpour 2013\n        j_root = 0.303\n        j_tip = 0.2e-2 * 4.448 / 9.81\n\n        # Number of stiffnesses used\n        n_stiffness = self.n_stiffness\n\n        # Initialise the stiffness database\n        base_stiffness = self.base_stiffness\n\n        # Wing root section stiffness properties\n        # stiffness_root = sigma * np.diag([ea, ga, ga, gj, eiy, eiz])\n        stiffness_root = np.array([[3.23624595e+09, 0.00000000e+00, 0.00000000e+00,\n                                    0.00000000e+00, 0.00000000e+00, 0.00000000e+00],\n                                   [0.00000000e+00, 1.00000000e+14, 0.00000000e+00,\n                                    0.00000000e+00, 0.00000000e+00, 0.00000000e+00],\n                                   [0.00000000e+00, 0.00000000e+00, 1.00000000e+14,\n                                    0.00000000e+00, 0.00000000e+00, 0.00000000e+00],\n                                   [0.00000000e+00, 0.00000000e+00, 0.00000000e+00,\n                                    8.04987046e+07, -1.69971789e+05, 5.69905411e+07],\n                                   [0.00000000e+00, 0.00000000e+00, 0.00000000e+00,\n                                    -1.69971789e+05, 5.03651190e+07, -6.70649560e+06],\n                                   [0.00000000e+00, 0.00000000e+00, 0.00000000e+00,\n                                    5.69905411e+07, -6.70649560e+06, 2.24864852e+09]]) * sigma\n\n        stiffness_tip = np.array([[5.86034256e+07, 0.00000000e+00, 0.00000000e+00,\n                                   0.00000000e+00, 0.00000000e+00, 0.00000000e+00],\n                                  [0.00000000e+00, 1.00000000e+15, 0.00000000e+00,\n                                   0.00000000e+00, 0.00000000e+00, 0.00000000e+00],\n                                  [0.00000000e+00, 0.00000000e+00, 1.00000000e+15,\n                                   0.00000000e+00, 0.00000000e+00, 0.00000000e+00],\n                                  [0.00000000e+00, 0.00000000e+00, 0.00000000e+00,\n                                   2.93227100e+04, -2.11280834e+03, 2.52782426e+04],\n                                  [0.00000000e+00, 0.00000000e+00, 0.00000000e+00,\n                                   -2.11280834e+03, 1.44883639e+05, -2.52913470e+04],\n                                  [0.00000000e+00, 0.00000000e+00, 0.00000000e+00,\n                                   2.52782426e+04, -2.52913470e+04, 3.02592902e+05]]) * sigma\n\n\n        stiffness_root = np.diag(np.diag(stiffness_root))\n        stiffness_tip = np.diag(np.diag(stiffness_tip))\n\n        # Rigid fuselage\n        sigma_fuselage = 1000\n        base_stiffness[0, :, :] = sigma_fuselage * stiffness_root\n\n        # Cubic variation of the stiffness along the span - Richards\n        # for stiff_entry in range(1, n_stiffness):\n        #     base_stiffness[stiff_entry, :, :] = stiffness_root * c_bar_temp[stiff_entry - 1] ** 3\n\n        # Linear variation between root an tip as per Mardanpour 2014\n        alpha = np.linspace(0, 1, self.n_elem_wing)\n        for i_elem in range(0, self.n_elem_wing):\n            base_stiffness[i_elem + 1, :, :] = stiffness_root*(1-alpha[i_elem]) + stiffness_tip*alpha[i_elem]\n\n        # Mass variation along the span\n        n_mass = self.n_mass\n        sigma_mass = 1\n\n        # Initialise database\n        base_mass = self.base_mass\n\n        mu_root = 2.784472 * sigma_mass\n        chi_root_right = np.array([0, -5.29, 0.594]) * 0.0254 * 0\n        chi_root_left = np.array([0, +5.29, 0.594]) * 0.0254 * 0\n        m_root = np.eye(3) * mu_root\n        j_root = np.array([[0.30378797, 0., 0.],\n                           [0., 0.0122422, 0.],\n                           [0., 0., 0.30016065]])\n\n        j_root = np.diag([0.1, 0.1, 0.2])\n        mass_root_right = sclalg.block_diag(np.diag([mu_root, mu_root, mu_root]), j_root)\n        mass_root_left = sclalg.block_diag(np.diag([mu_root, mu_root, mu_root]), j_root)\n\n        mass_root_right[:3, -3:] = -mu_root * algebra.skew(chi_root_right)\n        mass_root_right[-3:, :3] = mu_root * algebra.skew(chi_root_right)\n\n        mass_root_left[:3, -3:] = -mu_root * algebra.skew(chi_root_left)\n        mass_root_left[-3:, :3] = mu_root * algebra.skew(chi_root_left)\n\n        mu_tip = 0.284084 * sigma_mass\n        chi_tip_right = np.array([0, -1.644, +0.563]) * 0.0254 * 0\n        chi_tip_left = np.array([0, +1.644, +0.563]) * 0.0254 * 0\n        j_tip = np.array([[9.06829766e-04, 0.00000000e+00, 0.00000000e+00],\n                          [0.00000000e+00, 6.34780836e-05, 0.00000000e+00],\n                          [0.00000000e+00, 0.00000000e+00, 8.16146789e-04]])\n        j_tip = np.diag([0.1, 0.1, 0.2])\n        mass_tip_right = sclalg.block_diag(np.diag([mu_tip, mu_tip, mu_tip]), j_tip)\n        mass_tip_left = sclalg.block_diag(np.diag([mu_tip, mu_tip, mu_tip]), j_tip)\n        mass_tip_right[:3, -3:] += -algebra.skew(chi_tip_right) * mu_tip\n        mass_tip_right[-3:, :3] += algebra.skew(chi_tip_right) * mu_tip\n\n        mass_tip_left[:3, -3:] += -algebra.skew(chi_tip_right) * mu_tip\n        mass_tip_left[-3:, :3] += algebra.skew(chi_tip_right) * mu_tip\n\n        mass_tip_left = mass_tip_right\n        mass_root_left = mass_root_right\n\n        for i_elem in range(self.n_elem_wing):\n            base_mass[i_elem, :, :] = mass_root_right*(1-alpha[i_elem]) + mass_tip_right*alpha[i_elem]\n\n        # for i_elem in range(self.n_elem_wing, 2*self.n_elem_wing):\n        #     base_mass[i_elem, :, :] = mass_root_left*(1-alpha[i_elem-self.n_elem_wing]) + mass_tip_left*alpha[i_elem-self.n_elem_wing]\n\n        # Quadratic variation in the mass per unit span - Richards\n        # mu_temp = mu_0 * np.ones_like(c_bar_temp)\n        # j_temp = np.linspace(j_root, j_tip, n_elem_wing)\n\n        # for mass_entry in range(n_mass):\n        #     base_mass[mass_entry, :, :] = np.diag([\n        #         mu_temp[mass_entry],\n        #         mu_temp[mass_entry],\n        #         mu_temp[mass_entry],\n        #         j_temp[mass_entry],\n        #         j_temp[mass_entry],\n        #         j_temp[mass_entry]\n        #     ])\n\n        # Lumped mass initialisation\n        # 0 - Right engine\n        # 1 - Left engine\n        # 2 - Fuselage\n\n        lumped_mass_nodes = self.lumped_mass_nodes\n        lumped_mass = self.lumped_mass\n        lumped_mass_inertia = self.lumped_mass_inertia\n        lumped_mass_position = self.lumped_mass_position\n\n        # Lumped masses nodal position\n        lumped_mass_nodes[0] = 2\n        lumped_mass_nodes[1] = n_node_fuselage + n_node_wing + 1\n        lumped_mass_nodes[2] = 0\n\n        # Lumped mass value from Richards 2013\n        # lumped_mass[0:2] = 51.445 / 9.81\n        # lumped_mass[2] = 150 / 9.81\n\n        # Lumped masses from Mardanpour\n        # Pilot mass\n        lumped_mass[2] = 16.06\n        lumped_mass_position[2] = np.array([0., -0.254, -0.254])\n\n        # Engine mass\n        lumped_mass[0:2] = 0.535\n        lumped_mass_inertia[0, :, :] = np.diag([0.02994352, 0.02994352, 0.02994352])\n        lumped_mass_inertia[1, :, :] = np.diag([0.02994352, 0.02994352, 0.02994352])\n\n        # Lumped mass inertia\n        # lumped_mass_inertia[0, :, :] = np.diag([0.29547, 0.29322, 0.29547])\n        # lumped_mass_inertia[1, :, :] = np.diag([0.29547, 0.29322, 0.29547])\n        # lumped_mass_inertia[2, :, :] = np.diag([0.5, 1, 1]) * lumped_mass[2]\n\n        # Define class attributes\n        self.lumped_mass = lumped_mass * 0\n        self.lumped_mass_nodes = lumped_mass_nodes * 0\n        self.lumped_mass_inertia = lumped_mass_inertia * 0\n        self.lumped_mass_position = lumped_mass_position * 0\n\n        self.base_stiffness = base_stiffness\n        self.base_mass = base_mass\n\n    def update_fem_prop(self):\n        \"\"\"\n        Computes the FEM properties prior to analysis such as the connectivity matrix, coordinates, etc\n\n        Returns:\n\n        \"\"\"\n        # Obtain class attributes\n        n_node_elem = self.n_node_elem\n        n_elem = self.n_elem\n        n_elem_wing = self.n_elem_wing\n        n_elem_fuselage = self.n_elem_fuselage\n        n_node = self.n_node\n        n_node_wing = self.n_node_wing\n        n_node_fuselage = self.n_node_fuselage\n        fuselage_width = self.fuselage_width\n        thrust = self.thrust\n        thrust_nodes = self.thrust_nodes\n        span = self.span\n        sweep_LE = self.sweep_LE\n\n        # mass and stiffness matrices\n        stiffness = self.base_stiffness\n        mass = self.base_mass\n        n_stiffness = stiffness.shape[0]\n        n_mass = mass.shape[0]\n\n        # H5 FEM FILE VARIABLES INITIALISATION\n        # coordinates\n        x = np.zeros((n_node,))\n        y = np.zeros((n_node,))\n        z = np.zeros((n_node,))\n        # twist\n        structural_twist = np.zeros_like(x)\n        # beam number\n        beam_number = np.zeros(n_elem, dtype=int)\n        # frame of reference delta\n        frame_of_reference_delta = np.zeros((n_elem, n_node_elem, 3))\n        # connectivity of beams\n        conn = np.zeros((n_elem, n_node_elem), dtype=int)\n        # stiffness\n        stiffness = np.zeros((n_stiffness, 6, 6))\n        elem_stiffness = np.zeros((n_elem,), dtype=int)\n        # mass\n        mass = np.zeros((n_mass, 6, 6))\n        elem_mass = np.zeros(n_elem, dtype=int)\n        # boundary conditions\n        boundary_conditions = np.zeros((n_node,), dtype=int)\n        # applied forces\n        app_forces = np.zeros((n_node, 6))\n\n        # assemble connectivites\n        # worked elements\n        we = 0\n        # worked nodes\n        wn = 0\n\n        # RIGHT RIGID FUSELAGE\n        beam_number[we:we + 1] = 0\n        # coordinates\n        x[wn:wn + n_node_fuselage] = 0\n        y[wn:wn + n_node_fuselage] = np.linspace(0, fuselage_width / 2, n_node_fuselage)\n\n        # connectivities\n        elem_mass[0] = 0\n        conn[we, :] = [0, 2, 1]\n\n        # frame of reference change\n        frame_of_reference_delta[0, 0, :] = [-1.0, 0.0, 0.0]\n        frame_of_reference_delta[0, 1, :] = [-1.0, 0.0, 0.0]\n        frame_of_reference_delta[0, 2, :] = [-1.0, 0.0, 0.0]\n\n        # element stiffness\n        elem_stiffness[0] = 0\n        elem_mass[0] = 0\n\n        # boundary conditions\n        boundary_conditions[0] = 1\n\n        # applied forces - engine 1\n        app_forces[thrust_nodes[0]] = [0, thrust, 0,\n                                       0, 0, 0]\n\n        # updated worked nodes and elements\n        we += n_elem_fuselage\n        wn += n_node_fuselage\n\n        # RIGHT WING\n        beam_number[we:we + n_elem_wing] = 1\n        # y coordinate (positive right)\n        y[wn:wn + n_node_wing] = np.linspace(fuselage_width / 2,\n                                             span / 2,\n                                             n_node_wing + 1)[1:]\n        x[wn:wn + n_node_wing] = 0 + (y[wn:wn + n_node_wing] - fuselage_width / 2) * np.tan(sweep_LE)\n\n        # connectivities\n        for ielem in range(n_elem_wing):\n            conn[we + ielem, :] = (np.ones(n_node_elem) * (we + ielem) * (n_node_elem - 1) +\n                                   [0, 2, 1])\n            for inode in range(n_node_elem):\n                frame_of_reference_delta[we + ielem, inode, :] = [-1.0, 0.0, 0.0]\n\n            elem_mass[we + ielem] = ielem\n            elem_stiffness[we + ielem] = ielem + 1\n\n        # element stiffness and mass\n        # elem_stiffness[we:we+n_elem_wing] = 0\n        # elem_mass[we:we+n_elem_wing] = 0\n\n        # boundary conditions of free end\n        boundary_conditions[wn + n_node_wing - 1] = -1\n\n        # update worked elements and nodes\n        we += n_elem_wing\n        wn += n_node_wing\n\n        # LEFT FUSELAGE\n        beam_number[we:we + n_elem_fuselage] = 2\n        # coordinates\n        y[wn:wn + n_node_fuselage - 1] = np.linspace(0,\n                                                     -fuselage_width / 2,\n                                                     n_node_fuselage)[1:]\n        x[wn:wn + n_node_fuselage - 1] = 0\n\n        # connectivity\n        conn[we, :] = [0, wn + 1, wn]\n\n        # frame of reference delta\n        for ielem in range(n_elem_fuselage):\n            for inode in range(n_node_elem):\n                frame_of_reference_delta[we + ielem, inode, :] = [1.0, 0.0, 0.0]\n\n        # element stiffness and mass\n        elem_stiffness[we:we + n_elem_fuselage] = 0\n        elem_mass[we:we + n_elem_fuselage] = self.n_elem_wing\n\n        # applied forces - engine 2\n        app_forces[thrust_nodes[1]] = [0, -thrust, 0,\n                                       0, 0, 0]\n\n        # update worked elements and nodes\n        we += n_elem_fuselage\n        wn += n_node_fuselage - 1\n\n        # LEFT WING\n        # coordinates\n        beam_number[we:we + n_elem_wing] = 3\n        y[wn:wn + n_node_wing] = np.linspace(-fuselage_width / 2,\n                                             -span / 2,\n                                             n_node_wing + 1)[1:]\n        x[wn:wn + n_node_wing] = 0 + -1 * (y[wn:wn + n_node_wing] + fuselage_width / 2) * np.tan(sweep_LE)\n\n        # left wing connectivities\n        for ielem in range(n_elem_wing):\n            conn[we + ielem, :] = np.ones(n_node_elem) * (we + ielem) * (n_node_elem - 1) + [0, 2, 1]\n\n            for inode in range(n_node_elem):\n                frame_of_reference_delta[we + ielem, inode, :] = [1.0, 0.0, 0.0]\n\n            elem_mass[we + ielem] = ielem + self.n_elem_wing\n            elem_stiffness[we + ielem] = ielem + 1\n\n        # element stiffness and mass\n        # elem_stiffness[we:we+n_node_wing] = 0\n\n        # boundary conditions at the free end\n        boundary_conditions[wn + n_node_wing - 1] = -1\n\n        # update worked elements and nodes\n        we += n_elem_wing\n        wn += n_node_wing\n\n        # set attributes\n        self.x = x\n        self.y = y\n        self.z = z\n        self.connectivities = conn\n        self.elem_stiffness = elem_stiffness\n        self.elem_mass = elem_mass\n        self.frame_of_reference_delta = frame_of_reference_delta\n        self.boundary_conditions = boundary_conditions\n        self.beam_number = beam_number\n        self.app_forces = app_forces\n\n    def generate_fem_file(self):\n        \"\"\"\n        Generates the ``.fem.h5`` folder containing the structural information of the problem\n\n        The file is written to ``self.case_route / self.case_name .fem.h5``\n\n        \"\"\"\n\n\n        with h5.File(self.case_route + '/' + self.case_name + '.fem.h5', 'a') as h5file:\n            coordinates = h5file.create_dataset('coordinates',\n                                                data=np.column_stack((self.x, self.y, self.z)))\n            connectivities = h5file.create_dataset('connectivities', data=self.connectivities)\n            num_nodes_elem_handle = h5file.create_dataset(\n                'num_node_elem', data=self.n_node_elem)\n            num_nodes_handle = h5file.create_dataset(\n                'num_node', data=self.n_node)\n            num_elem_handle = h5file.create_dataset(\n                'num_elem', data=self.n_elem)\n            stiffness_db_handle = h5file.create_dataset(\n                'stiffness_db', data=self.base_stiffness)\n            stiffness_handle = h5file.create_dataset(\n                'elem_stiffness', data=self.elem_stiffness)\n            mass_db_handle = h5file.create_dataset(\n                'mass_db', data=self.base_mass)\n            mass_handle = h5file.create_dataset(\n                'elem_mass', data=self.elem_mass)\n            frame_of_reference_delta_handle = h5file.create_dataset(\n                'frame_of_reference_delta', data=self.frame_of_reference_delta)\n            structural_twist_handle = h5file.create_dataset(\n                'structural_twist', data=np.zeros((self.n_elem, self.n_node_elem)))\n            bocos_handle = h5file.create_dataset(\n                'boundary_conditions', data=self.boundary_conditions)\n            beam_handle = h5file.create_dataset(\n                'beam_number', data=self.beam_number)\n            app_forces_handle = h5file.create_dataset(\n                'app_forces', data=self.app_forces)\n            lumped_mass_nodes_handle = h5file.create_dataset(\n                'lumped_mass_nodes', data=self.lumped_mass_nodes)\n            lumped_mass_handle = h5file.create_dataset(\n                'lumped_mass', data=self.lumped_mass)\n            lumped_mass_inertia_handle = h5file.create_dataset(\n                'lumped_mass_inertia', data=self.lumped_mass_inertia)\n            lumped_mass_position_handle = h5file.create_dataset(\n                'lumped_mass_position', data=self.lumped_mass_position)\n\n    def create_linear_simulation(self, delta_e=None, delta_dot=None):\n\n        Kpanels = self.M * (self.n_node - 1)\n        Kvertices = (self.M + 1) * self.n_node\n        Kpanels_wake = Kpanels * self.Mstarfactor\n        n_states_aero = 3 * Kpanels + Kpanels_wake\n        # n_inputs_aero = 2 * 3 * Kvertices\n\n        n_states_struct = 2*(6 * (self.n_node - 1) + 9)\n        n_inputs_struct = n_states_struct // 2\n\n        x0 = np.zeros((n_states_aero + n_states_struct))\n        # x0[-7] = 0.05\n        # x0[-4:] = (algebra.euler2quat([ -5*np.pi/180, 0, 0]))\n        u = np.zeros((self.n_tstep, n_states_struct + n_inputs_struct + 2 * self.n_control_surfaces))\n        # u[0:3, -7] = -1000\n        if delta_e is not None:\n            u[:, n_states_struct:n_states_struct+self.n_control_surfaces] = delta_e\n            u[:, n_states_struct + self.n_control_surfaces:n_states_struct+self.n_control_surfaces + self.n_control_surfaces] = delta_dot\n\n        # u[10:15, -8] = 100\n\n        self.generate_linear_sim_files(x0, u)\n\n    def generate_linear_sim_files(self, x0, input_vec):\n        if not os.path.exists(self.case_route):\n                os.makedirs(self.case_route)\n\n        with h5.File(self.case_route + '/' + self.case_name + '.lininput.h5', 'a') as h5file:\n            x0 = h5file.create_dataset(\n                'x0', data=x0)\n            u = h5file.create_dataset(\n                'u', data=input_vec)\n\n    def clean_test_files(self):\n        \"\"\"\n        Clears previously generated files\n        \"\"\"\n\n        case_name = self.case_name\n        route = self.case_route\n\n        # FEM\n        fem_file_name = route + '/' + case_name + '.fem.h5'\n        if os.path.isfile(fem_file_name):\n            os.remove(fem_file_name)\n\n        # Dynamics File\n        dyn_file_name = route + '/' + case_name + '.dyn.h5'\n        if os.path.isfile(dyn_file_name):\n            os.remove(dyn_file_name)\n\n        # Aerodynamics File\n        aero_file_name = route + '/' + case_name + '.aero.h5'\n        if os.path.isfile(aero_file_name):\n            os.remove(aero_file_name)\n\n        # Solver file\n        solver_file_name = route + '/' + case_name + '.sharpy'\n        if os.path.isfile(solver_file_name):\n            os.remove(solver_file_name)\n\n        # Flight conditions file\n        flightcon_file_name = route + '/' + case_name + '.flightcon.txt'\n        if os.path.isfile(flightcon_file_name):\n            os.remove(flightcon_file_name)\n\n        # Linear inputs file\n        lin_file_name  = self.case_route + '/' + self.case_name + '.lininput.h5'\n        if os.path.isfile(lin_file_name):\n            os.remove(lin_file_name)\n\n        # if os.path.isdir(route):\n        #     os.system('rm -r %s' %route)\n\n    def update_aero_properties(self):\n        \"\"\"\n        Updates the aerodynamic properties of the horten wing\n\n        \"\"\"\n\n        # Retrieve attributes\n        n_elem = self.n_elem\n        n_node_elem = self.n_node_elem\n        n_node_wing = self.n_node_wing\n        n_node_fuselage = self.n_node_fuselage\n        n_elem_fuselage = self.n_elem_fuselage\n        n_elem_wing = self.n_elem_wing\n        c_root = self.c_root\n        taper_ratio = self.taper_ratio\n        washout_root = self.washout_root\n        washout_tip = self.washout_tip\n        n_control_surfaces = self.n_control_surfaces\n        cs_deflection = self.cs_deflection\n        m = self.M\n        main_ea_root = self.main_ea_root\n        main_ea_tip = self.main_ea_tip\n        airfoil_distribution = self.airfoil_distribution\n        chord = self.chord\n        surface_distribution = self.surface_distribution\n        surface_m = self.surface_m\n        aero_nodes = self.aero_nodes\n        elastic_axis = self.elastic_axis\n        twist = self.twist\n\n        control_surface = self.control_surface\n        control_surface_type = self.control_surface_type\n        control_surface_deflection = self.control_surface_deflection\n        control_surface_chord = self.control_surface_chord\n        control_surface_hinge_coord = self.control_surface_hinge_coord\n\n        self.dt = 1 / self.M / self.u_inf\n\n        # control surface type: 0 = static\n        # control surface type: 1 = dynamic\n        control_surface_type[0] = self.control_surface_type[0]\n        control_surface_deflection[0] = cs_deflection\n        control_surface_chord[0] = 2  # m\n        control_surface_hinge_coord[0] = 0.25\n\n        # RIGHT FUSELAGE (Surface 0, Beam 0)\n        we = 0\n        wn = 0\n\n        i_surf = 0\n        airfoil_distribution[we:we + n_elem_fuselage] = 0\n        surface_distribution[we:we + n_elem_fuselage] = i_surf\n        surface_m[i_surf] = m\n\n        aero_nodes[wn:wn + n_node_fuselage] = True\n\n        temp_chord = np.linspace(self.c_fuselage, self.c_root, self.n_node_fuselage)\n        temp_washout = washout_root\n\n        # apply chord and elastic axis at each node\n        node_counter = 0\n        for ielem in range(we, we + n_elem_fuselage):\n            for i_local_node in range(n_node_elem):\n                if not i_local_node == 0:\n                    node_counter += 1\n                chord[ielem, i_local_node] = temp_chord[node_counter]\n                elastic_axis[ielem, i_local_node] = main_ea_root\n                twist[ielem, i_local_node] = -temp_washout\n\n        we += n_elem_fuselage\n        wn += n_node_fuselage\n\n        # RIGHT WING (Surface 1, Beam 1)\n        # surface_id\n        i_surf = 1\n        airfoil_distribution[we:we + n_elem_wing, :] = 0\n        surface_distribution[we:we + n_elem_wing] = i_surf\n        surface_m[i_surf] = m\n\n        # specify aerodynamic characteristics of wing nodes\n        aero_nodes[wn:wn + n_node_wing - 1] = True\n\n        # linear taper initialisation\n        temp_chord = np.linspace(c_root, taper_ratio * c_root, n_node_wing + 1)\n\n        # linear wash out initialisation\n        temp_washout = np.linspace(washout_root, washout_tip, n_node_wing + 1)\n\n        # elastic axis variation\n        temp_ea = np.linspace(main_ea_root, main_ea_tip, n_node_wing + 1)\n\n        # apply chord and elastic axis at each node\n        node_counter = 0\n        for ielem in range(we, we + n_elem_wing):\n            for i_local_node in range(n_node_elem):\n                if not i_local_node == 0:\n                    node_counter += 1\n                chord[ielem, i_local_node] = temp_chord[node_counter]\n                elastic_axis[ielem, i_local_node] = temp_ea[node_counter]\n                twist[ielem, i_local_node] = -temp_washout[node_counter]\n                if ielem >= round(((we + n_elem_wing) / 2)):\n                    control_surface[ielem, i_local_node] = 0\n\n        # update working element and node\n        we += n_elem_wing\n        wn += n_node_wing - 1\n\n        # LEFT FUSELAGE (Surface 2, Beam 2)\n        i_surf = 2\n        airfoil_distribution[we:we + n_elem_fuselage] = 0\n        surface_distribution[we:we + n_elem_fuselage] = i_surf\n        surface_m[i_surf] = m\n\n        aero_nodes[wn:wn + n_node_fuselage] = True\n\n        temp_chord = np.linspace(self.c_fuselage, self.c_root, self.n_node_fuselage)\n        temp_washout = washout_root\n\n        # apply chord and elastic axis at each node\n        node_counter = 0\n        for ielem in range(we, we + n_elem_fuselage):\n            for i_local_node in range(n_node_elem):\n                if not i_local_node == 0:\n                    node_counter += 1\n                chord[ielem, i_local_node] = temp_chord[node_counter]\n                elastic_axis[ielem, i_local_node] = main_ea_root\n                twist[ielem, i_local_node] = -temp_washout\n\n        we += n_elem_fuselage\n        wn += n_node_fuselage\n\n        # LEFT WING (Surface 3, Beam 3)\n        i_surf = 3\n        airfoil_distribution[we:we + n_elem_wing, :] = 0\n        surface_distribution[we: we + n_elem_wing] = i_surf\n        surface_m[i_surf] = m\n\n        # linear taper initialisation\n        temp_chord = np.linspace(c_root, taper_ratio * c_root, n_node_wing + 1)\n\n        # linear wash out initialisation\n        temp_washout = np.linspace(washout_root, washout_tip, n_node_wing + 1)\n\n        # specify aerodynamic characterisics of wing nodes\n        aero_nodes[wn:wn + n_node_wing] = True\n\n        # linear taper initialisation\n        # apply chord and elastic axis at each node\n        node_counter = 0\n        for ielem in range(we, we + n_elem_wing):\n            for i_local_node in range(n_node_elem):\n                if not i_local_node == 0:\n                    node_counter += 1\n                chord[ielem, i_local_node] = temp_chord[node_counter]\n                elastic_axis[ielem, i_local_node] = temp_ea[node_counter]\n                twist[ielem, i_local_node] = -temp_washout[node_counter]\n                if ielem >= round((we + n_elem_wing / 2)):\n                    control_surface[ielem, i_local_node] = 0\n\n        # update working element and node\n        we += n_elem_wing\n        wn += n_node_wing\n\n        # end node is the middle node\n        mid_chord = np.array(chord[:, 1], copy=True)\n        chord[:, 1] = chord[:, 2]\n        chord[:, 2] = mid_chord\n\n        mid_ea = np.array(elastic_axis[:, 1], copy=True)\n        elastic_axis[:, 1] = elastic_axis[:, 2]\n        elastic_axis[:, 2] = mid_ea\n\n        # Update aerodynamic attributes of class\n        self.chord = chord\n        self.twist = twist\n        self.aero_nodes = aero_nodes\n        self.elastic_axis = elastic_axis\n        self.control_surface = control_surface\n\n    def generate_aero_file(self, route=None, case_name=None):\n        \"\"\"\n        Generates the ``.aero.h5`` file with the aerodynamic properties of the wing\n\n        Args:\n            route (str): route to write case file. If None is specified the default will be used\n            case_name (str): name of file. If None is specified the default will be used\n\n        \"\"\"\n\n        if not route:\n            route = self.case_route\n\n        if not case_name:\n            case_name = self.case_name\n\n        if not os.path.isdir(self.case_route):\n            os.makedirs(self.case_route)\n\n        chord = self.chord\n        twist = self.twist\n        airfoil_distribution = self.airfoil_distribution\n        surface_distribution = self.surface_distribution\n        surface_m = self.surface_m\n        m_distribution = self.m_distribution\n        aero_nodes = self.aero_nodes\n        elastic_axis = self.elastic_axis\n        control_surface = self.control_surface\n        control_surface_deflection = self.control_surface_deflection\n        control_surface_chord = self.control_surface_chord\n        control_surface_hinge_coord = self.control_surface_hinge_coord\n        control_surface_type = self.control_surface_type\n\n        control_surface_deflection[0] = self.cs_deflection\n\n        with h5.File(route + '/' + case_name + '.aero.h5', 'a') as h5file:\n            airfoils_group = h5file.create_group('airfoils')\n            # add one airfoil\n            naca_airfoil_main = airfoils_group.create_dataset('0', data=np.column_stack(\n                geo_utils.generate_naca_camber(P=0, M=0)))\n            naca_airfoil_tail = airfoils_group.create_dataset('1', data=np.column_stack(\n                geo_utils.generate_naca_camber(P=0, M=0)))\n            naca_airfoil_fin = airfoils_group.create_dataset('2', data=np.column_stack(\n                geo_utils.generate_naca_camber(P=0, M=0)))\n\n            # chord\n            chord_input = h5file.create_dataset('chord', data=chord)\n            dim_attr = chord_input.attrs['units'] = 'm'\n\n            # twist\n            twist_input = h5file.create_dataset('twist', data=twist)\n            dim_attr = twist_input.attrs['units'] = 'rad'\n\n            # airfoil distribution\n            airfoil_distribution_input = h5file.create_dataset('airfoil_distribution', data=airfoil_distribution)\n\n            surface_distribution_input = h5file.create_dataset('surface_distribution', data=surface_distribution)\n            surface_m_input = h5file.create_dataset('surface_m', data=surface_m)\n            m_distribution_input = h5file.create_dataset('m_distribution',\n                                                         data=m_distribution.encode('ascii', 'ignore'))\n\n            aero_node_input = h5file.create_dataset('aero_node', data=aero_nodes)\n            elastic_axis_input = h5file.create_dataset('elastic_axis', data=elastic_axis)\n\n            control_surface_input = h5file.create_dataset('control_surface', data=control_surface)\n            control_surface_deflection_input = h5file.create_dataset('control_surface_deflection',\n                                                                     data=control_surface_deflection)\n            control_surface_chord_input = h5file.create_dataset('control_surface_chord', data=control_surface_chord)\n            control_surface_hinge_coord_input = h5file.create_dataset('control_surface_hinge_coord',\n                                                                      data=control_surface_hinge_coord)\n            control_surface_types_input = h5file.create_dataset('control_surface_type', data=control_surface_type)\n\n    def set_default_config_dict(self, route=None, case_name=None):\n        \"\"\"\n        Generates default solver configuration file\n        Returns:\n\n        \"\"\"\n\n        if not route:\n            route = self.case_route\n\n        if not case_name:\n            case_name = self.case_name\n\n        u_inf = self.u_inf\n        rho = self.rho\n        dt = self.dt\n        tolerance = self.tolerance\n        alpha = self.alpha\n        beta = self.beta\n        thrust = self.thrust\n        thrust_nodes = self.thrust_nodes\n        cs_deflection = self.cs_deflection\n        fsi_tolerance = self.fsi_tolerance\n        n_tstep = self.n_tstep\n        gust_intensity = self.gust_intensity\n        relaxation_factor = self.relaxation_factor\n\n        file_name = route + '/' + case_name + '.sharpy'\n\n        settings = dict()\n        settings['SHARPy'] = {'case': case_name,\n                              'route': route,\n                              'flow': ['BeamLoader',\n                                       'AerogridLoader',\n                                       'StaticCoupled',\n                                       'Modal',\n                                       'AerogridPlot',\n                                       'BeamPlot',\n                                       'SaveData'],\n                              'write_screen': 'on',\n                              'write_log': 'on',\n                              'log_folder': route + '/output/' + case_name + '/',\n                              'log_file': case_name + '.log'}\n\n        settings['BeamLoader'] = {'unsteady': 'off',\n                                  'orientation': algebra.euler2quat(np.array([self.roll,\n                                                                              self.alpha,\n                                                                              self.beta]))}\n\n        settings['StaticUvlm'] = {'print_info': 'on',\n                                  'horseshoe': self.horseshoe,\n                                  'num_cores': 4,\n                                  'n_rollup': 1,\n                                  'rollup_dt': dt,\n                                  'rollup_aic_refresh': 1,\n                                  'rollup_tolerance': 1e-4,\n                                  'velocity_field_generator': 'SteadyVelocityField',\n                                  'velocity_field_input': {'u_inf': u_inf,\n                                                           'u_inf_direction': [1., 0, 0]},\n                                  'rho': rho}\n\n        settings['StaticCoupled'] = {'print_info': 'on',\n                                     'structural_solver': 'NonLinearStatic',\n                                     'structural_solver_settings': {'print_info': 'off',\n                                                                    'max_iterations': 200,\n                                                                    'num_load_steps': 1,\n                                                                    'delta_curved': 1e-5,\n                                                                    'min_delta': tolerance,\n                                                                    'gravity_on': 'on',\n                                                                    'gravity': 9.81},\n                                     'aero_solver': 'StaticUvlm',\n                                     'aero_solver_settings': {'print_info': 'on',\n                                                              'horseshoe': self.horseshoe,\n                                                              'num_cores': 4,\n                                                              'n_rollup': int(0),\n                                                              'rollup_dt': dt, #self.c_root / self.M / self.u_inf,\n                                                              'rollup_aic_refresh': 1,\n                                                              'rollup_tolerance': 1e-4,\n                                                              'velocity_field_generator': 'SteadyVelocityField',\n                                                              'velocity_field_input': {'u_inf': u_inf,\n                                                                                       'u_inf_direction': [1., 0, 0]},\n                                                              'rho': rho},\n                                     'max_iter': 200,\n                                     'n_load_steps': 1,\n                                     'tolerance': tolerance,\n                                     'relaxation_factor': 0.2}\n\n        if self.horseshoe is True:\n            settings['AerogridLoader'] = {'unsteady': 'off',\n                                          'aligned_grid': 'on',\n                                          'mstar': 1,\n                                          'freestream_dir': ['1', '0', '0'],\n                                          'control_surface_deflection': ['']}\n        else:\n            settings['AerogridLoader'] = {'unsteady': 'off',\n                                          'aligned_grid': 'on',\n                                          'mstar': int(self.M * self.Mstarfactor),\n                                          'freestream_dir': ['1', '0', '0'],\n                                          'control_surface_deflection': ['']}\n\n        settings['NonLinearStatic'] = {'print_info': 'off',\n                                       'max_iterations': 150,\n                                       'num_load_steps': 1,\n                                       'delta_curved': 1e-8,\n                                       'min_delta': tolerance,\n                                       'gravity_on': True,\n                                       'gravity': 9.81}\n\n        settings['StaticTrim'] = {'solver': 'StaticCoupled',\n                                  'solver_settings': settings['StaticCoupled'],\n                                  'thrust_nodes': thrust_nodes,\n                                  'initial_alpha': alpha,\n                                  'initial_deflection': cs_deflection,\n                                  'initial_thrust': thrust,\n                                  'max_iter': 200,\n                                  'fz_tolerance': 1e-2,\n                                  'fx_tolerance': 1e-2,\n                                  'm_tolerance': 1e-2}\n\n        settings['Trim'] = {'solver': 'StaticCoupled',\n                            'solver_settings': settings['StaticCoupled'],\n                            'initial_alpha': alpha,\n                            'initial_beta': beta,\n                            'cs_indices': [0],\n                            'initial_cs_deflection': [cs_deflection],\n                            'thrust_nodes': thrust_nodes,\n                            'initial_thrust': [thrust, thrust]}\n\n        settings['NonLinearDynamicCoupledStep'] = {'print_info': 'off',\n                                                   'initial_velocity_direction': [-1., 0., 0.],\n                                                   'max_iterations': 950,\n                                                   'delta_curved': 1e-6,\n                                                   'min_delta': tolerance,\n                                                   'newmark_damp': 5e-3,\n                                                   'gravity_on': True,\n                                                   'gravity': 9.81,\n                                                   'num_steps': n_tstep,\n                                                   'dt': dt,\n                                                   'initial_velocity': u_inf * 1}\n\n        settings['NonLinearDynamicPrescribedStep'] = {'print_info': 'on',\n                                                   'initial_velocity_direction': [-1., 0., 0.],\n                                                   'max_iterations': 950,\n                                                   'delta_curved': 1e-6,\n                                                   'min_delta': self.tolerance,\n                                                   'newmark_damp': 5e-3,\n                                                   'gravity_on': True,\n                                                   'gravity': 9.81,\n                                                   'num_steps': self.n_tstep,\n                                                   'dt': self.dt}\n\n        settings['StepLinearUVLM'] = {'dt': self.dt,\n                                      'integr_order': 1,\n                                      'remove_predictor': True,\n                                      'use_sparse': True,\n                                      'velocity_field_generator': 'GustVelocityField',\n                                      'velocity_field_input': {'u_inf': u_inf,\n                                                               'u_inf_direction': [1., 0., 0.],\n                                                               'gust_shape': '1-cos',\n                                                               'gust_length': 1.,\n                                                               'gust_intensity': self.gust_intensity * u_inf,\n                                                               'offset': 30.,\n                                                               'span': self.span}}\n\n        settings['StepUvlm'] = {'print_info': 'on',\n                                'horseshoe': self.horseshoe,\n                                'num_cores': 4,\n                                'n_rollup': 1,\n                                'convection_scheme': self.wake_type,\n                                'rollup_dt': dt,\n                                'rollup_aic_refresh': 1,\n                                'rollup_tolerance': 1e-4,\n                                'velocity_field_generator': 'GustVelocityField',\n                                'velocity_field_input': {'u_inf': u_inf * 0,\n                                                         'u_inf_direction': [1., 0, 0],\n                                                         'gust_shape': '1-cos',\n                                                         'gust_length': 5.,\n                                                         'gust_intensity': gust_intensity * u_inf,\n                                                         'offset': 15.0,\n                                                         'span': self.span,\n                                                         'relative_motion': True},\n                                # 'velocity_field_generator': 'SteadyVelocityField',\n                                # 'velocity_field_input': {'u_inf': u_inf*1,\n                                #                             'u_inf_direction': [1., 0., 0.]},\n                                'rho': rho,\n                                'n_time_steps': n_tstep,\n                                'dt': dt,\n                                'gamma_dot_filtering': 3}\n\n        settings['DynamicCoupled'] = {'print_info': 'on',\n                                      # 'structural_substeps': 1,\n                                      # 'dynamic_relaxation': 'on',\n                                      # 'clean_up_previous_solution': 'on',\n                                      'structural_solver': 'NonLinearDynamicCoupledStep',\n                                      'structural_solver_settings': settings['NonLinearDynamicCoupledStep'],\n                                      'aero_solver': 'StepUvlm',\n                                      'aero_solver_settings': settings['StepUvlm'],\n                                      'fsi_substeps': 200,\n                                      'fsi_tolerance': fsi_tolerance,\n                                      'relaxation_factor': relaxation_factor,\n                                      'minimum_steps': 1,\n                                      'relaxation_steps': 150,\n                                      'final_relaxation_factor': 0.5,\n                                      'n_time_steps': n_tstep,\n                                      'dt': dt,\n                                      'include_unsteady_force_contribution': 'off',\n                                      'postprocessors': ['BeamLoads', 'StallCheck', 'BeamPlot', 'AerogridPlot'],\n                                      'postprocessors_settings': {'BeamLoads': {'csv_output': 'off'},\n                                                                  'StallCheck': {'output_degrees': True,\n                                                                                 'stall_angles': {\n                                                                                     '0': [-12 * np.pi / 180,\n                                                                                           6 * np.pi / 180],\n                                                                                     '1': [-12 * np.pi / 180,\n                                                                                           6 * np.pi / 180],\n                                                                                     '2': [-12 * np.pi / 180,\n                                                                                           6 * np.pi / 180]}},\n                                                                  'BeamPlot': {'include_rbm': 'on',\n                                                                               'include_applied_forces': 'on'},\n                                                                  'AerogridPlot': {\n                                                                      'u_inf': u_inf,\n                                                                      'include_rbm': 'on',\n                                                                      'include_applied_forces': 'on',\n                                                                      'minus_m_star': 0},\n                                                                  #              'WriteVariablesTime': {\n                                                                  #              #     'delimeter': ',',\n                                                                  #              #     'structure_nodes': [0],\n                                                                  #              #     'structure_variables': ['Z']\n                                                                  #                 # settings['WriteVariablesTime'] = {'delimiter': ' ',\n                                                                  #     'FoR_variables': ['GFoR_pos', 'GFoR_vel', 'GFoR_acc'],\n                                                                  # 'FoR_number': [],\n                                                                  # 'structure_variables': ['AFoR_steady_forces', 'AFoR_unsteady_forces','AFoR_position'],\n                                                                  # 'structure_nodes': [0,-1],\n                                                                  # 'aero_panels_variables': ['gamma', 'gamma_dot'],\n                                                                  # 'aero_panels_isurf': [0,1,2],\n                                                                  # 'aero_panels_im': [1,1,1],\n                                                                  # 'aero_panels_in': [-2,-2,-2],\n                                                                  # 'aero_nodes_variables': ['GFoR_steady_force', 'GFoR_unsteady_force'],\n                                                                  # 'aero_nodes_isurf': [0,1,2],\n                                                                  # 'aero_nodes_im': [1,1,1],\n                                                                  # 'aero_nodes_in': [-2,-2,-2]\n                                                                  #              }}}\n                                                                  }}\n\n        settings['Modal'] = {'print_info': True,\n                             'use_undamped_modes': True,\n                             'NumLambda': 30,\n                             'rigid_body_modes': True,\n                             'write_modes_vtk': 'on',\n                             'print_matrices': 'on',\n                             'save_data': 'on',\n                             'continuous_eigenvalues': 'off',\n                             'dt': dt,\n                             'plot_eigenvalues': False}\n\n        settings['LinearAssembler'] = {'linear_system': 'LinearAeroelastic',\n                                       'linear_system_settings': {\n                                           'beam_settings': {'modal_projection': False,\n                                                             'inout_coords': 'nodes',\n                                                             'discrete_time': True,\n                                                             'newmark_damp': 0.5,\n                                                             'discr_method': 'newmark',\n                                                             'dt': dt,\n                                                             'proj_modes': 'undamped',\n                                                             'use_euler': 'off',\n                                                             'num_modes': 40,\n                                                             'print_info': 'on',\n                                                             'gravity': 'on',\n                                                             'remove_dofs': []},\n                                           'aero_settings': {'dt': dt,\n                                                             'integr_order': 2,\n                                                             'density': rho,\n                                                             'remove_predictor': False,\n                                                             'use_sparse': True,\n                                                             'rigid_body_motion': True,\n                                                             'use_euler': False,\n                                                             'remove_inputs': ['u_gust']},\n                                           'rigid_body_motion': True}}\n\n        settings['AsymptoticStability'] = {'sys_id': 'LinearAeroelastic',\n                                    'print_info': 'on',\n                                    'display_root_locus':'off',\n                                    'frequency_cutoff': 0,\n                                    'export_eigenvalues': 'on',\n                                    'num_evals':100}\n\n        settings['LinDynamicSim'] = {'dt': dt,\n                                      'n_tsteps': self.n_tstep,\n                                      'sys_id': 'LinearAeroelastic',\n                                      'postprocessors': ['BeamPlot', 'AerogridPlot'],\n                                      'postprocessors_settings': {'AerogridPlot': {\n                                          'u_inf': u_inf,\n                                          'include_rbm': 'on',\n                                          'include_applied_forces': 'on',\n                                          'minus_m_star': 0},\n                                          'BeamPlot': {'include_rbm': 'on',\n                                                       'include_applied_forces': 'on'}}}\n\n        settings['AerogridPlot'] = {'include_rbm': 'off',\n                                    'include_applied_forces': 'on',\n                                    'minus_m_star': 0,\n                                    'u_inf': u_inf\n                                    }\n        settings['AeroForcesCalculator'] = {'write_text_file': 'off',\n                                            'text_file_name': case_name + '_aeroforces.csv',\n                                            'screen_output': 'on',\n                                            'unsteady': 'off',\n                                            'coefficients': True,\n                                            'q_ref': 0.5 * rho * u_inf ** 2,\n                                            'S_ref': self.planform_area()\n                                            }\n        settings['BeamPlot'] = {'include_rbm': 'on',\n                                'include_applied_forces': 'on',\n                                'include_FoR': 'on'}\n\n        settings['BeamLoads'] = {'csv_output': 'off'}\n\n        settings['SaveData'] = {'save_aero': 'on',\n                                'save_structure': 'on',\n                                'save_linear': 'off'}\n\n        settings['StabilityDerivatives'] = {'u_inf': self.u_inf,\n                                            'S_ref': 12.809,\n                                            'b_ref': self.span,\n                                            'c_ref': 0.719}\n\n        config = configobj.ConfigObj()\n        config.filename = file_name\n        for k, v in settings.items():\n            config[k] = v\n        config.write()\n        self.settings = settings\n\n        self.config = config\n\nif __name__=='__main__':\n\n    ws = HortenWing(M=4,\n                    N=11,\n                    Mstarfactor=5,\n                    u_inf=28,\n                    rho=1.225,\n                    alpha_deg=4)\n"
  },
  {
    "path": "sharpy/cases/hangar/richards_wing.py",
    "content": "\"\"\"\nSimple Horten Wing as used by Richards. Baseline and simplified models\n\nRichards, P. W., Yao, Y., Herd, R. A., Hodges, D. H., & Mardanpour, P. (2016). Effect of Inertial and Constitutive\nProperties on Body-Freedom Flutter for Flying Wings. Journal of Aircraft. https://doi.org/10.2514/1.C033435\n\"\"\"\nimport numpy as np\nfrom sharpy.cases.hangar.horten_wing import HortenWing\nimport sharpy.utils.algebra as algebra\n\n\nclass Baseline(HortenWing):\n\n    def set_properties(self):\n\n        # Wing geometry\n        self.span = 20.0  # [m]\n        self.sweep_LE = 20 * np.pi / 180  # [rad] Leading Edge Sweep\n        self.c_root = 1.0  # [m] Root chord - Richards\n        self.taper_ratio = 0.25  # Richards\n        self.thrust_nodes = [self.n_node_fuselage - 1,\n                             self.n_node_fuselage + self.n_node_wing + 1]\n\n        self.loc_cg = 0.45 # CG position wrt to LE (from sectional analysis)\n        # EA is the reference in NATASHA - defined with respect to the midchord. SHARPy is wrt to LE and as a pct of\n        # local chord\n        self.main_ea_root = 0.33\n        self.main_ea_tip = 0.33\n        self.n_mass = 2 * self.n_elem_wing\n\n        # FUSELAGE GEOMETRY\n        self.fuselage_width = 1.65/2\n        self.c_fuselage = self.c_root\n\n        # WASH OUT\n        self.washout_root = 0*np.pi/180\n        self.washout_tip = -2 * np.pi / 180\n\n        # Horseshoe wake\n        self.horseshoe = False\n        self.wake_type = 2\n        self.dt_factor = 1\n        self.dt = 1 / self.M / self.u_inf * self.dt_factor\n\n        # Dynamics\n        self.n_tstep = int(self.physical_time/self.dt)\n        self.gust_intensity = 0.1\n\n        # Numerics\n        self.tolerance = 1e-12\n        self.fsi_tolerance = 1e-10\n        self.relaxation_factor = 0.2\n\n    def update_mass_stiffness(self, sigma=1., sigma_mass=1., payload=0):\n        \"\"\"\n        Sets the mass and stiffness properties of the default wing\n\n        Returns:\n\n        \"\"\"\n\n        n_elem_fuselage = self.n_elem_fuselage\n        n_elem_wing = self.n_elem_wing\n        n_node_wing = self.n_node_wing\n        n_node_fuselage = self.n_node_fuselage\n        c_root = self.c_root\n        taper_ratio = self.taper_ratio\n\n        # Local chord to root chord initialisation\n        c_bar_temp = np.linspace(c_root, taper_ratio * c_root, n_elem_wing)\n\n        # Structural properties at the wing root section from Richards 2016\n        ea = 1e6\n        ga = 1e6\n        gj = 4.24e5\n        eiy = 3.84e5\n        eiz = 2.46e7\n\n        root_i_beam = IBeam()\n        root_i_beam.build(c_root)\n        root_i_beam.rotation_axes = np.array([0, self.main_ea_root-0.25, 0])\n\n        root_airfoil = Airfoil()\n        root_airfoil.build(c_root)\n        root_i_beam.rotation_axes = np.array([0, self.main_ea_root-0.25, 0])\n\n        mu_0 = root_i_beam.mass + root_airfoil.mass\n        j_xx = root_i_beam.ixx + root_airfoil.ixx\n        j_yy = root_i_beam.iyy + root_airfoil.iyy\n        j_zz = root_i_beam.izz + root_airfoil.izz\n\n        # Number of stiffnesses used\n        n_stiffness = self.n_stiffness\n\n        # Initialise the stiffness database\n        base_stiffness = self.base_stiffness\n\n        stiffness_root = sigma * np.diag([ea, ga, ga, gj, eiy, eiz])\n        stiffness_tip = taper_ratio ** 2 * stiffness_root\n\n        # Assume a linear variation in the stiffness. Richards et al. use VABS on the linearly tapered wing to find the\n        # spanwise properties\n        alpha = np.linspace(0, 1, self.n_elem_wing)\n        for i_elem in range(0, self.n_elem_wing):\n            base_stiffness[i_elem + 1, :, :] = stiffness_root*(1-alpha[i_elem]**2) + stiffness_tip*alpha[i_elem]**2\n        base_stiffness[0] = base_stiffness[1]\n\n        # Mass variation along the span\n        # Right wing centre of mass - wrt to 0.25c\n        cm = (root_airfoil.centre_mass * root_airfoil.mass + root_i_beam.centre_mass * root_i_beam.mass) \\\n             / np.sum(root_airfoil.mass + root_i_beam.mass)\n        cg = np.array([0, -(cm[0] + 0.25 * self.c_root - self.main_ea_root), 0]) * 1\n        n_mass = self.n_mass\n        # sigma_mass = 1.25\n\n        # Initialise database\n        base_mass = self.base_mass\n\n        mass_root_right = np.diag([mu_0, mu_0, mu_0, j_xx, j_yy, j_zz]) * sigma_mass\n        mass_root_right[:3, -3:] = -algebra.skew(cg) * mu_0\n        mass_root_right[-3:, :3] = algebra.skew(cg) * mu_0\n\n        mass_root_left = np.diag([mu_0, mu_0, mu_0, j_xx, j_yy, j_zz]) * sigma_mass\n        mass_root_left[:3, -3:] = -algebra.skew(-cg) * mu_0\n        mass_root_left[-3:, :3] = algebra.skew(-cg) * mu_0\n\n        mass_tip_right = taper_ratio * mass_root_right\n        mass_tip_left = taper_ratio * mass_root_left\n\n        ixx_dummy = []\n        iyy_dummy = []\n        izz_dummy = []\n\n        for i_elem in range(self.n_elem_wing):\n            # Create full cross section\n            c_bar = self.c_root * ((1-alpha[i_elem]) + self.taper_ratio * alpha[i_elem])\n            x_section = WingCrossSection(c_bar)\n            # print(i_elem)\n            # print('Section Mass: %.2f ' %x_section.mass)\n            # print('Linear Mass: %.2f' % (mu_0 * (1-alpha[i_elem]) + mu_0 * self.taper_ratio * alpha[i_elem]))\n            # print('Section Ixx: %.4f' % x_section.ixx)\n            # print('Section Iyy: %.4f' % x_section.iyy)\n            # print('Section Izz: %.4f' % x_section.izz)\n            # print('Linear Ixx: %.2f' % (j_xx * (1-alpha[i_elem]) + j_xx * self.taper_ratio * alpha[i_elem]))\n            # base_mass[i_elem, :, :] = mass_root_right*(1-alpha[i_elem]) + mass_tip_right*alpha[i_elem]\n            # base_mass[i_elem + self.n_elem_wing + self.n_elem_fuselage - 1] = mass_root_left*(1-alpha[i_elem]) + mass_tip_left*alpha[i_elem]\n\n            base_mass[i_elem, :, :] = np.diag([x_section.mass, x_section.mass, x_section.mass,\n                                               x_section.ixx, x_section.iyy, x_section.izz])\n            cg = np.array([0, -(x_section.centre_mass[0] + (0.25 - self.main_ea_root) * c_bar / self.c_root), 0]) * 1\n            base_mass[i_elem, :3, -3:] = -algebra.skew(cg) * x_section.mass\n            base_mass[i_elem, -3:, :3] = algebra.skew(cg) * x_section.mass\n\n            base_mass[i_elem + self.n_elem_wing + self.n_elem_fuselage - 1, :, :] = np.diag([x_section.mass, x_section.mass, x_section.mass,\n                                               x_section.ixx, x_section.iyy, x_section.izz])\n            cg = np.array([0, -(x_section.centre_mass[0] + (0.25 - self.main_ea_root) * c_bar / self.c_root), 0]) * 1\n            base_mass[i_elem + self.n_elem_wing + self.n_elem_fuselage - 1, :3, -3:] = -algebra.skew(-cg) * x_section.mass\n            base_mass[i_elem + self.n_elem_wing + self.n_elem_fuselage - 1, -3:, :3] = algebra.skew(-cg) * x_section.mass\n\n            ixx_dummy.append(x_section.ixx)\n            iyy_dummy.append(x_section.iyy)\n            izz_dummy.append(x_section.izz)\n\n            # for item in x_section.items:\n            #     plt.plot(item.y, item.z)\n            # plt.scatter(x_section.centre_mass[0], x_section.centre_mass[1])\n            # plt.show()\n            # print(x_section.centre_mass)\n            # print(cg)\n\n        # plt.plot(range(self.n_elem_wing), ixx_dummy)\n        # plt.plot(range(self.n_elem_wing), iyy_dummy)\n        # plt.plot(range(self.n_elem_wing), izz_dummy)\n        # plt.show()\n        # Lumped mass initialisation\n        lumped_mass_nodes = self.lumped_mass_nodes\n        lumped_mass = self.lumped_mass\n        lumped_mass_inertia = self.lumped_mass_inertia\n        lumped_mass_position = self.lumped_mass_position\n\n        # Lumped masses nodal position\n        # 0 - Right engine\n        # 1 - Left engine\n        # 2 - Fuselage\n        lumped_mass_nodes[0] = 2\n        lumped_mass_nodes[1] = n_node_fuselage + n_node_wing + 1\n        lumped_mass_nodes[2] = 0\n\n        # Lumped mass value from Richards 2013\n        lumped_mass[0:2] = 51.445 / 9.81\n        lumped_mass[2] = 150 / 9.81 + payload\n        # lumped_mass_position[2] = [0, 0, -10.]\n\n        # Lumped mass inertia\n        lumped_mass_inertia[0, :, :] = np.diag([0.29547, 0.29322, 0.29547])\n        lumped_mass_inertia[1, :, :] = np.diag([0.29547, 0.29322, 0.29547])\n        lumped_mass_inertia[2, :, :] = np.diag([0.5, 1, 1]) * lumped_mass[2]\n\n        # Define class attributes\n        self.lumped_mass = lumped_mass * 1\n        self.lumped_mass_nodes = lumped_mass_nodes * 1\n        self.lumped_mass_inertia = lumped_mass_inertia * 1\n        self.lumped_mass_position = lumped_mass_position * 1\n\n        self.base_stiffness = base_stiffness\n        self.base_mass = base_mass\n\n\nclass CrossSection(object):\n    def __init__(self):\n        self.rho = 2770\n\n        self.rotation_axes = np.array([0, 0.33-0.25, 0])\n\n        self.y = np.ndarray((2,))\n        self.z = np.ndarray((2,))\n        self.t = np.ndarray((2,))\n\n    @property\n    def mass(self):\n        \"\"\"\n        Mass of the I beam per unit length\n        \"\"\"\n        return np.sum(self.t * self.elem_length) * self.rho\n\n    @property\n    def ixx(self):\n        ixx_ = np.sum(self.elem_length * self.t * self.rho * (self.elem_cm_y ** 2 + self.elem_cm_z ** 2))\n        return ixx_ + self.mass * (self.centre_mass[0] - self.rotation_axes[1]) ** 2\n\n    @property\n    def elem_length(self):\n        elem_length = np.sqrt(np.diff(self.y) ** 2 + np.diff(self.z) ** 2)\n        return elem_length\n\n    @property\n    def elem_cm_y(self):\n        elem_cm_y_ = np.ndarray((self.n_elem, ))\n        elem_cm_y_[:] = 0.5 * (self.y[:-1] + self.y[1:])\n        return elem_cm_y_\n\n    @property\n    def elem_cm_z(self):\n        elem_cm_z_ = np.ndarray((self.n_elem, ))\n        elem_cm_z_[:] = 0.5 * (self.z[:-1] + self.z[1:])\n        return elem_cm_z_\n\n    @property\n    def centre_mass(self):\n        y_cm = np.sum(self.elem_cm_y * self.elem_length) / np.sum(self.elem_length)\n        z_cm = np.sum(self.elem_cm_z * self.elem_length) / np.sum(self.elem_length)\n\n        return np.array([y_cm, z_cm])\n\n    @property\n    def iyy(self):\n        x_dom = np.linspace(-0.5, 0.5, 100)\n        x_cg = 0.5 * (x_dom[:-1].copy() + x_dom[1:].copy())\n        dx = np.diff(x_dom)[0]\n        iyy_ = 0\n        for elem in range(len(self.elem_length)):\n            z_cg = np.ones_like(x_cg) * self.elem_cm_z[elem]\n            iyy_ += np.sum(self.elem_length[elem] * self.t[elem] * dx * self.rho * (x_cg ** 2 + z_cg ** 2))\n        return iyy_ #np.sum(self.elem_length * self.t * self.rho * 1 * self.elem_cm_z ** 2)\n\n    @property\n    def izz(self):\n        x_dom = np.linspace(-0.5, 0.5, 100)\n        x_cg = 0.5 * (x_dom[:-1].copy() + x_dom[1:].copy())\n        dx = np.diff(x_dom)[0]\n        iyy_ = 0\n        izz_ = 0\n        for elem in range(len(self.elem_length)):\n            y_cg = np.ones_like(x_cg) * self.elem_cm_y[elem]\n            izz_ += np.sum(self.elem_length[elem] * self.t[elem] * dx * self.rho * (x_cg ** 2 + y_cg ** 2))\n        return izz_ #np.sum(self.elem_length * self.t * self.rho * 1 * self.elem_cm_y ** 2)\n\n    @property\n    def n_node(self):\n        return self.y.shape[0]\n\n    @property\n    def n_elem(self):\n        return self.n_node - 1\n\n    def build(self, y, z, t):\n        self.y = y\n        self.z = z\n        self.t = t\n\n\nclass IBeam(CrossSection):\n\n    def build(self, c_root):\n        t_skin = 0.127e-2\n        t_c = 0.12\n        w_I = 10e-2 * c_root  # Width of the Ibeam\n\n        self.rho = 2770\n\n        self.y = np.ndarray((self.n_node, ))\n        self.z = np.ndarray((self.n_node, ))\n        self.t = np.ndarray((self.n_node, ))\n\n        z_max = t_c * c_root\n        y = np.array([-w_I/2, w_I/2, 0, 0, -w_I/2, w_I/2])\n        z = np.array([z_max/2, z_max/2, z_max/2, -z_max/2, -z_max/2, -z_max/2])\n        t = np.array([t_skin, 0, t_skin, 0, t_skin])\n\n        self.y = y\n        self.z = z\n        self.t = t\n\n\nclass Airfoil(CrossSection):\n\n    def build(self, c_root):\n        t_c = 0.12\n        t_skin = 0.127e-2 * 1.5\n\n        y_dom = np.linspace(0, c_root, 100)\n        y = np.concatenate((y_dom, y_dom[:-1][::-1]))\n        z_dom = 5 * t_c * (0.2969 * np.sqrt(y_dom/c_root) -\n                                              0.1260 * y_dom/c_root -\n                                              0.3516 * (y_dom/c_root) ** 2 +\n                                              0.2843 * (y_dom/c_root) ** 3 -\n                                              0.1015 * (y_dom/c_root) ** 4) * c_root\n        z = np.concatenate((z_dom, -z_dom[:-1][::-1]))\n\n        self.y = y - 0.25 * c_root\n        self.z = z\n        self.t = t_skin * np.ones(self.n_elem)\n\n\nclass WingCrossSection:\n\n    def __init__(self, chord):\n        self.chord = chord\n\n        self.items = list()\n\n        self.items.append(Airfoil())\n        self.items.append(IBeam())\n\n        for item in self.items:\n            item.build(chord)\n\n    @property\n    def mass(self):\n        return np.sum([item.mass for item in self.items])\n\n    @property\n    def centre_mass(self):\n        y = np.sum([item.mass * item.centre_mass[0] for item in self.items]) / self.mass\n        z = np.sum([item.mass * item.centre_mass[1] for item in self.items]) / self.mass\n        return np.array([y, z])\n\n    @property\n    def ixx(self):\n        return np.sum([item.ixx for item in self.items])\n\n    @property\n    def iyy(self):\n        return np.sum([item.iyy for item in self.items])\n\n    @property\n    def izz(self):\n        return np.sum([item.izz for item in self.items])\n\n\nif __name__ == '__main__':\n\n    ws = Baseline(M=4,\n                  N=11,\n                  Mstarfactor=5,\n                  u_inf=28,\n                  rho=1.225,\n                  alpha_deg=4)\n\n    # ws.clean_test_files()\n    ws.update_mass_stiffness()\n    ws.update_fem_prop()\n    # ws.generate_fem_file()\n    ws.update_aero_properties()\n    # ws.generate_aero_file()\n    # ws.set_default_config_dict()\n"
  },
  {
    "path": "sharpy/cases/hangar/swept_flying_wing.py",
    "content": "\"\"\"\nGeneric Swept Flying Wing Class Generator\nN Goizueta Nov 18\n\"\"\"\n\nimport numpy as np\nimport os\nimport h5py as h5\nimport sharpy.utils.geo_utils as geo_utils\nimport sharpy.utils.algebra as algebra\nimport configobj\nimport scipy.linalg as sclalg\n\n\nclass SweptWing:\n    \"\"\"\n    Generic Swept Flying Wing Wing Class Generator\n\n    A ``HortenWing`` class contains the basic geometry and properties of a simplified swept flying wing, as\n    described by Simpson.\n\n    This class allows the user to quickly obtain SHARPy cases for the purposes of parametric analyses.\n\n    \"\"\"\n\n    def __init__(self,\n                 M,\n                 N,\n                 Mstarfactor,\n                 u_inf,\n                 rho=1.225,\n                 alpha_deg=0.,\n                 beta_deg=0.,\n                 cs_deflection_deg=0.,\n                 thrust=5.,\n                 physical_time=10,\n                 case_name_format=0,\n                 case_remarks=None,\n                 case_route='./cases/',\n                 case_name='swf'):\n\n        # Discretisation\n        self.M = M\n        self.N = N\n        self.Mstarfactor = Mstarfactor\n\n        self.n_node_elem = 3\n        self.n_elem_wing = 11\n        self.n_elem_fuselage = 0\n        self.n_surfaces = 4\n\n        # Case admin\n        if case_name_format == 0:\n            self.case_name = case_name + '_u_inf%.4d_a%.4d' % (int(u_inf), int(alpha_deg * 100))\n        elif case_name_format == 1:\n            self.case_name = case_name + '_u_inf%.4d' % int(u_inf*100)\n        elif case_name_format == 2:\n            self.case_name = case_name\n        else:\n            self.case_name = case_name + '_u_inf%.4d_%s' % (int(u_inf), case_remarks)\n\n        self.case_route = os.path.abspath(case_route + self.case_name + '/')\n\n        self.config = None\n\n        # Flight conditions\n        self.u_inf = u_inf\n        self.rho = rho\n        self.alpha = alpha_deg * np.pi / 180\n        self.beta = beta_deg * np.pi / 180\n        self.cs_deflection = cs_deflection_deg * np.pi / 180\n        self.thrust = thrust\n\n        # Compute number of nodes\n        n_node = 0\n        self.n_node_wing = self.n_elem_wing * (self.n_node_elem - 1)\n        self.n_node_fuselage = self.n_elem_fuselage * self.n_node_elem\n        n_node += 2 * self.n_node_wing + 1\n        self.n_node = n_node\n\n        # Compute number of elements\n        self.n_elem = 2 * (self.n_elem_wing + self.n_elem_fuselage)\n\n        # Wing geometry\n        self.span = 8  # [m]\n        self.sweep_LE = 20 * np.pi / 180  # [rad] Leading Edge Sweep\n        self.c_root = 1.15  # [m] Root chord\n        self.taper_ratio = 0.65 * self.c_root\n        self.thrust_nodes = [self.n_node_fuselage + 2,\n                             self.n_node_fuselage + self.n_node_wing + 2]\n        # self.thrust_nodes = [1]\n\n        self.loc_cg = 0.45  # CG position wrt to LE (from sectional analysis)\n        self.ea_offset_root = 0.13  # from Mardanpour\n        self.ea_offset_tip = -1.644 * 0.0254\n        self.main_ea_root = 0.25\n        self.main_ea_tip = 0.25\n\n        # FUSELAGE GEOMETRY\n        self.fuselage_width = 0\n        # self.fuselage_width = 0.8248\n        # self.c_fuselage = 84*0.0254\n\n        # WASH OUT\n        self.washout_root = 0*np.pi/180\n        self.washout_tip = -2 * np.pi / 180\n\n        # Horseshoe wake\n        self.horseshoe = False\n        self.wake_type = 2\n        self.dt_factor = 1\n        self.dt = 1 / self.M / self.u_inf * self.dt_factor\n\n        # Dynamics\n        self.n_tstep = int(physical_time/self.dt)\n        self.gust_intensity = 0.1\n\n        # Numerics\n        self.tolerance = 1e-12\n        self.fsi_tolerance = 1e-10\n        self.relaxation_factor = 0.2\n\n        # H5 Variables initialisation as class attributes\n        # coordinates\n        self.x = np.zeros((n_node,))\n        self.y = np.zeros((n_node,))\n        self.z = np.zeros((n_node,))\n        # beam number\n        self.beam_number = np.zeros(self.n_elem, dtype=int)\n        # frame of reference delta\n        self.frame_of_reference_delta = np.zeros((self.n_elem, self.n_node_elem, 3))\n        # connectivity of beams\n        self.connectivities = np.zeros((self.n_elem, self.n_node_elem), dtype=int)\n        # stiffness\n        self.n_stiffness = self.n_elem_wing + self.n_elem_fuselage\n        self.base_stiffness = np.zeros((self.n_stiffness, 6, 6))\n        self.elem_stiffness = np.zeros((self.n_elem,), dtype=int)\n        # mass\n        self.n_mass = self.n_elem_wing\n        self.base_mass = np.zeros((self.n_mass, 6, 6))\n        self.elem_mass = np.zeros(self.n_elem, dtype=int)\n        # boundary conditions\n        self.boundary_conditions = np.zeros((n_node,), dtype=int)\n        # applied forces\n        self.app_forces = np.zeros((n_node, 6))\n        self.n_lumped_mass = 3\n\n        self.lumped_mass_nodes = np.zeros((self.n_lumped_mass), dtype=int)\n        self.lumped_mass = np.zeros(self.n_lumped_mass)\n        self.lumped_mass_inertia = np.zeros((self.n_lumped_mass, 3, 3))\n        self.lumped_mass_position = np.zeros((self.n_lumped_mass, 3))\n\n        # Aerodynamic properties\n        # H5 AERO FILE VARIABLES INITIALISATION\n        # airfoil distribution\n        self.airfoil_distribution = np.zeros((self.n_elem, self.n_node_elem), dtype=int)\n        # surface distribution\n        self.surface_distribution = np.zeros((self.n_elem,), dtype=int) - 1\n        self.surface_m = np.zeros((self.n_surfaces,), dtype=int)\n        self.m_distribution = 'uniform'\n        # aerodynamic nodes boolean\n        self.aero_nodes = np.zeros((self.n_node,), dtype=bool)\n        # aero twist\n        self.twist = np.zeros((self.n_elem, self.n_node_elem))\n        # chord\n        self.chord = np.zeros((self.n_elem, self.n_node_elem))\n        # elastic axis\n        self.elastic_axis = np.zeros((self.n_elem, self.n_node_elem))\n\n        # control surfaces attributes initialisation\n        self.n_control_surfaces = 1\n        self.control_surface = np.zeros((self.n_elem, self.n_node_elem), dtype=int) - 1\n        self.control_surface_type = np.zeros((self.n_control_surfaces,), dtype=int)\n        self.control_surface_deflection = np.zeros((self.n_control_surfaces,))\n        self.control_surface_chord = np.zeros((self.n_control_surfaces,), dtype=int)\n        self.control_surface_hinge_coord = np.zeros((self.n_control_surfaces,), dtype=float)\n\n        self.settings = dict()\n\n    def update_mass_stiffness(self, sigma=1.):\n        r\"\"\"\n        The mass and stiffness matrices are computed. Both vary over the span of the wing, hence a\n        dictionary is created that acts as a database of the different properties along the wing.\n\n        The variation of the stiffness is cubic along the span:\n\n            .. math:: \\mathbf{K} = \\mathbf{K}_0\\bar{c}^3\n\n        where :math:`\\mathbf{K}_0 is the stiffness of the wing root section and :math:`\\bar{c}` is\n        the ratio between the local chord and the root chord.\n\n        The variation of the sectional mass is quadratic along the span:\n\n            .. math:: \\mu = \\mu_0\\,\\bar{c}^2\n\n        where :math:`\\mu` is the mass per unit span and the zero subscript denotes the root value.\n\n        The sectional inertia is varied linearly along the span, based on the information by Mardanpour 2013.\n\n        Three lumped masses are included with the following properties (Richards, 2013)\n\n        =====  =====  =================  =========  ===============================  ============\n        No     Node   Relative Position  Mass [kg]  Inertia [kg m^2]                 Description\n        =====  =====  =================  =========  ===============================  ============\n        ``0``  ``2``  ``[0,0,0]``        ``5.24``   ``[0.29547, 0.29322, 0.29547]``  Right Engine\n        ``1``  ``S``  ``[0,0,0]``        ``5.24``   ``[0.29547, 0.29322, 0.29547]``  Left Engine\n        ``2``  ``0``  ``[0,0,0]``        ``15.29``  ``[0.5, 1.0, 1.0]*15.29``        Fuselage\n        =====  =====  =================  =========  ===============================  ============\n\n\n        Args:\n            sigma (float): stiffening factor\n\n        Returns:\n\n        \"\"\"\n\n        n_elem_fuselage = self.n_elem_fuselage\n        n_elem_wing = self.n_elem_wing\n        n_node_wing = self.n_node_wing\n        n_node_fuselage = self.n_node_fuselage\n        c_root = self.c_root\n        taper_ratio = self.taper_ratio\n\n        # Local chord to root chord initialisation\n        c_bar_temp = np.linspace(c_root, taper_ratio * c_root, n_elem_wing)\n\n        # Structural properties at the wing root section from Richards 2016\n        ea = 1e7\n        ga = 1e9\n        gj = 7.5e4\n        eiy = 4.5e4\n        eiz = 2.4e6\n\n        ea_t = 1e7\n        ga_t = 1e9\n        gj_t = 3e4\n        eiy_t = 2e4\n        eiz_t = 1e6\n\n        # Sectional mass from Richards 2016\n        mu_r = 15\n        mu_t = 2\n        j_r = 0.5\n        j_t = 0.1\n\n        # Number of stiffnesses used\n        n_stiffness = self.n_stiffness\n\n        # Initialise the stiffness database\n        base_stiffness = self.base_stiffness\n\n        # Wing root section stiffness properties\n        stiffness_root = sigma * np.diag([ea, ga, ga, gj, eiy, eiz])\n        stiffness_tip = sigma * np.diag([ea_t, ga_t, ga_t, gj_t, eiy_t, eiz_t])\n\n        # Linear variation between root and tip\n        alpha = np.linspace(0, 1, self.n_elem_wing)\n        for i_elem in range(0, self.n_elem_wing):\n            base_stiffness[i_elem, :, :] = stiffness_root*(1-alpha[i_elem]) + stiffness_tip*alpha[i_elem]\n\n        # Mass variation along the span\n        n_mass = self.n_mass\n        sigma_mass = 1\n\n        # Initialise database\n        base_mass = self.base_mass\n\n        chi_root = np.array([0, 5.29, 0*-0.594]) * 0\n        m_root = np.eye(3) * mu_r\n        j_root = np.array([[j_r, 0., 0.],\n                           [0., j_r, 0.],\n                           [0., 0., 2*j_r]])\n\n        mass_root = sclalg.block_diag(m_root, j_root)\n        mass_root[:3, -3:] = -mu_r * algebra.skew(chi_root)\n        mass_root[-3:, :3] = mu_r * algebra.skew(chi_root)\n\n        chi_tip = chi_root # np.array([0, -1.644, -0.563])\n        j_tip = np.array([[j_t, 0.00000000e+00, 0.00000000e+00],\n                          [0.00000000e+00, j_t, 0.00000000e+00],\n                          [0.00000000e+00, 0.00000000e+00, 2*j_t]])\n        mass_tip = sclalg.block_diag(np.diag([mu_t, mu_t, mu_t]), j_tip)\n        mass_tip[:3, -3:] += -algebra.skew(chi_tip) * mu_t\n        mass_tip[-3:, :3] += -algebra.skew(chi_tip) * mu_t\n\n        for i_elem in range(self.n_elem_wing):\n            base_mass[i_elem, :, :] = mass_root*(1-alpha[i_elem]) + mass_tip*alpha[i_elem]\n\n        # Lumped mass initialisation\n        # 0 - Right engine\n        # 1 - Left engine\n\n        lumped_mass_nodes = self.lumped_mass_nodes\n        lumped_mass = self.lumped_mass\n        lumped_mass_inertia = self.lumped_mass_inertia\n        lumped_mass_position = self.lumped_mass_position\n\n        # Lumped masses nodal position\n        lumped_mass_nodes[0] = 2\n        lumped_mass_nodes[1] = n_node_fuselage + n_node_wing + 2\n\n        # Engine mass\n        lumped_mass[0:2] = 40\n        lumped_mass_inertia[0, :, :] = np.diag([5, 5, 5])\n        lumped_mass_inertia[1, :, :] = np.diag([5, 5, 5])\n\n        lumped_mass_position[0] = np.array([0, -0.1, 0])\n        lumped_mass_position[1] = np.array([0, 0.1, 0])\n\n        # Define class attributes\n        self.lumped_mass = lumped_mass\n        self.lumped_mass_nodes = lumped_mass_nodes\n        self.lumped_mass_inertia = lumped_mass_inertia\n        self.lumped_mass_position = lumped_mass_position\n\n        self.base_stiffness = base_stiffness\n        self.base_mass = base_mass\n\n    def update_fem_prop(self):\n        \"\"\"\n        Computes the FEM properties prior to analysis such as the connectivity matrix, coordinates, etc\n\n        Returns:\n\n        \"\"\"\n        # Obtain class attributes\n        n_node_elem = self.n_node_elem\n        n_elem = self.n_elem\n        n_elem_wing = self.n_elem_wing\n        n_elem_fuselage = self.n_elem_fuselage\n        n_node = self.n_node\n        n_node_wing = self.n_node_wing\n        n_node_fuselage = self.n_node_fuselage\n        fuselage_width = self.fuselage_width\n        thrust = self.thrust\n        thrust_nodes = self.thrust_nodes\n        span = self.span\n        sweep_LE = self.sweep_LE\n\n        # mass and stiffness matrices\n        stiffness = self.base_stiffness\n        mass = self.base_mass\n        n_stiffness = stiffness.shape[0]\n        n_mass = mass.shape[0]\n\n        # H5 FEM FILE VARIABLES INITIALISATION\n        # coordinates\n        x = np.zeros((n_node,))\n        y = np.zeros((n_node,))\n        z = np.zeros((n_node,))\n        # twist\n        structural_twist = np.zeros_like(x)\n        # beam number\n        beam_number = np.zeros(n_elem, dtype=int)\n        # frame of reference delta\n        frame_of_reference_delta = np.zeros((n_elem, n_node_elem, 3))\n        # connectivity of beams\n        conn = np.zeros((n_elem, n_node_elem), dtype=int)\n        # stiffness\n        stiffness = np.zeros((n_stiffness, 6, 6))\n        elem_stiffness = np.zeros((n_elem,), dtype=int)\n        # mass\n        mass = np.zeros((n_mass, 6, 6))\n        elem_mass = np.zeros(n_elem, dtype=int)\n        # boundary conditions\n        boundary_conditions = np.zeros((n_node,), dtype=int)\n        # applied forces\n        app_forces = np.zeros((n_node, 6))\n\n        # assemble connectivites\n        # worked elements\n        we = 0\n        # worked nodes\n        wn = 0\n\n        # # RIGHT RIGID FUSELAGE\n        # beam_number[we:we + 1] = 0\n        # # coordinates\n        # x[wn:wn + n_node_fuselage] = 0\n        # y[wn:wn + n_node_fuselage] = np.linspace(0, fuselage_width / 2, n_node_fuselage)\n        #\n        # # connectivities\n        # elem_mass[0] = 0\n        # conn[we, :] = [0, 2, 1]\n        #\n        # # frame of reference change\n        # frame_of_reference_delta[0, 0, :] = [-1.0, 0.0, 0.0]\n        # frame_of_reference_delta[0, 1, :] = [-1.0, 0.0, 0.0]\n        # frame_of_reference_delta[0, 2, :] = [-1.0, 0.0, 0.0]\n        #\n        # # element stiffness\n        # elem_stiffness[0] = 0\n        # elem_mass[0] = 0\n        #\n        # # boundary conditions\n        # boundary_conditions[0] = 1\n        #\n        # # applied forces - engine 1\n        # app_forces[thrust_nodes[0]] = [0, thrust, 0,\n        #                                0, 0, 0]\n        #\n        # # updated worked nodes and elements\n        # we += n_elem_fuselage\n        # wn += n_node_fuselage\n\n        # RIGHT WING\n        beam_number[we:we + n_elem_wing] = 0\n        # y coordinate (positive right)\n        y[wn:wn + n_node_wing + 1] = np.linspace(0,\n                                             span / 2,\n                                             n_node_wing + 1)\n        x[wn:wn + n_node_wing + 1] = y[wn:wn + n_node_wing + 1] * np.tan(sweep_LE)\n\n        # connectivities\n        for ielem in range(n_elem_wing):\n            conn[we + ielem, :] = (np.ones(n_node_elem) * (we + ielem) * (n_node_elem - 1) +\n                                   [0, 2, 1])\n            for inode in range(n_node_elem):\n                frame_of_reference_delta[we + ielem, inode, :] = [-1.0, 0.0, 0.0]\n\n            elem_mass[we + ielem] = ielem\n            elem_stiffness[we + ielem] = ielem\n\n        # element stiffness and mass\n        # elem_stiffness[we:we+n_elem_wing] = 0\n        # elem_mass[we:we+n_elem_wing] = 0\n\n        # boundary conditions of free end\n        boundary_conditions[wn + n_node_wing - 1] = -1\n        # Clamped end\n        boundary_conditions[0] = 1\n\n        # applied forces - engine 1\n        app_forces[thrust_nodes[0]] = [-thrust * np.sin(sweep_LE), thrust * np.cos(sweep_LE), 0,\n                                       0, 0, 0]\n\n        # update worked elements and nodes\n        we += n_elem_wing\n        wn += n_node_wing + 1\n\n        # # LEFT FUSELAGE\n        # beam_number[we:we + n_elem_fuselage] = 2\n        # # coordinates\n        # y[wn:wn + n_node_fuselage - 1] = np.linspace(0,\n        #                                              -fuselage_width / 2,\n        #                                              n_node_fuselage)[1:]\n        # x[wn:wn + n_node_fuselage - 1] = 0\n        #\n        # # connectivity\n        # conn[we, :] = [0, wn + 1, wn]\n        #\n        # # frame of reference delta\n        # for ielem in range(n_elem_fuselage):\n        #     for inode in range(n_node_elem):\n        #         frame_of_reference_delta[we + ielem, inode, :] = [1.0, 0.0, 0.0]\n        #\n        # # element stiffness and mass\n        # elem_stiffness[we:we + n_elem_fuselage] = 0\n        # elem_mass[we:we + n_elem_fuselage] = 0\n        #\n        # # applied forces - engine 2\n        # app_forces[thrust_nodes[1]] = [0, -thrust, 0,\n        #                                0, 0, 0]\n        #\n        # # update worked elements and nodes\n        # we += n_elem_fuselage\n        # wn += n_node_fuselage - 1\n\n        # LEFT WING\n        # coordinates\n        beam_number[we:we + n_elem_wing] = 1\n        y[wn:wn + n_node_wing] = np.linspace(0,\n                                             -span / 2,\n                                             n_node_wing + 1)[1:]\n        x[wn:wn + n_node_wing] = -1 * y[wn:wn + n_node_wing] * np.tan(sweep_LE)\n\n        # left wing connectivities\n        for ielem in range(n_elem_wing):\n            conn[we + ielem, :] = np.ones(n_node_elem) * (we + ielem) * (n_node_elem - 1) + [0, 2, 1]\n\n            for inode in range(n_node_elem):\n                frame_of_reference_delta[we + ielem, inode, :] = [1.0, 0.0, 0.0]\n\n            elem_mass[we + ielem] = ielem\n            elem_stiffness[we + ielem] = ielem\n\n        # element stiffness and mass\n        # elem_stiffness[we:we+n_node_wing] = 0\n        conn[we, 0] = 0\n\n        # boundary conditions at the free end\n        boundary_conditions[wn + n_node_wing - 1] = -1\n\n        # applied forces - engine 2\n        app_forces[thrust_nodes[1]] = [-thrust * np.sin(sweep_LE), -thrust * np.cos(sweep_LE), 0,\n                                       0, 0, 0]\n\n        # update worked elements and nodes\n        we += n_elem_wing\n        wn += n_node_wing\n\n        # set attributes\n        self.x = x\n        self.y = y\n        self.z = z\n        self.connectivities = conn\n        self.elem_stiffness = elem_stiffness\n        self.elem_mass = elem_mass\n        self.frame_of_reference_delta = frame_of_reference_delta\n        self.boundary_conditions = boundary_conditions\n        self.beam_number = beam_number\n        self.app_forces = app_forces\n\n    def generate_fem_file(self):\n        \"\"\"\n        Generates the ``.fem.h5`` folder containing the structural information of the problem\n\n        The file is written to ``self.case_route / self.case_name .fem.h5``\n\n        \"\"\"\n\n        if not os.path.exists(self.case_route):\n                os.makedirs(self.case_route)\n\n        with h5.File(self.case_route + '/' + self.case_name + '.fem.h5', 'a') as h5file:\n            coordinates = h5file.create_dataset('coordinates',\n                                                data=np.column_stack((self.x, self.y, self.z)))\n            connectivities = h5file.create_dataset('connectivities', data=self.connectivities)\n            num_nodes_elem_handle = h5file.create_dataset(\n                'num_node_elem', data=self.n_node_elem)\n            num_nodes_handle = h5file.create_dataset(\n                'num_node', data=self.n_node)\n            num_elem_handle = h5file.create_dataset(\n                'num_elem', data=self.n_elem)\n            stiffness_db_handle = h5file.create_dataset(\n                'stiffness_db', data=self.base_stiffness)\n            stiffness_handle = h5file.create_dataset(\n                'elem_stiffness', data=self.elem_stiffness)\n            mass_db_handle = h5file.create_dataset(\n                'mass_db', data=self.base_mass)\n            mass_handle = h5file.create_dataset(\n                'elem_mass', data=self.elem_mass)\n            frame_of_reference_delta_handle = h5file.create_dataset(\n                'frame_of_reference_delta', data=self.frame_of_reference_delta)\n            structural_twist_handle = h5file.create_dataset(\n                'structural_twist', data=np.zeros((self.n_elem, self.n_node_elem)))\n            bocos_handle = h5file.create_dataset(\n                'boundary_conditions', data=self.boundary_conditions)\n            beam_handle = h5file.create_dataset(\n                'beam_number', data=self.beam_number)\n            app_forces_handle = h5file.create_dataset(\n                'app_forces', data=self.app_forces)\n            lumped_mass_nodes_handle = h5file.create_dataset(\n                'lumped_mass_nodes', data=self.lumped_mass_nodes)\n            lumped_mass_handle = h5file.create_dataset(\n                'lumped_mass', data=self.lumped_mass)\n            lumped_mass_inertia_handle = h5file.create_dataset(\n                'lumped_mass_inertia', data=self.lumped_mass_inertia)\n            lumped_mass_position_handle = h5file.create_dataset(\n                'lumped_mass_position', data=self.lumped_mass_position)\n\n    def clean_test_files(self):\n        \"\"\"\n        Clears previously generated files\n        \"\"\"\n\n        case_name = self.case_name\n        route = self.case_route\n\n        # FEM\n        fem_file_name = route + '/' + case_name + '.fem.h5'\n        if os.path.isfile(fem_file_name):\n            os.remove(fem_file_name)\n\n        # Dynamics File\n        dyn_file_name = route + '/' + case_name + '.dyn.h5'\n        if os.path.isfile(dyn_file_name):\n            os.remove(dyn_file_name)\n\n        # Aerodynamics File\n        aero_file_name = route + '/' + case_name + '.aero.h5'\n        if os.path.isfile(aero_file_name):\n            os.remove(aero_file_name)\n\n        # Solver file\n        solver_file_name = route + '/' + case_name + '.sharpy'\n        if os.path.isfile(solver_file_name):\n            os.remove(solver_file_name)\n\n        # Flight conditions file\n        flightcon_file_name = route + '/' + case_name + '.flightcon.txt'\n        if os.path.isfile(flightcon_file_name):\n            os.remove(flightcon_file_name)\n\n        # if os.path.isdir(route):\n        #     os.system('rm -r %s' %route)\n\n    def update_aero_properties(self):\n        \"\"\"\n        Updates the aerodynamic properties of the horten wing\n\n        \"\"\"\n\n        # Retrieve attributes\n        n_elem = self.n_elem\n        n_node_elem = self.n_node_elem\n        n_node_wing = self.n_node_wing\n        n_node_fuselage = self.n_node_fuselage\n        n_elem_fuselage = self.n_elem_fuselage\n        n_elem_wing = self.n_elem_wing\n        c_root = self.c_root\n        taper_ratio = self.taper_ratio\n        washout_root = self.washout_root\n        washout_tip = self.washout_tip\n        n_control_surfaces = self.n_control_surfaces\n        cs_deflection = self.cs_deflection\n        m = self.M\n        main_ea_root = self.main_ea_root\n        main_ea_tip = self.main_ea_tip\n        airfoil_distribution = self.airfoil_distribution\n        chord = self.chord\n        surface_distribution = self.surface_distribution\n        surface_m = self.surface_m\n        aero_nodes = self.aero_nodes\n        elastic_axis = self.elastic_axis\n        twist = self.twist\n\n        control_surface = self.control_surface\n        control_surface_type = self.control_surface_type\n        control_surface_deflection = self.control_surface_deflection\n        control_surface_chord = self.control_surface_chord\n        control_surface_hinge_coord = self.control_surface_hinge_coord\n\n        self.dt = 1 / self.M / self.u_inf\n\n        # control surface type: 0 = static\n        # control surface type: 1 = dynamic\n        control_surface_type[0] = 0\n        control_surface_deflection[0] = cs_deflection\n        control_surface_chord[0] = 2  # m\n        control_surface_hinge_coord[0] = 0.25\n\n        # # RIGHT FUSELAGE (Surface 0, Beam 0)\n        we = 0\n        wn = 0\n        #\n        # i_surf = 0\n        # airfoil_distribution[we:we + n_elem_fuselage] = 0\n        # surface_distribution[we:we + n_elem_fuselage] = i_surf\n        # surface_m[i_surf] = m\n        #\n        # aero_nodes[wn:wn + n_node_fuselage] = True\n        #\n        # temp_chord = np.linspace(self.c_fuselage, self.c_root, self.n_node_fuselage)\n        # temp_washout = washout_root\n        #\n        # # apply chord and elastic axis at each node\n        # node_counter = 0\n        # for ielem in range(we, we + n_elem_fuselage):\n        #     for i_local_node in range(n_node_elem):\n        #         if not i_local_node == 0:\n        #             node_counter += 1\n        #         chord[ielem, i_local_node] = temp_chord[node_counter]\n        #         elastic_axis[ielem, i_local_node] = main_ea_root\n        #         twist[ielem, i_local_node] = -temp_washout\n        #\n        # we += n_elem_fuselage\n        # wn += n_node_fuselage\n\n        # RIGHT WING (Surface 1, Beam 1)\n        # surface_id\n        i_surf = 0\n        airfoil_distribution[we:we + n_elem_wing, :] = 0\n        surface_distribution[we:we + n_elem_wing] = i_surf\n        surface_m[i_surf] = m\n\n        # specify aerodynamic characteristics of wing nodes\n        aero_nodes[wn:wn + n_node_wing + 1] = True\n\n        # linear taper initialisation\n        temp_chord = np.linspace(c_root, taper_ratio * c_root, n_node_wing + 1)\n\n        # linear wash out initialisation\n        temp_washout = np.linspace(washout_root, washout_tip, n_node_wing + 1)\n\n        # elastic axis variation\n        temp_ea = np.linspace(main_ea_root, main_ea_tip, n_node_wing + 1)\n\n        # apply chord and elastic axis at each node\n        node_counter = 0\n        for ielem in range(we, we + n_elem_wing):\n            for i_local_node in range(n_node_elem):\n                if not i_local_node == 0:\n                    node_counter += 1\n                chord[ielem, i_local_node] = temp_chord[node_counter]\n                elastic_axis[ielem, i_local_node] = temp_ea[node_counter]\n                twist[ielem, i_local_node] = -temp_washout[node_counter]\n                if ielem >= round((we + n_elem_wing // 2)):\n                    control_surface[ielem, i_local_node] = 0\n\n        # update working element and node\n        we += n_elem_wing\n        wn += n_node_wing + 1\n\n        # # LEFT FUSELAGE (Surface 2, Beam 2)\n        # i_surf = 2\n        # airfoil_distribution[we:we + n_elem_fuselage] = 0\n        # surface_distribution[we:we + n_elem_fuselage] = i_surf\n        # surface_m[i_surf] = m\n        #\n        # aero_nodes[wn:wn + n_node_fuselage] = True\n        #\n        # temp_chord = np.linspace(self.c_fuselage, self.c_root, self.n_node_fuselage)\n        # temp_washout = washout_root\n        #\n        # # apply chord and elastic axis at each node\n        # node_counter = 0\n        # for ielem in range(we, we + n_elem_fuselage):\n        #     for i_local_node in range(n_node_elem):\n        #         if not i_local_node == 0:\n        #             node_counter += 1\n        #         chord[ielem, i_local_node] = temp_chord[node_counter]\n        #         elastic_axis[ielem, i_local_node] = main_ea_root\n        #         twist[ielem, i_local_node] = -temp_washout\n        #\n        # we += n_elem_fuselage\n        # wn += n_node_fuselage\n\n        # LEFT WING (Surface 3, Beam 3)\n        i_surf = 1\n        airfoil_distribution[we:we + n_elem_wing, :] = 0\n        surface_distribution[we: we + n_elem_wing] = i_surf\n        surface_m[i_surf] = m\n\n        # linear taper initialisation\n        temp_chord = np.linspace(c_root, taper_ratio * c_root, n_node_wing + 1)\n\n        # linear wash out initialisation\n        temp_washout = np.linspace(washout_root, washout_tip, n_node_wing + 1)\n\n        # specify aerodynamic characterisics of wing nodes\n        aero_nodes[wn:wn + n_node_wing] = True\n\n        # linear taper initialisation\n        # apply chord and elastic axis at each node\n        node_counter = 0\n        for ielem in range(we, we + n_elem_wing):\n            for i_local_node in range(n_node_elem):\n                if not i_local_node == 0:\n                    node_counter += 1\n                chord[ielem, i_local_node] = temp_chord[node_counter]\n                elastic_axis[ielem, i_local_node] = temp_ea[node_counter]\n                twist[ielem, i_local_node] = -temp_washout[node_counter]\n                if ielem >= round((we + n_elem_wing // 2)):\n                    control_surface[ielem, i_local_node] = 0\n\n        # update working element and node\n        we += n_elem_wing\n        wn += n_node_wing\n\n        # end node is the middle node\n        mid_chord = np.array(chord[:, 1], copy=True)\n        chord[:, 1] = chord[:, 2]\n        chord[:, 2] = mid_chord\n\n        mid_ea = np.array(elastic_axis[:, 1], copy=True)\n        elastic_axis[:, 1] = elastic_axis[:, 2]\n        elastic_axis[:, 2] = mid_ea\n\n        # Update aerodynamic attributes of class\n        self.chord = chord\n        self.twist = twist\n        self.aero_nodes = aero_nodes\n        self.elastic_axis = elastic_axis\n        self.control_surface = control_surface\n\n    def generate_aero_file(self, route=None, case_name=None):\n        \"\"\"\n        Generates the ``.aero.h5`` file with the aerodynamic properties of the wing\n\n        Args:\n            route (str): route to write case file. If None is specified the default will be used\n            case_name (str): name of file. If None is specified the default will be used\n\n        \"\"\"\n\n        if not route:\n            route = self.case_route\n\n        if not case_name:\n            case_name = self.case_name\n\n        if not os.path.isdir(self.case_route):\n            os.makedirs(self.case_route)\n\n        chord = self.chord\n        twist = self.twist\n        airfoil_distribution = self.airfoil_distribution\n        surface_distribution = self.surface_distribution\n        surface_m = self.surface_m\n        m_distribution = self.m_distribution\n        aero_nodes = self.aero_nodes\n        elastic_axis = self.elastic_axis\n        control_surface = self.control_surface\n        control_surface_deflection = self.control_surface_deflection\n        control_surface_chord = self.control_surface_chord\n        control_surface_hinge_coord = self.control_surface_hinge_coord\n        control_surface_type = self.control_surface_type\n\n        control_surface_deflection[0] = self.cs_deflection\n\n        with h5.File(route + '/' + case_name + '.aero.h5', 'a') as h5file:\n            airfoils_group = h5file.create_group('airfoils')\n            # add one airfoil\n            naca_airfoil_main = airfoils_group.create_dataset('0', data=np.column_stack(\n                geo_utils.generate_naca_camber(P=0, M=0)))\n            naca_airfoil_tail = airfoils_group.create_dataset('1', data=np.column_stack(\n                geo_utils.generate_naca_camber(P=0, M=0)))\n            naca_airfoil_fin = airfoils_group.create_dataset('2', data=np.column_stack(\n                geo_utils.generate_naca_camber(P=0, M=0)))\n\n            # chord\n            chord_input = h5file.create_dataset('chord', data=chord)\n            dim_attr = chord_input.attrs['units'] = 'm'\n\n            # twist\n            twist_input = h5file.create_dataset('twist', data=twist)\n            dim_attr = twist_input.attrs['units'] = 'rad'\n\n            # airfoil distribution\n            airfoil_distribution_input = h5file.create_dataset('airfoil_distribution', data=airfoil_distribution)\n\n            surface_distribution_input = h5file.create_dataset('surface_distribution', data=surface_distribution)\n            surface_m_input = h5file.create_dataset('surface_m', data=surface_m)\n            m_distribution_input = h5file.create_dataset('m_distribution',\n                                                         data=m_distribution.encode('ascii', 'ignore'))\n\n            aero_node_input = h5file.create_dataset('aero_node', data=aero_nodes)\n            elastic_axis_input = h5file.create_dataset('elastic_axis', data=elastic_axis)\n\n            control_surface_input = h5file.create_dataset('control_surface', data=control_surface)\n            control_surface_deflection_input = h5file.create_dataset('control_surface_deflection',\n                                                                     data=control_surface_deflection)\n            control_surface_chord_input = h5file.create_dataset('control_surface_chord', data=control_surface_chord)\n            control_surface_hinge_coord_input = h5file.create_dataset('control_surface_hinge_coord',\n                                                                      data=control_surface_hinge_coord)\n            control_surface_types_input = h5file.create_dataset('control_surface_type', data=control_surface_type)\n\n    def set_default_config_dict(self, route=None, case_name=None):\n        \"\"\"\n        Generates default solver configuration file\n        Returns:\n\n        \"\"\"\n\n        if not route:\n            route = self.case_route\n\n        if not case_name:\n            case_name = self.case_name\n\n        u_inf = self.u_inf\n        rho = self.rho\n        dt = self.dt\n        tolerance = self.tolerance\n        alpha = self.alpha\n        beta = self.beta\n        thrust = self.thrust\n        thrust_nodes = self.thrust_nodes\n        cs_deflection = self.cs_deflection\n        fsi_tolerance = self.fsi_tolerance\n        n_tstep = self.n_tstep\n        gust_intensity = self.gust_intensity\n        relaxation_factor = self.relaxation_factor\n\n        file_name = route + '/' + case_name + '.sharpy'\n\n        settings = dict()\n        settings['SHARPy'] = {'case': case_name,\n                              'route': route,\n                              'flow': ['BeamLoader',\n                                       'AerogridLoader',\n                                       'StaticCoupled',\n                                       'Modal',\n                                       'AerogridPlot',\n                                       'BeamPlot',\n                                       'SaveData'],\n                              'write_screen': 'on',\n                              'write_log': 'on',\n                              'log_folder': route + '/output/',\n                              'log_file': case_name + '.log'}\n\n        settings['BeamLoader'] = {'unsteady': 'off',\n                                  'orientation': algebra.euler2quat(np.array([0.0,\n                                                                              self.alpha,\n                                                                              self.beta]))}\n\n        settings['StaticUvlm'] = {'print_info': 'on',\n                                  'horseshoe': self.horseshoe,\n                                  'num_cores': 4,\n                                  'n_rollup': 1,\n                                  'rollup_dt': dt,\n                                  'rollup_aic_refresh': 1,\n                                  'rollup_tolerance': 1e-4,\n                                  'velocity_field_generator': 'SteadyVelocityField',\n                                  'velocity_field_input': {'u_inf': u_inf,\n                                                           'u_inf_direction': [1., 0, 0]},\n                                  'rho': rho}\n\n        settings['StaticCoupled'] = {'print_info': 'on',\n                                     'structural_solver': 'NonLinearStatic',\n                                     'structural_solver_settings': {'print_info': 'off',\n                                                                    'max_iterations': 200,\n                                                                    'num_load_steps': 1,\n                                                                    'delta_curved': 1e-5,\n                                                                    'min_delta': tolerance,\n                                                                    'gravity_on': 'on',\n                                                                    'gravity': 9.81},\n                                     'aero_solver': 'StaticUvlm',\n                                     'aero_solver_settings': {'print_info': 'on',\n                                                              'horseshoe': self.horseshoe,\n                                                              'num_cores': 4,\n                                                              'n_rollup': int(1),\n                                                              'rollup_dt': dt, #self.c_root / self.M / self.u_inf,\n                                                              'rollup_aic_refresh': 1,\n                                                              'rollup_tolerance': 1e-4,\n                                                              'velocity_field_generator': 'SteadyVelocityField',\n                                                              'velocity_field_input': {'u_inf': u_inf,\n                                                                                       'u_inf_direction': [1., 0, 0]},\n                                                              'rho': rho},\n                                     'max_iter': 200,\n                                     'n_load_steps': 1,\n                                     'tolerance': tolerance,\n                                     'relaxation_factor': 0.2}\n\n        if self.horseshoe is True:\n            settings['AerogridLoader'] = {'unsteady': 'off',\n                                          'aligned_grid': 'on',\n                                          'mstar': 1,\n                                          'freestream_dir': ['1', '0', '0'],\n                                          'control_surface_deflection': ['']}\n        else:\n            settings['AerogridLoader'] = {'unsteady': 'off',\n                                          'aligned_grid': 'on',\n                                          'mstar': int(self.M * self.Mstarfactor),\n                                          'freestream_dir': ['1', '0', '0'],\n                                          'control_surface_deflection': ['']}\n\n        settings['NonLinearStatic'] = {'print_info': 'off',\n                                       'max_iterations': 150,\n                                       'num_load_steps': 1,\n                                       'delta_curved': 1e-8,\n                                       'min_delta': tolerance,\n                                       'gravity_on': True,\n                                       'gravity': 9.81}\n\n        settings['StaticTrim'] = {'solver': 'StaticCoupled',\n                                  'solver_settings': settings['StaticCoupled'],\n                                  'thrust_nodes': thrust_nodes,\n                                  'initial_alpha': alpha,\n                                  'initial_deflection': cs_deflection,\n                                  'initial_thrust': thrust,\n                                  'max_iter': 200,\n                                  'fz_tolerance': 1e-2,\n                                  'fx_tolerance': 1e-2,\n                                  'm_tolerance': 1e-2}\n\n        settings['Trim'] = {'solver': 'StaticCoupled',\n                            'solver_settings': settings['StaticCoupled'],\n                            'initial_alpha': alpha,\n                            'initial_beta': beta,\n                            'cs_indices': [0],\n                            'initial_cs_deflection': [cs_deflection],\n                            'thrust_nodes': thrust_nodes,\n                            'initial_thrust': [thrust, thrust]}\n\n        settings['NonLinearDynamicCoupledStep'] = {'print_info': 'off',\n                                                   'initial_velocity_direction': [-1., 0., 0.],\n                                                   'max_iterations': 950,\n                                                   'delta_curved': 1e-6,\n                                                   'min_delta': tolerance,\n                                                   'newmark_damp': 5e-3,\n                                                   'gravity_on': True,\n                                                   'gravity': 9.81,\n                                                   'num_steps': n_tstep,\n                                                   'dt': dt,\n                                                   'initial_velocity': u_inf * 0}\n\n        settings['NonLinearDynamicPrescribedStep'] = {'print_info': 'off',\n                                                   'initial_velocity_direction': [-1., 0., 0.],\n                                                   'max_iterations': 950,\n                                                   'delta_curved': 1e-6,\n                                                   'min_delta': self.tolerance,\n                                                   'newmark_damp': 5e-3,\n                                                   'gravity_on': True,\n                                                   'gravity': 9.81,\n                                                   'num_steps': self.n_tstep,\n                                                   'dt': self.dt}\n\n        settings['StepLinearUVLM'] = {'dt': self.dt,\n                                      'integr_order': 1,\n                                      'remove_predictor': True,\n                                      'use_sparse': True,\n                                      'velocity_field_generator': 'GustVelocityField',\n                                      'velocity_field_input': {'u_inf': u_inf,\n                                                               'u_inf_direction': [1., 0., 0.],\n                                                               'gust_shape': '1-cos',\n                                                               'gust_length': 1.,\n                                                               'gust_intensity': self.gust_intensity * u_inf,\n                                                               'offset': 30.,\n                                                               'span': self.span}}\n\n        settings['StepUvlm'] = {'print_info': 'off',\n                                'horseshoe': self.horseshoe,\n                                'num_cores': 4,\n                                'n_rollup': 100,\n                                'convection_scheme': self.wake_type,\n                                'rollup_dt': dt,\n                                'rollup_aic_refresh': 1,\n                                'rollup_tolerance': 1e-4,\n                                'velocity_field_generator': 'GustVelocityField',\n                                'velocity_field_input': {'u_inf': u_inf * 1,\n                                                         'u_inf_direction': [1., 0, 0],\n                                                         'gust_shape': '1-cos',\n                                                         'gust_length': 1.,\n                                                         'gust_intensity': gust_intensity * u_inf,\n                                                         'offset': 30.0,\n                                                         'span': self.span},\n                                # 'velocity_field_generator': 'SteadyVelocityField',\n                                # 'velocity_field_input': {'u_inf': u_inf*1,\n                                #                             'u_inf_direction': [1., 0., 0.]},\n                                'rho': rho,\n                                'n_time_steps': n_tstep,\n                                'dt': dt,\n                                'gamma_dot_filtering': 3}\n\n        settings['DynamicCoupled'] = {'print_info': 'on',\n                                      'structural_substeps': 1,\n                                      'dynamic_relaxation': 'on',\n                                      'clean_up_previous_solution': 'on',\n                                      'structural_solver': 'NonLinearDynamicCoupledStep',\n                                      'structural_solver_settings': settings['NonLinearDynamicCoupledStep'],\n                                      'aero_solver': 'StepUvlm',\n                                      'aero_solver_settings': settings['StepUvlm'],\n                                      'fsi_substeps': 200,\n                                      'fsi_tolerance': fsi_tolerance,\n                                      'relaxation_factor': relaxation_factor,\n                                      'minimum_steps': 1,\n                                      'relaxation_steps': 150,\n                                      'final_relaxation_factor': 0.0,\n                                      'n_time_steps': n_tstep,\n                                      'dt': dt,\n                                      'include_unsteady_force_contribution': 'off',\n                                      'postprocessors': ['BeamLoads', 'StallCheck', 'BeamPlot', 'AerogridPlot'],\n                                      'postprocessors_settings': {'BeamLoads': {'csv_output': 'off'},\n                                                                  'StallCheck': {'output_degrees': True,\n                                                                                 'stall_angles': {\n                                                                                     '0': [-12 * np.pi / 180,\n                                                                                           6 * np.pi / 180],\n                                                                                     '1': [-12 * np.pi / 180,\n                                                                                           6 * np.pi / 180],\n                                                                                     '2': [-12 * np.pi / 180,\n                                                                                           6 * np.pi / 180]}},\n                                                                  'BeamPlot': {'include_rbm': 'on',\n                                                                               'include_applied_forces': 'on'},\n                                                                  'AerogridPlot': {\n                                                                      'u_inf': u_inf,\n                                                                      'include_rbm': 'on',\n                                                                      'include_applied_forces': 'on',\n                                                                      'minus_m_star': 0},\n                                                                  #              'WriteVariablesTime': {\n                                                                  #              #     'delimeter': ',',\n                                                                  #              #     'structure_nodes': [0],\n                                                                  #              #     'structure_variables': ['Z']\n                                                                  #                 # settings['WriteVariablesTime'] = {'delimiter': ' ',\n                                                                  #     'FoR_variables': ['GFoR_pos', 'GFoR_vel', 'GFoR_acc'],\n                                                                  # 'FoR_number': [],\n                                                                  # 'structure_variables': ['AFoR_steady_forces', 'AFoR_unsteady_forces','AFoR_position'],\n                                                                  # 'structure_nodes': [0,-1],\n                                                                  # 'aero_panels_variables': ['gamma', 'gamma_dot'],\n                                                                  # 'aero_panels_isurf': [0,1,2],\n                                                                  # 'aero_panels_im': [1,1,1],\n                                                                  # 'aero_panels_in': [-2,-2,-2],\n                                                                  # 'aero_nodes_variables': ['GFoR_steady_force', 'GFoR_unsteady_force'],\n                                                                  # 'aero_nodes_isurf': [0,1,2],\n                                                                  # 'aero_nodes_im': [1,1,1],\n                                                                  # 'aero_nodes_in': [-2,-2,-2]\n                                                                  #              }}}\n                                                                  }}\n\n        settings['Modal'] = {'print_info': True,\n                             'use_undamped_modes': True,\n                             'NumLambda': 20,\n                             'rigid_body_modes': True,\n                             'write_modes_vtk': 'on',\n                             'print_matrices': 'on',\n                             'save_data': 'on',\n                             'continuous_eigenvalues': 'off',\n                             'dt': dt,\n                             'plot_eigenvalues': False}\n\n        settings['LinearAssembler'] = {'flow': ['LinearAeroelastic'],\n                                       'LinearAeroelastic': {\n                                           'beam_settings': {'modal_projection': False,\n                                                             'inout_coords': 'nodes',\n                                                             'discrete_time': True,\n                                                             'newmark_damp': 0.015,\n                                                             'discr_method': 'newmark',\n                                                             'dt': dt,\n                                                             'proj_modes': 'undamped',\n                                                             'use_euler': 'off',\n                                                             'num_modes': 40,\n                                                             'print_info': 'on',\n                                                             'gravity': 'on',\n                                                             'remove_dofs': []},\n                                           'aero_settings': {'dt': dt,\n                                                             'integr_order': 2,\n                                                             'density': rho,\n                                                             'remove_predictor': False,\n                                                             'use_sparse': True,\n                                                             'rigid_body_motion': True,\n                                                             'use_euler': False,\n                                                             'remove_inputs': []},\n                                           'rigid_body_motion': True}}\n\n        settings['AsymptoticStability'] = {'sys_id': 'LinearAeroelastic',\n                                    'print_info': 'on',\n                                    'frequency_cutoff': 0,\n                                    'export_eigenvalues': 'on'}\n\n        settings['AerogridPlot'] = {'include_rbm': 'on',\n                                    'include_applied_forces': 'on',\n                                    'minus_m_star': 0,\n                                    'u_inf': u_inf\n                                    }\n        settings['AeroForcesCalculator'] = {'write_text_file': 'off',\n                                            'text_file_name': case_name + '_aeroforces.csv',\n                                            'screen_output': 'on',\n                                            'unsteady': 'off'\n                                            }\n        settings['BeamPlot'] = {'include_rbm': 'on',\n                                'include_applied_forces': 'on'}\n\n        settings['BeamLoads'] = {'csv_output': 'off'}\n\n        settings['SaveData'] = {}\n\n        config = configobj.ConfigObj()\n        config.filename = file_name\n        for k, v in settings.items():\n            config[k] = v\n        config.write()\n        self.settings = settings\n\n        self.config = config\n\nif __name__=='__main__':\n\n    import sharpy.sharpy_main\n\n    ws = SweptWing(M=6,\n                    N=11,\n                    Mstarfactor=1,\n                    u_inf=22,\n                    rho=1.225,\n                    alpha_deg=0,\n                   cs_deflection_deg=-10,\n                   thrust=5,\n                    case_name_format=1)\n    ws.horseshoe = True\n\n    ws.clean_test_files()\n    ws.update_mass_stiffness()\n    ws.update_fem_prop()\n    ws.update_aero_properties()\n    ws.generate_fem_file()\n    ws.generate_aero_file()\n    ws.set_default_config_dict()\n\n    ws.config['SHARPy']['flow'] = ['BeamLoader',\n                                   'AerogridLoader',\n                                   'StaticCoupled',\n                                   'AeroForcesCalculator',\n                                   # 'StaticTrim',\n                                   # 'AeroForcesCalculator',\n                                   'Modal',\n                                   'LinearAssembler',\n                                   'AsymptoticStability',\n                                   # 'BeamPlot',\n                                   # 'AerogridPlot']\n]\n    ws.config.write()\n\n    sharpy.sharpy_main.main(['', ws.config['SHARPy']['route'] + '/' + ws.config['SHARPy']['case'] + '.sharpy'])\n"
  },
  {
    "path": "sharpy/cases/templates/Ttail.py",
    "content": "'''\nTemplates to build T-tail models\nS. Maraniello, Oct 2018\n\nclasses:\n- Ttail_3beam allows to generate general T-tail models with 3-beam.\n- Ttail_canonical:  builds the canonical test case as per\n    Murua et al., Prog. Aerosp. Sci., 71 (2014) 54-84\n'''\n\nimport h5py as h5\nimport numpy as np\nimport configobj\nimport os\nfrom IPython import embed\nimport sharpy.utils.algebra as algebra\nimport sharpy.utils.geo_utils as geo_utils\n\n\nclass Ttail_3beams():\n    '''\n    Produces a relatively general geometry of a 3 beams T-tail.\n    By default, quadratic beam elements are used. Three beams, sharing one node,\n    are used to model the system. VTP and HPT can be tapered, but they have the\n    same chord at the intersection. The time-step is automatically defined based\n    on the HTP root chord, the panelling M and the incoming flow speed.\n\n    Input:\n    - M: chordwise panelling of surfaces (same for HTP and VTP)\n    - Nv: vertical panelling of VTP. Nv must be divisible by 2.\n    - Nh: span-wise panelling of HTP. Nh refers to the full number of\n        panels on the HTP (left and right) and must be divisible by 4.\n    - Mstar_fact: wake length to chord ratio\n    - u_inf: wind-speed\n    - rho: air density\n    - chord_htp_root: chord length at the htp-vtp interspection\n    - chord_htp_tip: tip chord of the HPT (at the root, vtp and htp)\n    - chord_vtp_root: chord at the vtp base.\n    - span_htp: total span of the HTP (left and right)\n    - height_vtp: vertical distance between first and last node of the vtp. Note\n    that, in case of sweep angle, this is not the VTP length.\n    - alpha_htp_deg=0.0: HTP incidence in degrees, positive if upward. Note that\n    if non-zero, both UVLM grid and structural properties are rotated.\n    - sweep_htp_deg=0.0: sweep angle, positive if backward\n    - sweep_vtp_deg=0.0: sweep angle, positive if backward\n    - main_ea: chord-normalised distance of elastic axis from leading edge. Must\n    be the same for HTP and VTP\n    - alpha_inf_deg: angle of attach of incoming flow [deg]. This is obtained\n    rotating the local frame A in which the geometry is defined if\n    rotate_frame_A is True, otherwise the incoming flow is tilted.\n    - beta_inf_deg: sideslip angle of incoming flow [deg]. This is obtained\n    rotating the local frame A in which the geometry is defined if\n    rotate_frame_A is True, otherwise the incoming flow is tilted.\n    - rotate_frame_A: determines whether the angles alpha_inf_deg and\n    beta_inf_deg are obtained through rotation of the T-tail or rotation of\n    the incoming flow.\n\n    Usage:\n    - generate class instance:\n        ws=Ttail_3beams(...)\n    - manually define mass/stiffness properties in update_mass_stiff method\n    -   def ws.update_mass_stiff:\n            ...\n    - run:\n        ws.clean_test_files()\n        ws.update_derived_params()\n        ws.generate_fem_file()\n        ws.generate_aero_file()\n        ws.set_default_config_dict()\n\n    Warning:\n    - cambred aerofoils not implemented in the model\n    - as the mass/structural properties are not generated by this class, to\n    produce a *fem.h5 input file one needs to manually define the\n    update_mass_stiff method. (see Ttail_canonical)\n    '''\n\n    def __init__(self,\n                M,   # chordwise panelling\n                Nv,  # panelling VTP\n                Nh,  # panelling HTP (total, not half)\n                Mstar_fact,\n                u_inf,       # flight cond\n                rho,\n                # size\n                chord_htp_root,\n                chord_htp_tip,\n                chord_vtp_root,\n                span_htp,\n                height_vtp,\n                # elastic axis\n                main_ea,            # from LE.\n                # angles\n                alpha_htp_deg=0.0, # positive if upward\n                sweep_htp_deg=0.0, # positive if backward\n                sweep_vtp_deg=0.0, # positive if backward\n                # others\n                alpha_inf_deg=0.0,\n                beta_inf_deg=0.0,\n                rotate_frame_A=True,\n                route='.',         # saving\n                case_name='Ttail'):\n\n\n        ### parametrisation\n        assert Nv%2 != 1,\\\n                'vertical panelling of VTP must be divisible by 2 (using 3-noded FEs!)'\n        assert Nh%4 != 1,\\\n                'spanwise panelling of full HTP must be divisible by 4 (using 3-noded FEs!)'\n\n        # chordwise\n        self.M=M\n        # vtp\n        self.Nv=Nv\n        # htp\n        self.Nh=Nh\n        self.Nh_semi=Nh//2\n        # wake\n        self.Mstar_fact=Mstar_fact  # wake chord-wise panel factor\n\n        # beam elements\n        self.n_surfaces=3\n        self.num_nodes_elem=3\n        self.num_elem_vtp=self.Nv//2\n        self.num_elem_htpL=self.Nh_semi//2      # port\n        self.num_elem_htpR=self.Nh_semi//2      # starboard\n        self.num_elem_tot=self.num_elem_vtp+self.num_elem_htpL+self.num_elem_htpR\n\n        self.num_nodes_vtp =2*self.num_elem_vtp +1\n        self.num_nodes_htpL=2*self.num_elem_htpL+1\n        self.num_nodes_htpR=2*self.num_elem_htpR+1\n        self.num_nodes_tot=2*self.num_elem_vtp+2*self.num_elem_htpL+2*self.num_elem_htpR+1\n\n        ### store input\n        self.u_inf=u_inf      # flight cond\n        self.rho=rho\n\n        self.chord_htp_root=chord_htp_root\n        self.chord_htp_tip=chord_htp_tip\n        self.chord_vtp_root=chord_vtp_root\n        self.span_htp=span_htp\n        self.height_vtp=height_vtp\n        self.main_ea=main_ea\n\n        self.alpha_htp_deg=alpha_htp_deg\n        self.sweep_htp_deg=sweep_htp_deg\n        self.sweep_vtp_deg=sweep_vtp_deg\n\n        # FoR A orientation\n        self.alpha_inf_deg=alpha_inf_deg\n        self.beta_inf_deg=beta_inf_deg\n        self.rotate_frame_A=rotate_frame_A\n\n        if self.rotate_frame_A:\n            self.quat=algebra.euler2quat(\n                          np.pi/180.*np.array([0.0,alpha_inf_deg,beta_inf_deg]))\n            self.u_inf_direction=np.array([1.,0.,0.])\n        else:\n            self.quat=algebra.euler2quat(np.array([0.,0.,0.]))\n            self.u_inf_direction=np.dot(algebra.euler2rot(\n                    np.pi/180.*np.array([0.0,alpha_inf_deg,beta_inf_deg])),\n                                                            np.array([1.,0.,0.]))\n\n        # time-step\n        self.dt=self.chord_htp_root/self.M/self.u_inf\n\n        self.route=route + '/'\n        self.case_name=case_name\n\n        # # Aerofoil shape: root and tip\n        # self.root_airfoil_P = 0\n        # self.root_airfoil_M = 0\n        # self.tip_airfoil_P = 0\n        # self.tip_airfoil_M = 0\n\n\n\n    def update_fem_prop(self):\n        '''\n        Produce FEM connectivity, coordinates, mapping and BCs.\n\n        Elements are numbered globally starting from:\n        - vtp: bottom to top\n        - htpL: tip to middle\n        - htpR: middle to tip\n\n        The node at which VTP and HPT intersect is number (global)\n            2*num_elem_vtp+1\n        '''\n\n        num_nodes_elem=self.num_nodes_elem\n        num_elem_vtp=self.num_elem_vtp\n        num_elem_htpL=self.num_elem_htpL\n        num_elem_htpR=self.num_elem_htpR\n        num_elem_tot=self.num_elem_tot\n\n        num_nodes_vtp =self.num_nodes_vtp\n        num_nodes_htpL=self.num_nodes_htpL\n        num_nodes_htpR=self.num_nodes_htpR\n        num_nodes_tot=self.num_nodes_tot\n\n\n        ### beam number\n        # used by both fem and aero (surface_number)\n        # for each element (global number) allocate beam\n        # vtp:  0\n        # htpL: 1\n        # htpR: 2\n        beam_number=np.zeros((num_elem_tot),dtype=np.int)\n        beam_number[            :num_elem_vtp]=0                   # vtp\n        beam_number[num_elem_vtp:num_elem_vtp+num_elem_htpL]=1     # htp L\n        beam_number[-num_elem_htpR:]=2                             # htp R\n\n\n        ### Connectivity\n        # surface: for each surface, specity the elements global no.\n        # global: for each element, specify the local-global node number.\n        conn_loc=np.array([0, 2, 1],dtype=int)\n\n        conn_surf_vtp=[ee for ee in range(num_elem_vtp)]\n        conn_surf_htpL=[num_elem_vtp+ee for ee in range(num_elem_htpL)]\n        conn_surf_htpR=[num_elem_vtp+num_elem_htpL+ee for ee in range(num_elem_htpR)]\n\n        conn_glob=np.zeros((num_elem_tot,num_nodes_elem),dtype=int)\n        # add vtp\n        node_here=0\n        for ee in conn_surf_vtp:\n            conn_glob[ee,:]=node_here+conn_loc\n            node_here+=2\n        node_intersection=node_here\n        # add htp left\n        node_here+=1\n        node_free_htpL=node_here\n        for ee in conn_surf_htpL:#range(num_elem_htpL):\n            conn_glob[ee,:]=node_here+conn_loc\n            node_here+=2\n        conn_glob[num_elem_vtp+num_elem_htpL-1,1]=node_intersection\n        node_here-=1\n        # add htp right\n        for ee in conn_surf_htpR:\n            conn_glob[ee,:]=node_here+conn_loc\n            node_here+=2\n        conn_glob[num_elem_vtp+num_elem_htpL,0]=node_intersection\n        node_free_htpR=node_here\n\n\n        ### Nodal coordinates\n        sweep_htp=np.pi/180.*self.sweep_htp_deg\n        sweep_vtp=np.pi/180.*self.sweep_vtp_deg\n        xv = np.zeros((num_nodes_tot,))\n        yv = np.zeros((num_nodes_tot,))\n        zv = np.zeros((num_nodes_tot,))\n        # vtp\n        nnvec=range(num_nodes_vtp)\n        zv[nnvec]=np.linspace(0,self.height_vtp,num_nodes_vtp)\n        xv[nnvec]=zv[nnvec]*np.tan( sweep_vtp )\n        # increment all other nodes\n        xv[node_intersection:]=xv[node_intersection]\n        zv[node_intersection:]=zv[node_intersection]\n        # htpL\n        nnvec=[1+node_intersection+nn for nn in range(num_nodes_htpL)]\n        nnvec[-1]=node_intersection\n        yv[nnvec]=np.linspace(-.5*self.span_htp,0.,num_nodes_htpL)\n        xv[nnvec]-=yv[nnvec]*np.tan(sweep_htp)\n        # htpR\n        nnvec=[node_free_htpR-nn for nn in range(num_nodes_htpR)][::-1]\n        nnvec[0]=node_intersection\n        yv[nnvec]=np.linspace(0.,.5*self.span_htp,num_nodes_htpR)\n        xv[nnvec]+=yv[nnvec]*np.tan(sweep_htp)\n\n\n        ### boundary conditions\n        boundary_conditions=np.zeros((num_nodes_tot,), dtype=int)\n        boundary_conditions[0]=1                     # clamp\n        boundary_conditions[node_free_htpL]=-1       # free-end htpL\n        boundary_conditions[node_free_htpR]=-1       # free end htpR\n\n\n        ### Define yB, where yB points to the LE.\n        # account for HTP incidence\n        frame_of_reference_delta = np.zeros((num_elem_tot, num_nodes_elem, 3))\n        for ielem in range(num_elem_tot):\n            for inode in range(num_nodes_elem):\n                frame_of_reference_delta[ielem, inode, :] = [-1, 0, 0]\n\n        self.frame_of_reference_delta=frame_of_reference_delta\n        self.boundary_conditions=boundary_conditions\n        self.beam_number=beam_number\n\n        self.conn_loc=conn_loc\n        self.conn_surf_vtp=conn_surf_vtp\n        self.conn_surf_htpL=conn_surf_htpL\n        self.conn_surf_htpR=conn_surf_htpR\n        self.conn_glob=conn_glob\n\n        self.x=xv\n        self.y=yv\n        self.z=zv\n\n\n\n\n    def update_aero_prop(self):\n        assert hasattr(self,'conn_glob'),\\\n                           'Run \"update_derived_params\" before generating files'\n\n        num_nodes_elem=self.num_nodes_elem\n        num_elem_vtp=self.num_elem_vtp\n        num_elem_htpL=self.num_elem_htpL\n        num_elem_htpR=self.num_elem_htpR\n        num_elem_tot=self.num_elem_tot\n\n        num_nodes_vtp =self.num_nodes_vtp\n        num_nodes_htpL=self.num_nodes_htpL\n        num_nodes_htpR=self.num_nodes_htpR\n        num_nodes_tot=self.num_nodes_tot\n\n\n        ### Generate aerofoil profiles.\n        # only flat plate\n        airfoil_distribution=np.zeros((num_elem_tot,3),dtype=np.int)\n        Airfoils_surf=[]\n        Airfoils_surf.append(np.column_stack(geo_utils.generate_naca_camber(0,2)))\n        # # vtp\n        # # Airfoils_surf.append(geo_utils.generate_naca_camber(0,2))\n        # # Na=1\n        # for ee in self.conn_surf_vtp:\n        #     for nn_loc in [0,2]:\n        #         node_glob=self.conn_glob[ee,nn_loc]\n        #          eta=xxx\n        #         Airfoils_surf.append(\n        #                     np.column_stack(\n        #                         geo_utils.interpolate_naca_camber(\n        #                                 eta,\n        #                                 0,self.root_airfoil_P,\n        #                                 self.tip_airfoil_M,self.tip_airfoil_P)))\n\n\n        ### Define aerodynamic nodes\n        aero_node=np.ones((num_nodes_tot,),dtype=bool)\n\n\n        ### Define chord-wise panelling\n        surface_m=self.M*np.ones((3,),dtype=int)\n\n\n        ### Define chord-length, sweep, twist\n        chord=np.zeros((num_elem_tot, 3))\n        twist=np.zeros((num_elem_tot, 3))\n        sweep=np.zeros((num_elem_tot, 3))\n        # vtp\n        nn_count=0\n        for ee in self.conn_surf_vtp:\n            for nn in [0,1,2]:\n                nn_loc=self.conn_loc[nn]\n                eta=np.float(nn_count+nn)/(num_nodes_vtp-1)\n                chord[ee,nn_loc]=(1.-eta)*self.chord_vtp_root+eta*self.chord_htp_root\n                sweep[ee,nn_loc]=eta*np.pi/180.*(-self.alpha_htp_deg)\n            nn_count+=2\n        # htpL\n        twist[self.conn_surf_htpL,:]=-np.pi/180.*self.alpha_htp_deg\n        nn_count=0\n        for ee in self.conn_surf_htpL:\n            for nn in [0,1,2]:\n                nn_loc=self.conn_loc[nn]\n                eta=np.float(nn_count+nn)/(num_nodes_htpL-1)\n                chord[ee,nn_loc]=(1.-eta)*self.chord_htp_tip+eta*self.chord_htp_root\n                nn_count+=1\n        # htpR\n        twist[self.conn_surf_htpR,:]=-np.pi/180.*self.alpha_htp_deg\n        nn_count=0\n        for ee in self.conn_surf_htpR:\n            for nn in [0,1,2]:\n                nn_loc=self.conn_loc[nn]\n                eta=np.float(nn_count+nn)/(num_nodes_htpR-1)\n                chord[ee,nn_loc]=(1.-eta)*self.chord_htp_root+eta*self.chord_htp_tip\n                nn_count+=1\n\n        ### Define chord elastic axis position\n        elastic_axis=self.main_ea*np.ones((num_elem_tot, 3,))\n\n        ### store\n        self.Airfoils_surf=Airfoils_surf\n        self.airfoil_distribution=airfoil_distribution\n\n        self.aero_node=aero_node\n        self.surface_m=surface_m\n\n        self.twist=twist\n        self.sweep=sweep\n        self.chord=chord\n        self.elastic_axis=elastic_axis\n\n\n    def update_mass_stiff(self):\n        '''\n        This method can be substituted to produce different wing configs\n        '''\n\n        # uniform mass/stiffness on HTP/VTP\n        ea,ga=1e7,1e7\n        gj, eiy,eiz=1e6,2e5,5e6\n        self.stiffness=np.zeros((1, 6, 6))\n        self.stiffness[0]=np.diag([ea, ga, ga, gj, eiy, eiz])\n        self.mass=np.zeros((1, 6, 6))\n        self.mass[0, :, :]=np.diag([1., 1., 1., .1, .1, .1])\n        self.elem_stiffness=np.zeros((self.num_elem_tot,), dtype=int)\n        self.elem_mass=np.zeros((self.num_elem_tot,), dtype=int)\n\n\n    def update_derived_params(self):\n        # FEM connectivity, coords definition and mapping\n        self.update_fem_prop()\n        # Mass/stiffness properties\n        self.update_mass_stiff()\n        # Aero props\n        self.update_aero_prop()\n\n\n    def generate_fem_file(self):\n\n        assert hasattr(self,'conn_glob'),\\\n                           'Run \"update_derived_params\" before generating files'\n\n        with h5.File(self.route+'/'+self.case_name+'.fem.h5','a') as h5file:\n\n            coordinates = h5file.create_dataset(\n                'coordinates',data=np.column_stack((self.x, self.y, self.z)))\n            conectivities = h5file.create_dataset(\n                'connectivities', data=self.conn_glob)\n            num_nodes_elem_handle = h5file.create_dataset(\n                'num_node_elem', data=self.num_nodes_elem)\n            num_nodes_handle = h5file.create_dataset(\n                'num_node', data=self.num_nodes_tot)\n            num_elem_handle = h5file.create_dataset(\n                'num_elem', data=self.num_elem_tot)\n            stiffness_db_handle = h5file.create_dataset(\n                'stiffness_db', data=self.stiffness)\n            stiffness_handle = h5file.create_dataset(\n                'elem_stiffness', data=self.elem_stiffness)\n            mass_db_handle = h5file.create_dataset(\n                'mass_db', data=self.mass)\n            mass_handle = h5file.create_dataset(\n                'elem_mass', data=self.elem_mass)\n            frame_of_reference_delta_handle = h5file.create_dataset(\n                'frame_of_reference_delta', data=self.frame_of_reference_delta)\n            structural_twist_handle = h5file.create_dataset(\n                'structural_twist', data=np.zeros((self.num_elem_tot,3)))\n            bocos_handle = h5file.create_dataset(\n                'boundary_conditions', data=self.boundary_conditions)\n            beam_handle = h5file.create_dataset(\n                'beam_number', data=self.beam_number)\n            app_forces_handle = h5file.create_dataset(\n                'app_forces', data=np.zeros((self.num_nodes_tot,6)))\n\n\n\n    def set_default_config_dict(self):\n\n        if self.rotate_frame_A:\n            alpha_aero=np.pi/180.*self.alpha_inf_deg\n            beta_aero=np.pi/180.*self.beta_inf_deg\n        else:\n            alpha_aero=0.\n            beta_aero=0.\n        str_u_inf_direction=[str(self.u_inf_direction[cc]) for cc in range(3)]\n\n\n        config=configobj.ConfigObj()\n        config.filename=self.route+'/'+self.case_name+'.sharpy'\n\n        config['SHARPy']={\n                'flow':['BeamLoader', 'AerogridLoader',\n                        'StaticCoupled', #'StaticUvlm',\n                        'AerogridPlot', 'BeamPlot', 'SaveData'],\n                'case': self.case_name, 'route': self.route,\n                'write_screen': 'off', 'write_log': 'on',\n                'log_folder': self.route+'/output/',\n                'log_file': self.case_name+'.log'}\n\n        config['BeamLoader']={\n                'unsteady': 'off',\n                'orientation': self.quat}\n\n        config['AerogridLoader']={\n                'unsteady': 'off',\n                'aligned_grid': 'on',\n                'mstar': self.Mstar_fact*self.M,\n                'freestream_dir':str_u_inf_direction\n                                  }\n        config['StaticUvlm']={\n              'rho': self.rho,\n              'velocity_field_generator':'SteadyVelocityField',\n              'velocity_field_input':{\n                    'u_inf': self.u_inf,\n                    'u_inf_direction':self.u_inf_direction},\n              'rollup_dt': self.dt,\n              'print_info': 'on',\n              'horseshoe': 'off',\n              'num_cores': 4,\n              'n_rollup' : 0,\n              'rollup_aic_refresh': 0,\n              'rollup_tolerance': 1e-4}\n\n        config['StaticCoupled']={\n               'print_info': 'on',\n               'max_iter': 50,\n               'n_load_steps': 1,\n               'tolerance': 1e-6,\n               'relaxation_factor': 0.,\n               'aero_solver': 'StaticUvlm',\n               'aero_solver_settings':{\n                            'rho': self.rho,\n                            'print_info': 'off',\n                            'horseshoe': 'off',\n                            'num_cores': 4,\n                            'n_rollup': 0,\n                            'rollup_dt': self.dt,\n                            'rollup_aic_refresh': 1,\n                            'rollup_tolerance': 1e-4,\n                            'velocity_field_generator': 'SteadyVelocityField',\n                            'velocity_field_input': {\n                                    'u_inf': self.u_inf,\n                                    'u_inf_direction': str_u_inf_direction}},\n                #\n               'structural_solver': 'NonLinearStatic',\n               'structural_solver_settings': {'print_info': 'off',\n                                              'max_iterations': 150,\n                                              'num_load_steps': 4,\n                                              'delta_curved': 1e-5,\n                                              'min_delta': 1e-5,\n                                              'gravity_on': 'on',\n                                              'gravity': 9.754,\n                                              'orientation': self.quat},}\n\n\n        config['LinearUvlm'] = {    'dt': self.dt,\n                                            'integr_order': 2,\n                                            'density': self.rho,\n                                            'remove_predictor': True,\n                                            'use_sparse': True,\n                                            'ScalingDict':{'length': 1.,\n                                                           'speed':  1.,\n                                                           'density':1.}}\n\n        config['AerogridPlot']={'include_rbm': 'off',\n                                'include_applied_forces': 'on',\n                                'minus_m_star': 0}\n\n        config['AeroForcesCalculator']={'write_text_file': 'on',\n                                        'text_file_name': self.case_name+'_aeroforces.csv',\n                                        'screen_output': 'on',\n                                        'unsteady': 'off'}\n\n        config['BeamPlot']={'include_rbm': 'off',\n                            'include_applied_forces': 'on'}\n\n        config['SaveData'] = {}\n\n        config['Modal'] = {'NumLambda': 60,\n                           'print_matrices': 'off',\n                           'write_modes_vtk': True,\n                           'use_undamped_modes': True}\n\n        config.write()\n        self.config=config\n\n\n\n    def generate_aero_file(self):\n\n        with h5.File(self.route+'/'+self.case_name+'.aero.h5', 'a') as h5file:\n            airfoils_group = h5file.create_group('airfoils')\n            # add one airfoil\n            for aa in range(len(self.Airfoils_surf)):\n                airfoils_group.create_dataset('%d'%aa,data=self.Airfoils_surf[aa])\n\n            chord_input = h5file.create_dataset('chord', data=self.chord)\n            dim_attr = chord_input.attrs['units'] = 'm'\n            twist_input = h5file.create_dataset('twist', data=self.twist)\n            dim_attr=twist_input.attrs['units']='rad'\n            sweep_input = h5file.create_dataset('sweep', data=self.sweep)\n            dim_attr=sweep_input.attrs['units']='rad'\n\n            # airfoil distribution\n            airfoil_distribution_input = h5file.create_dataset(\n                'airfoil_distribution', data=self.airfoil_distribution)\n            surface_distribution_input = h5file.create_dataset(\n                'surface_distribution', data=self.beam_number)\n            surface_m_input = h5file.create_dataset(\n                'surface_m', data=self.surface_m)\n            m_distribution_input = h5file.create_dataset(\n                'm_distribution', data='uniform'.encode('ascii', 'ignore'))\n            aero_node_input = h5file.create_dataset(\n                'aero_node', data=self.aero_node)\n            elastic_axis_input = h5file.create_dataset(\n                'elastic_axis', data=self.elastic_axis)\n\n\n\n    def clean_test_files(self):\n        fem_file_name = self.route+'/'+self.case_name+'.fem.h5'\n        if os.path.isfile(fem_file_name):\n            os.remove(fem_file_name)\n\n        aero_file_name = self.route+'/'+self.case_name+'.aero.h5'\n        if os.path.isfile(aero_file_name):\n            os.remove(aero_file_name)\n\n        solver_file_name = self.route+'/'+self.case_name+'.sharpy'\n        if os.path.isfile(solver_file_name):\n            os.remove(solver_file_name)\n\n        flightcon_file_name = self.route+'/'+self.case_name+'.flightcon.txt'\n        if os.path.isfile(flightcon_file_name):\n            os.remove(flightcon_file_name)\n\n\n\nclass Ttail_canonical(Ttail_3beams):\n    '''\n    Produces a model of the Canonical T-tail test case proposed by\n        Murua et al.,   Prog. Aerosp. Sci., 71 (2014) 54-84\n    starting from the Ttail_3beam class.\n    '''\n\n    def __init__(self,\n                M,Nv,Nh,Mstar_fact,\n                u_inf,rho,\n                alpha_htp_deg,\n                kv,kh,\n                alpha_inf_deg=0.,\n                beta_inf_deg=0.,\n                rotate_frame_A=True,\n                route='.',case_name='Ttail_can'):\n\n        super().__init__( M=M, Nv=Nv, Nh=Nh, Mstar_fact=Mstar_fact,\n                          u_inf=u_inf, rho=rho,\n                        # size\n                        chord_htp_root=2.,\n                        chord_htp_tip=2.,\n                        chord_vtp_root=2.,\n                        span_htp=4.*2.,\n                        height_vtp=6.,\n                        # ea\n                        main_ea=.25,\n                        # angles\n                        alpha_htp_deg=alpha_htp_deg,\n                        sweep_htp_deg=0.0,\n                        sweep_vtp_deg=0.0,\n                        # flow\n                        alpha_inf_deg=alpha_inf_deg,\n                        beta_inf_deg=beta_inf_deg,\n                        rotate_frame_A=rotate_frame_A,\n                        # other\n                        route=route,\n                        case_name=case_name)\n        self.kv=kv\n        self.kh=kh\n        self.main_cg=.35\n\n\n    def update_mass_stiff(self):\n        '''\n        This method can be substituted to produce different wing configs.\n\n        Remind: the delta_frame_of_reference is chosen such that the B FoR axis\n        are:\n        - xb: along the wing span\n        - yb: pointing towards the leading edge\n        - zb: accordingly\n        '''\n\n        ### mass matrix\n        # identical for vtp/htp\n        m_unit = 35.\n        j_tors = 8.\n        pos_cg_b=np.array([0.,self.chord_vtp_root*(self.main_cg-self.main_ea), 0.])\n        m_chi_cg=algebra.skew(m_unit*pos_cg_b)\n        self.mass=np.zeros((2, 6, 6))\n        self.mass[0, :, :]=np.diag([ m_unit, m_unit, m_unit,\n                                                  j_tors, .1*j_tors, .9*j_tors])\n        self.mass[0,:3,3:]=+m_chi_cg\n        self.mass[0,3:,:3]=-m_chi_cg\n        self.elem_mass=np.zeros((self.num_elem_tot,), dtype=int)\n\n\n        ### stiffness\n        ea,ga=1e9,1e9\n        # vtp\n        Kvtp=np.diag([ea, ga, ga, 1e6*self.kv, 1e7,         1e9])\n        # htp\n        Khtp=np.diag([ea, ga, ga, 1e7*self.kh, 1e7*self.kh, 1e9])\n\n        self.stiffness=np.zeros((2, 6, 6))\n        self.stiffness[0,:,:]=Kvtp\n        self.stiffness[1,:,:]=Khtp\n        self.elem_stiffness=np.zeros((self.num_elem_tot,), dtype=int)\n        self.elem_stiffness[self.conn_surf_vtp] =0\n        self.elem_stiffness[self.conn_surf_htpL]=1\n        self.elem_stiffness[self.conn_surf_htpR]=1\n\n\n\n\nif __name__=='__main__':\n\n    import os\n    os.system('mkdir -p %s' %'./test' )\n\n    ws=Ttail_3beams(M=4,\n                    Nv=6,           # panelling VTP\n                    Nh=8,           # panelling HTP (total, not half)\n                    Mstar_fact=7.,\n                    u_inf=30.,      # flight cond\n                    rho=1.225,\n                    # size\n                    chord_htp_root=2.,\n                    chord_htp_tip=2.,\n                    chord_vtp_root=2.,\n                    span_htp=4.*2.,\n                    height_vtp=6.,\n                    # ea\n                    main_ea=.25,\n                    # angles\n                    alpha_htp_deg=5.0,  # positive if upward\n                    sweep_htp_deg=60.0, # positive if backward\n                    sweep_vtp_deg=30.0, # positive if backward\n                    #\n                    alpha_inf_deg=0.0,\n                    beta_inf_deg=0.0,\n                    rotate_frame_A=True,\n                    route='./test/',\n                    case_name='Ttail')\n    ws.clean_test_files()\n    ws.update_derived_params()\n    ws.generate_fem_file()\n    ws.generate_aero_file()\n    ws.set_default_config_dict()\n\n\n    wc=Ttail_canonical(\n                M=4,Nv=6,Nh=8,Mstar_fact=6,\n                u_inf=30.,rho=1.225,\n                alpha_htp_deg=2.,\n                kv=1.,kh=10.,\n                alpha_inf_deg=0.,\n                beta_inf_deg=0.,\n                rotate_frame_A=True,\n                route='./test/',case_name='Tcanonical')\n    wc.clean_test_files()\n    wc.update_derived_params()\n    wc.generate_fem_file()\n    wc.generate_aero_file()\n    wc.set_default_config_dict()\n"
  },
  {
    "path": "sharpy/cases/templates/__init__.py",
    "content": ""
  },
  {
    "path": "sharpy/cases/templates/flying_wings.py",
    "content": "'''\nTemplates to build flying wing models\nS. Maraniello, Jul 2018\n\nclasses:\n- FlyingWing: generate a flying wing model from a reduced set of input. The\nbuilt in method 'update_mass_stiff' can be re-defined by the user to enter more\ncomplex inertial/stiffness properties\n- Smith(FlyingWing): generate HALE wing model\n- Goland(FlyingWing): generate Goland wing model\n'''\n\nimport warnings\nimport h5py as h5\nimport numpy as np\nimport configobj\nimport os\n# from IPython import embed\nimport sharpy.utils.algebra as algebra\nimport sharpy.utils.geo_utils as geo_utils\n\nnp.set_printoptions(linewidth=120)\n\n\nclass FlyingWing():\n    '''\n    Flying wing template.\n    - discretisation, and basic geometry/flight conditions can be passed in input\n    - stiffness/mass properties must defined within the \"update_mass_stiffness\"\n    method.\n    - other aeroelastic params are attached as attributes to the class.\n    - the method update_config_dict provides default setting for solver. These\n    can be modified after an instance of the FlyingWing class is created.\n\n    Args:\n        M,N:            chord/span-wise discretisations\n        Mstar_fact:     wake\n        u_inf:          flow speed\n        alpha:          FoR A pitch angle [deg]\n        rho:            density\n        b_ref:          geometry\n        main_chord:     main chord\n        aspect_ratio:\n        roll=0.:        FoR A roll  angle [deg] (see RollNodes flag)\n        beta=0@         FoR A side  angle [deg]\n        sweep=0:        sweep angle [deg]\n        n_surfaces=2:\n        physical_time=2:\n        route='.':       saving route\n        case_name='flying_wing':\n        RollNodes=False : If true, the wing nodes are rolled insted of the FoR A\n\n    Usage:\n        ws=flying_wings.FlyingWing(*args)\n        ws.clean_test_files()\n        ws.update_derived_params()\n        ws.generate_fem_file()\n        ws.generate_aero_file()\n        ws.set_default_config_dict()\n        ws.config['SHARPy']= bla bla bla\n        ws.config.write()\n    '''\n\n    def __init__(self,\n                 M, N,\n                 Mstar_fact,\n                 u_inf,\n                 alpha,\n                 rho,\n                 b_ref,\n                 main_chord,\n                 aspect_ratio,\n                 roll=0.,\n                 yaw=0.,\n                 beta=0,\n                 sweep=0,\n                 n_surfaces=2,\n                 physical_time=2,\n                 route='.',\n                 case_name='flying_wing',\n                 RollNodes=False,\n                 polar_file=None):\n\n        ### parametrisation\n        assert n_surfaces < 3, \"use 1 or 2 surfaces only!\"\n        assert N % 2 != 1, \\\n            'UVLM spanwise panels must be even when using 3-noded FEs!'\n        self.M = M  # chord-wise panels\n        self.N = N  # total spanwise panels (over all surfaces)\n        self.Mstar_fact = Mstar_fact  # wake chord-wise panel factor\n        self.n_surfaces = n_surfaces\n        self.num_node_elem = 3\n\n        ### store input\n        self.u_inf = u_inf  # flight cond\n        self.rho = rho\n        self.alpha = alpha  # angles\n        self.beta = beta\n        self.roll = roll\n        self.yaw = yaw\n        self.sweep = sweep\n        self.b_ref = b_ref  # geometry\n        self.main_chord = main_chord\n        self.aspect_ratio = aspect_ratio\n        self.route = route + '/'\n        self.case_name = case_name\n        self.RollNodes = RollNodes\n\n        # Verify that the route exists and create directory if necessary\n        try:\n            os.makedirs(self.route)\n        except FileExistsError:\n            pass\n\n        ### other params\n        self.u_inf_direction = np.array([1., np.sin(beta * np.pi / 180), 0.])\n        self.gravity_on = True\n\n        # aeroelasticity\n        self.sigma = 1\n        self.main_ea = 0.2\n        self.main_cg = 0.5\n        self.c_ref = 1.  # ref. chord\n\n        # Aerofoil shape: root and tip\n        self.root_airfoil_P = 0\n        self.root_airfoil_M = 0\n        self.tip_airfoil_P = 0\n        self.tip_airfoil_M = 0\n\n        self.polars = None # list of polar for each airfoil\n        if polar_file is not None:\n            self.load_polar(polar_file)\n\n        # Numerics for dynamic simulations\n        self.dt_factor = 1\n        self.n_tstep = None\n        self.physical_time = physical_time\n        self.horseshoe = False\n        self.fsi_tolerance = 1e-10\n        self.relaxation_factor = 0.2\n        self.gust_intensity = 0.01\n        self.gust_length = 5\n        self.tolerance = 1e-6\n\n        n_lumped_mass = 1\n        self.lumped_mass = np.zeros((n_lumped_mass))\n        self.lumped_mass_position = np.zeros((n_lumped_mass, 3))\n        self.lumped_mass_inertia = np.zeros((n_lumped_mass, 3, 3))\n        self.lumped_mass_nodes = np.zeros((n_lumped_mass), dtype=int)\n\n        # Control surface initialisation\n        self.n_control_surfaces = 0\n        self.control_surface = np.zeros((N + 1, 3), dtype=int) - 1\n        self.control_surface_type = np.zeros((self.n_control_surfaces), dtype=int)\n        self.control_surface_deflection = np.zeros((self.n_control_surfaces,))\n        self.control_surface_chord = np.array([M//2], dtype=int)\n        self.control_surface_hinge_coord = np.zeros_like(self.control_surface_type, dtype=float)\n\n    def settings_to_config(self, settings):\n        file_name = self.route + '/' + self.case_name + '.sharpy'\n        config = configobj.ConfigObj()\n        config.filename = file_name\n        for k, v in settings.items():\n            config[k] = v\n        config.write()\n\n        return file_name\n\n    def update_mass_stiff(self):\n        '''This method can be substituted to produce different wing configs'''\n        # uniform mass/stiffness\n\n        ea, ga = 1e7, 1e7\n        gj, eiy, eiz = 1e6, 2e5, 5e6\n        base_stiffness = np.diag([ea, ga, ga, gj, eiy, eiz])\n\n        self.stiffness = np.zeros((1, 6, 6))\n        self.stiffness[0] = self.sigma * base_stiffness\n\n        self.mass = np.zeros((1, 6, 6))\n        self.mass[0, :, :] = np.diag([1., 1., 1., .1, .1, .1])\n\n        self.elem_stiffness = np.zeros((self.num_elem_tot,), dtype=int)\n        self.elem_mass = np.zeros((self.num_elem_tot,), dtype=int)\n\n        n_lumped_mass = 1\n        self.lumped_mass = np.zeros((n_lumped_mass))\n        self.lumped_mass_position = np.zeros((n_lumped_mass, 3))\n        self.lumped_mass_inertia = np.zeros((n_lumped_mass, 3, 3))\n        self.lumped_mass_nodes = np.zeros((n_lumped_mass), dtype=int)\n\n        self.lumped_mass[0] = 5.\n        self.lumped_mass_position[0] = np.array([0, 0.25, 0])\n\n    def load_polar(self, file):\n        \"\"\"\n        Read polar from Airfoil Tools polar txt file\n\n        Args:\n            file (str):\n        \"\"\"\n        polar_raw_data = np.loadtxt(file, skiprows=12)\n        self.polars = np.column_stack((polar_raw_data[:, 0] * np.pi / 180, # aoa\n                                       polar_raw_data[:, 1], # cl\n                                       polar_raw_data[:, 2], # cd\n                                       polar_raw_data[:, 4])) #cm\n\n    def update_derived_params(self):\n        ### Derived\n\n        # time-step\n        self.dt = self.main_chord / self.M / self.u_inf * self.dt_factor\n        self.n_tstep = int(np.round(self.physical_time / self.dt))\n\n        # angles\n        self.alpha_rad = self.alpha * np.pi / 180.\n        self.roll_rad = self.roll * np.pi / 180.\n        self.beta_rad = self.beta * np.pi / 180.\n        self.sweep_rad = self.sweep * np.pi / 180.\n        self.yaw_rad = self.yaw * np.pi / 180.\n\n        # FoR A orientation\n        # if self.RollNodes:\n        self.quat = algebra.euler2quat(np.array([self.roll_rad, self.alpha_rad, self.yaw_rad]))\n        # else:\n        #     if np.abs(self.roll)>1e-3:\n        #         warnings.warn(\n        #             'FoR A quaternion will be built with inverted '+\\\n        #             'roll angle sign to compensate bug in algebra.euler2quat')\n        #     self.quat=algebra.euler2quat(np.array([-self.roll_rad,self.alpha_rad,self.beta_rad]))\n\n        # geometry\n        self.wing_span = self.aspect_ratio * self.main_chord  # /np.cos(self.sweep_rad)\n        self.S = self.wing_span * self.main_chord\n\n        # discretisation\n        assert self.n_surfaces < 3, \"use 1 or 2 surfaces only!\"\n        assert self.N % 2 != 1, \\\n            'UVLM spanwise panels must be even when using 3-noded FEs!'\n        self.num_elem_tot = self.N // 2\n\n        assert self.num_elem_tot % self.n_surfaces != 1, \\\n            \"Can't distribute equally FEM elements over surfaces\"\n        self.num_elem_surf = self.num_elem_tot // self.n_surfaces\n        self.num_node_surf = self.N // self.n_surfaces + 1\n        self.num_node_tot = self.N + 1\n\n        self.control_surface = np.zeros((self.num_elem_tot, self.num_node_elem), dtype=int) - 1\n\n        # FEM connectivity, coords definition and mapping\n        self.update_fem_prop()\n\n        # Mass/stiffness properties\n        self.update_mass_stiff()\n\n        # Aero props\n        self.update_aero_prop()\n\n    def update_fem_prop(self):\n        ''' Produce FEM connectivity, coordinates, mapping and BCs'''\n\n        n_surfaces = self.n_surfaces\n        num_node_elem = self.num_node_elem\n        num_node_surf = self.num_node_surf\n        num_node_tot = self.num_node_tot\n        num_elem_surf = self.num_elem_surf\n        num_elem_tot = self.num_elem_tot\n        sweep_rad = self.sweep_rad\n        half_span = 0.5 * self.wing_span\n\n        #### Connectivity and nodal coordinates\n        # Warning: the elements direction determines the xB axis direction.\n        # Hence, to avoid accidentally rotating aerofoil profiles, if a wing is\n        # defined through  multiple surfaces, nodes should be oriented in the\n        # same direction.\n\n        # generate connectivity. Mid node at the end of array.\n        conn_loc = np.array([0, 2, 1], dtype=int)\n        conn_surf = np.zeros((num_elem_surf, num_node_elem), dtype=int)\n        conn_glob = np.zeros((num_elem_tot, num_node_elem), dtype=int)\n\n        # connectivity surface 01\n        for ielem in range(num_elem_surf):\n            conn_surf[ielem, :] = conn_loc + ielem * (num_node_elem - 1)\n        # global connectivity. Multiple surfaces merge at node 0.\n\n        conn_glob[:num_elem_surf, :] = conn_surf\n        for ss in range(1, n_surfaces):\n            conn_glob[ss * num_elem_surf:(ss + 1) * num_elem_surf, :] = \\\n                conn_surf + ss * (num_node_surf - 1) + 1\n            conn_glob[(ss + 1) * num_elem_surf - 1, 1] = 0\n\n        ### Nodal coordinates\n        z = np.zeros((num_node_tot,))\n        if n_surfaces == 1:\n            ### Local coord from half surface\n            x01 = np.sin(sweep_rad) * np.linspace(0., half_span, (num_node_surf + 1) // 2)\n            y01 = np.cos(sweep_rad) * np.linspace(0., half_span, (num_node_surf + 1) // 2)\n            # and mirrow\n            x = np.concatenate([x01[-1:0:-1], x01])\n            y = np.concatenate([-y01[-1:0:-1], y01])\n        if n_surfaces == 2:\n            ### Local coord for surface 00\n            x01 = np.sin(sweep_rad) * np.linspace(0., half_span, num_node_surf)\n            y01 = np.cos(sweep_rad) * np.linspace(0., half_span, num_node_surf)\n            # and mirrow\n            x = np.concatenate([x01, x01[-1:0:-1]])\n            y = np.concatenate([y01, -y01[-1:0:-1]])\n        if n_surfaces > 2:\n            raise NameError(\n                'Geometry not implemented for multiple surfaces! Rotate them.')\n\n        if self.RollNodes:\n            sr, cr = np.sin(self.roll_rad), np.cos(self.roll_rad)\n            yold = y.copy()\n            y = cr * yold\n            z = sr * yold\n\n            ### surface/beam to element mapping\n        # beam_number and surface_distribution in fem/aero files\n        surface_number = np.zeros((num_elem_tot,), dtype=int)\n        for ss in range(n_surfaces):\n            surface_number[ss * num_elem_surf:(ss + 1) * num_elem_surf] = ss\n\n        ##### boundary conditions\n        boundary_conditions = np.zeros((num_node_tot,), dtype=int)\n        if n_surfaces == 1:\n            boundary_conditions[[0, -1]] = -1  # free-ends\n            boundary_conditions[(num_node_surf - 1) // 2] = 1  # mid-clamp\n        if n_surfaces == 2:\n            boundary_conditions[0] = 1  # clamp at root (node 0)\n            boundary_conditions[num_node_surf - 1] = -1  # free surf 00\n            boundary_conditions[num_node_surf] = -1  # free surf 01\n        if n_surfaces > 2:\n            raise NameError('BCs not implemented for more than 2 surfaces')\n\n        ### Define yB, where yB points to the LE.\n        frame_of_reference_delta = np.zeros((num_elem_tot, num_node_elem, 3))\n        for ielem in range(num_elem_tot):\n            for inode in range(num_node_elem):\n                frame_of_reference_delta[ielem, inode, :] = [-1, 0, 0]\n\n        self.frame_of_reference_delta = frame_of_reference_delta\n        self.boundary_conditions = boundary_conditions\n        self.conn_glob = conn_glob\n        self.conn_surf = conn_surf\n        self.surface_number = surface_number\n        self.x = x\n        self.y = y\n        self.z = z\n\n\n    def update_aero_prop(self):\n        assert hasattr(self, 'conn_glob'), \\\n            'Run \"update_derived_params\" before generating files'\n\n        n_surfaces = self.n_surfaces\n        num_node_surf = self.num_node_surf\n        num_node_tot = self.num_node_tot\n        num_elem_surf = self.num_elem_surf\n        num_elem_tot = self.num_elem_tot\n\n        ### Generate aerofoil profiles. Only on surf 0.\n        Airfoils_surf = []\n        if n_surfaces == 2:\n            for inode in range(num_node_surf):\n                eta = inode / num_node_surf\n                Airfoils_surf.append(\n                    np.column_stack(\n                        geo_utils.interpolate_naca_camber(\n                            eta,\n                            self.root_airfoil_M, self.root_airfoil_P,\n                            self.tip_airfoil_M, self.tip_airfoil_P)))\n            airfoil_distribution_surf = self.conn_surf\n            airfoil_distribution = np.concatenate([airfoil_distribution_surf,\n                                                   airfoil_distribution_surf[::-1, [1, 0, 2]]])\n        if n_surfaces == 1:\n            num_node_half = (num_node_surf + 1) // 2\n            for inode in range(num_node_half):\n                eta = inode / num_node_half\n                Airfoils_surf.append(\n                    np.column_stack(\n                        geo_utils.interpolate_naca_camber(\n                            eta,\n                            self.root_airfoil_M, self.root_airfoil_P,\n                            self.tip_airfoil_M, self.tip_airfoil_P)))\n            airfoil_distribution_surf = self.conn_surf[:num_elem_surf // 2, :]\n            airfoil_distribution = np.concatenate([\n                airfoil_distribution_surf[::-1, [1, 0, 2]],\n                airfoil_distribution_surf])\n\n        self.Airfoils_surf = Airfoils_surf\n        self.airfoil_distribution = airfoil_distribution\n\n        ### others\n        self.aero_node = np.ones((num_node_tot,), dtype=bool)\n        self.surface_m = self.M * np.ones((n_surfaces,), dtype=int)\n\n        self.twist = np.zeros((num_elem_tot, 3))\n        self.chord = self.main_chord * np.ones((num_elem_tot, 3))\n        self.elastic_axis = self.main_ea * np.ones((num_elem_tot, 3,))\n\n    def set_default_config_dict(self):\n\n        str_u_inf_direction = [str(self.u_inf_direction[cc]) for cc in range(3)]\n\n        config = configobj.ConfigObj()\n        config.filename = self.route + '/' + self.case_name + '.sharpy'\n        settings = dict()\n\n        config['SHARPy'] = {\n            'flow': ['BeamLoader', 'AerogridLoader',\n                     # 'StaticUvlm',\n                     'StaticCoupled',\n                     'AerogridPlot', 'BeamPlot', 'SaveData'],\n            'case': self.case_name, 'route': self.route,\n            'write_screen': 'on', 'write_log': 'on',\n            'log_folder': './output/' + self.case_name + '/',\n            'log_file': self.case_name + '.log'}\n\n        config['BeamLoader'] = {\n            'unsteady': 'off',\n            'orientation': self.quat}\n\n        config['AerogridLoader'] = {\n            'unsteady': 'off',\n            'aligned_grid': 'on',\n            'mstar': self.Mstar_fact * self.M,\n            'freestream_dir': str_u_inf_direction\n        }\n        config['NonLinearStatic'] = {'print_info': 'off',\n                                     'max_iterations': 150,\n                                     'num_load_steps': 0,\n                                     'delta_curved': 1e-5,\n                                     'min_delta': 1e-5,\n                                     'gravity_on': self.gravity_on,\n                                     'gravity': 9.754,\n                                     'orientation': self.quat}\n        config['StaticUvlm'] = {\n            'rho': self.rho,\n            'velocity_field_generator': 'SteadyVelocityField',\n            'velocity_field_input': {\n                'u_inf': self.u_inf,\n                'u_inf_direction': self.u_inf_direction},\n            'rollup_dt': self.dt,\n            'print_info': 'on',\n            'horseshoe': 'off',\n            'num_cores': 4,\n            'n_rollup': 0,\n            'rollup_aic_refresh': 0,\n            'rollup_tolerance': 1e-4}\n\n        config['StaticCoupled'] = {\n            'print_info': 'on',\n            'max_iter': 200,\n            'n_load_steps': 1,\n            'tolerance': 1e-10,\n            'relaxation_factor': 0.,\n            'aero_solver': 'StaticUvlm',\n            'aero_solver_settings': {\n                'rho': self.rho,\n                'print_info': 'off',\n                'horseshoe': 'off',\n                'num_cores': 4,\n                'n_rollup': 0,\n                'rollup_dt': self.dt,\n                'rollup_aic_refresh': 1,\n                'rollup_tolerance': 1e-4,\n                'velocity_field_generator': 'SteadyVelocityField',\n                'velocity_field_input': {\n                    'u_inf': self.u_inf,\n                    'u_inf_direction': str_u_inf_direction}},\n            #\n            'structural_solver': 'NonLinearStatic',\n            'structural_solver_settings': {'print_info': 'off',\n                                           'max_iterations': 150,\n                                           'num_load_steps': 0,\n                                           'delta_curved': 1e-1,\n                                           'min_delta': 1e-10,\n                                           'gravity_on': self.gravity_on,\n                                           'gravity': 9.81}}\n\n        config['LinearUvlm'] = {'dt': self.dt,\n                                'integr_order': 2,\n                                'density': self.rho,\n                                'remove_predictor': True,\n                                'use_sparse': True,\n                                'ScalingDict': {'length': 1.,\n                                                'speed': 1.,\n                                                'density': 1.}}\n\n        settings['StepLinearUVLM'] = {'dt': self.dt,\n                                      'solution_method': 'direct',\n                                      'velocity_field_generator': 'SteadyVelocityField',\n                                      'velocity_field_input': {\n                                          'u_inf': self.u_inf,\n                                          'u_inf_direction': self.u_inf_direction}}\n\n        settings['NonLinearDynamicPrescribedStep'] = {'print_info': 'off',\n                                                      'max_iterations': 950,\n                                                      'delta_curved': 1e-1,\n                                                      'min_delta': self.tolerance*1e3,\n                                                      'newmark_damp': 5e-3,\n                                                      'gravity_on': self.gravity_on,\n                                                      'gravity': 9.81,\n                                                      'num_steps': self.n_tstep,\n                                                      'dt': self.dt}\n\n        settings['StepUvlm'] = {'print_info': 'on',\n                                'horseshoe': self.horseshoe,\n                                'num_cores': 4,\n                                'n_rollup': 100,\n                                'convection_scheme': 0,\n                                'rollup_dt': self.dt,\n                                'rollup_aic_refresh': 1,\n                                'rollup_tolerance': 1e-4,\n                                # 'velocity_field_generator': 'TurbSimVelocityField',\n                                # 'velocity_field_input': {'turbulent_field': '/2TB/turbsim_fields/TurbSim_wide_long_A_low.h5',\n                                #                          'offset': [30., 0., -10],\n                                #                          'u_inf': 0.},\n                                # 'velocity_field_generator': 'GustVelocityField',\n                                # 'velocity_field_input': {'u_inf': self.u_inf,\n                                #                          'u_inf_direction': self.u_inf_direction,\n                                #                          'gust_shape': 'continuous_sin',\n                                #                          'gust_length': self.gust_length,\n                                #                          'gust_intensity': self.gust_intensity * self.u_inf,\n                                #                          'offset': 15.0,\n                                #                          'span': self.main_chord * self.aspect_ratio},\n                                'velocity_field_generator': 'SteadyVelocityField',\n                                'velocity_field_input': {'u_inf': self.u_inf*1,\n                                                            'u_inf_direction': [1., 0., 0.]},\n                                'rho': self.rho,\n                                'n_time_steps': self.n_tstep,\n                                'dt': self.dt,\n                                'gamma_dot_filtering': 3}\n\n        config['DynamicCoupled'] = {'print_info': 'on',\n                                    'structural_substeps': 0,\n                                    'dynamic_relaxation': 'on',\n                                    'cleanup_previous_solution': 'on',\n                                    'structural_solver': 'NonLinearDynamicPrescribedStep',\n                                    'structural_solver_settings': settings['NonLinearDynamicPrescribedStep'],\n                                    'aero_solver': 'StepUvlm',\n                                    'aero_solver_settings': settings['StepUvlm'],\n                                    'fsi_substeps': 200,\n                                    'fsi_tolerance': self.fsi_tolerance,\n                                    'relaxation_factor': self.relaxation_factor,\n                                    'minimum_steps': 1,\n                                    'relaxation_steps': 150,\n                                    'final_relaxation_factor': 0.0,\n                                    'n_time_steps': self.n_tstep,\n                                    'dt': self.dt,\n                                    'include_unsteady_force_contribution': 'off',\n                                    'postprocessors': ['BeamLoads', 'StallCheck', 'BeamPlot', 'AerogridPlot'],\n                                    'postprocessors_settings': {'BeamLoads': {'csv_output': 'off'},\n                                                                'StallCheck': {'output_degrees': True,\n                                                                               'stall_angles': {\n                                                                                   '0': [-12 * np.pi / 180,\n                                                                                         6 * np.pi / 180],\n                                                                                   '1': [-12 * np.pi / 180,\n                                                                                         6 * np.pi / 180],\n                                                                                   '2': [-12 * np.pi / 180,\n                                                                                         6 * np.pi / 180]}},\n                                                                'BeamPlot': {'include_rbm': 'on',\n                                                                             'include_applied_forces': 'on'},\n                                                                'AerogridPlot': {\n                                                                    'u_inf': self.u_inf,\n                                                                    'include_rbm': 'on',\n                                                                    'include_applied_forces': 'on',\n                                                                    'minus_m_star': 0}}}\n\n        config['DynamicUVLM'] = {'print_info': 'on',\n                                 'aero_solver': 'StepUvlm',\n                                 'aero_solver_settings': settings['StepUvlm'],\n                                 'n_time_steps': self.n_tstep,\n                                 'dt': self.dt,\n                                 'include_unsteady_force_contribution': 'on',\n                                 'postprocessors': ['AerogridPlot'],\n                                 'postprocessors_settings': {'AerogridPlot': {'u_inf': self.u_inf,\n                                                                              'include_rbm': 'off',\n                                                                              'include_applied_forces': 'on',\n                                                                              'minus_m_star': 0}}\n                                 }\n\n        config['AerogridPlot'] = {'include_rbm': 'off',\n                                  'include_applied_forces': 'on',\n                                  'minus_m_star': 0}\n\n        config['AeroForcesCalculator'] = {'write_text_file': 'on',\n                                          'text_file_name': self.case_name + '_aeroforces.csv',\n                                          'screen_output': 'on',\n                                          'unsteady': 'off'}\n\n        config['BeamPlot'] = {'include_rbm': 'off',\n                              'include_applied_forces': 'on'}\n\n        config['SaveData'] = {}\n\n        config['Modal'] = {'NumLambda': 20,\n                           'rigid_body_modes': 'off',\n                           'print_matrices': 'off',\n                           'save_data': 'off',\n                           'continuous_eigenvalues': 'off',\n                           'dt': 0,\n                           'plot_eigenvalues': False,\n                           'max_rotation_deg': 15.,\n                           'max_displacement': 0.15,\n                           'write_modes_vtk': True,\n                           'use_undamped_modes': True}\n\n        config['LinearAssembler'] = {'linear_system': 'LinearAeroelastic',\n                                     'linear_system_settings': {\n                                         'beam_settings': {'modal_projection': False,\n                                                           'inout_coords': 'nodes',\n                                                           'discrete_time': True,\n                                                           'newmark_damp': 0.5,\n                                                           'discr_method': 'newmark',\n                                                           'dt': self.dt,\n                                                           'proj_modes': 'undamped',\n                                                           'use_euler': 'off',\n                                                           'num_modes': 40,\n                                                           'print_info': 'on',\n                                                           'gravity': 'on',\n                                                           'remove_dofs': []},\n                                         'aero_settings': {'dt': self.dt,\n                                                           'integr_order': 2,\n                                                           'density': self.rho,\n                                                           'remove_predictor': False,\n                                                           'use_sparse': True,\n                                                           'rigid_body_motion': False,\n                                                           'use_euler': False,\n                                                           'remove_inputs': ['u_gust']},\n                                         'rigid_body_motion': False}}\n\n        config['AsymptoticStability'] = {'print_info': True,\n                                        'velocity_analysis': [30, 180, 151]}\n\n        config['LinDynamicSim'] = {'dt': self.dt,\n                                     'n_tsteps': self.n_tstep,\n                                     'sys_id': 'LinearAeroelastic',\n                                     'postprocessors': ['BeamPlot', 'AerogridPlot'],\n                                     'postprocessors_settings': {'AerogridPlot': {\n                                         'u_inf': self.u_inf,\n                                         'include_rbm': 'on',\n                                         'include_applied_forces': 'on',\n                                         'minus_m_star': 0},\n                                         'BeamPlot': {'include_rbm': 'on',\n                                                      'include_applied_forces': 'on'}}}\n\n        config['FrequencyResponse'] = {'compute_fom': 'on',\n                                       'frequency_unit': 'k',\n                                       'frequency_bounds': [0.0001, 1.0],\n                                       'quick_plot': 'on'}\n\n\n        config.write()\n        self.config = config\n        # print('config dictionary set-up with flow:')\n        # print(config['SHARPy']['flow'])\n\n    def generate_aero_file(self, airfoil_efficiency=None):\n\n        with h5.File(self.route + '/' + self.case_name + '.aero.h5', 'a') as h5file:\n            airfoils_group = h5file.create_group('airfoils')\n            # add one airfoil\n            for aa in range(len(self.Airfoils_surf)):\n                airfoils_group.create_dataset('%d' % aa, data=self.Airfoils_surf[aa])\n\n            chord_input = h5file.create_dataset('chord', data=self.chord)\n            dim_attr = chord_input.attrs['units'] = 'm'\n\n            twist_input = h5file.create_dataset('twist', data=self.twist)\n            dim_attr = twist_input.attrs['units'] = 'rad'\n\n            # airfoil distribution\n            airfoil_distribution_input = h5file.create_dataset(\n                'airfoil_distribution', data=self.airfoil_distribution)\n            surface_distribution_input = h5file.create_dataset(\n                'surface_distribution', data=self.surface_number)\n            surface_m_input = h5file.create_dataset(\n                'surface_m', data=self.surface_m)\n            m_distribution_input = h5file.create_dataset(\n                'm_distribution', data='uniform'.encode('ascii', 'ignore'))\n            aero_node_input = h5file.create_dataset(\n                'aero_node', data=self.aero_node)\n            elastic_axis_input = h5file.create_dataset(\n                'elastic_axis', data=self.elastic_axis)\n            control_surface_input = h5file.create_dataset(\n                'control_surface', data=self.control_surface)\n            control_surface_type_input = h5file.create_dataset(\n                'control_surface_type', data=self.control_surface_type)\n            control_surface_deflection_input = h5file.create_dataset(\n                'control_surface_deflection', data=self.control_surface_deflection)\n            control_surface_chord_input = h5file.create_dataset(\n                'control_surface_chord', data=self.control_surface_chord)\n            if airfoil_efficiency is not None:\n                a_eff_handle = h5file.create_dataset(\n                    'airfoil_efficiency', data=airfoil_efficiency)\n\n            if self.control_surface_hinge_coord is not None:\n                cs_hinge = h5file.create_dataset(\n                    'control_surface_hinge_coord', data=self.control_surface_hinge_coord\n                )\n\n            if self.polars is not None:\n                polars_group = h5file.create_group('polars')\n                for i_airfoil in range(len(self.Airfoils_surf)):\n                    polars_group.create_dataset('{:g}'.format(i_airfoil), data=self.polars)\n\n    def generate_fem_file(self):\n\n        assert hasattr(self, 'conn_glob'), \\\n            'Run \"update_derived_params\" before generating files'\n\n        with h5.File(self.route + '/' + self.case_name + '.fem.h5', 'a') as h5file:\n            coordinates = h5file.create_dataset(\n                'coordinates', data=np.column_stack((self.x, self.y, self.z)))\n            conectivities = h5file.create_dataset(\n                'connectivities', data=self.conn_glob)\n            num_nodes_elem_handle = h5file.create_dataset(\n                'num_node_elem', data=self.num_node_elem)\n            num_nodes_handle = h5file.create_dataset(\n                'num_node', data=self.num_node_tot)\n            num_elem_handle = h5file.create_dataset(\n                'num_elem', data=self.num_elem_tot)\n            stiffness_db_handle = h5file.create_dataset(\n                'stiffness_db', data=self.stiffness)\n            stiffness_handle = h5file.create_dataset(\n                'elem_stiffness', data=self.elem_stiffness)\n            mass_db_handle = h5file.create_dataset(\n                'mass_db', data=self.mass)\n            mass_handle = h5file.create_dataset(\n                'elem_mass', data=self.elem_mass)\n            frame_of_reference_delta_handle = h5file.create_dataset(\n                'frame_of_reference_delta', data=self.frame_of_reference_delta)\n            structural_twist_handle = h5file.create_dataset(\n                'structural_twist', data=np.zeros((self.num_elem_tot, 3)))\n            bocos_handle = h5file.create_dataset(\n                'boundary_conditions', data=self.boundary_conditions)\n            beam_handle = h5file.create_dataset(\n                'beam_number', data=self.surface_number)\n            app_forces_handle = h5file.create_dataset(\n                'app_forces', data=np.zeros((self.num_node_tot, 6)))\n            lumped_mass_handle = h5file.create_dataset(\n                'lumped_mass', data=self.lumped_mass)\n            lumped_mass_inertia_handle = h5file.create_dataset(\n                'lumped_mass_inertia', data=self.lumped_mass_inertia)\n            lumped_mass_position_handle = h5file.create_dataset(\n                'lumped_mass_position', data=self.lumped_mass_position)\n            lumped_mass__nodes_handle = h5file.create_dataset(\n                'lumped_mass_nodes', data=self.lumped_mass_nodes)\n\n    def generate_rom_files(self, left_tangent, right_tangent, ro, rc, fo, fc):\n        with h5.File(self.route + '/' + self.case_name + '.rom.h5', 'a') as h5file:\n            lt_handle = h5file.create_dataset('left_tangent',\n                                              data=left_tangent)\n            rt_handle = h5file.create_dataset('right_tangent',\n                                              data=right_tangent)\n            ro_h = h5file.create_dataset('ro', data=ro)\n            fo_h = h5file.create_dataset('fo', data=fo)\n            fc_h = h5file.create_dataset('fc', data=fc)\n            rc_h = h5file.create_dataset('rc', data=rc)\n\n    def clean_test_files(self):\n        fem_file_name = self.route + '/' + self.case_name + '.fem.h5'\n        if os.path.isfile(fem_file_name):\n            os.remove(fem_file_name)\n\n        aero_file_name = self.route + '/' + self.case_name + '.aero.h5'\n        if os.path.isfile(aero_file_name):\n            os.remove(aero_file_name)\n\n        solver_file_name = self.route + '/' + self.case_name + '.sharpy'\n        if os.path.isfile(solver_file_name):\n            os.remove(solver_file_name)\n\n        flightcon_file_name = self.route + '/' + self.case_name + '.flightcon.txt'\n        if os.path.isfile(flightcon_file_name):\n            os.remove(flightcon_file_name)\n\n        lininput_file_name = self.route + '/' + self.case_name + '.lininput.h5'\n        if os.path.isfile(lininput_file_name):\n            os.remove(lininput_file_name)\n\n        rom_file = self.route + '/' + self.case_name + '.rom.h5'\n        if os.path.isfile(rom_file):\n            os.remove(rom_file)\n\nclass Smith(FlyingWing):\n    '''\n    Build Smith HALE wing.\n    This class is nothing but a FlyingWing with pre-defined geometry properties\n    and mass/stiffness data (\"update_mass_stiffness\" method)\n     '''\n\n    def __init__(self,\n                 M, N,  # chord/span-wise discretisations\n                 Mstar_fact,\n                 u_inf,  # flight cond\n                 alpha,\n                 rho=0.08891,\n                 b_ref=32.,  # geometry\n                 main_chord=1.,\n                 aspect_ratio=32,\n                 roll=0.,\n                 beta=0.,\n                 sweep=0.,\n                 n_surfaces=2,\n                 route='.',\n                 case_name='smith',\n                 RollNodes=False):\n        super().__init__(M=M, N=N,\n                         Mstar_fact=Mstar_fact,\n                         u_inf=u_inf,\n                         alpha=alpha,\n                         rho=rho,\n                         b_ref=b_ref,\n                         main_chord=main_chord,\n                         aspect_ratio=aspect_ratio,\n                         roll=roll,\n                         beta=beta,\n                         sweep=sweep,\n                         n_surfaces=n_surfaces,\n                         route=route,\n                         case_name=case_name,\n                         RollNodes=RollNodes)\n        self.c_ref = 1.\n\n    def update_mass_stiff(self):\n        '''This method can be substituted to produce different wing configs'''\n        # uniform mass/stiffness\n\n        ea, ga = 1e5, 1e5\n        gj, eiy, eiz = 1e4, 2e4, 5e6\n        base_stiffness = np.diag([ea, ga, ga, gj, eiy, eiz])\n\n        self.stiffness = np.zeros((1, 6, 6))\n        self.stiffness[0] = self.sigma * base_stiffness\n\n        self.mass = np.zeros((1, 6, 6))\n        self.mass[0, :, :] = np.diag([0.75, 0.75, 0.75, .1, .1, .1])\n\n        self.elem_stiffness = np.zeros((self.num_elem_tot,), dtype=int)\n        self.elem_mass = np.zeros((self.num_elem_tot,), dtype=int)\n\n\nclass Goland(FlyingWing):\n    '''\n    Build a Goland wing.\n    This class is nothing but a FlyingWing with pre-defined geometry properties\n    and mass/stiffness data (\"update_mass_stiffness\" method)\n    '''\n\n    def __init__(self,\n                 M, N,  # chord/span-wise discretisations\n                 Mstar_fact,\n                 u_inf,  # flight cond\n                 alpha,\n                 rho=1.02,\n                 b_ref=2. * 6.096,  # geometry\n                 main_chord=1.8288,\n                 aspect_ratio=(2. * 6.096) / 1.8288,\n                 roll=0.,\n                 yaw=0.,\n                 beta=0.,\n                 sweep=0.,\n                 n_surfaces=1,\n                 physical_time=2,\n                 route='.',\n                 case_name='goland',\n                 RollNodes=False):\n        super().__init__(M=M, N=N,\n                         Mstar_fact=Mstar_fact,\n                         u_inf=u_inf,\n                         alpha=alpha,\n                         rho=rho,\n                         b_ref=b_ref,\n                         main_chord=main_chord,\n                         aspect_ratio=aspect_ratio,\n                         roll=roll,\n                         beta=beta,\n                         yaw=yaw,\n                         sweep=sweep,\n                         physical_time=physical_time,\n                         n_surfaces=n_surfaces,\n                         route=route,\n                         case_name=case_name,\n                         RollNodes=RollNodes)\n\n        # aeroelasticity parameters\n        self.main_ea = 0.33\n        self.main_cg = 0.43\n        self.sigma = 1\n\n        # other\n        self.c_ref = 1.8288\n\n    def update_mass_stiff(self):\n        '''\n        This method can be substituted to produce different wing configs.\n\n        Forthis model, remind that the delta_frame_of_reference is chosen such\n        that the B FoR axis are:\n        - xb: along the wing span\n        - yb: pointing towards the leading edge (i.e. roughly opposite than xa)\n        - zb: upward as za\n        '''\n        # uniform mass/stiffness\n\n        # ea,ga=1e7,1e6\n        ea, ga = 1e9, 1e9\n        gj = 0.987581e6\n        eiy = 9.77221e6\n        eiz = 1e2 * eiy\n        base_stiffness = np.diag([ea, ga, ga, self.sigma * gj, self.sigma * eiy, eiz])\n\n        self.stiffness = np.zeros((1, 6, 6))\n        self.stiffness[0] = base_stiffness\n\n        m_unit = 35.71\n        j_tors = 8.64\n        pos_cg_b = np.array([0., self.c_ref * (self.main_cg - self.main_ea), 0.])\n        m_chi_cg = algebra.skew(m_unit * pos_cg_b)\n        self.mass = np.zeros((1, 6, 6))\n        self.mass[0, :, :] = np.diag([m_unit, m_unit, m_unit,\n                                      j_tors, .1 * j_tors, .9 * j_tors])\n\n        self.mass[0, :3, 3:] = m_chi_cg\n        self.mass[0, 3:, :3] = -m_chi_cg\n\n        self.elem_stiffness = np.zeros((self.num_elem_tot,), dtype=int)\n        self.elem_mass = np.zeros((self.num_elem_tot,), dtype=int)\n\n\nclass GolandControlSurface(Goland):\n\n    def __init__(self,\n                 M, N,  # chord/span-wise discretisations\n                 Mstar_fact,\n                 u_inf,  # flight cond\n                 alpha,\n                 cs_deflection=[0,0],\n                 n_control_surfaces=2,\n                 rho=1.02,\n                 b_ref=2. * 6.096,  # geometry\n                 main_chord=1.8288,\n                 pct_flap=0.2,\n                 aspect_ratio=(2. * 6.096) / 1.8288,\n                 roll=0.,\n                 yaw=0.,\n                 beta=0.,\n                 sweep=0.,\n                 n_surfaces=1,\n                 physical_time=2,\n                 cs_type=0,\n                 route='.',\n                 case_name='goland',\n                 RollNodes=False):\n\n        super().__init__(M=M, N=N,\n                         Mstar_fact=Mstar_fact,\n                         u_inf=u_inf,\n                         alpha=alpha,\n                         rho=rho,\n                         b_ref=b_ref,\n                         main_chord=main_chord,\n                         aspect_ratio=aspect_ratio,\n                         roll=roll,\n                         beta=beta,\n                         yaw=yaw,\n                         sweep=sweep,\n                         physical_time=physical_time,\n                         n_surfaces=n_surfaces,\n                         route=route,\n                         case_name=case_name,\n                         RollNodes=RollNodes)\n\n        # aeroelasticity parameters\n        self.main_ea = 0.33\n        self.main_cg = 0.43\n        self.sigma = 1\n\n        self.n_control_surfaces = n_control_surfaces\n        self.control_surface_deflection = np.zeros(self.n_control_surfaces, dtype=float)\n        self.control_surface_deflection[:] = np.deg2rad(cs_deflection)\n        self.control_surface_chord = M // 2 * np.ones(self.n_control_surfaces, dtype=int)\n        self.control_surface_type = np.zeros(self.n_control_surfaces, dtype=int) + cs_type\n        self.control_surface_hinge_coord = np.zeros_like(self.control_surface_type, dtype=int)\n        # other\n        self.c_ref = 1.8288\n        self.pct_flap = pct_flap\n\n    def update_aero_prop(self):\n        assert hasattr(self, 'conn_glob'), \\\n            'Run \"update_derived_params\" before generating files'\n\n        n_surfaces = self.n_surfaces\n        num_node_surf = self.num_node_surf\n        num_node_tot = self.num_node_tot\n        num_elem_surf = self.num_elem_surf\n        num_elem_tot = self.num_elem_tot\n        pct_flap = self.pct_flap\n\n        control_surface = self.control_surface\n\n        ### Generate aerofoil profiles. Only on surf 0.\n        Airfoils_surf = []\n        if n_surfaces == 2:\n            for inode in range(num_node_surf):\n                eta = inode / num_node_surf\n                Airfoils_surf.append(\n                    np.column_stack(\n                        geo_utils.interpolate_naca_camber(\n                            eta,\n                            self.root_airfoil_M, self.root_airfoil_P,\n                            self.tip_airfoil_M, self.tip_airfoil_P)))\n                # if inode >= num_node_surf // 2:\n            ws_elem = 0\n            for i_surf in range(2):\n                # print('Surface' + str(i_surf))\n                for i_elem in range(num_elem_surf):\n                    for i_local_node in range(self.num_node_elem):\n                        if i_elem >= int(num_elem_surf *(1- pct_flap)):\n                            if i_surf == 0:\n                                control_surface[ws_elem + i_elem, i_local_node] = 0  # Right flap\n                            else:\n                                control_surface[ws_elem + i_elem, i_local_node] = 1  # Left flap\n                ws_elem += num_elem_surf\n                        # control_surface[i_elem, i_local_node] = 0\n\n            airfoil_distribution_surf = self.conn_surf\n            airfoil_distribution = np.concatenate([airfoil_distribution_surf,\n                                                   airfoil_distribution_surf[::-1, [1, 0, 2]]])\n            control_surface[-num_elem_surf:] = control_surface[-num_elem_surf:, :][::-1]\n\n        if n_surfaces == 1:\n            num_node_half = (num_node_surf + 1) // 2\n            for inode in range(num_node_half):\n                eta = inode / num_node_half\n                Airfoils_surf.append(\n                    np.column_stack(\n                        geo_utils.interpolate_naca_camber(\n                            eta,\n                            self.root_airfoil_M, self.root_airfoil_P,\n                            self.tip_airfoil_M, self.tip_airfoil_P)))\n            airfoil_distribution_surf = self.conn_surf[:num_elem_surf // 2, :]\n            airfoil_distribution = np.concatenate([\n                airfoil_distribution_surf[::-1, [1, 0, 2]],\n                airfoil_distribution_surf])\n\n        self.Airfoils_surf = Airfoils_surf\n        self.airfoil_distribution = airfoil_distribution\n\n        ### others\n        self.aero_node = np.ones((num_node_tot,), dtype=bool)\n        self.surface_m = self.M * np.ones((n_surfaces,), dtype=int)\n\n        self.twist = np.zeros((num_elem_tot, 3))\n        self.chord = self.main_chord * np.ones((num_elem_tot, 3))\n        self.elastic_axis = self.main_ea * np.ones((num_elem_tot, 3,))\n        self.control_surface = control_surface\n\n    def create_linear_files(self, x0, input_vec):\n        with h5.File(self.route + '/' + self.case_name + '.lininput.h5', 'a') as h5file:\n            x0 = h5file.create_dataset(\n                'x0', data=x0)\n            u = h5file.create_dataset(\n                'u', data=input_vec)\n\nclass QuasiInfinite(FlyingWing):\n    '''\n    Builds a very high aspect ratio wing, for simulating 2D aerodynamics\n    This class is nothing but a FlyingWing with pre-defined geometry properties\n    and mass/stiffness data (\"update_mass_stiffness\" method)\n     '''\n\n    def __init__(self,\n                 M, N,\n                 Mstar_fact,\n                 u_inf,\n                 alpha,\n                 aspect_ratio,\n                 rho=0.08891,\n                 b_ref=32.,\n                 main_chord=3.,\n                 roll=0.,\n                 beta=0.,\n                 sweep=0.,\n                 n_surfaces=1,\n                 route='.',\n                 case_name='qsinf',\n                 RollNodes=False,\n                 polar_file=None):\n        super().__init__(M=M, N=N,\n                         Mstar_fact=Mstar_fact,\n                         u_inf=u_inf,\n                         alpha=alpha,\n                         rho=rho,\n                         b_ref=b_ref,\n                         main_chord=main_chord,\n                         aspect_ratio=aspect_ratio,\n                         roll=roll,\n                         beta=beta,\n                         sweep=sweep,\n                         n_surfaces=n_surfaces,\n                         route=route,\n                         case_name=case_name,\n                         RollNodes=RollNodes,\n                         polar_file=polar_file)\n        self.c_ref = main_chord\n        self.main_ea = 0.5\n        self.main_cg = 0.5\n\n    def update_mass_stiff(self):\n        '''This method can be substituted to produce different wing configs'''\n        # uniform mass/stiffness\n\n        ea, ga = 1e9, 1e9\n        gj = 2e8\n        eiy = 1e8\n        eiz = 1e8\n        base_stiffness = np.diag([ea, ga, ga, gj, eiy, eiz])\n        self.stiffness = np.zeros((1, 6, 6))\n        self.stiffness[0] = self.sigma * base_stiffness\n\n        m_unit = 1.\n        self.mass = np.zeros((1, 6, 6))\n        self.mass[0, :, :] = np.diag([m_unit, m_unit, m_unit, 1., .5, .5])\n        self.elem_stiffness = np.zeros((self.num_elem_tot,), dtype=int)\n        self.elem_mass = np.zeros((self.num_elem_tot,), dtype=int)\n\nclass Pazy(FlyingWing):\n    '''\n    Build a Pazy wing.\n\n    The Pazy wing is a highly flexible wing designed and developed at Technion University as an aeroelastic\n    test case.\n\n    '''\n\n    def __init__(self,\n                 M, N,  # chord/span-wise discretisations\n                 Mstar_fact,\n                 u_inf,  # flight cond\n                 alpha,\n                 rho=1.225,\n                 tip_rod=True,\n                 b_ref=2. * 0.55,  # geometry\n                 main_chord=0.1,\n                 aspect_ratio=(2. * 0.55) / 0.1,\n                 roll=0.,\n                 yaw=0.,\n                 beta=0.,\n                 sweep=0.,\n                 n_surfaces=1,\n                 physical_time=2,\n                 route='.',\n                 case_name='pazy',\n                 RollNodes=False):\n\n        super().__init__(M=M, N=N,\n                         Mstar_fact=Mstar_fact,\n                         u_inf=u_inf,\n                         alpha=alpha,\n                         rho=rho,\n                         b_ref=b_ref,\n                         main_chord=main_chord,\n                         aspect_ratio=aspect_ratio,\n                         roll=roll,\n                         beta=beta,\n                         yaw=yaw,\n                         sweep=sweep,\n                         physical_time=physical_time,\n                         n_surfaces=n_surfaces,\n                         route=route,\n                         case_name=case_name,\n                         RollNodes=RollNodes)\n\n        # aeroelasticity parameters\n#         self.main_ea = 0.3\n        self.main_ea = 0.4475\n        self.main_cg = 0.4510\n        self.sigma = 1\n\n        # other\n        self.c_ref = main_chord\n\n        self.tip_rod = tip_rod\n\n    def update_mass_stiff(self):\n        '''\n        This method can be substituted to produce different wing configs.\n\n        For this model, remind that the delta_frame_of_reference is chosen such\n        that the B FoR axis are:\n        - xb: along the wing span\n        - yb: pointing towards the leading edge (i.e. roughly opposite than xa)\n        - zb: upward as za\n        '''\n        # uniform mass/stiffness\n\n        # Scaling factors (for debugging):\n        sigma_scale_stiff = 1\n        sigma_scale_I = 1\n\n        # Pulling:\n        ea = 7.12E+06\n\n        # In-plane bending:\n        ga_inp = 3.31E+06\n        ei_inp = 3.11E+03\n\n        # Out-of-plane bending:\n        # Original:\n        # ga_oup = -4.16E+03\n        ei_oup = 4.67E+00\n\n        # Adjusted:\n        # Adjusted to become non-negative\n        ga_oup = 1E+06\n\n        # Torsion:\n        gj = 7.20E+00\n\n        base_stiffness = np.diag([ea, ga_oup, ga_inp, gj, ei_oup, ei_inp]) * sigma_scale_stiff\n\n        self.stiffness = np.zeros((1, 6, 6))\n        self.stiffness[0] = base_stiffness\n\n        m_unit = 5.50E-01 # kg/m\n\n        # Test cases to confirm properties:\n        # Tests in vacuum, AoA=0 deg, analysed with NonLinearStatic beam solver. Verification displacements taken from\n        # full 3D non-linear analysis in Abaqus.\n\n        # Bending:\n        # 5 N load at the tip. Expected deflection of about 62.6 mm at the tip (no gravity)\n        # Tip coordinate in beam-fitted coordinates: X = 0.55m, Y = 0.m, Z = 0.m\n        # m_unit = 0.001 # negligible mass distribution to mimic no-gravity FEA analysis\n        # self.lumped_mass[0] = 5.2866 / 9.81\n        # self.lumped_mass_position[0] = np.array([0, 0, 0])\n        # self.lumped_mass_nodes[0] = self.N // 2\n        # self.lumped_mass_inertia[0, :, :] = np.diag([1e-1, 1e-1, 1e-1])\n\n        # Alternative bending:\n        # self.app_forces[self.N//2, :] = [0, 0, 5.2866, 0, 0, 0]\n\n        # Torsion:\n        # Torsion of 0.3275 Nm, difference in tip LE/TE height: 1.130498767 + 1.361232758 = 2.49 mm\n        # self.app_forces[self.N // 2, :] = [0, 0, 0, 0.3275, 0, 0]\n\n        pos_cg_b = np.array([0., self.c_ref * (self.main_cg - self.main_ea), 0.])*sigma_scale_I\n        m_chi_cg = algebra.skew(m_unit * pos_cg_b)\n        self.mass = np.zeros((1, 6, 6))\n\n        Js = 3.03E-04  # kg.m2/m\n\n        # Mass matrix J components: torsion, out of plane bending, in-plane bending\n        # Torsion: increasing J decreases natural frequency\n        # Bending: increasing J increases natural frequency\n        # Chosen experimentally to match natural frequencies from Abaqus analysis\n        self.mass[0, :, :] = np.diag([m_unit, m_unit, m_unit, Js, 0.5*Js, 12*Js])*sigma_scale_I\n        self.mass[0, :3, 3:] = m_chi_cg\n        self.mass[0, 3:, :3] = -m_chi_cg\n\n        self.elem_stiffness = np.zeros((self.num_elem_tot,), dtype=int)\n        self.elem_mass = np.zeros((self.num_elem_tot,), dtype=int)\n\n        if self.tip_rod:\n            n_lumped_mass = 2\n            self.lumped_mass = np.zeros((n_lumped_mass))\n            self.lumped_mass_position = np.zeros((n_lumped_mass, 3))\n            self.lumped_mass_inertia = np.zeros((n_lumped_mass, 3, 3))\n            self.lumped_mass_nodes = np.zeros((n_lumped_mass), dtype=int)\n\n            # Lumped mass for approximating the wingtip weight (1):\n            self.lumped_mass[0] = 19.95 / 1E3  # mass in kg\n            # self.lumped_mass[0] = 1  # mass in kg - just to visually check\n            self.lumped_mass_position[0] = np.array([0.005, -0.005, 0])\n            self.lumped_mass_nodes[0] = self.N // 2\n            self.lumped_mass_inertia[0, :, :] = np.diag([1.2815E-04, 2.87E-07, 1.17E-04])\n\n            # Lumped mass for approximating the wingtip weight (2):\n            self.lumped_mass[1] = 19.95 / 1E3  # mass in kg\n            # self.lumped_mass[1] = 1  # mass in kg - just to visually check\n            self.lumped_mass_position[1] = np.array([-0.005, -0.005, 0])  # positive x now ascending towards root\n            self.lumped_mass_nodes[1] = self.N // 2 + 1\n            self.lumped_mass_inertia[1, :, :] = np.diag([1.2815E-04, 2.87E-07, 1.17E-04])\n\n\n\nclass PazyControlSurface(Pazy):\n\n    def __init__(self,\n                 M, N,  # chord/span-wise discretisations\n                 Mstar_fact,\n                 u_inf,  # flight cond\n                 alpha,\n                 cs_deflection=0,\n                 n_control_surfaces=2,\n                 rho=1.225,\n                 tip_rod=True,\n                 b_ref= 2. * 0.55,  # geometry\n                 main_chord= 0.1,\n                 pct_flap= 0.2,\n                 aspect_ratio= (2. * 0.55) / 0.1,\n                 roll=0.,\n                 yaw=0.,\n                 beta=0.,\n                 sweep=0.,\n                 n_surfaces=1,\n                 physical_time=2,\n                 route='.',\n                 case_name='pazy',\n                 RollNodes=False,\n                 cs_type=0):\n\n        super().__init__(M=M, N=N,\n                         Mstar_fact=Mstar_fact,\n                         u_inf=u_inf,\n                         alpha=alpha,\n                         rho=rho,\n                         tip_rod=tip_rod,\n                         b_ref=b_ref,\n                         main_chord=main_chord,\n                         aspect_ratio=aspect_ratio,\n                         roll=roll,\n                         beta=beta,\n                         yaw=yaw,\n                         sweep=sweep,\n                         physical_time=physical_time,\n                         n_surfaces=n_surfaces,\n                         route=route,\n                         case_name=case_name,\n                         RollNodes=RollNodes)\n\n        # aeroelasticity parameters\n#         self.main_ea = 0.3\n        self.main_ea = 0.4475\n        self.main_cg = 0.4510\n        self.sigma = 1\n\n        self.n_control_surfaces = self.n_surfaces\n        self.control_surface_deflection = np.zeros(self.n_control_surfaces, dtype=float)\n        self.control_surface_deflection[:] = np.deg2rad(cs_deflection)\n        self.control_surface_chord = M // 2 * np.ones(self.n_control_surfaces, dtype=int)\n        self.control_surface_type = np.zeros(self.n_control_surfaces, dtype=int) + cs_type\n        self.control_surface_hinge_coord = np.zeros_like(self.control_surface_type, dtype=int)\n        # other\n        self.c_ref = main_chord\n        self.pct_flap = pct_flap\n\n    def update_aero_prop(self):\n        assert hasattr(self, 'conn_glob'), \\\n            'Run \"update_derived_params\" before generating files'\n\n        n_surfaces = self.n_surfaces\n        num_node_surf = self.num_node_surf\n        num_node_tot = self.num_node_tot\n        num_elem_surf = self.num_elem_surf\n        num_elem_tot = self.num_elem_tot\n        pct_flap = self.pct_flap\n\n        control_surface = self.control_surface\n\n        ### Generate aerofoil profiles. Only on surf 0.\n        Airfoils_surf = []\n        if n_surfaces == 2:\n            for inode in range(num_node_surf):\n                eta = inode / num_node_surf\n                Airfoils_surf.append(\n                    np.column_stack(\n                        geo_utils.interpolate_naca_camber(\n                            eta,\n                            self.root_airfoil_M, self.root_airfoil_P,\n                            self.tip_airfoil_M, self.tip_airfoil_P)))\n                # if inode >= num_node_surf // 2:\n            ws_elem = 0\n            for i_surf in range(2):\n                for i_elem in range(num_elem_surf):\n                    for i_local_node in range(self.num_node_elem):\n                        if i_elem >= int(num_elem_surf *(1- pct_flap)):\n                            if i_surf == 0:\n                                control_surface[ws_elem + i_elem, i_local_node] = 0  # Right flap\n                            else:\n                                control_surface[ws_elem + i_elem, i_local_node] = 1  # Left flap\n                ws_elem += num_elem_surf\n                        # control_surface[i_elem, i_local_node] = 0\n\n            airfoil_distribution_surf = self.conn_surf\n            airfoil_distribution = np.concatenate([airfoil_distribution_surf,\n                                                   airfoil_distribution_surf[::-1, [1, 0, 2]]])\n            control_surface[-num_elem_surf:] = control_surface[-num_elem_surf:, :][::-1]\n\n        if n_surfaces == 1:\n            num_node_half = (num_node_surf + 1) // 2\n            for inode in range(num_node_half):\n                eta = inode / num_node_half\n                Airfoils_surf.append(\n                    np.column_stack(\n                        geo_utils.interpolate_naca_camber(\n                            eta,\n                            self.root_airfoil_M, self.root_airfoil_P,\n                            self.tip_airfoil_M, self.tip_airfoil_P)))\n            airfoil_distribution_surf = self.conn_surf[:num_elem_surf // 2, :]\n            airfoil_distribution = np.concatenate([\n                airfoil_distribution_surf[::-1, [1, 0, 2]],\n                airfoil_distribution_surf])\n\n        self.Airfoils_surf = Airfoils_surf\n        self.airfoil_distribution = airfoil_distribution\n\n        ### others\n        self.aero_node = np.ones((num_node_tot,), dtype=bool)\n        self.surface_m = self.M * np.ones((n_surfaces,), dtype=int)\n\n        self.twist = np.zeros((num_elem_tot, 3))\n        self.chord = self.main_chord * np.ones((num_elem_tot, 3))\n        self.elastic_axis = self.main_ea * np.ones((num_elem_tot, 3,))\n        self.control_surface = control_surface\n\n    def create_linear_files(self, x0, input_vec):\n        with h5.File(self.route + '/' + self.case_name + '.lininput.h5', 'a') as h5file:\n            x0 = h5file.create_dataset(\n                'x0', data=x0)\n            u = h5file.create_dataset(\n                'u', data=input_vec)\n\n\n\nif __name__ == '__main__':\n    import os\n\n    os.system('mkdir -p %s' % './test')\n\n    ws = Goland(M=4, N=20, Mstar_fact=12, u_inf=25., alpha=2.0, route='./test')\n    ws.clean_test_files()\n    ws.update_derived_params()\n    ws.generate_fem_file()\n    ws.generate_aero_file()\n"
  },
  {
    "path": "sharpy/cases/templates/fuselage_wing_configuration/__init__.py",
    "content": ""
  },
  {
    "path": "sharpy/cases/templates/fuselage_wing_configuration/fuselage_wing_configuration.py",
    "content": "import configobj\nfrom .fwc_structure import FWC_Structure\nfrom .fwc_aero import FWC_Aero\nfrom .fwc_fuselage import FWC_Fuselage\nimport os\nimport sharpy.sharpy_main\n\n\nclass Fuselage_Wing_Configuration:\n    \"\"\"\n        Fuselage_Wing_Configuration is a template class to create an \n        aircraft model of a simple wing-fuselage configuration within\n        SHARPy. \n       \n    \"\"\"\n\n    def __init__(self, case_name, case_route, output_route):\n        self.case_name = case_name\n        self.case_route = case_route\n        self.output_route = output_route\n\n        self.structure = None\n        self.aero = None\n        self.fuselage = None\n\n        self.settings = None\n\n    def init_aeroelastic(self, **kwargs):\n        self.clean()\n        self.init_structure(**kwargs)\n        self.init_aero(**kwargs)\n        if not kwargs.get('lifting_only', True):\n            self.init_fuselage(**kwargs)\n\n    def init_structure(self, **kwargs):\n        self.structure = FWC_Structure(self.case_name, self.case_route, **kwargs)\n\n    def init_aero(self, **kwargs):\n        self.aero = FWC_Aero(self.structure, self.case_name, self.case_route,**kwargs)\n\n    def init_fuselage(self, **kwargs):\n        self.fuselage = FWC_Fuselage(self.structure, self.case_name, self.case_route,**kwargs)\n    def generate(self):\n        if not os.path.isdir(self.case_route):\n            os.makedirs(self.case_route)\n        self.structure.generate()\n        self.aero.generate()\n        if self.fuselage is not None:\n            self.fuselage.generate()\n\n    def create_settings(self, settings):\n        file_name = self.case_route + '/' + self.case_name + '.sharpy'\n        config = configobj.ConfigObj()\n        config.filename = file_name\n        for k, v in settings.items():\n            config[k] = v\n        config.write()\n        self.settings = settings\n\n    def clean(self):\n        list_files = ['.fem.h5', '.aero.h5', '.nonlifting_body.h5', '.dyn.h5', '.mb.h5', '.sharpy', '.flightcon.txt']\n        for file in list_files:\n            path_file = self.case_route + '/' + self.case_name + file\n            if os.path.isfile(path_file):\n                os.remove(path_file)\n\n    def run(self):\n        sharpy.sharpy_main.main(['', self.case_route + '/' + self.case_name + '.sharpy'])\n\n"
  },
  {
    "path": "sharpy/cases/templates/fuselage_wing_configuration/fwc_aero.py",
    "content": "import h5py as h5\nimport numpy as np\n\n\nclass FWC_Aero:\n    \"\"\"\n        FWC_Aero contains all attributes to define the aerodynamic grid and makes it accessible for SHARPy.\n    \"\"\"\n    def __init__(self, structure, case_name, case_route, **kwargs):\n        \"\"\"        \n        Key-Word Arguments:\n            - structure: structural object of BFF model\n        \"\"\"\n        self.structure = structure\n\n        self.route = case_route\n        self.case_name = case_name\n\n        self.ea_wing = kwargs.get('elastic_axis',0.5)\n        self.num_chordwise_panels = kwargs.get('num_chordwise_panels', 4)\n        self.chord_wing = kwargs.get('chord', 1.)\n        self.alpha_zero_deg = kwargs.get('alpha_zero_deg', 0.)\n        self.n_surfaces = 2\n        self.radius_fuselage = kwargs.get('max_radius', 0.5)\n        self.lifting_only = kwargs.get('lifting_only', True)\n        \n\n    def generate(self):\n        \"\"\"\n            Function to set up all necessary parameter inputs to define the geometry and discretisation\n            of the lifting surfaces. Finally, informations are saved to an .h5 file serving as an input\n            file for SHARPy.\n        \"\"\"\n        self.initialize_attributes()\n        self.set_wing_properties()\n        self.set_junction_boundary_conditions()\n        self.write_input_file()\n\n    def initialize_attributes(self):\n        \"\"\"\n            Initilializes all necessary attributes for the aero.h5 input file based on the number of \n            nodes, elements, and surfaces of the model.\n        \"\"\"\n        self.airfoil_distribution = np.zeros((self.structure.n_elem, self.structure.n_node_elem), dtype=int)\n        self.surface_distribution = np.zeros((self.structure.n_elem,), dtype=int)\n        self.surface_m = np.zeros((self.n_surfaces, ), dtype=int) + self.num_chordwise_panels\n        self.aero_node = np.zeros((self.structure.n_node,), dtype=bool)\n\n        self.twist = np.zeros((self.structure.n_elem, self.structure.n_node_elem))\n        self.sweep = np.zeros_like(self.twist)\n        self.chord = np.zeros_like(self.twist)\n        self.elastic_axis = np.zeros_like(self.twist)\n\n        self.junction_boundary_condition_aero = np.zeros((1, self.n_surfaces), dtype=int) - 1\n    \n    def get_y_junction(self):\n        if self.structure.vertical_wing_position == 0:\n            return self.radius_fuselage\n        else:\n            return np.sqrt(self.radius_fuselage**2-self.structure.vertical_wing_position**2)\n    def set_wing_properties(self):\n        \"\"\"\n            Sets necessary parameters to define the lifting surfaces of one wing (right).\n        \"\"\"\n        \n        if not self.lifting_only:\n            self.aero_node[:self.structure.n_node_right_wing] = abs(self.structure.y[:self.structure.n_node_right_wing]) > self.get_y_junction() - 0.05\n            self.aero_node[self.structure.n_node_right_wing:self.structure.n_node_wing_total] = self.aero_node[1:self.structure.n_node_right_wing]\n        else:\n            self.aero_node[:self.structure.n_node_wing_total] = True\n        self.chord[:2*self.structure.n_elem_per_wing, :] = self.chord_wing\n        self.elastic_axis[:2*self.structure.n_elem_per_wing, :] = self.ea_wing\n        self.twist[:2*self.structure.n_elem_per_wing, :] = -np.deg2rad(self.alpha_zero_deg)\n        # surf distribution 0 for right and 1 for left wing\n        self.surface_distribution[self.structure.n_elem_per_wing:2*self.structure.n_elem_per_wing] = 1\n\n    def set_junction_boundary_conditions(self):\n        \"\"\"\n            Sets the boundary conditions for the fuselage-wing junction. These BCs\n            define the partner surface.\n        \"\"\"\n        # Right wing (surface 0) has the left wing (surface 1) as a partner surface.\n        self.junction_boundary_condition_aero[0, 0] = 1\n        # Left wing (surface 1) has the left wing (surface 0) as a partner surface.\n        self.junction_boundary_condition_aero[0, 1] = 0\n\n    def write_input_file(self):\n        \"\"\"\n            Writes previously defined parameters to an .h5 file which serves later as an \n            input file for SHARPy.\n        \"\"\"\n            \n        with h5.File(self.route + '/' + self.case_name + '.aero.h5', 'a') as h5file:\n            airfoils_group = h5file.create_group('airfoils')\n            # add one airfoil\n            airfoils_group.create_dataset('0', \n                                          data=np.column_stack(\n                                            self.generate_naca_camber(P=0, M=0)\n                                          ))\n\n            h5file.create_dataset('chord', data=self.chord)\n            h5file.create_dataset('twist', data=self.twist)\n            h5file.create_dataset('sweep', data=self.sweep)\n\n            # airfoil distribution\n            h5file.create_dataset('airfoil_distribution', data=self.airfoil_distribution)\n            h5file.create_dataset('surface_distribution', data=self.surface_distribution)\n            h5file.create_dataset('surface_m', data=self.surface_m)\n            h5file.create_dataset('m_distribution', data='uniform')\n            h5file.create_dataset('aero_node', data=self.aero_node)\n            h5file.create_dataset('elastic_axis', data=self.elastic_axis)\n            h5file.create_dataset('junction_boundary_condition', data=self.junction_boundary_condition_aero)\n   \n\n    def generate_naca_camber(self,M=0, P=0):\n        \"\"\"\n            Generates the camber line coordinates of a specified NACA airfoil.\n            # TODO: needed?\n        \"\"\"\n        mm = M*1e-2\n        p = P*1e-1\n\n        def naca(x, mm, p):\n            if x < 1e-6:\n                return 0.0\n            elif x < p:\n                return mm/(p*p)*(2*p*x - x*x)\n            elif x > p and x < 1+1e-6:\n                return mm/((1-p)*(1-p))*(1 - 2*p + 2*p*x - x*x)\n\n        x_vec = np.linspace(0, 1, 1000)\n        y_vec = np.array([naca(x, mm, p) for x in x_vec])\n        \n        return x_vec, y_vec\n"
  },
  {
    "path": "sharpy/cases/templates/fuselage_wing_configuration/fwc_fuselage.py",
    "content": "#! /usr/bin/env python3\nimport h5py as h5\nimport numpy as np\nimport matplotlib.pyplot as plt\n   \n\nclass FWC_Fuselage:\n    \"\"\"\n        FWC_Fuselage contains all attributes to define the nonlifting body grid \n        representing the fuselage shape and makes it accessible for SHARPy.\n    \"\"\"\n    def __init__(self, structure, case_name, case_route, **kwargs):\n        \"\"\"        \n        Key-Word Arguments:\n            - structure: structural object of BFF model\n        \"\"\"\n        self.num_radial_panels = kwargs.get('num_radial_panels', 12)\n        self.max_radius = kwargs.get('max_radius')\n        self.fuselage_shape = kwargs.get('fuselage_shape','cylindrical')\n        self.flag_plot_radius = kwargs.get('flag_plot_radius', False)\n        self.structure = structure\n\n        self.route = case_route\n        self.case_name = case_name\n        self.n_nonlifting_bodies = 1\n\n    def generate(self): \n        \"\"\"\n            Function to set up all necessary parameter inputs to define the geometry and discretisation\n            of the nonlifting surfaces. Finally, informations are saved to an .h5 file serving as an input\n            file for SHARPy.\n        \"\"\"\n\n        self.initialize_parameters()\n\n        self.nonlifting_body_node[self.structure.n_node_wing_total:self.structure.n_node_fuselage_tail] = True\n        if self.structure.vertical_wing_position == 0:\n            self.nonlifting_body_node[0] = True\n        self.nonlifting_body_distribution[self.structure.n_elem_per_wing*2:self.structure.n_elem_per_wing*2+self.structure.n_elem_fuselage] = 0\n        self.nonlifting_body_m[0] = self.num_radial_panels\n\n        self.get_fuselage_geometry()\n\n        self.write_fuselage_input_file()\n        \n\n    def initialize_parameters(self):  \n        \"\"\"\n            Initilializes all necessary attributes for the nonlifting.h5 input file based on the number of \n            nodes, elements, and surfaces of the nonlifting model.\n        \"\"\"      \n        self.nonlifting_body_node = np.zeros((self.structure.n_node,), dtype=bool)\n        self.nonlifting_body_distribution = np.zeros((self.structure.n_elem,), dtype=int) - 1\n        self.nonlifting_body_m = np.zeros((self.n_nonlifting_bodies, ), dtype=int)\n        self.radius = np.zeros((self.structure.n_node,))\n\n    def get_fuselage_geometry(self):\n        x_coord_fuselage_sorted = np.sort(self.get_values_at_fuselage_nodes(self.structure.x))\n        if self.fuselage_shape == 'cylindrical':\n            radius_fuselage = self.create_fuselage_geometry(x_coord_fuselage_sorted.copy(), 0.2*self.structure.fuselage_length, 0.8*self.structure.fuselage_length) \n        elif self.fuselage_shape == 'ellipsoid':\n            radius_fuselage = self.get_radius_ellipsoid(x_coord_fuselage_sorted.copy(), self.structure.fuselage_length/2, self.max_radius)\n        else:\n            raise \"ERROR Fuselage shape {} unknown.\".format(self.fuselage_shape)\n        if self.structure.vertical_wing_position == 0:\n            self.radius[0] = radius_fuselage[self.structure.idx_junction]\n            self.radius[self.structure.n_node_wing_total:] =np.delete(radius_fuselage, self.structure.idx_junction)\n        else:\n            self.radius[self.structure.n_node_wing_total:self.structure.n_node_fuselage_tail] = radius_fuselage\n        if self.flag_plot_radius:\n            self.plot_fuselage_radius(self.get_values_at_fuselage_nodes(self.structure.x), self.get_values_at_fuselage_nodes(self.radius))\n            self.plot_fuselage_radius(x_coord_fuselage_sorted, radius_fuselage)\n\n    def get_values_at_fuselage_nodes(self, array):\n        return array[self.nonlifting_body_node]\n    \n    def plot_fuselage_radius(self, x, radius):\n        plt.scatter(x,\n                 radius)\n        plt.grid()\n        plt.xlabel(\"x, m\")\n        plt.ylabel(\"r, m\")\n        plt.gca().set_aspect('equal')\n        plt.show()\n\n    def write_fuselage_input_file(self):\n        with h5.File(self.route + '/' + self.case_name + '.nonlifting_body.h5', 'a') as h5file:\n            h5file.create_dataset('shape', data='cylindrical')\n            h5file.create_dataset('surface_m', data=self.nonlifting_body_m)\n            h5file.create_dataset('nonlifting_body_node', data=self.nonlifting_body_node)\n            h5file.create_dataset('surface_distribution', data=self.nonlifting_body_distribution)\n            h5file.create_dataset('radius', data=self.radius)\n\n    def get_radius_ellipsoid(self, x_coordinates, a, b):\n        x_coordinates[:] -=  x_coordinates[-1] - a\n        y_coordinates = b*np.sqrt(1-(x_coordinates/a)**2)\n        return y_coordinates\n\n    def find_index_of_closest_entry(self, array_values, target_value):\n        return np.argmin(np.abs(array_values - target_value))\n\n\n    def create_fuselage_geometry(self, x_coord_fuselage, x_nose_end, x_tail_start):\n        array_radius = np.zeros_like(x_coord_fuselage)\n        # start with nose at zero to get indices of nose and tail correct\n        x_coord_fuselage[:] -=  x_coord_fuselage[0]\n        idx_cylinder_start = self.find_index_of_closest_entry(x_coord_fuselage, x_nose_end)\n        idx_cylinder_end = self.find_index_of_closest_entry(x_coord_fuselage, x_tail_start)\n\n        # set constant radius of cylinder\n        array_radius[idx_cylinder_start:idx_cylinder_end] = self.max_radius\n        # get ellipsoidal nose and tail shape\n        array_radius[:idx_cylinder_start+1] = self.get_nose_shape(x_coord_fuselage[:idx_cylinder_start+1],\n                                                                  self.max_radius)\n        \n        array_radius[idx_cylinder_end-1:] = np.flip(self.get_nose_shape(x_coord_fuselage[idx_cylinder_end-1:],\n                                                                  self.max_radius))\n        \n        return array_radius\n    \n    def get_nose_shape(self, x_coord, radius):\n        n_nodes = len(x_coord)\n        x_coord[:] -= x_coord[-1]\n        x_coord = np.concatenate((x_coord, np.flip(x_coord[:-1])))        \n        radius = self.get_radius_ellipsoid(x_coord, x_coord[0], radius)\n        return radius[:n_nodes]\n"
  },
  {
    "path": "sharpy/cases/templates/fuselage_wing_configuration/fwc_get_settings.py",
    "content": "import numpy as np\nimport sharpy.utils.algebra as algebra\n\ndef define_simulation_settings(flow, model, alpha_deg, u_inf, \n                               dt=1,\n                               rho = 1.225, \n                               lifting_only=True, \n                               nonlifting_only=False, \n                               phantom_test=False,\n                               horseshoe=False, **kwargs):\n    gravity = kwargs.get('gravity',True)\n    nonlifting_body_interactions = not lifting_only and not nonlifting_only\n    wake_length = kwargs.get('wake_length', 10)\n    # Other parameters\n    if horseshoe:\n        mstar = 1 \n    else:\n        mstar = wake_length*model.aero.num_chordwise_panels\n    # numerics\n    n_step = kwargs.get('n_step', 5)\n    structural_relaxation_factor = kwargs.get('structural_relaxation_factor', 0.6)\n    tolerance = kwargs.get('tolerance', 1e-6)\n    fsi_tolerance = kwargs.get('fsi_tolerance', 1e-6)\n    num_cores = kwargs.get('num_cores',2)\n\n    if not lifting_only:\n        nonlifting_body_interactions = True\n    else:\n        nonlifting_body_interactions = False\n    settings = {}\n    settings['SHARPy'] = {'case': model.case_name,\n                        'route': model.case_route,\n                        'flow': flow,\n                        'write_screen': 'off',\n                        'write_log': 'on',\n                        'log_folder': model.output_route,\n                        'log_file': model.case_name + '.log'}\n\n\n    settings['BeamLoader'] = {'unsteady': 'on',\n                                'orientation': algebra.euler2quat(np.array([0.,\n                                                                            np.deg2rad(alpha_deg),\n                                                                            0.]))}\n\n    settings['BeamLoads']  = {}\n    settings['LiftDistribution'] = {'coefficients': True}\n    \n    settings['NonLinearStatic'] = {'print_info': 'off',\n                                'max_iterations': 150,\n                                'num_load_steps': 1,\n                                'delta_curved': 1e-1,\n                                'min_delta': tolerance,\n                                'gravity_on': gravity,\n                                'gravity': 9.81}\n\n    settings['StaticUvlm'] = {'print_info': 'on',\n                            'horseshoe': horseshoe,\n                            'num_cores': num_cores,\n                            'velocity_field_generator': 'SteadyVelocityField',\n                            'velocity_field_input': {'u_inf': u_inf,\n                                                    'u_inf_direction': [1., 0, 0]},\n                            'rho': rho,\n                            'nonlifting_body_interactions': nonlifting_body_interactions,\n                            'only_nonlifting': nonlifting_only,\n                            'phantom_wing_test': phantom_test,\n                            'ignore_first_x_nodes_in_force_calculation': kwargs.get('ignore_first_x_nodes_in_force_calculation', 0),\n                            }\n\n    settings['StaticCoupled'] = {'print_info': 'off',\n                                'structural_solver': 'NonLinearStatic',\n                                'structural_solver_settings': settings['NonLinearStatic'],\n                                'aero_solver': 'StaticUvlm',\n                                'aero_solver_settings': settings['StaticUvlm'],\n                                'max_iter': 100,\n                                'n_load_steps': n_step,\n                                'tolerance': fsi_tolerance,\n                                'relaxation_factor': structural_relaxation_factor,\n                                'nonlifting_body_interactions': nonlifting_body_interactions}\n\n    settings['AerogridLoader'] = {'unsteady': 'on',\n                                'aligned_grid': 'on',\n                                'mstar': mstar, #int(20/tstep_factor),\n                                'wake_shape_generator': 'StraightWake',\n                                'wake_shape_generator_input': {\n                                    'u_inf': u_inf,\n                                    'u_inf_direction': [1., 0., 0.],\n                                    'dt': dt,\n                                },\n                            }\n    if 'WriteVariablesTime' in flow:\n        settings['WriteVariablesTime'] = {'cleanup_old_solution': True}\n        if kwargs.get('writeCpVariables', False):\n            settings['WriteVariablesTime']['nonlifting_nodes_variables'] = ['pressure_coefficients']                                                           \n            settings['WriteVariablesTime']['nonlifting_nodes_isurf'] = np.zeros((model.structure.n_node_fuselage,))\n            settings['WriteVariablesTime']['nonlifting_nodes_im'] =  np.zeros((model.structure.n_node_fuselage))\n            settings['WriteVariablesTime']['nonlifting_nodes_in'] = list(range(model.structure.n_node_fuselage))\n        if kwargs.get('writeWingPosVariables', False):\n            settings['WriteVariablesTime']['structure_variables'] = ['pos']\n            settings['WriteVariablesTime']['structure_nodes'] = list(range(model.structure.n_node-2))\n\n    settings['NonliftingbodygridLoader'] = {}\n\n    settings['AeroForcesCalculator'] = {'coefficients': False}\n    settings['AerogridPlot'] = {'plot_nonlifting_surfaces': nonlifting_body_interactions}\n    settings['BeamPlot'] = {}\n\n    settings['NoStructural'] = {}\n    settings['NonLinearDynamicPrescribedStep'] = {'print_info': 'off',\n                                            'max_iterations': 950,\n                                            'delta_curved': 1e-1,\n                                            'min_delta': 1e-6,\n                                            'newmark_damp': 1e-4,\n                                            'gravity_on': gravity,\n                                            'gravity': 9.81,\n                                            'num_steps': kwargs.get('n_tsteps',10),\n                                            'dt': dt,\n                                            }\n    settings['StepUvlm'] = {'print_info': 'on',\n                                'num_cores': 4,\n                                'convection_scheme': 3,\n                                'velocity_field_input': {'u_inf': u_inf,\n                                                            'u_inf_direction': [1., 0., 0.]},\n                                'rho': rho,\n                                'n_time_steps': kwargs.get('n_tsteps',10),\n                                'dt': dt,\n                                'phantom_wing_test': phantom_test,\n                                'nonlifting_body_interactions': not lifting_only,\n                                'gamma_dot_filtering': 3,                                \n                                'ignore_first_x_nodes_in_force_calculation': kwargs.get('ignore_first_x_nodes_in_force_calculation', 0),}\n    \n    dynamic_structural_solver = kwargs.get('structural_solver','NonLinearDynamicPrescribedStep')\n    settings['DynamicCoupled'] = {'structural_solver': dynamic_structural_solver,\n                                    'structural_solver_settings': settings[dynamic_structural_solver],\n                                    'aero_solver': 'StepUvlm',\n                                    'aero_solver_settings': settings['StepUvlm'],\n                                    'fsi_substeps': kwargs.get('fsi_substeps', 200),\n                                    'fsi_tolerance': fsi_tolerance,\n                                    'relaxation_factor': kwargs.get('relaxation_factor',0.1),\n                                    'minimum_steps': 1,\n                                    'relaxation_steps': 150,\n                                    'final_relaxation_factor': kwargs.get('final_relaxation_factor', 0.05),\n                                    'n_time_steps': kwargs.get('n_tsteps',10),\n                                    'dt': dt,\n                                    'nonlifting_body_interactions': not lifting_only,\n                                    'include_unsteady_force_contribution': kwargs.get('unsteady_force_distribution', True), \n                                    'postprocessors': ['BeamLoads'],\n                                    'postprocessors_settings': {\n                                                                'BeamLoads': {'csv_output': 'off'},\n                                                                },\n                                }\n\n\n    return settings"
  },
  {
    "path": "sharpy/cases/templates/fuselage_wing_configuration/fwc_structure.py",
    "content": "import numpy as np\nimport h5py as h5\n\n\nclass FWC_Structure:\n\n    \"\"\"\n        FWC_Structure contains all attributes to define the beam geometriy \n        and discretisation and makes it accessible for SHARPy.\n    \"\"\"\n    def __init__(self, case_name, case_route, **kwargs):\n        self.n_elem_multiplier = kwargs.get('n_elem_multiplier', 1)\n\n        self.route = case_route\n        self.case_name = case_name\n\n        self.n_node_elem = 3\n        self.n_surfaces = 2\n        self.n_material = 2 # wing + fuselage\n        \n        self.half_wingspan = kwargs.get('half_wingspan', 2)\n        self.fuselage_length = kwargs.get('fuselage_length', 10)\n        self.offset_nose_wing_beam = kwargs.get('offset_nose_wing', self.fuselage_length/2)\n        self.vertical_wing_position = kwargs.get('vertical_wing_position', 0.)\n        self.n_elem_per_wing = kwargs.get('n_elem_per_wing', 10)\n        self.n_elem_fuselage = kwargs.get('n_elem_fuselage', 10)\n\n        self.sigma = kwargs.get('sigma', 10)\n        self.sigma_fuselage = kwargs.get('sigma_fuselage', 100.)\n\n\n\n        self.enforce_uniform_fuselage_discretisation = kwargs.get(\n            'enforce_uniform_fuselage_discretisation', False\n        )\n        self.fuselage_discretisation = kwargs.get('fuselage_discretisation', 'uniform')\n\n        self.thrust = 0.\n\n    def generate(self):\n        \"\"\"\n            Function to set up all necessary parameter inputs to define the geometry and discretisation\n            of the beam. Finally, informations are saved to an .h5 file serving as an input\n            file for SHARPy.\n        \"\"\"\n        self.set_element_and_nodes()\n        self.initialize_parameters()\n\n        self.set_stiffness_and_mass_propoerties()\n        self.set_beam_properties_right_wing()\n        self.mirror_wing_beam()                \n        self.app_forces[0] = [0, self.thrust, 0, 0, 0, 0]\n        \n        self.set_beam_properties_fuselage()\n        self.write_input_file()\n\n    def set_element_and_nodes(self):\n        \"\"\"\n            Based on the specified number of elements of the wing and fuselage, the number of nodes of each \n            component and the total number of elements and nodes are defined here.\n        \"\"\"\n\n        self.n_node_fuselage = self.n_elem_fuselage*(self.n_node_elem - 1)\n        self.n_node_right_wing = self.n_elem_per_wing*(self.n_node_elem - 1) + 1\n        # the left wing beam has one node less than the right one, since they shares the center node\n        self.n_node_left_wing = self.n_node_right_wing - 1 \n\n        self.n_node_wing_total = self.n_node_right_wing + self.n_node_left_wing\n        self.n_node_fuselage_tail = self.n_node_wing_total + self.n_node_fuselage\n        self.n_node = self.n_node_fuselage + self.n_node_wing_total\n        self.n_elem =self.n_elem_fuselage + 2 * self.n_elem_per_wing\n\n        # vertical wing offset requires a connection element between wing and fuselage beam\n        if not self.vertical_wing_position == 0:\n            self.n_elem += 1\n            self.n_node += 1\n\n    def initialize_parameters(self):\n        self.x = np.zeros((self.n_node, ))\n        self.y = np.zeros((self.n_node, ))\n        self.z = np.zeros((self.n_node, ))\n\n        self.frame_of_reference_delta = np.zeros((self.n_elem, self.n_node_elem, 3))\n        self.conn = np.zeros((self.n_elem, self.n_node_elem), dtype=int)\n\n        self.beam_number = np.zeros((self.n_elem, ), dtype=int)\n        self.boundary_conditions = np.zeros((self.n_node, ), dtype=int)\n        self.structural_twist = np.zeros((self.n_elem, self.n_node_elem))\n\n        self.app_forces = np.zeros((self.n_node, 6))\n\n\n        self.stiffness = np.zeros((self.n_material, 6, 6))\n        self.mass = np.zeros((self.n_material, 6, 6))\n        self.elem_stiffness = np.zeros((self.n_elem, ), dtype=int)\n        self.mass = np.zeros((self.n_material, 6, 6))\n        self.elem_mass = np.zeros((self.n_elem, ), dtype=int)\n\n    def set_stiffness_and_mass_propoerties(self):\n        # Define aeroelastic properties\n        ea = 1e7\n        ga = 1e5\n        gj = 1e4\n        eiy = 2e4\n        eiz = 4e6\n        m_bar_main = 0.75\n        j_bar_main = 0.075\n\n        m_bar_fuselage = 0.3*1.5\n        j_bar_fuselage = 0.08\n\n        base_stiffness_main = self.sigma*np.diag([ea, ga, ga, gj, eiy, eiz])\n        base_stiffness_fuselage = base_stiffness_main.copy()*self.sigma_fuselage\n        base_stiffness_fuselage[4, 4] = base_stiffness_fuselage[5, 5]\n\n        self.stiffness[0, ...] = base_stiffness_main\n        self.stiffness[1, ...] = base_stiffness_fuselage\n\n        self.mass[0, ...] = self.generate_mass_matrix(m_bar_main, j_bar_main)\n        self.mass[1, ...] = self.generate_mass_matrix(m_bar_fuselage, j_bar_fuselage)\n        \n    def generate_mass_matrix(self, m_bar, j_bar):\n        return np.diag([m_bar, m_bar, m_bar, \n                j_bar, 0.5*j_bar, 0.5*j_bar])\n\n    def set_beam_properties_right_wing(self):\n        \"\"\"\n            Defines all necessary parameters to define the beam including node coordinate,\n            elements with their associated nodes, frame of reference delta, boundary conditions\n            such as reference node and free tips, stiffness and mass property ID for each element,\n            and twist.\n        \"\"\"     \n        self.y[:self.n_node_right_wing] = np.linspace(0, self.half_wingspan, self.n_node_right_wing)\n        self.z[:self.n_node_right_wing] += self.vertical_wing_position\n        for ielem in range(self.n_elem_per_wing):\n            self.conn[ielem, :] = ((np.ones((3, )) * ielem * (self.n_node_elem - 1)) +\n                                [0, 2, 1])               \n            for ilocalnode in range(self.n_node_elem):\n                self.frame_of_reference_delta[ielem, ilocalnode, :] = [-1.0, 0.0, 0.0]  \n    \n        self.boundary_conditions[0] = 1\n        self.boundary_conditions[self.n_node_right_wing-1] = -1 # free tip\n\n    def mirror_wing_beam(self):\n        \"\"\"\n            Mirrors the parameters from the beam representing the right free-flying wing\n            for the left one.\n        \"\"\"\n\n        self.x[self.n_node_right_wing:self.n_node_wing_total]  = self.x[1:self.n_node_right_wing]\n        self.y[self.n_node_right_wing:self.n_node_wing_total]  = - self.y[1:self.n_node_right_wing]\n        self.z[self.n_node_right_wing:self.n_node_wing_total]  = self.z[1:self.n_node_right_wing]\n        self.frame_of_reference_delta[self.n_elem_per_wing:2*self.n_elem_per_wing, :, :] = self.frame_of_reference_delta[:self.n_elem_per_wing, :, :] * (-1)\n        self.elem_stiffness[self.n_elem_per_wing:2*self.n_elem_per_wing] = self.elem_stiffness[:self.n_elem_per_wing]\n        self.elem_mass[self.n_elem_per_wing:2*self.n_elem_per_wing] = self.elem_mass[:self.n_elem_per_wing]\n\n        self.beam_number[self.n_elem_per_wing:2*self.n_elem_per_wing] = 1\n        self.boundary_conditions[self.n_node_wing_total-1] = -1 # free tip\n        self.conn[self.n_elem_per_wing:2*self.n_elem_per_wing, :] = self.conn[:self.n_elem_per_wing, :] + self.n_node_right_wing - 1\n        self.conn[self.n_elem_per_wing, 0] = 0\n\n    def set_x_coordinate_fuselage(self):\n        if self.vertical_wing_position == 0:\n            n_nodes_fuselage = self.n_node_fuselage + 1\n        else:\n            n_nodes_fuselage = self.n_node_fuselage\n        if self.fuselage_discretisation == 'uniform':\n            x_coord_fuselage = np.linspace(0, self.fuselage_length, n_nodes_fuselage) - self.offset_nose_wing_beam\n        elif self.fuselage_discretisation == '1-cosine':\n            x_coord_fuselage = np.linspace(0, 1, n_nodes_fuselage) \n            x_coord_fuselage =  0.5*(1.0 - np.cos(x_coord_fuselage*np.pi))\n            x_coord_fuselage *= self.fuselage_length\n            x_coord_fuselage -= self.offset_nose_wing_beam\n        else:\n            raise \"ERROR Specified fuselage discretisation '{}' unknown\".format(self.fuselage_discretisation)\n        self.idx_junction = self.find_index_of_closest_entry(x_coord_fuselage, self.x[0])\n        \n        self.idx_junction_global = self.idx_junction + self.n_node_wing_total\n        if self.vertical_wing_position == 0:\n            if self.enforce_uniform_fuselage_discretisation:\n                self.x[:self.n_node_wing_total] += x_coord_fuselage[self.idx_junction]\n            x_coord_fuselage = np.delete(x_coord_fuselage, self.idx_junction)\n        self.x[self.n_node_wing_total:self.n_node_fuselage_tail] = x_coord_fuselage\n\n    def adjust_fuselage_connectivities(self):\n        idx_in_conn = np.where(self.conn ==  self.idx_junction_global)\n        self.conn[idx_in_conn[0][0]+1:, :] -= 1\n\n        if idx_in_conn[0][0] == 2:\n            # if middle node, correct end node of element \n            self.conn[idx_in_conn[0][0], 1] -= 1\n        for i_match in range(np.shape(idx_in_conn)[1]):\n            #several matches possible if junction node is not middle node\n            self.conn[idx_in_conn[0][i_match], idx_in_conn[1][i_match]] = 0\n\n    def add_additional_element_for_low_wing(self):\n        self.x[-1] = self.x[0]\n        self.y[-1] = self.y[0]\n        self.z[-1] = self.vertical_wing_position / 2\n        self.conn[-1, 0] = 0\n        self.conn[-1, 1] = self.idx_junction_global\n        self.conn[-1, 2] = self.n_node - 1\n        self.elem_stiffness[-1] = 1\n        self.elem_mass[-1] = 1\n        self.beam_number[-1] = 3\n        \n        \n    def set_beam_properties_fuselage(self):\n        self.set_x_coordinate_fuselage()\n        self.beam_number[self.n_elem_per_wing*2:] = 2\n        for ielem in range(self.n_elem_per_wing * 2,self.n_elem):\n            self.conn[ielem, :] = ((np.ones((3, )) * (ielem-self.n_elem_per_wing * 2) * (self.n_node_elem - 1)) +\n                                [0, 2, 1])  + self.n_node_wing_total\n            for ilocalnode in range(self.n_node_elem):\n                self.frame_of_reference_delta[ielem, ilocalnode, :] = [0.0, 1.0, 0.0]  \n        self.elem_stiffness[self.n_elem_per_wing*2:] = 1\n        self.elem_mass[self.n_elem_per_wing*2:] = 1\n        \n        if self.vertical_wing_position == 0:\n            self.adjust_fuselage_connectivities()\n        else:\n            self.add_additional_element_for_low_wing()\n        self.boundary_conditions[self.n_node_wing_total] = -1 # fuselage nose\n        self.boundary_conditions[self.n_node_wing_total + self.n_node_fuselage - 1] = -1 # fuselage tail\n\n    def find_index_of_closest_entry(self, array_values, target_value):\n        return np.argmin(np.abs(array_values - target_value))\n\n    def set_thrust(self, value):\n        self.thrust = value\n\n    def write_input_file(self):\n        \"\"\"\n            Writes previously defined parameters to an .h5 file which serves later as an \n            input file for SHARPy.\n        \"\"\"                \n        with h5.File(self.route + '/' + self.case_name + '.fem.h5', 'a') as h5file:\n            h5file.create_dataset('coordinates', data=np.column_stack((self.x, self.y, self.z)))\n            h5file.create_dataset('connectivities', data=self.conn)\n            h5file.create_dataset('num_node_elem', data=self.n_node_elem)\n            h5file.create_dataset('num_node', data=self.n_node)\n            h5file.create_dataset('num_elem', data=self.n_elem)\n            h5file.create_dataset('stiffness_db', data=self.stiffness)\n            h5file.create_dataset('elem_stiffness', data=self.elem_stiffness)\n            h5file.create_dataset('mass_db', data=self.mass)\n            h5file.create_dataset('elem_mass', data=self.elem_mass)\n            h5file.create_dataset('frame_of_reference_delta', data=self.frame_of_reference_delta)\n            h5file.create_dataset('boundary_conditions', data=self.boundary_conditions)\n            h5file.create_dataset('beam_number', data=self.beam_number)\n\n            h5file.create_dataset('structural_twist', data=self.structural_twist)\n            h5file.create_dataset('app_forces', data=self.app_forces)\n"
  },
  {
    "path": "sharpy/cases/templates/template_wt.py",
    "content": "\"\"\"\ntemplate_wt\n\nFunctions needed to generate a wind turbines\n\nNotes:\n    To load this library: import sharpy.cases.templates.template_wt as template_wt\n\"\"\"\n\n\nimport pandas as pd\nimport numpy as np\nimport scipy.interpolate as scint\nimport math\nimport sys\n\nimport sharpy.utils.generate_cases as gc\nimport sharpy.utils.algebra as algebra\nimport sharpy.utils.h5utils as h5\nfrom sharpy.utils.constants import deg2rad\nimport sharpy.aero.utils.airfoilpolars as ap\nimport sharpy.utils.cout_utils as cout\n\nif not cout.check_running_unittest():\n    cout.cout_wrap.print_screen = True\n    cout.cout_wrap.print_file = False\n\n\n######################################################################\n# AUX FUNCTIONS\n######################################################################\ndef create_node_radial_pos_from_elem_centres(root_elem_centres_tip, num_node, num_elem, num_node_elem):\n    \"\"\"\n    create_node_radial_pos_from_elem_centres\n\n    Define the position of the nodes adn the elements in the blade from the list of element centres\n\n    Args:\n        root_elem_centres_tip (np.array):\n            - First value: Radial position of the beginning of the blade\n            - Last value: Radial position of the tip of the blade\n            - Rest of the values: Radial position the rest of the strucutral element centres\n        num_node (int): number of nodes\n        num_elem (int): number of elements\n        num_node_elem (int): number of nodes in each element\n\n    Returns:\n        node_r (np.array): Radial position of the nodes\n        elem_r (np.array): Radial position of the elements\n\n    Notes:\n        Radial positions are measured from the hub centre and measured in the rotation plane\n    \"\"\"\n\n    elem_r = root_elem_centres_tip[1:-1]\n    node_r = np.zeros((num_node, ), )\n    node_r[0] = root_elem_centres_tip[0]\n    node_r[-2] = root_elem_centres_tip[-2]\n    node_r[-1] = root_elem_centres_tip[-1]\n\n    for ielem in range(num_elem-1):\n        node_r[ielem*(num_node_elem-1)+1] = elem_r[ielem]\n        node_r[ielem*(num_node_elem-1)+2] = 0.5*(elem_r[ielem]+elem_r[ielem+1])\n\n    return node_r, elem_r\n\n\ndef create_blade_coordinates(num_node, node_r, node_y, node_z):\n    \"\"\"\n    create_blade_coordinates\n\n    Creates SHARPy format of the nodes coordinates and\n    applies prebending and presweept to node radial position\n\n    Args:\n        num_node (int): number of nodes\n        node_r (np.array): Radial position of the nodes\n        node_y (np.array): Displacement of each point IN the rotation plane\n        node_z (np.array): Displacement of each point OUT OF the rotation plane\n\n    Returns:\n        coordinates (np.array): nodes coordinates\n    \"\"\"\n    coordinates = np.zeros((num_node, 3),)\n    coordinates[:, 0] = node_r\n    coordinates[:, 1] = node_y\n    coordinates[:, 2] = node_z\n    return coordinates\n\n\n######################################################################\n# FROM excel type04\n######################################################################\ndef spar_from_excel_type04(op_params,\n                            geom_params,\n                            excel_description,\n                            options):\n    \"\"\"\n    spar_from_excel_type04\n\n    Function needed to generate a spar floating wind turbine rotor from an excel database type04.\n    Rotor + tower + floating spar\n\n    Args:\n        op_param (dict): Dictionary with operating parameters\n        geom_param (dict): Dictionray with geometical parameters\n        excel_description (dict): Dictionary describing the sheets of the excel file\n        option (dict): Dictionary with the different options for the wind turbine generation\n\n    Returns:\n        floating (sharpy.utils.generate_cases.AeroelasticInfromation): Aeroelastic information of the spar floating wind turbine\n    \"\"\"\n\n    # Generate the tower + rotor\n    wt, LC, MB, hub_nodes = generate_from_excel_type03(op_params,\n                                    geom_params,\n                                    excel_description,\n                                    options)\n    # Remove base clam\n    wt.StructuralInformation.boundary_conditions[0] = 0\n\n    excel_file_name = excel_description['excel_file_name']\n    excel_sheet_parameters = excel_description['excel_sheet_parameters']\n    excel_sheet_structural_spar = excel_description['excel_sheet_structural_spar']\n    tol_remove_points = geom_params['tol_remove_points']\n\n    TowerBaseHeight = gc.read_column_sheet_type01(excel_file_name,\n                                                  excel_sheet_parameters,\n                                                  'TowerBaseHeight')\n\n    # Generate the spar\n    if options['concentrate_spar']:\n        mtower = wt.StructuralInformation.mass_db[0, 0, 0]\n\n        PlatformTotalMass = gc.read_column_sheet_type01(excel_file_name,\n                                                 excel_sheet_parameters,\n                                                 'PlatformTotalMass')\n        PlatformIrollCM = gc.read_column_sheet_type01(excel_file_name,\n                                                 excel_sheet_parameters,\n                                                 'PlatformIrollCM')\n        PlatformIpitchCM = gc.read_column_sheet_type01(excel_file_name,\n                                                 excel_sheet_parameters,\n                                                 'PlatformIpitchCM')\n        PlatformIyawCM = gc.read_column_sheet_type01(excel_file_name,\n                                                 excel_sheet_parameters,\n                                                 'PlatformIyawCM')\n        PlatformCMbelowSWL = gc.read_column_sheet_type01(excel_file_name,\n                                                 excel_sheet_parameters,\n                                                 'PlatformCMbelowSWL')\n\n        mpoint = PlatformTotalMass - mtower*TowerBaseHeight\n        IyawPoint = PlatformIyawCM - (1./6)*mtower*TowerBaseHeight**3\n        IpitchPoint = PlatformIpitchCM + PlatformTotalMass*PlatformCMbelowSWL**2 - (1./3)*mtower*TowerBaseHeight**3\n        IrollPoint = PlatformIrollCM + PlatformTotalMass*PlatformCMbelowSWL**2 - (1./3)*mtower*TowerBaseHeight**3\n        xpoint = (PlatformTotalMass*PlatformCMbelowSWL + 0.5*mtower*TowerBaseHeight**2)/mpoint\n\n        iner_mat = np.zeros((6,6))\n        iner_mat[0:3, 0:3] = mpoint*np.eye(3)\n        iner_mat[0:3, 3:6] = -mpoint*algebra.skew(np.array([-xpoint, 0, 0]))\n        iner_mat[3:6, 0:3] = -iner_mat[0:3, 3:6]\n        iner_mat[3, 3] = IyawPoint\n        iner_mat[4, 4] = IpitchPoint\n        iner_mat[5, 5] = IrollPoint\n\n        base_stiffness_top = wt.StructuralInformation.stiffness_db[0, :, :]\n        base_mass_top = wt.StructuralInformation.mass_db[0, :, :]\n        base_stiffness_bot = 100*base_stiffness_top\n        base_mass_bot = base_mass_top\n\n        num_lumped_mass_mat = 1\n\n    else:\n        SparHeight = gc.read_column_sheet_type01(excel_file_name,\n                                                 excel_sheet_parameters,\n                                                 'SparHeight')\n        SparBallastMass = gc.read_column_sheet_type01(excel_file_name,\n                                                      excel_sheet_parameters,\n                                                      'SparBallastMass')\n        SparBallastDepth = gc.read_column_sheet_type01(excel_file_name,\n                                                       excel_sheet_parameters,\n                                                       'SparBallastDepth')\n\n        # Read from excel file\n        SparHtFract = gc.read_column_sheet_type01(excel_file_name, excel_sheet_structural_spar, 'SparHtFract')\n        SparMassDen = gc.read_column_sheet_type01(excel_file_name, excel_sheet_structural_spar, 'SparMassDen')\n        SparFAStif = gc.read_column_sheet_type01(excel_file_name, excel_sheet_structural_spar, 'SparFAStif')\n        SparSSStif = gc.read_column_sheet_type01(excel_file_name, excel_sheet_structural_spar, 'SparSSStif')\n        SparGJStif = gc.read_column_sheet_type01(excel_file_name, excel_sheet_structural_spar, 'SparGJStif')\n        SparEAStif = gc.read_column_sheet_type01(excel_file_name, excel_sheet_structural_spar, 'SparEAStif')\n        SparFAIner = gc.read_column_sheet_type01(excel_file_name, excel_sheet_structural_spar, 'SparFAIner')\n        SparSSIner = gc.read_column_sheet_type01(excel_file_name, excel_sheet_structural_spar, 'SparSSIner')\n        SparFAcgOf = gc.read_column_sheet_type01(excel_file_name, excel_sheet_structural_spar, 'SparFAcgOf')\n        SparSScgOf = gc.read_column_sheet_type01(excel_file_name, excel_sheet_structural_spar, 'SparSScgOf')\n\n        ElevationSpar = SparHtFract*SparHeight\n        spar = gc.AeroelasticInformation()\n        spar.StructuralInformation.num_elem = len(ElevationSpar) - 2\n        spar.StructuralInformation.num_node_elem = 3\n        spar.StructuralInformation.compute_basic_num_node()\n\n        # Interpolate excel variables into the correct locations\n        node_r, elem_r = create_node_radial_pos_from_elem_centres(ElevationSpar,\n                                        spar.StructuralInformation.num_node,\n                                        spar.StructuralInformation.num_elem,\n                                        spar.StructuralInformation.num_node_elem)\n\n        # Stiffness\n        elem_EA = np.interp(elem_r, ElevationSpar, SparEAStif)\n        elem_EIz = np.interp(elem_r, ElevationSpar, SparSSStif)\n        elem_EIy = np.interp(elem_r, ElevationSpar, SparFAStif)\n        elem_GJ = np.interp(elem_r, ElevationSpar, SparGJStif)\n        # Stiffness: estimate unknown properties\n        cout.cout_wrap.print_file = False\n        cout.cout_wrap('WARNING: The poisson cofficient is assumed equal to 0.3', 3)\n        cout.cout_wrap('WARNING: Cross-section area is used as shear area', 3)\n        poisson_coef = 0.3\n        elem_GAy = elem_EA/2.0/(1.0+poisson_coef)\n        elem_GAz = elem_EA/2.0/(1.0+poisson_coef)\n\n        # Inertia\n        elem_mass_per_unit_length = np.interp(elem_r, ElevationSpar, SparMassDen)\n        elem_mass_iner_y = np.interp(elem_r, ElevationSpar, SparFAIner)\n        elem_mass_iner_z = np.interp(elem_r, ElevationSpar, SparSSIner)\n        # TODO: check yz axis and Flap-edge\n        elem_pos_cg_B = np.zeros((spar.StructuralInformation.num_elem, 3),)\n        elem_pos_cg_B[:, 1] = np.interp(elem_r, ElevationSpar, SparSScgOf)\n        elem_pos_cg_B[:, 2] = np.interp(elem_r, ElevationSpar, SparFAcgOf)\n\n        # Stiffness: estimate unknown properties\n        cout.cout_wrap('WARNING: Using perpendicular axis theorem to compute the inertia around xB', 3)\n        elem_mass_iner_x = elem_mass_iner_y + elem_mass_iner_z\n\n        # Create the tower\n        spar.StructuralInformation.create_mass_db_from_vector(elem_mass_per_unit_length, elem_mass_iner_x, elem_mass_iner_y, elem_mass_iner_z, elem_pos_cg_B)\n        spar.StructuralInformation.create_stiff_db_from_vector(elem_EA, elem_GAy, elem_GAz, elem_GJ, elem_EIy, elem_EIz)\n\n        coordinates = np.zeros((spar.StructuralInformation.num_node, 3),)\n        coordinates[:, 0] = node_r\n\n        spar.StructuralInformation.generate_1to1_from_vectors(\n            num_node_elem=spar.StructuralInformation.num_node_elem,\n            num_node=spar.StructuralInformation.num_node,\n            num_elem=spar.StructuralInformation.num_elem,\n            coordinates=coordinates,\n            stiffness_db=spar.StructuralInformation.stiffness_db,\n            mass_db=spar.StructuralInformation.mass_db,\n            frame_of_reference_delta='y_AFoR',\n            vec_node_structural_twist=np.zeros((spar.StructuralInformation.num_node,),),\n            num_lumped_mass=1)\n\n        spar.StructuralInformation.boundary_conditions[0] = -1\n        spar.StructuralInformation.boundary_conditions[-1] = 1\n\n        # Include ballast mass\n        dist = np.abs(coordinates[:, 0] + SparBallastDepth)\n        min_dist = np.amin(dist)\n        loc_min = np.where(dist == min_dist)[0]\n\n        cout.cout_wrap(\"Ballast at node %d at position %f\" % (loc_min, coordinates[loc_min, 0]), 2)\n\n        spar.StructuralInformation.lumped_mass_nodes[0] = loc_min\n        spar.StructuralInformation.lumped_mass[0] = SparBallastMass\n        spar.StructuralInformation.lumped_mass_inertia[0] = np.zeros((3,3))\n        spar.StructuralInformation.lumped_mass_position[0] = np.zeros((3,))\n\n        spar.AerodynamicInformation.set_to_zero(spar.StructuralInformation.num_node_elem,\n                                            spar.StructuralInformation.num_node,\n                                            spar.StructuralInformation.num_elem)\n\n        base_stiffness_bot = spar.StructuralInformation.stiffness_db[-1, :, :]\n        base_mass_bot = spar.StructuralInformation.mass_db[-1, :, :]\n        base_stiffness_top = base_stiffness_bot\n        base_mass_top = base_mass_bot\n\n        num_lumped_mass_mat = 0\n\n    # Generate tower base\n    NodesBase = gc.read_column_sheet_type01(excel_file_name,\n                                                  excel_sheet_parameters,\n                                                  'NodesBase')\n\n    base = gc.AeroelasticInformation()\n    base.StructuralInformation.num_node = NodesBase\n    base.StructuralInformation.num_node_elem = 3\n    base.StructuralInformation.compute_basic_num_elem()\n\n    node_coord = np.zeros((base.StructuralInformation.num_node, 3))\n    node_coord[:, 0] = np.linspace(0., TowerBaseHeight, base.StructuralInformation.num_node)\n\n    base_stiffness_db = np.zeros((base.StructuralInformation.num_elem, 6, 6))\n    base_mass_db = np.zeros((base.StructuralInformation.num_elem, 6, 6))\n    vec_node_structural_twist = np.zeros((base.StructuralInformation.num_node,))\n\n    # for ielem in range(base.StructuralInformation.num_elem):\n    #     base_stiffness_db[ielem, :, :] = base_stiffness.copy()\n    #     base_mass_db[ielem, :, :] = base_mass.copy()\n    for ielem in range(base.StructuralInformation.num_elem):\n        inode_cent = 2*ielem + 1\n        rel_dist_to_bot = node_coord[inode_cent, 0]/TowerBaseHeight\n        rel_dist_to_top = (node_coord[-1, 0] - node_coord[inode_cent, 0])/TowerBaseHeight\n        base_stiffness_db[ielem, :, :] = (base_stiffness_bot*rel_dist_to_top +\n                                      base_stiffness_top*rel_dist_to_bot)\n        base_mass_db[ielem, :, :] = (base_mass_bot*rel_dist_to_top +\n                                     base_mass_top*rel_dist_to_bot)\n\n    base.StructuralInformation.generate_1to1_from_vectors(\n                            base.StructuralInformation.num_node_elem,\n                            base.StructuralInformation.num_node,\n                            base.StructuralInformation.num_elem,\n                            node_coord,\n                            base_stiffness_db,\n                            base_mass_db,\n                            'y_AFoR',\n                            vec_node_structural_twist,\n                            num_lumped_mass=0,\n                            num_lumped_mass_mat=num_lumped_mass_mat)\n\n    base.StructuralInformation.boundary_conditions[0] = 1\n    base.StructuralInformation.body_number *= 0\n\n    base.AerodynamicInformation.set_to_zero(base.StructuralInformation.num_node_elem,\n                                        base.StructuralInformation.num_node,\n                                        base.StructuralInformation.num_elem)\n\n    if options['concentrate_spar']:\n        base.StructuralInformation.lumped_mass_mat_nodes = np.array([0], dtype=int)\n        base.StructuralInformation.lumped_mass_mat = np.zeros((1, 6, 6))\n        base.StructuralInformation.lumped_mass_mat[0, :, :] = iner_mat\n\n        nodes_base = base.StructuralInformation.num_node + 0\n        for inode in range(len(hub_nodes)):\n            hub_nodes[inode] += nodes_base\n        wt.StructuralInformation.coordinates[:, 0] += TowerBaseHeight\n        base.assembly(wt)\n        base.remove_duplicated_points(1e-6, skip=hub_nodes)\n        for ielem in range(base.StructuralInformation.num_elem):\n            if not base.StructuralInformation.body_number[ielem] == 0:\n                base.StructuralInformation.body_number[ielem] -= 1\n        for ilc in range(len(LC)):\n            LC[ilc].node_in_body += nodes_base - 1\n        spar = base # Just a rename for the return\n    else:\n        # Assembly\n        spar.assembly(base)\n        spar.remove_duplicated_points(1e-6)\n        spar.StructuralInformation.body_number *= 0\n        nodes_spar = spar.StructuralInformation.num_node + 0\n        for inode in range(len(hub_nodes)):\n            hub_nodes[inode] += nodes_spar\n\n        wt.StructuralInformation.coordinates[:, 0] += TowerBaseHeight\n        spar.assembly(wt)\n        spar.remove_duplicated_points(1e-6, skip=hub_nodes)\n        for ielem in range(spar.StructuralInformation.num_elem):\n            if not spar.StructuralInformation.body_number[ielem] == 0:\n                spar.StructuralInformation.body_number[ielem] -= 1\n\n        # Update Lagrange Constraints and Multibody information\n        for ilc in range(len(LC)):\n            LC[ilc].node_in_body += nodes_spar - 1\n\n    MB[0].FoR_movement = 'free'\n    for ibody in range(1, len(MB)):\n        MB[ibody].FoR_position[0] += TowerBaseHeight\n\n    return spar, LC, MB\n\n######################################################################\n# FROM excel type03\n######################################################################\ndef rotor_from_excel_type03(in_op_params,\n                            in_geom_params,\n                            in_excel_description,\n                            in_options):\n    \"\"\"\n    rotor_from_excel_type03\n\n    Function needed to generate a wind turbine rotor from an excel database type03\n\n    Args:\n        op_param (dict): Dictionary with operating parameters\n        geom_param (dict): Dictionray with geometical parameters\n        excel_description (dict): Dictionary describing the sheets of the excel file\n        option (dict): Dictionary with the different options for the wind turbine generation\n\n    Returns:\n        rotor (sharpy.utils.generate_cases.AeroelasticInfromation): Aeroelastic information of the rotor\n    \"\"\"\n    # Default values\n    op_params = {}\n    op_params['rotation_velocity'] = None # Rotation velocity of the rotor\n    op_params['pitch_deg'] = None # pitch angle in degrees\n    op_params['wsp'] = 0. # wind speed (It may be needed for discretisation purposes)\n    op_params['dt'] = 0. # time step (It may be needed for discretisation purposes)\n\n    geom_params = {}\n    geom_params['chord_panels'] = None # Number of panels on the blade surface in the chord direction\n    geom_params['tol_remove_points'] = 1e-3 # maximum distance to remove adjacent points\n    geom_params['n_points_camber'] = 100 # number of points to define the camber of the airfoil\n    geom_params['h5_cross_sec_prop'] = None # h5 containing mass and stiffness matrices along the blade\n    geom_params['m_distribution'] = 'uniform' #\n\n    options = {}\n    options['camber_effect_on_twist'] = False # When true plain airfoils are used and the blade is twisted and preloaded based on thin airfoil theory\n    options['user_defined_m_distribution_type'] = None # type of distribution of the chordwise panels when 'm_distribution' == 'user_defined'\n    options['include_polars'] = False #\n    options['separate_blades'] = False # Keep blades as different bodies\n    options['twist_in_aero'] = False # Twist the aerodynamic surface instead of the structure\n\n    excel_description = {}\n    excel_description['excel_file_name'] = 'database_excel_type02.xlsx'\n    excel_description['excel_sheet_parameters'] = 'parameters'\n    excel_description['excel_sheet_structural_blade'] = 'structural_blade'\n    excel_description['excel_sheet_discretization_blade'] = 'discretization_blade'\n    excel_description['excel_sheet_aero_blade'] = 'aero_blade'\n    excel_description['excel_sheet_airfoil_info'] = 'airfoil_info'\n    excel_description['excel_sheet_airfoil_chord'] = 'airfoil_coord'\n\n    # Overwrite the default values with the values of the input arguments\n    for key in in_op_params:\n        op_params[key] = in_op_params[key]\n    for key in in_geom_params:\n        geom_params[key] = in_geom_params[key]\n    for key in in_options:\n        options[key] = in_options[key]\n    for key in in_excel_description:\n        excel_description[key] = in_excel_description[key]\n\n    # Put the dictionaries information into variables (to avoid changing the function)\n    rotation_velocity = op_params['rotation_velocity']\n    pitch_deg = op_params['pitch_deg']\n    wsp = op_params['wsp']\n    dt = op_params['dt']\n\n    chord_panels = geom_params['chord_panels']\n    tol_remove_points = geom_params['tol_remove_points']\n    n_points_camber = geom_params['n_points_camber']\n    h5_cross_sec_prop = geom_params['h5_cross_sec_prop']\n    m_distribution = geom_params['m_distribution']\n\n    camber_effect_on_twist = options['camber_effect_on_twist']\n    user_defined_m_distribution_type = options['user_defined_m_distribution_type']\n    include_polars = options['include_polars']\n\n    excel_file_name = excel_description['excel_file_name']\n    excel_sheet_parameters = excel_description['excel_sheet_parameters']\n    excel_sheet_structural_blade = excel_description['excel_sheet_structural_blade']\n    excel_sheet_discretization_blade = excel_description['excel_sheet_discretization_blade']\n    excel_sheet_aero_blade = excel_description['excel_sheet_aero_blade']\n    excel_sheet_airfoil_info = excel_description['excel_sheet_airfoil_info']\n    excel_sheet_airfoil_coord = excel_description['excel_sheet_airfoil_chord']\n\n    ######################################################################\n    ## BLADE\n    ######################################################################\n    blade = gc.AeroelasticInformation()\n\n    ######################################################################\n    ### STRUCTURE\n    ######################################################################\n    # Read blade structural information from excel file\n    rR_structural = gc.read_column_sheet_type01(excel_file_name, excel_sheet_structural_blade, 'rR')\n    OutPElAxis = gc.read_column_sheet_type01(excel_file_name, excel_sheet_structural_blade, 'OutPElAxis')\n    InPElAxis = gc.read_column_sheet_type01(excel_file_name, excel_sheet_structural_blade, 'InPElAxis')\n    ElAxisAftLEc = gc.read_column_sheet_type01(excel_file_name, excel_sheet_structural_blade, 'ElAxisAftLEc')\n    StrcTwst = gc.read_column_sheet_type01(excel_file_name, excel_sheet_structural_blade, 'StrcTwst')*deg2rad\n    BMassDen = gc.read_column_sheet_type01(excel_file_name, excel_sheet_structural_blade, 'BMassDen')\n    FlpStff = gc.read_column_sheet_type01(excel_file_name, excel_sheet_structural_blade, 'FlpStff')\n    EdgStff = gc.read_column_sheet_type01(excel_file_name, excel_sheet_structural_blade, 'EdgStff')\n    FlapEdgeStiff = gc.read_column_sheet_type01(excel_file_name, excel_sheet_structural_blade, 'FlapEdgeStiff')\n    GJStff = gc.read_column_sheet_type01(excel_file_name, excel_sheet_structural_blade, 'GJStff')\n    EAStff = gc.read_column_sheet_type01(excel_file_name, excel_sheet_structural_blade, 'EAStff')\n    FlpIner = gc.read_column_sheet_type01(excel_file_name, excel_sheet_structural_blade, 'FlpIner')\n    EdgIner = gc.read_column_sheet_type01(excel_file_name, excel_sheet_structural_blade, 'EdgIner')\n    FlapEdgeIner = gc.read_column_sheet_type01(excel_file_name, excel_sheet_structural_blade, 'FlapEdgeIner')\n    PrebendRef = gc.read_column_sheet_type01(excel_file_name, excel_sheet_structural_blade, 'PrebendRef')\n    PreswpRef = gc.read_column_sheet_type01(excel_file_name, excel_sheet_structural_blade, 'PreswpRef')\n    OutPcg = gc.read_column_sheet_type01(excel_file_name, excel_sheet_structural_blade, 'OutPcg')\n    InPcg = gc.read_column_sheet_type01(excel_file_name, excel_sheet_structural_blade, 'InPcg')\n\n    # Blade parameters\n    TipRad = gc.read_column_sheet_type01(excel_file_name, excel_sheet_parameters, 'TipRad')\n    # HubRad = gc.read_column_sheet_type01(excel_file_name, excel_sheet_parameters, 'HubRad')\n\n    # Discretization points\n    rR = gc.read_column_sheet_type01(excel_file_name, excel_sheet_discretization_blade, 'rR')\n\n    # Interpolate excel variables into the correct locations\n    # Geometry\n    if rR[0] < rR_structural[0]:\n        rR_structural = np.concatenate((np.array([0.]), rR_structural),)\n        OutPElAxis = np.concatenate((np.array([OutPElAxis[0]]), OutPElAxis),)\n        InPElAxis = np.concatenate((np.array([InPElAxis[0]]), InPElAxis),)\n        ElAxisAftLEc = np.concatenate((np.array([ElAxisAftLEc[0]]), ElAxisAftLEc),)\n        StrcTwst = np.concatenate((np.array([StrcTwst[0]]), StrcTwst),)\n        BMassDen = np.concatenate((np.array([BMassDen[0]]), BMassDen),)\n        FlpStff = np.concatenate((np.array([FlpStff[0]]), FlpStff),)\n        EdgStff = np.concatenate((np.array([EdgStff[0]]), EdgStff),)\n        FlapEdgeStiff = np.concatenate((np.array([FlapEdgeStiff[0]]), FlapEdgeStiff),)\n        GJStff = np.concatenate((np.array([GJStff[0]]), GJStff),)\n        EAStff = np.concatenate((np.array([EAStff[0]]), EAStff),)\n        FlpIner = np.concatenate((np.array([FlpIner[0]]), FlpIner),)\n        EdgIner = np.concatenate((np.array([EdgIner[0]]), EdgIner),)\n        FlapEdgeIner = np.concatenate((np.array([FlapEdgeIner[0]]), FlapEdgeIner),)\n        PrebendRef = np.concatenate((np.array([PrebendRef[0]]), PrebendRef),)\n        PreswpRef = np.concatenate((np.array([PreswpRef[0]]), PreswpRef),)\n        OutPcg = np.concatenate((np.array([OutPcg[0]]), OutPcg),)\n        InPcg = np.concatenate((np.array([InPcg[0]]), InPcg),)\n\n    # Base parameters\n    use_excel_struct_as_elem = False\n    if use_excel_struct_as_elem:\n        blade.StructuralInformation.num_node_elem = 3\n        blade.StructuralInformation.num_elem = len(rR) - 2\n        blade.StructuralInformation.compute_basic_num_node()\n\n        node_r, elem_r = create_node_radial_pos_from_elem_centres(rR*TipRad,\n                                            blade.StructuralInformation.num_node,\n                                            blade.StructuralInformation.num_elem,\n                                            blade.StructuralInformation.num_node_elem)\n    else:\n        # Use excel struct as nodes\n        # Check the number of nodes\n        blade.StructuralInformation.num_node_elem = 3\n        blade.StructuralInformation.num_node = len(rR)\n        if ((len(rR) - 1) % (blade.StructuralInformation.num_node_elem - 1)) == 0:\n            blade.StructuralInformation.num_elem = int((len(rR) - 1)/(blade.StructuralInformation.num_node_elem - 1))\n            node_r = rR*TipRad\n            elem_rR = rR[1::2] + 0.\n            elem_r = rR[1::2]*TipRad + 0.\n        else:\n            raise RuntimeError((\"ERROR: Cannot build %d-noded elements from %d nodes\" % (blade.StructuralInformation.num_node_elem, blade.StructuralInformation.num_node)))\n\n    node_y = np.interp(rR, rR_structural, InPElAxis) + np.interp(rR, rR_structural, PreswpRef)\n    node_z = -np.interp(rR, rR_structural, OutPElAxis) - np.interp(rR, rR_structural, PrebendRef)\n    node_twist = -1.0*np.interp(rR, rR_structural, StrcTwst)\n\n    coordinates = create_blade_coordinates(blade.StructuralInformation.num_node, node_r, node_y, node_z)\n\n    if h5_cross_sec_prop is None:\n        # Stiffness\n        elem_EA = np.interp(elem_rR, rR_structural, EAStff)\n        elem_EIy = np.interp(elem_rR, rR_structural, FlpStff)\n        elem_EIz = np.interp(elem_rR, rR_structural, EdgStff)\n        elem_EIyz = np.interp(elem_rR, rR_structural, FlapEdgeStiff)\n        elem_GJ = np.interp(elem_rR, rR_structural, GJStff)\n\n        # Stiffness: estimate unknown properties\n        cout.cout_wrap.print_file = False\n        cout.cout_wrap('WARNING: The poisson cofficient is assumed equal to 0.3', 3)\n        cout.cout_wrap('WARNING: Cross-section area is used as shear area', 3)\n        poisson_coef = 0.3\n        elem_GAy = elem_EA/2.0/(1.0+poisson_coef)\n        elem_GAz = elem_EA/2.0/(1.0+poisson_coef)\n        # Inertia\n        elem_pos_cg_B = np.zeros((blade.StructuralInformation.num_elem, 3),)\n        elem_pos_cg_B[:, 1] = np.interp(elem_rR, rR_structural, InPcg)\n        elem_pos_cg_B[:, 2] = -np.interp(elem_rR, rR_structural, OutPcg)\n\n        elem_mass_per_unit_length = np.interp(elem_rR, rR_structural, BMassDen)\n        elem_mass_iner_y = np.interp(elem_rR, rR_structural, FlpIner)\n        elem_mass_iner_z = np.interp(elem_rR, rR_structural, EdgIner)\n        elem_mass_iner_yz = np.interp(elem_rR, rR_structural, FlapEdgeIner)\n\n        # Inertia: estimate unknown properties\n        cout.cout_wrap('WARNING: Using perpendicular axis theorem to compute the inertia around xB', 3)\n        elem_mass_iner_x = elem_mass_iner_y + elem_mass_iner_z\n\n        # Generate blade structural properties\n        blade.StructuralInformation.create_mass_db_from_vector(elem_mass_per_unit_length, elem_mass_iner_x, elem_mass_iner_y, elem_mass_iner_z, elem_pos_cg_B, elem_mass_iner_yz)\n        blade.StructuralInformation.create_stiff_db_from_vector(elem_EA, elem_GAy, elem_GAz, elem_GJ, elem_EIy, elem_EIz, elem_EIyz)\n\n    else:\n        # read Mass/Stiffness from database\n        cross_prop = h5.readh5(h5_cross_sec_prop).str_prop\n\n        # create mass_db/stiffness_db (interpolate at mid-node of each element)\n        blade.StructuralInformation.mass_db = scint.interp1d(\n                    cross_prop.radius, cross_prop.M, kind='cubic', copy=False, assume_sorted=True, axis=0,\n                                                    bounds_error=False, fill_value='extrapolate')(node_r[1::2])\n        blade.StructuralInformation.stiffness_db = scint.interp1d(\n                    cross_prop.radius, cross_prop.K, kind='cubic', copy=False, assume_sorted=True, axis=0,\n                                                    bounds_error=False, fill_value='extrapolate')(node_r[1::2])\n\n    blade.StructuralInformation.generate_1to1_from_vectors(\n            num_node_elem=blade.StructuralInformation.num_node_elem,\n            num_node=blade.StructuralInformation.num_node,\n            num_elem=blade.StructuralInformation.num_elem,\n            coordinates=coordinates,\n            stiffness_db=blade.StructuralInformation.stiffness_db,\n            mass_db=blade.StructuralInformation.mass_db,\n            frame_of_reference_delta='y_AFoR',\n            vec_node_structural_twist=np.zeros_like(node_twist) if options['twist_in_aero'] else node_twist,\n            num_lumped_mass=0)\n\n    # Boundary conditions\n    blade.StructuralInformation.boundary_conditions = np.zeros((blade.StructuralInformation.num_node), dtype=int)\n    blade.StructuralInformation.boundary_conditions[0] = 1\n    blade.StructuralInformation.boundary_conditions[-1] = -1\n\n    ######################################################################\n    ### AERODYNAMICS\n    ######################################################################\n    # Read blade aerodynamic information from excel file\n    rR_aero = gc.read_column_sheet_type01(excel_file_name, excel_sheet_aero_blade, 'rR')\n    chord_aero = gc.read_column_sheet_type01(excel_file_name, excel_sheet_aero_blade, 'BlChord')\n    thickness_aero = gc.read_column_sheet_type01(excel_file_name, excel_sheet_aero_blade, 'BlThickness')\n\n    pure_airfoils_names = gc.read_column_sheet_type01(excel_file_name, excel_sheet_airfoil_info, 'Name')\n    pure_airfoils_thickness = gc.read_column_sheet_type01(excel_file_name, excel_sheet_airfoil_info, 'Thickness')\n\n    node_ElAxisAftLEc = np.interp(node_r, rR_structural*TipRad, ElAxisAftLEc)\n\n    # Read coordinates of the pure airfoils\n    n_pure_airfoils = len(pure_airfoils_names)\n\n    pure_airfoils_camber = np.zeros((n_pure_airfoils, n_points_camber, 2),)\n    xls = pd.ExcelFile(excel_file_name)\n    excel_db = pd.read_excel(xls, sheet_name=excel_sheet_airfoil_coord)\n    for iairfoil in range(n_pure_airfoils):\n        # Look for the NaN\n        icoord = 2\n        while(not(math.isnan(excel_db[\"%s_x\" % pure_airfoils_names[iairfoil]][icoord]))):\n            icoord += 1\n            if(icoord == len(excel_db[\"%s_x\" % pure_airfoils_names[iairfoil]])):\n                break\n\n        # Compute the camber of the airfoils at the defined chord points\n        pure_airfoils_camber[iairfoil, :, 0], pure_airfoils_camber[iairfoil, :, 1] = gc.get_airfoil_camber(excel_db[\"%s_x\" % pure_airfoils_names[iairfoil]][2:icoord],\n                                                                                                           excel_db[\"%s_y\" % pure_airfoils_names[iairfoil]][2:icoord],\n                                                                                                           n_points_camber)\n\n    # Basic variables\n    surface_distribution = np.zeros((blade.StructuralInformation.num_elem), dtype=int)\n\n\n    # Interpolate in the correct positions\n    node_chord = np.interp(node_r, rR_aero*TipRad, chord_aero)\n\n    # Define the nodes with aerodynamic properties\n    # Look for the first element that is goint to be aerodynamic\n    first_aero_elem = 0\n    while (elem_r[first_aero_elem] <= rR_aero[0]*TipRad):\n        first_aero_elem += 1\n    first_aero_node = first_aero_elem*(blade.StructuralInformation.num_node_elem - 1)\n    aero_node = np.zeros((blade.StructuralInformation.num_node,), dtype=bool)\n    aero_node[first_aero_node:] = np.ones((blade.StructuralInformation.num_node-first_aero_node,), dtype=bool)\n\n    # Define the airfoil at each stage\n    # airfoils = blade.AerodynamicInformation.interpolate_airfoils_camber(pure_airfoils_camber,excel_aero_r, node_r, n_points_camber)\n\n    node_thickness = np.interp(node_r, rR_aero*TipRad, thickness_aero)\n\n    airfoils = blade.AerodynamicInformation.interpolate_airfoils_camber_thickness(pure_airfoils_camber, pure_airfoils_thickness, node_thickness, n_points_camber)\n    airfoil_distribution = np.linspace(0, blade.StructuralInformation.num_node - 1, blade.StructuralInformation.num_node, dtype=int)\n\n    # User defined m distribution\n    if (m_distribution == 'user_defined') and (user_defined_m_distribution_type == 'last_geometric'):\n        blade_nodes = blade.StructuralInformation.num_node\n        udmd_by_nodes = np.zeros((blade_nodes, chord_panels[0] + 1))\n        for inode in range(blade_nodes):\n            r = np.linalg.norm(blade.StructuralInformation.coordinates[inode, :])\n            vrel = np.sqrt(rotation_velocity**2*r**2 + wsp**2)\n            last_length = vrel*dt/node_chord[inode]\n            last_length = np.minimum(last_length, 0.5)\n            if last_length <= 0.5:\n                ratio = gc.get_factor_geometric_progression(last_length, 1., chord_panels)\n                udmd_by_nodes[inode, -1] = 1.\n                udmd_by_nodes[inode, 0] = 0.\n                for im in range(chord_panels[0] - 1, 0, -1):\n                    udmd_by_nodes[inode, im] = udmd_by_nodes[inode, im + 1] - last_length\n                    last_length *= ratio\n                # Check\n                if (np.diff(udmd_by_nodes[inode, :]) < 0.).any():\n                    sys.error(\"ERROR in the panel discretization of the blade in node %d\" % (inode))\n            else:\n                raise RuntimeError((\"ERROR: cannot match the last panel size for node: %d\" % inode))\n                udmd_by_nodes[inode, :] = np.linspace(0, 1, chord_panels + 1)\n    else:\n        udmd_by_nodes = None\n\n    node_twist_aero = np.zeros_like(node_chord)\n    if camber_effect_on_twist:\n        cout.cout_wrap(\"WARNING: The steady applied Mx should be manually multiplied by the density\", 3)\n        for inode in range(blade.StructuralInformation.num_node):\n            node_twist_aero[inode] = gc.get_aoacl0_from_camber(airfoils[inode, :, 0], airfoils[inode, :, 1])\n            mu0 = gc.get_mu0_from_camber(airfoils[inode, :, 0], airfoils[inode, :, 1])\n            r = np.linalg.norm(blade.StructuralInformation.coordinates[inode, :])\n            vrel = np.sqrt(rotation_velocity**2*r**2 + wsp**2)\n            if inode == 0:\n                dr = 0.5*np.linalg.norm(blade.StructuralInformation.coordinates[1, :] - blade.StructuralInformation.coordinates[0, :])\n            elif inode == len(blade.StructuralInformation.coordinates[:, 0]) - 1:\n                dr = 0.5*np.linalg.norm(blade.StructuralInformation.coordinates[-1, :] - blade.StructuralInformation.coordinates[-2, :])\n            else:\n                dr = 0.5*np.linalg.norm(blade.StructuralInformation.coordinates[inode + 1, :] - blade.StructuralInformation.coordinates[inode - 1, :])\n            moment_factor = 0.5*vrel**2*node_chord[inode]**2*dr\n            # print(\"node\", inode, \"mu0\", mu0, \"CMc/4\", 2.*mu0 + np.pi/2*node_twist_struct[inode])\n            blade.StructuralInformation.app_forces[inode, 3] = (2.*mu0 + np.pi/2*node_twist_aero[inode])*moment_factor\n            airfoils[inode, :, 1] *= 0.\n\n    # Write SHARPy format\n    blade.AerodynamicInformation.create_aerodynamics_from_vec(blade.StructuralInformation,\n                                                            aero_node,\n                                                            node_chord,\n                                                            (node_twist + node_twist_aero) if options['twist_in_aero'] else node_twist_aero,\n                                                            np.pi*np.ones_like(node_chord),\n                                                            chord_panels,\n                                                            surface_distribution,\n                                                            m_distribution,\n                                                            node_ElAxisAftLEc,\n                                                            airfoil_distribution,\n                                                            airfoils,\n                                                            udmd_by_nodes,\n                                                            first_twist=False)\n\n    # Read the polars of the pure airfoils\n    if include_polars:\n        pure_polars = [None]*n_pure_airfoils\n        for iairfoil in range(n_pure_airfoils):\n            excel_sheet_polar = pure_airfoils_names[iairfoil]\n            aoa = gc.read_column_sheet_type01(excel_file_name, excel_sheet_polar, 'AoA')\n            cl = gc.read_column_sheet_type01(excel_file_name, excel_sheet_polar, 'CL')\n            cd = gc.read_column_sheet_type01(excel_file_name, excel_sheet_polar, 'CD')\n            cm = gc.read_column_sheet_type01(excel_file_name, excel_sheet_polar, 'CM')\n            polar = ap.Polar()\n            polar.initialise(np.column_stack((aoa, cl, cd, cm)))\n            pure_polars[iairfoil] = polar\n\n        # Generate the polars for each airfoil\n        blade.AerodynamicInformation.polars = [None]*blade.StructuralInformation.num_node\n        for inode in range(blade.StructuralInformation.num_node):\n            # Find the airfoils between which the node is;\n            ipure = 0\n            while pure_airfoils_thickness[ipure] > node_thickness[inode]:\n                ipure += 1\n                if(ipure == n_pure_airfoils):\n                    ipure -= 1\n                    break\n\n            coef = (node_thickness[inode] - pure_airfoils_thickness[ipure - 1])/(pure_airfoils_thickness[ipure] - pure_airfoils_thickness[ipure - 1])\n            polar = ap.interpolate(pure_polars[ipure - 1], pure_polars[ipure], coef)\n            blade.AerodynamicInformation.polars[inode] = polar.table\n\n    ######################################################################\n    ## ROTOR\n    ######################################################################\n\n    # Read from excel file\n    numberOfBlades = gc.read_column_sheet_type01(excel_file_name, excel_sheet_parameters, 'NumBl')\n    tilt = gc.read_column_sheet_type01(excel_file_name, excel_sheet_parameters, 'ShftTilt')*deg2rad\n    cone = gc.read_column_sheet_type01(excel_file_name, excel_sheet_parameters, 'Cone')*deg2rad\n    # pitch = gc.read_column_sheet_type01(excel_file_name, excel_sheet_rotor, 'Pitch')*deg2rad\n\n    # Apply pitch\n    blade.StructuralInformation.rotate_around_origin(np.array([1., 0., 0.]), -pitch_deg*deg2rad)\n\n    # Apply coning\n    blade.StructuralInformation.rotate_around_origin(np.array([0., 1., 0.]), -cone)\n\n    # Build the whole rotor\n    rotor = blade.copy()\n    hub_nodes = [0]\n    for iblade in range(numberOfBlades-1):\n        hub_nodes.append((iblade + 1)*blade.StructuralInformation.num_node)\n        blade2 = blade.copy()\n        blade2.StructuralInformation.rotate_around_origin(np.array([0., 0., 1.]), (iblade + 1)*(360.0/numberOfBlades)*deg2rad)\n        rotor.assembly(blade2)\n        blade2 = None\n\n    if not options['separate_blades']:\n        rotor.remove_duplicated_points(tol_remove_points)\n        hub_nodes = [0]\n        rotor.StructuralInformation.body_number *= 0\n\n    # Apply tilt\n    rotor.StructuralInformation.rotate_around_origin(np.array([0., 1., 0.]), tilt)\n\n    return rotor, hub_nodes\n\n\ndef generate_from_excel_type03(op_params,\n                                   geom_params,\n                                   excel_description,\n                                   options):\n\n    \"\"\"\n    generate_from_excel_type03\n\n    Function needed to generate a wind turbine (tower + rotor) from an excel database type03.\n    See ``rotor_from_excel_type03'' for more information.\n\n    Args:\n        op_param (dict): Dictionary with operating parameters\n        geom_param (dict): Dictionray with geometical parameters\n        excel_description (dict): Dictionary describing the sheets of the excel file\n        option (dict): Dictionary with the different options for the wind turbine generation\n\n    Returns:\n        wt (sharpy.utils.generate_cases.AeroelasticInfromation): Aeroelastic information of the wind turbine (tower + rotor)\n    \"\"\"\n    rotor, hub_nodes = rotor_from_excel_type03(op_params,\n                                               geom_params,\n                                               excel_description,\n                                               options)\n\n\n    excel_file_name = excel_description['excel_file_name']\n    excel_sheet_parameters = excel_description['excel_sheet_parameters']\n    excel_sheet_structural_tower = excel_description['excel_sheet_structural_tower']\n    tol_remove_points = geom_params['tol_remove_points']\n    rotation_velocity = op_params['rotation_velocity']\n\n    ######################################################################\n    ## TOWER\n    ######################################################################\n\n    # Read from excel file\n    HtFract = gc.read_column_sheet_type01(excel_file_name, excel_sheet_structural_tower, 'HtFract')\n    TMassDen = gc.read_column_sheet_type01(excel_file_name, excel_sheet_structural_tower, 'TMassDen')\n    TwFAStif = gc.read_column_sheet_type01(excel_file_name, excel_sheet_structural_tower, 'TwFAStif')\n    TwSSStif = gc.read_column_sheet_type01(excel_file_name, excel_sheet_structural_tower, 'TwSSStif')\n    # TODO> variables to be defined\n    TwGJStif = gc.read_column_sheet_type01(excel_file_name, excel_sheet_structural_tower, 'TwGJStif')\n    TwEAStif = gc.read_column_sheet_type01(excel_file_name, excel_sheet_structural_tower, 'TwEAStif')\n    TwFAIner = gc.read_column_sheet_type01(excel_file_name, excel_sheet_structural_tower, 'TwFAIner')\n    TwSSIner = gc.read_column_sheet_type01(excel_file_name, excel_sheet_structural_tower, 'TwSSIner')\n    TwFAcgOf = gc.read_column_sheet_type01(excel_file_name, excel_sheet_structural_tower, 'TwFAcgOf')\n    TwSScgOf = gc.read_column_sheet_type01(excel_file_name, excel_sheet_structural_tower, 'TwSScgOf')\n\n    # Define the TOWER\n    TowerHt = gc.read_column_sheet_type01(excel_file_name, excel_sheet_parameters, 'TowerHt')\n    Elevation = TowerHt*HtFract\n\n    tower = gc.AeroelasticInformation()\n    tower.StructuralInformation.num_elem = len(Elevation) - 2\n    tower.StructuralInformation.num_node_elem = 3\n    tower.StructuralInformation.compute_basic_num_node()\n\n    # Interpolate excel variables into the correct locations\n    node_r, elem_r = create_node_radial_pos_from_elem_centres(Elevation,\n                                        tower.StructuralInformation.num_node,\n                                        tower.StructuralInformation.num_elem,\n                                        tower.StructuralInformation.num_node_elem)\n\n    # Stiffness\n    elem_EA = np.interp(elem_r, Elevation, TwEAStif)\n    elem_EIz = np.interp(elem_r, Elevation, TwSSStif)\n    elem_EIy = np.interp(elem_r, Elevation, TwFAStif)\n    elem_GJ = np.interp(elem_r, Elevation, TwGJStif)\n    # Stiffness: estimate unknown properties\n    cout.cout_wrap.print_file = False\n    cout.cout_wrap('WARNING: The poisson cofficient is assumed equal to 0.3', 3)\n    cout.cout_wrap('WARNING: Cross-section area is used as shear area', 3)\n    poisson_coef = 0.3\n    elem_GAy = elem_EA/2.0/(1.0+poisson_coef)\n    elem_GAz = elem_EA/2.0/(1.0+poisson_coef)\n\n    # Inertia\n    elem_mass_per_unit_length = np.interp(elem_r, Elevation, TMassDen)\n    elem_mass_iner_y = np.interp(elem_r, Elevation, TwFAIner)\n    elem_mass_iner_z = np.interp(elem_r, Elevation, TwSSIner)\n    # TODO: check yz axis and Flap-edge\n    elem_pos_cg_B = np.zeros((tower.StructuralInformation.num_elem, 3),)\n    elem_pos_cg_B[:, 1] = np.interp(elem_r, Elevation, TwSScgOf)\n    elem_pos_cg_B[:, 2] = np.interp(elem_r, Elevation, TwFAcgOf)\n\n    # Stiffness: estimate unknown properties\n    cout.cout_wrap('WARNING: Using perpendicular axis theorem to compute the inertia around xB', 3)\n    elem_mass_iner_x = elem_mass_iner_y + elem_mass_iner_z\n\n    # Create the tower\n    tower.StructuralInformation.create_mass_db_from_vector(elem_mass_per_unit_length, elem_mass_iner_x, elem_mass_iner_y, elem_mass_iner_z, elem_pos_cg_B)\n    tower.StructuralInformation.create_stiff_db_from_vector(elem_EA, elem_GAy, elem_GAz, elem_GJ, elem_EIy, elem_EIz)\n\n    coordinates = np.zeros((tower.StructuralInformation.num_node, 3),)\n    coordinates[:, 0] = node_r\n\n    tower.StructuralInformation.generate_1to1_from_vectors(\n            num_node_elem=tower.StructuralInformation.num_node_elem,\n            num_node=tower.StructuralInformation.num_node,\n            num_elem=tower.StructuralInformation.num_elem,\n            coordinates=coordinates,\n            stiffness_db=tower.StructuralInformation.stiffness_db,\n            mass_db=tower.StructuralInformation.mass_db,\n            frame_of_reference_delta='y_AFoR',\n            vec_node_structural_twist=np.zeros((tower.StructuralInformation.num_node,),),\n            num_lumped_mass=1)\n\n    tower.StructuralInformation.boundary_conditions = np.zeros((tower.StructuralInformation.num_node), dtype = int)\n    tower.StructuralInformation.boundary_conditions[0] = 1\n\n    # Nacelle properties from excel file\n    NacelleMass = gc.read_column_sheet_type01(excel_file_name, excel_sheet_parameters, 'NacMass')\n    NacelleMass_x = gc.read_column_sheet_type01(excel_file_name, excel_sheet_parameters, 'NacMass_x')\n    NacelleMass_z = gc.read_column_sheet_type01(excel_file_name, excel_sheet_parameters, 'NacMass_z')\n    # NacelleYawIner = gc.read_column_sheet_type01(excel_file_name, excel_sheet_nacelle, 'NacelleYawIner')\n\n    # Include nacelle mass\n    tower.StructuralInformation.lumped_mass_nodes = np.array([tower.StructuralInformation.num_node - 1], dtype=int)\n    tower.StructuralInformation.lumped_mass = np.array([NacelleMass], dtype=float)\n    if not NacelleMass_x is None and not NacelleMass_z is None:\n        tower.StructuralInformation.lumped_mass_position = np.array([np.array([NacelleMass_z, 0, NacelleMass_x])], dtype=float)\n    else:\n        cout.cout_wrap('WARNING: Nacelle mass placed at tower top', 3)\n\n    tower.AerodynamicInformation.set_to_zero(tower.StructuralInformation.num_node_elem,\n                                            tower.StructuralInformation.num_node,\n                                            tower.StructuralInformation.num_elem)\n\n    # Overhang\n    tilt = gc.read_column_sheet_type01(excel_file_name, excel_sheet_parameters, 'ShftTilt')*deg2rad\n    if not tilt == 0.:\n        raise NonImplementedError(\"Non-zero tilt not supported\")\n    NodesOverhang = gc.read_column_sheet_type01(excel_file_name, excel_sheet_parameters, 'NodesOverhang')\n    overhang_len = gc.read_column_sheet_type01(excel_file_name, excel_sheet_parameters, 'overhang')\n    if NodesOverhang == 0:\n        with_overhang = False\n    else:\n        with_overhang = True\n\n        overhang = gc.AeroelasticInformation()\n        overhang.StructuralInformation.num_node = NodesOverhang\n        overhang.StructuralInformation.num_node_elem = 3\n        overhang.StructuralInformation.compute_basic_num_elem()\n        node_pos = np.zeros((overhang.StructuralInformation.num_node, 3), )\n        node_pos[:, 0] += tower.StructuralInformation.coordinates[-1, 0]\n        node_pos[:, 0] += np.linspace(0., -overhang_len*np.sin(tilt*deg2rad), overhang.StructuralInformation.num_node)\n        node_pos[:, 2] = np.linspace(0., overhang_len*np.cos(tilt*deg2rad), overhang.StructuralInformation.num_node)\n        # TODO: change the following by real values\n        # Same properties as the last element of the tower\n        # cout.cout_wrap(\"WARNING: Using the structural properties of the last tower section for the overhang\", 3)\n        # oh_mass_per_unit_length = tower.StructuralInformation.mass_db[-1, 0, 0]\n        # oh_mass_iner = tower.StructuralInformation.mass_db[-1, 3, 3]\n        cout.cout_wrap(\"WARNING: Using the structural properties (*0.1) of the last tower section for the overhang\", 3)\n        oh_mass_per_unit_length = tower.StructuralInformation.mass_db[-1, 0, 0]/10.\n        oh_mass_iner = tower.StructuralInformation.mass_db[-1, 3, 3]/10.\n        oh_EA = tower.StructuralInformation.stiffness_db[-1, 0, 0]\n        oh_GA = tower.StructuralInformation.stiffness_db[-1, 1, 1]\n        oh_GJ = tower.StructuralInformation.stiffness_db[-1, 3, 3]\n        oh_EI = tower.StructuralInformation.stiffness_db[-1, 4, 4]\n\n        overhang.StructuralInformation.generate_uniform_sym_beam(node_pos,\n                                                            oh_mass_per_unit_length,\n                                                            oh_mass_iner,\n                                                            oh_EA,\n                                                            oh_GA,\n                                                            oh_GJ,\n                                                            oh_EI,\n                                                            num_node_elem=3,\n                                                            y_BFoR='y_AFoR',\n                                                            num_lumped_mass=0)\n\n        overhang.StructuralInformation.boundary_conditions[-1] = -1\n\n        overhang.AerodynamicInformation.set_to_zero(overhang.StructuralInformation.num_node_elem,\n                                                overhang.StructuralInformation.num_node,\n                                                overhang.StructuralInformation.num_elem)\n\n        tower.assembly(overhang)\n        tower.remove_duplicated_points(tol_remove_points)\n        tower.StructuralInformation.body_number *= 0\n\n    # Hub mass\n    HubMass = gc.read_column_sheet_type01(excel_file_name, excel_sheet_parameters, 'HubMass')\n    if HubMass is not None:\n        if with_overhang:\n            tower.StructuralInformation.add_lumped_mass(tower.StructuralInformation.num_node -1,\n                                  HubMass,\n                                  inertia=np.zeros((3, 3)),\n                                  pos=np.zeros((3)))\n        else:\n            n_hub_nodes = len(hub_nodes)\n            for inode_hub in range(n_hub_nodes):\n                rotor.StructuralInformation.add_lumped_mass(hub_nodes[inode_hub],\n                                      HubMass/n_hub_nodes,\n                                      inertia=np.zeros((3, 3)),\n                                      pos=np.zeros((3)))\n    else:\n        cout.cout_wrap('WARNING: HubMass not found', 3)\n\n    for inode in range(len(hub_nodes)):\n        hub_nodes[inode] += tower.StructuralInformation.num_node\n\n    ######################################################################\n    ##  WIND TURBINE\n    ######################################################################\n    # Assembly the whole case\n    wt = tower.copy()\n    hub_position = tower.StructuralInformation.coordinates[-1, :]\n    if not with_overhang:\n        hub_position += np.array([0., 0., overhang_len])\n    rotor.StructuralInformation.coordinates += hub_position\n    wt.assembly(rotor)\n\n    ######################################################################\n    ## MULTIBODY\n    ######################################################################\n    LC = []\n    for iblade in range(len(hub_nodes)):\n        # Define the boundary condition between the rotor and the tower tip\n        LC1 = gc.LagrangeConstraint()\n        LC1.behaviour = 'hinge_node_FoR_constant_vel'\n        LC1.node_in_body = tower.StructuralInformation.num_node - 1\n        LC1.body = 0\n        LC1.body_FoR = iblade + 1\n        if with_overhang:\n            LC1.rot_vect = np.array([-1., 0., 0.])*rotation_velocity\n            LC1.rel_posB = np.zeros((3))\n        else:\n            LC1.rot_vect = np.array([0., 0., 1.])*rotation_velocity\n            LC1.rel_posB = np.array([0., 0., overhang_len])\n        LC.append(LC1)\n\n    # Define the multibody infromation for the tower and the rotor\n    MB = []\n    MB1 = gc.BodyInformation()\n    MB1.body_number = 0\n    MB1.FoR_position = np.zeros((6,),)\n    MB1.FoR_velocity = np.zeros((6,),)\n    MB1.FoR_acceleration = np.zeros((6,),)\n    MB1.FoR_movement = 'prescribed'\n    MB1.quat = np.array([1.0, 0.0, 0.0, 0.0])\n    MB.append(MB1)\n\n    numberOfBlades = len(hub_nodes)\n    for iblade in range(numberOfBlades):\n        MB2 = gc.BodyInformation()\n        MB2.body_number = iblade + 1\n        MB2.FoR_position = np.concatenate((hub_position, np.zeros((3))))\n        MB2.FoR_velocity = np.array([0., 0., 0., 0., 0., rotation_velocity])\n        MB2.FoR_acceleration = np.zeros((6,),)\n        MB2.FoR_movement = 'free'\n        blade_azimuth = (iblade*(360.0/numberOfBlades)*deg2rad)\n        MB2.quat = algebra.euler2quat(np.array([0.0, tilt, blade_azimuth]))\n        MB.append(MB2)\n\n    ######################################################################\n    ## RETURN\n    ######################################################################\n    return wt, LC, MB, hub_nodes\n\n\n######################################################################\n# FROM excel type02\n######################################################################\ndef rotor_from_excel_type02(chord_panels,\n                            rotation_velocity,\n                            pitch_deg,\n                            excel_file_name='database_excel_type02.xlsx',\n                            excel_sheet_parameters='parameters',\n                            excel_sheet_structural_blade='structural_blade',\n                            excel_sheet_discretization_blade='discretization_blade',\n                            excel_sheet_aero_blade='aero_blade',\n                            excel_sheet_airfoil_info='airfoil_info',\n                            excel_sheet_airfoil_coord='airfoil_coord',\n                            excel_sheet_structural_tower='structural_tower',\n                            m_distribution='uniform',\n                            h5_cross_sec_prop=None,\n                            n_points_camber=100,\n                            tol_remove_points=1e-3,\n                            user_defined_m_distribution_type=None,\n                            camber_effect_on_twist=False,\n                            wsp=0.,\n                            dt=0.):\n\n    # Warning for back compatibility\n    cout.cout_wrap('rotor_from_excel_type02 is obsolete! rotor_from_excel_type03 instead!', 3)\n\n    # Assign values to dictionaries\n    op_params = {}\n    op_params['rotation_velocity'] = rotation_velocity\n    op_params['pitch_deg'] = pitch_deg\n    op_params['wsp'] = wsp\n    op_params['dt'] = dt\n\n    geom_params = {}\n    geom_params['chord_panels'] = chord_panels\n    geom_params['tol_remove_points'] = tol_remove_points\n    geom_params['n_points_camber'] = n_points_camber\n    geom_params['h5_cross_sec_prop'] = h5_cross_sec_prop\n    geom_params['m_distribution'] = m_distribution\n\n    options = {}\n    options['camber_effect_on_twist'] = camber_effect_on_twist\n    options['user_defined_m_distribution_type'] = user_defined_m_distribution_type\n    options['include_polars'] = False\n    options['twist_in_aero'] = False\n\n    excel_description = {}\n    excel_description['excel_file_name'] = excel_file_name\n    excel_description['excel_sheet_parameters'] = excel_sheet_parameters\n    excel_description['excel_sheet_structural_blade'] = excel_sheet_structural_blade\n    excel_description['excel_sheet_discretization_blade'] = excel_sheet_discretization_blade\n    excel_description['excel_sheet_aero_blade'] = excel_sheet_aero_blade\n    excel_description['excel_sheet_airfoil_info'] = excel_sheet_airfoil_info\n    excel_description['excel_sheet_airfoil_chord'] = excel_sheet_airfoil_coord\n\n    rotor = rotor_from_excel_type03(op_params,\n                                   geom_params,\n                                   excel_description,\n                                   options)\n\n    return rotor\n\n\ndef generate_from_excel_type02(chord_panels,\n                                rotation_velocity,\n                                pitch_deg,\n                                excel_file_name='database_excel_type02.xlsx',\n                                excel_sheet_parameters='parameters',\n                                excel_sheet_structural_blade='structural_blade',\n                                excel_sheet_discretization_blade='discretization_blade',\n                                excel_sheet_aero_blade='aero_blade',\n                                excel_sheet_airfoil_info='airfoil_info',\n                                excel_sheet_airfoil_coord='airfoil_coord',\n                                excel_sheet_structural_tower='structural_tower',\n                                m_distribution='uniform',\n                                h5_cross_sec_prop=None,\n                                n_points_camber=100,\n                                tol_remove_points=1e-3,\n                                user_defined_m_distribution_type=None,\n                                camber_effect_on_twist=False,\n                                wsp=0.,\n                                dt=0.):\n\n    # Warning for back compatibility\n    cout.cout_wrap('generate_from_excel_type02 is obsolete! rotor_from_excel_type03 instead!', 3)\n\n    # Assign values to dictionaries\n    op_params = {}\n    op_params['rotation_velocity'] = rotation_velocity\n    op_params['pitch_deg'] = pitch_deg\n    op_params['wsp'] = wsp\n    op_params['dt'] = dt\n\n    geom_params = {}\n    geom_params['chord_panels'] = chord_panels\n    geom_params['tol_remove_points'] = tol_remove_points\n    geom_params['n_points_camber'] = n_points_camber\n    geom_params['h5_cross_sec_prop'] = h5_cross_sec_prop\n    geom_params['m_distribution'] = m_distribution\n\n    options = {}\n    options['camber_effect_on_twist'] = camber_effect_on_twist\n    options['user_defined_m_distribution_type'] = user_defined_m_distribution_type\n    options['include_polars'] = False\n\n    excel_description = {}\n    excel_description['excel_file_name'] = excel_file_name\n    excel_description['excel_sheet_parameters'] = excel_sheet_parameters\n    excel_description['excel_sheet_structural_tower'] = excel_sheet_structural_tower\n    excel_description['excel_sheet_structural_blade'] = excel_sheet_structural_blade\n    excel_description['excel_sheet_discretization_blade'] = excel_sheet_discretization_blade\n    excel_description['excel_sheet_aero_blade'] = excel_sheet_aero_blade\n    excel_description['excel_sheet_airfoil_info'] = excel_sheet_airfoil_info\n    excel_description['excel_sheet_airfoil_chord'] = excel_sheet_airfoil_coord\n\n    wt = generate_from_excel_type03(op_params,\n                                   geom_params,\n                                   excel_description,\n                                   options)\n\n    return wt\n"
  },
  {
    "path": "sharpy/controllers/__init__.py",
    "content": "import importlib\nimport os\n\nimport sharpy.utils.controller_interface as controller_interface\nimport sharpy.utils.sharpydir as sharpydir\n\nfiles = controller_interface.controller_list_from_path(os.path.dirname(__file__))\n\nimport_path = os.path.realpath(os.path.dirname(__file__))\nimport_path = import_path.replace(sharpydir.SharpyDir, \"\")\nif import_path[0] == \"/\": import_path = import_path[1:]\nimport_path = import_path.replace(\"/\", \".\")\n\nfor file in files:\n    controller_interface.controllers[file] = importlib.import_module(import_path + \".\" + file)\n"
  },
  {
    "path": "sharpy/controllers/bladepitchpid.py",
    "content": "import numpy as np\nimport os\nfrom control import ss, forced_response, TransferFunction\n\nimport sharpy.utils.controller_interface as controller_interface\nimport sharpy.utils.settings as settings\nimport sharpy.utils.control_utils as control_utils\nimport sharpy.utils.cout_utils as cout\nimport sharpy.utils.algebra as algebra\nfrom sharpy.utils.constants import deg2rad\n\n\n@controller_interface.controller\nclass BladePitchPid(controller_interface.BaseController):\n    r\"\"\"\n\n\n    \"\"\"\n    controller_id = 'BladePitchPid'\n\n    settings_types = dict()\n    settings_default = dict()\n    settings_description = dict()\n    settings_options = dict()\n\n    # PID parameters\n    settings_types['P'] = 'float'\n    settings_default['P'] = None\n    settings_description['P'] = 'Proportional gain of the controller'\n\n    settings_types['I'] = 'float'\n    settings_default['I'] = 0.0\n    settings_description['I'] = 'Integral gain of the controller'\n\n    settings_types['D'] = 'float'\n    settings_default['D'] = 0.0\n    settings_description['D'] = 'Differential gain of the controller'\n\n    # Filter\n    settings_types['lp_cut_freq'] = 'float'\n    settings_default['lp_cut_freq'] = 0.\n    settings_description['lp_cut_freq'] = 'Cutting frequency of the low pass filter of the process value in Hz. Choose 0 for no filter'\n\n    settings_types['anti_windup_lim'] = 'list(float)'\n    settings_default['anti_windup_lim'] = [-1., -1.]\n    settings_description['anti_windup_lim'] = ('Limits of actuation to apply anti windup.' +\n                                              'Use the same number to deactivate.')\n\n    # Set point parameters\n    settings_types['sp_type'] = 'str'\n    settings_default['sp_type'] = None\n    settings_description['sp_type'] = (\n            'Quantity used to define the' +\n            ' set point')\n    settings_options['sp_type'] = ['rbm', 'pitch', 'gen_vel']\n\n    settings_types['sp_source'] = 'str'\n    settings_default['sp_source'] = None\n    settings_description['sp_source'] = (\n            'Source used to define the' +\n            ' set point')\n    settings_options['sp_source'] = ['file', 'const']\n\n    settings_types['sp_time_history_file'] = 'str'\n    settings_default['sp_time_history_file'] = ''\n    settings_description['sp_time_history_file'] = ('Route and file name of the time ' +\n                                                    'history of the desired set point.' +\n                                                    'Used for ``sp_source = file``')\n\n    settings_types['sp_const'] = 'float'\n    settings_default['sp_const'] = 0.\n    settings_description['sp_const'] = 'Constant set point. Only used for ``sp_source`` = `const ``'\n\n    # Other parameters\n    settings_types['dt'] = 'float'\n    settings_default['dt'] = None\n    settings_description['dt'] = 'Time step of the simulation'\n\n    settings_types['ntime_steps'] = 'int'\n    settings_default['ntime_steps'] = None\n    settings_description['ntime_steps'] = 'Number of time steps'\n\n    #settings_types['tower_body'] = 'int'\n    #settings_default['tower_body'] = 0\n    #settings_description['tower_body'] = 'Body number of the tower'\n\n    #settings_types['tower_top_node'] = 'int'\n    #settings_default['tower_top_node'] = 0\n    #settings_description['tower_top_node'] = 'Global node number of the tower top'\n\n    settings_types['blade_num_body'] = 'list(int)'\n    settings_default['blade_num_body'] = [0,]\n    settings_description['blade_num_body'] = 'Body number of the blade(s) to pitch'\n\n    settings_types['max_pitch_rate'] = 'float'\n    settings_default['max_pitch_rate'] = 0.1396\n    settings_description['max_pitch_rate'] = 'Maximum pitch rate [rad/s]'\n\n    settings_types['pitch_sp'] = 'float'\n    settings_default['pitch_sp'] = 0.\n    settings_description['pitch_sp'] = 'Pitch set point [rad]'\n\n    settings_types['initial_pitch'] = 'float'\n    settings_default['initial_pitch'] = 0.\n    settings_description['initial_pitch'] = 'Initial pitch [rad]'\n\n    settings_types['initial_rotor_vel'] = 'float'\n    settings_default['initial_rotor_vel'] = 0.\n    settings_description['initial_rotor_vel'] = 'Initial rotor velocity [rad/s]'\n\n    settings_types['min_pitch'] = 'float'\n    settings_default['min_pitch'] = 0.\n    settings_description['min_pitch'] = 'Minimum pitch [rad]'\n\n    settings_types['max_pitch'] = 'float'\n    settings_default['max_pitch'] = 1.5707963267948966\n    settings_description['max_pitch'] = 'Maximum pitch [rad]'\n\n    settings_types['nocontrol_steps'] = 'int'\n    settings_default['nocontrol_steps'] = -1\n    settings_description['nocontrol_steps'] = 'Time steps without control action'\n\n    # Generator and drive train model\n    settings_types['gen_model_const_var'] = 'str'\n    settings_default['gen_model_const_var'] = ''\n    settings_description['gen_model_const_var'] = 'Generator metric to be kept constant at a value `target_gen_value`'\n    settings_options['gen_model_const_var'] = ['power', 'torque']\n\n    settings_types['gen_model_const_value'] = 'float'\n    settings_default['gen_model_const_value'] = 3945990.325\n    settings_description['gen_model_const_value'] = 'Constant value of the generator metric to be kept constant '\n\n    settings_types['GBR'] = 'float'\n    settings_default['GBR'] = 97.\n    settings_description['GBR'] = 'Gear box ratio'\n\n    settings_types['inertia_dt'] = 'float'\n    settings_default['inertia_dt'] = 43776046.25\n    settings_description['inertia_dt'] = 'Drive train inertia'\n\n    settings_types['newmark_damp'] = 'float'\n    settings_default['newmark_damp'] = 1e-4\n    settings_description['newmark_damp'] = 'Damping of the time integration newmark-beta scheme'\n\n    # Output parameters\n    settings_types['write_controller_log'] = 'bool'\n    settings_default['write_controller_log'] = True\n    settings_description['write_controller_log'] = (\n            'Write a time history of input, required input, ' +\n            'and control')\n\n    settings_table = settings.SettingsTable()\n    __doc__ += settings_table.generate(settings_types,\n                                       settings_default,\n                                       settings_description)\n\n    def __init__(self):\n        self.in_dict = None\n        self.data = None\n        self.settings = None\n\n        self.prescribed_sp_time_history = None\n        self.prescribed_sp = list()\n        self.system_pv = list()\n\n        self.controller_implementation = None\n\n        self.log_fname = None\n\n    def initialise(self, data, in_dict, controller_id=None, restart=False):\n        self.in_dict = in_dict\n        settings.to_custom_types(self.in_dict,\n                                 self.settings_types,\n                                 self.settings_default,\n                                 no_ctype=True)\n\n        self.settings = self.in_dict\n        self.newmark_beta = 0.5 + self.settings['newmark_damp']\n\n        if self.settings['write_controller_log']:\n            folder = data.output_folder + '/controllers/'\n            if not os.path.exists(folder):\n                os.makedirs(folder)\n            self.log_fname = (folder + self.controller_id + \".dat\")\n            fid = open(self.log_fname, 'a')\n            fid.write(('#'+ 1*'{:>2} ' + 10*'{:>12} ' + '{:>12}\\n').\n                    format('tstep', 'time', 'ref_state', 'state', 'Pcontrol', 'Icontrol', 'Dcontrol', 'control', 'gen_torque', 'rotor_vel', 'pitch_vel', 'pitch'))\n            fid.close()\n\n        # save input time history\n        if self.settings['sp_source'] == 'file':\n            self.prescribed_sp_time_history = np.loadtxt(self.settings['sp_time_history_file'])\n        # Init PID controller\n        self.controller_implementation = control_utils.PID(self.settings['P'],\n                                                           self.settings['I'],\n                                                           self.settings['D'],\n                                                           self.settings['dt'])\n\n        if not self.settings['anti_windup_lim'][0] == self.settings['anti_windup_lim'][1]:\n                self.controller_implementation.set_anti_windup_lim(self.settings['anti_windup_lim'])\n\n        if self.settings['lp_cut_freq'] == 0.:\n            self.filter_pv = False\n        else:\n            self.filter_pv = True\n            w0 = self.settings['lp_cut_freq']*2*np.pi\n            self.filter = TransferFunction(np.array([w0]), np.array([1., w0]))\n            self.min_it_filter = int(1./(self.settings['lp_cut_freq']*self.settings['dt']))\n\n        self.pitch = self.settings['initial_pitch']\n        self.rotor_vel = self.settings['initial_rotor_vel']\n        self.rotor_acc = 0.\n\n    def control(self, data, controlled_state):\n        r\"\"\"\n        Main routine of the controller.\n        Input is `data` (the self.data in the solver), and\n        `currrent_state` which is a dictionary with ['structural', 'aero']\n        time steps for the current iteration.\n\n        :param data: problem data containing all the information.\n        :param controlled_state: `dict` with two vars: `structural` and `aero`\n            containing the `timestep_info` that will be returned with the\n            control variables.\n\n        :returns: A `dict` with `structural` and `aero` time steps and control\n            input included.\n        \"\"\"\n        # TODO: move this to the initialisation with restart\n        if len(self.system_pv) == 0:\n            for it in range(data.ts - 1):\n                self.system_pv.append(0.)\n                self.prescribed_sp.append(0.)\n\n        struct_tstep = controlled_state['structural']\n        aero_tstep = controlled_state['aero']\n        if not \"info\" in controlled_state:\n            controlled_state['info'] = dict()\n\n        time = self.settings['dt']*data.ts\n\n        # Compute the rotor velocity\n        aero_torque = self.compute_aero_torque(data.structure, struct_tstep)\n        # if self.settings['variable_speed']:\n        if True:\n            #ielem, inode_in_elem = data.structure.node_master_elem[self.settings['tower_top_node']\n            #node_cga = ag.quat2rotation(struct_tstep.mb_quat[self.settings['tower_body'], :])\n            #cab = ag.crv2rotation(struct_tstep.psi[ielem, inode_in_elem, :])\n            #FoR_cga = ag.quat2rotation(struct_tstep.mb_quat[self.settings['blade_num_body'][0], :])\n\n            #ini_rotor_vel = ag.multiply_matrices(cab.T, node_cga.T, FoR_cga,\n            #                                     struct_tstep.mb_FoR_vel[self.settings['blade_num_body'][0], 3:6])[2]\n            #ini_rotor_acc = ag.multiply_matrices(cab.T, node_cga.T, FoR_cga,\n            #                                     struct_tstep.mb_FoR_acc[self.settings['blade_num_body'][0], 3:6])[2]\n            self.rotor_vel, self.rotor_acc = self.drive_train_model(aero_torque,\n                                                                    self.rotor_vel,\n                                                                    self.rotor_acc)\n        else:\n            self.rotor_vel = self.settings['sp_const']\n            self.rotor_acc = 0.\n\n        # System set point\n        prescribed_sp = self.compute_prescribed_sp(time)\n        # System process value\n        sys_pv = self.compute_system_pv(struct_tstep,\n                                        data.structure,\n                                        gen_vel=self.rotor_vel*self.settings['GBR'])\n\n        if data.ts < self.settings['nocontrol_steps']:\n            sys_pv = prescribed_sp\n            self.system_pv[-1] = sys_pv\n            return controlled_state\n        else:\n            controlled_state['info']['rotor_vel'] = self.rotor_vel\n\n        # Apply filter\n        # Filter only after five periods of the cutoff frequency\n        if self.filter_pv and (len(self.system_pv) > self.min_it_filter):\n            nit = len(self.system_pv)\n            time = np.linspace(0, (nit - 1)*self.settings['dt'], nit)\n            # print(time.shape, len(self.system_pv))\n            T, filtered_pv, xout = forced_response(self.filter,\n                                        T=time,\n                                        U=self.system_pv)\n        else:\n            filtered_pv = self.system_pv\n\n        # get current state input\n        delta_pitch_ref, detail = self.controller_wrapper(\n                required_input=self.prescribed_sp,\n                current_input=filtered_pv,\n                control_param={'P': self.settings['P'],\n                               'I': self.settings['I'],\n                               'D': self.settings['D']},\n                i_current=data.ts)\n        # NREL controller does error = state - reference. Here is done the other way\n        delta_pitch_ref *= -1.\n        # Limit pitch and pitch rate\n        target_pitch = delta_pitch_ref + self.settings['pitch_sp']\n        pitch_rate = (target_pitch - self.pitch)/self.settings['dt']\n        if pitch_rate < -self.settings['max_pitch_rate']:\n            pitch_rate = -self.settings['max_pitch_rate']\n        elif pitch_rate > self.settings['max_pitch_rate']:\n            pitch_rate = self.settings['max_pitch_rate']\n\n        next_pitch = self.pitch + pitch_rate*self.settings['dt']\n        if next_pitch < self.settings['min_pitch']:\n            pitch_rate = 0.\n            next_pitch = self.settings['min_pitch']\n        if next_pitch > self.settings['max_pitch']:\n            pitch_rate = 0.\n            next_pitch = self.settings['max_pitch']\n\n        self.pitch = next_pitch\n\n        controlled_state['info']['pitch_vel'] = -pitch_rate\n\n        # Apply control order\n        change_quat = False\n        if change_quat:\n            for ibody in self.settings['blade_num_body']:\n                quat = algebra.rotate_quaternion(struct_tstep.mb_quat[ibody, :],\n                                                 delta_pitch*np.array([1., 0., 0.]))\n                struct_tstep.mb_quat[ibody, :] = quat.copy()\n                if ibody == 0:\n                    struct_tstep.quat = quat.copy()\n        change_vel = False\n        if change_vel:\n            for ibody in self.settings['blade_num_body']:\n                struct_tstep.mb_FoR_vel[ibody, 3] = pitch_rate\n                struct_tstep.mb_FoR_acc[ibody, 3] = (data.structure.timestep_info[data.ts - 1].mb_FoR_vel[ibody, 3] -\n                                                     struct_tstep.mb_FoR_vel[ibody, 3])/self.settings['dt']\n                if ibody == 0:\n                    struct_tstep.for_vel[3] = struct_tstep.mb_FoR_vel[ibody, 3]\n                    struct_tstep.for_acc[3] = struct_tstep.mb_FoR_acc[ibody, 3]\n\n            data.structure.dynamic_input[data.ts - 1]['for_vel'] = struct_tstep.for_vel.copy()\n            data.structure.dynamic_input[data.ts - 1]['for_acc'] = struct_tstep.for_acc.copy()\n\n        if False:\n            data.aero.generate_zeta_timestep_info(struct_tstep,\n                                              aero_tstep,\n                                              data.structure,\n                                              data.aero.aero_settings,\n                                              dt=self.settings['dt'])\n\n        fid = open(self.log_fname, 'a')\n        fid.write(('{:>6d} '\n                        + 10*'{:>12.6f} '\n                        + '{:>12.6f}\\n').format(data.ts,\n                                                data.ts*self.settings['dt'],\n                                                self.prescribed_sp[-1],\n                                                self.system_pv[-1],\n                                                detail[0],\n                                                detail[1],\n                                                detail[2],\n                                                delta_pitch_ref,\n                                                aero_torque/self.settings['GBR'],\n                                                self.rotor_vel,\n                                                pitch_rate,\n                                                self.pitch))\n        fid.close()\n        return controlled_state\n\n\n    def compute_prescribed_sp(self, time):\n        \"\"\"\n            Compute the set point relevant for the controller\n        \"\"\"\n        if self.settings['sp_source'] == 'file':\n            sp = np.interp(time,\n                           self.prescribed_sp_time_history[:, 0],\n                           self.prescribed_sp_time_history[:, 1])\n            self.prescribed_sp.append(sp)\n        elif self.settings['sp_source'] == 'const':\n            self.prescribed_sp.append(self.settings['sp_const'])\n\n        return self.prescribed_sp[-1]\n\n\n    def compute_system_pv(self, struct_tstep, beam, **kwargs):\n        \"\"\"\n            Compute the process value relevant for the controller\n        \"\"\"\n        if self.settings['sp_type'] == 'pitch':\n            pitch = algebra.quat2euler(struct_tstep.mb_quat[self.settings['blade_num_body'][0]])[0]\n            self.system_pv.append(pitch)\n        elif self.settings['sp_type'] == 'rbm':\n            steady, unsteady, grav = struct_tstep.extract_resultants(beam, force_type=['steady', 'unsteady', 'gravity'],\n                                                                                       ibody=0)\n            rbm = steady[4] + unsteady[4] + grav[4]\n            self.system_pv.append(rbm)\n        elif self.settings['sp_type'] == 'gen_vel':\n            self.system_pv.append(kwargs['gen_vel'])\n\n        return self.system_pv[-1]\n\n    def controller_wrapper(self,\n                           required_input,\n                           current_input,\n                           control_param,\n                           i_current):\n        self.controller_implementation.set_point(required_input[i_current - 1])\n        control_param, detailed_control_param = self.controller_implementation(current_input[-1])\n        return (control_param, detailed_control_param)\n\n    def __exit__(self, *args):\n        # self.log.close()\n        pass\n\n    def drive_train_model(self, aero_torque, ini_rot_vel, ini_rot_acc):\n\n        # Assuming contant generator torque demand\n        if self.settings['gen_model_const_var'] == 'power':\n            gen_torque = self.settings['gen_model_const_value']/self.settings['GBR']/ini_rot_vel\n        elif self.settings['gen_model_const_var'] == 'torque':\n            gen_torque = self.settings['gen_model_const_value']\n\n        rot_acc = (aero_torque - self.settings['GBR']*gen_torque)/self.settings['inertia_dt']\n        rot_vel = ini_rot_vel + rot_acc*self.settings['dt']\n\n        return rot_vel, rot_acc\n\n    def compute_aero_torque(self, beam, struct_tstep):\n        # Compute total forces\n        total_forces = np.zeros(6)\n        for ibody in self.settings['blade_num_body']:\n            steady, unsteady, grav = struct_tstep.extract_resultants(beam,\n                                                      force_type=['steady', 'unsteady', 'grav'],\n                                                      ibody=ibody)\n            # total_forces += steady + unsteady + grav\n            total_forces += steady + unsteady\n\n        # Compute equivalent forces at hub position\n        hub_elem = np.where(beam.body_number == self.settings['blade_num_body'][0])[0][0]\n        hub_node = beam.connectivities[hub_elem, 0]\n        hub_pos = struct_tstep.pos[hub_node, :]\n\n        hub_forces = np.zeros(6)\n        hub_forces[:3] = total_forces[:3].copy()\n        hub_forces[3:6] = total_forces[3:6] - np.cross(hub_pos, total_forces[:3])\n\n        return hub_forces[5]\n\n    @staticmethod\n    def compute_blade_pitch(beam, struct_tstep, tower_ibody=0, blade_ibody=1):\n        # Tower top\n        tt_elem = np.where(beam.body_number == tower_ibody)[0][-1]\n        tt_node = beam.connectivities[tt_elem, 1]\n        ielem, inode_in_elem = beam.node_master_elem[tt_node]\n        ca0b = algebra.crv2rotation(struct_tstep.psi[ielem, inode_in_elem, :])\n        cga0 = algebra.quat2rotation(struct_tstep.mb_quat[tower_ibody, :])\n        zg_tower_top = cga0 @ ca0b @ np.array([0., 0., 1.])\n\n        # blade root\n        cga = algebra.quat2rotation(struct_tstep.mb_quat[blade_ibody, :])\n        zg_hub = cga @ np.array([0., 0., 1.])\n\n        pitch = algebra.angle_between_vectors(zg_tower_top, zg_hub)\n        return pitch\n"
  },
  {
    "path": "sharpy/controllers/controlsurfacepidcontroller.py",
    "content": "import numpy as np\nimport os\n\nimport sharpy.utils.controller_interface as controller_interface\nimport sharpy.utils.settings as settings\nimport sharpy.utils.control_utils as control_utils\nimport sharpy.utils.cout_utils as cout\n\n\n@controller_interface.controller\nclass ControlSurfacePidController(controller_interface.BaseController):\n    r\"\"\"\n\n\n    \"\"\"\n    controller_id = 'ControlSurfacePidController'\n\n    settings_types = dict()\n    settings_default = dict()\n    settings_description = dict()\n\n    settings_types['time_history_input_file'] = 'str'\n    settings_default['time_history_input_file'] = None\n    settings_description['time_history_input_file'] = 'Route and file name of the time history of desired state'\n\n    settings_types['P'] = 'float'\n    settings_default['P'] = None\n    settings_description['P'] = 'Proportional gain of the controller'\n\n    settings_types['I'] = 'float'\n    settings_default['I'] = 0.0\n    settings_description['I'] = 'Integral gain of the controller'\n\n    settings_types['D'] = 'float'\n    settings_default['D'] = 0.0\n    settings_description['D'] = 'Differential gain of the controller'\n\n    settings_types['input_type'] = 'str'\n    settings_default['input_type'] = None\n    settings_description['input_type'] = (\n            'Quantity used to define the' +\n            ' reference state. Supported: `pitch`')\n\n    settings_types['dt'] = 'float'\n    settings_default['dt'] = None\n    settings_description['dt'] = 'Time step of the simulation'\n\n    settings_types['controlled_surfaces'] = 'list(int)'\n    settings_default['controlled_surfaces'] = None\n    settings_description['controlled_surfaces'] = (\n            'Control surface indices to be actuated by this controller')\n\n    settings_types['controlled_surfaces_coeff'] = 'list(float)'\n    settings_default['controlled_surfaces_coeff'] = [1.]\n    settings_description['controlled_surfaces_coeff'] = (\n            'Control surface deflection coefficients. ' +\n            'For example, for antisymmetric deflections => [1, -1].')\n\n    settings_types['write_controller_log'] = 'bool'\n    settings_default['write_controller_log'] = True\n    settings_description['write_controller_log'] = (\n            'Write a time history of input, required input, ' +\n            'and control')\n\n    supported_input_types = ['pitch', 'roll', 'pos_']\n\n    settings_table = settings.SettingsTable()\n    __doc__ += settings_table.generate(settings_types,\n                                       settings_default,\n                                       settings_description)\n\n    def __init__(self):\n        self.in_dict = None\n        self.data = None\n        self.settings = None\n\n        self.prescribed_input_time_history = None\n\n        # Time histories are ordered such that the [i]th element of each\n        # is the state of the controller at the time of returning.\n        # That means that for the timestep i,\n        # state_input_history[i] == input_time_history_file[i] + error[i]\n        self.p_error_history = list()\n        self.i_error_history = list()\n        self.d_error_history = list()\n        self.real_state_input_history = list()\n        self.control_history = list()\n\n        self.controller_implementation = None\n\n        self.n_control_surface = 0\n\n        self.log = None\n\n    def initialise(self, data, in_dict, controller_id=None, restart=False):\n        self.in_dict = in_dict\n        settings.to_custom_types(self.in_dict,\n                                 self.settings_types,\n                                 self.settings_default)\n\n        self.settings = self.in_dict\n        self.controller_id = controller_id\n\n        # validate that the input_type is in the supported ones\n        valid = False\n        for t in self.supported_input_types:\n            if t in self.settings['input_type']:\n                valid = True\n                break\n        if not valid:\n            cout.cout_wrap('The input_type {} is not supported by {}'.format(\n                self.settings['input_type'], self.controller_id), 3)\n            cout.cout_wrap('The supported ones are:', 3)\n            for i in self.supported_input_types:\n                cout.cout_wrap('    {}'.format(i), 3)\n            raise NotImplementedError()\n\n        if self.settings['write_controller_log']:\n            folder = data.output_folder + '/controllers/'\n            if not os.path.exists(folder):\n                os.makedirs(folder)\n            self.log = open(folder + self.controller_id + \".log.csv\", \"w+\")\n            self.log.write(('#'+ 1*'{:>2},' + 6*'{:>12},' + '{:>12}\\n').\n                    format('tstep', 'time', 'Ref. state', 'state', 'Pcontrol', 'Icontrol', 'Dcontrol', 'control'))\n            self.log.flush()\n\n        # save input time history\n        try:\n            self.prescribed_input_time_history = (\n                np.loadtxt(self.settings['time_history_input_file'], delimiter=','))\n        except OSError:\n            raise OSError('File {} not found in Controller'.format(self.settings['time_history_input_file']))\n\n        # Init PID controller\n        self.controller_implementation = control_utils.PID(self.settings['P'],\n                                                           self.settings['I'],\n                                                           self.settings['D'],\n                                                           self.settings['dt'])\n\n        # check that controlled_surfaces_coeff has the correct number of parameters\n        # if len() == 1 and == 1.0, then expand to number of surfaces.\n        # if len(coeff) /= n_surfaces, throw error\n        self.n_control_surface = len(self.settings['controlled_surfaces'])\n        if (len(self.settings['controlled_surfaces_coeff']) ==\n            self.n_control_surface):\n            # All good, pass checks\n            pass\n        elif (len(self.settings['controlled_surfaces_coeff']) == 1 and\n            self.settings['controlled_surfaces_coeff'][0] == 1.0):\n            # default value, fill with 1.0\n            self.settings['controlled_surfaces_coeff'] = np.ones(\n                    (self.n_control_surface,), dtype=float)\n        else:\n            raise ValueError('controlled_surfaces_coeff does not have as many'\n                    + ' elements as controller_surfaces')\n\n    def control(self, data, controlled_state):\n        r\"\"\"\n        Main routine of the controller.\n        Input is `data` (the self.data in the solver), and\n        `currrent_state` which is a dictionary with ['structural', 'aero']\n        time steps for the current iteration.\n\n        :param data: problem data containing all the information.\n        :param controlled_state: `dict` with two vars: `structural` and `aero`\n            containing the `timestep_info` that will be returned with the\n            control variables.\n\n        :returns: A `dict` with `structural` and `aero` time steps and control\n            input included.\n        \"\"\"\n\n        # get current state input\n        self.real_state_input_history.append(self.extract_time_history(controlled_state))\n\n        i_current = len(self.real_state_input_history)\n        # apply it where needed.\n        control_command, detail = self.controller_wrapper(\n                required_input=self.prescribed_input_time_history,\n                current_input=self.real_state_input_history,\n                control_param={'P': self.settings['P'],\n                               'I': self.settings['I'],\n                               'D': self.settings['D']},\n                i_current=i_current)\n\n        controlled_state['aero'].control_surface_deflection = (\n            np.array(self.settings['controlled_surfaces_coeff'])*control_command)\n\n        self.log.write(('{:>6d},'\n                        + 6*'{:>12.6f},'\n                        + '{:>12.6f}\\n').format(i_current,\n                                                i_current*self.settings['dt'],\n                                                self.prescribed_input_time_history[i_current - 1],\n                                                self.real_state_input_history[i_current - 1],\n                                                detail[0],\n                                                detail[1],\n                                                detail[2],\n                                                control_command))\n        return controlled_state\n\n    def extract_time_history(self, controlled_state):\n        output = 0.0\n        if self.settings['input_type'] == 'pitch':\n            step = controlled_state['structural']\n            euler = step.euler_angles()\n\n            output = euler[1]\n        elif self.settings['input_type'] == 'roll':\n            step = controlled_state['structural']\n            euler = step.euler_angles()\n\n            output = euler[0]\n        elif 'pos_z(' in self.settings['input_type']:\n            node_str = self.settings['input_type']\n            node_str = node_str.replace('pos(', '')\n            node_str = node_str.replace(')', '')\n            node = int(node_str)\n            step = controlled_state['structural']\n            pos = step.pos[node, :]\n\n            output = pos[2]\n        else:\n            raise NotImplementedError(\n                \"input_type {} is not yet implemented in extract_time_history()\"\n                .format(self.settings['input_type']))\n        return output\n\n    def controller_wrapper(self,\n                           required_input,\n                           current_input,\n                           control_param,\n                           i_current):\n        self.controller_implementation.set_point(required_input[i_current - 1])\n        control_param, detailed_control_param = self.controller_implementation(current_input[-1])\n        return (control_param, detailed_control_param)\n\n    def __exit__(self, *args):\n        self.log.close()\n"
  },
  {
    "path": "sharpy/controllers/multibodycontroller.py",
    "content": "import numpy as np\nimport os\n\nimport sharpy.utils.controller_interface as controller_interface\nimport sharpy.utils.settings as settings\n\n\n@controller_interface.controller\nclass MultibodyController(controller_interface.BaseController):\n    r\"\"\" \"\"\"\n\n    controller_id = \"MultibodyController\"\n\n    settings_types = dict()\n    settings_default = dict()\n    settings_description = dict()\n    settings_options = dict()\n\n    settings_types[\"ang_history_input_file\"] = \"str\"\n    settings_default[\"ang_history_input_file\"] = None\n    settings_description[\"ang_history_input_file\"] = \"Route and file name of the time history of desired CRV rotation\"\n\n    settings_types[\"ang_vel_history_input_file\"] = \"str\"\n    settings_default[\"ang_vel_history_input_file\"] = \"\"\n    settings_description[\"ang_vel_history_input_file\"] = (\"Route and file name of the time history of desired CRV \"\n                                                          \"velocity\")\n\n    settings_types[\"psi_dot_init\"] = \"list(float)\"\n    settings_default[\"psi_dot_init\"] = [0., 0., 0.]\n    settings_description[\"psi_dot_init\"] = \"Initial rotation velocity of hinge\"\n\n    settings_types[\"dt\"] = \"float\"\n    settings_default[\"dt\"] = None\n    settings_description[\"dt\"] = \"Time step of the simulation\"\n\n    settings_types[\"write_controller_log\"] = \"bool\"\n    settings_default[\"write_controller_log\"] = True\n    settings_description[\"write_controller_log\"] = (\n        \"Write a time history of input, required input, \" + \"and control\"\n    )\n\n    settings_table = settings.SettingsTable()\n    __doc__ += settings_table.generate(\n        settings_types, settings_default, settings_description, settings_options\n    )\n\n    def __init__(self):\n        self.in_dict = None     # this also holds the settings dict, kept to be consistent with other controllers\n        self.data = None\n        self.settings = None\n\n        self.prescribed_ang_time_history = None\n        self.prescribed_ang_vel_time_history = None\n\n        # Time histories are ordered such that the [i]th element of each\n        # is the state of the controller at the time of returning.\n        # That means that for the timestep i,\n        # state_input_history[i] == input_time_history_file[i] + error[i]\n\n        self.real_state_input_history = list()\n        self.control_history = list()\n\n        self.controller_implementation = None\n        self.log = None\n\n    def initialise(self, data, in_dict, controller_id=None, restart=False):\n        self.in_dict = in_dict\n        settings.to_custom_types(\n            self.in_dict, self.settings_types, self.settings_default\n        )\n\n        self.settings = self.in_dict\n        self.controller_id = controller_id\n\n        # whilst PID control is not here implemented, I have left the remains for if it gets implemented in future\n        if self.settings[\"write_controller_log\"]:\n            folder = data.output_folder + \"/controllers/\"\n            if not os.path.exists(folder):\n                os.makedirs(folder)\n            self.log = open(folder + self.controller_id + \".log.csv\", \"w+\")\n            self.log.write(\n                (\"#\" + 1 * \"{:>2},\" + 6 * \"{:>12},\" + \"{:>12}\\n\").format(\n                    \"tstep\",\n                    \"time\",\n                    \"Ref. state\",\n                    \"state\",\n                    \"Pcontrol\",\n                    \"Icontrol\",\n                    \"Dcontrol\",\n                    \"control\",\n                )\n            )\n            self.log.flush()\n\n        # save input time history\n        try:\n            self.prescribed_ang_time_history = np.loadtxt(\n                self.settings[\"ang_history_input_file\"], delimiter=\",\"\n            )\n        except:\n            try:\n                self.prescribed_ang_time_history = np.load(\n                    self.settings[\"ang_history_input_file\"]\n                )\n            except:\n                raise OSError(\n                    \"File {} not found in Controller\".format(\n                        self.settings[\"ang_history_input_file\"]\n                    )\n                )\n\n        if self.settings[\"ang_vel_history_input_file\"]:\n            try:\n                self.prescribed_ang_vel_time_history = np.loadtxt(\n                    self.settings[\"ang_vel_history_input_file\"], delimiter=\",\"\n                )\n            except:\n                try:\n                    self.prescribed_ang_vel_time_history = np.load(\n                        self.settings[\"ang_vel_history_input_file\"]\n                    )\n                except:\n                    raise OSError(\n                        \"File {} not found in Controller\".format(\n                            self.settings[\"ang_vel_history_input_file\"]\n                        )\n                    )\n\n    def control(self, data, controlled_state):\n        r\"\"\"\n        Main routine of the controller.\n        Input is `data` (the self.data in the solver), and\n        `currrent_state` which is a dictionary with ['structural', 'aero']\n        time steps for the current iteration.\n\n        :param data: problem data containing all the information.\n        :param controlled_state: `dict` with two vars: `structural` and `aero`\n            containing the `timestep_info` that will be returned with the\n            control variables.\n\n        :returns: A `dict` with `structural` and `aero` time steps and control\n            input included.\n        \"\"\"\n\n        control_command = self.prescribed_ang_time_history[data.ts - 1, :]\n\n        if self.prescribed_ang_vel_time_history is None:\n            if data.ts == 1:\n                psi_dot = self.settings[\"psi_dot_init\"]\n            else:\n                psi_dot = (\n                    self.prescribed_ang_time_history[data.ts - 1, :]\n                    - self.prescribed_ang_time_history[data.ts - 2, :]\n                ) / self.settings[\"dt\"]\n        else:\n            psi_dot = self.prescribed_ang_vel_time_history[data.ts - 1, :]\n\n        if controlled_state[\"structural\"].mb_prescribed_dict is None:\n            controlled_state[\"structural\"].mb_prescribed_dict = dict()\n\n        controlled_state[\"structural\"].mb_prescribed_dict[self.controller_id] = {\n            \"psi\": control_command,\n            \"psi_dot\": psi_dot,\n            \"delta_psi\": control_command - self.prescribed_ang_time_history[0, :]}\n\n        return controlled_state, control_command\n\n    def controller_wrapper(\n        self, required_input, current_input, control_param, i_current\n    ):\n        self.controller_implementation.set_point(required_input[i_current - 1])\n        control_param, detailed_control_param = self.controller_implementation(\n            current_input[-1]\n        )\n        return control_param, detailed_control_param\n\n    def __exit__(self, *args):\n        self.log.close()\n"
  },
  {
    "path": "sharpy/controllers/takeofftrajectorycontroller.py",
    "content": "import ctypes as ct\nimport numpy as np\nimport os\nimport scipy.interpolate as interpolate\n\nimport sharpy.utils.controller_interface as controller_interface\nimport sharpy.utils.settings as settings\nimport sharpy.utils.control_utils as control_utils\nimport sharpy.utils.cout_utils as cout\nimport sharpy.structure.utils.lagrangeconstraints as lc\n\n\n@controller_interface.controller\nclass TakeOffTrajectoryController(controller_interface.BaseController):\n    r\"\"\"\n\n\n    \"\"\"\n    controller_id = 'TakeOffTrajectoryController'\n\n    settings_types = dict()\n    settings_default = dict()\n    settings_description = dict()\n\n    settings_types['trajectory_input_file'] = 'str'\n    settings_default['trajectory_input_file'] = None\n    settings_description['trajectory_input_file'] = 'Route and file name of the trajectory file given as a csv with columns: time, x, y, z'\n\n    settings_types['dt'] = 'float'\n    settings_default['dt'] = None\n    settings_description['dt'] = 'Time step of the simulation'\n\n    settings_types['trajectory_method'] = 'str'\n    settings_default['trajectory_method'] = 'lagrange'\n    settings_description['trajectory_method'] = (\n            'Trajectory controller method. For now, \"lagrange\" is the supported option')\n\n    settings_types['controlled_constraint'] = 'str'\n    settings_default['controlled_constraint'] = None\n    settings_description['controlled_constraint'] = ('Name of the controlled constraint in the multibody context' +\n        ' Usually, it is something like `constraint_00`.')\n\n    settings_types['controller_log_route'] = 'str'\n    settings_default['controller_log_route'] = './output/'\n    settings_description['controller_log_route'] = (\n        'Directory where the log will be stored')\n\n    settings_types['write_controller_log'] = 'bool'\n    settings_default['write_controller_log'] = True\n    settings_description['write_controller_log'] = (\n        'Controls if the log from the controller is written or not.')\n\n    settings_types['free_trajectory_structural_solver'] = 'str'\n    settings_default['free_trajectory_structural_solver'] = ''\n    settings_description['free_trajectory_structural_solver'] = (\n        'If different than and empty string, the structural solver' +\n        ' will be changed after the end of the trajectory has been reached')\n\n    settings_types['free_trajectory_structural_substeps'] = 'int'\n    settings_default['free_trajectory_structural_substeps'] = 0\n    settings_description['free_trajectory_structural_substeps'] = (\n        'Controls the structural solver' +\n        ' structural substeps once the end of the trajectory has been reached')\n\n    settings_types['initial_ramp_length_structural_substeps'] = 'int'\n    settings_default['initial_ramp_length_structural_substeps'] = 10\n    settings_description['initial_ramp_length_structural_substeps'] = (\n        'Controls the number of timesteps that are used to increase the' +\n        ' structural substeps from 0')\n\n    settings_table = settings.SettingsTable()\n    __doc__ += settings_table.generate(settings_types,\n                                       settings_default,\n                                       settings_description)\n\n    def __init__(self):\n        self.in_dict = None\n        self.data = None\n        self.settings = None\n\n        self.input_history = None\n        self.trajectory_interp = None\n        self.trajectory_vel_interp = None\n        self.t_limits = np.zeros((2,))\n\n        self.controlled_body = None\n        self.controlled_node = None\n\n        self.log = None\n\n    def initialise(self, data, in_dict, controller_id=None, restart=False):\n        self.in_dict = in_dict\n        settings.to_custom_types(self.in_dict,\n                                 self.settings_types,\n                                 self.settings_default)\n\n        self.settings = self.in_dict\n        self.controller_id = controller_id\n\n        if self.settings['write_controller_log']:\n            # TODO substitute for table writer in cout_utils.\n            folder = data.output_folder + '/controllers/'\n            if not os.path.exists(folder):\n                os.makedirs(folder)\n            self.log = open(folder + self.controller_id + \".log.csv\", \"w+\")\n            self.log.write(('#'+ 1*'{:>2},' + 6*'{:>12},' + '{:>12}\\n').\n                    format('tstep', 'time', 'Ref. state', 'state', 'Pcontrol', 'Icontrol', 'Dcontrol', 'control'))\n            self.log.flush()\n\n        # save input time history\n        try:\n            self.input_history = (\n                np.loadtxt(\n                    self.settings['trajectory_input_file'], delimiter=','))\n        except OSError:\n            raise OSError('File {} not found in {}'.format(\n                self.settings['time_history_input_file'], self.controller_id))\n\n        self.process_trajectory()\n\n    def control(self, data, controlled_state):\n        r\"\"\"\n        Main routine of the controller.\n        Input is `data` (the self.data in the solver), and\n        `currrent_state` which is a dictionary with ['structural', 'aero']\n        time steps for the current iteration.\n\n        :param data: problem data containing all the information.\n        :param controlled_state: `dict` with two vars: `structural` and `aero`\n            containing the `timestep_info` that will be returned with the\n            control variables.\n\n        :returns: A `dict` with `structural` and `aero` time steps and control\n            input included.\n        \"\"\"\n        # get current state input\n        # note: with or without the -1?\n        time = (data.ts - 1)*self.settings['dt']\n        i_current = data.ts\n\n        try:\n            constraint = controlled_state['structural'].\\\n                    mb_dict[self.settings['controlled_constraint']]\n        except KeyError:\n            return controlled_state\n\n        if self.controlled_body is None or self.controlled_node is None:\n            self.controlled_body = constraint['body_number']\n            self.controlled_node = constraint['node_number']\n\n        # reset info to include only fresh info\n        controlled_state['info'] = dict()\n\n        # apply it where needed.\n        traj_command, end_of_traj = self.controller_wrapper(time)\n        if end_of_traj:\n            lc.remove_constraint(controlled_state['structural'].mb_dict,\n                                 self.settings['controlled_constraint'])\n\n            if not self.settings['free_trajectory_structural_solver'] == '':\n                controlled_state['info']['structural_solver'] = (\n                    self.settings['free_trajectory_structural_solver'])\n\n            controlled_state['info']['structural_substeps'] = (\n                self.settings['free_trajectory_structural_substeps'])\n\n            return controlled_state\n\n        constraint['velocity'][:] = traj_command\n\n        if self.settings['write_controller_log']:\n            self.log.write(('{:>6d},'\n                            + 3*'{:>12.6f},'\n                            + '{:>12.6f}\\n').format(i_current,\n                                                    time,\n                                                    traj_command[0],\n                                                    traj_command[1],\n                                                    traj_command[2]))\n\n        if self.settings['initial_ramp_length_structural_substeps'] >= 0:\n            if (i_current <\n                    self.settings['initial_ramp_length_structural_substeps']):\n                controlled_state['info']['structural_substeps'] = \\\n                        ct.c_int(i_current - 1)\n            elif (i_current ==\n                  self.settings['initial_ramp_length_structural_substeps']):\n                controlled_state['info']['structural_substeps'] = None\n\n        return controlled_state\n\n    def process_trajectory(self, dxdt=True):\n        \"\"\"\n        See https://docs.scipy.org/doc/scipy-0.15.1/reference/generated/scipy.interpolate.UnivariateSpline.html\n        \"\"\"\n        self.trajectory_interp = []\n        # Make sure s = 0.5 is ok.\n        self.t_limits[:] = (np.min(self.input_history[:, 0]),\n                            np.max(self.input_history[:, 0]))\n        for i_dim in range(3):\n            self.trajectory_interp.append(\n                interpolate.UnivariateSpline(self.input_history[:, 0],\n                                             self.input_history[:, i_dim + 1],\n                                             k=1,\n                                             s=0.,\n                                             ext='raise'))\n        if dxdt:\n            self.trajectory_vel_interp = []\n            for i_dim in range(3):\n                self.trajectory_vel_interp.append(\n                    self.trajectory_interp[i_dim].derivative())\n\n    def controller_wrapper(self, t):\n        output_traj = np.zeros((3,))\n        end_of_traj = False\n        if self.settings['trajectory_method'] == 'lagrange':\n            # check that t is in input limits\n            if self.t_limits[0] <= t <= self.t_limits[1]:\n                # return velocities\n                for i_dim in range(3):\n                    output_traj[i_dim] = self.trajectory_vel_interp[i_dim](t)\n            else:\n                for i_dim in range(3):\n                    output_traj[i_dim] = np.nan\n                    end_of_traj = True\n        else:\n            raise NotImplementedError('The trajectory_method ' +\n                                      self.settings['trajectory_method'] +\n                                      ' is not yet implemented.')\n        return output_traj, end_of_traj\n\n    def __exit__(self, *args):\n        self.log.close()\n"
  },
  {
    "path": "sharpy/generators/__init__.py",
    "content": "\"\"\"Generators\n\nVelocity field generators prescribe the flow conditions for your problem. For instance, you can have an aircraft at\na prescribed fixed location in a velocity field towards the aircraft. Alternatively, you can have a free moving\naircraft in a static velocity field.\n\nDynamic Control Surface generators enable the user to prescribe a certain control surface deflection in time.\n\"\"\"\nimport importlib\nimport os\n\nimport sharpy.utils.generator_interface as generator_interface\nimport sharpy.utils.sharpydir as sharpydir\n\nfiles = generator_interface.generator_list_from_path(os.path.dirname(__file__))\n\nimport_path = os.path.realpath(os.path.dirname(__file__))\nimport_path = import_path.replace(sharpydir.SharpyDir, \"\")\nif import_path[0] == \"/\":\n    import_path = import_path[1:]\nimport_path = import_path.replace(\"/\", \".\")\n\nfor file in files:\n    generator_interface.generators[file] = importlib.import_module(import_path + \".\" + file)\n"
  },
  {
    "path": "sharpy/generators/bumpvelocityfield.py",
    "content": "import numpy as np\n\nimport sharpy.utils.generator_interface as generator_interface\nimport sharpy.utils.settings as settings\nimport sharpy.utils.exceptions as exc\n\n\n@generator_interface.generator\nclass BumpVelocityField(generator_interface.BaseGenerator):\n    r\"\"\"\n    Bump Velocity Field Generator\n\n    ``BumpVelocityField`` is a class inherited from ``BaseGenerator``\n\n    The ``BumpVelocityField`` class generates a bump-shaped gust profile velocity field, and the profile has the characteristics\n    specified by the user.\n\n    To call this generator, the ``generator_id = BumpVelocityField`` shall be used.\n    This is parsed as the value for the ``velocity_field_generator`` key in the desired aerodynamic solver's settings.\n\n    The resultant velocity, $w_g$, is calculated as follows:\n\n    .. math::\n\n        w_g = \\frac{w_0}{4}\\left( 1 + \\cos(\\frac{(x - x_0)}{H_x} \\right)\\left( 1 + \\cos(\\frac{(y - y_0)}{H_y} \\right)\n\n\n    Notes:\n        For now, only simulations where the inertial FoR is fixed are supported.\n\n    \"\"\"\n    generator_id = 'BumpVelocityField'\n    generator_classification = 'velocity-field'\n\n    settings_types = dict()\n    settings_default = dict()\n    settings_description = dict()\n\n    settings_types['gust_intensity'] = 'float'\n    settings_default['gust_intensity'] = None\n    settings_description['gust_intensity'] = 'Intensity of the gust'\n\n    settings_types['x0'] = 'float'\n    settings_default['x0'] = 0.0\n    settings_description['x0'] = 'x location of the centre of the bump'\n\n    settings_types['y0'] = 'float'\n    settings_default['y0'] = 0.0\n    settings_description['y0'] = 'y location of the centre of the bump'\n\n    settings_types['hx'] = 'float'\n    settings_default['hx'] = 1.\n    settings_description['hx'] = 'Gust gradient in the x direction'\n\n    settings_types['hy'] = 'float'\n    settings_default['hy'] = 1.\n    settings_description['hy'] = 'Gust gradient in the y direction'\n\n    settings_types['relative_motion'] = 'bool'\n    settings_default['relative_motion'] = False\n    settings_description['relative_motion'] = 'When true the gust will move at the prescribed velocity'\n\n    settings_types['u_inf'] = 'float'\n    settings_default['u_inf'] = None\n    settings_description['u_inf'] = 'Free stream velocity'\n\n    settings_types['u_inf_direction'] = 'list(float)'\n    settings_default['u_inf_direction'] = np.array([1.0, 0, 0])\n    settings_description['u_inf_direction'] = 'Free stream velocity direction'\n\n    table = settings.SettingsTable()\n    __doc__ += table.generate(settings_types, settings_default, settings_description)\n\n    def __init__(self):\n        self.in_dict = dict()\n        self.settings = dict()\n\n        self.u_inf = 0.\n        self.u_inf_direction = None\n\n    def initialise(self, in_dict, restart=False):\n        self.in_dict = in_dict\n        settings.to_custom_types(self.in_dict, BumpVelocityField.settings_types, BumpVelocityField.settings_default)\n        self.settings = self.in_dict\n\n        self.u_inf = self.settings['u_inf']\n        self.u_inf_direction = self.in_dict['u_inf_direction']\n\n    def generate(self, params, uext):\n        zeta = params['zeta']\n        override = params['override']\n        for_pos = params['for_pos']\n        t = params['t']\n\n        def gust_shape(x, y, z, hx, hy, x0, y0, w0):\n            vel = np.zeros((3,))\n            if np.abs(x - x0) > hx or np.abs(y - y0) > hy:\n                return vel\n\n            vel[2] = 0.25*w0*(1 + np.cos((x - x0)/hx * np.pi))*(1 + np.cos((y - y0)/hy * np.pi))\n            return vel\n\n        for i_surf in range(len(zeta)):\n            if override:\n                uext[i_surf].fill(0.0)\n\n            for i in range(zeta[i_surf].shape[1]):\n                for j in range(zeta[i_surf].shape[2]):\n                    uext[i_surf][:, i, j] += gust_shape(zeta[i_surf][0, i, j] + for_pos[0],\n                                                        zeta[i_surf][1, i, j] + for_pos[1],\n                                                        zeta[i_surf][2, i, j] + for_pos[2],\n                                                        self.settings['hx'],\n                                                        self.settings['hy'],\n                                                        self.settings['x0'],\n                                                        self.settings['y0'],\n                                                        self.settings['gust_intensity'])\n\n                    if self.settings['relative_motion']:\n                        uext[i_surf][:, i, j] += self.u_inf*t\n"
  },
  {
    "path": "sharpy/generators/dynamiccontrolsurface.py",
    "content": "import numpy as np\n\nimport sharpy.utils.generator_interface as generator_interface\nimport sharpy.utils.settings as settings\nimport sharpy.utils.cout_utils as cout_utils\n\n\n@generator_interface.generator\nclass DynamicControlSurface(generator_interface.BaseGenerator):\n    \"\"\"\n    Dynamic Control Surface deflection Generator\n\n    The object generates a deflection in radians based on the time series given as a single vector in the input data.\n    A first order finite-differences scheme is used to calculate the deflection rate based on the provided time step\n    increment.\n\n    To call this generator, the ``generator_id = DynamicControlSurface`` key shall be used for the setting\n    `control_surface_deflection` in the ``AerogridLoader`` solver.\n\n   One instance of this generator will be created for each control surface, thus, a group of settings should be defined\n   for each control surface (``cs0_settings``, ``cs1_settings`` ... in the example below).\n   All of these groups of settings should be collected as values in a dictionary which keys are the associated control surface number in string format.\n   This dictionary should be parsed to the variable\n    ``control_surface_deflection_generator_settings`` in ``AerogridLoader``. This is shown better\n    in the example below:\n\n    Examples:\n\n        .. code-block:\n\n            cs0_settings = {}  # these are the settings for control surface number 0\n            cs1_settings = {}  # these are the settings for control surface number 1\n            dict_of_cs = {'0': cs0_settings,\n                                  '1': cs1_settings} # This dictionary groups all the settings for all the control surfaces\n            settings = {}\n            settings['AerogridLoader] = {'control_surface_deflection' : ['DynamicControlSurface],\n                                                         'control_surface_deflection_generator_settings: dict_of_cs}\n\n\n\n    Attributes:\n        deflection (np.array): Array of deflection of the control surface\n        deflection_dot (np.array): Array of the time derivative of the cs deflection. Calculated using 1st order finite differences.\n\n    \"\"\"\n    generator_id = 'DynamicControlSurface'\n    generator_classification = 'utils'\n\n    settings_types = dict()\n    settings_default = dict()\n    settings_description = dict()\n\n    settings_types['dt'] = 'float'\n    settings_default['dt'] = None\n    settings_description['dt'] = 'Time step increment'\n\n    settings_types['deflection_file'] = 'str'\n    settings_default['deflection_file'] = None\n    settings_description['deflection_file'] = 'Path to the file with the deflection information'\n\n    settings_table = settings.SettingsTable()\n    __doc__ += settings_table.generate(settings_types, settings_default, settings_description,\n                                       header_line='This generator takes the following inputs:')\n\n    def __init__(self):\n        self.in_dict = dict()\n\n        self.deflection = None\n        self.deflection_dot = None\n\n    def initialise(self, in_dict, restart=False):\n        self.in_dict = in_dict\n        settings.to_custom_types(self.in_dict, self.settings_types, self.settings_default, no_ctype=True)\n\n        # load file\n        try:\n            self.deflection = np.loadtxt(self.in_dict['deflection_file'])\n        except OSError:\n            cout_utils.cout_wrap('Unable to find control surface deflection file input', 4)\n            raise FileNotFoundError('Could not locate deflection file: '\n                                    '{:s}'.format(self.in_dict['deflection_file']))\n        else:\n            cout_utils.cout_wrap('\\tSuccess loading file {:s}'.format(self.in_dict['deflection_file']), 2)\n\n        # deflection velocity\n        self.deflection_dot = np.zeros_like(self.deflection)\n        self.deflection_dot[0:-1] = np.diff(self.deflection)/self.in_dict['dt']\n        self.deflection_dot[-1] = 0\n\n    def generate(self, params):\n        it = params['it']\n        return self.deflection[it], self.deflection_dot[it]\n\n    def __call__(self, params):\n        return self.generate(params)\n"
  },
  {
    "path": "sharpy/generators/floatingforces.py",
    "content": "import numpy as np\nimport h5py as h5\nimport ctypes as ct\nimport os\nfrom scipy.fft import fft, ifft\nfrom scipy.interpolate import interp1d\nfrom control import forced_response, TransferFunction\n\nimport sharpy.utils.cout_utils as cout\nimport sharpy.utils.generator_interface as generator_interface\nimport sharpy.utils.settings as settings\nimport sharpy.utils.solver_interface as solver_interface\nfrom sharpy.utils.constants import deg2rad\nimport sharpy.utils.h5utils as h5utils\nimport sharpy.utils.algebra as algebra\n\n\ndef compute_xf_zf(hf, vf, l, w, EA, cb):\n    \"\"\"\n        Fairlead location (xf, zf) computation\n    \"\"\"\n\n    root1, root2, ln1, ln2, lb = rename_terms(vf, hf, w, l)\n\n    # Define if there is part of the mooring line on the bed\n    if lb <= 0:\n        nobed = True\n    else:\n        nobed = False\n\n    # Compute the position of the fairlead\n    if nobed:\n        xf = hf/w*(ln1 - ln2) + hf*l/EA\n        zf = hf/w*(root1 - root2) + 1./EA*(vf*l-w*l**2/2)\n    else:\n        xf = lb + hf/w*ln1 + hf*l/EA\n        if not cb == 0.:\n            xf += cb*w/2/EA*(-lb**2 + (lb - hf/cb/w)*np.maximum((lb - hf/cb/w), 0))\n        zf = hf/w*(root1 - 1) + vf**2/2/EA/w\n\n    return xf, zf\n\n\ndef compute_jacobian(hf, vf, l, w, EA, cb):\n    \"\"\"\n        Analytical computation of the Jacobian of equations\n        in function compute_xf_zf\n    \"\"\"\n\n    root1, root2, ln1, ln2, lb = rename_terms(vf, hf, w, l)\n\n    # Compute their deivatives\n    der_root1_hf = 0.5*(1. + (vf/hf)**2)**(-0.5)*(2*vf/hf*(-vf/hf/hf))\n    der_root1_vf = 0.5*(1. + (vf/hf)**2)**(-0.5)*(2*vf/hf/hf)\n\n    der_root2_hf = 0.5*(1. + ((vf - w*l)/hf)**2)**(-0.5)*(2.*(vf - w*l)/hf*(-(vf - w*l)/hf/hf))\n    der_root2_vf = 0.5*(1. + ((vf - w*l)/hf)**2)**(-0.5)*(2.*(vf - w*l)/hf/hf)\n\n    der_ln1_hf = 1./(vf/hf + root1)*(vf/hf/hf + der_root1_hf)\n    der_ln1_vf = 1./(vf/hf + root1)*(1./hf + der_root1_vf)\n\n    der_ln2_hf = 1./((vf - w*l)/hf + root2)*(-(vf - w*l)/hf/hf + der_root2_hf)\n    der_ln2_vf = 1./((vf - w*l)/hf + root2)*(1./hf + der_root2_vf)\n\n    der_lb_hf = 0.\n    der_lb_vf = -1./w\n\n    # Define if there is part of the mooring line on the bed\n    if lb <= 0:\n        nobed = True\n    else:\n        nobed = False\n\n    # Compute the Jacobian\n    if nobed:\n        der_xf_hf = 1./w*(ln1 - ln2) + hf/w*(der_ln1_hf + der_ln2_hf) + l/EA\n        der_xf_vf = hf/w*(der_ln1_vf + der_ln2_vf)\n\n        der_zf_hf = 1./w*(root1 - root2) + hf/w*(der_root1_hf - der_root2_hf)\n        der_zf_vf = hf/w*(der_root1_vf - der_root2_vf) + 1./EA*l\n    else:\n        der_xf_hf = der_lb_hf + 1./w*ln1 + hf/w*der_ln1_hf + l/EA\n        if not cb == 0.:\n            arg1_max = l - vf/w - hf/cb/w\n            if arg1_max > 0.:\n                der_xf_hf += cb*w/2/EA*(2*(arg1_max)*(-1/cb/w))\n\n        der_xf_vf = der_lb_vf + hf/w*der_ln1_vf + cb*w/2/EA*(-2.*lb*der_lb_vf)\n        if not cb == 0.:\n            arg1_max = l - vf/w - hf/cb/w\n            if arg1_max > 0.:\n                der_xf_vf += cb*w/2/EA*(2.*(lb - hf/cb/w)*der_lb_vf)\n\n        der_zf_hf = 1/w*(root1 - 1) + hf/w*der_root1_hf\n        der_zf_vf = hf/w*der_root1_vf + vf/EA/w\n\n    J = np.array([[der_xf_hf, der_xf_vf],[der_zf_hf, der_zf_vf]])\n\n    return J\n\n\ndef rename_terms(vf, hf, w, l):\n    \"\"\"\n        Rename some terms for convenience\n    \"\"\"\n    root1 = np.sqrt(1. + (vf/hf)**2)\n    root2 = np.sqrt(1. + ((vf - w*l)/hf)**2)\n    ln1 = np.log(vf/hf + root1)\n    ln2 = np.log((vf - w*l)/hf + root2)\n    lb = l - vf/w\n    return root1, root2, ln1, ln2, lb\n\ndef quasisteady_mooring(xf, zf, l, w, EA, cb, hf0=None, vf0=None):\n    \"\"\"\n        Computation of the forces generated by the mooring system\n        It performs a Newton-Raphson iteration based on the known equations\n        in compute_xf_zf function and the Jacobian\n    \"\"\"\n\n    # Initialise guess for hf0 and vf0\n    if xf == 0:\n        lambda0 = 1e6\n    elif np.sqrt(xf**2 + zf**2) > l:\n        lambda0 = 0.2\n    else:\n        lambda0 = np.sqrt(3*((l**2 - zf**2)/xf**2 - 1))\n\n    if hf0 is None:\n        hf0 = np.abs(w*xf/2/lambda0)\n\n    if vf0 is None:\n        vf0 = w/2*(zf/np.tanh(lambda0) + l)\n\n    # Compute the solution through Newton-Raphson iteration\n    hf_est = hf0 + 0.\n    vf_est = vf0 + 0.\n    xf_est, zf_est = compute_xf_zf(hf_est, vf_est, l, w, EA, cb)\n    # print(\"initial: \", xf_est, zf_est)\n    tol = 1e-6\n    error = 2*tol\n    max_iter = 10000\n    it = 0\n    while ((error > tol) and (it < max_iter)):\n        J_est = compute_jacobian(hf_est, vf_est, l, w, EA, cb)\n        inv_J_est = np.linalg.inv(J_est)\n        hf_est += inv_J_est[0, 0]*(xf - xf_est) + inv_J_est[0, 1]*(zf - zf_est)\n        vf_est += inv_J_est[1, 0]*(xf - xf_est) + inv_J_est[1, 1]*(zf - zf_est)\n\n        xf_est, zf_est = compute_xf_zf(hf_est, vf_est, l, w, EA, cb)\n        error = np.maximum(np.abs(xf - xf_est), np.abs(zf - zf_est))\n        it += 1\n    if ((it == max_iter) and (error > tol)):\n        cout.cout_wrap((\"Mooring system did not converge. error %f\" % error), 4)\n        print(\"Mooring system did not converge. error %f\" % error)\n\n    return hf_est, vf_est\n\n\ndef wave_radiation_damping(K, qdot, it, dt):\n    \"\"\"\n        This function computes the wave radiation damping assuming K constant\n    \"\"\"\n    qdot_int = np.zeros((6,))\n    for idof in range(6):\n        qdot_int[idof] = np.trapz(np.arange(0, it + 1, 1)*dt, qdot[0:it, idof])\n\n    return np.dot(K, qdot_int)\n\n\ndef change_of_to_sharpy(matrix_of):\n    \"\"\"\n    Change between frame of reference of OpenFAST and the\n    usual one in SHARPy\n    \"\"\"\n\n    sub_mat = np.array([[0., 0, 1],\n                        [0., -1, 0],\n                        [1., 0, 0]])\n    C_of_s = np.zeros((6,6))\n    C_of_s[0:3, 0:3] = sub_mat\n    C_of_s[3:6, 3:6] = sub_mat\n\n    matrix_sharpy = np.dot(C_of_s.T, np.dot(matrix_of, C_of_s))\n    return matrix_sharpy\n\n\ndef rfval(num, den, z):\n    \"\"\"\n        Evaluate a rational function given by the coefficients of the numerator (num) and\n        denominator (den) at z\n    \"\"\"\n    return np.polyval(num, z)/np.polyval(den, z)\n\n\ndef matrix_from_rf(dict_rf, w):\n    \"\"\"\n    Create a matrix from the rational function approximation of each one of the elements\n    \"\"\"\n    H = np.zeros((6, 6))\n    for i in range(6):\n        for j in range(6):\n            pos = \"%d_%d\" % (i, j)\n            H[i, j] = rfval(dict_rf[pos]['num'], dict_rf[pos]['den'], w)\n\n    return H\n\n\ndef response_freq_dep_matrix(H, omega_H, q, it_, dt):\n    \"\"\"\n    Compute the frequency response of a system with a transfer function depending on the frequency\n    F(t) = H(omega) * q(t)\n    \"\"\"\n    it = it_ + 1\n    omega_fft = np.linspace(0, 1/(2*dt), it//2)[:it//2]\n    fourier_q = fft(q[:it, :], axis=0)\n    fourier_f = np.zeros_like(fourier_q)\n\n    ndof = q.shape[1]\n    f = np.zeros((ndof))\n\n    # Compute the constant component\n    if type(H) is np.ndarray:\n        interp_H = interp1d(omega_H, H, axis=0)\n        H_omega = interp_H(omega_fft[0])\n    elif type(H) is tuple:\n        H_omega = matrix_from_rf(H, omega_fft[0])\n    else:\n        cout.cout_wrap((\"ERROR: Not implemented response_freq_dep_matrix for type(H) %s\" % type(H)), 4)\n    fourier_f[0, :] = np.dot(H_omega, fourier_q[0, :])\n\n    # Compute the rest of the terms\n    for iomega in range(1, omega_fft.shape[0]):\n        # Interpolate H at omega\n        if type(H) is np.ndarray:\n            H_omega = interp_H(omega_fft[iomega])\n        elif type(H) is dict:\n            H_omega = matrix_from_rf(H, omega_fft[iomega])\n        fourier_f[iomega, :] = np.dot(H_omega, fourier_q[iomega, :])\n        fourier_f[-iomega, :] = np.dot(H_omega, fourier_q[-iomega, :])\n\n    # Compute the inverse Fourier tranform\n    f[:] = np.real(ifft(fourier_f, axis=0)[it_, :])\n\n    return f\n\n\ndef compute_equiv_hd_added_mass(f, q):\n    \"\"\"\n        Compute the matrix H that satisfies f = Hq\n        H represents the added mass effects so it has to be\n        symmetric.\n        For the OC3 platfrom the following statements hold:\n            - z-y symmetry\n            - Non-diagonal non-zero terms: (1,5) and (2,4). Zero-indexed\n    \"\"\"\n\n    if (q == 0).all():\n        return np.zeros((6,6))\n\n    q_mat = np.array([[q[0], 0,    0,    0,    0,    0],\n                      [0,    q[1], 0,    0,    q[5], 0],\n                      [0,    q[2], 0,    0,    0,    q[4]],\n                      [0,    0,    q[3], 0,    0,    0],\n                      [0,    0,    0,    q[4], 0,    q[2]],\n                      [0,    0,    0,    q[5], q[1], 0]])\n\n    hv = np.dot(np.linalg.inv(q_mat), f)\n\n    H = np.array([[hv[0], 0,     0,     0,     0,     0],\n                  [0,     hv[1], 0,     0,     0,     hv[4]],\n                  [0,     0,     hv[1], 0,     hv[5], 0],\n                  [0,     0,     0,     hv[2], 0,     0],\n                  [0,     0,     hv[5], 0,     hv[3], 0],\n                  [0,     hv[4], 0,     0,     0,     hv[3]]])\n\n    return H\n\n\ndef jonswap_spectrum(Tp, Hs, w):\n    \"\"\"\n    This function computes the one-sided spectrum of the JONSWAP wave data\n    [2] Jonkman, J. M. Dynamics modeling and loads analysis of an offshore floating wind turbine. 2007. NREL/TP-500-41958\n    \"\"\"\n    nomega = w.shape[0]\n    spectrum = np.zeros((nomega))\n    for iomega in range(nomega):\n        # Compute the scaling factor\n        if w[iomega] <= 2*np.pi/Tp:\n            sigma = 0.07\n        else:\n            sigma = 0.09\n        # Compute the peak shape parameter\n        param = Tp/np.sqrt(Hs)\n        if param <= 3.6:\n            gamma = 5.\n        elif param > 5:\n            gamma = 1.\n        else:\n            gamma = np.exp(5.75 - 1.15*param)\n        # Compute one-sided spectrum\n        omega = w[iomega]\n        if omega == 0:\n            spectrum[iomega] = 0.\n        else:\n            param = omega*Tp/2/np.pi\n            spectrum[iomega] = (1./2/np.pi)*(5./16)*(Hs**2*Tp)*param**(-5)\n            spectrum[iomega] *= np.exp(-5./4*param**(-4))\n            spectrum[iomega] *= (1. - 0.287*np.log(gamma))\n            spectrum[iomega] *= gamma**np.exp(-0.5*((param - 1.)/sigma)**2)\n\n    return spectrum\n\n\ndef noise_freq_1s(w):\n    \"\"\"\n    Generates a frequency representation of a white noise\n    \"\"\"\n    sigma = 1. #/np.sqrt(2)\n    nomega = w.shape[0]\n\n    wn = np.zeros((nomega, ), dtype=np.complex)\n    u1 = np.random.random(size=nomega) #+ 0j\n    u2 = np.random.random(size=nomega) #+ 0j\n    wn[0] = 0. + 0j\n    for iomega in range(1, nomega):\n        u1w = u1[iomega]\n        u2w = u2[iomega]\n        wn[iomega] = np.sqrt(-2.*np.log(u1w))*(np.cos(2*np.pi*u2w) +\n                             1j*np.sin(2*np.pi*u2w))\n    return wn*sigma\n\n\n@generator_interface.generator\nclass FloatingForces(generator_interface.BaseGenerator):\n    r\"\"\"\n    Floating forces generator\n\n    Generates the forces associated the floating support of offshore wind turbines.\n    Currently supports spar configurations.\n\n    The hydrostatic forces model includes buoyancy: an initial vertical force and the restoring forces\n    associated with heave, roll and pitch. See the implementation in [1].\n\n    The mooring model is the quasisteady implementation of Jonkman [2] .However, equation 2-37b is thought to be wrong (it is just a copy from eq 2-35b)\n    This was corrected according to the theory review of MAP++ [3].\n\n    The default values have been obtained from the OC3 platform report [1]\n\n    [1] Jonkman, J. Definition of the Floating System for Phase IV of OC3. 2010. NREL/TP-500-47535\n\n    [2] Jonkman, J. M. Dynamics modeling and loads analysis of an offshore floating wind turbine. 2007. NREL/TP-500-41958\n\n    [3] https://map-plus-plus.readthedocs.io/en/latest/theory.html (accessed on Octorber 14th, 2020)\n    \"\"\"\n    generator_id = 'FloatingForces'\n    generator_classification = 'runtime'\n\n    settings_types = dict()\n    settings_default = dict()\n    settings_description = dict()\n    settings_options = dict()\n\n    settings_types['n_time_steps'] = 'int'\n    settings_default['n_time_steps'] = None\n    settings_description['n_time_steps'] = 'Number of time steps'\n\n    settings_types['dt'] = 'float'\n    settings_default['dt'] = None\n    settings_description['dt'] = 'Time step'\n\n    settings_types['water_density'] = 'float'\n    settings_default['water_density'] = 1025 # kg/m3\n    settings_description['water_density'] = 'Water density'\n\n    settings_types['gravity_on'] = 'bool'\n    settings_default['gravity_on'] = True\n    settings_description['gravity_on'] = 'Flag to include gravitational forces'\n\n    settings_types['gravity'] = 'float'\n    settings_default['gravity'] = 9.81\n    settings_description['gravity'] = 'Gravity'\n\n    settings_types['gravity_dir'] = 'list(float)'\n    settings_default['gravity_dir'] = [1., 0., 0.]\n    settings_description['gravity_dir'] = 'Gravity direction'\n\n    settings_types['floating_file_name'] = 'str'\n    settings_default['floating_file_name'] = './oc3.floating.h5'\n    settings_description['floating_file_name'] = 'File containing the information about the floating dynamics'\n\n    settings_types['cd_multiplier'] = 'float'\n    settings_default['cd_multiplier'] = 1.\n    settings_description['cd_multiplier'] = 'Multiply the drag coefficient by this number to increase dissipation'\n\n    settings_types['add_damp_diag'] = 'list(float)'\n    settings_default['add_damp_diag'] = [0., 0., 0., 0., 0., 0.]\n    settings_description['add_damp_diag'] = 'Diagonal terms to include in the additional damping matrix'\n\n    settings_types['add_damp_ts'] = 'int'\n    settings_default['add_damp_ts'] = 0\n    settings_description['add_damp_ts'] = 'Timesteps in which ``add_damp_diag`` will be used'\n\n    settings_types['method_matrices_freq'] = 'str'\n    settings_default['method_matrices_freq'] = 'constant'\n    settings_description['method_matrices_freq'] = 'Method to compute frequency-dependent matrices'\n    settings_options['method_matrices_freq'] = ['constant', 'rational_function']\n\n    settings_types['matrices_freq'] = 'float'\n    settings_default['matrices_freq'] = 4.8 # Close to the upper limit defined in the oc3 report\n    settings_description['matrices_freq'] = 'Frequency [rad/s] to interpolate frequency-dependent matrices'\n\n    settings_types['steps_constant_matrices'] = 'int'\n    settings_default['steps_constant_matrices'] = 8\n    settings_description['steps_constant_matrices'] = 'Time steps to compute with constant matrices computed at ``matrices_freq``. Irrelevant in ``method_matrices_freq``=``constant``'\n\n    settings_types['added_mass_in_mass_matrix'] = 'bool'\n    settings_default['added_mass_in_mass_matrix'] = True\n    settings_description['added_mass_in_mass_matrix'] = 'Include the platform added mass in the mass matrix of the system'\n\n    settings_types['concentrate_spar'] = 'bool'\n    settings_default['concentrate_spar'] = False\n    settings_description['concentrate_spar'] = 'Compute CD as if the spar properties were concentrated at the base'\n\n    settings_types['method_wave'] = 'str'\n    settings_default['method_wave'] = 'sin'\n    settings_description['method_wave'] = 'Method to compute wave forces'\n    settings_options['method_wave'] = ['sin', 'jonswap']\n\n    settings_types['wave_amplitude'] = 'float'\n    settings_default['wave_amplitude'] = 0.\n    settings_description['wave_amplitude'] = 'Wave amplitude. Only used in ``method_wave = sin``'\n\n    settings_types['wave_freq'] = 'float'\n    settings_default['wave_freq'] = 0.\n    settings_description['wave_freq'] = 'Wave circular frequency [rad/s]. Only used in ``method_wave = sin``'\n\n    settings_types['wave_Tp'] = 'float'\n    settings_default['wave_Tp'] = 0.\n    settings_description['wave_Tp'] = 'Wave peak spectral period [s]. Only used in ``method_wave = jonswap``'\n\n    settings_types['wave_Hs'] = 'float'\n    settings_default['wave_Hs'] = 0.\n    settings_description['wave_Hs'] = 'Significant wave height [m]. Only used in ``method_wave = jonswap``'\n\n    settings_types['wave_incidence'] = 'float'\n    settings_default['wave_incidence'] = 0.\n    settings_description['wave_incidence'] = 'Wave incidence in rad'\n\n    settings_types['write_output'] = 'bool'\n    settings_default['write_output'] = False\n    settings_description['write_output'] = 'Write forces to an output file'\n\n    settings_types['folder'] = 'str'\n    settings_default['folder'] = 'output'\n    settings_description['folder'] = 'Folder for the output files'\n\n    settings_types['log_filename'] = 'str'\n    settings_default['log_filename'] = 'log_floating_forces'\n    settings_description['log_filename'] = 'Log file name to write outputs'\n\n    setting_table = settings.SettingsTable()\n    __doc__ += setting_table.generate(settings_types, settings_default, settings_description)\n\n    def __init__(self):\n        self.in_dict = dict()\n\n        self.water_density = None\n        self.gravity = None\n        self.gravity_dir = None\n\n        self.floating_data = None\n\n        self.mooring_node = None\n        self.n_mooring_lines = None\n        self.anchor_pos = None\n        self.fairlead_pos_A = None\n        self.hf_prev = list() # Previous value of hf just for initialisation\n        self.vf_prev = list()\n\n        self.buoyancy_node = None\n        self.buoy_F0 = None\n        self.buoy_rest_mat = None\n\n        self.wave_forces_node = None\n\n        self.q = None\n        self.qdot = None\n        self.qdotdot = None\n\n        self.log_filename = None\n        self.added_mass_in_mass_matrix = None\n\n\n    def initialise(self, in_dict=None, data=None, restart=False):\n        self.in_dict = in_dict\n        settings.to_custom_types(self.in_dict,\n                                 self.settings_types,\n                                 self.settings_default,\n                                 self.settings_options,\n                                 no_ctype=True)\n        self.settings = self.in_dict\n\n        self.water_density = self.settings['water_density']\n        self.gravity = self.settings['gravity']\n        self.gravity_dir = self.settings['gravity_dir']\n\n        # Platform dofs\n        if not restart:\n            self.q = np.zeros((self.settings['n_time_steps'] + 1, 6))\n            self.qdot = np.zeros_like(self.q)\n            self.qdotdot = np.zeros_like(self.q)\n        else:\n            increase_ts = self.settings['n_time_steps'] + 1 - self.q.shape[0]\n            self.q = np.concatenate((self.q, np.zeros((increase_ts, 6))), axis=0)\n            self.qdot = np.concatenate((self.qdot, np.zeros((increase_ts, 6))), axis=0)\n            self.qdotdot = np.concatenate((self.qdotdot, np.zeros((increase_ts, 6))), axis=0)\n\n        # Read the file with the floating information\n        fid = h5.File(self.settings['floating_file_name'], 'r')\n        self.floating_data = h5utils.load_h5_in_dict(fid)\n        fid.close()\n\n        # Mooringlines parameters\n        self.mooring_node = self.floating_data['mooring']['node']\n        self.n_mooring_lines = self.floating_data['mooring']['n_lines']\n        self.anchor_pos = np.zeros((self.n_mooring_lines, 3))\n        self.fairlead_pos_A = np.zeros((self.n_mooring_lines, 3))\n        if not restart:\n            self.hf_prev = [None]*self.n_mooring_lines\n            self.vf_prev = [None]*self.n_mooring_lines\n\n        if self.n_mooring_lines > 0:\n            theta = 2.*np.pi/self.n_mooring_lines\n            R = algebra.rotation3d_x(theta)\n            self.anchor_pos[0, 0] = -self.floating_data['mooring']['anchor_depth']\n            self.anchor_pos[0, 2] = self.floating_data['mooring']['anchor_radius']\n            self.fairlead_pos_A[0, 0] = -self.floating_data['mooring']['fairlead_depth']\n            self.fairlead_pos_A[0, 2] = self.floating_data['mooring']['fairlead_radius']\n            for imoor in range(1, self.n_mooring_lines):\n                self.anchor_pos[imoor, :] = np.dot(R, self.anchor_pos[imoor - 1, :])\n                self.fairlead_pos_A[imoor, :] = np.dot(R, self.fairlead_pos_A[imoor - 1, :])\n\n        # Hydrostatics\n        self.buoyancy_node = self.floating_data['hydrostatics']['node']\n        self.buoy_F0 = np.zeros((6,), dtype=float)\n        self.buoy_F0[0:3] = (self.floating_data['hydrostatics']['V0']*\n                              self.settings['water_density']*\n                              self.settings['gravity']*self.settings['gravity_dir'])\n        self.buoy_rest_mat = self.floating_data['hydrostatics']['buoyancy_restoring_matrix']\n\n        # hydrodynamics\n        self.cd = self.floating_data['hydrodynamics']['CD']*self.settings['cd_multiplier']\n        if self.settings['method_matrices_freq'] == 'constant':\n            interp_am = interp1d(self.floating_data['hydrodynamics']['ab_freq_rads'],\n                                 self.floating_data['hydrodynamics']['added_mass_matrix'],\n                                 axis=0)\n            self.hd_added_mass_const = interp_am(self.settings['matrices_freq'])\n            interp_d = interp1d(self.floating_data['hydrodynamics']['ab_freq_rads'],\n                               self.floating_data['hydrodynamics']['damping_matrix'],\n                               axis=0)\n            self.hd_damping_const = interp_d(self.settings['matrices_freq'])\n\n        elif self.settings['method_matrices_freq'] == 'rational_function':\n            self.hd_added_mass_const = self.floating_data['hydrodynamics']['added_mass_matrix'][-1, :, :]\n            self.hd_damping_const = self.floating_data['hydrodynamics']['damping_matrix'][-1, :, :]\n\n        self.added_mass_in_mass_matrix = self.settings['added_mass_in_mass_matrix']\n        if ((self.added_mass_in_mass_matrix) and (not restart)):\n            cout.cout_wrap((\"Including added mass in mass matrix\"), 2)\n            if data.structure.lumped_mass_mat is None:\n                data.structure.lumped_mass_mat_nodes = np.array([self.buoyancy_node])\n                data.structure.lumped_mass_mat = np.array([self.hd_added_mass_const])\n            else:\n                data.structure.lumped_mass_mat_nodes = np.concatenate((data.structure.lumped_mass_mat_nodes, np.array([self.buoyancy_node])), axis=0)\n                data.structure.lumped_mass_mat = np.concatenate((data.structure.lumped_mass_mat, np.array([self.hd_added_mass_const])), axis=0)\n\n            data.structure.add_lumped_mass_to_element(self.buoyancy_node,\n                                                      self.hd_added_mass_const)\n            data.structure.generate_fortran()\n\n        if self.settings['method_matrices_freq'] == 'rational_function':\n            ninput = 6\n            noutput = 6\n            hd_K_num = [None]*noutput\n            hd_K_den = [None]*noutput\n            for ioutput in range(noutput):\n                hd_K_num[ioutput] = [None]*ninput\n                hd_K_den[ioutput] = [None]*ninput\n                for iinput in range(ninput):\n                    pos = \"%d_%d\" % (ioutput, iinput)\n                    hd_K_num[ioutput][iinput] = self.floating_data['hydrodynamics']['K_rf'][pos]['num']\n                    hd_K_den[ioutput][iinput] = self.floating_data['hydrodynamics']['K_rf'][pos]['den']\n\n            self.hd_K = TransferFunction(hd_K_num, hd_K_den)\n            self.ab_freq_rads = self.floating_data['hydrodynamics']['ab_freq_rads']\n\n            if restart:\n                self.x0_K.extend([None]*increase_ts)\n            else:\n                self.x0_K = [None]*(self.settings['n_time_steps'] + 1)\n                self.x0_K[0] = 0.\n\n\n        # Wave forces\n        self.wave_forces_node = self.floating_data['wave_forces']['node']\n        if self.settings['method_wave'] == 'sin':\n            interp_x1 = interp1d(self.floating_data['wave_forces']['xi_freq_rads'],\n                                 self.floating_data['wave_forces']['xi'],\n                                 axis=0,\n                                 bounds_error=False,\n                                 fill_value=(self.floating_data['wave_forces']['xi'][0, ...],\n                                             self.floating_data['wave_forces']['xi'][-1, ...]))\n            xi_matrix2 = interp_x1(self.settings['wave_freq'])\n            interp_x2 = interp1d(self.floating_data['wave_forces']['xi_beta_deg']*deg2rad,\n                                 xi_matrix2,\n                                 axis=0)\n            self.xi_interp = interp_x2(self.settings['wave_incidence'])\n\n        elif self.settings['method_wave'] == 'jonswap':\n\n            interp_x1 = interp1d(self.floating_data['wave_forces']['xi_beta_deg']*deg2rad,\n                                 self.floating_data['wave_forces']['xi'],\n                                 axis=1)\n            xi_matrix = interp_x1(self.settings['wave_incidence'])\n\n            self.freq_wave_forces_variables(self.settings['wave_Tp'],\n                                       self.settings['wave_Hs'],\n                                       self.settings['dt'],\n                                       np.arange(self.settings['n_time_steps'] + 1)*self.settings['dt'],\n                                       xi_matrix,\n                                       self.floating_data['wave_forces']['xi_freq_rads'])\n\n        # Log file\n        if not os.path.exists(self.settings['folder']):\n            os.makedirs(self.settings['folder'])\n        folder = self.settings['folder'] + '/' + data.settings['SHARPy']['case'] + '/floatingforces/'\n        if not os.path.exists(folder):\n            os.makedirs(folder)\n        self.log_filename = folder + self.settings['log_filename'] + '.h5'\n\n\n    def write_output(self, ts, k, mooring, mooring_yaw, hydrostatic,\n                     hydrodynamic_qdot, hydrodynamic_qdotdot, hd_correct_grav, drag, waves):\n\n        output = dict()\n        output['ts'] = ts\n        output['k'] = k\n        output['q'] = self.q[ts, :]\n        output['qdot'] = self.qdot[ts, :]\n        output['qdotdot'] = self.qdotdot[ts, :]\n        output['mooring_forces'] = mooring\n        output['mooring_yaw'] = mooring_yaw\n        output['hydrostatic'] = hydrostatic\n        output['hydrodynamic_qdot'] = hydrodynamic_qdot\n        output['hydrodynamic_qdotdot'] = hydrodynamic_qdotdot\n        output['hydrodynamic_correct_grav'] = hd_correct_grav\n        output['drag'] = drag\n        output['waves'] = waves\n\n        fid = h5.File(self.log_filename, 'a')\n        group_name = \"ts%d_k%d\" % (ts, k)\n        if fid.__contains__(group_name):\n            del fid[group_name]\n        group = fid.create_group(group_name)\n        for key, value in output.items():\n            group.create_dataset(key, data=value)\n        fid.close()\n\n        debug_output = False\n        if debug_output:\n            print(\"q: \", self.q[ts, :])\n            print(\"qdot: \", self.qdot[ts, :])\n            print(\"qdotdot: \", self.qdotdot[ts, :])\n\n            print(\"mooring: \", mooring)\n            print(\"mooring_yaw: \", mooring_yaw)\n            print(\"hydrostatic: \", hydrostatic)\n            print(\"hydrodynamic_qdot: \", hydrodynamic_qdot)\n            print(\"hydrodynamic_qdotdot: \", hydrodynamic_qdotdot)\n            print(\"hydrodynamic_correct_grav: \", hd_correct_grav)\n            print(\"drag: \", drag)\n            print(\"waves: \", waves)\n\n        return\n\n\n    def update_dof_vector(self, beam, struct_tstep, it, k):\n\n        if True:\n            cga = struct_tstep.cga()\n            self.q[it, 0:3] = (np.dot(cga, struct_tstep.pos[self.buoyancy_node, :]) +\n                      struct_tstep.for_pos[0:3])\n            self.q[it, 3:6] = algebra.quat2euler(struct_tstep.quat)\n\n            self.qdot[it, 0:3] = np.dot(cga, struct_tstep.for_vel[0:3])\n            self.qdot[it, 3:6] = np.dot(cga, struct_tstep.for_vel[3:6])\n\n            self.qdotdot[it, 0:3] = np.dot(cga, struct_tstep.for_acc[0:3])\n            self.qdotdot[it, 3:6] = np.dot(cga, struct_tstep.for_acc[3:6])\n\n        else:\n            self.q[it, :] = self.q[it-1, :]\n            self.qdot[it, :] = self.qdot[it-1, :]\n            self.qdotdot[it, :] = self.qdotdot[it-1, :]\n\n        return\n\n\n    def freq_wave_forces_variables(self, Tp, Hs, dt, time, xi, w_xi):\n        \"\"\"\n        Compute the frequency arrays needed for wave forces\n        \"\"\"\n        # Compute time and frequency discretisations\n        ntime_steps = time.shape[0]\n\n        nomega = ntime_steps//2 + 1\n        w = np.zeros((nomega))\n        w_temp = np.fft.fftfreq(ntime_steps, d=dt)*2.*np.pi\n        w[:ntime_steps//2] = w_temp[:ntime_steps//2]\n        if ntime_steps%2 == 0:\n            w[-1] = -1*w_temp[ntime_steps//2]\n        else:\n            w[-1] = w_temp[ntime_steps//2]\n        nomega_2s = ntime_steps\n\n        # Compute the one-sided spectrums\n        noise_freq = noise_freq_1s(w)\n        jonswap_1s = jonswap_spectrum(Tp, Hs, w)*2.*np.pi\n        jonswap_freq = np.sqrt(2*ntime_steps/dt*jonswap_1s/2) + 0j\n        jonswap_freq[0] = np.sqrt(ntime_steps/dt*jonswap_1s[0]/2) + 0j # The DC values does not have the 2\n\n        self.noise_freq = noise_freq\n        self.jonswap_freq = jonswap_freq\n        self.omega = w\n        self.nomega_2s = nomega_2s\n\n        self.xi_interp = np.zeros((nomega, 6), dtype=np.complex)\n        for iomega in range(nomega):\n            for idim in range(6):\n                self.xi_interp[iomega, idim] = np.interp(self.omega[iomega], w_xi, xi[:, idim])\n\n\n    def time_wave_forces(self, dx, grav):\n        \"\"\"\n        Compute the time evolution of wave forces\n        \"\"\"\n\n        # Compute the two-sided spectrum\n        force_freq_2s = np.zeros((self.nomega_2s, 6), dtype=np.complex)\n        for idim in range(6):\n            for iomega in range(self.omega.shape[0]):\n                k = self.omega[iomega]**2/grav\n                force_freq_2s[iomega, idim] = (self.noise_freq[iomega]*\n                                               0.5*self.jonswap_freq[iomega]*\n                                               self.xi_interp[iomega, idim]*\n                                               np.exp(-1j*k*dx))\n                if not iomega == 0:\n                    if not ((iomega == self.omega.shape[0] - 1) and (self.nomega_2s%2 == 0)):\n                        force_freq_2s[-iomega, idim] = (np.conj(self.noise_freq[iomega])*\n                                                        0.5*self.jonswap_freq[iomega]*\n                                                        np.conj(self.xi_interp[iomega, idim])*\n                                                        np.exp(1j*k*dx))\n\n        # Compute the inverse Fourier transform\n        force_waves = ifft(force_freq_2s, axis=0)\n\n        return np.real(force_waves)\n\n\n    def generate(self, params):\n        # Renaming for convenience\n        data = params['data']\n        struct_tstep = params['struct_tstep']\n        aero_tstep = params['aero_tstep']\n        k = params['fsi_substep']\n\n        # Update dof vector\n        self.update_dof_vector(data.structure, struct_tstep, data.ts, k)\n\n        # Mooring lines\n        mooring_forces = np.zeros((self.n_mooring_lines, 2))\n        cga = struct_tstep.cga()\n        ielem, inode_in_elem = data.structure.node_master_elem[self.mooring_node]\n        cab = algebra.crv2rotation(struct_tstep.psi[ielem, inode_in_elem])\n        cbg = np.dot(cab.T, cga.T)\n\n        moor_force_out = 0.\n        moor_mom_out = 0.\n\n        for imoor in range(self.n_mooring_lines):\n            fairlead_pos_G = (np.dot(cga, self.fairlead_pos_A[imoor, :]) +\n                              struct_tstep.for_pos[0:3])\n            fl_to_anchor_G = self.anchor_pos[imoor, :] - fairlead_pos_G\n            xf = np.sqrt(fl_to_anchor_G[1]**2 + fl_to_anchor_G[2]**2)\n            zf = np.abs(fl_to_anchor_G[0])\n            hf, vf = quasisteady_mooring(xf,\n                                 zf,\n                                 self.floating_data['mooring']['unstretched_length'],\n                                 self.floating_data['mooring']['apparent_weight'],\n                                 self.floating_data['mooring']['EA'],\n                                 self.floating_data['mooring']['seabed_drag_coef'],\n                                 hf0=self.hf_prev[imoor],\n                                 vf0=self.vf_prev[imoor])\n            mooring_forces[imoor, :] = np.array([hf, vf])\n            # Save the results to initialise the computation in the next time step\n            self.hf_prev[imoor] = hf + 0.\n            self.vf_prev[imoor] = vf + 0.\n\n            # Convert to the adequate reference system\n            horizontal_unit_vec = algebra.unit_vector(fl_to_anchor_G)\n            horizontal_unit_vec[0] = 0.\n            horizontal_unit_vec = algebra.unit_vector(horizontal_unit_vec)\n            force_fl = hf*horizontal_unit_vec + vf*np.array([-1., 0., 0.])\n\n            # Move the forces to the mooring node\n            force_cl = np.zeros((6,))\n            force_cl[0:3] = force_fl\n            mooring_node_pos_G = (np.dot(cga, struct_tstep.pos[self.mooring_node, :]) +\n                              struct_tstep.for_pos[0:3])\n            r_fairlead_G = fairlead_pos_G - mooring_node_pos_G\n            force_cl[3:6] = np.cross(r_fairlead_G, force_fl)\n\n            struct_tstep.runtime_unsteady_forces[self.mooring_node, 0:3] += np.dot(cbg, force_cl[0:3])\n            struct_tstep.runtime_unsteady_forces[self.mooring_node, 3:6] += np.dot(cbg, force_cl[3:6])\n\n        # Yaw moment generated by the mooring system\n        yaw = np.array([self.q[data.ts, 3], 0., 0.])\n        mooring_yaw = -self.floating_data['mooring']['yaw_spring_stif']*yaw\n        struct_tstep.runtime_unsteady_forces[self.mooring_node, 3:6] += np.dot(cbg,\n                                                                      mooring_yaw)\n\n        # Hydrostatic model\n        ielem, inode_in_elem = data.structure.node_master_elem[self.buoyancy_node]\n        cab = algebra.crv2rotation(struct_tstep.psi[ielem, inode_in_elem])\n        cbg = np.dot(cab.T, cga.T)\n\n        hs_f_g = - np.dot(self.buoy_rest_mat, self.q[data.ts, :])\n\n        add_damp = self.floating_data['hydrodynamics']['additional_damping'].copy()\n        if data.ts < self.settings['add_damp_ts']:\n            add_damp += np.diag(self.settings['add_damp_diag'])\n        hd_f_qdot_g = -np.dot(add_damp, self.qdot[data.ts, :])\n\n        if ((self.settings['method_matrices_freq'] == 'constant') or\n             (data.ts < self.settings['steps_constant_matrices'])):\n            hd_f_qdot_g -= np.dot(self.hd_damping_const, self.qdot[data.ts, :])\n            hd_f_qdotdot_g = -np.dot(self.hd_added_mass_const, self.qdotdot[data.ts, :])\n\n        elif self.settings['method_matrices_freq'] == 'rational_function':\n            # Damping\n            (T, yout, xout) = forced_response(self.hd_K,\n                                              T=[0, self.settings['dt']],\n                                              U=self.qdot[data.ts-1:data.ts+1, :].T,\n                                              X0=self.x0_K[data.ts-1])\n                                              # transpose=True)\n            self.x0_K[data.ts] = xout[:, 1]\n            hd_f_qdot_g -= yout[:, 1]\n            hd_f_qdotdot_g = np.zeros((6))\n\n        else:\n            cout.cout_wrap((\"ERROR: Unknown method_matrices_freq %s\" % self.settings['method_matrices_freq']), 4)\n\n        # Correct gravity forces if needed\n        if self.added_mass_in_mass_matrix and self.settings['gravity_on']:\n            # Correct unreal gravity forces from added mass\n            gravity_b = np.zeros((6,),)\n            gravity_b[0:3] = np.dot(cbg, -self.settings['gravity_dir'])*self.settings['gravity']\n            hd_correct_grav = -np.dot(self.hd_added_mass_const, gravity_b)\n            struct_tstep.runtime_steady_forces[self.buoyancy_node, :] += hd_correct_grav\n        else:\n            hd_correct_grav = np.zeros((6))\n\n        struct_tstep.runtime_steady_forces[self.buoyancy_node, 0:3] += np.dot(cbg, self.buoy_F0[0:3] + hs_f_g[0:3])\n        struct_tstep.runtime_steady_forces[self.buoyancy_node, 3:6] += np.dot(cbg, self.buoy_F0[3:6] + hs_f_g[3:6])\n        struct_tstep.runtime_unsteady_forces[self.buoyancy_node, 0:3] += np.dot(cbg, hd_f_qdot_g[0:3] + hd_f_qdotdot_g[0:3])\n        struct_tstep.runtime_unsteady_forces[self.buoyancy_node, 3:6] += np.dot(cbg, hd_f_qdot_g[3:6] + hd_f_qdotdot_g[3:6])\n\n        # Nonlinear drag coefficeint\n        if self.settings['concentrate_spar']:\n            spar_node_pos = np.zeros((100, 3)) + struct_tstep.pos[self.floating_data['hydrodynamics']['CD_node'], :]\n            spar_node_pos[:, 0] += np.linspace(-self.floating_data['hydrodynamics']['CD_spar_length'], 0, 100)\n            spar_node_pos_dot = np.zeros((100, 3))\n        else:\n            spar_node_pos = struct_tstep.pos[self.floating_data['hydrodynamics']['CD_first_node'] : self.floating_data['hydrodynamics']['CD_last_node'] + 1, :]\n            spar_node_pos_dot = struct_tstep.pos_dot[self.floating_data['hydrodynamics']['CD_first_node'] : self.floating_data['hydrodynamics']['CD_last_node'] + 1, :]\n\n        total_drag_force = np.zeros((6))\n        for inode in range(len(spar_node_pos)):\n\n            if self.settings['concentrate_spar']:\n                ielem, inode_in_elem = data.structure.node_master_elem[self.floating_data['hydrodynamics']['CD_node']]\n            else:\n                ielem, inode_in_elem = data.structure.node_master_elem[inode + self.floating_data['hydrodynamics']['CD_first_node']]\n            cab = algebra.crv2rotation(struct_tstep.psi[ielem, inode_in_elem])\n            cbg = np.dot(cab.T, cga.T)\n\n            if inode == 0:\n                delta_x = 0.5*np.linalg.norm(spar_node_pos[1, :] - spar_node_pos[0, :])\n            elif inode == len(spar_node_pos) - 1:\n                delta_x = 0.5*np.linalg.norm(spar_node_pos[inode, :] - spar_node_pos[inode - 1, :])\n            else:\n                delta_x = 0.5*np.linalg.norm(spar_node_pos[inode + 1, :] - spar_node_pos[inode - 1, :])\n\n            vel_a = (struct_tstep.for_vel[0:3] +\n                     np.cross(struct_tstep.for_vel[3:6], spar_node_pos[inode, :]) +\n                     spar_node_pos_dot[inode, :])\n\n            # Remove velocity along the x axis\n            vel_b = np.dot(cab.T, vel_a)\n            vel_b[0] = 0.\n            vel_g = np.dot(cbg.T, vel_b)\n\n            drag_force = (-0.5*self.water_density*np.linalg.norm(vel_g)*vel_g*delta_x*\n                          self.floating_data['hydrodynamics']['spar_diameter']*\n                          self.cd)\n\n            if self.settings['concentrate_spar']:\n                r = spar_node_pos[inode, :] - struct_tstep.pos[self.floating_data['hydrodynamics']['CD_node'], :]\n            else:\n                r = spar_node_pos[inode, :] - struct_tstep.pos[self.floating_data['hydrostatics']['node'], :]\n            drag_moment = np.cross(r, drag_force)\n            total_drag_force[0:3] += drag_force\n            total_drag_force[3:6] += drag_moment\n            if self.settings['concentrate_spar']:\n                struct_tstep.runtime_unsteady_forces[self.floating_data['hydrodynamics']['CD_node'], 0:3] += np.dot(cbg, drag_force)\n                struct_tstep.runtime_unsteady_forces[self.floating_data['hydrodynamics']['CD_node'], 3:6] += np.dot(cbg, drag_moment)\n            else:\n                struct_tstep.runtime_unsteady_forces[inode + self.floating_data['hydrodynamics']['CD_first_node'], 0:3] += np.dot(cbg, drag_force)\n\n        # Wave loading\n        ielem, inode_in_elem = data.structure.node_master_elem[self.wave_forces_node]\n        cab = algebra.crv2rotation(struct_tstep.psi[ielem, inode_in_elem])\n        cbg = np.dot(cab.T, cga.T)\n\n        wave_node_pos = struct_tstep.for_pos[0:3] + np.dot(cga, struct_tstep.pos[self.wave_forces_node, :])\n        dx = (wave_node_pos[1]*np.sin(self.settings['wave_incidence']) +\n              wave_node_pos[2]*np.cos(self.settings['wave_incidence']))\n        wave_forces_g = np.zeros((6))\n        if self.settings['method_wave'] == 'sin':\n            phase = (self.settings['wave_freq']*data.ts*self.settings['dt'] +\n                     dx*self.settings['wave_freq']**2/self.settings['gravity'])\n            for idim in range(6):\n                wave_forces_g[idim] = np.real(self.settings['wave_amplitude']*self.xi_interp[idim]*(np.cos(phase) + 1j*np.sin(phase)))\n        elif self.settings['method_wave'] == 'jonswap':\n            wave_forces_g = self.time_wave_forces(dx, self.settings['gravity'])[data.ts, :]\n\n        struct_tstep.runtime_unsteady_forces[self.wave_forces_node, 0:3] += np.dot(cbg, wave_forces_g[0:3])\n        struct_tstep.runtime_unsteady_forces[self.wave_forces_node, 3:6] += np.dot(cbg, wave_forces_g[3:6])\n\n        # Write output\n        if self.settings['write_output']:\n            self.write_output(data.ts, k, mooring_forces, mooring_yaw, hs_f_g,\n                     hd_f_qdot_g, hd_f_qdotdot_g, hd_correct_grav, total_drag_force, wave_forces_g)\n"
  },
  {
    "path": "sharpy/generators/gridbox.py",
    "content": "import numpy as np\n\nimport sharpy.utils.generator_interface as generator_interface\nimport sharpy.utils.settings as settings\nimport numpy as np\nimport ctypes as ct\nimport copy\n\n\n@generator_interface.generator\nclass GridBox(generator_interface.BaseGenerator):\n    \"\"\"\n    GridBox\n\n    Generatex a grid within a box to be used to generate the flow field during the postprocessing\n\n    \"\"\"\n    generator_id = 'GridBox'\n    generator_classification = 'utils'\n\n    settings_types = dict()\n    settings_default = dict()\n    settings_description = dict()\n\n    settings_types['coords_0'] = 'list(float)'\n    settings_default['coords_0'] = [0., 0., 0.]\n    settings_description['coords_0'] = 'First bounding box corner'\n\n    settings_types['coords_1'] = 'list(float)'\n    settings_default['coords_1'] = [10., 0., 10.]\n    settings_description['coords_1'] = 'Second bounding box corner'\n\n    settings_types['spacing'] = 'list(float)'\n    settings_default['spacing'] = [1., 1., 1.]\n    settings_description['spacing'] = 'Spacing parameters of the bbox'\n\n    settings_types['moving'] = 'bool'\n    settings_default['moving'] = False\n    settings_description['moving'] = 'If ``True``, the box moves with the body frame of reference. It does not rotate with it, though'\n\n    settings_table = settings.SettingsTable()\n    __doc__ += settings_table.generate(settings_types, settings_default, settings_description)\n\n    def __init__(self):\n        self.in_dict = dict()\n        self.settings = None\n\n    def initialise(self, in_dict, restart=False):\n        self.in_dict = in_dict\n        settings.to_custom_types(self.in_dict, self.settings_types, self.settings_default)\n        self.settings = copy.deepcopy(self.in_dict)\n\n        self.x0 = self.in_dict['coords_0'][0]\n        self.y0 = self.in_dict['coords_0'][1]\n        self.z0 = self.in_dict['coords_0'][2]\n        self.x1 = self.in_dict['coords_1'][0]\n        self.y1 = self.in_dict['coords_1'][1]\n        self.z1 = self.in_dict['coords_1'][2]\n        self.dx = self.in_dict['spacing'][0]\n        self.dy = self.in_dict['spacing'][1]\n        self.dz = self.in_dict['spacing'][2]\n\n    def generate(self, params):\n        if self.settings['moving']:\n            for_pos = params['for_pos']\n        else:\n            for_pos = np.zeros((3,))\n        nx = np.abs(int((self.x1-self.x0)/self.dx + 1))\n        ny = np.abs(int((self.y1-self.y0)/self.dy + 1))\n        nz = np.abs(int((self.z1-self.z0)/self.dz + 1))\n\n        xarray = np.linspace(self.x0, self.x1, nx) + for_pos[0]\n        yarray = np.linspace(self.y0, self.y1, ny) + for_pos[1]\n        zarray = np.linspace(self.z0, self.z1, nz) + for_pos[2]\n        grid = []\n        for iz in range(nz):\n            grid.append(np.zeros((3, nx, ny), dtype=ct.c_double))\n            for ix in range(nx):\n                for iy in range(ny):\n                    grid[iz][0, ix, iy] = xarray[ix]\n                    grid[iz][1, ix, iy] = yarray[iy]\n                    grid[iz][2, ix, iy] = zarray[iz]\n\n        from tvtk.api import tvtk\n        vtk_info = tvtk.RectilinearGrid()\n        vtk_info.dimensions = np.array([nx, ny, nz], dtype=int)\n        vtk_info.x_coordinates = xarray\n        vtk_info.y_coordinates = yarray\n        vtk_info.z_coordinates = zarray\n\n        return vtk_info, grid\n"
  },
  {
    "path": "sharpy/generators/gustvelocityfield.py",
    "content": "\"\"\"Gust Velocity Field Generators\n\nThese generators are used to create a gust velocity field. :class:`.GustVelocityField` is the main class that should be\nparsed as the ``velocity_field_input`` to the desired aerodynamic solver.\n\nThe remaining classes are the specific gust profiles and parsed as ``gust_shape``.\n\nExamples:\n    The typical input to the aerodynamic solver settings would therefore read similar to:\n\n    >>> aero_settings = {'<some_aero_settings>': '<some_aero_settings>',\n    >>>                  'velocity_field_generator': 'GustVelocityField',\n    >>>                  'velocity_field_input': {'u_inf': 1,\n    >>>                                           'gust_shape': '<desired_gust>',\n    >>>                                           'gust_parameters': '<gust_settings>'}}\n\n\"\"\"\nimport numpy as np\nfrom abc import ABCMeta\nimport sharpy.utils.generator_interface as generator_interface\nimport sharpy.utils.settings as settings\nfrom scipy.interpolate import interp1d\n\ndict_of_gusts = {}\n\ndoc_settings_description = 'The ``GustVelocityField`` generator takes the following settings as a dictionary assigned' \\\n                           'to ``gust_parameters``.'\n\n\ndef gust(arg):\n    global dict_of_gusts\n    try:\n        arg.gust_id\n    except AttributeError:\n        raise AttributeError('Class defined as gust has no gust_id attribute')\n    dict_of_gusts[arg.gust_id] = arg\n    return arg\n\n\n# @gust\nclass BaseGust(metaclass=ABCMeta):\n\n    settings_types = dict()\n    settings_default = dict()\n    settings_description = dict()\n\n    def __init__(self):\n        self.settings = dict()\n        self._u_inf = None\n        self._u_inf_direction = None\n\n    @property\n    def u_inf(self):\n        return self._u_inf\n\n    @u_inf.setter\n    def u_inf(self, value):\n        self._u_inf = value\n\n    @property\n    def u_inf_direction(self):\n        return self._u_inf_direction\n\n    @u_inf_direction.setter\n    def u_inf_direction(self, value):\n        self._u_inf_direction = value\n\n\n@gust\nclass one_minus_cos(BaseGust):\n    r\"\"\"\n    One minus cos gust (single bump)\n\n        .. math:: U_z = \\frac{u_{de}}{2}\\left[1-\\cos\\left(\\frac{2\\pi x}{S}\\right)\\right]\n\n    This gust can be used by using the setting ``gust_shape = '1-cos'`` in :class:`.GustVelocityField`.\n    \"\"\"\n    gust_id = '1-cos'\n\n    settings_types = dict()\n    settings_default = dict()\n    settings_description = dict()\n\n    settings_types['gust_length'] = 'float'\n    settings_default['gust_length'] = 0.0\n    settings_description['gust_length'] = 'Length of gust, :math:`S`.'\n\n    settings_types['gust_intensity'] = 'float'\n    settings_default['gust_intensity'] = 0.0\n    settings_description['gust_intensity'] = 'Intensity of the gust :math:`u_{de}`.'\n\n    settings_types['gust_component'] = 'int'\n    settings_default['gust_component'] = 2\n    settings_description['gust_component'] = 'Component of the gust velocity in the G-frame (x,y,z)->(0,1,2).'\n\n    setting_table = settings.SettingsTable()\n    __doc__ += setting_table.generate(settings_types, settings_default, settings_description,\n                                      header_line=doc_settings_description)\n\n    def initialise(self, in_dict, restart=False):\n        self.settings = in_dict\n        settings.to_custom_types(self.settings, self.settings_types, self.settings_default)\n\n    def gust_shape(self, x, y, z, time=0):\n        gust_length = self.settings['gust_length']\n        gust_intensity = self.settings['gust_intensity']\n\n        vel = np.zeros((3,))\n        if x > 0.0 or x < -gust_length:\n            return vel\n\n        vel[self.settings['gust_component']] = (1.0 - np.cos(2.0 * np.pi * x / gust_length)) * gust_intensity * 0.5\n        return vel\n\n\n@gust\nclass DARPA(BaseGust):\n    r\"\"\"\n    Discrete, non-uniform span model\n\n    .. math:: U_z = \\frac{u_{de}}{2}\\left[1-\\cos\\left(\\frac{2\\pi x}{S}\\right)\\right]\\cos\\left(\\frac{\\pi y}{b}\\right)\n\n    This gust can be used by using the setting ``gust_shape = 'DARPA'`` in :class:`.GustVelocityField`.\n    \"\"\"\n    gust_id = 'DARPA'\n\n    settings_types = dict()\n    settings_default = dict()\n    settings_description = dict()\n\n    settings_types['gust_length'] = 'float'\n    settings_default['gust_length'] = 0.0\n    settings_description['gust_length'] = 'Length of gust'\n\n    settings_types['gust_intensity'] = 'float'\n    settings_default['gust_intensity'] = 0.0\n    settings_description['gust_intensity'] = 'Intensity of the gust'\n\n    settings_types['span'] = 'float'\n    settings_default['span'] = 0.\n    settings_description['span'] = 'Wing span'\n\n    settings_types['gust_component'] = 'int'\n    settings_default['gust_component'] = 2\n    settings_description['gust_component'] = 'Component of the gust velocity in the G-frame (x,y,z)->(0,1,2).'\n\n    setting_table = settings.SettingsTable()\n    __doc__ += setting_table.generate(settings_types, settings_default, settings_description,\n                                      header_line=doc_settings_description)\n\n    def initialise(self, in_dict, restart=False):\n        self.settings = in_dict\n        settings.to_custom_types(self.settings, self.settings_types, self.settings_default)\n\n    def gust_shape(self, x, y, z, time=0):\n        gust_length = self.settings['gust_length']\n        gust_intensity = self.settings['gust_intensity']\n        span = self.settings['span']\n\n        vel = np.zeros((3,))\n        if x > 0.0 or x < -gust_length:\n            return vel\n\n        vel[self.settings['gust_component']] = (1.0 - np.cos(2.0 * np.pi * x / gust_length)) * gust_intensity * 0.5\n        vel[self.settings['gust_component']] *= -np.cos(y / span * np.pi)\n        return vel\n\n\n@gust\nclass continuous_sin(BaseGust):\n    r\"\"\"\n    Continuous sinusoidal gust model\n\n    .. math:: U_z = \\frac{u_{de}}{2}\\sin\\left(\\frac{2\\pi x}{S}\\right)\n\n    This gust can be used by using the setting ``gust_shape = 'continuous_sin'`` in :class:`GustVelocityField`.\n    \"\"\"\n    gust_id = 'continuous_sin'\n\n    settings_types = dict()\n    settings_default = dict()\n    settings_description = dict()\n\n    settings_types['gust_length'] = 'float'\n    settings_default['gust_length'] = 0.0\n    settings_description['gust_length'] = 'Length of gust'\n\n    settings_types['gust_intensity'] = 'float'\n    settings_default['gust_intensity'] = 0.0\n    settings_description['gust_intensity'] = 'Intensity of the gust'\n\n    settings_types['gust_component'] = 'int'\n    settings_default['gust_component'] = 2\n    settings_description['gust_component'] = 'Component of the gust velocity in the G-frame (x,y,z)->(0,1,2).'\n\n    setting_table = settings.SettingsTable()\n    __doc__ += setting_table.generate(settings_types, settings_default, settings_description,\n                                      header_line=doc_settings_description)\n\n    def initialise(self, in_dict, restart=False):\n        self.settings = in_dict\n        settings.to_custom_types(self.settings, self.settings_types, self.settings_default)\n\n    def gust_shape(self, x, y, z, time=0):\n        gust_length = self.settings['gust_length']\n        gust_intensity = self.settings['gust_intensity']\n\n        vel = np.zeros((3,))\n        if x > 0.0:\n            return vel\n\n        vel[self.settings['gust_component']] = 0.5 * gust_intensity * np.sin(2 * np.pi * x / gust_length)\n        return vel\n\n\n@gust\nclass time_varying_global(BaseGust):\n    r\"\"\"\n    Similar to the previous one but the velocity changes instanteneously in the whole flow field. It is not fed\n    into the solid.\n\n    This gust can be used by using the setting ``gust_shape = 'time varying global'`` in :class:`GustVelocityField`.\n    \"\"\"\n    gust_id = 'time varying global'\n\n    settings_types = dict()\n    settings_default = dict()\n    settings_description = dict()\n\n    settings_types['file'] = 'str'\n    settings_default['file'] = ''\n    settings_description['file'] = 'File with the information (only for time varying)'\n\n    settings_types['gust_component'] = ['list(int)', 'int']\n    settings_default['gust_component'] = [0, 1, 2]\n    settings_description['gust_component'] = 'Component of the gust velocity in the G-frame to be considered (x,y,z)->(0,1,2).'\n\n    setting_table = settings.SettingsTable()\n    __doc__ += setting_table.generate(settings_types, settings_default, settings_description,\n                                      header_line=doc_settings_description)\n\n    def __init__(self):\n        super().__init__()\n        self.file_info = None\n        self.list_interpolated_velocity_field_functions = []\n\n    def initialise(self, in_dict, restart=False):\n        self.settings = in_dict\n        settings.to_custom_types(self.settings, self.settings_types, self.settings_default)\n\n        self.file_info = np.loadtxt(self.settings['file'])\n        self.initialise_interpolation_functions()\n    \n    def initialise_interpolation_functions(self):\n        for idim in self.settings['gust_component']:\n            self.list_interpolated_velocity_field_functions.append(interp1d(self.file_info[:, 0], self.file_info[:, idim+1], \n                                                                            bounds_error=False,fill_value=\"extrapolate\"))\n\n    def gust_shape(self, x, y, z, time=0):\n        vel = np.zeros((3,))\n        for counter, idim in enumerate(self.settings['gust_component']):\n            vel[idim] = self.list_interpolated_velocity_field_functions[counter](time)\n        return vel\n\n\n@gust\nclass time_varying(time_varying_global):\n    r\"\"\"\n    The inflow velocity changes with time but it is uniform in space. It is read from a 4 column file:\n\n    .. math:: time[s] \\Delta U_x \\Delta U_y \\Delta U_z\n\n    This gust can be used by using the setting ``gust_shape = 'time varying'`` in :class:.`GustVelocityField`.\n    \"\"\"\n    gust_id = 'time varying'\n    \n    def initialise_interpolation_functions(self):\n        for idim in self.settings['gust_component']:\n            self.list_interpolated_velocity_field_functions.append(interp1d(-self.file_info[::-1, 0] * self.u_inf, self.file_info[::-1, idim+1], \n                                                                            bounds_error=False,fill_value=\"extrapolate\"))\n\n    def gust_shape(self, x, y, z, time=0):\n        vel = np.zeros((3,))\n        d = np.dot(np.array([x, y, z]), self.u_inf_direction)\n        if d <= 0.0:       \n            for counter, idim in enumerate(self.settings['gust_component']):\n                vel[idim] = self.list_interpolated_velocity_field_functions[counter](d)\n        return vel\n       \n@gust\nclass span_sine(BaseGust):\n    r\"\"\"\n    This gust can be used by using the setting ``gust_shape = 'span sine'`` in :class:`GustVelocityField`.\n    \"\"\"\n    gust_id = 'span sine'\n\n    settings_types = dict()\n    settings_default = dict()\n    settings_description = dict()\n\n    settings_types['gust_intensity'] = 'float'\n    settings_default['gust_intensity'] = 0.0\n    settings_description['gust_intensity'] = 'Intensity of the gust'\n\n    settings_types['span'] = 'float'\n    settings_default['span'] = 0.\n    settings_description['span'] = 'Wing span'\n\n    settings_types['periods_per_span'] = 'int'\n    settings_default['periods_per_span'] = 1\n    settings_description['periods_per_span'] = 'Number of times that the sine is repeated in the span of the wing'\n\n    settings_types['perturbation_dir'] = 'list(float)'\n    settings_default['perturbation_dir'] = np.array([0, 0, 1.])\n    settings_description['perturbation_dir'] = 'Direction in which the perturbation will be applied in A FoR'\n\n    settings_types['span_dir'] = 'list(float)'\n    settings_default['span_dir'] = np.array([0, 1., 0])\n    settings_description['span_dir'] = 'Direction of the span of the wing'\n\n    settings_types['span_with_gust'] = 'float'\n    settings_default['span_with_gust'] = 0.\n    settings_description['span_with_gust'] = 'Extension of the span to which the gust will be applied'\n\n    setting_table = settings.SettingsTable()\n    __doc__ += setting_table.generate(settings_types, settings_default, settings_description,\n                                      header_line=doc_settings_description)\n\n    def initialise(self, in_dict, restart=False):\n        self.settings = in_dict\n        settings.to_custom_types(self.settings, self.settings_types, self.settings_default)\n\n        if self.settings['span_with_gust'] == 0:\n            self.settings['span_with_gust'] = self.settings['span']\n\n    def gust_shape(self, x, y, z, time=0):\n        d = np.dot(np.array([x, y, z]), self.settings['span_dir'])\n        if np.abs(d) <= self.settings['span_with_gust'] / 2:\n            vel = 0.5 * self.settings['gust_intensity'] * np.sin(\n                d * 2. * np.pi / (self.settings['span'] / self.settings['periods_per_span']))\n        else:\n            vel = np.zeros((3,))\n\n        return vel * self.settings['perturbation_dir']\n\n\n@generator_interface.generator\nclass GustVelocityField(generator_interface.BaseGenerator):\n    r\"\"\"\n    Gust Velocity Field Generator\n\n    ``GustVelocityField`` is a class inherited from ``BaseGenerator``\n\n    The ``GustVelocityField`` class generates a gust profile velocity field, and the profile has the characteristics\n    specified by the user.\n\n    To call this generator, the ``generator_id = GustVelocityField`` shall be used.\n    This is parsed as the value for the ``velocity_field_generator`` key in the desired aerodynamic solver's settings.\n\n    Notation: :math:`u_{de}` is the gust intensity, :math:`S` is the gust length and :math:`b` is the wing span.\n    :math:`x` and :math:`y` refer to the chordwise and spanwise distance penetrated into the gust, respectively.\n\n    Several gust profiles are available. Your chosen gust profile should be parsed to ``gust_shape`` and the\n    corresponding settings as a dictionary to ``gust_parameters``.\n\n    \"\"\"\n    generator_id = 'GustVelocityField'\n    generator_classification = 'velocity-field'\n\n    settings_types = dict()\n    settings_default = dict()\n    settings_description = dict()\n\n    settings_types['u_inf'] = 'float'\n    settings_default['u_inf'] = None\n    settings_description['u_inf'] = 'Free stream velocity'\n\n    settings_types['u_inf_direction'] = 'list(float)'\n    settings_default['u_inf_direction'] = [1., 0., 0.]\n    settings_description['u_inf_direction'] = 'Free stream velocity relative component'\n\n    settings_types['offset'] = 'float'\n    settings_default['offset'] = 0.0\n    settings_description['offset'] = 'Spatial offset of the gust with respect to origin'\n\n    settings_types['relative_motion'] = 'bool'\n    settings_default['relative_motion'] = False\n    settings_description['relative_motion'] = 'If true, the gust is convected with u_inf'\n\n    settings_types['gust_shape'] = 'str'\n    settings_default['gust_shape'] = None\n    settings_description['gust_shape'] = 'Gust profile shape'\n\n    settings_types['gust_parameters'] = 'dict'\n    settings_default['gust_parameters'] = dict()\n    settings_description['gust_parameters'] = 'Dictionary of parameters specific of the gust_shape selected'\n\n    setting_table = settings.SettingsTable()\n    __doc__ += setting_table.generate(settings_types, settings_default, settings_description,\n                                      header_line='This generator takes the following settings')\n\n    def __init__(self):\n\n        self.settings = dict()\n        self.gust = None\n        self.u_inf = None\n        self.u_inf_direction = None\n\n        self.implemented_gusts = dict_of_gusts\n\n    def initialise(self, in_dict, restart=False):\n        self.settings = in_dict\n        settings.to_custom_types(self.settings, self.settings_types, self.settings_default)\n\n        # check that the gust type is valid\n        if not (self.settings['gust_shape'] in self.implemented_gusts):\n            raise AttributeError('The gust shape ' + self.settings['gust_shape'] + ' is not implemented')\n\n        self.gust = dict_of_gusts[self.settings['gust_shape']]()\n\n        self.u_inf = self.settings['u_inf']\n        self.u_inf_direction = self.settings['u_inf_direction']\n\n        # set gust properties\n        self.gust.u_inf = self.u_inf\n        self.gust.u_inf_direction = self.u_inf_direction\n\n        self.gust.initialise(self.settings['gust_parameters'], restart=restart)\n\n    def generate(self, params, uext):\n        zeta = params['zeta']\n        override = params['override']\n        if self.settings['gust_shape'] == 'span sine':\n            ts = 0\n            t = 0\n            dt = 0\n        else:\n            ts = params['ts']\n            t = params['t']\n            dt = params['dt']\n\n        for_pos = params['for_pos'][0:3]\n\n        for i_surf in range(len(zeta)):\n            if override:\n                uext[i_surf].fill(0.0)\n\n            for i in range(zeta[i_surf].shape[1]):\n                for j in range(zeta[i_surf].shape[2]):\n                    total_offset_val = self.settings['offset']\n                    if self.settings['relative_motion']:\n                        uext[i_surf][:, i, j] += self.settings['u_inf'] * self.settings['u_inf_direction']\n                        total_offset_val -= self.settings['u_inf'] * t\n\n                    total_offset = total_offset_val * self.settings['u_inf_direction'] + for_pos\n                    uext[i_surf][:, i, j] += self.gust.gust_shape(\n                        zeta[i_surf][0, i, j] + total_offset[0],\n                        zeta[i_surf][1, i, j] + total_offset[1],\n                        zeta[i_surf][2, i, j] + total_offset[2],\n                        t\n                    )\n"
  },
  {
    "path": "sharpy/generators/helicoidalwake.py",
    "content": "import numpy as np\n\nimport sharpy.utils.generator_interface as generator_interface\nimport sharpy.utils.settings as settings\nimport sharpy.utils.algebra as algebra\n\n\n@generator_interface.generator\nclass HelicoidalWake(generator_interface.BaseGenerator):\n    r\"\"\"\n    Helicoidal wake shape generator\n\n    ``HelicoidalWake`` class inherited from ``BaseGenerator``\n\n    The object creates a helicoidal wake shedding from the trailing edge based on\n    the time step ``dt``, the incoming velocity magnitude ``u_inf``,\n    direction ``u_inf_direction``, the rotation velocity ``rotation_velocity`` and\n    the shear parameters\n    \"\"\"\n    generator_id = 'HelicoidalWake'\n    generator_classification = 'wake'\n\n    settings_types = dict()\n    settings_default = dict()\n    settings_description = dict()\n\n    settings_types['u_inf'] = 'float'\n    settings_default['u_inf'] = None\n    settings_description['u_inf'] = 'Free stream velocity magnitude'\n\n    settings_types['u_inf_direction'] = 'list(float)'\n    settings_default['u_inf_direction'] = None\n    settings_description['u_inf_direction'] = '``x``, ``y`` and ``z`` relative components of the free stream velocity'\n\n    settings_types['dt'] = 'float'\n    settings_default['dt'] = None\n    settings_description['dt'] = 'Time step'\n\n    settings_types['dphi1'] = 'float'\n    settings_default['dphi1'] = -1.0\n    settings_description['dphi1'] = 'Size of the first wake panel in radians'\n\n    settings_types['ndphi1'] = 'int'\n    settings_default['ndphi1'] = 1\n    settings_description['ndphi1'] = 'Number of panels with size ``dphi1``'\n\n    settings_types['r'] = 'float'\n    settings_default['r'] = 1.\n    settings_description['r'] = 'Growth rate after ``ndphi1`` panels'\n\n    settings_types['dphimax'] = 'float'\n    settings_default['dphimax'] = -1.0\n    settings_description['dphimax'] = 'Maximum panel size in radians'\n\n    # Shear parameters\n    settings_types['shear_direction'] = 'list(float)'\n    settings_default['shear_direction'] = np.array([1.0, 0, 0])\n    settings_description['shear_direction'] = '``x``, ``y`` and ``z`` relative components of the direction along which shear applies'\n\n    settings_types['shear_exp'] = 'float'\n    settings_default['shear_exp'] = 0.\n    settings_description['shear_exp'] = 'Exponent of the shear law'\n\n    settings_types['h_ref'] = 'float'\n    settings_default['h_ref'] = 1.\n    settings_description['h_ref'] = 'Reference height at which ``u_inf`` is defined'\n\n    settings_types['h_corr'] = 'float'\n    settings_default['h_corr'] = 1.\n    settings_description['h_corr'] = 'Height to correct the shear law'\n\n    # Rotation\n    settings_types['rotation_velocity'] = 'list(float)'\n    settings_default['rotation_velocity'] = None\n    settings_description['rotation_velocity'] = 'Rotation velocity'\n\n    setting_table = settings.SettingsTable()\n    __doc__ += setting_table.generate(settings_types, settings_default, settings_description)\n\n    def __init__(self):\n        self.in_dict = dict()\n\n        self.u_inf = 0.\n        self.u_inf_direction = None\n        self.rotation_velocity = None\n        self.dt = None\n\n        self.dphi1 = None\n        self.ndphi1 = None\n        self.r = None\n        self.dphimax = None\n\n        self.shear_direction = None\n        self.shear_exp = None\n        self.h_ref = None\n        self.h_corr = None\n\n    def initialise(self, data, in_dict, restart=False):\n        self.in_dict = in_dict\n        settings.to_custom_types(self.in_dict, self.settings_types, self.settings_default,  no_ctype=True)\n\n        self.u_inf = self.in_dict['u_inf']\n        self.u_inf_direction = self.in_dict['u_inf_direction']\n        self.rotation_velocity = self.in_dict['rotation_velocity']\n        self.dt = self.in_dict['dt']\n\n        if self.in_dict['dphi1'] == -1:\n            self.dphi1 = np.linalg.norm(self.rotation_velocity)*self.dt\n        else:\n            self.dphi1 = self.in_dict['dphi1']\n\n        self.ndphi1 = self.in_dict['ndphi1']\n        self.r = self.in_dict['r']\n\n        if self.in_dict['dphimax'] == -1:\n            self.dphimax = self.dphi1\n        else:\n            self.dphimax = self.in_dict['dphimax']\n\n        self.shear_direction = self.in_dict['shear_direction']\n        self.shear_exp = self.in_dict['shear_exp']\n        self.h_ref = self.in_dict['h_ref']\n        self.h_corr = self.in_dict['h_corr']\n\n\n    def generate(self, params):\n        # Renaming for convenience\n        zeta = params['zeta']\n        zeta_star = params['zeta_star']\n        gamma = params['gamma']\n        gamma_star = params['gamma_star']\n        dist_to_orig = params['dist_to_orig']\n\n        nsurf = len(zeta)\n        for isurf in range(nsurf):\n            M, N = zeta_star[isurf][0, :, :].shape\n            angle = 0.\n            for i in range(M):\n                # Compute the step in azimuthal angle\n                angle -= self.get_dphi(i, self.dphi1, self.ndphi1, self.r, self.dphimax)\n\n                delta_t = -angle/np.linalg.norm(self.rotation_velocity)\n                rot = algebra.rotation_matrix_around_axis(algebra.unit_vector(self.rotation_velocity), angle)\n                for j in range(N):\n                    # Define the helicoidal\n                    aux_zeta_TE = zeta[isurf][:, -1, j] - (self.h_ref - self.h_corr)*self.shear_direction\n                    aux_zeta_TE = np.dot(rot, aux_zeta_TE) + (self.h_ref - self.h_corr)*self.shear_direction\n\n                    # Translate according to u_inf depending on the height\n                    h = np.dot(aux_zeta_TE, self.shear_direction) + self.h_corr\n                    zeta_star[isurf][:, i, j] = aux_zeta_TE + self.u_inf*self.u_inf_direction*(h/self.h_ref)**self.shear_exp*delta_t\n                    # zeta_star[isurf][:, i, j] = zeta[isurf][:, -1, j] + self.u_inf*self.u_inf_direction*self.dt*i\n                    # print(zeta_star[isurf][:, i, j])\n\n            gamma[isurf] *= 0.\n            gamma_star[isurf] *= 0.\n\n        for isurf in range(nsurf):\n            M, N = zeta_star[isurf][0, :, :].shape\n            dist_to_orig[isurf][0, :] = 0.\n            for j in range(0, N):\n                for i in range(1, M):\n                    dist_to_orig[isurf][i, j] = (dist_to_orig[isurf][i - 1, j] +\n                                          np.linalg.norm(zeta_star[isurf][:, i, j] -\n                                                         zeta_star[isurf][:, i - 1, j]))\n                dist_to_orig[isurf][:, j] /= dist_to_orig[isurf][-1, j]\n\n    @staticmethod\n    def get_dphi(i, dphi1, ndphi1, r, dphimax):\n        if i == 0:\n            dphi = 0.\n        elif i <= ndphi1:\n            dphi = dphi1\n        else:\n            dphi = dphi1*r**(i - ndphi1)\n        dphi = min(dphi, dphimax)\n\n        return dphi\n"
  },
  {
    "path": "sharpy/generators/modifystructure.py",
    "content": "import numpy as np\nimport sharpy.utils.generator_interface as generator_interface\nimport sharpy.utils.settings as settings\n\n\n@generator_interface.generator\nclass ModifyStructure(generator_interface.BaseGenerator):\n    \"\"\"\n    ``ModifyStructure`` generator.\n\n    This generator allows the user to modify structural parameters at runtime. At the moment, changes to lumped\n    masses are supported. For each lumped mass you want to change, set ``change_variable`` to ``lumped_mass``, and the\n    ``variable_index`` and ``file_list`` as specified in :class:`~sharpy.generators.modifystructure.ChangeLumpedMass`.\n\n    This generator is called at the start of each time step in ``DynamicCoupled``.\n    \"\"\"\n    generator_id = 'ModifyStructure'\n    generator_classification = 'runtime'\n\n    settings_types = dict()\n    settings_default = dict()\n    settings_description = dict()\n    settings_options = dict()\n\n    settings_types['change_variable'] = 'list(str)'\n    settings_default['change_variable'] = None\n    settings_description['change_variable'] = 'Structural variable to modify'\n    settings_options['change_variable'] = ['lumped_mass']\n\n    settings_types['variable_index'] = 'list(int)'\n    settings_default['variable_index'] = None\n    settings_description['variable_index'] = 'List of indices of variables to change. ' \\\n                                             'For instance the 1st lumped mass would be ``[0]``'\n\n    settings_types['file_list'] = 'list(str)'\n    settings_default['file_list'] = None\n    settings_description['file_list'] = 'File path for each variable containing the changing info, in the ' \\\n                                        'appropriate format. See each of the allowed variables for the correct format.'\n\n    def __init__(self):\n        self.settings = None\n\n        self.num_changes = None  # :int number of variables that are changed\n        self.variables = []  # :list of changed variables objects\n        self.control_objects = {}  #: dictionary of changed variable name and its control object as value\n\n    def initialise(self, in_dict, **kwargs):\n        structure = kwargs['data'].structure\n        self.settings = in_dict\n        settings.to_custom_types(self.settings, self.settings_types, self.settings_default, no_ctype=True,\n                                 options=self.settings_options)\n\n        self.num_changes = len(self.settings['change_variable'])\n\n        if 'lumped_mass' in self.settings['change_variable']:\n            self.control_objects['lumped_mass'] = LumpedMassControl()\n\n        lumped_mass_variables = []\n        for i in range(self.num_changes):\n            var_type = self.settings['change_variable'][i]\n            if var_type == 'lumped_mass':\n                variable = ChangeLumpedMass(var_index=self.settings['variable_index'][i],\n                                            file=self.settings['file_list'][i])\n                variable.initialise(structure)\n\n                self.variables.append(variable)\n                lumped_mass_variables.append(i)\n                self.control_objects['lumped_mass'].append(i)\n            else:\n                raise NotImplementedError('Variable {:s} not yet coded to be modified in runtime'.format(var_type))\n        try:\n            self.control_objects['lumped_mass'].set_unchanged_vars_to_zero(structure)\n        except KeyError:\n            pass\n\n    def generate(self, params):\n        data = params['data']\n        ts = data.ts\n        structure = data.structure\n\n        for variable in self.variables:\n            variable(structure, ts)\n\n        # should only be called once per time step\n        try:\n            self.control_objects['lumped_mass'].execute_change(structure)\n        except KeyError:\n            pass\n\n        # for future variables supported, have the control objects have the same signatures such that they may be\n        # called in a loop\n\n\nclass ChangedVariable:\n    \"\"\"\n    Base class of a changed variable\n\n    Attributes:\n        name (str): Name of the changed variable\n        variable_index (int): Index of the variable to change\n        file (str): Name of the file containing the input data (.txt)\n        original (np.ndarray): Original value of the desired value in the appropriate format\n        current_value (np.ndarray): Running track of the current value of the desired variable\n    \"\"\"\n    def __init__(self, name, var_index, file):\n        self.name = name\n        self.variable_index = var_index\n        self.file = file\n\n        self.original = None\n        self.target_value = None\n        self.current_value = None  # initially\n\n    def initialise(self, structure):\n\n        self.get_original(structure)\n        self.load_file()\n\n        self.current_value = self.original  # initially\n\n    def __call__(self, structure, ts):\n        pass\n\n    def get_original(self, structure):\n        # should be overridden for the desired variable class. it should set self.original in the appropriate format\n        pass\n\n    def load_file(self):\n        self.target_value = np.loadtxt(self.file)\n\n\nclass ChangeLumpedMass(ChangedVariable):\n    \"\"\"\n    Lumped Mass to be modified\n\n    The arguments are parsed as items of the list in the settings for ``variable_index`` and ``file_list``. For\n    those variables marked where ``change_variables = 'lumped_mass'``.\n\n    The file should contain a time varying series with the following 10 columns:\n\n    * Lumped mass\n\n    * Lumped mass position in the material frame ``B`` (3 columns for ``xb``, ``yb`` and ``zb``)\n\n    * Lumped mass inertia in the material frame ``B`` (6 columns for ``ixx``, ``iyy``, ``izz``, ``ixy``, ``ixz`` and\n      ``iyz``.\n\n    Not all 10 columns are necessary in the input file, missing columns are ignored and left unchanged. There should be\n    one row per time step. If there are not enough entries for the number of time steps in the simulation, the changed\n    variable value remains unchanged after all rows have been processed.\n\n    Args:\n        var_index (int): Index of lumped mass. NOT the lumped mass node.\n        file (str): Path to file containing time history of the lumped mass.\n    \"\"\"\n    def __init__(self, var_index, file):\n        super().__init__('lumped_mass', var_index=var_index, file=file)\n\n    def __call__(self, structure, ts):\n        try:\n            # lumped masses get added (+=) at structure.lump_masses(), therefore the increment with respect to the\n            # previous time step must be provided. This is such that this generator is backwards compatible with the\n            # way lumped masses are assembled.\n            delta = self.target_value[ts] - self.current_value\n        except IndexError:  # input file has less entries than the simulation time steps\n            structure.lumped_mass[self.variable_index] = 0\n            structure.lumped_mass_position[self.variable_index, :] = np.zeros(3)\n            structure.lumped_mass_inertia[self.variable_index, :, :] = np.zeros((3, 3))\n\n        else:\n            structure.lumped_mass[self.variable_index] = delta[0]\n            structure.lumped_mass_position[self.variable_index, :] = delta[1:4]\n            ixx, iyy, izz, ixy, ixz, iyz = delta[-6:]\n            inertia = np.block([[ixx, ixy, ixz], [ixy, iyy, iyz], [ixz, iyz, izz]])\n            structure.lumped_mass_inertia[self.variable_index, :, :] = inertia\n\n            self.current_value += delta\n\n    def load_file(self):\n        \"\"\"Sets ``self.target_value`` by reading from the file.\n\n        If the input does not have as many columns as needed (10), these get padded with the original value such that\n        they are not changed at runtime.\n\n        \"\"\"\n\n        super().load_file()\n\n        n_values = len(self.original)\n\n        try:\n            n_target_values = self.target_value.shape[1]  # number of columns\n        except IndexError:\n            n_target_values = 1\n\n        if n_target_values != n_values:\n            # if not enough column entries pad with original values\n            self.target_value = np.column_stack((self.target_value,\n                                                 self.original[-(n_values - n_target_values):]\n                                                 * np.ones((self.target_value.shape[0], n_values - n_target_values)\n                                                           )\n                                                 ))\n\n    def get_original(self, structure):\n        m = structure.lumped_mass[self.variable_index]\n        pos = structure.lumped_mass_position[self.variable_index, :]\n        inertia = structure.lumped_mass_inertia[self.variable_index, :, :]\n\n        self.original = np.hstack((m, pos, np.diag(inertia), inertia[0, 1], inertia[0, 2], inertia[1, 2]))\n\n\nclass LumpedMassControl:\n    \"\"\"Lumped Mass Control Class\n\n    This class is instantiated when at least one lumped mass is modified.\n\n    It allows control over unchanged lumped masses and calls the method to execute the change.\n\n    Attributes:\n        lumped_mass_variables (list): List of integers containing the indices of the variables to change. These indices\n        refer to the order in which they are provided in the general settings for the generator.\n    \"\"\"\n    def __init__(self):\n        self.lumped_mass_variables = []\n\n    def set_unchanged_vars_to_zero(self, structure):\n        \"\"\"\n        Sets the lumped masses variables of unchanged lumped masses to zero.\n\n        This is to avoid the lumped mass changing during execution\n\n        Args:\n            structure (sharpy.structure.models.beam.Beam): SHARPy structure object\n\n        \"\"\"\n        for i_lumped_mass in range(len(structure.lumped_mass)):\n            if i_lumped_mass not in self.lumped_mass_variables:\n                structure.lumped_mass[i_lumped_mass] *= 0\n                structure.lumped_mass_position[i_lumped_mass] *= 0\n                structure.lumped_mass_inertia[i_lumped_mass] *= 0\n\n    @staticmethod\n    def execute_change(structure):\n        \"\"\"Executes the change in the lumped masses.\n\n        Called only once per time step when all the changed lumped mass variables have been processed.\n        \"\"\"\n        # called once all variables changed\n        structure.lump_masses()\n        structure.generate_fortran()\n\n    def append(self, i):\n        self.lumped_mass_variables.append(i)\n"
  },
  {
    "path": "sharpy/generators/polaraeroforces.py",
    "content": "import numpy as np\nimport os\nimport sharpy.utils.generator_interface as generator_interface\nimport sharpy.utils.settings as settings\nimport sharpy.utils.algebra as algebra\nfrom sharpy.aero.utils.utils import magnitude_and_direction_of_relative_velocity, local_stability_axes, span_chord\nfrom sharpy.utils.generate_cases import get_aoacl0_from_camber\n\n\n@generator_interface.generator\nclass PolarCorrection(generator_interface.BaseGenerator):\n    r\"\"\"\n    This generator corrects the aerodynamic forces from UVLM based on the airfoil polars provided by the user in the\n    ``aero.h5`` file. Polars are entered for each airfoil, in a table comprising ``AoA (rad), CL, CD, CM``.\n\n    This ``generator_id = 'PolarCorrection'`` and can be used in the coupled solvers through the\n    ``correct_forces_method`` setting as:\n\n    .. python::\n        settings = dict()  # SHARPy settings\n        settings['StaticCoupled']['correct_forces_method'] = 'PolarCorrection'\n        settings['StaticCoupled']['correct_forces_settings'] = {'cd_from_cl': 'off',  # recommended settings (default)\n                                                                'correct_lift': 'off',\n                                                                'moment_from_polar': 'off'}\n\n    These are the steps needed to correct the forces:\n\n        1. The force coming from UVLM is divided into induced drag (parallel to the incoming flow velocity) and lift\n          (the remaining force).\n\n    If ``cd_from_cl == 'on'``.\n        2. The viscous drag and pitching moment are found at the computed lift coefficient. Then forces and\n           moments are updated\n\n    Else, the angle of attack is computed:\n\n            2. The angle of attack is computed based on that lift force and the angle of zero lift computed from the\n               airfoil polar and assuming the potential flow lift curve slope of :math:`2 \\pi`\n\n        3. The drag force is computed based on the angle of attack and the polars provided by the user\n\n        4. If ``correct_lift == 'on'``, the lift coefficient is also corrected with the polar data. Else, only the\n           UVLM results are used.\n\n    The pitching moment is added in a similar manner as the viscous drag. However, if ``moment_from_polar == 'on'``\n    and ``correct_lift == 'on'``, the total moment (the one used for the FSI) is computed just from polar data,\n    overriding any moment computed in SHARPy. That is, the moment will include the polar pitching moment, and moments\n    due to lift and drag computed from the polar data.\n\n    \"\"\"\n    generator_id = 'PolarCorrection'\n\n    settings_types = dict()\n    settings_default = dict()\n    settings_description = dict()\n    settings_options = dict()\n\n    settings_types['correct_lift'] = 'bool'\n    settings_default['correct_lift'] = False\n    settings_description['correct_lift'] = 'Correct lift according to the polars'\n\n    settings_types['cd_from_cl'] = 'bool'\n    settings_default['cd_from_cl'] = False\n    settings_description['cd_from_cl'] = 'Interpolate the C_D for the given C_L, as opposed to getting the C_D from ' \\\n                                         'the section AoA.'\n\n    settings_types['moment_from_polar'] = 'bool'\n    settings_default['moment_from_polar'] = False\n    settings_description['moment_from_polar'] = 'If ``correct_lift`` is selected, it will compute the pitching moment ' \\\n                                                'simply from polar derived data, i.e. the polars Cm and the moments' \\\n                                                'arising from the lift and drag (derived from the polar) contribution. ' \\\n                                                'Else, it will add the polar Cm to the moment already computed by ' \\\n                                                'SHARPy.'    \n\n    settings_types['add_rotation'] = 'bool'\n    settings_default['add_rotation'] = False\n    settings_description['add_rotation'] = 'Add rotation velocity. Probably needed in steady computations'\n\n    settings_types['rot_vel_g'] = 'list(float)'\n    settings_default['rot_vel_g'] = [0., 0., 0.] \n    settings_description['rot_vel_g'] = 'Rotation velocity in G FoR. Only used if add_rotation = True'\n\n    settings_types['centre_rot_g'] = 'list(float)'\n    settings_default['centre_rot_g'] = [0., 0., 0.] \n    settings_description['centre_rot_g'] = 'Centre of rotation in G FoR. Only used if add_rotation = True'\n\n    settings_types['skip_surfaces'] = 'list(int)'\n    settings_default['skip_surfaces'] = []\n    settings_description['skip_surfaces'] = 'Surfaces on which force correction is skipped.'\n\n\n    settings_types['aoa_cl0'] = 'list(float)'\n    settings_default['aoa_cl0'] = []\n    settings_description['aoa_cl0'] = 'Angle of attack for which zero lift is achieved specified in deg for each airfoil.'\n    \n    settings_types['write_induced_aoa'] = 'bool'\n    settings_default['write_induced_aoa'] = False\n    settings_description['write_induced_aoa'] = 'Write induced aoa of each node to txt file.'\n\n    settings_table = settings.SettingsTable()\n    __doc__ += settings_table.generate(settings_types, settings_default, settings_description, settings_options,\n                                       header_line='This generator takes in the following settings.')\n\n    def __init__(self):\n        self.folder = None\n        self.cd_from_cl = None\n        self.list_aoa_cl0 = None\n        self.settings = None\n\n        self.aero = None\n        self.structure = None\n        self.rho = None\n        self.vortex_radius = None\n        self.n_node = None\n        self.flag_node_shared_by_multiple_surfaces = None\n\n    def initialise(self, in_dict, **kwargs):\n        self.settings = in_dict\n        settings.to_custom_types(self.settings, self.settings_types, self.settings_default)\n\n        self.aero = kwargs.get('aero')\n        self.structure = kwargs.get('structure')\n        self.n_node = self.structure.num_node\n        self.rho = kwargs.get('rho')\n        self.vortex_radius = kwargs.get('vortex_radius', 1e-6)\n        self.list_aoa_cl0 = self.settings['aoa_cl0']\n        self.cd_from_cl = self.settings['cd_from_cl']\n        self.folder = kwargs.get('output_folder') + '/aoa_induced/'\n\n        if not self.cd_from_cl and len(self.list_aoa_cl0) == 0:\n            # compute aoa for cl0 if not specified in settings\n            self.compute_aoa_cl0_from_airfoil_data(self.aero)\n\n        self.check_for_special_cases(self.aero)\n\n\n    def generate(self, **params):\n        \"\"\"\n        Keyword Args:\n            aero_kstep (:class:`sharpy.utils.datastructures.AeroTimeStepInfo`): Current aerodynamic substep\n            structural_kstep (:class:`sharpy.utils.datastructures.StructTimeStepInfo`): Current structural substep\n            struct_forces (np.array): Array with the aerodynamic forces mapped on the structure in the B frame of\n              reference\n\n        Returns:\n            np.array: New corrected structural forces\n        \"\"\"\n        aero_kstep = params['aero_kstep']\n        structural_kstep = params['structural_kstep']\n        struct_forces = params['struct_forces']\n        ts = params['ts']\n\n        aerogrid = self.aero\n        structure = self.structure\n        rho = self.rho\n        correct_lift = self.settings['correct_lift']\n        moment_from_polar = self.settings['moment_from_polar']\n        \n        list_aoa_induced = []\n\n        data_dict = aerogrid.data_dict\n        if aerogrid.polars is None:\n            return struct_forces\n        new_struct_forces = np.zeros_like(struct_forces)\n\n        nnode = struct_forces.shape[0]\n\n        # Compute induced velocities at the structural points\n        cga = algebra.quat2rotation(structural_kstep.quat)\n        pos_g = np.array([cga.dot(structural_kstep.pos[inode]) + np.array([0, 0, 0]) for inode in range(nnode)])\n\n        for inode in range(nnode):\n            new_struct_forces[inode, :] = struct_forces[inode, :].copy()\n            if data_dict['aero_node'][inode]:\n                ielem, inode_in_elem = structure.node_master_elem[inode]\n                iairfoil = data_dict['airfoil_distribution'][ielem, inode_in_elem]\n                isurf = aerogrid.struct2aero_mapping[inode][0]['i_surf']\n                if isurf not in self.settings['skip_surfaces']:\n                    i_n = aerogrid.struct2aero_mapping[inode][0]['i_n']\n                    polar = aerogrid.polars[iairfoil]\n                    cab = algebra.crv2rotation(structural_kstep.psi[ielem, inode_in_elem, :])\n                    cgb = np.dot(cga, cab)\n\n                    if not self.cd_from_cl:\n                        airfoil = str(data_dict['airfoil_distribution'][ielem, inode_in_elem])\n                        aoa_0cl = self.list_aoa_cl0[int(airfoil)]\n\n                    # computing surface area of panels contributing to force\n                    dir_span, span, dir_chord, chord = span_chord(i_n, aero_kstep.zeta[isurf])\n                    area = span * chord\n                    area = self.correct_surface_area(inode, aerogrid.struct2aero_mapping, aero_kstep.zeta, area)\n               \n                    # Define the relative velocity and its direction\n                    urel, dir_urel = magnitude_and_direction_of_relative_velocity(structural_kstep.pos[inode, :],\n                                                                                structural_kstep.pos_dot[inode, :],\n                                                                                structural_kstep.for_vel[:],\n                                                                                cga,\n                                                                                aero_kstep.u_ext[isurf][:, :, i_n],\n                                                                                self.settings['add_rotation'],\n                                                                                self.settings['rot_vel_g'],\n                                                                                self.settings['centre_rot_g'],)\n                    # Coefficient to change from aerodynamic coefficients to forces (and viceversa)\n                    coef = 0.5 * rho * np.linalg.norm(urel) ** 2 * area\n                    # Stability axes - projects forces in B onto S\n                    c_bs = local_stability_axes(cgb.T.dot(dir_urel), cgb.T.dot(dir_chord))\n                    forces_s = c_bs.T.dot(struct_forces[inode, :3])\n                    moment_s = c_bs.T.dot(struct_forces[inode, 3:])\n                    lift_force = forces_s[2]\n                    # Compute the associated lift\n                    cl = np.sign(lift_force) * np.linalg.norm(lift_force) / coef\n\n                    if self.cd_from_cl:\n                        # Compute the drag from the UVLM computed lift\n                        cd, cm = polar.get_cdcm_from_cl(cl)\n\n                    else:\n                        \"\"\"\n                        Compute L, D, M from polar depending on:\n                        ii) Compute the effective angle of attack from potential flow theory or specified it as setting\n                        input. The local lift curve slope is 2pi and the zero-lift angle of attack is given by thin \n                        airfoil theory or specified it as setting input. From this, the effective angle of attack is \n                        computed for the section and includes 3D effects.\n                        \"\"\"\n                        aoa = cl / 2 / np.pi + aoa_0cl \n                        list_aoa_induced.append(aoa)\n                        # Compute the coefficients associated to that angle of attack\n                        cl_polar, cd, cm = polar.get_coefs(aoa)\n                        \n                        if correct_lift:\n                            # Use polar generated CL rather than UVLM computed CL\n                            cl = cl_polar\n\n                    # Recompute the forces based on the coefficients (side force is uncorrected)\n                    forces_s[0] += cd * coef  # add viscous drag to induced drag from UVLM\n                    forces_s[2] = cl * coef\n\n                    new_struct_forces[inode, 0:3] = c_bs.dot(forces_s)\n\n                    # Pitching moment\n                    # The panels are shifted by 0.25 of a panel aft from the leading edge\n                    panel_shift = 0.25 * (aero_kstep.zeta[isurf][:, 1, i_n] - aero_kstep.zeta[isurf][:, 0, i_n])\n                    ref_point = aero_kstep.zeta[isurf][:, 0, i_n] + 0.25 * chord * dir_chord - panel_shift\n\n                    # viscous contribution (pure moment)\n                    moment_s[1] += cm * coef * chord\n\n                    # moment due to drag\n                    arm = cgb.T.dot(ref_point - pos_g[inode])  # in B frame\n                    moment_polar_drag = algebra.cross3(c_bs.T.dot(arm), cd * dir_urel * coef)  # in S frame\n                    moment_s += moment_polar_drag\n\n                    # Pitching moment\n                    if moment_from_polar:\n                        # The panels are shifted by 0.25 of a panel aft from the leading edge\n                        panel_shift = 0.25 * (aero_kstep.zeta[isurf][:, 1, i_n] - aero_kstep.zeta[isurf][:, 0, i_n])\n                        ref_point = aero_kstep.zeta[isurf][:, 0, i_n] + 0.25 * chord * dir_chord - panel_shift\n                        new_struct_forces[inode, 3:6] = c_bs.dot(moment_s)\n\n                        # viscous contribution (pure moment)\n                        moment_s[1] += cm * coef * chord\n\n\n                        # moment due to drag\n                        arm = cgb.T.dot(ref_point - pos_g[inode])  # in B frame\n                        moment_polar_drag = algebra.cross3(c_bs.T.dot(arm), cd * dir_urel * coef)  # in S frame\n                        moment_s += moment_polar_drag\n\n                    # moment due to lift (if corrected)\n                    if correct_lift and moment_from_polar:\n                        # add moment from scratch: cm_polar + cm_drag_polar + cl_lift_polar\n                        moment_s = np.zeros(3)\n                        moment_s[1] = cm * coef * chord\n                        moment_s += moment_polar_drag\n                        moment_polar_lift = algebra.cross3(c_bs.T.dot(arm), forces_s[2] * np.array([0, 0, 1]))\n                        moment_s += moment_polar_lift\n\n                    new_struct_forces[inode, 3:6] = c_bs.dot(moment_s)\n\n        if self.settings['write_induced_aoa']:\n            self.write_induced_aoa_of_each_node(ts, list_aoa_induced)\n\n        return new_struct_forces\n    \n\n    def correct_surface_area(self, inode, struct2aero_mapping, zeta_ts, area):\n        '''\n        Corrects the surface area if the structural node is shared  by multiple surfaces. \n\n        For example, when the wing is split into right and left wing both surfaces share the center node.\n        Necessary for cl calculation as the force on the node is already the sum of the forces generated \n        at the adjacent panels of each surface.\n        \n        Args:\n            inode (int): global node id\n            struct2aero_mapping (list of dicts): maps the structural (global) nodes to aero surfaces and nodes\n            zeta_ts (array): zeta of current aero timestep\n\n        Returns:\n            float: corrected surface area of other surfaces\n        '''\n        if self.flag_shared_node_by_surfaces[inode]:\n            n_surfaces_shared_by_node = len(struct2aero_mapping[inode])\n            # add area for all other surfaces connected to this node\n            for isurf in range(1,n_surfaces_shared_by_node):\n                shared_surf = struct2aero_mapping[inode][isurf]['i_surf']\n                i_n_shared_surf = struct2aero_mapping[inode][isurf]['i_n']\n                _, span_shared_surf, _, chord_shared_surf = span_chord(i_n_shared_surf, zeta_ts[shared_surf])\n                area += span_shared_surf * chord_shared_surf\n        return area\n        \n    def check_for_special_cases(self, aerogrid):\n        '''\n        Checks if the outboard node is shared by multiple surfaces. \n\n        Args:\n            aerogrid :class:`~sharpy.aero.models.AerogridLoader\n        '''\n        # check if outboard node of aerosurface\n        self.flag_shared_node_by_surfaces = np.zeros((self.n_node,1))\n        for inode in range(self.n_node):\n            if aerogrid.data_dict['aero_node'][inode]:\n                i_n = aerogrid.struct2aero_mapping[inode][0]['i_n']                \n                isurf = aerogrid.struct2aero_mapping[inode][0]['i_surf']\n                N = aerogrid.dimensions[isurf, 1]\n                if i_n in [0, N]:\n                    if len(aerogrid.struct2aero_mapping[inode]) > 1:\n                        self.flag_shared_node_by_surfaces[inode] = 1\n      \n\n\n    def write_induced_aoa_of_each_node(self,ts, list_aoa_induced):\n        '''\n        Writes induced aoa of each node to txt file for each timestep. \n\n        Args:\n            ts (int): simulation timestep \n            list_aoa_induced (list(float)): list with induced aoa of each node\n        '''\n        if ts == 0 and not os.path.exists(self.folder):\n            os.makedirs(self.folder)\n            \n        np.savetxt(self.folder + '/aoa_induced_ts_{}.txt'.format(ts),\n                   np.transpose(np.transpose(np.array(list_aoa_induced))),\n                   fmt='%10e',\n                   delimiter=',',\n                   header='aoa_induced',\n                   comments='#')\n                   \n\n    def compute_aoa_cl0_from_airfoil_data(self, aerogrid):\n        \"\"\"\n         Computes the angle of attack for which zero lift is achieved for every airfoil\n        \"\"\"\n        self.list_aoa_cl0 = np.zeros((len(aerogrid.data_dict['airfoils']),1))\n        for i, airfoil in enumerate(aerogrid.data_dict['airfoils']):\n            airfoil_coords = aerogrid.data_dict['airfoils'][airfoil]\n            self.list_aoa_cl0[i] = get_aoacl0_from_camber(airfoil_coords[:, 0], airfoil_coords[:, 1])\n\n@generator_interface.generator\nclass EfficiencyCorrection(generator_interface.BaseGenerator):\n    \"\"\"\n    The efficiency and constant terms are introduced by means of the array ``airfoil_efficiency`` in the ``aero.h5``\n\n    .. math::\n        \\mathbf{f}_{struct}^B &= \\varepsilon^f_0 \\mathbf{f}_{i,struct}^B + \\varepsilon^f_1\\\\\n        \\mathbf{m}_{struct}^B &= \\varepsilon^m_0 \\mathbf{m}_{i,struct}^B + \\varepsilon^m_1\n\n    Notice that the moment correction is applied on top of the force correction. As a consequence, the aerodynamic\n    moments generated by the forces on the vertices are corrected sequentially by both efficiencies.\n\n    See Also:\n        The SHARPy case files documentation for a detailed overview on how to include the airfoil efficiencies.\n\n    Returns:\n         np.ndarray: corresponding aerodynamic force at the structural node from the force and moment at a grid vertex\n    \"\"\"\n    generator_id = 'EfficiencyCorrection'\n\n    settings_types = dict()\n    settings_default = dict()\n\n    def __init__(self):\n        self.aero = None\n        self.structure = None\n\n    def initialise(self, in_dict, **kwargs):\n        self.aero = kwargs.get('aero')\n        self.structure = kwargs.get('structure')\n\n    def generate(self, **params):\n        \"\"\"\n        Keyword Args:\n            aero_kstep (:class:`sharpy.utils.datastructures.AeroTimeStepInfo`): Current aerodynamic substep\n            structural_kstep (:class:`sharpy.utils.datastructures.StructTimeStepInfo`): Current structural substep\n            struct_forces (np.array): Array with the aerodynamic forces mapped on the structure in the B frame of\n              reference\n\n        Returns:\n            np.array: New corrected structural forces\n        \"\"\"\n        struct_forces = params['struct_forces']\n\n        n_node = self.structure.num_node\n        n_elem = self.structure.num_elem\n        data_dict = self.aero.data_dict\n        new_struct_forces = np.zeros_like(struct_forces)\n\n        # load airfoil efficiency (if it exists); else set to one (to avoid multiple ifs in the loops)\n        airfoil_efficiency = data_dict['airfoil_efficiency']\n        # force efficiency dimensions [n_elem, n_node_elem, 2, [fx, fy, fz]] - all defined in B frame\n        force_efficiency = np.zeros((n_elem, 3, 2, 3))\n        force_efficiency[:, :, 0, :] = 1.\n        force_efficiency[:, :, :, 1] = airfoil_efficiency[:, :, :, 0]\n        force_efficiency[:, :, :, 2] = airfoil_efficiency[:, :, :, 1]\n\n        # moment efficiency dimensions [n_elem, n_node_elem, 2, [mx, my, mz]] - all defined in B frame\n        moment_efficiency = np.zeros((n_elem, 3, 2, 3))\n        moment_efficiency[:, :, 0, :] = 1.\n        moment_efficiency[:, :, :, 0] = airfoil_efficiency[:, :, :, 2]\n\n        for inode in range(n_node):\n            i_elem, i_local_node = self.structure.node_master_elem[inode]\n            new_struct_forces[inode, :] = struct_forces[inode, :].copy()\n            new_struct_forces[inode, 0:3] *= force_efficiency[i_elem, i_local_node, 0, :] # element wise multiplication\n            new_struct_forces[inode, 0:3] += force_efficiency[i_elem, i_local_node, 1, :]\n            new_struct_forces[inode, 3:6] *= moment_efficiency[i_elem, i_local_node, 0, :]\n            new_struct_forces[inode, 3:6] += moment_efficiency[i_elem, i_local_node, 1, :]\n        return new_struct_forces\n"
  },
  {
    "path": "sharpy/generators/shearvelocityfield.py",
    "content": "import numpy as np\n\nimport sharpy.utils.generator_interface as generator_interface\nimport sharpy.utils.settings as settings\n\n\n@generator_interface.generator\nclass ShearVelocityField(generator_interface.BaseGenerator):\n    r\"\"\"\n    Shear Velocity Field Generator\n\n    ``ShearVelocityField`` class inherited from ``BaseGenerator``\n\n    The object creates a steady velocity field with shear\n\n    .. math:: \\hat{u} = \\hat{u}\\_\\infty \\left( \\frac{h - h\\_\\mathrm{corr}}{h\\_\\mathrm{ref}} \\right)^{\\mathrm{shear}\\_\\mathrm{exp}}\n    .. math:: h = \\zeta \\cdot \\mathrm{shear}\\_\\mathrm{direction}\n\n    \"\"\"\n    generator_id = 'ShearVelocityField'\n    generator_classification = 'velocity-field'\n\n    settings_types = dict()\n    settings_default = dict()\n    settings_description = dict()\n\n    settings_types['u_inf'] = 'float'\n    settings_default['u_inf'] = None\n    settings_description['u_inf'] = 'Free stream velocity magnitude'\n\n    settings_types['u_inf_direction'] = 'list(float)'\n    settings_default['u_inf_direction'] = np.array([1.0, 0, 0])\n    settings_description['u_inf_direction'] = '``x``, ``y`` and ``z`` relative components of the free stream velocity'\n\n    settings_types['shear_direction'] = 'list(float)'\n    settings_default['shear_direction'] = np.array([.0, 0, 1.0])\n    settings_description['shear_direction'] = '``x``, ``y`` and ``z`` relative components of the direction along which shear applies'\n\n    settings_types['shear_exp'] = 'float'\n    settings_default['shear_exp'] = 0.\n    settings_description['shear_exp'] = 'Exponent of the shear law'\n\n    settings_types['h_ref'] = 'float'\n    settings_default['h_ref'] = 1.\n    settings_description['h_ref'] = 'Reference height at which ``u_inf`` is defined'\n\n    settings_types['h_corr'] = 'float'\n    settings_default['h_corr'] = 0.\n    settings_description['h_corr'] = 'Height to correct shear law'\n\n    setting_table = settings.SettingsTable()\n    __doc__ += setting_table.generate(settings_types, settings_default, settings_description)\n\n    def __init__(self):\n        self.in_dict = dict()\n\n        self.u_inf = 0.\n        self.u_inf_direction = None\n        self.shear_direction = None\n        self.shear_exp = None\n        self.h_ref = None\n        self.h_corr = None\n\n    def initialise(self, in_dict, restart=False):\n        self.in_dict = in_dict\n        settings.to_custom_types(self.in_dict, self.settings_types, self.settings_default)\n\n        self.u_inf = self.in_dict['u_inf']\n        self.u_inf_direction = self.in_dict['u_inf_direction']\n        self.shear_direction = self.in_dict['shear_direction']\n        self.shear_exp = self.in_dict['shear_exp']\n        self.h_ref = self.in_dict['h_ref']\n        self.h_corr = self.in_dict['h_corr']\n\n    def generate(self, params, uext):\n        zeta = params['zeta']\n        override = params['override']\n        for i_surf in range(len(zeta)):\n            if override:\n                uext[i_surf].fill(0.0)\n            for i in range(zeta[i_surf].shape[1]):\n                for j in range(zeta[i_surf].shape[2]):\n                    h = np.dot(zeta[i_surf][:, i, j], self.shear_direction) + self.h_corr\n                    uext[i_surf][:, i, j] += self.u_inf*self.u_inf_direction*(h/self.h_ref)**self.shear_exp\n"
  },
  {
    "path": "sharpy/generators/steadyvelocityfield.py",
    "content": "import numpy as np\n\nimport sharpy.utils.generator_interface as generator_interface\nimport sharpy.utils.settings as settings\n\n\n@generator_interface.generator\nclass SteadyVelocityField(generator_interface.BaseGenerator):\n    \"\"\"\n    Steady Velocity Field Generator\n\n    ``SteadyVelocityField`` class inherited from ``BaseGenerator``\n\n    The object creates a steady velocity field with the velocity and flow direction specified by the user.\n\n    To call this generator, the ``generator_id = SteadyVelocityField`` shall be used.\n    This is parsed as the value for the ``velocity_field_generator`` key in the desired aerodynamic solver's settings.\n\n    Args:\n        in_dict (dict): Input data in the form of dictionary. See acceptable entries below:\n\n    Attributes:\n        settings_types (dict): Acceptable data types of the input data\n        settings_default (dict): Default values for input data should the user not provide them\n        u_inf (float): Free stream velocity selection\n        u_inf_direction (list(float)): ``x``, ``y`` and ``z`` relative contributions to the free stream velocity\n\n    See Also:\n        .. py:class:: sharpy.utils.generator_interface.BaseGenerator\n\n    \"\"\"\n    generator_id = 'SteadyVelocityField'\n    generator_classification = 'velocity-field'\n\n    settings_types = dict()\n    settings_default = dict()\n    settings_description = dict()\n\n    settings_types['u_inf'] = 'float'\n    settings_default['u_inf'] = None\n    settings_description['u_inf'] = 'Module of the free stream velocity'\n\n    settings_types['u_inf_direction'] = 'list(float)'\n    settings_default['u_inf_direction'] = np.array([1.0, 0, 0])\n    settings_description['u_inf_direction'] = 'Direction of the free stream velocity'\n\n    settings_table = settings.SettingsTable()\n    __doc__ += settings_table.generate(settings_types, settings_default, settings_description)\n\n    def __init__(self):\n        self.in_dict = dict()\n\n        self.u_inf = 0.\n        self.u_inf_direction = None\n\n    def initialise(self, in_dict, restart=False):\n        self.in_dict = in_dict\n        settings.to_custom_types(self.in_dict,\n                                 self.settings_types,\n                                 self.settings_default)\n\n        self.u_inf = self.in_dict['u_inf']\n        self.u_inf_direction = self.in_dict['u_inf_direction']\n\n    def generate(self, params, uext):\n        zeta = params['zeta']\n        override = params['override']\n        for i_surf in range(len(zeta)):\n            if override:\n                uext[i_surf].fill(0.0)\n            for i in range(zeta[i_surf].shape[1]):\n                for j in range(zeta[i_surf].shape[2]):\n                    uext[i_surf][:, i, j] += self.u_inf*self.u_inf_direction\n"
  },
  {
    "path": "sharpy/generators/straightwake.py",
    "content": "import numpy as np\n\nimport sharpy.utils.generator_interface as generator_interface\nimport sharpy.utils.settings as settings\nimport sharpy.utils.solver_interface as solver_interface\nimport sharpy.utils.cout_utils as cout\n\n\n@generator_interface.generator\nclass StraightWake(generator_interface.BaseGenerator):\n    r\"\"\"\n    Straight wake shape generator\n\n    This generator creates a straight wake shedding from the trailing edge based on\n    the time step ``dt``, the incoming velocity magnitude ``u_inf`` and\n    direction ``u_inf_direction``. It is to be used as ``wake_generator`` in\n     :class:`~sharpy.solvers.aerogridloader.AerogridLoader`.\n\n    A wake where panels grow downstream is supported by using the settings ``dx1``, ``ndx1``,\n    ``r`` and ``dxmax`` as described below. Note that the wake will always have ``m_star`` panels, as specified in\n    :class:`~sharpy.solvers.aerogridloader.AerogridLoader`, thus these settings will modify the effective length\n    of the wake. Once the maximum size of panel ``dxmax`` is achieved, all panels are size ``dxmax`` thereinafter\n    until ``m_star`` panels are created.\n    \"\"\"\n    generator_id = 'StraightWake'\n    generator_classification = 'wake'\n\n    settings_types = dict()\n    settings_default = dict()\n    settings_description = dict()\n\n    settings_types['u_inf'] = 'float'\n    settings_default['u_inf'] = 1. # None\n    settings_description['u_inf'] = 'Free stream velocity magnitude'\n\n    settings_types['u_inf_direction'] = 'list(float)'\n    settings_default['u_inf_direction'] = np.array([1.0, 0, 0]) # None\n    settings_description['u_inf_direction'] = '``x``, ``y`` and ``z`` relative components of the free stream velocity'\n\n    settings_types['dt'] = 'float'\n    settings_default['dt'] = 0.1 # None\n    settings_description['dt'] = 'Time step'\n\n    settings_types['dx1'] =  ['float', 'list(float)']\n    settings_default['dx1'] = -1.0\n    settings_description['dx1'] = 'Size of the first wake panel'\n\n    settings_types['ndx1'] =  ['int', 'list(int)']\n    settings_default['ndx1'] = 1\n    settings_description['ndx1'] = 'Number of panels with size ``dx1``'\n\n    settings_types['r'] = ['float', 'list(float)']\n    settings_default['r'] = 1.\n    settings_description['r'] = 'Growth rate after ``ndx1`` panels'\n\n    settings_types['dxmax'] =  ['float', 'list(float)']\n    settings_default['dxmax'] = -1.0\n    settings_description['dxmax'] = 'Maximum panel size'\n\n    setting_table = settings.SettingsTable()\n    __doc__ += setting_table.generate(settings_types, settings_default, settings_description)\n\n    def __init__(self):\n        self.in_dict = dict()\n\n        self.u_inf = 0.\n        self.u_inf_direction = None\n        self.dt = None\n\n    def initialise(self, data, in_dict=None, restart=False):\n        self.in_dict = in_dict\n\n        # For backwards compatibility\n        if len(self.in_dict.keys()) == 0:\n            cout.cout_wrap(\"WARNING: The code will run for backwards compatibility. \\\n                   In future releases you will need to define a 'wake_shape_generator' in ``AerogridLoader''. \\\n                   Please, check the documentation\", 3)\n\n            # Look for an aerodynamic solver\n            if 'StaticUvlm' in data.settings:\n                aero_solver_name = 'StaticUvlm'\n                aero_solver_settings = data.settings['StaticUvlm']\n            elif 'SHWUvlm' in data.settings:\n                aero_solver_name = 'SHWUvlm'\n                aero_solver_settings = data.settings['SHWUvlm']\n            elif 'StaticCoupled' in data.settings:\n                aero_solver_name = data.settings['StaticCoupled']['aero_solver']\n                aero_solver_settings = data.settings['StaticCoupled']['aero_solver_settings']\n            elif 'DynamicCoupled' in data.settings:\n                aero_solver_name = data.settings['DynamicCoupled']['aero_solver']\n                aero_solver_settings = data.settings['DynamicCoupled']['aero_solver_settings']\n            elif 'StepUvlm' in data.settings:\n                aero_solver_name = 'StepUvlm'\n                aero_solver_settings = data.settings['StepUvlm']\n            else:\n                raise RuntimeError(\"ERROR: aerodynamic solver not found\")\n\n            # Get the minimum parameters needed to define the wake\n            aero_solver = solver_interface.solver_from_string(aero_solver_name)\n            settings.to_custom_types(aero_solver_settings,\n                                     aero_solver.settings_types,\n                                     aero_solver.settings_default)\n\n            if 'dt' in aero_solver_settings.keys():\n                dt = aero_solver_settings['dt']\n            elif 'rollup_dt' in aero_solver_settings.keys():\n                dt = aero_solver_settings['rollup_dt']\n            else:\n                # print(aero_solver['velocity_field_input']['u_inf'])\n                dt = 1./aero_solver_settings['velocity_field_input']['u_inf']\n            self.in_dict = {'u_inf': aero_solver_settings['velocity_field_input']['u_inf'],\n                            'u_inf_direction': aero_solver_settings['velocity_field_input']['u_inf_direction'],\n                            'dt': dt}\n\n        settings.to_custom_types(self.in_dict, self.settings_types, self.settings_default, no_ctype=True)\n\n        self.u_inf = self.in_dict['u_inf']\n        self.u_inf_direction = self.in_dict['u_inf_direction']\n        self.dt = self.in_dict['dt']\n\n        self.dx1 = self.in_dict['dx1']\n        self.ndx1 = self.in_dict['ndx1']\n        self.r = self.in_dict['r']\n        self.dxmax = self.in_dict['dxmax']\n\n\n    def generate(self, params):\n        # Renaming for convenience\n        zeta = params['zeta']\n        zeta_star = params['zeta_star']\n        gamma = params['gamma']\n        gamma_star = params['gamma_star']\n        dist_to_orig = params['dist_to_orig']\n\n        nsurf = len(zeta)\n        for isurf in range(nsurf):\n            r_surf, ndx1_surf, dx1_surf, dxmax_surf = self.get_all_surface_parameters(isurf)\n            M, N = zeta_star[isurf][0, :, :].shape\n            for j in range(N):\n                zeta_star[isurf][:, 0, j] = zeta[isurf][:, -1, j]\n                for i in range(1, M):\n                    deltax = self.get_deltax(i, dx1_surf, ndx1_surf, r_surf, dxmax_surf)\n                    zeta_star[isurf][:, i, j] = zeta_star[isurf][:, i - 1, j] + deltax*self.u_inf_direction\n            gamma[isurf] *= 0.\n            gamma_star[isurf] *= 0.\n\n        for isurf in range(nsurf):\n            M, N = zeta_star[isurf][0, :, :].shape\n            dist_to_orig[isurf][0] = 0.\n            for j in range(0, N):\n                for i in range(1, M):\n                    dist_to_orig[isurf][i, j] = (dist_to_orig[isurf][i - 1, j] +\n                                          np.linalg.norm(zeta_star[isurf][:, i, j] -\n                                                         zeta_star[isurf][:, i - 1, j]))\n                dist_to_orig[isurf][:, j] /= dist_to_orig[isurf][-1, j]\n\n\n    @staticmethod\n    def get_deltax(i, dx1, ndx1, r, dxmax):\n        if (i < ndx1 + 1) :\n            deltax = dx1\n        else:\n            deltax = dx1*r**(i - ndx1)\n        deltax = min(deltax, dxmax)\n\n        return deltax\n    @staticmethod\n    def get_surface_parameter(parameter, i_surf):\n        if np.isscalar(parameter):\n            return parameter\n        else:\n            return parameter[i_surf]\n\n    def get_all_surface_parameters(self,i_surf):\n        r_surf = self.get_surface_parameter(self.r, i_surf)\n        dx1_surf = self.get_surface_parameter(self.dx1, i_surf)\n        ndx1_surf = self.get_surface_parameter(self.ndx1, i_surf)\n        dxmax_surf = self.get_surface_parameter(self.dxmax, i_surf)\n        if dx1_surf == -1.:\n            dx1_surf = self.u_inf*self.dt\n        if dxmax_surf == -1.:\n            dxmax_surf = dx1_surf\n        return r_surf, ndx1_surf, dx1_surf, dxmax_surf\n\n\n\n"
  },
  {
    "path": "sharpy/generators/trajectorygenerator.py",
    "content": "import numpy as np\nfrom numpy.polynomial import polynomial as P\nimport scipy as sc\nfrom scipy import interpolate\n\nimport sharpy.utils.generator_interface as generator_interface\nimport sharpy.utils.settings as settings\nimport sharpy.utils.cout_utils as cout\n\n\n@generator_interface.generator\nclass TrajectoryGenerator(generator_interface.BaseGenerator):\n    \"\"\"\n    ``TrajectoryGenerator`` is used to generate nodal positions or velocities\n    for trajectory constraints such as the ones included in the multibody\n    solver.\n\n    It is usually called from a ``Controller`` module.\n    \"\"\"\n    generator_id = 'TrajectoryGenerator'\n    generator_classification = 'utils'\n\n    settings_types = dict()\n    settings_default = dict()\n    settings_description = dict()\n\n    settings_types['angle_end'] = 'float'\n    settings_default['angle_end'] = 0.0\n    settings_description['angle_end'] = 'Trajectory angle wrt horizontal at release'\n\n    settings_types['veloc_end'] = 'float'\n    settings_default['veloc_end'] = None\n    settings_description['veloc_end'] = 'Release velocity at release'\n\n    settings_types['shape'] = 'str'\n    settings_default['shape'] = 'quadratic'\n    settings_description['shape'] = 'Shape of the ``z`` vs ``x`` function. ``quadratic`` or ``linear`` are supported'\n\n    settings_types['acceleration'] = 'str'\n    settings_default['acceleration'] = 'linear'\n    settings_description['acceleration'] = 'Acceleration law, possible values are ``linear`` or ``constant``'\n\n    settings_types['dt'] = 'float'\n    settings_default['dt'] = None\n    settings_description['dt'] = 'Time step of the simulation'\n\n    settings_types['coords_end'] = 'list(float)'\n    settings_default['coords_end'] = None\n    settings_description['coords_end'] = 'Coordinates of the final ramp point'\n\n    settings_types['plot'] = 'bool'\n    settings_default['plot'] = False\n    settings_description['plot'] = 'Plot the ramp shape. Requires matplotlib installed'\n\n    settings_types['print_info'] = 'bool'\n    settings_default['print_info'] = False\n    settings_description['print_info'] = 'Print information on runtime'\n\n    settings_types['time_offset'] = 'float'\n    settings_default['time_offset'] = 0.0\n    settings_description['time_offset'] = 'Time interval before the start of the ramp acceleration'\n\n    settings_types['offset'] = 'list(float)'\n    settings_default['offset'] = np.zeros((3,))\n    settings_description['offset'] = 'Coordinates of the starting point of the simulation'\n\n    settings_types['return_velocity'] = 'bool'\n    settings_default['return_velocity'] = False\n    settings_description['return_velocity'] = 'If ``True``, nodal velocities are given, if ``False``, coordinates are the output'\n\n    settings_table = settings.SettingsTable()\n    __doc__ += settings_table.generate(settings_types, settings_default, settings_description)\n\n    def __init__(self):\n        self.in_dict = dict()\n\n        self.x_vec = None\n        self.y_vec = None\n        self.x_dot_vec = None\n        self.y_dot_vec = None\n        self.time = None\n        self.n_steps = None\n        self.travel_time = None\n        self.curve_length = None\n\n        self.implemented_shapes = [\"linear\", \"quadratic\"]\n        self.implemented_accelerations = [\"constant\", \"linear\"]\n\n\n    def initialise(self, in_dict, restart=False):\n        self.in_dict = in_dict\n        settings.to_custom_types(self.in_dict, self.settings_types, self.settings_default)\n\n        # input validation\n        self.in_dict['shape'] = self.in_dict['shape'].lower()\n        self.in_dict['acceleration'] = self.in_dict['acceleration'].lower()\n\n        self.calculate_trajectory()\n        if self.in_dict['print_info']:\n            self.print_info()\n\n        if self.in_dict['plot']:\n            self.plot()\n\n        if self.in_dict['return_velocity']:\n            self.diff_trajectory()\n\n    def print_info(self):\n        cout.cout_wrap('Trajectory information:', 2)\n        cout.cout_wrap('\\t-travel time: {}'.format(self.travel_time), 2)\n        cout.cout_wrap('\\t-curve length: {}'.format(self.curve_length), 2)\n        cout.cout_wrap('-------------------------------', 2)\n\n    def plot(self):\n        try:\n            import matplotlib.pyplot as plt\n            plt.figure()\n            plt.scatter(self.x_vec, self.y_vec, c=self.time_vec)\n            plt.colorbar(orientation='horizontal')\n            plt.axis('equal')\n            plt.show()\n        except ModuleNotFoundError:\n            import warnings\n            warnings.warn('Unable to import matplotlib, skipping plot')\n\n    def get_n_steps(self):\n        return self.n_steps\n\n    def __call__(self, params):\n        return self.generate(params)\n\n    def generate(self, params):\n        it = params['it']\n        if self.n_steps is not None:\n            if it >= self.n_steps:\n                return [None]*3\n\n        if self.in_dict['return_velocity']:\n            return np.array([self.x_dot_vec[it], 0.0, self.y_dot_vec[it]]) + self.in_dict['offset']\n        else:\n            return np.array([self.x_vec[it], 0.0, self.y_vec[it]]) + self.in_dict['offset']\n\n    def calculate_trajectory(self):\n        in_dict = self.in_dict\n        # shape variables\n        shape_polynomial = np.zeros((3,))  # [c, b, a] results in y = c + b*x + a*x^2\n        curve_length = 0.0\n\n        # calculate coefficients and curve length\n        if in_dict['shape'] == \"linear\":\n            shape_polynomial[0] = 0.0\n            shape_polynomial[1] = in_dict['coords_end'][1]/in_dict['coords_end'][0]\n            if np.isnan(shape_polynomial[1]):\n                shape_polynomial[1] = 0.0\n            shape_polynomial[2] = 0.0\n            curve_length = linear_curve_length(shape_polynomial, in_dict['coords_end'])\n\n        elif in_dict['shape'] == \"quadratic\":\n            shape_polynomial[2] = (np.arctan(in_dict['angle_end'].value) - in_dict['coords_end'][1]/in_dict['coords_end'][0])/in_dict['coords_end'][0]\n            shape_polynomial[1] = np.arctan(in_dict['angle_end'].value) - 2.0*shape_polynomial[2]*in_dict['coords_end'][0]\n            shape_polynomial[0] = 0.0\n            curve_length = quadratic_curve_length(shape_polynomial, in_dict['coords_end'])\n\n        curve_length = np.abs(curve_length)\n\n        # acceleration\n        acceleration_position_coefficients = None\n        travel_time = 0.0\n        if in_dict['acceleration'] == 'constant':\n            acceleration_position_coefficients = constant_acceleration_position_coeffs(curve_length, np.abs(in_dict['veloc_end'].value))\n            travel_time = constant_acceleration_travel_time(curve_length,\n                                                            np.abs(in_dict['veloc_end'].value))\n        elif in_dict['acceleration'] == 'linear':\n            acceleration_position_coefficients = linear_acceleration_position_coeffs(curve_length, np.abs(in_dict['veloc_end'].value))\n            travel_time = linear_acceleration_travel_time(curve_length,\n                                                          np.abs(in_dict['veloc_end'].value))\n\n        # time\n        n_steps_travel = int(round(travel_time/in_dict['dt'].value))\n        n_steps_offset = int(round(self.in_dict['time_offset'].value/in_dict['dt'].value))\n        self.n_steps = n_steps_offset + n_steps_travel\n        self.time_vec = np.zeros((self.n_steps, ))\n        self.time_vec[n_steps_offset:] = np.linspace(0.0, n_steps_travel*in_dict['dt'].value, n_steps_travel)\n\n        # with t I get s\n        s_vec = P.polyval(self.time_vec, acceleration_position_coefficients)\n        # need to get a function for x(s)\n        # sample s(x) and create an interpolator\n        n_samples = 1000\n        sampled_x_vec = np.linspace(0.0, in_dict['coords_end'][0], n_samples)\n        sampled_s_vec = np.zeros((n_samples, ))\n        for i_sample in range(n_samples):\n            if in_dict['shape'] == \"linear\":\n                sampled_s_vec[i_sample] = np.abs(linear_curve_length(shape_polynomial, np.array([sampled_x_vec[i_sample], 0.0])))\n            elif in_dict['shape'] == 'quadratic':\n                sampled_s_vec[i_sample] = np.abs(quadratic_curve_length(shape_polynomial, np.array([sampled_x_vec[i_sample], 0.0])))\n        x_of_s_interp = sc.interpolate.interp1d(sampled_s_vec, sampled_x_vec, kind='quadratic', fill_value='extrapolate')\n        self.x_vec = x_of_s_interp(s_vec)\n\n        # with x, I obtain y and done\n        self.y_vec = P.polyval(self.x_vec, shape_polynomial)\n        self.travel_time = travel_time\n        self.curve_length = curve_length\n\n    def diff_trajectory(self):\n        dt = self.in_dict['dt'].value\n\n        self.x_dot_vec = np.gradient(self.x_vec, dt)\n        self.y_dot_vec = np.gradient(self.y_vec, dt)\n\n\ndef linear_curve_length(shape_polynomial, coords_end):\n    dzdx_end = shape_polynomial[1]\n\n    length = coords_end[0]*np.sqrt(dzdx_end**2 + 1)\n    return length\n\n\ndef quadratic_curve_length(shape_polynomial, coords_end):\n    dzdx_end = 2.0*shape_polynomial[2]*coords_end[0] + shape_polynomial[1]\n    a = shape_polynomial[2]\n    b = shape_polynomial[1]\n    xe = coords_end[0]\n    length = (2.0*a*xe + b)*np.sqrt((2.0*a*xe + b)**2 + 1.0)\n    length += np.arcsinh(2.0*a*xe + b)\n    length -= b*np.sqrt(b**2 + 1.0)\n    length -= np.arcsinh(b)\n    length /= 4.0*a\n\n    return length\n\n\ndef constant_acceleration_position_coeffs(s_e, s_dot_e):\n    coeffs = (0.0, 0.0, (4.0*s_dot_e**2)/s_e, 0.0)\n    return coeffs\n\n\ndef linear_acceleration_position_coeffs(s_e, s_dot_e):\n    coeff = ((6.0*s_e)**(2./3.)/(2.0*s_dot_e))**(-3.)\n    coeffs = (0.0, 0.0, 0.0, (1./6.)*coeff)\n    return coeffs\n\n\ndef constant_acceleration_travel_time(s_e, s_dot_e):\n    return 2.0*s_e/s_dot_e\n\n\ndef linear_acceleration_travel_time(s_e, s_dot_e):\n    return 3.0*s_e/s_dot_e\n"
  },
  {
    "path": "sharpy/generators/turbvelocityfield.py",
    "content": "import numpy as np\nimport scipy.interpolate as interpolate\nimport h5py as h5\nimport os\nfrom lxml import objectify, etree\n\nimport sharpy.utils.generator_interface as generator_interface\nimport sharpy.utils.settings as settings\nimport sharpy.utils.cout_utils as cout\n\n\n@generator_interface.generator\nclass TurbVelocityField(generator_interface.BaseGenerator):\n    r\"\"\"\n    Turbulent Velocity Field Generator\n\n    ``TurbVelocitityField`` is a class inherited from ``BaseGenerator``\n\n    The ``TurbVelocitityField`` class generates a velocity field based on the input from an [XDMF](http://www.xdmf.org) file.\n    It supports time-dependant fields as well as frozen turbulence.\n\n    To call this generator, the ``generator_id = TurbVelocityField`` shall be used.\n    This is parsed as the value for the ``velocity_field_generator`` key in the desired aerodynamic solver's settings.\n\n    Supported files:\n        - `field_id.xdmf`: Steady or Unsteady XDMF file\n\n    This generator also performs time interpolation between two different time steps. For now, only linear interpolation is possible.\n\n    Space interpolation is done through `scipy.interpolate` trilinear interpolation. However, turbulent fields are\n    read directly from the binary file and not copied into memory. This is performed using `np.memmap`.\n    The overhead of this procedure is ~18% for the interpolation stage, however, initially reading the binary velocity field\n    (which will be much more common with time-domain simulations) is faster by a factor of 1e4.\n    Also, memory savings are quite substantial: from 6Gb for a typical field to a handful of megabytes for the whole program.\n\n    Args:\n        in_dict (dict): Input data in the form of dictionary. See acceptable entries below:\n\n    Attributes:\n\n    See Also:\n        .. py:class:: sharpy.utils.generator_interface.BaseGenerator\n\n    \"\"\"\n    generator_id = 'TurbVelocityField'\n    generator_classification = 'velocity-field'\n\n    settings_types = dict()\n    settings_default = dict()\n    settings_description = dict()\n\n    settings_types['print_info'] = 'bool'\n    settings_default['print_info'] = True\n    settings_description['print_info'] = 'Output solver-specific information in runtime.'\n\n    settings_types['turbulent_field'] = 'str'\n    settings_default['turbulent_field'] = None\n    settings_description['turbulent_field'] = 'XDMF file path of the velocity field'\n\n    settings_types['offset'] = 'list(float)'\n    settings_default['offset'] = np.zeros((3,))\n    settings_description['offset'] = 'Spatial offset in the 3 dimensions'\n\n    settings_types['centre_y'] = 'bool'\n    settings_default['centre_y'] = True\n    settings_description['centre_y'] = 'Flat for changing the domain to [``-y_max/2``, ``y_max/2``]'\n\n    settings_types['periodicity'] = 'str'\n    settings_default['periodicity'] = 'xy'\n    settings_description['periodicity'] = 'Axes in which periodicity is enforced'\n\n    settings_types['frozen'] = 'bool'\n    settings_default['frozen'] = True\n    settings_description['frozen'] = 'If ``True``, the turbulent field will not be updated in time'\n\n    settings_types['store_field'] = 'bool'\n    settings_default['store_field'] = False\n    settings_description['store_field'] = 'If ``True``, the xdmf snapshots are stored in memory. Only two at a time for the linear interpolation'\n\n    settings_table = settings.SettingsTable()\n    __doc__ += settings_table.generate(settings_types, settings_default, settings_description)\n\n    def __init__(self):\n        self.in_dict = dict()\n\n        self.settings = dict()\n\n        self.file = None\n        self.extension = None\n\n        self.grid_data = dict()\n\n        self.interpolator = 3*[None]\n        self.x_periodicity = False\n        self.y_periodicity = False\n\n        # variables for interpolator wrapper\n        self._t0 = -1\n        self._t1 = -1\n        self._it0 = -1\n        self._it1 = -1\n        self._interpolator0 = None\n        self._interpolator1 = None\n        self.coeff = 0.\n        self.double_initialisation = True\n        self.vel_holder0 = 3*[None]\n        self.vel_holder1 = 3*[None]\n\n    def initialise(self, in_dict, restart=False):\n        self.in_dict = in_dict\n        settings.to_custom_types(self.in_dict, self.settings_types, self.settings_default)\n        self.settings = self.in_dict\n\n        _, self.extension = os.path.splitext(self.settings['turbulent_field'])\n\n        if self.extension == '.h5':\n            self.read_btl(self.settings['turbulent_field'])\n        if self.extension == '.xdmf':\n            self.read_xdmf(self.settings['turbulent_field'])\n\n        if 'z' in self.settings['periodicity']:\n            raise ValueError('Periodicitiy setting in TurbVelocityField cannot be z.\\n A turbulent boundary layer is not periodic in the z direction!')\n\n        if 'x' in self.settings['periodicity']:\n            self.x_periodicity = True\n        if 'y' in self.settings['periodicity']:\n            self.y_periodicity = True\n\n    # ADC: VERY VERY UGLY. NEED A BETTER WAY\n    def interpolator_wrapper0(self, coords, i_dim=0):\n        coeff = self.get_coeff()\n        return (1.0 - self.coeff)*self._interpolator0[i_dim](coords) + self.coeff*self._interpolator1[i_dim](coords)\n    def interpolator_wrapper1(self, coords, i_dim=1):\n        coeff = self.get_coeff()\n        return (1.0 - self.coeff)*self._interpolator0[i_dim](coords) + self.coeff*self._interpolator1[i_dim](coords)\n    def interpolator_wrapper2(self, coords, i_dim=2):\n        coeff = self.get_coeff()\n        return (1.0 - self.coeff)*self._interpolator0[i_dim](coords) + self.coeff*self._interpolator1[i_dim](coords)\n\n    def get_coeff(self):\n        return self.coeff\n\n    def init_interpolator(self):\n        if self.settings['frozen']:\n            self.interpolator = self._interpolator0\n            return\n\n        # continuing the ugliness\n        self.interpolator[0] = self.interpolator_wrapper0\n        self.interpolator[1] = self.interpolator_wrapper1\n        self.interpolator[2] = self.interpolator_wrapper2\n\n    # these functions need to define the interpolators\n    def read_btl(self, in_file):\n        \"\"\"\n        Legacy function, not using the custom format based on HDF5 anymore.\n        \"\"\"\n        raise NotImplementedError('The BTL reader is not up to date!')\n\n    def read_xdmf(self, in_file):\n        \"\"\"\n        Reads the xml file `<case_name>.xdmf`. Writes the self.grid_data data structure\n        with all the information necessary.\n\n        Note: this function does not load any turbulence data (such as ux000, ...),\n        it only reads the header information contained in the xdmf file.\n        \"\"\"\n        # store route of file for the other files\n        self.route = os.path.dirname(os.path.abspath(in_file))\n\n        # file to string\n        with open(in_file, 'r') as self.file:\n            data = self.file.read().replace('\\n', '')\n\n        # parse data\n        # this next line is necessary to avoid problems with parsing in the Time part:\n        # <!--Start....\n        # 0.0, 1.0 ...\n        # see https://stackoverflow.com/a/18313932\n        parser = objectify.makeparser(remove_comments=True)\n        tree = objectify.fromstring(data, parser=parser)\n\n        # mesh dimensions\n        self.grid_data['dimensions'] = np.fromstring(tree.Domain.Topology.attrib['Dimensions'],\n                                                     sep=' ',\n                                                     count=3,\n                                                     dtype=int)\n\n        # origin\n        self.grid_data['origin'] = np.fromstring(tree.Domain.Geometry.DataItem[0].text,\n                                                 sep=' ',\n                                                 count=int(tree.Domain.Geometry.DataItem[0].attrib['Dimensions']),\n                                                 dtype=float)\n\n        # dxdydz\n        # because of how XDMF does it, it is actually dzdydx\n        self.grid_data['dxdydz'] = (\n            np.fromstring(tree.Domain.Geometry.DataItem[1].text,\n                          sep=' ',\n                          count=int(tree.Domain.Geometry.DataItem[1].attrib['Dimensions']),\n                          dtype=float))\n\n        # now onto the grid\n        # time information\n        # [0] is start, [1] is stride\n        self.grid_data['time'] = np.fromstring(tree.Domain.Grid.Time.DataItem.text,\n                                               sep=' ',\n                                               count=2,\n                                               dtype=float)\n        self.grid_data['n_grid'] = len(tree.Domain.Grid.Grid)\n        # self.grid_data['grid'] = [dict()]*self.grid_data['n_grid']\n        self.grid_data['grid'] = []\n        for i, i_grid in enumerate(tree.Domain.Grid.Grid):\n            self.grid_data['grid'].append(dict())\n            # cycle through attributes\n            for k_attrib, v_attrib in i_grid.attrib.items():\n                self.grid_data['grid'][i][k_attrib] = v_attrib\n            # get Attributes (upper case A is not a mistake)\n            for i_attrib, attrib in enumerate(i_grid.Attribute):\n                self.grid_data['grid'][i][attrib.attrib['Name']] = dict()\n                self.grid_data['grid'][i][attrib.attrib['Name']]['file'] = (\n                    attrib.DataItem.text.replace(' ', ''))\n                if attrib.DataItem.attrib['Precision'].strip() == '4':\n                    self.grid_data['grid'][i][attrib.attrib['Name']]['Precision'] = np.float32\n                elif attrib.DataItem.attrib['Precision'].strip() == '8':\n                    self.grid_data['grid'][i][attrib.attrib['Name']]['Precision'] = np.float64\n\n        # now we have the file names and the dimensions\n        self.grid_data['initial_x_grid'] = np.array(np.arange(0,\n            self.grid_data['dimensions'][2]))*self.grid_data['dxdydz'][2]\n        # z in the file is -y for us in sharpy (y_sharpy = right)\n        self.grid_data['initial_y_grid'] = np.array(np.arange(0,\n            self.grid_data['dimensions'][1]))*self.grid_data['dxdydz'][1]\n        # y in the file is z for us in sharpy (up)\n        self.grid_data['initial_z_grid'] = np.array(np.arange(0,\n            self.grid_data['dimensions'][0]))*self.grid_data['dxdydz'][0]\n\n        # the domain now goes:\n        # x \\in [0, dimensions[0]*dx]\n        # y \\in [-dimensions[2]*dz, 0]\n        # z \\in [0, dimensions[1]*dy]\n        centre_z_offset = 0.\n        if self.settings['centre_y']:\n            centre_z_offset = -0.5*(self.grid_data['initial_z_grid'][-1] - self.grid_data['initial_z_grid'][0])\n\n        self.grid_data['initial_x_grid'] += self.settings['offset'][0] + self.grid_data['origin'][0]\n        self.grid_data['initial_x_grid'] -= np.max(self.grid_data['initial_x_grid'])\n        self.grid_data['initial_y_grid'] += self.settings['offset'][1] + self.grid_data['origin'][1]\n        self.grid_data['initial_z_grid'] += self.settings['offset'][2] + self.grid_data['origin'][2] + centre_z_offset\n\n        self.bbox = self.get_field_bbox(self.grid_data['initial_x_grid'],\n                                        self.grid_data['initial_y_grid'],\n                                        self.grid_data['initial_z_grid'],\n                                        frame='G')\n        if self.settings['print_info']:\n            cout.cout_wrap('The domain bbox is:', 1)\n            cout.cout_wrap(' x = [' + str(self.bbox[0, 0]) + ', ' + str(self.bbox[0, 1]) + ']', 1)\n            cout.cout_wrap(' y = [' + str(self.bbox[1, 0]) + ', ' + str(self.bbox[1, 1]) + ']', 1)\n            cout.cout_wrap(' z = [' + str(self.bbox[2, 0]) + ', ' + str(self.bbox[2, 1]) + ']', 1)\n\n    def generate(self, params, uext):\n        zeta = params['zeta']\n        for_pos = params['for_pos']\n        t = params['t']\n\n        self.update_cache(t)\n\n        self.update_coeff(t)\n\n        self.init_interpolator()\n        self.interpolate_zeta(zeta,\n                              for_pos,\n                              uext)\n\n    def update_cache(self, t):\n        self.double_initialisation = False\n        if self.settings['frozen']:\n            if self._interpolator0 is None:\n                self._t0 = self.timestep_2_time(0)\n                self._it0 = 0\n                self._interpolator0 = self.read_grid(self._it0, i_cache=0)\n            return\n        # most common case: t already in the [t0, t1] interval\n        if self._t0 <= t <= self._t1:\n            return\n\n        # t < t0, something weird (time going backwards)\n        if t < self._t0:\n            raise ValueError('Please make sure everything is ok. Your time is going backwards.')\n\n        # t > t1, need initialisation\n        if t > self._t1:\n            new_it = self.time_2_timestep(t)\n            # new timestep requires initialising the two of them (not likely at all)\n            # this means that the simulation timestep > LES timestep\n            if new_it > self._it1:\n                self.double_initialisation = True\n            else:\n                # t1 goes to t0\n                self._t0 = self._t1\n                self._it0 = self._it1\n                self._interpolator0 = self._interpolator1.copy()\n\n                # t1 updates to the next (new_it + 1)\n                self._it1 = new_it + 1\n                self._t1 = self.timestep_2_time(self._it1)\n                self._interpolator1 = self.read_grid(self._it1, i_cache=1)\n                return\n\n        # last case, both interp need to be initialised\n        if (self._t0 is None or self.double_initialisation):\n            self._t0 = self.timestep_2_time(new_it)\n            self._it0 = new_it\n            self._interpolator0 = self.read_grid(self._it0, i_cache=0)\n\n            self._it1 = new_it + 1\n            self._t1 = self.timestep_2_time(self._it1)\n            self._interpolator1 = self.read_grid(self._it1, i_cache=1)\n\n    def update_coeff(self, t):\n        if self.settings['frozen']:\n            self.coeff = 0.0\n            return\n\n        self.coeff = self.linear_coeff([self._t0, self._t1], t)\n        return\n\n    def time_2_timestep(self, t):\n        return int(max(0, np.floor((t - self.grid_data['time'][0])/self.grid_data['time'][1])))\n\n    def timestep_2_time(self, it):\n        return it*self.grid_data['time'][1] + self.grid_data['time'][0]\n\n    def get_field_bbox(self, x_grid, y_grid, z_grid, frame='G'):\n        bbox = np.zeros((3, 2))\n        bbox[0, :] = [np.min(x_grid), np.max(x_grid)]\n        bbox[1, :] = [np.min(y_grid), np.max(y_grid)]\n        bbox[2, :] = [np.min(z_grid), np.max(z_grid)]\n        if frame == 'G':\n            bbox[:, 0] = self.gstar_2_g(bbox[:, 0])\n            bbox[:, 1] = self.gstar_2_g(bbox[:, 1])\n        return bbox\n\n    def create_interpolator(self, data, x_grid, y_grid, z_grid, i_dim):\n        interpolator = interpolate.RegularGridInterpolator((x_grid, y_grid, z_grid),\n                                                            data,\n                                                            bounds_error=False,\n                                                            fill_value=0.0)\n        return interpolator\n\n\n    def interpolate_zeta(self, zeta, for_pos, u_ext, interpolator=None, offset=np.zeros((3))):\n        if interpolator is None:\n            interpolator = self.interpolator\n\n        for isurf in range(len(zeta)):\n            _, n_m, n_n = zeta[isurf].shape\n            for i_m in range(n_m):\n                for i_n in range(n_n):\n                    coord = self.g_2_gstar(self.apply_periodicity(zeta[isurf][:, i_m, i_n] + for_pos[0:3] + offset))\n                    for i_dim in range(3):\n                        try:\n                            u_ext[isurf][i_dim, i_m, i_n] = self.interpolator[i_dim](coord)\n                        except ValueError:\n                            print(coord)\n                            raise ValueError()\n                    u_ext[isurf][:, i_m, i_n] = self.gstar_2_g(u_ext[isurf][:, i_m, i_n])\n\n\n    @staticmethod\n    def periodicity(x, bbox):\n        try:\n            new_x = bbox[0] + divmod(x - bbox[0], bbox[1] - bbox[0])[1]\n        except ZeroDivisionError:\n            new_x = x\n        return new_x\n\n\n    def apply_periodicity(self, coord):\n        new_coord = coord.copy()\n        if self.x_periodicity:\n            i = 0\n            new_coord[i] = self.periodicity(new_coord[i], self.bbox[i, :])\n        if self.y_periodicity:\n            i = 1\n            new_coord[i] = self.periodicity(new_coord[i], self.bbox[i, :])\n\n        # if self.x_periodicity:\n        #TODO I think this does not work when bbox is not ordered (bbox[i, 0] is not < bbox[i, 1])\n            # i = 0\n            # # x in interval:\n            # if self.bbox[i, 0] <= new_coord[i] <= self.bbox[i, 1]:\n                # pass\n            # # lower than min bbox\n            # elif new_coord[i] < self.bbox[i, 0]:\n                # temp = divmod(new_coord[i], self.bbox[i, 0])[1]\n                # if np.isnan(temp):\n                    # pass\n                # else:\n                    # new_coord[i] = temp\n\n            # # greater than max bbox\n            # elif new_coord[i] > self.bbox[i, 1]:\n                # temp = divmod(new_coord[i], self.bbox[i, 1])[1]\n                # if np.isnan(temp):\n                    # pass\n                # else:\n                    # new_coord[i] = temp\n\n        # if self.y_periodicity:\n            # i = 1\n            # # y in interval:\n            # if self.bbox[i, 0] <= new_coord[i] <= self.bbox[i, 1]:\n                # pass\n            # # lower than min bbox\n            # elif new_coord[i] < self.bbox[i, 0]:\n                # try:\n                    # temp = divmod(new_coord[i], self.bbox[i, 0])[1]\n                # except ZeroDivisionError:\n                    # temp = new_coord[i]\n                # if np.isnan(temp):\n                    # pass\n                # else:\n                    # new_coord[i] = temp\n                    # if new_coord[i] < 0.0:\n                        # new_coord[i] = self.bbox[i, 1] + new_coord[i]\n            # # greater than max bbox\n            # elif new_coord[i] > self.bbox[i, 1]:\n                # temp = divmod(new_coord[i], self.bbox[i, 1])[1]\n                # if np.isnan(temp):\n                    # pass\n                # else:\n                    # new_coord[i] = temp\n                    # if new_coord[i] < 0.0:\n                        # new_coord[i] = self.bbox[i, 1] + new_coord[i]\n        return new_coord\n\n\n    @staticmethod\n    def linear_coeff(t_vec, t):\n        # this is 0 when t == t_vec[0]\n        # 1 when t == t_vec[1]\n        return (t - t_vec[0])/(t_vec[1] - t_vec[0])\n\n    def read_grid(self, i_grid, i_cache=0):\n        \"\"\"\n        This function returns an interpolator list of size 3 made of `scipy.interpolate.RegularGridInterpolator`\n        objects.\n        \"\"\"\n        velocities = ['ux', 'uy', 'uz']\n        interpolator = list()\n        for i_dim in range(3):\n            file_name = self.grid_data['grid'][i_grid][velocities[i_dim]]['file']\n            if i_cache == 0:\n                if not self.settings['store_field']:\n                    # load file, but dont copy it\n                    self.vel_holder0[i_dim] = np.memmap(self.route + '/' + file_name,\n                                                   # dtype='float64',\n                                                   dtype=self.grid_data['grid'][i_grid][velocities[i_dim]]['Precision'],\n                                                   shape=(self.grid_data['dimensions'][2],\n                                                          self.grid_data['dimensions'][1],\n                                                          self.grid_data['dimensions'][0]),\n                                                   order='F')\n                else:\n                    # load and store file\n                    self.vel_holder0[i_dim] = (np.fromfile(open(self.route + '/' + file_name, 'rb'),\n                                                          dtype=self.grid_data['grid'][i_grid][velocities[i_dim]]['Precision']).\\\n                                                          reshape((self.grid_data['dimensions'][2],\n                                                                   self.grid_data['dimensions'][1],\n                                                                   self.grid_data['dimensions'][0]),\n                                                                   order='F'))\n\n                interpolator.append(self.create_interpolator(self.vel_holder0[i_dim],\n                                                        self.grid_data['initial_x_grid'],\n                                                        self.grid_data['initial_y_grid'],\n                                                        self.grid_data['initial_z_grid'],\n                                                        i_dim=i_dim))\n            elif i_cache == 1:\n                if not self.settings['store_field']:\n                    # load file, but dont copy it\n                    self.vel_holder1[i_dim] = np.memmap(self.route + '/' + file_name,\n                                                   # dtype='float64',\n                                                   dtype=self.grid_data['grid'][i_grid][velocities[i_dim]]['Precision'],\n                                                   shape=(self.grid_data['dimensions'][2],\n                                                          self.grid_data['dimensions'][1],\n                                                          self.grid_data['dimensions'][0]),\n                                                   order='F')\n                else:\n                    # load and store file\n                    self.vel_holder1[i_dim] = (np.fromfile(open(self.route + '/' + file_name, 'rb'),\n                                                          dtype=self.grid_data['grid'][i_grid][velocities[i_dim]]['Precision']).\\\n                                                          reshape((self.grid_data['dimensions'][2],\n                                                                   self.grid_data['dimensions'][1],\n                                                                   self.grid_data['dimensions'][0]),\n                                                                   order='F'))\n\n                interpolator.append(self.create_interpolator(self.vel_holder1[i_dim],\n                                                        self.grid_data['initial_x_grid'],\n                                                        self.grid_data['initial_y_grid'],\n                                                        self.grid_data['initial_z_grid'],\n                                                        i_dim=i_dim))\n            else:\n                raise Error('i_cache has to be 0 or 1')\n        return interpolator\n\n    @staticmethod\n    def g_2_gstar(coord_g):\n        return np.array([coord_g[0], coord_g[2], -coord_g[1]])\n\n    @staticmethod\n    def gstar_2_g(coord_star):\n        return np.array([coord_star[0], -coord_star[2], coord_star[1]])\n"
  },
  {
    "path": "sharpy/generators/turbvelocityfieldbts.py",
    "content": "import numpy as np\nimport scipy.interpolate as interpolate\n\nimport sharpy.utils.generator_interface as generator_interface\nimport sharpy.utils.settings as settings\nimport sharpy.utils.cout_utils as cout\n\n\ndef interp_rectgrid_vectorfield(points, grid, vector_field, out_value, regularGrid=False, num_cores=1):\n    # check: https://en.wikipedia.org/wiki/Trilinear_interpolation\n    npoints = points.shape[0]\n    output = np.zeros((npoints, 3))\n    if regularGrid:\n        length = np.zeros((3))\n        npoints_grid = np.zeros((3), dtype=int)\n        delta = np.zeros((3))\n        for idim in range(3):\n            length[idim] = grid[idim][-1] - grid[idim][0]\n            npoints_grid[idim] = len(grid[idim])\n            delta[idim] = length[idim]/(npoints_grid[idim] - 1)\n\n    for ipoint in range(npoints):\n        # Check if the point is outside the box\n        isout = False\n        for idim in range(3):\n            if (points[ipoint, idim] > grid[idim][-1]) or (points[ipoint, idim] < grid[idim][0]):\n                isout = True\n                output[ipoint, :] = out_value\n                break\n\n        # If the point is in the grid\n        if not isout:\n            # Compute the position\n            igrid = np.zeros((3,), dtype=int)\n            if regularGrid:\n                for idim in range(3):\n                    igrid[idim] = int(np.ceil((points[ipoint, idim] - grid[idim][0])/delta[idim]))\n            else:\n                for idim in range(3):\n                    while points[ipoint, idim] >= grid[idim][igrid[idim]]:\n                        igrid[idim] += 1\n\n            xvec = np.array([grid[0][igrid[0] - 1],\n                             grid[0][igrid[0]    ]])\n            xvec = np.concatenate((xvec, xvec, xvec, xvec))\n            yvec = np.array([grid[1][igrid[1] - 1],\n                             grid[1][igrid[1] - 1],\n                             grid[1][igrid[1]    ],\n                             grid[1][igrid[1]    ]])\n            yvec = np.concatenate((yvec, yvec))\n            zvec = np.ones((8))\n            zvec[0:4] *= grid[2][igrid[2] - 1]\n            zvec[4:8] *= grid[2][igrid[2]    ]\n\n            A = np.zeros((8,8))\n            A[:, 0] = np.ones((8,))\n            A[:, 1] = xvec\n            A[:, 2] = yvec\n            A[:, 3] = zvec\n            A[:, 4] = xvec*yvec\n            A[:, 5] = xvec*zvec\n            A[:, 6] = yvec*zvec\n            A[:, 7] = xvec*yvec*zvec\n\n            Ainv = np.linalg.inv(A)\n            x = points[ipoint, 0]\n            y = points[ipoint, 1]\n            z = points[ipoint, 2]\n            for idim in range(3):\n                b = np.array([vector_field[idim, igrid[0] - 1, igrid[1] - 1, igrid[2] - 1],\n                              vector_field[idim, igrid[0]    , igrid[1] - 1, igrid[2] - 1],\n                              vector_field[idim, igrid[0] - 1, igrid[1]    , igrid[2] - 1],\n                              vector_field[idim, igrid[0]    , igrid[1]    , igrid[2] - 1],\n                              vector_field[idim, igrid[0] - 1, igrid[1] - 1, igrid[2]    ],\n                              vector_field[idim, igrid[0]    , igrid[1] - 1, igrid[2]    ],\n                              vector_field[idim, igrid[0] - 1, igrid[1]    , igrid[2]    ],\n                              vector_field[idim, igrid[0]    , igrid[1]    , igrid[2]    ]\n                             ])\n                f = np.dot(Ainv, b)\n                output[ipoint, idim] = f[0] + f[1]*x + f[2]*y + f[3]*z + f[4]*x*y + f[5]*x*z + f[6]*y*z + f[7]*x*y*z\n\n    return output\n\n\n@generator_interface.generator\nclass TurbVelocityFieldBts(generator_interface.BaseGenerator):\n    r\"\"\"\n    Turbulent Velocity Field Generator from TurbSim bts files\n\n    ``TurbVelocitityFieldBts`` is a class inherited from ``BaseGenerator``\n\n    The ``TurbVelocitityFieldBts`` class generates a velocity field based on\n    the input from a bts file generated by TurbSim.\n    https://nwtc.nrel.gov/TurbSim\n\n    To call this generator, the ``generator_id = TurbVelocityField`` shall be used.\n    This is parsed as the value for the ``velocity_field_generator``\n    key in the desired aerodynamic solver's settings.\n\n    \"\"\"\n    generator_id = 'TurbVelocityFieldBts'\n    generator_classification = 'velocity-field'\n\n    settings_types = dict()\n    settings_default = dict()\n    settings_description = dict()\n\n    settings_types['print_info'] = 'bool'\n    settings_default['print_info'] = True\n    settings_description['print_info'] = 'Output solver-specific information in runtime'\n\n    settings_types['turbulent_field'] = 'str'\n    settings_default['turbulent_field'] = None\n    settings_description['turbulent_field'] = 'BTS file path of the velocity file'\n\n    settings_types['new_orientation'] = 'str'\n    settings_default['new_orientation'] = 'xyz'\n    settings_description['new_orientation'] = 'New orientation of the axes'\n\n    settings_types['u_fed'] = 'list(float)'\n    settings_default['u_fed'] = np.zeros((3,))\n    settings_description['u_fed'] = 'Velocity at which the turbulence field is fed into the solid'\n\n    settings_types['u_out'] = 'list(float)'\n    settings_default['u_out'] = np.zeros((3,))\n    settings_description['u_out'] = 'Velocity to set for points outside the interpolating box'\n\n    settings_types['case_with_tower'] = 'bool'\n    settings_default['case_with_tower'] = False\n    settings_description['case_with_tower'] = 'Does the SHARPy case will include the tower in the simulation?'\n\n    settings_types['interpolate_wake'] = 'bool'\n    settings_default['interpolate_wake'] = True\n    settings_description['interpolate_wake'] = 'If False, u_out will be assigned to all the points in the wake'\n\n    settings_types['num_cores'] = 'int'\n    settings_default['num_cores'] = 1\n    settings_description['num_cores'] = 'Number of cores to be used in parallel computation'\n\n    settings_types['extra_offset'] = 'float'\n    settings_default['extra_offset'] = 0.\n    settings_description['extra_offset'] = 'Distance [m] to displace the turbulence box'\n\n    settings_types['use_3_4_interpolation'] = 'bool'\n    settings_default['use_3_4_interpolation'] = False\n    settings_description['use_3_4_interpolation'] = 'Use the farfield velocity at 3/4 chord for all the points along the chord'\n\n    setting_table = settings.SettingsTable()\n    __doc__ += setting_table.generate(settings_types, settings_default, settings_description)\n\n    def __init__(self):\n        self.interpolator = []\n        self.bbox = None\n\n        self.x_grid = None\n        self.y_grid = None\n        self.z_grid = None\n\n        self.vel = None\n\n        self.dist_to_recirculate = None\n        self.gird_size_vec = None\n        self.grid_size_ufed_dir = None\n\n    def initialise(self, in_dict, restart=False):\n        self.in_dict = in_dict\n        settings.to_custom_types(self.in_dict, self.settings_types, self.settings_default, no_ctype=True)\n        self.settings = self.in_dict\n\n        self.x_grid, self.y_grid, self.z_grid, self.vel = self.read_turbsim_bts(self.settings['turbulent_field'], self.settings['case_with_tower'])\n        if not self.settings['new_orientation'] == 'xyz':\n            # self.settings['new_orientation'] = 'zyx'\n            self.x_grid, self.y_grid, self.z_grid, self.vel = self.change_orientation(self.x_grid, self.y_grid, self.z_grid, self.vel, self.settings['new_orientation'])\n\n        self.bbox = self.get_field_bbox(self.x_grid, self.y_grid, self.z_grid)\n        if self.settings['print_info']:\n            cout.cout_wrap('The domain bbox is:', 1)\n            cout.cout_wrap(' x = [' + str(self.bbox[0, 0]) + ', ' + str(self.bbox[0, 1]) + ']', 1)\n            cout.cout_wrap(' y = [' + str(self.bbox[1, 0]) + ', ' + str(self.bbox[1, 1]) + ']', 1)\n            cout.cout_wrap(' z = [' + str(self.bbox[2, 0]) + ', ' + str(self.bbox[2, 1]) + ']', 1)\n\n        self.dist_to_recirculate = 0.\n        self.grid_size_vec = np.array([np.max(self.x_grid) - np.min(self.x_grid),\n                                                   np.max(self.y_grid) - np.min(self.y_grid),\n                                                   np.max(self.z_grid) - np.min(self.z_grid)])\n        self.grid_size_ufed_dir = np.dot(self.grid_size_vec,\n                                         self.settings['u_fed']/np.linalg.norm(self.settings['u_fed']))\n\n        # self.init_interpolator(x_grid, y_grid, z_grid, vel)\n\n    def init_interpolator(self, x_grid, y_grid, z_grid, vel):\n\n        pass\n        # for ivel in range(3):\n        #     self.interpolator.append(interpolate.RegularGridInterpolator((x_grid, y_grid, z_grid),\n        #                                                         vel[ivel,:,:,:],\n        #                                                         bounds_error=False,\n        #                                                         fill_value=self.settings['u_out'][ivel]))\n\n    def generate(self, params, uext):\n        zeta = params['zeta']\n        for_pos = params['for_pos']\n        t = params['t']\n\n        try:\n            is_wake = params['is_wake']\n        except KeyError:\n            is_wake = False\n\n        if is_wake and not self.settings['interpolate_wake']:\n            # The generator has received a wake and it will not be interpolated\n            for isurf in range(len(uext)):\n                _, n_m, n_n = uext[isurf].shape\n                for i_m in range(n_m):\n                    for i_n in range(n_n):\n                        uext[isurf][:, i_m, i_n] = self.settings['u_out']\n\n        else:\n            offset_mod = np.linalg.norm(self.settings['u_fed'])*t + self.settings['extra_offset']\n            while ((offset_mod - self.dist_to_recirculate) > self.grid_size_ufed_dir):\n                cout.cout_wrap(\"Recirculate inflow\", 2)\n                self.dist_to_recirculate += self.grid_size_ufed_dir\n            # Through \"offstet\" zeta can be modified to simulate the turbulence being fed to the solid\n            # Usual method for wind turbines\n            offset = (-1.*offset_mod + self.dist_to_recirculate)*self.settings['u_fed']/np.linalg.norm(self.settings['u_fed'])\n            if ((not is_wake) and (self.settings['use_3_4_interpolation'])):\n                nsurf = len(zeta)\n                zeta_3_4_chord = [None]*nsurf\n                uext_3_4_chord = [None]*nsurf\n                for isurf in range(nsurf):\n                    N = zeta[isurf].shape[2]\n                    zeta_3_4_chord[isurf] = np.zeros((3, 1, N))\n                    uext_3_4_chord[isurf] = np.zeros((3, 1, N))\n                    # Compute the 3/4 chord position\n                    for i_n in range(N):\n                        zeta_3_4_chord[isurf][:, 0, i_n] = (zeta[isurf][:, 0, i_n] + 3.*zeta[isurf][:, -1, i_n])/4.\n\n                # Interpolate at the 3/4 chord point\n                self.interpolate_zeta(zeta_3_4_chord,\n                                      for_pos,\n                                      uext_3_4_chord,\n                                      offset = offset)\n\n                # Assign the values to all chord points\n                for isurf in range(nsurf):\n                    _, M, N = zeta[isurf].shape\n                    for i_n in range(N):\n                        for i_m in range(M):\n                            uext[isurf][:, i_m, i_n] = uext_3_4_chord[isurf][:, 0, i_n]\n\n            else:\n                self.interpolate_zeta(zeta,\n                                      for_pos,\n                                      uext,\n                                      offset = offset)\n\n    def interpolate_zeta(self, zeta, for_pos, u_ext, interpolator=None, offset=np.zeros((3))):\n        # if interpolator is None:\n        #     interpolator = self.interpolator\n\n        for isurf in range(len(zeta)):\n            _, n_m, n_n = zeta[isurf].shape\n\n            # Reorder the coordinates\n            points_list = np.zeros((n_m*n_n, 3))\n            ipoint = 0\n            for i_m in range(n_m):\n                for i_n in range(n_n):\n                    points_list[ipoint, :] = zeta[isurf][:, i_m, i_n] + for_pos[0:3] + offset\n                    ipoint += 1\n\n            # Interpolate\n            list_uext = interp_rectgrid_vectorfield(points_list,\n                                                 (self.x_grid, self.y_grid, self.z_grid),\n                                                 self.vel,\n                                                 self.settings['u_out'],\n                                                 regularGrid=True,\n                                                 num_cores=self.settings['num_cores'])\n\n            # Reorder the values\n            ipoint = 0\n            for i_m in range(n_m):\n                for i_n in range(n_n):\n                    u_ext[isurf][:, i_m, i_n] = list_uext[ipoint]\n                    ipoint += 1\n\n    @staticmethod\n    def read_turbsim_bts(fname, case_with_tower=False):\n\n        # This post may be useful to understand the function:\n        # https://wind.nrel.gov/forum/wind/viewtopic.php?t=1384\n\n        dtype = np.dtype([\n            (\"id\", np.int16),\n            (\"nz\", np.int32),\n            (\"ny\", np.int32),\n            (\"tower_points\", np.int32),\n            (\"ntime_steps\", np.int32),\n            (\"dz\", np.float32),\n            (\"dy\", np.float32),\n            (\"dt\", np.float32),\n            (\"u_mean\", np.float32),\n            (\"HubHt\", np.float32),\n            (\"Zbottom\", np.float32),\n            (\"u_slope_scaling\", np.float32),\n            (\"u_offset_scaling\", np.float32),\n            (\"v_slope_scaling\", np.float32),\n            (\"v_offset_scaling\", np.float32),\n            (\"w_slope_scaling\", np.float32),\n            (\"w_offset_scaling\", np.float32),\n            (\"n_char_description\", np.int32),\n            (\"description\", np.dtype((bytes, 73))),\n            # (\"data\", np.dtype((bytes, 12865632)))\n            (\"data\", np.dtype((bytes, 2)))\n        ])\n\n        fileContent = np.fromfile(fname, dtype=dtype)\n        n_char_description = fileContent[0][17]\n        nbytes_data = 2*3*fileContent[0][4]*fileContent[0][1]*fileContent[0][2]\n        dtype = np.dtype([\n            (\"id\", np.int16),\n            (\"nz\", np.int32),\n            (\"ny\", np.int32),\n            (\"tower_points\", np.int32),\n            (\"ntime_steps\", np.int32),\n            (\"dz\", np.float32),\n            (\"dy\", np.float32),\n            (\"dt\", np.float32),\n            (\"u_mean\", np.float32),\n            (\"HubHt\", np.float32),\n            (\"Zbottom\", np.float32),\n            (\"u_slope_scaling\", np.float32),\n            (\"u_offset_scaling\", np.float32),\n            (\"v_slope_scaling\", np.float32),\n            (\"v_offset_scaling\", np.float32),\n            (\"w_slope_scaling\", np.float32),\n            (\"w_offset_scaling\", np.float32),\n            (\"n_char_description\", np.int32),\n            (\"description\", np.dtype((bytes, n_char_description))),\n            (\"data\", np.dtype((bytes, nbytes_data)))\n        ])\n\n        fileContent = np.fromfile(fname, dtype=dtype)\n\n        dictionary = {}\n        for i in range(len(fileContent.dtype.names)):\n            dictionary[fileContent.dtype.names[i]] = fileContent[0][i]\n\n        scaling = np.array([dictionary['u_slope_scaling'], dictionary['v_slope_scaling'], dictionary['w_slope_scaling']])\n        offset = np.array([dictionary['u_offset_scaling'], dictionary['v_offset_scaling'], dictionary['w_offset_scaling']])\n\n        # Checks\n        # print(\"Case description: \", dictionary['description'])\n        if dictionary['description'][-1] == \".\":\n            cout.cout_wrap((\"WARNING: I think there is something wrong with the case description. The length is not %d characters\" %  n_char_description), 3)\n            # print(\"Input\", dictionary['n_char_description'], \"as the number of characters of the case description\")\n\n        # vel_aux = np.fromstring(dictionary['data'], dtype='>i2')\n        vel_aux = np.fromstring(dictionary['data'], dtype=np.int16)\n        vel = np.zeros((3,dictionary['ntime_steps'],dictionary['ny'],dictionary['nz']))\n\n        counter = -1\n        for ix in range(dictionary['ntime_steps']):\n            for iz in range(dictionary['nz']):\n                for iy in range(dictionary['ny']):\n                    for ivel in range(3):\n                        counter += 1\n                        vel[ivel,-ix,iy,iz] = (vel_aux[counter] - offset[ivel])/scaling[ivel]\n\n        # Generate the grid\n        height = dictionary['dz']*(dictionary['nz'] - 1)\n        width = dictionary['dy']*(dictionary['ny'] - 1)\n\n        x_grid = np.linspace(-dictionary['ntime_steps'] + 1, 0, dictionary['ntime_steps'])*dictionary['dt']*dictionary['u_mean']\n        y_grid = np.linspace(-width/2, width/2, dictionary['ny'])\n        if case_with_tower:\n            z_grid = np.linspace(dictionary['Zbottom'], dictionary['Zbottom'] + height, dictionary['nz'])\n        else:\n            z_grid = np.linspace(-height/2, height/2, dictionary['nz'])\n\n        return x_grid, y_grid, z_grid, vel\n\n    @staticmethod\n    def change_orientation(old_xgrid, old_ygrid, old_zgrid, old_vel, new_orientation_input):\n        old_grid = []\n        old_grid.append(old_xgrid.copy())\n        old_grid.append(old_ygrid.copy())\n        old_grid.append(old_zgrid.copy())\n        new_orientation = (\"%s.\" % new_orientation_input)[:-1]\n\n        # Generate information for new_orientation\n        if not old_vel.shape[0] == 3:\n            print(\"ERROR: velocity must have three dimension\")\n        if (not (len(old_vel[0,:,0,0]) == len(old_xgrid))) or (not (len(old_vel[0,0,:,0]) == len(old_ygrid))) or (not (len(old_vel[0,0,0,:]) == len(old_zgrid))):\n            print(\"ERROR: dimensions mismatch\")\n            return\n\n        old_dim = np.array([len(old_xgrid),len(old_ygrid),len(old_zgrid)])\n        position_in_old = np.zeros((3), dtype=int)\n        sign = np.array([1,1,1], dtype=int)\n        for ivel in range(3):\n            if new_orientation[0] == \"-\":\n                sign[ivel] = -1\n                new_orientation = new_orientation[1:]\n            if new_orientation[0] == \"x\":\n                position_in_old[ivel] = 0\n            elif new_orientation[0] == \"y\":\n                position_in_old[ivel] = 1\n            elif new_orientation[0] == \"z\":\n                position_in_old[ivel] = 2\n\n            new_orientation = new_orientation[1:]\n        # print(\"position_in_old: \", position_in_old)\n\n        # Check the new orientation system\n        new_ux = np.zeros((3), dtype=int)\n        new_uy = np.zeros((3), dtype=int)\n        new_uz = np.zeros((3), dtype=int)\n\n        new_ux[position_in_old[0]] = sign[0]\n        new_uy[position_in_old[1]] = sign[1]\n        new_uz[position_in_old[2]] = sign[2]\n\n        aux_ux = np.cross(new_uy, new_uz)\n        aux_uy = np.cross(new_uz, new_ux)\n        aux_uz = np.cross(new_ux, new_uy)\n\n        if (not (np.abs(aux_ux - new_ux) < 1e-9).all()) or (not (np.abs(aux_uy - new_uy) < 1e-9).all()) or (not (np.abs(aux_uz - new_uz) < 1e-9).all()):\n            print(\"ERROR: The new coordinate system is not coherent\")\n            print(\"ux error: \", aux_ux - new_ux)\n            print(\"uy error: \", aux_uy - new_uy)\n            print(\"uz error: \", aux_uz - new_uz)\n\n        # Output variables\n        new_grid = [None]*3\n        new_dim = old_dim[position_in_old]\n\n        for ivel in range(3):\n            new_grid[ivel] = old_grid[position_in_old[ivel]]*sign[ivel]\n            if sign[ivel] == -1:\n                new_grid[ivel] = new_grid[ivel][::-1]\n\n        new_vel = np.zeros((3,new_dim[0],new_dim[1],new_dim[2]))\n        # print(\"old_dim:\", old_dim)\n        # print(\"new_dim:\", new_dim)\n        # print(\"old_vel.shape:\", old_vel.shape)\n        # print(\"new_vel.shape:\", new_vel.shape)\n\n        # These loops will index variables associated with the new grid\n        for ix in range(new_dim[0]):\n            for iy in range(new_dim[1]):\n                for iz in range(new_dim[2]):\n                    new_i = np.array([ix, iy, iz])\n                    # old_i = np.array([new_i[position_in_old[0]]*sign[0], new_i[position_in_old[1]]*sign[1], new_i[position_in_old[2]]*sign[2]])\n                    old_i = np.array([new_i[position_in_old[0]], new_i[position_in_old[1]], new_i[position_in_old[2]]])\n                    for icoord in range(3):\n                        if sign[icoord] == -1:\n                            old_i[icoord] = -1*old_i[icoord] - 1\n                    for ivel in range(3):\n                        # print(\"moving: \", position_in_old[ivel], ix, iy, iz, \"to: \", ivel,new_i[0],new_i[1],new_i[2])\n                        new_vel[ivel,new_i[0],new_i[1],new_i[2]] = old_vel[position_in_old[ivel], old_i[0], old_i[1], old_i[2]]*sign[ivel]\n\n        return new_grid[0], new_grid[1], new_grid[2], new_vel\n\n    def get_field_bbox(self, x_grid, y_grid, z_grid):\n        bbox = np.zeros((3, 2))\n        bbox[0, :] = [np.min(x_grid), np.max(x_grid)]\n        bbox[1, :] = [np.min(y_grid), np.max(y_grid)]\n        bbox[2, :] = [np.min(z_grid), np.max(z_grid)]\n        return bbox\n"
  },
  {
    "path": "sharpy/io/__init__.py",
    "content": "\"\"\"UDP Input/Output\n\n\nThis package contains the routines for the SHARPy input and output via UDP.\n\nThe main interface is performed through the :class:`~sharpy.io.network_interface.NetworkLoader`\n\"\"\"\n"
  },
  {
    "path": "sharpy/io/inout_variables.py",
    "content": "import struct\nimport yaml\nimport logging\nimport numpy as np\n\nlogger = logging.getLogger(__name__)\n\n\nclass Variable:\n    num_vars = 0\n\n    def __init__(self, name, inout, **kwargs):\n\n        self.name = name  # str: should be the same as in timestep info\n        self.xplane_name = kwargs.get('xplane_name', None)  # equivalent xplane name\n        self.inout = inout  # str: (in, out, inout)\n\n        self.index = kwargs.get('index', None)  # if variable is a vector\n        position = kwargs.get('position', None)  # int for node, (i_surf, m, n, idx) for panel\n\n        self.node = None\n        self.panel = None\n        self.cs_index = None\n        self.var_type = kwargs.get('var_type', None)\n\n        if self.var_type == 'node':\n            self.node = position\n        elif self.var_type == 'panel':\n            self.panel = position\n        elif self.var_type == 'control_surface':\n            self.cs_index = position\n        elif self.name == 'dt' or self.name == 'nt':\n            pass\n        else:\n            raise Exception('Unknown variable type')\n\n        self.dref_name = None\n        self.set_dref_name()\n\n        # update variable counter\n        self.variable_index = Variable.num_vars\n        Variable.num_vars += 1\n\n        self.value = None\n        logger.info('Loaded variable {}'.format(self.dref_name))\n\n    def get_variable_value(self, data, timestep_index=-1):\n        \"\"\"\n        Get the variables value at the selected timestep (last one by default)\n\n        Args:\n            data (sharpy.presharpy.PreSharpy): the standard SHARPy class\n            timestep_index (int (optional)): Integer representing the time step value. Defaults to ``-1`` i.e. the\n              last one available.\n\n        Returns:\n            float: value of the variable\n        \"\"\"\n        if self.node is not None:\n            # structural variables for now\n            try:\n                #Look for the variables in time_step_info\n                variable = getattr(data.structure.timestep_info[timestep_index], self.name)\n            except AttributeError:\n                try:\n                    #First get the dict postproc_cell and the try to find the variable in it.\n                    get_postproc_cell = getattr(data.structure.timestep_info[timestep_index], 'postproc_cell')\n                    variable = get_postproc_cell[self.name]\n                except (KeyError, AttributeError):\n                    msg = ('Node {} is neither in timestep_info nor in postproc_cell.'.format(self.node))\n                    logger.error(msg)\n                    raise IndexError(msg)\n\n            #Needed for for_pos and for_vel since they are arrays.\n            if len(variable.shape) == 1:\n                try:\n                    value = variable[self.node, self.index]\n                except IndexError:\n                    msg = 'Node {} and/or Index {} are out of index of variable {}, ' \\\n                          'which is of size ({})'.format(self.node, self.index, self.dref_name,\n                                                         variable.shape)\n                    logger.error(msg)\n                    raise IndexError(msg)\n\n            elif len(variable.shape) == 2:\n                try:\n                    value = variable[self.node, self.index]\n                except IndexError:\n                    msg = 'Node {} and/or Index {} are out of index of variable {}, ' \\\n                          'which is of size ({})'.format(self.node, self.index, self.dref_name,\n                                                         variable.shape)\n                    logger.error(msg)\n                    raise IndexError(msg)\n            elif len(variable.shape) == 3:\n                try:\n                    ielem, inode_in_elem = data.structure.node_master_elem[self.node]\n                    value = variable[ielem, inode_in_elem, self.index]\n                except IndexError:\n                    msg = 'Node {} and/or Index {} are out of index of variable {}, ' \\\n                          'which is of size ({})'.format(self.node, self.index, self.dref_name,\n                                                         variable.shape)\n                    logger.error(msg)\n                    raise IndexError(msg)\n            else:\n                msg = f'Variable {self.name} is neither a node variable nor an element variable. The ' \\\n                      f'variable {self.name} is stored as a {variable.shape} array.'\n                logger.error(msg)\n                raise IndexError(msg)\n\n        elif self.name == 'dt':\n            value = data.settings['DynamicCoupled']['dt']\n        elif self.name == 'nt':\n            value = len(data.structure.timestep_info[:timestep_index]) - 1  # (-1) needed since first time step is idx 0\n        elif self.panel is not None:\n            variable = getattr(data.aero.timestep_info[timestep_index], self.name)[self.panel[0]]  # surface index\n            i_m = self.panel[1]\n            i_n = self.panel[2]\n\n            try:\n                i_idx = self.panel[3]\n            except IndexError:\n                value = variable[i_m, i_n]\n            else:\n                value = variable[i_m, i_n, i_idx]\n        elif self.cs_index is not None:\n            try:\n                value = data.aero.timestep_info[timestep_index].control_surface_deflection[self.cs_index]\n            except AttributeError:\n                logger.error('Model not equipped with dynamic control surfaces')\n                raise AttributeError\n            except IndexError:\n                logger.error('Requested index {} for control surface is out of range (size {})'.format(\n                    self.cs_index, len(data.aero.timestep_info[timestep_index].control_surface_deflection)))\n        else:\n            raise NotImplementedError('Unable to get value for {} variable'.format(self.name))\n\n        self.value = value\n        logger.debug('Getting value {} for variable {}'.format(self.value, self.dref_name))\n        return value\n\n    def set_variable_value(self, value):\n        \"\"\"\n        Set the value of input variables\n\n        Args:\n            value: value of variable\n        \"\"\"\n        if self.inout == 'in' or self.inout == 'inout':\n            self.value = value\n        else:\n            logger.warning('Trying to set the value of {} which is only an output variable'.format(self.dref_name))\n\n    def set_in_timestep(self, data):\n        \"\"\"\n        Set the variable value in the time step\n\n        Args:\n            data (sharpy.presharpy.PreSharpy): Simulation data object\n\n        \"\"\"\n        if self.node is not None:\n            # Check if the node is an app_forces (f.e. Thrust)\n            if self.name == 'app_forces':\n                logger.debug('Setting thrust variable')\n                variable = data.structure.ini_info.steady_applied_forces\n                try:\n                    variable[self.node, self.index] = self.value\n                except IndexError:\n                    logger.warning('Unable to set node {}, index {} of variable {}'.format(\n                        self.node, self.index, self.dref_name\n                    ))\n\n                data.structure.ini_info.steady_applied_forces = variable\n                logger.debug('Updated timestep')\n\n            # else it is a structural variable\n            else:\n                variable = getattr(data.structure.timestep_info[-1], self.name)\n                try:\n                    variable[self.node, self.index] = self.value\n                except IndexError:\n                    logger.warning('Unable to set node {}, index {} of variable {}'.format(\n                        self.node, self.index, self.dref_name\n                    ))\n\n                setattr(data.structure.timestep_info[-1], self.name, variable)\n                logger.debug('Updated timestep')\n\n        if self.cs_index is not None:\n            variable = getattr(data.aero.timestep_info[-1], self.name)\n\n            # Creates an array as long as needed. Not required Cs_deflections will be set to zero. If the CS_type in the\n            # aero.h5 file is 0 this shouldnt have a influence on them.\n\n            while len(variable) <= self.cs_index:\n                # Adds an element in the array for the new control surface.\n                variable = np.hstack((variable, np.array(0)))\n            try:\n                variable[self.cs_index] = self.value\n            except IndexError:\n                logger.warning('Unable to set control surface deflection {}. Check the order of '\n                               'you control surfaces.'.format(self.cs_index))\n\n            setattr(data.aero.timestep_info[-1], self.name, variable)\n            logger.debug('Updated control surface deflection')\n\n    def set_dref_name(self):\n        divider = '_'\n        dref_name = self.name\n\n        if self.node is not None:\n            dref_name += divider +'node{}'.format(self.node)\n        elif self.panel is not None:\n            dref_name += divider + 'paneli{}m{}n{}'.format(*self.panel)\n        elif self.cs_index is not None:\n            dref_name += divider + 'idx{}'.format(self.cs_index)\n        elif self.name == 'dt' or self.name == 'nt':\n            pass\n        else:\n            raise Exception('Unknown variable')\n\n        if self.index is not None:\n            dref_name += divider + 'index{}'.format(self.index)\n\n        self.dref_name = dref_name\n\n\nclass SetOfVariables:\n    \"\"\"\n    Iterable class containing the input and output variables\n\n    Attributes:\n        variables (list(Variable)): List of :class:`Variable`\n    \"\"\"\n    def __init__(self):\n        self.variables = []  # list of Variables()\n        self.out_variables = []  # indices\n        self.in_variables = []\n\n        self._byte_ordering = '<'\n\n        self.file_name = None  # for input variables\n\n    def set_byte_ordering(self, value):\n        self._byte_ordering = value\n\n    def load_variables_from_yaml(self, path_to_yaml):\n        with open(path_to_yaml, 'r') as yaml_file:\n            variables_in_yaml = yaml.load(yaml_file, Loader=yaml.Loader)\n        for var in variables_in_yaml:\n            new_var = Variable(**var)\n            self.variables.append(new_var)\n            if new_var.inout == 'out' or new_var.inout == 'inout':\n                self.out_variables.append(new_var.variable_index)\n            if new_var.inout == 'in' or new_var.inout == 'inout':\n                self.in_variables.append(new_var.variable_index)\n            logger.debug('Number of tracked variables {}'.format(Variable.num_vars))\n\n    def set_input_file(self, filename):\n        self.file_name = filename\n\n        with open(self.file_name, 'w') as f:\n            header = ''\n            for var_idx in self.in_variables:\n                header += '{},\\t'.format(self.variables[var_idx].dref_name)\n            header += '\\n'\n\n            f.write(header)\n\n    @property\n    def input_msg_len(self):\n        msg_len = 5 + 8 * len(self.in_variables)  # 5 bytes header + 8 for each channel\n        return msg_len\n\n    def __iter__(self):\n        return VariableIterator(self)\n\n    def __getitem__(self, item):\n        return self.variables[item]\n\n    def __len__(self):\n        return len(self.variables)\n\n    def encode(self):\n        \"\"\"\n        Encode output variables in binary format with little-endian byte ordering.\n\n        The signal consists of a 5-byte header ``RREF0`` followed by 8 bytes per variable.\n        Of those 8 bytes allocated to each variable, the first 4 are the integer value of the variable index\n        and the last 4 are the single precision float value.\n\n        Returns:\n            bytes: Encoded message of length ``5 + num_var * 8``.\n        \"\"\"\n        msg = struct.pack('{}5s'.format(self._byte_ordering), b'RREF0')\n        for var_idx in self.out_variables:\n            variable = self.variables[var_idx]\n            logger.debug('Encoding variable {}'.format(variable.dref_name))\n            msg += struct.pack('{}if'.format(self._byte_ordering), variable.variable_index, variable.value)\n\n        return msg\n\n    def get_value(self, data, timestep_index=-1):\n        \"\"\"\n        Gets the value from the data structure for output variables\n\n        Args:\n            data (sharpy.presharpy.PreSharpy): the standard SHARPy class\n            timestep_index (int (optional)): Integer representing the time step value. Defaults to ``-1`` i.e. the\n              last one available.\n        \"\"\"\n\n        for out_idx in self.out_variables:\n            self.variables[out_idx].get_variable_value(data, timestep_index=timestep_index)\n\n    def set_value(self, values):\n        \"\"\"\n        Sets the values of the input variables.\n\n        Args:\n            values (list(tuple)): List of tuples containing the index and value of the respective input variables.\n        \"\"\"\n\n        for idx, value in values:\n            self.variables[idx].set_variable_value(value)\n            logger.info('Set the input variable {} to {:.4f}'.format(self.variables[idx].dref_name,\n                                                                     self.variables[idx].value))\n        # save to file:\n        self.save_to_file(values)\n\n    def update_timestep(self, data, values):\n\n        logger.debug('Update time step routine')\n        self.set_value(values)\n        for idx in self.in_variables:\n            self.variables[idx].set_in_timestep(data)\n\n    def save_to_file(self, input_variables):\n        if self.file_name is not None:\n            input_values = [value for idx, value in input_variables]\n            with open(self.file_name, 'a') as f:\n                out_msg = ''\n                for value in input_values:\n                    out_msg += '{:10.6f},\\t'.format(value)\n                out_msg += '\\n'\n                f.write(out_msg)\n\n\nclass VariableIterator:\n\n    def __init__(self, set_of_variables):\n        self._set_variables = set_of_variables\n        self._index = 0\n\n    def __next__(self):\n        if self._index < len(self._set_variables):\n            res = self._set_variables(self._index)\n            self._index += 1\n            return res\n\n        raise StopIteration\n"
  },
  {
    "path": "sharpy/io/logger_utils.py",
    "content": "import logging\n\n\ndef load_logger_settings(**kwargs):\n\n    log_name = kwargs.get('log_name', './sharpy_network.log')\n\n    file_level = get_logger_level(kwargs.get('file_level', 'debug'))\n    console_level = get_logger_level(kwargs.get('console_level', 'info'))\n\n    logger = logging.getLogger()  # Modify root logger settings\n    logger.setLevel(logging.DEBUG)\n    # # create file handler which logs even debug messages\n    fh = logging.FileHandler(log_name, 'w+')\n    fh.setLevel(file_level)\n    # # create console handler with a higher log level\n    ch = logging.StreamHandler()\n    ch.setLevel(console_level)\n    # # create formatter and add it to the handlers\n    formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')\n    fh.setFormatter(formatter)\n    ch.setFormatter(formatter)\n    # # add the handlers to the logger\n    logger.addHandler(fh)\n    logger.addHandler(ch)\n\n\ndef get_logger_level(level):\n    if level == 'debug':\n        mode = logging.DEBUG\n    elif level == 'info':\n        mode = logging.INFO\n    elif level == 'warning':\n        mode = logging.WARNING\n    elif level == 'error':\n        mode = logging.ERROR\n    else:\n        raise NameError('Unknown mode for logging module')\n\n    return mode\n"
  },
  {
    "path": "sharpy/io/message_interface.py",
    "content": "import struct\nimport logging\n\n# logging.basicConfig(format='%(asctime)s - %(name)s - %(levelname)s - %(message)s',\n#                     level=20)\nlogger = logging.getLogger(__name__)\n\n\ndef decoder(msg, byte_ordering='<'):\n    n_bytes = len(msg)\n\n    header = msg[:5]\n    if header != b'RREF0':\n        logger.error('Error, header is not RREF0')\n\n    len_values = int(n_bytes - 5)\n    if divmod(len_values, 8)[1] != 0:  # remainder equal 0\n        logger.error('Error in decoding message. Length of values field not a multiple of 8')\n\n    n_values = int(len_values // 8)\n    values = []\n    for i_val in range(n_values):\n        current_signal = msg[5 + i_val * 8: 5 + i_val * 8 + 8]\n        sig_index = struct.unpack('{}if'.format(byte_ordering), current_signal)\n        values.append(sig_index)\n\n    return values\n"
  },
  {
    "path": "sharpy/io/network_interface.py",
    "content": "import socket\nimport selectors\nimport logging\nimport sharpy.io.message_interface as message_interface\nimport sharpy.io.inout_variables as inout_variables\nimport sharpy.utils.settings as settings\nimport sharpy.io.logger_utils as logger_utils\n\nsel = selectors.DefaultSelector()\n\nlogger = logging.getLogger(__name__)\n\nclient_list = list()  # Common client list between input and output sockets\n\n\nclass NetworkLoader:\n    \"\"\"\n    SHARPy UDP data input and output interface.\n\n    The settings of this interface are to be used as the dictionary to the setting ``network_setting`` in the\n    :class:`~sharpy.solvers.dynamiccoupled.DynamicCoupled` solver, which is the only one that is currently supported.\n\n    This interface allows for SHARPy to receive and send simulation data over the network using an UDP protocol.\n\n    The setting ``variables_filename`` is a filename to a ``YAML`` file that contains a list of the\n    input or output variables. The example below shows an acceptable input\n\n    .. code-block:: yaml\n\n        ---\n        - name: 'control_surface_deflection' # variable name. those in the timestep_info are supported\n          var_type: 'control_surface'\n          inout: 'in'  # either `in`, `out` or `inout`\n          position: 0  # control surface index\n        - name: 'pos'  # variable name\n          var_type: 'node'  # type of variable. In this case a node variable. Others: `panel`, `control_surface`\n          inout: 'out'\n          position: 5  # node number\n          index: 2  # vector index, in this case a 3d vector where the desired index is number 2\n        - name: 'gamma'\n          inout: 'out'\n          position: [0, 1, 2] # [i_surf, i_chordwise, i_spanwise]\n          var_type: 'panel'\n        - name: 'psi'  # CRV\n          inout: 'out'\n          var_type: 'node'\n          position: 3  # node id\n          index: 2  # dimension index\n        ...\n\n    All variables in the aero and structural timestep info classes :class:`~sharpy.utils.datastructures` are supported,\n    with the addition of ``dt`` for the time increment and ``nt`` for the current time step number.\n\n    Note:\n        If using a control surface input, make sure this control surface is given ``control_surface_type = 2`` in the\n        the case ``.aero.h5`` file. Otherwise, the control surface will not move!\n\n    The relevant settings for the input and output sockets can be found in\n    :class:`~sharpy.io.network_interface.InNetwork` and :class:`~sharpy.io.network_interface.OutNetwork`, respectively.\n\n    If the setting ``send_output_to_all_clients`` is ``True``, then\n    the clients from which the input signal is received will also be added to the destination client address book.\n\n    The input and output messages follow the example set by X-Plane ``RREF0`` protocol. Thus, a message consists\n    of a 5-byte header containing ``RREF0`` followed by 8-bytes per variable, where the first 4-bytes correspond to the\n    variable number (as ordered in the YAML file) as an integer and the latter 4-bytes correspond to the value of the\n    variable in single precision float. The byte ordering is specified by the user.\n\n    A specific network log is created to detail the ins and outs of the communication protocol. The level of messages\n    that are shown can be set in the settings.\n\n\n    See Also:\n        Endianness: https://docs.python.org/3/library/struct.html#byte-order-size-and-alignment\n\n\n    Note:\n        The SHARPy input and output sockets do not time out.\n\n\n    Note:\n        The first time step in a simulation with UDP inputs takes particularly long. Make sure your client has a\n        sufficient time out time to avoid issues. After the first time step, the UDP should not delay the simulation.\n\n    Warnings:\n        There is a limitation, for the moment, on just one control surface being supported for UDP input.\n    \"\"\"\n    settings_types = dict()\n    settings_default = dict()\n    settings_description = dict()\n    settings_options = dict()\n\n    settings_types['variables_filename'] = 'str'\n    settings_default['variables_filename'] = None\n    settings_description['variables_filename'] = 'Path to YAML file containing input/output variables'\n\n    settings_types['byte_ordering'] = 'str'\n    settings_default['byte_ordering'] = 'little'\n    settings_description['byte_ordering'] = 'Desired endianness byte ordering'\n    settings_options['byte_ordering'] = ['little', 'big']\n\n    settings_types['input_network_settings'] = 'dict'\n    settings_default['input_network_settings'] = dict()\n    settings_description['input_network_settings'] = 'Settings for the input network.' \\\n                                                     ':class:`~sharpy.io.network_interface.InNetwork`.'\n\n    settings_types['output_network_settings'] = 'dict'\n    settings_default['output_network_settings'] = dict()\n    settings_description['output_network_settings'] = 'Settings for the output network ' \\\n                                                      ':class:`~sharpy.io.network_interface.OutNetwork`.'\n\n    settings_types['send_output_to_all_clients'] = 'bool'\n    settings_default['send_output_to_all_clients'] = False\n    settings_description['send_output_to_all_clients'] = 'Send output to all clients, including those from where the ' \\\n                                                         'input is received.'\n\n    settings_types['received_data_filename'] = 'str'\n    settings_default['received_data_filename'] = ''\n    settings_description['received_data_filename'] = 'If not empty, writes received input data to the specified file.'\n\n    settings_types['log_name'] = 'str'\n    settings_default['log_name'] = './network_output.log'\n    settings_description['log_name'] = 'Network log file name'\n\n    settings_types['console_log_level'] = 'str'\n    settings_default['console_log_level'] = 'info'\n    settings_description['console_log_level'] = 'Minimum logging level in console.'\n    settings_options['console_log_level'] = ['debug', 'info', 'warning', 'error']\n\n    settings_types['file_log_level'] = 'str'\n    settings_default['file_log_level'] = 'debug'\n    settings_description['file_log_level'] = 'Minimum logging level in log file.'\n    settings_options['file_log_level'] = ['debug', 'info', 'warning', 'error']\n\n    settings_table = settings.SettingsTable()\n    __doc__ += settings_table.generate(settings_types, settings_default, settings_description,\n                                       header_line='The ``NetworkLoader`` takes the following settings:')\n\n    def __init__(self):\n        self.settings = None\n\n        self.byte_ordering = '<'\n\n    def initialise(self, in_settings):\n        self.settings = in_settings\n        settings.to_custom_types(self.settings, self.settings_types, self.settings_default,\n                                 no_ctype=True, options=self.settings_options)\n\n        if self.settings['byte_ordering'] == 'little':\n            self.byte_ordering = '<'\n        elif self.settings['byte_ordering'] == 'big':\n            self.byte_ordering = '>'\n        else:\n            raise KeyError('Unknown byte ordering {}'.format(self.settings['byte_ordering']))\n\n        logger_utils.load_logger_settings(log_name=self.settings['log_name'],\n                                          file_level=self.settings['file_log_level'],\n                                          console_level=self.settings['console_log_level'])\n        logger.info('Initialising Network Interface. Local host name: {}'.format(socket.gethostname()))\n\n    def get_inout_variables(self):\n        set_of_variables = inout_variables.SetOfVariables()\n        set_of_variables.load_variables_from_yaml(self.settings['variables_filename'])\n        set_of_variables.set_byte_ordering(self.byte_ordering)\n\n        if self.settings['received_data_filename'] != '':\n            set_of_variables.set_input_file(self.settings['received_data_filename'])\n\n        return set_of_variables\n\n    def get_networks(self, networks='inout'):\n        to_return = []\n        if networks == 'out' or networks == 'inout':\n            logger.info('Initialising output network')\n            out_network = OutNetwork()\n            out_network.initialise('w', in_settings=self.settings['output_network_settings'])\n            out_network.set_byte_ordering(self.byte_ordering)\n            to_return.append(out_network)\n\n        if networks == 'in' or networks == 'inout':\n            logger.info('Initialising input network')\n            in_network = InNetwork()\n            in_network.initialise('r', in_settings=self.settings['input_network_settings'])\n            in_network.set_byte_ordering(self.byte_ordering)\n            to_return.append(in_network)\n\n        if self.settings['send_output_to_all_clients'] and networks == 'inout':\n            out_network.set_client_list(client_list)\n            in_network.set_client_list(client_list)\n\n        if len(to_return) == 2:\n            return tuple(to_return)\n        elif len(to_return) == 1:\n            return to_return[0]  # for single network cases (usually output only)\n\n\nclass Network:\n    \"\"\"\n    Network Adapter\n\n    Contains the basic methods. See ``InNetwork`` and ``OutNetwork`` for specific settings pertaining to the\n    input and output sockets.\n    \"\"\"\n    settings_types = dict()\n    settings_default = dict()\n    settings_description = dict()\n\n    settings_types['address'] = 'str'\n    settings_default['address'] = '127.0.0.1'\n    settings_description['address'] = 'Own network address.'\n\n    settings_types['port'] = 'int'\n    settings_default['port'] = 65000\n    settings_description['port'] = 'Own port.'\n\n    settings_table = settings.SettingsTable()\n    __doc__ += settings_table.generate(settings_types, settings_default, settings_description)\n\n    def __init__(self, host=None, port=None):  # remove args when this is tested\n\n        self.addr = (host, port)  # own address\n\n        self.sock = None\n        self.sel = sel\n\n        self.clients = list()\n\n        self.queue = None  # queue object\n\n        self.settings = None\n\n        self._byte_ordering = '<'\n\n    def set_byte_ordering(self, value):\n        self._byte_ordering = value\n\n    def set_client_list(self, list_of_clients):\n        \"\"\"\n        Set a client list for network.\n\n        Args:\n            list_of_clients (list): List of tuples containing ``(HOST, PORT)``, where ``HOST`` is a ``string`` and\n                ``port`` and integer.\n        \"\"\"\n        own_clients = self.clients.copy()  # make a copy of own clients prior to setting the common list\n        self.clients = list_of_clients\n        self.add_client(own_clients)\n\n    def set_selector_events_mask(self, mode):\n        \"\"\"Set selector to listen for events: mode is 'r', 'w', or 'rw'.\"\"\"\n        events = get_events(mode)\n        logger.debug('Modifying selector to {}'.format(mode))\n        sel.modify(self.sock, events, data=self)\n\n    def initialise(self, mode, in_settings):\n        self.settings = in_settings\n        settings.to_custom_types(self.settings, self.settings_types, self.settings_default,\n                                 no_ctype=True)\n        self.addr = (self.settings['address'], self.settings['port'])\n\n        self.sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)\n        self.sock.bind(self.addr)\n        logger.info('Bound socket to {}'.format(self.addr))\n        events = get_events(mode)\n        self.sock.setblocking(False)\n        sel.register(self.sock, events, data=self)\n\n    def send(self, msg, dest_addr):\n        if type(dest_addr) is list:\n            for dest in dest_addr:\n                self._sendto(msg, dest)\n        elif type(dest_addr) is tuple:\n            self._sendto(msg, dest_addr)\n\n    def set_queue(self, queue):\n        self.queue = queue\n\n    def _sendto(self, msg, address):\n        logger.debug('Network - Sending')\n        self.sock.sendto(msg, address)\n        logger.info('Network - Sent data packet to {}'.format(address))\n\n    def receive(self, msg_length=1024):\n        r_msg, client_addr = self.sock.recvfrom(msg_length)  # adapt message length\n        logger.info('Received a {}-byte long data packet from {}'.format(len(r_msg), client_addr))\n        self.add_client(client_addr)\n        # r_msg = struct.unpack('f', r_msg)  # need to move decoding to dedicated message processing\n        return r_msg\n        # return recv_data\n\n    def process_events(self, mask):  # should only have the relevant queue\n        logger.debug('Should not be here')\n        pass\n\n    def add_client(self, client_addr):\n        if type(client_addr) is tuple:\n            self._add_client(client_addr)\n        elif type(client_addr) is list:\n            for client in client_addr:\n                self._add_client(client)\n\n    def _add_client(self, client_addr):\n        if client_addr not in self.clients:\n            self.clients.append(client_addr)\n            logger.info('Added new client to list {}'.format(client_addr))\n\n    def close(self):\n        self.sel.unregister(self.sock)\n        logger.info('Unregistered socket from selectors')\n        self.sock.close()\n        logger.info('Closed socket')\n\n\nclass OutNetwork(Network):\n    \"\"\"Output network socket settings\n\n    If ``send_on_demand`` is ``True``, SHARPy will only output data when it receives a request for it. The request\n    message can be any message under 1024 bytes. SHARPy will reply to the socket that sent the request with the latest\n    time step information. Otherwise, it will send data at the end of each time step to the specified destination\n    clients.\n\n    If the :class:`~sharpy.io.network_interface.NetworkLoader` setting ``send_output_to_all_clients`` is ``True``, then\n    the clients from which the input signal is received will also be added to the destination client address book.\n\n    Note:\n        If sending/receiving data across the net or LAN, make sure that your firewall has the desired ports open,\n        otherwise the signals will not make it through.\n    \"\"\"\n    settings_types = Network.settings_types.copy()\n    settings_default = Network.settings_default.copy()\n    settings_description = Network.settings_description.copy()\n\n    settings_types['port'] = 'int'\n    settings_default['port'] = 65000\n    settings_description['port'] = 'Own port for output network'\n\n    settings_types['send_on_demand'] = 'bool'\n    settings_default['send_on_demand'] = True\n    settings_description['send_on_demand'] = 'Waits for a signal demanding the output data. Else, sends to destination' \\\n                                             ' buffer'\n\n    settings_types['destination_address'] = 'list(str)'\n    settings_default['destination_address'] = list()  # add check to raise error if send_on_demand false and this is empty\n    settings_description['destination_address'] = 'List of addresses to send output data. If ``send_on_demand`` is ' \\\n                                                  '``False`` this is a required setting.'\n\n    settings_types['destination_ports'] = 'list(int)'\n    settings_default['destination_ports'] = list()\n    settings_description['destination_ports'] = 'List of ports number for the destination addresses.'\n\n    settings_table = settings.SettingsTable()\n    __doc__ += settings_table.generate(settings_types, settings_default, settings_description)\n\n    def initialise(self, mode, in_settings):\n        super().initialise(mode, in_settings)\n\n        if self.settings['send_on_demand'] is False and len(self.settings['destination_address']) == 0:\n            logger.warning('No destination host address provided')\n\n        clients = list(zip(self.settings['destination_address'], self.settings['destination_ports']))\n        self.add_client(clients)\n\n    def process_events(self, mask):\n\n        if mask and selectors.EVENT_READ and not self.queue.empty():\n            if self.settings['send_on_demand']:\n                logger.info('Out Network - waiting for request for data')\n                msg = self.receive()\n                # get variable that has been demanded, this would be easy if a SetOfVariables was sent in the queue\n                # logger.info('Received request for data {}'.format(msg))\n                logger.debug('Received request for data')\n        if mask and selectors.EVENT_WRITE and not self.queue.empty():\n            logger.debug('Out Network ready to receive from the queue')\n            # value = self.queue.get()  # check that it waits for the queue not to be empty\n            set_of_vars = self.queue.get()  # always gets latest time step info\n            logger.debug('Out Network - got message from queue')\n            # for out_idx in set_of_vars.out_variables:\n            #     value = set_of_vars[out_idx].value\n            value = set_of_vars.encode()\n            logger.info('Message of length {} bytes ready to send'.format(len(value)))\n            self.send(value, self.clients)\n                # self.send(value, self.clients)\n\n\nclass InNetwork(Network):\n    \"\"\"\n    Input Network socket settings\n\n    Note:\n        If sending/receiving data across the net or LAN, make sure that your firewall has the desired ports open,\n        otherwise the signals will not make it through.\n    \"\"\"\n    settings_types = Network.settings_types.copy()\n    settings_default = Network.settings_default.copy()\n    settings_description = Network.settings_description.copy()\n\n    settings_types['port'] = 'int'\n    settings_default['port'] = 65001\n    settings_description['port'] = 'Own port for input network'\n\n    settings_table = settings.SettingsTable()\n    __doc__ += settings_table.generate(settings_types, settings_default, settings_description)\n\n    def __init__(self):\n        super().__init__()\n        self._in_message_length = 1024\n        self._recv_buffer = b''\n\n    def set_message_length(self, value):\n        self._in_message_length = value\n        logger.debug('Set input signal message size to {} bytes'.format(self._in_message_length))\n\n    def process_events(self, mask):\n        self.sock.setblocking(False)\n        if mask and selectors.EVENT_READ:\n            logger.info('In Network - waiting for input data of size {} bytes'.format(self._in_message_length))\n            msg = self.receive(self._in_message_length)\n            self._recv_buffer += msg\n            # any required processing\n            # send list of tuples\n            if len(self._recv_buffer) == self._in_message_length:\n                logger.info('In Network - {}/{} bytes read'.format(len(self._recv_buffer), self._in_message_length))\n                list_of_variables = message_interface.decoder(self._recv_buffer, byte_ordering=self._byte_ordering)\n                self.queue.put(list_of_variables)\n                logger.debug('In Network - put data in the queue')\n                self._recv_buffer = b''  # clean up\n\n\ndef get_events(mode):\n    if mode == \"r\":\n        events = selectors.EVENT_READ\n    elif mode == \"w\":\n        events = selectors.EVENT_WRITE\n    elif mode == \"rw\":\n        events = selectors.EVENT_READ | selectors.EVENT_WRITE\n    else:\n        raise ValueError(f\"Invalid events mask mode {repr(mode)}.\")\n\n    return events\n"
  },
  {
    "path": "sharpy/linear/__init__.py",
    "content": "\"\"\"Linear SHARPy\n\nThe code included herein enables the assembly of linearised state-space systems based on the previous solution\nof a nonlinear problem that will be used as linearisation reference.\n\nThe code is structured in the following way:\n\n    * Assembler: different state-spaces to assemble, from only structural/aerodynamic to fully coupled aeroelastic\n\n    * Src: source code required for the linearisation and utilities for the manipulation of state-space elements\n\n\nReferences:\n\n    Maraniello, S. , Palacios, R.. State-Space Realizations and Internal Balancing in Potential-Flow Aerodynamics\n    with Arbitrary Kinematics. AIAA Journal, Vol. 57, No.6, June 2019\n\"\"\""
  },
  {
    "path": "sharpy/linear/assembler/__init__.py",
    "content": "import importlib\nimport os\n\nimport sharpy.linear.utils.ss_interface as ss_interface\nimport sharpy.utils.sharpydir as sharpydir\n\nfiles = ss_interface.sys_list_from_path(os.path.dirname(__file__))\n\nimport_path = os.path.realpath(os.path.dirname(__file__))\nimport_path = import_path.replace(sharpydir.SharpyDir, \"\")\nif import_path[0] == \"/\": import_path = import_path[1:]\nimport_path = import_path.replace(\"/\", \".\")\n\nfor file in files:\n    ss_interface.systems_dict_import[file] = importlib.import_module(import_path + \".\" + file)\n"
  },
  {
    "path": "sharpy/linear/assembler/lincontrolsurfacedeflector.py",
    "content": "\"\"\"\nControl surface deflector for linear systems\n\"\"\"\nimport sharpy.linear.utils.ss_interface as ss_interface\nimport numpy as np\nimport sharpy.utils.algebra as algebra\nimport sharpy.linear.src.libsparse as libsp\nimport scipy.sparse as sp\nimport sharpy.linear.src.libss as libss\n\n\n@ss_interface.linear_system\nclass LinControlSurfaceDeflector(object):\n    \"\"\"\n    Subsystem that deflects control surfaces for use with linear state space systems.\n\n    Note:\n        The control surface sign convention is different to the convention in the nonlinear solver. See\n        https://www.github.com/imperialcollegelondon/sharpy/issues/193 for more details.\n\n    In the linear implementation, the control surface deflection sign convention follows the :math:`x_B` vector,\n    thus, in order to have symmetric control surface deflections, additional inputs may be required compared to the\n    implementation in the nonlinear solver.\n\n    The current version supports only deflections. Future work will include standalone state-space systems to model\n    physical actuators.\n\n    \"\"\"\n    sys_id = 'LinControlSurfaceDeflector'\n\n    def __init__(self):\n        # Has the back bone structure for a future actuator model\n        # As of now, it simply maps a deflection onto the aerodynamic grid by means of Kzeta_delta\n        self.n_control_surfaces = 0\n        self.Kzeta_delta = None  # type: np.ndarray\n        self.Kdzeta_ddelta = None  # type: np.ndarray\n\n        self.linuvlm = None  # type: sharpy.linear.src.linuvlm.Dynamic\n        self.aero = None  # type: sharpy.aero.models.aerogrid.Aerogrid\n        self.structure = None  # type: sharpy.structure.models.beam.Beam\n\n        self.tsaero0 = None\n        self.tsstruct0 = None\n\n        self.gain_cs = None  # type: np.ndarray # input gain to the UVLM\n\n        self.print_info = False  # used for debugging purposes\n\n    def initialise(self, data, linuvlm):\n        self.n_control_surfaces = data.aero.n_control_surfaces\n\n        self.linuvlm = linuvlm\n        self.aero = data.aero\n        self.structure = data.structure\n        self.tsaero0 = data.aero.timestep_info[0]\n        self.tsstruct0 = data.structure.timestep_info[0]\n\n    def generate(self):\n        \"\"\"\n        Generates a matrix mapping a linear control surface deflection onto the aerodynamic grid.\n\n        This generates two matrices:\n\n            * `Kzeta_delta` maps the deflection angle onto displacements. It has as many columns as independent control\n              surfaces.\n\n            * `Kdzeta_ddelta` maps the deflection rate onto grid velocities. Again, it has as many columns as\n              independent control surfaces.\n\n        Returns:\n            tuple: Tuple containing `Kzeta_delta` and `Kdzeta_ddelta`.\n\n        \"\"\"\n        # For future development\n        # In hindsight, building this matrix iterating through structural node was a big mistake that\n        # has led to very messy code. Would rework by element and in B frame\n\n        aero = self.aero\n        structure = self.structure\n        linuvlm = self.linuvlm\n        tsaero0 = self.tsaero0\n        tsstruct0 = self.tsstruct0\n\n        # Find the vertices corresponding to a control surface from beam coordinates to aerogrid\n        data_dict = aero.data_dict\n        n_surf = tsaero0.n_surf\n        n_control_surfaces = self.n_control_surfaces\n\n        Kdisp = np.zeros((3 * linuvlm.Kzeta, n_control_surfaces))\n        Kvel = np.zeros((3 * linuvlm.Kzeta, n_control_surfaces))\n        zeta0 = np.concatenate([tsaero0.zeta[i_surf].reshape(-1, order='C') for i_surf in range(n_surf)])\n\n        Cga = algebra.quat2rotation(tsstruct0.quat).T\n        Cag = Cga.T\n\n        # Initialise these parameters\n        hinge_axis = None  # Will be set once per control surface to the hinge axis\n        with_control_surface = False  # Will be set to true if the spanwise node contains a control surface\n\n        for global_node in range(structure.num_node):\n\n            # Retrieve elements and local nodes to which a single node is attached\n            for i_elem in range(structure.num_elem):\n                if global_node in structure.connectivities[i_elem, :]:\n                    i_local_node = np.where(structure.connectivities[i_elem, :] == global_node)[0][0]\n\n                    for_delta = structure.frame_of_reference_delta[i_elem, i_local_node, :]\n\n                    # CRV to transform from G to B frame\n                    psi = tsstruct0.psi[i_elem, i_local_node]\n                    Cab = algebra.crv2rotation(psi)\n                    Cba = Cab.T\n                    Cbg = np.dot(Cab.T, Cag)\n                    Cgb = Cbg.T\n\n                    # Map onto aerodynamic coordinates. Some nodes may be part of two aerodynamic surfaces.\n                    for structure2aero_node in aero.struct2aero_mapping[global_node]:\n                        # Retrieve surface and span-wise coordinate\n                        i_surf, i_node_span = structure2aero_node['i_surf'], structure2aero_node['i_n']\n\n                        # Although a node may be part of 2 aerodynamic surfaces, we need to ensure that the current\n                        # element for the given node is indeed part of that surface.\n                        elems_in_surf = np.where(data_dict['surface_distribution'] == i_surf)[0]\n                        if i_elem not in elems_in_surf:\n                            continue\n\n                        # Surface panelling\n                        M = aero.dimensions[i_surf][0]\n                        N = aero.dimensions[i_surf][1]\n\n                        K_zeta_start = 3 * sum(linuvlm.MS.KKzeta[:i_surf])\n                        shape_zeta = (3, M + 1, N + 1)\n\n                        i_control_surface = data_dict['control_surface'][i_elem, i_local_node]\n                        if i_control_surface >= 0:\n                            if not with_control_surface:\n                                i_start_of_cs = i_node_span.copy()\n                                with_control_surface = True\n\n                            control_surface_chord = data_dict['control_surface_chord'][i_control_surface]\n\n                            try:\n                                control_surface_hinge_coord = \\\n                                    data_dict['control_surface_hinge_coord'][i_control_surface] * \\\n                                    data_dict['chord'][i_elem, i_local_node]\n                            except KeyError:\n                                control_surface_hinge_coord = None\n\n                            i_node_hinge = M - control_surface_chord\n                            i_vertex_hinge = [K_zeta_start +\n                                              np.ravel_multi_index((i_axis, i_node_hinge, i_node_span), shape_zeta)\n                                              for i_axis in range(3)]\n                            i_vertex_next_hinge = [K_zeta_start +\n                                                   np.ravel_multi_index((i_axis, i_node_hinge, i_start_of_cs + 1),\n                                                                        shape_zeta) for i_axis in range(3)]\n\n                            if control_surface_hinge_coord is not None and M == control_surface_chord:  # fully articulated control surface\n                                zeta_hinge = Cgb.dot(Cba.dot(tsstruct0.pos[global_node]) + for_delta * np.array([0, control_surface_hinge_coord, 0]))\n                                zeta_next_hinge = Cgb.dot(Cbg.dot(zeta_hinge) + np.array([1, 0, 0]))  # parallel to the x_b vector\n                            else:\n                                zeta_hinge = zeta0[i_vertex_hinge]\n                                zeta_next_hinge = zeta0[i_vertex_next_hinge]\n\n                            if hinge_axis is None:\n                                # Hinge axis not yet set for current control surface\n                                # Hinge axis is in G frame\n                                hinge_axis = zeta_next_hinge - zeta_hinge\n                                hinge_axis = hinge_axis / np.linalg.norm(hinge_axis)\n                            for i_node_chord in range(M + 1):\n                                i_vertex = [K_zeta_start +\n                                            np.ravel_multi_index((i_axis, i_node_chord, i_node_span), shape_zeta)\n                                            for i_axis in range(3)]\n\n                                if i_node_chord >= i_node_hinge:\n                                    # Zeta in G frame\n                                    zeta_node = zeta0[i_vertex]  # Gframe\n                                    chord_vec = (zeta_node - zeta_hinge)\n\n                                    if self.print_info:\n                                        print(f'i_node = {global_node}')\n                                        print(f'i_node_chord = {i_node_chord}')\n                                        print(f'zeta_node = {zeta_node}')\n                                        print(f'chord_vec = {chord_vec}')\n                                        print(f'zeta_hinge = {zeta_hinge}')\n                                        print(f'zeta_next_hinge = {zeta_next_hinge}')\n                                        print(f'hinge_axis = {hinge_axis}')\n\n                                    # Flap displacement\n                                    Kdisp[i_vertex, i_control_surface] = \\\n                                        der_R_arbitrary_axis_times_v(hinge_axis, 0, chord_vec)\n\n                                    # Flap velocity\n                                    Kvel[i_vertex, i_control_surface] = -algebra.skew(chord_vec).dot(\n                                        hinge_axis)\n\n                                    if self.print_info:\n                                        print('Matrix entries:')\n                                        print('Kdisp:')\n                                        print(Kdisp[i_vertex, i_control_surface])\n                                        print('Kvel:')\n                                        print(Kvel[i_vertex, i_control_surface])\n\n                        else:\n                            with_control_surface = False\n                            hinge_axis = None  # Reset for next control surface\n\n        self.Kzeta_delta = Kdisp\n        self.Kdzeta_ddelta = Kvel\n\n        return Kdisp, Kvel\n\n    def apply(self, ss):\n        \"\"\"\n        Applies the control surface deflection to the UVLM state space\n\n        Args:\n            ss (libss.StateSpace): UVLM state space\n\n        Returns:\n            libss.StateSpace: UVLM state-space with control surfaces and control surface deflection rate as inputs\n        \"\"\"\n\n        Kzeta_delta, Kdzeta_ddelta = self.generate()\n        n_zeta, n_ctrl_sfc = Kzeta_delta.shape\n\n        if type(ss.A) is libsp.csc_matrix:\n            gain_cs = sp.eye(ss.inputs, ss.inputs + 2 * self.n_control_surfaces,\n                             format='lil')\n            gain_cs[:n_zeta, ss.inputs: ss.inputs + n_ctrl_sfc] = Kzeta_delta\n            gain_cs[n_zeta: 2*n_zeta, ss.inputs + n_ctrl_sfc: ss.inputs + 2 * n_ctrl_sfc] = Kdzeta_ddelta\n            gain_cs = libsp.csc_matrix(gain_cs)\n        else:\n            gain_cs = np.eye(ss.inputs, ss.inputs + 2 * self.n_control_surfaces)\n            gain_cs[:n_zeta, ss.inputs: ss.inputs + n_ctrl_sfc] = Kzeta_delta\n            gain_cs[n_zeta: 2*n_zeta, ss.inputs + n_ctrl_sfc: ss.inputs + 2 * n_ctrl_sfc] = Kdzeta_ddelta\n\n        control_surface_gain = libss.Gain(gain_cs)\n        in_vars = ss.input_variables.copy()\n        in_vars.append('control_surface_deflection', size=n_ctrl_sfc)\n        in_vars.append('dot_control_surface_deflection', size=n_ctrl_sfc)\n        control_surface_gain.input_variables = in_vars\n        control_surface_gain.output_variables = ss_interface.LinearVector.transform(ss.input_variables,\n                                                                                    to_type=ss_interface.OutputVariable)\n\n        self.gain_cs = control_surface_gain\n\n        return ss\n    # def generator():\n    # future feature idea: instead of defining the inputs for the time domain simulations as the whole input vector\n    # etc, we could add a generate() method to these systems that can be called from the LinDynamicSim to apply\n    # the gust and generate the correct input vector.\n\n\ndef der_Cx_by_v(delta, v):\n    sd = np.sin(delta)\n    cd = np.cos(delta)\n    v2 = v[1]\n    v3 = v[2]\n    return np.array([0, -v2 * sd - v3 * cd, v2 * cd - v3 * sd])\n\ndef der_Cy_by_v(delta, v):\n    s = np.sin(delta)\n    c = np.cos(delta)\n    v1 = v[0]\n    v3 = v[2]\n    return np.array([-s*v1 + v*v3, 0, -c*v1 - s*v3])\n\n\ndef der_R_arbitrary_axis_times_v(u, theta, v):\n    r\"\"\"\n    Linearised rotation vector of the vector ``v`` by angle ``theta`` about an arbitrary axis ``u``.\n\n    The rotation of a vector :math:`\\mathbf{v}` about the axis :math:`\\mathbf{u}` by an\n    angle :math:`\\boldsymbol{\\theta}` can be expressed as\n\n    .. math:: \\mathbf{w} = \\mathbf{R}(\\mathbf{u}, \\theta) \\mathbf{v},\n\n    where :math:`\\mathbf{R}` is a :math:`\\mathbb{R}^{3\\times 3}` matrix.\n\n    This expression can be linearised for it to be included in the linear solver as\n\n    .. math:: \\delta\\mathbf{w} = \\frac{\\partial}{\\partial\\theta}\\left(\\mathbf{R}(\\mathbf{u}, \\theta_0)\\right)\\delta\\theta\n\n    The matrix :math:`\\mathbf{R}` is\n\n    .. math::\n\n        \\mathbf{R} =\n        \\begin{bmatrix}\\cos \\theta +u_{x}^{2}\\left(1-\\cos \\theta \\right) &\n        u_{x}u_{y}\\left(1-\\cos \\theta \\right)-u_{z}\\sin \\theta &\n        u_{x}u_{z}\\left(1-\\cos \\theta \\right)+u_{y}\\sin \\theta \\\\\n        u_{y}u_{x}\\left(1-\\cos \\theta \\right)+u_{z}\\sin \\theta &\n        \\cos \\theta +u_{y}^{2}\\left(1-\\cos \\theta \\right)&\n        u_{y}u_{z}\\left(1-\\cos \\theta \\right)-u_{x}\\sin \\theta \\\\\n        u_{z}u_{x}\\left(1-\\cos \\theta \\right)-u_{y}\\sin \\theta &\n        u_{z}u_{y}\\left(1-\\cos \\theta \\right)+u_{x}\\sin \\theta &\n        \\cos \\theta +u_{z}^{2}\\left(1-\\cos \\theta \\right)\\end{bmatrix},\n\n    and its linearised expression becomes\n\n    .. math::\n\n        \\frac{\\partial}{\\partial\\theta}\\left(\\mathbf{R}(\\mathbf{u}, \\theta_0)\\right) =\n        \\begin{bmatrix}\n        -\\sin \\theta +u_{x}^{2}\\sin \\theta \\mathbf{v}_1 +\n        u_{x}u_{y}\\sin \\theta-u_{z} \\cos \\theta \\mathbf{v}_2 +\n        u_{x}u_{z}\\sin \\theta +u_{y}\\cos \\theta \\mathbf{v}_3 \\\\\n        u_{y}u_{x}\\sin \\theta+u_{z}\\cos \\theta\\mathbf{v}_1\n        -\\sin \\theta +u_{y}^{2}\\sin \\theta\\mathbf{v}_2 +\n        u_{y}u_{z}\\sin \\theta-u_{x}\\cos \\theta\\mathbf{v}_3 \\\\\n        u_{z}u_{x}\\sin \\theta-u_{y}\\cos \\theta\\mathbf{v}_1 +\n        u_{z}u_{y}\\sin \\theta+u_{x}\\cos \\theta\\mathbf{v}_2\n        -\\sin \\theta +u_{z}^{2}\\sin\\theta\\mathbf{v}_3\\end{bmatrix}_{\\theta=\\theta_0}\n\n    and is of dimension :math:`\\mathbb{R}^{3\\times 1}`.\n\n    Args:\n        u (numpy.ndarray): Arbitrary rotation axis\n        theta (float): Rotation angle (radians)\n        v (numpy.ndarray): Vector to rotate\n\n    Returns:\n        numpy.ndarray: Linearised rotation vector of dimensions :math:`\\mathbb{R}^{3\\times 1}`.\n    \"\"\"\n\n    u = u / np.linalg.norm(u)\n    c = np.cos(theta)\n    s = np.sin(theta)\n\n    ux, uy, uz = u\n    v1, v2, v3 = v\n\n    dR11 = -s + ux ** 2 * s\n    dR12 = ux * uy * s - uz * c\n    dR13 = ux * uz * s + uy * c\n\n    dR21 = uy * ux * s + uz * c\n    dR22 = -s + uy ** 2 * s\n    dR23 = uy * uz * s - ux * c\n\n    dR31 = uz * ux * s - uy * c\n    dR32 = uz * uy * s + ux * c\n    dR33 = -s + uz ** 2\n\n    dRv = np.zeros((3, ))\n    dRv[0] = dR11 * v1 + dR12 * v2 + dR13 * v3\n    dRv[1] = dR21 * v1 + dR22 * v2 + dR23 * v3\n    dRv[2] = dR31 * v1 + dR32 * v2 + dR33 * v3\n\n    return dRv\n\n"
  },
  {
    "path": "sharpy/linear/assembler/linearaeroelastic.py",
    "content": "import numpy as np\nimport scipy.linalg as sclalg\nimport warnings\n\nimport sharpy.linear.utils.ss_interface as ss_interface\nimport sharpy.linear.src.libss as libss\nimport sharpy.utils.settings as settings\nimport sharpy.utils.cout_utils as cout\nimport sharpy.utils.algebra as algebra\nimport sharpy.utils.generator_interface as gi\nfrom sharpy.linear.utils.ss_interface import LinearVector, InputVariable, StateVariable, OutputVariable\nimport sharpy.aero.utils.utils as aero_utils\n\n\n@ss_interface.linear_system\nclass LinearAeroelastic(ss_interface.BaseElement):\n    r\"\"\"\n    Assemble a linearised aeroelastic system\n\n    The aeroelastic system can be seen as the coupling between a linearised aerodynamic system (System 1) and\n    a linearised beam system (System 2).\n\n    The coupled system retains inputs and outputs from both systems such that\n\n    .. math:: \\mathbf{u} = [\\mathbf{u}_1;\\, \\mathbf{u}_2]\n\n    and the outputs are also ordered in a similar fashion\n\n    .. math:: \\mathbf{y} = [\\mathbf{y}_1;\\, \\mathbf{y}_2]\n\n    Reference the individual systems for the particular ordering of the respective input and output variables.\n    \"\"\"\n    sys_id = 'LinearAeroelastic'\n\n    settings_default = dict()\n    settings_types = dict()\n    settings_description = dict()\n\n    settings_types['aero_settings'] = 'dict'\n    settings_default['aero_settings'] = None\n    settings_description['aero_settings'] = 'Linear UVLM settings'\n\n    settings_types['beam_settings'] = 'dict'\n    settings_default['beam_settings'] = None\n    settings_description['beam_settings'] = 'Linear Beam settings'\n\n    settings_types['uvlm_filename'] = 'str'\n    settings_default['uvlm_filename'] = ''\n    settings_description['uvlm_filename'] = 'Path to .data.h5 file containing UVLM/ROM state space to load'\n\n    settings_types['track_body'] = 'bool'\n    settings_default['track_body'] = True\n    settings_description['track_body'] = 'UVLM inputs and outputs projected to coincide with lattice at linearisation'\n\n    settings_types['use_euler'] = 'bool'\n    settings_default['use_euler'] = True\n    settings_description['use_euler'] = 'Parametrise orientations in terms of Euler angles'\n\n    settings_table = settings.SettingsTable()\n    __doc__ += settings_table.generate(settings_types, settings_default, settings_description)\n\n    def __init__(self):\n\n        self.ss = None  # The state space object\n        self.lsys = dict()  # Contains the underlying objects\n        self.uvlm = None\n        self.beam = None\n\n        self.load_uvlm_from_file = False\n\n        self.settings = dict()\n        self.state_variables = None\n        self.couplings = dict()\n        self.linearisation_vectors = dict()\n\n        # Aeroelastic coupling gains\n        # transfer\n        self.Kdisp = None\n        self.Kvel_disp = None\n        self.Kdisp_vel = None\n        self.Kvel_vel = None\n        self.Kforces = None\n\n        # stiffening factors\n        self.Kss = None\n        self.Krs = None\n        self.Csr = None\n        self.Crs = None\n        self.Crr = None\n\n    def initialise(self, data):\n\n        try:\n            self.settings = data.settings['LinearAssembler']['linear_system_settings']\n        except KeyError:\n            self.settings = None\n        settings.to_custom_types(self.settings, self.settings_types, self.settings_default, no_ctype=True)\n\n        if self.settings['use_euler']:\n            self.settings['beam_settings']['use_euler'] = True\n\n        # Create Linear UVLM\n        self.uvlm = ss_interface.initialise_system('LinearUVLM')\n        self.uvlm.initialise(data, custom_settings=self.settings['aero_settings'])\n\n        # Get the minimum parameters needed to define the wake\n        vel_gen_name, vel_gen_settings = aero_utils.find_velocity_generator(data.settings)\n        vel_gen_type = gi.generator_from_string(vel_gen_name)\n        vel_gen = vel_gen_type()\n        vel_gen.initialise(vel_gen_settings) \n\n        wake_prop_settings = {'dt': self.settings['aero_settings']['dt'],\n                              'ts': data.ts,\n                              't': data.ts*self.settings['aero_settings']['dt'],\n                              'for_pos': data.structure.timestep_info[-1].for_pos,\n                              'cfl1': self.settings['aero_settings']['cfl1'],\n                              'vel_gen': vel_gen}\n\n        if self.settings['uvlm_filename'] == '':\n            self.uvlm.assemble(track_body=self.settings['track_body'], wake_prop_settings=wake_prop_settings)\n        else:\n            self.load_uvlm_from_file = True\n\n        # Create beam\n        self.beam = ss_interface.initialise_system('LinearBeam')\n        self.beam.initialise(data, custom_settings=self.settings['beam_settings'])\n\n        for k, v in self.uvlm.linearisation_vectors.items():\n            self.linearisation_vectors[k] = v\n        for k, v in self.beam.linearisation_vectors.items():\n            self.linearisation_vectors[k] = v\n\n        self.get_gebm2uvlm_gains(data)\n\n    def assemble(self):\n        r\"\"\"\n        Assembly of the linearised aeroelastic system.\n\n        The UVLM state-space system has already been assembled. Prior to assembling the beam's first order state-space,\n        the damping and stiffness matrices have to be modified to include the damping and stiffenning terms that arise\n        from the linearisation of the aeordynamic forces with respect to the A frame of reference. See\n        :func:`sharpy.linear.src.lin_aeroela.get_gebm2uvlm_gains()` for details on the linearisation.\n\n        Then the beam is assembled as per the given settings in normalised time if the aerodynamic system has been\n        scaled. The discrete time systems of the UVLM and the beam must have the same time step.\n\n        The UVLM inputs and outputs are then projected onto the structural degrees of freedom (obviously with the\n        exception of external gusts and control surfaces). Hence, the gains :math:`\\mathbf{K}_{sa}` and\n        :math:`\\mathbf{K}_{as}` are added to the output and input of the UVLM system, respectively. These gains perform\n        the following relation:\n\n        .. math:: \\begin{bmatrix}\\zeta \\\\ \\zeta' \\\\ u_g \\\\ \\delta \\end{bmatrix} = \\mathbf{K}_{as}\n            \\begin{bmatrix} \\eta \\\\ \\eta' \\\\ u_g \\\\ \\delta \\end{bmatrix} =\n\n        .. math:: \\mathbf{N}_{nodes} = \\mathbf{K}_{sa} \\mathbf{f}_{vertices}\n\n        If the beam is expressed in modal form, the UVLM is further projected onto the beam's modes to have the\n        following input/output structure:\n\n\n        Returns:\n\n        \"\"\"\n        uvlm = self.uvlm\n        beam = self.beam\n\n        # Linearisation of the aerodynamic forces introduces stiffenning and damping terms into the beam matrices\n        flex_nodes = self.beam.sys.num_dof_flex\n\n        rigid_dof = beam.sys.Kstr.shape[0] - flex_nodes\n        total_dof = flex_nodes + rigid_dof\n\n        if uvlm.scaled:\n            beam.assemble(t_ref=uvlm.sys.ScalingFacts['time'])\n        else:\n            beam.assemble()\n\n        if not self.load_uvlm_from_file:\n            # Projecting the UVLM inputs and outputs onto the structural degrees of freedom\n            Ksa = self.Kforces[:beam.sys.num_dof, :]  # maps aerodynamic grid forces to nodal forces\n            gain_ksa = libss.Gain(Ksa)\n            gain_ksa.input_variables = LinearVector.transform(uvlm.ss.output_variables, to_type=InputVariable)\n            if beam.sys.Kin is not None:\n                gain_ksa.output_variables = LinearVector.transform(beam.sys.Kin.input_variables, to_type=OutputVariable)\n            else:\n                gain_ksa.output_variables = LinearVector.transform(beam.ss.input_variables, to_type=OutputVariable)\n\n            # Map the nodal displacement and velocities onto the grid displacements and velocities\n            Kas = np.zeros((uvlm.ss.inputs, 2*beam.sys.num_dof + (uvlm.ss.inputs - 2*self.Kdisp.shape[0])))\n            Kas[:2*self.Kdisp.shape[0], :2*beam.sys.num_dof] = \\\n                np.block([[self.Kdisp[:, :beam.sys.num_dof], self.Kdisp_vel[:, :beam.sys.num_dof]],\n                [self.Kvel_disp[:, :beam.sys.num_dof], self.Kvel_vel[:, :beam.sys.num_dof]]])\n\n            # Retain other inputs\n            Kas[2*self.Kdisp.shape[0]:, 2*beam.sys.num_dof:] = np.eye(uvlm.ss.inputs - 2 * self.Kdisp.shape[0])\n\n            gain_kas = libss.Gain(Kas)\n            gain_kas.output_variables = LinearVector.transform(uvlm.ss.input_variables, to_type=OutputVariable)\n            if beam.sys.Kout is not None:\n                kas_in_vars = LinearVector.transform(beam.sys.Kout.output_variables, to_type=InputVariable)\n            else:\n                kas_in_vars = LinearVector.transform(beam.ss.output_variables, to_type=InputVariable)\n            for variable in uvlm.ss.input_variables:\n                if variable.name not in ['zeta', 'zeta_dot']:\n                    kas_in_vars.append(variable)\n            gain_kas.input_variables = kas_in_vars\n\n            # Scaling\n            if uvlm.scaled:\n                Kas /= uvlm.sys.ScalingFacts['length']\n\n            uvlm.connect_output(gain_ksa)\n            uvlm.connect_input(gain_kas)\n\n            # Stiffenning and damping terms within the uvlm\n            Dmod = np.zeros_like(uvlm.ss.D)\n            Dmod[:flex_nodes, :flex_nodes] -= self.Kss\n            if rigid_dof > 0:\n                Dmod[flex_nodes:, :flex_nodes] -= self.Krs\n                Dmod[flex_nodes:, total_dof: total_dof + flex_nodes] -= self.Crs\n                Dmod[:flex_nodes, total_dof + flex_nodes: 2 * total_dof] -= self.Csr\n                Dmod[flex_nodes:, total_dof + flex_nodes: 2 * total_dof] -= self.Crr\n                if uvlm.scaled:\n                    Dmod /= uvlm.sys.ScalingFacts['force']\n                uvlm.ss.D += Dmod\n\n            self.couplings['Ksa'] = gain_ksa\n            self.couplings['Kas'] = gain_kas\n\n            if self.settings['beam_settings']['modal_projection'] is True and \\\n                    self.settings['beam_settings']['inout_coords'] == 'modes':\n                # Project UVLM onto modal space\n                phi = beam.sys.U\n                in_mode_matrix = np.zeros((uvlm.ss.inputs, beam.ss.outputs + (uvlm.ss.inputs - 2*beam.sys.num_dof)))\n                in_mode_matrix[:2*beam.sys.num_dof, :2*beam.sys.num_modes] = sclalg.block_diag(phi, phi)\n                in_mode_matrix[2*beam.sys.num_dof:, 2*beam.sys.num_modes:] = np.eye(uvlm.ss.inputs - 2*beam.sys.num_dof)\n\n                in_mode_gain = libss.Gain(in_mode_matrix)\n                in_mode_inputs = LinearVector.transform(beam.ss.output_variables, to_type=InputVariable)\n                LinearVector.check_same_vectors(in_mode_inputs, beam.ss.output_variables)\n                for variable in uvlm.ss.input_variables.copy():\n                    if variable.name not in ['eta', 'eta_dot', 'beta_bar', 'beta']:\n                        in_mode_inputs.append(variable)\n\n                in_mode_gain.input_variables = in_mode_inputs\n\n                in_mode_gain.output_variables = LinearVector.transform(uvlm.ss.input_variables, to_type=OutputVariable)\n\n                out_mode_matrix = phi.T\n                out_mode_gain = libss.Gain(out_mode_matrix,\n                                           input_vars=LinearVector.transform(uvlm.ss.output_variables,\n                                                                             to_type=InputVariable),\n                                           output_vars=LinearVector.transform(beam.ss.input_variables,\n                                                                              to_type=OutputVariable))\n\n                uvlm.connect_input(in_mode_gain)\n                uvlm.connect_output(out_mode_gain)\n                self.couplings['in_mode_gain'] = in_mode_gain\n                self.couplings['out_mode_gain'] = out_mode_gain\n\n            # Reduce uvlm projected onto structural coordinates\n            if uvlm.rom:\n                if rigid_dof != 0:\n                    self.runrom_rbm(uvlm)\n                else:\n                    for k, rom in uvlm.rom.items():\n                        uvlm.ss = rom.run(uvlm.ss)\n\n        else:\n            uvlm.ss = self.load_uvlm(self.settings['uvlm_filename'])\n\n        # Coupling matrices\n        Tas = libss.Gain(np.eye(uvlm.ss.inputs, beam.ss.outputs),\n                         input_vars=LinearVector.transform(beam.ss.output_variables, to_type=InputVariable),\n                         output_vars=LinearVector.transform(uvlm.ss.input_variables, to_type=OutputVariable))\n        Tsa = libss.Gain(np.eye(beam.ss.inputs, uvlm.ss.outputs),\n                         input_vars=LinearVector.transform(uvlm.ss.output_variables, to_type=InputVariable),\n                         output_vars=LinearVector.transform(beam.ss.input_variables, to_type=OutputVariable))\n\n        # Scale coupling matrices\n        if uvlm.scaled:\n            Tsa.value *= uvlm.sys.ScalingFacts['force'] * uvlm.sys.ScalingFacts['time'] ** 2\n            if rigid_dof > 0:\n                Tas.value[:flex_nodes + 6, :flex_nodes + 6] /= uvlm.sys.ScalingFacts['length']\n                Tas.value[total_dof: total_dof + flex_nodes + 6] /= uvlm.sys.ScalingFacts['length']\n            else:\n                if not self.settings['beam_settings']['modal_projection']:\n                    Tas.value /= uvlm.sys.ScalingFacts['length']\n\n        ss = libss.couple(ss01=uvlm.ss, ss02=beam.ss, K12=Tas, K21=Tsa)\n\n        self.couplings['Tas'] = Tas\n        self.couplings['Tsa'] = Tsa\n        self.state_variables = {'aero': uvlm.ss.states,\n                                'beam': beam.ss.states}\n\n        # Save zero force reference\n        self.linearisation_vectors['forces_aero_beam_dof'] = Ksa.dot(self.linearisation_vectors['forces_aero'])\n        if self.settings['beam_settings']['modal_projection']:\n            self.linearisation_vectors['mode_shapes'] = beam.sys.U\n\n        if self.settings['beam_settings']['modal_projection'] is True and \\\n                self.settings['beam_settings']['inout_coords'] == 'modes':\n            self.linearisation_vectors['forces_aero_beam_dof'] = out_mode_matrix.dot(self.linearisation_vectors['forces_aero_beam_dof'])\n\n        cout.cout_wrap('Aeroelastic system assembled:')\n        cout.cout_wrap('\\tAerodynamic states: %g' % uvlm.ss.states, 1)\n        cout.cout_wrap('\\tStructural states: %g' % beam.ss.states, 1)\n        cout.cout_wrap('\\tTotal states: %g' % ss.states, 1)\n        cout.cout_wrap('\\tInputs: %g' % ss.inputs, 1)\n        cout.cout_wrap('\\tOutputs: %g' % ss.outputs, 1)\n\n        self.ss = ss\n        return self.ss\n\n    def update(self, u_infty):\n        \"\"\"\n        Updates the aeroelastic scaled system with the new reference velocity.\n\n        Only the beam equations need updating since the only dependency in the forward flight velocity resides there.\n\n        Args:\n              u_infty (float): New reference velocity\n\n        Returns:\n            sharpy.linear.src.libss.StateSpace: Updated aeroelastic state-space system\n\n        \"\"\"\n        t_ref = self.uvlm.sys.ScalingFacts['length'] / u_infty\n\n        self.beam.sys.update_matrices_time_scale(t_ref)\n        self.beam.sys.assemble()\n        if self.beam.sys.SSdisc is not None:\n            self.beam.ss = self.beam.sys.SSdisc\n        elif self.beam.sys.SScont is not None:\n            self.beam.ss = self.beam.sys.SScont\n        else:\n            raise AttributeError('Could not find either a continuous or discrete system in Beam')\n\n        self.ss = libss.couple(ss01=self.uvlm.ss, ss02=self.beam.ss,\n                               K12=self.couplings['Tas'], K21=self.couplings['Tsa'])\n\n        return self.ss\n\n    def runrom_rbm(self, uvlm):\n        ss = uvlm.ss\n        rig_nodes = self.beam.sys.num_dof_rig\n        if rig_nodes == 9:\n            orient_dof = 3\n        else:\n            orient_dof = 4\n        # Input side\n        if self.settings['beam_settings']['modal_projection'] is True and \\\n                self.settings['beam_settings']['inout_coords'] == 'modes':\n            rem_int_modes = np.zeros((ss.inputs, ss.inputs - rig_nodes))\n            rem_int_modes[rig_nodes:, :] = np.eye(ss.inputs - rig_nodes)\n\n            # Output side - remove quaternion equations output\n            rem_quat_out = np.zeros((ss.outputs-orient_dof, ss.outputs))\n            # find quaternion indices\n            U = self.beam.sys.U\n            indices = np.where(U[-orient_dof:, :] == 1.)[1]\n            j = 0\n            for i in range(ss.outputs):\n                if i in indices:\n                    continue\n                rem_quat_out[j, i] = 1\n                j += 1\n\n            in_vars = ss.input_variables.copy()\n            in_vars.modify('q', size=in_vars.get_variable_from_name('q').size - rig_nodes)\n            remove_integro_inputs = libss.Gain(rem_int_modes,\n                                               input_vars=in_vars,\n                                               output_vars=libss.LinearVector.transform(ss.input_variables,\n                                                                                        to_type=OutputVariable))\n\n            out_vars = ss.output_variables.copy()\n            out_vars.modify('Q', size=out_vars.get_variable_from_name('Q').size-orient_dof)\n            remove_quaternion_out = libss.Gain(rem_quat_out,\n                                               input_vars=libss.LinearVector.transform(ss.output_variables,\n                                                                                       to_type=InputVariable),\n                                               output_vars=out_vars)\n\n        else:\n            # TODO: THESE NEED DOING\n            rem_int_modes = np.zeros((ss.inputs, ss.inputs - rig_nodes))\n            rem_int_modes[:self.beam.sys.num_dof_flex, :self.beam.sys.num_dof_flex] = \\\n                np.eye(self.beam.sys.num_dof_flex)\n            rem_int_modes[self.beam.sys.num_dof_flex+rig_nodes:, self.beam.sys.num_dof_flex:] = \\\n                np.eye(ss.inputs - self.beam.sys.num_dof_flex - rig_nodes)\n\n            rem_quat_out = np.zeros((ss.outputs-orient_dof, ss.outputs))\n            rem_quat_out[:, :-orient_dof] = np.eye(ss.outputs-orient_dof)\n\n        ss.addGain(remove_integro_inputs, where='in')\n        ss.addGain(remove_quaternion_out, where='out')\n        for k, rom in uvlm.rom.items():\n            uvlm.ss = rom.run(uvlm.ss)\n\n        add_integro_inputs = remove_integro_inputs.transpose()\n        add_quaternion_outputs = remove_quaternion_out.transpose()\n        uvlm.ss.addGain(add_integro_inputs, where='in')\n        uvlm.ss.addGain(add_quaternion_outputs, where='out')\n\n    def get_gebm2uvlm_gains(self, data):\n        r\"\"\"\n        Provides:\n\n            - the gain matrices required to connect the linearised GEBM and UVLM\n             inputs/outputs\n\n            - the stiffening and damping factors to be added to the linearised\n              GEBM equations in order to account for non-zero aerodynamic loads at\n              the linearisation point.\n\n        The function produces the gain matrices:\n\n            - ``Kdisp``: gains from GEBM to UVLM grid displacements\n            - ``Kvel_disp``: influence of GEBM dofs displacements to UVLM grid\n              velocities.\n            - ``Kvel_vel``: influence of GEBM dofs displacements to UVLM grid\n              displacements.\n            - ``Kforces`` (UVLM->GEBM) dimensions are the transpose than the\n               Kdisp and Kvel* matrices. Hence, when allocation this term, ``ii``\n               and ``jj`` indices will unintuitively refer to columns and rows,\n              respectively.\n\n\n        And the stiffening/damping terms accounting for non-zero aerodynamic\n        forces at the linearisation point:\n\n            - ``Kss``: stiffness factor (flexible dof -> flexible dof) accounting\n              for non-zero forces at the linearisation point.\n            - ``Csr``: damping factor  (rigid dof -> flexible dof)\n            - ``Crs``: damping factor (flexible dof -> rigid dof)\n            - ``Crr``: damping factor (rigid dof -> rigid dof)\n\n\n        Stiffening and damping related terms due to the non-zero aerodynamic forces at the linearisation point:\n\n        .. math::\n            \\mathbf{F}_{A,n} = C^{AG}(\\mathbf{\\chi})\\sum_j \\mathbf{f}_{G,j} \\rightarrow\n            \\delta\\mathbf{F}_{A,n} = C^{AG}_0 \\sum_j \\delta\\mathbf{f}_{G,j} + \\frac{\\partial}{\\partial\\chi}(C^{AG}\\sum_j\n            \\mathbf{f}_{G,j}^0)\\delta\\chi\n\n        The term multiplied by the variation in the quaternion, :math:`\\delta\\chi`, couples the forces with the rigid\n        body equations and becomes part of :math:`\\mathbf{C}_{sr}`.\n\n        Similarly, the linearisation of the moments results in expression that contribute to the stiffness and\n        damping matrices.\n\n        .. math::\n            \\mathbf{M}_{B,n} = \\sum_j \\tilde{X}_B C^{BA}(\\Psi)C^{AG}(\\chi)\\mathbf{f}_{G,j}\n\n        .. math::\n            \\delta\\mathbf{M}_{B,n} = \\sum_j \\tilde{X}_B\\left(C_0^{BG}\\delta\\mathbf{f}_{G,j}\n            + \\frac{\\partial}{\\partial\\Psi}(C^{BA}\\delta\\mathbf{f}^0_{A,j})\\delta\\Psi\n            + \\frac{\\partial}{\\partial\\chi}(C^{BA}_0 C^{AG} \\mathbf{f}_{G,j})\\delta\\chi\\right)\n\n        The linearised equations of motion for the geometrically exact beam model take the input term :math:`\\delta\n        \\mathbf{Q}_n = \\{\\delta\\mathbf{F}_{A,n},\\, T_0^T\\delta\\mathbf{M}_{B,n}\\}`, which means that the moments\n        should be provided as :math:`T^T(\\Psi)\\mathbf{M}_B` instead of :math:`\\mathbf{M}_A = C^{AB}\\mathbf{M}_B`,\n        where :math:`T(\\Psi)` is the tangential operator.\n\n        .. math::\n            \\delta(T^T\\mathbf{M}_B) = T^T_0\\delta\\mathbf{M}_B\n            + \\frac{\\partial}{\\partial\\Psi}(T^T\\delta\\mathbf{M}_B^0)\\delta\\Psi\n\n        is the linearised expression for the moments, where the first term would correspond to the input terms to the\n        beam equations and the second arises due to the non-zero aerodynamic moment at the linearisation point and\n        must be subtracted (since it comes from the forces) to form part of :math:`\\mathbf{K}_{ss}`. In addition, the\n        :math:`\\delta\\mathbf{M}_B` term depends on both :math:`\\delta\\Psi` and :math:`\\delta\\chi`, therefore those\n        terms would also contribute to :math:`\\mathbf{K}_{ss}` and :math:`\\mathbf{C}_{sr}`, respectively.\n\n        The contribution from the total forces and moments will be accounted for in :math:`\\mathbf{C}_{rr}` and\n        :math:`\\mathbf{C}_{rs}`.\n\n        .. math::\n            \\delta\\mathbf{F}_{tot,A} = \\sum_n\\left(C^{GA}_0 \\sum_j \\delta\\mathbf{f}_{G,j}\n            + \\frac{\\partial}{\\partial\\chi}(C^{AG}\\sum_j\n            \\mathbf{f}_{G,j}^0)\\delta\\chi\\right)\n\n        Therefore, after running this method, the beam matrices will be updated as:\n\n        >>> K_beam[:flex_dof, :flex_dof] += Kss\n        >>> C_beam[:flex_dof, -rigid_dof:] += Csr\n        >>> C_beam[-rigid_dof:, :flex_dof] += Crs\n        >>> C_beam[-rigid_dof:, -rigid_dof:] += Crr\n\n        Track body option\n\n        The ``track_body`` setting restricts the UVLM grid to linear translation motions and therefore should be used to\n        ensure that the forces are computed using the reference linearisation frame.\n\n        The UVLM and beam are linearised about a reference equilibrium condition. The UVLM is defined in the inertial\n        reference frame while the beam employs the body attached frame and therefore a projection from one frame onto\n        another is required during the coupling process.\n\n        However, the inputs to the UVLM (i.e. the lattice grid coordinates) are obtained from the beam deformation which\n        is expressed in A frame and therefore the grid coordinates need to be projected onto the inertial frame ``G``.\n        As the beam rotates, the projection onto the ``G`` frame of the lattice grid coordinates will result in a grid\n        that is not coincident with that at the linearisation reference and therefore the grid coordinates must be\n        projected onto the original frame, which will be referred to as ``U``. The transformation between the inertial\n        frame ``G`` and the ``U`` frame is a function of the rotation of the ``A`` frame and the original position:\n\n        .. math:: C^{UG}(\\chi) = C^{GA}(\\chi_0)C^{AG}(\\chi)\n\n        Therefore, the grid coordinates obtained in ``A`` frame and projected onto the ``G`` frame can be transformed\n        to the ``U`` frame using\n\n        .. math:: \\zeta_U = C^{UG}(\\chi) \\zeta_G\n\n        which allows the grid lattice coordinates to be projected onto the original linearisation frame.\n\n        In a similar fashion, the output lattice vertex forces of the UVLM are defined in the original linearisation\n        frame ``U`` and need to be transformed onto the inertial frame ``G`` prior to projecting them onto the ``A``\n        frame to use them as the input forces to the beam system.\n\n        .. math:: \\boldsymbol{f}_G = C^{GU}(\\chi)\\boldsymbol{f}_U\n\n        The linearisation of the above relations lead to the following expressions that have to be added to the\n        coupling matrices:\n\n            * ``Kdisp_vel`` terms:\n\n                .. math::\n                    \\delta\\boldsymbol{\\zeta}_U= C^{GA}_0 \\frac{\\partial}{\\partial \\boldsymbol{\\chi}}\n                    \\left(C^{AG}\\boldsymbol{\\zeta}_{G,0}\\right)\\delta\\boldsymbol{\\chi} + \\delta\\boldsymbol{\\zeta}_G\n\n            * ``Kvel_vel`` terms:\n\n                .. math::\n                    \\delta\\dot{\\boldsymbol{\\zeta}}_U= C^{GA}_0 \\frac{\\partial}{\\partial \\boldsymbol{\\chi}}\n                    \\left(C^{AG}\\dot{\\boldsymbol{\\zeta}}_{G,0}\\right)\\delta\\boldsymbol{\\chi}\n                    + \\delta\\dot{\\boldsymbol{\\zeta}}_G\n\n        The transformation of the forces and moments introduces terms that are functions of the orientation and\n        are included as stiffening and damping terms in the beam's matrices:\n\n            * ``Csr`` damping terms relating to translation forces:\n\n                .. math::\n                    C_{sr}^{tra} -= \\frac{\\partial}{\\partial\\boldsymbol{\\chi}}\n                    \\left(C^{GA} C^{AG}_0 \\boldsymbol{f}_{G,0}\\right)\\delta\\boldsymbol{\\chi}\n\n            * ``Csr`` damping terms related to moments:\n\n                .. math::\n                    C_{sr}^{rot} -= T^\\top\\widetilde{\\mathbf{X}}_B C^{BG}\n                    \\frac{\\partial}{\\partial\\boldsymbol{\\chi}}\n                    \\left(C^{GA} C^{AG}_0 \\boldsymbol{f}_{G,0}\\right)\\delta\\boldsymbol{\\chi}\n\n\n        The ``track_body`` setting.\n\n        When ``track_body`` is enabled, the UVLM grid is no longer coincident with the inertial reference frame\n        throughout the simulation but rather it is able to rotate as the ``A`` frame rotates. This is to simulate a free\n        flying vehicle, where, for instance, the orientation does not affect the aerodynamics. The UVLM defined in this\n        frame of reference, named ``U``, satisfies the following convention:\n\n            * The ``U`` frame is coincident with the ``G`` frame at the time of linearisation.\n\n            * The ``U`` frame rotates as the ``A`` frame rotates.\n\n        Transformations related to the ``U`` frame of reference:\n\n            * The angle between the ``U`` frame and the ``A`` frame is always constant and equal\n              to :math:`\\boldsymbol{\\Theta}_0`.\n\n            * The angle between the ``A`` frame and the ``G`` frame is :math:`\\boldsymbol{\\Theta}=\\boldsymbol{\\Theta}_0\n              + \\delta\\boldsymbol{\\Theta}`\n\n            * The projection of a vector expressed in the ``G`` frame onto the ``U`` frame is expressed by:\n\n                .. math:: \\boldsymbol{v}^U = C^{GA}_0 C^{AG} \\boldsymbol{v}^G\n\n            * The reverse, a projection of a vector expressed in the ``U`` frame onto the ``G`` frame, is expressed by\n\n                .. math:: \\boldsymbol{v}^U = C^{GA} C^{AG}_0 \\boldsymbol{v}^U\n\n        The effect this has on the aeroelastic coupling between the UVLM and the structural dynamics is that the\n        orientation and change of orientation of the vehicle has no effect on the aerodynamics. The aerodynamics are\n        solely affected by the contribution of the 6-rigid body velocities (as well as the flexible DOFs velocities).\n\n        \"\"\"\n\n        aero = data.aero\n        structure = data.structure\n        tsaero = self.uvlm.tsaero0\n        tsstr = self.beam.tsstruct0\n\n        Kzeta = self.uvlm.sys.Kzeta\n        num_dof_str = self.beam.sys.num_dof_str\n        num_dof_rig = self.beam.sys.num_dof_rig\n        num_dof_flex = self.beam.sys.num_dof_flex\n        use_euler = self.beam.sys.use_euler\n\n        # allocate output\n        Kdisp = np.zeros((3 * Kzeta, num_dof_str))\n        Kdisp_vel = np.zeros((3 * Kzeta, num_dof_str))  # Orientation is in velocity DOFs\n        Kvel_disp = np.zeros((3 * Kzeta, num_dof_str))\n        Kvel_vel = np.zeros((3 * Kzeta, num_dof_str))\n        Kforces = np.zeros((num_dof_str, 3 * Kzeta))\n\n        Kss = np.zeros((num_dof_flex, num_dof_flex))\n        Csr = np.zeros((num_dof_flex, num_dof_rig))\n        Crs = np.zeros((num_dof_rig, num_dof_flex))\n        Crr = np.zeros((num_dof_rig, num_dof_rig))\n        Krs = np.zeros((num_dof_rig, num_dof_flex))\n\n        # get projection matrix A->G\n        # (and other quantities indep. from nodal position)\n        Cga = algebra.quat2rotation(tsstr.quat)  # NG 6-8-19 removing .T\n        Cag = Cga.T\n\n        # for_pos=tsstr.for_pos\n        for_vel = tsstr.for_vel[:3]\n        for_rot = tsstr.for_vel[3:]\n        skew_for_rot = algebra.skew(for_rot)\n        Der_vel_Ra = np.dot(Cga, skew_for_rot)\n\n        Faero = np.zeros(3)\n        FaeroA = np.zeros(3)\n\n        # GEBM degrees of freedom\n        jj_for_tra = range(num_dof_str - num_dof_rig,\n                           num_dof_str - num_dof_rig + 3)\n        jj_for_rot = range(num_dof_str - num_dof_rig + 3,\n                           num_dof_str - num_dof_rig + 6)\n\n        if use_euler:\n            jj_euler = range(num_dof_str - 3, num_dof_str)\n            euler = algebra.quat2euler(tsstr.quat)\n            tsstr.euler = euler\n        else:\n            jj_quat = range(num_dof_str - 4, num_dof_str)\n\n        jj = 0  # nodal dof index\n        for node_glob in range(structure.num_node):\n\n            ### detect bc at node (and no. of dofs)\n            bc_here = structure.boundary_conditions[node_glob]\n\n            if bc_here == 1:  # clamp (only rigid-body)\n                dofs_here = 0\n                jj_tra, jj_rot = [], []\n            # continue\n\n            elif bc_here == -1 or bc_here == 0:  # (rigid+flex body)\n                dofs_here = 6\n                jj_tra = 6 * structure.vdof[node_glob] + np.array([0, 1, 2], dtype=int)\n                jj_rot = 6 * structure.vdof[node_glob] + np.array([3, 4, 5], dtype=int)\n            else:\n                raise NameError('Invalid boundary condition (%d) at node %d!' \\\n                                % (bc_here, node_glob))\n\n            jj += dofs_here\n\n            # retrieve element and local index\n            ee, node_loc = structure.node_master_elem[node_glob, :]\n\n            # get position, crv and rotation matrix\n            Ra = tsstr.pos[node_glob, :]  # in A FoR, w.r.t. origin A-G\n            Rg = np.dot(Cag.T, Ra)  # in G FoR, w.r.t. origin A-G\n            psi = tsstr.psi[ee, node_loc, :]\n            psi_dot = tsstr.psi_dot[ee, node_loc, :]\n            Cab = algebra.crv2rotation(psi)\n            Cba = Cab.T\n            Cbg = np.dot(Cab.T, Cag)\n            Tan = algebra.crv2tan(psi)\n\n            track_body = self.settings['track_body']\n\n            ### str -> aero mapping\n            # some nodes may be linked to multiple surfaces...\n            for str2aero_here in aero.struct2aero_mapping[node_glob]:\n\n                # detect surface/span-wise coordinate (ss,nn)\n                nn, ss = str2aero_here['i_n'], str2aero_here['i_surf']\n                # print('%.2d,%.2d'%(nn,ss))\n\n                # surface panelling\n                M = aero.dimensions[ss][0]\n                N = aero.dimensions[ss][1]\n\n                Kzeta_start = 3 * sum(self.uvlm.sys.MS.KKzeta[:ss])\n                shape_zeta = (3, M + 1, N + 1)\n\n                for mm in range(M + 1):\n                    # get bound vertex index\n                    ii_vert = [Kzeta_start + np.ravel_multi_index(\n                        (cc, mm, nn), shape_zeta) for cc in range(3)]\n\n                    # get position vectors\n                    zetag = tsaero.zeta[ss][:, mm, nn]  # in G FoR, w.r.t. origin A-G\n                    zetaa = np.dot(Cag, zetag)  # in A FoR, w.r.t. origin A-G\n                    Xg = zetag - Rg  # in G FoR, w.r.t. origin B\n                    Xb = np.dot(Cbg, Xg)  # in B FoR, w.r.t. origin B\n\n                    # get rotation terms\n                    Xbskew = algebra.skew(Xb)\n                    XbskewTan = np.dot(Xbskew, Tan)\n\n                    # get velocity terms\n                    zetag_dot = tsaero.zeta_dot[ss][:, mm, nn] - Cga.dot(for_vel)  # in G FoR, w.r.t. origin A-G\n                    zetaa_dot = np.dot(Cag, zetag_dot)  # in A FoR, w.r.t. origin A-G\n\n                    # get aero force\n                    faero = tsaero.forces[ss][:3, mm, nn]\n                    Faero += faero\n                    faero_a = np.dot(Cag, faero)\n                    FaeroA += faero_a\n                    maero_g = np.cross(Xg, faero)\n                    maero_b = np.dot(Cbg, maero_g)\n\n                    ### ---------------------------------------- allocate Kdisp\n\n                    if bc_here != 1:\n                        # wrt pos - Eq 25 second term\n                        Kdisp[np.ix_(ii_vert, jj_tra)] += Cga\n\n                        # wrt psi - Eq 26\n                        Kdisp[np.ix_(ii_vert, jj_rot)] -= np.dot(Cbg.T, XbskewTan)\n\n                    # w.r.t. position of FoR A (w.r.t. origin G)\n                    # null as A and G have always same origin in SHARPy\n\n                    # # ### w.r.t. quaternion (attitude changes)\n                    if use_euler:\n                        Kdisp_vel[np.ix_(ii_vert, jj_euler)] += \\\n                            algebra.der_Ceuler_by_v(tsstr.euler, zetaa)\n\n                        # Track body - project inputs as for A not moving\n                        if track_body:\n                            Kdisp_vel[np.ix_(ii_vert, jj_euler)] += \\\n                                Cga.dot(algebra.der_Peuler_by_v(tsstr.euler, zetag))\n                    else:\n                        # Equation 25\n                        # Kdisp[np.ix_(ii_vert, jj_quat)] += \\\n                        #     algebra.der_Cquat_by_v(tsstr.quat, zetaa)\n                        Kdisp_vel[np.ix_(ii_vert, jj_quat)] += \\\n                            algebra.der_Cquat_by_v(tsstr.quat, zetaa)\n\n                        # Track body - project inputs as for A not moving\n                        if track_body:\n                            Kdisp_vel[np.ix_(ii_vert, jj_quat)] += \\\n                                Cga.dot(algebra.der_CquatT_by_v(tsstr.quat, zetag))\n\n                    ### ------------------------------------ allocate Kvel_disp\n\n                    if bc_here != 1:\n                        # # wrt pos\n                        Kvel_disp[np.ix_(ii_vert, jj_tra)] += Der_vel_Ra\n\n                        # wrt psi (at zero psi_dot)\n                        Kvel_disp[np.ix_(ii_vert, jj_rot)] -= \\\n                            np.dot(Cga,\n                                   np.dot(skew_for_rot,\n                                          np.dot(Cab, XbskewTan)))\n\n                        # # wrt psi (psi_dot contributions - verified)\n                        Kvel_disp[np.ix_(ii_vert, jj_rot)] += np.dot(Cbg.T, np.dot(\n                            algebra.skew(np.dot(XbskewTan, psi_dot)), Tan))\n\n                        if np.linalg.norm(psi) >= 1e-6:\n                            Kvel_disp[np.ix_(ii_vert, jj_rot)] -= \\\n                                np.dot(Cbg.T,\n                                       np.dot(Xbskew,\n                                              algebra.der_Tan_by_xv(psi, psi_dot)))\n\n                    # # w.r.t. position of FoR A (w.r.t. origin G)\n                    # # null as A and G have always same origin in SHARPy\n\n                    # # ### w.r.t. quaternion (attitude changes) - Eq 30\n                    if use_euler:\n                        Kvel_vel[np.ix_(ii_vert, jj_euler)] += \\\n                            algebra.der_Ceuler_by_v(tsstr.euler, zetaa_dot)\n\n                        # Track body if ForA is rotating\n                        if track_body:\n                            Kvel_vel[np.ix_(ii_vert, jj_euler)] += \\\n                                Cga.dot(algebra.der_Peuler_by_v(tsstr.euler, zetag_dot))\n                    else:\n                        Kvel_vel[np.ix_(ii_vert, jj_quat)] += \\\n                            algebra.der_Cquat_by_v(tsstr.quat, zetaa_dot)\n\n                        # Track body if ForA is rotating\n                        if track_body:\n                            Kvel_vel[np.ix_(ii_vert, jj_quat)] += \\\n                                Cga.dot(algebra.der_CquatT_by_v(tsstr.quat, zetag_dot))\n\n                    ### ------------------------------------- allocate Kvel_vel\n\n                    if bc_here != 1:\n                        # wrt pos_dot\n                        Kvel_vel[np.ix_(ii_vert, jj_tra)] += Cga\n\n                        # # wrt crv_dot\n                        Kvel_vel[np.ix_(ii_vert, jj_rot)] -= np.dot(Cbg.T, XbskewTan)\n\n                    # # wrt velocity of FoR A\n                    Kvel_vel[np.ix_(ii_vert, jj_for_tra)] += Cga\n                    Kvel_vel[np.ix_(ii_vert, jj_for_rot)] -= \\\n                        np.dot(Cga, algebra.skew(zetaa))\n\n                    # wrt rate of change of quaternion: not implemented!\n\n                    ### -------------------------------------- allocate Kforces\n\n                    if bc_here != 1:\n                        # nodal forces\n                        Kforces[np.ix_(jj_tra, ii_vert)] += Cag\n\n                        # nodal moments\n                        Kforces[np.ix_(jj_rot, ii_vert)] += \\\n                            np.dot(Tan.T, np.dot(Cbg, algebra.skew(Xg)))\n                    # or, equivalently, np.dot( algebra.skew(Xb),Cbg)\n\n                    # total forces\n                    Kforces[np.ix_(jj_for_tra, ii_vert)] += Cag\n\n                    # total moments\n                    Kforces[np.ix_(jj_for_rot, ii_vert)] += \\\n                        np.dot(Cag, algebra.skew(zetag))\n\n                    # quaternion equation\n                    # null, as not dep. on external forces\n\n                    ### --------------------------------------- allocate Kstiff\n\n                    ### flexible dof equations (Kss and Csr)\n                    if bc_here != 1:\n                        # nodal forces\n                        if use_euler:\n                            if not track_body:\n                                Csr[jj_tra, -3:] -= algebra.der_Peuler_by_v(tsstr.euler, faero)\n                                # Csr[jj_tra, -3:] -= algebra.der_Ceuler_by_v(tsstr.euler, Cga.T.dot(faero))\n\n                        else:\n                            if not track_body:\n                                Csr[jj_tra, -4:] -= algebra.der_CquatT_by_v(tsstr.quat, faero)\n\n                            # Track body\n                            # if track_body:\n                            #     Csr[jj_tra, -4:] -= algebra.der_Cquat_by_v(tsstr.quat, Cga.T.dot(faero))\n\n                        ### moments\n                        TanTXbskew = np.dot(Tan.T, Xbskew)\n                        # contrib. of TanT (dpsi) - Eq 37 - Integration of UVLM and GEBM\n                        Kss[np.ix_(jj_rot, jj_rot)] -= algebra.der_TanT_by_xv(psi, maero_b)\n                        # contrib of delta aero moment (dpsi) - Eq 36\n                        Kss[np.ix_(jj_rot, jj_rot)] -= \\\n                            np.dot(TanTXbskew, algebra.der_CcrvT_by_v(psi, np.dot(Cag, faero)))\n                        # contribution of delta aero moment (dquat)\n                        if use_euler:\n                            if not track_body:\n                                Csr[jj_rot, -3:] -= \\\n                                    np.dot(TanTXbskew,\n                                           np.dot(Cba,\n                                                  algebra.der_Peuler_by_v(tsstr.euler, faero)))\n\n                            # if track_body:\n                            #     Csr[jj_rot, -3:] -= \\\n                            #         np.dot(TanTXbskew,\n                            #                np.dot(Cbg,\n                            #                       algebra.der_Peuler_by_v(tsstr.euler, Cga.T.dot(faero))))\n                        else:\n                            if not track_body:\n                                Csr[jj_rot, -4:] -= \\\n                                    np.dot(TanTXbskew,\n                                           np.dot(Cba,\n                                                  algebra.der_CquatT_by_v(tsstr.quat, faero)))\n\n                            # Track body\n                            # if track_body:\n                            #     Csr[jj_rot, -4:] -= \\\n                            #         np.dot(TanTXbskew,\n                            #                np.dot(Cbg,\n                            #                       algebra.der_CquatT_by_v(tsstr.quat, Cga.T.dot(faero))))\n\n                    ### rigid body eqs (Crs and Crr)\n\n                    if bc_here != 1:\n                        # Changed Crs to Krs - NG 14/5/19\n                        # moments contribution due to delta_Ra (+ sign intentional)\n                        Krs[3:6, jj_tra] += algebra.skew(faero_a)\n                        # moment contribution due to delta_psi (+ sign intentional)\n                        Krs[3:6, jj_rot] += np.dot(algebra.skew(faero_a),\n                                                   algebra.der_Ccrv_by_v(psi, Xb))\n\n                    if use_euler:\n                        if not track_body:\n                            # total force\n                            Crr[:3, -3:] -= algebra.der_Peuler_by_v(tsstr.euler, faero)\n\n                            # total moment contribution due to change in euler angles\n                            Crr[3:6, -3:] -= algebra.der_Peuler_by_v(tsstr.euler, np.cross(zetag, faero))\n                            Crr[3:6, -3:] += np.dot(\n                                np.dot(Cag, algebra.skew(faero)),\n                                algebra.der_Peuler_by_v(tsstr.euler, np.dot(Cab, Xb)))\n\n                    else:\n                        if not track_body:\n                            # total force\n                            Crr[:3, -4:] -= algebra.der_CquatT_by_v(tsstr.quat, faero)\n\n                            # total moment contribution due to quaternion\n                            Crr[3:6, -4:] -= algebra.der_CquatT_by_v(tsstr.quat, np.cross(zetag, faero))\n                            Crr[3:6, -4:] += np.dot(\n                                np.dot(Cag, algebra.skew(faero)),\n                                algebra.der_CquatT_by_v(tsstr.quat, np.dot(Cab, Xb)))\n\n                        # # Track body\n                        # if track_body:\n                        #     # NG 20/8/19 - is the Cag needed here? Verify\n                        #     Crr[:3, -4:] -= Cag.dot(algebra.der_Cquat_by_v(tsstr.quat, Cga.T.dot(faero)))\n                        #\n                        #     Crr[3:6, -4:] -= Cag.dot(algebra.skew(zetag).dot(algebra.der_Cquat_by_v(tsstr.quat, Cga.T.dot(faero))))\n                        #     Crr[3:6, -4:] += Cag.dot(algebra.skew(faero)).dot(algebra.der_Cquat_by_v(tsstr.quat, Cga.T.dot(zetag)))\n\n\n        # transfer\n        self.Kdisp = Kdisp\n        self.Kvel_disp = Kvel_disp\n        self.Kdisp_vel = Kdisp_vel\n        self.Kvel_vel = Kvel_vel\n        self.Kforces = Kforces\n\n        # stiffening factors\n        self.Kss = Kss\n        self.Krs = Krs\n        self.Csr = Csr\n        self.Crs = Crs\n        self.Crr = Crr\n\n    def to_nodal_coordinates(self):\n        \"\"\"\n        Transforms the outputs of the system to nodal coordinates if they were previously expressed in modal space\n        \"\"\"\n\n        is_modal = self.beam.sys.modal\n\n        if is_modal:\n            beam_kin = self.beam.sys.Kin    # N to Q\n            beam_kout = self.beam.sys.Kout  # q to eta\n\n            aug_in_gain = sclalg.block_diag(self.couplings['in_mode_gain'].value.T, beam_kin.value)\n            input_gain = libss.Gain(aug_in_gain,\n                                    input_vars=LinearVector.merge(\n                                        LinearVector.transform(\n                                            self.couplings['in_mode_gain'].output_variables, to_type=InputVariable),\n                                        beam_kin.input_variables),\n                                    output_vars=LinearVector.merge(\n                                        LinearVector.transform(\n                                            self.couplings['in_mode_gain'].input_variables, to_type=OutputVariable),\n                                        beam_kin.output_variables)\n                                    )\n            try:\n                acceleration_gain = self.beam.sys.acceleration_modal_gain\n            except AttributeError:\n                aug_out_gain = sclalg.block_diag(self.couplings['out_mode_gain'].value.T, beam_kout.value)\n                output_gain = libss.Gain(aug_out_gain,\n                                         input_vars=LinearVector.merge(\n                                             LinearVector.transform(\n                                                 self.couplings['out_mode_gain'].output_variables, to_type=InputVariable),\n                                             beam_kout.input_variables),\n                                         output_vars=LinearVector.merge(\n                                             LinearVector.transform(\n                                                 self.couplings['out_mode_gain'].input_variables, to_type=OutputVariable),\n                                             beam_kout.output_variables)\n                                         )\n            else:\n                aug_out_gain = sclalg.block_diag(self.couplings['out_mode_gain'].value.T, beam_kout.value,\n                                                 acceleration_gain.value)\n                output_gain = libss.Gain(aug_out_gain,\n                                         input_vars=LinearVector.merge(\n                                             LinearVector.transform(\n                                                 self.couplings['out_mode_gain'].output_variables, to_type=InputVariable),\n                                             LinearVector.merge(beam_kout.input_variables, acceleration_gain.input_variables),\n                                         ),\n                                         output_vars=LinearVector.merge(\n                                             LinearVector.transform(\n                                                 self.couplings['out_mode_gain'].input_variables, to_type=OutputVariable),\n                                             LinearVector.merge(beam_kout.output_variables, acceleration_gain.output_variables))\n                                         )\n\n            self.ss.addGain(input_gain, where='in')\n            self.ss.addGain(output_gain, where='out')\n\n    @staticmethod\n    def load_uvlm(filename):\n        import sharpy.utils.h5utils as h5\n        cout.cout_wrap('Loading UVLM state space system projected onto structural DOFs from file')\n        read_data = h5.readh5(filename).ss\n        # uvlm_ss_read = read_data.linear.linear_system.uvlm.ss\n        uvlm_ss_read = read_data\n        return libss.StateSpace(uvlm_ss_read.A, uvlm_ss_read.B, uvlm_ss_read.C, uvlm_ss_read.D, dt=uvlm_ss_read.dt)\n\n"
  },
  {
    "path": "sharpy/linear/assembler/linearbeam.py",
    "content": "\"\"\"\nLinear State Beam Element Class\n\n\"\"\"\nimport h5py\n\nfrom sharpy.linear.utils.ss_interface import BaseElement, linear_system, LinearVector\nimport sharpy.linear.src.lingebm as lingebm\nimport numpy as np\nimport sharpy.utils.settings as settings\nimport sharpy.utils.algebra as algebra\nimport sharpy.structure.utils.modalutils as modalutils\nfrom sharpy.linear.utils.ss_interface import VectorVariable, OutputVariable, InputVariable\nimport sharpy.linear.src.libss as libss\n\n\n@linear_system\nclass LinearBeam(BaseElement):\n    r\"\"\"\n    State space member\n\n    Define class for linear state-space realisation of GEBM flexible-body\n    equations from SHARPy ``timestep_info`` class and with the nonlinear structural information.\n\n    State-space models can be defined in continuous or discrete time (dt\n    required). Modal projection, either on the damped or undamped modal shapes,\n    is also available.\n\n    The beam state space has information on the states which will depend on whether the system is modal or expressed\n    in physical coordinates.\n\n    If ``modal`` the state variables will be ``q`` and ``q_dot`` representing the modal displacements and the\n    time derivatives.\n\n    If ``nodal`` and free-flying, the state variables will be ``eta`` for the flexible degrees of freedom (displacements\n    and CRVs for each node (dim6)), ``V`` representing the linear velocities at the A frame (dim3), ``W`` representing\n    the angular velocities at the ``A`` frame (dim3), and ``orient`` representing the orientation variable of the\n    ``A`` frame with respect to ``G``\n\n    Notes on the settings:\n\n        a. ``modal_projection={True,False}``: determines whether to project the states\n            onto modal coordinates. Projection over damped or undamped modal\n            shapes can be obtained selecting:\n\n                - ``proj_modes = {'damped','undamped'}``\n\n            while\n\n                 - ``inout_coords={'modes','nodal'}``\n\n             determines whether the modal state-space inputs/outputs are modal\n             coords or nodal degrees-of-freedom. If ``modes`` is selected, the\n             ``Kin`` and ``Kout`` gain matrices are generated to transform nodal to modal\n             dofs\n\n        b. ``dlti={True,False}``: if true, generates discrete-time system.\n            The continuous to discrete transformation method is determined by::\n\n                discr_method={ 'newmark',  # Newmark-beta\n                                    'zoh',\t\t# Zero-order hold\n                                    'bilinear'} # Bilinear (Tustin) transformation\n\n            DLTIs can be obtained directly using the Newmark-:math:`\\beta` method\n\n                ``discr_method='newmark'``\n                ``newmark_damp=xx`` with ``xx<<1.0``\n\n            for full-states descriptions (``modal_projection=False``) and modal projection\n            over the undamped structural modes (``modal_projection=True`` and ``proj_modes``).\n            The Zero-order holder and bilinear methods, instead, work in all\n            descriptions, but require the continuous state-space equations.\n\n\n    \"\"\"\n    sys_id = \"LinearBeam\"\n\n    settings_types = dict()\n    settings_default = dict()\n    settings_description = dict()\n    settings_options = dict()\n\n    settings_default['modal_projection'] = True\n    settings_types['modal_projection'] = 'bool'\n    settings_description['modal_projection'] = 'Use modal projection'\n\n    settings_default['inout_coords'] = 'nodes'\n    settings_types['inout_coords'] = 'str'\n    settings_description['inout_coords'] = 'Beam state space input/output coordinates'\n    settings_options['inout_coords'] = ['nodes', 'modes']\n\n    settings_types['num_modes'] = 'int'\n    settings_default['num_modes'] = 10\n    settings_description['num_modes'] = 'Number of modes to retain'\n\n    settings_default['discrete_time'] = True\n    settings_types['discrete_time'] = 'bool'\n    settings_description['discrete_time'] = 'Assemble beam in discrete time'\n\n    settings_default['dt'] = 0.001\n    settings_types['dt'] = 'float'\n    settings_description['dt'] = 'Discrete time system integration time step'\n\n    settings_default['proj_modes'] = 'undamped'\n    settings_types['proj_modes'] = 'str'\n    settings_description['proj_modes'] = 'Use ``undamped`` or ``damped`` modes'\n    settings_options['proj_modes'] = ['damped', 'undamped']\n\n    settings_default['discr_method'] = 'newmark'\n    settings_types['discr_method'] = 'str'\n    settings_description['discr_method'] = 'Discrete time assembly system method:'\n    settings_options['discr_method'] = ['newmark', 'zoh', 'bilinear']\n\n    settings_default['newmark_damp'] = 1e-4\n    settings_types['newmark_damp'] = 'float'\n    settings_description['newmark_damp'] = 'Newmark damping value. For systems assembled using ``newmark``'\n\n    settings_default['use_euler'] = True\n    settings_types['use_euler'] = 'bool'\n    settings_description['use_euler'] = 'Use euler angles for rigid body parametrisation'\n\n    settings_default['print_info'] = True\n    settings_types['print_info'] = 'bool'\n    settings_description['print_info'] = 'Display information on screen'\n\n    settings_default['gravity'] = False\n    settings_types['gravity'] = 'bool'\n    settings_description['gravity'] = 'Linearise gravitational forces'\n\n    settings_types['remove_dofs'] = 'list(str)'\n    settings_default['remove_dofs'] = []\n    settings_description['remove_dofs'] = 'Remove desired degrees of freedom (flexible DOFs, ' \\\n                                          'linear velocities, rotational velocities, orientation)'\n    settings_options['remove_dofs'] = ['eta', 'V', 'W', 'orient']\n\n    settings_types['remove_sym_modes'] = 'bool'\n    settings_default['remove_sym_modes'] = False\n    settings_description['remove_sym_modes'] = 'Remove symmetric modes if wing is clamped'\n\n    settings_types['remove_rigid_states'] = 'bool'\n    settings_default['remove_rigid_states'] = False\n    settings_description['remove_rigid_states'] = '(For Stability Derivatives) - Remove RIGID STATES from SS leaving' \\\n                                                  ' input/output channels unchanged'\n\n    settings_table = settings.SettingsTable()\n    __doc__ += settings_table.generate(settings_types, settings_default, settings_description, settings_options)\n\n    def __init__(self):\n        self.sys = None  # The actual object\n        self.ss = None  # The state space object\n        self.clamped = None\n        self.tsstruct0 = None\n\n        self.settings = dict()\n        self.state_variables = None\n        self.linearisation_vectors = dict()\n\n    def initialise(self, data, custom_settings=None):\n\n        if custom_settings:\n            self.settings = custom_settings\n        else:\n            try:\n                self.settings = data.settings['LinearAssembler']['linear_system_settings']\n            except KeyError:\n                pass\n        settings.to_custom_types(self.settings, self.settings_types, self.settings_default,\n                                 self.settings_options, no_ctype=True)\n\n        self.settings['rigid_modes_ppal_axes'] = data.settings['Modal']['rigid_modes_ppal_axes']  # use the same value as in Modal solver\n        beam = lingebm.FlexDynamic(data.linear.tsstruct0, data.structure, self.settings)\n        self.sys = beam\n        self.tsstruct0 = data.linear.tsstruct0\n\n        # State variables - for the purposes of dof removal PRIOR to first order system assembly\n        num_dof_flex = self.sys.structure.num_dof.value\n        num_dof_rig = self.sys.Mstr.shape[0] - num_dof_flex\n\n        # Variables described in class docstring. If modified, remember to change docstring\n        if num_dof_rig == 0:\n            state_variable_list = [\n                VectorVariable('eta', size=num_dof_flex, index=0),\n            ]\n        else:\n            state_variable_list = [\n                VectorVariable('eta', size=num_dof_flex, index=0),  # flexible dofs\n                VectorVariable('V', size=3, index=1),  # translational velocities\n                VectorVariable('W', size=3, index=2),  # angular velocities\n                VectorVariable('orient', size=num_dof_rig - 6, index=3),  # orientation\n            ]\n\n        self.state_variables = LinearVector(state_variable_list)\n\n        if num_dof_rig == 0:\n            self.clamped = True\n\n        self.linearisation_vectors['eta'] = self.tsstruct0.q\n        self.linearisation_vectors['eta_dot'] = self.tsstruct0.dqdt\n        self.linearisation_vectors['forces_struct'] = self.tsstruct0.steady_applied_forces.reshape(-1, order='C') # B frame\n\n    def assemble(self, t_ref=None):\n        \"\"\"\n        Assemble the beam state-space system.\n\n        Args:\n            t_ref (float): Scaling factor to non-dimensionalise the beam's time step.\n\n        Returns:\n\n        \"\"\"\n        if self.settings['gravity']:\n            self.sys.linearise_gravity_forces()\n\n        # follower force effect\n        self.sys.linearise_applied_forces()\n\n        if self.settings['remove_dofs']:\n            self.trim_nodes(self.settings['remove_dofs'])\n\n        if self.settings['modal_projection'] and self.settings['remove_sym_modes'] and self.clamped:\n            self.remove_symmetric_modes()\n\n        if t_ref is not None:\n            self.sys.scale_system_normalised_time(t_ref)\n\n        self.sys.assemble()\n\n        # TODO: remove integrals of the rigid body modes (and change mode shapes to account for this in the coupling matrices)\n        # Option to remove certain dofs via dict: i.e. dofs to remove\n        # Map dofs to equations\n        # Boundary conditions\n        # Same with modal, remove certain modes. Need to specify that modes to keep refer to flexible ones only\n\n        if self.sys.SSdisc:\n            self.ss = self.sys.SSdisc\n        elif self.sys.SScont:\n            self.ss = self.sys.SScont\n\n        if self.settings['remove_rigid_states']:\n            # Temporary - should be incorporated into StabilityDerivatives and the coupled system reassembled\n            self.remove_rigid_states()\n\n        return self.ss\n\n    def remove_rigid_states(self):\n        if self.sys.clamped:\n            return\n        if self.settings['use_euler']:\n            num_rig_dof = 9\n        else:\n            num_rig_dof = 10\n        if self.sys.modal:\n\n            self.ss.A = self.ss.A[num_rig_dof:, num_rig_dof:]\n            self.ss.B = self.ss.B[num_rig_dof:, :]\n            self.ss.C = self.ss.C[:, num_rig_dof:]\n            self.ss.state_variables.modify('q', size=self.ss.state_variables[0].size - num_rig_dof)\n            self.ss.state_variables.update_locations()\n\n            retain_state = np.zeros((self.ss.states - 9, self.ss.states))\n            retain_state[:self.ss.state_variables[0].size, :self.ss.state_variables[0].size] = \\\n                np.eye(self.ss.state_variables[0].size)\n            retain_state[self.ss.state_variables[0].size:, self.ss.state_variables[0].size + 9:] = \\\n                np.eye(self.ss.state_variables[0].size)\n            self.ss.A = retain_state.dot(self.ss.A.dot(retain_state.T))\n            self.ss.B = retain_state.dot(self.ss.B)\n            self.ss.C = self.ss.C.dot(retain_state.T)\n            self.ss.state_variables.modify('q_dot', size=self.ss.state_variables[1].size - 9)\n            self.ss.state_variables.update_locations()\n\n        else:\n            retain_state = np.zeros((self.ss.states - 2 * num_rig_dof, self.ss.states))\n            eta_size = self.ss.state_variables[0].size\n            retain_state[:eta_size, :eta_size] = np.eye(eta_size)\n            retain_state[eta_size: 2 * eta_size, eta_size + 9: 2 * eta_size + 9] = np.eye(eta_size)\n\n            self.ss.A = retain_state.dot(self.ss.A.dot(retain_state.T))\n            self.ss.B = retain_state.dot(self.ss.B)\n            self.ss.C = self.ss.C.dot(retain_state.T)\n            self.ss.state_variables.remove('beta_bar')\n            self.ss.state_variables.remove('beta')\n            self.ss.state_variables.update_locations()\n\n    def x0(self):\n        x = np.concatenate((self.tsstruct0.q, self.tsstruct0.dqdt))\n        return x\n\n    def trim_nodes(self, trim_list=list):\n        \"\"\"\n        Removes degrees of freedom from the second order system.\n\n        Args:\n            trim_list (list): List of degrees of freedom to remove ``eta``, ``V``, ``W`` or ``orient``\n\n        \"\"\"\n\n        num_dof_flex = self.sys.structure.num_dof.value\n\n        n_dofs = self.state_variables.size\n        self.state_variables.remove(*trim_list)\n        removed_dofs = n_dofs - self.state_variables.size\n        trim_matrix = np.zeros((n_dofs, n_dofs - removed_dofs))\n\n        for variable in self.state_variables:\n            trim_matrix[variable.rows_loc, variable.cols_loc] = 1\n\n        # Update matrices\n        self.sys.Mstr = trim_matrix.T.dot(self.sys.Mstr.dot(trim_matrix))\n        self.sys.Cstr = trim_matrix.T.dot(self.sys.Cstr.dot(trim_matrix))\n        self.sys.Kstr = trim_matrix.T.dot(self.sys.Kstr.dot(trim_matrix))\n\n    def remove_symmetric_modes(self):\n        \"\"\"\n        Removes symmetric modes when the wing is clamped at the midpoint.\n\n        It will force the wing tip displacements in ``z`` to be postive for all modes.\n\n        Updates the mode shapes matrix, the natural frequencies and the number of modes.\n        \"\"\"\n\n        # Group modes into symmetric and anti-symmetric modes\n        modes_sym = np.zeros_like(self.sys.U)  # grouped modes\n        total_modes = self.sys.num_modes\n\n        for i in range(total_modes//2):\n            je = 2*i\n            jo = 2*i + 1\n            modes_sym[:, je] = 1./np.sqrt(2)*(self.sys.U[:, je] + self.sys.U[:, jo])\n            modes_sym[:, jo] = 1./np.sqrt(2)*(self.sys.U[:, je] - self.sys.U[:, jo])\n\n        self.sys.U = modes_sym\n\n        # Remove anti-symmetric modes\n        # Wing 1 and 2 nodes\n        # z-displacement index\n        ind_w1 = [6*i + 2 for i in range(self.sys.structure.num_node // 2)]  # Wing 1 nodes are in the first half rows\n        ind_w1_x = [6*i for i in range(self.sys.structure.num_node // 2)]  # Wing 1 nodes are in the first half rows\n        ind_w1_y = [6*i + 1 for i in range(self.sys.structure.num_node // 2)]  # Wing 1 nodes are in the first half rows\n        ind_w2 = [6*i + 2 for i in range(self.sys.structure.num_node // 2, self.sys.structure.num_node - 1)]  # Wing 2 nodes are in the second half rows\n\n        sym_mode_index = []\n        for i in range(self.sys.num_modes//2):\n            found_symmetric = False\n\n            for j in range(2):\n                ind = 2*i + j\n\n                # Maximum z displacement for wings 1 and 2\n                ind_max_w1 = np.argmax(np.abs(modes_sym[ind_w1, ind]))\n                ind_max_w2 = np.argmax(np.abs(modes_sym[ind_w2, ind]))\n                z_max_w1 = modes_sym[ind_w1, ind][ind_max_w1]\n                z_max_w2 = modes_sym[ind_w2, ind][ind_max_w2]\n\n                z_max_diff = np.abs(z_max_w1 - z_max_w2)\n                if z_max_diff < np.abs(z_max_w1 + z_max_w2):\n                    sym_mode_index.append(ind)\n                    if found_symmetric:\n                        raise NameError('Symmetric Mode previously found')\n                    found_symmetric = True\n\n        self.sys.U = modes_sym[:, sym_mode_index]\n\n        # make all elastic modes have a positive z component at the wingtip\n        self.sys.U = modalutils.mode_sign_convention(self.sys.structure.boundary_conditions,\n                                                     self.sys.U,\n                                                     rigid_body_motion=not self.clamped,\n                                                     use_euler=self.settings['use_euler'])\n\n        self.sys.freq_natural = self.sys.freq_natural[sym_mode_index]\n        self.sys.num_modes = len(self.sys.freq_natural)\n\n    def unpack_ss_vector(self, x_n, u_n, struct_tstep):\n        r\"\"\"\n        Warnings:\n            Under development. Missing:\n                * Accelerations\n                * Double check the cartesian rotation vector\n                * Tangential operator for the moments\n\n        Takes the state :math:`x = [\\eta, \\dot{\\eta}]` and input vectors :math:`u = N` of a linearised beam and returns\n        a SHARPy timestep instance, including the reference values.\n\n        Args:\n            x_n (np.ndarray): Structural beam state vector in nodal space\n            y_n (np.ndarray): Beam input vector (nodal forces)\n            struct_tstep (utils.datastructures.StructTimeStepInfo): Reference timestep used for linearisation\n\n        Returns:\n            utils.datastructures.StructTimeStepInfo: new timestep with linearised values added to the reference value\n        \"\"\"\n\n        # check if clamped\n        vdof = self.sys.structure.vdof\n        num_node = struct_tstep.num_node\n        num_dof = 6*sum(vdof >= 0)\n        if self.sys.clamped:\n            clamped = True\n            rig_dof = 0\n        else:\n            clamped = False\n            if self.settings['use_euler']:\n                rig_dof = 9\n            else:\n                rig_dof = 10\n\n        q = np.zeros_like(struct_tstep.q)\n        q = np.zeros((num_dof + rig_dof))\n        dqdt = np.zeros_like(q)\n        dqddt = np.zeros_like(q)\n\n        pos = np.zeros_like(struct_tstep.pos)\n        pos_dot = np.zeros_like(struct_tstep.pos_dot)\n        psi = np.zeros_like(struct_tstep.psi)\n        psi_dot = np.zeros_like(struct_tstep.psi_dot)\n\n        for_pos = np.zeros_like(struct_tstep.for_pos)\n        for_vel = np.zeros_like(struct_tstep.for_vel)\n        for_acc = np.zeros_like(struct_tstep.for_acc)\n        quat = np.zeros_like(struct_tstep.quat)\n\n        gravity_forces = np.zeros_like(struct_tstep.gravity_forces)\n        total_gravity_forces = np.zeros_like(struct_tstep.total_gravity_forces)\n        steady_applied_forces = np.zeros_like(struct_tstep.steady_applied_forces)\n        unsteady_applied_forces = np.zeros_like(struct_tstep.unsteady_applied_forces)\n\n        q[:num_dof + rig_dof] = x_n[:num_dof + rig_dof]\n        dqdt[:num_dof + rig_dof] = x_n[num_dof + rig_dof:]\n        # Missing the forces\n        # dqddt = self.sys.Minv.dot(-self.sys.Cstr.dot(dqdt) - self.sys.Kstr.dot(q))\n\n        # for i_node in vdof[vdof >= 0]:\n        #     pos[i_node + 1, :] = q[6*i_node: 6*i_node + 3]\n        #     pos_dot[i_node + 1, :] = dqdt[6*i_node + 0: 6*i_node + 3]\n        #\n        # TODO: CRV of clamped node and double check that the CRV takes this form\n        # for i_elem in range(struct_tstep.num_elem):\n        #     for i_node in range(struct_tstep.num_node_elem):\n        #         psi[i_elem, i_node, :] = np.linalg.inv(algebra.crv2tan(struct_tstep.psi[i_elem, i_node]).T).dot(q[i_node + 3: i_node + 6])\n        #         psi_dot[i_elem, i_node, :] = dqdt[i_node + 3: i_node + 6]\n\n        pos, psi, pos_dot, psi_dot = self.unpack_flex_dof(q, dqdt)\n\n        if not clamped:\n            for_vel = dqdt[-rig_dof: -rig_dof + 6]\n            if self.settings['use_euler']:\n                euler = dqdt[-4:-1]\n                quat = algebra.euler2quat(euler)\n            else:\n                quat = dqdt[-4:]\n            for_pos = q[-rig_dof:-rig_dof + 6]\n            for_acc = dqddt[-rig_dof:-rig_dof + 6]\n\n        if u_n is not None:\n            cba_m = algebra.get_transformation_matrix('ba')\n            for i_node in vdof[vdof >= 0]:\n                i_elem = self.sys.structure.node_master_elem[i_node, 0]\n                i_local_node = self.sys.structure.node_master_elem[i_node, 1]\n                cba = cba_m(struct_tstep.psi[i_elem, i_local_node])\n                steady_applied_forces[i_node+1, :3] = cba.dot(u_n[6*i_node: 6*i_node + 3])\n                steady_applied_forces[i_node+1, 3:] = cba.dot(u_n[6*i_node + 3: 6*i_node + 6])\n            i_elem = self.sys.structure.node_master_elem[0, 0]\n            i_local_node = self.sys.structure.node_master_elem[0, 1]\n            cba = cba_m(struct_tstep.psi[i_elem, i_local_node])\n            steady_applied_forces[0, :3] = cba.dot(u_n[-10:-7]) - np.sum(steady_applied_forces[1:, :3], 0)\n            steady_applied_forces[0, 3:] = cba.dot(u_n[-7:-4]) - np.sum(steady_applied_forces[1:, 3:], 0)\n\n        # gravity forces - careful - debug\n        C_grav = np.zeros((q.shape[0], q.shape[0]))\n        K_grav = np.zeros_like(C_grav)\n        try:\n            Crr = self.sys.Crr_grav\n            Csr = self.sys.Csr_grav\n            C_grav[:-rig_dof, -rig_dof:] = Csr # TODO: sort out changing q vector with euler\n            C_grav[-rig_dof:, -rig_dof:] = Crr\n            K_grav[-rig_dof:, :-rig_dof] = self.sys.Krs_grav\n            K_grav[:-rig_dof, :-rig_dof] = self.sys.Kss_grav\n            fgrav = -C_grav.dot(dqdt) - K_grav.dot(q)\n            for i in range(gravity_forces.shape[0]-1):\n                #add bc at node - doing it manually here\n                gravity_forces[i+1, :] = fgrav[6*i:6*(i+1)]\n            gravity_forces[0, :] = fgrav[-rig_dof:-rig_dof+6] - np.sum(gravity_forces[1:], 0)\n        except AttributeError:\n            pass\n\n        current_time_step = struct_tstep.copy()\n        current_time_step.q[:len(q)] = q + struct_tstep.q[:len(q)]\n        current_time_step.dqdt[:len(q)] = dqdt + struct_tstep.dqdt[:len(q)]\n        current_time_step.dqddt[:len(q)] = dqddt + struct_tstep.dqddt[:len(q)]\n        current_time_step.pos = pos + struct_tstep.pos\n        current_time_step.pos_dot = pos + struct_tstep.pos_dot\n        current_time_step.psi = psi + struct_tstep.psi\n        current_time_step.psi_dot = psi_dot + struct_tstep.psi_dot\n        current_time_step.for_vel = for_vel + struct_tstep.for_vel\n        current_time_step.for_acc = for_acc + struct_tstep.for_acc\n        current_time_step.for_pos = for_pos + struct_tstep.for_pos\n        current_time_step.gravity_forces = gravity_forces + struct_tstep.gravity_forces\n        current_time_step.total_gravity_forces = total_gravity_forces + struct_tstep.total_gravity_forces\n        current_time_step.unsteady_applied_forces = unsteady_applied_forces + struct_tstep.unsteady_applied_forces\n        new_quat = quat + struct_tstep.quat\n        current_time_step.quat = new_quat/np.linalg.norm(new_quat)\n        current_time_step.steady_applied_forces = steady_applied_forces + struct_tstep.steady_applied_forces\n\n        return current_time_step\n\n    def unpack_flex_dof(self, eta, eta_dot=None):\n        \"\"\"\n        Unpacks a vector of structural displacements and velocities into a SHARPy familiar\n        form of pos, psi and their time derivatives\n\n        Args:\n            eta (np.array): Vector of structural displacements\n            eta_dot (np.array (Optional): Vector of structural velocities\n\n        Returns:\n            tuple: Containing ``pos``, ``psi``, ``pos_dot``, ``psi_dot`` if ``eta_dot`` is provided, else\n              only the displacements are returned\n        \"\"\"\n        vdof = self.sys.structure.vdof\n        if np.max(np.abs(eta.imag)) > 0:\n            dtype=complex\n        else:\n            dtype=float\n        pos = np.zeros_like(self.tsstruct0.pos, dtype=dtype)\n        psi = np.zeros_like(self.tsstruct0.psi, dtype=dtype)\n        pos_dot = np.zeros_like(self.tsstruct0.pos_dot, dtype=dtype)\n        psi_dot = np.zeros_like(self.tsstruct0.psi_dot, dtype=dtype)\n\n        return_vels = True\n        if eta_dot is None:\n            return_vels = False\n            eta_dot = np.zeros_like(eta)\n\n        for i_node in vdof[vdof >= 0]:\n            pos[i_node + 1, :] = eta[6*i_node: 6*i_node + 3]\n            pos_dot[i_node + 1, :] = eta_dot[6*i_node + 0: 6*i_node + 3]\n\n        # TODO: CRV of clamped node and double check that the CRV takes this form\n        for i_elem in range(self.tsstruct0.num_elem):\n            for i_node in range(self.tsstruct0.num_node_elem):\n                psi[i_elem, i_node, :] = np.linalg.inv(\n                    algebra.crv2tan(self.tsstruct0.psi[i_elem, i_node]).T).dot(eta[i_node + 3: i_node + 6])\n                psi_dot[i_elem, i_node, :] = eta_dot[i_node + 3: i_node + 6]\n\n        if return_vels:\n            return pos, psi, pos_dot, psi_dot\n        else:\n            return pos, psi\n\n    def recover_accelerations(self, full_ss):\n        \"\"\"\n        For a system with displacement and velocity outputs (``full_ss``), recover the accelerations and append them\n        as new output channels.\n\n        This function produces an output gain that should then be connected in series to the desired system\n\n        Args:\n            full_ss (libss.StateSpace): State space for which to provide output gain to recover accelerations\n\n        Returns:\n            libss.Gain: Gain adding the accelerations as new output channels\n        \"\"\"\n        n_in = full_ss.outputs\n        n_out = full_ss.outputs + self.ss.states // 2\n\n        acc_gain = np.zeros((n_out, n_in))\n\n        input_variables = LinearVector.transform(full_ss.output_variables, to_type=InputVariable)\n\n        output_variables = full_ss.output_variables.copy()\n        acceleration_variables = []\n        for var in self.ss.output_variables[self.ss.output_variables.num_variables//2:]:\n            new_var = var.copy()\n            new_var.name += '_dot'\n            output_variables.append(new_var)\n            acceleration_variables.append(new_var)\n\n        acc_gain[:n_in, :n_in] = np.eye(n_in)\n        acc_gain[-self.ss.states//2:, :self.ss.inputs] = self.ss.B[self.ss.states//2:]\n        acc_gain[-self.ss.states//2:, self.ss.inputs:] = self.ss.A[self.ss.states//2:, :]\n\n        acceleration_recovery = libss.Gain(acc_gain,\n                                           input_vars=input_variables,\n                                           output_vars=output_variables)\n\n        if self.sys.modal:\n            output_variables = []\n            for var in self.sys.Kout.output_variables[self.sys.Kout.output_variables.num_variables//2:]:\n                new_var = var.copy()\n                new_var.name += '_dot'\n                output_variables.append(new_var)\n            modal_gain = libss.Gain(self.sys.U,\n                                    input_vars=LinearVector.transform(LinearVector(acceleration_variables),\n                                                                      to_type=InputVariable),\n                                    output_vars=LinearVector(output_variables))\n            self.sys.acceleration_modal_gain = modal_gain\n\n        return acceleration_recovery\n\n    def save_reduced_order_bases(self, file_name):\n        gain = libss.Gain(self.sys.U)\n        gain.save(file_name)\n\n    def save_structural_matrices(self, file_name):\n        with h5py.File(file_name, 'w') as f:\n            f.create_dataset('m', data=self.sys.Mstr)\n            f.create_dataset('c', data=self.sys.Cstr)\n            f.create_dataset('k', data=self.sys.Kstr)\n"
  },
  {
    "path": "sharpy/linear/assembler/linearcustom.py",
    "content": "import sharpy.linear.utils.ss_interface as ssinterface\nimport sys\nimport importlib\nimport sharpy.utils.settings as settings\n\n@ssinterface.linear_system\nclass LinearCustom(ssinterface.BaseElement):\n    sys_id = 'LinearCustom'\n\n    def __init__(self):\n\n        self.settings_types = dict()\n        self.settings_default = dict()\n\n        self.settings_default['solver_path'] = ''\n        self.settings_types['solver_path'] = 'str'\n\n        self.settings_default['solver_name'] = 'generate_ss'\n        self.settings_types['solver_name'] = 'str'\n\n        self.data = None\n        self.lsys = dict()\n        self.uvlm = None\n        self.beam = None\n        self.ss = None\n\n        self.settings = dict()\n        self.state_variables = None\n        self.input_variables = None\n        self.output_variables = None\n\n    def initialise(self, data, custom_settings=None):\n\n        self.data = data\n\n        if custom_settings:\n            self.settings = custom_settings\n        else:\n            try:\n                self.settings = self.data.settings['LinearAssembler']['linear_system_settings']  # Load settings, the settings should be stored in data.linear.settings\n            except KeyError:\n                pass\n\n        settings.to_custom_types(self.settings, self.settings_types, self.settings_default)\n\n    def assemble(self):\n\n\n        if self.settings['solver_path']:\n            custom_solver_path = self.settings['solver_path'] + '/'\n        else:\n            custom_solver_path = self.data.settings['SHARPy']['route'] + '/'\n\n        solver_name = self.settings['solver_name']\n        # solver_name_and_path = custom_solver_path + '/' + solver_name\n        # solver_name_and_path = solver_name_and_path.replace('/', '.')\n        sys.path.append(custom_solver_path)\n        custom_solver = importlib.import_module(solver_name, solver_name)\n\n        custom_solver_output = custom_solver.run(self.data)\n\n        self.data = custom_solver_output['data']\n        ss = custom_solver_output['ss']\n        self.state_variables = custom_solver_output.get('state_variables', None)\n        self.input_variables = custom_solver_output.get('input_variables', None)\n        self.output_variables = custom_solver_output.get('output_variables', None)\n        self.lsys = custom_solver_output.get('lsys', dict())\n        self.uvlm = custom_solver_output.get('uvlm', None)\n        self.beam = custom_solver_output.get('beam', None)\n\n        return ss\n"
  },
  {
    "path": "sharpy/linear/assembler/lineargustassembler.py",
    "content": "import sharpy.linear.utils.ss_interface as ss_interface\nimport numpy as np\nimport sharpy.linear.src.libss as libss\nimport scipy.signal as scsig\nimport sharpy.utils.settings as settings\nimport sharpy.utils.cout_utils as cout\nfrom abc import ABCMeta, abstractmethod\nfrom scipy import signal\ndict_of_linear_gusts = {}\n\n\ndef linear_gust(arg):\n    global dict_of_linear_gusts\n    try:\n        arg.gust_id\n    except AttributeError:\n        raise AttributeError('Class defined as gust has no gust_id attribute')\n    dict_of_linear_gusts[arg.gust_id] = arg\n    return arg\n\n\ndef gust_from_string(gust_name):\n    \"\"\"\n    Returns an instance of the ``gust_name`` class\n\n    Args:\n        gust_name (str): Name of gust\n\n    Returns:\n        LinearGust: instance of linear gust\n    \"\"\"\n    return dict_of_linear_gusts[gust_name]()\n\n\nclass LinearGust(metaclass=ABCMeta):\n    # Base class from which to develop the desired gusts\n    settings_types = {}\n    settings_default = {}\n    settings_description = {}\n\n    print_info = True  # for debugging\n\n    def __init__(self):\n        self.aero = None  #: aerogrid\n        self.tsaero0 = None  # timestep info at the linearisation point\n\n        self.dt = None  # type: float\n        self.remove_predictor = None  # type: bool\n        self.Kzeta = None  # type: int  # total number of lattice vertices\n        self.KKzeta = None  # type: list  # list of number of lattice vertices in each surface\n\n        self.state_to_uext = None  #type: np.array # Gust system C matrix (for unpacking into timestep_info)\n        self.uin_to_uext = None  #type: np.array # Gust system D matrix (for unpacking into timestep_info)\n        self.gust_ss = None  #type: libss.StateSpace # containing the gust state-space system\n\n        self.settings = None\n\n        self.u_ext_direction = None  # np.ndarray Unit external velocity vector in G frame\n        self.u_inf = None  # float Free stream velocity magnitude\n\n    def initialise(self, aero, linuvlm, tsaero0, u_ext, custom_settings=None):\n        \"\"\"\n        Initialise gust class\n\n        Args:\n            aero (sharpy.aero.models.Aerogrid):\n            linuvlm (sharpy.linear.src.linuvlm.Dynamic) :\n            tsaero0 (sharpy.utils.datstructures.AeroTimestepInfo) : time step at reference state\n            u_ext (np.ndarray): free-stream velocity\n            custom_settings (dict):\n        \"\"\"\n        self.aero = aero\n        self.tsaero0 = tsaero0\n        self.dt = linuvlm.dt\n        self.remove_predictor = linuvlm.remove_predictor\n        self.KKzeta = linuvlm.MS.KKzeta\n        self.Kzeta = sum(self.KKzeta)\n\n        if custom_settings is not None:\n            self.settings = custom_settings\n            settings.to_custom_types(self.settings, self.settings_types, self.settings_default)\n\n        # find free stream velocity\n        self.u_inf = np.linalg.norm(u_ext)\n        self.u_ext_direction = u_ext / self.u_inf\n\n    def get_x_max(self):\n        \"\"\"\n        Returns the maximum and minimum and minimum coordinates of the UVLM lattice projected onto the free-stream\n        velocity vector\n\n        Returns:\n            tuple: minimum and maximum coordinates of lattice projected onto velocity vector\n        \"\"\"\n        max_chord_surf = []\n        min_chord_surf = []\n        for zeta in self.tsaero0.zeta:\n            zeta_proj = np.zeros_like(zeta)\n            _, m, n = zeta.shape\n            for i_m in range(m):\n                for i_n in range(n):\n                    zeta_proj[:, i_m, i_n] = zeta[:, i_m, i_n].dot(self.u_ext_direction) * self.u_ext_direction\n            max_chord_surf.append(np.max(zeta_proj))\n            min_chord_surf.append(np.min(zeta_proj))\n        return min(min_chord_surf), max(max_chord_surf)\n\n    @abstractmethod\n    def assemble(self):\n        \"\"\"\n        Assemble gust system according to specific gust requirements in inherited classes\n\n        Returns:\n            libss.StateSpace\n        \"\"\"\n        return libss.StateSpace(0, 0, 0, 0)  # placeholder for state space\n\n    def apply(self, ssuvlm):\n        r\"\"\"\n        Couples in series the gust system assembled by the LinearGust with the Linear UVLM.\n\n        It generates an augmented gust system which feeds through the other UVLM inputs\n        (grid displacements and velocities). The resulting augmented gust state space takes the form\n        of:\n\n        .. math::\n            \\boldsymbol{B}_{aug} = \\begin{pmatrix} \\boldsymbol{0}_{K_\\zeta} & \\boldsymbol{0}_{K_\\zeta}\n            & \\boldsymbol{B}_{gust} \\end{pmatrix}\n\n        .. math::\n            \\boldsymbol{C}_{aug} = \\begin{pmatrix} \\boldsymbol{0}_{K_\\zeta} \\\\ \\boldsymbol{0}_{K_\\zeta} \\\\\n            \\boldsymbol{C}_{gust} \\end{pmatrix}\n\n        .. math::\n            \\boldsymbol{D}_{aug} = \\begin{pmatrix} \\boldsymbol{I}_{K_\\zeta} \\\\ \\ &  \\boldsymbol{I}_{K_\\zeta} \\\\\n            \\boldsymbol{0}_{K_\\zeta} \\end{pmatrix}\n\n        where :math:`K_\\zeta` is 3 times the number of vertices in the UVLM lattice and the size of the input\n        sets displacements and velocities, as well as external velocity inputs.\n\n        Therefore, the inputs to the resulting coupled system become\n\n        .. math:: \\boldsymbol{u} = \\begin{bmatrix} \\boldsymbol{\\zeta} & \\boldsymbol{\\dot{\\zeta}} & \\boldsymbol{u}_{gust}\n\n        where the size of :math:`\\boldsymbol{u}_{gust} will depend on the chosen gust assembly scheme.\n\n        Args:\n            ssuvlm (libss.StateSpace): State space object of the linear UVLM.\n\n        Returns:\n            libss.StateSpace: Coupled gust system with Linear UVLM.\n        \"\"\"\n        ssgust = self.assemble()  # libss.StateSpace()\n        #\n        # Feed through UVLM inputs\n        b_aug = np.zeros((ssgust.states, ssuvlm.inputs - ssgust.outputs + ssgust.inputs))\n        c_aug = np.zeros((ssuvlm.inputs, ssgust.states))\n        d_aug = np.zeros((ssuvlm.inputs, b_aug.shape[1]))\n        b_aug[:, -ssgust.inputs:] = ssgust.B\n        c_aug[-ssgust.outputs:, :] = ssgust.C\n        d_aug[:-ssgust.outputs, :-ssgust.inputs] = np.eye(ssuvlm.inputs - ssgust.outputs)\n\n        self.gust_ss = libss.StateSpace(ssgust.A, b_aug, c_aug, d_aug, dt=ssgust.dt)\n        input_variables = ssuvlm.input_variables.copy()\n        input_variables.remove('u_gust')\n        self.gust_ss.input_variables = \\\n            ss_interface.LinearVector.merge(input_variables, ssgust.input_variables)\n        self.gust_ss.state_variables = ssgust.state_variables.copy()\n        self.gust_ss.output_variables = ss_interface.LinearVector.transform(ssuvlm.input_variables,\n                                                                            to_type=ss_interface.OutputVariable)\n        ss = libss.series(self.gust_ss, ssuvlm)\n\n        return ss\n\n    def assemble_gust_statespace(self, a_i, b_i, c_i, d_i):\n        \"\"\"\n        Assembles the individual gust system in discrete time and removes the predictor term if that is specified\n        in the linear UVLM settings.\n\n        Args:\n            a_i (np.array): Gust A matrix\n            b_i (np.array): Gust B matrix\n            c_i (np.array): Gust C matrix\n            d_i (np.array): Gust D matrix\n\n        Returns:\n            libss.StateSpace: StateSpace object of the individual gust system\n        \"\"\"\n        if self.remove_predictor:\n            a_mod, b_mod, c_mod, d_mod = libss.SSconv(a_i, None, b_i, c_i, d_i)\n            gustss = libss.StateSpace(a_mod, b_mod, c_mod, d_mod, dt=self.dt)\n            self.state_to_uext = c_mod\n            self.uin_to_uext = d_mod\n        else:\n            gustss = libss.StateSpace(a_i, b_i, c_i, d_i,\n                                      dt=self.dt)\n            self.state_to_uext = c_i\n            self.uin_to_uext = d_i\n        gustss.input_variables = ss_interface.LinearVector(\n            [ss_interface.InputVariable('u_gust', size=1, index=0)])\n        gustss.state_variables = ss_interface.LinearVector(\n            [ss_interface.StateVariable('gust', size=gustss.states, index=0)])\n        gustss.output_variables = ss_interface.LinearVector(\n            [ss_interface.OutputVariable('u_gust', size=gustss.outputs, index=0)])\n\n        return gustss\n\n    def discretise_domain(self):\n        r\"\"\"\n        Generates a \"gust-station\" domain, aligned with the free-stream velocity equispaced in\n        :math:`\\Delta t U_\\infty` increments.\n\n        Returns:\n            tuple: domain and number of elements in the domain\n        \"\"\"\n        x_min, x_max = self.get_x_max()  # G frame, min and max of panels x coordinates\n\n        N = int(np.ceil((x_max - x_min) / self.dt / self.u_inf))\n        x_domain = np.linspace(x_min, x_max, N)\n\n        return x_domain, N\n\n\n@linear_gust\nclass LeadingEdge(LinearGust):\n    \"\"\"\n    Reduces the gust input to a single input for the vertical component of the gust at the leading edge.\n\n    This is vertical velocity is then convected downstream with the free stream velocity. The gust is uniform in span.\n\n    \"\"\"\n    gust_id = 'LeadingEdge'\n\n    def assemble(self):\n        \"\"\"\n        Assembles the gust state space system, creating the (A, B, C and D) matrices that convect the single gust input\n        at the leading edge downstream and uniformly across the span\n        \"\"\"\n        Kzeta = self.Kzeta  # total number of lattice vertices\n\n        # Convection system: needed for as many inputs (since it carries their time histories)\n        x_domain, N = self.discretise_domain()\n\n        # State Equation\n        # for each input...\n        a_i = np.zeros((N, N))\n        a_i[1:, :-1] = np.eye(N-1)\n        b_i = np.zeros((N, 1))\n        b_i[0, 0] = 1\n\n        c_i = np.zeros((3 * Kzeta, N))\n        for i_surf in range(self.aero.n_surf):\n\n            M_surf, N_surf = self.aero.dimensions[i_surf]\n            Kzeta_start = 3 * sum(self.KKzeta[:i_surf])  # number of coordinates up to current surface\n            shape_zeta = (3, M_surf + 1, N_surf + 1)\n\n            if self.print_info:\n                cout.cout_wrap(f'Aero surface {i_surf}')\n                cout.cout_wrap(f'Gust monitoring station domain:\\n{x_domain}', 1)\n\n            for i_node_span in range(N_surf + 1):\n                for i_node_chord in range(M_surf + 1):\n                    i_vertex = [Kzeta_start + np.ravel_multi_index((i_axis, i_node_chord, i_node_span),\n                                                                   shape_zeta) for i_axis in range(3)]\n                    zeta = self.tsaero0.zeta[i_surf][:, i_node_chord, i_node_span]\n                    x_vertex = zeta.dot(self.u_ext_direction)\n                    interpolation_weights, column_indices = linear_interpolation_weights(x_vertex, x_domain)\n                    c_i[i_vertex, column_indices[0]] = np.array([0, 0, interpolation_weights[0]])\n                    c_i[i_vertex, column_indices[1]] = np.array([0, 0, interpolation_weights[1]])\n\n                    if self.print_info:\n                        cout.cout_wrap(f'Vertex info: i_n = {i_node_span}\\ti_m = {i_node_chord}')\n                        cout.cout_wrap(f'\\tCoordinate: {zeta}', 1)\n                        cout.cout_wrap(f'\\tProjected coordinate: {x_vertex}', 1)\n                        cout.cout_wrap(f'\\tInterpolation weights: {interpolation_weights}', 2)\n                        cout.cout_wrap(f'\\tC matrix column indices: {column_indices}', 2)\n                        cout.cout_wrap(f'\\ti_vertex: {i_vertex}', 2)\n\n\n\n        d_i = np.zeros((c_i.shape[0], b_i.shape[1]))\n\n        gustss = self.assemble_gust_statespace(a_i, b_i, c_i, d_i)\n\n        return gustss\n\n\n@linear_gust\nclass MultiLeadingEdge(LinearGust):\n    \"\"\"\n    Gust input channels defined at user-defined spanwise locations. Linearly interpolated in between\n    the spanwise input positions.\n\n    \"\"\"\n\n    gust_id = 'MultiLeadingEdge'\n\n    settings_types = {}\n    settings_default = {}\n    settings_description = {}\n\n    settings_types['span_location'] = 'list(float)'\n    settings_default['span_location'] = [-10., 10.]\n    settings_description['span_location'] = 'Spanwise location of the input streams of the gust'\n\n    settings_table = settings.SettingsTable()\n    __doc__ += settings_table.generate(settings_types, settings_default, settings_description)\n\n    def __init__(self):\n        super().__init__()\n\n        self.span_loc = None\n        self.n_gust = None\n\n    def initialise(self, aero, linuvlm, tsaero0, u_ext, custom_settings=None):\n        super().initialise(aero, linuvlm, tsaero0, u_ext, custom_settings)\n\n        self.span_loc = self.settings['span_location']\n        self.n_gust = len(self.span_loc)\n\n        assert self.n_gust > 1, 'Use LeadingEdge gust for single inputs'\n\n    def assemble(self):\n\n        n_gust = self.n_gust\n        Kzeta = self.Kzeta\n        span_loc = self.span_loc\n\n        # Convection system: needed for as many inputs (since it carries their time histories)\n        x_domain, N = self.discretise_domain()\n\n        # State Equation\n        # for each input...\n        gust_a = np.zeros((N * n_gust, N * n_gust))\n        gust_b = np.zeros((N * n_gust, n_gust))\n        for ith_gust in range(n_gust):\n            gust_a[ith_gust * N + 1: ith_gust * N + N, ith_gust * N: ith_gust * N + N - 1] = np.eye(N-1)\n            gust_b[ith_gust * N, ith_gust] = 1\n\n        gust_c = np.zeros((3 * Kzeta, n_gust * N))\n        gust_d = np.zeros((gust_c.shape[0], gust_b.shape[1]))\n        for i_surf in range(self.aero.n_surf):\n\n            M_surf, N_surf = self.aero.dimensions[i_surf]\n            Kzeta_start = 3 * sum(self.KKzeta[:i_surf])  # number of coordinates up to current surface\n            shape_zeta = (3, M_surf + 1, N_surf + 1)\n\n            for i_node_span in range(N_surf + 1):\n                for i_node_chord in range(M_surf + 1):\n                    i_vertex = [Kzeta_start + np.ravel_multi_index((i_axis, i_node_chord, i_node_span),\n                                                                   shape_zeta) for i_axis in range(3)]\n                    x_vertex = self.tsaero0.zeta[i_surf][0, i_node_chord, i_node_span]\n                    y_vertex = self.tsaero0.zeta[i_surf][1, i_node_chord, i_node_span]\n                    interpolation_weights, column_indices = spanwise_interpolation(y_vertex, span_loc, x_vertex, x_domain)\n                    for i in range(len(column_indices)):\n                        gust_c[i_vertex, column_indices[i]] = np.array([0, 0, interpolation_weights[i]])\n\n        gustss = self.assemble_gust_statespace(gust_a, gust_b, gust_c, gust_d)\n        return gustss\n\n\ndef get_freestream_velocity(data):\n    try:\n        u_inf = data.settings['StaticUvlm']['aero_solver_settings']['u_inf']\n        u_inf_direction = data.settings['StaticCoupled']['aero_solver_settings']['u_inf_direction']\n    except KeyError:\n        try:\n            u_inf = data.settings['StaticCoupled']['aero_solver_settings']['velocity_field_input']['u_inf']\n            u_inf_direction = data.settings['StaticCoupled']['aero_solver_settings']['velocity_field_input']['u_inf_direction']\n        except KeyError:\n            cout.cout_wrap('Unable to find free stream velocity settings in StaticUvlm or StaticCoupled,'\n                           'please ensure these settings are provided in the config .sharpy file. If'\n                           'you are running a restart simulation make sure they are included too, regardless'\n                           'of these solvers being present in the SHARPy flow', 4)\n            raise KeyError\n\n    try:\n        v0 = u_inf * u_inf_direction\n    except TypeError:\n        # For restart solutions, where the settings may have not been processed and thus may\n        # exist but in string format\n        try:\n            u_inf_direction = np.array(u_inf_direction, dtype=float)\n        except ValueError:\n            if u_inf_direction.find(',') < 0:\n                u_inf_direction = np.fromstring(u_inf_direction.strip('[]'), sep=' ', dtype=float)\n            else:\n                u_inf_direction = np.fromstring(u_inf_direction.strip('[]'), sep=',', dtype=float)\n        finally:\n            v0 = np.array(u_inf_direction, dtype=float) * float(u_inf)\n\n    return v0\n\n\ndef linear_interpolation_weights(x_vertex, x_domain):\n\n    column_ind_left = np.argwhere(x_domain >= x_vertex)[0][0] - 1\n    if column_ind_left == - 1:\n        column_ind_left = 0\n    column_indices = (column_ind_left, column_ind_left + 1)\n    interpolation_weights = np.array([x_domain[column_ind_left + 1] - x_vertex, x_vertex - x_domain[column_ind_left]])\n    interpolation_weights /= (x_domain[column_ind_left + 1] - x_domain[column_ind_left])\n    return interpolation_weights, column_indices\n\n\ndef chordwise_interpolation(x_vertex, x_domain):\n\n    column_ind_left = np.argwhere(x_domain >= x_vertex)[0][0] - 1\n    if column_ind_left == - 1:\n        column_ind_left = 0\n    column_indices = (column_ind_left, column_ind_left + 1)\n    interpolation_weights = np.array([x_domain[column_ind_left + 1] - x_vertex, x_vertex - x_domain[column_ind_left]])\n    interpolation_weights /= (x_domain[column_ind_left + 1] - x_domain[column_ind_left])\n    return interpolation_weights, column_indices\n\n\ndef spanwise_interpolation(y_vertex, span_loc, x_vertex, x_domain):\n    r\"\"\"\n    Returns the interpolation weights and indices of said weights for a span wise interpolation. The indices refer to\n    column indices of a row vector containing the gust disturbance at each chordwise control point.\n\n    This is used in non-span uniform gusts with multiple inputs, where each set of chordwise\n    control points in the state vector corresponds to one gust (i.e. its time history).\n\n    The interpolation is performed as follows.\n\n    For an arbitrary point within a grid delimited by ``(0, 0)``, ``(0, 1)``, ``(1, 0)`` and ``(1, 1)``, the velocity\n    at a given point is:\n\n    .. math::\n\n        u_z = \\alpha_1 u_1 + \\alpha_0 u_0\n\n    where :math:`\\alpha_1 = \\frac{y - y_0}{y_{1} - y_{0}}` and :math:`\\alpha_0 = \\frac{y_1-y}{y_1-y_0}`.\n\n    The velocities :math:`u_1` and :math:`u_0` are at the current chordwise point, thus translating into\n\n    .. math::\n\n        u_1 = \\beta_{11} u_{11} + \\beta_{10} u_{10} \\\\\n        u_0 = \\beta_{01} u_{01} + \\beta_{00} u_{00}\n\n    where :math:`\\beta_{11} = \\frac{x - x_0}{x_1 - x_0}` and the rest follow a similar pattern.\n\n    The resulting interpolation scheme gives\n\n    .. math::\n\n        u_z = \\begin{pmatrix}\n        \\alpha_1 \\beta_{11} u_{11} &  \\alpha_1 \\beta{10} &  \\alpha_0 \\beta_{01} & \\alpha_0 \\beta_{00}\n        \\end{pmatrix}\n        \\begin{bmatrix} u_{11} \\\\ u_{10} \\\\ u_{01} \\\\ u_{00} \\end{bmatrix}.\n\n    The indices returned as part of the output correspond to the column indices above to match with the\n    corresponding interpolation control points.\n\n    Args:\n        y_vertex (np.float): y (span) coordinate of point\n        span_loc (np.array): Domain of y-coordinates\n        x_vertex (np.float): x (chord) coordinate of point\n        x_domain (np.array): Domain of x coordinates\n\n    Returns:\n        tuple: 2-tuple containing i) the 4-array of interpolation weights and ii) the 4-array of column\n          indicies to place such weights.\n    \"\"\"\n    N = len(x_domain)\n    span_weights, span_indices = linear_interpolation_weights(y_vertex, span_loc)\n    interpolation_weights = np.zeros(4)\n    interpolation_columns = []\n\n    chord_weights, chord_ind = linear_interpolation_weights(x_vertex, x_domain)\n\n    for i_span, span_location in enumerate(span_indices):\n        interpolation_weights[2 * i_span - 1] = span_weights[i_span] * chord_weights[0]\n        interpolation_columns.append(span_location * N + chord_ind[0])\n        interpolation_weights[2 * i_span] = span_weights[i_span] * chord_weights[1]\n        interpolation_columns.append(span_location * N + chord_ind[1])\n\n    return interpolation_weights, interpolation_columns\n\n\ndef campbell(sigma_w, length_scale, velocity, dt=None):\n    \"\"\"\n    Campbell approximation to the Von Karman turbulence filter.\n\n    Args:\n        sigma_w (float): Turbulence intensity in feet/s\n        length_scale (float): Turbulence length scale in feet\n        velocity (float): Flight velocity in feet/s\n        dt (float (optional)): Discrete-time time step for discrete time systems\n\n    Returns:\n        libss.StateSpace: SHARPy State space representation of the Campbell approximation to the Von Karman\n          filter\n\n    References:\n        Palacios, R. and Cesnik, C.. Dynamics of Flexible Aircraft: Coupled flight dynamics, aeroelasticity and control.\n        pg 28.\n    \"\"\"\n    a = 1.339\n    time_scale = a * length_scale / velocity\n    num_tf = np.array([91/12, 52, 60]) * sigma_w * np.sqrt(time_scale / a / np.pi)\n    den_tf = np.array([935/216, 561/12, 102, 60])\n    if dt is not None:\n        num_tf, den_tf, dt = scsig.cont2discrete((num_tf, den_tf), dt, method='bilinear')\n        camp_tf = signal.TransferFunction(num_tf, den_tf, dt=dt)\n    else:\n        camp_tf = signal.TransferFunction(num_tf, den_tf)\n    ss_turb = libss.StateSpace.from_scipy(camp_tf.to_ss())\n\n    ss_turb.initialise_variables(({'name': 'noise_in', 'size': 1}), var_type='in')\n    ss_turb.initialise_variables(({'name': 'u_gust', 'size': 1}), var_type='out')\n    ss_turb.initialise_variables(({'name': 'campbell_state', 'size': ss_turb.states}), var_type='state')\n\n    return ss_turb\n\n\nif __name__ == '__main__':\n    pass\n    # sys = campbell(90, 1750, 30, dt=0.1)\n\n    import unittest\n\n    class TestInterpolation(unittest.TestCase):\n\n        def test_interpolation(self):\n\n            x_domain = np.linspace(0, 1, 4)\n            span_loc = np.linspace(0, 1, 2)\n\n            # mesh coordinates\n            x_grid = np.linspace(0.25, 0.75, 3)\n            y_grid = np.linspace(0, 1, 3)\n            x_mesh, y_mesh = np.meshgrid(x_grid, y_grid)\n\n            print(x_mesh)\n            print(y_mesh)\n            print(y_mesh.shape)\n            for i in range(len(x_grid)):\n                for j in range(len(y_grid)):\n                    print(i)\n                    print(j)\n                    print('Vertex x({:g}) = {:.2f}, y({:g}) = {:.2f}'.format(j, x_mesh[j, i],\n                                                                             i, y_mesh[j, i]))\n                    weights, columns = spanwise_interpolation(y_mesh[j, i], span_loc,\n                                                                              x_mesh[j, i], x_domain)\n\n                    print('Weights', weights)\n                    print('Columns', columns)\n                    print('\\n')\n\n\n    unittest.main()"
  },
  {
    "path": "sharpy/linear/assembler/linearuvlm.py",
    "content": "\"\"\"\nLinear UVLM State Space System\n\"\"\"\n\nimport sharpy.linear.utils.ss_interface as ss_interface\nimport numpy as np\nimport sharpy.linear.src.linuvlm as linuvlm\nimport sharpy.linear.src.libsparse as libsp\nimport sharpy.utils.settings as settings\nimport scipy.sparse as sp\nimport sharpy.utils.rom_interface as rom_interface\nimport sharpy.linear.src.libss as libss\nfrom sharpy.utils.constants import vortex_radius_def\nfrom sharpy.linear.utils.ss_interface import VectorVariable, LinearVector, StateVariable\n\n\n@ss_interface.linear_system\nclass LinearUVLM(ss_interface.BaseElement):\n    r\"\"\"\n    Linear UVLM System Assembler\n\n    Produces state-space model of the form\n\n        .. math::\n\n            \\mathbf{x}_{n+1} &= \\mathbf{A}\\,\\mathbf{x}_n + \\mathbf{B} \\mathbf{u}_{n+1} \\\\\n            \\mathbf{y}_n &= \\mathbf{C}\\,\\mathbf{x}_n + \\mathbf{D} \\mathbf{u}_n\n\n    where the state, inputs and outputs are:\n\n        .. math:: \\mathbf{x}_n = \\{ \\delta \\mathbf{\\Gamma}_n,\\, \\delta \\mathbf{\\Gamma_{w_n}},\\,\n            \\Delta t\\,\\delta\\mathbf{\\Gamma}'_n,\\, \\delta\\mathbf{\\Gamma}_{n-1} \\}\n\n        .. math:: \\mathbf{u}_n = \\{ \\delta\\mathbf{\\zeta}_n,\\, \\delta\\mathbf{\\zeta}'_n,\\,\n            \\delta\\mathbf{u}_{ext,n} \\}\n\n        .. math:: \\mathbf{y} = \\{\\delta\\mathbf{f}\\}\n\n    with :math:`\\mathbf{\\Gamma}\\in\\mathbb{R}^{MN}` being the vector of vortex circulations,\n    :math:`\\mathbf{\\zeta}\\in\\mathbb{R}^{3(M+1)(N+1)}` the vector of vortex lattice coordinates and\n    :math:`\\mathbf{f}\\in\\mathbb{R}^{3(M+1)(N+1)}` the vector of aerodynamic forces and moments. Note\n    that :math:`(\\bullet)'` denotes a derivative with respect to time.\n\n    Note that the input is atypically defined at time ``n+1``. If the setting\n    ``remove_predictor = True`` the predictor term ``u_{n+1}`` is eliminated through\n    the change of state[1]:\n\n        .. math::\n            \\mathbf{h}_n &= \\mathbf{x}_n - \\mathbf{B}\\,\\mathbf{u}_n \\\\\n\n    such that:\n\n        .. math::\n            \\mathbf{h}_{n+1} &= \\mathbf{A}\\,\\mathbf{h}_n + \\mathbf{A\\,B}\\,\\mathbf{u}_n \\\\\n            \\mathbf{y}_n &= \\mathbf{C\\,h}_n + (\\mathbf{C\\,B}+\\mathbf{D})\\,\\mathbf{u}_n\n\n    which only modifies the equivalent :math:`\\mathbf{B}` and :math:`\\mathbf{D}` matrices.\n\n    The ``integr_order`` setting refers to the finite differencing scheme used to calculate the bound circulation\n    derivative with respect to time :math:`\\dot{\\mathbf{\\Gamma}}`. A first order scheme is used when\n    ``integr_order == 1``\n\n    .. math:: \\dot{\\mathbf{\\Gamma}}^{n+1} = \\frac{\\mathbf{\\Gamma}^{n+1}-\\mathbf{\\Gamma}^n}{\\Delta t}\n\n    If ``integr_order == 2`` a higher order scheme is used (but it isn't exactly second order accurate [1]).\n\n    .. math:: \\dot{\\mathbf{\\Gamma}}^{n+1} = \\frac{3\\mathbf{\\Gamma}^{n+1}-4\\mathbf{\\Gamma}^n + \\mathbf{\\Gamma}^{n-1}}\n        {2\\Delta t}\n\n    Note:\n        Control surface deflections are implemented using :class:`~sharpy.linear.assembler.lincontrolsurfacedeflector.LinControlSurfaceDeflector`\n        and the sign convention differs from the nonlinear solver. In the linear solver, the control\n        surface deflects according to the local :math:`x_B` vector. See the control surface deflection class for more\n        details.\n\n    References:\n        [1] Franklin, GF and Powell, JD. Digital Control of Dynamic Systems, Addison-Wesley Publishing Company, 1980\n\n        [2] Maraniello, S., & Palacios, R.. State-Space Realizations and Internal Balancing in Potential-Flow\n        Aerodynamics with Arbitrary Kinematics. AIAA Journal, 57(6), 1–14. 2019. https://doi.org/10.2514/1.J058153\n\n    \"\"\"\n    sys_id = 'LinearUVLM'\n\n    settings_types = dict()\n    settings_default = dict()\n    settings_description = dict()\n    settings_options = dict()\n\n    settings_types['dt'] = 'float'\n    settings_default['dt'] = 0.1\n    settings_description['dt'] = 'Time step'\n\n    settings_types['integr_order'] = 'int'\n    settings_default['integr_order'] = 2\n    settings_description['integr_order'] = 'Integration order of the circulation derivative.'\n    settings_options['integr_order'] = [1, 2]\n\n    settings_types['ScalingDict'] = 'dict'\n    settings_default['ScalingDict'] = dict()\n    settings_description['ScalingDict'] = 'Dictionary of scaling factors to achieve normalised UVLM realisation.'\n\n    settings_types['remove_predictor'] = 'bool'\n    settings_default['remove_predictor'] = True\n    settings_description['remove_predictor'] = 'Remove the predictor term from the UVLM equations'\n\n    settings_types['use_sparse'] = 'bool'\n    settings_default['use_sparse'] = True\n    settings_description['use_sparse'] = 'Assemble UVLM plant matrix in sparse format'\n\n    settings_types['density'] = 'float'\n    settings_default['density'] = 1.225\n    settings_description['density'] = 'Air density'\n\n    settings_types['remove_inputs'] = 'list(str)'\n    settings_default['remove_inputs'] = []\n    settings_description['remove_inputs'] = 'List of inputs to remove. ``u_gust`` to remove external velocity input.'\n    settings_options['remove_inputs'] = ['u_gust']\n\n    settings_types['gust_assembler'] = 'str'\n    settings_default['gust_assembler'] = ''\n    settings_description['gust_assembler'] = 'Selected linear gust assembler.'\n    settings_options['gust_assembler'] = ['LeadingEdge', 'MultiLeadingEdge']\n\n    settings_types['gust_assembler_inputs'] = 'dict'\n    settings_default['gust_assembler_inputs'] = dict()\n    settings_description['gust_assembler_inputs'] = 'Selected linear gust assembler parameter inputs.'\n\n    settings_types['rom_method'] = 'list(str)'\n    settings_default['rom_method'] = []\n    settings_description['rom_method'] = 'List of model reduction methods to reduce UVLM.'\n\n    settings_types['rom_method_settings'] = 'dict'\n    settings_default['rom_method_settings'] = dict()\n    settings_description['rom_method_settings'] = 'Dictionary with settings for the desired ROM methods, ' \\\n                                                  'where the name of the ROM method is the key to the dictionary'\n\n    settings_types['vortex_radius'] = 'float'\n    settings_default['vortex_radius'] = vortex_radius_def\n    settings_description['vortex_radius'] = 'Distance below which inductions are not computed'\n\n    settings_types['cfl1'] = 'bool'\n    settings_default['cfl1'] = True\n    settings_description['cfl1'] = 'If it is ``True``, it assumes that the discretisation complies with CFL=1'\n\n    settings_types['convert_to_ct'] = 'bool'\n    settings_default['convert_to_ct'] = False\n    settings_description['convert_to_ct'] = 'Convert system to Continuous Time. Note: features above the original ' \\\n                                            'Nyquist frequency limit will not be captured.'\n\n    settings_table = settings.SettingsTable()\n    __doc__ += settings_table.generate(settings_types, settings_default, settings_description, settings_options)\n\n    scaling_settings_types = dict()\n    scaling_settings_default = dict()\n    scaling_settings_description = dict()\n\n    scaling_settings_types['length'] = 'float'\n    scaling_settings_default['length'] = 1.0\n    scaling_settings_description['length'] = 'Reference length to be used for UVLM scaling'\n\n    scaling_settings_types['speed'] = 'float'\n    scaling_settings_default['speed'] = 1.0\n    scaling_settings_description['speed'] = 'Reference speed to be used for UVLM scaling'\n\n    scaling_settings_types['density'] = 'float'\n    scaling_settings_default['density'] = 1.0\n    scaling_settings_description['density'] = 'Reference density to be used for UVLM scaling'\n\n    __doc__ += settings_table.generate(scaling_settings_types,\n                                       scaling_settings_default,\n                                       scaling_settings_description)\n\n    def __init__(self):\n\n        self.sys = None\n        self.ss = None\n        self.tsaero0 = None\n        self.rom = None  # dict: rom_name: rom_class dictionary\n\n        self.settings = dict()\n        self.state_variables = None\n        self.input_variables = None\n        self.output_variables = None\n        self.C_to_vertex_forces = None\n\n        self.control_surface = None\n        self.gust_assembler = None\n        self.gain_cs = None\n        self.scaled = None\n\n        self.linearisation_vectors = dict()  # reference conditions at the linearisation\n\n        self.input_gain = None\n\n    def initialise(self, data, custom_settings=None):\n\n        if custom_settings:\n            self.settings = custom_settings\n        else:\n            try:\n                self.settings = data.settings['LinearAssembler'][\n                    'linear_system_settings']  # Load settings, the settings should be stored in data.linear.settings\n            except KeyError:\n                pass\n\n        settings.to_custom_types(self.settings, self.settings_types, self.settings_default,\n                                 self.settings_options,\n                                 no_ctype=True)\n        settings.to_custom_types(self.settings['ScalingDict'], self.scaling_settings_types,\n                                 self.scaling_settings_default, no_ctype=True)\n\n        data.linear.tsaero0.rho = float(self.settings['density'])\n\n        self.scaled = not all(scale == 1.0 for scale in self.settings['ScalingDict'].values())\n\n        for_vel = data.linear.tsstruct0.for_vel\n        cga = data.linear.tsstruct0.cga()\n\n        # add linuvlm.Dynamic() specific settings only as unrecognised settings raise an error\n        dynamic_settings = {}\n        for k in self.settings.keys():\n            if k in linuvlm.settings_types_dynamic.keys():\n                dynamic_settings[k] = self.settings[k]\n        uvlm = linuvlm.Dynamic(data.linear.tsaero0,\n                               dt=None,\n                               dynamic_settings=dynamic_settings,\n                               for_vel=np.hstack((cga.dot(for_vel[:3]), cga.dot(for_vel[3:]))))\n\n        self.tsaero0 = data.linear.tsaero0\n        self.sys = uvlm\n\n        state_variables_list = [\n            VectorVariable('gamma', size=self.sys.K, index=0),\n            VectorVariable('gamma_w', size=self.sys.K_star, index=1),\n            VectorVariable('dtgamma_dot', size=self.sys.K, index=2),\n            VectorVariable('gamma_m1', size=self.sys.K, index=3),\n        ]\n        self.linearisation_vectors['zeta'] = np.concatenate([self.tsaero0.zeta[i_surf].reshape(-1, order='C')\n                                                             for i_surf in range(self.tsaero0.n_surf)])\n        self.linearisation_vectors['zeta_dot'] = np.concatenate([self.tsaero0.zeta_dot[i_surf].reshape(-1, order='C')\n                                                                 for i_surf in range(self.tsaero0.n_surf)])\n        self.linearisation_vectors['u_ext'] = np.concatenate([self.tsaero0.u_ext[i_surf].reshape(-1, order='C')\n                                                              for i_surf in range(self.tsaero0.n_surf)])\n        self.linearisation_vectors['forces_aero'] = np.concatenate(\n            [self.tsaero0.forces[i_surf][:3].reshape(-1, order='C')\n             for i_surf in range(self.tsaero0.n_surf)])\n\n        if data.aero.n_control_surfaces >= 1:\n            import sharpy.linear.assembler.lincontrolsurfacedeflector as lincontrolsurfacedeflector\n            self.control_surface = lincontrolsurfacedeflector.LinControlSurfaceDeflector()\n            self.control_surface.initialise(data, uvlm)\n\n        if self.settings['rom_method']:\n            # Initialise ROM\n            self.rom = dict()\n            for rom_name in self.settings['rom_method']:\n                self.rom[rom_name] = rom_interface.initialise_rom(rom_name)\n                self.rom[rom_name].initialise(self.settings['rom_method_settings'][rom_name])\n\n        if 'u_gust' not in self.settings['remove_inputs'] and self.settings['gust_assembler'] != '':\n            import sharpy.linear.assembler.lineargustassembler as lineargust\n            self.gust_assembler = lineargust.gust_from_string(self.settings['gust_assembler'])\n            self.gust_assembler.initialise(data.aero, self.sys, self.tsaero0,\n                                           u_ext=lineargust.get_freestream_velocity(data),\n                                           custom_settings=self.settings['gust_assembler_inputs'])\n\n    def assemble(self, track_body=False, wake_prop_settings=None):\n        r\"\"\"\n        Assembles the linearised UVLM system, removes the desired inputs and adds linearised control surfaces\n        (if present).\n\n        With all possible inputs present, these are ordered as\n\n        .. math:: \\mathbf{u} = [\\boldsymbol{\\zeta},\\,\\dot{\\boldsymbol{\\zeta}},\\,\\mathbf{w},\\,\\delta]\n\n        Control surface inputs are ordered last as:\n\n        .. math:: [\\delta_1, \\delta_2, \\dots, \\dot{\\delta}_1, \\dot{\\delta_2}]\n        \"\"\"\n\n        self.sys.assemble_ss(wake_prop_settings=wake_prop_settings)\n\n        if self.scaled:\n            self.sys.nondimss()\n\n        if self.settings['convert_to_ct']:\n            self.sys.SS = libss.disc2cont(self.sys.SS)\n\n        self.ss = self.sys.SS\n\n        if self.settings['remove_inputs']:\n            self.remove_inputs(self.settings['remove_inputs'])\n\n        if self.gust_assembler is not None:\n            self.ss = self.gust_assembler.apply(self.ss)\n\n        self.input_gain = libss.Gain(np.eye(self.ss.inputs),\n                                     input_vars=self.ss.input_variables.copy(),\n                                     output_vars=LinearVector.transform(self.ss.input_variables,\n                                                                        to_type=ss_interface.OutputVariable))\n\n        if self.control_surface is not None:\n            ss2 = self.control_surface.apply(self.ss)\n            self.gain_cs = self.control_surface.gain_cs\n            self.connect_input(self.gain_cs)\n            # np.testing.assert_almost_equal(ss2.B, self.ss.B)\n\n        self.D_to_vertex_forces = self.ss.D.copy()  # post-processing issue\n        self.B_to_vertex_forces = self.ss.B.copy()  # post-processing issue\n        self.C_to_vertex_forces = self.ss.C.copy()  # post-processing issue\n\n    def remove_inputs(self, remove_list=list):\n        \"\"\"\n        Remove certain inputs from the input vector\n\n        To do:\n            * Support for block UVLM\n\n        Args:\n            remove_list (list): Inputs to remove\n        \"\"\"\n        self.sys.SS.remove_inputs(*remove_list)\n\n    def unpack_ss_vector(self, data, x_n, u_aero, aero_tstep, track_body=False, state_variables=None, gust_in=False):\n        r\"\"\"\n        Transform column vectors used in the state space formulation into SHARPy format\n\n        The column vectors are transformed into lists with one entry per aerodynamic surface. Each entry contains a\n        matrix with the quantities at each grid vertex.\n\n        .. math::\n            \\mathbf{y}_n \\longrightarrow \\mathbf{f}_{aero}\n\n        .. math:: \\mathbf{x}_n \\longrightarrow \\mathbf{\\Gamma}_n,\\,\n            \\mathbf{\\Gamma_w}_n,\\,\n            \\mathbf{\\dot{\\Gamma}}_n\n\n        If the ``track_body`` option is on, the output forces are projected from\n        the linearization frame, to the G frame. Note that the linearisation\n        frame is:\n\n            a. equal to the FoR G at time 0 (linearisation point)\n\n            b. rotates as the body frame specified in the ``track_body_number``\n\n\n        Args:\n            y_n (np.ndarray): Column output vector of linear UVLM system\n            x_n (np.ndarray): Column state vector of linear UVLM system\n            u_n (np.ndarray): Column input vector of linear UVLM system\n            aero_tstep (AeroTimeStepInfo): aerodynamic timestep information class instance\n\n        Returns:\n            tuple: Tuple containing:\n\n                forces (list):\n                    Aerodynamic forces in a list with ``n_surf`` entries.\n                    Each entry is a ``(6, M+1, N+1)`` matrix, where the first 3\n                    indices correspond to the components in ``x``, ``y`` and ``z``. The latter 3 are zero.\n\n                gamma (list):\n                    Bound circulation list with ``n_surf`` entries. Circulation is stored in an ``(M+1, N+1)``\n                    matrix, corresponding to the panel vertices.\n\n                gamma_dot (list):\n                    Bound circulation derivative list with ``n_surf`` entries.\n                    Circulation derivative is stored in an ``(M+1, N+1)`` matrix, corresponding to the panel\n                    vertices.\n\n                gamma_star (list):\n                    Wake (free) circulation list with ``n_surf`` entries. Wake circulation is stored in an\n                    ``(M_star+1, N+1)`` matrix, corresponding to the panel vertices of the wake.\n\n        \"\"\"\n\n        # project forces from uvlm FoR to FoR G\n        if track_body:\n            Cga = data.structure.timestep_info[-1].cga()\n            # print(data.structure.timestep_info[-1].quat)\n            Cga0 = data.structure.timestep_info[0].cga()\n            Cg_uvlm = np.dot(Cga, Cga0.T)\n\n        else:\n            Cg_uvlm = np.eye(3)\n\n        if self.rom is not None:\n            try:\n                rom = self.rom['Krylov']\n            except KeyError:\n                pass\n                # The krylov ROM variable names are applied here\n                # the remaining are applied in the balanced rom class\n            else:\n                x_n = rom.projection_gain.dot(x_n).real\n                state_variables = LinearVector.transform(rom.projection_gain.output_variables, StateVariable)\n\n        try:\n            gust_vars_size = state_variables.get_variable_from_name('gust').size\n            gust_state = x_n[:gust_vars_size]\n        except ValueError:\n            gust_vars_size = 0\n            gust_state = []\n\n        y_n = self.C_to_vertex_forces.dot(x_n) + self.D_to_vertex_forces.dot(u_aero)\n\n        if self.sys.remove_predictor:\n            # x_n += self.B_to_vertex_forces.dot(u_aero)\n            pass\n\n        x_n = x_n[gust_vars_size:]\n        gamma_vec, gamma_star_vec, gamma_dot_vec = self.sys.unpack_state(x_n)\n\n        # Reshape output into forces[i_surface] where forces[i_surface] is a (6,M+1,N+1) matrix and circulation terms\n        # where gamma is a [i_surf](M+1, N+1) matrix\n        forces = []\n        gamma = []\n        gamma_star = []\n        gamma_dot = []\n\n        worked_points = 0\n        worked_panels = 0\n        worked_wake_panels = 0\n\n        for i_surf in range(aero_tstep.n_surf):\n            # Tuple with dimensions of the aerogrid zeta, which is the same shape for forces\n            dimensions = aero_tstep.zeta[i_surf].shape\n            dimensions_gamma = data.aero.dimensions[i_surf]\n            dimensions_wake = data.aero.dimensions_star[i_surf]\n\n            # Number of entries in zeta\n            points_in_surface = aero_tstep.zeta[i_surf].size\n            panels_in_surface = aero_tstep.gamma[i_surf].size\n            panels_in_wake = aero_tstep.gamma_star[i_surf].size\n\n            # Append reshaped forces to each entry in list (one for each surface)\n            f_aero = y_n\n            forces.append(f_aero[worked_points:worked_points + points_in_surface].reshape(dimensions, order='C'))\n\n            ### project forces.\n            # - forces are in UVLM linearisation frame. Hence, these  are projected\n            # into FoR (using rotation matrix Cag0 time 0) A and back to FoR G\n            if track_body:\n                for mm in range(dimensions[1]):\n                    for nn in range(dimensions[2]):\n                        forces[i_surf][:, mm, nn] = np.dot(Cg_uvlm, forces[i_surf][:, mm, nn])\n\n            # Add the null bottom 3 rows to to the forces entry\n            forces[i_surf] = np.concatenate((forces[i_surf], np.zeros(dimensions)))\n\n            # Reshape bound circulation terms\n            gamma.append(gamma_vec[worked_panels:worked_panels + panels_in_surface].reshape(\n                dimensions_gamma, order='C'))\n            gamma_dot.append(gamma_dot_vec[worked_panels:worked_panels + panels_in_surface].reshape(\n                dimensions_gamma, order='C'))\n\n            # Reshape wake circulation terms\n            gamma_star.append(gamma_star_vec[worked_wake_panels:worked_wake_panels + panels_in_wake].reshape(\n                dimensions_wake, order='C'))\n\n            worked_points += points_in_surface\n            worked_panels += panels_in_surface\n            worked_wake_panels += panels_in_wake\n\n        if gust_in:\n            return forces, gamma, gamma_dot, gamma_star, gust_state\n        else:\n            return forces, gamma, gamma_dot, gamma_star\n\n    def unpack_input_vector(self, u_n, u_ext_gust, input_variables):\n        \"\"\"\n        Unpacks the input vector into the corresponding grid coordinates, velocities and external velocities.\n\n        Args:\n            u_n (np.ndarray): UVLM input vector. May contain control surface deflections and external velocities.\n            u_ext_gust (np.ndarray): Inputs to the Gust system only. Optional, an empty array may be parsed.\n            input_variables (LinearVector): Vector of input variables to the aerodynamic system\n\n        Returns:\n            tuple: Tuple containing ``zeta``, ``zeta_dot`` and ``u_ext``, accounting for the effect of control surfaces.\n        \"\"\"\n\n        if self.control_surface is not None:\n            u_n = self.gain_cs.dot(u_n)\n\n        tsaero0 = self.tsaero0\n\n        input_vectors = dict()\n        for var in input_variables:\n            try:\n                if var.name == 'u_gust':\n                    # if len(u_ext_gust) != var.size:\n                    # continue # provided input for external velocities does not match size. will be zero\n                    input_vectors['u_gust'] = u_ext_gust\n                else:\n                    input_vectors[var.name] = u_n[var.cols_loc]\n            except IndexError:\n                break\n\n        zeta = []\n        zeta_dot = []\n        u_ext = []\n        worked_vertices = 0\n\n        for i_surf in range(tsaero0.n_surf):\n            vertices_in_surface = tsaero0.zeta[i_surf].size\n            dimensions_zeta = tsaero0.zeta[i_surf].shape\n            zeta.append(input_vectors['zeta'][worked_vertices:worked_vertices + vertices_in_surface].reshape(\n                dimensions_zeta, order='C'))\n            zeta_dot.append(input_vectors['zeta_dot'][worked_vertices:worked_vertices + vertices_in_surface].reshape(\n                dimensions_zeta, order='C'))\n            try:\n                u_gust = input_vectors['u_gust']\n                # TODO: fix this check because it is not correct\n                # u_gust is not 3 * vertices *n_surf because different surfaces can have different vertices\n                # take outside of loop and fix at the top!\n            except KeyError:\n                u_gust = np.zeros(3 * vertices_in_surface * tsaero0.n_surf)\n            u_ext.append(u_gust[worked_vertices:worked_vertices + vertices_in_surface].reshape(\n                dimensions_zeta, order='C'))\n\n            zeta[i_surf] += tsaero0.zeta[i_surf]\n            zeta_dot[i_surf] += tsaero0.zeta_dot[i_surf]\n            u_ext[i_surf] += tsaero0.u_ext[i_surf]\n            worked_vertices += vertices_in_surface\n\n        return zeta, zeta_dot, u_ext\n\n    def connect_input(self, element):\n        \"\"\"\n        Connect a gain or a StateSpace to the input of the UVLM\n\n        Args:\n            element (libss.StateSpace or libss.Gain): element to connect to the input of the UVLM\n\n        \"\"\"\n        if type(element) is libss.StateSpace:\n            self.ss = libss.series(element, self.ss)\n        elif type(element) is libss.Gain:\n            self.ss.addGain(element, where='in')\n            self.input_gain = self.input_gain.dot(element)\n        else:\n            TypeError('Unable to connect system that is not StateSpace or Gain')\n\n    def connect_output(self, element):\n        \"\"\"\n        Connect a gain or a StateSpace to the output of the UVLM\n\n        Args:\n            element (libss.StateSpace or libss.Gain): element to connect to the output of the UVLM\n\n        \"\"\"\n        if type(element) is libss.StateSpace:\n            self.ss = libss.series(self.ss, element)\n        elif type(element) is libss.Gain:\n            self.ss.addGain(element, where='out')\n        else:\n            TypeError('Unable to connect system that is not StateSpace or Gain')\n\n    def unpack(self, u):\n        return self.input_gain.value.dot(u)\n"
  },
  {
    "path": "sharpy/linear/dev/__init__.py",
    "content": ""
  },
  {
    "path": "sharpy/linear/dev/linfunc.py",
    "content": "'''\nauthor: S. Maraniello\ndate: 25 May 2018\n\nFunctions for symbolic manipulation\n'''\n\n\nimport sympy as sm\nimport sympy.tensor.array as smarr\nfrom IPython import embed\n\n\ndef scalar_product(Av,Bv):\n\t'''\n\tScalar product for sympy.tensor.array\n\t'''\n\n\tN=len(Av)\n\tassert N==len(Bv), 'Array dimension not matching'\n\n\tP=Av[0]*0\n\tfor ii in range(len(Av)):\n\t\tP=P+Av[ii]*Bv[ii]\n\n\treturn P\n\n\ndef matrix_product(Asm,Bsm):\n\t'''\n\tMatrix product between 2D sympy.tensor.array\n\t'''\n\n\tassert len(Asm.shape)<3 or len(Bsm.shape)<3,\\\n\t                  'Attempting matrix product between 3D (or higher) arrays!'\n\tassert Asm.shape[1]==Bsm.shape[0], 'Matrix dimensions not compatible!'\n\n\tP=smarr.tensorproduct(Asm,Bsm)\n\tCsm=smarr.tensorcontraction(P,(1,2))\n\n\treturn Csm\n\n\ndef skew(Av):\n\t'''\n\tCompute skew matrix of vector Av, such that:\n\t\tskew(Av)*Bv = Av x Bv\n\t'''\n\n\tassert len(Av)==3, 'Av must be a 3 elements array'\n\n\tax,ay,az=Av[0],Av[1],Av[2]\n\n\tAskew=smarr.MutableDenseNDimArray([ [  0,-az, ay],\n\t\t\t\t\t\t\t\t\t\t[ az,  0,-ax],\n\t\t\t\t\t\t\t\t\t\t[-ay, ax,  0] ])\n\t\n\treturn Askew\n\n\ndef cross_product(Av,Bv):\n\t'''\n\tCross-product Av x Bv\n\t'''\n\treturn matrix_product(skew(Av),Bv)\n\n\ndef norm2(Av):\n\t'''\n\tComputes Euclidean norm of a vector\n\t'''\n\treturn sm.sqrt(scalar_product(Av,Av))\n\n\ndef simplify(Av):\n\t'''\n\tSimplify each element of matrix/array\n\t'''\n\n\tAv_simple=[]\n\n\tif len(Av.shape)==1:\n\t\tfor ii in range(len(Av)):\n\t\t\tAv_simple.append(Av[ii].simplify())\n\n\telif len(Av.shape)==2:\n\t\tfor ii in range(Av.shape[0]):\n\t\t\trow=[]\n\t\t\tfor jj in range(Av.shape[1]):\n\t\t\t\trow.append(Av[ii,jj].simplify())\n\t\t\tAv_simple.append(row)\n\n\telse:\n\t\traise NameError('Method not developed for 3D arrays!')\n\n\treturn smarr.MutableDenseNDimArray(Av_simple)\n\n\ndef subs(Av,expr_old,expr_new):\n\t'''\n\tIteratively apply the subs method to each element of tensor.\n\t'''\n\n\tAv_sub=[]\n\n\tif len(Av.shape)==1:\n\t\tfor ii in range(len(Av)):\n\t\t\tAv_sub.append(Av[ii].subs(expr_old,expr_new))\n\n\telif len(Av.shape)==2:\n\t\tfor ii in range(Av.shape[0]):\n\t\t\trow=[]\n\t\t\tfor jj in range(Av.shape[1]):\n\t\t\t\trow.append(Av[ii,jj].subs(expr_old,expr_new))\n\t\t\tAv_sub.append(row)\n\n\telse:\n\t\traise NameError('Method not developed for 3D arrays!')\n\n\treturn smarr.MutableDenseNDimArray(Av_sub)\n\n\ndef scalar_deriv(a,xList):\n\t'''Compute derivatives of a scalar w.r.t. a list of valirables'''\n\n\tNx=len(xList)\n\tDer=[]\n\tfor ii in range(Nx):\n\t\tDer.append(a.diff(xList[ii]))\n\n\treturn smarr.MutableDenseNDimArray(Der)\n\n\n\nif __name__=='__main__':\n\n\timport numpy as np\n\n\n\tprint('Verification matrix product:')\n\t# numerical matrix product\n\tAlist=[[1,4],[2,5],[7,4],[1,9]]\n\tBlist=[[5,8,4],[1,9,7]]\n\tCref=np.dot(np.array(Alist),np.array(Blist))\n\tCref=smarr.MutableDenseNDimArray(list(Cref))\n\t# symbolic matrix product\n\tAsm=smarr.Array(Alist)\n\tBsm=smarr.Array(Blist)\n\tCsm=matrix_product(Asm,Bsm)\n\tCsm_simple=simplify(Csm)\n\tprint(Csm_simple-Cref)\n\n\n\tprint('Verification cross product:')\n\tfor ii in range(3):\n\t\tfor jj in range(3):\n\t\t\tAv=smarr.MutableDenseNDimArray([0,0,0])\n\t\t\tBv=smarr.MutableDenseNDimArray([0,0,0])\n\t\t\tAv[ii]=1\n\t\t\tBv[jj]=1\n\t\t\tCv=cross_product(Av,Bv)\n\t\t\tprint('%d x %d ='%(ii,jj,))\n\t\t\tprint(Cv)\n\n\n\tprint('Verify Euclidean norm of a vector')\n\tav=[3,1,-4]\n\tnorm_ref=np.linalg.norm(av)\n\tAv=smarr.MutableDenseNDimArray(av)\n\tnorm_sm=norm2(Av)\n\tprint('Error %.10f' %(norm_ref-norm_sm.evalf(n=10)) )\n\n\n\n\n\n\n\n\t"
  },
  {
    "path": "sharpy/linear/dev/linsym_biot_segment.py",
    "content": "'''\nAnalytical linearisation of biot-savart law for single semgnet.\n\nSign convention:\n\nScalar quantities are all lower case, e.g. zeta\nArrays begin with upper case, e.g. Zeta_i\n2 D Matrices are all upper case, e.g. AW, ZETA=[Zeta_i]\n3 D arrays (tensors) will be labelled with a 3 in the name, e.g. A3\n'''\n\nimport numpy as np\nimport sympy as sm\nimport sympy.tensor.array as smarr\nimport linfunc\n\n\n\n##### Define symbols\n\n### vertices vectors\n# coordinates\nzetaA_x,zetaA_y,zetaA_z=sm.symbols('zetaA_x,zetaA_y,zetaA_z', real=True)\nzetaB_x,zetaB_y,zetaB_z=sm.symbols('zetaB_x,zetaB_y,zetaB_z', real=True)\nzetaP_x,zetaP_y,zetaP_z=sm.symbols('zetaP_x,zetaP_y,zetaP_z', real=True)\n\n# vectors\nZetaA,ZetaB,ZetaP=sm.symbols('ZetaA ZetaB ZetaP', real=True)\nZetaA=smarr.MutableDenseNDimArray([zetaA_x,zetaA_y,zetaA_z])\nZetaB=smarr.MutableDenseNDimArray([zetaB_x,zetaB_y,zetaB_z])\nZetaP=smarr.MutableDenseNDimArray([zetaP_x,zetaP_y,zetaP_z])\n\n\n### Difference vectors\nRA=ZetaP-ZetaA\nRB=ZetaP-ZetaB\nRAB=ZetaB-ZetaA\ndRA=sm.derive_by_array(RA,[ZetaP,ZetaA,ZetaB])\ndRB=sm.derive_by_array(RB,[ZetaP,ZetaA,ZetaB])\ndRAB=sm.derive_by_array(RAB,[ZetaP,ZetaA,ZetaB])\n\n\n\n################################################################################\n\n\n### redefine R02,R13\nra_x,ra_y,ra_z=sm.symbols('ra_x ra_y ra_z', real=True)\nrb_x,rb_y,rb_z=sm.symbols('rb_x rb_y rb_z', real=True)\nrab_x,rab_y,rab_z=sm.symbols('rab_x rab_y rab_z', real=True)\nRA=smarr.MutableDenseNDimArray([ra_x,ra_y,ra_z])\nRB=smarr.MutableDenseNDimArray([rb_x,rb_y,rb_z])\nRAB=smarr.MutableDenseNDimArray([rab_x,rab_y,rab_z])\n\n\nVcross=linfunc.cross_product(RA,RB)\nVcross_sq=linfunc.scalar_product(Vcross,Vcross)\n#Vcross_norm=linfunc.norm2(Vcross)\n#Vcross_unit=Vcross/Vcross_norm\nRA_unit=RA/linfunc.norm2(RA)\nRB_unit=RB/linfunc.norm2(RB)\n#Q=1/4/sm.pi*Vcross_unit*linfunc.scalar_product(RAB,(RA_unit-RB_unit))\nQ=Vcross*linfunc.scalar_product(RAB,(RA_unit-RB_unit))/Vcross_sq\n\n\ndQ=sm.derive_by_array(Q,[RA,RB,RAB])\n\n\n##### shorted equation\nra_norm,rb_norm=sm.symbols('ra_norm rb_norm')\ndQshort=dQ.copy()\ndQshort=dQshort.subs(sm.sqrt(ra_x**2 + ra_y**2 + ra_z**2),ra_norm)\ndQshort=dQshort.subs(sm.sqrt(rb_x**2 + rb_y**2 + rb_z**2),rb_norm)\n\n\nvcross2,vcross4=sm.symbols('vcross2 vcross4')\ndQshort=dQshort.subs((ra_x*rb_y - ra_y*rb_x)**2 + \n\t\t\t\t\t\t\t\t\t(-ra_x*rb_z + ra_z*rb_x)**2 + \n\t\t\t\t\t\t\t\t\t\t(ra_y*rb_z - ra_z*rb_y)**2,vcross2)\ndQshort=dQshort.subs(vcross2**2,vcross4)\n\nvdot_prod=sm.symbols('vdot_prod')\ndQshort=dQshort.subs( (rab_x*(-rb_x/rb_norm + ra_x/ra_norm) + \n\t\t\t\t\t\t\trab_y*(-rb_y/rb_norm + ra_y/ra_norm) + \n\t\t\t\t\t\t\t\trab_z*(-rb_z/rb_norm + ra_z/ra_norm)),vdot_prod)\n\n\nT2,T4=sm.symbols('T2 T4')\ndQshort=dQshort.subs(vdot_prod/vcross2,T2)\ndQshort=dQshort.subs(vdot_prod/vcross4,T4)\n\n\nxdiff,ydiff,zdiff=sm.symbols('xdiff ydiff zdiff')\ndQshort=dQshort.subs(-rb_x/rb_norm + ra_x/ra_norm,xdiff)\ndQshort=dQshort.subs(-rb_y/rb_norm + ra_y/ra_norm,ydiff)\ndQshort=dQshort.subs(-rb_z/rb_norm + ra_z/ra_norm,zdiff)\n\nrcross_x,rcross_y,rcross_z=sm.symbols('rcross_x rcross_y rcross_z')\ndQshort=dQshort.subs(ra_y*rb_z - ra_z*rb_y,rcross_x)\ndQshort=dQshort.subs(-ra_x*rb_z + ra_z*rb_x,rcross_y)\ndQshort=dQshort.subs(ra_x*rb_y - ra_y*rb_x,rcross_z)\n\nra3,rb3=sm.symbols('ra3 rb3')\ndQshort=dQshort.subs(ra_norm**3,ra3)\ndQshort=dQshort.subs(rb_norm**3,rb3)\n\n\nra_rcross_x, ra_rcross_y, ra_rcross_z = sm.symbols('ra_rcross_x ra_rcross_y ra_rcross_z')\nrb_rcross_x, rb_rcross_y, rb_rcross_z = sm.symbols('rb_rcross_x rb_rcross_y rb_rcross_z')\ndQshort=dQshort.subs(2*ra_y*rcross_z - 2*ra_z*rcross_y,ra_rcross_x)\ndQshort=dQshort.subs(-2*ra_x*rcross_z + 2*ra_z*rcross_x,ra_rcross_y)\ndQshort=dQshort.subs(2*ra_x*rcross_y - 2*ra_y*rcross_x,ra_rcross_z)\ndQshort=dQshort.subs(2*rb_y*rcross_z - 2*rb_z*rcross_y,rb_rcross_x)\ndQshort=dQshort.subs(-2*rb_x*rcross_z + 2*rb_z*rcross_x,rb_rcross_y)\ndQshort=dQshort.subs(2*rb_x*rcross_y - 2*rb_y*rcross_x,rb_rcross_z)\n\n\n"
  },
  {
    "path": "sharpy/linear/dev/linsym_uc_dncdzeta.py",
    "content": "'''\nAnalytical linearisation of uc*dnc/dzeta\n\nSign convention:\n\nScalar quantities are all lower case, e.g. zeta\nArrays begin with upper case, e.g. Zeta_i\n2 D Matrices are all upper case, e.g. AW, ZETA=[Zeta_i]\n3 D arrays (tensors) will be labelled with a 3 in the name, e.g. A3\n\n'''\n\nimport numpy as np\nimport sympy as sm\nimport sympy.tensor.array as smarr\nimport linfunc\n\n\n##### Define symbols\n\n\n### vertices vectors\n# coordinates\nzeta00_x,zeta00_y,zeta00_z=sm.symbols('zeta00_x,zeta00_y,zeta00_z', real=True)\nzeta01_x,zeta01_y,zeta01_z=sm.symbols('zeta01_x,zeta01_y,zeta01_z', real=True)\nzeta02_x,zeta02_y,zeta02_z=sm.symbols('zeta02_x,zeta02_y,zeta02_z', real=True)\nzeta03_x,zeta03_y,zeta03_z=sm.symbols('zeta03_x,zeta03_y,zeta03_z', real=True)\n# vectors\nZeta00,Zeta01,Zeta02,Zeta03=sm.symbols('Zeta00 Zeta01 Zeta02 Zeta03', real=True)\nZeta00=smarr.MutableDenseNDimArray([zeta00_x,zeta00_y,zeta00_z])\nZeta01=smarr.MutableDenseNDimArray([zeta01_x,zeta01_y,zeta01_z])\nZeta02=smarr.MutableDenseNDimArray([zeta02_x,zeta02_y,zeta02_z])\nZeta03=smarr.MutableDenseNDimArray([zeta03_x,zeta03_y,zeta03_z])\n\n\n### external velocity at nodes - not required here\n# coordinates\nu00_x,u00_y,u00_z=sm.symbols('u00_x u00_y u00_z', real=True)\nu01_x,u01_y,u01_z=sm.symbols('u01_x u01_y u01_z', real=True)\nu02_x,u02_y,u02_z=sm.symbols('u02_x u02_y u02_z', real=True)\nu03_x,u03_y,u03_z=sm.symbols('u03_x u03_y u03_z', real=True)\n# vectors\nU00,U01,U02,U03=sm.symbols('U00 U01 U02 U03', real=True)\nU01=smarr.MutableDenseNDimArray([u00_x,u00_y,u00_z])\nU02=smarr.MutableDenseNDimArray([u01_x,u01_y,u01_z])\nU03=smarr.MutableDenseNDimArray([u02_x,u02_y,u02_z])\nU04=smarr.MutableDenseNDimArray([u03_x,u03_y,u03_z])\n\n\n### velocity at collocation point\nuc_x, uc_y, uc_z=sm.symbols('uc_x uc_y uc_z', real=True)\nUc=smarr.MutableDenseNDimArray([uc_x,uc_y,uc_z])\n\n\n### Compute normal to panel\n# see surface.AeroGridSurface.get_panel_normal\nR02=Zeta02-Zeta00\nR13=Zeta03-Zeta01\nNorm=linfunc.cross_product(R02,R13)\nNorm=Norm/linfunc.norm2(Norm)\n### check norm\nassert linfunc.scalar_product(Norm,R02).simplify()==0, 'Norm is wrong'\nassert linfunc.scalar_product(Norm,R13).simplify()==0, 'Norm is wrong'\nassert linfunc.scalar_product(Norm,Norm).simplify()==1, 'Normal is not unit length'\n\n\n### Compute normal velocity at panel\nUnorm=linfunc.scalar_product(Norm,Uc)\nUnorm=sm.simplify(Unorm)\n\n### Compute derivative\ndUnorm_dZeta=sm.derive_by_array(Unorm,[Zeta00,Zeta01,Zeta02,Zeta03])\n#dUnorm_dZeta=linfunc.simplify(dUnorm_dZeta)\n\n\n\n################################################################################\n### exploit combined derivatives\n################################################################################\n\n\ndR_dZeta=sm.derive_by_array([R02,R13],[Zeta00,Zeta01,Zeta02,Zeta03])\n\n### redefine R02,R13\nr02_x,r02_y,r02_z=sm.symbols('r02_x r02_y r02_z', real=True)\nr13_x,r13_y,r13_z=sm.symbols('r13_x r13_y r13_z', real=True)\nR02=smarr.MutableDenseNDimArray([r02_x,r02_y,r02_z])\nR13=smarr.MutableDenseNDimArray([r13_x,r13_y,r13_z])\n\nNorm=linfunc.cross_product(R02,R13)\nNorm=Norm/linfunc.norm2(Norm)\n### check norm\nassert linfunc.scalar_product(Norm,R02).simplify()==0, 'Norm is wrong'\nassert linfunc.scalar_product(Norm,R13).simplify()==0, 'Norm is wrong'\nassert linfunc.scalar_product(Norm,Norm).simplify()==1, 'Normal is not unit length'\n### Compute normal velocity at panel\nUnorm=linfunc.scalar_product(Norm,Uc)\nUnorm=sm.simplify(Unorm)\n# derivative\ndUnorm_dR=sm.derive_by_array(Unorm,[R02,R13])\n\n\n### shorten equations\nDer=dUnorm_dR\n\n\neq_crR13Uc=linfunc.cross_product(R13,Uc)\neq_crR02Uc=linfunc.cross_product(R02,Uc)\neq_crR02R13=linfunc.cross_product(R02,R13)\ncrR13Uc_x,crR13Uc_y,crR13Uc_z=sm.symbols('crR13Uc_x crR13Uc_y crR13Uc_z',real=True)\ncrR02Uc_x,crR02Uc_y,crR02Uc_z=sm.symbols('crR02Uc_x crR02Uc_y crR02Uc_z',real=True)\ncrR02R13_x,crR02R13_y,crR02R13_z=sm.symbols('crR02R13_x crR02R13_y crR02R13_z',real=True)\n\ncrR13Uc=smarr.MutableDenseNDimArray([crR13Uc_x,crR13Uc_y,crR13Uc_z])\ncrR02Uc=smarr.MutableDenseNDimArray([crR02Uc_x,crR02Uc_y,crR02Uc_z])\ncrR02R13=smarr.MutableDenseNDimArray([crR02R13_x,crR02R13_y,crR02R13_z])\nfor cc in range(3):\n\tDer=Der.subs(eq_crR02Uc[cc],crR02Uc[cc])\n\tDer=Der.subs(eq_crR13Uc[cc],crR13Uc[cc])\n\tDer=Der.subs(eq_crR02R13[cc],crR02R13[cc])\nnorm_crR02R13=sm.symbols('norm_crR02R13',real=True)\ncub_crR02R13=sm.symbols('cub_crR02R13',real=True)\nDer=Der.subs(sm.sqrt(crR02R13_x**2 + crR02R13_y**2 + crR02R13_z**2),norm_crR02R13)\nDer=Der.subs(norm_crR02R13**3,cub_crR02R13)\n\n# other products\neq_Acr=linfunc.cross_product(crR02R13,R13)\nAcr_x,Acr_y,Acr_z=sm.symbols('Acr_x Acr_y Acr_z',real=True)\nAcr=sm.MutableDenseNDimArray([Acr_x,Acr_y,Acr_z])\nfor cc in range(3):\n\tDer=Der.subs(eq_Acr[cc],Acr[cc])\n\neq_Bcr=linfunc.cross_product(crR02R13,R02)\nBcr_x,Bcr_y,Bcr_z=sm.symbols('Bcr_x Bcr_y Bcr_z',real=True)\nBcr=sm.MutableDenseNDimArray([Bcr_x,Bcr_y,Bcr_z])\nfor cc in range(3):\n\tDer=Der.subs(eq_Bcr[cc],Bcr[cc])\n\neq_Cdot=linfunc.scalar_product(crR02R13,Uc)\nCdot=sm.symbols('Cdot',real=True)\nDer=Der.subs(eq_Cdot,Cdot)\n\n\n\n\n\n\n\n\n\n\n\n\n\n"
  },
  {
    "path": "sharpy/linear/dev/sym_dev_dbiot.py",
    "content": "'''\nSymbolic derivation for fast derivative of biot-savart law\nS. Maraniello, 11 Jul 2018\n'''\n\n\nimport sympy as sm\nimport sympy.tensor.array as smarr\nimport linfunc\n\n\n# coordinates\n# a00,a01,a02=sm.symbols('a00 a01 a02', real=True)\n# a11,a12=sm.symbols('a11 a12', real=True)\n# a22=sm.symbols('a22', real=True)\n\n##### derivative w.r.t. Ra,Rb due to cross-product\n# show derivative is symmetric\nra_x,ra_y,ra_z=sm.symbols('ra_x ra_y ra_z', real=True)\nrb_x,rb_y,rb_z=sm.symbols('rb_x rb_y rb_z', real=True)\nRA=smarr.MutableDenseNDimArray([ra_x,ra_y,ra_z])\nRB=smarr.MutableDenseNDimArray([rb_x,rb_y,rb_z])\nVcross=linfunc.cross_product(RA,RB)\n\nV2=linfunc.scalar_product(Vcross,Vcross)\nV4=V2*V2\n\n\nDv=sm.zeros(3)\nfor ii in range(3):\n\tDv[ii,ii]+=1/V2\n\tfor jj in range(3):\n\t\tDv[ii,jj]+=-2/V4*Vcross[ii]*Vcross[jj]\nDvRAskew=linfunc.matrix_product(Dv,linfunc.skew(RA))\nDvRBskew=linfunc.matrix_product(Dv,linfunc.skew(RB))\n\n# verify symetry\nprint('Verify symmetry of Dv')\nfor ii in range(3):\n\tfor jj in range(ii+1,3):\n\t\tprint('ii,jj:%d,%d'%(ii,jj) )\n\t\th=sm.simplify(Dv[ii,jj]-Dv[jj,ii])\n\t\tprint(h)\n# verify symetry\nprint('Verify symmetry of DvR.skew')\nfor ii in range(3):\n\tfor jj in range(ii+1,3):\n\t\tprint('ii,jj:%d,%d'%(ii,jj) )\n\t\th=sm.simplify(DvRAskew[ii,jj]-DvRAskew[jj,ii])\n\t\tprint(h)\n\t\th=sm.simplify(DvRBskew[ii,jj]-DvRBskew[jj,ii])\n\t\tprint(h)\n"
  },
  {
    "path": "sharpy/linear/src/__init__.py",
    "content": "\"\"\"Linearised System Source Code\"\"\""
  },
  {
    "path": "sharpy/linear/src/assembly.py",
    "content": "\"\"\"Assembly of linearised UVLM system\n\nS. Maraniello, 25 May 2018\n\nIncludes:\n    - Boundary conditions methods:\n        - AICs: allocate aero influence coefficient matrices of multi-surfaces\n          configurations\n        - ``nc_dqcdzeta_Sin_to_Sout``: derivative matrix of ``nc*dQ/dzeta``\n          where Q is the induced velocity at the bound collocation points of one\n          surface to another.\n        - ``nc_dqcdzeta_coll``: assembles ``nc_dqcdzeta_coll_Sin_to_Sout`` matrices in\n          multi-surfaces configurations\n        - ``uc_dncdzeta``: assemble derivative matrix dnc/dzeta*Uc at bound collocation\n          points\n\"\"\"\n\nimport numpy as np\nimport scipy.sparse as sparse\nimport itertools\n\nfrom sharpy.aero.utils.uvlmlib import dvinddzeta_cpp, eval_panel_cpp\nimport sharpy.linear.src.libsparse as libsp\nimport sharpy.linear.src.lib_dbiot as dbiot\nimport sharpy.linear.src.lib_ucdncdzeta as lib_ucdncdzeta\nimport sharpy.utils.algebra as algebra\nimport sharpy.utils.cout_utils as cout\n\n# local indiced panel/vertices as per self.maps\ndmver = [0, 1, 1, 0]  # delta to go from (m,n) panel to (m,n) vertices\ndnver = [0, 0, 1, 1]\nsvec = [0, 1, 2, 3]  # seg. no.\navec = [0, 1, 2, 3]  # 1st vertex no.\nbvec = [1, 2, 3, 0]  # 2nd vertex no.\n\n\ndef AICs(Surfs, Surfs_star, target='collocation', Project=True):\n    \"\"\"\n    Given a list of bound (Surfs) and wake (Surfs_star) instances of\n    surface.AeroGridSurface, returns the list of AIC matrices in the format:\n        - AIC_list[ii][jj] contains the AIC from the bound surface Surfs[jj] to\n        Surfs[ii].\n        - AIC_star_list[ii][jj] contains the AIC from the wake surface Surfs[jj]\n        to Surfs[ii].\n    \"\"\"\n\n    AIC_list = []\n    AIC_star_list = []\n\n    n_surf = len(Surfs)\n    assert len(Surfs_star) == n_surf, \\\n        'Number of bound and wake surfaces much be equal'\n\n    for ss_out in range(n_surf):\n        AIC_list_here = []\n        AIC_star_list_here = []\n        Surf_out = Surfs[ss_out]\n\n        for ss_in in range(n_surf):\n            # Bound surface\n            Surf_in = Surfs[ss_in]\n            AIC_list_here.append(Surf_in.get_aic_over_surface(\n                Surf_out, target=target, Project=Project))\n            # Wakes\n            Surf_in = Surfs_star[ss_in]\n            AIC_star_list_here.append(Surf_in.get_aic_over_surface(\n                Surf_out, target=target, Project=Project))\n        AIC_list.append(AIC_list_here)\n        AIC_star_list.append(AIC_star_list_here)\n\n    return AIC_list, AIC_star_list\n\n\ndef nc_dqcdzeta_Sin_to_Sout(Surf_in, Surf_out, Der_coll, Der_vert, Surf_in_bound):\n    \"\"\"\n    Computes derivative matrix of\n        nc*dQ/dzeta\n    where Q is the induced velocity induced by bound surface Surf_in onto\n    bound surface Surf_out. The panel normals of Surf_out are constant.\n\n    The input/output are:\n    - Der_coll of size (Kout,3*Kzeta_out): derivative due to the movement of\n    collocation point on Surf_out.\n    - Der_vert of size:\n        - (Kout,3*Kzeta_in) if Surf_in_bound is True\n        - (Kout,3*Kzeta_bound_in) if Surf_in_bound is False; Kzeta_bound_in is\n        the number of vertices in the bound surface of whom Surf_out is the wake.\n\n    Note that:\n    - if Surf_in_bound is False, only the TE movement contributes to Der_vert.\n    - if Surf_in_bound is False, the allocation of Der_coll could be speed-up by\n    scanning only the wake segments along the chordwise direction, as on the\n    others the net circulation is null.\n    \"\"\"\n\n    # calc collocation points (and weights)\n    if not hasattr(Surf_out, 'zetac'):\n        Surf_out.generate_collocations()\n    ZetaColl = Surf_out.zetac\n    wcv_out = Surf_out.get_panel_wcv()\n\n    # extract sizes / check matrices\n    K_out = Surf_out.maps.K\n    Kzeta_out = Surf_out.maps.Kzeta\n    shape_zeta_out = Surf_out.maps.shape_vert_vect  # (3,M_out,N_out)\n    K_in = Surf_in.maps.K\n    Kzeta_in = Surf_in.maps.Kzeta\n\n    assert Der_coll.shape == (K_out, 3 * Kzeta_out), 'Unexpected Der_coll shape'\n    if Surf_in_bound:\n        assert Der_vert.shape == (K_out, 3 * Kzeta_in), 'Unexpected Der_vert shape'\n    else:\n        # determine size of bound surface of which Surf_in is the wake\n        Kzeta_bound_in = Der_vert.shape[1] // 3\n        N_in = Surf_in.maps.N\n        M_bound_in = Kzeta_bound_in // (N_in + 1) - 1\n\n    # create mapping panels to vertices to loop\n    Surf_out.maps.map_panels_to_vertices_1D_scalar()\n    # Surf_in.maps.map_panels_to_vertices_1D_scalar()\n\n    ##### loop collocation points\n    for cc_out in range(K_out):\n\n        # get (m,n) indices of collocation point\n        mm_out = Surf_out.maps.ind_2d_pan_scal[0][cc_out]\n        nn_out = Surf_out.maps.ind_2d_pan_scal[1][cc_out]\n\n        # get coords and normal\n        zetac_here = ZetaColl[:, mm_out, nn_out]  # .copy() # non-contiguous array !\n        nc_here = Surf_out.normals[:, mm_out, nn_out]\n\n        # get derivative of induced velocity w.r.t. zetac\n        if Surf_in_bound:\n            dvind_coll, dvind_vert = dvinddzeta_cpp(zetac_here, Surf_in,\n                                                    is_bound=Surf_in_bound,\n                                                    vortex_radius=Surf_in.vortex_radius)\n        else:\n            dvind_coll, dvind_vert = dvinddzeta_cpp(zetac_here, Surf_in,\n                                                    is_bound=Surf_in_bound,\n                                                    vortex_radius=Surf_in.vortex_radius,\n                                                    M_in_bound=M_bound_in)\n\n        ### Surf_in vertices contribution\n        Der_vert[cc_out, :] += np.dot(nc_here, dvind_vert)\n\n        ### Surf_out collocation point contribution\n        # project\n        dvindnorm_coll = np.dot(nc_here, dvind_coll)\n\n        # loop panel vertices\n        for vv, dm, dn in zip(range(4), dmver, dnver):\n            mm_v, nn_v = mm_out + dm, nn_out + dn\n            ii_v = [np.ravel_multi_index(\n                (cc, mm_v, nn_v), shape_zeta_out) for cc in range(3)]\n            Der_coll[cc_out, ii_v] += wcv_out[vv] * dvindnorm_coll\n\n    return Der_coll, Der_vert\n\n\ndef nc_dqcdzeta(Surfs, Surfs_star, Merge=False):\n    r\"\"\"\n    Produces a list of derivative matrix\n\n    .. math:: \\frac{\\partial(\\mathcal{A}\\boldsymbol{\\Gamma}_0)}{\\partial\\boldsymbol{\\zeta}}\n\n    where :math:`\\mathcal{A}` is the aerodynamic influence coefficient matrix at the bound\n    surfaces collocation point, assuming constant panel norm.\n\n    Each list is such that:\n\n        - the ``ii``-th element is associated to the ``ii``-th bound surface collocation\n          point, and will contain a sub-list such that:\n            - the ``j``-th element of the sub-list is the ``dAIC_dzeta`` matrices w.r.t. the\n              ``zeta`` d.o.f. of the ``j``-th bound surface.\n\n    Hence, ``DAIC*[ii][jj]`` will have size ``K_ii x Kzeta_jj``\n\n    If ``Merge`` is ``True``, the derivatives due to collocation points movement are added\n    to ``Dvert`` to minimise storage space.\n\n    To do:\n\n        - Dcoll is highly sparse, exploit?\n    \"\"\"\n\n    n_surf = len(Surfs)\n    assert len(Surfs_star) == n_surf, \\\n        'Number of bound and wake surfaces much be equal'\n\n    DAICcoll = []\n    DAICvert = []\n\n    ### loop output (bound) surfaces\n    for ss_out in range(n_surf):\n\n        # define output bound surface size\n        Surf_out = Surfs[ss_out]\n        K_out = Surf_out.maps.K\n        Kzeta_out = Surf_out.maps.Kzeta\n\n        # derivatives w.r.t collocation points: all the in surface scanned will\n        # manipulate this matrix, as the collocation points are on Surf_out\n        Dcoll = np.zeros((K_out, 3 * Kzeta_out))\n        # derivatives w.r.t. panel coordinates will affect dof on bound Surf_in\n        # (not wakes)\n        DAICvert_sub = []\n\n        # loop input surfaces:\n        for ss_in in range(n_surf):\n            ##### bound\n            Surf_in = Surfs[ss_in]\n            Kzeta_in = Surf_in.maps.Kzeta\n\n            # compute terms\n            Dvert = np.zeros((K_out, 3 * Kzeta_in))\n            Dcoll, Dvert = nc_dqcdzeta_Sin_to_Sout(\n                Surf_in, Surf_out, Dcoll, Dvert, Surf_in_bound=True)\n\n            ##### wake:\n            Surf_in = Surfs_star[ss_in]\n            Dcoll, Dvert = nc_dqcdzeta_Sin_to_Sout(\n                Surf_in, Surf_out, Dcoll, Dvert, Surf_in_bound=False)\n            DAICvert_sub.append(Dvert)\n\n        if Merge:\n            DAICvert_sub[ss_out] += Dcoll\n            DAICvert.append(DAICvert_sub)\n        else:\n            DAICcoll.append(Dcoll)\n            DAICvert.append(DAICvert_sub)\n\n    if Merge:\n        return DAICvert\n    else:\n        return DAICcoll, DAICvert\n\n\n# end\n\ndef nc_domegazetadzeta(Surfs, Surfs_star):\n    \"\"\"\n    Produces a list of derivative matrix d(omaga x zeta)/dzeta, where omega is\n    the rotation speed of the A FoR,\n    ASSUMING constant panel norm.\n\n    Each list is such that:\n    - the ii-th element is associated to the ii-th bound surface collocation\n    point, and will contain a sub-list such that:\n        - the j-th element of the sub-list is the dAIC_dzeta matrices w.r.t. the\n        zeta d.o.f. of the j-th bound surface.\n    Hence, DAIC*[ii][jj] will have size K_ii x Kzeta_jj\n\n    call: ncDOmegaZetavert = nc_domegazetadzeta(Surfs,Surfs_star)\n    \"\"\"\n    n_surf = len(Surfs)\n\n    ncDOmegaZetacoll = []\n    ncDOmegaZetavert = []\n\n    ### loop output (bound) surfaces\n    for ss in range(n_surf):\n\n        # define output bound surface size\n        Surf = Surfs[ss]\n        skew_omega = algebra.skew(Surf.omega)\n        K = Surf.maps.K  # K_out = M*N (number of panels)\n        Kzeta = Surf.maps.Kzeta  # Kzeta_out = (M+1)*(N+1) (number of vertices/edges)\n        wcv = Surf.get_panel_wcv()\n        shape_zeta = Surf.maps.shape_vert_vect  # (3,M,N)\n\n        # The derivatives only depend on the studied surface (Surf)\n        ncDvert = np.zeros((K, 3 * Kzeta))\n\n        ##### loop collocation points\n        for cc in range(K):\n\n            # get (m,n) indices of collocation point\n            mm = Surf.maps.ind_2d_pan_scal[0][cc]\n            nn = Surf.maps.ind_2d_pan_scal[1][cc]\n\n            # get normal\n            nc_here = Surf.normals[:, mm, nn]\n\n            nc_skew_omega = -1. * np.dot(nc_here, skew_omega)\n\n            # loop panel vertices\n            for vv, dm, dn in zip(range(4), dmver, dnver):\n                mm_v, nn_v = mm + dm, nn + dn\n                ii_v = [np.ravel_multi_index(\n                    (comp, mm_v, nn_v), shape_zeta) for comp in range(3)]\n\n                ncDvert[cc, ii_v] += nc_skew_omega\n\n        ncDOmegaZetavert.append(ncDvert)\n\n    return ncDOmegaZetavert\n\n\ndef uc_dncdzeta(Surf):\n    r\"\"\"\n    Build derivative of\n\n    ..  math:: \\boldsymbol{u}_c\\frac{\\partial\\boldsymbol{n}_c}{\\partial\\boldsymbol{zeta}}\n\n    where :math:`\\boldsymbol{u}_c` is the total velocity at the\n    collocation points.\n\n    Args:\n        Surf (surface.AerogridSurface): the input can also be a list of :class:`surface.AerogridSurface`\n\n    References:\n        - :module:`linear.develop_sym.linsum_Wnc`\n        - :module:`lib_ucdncdzeta`\n    \"\"\"\n\n    if type(Surf) is list:\n        n_surf = len(Surf)\n        DerList = []\n        for ss in range(n_surf):\n            DerList.append(uc_dncdzeta(Surf[ss]))\n        return DerList\n    else:\n        if (not hasattr(Surf, 'u_ind_coll')) or (Surf.u_input_coll is None):\n            raise NameError(\n                'Surf does not have the required attributes\\nu_ind_coll\\nu_input_coll')\n\n    Map = Surf.maps\n    K, Kzeta = Map.K, Map.Kzeta\n    Der = np.zeros((K, 3 * Kzeta))\n\n    # map panel to vertice\n    if not hasattr(Map.Mpv, 'Mpv1d_scalar'):\n        Map.map_panels_to_vertices_1D_scalar()\n    if not hasattr(Map.Mpv, 'Mpv'):\n        Map.map_panels_to_vertices()\n\n    # map u_normal 2d to 1d\n    # map_panels_1d_to_2d=np.unravel_index(range(K),\n    # \t\t\t\t\t\t   \t\t\t\t  dims=Map.shape_pan_scal,order='C')\n    # for ii in range(K):\n\n    for ii in Map.ind_1d_pan_scal:\n\n        # panel m,n coordinates\n        m_pan, n_pan = Map.ind_2d_pan_scal[0][ii], Map.ind_2d_pan_scal[1][ii]\n        # extract u_input_coll\n        u_tot_coll_here = \\\n            Surf.u_input_coll[:, m_pan, n_pan] + Surf.u_ind_coll[:, m_pan, n_pan]\n\n        # find vertices\n        mpv = Map.Mpv[m_pan, n_pan, :, :]\n\n        # extract m,n coordinates of vertices\n        zeta00 = Surf.zeta[:, mpv[0, 0], mpv[0, 1]]\n        zeta01 = Surf.zeta[:, mpv[1, 0], mpv[1, 1]]\n        zeta02 = Surf.zeta[:, mpv[2, 0], mpv[2, 1]]\n        zeta03 = Surf.zeta[:, mpv[3, 0], mpv[3, 1]]\n\n        # calculate derivative\n        Dlocal = lib_ucdncdzeta.eval(zeta00, zeta01, zeta02, zeta03, u_tot_coll_here)\n\n        for vv in range(4):\n            # find 1D position of vertices\n            jj = Map.Mpv1d_scalar[ii, vv]\n\n            # allocate derivatives\n            Der[ii, jj] = Dlocal[vv, 0]  # w.r.t. x\n            Der[ii, jj + Kzeta] = Dlocal[vv, 1]  # w.r.t. y\n            Der[ii, jj + 2 * Kzeta] = Dlocal[vv, 2]  # w.r.t. z\n\n    return Der\n\n\ndef dfqsdgamma_vrel0(Surfs, Surfs_star):\n    \"\"\"\n    Assemble derivative of quasi-steady force w.r.t. gamma with fixed relative\n    velocity - the changes in induced velocities due to gamma are not accounted\n    for. The routine exploits the get_joukovski_qs method insude the\n    AeroGridSurface class\n    \"\"\"\n\n    Der_list = []\n    Der_star_list = []\n\n    n_surf = len(Surfs)\n    assert len(Surfs_star) == n_surf, \\\n        'Number of bound and wake surfaces much be equal'\n\n    for ss in range(n_surf):\n\n        Surf = Surfs[ss]\n        if not hasattr(Surf, 'u_ind_seg'):\n            raise NameError('Induced velocities at segments missing')\n        if Surf.u_input_seg is None:\n            raise NameError('Input velocities at segments missing')\n        if not hasattr(Surf, 'fqs_seg'):\n            Surf.get_joukovski_qs(gammaw_TE=Surfs_star[ss].gamma[0, :])\n\n        M, N = Surf.maps.M, Surf.maps.N\n        K = Surf.maps.K\n        Kzeta = Surf.maps.Kzeta\n        shape_fqs = Surf.maps.shape_vert_vect  # (3,M+1,N+1)\n\n        ##### unit gamma contribution of BOUND panels\n        Der = np.zeros((3 * Kzeta, K))\n\n        # loop panels (input, i.e. matrix columns)\n        for pp_in in range(K):\n            # get (m,n) indices of panel\n            mm_in = Surf.maps.ind_2d_pan_scal[0][pp_in]\n            nn_in = Surf.maps.ind_2d_pan_scal[1][pp_in]\n\n            # zetav_here=Surf.get_panel_vertices_coords(mm_in,nn_in)\n            for ll, aa, bb in zip(svec, avec, bvec):\n                # import libuvlm\n                # dfhere=libuvlm.joukovski_qs_segment(\n                # \tzetaA=zetav_here[aa,:],zetaB=zetav_here[bb,:],\n                # \tv_mid=Surf.u_ind_seg[:,ll,mm_in,nn_in]+\\\n                # \t\t  Surf.u_input_seg[:,ll,mm_in,nn_in],\n                # \tgamma=1.0,fact=0.5*Surf.rho)\n                df = 0.5 * Surf.fqs_seg_unit[:, ll, mm_in, nn_in]\n                # assert np.abs(np.max(dfhere-df))<1e-13,'something is wrong'\n\n                # get vertices m,n indices\n                mm_a, nn_a = mm_in + dmver[aa], nn_in + dnver[aa]\n                mm_b, nn_b = mm_in + dmver[bb], nn_in + dnver[bb]\n\n                # get vertices 1d index\n                ii_a = [np.ravel_multi_index(\n                    (cc, mm_a, nn_a), shape_fqs) for cc in range(3)]\n                ii_b = [np.ravel_multi_index(\n                    (cc, mm_b, nn_b), shape_fqs) for cc in range(3)]\n                Der[ii_a, pp_in] += df\n                Der[ii_b, pp_in] += df\n\n        Der_list.append(Der)\n\n        ##### unit gamma contribution of WAKE TE segments\n        # Note: the force due to the wake is attached to Surf when\n        # get_joukovski_qs is acalled\n        M_star, N_star = Surfs_star[ss].maps.M, Surfs_star[ss].maps.N\n        K_star = Surfs_star[ss].maps.K\n        shape_in = Surfs_star[ss].maps.shape_pan_scal  # (M_star,N_star)\n\n        Der_star = np.zeros((3 * Kzeta, K_star))\n\n        assert N == N_star, \\\n            'trying to associate wrong wake to current bound surface!'\n\n        # loop bound panels\n        for nn_in in range(N):\n            pp_in = np.ravel_multi_index((0, nn_in), shape_in)\n\n            df = 0.5 * Surf.fqs_wTE_unit[:, nn_in]\n\n            # get TE bound vertices m,n indices\n            mm_a, nn_a = M, nn_in + dnver[aa]\n            mm_b, nn_b = M, nn_in + dnver[bb]\n\n            # get vertices 1d index\n            ii_a = [np.ravel_multi_index(\n                (cc, mm_a, nn_a), shape_fqs) for cc in range(3)]\n            ii_b = [np.ravel_multi_index(\n                (cc, mm_b, nn_b), shape_fqs) for cc in range(3)]\n            Der_star[ii_a, pp_in] += df\n            Der_star[ii_b, pp_in] += df\n\n        Der_star_list.append(Der_star)\n\n    return Der_list, Der_star_list\n\n\ndef dfqsdzeta_vrel0(Surfs, Surfs_star):\n    \"\"\"\n    Assemble derivative of quasi-steady force w.r.t. zeta with fixed relative\n    velocity - the changes in induced velocities due to zeta over the surface\n    inducing the velocity are not accounted for. The routine exploits the\n    available relative velocities at the mid-segment points\n    \"\"\"\n\n    Der_list = []\n    n_surf = len(Surfs)\n    assert len(Surfs_star) == n_surf, \\\n        'Number of bound and wake surfaces much be equal'\n\n    for ss in range(n_surf):\n\n        Surf = Surfs[ss]\n        if not hasattr(Surf, 'u_ind_seg'):\n            raise NameError('Induced velocities at segments missing')\n        if Surf.u_input_seg is None:\n            raise NameError('Input velocities at segments missing')\n\n        M, N = Surf.maps.M, Surf.maps.N\n        K = Surf.maps.K\n        Kzeta = Surf.maps.Kzeta\n        shape_fqs = Surf.maps.shape_vert_vect  # (3,M+1,N+1)\n\n        ##### unit gamma contribution of BOUND panels\n        Der = np.zeros((3 * Kzeta, 3 * Kzeta))\n\n        # loop panels (input, i.e. matrix columns)\n        for pp_in in range(K):\n            # get (m,n) indices of panel\n            mm_in = Surf.maps.ind_2d_pan_scal[0][pp_in]\n            nn_in = Surf.maps.ind_2d_pan_scal[1][pp_in]\n\n            for ll, aa, bb in zip(svec, avec, bvec):\n                vrel_seg = (Surf.u_input_seg[:, ll, mm_in, nn_in] +\n                            Surf.u_ind_seg[:, ll, mm_in, nn_in])\n                Df = algebra.skew((0.5 * Surf.rho * Surf.gamma[mm_in, nn_in]) * vrel_seg)\n\n                # get vertices m,n indices\n                mm_a, nn_a = mm_in + dmver[aa], nn_in + dnver[aa]\n                mm_b, nn_b = mm_in + dmver[bb], nn_in + dnver[bb]\n\n                # get vertices 1d index\n                ii_a = [np.ravel_multi_index(\n                    (cc, mm_a, nn_a), shape_fqs) for cc in range(3)]\n                ii_b = [np.ravel_multi_index(\n                    (cc, mm_b, nn_b), shape_fqs) for cc in range(3)]\n                Der[np.ix_(ii_a, ii_a)] += -Df\n                Der[np.ix_(ii_b, ii_a)] += -Df\n                Der[np.ix_(ii_a, ii_b)] += Df\n                Der[np.ix_(ii_b, ii_b)] += Df\n\n        ##### contribution of WAKE TE segments.\n        # This is added to Der, as only the bound vertices are included in the\n        # input\n\n        # loop TE bound segment but:\n        # - using wake gamma\n        # - using orientation of wake panel\n        for nn_in in range(N):\n            # get velocity at seg.3 of wake TE\n            vrel_seg = (Surf.u_input_seg[:, 1, M - 1, nn_in] + Surf.u_ind_seg[:, 1, M - 1, nn_in])\n            Df = Df = algebra.skew(\n                (0.5 * Surfs_star[ss].rho * Surfs_star[ss].gamma[0, nn_in]) * vrel_seg)\n\n            # get TE bound vertices m,n indices\n            nn_a = nn_in + dnver[2]\n            nn_b = nn_in + dnver[1]\n            # get vertices 1d index on bound\n            ii_a = [np.ravel_multi_index(\n                (cc, M, nn_a), shape_fqs) for cc in range(3)]\n            ii_b = [np.ravel_multi_index(\n                (cc, M, nn_b), shape_fqs) for cc in range(3)]\n\n            Der[np.ix_(ii_a, ii_a)] += -Df\n            Der[np.ix_(ii_b, ii_a)] += -Df\n            Der[np.ix_(ii_a, ii_b)] += Df\n            Der[np.ix_(ii_b, ii_b)] += Df\n        Der_list.append(Der)\n\n    return Der_list\n\n\ndef dfqsduinput(Surfs, Surfs_star):\n    \"\"\"\n    Assemble derivative of quasi-steady force w.r.t. external input velocity.\n    \"\"\"\n\n    Der_list = []\n    n_surf = len(Surfs)\n    assert len(Surfs_star) == n_surf, \\\n        'Number of bound and wake surfaces much be equal'\n\n    for ss in range(n_surf):\n\n        Surf = Surfs[ss]\n        if Surf.u_input_seg is None:\n            raise NameError('Input velocities at segments missing')\n\n        M, N = Surf.maps.M, Surf.maps.N\n        K = Surf.maps.K\n        Kzeta = Surf.maps.Kzeta\n        shape_fqs = Surf.maps.shape_vert_vect  # (3,M+1,N+1)\n\n        ##### unit gamma contribution of BOUND panels\n        Der = np.zeros((3 * Kzeta, 3 * Kzeta))\n\n        # loop panels (input, i.e. matrix columns)\n        for pp_in in range(K):\n            # get (m,n) indices of panel\n            mm_in = Surf.maps.ind_2d_pan_scal[0][pp_in]\n            nn_in = Surf.maps.ind_2d_pan_scal[1][pp_in]\n\n            # get panel vertices\n            # zetav_here=Surf.get_panel_vertices_coords(mm_in,nn_in)\n            zetav_here = Surf.zeta[:, [mm_in + 0, mm_in + 1, mm_in + 1, mm_in + 0],\n                         [nn_in + 0, nn_in + 0, nn_in + 1, nn_in + 1]].T\n\n            for ll, aa, bb in zip(svec, avec, bvec):\n                # get segment\n                lv = zetav_here[bb, :] - zetav_here[aa, :]\n                Df = algebra.skew((-0.25 * Surf.rho * Surf.gamma[mm_in, nn_in]) * lv)\n\n                # get vertices m,n indices\n                mm_a, nn_a = mm_in + dmver[aa], nn_in + dnver[aa]\n                mm_b, nn_b = mm_in + dmver[bb], nn_in + dnver[bb]\n\n                # get vertices 1d index\n                ii_a = [np.ravel_multi_index(\n                    (cc, mm_a, nn_a), shape_fqs) for cc in range(3)]\n                ii_b = [np.ravel_multi_index(\n                    (cc, mm_b, nn_b), shape_fqs) for cc in range(3)]\n                Der[np.ix_(ii_a, ii_a)] += Df\n                Der[np.ix_(ii_b, ii_a)] += Df\n                Der[np.ix_(ii_a, ii_b)] += Df\n                Der[np.ix_(ii_b, ii_b)] += Df\n\n        ##### contribution of WAKE TE segments.\n        # This is added to Der, as only velocities at the bound vertices are\n        # included in the input of the state-space model\n\n        # loop TE bound segment but:\n        # - using wake gamma\n        # - using orientation of wake panel\n        for nn_in in range(N):\n            # get TE bound vertices m,n indices\n            nn_a = nn_in + dnver[2]\n            nn_b = nn_in + dnver[1]\n\n            # get segment\n            lv = Surf.zeta[:, M, nn_b] - Surf.zeta[:, M, nn_a]\n            Df = algebra.skew((-0.25 * Surf.rho * Surf.gamma[mm_in, nn_in]) * lv)\n\n            # get vertices 1d index on bound\n            ii_a = [np.ravel_multi_index(\n                (cc, M, nn_a), shape_fqs) for cc in range(3)]\n            ii_b = [np.ravel_multi_index(\n                (cc, M, nn_b), shape_fqs) for cc in range(3)]\n\n            Der[np.ix_(ii_a, ii_a)] += Df\n            Der[np.ix_(ii_b, ii_a)] += Df\n            Der[np.ix_(ii_a, ii_b)] += Df\n            Der[np.ix_(ii_b, ii_b)] += Df\n        Der_list.append(Der)\n\n    return Der_list\n\n\ndef dfqsdzeta_omega(Surfs, Surfs_star):\n    \"\"\"\n    Assemble derivative of quasi-steady force w.r.t. to zeta\n    The contribution implemented is related with the omega x zeta term\n    call: Der_list = dfqsdzeta_omega(Surfs,Surfs_star)\n    \"\"\"\n\n    Der_list = []\n    n_surf = len(Surfs)\n\n    for ss in range(n_surf):\n\n        Surf = Surfs[ss]\n        skew_omega = algebra.skew(Surf.omega)\n        M, N = Surf.maps.M, Surf.maps.N\n        K = Surf.maps.K\n        Kzeta = Surf.maps.Kzeta\n        shape_fqs = Surf.maps.shape_vert_vect  # (3,M+1,N+1)\n\n        ##### omega x zeta contribution\n        Der = np.zeros((3 * Kzeta, 3 * Kzeta))\n\n        # loop panels (input, i.e. matrix columns)\n        for pp_in in range(K):\n            # get (m,n) indices of panel\n            mm_in = Surf.maps.ind_2d_pan_scal[0][pp_in]\n            nn_in = Surf.maps.ind_2d_pan_scal[1][pp_in]\n\n            # get panel vertices\n            zetav_here = Surf.zeta[:, [mm_in + 0, mm_in + 1, mm_in + 1, mm_in + 0],\n                         [nn_in + 0, nn_in + 0, nn_in + 1, nn_in + 1]].T\n\n            for ll, aa, bb in zip(svec, avec, bvec):\n                # get segment\n                lv = zetav_here[bb, :] - zetav_here[aa, :]\n                Df = (0.25 * Surf.rho * Surf.gamma[mm_in, nn_in]) * algebra.skew(lv).dot(skew_omega)\n\n                # get vertices m,n indices\n                mm_a, nn_a = mm_in + dmver[aa], nn_in + dnver[aa]\n                mm_b, nn_b = mm_in + dmver[bb], nn_in + dnver[bb]\n\n                # get vertices 1d index\n                ii_a = [np.ravel_multi_index(\n                    (cc, mm_a, nn_a), shape_fqs) for cc in range(3)]\n                ii_b = [np.ravel_multi_index(\n                    (cc, mm_b, nn_b), shape_fqs) for cc in range(3)]\n                Der[np.ix_(ii_a, ii_a)] += Df\n                Der[np.ix_(ii_b, ii_a)] += Df\n                Der[np.ix_(ii_a, ii_b)] += Df\n                Der[np.ix_(ii_b, ii_b)] += Df\n\n        ##### contribution of WAKE TE segments.\n        # This is added to Der, as only velocities at the bound vertices are\n        # included in the input of the state-space model\n\n        # loop TE bound segment but:\n        # - using wake gamma\n        # - using orientation of wake panel\n        for nn_in in range(N):\n            # get TE bound vertices m,n indices\n            nn_a = nn_in + dnver[2]\n            nn_b = nn_in + dnver[1]\n\n            # get segment\n            lv = Surf.zeta[:, M, nn_b] - Surf.zeta[:, M, nn_a]\n            Df = (0.25 * Surf.rho * Surf.gamma[mm_in, nn_in]) * algebra.skew(lv).dot(skew_omega)\n\n            # get vertices 1d index on bound\n            ii_a = [np.ravel_multi_index(\n                (cc, M, nn_a), shape_fqs) for cc in range(3)]\n            ii_b = [np.ravel_multi_index(\n                (cc, M, nn_b), shape_fqs) for cc in range(3)]\n\n            Der[np.ix_(ii_a, ii_a)] += Df\n            Der[np.ix_(ii_b, ii_a)] += Df\n            Der[np.ix_(ii_a, ii_b)] += Df\n            Der[np.ix_(ii_b, ii_b)] += Df\n\n        Der_list.append(Der)\n\n    return Der_list\n\n\ndef dfqsdvind_gamma(Surfs, Surfs_star):\n    \"\"\"\n    Assemble derivative of quasi-steady force w.r.t. induced velocities changes\n    due to gamma.\n    Note: the routine is memory consuming but avoids unnecessary computations.\n    \"\"\"\n\n    n_surf = len(Surfs)\n    assert len(Surfs_star) == n_surf, \\\n        'Number of bound and wake surfaces much be equal'\n\n    ### compute all influence coeff matrices (high RAM, low CPU)\n    # AIC_list,AIC_star_list=AICs(Surfs,Surfs_star,target='segments',Project=False)\n\n    Der_list = []\n    Der_star_list = []\n    for ss_out in range(n_surf):\n\n        Surf_out = Surfs[ss_out]\n        M_out, N_out = Surf_out.maps.M, Surf_out.maps.N\n        K_out = Surf_out.maps.K\n        Kzeta_out = Surf_out.maps.Kzeta\n        shape_fqs = Surf_out.maps.shape_vert_vect  # (3,M+1,N+1)\n\n        # get AICs over Surf_out\n        AICs = []\n        AICs_star = []\n        for ss_in in range(n_surf):\n            AICs.append(Surfs[ss_in].get_aic_over_surface(\n                Surf_out, target='segments', Project=False))\n            AICs_star.append(Surfs_star[ss_in].get_aic_over_surface(\n                Surf_out, target='segments', Project=False))\n\n        # allocate all derivative matrices\n        Der_list_sub = []\n        Der_star_list_sub = []\n        for ss_in in range(n_surf):\n            # bound\n            K_in = Surfs[ss_in].maps.K\n            Der_list_sub.append(np.zeros((3 * Kzeta_out, K_in)))\n            # wake\n            K_in = Surfs_star[ss_in].maps.K\n            Der_star_list_sub.append(np.zeros((3 * Kzeta_out, K_in)))\n\n        ### loop bound panels\n        for pp_out in range(K_out):\n            # get (m,n) indices of panel\n            mm_out = Surf_out.maps.ind_2d_pan_scal[0][pp_out]\n            nn_out = Surf_out.maps.ind_2d_pan_scal[1][pp_out]\n            # get panel vertices\n            # zetav_here=Surf_out.get_panel_vertices_coords(mm_out,nn_out)\n            zetav_here = Surf_out.zeta[:, [mm_out + 0, mm_out + 1, mm_out + 1, mm_out + 0],\n                         [nn_out + 0, nn_out + 0, nn_out + 1, nn_out + 1]].T\n\n            for ll, aa, bb in zip(svec, avec, bvec):\n\n                # get segment\n                lv = zetav_here[bb, :] - zetav_here[aa, :]\n                Lskew = algebra.skew((-0.5 * Surf_out.rho * Surf_out.gamma[mm_out, nn_out]) * lv)\n\n                # get vertices m,n indices\n                mm_a, nn_a = mm_out + dmver[aa], nn_out + dnver[aa]\n                mm_b, nn_b = mm_out + dmver[bb], nn_out + dnver[bb]\n\n                # get vertices 1d index\n                ii_a = [np.ravel_multi_index(\n                    (cc, mm_a, nn_a), shape_fqs) for cc in range(3)]\n                ii_b = [np.ravel_multi_index(\n                    (cc, mm_b, nn_b), shape_fqs) for cc in range(3)]\n\n                # update all derivatives\n                for ss_in in range(n_surf):\n                    # derivatives: size (3,K_in)\n                    Dfs = np.dot(Lskew, AICs[ss_in][:, :, ll, mm_out, nn_out])\n                    Dfs_star = np.dot(Lskew, AICs_star[ss_in][:, :, ll, mm_out, nn_out])\n                    # allocate\n                    Der_list_sub[ss_in][ii_a, :] += Dfs\n                    Der_list_sub[ss_in][ii_b, :] += Dfs\n                    Der_star_list_sub[ss_in][ii_a, :] += Dfs_star\n                    Der_star_list_sub[ss_in][ii_b, :] += Dfs_star\n\n        ### loop again trailing edge\n        # here we add the Gammaw_0*rho*skew(lv)*dvind/dgamma contribution hence:\n        # - we use Gammaw_0 over the TE\n        # - we run along the positive direction as defined in the first row of\n        # wake panels\n        for nn_out in range(N_out):\n\n            # get TE bound vertices m,n indices\n            nn_a = nn_out + dnver[2]\n            nn_b = nn_out + dnver[1]\n\n            # get segment\n            lv = Surf_out.zeta[:, M_out, nn_b] - Surf_out.zeta[:, M_out, nn_a]\n            Lskew = algebra.skew((-0.5 * Surf_out.rho * Surfs_star[ss_out].gamma[0, nn_out]) * lv)\n\n            # get vertices 1d index on bound\n            ii_a = [np.ravel_multi_index(\n                (cc, M_out, nn_a), shape_fqs) for cc in range(3)]\n            ii_b = [np.ravel_multi_index(\n                (cc, M_out, nn_b), shape_fqs) for cc in range(3)]\n\n            # update all derivatives\n            for ss_in in range(n_surf):\n                # derivatives: size (3,K_in)\n                Dfs = np.dot(Lskew, AICs[ss_in][:, :, 1, M_out - 1, nn_out])\n                Dfs_star = np.dot(Lskew, AICs_star[ss_in][:, :, 1, M_out - 1, nn_out])\n                # allocate\n                Der_list_sub[ss_in][ii_a, :] += Dfs\n                Der_list_sub[ss_in][ii_b, :] += Dfs\n                Der_star_list_sub[ss_in][ii_a, :] += Dfs_star\n                Der_star_list_sub[ss_in][ii_b, :] += Dfs_star\n\n        Der_list.append(Der_list_sub)\n        Der_star_list.append(Der_star_list_sub)\n\n    return Der_list, Der_star_list\n\n\ndef dvinddzeta(zetac, Surf_in, IsBound, M_in_bound=None):\n    \"\"\"\n    Produces derivatives of induced velocity by Surf_in w.r.t. the zetac point.\n    Derivatives are divided into those associated to the movement of zetac, and\n    to the movement of the Surf_in vertices (DerVert).\n\n    If Surf_in is bound (IsBound==True), the circulation over the TE due to the\n    wake is not included in the input.\n\n    If Surf_in is a wake (IsBound==False), derivatives w.r.t. collocation\n    points are computed ad the TE contribution on DerVert. In this case, the\n    chordwise paneling Min_bound of the associated input is required so as to\n    calculate Kzeta and correctly allocate the derivative matrix.\n\n    The output derivatives are:\n    - Dercoll: 3 x 3 matrix\n    - Dervert: 3 x 3*Kzeta (if Surf_in is a wake, Kzeta is that of the bound)\n\n    Warning:\n    zetac must be contiguously stored!\n    \"\"\"\n\n    M_in, N_in = Surf_in.maps.M, Surf_in.maps.N\n    Kzeta_in = Surf_in.maps.Kzeta\n    shape_zeta_in = (3, M_in + 1, N_in + 1)\n\n    # allocate matrices\n    Dercoll = np.zeros((3, 3))\n\n    if IsBound:\n        \"\"\" Bound: scan everthing, and include every derivative. The TE is not\n        scanned twice\"\"\"\n\n        Dervert = np.zeros((3, 3 * Kzeta_in))\n\n        for pp_in in itertools.product(range(0, M_in), range(0, N_in)):\n            mm_in, nn_in = pp_in\n            # zeta_panel_in=Surf_in.get_panel_vertices_coords(mm_in,nn_in)\n            zeta_panel_in = Surf_in.zeta[:, [mm_in + 0, mm_in + 1, mm_in + 1, mm_in + 0],\n                            [nn_in + 0, nn_in + 0, nn_in + 1, nn_in + 1]].T\n            # get local derivatives\n            der_zetac, der_zeta_panel = eval_panel_cpp(\n                zetac, zeta_panel_in, Surf_in.vortex_radius, gamma_pan=Surf_in.gamma[mm_in, nn_in])\n            ### Mid-segment point contribution\n            Dercoll += der_zetac\n            ### Panel vertices contribution\n            for vv_in in range(4):\n                # get vertices m,n indices\n                mm_v, nn_v = mm_in + dmver[vv_in], nn_in + dnver[vv_in]\n                # get vertices 1d index\n                jj_v = [np.ravel_multi_index(\n                    (cc, mm_v, nn_v), shape_zeta_in) for cc in range(3)]\n                Dervert[:, jj_v] += der_zeta_panel[vv_in, :, :]\n\n    else:\n        \"\"\"\n        All segments are scanned when computing the contrib. Dercoll. The\n        TE is scanned a second time to include the contrib. due to the TE\n        elements moviment. The Dervert shape is computed using the chordwse\n        paneling of the associated bound surface (M_in_bound).\n        \"\"\"\n\n        Kzeta_in_bound = (M_in_bound + 1) * (N_in + 1)\n        Dervert = np.zeros((3, 3 * Kzeta_in_bound))\n\n        ### loop all panels (coll. contrib)\n        for pp_in in itertools.product(range(0, M_in), range(0, N_in)):\n            mm_in, nn_in = pp_in\n            # zeta_panel_in=Surf_in.get_panel_vertices_coords(mm_in,nn_in)\n            zeta_panel_in = Surf_in.zeta[:, [mm_in + 0, mm_in + 1, mm_in + 1, mm_in + 0],\n                            [nn_in + 0, nn_in + 0, nn_in + 1, nn_in + 1]].T\n            # get local derivatives\n            der_zetac = dbiot.eval_panel_cpp_coll(\n                zetac, zeta_panel_in, Surf_in.vortex_radius, gamma_pan=Surf_in.gamma[mm_in, nn_in])\n            # der_zetac_fast=dbiot.eval_panel_fast_coll(\n            # \t\tzetac,zeta_panel_in,gamma_pan=Surf_in.gamma[mm_in,nn_in])\n            # if np.max(np.abs(der_zetac-der_zetac_fast))>1e-10:\n            # \tembed()\n\n            ### Mid-segment point contribution\n            Dercoll += der_zetac\n\n        ### Re-scan the TE to include vertex contrib.\n        # vertex 0 of wake is vertex 1 of bound (local no.)\n        # vertex 3 of wake is vertex 2 of bound (local no.)\n        vvec = [0, 3]  # vertices to include\n        dn = [0, 1]  # delta to go from (m,n) panel to (m,n) vertices (on bound)\n\n        shape_zeta_in_bound = (3, M_in_bound + 1, N_in + 1)\n        for nn_in in range(N_in):\n            # zeta_panel_in=Surf_in.get_panel_vertices_coords(0,nn_in)\n            zeta_panel_in = Surf_in.zeta[:, [0, 1, 1, 0],\n                            [nn_in + 0, nn_in + 0, nn_in + 1, nn_in + 1]].T\n            # get local derivatives\n            _, der_zeta_panel = eval_panel_cpp(\n                zetac, zeta_panel_in, Surf_in.vortex_radius, gamma_pan=Surf_in.gamma[0, nn_in])\n\n            for vv in range(2):\n                nn_v = nn_in + dn[vv]\n                jj_v = []\n                for cc in range(3):\n                    jj_v.append(np.ravel_multi_index(\n                        (cc, M_in_bound, nn_v), shape_zeta_in_bound))\n                Dervert[:, jj_v] += der_zeta_panel[vvec[vv], :, :]\n\n    return Dercoll, Dervert\n\n\ndef dfqsdvind_zeta(Surfs, Surfs_star):\n    \"\"\"\n    Assemble derivative of quasi-steady force w.r.t. induced velocities changes\n    due to zeta.\n    \"\"\"\n\n    n_surf = len(Surfs)\n    assert len(Surfs_star) == n_surf, \\\n        'Number of bound and wake surfaces much be equal'\n\n    # allocate\n    Dercoll_list = []\n    Dervert_list = []\n    for ss_out in range(n_surf):\n        Kzeta_out = Surfs[ss_out].maps.Kzeta\n        Dercoll_list.append(np.zeros((3 * Kzeta_out, 3 * Kzeta_out)))\n        Dervert_list_sub = []\n        for ss_in in range(n_surf):\n            Kzeta_in = Surfs[ss_in].maps.Kzeta\n            Dervert_list_sub.append(np.zeros((3 * Kzeta_out, 3 * Kzeta_in)))\n        Dervert_list.append(Dervert_list_sub)\n\n    for ss_out in range(n_surf):\n\n        Surf_out = Surfs[ss_out]\n        M_out, N_out = Surf_out.maps.M, Surf_out.maps.N\n        K_out = Surf_out.maps.K\n        Kzeta_out = Surf_out.maps.Kzeta\n        shape_fqs = Surf_out.maps.shape_vert_vect  # (3,M+1,N+1)\n        Dercoll = Dercoll_list[ss_out]  # <--link\n\n        ### Loop out (bound) surface panels\n        for pp_out in itertools.product(range(0, M_out), range(0, N_out)):\n            mm_out, nn_out = pp_out\n            # zeta_panel_out=Surf_out.get_panel_vertices_coords(mm_out,nn_out)\n            zeta_panel_out = Surf_out.zeta[:, [mm_out + 0, mm_out + 1, mm_out + 1, mm_out + 0],\n                             [nn_out + 0, nn_out + 0, nn_out + 1, nn_out + 1]].T\n\n            # Loop segments\n            for ll, aa, bb in zip(svec, avec, bvec):\n                zeta_mid = 0.5 * (zeta_panel_out[bb, :] + zeta_panel_out[aa, :])\n                lv = zeta_panel_out[bb, :] - zeta_panel_out[aa, :]\n                Lskew = algebra.skew((-Surf_out.rho * Surf_out.gamma[mm_out, nn_out]) * lv)\n\n                # get vertices m,n indices\n                mm_a, nn_a = mm_out + dmver[aa], nn_out + dnver[aa]\n                mm_b, nn_b = mm_out + dmver[bb], nn_out + dnver[bb]\n                # get vertices 1d index\n                ii_a = [np.ravel_multi_index(\n                    (cc, mm_a, nn_a), shape_fqs) for cc in range(3)]\n                ii_b = [np.ravel_multi_index(\n                    (cc, mm_b, nn_b), shape_fqs) for cc in range(3)]\n                del mm_a, mm_b, nn_a, nn_b\n\n                ### loop input surfaces coordinates\n                for ss_in in range(n_surf):\n                    ### Bound\n                    Surf_in = Surfs[ss_in]\n                    M_in_bound, N_in_bound = Surf_in.maps.M, Surf_in.maps.N\n                    shape_zeta_in_bound = (3, M_in_bound + 1, N_in_bound + 1)\n                    Dervert = Dervert_list[ss_out][ss_in]  # <- link\n                    # deriv wrt induced velocity\n                    dvind_mid, dvind_vert = dvinddzeta_cpp(\n                        zeta_mid, Surf_in, is_bound=True, vortex_radius=Surf_in.vortex_radius)\n                    # allocate coll\n                    Df = np.dot(0.25 * Lskew, dvind_mid)\n                    Dercoll[np.ix_(ii_a, ii_a)] += Df\n                    Dercoll[np.ix_(ii_b, ii_a)] += Df\n                    Dercoll[np.ix_(ii_a, ii_b)] += Df\n                    Dercoll[np.ix_(ii_b, ii_b)] += Df\n                    # allocate vert\n                    Df = np.dot(0.5 * Lskew, dvind_vert)\n                    Dervert[ii_a, :] += Df\n                    Dervert[ii_b, :] += Df\n\n                    ### wake\n                    # deriv wrt induced velocity\n                    dvind_mid, dvind_vert = dvinddzeta_cpp(\n                        zeta_mid, Surfs_star[ss_in],\n                        is_bound=False, vortex_radius=Surf_in.vortex_radius,\n                        M_in_bound=Surf_in.maps.M)\n                    # allocate coll\n                    Df = np.dot(0.25 * Lskew, dvind_mid)\n                    Dercoll[np.ix_(ii_a, ii_a)] += Df\n                    Dercoll[np.ix_(ii_b, ii_a)] += Df\n                    Dercoll[np.ix_(ii_a, ii_b)] += Df\n                    Dercoll[np.ix_(ii_b, ii_b)] += Df\n\n                    Df = np.dot(0.5 * Lskew, dvind_vert)\n                    Dervert[ii_a, :] += Df\n                    Dervert[ii_b, :] += Df\n\n        # Loop output surf. TE\n        # - we use Gammaw_0 over the TE\n        # - we run along the positive direction as defined in the first row of\n        # wake panels\n        for nn_out in range(N_out):\n\n            # get TE bound vertices m,n indices\n            nn_a = nn_out + 1\n            nn_b = nn_out\n\n            # get segment and mid-point\n            zeta_mid = 0.5 * (Surf_out.zeta[:, M_out, nn_b] + Surf_out.zeta[:, M_out, nn_a])\n            lv = Surf_out.zeta[:, M_out, nn_b] - Surf_out.zeta[:, M_out, nn_a]\n            Lskew = algebra.skew((-Surf_out.rho * Surfs_star[ss_out].gamma[0, nn_out]) * lv)\n\n            # get vertices 1d index on bound\n            ii_a = [np.ravel_multi_index(\n                (cc, M_out, nn_a), shape_fqs) for cc in range(3)]\n            ii_b = [np.ravel_multi_index(\n                (cc, M_out, nn_b), shape_fqs) for cc in range(3)]\n\n            ### loop input surfaces coordinates\n            for ss_in in range(n_surf):\n                ### Bound\n                Surf_in = Surfs[ss_in]\n                M_in_bound, N_in_bound = Surf_in.maps.M, Surf_in.maps.N\n                shape_zeta_in_bound = (3, M_in_bound + 1, N_in_bound + 1)\n                Dervert = Dervert_list[ss_out][ss_in]  # <- link\n                # deriv wrt induced velocity\n                dvind_mid, dvind_vert = dvinddzeta_cpp(zeta_mid, Surf_in,\n                                                       is_bound=True,\n                                                       vortex_radius=Surf_in.vortex_radius)\n                # allocate coll\n                Df = np.dot(0.25 * Lskew, dvind_mid)\n                Dercoll[np.ix_(ii_a, ii_a)] += Df\n                Dercoll[np.ix_(ii_b, ii_a)] += Df\n                Dercoll[np.ix_(ii_a, ii_b)] += Df\n                Dercoll[np.ix_(ii_b, ii_b)] += Df\n                # allocate vert\n                Df = np.dot(0.5 * Lskew, dvind_vert)\n                Dervert[ii_a, :] += Df\n                Dervert[ii_b, :] += Df\n\n                ### wake\n                # deriv wrt induced velocity\n                dvind_mid, dvind_vert = dvinddzeta_cpp(\n                    zeta_mid, Surfs_star[ss_in],\n                    is_bound=False, vortex_radius=Surf_in.vortex_radius,\n                    M_in_bound=Surf_in.maps.M)\n                # allocate coll\n                Df = np.dot(0.25 * Lskew, dvind_mid)\n                Dercoll[np.ix_(ii_a, ii_a)] += Df\n                Dercoll[np.ix_(ii_b, ii_a)] += Df\n                Dercoll[np.ix_(ii_a, ii_b)] += Df\n                Dercoll[np.ix_(ii_b, ii_b)] += Df\n\n                # allocate vert\n                Df = np.dot(0.5 * Lskew, dvind_vert)\n                Dervert[ii_a, :] += Df\n                Dervert[ii_b, :] += Df\n\n    return Dercoll_list, Dervert_list\n\n\ndef dfunstdgamma_dot(Surfs):\n    \"\"\"\n    Computes derivative of unsteady aerodynamic force with respect to changes in\n    circulation.\n\n    Note: the function also checks that the first derivative of the circulation\n    at the linearisation point is null. If not, a further contribution to the\n    added mass, depending on the changes in panel area and normal, arises and\n    needs to be implemented.\n    \"\"\"\n\n    DerList = []\n    n_surf = len(Surfs)\n    for ss in range(n_surf):\n        Surf = Surfs[ss]\n\n        ### check gamma_dot is zero\n        assert (np.max(np.abs(Surf.gamma_dot)) < 1e-16), \\\n            'gamma_not not zero! Implement derivative w.r.t. lattice geometry changes'\n\n        ### compute sensitivity\n        wcv = Surf.get_panel_wcv()\n        Kzeta = Surf.maps.Kzeta\n        K = Surf.maps.K\n        M, N = Surf.maps.M, Surf.maps.N\n        shape_funst = (3, M + 1, N + 1)\n\n        DerList.append(np.zeros((3 * Kzeta, K)))\n        Der = DerList[-1]\n\n        # loop panels (input, i.e. matrix columns)\n        for pp in range(K):\n            # get (m,n) indices of panel\n            mm, nn = np.unravel_index(pp, (M, N))\n\n            dfcoll = -Surf.rho * Surf.areas[mm, nn] * Surf.normals[:, mm, nn]\n\n            for vv, dm, dn in zip(svec, dmver, dnver):\n                df = wcv[vv] * dfcoll\n\n                # get vertices 1d index\n                iivec = [np.ravel_multi_index(\n                    (vv, mm + dm, nn + dn), shape_funst) for vv in range(3)]\n\n                Der[iivec, pp] += df\n\n    return DerList\n\n\ndef wake_prop(MS, use_sparse=False, sparse_format='lil', settings=None):\n    \"\"\"\n    Assembly of wake propagation matrices, in sparse or dense matrices format\n\n    Note:\n        Wake propagation matrices are very sparse. Nonetheless, allocation\n        in dense format (from numpy.zeros) or sparse does not have important\n        differences in terms of cpu time and memory used as numpy.zeros does\n        not allocate memory until this is accessed\n\n    Args:\n        MS (MultiSurface): MultiSurface instance\n        use_sparse (bool (optional)): Use sparse matrices\n        sparse_format (str (optional)): Use either ``csc`` or ``lil`` format\n        settings (dict (optional)): Dictionary with aerodynamic settings containing:\n            cfl1 (bool): Defines if the wake shape complies with CFL=1\n            dt (float): time step\n    \"\"\"\n\n    try:\n        cfl1 = settings['cfl1']\n    except (KeyError, TypeError):\n        # In case the key does not exist or settings=None\n        cfl1 = True\n    cout.cout_wrap(\"Computing wake propagation matrix with CFL1={}\".format(cfl1), 1)\n\n    n_surf = len(MS.Surfs)\n    assert len(MS.Surfs_star) == n_surf, 'No. of wake and bound surfaces not matching!'\n\n    dimensions = [None]*n_surf\n    dimensions_star = [None]*n_surf\n\n    for ss in range(n_surf):\n\n        Surf = MS.Surfs[ss]\n        Surf_star = MS.Surfs_star[ss]\n\n        N, M, K = Surf.maps.N, Surf.maps.M, Surf.maps.K\n        M_star, K_star = Surf_star.maps.M, Surf_star.maps.K\n        assert Surf_star.maps.N == N, \\\n            'Bound and wake surface do not have the same spanwise discretisation'\n\n        dimensions[ss] = [M, N, K]\n        dimensions_star[ss] = [M_star, N, K_star]\n\n        if not cfl1:\n            # allocate...\n            if use_sparse:\n                if sparse_format == 'csc':\n                    C = libsp.csc_matrix((K_star, K))\n                    C_star = libsp.csc_matrix((K_star, K_star))\n                elif sparse_format == 'lil':\n                    C = sparse.lil_matrix((K_star, K))\n                    C_star = sparse.lil_matrix((K_star, K_star))\n            else:\n                C = np.zeros((K_star, K))\n                C_star = np.zeros((K_star, K_star))\n\n            C_list = []\n            Cstar_list = []\n\n            # Compute flow velocity at wake\n            uext = [np.zeros((3,\n                             dimensions_star[ss][0],\n                             dimensions_star[ss][1]))]\n\n            try:\n                Surf_star.zetac\n            except AttributeError:\n                Surf_star.generate_collocations()\n            # Compute induced velocities in the wake\n            Surf_star.u_ind_coll = np.zeros((3, M_star, N))\n\n            for iin in range(N):\n                # propagation from trailing edge\n                conv_vec = Surf_star.zetac[:, 0, iin] - Surf.zetac[:, -1, iin]\n                dist = np.linalg.norm(conv_vec)\n                conv_dir_te = conv_vec/dist\n                vel = Surf.u_input_coll[:, -1, iin]\n                vel_value = np.dot(vel, conv_dir_te)\n                cfl = settings['dt']*vel_value/dist\n\n                C[iin, N * (M - 1) + iin] = cfl\n                C_star[iin, iin] = 1.0 - cfl\n\n                # wake propagation\n                for mm in range(1, M_star):\n                    conv_vec = Surf_star.zetac[:, mm, iin] - Surf_star.zetac[:, mm - 1, iin]\n                    dist = np.linalg.norm(conv_vec)\n                    conv_dir = conv_vec/dist\n                    cfl = settings['dt']*vel_value/dist\n\n                    C_star[mm * N + iin, (mm - 1) * N + iin] = cfl\n                    C_star[mm * N + iin, mm * N + iin] = 1.0 - cfl\n\n            C_list.append(C)\n            Cstar_list.append(C_star)\n\n    if cfl1:\n        C_list, Cstar_list = wake_prop_from_dimensions(dimensions,\n                                                       dimensions_star,\n                                                       use_sparse=use_sparse,\n                                                       sparse_format=sparse_format)\n\n    return C_list, Cstar_list\n\n\ndef wake_prop_from_dimensions(dimensions, dimensions_star, use_sparse=False, sparse_format='lil'):\n    \"\"\"\n    Same as ``wake_prop'' but using the dimensions directly\n    \"\"\"\n\n    C_list = []\n    Cstar_list = []\n\n    # dimensions = [None]*n_surf\n\n    n_surf = len(dimensions)\n    assert len(dimensions_star) == n_surf, 'No. of wake and bound surfaces not matching!'\n\n    for ss in range(n_surf):\n\n        M, N, K = dimensions[ss]\n        M_star, N_star, K_star = dimensions_star[ss]\n        assert N_star == N, \\\n            'Bound and wake surface do not have the same spanwise discretisation'\n\n        # allocate...\n        if use_sparse:\n            if sparse_format == 'csc':\n                C = libsp.csc_matrix((K_star, K))\n                C_star = libsp.csc_matrix((K_star, K_star))\n            elif sparse_format == 'lil':\n                C = sparse.lil_matrix((K_star, K))\n                C_star = sparse.lil_matrix((K_star, K_star))\n        else:\n            C = np.zeros((K_star, K))\n            C_star = np.zeros((K_star, K_star))\n\n        # ... and fill\n        iivec = np.array(range(N), dtype=int)\n        # propagation from trailing edge\n        C[iivec, N * (M - 1) + iivec] = 1.0\n        # wake propagation\n        for mm in range(1, M_star):\n            C_star[mm * N + iivec, (mm - 1) * N + iivec] = 1.0\n\n        C_list.append(C)\n        Cstar_list.append(C_star)\n\n    return C_list, Cstar_list\n\n\ndef test_wake_prop_term(M, N, M_star, N_star, use_sparse, sparse_format='csc'):\n    \"\"\"\n    Test allocation of single term of wake propagation matrix\n    \"\"\"\n\n    K = M * N\n    K_star = M_star * N_star\n\n    iivec = np.array(range(N), dtype=int)\n\n    if use_sparse:\n        if sparse_format == 'csc':\n            C = sparse.csc_matrix((K_star, K))\n            C_star = sparse.csc_matrix((K_star, K_star))\n    else:\n        C = np.zeros((K_star, K))\n        C_star = np.zeros((K_star, K_star))\n\n    ### Propagation from trailing edge\n    C[iivec, N * (M - 1) + iivec] = 1.0\n\n    ### wake propagation\n    for mm in range(1, M_star):\n        C_star[mm * N + iivec, (mm - 1) * N + iivec] = 1.0\n\n    return C, C_star\n\n\nif __name__ == '__main__':\n    import time\n\n    M, N = 20, 30\n    M_star, N_star = M * 20, N\n\n    t0 = time.time()\n    C, C_star = test_wake_prop_term(M, N, M_star, N_star, use_sparse=False)\n    tf = time.time() - t0\n    print('Dense propagation matrix allocated in %.4f sec' % tf)\n\n    t0 = time.time()\n    Csp, Csp_star = test_wake_prop_term(M, N, M_star, N_star, use_sparse=True)\n    tf = time.time() - t0\n    print('csc sparse propagation matrix allocated in %.4f sec' % tf)\n\n    # cProfile.runctx('self.assemble()', globals(), locals(), filename=self.prof_out)\n    # 1/0\n\n    ### compare sparse types\n    Nx = 3000\n    N1, N2 = 1000, Nx - 2000\n\n    t0 = time.time()\n    Z = sparse.csc_matrix((Nx, Nx))\n    Z[:N1, :N1] = 2.\n    Z[:N1, N1:] = 3.\n    tfin = time.time() - t0\n    print('csc allocated in %.6f sec' % tfin)\n\n    t0 = time.time()\n    Z = sparse.lil_matrix((Nx, Nx))\n    Z[:N1, :N1] = 2.\n    Z[:N1, N1:] = 3.\n    Z = Z.tocsc()\n    tfin = time.time() - t0\n    print('lil->csc allocated in %.6f sec' % tfin)\n"
  },
  {
    "path": "sharpy/linear/src/gridmapping.py",
    "content": "\"\"\"Mapping methods for bound surface panels\n\nS. Maraniello, 19 May 2018\n\"\"\"\n\nimport numpy as np\nimport sharpy.utils.cout_utils as cout\n\n\nclass AeroGridMap():\n    \"\"\"\n    Produces mapping between panels, segment and vertices of a surface.\n    Grid elements are identified through the indices (m,n), where:\n        - m: chordwise index\n        - n: spanwise index\n    The same indexing is applied to panel, vertices and segments.\n\n    Elements:\n    - panels=(M,N)\n    - vertices=(M+1,N+1)\n    - segments: these are divided in segments developing along the chordwise and\n    spanwise directions.\n        - chordwise: (M,N+1)\n        - spanwise: (M+1,N)\n\n    Mapping structures:\n    - Mpv: for each panel (mp,np) returns the chord/span-wise indices of its\n    vertices, (mv,nv). This has size (M,N,4,2)\n    - Mps: maps each panel (mp,np) to the ii-th segment. This has size (M,N,4,2)\n\n\n    # - Mps_extr: for each panel (m,n) returns the indices of the extrema of each side\n    # of the panel.\n\n    Note:\n    - mapping matrices are stored as np.int16 or np.int32 arrays\n    \"\"\"\n\n    def __init__(self, M: 'number of chord-wise', N: 'number of span-wise'):\n        ### init\n        self.M = M\n        self.N = N\n        self.K = M * N  # panels number\n        self.Kzeta = (M + 1) * (N + 1)  # vertices number\n\n        ### format\n        self.intxx = np.int16\n        if self.Kzeta > np.iinfo(np.int16).max: self.intxx = np.int32\n\n        ### shapes for multi-dimensional arrays\n        self.shape_pan_scal = (M, N)\n        self.shape_pan_vect = (3, M, N)\n        self.shape_vert_scal = (M + 1, N + 1)\n        self.shape_vert_vect = (3, M + 1, N + 1)\n\n        # local mapping segment/vertices of a panel\n        self.svec = np.array([0, 1, 2, 3], dtype=self.intxx)  # seg. number\n        self.avec = np.array([0, 1, 2, 3], dtype=self.intxx)  # 1st vertex of seg.\n        self.bvec = np.array([1, 2, 3, 0], dtype=self.intxx)  # 2nd vertex of seg.\n\n        # deltas to convert panel (m,n) to vertices (m,n) indices. For each\n        # vertex of the panel:\n        # \tm_ver,n_ver = m+self.dmver, n+self.dnver\n        self.dmver = np.array([0, 1, 1, 0], dtype=self.intxx)\n        self.dnver = np.array([0, 0, 1, 1], dtype=self.intxx)\n\n        ### variables 1D <-> nD mapping\n        # # example:\n        # A=np.random.rand(3,4,5)\n        # a=A.reshape(-1,order='C')\n        # Na=len(a)\n        # ind_1d=range(Na)\n        # ind_3d=np.unravel_index(ind_1d,A.shape)\n        # ind_1d=np.ravel_multi_index(ind_3d,A.shape)\n        # a[range(Na)]==a[ind_1d]==A[ind_3d]\n\n        # vectors defined at vertices\n        self.ind_1d_vert_vert = range(3 * self.Kzeta)\n        self.ind_3d_vert_vect = np.unravel_index(self.ind_1d_vert_vert,\n                                                 shape=self.shape_vert_vect, order='C')\n        # scalars defined at panels\n        self.ind_1d_pan_scal = range(self.K)\n        self.ind_2d_pan_scal = np.unravel_index(self.ind_1d_pan_scal,\n                                                shape=self.shape_pan_scal, order='C')\n\n        # ### mapping to/from 1D arrays\n        # self.maps.ind_vector_vertices_to_3d=\n        # self.maps.ind_vector_vertices_to_1d=\n        # self.maps.ind_scalar_panel_to_3d=\n        # self.maps.ind_scalar_panel_to_1d=\n\n    def map_all(self):\n        self.map_panels_to_vertices()\n        self.map_panels_to_segments()\n        self.map_vertices_to_panels()\n\n    # ------------------------------------------------------ panels to vertices\n\n    def map_panels_to_vertices_1D_scalar(self):\n        \"\"\"\n        Mapping:\n        - FROM: the index of a scalar quantity defined at panel collocation point\n        and stored in 1D array.\n        - TO: index of a scalar quantity defined at vertices and stored in 1D\n\n        The Mpv1d_scalar has size (K,4) where:\n            [1d index of panel, index of vertex 0,1,2 or 3]\n        \"\"\"\n\n        self.Mpv1d_scalar = np.zeros((self.K, 4), dtype=self.intxx)\n\n        # Map: panels 1D -> 3d\n        if not hasattr(self, 'Mpv'):\n            self.map_panels_to_vertices()\n        mn_panels = np.unravel_index(range(self.K),\n                                     shape=self.shape_pan_scal, order='C')\n        # Mpv_new=self.Mpv[mn_panels] # from k to vertices\n\n        for kk in range(self.K):\n\n            # map from kk-th panel to vertices (m,n)\n            mpv = self.Mpv[mn_panels[0][kk], mn_panels[1][kk], :, :]\n\n            # loop through vertices\n            for vv in range(4):\n                self.Mpv1d_scalar[kk, vv] = np.ravel_multi_index(mpv[vv, :],\n                                                                 dims=self.shape_vert_scal, order='C')\n\n    def map_panels_to_vertices(self):\n        \"\"\"\n        Mapping from panel of vertices. self.Mpv is a (M,N,4,2) array such that\n        its element are:\n            [m, n, local_vertex_number, spanwise/chordwise indices of vertex]\n        \"\"\"\n\n        M, N = self.M, self.N\n        self.Mpv = np.zeros((M, N, 4, 2), dtype=self.intxx)\n\n        for mm in range(M):\n            for nn in range(N):\n                self.Mpv[mm, nn, :, :] = self.from_panel_to_vertices(mm, nn)\n\n    def from_panel_to_vertices(self, m: 'chordwise index', n: 'spanwise index'):\n        \"\"\"\n        From panel of indices (m,n) to indices of vertices\n        \"\"\"\n\n        # mpv=np.zeros((4,2),dtype=self.intxx)\n        # mpv[0,:]=m  ,n\n        # mpv[1,:]=m+1,n\n        # mpv[2,:]=m+1,n+1\n        # mpv[3,:]=m  ,n+1\n        mpv = np.array([m + self.dmver, n + self.dnver]).T\n\n        return mpv\n\n    # ------------------------------------------------------ vertices to panels\n\n    def map_vertices_to_panels_1D_scalar(self):\n        \"\"\"\n        Mapping:\n        - FROM: the index of a scalar quantity defined at vertices and stored in\n        1D array.\n        - TO: index of a scalar quantity defined at panels and stored in 1D\n\n        The Mpv1d_scalar has size (Kzeta,4) where:\n            [1d index of vertex, index of vertex 0,1,2 or 3 w.r.t. panel]\n        \"\"\"\n\n        self.Mvp1d_scalar = np.zeros((self.Kzeta, 4), dtype=self.intxx)\n\n        # Map: vertices 1D -> 3d\n        if not hasattr(self, 'Mvp'):\n            self.map_vertices_to_panels()\n        mn_vertices = np.unravel_index(range(self.Kzeta),\n                                       shape=self.shape_vert_scal, order='C')\n\n        for kk in range(self.Kzeta):\n\n            # map from kk-th vertex to panels (m,n)\n            mvp = self.Mvp[mn_vertices[0][kk], mn_vertices[1][kk], :, :]\n\n            # loop through vertex local order\n            for vv in range(4):\n                # check if vertex is vv-th for any panel\n                if np.all(mvp[vv, :] != -1):\n                    self.Mvp1d_scalar[kk, vv] = np.ravel_multi_index(mvp[vv, :],\n                                                                     dims=self.shape_pan_scal, order='C')\n                else:\n                    self.Mvp1d_scalar[kk, vv] = -1\n\n    def map_vertices_to_panels(self):\n        \"\"\"\n        Maps from vertices to panels. Produces a (M+1,N+1,4,2) array, associating\n        vertices to panels. Its elements are:\n            [m vertex,\n                n vertex,\n                    vertex local index,\n                        chordwise/spanwise panel indices]\n        \"\"\"\n\n        M, N = self.M, self.N\n        self.Mvp = np.zeros((M + 1, N + 1, 4, 2), dtype=self.intxx)\n\n        for mm in range(M + 1):\n            for nn in range(N + 1):\n                self.Mvp[mm, nn, :, :] = self.from_vertex_to_panel(mm, nn)\n                # remove out of grid panels\n                mmvec_rem = self.Mvp[mm, nn, :, 0] >= M\n                nnvec_rem = self.Mvp[mm, nn, :, 1] >= N\n                self.Mvp[mm, nn, mmvec_rem, 0] = -1\n                self.Mvp[mm, nn, nnvec_rem, 1] = -1\n\n    def from_vertex_to_panel(self, m: 'chordwise index', n: 'spanwise index'):\n        \"\"\"\n        Returns the panel for which the vertex is locally numbered as 0,1,2,3.\n        Returns a (4,2) array such that its elements are:\n            [vv_local,(m,n) of panel]\n        where vv_local is the local verteix number.\n\n        Important: indices -1 are possible is the vertex does not have local index\n        0,1,2 or 3 with respect to any panel.\n        \"\"\"\n\n        mvp = np.zeros((4, 2), dtype=self.intxx)\n        mvp[0, :] = [m, n]\n        mvp[1, :] = [m - 1, n]\n        mvp[2, :] = [m - 1, n - 1]\n        mvp[3, :] = [m, n - 1]\n\n        return mvp\n\n    # ------------------------------------------------------ panels to segments\n\n    def map_panels_to_segments(self):\n        \"\"\"\n        Mapping from panel of segments. self.Mpv is a (M,N,4,2) array such\n        that:\n            [m, n, local_segment_number,\n                        chordwise/spanwise index of segment,]\n        \"\"\"\n\n        M, N = self.M, self.N\n        self.Mps = np.zeros((M, N, 4, 2), dtype=self.intxx)\n\n        for mm in range(M):\n            for nn in range(N):\n                self.Mps[mm, nn, :, :] = self.from_panel_to_segments(mm, nn)\n\n    def from_panel_to_segments(self, m: 'chordwise index', n: 'spanwise index'):\n        \"\"\"\n        For each panel (m,n) it provides the ms,ns indices of each segment.\n        \"\"\"\n\n        mps = np.zeros((4, 2), dtype=np.int32)\n        mps[0, :] = m, n\n        mps[1, :] = m + 1, n\n        mps[2, :] = m, n + 1\n        mps[3, :] = m, n\n\n        return mps\n\n    # # ---------------------------------------------- panels to segments extrema\n\n    # def map_panels_to_segments(self):\n    # \t\"\"\"\n    # \tMapping from panel of segments. self.Mpv is a (M,N,4,2,2) array such\n    # \tthat:\n    # \t\t[m, n, local_segment_number,\n    # \t\t\t   \t\tspanwise/chordwise indices of vertex 0,\n    # \t\t\t   \t\t\tspanwise/chordwise indices of vertex 1]\n    # \t\"\"\"\n\n    # \tM,N=self.M,self.N\n    # \tself.Mps=np.zeros((M,N,4,2,2),dtype=self.intxx)\n\n    # \tfor mm in range(M):\n    # \t\tfor nn in range(N):\n    # \t\t\tself.Mps[mm,nn,:,:,:]=self.from_panel_to_segments(mm,nn)\n\n    # def from_panel_to_segments(self,m:'chordwise index',n:'spanwise index'):\n    # \t\"\"\"\n    # \tFor each panel (m,n) it provides the indices of the extrema of each\n    # \tsegment.\n    # \t\t[segment number,indices extrema 0,indices extrema 1]\n    # \t\"\"\"\n\n    # \tmpv=self.from_panel_to_vertices(m,n)\n    # \tmps=np.zeros((4,2,2),dtype=np.int32)\n    # \tmps[0,0,:],mps[0,1,:]=mpv[0,:],mpv[1,:]\n    # \tmps[1,0,:],mps[1,1,:]=mpv[1,:],mpv[2,:]\n    # \tmps[2,0,:],mps[2,1,:]=mpv[2,:],mpv[3,:]\n    # \tmps[3,0,:],mps[3,1,:]=mpv[3,:],mpv[0,:]\n\n    # \treturn mps\n\n\nif __name__ == '__main__':\n    M, N = 3, 5\n\n    Map = AeroGridMap(M, N)\n\n    ### multi-dimensional mapping\n    Map.map_panels_to_vertices()\n    Map.map_panels_to_segments()\n    Map.map_vertices_to_panels()\n\n    # 1D mappings\n    Map.map_panels_to_vertices_1D_scalar()\n    Map.map_vertices_to_panels_1D_scalar()\n"
  },
  {
    "path": "sharpy/linear/src/interp.py",
    "content": "\"\"\"\nDefines interpolation methods (geometrically-exact) and matrices (linearisation)\nS. Maraniello, 20 May 2018\n\"\"\"\n\nimport numpy as np\n\n\n\n# -------------------------------------------------- interp at ollocation point\n\ndef get_panel_wcv(aM=0.5,aN=0.5):\n\t\"\"\"\n\tProduces a compact array with weights for bilinear interpolation, where\n\taN,aM in [0,1] are distances in the chordwise and spanwise directions \n\tsuch that:\n\t\t- (aM,aN)=(0,0) --> quantity at vertex 0\n\t\t- (aM,aN)=(1,0) --> quantity at vertex 1\n\t\t- (aM,aN)=(1,1) --> quantity at vertex 2\n\t\t- (aM,aN)=(0,1) --> quantity at vertex 3\n\t\"\"\"\n\n\twcv=np.array([ (1-aM)*(1-aN), aM*(1-aN), aM*aN, aN*(1-aM) ])\n\n\treturn wcv \n\n\ndef get_Wvc_scalar(Map,aM=0.5,aN=0.5):\n\t\"\"\"\n\tProduce scalar interpolation matrix Wvc for state-space realisation.\n\n\tImportant: this will not work for coordinates extrapolation, as it would\n\trequire information about the panel size. It works for other forces/scalar \n\tquantities extrapolation. It assumes the quantity at the collocation point\n\tis determined proportionally to the weight associated to each vertex and \n\tobtained through get_panel_wcv. \n\t\"\"\"\n\n\t# initialise\n\tK,Kzeta=Map.K,Map.Kzeta\n\tWvc=np.zeros((Kzeta,K))\n\n\t# retrieve weights\n\twcv=get_panel_wcv(aM,aN)\n\twvc=wcv.T\n\n\t# define mapping panels to vertices (for scalars)\n\tif not hasattr(Map,'Mvp1d_scalar'):\n\t\tMap.map_panels_to_vertices_1D_scalar()\n\n\t# loop through panels\n\tfor jj in range(K):\n\t\t# loop through local vertex index\n\t\tfor vv in range(4):\n\t\t\t# vertex 1d index\n\t\t\tii = Map.Mpv1d_scalar[jj,vv]\n\t\t\t# allocate\n\t\t\tWvc[ii,jj]=wvc[vv]\n\n\treturn Wvc\n\n\ndef get_Wvc_vector(Wvc_scalar):\n\n\tKzeta,K=Wvc_scalar.shape\n\tWvc=np.zeros((3*Kzeta,3*K))\n\n\tfor cc in range(3):\n\t\tWvc[cc*Kzeta:(cc+1)*Kzeta,cc*K:(cc+1)*K]=Wvc_scalar \n\n\treturn Wvc \n\n\ndef get_Wnv_vector(SurfGeo,aM=0.5,aN=0.5):\n\t\"\"\"\n\tProvide projection matrix from nodal velocities to normal velocity at \n\tcollocation points\n\t\"\"\"\n\n\t# initialise\n\tMap=SurfGeo.maps\n\tK,Kzeta=Map.K,Map.Kzeta\n\n\t# retrieve scaling matrix\n\tWvc_scalar=get_Wvc_scalar(Map,aM,aN)\n\tWvc=get_Wvc_vector(Wvc_scalar)\n\tWcv=Wvc.T\n\tdel Wvc_scalar, Wvc\n\t\n\t# Build Wnc matrix\n\tNmat=SurfGeo.normals.reshape((3,K))\n\tWnc=np.concatenate([\n\t\t     np.diag(Nmat[0,:]),np.diag(Nmat[1,:]),np.diag(Nmat[2,:]) ], axis=1) \n\t\n\tWnv=np.dot(Wnc,Wcv)\n\n\treturn Wnv\n\n\n\n\n\n# -----------------------------------------------------------------------------\n\n#\n# if __name__=='__main__':\n#\n# \timport read\n# \timport gridmapping\n# \timport surface\n# \timport matplotlib.pyplot as plt\n#\n# \t# select test case\n# \tfname='../test/h5input/goland_mod_Nsurf01_M003_N004_a040.aero_state.h5'\n# \thaero=read.h5file(fname)\n# \ttsdata=haero.ts00000\n#\n# \t# select surface and retrieve data\n# \tss=0\n# \tM,N=tsdata.dimensions[ss]\n# \tMap=gridmapping.AeroGridMap(M,N)\n# \tSurfGeo=surface.AeroGridGeo(Map,tsdata.zeta[ss])\n#\n# \t# generate geometry data\n# \tSurfGeo.generate_areas()\n# \tSurfGeo.generate_normals()\n# \t#SurfGeo.aM,SurfGeo.aN=0.25,0.75\n# \tSurfGeo.generate_collocations()\n#\n#\n# \t# ---------------------------------------------------------------- Test Wvc\n# \tzeta_vec=SurfGeo.zeta.reshape(-1,order='C')\n# \tWvc_scalar=get_Wvc_scalar(Map)\n# \tWvc=get_Wvc_vector(Wvc_scalar)\n# \tzetac_vec=np.dot(Wvc.T,zeta_vec)\n# \tzetac=zetac_vec.reshape(Map.shape_pan_vect)\n# \tSurfGeo.plot(plot_normals=False)\n# \tSurfGeo.ax.scatter(zetac[0],zetac[1],zetac[2],zdir='z',s=6,c='b',marker='+')\n# \t# # way back - can't work\n# \t# zetav_vec=np.dot(Wvc,zetac_vec)\n# \t# zetav=zetav_vec.reshape(Map.shape_vert_vect)\n# \t# SurfGeo.ax.scatter(zetav[0],zetav[1],zetav[2],zdir='z',s=6,c='k',marker='+')\n# \t# plt.show()\n# \tplt.close('all')\n#\n#\n# \t# ---------------------------------------------------------------- Test wnv\n# \t# generate non-zero field of external force\n# \tu_ext=tsdata.u_ext[ss]\n# \tu_ext[0,:,:]=u_ext[0,:,:]-20.0\n# \tu_ext[1,:,:]=u_ext[1,:,:]+60.0\n# \tu_ext[2,:,:]=u_ext[2,:,:]+30.0\n# \tu_ext=u_ext+np.random.rand(*u_ext.shape)\n# \t# interpolate velocity at collocation points\n#\n# \t# compute normal velocity at panels\n# \twcv=get_panel_wcv(aM=0.5,aN=0.5)\n# \tu_norm=np.zeros((M,N))\n# \tfor mm in range(M):\n# \t\tfor nn in range(N):\n# \t\t\t# get velocity at panel corners\n# \t\t\tmpv=SurfGeo.maps.from_panel_to_vertices(mm,nn)\n# \t\t\tuc=np.zeros((3,))\n# \t\t\tfor vv in range(4):\n# \t\t\t\tuc=uc+wcv[vv]*u_ext[:,mpv[vv,0],mpv[vv,1]]\n# \t\t\tu_norm[mm,nn]=np.dot(uc,SurfGeo.normals[:,mm,nn])\n# \tu_norm_vec_ref=u_norm.reshape(-1,order='C')\n# \t# compute normal velocity through projection matrix\n# \tu_ext_vec=u_ext.reshape(-1,order='C')\n# \tWnv=get_Wnv_vector(SurfGeo)\n# \tu_norm_vec=np.dot(Wnv,u_ext_vec)\n#\n# \tassert np.max(np.abs(u_norm_vec-u_norm_vec_ref))<1e-12, 'Wnv not correct'\n"
  },
  {
    "path": "sharpy/linear/src/lib_dbiot.py",
    "content": "\"\"\"Induced Velocity Derivatives\n\nCalculate derivatives of induced velocity.\n\nMethods:\n\n- eval_seg_exp and eval_seg_exp_loop: profide ders in format\n    [Q_{x,y,z},ZetaPoint_{x,y,z}]\n  and use fully-expanded analytical formula.\n- eval_panel_exp: iterates through whole panel\n\n- eval_seg_comp and eval_seg_comp_loop: profide ders in format\n    [Q_{x,y,z},ZetaPoint_{x,y,z}]\n  and use compact analytical formula.\n\"\"\"\n\nimport numpy as np\n\nfrom sharpy.aero.utils.uvlmlib import eval_panel_cpp\nimport sharpy.utils.algebra as algebra\nfrom sharpy.utils.constants import cfact_biot\n\n### looping through panels\nsvec = [0, 1, 2, 3]  # seg. no.\n# avec =[ 0, 1, 2, 3] # 1st vertex no.\n# bvec =[ 1, 2, 3, 0] # 2nd vertex no.\nLoopPanel = [(0, 1), (1, 2), (2, 3), (3, 0)]  # used in eval_panel_{exp/comp}\n\n\ndef eval_panel_cpp_coll(zetaP, ZetaPanel, vortex_radius, gamma_pan=1.0):\n    DerP, DerVertices = eval_panel_cpp(zetaP, ZetaPanel, vortex_radius, gamma_pan)\n    return DerP\n\n\ndef eval_seg_exp(ZetaP, ZetaA, ZetaB, vortex_radius, gamma_seg=1.0):\n    \"\"\"\n    Derivative of induced velocity Q w.r.t. collocation and segment coordinates\n    in format:\n        [ (ZetaP,ZetaA,ZetaB), (x,y,z) of Zeta,  (x,y,z) of Q]\n\n    Warning: function optimised for performance. Variables are scaled during the\n    execution.\n    \"\"\"\n\n    DerP = np.zeros((3, 3))\n    DerA = np.zeros((3, 3))\n    DerB = np.zeros((3, 3))\n    eval_seg_exp_loop(DerP, DerA, DerB, ZetaP, ZetaA, ZetaB, gamma_seg,\n                      vortex_radius)\n    return DerP, DerA, DerB\n\n\ndef eval_seg_exp_loop(DerP, DerA, DerB, ZetaP, ZetaA, ZetaB, gamma_seg,\n                      vortex_radius):\n    \"\"\"\n    Derivative of induced velocity Q w.r.t. collocation (DerC) and segment\n    coordinates in format.\n\n    To optimise performance, the function requires the derivative terms to be\n    pre-allocated and passed as input.\n\n    Each Der* term returns derivatives in the format\n\n        [ (x,y,z) of Zeta,  (x,y,z) of Q]\n\n    Warning: to optimise performance, variables are scaled during the execution.\n    \"\"\"\n\n    RA = ZetaP - ZetaA\n    RB = ZetaP - ZetaB\n    RAB = ZetaB - ZetaA\n    Vcr = algebra.cross3(RA, RB)\n    vcr2 = np.dot(Vcr, Vcr)\n\n    # numerical radious\n    vortex_radious_here = vortex_radius * algebra.norm3d(RAB)\n    if vcr2 < vortex_radious_here ** 2:\n        return\n\n    # scaling\n    ra1, rb1 = algebra.norm3d(RA), algebra.norm3d(RB)\n    ra2, rb2 = ra1 ** 2, rb1 ** 2\n    rainv = 1. / ra1\n    rbinv = 1. / rb1\n    ra_dir, rb_dir = RA * rainv, RB * rbinv\n    ra3inv, rb3inv = rainv ** 3, rbinv ** 3\n    Vcr = Vcr / vcr2\n\n    diff_vec = ra_dir - rb_dir\n    vdot_prod = np.dot(diff_vec, RAB)\n    T2 = vdot_prod / vcr2\n\n    # Extract components\n    ra_x, ra_y, ra_z = RA\n    rb_x, rb_y, rb_z = RB\n    rab_x, rab_y, rab_z = RAB\n    vcr_x, vcr_y, vcr_z = Vcr\n    ra2_x, ra2_y, ra2_z = RA ** 2\n    rb2_x, rb2_y, rb2_z = RB ** 2\n    ra_vcr_x, ra_vcr_y, ra_vcr_z = 2. * algebra.cross3(RA, Vcr)\n    rb_vcr_x, rb_vcr_y, rb_vcr_z = 2. * algebra.cross3(RB, Vcr)\n    vcr_sca_x, vcr_sca_y, vcr_sca_z = Vcr * ra3inv\n    vcr_scb_x, vcr_scb_y, vcr_scb_z = Vcr * rb3inv\n\n    # # ### derivatives indices:\n    # # # the 1st is the component of the vaiable w.r.t derivative are taken.\n    # # # the 2nd is the component of the output\n    dQ_dRA = np.array(\n        [[-vdot_prod * rb_vcr_x * vcr_x + vcr_sca_x * (\n                    rab_x * (ra2 - ra2_x) - ra_x * ra_y * rab_y - ra_x * ra_z * rab_z),\n          -T2 * rb_z - vdot_prod * rb_vcr_x * vcr_y + vcr_sca_y * (\n                      rab_x * (ra2 - ra2_x) - ra_x * ra_y * rab_y - ra_x * ra_z * rab_z),\n          T2 * rb_y - vdot_prod * rb_vcr_x * vcr_z + vcr_sca_z * (\n                      rab_x * (ra2 - ra2_x) - ra_x * ra_y * rab_y - ra_x * ra_z * rab_z)],\n         [T2 * rb_z - vdot_prod * rb_vcr_y * vcr_x + vcr_sca_x * (\n                     rab_y * (ra2 - ra2_y) - ra_x * ra_y * rab_x - ra_y * ra_z * rab_z),\n          -vdot_prod * rb_vcr_y * vcr_y + vcr_sca_y * (\n                      rab_y * (ra2 - ra2_y) - ra_x * ra_y * rab_x - ra_y * ra_z * rab_z),\n          -T2 * rb_x - vdot_prod * rb_vcr_y * vcr_z + vcr_sca_z * (\n                      rab_y * (ra2 - ra2_y) - ra_x * ra_y * rab_x - ra_y * ra_z * rab_z)],\n         [-T2 * rb_y - vdot_prod * rb_vcr_z * vcr_x + vcr_sca_x * (\n                     rab_z * (ra2 - ra2_z) - ra_x * ra_z * rab_x - ra_y * ra_z * rab_y),\n          T2 * rb_x - vdot_prod * rb_vcr_z * vcr_y + vcr_sca_y * (\n                      rab_z * (ra2 - ra2_z) - ra_x * ra_z * rab_x - ra_y * ra_z * rab_y),\n          -vdot_prod * rb_vcr_z * vcr_z + vcr_sca_z * (\n                      rab_z * (ra2 - ra2_z) - ra_x * ra_z * rab_x - ra_y * ra_z * rab_y)]])\n\n    dQ_dRB = np.array(\n        [[vdot_prod * ra_vcr_x * vcr_x + vcr_scb_x * (\n                    rab_x * (-rb2 + rb2_x) + rab_y * rb_x * rb_y + rab_z * rb_x * rb_z),\n          T2 * ra_z + vdot_prod * ra_vcr_x * vcr_y + vcr_scb_y * (\n                      rab_x * (-rb2 + rb2_x) + rab_y * rb_x * rb_y + rab_z * rb_x * rb_z),\n          -T2 * ra_y + vdot_prod * ra_vcr_x * vcr_z + vcr_scb_z * (\n                      rab_x * (-rb2 + rb2_x) + rab_y * rb_x * rb_y + rab_z * rb_x * rb_z)],\n         [-T2 * ra_z + vdot_prod * ra_vcr_y * vcr_x + vcr_scb_x * (\n                     rab_x * rb_x * rb_y + rab_y * (-rb2 + rb2_y) + rab_z * rb_y * rb_z),\n          vdot_prod * ra_vcr_y * vcr_y + vcr_scb_y * (\n                      rab_x * rb_x * rb_y + rab_y * (-rb2 + rb2_y) + rab_z * rb_y * rb_z),\n          T2 * ra_x + vdot_prod * ra_vcr_y * vcr_z + vcr_scb_z * (\n                      rab_x * rb_x * rb_y + rab_y * (-rb2 + rb2_y) + rab_z * rb_y * rb_z)],\n         [T2 * ra_y + vdot_prod * ra_vcr_z * vcr_x + vcr_scb_x * (\n                     rab_x * rb_x * rb_z + rab_y * rb_y * rb_z + rab_z * (-rb2 + rb2_z)),\n          -T2 * ra_x + vdot_prod * ra_vcr_z * vcr_y + vcr_scb_y * (\n                      rab_x * rb_x * rb_z + rab_y * rb_y * rb_z + rab_z * (-rb2 + rb2_z)),\n          vdot_prod * ra_vcr_z * vcr_z + vcr_scb_z * (\n                      rab_x * rb_x * rb_z + rab_y * rb_y * rb_z + rab_z * (-rb2 + rb2_z))]])\n\n    dQ_dRAB = np.array(\n        [[vcr_x * diff_vec[0],\n          vcr_y * diff_vec[0],\n          vcr_z * diff_vec[0]],\n         [vcr_x * diff_vec[1],\n          vcr_y * diff_vec[1],\n          vcr_z * diff_vec[1]],\n         [vcr_x * diff_vec[2],\n          vcr_y * diff_vec[2],\n          vcr_z * diff_vec[2]]])\n\n    DerP += (cfact_biot * gamma_seg) * (dQ_dRA + dQ_dRB).T  # w.r.t. P\n    DerA += (cfact_biot * gamma_seg) * (-dQ_dRAB - dQ_dRA).T  # w.r.t. A\n    DerB += (cfact_biot * gamma_seg) * (dQ_dRAB - dQ_dRB).T  # w.r.t. B\n\n\ndef eval_panel_exp(zetaP, ZetaPanel, vortex_radius, gamma_pan=1.0):\n    \"\"\"\n    Computes derivatives of induced velocity w.r.t. coordinates of target point,\n    zetaP, and panel coordinates. Returns two elements:\n        - DerP: derivative of induced velocity w.r.t. ZetaP, with:\n            DerP.shape=(3,3) : DerC[ Uind_{x,y,z}, ZetaC_{x,y,z} ]\n        - DerVertices: derivative of induced velocity wrt panel vertices, with:\n            DerVertices.shape=(4,3,3) :\n            DerVertices[ vertex number {0,1,2,3}, Uind_{x,y,z}, ZetaC_{x,y,z} ]\n    \"\"\"\n\n    DerP = np.zeros((3, 3))\n    DerVertices = np.zeros((4, 3, 3))\n\n    for aa, bb in LoopPanel:\n        eval_seg_exp_loop(DerP, DerVertices[aa, :, :], DerVertices[bb, :, :],\n                          zetaP, ZetaPanel[aa, :], ZetaPanel[bb, :], gamma_pan,\n                          vortex_radius)\n\n    return DerP, DerVertices\n\n\n# ------------------------------------------------------------------------------\n#\tCompact Formula\n# ------------------------------------------------------------------------------\n\n\ndef Dvcross_by_skew3d(Dvcross, rv):\n    \"\"\"\n    Fast matrix multiplication of der(vcross)*skew(rv), where\n        vcross = (rv x sv)/|rv x sv|^2\n    The function exploits the property that the output matrix is symmetric.\n    DvCross is a list containing the lower diagonal elements\n    \"\"\"\n    P = np.empty((3, 3))\n    P[0, 0] = Dvcross[1][0] * rv[2] - Dvcross[2][0] * rv[1]\n    P[0, 1] = Dvcross[2][0] * rv[0] - Dvcross[0][0] * rv[2]\n    P[0, 2] = Dvcross[0][0] * rv[1] - Dvcross[1][0] * rv[0]\n    #\n    P[1, 0] = P[0, 1]\n    P[1, 1] = Dvcross[2][1] * rv[0] - Dvcross[1][0] * rv[2]\n    P[1, 2] = Dvcross[1][0] * rv[1] - Dvcross[1][1] * rv[0]\n    #\n    P[2, 0] = P[0, 2]\n    P[2, 1] = P[1, 2]\n    P[2, 2] = Dvcross[2][0] * rv[1] - Dvcross[2][1] * rv[0]\n    return P\n\n\n# def Dvcross_by_skew3d(Dvcross,rv):\n# \t\"\"\"\n# \tFast matrix multiplication of der(vcross)*skew(rv), where\n# \t\tvcross = (rv x sv)/|rv x sv|^2\n# \tThe function exploits the property that the output matrix is symmetric.\n# \t\"\"\"\n# \tP=np.empty((3,3))\n# \tP[0,0]=Dvcross[0,1]*rv[2]-Dvcross[0,2]*rv[1]\n# \tP[0,1]=Dvcross[0,2]*rv[0]-Dvcross[0,0]*rv[2]\n# \tP[0,2]=Dvcross[0,0]*rv[1]-Dvcross[0,1]*rv[0]\n# \t#\n# \tP[1,0]=P[0,1]\n# \tP[1,1]=Dvcross[1,2]*rv[0]-Dvcross[0,1]*rv[2]\n# \tP[1,2]=Dvcross[0,1]*rv[1]-Dvcross[1,1]*rv[0]\n# \t#\n# \tP[2,0]=P[0,2]\n# \tP[2,1]=P[1,2]\n# \tP[2,2]=Dvcross[0,2]*rv[1]-Dvcross[1,2]*rv[0]\n# \treturn P\n\ndef der_runit(r, rinv, minus_rinv3):\n    # alloc upper diag\n    Der = np.empty((3, 3))\n    Der[0, 0] = rinv + minus_rinv3 * r[0] ** 2\n    Der[0, 1] = minus_rinv3 * r[0] * r[1]\n    Der[0, 2] = minus_rinv3 * r[0] * r[2]\n    Der[1, 1] = rinv + minus_rinv3 * r[1] ** 2\n    Der[1, 2] = minus_rinv3 * r[1] * r[2]\n    Der[2, 2] = rinv + minus_rinv3 * r[2] ** 2\n    # alloc lower\n    Der[1, 0] = Der[0, 1]\n    Der[2, 0] = Der[0, 2]\n    Der[2, 1] = Der[1, 2]\n    return Der\n\n\ndef eval_seg_comp(ZetaP, ZetaA, ZetaB, vortex_radius, gamma_seg=1.0):\n    DerP = np.zeros((3, 3))\n    DerA = np.zeros((3, 3))\n    DerB = np.zeros((3, 3))\n    eval_seg_comp_loop(DerP, DerA, DerB, ZetaP, ZetaA, ZetaB, gamma_seg,\n                       vortex_radius)\n    return DerP, DerA, DerB\n\n\ndef eval_seg_comp_loop(DerP, DerA, DerB, ZetaP, ZetaA, ZetaB, gamma_seg, vortex_radius):\n    \"\"\"\n    Derivative of induced velocity Q w.r.t. collocation and segment coordinates\n    in format:\n        [ (x,y,z) of Q, (x,y,z) of Zeta ]\n    Warning: function optimised for performance. Variables are scaled during the\n    execution.\n    \"\"\"\n\n    vortex_radius_sq = vortex_radius*vortex_radius\n    Cfact = cfact_biot * gamma_seg\n\n    RA = ZetaP - ZetaA\n    RB = ZetaP - ZetaB\n    RAB = ZetaB - ZetaA\n    Vcr = algebra.cross3(RA, RB)\n    vcr2 = np.dot(Vcr, Vcr)\n\n    # numerical radious\n    if vcr2 < (vortex_radius_sq * algebra.normsq3d(RAB)):\n        return\n\n    ### other constants\n    ra1, rb1 = algebra.norm3d(RA), algebra.norm3d(RB)\n    rainv = 1. / ra1\n    rbinv = 1. / rb1\n    Tv = RA * rainv - RB * rbinv\n    dotprod = np.dot(RAB, Tv)\n\n    ### --------------------------------------------- cross-product derivatives\n    # lower triangular part only\n    vcr2inv = 1. / vcr2\n    vcr4inv = vcr2inv * vcr2inv\n    diag_fact = Cfact * vcr2inv * dotprod\n    off_fact = -2. * Cfact * vcr4inv * dotprod\n    Dvcross = [\n        [diag_fact + off_fact * Vcr[0] ** 2],\n        [off_fact * Vcr[0] * Vcr[1], diag_fact + off_fact * Vcr[1] ** 2],\n        [off_fact * Vcr[0] * Vcr[2], off_fact * Vcr[1] * Vcr[2], diag_fact + off_fact * Vcr[2] ** 2]]\n\n    ### ------------------------------------------ difference terms derivatives\n    Vsc = Vcr * vcr2inv * Cfact\n    Ddiff = np.array([RAB * Vsc[0], RAB * Vsc[1], RAB * Vsc[2]])\n    dQ_dRAB = np.array([Tv * Vsc[0], Tv * Vsc[1], Tv * Vsc[2]])\n\n    ### ---------------------------------------------- Final assembly (crucial)\n    # ps: calling Dvcross_by_skew3d does not slow down execution.\n\n    dQ_dRA = Dvcross_by_skew3d(Dvcross, -RB) \\\n             + np.dot(Ddiff, der_runit(RA, rainv, -rainv ** 3))\n    dQ_dRB = Dvcross_by_skew3d(Dvcross, RA) \\\n             - np.dot(Ddiff, der_runit(RB, rbinv, -rbinv ** 3))\n\n    DerP += dQ_dRA + dQ_dRB  # w.r.t. P\n    DerA -= dQ_dRAB + dQ_dRA  # w.r.t. A\n    DerB += dQ_dRAB - dQ_dRB  # w.r.t. B\n\n\n# ### collocation point only\n# DerP +=Dvcross_by_skew3d(Dvcross,RA-RB)+np.dot(Ddiff,\n# \t\t  der_runit(RA,rainv,minus_rainv3)-der_runit(RB,rbinv,minus_rbinv3))\n\n\ndef eval_panel_comp(zetaP, ZetaPanel, vortex_radius, gamma_pan=1.0):\n    \"\"\"\n    Computes derivatives of induced velocity w.r.t. coordinates of target point,\n    zetaP, and panel coordinates. Returns two elements:\n        - DerP: derivative of induced velocity w.r.t. ZetaP, with:\n            DerP.shape=(3,3) : DerC[ Uind_{x,y,z}, ZetaC_{x,y,z} ]\n        - DerVertices: derivative of induced velocity wrt panel vertices, with:\n            DerVertices.shape=(4,3,3) :\n            DerVertices[ vertex number {0,1,2,3},  Uind_{x,y,z}, ZetaC_{x,y,z} ]\n    \"\"\"\n\n    DerP = np.zeros((3, 3))\n    DerVertices = np.zeros((4, 3, 3))\n\n    for aa, bb in LoopPanel:\n        eval_seg_comp_loop(DerP, DerVertices[aa, :, :], DerVertices[bb, :, :],\n                           zetaP, ZetaPanel[aa, :], ZetaPanel[bb, :], gamma_pan,\n                           vortex_radius)\n\n    return DerP, DerVertices\n\n\ndef eval_panel_fast(zetaP, ZetaPanel, vortex_radius, gamma_pan=1.0):\n    \"\"\"\n    Computes derivatives of induced velocity w.r.t. coordinates of target point,\n    zetaP, and panel coordinates. Returns two elements:\n        - DerP: derivative of induced velocity w.r.t. ZetaP, with:\n            DerP.shape=(3,3) : DerC[ Uind_{x,y,z}, ZetaC_{x,y,z} ]\n        - DerVertices: derivative of induced velocity wrt panel vertices, with:\n            DerVertices.shape=(4,3,3) :\n            DerVertices[ vertex number {0,1,2,3},  Uind_{x,y,z}, ZetaC_{x,y,z} ]\n\n    The function is based on eval_panel_comp, but minimises operationsby\n    recycling variables.\n    \"\"\"\n\n    vortex_radius_sq = vortex_radius*vortex_radius\n    DerP = np.zeros((3, 3))\n    DerVertices = np.zeros((4, 3, 3))\n\n    ### ---------------------------------------------- Compute common variables\n    # these are constants or variables depending only on vertices and P coords\n    Cfact = cfact_biot * gamma_pan\n\n    # distance vertex ii-th from P\n    R_list = zetaP - ZetaPanel\n    r1_list = [algebra.norm3d(R_list[ii]) for ii in svec]\n    r1inv_list = [1. / r1_list[ii] for ii in svec]\n    Runit_list = [R_list[ii] * r1inv_list[ii] for ii in svec]\n    Der_runit_list = [\n        der_runit(R_list[ii], r1inv_list[ii], -r1inv_list[ii] ** 3) for ii in svec]\n\n    ### ------------------------------------------------- Loop through segments\n    for aa, bb in LoopPanel:\n\n        RAB = ZetaPanel[bb, :] - ZetaPanel[aa, :]  # segment vector\n        Vcr = algebra.cross3(R_list[aa], R_list[bb])\n        vcr2 = np.dot(Vcr, Vcr)\n\n        if vcr2 < (vortex_radius_sq * algebra.normsq3d(RAB)):\n            continue\n\n        Tv = Runit_list[aa] - Runit_list[bb]\n        dotprod = np.dot(RAB, Tv)\n\n        ### ----------------------------------------- cross-product derivatives\n        # lower triangular part only\n        vcr2inv = 1. / vcr2\n        vcr4inv = vcr2inv * vcr2inv\n        diag_fact = Cfact * vcr2inv * dotprod\n        off_fact = -2. * Cfact * vcr4inv * dotprod\n        Dvcross = [\n            [diag_fact + off_fact * Vcr[0] ** 2],\n            [off_fact * Vcr[0] * Vcr[1], diag_fact + off_fact * Vcr[1] ** 2],\n            [off_fact * Vcr[0] * Vcr[2], off_fact * Vcr[1] * Vcr[2], diag_fact + off_fact * Vcr[2] ** 2]]\n\n        ### ---------------------------------------- difference term derivative\n        Vsc = Vcr * vcr2inv * Cfact\n        Ddiff = np.array([RAB * Vsc[0], RAB * Vsc[1], RAB * Vsc[2]])\n\n        ### ---------------------------------------------------- RAB derivative\n        dQ_dRAB = np.array([Tv * Vsc[0], Tv * Vsc[1], Tv * Vsc[2]])\n\n        ### ------------------------------------------ Final assembly (crucial)\n\n        dQ_dRA = Dvcross_by_skew3d(Dvcross, -R_list[bb]) \\\n                 + np.dot(Ddiff, Der_runit_list[aa])\n        dQ_dRB = Dvcross_by_skew3d(Dvcross, R_list[aa]) \\\n                 - np.dot(Ddiff, Der_runit_list[bb])\n\n        DerP += dQ_dRA + dQ_dRB  # w.r.t. P\n        DerVertices[aa, :, :] -= dQ_dRAB + dQ_dRA  # w.r.t. A\n        DerVertices[bb, :, :] += dQ_dRAB - dQ_dRB  # w.r.t. B\n\n    # ### collocation point only\n    # DerP +=Dvcross_by_skew3d(Dvcross,RA-RB)+np.dot(Ddiff,\n    # \t\t  der_runit(RA,rainv,minus_rainv3)-der_runit(RB,rbinv,minus_rbinv3))\n\n    return DerP, DerVertices\n\n\ndef eval_panel_fast_coll(zetaP, ZetaPanel, vortex_radius, gamma_pan=1.0):\n    \"\"\"\n    Computes derivatives of induced velocity w.r.t. coordinates of target point,\n    zetaP, coordinates. Returns two elements:\n        - DerP: derivative of induced velocity w.r.t. ZetaP, with:\n            DerP.shape=(3,3) : DerC[ Uind_{x,y,z}, ZetaC_{x,y,z} ]\n\n    The function is based on eval_panel_fast, but does not perform operations\n    required to compute the derivatives w.r.t. the panel coordinates.\n    \"\"\"\n\n    vortex_radius_sq = vortex_radius*vortex_radius\n    DerP = np.zeros((3, 3))\n\n    ### ---------------------------------------------- Compute common variables\n    # these are constants or variables depending only on vertices and P coords\n    Cfact = cfact_biot * gamma_pan\n\n    # distance vertex ii-th from P\n    R_list = zetaP - ZetaPanel\n    r1_list = [algebra.norm3d(R_list[ii]) for ii in svec]\n    r1inv_list = [1. / r1_list[ii] for ii in svec]\n    Runit_list = [R_list[ii] * r1inv_list[ii] for ii in svec]\n    Der_runit_list = [\n        der_runit(R_list[ii], r1inv_list[ii], -r1inv_list[ii] ** 3) for ii in svec]\n\n    ### ------------------------------------------------- Loop through segments\n    for aa, bb in LoopPanel:\n\n        RAB = ZetaPanel[bb, :] - ZetaPanel[aa, :]  # segment vector\n        Vcr = algebra.cross3(R_list[aa], R_list[bb])\n        vcr2 = np.dot(Vcr, Vcr)\n\n        if vcr2 < (vortex_radius_sq * algebra.normsq3d(RAB)):\n            continue\n\n        Tv = Runit_list[aa] - Runit_list[bb]\n        dotprod = np.dot(RAB, Tv)\n\n        ### ----------------------------------------- cross-product derivatives\n        # lower triangular part only\n        vcr2inv = 1. / vcr2\n        vcr4inv = vcr2inv * vcr2inv\n        diag_fact = Cfact * vcr2inv * dotprod\n        off_fact = -2. * Cfact * vcr4inv * dotprod\n        Dvcross = [\n            [diag_fact + off_fact * Vcr[0] ** 2],\n            [off_fact * Vcr[0] * Vcr[1], diag_fact + off_fact * Vcr[1] ** 2],\n            [off_fact * Vcr[0] * Vcr[2], off_fact * Vcr[1] * Vcr[2], diag_fact + off_fact * Vcr[2] ** 2]]\n\n        ### ---------------------------------------- difference term derivative\n        Vsc = Vcr * vcr2inv * Cfact\n        Ddiff = np.array([RAB * Vsc[0], RAB * Vsc[1], RAB * Vsc[2]])\n\n        ### ------------------------------------------ Final assembly (crucial)\n\n        # dQ_dRA=Dvcross_by_skew3d(Dvcross,-R_list[bb])\\\n        # \t\t\t\t\t\t\t\t\t +np.dot(Ddiff, Der_runit_list[aa] )\n        # dQ_dRB=Dvcross_by_skew3d(Dvcross, R_list[aa])\\\n        # \t\t\t\t\t\t\t\t\t -np.dot(Ddiff, Der_runit_list[bb] )\n\n        DerP += Dvcross_by_skew3d(Dvcross, RAB) + \\\n                +np.dot(Ddiff, Der_runit_list[aa] - Der_runit_list[bb])\n\n    return DerP\n\n\nif __name__ == '__main__':\n\n    import cProfile\n\n    ### verify consistency amongst models\n    gamma = 4.\n    zetaP = np.array([3.0, 5.5, 2.0])\n    zeta0 = np.array([1.0, 3.0, 0.9])\n    zeta1 = np.array([5.0, 3.1, 1.9])\n    zeta2 = np.array([4.8, 8.1, 2.5])\n    zeta3 = np.array([0.9, 7.9, 1.7])\n    ZetaPanel = np.array([zeta0, zeta1, zeta2, zeta3])\n    zetap = 0.3 * zeta1 + 0.7 * zeta2\n\n    # ZetaPanel=np.array([[ 1.221, -0.064, -0.085],\n    #        \t\t\t\t[ 1.826, -0.064, -0.141],\n    #        \t\t\t\t[ 1.933,  1.456, -0.142],\n    #        \t\t\t\t[ 1.327,  1.456, -0.087]])\n    # zetaP=np.array([-0.243,  0.776,  0.037])\n\n    ### verify model consistency\n    DPcpp, DVcpp = eval_panel_cpp(zetaP, ZetaPanel, 1e-6, gamma_pan=gamma) # vortex_radius\n    DPexp, DVexp = eval_panel_exp(zetaP, ZetaPanel, gamma_pan=gamma)\n    DPcomp, DVcomp = eval_panel_comp(zetaP, ZetaPanel, gamma_pan=gamma)\n    DPfast, DVfast = eval_panel_fast(zetaP, ZetaPanel,\n                                     vortex_radius, gamma_pan=gamma)\n    DPfast_coll = eval_panel_fast_coll(zetaP, ZetaPanel,\n                                       vortex_radius, gamma_pan=gamma)\n\n    ermax = max(np.max(np.abs(DPcpp - DPexp)), np.max(np.abs(DVcpp - DVexp)))\n    assert ermax < 1e-15, 'eval_panel_cpp not matching with eval_panel_exp'\n    ermax = max(np.max(np.abs(DPcomp - DPexp)), np.max(np.abs(DVcomp - DVexp)))\n    assert ermax < 1e-15, 'eval_panel_comp not matching with eval_panel_exp'\n    ermax = max(np.max(np.abs(DPfast - DPexp)), np.max(np.abs(DVfast - DVexp)))\n    assert ermax < 1e-15, 'eval_panel_fast not matching with eval_panel_exp'\n    ermax = np.max(np.abs(DPfast_coll - DPexp))\n    assert ermax < 1e-15, 'eval_panel_fast_coll not matching with eval_panel_exp'\n\n\n    ### profiling\n\n    def run_eval_panel_cpp():\n        for ii in range(10000):\n            eval_panel_cpp(zetaP, ZetaPanel, 1e-6, gamma_pan=3.) # vortex_radius\n\n\n    def run_eval_panel_fast(vortex_radius=vortex_radius_def):\n        for ii in range(10000):\n            eval_panel_fast(zetaP, ZetaPanel,\n                                   vortex_radius, gamma_pan=3.)\n\n\n    def run_eval_panel_fast_coll(vortex_radius=vortex_radius_def):\n        for ii in range(10000):\n            eval_panel_fast_coll(zetaP, ZetaPanel,\n                                 vortex_radius, gamma_pan=3.)\n\n\n    def run_eval_panel_comp():\n        for ii in range(10000):\n            eval_panel_comp(zetaP, ZetaPanel, gamma_pan=3.)\n\n\n    def run_eval_panel_exp():\n        for ii in range(10000):\n            eval_panel_exp(zetaP, ZetaPanel, gamma_pan=3.)\n\n\n    print('------------------------------------------ profiling eval_panel_cpp')\n    cProfile.runctx('run_eval_panel_cpp()', globals(), locals())\n\n    print('----------------------------------------- profiling eval_panel_fast')\n    cProfile.runctx('run_eval_panel_fast()', globals(), locals())\n\n    print('------------------------------------ profiling eval_panel_fast_coll')\n    cProfile.runctx('run_eval_panel_fast_coll()', globals(), locals())\n\n    print('----------------------------------------- profiling eval_panel_comp')\n    cProfile.runctx('run_eval_panel_comp()', globals(), locals())\n\n    print('------------------------------------------ profiling eval_panel_exp')\n    cProfile.runctx('run_eval_panel_exp()', globals(), locals())\n"
  },
  {
    "path": "sharpy/linear/src/lib_ucdncdzeta.py",
    "content": "r\"\"\"Induced Velocity Derivatives with respect to Panel Normal\n\nCalculate derivative of\n\n    ..  math:: \\boldsymbol{u}_c\\frac{\\partial\\boldsymbol{n}_c}{\\partial\\boldsymbol{zeta}}\n\nwith respect to local panel coordinates.\n\"\"\"\n\nimport numpy as np\nimport sharpy.utils.algebra as algebra\n\ndR_dZeta = np.array(\n    [[[[-1, 0, 0], [0, 0, 0]], [[0, -1, 0], [0, 0, 0]], [[0, 0, -1], [0, 0, 0]]],\n     [[[0, 0, 0], [-1, 0, 0]], [[0, 0, 0], [0, -1, 0]], [[0, 0, 0], [0, 0, -1]]],\n     [[[1, 0, 0], [0, 0, 0]], [[0, 1, 0], [0, 0, 0]], [[0, 0, 1], [0, 0, 0]]],\n     [[[0, 0, 0], [1, 0, 0]], [[0, 0, 0], [0, 1, 0]], [[0, 0, 0], [0, 0, 1]]]])\n\n\ndef eval(Zeta00, Zeta01, Zeta02, Zeta03, Uc):\n    \"\"\"\n    Returns a 4 x 3 array, containing the derivative of Wnc*Uc w.r.t the panel\n    vertices coordinates.\n    \"\"\"\n\n    R02 = Zeta02 - Zeta00\n    R13 = Zeta03 - Zeta01\n\n    crR02R13 = algebra.cross3(R02, R13)\n    norm_crR02R13 = np.linalg.norm(crR02R13)\n    cub_crR02R13 = norm_crR02R13 ** 3\n\n    Acr = algebra.cross3(crR02R13, R13)\n    Bcr = algebra.cross3(crR02R13, R02)\n    Cdot = np.dot(crR02R13, Uc)\n\n    uc_x, uc_y, uc_z = Uc\n    r02_x, r02_y, r02_z = R02\n    r13_x, r13_y, r13_z = R13\n    crR13Uc_x, crR13Uc_y, crR13Uc_z = algebra.cross3(R13, Uc)\n    crR02Uc_x, crR02Uc_y, crR02Uc_z = algebra.cross3(R02, Uc)\n    crR02R13_x, crR02R13_y, crR02R13_z = crR02R13\n    Acr_x, Acr_y, Acr_z = Acr\n    Bcr_x, Bcr_y, Bcr_z = Bcr\n\n    # dUnorm_dR.shape=(2,3)\n    dUnorm_dR = np.array(\n        [[Acr_x * Cdot / cub_crR02R13 + crR13Uc_x / norm_crR02R13,\n          Acr_y * Cdot / cub_crR02R13 + crR13Uc_y / norm_crR02R13,\n          Acr_z * Cdot / cub_crR02R13 + crR13Uc_z / norm_crR02R13],\n         [-Bcr_x * Cdot / cub_crR02R13 - crR02Uc_x / norm_crR02R13,\n          -Bcr_y * Cdot / cub_crR02R13 - crR02Uc_y / norm_crR02R13,\n          -Bcr_z * Cdot / cub_crR02R13 - crR02Uc_z / norm_crR02R13]])\n\n    # Allocate\n    dUnorm_dZeta = np.zeros((4, 3))\n    for vv in range(4):  # loop through panel vertices\n        for cc_zeta in range(3):  # loop panel vertices component\n            for rr in range(2):  # loop segments R02, R13\n                for cc_rvec in range(3):  # loop segment component\n                    dUnorm_dZeta[vv, cc_zeta] += \\\n                        dUnorm_dR[rr, cc_rvec] * dR_dZeta[vv, cc_zeta, rr, cc_rvec]\n\n    return dUnorm_dZeta\n\n\nif __name__ == '__main__':\n\n    # calculate normal\n    def get_panel_normal(zetav_here):\n        \"\"\"From Surface.AeroGridSurface\"\"\"\n        r02 = zetav_here[2, :] - zetav_here[0, :]\n        r13 = zetav_here[3, :] - zetav_here[1, :]\n        nvec = np.cross(r02, r13)\n        nvec = nvec / np.linalg.norm(nvec)\n        return nvec\n\n\n    # define panel vertices\n    zeta00 = np.array([1.0, 0.2, 1.0])\n    zeta01 = np.array([3.9, 0.1, 0.8])\n    zeta02 = np.array([4.0, 3.5, 0.9])\n    zeta03 = np.array([1.2, 3.2, 1.1])\n    zeta_panel = np.array([zeta00, zeta01, zeta02, zeta03])\n\n    # reference normal\n    nvec0 = get_panel_normal(zeta_panel)\n\n    # reference normal velocity\n    ucoll = np.array([2, 6, 3])\n    unorm0 = np.dot(nvec0, ucoll)\n\n    # analytical derivative\n    dUnorm_dZeta = eval(zeta00, zeta01, zeta02, zeta03, ucoll)\n\n    # numerical derivative\n    Dnum = np.zeros((4, 3))\n    step = 1e-6\n    for ii in range(4):\n        for jj in range(3):\n            delta = np.zeros((4, 3))\n            delta[ii, jj] = step\n            nvec_pert = get_panel_normal(zeta_panel + delta)\n            unorm_pert = np.dot(nvec_pert, ucoll)\n            Dnum[ii, jj] = (unorm_pert - unorm0) / step\n\n    assert np.max(np.abs(dUnorm_dZeta - Dnum)) < step, 'Derivative not accurate!'\n"
  },
  {
    "path": "sharpy/linear/src/libfit.py",
    "content": "\"\"\"Fitting Tools Library\n\n@author: Salvatore Maraniello\n\n@date: 15 Jan 2018\n\"\"\"\n\nimport warnings\nimport numpy as np\nfrom scipy.signal import tf2ss\nimport scipy.linalg as scalg\nimport scipy.optimize as scopt\nimport multiprocessing as mpr\nimport itertools\n\n\ndef fpoly(kv, B0, B1, B2, dyv, ddyv):\n    return B0 + B1 * dyv + B2 * ddyv\n\n\ndef fpade(kv, Cv, B0, B1a, B1b, B2, dyv, ddyv):\n    # evaluate transfer function from unsteady function Cv\n    return B0 * Cv + (B1a * Cv + B1b) * dyv + B2 * ddyv\n\n\ndef getC(kv, Yv, B0, B1a, B1b, B2, dyv, ddyv):\n    # evaluate unsteady function C required to perfectly match Yv\n    Den = B0 + B1a * dyv\n    # kkvec=np.abs(Den)<1e-8\n    C = (Yv - B1b * dyv - B2 * ddyv) / Den\n    # C[kkvec]=1.0\n    # if np.sum(kkvec)>0: embed()\n    return C\n\n\ndef rfa(cnum, cden, kv, ds=None):\n    \"\"\"\n    Evaluates over the frequency range kv.the rational function approximation:\n    [cnum[-1] + cnum[-2] z + ... + cnum[0] z**Nnum ]/...\n                                [cden[-1] + cden[-2] z + ... + cden[0] z**Nden]\n    where the numerator and denominator polynomial orders, Nnum and Nden, are\n    the length of the cnum and cden arrays and:\n        - z=exp(1.j*kv*ds), with ds sampling time if ds is given (discrete-time\n        system)\n        - z=1.*kv, if ds is None (continuous time system)\n    \"\"\"\n\n    if ds == None:\n        # continuous-time LTI system\n        zv = 1.j * kv\n    else:\n        # discrete-time LTI system\n        zv = np.exp(1.j * kv * ds)\n\n    return np.polyval(cnum, zv) / np.polyval(cden, zv)\n\n\ndef rfader(cnum, cden, kv, m=1, ds=None):\n    \"\"\"\n    Evaluates over the frequency range kv.the derivative of order m of the\n    rational function approximation:\n    [cnum[-1] + cnum[-2] z + ... + cnum[0] z**Nnum ]/...\n                                [cden[-1] + cden[-2] z + ... + cden[0] z**Nden]\n    where the numerator and denominator polynomial orders, Nnum and Nden, are\n    the length of the cnum and cden arrays and:\n        - z=exp(1.j*kv*ds), with ds sampling time if ds is given (discrete-time\n        system)\n        - z=1.*kv, if ds is None (continuous time system)\n    \"\"\"\n\n    if ds == None:\n        # continuous-time LTI system\n        zv = 1.j * kv\n        dzv = 1.j\n        raise NameError('Never tested for continuous systems!')\n    else:\n        # discrete-time LTI system\n        zv = np.exp(1.j * kv * ds)\n        dzv = 1.j * ds * zv\n\n    Nv = np.polyval(cnum, zv)\n    Dv = np.polyval(cden, zv)\n    dNv = np.polyval(np.polyder(cnum), zv)\n    dDv = np.polyval(np.polyder(cden), zv)\n\n    return dzv * (dNv * Dv - Nv * dDv) / Dv ** 2\n\n\ndef fitfrd(kv, yv, N, dt=None, mag=0, eng=None):\n    \"\"\"\n    Wrapper for fitfrd (mag=0) and fitfrdmag (mag=1) functions in continuous and\n    discrete time (if ds in input).\n    Input:\n       kv,yv: frequency array and frequency response\n       N: order for rational function approximation\n       mag=1,0: Flag for determining method to use\n       dt (optional): sampling time for DLTI systems\n    \"\"\"\n\n    raise NameError('Please use fitfrd function in matwrapper module!')\n\n    return None\n\n\ndef get_rfa_res(xv, kv, Yv, Nnum, Nden, ds=None):\n    \"\"\"\n    Returns magnitude of the residual Yfit-Yv of a RFA approximation at each\n    point kv. The coefficients of the approximations are:\n    - cnum=xv[:Nnum]\n    - cdem=xv[Nnum:]\n    where cnum and cden are as per the 'rfa' function.\n    \"\"\"\n\n    assert Nnum + Nden == len(xv), 'Nnum+Nden must be equal to len(xv)!'\n    cnum = xv[:Nnum]\n    cden = xv[Nnum:]\n\n    Yfit = rfa(cnum, cden, kv, ds)\n\n    return np.abs(Yfit - Yv)\n\n\ndef get_rfa_res_norm(xv, kv, Yv, Nnum, Nden, ds=None, method='mix'):\n    \"\"\"\n    Define residual scalar norm of Pade approximation of coefficients\n    cnum=xv[:Nnum] and cden[Nnum:] (see get_rfa_res and rfa function) and\n    time-step ds (if discrete time).\n    \"\"\"\n\n    ErvAbs = get_rfa_res(xv, kv, Yv, Nnum, Nden, ds)\n\n    if method == 'H2':\n        res = np.sum(ErvAbs ** 2)\n    elif method == 'Hinf':\n        res = np.max(ErvAbs)\n    elif method == 'mix':\n        res = np.sum(ErvAbs ** 2) + np.max(ErvAbs)\n\n    return res\n\n\ndef rfa_fit_dev(kv, Yv, Nnum, Nden, TolAbs, ds=None, Stability=True,\n                NtrialMax=10, Cfbound=1e2, OutFull=False, Print=False):\n    \"\"\"\n    Find best fitting RFA approximation from frequency response Yv over the\n    frequency range kv for both continuous (ds=None) and discrete (ds>0) LTI\n    systems.\n\n    The RFA approximation is found through a 2-stage strategy:\n        a. an evolutionary algoryhtm is run to determine the optimal fitting\n        coefficients\n        b. the search is refined through a least squares algorithm.\n    and is stopped as soon as:\n        1. the maximum absolute error in frequency response of the RFA falls\n        below ``TolAbs``\n        2. the maximum number of iterations is reached.\n\n\n    Input:\n    - kv: frequency range for approximation\n    - Yv: frequency response vector over kv\n    - TolAbs: maximum admissible absolute difference in frequency response\n    between RFA and original system.\n    - Nnum,Ndem: number of coefficients for Pade approximation.\n    - ds: sampling time for DLTI systems\n    - NtrialMax: maximum number of repetition of global and least square optimisations\n    - Cfbouds: maximum absolute values of coeffieicnts (only for evolutionary\n    algorithm)\n    - OutFull: if False, only outputs optimal coefficients of RFA. Otherwise,\n     outputs cost and RFA coefficients of each trial.\n\n    Output:\n    - cnopt: optimal coefficients (numerator)\n    - cdopt: optimal coefficients (denominator)\n\n    Important:\n    - this function has the same objective as fitfrd in matwrapper module. While\n    generally slower, the global optimisation approach allows to verify the\n    results from fitfrd.\n    \"\"\"\n\n    def pen_max_eig(cdvec):\n        \"\"\"\n        Computes maximum eigenvalues from denominator coefficients of RFA and\n        evaluates a log barrier that ensures\n        \"\"\"\n        eigs = np.roots(cdvec)\n        eigmax = np.max(np.abs(eigs))\n\n        eiglim = 0.999\n        pen = 0.\n        Fact = 1e3 * TolAbs / np.log(2)\n        if eigmax > eiglim:\n            pen = Fact * np.log((eigmax + 1. - 2. * eiglim) / (1. - eiglim))\n        else:\n            pen = 0.\n        return pen\n\n    if Stability:\n        def fcost_dev(xv, kv, Yv, Nnum, Nden, ds, method):\n            \"\"\"\n            xv is a vector such that the coeff:\n            cnum=xv[:Nnum]\n            cden=xv[Nnum:]\n            \"\"\"\n            xvpass = np.concatenate((xv, np.array([1, ])))\n            error_fit = get_rfa_res_norm(xvpass, kv, Yv, Nnum, Nden, ds, method)\n            pen_stab = pen_max_eig(xvpass[Nnum:])\n            return error_fit + pen_stab\n\n        def fcost_lsq(xv, kv, Yv, Nnum, Nden, ds):\n\n            xvpass = np.concatenate((xv, np.array([1, ])))\n            res_fit = get_rfa_res(xvpass, kv, Yv, Nnum, Nden, ds)\n            pen_stab = pen_max_eig(xvpass[Nnum:])\n            return res_fit + pen_stab\n\n    else:\n        def fcost_dev(xv, kv, Yv, Nnum, Nden, ds, method):\n            \"\"\"\n            xv is a vector such that the coeff:\n            cnum=xv[:Nnum]\n            cden=xv[Nnum:]\n            \"\"\"\n            xvpass = np.concatenate((xv, np.array([1, ])))\n            return get_rfa_res_norm(xvpass, kv, Yv, Nnum, Nden, ds, method)\n\n        def fcost_lsq(xv, kv, Yv, Nnum, Nden, ds):\n            xvpass = np.concatenate((xv, np.array([1, ])))\n            return get_rfa_res(xvpass, kv, Yv, Nnum, Nden, ds)\n\n    Nx = Nnum + Nden - 1\n\n    # List of optimal solutions found by the evolutionary and least squares\n    # algorithms\n    XvOptDev, XvOptLsq = [], []\n    Cdev, Clsq = [], []\n\n    tt = 0\n    cost_best = 1e32\n\n    while cost_best > TolAbs and tt < NtrialMax:\n        tt += 1\n\n        ###  Evolutionary algorithm\n        res = scopt.differential_evolution(  # popsize=100,\n            strategy='best1bin',\n            func=fcost_dev,\n            args=(kv, Yv, Nnum, Nden, ds, 'Hinf'),\n            bounds=Nx * ((-Cfbound, Cfbound),))\n        xvdev = res.x\n        cost_dev = fcost_dev(xvdev, kv, Yv, Nnum, Nden, ds, 'Hinf')\n\n        # is this the best solution?\n        if cost_dev < cost_best:\n            cost_best = cost_dev\n            xvopt = xvdev\n\n        # store this solution\n        if OutFull:\n            XvOptDev.append(xvdev)\n            Cdev.append(cost_dev)\n\n        ### Least squares fitting - unbounded\n        #  method only local, but do not move to the end of global search: best\n        # results can be found even when starting from a \"worse\" solution\n        xvlsq = scopt.leastsq(fcost_lsq, x0=xvdev, args=(kv, Yv, Nnum, Nden, ds))[0]\n        cost_lsq = fcost_dev(xvlsq, kv, Yv, Nnum, Nden, ds, 'Hinf')\n\n        # is this the best solution?\n        if cost_lsq < cost_best:\n            cost_best = cost_lsq\n            xvopt = xvlsq\n\n        # store this solution\n        if OutFull:\n            XvOptLsq.append(xvlsq)\n            Clsq.append(cost_lsq)\n\n        ### Print and move on\n        if Print:\n            print('Trial %.2d: cost dev: %.3e, cost lsq: %.3e' \\\n                  % (tt, cost_dev, cost_lsq))\n\n    if cost_best > TolAbs:\n        warnings.warn(\n            'RFA error (%.2e) greater than specified tolerance (%.2e)!' \\\n            % (cost_best, TolAbs))\n\n    ### add 1 to denominator\n    cnopt = xvopt[:Nnum]\n    cdopt = np.hstack([xvopt[Nnum:], 1.])\n    # if np.abs(cdopt[-1])>1e-2:\n    # \tcdscale=cdopt[-1]\n    # else:\n    # \tcdscale=1.0\n    # cnopt=cnopt/cdscale\n    # cdopt=cdopt/cdscale\n\n    # determine outputs\n    Outputs = (cnopt, cdopt)\n    if OutFull:\n        for tt in range(Ntrial):\n            if np.abs(XvOptDev[tt][-1]) > 1e-2:\n                XvOptDev[tt] = XvOptDev[tt] / XvOptDev[tt][-1]\n            if np.abs(XvOptLsq[tt][-1]) > 1e-2:\n                XvOptLsq[tt] = XvOptLsq[tt] / XvOptLsq[tt][-1]\n        Outputs = Outputs + (XvOptDev, XvOptLsq, Cdev, Clsq)\n\n    return Outputs\n\n\ndef poly_fit(kv, Yv, dyv, ddyv, method='leastsq', Bup=None):\n    \"\"\"\n    Find best II order fitting polynomial from frequency response Yv over the\n    frequency range kv for both continuous (ds=None) and discrete (ds>0) LTI\n    systems.\n\n    Input:\n    - kv: frequency points\n    - Yv: frequency response\n    - dyv,ddyv: frequency responses of I and II order derivatives\n    - method='leastsq','dev': algorithm for minimisation\n    - Bup (only 'dev' method): bounds for bv coefficients as per\n    scipy.optimize.differential_evolution. This is a length 3 array.\n\n    Important:\n    - this function attributes equal weight to each data-point!\n    \"\"\"\n\n    if method == 'leastsq':\n        # pointwise residual\n        def funRes(bv, kv, Yv, dyv, ddyv):\n            B0, B1, B2 = bv\n            rv = fpoly(kv, B0, B1, B2, dyv, ddyv) - Yv\n            return np.concatenate((rv.real, rv.imag))\n\n        # solve\n        bvopt, cost = scopt.leastsq(funRes, x0=[0., 0., 0.], args=(kv, Yv, dyv, ddyv))\n\n\n    elif method == 'dev':\n        # use genetic algorithm with objective a sum of H2 and Hinf norms of\n        # residual\n        def funRes(bv, kv, Yv, dyv, ddyv):\n\n            B0, B1, B2 = bv\n            rv = fpoly(kv, B0, B1, B2, dyv, ddyv) - Yv\n\n            Nk = len(kv)\n            rvsq = rv * rv.conj()\n            # H2norm=np.sqrt(np.trapz(rvsq/(Nk-1.)))\n            # return H2norm+np.linalg.norm(rv,np.inf)\n            return np.sum(rvsq)\n\n        # prepare bounds\n        if Bup is None:\n            Bounds = 3 * ((-Bup, Bup),)\n        else:\n            assert len(Bup) == 3, 'Bup must be a length 3 list/array'\n            Bounds = ((-Bup[0], Bup[0]), (-Bup[1], Bup[1]), (-Bup[2], Bup[2]),)\n\n        res = scopt.differential_evolution(\n            func=funRes, args=(kv, Yv, dyv, ddyv), strategy='best1bin', bounds=Bounds)\n        bvopt = res.x\n        cost = funRes(bvopt, kv, Yv, dyv, ddyv)\n\n    return bvopt, cost\n\n\ndef rfa_mimo(Yfull, kv, ds, tolAbs, Nnum, Nden, Dmatrix=None, NtrialMax=6, Ncpu=4, method='independent'):\n    \"\"\"\n    Given the frequency response of a MIMO DLTI system, this function returns\n    the A,B,C,D matrices associated to the rational function approximation of\n    the original system.\n\n    Input:\n    - Yfull: frequency response (as per libss.freqresp) of full size system over\n    the frequencies kv.\n    - kv: array of frequencies over which the RFA approximation is evaluated.\n    - tolAbs: absolute tolerance for the rfa fitting\n    - Nnum: number of numerator coefficients for RFA\n    - Nden: number of denominator coefficients for RFA\n    - NtrialMax: maximum number of attempts\n    - method=['intependent']. Method used to produce the system:\n        - intependent: each input-output combination is treated separately. The\n        resulting system is a collection of independent SISO DLTIs\n\n    \"\"\"\n\n    Nout, Nin, Nk = Yfull.shape\n    assert Nk == len(kv), 'Frequency response Yfull not compatible with frequency range kv'\n\n    iivec = range(Nin)\n    oovec = range(Nout)\n    plist = list(itertools.product(oovec, iivec))\n\n    args_const = (Nnum, Nden, tolAbs, ds, True, NtrialMax, 1e2, False, False)\n\n    with mpr.Pool(Ncpu) as pool:\n\n        if Dmatrix is None:\n            P = [pool.apply_async(rfa_fit_dev,\n                                  args=(kv, Yfull[oo, ii, :],) + args_const) for oo, ii in plist]\n        else:\n            P = [pool.apply_async(rfa_fit_dev,\n                                  args=(kv, Yfull[oo, ii, :] - Dmatrix[oo, ii],) + args_const) for oo, ii in plist]\n        R = [pp.get() for pp in P]\n\n    Asub = []\n    Bsub = []\n    Csub = []\n    Dsub = []\n    for oo in range(Nout):\n        Ainner = []\n        Binner = []\n        Cinner = []\n        Dinner = []\n        for ii in range(Nin):\n            # get coeffs\n            pp = Nin * oo + ii\n            cnopt, cdopt = R[pp]\n            # assert plist[pp]==(oo,ii), 'Something wrong in loop'\n\n            A, B, C, D = tf2ss(cnopt, cdopt)\n            Ainner.append(A)\n            Binner.append(B)\n            Cinner.append(C)\n            Dinner.append(D)\n\n        # build s-s for each output\n        Asub.append(scalg.block_diag(*Ainner))\n        Bsub.append(scalg.block_diag(*Binner))\n        Csub.append(np.block(Cinner))\n        Dsub.append(np.block(Dinner))\n\n    Arfa = scalg.block_diag(*Asub)\n    Brfa = np.vstack(Bsub)\n    Crfa = scalg.block_diag(*Csub)\n\n    if Dmatrix is not None:\n        Drfa = np.vstack(Dsub) + Dmatrix\n    else:\n        Drfa = np.vstack(Dsub)\n\n    return Arfa, Brfa, Crfa, Drfa\n\n\n# if __name__ == '__main__':\n#     import libss\n#     import matplotlib.pyplot as plt\n#\n#     ### common params\n#     ds = 2. / 40.\n#     fs = 1. / ds\n#     fn = fs / 2.\n#     kn = 2. * np.pi * fn\n#     kv = np.linspace(0, kn, 301)\n#\n#     # build a state-space\n#     cfnum = np.array([4, 1.25, 1.5])\n#     cfden = np.array([2, .5, 1])\n#     A, B, C, D = tf2ss(cfnum, cfden)\n#     SS = libss.StateSpace(A, B, C, D, dt=ds)\n#     Cvref = libss.freqresp(SS, kv)\n#     Cvref = Cvref[0, 0, :]\n#\n#     # Find fitting\n#     Nnum, Nden = 3, 3\n#     cnopt, cdopt = rfa_fit_dev(kv, Cvref, Nnum, Nden, ds, True, 3, Cfbound=1e3,\n#                                OutFull=False, Print=True)\n#\n#     print('Error coefficients (DLTI):')\n#     print('Numerator:   ' + 3 * '%.2e  ' % tuple(np.abs(cnopt - cfnum)))\n#     print('Denominator: ' + 3 * '%.2e  ' % tuple(np.abs(cnopt - cfnum)))\n#\n#     # Visualise\n#     Cfit = rfa(cnopt, cdopt, kv, ds)\n#\n#     fig = plt.figure('Transfer function', (10, 4))\n#     ax1 = fig.add_subplot(111)\n#     ax1.plot(kv, Cvref.real, color='r', lw=2, ls='-', label=r'ref - real')\n#     ax1.plot(kv, Cvref.imag, color='r', lw=2, ls='--', label=r'ref - imag')\n#     ax1.plot(kv, Cfit.real, color='k', lw=1, ls='-', label=r'RFA - real')\n#     ax1.plot(kv, Cfit.imag, color='k', lw=1, ls='--', label=r'RFA - imag')\n#     ax1.legend(ncol=1, frameon=True, columnspacing=.5, labelspacing=.4)\n#     ax1.grid(color='0.85', linestyle='-')\n#     plt.show()\n"
  },
  {
    "path": "sharpy/linear/src/libsparse.py",
    "content": "'''\nCollect tools to manipulate sparse and/or mixed dense/sparse matrices.\n\nauthor: S. Maraniello\ndate: Dec 2018\n\nComment: manipulating large linear system may require using both dense and sparse\nmatrices. While numpy/scipy automatically handle most operations between mixed\ndense/sparse arrays, some (e.g. dot product) require more attention. This\nlibrary collects methods to handle these situations.\n\nClasses:\nscipy.sparse matrices are wrapped so as to ensure compatibility with numpy arrays\nupon conversion to dense.\n- csc_matrix: this is a wrapper of scipy.csc_matrix.\n- SupportedTypes: types supported for operations\n- WarningTypes: due to some bugs in scipy (v.1.1.0), sum (+) operations between\nnp.ndarray and scipy.sparse matrices can result in numpy.matrixlib.defmatrix.matrix\ntypes. This list contains such undesired types that can result from dense/sparse\noperations and raises a warning if required.\n(b) convert these types into numpy.ndarrays.\n\nMethods:\n- dot: handles matrix dot products across different types.\n- solve: solves linear systems Ax=b with A and b dense, sparse or mixed.\n- dense: convert matrix to numpy array\n\nWarning:\n- only sparse types into SupportedTypes are supported!\n\nTo Do:\n- move these methods into an algebra module?\n'''\n\nimport warnings\nimport numpy as np\nimport scipy.sparse as sparse\nfrom scipy.sparse._sputils import upcast_char\nimport scipy.sparse.linalg as spalg\n\n# --------------------------------------------------------------------- Classes\n\nclass csc_matrix(sparse.csc_matrix):\n\t'''\n\tWrapper of scipy.csc_matrix that ensures best compatibility with numpy.ndarray.\n\tThe following methods have been overwritten to ensure that numpy.ndarray are\n\treturned instead of numpy.matrixlib.defmatrix.matrix.\n\t\t- todense\n\t\t- _add_dense\n\n\tWarning: this format is memory inefficient to allocate new sparse matrices.\n\tConsider using:\n\t- scipy.sparse.lil_matrix, which supports slicing, or\n\t- scipy.sparse.coo_matrix, though slicing is not supported :(\n\n\t'''\n\n\tdef __init__(self,arg1, shape=None, dtype=None, copy=False):\n\t\tsuper().__init__(arg1, shape=shape, dtype=dtype, copy=copy)\n\n\tdef todense(self):\n\t\t''' As per scipy.spmatrix.todense but returns a numpy.ndarray. '''\n\t\treturn super().toarray()\n\n\tdef _add_dense(self, other):\n\t\tif other.shape != self.shape:\n\t\t    raise ValueError('Incompatible shapes.')\n\t\tdtype = upcast_char(self.dtype.char, other.dtype.char)\n\t\torder = self._swap('CF')[0]\n\t\tresult = np.array(other, dtype=dtype, order=order, copy=True)\n\t\tM, N = self._swap(self.shape)\n\t\ty = result if result.flags.c_contiguous else result.T\n\t\tsparse._sparsetools.csr_todense(M, N, self.indptr, self.indices, self.data, y)\n\t\treturn result #np.matrix(result, copy=False)\n\n\nSupportedTypes=[np.ndarray,csc_matrix]\nWarningTypes=[np.matrixlib.defmatrix.matrix]\n\n\n# --------------------------------------------------------------------- Methods\n\n\ndef block_dot(A, B):\n\t'''\n\tdot product between block matrices.\n\n\tInputs:\n\tA, B: are nested lists of dense/sparse matrices of compatible shape for\n\tblock matrices product. Empty blocks can be defined with None. (see numpy.block)\n\t'''\n\n\trA, cA = len(A), len(A[0])\n\trB, cB = len(B), len(B[0])\n\n\tfor arow,brow in zip(A,B):\n\t\tassert len(brow) == cB,\\\n\t\t\t\t\t\t'B rows do not contain the same number of column blocks'\n\t\tassert len(arow) == cA,\\\n\t\t\t\t\t\t'A rows do not contain the same number of column blocks'\n\tassert cA==rB, 'Columns of A not equal to rows of B!'\n\n\tP=[]\n\tfor ii in range(rA):\n\t\tprow = cB * [None]\n\t\tfor jj in range(cB):\n\t\t\t# check first that the result will not be None\n\t\t\tContinue = False\n\t\t\tfor kk in range(cA):\n\t\t\t\tif A[ii][kk] is not None and B[kk][jj] is not None:\n\t\t\t\t\tContinue = True\n\t\t\t\t\tbreak\n\t\t\tif Continue:\n\t\t\t\tprow[jj] = 0.\n\t\t\t\tfor kk in range(cA):\n\t\t\t\t\tif A[ii][kk] is not None and B[kk][jj] is not None:\n\t\t\t\t\t\tprow[jj] += dot( A[ii][kk], B[kk][jj] )\n\t\tP.append(prow)\n\n\treturn P\n\n\ndef block_matrix_dot_vector(A, v):\n        '''\n        dot product between block matrix and block vector\n\n        Inputs:\n        A, v: are nested lists of dense/sparse matrices of compatible shape for\n        block matrices product. Empty blocks can be defined with None. (see numpy.block)\n        '''\n\n        rA, cA = len(A), len(A[0])\n        rv = len(B)\n\n        for arow in A:\n            assert len(arow) == cA,\\\n                'A rows do not contain the same number of column blocks'\n        assert cA==rv, 'Columns of A not equal to rows of v!'\n\n        P=[None]*rA\n        for ii in range(rA):\n            for jj in range(cA):\n                # check first that the result will not be None\n                if A[ii][jj] is not None and B[jj] is not None:\n                    P[ii] += dot(A[ii][jj], B[jj])\n        return P\n\ndef block_sum(A, B, factA = None, factB = None):\n\t'''\n\tdot product between block matrices.\n\n\tInputs:\n\tA, B: are nested lists of dense/sparse matrices of compatible shape for\n\tblock matrices product. Empty blocks can be defined with None. (see numpy.block)\n\t'''\n\n\trA, cA = len(A), len(A[0])\n\trB, cB = len(B), len(B[0])\n\n\tassert cA==cB and rA==rB, 'Block matrices do not have same size'\n\n\tfor arow,brow in zip(A,B):\n\t\tassert len(brow) == cB,\\\n\t\t\t\t\t\t'B rows do not contain the same number of column blocks'\n\t\tassert len(arow) == cA,\\\n\t\t\t\t\t\t'A rows do not contain the same number of column blocks'\n\n\tP=[]\n\tfor ii in range(rA):\n\t\tprow = cA * [None]\n\n\t\tfor jj in range(cA):\n\n\t\t\tif A[ii][jj] is None:\n\t\t\t\tif B[ii][jj] is None:\n\t\t\t\t\tprow[jj] = None\n\t\t\t\telse:\n\t\t\t\t\tif factB is None:\n\t\t\t\t\t\tprow[jj] = B[ii][jj]\n\t\t\t\t\telse:\n\t\t\t\t\t\tprow[jj] = factB*B[ii][jj]\n\t\t\telse:\n\t\t\t\tif B[ii][jj] is None:\n\t\t\t\t\tif factA is None:\n\t\t\t\t\t\tprow[jj] = A[ii][jj]\n\t\t\t\t\telse:\n\t\t\t\t\t\tprow[jj] = factA*A[ii][jj]\n\t\t\t\telse:\n\t\t\t\t\tif factA is None and factA is None:\n\t\t\t\t\t\tprow[jj] = A[ii][jj] + B[ii][jj]\n\t\t\t\t\telif factA is None:\n\t\t\t\t\t\tprow[jj] = A[ii][jj] + factB*B[ii][jj]\n\t\t\t\t\telif factB is None:\n\t\t\t\t\t\tprow[jj] = factA*A[ii][jj] + B[ii][jj]\n\t\t\t\t\telse:\n\t\t\t\t\t\tprow[jj] = factA*A[ii][jj] + factB*B[ii][jj]\n\n\t\tP.append(prow)\n\n\treturn P\n\n\ndef dot(A,B,type_out=None):\n\t'''\n\tMethod to compute\n\t\tC = A*B ,\n\twhere * is the matrix product, with dense/sparse/mixed matrices.\n\n\tThe format (sparse or dense) of C is specified through 'type_out'. If\n\ttype_out==None, the output format is sparse if both A and B are sparse, dense\n\totherwise.\n\n\tThe following formats are supported:\n\t- numpy.ndarray\n\t- scipy.csc_matrix\n\t'''\n\n\t# determine types:\n\ttA=type(A)\n\ttB=type(B)\n\n\tassert tA in SupportedTypes, 'Type of A matrix (%s) not supported'%tA\n\tassert tB in SupportedTypes, 'Type of B matrix (%s) not supported'%tB\n\tif type_out == None:\n\t\ttype_out=tA\n\telse:\n\t\tassert type_out in SupportedTypes, 'type_out not supported'\n\n\t# multiply\n\t# if tA==float or tb==float:\n\t# \tC = A*B\n\t# else:\n\tif tA==np.ndarray and tB==csc_matrix:\n\t\tC=(B.transpose()).dot(A.transpose()).transpose()\n\t\t# C=A.dot(B.todense())\n\telse:\n\t\tC=A.dot(B)\n\n\t# format output\n\tif tA != type_out:\n\t\tif type_out==csc_matrix:\n\t\t\treturn csc_matrix(C)\n\t\telse:\n\t\t\treturn C.toarray()\n\n\treturn C\n\n\ndef solve(A,b):\n\t'''\n\tWrapper of\n\t\tnumpy.linalg.solve and scipy.sparse.linalg.spsolve\n\tfor solution of the linear system A x = b.\n\t- if A is a dense numpy array np.linalg.solve is called for solution. Note\n\tthat if B is sparse, this requires convertion to dense. In this case,\n\tsolution through LU factorisation of A should be considered to exploit the\n\tsparsity of B.\n\t- if A is sparse, scipy.sparse.linalg.spsolve is used.\n\t'''\n\n\t# determine types:\n\ttA=type(A)\n\ttB=type(b)\n\n\tassert tA in SupportedTypes, 'Type of A matrix (%s) not supported'%tA\n\tassert tB in SupportedTypes, 'Type of B matrix (%s) not supported'%tB\n\t# multiply\n\tif tA==np.ndarray:\n\t\tif tB==csc_matrix:\n\t\t\tx=np.linalg.solve(A,b.toarray())\n\t\telse:\n\t\t\tx=np.linalg.solve(A,b)\n\telse:\n\t\tx=spalg.spsolve(A,b)\n\n\tassert type(x) in SupportedTypes, 'Unexpected output type!'\n\n\treturn x\n\n\ndef dense(M):\n\t''' If required, converts sparse array to dense. '''\n\tif type(M) == csc_matrix:\n\t\treturn np.array(M.toarray())\n\telif type(M) == csc_matrix:\n\t\treturn M.toarray()\n\treturn M\n\n\ndef eye_as(M):\n\t''' Produces an identity matrix as per M, in shape and type '''\n\n\ttM=type(M)\n\tassert tM in SupportedTypes, 'Type %s not supported!'%tM\n\tnrows=M.shape[0]\n\tassert nrows==M.shape[1], 'Not a square matrix!'\n\n\tif tM==csc_matrix:\n\t\tD=csc_matrix((nrows,nrows))\n\t\tD.setdiag(1.)\n\telif tM==np.ndarray:\n\t\tD=np.eye(nrows)\n\n\treturn D\n\n\ndef zeros_as(M):\n\t''' Produces an identity matrix as per M, in shape and type '''\n\n\ttM=type(M)\n\tassert tM in SupportedTypes, 'Type %s not supported!'%tM\n\tnrows,ncols=M.shape\n\n\tif tM==csc_matrix:\n\t\tD=csc_matrix((nrows,ncols))\n\telif tM==np.ndarray:\n\t\tD=np.zeros_like(M)\n\n\treturn D\n\n\n# -----------------------------------------------------------------------------\n\n\nif __name__=='__main__':\n\timport unittest\n\n\tclass Test_module(unittest.TestCase):\n\t\t''' Test methods into this module '''\n\n\t\tdef setUp(self):\n\t\t\tself.A=np.random.rand(3,4)\n\t\t\tself.B=np.random.rand(4,2)\n\n\t\tdef test_dense_plus_csc_matrix_type(self):\n\t\t\tA=self.A\n\t\t\tAsp=csc_matrix(A)\n\n\t\t\tfor aa in [A,Asp]:\n\t\t\t\tfor bb in [A,Asp]:\n\t\t\t\t\ttsum=type(aa+bb)\n\t\t\t\t\ttdiff=type(aa-bb)\n\t\t\t\t\tfor tout,strout in zip([tsum,tdiff],['(+)','(-)']):\n\t\t\t\t\t\tif tout not in SupportedTypes:\n\t\t\t\t\t\t\tif tout in WarningTypes:\n\t\t\t\t\t\t\t\twarnings.warn(\n\t\t\t\t\t\t\t\t\t'Undesired type (%s) resulting from %s operations between %s and %s types'\\\n\t\t\t\t\t\t\t\t\t%(tout,strout,type(aa),type(bb)))\n\t\t\t\t\t\t\telse:\n\t\t\t\t\t\t\t\traise NameError(\n\t\t\t\t\t\t\t\t\t'Unexpected type (%s) resulting from %s operations between %s and %s types'\\\n\t\t\t\t\t\t\t\t\t%(tout,strout,type(aa),type(bb)))\n\n\t\tdef test_zeros_as(self):\n\t\t\tA=np.zeros((4,2))\n\t\t\tA1=zeros_as(A)\n\t\t\tA2=zeros_as(csc_matrix(A))\n\t\t\tassert np.max(np.abs(A-A1))<1e-16, 'Error in libsparse.zeros_as'\n\t\t\tassert np.max(np.abs(A-A2))<1e-16, 'Error in libsparse.zeros_as'\n\n\t\tdef test_eye_as(self):\n\t\t\tA=np.random.rand(4,4)\n\t\t\tD0=np.eye(4)\n\t\t\tD1=eye_as(A)\n\t\t\tD2=eye_as(csc_matrix(A))\n\t\t\tassert np.max(np.abs(D0-D1))<1e-12, 'Error in libsparse.eye_as'\n\t\t\tassert np.max(np.abs(D0-D2))<1e-12, 'Error in libsparse.eye_as'\n\n\t\tdef test_dot(self):\n\t\t\tA,B=self.A,self.B\n\t\t\tC0=np.dot(A,B)\t\t# reference\n\t\t\tC1=dot(A,B)\n\t\t\tC2=dot(A,csc_matrix(B))\n\t\t\tC3=dot(csc_matrix(A),B)\n\t\t\tC4=dot(csc_matrix(A),csc_matrix(B))\n\t\t\tassert np.max(np.abs(C0-C1))<1e-12, 'Error in libsparse.dot'\n\t\t\tassert np.max(np.abs(C0-C2))<1e-12, 'Error in libsparse.dot'\n\t\t\tassert np.max(np.abs(C0-C3))<1e-12, 'Error in libsparse.dot'\n\n\t\tdef test_solve(self):\n\t\t\tA=np.random.rand(4,4)\n\t\t\tB=np.random.rand(4,2)\n\t\t\tAsp=csc_matrix(A)\n\t\t\tBsp=csc_matrix(B)\n\n\t\t\tX0=np.linalg.solve(A,B)\n\t\t\tX1=solve(A,B)\n\t\t\tX2=solve(A,Bsp)\n\t\t\tX3=solve(Asp,B)\n\t\t\tX4=solve(Asp,Bsp)\n\n\t\t\tassert np.max(np.abs(X0-X1))<1e-12, 'Error in libsparse.solve'\n\t\t\tassert np.max(np.abs(X0-X2))<1e-12, 'Error in libsparse.solve'\n\t\t\tassert np.max(np.abs(X0-X3))<1e-12, 'Error in libsparse.solve'\n\t\t\tassert np.max(np.abs(X0-X4))<1e-12, 'Error in libsparse.solve'\n\n\n\toutprint='Testing libsparse'\n\tprint('\\n' + 70*'-')\n\tprint((70-len(outprint))*' ' + outprint )\n\tprint(70*'-')\n\tunittest.main()\n"
  },
  {
    "path": "sharpy/linear/src/libss.py",
    "content": "\"\"\"\nLinear Time Invariant systems\nauthor: S. Maraniello\ndate: 15 Sep 2017 (still basement...)\n\nLibrary of methods to build/manipulate state-space models. The module supports\nthe sparse arrays types defined in libsparse.\n\nThe module includes:\n\nClasses:\n- StateSpace: provides a class to build DLTI/LTI systems with full and/or sparse\n\tmatrices and wraps many of the methods in these library. Methods include:\n\t- freqresp: wraps the freqresp function\n\t- addGain: adds gains in input/output. This is not a wrapper of addGain, as\n\tthe system matrices are overwritten\n\nMethods for state-space manipulation:\n- couple: feedback coupling. Does not support sparsity\n- freqresp: calculate frequency response. Supports sparsity.\n- series: series connection between systems\n- parallel: parallel connection between systems\n- SSconv: convert state-space model with predictions and delays\n- addGain: add gains to state-space model.\n- join2: merge two state-space models into one.\n- join: merge a list of state-space models into one.\n- sum state-space models and/or gains\n- scale_SS: scale state-space model\n- simulate: simulates discrete time solution\n- Hnorm_from_freq_resp: compute H norm of a frequency response\n- adjust_phase: remove discontinuities from a frequency response\n\nSpecial Models:\n- SSderivative: produces DLTI of a numerical derivative scheme\n- SSintegr: produces DLTI of an integration scheme\n- build_SS_poly: build state-space model with polynomial terms.\n\nFiltering:\n- butter\n\nUtilities:\n- get_freq_from_eigs: clculate frequency corresponding to eigenvalues\n\nComments:\n- the module supports sparse matrices hence relies on libsparse.\n\nto do:\n\t- remove unnecessary coupling routines\n\t- couple function can handle sparse matrices but only outputs dense matrices\n\t\t- verify if typical coupled systems are sparse\n\t\t- update routine\n\t\t- add method to automatically determine whether to use sparse or dense?\n\"\"\"\n\nimport copy\nimport warnings\nimport numpy as np\nimport scipy.signal as scsig\nimport scipy.linalg as scalg\nfrom sharpy.linear.utils.ss_interface import LinearVector, StateVariable, InputVariable, OutputVariable\nimport scipy.interpolate as scint\nimport h5py\nimport sharpy.utils.h5utils as h5utils\n\n# dependency\nimport sharpy.linear.src.libsparse as libsp\n\n\n# ------------------------------------------------------------- Dedicated class\n\nclass StateSpace:\n    \"\"\"\n    Wrap state-space models allocation into a single class and support both\n    full and sparse matrices. The class emulates\n        scipy.signal.ltisys.StateSpaceContinuous\n        scipy.signal.ltisys.StateSpaceDiscrete\n    but supports sparse matrices and other functionalities.\n\n    Methods:\n    - get_mats: return matrices as tuple\n    - check_types: check matrices types are supported\n    - freqresp: calculate frequency response over range.\n    - addGain: project inputs/outputs\n    - scale: allows scaling a system\n    \"\"\"\n\n    def __init__(self, A, B, C, D, dt=None):\n        \"\"\"\n        Allocate state-space model (A,B,C,D). If dt is not passed, a\n        continuous-time system is assumed.\n        \"\"\"\n\n        self.A = A\n        self.B = B\n        self.C = C\n        self.D = D\n        self.dt = dt\n        self.check_types()\n\n        # vector variable tracking\n        self._input_variables = None  # type: LinearVector\n        self._state_variables = None\n        self._output_variables = None\n\n        # verify dimensions\n        assert self.A.shape == (self.states, self.states), 'A and B rows not matching'\n        assert self.C.shape[1] == self.states, 'A and C columns not matching'\n        assert self.D.shape[0] == self.outputs, 'C and D rows not matching'\n        try:\n            assert self.D.shape[1] == self.inputs, 'B and D columns not matching'\n        except IndexError:\n            assert self.inputs == 1, 'D shape does not match number of inputs'\n\n    @property\n    def inputs(self):\n        \"\"\"Number of inputs :math:`m` to the system.\"\"\"\n        if self.B.shape.__len__() == 1:\n            return 1\n        else:\n            return self.B.shape[1]\n\n    @property\n    def outputs(self):\n        \"\"\"Number of outputs :math:`p` of the system.\"\"\"\n        return self.C.shape[0]\n\n    @property\n    def states(self):\n        \"\"\"Number of states :math:`n` of the system.\"\"\"\n        return self.A.shape[0]\n\n    @property\n    def input_variables(self):\n        return self._input_variables\n\n    @input_variables.setter\n    def input_variables(self, variables):\n        if variables.variable_class is not InputVariable:\n            raise TypeError('LinearVector does not include InputVariable s')\n        if variables.size != self.inputs:\n            raise IndexError('Size of LinearVector of InputVariable s ({:g}) is not the same as the number of '\n                             'inputs in the '\n                             'system ({:g})'.format(variables.size, self.inputs))\n        self._input_variables = variables\n\n    @property\n    def output_variables(self):\n        return self._output_variables\n\n    @output_variables.setter\n    def output_variables(self, variables):\n        if variables.variable_class is not OutputVariable:\n            raise TypeError('LinearVector does not include OutputVariable s')\n        if variables.size != self.outputs:\n            raise IndexError('Size of LinearVector of OutputVariable s ({:g}) is not the same as the number of '\n                             'outputs in the '\n                             'system ({:g})'.format(variables.size, self.outputs))\n        self._output_variables = variables\n\n    @property\n    def state_variables(self):\n        return self._state_variables\n\n    @state_variables.setter\n    def state_variables(self, variables):\n        if variables.variable_class is not StateVariable:\n            raise TypeError('LinearVector does not include StateVariable s')\n        if variables.size != self.states:\n            raise IndexError('Size of LinearVector of StateVariable s ({:g}) is not the same as the number '\n                             'of states in the '\n                             'system ({:g})'.format(variables.size, self.states))\n        self._state_variables = variables\n\n    def initialise_variables(self, *variable_tuple, var_type='in'):\n        if var_type == 'in' or var_type == 'input':\n            var_class = InputVariable\n        elif var_type == 'out' or var_type == 'output':\n            var_class = OutputVariable\n        elif var_type == 'state':\n            var_class = StateVariable\n        else:\n            raise TypeError('Unknown variable type')\n\n        list_of_variables = []\n        for ith, var_dict in enumerate(variable_tuple):\n            list_of_variables.append(var_class(name=var_dict['name'],\n                                               size=var_dict['size'],\n                                               index=var_dict.get('index', ith)))\n\n        if var_type == 'in' or var_type == 'input':\n            self._input_variables = LinearVector(list_of_variables)\n        elif var_type == 'out' or var_type == 'output':\n            self._output_variables = LinearVector(list_of_variables)\n        elif var_type == 'state':\n            self._state_variables = LinearVector(list_of_variables)\n\n    def __repr__(self):\n        str_out = ''\n        str_out += 'State-space object\\n'\n        str_out += 'States: {:g}\\n'.format(self.states)\n        str_out += 'Inputs: {:g}\\n'.format(self.inputs)\n        str_out += 'Outputs: {:g}\\n'.format(self.outputs)\n        if self.dt is not None:\n            str_out += 'dt: {:g}'.format(self.dt)\n\n        if self.input_variables is not None:\n            str_out += '\\nInput Variables:\\n' + str(self.input_variables)\n        if self.state_variables is not None:\n            str_out += 'State Variables:\\n' + str(self.state_variables)\n        if self.output_variables is not None:\n            str_out += 'Output Variables:\\n' + str(self.output_variables)\n\n        return str_out\n\n    def check_types(self):\n        assert type(self.A) in libsp.SupportedTypes, \\\n            'Type of A matrix (%s) not supported' % type(self.A)\n        assert type(self.B) in libsp.SupportedTypes, \\\n            'Type of B matrix (%s) not supported' % type(self.B)\n        assert type(self.C) in libsp.SupportedTypes, \\\n            'Type of C matrix (%s) not supported' % type(self.C)\n        assert type(self.D) in libsp.SupportedTypes, \\\n            'Type of D matrix (%s) not supported' % type(self.D)\n\n    def get_mats(self):\n        return self.A, self.B, self.C, self.D\n\n    def freqresp(self, wv):\n        \"\"\"\n        Calculate frequency response over frequencies wv\n\n        Note: this wraps frequency response function.\n        \"\"\"\n        dlti = True\n        if self.dt is None:\n            dlti = False\n        return freqresp(self, wv, dlti=dlti)\n\n    def addGain(self, K, where):\n        \"\"\"\n        Projects input u or output y the state-space system through the gain\n        matrix K. The input 'where' determines whether inputs or outputs are\n        projected as:\n            - where='in': inputs are projected such that:\n                u_new -> u=K*u_new -> SS -> y  => u_new -> SSnew -> y\n            - where='out': outputs are projected such that:\n                 u -> SS -> y -> y_new=K*y => u -> SSnew -> ynew\n\n        Args:\n            K (np.array or Gain): gain matrix or Gain object\n            where (str): ``in`` or ``out``\n\n        Warning:\n            This is not a wrapper of the addGain method in this module, as\n            the state-space matrices are directly overwritten.\n        \"\"\"\n\n        assert where in ['in', 'out'], \\\n            'Specify whether gains are added to input or output'\n\n        with_vars = False\n        if isinstance(K, Gain):\n            gain = K\n            K = K.value\n            with_vars = True\n\n        if where == 'in':\n            self.B = libsp.dot(self.B, K)\n            self.D = libsp.dot(self.D, K)\n            if with_vars:\n                self._input_variables = gain.input_variables\n\n        if where == 'out':\n            self.C = libsp.dot(K, self.C)\n            self.D = libsp.dot(K, self.D)\n            if with_vars:\n                self._output_variables = gain.output_variables\n\n    def scale(self, input_scal=1., output_scal=1., state_scal=1.):\n        \"\"\"\n        Given a state-space system, scales the equations such that the original\n        state, input and output, (x, u and y), are substituted by\n            xad=x/state_scal\n            uad=u/input_scal\n            yad=y/output_scal\n        The entries input_scal/output_scal/state_scal can be:\n            - floats: in this case all input/output are scaled by the same value\n            - lists/arrays of length Nin/Nout: in this case each dof will be scaled\n            by a different factor\n\n        If the original system has form:\n            xnew=A*x+B*u\n            y=C*x+D*u\n        the transformation is such that:\n            xnew=A*x+(B*uref/xref)*uad\n            yad=1/yref( C*xref*x+D*uref*uad )\n        \"\"\"\n        scale_SS(self, input_scal, output_scal, state_scal, byref=True)\n\n    def project(self, wt, v):\n        \"\"\"\n        Given 2 transformation matrices, ``(WT, V)`` of shapes ``(Nk, self.states)`` and\n        ``(self.states, Nk)`` respectively, this routine projects the state space\n        model states according to:\n\n\n        .. math::\n            Anew = WT A V \\\\\n            Bnew = WT B \\\\\n            Cnew = C V \\\\\n            Dnew = D \\\\\n\n        The projected model has the same number of inputs/outputs as the original\n        one, but Nk states.\n\n        Args:\n            wt (Gain or np.ndarray): Left projection matrix\n            v (Gain or np.ndarray): Righty projection matrix\n        \"\"\"\n        if isinstance(wt, Gain) and isinstance(v, Gain):\n            self.A = libsp.dot(wt.value, libsp.dot(self.A, v.value))\n            self.B = libsp.dot(wt.value, self.B)\n            self.C = libsp.dot(self.C, v.value)\n            self.state_variables = LinearVector.transform(v.input_variables, to_type=StateVariable)\n        else:\n            self.A = libsp.dot(wt, libsp.dot(self.A, v))\n            self.B = libsp.dot(wt, self.B)\n            self.C = libsp.dot(self.C, v)\n\n    def truncate(self, N):\n        \"\"\" Retains only the first N states. \"\"\"\n\n        assert N > 0 and N <= self.states, 'N must be in [1,self.states]'\n\n        self.A = self.A[:N, :N]\n        self.B = self.B[:N, :]\n        self.C = self.C[:, :N]\n        # self.states = N  # No need to update, states is now a property. NG 26/3/19\n\n    def max_eig(self):\n        \"\"\"\n        Returns most unstable eigenvalue\n        \"\"\"\n\n        ev = np.linalg.eigvals(self.A)\n\n        if self.dt is None:\n            return np.max(ev.real)\n        else:\n            return np.max(np.abs(ev))\n\n    def eigvals(self):\n        \"\"\"\n        Returns:\n            np.ndarray: Eigenvalues of the system\n\n        \"\"\"\n        if self.dt:\n            return eigvals(self.A, dlti=True)\n        else:\n            return eigvals(self.A, dlti=False)\n\n    def disc2cont(self):\n        r\"\"\"\n        Transform a discrete time system to a continuous time system using a bilinear (Tustin) transformation.\n\n        Wrapper of :func:`~sharpy.linear.src.libss.disc2cont`\n\n        \"\"\"\n        if self.dt:\n            self = disc2cont(self)\n\n    def retain_inout_channels(self, retain_channels, where):\n        \"\"\"\n        Retain selected input or output channels only.\n\n        Args:\n            retain_channels (list): List of channels to retain\n            where (str): ``in`` or ``out`` for input/output channels\n        \"\"\"\n        retain_inout_channels(self, retain_channels, where)\n\n    def summary(self):\n        msg = 'State-space system\\nStates: %g\\nInputs: %g\\nOutputs: %g\\n' % (self.states, self.inputs, self.outputs)\n        return msg\n\n    def transfer_function_evaluation(self, s):\n        r\"\"\"\n        Returns the transfer function of the system evaluated at :math:`s\\in\\mathbb{C}`.\n\n        Args:\n            s (complex): Point in the complex plane at which to evaluate the transfer function.\n\n        Returns:\n            np.ndarray: Transfer function evaluated at :math:`s`.\n        \"\"\"\n        a, b, c, d = self.get_mats()\n\n        n = a.shape[0]\n\n        return c.dot(scalg.inv(s * np.eye(n) - a)).dot(b) + d\n\n    def save(self, path):\n        \"\"\"Save state-space object to h5 file\"\"\"\n        with h5py.File(path, 'w') as f:\n            f.create_dataset('a', data=self.A)\n            f.create_dataset('b', data=self.B)\n            f.create_dataset('c', data=self.C)\n            f.create_dataset('d', data=self.D)\n            if self.dt:\n                f.create_dataset('dt', data=self.dt)\n\n            if self.input_variables is not None:\n                self.input_variables.add_to_h5_file(f)\n                self.output_variables.add_to_h5_file(f)\n                self.state_variables.add_to_h5_file(f)\n\n    @classmethod\n    def load_from_h5(cls, h5_file_name):\n        \"\"\"\n        Loads a state-space object from an h5 file, including variable information\n\n        Args:\n            h5_file_name (str): Path to file\n\n        Returns:\n            StateSpace: loaded state-space from file\n        \"\"\"\n\n        with h5py.File(h5_file_name, 'r') as f:\n            data_dict = h5utils.load_h5_in_dict(f)\n\n        new_ss = cls(data_dict['a'],\n                     data_dict['b'],\n                     data_dict['c'],\n                     data_dict['d'],\n                     dt=data_dict.get('dt'))\n\n        input_variables = data_dict.get('InputVariable')\n        if input_variables is not None:\n            new_ss.input_variables = LinearVector.load_from_h5_file('InputVariable',\n                                                                    data_dict['InputVariable'])\n            new_ss.output_variables = LinearVector.load_from_h5_file('OutputVariable',\n                                                                     data_dict['OutputVariable'])\n            new_ss.state_variables = LinearVector.load_from_h5_file('StateVariable',\n                                                                    data_dict['StateVariable'])\n\n            return new_ss\n        else:\n            return new_ss\n\n    def remove_inputs(self, *input_remove_list):\n        \"\"\"\n        Removes inputs through their variable names.\n\n        Needs that the ``StateSpace`` attribute ``input_variables`` is defined.\n\n        Args:\n            input_remove_list (list(str)): List of inputs to remove\n\n        \"\"\"\n        if self.input_variables is None:\n            raise AttributeError('No input variables have been defined for the current state-space object. Define '\n                                 'some variables prior to using the remove_inputs() method.')\n\n        self.input_variables.remove(*input_remove_list)\n\n        i = 0\n        retain_input_array = None\n        for variable in self.input_variables:\n            if i == 0:\n                retain_input_array = variable.cols_loc\n            else:\n                retain_input_array = np.hstack((retain_input_array, variable.cols_loc))\n            i += 1\n\n        if retain_input_array is not None:\n            if type(self.B) is libsp.csc_matrix:\n                self.B = libsp.csc_matrix(self.B[:, retain_input_array])\n                self.D = libsp.csc_matrix(self.D[:, retain_input_array])\n            else:\n                self.B = self.B[:, retain_input_array]\n                self.D = self.D[:, retain_input_array]\n\n        self.input_variables.update_locations()\n\n    def remove_outputs(self, *output_remove_list):\n        \"\"\"\n        Removes outputs through their variable names.\n\n        Needs that the ``StateSpace`` attribute ``output_variables`` is defined.\n\n        Args:\n            output_remove_list (list(str)): List of outputs to remove\n\n        \"\"\"\n        if self.output_variables is None:\n            raise AttributeError('No output variables have been defined for the current state-space object. Define '\n                                 'some variables prior to using the remove_outputs() method.')\n\n        new_outputs = 0\n        for variable in self.output_variables:\n            if variable.name not in output_remove_list:\n                new_outputs += variable.size\n\n        out_gain = np.zeros((new_outputs, self.outputs))\n        worked_outputs = 0\n        for variable in self.output_variables:\n            if variable.name not in output_remove_list:\n                index = variable.rows_loc\n                out_gain[worked_outputs:worked_outputs + variable.size, index] = np.eye(variable.size)\n                worked_outputs += variable.size\n\n        if new_outputs != self.outputs:\n            if type(self.B) is libsp.csc_matrix:\n                self.C = libsp.csc_matrix(out_gain.dot(self.C))\n                self.D = libsp.csc_matrix(out_gain.dot(self.D))\n            else:\n                self.C = out_gain.dot(self.C)\n                self.D = out_gain.dot(self.D)\n\n        self.output_variables.remove(*output_remove_list)\n        self.output_variables.update_locations()\n\n    @classmethod\n    def from_scipy(cls, scipy_ss):\n        \"\"\"\n        Transforms a ``scipy.signal.lti`` or dlti into a StateSpace class\n\n        Args:\n            scipy_ss (scipy.signal.ltisys.StateSpaceContinous or scipy.signal.ltisys.StateSpaceDiscrete): Scipy\n              State Space object.\n\n        Returns:\n            StateSpace: SHARPy state space object\n        \"\"\"\n        a = scipy_ss.A\n        b = scipy_ss.B\n        c = scipy_ss.C\n        d = scipy_ss.D\n\n        return cls(a, b, c, d, dt=scipy_ss.dt)\n\n\nclass Gain:\n\n    def __init__(self, value, input_vars=None, output_vars=None):\n        self.value = value\n        self._input_variables = None\n        self._output_variables = None\n\n        if input_vars is not None:\n            self.input_variables = input_vars\n        if output_vars is not None:\n            self.output_variables = output_vars\n\n    @property\n    def input_variables(self):\n        return self._input_variables\n\n    @input_variables.setter\n    def input_variables(self, variables):\n        if variables.variable_class is not InputVariable:\n            raise TypeError('LinearVector does not include InputVariable s')\n        if variables.size != self.inputs:\n            raise IndexError('Size of LinearVector of InputVariable s ({:g}) is not the same as the number of '\n                             'inputs in the '\n                             'system ({:g})'.format(variables.size, self.inputs))\n        self._input_variables = variables\n\n    @property\n    def output_variables(self):\n        return self._output_variables\n\n    @output_variables.setter\n    def output_variables(self, variables):\n        if variables.variable_class is not OutputVariable:\n            raise TypeError('LinearVector does not include OutputVariable s')\n        if variables.size != self.outputs:\n            raise IndexError('Size of LinearVector of OutputVariable s ({:g}) is not the same as the number of '\n                             'outputs in the '\n                             'system ({:g})'.format(variables.size, self.outputs))\n        self._output_variables = variables\n\n    @property\n    def inputs(self):\n        \"\"\"Number of inputs :math:`m` to the system.\"\"\"\n        if self.value.shape.__len__() == 1:\n            return 1\n        else:\n            return self.value.shape[1]\n\n    @property\n    def outputs(self):\n        \"\"\"Number of outputs :math:`p` of the gain.\"\"\"\n        return self.value.shape[0]\n\n    def dot(self, elem):\n        \"\"\"\n        Dot product of two Gains\n\n        Args:\n            elem (np.array or Gain):\n\n        Returns:\n            np.array or Gain: new matrix/Gain containing the dot product\n        \"\"\"\n        if type(elem) is Gain:\n            LinearVector.check_connection(elem.output_variables, self.input_variables)\n            new_gain_value = libsp.dot(self.value, elem.value)\n            return Gain(new_gain_value,\n                        input_vars=elem.input_variables.copy(),\n                        output_vars=self.output_variables.copy())\n        else:\n            return self.value.dot(elem)\n\n    def __repr__(self):\n        str_out = ''\n        str_out += 'Gain object\\n'\n        str_out += 'Inputs: {:g}\\n'.format(self.inputs)\n        str_out += 'Outputs: {:g}\\n'.format(self.outputs)\n\n        if self.input_variables is not None:\n            str_out += '\\nInput Variables:\\n' + str(self.input_variables)\n        if self.output_variables is not None:\n            str_out += 'Output Variables:\\n' + str(self.output_variables)\n\n        return str_out\n\n    def transpose(self):\n        \"\"\"\n        Transposes the gain, such that the inputs become the outputs and vice-versa.\n        \"\"\"\n\n        if self.input_variables is not None:\n            temp_input_var = self.input_variables.copy()\n            input_variables = LinearVector.transform(self.output_variables,\n                                                     to_type=InputVariable)\n            output_variables = LinearVector.transform(temp_input_var,\n                                                      to_type=OutputVariable)\n\n            return Gain(self.value.T,\n                        input_vars=input_variables,\n                        output_vars=output_variables)\n        else:\n            return Gain(self.value.T)\n\n    @property\n    def T(self):\n        return self.transpose()\n\n    def copy(self):\n        if self.input_variables is not None:\n            return Gain(self.value, input_vars=self.input_variables.copy(), output_vars=self.output_variables.copy())\n        else:\n            return Gain(self.value)\n\n    def save(self, path):\n        \"\"\"Save gain object to h5 file\"\"\"\n        with h5py.File(path, 'w') as f:\n            f.create_dataset('gain', data=self.value)\n\n            if self.input_variables is not None:\n                self.input_variables.add_to_h5_file(f)\n                self.output_variables.add_to_h5_file(f)\n\n    def add_as_group_to_h5(self, h5_file_handle, group_name):\n        \"\"\"\n        Adds gain to an h5 file handle\n        \n        Args:\n            h5_file_handle (h5py.File): writeable h5 file handle\n            group_name (str): Desired group name to save gain in h5\n\n        \"\"\"\n        gain_group = h5_file_handle.create_group(group_name)\n        gain_group.create_dataset(name='gain', data=self.value)\n\n        if self.input_variables is not None:\n            self.input_variables.add_to_h5_file(gain_group)\n            self.output_variables.add_to_h5_file(gain_group)\n\n    @classmethod\n    def load_from_h5(cls, h5_file_name):\n        \"\"\"\n        Returns a gain object from an .h5 file\n\n        Args:\n            h5_file_name (str): Path to h5 file\n\n        Returns:\n            Gain: instance of a Gain\n        \"\"\"\n        with h5py.File(h5_file_name, 'r') as f:\n            data_dict = h5utils.load_h5_in_dict(f)\n\n        return cls.load_from_dict(data_dict)\n\n    @classmethod\n    def load_from_dict(cls, data_dict):\n        \"\"\"\n\n        Returns a Gain from a dictionary of data, useful for loading from a group of gains in a single\n        .h5 file\n\n        Args:\n            data_dict (dict): Dictionary with keys: ``gain`` and (if available) ``InputVariable``\n              and ``OutputVariable``.\n\n        Returns:\n            Gain: instance of Gain\n        \"\"\"\n        input_variables = data_dict.get('InputVariable')\n        if input_variables is not None:\n            input_variables = LinearVector.load_from_h5_file('InputVariable',\n                                                             data_dict['InputVariable'])\n            output_variables = LinearVector.load_from_h5_file('OutputVariable',\n                                                              data_dict['OutputVariable'])\n\n            return cls(data_dict['gain'], input_vars=input_variables,\n                       output_vars=output_variables)\n        else:\n            return cls(data_dict['gain'])\n\n    @classmethod\n    def save_multiple_gains(cls, h5_file_name, *gains_names_tuple):\n        \"\"\"\n        Saves multiple gains to a single h5 file\n\n        Args:\n            h5_file_name (str): Path to h5 file\n            *gains_names_tuple (tuple): ``(gain_name (str), gain(Gain))`` tuples to save. The gain name will be the name\n              given on the h5 file\n\n        \"\"\"\n        with h5py.File(h5_file_name, 'w') as f:\n            for name, gain in gains_names_tuple:\n                gain.add_as_group_to_h5(f, name)\n\n    @classmethod\n    def load_multiple_gains(cls, h5_file_name):\n        \"\"\"\n        Loads multiple gains from a single h5 file\n\n        Args:\n            h5_file_name (str): Path to h5 file\n\n        Returns:\n            dict: Dictionary of loaded gains in a gain_name: Gain dictionary\n        \"\"\"\n        with h5py.File(h5_file_name, 'r') as f:\n            data_dict = h5utils.load_h5_in_dict(f)\n\n        out_gains = {}\n        for gain_name, gain_data in data_dict.items():\n            out_gains[gain_name] = cls.load_from_dict(gain_data)\n\n        return out_gains\n\n\nclass ss_block():\n    \"\"\"\n    State-space model in block form. This class has the same purpose as \"StateSpace\",\n    but the A, B, C, D are allocated in the form of nested lists. The format is\n    similar to the one used in numpy.block but:\n        1. Block matrices can contain both dense and sparse matrices\n        2. Empty blocks are defined through None type\n\n    Methods:\n    - remove_block: drop one of the blocks from the s-s model\n    - addGain: project inputs/outputs\n    - project: project state\n    \"\"\"\n\n    def __init__(self, A, B, C, D, S_states, S_inputs, S_outputs, dt=None):\n        \"\"\"\n        Allocate state-space model (A,B,C,D) in block form starting from nested\n        lists of full/sparse matrices (as per numpy.block).\n\n        Input:\n        - A, B, C, D: lists of matrices defining the state-space model.\n        - S_states, S_inputs, S_outputs: lists with dimensions of of each block\n        representing the states, inputs and outputs of the model.\n        - dt: time-step. In None, a continuous-time system is assumed.\n        \"\"\"\n\n        self.A = A\n        self.B = B\n        self.C = C\n        self.D = D\n        self.dt = dt\n\n        self.S_u = S_inputs\n        self.S_y = S_outputs\n        self.S_x = S_states\n\n        # determine number of blocks\n        self.blocks_u = len(S_inputs)\n        self.blocks_y = len(S_outputs)\n        self.blocks_x = len(S_states)\n\n        # determine inputs/outputs/states\n        self.inputs = sum(S_inputs)\n        self.outputs = sum(S_outputs)\n        self.states = sum(S_states)\n\n        self.check_sizes()\n\n    def check_sizes(self):\n        pass\n\n    def remove_block(self, where, index):\n        \"\"\"\n        Remove a block from either inputs or outputs.\n\n        Inputs:\n        - where = {'in', 'out'}: determined whether to remove inputs or outputs\n        - index: index of block to remove\n        \"\"\"\n\n        assert where in ['in', 'out'], \"'where' must be equal to {'in', 'out'}\"\n\n        if where == 'in':\n            for ii in range(self.blocks_x):\n                del self.B[ii][index]\n            for ii in range(self.blocks_y):\n                del self.D[ii][index]\n\n        if where == 'out':\n            for ii in range(self.blocks_y):\n                del self.C[ii]\n                del self.D[ii]\n\n    def addGain(self, K, where):\n        \"\"\"\n        Projects input u or output y the state-space system through the gain\n        block matrix K. The input 'where' determines whether inputs or outputs\n        are projected as:\n            - where='in': inputs are projected such that:\n                u_new -> u=K*u_new -> SS -> y  => u_new -> SSnew -> y\n            - where='out': outputs are projected such that:\n                 u -> SS -> y -> y_new=K*y => u -> SSnew -> ynew\n\n        Input: K must be a list of list of matrices. The size of K must be\n        compatible with either B or C for block matrix product.\n        \"\"\"\n\n        assert where in ['in', 'out'], \\\n            'Specify whether gains are added to input or output'\n\n        rows, cols = self.get_sizes(K)\n\n        if where == 'in':\n            self.B = libsp.block_dot(self.B, K)\n            self.D = libsp.block_dot(self.D, K)\n            self.S_u = cols\n            self.blocks_u = len(cols)\n            self.inputs = sum(cols)\n\n        if where == 'out':\n            self.C = libsp.block_dot(K, self.C)\n            self.D = libsp.block_dot(K, self.D)\n            self.S_y = rows\n            self.blocks_y = len(rows)\n            self.outputs = sum(rows)\n\n    def get_sizes(self, M):\n        \"\"\"\n        Get the size of each block in M.\n        \"\"\"\n\n        rM, cM = len(M), len(M[0])\n        rows = rM * [None]\n        cols = cM * [None]\n\n        for ii in range(rM):\n            for jj in range(cM):\n                if M[ii][jj] is not None:\n                    rhere, chere = M[ii][jj].shape\n\n                    if rows[ii] is None:  # allocate\n                        rows[ii] = rhere\n                    else:  # check\n                        assert rows[ii] == rhere, \\\n                            'Block (%d,%d) has inconsistent size with other in same row!' % (ii, jj)\n\n                    if cols[jj] is None:  # allocate\n                        cols[jj] = chere\n                    else:  # check\n                        assert cols[jj] == chere, \\\n                            'Block (%d,%d) has inconsistent size with other in same column!' % (ii, jj)\n\n        return rows, cols\n\n    def project(self, WT, V, by_arrays=True, overwrite=False):\n        \"\"\"\n        Given 2 transformation matrices, (W,V) of shape (Nk,self.states), this\n        routine projects the state space model states according to:\n\n          Anew = W^T A V\n          Bnew = W^T B\n          Cnew = C V\n          Dnew = D\n\n        The projected model has the same number of inputs/outputs as the original\n        one, but Nk states.\n\n        Inputs:\n        - WT = W^T\n        - V = V\n        - by_arrays: if True, W, V are either numpy.array or sparse matrices. If\n          False, they are block matrices.\n        - overwrite: if True, overwrites the A, B, C matrices\n        \"\"\"\n\n        if by_arrays:  # transform to block structures\n\n            II0 = 0\n            Vblock = []\n            WTblock = [[]]\n            for ii in range(self.blocks_x):\n                iivec = range(II0, II0 + self.S_x[ii])\n                Vblock.append([V[iivec, :]])\n                WTblock[0].append(WT[:, iivec])\n                II0 += self.S_x[ii]\n        else:\n            Vblock = V\n            WTblock = WT\n\n        if overwrite:\n            self.A = libsp.block_dot(WTblock, libsp.block_dot(self.A, Vblock))\n            self.B = libsp.block_dot(WTblock, self.B)\n            self.C = libsp.block_dot(self.C, Vblock)\n        else:\n            return (libsp.block_dot(WTblock, libsp.block_dot(self.A, Vblock)),\n                    libsp.block_dot(WTblock, self.B),\n                    libsp.block_dot(self.C, Vblock))\n\n    def solve_step(self, xn, un):\n\n        # TODO: add options about predictor ...\n        xn1 = libsp.block_sum(libsp.block_dot(self.A, xn), libsp.block_dot(self.B, un))\n        yn = libsp.block_sum(libsp.block_dot(self.C, xn), libsp.block_dot(self.D, un))\n\n        return xn1, yn\n\n\n    def get_mats(self):\n        \n        A = np.zeros((self.states, self.states))\n        B = np.zeros((self.states, self.inputs))\n        C = np.zeros((self.outputs, self.states))\n        D = np.zeros((self.outputs, self.inputs))\n        \n        iloc = 0\n        for i in range(self.blocks_x):\n            jloc = 0\n            for j in range(self.blocks_x):\n                if not self.A[i][j] is None:\n                    if type(self.A[i][j]) == libsp.csc_matrix:\n                        A[iloc:iloc+self.S_x[i], jloc:jloc+self.S_x[j]] = self.A[i][j].todense()\n                    else:\n                        A[iloc:iloc+self.S_x[i], jloc:jloc+self.S_x[j]] = self.A[i][j].copy()\n                jloc += self.S_x[j]\n            iloc += self.S_x[i]\n        \n        iloc = 0\n        for i in range(self.blocks_x):\n            jloc = 0\n            for j in range(self.blocks_u):\n                if not self.B[i][j] is None:\n                    # print(i, j, iloc, jloc, self.S_x[i], self.S_u[j], self.B[i][j].shape)\n                    # print(iloc, iloc+self.S_x[i], jloc, jloc+self.S_u[j])\n                    if type(self.B[i][j]) == libsp.csc_matrix:\n                        B[iloc:iloc+self.S_x[i], jloc:jloc+self.S_u[j]] = self.B[i][j].todense()\n                    else:\n                        B[iloc:iloc+self.S_x[i], jloc:jloc+self.S_u[j]] = self.B[i][j].copy()\n                jloc += self.S_u[j]\n            iloc += self.S_x[i]\n\n        iloc = 0\n        for i in range(self.blocks_y):\n            jloc = 0\n            for j in range(self.blocks_x):\n                if not self.C[i][j] is None:\n                    if type(self.C[i][j]) == libsp.csc_matrix:\n                        C[iloc:iloc+self.S_y[i], jloc:jloc+self.S_x[j]] = self.C[i][j].todense()\n                    else:\n                        C[iloc:iloc+self.S_y[i], jloc:jloc+self.S_x[j]] = self.C[i][j].copy()\n                jloc += self.S_x[j]\n            iloc += self.S_y[i]\n        \n        iloc = 0\n        for i in range(self.blocks_y):\n            jloc = 0\n            for j in range(self.blocks_u):\n                if not self.D[i][j] is None:\n                    if type(self.D[i][j]) == libsp.csc_matrix:\n                        D[iloc:iloc+self.S_y[i], jloc:jloc+self.S_u[j]] = self.D[i][j].todense()\n                    else:\n                        D[iloc:iloc+self.S_y[i], jloc:jloc+self.S_u[j]] = self.D[i][j].copy()\n                jloc += self.S_u[j]\n            iloc += self.S_y[i]\n\n        return A, B, C, D\n\n# ---------------------------------------- Methods for state-space manipulation\ndef project(ss_here, WT, V):\n    \"\"\"\n    Given 2 transformation matrices, (WT,V) of shapes (Nk,self.states) and\n    (self.states,Nk) respectively, this routine returns a projection of the\n    state space ss_here according to:\n\n        Anew = WT A V\n        Bnew = WT B\n        Cnew = C V\n        Dnew = D\n\n    The projected model has the same number of inputs/outputs as the original\n    one, but Nk states.\n    \"\"\"\n\n    Ap = libsp.dot(WT, libsp.dot(ss_here.A, V))\n    Bp = libsp.dot(WT, ss_here.B)\n    Cp = libsp.dot(ss_here.C, V)\n\n    return StateSpace(Ap, Bp, Cp, ss_here.D, ss_here.dt)\n\n\ndef couple(ss01, ss02, K12, K21, out_sparse=False):\n    \"\"\"\n    Couples 2 dlti systems ss01 and ss02 through the gains K12 and K21, where\n    K12 transforms the output of ss02 into an input of ss01.\n\n    Other inputs:\n        - out_sparse: if True, the output system is stored as sparse (not recommended)\n    \"\"\"\n    if ss01.dt is None and ss02.dt is None:\n        pass\n    else:\n        try:\n            assert np.abs(ss01.dt - ss02.dt) < 1e-10 * ss01.dt, 'Time-steps not matching!'\n        except TypeError:\n            raise TypeError('One of the systems to couple is discrete and the other continuous')\n\n    if ss01.input_variables is not None and ss02.input_variables is not None \\\n            and isinstance(K12, Gain) and isinstance(K21, Gain):\n        with_enhanced_vars = True\n        LinearVector.check_connection(K12.output_variables, ss01.input_variables)\n        LinearVector.check_connection(ss02.output_variables, K12.input_variables)\n\n        LinearVector.check_connection(K21.output_variables, ss02.input_variables)\n        LinearVector.check_connection(ss01.output_variables, K21.input_variables)\n        K21 = K21.value\n        K12 = K12.value\n    else:\n        with_enhanced_vars = False\n        assert K12.shape == (ss01.inputs, ss02.outputs), \\\n            'Gain K12 shape not matching with systems number of inputs/outputs'\n        assert K21.shape == (ss02.inputs, ss01.outputs), \\\n            'Gain K21 shape not matching with systems number of inputs/outputs'\n\n    A1, B1, C1, D1 = ss01.get_mats()\n    A2, B2, C2, D2 = ss02.get_mats()\n\n    # extract size\n    Nx1, Nu1 = B1.shape\n    Ny1 = C1.shape[0]\n    Nx2, Nu2 = B2.shape\n    Ny2 = C2.shape[0]\n\n    #  terms to invert\n    maxD1 = np.max(np.abs(D1))\n    maxD2 = np.max(np.abs(D2))\n    if maxD1 < 1e-32:\n        pass\n    if maxD2 < 1e-32:\n        pass\n\n    # compute self-influence gains\n    K11 = libsp.dot(K12, libsp.dot(D2, K21))\n    K22 = libsp.dot(K21, libsp.dot(D1, K12))\n\n    # left hand side terms\n    L1 = libsp.dot(-K11, D1)\n    L2 = libsp.dot(-K22, D2)\n    L1 += libsp.eye_as(L1)\n    L2 += libsp.eye_as(L2)\n\n    # coupling terms\n    cpl_12 = libsp.solve(L1, K12)\n    cpl_21 = libsp.solve(L2, K21)\n\n    cpl_11 = libsp.dot(cpl_12, libsp.dot(D2, K21))\n    cpl_22 = libsp.dot(cpl_21, libsp.dot(D1, K12))\n\n    # Build coupled system\n    if out_sparse:\n        raise NameError('out_sparse=True not supported yet (verify if worth it first).')\n    else:\n        A = np.block([\n            [libsp.dense(A1 + libsp.dot(libsp.dot(B1, cpl_11), C1)), libsp.dense(libsp.dot(libsp.dot(B1, cpl_12), C2))],\n            [libsp.dense(libsp.dot(libsp.dot(B2, cpl_21), C1)),\n             libsp.dense(A2 + libsp.dot(libsp.dot(B2, cpl_22), C2))]])\n\n        C = np.block([\n            [libsp.dense(C1 + libsp.dot(libsp.dot(D1, cpl_11), C1)), libsp.dense(libsp.dot(libsp.dot(D1, cpl_12), C2))],\n            [libsp.dense(libsp.dot(libsp.dot(D2, cpl_21), C1)),\n             libsp.dense(C2 + libsp.dot(libsp.dot(D2, cpl_22), C2))]])\n\n        B = np.block([\n            [libsp.dense(B1 + libsp.dot(libsp.dot(B1, cpl_11), D1)), libsp.dense(libsp.dot(libsp.dot(B1, cpl_12), D2))],\n            [libsp.dense(libsp.dot(libsp.dot(B2, cpl_21), D1)),\n             libsp.dense(B2 + libsp.dot(libsp.dot(B2, cpl_22), D2))]])\n\n        D = np.block([\n            [libsp.dense(D1 + libsp.dot(libsp.dot(D1, cpl_11), D1)), libsp.dense(libsp.dot(libsp.dot(D1, cpl_12), D2))],\n            [libsp.dense(libsp.dot(libsp.dot(D2, cpl_21), D1)),\n             libsp.dense(D2 + libsp.dot(libsp.dot(D2, cpl_22), D2))]])\n\n    coupled_ss = StateSpace(A, B, C, D, dt=ss01.dt)\n    if with_enhanced_vars:\n        coupled_ss.state_variables = LinearVector.merge(ss01.state_variables, ss02.state_variables)\n        coupled_ss.input_variables = LinearVector.merge(ss01.input_variables, ss02.input_variables)\n        coupled_ss.output_variables = LinearVector.merge(ss01.output_variables, ss02.output_variables)\n\n    return coupled_ss\n\n\ndef disc2cont(sys):\n    r\"\"\"\n    Transform a discrete time system to a continuous time system using a bilinear (Tustin) transformation.\n\n    Given a discrete time system with time step :math:`\\Delta T`, the equivalent continuous time system is given\n    by:\n\n    .. math::\n        \\bar{A} &= \\omega_0(A-I)(I + A)^{-1}  \\\\\n        \\bar{B} &= \\sqrt{2\\omega_0}(I+A)^{-1}B  \\\\\n        \\bar{C} &= \\sqrt{2\\omega_0}C(I+A)^{-1}  \\\\\n        \\bar{D} &= D - C(I+A)^{-1}B\n\n    where :math:`\\omega_0 = \\frac{2}{\\Delta T}`.\n\n    References:\n        MIT OCW 6.245\n\n    Args:\n        sys (libss.StateSpace): SHARPy discrete-time state-space object.\n\n    Returns:\n        libss.StateSpace: Converted continuous-time state-space object.\n    \"\"\"\n\n    assert sys.dt is not None, 'System to transform is not a discrete-time system.'\n\n    n = sys.A.shape[0]\n    eye = np.eye(n)\n    eye_a_inv = np.linalg.inv(sys.A + eye)\n    omega_0 = 2 / sys.dt\n\n    a = omega_0 * (sys.A - eye).dot(eye_a_inv)\n    b = np.sqrt(2 * omega_0) * eye_a_inv.dot(sys.B)\n    c = np.sqrt(2 * omega_0) * sys.C.dot(eye_a_inv)\n    d = sys.D - sys.C.dot(eye_a_inv.dot(sys.B))\n\n    sys_ct = StateSpace(a, b, c, d)\n\n    if sys.input_variables is not None:\n        sys_ct.input_variables = sys.input_variables\n        sys_ct.state_variables = sys.state_variables\n        sys_ct.output_variables = sys.output_variables\n\n    return sys_ct\n\n\ndef retain_inout_channels(sys, retain_channels, where):\n    \"\"\"\n    Retain selected input or output channels only.\n\n    Args:\n        retain_channels (list): List of channels to retain\n        where (str): ``in`` or ``out`` for input/output channels\n\n    Returns:\n        StateSpace: Updated state-space object\n    \"\"\"\n    retain_m = len(retain_channels)  # new number of in/out\n\n    if where == 'in':\n        m = sys.inputs  # current number of in/out\n        gain_input_vars = sys.input_variables\n        gain_output_vars = LinearVector.transform(sys.input_variables, to_type=OutputVariable)\n    elif where == 'out':\n        m = sys.outputs\n        gain_input_vars = LinearVector.transform(sys.output_variables, to_type=InputVariable)\n        gain_output_vars = sys.output_variables.copy()\n    else:\n        raise NameError('Argument ``where`` can only be ``in`` or ``out``.')\n\n    gain_matrix = np.zeros((retain_m, m))\n    for ith, channel in enumerate(retain_channels):\n        gain_matrix[ith, channel] = 1\n\n    # Go through variables...\n    for var in gain_input_vars:\n        n_vars = np.sum(\n            (np.array(retain_channels) < var.end_position) * (np.array(retain_channels) >= var.first_position))\n\n        if n_vars == 0:\n            gain_output_vars.remove(var.name)\n        else:\n            gain_output_vars.modify(var.name, size=n_vars)\n\n    gain_output_vars.update_indices()\n    gain_output_vars.update_locations()\n\n    gain_matrix = Gain(gain_matrix,\n                       input_vars=gain_input_vars,\n                       output_vars=gain_output_vars)\n\n    if where == 'in':\n        sys.addGain(gain_matrix.transpose(), where='in')\n    elif where == 'out':\n        sys.addGain(gain_matrix, where='out')\n    else:\n        raise NameError('Argument ``where`` can only be ``in`` or ``out``.')\n\n    return sys\n\n\ndef freqresp(SS, wv, dlti=True):\n    \"\"\"\n    In-house frequency response function supporting dense/sparse types\n\n    Inputs:\n    - SS: instance of StateSpace class, or scipy.signal.StateSpace*\n    - wv: frequency range\n    - dlti: True if discrete-time system is considered.\n\n    Outputs:\n    - Yfreq[outputs,inputs,len(wv)]: frequency response over wv\n\n    Warnings:\n    -  This function may not be very efficient for dense matrices (as A is not\n    reduced to upper Hessenberg form), but can exploit sparsity in the state-space\n    matrices.\n    \"\"\"\n\n    assert type(SS) == StateSpace, \\\n        'Type %s of state-space model not supported. Use libss.StateSpace instead!' % type(SS)\n    SS.check_types()\n\n    if hasattr(SS, 'dt') and dlti:\n        Ts = SS.dt\n        wTs = Ts * wv\n        zv = np.cos(wTs) + 1.j * np.sin(wTs)\n    else:\n        # print('Assuming a continuous time system')\n        zv = 1.j * wv\n\n    Nx = SS.A.shape[0]\n    Ny = SS.D.shape[0]\n    try:\n        Nu = SS.B.shape[1]\n    except IndexError:\n        Nu = 1\n\n    Nw = len(wv)\n\n    Yfreq = np.empty((Ny, Nu, Nw,), dtype=np.complex_)\n    Eye = libsp.eye_as(SS.A)\n    for ii in range(Nw):\n        sol_cplx = libsp.solve(zv[ii] * Eye - SS.A, SS.B)\n        Yfreq[:, :, ii] = libsp.dot(SS.C, sol_cplx, type_out=np.ndarray) + SS.D\n\n    return Yfreq\n\n\ndef series(SS01, SS02):\n    r\"\"\"\n    Connects two state-space blocks in series. If these are instances of DLTI\n    state-space systems, they need to have the same type and time-step. If the input systems are sparse, they are\n    converted to dense.\n\n    The connection is such that:\n\n    .. math::\n        u \\rightarrow \\mathsf{SS01} \\rightarrow \\mathsf{SS02} \\rightarrow y \\Longrightarrow\n        u \\rightarrow \\mathsf{SStot} \\rightarrow y\n\n    where the state vector :math:`x` is :math:`[x_1, x_2]`.\n\n    Args:\n        SS01 (libss.StateSpace): State Space 1 instance. Can be DLTI/CLTI, dense or sparse.\n        SS02 (libss.StateSpace): State Space 2 instance. Can be DLTI/CLTI, dense or sparse.\n\n    Returns\n        libss.StateSpace: Combined state space system in series in dense format.\n    \"\"\"\n\n    if type(SS01) is not type(SS02):\n        raise TypeError('The two input systems are not of the same type')\n    if SS01.dt != SS02.dt:\n        raise NameError('DLTI systems do not have the same time-step. SS01 dt={:f}, SS02 dt={:f}'.format(\n            SS01.dt, SS02.dt))\n\n    # check series connection\n    if SS01.output_variables is not None and SS02.input_variables is not None:\n        LinearVector.check_connection(SS01.output_variables, SS02.input_variables)\n        # for i_var in range(SS01.output_variables.num_variables):\n        #     out1 = SS01.output_variables[i_var]\n        #     in2 = SS02.input_variables[i_var]\n        #     if out1.name != in2.name:\n        #         raise NameError('Series coupling outputs1 and inputs2 have different names')\n        #     if not (out1.rows_loc == in2.cols_loc).all:\n        #         raise IndexError('Series coupling. Output1 channels do not line up with input2 channels.')\n\n    # determine size of total system\n    Nst01, Nst02 = SS01.states, SS02.states\n    Nst = Nst01 + Nst02\n    Nin = SS01.inputs\n    Nout = SS02.outputs\n\n    if SS01.outputs != SS02.inputs:\n        raise ValueError('SS01 outputs not equal to SS02 inputs,\\nSS01={:s}\\nSS02={:s}'.format(str(SS01), str(SS02)))\n\n    # Build A matrix\n    A = np.zeros((Nst, Nst))\n\n    A[:Nst01, :Nst01] = libsp.dense(SS01.A)\n    A[Nst01:, Nst01:] = libsp.dense(SS02.A)\n    A[Nst01:, :Nst01] = libsp.dense(libsp.dot(SS02.B, SS01.C))\n\n    # Build the rest\n    B = np.concatenate((libsp.dense(SS01.B), libsp.dense(libsp.dot(SS02.B, SS01.D))), axis=0)\n    C = np.concatenate((libsp.dense(libsp.dot(SS02.D, SS01.C)), libsp.dense(SS02.C)), axis=1)\n    D = libsp.dense(libsp.dot(SS02.D, SS01.D))\n\n    SStot = StateSpace(A, B, C, D, dt=SS01.dt)\n\n    SStot.input_variables = SS01.input_variables\n    try:\n        SStot.state_variables = LinearVector.merge(SS01.state_variables, SS02.state_variables)\n    except AttributeError:\n        SStot.state_variables = None\n    SStot.output_variables = SS02.output_variables\n\n    return SStot\n\n\ndef parallel(SS01, SS02):\n    \"\"\"\n    Returns the sum (or parallel connection of two systems). Given two state-space\n    models with the same output, but different input:\n        u1 --> SS01 --> y\n        u2 --> SS02 --> y\n\n    \"\"\"\n\n    if type(SS01) is not type(SS02):\n        raise NameError('The two input systems need to have the same size!')\n    if SS01.dt != SS02.dt:\n        raise NameError('DLTI systems do not have the same time-step!')\n    Nout = SS02.outputs\n    if Nout != SS01.outputs:\n        raise NameError('DLTI systems need to have the same number of output!')\n\n    # if type(SS01) is control.statesp.StateSpace:\n    # \tSStot=control.parallel(SS01,SS02)\n    # else:\n\n    # determine size of total system\n    Nst01, Nst02 = SS01.states, SS02.states\n    Nst = Nst01 + Nst02\n    Nin01, Nin02 = SS01.inputs, SS02.inputs\n    Nin = Nin01 + Nin02\n\n    # Build A,B matrix\n    A = np.zeros((Nst, Nst))\n    A[:Nst01, :Nst01] = SS01.A\n    A[Nst01:, Nst01:] = SS02.A\n    B = np.zeros((Nst, Nin))\n    B[:Nst01, :Nin01] = SS01.B\n    B[Nst01:, Nin01:] = SS02.B\n\n    # Build the rest\n    C = np.block([SS01.C, SS02.C])\n    D = np.block([SS01.D, SS02.D])\n\n    SStot = scsig.dlti(A, B, C, D, dt=SS01.dt)\n\n    return SStot\n\n\ndef SSconv(A, B0, B1, C, D, Bm1=None):\n    r\"\"\"\n    Convert a DLTI system with prediction and delay of the form:\n\n        .. math::\n            \\mathbf{x}_{n+1} &= \\mathbf{A\\,x}_n + \\mathbf{B_0\\,u}_n + \\mathbf{B_1\\,u}_{n+1} + \\mathbf{B_{m1}\\,u}_{n-1} \\\\\n            \\mathbf{y}_n &= \\mathbf{C\\,x}_n + \\mathbf{D\\,u}_n\n\n    into the state-space form:\n\n        .. math::\n            \\mathbf{h}_{n+1} &= \\mathbf{A_h\\,h}_n + \\mathbf{B_h\\,u}_n \\\\\n            \\mathbf{y}_n &= \\mathbf{C_h\\,h}_n + \\mathbf{D_h\\,u}_n\n\n    If :math:`\\mathbf{B_{m1}}` is ``None``, the original state is retrieved through\n\n        .. math:: \\mathbf{x}_n = \\mathbf{h}_n + \\mathbf{B_1\\,u}_n\n\n    and only the :math:`\\mathbf{B}` and :math:`\\mathbf{D}` matrices are modified.\n\n\n    If :math:`\\mathbf{B_{m1}}` is not ``None``, the SS is augmented with the new state\n\n        .. math:: \\mathbf{g}_{n} = \\mathbf{u}_{n-1}\n\n    or, equivalently, with the equation\n\n        .. math:: \\mathbf{g}_{n+1} = \\mathbf{u}_n\n\n    leading to the new form\n\n        .. math::\n            \\mathbf{H}_{n+1} &= \\mathbf{A_A\\,H}_{n} + \\mathbf{B_B\\,u}_n \\\\\n            \\mathbf{y}_n &= \\mathbf{C_C\\,H}_{n} + \\mathbf{D_D\\,u}_n\n\n    where :math:`\\mathbf{H} = (\\mathbf{x},\\,\\mathbf{g})`.\n\n    Args:\n        A (np.ndarray): dynamics matrix\n        B0 (np.ndarray): input matrix for input at current time step ``n``. Set to None if this is zero.\n        B1 (np.ndarray): input matrix for input at time step ``n+1`` (predictor term)\n        C (np.ndarray): output matrix\n        D (np.ndarray): direct matrix\n        Bm1 (np.ndarray): input matrix for input at time step ``n-1`` (delay term)\n\n    Returns:\n        tuple: tuple packed with the state-space matrices :math:`\\mathbf{A},\\,\\mathbf{B},\\,\\mathbf{C}` and :math:`\\mathbf{D}`.\n\n    References:\n        Franklin, GF and Powell, JD. Digital Control of Dynamic Systems, Addison-Wesley Publishing Company, 1980\n\n    Warnings:\n        functions untested for delays (Bm1 != 0)\n    \"\"\"\n\n    # Account for u^{n+1} terms (prediction)\n    if B0 is None:\n        Bh = libsp.dot(A, B1)\n    else:\n        Bh = B0 + libsp.dot(A, B1)\n    Dh = D + libsp.dot(C, B1)\n\n    # Account for u^{n-1} terms (delay)\n    if Bm1 is None:\n        outs = (A, Bh, C, Dh)\n    else:\n        warnings.warn('Function untested when Bm1!=None')\n\n        Nx, Nu, Ny = A.shape[0], Bh.shape[1], C.shape[0]\n        AA = np.block([[A, Bm1],\n                       [np.zeros((Nu, Nx)), np.zeros((Nu, Nu))]])\n        BB = np.block([[Bh], [np.eye(Nu)]])\n        CC = np.block([C, np.zeros((Ny, Nu))])\n        DD = Dh\n        outs = (AA, BB, CC, DD)\n\n    return outs\n\n\ndef addGain(SShere, Kmat, where):\n    \"\"\"\n    Convert input u or output y of a SS DLTI system through gain matrix K. We\n    have the following transformations:\n    - where='in': the input dof of the state-space are changed\n        u_new -> Kmat*u -> SS -> y  => u_new -> SSnew -> y\n    - where='out': the output dof of the state-space are changed\n         u -> SS -> y -> Kmat*u -> ynew => u -> SSnew -> ynew\n    - where='parallel': the input dofs are changed, but not the output\n         -\n        {u_1 -> SS -> y_1\n       { u_2 -> y_2= Kmat*u_2    =>    u_new=(u_1,u_2) -> SSnew -> y=y_1+y_2\n        {y = y_1+y_2\n         -\n    Warning: function not tested for Kmat stored in sparse format\n    \"\"\"\n\n    assert where in ['in', 'out', 'parallel-down', 'parallel-up'], \\\n        'Specify whether gains are added to input or output'\n\n    if where == 'in':\n        A = SShere.A\n        B = SShere.B.dot(Kmat)\n        C = SShere.C\n        D = SShere.D.dot(Kmat)\n\n    if where == 'out':\n        A = SShere.A\n        B = SShere.B\n        C = Kmat.dot(SShere.C)\n        D = Kmat.dot(SShere.D)\n\n    if where == 'parallel-down':\n        A = SShere.A\n        C = SShere.C\n        B = np.block([SShere.B, np.zeros((SShere.B.shape[0], Kmat.shape[1]))])\n        D = np.block([SShere.D, Kmat])\n\n    if where == 'parallel-up':\n        A = SShere.A\n        C = SShere.C\n        B = np.block([np.zeros((SShere.B.shape[0], Kmat.shape[1])), SShere.B])\n        D = np.block([Kmat, SShere.D])\n\n    if SShere.dt == None:\n        SSnew = StateSpace(A, B, C, D)\n    else:\n        SSnew = StateSpace(A, B, C, D, dt=SShere.dt)\n\n    return SSnew\n\n\ndef join2(SS1, SS2):\n    r\"\"\"\n    Join two state-spaces or gain matrices such that, given:\n\n        .. math::\n            \\mathbf{u}_1 \\longrightarrow &\\mathbf{SS}_1 \\longrightarrow \\mathbf{y}_1 \\\\\n            \\mathbf{u}_2 \\longrightarrow &\\mathbf{SS}_2 \\longrightarrow \\mathbf{y}_2\n\n    we obtain:\n\n        .. math::\n            \\mathbf{u} \\longrightarrow \\mathbf{SS}_{TOT} \\longrightarrow \\mathbf{y}\n\n    with :math:`\\mathbf{u}=(\\mathbf{u}_1,\\mathbf{u}_2)^T` and :math:`\\mathbf{y}=(\\mathbf{y}_1,\\mathbf{y}_2)^T`.\n\n    The output :math:`\\mathbf{SS}_{TOT}` is either a gain matrix or a state-space system according\n    to the input :math:`\\mathbf{SS}_1` and :math:`\\mathbf{SS}_2`\n\n    Args:\n        SS1 (scsig.StateSpace or np.ndarray): State space 1 or gain 1\n        SS2 (scsig.StateSpace or np.ndarray): State space 2 or gain 2\n\n    Returns:\n        scsig.StateSpace or np.ndarray: combined state space or gain matrix\n\n    \"\"\"\n    type_dlti = scsig.ltisys.StateSpaceDiscrete\n\n    if isinstance(SS1, np.ndarray) and isinstance(SS2, np.ndarray):\n\n        Nin01, Nin02 = SS1.shape[1], SS2.shape[1]\n        Nout01, Nout02 = SS1.shape[0], SS2.shape[0]\n        SStot = np.block([[SS1, np.zeros((Nout01, Nin02))],\n                          [np.zeros((Nout02, Nin01)), SS2]])\n\n    elif isinstance(SS1, np.ndarray) and isinstance(SS2, type_dlti):\n\n        Nin01, Nout01 = SS1.shape[1], SS1.shape[0]\n        Nin02, Nout02 = SS2.inputs, SS2.outputs\n        Nx02 = SS2.A.shape[0]\n\n        A = SS2.A\n        B = np.block([np.zeros((Nx02, Nin01)), SS2.B])\n        C = np.block([[np.zeros((Nout01, Nx02))],\n                      [SS2.C]])\n        D = np.block([[SS1, np.zeros((Nout01, Nin02))],\n                      [np.zeros((Nout02, Nin01)), SS2.D]])\n\n        SStot = scsig.StateSpace(A, B, C, D, dt=SS2.dt)\n\n    elif isinstance(SS1, type_dlti) and isinstance(SS2, np.ndarray):\n\n        Nin01, Nout01 = SS1.inputs, SS1.outputs\n        Nin02, Nout02 = SS2.shape[1], SS2.shape[0]\n        Nx01 = SS1.A.shape[0]\n\n        A = SS1.A\n        B = np.block([SS1.B, np.zeros((Nx01, Nin02))])\n        C = np.block([[SS1.C],\n                      [np.zeros((Nout02, Nx01))]])\n        D = np.block([[SS1.D, np.zeros((Nout01, Nin02))],\n                      [np.zeros((Nout02, Nin01)), SS2]])\n\n        SStot = scsig.StateSpace(A, B, C, D, dt=SS1.dt)\n\n    elif isinstance(SS1, type_dlti) and isinstance(SS2, type_dlti):\n\n        assert SS1.dt == SS2.dt, 'State-space models must have the same time-step'\n\n        Nin01, Nout01 = SS1.inputs, SS1.outputs\n        Nin02, Nout02 = SS2.inputs, SS2.outputs\n        Nx01, Nx02 = SS1.A.shape[0], SS2.A.shape[0]\n\n        A = np.block([[SS1.A, np.zeros((Nx01, Nx02))],\n                      [np.zeros((Nx02, Nx01)), SS2.A]])\n        B = np.block([[SS1.B, np.zeros((Nx01, Nin02))],\n                      [np.zeros((Nx02, Nin01)), SS2.B]])\n        C = np.block([[SS1.C, np.zeros((Nout01, Nx02))],\n                      [np.zeros((Nout02, Nx01)), SS2.C]])\n        D = np.block([[SS1.D, np.zeros((Nout01, Nin02))],\n                      [np.zeros((Nout02, Nin01)), SS2.D]])\n        SStot = scsig.StateSpace(A, B, C, D, dt=SS1.dt)\n\n    else:\n        raise NameError('Input types not recognised in any implemented option!')\n\n    return SStot\n\n\ndef join(SS_list, wv=None):\n    \"\"\"\n    Given a list of state-space models belonging to the StateSpace class, creates a\n    joined system whose output is the sum of the state-space outputs. If wv is\n    not None, this is a list of weights, such that the output is:\n\n        y = sum( wv[ii] y_ii )\n\n    Ref: equation (4.22) of\n    Benner, P., Gugercin, S. & Willcox, K., 2015. A Survey of Projection-Based\n    Model Reduction Methods for Parametric Dynamical Systems. SIAM Review, 57(4),\n    pp.483–531.\n\n    Warnings:\n        - system matrices must be numpy arrays\n        - the function does not perform any check!\n    \"\"\"\n\n    N = len(SS_list)\n    if wv is not None:\n        assert N == len(wv), \"'weights input should have'\"\n\n    A = scalg.block_diag(*[getattr(ss, 'A') for ss in SS_list])\n    B = np.block([[getattr(ss, 'B')] for ss in SS_list])\n\n    if wv is None:\n        C = np.block([getattr(ss, 'C') for ss in SS_list])\n    else:\n        C = np.block([ww * getattr(ss, 'C') for ww, ss in zip(wv, SS_list)])\n\n    D = np.zeros_like(SS_list[0].D)\n    for ii in range(N):\n        if wv is None:\n            D += SS_list[ii].D\n        else:\n            D += wv[ii] * SS_list[ii].D\n\n    return StateSpace(A, B, C, D, SS_list[0].dt)\n\n\ndef sum_ss(SS1, SS2, negative=False):\n    \"\"\"\n    Given 2 systems or gain matrices (or a combination of the two) having the\n    same amount of input/output, the function returns a gain or state space\n    model summing the two. Namely, given:\n        u -> SS1 -> y1\n        u -> SS2 -> y2\n    we obtain:\n        u -> SStot -> y1+y2 \tif negative=False\n    \"\"\"\n    type_dlti = scsig.ltisys.StateSpaceDiscrete\n\n    if isinstance(SS1, np.ndarray) and isinstance(SS2, np.ndarray):\n        SStot = SS1 + SS2\n\n    elif isinstance(SS1, np.ndarray) and isinstance(SS2, type_dlti):\n        Kmat = SS1\n        A = SS2.A\n        B = SS2.B\n        C = SS2.C\n        D = SS2.D + Kmat\n        SStot = scsig.StateSpace(A, B, C, D, dt=SS2.dt)\n\n    elif isinstance(SS1, type_dlti) and isinstance(SS2, np.ndarray):\n        Kmat = SS2\n        A = SS1.A\n        B = SS1.B\n        C = SS1.C\n        D = SS1.D + Kmat\n\n        SStot = scsig.StateSpace(A, B, C, D, dt=SS2.dt)\n\n    elif isinstance(SS1, type_dlti) and isinstance(SS2, type_dlti):\n\n        assert np.abs(1. - SS1.dt / SS2.dt) < 1e-13, \\\n            'State-space models must have the same time-step'\n\n        Nin01, Nout01 = SS1.inputs, SS1.outputs\n        Nin02, Nout02 = SS2.inputs, SS2.outputs\n        Nx01, Nx02 = SS1.A.shape[0], SS2.A.shape[0]\n\n        A = np.block([[SS1.A, np.zeros((Nx01, Nx02))],\n                      [np.zeros((Nx02, Nx01)), SS2.A]])\n        B = np.block([[SS1.B, ],\n                      [SS2.B]])\n        C = np.block([SS1.C, SS2.C])\n        D = SS1.D + SS2.D\n\n        SStot = scsig.StateSpace(A, B, C, D, dt=SS1.dt)\n\n\n    else:\n        raise NameError('Input types not recognised in any implemented option!')\n\n    return SStot\n\n\ndef scale_SS(SSin, input_scal=1., output_scal=1., state_scal=1., byref=True):\n    r\"\"\"\n    Given a state-space system, scales the equations such that the original\n    input and output, :math:`u` and :math:`y`, are substituted by :math:`u_{AD}=\\frac{u}{u_{ref}}`\n    and :math:`y_{AD}=\\frac{y}{y_{ref}}`.\n\n    If the original system has form:\n\n        .. math::\n                \\mathbf{x}^{n+1} &= \\mathbf{A\\,x}^n + \\mathbf{B\\,u}^n \\\\\n                \\mathbf{y}^{n} &= \\mathbf{C\\,x}^{n} + \\mathbf{D\\,u}^n\n\n    the transformation is such that:\n\n        .. math::\n                \\mathbf{x}^{n+1} &= \\mathbf{A\\,x}^n + \\mathbf{B}\\,\\frac{u_{ref}}{x_{ref}}\\mathbf{u_{AD}}^n \\\\\n                \\mathbf{y_{AD}}^{n+1} &= \\frac{1}{y_{ref}}(\\mathbf{C}\\,x_{ref}\\,\\mathbf{x}^{n+1} + \\mathbf{D}\\,u_{ref}\\,\\mathbf{u_{AD}}^n)\n\n    By default, the state-space model is manipulated by reference (``byref=True``)\n\n    Args:\n        SSin (scsig.dlti): original state-space formulation\n        input_scal (float or np.ndarray): input scaling factor :math:`u_{ref}`. It can be a float or an array, in which\n                                          case the each element of the input vector will be scaled by a different\n                                          factor.\n        output_scal (float or np.ndarray): output scaling factor :math:`y_{ref}`. It can be a float or an array, in which\n                                           case the each element of the output vector will be scaled by a different\n                                           factor.\n        state_scal (float or np.ndarray): state scaling factor :math:`x_{ref}`. It can be a float or an array, in which\n                                          case the each element of the state vector will be scaled by a different\n                                          factor.\n        byref (bool): state space manipulation order\n\n    Returns:\n          scsig.dlti: scaled state space formulation\n    \"\"\"\n\n    # check input:\n    Nin, Nout = SSin.inputs, SSin.outputs\n    Nstates = SSin.A.shape[0]\n\n    if isinstance(input_scal, (list, np.ndarray)):\n        assert len(input_scal) == Nin, \\\n            'Length of input_scal not matching number of state-space inputs!'\n    else:\n        input_scal = Nin * [input_scal]\n\n    if isinstance(output_scal, (list, np.ndarray)):\n        assert len(output_scal) == Nout, \\\n            'Length of output_scal not matching number of state-space outputs!'\n    else:\n        output_scal = Nout * [output_scal]\n\n    if isinstance(state_scal, (list, np.ndarray)):\n        assert len(state_scal) == Nstates, \\\n            'Length of state_scal not matching number of state-space states!'\n    else:\n        state_scal = Nstates * [state_scal]\n\n    if byref:\n        SS = SSin\n    else:\n        print('deep-copying state-space model before scaling')\n        SS = copy.deepcopy(SSin)\n\n    # update input related matrices\n    for ii in range(Nin):\n        SS.B[:, ii] = SS.B[:, ii] * input_scal[ii]\n        SS.D[:, ii] = SS.D[:, ii] * input_scal[ii]\n        # SS.B[:,ii]*=input_scal[ii]\n        # SS.D[:,ii]*=input_scal[ii]\n\n    # update output related matrices\n    for ii in range(Nout):\n        SS.C[ii, :] = SS.C[ii, :] / output_scal[ii]\n        SS.D[ii, :] = SS.D[ii, :] / output_scal[ii]\n        # SS.C[ii,:]/=output_scal[ii]\n        # SS.D[ii,:]/=output_scal[ii]\n\n    # update state related matrices\n    for ii in range(Nstates):\n        SS.B[ii, :] = SS.B[ii, :] / state_scal[ii]\n        SS.C[:, ii] = SS.C[:, ii] * state_scal[ii]\n        # SS.B[ii,:]/=state_scal[ii]\n        # SS.C[:,ii]*=state_scal[ii]\n\n    return SS\n\n\ndef simulate(SShere, U, x0=None):\n    \"\"\"\n    Routine to simulate response to generic input.\n\n    Warnings:\n        This routine is for testing and may lack of robustness. Use\n        scipy.signal instead.\n    \"\"\"\n\n    A, B, C, D = SShere.A, SShere.B, SShere.C, SShere.D\n\n    NT = U.shape[0]\n    Nx = A.shape[0]\n    Ny = C.shape[0]\n\n    X = np.zeros((NT, Nx))\n    Y = np.zeros((NT, Ny))\n\n    if x0 is not None: X[0] = x0\n    if len(U.shape) == 1:\n        U = U.reshape((NT, 1))\n\n    Y[0] = libsp.dot(C, X[0]) + libsp.dot(D, U[0])\n\n    for ii in range(1, NT):\n        X[ii] = libsp.dot(A, X[ii - 1]) + libsp.dot(B, U[ii - 1])\n        Y[ii] = libsp.dot(C, X[ii]) + libsp.dot(D, U[ii])\n\n    return Y, X\n\n\ndef Hnorm_from_freq_resp(gv, method):\n    \"\"\"\n    Given a frequency response over a domain kv, this funcion computes the\n    H norms through numerical integration.\n\n    Note that if kv[-1]<np.pi/dt, the method assumed gv=0 for each frequency\n    kv[-1]<k<np.pi/dt.\n\n    Warning: only use for SISO systems! For MIMO definitions are different\n    \"\"\"\n\n    if method == 'H2':\n        Nk = len(gv)\n        gvsq = gv * gv.conj()\n        Gnorm = np.sqrt(np.trapz(gvsq / (Nk - 1.)))\n\n    elif method == 'Hinf':\n        Gnorm = np.linalg.norm(gv, np.inf)\n\n    if np.abs(Gnorm.imag / Gnorm.real) > 1e-16:\n        raise NameError('Norm is not a real number. Verify data/algorithm!')\n\n    return Gnorm\n\n\ndef adjust_phase(y, deg=True):\n    \"\"\"\n    Modify the phase y of a frequency response to remove discontinuities.\n    \"\"\"\n\n    if deg is True:\n        shift = 360.\n    else:\n        shift = 2. * np.pi\n\n    dymax = 0.0\n\n    N = len(y)\n    for ii in range(N - 1):\n        dy = y[ii + 1] - y[ii]\n        if np.abs(dy) > dymax: dymax = np.abs(dy)\n        if dy > 0.97 * shift:\n            print('Subtracting shift to frequency response phase diagram!')\n            y[ii + 1::] = y[ii + 1::] - shift\n\n        elif dy < -0.97 * shift:\n            y[ii + 1::] = y[ii + 1::] + shift\n            print('Adding shift to frequency response phase diagram!')\n\n    return y\n\n\n# -------------------------------------------------------------- Special Models\n\n\ndef SSderivative(ds):\n    \"\"\"\n    Given a time-step ds, and an single input time history u, this SS model\n    returns the output y=[u,du/ds], where du/dt is computed with second order\n    accuracy.\n    \"\"\"\n\n    A = np.array([[0]])\n    Bm1 = np.array([0.5 / ds])\n    B0 = np.array([[-2 / ds]])\n    B1 = np.array([[1.5 / ds]])\n    C = np.array([[0], [1]])\n    D = np.array([[1], [0]])\n\n    # change state\n    Aout, Bout, Cout, Dout = SSconv(A, B0, B1, C, D, Bm1)\n\n    return Aout, Bout, Cout, Dout\n\n\ndef SSintegr(ds, method='trap'):\n    \"\"\"\n    Builds a state-space model of an integrator.\n\n    - method: Numerical scheme. Available options are:\n        - 1tay: 1st order Taylor (fwd)\n                I[ii+1,:]=I[ii,:] + ds*F[ii,:]\n        - trap: I[ii+1,:]=I[ii,:] + 0.5*dx*(F[ii,:]+F[ii+1,:])\n\n        Note: other option can be constructured if information on derivative of\n        F is available  (for e.g.)\n    \"\"\"\n\n    A = np.array([[1]])\n    C = np.array([[1.]])\n    D = np.array([[0.]])\n\n    if method == '1tay':\n        Bm1 = np.array([0.])\n        B0 = np.array([[ds]])\n        B1 = np.array([[0.]])\n        Aout, Bout, Cout, Dout = A, B0, C, D\n\n    elif method == 'trap':\n        Bm1 = np.array([0.])\n        B0 = np.array([[.5 * ds]])\n        B1 = np.array([[.5 * ds]])\n        Aout, Bout, Cout, Dout = SSconv(A, B0, B1, C, D, Bm1=None)\n\n    else:\n        raise NameError('Method %s not available!' % method)\n\n    # change state\n\n    return Aout, Bout, Cout, Dout\n\n\ndef build_SS_poly(Acf, ds, negative=False):\n    \"\"\"\n    Builds a discrete-time state-space representation of a polynomial system\n    whose frequency response has from:\n        Ypoly[oo,ii](k) = -A2[oo,ii] D2(k) - A1[oo,ii] D1(k) - A0[oo,ii]\n    where C1,D2 are discrete-time models of first and second derivatives, ds is\n    the time-step and the coefficient matrices are such that:\n        A{nn}=Acf[oo,ii,nn]\n    \"\"\"\n\n    Nout, Nin, Ncf = Acf.shape\n    assert Ncf == 3, 'Acf input last dimension must be equal to 3!'\n\n    Ader, Bder, Cder, Dder = SSderivative(ds)\n    SSder = scsig.dlti(Ader, Bder, Cder, Dder, dt=ds)\n    SSder02 = series(SSder, join2(np.array([[1]]), SSder))\n\n    SSder_all = copy.deepcopy(SSder02)\n    for ii in range(Nin - 1):\n        SSder_all = join2(SSder_all, SSder02)\n\n    # Build polynomial forcing terms\n    sign = 1.0\n    if negative == True: sign = -1.0\n\n    A0 = Acf[:, :, 0]\n    A1 = Acf[:, :, 1]\n    A2 = Acf[:, :, 2]\n    Kforce = np.zeros((Nout, 3 * Nin))\n    for ii in range(Nin):\n        Kforce[:, 3 * ii] = sign * (A0[:, ii])\n        Kforce[:, 3 * ii + 1] = sign * (A1[:, ii])\n        Kforce[:, 3 * ii + 2] = sign * (A2[:, ii])\n    SSpoly_neg = addGain(SSder_all, Kforce, where='out')\n\n    return SSpoly_neg\n\n\ndef butter(order, Wn, N=1, btype='lowpass'):\n    \"\"\"\n    build MIMO butterworth filter of order ord and cut-off freq over Nyquist\n    freq ratio Wn.\n    The filter will have N input and N output and N*ord states.\n\n    Note: the state-space form of the digital filter does not depend on the\n    sampling time, but only on the Wn ratio.\n    As a result, this function only returns the A,B,C,D matrices of the filter\n    state-space form.\n    \"\"\"\n\n    # build DLTI SISO\n    num, den = scsig.butter(order, Wn, btype=btype, analog=False, output='ba')\n    Af, Bf, Cf, Df = scsig.tf2ss(num, den)\n    SSf = scsig.dlti(Af, Bf, Cf, Df, dt=1.0)\n\n    SStot = SSf\n    for ii in range(1, N):\n        SStot = join2(SStot, SSf)\n\n    return SStot.A, SStot.B, SStot.C, SStot.D\n\n\n# ----------------------------------------------------------------------- Utils\n\ndef get_freq_from_eigs(eigs, dlti=True):\n    \"\"\"\n    Compute natural freq corresponding to eigenvalues, eigs, of a continuous or\n    discrete-time (dlti=True) systems.\n\n    Note: if dlti=True, the frequency is normalised by (1./dt), where dt is the\n    DLTI time-step - i.e. the frequency in Hertz is obtained by multiplying fn by\n    (1./dt).\n    \"\"\"\n    if dlti:\n        fn = 0.5 * np.angle(eigs) / np.pi\n    else:\n        fn = np.abs(eigs.imag)\n    return fn\n\n\ndef eigvals(a, dlti=False):\n    \"\"\"\n    Ordered eigenvalaues of a matrix.\n\n    Args:\n        a (np.ndarray): Matrix.\n        dlti (bool): If true, the eigenvalues are ordered by modulus, else by real part.\n\n    Returns:\n        np.ndarray: ordered set of eigenvalues.\n    \"\"\"\n    eigs = np.linalg.eigvals(a)\n\n    if dlti:\n        order = np.argsort(np.abs(eigs))\n    else:\n        order = np.argsort(eigs.real)\n\n    return eigs[order]\n\n\n# --------------------------------------------------------------------- Testing\n\n\ndef random_ss(Nx, Nu, Ny, dt=None, use_sparse=False, stable=True):\n    \"\"\"\n    Define random system from number of states (Nx), inputs (Nu) and output (Ny).\n\n    Args:\n        Nx (int): Number of states\n        Nu (int): Number of inputs\n        Ny (int): Number of outputs\n        dt (float (optional)): Time step for discrete systems\n        use_sparse (bool): Use sparse matrices\n        stable (bool): Ensure the system is stable\n\n    Returns:\n        StateSpace: State space object\n    \"\"\"\n\n    A = np.random.rand(Nx, Nx)\n    if stable:\n        ev, U = np.linalg.eig(A)\n        evabs = np.abs(ev)\n\n        for ee in range(len(ev)):\n            if evabs[ee] > 0.99:\n                ev[ee] /= 1.1 * evabs[ee]\n        A = np.dot(U * ev, np.linalg.inv(U)).real\n    B = np.random.rand(Nx, Nu)\n    C = np.random.rand(Ny, Nx)\n    D = np.random.rand(Ny, Nu)\n\n    if use_sparse:\n        ss = StateSpace(libsp.csc_matrix(A),\n                        libsp.csc_matrix(B),\n                        libsp.csc_matrix(C),\n                        libsp.csc_matrix(D),\n                        dt=dt)\n    else:\n        ss = StateSpace(A, B, C, D, dt=dt)\n\n    ss.initialise_variables(({'name': 'input_variable', 'size': Nu}), var_type='in')\n    ss.initialise_variables(({'name': 'output_variable', 'size': Ny}), var_type='out')\n    ss.initialise_variables(({'name': 'state_variable', 'size': Nx}), var_type='state')\n\n    return ss\n\n\ndef compare_ss(SS1, SS2, tol=1e-10, Print=False):\n    \"\"\"\n    Assert matrices of state-space models are identical\n    \"\"\"\n\n    era = np.max(np.abs(libsp.dense(SS1.A) - libsp.dense(SS2.A)))\n    if Print: print('Max. error A: %.3e' % era)\n\n    erb = np.max(np.abs(libsp.dense(SS1.B) - libsp.dense(SS2.B)))\n    if Print: print('Max. error B: %.3e' % erb)\n\n    erc = np.max(np.abs(libsp.dense(SS1.C) - libsp.dense(SS2.C)))\n    if Print: print('Max. error C: %.3e' % erc)\n\n    erd = np.max(np.abs(libsp.dense(SS1.D) - libsp.dense(SS2.D)))\n    if Print: print('Max. error D: %.3e' % erd)\n\n    assert era < tol, 'Error A matrix %.2e>%.2e' % (era, tol)\n    assert erb < tol, 'Error B matrix %.2e>%.2e' % (erb, tol)\n    assert erc < tol, 'Error C matrix %.2e>%.2e' % (erc, tol)\n    assert erd < tol, 'Error D matrix %.2e>%.2e' % (erd, tol)\n\n    # print('System matrices identical within tolerance %.2e'%tol)\n    return (era, erb, erc, erd)\n\n\n# -----------------------------------------------------------------------------\n\n\ndef ss_to_scipy(ss):\n    \"\"\"\n    Converts to a scipy.signal linear time invariant system\n\n    Args:\n        ss (libss.StateSpace): SHARPy state space object\n\n    Returns:\n        scipy.signal.dlti\n    \"\"\"\n\n    if ss.dt == None:\n        sys = scsig.lti(ss.A, ss.B, ss.C, ss.D)\n    else:\n        sys = scsig.dlti(ss.A, ss.B, ss.C, ss.D, dt=ss.dt)\n\n    return sys\n"
  },
  {
    "path": "sharpy/linear/src/lin_aeroelastic.py",
    "content": "\"\"\"\nLinear aeroelastic model based on coupled GEBM + UVLM\nS. Maraniello, Jul 2018\n\"\"\"\n\nimport warnings\nimport numpy as np\n\nimport sharpy.utils.settings\nimport sharpy.linear.src.linuvlm as linuvlm\nimport sharpy.linear.src.lingebm as lingebm\nimport sharpy.linear.src.libss as libss\nimport sharpy.utils.algebra as algebra\n\n\nclass LinAeroEla():\n    r\"\"\"\n\n    Future work:\n        - settings are converted from string to type in __init__ method.\n        - implement all settings of LinUVLM (e.g. support for sparse matrices)\n\n    When integrating in SHARPy:\n        * define:\n            - self.setting_types\n            - self.setting_default\n        * use settings.to_custom_types(self.in_dict, self.settings_types, self.settings_default) for conversion to type.\n\n    Args:\n        data (sharpy.presharpy.PreSharpy): main SHARPy data class\n        settings_linear (dict): optional settings file if they are not included in the ``data`` structure\n\n    Attributes:\n        settings (dict): solver settings for the linearised aeroelastic solution\n        lingebm (lingebm.FlexDynamic): linearised geometrically exact beam model\n        num_dof_str (int): number of structural degrees of freedom\n        num_dof_rig (int): number of rigid degrees of freedom\n        num_dof_flex (int): number of flexible degrees of freedom (``num_dof_flex+num_dof_rigid=num_dof_str``)\n        linuvl (linuvlm.Dynamic): linearised UVLM class\n        tsaero (sharpy.utils.datastructures.AeroTimeStepInfo): aerodynamic state timestep info\n        tsstr (sharpy.utils.datastructures.StructTimeStepInfo): structural state timestep info\n        dt (float): time increment\n        q (np.array): corresponding vector of displacements of dimensions ``[1, num_dof_str]``\n        dq (np.array): time derivative (:math:`\\dot{\\mathbf{q}}`) of the corresponding vector of displacements\n            with dimensions ``[1, num_dof_str]``\n        SS (scipy.signal): state space formulation (discrete or continuous time), as selected by the user\n    \"\"\"\n\n    def __init__(self, data, custom_settings_linear=None, uvlm_block=False, chosen_ts=None):\n\n        self.data = data\n        if custom_settings_linear is None:\n            settings_here = data.settings['LinearUvlm']\n        else:\n            settings_here = custom_settings_linear\n\n        sharpy.utils.settings.to_custom_types(settings_here,\n                                              linuvlm.settings_types_dynamic,\n                                              linuvlm.settings_default_dynamic,\n                                              no_ctype=True)\n\n        if chosen_ts is None:\n            self.chosen_ts = self.data.ts\n        else:\n            self.chosen_ts = chosen_ts\n\n        ## TEMPORARY - NEED TO INCLUDE PROPER INTEGRATION OF SETTINGS\n        try:\n            self.rigid_body_motions = settings_here['rigid_body_motion']\n        except KeyError:\n            self.rigid_body_motions = False\n\n        try:\n            self.use_euler = settings_here['use_euler']\n        except KeyError:\n            self.use_euler = False\n\n        if self.rigid_body_motions and settings_here['track_body']:\n            self.track_body = True\n        else:\n            self.track_body = False\n        ## -------\n\n        ### extract aeroelastic info\n        self.dt = settings_here['dt']\n\n        ### reference to timestep_info\n        # aero\n        aero = data.aero\n        self.tsaero = aero.timestep_info[self.chosen_ts]\n        # structure\n        structure = data.structure\n        self.tsstr = structure.timestep_info[self.chosen_ts]\n\n        # --- backward compatibility\n        try:\n            rho = settings_here['density']\n        except KeyError:\n            warnings.warn(\n                \"Key 'density' not found in 'LinearUvlm' solver settings. '\\\n                                      'Trying to read it from 'StaticCoupled'.\")\n            rho = data.settings['StaticCoupled']['aero_solver_settings']['rho']\n            if type(rho) == str:\n                rho = np.float(rho)\n \n        self.tsaero.rho = rho\n        # --- backward compatibility\n\n        ### gebm\n        if self.use_euler:\n            self.num_dof_rig = 9\n        else:\n            self.num_dof_rig = 10\n\n        self.num_dof_flex = np.sum(self.data.structure.vdof >= 0)*6\n        self.num_dof_str = self.num_dof_flex + self.num_dof_rig\n        self.reshape_struct_input()\n\n        try:\n            beam_settings = settings_here['beam_settings']\n        except KeyError:\n            beam_settings = dict()\n        self.lingebm_str = lingebm.FlexDynamic(self.tsstr, structure, beam_settings)\n\n        cga = algebra.quat2rotation(self.tsstr.quat)\n        ### uvlm\n        if uvlm_block:\n            self.linuvlm = linuvlm.DynamicBlock(\n                self.tsaero,\n                dt=settings_here['dt'],\n                dynamic_settings=settings_here,\n                RemovePredictor=settings_here['remove_predictor'],\n                UseSparse=settings_here['use_sparse'],\n                integr_order=settings_here['integr_order'],\n                ScalingDict=settings_here['ScalingDict'],\n                for_vel=np.hstack((cga.dot(self.tsstr.for_vel[:3]),\n                                   cga.dot(self.tsstr.for_vel[3:]))))\n        else:\n            self.linuvlm = linuvlm.Dynamic(\n                self.tsaero,\n                dt=settings_here['dt'],\n                dynamic_settings=settings_here,\n                RemovePredictor=settings_here['remove_predictor'],\n                UseSparse=settings_here['use_sparse'],\n                integr_order=settings_here['integr_order'],\n                ScalingDict=settings_here['ScalingDict'],\n                for_vel=np.hstack((cga.dot(self.tsstr.for_vel[:3]),\n                                   cga.dot(self.tsstr.for_vel[3:]))))\n\n        # add rotational speed\n        # for ii in range(self.linuvlm.MS.n_surf):\n        #     self.linuvlm.MS.Surfs[ii].omega = self.tsstr.for_vel[3:]\n\n\n    def reshape_struct_input(self):\n        \"\"\" Reshape structural input in a column vector \"\"\"\n\n        structure = self.data.structure  # self.data.aero.beam\n        tsdata = structure.timestep_info[self.chosen_ts]\n\n        self.q = np.zeros(self.num_dof_str)\n        self.dq = np.zeros(self.num_dof_str)\n\n        jj = 0  # structural dofs index\n        for node_glob in range(structure.num_node):\n\n            ### detect bc at node (and no. of dofs)\n            bc_here = structure.boundary_conditions[node_glob]\n            if bc_here == 1:  # clamp\n                dofs_here = 0\n                continue\n            elif bc_here == -1 or bc_here == 0:\n                dofs_here = 6\n                jj_tra = [jj, jj + 1, jj + 2]\n                jj_rot = [jj + 3, jj + 4, jj + 5]\n\n            # retrieve element and local index\n            ee, node_loc = structure.node_master_elem[node_glob, :]\n\n            # allocate\n            self.q[jj_tra] = tsdata.pos[node_glob, :]\n            self.q[jj_rot] = tsdata.psi[ee, node_loc]\n            # update\n            jj += dofs_here\n\n        # allocate FoR A quantities\n        if self.use_euler:\n            self.q[-9:-3] = tsdata.for_vel\n            self.q[-3:] = algebra.quat2euler(tsdata.quat)\n\n            wa = tsdata.for_vel[3:]\n            self.dq[-9:-3] = tsdata.for_acc\n            T = algebra.deuler_dt(self.q[-3:])\n            self.dq[-3:] = T.dot(wa)\n\n        else:\n            self.q[-10:-4] = tsdata.for_vel\n            self.q[-4:] = tsdata.quat\n\n            wa = tsdata.for_vel[3:]\n            self.dq[-10:-4] = tsdata.for_acc\n            self.dq[-4] = -0.5 * np.dot(wa, tsdata.quat[1:])\n\n    # self.dq[-3:]=-0.5*(wa*tsdata.quat[0]+np.cross(wa,tsdata.quat[1:]))\n\n    def assemble_ss(self, beam_num_modes=None, wake_prop_settings=None):\n        \"\"\"Assemble State Space formulation\"\"\"\n        data = self.data\n\n        aero = self.data.aero\n        structure = self.data.structure  # data.aero.beam\n        tsaero = self.tsaero\n        tsstr = self.tsstr\n\n        ### assemble linear uvlm\n        self.linuvlm.assemble_ss(wake_prop_settings=wake_prop_settings)\n        SSaero = self.linuvlm.SS\n\n        ### assemble gains and stiffening term due to non-zero forces\n        # only flexible dof accounted for\n        self.get_gebm2uvlm_gains()\n\n        ### assemble linear gebm\n        # structural part only\n        self.lingebm_str.assemble(beam_num_modes)\n        SSstr_flex = self.lingebm_str.SSdisc\n        SSstr = SSstr_flex\n        # # rigid-body (fake)\n        # ZeroMat=np.zeros((self.num_dof_rig,self.num_dof_rig))\n        # EyeMat=np.eye(self.num_dof_rig)\n        # Astr=np.zeros((2*self.num_dof_rig,2*self.num_dof_rig))\n        # Bstr=np.zeros((2*self.num_dof_rig,2*self.num_dof_rig))\n        # Cstr=np.eye(2*self.num_dof_rig)\n        # Dstr=np.zeros((2*self.num_dof_rig,2*self.num_dof_rig))\n        # Astr[:self.num_dof_flex,:self.num_dof_flex]=SSstr.A[]\n        # SSstr_rig=scsig.dlti()\n\n        # str -> aero\n        Zblock = np.zeros((3 * self.linuvlm.Kzeta, SSstr.outputs // 2))\n        if self.rigid_body_motions:\n            Kas = np.block([[self.Kdisp, Zblock],\n                            [self.Kvel_disp, self.Kvel_vel],\n                            [Zblock, Zblock]])\n        else:\n            Kas = np.block([[self.Kdisp[:, :-self.num_dof_rig], Zblock],\n                            [self.Kvel_disp[:, :-self.num_dof_rig], self.Kvel_vel[:, :-self.num_dof_rig]],\n                            [Zblock, Zblock]])\n\n        # aero -> str\n        if self.rigid_body_motions:\n            Ksa = self.Kforces  # aero --> str\n\n        else:\n            Ksa = self.Kforces[:-10, :]  # aero --> str\n\n        ### feedback connection\n        self.SS = libss.couple(ss01=self.linuvlm.SS, ss02=SSstr, K12=Kas, K21=Ksa)\n\n    def get_gebm2uvlm_gains(self):\n        r\"\"\"\n        Provides:\n            - the gain matrices required to connect the linearised GEBM and UVLM\n             inputs/outputs\n            - the stiffening and damping factors to be added to the linearised\n            GEBM equations in order to account for non-zero aerodynamic loads at\n            the linearisation point.\n\n        The function produces the gain matrices:\n\n            - ``Kdisp``: gains from GEBM to UVLM grid displacements\n            - ``Kvel_disp``: influence of GEBM dofs displacements to UVLM grid\n              velocities.\n            - ``Kvel_vel``: influence of GEBM dofs displacements to UVLM grid\n              displacements.\n            - ``Kforces`` (UVLM->GEBM) dimensions are the transpose than the\n            Kdisp and Kvel* matrices. Hence, when allocation this term, ``ii``\n            and ``jj`` indices will unintuitively refer to columns and rows,\n            respectively.\n\n        And the stiffening/damping terms accounting for non-zero aerodynamic\n        forces at the linearisation point:\n\n            - ``Kss``: stiffness factor (flexible dof -> flexible dof) accounting\n            for non-zero forces at the linearisation point.\n            - ``Csr``: damping factor  (rigid dof -> flexible dof)\n            - ``Crs``: damping factor (flexible dof -> rigid dof)\n            - ``Crr``: damping factor (rigid dof -> rigid dof)\n\n\n        Stiffening and damping related terms due to the non-zero aerodynamic forces at the linearisation point:\n\n        .. math::\n            \\mathbf{F}_{A,n} = C^{AG}(\\mathbf{\\chi})\\sum_j \\mathbf{f}_{G,j} \\rightarrow\n            \\delta\\mathbf{F}_{A,n} = C^{AG}_0 \\sum_j \\delta\\mathbf{f}_{G,j} + \\frac{\\partial}{\\partial\\chi}(C^{AG}\\sum_j\n            \\mathbf{f}_{G,j}^0)\\delta\\chi\n\n        The term multiplied by the variation in the quaternion, :math:`\\delta\\chi`, couples the forces with the rigid\n        body equations and becomes part of :math:`\\mathbf{C}_{sr}`.\n\n        Similarly, the linearisation of the moments results in expression that contribute to the stiffness and\n        damping matrices.\n\n        .. math::\n            \\mathbf{M}_{B,n} = \\sum_j \\tilde{X}_B C^{BA}(\\Psi)C^{AG}(\\chi)\\mathbf{f}_{G,j}\n\n        .. math::\n            \\delta\\mathbf{M}_{B,n} = \\sum_j \\tilde{X}_B\\left(C_0^{BG}\\delta\\mathbf{f}_{G,j}\n            + \\frac{\\partial}{\\partial\\Psi}(C^{BA}\\delta\\mathbf{f}^0_{A,j})\\delta\\Psi\n            + \\frac{\\partial}{\\partial\\chi}(C^{BA}_0 C^{AG} \\mathbf{f}_{G,j})\\delta\\chi\\right)\n\n        The linearised equations of motion for the geometrically exact beam model take the input term :math:`\\delta\n        \\mathbf{Q}_n = \\{\\delta\\mathbf{F}_{A,n},\\, T_0^T\\delta\\mathbf{M}_{B,n}\\}`, which means that the moments\n        should be provided as :math:`T^T(\\Psi)\\mathbf{M}_B` instead of :math:`\\mathbf{M}_A = C^{AB}\\mathbf{M}_B`,\n        where :math:`T(\\Psi)` is the tangential operator.\n\n        .. math::\n            \\delta(T^T\\mathbf{M}_B) = T^T_0\\delta\\mathbf{M}_B\n            + \\frac{\\partial}{\\partial\\Psi}(T^T\\delta\\mathbf{M}_B^0)\\delta\\Psi\n\n        is the linearised expression for the moments, where the first term would correspond to the input terms to the\n        beam equations and the second arises due to the non-zero aerodynamic moment at the linearisation point and\n        must be subtracted (since it comes from the forces) to form part of :math:`\\mathbf{K}_{ss}`. In addition, the\n        :math:`\\delta\\mathbf{M}_B` term depends on both :math:`\\delta\\Psi` and :math:`\\delta\\chi`, therefore those\n        terms would also contribute to :math:`\\mathbf{K}_{ss}` and :math:`\\mathbf{C}_{sr}`, respectively.\n\n        The contribution from the total forces and moments will be accounted for in :math:`\\mathbf{C}_{rr}` and\n        :math:`\\mathbf{C}_{rs}`.\n\n        .. math::\n            \\delta\\mathbf{F}_{tot,A} = \\sum_n\\left(C^{GA}_0 \\sum_j \\delta\\mathbf{f}_{G,j}\n            + \\frac{\\partial}{\\partial\\chi}(C^{AG}\\sum_j\n            \\mathbf{f}_{G,j}^0)\\delta\\chi\\right)\n\n        Therefore, after running this method, the beam matrices should be updated as:\n\n        >>> K_beam[:flex_dof, :flex_dof] += Kss\n        >>> C_beam[:flex_dof, -rigid_dof:] += Csr\n        >>> C_beam[-rigid_dof:, :flex_dof] += Crs\n        >>> C_beam[-rigid_dof:, -rigid_dof:] += Crr\n\n        Track body option\n\n        The ``track_body`` setting restricts the UVLM grid to linear translation motions and therefore should be used to\n        ensure that the forces are computed using the reference linearisation frame.\n\n        The UVLM and beam are linearised about a reference equilibrium condition. The UVLM is defined in the inertial\n        reference frame while the beam employs the body attached frame and therefore a projection from one frame onto\n        another is required during the coupling process.\n\n        However, the inputs to the UVLM (i.e. the lattice grid coordinates) are obtained from the beam deformation which\n        is expressed in A frame and therefore the grid coordinates need to be projected onto the inertial frame ``G``.\n        As the beam rotates, the projection onto the ``G`` frame of the lattice grid coordinates will result in a grid\n        that is not coincident with that at the linearisation reference and therefore the grid coordinates must be\n        projected onto the original frame, which will be referred to as ``U``. The transformation between the inertial\n        frame ``G`` and the ``U`` frame is a function of the rotation of the ``A`` frame and the original position:\n\n        .. math:: C^{UG}(\\chi) = C^{GA}(\\chi_0)C^{AG}(\\chi)\n\n        Therefore, the grid coordinates obtained in ``A`` frame and projected onto the ``G`` frame can be transformed\n        to the ``U`` frame using\n\n        .. math:: \\zeta_U = C^{UG}(\\chi) \\zeta_G\n\n        which allows the grid lattice coordinates to be projected onto the original linearisation frame.\n\n        In a similar fashion, the output lattice vertex forces of the UVLM are defined in the original linearisation\n        frame ``U`` and need to be transformed onto the inertial frame ``G`` prior to projecting them onto the ``A``\n        frame to use them as the input forces to the beam system.\n\n        .. math:: \\boldsymbol{f}_G = C^{GU}(\\chi)\\boldsymbol{f}_U\n\n        The linearisation of the above relations lead to the following expressions that have to be added to the\n        coupling matrices:\n\n            * ``Kdisp_vel`` terms:\n\n                .. math::\n                    \\delta\\boldsymbol{\\zeta}_U= C^{GA}_0 \\frac{\\partial}{\\partial \\boldsymbol{\\chi}}\n                    \\left(C^{AG}\\boldsymbol{\\zeta}_{G,0}\\right)\\delta\\boldsymbol{\\chi} + \\delta\\boldsymbol{\\zeta}_G\n\n            * ``Kvel_vel`` terms:\n\n                .. math::\n                    \\delta\\dot{\\boldsymbol{\\zeta}}_U= C^{GA}_0 \\frac{\\partial}{\\partial \\boldsymbol{\\chi}}\n                    \\left(C^{AG}\\dot{\\boldsymbol{\\zeta}}_{G,0}\\right)\\delta\\boldsymbol{\\chi}\n                    + \\delta\\dot{\\boldsymbol{\\zeta}}_G\n\n        The transformation of the forces and moments introduces terms that are functions of the orientation and\n        are included as stiffening and damping terms in the beam's matrices:\n\n            * ``Csr`` damping terms relating to translation forces:\n\n                .. math::\n                    C_{sr}^{tra} -= \\frac{\\partial}{\\partial\\boldsymbol{\\chi}}\n                    \\left(C^{GA} C^{AG}_0 \\boldsymbol{f}_{G,0}\\right)\\delta\\boldsymbol{\\chi}\n\n            * ``Csr`` damping terms related to moments:\n\n                .. math::\n                    C_{sr}^{rot} -= T^\\top\\widetilde{\\mathbf{X}}_B C^{BG}\n                    \\frac{\\partial}{\\partial\\boldsymbol{\\chi}}\n                    \\left(C^{GA} C^{AG}_0 \\boldsymbol{f}_{G,0}\\right)\\delta\\boldsymbol{\\chi}\n\n\n        The ``track_body`` setting.\n\n        When ``track_body`` is enabled, the UVLM grid is no longer coincident with the inertial reference frame\n        throughout the simulation but rather it is able to rotate as the ``A`` frame rotates. This is to simulate a free\n        flying vehicle, where, for instance, the orientation does not affect the aerodynamics. The UVLM defined in this\n        frame of reference, named ``U``, satisfies the following convention:\n\n            * The ``U`` frame is coincident with the ``G`` frame at the time of linearisation.\n\n            * The ``U`` frame rotates as the ``A`` frame rotates.\n\n        Transformations related to the ``U`` frame of reference:\n\n            * The angle between the ``U`` frame and the ``A`` frame is always constant and equal\n              to :math:`\\boldsymbol{\\Theta}_0`.\n\n            * The angle between the ``A`` frame and the ``G`` frame is :math:`\\boldsymbol{\\Theta}=\\boldsymbol{\\Theta}_0\n              + \\delta\\boldsymbol{\\Theta}`\n\n            * The projection of a vector expressed in the ``G`` frame onto the ``U`` frame is expressed by:\n\n                .. math:: \\boldsymbol{v}^U = C^{GA}_0 C^{AG} \\boldsymbol{v}^G\n\n            * The reverse, a projection of a vector expressed in the ``U`` frame onto the ``G`` frame, is expressed by\n\n                .. math:: \\boldsymbol{v}^U = C^{GA} C^{AG}_0 \\boldsymbol{v}^U\n\n        The effect this has on the aeroelastic coupling between the UVLM and the structural dynamics is that the\n        orientation and change of orientation of the vehicle has no effect on the aerodynamics. The aerodynamics are\n        solely affected by the contribution of the 6-rigid body velocities (as well as the flexible DOFs velocities).\n\n        \"\"\"\n\n        data = self.data\n        aero = self.data.aero\n        structure = self.data.structure  # data.aero.beam\n        tsaero = self.tsaero\n        tsstr = self.tsstr\n\n        # allocate output\n        Kdisp = np.zeros((3 * self.linuvlm.Kzeta, self.num_dof_str))\n        Kdisp_vel = np.zeros((3 * self.linuvlm.Kzeta, self.num_dof_str))  # Orientation is in velocity DOFs\n        Kvel_disp = np.zeros((3 * self.linuvlm.Kzeta, self.num_dof_str))\n        Kvel_vel = np.zeros((3 * self.linuvlm.Kzeta, self.num_dof_str))\n        Kforces = np.zeros((self.num_dof_str, 3 * self.linuvlm.Kzeta))\n        Kforces2 = np.zeros((self.num_dof_str, 3 * self.linuvlm.Kzeta))\n\n        Kss = np.zeros((self.num_dof_flex, self.num_dof_flex))\n        Csr = np.zeros((self.num_dof_flex, self.num_dof_rig))\n        Crs = np.zeros((self.num_dof_rig, self.num_dof_flex))\n        Crr = np.zeros((self.num_dof_rig, self.num_dof_rig))\n        Krs = np.zeros((self.num_dof_rig, self.num_dof_flex))\n\n        # get projection matrix A->G\n        # (and other quantities indep. from nodal position)\n        Cga = algebra.quat2rotation(tsstr.quat)  # NG 6-8-19 removing .T\n        Cag = Cga.T\n\n        # for_pos=tsstr.for_pos\n        for_vel = tsstr.for_vel[:3]\n        for_rot = tsstr.for_vel[3:]\n        skew_for_rot = algebra.skew(for_rot)\n        Der_vel_Ra = np.dot(Cga, skew_for_rot)\n\n        Faero = np.zeros(3)\n        FaeroA = np.zeros(3)\n\n        # GEBM degrees of freedom\n        jj_for_tra = range(self.num_dof_str - self.num_dof_rig, self.num_dof_str - self.num_dof_rig + 3)\n        jj_for_rot = range(self.num_dof_str - self.num_dof_rig + 3, self.num_dof_str - self.num_dof_rig + 6)\n\n        if self.use_euler:\n            jj_euler = range(self.num_dof_str - 3, self.num_dof_str)\n            euler = algebra.quat2euler(tsstr.quat)\n            tsstr.euler = euler\n        else:\n            jj_quat = range(self.num_dof_str - 4, self.num_dof_str)\n\n        jj = 0  # nodal dof index\n        for node_glob in range(structure.num_node):\n\n            ### detect bc at node (and no. of dofs)\n            bc_here = structure.boundary_conditions[node_glob]\n\n            if bc_here == 1:  # clamp (only rigid-body)\n                dofs_here = 0\n                jj_tra, jj_rot = [], []\n            # continue\n\n            elif bc_here == -1 or bc_here == 0:  # (rigid+flex body)\n                dofs_here = 6\n                jj_tra = 6 * structure.vdof[node_glob] + np.array([0, 1, 2], dtype=int)\n                jj_rot = 6 * structure.vdof[node_glob] + np.array([3, 4, 5], dtype=int)\n            # jj_tra=[jj  ,jj+1,jj+2]\n            # jj_rot=[jj+3,jj+4,jj+5]\n            else:\n                raise NameError('Invalid boundary condition (%d) at node %d!' \\\n                                % (bc_here, node_glob))\n\n            jj += dofs_here\n\n            # retrieve element and local index\n            ee, node_loc = structure.node_master_elem[node_glob, :]\n\n            # get position, crv and rotation matrix\n            Ra = tsstr.pos[node_glob, :]  # in A FoR, w.r.t. origin A-G\n            Rg = np.dot(Cag.T, Ra)  # in G FoR, w.r.t. origin A-G\n            psi = tsstr.psi[ee, node_loc, :]\n            psi_dot = tsstr.psi_dot[ee, node_loc, :]\n            Cab = algebra.crv2rotation(psi)\n            Cba = Cab.T\n            Cbg = np.dot(Cab.T, Cag)\n            Tan = algebra.crv2tan(psi)\n\n            track_body = self.track_body\n\n            ### str -> aero mapping\n            # some nodes may be linked to multiple surfaces...\n            for str2aero_here in aero.struct2aero_mapping[node_glob]:\n\n                # detect surface/span-wise coordinate (ss,nn)\n                nn, ss = str2aero_here['i_n'], str2aero_here['i_surf']\n                # print('%.2d,%.2d'%(nn,ss))\n\n                # surface panelling\n                M = aero.aero_dimensions[ss][0]\n                N = aero.aero_dimensions[ss][1]\n\n                Kzeta_start = 3 * sum(self.linuvlm.MS.KKzeta[:ss])\n                shape_zeta = (3, M + 1, N + 1)\n\n                for mm in range(M + 1):\n                    # get bound vertex index\n                    ii_vert = [Kzeta_start + np.ravel_multi_index(\n                        (cc, mm, nn), shape_zeta) for cc in range(3)]\n\n                    # get position vectors\n                    zetag = tsaero.zeta[ss][:, mm, nn]  # in G FoR, w.r.t. origin A-G\n                    zetaa = np.dot(Cag, zetag)  # in A FoR, w.r.t. origin A-G\n                    Xg = zetag - Rg  # in G FoR, w.r.t. origin B\n                    Xb = np.dot(Cbg, Xg)  # in B FoR, w.r.t. origin B\n\n                    # get rotation terms\n                    Xbskew = algebra.skew(Xb)\n                    XbskewTan = np.dot(Xbskew, Tan)\n\n                    # get velocity terms\n                    zetag_dot = tsaero.zeta_dot[ss][:, mm, nn] - Cga.dot(for_vel)  # in G FoR, w.r.t. origin A-G\n                    zetaa_dot = np.dot(Cag, zetag_dot)  # in A FoR, w.r.t. origin A-G\n\n                    # get aero force\n                    faero = tsaero.forces[ss][:3, mm, nn]\n                    Faero += faero\n                    faero_a = np.dot(Cag, faero)\n                    FaeroA += faero_a\n                    maero_g = np.cross(Xg, faero)\n                    maero_b = np.dot(Cbg, maero_g)\n\n                    ### ---------------------------------------- allocate Kdisp\n\n                    if bc_here != 1:\n                        # wrt pos - Eq 25 second term\n                        Kdisp[np.ix_(ii_vert, jj_tra)] += Cga\n\n                        # wrt psi - Eq 26\n                        Kdisp[np.ix_(ii_vert, jj_rot)] -= np.dot(Cbg.T, XbskewTan)\n\n                    # w.r.t. position of FoR A (w.r.t. origin G)\n                    # null as A and G have always same origin in SHARPy\n\n                    # # ### w.r.t. quaternion (attitude changes)\n                    if self.use_euler:\n                        Kdisp_vel[np.ix_(ii_vert, jj_euler)] += \\\n                            algebra.der_Ceuler_by_v(tsstr.euler, zetaa)\n\n                        # Track body - project inputs as for A not moving\n                        if track_body:\n                            Kdisp_vel[np.ix_(ii_vert, jj_euler)] += \\\n                                Cga.dot(algebra.der_Peuler_by_v(tsstr.euler, zetag))\n                    else:\n                        # Equation 25\n                        # Kdisp[np.ix_(ii_vert, jj_quat)] += \\\n                        #     algebra.der_Cquat_by_v(tsstr.quat, zetaa)\n                        Kdisp_vel[np.ix_(ii_vert, jj_quat)] += \\\n                            algebra.der_Cquat_by_v(tsstr.quat, zetaa)\n\n                        # Track body - project inputs as for A not moving\n                        if track_body:\n                            Kdisp_vel[np.ix_(ii_vert, jj_quat)] += \\\n                                Cga.dot(algebra.der_CquatT_by_v(tsstr.quat, zetag))\n\n                    ### ------------------------------------ allocate Kvel_disp\n\n                    if bc_here != 1:\n                        # # wrt pos\n                        Kvel_disp[np.ix_(ii_vert, jj_tra)] += Der_vel_Ra\n\n                        # wrt psi (at zero psi_dot)\n                        Kvel_disp[np.ix_(ii_vert, jj_rot)] -= \\\n                            np.dot(Cga,\n                                   np.dot(skew_for_rot,\n                                          np.dot(Cab, XbskewTan)))\n\n                        # # wrt psi (psi_dot contributions - verified)\n                        Kvel_disp[np.ix_(ii_vert, jj_rot)] += np.dot(Cbg.T, np.dot(\n                            algebra.skew(np.dot(XbskewTan, psi_dot)), Tan))\n\n                        if np.linalg.norm(psi) >=1e-6:\n                            Kvel_disp[np.ix_(ii_vert, jj_rot)] -= \\\n                                np.dot(Cbg.T,\n                                       np.dot(Xbskew,\n                                              algebra.der_Tan_by_xv(psi, psi_dot)))\n\n                    # # w.r.t. position of FoR A (w.r.t. origin G)\n                    # # null as A and G have always same origin in SHARPy\n\n                    # # ### w.r.t. quaternion (attitude changes) - Eq 30\n                    if self.use_euler:\n                        Kvel_vel[np.ix_(ii_vert, jj_euler)] += \\\n                            algebra.der_Ceuler_by_v(tsstr.euler, zetaa_dot)\n\n                        # Track body if ForA is rotating\n                        if track_body:\n                            Kvel_vel[np.ix_(ii_vert, jj_euler)] += \\\n                                Cga.dot(algebra.der_Peuler_by_v(tsstr.euler, zetag_dot))\n                    else:\n                        Kvel_vel[np.ix_(ii_vert, jj_quat)] += \\\n                            algebra.der_Cquat_by_v(tsstr.quat, zetaa_dot)\n\n                        # Track body if ForA is rotating\n                        if track_body:\n                            Kvel_vel[np.ix_(ii_vert, jj_quat)] += \\\n                                Cga.dot(algebra.der_CquatT_by_v(tsstr.quat, zetag_dot))\n\n                    ### ------------------------------------- allocate Kvel_vel\n\n                    if bc_here != 1:\n                        # wrt pos_dot\n                        Kvel_vel[np.ix_(ii_vert, jj_tra)] += Cga\n\n                        # # wrt crv_dot\n                        Kvel_vel[np.ix_(ii_vert, jj_rot)] -= np.dot(Cbg.T, XbskewTan)\n\n                    # # wrt velocity of FoR A\n                    Kvel_vel[np.ix_(ii_vert, jj_for_tra)] += Cga\n                    Kvel_vel[np.ix_(ii_vert, jj_for_rot)] -= \\\n                        np.dot(Cga, algebra.skew(zetaa))\n\n                    # wrt rate of change of quaternion: not implemented!\n\n                    ### -------------------------------------- allocate Kforces\n\n                    if bc_here != 1:\n                        # nodal forces\n                        Kforces[np.ix_(jj_tra, ii_vert)] += Cag\n\n                        # nodal moments\n                        Kforces[np.ix_(jj_rot, ii_vert)] += \\\n                            np.dot(Tan.T, np.dot(Cbg, algebra.skew(Xg)))\n                    # or, equivalently, np.dot( algebra.skew(Xb),Cbg)\n\n                    # total forces\n                    Kforces[np.ix_(jj_for_tra, ii_vert)] += Cag\n                    Kforces2[-10:-7, ii_vert] += Cag\n\n                    # total moments\n                    Kforces[np.ix_(jj_for_rot, ii_vert)] += \\\n                        np.dot(Cag, algebra.skew(zetag))\n\n                    # quaternion equation\n                    # null, as not dep. on external forces\n\n                    ### --------------------------------------- allocate Kstiff\n\n                    ### flexible dof equations (Kss and Csr)\n                    if bc_here != 1:\n                        # nodal forces\n                        if self.use_euler:\n                            if not track_body:\n                                Csr[jj_tra, -3:] -= algebra.der_Peuler_by_v(tsstr.euler, faero)\n                                # Csr[jj_tra, -3:] -= algebra.der_Ceuler_by_v(tsstr.euler, Cga.T.dot(faero))\n\n                        else:\n                            if not track_body:\n                                Csr[jj_tra, -4:] -= algebra.der_CquatT_by_v(tsstr.quat, faero)\n\n                            # Track body\n                            # if track_body:\n                            #     Csr[jj_tra, -4:] -= algebra.der_Cquat_by_v(tsstr.quat, Cga.T.dot(faero))\n\n                        ### moments\n                        TanTXbskew = np.dot(Tan.T, Xbskew)\n                        # contrib. of TanT (dpsi) - Eq 37 - Integration of UVLM and GEBM\n                        Kss[np.ix_(jj_rot, jj_rot)] -= algebra.der_TanT_by_xv(psi, maero_b)\n                        # contrib of delta aero moment (dpsi) - Eq 36\n                        Kss[np.ix_(jj_rot, jj_rot)] -= \\\n                            np.dot(TanTXbskew, algebra.der_CcrvT_by_v(psi, np.dot(Cag, faero)))\n                        # contribution of delta aero moment (dquat)\n                        if self.use_euler:\n                            if not track_body:\n                                Csr[jj_rot, -3:] -= \\\n                                    np.dot(TanTXbskew,\n                                           np.dot(Cba,\n                                                  algebra.der_Peuler_by_v(tsstr.euler, faero)))\n\n                            # if track_body:\n                            #     Csr[jj_rot, -3:] -= \\\n                            #         np.dot(TanTXbskew,\n                            #                np.dot(Cbg,\n                            #                       algebra.der_Peuler_by_v(tsstr.euler, Cga.T.dot(faero))))\n                        else:\n                            if not track_body:\n                                Csr[jj_rot, -4:] -= \\\n                                    np.dot(TanTXbskew,\n                                           np.dot(Cba,\n                                                  algebra.der_CquatT_by_v(tsstr.quat, faero)))\n\n                            # Track body\n                            # if track_body:\n                            #     Csr[jj_rot, -4:] -= \\\n                            #         np.dot(TanTXbskew,\n                            #                np.dot(Cbg,\n                            #                       algebra.der_CquatT_by_v(tsstr.quat, Cga.T.dot(faero))))\n\n                    ### rigid body eqs (Crs and Crr)\n\n                    if bc_here != 1:\n                        # Changed Crs to Krs - NG 14/5/19\n                        # moments contribution due to delta_Ra (+ sign intentional)\n                        Krs[3:6, jj_tra] += algebra.skew(faero_a)\n                        # moment contribution due to delta_psi (+ sign intentional)\n                        Krs[3:6, jj_rot] += np.dot(algebra.skew(faero_a),\n                                                   algebra.der_Ccrv_by_v(psi, Xb))\n\n                    if self.use_euler:\n                        # total force\n                        if not track_body:\n                            Crr[:3, -3:] -= algebra.der_Peuler_by_v(tsstr.euler, faero)\n\n                            # total moment contribution due to change in euler angles\n                            Crr[3:6, -3:] -= algebra.der_Peuler_by_v(tsstr.euler, np.cross(zetag, faero))\n                            Crr[3:6, -3:] += np.dot(\n                                np.dot(Cag, algebra.skew(faero)),\n                                algebra.der_Peuler_by_v(tsstr.euler, np.dot(Cab, Xb)))\n\n                            # if track_body:\n                            #     # NG 20/8/19 - is the Cag needed here? Verify\n                            #     Crr[:3, -3:] -= Cag.dot(algebra.der_Ceuler_by_v(tsstr.euler, Cga.T.dot(faero)))\n                            #\n                            #     Crr[3:6, -3:] -= Cag.dot(algebra.skew(zetag).dot(algebra.der_Ceuler_by_v(tsstr.euler, Cga.T.dot(faero))))\n                            #     Crr[3:6, -3:] += Cag.dot(algebra.skew(faero)).dot(algebra.der_Ceuler_by_v(tsstr.euler, Cga.T.dot(zetag)))\n\n                    else:\n                        if not track_body:\n                            # total force\n                            Crr[:3, -4:] -= algebra.der_CquatT_by_v(tsstr.quat, faero)\n\n                            # total moment contribution due to quaternion\n                            Crr[3:6, -4:] -= algebra.der_CquatT_by_v(tsstr.quat, np.cross(zetag, faero))\n                            Crr[3:6, -4:] += np.dot(\n                                np.dot(Cag, algebra.skew(faero)),\n                                algebra.der_CquatT_by_v(tsstr.quat, np.dot(Cab, Xb)))\n\n                        # Track body\n                        # if track_body:\n                        #     Crr[:3, -4:] -= Cag.dot(algebra.der_Cquat_by_v(tsstr.quat, Cga.T.dot(faero)))\n                        #\n                        #     Crr[3:6, -4:] -= Cag.dot(algebra.skew(zetag).dot(algebra.der_Cquat_by_v(tsstr.quat, Cga.T.dot(faero))))\n                        #     Crr[3:6, -4:] += Cag.dot(algebra.skew(faero)).dot(algebra.der_Cquat_by_v(tsstr.quat, Cga.T.dot(zetag)))\n\n\n        # transfer\n        self.Kdisp = Kdisp\n        self.Kvel_disp = Kvel_disp\n        self.Kdisp_vel = Kdisp_vel\n        self.Kvel_vel = Kvel_vel\n        self.Kforces = Kforces\n\n        # stiffening factors\n        self.Kss = Kss\n        self.Krs = Krs\n        self.Csr = Csr\n        self.Crs = Crs\n        self.Crr = Crr\n\n\nif __name__ == '__main__':\n    import read\n    import configobj\n\n    # select test case\n    fname = '/home/sm6110/git/uvlm3d/test/h5input/smith_Nsurf01M04N12wk10_a040.state.h5'\n    fname = '/home/sm6110/git/uvlm3d/test/h5input/smith_Nsurf02M04N12wk10_a040.state.h5'\n    hd = read.h5file(fname)\n\n    # read some setting\n    file_settings = fname[:-8] + 'solver.txt'\n    dict_config = configobj.ConfigObj(file_settings)\n\n    # add settings for linear solver\n    M, cref = 4., 1.\n    Uinf = 25.\n    dict_config['LinearUvlm'] = {'dt': cref / M / Uinf,\n                                 'integr_order': 2,\n                                 'Uref': 1.}\n\n    Sol = AeroElaDyn(tsaero=hd.tsaero00000, tsstr=hd.tsstr00000,\n                     aero2str_mapping=hd.aero2str, settings=dict_config)\n"
  },
  {
    "path": "sharpy/linear/src/lin_utils.py",
    "content": "\"\"\"\nUtilities functions for linear analysis\n\"\"\"\n\nimport numpy as np\n\n\n\n# linear uvlm\nimport sharpy.linear.src.lin_aeroelastic as lin_aeroelastic\nimport sharpy.linear.src.libss as libss\n\n\ndef comp_tot_force(forces, zeta, zeta_pole=np.zeros((3,))):\n    \"\"\" Compute total force with exact displacements \"\"\"\n    Ftot = np.zeros((3,))\n    Mtot = np.zeros((3,))\n    for ss in range(len(forces)):\n        _, Mv, Nv = forces[ss].shape\n        for mm in range(Mv):\n            for nn in range(Nv):\n                arm = zeta[ss][:, mm, nn] - zeta_pole\n                Mtot += np.cross(arm, forces[ss][:3, mm, nn])\n        for cc in range(3):\n            Ftot[cc] += forces[ss][cc, :, :].sum()\n    return Ftot, Mtot\n\n\nclass Info():\n    \"\"\" Summarise info about a data point \"\"\"\n\n    def __init__(self, zeta, zeta_dot, u_ext, ftot, mtot, q, qdot,\n                 SSaero=None, SSbeam=None,\n                 Kas=None, Kftot=None, Kmtot=None, Kmtot_disp=None,\n                 Asteady_inv=None):\n        self.zeta = zeta\n        self.zeta_dot = zeta_dot\n        self.u_ext = u_ext\n        self.ftot = ftot\n        self.mtot = mtot\n        self.q = q\n        self.qdot = qdot\n        #\n        self.SSaero = SSaero\n        self.SSbeam = SSbeam\n        self.Kas = Kas\n        self.Kftot = Kftot\n        self.Kmtot = Kmtot\n        self.Kmtot_disp = Kmtot_disp\n        self.Asteady_inv = Asteady_inv\n\n\ndef solve_linear(Ref, Pert, solve_beam=True):\n    \"\"\"\n    Given 2 Info() classes associated to a reference linearisation point Ref and a\n    perturbed state Pert, the method produces in output the prediction at the\n    Pert state of a linearised model.\n\n    The solution is carried on using both the aero and beam input\n    \"\"\"\n\n    ### define perturbations\n    dq = Pert.q - Ref.q\n    dqdot = Pert.qdot - Ref.qdot\n    dzeta = Pert.zeta - Ref.zeta\n    dzeta_dot = Pert.zeta_dot - Ref.zeta_dot\n    du_ext = Pert.u_ext - Ref.u_ext\n\n    num_dof_str = len(dq)\n    dzeta_exp = np.dot(Ref.Kas[:len(dzeta), :num_dof_str], dq)\n\n    SSaero = Ref.SSaero\n    SSbeam = Ref.SSbeam\n\n    # zeta in\n    usta = np.concatenate([dzeta, dzeta_dot, du_ext])\n\n    if hasattr(Ref, 'Asteady_inv'):\n        #x_sta = A_steady^-1 dot B u_sta\n        xsta = np.dot(Ref.Asteady_inv, np.dot(SSaero.B, usta))\n    else:\n        # x_sta = linsolve(A_steady, Bu)\n        Asteady = np.eye(*SSaero.A.shape) - SSaero.A\n        xsta = np.linalg.solve(Asteady, np.dot(SSaero.B, usta))\n\n    # y_sta = C x_sta + D u_sta\n    ysta = np.dot(SSaero.C, xsta) + np.dot(SSaero.D, usta)\n    ftot_aero = Ref.ftot + np.dot(Ref.Kftot, ysta)\n    mtot_aero = Ref.mtot + np.dot(Ref.Kmtot, ysta) + np.dot(Ref.Kmtot_disp, dzeta)\n\n    #### beam in\n    if solve_beam:\n        # warning: we need to add first the contribution due to velocity change!!!\n        usta_uinf = np.concatenate([0. * dzeta, 0. * dzeta_dot, du_ext])\n        xsta_uinf = np.linalg.solve(Asteady, np.dot(SSaero.B, usta_uinf))\n        ysta_uinf = np.dot(SSaero.C, xsta_uinf) + np.dot(SSaero.D, usta_uinf)\n        usta = np.concatenate([dq, dqdot])\n        if hasattr(Ref, 'Asteady_inv'):\n            xsta = np.dot(Ref.Asteady_inv, np.dot(SSbeam.B, usta))\n        else:\n            Asteady = np.eye(*SSbeam.A.shape) - SSbeam.A\n            xsta = np.linalg.solve(Asteady, np.dot(SSbeam.B, usta))\n        ysta = ysta_uinf + np.dot(SSbeam.C, xsta) + np.dot(SSbeam.D, usta)\n        ftot_beam = Ref.ftot + np.dot(Ref.Kftot, ysta)\n        mtot_beam = Ref.mtot + np.dot(Ref.Kmtot, ysta) + np.dot(Ref.Kmtot_disp, dzeta_exp)\n    else:\n        ftot_beam, mtot_beam = None, None\n\n    return ftot_aero, mtot_aero, ftot_beam, mtot_beam\n\n\ndef extract_from_data(data, assemble=True,\n                      zeta_pole=np.zeros((3,)), build_Asteady_inv=False):\n    \"\"\"\n    Extract relevant info from data structure. If assemble is True, it will\n    also generate a linear UVLM and the displacements/velocities gain matrices\n    \"\"\"\n\n    ### extract aero info - gets info from every panel in every surface\n    # from an NxM matrix and reshapes it into an K by 1 column vector\n    tsaero = data.aero.timestep_info[0]\n    zeta = np.concatenate([tsaero.zeta[ss].reshape(-1, order='C')\n                           for ss in range(tsaero.n_surf)])\n    zeta_dot = np.concatenate([tsaero.zeta_dot[ss].reshape(-1, order='C')\n                               for ss in range(tsaero.n_surf)])\n    uext = np.concatenate([tsaero.u_ext[ss].reshape(-1, order='C')\n                           for ss in range(tsaero.n_surf)])\n    ftot, mtot = comp_tot_force(tsaero.forces, tsaero.zeta, zeta_pole=zeta_pole)\n\n    ## TEST WHETHER SETTINGS RUN\n    settings = dict()\n    settings['LinearUvlm'] = {'dt': 0.1,\n                              'integr_order': 2,\n                              'density': 1.225,\n                              'ScalingDict': {'length': 1.,\n                                              'speed': 1.,\n                                              'density': 1.}}\n\n    ### extract structural info\n    Sol = lin_aeroelastic.LinAeroEla(data, settings)\n    gebm = Sol.lingebm_str\n    q = Sol.q\n    qdot = Sol.dq\n\n    ### assemble\n    if assemble is True:\n        uvlm = Sol.linuvlm\n        uvlm.assemble_ss()\n        uvlm.get_total_forces_gain(zeta_pole=zeta_pole)\n        Sol.get_gebm2uvlm_gains()\n        Kas = np.block([[Sol.Kdisp, np.zeros((3 * uvlm.Kzeta, gebm.num_dof + 10))],\n                        [Sol.Kvel_disp, Sol.Kvel_vel],\n                        [np.zeros((3 * uvlm.Kzeta, 2 * gebm.num_dof + 20))]])\n        SSbeam = libss.addGain(uvlm.SS, Kas, where='in')\n\n        if build_Asteady_inv:\n            Asteady_inv = np.linalg.inv(np.eye(*uvlm.SS.A.shape) - uvlm.SS.A)\n        else:\n            Asteady_inv = None\n        Out = Info(zeta, zeta_dot, uext, ftot, mtot, q, qdot,\n                   uvlm.SS, SSbeam, Kas, uvlm.Kftot, uvlm.Kmtot, uvlm.Kmtot_disp,\n                   Asteady_inv)\n\n    else:\n        Out = Info(zeta, zeta_dot, uext, ftot, mtot, q, qdot)\n\n    return Out"
  },
  {
    "path": "sharpy/linear/src/lingebm.py",
    "content": "\"\"\"\nLinear beam model class\n\nS. Maraniello, Aug 2018\nN. Goizueta\n\"\"\"\n\nimport numpy as np\nimport scipy as sc\nimport scipy.signal as scsig\nimport sharpy.linear.src.libss as libss\nimport sharpy.utils.algebra as algebra\nimport sharpy.utils.settings as settings\nimport sharpy.utils.cout_utils as cout\nimport sharpy.structure.utils.modalutils as modalutils\nimport warnings\nfrom sharpy.linear.utils.ss_interface import LinearVector, StateVariable, OutputVariable, InputVariable\n\n\nclass FlexDynamic():\n    r\"\"\"\n    Define class for linear state-space realisation of GEBM flexible-body\n    equations from SHARPy``timestep_info`` class and with the nonlinear structural information.\n\n    The linearised beam takes the following arguments:\n\n    Args:\n        tsinfo (sharpy.utils.datastructures.StructImeStepInfo): Structural timestep containing the modal information\n        structure (sharpy.solvers.beamloader.Beam): Beam class with the structural information\n        custom_settings (dict): settings for the linearised beam\n\n\n    State-space models can be defined in continuous or discrete time (dt\n    required). Modal projection, either on the damped or undamped modal shapes,\n    is also avaiable. The rad/s array wv can be optionally passed for freq.\n    response analysis\n\n    To produce the state-space equations:\n\n    1. Set the settings:\n        a. ``modal_projection={True,False}``: determines whether to project the states\n            onto modal coordinates. Projection over damped or undamped modal\n            shapes can be obtained selecting:\n\n                - ``proj_modes={'damped','undamped'}``\n\n            while\n\n                 - ``inout_coords={'modes','nodal'}``\n\n             determines whether the modal state-space inputs/outputs are modal\n             coords or nodal degrees-of-freedom. If ``modes`` is selected, the\n             ``Kin`` and ``Kout`` gain matrices are generated to transform nodal to modal\n             dofs\n\n        b. ``dlti={True,False}``: if true, generates discrete-time system.\n            The continuous to discrete transformation method is determined by::\n\n                discr_method={ 'newmark',  # Newmark-beta\n                                    'zoh',\t\t# Zero-order hold\n                                    'bilinear'} # Bilinear (Tustin) transformation\n\n            DLTIs can be obtained directly using the Newmark-:math:`\\beta` method\n\n                ``discr_method='newmark'``\n                ``newmark_damp=xx`` with ``xx<<1.0``\n\n            for full-states descriptions (``modal_projection=False``) and modal projection\n            over the undamped structural modes (``modal_projection=True`` and ``proj_modes``).\n            The Zero-order holder and bilinear methods, instead, work in all\n            descriptions, but require the continuous state-space equations.\n\n    2. Generate an instance of the beam\n\n    2. Run ``self.assemble()``. The method accepts an additional parameter, ``Nmodes``,\n    which allows using a lower number of modes than specified in ``self.Nmodes``\n\n    Examples:\n\n        >>> beam_settings = {'modal_projection': True,\n        >>>             'inout_coords': 'modes',\n        >>>             'discrete_time': False,\n        >>>             'proj_modes': 'undamped',\n        >>>             'use_euler': True}\n        >>>\n        >>> beam = lingebm.FlexDynamic(tsstruct0, structure=data.structure, custom_settings=beam_settings)\n        >>>\n        >>> beam.assemble()\n\n    Notes:\n\n        * Modal projection will automatically select between damped/undamped modes shapes, based on the data available\n          from tsinfo.\n\n        * If the full system matrices are available, use the modal_sol methods to override mode-shapes and eigenvectors\n\n\n    \"\"\"\n\n    def __init__(self, tsinfo, structure=None, custom_settings=dict()):\n        # Extract settings\n        self.settings = custom_settings\n\n        ### extract timestep_info modal results\n        # unavailable attrs will be None\n        self.freq_natural = tsinfo.modal.get('freq_natural')\n        self.freq_damp = tsinfo.modal.get('freq_damped')\n\n        self.damping = tsinfo.modal.get('damping')\n\n        self.eigs = tsinfo.modal.get('eigenvalues')\n        self.U = tsinfo.modal.get('eigenvectors')\n        self.V = tsinfo.modal.get('eigenvectors_left')\n        self.Kin_damp = tsinfo.modal.get('Kin_damp')  # for 'damped' modes only\n        self.Ccut = tsinfo.modal.get('Ccut')  # for 'undamp' modes only\n\n        self.Mstr = tsinfo.modal.get('M')\n        self.Cstr = tsinfo.modal.get('C')\n        self.Kstr = tsinfo.modal.get('K')\n\n        ### set other flags\n        self.modal = self.settings['modal_projection']\n        self.inout_coords = self.settings['inout_coords']\n        self.dlti = self.settings['discrete_time']\n\n        if self.dlti:\n            self.dt = self.settings['dt']\n        else:\n            self.dt = None\n\n        self.Nmodes = self.settings['num_modes']\n        self._num_modes = None\n        self.num_modes = self.settings['num_modes']\n        self.num_dof = self.U.shape[0]\n        if self.V is not None:\n            self.num_dof = self.num_dof // 2\n\n        self.proj_modes = self.settings['proj_modes']\n        if self.V is None:\n            self.proj_modes = 'undamped'\n        self.discr_method = self.settings['discr_method']\n        self.newmark_damp = self.settings['newmark_damp']\n        self.use_euler = self.settings['use_euler']\n        self.use_principal_axes = self.settings.get('rigid_modes_ppal_axes', False)  # this setting is inherited from the setting in Modal solver\n\n        ### set state-space variables\n        self.SScont = None\n        self.SSdisc = None\n        self.Kin = None\n        self.Kout = None\n\n        # Store structure at linearisation and linearisation conditions\n        self.structure = structure\n        self.tsstruct0 = tsinfo\n        self.Minv = None  # Not used anymore since M is factorized inside newmark_ss\n\n        self.scaled_reference_matrices = dict()  # keep reference values prior to time scaling\n\n        if self.use_euler:\n            self.euler_propagation_equations(tsinfo)\n\n        if self.Mstr.shape[0] == 6*(self.tsstruct0.num_node - 1):\n            self.clamped = True\n            self.num_dof_rig = 0\n        else:\n            self.clamped = False\n\n        if self.use_euler:\n            self.num_dof_rig = 9\n        else:\n            self.num_dof_rig = 10\n\n        if self.modal:\n            self.update_modal()\n\n        self.num_dof_flex = np.sum(structure.vdof >= 0)*6\n\n        self.num_dof_str = self.num_dof_flex + self.num_dof_rig\n        q, dq = self.reshape_struct_input()\n\n        self.tsstruct0.q = q\n        self.tsstruct0.dq = dq\n\n        # Linearised gravity matrices\n        self.Crr_grav = None\n        self.Csr_grav = None\n        self.Krs_grav = None\n        self.Kss_grav = None\n\n    def reshape_struct_input(self):\n        \"\"\" Reshape structural input in a column vector \"\"\"\n\n        structure = self.structure  # self.data.aero.beam\n        tsdata = self.tsstruct0\n\n        q = np.zeros(self.num_dof_str)\n        dq = np.zeros(self.num_dof_str)\n\n        jj = 0  # structural dofs index\n        for node_glob in range(structure.num_node):\n\n            ### detect bc at node (and no. of dofs)\n            bc_here = structure.boundary_conditions[node_glob]\n            if bc_here == 1:  # clamp\n                dofs_here = 0\n                continue\n            elif bc_here == -1 or bc_here == 0:\n                dofs_here = 6\n                jj_tra = [jj, jj + 1, jj + 2]\n                jj_rot = [jj + 3, jj + 4, jj + 5]\n\n            # retrieve element and local index\n            ee, node_loc = structure.node_master_elem[node_glob, :]\n\n            # allocate\n            q[jj_tra] = tsdata.pos[node_glob, :]\n            q[jj_rot] = tsdata.psi[ee, node_loc]\n            # update\n            jj += dofs_here\n\n        # allocate FoR A quantities\n        if self.use_euler:\n            q[-9:-3] = tsdata.for_vel\n            q[-3:] = algebra.quat2euler(tsdata.quat)\n\n            wa = tsdata.for_vel[3:]\n            dq[-9:-3] = tsdata.for_acc\n            T = algebra.deuler_dt(q[-3:])\n            dq[-3:] = T.dot(wa)\n\n        else:\n            q[-10:-4] = tsdata.for_vel\n            q[-4:] = tsdata.quat\n\n            wa = tsdata.for_vel[3:]\n            dq[-10:-4] = tsdata.for_acc\n            dq[-4] = -0.5 * np.dot(wa, tsdata.quat[1:])\n\n        return q, dq\n\n    @property\n    def num_modes(self):\n        return self._num_modes\n\n    @num_modes.setter\n    def num_modes(self, value):\n        self.update_truncated_modes(value)\n        self._num_modes = value\n\n    @property\n    def num_flex_dof(self):\n        return np.sum(self.structure.vdof >= 0) * 6\n\n    @property\n    def num_rig_dof(self):\n        return self.Mstr.shape[0] - self.num_flex_dof\n\n    def sort_repeated_evecs(self, evecs, evals):\n        num_rbm = np.sum(evals.__abs__() == 0.)\n        num_dof = evecs.shape[0]\n\n        evecs_sorted = evecs.copy()\n\n        if num_rbm != 0:\n            for i in range(num_rbm):\n                index_mode = np.argmax(evecs[:, i].__abs__()) - num_dof + num_rbm\n                evecs_sorted[:, index_mode] = evecs[:, i]\n\n        return evecs_sorted\n\n    def euler_propagation_equations(self, tsstr):\n        \"\"\"\n        Introduce the linearised Euler propagation equations that relate the body fixed angular velocities to the Earth\n        fixed Euler angles.\n\n        This method will remove the quaternion propagation equations created by SHARPy; the resulting\n        system will have 9 rigid degrees of freedom.\n\n\n        Args:\n            tsstr:\n\n        Returns:\n\n        \"\"\"\n\n        # Verify the rigid body modes are used\n        num_node = tsstr.num_node\n        num_flex_dof = 6*(num_node-1)\n\n        euler = algebra.quat2euler(tsstr.quat)\n        tsstr.euler = euler\n\n        if self.Mstr.shape[0] == num_flex_dof + 10:\n\n            # Erase quaternion equations\n            self.Cstr[-4:, :] = 0\n\n            self.Mstr = self.Mstr[:-1, :-1]\n            self.Cstr = self.Cstr[:-1, :-1]\n            self.Kstr = self.Kstr[:-1, :-1]\n\n            for_rot = tsstr.for_vel[3:]\n            Crr = np.zeros((9, 9))\n\n            # Euler angle propagation equations\n            Crr[-3:, -6:-3] = -algebra.deuler_dt(tsstr.euler)\n            Crr[-3:, -3:] = -algebra.der_Teuler_by_w(tsstr.euler, for_rot)\n\n            self.Cstr[-9:, -9:] += Crr\n\n        else:\n            warnings.warn('Euler parametrisation not implemented - Either rigid body modes are not being used or this '\n                          'method has already been called.')\n\n\n    @property\n    def num_dof(self):\n        self.num_dof = self.Mstr.shape[0]\n        # Previously beam.U.shape[0]\n        return self._num_dof\n\n    @num_dof.setter\n    def num_dof(self, value):\n        self._num_dof = value\n\n\n    def linearise_gravity_forces(self, tsstr=None):\n        r\"\"\"\n        Linearises gravity forces and includes the resulting terms in the C and K matrices. The method takes the\n        linearisation condition (optional argument), linearises and updates:\n\n            * Stiffness matrix\n\n            * Damping matrix\n\n            * Modal damping matrix\n\n        The method works for both the quaternion and euler angle orientation parametrisation.\n\n        Args:\n            tsstr (sharpy.utils.datastructures.StructTimeStepInfo): Structural timestep at the linearisation point\n\n        Notes:\n\n            The gravity forces are linearised to express them in terms of the beam formulation input variables:\n\n                * Nodal forces: :math:`\\delta \\mathbf{f}_A`\n\n                * Nodal moments: :math:`\\delta(T^T \\mathbf{m}_B)`\n\n                * Total forces (rigid body equations): :math:`\\delta \\mathbf{F}_A`\n\n                * Total moments (rigid body equations): :math:`\\delta \\mathbf{M}_A`\n\n            Gravity forces are naturally expressed in ``G`` (inertial) frame\n\n            .. math:: \\mathbf{f}_{G,0} = \\mathbf{M\\,g}\n\n            where the :math:`\\mathbf{M}` is the tangent mass matrix obtained at the linearisation reference.\n\n            To obtain the gravity forces expressed in A frame we make use of the projection matrices\n\n            .. math:: \\mathbf{f}_A = C^{AG}(\\boldsymbol{\\chi}) \\mathbf{f}_{G,0}\n\n            that projects a vector in the inertial frame ``G`` onto the body attached frame ``A``.\n\n            The projection of a vector can then be linearised as\n\n            .. math::\n                \\delta \\mathbf{f}_A = C^{AG} \\delta \\mathbf{f}_{G,0}\n                + \\frac{\\partial}{\\partial \\boldsymbol{\\chi}}(C^{AG} \\mathbf{f}_{G,0}) \\delta\\boldsymbol{\\chi}.\n\n            * Nodal forces:\n\n                The linearisation of the gravity forces acting at each node is simply\n\n                .. math::\n                    \\delta \\mathbf{f}_A =\n                    + \\frac{\\partial}{\\partial \\boldsymbol{\\chi}}(C^{AG} \\mathbf{f}_{G,0}) \\delta\\boldsymbol{\\chi}\n\n                where it is assumed that :math:`\\delta\\mathbf{f}_G = 0`.\n\n            * Nodal moments:\n\n                The gravity moments can be expressed in the local node frame of reference ``B`` by\n\n                .. math:: \\mathbf{m}_B = \\tilde{X}_{B,CG}C^{BA}(\\Psi)C^{AG}(\\boldsymbol{\\chi})\\mathbf{f}_{G,0}\n\n                The linearisation is given by:\n\n                .. math::\n                    \\delta \\mathbf{m}_B = \\tilde{X}_{B,CG}\n                    \\left(\\frac{\\partial}{\\partial\\Psi}(C^{BA}\\mathbf{f}_{A,0})\\delta\\Psi +\n                    C^{BA}\\frac{\\partial}{\\partial\\boldsymbol{\\chi}}(C^{AG}\\mathbf{f}_{G,0})\\delta\\boldsymbol{\\chi}\\right)\n\n                However, recall that the input moments are defined in tangential space\n                :math:`\\delta(T^\\top\\mathbf{m}_B)` whose linearised expression is\n\n                .. math:: \\delta(T^T(\\Psi) \\mathbf{m}_B) = T_0^T \\delta \\mathbf{m}_B +\n                    \\frac{\\partial}{\\partial \\Psi}(T^T \\mathbf{m}_{B,0})\\delta\\Psi\n\n                where the :math:`\\delta \\mathbf{m}_B` term has been defined above.\n\n            * Total forces:\n\n                The total forces include the contribution from all flexible degrees of freedom as well as the gravity\n                forces arising from the mass at the clamped node\n\n                .. math:: \\mathbf{F}_A = \\sum_n \\mathbf{f}_A + \\mathbf{f}_{A,clamped}\n\n                which becomes\n\n                .. math:: \\delta \\mathbf{F}_A = \\sum_n \\delta \\mathbf{f}_A +\n                    \\frac{\\partial}{\\partial\\boldsymbol{\\chi}}\\left(C^{AG}\\mathbf{f}_{G,clamped}\\right)\n                    \\delta\\boldsymbol{\\chi}.\n\n            * Total moments:\n\n                The total moments, as opposed to the nodal moments, are expressed in A frame and again require the\n                addition of the moments from the flexible structural nodes as well as the ones from the clamped node\n                itself.\n\n                .. math:: \\mathbf{M}_A = \\sum_n \\tilde{X}_{A,n}^{CG} C^{AG} \\mathbf{f}_{n,G}\n                    + \\tilde{X}_{A,clamped}C^{AG}\\mathbf{f}_{G, clamped}\n\n                where :math:`X_{A,n}^{CG} = R_{A,n} + C^{AB}(\\Psi)X_{B,n}^{CG}`. Its linearised form is\n\n                .. math:: \\delta X_{A,n}^{CG} = \\delta R_{A,n}\n                    + \\frac{\\partial}{\\partial \\Psi}(C^{AB} X_{B,CG})\\delta\\Psi\n\n                Therefore, the overall linearisation of the total moment is defined as\n\n                .. math:: \\delta \\mathbf{M}_A =\n                    \\tilde{X}_{A,total}^{CG} \\frac{\\partial}{\\partial \\boldsymbol{\\chi}}(C^{AG}\\mathbf{F}_{G, total})\n                    \\delta \\boldsymbol{\\chi}\n                    -\\sum_n \\tilde{C}^{AG}\\mathbf{f}_{G,0} \\delta X_{A,n}^{CG}\n\n                where :math:`X_{A, total}` is the centre of gravity of the entire system expressed in ``A`` frame and\n                :math:`\\mathbf{F}_{G, total}` are the gravity forces of the overall system in ``G`` frame, including the\n                contributions from the clamped node.\n\n\n            The linearisation introduces damping and stiffening terms since the :math:`\\delta\\boldsymbol{\\chi}` and\n            :math:`\\delta\\boldsymbol{\\Psi}` terms are found in the damping and stiffness matrices respectively.\n\n            Therefore, the beam matrices need updating to account for these terms:\n\n                * Terms from the linearisation of the nodal moments will be assembled in the rows corresponding to\n                  moment equations and columns corresponding to the cartesian rotation vector\n\n                    .. math:: K_{ss}^{m,\\Psi} \\leftarrow -T_0^T \\tilde{X}_{B,CG}\n                        \\frac{\\partial}{\\partial\\Psi}(C^{BA}\\mathbf{f}_{A,0})\n                        -\\frac{\\partial}{\\partial \\Psi}(T^T \\mathbf{m}_{B,0})\n\n                * Terms from the linearisation of the translation forces with respect to the orientation are assembled\n                  in the damping matrix, the rows corresponding to translational forces and columns to orientation\n                  degrees of freedom\n\n                    .. math:: C_{sr}^{f,\\boldsymbol{\\chi}} \\leftarrow -\n                        \\frac{\\partial}{\\partial \\boldsymbol{\\chi}}(C^{AG} \\mathbf{f}_{G,0})\n\n                * Terms from the linearisation of the moments with respect to the orientation are assembled in the\n                  damping matrix, with the rows correspondant to the moments and the columns to the orientation degrees\n                  of freedom\n\n                    .. math:: C_{sr}^{m,\\boldsymbol{\\chi}} \\leftarrow -\n                        T_0^T\\tilde{X}_{B,CG}C^{BA}\\frac{\\partial}{\\partial\\boldsymbol{\\chi}}(C^{AG}\\mathbf{f}_{G,0})\n\n                * Terms from the linearisation of the total forces with respect to the orientation correspond to the\n                  rigid body equations in the damping matrix, the rows to the translational forces and columns to the\n                  orientation\n\n                    .. math:: C_{rr}^{F,\\boldsymbol{\\chi}} \\leftarrow\n                        - \\sum_n \\frac{\\partial}{\\partial \\boldsymbol{\\chi}}(C^{AG} \\mathbf{f}_{G,0})\n\n                * Terms from the linearisation of the total moments with respect to the orientation correspond to the\n                  rigid body equations in the damping matrix, the rows to the moments and the columns to the orientation\n\n                    .. math:: C_{rr}^{M,\\boldsymbol{\\chi}} \\leftarrow\n                        - \\sum_n\\tilde{X}_{A,n}^{CG} \\frac{\\partial}{\\partial \\boldsymbol{\\chi}}(C^{AG}\\mathbf{f}_{G,0})\n\n                * Terms from the linearisation of the total moments with respect to the nodal position :math:`R_A` are\n                  included in the stiffness matrix, the rows corresponding to the moments in the rigid body\n                  equations and the columns to the nodal position\n\n                    .. math:: K_{rs}^{M,R} \\leftarrow + \\sum_n \\tilde{\\mathbf{f}_{A,0}}\n\n                * Terms from the linearisation of the total moments with respect to the cartesian rotation vector are\n                  included in the stiffness matrix, the rows corresponding to the moments in the rigid body equations\n                  and the columns to the cartesian rotation vector\n\n                    .. math:: K_{rs}^{M, \\Psi} \\leftarrow\n                        + \\sum_n \\tilde{\\mathbf{f}_{A,0}}\\frac{\\partial}{\\partial \\Psi}(C^{AB} X_{B,CG})\n                    \n        \"\"\"\n\n        if tsstr is None:\n            tsstr = self.tsstruct0\n\n        if self.settings['print_info']:\n            try:\n                cout.cout_wrap('\\nLinearising gravity terms...')\n            except ValueError:\n                pass\n\n        num_node = tsstr.num_node\n        flex_dof = 6 * sum(self.structure.vdof >= 0)\n        if self.use_euler:\n            rig_dof = 9\n            # This is a rotation matrix that rotates a vector from G to A\n            Cag = algebra.euler2rot(tsstr.euler)\n            Cga = Cag.T\n\n            # Projection matrices - this projects the vector in G t to A\n            Pag = Cga\n            Pga = Cag\n        else:\n            rig_dof = 10\n            # get projection matrix A->G\n            # Cga = algebra.quat2rotation(tsstr.quat)\n            # Pga = Cga.T\n            # Pag = Pga.T\n            Cag = algebra.quat2rotation(tsstr.quat)  # Rotation matrix FoR G rotated by quat\n            Pag = Cag.T\n            Pga = Pag.T\n\n        # Mass matrix partitions for CG calculations\n        Mss = self.Mstr[:flex_dof, :flex_dof]\n        Mrr = self.Mstr[-rig_dof:, -rig_dof:]\n\n        # Initialise damping and stiffness gravity terms\n        Crr_grav = np.zeros((rig_dof, rig_dof))\n        Csr_grav = np.zeros((flex_dof, rig_dof))\n        Crr_debug = np.zeros((rig_dof, rig_dof))\n        Krs_grav = np.zeros((rig_dof, flex_dof))\n        Kss_grav = np.zeros((flex_dof, flex_dof))\n\n        # Overall CG in A frame\n        Xcg_A = -np.array([Mrr[2, 4], Mrr[0, 5], Mrr[1, 3]]) / Mrr[0, 0]\n        Xcg_Askew = algebra.skew(Xcg_A)\n\n        if self.settings['print_info']:\n            cout.cout_wrap('\\tM = %.2f kg' % Mrr[0, 0], 1)\n            cout.cout_wrap('\\tX_CG A -> %.2f %.2f %.2f' %(Xcg_A[0], Xcg_A[1], Xcg_A[2]), 1)\n\n        FgravA = np.zeros(3)\n        FgravG = np.zeros(3)\n\n        for i_node in range(num_node):\n            # Gravity forces at the linearisation condition (from NL SHARPy in A frame)\n            fgravA = tsstr.gravity_forces[i_node, :3]\n            fgravG = Pga.dot(fgravA)\n            # fgravG = tsstr.gravity_forces[i_node, :3]\n            mgravA = tsstr.gravity_forces[i_node, 3:]\n            fgravA = Pag.dot(fgravG)\n            mgravG = Pag.dot(mgravA)\n\n            # Get nodal position - A frame\n            Ra = tsstr.pos[i_node, :]\n\n            # retrieve element and local index\n            ee, node_loc = self.structure.node_master_elem[i_node, :]\n            psi = tsstr.psi[ee, node_loc, :]\n            Cab = algebra.crv2rotation(psi)\n            Cba = Cab.T\n            Cbg = Cba.dot(Pag)\n\n            # Tangential operator for moments calculation\n            Tan = algebra.crv2tan(psi)\n\n            jj = 0  # nodal dof index\n            bc_at_node = self.structure.boundary_conditions[i_node]  # Boundary conditions at the node\n\n            if bc_at_node == 1:  # clamp (only rigid-body)\n                dofs_at_node = 0\n                jj_tra, jj_rot = [], []\n\n            elif bc_at_node == -1 or bc_at_node == 0:  # (rigid+flex body)\n                dofs_at_node = 6\n                jj_tra = 6 * self.structure.vdof[i_node] + np.array([0, 1, 2], dtype=int)  # Translations\n                jj_rot = 6 * self.structure.vdof[i_node] + np.array([3, 4, 5], dtype=int)  # Rotations\n            else:\n                raise NameError('Invalid boundary condition (%d) at node %d!' \\\n                                % (bc_at_node, i_node))\n\n            jj += dofs_at_node\n\n            if bc_at_node != 1:\n                # Nodal centre of gravity (in the case of additional lumped masses, else should be zero)\n                Mss_indices = np.concatenate((jj_tra, jj_rot))\n                Mss_node = Mss[Mss_indices,:]\n                Mss_node = Mss_node[:, Mss_indices]\n                Xcg_B = Cba.dot(-np.array([Mss_node[2, 4], Mss_node[0, 5], Mss_node[1, 3]]) / Mss_node[0, 0])\n                Xcg_Bskew = algebra.skew(Xcg_B)\n\n                # Nodal CG in A frame\n                Xcg_A_n = Ra + Cab.dot(Xcg_B)\n                Xcg_A_n_skew = algebra.skew(Xcg_A_n)\n\n                # Nodal CG in G frame - debug\n                Xcg_G_n = Pga.dot(Xcg_A_n)\n\n                if self.settings['print_info']:\n                    cout.cout_wrap(\"Node %2d \\t-> B %.3f %.3f %.3f\" %(i_node, Xcg_B[0], Xcg_B[1], Xcg_B[2]), 2)\n                    cout.cout_wrap(\"\\t\\t\\t-> A %.3f %.3f %.3f\" %(Xcg_A_n[0], Xcg_A_n[1], Xcg_A_n[2]), 2)\n                    cout.cout_wrap(\"\\t\\t\\t-> G %.3f %.3f %.3f\" %(Xcg_G_n[0], Xcg_G_n[1], Xcg_G_n[2]), 2)\n                    cout.cout_wrap(\"\\tNode mass:\", 2)\n                    cout.cout_wrap(\"\\t\\tMatrix: %.4f\" % Mss_node[0, 0], 2)\n                    # cout.cout_wrap(\"\\t\\tGrav: %.4f\" % (np.linalg.norm(fgravG)/9.81), 2)\n\n            if self.use_euler:\n                if bc_at_node != 1:\n                    # Nodal moments due to gravity -> linearisation terms wrt to delta_psi\n                    Kss_grav[np.ix_(jj_rot, jj_rot)] -= Tan.dot(Xcg_Bskew.dot(algebra.der_Ccrv_by_v(psi, fgravA)))\n                    Kss_grav[np.ix_(jj_rot, jj_rot)] -= algebra.der_TanT_by_xv(psi, Xcg_Bskew.dot(Cbg.dot(fgravG)))\n\n                    # Nodal forces due to gravity -> linearisation terms wrt to delta_euler\n                    Csr_grav[jj_tra, -3:] -= algebra.der_Peuler_by_v(tsstr.euler, fgravG)\n\n                    # Nodal moments due to gravity -> linearisation terms wrt to delta_euler\n                    Csr_grav[jj_rot, -3:] -= Tan.dot(Xcg_Bskew.dot(Cba.dot(algebra.der_Peuler_by_v(tsstr.euler, fgravG))))\n\n                    # Total moments -> linearisation terms wrt to delta_Ra\n                    # These terms are not affected by the Euler matrix. Sign is correct (+)\n                    Krs_grav[3:6, jj_tra] += algebra.skew(fgravA)\n\n                    # Total moments -> linearisation terms wrt to delta_Psi\n                    Krs_grav[3:6, jj_rot] += np.dot(algebra.skew(fgravA), algebra.der_Ccrv_by_v(psi, Xcg_B))\n\n            else:\n                if bc_at_node != 1:\n                    # Nodal moments due to gravity -> linearisation terms wrt to delta_psi\n                    Kss_grav[np.ix_(jj_rot, jj_rot)] -= Tan.dot(Xcg_Bskew.dot(algebra.der_Ccrv_by_v(psi, fgravA)))\n                    Kss_grav[np.ix_(jj_rot, jj_rot)] -= algebra.der_TanT_by_xv(psi, Xcg_Bskew.dot(Cbg.dot(fgravG)))\n\n                    # Total moments -> linearisation terms wrt to delta_Ra\n                    # Check sign (in theory it should be +=)\n                    Krs_grav[3:6, jj_tra] += algebra.skew(fgravA)\n\n                    # Total moments -> linearisation terms wrt to delta_Psi\n                    Krs_grav[3:6, jj_rot] += np.dot(algebra.skew(fgravA), algebra.der_Ccrv_by_v(psi, Xcg_B))\n\n                    # Nodal forces due to gravity -> linearisation terms wrt to delta_euler\n                    Csr_grav[jj_tra, -4:] -= algebra.der_CquatT_by_v(tsstr.quat, fgravG) # ok\n                    # Crr_grav[:3, -4:] -= algebra.der_CquatT_by_v(tsstr.quat, fgravG)  # not ok - see below\n\n                    # Nodal moments due to gravity -> linearisation terms wrt to delta_euler\n                    Csr_grav[jj_rot, -4:] -= Tan.dot(Xcg_Bskew.dot(Cba.dot(algebra.der_CquatT_by_v(tsstr.quat, fgravG))))\n\n\n            # Debugging:\n            FgravA += fgravA\n            FgravG += fgravG\n\n        if self.use_euler:\n            # Total gravity forces acting at the A frame\n            Crr_grav[:3, -3:] -= algebra.der_Peuler_by_v(tsstr.euler, FgravG)\n\n            # Total moments due to gravity in A frame\n            Crr_grav[3:6, -3:] -= algebra.skew(Xcg_A).dot(algebra.der_Peuler_by_v(tsstr.euler, FgravG))\n        else:\n            # Total gravity forces acting at the A frame\n            Crr_grav[:3, -4:] -= algebra.der_CquatT_by_v(tsstr.quat, FgravG)\n\n            # Total moments due to gravity in A frame\n            Crr_grav[3:6, -4:] -= algebra.skew(Xcg_A).dot(algebra.der_CquatT_by_v(tsstr.quat, FgravG))\n\n        # Update matrices\n        self.Kstr[:flex_dof, :flex_dof] += Kss_grav\n\n        if self.Kstr[:flex_dof, :flex_dof].shape != self.Kstr.shape:  # If the beam is free, update rigid terms as well\n            self.Cstr[-rig_dof:, -rig_dof:] += Crr_grav\n            self.Cstr[:-rig_dof, -rig_dof:] += Csr_grav\n            self.Kstr[flex_dof:, :flex_dof] += Krs_grav\n\n            # Save gravity matrices for post-processing\n            self.Crr_grav = Crr_grav\n            self.Csr_grav = Csr_grav\n            self.Krs_grav = Krs_grav\n            self.Kss_grav = Kss_grav\n\n        if self.modal:\n            self.Ccut = self.U.T.dot(self.Cstr.dot(self.U))\n\n        if self.settings['print_info']:\n            cout.cout_wrap('\\tUpdated the beam C, modal C and K matrices with the terms from the gravity linearisation\\n')\n\n    def linearise_applied_forces(self, tsstr=None):\n        r\"\"\"\n        Linearise externally applied follower forces given in the local ``B`` reference frame.\n\n        Updates the stiffness matrix with terms arising from this linearisation.\n\n        The linearised beam equations are expressed in the following frames of reference:\n\n            * Nodal forces: :math:`\\delta \\mathbf{f}_A`\n\n            * Nodal moments: :math:`\\delta(T^T \\mathbf{m}_B)`\n\n            * Total forces (rigid body equations): :math:`\\delta \\mathbf{F}_A`\n\n            * Total moments (rigid body equations): :math:`\\delta \\mathbf{M}_A`\n\n        Thus, when linearising externally applied follower forces projected onto the appropriate frame\n\n        .. math:: \\boldsymbol{f}_A^{ext} = C^{AB}(\\boldsymbol{\\psi})\\boldsymbol{f}^{ext}_B\n\n        the following terms appear:\n\n        .. math::\n            \\delta\\boldsymbol{f}_A^{ext} = \\frac{\\partial}{\\partial\\boldsymbol{\\psi}}\n            \\left(C^{AB}(\\boldsymbol{\\psi})\\boldsymbol{f}^{ext}_{0,B}\\right)\\delta\\boldsymbol{\\psi} +\n            C^{AB}_0\\delta\\boldsymbol f_B^{ext}\n\n        where the :math:`\\delta\\boldsymbol{\\psi}` is a stiffenning term that needs to be included in the stiffness\n        matrix. The terms will appear in the rows relating to the translational degrees of freedom and the columns that\n        correspond to the cartesian rotation vector.\n\n        .. math::\n            K_{ss}^{f,\\Psi} \\leftarrow -\\frac{\\partial}{\\partial\\boldsymbol{\\psi}}\n            \\left(C^{AB}(\\boldsymbol{\\psi})\\boldsymbol{f}^{ext}_{0,B}\\right)\n\n\n        Externally applied moments in the material frame :math:`\\boldsymbol{m}_B^{ext}` result in the following\n        linearised expression:\n\n        .. math::\n            \\delta(T^\\top\\boldsymbol{m}_B) = \\frac{\\partial}{\\partial\\boldsymbol{\\psi}}\\left(\n            T^\\top(\\boldsymbol{\\psi})\\boldsymbol{m}^{ext}_{0,B}\\right)\\delta\\boldsymbol{\\psi} +\n            T_0^\\top \\delta\\boldsymbol{m}_B^{ext}\n\n        Which results in the following stiffenning term:\n\n        .. math::\n            K_{ss}^{m,\\Psi} \\leftarrow -\\frac{\\partial}{\\partial\\boldsymbol{\\psi}}\\left(\n            T^\\top(\\boldsymbol{\\psi})\\boldsymbol{m}^{ext}_{0,B}\\right)\n\n        The total contribution of moments must be summed up for the rigid body equations, and include contributions\n        due to externally applied forces as well as moments:\n\n        .. math::\n            \\boldsymbol{M}_A^{ext} = \\sum_n \\tilde{\\boldsymbol{R}}_A C^{AB}(\\boldsymbol{\\psi}) \\boldsymbol{f}_B^{ext} +\n            \\sum C^{AB}(\\boldsymbol{\\psi})\\boldsymbol{m}_B^{ext}\n\n        The linearisation of this term becomes\n\n        .. math::\n            \\delta\\boldsymbol{M}_A^{ext} = \\sum\\left(-\\widetilde{C^{AB}_0 \\boldsymbol{f}_{0,B}^{ext}}\\delta \\boldsymbol{R}_A\n            + \\widetilde{\\boldsymbol{R}}\\frac{\\partial}{\\partial\\boldsymbol{\\psi}}\\left(C^{AB}\\boldsymbol{f}_B\\right)\n            \\delta \\boldsymbol{\\psi} +\n            \\widetilde{\\boldsymbol{R}}C^{AB}\\delta\\boldsymbol{f}^{ext}_B\\right) +\n            \\sum\\left(\\frac{\\partial}{\\partial\\boldsymbol{\\psi}}\\left(C^{AB}\\boldsymbol{m}_{0,B}\\right)\n            \\delta\\boldsymbol{\\psi} +\n            C^AB\\delta\\boldsymbol{m}_B^{ext}\\right)\n\n        which gives the following stiffenning terms in the rigid-flex partition of the stiffness matrix:\n\n        .. math:: K_{ss}^{M,R} \\leftarrow +\\sum\\widetilde{C^{AB}_0 \\boldsymbol{f}_{0,B}^{ext}}\n\n        .. math:: K_{ss}^{M,\\Psi} \\leftarrow -\\sum\\widetilde{\\boldsymbol{R}}\\frac{\\partial}{\\partial\\boldsymbol{\\psi}}\n            \\left(C^{AB}\\boldsymbol{f}_{0,B}\\right)\n\n        and\n\n        .. math:: K_{ss}^{M,\\Psi} \\leftarrow  -\\sum\\frac{\\partial}{\\partial\\boldsymbol{\\psi}}\n            \\left(C^{AB}\\boldsymbol{m}_{0,B}\\right).\n\n\n        Args:\n            tsstr (sharpy.utils.datastructures.StructTimeStepInfo): Linearisation time step.\n        \"\"\"\n        if tsstr is None:\n            tsstr = self.tsstruct0\n\n        # TODO: Future feature: gains for externally applied forces (i.e. thrust inputs)\n\n        num_node = tsstr.num_node\n        flex_dof = 6 * sum(self.structure.vdof >= 0)\n        if self.use_euler:\n            rig_dof = 9\n            # This is a rotation matrix that rotates a vector from G to A\n            Cag = algebra.euler2rot(tsstr.euler)\n            Cga = Cag.T\n\n            # Projection matrices - this projects the vector in G t to A\n            Pag = Cga\n            Pga = Cag\n        else:\n            rig_dof = 10\n\n        stiff_flex = np.zeros((flex_dof, flex_dof), dtype=float)  # flex-flex partition of K\n        stiff_rig = np.zeros((rig_dof, flex_dof), dtype=float)  # rig-flex partition of K\n\n        for i_node in range(num_node):\n            fext_b = self.structure.steady_app_forces[i_node, :3]\n            mext_b = self.structure.steady_app_forces[i_node, 3:]\n\n            # retrieve element and local index\n            ee, node_loc = self.structure.node_master_elem[i_node, :]\n            psi = tsstr.psi[ee, node_loc, :]\n            Cab = algebra.crv2rotation(psi)\n            Cba = Cab.T\n\n            # Tangential operator for moments calculation\n            Tan = algebra.crv2tan(psi)\n\n            # Get nodal position - in A frame\n            Ra = tsstr.pos[i_node, :]\n\n            jj = 0  # nodal dof index\n            bc_at_node = self.structure.boundary_conditions[i_node]  # Boundary conditions at the node\n\n            if bc_at_node == 1:  # clamp (only rigid-body)\n                dofs_at_node = 0\n                jj_tra, jj_rot = [], []\n\n            elif bc_at_node == -1 or bc_at_node == 0:  # (rigid+flex body)\n                dofs_at_node = 6\n                jj_tra = 6 * self.structure.vdof[i_node] + np.array([0, 1, 2], dtype=int)  # Translations\n                jj_rot = 6 * self.structure.vdof[i_node] + np.array([3, 4, 5], dtype=int)  # Rotations\n            else:\n                raise NameError('Invalid boundary condition ({}) at node {}'.format(bc_at_node, i_node))\n\n            jj += dofs_at_node\n\n            if bc_at_node != 1:\n                # Externally applied follower forces\n                stiff_flex[np.ix_(jj_tra, jj_rot)] -= algebra.der_Ccrv_by_v(psi, fext_b)\n                stiff_rig[:3, jj_rot] -= algebra.der_Ccrv_by_v(psi, fext_b)  # Rigid body contribution\n\n                # Externally applied moments in B frame\n                stiff_flex[np.ix_(jj_rot, jj_rot)] -= algebra.der_TanT_by_xv(psi, mext_b)\n\n                # Total moments\n                # force contribution\n                stiff_rig[3:6, jj_tra] += algebra.skew(Cab.dot(fext_b))  # delta Ra term\n                stiff_rig[3:6, jj_rot] -= algebra.skew(Ra).dot(algebra.der_Ccrv_by_v(psi, fext_b))  # delta psi term\n\n                # moment contribution\n                stiff_rig[3:6, jj_rot] -= algebra.der_Ccrv_by_v(psi, mext_b)\n\n            if bc_at_node == 1:\n                # forces applied at the A-frame (clamped node) need special attention since the\n                # node has an associated CRV to it's master element which may not be zero.\n                # forces applied at this node only appear in the rigid-body equations\n                try:\n                    closest_node = self.structure.connectivities[ee, node_loc + 2]\n                except IndexError:  # node is not in the first position\n                    try:\n                        closest_node = self.structure.connectivities[ee, node_loc + 1]\n                    except IndexError:  # node is the midpoint\n                        closest_node = self.structure.connectivities[ee, node_loc - 1]\n\n                # indices of the node whos CRV applies to the clamped node\n                jj_rot = 6 * self.structure.vdof[closest_node] + np.array([3, 4, 5], dtype=int)\n\n                stiff_rig[:3, jj_rot] -= algebra.der_Ccrv_by_v(psi, fext_b)  # Rigid body contribution\n                # Total moments\n                # force contribution\n                stiff_rig[3:6, jj_rot] += algebra.skew(Cab.dot(fext_b))  # delta Ra term\n                stiff_rig[3:6, jj_rot] -= algebra.skew(Ra).dot(algebra.der_Ccrv_by_v(psi, fext_b))  # delta psi term\n\n                # moment contribution\n                stiff_rig[3:6, jj_rot] -= algebra.der_Ccrv_by_v(psi, mext_b)\n\n        self.Kstr[:flex_dof, :flex_dof] += stiff_flex\n\n        if self.Kstr[:flex_dof, :flex_dof].shape != self.Kstr.shape:  # free flying structure\n            self.Kstr[-rig_dof:, :flex_dof] += stiff_rig\n\n    def assemble(self, Nmodes=None):\n        r\"\"\"\n        Assemble state-space model\n\n        Several assembly options are available:\n\n        1. Discrete-time, Newmark-:math:`\\beta`:\n            * Modal projection onto undamped modes. It uses the modal projection such\n              that the generalised coordinates :math:`\\eta` are transformed into modal space by\n\n                    .. math:: \\mathbf{\\eta} = \\mathbf{\\Phi\\,q}\n\n                where :math:`\\mathbf{\\Phi}` are the first ``Nmodes`` right eigenvectors.\n                Therefore, the equation of motion can be re-written such that the modes normalise the mass matrix to\n                become the identity matrix.\n\n                    .. math:: \\mathbf{I_{Nmodes}}\\mathbf{\\ddot{q}} + \\mathbf{\\Lambda_{Nmodes}\\,q} = 0\n\n                The system is then assembled in Newmark-:math:`\\beta` form as detailed in :func:`newmark_ss`\n\n            * Full size system assembly. No modifications are made to the mass, damping or stiffness matrices and the\n              system is directly assembled by :func:`newmark_ss`.\n\n        2. Continuous time state-space\n\n\n        Args:\n            Nmodes (int): number of modes to retain\n        \"\"\"\n\n        ### checks\n        assert self.inout_coords in ['modes', 'nodes'], \\\n            'inout_coords=%s not implemented!' % self.inout_coords\n\n        dlti = self.dlti\n        modal = self.modal\n        num_dof = self.num_dof\n        if Nmodes is None or Nmodes >= self.num_modes:\n            Nmodes = self.num_modes\n\n        if dlti:  # ---------------------------------- assemble discrete time\n\n            if self.discr_method in ['zoh', 'bilinear']:\n                # assemble continuous-time\n                self.dlti = False\n                self.assemble(Nmodes)\n                # convert into discrete\n                self.dlti = True\n                self.cont2disc()\n\n            elif self.discr_method == 'newmark':\n\n                if modal:  # Modal projection\n                    if self.proj_modes == 'undamped':\n                        Phi = self.U[:, :Nmodes]\n\n                        Ass, Bss, Css, Dss = newmark_ss(\n                            Phi.T @ self.Mstr @ Phi,\n                            Phi.T @ self.Cstr @ Phi,\n                            Phi.T @ self.Kstr @ Phi,\n                            self.dt,\n                            self.newmark_damp)\n\n                        self.Kin = libss.Gain(Phi.T)\n                        self.Kin.input_variables = LinearVector([InputVariable('forces_n',\n                                                                             size=self.Mstr.shape[0],\n                                                                             index=0)])\n                        self.Kin.output_variables = LinearVector([OutputVariable('Q',\n                                                                               size=Nmodes,\n                                                                               index=0)])\n\n                        self.Kout = libss.Gain(sc.linalg.block_diag(*[Phi, Phi]))\n                        self.Kout.input_variables = LinearVector([InputVariable('q', size=Nmodes, index=0),\n                                                                  InputVariable('q_dot', size=Nmodes, index=1)])\n                        output_variables = LinearVector([OutputVariable('eta', size=self.num_dof_flex, index=0),\n                                                         OutputVariable('eta_dot', size=self.num_dof_flex, index=1)])\n                        if not self.clamped:\n                            output_variables.add('beta_bar', size=self.num_dof_rig, index=0.5)\n                            output_variables.append('beta', size=self.num_dof_rig)\n\n                        self.Kout.output_variables = output_variables\n\n                    else:\n                        raise NameError(\n                            'Newmark-beta discretisation not available ' \\\n                            'for projection on damped eigenvectors')\n\n                    # build state-space model\n                    self.SSdisc = libss.StateSpace(Ass, Bss, Css, Dss, dt=self.dt)\n                    input_variables = LinearVector([InputVariable('Q', size=Nmodes, index=0)])\n\n                    output_variables = LinearVector([OutputVariable('q', size=Nmodes, index=0),\n                                                     OutputVariable('q_dot', size=Nmodes, index=1)])\n\n                    state_variables = output_variables.transform(output_variables,\n                                                                 to_type=StateVariable)\n\n                    self.SSdisc.input_variables = input_variables\n                    self.SSdisc.output_variables = output_variables\n                    self.SSdisc.state_variables = state_variables\n\n                    if self.inout_coords == 'nodes':\n                        self.SSdisc = libss.addGain(self.SSdisc, self.Kin, 'in')\n                        self.SSdisc = libss.addGain(self.SSdisc, self.Kout, 'out')\n                        self.Kin, self.Kout = None, None\n\n\n                else:  # Full system\n                    Ass, Bss, Css, Dss = newmark_ss(\n                        self.Mstr, self.Cstr, self.Kstr,\n                        self.dt, self.newmark_damp)\n                    self.Kin = None\n                    self.Kout = None\n                    self.SSdisc = libss.StateSpace(Ass, Bss, Css, Dss, dt=self.dt)\n\n                    input_variables = LinearVector([InputVariable('forces_n',\n                                                                           size=self.Mstr.shape[0],\n                                                                           index=0)])\n\n                    output_variables = LinearVector([OutputVariable('eta', size=self.num_dof_flex, index=0),\n                                                     OutputVariable('eta_dot', size=self.num_dof_flex, index=1)])\n                    if not self.clamped:\n                        output_variables.add('beta_bar', size=self.num_dof_rig, index=0.5)\n                        output_variables.append('beta', size=self.num_dof_rig)\n\n                    self.SSdisc.output_variables = output_variables\n                    self.SSdisc.input_variables = input_variables\n                    self.SSdisc.state_variables = LinearVector.transform(output_variables, to_type=StateVariable)\n            else:\n                raise NameError(\n                    'Discretisation method %s not available' % self.discr_method)\n\n\n        else:  # -------------------------------- assemble continuous time\n\n            if modal:  # Modal projection\n\n                Ass = np.zeros((2 * Nmodes, 2 * Nmodes))\n                Css = np.eye(2 * Nmodes)\n                iivec = np.arange(Nmodes, dtype=int)\n\n                if self.proj_modes == 'undamped':\n                    Phi = self.U[:, :Nmodes]\n                    Ass[iivec, Nmodes + iivec] = 1.\n                    # Ass[Nmodes:, :Nmodes] = -np.diag(self.freq_natural[:Nmodes] ** 2)\n                    Ass[Nmodes:, :Nmodes] = -self.U.T.dot(self.Kstr.dot(self.U))\n                    if self.Ccut is not None:\n                        Ass[Nmodes:, Nmodes:] = -self.Ccut[:Nmodes, :Nmodes]\n                    Bss = np.zeros((2 * Nmodes, Nmodes))\n                    Dss = np.zeros((2 * Nmodes, Nmodes))\n                    Bss[Nmodes + iivec, iivec] = 1.\n                    self.Kin = libss.Gain(Phi.T)\n                    self.Kin.input_variables = LinearVector([InputVariable('forces_n',\n                                                                           size=self.Mstr.shape[0],\n                                                                           index=0)])\n                    self.Kin.output_variables = LinearVector([OutputVariable('Q',\n                                                                             size=Nmodes,\n                                                                             index=0)])\n                    self.Kout = libss.Gain(sc.linalg.block_diag(*[Phi, Phi]))\n                    self.Kout.input_variables = LinearVector([InputVariable('q', size=Nmodes, index=0),\n                                                              InputVariable('q_dot', size=Nmodes, index=1)])\n\n                    output_variables = LinearVector([OutputVariable('eta', size=self.num_dof_flex, index=0),\n                                                     OutputVariable('eta_dot', size=self.num_dof_flex, index=1)])\n                    if not self.clamped:\n                        output_variables.add('beta_bar', size=self.num_dof_rig, index=0.5)\n                        output_variables.append('beta', size=self.num_dof_rig)\n\n                    self.Kout.output_variables = output_variables\n                else:  # damped mode shapes\n                    # The algorithm assumes that for each couple of complex conj\n                    # eigenvalues, only one eigenvalue (and the eigenvectors\n                    # associated to it) is include in self.eigs.\n                    eigs = self.eigs[:Nmodes]\n                    U = self.U[:, :Nmodes]\n                    V = self.V[:, :Nmodes]\n                    Ass[iivec, iivec] = eigs.real\n                    Ass[iivec, Nmodes + iivec] = -eigs.imag\n                    Ass[Nmodes + iivec, iivec] = eigs.imag\n                    Ass[Nmodes + iivec, Nmodes + iivec] = eigs.real\n                    Bss = np.eye(2 * Nmodes)\n                    Dss = np.zeros((2 * Nmodes, 2 * Nmodes))\n                    self.Kin = np.block(\n                        [[self.Kin_damp[iivec, :].real],\n                         [self.Kin_damp[iivec, :].imag]])\n                    self.Kout = np.block([2. * U.real, (-2.) * U.imag])\n\n                # build state-space model\n                self.SScont = libss.StateSpace(Ass, Bss, Css, Dss)\n                input_variables = LinearVector([InputVariable('Q', size=Nmodes, index=0)])\n\n                output_variables = LinearVector([OutputVariable('q', size=Nmodes, index=0),\n                                                 OutputVariable('q_dot', size=Nmodes, index=1)])\n\n                state_variables = output_variables.transform(output_variables,\n                                                             to_type=StateVariable)\n\n                self.SScont.input_variables = input_variables\n                self.SScont.output_variables = output_variables\n                self.SScont.state_variables = state_variables\n                if self.inout_coords == 'nodes':\n                    self.SScont = libss.addGain(self.SScont, self.Kin, 'in')\n                    self.SScont = libss.addGain(self.SScont, self.Kout, 'out')\n                    self.Kin, self.Kout = None, None\n\n            else:  # Full system\n                if self.Mstr is None:\n                    raise NameError('Full-states matrices not available')\n                Mstr, Cstr, Kstr = self.Mstr, self.Cstr, self.Kstr\n\n                Ass = np.zeros((2 * num_dof, 2 * num_dof))\n                Bss = np.zeros((2 * num_dof, num_dof))\n                Css = np.eye(2 * num_dof)\n                Dss = np.zeros((2 * num_dof, num_dof))\n                Minv_neg = -np.linalg.inv(self.Mstr)\n                Ass[range(num_dof), range(num_dof, 2 * num_dof)] = 1.\n                Ass[num_dof:, :num_dof] = np.dot(Minv_neg, Kstr)\n                Ass[num_dof:, num_dof:] = np.dot(Minv_neg, Cstr)\n                Bss[num_dof:, :] = -Minv_neg\n                self.Kin = None\n                self.Kout = None\n                self.SScont = libss.StateSpace(Ass, Bss, Css, Dss)\n\n                input_variables = LinearVector([InputVariable('forces_n',\n                                                              size=self.Mstr.shape[0],\n                                                              index=0)])\n\n                output_variables = LinearVector([OutputVariable('eta', size=self.num_dof_flex, index=0),\n                                                 OutputVariable('eta_dot', size=self.num_dof_flex, index=1)])\n                if not self.clamped:\n                    output_variables.add('beta_bar', size=self.num_dof_rig, index=0.5)\n                    output_variables.append('beta', size=self.num_dof_rig)\n\n                self.SScont.output_variables = output_variables\n                self.SScont.input_variables = input_variables\n                self.SScont.state_variables = LinearVector.transform(output_variables, to_type=StateVariable)\n\n\n    def freqresp(self, wv=None, bode=True):\n        \"\"\"\n        Computes the frequency response of the current state-space model. If\n        ``self.modal=True``, the in/out are determined according to ``self.inout_coords``\n        \"\"\"\n\n        assert wv is not None, 'Frequency range not provided.'\n\n        if self.dlti:\n            self.Ydisc = libss.freqresp(self.SSdisc, wv, dlti=self.dlti)\n            if bode:\n                self.Ydisc_abs = np.abs(self.Ydisc)\n                self.Ydisc_ph = np.angle(self.Ydisc, deg=True)\n        else:\n            self.Ycont = libss.freqresp(self.SScont, wv, dlti=self.dlti)\n            if bode:\n                self.Ycont_abs = np.abs(self.Ycont)\n                self.Ycont_ph = np.angle(self.Ycont, deg=True)\n\n    def converge_modal(self, wv=None, tol=None, Yref=None, Print=False):\n        \"\"\"\n        Determine number of modes required to achieve a certain convergence\n        of the modal solution in a prescribed frequency range ``wv``. The H-infinity\n        norm of the error w.r.t. ``Yref`` is used for assessing convergence.\n\n        .. Warning:: if a reference freq. response, Yref, is not provided, the full-\n            state continuous-time frequency response is used as reference. This\n            requires the full-states matrices ``Mstr``, ``Cstr``, ``Kstr`` to be available.\n        \"\"\"\n\n        if wv is None:\n            wv = self.wv\n        assert wv is not None, 'Frequency range not provided.'\n        assert tol is not None, 'Tolerance, tol, not provided'\n        assert self.modal is True, 'Convergence analysis requires modal=True'\n\n        if Yref is None:\n            # use cont. time. full-states as reference\n            dlti_here = self.dlti\n            self.modal = False\n            self.dlti = False\n            self.assemble()\n            self.freqresp(wv)\n            Yref = self.Ycont.copy()\n            self.dlti = dlti_here\n            self.modal = True\n\n        if Print:\n            print('No. modes\\tError\\tTolerance')\n        for nn in range(1, self.Nmodes + 1):\n            self.assemble(Nmodes=nn)\n            self.freqresp(wv, bode=False)\n            Yhere = self.Ycont\n            if self.dlti: Yhere = self.Ydisc\n            er = np.max(np.abs(Yhere - Yref))\n            if Print: print('%.3d\\t%.2e\\t%.2e' % (nn, er, tol))\n            if er < tol:\n                if Print: print('Converged!')\n                self.Nmodes = nn\n                break\n\n    def tune_newmark_damp(self, amplification_factor=0.999):\n        \"\"\"\n        Tune artifical damping to achieve a percent reduction of the lower\n        frequency (lower damped) mode\n        \"\"\"\n\n        assert self.discr_method == 'newmark' and self.dlti, \\\n            \"select self.discr_method='newmark' and self.dlti=True\"\n\n        newmark_damp = self.newmark_damp\n        import scipy.optimize as scopt\n\n        def get_res(newmark_damp_log10):\n            self.newmark_damp = 10. ** (newmark_damp_log10)\n            self.assemble()\n            eigsabs = np.abs(np.linalg.eigvals(self.SSdisc.A))\n            return np.max(eigsabs) - amplification_factor\n\n        exp_opt = scopt.fsolve(get_res, x0=-3)[0]\n\n        self.newmark_damp = 10. ** exp_opt\n        print('artificial viscosity: %.4e' % self.newmark_damp)\n\n    def update_modal(self):\n        r\"\"\"\n        Re-projects the full-states continuous-time structural dynamics equations\n\n        .. math::\n            \\mathbf{M}\\,\\mathbf{\\ddot{x}} +\\mathbf{C}\\,\\mathbf{\\dot{x}} + \\mathbf{K\\,x} = \\mathbf{F}\n\n        onto modal space. The modes used to project are controlled through the\n        ``self.proj_modes={damped or undamped}`` attribute.\n\n        .. Warning:: This method overrides SHARPy ``timestep_info`` results and requires\n            ``Mstr``, ``Cstr``, ``Kstr`` to be available.\n\n        \"\"\"\n\n        if self.proj_modes == 'undamped':\n            if self.Cstr is not None:\n                if self.settings['print_info']:\n                    cout.cout_wrap('Warning, projecting system with damping onto undamped modes')\n\n            # Eigenvalues are purely complex - only the complex part is calculated\n            eigenvalues, eigenvectors = np.linalg.eig(np.linalg.solve(self.Mstr, self.Kstr))\n\n            omega = np.sqrt(eigenvalues)\n            order = np.argsort(omega)[:self.Nmodes]\n            self.freq_natural = omega[order]\n\n            phi = eigenvectors[:, order]\n\n            phi = modalutils.mode_sign_convention(self.structure.boundary_conditions,\n                                                  phi,\n                                                  not self.clamped,\n                                                  self.use_euler)\n\n            if not self.clamped and self.use_principal_axes:\n                phi = modalutils.free_modes_principal_axes(phi, self.Mstr, use_euler=self.use_euler)\n\n            # Scale modes to have an identity mass matrix\n            phi = modalutils.scale_mass_normalised_modes(phi, self.Mstr)\n\n            self.U = phi\n\n            # Update\n            self.eigs = eigenvalues[order]\n            if not self.use_principal_axes:\n                # in the case of use_principal_axes modes are already ordered\n                self.U = self.sort_repeated_evecs(self.U, self.eigs)\n\n            # To do: update SHARPy's timestep info modal results\n        else:\n            raise NotImplementedError('Projection update for damped systems not yet implemented ')\n\n    def update_truncated_modes(self, nmodes):\n        r\"\"\"\n        Updates the system to the specified number of modes\n\n        Args:\n            nmodes:\n\n        Returns:\n\n        \"\"\"\n\n        # Verify that the new number of modes is less than the current value\n        assert nmodes <= self.Nmodes, 'Unable to truncate to %g modes since only %g are available' %(nmodes, self.Nmodes)\n\n        self.Nmodes = nmodes\n        self.eigs = self.eigs[:nmodes]\n        self.U = self.U[:,:nmodes]\n        self.freq_natural = self.freq_natural[:nmodes]\n        try:\n            self.freq_damp[:nmodes]\n        except TypeError:\n            pass\n\n        # Update Ccut matrix\n        if self.modal:\n            self.Ccut = np.dot(self.U.T, np.dot(self.Cstr, self.U))\n\n    def scale_system_normalised_time(self, time_ref):\n        r\"\"\"\n        Scale the system with a normalised time step. The resulting time step is\n        :math:`\\Delta t = \\Delta \\bar{t}/t_{ref}`, where the over bar denotes dimensional time.\n        The structural equations of motion are rescaled as:\n\n        .. math::\n            \\mathbf{M}\\ddot{\\boldsymbol{\\eta}} + \\mathbf{C} t_{ref} \\dot{\\boldsymbol{\\eta}} + \\mathbf{K} t_{ref}^2\n            \\boldsymbol{\\eta} = t_{ref}^2 \\mathbf{N}\n\n        For aeroelastic applications, the reference time is usually defined using the semi-chord, :math:`b`, and the\n        free stream velocity, :math:`U_\\infty`.\n\n        .. math:: t_{ref,ae} = \\frac{b}{U_\\infty}\n\n        Args:\n            time_ref (float): Normalisation factor such that :math:`t/\\bar{t}` is non-dimensional.\n\n        \"\"\"\n\n        if self.scaled_reference_matrices:\n            raise UserWarning('System already time scaled. System may just need an update.'\n                              ' See update_matrices_time_scale')\n\n        # if time_ref != 1.0 and time_ref is not None:\n        if self.num_rig_dof != 0:\n            warnings.warn('Time normalisation not yet implemented with rigid body motion.')\n\n        if self.dlti:\n            self.scaled_reference_matrices['dt'] = self.dt\n            self.dt /= time_ref\n        if self.settings['print_info']:\n            cout.cout_wrap('Scaling beam according to reduced time...', 0)\n            if self.dlti:\n                cout.cout_wrap('\\tSetting the beam time step to (%.4f)' % self.dt, 1)\n\n        self.scaled_reference_matrices['C'] = self.Cstr.copy()\n        self.scaled_reference_matrices['K'] = self.Kstr.copy()\n        self.update_matrices_time_scale(time_ref)\n\n    def update_matrices_time_scale(self, time_ref):\n\n        try:\n            cout.cout_wrap('Updating C and K matrices and natural frequencies with new normalised time...', 1)\n        except ValueError:\n            pass\n\n        try:\n            self.Kstr = self.scaled_reference_matrices['K'] * time_ref ** 2\n            self.Cstr = self.scaled_reference_matrices['C'] * time_ref\n\n            self.freq_natural *= time_ref\n        except KeyError:\n            raise KeyError('The scaled reference matrices have not been set, most likely because you are trying to '\n                           'rescale a dimensional system. Make sure your system is normalised.')\n\n    def cont2disc(self, dt=None):\n        \"\"\"Convert continuous-time SS model into \"\"\"\n\n        assert self.discr_method != 'newmark', \\\n            'For Newmark-beta discretisation, use assemble method directly.'\n\n        if dt is not None:\n            self.dt = dt\n        else:\n            assert self.dt is not None, \\\n                'Provide time-step for conversion to discrete-time'\n\n        SScont = self.SScont\n        tpl = scsig.cont2discrete(\n            (SScont.A, SScont.B, SScont.C, SScont.D),\n            dt=self.dt, method=self.discr_method)\n        self.SSdisc = libss.StateSpace(*tpl[:-1], dt=tpl[-1])\n        self.dlti = True\n\n\ndef newmark_ss(M, C, K, dt, num_damp=1e-4, M_is_SPD=False):\n    r\"\"\"\n    Produces a discrete-time state-space model of the 2nd order ordinary differential equation (ODE) given by:\n\n    .. math::\n        \\mathbf{M}\\mathbf{\\ddot{q}} + \\mathbf{C}\\mathbf{\\dot{q}} + \\mathbf{K}\\mathbf{q} = \\mathbf{f(t)}\n\n    This ODE is discretized based on the Newmark-:math:`\\beta` integration scheme.\n\n    The output state-space model has the form:\n    \n    .. math::\n        \\mathbf{x}_{n+1} &= \\mathbf{A_{ss}}\\mathbf{x}_n + \\mathbf{B_{ss}}\\mathbf{f}_n \\\\\n        \\mathbf{y}_n &= \\mathbf{C_{ss}}\\mathbf{x}_n + \\mathbf{D_{ss}}\\mathbf{f}_n\n\n    where :math:`\\mathbf{y} = \\begin{Bmatrix} \\mathbf{q} \\\\ \\mathbf{\\dot{q}} \\end{Bmatrix}`\n\n    Note that as the state-space representation only requires the input force\n    :math:`\\mathbf{f}` to be evaluated at time-step :math:`n`, thus the pass-through matrix \n    :math:`\\mathbf{D_{ss}}` is not zero.\n\n    This function retuns a tuple with the discrete state-space matrices :math:`(\\mathbf{A_{ss},B_{ss},C_{ss},D_{ss}})`.\n\n    Theory\n    ------\n\n    The following steps describe how to apply the Newmark-:math:`\\beta` scheme\n    to the ODE in order to generate the discrete time-state space-model. It\n    folows the development of [1].\n\n    .. admonition:: Notation\n\n        Bold upper case letters represent matrices, bold lower case letters\n        represent vectors.  Non-bold symbols are scalars. Curly brackets\n        indicate (block) vectors and square brackets indicate (block) matrices.\n\n    Evaluating the ODE to the time steps :math:`t_n` and  :math:`t_{n+1}` and\n    isolating the acceleration term:\n\n    .. math::\n        \\mathbf{\\ddot q}_{n} &= - \\mathbf{M}^{-1}\\mathbf{C}\\mathbf{\\dot{q}}_{n} \n                                - \\mathbf{M}^{-1}\\mathbf{K}\\mathbf{q}_{n} \n                                + \\mathbf{M}^{-1}\\mathbf{f}_{n} \\\\\n        \\mathbf{\\ddot q}_{n+1} &= - \\mathbf{M}^{-1}\\mathbf{C}\\mathbf{\\dot{q}}_{n+1} \n                                - \\mathbf{M}^{-1}\\mathbf{K}\\mathbf{q}_{n+1} \n                                + \\mathbf{M}^{-1}\\mathbf{f}_{n+1} \\\\\n\n    The update equations of the Newmark-beta scheme are [1]:\n\n    .. math::\n        \\mathbf{q}_{n+1} &= \\mathbf{q}_n + \\mathbf{\\dot q}_n\\Delta t +\n        (1/2-\\beta)\\mathbf{\\ddot q}_n \\Delta t^2 + \\beta \\mathbf{\\ddot q}_{n+1} \\Delta t^2 + O(\\Delta t^3) \\\\\n        \\mathbf{\\dot q}_{n+1} &= \\mathbf{\\dot q}_n + (1-\\gamma)\\mathbf{\\ddot q}_n \\Delta t +\n        \\gamma \\mathbf{\\ddot q}_{n+1} \\Delta t + O(\\Delta t^3)\n\n    where :math:`\\Delta t = t_{n+1} - t_n`.\n\n    The stencil is unconditionally stable if the tuning parameters\n    :math:`\\gamma` and :math:`\\beta` are chosen as:\n\n    .. math::\n        \\gamma &= \\frac{1}{2} + \\alpha \\\\\n        \\beta &= \\frac{(1+\\alpha)^2}{4} \n               = \\frac{(1/2+\\gamma)^2}{4} \n               = \\frac{1}{16} + \\frac{1}{4}(\\gamma + \\gamma^2)\n\n    where :math:`\\alpha>0` accounts for small positive algorithmic damping (:math:`\\alpha` is ``num_damp`` in the code).\n\n    Substituting the former relations onto the later ones, rearranging terms, and writing it in state-space form:\n    \n    .. math::\n        \\mathbf{A_{ss1}} \\begin{Bmatrix} \\mathbf{q}_{n+1} \\\\ \\mathbf{\\dot q}_{n+1} \\end{Bmatrix} \n        =\n        \\mathbf{A_{ss0}} \\begin{Bmatrix} \\mathbf{q}_{n} \\\\ \\mathbf{\\dot q}_{n} \\end{Bmatrix} +\n        \\mathbf{B_{ss0}} \\mathbf{f}_n +\n        \\mathbf{B_{ss1}} \\mathbf{f}_{n+1}\n    \n    where\n    \n    .. math::\n        \\mathbf{A_{ss1}} &=\n        \\begin{bmatrix} \n            \\mathbf{I} + \\beta\\Delta t^2 \\mathbf{M}^{-1}\\mathbf{K}\n                & \\beta\\Delta t^2 \\mathbf{M}^{-1}\\mathbf{C} \\\\\n            \\gamma \\Delta t \\mathbf{M}^{-1}\\mathbf{K}\n                & \\mathbf{I}+ \\gamma \\Delta t \\mathbf{M}^{-1}\\mathbf{C}\n        \\end{bmatrix} \n        \\\\\n        \\mathbf{A_{ss0}} &=\n        \\begin{bmatrix} \n            \\mathbf{I} - \\Delta t^2(1/2-\\beta)\\mathbf{M}^{-1}\\mathbf{K}\n                & \\Delta t \\mathbf{I} - (1/2-\\beta)\\Delta t^2 \\mathbf{M}^{-1}\\mathbf{C} \\\\\n            -(1-\\gamma)\\Delta t \\mathbf{M}^{-1}\\mathbf{K}\n                &  \\mathbf{I} - (1-\\gamma)\\Delta t \\mathbf{M}^{-1}\\mathbf{C}\n        \\end{bmatrix}\n        \\\\\n        \\mathbf{B_{ss0}} &=\n        \\begin{bmatrix} \n            (\\Delta t^2(1/2-\\beta) \\mathbf{M}^{-1} \\\\ \n            (1-\\gamma)\\Delta t \\mathbf{M}^{-1}\n        \\end{bmatrix} \n        \\\\\n        \\mathbf{B_{ss1}} &=\n        \\begin{bmatrix} \n            (\\beta \\Delta t^2) \\mathbf{M}^{-1}\\\\ \n            (\\gamma \\Delta t) \\mathbf{M}^{-1}\n        \\end{bmatrix}\n\n\n    This is not in standard space-state form because the state update equation\n    depends of the input at :math:`t_{n+1}`. This term can be eliminated by\n    defining the state \n   \n    .. math:: \\mathbf{x}_n = \n              \\begin{Bmatrix} \n                  \\mathbf{q}_{n} \\\\ \n                  \\mathbf{\\dot q}_{n}\n              \\end{Bmatrix} \n              - \\mathbf{A}_{\\mathbf{ss1}}^{-1}\\mathbf{B_{ss1}} \\mathbf{f}_n\n\n    Then\n   \n    .. math::\n        \\mathbf{x}_{n+1} &= \\mathbf{A}_{\\mathbf{ss1}}^{-1}[\n                                \\mathbf{A_{ss0}} \\mathbf{x}_n + (\n                                    \\mathbf{A_{ss0}}\\mathbf{A}_{\\mathbf{ss1}}^{-1}\\mathbf{B_{ss1}} \n                                    + \\mathbf{B_{ss0}}\n                                )\n                                \\mathbf{f}_n\n                            ] \\\\\n        \\begin{Bmatrix} \n            \\mathbf{q}_{n} \\\\\n            \\mathbf{\\dot q}_{n}\n        \\end{Bmatrix}\n        &= \\mathbf{x}_n + \\mathbf{A}_{\\mathbf{ss1}}^{-1}\\mathbf{B_{ss1}} \\mathbf{f}_n\n\n    See also :func:`sharpy.linear.src.libss.SSconv` for more details on the elimination of the term\n    multiplying :math:`\\mathbf{f}_{n+1}` in the state equation.\n\n    This system is identified with a standard discrete-time state-space model\n   \n    .. math::\n        \\mathbf{x}_{n+1} &= \\mathbf{A_{ss}} \\mathbf{x}_n + \\mathbf{B_{ss}} \\mathbf{f}_n \\\\\n        \\mathbf{y_n}    &= \\mathbf{C_{ss}} \\mathbf{x}_n + \\mathbf{D_{ss}} \\mathbf{f}_n\n\n    where\n\n    .. math::\n        \\mathbf{A_{ss}} &= \\mathbf{A}_{\\mathbf{ss1}}^{-1}\\mathbf{A_{ss0}} \\\\\n        \\mathbf{B_{ss}} &= \\mathbf{A_{\\mathbf{ss1}}^{-1}(\\mathbf{B_{ss0}} \n                         + \\mathbf{A_{ss0}}\\mathbf{A_{\\mathbf{ss1}}^{-1}\\mathbf{B_{ss1}}) \\\\\n        \\mathbf{C_{ss}} &= \\mathbf{I} \\\\\n        \\mathbf{D_{ss}} &= \\mathbf{A_{\\mathbf{ss1}}^{-1}\\mathbf{B_{ss1}}\n        \n\n    .. admonition:: Notation is used in the code \n   \n        .. math::\n            \\texttt{th1} &= \\gamma \\\\\n            \\texttt{th2} &= \\beta \\\\\n            \\texttt{a0}  &= (1/2 -\\beta) \\Delta t^2  \\\\\n            \\texttt{b0}  &= (1 -\\gamma) \\Delta t \\\\\n            \\texttt{a1}  &= \\beta \\Delta t^2 \\\\\n            \\texttt{b1}  &=  \\gamma \\Delta t \\\\\n\n    Args:\n        M (np.array): Mass matrix :math:`\\mathbf{M}`\n        C (np.array): Damping matrix :math:`\\mathbf{C}`\n        K (np.array): Stiffness matrix :math:`\\mathbf{K}`\n        dt (float): Timestep increment\n        num_damp (float): Numerical damping. Default ``1e-4``\n        M_is_SPD (bool): whether to factorized M using Cholesky (only works for SPD matrices) or LU decomposition. Default: ``False`` \n\n    Returns:\n        tuple: with the :math:`(\\mathbf{A_{ss},B_{ss},C_{ss},D_{ss}})` matrices of the discrete-time state-space representation\n\n    References:\n        [1] - Geradin M., Rixen D. - Mechanical Vibrations: Theory and application to structural dynamics\n    \"\"\"\n\n    # weights\n    th1 = 0.5 + num_damp\n    # th2=0.25*(th1+.5)**2\n    th2 = 0.0625 + 0.25 * (th1 + th1 ** 2)\n\n    dt2 = dt ** 2\n    a1 = th2 * dt2\n    a0 = 0.5 * dt2 - a1\n    b1 = th1 * dt\n    b0 = dt - b1\n\n    # Identity matrix\n    N = K.shape[0]\n    Imat = np.eye(N)\n\n    # Factorize M and obtain relevant matrices\n    # Even though the inverse needs to be explicitly calculated, using the matrix \n    # factorization is more numerically stable and faster than multiplying by the\n    # inverse\n    M_factors = sc.linalg.cho_factor(M) if M_is_SPD else sc.linalg.lu_factor(M)\n\n    def M_solve(b):\n        return sc.linalg.cho_solve(M_factors, b) if M_is_SPD else sc.linalg.lu_solve(M_factors, b)\n\n    Minv = M_solve(Imat)\n    MinvK = M_solve(K)\n    MinvC = M_solve(C)\n\n    # build StateSpace\n    Ass0 = np.block([[Imat - a0 * MinvK, dt * Imat - a0 * MinvC],\n                     [-b0 * MinvK, Imat - b0 * MinvC]])\n    Ass1 = np.block([[Imat + a1 * MinvK, a1 * MinvC],\n                     [b1 * MinvK, Imat + b1 * MinvC]])\n\n    # Factorize Ass1 once, solve multiple times\n    Ass1_factors = sc.linalg.lu_factor(Ass1)\n    Ass = sc.linalg.lu_solve(Ass1_factors, Ass0)\n    Bss0 = sc.linalg.lu_solve(Ass1_factors, np.block([[a0 * Minv], [b0 * Minv]]))\n    Bss1 = sc.linalg.lu_solve(Ass1_factors, np.block([[a1 * Minv], [b1 * Minv]]))\n\n    # eliminate predictior term Bss1\n    return libss.SSconv(Ass, Bss0, Bss1, C=np.eye(2 * N), D=np.zeros((2 * N, N)))\n\n\ndef sort_eigvals(eigv, eigabsv, tol=1e-6):\n    \"\"\" sort by magnitude (frequency) and imaginary part if complex conj \"\"\"\n\n    order = np.argsort(np.abs(eigv))\n    eigv = eigv[order]\n\n    for ii in range(len(eigv) - 1):\n        # check if ii and ii+1 are the same eigenvalue\n        if np.abs(eigv[ii].imag + eigv[ii + 1].imag) / eigabsv[ii] < tol:\n            if np.abs(eigv[ii].real - eigv[ii + 1].real) / eigabsv[ii] < tol:\n\n                # swap if required\n                if eigv[ii].imag > eigv[ii + 1].imag:\n                    temp = eigv[ii]\n                    eigv[ii] = eigv[ii + 1]\n                    eigv[ii + 1] = temp\n\n                    temp = order[ii]\n                    order[ii] = order[ii + 1]\n                    order[ii + 1] = temp\n\n    return order, eigv\n"
  },
  {
    "path": "sharpy/linear/src/linuvlm.py",
    "content": "\"\"\"\nLinear UVLM solver classes\n\nContains classes to assemble a linear UVLM system. The three main classes are:\n\n* :class:`~sharpy.linear.src.linuvlm.Static`: : for static VLM solutions.\n\n* :class:`~sharpy.linear.src.linuvlm.Dynamic`: for dynamic UVLM solutions.\n\n* :class:`~sharpy.linear.src.linuvlm.DynamicBlock`: a more efficient representation of ``Dynamic`` using lists for the\n  different blocks in the UVLM equations\n\nReferences:\n\n    Maraniello, S., & Palacios, R.. State-Space Realizations and Internal Balancing in Potential-Flow\n    Aerodynamics with Arbitrary Kinematics. AIAA Journal, 57(6), 1–14. 2019. https://doi.org/10.2514/1.J058153\n\n\"\"\"\n\nimport time\nimport warnings\nimport numpy as np\nimport scipy.linalg as scalg\nimport scipy.sparse as sparse\n\nimport sharpy.linear.src.interp as interp\nimport sharpy.linear.src.multisurfaces as multisurfaces\nimport sharpy.linear.src.assembly as ass\nimport sharpy.linear.src.libss as libss\n\nimport sharpy.linear.src.libsparse as libsp\nimport sharpy.rom.utils.librom as librom\nimport sharpy.utils.algebra as algebra\nimport sharpy.utils.settings as settings\nimport sharpy.utils.cout_utils as cout\nimport sharpy.utils.exceptions as exceptions\nfrom sharpy.utils.constants import vortex_radius_def\nfrom sharpy.linear.utils.ss_interface import LinearVector, StateVariable, InputVariable, OutputVariable\n\nsettings_types_static = dict()\nsettings_default_static = dict()\n\nsettings_types_static['vortex_radius'] = 'float'\nsettings_default_static['vortex_radius'] = vortex_radius_def\n\nsettings_types_static['cfl1'] = 'bool'\nsettings_default_static['cfl1'] = True\n\nsettings_types_dynamic = dict()\nsettings_default_dynamic = dict()\n\nsettings_types_dynamic['dt'] = 'float'\nsettings_default_dynamic['dt'] = 0.1\n\nsettings_types_dynamic['integr_order'] = 'int'\nsettings_default_dynamic['integr_order'] = 2\n\nsettings_types_dynamic['density'] = 'float'\nsettings_default_dynamic['density'] = 1.225\n\nsettings_types_dynamic['ScalingDict'] = 'dict'\nsettings_default_dynamic['ScalingDict'] = {'length': 1.0,\n                                           'speed': 1.0,\n                                           'density': 1.0}\n\nsettings_types_dynamic['remove_predictor'] = 'bool'\nsettings_default_dynamic['remove_predictor'] = True\n\nsettings_types_dynamic['use_sparse'] = 'bool'\nsettings_default_dynamic['use_sparse'] = True\n\nsettings_types_dynamic['vortex_radius'] = 'float'\nsettings_default_dynamic['vortex_radius'] = vortex_radius_def\n\nsettings_types_dynamic['cfl1'] = 'bool'\nsettings_default_dynamic['cfl1'] = True\n\n\nclass Static():\n    \"\"\"\tStatic linear solver \"\"\"\n\n    def __init__(self, tsdata, custom_settings=None, for_vel=np.zeros((6,))):\n\n        cout.cout_wrap('Initialising Static linear UVLM solver class...')\n        t0 = time.time()\n\n        if custom_settings is None:\n            settings_here = settings_default_static\n        else:\n            settings_here = custom_settings\n\n        settings.to_custom_types(settings_here,\n                                 settings_types_static,\n                                 settings_default_static,\n                                 no_ctype=True)\n\n        self.vortex_radius = settings_here['vortex_radius']\n        self.cfl1 = settings_here['cfl1']\n        MS = multisurfaces.MultiAeroGridSurfaces(tsdata,\n                                                 self.vortex_radius,\n                                                 for_vel=for_vel)\n        MS.get_ind_velocities_at_collocation_points()\n        MS.get_input_velocities_at_collocation_points()\n        MS.get_ind_velocities_at_segments()\n        MS.get_input_velocities_at_segments()\n\n        # define total sizes\n        self.K = sum(MS.KK)\n        self.K_star = sum(MS.KK_star)\n        self.Kzeta = sum(MS.KKzeta)\n        self.Kzeta_star = sum(MS.KKzeta_star)\n        self.MS = MS\n\n        # define input perturbation\n        self.zeta = np.zeros((3 * self.Kzeta))\n        self.zeta_dot = np.zeros((3 * self.Kzeta))\n        self.u_ext = np.zeros((3 * self.Kzeta))\n\n        self.input_variables_list = [InputVariable('zeta', size=3 * self.Kzeta, index=0),\n                                     InputVariable('zeta_dot', size=3 * self.Kzeta, index=1),\n                                     InputVariable('u_gust', size=3 * self.Kzeta, index=2)]\n\n        self.state_variables_list = [StateVariable('gamma', size=self.K, index=0),\n                                     StateVariable('gamma_w', size=self.K_star, index=1),\n                                     StateVariable('gamma_m1', size=self.K, index=2)]\n\n        self.output_variables_list = [OutputVariable('forces_v', size=3 * self.Kzeta, index=0)]\n\n        # profiling output\n        self.prof_out = './asbly.prof'\n\n        self.time_init_sta = time.time() - t0\n        cout.cout_wrap('\\t\\t\\t...done in %.2f sec' % self.time_init_sta)\n\n    def assemble_profiling(self):\n        \"\"\"\n        Generate profiling report for assembly and save it in self.prof_out.\n\n        To read the report:\n            import pstats\n            p=pstats.Stats(self.prof_out)\n        \"\"\"\n\n        import cProfile\n        cProfile.runctx('self.assemble()', globals(), locals(), filename=self.prof_out)\n\n    def assemble(self):\n        \"\"\"\n        Assemble global matrices\n        \"\"\"\n        cout.cout_wrap('\\tAssembly of static linear UVLM equations started...', 1)\n        MS = self.MS\n        t0 = time.time()\n\n        # ----------------------------------------------------------- state eq.\n        List_uc_dncdzeta = ass.uc_dncdzeta(MS.Surfs)\n        List_nc_dqcdzeta_coll, List_nc_dqcdzeta_vert = \\\n            ass.nc_dqcdzeta(MS.Surfs, MS.Surfs_star)\n        List_AICs, List_AICs_star = ass.AICs(MS.Surfs, MS.Surfs_star,\n                                             target='collocation', Project=True)\n        List_Wnv = []\n        for ss in range(MS.n_surf):\n            List_Wnv.append(\n                interp.get_Wnv_vector(MS.Surfs[ss],\n                                      MS.Surfs[ss].aM, MS.Surfs[ss].aN))\n\n        ### zeta derivatives\n        self.Ducdzeta = np.block(List_nc_dqcdzeta_vert)\n        del List_nc_dqcdzeta_vert\n        self.Ducdzeta += scalg.block_diag(*List_nc_dqcdzeta_coll)\n        del List_nc_dqcdzeta_coll\n        self.Ducdzeta += scalg.block_diag(*List_uc_dncdzeta)\n        del List_uc_dncdzeta\n        # # omega x zeta terms\n        List_nc_domegazetadzeta_vert = ass.nc_domegazetadzeta(MS.Surfs, MS.Surfs_star)\n        self.Ducdzeta += scalg.block_diag(*List_nc_domegazetadzeta_vert)\n        del List_nc_domegazetadzeta_vert\n\n        ### input velocity derivatives\n        self.Ducdu_ext = scalg.block_diag(*List_Wnv)\n        del List_Wnv\n\n        ### Condense Gammaw terms\n        for ss_out in range(MS.n_surf):\n            K = MS.KK[ss_out]\n            for ss_in in range(MS.n_surf):\n                N_star = MS.NN_star[ss_in]\n                aic = List_AICs[ss_out][ss_in]  # bound\n                aic_star = List_AICs_star[ss_out][ss_in]  # wake\n\n                # fold aic_star: sum along chord at each span-coordinate\n                aic_star_fold = np.zeros((K, N_star))\n                for jj in range(N_star):\n                    aic_star_fold[:, jj] += np.sum(aic_star[:, jj::N_star], axis=1)\n                aic[:, -N_star:] += aic_star_fold\n\n        self.AIC = np.block(List_AICs)\n\n        # ---------------------------------------------------------- output eq.\n\n        ### Zeta derivatives\n        # ... at constant relative velocity\n        self.Dfqsdzeta = scalg.block_diag(\n            *ass.dfqsdzeta_vrel0(MS.Surfs, MS.Surfs_star))\n        # ... induced velocity contrib.\n        List_coll, List_vert = ass.dfqsdvind_zeta(MS.Surfs, MS.Surfs_star)\n        for ss in range(MS.n_surf):\n            List_vert[ss][ss] += List_coll[ss]\n        self.Dfqsdzeta += np.block(List_vert)\n        del List_vert, List_coll\n\n        ### Input velocities\n        self.Dfqsdu_ext = scalg.block_diag(\n            *ass.dfqsduinput(MS.Surfs, MS.Surfs_star))\n\n        ### Gamma derivatives\n        # ... at constant relative velocity\n        List_dfqsdgamma_vrel0, List_dfqsdgamma_star_vrel0 = \\\n            ass.dfqsdgamma_vrel0(MS.Surfs, MS.Surfs_star)\n        self.Dfqsdgamma = scalg.block_diag(*List_dfqsdgamma_vrel0)\n        self.Dfqsdgamma_star = scalg.block_diag(*List_dfqsdgamma_star_vrel0)\n        del List_dfqsdgamma_vrel0, List_dfqsdgamma_star_vrel0\n        # ... induced velocity contrib.\n        List_dfqsdvind_gamma, List_dfqsdvind_gamma_star = \\\n            ass.dfqsdvind_gamma(MS.Surfs, MS.Surfs_star)\n        self.Dfqsdgamma += np.block(List_dfqsdvind_gamma)\n        self.Dfqsdgamma_star += np.block(List_dfqsdvind_gamma_star)\n        del List_dfqsdvind_gamma, List_dfqsdvind_gamma_star\n\n        self.time_asbly = time.time() - t0\n        cout.cout_wrap('\\t\\t\\t...done in %.2f sec' % self.time_asbly, 1)\n\n    def solve(self):\n        r\"\"\"\n        Solve for bound :math:`\\\\Gamma` using the equation;\n\n        .. math::\n                \\\\mathcal{A}(\\\\Gamma^n) = u^n\n\n        # ... at constant rotation speed\n        ``self.Dfqsdzeta+=scalg.block_diag(*ass.dfqsdzeta_omega(MS.Surfs,MS.Surfs_star))``\n\n        \"\"\"\n\n        MS = self.MS\n        t0 = time.time()\n\n        ### state\n        bv = np.dot(self.Ducdu_ext, self.u_ext - self.zeta_dot) + \\\n             np.dot(self.Ducdzeta, self.zeta)\n        self.gamma = np.linalg.solve(self.AIC, -bv)\n\n        ### retrieve gamma over wake\n        gamma_star = []\n        Ktot = 0\n        for ss in range(MS.n_surf):\n            Ktot += MS.Surfs[ss].maps.K\n            N = MS.Surfs[ss].maps.N\n            Mstar = MS.Surfs_star[ss].maps.M\n            gamma_star.append(np.concatenate(Mstar * [self.gamma[Ktot - N:Ktot]]))\n        gamma_star = np.concatenate(gamma_star)\n\n        ### compute steady force\n        self.fqs = np.dot(self.Dfqsdgamma, self.gamma) + \\\n                   np.dot(self.Dfqsdgamma_star, gamma_star) + \\\n                   np.dot(self.Dfqsdzeta, self.zeta) + \\\n                   np.dot(self.Dfqsdu_ext, self.u_ext - self.zeta_dot)\n\n        self.time_sol = time.time() - t0\n        cout.cout_wrap('\\tSolution done in %.2f sec' % self.time_sol, 1)\n\n    def reshape(self):\n        \"\"\"\n        Reshapes state/output according to SHARPy format\n        \"\"\"\n\n        MS = self.MS\n        if not hasattr(self, 'gamma') or not hasattr(self, 'fqs'):\n            raise NameError('State and output not found')\n\n        self.Gamma = []\n        self.Fqs = []\n\n        Ktot, Kzeta_tot = 0, 0\n        for ss in range(MS.n_surf):\n            M, N = MS.Surfs[ss].maps.M, MS.Surfs[ss].maps.N\n            K, Kzeta = MS.Surfs[ss].maps.K, MS.Surfs[ss].maps.Kzeta\n\n            iivec = range(Ktot, Ktot + K)\n            self.Gamma.append(self.gamma[iivec].reshape((M, N)))\n\n            iivec = range(Kzeta_tot, Kzeta_tot + 3 * Kzeta)\n            self.Fqs.append(self.fqs[iivec].reshape((3, M + 1, N + 1)))\n\n            Ktot += K\n            Kzeta_tot += 3 * Kzeta\n\n    def total_forces(self, zeta_pole=np.zeros((3,))):\n        \"\"\"\n        Calculates total force (Ftot) and moment (Mtot) (about pole zeta_pole).\n        \"\"\"\n\n        if not hasattr(self, 'Gamma') or not hasattr(self, 'Fqs'):\n            self.reshape()\n\n        self.Ftot = np.zeros((3,))\n        self.Mtot = np.zeros((3,))\n\n        for ss in range(self.MS.n_surf):\n            M, N = self.MS.Surfs[ss].maps.M, self.MS.Surfs[ss].maps.N\n            for nn in range(N + 1):\n                for mm in range(M + 1):\n                    zeta_node = self.MS.Surfs[ss].zeta[:, mm, nn]\n                    fnode = self.Fqs[ss][:, mm, nn]\n                    self.Ftot += fnode\n                    self.Mtot += np.cross(zeta_node - zeta_pole, fnode)\n        # for cc in range(3):\n        # \tself.Ftot[cc]+=np.sum(self.Fqs[ss][cc,:,:])\n\n    def get_total_forces_gain(self, zeta_pole=np.zeros((3,))):\n        r\"\"\"\n        Calculates gain matrices to calculate the total force (Kftot) and moment (Kmtot, Kmtot_disp) about the\n        pole zeta_pole.\n\n        Being :math:`f` and :math:`\\zeta` the force and position at the vertex (m,n) of the lattice\n        these are produced as:\n\n            * ``ftot=sum(f) -> dftot += df``\n            * ``mtot-sum((zeta-zeta_pole) x f) ->\tdmtot +=  cross(zeta0-zeta_pole) df - cross(f0) dzeta``\n\n        \"\"\"\n\n        self.Kftot = np.zeros((3, 3 * self.Kzeta))\n        self.Kmtot = np.zeros((3, 3 * self.Kzeta))\n        self.Kmtot_disp = np.zeros((3, 3 * self.Kzeta))\n\n        Kzeta_start = 0\n        for ss in range(self.MS.n_surf):\n\n            M, N = self.MS.Surfs[ss].maps.M, self.MS.Surfs[ss].maps.N\n\n            for nn in range(N + 1):\n                for mm in range(M + 1):\n                    jjvec = [Kzeta_start + np.ravel_multi_index((cc, mm, nn),\n                                                                (3, M + 1, N + 1)) for cc in range(3)]\n\n                    self.Kftot[[0, 1, 2], jjvec] = 1.\n                    self.Kmtot[np.ix_([0, 1, 2], jjvec)] = algebra.skew(\n                        self.MS.Surfs[ss].zeta[:, mm, nn] - zeta_pole)\n                    self.Kmtot_disp[np.ix_([0, 1, 2], jjvec)] = algebra.skew(\n                        -self.MS.Surfs[ss].fqs[:, mm, nn])\n\n            Kzeta_start += 3 * self.MS.KKzeta[ss]\n\n    def get_sect_forces_gain(self):\n        \"\"\"\n        Gains to computes sectional forces. Moments are computed w.r.t.\n        mid-vertex (chord-wise index M/2) of each section.\n        \"\"\"\n\n        Ntot = 0\n        for ss in range(self.MS.n_surf):\n            Ntot += self.MS.NN[ss] + 1\n        self.Kfsec = np.zeros((3 * Ntot, 3 * self.Kzeta))\n        self.Kmsec = np.zeros((3 * Ntot, 3 * self.Kzeta))\n\n        Kzeta_start = 0\n        II_start = 0\n        for ss in range(self.MS.n_surf):\n            M, N = self.MS.MM[ss], self.MS.NN[ss]\n\n            for nn in range(N + 1):\n                zeta_sec = self.MS.Surfs[ss].zeta[:, :, nn]\n\n                # section indices\n                iivec = [II_start + np.ravel_multi_index((cc, nn),\n                                                         (3, N + 1)) for cc in range(3)]\n                # iivec = [II_start + cc+6*nn for cc in range(6)]\n                # iivec = [II_start + cc*(N+1) + nn for cc in range(6)]\n\n                for mm in range(M + 1):\n                    # vertex indices\n                    jjvec = [Kzeta_start + np.ravel_multi_index((cc, mm, nn),\n                                                                (3, M + 1, N + 1)) for cc in range(3)]\n\n                    # sectional force\n                    self.Kfsec[iivec, jjvec] = 1.0\n\n                    # sectional moment\n                    dx, dy, dz = zeta_sec[:, mm] - zeta_sec[:, M // 2]\n                    self.Kmsec[np.ix_(iivec, jjvec)] = np.array([[0, -dz, dy],\n                                                                 [dz, 0, -dx],\n                                                                 [-dy, dx, 0]])\n            Kzeta_start += 3 * self.MS.KKzeta[ss]\n            II_start += 3 * (N + 1)\n\n    def get_rigid_motion_gains(self, zeta_rotation=np.zeros((3,))):\n        \"\"\"\n        Gains to reproduce rigid-body motion such that grid displacements and\n        velocities are given by:\n\n            * ``dzeta     = Ktra*u_tra         + Krot*u_rot``\n            * ``dzeta_dot = Ktra_vel*u_tra_dot + Krot*u_rot_dot``\n\n        Rotations are assumed to happen independently with respect to the\n        zeta_rotation point and about the x,y and z axes of the inertial frame.\n        \"\"\"\n\n        # warnings.warn('Rigid rotation matrix not implemented!')\n\n        Ntot = 0\n        for ss in range(self.MS.n_surf):\n            Ntot += self.MS.NN[ss] + 1\n        self.Ktra = np.zeros((3 * self.Kzeta, 3))\n        self.Ktra_dot = np.zeros((3 * self.Kzeta, 3))\n        self.Krot = np.zeros((3 * self.Kzeta, 3))\n        self.Krot_dot = np.zeros((3 * self.Kzeta, 3))\n\n        Kzeta_start = 0\n        for ss in range(self.MS.n_surf):\n            M, N = self.MS.MM[ss], self.MS.NN[ss]\n            zeta = self.MS.Surfs[ss].zeta\n\n            for nn in range(N + 1):\n                for mm in range(M + 1):\n                    # vertex indices\n                    iivec = [Kzeta_start + np.ravel_multi_index((cc, mm, nn),\n                                                                (3, M + 1, N + 1)) for cc in range(3)]\n\n                    self.Ktra[iivec, [0, 1, 2]] += 1.\n                    self.Ktra_dot[iivec, [0, 1, 2]] += 1.\n\n                    # sectional moment\n                    dx, dy, dz = zeta[:, mm, nn] - zeta_rotation\n                    Dskew = np.array([[0, -dz, dy], [dz, 0, -dx], [-dy, dx, 0]])\n                    self.Krot[iivec, :] = Dskew\n                    self.Krot_dot[iivec, :] = Dskew\n            Kzeta_start += 3 * self.MS.KKzeta[ss]\n\n\n# # ------------------------------------------------------------------------------\n# # utilities for Dynamic.balfreq method\n\n# def get_trapz_weights(k0,kend,Nk,knyq=False):\n#     \"\"\"\n#     Returns uniform frequency grid (kv of length Nk) and weights (wv) for\n#     Gramians integration using trapezoidal rule. If knyq is True, it is assumed\n#     that kend is also the Nyquist frequency.\n#     \"\"\"\n\n#     assert k0>=0. and kend>=0., 'Frequencies must be positive!'\n\n#     dk=(kend-k0)/(Nk-1.)\n#     kv=np.linspace(k0,kend,Nk)\n#     wv=np.ones((Nk,))*dk*np.sqrt(2)\n\n#     if k0/(kend-k0)<1e-10:\n#         wv[0]=.5*dk\n#     else:\n#         wv[0]=dk/np.sqrt(2)\n\n#     if knyq:\n#         wv[-1]=.5*dk\n#     else:\n#         wv[-1]=dk/np.sqrt(2)\n\n#     return kv,wv\n\n\n# def get_gauss_weights(k0,kend,Npart,order):\n#     \"\"\"\n#     Returns gauss-legendre frequency grid (kv of length Npart*order) and\n#     weights (wv) for Gramians integration.\n\n#     The integration grid is divided into Npart partitions, and in each of\n#     them integration is performed using a Gauss-Legendre quadrature of\n#     order order.\n\n#     Note: integration points are never located at k0 or kend, hence there\n#     is no need for special treatment as in (for e.g.) a uniform grid case\n#     (see get_unif_weights)\n#     \"\"\"\n\n#     if Npart==1:\n#         # get gauss normalised coords and weights\n#         xad,wad=np.polynomial.legendre.leggauss(order)\n#         krange=kend-k0\n#         kv=.5*(k0+kend) + .5*krange*xad\n#         wv=wad*(.5*krange)*np.sqrt(2)\n#         print('partitioning: %.3f to %.3f' %(k0,kend) )\n\n#     else:\n#         kv=np.zeros((Npart*order,))\n#         wv=np.zeros((Npart*order,))\n\n#         dk_part=(kend-k0)/Npart\n\n#         for ii in range(Npart):\n#             k0_part=k0+ii*dk_part\n#             kend_part=k0_part+dk_part\n#             iivec=range(order*ii, order*(ii+1))\n#             kv[iivec],wv[iivec]=get_gauss_weights(k0_part,kend_part,Npart=1,order=order)\n\n#     return kv,wv\n\n\n# ------------------------------------------------------------------------------\n\n\nclass Dynamic(Static):\n    r\"\"\"\n    Class for dynamic linearised UVLM solution. Linearisation around steady-state\n    are only supported. The class is built upon Static, and inherits all the\n    methods contained there.\n\n    Input:\n        - tsdata: aero timestep data from SHARPy solution\n        - dt: time-step\n        - integr_order=2: integration order for UVLM unsteady aerodynamic force\n        - RemovePredictor=True: if true, the state-space model is modified so as\n          to accept in input perturbations, u, evaluated at time-step n rather than\n          n+1.\n        - ScalingDict=None: disctionary containing fundamental reference units:\n\n            .. code-block:: python\n\n               {'length':  reference_length,\n               'speed':   reference_speed,\n               'density': reference density}\n\n          used to derive scaling quantities for the state-space model variables.\n          The scaling factors are stored in ``self.ScalingFact``.\n\n          Note that while time, circulation, angular speeds) are scaled\n          accordingly, FORCES ARE NOT. These scale by :math:`q_\\infty b^2`, where :math:`b` is the\n          reference length and :math:`q_\\infty` is the dynamic pressure.\n\n        - UseSparse=False: builds the A and B matrices in sparse form. C and D\n          are dense anyway so the sparse format cannot be applied to them.\n\n    Methods:\n        - nondimss: normalises a dimensional state-space model based on the\n          scaling factors in self.ScalingFact.\n        - dimss: inverse of nondimss.\n        - assemble_ss: builds state-space model. See function for more details.\n        - assemble_ss_profiling: generate profiling report of the assembly and\n          saves it into self.prof_out. To read the report:\n\n            .. code-block:: python\n\n                import pstats\n                p = pstats.Stats(self.prof_out)\n\n        - solve_steady: solves for the steady state. Several methods available.\n        - solve_step: solves one time-step\n        - freqresp: ad-hoc method for fast frequency response (only implemented) for ``remove_predictor=False``\n\n    Attributes:\n        Nx (int): Number of states\n        Nu (int): Number of inputs\n        Ny (int): Number of outputs\n        K (int): Number of paneles :math:`K = MN`\n        K_star (int): Number of wake panels :math:`K^*=M^*N`\n        Kzeta (int): Number of panel vertices :math:`K_\\zeta=(M+1)(N+1)`\n        Kzeta_star (int): Number of wake panel vertices :math:`K_{\\zeta,w} = (M^*+1)(N+1)`\n\n    To do:\n    Upgrade to linearise around unsteady snapshot (adjoint)\n    \"\"\"\n\n    def __init__(self, tsdata, dt=None, dynamic_settings=None, integr_order=2,\n                 RemovePredictor=True, ScalingDict=None, UseSparse=True, for_vel=np.zeros((6,))):\n\n        # Transform settings dictionary - in the future remove remaining inputs\n        self.settings = dict()\n        if dynamic_settings:\n            self.settings = dynamic_settings\n            settings.to_custom_types(self.settings,\n                                     settings_types_dynamic,\n                                     settings_default_dynamic,\n                                     no_ctype=True)\n        else:\n            warnings.warn('No settings dictionary found. Using default. Individual parsing of settings is deprecated',\n                          DeprecationWarning)\n            # Future: remove deprecation warning and make settings the only argument\n            settings.to_custom_types(self.settings,\n                                     settings_types_dynamic,\n                                     settings_default_dynamic,\n                                     no_ctype=True)\n            self.settings['dt'] = dt\n            self.settings['integr_order'] = integr_order\n            self.settings['remove_predictor'] = RemovePredictor\n            self.settings['use_sparse'] = UseSparse\n            self.settings['ScalingDict'] = ScalingDict\n\n        static_dict = {'vortex_radius': self.settings['vortex_radius'],\n                       'cfl1': self.settings['cfl1']}\n        super().__init__(tsdata, custom_settings=static_dict, for_vel=for_vel)\n\n        self.dt = self.settings['dt']\n        self.integr_order = self.settings['integr_order']\n        self.vortex_radius = self.settings['vortex_radius']\n        self.cfl1 = self.settings['cfl1']\n\n        if self.integr_order == 1:\n            Nx = 2 * self.K + self.K_star\n        elif self.integr_order == 2:\n            Nx = 3 * self.K + self.K_star\n            # b0, bm1, bp1 = -2., 0.5, 1.5\n        else:\n            raise NameError('Only integration orders 1 and 2 are supported')\n        Ny = 3 * self.Kzeta\n        Nu = 3 * Ny\n        self.Nx = Nx\n        self.Nu = Nu\n        self.Ny = Ny\n\n        self.remove_predictor = self.settings['remove_predictor']\n        # Stores original B matrix for state recovery later\n        self.B_predictor = None\n        self.D_predictor = None\n\n        self.include_added_mass = True\n        self.use_sparse = self.settings['use_sparse']\n\n        ScalingFacts = self.settings['ScalingDict']\n        ScalingFacts['time'] = ScalingFacts['length'] / ScalingFacts['speed']\n        ScalingFacts['circulation'] = ScalingFacts['speed'] * ScalingFacts['length']\n        ScalingFacts['dyn_pressure'] = 0.5 * ScalingFacts['density'] * ScalingFacts['speed'] ** 2\n        ScalingFacts['force'] = ScalingFacts['dyn_pressure'] * ScalingFacts['length'] ** 2\n        self.ScalingFacts = ScalingFacts\n\n        self.input_variables_list = [InputVariable('zeta', size=3 * self.Kzeta, index=0),\n                                     InputVariable('zeta_dot', size=3 * self.Kzeta, index=1),\n                                     InputVariable('u_gust', size=3 * self.Kzeta, index=2)]\n\n        self.state_variables_list = [StateVariable('gamma', size=self.K, index=0),\n                                     StateVariable('gamma_w', size=self.K_star, index=1),\n                                     StateVariable('dtgamma_dot', size=self.K, index=2),\n                                     StateVariable('gamma_m1', size=self.K, index=3)]\n\n        self.output_variables_list = [OutputVariable('forces_v', size=3 * self.Kzeta, index=0)]\n\n        if self.integr_order == 1:\n            self.state_variables_list.pop(2) # remove time derivative state\n\n        ### collect statistics\n        self.cpu_summary = {'dim': 0.,\n                            'nondim': 0.,\n                            'assemble': 0.}\n\n        # Initialise State Space\n        self.SS = None\n\n    @property\n    def Nu(self):\n        \"\"\"Number of inputs :math:`m` to the system.\"\"\"\n        if self.SS is not None:\n            if self.SS.B.shape.__len__() == 1:\n                self.Nu = 1\n            else:\n                self.Nu = self.SS.B.shape[1]\n        return self._Nu\n\n    @Nu.setter\n    def Nu(self, value):\n        self._Nu = value\n\n    @property\n    def Nx(self):\n        \"\"\"Number of states :math:`n` of the system.\"\"\"\n        if self.SS is not None:\n            self.Nx = self.SS.B.shape[0]\n        return self._Nx\n\n    @Nx.setter\n    def Nx(self, value):\n        self._Nx = value\n\n    @property\n    def Ny(self):\n        \"\"\"Number of outputs :math:`p` of the system.\"\"\"\n        if self.SS is not None:\n            self.Ny = self.SS.C.shape[0]\n        return self._Ny\n\n    @Ny.setter\n    def Ny(self, value):\n        self._Ny = value\n\n    def nondimss(self):\n        \"\"\"\n        Scale state-space model based of self.ScalingFacts\n        \"\"\"\n\n        cout.cout_wrap('Scaling UVLM system with reference time %fs' % self.ScalingFacts['time'])\n        t0 = time.time()\n        Kzeta = self.Kzeta\n\n        self.SS.B[:, :3 * Kzeta] *= (self.ScalingFacts['length'] / self.ScalingFacts['circulation'])\n        self.SS.B[:, 3 * Kzeta:] *= (self.ScalingFacts['speed'] / self.ScalingFacts['circulation'])\n        if self.remove_predictor:\n            self.B_predictor[:, :3 * Kzeta] *= (self.ScalingFacts['length'] / self.ScalingFacts['circulation'])\n            self.B_predictor[:, 3 * Kzeta:] *= (self.ScalingFacts['speed'] / self.ScalingFacts['circulation'])\n\n        self.SS.C *= (self.ScalingFacts['circulation'] / self.ScalingFacts['force'])\n\n        self.SS.D[:, :3 * Kzeta] *= (self.ScalingFacts['length'] / self.ScalingFacts['force'])\n        self.SS.D[:, 3 * Kzeta:] *= (self.ScalingFacts['speed'] / self.ScalingFacts['force'])\n        if self.remove_predictor:\n            self.D_predictor[:, :3 * Kzeta] *= (self.ScalingFacts['length'] / self.ScalingFacts['force'])\n            self.D_predictor[:, 3 * Kzeta:] *= (self.ScalingFacts['speed'] / self.ScalingFacts['force'])\n\n        self.SS.dt = self.SS.dt / self.ScalingFacts['time']\n\n        self.cpu_summary['nondim'] = time.time() - t0\n        cout.cout_wrap('Non-dimensional time step set (%f)' % self.SS.dt, 1)\n        cout.cout_wrap('System scaled in %fs' % self.cpu_summary['nondim'])\n\n    def dimss(self):\n\n        t0 = time.time()\n        Kzeta = self.Kzeta\n\n        self.SS.B[:, :3 * Kzeta] /= (self.ScalingFacts['length'] / self.ScalingFacts['circulation'])\n        self.SS.B[:, 3 * Kzeta:] /= (self.ScalingFacts['speed'] / self.ScalingFacts['circulation'])\n        if self.remove_predictor:\n            self.B_predictor[:, :3 * Kzeta] /= (self.ScalingFacts['length'] / self.ScalingFacts['circulation'])\n            self.B_predictor[:, 3 * Kzeta:] /= (self.ScalingFacts['speed'] / self.ScalingFacts['circulation'])\n\n        self.SS.C /= (self.ScalingFacts['circulation'] / self.ScalingFacts['force'])\n\n        self.SS.D[:, :3 * Kzeta] /= (self.ScalingFacts['length'] / self.ScalingFacts['force'])\n        self.SS.D[:, 3 * Kzeta:] /= (self.ScalingFacts['speed'] / self.ScalingFacts['force'])\n        if self.remove_predictor:\n            self.D_predictor[:, :3 * Kzeta] /= (self.ScalingFacts['length'] / self.ScalingFacts['force'])\n            self.D_predictor[:, 3 * Kzeta:] /= (self.ScalingFacts['speed'] / self.ScalingFacts['force'])\n\n        self.SS.dt = self.SS.dt * self.ScalingFacts['time']\n\n        self.cpu_summary['dim'] = time.time() - t0\n\n    def assemble_ss(self, wake_prop_settings=None):\n        r\"\"\"\n        Produces state-space model of the form\n\n            .. math::\n\n                \\mathbf{x}_{n+1} &= \\mathbf{A}\\,\\mathbf{x}_n + \\mathbf{B} \\mathbf{u}_{n+1} \\\\\n                \\mathbf{y}_n &= \\mathbf{C}\\,\\mathbf{x}_n + \\mathbf{D} \\mathbf{u}_n\n\n        where the state, inputs and outputs are:\n\n            .. math:: \\mathbf{x}_n = \\{ \\delta \\mathbf{\\Gamma}_n,\\, \\delta \\mathbf{\\Gamma_{w_n}},\\,\n                \\Delta t\\,\\delta\\mathbf{\\Gamma}'_n,\\, \\delta\\mathbf{\\Gamma}_{n-1} \\}\n\n            .. math:: \\mathbf{u}_n = \\{ \\delta\\mathbf{\\zeta}_n,\\, \\delta\\mathbf{\\zeta}'_n,\\,\n                \\delta\\mathbf{u}_{ext,n} \\}\n\n            .. math:: \\mathbf{y} = \\{\\delta\\mathbf{f}\\}\n\n        with :math:`\\mathbf{\\Gamma}\\in\\mathbb{R}^{MN}` being the vector of vortex circulations,\n        :math:`\\mathbf{\\zeta}\\in\\mathbb{R}^{3(M+1)(N+1)}` the vector of vortex lattice coordinates and\n        :math:`\\mathbf{f}\\in\\mathbb{R}^{3(M+1)(N+1)}` the vector of aerodynamic forces and moments. Note\n        that :math:`(\\bullet)'` denotes a derivative with respect to time.\n\n        Note that the input is atypically defined at time ``n+1``, therefore by default\n        ``self.remove_predictor = True`` and the predictor term ``u_{n+1}`` is eliminated through\n        the change of state[1]:\n\n            .. math::\n                \\mathbf{h}_n &= \\mathbf{x}_n - \\mathbf{B}\\,\\mathbf{u}_n \\\\\n\n        such that:\n\n            .. math::\n                \\mathbf{h}_{n+1} &= \\mathbf{A}\\,\\mathbf{h}_n + \\mathbf{A\\,B}\\,\\mathbf{u}_n \\\\\n                \\mathbf{y}_n &= \\mathbf{C\\,h}_n + (\\mathbf{C\\,B}+\\mathbf{D})\\,\\mathbf{u}_n\n\n\n        which only modifies the equivalent :math:`\\mathbf{B}` and :math:`\\mathbf{D}` matrices.\n\n        References:\n            [1] Franklin, GF and Powell, JD. Digital Control of Dynamic Systems, Addison-Wesley Publishing Company, 1980\n\n        To do:\n        - remove all calls to scipy.linalg.block_diag\n        \"\"\"\n\n        cout.cout_wrap('State-space realisation of UVLM equations started...')\n        t0 = time.time()\n        MS = self.MS\n        K, K_star = self.K, self.K_star\n        Kzeta = self.Kzeta\n\n        # ------------------------------------------------------ determine size\n\n        Nx = self.Nx\n        Nu = self.Nu\n        Ny = self.Ny\n        if self.integr_order == 2:\n            # Second order differencing scheme coefficients\n            b0, bm1, bp1 = -2., 0.5, 1.5\n\n        # ----------------------------------------------------------- state eq.\n\n        ### state terms (A matrix)\n        # - choice of sparse matrices format is optimised to reduce memory load\n\n        # Aero influence coeffs\n        List_AICs, List_AICs_star = ass.AICs(MS.Surfs, MS.Surfs_star,\n                                             target='collocation', Project=True)\n        A0 = np.block(List_AICs)\n        A0W = np.block(List_AICs_star)\n        List_AICs, List_AICs_star = None, None\n        LU, P = scalg.lu_factor(A0)\n        AinvAW = scalg.lu_solve((LU, P), A0W)\n        A0, A0W = None, None\n        # self.A0,self.A0W=A0,A0W\n\n        ### propagation of circ\n        # fast and memory efficient with both dense and sparse matrices\n        List_C, List_Cstar = ass.wake_prop(MS,\n                                           self.use_sparse, sparse_format='csc',\n                                           settings=wake_prop_settings)\n        if self.use_sparse:\n            Cgamma = libsp.csc_matrix(sparse.block_diag(List_C, format='csc'))\n            CgammaW = libsp.csc_matrix(sparse.block_diag(List_Cstar, format='csc'))\n        else:\n            Cgamma = scalg.block_diag(*List_C)\n            CgammaW = scalg.block_diag(*List_Cstar)\n        List_C, List_Cstar = None, None\n\n        # recurrent dense terms stored as numpy.ndarrays\n        AinvAWCgamma = -libsp.dot(AinvAW, Cgamma)\n        AinvAWCgammaW = -libsp.dot(AinvAW, CgammaW)\n\n        ### A matrix assembly\n        if self.use_sparse:\n            # lil format allows fast assembly\n            Ass = sparse.lil_matrix((Nx, Nx))\n        else:\n            Ass = np.zeros((Nx, Nx))\n        Ass[:K, :K] = AinvAWCgamma\n        Ass[:K, K:K + K_star] = AinvAWCgammaW\n        Ass[K:K + K_star, :K] = Cgamma\n        Ass[K:K + K_star, K:K + K_star] = CgammaW\n        Cgamma, CgammaW = None, None\n\n        # delta eq.\n        iivec = range(K + K_star, 2 * K + K_star)\n        ones = np.ones((K,))\n        if self.integr_order == 1:\n            Ass[iivec, :K] = AinvAWCgamma\n            Ass[iivec, range(K)] -= ones\n            Ass[iivec, K:K + K_star] = AinvAWCgammaW\n        if self.integr_order == 2:\n            Ass[iivec, :K] = bp1 * AinvAWCgamma\n            AinvAWCgamma = None\n            Ass[iivec, range(K)] += b0 * ones\n            Ass[iivec, K:K + K_star] = bp1 * AinvAWCgammaW\n            AinvAWCgammaW = None\n            Ass[iivec, range(2 * K + K_star, 3 * K + K_star)] = bm1 * ones\n            # identity eq.\n            Ass[range(2 * K + K_star, 3 * K + K_star), range(K)] = ones\n\n        if self.use_sparse:\n            # conversion to csc occupies less memory and allows fast algebra\n            Ass = libsp.csc_matrix(Ass)\n\n        # zeta derivs\n        List_nc_dqcdzeta = ass.nc_dqcdzeta(MS.Surfs, MS.Surfs_star, Merge=True)\n        List_uc_dncdzeta = ass.uc_dncdzeta(MS.Surfs)\n        List_nc_domegazetadzeta_vert = ass.nc_domegazetadzeta(MS.Surfs, MS.Surfs_star)\n        for ss in range(MS.n_surf):\n            List_nc_dqcdzeta[ss][ss] += \\\n                (List_uc_dncdzeta[ss] + List_nc_domegazetadzeta_vert[ss])\n        Ducdzeta = np.block(List_nc_dqcdzeta)  # dense matrix\n        List_nc_dqcdzeta = None\n        List_uc_dncdzeta = None\n        List_nc_domegazetadzeta_vert = None\n\n        # ext velocity derivs (Wnv0)\n        List_Wnv = []\n        for ss in range(MS.n_surf):\n            List_Wnv.append(\n                interp.get_Wnv_vector(MS.Surfs[ss],\n                                      MS.Surfs[ss].aM, MS.Surfs[ss].aN))\n        AinvWnv0 = scalg.lu_solve((LU, P), scalg.block_diag(*List_Wnv))\n        List_Wnv = None\n\n        ### B matrix assembly\n        if self.use_sparse:\n            Bss = sparse.lil_matrix((Nx, Nu))\n        else:\n            Bss = np.zeros((Nx, Nu))\n\n        Bup = np.block([-scalg.lu_solve((LU, P), Ducdzeta), AinvWnv0, -AinvWnv0])\n        AinvWnv0 = None\n        Bss[:K, :] = Bup\n        if self.integr_order == 1:\n            Bss[K + K_star:2 * K + K_star, :] = Bup\n        if self.integr_order == 2:\n            Bss[K + K_star:2 * K + K_star, :] = bp1 * Bup\n        Bup = None\n\n        if self.use_sparse:\n            Bss = libsp.csc_matrix(Bss)\n        LU, P = None, None\n        # ---------------------------------------------------------- output eq.\n\n        ### state terms (C matrix)\n\n        # gamma (induced velocity contrib.)\n        List_dfqsdvind_gamma, List_dfqsdvind_gamma_star = \\\n            ass.dfqsdvind_gamma(MS.Surfs, MS.Surfs_star)\n\n        # gamma (at constant relative velocity)\n        List_dfqsdgamma_vrel0, List_dfqsdgamma_star_vrel0 = \\\n            ass.dfqsdgamma_vrel0(MS.Surfs, MS.Surfs_star)\n        for ss in range(MS.n_surf):\n            List_dfqsdvind_gamma[ss][ss] += List_dfqsdgamma_vrel0[ss]\n            List_dfqsdvind_gamma_star[ss][ss] += List_dfqsdgamma_star_vrel0[ss]\n        Dfqsdgamma = np.block(List_dfqsdvind_gamma)\n        Dfqsdgamma_star = np.block(List_dfqsdvind_gamma_star)\n        List_dfqsdvind_gamma, List_dfqsdvind_gamma_star = None, None\n        List_dfqsdgamma_vrel0, List_dfqsdgamma_star_vrel0 = None, None\n\n        # gamma_dot\n        Dfunstdgamma_dot = scalg.block_diag(*ass.dfunstdgamma_dot(MS.Surfs))\n\n        # C matrix assembly\n        Css = np.zeros((Ny, Nx))\n        Css[:, :K] = Dfqsdgamma\n        Css[:, K:K + K_star] = Dfqsdgamma_star\n        if self.include_added_mass:\n            Css[:, K + K_star:2 * K + K_star] = Dfunstdgamma_dot / self.dt\n\n        ### input terms (D matrix)\n        Dss = np.zeros((Ny, Nu))\n\n        # zeta (at constant relative velocity)\n        Dss[:, :3 * Kzeta] = scalg.block_diag(\n            *ass.dfqsdzeta_vrel0(MS.Surfs, MS.Surfs_star))\n        # zeta (induced velocity contrib)\n        List_coll, List_vert = ass.dfqsdvind_zeta(MS.Surfs, MS.Surfs_star)\n        for ss in range(MS.n_surf):\n            List_vert[ss][ss] += List_coll[ss]\n        Dss[:, :3 * Kzeta] += np.block(List_vert)\n        del List_vert, List_coll\n\n        # input velocities (external)\n        Dss[:, 6 * Kzeta:9 * Kzeta] = scalg.block_diag(\n            *ass.dfqsduinput(MS.Surfs, MS.Surfs_star))\n\n        # input velocities (body movement)\n        if self.include_added_mass:\n            Dss[:, 3 * Kzeta:6 * Kzeta] = -Dss[:, 6 * Kzeta:9 * Kzeta]\n\n        if self.remove_predictor:\n            Ass, Bmod, Css, Dmod = \\\n                libss.SSconv(Ass, None, Bss, Css, Dss, Bm1=None)\n            self.SS = libss.StateSpace(Ass, Bmod, Css, Dmod, dt=self.dt)\n\n            # Store original B matrix for state unpacking\n            self.B_predictor = Bss\n            self.D_predictor = Dss\n\n            cout.cout_wrap('\\tstate-space model produced in form:\\n\\t' \\\n                           '\\t\\th_{n+1} = A h_{n} + B u_{n}\\n\\t' \\\n                           '\\t\\twith:\\n\\tx_n = h_n + Bp u_n', 1)\n        else:\n            self.SS = libss.StateSpace(Ass, Bss, Css, Dss, dt=self.dt)\n            cout.cout_wrap('\\tstate-space model produced in form:\\n\\t' \\\n                           'x_{n+1} = A x_{n} + Bp u_{n+1}', 1)\n\n        # add variable tracker\n        self.SS.input_variables = LinearVector(self.input_variables_list)\n        self.SS.state_variables = LinearVector(self.state_variables_list)\n        self.SS.output_variables = LinearVector(self.output_variables_list)\n\n        self.cpu_summary['assemble'] = time.time() - t0\n        cout.cout_wrap('\\t\\t\\t...done in %.2f sec' % self.cpu_summary['assemble'])\n\n    def freqresp(self, kv, wake_prop_settings=None):\n        \"\"\"\n        Ad-hoc method for fast UVLM frequency response over the frequencies\n        kv. The method, only requires inversion of a K x K matrix at each\n        frequency as the equation for propagation of wake circulation are solved\n        exactly.\n        The algorithm implemented here can be used also upon projection of\n        the state-space model.\n\n        Note:\n        This method is very similar to the \"minsize\" solution option is the\n        steady_solve.\n        \"\"\"\n\n        if self.remove_predictor:\n            # raise NameError('Option \"remove_predictor=True\" not implemented yet. '+\n            #     'Refer to Frequency class implementation.')\n\n            assert self.B_predictor.shape == self.SS.B.shape, \\\n                ('In order to use \"freqresp\" with \"remove_predictor=True\", project ' +\n                 '\"self.B_predictor\" as per \"self.SS.B\"!')\n            assert self.D_predictor.shape == self.SS.D.shape, \\\n                ('In order to use \"freqresp\" with \"remove_predictor=True\", project ' +\n                 '\"self.D_predictor\" as per \"self.SS.D\"!')\n\n        MS = self.MS\n        K = self.K\n        K_star = self.K_star\n\n        Eye = np.eye(K)\n        if self.remove_predictor:\n            Bup = self.B_predictor[:K, :]\n        else:\n            Bup = self.SS.B[:K, :]\n\n        if self.use_sparse:\n            # warning: behaviour may change in future numpy release.\n            # Ensure P,Pw,Bup are np.ndarray\n            P = np.array(self.SS.A[:K, :K].todense())\n            Pw = np.array(self.SS.A[:K, K:K + K_star].todense())\n            if type(Bup) not in [np.ndarray, libsp.csc_matrix]:\n                Bup = Bup.toarray()\n        else:\n            P = self.SS.A[:K, :K]\n            Pw = self.SS.A[:K, K:K + K_star]\n\n        Nk = len(kv)\n        kvdt = kv * self.SS.dt\n        zv = np.cos(kvdt) + 1.j * np.sin(kvdt)\n        Yfreq = np.empty((self.SS.outputs, self.SS.inputs, Nk,), dtype=np.complex_)\n\n        for kk in range(Nk):\n\n            ###  build Cw complex\n            Cw_cpx = self.get_Cw_cpx(zv[kk], settings=wake_prop_settings)\n\n            if self.remove_predictor:\n                Ygamma = zv[kk] * \\\n                         libsp.solve(zv[kk] * Eye - P -\n                                     libsp.dot(Pw, Cw_cpx, type_out=libsp.csc_matrix),\n                                     Bup)\n            else:\n                Ygamma = libsp.solve(zv[kk] * Eye - P -\n                                     libsp.dot(Pw, Cw_cpx, type_out=libsp.csc_matrix),\n                                     Bup)\n\n            Ygamma_star = Cw_cpx.dot(Ygamma)\n\n            if self.integr_order == 1:\n                dfact = (1. - 1. / zv[kk])\n            elif self.integr_order == 2:\n                dfact = .5 * (3. - 4. / zv[kk] + 1. / zv[kk] ** 2)\n            else:\n                raise NameError('Specify valid integration order')\n\n            # calculate solution\n            if self.remove_predictor:\n                Yfreq[:, :, kk] = np.dot(self.SS.C[:, :K], Ygamma) + \\\n                                  np.dot(self.SS.C[:, K:K + K_star], Ygamma_star) + \\\n                                  np.dot(self.SS.C[:, K + K_star:2 * K + K_star], dfact * Ygamma) + \\\n                                  self.D_predictor\n            else:\n                Yfreq[:, :, kk] = np.dot(self.SS.C[:, :K], Ygamma) + \\\n                                  np.dot(self.SS.C[:, K:K + K_star], Ygamma_star) + \\\n                                  np.dot(self.SS.C[:, K + K_star:2 * K + K_star], dfact * Ygamma) + \\\n                                  self.SS.D\n\n        return Yfreq\n\n    def get_Cw_cpx(self, zval, settings=None):\n        r\"\"\"\n        Produces a sparse matrix\n\n            .. math:: \\bar{\\mathbf{C}}(z)\n\n        where\n\n            .. math:: z = e^{k \\Delta t}\n\n        such that the wake circulation frequency response at :math:`z` is\n\n            .. math:: \\bar{\\boldsymbol{\\Gamma}}_w = \\bar{\\mathbf{C}}(z)  \\bar{\\mathbf{\\Gamma}}\n\n        \"\"\"\n\n        return get_Cw_cpx(self.MS, self.K, self.K_star, zval, settings=settings)\n\n\n    def balfreq(self, DictBalFreq, wake_prop_settings=None):\n        \"\"\"\n        Low-rank method for frequency limited balancing.\n        The Observability ad controllability Gramians over the frequencies kv\n        are solved in factorised form. Balancd modes are then obtained with a\n        square-root method.\n\n        Details:\n\n        Observability and controllability Gramians are solved in factorised form\n        through explicit integration. The number of integration points determines\n        both the accuracy and the maximum size of the balanced model.\n\n        Stability over all (Nb) balanced states is achieved if:\n\n            a. one of the Gramian is integrated through the full Nyquist range\n            b. the integration points are enough.\n\n        Note, however, that even when stability is not achieved over the full\n        balanced states, stability of the balanced truncated model with Ns<=Nb\n        states is normally observed even when a low number of integration points\n        is used. Two integration methods (trapezoidal rule on uniform grid and\n        Gauss-Legendre quadrature) are provided.\n\n        Input:\n\n        - DictBalFreq: dictionary specifying integration method with keys:\n\n            - ``frequency``: defines limit frequencies for balancing. The balanced\n              model will be accurate in the range [0,F], where F is the value of\n              this key. Note that F units must be consistent with the units specified\n              in the self.ScalingFacts dictionary.\n\n            - ``method_low``: ['gauss','trapz'] specifies whether to use gauss\n              quadrature or trapezoidal rule in the low-frequency range [0,F]\n\n            - ``options_low``: options to use for integration in the low-frequencies.\n              These depend on the integration scheme (See below).\n\n            - ``method_high``: method to use for integration in the range [F,F_N],\n              where F_N is the Nyquist frequency. See 'method_low'.\n\n            - ``options_high``: options to use for integration in the high-frequencies.\n\n            - ``check_stability``: if True, the balanced model is truncated to\n              eliminate unstable modes - if any is found. Note that very accurate\n              balanced model can still be obtained, even if high order modes are\n              unstable. Note that this option is overridden if \"\"\n\n            - ``get_frequency_response``: if True, the function also returns the\n              frequency response evaluated at the low-frequency range integration\n              points. If True, this option also allows to automatically tune the\n              balanced model.\n\n        Future options:\n\n            - ``truncation_tolerance``: if ``get_frequency_response`` is True, allows\n              to truncate the balanced model so as to achieved a prescribed\n              tolerance in the low-frequwncy range.\n\n            - ``Ncpu``: for parallel run\n\n        The following integration schemes are available:\n\n            - ``trapz``: performs integration over equally spaced points using\n              trapezoidal rule. It accepts options dictionaries with keys:\n\n                - ``points``: number of integration points to use (including\n                  domain boundary)\n\n            - ``gauss`` performs gauss-lobotto quadrature. The domain can be\n              partitioned in Npart sub-domain in which the gauss-lobotto quadrature\n              of order Ord can be applied. A total number of Npart*Ord points is\n              required. It accepts options dictionaries of the form:\n\n                - ``partitions``: number of partitions\n                - ``order``: quadrature order.\n\n        Example:\n\n        The following dictionary\n\n            .. code-block:: python\n\n                DictBalFreq={   'frequency': 1.2,\n                                'method_low': 'trapz',\n                                'options_low': {'points': 12},\n                                'method_high': 'gauss',\n                                'options_high': {'partitions': 2, 'order': 8},\n                                'check_stability': True }\n\n        balances the state-space model self.SS in the frequency range [0, 1.2]\n        using\n\n            (a) 12 equally-spaced points integration of the Gramians in the low-frequency range [0,1.2] and\n            (b) a 2 Gauss-Lobotto 8-th order quadratures of the controllability\n                Gramian in the high-frequency range.\n\n        A total number of 28 integration points will be required, which will\n        result into a balanced model with number of states ``min{2*28* number_inputs, 2*28* number_outputs}``\n\n        The model is finally truncated so as to retain only the first Ns stable\n        modes.\n        \"\"\"\n\n        ### check input dictionary\n        if 'frequency' not in DictBalFreq:\n            raise NameError('Solution dictionary must include the \"frequency\" key')\n\n        if 'method_low' not in DictBalFreq:\n            warnings.warn('Setting default options for low-frequency integration')\n            DictBalFreq['method_low'] = 'trapz'\n            DictBalFreq['options_low'] = {'points': 12}\n\n        if 'method_high' not in DictBalFreq:\n            warnings.warn('Setting default options for high-frequency integration')\n            DictBalFreq['method_high'] = 'gauss'\n            DictBalFreq['options_high'] = {'partitions': 2, 'order': 8}\n\n        if 'check_stability' not in DictBalFreq:\n            DictBalFreq['check_stability'] = True\n\n        if 'output_modes' not in DictBalFreq:\n            DictBalFreq['output_modes'] = True\n\n        if 'get_frequency_response' not in DictBalFreq:\n            DictBalFreq['get_frequency_response'] = False\n\n        ### get integration points and weights\n\n        # Nyquist frequency\n        kn = np.pi / self.SS.dt\n\n        Opt = DictBalFreq['options_low']\n        if DictBalFreq['method_low'] == 'trapz':\n            kv_low, wv_low = librom.get_trapz_weights(0., DictBalFreq['frequency'],\n                                                      Opt['points'], False)\n        elif DictBalFreq['method_low'] == 'gauss':\n            kv_low, wv_low = librom.get_gauss_weights(0., DictBalFreq['frequency'],\n                                                      Opt['partitions'], Opt['order'])\n        else:\n            raise NameError(\n                'Invalid value %s for key \"method_low\"' % DictBalFreq['method_low'])\n\n        Opt = DictBalFreq['options_high']\n        if DictBalFreq['method_high'] == 'trapz':\n            kv_high, wv_high = librom.get_trapz_weights(DictBalFreq['frequency'], kn,\n                                                        Opt['points'], True)\n        elif DictBalFreq['method_high'] == 'gauss':\n            kv_high, wv_high = librom.get_gauss_weights(DictBalFreq['frequency'], kn,\n                                                        Opt['partitions'], Opt['order'])\n        else:\n            raise NameError(\n                'Invalid value %s for key \"method_high\"' % DictBalFreq['method_high'])\n\n        ### get useful terms\n        K = self.K\n        K_star = self.K_star\n\n        Eye = np.eye(K)\n\n        if self.remove_predictor:\n            Bup = self.B_predictor[:K, :]\n        else:\n            Bup = self.SS.B[:K, :]\n\n        if self.use_sparse:\n            # warning: behaviour may change in future numpy release.\n            # Ensure P,Pw,Bup are np.ndarray\n            P = np.array(self.SS.A[:K, :K].todense())\n            Pw = np.array(self.SS.A[:K, K:K + K_star].todense())\n            if type(Bup) not in [np.ndarray, libsp.csc_matrix]:\n                Bup = Bup.toarray()\n        else:\n            P = self.SS.A[:K, :K]\n            Pw = self.SS.A[:K, K:K + K_star]\n\n        # indices to manipulate obs solution\n        ii00 = range(0, self.K)\n        ii01 = range(self.K, self.K + self.K_star)\n        ii02 = range(self.K + self.K_star, 2 * self.K + self.K_star)\n        ii03 = range(2 * self.K + self.K_star, 3 * self.K + self.K_star)\n\n        # integration factors\n        if self.integr_order == 2:\n            b0, bm1, bp1 = -2., 0.5, 1.5\n        else:\n            b0, bp1 = -1., 1.\n            raise NameError('Method not implemented for integration order 1')\n\n        ### -------------------------------------------------- loop frequencies\n\n        ### merge vectors\n        Nk_low = len(kv_low)\n        kvdt = np.concatenate((kv_low, kv_high)) * self.SS.dt\n        wv = np.concatenate((wv_low, wv_high)) * self.SS.dt\n        zv = np.cos(kvdt) + 1.j * np.sin(kvdt)\n\n        Qobs = np.zeros((self.SS.states, self.SS.outputs), dtype=np.complex_)\n        Zc = np.zeros((self.SS.states, 2 * self.SS.inputs * len(kvdt)), )\n        Zo = np.zeros((self.SS.states, 2 * self.SS.outputs * Nk_low), )\n\n        if DictBalFreq['get_frequency_response']:\n            self.Yfreq = np.empty((self.SS.outputs, self.SS.inputs, Nk_low,), dtype=np.complex_)\n            self.kv = kv_low\n\n        for kk in range(len(kvdt)):\n\n            zval = zv[kk]\n            Intfact = wv[kk]  # integration factor\n\n            #  build terms that will be recycled\n            Cw_cpx = self.get_Cw_cpx(zval, settings=wake_prop_settings)\n            PwCw_T = Cw_cpx.T.dot(Pw.T)\n            Kernel = np.linalg.inv(zval * Eye - P - PwCw_T.T)\n\n            ### ----- controllability\n            Ygamma = Intfact * np.dot(Kernel, Bup)\n            if self.remove_predictor:\n                Ygamma *= zval\n            Ygamma_star = Cw_cpx.dot(Ygamma)\n\n            if self.integr_order == 1:\n                dfact = (bp1 + b0 / zval)\n                Qctrl = np.vstack([Ygamma, Ygamma_star, dfact * Ygamma])\n            elif self.integr_order == 2:\n                dfact = bp1 + b0 / zval + bm1 / zval ** 2\n                Qctrl = np.vstack(\n                    [Ygamma, Ygamma_star, dfact * Ygamma, (1. / zval) * Ygamma])\n            else:\n                raise NameError('Specify valid integration order')\n\n            kkvec = range(2 * kk * self.SS.inputs, 2 * (kk + 1) * self.SS.inputs)\n            Zc[:, kkvec[:self.SS.inputs]] = Qctrl.real  # *Intfact\n            Zc[:, kkvec[self.SS.inputs:]] = Qctrl.imag  # *Intfact\n\n            ### ----- frequency response\n            if DictBalFreq['get_frequency_response'] and kk < Nk_low:\n                self.Yfreq[:, :, kk] = np.dot(self.SS.C, Qctrl) / Intfact + self.SS.D\n\n            ### ----- frequency response\n            if DictBalFreq['get_frequency_response'] and kk < Nk_low:\n                self.Yfreq[:, :, kk] = np.dot(self.SS.C, Qctrl) / Intfact + self.SS.D\n\n            ### ----- observability\n            # solve (1./zval*I - A.T)^{-1} C^T (in low-frequency only)\n            if kk >= Nk_low:\n                continue\n\n            zinv = 1. / zval\n            Cw_cpx_H = Cw_cpx.conjugate().T\n\n            Qobs[ii02, :] = zval * self.SS.C[:, ii02].T\n            if self.integr_order == 2:\n                Qobs[ii03, :] = bm1 * zval ** 2 * self.SS.C[:, ii02].T\n\n            rhs = self.SS.C[:, ii00].T + \\\n                  Cw_cpx_H.dot(self.SS.C[:, ii01].T) + \\\n                  libsp.dot(\n                      (bp1 * zval) * (PwCw_T.conj() + P.T) + \\\n                      (b0 * zval + bm1 * zval ** 2) * Eye, self.SS.C[:, ii02].T)\n\n            Qobs[ii00, :] = np.dot(Kernel.conj().T, rhs)\n\n            Eye_star = libsp.csc_matrix(\n                (zinv * np.ones((K_star,)), (range(K_star), range(K_star))),\n                shape=(K_star, K_star), dtype=np.complex_)\n            Qobs[ii01, :] = libsp.solve(\n                Eye_star - self.SS.A[K:K + K_star, K:K + K_star].T,\n                np.dot(Pw.T, Qobs[ii00, :] + \\\n                       (bp1 * zval) * self.SS.C[:, ii02].T) + \\\n                self.SS.C[:, ii01].T)\n\n            kkvec = range(2 * kk * self.SS.outputs, 2 * (kk + 1) * self.SS.outputs)\n            Zo[:, kkvec[:self.SS.outputs]] = Intfact * Qobs.real\n            Zo[:, kkvec[self.SS.outputs:]] = Intfact * Qobs.imag\n\n        # delete full matrices\n        Kernel = None\n        Qctrl = None\n        Qobs = None\n\n        # self.Zc=Zc\n        # self.Zo=Zo\n\n        # LRSQM (optimised)\n        U, hsv, Vh = scalg.svd(np.dot(Zo.T, Zc), full_matrices=False)\n        sinv = hsv ** (-0.5)\n        T = np.dot(Zc, Vh.T * sinv)\n        Ti = np.dot((U * sinv).T, Zo.T)\n        # Zc,Zo=None,None\n\n        ### build frequency balanced model\n        Ab = libsp.dot(Ti, libsp.dot(self.SS.A, T))\n        Bb = libsp.dot(Ti, self.SS.B)\n        Cb = libsp.dot(self.SS.C, T)\n        SSb = libss.StateSpace(Ab, Bb, Cb, self.SS.D, dt=self.SS.dt)\n\n        ### Eliminate unstable modes - if any:\n        if DictBalFreq['check_stability']:\n            for nn in range(1, len(hsv) + 1):\n                eigs_trunc = scalg.eigvals(SSb.A[:nn, :nn])\n                eigs_trunc_max = np.max(np.abs(eigs_trunc))\n                if eigs_trunc_max > 1. - 1e-16:\n                    SSb.truncate(nn - 1)\n                    hsv = hsv[:nn - 1]\n                    T = T[:, :nn - 1]\n                    Ti = Ti[:nn - 1, :]\n                    break\n\n        self.SSb = SSb\n        self.hsv = hsv\n        if DictBalFreq['output_modes']:\n            self.T = T\n            self.Ti = Ti\n            self.Zc = Zc\n            self.Zo = Zo\n\n    def balfreq_profiling(self, wake_prop_settings=None):\n        \"\"\"\n        Generate profiling report for balfreq function and saves it into ``self.prof_out.``\n        The function also returns a ``pstats.Stats`` object.\n\n        To read the report:\n            .. code-block:: python\n\n                import pstats\n                p=pstats.Stats(self.prof_out).sort_stats('cumtime')\n                p.print_stats(20)\n        \"\"\"\n        import pstats\n        import cProfile\n        def wrap():\n            DictBalFreq = {'frequency': 0.5, 'check_stability': False}\n            self.balfreq(DictBalFreq, wake_prop_settings=wake_prop_settings)\n\n        cProfile.runctx('wrap()', globals(), locals(), filename=self.prof_out)\n\n        cProfile.runctx('wrap()', globals(), locals(), filename=self.prof_out)\n\n        return pstats.Stats(self.prof_out).sort_stats('cumtime')\n\n    def assemble_ss_profiling(self):\n        \"\"\"\n        Generate profiling report for assembly and save it in self.prof_out.\n\n        To read the report:\n            import pstats\n            p=pstats.Stats(self.prof_out)\n        \"\"\"\n\n        import cProfile\n        cProfile.runctx('self.assemble_ss()', globals(), locals(), filename=self.prof_out)\n\n    def solve_steady(self, usta, method='direct'):\n        \"\"\"\n        Steady state solution from state-space model.\n\n        Warning: these methods are less efficient than the solver in Static\n        class, Static.solve, and should be used only for verification purposes.\n        The \"minsize\" method, however, guarantees the inversion of a K x K\n        matrix only, similarly to what is done in Static.solve.\n        \"\"\"\n\n        if self.remove_predictor is True and method != 'direct':\n            raise NameError('Only direct solution is available if predictor ' \\\n                            'term has been removed from the state-space equations (see assembly_ss)')\n\n        if self.use_sparse is True and method != 'direct':\n            raise NameError('Only direct solution is available if use_sparse is True. ' \\\n                            '(see assembly_ss)')\n\n        Ass, Bss, Css, Dss = self.SS.A, self.SS.B, self.SS.C, self.SS.D\n\n        if method == 'minsize':\n            # as opposed to linuvlm.Static, this solves for the bound circulation\n            # starting from\n            #\tGamma   = [P, Pw] * {Gamma,Gamma_w} + B u_\n            #   Gamma_w = [C, Cw] * {Gamma,Gamma_w}\t\t  \t\t\t(eq. 1a,1b)\n            # where time indices have been dropped. Transforming into\n            #\tGamma \t= [P+PwC, PwCw] * {Gamma,Gamma_w} + B u \t(eq. 2)\n            # and enforcing Gamma_w = Gamma_TE, this reduces to the KxK system:\n            # \tAIC Gamma = B u \t\t\t\t\t\t\t\t\t(eq. 3)\n            MS = self.MS\n            K = self.K\n            K_star = self.K_star\n\n            ### build eq. 2:\n            P = Ass[:K, :K]\n            Pw = Ass[:K, K:K + K_star]\n            C = Ass[K:K + K_star, :K]\n            Cw = Ass[K:K + K_star, K:K + K_star]\n            PwCw = np.dot(Pw, Cw)\n\n            ### build eq. 3\n            AIC = np.eye(K) - P - np.dot(Pw, C)\n\n            # condense Gammaw terms\n            K0out, K0out_star = 0, 0\n            for ss_out in range(MS.n_surf):\n                Kout = MS.KK[ss_out]\n                Kout_star = MS.KK_star[ss_out]\n\n                K0in, K0in_star = 0, 0\n                for ss_in in range(MS.n_surf):\n                    Kin = MS.KK[ss_in]\n                    Kin_star = MS.KK_star[ss_in]\n\n                    # link to sub-matrices\n                    aic = AIC[K0out:K0out + Kout, K0in:K0in + Kin]\n                    aic_star = PwCw[K0out:K0out + Kout, K0in_star:K0in_star + Kin_star]\n\n                    # fold aic_star: sum along chord at each span-coordinate\n                    N_star = MS.NN_star[ss_in]\n                    aic_star_fold = np.zeros((Kout, N_star))\n                    for jj in range(N_star):\n                        aic_star_fold[:, jj] += np.sum(aic_star[:, jj::N_star], axis=1)\n                    aic[:, -N_star:] -= aic_star_fold\n\n                    K0in += Kin\n                    K0in_star += Kin_star\n                K0out += Kout\n                K0out_star += Kout_star\n\n            ### solve\n            # gamma\n            gamma = np.linalg.solve(AIC, np.dot(Bss[:K, :], usta))\n            # retrieve gamma over wake\n            gamma_star = []\n            Ktot = 0\n            for ss in range(MS.n_surf):\n                Ktot += MS.Surfs[ss].maps.K\n                N = MS.Surfs[ss].maps.N\n                Mstar = MS.Surfs_star[ss].maps.M\n                gamma_star.append(np.concatenate(Mstar * [gamma[Ktot - N:Ktot]]))\n            gamma_star = np.concatenate(gamma_star)\n\n            if self.integr_order == 1:\n                xsta = np.concatenate((gamma, gamma_star, np.zeros_like(gamma)))\n            if self.integr_order == 2:\n                xsta = np.concatenate((gamma, gamma_star, np.zeros_like(gamma),\n                                       gamma))\n\n            ysta = np.dot(Css, xsta) + np.dot(Dss, usta)\n\n        elif method == 'direct':\n            \"\"\" Solves (I - A) x = B u with direct method\"\"\"\n            # if self.use_sparse:\n            #     xsta=libsp.solve(libsp.eye_as(Ass)-Ass,Bss.dot(usta))\n            # else:\n            #     Ass_steady = np.eye(*Ass.shape) - Ass\n            #     xsta = np.linalg.solve(Ass_steady, np.dot(Bss, usta))\n            xsta = libsp.solve(libsp.eye_as(Ass) - Ass, Bss.dot(usta))\n            ysta = np.dot(Css, xsta) + np.dot(Dss, usta)\n\n        elif method == 'recursive':\n            \"\"\" Provides steady-state solution solving for impulsive response \"\"\"\n            tol, er = 1e-4, 1.0\n            Ftot0 = np.zeros((3,))\n            nn = 0\n            xsta = np.zeros((self.Nx))\n            while er > tol and nn < 1000:\n                xsta = np.dot(Ass, xsta) + np.dot(Bss, usta)\n                ysta = np.dot(Css, xsta) + np.dot(Dss, usta)\n                Ftot = np.array(\n                    [np.sum(ysta[cc * self.Kzeta:(cc + 1) * self.Kzeta])\n                     for cc in range(3)])\n                er = np.linalg.norm(Ftot - Ftot0)\n                Ftot0 = Ftot.copy()\n                nn += 1\n            if er < tol:\n                pass  # print('Recursive solution found in %.3d iterations'%nn)\n            else:\n                raise exceptions.NotConvergedSolver('Solution not found! Max. iterations reached with error: %.3e' % er)\n\n        elif method == 'subsystem':\n            \"\"\" Solves sub-system related to Gamma, Gamma_w states only \"\"\"\n\n            Nxsub = self.K + self.K_star\n            Asub_steady = np.eye(Nxsub) - Ass[:Nxsub, :Nxsub]\n            xsub = np.linalg.solve(Asub_steady, np.dot(Bss[:Nxsub, :], usta))\n            if self.integr_order == 1:\n                xsta = np.concatenate((xsub, np.zeros((self.K,))))\n            if self.integr_order == 2:\n                xsta = np.concatenate((xsub, np.zeros((2 * self.K,))))\n            ysta = np.dot(Css, xsta) + np.dot(Dss, usta)\n\n        else:\n            raise NameError('Method %s not recognised!' % method)\n\n        return xsta, ysta\n\n    def solve_step(self, x_n, u_n, u_n1=None, transform_state=False):\n        r\"\"\"\n        Solve step.\n\n        If the predictor term has not been removed (``remove_predictor = False``) then the system is solved as:\n\n            .. math::\n                \\mathbf{x}^{n+1} &= \\mathbf{A\\,x}^n + \\mathbf{B\\,u}^n \\\\\n                \\mathbf{y}^{n+1} &= \\mathbf{C\\,x}^{n+1} + \\mathbf{D\\,u}^n\n\n        Else, if ``remove_predictor = True``, the state is modified as\n\n            ..  math:: \\mathbf{h}^n = \\mathbf{x}^n - \\mathbf{B\\,u}^n\n\n        And the system solved by:\n\n            .. math::\n                \\mathbf{h}^{n+1} &= \\mathbf{A\\,h}^n + \\mathbf{B_{mod}\\,u}^{n} \\\\\n                \\mathbf{y}^{n+1} &= \\mathbf{C\\,h}^{n+1} + \\mathbf{D_{mod}\\,u}^{n+1}\n\n        Finally, the original state is recovered using the reverse transformation:\n\n            .. math:: \\mathbf{x}^{n+1} = \\mathbf{h}^{n+1} + \\mathbf{B\\,u}^{n+1}\n\n        where the modifications to the :math:`\\mathbf{B}_{mod}` and :math:`\\mathbf{D}_{mod}` are detailed in\n        :func:`Dynamic.assemble_ss`.\n\n        Notes:\n            Although the original equations include the term :math:`\\mathbf{u}_{n+1}`, it is a reasonable approximation\n            to take :math:`\\mathbf{u}_{n+1}\\approx\\mathbf{u}_n` given a sufficiently small time step, hence if the input\n            at time ``n+1`` is not parsed, it is estimated from :math:`u^n`.\n\n        Args:\n            x_n (np.array): State vector at the current time step :math:`\\mathbf{x}^n`\n            u_n (np.array): Input vector at time step :math:`\\mathbf{u}^n`\n            u_n1 (np.array): Input vector at time step :math:`\\mathbf{u}^{n+1}`\n            transform_state (bool): When the predictor term is removed, if true it will transform the state vector. If\n                false it will be assumed that the state vector that is parsed is already transformed i.e. it is\n                :math:`\\mathbf{h}`.\n\n        Returns:\n            Tuple: Updated state and output vector packed in a tuple :math:`(\\mathbf{x}^{n+1},\\,\\mathbf{y}^{n+1})`\n\n        Notes:\n            To speed-up the solution and use minimal memory:\n                - solve for bound vorticity (and)\n                - propagate the wake\n                - compute the output separately.\n        \"\"\"\n\n        if u_n1 is None:\n            u_n1 = u_n.copy()\n\n        if self.remove_predictor:\n\n            # Transform state vector\n            # TODO: Agree on a way to do this. Either always transform here or transform prior to using the method.\n            if transform_state:\n                h_n = x_n - self.B_predictor.dot(u_n)\n            else:\n                h_n = x_n\n\n            h_n1 = self.SS.A.dot(h_n) + self.SS.B.dot(u_n)\n            y_n1 = np.dot(self.SS.C, h_n1) + np.dot(self.SS.D, u_n1)\n\n            # Recover state vector\n            if transform_state:\n                x_n1 = h_n1 + self.B_predictor.dot(u_n1)\n            else:\n                x_n1 = h_n1\n\n        else:\n            x_n1 = self.SS.A.dot(x_n) + self.SS.B.dot(u_n1)\n            y_n1 = np.dot(self.SS.C, x_n1) + np.dot(self.SS.D, u_n1)\n\n        return x_n1, y_n1\n\n    def unpack_state(self, xvec):\n        r\"\"\"\n        Unpacks the state vector into physical constituents for full order models.\n\n        The state vector :math:`\\mathbf{x}` of the form\n\n            .. math:: \\mathbf{x}_n = \\{ \\delta \\mathbf{\\Gamma}_n,\\, \\delta \\mathbf{\\Gamma_{w_n}},\\,\n                \\Delta t\\,\\delta\\mathbf{\\Gamma}'_n,\\, \\delta\\mathbf{\\Gamma}_{n-1} \\}\n\n        Is unpacked into:\n\n            .. math:: {\\delta \\mathbf{\\Gamma}_n,\\, \\delta \\mathbf{\\Gamma_{w_n}},\\,\n                \\,\\delta\\mathbf{\\Gamma}'_n}\n\n        Args:\n            xvec (np.ndarray): State vector\n\n        Returns:\n            tuple: Column vectors for bound circulation, wake circulation and circulation derivative packed in a tuple.\n        \"\"\"\n\n        K, K_star = self.K, self.K_star\n        gamma_vec = xvec[:K]\n        gamma_star_vec = xvec[K:K + K_star]\n        gamma_dot_vec = xvec[K + K_star:2 * K + K_star] / self.dt\n\n        return gamma_vec, gamma_star_vec, gamma_dot_vec\n\n\n################################################################################\n\n################################################################################\n\nclass DynamicBlock(Dynamic):\n    \"\"\"\n    Class for dynamic linearised UVLM solution. Linearisation around steady-state\n    are only supported.\n\n    The class is a low-memory implementation of Dynamic, and inherits most of\n    the methods contained there. State-space models are allocated in list-block\n    form (as per numpy.block) to minimise memory usage. This class provides\n    lower memory / computational time assembly, frequency response and frequency\n    limited balancing.\n\n    Input:\n\n        - tsdata: aero timestep data from SHARPy solution\n        - dt: time-step\n        - integr_order=2: integration order for UVLM unsteady aerodynamic force\n        - RemovePredictor=True: if true, the state-space model is modified so as\n          to accept in input perturbations, u, evaluated at time-step n rather than\n          n+1.\n        - ScalingDict=None: disctionary containing fundamental reference units\n\n            >>> {'length':  reference_length,\n                 'speed':   reference_speed,\n                 'density': reference density}\n\n\n          used to derive scaling quantities for the state-space model variables.\n          The scaling factors are stores in ``self.ScalingFact``.\n\n          Note that while time, circulation, angular speeds) are scaled\n          accordingly, FORCES ARE NOT. These scale by qinf*b**2, where b is the\n          reference length and qinf is the dinamic pressure.\n        - UseSparse=False: builds the A and B matrices in sparse form. C and D\n          are dense, hence the sparce format is not used.\n\n\n    Methods:\n        - nondimss: normalises a dimensional state-space model based on the\n          scaling factors in self.ScalingFact.\n        - dimss: inverse of nondimss.\n        - assemble_ss: builds state-space model. See function for more details.\n        - assemble_ss_profiling: generate profiling report of the assembly and\n          saves it into self.prof_out. To read the report:\n\n            >>> import pstats\n                p=pstats.Stats(self.prof_out)\n\n\n        - freqresp: ad-hoc method for fast frequency response (only implemented)\n          for remove_predictor=False\n\n\n    To do: upgrade to linearise around unsteady snapshot (adjoint)\n    \"\"\"\n\n    def __init__(self, tsdata, dt=None,\n                 dynamic_settings=None,\n                 integr_order=2,\n                 RemovePredictor=True, ScalingDict=None, UseSparse=True, for_vel=np.zeros((6), )):\n\n        if dynamic_settings is None:\n            warnings.warn('Individual parsing of settings is deprecated. Please use the settings dictionary',\n                          DeprecationWarning)\n\n        super().__init__(tsdata, dt,\n                         dynamic_settings=dynamic_settings,\n                         integr_order=integr_order,\n                         RemovePredictor=RemovePredictor,\n                         ScalingDict=ScalingDict,\n                         UseSparse=UseSparse,\n                         for_vel=for_vel)\n\n        # number of blocks\n        self.nblock_x = self.integr_order + 2\n        self.nblock_u = 3\n        self.nblock_y = 1\n\n        # sizes in blocks\n        self.S_x = [self.K, self.K_star, self.K]\n        if self.integr_order == 2: self.S_x += [self.K]\n        self.S_u = 3 * [3 * self.Kzeta]\n        self.S_y = [3 * self.Kzeta]\n\n    def nondimss(self):\n        \"\"\"\n        Scale state-space model based of self.ScalingFacts.\n        \"\"\"\n\n        t0 = time.time()\n\n        B_facts = [self.ScalingFacts['length'] / self.ScalingFacts['circulation'],\n                   self.ScalingFacts['speed'] / self.ScalingFacts['circulation'],\n                   self.ScalingFacts['speed'] / self.ScalingFacts['circulation']]\n\n        D_facts = [self.ScalingFacts['length'] / self.ScalingFacts['force'],\n                   self.ScalingFacts['speed'] / self.ScalingFacts['force'],\n                   self.ScalingFacts['speed'] / self.ScalingFacts['force']]\n\n        C_facts = self.nblock_x * \\\n                  [self.ScalingFacts['circulation'] / self.ScalingFacts['force']]\n\n        for ii in range(self.nblock_x):\n            for jj in range(self.nblock_u):\n                if self.SS.B[ii][jj] is not None:\n                    self.SS.B[ii][jj] *= B_facts[jj]\n\n        for ii in range(self.nblock_y):\n            for jj in range(self.nblock_x):\n                if self.SS.C[ii][jj] is not None:\n                    self.SS.C[ii][jj] *= C_facts[jj]\n\n        for ii in range(self.nblock_y):\n            for jj in range(self.nblock_u):\n                if self.SS.D[ii][jj] is not None:\n                    self.SS.D[ii][jj] *= D_facts[jj]\n\n        self.SS.dt = self.SS.dt / self.ScalingFacts['time']\n        self.cpu_summary['nondim'] = time.time() - t0\n\n    def dimss(self):\n\n        t0 = time.time()\n\n        B_facts = [self.ScalingFacts['length'] / self.ScalingFacts['circulation'],\n                   self.ScalingFacts['speed'] / self.ScalingFacts['circulation'],\n                   self.ScalingFacts['speed'] / self.ScalingFacts['circulation']]\n\n        D_facts = [self.ScalingFacts['length'] / self.ScalingFacts['force'],\n                   self.ScalingFacts['speed'] / self.ScalingFacts['force'],\n                   self.ScalingFacts['speed'] / self.ScalingFacts['force']]\n\n        D_facts = [self.ScalingFacts['length'] / self.ScalingFacts['force'],\n                   self.ScalingFacts['speed'] / self.ScalingFacts['force'],\n                   self.ScalingFacts['speed'] / self.ScalingFacts['force']]\n\n        C_facts = self.nblock_x * \\\n                  [self.ScalingFacts['circulation'] / self.ScalingFacts['force']]\n\n        for ii in range(self.nblock_x):\n            for jj in range(self.nblock_u):\n                if self.SS.B[ii][jj] is not None:\n                    self.SS.B[ii][jj] /= B_facts[jj]\n\n        for ii in range(self.nblock_y):\n            for jj in range(self.nblock_x):\n                if self.SS.C[ii][jj] is not None:\n                    self.SS.C[ii][jj] /= C_facts[jj]\n\n        for ii in range(self.nblock_y):\n            for jj in range(self.nblock_u):\n                if self.SS.D[ii][jj] is not None:\n                    self.SS.D[ii][jj] /= D_facts[jj]\n\n        self.SS.dt = self.SS.dt * self.ScalingFacts['time']\n        self.cpu_summary['dim'] = time.time() - t0\n\n    def assemble_ss(self, wake_prop_settings=None):\n        r\"\"\"\n        Produces block-form of state-space model\n\n            .. math::\n\n                \\mathbf{x}_{n+1} &= \\mathbf{A}\\,\\mathbf{x}_n + \\mathbf{B} \\mathbf{u}_{n+1} \\\\\n                \\mathbf{y}_n &= \\mathbf{C}\\,\\mathbf{x}_n + \\mathbf{D} \\mathbf{u}_n\n\n        where the state, inputs and outputs are:\n\n            .. math:: \\mathbf{x}_n = \\{ \\delta \\mathbf{\\Gamma}_n,\\, \\delta \\mathbf{\\Gamma_{w_n}},\\,\n                \\Delta t\\,\\delta\\mathbf{\\Gamma}'_n,\\, \\delta\\mathbf{\\Gamma}_{n-1} \\}\n\n            .. math:: \\mathbf{u}_n = \\{ \\delta\\mathbf{\\zeta}_n,\\, \\delta\\mathbf{\\zeta}'_n,\\,\n                \\delta\\mathbf{u}_{ext,n} \\}\n\n            .. math:: \\mathbf{y} = \\{\\delta\\mathbf{f}\\}\n\n        with :math:`\\mathbf{\\Gamma}` being the vector of vortex circulations,\n        :math:`\\mathbf{\\zeta}` the vector of vortex lattice coordinates and\n        :math:`\\mathbf{f}` the vector of aerodynamic forces and moments. Note that :math:`(\\bullet)'` denotes\n        a derivative with respect to time.\n\n        Note that the input is atypically defined at time ``n+1``, therefore by default\n        ``self.remove_predictor = True`` and the predictor term ``u_{n+1}`` is eliminated through\n        the change of state[1]:\n\n            .. math::\n                \\mathbf{h}_n &= \\mathbf{x}_n - \\mathbf{B}\\,\\mathbf{u}_n \\\\\n\n        such that:\n\n            .. math::\n                \\mathbf{h}_{n+1} &= \\mathbf{A}\\,\\mathbf{h}_n + \\mathbf{A\\,B}\\,\\mathbf{u}_n \\\\\n                \\mathbf{y}_n &= \\mathbf{C\\,h}_n + (\\mathbf{C\\,B}+\\mathbf{D})\\,\\mathbf{u}_n\n\n\n        which only modifies the equivalent :math:`\\mathbf{B}` and :math:`\\mathbf{D}` matrices.\n\n        References:\n            [1] Franklin, GF and Powell, JD. Digital Control of Dynamic Systems, Addison-Wesley Publishing Company, 1980\n\n        To do:\n        - remove all calls to scipy.linalg.block_diag\n        \"\"\"\n\n        cout.cout_wrap('\\tBlock form state-space realisation of UVLM equations started...', 1)\n        t0 = time.time()\n        MS = self.MS\n        K, K_star = self.K, self.K_star\n        Kzeta = self.Kzeta\n\n        # ------------------------------------------------------ determine size\n\n        Nx = self.Nx\n        Nu = self.Nu\n        Ny = self.Ny\n\n        nblock_x = self.nblock_x\n        nblock_u = self.nblock_u\n        nblock_y = self.nblock_y\n\n        if self.integr_order == 2:\n            # Second order differencing scheme coefficients\n            b0, bm1, bp1 = -2., 0.5, 1.5\n\n        # ----------------------------------------------------------- state eq.\n\n        ### state terms (A matrix)\n        # - choice of sparse matrices format is optimised to reduce memory load\n\n        # Aero influence coeffs\n        List_AICs, List_AICs_star = ass.AICs(MS.Surfs, MS.Surfs_star,\n                                             target='collocation', Project=True)\n        A0 = np.block(List_AICs)\n        A0W = np.block(List_AICs_star)\n        List_AICs, List_AICs_star = None, None\n        LU, P = scalg.lu_factor(A0)\n        AinvAW = scalg.lu_solve((LU, P), A0W)\n        A0, A0W = None, None\n\n        ### propagation of circ\n        # fast and memory efficient with both dense and sparse matrices\n        List_C, List_Cstar = ass.wake_prop(MS,\n                                           self.use_sparse, sparse_format='csc',\n                                           settings=wake_prop_settings)\n        if self.use_sparse:\n            Cgamma = libsp.csc_matrix(sparse.block_diag(List_C, format='csc'))\n            CgammaW = libsp.csc_matrix(sparse.block_diag(List_Cstar, format='csc'))\n        else:\n            Cgamma = scalg.block_diag(*List_C)\n            CgammaW = scalg.block_diag(*List_Cstar)\n        List_C, List_Cstar = None, None\n\n        # recurrent dense terms stored as numpy.ndarrays\n        AinvAWCgamma = -libsp.dot(AinvAW, Cgamma)\n        AinvAWCgammaW = -libsp.dot(AinvAW, CgammaW)\n\n        ### A matrix assembly\n        Ass = []\n\n        # non-penetration condition\n        Ass.append([AinvAWCgamma, AinvAWCgammaW, None, ])\n        if self.integr_order == 2: Ass[0].append(None)\n        # circ. proparagation\n        Ass.append([Cgamma, CgammaW, None, ])\n        if self.integr_order == 2: Ass[1].append(None)\n\n        Cgamma = None\n        CgammaW = None\n\n        # delta eq.\n        if self.use_sparse:\n            ones = libsp.csc_matrix(\n                (np.ones((K,)), (range(K), range(K))), shape=(K, K))\n        else:\n            ones = np.eye(K)\n\n        if self.integr_order == 1:\n            Ass.append([AinvAWCgamma - ones, AinvAWCgammaW.copy(), None])\n\n        elif self.integr_order == 2:\n            Ass.append([bp1 * AinvAWCgamma + b0 * ones, bp1 * AinvAWCgammaW, None, bm1 * ones])\n            # identity eq.\n            Ass.append([ones, None, None, None])\n        AinvAWCgamma = None\n        AinvAWCgammaW = None\n\n        # zeta derivs\n        List_nc_dqcdzeta = ass.nc_dqcdzeta(MS.Surfs, MS.Surfs_star, Merge=True)\n        List_uc_dncdzeta = ass.uc_dncdzeta(MS.Surfs)\n        List_nc_domegazetadzeta_vert = ass.nc_domegazetadzeta(MS.Surfs, MS.Surfs_star)\n        for ss in range(MS.n_surf):\n            List_nc_dqcdzeta[ss][ss] += \\\n                (List_uc_dncdzeta[ss] + List_nc_domegazetadzeta_vert[ss])\n        Ducdzeta = np.block(List_nc_dqcdzeta)  # dense matrix\n        List_nc_dqcdzeta = None\n        List_uc_dncdzeta = None\n        List_nc_domegazetadzeta_vert = None\n\n        # ext velocity derivs (Wnv0)\n        List_Wnv = []\n        for ss in range(MS.n_surf):\n            List_Wnv.append(\n                interp.get_Wnv_vector(MS.Surfs[ss],\n                                      MS.Surfs[ss].aM, MS.Surfs[ss].aN))\n        AinvWnv0 = scalg.lu_solve((LU, P), scalg.block_diag(*List_Wnv))\n        List_Wnv = None\n\n        ### B matrix assembly\n        Bss = []\n\n        # non-penetration condition\n        Bss.append([-scalg.lu_solve((LU, P), Ducdzeta), AinvWnv0, -AinvWnv0])\n        AinvWnv0 = None\n\n        # circulation eq.\n        Bss.append([None, None, None])\n\n        # delta eq.\n        if self.integr_order == 1:\n            Bss.append([bb.copy() for bb in Bss[0]])\n        if self.integr_order == 2:\n            Bss.append([bp1 * bb for bb in Bss[0]])\n\n        # indentity eq\n        if self.integr_order == 2:\n            Bss.append([None, None, None])\n\n        LU, P = None, None\n\n        # ---------------------------------------------------------- output eq.\n\n        ### state terms (C matrix)\n\n        # gamma (induced velocity contrib.)\n        List_dfqsdvind_gamma, List_dfqsdvind_gamma_star = \\\n            ass.dfqsdvind_gamma(MS.Surfs, MS.Surfs_star)\n\n        # gamma (at constant relative velocity)\n        List_dfqsdgamma_vrel0, List_dfqsdgamma_star_vrel0 = \\\n            ass.dfqsdgamma_vrel0(MS.Surfs, MS.Surfs_star)\n        for ss in range(MS.n_surf):\n            List_dfqsdvind_gamma[ss][ss] += List_dfqsdgamma_vrel0[ss]\n            List_dfqsdvind_gamma_star[ss][ss] += List_dfqsdgamma_star_vrel0[ss]\n        Dfqsdgamma = np.block(List_dfqsdvind_gamma)\n        Dfqsdgamma_star = np.block(List_dfqsdvind_gamma_star)\n        List_dfqsdvind_gamma, List_dfqsdvind_gamma_star = None, None\n        List_dfqsdgamma_vrel0, List_dfqsdgamma_star_vrel0 = None, None\n\n        # gamma_dot\n        Dfunstdgamma_dot = scalg.block_diag(*ass.dfunstdgamma_dot(MS.Surfs))\n\n        ### C matrix assembly\n        Css = []\n        Css.append([Dfqsdgamma, Dfqsdgamma_star, Dfunstdgamma_dot / self.dt])\n        if self.integr_order == 2:\n            Css[0].append(None)\n\n        ### input terms (D matrix)\n        Dss = []\n        Dss.append(\n            [scalg.block_diag(*ass.dfqsdzeta_vrel0(MS.Surfs, MS.Surfs_star))])\n\n        # zeta (induced velocity contrib)\n        List_coll, List_vert = ass.dfqsdvind_zeta(MS.Surfs, MS.Surfs_star)\n        for ss in range(MS.n_surf):\n            List_vert[ss][ss] += List_coll[ss]\n        Dss[0][0] += np.block(List_vert)\n        del List_vert, List_coll\n\n        Dss[0].append(-scalg.block_diag(*ass.dfqsduinput(MS.Surfs, MS.Surfs_star)))\n        Dss[0].append(-Dss[0][1])\n\n        if self.remove_predictor:\n            cout.cout_wrap(\"\\t\\tPredictor not be removed! \" +\n                           \"(Though this is accounted for in all methods)\", 1)\n\n        self.SS = libss.ss_block(Ass, Bss, Css, Dss,\n                                 self.S_x, self.S_u, self.S_y, dt=self.dt)\n        cout.cout_wrap('\\tstate-space model produced in form:\\n\\t' \\\n                       'x_{n+1} = A x_{n} + Bp u_{n+1}', 1)\n\n        # add variable tracker\n        self.SS.input_variables = LinearVector(self.input_variables_list)\n        self.SS.state_variables = LinearVector(self.state_variables_list)\n        self.SS.output_variables = LinearVector(self.output_variables_list)\n\n        self.cpu_summary['assemble'] = time.time() - t0\n        cout.cout_wrap('\\t\\t\\t...done in %.2f sec' % self.cpu_summary['assemble'], 1)\n\n    def freqresp(self, kv, wake_prop_settings=None):\n        \"\"\"\n        Ad-hoc method for fast UVLM frequency response over the frequencies\n        kv. The method, only requires inversion of a K x K matrix at each\n        frequency as the equation for propagation of wake circulation are solved\n        exactly.\n        The algorithm implemented here can be used also upon projection of\n        the state-space model.\n\n        Note:\n        This method is very similar to the \"minsize\" solution option is the\n        steady_solve.\n        \"\"\"\n\n        MS = self.MS\n        K = self.K\n        K_star = self.K_star\n\n        Eye = np.eye(K)\n        Bup = np.hstack(self.SS.B[0])\n        P = self.SS.A[0][0]\n        Pw = self.SS.A[0][1]\n\n        Nk = len(kv)\n        kvdt = kv * self.SS.dt\n        zv = np.cos(kvdt) + 1.j * np.sin(kvdt)\n        Yfreq = np.empty((self.SS.outputs, self.SS.inputs, Nk,), dtype=np.complex_)\n\n        for kk in range(Nk):\n\n            ###  build Cw complex\n            Cw_cpx = self.get_Cw_cpx(zv[kk], settings=wake_prop_settings)\n\n            Ygamma = libsp.solve(zv[kk] * Eye - P -\n                                 libsp.dot(Pw, Cw_cpx, type_out=libsp.csc_matrix),\n                                 Bup)\n            if self.remove_predictor:\n                Ygamma *= zv[kk]\n\n            Ygamma_star = Cw_cpx.dot(Ygamma)\n\n            if self.integr_order == 1:\n                dfact = (1. - 1. / zv[kk])\n            elif self.integr_order == 2:\n                dfact = .5 * (3. - 4. / zv[kk] + 1. / zv[kk] ** 2)\n            else:\n                raise NameError('Specify valid integration order')\n\n            # calculate solution\n            Yfreq[:, :, kk] = np.dot(self.SS.C[0][0], Ygamma) + \\\n                              np.dot(self.SS.C[0][1], Ygamma_star) + \\\n                              np.dot(self.SS.C[0][2], dfact * Ygamma) + \\\n                              np.hstack(self.SS.D[0])\n\n        return Yfreq\n\n    def balfreq(self, DictBalFreq, wake_prop_settings=None):\n        \"\"\"\n        Low-rank method for frequency limited balancing.\n        The Observability ad controllability Gramians over the frequencies kv\n        are solved in factorised form. Balancd modes are then obtained with a\n        square-root method.\n\n        Details:\n        Observability and controllability Gramians are solved in factorised form\n        through explicit integration. The number of integration points determines\n        both the accuracy and the maximum size of the balanced model.\n\n        Stability over all (Nb) balanced states is achieved if:\n            a. one of the Gramian is integrated through the full Nyquist range\n            b. the integration points are enough.\n        Note, however, that even when stability is not achieved over the full\n        balanced states, stability of the balanced truncated model with Ns<=Nb\n        states is normally observed even when a low number of integration points\n        is used. Two integration methods (trapezoidal rule on uniform grid and\n        Gauss-Legendre quadrature) are provided.\n\n        Input:\n\n        - DictBalFreq: dictionary specifying integration method with keys:\n\n            - 'frequency': defines limit frequencies for balancing. The balanced\n            model will be accurate in the range [0,F], where F is the value of\n            this key. Note that F units must be consistent with the units specified\n            in the self.ScalingFacts dictionary.\n\n            - 'method_low': ['gauss','trapz'] specifies whether to use gauss\n            quadrature or trapezoidal rule in the low-frequency range [0,F]\n\n            - 'options_low': options to use for integration in the low-frequencies.\n            These depend on the integration scheme (See below).\n\n            - 'method_high': method to use for integration in the range [F,F_N],\n            where F_N is the Nyquist frequency. See 'method_low'.\n\n            - 'options_high': options to use for integration in the high-frequencies.\n\n            - 'check_stability': if True, the balanced model is truncated to\n            eliminate unstable modes - if any is found. Note that very accurate\n            balanced model can still be obtained, even if high order modes are\n            unstable. Note that this option is overridden if \"\"\n\n            - 'get_frequency_response': if True, the function also returns the\n            frequency response evaluated at the low-frequency range integration\n            points. If True, this option also allows to automatically tune the\n            balanced model.\n\n        Future options:\n\n            - 'truncation_tolerance': if 'get_frequency_response' is True, allows\n            to truncatethe balanced model so as to achieved a prescribed\n            tolerance in the low-frequwncy range.\n\n            - Ncpu: for parallel run\n\n\n        The following integration schemes are available:\n            - 'trapz': performs integration over equally spaced points using\n            trapezoidal rule. It accepts options dictionaries with keys:\n                - 'points': number of integration points to use (including\n                domain boundary)\n\n            - 'gauss' performs gauss-lobotto quadrature. The domain can be\n            partitioned in Npart sub-domain in which the gauss-lobotto quadrature\n            of order Ord can be applied. A total number of Npart*Ord points is\n            required. It accepts options dictionaries of the form:\n                - 'partitions': number of partitions\n                - 'order': quadrature order.\n\n        Example:\n        The following dictionary\n\n            DictBalFreq={   'frequency': 1.2,\n                            'method_low': 'trapz',\n                            'options_low': {'points': 12},\n                            'method_high': 'gauss',\n                            'options_high': {'partitions': 2, 'order': 8},\n                            'check_stability': True }\n\n        balances the state-space model self.SS in the frequency range [0, 1.2]\n        using\n            (a) 12 equally-spaced points integration of the Gramians in\n        the low-frequency range [0,1.2] and\n            (b) a 2 Gauss-Lobotto 8-th order quadratures of the controllability\n            Gramian in the high-frequency range.\n\n        A total number of 28 integration points will be required, which will\n        result into a balanced model with number of states\n            min{ 2*28* number_inputs, 2*28* number_outputs }\n        The model is finally truncated so as to retain only the first Ns stable\n        modes.\n        \"\"\"\n\n        ### check input dictionary\n        if 'frequency' not in DictBalFreq:\n            raise NameError('Solution dictionary must include the \"frequency\" key')\n\n        if 'method_low' not in DictBalFreq:\n            warnings.warn('Setting default options for low-frequency integration')\n            DictBalFreq['method_low'] = 'trapz'\n            DictBalFreq['options_low'] = {'points': 12}\n\n        if 'method_high' not in DictBalFreq:\n            warnings.warn('Setting default options for high-frequency integration')\n            DictBalFreq['method_high'] = 'gauss'\n            DictBalFreq['options_high'] = {'partitions': 2, 'order': 8}\n\n        if 'check_stability' not in DictBalFreq:\n            DictBalFreq['check_stability'] = True\n\n        if 'output_modes' not in DictBalFreq:\n            DictBalFreq['output_modes'] = True\n\n        if 'get_frequency_response' not in DictBalFreq:\n            DictBalFreq['get_frequency_response'] = False\n\n        ### get integration points and weights\n\n        # Nyquist frequency\n        kn = np.pi / self.SS.dt\n\n        Opt = DictBalFreq['options_low']\n        if DictBalFreq['method_low'] == 'trapz':\n            kv_low, wv_low = librom.get_trapz_weights(0., DictBalFreq['frequency'],\n                                                      Opt['points'], False)\n        elif DictBalFreq['method_low'] == 'gauss':\n            kv_low, wv_low = librom.get_gauss_weights(0., DictBalFreq['frequency'],\n                                                      Opt['partitions'], Opt['order'])\n        else:\n            raise NameError(\n                'Invalid value %s for key \"method_low\"' % DictBalFreq['method_low'])\n\n        Opt = DictBalFreq['options_high']\n        if DictBalFreq['method_high'] == 'trapz':\n            if Opt['points'] == 0:\n                warnings.warn('You have chosen no points in high frequency range!')\n                kv_high, wv_high = [], []\n            else:\n                kv_high, wv_high = librom.get_trapz_weights(DictBalFreq['frequency'], kn,\n                                                            Opt['points'], True)\n        elif DictBalFreq['method_high'] == 'gauss':\n            if Opt['order'] * Opt['partitions'] == 0:\n                warnings.warn('You have chosen no points in high frequency range!')\n                kv_high, wv_high = [], []\n            else:\n                kv_high, wv_high = librom.get_gauss_weights(DictBalFreq['frequency'], kn,\n                                                            Opt['partitions'], Opt['order'])\n        else:\n            raise NameError(\n                'Invalid value %s for key \"method_high\"' % DictBalFreq['method_high'])\n\n        ### get useful terms\n        K = self.K\n        K_star = self.K_star\n\n        Eye = np.eye(K)\n        Bup = np.hstack(self.SS.B[0])\n\n        P = self.SS.A[0][0]\n        Pw = self.SS.A[0][1]\n\n        # indices to manipulate obs solution\n        ii00 = range(0, self.K)\n        ii01 = range(self.K, self.K + self.K_star)\n        ii02 = range(self.K + self.K_star, 2 * self.K + self.K_star)\n        ii03 = range(2 * self.K + self.K_star, 3 * self.K + self.K_star)\n\n        # integration factors\n        if self.integr_order == 2:\n            b0, bm1, bp1 = -2., 0.5, 1.5\n        else:\n            b0, bp1 = -1., 1.\n            raise NameError('Method not implemented for integration order 1')\n\n        ### -------------------------------------------------- loop frequencies\n\n        ### merge vectors\n        Nk_low = len(kv_low)\n        kvdt = np.concatenate((kv_low, kv_high)) * self.SS.dt\n        wv = np.concatenate((wv_low, wv_high)) * self.SS.dt\n        zv = np.cos(kvdt) + 1.j * np.sin(kvdt)\n\n        Qobs = np.zeros((self.SS.states, self.SS.outputs), dtype=np.complex_)\n        Zc = np.zeros((self.SS.states, 2 * self.SS.inputs * len(kvdt)), )\n        Zo = np.zeros((self.SS.states, 2 * self.SS.outputs * Nk_low), )\n\n        if DictBalFreq['get_frequency_response']:\n            self.Yfreq = np.empty((self.SS.outputs, self.SS.inputs, Nk_low,), dtype=np.complex_)\n            self.kv = kv_low\n\n        for kk in range(len(kvdt)):\n\n            zval = zv[kk]\n            Intfact = wv[kk]  # integration factor\n\n            #  build terms that will be recycled\n            Cw_cpx = self.get_Cw_cpx(zval, settings=wake_prop_settings)\n            P_PwCw = P + Cw_cpx.T.dot(Pw.T).T\n            Kernel = np.linalg.inv(zval * Eye - P_PwCw)\n\n            ### ----- controllability\n            Ygamma = Intfact * np.dot(Kernel, Bup)\n            if self.remove_predictor:\n                Ygamma *= zval\n            Ygamma_star = Cw_cpx.dot(Ygamma)\n\n            if self.integr_order == 1:\n                dfact = (bp1 + bp0 / zval)\n                Qctrl = np.vstack([Ygamma, Ygamma_star, dfact * Ygamma])\n            elif self.integr_order == 2:\n                dfact = bp1 + b0 / zval + bm1 / zval ** 2\n                Qctrl = np.vstack(\n                    [Ygamma, Ygamma_star, dfact * Ygamma, (1. / zval) * Ygamma])\n            else:\n                raise NameError('Specify valid integration order')\n\n            kkvec = range(2 * kk * self.SS.inputs, 2 * (kk + 1) * self.SS.inputs)\n            Zc[:, kkvec[:self.SS.inputs]] = Qctrl.real  # *Intfact\n            Zc[:, kkvec[self.SS.inputs:]] = Qctrl.imag  # *Intfact\n\n            ### ----- frequency response\n            if DictBalFreq['get_frequency_response'] and kk < Nk_low:\n                self.Yfreq[:, :, kk] = (1. / Intfact) * \\\n                                       (np.dot(self.SS.C[0][0], Ygamma) + \\\n                                        np.dot(self.SS.C[0][1], Ygamma_star) + \\\n                                        dfact * np.dot(self.SS.C[0][2], Ygamma)) + \\\n                                       np.hstack(self.SS.D[0])\n\n            ### ----- frequency response\n            if DictBalFreq['get_frequency_response'] and kk < Nk_low:\n                self.Yfreq[:, :, kk] = (1. / Intfact) * \\\n                                       (np.dot(self.SS.C[0][0], Ygamma) + \\\n                                        np.dot(self.SS.C[0][1], Ygamma_star) + \\\n                                        dfact * np.dot(self.SS.C[0][2], Ygamma)) + \\\n                                       np.hstack(self.SS.D[0])\n\n            ### ----- observability\n            # solve (1./zval*I - A.T)^{-1} C^T (in low-frequency only)\n            if kk >= Nk_low:\n                continue\n\n            zinv = 1. / zval\n            Qobs[ii02, :] = zinv * self.SS.C[0][2].T\n            if self.integr_order == 1:\n                raise NameError('Obs Gramian Integr not implemented')\n            elif self.integr_order == 2:\n                Qobs[ii03, :] = (bm1 * zinv) * Qobs[ii02, :]\n\n            # solve bound circulation\n            rhs = Cw_cpx.T.dot(self.SS.C[0][1].T) + self.SS.C[0][0].T + \\\n                  Qobs[ii02, :] * (b0 + zinv * bm1) + \\\n                  np.dot(P_PwCw.T, bp1 * Qobs[ii02, :])\n            Qobs[ii00, :] = np.dot(Kernel.T, rhs)\n\n            # solve wake\n            Eye_star = libsp.csc_matrix(\n                (zval * np.ones((K_star,)), (range(K_star), range(K_star))),\n                shape=(K_star, K_star), dtype=np.complex_)\n            Qobs[ii01, :] = libsp.solve(\n                Eye_star - self.SS.A[1][1].T,\n                self.SS.C[0][1].T + np.dot(Pw.T, Qobs[ii00, :] + bp1 * Qobs[ii02, :]))\n\n            kkvec = range(2 * kk * self.SS.outputs, 2 * (kk + 1) * self.SS.outputs)\n            Zo[:, kkvec[:self.SS.outputs]] = Intfact * Qobs.real\n            Zo[:, kkvec[self.SS.outputs:]] = Intfact * Qobs.imag\n\n        # delete full matrices\n        Kernel = None\n        Qctrl = None\n        Qobs = None\n\n        # LRSQM (optimised)\n        U, hsv, Vh = scalg.svd(np.dot(Zo.T, Zc), full_matrices=False)\n        sinv = hsv ** (-0.5)\n        T = np.dot(Zc, Vh.T * sinv)\n        Ti = np.dot((U * sinv).T, Zo.T)\n\n        ### build frequency balanced model\n        Ab, Bb, Cb = self.SS.project(Ti, T, by_arrays=True, overwrite=False)\n\n        if self.remove_predictor:\n            Ab, Bb, Cb, Db = \\\n                libss.SSconv(np.block(Ab), None, np.block(Bb),\n                             np.block(Cb), np.block(self.SS.D), Bm1=None)\n            SSb = libss.StateSpace(Ab, Bb, Cb, Db, dt=self.dt)\n        else:\n            SSb = libss.StateSpace(np.block(Ab), np.block(Bb),\n                                   np.block(Cb), np.block(self.SS.D), dt=self.SS.dt)\n\n        ### Eliminate unstable modes - if any:\n        if DictBalFreq['check_stability']:\n            for nn in range(1, len(hsv) + 1):\n                eigs_trunc = scalg.eigvals(SSb.A[:nn, :nn])\n                eigs_trunc_max = np.max(np.abs(eigs_trunc))\n                if eigs_trunc_max > 1. - 1e-16:\n                    SSb.truncate(nn - 1)\n                    hsv = hsv[:nn - 1]\n                    T = T[:, :nn - 1]\n                    Ti = Ti[:nn - 1, :]\n                    break\n\n        self.SSb = SSb\n        self.hsv = hsv\n        if DictBalFreq['output_modes']:\n            self.T = T\n            self.Ti = Ti\n            self.Zc = Zc\n            self.Zo = Zo\n            self.svd_res = {'U': U, 'hsv': hsv, 'Vh': Vh}\n\n    def solve_step(self, x_n, u_n, u_n1=None, transform_state=False):\n        r\"\"\"\n        Solve step.\n\n        If the predictor term has not been removed (``remove_predictor = False``) then the system is solved as:\n\n            .. math::\n                \\mathbf{x}^{n+1} &= \\mathbf{A\\,x}^n + \\mathbf{B\\,u}^n \\\\\n                \\mathbf{y}^{n+1} &= \\mathbf{C\\,x}^{n+1} + \\mathbf{D\\,u}^n\n\n        Else, if ``remove_predictor = True``, the state is modified as\n\n            ..  math:: \\mathbf{h}^n = \\mathbf{x}^n - \\mathbf{B\\,u}^n\n\n        And the system solved by:\n\n            .. math::\n                \\mathbf{h}^{n+1} &= \\mathbf{A\\,h}^n + \\mathbf{B_{mod}\\,u}^{n} \\\\\n                \\mathbf{y}^{n+1} &= \\mathbf{C\\,h}^{n+1} + \\mathbf{D_{mod}\\,u}^{n+1}\n\n        Finally, the original state is recovered using the reverse transformation:\n\n            .. math:: \\mathbf{x}^{n+1} = \\mathbf{h}^{n+1} + \\mathbf{B\\,u}^{n+1}\n\n        where the modifications to the :math:`\\mathbf{B}_{mod}` and :math:`\\mathbf{D}_{mod}` are detailed in\n        :func:`Dynamic.assemble_ss`.\n\n        Notes:\n            Although the original equations include the term :math:`\\mathbf{u}_{n+1}`, it is a reasonable approximation\n            to take :math:`\\mathbf{u}_{n+1}\\approx\\mathbf{u}_n` given a sufficiently small time step, hence if the input\n            at time ``n+1`` is not parsed, it is estimated from :math:`u^n`.\n\n        Args:\n            x_n (np.array): State vector at the current time step :math:`\\mathbf{x}^n`\n            u_n (np.array): Input vector at time step :math:`\\mathbf{u}^n`\n            u_n1 (np.array): Input vector at time step :math:`\\mathbf{u}^{n+1}`\n            transform_state (bool): When the predictor term is removed, if true it will transform the state vector. If\n                false it will be assumed that the state vector that is parsed is already transformed i.e. it is\n                :math:`\\mathbf{h}`.\n\n        Returns:\n            Tuple: Updated state and output vector packed in a tuple :math:`(\\mathbf{x}^{n+1},\\,\\mathbf{y}^{n+1})`\n\n        Notes:\n            Because in BlockDynamics the predictor is never removed when building\n            'self.SS', the implementation change with respect to Dynamic. However,\n            formulas are consistent.\n        \"\"\"\n\n        if u_n1 is None:\n            u_n1 = u_n.copy()\n\n        if self.remove_predictor and not hasattr(self, 'CBplusD'):\n            self.CBplusD = libsp.block_sum(libsp.block_dot(self.SS.C, self.SS.B), self.SS.D)\n\n        ### transform input in block matrices\n        X_n = []\n        II0 = 0\n        for ii in range(self.SS.blocks_x):\n            IIend = II0 + self.SS.S_x[ii]\n            X_n.append([x_n[II0:IIend]])\n            II0 = IIend\n\n        U_n1 = []\n        II0 = 0\n        for ii in range(self.SS.blocks_u):\n            IIend = II0 + self.SS.S_u[ii]\n            U_n1.append([u_n1[II0:IIend]])\n            II0 = IIend\n\n        if u_n is not None:\n            U_n = []\n            for ii in range(self.SS.blocks_u):\n                IIend = II0 + self.SS.S_u[ii]\n                U_n.append([u_n[II0:IIend]])\n                II0 = IIend\n\n        if self.remove_predictor:\n\n            # Transform state vector\n            # TODO: Agree on a way to do this. Either always transform here or transform prior to using the method.\n            if transform_state:\n                H_n1 = libsp.block_dot(self.SS.A, X_n)\n            else:\n                H_n = X_n\n                H_n1 = libsp.block_dot(self.SS.A,\n                                       libsp.block_sum(H_n, libsp.block_dot(self.SS.B, U_n)))\n\n            Y_n1 = libsp.block_sum(libsp.block_dot(self.SS.C, H_n1),\n                                   libsp.block_dot(self.CBplusD, U_n1))\n\n            Y_n1 = libsp.block_sum(libsp.block_dot(self.SS.C, H_n1),\n                                   libsp.block_dot(self.CBplusD, U_n1))\n\n            # Recover state vector\n            if transform_state:\n                X_n1 = libsp.block_sum(H_n1, libsp.block_dot(self.SS.B, U_n1))\n            else:\n                X_n1 = H_n1\n\n        else:\n            X_n1 = libsp.block_sum(libsp.block_dot(self.SS.A, X_n),\n                                   libsp.block_dot(self.SS.B, U_n1))\n            Y_n1 = libsp.block_sum(libsp.block_dot(self.SS.C, X_n1),\n                                   libsp.block_dot(self.SS.D, U_n1))\n\n        x_n1 = np.concatenate([X_n1[ii][0] for ii in range(self.SS.blocks_x)])\n\n        return x_n1, np.block(Y_n1).reshape(-1)\n\n\n################################################################################\n\n################################################################################\n\n\nclass Frequency(Static):\n    \"\"\"\n    Class for frequency description of linearised UVLM solution. Linearisation\n    around steady-state are only supported. The class is built upon Static, and\n    inherits all the methods contained there.\n\n    The class supports most of the features of Dynamics but has lower memory\n    requirements of Dynamic, and should be preferred for:\n\n        a. producing  memory and computationally cheap frequency responses\n        b. building reduced order models using RFA/polynomial fitting\n\n    Usage:\n    Upon initialisation, the assemble method produces all the matrices required\n    for the frequency description of the UVLM (see assemble for details). A\n    state-space model is not allocated but:\n\n        - Time stepping is also possible (but not implemented yet) as all the\n          fundamental terms describing the UVLM equations are still produced\n          (except the propagation of wake circulation)\n        - ad-hoc methods for scaling, unscaling and frequency response are\n          provided.\n\n    Input:\n\n        - tsdata: aero timestep data from SHARPy solution\n        - dt: time-step\n        - integr_order=0,1,2: integration order for UVLM unsteady aerodynamic\n          force. If 0, the derivative is computed exactly.\n        - RemovePredictor=True: This flag is only used for the frequency response\n          calculation. The frequency description, in fact, naturally arises\n          without the predictor, but lags can be included during the frequency\n          response calculation. See Dynamic documentation for more details.\n        - ScalingDict=None: disctionary containing fundamental reference units\n\n            .. code-block:: python\n\n                {'length':  reference_length,\n                 'speed':   reference_speed,\n                 'density': reference density}\n\n          used to derive scaling quantities for the state-space model variables.\n          The scaling factors are stores in ``self.ScalingFact.``\n\n          Note that while time, circulation, angular speeds) are scaled\n          accordingly, FORCES ARE NOT. These scale by qinf*b**2, where b is the\n          reference length and qinf is the dinamic pressure.\n        - UseSparse=False: builds the A and B matrices in sparse form. C and D\n          are dense, hence the sparce format is not used.\n\n    Methods:\n        - nondimss: normalises matrices produced by the assemble method  based\n          on the scaling factors in self.ScalingFact.\n        - dimss: inverse of nondimss.\n        - assemble: builds matrices for UVLM minimal size description.\n        - assemble_profiling: generate profiling report of the assembly and\n          saves it into self.prof_out. To read the report:\n\n            .. code-block:: python\n\n                import pstats\n                p=pstats.Stats(self.prof_out)\n\n        - freqresp: fast algorithm for frequency response.\n\n    Methods to implement:\n\n        - solve_steady: runs freqresp at 0 frequency.\n        - solve_step: solves one time-step\n    \"\"\"\n\n    def __init__(self, tsdata, dt, integr_order=2,\n                 RemovePredictor=True, ScalingDict=None, UseSparse=True):\n\n        super().__init__(tsdata)\n\n        self.dt = dt\n        self.integr_order = integr_order\n\n        assert self.integr_order in [1, 2, 0], 'integr_order must be in [0,1,2]'\n\n        self.inputs = 9 * self.Kzeta\n        self.outputs = 3 * self.Kzeta\n\n        self.remove_predictor = RemovePredictor\n        self.use_sparse = UseSparse\n\n        # create scaling quantities\n        if ScalingDict is None:\n            ScalingFacts = {'length': 1.,\n                            'speed': 1.,\n                            'density': 1.}\n        else:\n            ScalingFacts = ScalingDict\n\n        for key in ScalingFacts:\n            ScalingFacts[key] = np.float(ScalingFacts[key])\n\n        ScalingFacts['time'] = ScalingFacts['length'] / ScalingFacts['speed']\n        ScalingFacts['circulation'] = ScalingFacts['speed'] * ScalingFacts['length']\n        ScalingFacts['dyn_pressure'] = 0.5 * ScalingFacts['density'] * ScalingFacts['speed'] ** 2\n        ScalingFacts['force'] = ScalingFacts['dyn_pressure'] * ScalingFacts['length'] ** 2\n        self.ScalingFacts = ScalingFacts\n\n        ### collect statistics\n        self.cpu_summary = {'dim': 0.,\n                            'nondim': 0.,\n                            'assemble': 0.}\n\n    def nondimss(self):\n        \"\"\"\n        Scale state-space model based of self.ScalingFacts\n        \"\"\"\n\n        t0 = time.time()\n        Kzeta = self.Kzeta\n\n        self.Bss[:, :3 * Kzeta] *= (self.ScalingFacts['length'] / self.ScalingFacts['circulation'])\n        self.Bss[:, 3 * Kzeta:] *= (self.ScalingFacts['speed'] / self.ScalingFacts['circulation'])\n\n        self.Css *= (self.ScalingFacts['circulation'] / self.ScalingFacts['force'])\n\n        self.Dss[:, :3 * Kzeta] *= (self.ScalingFacts['length'] / self.ScalingFacts['force'])\n        self.Dss[:, 3 * Kzeta:] *= (self.ScalingFacts['speed'] / self.ScalingFacts['force'])\n\n        self.dt = self.dt / self.ScalingFacts['time']\n\n        self.cpu_summary['nondim'] = time.time() - t0\n\n    def dimss(self):\n\n        t0 = time.time()\n        Kzeta = self.Kzeta\n\n        self.Bss[:, :3 * Kzeta] /= (self.ScalingFacts['length'] / self.ScalingFacts['circulation'])\n        self.Bss[:, 3 * Kzeta:] /= (self.ScalingFacts['speed'] / self.ScalingFacts['circulation'])\n\n        self.Css /= (self.ScalingFacts['circulation'] / self.ScalingFacts['force'])\n\n        self.Dss[:, :3 * Kzeta] /= (self.ScalingFacts['length'] / self.ScalingFacts['force'])\n        self.Dss[:, 3 * Kzeta:] /= (self.ScalingFacts['speed'] / self.ScalingFacts['force'])\n\n        self.dt = self.dt * self.ScalingFacts['time']\n\n        self.cpu_summary['dim'] = time.time() - t0\n\n    def assemble(self):\n        r\"\"\"\n        Assembles matrices for minumal size frequency description of UVLM. The\n        state equation is represented in the form:\n\n            .. math:: \\mathbf{A_0} \\mathbf{\\Gamma} +\n                            \\mathbf{A_{w_0}} \\mathbf{\\Gamma_w} =\n                                                \\mathbf{B_0} \\mathbf{u}\n\n        While the output equation is as per the Dynamic class, namely:\n\n            .. math:: \\mathbf{y} =\n                            \\mathbf{C} \\mathbf{x} + \\mathbf{D} \\mathbf{u}\n\n        where\n\n            .. math:: \\mathbf{x} =\n                     [\\mathbf{\\Gamma}; \\mathbf{\\Gamma_w}; \\Delta\\mathbf(\\Gamma)]\n\n        The propagation of wake circulation matrices are not produced as these\n        are not required for frequency response analysis.\n        \"\"\"\n\n        cout.cout_wrap('\\tAssembly of frequency description of UVLM started...', 1)\n        t0 = time.time()\n        MS = self.MS\n        K, K_star = self.K, self.K_star\n        Kzeta = self.Kzeta\n\n        Nu = self.inputs\n        Ny = self.outputs\n\n        # ----------------------------------------------------------- state eq.\n\n        # Aero influence coeffs\n        List_AICs, List_AICs_star = ass.AICs(MS.Surfs, MS.Surfs_star,\n                                             target='collocation', Project=True)\n        A0 = np.block(List_AICs)\n        A0W = np.block(List_AICs_star)\n        List_AICs, List_AICs_star = None, None\n\n        # zeta derivs\n        List_nc_dqcdzeta = ass.nc_dqcdzeta(MS.Surfs, MS.Surfs_star, Merge=True)\n        List_uc_dncdzeta = ass.uc_dncdzeta(MS.Surfs)\n        List_nc_domegazetadzeta_vert = ass.nc_domegazetadzeta(MS.Surfs, MS.Surfs_star)\n        for ss in range(MS.n_surf):\n            List_nc_dqcdzeta[ss][ss] += \\\n                (List_uc_dncdzeta[ss] + List_nc_domegazetadzeta_vert[ss])\n        Ducdzeta = np.block(List_nc_dqcdzeta)  # dense matrix\n        List_nc_dqcdzeta = None\n        List_uc_dncdzeta = None\n        List_nc_domegazetadzeta_vert = None\n\n        # ext velocity derivs (Wnv0)\n        List_Wnv = []\n        for ss in range(MS.n_surf):\n            List_Wnv.append(\n                interp.get_Wnv_vector(MS.Surfs[ss],\n                                      MS.Surfs[ss].aM, MS.Surfs[ss].aN))\n        Wnv0 = scalg.block_diag(*List_Wnv)\n        List_Wnv = None\n\n        ### B matrix assembly\n        # this could be also sparse...\n        Bss = np.block([-Ducdzeta, Wnv0, -Wnv0])\n\n        # ---------------------------------------------------------- output eq.\n\n        ### state terms (C matrix)\n\n        # gamma (induced velocity contrib.)\n        List_dfqsdvind_gamma, List_dfqsdvind_gamma_star = \\\n            ass.dfqsdvind_gamma(MS.Surfs, MS.Surfs_star)\n\n        # gamma (at constant relative velocity)\n        List_dfqsdgamma_vrel0, List_dfqsdgamma_star_vrel0 = \\\n            ass.dfqsdgamma_vrel0(MS.Surfs, MS.Surfs_star)\n        for ss in range(MS.n_surf):\n            List_dfqsdvind_gamma[ss][ss] += List_dfqsdgamma_vrel0[ss]\n            List_dfqsdvind_gamma_star[ss][ss] += List_dfqsdgamma_star_vrel0[ss]\n        Dfqsdgamma = np.block(List_dfqsdvind_gamma)\n        Dfqsdgamma_star = np.block(List_dfqsdvind_gamma_star)\n        List_dfqsdvind_gamma, List_dfqsdvind_gamma_star = None, None\n        List_dfqsdgamma_vrel0, List_dfqsdgamma_star_vrel0 = None, None\n\n        # gamma_dot\n        Dfunstdgamma_dot = scalg.block_diag(*ass.dfunstdgamma_dot(MS.Surfs))\n\n        # C matrix assembly\n        Css = np.zeros((Ny, 2 * K + K_star))\n        Css[:, :K] = Dfqsdgamma\n        Css[:, K:K + K_star] = Dfqsdgamma_star\n        # added mass\n        Css[:, K + K_star:2 * K + K_star] = Dfunstdgamma_dot / self.dt\n\n        ### input terms (D matrix)\n        Dss = np.zeros((Ny, Nu))\n\n        # zeta (at constant relative velocity)\n        Dss[:, :3 * Kzeta] = scalg.block_diag(\n            *ass.dfqsdzeta_vrel0(MS.Surfs, MS.Surfs_star))\n        # zeta (induced velocity contrib)\n        List_coll, List_vert = ass.dfqsdvind_zeta(MS.Surfs, MS.Surfs_star)\n        for ss in range(MS.n_surf):\n            List_vert[ss][ss] += List_coll[ss]\n        Dss[:, :3 * Kzeta] += np.block(List_vert)\n        del List_vert, List_coll\n\n        # input velocities (external)\n        Dss[:, 6 * Kzeta:9 * Kzeta] = scalg.block_diag(\n            *ass.dfqsduinput(MS.Surfs, MS.Surfs_star))\n\n        # input velocities (body movement)\n        Dss[:, 3 * Kzeta:6 * Kzeta] = -Dss[:, 6 * Kzeta:9 * Kzeta]\n\n        ### store matrices\n        self.A0 = A0\n        self.A0W = A0W\n        self.Bss = Bss\n        self.Css = Css\n        self.Dss = Dss\n        self.inputs = 9 * Kzeta\n        self.outputs = 3 * Kzeta\n\n        self.cpu_summary['assemble'] = time.time() - t0\n        cout.cout_wrap('\\t\\t\\t...done in %.2f sec' % self.cpu_summary['assemble'], 1)\n\n    def addGain(self, K, where):\n\n        assert where in ['in', 'out'], \\\n            'Specify whether gains are added to input or output'\n\n        if where == 'in':\n            self.Bss = libsp.dot(self.Bss, K)\n            self.Dss = libsp.dot(self.Dss, K)\n            self.inputs = K.shape[1]\n\n        if where == 'out':\n            self.Css = libsp.dot(K, self.Css)\n            self.Dss = libsp.dot(K, self.Dss)\n            self.outputs = K.shape[0]\n\n        if where == 'out':\n            self.Css = libsp.dot(K, self.Css)\n            self.Dss = libsp.dot(K, self.Dss)\n            self.outputs = K.shape[0]\n\n    def freqresp(self, kv, wake_prop_settings=None):\n        \"\"\"\n        Ad-hoc method for fast UVLM frequency response over the frequencies\n        kv. The method, only requires inversion of a K x K matrix at each\n        frequency as the equation for propagation of wake circulation are solved\n        exactly.\n        \"\"\"\n\n        MS = self.MS\n        K = self.K\n        K_star = self.K_star\n\n        Nk = len(kv)\n        kvdt = kv * self.dt\n        zv = np.cos(kvdt) + 1.j * np.sin(kvdt)\n        Yfreq = np.empty((self.outputs, self.inputs, Nk,), dtype=np.complex_)\n\n        ### loop frequencies\n        for kk in range(Nk):\n\n            ### build Cw complex\n            Cw_cpx = self.get_Cw_cpx(zv[kk], settings=wake_prop_settings)\n\n            # get bound state freq response\n            if self.remove_predictor:\n                Ygamma = np.linalg.solve(\n                    self.A0 + libsp.dot(\n                        self.A0W, Cw_cpx, type_out=libsp.csc_matrix), self.Bss)\n            else:\n                Ygamma = zv[kk] ** (-1) * \\\n                         np.linalg.solve(\n                             self.A0 + libsp.dot(\n                                 self.A0W, Cw_cpx, type_out=libsp.csc_matrix), self.Bss)\n            Ygamma_star = Cw_cpx.dot(Ygamma)\n\n            # determine factor for delta of bound circulation\n            if self.integr_order == 0:\n                dfact = (1.j * kv[kk]) * self.dt\n            elif self.integr_order == 1:\n                dfact = (1. - 1. / zv[kk])\n            elif self.integr_order == 2:\n                dfact = .5 * (3. - 4. / zv[kk] + 1. / zv[kk] ** 2)\n            else:\n                raise NameError('Specify valid integration order')\n\n            Yfreq[:, :, kk] = np.dot(self.Css[:, :K], Ygamma) + \\\n                              np.dot(self.Css[:, K:K + K_star], Ygamma_star) + \\\n                              np.dot(self.Css[:, -K:], dfact * Ygamma) + \\\n                              self.Dss\n\n        return Yfreq\n\n    def get_Cw_cpx(self, zval, settings=None):\n        r\"\"\"\n        Produces a sparse matrix\n\n            .. math:: \\bar{\\mathbf{C}}(z)\n\n        where\n\n            .. math:: z = e^{k \\Delta t}\n\n        such that the wake circulation frequency response at :math:`z` is\n\n            .. math:: \\bar{\\goldsymbol{\\Gamma}}_w = \\bar{\\mathbf{C}}(z)  \\bar{\\boldsymbol{\\Gamma}}\n\n        \"\"\"\n        return get_Cw_cpx(self.MS, self.K, self.K_star, zval, settings=settings)\n\n\n    def assemble_profiling(self):\n        \"\"\"\n        Generate profiling report for assembly and save it in self.prof_out.\n\n        To read the report:\n            import pstats\n            p=pstats.Stats(self.prof_out)\n        \"\"\"\n\n        import cProfile\n        cProfile.runctx('self.assemble()', globals(), locals(), filename=self.prof_out)\n\n\ndef get_Cw_cpx(MS, K, K_star, zval, settings=None):\n    r\"\"\"\n    Produces a sparse matrix\n\n        .. math:: \\bar{\\mathbf{C}}(z)\n\n    where\n\n        .. math:: z = e^{k \\Delta t}\n\n    such that the wake circulation frequency response at :math:`z` is\n\n        .. math:: \\bar{\\boldsymbol{\\Gamma}}_w = \\bar{\\mathbf{C}}(z)  \\bar{\\mathbf{\\Gamma}}\n\n    \"\"\"\n\n    try:\n        cfl1 = settings['cfl1']\n    except (KeyError, TypeError):\n        # In case the key does not exist or settings=None\n        cfl1 = True\n    cout.cout_wrap(\"Computing wake propagation solution matrix if frequency domain with CFL1=%s\" % cfl1, 1)\n    # print(\"Computing wake propagation solution matrix if frequency domain with CFL1=%s\" % cfl1)\n\n    if cfl1:\n        jjvec = []\n        iivec = []\n        valvec = []\n\n        K0tot, K0totstar = 0, 0\n        for ss in range(MS.n_surf):\n\n            M, N = MS.dimensions[ss]\n            Mstar, N = MS.dimensions_star[ss]\n\n            for mm in range(Mstar):\n                jjvec += range(K0tot + N * (M - 1), K0tot + N * M)\n                iivec += range(K0totstar + mm * N, K0totstar + (mm + 1) * N)\n                valvec += N * [zval ** (-mm - 1)]\n            K0tot += MS.KK[ss]\n            K0totstar += MS.KK_star[ss]\n    else:\n        # sum_m_n = 0\n        sum_mstar_n = 0\n        for ss in range(MS.n_surf):\n            # M, N = MS.dimensions[ss]\n            Mstar, N = MS.dimensions_star[ss]\n            # sum_m_n += M*N\n            sum_mstar_n += Mstar*N\n\n            try:\n                MS.Surfs_star[ss].zetac\n            except AttributeError:\n                MS.Surfs_star[ss].zetac.generate_collocations()\n        jjvec = [None]*sum_mstar_n\n        iivec = [None]*sum_mstar_n\n        valvec = [None]*sum_mstar_n\n\n        K0tot, K0totstar = 0, 0\n        ipoint = 0\n        for ss in range(MS.n_surf):\n            M, N = MS.dimensions[ss]\n            Mstar, N = MS.dimensions_star[ss]\n            Surf = MS.Surfs[ss]\n            Surf_star = MS.Surfs_star[ss]\n            for iin in range(N):\n                for mm in range(Mstar):\n                    # Value location in the sparse array\n                    ipoint = K0totstar + mm * N + iin\n                    # Compute CFL\n                    if mm == 0:\n                        conv_vec = Surf_star.zetac[:, 0, iin] - Surf.zetac[:, -1, iin]\n                        dist = np.linalg.norm(conv_vec)\n                        conv_dir_te = conv_vec/dist\n                        vel = Surf.u_input_coll[:, -1, iin]\n                        vel_value = np.dot(vel, conv_dir_te)\n                        cfl = settings['dt']*vel_value/dist\n                    else:\n                        conv_vec = Surf_star.zetac[:, mm, iin] - Surf_star.zetac[:, mm - 1, iin]\n                        dist = np.linalg.norm(conv_vec)\n                        conv_dir = conv_vec/dist\n                        vel = Surf.u_input_coll[:, -1, iin]\n                        vel_value = np.dot(vel, conv_dir_te)\n                        cfl = settings['dt']*vel_value/dist\n                    # Compute coefficient\n                    coef = get_Cw_cpx_coef_cfl_n1(cfl, zval)\n                    # Assign values\n                    jjvec[ipoint] = K0tot + N * (M - 1) + iin\n                    iivec[ipoint] = K0totstar + mm * N + iin\n                    if mm == 0:\n                        # First row\n                        valvec[ipoint] = coef\n                    else:\n                        ipoint_prev = K0totstar + (mm - 1) * N + iin\n                        valvec[ipoint] = coef*valvec[ipoint_prev]\n            K0tot += MS.KK[ss]\n            K0totstar += MS.KK_star[ss]\n\n    return libsp.csc_matrix((valvec, (iivec, jjvec)), shape=(K_star, K), dtype=np.complex_)\n\n\ndef get_Cw_cpx_coef_cfl_n1(cfl, zval):\n    # Convergence loop end criteria\n    tol = 1e-12\n    rmax = 100\n\n    # Initial values\n    coef = 0.\n    r = 0\n\n    # Loop\n    error = 2*tol\n    while ((error > tol) and (r < rmax)):\n        delta_coef = ((1 - cfl)**r)*cfl*(zval**(-r-1))\n        coef += delta_coef\n        error = np.abs(delta_coef/coef)\n        r += 1\n    coef /= (1 - (1-cfl)**rmax*(zval**(-1)))\n    if (error > tol):\n        cout.cout_wrap((\"WARNING computation of Cw_cpx did not reach desired accuracy. r: %d. error: %d\" % (r, error)), 2)\n\n    return coef\n\n################################################################################\n\n\nif __name__ == '__main__':\n\n    import unittest\n    from sharpy.utils.sharpydir import SharpyDir\n    import sharpy.utils.h5utils as h5\n\n\n    class Test_linuvlm_Sta_vs_Dyn(unittest.TestCase):\n        \"\"\" Test methods into this module \"\"\"\n\n        def setUp(self):\n            fname = SharpyDir + '/sharpy/linear/test/h5input/' + \\\n                    'goland_mod_Nsurf02_M003_N004_a040.aero_state.h5'\n            haero = h5.readh5(fname)\n            tsdata = haero.ts00000\n\n            # Static solver\n            Sta = Static(tsdata)\n            Sta.assemble_profiling()\n            Sta.assemble()\n            Sta.get_total_forces_gain()\n\n            # random input\n            Sta.u_ext = 1.0 + 0.30 * np.random.rand(3 * Sta.Kzeta)\n            Sta.zeta_dot = 0.2 + 0.10 * np.random.rand(3 * Sta.Kzeta)\n            Sta.zeta = 0.05 * (np.random.rand(3 * Sta.Kzeta) - 1.0)\n\n            Sta.solve()\n            Sta.reshape()\n            Sta.total_forces()\n            self.Sta = Sta\n            self.tsdata = tsdata\n\n        def test_force_gains(self):\n            \"\"\"\n            to do: add check on moments gain\n            \"\"\"\n            Sta = self.Sta\n            Ftot02 = libsp.dot(Sta.Kftot, Sta.fqs)\n            assert np.max(np.abs(Ftot02 - Sta.Ftot)) < 1e-10, 'Total force gain matrix wrong!'\n\n        def test_Dyn_steady_state(self):\n            \"\"\"\n            Test steady state predicted by Dynamic and Static classes are the same.\n            \"\"\"\n\n            Sta = self.Sta\n            Order = [2, 1]\n            RemPred = [True, False]\n            UseSparse = [True, False]\n\n            for order in Order:\n                for rem_pred in RemPred:\n                    for use_sparse in UseSparse:\n\n                        # Dynamic solver\n                        Dyn = Dynamic(self.tsdata,\n                                      dt=0.05,\n                                      integr_order=order,\n                                      RemovePredictor=rem_pred,\n                                      UseSparse=use_sparse)\n                        Dyn.assemble_ss()\n\n                        # steady state solution\n                        usta = np.concatenate((Sta.zeta, Sta.zeta_dot, Sta.u_ext))\n                        xsta, ysta = Dyn.solve_steady(usta, method='direct')\n\n                        if use_sparse is False and rem_pred is False:\n                            xmin, ymin = Dyn.solve_steady(usta, method='minsize')\n                            xrec, yrec = Dyn.solve_steady(usta, method='recursive')\n                            xsub, ysub = Dyn.solve_steady(usta, method='subsystem')\n\n                            # assert all solutions are matching\n                            assert max(np.linalg.norm(xsta - xmin), np.linalg.norm(ysta - ymin)), \\\n                                'Direct and min. size solutions not matching!'\n                            assert max(np.linalg.norm(xsta - xrec), np.linalg.norm(ysta - yrec)), \\\n                                'Direct and recursive solutions not matching!'\n                            assert max(np.linalg.norm(xsta - xsub), np.linalg.norm(ysta - ysub)), \\\n                                'Direct and sub-system solutions not matching!'\n\n                        # compare against Static solver solution\n                        er = np.max(np.abs(ysta - Sta.fqs) / np.linalg.norm(Sta.Ftot))\n                        print('Error force distribution: %.3e' % er)\n                        assert er < 1e-12, \\\n                            'Steady-state force not matching (error: %.2e)!' % er\n\n                        if rem_pred is False:  # compare state\n\n                            er = np.max(np.abs(xsta[:Dyn.K] - Sta.gamma))\n                            print('Error bound circulation: %.3e' % er)\n                            assert er < 1e-13, \\\n                                'Steady-state gamma not matching (error: %.2e)!' % er\n\n                            gammaw_ref = np.zeros((Dyn.K_star,))\n                            kk = 0\n                            for ss in range(Dyn.MS.n_surf):\n                                Mstar = Dyn.MS.MM_star[ss]\n                                Nstar = Dyn.MS.NN_star[ss]\n                                for mm in range(Mstar):\n                                    gammaw_ref[kk:kk + Nstar] = Sta.Gamma[ss][-1, :]\n                                    kk += Nstar\n\n                            er = np.max(np.abs(xsta[Dyn.K:Dyn.K + Dyn.K_star] - gammaw_ref))\n                            print('Error wake circulation: %.3e' % er)\n                            assert er < 1e-13, 'Steady-state gamma_star not matching!'\n\n                            er = np.max(np.abs(xsta[Dyn.K + Dyn.K_star:2 * Dyn.K + Dyn.K_star]))\n                            print('Error bound derivative: %.3e' % er)\n                            assert er < 1e-13, 'Non-zero derivative of circulation at steady state!'\n\n                            if Dyn.integr_order == 2:\n                                er = np.max(np.abs(xsta[:Dyn.K] - xsta[-Dyn.K:]))\n                                print('Error bound circulation previous vs current time-step: %.3e' % er)\n                                assert er < 1e-13, \\\n                                    'Circulation at previous and current time-step not matching'\n\n                        ### Verify gains\n                        Dyn.get_total_forces_gain()\n                        Dyn.get_sect_forces_gain()\n\n                        # sectional forces - algorithm for surfaces with equal M\n                        n_surf = Dyn.MS.n_surf\n                        M, N = Dyn.MS.MM[0], Dyn.MS.NN[0]\n                        fnodes = ysta.reshape((n_surf, 3, M + 1, N + 1))\n                        Fsect_ref = np.zeros((n_surf, 3, N + 1))\n                        Msect_ref = np.zeros((n_surf, 3, N + 1))\n\n                        for ss in range(n_surf):\n                            for nn in range(N + 1):\n                                for mm in range(M + 1):\n                                    Fsect_ref[ss, :, nn] += fnodes[ss, :, mm, nn]\n                                    arm = Dyn.MS.Surfs[ss].zeta[:, mm, nn] - Dyn.MS.Surfs[ss].zeta[:, M // 2, nn]\n                                    Msect_ref[ss, :, nn] += np.cross(arm, fnodes[ss, :, mm, nn])\n\n                        Fsect = np.dot(Dyn.Kfsec, ysta).reshape((n_surf, 3, N + 1))\n                        assert np.max(np.abs(Fsect - Fsect_ref)) < 1e-12, \\\n                            'Error in gains for cross-sectional forces'\n                        Msect = np.dot(Dyn.Kmsec, ysta).reshape((n_surf, 3, N + 1))\n                        assert np.max(np.abs(Msect - Msect_ref)) < 1e-12, \\\n                            'Error in gains for cross-sectional forces'\n\n                        # total forces\n                        Ftot_ref = np.zeros((3,))\n                        for cc in range(3):\n                            Ftot_ref[cc] = np.sum(Fsect_ref[:, cc, :])\n                        Ftot = np.dot(Dyn.Kftot, ysta)\n                        assert np.max(np.abs(Ftot - Ftot_ref)) < 1e-11, \\\n                            'Error in gains for total forces'\n\n        def test_nondimss_dimss(self):\n            \"\"\"\n            Test scaling and unscaling of UVLM\n            \"\"\"\n\n            Sta = self.Sta\n\n            # estimate reference quantities\n            Uinf = np.linalg.norm(self.tsdata.u_ext[0][:, 0, 0])\n            chord = np.linalg.norm(self.tsdata.zeta[0][:, -1, 0] - self.tsdata.zeta[0][:, 0, 0])\n            rho = self.tsdata.rho\n\n            ScalingDict = {'length': .5 * chord,\n                           'speed': Uinf,\n                           'density': rho}\n\n            # reference\n            Dyn0 = Dynamic(self.tsdata,\n                           dt=0.05,\n                           integr_order=2, RemovePredictor=True,\n                           UseSparse=True)\n            Dyn0.assemble_ss()\n\n            # scale/unscale\n            Dyn1 = Dynamic(self.tsdata,\n                           dt=0.05,\n                           integr_order=2, RemovePredictor=True,\n                           UseSparse=True, ScalingDict=ScalingDict)\n            Dyn1.assemble_ss()\n            Dyn1.nondimss()\n            Dyn1.dimss()\n            libss.compare_ss(Dyn0.SS, Dyn1.SS, tol=1e-10)\n            assert np.max(np.abs(Dyn0.SS.dt - Dyn1.SS.dt)) < 1e-12 * Dyn0.SS.dt, \\\n                'Scaling/unscaling of time-step not correct'\n\n        def test_freqresp(self):\n\n            Sta = self.Sta\n\n            # estimate reference quantities\n            Uinf = np.linalg.norm(self.tsdata.u_ext[0][:, 0, 0])\n            chord = np.linalg.norm(\n                self.tsdata.zeta[0][:, -1, 0] - self.tsdata.zeta[0][:, 0, 0])\n            rho = self.tsdata.rho\n\n            ScalingDict = {'length': .5 * chord,\n                           'speed': Uinf,\n                           'density': rho}\n\n            kv = np.linspace(0, .5, 3)\n\n            for use_sparse in [False, True]:\n                for remove_predictor in [True, False]:\n                    ### ----- Dynamic class\n                    Dyn = Dynamic(self.tsdata,\n                                  dt=0.05, ScalingDict=ScalingDict,\n                                  integr_order=2, RemovePredictor=remove_predictor,\n                                  UseSparse=use_sparse)\n                    Dyn.assemble_ss()\n                    Dyn.nondimss()\n                    Yref = libss.freqresp(Dyn.SS, kv)\n                    Ydyn = Dyn.freqresp(kv)\n                    ermax = np.max(np.abs(Ydyn - Yref))\n                    assert ermax < 1e-13, \\\n                        'Dynamic.freqresp produces too large error (%.2e)!' % ermax\n\n                    ### ----- BlockDynamic class\n                    BlockDyn = DynamicBlock(self.tsdata,\n                                            dt=0.05,\n                                            ScalingDict=ScalingDict,\n                                            integr_order=2, RemovePredictor=remove_predictor,\n                                            UseSparse=use_sparse)\n                    BlockDyn.assemble_ss()\n                    BlockDyn.nondimss()\n                    Ydyn_block = BlockDyn.freqresp(kv)\n                    ermax = np.max(np.abs(Ydyn_block - Yref))\n                    assert ermax < 1e-13, \\\n                        'Dynamic.freqresp produces too large error (%.2e)!' % ermax\n\n                    ### ----- Frequency class\n                    Freq = Frequency(self.tsdata, dt=0.05, ScalingDict=ScalingDict,\n                                     integr_order=2, RemovePredictor=remove_predictor,\n                                     UseSparse=use_sparse)\n                    Freq.assemble()\n                    Freq.nondimss()\n                    Yfreq = Freq.freqresp(kv)\n                    ermax = np.max(np.abs(Yfreq - Yref))\n                    assert ermax < 1e-13, \\\n                        'Frequency.freqresp produces too large error (%.2e)!' % ermax\n\n        def test_solve_step(self):\n\n            Sta = self.Sta\n\n            # estimate reference quantities\n            Uinf = np.linalg.norm(self.tsdata.u_ext[0][:, 0, 0])\n            chord = np.linalg.norm(\n                self.tsdata.zeta[0][:, -1, 0] - self.tsdata.zeta[0][:, 0, 0])\n            rho = self.tsdata.rho\n\n            ScalingDict = {'length': .5 * chord,\n                           'speed': Uinf,\n                           'density': rho}\n\n            ### build an input time history\n            NT = 5\n            Uin = np.random.rand(9 * Sta.Kzeta, NT)\n\n            ### get size of output\n            Ny = 3 * Sta.Kzeta\n            Ydyn = np.zeros((Ny, NT))\n            Yblock = np.zeros((Ny, NT))\n\n            for integr_order in [1, 2]:\n\n                Nx = (1 + integr_order) * Sta.K + Sta.K_star\n                Xdyn = np.zeros((Nx, NT))\n                Xblock = np.zeros((Nx, NT))\n\n                for use_sparse in [True, False]:\n                    for remove_predictor in [True, False]:\n\n                        Xdyn *= 0.\n                        Xblock *= 0.\n                        Ydyn *= 0.\n                        Yblock *= 0.\n\n                        ### ----- Dynamic class\n                        Dyn = Dynamic(self.tsdata,\n                                      dt=0.05,\n                                      ScalingDict=ScalingDict,\n                                      integr_order=integr_order, Remove=remove_predictor,\n                                      UseSparse=use_sparse)\n                        Dyn.assemble_ss()\n                        Dyn.nondimss()\n\n                        for tt in range(1, NT):\n                            Xdyn[:, tt], Ydyn[:, tt] = \\\n                                Dyn.solve_step(Xdyn[:, tt - 1], Uin[:, tt - 1],\n                                               transform_state=True)\n\n                        ### ----- BlockDynamic class\n                        BlockDyn = DynamicBlock(self.tsdata,\n                                                dt=0.05,\n                                                ScalingDict=ScalingDict,\n                                                integr_order=integr_order, RemovePredictor=remove_predictor,\n                                                UseSparse=use_sparse)\n                        BlockDyn.assemble_ss()\n                        BlockDyn.nondimss()\n\n                        for tt in range(1, NT):\n                            Xblock[:, tt], Yblock[:, tt] = \\\n                                BlockDyn.solve_step(Xdyn[:, tt - 1], Uin[:, tt - 1],\n                                                    transform_state=True)\n\n                        ermax = np.max(np.abs(Xdyn - Xblock)) / np.max(np.abs(Xdyn))\n\n                        assert ermax < 1e-14, \\\n                            ('solve_step methods in Dynamic and BlockDynamic not matching ' +\n                             ' (relative error %.2e)!' % ermax)\n\n                        ermax = np.max(np.abs(Ydyn - Yblock)) / np.max(np.abs(Ydyn))\n                        assert ermax < 1e-14, \\\n                            ('solve_step methods in Dynamic and BlockDynamic not matching ' +\n                             ' (relative error %.2e)!' % ermax)\n\n\n    unittest.main()\n"
  },
  {
    "path": "sharpy/linear/src/multisurfaces.py",
    "content": "\"\"\"Generation of multiple aerodynamic surfaces\n\nS. Maraniello, 25 May 2018\n\"\"\"\n\nimport numpy as np\nimport sharpy.linear.src.gridmapping as gridmapping\nimport sharpy.linear.src.surface as surface\nimport sharpy.linear.src.assembly as assembly\nimport sharpy.utils.cout_utils as cout\n\n\nclass MultiAeroGridSurfaces():\n    \"\"\"\n    Creates and assembles multiple aerodynamic surfaces from data\n    \"\"\"\n\n    def __init__(self, tsdata, vortex_radius, for_vel=np.zeros((6,))):\n        \"\"\"\n        Initialise from data structure at time step.\n\n        Args:\n            tsdata (sharpy.utils.datastructures.AeroTimeStepInfo): Linearisation time step\n            vortex_radius (np.float): Distance below which induction is not computed\n            for_vel (np.ndarray): Frame of reference velocity in the inertial (G) frame, including the angular velocity.\n        \"\"\"\n\n        self.tsdata0 = tsdata\n        self.n_surf = tsdata.n_surf\n        self.dimensions = tsdata.dimensions\n        self.dimensions_star = tsdata.dimensions_star\n\n        # allocate surfaces\n        self.Surfs = []\n        self.Surfs_star = []\n\n        # allocate size lists - useful for global assembly\n        self.NN = []\n        self.MM = []\n        self.KK = []\n        self.KKzeta = []\n        self.NN_star = []\n        self.MM_star = []\n        self.KK_star = []\n        self.KKzeta_star = []\n\n        for ss in range(self.n_surf):\n\n            ### Allocate bound surfaces\n            M, N = tsdata.dimensions[ss]\n            Map = gridmapping.AeroGridMap(M, N)\n            # try:\n            #     omega = tsdata.omega[ss]\n            # except AttributeError:\n            #     omega = for_vel[3:]\n            Surf = surface.AeroGridSurface(\n                Map, zeta=tsdata.zeta[ss], gamma=tsdata.gamma[ss],\n                vortex_radius=vortex_radius,\n                u_ext=tsdata.u_ext[ss], zeta_dot=tsdata.zeta_dot[ss],\n                gamma_dot=tsdata.gamma_dot[ss],\n                rho=tsdata.rho,\n                for_vel=for_vel)\n\n            # generate geometry data\n            Surf.generate_areas()\n            Surf.generate_normals()\n            Surf.aM, Surf.aN = 0.5, 0.5\n            Surf.generate_collocations()\n            self.Surfs.append(Surf)\n            # store size\n            self.MM.append(M)\n            self.NN.append(N)\n            self.KK.append(Map.K)\n            self.KKzeta.append(Map.Kzeta)\n\n            ### Allocate wake surfaces\n            M, N = tsdata.dimensions_star[ss]\n            Map = gridmapping.AeroGridMap(M, N)\n            Surf = surface.AeroGridSurface(Map,\n                                           zeta=tsdata.zeta_star[ss], gamma=tsdata.gamma_star[ss],\n                                           vortex_radius=vortex_radius,\n                                           rho=tsdata.rho)\n            self.Surfs_star.append(Surf)\n            # store size\n            self.MM_star.append(M)\n            self.NN_star.append(N)\n            self.KK_star.append(Map.K)\n            self.KKzeta_star.append(Map.Kzeta)\n\n\n    def get_ind_velocities_at_target_collocation_points(self, target):\n        \"\"\"\n        Computes normal induced velocities at target surface collocation points.\n        \"\"\"\n        # Loop input surfaces\n        for ss_in in range(self.n_surf):\n            # Bound\n            Surf_in = self.Surfs[ss_in]\n            target.u_ind_coll += \\\n                Surf_in.get_induced_velocity_over_surface(target,\n                                                          target='collocation', Project=False)\n\n            # Wake\n            Surf_in = self.Surfs_star[ss_in]\n            target.u_ind_coll += \\\n                Surf_in.get_induced_velocity_over_surface(target,\n                                                          target='collocation', Project=False)\n\n    def get_ind_velocities_at_collocation_points(self):\n        \"\"\"\n        Computes normal induced velocities at collocation points.\n        \"\"\"\n\n        # Loop surfaces (where ind. velocity is computed)\n        for ss_out in range(self.n_surf):\n\n            # define array\n            Surf_out = self.Surfs[ss_out]\n            M_out, N_out = self.dimensions[ss_out]\n            Surf_out.u_ind_coll = np.zeros((3, M_out, N_out))\n\n            self.get_ind_velocities_at_target_collocation_points(Surf_out)\n\n\n    def get_normal_ind_velocities_at_collocation_points(self):\n        \"\"\"\n        Computes normal induced velocities at collocation points.\n\n        Note: for state-equation both projected and not projected induced\n        velocities are required at the collocation points. Hence, this method\n        tries to first the u_ind_coll attribute in each surface.\n        \"\"\"\n\n        # Loop surfaces (where ind. velocity is computed)\n        for ss_out in range(self.n_surf):\n\n            # define array\n            Surf_out = self.Surfs[ss_out]\n            M_out, N_out = self.dimensions[ss_out]\n            # Surf_out.u_ind_coll_norm=np.empty((M_out,N_out))\n            Surf_out.u_ind_coll_norm = np.zeros((M_out, N_out))\n\n            if hasattr(Surf_out, 'u_ind_coll'):\n                Surf_out.u_ind_coll_norm = \\\n                    Surf_out.project_coll_to_normal(Surf_out.u_ind_coll)\n\n            else:\n                # Loop input surfaces\n                for ss_in in range(self.n_surf):\n                    # Bound\n                    Surf_in = self.Surfs[ss_in]\n                    Surf_out.u_ind_coll_norm += \\\n                        Surf_in.get_induced_velocity_over_surface(Surf_out,\n                                                                  target='collocation', Project=True)\n\n                    # Wake\n                    Surf_in = self.Surfs_star[ss_in]\n                    Surf_out.u_ind_coll_norm += \\\n                        Surf_in.get_induced_velocity_over_surface(Surf_out,\n                                                                  target='collocation', Project=True)\n\n    def get_input_velocities_at_collocation_points(self):\n\n        for surf in self.Surfs:\n            if surf.u_input_coll is None:\n                surf.get_input_velocities_at_collocation_points()\n\n    # -------------------------------------------------------------------------\n\n    def get_ind_velocities_at_segments(self, overwrite=False):\n        \"\"\"\n        Computes induced velocities at mid-segment points.\n        \"\"\"\n\n        # Loop surfaces (where ind. velocity is computed)\n        for ss_out in range(self.n_surf):\n\n            Surf_out = self.Surfs[ss_out]\n            if hasattr(Surf_out, 'u_ind_seg') and (not overwrite):\n                continue\n\n            M_out, N_out = self.dimensions[ss_out]\n            Surf_out.u_ind_seg = np.zeros((3, 4, M_out, N_out))\n\n            # Loop input surfaces\n            for ss_in in range(self.n_surf):\n                # Buond\n                Surf_in = self.Surfs[ss_in]\n                Surf_out.u_ind_seg += \\\n                    Surf_in.get_induced_velocity_over_surface(Surf_out,\n                                                              target='segments', Project=False)\n\n                # Wake\n                Surf_in = self.Surfs_star[ss_in]\n                Surf_out.u_ind_seg += \\\n                    Surf_in.get_induced_velocity_over_surface(Surf_out,\n                                                              target='segments', Project=False)\n\n    def get_input_velocities_at_segments(self, overwrite=False):\n\n        for surf in self.Surfs:\n            if (surf.u_input_seg is not None) and (not overwrite):\n                continue\n            surf.get_input_velocities_at_segments()\n\n    # -------------------------------------------------------------------------\n\n    def get_joukovski_qs(self, overwrite=False):\n        \"\"\"\n        Returns quasi-steady forces over\n\n        Warning: forces are stored in a NON-redundant format:\n            (3,4,M,N)\n        where the element\n            (:,ss,mm,nn)\n        is the contribution to the force over the ss-th segment due to the\n        circulation of panel (mm,nn).\n\n        \"\"\"\n\n        # get input and induced velocities at segments\n        self.get_input_velocities_at_segments(overwrite)\n        self.get_ind_velocities_at_segments(overwrite)\n\n        for ss in range(self.n_surf):\n            Surf = self.Surfs[ss]\n            Surf.get_joukovski_qs(gammaw_TE=self.Surfs_star[ss].gamma[0, :])\n\n    def verify_non_penetration(self, print_info=False):\n        \"\"\"\n        Verify state variables fulfill non-penetration condition at bound\n        surfaces\n        \"\"\"\n\n        # verify induced velocities have been computed\n        for ss in range(self.n_surf):\n            if not hasattr(self.Surfs[ss], 'u_ind_coll_norm'):\n                self.get_normal_ind_velocities_at_collocation_points()\n                break\n\n        if print_info:\n            print('Verifying non-penetration at bound...')\n        for surf in self.Surfs:\n            # project input velocities\n            if surf.u_input_coll_norm is None:\n                surf.get_normal_input_velocities_at_collocation_points()\n\n            ErMax = np.max(np.abs(\n                surf.u_ind_coll_norm + surf.u_input_coll_norm))\n            if print_info:\n                print('Surface %.2d max abs error: %.3e' % (ss, ErMax))\n\n            assert ErMax < 1e-12 * np.max(np.abs(self.Surfs[0].u_ext)), \\\n                'Linearisation state does not verify the non-penetration condition!'\n\n    # For rotating cases:\n    # assert ErMax<1e-10*np.max(np.abs(self.Surfs[0].u_input_coll)),\\\n    # \t'Linearisation state does not verify the non-penetration condition! %.3e > %.3e' % (ErMax, 1e-10*np.max(np.abs(self.Surfs[0].u_input_coll)))\n\n    def verify_aic_coll(self, print_info=False):\n        \"\"\"\n        Verify aic at collocation points using non-penetration condition\n        \"\"\"\n\n        AIC_list, AIC_star_list = assembly.AICs(\n            self.Surfs, self.Surfs_star, target='collocation', Project=True)\n\n        ### Compute iduced velocity\n        for ss_out in range(self.n_surf):\n            Surf_out = self.Surfs[ss_out]\n            Surf_out.u_ind_coll_norm = np.zeros((Surf_out.maps.K,))\n            for ss_in in range(self.n_surf):\n                # Bound surface\n                Surf_in = self.Surfs[ss_in]\n                aic = AIC_list[ss_out][ss_in]\n                Surf_out.u_ind_coll_norm += np.dot(\n                    aic, Surf_in.gamma.reshape(-1, order='C'))\n\n                # Wakes\n                Surf_in = self.Surfs_star[ss_in]\n                aic = AIC_star_list[ss_out][ss_in]\n                Surf_out.u_ind_coll_norm += np.dot(\n                    aic, Surf_in.gamma.reshape(-1, order='C'))\n\n            Surf_out.u_ind_coll_norm = \\\n                Surf_out.u_ind_coll_norm.reshape((Surf_out.maps.M, Surf_out.maps.N))\n\n        if print_info:\n            print('Verifying AICs at collocation points...')\n        i_surf = 0\n        for surf in self.Surfs:\n            # project input velocities\n            if surf.u_input_coll_norm is None:\n                surf.get_normal_input_velocities_at_collocation_points()\n\n            ErMax = np.max(np.abs(\n                surf.u_ind_coll_norm + surf.u_input_coll_norm))\n            if print_info:\n                print('Surface %.2d max abs error: %.3e' % (i_surf, ErMax))\n\n            assert ErMax < 1e-12 * np.max(np.abs(self.Surfs[0].u_ext)), \\\n                'Linearisation state does not verify the non-penetration condition!'\n            i_surf += 1\n\n    # For rotating cases:\n    # assert ErMax<1e-10*np.max(np.abs(self.Surfs[0].u_input_coll)),\\\n    # 'Linearisation state does not verify the non-penetration condition! %.3e > %.3e' % (ErMax, 1e-10*np.max(np.abs(self.Surfs[0].u_input_coll)))\n\n    def verify_joukovski_qs(self, print_info=False):\n        \"\"\"\n        Verify quasi-steady contribution for forces matches against SHARPy.\n        \"\"\"\n\n        if print_info:\n            print('Verifying joukovski quasi-steady forces...')\n        self.get_joukovski_qs()\n\n        for ss in range(self.n_surf):\n            Surf = self.Surfs[ss]\n\n            Fhere = Surf.fqs.reshape((3, Surf.maps.Kzeta))\n            Fref = self.tsdata0.forces[ss][0:3].reshape((3, Surf.maps.Kzeta))\n            # Check if forces and ct_forces_list are the same:\n            # Fref_check=np.array(self.tsdata0.ct_forces_list[6*ss:6*ss+3])\n            # print('Check forces: ', Fref_check-Fref)\n            ErMax = np.max(np.abs(Fhere - Fref))\n\n            if print_info:\n                print('Surface %.2d max abs error: %.3e' % (ss, ErMax))\n            assert ErMax < 1e-12, 'Wrong quasi-steady force over surface %.2d!' % ss\n    # For rotating cases:\n\n\n# assert ErMax<1e-8 ,'Wrong quasi-steady force over surface %.2d!'%ss\n\n\nif __name__ == '__main__':\n    import read\n\n    # select test case\n    fname = '../test/h5input/goland_mod_Nsurf01_M003_N004_a040.aero_state.h5'\n    # fname='../test/h5input/goland_mod_Nsurf02_M003_N004_a040.aero_state.h5'\n    haero = read.h5file(fname)\n    tsdata = haero.ts00000\n\n    MS = MultiAeroGridSurfaces(tsdata, 1e-6) # vortex_radius\n\n    # collocation points\n    MS.get_normal_ind_velocities_at_collocation_points()\n    MS.verify_non_penetration()\n    MS.verify_aic_coll()\n\n    # joukovski\n    MS.verify_joukovski_qs()\n\n    # embed()\n\n### verify u_induced\n"
  },
  {
    "path": "sharpy/linear/src/surface.py",
    "content": "\"\"\"\nGeometrical methods for bound surfaces\n\n\nS. Maraniello, 20 May 2018\n\"\"\"\n\nimport numpy as np\nimport itertools\nimport sharpy.aero.utils.uvlmlib as uvlmlib  # SHARPy's main uvlm interface with cpp\nimport sharpy.linear.src.uvlmutils as uvlmutils  # library with UVLM solution methods\nfrom sharpy.aero.utils.uvlmlib import get_aic3_cpp\nimport sharpy.utils.cout_utils as cout\n\ndmver = np.array([0, 1, 1, 0])  # delta to go from (m,n) panel to (m,n) vertices\ndnver = np.array([0, 0, 1, 1])\n\n\nclass AeroGridGeo():\n    r\"\"\"\n    Allows retrieving geometrical information of a surface. Requires a\n    gridmapping.AeroGridMap mapping structure in input and the surface vertices\n    coordinates.\n\n    Indices convention: each panel is characterised through the following\n    indices:\n    - m,n: chord/span-wise indices\n\n    Methods:\n    - get_*: retrieve information of a panel (e.g. normal, surface area)\n    - generate_*: apply get_* method to each panel and store info into array.\n\n    Interpolation matrices, W:\n    - these are labelled as 'Wba', where 'a' defines the initial format, b the\n    final. Hence, given the array vb, it holds va=Wab*vb\n\n    \"\"\"\n\n    def __init__(self,\n                 Map: 'gridmapping.AeroGridMap instance',\n                 zeta: 'Array of vertex coordinates at each surface',\n                 aM: 'chord-wise position of collocation point in panel' = 0.5,\n                 aN: 'span-wise position of collocation point in panel' = 0.5):\n\n        self.maps = Map\n        self.maps.map_all()\n        self.zeta = zeta\n        self.aM = aM\n        self.aN = aN\n\n    ### Mapping coefficients\n    # self.wvc=self.get_panel_wcv(self.aM,self.aN)\n\n    # -------------------------------------------------------------------------\n\n    def get_panel_vertices_coords(self, m, n):\n        \"\"\"\n        Retrieves coordinates of panel (m,n) vertices.\n        \"\"\"\n\n        ###\n        # mpv=self.maps.from_panel_to_vertices(m,n)\n\n        ###\n        # mpv=self.maps.Mpv[m,n,:,:]\n        # zetav_here_ref=np.zeros((4,3),order='C')\n        # for ii in range(4):\n        # \tzetav_here_ref[ii,:]=self.zeta[:,mpv[ii,0],mpv[ii,1]]\n        # zetav_here=self.zeta[:,dmver+m,dnver+n].T\n        # assert np.max(np.abs(zetav_here-zetav_here_ref))<1e-16, embed()\n        # return zetav_here\n\n        ###\n        # return self.zeta[:,dmver+m,dnver+n].T\n\n        return self.zeta[:, [m + 0, m + 1, m + 1, m + 0], [n + 0, n + 0, n + 1, n + 1]].T\n\n    # ------------------------------------------------------- get panel normals\n\n    def generate_normals(self):\n\n        M, N = self.maps.M, self.maps.N\n        self.normals = np.zeros((3, M, N))\n\n        for mm in range(M):\n            for nn in range(N):\n                zetav_here = self.get_panel_vertices_coords(mm, nn)\n                self.normals[:, mm, nn] = uvlmutils.panel_normal(zetav_here)\n\n    # -------------------------------------------------- get panel surface area\n\n    def generate_areas(self):\n\n        M, N = self.maps.M, self.maps.N\n        self.areas = np.zeros((M, N))\n\n        for mm in range(M):\n            for nn in range(N):\n                zetav_here = self.get_panel_vertices_coords(mm, nn)\n                self.areas[mm, nn] = uvlmutils.panel_area(zetav_here)\n\n    # -------------------------------------------------- get collocation points\n\n    def get_panel_wcv(self):\n        r\"\"\"\n        Produces a compact array with weights for bilinear interpolation, where\n        aN,aM in [0,1] are distances in the chordwise and spanwise directions\n        such that:\n\n            - (aM,aN)=(0,0) --> quantity at vertex 0\n\n            - (aM,aN)=(1,0) --> quantity at vertex 1\n\n            - (aM,aN)=(1,1) --> quantity at vertex 2\n\n            - (aM,aN)=(0,1) --> quantity at vertex 3\n        \"\"\"\n\n        aM = self.aM\n        aN = self.aN\n        wcv = np.array([(1 - aM) * (1 - aN), aM * (1 - aN), aM * aN, aN * (1 - aM)])\n\n        return wcv\n\n    def get_panel_collocation(self, zetav_here):\n        r\"\"\"\n        Using bilinear interpolation, retrieves panel collocation point, where\n        aN,aM in [0,1] are distances in the chordwise and spanwise directions\n        such that:\n\n            - (aM,aN)=(0,0) --> quantity at vertex 0\n\n            - (aM,aN)=(1,0) --> quantity at vertex 1\n\n            - (aM,aN)=(1,1) --> quantity at vertex 2\n\n            - (aM,aN)=(0,1) --> quantity at vertex 3\n        \"\"\"\n\n        wcv = self.get_panel_wcv()\n        zetac_here = np.dot(wcv, zetav_here)\n\n        return zetac_here\n\n    def generate_collocations(self):\n\n        M, N = self.maps.M, self.maps.N\n        self.zetac = np.zeros((3, M, N), order='F')  # F order avoids the need to copy\n        # when passing self.zetac[:,x,x] to\n        # C written libraries.\n\n        for mm in range(M):\n            for nn in range(N):\n                zetav_here = self.get_panel_vertices_coords(mm, nn)\n                self.zetac[:, mm, nn] = self.get_panel_collocation(zetav_here)\n\n    # -------------------------------------------------- get mid-segment points\n\n    def get_panel_wsv(self):\n        pass\n\n    def get_panel_midsegments(self, zetav_here):\n        pass\n\n    def generate_midsegments():\n        pass\n\n    def generate_Wsv():\n        pass\n\n    # ----------------------------------------------- Interpolations/Projection\n\n    def interp_vertex_to_coll(self, q_vert):\n        \"\"\"\n        Project a quantity q_vert (scalar or vector) defined at vertices to\n        collocation points.\n        \"\"\"\n\n        M, N = self.maps.M, self.maps.N\n        # embed()\n        inshape = q_vert.shape\n        assert inshape[-2] == M + 1 and inshape[-1] == N + 1, 'Unexpected shape of q_vert'\n\n        # determine weights\n        wcv = self.get_panel_wcv()\n\n        if len(inshape) == 2:\n            q_coll = np.zeros((M, N))\n            for mm in range(M):\n                for nn in range(N):\n                    # get q_vert at panel corners\n                    mpv = self.maps.from_panel_to_vertices(mm, nn)\n                    for vv in range(4):\n                        q_coll[mm, nn] = q_coll[mm, nn] + \\\n                                         wcv[vv] * q_vert[mpv[vv, 0], mpv[vv, 1]]\n\n        elif len(inshape) == 3:\n            q_coll = np.zeros((3, M, N))\n            for mm in range(M):\n                for nn in range(N):\n                    # get q_vert at panel corners\n                    mpv = self.maps.from_panel_to_vertices(mm, nn)\n                    for vv in range(4):\n                        q_coll[:, mm, nn] = q_coll[:, mm, nn] + \\\n                                            wcv[vv] * q_vert[:, mpv[vv, 0], mpv[vv, 1]]\n        else:\n            raise NameError('Unexpected shape of q_vert')\n\n        return q_coll\n\n    def project_coll_to_normal(self, q_coll):\n        \"\"\"\n        Project a vector quantity q_coll defined at collocation points to normal.\n        \"\"\"\n\n        M, N = self.maps.M, self.maps.N\n        assert q_coll.shape == (3, M, N), 'Unexpected shape of q_coll'\n\n        if not hasattr(self, 'normals'):\n            self.generate_normals()\n\n        q_proj = np.zeros((M, N))\n        for mm in range(M):\n            for nn in range(N):\n                q_proj[mm, nn] = np.dot(self.normals[:, mm, nn], q_coll[:, mm, nn])\n\n        return q_proj\n\n    # ------------------------------------------------------- visualise surface\n\n    def plot(self, plot_normals=False):\n\n        try:\n            import matplotlib.pyplot as plt\n\n            fig = plt.figure()\n            ax = fig.add_subplot(111, projection='3d')\n\n            # Plot vertices grid\n            ax.plot_wireframe(self.zeta[0], self.zeta[1], self.zeta[2])\n            # rstride=10, cstride=10)\n\n            # Plot collocation points\n            ax.scatter(self.zetac[0], self.zetac[1], self.zetac[2], zdir='z', s=3, c='r')\n\n            if plot_normals:\n                ax.quiver(self.zetac[0], self.zetac[1], self.zetac[2],\n                          self.normals[0], self.normals[1], self.normals[2],\n                          length=0.01 * np.max(self.zeta), )  # normalize=True)\n\n            self.ax = ax\n        except ModuleNotFoundError:\n            import warnings\n            warnings.warn('Unable to import matplotlib, skipping plots')\n\n\nclass AeroGridSurface(AeroGridGeo):\n    r\"\"\"\n    Contains geometric and aerodynamic information about bound/wake surface.\n\n    Compulsory input are those that apply to both bound and wake surfaces:\n        - ``zeta``: defines geometry\n        - ``gamma``: circulation\n\n    With respect to :class:`.AeroGridGeo`, the class contains methods to:\n        - project prescribed input velocity at nodes (``u_ext``, ``zeta_dot``) over\n          collocation points.\n        - compute induced velocity over ANOTHER surface.\n        - compute AIC induced over ANOTHER surface\n\n    Args:\n        Map (gridmapping.AeroGridMap): Map of grid.\n        zeta (list(np.ndarray)): Grid vertices coordinates in inertial (G) frame.\n        zeta_dot (list(np.ndarray)): Grid vertices velocities in inertial (G) frame. Default is ``None``.\n        vortex_radius (np.float): Distance below which induction is not computed\n        u_ext (list(np.ndarray)): Grid external velocities in inertial (G) frame. Default is ``None``.\n        gamma_dot (list(np.ndarray)): Panel circulation derivative. Default is ``None``.\n        rho (float): Air density. Default is ``1.``\n        aM (float): Chordwise position in panel of collocation point. Default is ``0.5``\n        aN (float): Spanwise position in panel of collocation point. Default is ``0.5``\n        for_vel (np.ndarray): Frame of reference velocity (including rotational velocity) in the inertial frame.\n\n    To add:\n        - project prescribed input velocity at nodes (u_ext, zeta_dot) over\n        mid-point segments\n    \"\"\"\n\n    def __init__(self, Map, zeta, gamma,\n                 vortex_radius,\n                 u_ext=None,\n                 zeta_dot=None,\n                 gamma_dot=None,\n                 rho=1.,\n                 aM=0.5,\n                 aN=0.5,\n                 for_vel=np.zeros((6, ))):\n\n        super().__init__(Map, zeta, aM, aN)\n\n        self.gamma = gamma\n        self.vortex_radius = vortex_radius\n        self.zeta_dot = zeta_dot\n        self.u_ext = u_ext\n        self.gamma_dot = gamma_dot\n        self.rho = rho\n        self.omega = for_vel[3:]\n        self.for_vel_tra = for_vel[:3]\n\n        msg_out = 'wrong input shape!'\n        assert self.gamma.shape == (self.maps.M, self.maps.N), \\\n            'Gamma shape %s not equal to M, N %s' % (str(self.gamma.shape), str((self.maps.M, self.maps.N)))\n        assert self.zeta.shape == (3, self.maps.M + 1, self.maps.N + 1), \\\n            'Zeta shape %s not equal to 3, M+1, N+1 %s' % (str(self.zeta.shape), str((3, self.maps.M, self.maps.N)))\n        if self.zeta_dot is not None:\n            assert self.zeta_dot.shape == (3, self.maps.M + 1, self.maps.N + 1), \\\n                'zeta_dot shape %s not equal to 3, M+1, N+1 %s' % (str(self.zeta_dot.shape), str((3, self.maps.M, self.maps.N)))\n        if self.u_ext is not None:\n            assert self.u_ext.shape == (3, self.maps.M + 1, self.maps.N + 1), \\\n                'u_ext shape %s not equal to 3, M+1, N+1 %s' % (str(self.u_ext.shape), str((3, self.maps.M, self.maps.N)))\n        assert for_vel.shape == (6, ), msg_out\n        assert self.omega.shape == (3, ), msg_out\n        assert self.for_vel_tra.shape == (3, ), msg_out\n\n        self.u_input_coll = None  # input velocities at the collocation points\n        self.u_input_coll_norm = None  # normal input velocities at the collocation points\n        self.u_input_seg = None  # input velocities at segments\n    # -------------------------------------------------------- input velocities\n\n    def get_input_velocities_at_collocation_points(self):\n        r\"\"\"\n        Returns velocities at collocation points from nodal values ``u_ext`` and\n        ``zeta_dot`` of shape ``(3, M+1, N+1)`` at the collocation points.\n\n        Notes:\n\n            .. math:: \\boldsymbol{u}_{c} = \\mathcal{W}_{cv}(\\boldsymbol(\\nu)_0 - \\boldsymbol{\\zeta}_0)\n\n            is the input velocity at the collocation point, where :math:`\\mathcal{W}_{cv}` projects the velocity\n            from the grid points onto the collocation point. This variable is referred to as\n            ``u_input_coll=Wcv*(u_ext-zeta_dot)`` and depends on the coordinates ``zeta`` when the body is rotating.\n\n        \"\"\"\n\n        # define total velocity\n        if self.zeta_dot is not None:\n            u_tot = self.u_ext - self.zeta_dot\n        else:\n            u_tot = self.u_ext\n\n        # Include rotation\n        for i_m in range(self.maps.M + 1):\n            for i_n in range(self.maps.N + 1):\n                u_tot[:, i_m, i_n] -= np.cross(self.omega, self.zeta[:, i_m, i_n]) + self.for_vel_tra\n\n        self.u_input_coll = self.interp_vertex_to_coll(u_tot)\n\n    def get_normal_input_velocities_at_collocation_points(self):\n        \"\"\"\n        From nodal input velocity to normal velocities at collocation points.\n        \"\"\"\n\n        # M,N=self.maps.M,self.maps.N\n\n        # produce velocities at collocation points\n        self.get_input_velocities_at_collocation_points()\n        self.u_input_coll_norm = self.project_coll_to_normal(self.u_input_coll)\n\n    def get_input_velocities_at_segments(self):\n        \"\"\"\n        Returns velocities at mid-segment points from nodal values u_ext and\n        zeta_dot of shape (3,M+1,N+1).\n\n        Warning: input velocities at grid segments are stored in a redundant\n        format:\n            (3,4,M,N)\n        where the element\n            (:,ss,mm,nn)\n        is the induced velocity over the ss-th segment of panel (mm,nn). A fast\n        looping is implemented to re-use previously computed velocities\n\n        2018/08/24: Include effects due to rotation (omega x zeta). Now it\n        depends on the coordinates zeta\n        \"\"\"\n\n        # define total velocity\n        if self.zeta_dot is not None:\n            u_tot = self.u_ext - self.zeta_dot\n        else:\n            u_tot = self.u_ext\n\n        # Include rotation\n        for i_m in range(self.maps.M + 1):\n            for i_n in range(self.maps.N + 1):\n                u_tot[:, i_m, i_n] -= np.cross(self.omega, self.zeta[:, i_m, i_n]) + self.for_vel_tra\n\n        M, N = self.maps.M, self.maps.N\n        self.u_input_seg = np.empty((3, 4, M, N))\n\n        # indiced as per self.maps\n        dmver = [0, 1, 1, 0]  # delta to go from (m,n) panel to (m,n) vertices\n        dnver = [0, 0, 1, 1]\n        svec = [0, 1, 2, 3]  # seg. no.\n        avec = [0, 1, 2, 3]  # 1st vertex no.\n        bvec = [1, 2, 3, 0]  # 2nd vertex no.\n\n        ##### panel (0,0): compute all\n        mm, nn = 0, 0\n        for ss, aa, bb in zip(svec, avec, bvec):\n            uA = u_tot[:, mm + dmver[aa], nn + dnver[aa]]\n            uB = u_tot[:, mm + dmver[bb], nn + dnver[bb]]\n            self.u_input_seg[:, ss, mm, nn] = .5 * (uA + uB)\n\n        ##### panels n=0: copy seg.3\n        nn = 0\n        svec = [0, 1, 2]  # seg. no.\n        avec = [0, 1, 2]  # 1st vertex no.\n        bvec = [1, 2, 3]  # 2nd vertex no.\n        for mm in range(1, M):\n            for ss, aa, bb in zip(svec, avec, bvec):\n                uA = u_tot[:, mm + dmver[aa], nn + dnver[aa]]\n                uB = u_tot[:, mm + dmver[bb], nn + dnver[bb]]\n                self.u_input_seg[:, ss, mm, nn] = .5 * (uA + uB)\n            self.u_input_seg[:, 3, mm, nn] = self.u_input_seg[:, 1, mm - 1, nn]\n        ##### panels m=0: copy seg.0\n        mm = 0\n        svec = [1, 2, 3]  # seg. number\n        avec = [1, 2, 3]  # 1st vertex of seg.\n        bvec = [2, 3, 0]  # 2nd vertex of seg.\n        for nn in range(1, N):\n            for ss, aa, bb in zip(svec, avec, bvec):\n                uA = u_tot[:, mm + dmver[aa], nn + dnver[aa]]\n                uB = u_tot[:, mm + dmver[bb], nn + dnver[bb]]\n                self.u_input_seg[:, ss, mm, nn] = .5 * (uA + uB)\n            self.u_input_seg[:, 0, mm, nn] = self.u_input_seg[:, 2, mm, nn - 1]\n        ##### all others: copy seg. 0 and 3\n        svec = [1, 2]  # seg. number\n        avec = [1, 2]  # 1st vertex of seg.\n        bvec = [2, 3]  # 2nd vertex of seg.\n        for pp in itertools.product(range(1, M), range(1, N)):\n            mm, nn = pp\n            for ss, aa, bb in zip(svec, avec, bvec):\n                uA = u_tot[:, mm + dmver[aa], nn + dnver[aa]]\n                uB = u_tot[:, mm + dmver[bb], nn + dnver[bb]]\n                self.u_input_seg[:, ss, mm, nn] = .5 * (uA + uB)\n            self.u_input_seg[:, 0, mm, nn] = self.u_input_seg[:, 2, mm, nn - 1]\n            self.u_input_seg[:, 3, mm, nn] = self.u_input_seg[:, 1, mm - 1, nn]\n\n        return self\n\n    # ------------------------------------------------------ induced velocities\n\n    def get_induced_velocity(self, zeta_target):\n        \"\"\"\n        Computes induced velocity at a point zeta_target.\n        \"\"\"\n\n        M, N = self.maps.M, self.maps.N\n        uind_target = np.zeros((3,), order='C')\n        # uind_ref=np.zeros((3,),order='C')\n\n        for mm in range(M):\n            for nn in range(N):\n                # panel info\n                zetav_here = self.get_panel_vertices_coords(mm, nn)\n                uind_target += uvlmlib.biot_panel_cpp(zeta_target,\n                                                      zetav_here,\n                                                      self.vortex_radius,\n                                                      self.gamma[mm, nn])\n\n        return uind_target\n\n    def get_aic3(self, zeta_target):\n        \"\"\"\n        Produces influence coefficinet matrix to calculate the induced velocity\n        at a target point. The aic3 matrix has shape (3,K)\n        \"\"\"\n\n        K = self.maps.K\n        aic3 = np.zeros((3, K))\n\n        for cc in range(K):\n            # define panel\n            mm = self.maps.ind_2d_pan_scal[0][cc]\n            nn = self.maps.ind_2d_pan_scal[1][cc]\n\n            # get panel coordinates\n            zetav_here = self.get_panel_vertices_coords(mm, nn)\n            aic3[:, cc] = uvlmlib.biot_panel_cpp(zeta_target, zetav_here,\n                                                 self.vortex_radius,\n                                                 gamma=1.0)\n\n        return aic3\n\n    def get_induced_velocity_over_surface(self, Surf_target,\n                                          target='collocation', Project=False):\n        \"\"\"\n        Computes induced velocity over an instance of AeroGridSurface, where\n        target specifies the target grid (collocation or segments). If Project\n        is True, velocities are projected onver panel normal (only available at\n        collocation points).\n\n        Note: for state-equation, both projected and non-projected velocities at\n        the collocation points are required. Hence, it is suggested to use this\n        method with Projection=False, and project afterwards.\n\n        Warning: induced velocities at grid segments are stored in a redundant\n        format:\n\n            (3,4,M,N)\n\n        where the element\n\n            (:,ss,mm,nn)\n\n        is the induced velocity over the ss-th segment of panel (mm,nn). A fast\n        looping is implemented to re-use previously computed velocities\n        \"\"\"\n\n        M_trg = Surf_target.maps.M\n        N_trg = Surf_target.maps.N\n\n        if target == 'collocation':\n            if not hasattr(Surf_target, 'zetac'):\n                Surf_target.generate_collocations()\n            ZetaTarget = Surf_target.zetac\n\n            if Project:\n                if not hasattr(Surf_target, 'normals'):\n                    Surf_target.generate_normals()\n                Uind = np.empty((M_trg, N_trg))\n            else:\n                Uind = np.empty((3, M_trg, N_trg))\n\n            # loop target points\n            for pp in itertools.product(range(M_trg), range(N_trg)):\n                mm, nn = pp\n                uind = uvlmlib.get_induced_velocity_cpp(self.maps, self.zeta,\n                          self.gamma, ZetaTarget[:, mm, nn], self.vortex_radius)\n                if Project:\n                    Uind[mm, nn] = np.dot(uind, Surf_target.normals[:, mm, nn])\n                else:\n                    Uind[:, mm, nn] = uind\n\n        if target == 'segments':\n\n            if Project:\n                raise NameError('Normal not defined for segment')\n\n            Uind = np.zeros((3, 4, M_trg, N_trg))\n\n            ##### panel (0,0): compute all\n            mm, nn = 0, 0\n            svec = [0, 1, 2, 3]  # seg. number\n            avec = [0, 1, 2, 3]  # 1st vertex of seg.\n            bvec = [1, 2, 3, 0]  # 2nd vertex of seg.\n            zetav_here = Surf_target.get_panel_vertices_coords(mm, nn)\n            for ss, aa, bb in zip(svec, avec, bvec):\n                zeta_mid = 0.5 * (zetav_here[aa, :] + zetav_here[bb, :])\n                Uind[:, ss, mm, nn] = uvlmlib.get_induced_velocity_cpp(self.maps,\n                             self.zeta, self.gamma, zeta_mid, self.vortex_radius)\n\n            ##### panels n=0: copy seg.3\n            nn = 0\n            svec = [0, 1, 2]  # seg. number\n            avec = [0, 1, 2]  # 1st vertex of seg.\n            bvec = [1, 2, 3]  # 2nd vertex of seg.\n            for mm in range(1, M_trg):\n                zetav_here = Surf_target.get_panel_vertices_coords(mm, nn)\n                for ss, aa, bb in zip(svec, avec, bvec):\n                    zeta_mid = 0.5 * (zetav_here[aa, :] + zetav_here[bb, :])\n                    Uind[:, ss, mm, nn] = uvlmlib.get_induced_velocity_cpp(self.maps,\n                                 self.zeta, self.gamma, zeta_mid, self.vortex_radius)\n                Uind[:, 3, mm, nn] = Uind[:, 1, mm - 1, nn]\n\n            ##### panels m=0: copy seg.0\n            mm = 0\n            svec = [1, 2, 3]  # seg. number\n            avec = [1, 2, 3]  # 1st vertex of seg.\n            bvec = [2, 3, 0]  # 2nd vertex of seg.\n            for nn in range(1, N_trg):\n                zetav_here = Surf_target.get_panel_vertices_coords(mm, nn)\n                for ss, aa, bb in zip(svec, avec, bvec):\n                    zeta_mid = 0.5 * (zetav_here[aa, :] + zetav_here[bb, :])\n                    Uind[:, ss, mm, nn] = uvlmlib.get_induced_velocity_cpp(self.maps,\n                                 self.zeta, self.gamma, zeta_mid, self.vortex_radius)\n                Uind[:, 0, mm, nn] = Uind[:, 2, mm, nn - 1]\n\n            ##### all others: copy seg. 0 and 3\n            svec = [1, 2]  # seg. number\n            avec = [1, 2]  # 1st vertex of seg.\n            bvec = [2, 3]  # 2nd vertex of seg.\n            for pp in itertools.product(range(1, M_trg), range(1, N_trg)):\n                mm, nn = pp\n                zetav_here = Surf_target.get_panel_vertices_coords(*pp)\n                for ss, aa, bb in zip(svec, avec, bvec):\n                    zeta_mid = 0.5 * (zetav_here[aa, :] + zetav_here[bb, :])\n                    Uind[:, ss, mm, nn] = uvlmlib.get_induced_velocity_cpp(self.maps,\n                                 self.zeta, self.gamma, zeta_mid, self.vortex_radius)\n                Uind[:, 0, mm, nn] = Uind[:, 2, mm, nn - 1]\n                Uind[:, 3, mm, nn] = Uind[:, 1, mm - 1, nn]\n\n        return Uind\n\n    def get_aic_over_surface(self, Surf_target,\n                             target='collocation', Project=True):\n        r\"\"\"\n        Produces influence coefficient matrices such that the velocity induced\n        over the Surface_target is given by the product:\n\n        .. code-block:: python\n\n            if target=='collocation':\n                if Project:\n                    u_ind_coll_norm.rehape(-1)=AIC*self.gamma.reshape(-1,order='C')\n                else:\n                    u_ind_coll_norm[ii,:,:].rehape(-1)=\n                                        AIC[ii,:,:]*self.gamma.reshape(-1,order='C')\n\n        where ``ii=0,1,2``.\n\n        For the case where ``if target=='segments'``:\n\n            - AIC has shape (3,self.maps.K,4,Mout,Nout), such that\n\n                ``AIC[:,:,ss,mm,nn]``\n\n            is the influence coefficient matrix associated to the induced\n            velocity at segment ss of panel (mm,nn).\n        \"\"\"\n\n        K_in = self.maps.K\n\n        if target == 'collocation':\n\n            K_out = Surf_target.maps.K\n            if not hasattr(Surf_target, 'zetac'):\n                Surf_target.generate_collocations()\n            ZetaTarget = Surf_target.zetac\n\n            if Project:\n                if not hasattr(Surf_target, 'normals'):\n                    Surf_target.generate_normals()\n                AIC = np.empty((K_out, K_in))\n            else:\n                AIC = np.empty((3, K_out, K_in))\n\n            # loop target points\n            for cc in range(K_out):\n                # retrieve panel coords\n                mm = Surf_target.maps.ind_2d_pan_scal[0][cc]\n                nn = Surf_target.maps.ind_2d_pan_scal[1][cc]\n                # retrieve influence coefficients\n                # ref_aic3=self.get_aic3(ZetaTarget[:,mm,nn])\n                aic3 = get_aic3_cpp(self.maps, self.zeta, ZetaTarget[:, mm, nn],\n                                    self.vortex_radius)\n                # assert np.max(np.abs(aic3-ref_aic3))<1e-13, embed()\n\n                if Project:\n                    AIC[cc, :] = np.dot(Surf_target.normals[:, mm, nn], aic3)\n                else:\n                    AIC[:, cc, :] = aic3\n\n        if target == 'segments':\n            if Project:\n                raise NameError('Normal not defined at collocation points')\n\n            M_trg, N_trg = Surf_target.maps.M, Surf_target.maps.N\n            AIC = np.zeros((3, K_in, 4, M_trg, N_trg))\n\n            ##### panel (0,0): compute all\n            mm, nn = 0, 0\n            svec = [0, 1, 2, 3]  # seg. number\n            avec = [0, 1, 2, 3]  # 1st vertex of seg.\n            bvec = [1, 2, 3, 0]  # 2nd vertex of seg.\n            zetav_here = Surf_target.get_panel_vertices_coords(mm, nn)\n            for ss, aa, bb in zip(svec, avec, bvec):\n                zeta_mid = 0.5 * (zetav_here[aa, :] + zetav_here[bb, :])\n                AIC[:, :, ss, mm, nn] = get_aic3_cpp(self.maps, self.zeta,\n                                                     zeta_mid, self.vortex_radius)\n\n            ##### panels n=0: copy seg.3\n            nn = 0\n            svec = [0, 1, 2]  # seg. number\n            avec = [0, 1, 2]  # 1st vertex of seg.\n            bvec = [1, 2, 3]  # 2nd vertex of seg.\n            for mm in range(1, M_trg):\n                zetav_here = Surf_target.get_panel_vertices_coords(mm, nn)\n                for ss, aa, bb in zip(svec, avec, bvec):\n                    zeta_mid = 0.5 * (zetav_here[aa, :] + zetav_here[bb, :])\n                    AIC[:, :, ss, mm, nn] = get_aic3_cpp(self.maps, self.zeta,\n                                                         zeta_mid, self.vortex_radius)\n                AIC[:, :, 3, mm, nn] = AIC[:, :, 1, mm - 1, nn]\n\n            ##### panels m=0: copy seg.0\n            mm = 0\n            svec = [1, 2, 3]  # seg. number\n            avec = [1, 2, 3]  # 1st vertex of seg.\n            bvec = [2, 3, 0]  # 2nd vertex of seg.\n            for nn in range(1, N_trg):\n                zetav_here = Surf_target.get_panel_vertices_coords(mm, nn)\n                for ss, aa, bb in zip(svec, avec, bvec):\n                    zeta_mid = 0.5 * (zetav_here[aa, :] + zetav_here[bb, :])\n                    AIC[:, :, ss, mm, nn] = get_aic3_cpp(self.maps, self.zeta,\n                                                         zeta_mid, self.vortex_radius)\n                AIC[:, :, 0, mm, nn] = AIC[:, :, 2, mm, nn - 1]\n\n            ##### all others: copy seg. 0 and 3\n            svec = [1, 2]  # seg. number\n            avec = [1, 2]  # 1st vertex of seg.\n            bvec = [2, 3]  # 2nd vertex of seg.\n            for pp in itertools.product(range(1, M_trg), range(1, N_trg)):\n                mm, nn = pp\n                zetav_here = Surf_target.get_panel_vertices_coords(*pp)\n                for ss, aa, bb in zip(svec, avec, bvec):\n                    zeta_mid = 0.5 * (zetav_here[aa, :] + zetav_here[bb, :])\n                    AIC[:, :, ss, mm, nn] = get_aic3_cpp(self.maps, self.zeta,\n                                                         zeta_mid, self.vortex_radius)\n                AIC[:, :, 3, mm, nn] = AIC[:, :, 1, mm - 1, nn]\n                AIC[:, :, 0, mm, nn] = AIC[:, :, 2, mm, nn - 1]\n\n        return AIC\n\n    # ------------------------------------------------------------------ forces\n\n    def get_joukovski_qs(self, gammaw_TE=None, recompute_velocities=True):\n        \"\"\"\n        Returns quasi-steady forces evaluated at mid-segment points over the\n        surface.\n\n        Important: the circulation at the first row of wake panel is required!\n        Hence all\n\n        Warning: forces are stored in a NON-redundant format:\n            (3,4,M,N)\n        where the element\n            (:,ss,mm,nn)\n        is the contribution to the force over the ss-th segment due to the\n        circulation of panel (mm,nn).\n        \"\"\"\n\n        if self.u_input_seg is None:\n            if not recompute_velocities:\n                print(\"WARNING: recomputing velocities\")\n            self.get_input_velocities_at_segments()\n        if not hasattr(self, 'u_ind_seg'):\n            raise NameError('u_ind_seg not available!')\n\n        M, N = self.maps.M, self.maps.N\n        self.fqs_seg_unit = np.zeros((3, 4, M, N))\n        self.fqs = np.zeros((3, M + 1, N + 1))\n\n        # indiced as per self.maps\n        dmver = [0, 1, 1, 0]  # delta to go from (m,n) panel to (m,n) vertices\n        dnver = [0, 0, 1, 1]\n        svec = [0, 1, 2, 3]  # seg. no.\n        avec = [0, 1, 2, 3]  # 1st vertex no.\n        bvec = [1, 2, 3, 0]  # 2nd vertex no.\n\n        ### force produced by BOUND panels\n        for pp in itertools.product(range(0, M), range(0, N)):\n            mm, nn = pp\n            zetav_here = self.get_panel_vertices_coords(mm, nn)\n            for ss, aa, bb in zip(svec, avec, bvec):\n                df = uvlmutils.joukovski_qs_segment(\n                    zetaA=zetav_here[aa, :], zetaB=zetav_here[bb, :],\n                    v_mid=self.u_ind_seg[:, ss, mm, nn] + self.u_input_seg[:, ss, mm, nn],\n                    gamma=1.0, fact=self.rho)\n                self.fqs_seg_unit[:, ss, mm, nn] = df\n                # project on vertices\n                self.fqs[:, mm + dmver[aa], nn + dnver[aa]] += 0.5 * self.gamma[mm, nn] * df\n                self.fqs[:, mm + dmver[bb], nn + dnver[bb]] += 0.5 * self.gamma[mm, nn] * df\n\n        ### force produced by wake T.E. segments\n        # Note:\n        # 1. zetaA & zetaB are ordered such that the wake circulation is\n        # subtracts to the bound circulation over TE segment\n        # 2. the TE segment corresponds to seg.1 of the last row of BOUND panels\n        if gammaw_TE is None:\n            raise NameError('Enter gammaw_TE - option disabled for debugging')\n            gammaw_TE = self.gamma[M - 1, :]\n\n        self.fqs_wTE_unit = np.zeros((3, N))\n\n        for nn in range(N):\n            df = uvlmutils.joukovski_qs_segment(\n                zetaA=self.zeta[:, M, nn + 1],\n                zetaB=self.zeta[:, M, nn],\n                v_mid=self.u_input_seg[:, 1, M - 1, nn] + self.u_ind_seg[:, 1, M - 1, nn],\n                gamma=1.0,\n                fact=self.rho)\n            # record force on TE due to wake and project\n            self.fqs_wTE_unit[:, nn] = df\n            self.fqs[:, M, nn + 1] += 0.5 * gammaw_TE[nn] * df\n            self.fqs[:, M, nn] += 0.5 * gammaw_TE[nn] * df\n\n        return self\n\n    def get_joukovski_unsteady(self):\n        \"\"\"\n        Returns added mass effects over lattive grid\n        \"\"\"\n\n        if self.gamma_dot is None:\n            raise NameError('circulation derivative not specified!')\n        if not hasattr(self, 'areas'):\n            self.generate_areas()\n\n        M, N = self.maps.M, self.maps.N\n        self.funst = np.zeros((3, M + 1, N + 1))\n        wcv = self.get_panel_wcv()\n\n        for pp in itertools.product(range(0, M), range(0, N)):\n            mm, nn = pp\n\n            # force at collocation point\n            fcoll = -self.rho * self.areas[mm, nn] * self.normals[:, mm, nn] * self.gamma_dot[mm, nn]\n\n            # project at vertices\n            for vv in range(4):\n                self.funst[:, mm + dmver[vv], nn + dnver[vv]] += wcv[vv] * fcoll\n"
  },
  {
    "path": "sharpy/linear/src/uvlmutils.py",
    "content": "\"\"\"Methods for UVLM solution\n\nS. Maraniello, 1 Jun 2018\n\"\"\"\nimport numpy as np\nimport sharpy.aero.utils.uvlmlib as uvlmlib\nimport sharpy.utils.algebra as algebra\nfrom sharpy.utils.constants import cfact_biot\n\n# local mapping segment/vertices of a panel\nsvec = [0, 1, 2, 3]  # seg. number\navec = [0, 1, 2, 3]  # 1st vertex of seg.\nbvec = [1, 2, 3, 0]  # 2nd vertex of seg.\nLoopPanel = [(0, 1), (1, 2), (2, 3), (3, 0)]  # used in eval_panel_{exp/comp}\n\n\ndef joukovski_qs_segment(zetaA, zetaB, v_mid, gamma=1.0, fact=0.5):\n    \"\"\"\n    Joukovski force over vetices A and B produced by the segment A->B.\n    The factor fact allows to compute directly the contribution over the\n    vertices A and B (e.g. 0.5) or include DENSITY.\n    \"\"\"\n\n    rab = zetaB - zetaA\n    fs = algebra.cross3(v_mid, rab)\n    gfact = fact * gamma\n\n    return gfact * fs\n\n\ndef biot_segment(zetaP, zetaA, zetaB, vortex_radius, gamma=1.0):\n    \"\"\"\n    Induced velocity of segment A_>B of circulation gamma over point P.\n    \"\"\"\n\n    vortex_radius_sq = vortex_radius*vortex_radius\n    # differences\n    ra = zetaP - zetaA\n    rb = zetaP - zetaB\n    rab = zetaB - zetaA\n    ra_norm, rb_norm = algebra.norm3d(ra), algebra.norm3d(rb)\n    vcross = algebra.cross3(ra, rb)\n    vcross_sq = np.dot(vcross, vcross)\n\n    # numerical radius\n    if vcross_sq < (vortex_radius_sq * algebra.normsq3d(rab)):\n        return np.zeros((3,))\n\n    q = ((cfact_biot * gamma / vcross_sq) * \\\n         (np.dot(rab, ra) / ra_norm - np.dot(rab, rb) / rb_norm)) * vcross\n\n    return q\n\n\ndef biot_panel(zetaC, ZetaPanel, vortex_radius, gamma=1.0):\n    \"\"\"\n    Induced velocity over point ZetaC of a panel of vertices coordinates\n    ZetaPanel and circulaiton gamma, where:\n        ZetaPanel.shape=(4,3)=[vertex local number, (x,y,z) component]\n    \"\"\"\n\n    q = np.zeros((3,))\n    for ss, aa, bb in zip(svec, avec, bvec):\n        q += biot_segment(zetaC, ZetaPanel[aa, :], ZetaPanel[bb, :],\n                          vortex_radius, gamma)\n\n    return q\n\n\ndef biot_panel_fast(zetaC, ZetaPanel, vortex_radius, gamma=1.0):\n    \"\"\"\n    Induced velocity over point ZetaC of a panel of vertices coordinates\n    ZetaPanel and circulaiton gamma, where:\n        ZetaPanel.shape=(4,3)=[vertex local number, (x,y,z) component]\n    \"\"\"\n\n    vortex_radius_sq = vortex_radius*vortex_radius\n    Cfact = cfact_biot * gamma\n    q = np.zeros((3,))\n\n    R_list = zetaC - ZetaPanel\n    Runit_list = [R_list[ii] / algebra.norm3d(R_list[ii]) for ii in svec]\n\n    for aa, bb in LoopPanel:\n\n        RAB = ZetaPanel[bb, :] - ZetaPanel[aa, :]  # segment vector\n        Vcr = algebra.cross3(R_list[aa], R_list[bb])\n        vcr2 = np.dot(Vcr, Vcr)\n        if vcr2 < (vortex_radius * algebra.normsq3d(RAB)):\n            continue\n\n        q += ((Cfact / vcr2) * np.dot(RAB, Runit_list[aa] - Runit_list[bb])) * Vcr\n\n    return q\n\n\ndef panel_normal(ZetaPanel):\n    \"\"\"\n    return normal of panel with vertex coordinates ZetaPanel, where:\n        ZetaPanel.shape=(4,3)\n    \"\"\"\n\n    # build cross-vectors\n    r02 = ZetaPanel[2, :] - ZetaPanel[0, :]\n    r13 = ZetaPanel[3, :] - ZetaPanel[1, :]\n\n    nvec = algebra.cross3(r02, r13)\n    nvec = nvec / algebra.norm3d(nvec)\n\n    return nvec\n\n\ndef panel_area(ZetaPanel):\n    \"\"\"\n    return area of panel with vertices coordinates ZetaPanel, where:\n        ZetaPanel.shape=(4,3)\n    using Bretschneider formula - for cyclic or non-cyclic quadrilaters.\n    \"\"\"\n\n    # build cross-vectors\n    r02 = ZetaPanel[2, :] - ZetaPanel[0, :]\n    r13 = ZetaPanel[3, :] - ZetaPanel[1, :]\n    # build side vectors\n    r01 = ZetaPanel[1, :] - ZetaPanel[0, :]\n    r12 = ZetaPanel[2, :] - ZetaPanel[1, :]\n    r23 = ZetaPanel[3, :] - ZetaPanel[2, :]\n    r30 = ZetaPanel[0, :] - ZetaPanel[3, :]\n\n    # compute distances\n    d02 = algebra.norm3d(r02)\n    d13 = algebra.norm3d(r13)\n    d01 = algebra.norm3d(r01)\n    d12 = algebra.norm3d(r12)\n    d23 = algebra.norm3d(r23)\n    d30 = algebra.norm3d(r30)\n\n    A = 0.25 * np.sqrt((4. * d02 ** 2 * d13 ** 2) - ((d12 ** 2 + d30 ** 2) - (d01 ** 2 + d23 ** 2)) ** 2)\n\n    return A\n\n\nif __name__ == '__main__':\n\n    import cProfile\n\n    ### verify consistency amongst models\n    gamma = 4.\n    zeta0 = np.array([1.0, 3.0, 0.9])\n    zeta1 = np.array([5.0, 3.1, 1.9])\n    zeta2 = np.array([4.8, 8.1, 2.5])\n    zeta3 = np.array([0.9, 7.9, 1.7])\n    ZetaPanel = np.array([zeta0, zeta1, zeta2, zeta3])\n\n    zetaP = np.array([3.0, 5.5, 2.0])\n    zetaP = zeta2 * 0.3 + zeta3 * 0.7\n\n    ### verify model consistency\n    qref = biot_panel(zetaP, ZetaPanel, 1e-6, gamma=gamma) # vortex_radius\n    qfast = biot_panel_fast(zetaP, ZetaPanel, 1e-6, gamma=gamma) # vortex_radius\n    qcpp = uvlmlib.biot_panel_cpp(zetaP, ZetaPanel, 1e-6, gamma=gamma) # vortex_radius\n\n    ermax = np.max(np.abs(qref - qfast))\n    assert ermax < 1e-16, 'biot_panel_fast not matching with biot_panel'\n    ermax = np.max(np.abs(qref - qcpp))\n    assert ermax < 1e-16, 'biot_panel_cpp not matching with biot_panel'\n\n\n    ### profiling\n    def run_biot_panel_cpp():\n        for ii in range(10000):\n            uvlmlib.biot_panel_cpp(zetaP, ZetaPanel, 1e-6, gamma=3.) # vortex_radius\n\n\n    def run_biot_panel_fast():\n        for ii in range(10000):\n            biot_panel_fast(zetaP, ZetaPanel, 1e-6, gamma=3.) # vortex_radius\n\n\n    def run_biot_panel_ref():\n        for ii in range(10000):\n            biot_panel(zetaP, ZetaPanel, 1e-6, gamma=3.) # vortex_radius\n\n\n    print('------------------------------------------ profiling biot_panel_cpp')\n    cProfile.runctx('run_biot_panel_cpp()', globals(), locals())\n\n    print('----------------------------------------- profiling biot_panel_fast')\n    cProfile.runctx('run_biot_panel_fast()', globals(), locals())\n\n    print('------------------------------------------ profiling biot_panel_ref')\n    cProfile.runctx('run_biot_panel_ref()', globals(), locals())\n"
  },
  {
    "path": "sharpy/linear/utils/__init__.py",
    "content": ""
  },
  {
    "path": "sharpy/linear/utils/derivatives.py",
    "content": "import h5py\nimport numpy as np\n\nfrom sharpy.utils import algebra as algebra, cout_utils as cout\n\n\nclass Derivatives:\n    \"\"\"\n    Class containing the derivatives set for a given state-space system (i.e. aeroelastic or aerodynamic)\n    \"\"\"\n    def __init__(self, reference_dimensions, static_state, target_system=None):\n\n        self.target_system = target_system  # type: str # name of target system (aerodynamic/aeroelastic)\n        self.transfer_function = None  # type: np.array # matrix of steady-state TF for target system\n\n        self.static_state = static_state  # type: tuple # [fx, fy, fz] at ref state\n        self.reference_dimensions = reference_dimensions  # type: dict # name: ref_dimension_value dictionary\n\n        self.separator = '\\n' + 80 * '#' + '\\n'\n\n        self.dict_of_derivatives = {}  # type: dict # {name:DerivativeSet} Each of the derivative sets DerivativeSet\n\n        s_ref = self.reference_dimensions['S_ref']\n        b_ref = self.reference_dimensions['b_ref']\n        c_ref = self.reference_dimensions['c_ref']\n        u_inf = self.reference_dimensions['u_inf']\n        rho = self.reference_dimensions['rho']\n        self.dynamic_pressure = 0.5 * rho * u_inf ** 2\n\n        self.coefficients = {'force': self.dynamic_pressure * s_ref,\n                             'moment_lon': self.dynamic_pressure * s_ref * c_ref,\n                             'moment_lat': self.dynamic_pressure * s_ref * b_ref,\n                             'force_angular_vel': self.dynamic_pressure * s_ref * c_ref / u_inf,\n                             'moment_lon_angular_vel': self.dynamic_pressure * s_ref * c_ref * c_ref / u_inf}  # missing rates\n\n        self.steady_coefficients = np.array(self.static_state) / self.coefficients['force']\n\n        self.filename = 'stability_derivatives.txt'\n        if target_system is not None:\n            self.filename = target_system + '_' + self.filename\n\n        self.cg = None\n\n    def initialise_derivatives(self, state_space, steady_forces, quat, v0, phi=None, cg=None, tpa=None):\n        \"\"\"\n        Initialises the required class attributes for all derivative calculations/\n\n        Args:\n            state_space (sharpy.linear.src.libss.StateSpace): State-space object for the target system\n            steady_forces (np.array): Array of steady forces (at the linearisation) expressed in the beam degrees of\n              freedom and with size equal to the number of structural degrees of freedom\n            quat (np.array): Quaternion at the linearisation reference state\n            v0 (np.array): Free stream velocity vector at the linearisation condition\n            phi (np.array (optional)): Mode shape matrix for modal systems\n            tpa (np.array (optional)): Transformation matrix onto principal axes\n\n        \"\"\"\n        cls = DerivativeSet  # explain what is the DerivativeSet class\n        if cls.quat is None:\n            cls.quat = quat\n            cls.cga = algebra.quat2rotation(cls.quat)\n            cls.v0 = v0\n            cls.coefficients = self.coefficients\n\n            if phi is not None:\n                cls.modal = True\n                cls.phi = phi[-9:-3, :6]\n                cls.inv_phi_forces = np.linalg.inv(phi[-9:-3, :6].T)\n                cls.inv_phi_vel = np.linalg.inv(phi[-9:-3, :6])\n            else:\n                cls.modal = False\n        cls.steady_forces = steady_forces\n\n        H0 = state_space.freqresp(np.array([1e-5]))[:, :, 0].real\n        if cls.modal:\n            vel_inputs_variables = state_space.input_variables.get_variable_from_name('q_dot')\n            output_indices = state_space.output_variables.get_variable_from_name('Q').rows_loc[:6]\n            cls.steady_forces = cls.inv_phi_forces.dot(cls.steady_forces[output_indices])\n        else:\n            vel_inputs_variables = state_space.input_variables.get_variable_from_name('beta')\n            output_indices = state_space.output_variables.get_variable_from_name('forces_n').rows_loc[-9:-3]\n            cls.steady_forces = cls.steady_forces[output_indices]\n        rbm_indices = vel_inputs_variables.cols_loc[:9]\n\n        # look for control surfaces\n        try:\n            cs_input_variables = state_space.input_variables.get_variable_from_name('control_surface_deflection')\n            dot_cs_input_variables = state_space.input_variables.get_variable_from_name('dot_control_surface_deflection')\n        except ValueError:\n            cs_indices = np.array([], dtype=int)\n            dot_cs_indices = np.array([], dtype=int)\n            cls.n_control_surfaces = 0\n        else:\n            cs_indices = cs_input_variables.cols_loc\n            dot_cs_indices = dot_cs_input_variables.cols_loc\n            cls.n_control_surfaces = cs_input_variables.size\n        finally:\n            input_indices = np.concatenate((rbm_indices, cs_indices, dot_cs_indices))\n\n        self.transfer_function = H0[np.ix_(output_indices, input_indices)].real\n\n        self.cg = cg\n        self.tpa = tpa\n\n    def save(self, output_route):\n        with h5py.File(output_route + '/' + self.filename.replace('.txt', '.h5'), 'w') as f:\n            for k, v in self.dict_of_derivatives.items():\n                if v.matrix is None:\n                    continue\n                f.create_dataset(name=k, data=v.matrix)\n\n    def savetxt(self, folder):\n\n        filename = self.filename\n\n        u_inf = self.reference_dimensions['u_inf']\n        s_ref = self.reference_dimensions['S_ref']\n        b_ref = self.reference_dimensions['b_ref']\n        c_ref = self.reference_dimensions['c_ref']\n        rho = self.reference_dimensions['rho']\n        quat = self.reference_dimensions['quat']\n        euler_orient = algebra.quat2euler(quat) * 180/np.pi\n\n        labels_out = ['CD', 'CY', 'CL', 'Cl', 'Cm', 'Cn']\n\n        separator = '\\n' + 80*'#' + '\\n'\n\n        with open(folder + '/' + filename, mode='w') as outfile:\n            outfile.write('SHARPy Stability Derivatives Analysis\\n')\n\n            outfile.write('State:\\n')\n            outfile.write('\\t{:4f}\\t\\t\\t # Free stream velocity\\n'.format(u_inf))\n            outfile.write('\\t{:4f}\\t\\t\\t # Free stream density\\n'.format(rho))\n            outfile.write('\\t{:4f}\\t\\t\\t # Alpha [deg]\\n'.format(euler_orient[1]))\n            outfile.write('\\t{:4f}\\t\\t\\t # Beta [deg]\\n'.format(euler_orient[2]))\n\n            if self.cg is not None:\n                outfile.write(separator)\n                outfile.write('Centre of Gravity:\\n')\n                lab = ('x', 'y', 'z')\n                for i in range(3):\n                    outfile.write('\\t{:s}_A = {:.4f}\\t\\t\\t # [m]\\n'.format(lab[i], self.cg[i]))\n\n                if self.tpa is not None:\n                    outfile.write('Principal Axes Directions (expressed in the A frame):\\n')\n                    for i in range(3):\n                        outfile.write('\\t{:s}_ppal in A = [{:.4f}, {:.4f}, {:.4f}]\\t\\t\\t\\n'.format(\n                            lab[i], *self.tpa.dot(np.eye(3)[:, i])))\n\n            outfile.write(separator)\n            outfile.write('\\nReference Dimensions:\\n')\n            outfile.write('\\t{:4f}\\t\\t\\t # Reference planform area\\n'.format(s_ref))\n            outfile.write('\\t{:4f}\\t\\t\\t # Reference chord\\n'.format(c_ref))\n            outfile.write('\\t{:4f}\\t\\t\\t # Reference span\\n'.format(b_ref))\n\n            outfile.write(separator)\n            outfile.write('\\nCoefficients:\\n')\n            for ith, coeff in enumerate(self.steady_coefficients):\n                outfile.write('\\t{:4e}\\t\\t\\t # {:s}\\n'.format(coeff,  labels_out[ith]))\n\n            outfile.write(separator)\n\n        # this needs to be out of with open as it is done in each of the Derivatives objects\n        for derivative_set in self.dict_of_derivatives.values():\n            if derivative_set.matrix is None:\n                continue\n            derivative_set.print(derivative_filename=folder + '/' + filename)\n\n    def new_derivative(self, frame_of_reference, derivative_calculation=None, name=None):\n        \"\"\"\n        Returns a DerivativeSet() instance with the appropriate transfer function included\n        for the relevant target system.\n\n        Args:\n            frame_of_reference (str): Output frame of reference. Body or Stability. (Not Yet Implemented)\n            derivative_calculation (str): Name of function used to create derivative set\n            name (str (optional)): Optional custom name to use as title in output.\n\n        Returns:\n            DerivativeSet: Instance of class with the relevant transfer function for the current\n              target system.\n        \"\"\"\n        new_derivative = DerivativeSet(frame_of_reference, derivative_calculation,\n                                       name,\n                                       transfer_function=self.transfer_function)\n\n        return new_derivative\n\n\nclass DerivativeSet:\n    \"\"\"\n    Class containing the stability derivative set for each of the input/output combinations. A derivative set may be\n    force/angle or force/control_surface, for example.\n\n    The class attributes contain the parameters common across all derivative sets. The instance attributes those\n    pertaining to the specific set.\n    \"\"\"\n    steady_forces = None\n    coefficients = None\n    quat = None\n\n    cga = None\n    n_control_surfaces = None\n\n    v0 = None\n\n    # Modal cases\n    modal = None\n    phi = None\n    inv_phi_forces = None\n    inv_phi_vel = None\n\n    def __init__(self, frame_of_reference, derivative_calculation=None, name=None,\n                 transfer_function=None):\n        \"\"\"\n\n        Args:\n            frame_of_reference (str): Name of the frame of reference (stability or body axes)\n            derivative_calculation (str): Name of the method to compute derivatives\n            name (str): Name of the derivative set\n            transfer_function (np.array): steady state transfer function for the desired input output channels\n        \"\"\"\n\n        self.transfer_function = transfer_function  # type: np.array # steady-state TF for the specific out/in\n        self.matrix = None  # type: np.array # matrix of stability derivatives\n        self.labels_in = []  # type: list(str) # strings describing the input channels\n        self.labels_out = []  # type list(str) # strings describing the output channels\n        self.frame_of_reference = frame_of_reference  # type: str # name of the FoR (stability or body axes)\n\n        self.table = None  # type: cout.TablePrinter\n        self.name = name  # type: str # name of the set\n\n        # TODO: remove in clean up and make derivative_calculation a position argument\n        if derivative_calculation is not None:\n            self.__getattribute__(derivative_calculation)()\n\n    def print(self, derivative_filename=None):\n        if self.name is not None:\n            cout.cout_wrap(self.name)\n            with open(derivative_filename, 'a') as f:\n                f.write('Derivative set: {:s}\\n'.format(self.name))\n                f.write('Axes {:s}\\n'.format(self.frame_of_reference))\n        self.table = cout.TablePrinter(n_fields=len(self.labels_in)+1,\n                                       field_types=['s']+len(self.labels_in) * ['e'], filename=derivative_filename)\n        self.table.print_header(field_names=list(['der'] + self.labels_in))\n        for i in range(len(self.labels_out)):\n            out_list = [self.labels_out[i]] + list(self.matrix[i, :])\n            self.table.print_line(out_list)\n        self.table.print_divider_line()\n        self.table.character_return(n_lines=2)\n\n    def save(self, derivative_name, output_name):\n        with h5py.File(output_name + '.stability.h5', 'w') as f:\n            f.create_dataset(derivative_name, data=self.matrix)\n\n    def angle_derivatives(self):\n        r\"\"\"\n        Stability derivatives against aerodynamic angles (angle of attack and sideslip) expressed in stability axes, i.e\n        forces are lift, drag...\n\n        Linearised forces in stability axes are expressed as\n\n        .. math::\n            F^S = F_0^S + \\frac{\\partial}{\\partial \\alpha}\\left(C^{GA}(\\alpha)F_0^A\\right)\\delta\\alpha + C_0^{GA}\\delta F^A\n\n        Therefore, the stability derivative becomes\n\n        .. math:: \\frac{\\partial\\F^S}{\\partial\\alpha} =\\frac{\\partial}{\\partial \\alpha}\\left(C^{GA}(\\alpha)F_0^A\\right) +\n           C_0^{GA}\\frac{\\partial F^A}{\\partial\\alpha}\n\n        where\n\n        .. math:: \\frac{\\partial F^A}{\\partial\\alpha} = \\frac{\\partial F^A}{\\partial v^A}\\frac{\\partial v^A}{\\partial\\alpha}\n\n        and\n\n        .. math:: \\frac{\\partial v^A}{\\partial\\alpha} = C^{AG}\\frac{\\partial}{\\partial\\alpha}\\left(C(0)V_0^G\\right).\n\n        The term :math:`\\frac{\\partial F^A}{\\partial v^A}` is obtained directly from the steady state transfer\n        function of the linear UVLM expressed in the beam degrees of freedoms.\n\n        \"\"\"\n        self.labels_in = ['phi', 'alpha', 'beta']\n        self.labels_out = ['CD', 'CY', 'CL', 'Cl', 'Cm', 'Cn']\n        self.matrix = np.zeros((6, 3))\n\n        # Get free stream velocity direction\n        v0 = self.v0\n\n        f0a = self.steady_forces[:3]\n        m0a = self.steady_forces[-3:]\n\n        euler0 = algebra.quat2euler(self.quat)\n        cga = self.cga\n\n        # first term in the stability derivative expression\n        stab_der_trans = algebra.der_Ceuler_by_v(euler0, f0a)\n        stab_der_mom = algebra.der_Ceuler_by_v(euler0, m0a)\n\n        # second term in the stability derivative expression\n        if self.modal:\n            delta_nodal_vel = np.linalg.inv(self.phi[:3, :3]).dot(cga.T.dot(algebra.der_Peuler_by_v(euler0 * 0, v0)))\n            delta_nodal_forces = self.inv_phi_forces.dot(self.transfer_function[:6, :3].real.dot(delta_nodal_vel))\n        else:\n            delta_nodal_vel = cga.T.dot(algebra.der_Peuler_by_v(euler0 * 0, v0))\n            delta_nodal_forces = self.transfer_function[:6, :3].real.dot(delta_nodal_vel)\n\n        stab_der_trans2 = cga.dot(delta_nodal_forces[:3, :])\n        stab_der_mom2 = cga.dot(delta_nodal_forces[3:, :])\n\n        self.matrix[:3, :] = stab_der_trans + stab_der_trans2\n        self.matrix[3:6, :] = stab_der_mom + stab_der_mom2\n\n        self.apply_coefficients()\n\n    def angle_derivatives_tb(self):\n        self.name = 'Force/Angle derivatives via angle input'\n        self.labels_in = ['phi', 'alpha', 'beta']\n        self.labels_out = ['CD', 'CY', 'CL', 'Cl', 'Cm', 'Cn']\n        self.matrix = np.zeros((6, 3))\n\n        # Get free stream velocity direction\n        v0 = self.v0\n\n        f0a = self.steady_forces[:3]\n        m0a = self.steady_forces[-3:]\n\n        euler0 = algebra.quat2euler(self.quat)\n        cga = self.cga\n\n        # first term in the stability derivative expression\n        stab_der_trans = algebra.der_Ceuler_by_v(euler0, f0a)\n        stab_der_mom = algebra.der_Ceuler_by_v(euler0, m0a)\n\n        # second term in the stability derivative expression\n        if self.modal:\n            delta_nodal_forces = self.inv_phi_forces.dot(self.transfer_function[:6, 6:9].real)\n        else:\n            delta_nodal_forces = self.transfer_function[:6, 6:9].real\n\n        stab_der_trans2 = cga.dot(delta_nodal_forces[:3, :])\n        stab_der_mom2 = cga.dot(delta_nodal_forces[3:, :])\n\n        self.matrix[:3, :] = stab_der_trans + stab_der_trans2\n        self.matrix[3:6, :] = stab_der_mom + stab_der_mom2\n\n        self.apply_coefficients()\n\n    def body_derivatives(self):\n        self.name = 'Force derivatives to rigid body velocities - Body derivatives'\n        self.labels_in = ['uA', 'vA', 'wA', 'pA', 'qA', 'rA']\n        self.labels_out = ['C_XA', 'C_YA', 'C_ZA', 'C_LA', 'C_MA', 'C_NA']\n        self.matrix = np.zeros((6, 6))\n\n        body_derivatives = self.transfer_function[:6, :6]\n\n        if self.modal:\n            body_derivatives = self.inv_phi_forces.dot(body_derivatives).dot(self.inv_phi_vel)\n\n        self.matrix = body_derivatives\n        self.apply_coefficients()\n\n    def control_surface_derivatives(self):\n        n_control_surfaces = self.n_control_surfaces\n        if n_control_surfaces == 0:\n            return None\n\n        self.name = 'Force derivatives wrt control surface inputs - Body axes'\n        self.labels_out = ['C_XA', 'C_YA', 'C_ZA', 'C_LA', 'C_MA', 'C_NA']\n        labels_in_deflection = []\n        labels_in_rate = []\n        for i in range(n_control_surfaces):\n            labels_in_deflection.append('delta_{:g}'.format(i))\n            labels_in_rate.append('dot(delta)_{:g}'.format(i))\n        self.labels_in = labels_in_deflection + labels_in_rate\n\n        body_derivatives = self.transfer_function[:6, 9:]\n        assert body_derivatives.shape == (6, 2 * self.n_control_surfaces), 'Incorrect TF shape'\n\n        if self.modal:\n            self.matrix = self.inv_phi_forces.dot(body_derivatives)\n        else:\n            self.matrix = body_derivatives\n\n        self.apply_coefficients()\n\n    def apply_coefficients(self):\n        self.matrix[:3, :] /= self.coefficients['force']\n        self.matrix[np.ix_([3, 5]), :] /= self.coefficients['moment_lat']\n        self.matrix[4, :] /= self.coefficients['moment_lon']\n"
  },
  {
    "path": "sharpy/linear/utils/ss_interface.py",
    "content": "\"\"\"State-space modules loading utilities\"\"\"\nimport os\n\nimport h5py\n\nimport sharpy.utils.cout_utils as cout\nfrom abc import ABCMeta, abstractmethod\nimport numpy as np\nimport copy\n\ndict_of_systems = dict()\nsystems_dict_import = dict()\n\n# Define the system decorator\ndef linear_system(arg):\n    global dict_of_systems\n\n    try:\n        arg.sys_id\n    except AttributeError:\n        raise AttributeError('Class defined as linear_system with no sys_id')\n\n    dict_of_systems[arg.sys_id] = arg\n    return arg\n\n\nclass BaseElement(metaclass=ABCMeta):\n\n    @property\n    def sys_id(self):\n        raise NotImplementedError\n\n    @abstractmethod\n    def initialise(self, data, custom_settings=None):\n        pass\n\n    @abstractmethod\n    def assemble(self):\n        pass\n\n    # Some method to connect\n    # Input (from where) - (i.e. generator, system etc)\n    # Output (to display, to system)\n\n\ndef sys_list_from_path(cwd):\n    \"\"\"\n    Returns the files containing linear system state space elements\n\n    Args:\n        cwd (str): Current working directory\n\n    Returns:\n\n    \"\"\"\n    onlyfiles = [f for f in os.listdir(cwd) if os.path.isfile(os.path.join(cwd, f))]\n\n    for i_file in range(len(onlyfiles)):\n        if onlyfiles[i_file].split('.')[-1] == 'py': # support autosaved files in the folder\n            if onlyfiles[i_file] == \"__init__.py\":\n                onlyfiles[i_file] = \"\"\n                continue\n            onlyfiles[i_file] = onlyfiles[i_file].replace('.py', '')\n        else:\n            onlyfiles[i_file] = \"\"\n\n    files = [file for file in onlyfiles if not file == \"\"]\n\n    return files\n\n\ndef sys_from_string(string):\n    return dict_of_systems[string]\n\n\ndef initialise_system(sys_id):\n    cout.cout_wrap('Generating an instance of %s' %sys_id, 2)\n    cls_type = sys_from_string(sys_id)\n    sys = cls_type()\n    return sys\n\n\ndef dictionary_of_systems():\n    dictionary = dict()\n    for linear_system in dict_of_systems:\n        init_sys = initialise_system(linear_system)\n        dictionary[linear_system] = init_sys.settins_default\n\n    return dictionary\n\n\nclass VectorVariable:\n    # state variable\n    def __init__(self, name, size, index, var_system=None):\n\n        self.name = name\n        self.var_system = var_system\n        self.size = size\n        self._index = index\n\n        self._first_position = 0\n\n        self._rows_loc = None\n        self._cols_loc = None\n\n    @property\n    def cols_loc(self):\n        return np.arange(self.first_position, self.end_position, dtype=int)\n\n    @property\n    def index(self):\n        return self._index\n\n    @index.setter\n    def index(self, value):\n        self._index = value\n\n    @property\n    def first_position(self):\n        return self._first_position\n\n    @first_position.setter\n    def first_position(self, position):\n        self._first_position = position\n\n    @property\n    def end_position(self):\n        return self.first_position + self.size\n\n    @property\n    def rows_loc(self):\n        return np.arange(self.first_position, self.end_position, dtype=int)\n\n    def __repr__(self):\n        return '({:s}: {:s}, size: {:g}, index: {:g}, starting at: {:g}, finishing at: {:g})'.format(\n            type(self).__name__,\n            self.name,\n            self.size,\n            self.index,\n            self.first_position,\n            self.end_position)\n\n    def copy(self):\n        return copy.deepcopy(self)\n\n    def save(self):\n        \"\"\"\n        Return:\n            tuple: info to save to h5\n        \"\"\"\n        return type(self).__name__, self.name, self.size, self.index\n\n\nclass OutputVariable(VectorVariable):\n\n    @property\n    def cols_loc(self):\n        return self._cols_loc\n\n    @cols_loc.setter\n    def cols_loc(self, value=None):\n        if self._cols_loc is None:\n            self._cols_loc = np.arange(self.first_position, self.end_position, dtype=int) # Original location, should not update\n\n    @property\n    def rows_loc(self):\n        # In the output variables the rows can change, the columns should stay fixed\n        return np.arange(self.first_position, self.end_position, dtype=int)\n\n\nclass InputVariable(VectorVariable):\n\n    @property\n    def rows_loc(self):\n        return self._rows_loc\n\n    @rows_loc.setter\n    def rows_loc(self, value=None):\n        if self._rows_loc is None:\n            self._rows_loc = np.arange(self.first_position, self.end_position, dtype=int) # Original location, should not update\n\n    @property\n    def cols_loc(self):\n        return np.arange(self.first_position, self.end_position, dtype=int)\n\n\nclass StateVariable(VectorVariable):\n    pass\n\n\nclass LinearVector:\n\n    def __init__(self, list_of_vector_variables):\n        self.vector_variables = list_of_vector_variables\n\n        # check they are all the same type\n        self.check_sametype_vars_full_vector()\n\n        # initialise position of variables\n        self.update_indices()\n        self.update_locations()\n\n        self.variable_class = type(self.vector_variables[0])  # class\n\n    @property\n    def num_variables(self):\n        return len(self.vector_variables)\n\n    @property\n    def size(self):\n        return sum([variable.size for variable in self.vector_variables])\n\n    def remove(self, *variable_name_list):\n\n        for variable_name in variable_name_list:\n            list_of_variable_names = [variable.name for variable in self.vector_variables]\n            try:\n                remove_variable_index = list_of_variable_names.index(variable_name)\n            except ValueError:\n                raise ValueError('Trying to remove non-existent {:s} variable'.format(variable_name))\n            else:\n                self.__remove_variable(remove_variable_index)\n\n    def __remove_variable(self, index):\n        self.vector_variables.pop(index)\n        self.update_indices()\n\n    def modify(self, variable_name, **kwargs):\n        \"\"\"\n        Modifies the attributes of the desired variable. The new attributes are passed as **kwargs. If an attribute is\n        not recognised a ``NameError`` is returned.\n\n        Note:\n            If changing the size of the variable, you should then update the linear vector.\n\n        Args:\n            variable_name (str): Name of the variable to modify\n            **kwargs: Key-word arguments containing the attributes of the variable as keys and the new values as values.\n\n        \"\"\"\n        variable = self.get_variable_from_name(variable_name)\n        for var_attribute, new_var_value in kwargs.items():\n            if hasattr(variable, var_attribute):\n                variable.__setattr__(var_attribute, new_var_value)\n            else:\n                raise NameError('Unknown variable attribute {:s}'.format(var_attribute))\n\n    def add(self, vector_variable, **kwargs):\n\n        if isinstance(vector_variable, self.variable_class):\n            self.__add_vector_variable(vector_variable)\n        elif type(vector_variable) is str:\n            new_variable = self.variable_class(name=vector_variable, **kwargs)\n            self.__add_vector_variable(new_variable)\n        else:\n            raise TypeError('Only can add a variable from either a {:s} object or with name and kwargs'.format(\n                self.variable_class.__name__\n            ))\n\n    def append(self, vector_variable, **kwargs):\n        self.update_indices()\n        appending_index = self.num_variables\n        if isinstance(vector_variable, VectorVariable):\n            vector_variable.index = appending_index\n        elif type(vector_variable) is str:\n            kwargs['index'] = appending_index\n        else:\n            raise TypeError('Only can add a variable from either a {:s} object or with name and kwargs'.format(\n                self.variable_class.__name__\n            ))\n\n        self.add(vector_variable, **kwargs)\n\n    def __add_vector_variable(self, vector_variable):\n        list_of_indices = [variable.index for variable in self.vector_variables]\n\n        if vector_variable.index in list_of_indices:\n            raise IndexError('New variable index is already in use')\n        self.vector_variables.append(vector_variable)\n        self.update_indices()\n        self.update_locations()\n\n    def update_indices(self):\n\n        list_of_indices = [variable.index for variable in self.vector_variables]\n        ordered_list = sorted(list_of_indices)\n\n        index_variable_dict = {key_index: self.vector_variables[i] for i, key_index in enumerate(list_of_indices)}\n        updated_list = []\n        for i_var in range(self.num_variables):\n\n            current_variable_index = ordered_list[i_var]\n            current_variable = index_variable_dict[current_variable_index]\n            current_variable.index = i_var\n\n            updated_list.append(current_variable)\n\n        self.vector_variables = updated_list\n\n    def update_locations(self):\n        for i_var in range(self.num_variables):\n            if i_var == 0:\n                self.vector_variables[i_var].first_position = 0\n            elif i_var > 0:\n                # since end item is not included in range methods, set the first position to last variable end position\n                self.vector_variables[i_var].first_position = self.vector_variables[i_var - 1].end_position\n\n    def check_sametype_vars_full_vector(self):\n        variable_class = type(self.vector_variables[0])\n\n        for var in self.vector_variables:\n            if not isinstance(var, variable_class):\n                raise TypeError('All variables in the vector are not of the same kind.')\n\n    @classmethod\n    def merge(cls, vec1, vec2):\n        \"\"\"\n        Merges two instances of LinearVectors\n\n        Args:\n            vec1 (LinearVector): Vector 1\n            vec2 (LinearVector): Vector 2\n\n        Returns:\n            LinearVector: Merged vectors 1 and 2\n        \"\"\"\n        if vec1.variable_class is not vec2.variable_class:\n            raise TypeError('Unable to merge two different kinds of vectors')\n\n        list_of_variables_1 = [variable.copy() for variable in vec1]\n        list_of_variables_2 = [variable.copy() for variable in vec2]\n\n        for ith, variable in enumerate(list_of_variables_1 + list_of_variables_2):\n            variable.index = ith\n\n        merged_vector = cls(list_of_variables_1 + list_of_variables_2)\n        return merged_vector\n\n    @classmethod\n    def transform(cls, linear_vector, to_type):\n        if not (to_type is InputVariable or to_type is StateVariable or to_type is OutputVariable):\n            raise TypeError('Argument should be the class to which the linear vector should be transformed')\n\n        list_of_variables = []\n        for variable in linear_vector.copy():\n            list_of_variables.append(to_type(name=variable.name,\n                                             size=variable.size,\n                                             index=variable.index))\n\n        return cls(list_of_variables)\n\n    @staticmethod\n    def check_connection(output_vector, input_vector):\n        \"\"\"\n        Checks an output_vector can be connected to an input channel.\n\n        \"\"\"\n        with_error = False\n        err_log = ''\n\n        for ith, out_variable in enumerate(output_vector):\n            try:\n                in_variable = input_vector.get_variable_from_name(out_variable.name)\n            except ValueError:\n                err_log += '\\nUnable to connect both systems, no input variable named {:s}\\n'.format(out_variable.name)\n                with_error = True\n            else:\n                if not out_variable.size == in_variable.size:\n                    err_log += 'Variable {:s} and {:s} not the same size'\n                    with_error = True\n                if not out_variable.rows_loc[-1] == in_variable.cols_loc[-1]:\n                    # checking the last index should be sufficient (and more efficient than checking the whole array)\n                    err_log += 'Variable {:s}Output rows not coincident with input columns for variable\\n'.format(\n                        out_variable.name)\n                    err_log += str(out_variable) + '\\n'\n                    err_log += str(in_variable) + '\\n'\n                    with_error = True\n\n        if with_error:\n            raise ValueError(err_log)\n\n    @staticmethod\n    def check_same_vectors(vec1, vec2):\n        \"\"\"\n        Checks that two linear vectors contain the same variables, regardless of type\n        Args:\n            vec1 (LinearVector): Vector 1\n            vec2 (LinearVector): Vector 2\n        \"\"\"\n\n        assert vec1.num_variables == vec2.num_variables, 'Number of variables is not equal'\n        assert vec1.size == vec2.size, 'Size is not equal'\n\n        for i_var in range(vec1.num_variables):\n            assert vec1[i_var].name == vec2[i_var].name, 'Variable name is not the same'\n            assert vec1[i_var].index == vec2[i_var].index, 'Index is not the same'\n            assert vec1[i_var].size == vec2[i_var].size, 'Variable size is not the same'\n            assert vec1[i_var] is not vec2[i_var], 'Variables in LinearVector reference the same object in memory. ' \\\n                                                   'Careful!'\n\n    def differentiate(self):\n        pass\n        # going from second order to first order systems\n\n    def get_variable_from_name(self, name):\n        list_of_variable_names = [variable.name for variable in self.vector_variables]\n        try:\n            variable_index = list_of_variable_names.index(name)\n        except ValueError:\n            raise ValueError('Variable {:s} is non existent'.format(name))\n        else:\n            return self.vector_variables[variable_index]\n\n    def __call__(self, variable_name):\n        \"\"\"\n\n        Args:\n            variable_name (str): Variable name\n\n        Returns:\n            VectorVariable: Vector variable within LinearVector\n        \"\"\"\n        return self.get_variable_from_name(variable_name)\n\n    def copy(self):\n        return copy.deepcopy(self)\n\n    def add_to_h5_file(self, file_handle):\n        \"\"\"\n        Given an h5 handle ``file_handle``, creates and adds a group named with the type of variable and adds the fields\n        ``names`` (encoded in ascii), ``sizes`` and ``indices``.\n\n        Args:\n            file_handle (h5py.File): file handle of h5py.File\n\n        Returns:\n            file_handle\n        \"\"\"\n        variable_data = []\n        for variable in self.vector_variables:\n            variable_data.append(variable.save())\n\n        types, names, sizes, indices = zip(*variable_data)\n\n        # encode strings to bytes\n        names = [name.encode('ascii', 'ignore') for name in names]\n\n        variable_group = file_handle.create_group(types[0])\n        variable_group.create_dataset(name='names', data=names)\n        variable_group.create_dataset(name='sizes', data=sizes, dtype=int)\n        variable_group.create_dataset(name='indices', data=indices, dtype=int)\n\n        return file_handle\n\n    @classmethod\n    def load_from_h5_file(cls, variable_type, variables_data):\n        \"\"\"\n        Loads data from the information saved in an h5file\n\n        Args:\n            variable_type (str): Type of variable (InputVariable, OutputVariable or StateVariable)\n            variables_data (dict): Dictionary containing variable info from h5 with keys: names, sizes and indices\n\n        Returns:\n            LinearVector: of ``variable_type``\n        \"\"\"\n        var_class_dict = {'InputVariable': InputVariable,\n                          'OutputVariable': OutputVariable,\n                          'StateVariable': StateVariable}\n        n_variables = len(variables_data['names'])\n        list_of_variables = []\n        try:\n            var_class = var_class_dict[variable_type]\n        except KeyError:\n            raise KeyError(f'Unknown variable type {variable_type}. Must be either InputVariable, OutputVariable '\n                           f'or StateVariable')\n        for ith_variable in range(n_variables):\n            # name = variables_data['names'][ith_variable].astype('U13')  # decode to unicode\n            name = str(variables_data['names'][ith_variable], 'utf8')  # decode to unicode\n            list_of_variables.append(var_class(name,\n                                               size=variables_data['sizes'][ith_variable],\n                                               index=variables_data['indices'][ith_variable]),\n                                     )\n        return cls(list_of_variables)\n\n    def __iter__(self):\n        return SetIterator(self)\n\n    def __getitem__(self, item):\n        return self.vector_variables[item]\n\n    def __repr__(self):\n        string_out = ''\n        for var in self.vector_variables:\n            try:\n                out_var = str(repr(var))\n            except TypeError:\n                print('Error printing var {:s}'.format(var.name))\n            else:\n                string_out += '\\t' + out_var + '\\n'\n        return string_out\n\n\nclass SetIterator:\n\n    def __init__(self, linear_vector):\n        self._set_cases = linear_vector\n        self._index = 0\n\n    def __next__(self):\n        if self._index < self._set_cases.num_variables:\n            res = self._set_cases.vector_variables[self._index]\n            self._index += 1\n            return res\n\n        raise StopIteration\n"
  },
  {
    "path": "sharpy/linear/utils/sselements.py",
    "content": "\"\"\"\nLinear State Space Element Class\n\n\"\"\"\n\nclass Element(object):\n    \"\"\"\n    State space member\n    \"\"\"\n\n    def __init__(self):\n\n        self.sys_id = str()  # A string with the name of the element\n\n        self.sys = None  # The actual object\n        self.ss = None  # The state space object\n\n        self.settings = dict()\n\n    def initialise(self, data, sys_id):\n\n        self.sys_id = sys_id\n        settings = data.linear.settings[sys_id]  # Load settings, the settings should be stored in data.linear.settings\n        # data.linear.settings should be created in the class above containing the entire set up\n\n        # Get the actual class object (like lingebm) from a dictionary in the same way that it is done for the solvers\n        # in sharpy\n        # sys = sys_from_string(sys_id)\n        # To use the decorator idea we would first need to instantiate the class. Need to see how this is done with NL\n        # SHARPy\n\n\n    def assemble(self):\n        pass"
  },
  {
    "path": "sharpy/postproc/__init__.py",
    "content": "import importlib\nimport os\n\nimport sharpy.utils.solver_interface as solver_interface\nimport sharpy.utils.sharpydir as sharpydir\n\nfiles = solver_interface.solver_list_from_path(os.path.dirname(__file__))\n\nimport_path = os.path.realpath(os.path.dirname(__file__))\nimport_path = import_path.replace(sharpydir.SharpyDir, \"\")\nif import_path[0] == \"/\": import_path = import_path[1:]\nimport_path = import_path.replace(\"/\", \".\")\n\nfor file in files:\n    solver_interface.solvers[file] = importlib.import_module(import_path + \".\" + file)\n"
  },
  {
    "path": "sharpy/postproc/aeroforcescalculator.py",
    "content": "import numpy as np\nimport os\n\nimport sharpy.utils.cout_utils as cout\nfrom sharpy.utils.solver_interface import solver, BaseSolver\nimport sharpy.utils.settings as settings_utils\nimport sharpy.utils.algebra as algebra\nimport sharpy.aero.utils.mapping as mapping\nimport warnings\n\n\n@solver\nclass AeroForcesCalculator(BaseSolver):\n    \"\"\"AeroForcesCalculator\n\n    Calculates the total aerodynamic forces and moments on the frame of reference ``A``.\n\n    \"\"\"\n    solver_id = 'AeroForcesCalculator'\n    solver_classification = 'post-processor'\n\n    settings_types = dict()\n    settings_default = dict()\n    settings_description = dict()\n\n    settings_types['write_text_file'] = 'bool'\n    settings_default['write_text_file'] = False\n    settings_description['write_text_file'] = 'Write ``txt`` file with results'\n\n    settings_types['text_file_name'] = 'str'\n    settings_default['text_file_name'] = 'aeroforces.txt'\n    settings_description['text_file_name'] = 'Text file name'\n\n    settings_types['screen_output'] = 'bool'\n    settings_default['screen_output'] = True\n    settings_description['screen_output'] = 'Show results on screen'\n\n    settings_default['coefficients'] = False\n    settings_types['coefficients'] = 'bool'\n    settings_description['coefficients'] = 'Calculate aerodynamic coefficients'\n\n    settings_default['lifting_surfaces'] = True\n    settings_types['lifting_surfaces'] = 'bool'\n    settings_description['lifting_surfaces'] = 'Includes aerodynamic forces from lifting surfaces'\n\n    settings_default['nonlifting_body'] = False\n    settings_types['nonlifting_body'] = 'bool'\n    settings_description['nonlifting_body'] = 'Includes aerodynamic forces from nonlifting bodies'\n\n    settings_types['q_ref'] = 'float'\n    settings_default['q_ref'] = 1\n    settings_description['q_ref'] = 'Reference dynamic pressure'\n\n    settings_types['S_ref'] = 'float'\n    settings_default['S_ref'] = 1\n    settings_description['S_ref'] = 'Reference area'\n\n    settings_types['b_ref'] = 'float'\n    settings_default['b_ref'] = 1\n    settings_description['b_ref'] = 'Reference span'\n\n    settings_types['c_ref'] = 'float'\n    settings_default['c_ref'] = 1\n    settings_description['c_ref'] = 'Reference chord'\n\n    settings_types['u_inf_dir'] = 'list(float)'\n    settings_default['u_inf_dir'] = [1., 0., 0.]\n    settings_description['u_inf_dir'] = 'Flow direction'\n\n    settings_table = settings_utils.SettingsTable()\n    __doc__ += settings_table.generate(settings_types, settings_default, settings_description)\n\n    def __init__(self):\n\n        self.settings = None\n        self.data = None\n        self.ts_max = 0\n\n        self.folder = None\n        self.caller = None\n\n        self.table = None\n        self.rot = None\n        self.moment_reference_location = np.array([0., 0., 0.])\n\n    def initialise(self, data, custom_settings=None, caller=None, restart=False):\n        self.data = data\n        self.settings = data.settings[self.solver_id]\n        self.ts_max = len(self.data.structure.timestep_info)\n        settings_utils.to_custom_types(self.settings, self.settings_types, self.settings_default)\n        self.caller = caller\n\n        self.folder = data.output_folder + '/forces/'\n        if not os.path.exists(self.folder):\n            os.makedirs(self.folder)\n\n        if self.settings['screen_output']:\n            if self.settings['coefficients']:\n                self.table = cout.TablePrinter(7, field_length=12, field_types=['g'] + 6 * ['f'])\n                self.table.print_header(['tstep', 'Cfx_g', 'Cfy_g', 'Cfz_g', 'Cmx_g', 'Cmy_g', 'Cmz_g'])\n            else:\n                self.table = cout.TablePrinter(7, field_length=12, field_types=['g'] + 6 * ['e'])\n                self.table.print_header(['tstep', 'fx_g', 'fy_g', 'fz_g', 'mx_g', 'my_g', 'mz_g'])\n\n    def run(self, **kwargs):\n\n        online = settings_utils.set_value_or_default(kwargs, 'online', False)\n\n        if online:\n            self.ts_max = len(self.data.structure.timestep_info)\n            self.calculate_forces(-1)\n\n            if self.settings['screen_output']:\n                self.screen_output(-1)\n        else:\n            for ts in range(self.ts_max):\n                self.calculate_forces(ts)\n                if self.settings['screen_output']:\n                    self.screen_output(ts)\n            cout.cout_wrap('...Finished', 1)\n\n        if self.settings['write_text_file']:\n            self.file_output(self.settings['text_file_name'])\n        return self.data\n\n    def calculate_forces(self, ts):\n        self.rot = algebra.quat2rotation(self.data.structure.timestep_info[ts].quat)  # R_GA\n\n        # flow rotation angle from x and z components of flow direction\n        # WARNING: this will give incorrect results when there is sideslip\n        rot_xy = np.arctan2(-self.settings['u_inf_dir'][2], self.settings['u_inf_dir'][0])\n        rmat_xy = algebra.euler2rot((0., rot_xy, 0.))\n\n        # Forces per surface in A frame relative to the flow\n        force = self.data.aero.timestep_info[ts].forces\n        unsteady_force = self.data.aero.timestep_info[ts].dynamic_forces\n\n        n_surf = self.data.aero.n_surf\n\n        rmat = np.block([[self.rot @ rmat_xy.T, np.zeros((3, 3))], [np.zeros((3, 3)), self.rot @ rmat_xy.T]])\n        force_g = [np.moveaxis(np.squeeze(rmat @ np.expand_dims(np.moveaxis(\n            force[i], (0, 1, 2), (2, 0, 1)), -1)), source=(0, 1, 2), destination=(1, 2, 0))\n                   for i in range(n_surf)]\n        unsteady_force_g = [np.moveaxis(np.squeeze(rmat @ np.expand_dims(np.moveaxis(\n            unsteady_force[i], (0, 1, 2), (2, 0, 1)), -1)), source=(0, 1, 2), destination=(1, 2, 0))\n                   for i in range(n_surf)]\n\n        for i_surf in range(n_surf):\n            (\n                self.data.aero.timestep_info[ts].inertial_steady_forces[i_surf, 0:3],\n                self.data.aero.timestep_info[ts].inertial_unsteady_forces[i_surf, 0:3],\n                self.data.aero.timestep_info[ts].body_steady_forces[i_surf, 0:3],\n                self.data.aero.timestep_info[ts].body_unsteady_forces[i_surf, 0:3]\n            ) = self.calculate_forces_for_isurf_in_g_frame(force_g[i_surf], unsteady_force=unsteady_force_g[i_surf])\n\n        if self.settings[\"nonlifting_body\"]:\n            for i_surf in range(self.data.nonlifting_body.n_surf):\n                (\n                    self.data.nonlifting_body.timestep_info[ts].inertial_steady_forces[i_surf, 0:3],\n                    self.data.nonlifting_body.timestep_info[ts].body_steady_forces[i_surf, 0:3],\n                ) = self.calculate_forces_for_isurf_in_g_frame(\n                    self.data.nonlifting_body.timestep_info[ts].forces[i_surf], nonlifting=True)\n\n        # Convert to forces in B frame\n        try:\n            steady_forces_b = self.data.structure.timestep_info[ts].postproc_node['aero_steady_forces']\n        except KeyError:\n            if self.settings[\"nonlifting_body\"]:\n                warnings.warn(\n                    'Nonlifting forces are not considered in aero forces calculation since forces cannot not be retrieved from postproc node.')\n            steady_forces_b = self.map_forces_beam_dof(self.data.aero, ts, force_g)\n\n        try:\n            unsteady_forces_b = self.data.structure.timestep_info[ts].postproc_node['aero_unsteady_forces']\n        except KeyError:\n            unsteady_forces_b = self.map_forces_beam_dof(self.data.aero, ts, unsteady_force_g)\n        # Convert to forces in A frame\n        steady_forces_a = self.data.structure.timestep_info[ts].nodal_b_for_2_a_for(steady_forces_b,\n                                                                                    self.data.structure)\n\n        unsteady_forces_a = self.data.structure.timestep_info[ts].nodal_b_for_2_a_for(unsteady_forces_b,\n                                                                                      self.data.structure)\n\n        self.data.aero.timestep_info[ts].total_steady_body_forces = \\\n            rmat @ mapping.total_forces_moments(steady_forces_a,\n                                                self.data.structure.timestep_info[ts].pos,\n                                                ref_pos=self.moment_reference_location)\n        self.data.aero.timestep_info[ts].total_unsteady_body_forces = \\\n            rmat @ mapping.total_forces_moments(unsteady_forces_a,\n                                                self.data.structure.timestep_info[ts].pos,\n                                                ref_pos=self.moment_reference_location)\n\n        # Express total forces in G frame\n        self.data.aero.timestep_info[ts].total_steady_inertial_forces = \\\n            np.block([[self.rot, np.zeros((3, 3))],\n                      [np.zeros((3, 3)), self.rot]]).dot(\n                self.data.aero.timestep_info[ts].total_steady_body_forces)\n\n        self.data.aero.timestep_info[ts].total_unsteady_inertial_forces = \\\n            np.block([[self.rot, np.zeros((3, 3))],\n                      [np.zeros((3, 3)), self.rot]]).dot(\n                self.data.aero.timestep_info[ts].total_unsteady_body_forces)\n\n    def calculate_forces_for_isurf_in_g_frame(self, force, unsteady_force=None, nonlifting=False):\n        \"\"\"\n            Forces for a surface in G frame\n        \"\"\"\n        # Forces per surface in G frame\n        total_steady_force = np.zeros((3,))\n        total_unsteady_force = np.zeros((3,))\n        _, n_rows, n_cols = force.shape\n        for i_m in range(n_rows):\n            for i_n in range(n_cols):\n                total_steady_force += force[0:3, i_m, i_n]\n                if not nonlifting:\n                    total_unsteady_force += unsteady_force[0:3, i_m, i_n]\n        if not nonlifting:\n            return total_steady_force, total_unsteady_force, np.dot(self.rot.T, total_steady_force), np.dot(self.rot.T,\n                                                                                                            total_unsteady_force)\n        else:\n            return total_steady_force, np.dot(self.rot.T, total_steady_force)\n\n    def map_forces_beam_dof(self, aero_data, ts, force):\n        struct_tstep = self.data.structure.timestep_info[ts]\n        aero_forces_beam_dof = mapping.aero2struct_force_mapping(force,\n                                                                 aero_data.struct2aero_mapping,\n                                                                 aero_data.timestep_info[ts].zeta,\n                                                                 struct_tstep.pos,\n                                                                 struct_tstep.psi,\n                                                                 None,\n                                                                 self.data.structure.connectivities,\n                                                                 struct_tstep.cag())\n        return aero_forces_beam_dof\n\n    def calculate_coefficients(self, fx, fy, fz, mx, my, mz):\n        qS = self.settings['q_ref'] * self.settings['S_ref']\n        return fx / qS, fy / qS, fz / qS, mx / qS / self.settings['b_ref'], my / qS / self.settings['c_ref'], \\\n               mz / qS / self.settings['b_ref']\n\n    def screen_output(self, ts):\n        # print time step total aero forces\n        forces = np.zeros(3)\n        moments = np.zeros(3)\n\n        aero_tstep = self.data.aero.timestep_info[ts]\n        forces += aero_tstep.total_steady_inertial_forces[:3] + aero_tstep.total_unsteady_inertial_forces[:3]\n        moments += aero_tstep.total_steady_inertial_forces[3:] + aero_tstep.total_unsteady_inertial_forces[3:]\n\n        if self.settings['coefficients']:  # TODO: Check if coefficients have to be computed differently for fuselages\n            Cfx, Cfy, Cfz, Cmx, Cmy, Cmz = self.calculate_coefficients(*forces, *moments)\n            self.table.print_line([ts, Cfx, Cfy, Cfz, Cmx, Cmy, Cmz])\n        else:\n            self.table.print_line([ts, *forces, *moments])\n\n    def file_output(self, filename):\n        # assemble forces/moments matrix\n        # (1 timestep) + (3+3 inertial steady+unsteady) + (3+3 body steady+unsteady)\n        force_matrix = np.zeros((self.ts_max, 1 + 3 + 3 + 3 + 3))\n        moment_matrix = np.zeros((self.ts_max, 1 + 3 + 3 + 3 + 3))\n        for ts in range(self.ts_max):\n            aero_tstep = self.data.aero.timestep_info[ts]\n            i = 0\n            force_matrix[ts, i] = ts\n            moment_matrix[ts, i] = ts\n            i += 1\n\n            # Steady forces/moments G\n            force_matrix[ts, i:i + 3] = aero_tstep.total_steady_inertial_forces[:3]\n            moment_matrix[ts, i:i + 3] = aero_tstep.total_steady_inertial_forces[3:]\n            i += 3\n\n            # Unsteady forces/moments G\n            force_matrix[ts, i:i + 3] = aero_tstep.total_unsteady_inertial_forces[:3]\n            moment_matrix[ts, i:i + 3] = aero_tstep.total_unsteady_inertial_forces[3:]\n            i += 3\n\n            # Steady forces/moments A\n            force_matrix[ts, i:i + 3] = aero_tstep.total_steady_body_forces[:3]\n            moment_matrix[ts, i:i + 3] = aero_tstep.total_steady_body_forces[3:]\n            i += 3\n\n            # Unsteady forces/moments A\n            force_matrix[ts, i:i + 3] = aero_tstep.total_unsteady_body_forces[:3]\n            moment_matrix[ts, i:i + 3] = aero_tstep.total_unsteady_body_forces[3:]\n\n        header = ''\n        header += 'tstep, '\n        header += 'fx_steady_G, fy_steady_G, fz_steady_G, '\n        header += 'fx_unsteady_G, fy_unsteady_G, fz_unsteady_G, '\n        header += 'fx_steady_a, fy_steady_a, fz_steady_a, '\n        header += 'fx_unsteady_a, fy_unsteady_a, fz_unsteady_a'\n\n        np.savetxt(self.folder + 'forces_' + filename,\n                   force_matrix,\n                   fmt='%i' + ', %10e' * (np.shape(force_matrix)[1] - 1),\n                   delimiter=',',\n                   header=header,\n                   comments='#')\n\n        header = ''\n        header += 'tstep, '\n        header += 'mx_steady_G, my_steady_G, mz_steady_G, '\n        header += 'mx_unsteady_G, my_unsteady_G, mz_unsteady_G, '\n        header += 'mx_steady_a, my_steady_a, mz_steady_a, '\n        header += 'mx_unsteady_a, my_unsteady_a, mz_unsteady_a'\n\n        np.savetxt(self.folder + 'moments_' + filename,\n                   moment_matrix,\n                   fmt='%i' + ', %10e' * (np.shape(moment_matrix)[1] - 1),\n                   delimiter=',',\n                   header=header,\n                   comments='#')\n"
  },
  {
    "path": "sharpy/postproc/aerogridplot.py",
    "content": "import os\n\nimport numpy as np\n\nimport sharpy.utils.cout_utils as cout\nfrom sharpy.utils.solver_interface import solver, BaseSolver\nimport sharpy.utils.settings as su\nimport sharpy.aero.utils.uvlmlib as uvlmlib\nfrom sharpy.utils.constants import vortex_radius_def\n\nfrom sharpy.utils.plotutils import plot_frame_to_vtk\n\n\n@solver\nclass AerogridPlot(BaseSolver):\n    \"\"\"\n    Aerodynamic Grid Plotter\n\n    \"\"\"\n    solver_id = 'AerogridPlot'\n    solver_classification = 'post-processor'\n\n    settings_types = dict()\n    settings_default = dict()\n    settings_description = dict()\n\n    settings_types['include_rbm'] = 'bool'\n    settings_default['include_rbm'] = True\n    settings_description['include_rbm'] = 'Include rigid body motions'\n\n    settings_types['include_forward_motion'] = 'bool'\n    settings_default['include_forward_motion'] = False\n    settings_description['include_forward_motion'] = 'Include forward motion'\n\n    settings_types['include_applied_forces'] = 'bool'\n    settings_default['include_applied_forces'] = True\n    settings_description['include_applied_forces'] = 'Include applied aerodynamic forces at the vertices'\n\n    settings_types['include_unsteady_applied_forces'] = 'bool'\n    settings_default['include_unsteady_applied_forces'] = False\n    settings_description['include_unsteady_applied_forces'] = 'Include unsteady aerodynamic forces at the vertices'\n\n    settings_types['minus_m_star'] = 'int'\n    settings_default['minus_m_star'] = 0\n    settings_description['minus_m_star'] = 'Subtract a number of wake panels that will not be plotted'\n\n    settings_types['name_prefix'] = 'str'\n    settings_default['name_prefix'] = ''\n    settings_description['name_prefix'] = 'Prefix to add to file name'\n\n    settings_types['u_inf'] = 'float'\n    settings_default['u_inf'] = 0.\n    settings_description['u_inf'] = 'Free stream velocity'\n\n    settings_types['dt'] = 'float'\n    settings_default['dt'] = 0.\n    settings_description['dt'] = 'Time step increment'\n\n    settings_types['include_velocities'] = 'bool'\n    settings_default['include_velocities'] = False\n    settings_description['include_velocities'] = 'Include induced velocities at the vertices'\n\n    settings_types['include_incidence_angle'] = 'bool'\n    settings_default['include_incidence_angle'] = False\n    settings_description['include_incidence_angle'] = 'Include panel incidence angle'\n\n    settings_types['plot_nonlifting_surfaces'] = 'bool'\n    settings_default['plot_nonlifting_surfaces'] = False\n    settings_description['plot_nonlifting_surfaces'] = 'Plot nonlifting surfaces'\n    \n    settings_types['plot_lifting_surfaces'] = 'bool'\n    settings_default['plot_lifting_surfaces'] = False\n    settings_description['plot_lifting_surfaces'] = 'Plot nonlifting surfaces'\n\n    settings_types['num_cores'] = 'int'\n    settings_default['num_cores'] = 1\n    settings_description['num_cores'] = 'Number of cores used to compute velocities/angles'\n\n    settings_types['vortex_radius'] = 'float'\n    settings_default['vortex_radius'] = vortex_radius_def\n    settings_description['vortex_radius'] = 'Distance below which inductions are not computed'\n\n    settings_types['stride'] = 'int'\n    settings_default['stride'] = 1\n    settings_description['stride'] = 'Number of steps between the execution calls when run online'\n    \n    settings_types['save_wake'] = 'bool'\n    settings_default['save_wake'] = True\n    settings_description['save_wake'] = 'Plot the wake'\n    \n    table = su.SettingsTable()\n    __doc__ += table.generate(settings_types, settings_default, settings_description)\n\n    def __init__(self):\n        self.settings = None\n        self.data = None\n\n        self.folder = None\n        self.body_filename = ''\n        self.wake_filename = ''\n        self.nonlifting_filename = ''\n        self.ts_max = 0\n        self.caller = None\n\n    def initialise(self, data, custom_settings=None, caller=None, restart=False):\n        self.data = data\n        if custom_settings is None:\n            self.settings = data.settings[self.solver_id]\n        else:\n            self.settings = custom_settings\n        su.to_custom_types(self.settings, self.settings_types, self.settings_default)\n        self.ts_max = self.data.ts + 1\n        # create folder for containing files if necessary\n        self.folder = data.output_folder + '/aero/'\n        if not os.path.exists(self.folder):\n            os.makedirs(self.folder)\n        self.body_filename = (self.folder +\n                              self.settings['name_prefix'] +\n                              'body_' +\n                              self.data.settings['SHARPy']['case'])\n        self.wake_filename = (self.folder +\n                              self.settings['name_prefix'] +\n                              'wake_' +\n                              self.data.settings['SHARPy']['case'])\n        self.nonlifting_filename = (self.folder +\n                                    self.settings['name_prefix'] +\n                                    'nonlifting_' +\n                                    self.data.settings['SHARPy']['case'])\n        self.caller = caller\n\n    def run(self, **kwargs):\n    \n        online = kwargs.get('online', False)\n\n        # TODO: Create a dictionary to plot any variable as in beamplot\n        if not online:\n            for self.ts in range(self.ts_max):\n                if self.data.structure.timestep_info[self.ts] is not None:\n                    self.plot_body()\n                    self.plot_wake()\n                    if self.settings['plot_nonlifting_surfaces']:\n                        self.plot_nonlifting_surfaces()\n            cout.cout_wrap('...Finished', 1)\n        elif (self.data.ts % self.settings['stride'] == 0):\n            aero_tsteps = len(self.data.aero.timestep_info) - 1\n            struct_tsteps = len(self.data.structure.timestep_info) - 1\n            self.ts = np.max((aero_tsteps, struct_tsteps))\n            self.plot_body()\n            self.plot_wake()\n            if self.settings['plot_nonlifting_surfaces']:\n                self.plot_nonlifting_surfaces()\n        return self.data\n\n    def plot_body(self):\n\n        aero_tstep = self.data.aero.timestep_info[self.ts]\n        struct_tstep = self.data.structure.timestep_info[self.ts]\n\n        if self.settings['include_incidence_angle']:\n            aero_tstep.postproc_cell['incidence_angle'] = []\n            for isurf in range(aero_tstep.n_surf):\n                aero_tstep.postproc_cell['incidence_angle'].append(\n                               np.zeros_like(aero_tstep.gamma[isurf]))\n\n            uvlmlib.uvlm_calculate_incidence_angle(aero_tstep,\n                                                   struct_tstep)\n\n        for i_surf in range(aero_tstep.n_surf):\n            filename = f\"{self.body_filename}_{i_surf:02d}_{self.ts:06d}.vtu\"\n\n            zeta = np.moveaxis(aero_tstep.zeta[i_surf], 0, -1).copy()  # [m+1, n+1, 3]\n            zeta_dot = np.moveaxis(aero_tstep.zeta_dot[i_surf][:3, ...], 0, -1).copy()  # [3, m+1, n+1]\n            gamma = aero_tstep.gamma[i_surf].copy()  # [m, n]\n            gamma_dot = aero_tstep.gamma_dot[i_surf].copy()  # [m, n]\n            normals = np.moveaxis(aero_tstep.normals[i_surf], 0, -1).copy()  # [m, n, 3]\n            surf_id = np.ones(gamma.shape, dtype=int) * i_surf\n\n            if self.settings['include_rbm']:\n                if struct_tstep.mb_dict is None:\n                    zeta += np.expand_dims(struct_tstep.for_pos[:3], (0, 1))\n                else:\n                    zeta += np.expand_dims(self.data.structure.timestep_info[0].cga() @ struct_tstep.for_pos[:3], (0, 1))\n            if self.settings['include_forward_motion']:\n                zeta[..., 0] -= self.settings['dt'] * self.ts * self.settings['u_inf']\n\n            if self.settings['include_incidence_angle']:\n                incidence_angle = aero_tstep.postproc_cell['incidence_angle'][i_surf]\n            else:\n                incidence_angle = np.zeros(gamma.shape)\n\n\n            point_struct_id = np.broadcast_to(np.expand_dims(self.data.aero.aero2struct_mapping[i_surf], 0), zeta.shape[:2])\n            point_cf = np.moveaxis(aero_tstep.forces[i_surf][:3, ...], 0, -1)\n\n            try:\n                point_unsteady_cf = np.moveaxis(aero_tstep.dynamic_forces[i_surf][:3, ...], 0, -1)\n            except AttributeError:\n                point_unsteady_cf = np.zeros(zeta.shape)\n\n            try:\n                u_inf = np.moveaxis(aero_tstep.u_ext[i_surf][:3, ...], 0, -1)\n            except AttributeError:\n                u_inf = np.zeros(zeta.shape)\n\n\n            if self.settings['include_velocities']:\n                vel = uvlmlib.uvlm_calculate_total_induced_velocity_at_points(aero_tstep,\n                                                                              zeta.reshape(-1, 3),\n                                                                              self.settings['vortex_radius'],\n                                                                              struct_tstep.for_pos,\n                                                                              self.settings['num_cores']).reshape(zeta.shape)\n            else:\n                vel = np.zeros(zeta.shape)\n\n            plot_frame_to_vtk(zeta,\n                              filename,\n                              node_scalar_data={'point_struct_id': point_struct_id},\n                              node_vector_data={'zeta_dot': zeta_dot, 'point_steady_force': point_cf, 'point_unsteady_force': point_unsteady_cf, 'u_inf': u_inf, 'velocity': vel},\n                              cell_scalar_data={'gamma': gamma, \"gamma_dot\": gamma_dot, \"incidence_angle\": incidence_angle, 'surf_id': surf_id},\n                              cell_vector_data={'panel_normal': normals},)\n\n\n    def plot_wake(self):\n        for i_surf in range(self.data.aero.timestep_info[self.ts].n_surf):\n            filename = f\"{self.wake_filename}_{i_surf:02d}_{self.ts:06d}.vtu\"\n\n            zeta_star = np.moveaxis(self.data.aero.timestep_info[self.ts].zeta_star[i_surf], 0, -1).copy() # [m_star+1, n+1, 3]\n            gamma = self.data.aero.timestep_info[self.ts].gamma_star[i_surf].copy()  # [m_star, n]\n\n            surf_id = np.ones(gamma.shape, dtype=int) * i_surf\n\n            if self.settings['include_rbm']:\n                if self.data.structure.timestep_info[self.ts].mb_dict is None:\n                    zeta_star += np.expand_dims(self.data.structure.timestep_info[self.ts].for_pos[:3], (0, 1))\n                else:\n                    zeta_star += np.expand_dims(self.data.structure.timestep_info[0].cga()\n                                                @ self.data.structure.timestep_info[self.ts].for_pos[:3], (0, 1))\n            if self.settings['include_forward_motion']:\n                zeta_star[..., 0] -= self.settings['dt'] * self.ts * self.settings['u_inf']\n\n            plot_frame_to_vtk(\n                zeta_star,\n                filename,\n                node_vector_data={},\n                cell_scalar_data={\n                    \"gamma\": gamma,\n                    \"surf_id\": surf_id,\n                },\n            )\n\n\n    def plot_nonlifting_surfaces(self):\n        nonlifting_tstep = self.data.nonlifting_body.timestep_info[self.ts]\n        struct_tstep = self.data.structure.timestep_info[self.ts]\n\n        for i_surf in range(nonlifting_tstep.n_surf):\n            filename = (self.nonlifting_filename +\n                        '_' +\n                        '%02u_' % i_surf +\n                        '%06u' % self.ts+\n                        '.vtu')\n\n            dims = nonlifting_tstep.dimensions[i_surf, :]\n            point_data_dim = (dims[0]+1)*(dims[1]+1)  # + (dims_star[0]+1)*(dims_star[1]+1)\n            panel_data_dim = (dims[0])*(dims[1])  # + (dims_star[0])*(dims_star[1])\n\n            coords = np.zeros((point_data_dim, 3))\n            conn = []\n            panel_id = np.zeros((panel_data_dim,), dtype=int)\n            panel_surf_id = np.zeros((panel_data_dim,), dtype=int)\n            panel_sigma = np.zeros((panel_data_dim,))\n            normal = np.zeros((panel_data_dim, 3))\n            point_struct_id = np.zeros((point_data_dim,), dtype=int)\n            point_cf = np.zeros((point_data_dim, 3))\n            u_inf = np.zeros((point_data_dim, 3))\n            counter = -1\n\n            # coordinates of corners\n            for i_n in range(dims[1]+1):\n                for i_m in range(dims[0]+1):\n                    counter += 1\n                    coords[counter, :] = nonlifting_tstep.zeta[i_surf][:, i_m, i_n]\n                    # TODO: include those for nonlifting body (are they different for nonlifting coordinates?)\n                    if self.settings['include_rbm']:\n                        coords[counter, :] += struct_tstep.for_pos[0:3]\n                    if self.settings['include_forward_motion']:\n                        coords[counter, 0] -= self.settings['dt']*self.ts*self.settings['u_inf']\n            counter = -1\n            node_counter = -1\n            for i_n in range(dims[1] + 1):\n                global_counter = self.data.nonlifting_body.aero2struct_mapping[i_surf][i_n]\n                for i_m in range(dims[0] + 1):\n                    node_counter += 1\n                    # point data\n                    point_struct_id[node_counter] = global_counter\n                    point_cf[node_counter, :] = nonlifting_tstep.forces[i_surf][0:3, i_m, i_n]\n                    try:\n                        u_inf[node_counter, :] = nonlifting_tstep.u_ext[i_surf][0:3, i_m, i_n]\n                    except AttributeError:\n                        pass\n                    if i_n < dims[1] and i_m < dims[0]:\n                        counter += 1\n                    else:\n                        continue\n\n                    conn.append([node_counter + 0,\n                                 node_counter + 1,\n                                 node_counter + dims[0]+2,\n                                 node_counter + dims[0]+1])\n                    # cell data\n                    normal[counter, :] = nonlifting_tstep.normals[i_surf][:, i_m, i_n]\n                    panel_id[counter] = counter\n                    panel_surf_id[counter] = i_surf\n                    panel_sigma[counter] = nonlifting_tstep.sigma[i_surf][i_m, i_n]\n\n            from tvtk.api import tvtk, write_data\n            ug = tvtk.UnstructuredGrid(points=coords)\n            ug.set_cells(tvtk.Quad().cell_type, conn)\n            ug.cell_data.scalars = panel_id\n            ug.cell_data.scalars.name = 'panel_n_id'\n            ug.cell_data.add_array(panel_surf_id)\n            ug.cell_data.get_array(1).name = 'panel_surface_id'\n            ug.cell_data.add_array(panel_sigma)\n            ug.cell_data.get_array(2).name = 'panel_sigma'\n            ug.cell_data.vectors = normal\n            ug.cell_data.vectors.name = 'panel_normal'\n            ug.point_data.scalars = np.arange(0, coords.shape[0])\n            ug.point_data.scalars.name = 'n_id'\n            ug.point_data.add_array(point_struct_id)\n            ug.point_data.get_array(1).name = 'point_struct_id'\n            ug.point_data.add_array(point_cf)\n            ug.point_data.get_array(2).name = 'point_steady_force'\n            ug.point_data.add_array(u_inf)\n            ug.point_data.get_array(3).name = 'u_inf'\n            write_data(ug, filename)\n"
  },
  {
    "path": "sharpy/postproc/asymptoticstability.py",
    "content": "import os\nimport warnings\nimport numpy as np\nimport scipy.linalg as sclalg\nimport sharpy.utils.settings as settings_utils\nfrom sharpy.utils.solver_interface import solver, BaseSolver, initialise_solver\nimport sharpy.utils.cout_utils as cout\nimport sharpy.utils.algebra as algebra\nimport sharpy.solvers.lindynamicsim as lindynamicsim\nimport sharpy.structure.utils.modalutils as modalutils\nimport sharpy.utils.frequencyutils as frequencyutils\nimport sharpy.linear.src.libss as libss\nimport h5py\n\n\n@solver\nclass AsymptoticStability(BaseSolver):\n    \"\"\"\n    Calculates the asymptotic stability properties of the linearised system by computing\n    the corresponding eigenvalues and eigenvectors.\n\n    The output of this solver is written to the ``stability`` directory in the case output.\n\n    The stability of the systems specified in ``target_systems`` is performed. If the system has been previously\n    scaled, a ``reference_velocity`` should be provided to compute the stability at such point.\n\n    The eigenvalues can be truncated, keeping a minimum ``num_evals`` (sorted by decreasing real part) or by limiting\n    the higher frequency modes through ``frequency_cutoff``.\n\n    Results can be saved to file using ``export_eigenvalues``. The setting ``display_root_locus`` shows a simple\n    Argand diagram where the continuous time eigenvalues are displayed.\n\n    The eigenvectors can be displayed (in .vtu format for use in Paraview) with the ``modes_to_plot`` setting, whereby\n    the user specifies the mode indices that are to be plotted (sorted with in the same way as the eigenvalue table,\n    i.e. by decreasing real part). A snapshot of the eigenvector is produced for the 0, 45, 90 and 135 degree phases.\n    This feature currently supports the flexible structural modes and does not show the rigid body contribution.\n    The output is written to the ``stability/modes`` folder and includes the structure at the\n    reference linearisation state.\n    \"\"\"\n    solver_id = 'AsymptoticStability'\n    solver_classification = 'post-processor'\n\n    settings_types = dict()\n    settings_default = dict()\n    settings_description = dict()\n    settings_options = dict()\n\n    settings_types['print_info'] = 'bool'\n    settings_default['print_info'] = False\n    settings_description['print_info'] = 'Print information and table of eigenvalues'\n\n    settings_types['reference_velocity'] = 'float'\n    settings_default['reference_velocity'] = 1.\n    settings_description['reference_velocity'] = 'Reference velocity at which to compute eigenvalues for scaled systems'\n\n    settings_types['frequency_cutoff'] = 'float'\n    settings_default['frequency_cutoff'] = 0\n    settings_description['frequency_cutoff'] = 'Truncate higher frequency modes. If zero none are truncated'\n\n    settings_types['export_eigenvalues'] = 'bool'\n    settings_default['export_eigenvalues'] = False\n    settings_description['export_eigenvalues'] = 'Save eigenvalues and eigenvectors to file.'\n\n    settings_types['output_file_format'] = 'str'\n    settings_default['output_file_format'] = 'dat'\n    settings_description['output_file_format'] = 'Eigenvalue/eigenvector output file format. HDF5 or text (.dat) files.'\n    settings_options['output_file_format'] = ['h5', 'dat']\n\n    settings_types['display_root_locus'] = 'bool'\n    settings_default['display_root_locus'] = False\n    settings_description['display_root_locus'] = 'Show plot with eigenvalues on Argand diagram'\n\n    settings_types['velocity_analysis'] = 'list(float)'\n    settings_default['velocity_analysis'] = []\n    settings_description['velocity_analysis'] = 'List containing min, max and number ' \\\n                                                'of velocities to analyse the system'\n\n    settings_types['target_system'] = 'list(str)'\n    settings_default['target_system'] = ['aeroelastic']\n    settings_description['target_system'] = 'System or systems for which to find frequency response.'\n    settings_options['target_system'] = ['aeroelastic', 'aerodynamic', 'structural']\n\n    settings_types['num_evals'] = 'int'\n    settings_default['num_evals'] = 200\n    settings_description['num_evals'] = 'Number of eigenvalues to retain.'\n\n    settings_types['modes_to_plot'] = 'list(int)'\n    settings_default['modes_to_plot'] = []\n    settings_description['modes_to_plot'] = 'List of mode numbers to plot. Plots the 0, 45, 90 and 135' \\\n                                            'degree phases.'\n\n    settings_table = settings_utils.SettingsTable()\n    __doc__ += settings_table.generate(settings_types, settings_default, settings_description)\n\n    def __init__(self):\n        self.settings = None\n        self.data = None\n        self.folder = None\n        self.print_info = False\n\n        self.frequency_cutoff = np.inf\n        self.num_evals = None\n\n        self.postprocessors = dict()\n        self.with_postprocessors = False\n        self.caller = None\n\n    def initialise(self, data, custom_settings=None, caller=None, restart=False):\n        self.data = data\n\n        if custom_settings is None:\n            self.settings = data.settings[self.solver_id]\n        else:\n            self.settings = custom_settings\n\n        settings_utils.to_custom_types(self.settings, self.settings_types, self.settings_default, \n                           options=self.settings_options, no_ctype=True)\n\n        self.num_evals = self.settings['num_evals']\n\n        self.folder = data.output_folder + '/stability/'\n        if not os.path.exists(self.folder):\n            os.makedirs(self.folder)\n\n        if self.settings['print_info']:\n            self.print_info = True\n        else:\n            self.print_info = False\n\n        try:\n            self.frequency_cutoff = self.settings['frequency_cutoff']\n        except AttributeError:\n            self.frequency_cutoff = float(self.settings['frequency_cutoff'])\n\n        if self.frequency_cutoff == 0:\n            self.frequency_cutoff = np.inf\n\n        self.caller = caller\n\n    def run(self, **kwargs):\n        \"\"\"\n        Computes the eigenvalues and eigenvectors\n\n        Returns:\n            eigenvalues (np.ndarray): Eigenvalues sorted and frequency truncated\n            eigenvectors (np.ndarray): Corresponding mode shapes\n\n        \"\"\"\n        online = settings_utils.set_value_or_default(kwargs, 'online', False)\n\n        # if the system is scaled, only one system can be analysed\n        if self.settings['reference_velocity'] != 1. and self.data.linear.linear_system.uvlm.scaled:\n            ss_list = [self.data.linear.linear_system.update(self.settings['reference_velocity'])]\n            not_scaled = False\n            system_name_list = ['aeroelastic']\n            if len(self.settings['target_system']) > 1:\n                cout.cout_wrap('Warning: the system is scaled thus the only analysis currently supported is'\n                               ' for the aeroelastic system', 3)\n        else:\n            ss_list = [frequencyutils.find_target_system(self.data, system_name) for system_name in\n                       self.settings['target_system']]\n            not_scaled = True\n            system_name_list = self.settings['target_system']\n\n        self.compute_eigenvalues(ss_list, system_name_list, not_scaled)\n\n        return self.data\n\n    def compute_eigenvalues(self, ss, system_name_list=None, not_scaled=True):\n        \"\"\"\n        Computes the eigenvalues and eigenvectors of the state-space\n\n        Args:\n            ss (libss.StateSpace or list([libss.StateSpace]): State-space or list of state-spaces\n            system_name_list (list([str]): Names of systems in the case multiple systems are required\n            not_scaled (bool): Flag to indicate whether the systems are assembled in non-dimensional time\n        \"\"\"\n\n        if type(ss) is libss.StateSpace:\n            ss_list = [ss]\n            if system_name_list is None:\n                system_name_list = ['']\n        elif type(ss) is list:\n            ss_list = ss\n\n            if system_name_list is None:\n                system_name_list = []\n                for sys, sys_number in enumerate(ss_list):\n                    system_name_list.append(f'system{sys_number:g}')\n                    if type(sys) is not libss.StateSpace:\n                        raise TypeError(f'State-space {sys_number} is not type libss.StateSpace')\n        else:\n            raise TypeError('ss input must be either a libss.StateSpace instance or a list[libss.StateSpace]')\n\n        for ith, system in enumerate(ss_list):\n            system_name = system_name_list[ith]\n\n            if self.print_info:\n                cout.cout_wrap('Calculating %s eigenvalues using direct method' % system_name)\n\n            eigenvalues, eigenvectors = sclalg.eig(system.A)\n\n            # Convert DT eigenvalues into CT\n            if system.dt:\n                eigenvalues = self.convert_to_continuoustime(system.dt, eigenvalues, not_scaled)\n\n            num_evals = min(self.num_evals, len(eigenvalues))\n\n            eigenvalues, eigenvectors = self.sort_eigenvalues(eigenvalues, eigenvectors, self.frequency_cutoff,\n                                                              number_of_eigenvalues=num_evals)\n\n            if self.settings['export_eigenvalues']:\n                self.export_eigenvalues(num_evals, eigenvalues, eigenvectors, filename=system_name)\n\n            if self.settings['print_info']:\n                cout.cout_wrap(f'Dynamical System Eigenvalues - {system_name} system')\n                if system_name != '':\n                    eig_table_filename = system_name + '_'\n                else:\n                    eig_table_filename = ''\n                eigenvalue_description_file = self.folder + '/{:s}eigenvaluetable.txt'.format(eig_table_filename)\n                eigenvalue_table = modalutils.EigenvalueTable(filename=eigenvalue_description_file)\n                eigenvalue_table.print_header(eigenvalue_table.headers)\n                eigenvalue_table.print_evals(eigenvalues[:self.num_evals])\n                eigenvalue_table.close_file()\n\n            if self.settings['display_root_locus']:\n                self.display_root_locus(eigenvalues)\n\n            if len(self.settings['velocity_analysis']) == 3 and system_name == 'aeroelastic':\n                assert self.data.linear.linear_system.uvlm.scaled, \\\n                    'The UVLM system is unscaled, unable to rescale the structural equations only. Rerun with a ' \\\n                    'normalised UVLM system.'\n                self.velocity_analysis()\n\n            # Under development\n            if len(self.settings['modes_to_plot']) != 0 and system_name == 'aeroelastic':\n                self.plot_modes(eigenvectors)\n\n        return eigenvalues, eigenvectors\n\n    def convert_to_continuoustime(self, dt, discrete_time_eigenvalues, not_scaled=False):\n        r\"\"\"\n        Convert eigenvalues to discrete time. The ``not_scaled`` argument can be used to bypass the search from\n        within SHARPy of scaling factors. For instance, when the state-space of choice is not part of a standard\n        SHARPy case but rather an interpolated ROM etc.\n\n        The eigenvalues are converted to continuous time using\n\n        .. math:: \\lambda_{ct} = \\frac{\\log (\\lambda_{dt})}{\\Delta t}\n\n        If the system is scaled, the dimensional time step is retrieved as\n\n        .. math:: \\Delta t_{dim} = \\bar{\\Delta t} \\frac{l_{ref}}{U_{\\infty, actual}}\n\n        where :math:`l_{ref}` is the reference length and :math:`U_{\\infty, actual}` is the free stream velocity at\n        which to calculate the eigenvalues.\n\n        Args:\n            dt (float): Discrete time increment.\n            discrete_time_eigenvalues (np.ndarray): Array of discrete time eigenvalues.\n            not_scaled (bool): Treat the system as not scaled. No Scaling Factors will be searched in SHARPy.\n        \"\"\"\n        if not_scaled:\n            dt = dt\n        else:\n            try:\n                ScalingFacts = self.data.linear.linear_system.uvlm.sys.ScalingFacts\n                if ScalingFacts['length'] != 1.0 and ScalingFacts['time'] != 1.0:\n                    dt *= ScalingFacts['length'] / self.settings['reference_velocity']\n                else:\n                    dt = dt\n            except AttributeError:\n                dt = dt\n\n        return np.log(discrete_time_eigenvalues) / dt\n\n    def export_eigenvalues(self, num_evals, eigenvalues, eigenvectors, filename=None):\n        \"\"\"\n        Saves a ``num_evals`` number of eigenvalues and eigenvectors to file.\n\n        The files are saved in the output directory and include:\n\n            * ``{system_name}_eigenvalues.dat``: Array of eigenvalues of shape ``(num_evals, 2)`` where the first column corresponds\n              to the real part and the second column to the imaginary part.\n\n            * ``{system_name}_stability.h5``: An ``.h5`` file containing the desired number of eigenvalues and eigenvectors of the\n              chosen systems.\n\n        The units of the eigenvalues are ``rad/s``.\n\n        Args:\n            num_evals (int): Number of eigenvalues to save.\n            eigenvalues (np.ndarray): Eigenvalue array.\n            eigenvectors (np.ndarray): Matrix of eigenvectors.\n            filename (str (optional)): Optional prefix of the output filenames.\n\n        See Also:\n            Loading and saving complex arrays:\n            https://stackoverflow.com/questions/6494102/how-to-save-and-load-an-array-of-complex-numbers-using-numpy-savetxt/6522396\n        \"\"\"\n\n        stability_folder_path = self.folder\n\n        if filename is None or filename == '':\n            filename = ''\n        else:\n            filename += '_'\n\n        if self.settings['output_file_format'] == 'dat':\n            np.savetxt(self.folder + f'/{filename:s}eigenvalues.dat', eigenvalues.view(float).reshape(-1, 2))\n            np.savetxt(self.folder + f'/{filename:s}eigenvectors_r.dat', eigenvectors.real)\n            np.savetxt(self.folder + f'/{filename:s}eigenvectors_i.dat', eigenvectors.imag)\n        elif self.settings['output_file_format'] == 'h5':\n            with h5py.File(stability_folder_path + f'/{filename:s}stability.h5', 'w') as f:\n                f.create_dataset('eigenvalues', data=eigenvalues, dtype=complex)\n                f.create_dataset('eigenvectors', data=eigenvectors, dtype=complex)\n                f.create_dataset('num_eigenvalues', data=num_evals, dtype=int)\n        else:\n            raise TypeError(f'Unrecognised file type saving option {self.settings[\"output_file_format\"]}')\n            # this shouldn't happen as the settings_options should check the validity of the setting\n\n    def velocity_analysis(self):\n        \"\"\"\n        Velocity analysis for scaled systems.\n\n        Runs the stability analysis for different velocities for aeroelastic systems that have been previously scaled.\n\n        For every velocity, the linear system is updated. This involves updating the structural matrices and the\n        coupling matrix. The eigenvalues saved are in continuous time.\n\n        It saves the results to a ``.dat`` file where the first column corresponds to the free stream velocity and the\n        second and third columns to the real and imaginary parts of the eigenvalues.\n        \"\"\"\n\n        ulb, uub, num_u = self.settings['velocity_analysis']\n\n        if self.settings['print_info']:\n            cout.cout_wrap('Velocity Asymptotic Stability Analysis', 1)\n            cout.cout_wrap('Initial velocity: {:02f} m/s'.format(ulb), 1)\n            cout.cout_wrap('Final velocity: {:02f} m/s'.format(uub), 1)\n            cout.cout_wrap('Number of evaluations: {:g}'.format(num_u), 1)\n\n        u_inf_vec = np.linspace(ulb, uub, int(num_u))\n\n        real_part_plot = []\n        imag_part_plot = []\n        uinf_part_plot = []\n\n        for i in range(len(u_inf_vec)):\n            ss_aeroelastic = self.data.linear.linear_system.update(u_inf_vec[i])\n\n            eigs, eigenvectors = sclalg.eig(ss_aeroelastic.A)\n\n            eigs, eigenvectors = self.sort_eigenvalues(eigs, eigenvectors)\n\n            # Obtain dimensional time\n            dt_dimensional = self.data.linear.linear_system.uvlm.sys.ScalingFacts['length'] / u_inf_vec[i] \\\n                             * ss_aeroelastic.dt\n\n            eigs_cont = np.log(eigs) / dt_dimensional\n            Nunst = np.sum(eigs_cont.real > 0)\n            fn = np.abs(eigs_cont)\n\n            if self.settings['print_info']:\n                cout.cout_wrap('LTI\\tu: %.2f m/2\\tmax. CT eig. real: %.6f\\t' \\\n                               % (u_inf_vec[i], np.max(eigs_cont.real)))\n                cout.cout_wrap('\\tN unstab.: %.3d' % (Nunst,))\n                cout.cout_wrap(\n                    '\\tUnstable aeroelastic natural frequency CT(rad/s):' + Nunst * '\\t%.2f' % tuple(fn[:Nunst]))\n\n            # Store eigenvalues for plot\n            real_part_plot.append(eigs_cont.real)\n            imag_part_plot.append(eigs_cont.imag)\n            uinf_part_plot.append(np.ones_like(eigs_cont.real) * u_inf_vec[i])\n\n        real_part_plot = np.hstack(real_part_plot)\n        imag_part_plot = np.hstack(imag_part_plot)\n        uinf_part_plot = np.hstack(uinf_part_plot)\n\n        velocity_file_name = self.folder + '/velocity_analysis_min{:04g}_max{:04g}_nvel{:04g}.dat'.format(\n            ulb * 10,\n            uub * 10,\n            num_u)\n\n        np.savetxt(velocity_file_name,\n                   np.concatenate((uinf_part_plot, real_part_plot, imag_part_plot)).reshape((-1, 3), order='F'))\n\n        if self.print_info:\n            cout.cout_wrap('\\t\\tSuccessfully saved velocity analysis to {:s}'.format(velocity_file_name), 2)\n\n    @staticmethod\n    def display_root_locus(eigenvalues):\n        \"\"\"\n        Displays root locus diagrams.\n\n        Returns the ``fig`` and ``ax`` handles for further editing.\n\n        Returns:\n            fig:\n            ax:\n        \"\"\"\n\n        try:\n            import matplotlib.pyplot as plt\n        except ModuleNotFoundError:\n            cout.cout_wrap('Could not plot in asymptoticstability beacuse there is no Matplotlib', 4)\n            return\n        fig, ax = plt.subplots()\n\n        ax.scatter(np.real(eigenvalues), np.imag(eigenvalues),\n                   s=6,\n                   color='k',\n                   marker='s')\n        ax.set_xlabel(r'Real, $\\mathbb{R}(\\lambda_i)$ [rad/s]')\n        ax.set_ylabel(r'Imag, $\\mathbb{I}(\\lambda_i)$ [rad/s]')\n        ax.grid(True)\n        fig.show()\n\n        return fig, ax\n\n    def plot_modes(self, eigenvectors):\n        r\"\"\"\n        Plot the aeroelastic mode shapes for the first ``n_modes_to_plot``\n\n        Plots the 0, 45, 90 and 135 degrees phase of the mode. Also plots the reference at the linearisation state.\n\n        .. math:: x_{out} = Re(\\Phi_i e^{i\\theta})\n\n        for :math:`\\theta \\in \\{0, \\pi/4, \\pi/2, 3\\pi/4}`.\n\n        \"\"\"\n        try:\n            import matplotlib.pyplot as plt\n        except ModuleNotFoundError:\n            cout.cout_wrap('Could not plot in asymptoticstability because there is no Matplotlib', 4)\n            return\n\n        mode_shape_list = self.settings['modes_to_plot']\n\n        route = self.folder + '/modes/'\n        if not os.path.isdir(route):\n            os.makedirs(route, exist_ok=True)\n\n        for mode in mode_shape_list:\n            # Scale mode\n\n            beam = self.data.linear.linear_system.beam\n            displacement_states = beam.ss.states // 2\n            structural_states = beam.ss.states\n            structural_modal_coords = beam.sys.modal\n\n            for phase in [0, 1, 2, 3]:\n                v = eigenvectors[-structural_states:-structural_states//2, mode]\n                v_dot = eigenvectors[-structural_states//2:, mode]\n\n                if beam.sys.clamped:\n                    num_dof_rig = 1  # to get the full vector (if 0 line356 returns empty array)\n                else:\n                    warnings.warn('The rigid body motion contribution to the mode will not be shown, '\n                                  'just the flexible contributions.')\n                    num_dof_rig = beam.sys.num_dof_rig\n\n                if structural_modal_coords:\n                    # project aeroelastic mode back to modal coordinates\n                    phi = beam.sys.U\n                    eta = phi.dot(v)\n                    eta_dot = phi.dot(v_dot)[:-num_dof_rig]\n                else:\n                    eta = v[:-num_dof_rig]\n                    eta_dot = v_dot[:-num_dof_rig]\n\n                eta_phase = np.real(np.exp(1j * phase * np.pi / 4) * eta)\n                amplitude_factor = modalutils.scale_mode(self.data,\n                                                         eta_phase,\n                                                         rot_max_deg=10, perc_max=0.15)\n                eta_phase *= amplitude_factor\n                zeta_mode = modalutils.get_mode_zeta(self.data, eta_phase)\n                modalutils.write_zeta_vtk(zeta_mode, self.data.linear.tsaero0.zeta,\n                                          filename_root=route + f'mode_{mode:06g}_phase{phase:04g}')\n\n        # Reference - linearisation state\n        eta *= 0\n        zeta_mode = modalutils.get_mode_zeta(self.data, eta.real)\n        modalutils.write_zeta_vtk(zeta_mode, self.data.linear.tsaero0.zeta, filename_root=route + 'mode_ref')\n\n    @staticmethod\n    def sort_eigenvalues(eigenvalues, eigenvectors, frequency_cutoff=0, number_of_eigenvalues=None):\n        \"\"\"\n        Sort continuous-time eigenvalues by order of magnitude.\n\n        The conjugate of complex eigenvalues is removed, then if specified, high frequency modes are truncated.\n        Finally, the eigenvalues are sorted by largest to smallest real part.\n\n        Args:\n            eigenvalues (np.ndarray): Continuous-time eigenvalues\n            eigenvectors (np.ndarray): Corresponding right eigenvectors\n            frequency_cutoff (float): Cutoff frequency for truncation ``[rad/s]``\n            number_of_eigenvalues (int (optional)): Number of eigenvalues to retain\n\n        Returns:\n            tuple(np.array, np.array): eigenvalues and eigenvectors\n        \"\"\"\n\n        if frequency_cutoff == 0:\n            frequency_cutoff = np.inf\n\n        # Remove poles in the negative imaginary plane (Im(\\lambda)<0)\n        criteria_a = np.abs(np.imag(eigenvalues)) <= frequency_cutoff\n        # criteria_b = np.imag(eigenvalues) > -1e-2\n        eigenvalues_truncated = eigenvalues[criteria_a].copy()\n        eigenvectors_truncated = eigenvectors[:, criteria_a].copy()\n\n        order = np.argsort(eigenvalues_truncated.real)[::-1]\n\n        if number_of_eigenvalues is not None:\n            if number_of_eigenvalues > len(order):\n                cout.cout_wrap(f'Desired number of eigenvalues ({number_of_eigenvalues}) exceeds system size '\n                               f'({len(order)}) after frequency truncation.', 3)\n            else:\n                order = order[:number_of_eigenvalues]\n        return eigenvalues_truncated[order], eigenvectors_truncated[:, order]\n"
  },
  {
    "path": "sharpy/postproc/beamloads.py",
    "content": "import os\nimport numpy as np\nimport os\nfrom sharpy.utils.solver_interface import solver, BaseSolver\nimport sharpy.utils.settings as settings_utils\nimport sharpy.structure.utils.xbeamlib as xbeamlib\n\n\n@solver\nclass BeamLoads(BaseSolver):\n    \"\"\"\n    Writes to file the total loads acting on the beam elements\n\n    \"\"\"\n    solver_id = 'BeamLoads'\n    solver_classification = 'post-processor'\n\n    settings_types = dict()\n    settings_default = dict()\n    settings_description = dict()\n\n    settings_types['csv_output'] = 'bool'\n    settings_default['csv_output'] = False\n    settings_description['csv_output'] = 'Write ``csv`` file with results'\n\n    settings_types['output_file_name'] = 'str'\n    settings_default['output_file_name'] = 'beam_loads'\n    settings_description['output_file_name'] = 'Output file name'\n\n    settings_table = settings_utils.SettingsTable()\n    __doc__ += settings_table.generate(settings_types, settings_default, settings_description)\n\n    def __init__(self):\n\n        self.settings = None\n        self.data = None\n\n        self.folder = None\n        self.caller = None\n\n    def initialise(self, data, custom_settings=None, caller=None, restart=False):\n        self.data = data\n        if custom_settings is None:\n            self.settings = data.settings[self.solver_id]\n        else:\n            self.settings = custom_settings\n        settings_utils.to_custom_types(self.settings, self.settings_types, self.settings_default)\n        self.caller = caller\n\n        self.folder = data.output_folder + '/beam/'\n        if not os.path.isdir(self.folder):\n            os.makedirs(self.folder)\n\n    def run(self, **kwargs):\n\n        online = settings_utils.set_value_or_default(kwargs, 'online', False)\n\n        self.calculate_loads(online)\n        if self.settings['csv_output']:\n            self.print_loads(online)\n        return self.data\n\n    def print_loads(self, online):\n        if online:\n            it = len(self.data.structure.timestep_info) - 1\n            n_elem = self.data.structure.timestep_info[it].psi.shape[0]\n            data = np.zeros((n_elem, 10))\n            # coords\n            data[:, 0:3] = self.data.structure.timestep_info[it].postproc_cell['coords_a']\n            header = 'x_a, y_a, z_a, '\n            # beam number\n            data[:, 3] = self.data.structure.beam_number\n            header += 'beam_number, '\n            # loads_0\n            data[:, 4:10] = self.data.structure.timestep_info[it].postproc_cell['loads'][:, :]\n            header += 'Fx, Fy, Fz, Mx, My, Mz'\n\n            filename = self.folder\n            filename += self.settings['output_file_name'] + '_' + '{0}'.format(it)\n            filename += '.csv'\n            np.savetxt(filename, data, delimiter=',', header=header)\n        else:\n            for it in range(len(self.data.structure.timestep_info)):\n                it = len(self.data.structure.timestep_info) - 1\n                n_elem = self.data.structure.timestep_info[it].num_elem\n                data = np.zeros((n_elem, 10))\n                # coords\n                data[:, 0:3] = self.data.structure.timestep_info[it].postproc_cell['coords_a']\n                header = 'x_a, y_a, z_a, '\n                # beam number\n                data[:, 3] = self.data.structure.beam_number\n                header += 'beam_number, '\n                # loads_0\n                data[:, 4:10] = self.data.structure.timestep_info[it].postproc_cell['loads'][:, :]\n                header += 'Fx, Fy, Fz, Mx, My, Mz'\n\n                filename = self.folder\n                filename += self.settings['output_file_name'] + '_' + '{0}'.format(it)\n                filename += '.csv'\n                np.savetxt(filename, data, delimiter=',', header=header)\n\n    def calculate_loads(self, online):\n        if online:\n            it = -1\n            timestep_add_loads(self.data.structure, self.data.structure.timestep_info[it])\n            self.calculate_coords_a(self.data.structure.timestep_info[it])\n        else:\n            for it in range(len(self.data.structure.timestep_info)):\n                timestep_add_loads(self.data.structure, self.data.structure.timestep_info[it])\n                self.calculate_coords_a(self.data.structure.timestep_info[it])\n\n    def calculate_coords_a(self, timestep_info):\n        timestep_info.postproc_cell['coords_a'] = np.zeros((timestep_info.num_elem, 3))\n        for ielem in range(timestep_info.num_elem):\n            iglobal_node = self.data.structure.connectivities[ielem, 2]\n            timestep_info.postproc_cell['coords_a'][ielem, :] = timestep_info.pos[iglobal_node, :]\n\n\ndef timestep_add_loads(structure, timestep):\n    timestep.postproc_cell['strain'], timestep.postproc_cell['loads'] = \\\n        xbeamlib.cbeam3_loads(structure, timestep)\n\n    # def calculate_loads(self):\n    #     # initial (ini) loads\n    #     tstep = self.data.structure.ini_info\n    #     pos = tstep.pos\n    #     psi = tstep.psi\n    #\n    #     tstep.postproc_cell['gamma'] = np.zeros((self.data.structure.num_elem, 3))\n    #     tstep.postproc_cell['kappa'] = np.zeros((self.data.structure.num_elem, 3))\n    #\n    #     for ielem in range(self.data.structure.num_elem):\n    #         crv = 0.5*(psi[ielem, 1, :] + psi[ielem, 0, :])\n    #         cba = algebra.crv2rotation(crv).T\n    #         tan = algebra.crv2tan(crv)\n    #\n    #         inode0 = self.data.structure.elements[ielem].global_connectivities[0]\n    #         inode1 = self.data.structure.elements[ielem].global_connectivities[1]\n    #         tstep.postproc_cell['gamma'][ielem, :] = (\n    #                 np.dot(cba,\n    #                        pos[inode1, :] - pos[inode0, :]) /\n    #                 np.linalg.norm(pos[inode1, :] - pos[inode0, :]))\n    #         tstep.postproc_cell['kappa'][ielem, :] = (\n    #                 np.dot(tan,\n    #                        psi[ielem, 1, :] - psi[ielem, 0, :]) /\n    #                 np.linalg.norm(pos[inode1, :] - pos[inode0, :]))\n    #\n    #     # time-dependant loads\n    #     for it in range(len(self.data.structure.timestep_info)):\n    #         tstep = self.data.structure.timestep_info[it]\n    #         pos = tstep.pos\n    #         psi = tstep.psi\n    #\n    #         tstep.postproc_cell['gamma'] = np.zeros((self.data.structure.num_elem, 3))\n    #         tstep.postproc_cell['kappa'] = np.zeros((self.data.structure.num_elem, 3))\n    #         tstep.postproc_cell['strain'] = np.zeros((self.data.structure.num_elem, 6))\n    #         tstep.postproc_cell['loads'] = np.zeros((self.data.structure.num_elem, 6))\n    #\n    #         for ielem in range(self.data.structure.num_elem):\n    #             crv = 0.5*(psi[ielem, 2, :] + psi[ielem, 0, :])\n    #             cba = algebra.crv2rotation(crv).T\n    #             tan = algebra.crv2tan(crv)\n    #\n    #             inode0 = self.data.structure.elements[ielem].global_connectivities[0]\n    #             inode1 = self.data.structure.elements[ielem].global_connectivities[1]\n    #             tstep.postproc_cell['gamma'][ielem, :] = (\n    #                     np.dot(cba,\n    #                            pos[inode1, :] - pos[inode0, :]) /\n    #                     np.linalg.norm(pos[inode1, :] - pos[inode0, :]))\n    #             tstep.postproc_cell['kappa'][ielem, :] = (\n    #                     np.dot(tan,\n    #                            psi[ielem, 1, :] - psi[ielem, 0, :]) /\n    #                     np.linalg.norm(pos[inode1, :] - pos[inode0, :]))\n    #\n    #             tstep.postproc_cell['strain'][ielem, 0:3] = (\n    #                     tstep.postproc_cell['gamma'][ielem, :]\n    #                     -\n    #                     self.data.structure.ini_info.postproc_cell['gamma'][ielem, :])\n    #             tstep.postproc_cell['strain'][ielem, 3:6] = (\n    #                     tstep.postproc_cell['kappa'][ielem, :]\n    #                     -\n    #                     self.data.structure.ini_info.postproc_cell['kappa'][ielem, :])\n    #             tstep.postproc_cell['loads'][ielem, :] = np.dot(\n    #                 self.data.structure.stiffness_db[self.data.structure.elements[ielem].stiff_index, :, :],\n    #                 tstep.postproc_cell['strain'][ielem, :])\n\n    # def calculate_loads(self):\n    #     order = [0, 2, 1]\n    #     # initial (ini) loads\n    #     tstep = self.data.structure.ini_info\n    #     pos = tstep.pos\n    #     psi = tstep.psi\n    #\n    #     gamma0 = np.zeros((self.data.structure.num_elem, 2, 3))\n    #     kappa0 = np.zeros((self.data.structure.num_elem, 2, 3))\n    #     counter = np.zeros((self.data.structure.num_node,), dtype=int)\n    #\n    #     for ielem in range(self.data.structure.num_elem):\n    #         for isegment in range(self.data.structure.elements[ielem].n_nodes - 1):\n    #             i_local_node0 = order[isegment]\n    #             i_local_node1 = order[isegment + 1]\n    #             crv = 0.5*(psi[ielem, i_local_node1, :] + psi[ielem, i_local_node0, :])\n    #\n    #             cba = algebra.crv2rotation(crv).T\n    #             tan = algebra.crv2tan(crv)\n    #\n    #             inode0 = self.data.structure.elements[ielem].global_connectivities[i_local_node0]\n    #             inode1 = self.data.structure.elements[ielem].global_connectivities[i_local_node1]\n    #\n    #             counter[inode0] += 1\n    #             counter[inode1] += 1\n    #\n    #             print('----')\n    #             print(ielem)\n    #             print(isegment)\n    #             print(inode0, inode1)\n    #             print(counter[inode0], counter[inode1])\n    #             print('----')\n    #\n    #             gamma0[ielem, isegment, :] = (\n    #                     np.dot(cba,\n    #                            pos[inode1, :] - pos[inode0, :]) /\n    #                     np.linalg.norm(pos[inode1, :] - pos[inode0, :]))\n    #             kappa0[ielem, isegment, :] = (\n    #                     np.dot(tan,\n    #                            psi[ielem, i_local_node1, :] - psi[ielem, i_local_node0, :]) /\n    #                     np.linalg.norm(pos[inode1, :] - pos[inode0, :]))\n    #\n    #     # time-dependant loads\n    #     for it in range(len(self.data.structure.timestep_info)):\n    #         tstep = self.data.structure.timestep_info[it]\n    #         pos = tstep.pos\n    #         psi = tstep.psi\n    #\n    #         gamma = np.zeros((self.data.structure.num_elem, 2, 3))\n    #         kappa = np.zeros((self.data.structure.num_elem, 2, 3))\n    #         # tstep.postproc_cell['strain'] = np.zeros((self.data.structure.num_elem, 6))\n    #         tstep.postproc_node['loads'] = np.zeros((self.data.structure.num_node, 6))\n    #         strain = np.zeros((self.data.structure.num_elem, 2, 6))\n    #         for ielem in range(self.data.structure.num_elem):\n    #             for isegment in range(self.data.structure.elements[ielem].n_nodes - 1):\n    #                 i_local_node0 = order[isegment]\n    #                 i_local_node1 = order[isegment + 1]\n    #                 crv = 0.5*(psi[ielem, i_local_node1, :] + psi[ielem, i_local_node0, :])\n    #\n    #                 cba = algebra.crv2rotation(crv).T\n    #                 tan = algebra.crv2tan(crv)\n    #\n    #                 inode0 = self.data.structure.elements[ielem].global_connectivities[i_local_node0]\n    #                 inode1 = self.data.structure.elements[ielem].global_connectivities[i_local_node1]\n    #\n    #                 gamma[ielem, isegment, :] = (\n    #                         np.dot(cba,\n    #                                pos[inode1, :] - pos[inode0, :]) /\n    #                         np.linalg.norm(pos[inode1, :] - pos[inode0, :]))\n    #                 kappa[ielem, isegment, :] = (\n    #                         np.dot(tan,\n    #                                psi[ielem, i_local_node1, :] - psi[ielem, i_local_node0, :]) /\n    #                         np.linalg.norm(pos[inode1, :] - pos[inode0, :]))\n    #                 strain[ielem, isegment, 0:3] += (\n    #                         gamma[ielem, isegment, :]\n    #                         -\n    #                         gamma0[ielem, isegment, :])\n    #                 strain[ielem, isegment, 3:6] += (\n    #                         kappa[ielem, isegment, :]\n    #                         -\n    #                         kappa0[ielem, isegment, :])\n    #                 # it might be necessary to rotate the results so that the B frame is the\n    #                 # Master FoR (so that all the loads -- intrinsically in material FoR -- can be\n    #                 # added together at the nodes).\n    #                 prerotate = np.eye(6)\n    #                 posrotate = np.eye(6)\n    #                 if not self.data.structure.node_master_elem[inode0, 0] == ielem:\n    #                     cab2 = algebra.crv2rotation(psi[ielem, self.data.structure.node_master_elem[inode0, 1], :])\n    #                     prerotate[0:3, 0:3] = np.dot(cab2.T, cba.T)\n    #                     prerotate[3:6, 3:6] = np.dot(cab2.T, cba.T)\n    #\n    #                 tstep.postproc_node['loads'][inode0, :] = np.dot(prerotate,\n    #                     np.dot(np.dot(\n    #                     self.data.structure.stiffness_db[self.data.structure.elements[ielem].stiff_index, :, :],\n    #                     strain[ielem, isegment, :])/counter[inode0], posrotate))\n    #                 prerotate = np.eye(6)\n    #                 posrotate = np.eye(6)\n    #                 if not self.data.structure.node_master_elem[inode1, 0] == ielem:\n    #                     cab2 = algebra.crv2rotation(psi[ielem, self.data.structure.node_master_elem[inode1, 1], :])\n    #                     prerotate[0:3, 0:3] = np.dot(cab2.T, cba.T)\n    #                     prerotate[3:6, 3:6] = np.dot(cab2.T, cba.T)\n    #\n    #                 tstep.postproc_node['loads'][inode1, :] = np.dot(prerotate,\n    #                                                                  np.dot(np.dot(\n    #                                                                      self.data.structure.stiffness_db[self.data.structure.elements[ielem].stiff_index, :, :],\n    #                                                                      strain[ielem, isegment, :])/counter[inode1], posrotate))\n    #                 # tstep.postproc_node['loads'][inode1, :] = np.dot(\n    #                 #     self.data.structure.stiffness_db[self.data.structure.elements[ielem].stiff_index, :, :],\n    #                 #     strain[ielem, isegment, :])/counter[inode1]\n"
  },
  {
    "path": "sharpy/postproc/beamplot.py",
    "content": "import os\n\nimport numpy as np\n\nimport sharpy.utils.cout_utils as cout\nfrom sharpy.utils.solver_interface import solver, BaseSolver\nimport sharpy.utils.settings as settings_utils\nimport sharpy.utils.algebra as algebra\n\n\nimport vtk\nfrom vtk.numpy_interface import algorithms as algs\nfrom vtk.numpy_interface import dataset_adapter as dsa\n\n\n@solver\nclass BeamPlot(BaseSolver):\n    \"\"\"\n    Plots beam to Paraview format\n    \"\"\"\n    solver_id = 'BeamPlot'\n    solver_classification = 'post-processor'\n\n    settings_types = dict()\n    settings_default = dict()\n    settings_description = dict()\n\n    settings_types['include_rbm'] = 'bool'\n    settings_default['include_rbm'] = True\n    settings_description['include_rbm'] = 'Include frame of reference rigid body motion'\n\n    settings_types['include_FoR'] = 'bool'\n    settings_default['include_FoR'] = False\n    settings_description['include_FoR'] = 'Include frame of reference variables'\n\n    settings_types['include_applied_forces'] = 'bool'\n    settings_default['include_applied_forces'] = True\n    settings_description['include_applied_forces'] = 'Write beam applied forces'\n\n    settings_types['include_applied_moments'] = 'bool'\n    settings_default['include_applied_moments'] = True\n    settings_description['include_applied_moments'] = 'Write beam applied moments'\n\n    settings_types['name_prefix'] = 'str'\n    settings_default['name_prefix'] = ''\n    settings_description['name_prefix'] = 'Name prefix for files'\n\n    settings_types['output_rbm'] = 'bool'\n    settings_default['output_rbm'] = True\n    settings_description['output_rbm'] = 'Write ``csv`` file with rigid body motion data'\n\n    settings_types['stride'] = 'int'\n    settings_default['stride'] = 1\n    settings_description['stride'] = 'Number of steps between the execution calls when run online'\n\n    settings_table = settings_utils.SettingsTable()\n    __doc__ += settings_table.generate(settings_types, settings_default, settings_description)\n\n    def __init__(self):\n\n        self.settings = None\n        self.data = None\n\n        self.folder = ''\n        self.filename = ''\n        self.filename_for = ''\n        self.caller = None\n\n    def initialise(self, data, custom_settings=None, caller=None, restart=False):\n        self.data = data\n        if custom_settings is None:\n            self.settings = data.settings[self.solver_id]\n        else:\n            self.settings = custom_settings\n        settings_utils.to_custom_types(self.settings, self.settings_types, self.settings_default)\n        # create folder for containing files if necessary\n        self.folder = data.output_folder + '/beam/'\n        if not os.path.exists(self.folder):\n            os.makedirs(self.folder)\n        self.filename = (self.folder +\n                         self.settings['name_prefix'] +\n                         'beam_' +\n                         self.data.settings['SHARPy']['case'])\n        self.filename_for = (self.folder +\n                             self.settings['name_prefix'] +\n                             'for_' +\n                             self.data.settings['SHARPy']['case'])\n        self.caller = caller\n\n    def run(self, **kwargs):\n\n        online = settings_utils.set_value_or_default(kwargs, 'online', False)\n\n        self.plot(online)\n        if not online:\n            self.write()\n            cout.cout_wrap('...Finished', 1)\n        return self.data\n\n    def write(self):\n        if self.settings['output_rbm']:\n            filename = self.filename + '_rbm_acc.csv'\n            timesteps = len(self.data.structure.timestep_info)\n            temp_matrix = np.zeros((timesteps, 6))\n            for it in range(timesteps):\n                if self.data.structure.timestep_info[it] is not None:\n                    temp_matrix[it, :] = self.data.structure.timestep_info[it].for_acc\n\n            np.savetxt(filename, temp_matrix, delimiter=',')\n\n    def plot(self, online):\n        if not online:\n            for it in range(len(self.data.structure.timestep_info)):\n                if self.data.structure.timestep_info[it] is not None:\n                    self.write_beam(it)\n                    if self.settings['include_FoR']:\n                        self.write_for(it)\n        elif ((len(self.data.structure.timestep_info) - 1) % self.settings['stride'] == 0):\n            it = len(self.data.structure.timestep_info) - 1\n            self.write_beam(it)\n            if self.settings['include_FoR']:\n                self.write_for(it)\n\n    def write_beam(self, it):\n        it_filename = f\"{self.filename}{it:06d}.vtp\"\n        num_nodes = self.data.structure.num_node\n        num_elem = self.data.structure.num_elem\n\n        conn = np.zeros((num_elem, 3), dtype=int)\n        node_id = np.zeros((num_nodes,), dtype=int)\n        elem_id = np.zeros((num_elem,), dtype=int)\n        coords_a_cell = np.zeros((num_elem, 3), dtype=int)\n        local_x = np.zeros((num_nodes, 3))\n        local_y = np.zeros((num_nodes, 3))\n        local_z = np.zeros((num_nodes, 3))\n        coords_a = np.zeros((num_nodes, 3))\n        app_forces = np.zeros((num_nodes, 3))\n        app_moment = np.zeros((num_nodes, 3))\n\n        forces_constraints_nodes = np.zeros((num_nodes, 3))\n        moments_constraints_nodes = np.zeros((num_nodes, 3))\n\n        tstep = self.data.structure.timestep_info[it]\n\n        # aero2inertial rotation\n        aero2inertial = tstep.cga()\n\n        # coordinates of corners\n        coords = tstep.glob_pos(include_rbm=self.settings['include_rbm'])\n\n        if tstep.mb_dict is None:\n            pass\n        else:\n            for i_node in range(tstep.num_node):\n                c = self.data.structure.timestep_info[0].cga()\n                coords[i_node, :] += c @ tstep.for_pos[:3]\n\n        # check if I can output gravity forces\n        with_gravity = False\n        try:\n            gravity_forces = tstep.gravity_forces[:]\n            gravity_forces_g = np.zeros_like(gravity_forces)\n            with_gravity = True\n        except AttributeError:\n            pass\n\n        # check if postproc dicts are present and count/prepare\n        with_postproc_cell = False\n        try:\n            tstep.postproc_cell\n            with_postproc_cell = True\n        except AttributeError:\n            pass\n        with_postproc_node = False\n        try:\n            tstep.postproc_node\n            with_postproc_node = True\n        except AttributeError:\n            pass\n\n        # count number of arguments\n        postproc_cell_vector = []\n        postproc_cell_6vector = []\n        for k, v in tstep.postproc_cell.items():\n            _, cols = v.shape\n            if cols == 1:\n                raise NotImplementedError('scalar cell types not supported in beamplot (Easy to implement)')\n                # postproc_cell_scalar.append(k)\n            elif cols == 3:\n                postproc_cell_vector.append(k)\n            elif cols == 6:\n                postproc_cell_6vector.append(k)\n            else:\n                raise AttributeError('Only scalar and 3-vector types supported in beamplot')\n        # count number of arguments\n        postproc_node_scalar = []\n        postproc_node_vector = []\n        postproc_node_6vector = []\n        for k, v in tstep.postproc_node.items():\n            try:\n                _, cols = v.shape\n            except ValueError:\n                # for np.arrays with shape (x,)\n                cols = 1\n            if cols == 1:\n                postproc_node_scalar.append(k)\n            elif cols == 3:\n                postproc_node_vector.append(k)\n            elif cols == 6:\n                postproc_node_6vector.append(k)\n            else:\n                raise AttributeError('Only scalar and 3-vector types supported in beamplot')\n\n        for i_node in range(num_nodes):\n            i_elem = self.data.structure.node_master_elem[i_node, 0]\n            i_local_node = self.data.structure.node_master_elem[i_node, 1]\n            node_id[i_node] = i_node\n\n            v1 = np.array([1., 0, 0])\n            v2 = np.array([0., 1, 0])\n            v3 = np.array([0., 0, 1])\n            cab = algebra.crv2rotation(\n                tstep.psi[i_elem, i_local_node, :])\n            local_x[i_node, :] = np.dot(aero2inertial, np.dot(cab, v1))\n            local_y[i_node, :] = np.dot(aero2inertial, np.dot(cab, v2))\n            local_z[i_node, :] = np.dot(aero2inertial, np.dot(cab, v3))\n\n            if i_local_node == 2:\n                coords_a_cell[i_elem, :] = tstep.pos[i_node, :]\n            coords_a[i_node, :] = tstep.pos[i_node, :]\n\n            # applied forces\n            cab = algebra.crv2rotation(tstep.psi[i_elem, i_local_node, :])\n            app_forces[i_node, :] = np.dot(aero2inertial,\n                                           np.dot(cab,\n                                                  tstep.steady_applied_forces[i_node, 0:3]+\n                                                  tstep.unsteady_applied_forces[i_node, 0:3]))\n            app_moment[i_node, :] = np.dot(aero2inertial,\n                                           np.dot(cab,\n                                                  tstep.steady_applied_forces[i_node, 3:6]+\n                                                  tstep.unsteady_applied_forces[i_node, 3:6]))\n            forces_constraints_nodes[i_node, :] = np.dot(aero2inertial,\n                                                         np.dot(cab,\n                                                                tstep.forces_constraints_nodes[i_node, 0:3]))\n            moments_constraints_nodes[i_node, :] = np.dot(aero2inertial,\n                                                          np.dot(cab,\n                                                                 tstep.forces_constraints_nodes[i_node, 3:6]))\n\n            if with_gravity:\n                gravity_forces_g[i_node, 0:3] = np.dot(aero2inertial,\n                                                     gravity_forces[i_node, 0:3])\n                gravity_forces_g[i_node, 3:6] = np.dot(aero2inertial,\n                                                     gravity_forces[i_node, 3:6])\n\n        for i_elem in range(num_elem):\n            conn[i_elem, :] = self.data.structure.elements[i_elem].reordered_global_connectivities\n            elem_id[i_elem] = i_elem\n\n        ug = vtk.vtkPolyData(points=coords)\n        cells = vtk.vtkCellArray()\n        for _conn in conn:\n            line = vtk.vtkPolyLine()\n            line.GetPointIds().SetNumberOfIds(3)\n            line.GetPointIds().SetId(0, _conn[0])\n            line.GetPointIds().SetId(1, _conn[1])\n            line.GetPointIds().SetId(2, _conn[2])\n            cells.InsertNextCell(line)\n        ug.SetLines(cells)\n\n        ug.GetCellData().AddArray(dsa.numpyTovtkDataArray(np.array(elem_id), name='elem_id'))\n        ug.GetCellData().AddArray(dsa.numpyTovtkDataArray(coords_a_cell, name=\"coords_a_elem\"))\n        ug.GetPointData().AddArray(\n            dsa.numpyTovtkDataArray(node_id, name=\"node_id\")\n        )\n        ug.GetPointData().AddArray(dsa.numpyTovtkDataArray(local_x, name=\"local_x\"))\n        ug.GetPointData().AddArray(dsa.numpyTovtkDataArray(local_y, name=\"local_y\"))\n        ug.GetPointData().AddArray(dsa.numpyTovtkDataArray(local_z, name=\"local_z\"))\n        ug.GetPointData().AddArray(dsa.numpyTovtkDataArray(coords_a, name=\"coords_a\"))\n\n        if with_postproc_cell:\n            for k in postproc_cell_vector:\n                ug.GetCellData().AddArray(\n                    dsa.numpyTovtkDataArray(tstep.postproc_cell[k], name=f\"{k}_cell\")\n                )\n            for k in postproc_cell_6vector:\n                for i in range(2):\n                    ug.GetCellData().AddArray(\n                        dsa.numpyTovtkDataArray(\n                            tstep.postproc_cell[k][:, 3*i:3*(i+1)], name=f\"{k}_{i}_cell\"\n                        )\n                    )\n\n        if self.settings['include_applied_forces']:\n            ug.GetPointData().AddArray(dsa.numpyTovtkDataArray(app_forces, name=\"app_forces\"))\n            ug.GetPointData().AddArray(\n                dsa.numpyTovtkDataArray(forces_constraints_nodes, name=\"forces_constraints_node\")\n            )\n            if with_gravity:\n                ug.GetPointData().AddArray(\n                    dsa.numpyTovtkDataArray(\n                        gravity_forces_g[:, :3], name=\"gravity_forces\"\n                    )\n                )\n\n        if self.settings['include_applied_moments']:\n            ug.GetPointData().AddArray(\n                dsa.numpyTovtkDataArray(app_moment, name=\"app_moments\")\n            )\n            ug.GetPointData().AddArray(\n                dsa.numpyTovtkDataArray(moments_constraints_nodes, name=\"moments_constraints_nodes\")\n            )\n            if with_gravity:\n                ug.GetPointData().AddArray(dsa.numpyTovtkDataArray(gravity_forces_g[:, 3:6], name=\"gravity_moments\"))\n\n        if with_postproc_node:\n            for k in postproc_node_vector:\n                ug.GetPointData().AddArray(\n                    dsa.numpyTovtkDataArray(\n                        tstep.postproc_node[k], name=f\"{k}_point\"\n                    )\n                )\n            for k in postproc_node_6vector:\n                for i in range(2):\n                    ug.GetPointData().AddArray(\n                        dsa.numpyTovtkDataArray(\n                            tstep.postproc_node[k][:, 3*i:3*(i+1)], name=f\"{k}_{i}_point\"\n                        )\n                    )\n\n            for k in postproc_node_scalar:\n                ug.GetPointData().AddArray(\n                    dsa.numpyTovtkDataArray(\n                        tstep.postproc_node[k],\n                        name=str(k),\n                    )\n                )\n\n        writer = vtk.vtkXMLPolyDataWriter()\n        writer.SetFileName(it_filename)\n        writer.SetInputData(ug)\n        writer.Write()\n\n    def write_for(self, it):\n        it_filename = f\"{self.filename_for}{it:06d}.vtp\"\n\n        forces_constraints_for = np.zeros((self.data.structure.num_bodies, 3))\n        moments_constraints_for = np.zeros((self.data.structure.num_bodies, 3))\n\n        # aero2inertial rotation\n        aero2inertial = self.data.structure.timestep_info[it].cga()\n\n        # coordinates of corners\n        for_coords = np.zeros((self.data.structure.num_bodies, 3))\n        if self.settings['include_rbm']:\n            offset = np.zeros((3,))\n        else:\n            offset = self.data.structure.timestep_info[it].mb_FoR_pos[0, 0:3]\n\n        for ibody in range(self.data.structure.num_bodies):\n            for_coords[ibody, :] = self.data.structure.timestep_info[it].mb_FoR_pos[ibody, 0:3] - offset\n            forces_constraints_for[ibody, :] = aero2inertial @ self.data.structure.timestep_info[it].forces_constraints_FoR[ibody, :3]\n            moments_constraints_for[ibody, :] = aero2inertial @ self.data.structure.timestep_info[it].forces_constraints_FoR[ibody, 3:6]\n\n        for_mesh = vtk.vtkPolyData(points=for_coords)\n\n        for_mesh.GetPointData().AddArray(\n            dsa.numpyTovtkDataArray(\n                forces_constraints_for,\n                'forces_constraints_FoR',\n            )\n        )\n\n        for_mesh.GetPointData().AddArray(\n            dsa.numpyTovtkDataArray(\n                moments_constraints_for,\n                \"moments_constraints_FoR\",\n            )\n        )\n\n        writer = vtk.vtkXMLPolyDataWriter()\n        writer.SetFileName(it_filename)\n        writer.SetInputData(for_mesh)\n        writer.Write()\n"
  },
  {
    "path": "sharpy/postproc/cleanup.py",
    "content": "from sharpy.utils.solver_interface import solver, BaseSolver\nimport sharpy.utils.settings as settings_utils\n\n\n@solver\nclass Cleanup(BaseSolver):\n    \"\"\"\n    Clean-up old timesteps to save RAM memory\n    \"\"\"\n    solver_id = 'Cleanup'\n    solver_classification = 'post-processor'\n\n    settings_types = dict()\n    settings_default = dict()\n    settings_description = dict()\n\n    settings_types['clean_structure'] = 'bool'\n    settings_default['clean_structure'] = True\n    settings_description['clean_structure'] = 'Clean-up :class:`~sharpy.utils.datastructures.StructTimeStepInfo`'\n\n    settings_types['clean_aero'] = 'bool'\n    settings_default['clean_aero'] = True\n    settings_description['clean_aero'] = 'Clean-up :class:`~sharpy.utils.datastructures.AeroTimeStepInfo`'\n\n    settings_types['remaining_steps'] = 'int'\n    settings_default['remaining_steps'] = 10\n    settings_description['remaining_steps'] = 'The last `remaining_steps` are not cleaned up'\n\n    table = settings_utils.SettingsTable()\n    __doc__ += table.generate(settings_types, settings_default, settings_description)\n\n    def __init__(self):\n        self.settings = None\n        self.data = None\n        self.caller = None\n\n    def initialise(self, data, custom_settings=None, caller=None, restart=False):\n        self.data = data\n        if custom_settings is None:\n            self.settings = data.settings[self.solver_id]\n        else:\n            self.settings = custom_settings\n        settings_utils.to_custom_types(self.settings,\n                           self.settings_types,\n                           self.settings_default)\n        self.caller = caller\n\n    def run(self, **kwargs):\n        \n        online = settings_utils.set_value_or_default(kwargs, 'online', False)\n\n        if self.settings['clean_structure']:\n            self.clean(self.data.structure.timestep_info, self.settings['remaining_steps'])\n        if self.settings['clean_aero']:\n            self.clean(self.data.aero.timestep_info, self.settings['remaining_steps'])\n\n        return self.data\n\n    def clean(self, series, n_steps):\n        for i in range(len(series[:-n_steps])):\n            series[i] = None\n"
  },
  {
    "path": "sharpy/postproc/frequencyresponse.py",
    "content": "import numpy as np\nimport time\nimport os\nimport sharpy.utils.solver_interface as solver_interface\nimport sharpy.utils.settings as settings_utils\nimport sharpy.utils.cout_utils as cout\nimport warnings\nimport sharpy.linear.src.libss as libss\nimport h5py as h5\nimport sharpy.utils.frequencyutils as frequencyutils\nfrom sharpy.utils.frequencyutils import find_target_system\n\n\n@solver_interface.solver\nclass FrequencyResponse(solver_interface.BaseSolver):\n    \"\"\"\n    Frequency Response Calculator.\n\n    Computes the frequency response of a built linear system. The frequency will be calculated for the systems\n    specified in the ``target_system`` list. The desired ``frequency_unit`` will be either ``w`` for radians/s or ``k``\n    for reduced frequency (if the system is scaled). The ``frequency_bounds`` setting will set the lower and upper\n    bounds of the response, while ``num_freqs`` will specify the number of evaluations.\n    The option ``frequency_spacing`` allows you to space the evaluations point following a ``log``\n    or ``linear`` spacing.\n\n    If ``compute_hinf`` is set, the H-infinity norm of the system is calculated.\n\n    This will be saved to a binary ``.h5`` file as detailed in :func:`save_freq_resp`.\n\n    Finally, the ``quick_plot`` option will plot some quick and dirty bode plots of the response. This requires\n    access to ``matplotlib``.\n\n    \"\"\"\n    solver_id = 'FrequencyResponse'\n    solver_classification = 'post-processor'\n\n    settings_types = dict()\n    settings_default = dict()\n    settings_description = dict()\n    settings_options = dict()\n\n    settings_types['print_info'] = 'bool'\n    settings_default['print_info'] = False\n    settings_description['print_info'] = 'Write output to screen.'\n\n    settings_types['target_system'] = 'list(str)'\n    settings_default['target_system'] = ['aeroelastic']\n    settings_description['target_system'] = 'System or systems for which to find frequency response.'\n    settings_options['target_system'] = ['aeroelastic', 'aerodynamic', 'structural']\n\n    settings_types['frequency_unit'] = 'str'\n    settings_default['frequency_unit'] = 'k'\n    settings_description['frequency_unit'] = 'Units of frequency, ``w`` for rad/s, ``k`` reduced.'\n    settings_options['frequency_unit'] = ['w', 'k']\n\n    settings_types['frequency_scaling'] = 'dict'\n    settings_default['frequency_scaling'] = {}\n    settings_description['frequency_scaling'] = 'Dictionary containing the frequency scaling factors, if the ' \\\n                                                'aerodynamic system has not been previously scaled. Applied also if ' \\\n                                                'the desired unit is reduced frequency.'\n\n    scaling_types = dict()\n    scaling_default = dict()\n    scaling_description = dict()\n\n    scaling_types['length'] = 'float'\n    scaling_default['length'] = 1.\n    scaling_description['length'] = 'Length scaling factor.'\n\n    scaling_types['speed'] = 'float'\n    scaling_default['speed'] = 1.\n    scaling_description['speed'] = 'Speed scaling factor.'\n\n    settings_types['frequency_bounds'] = 'list(float)'\n    settings_default['frequency_bounds'] = [1e-3, 1]\n    settings_description['frequency_bounds'] = 'Lower and upper frequency bounds in the corresponding unit.'\n\n    settings_types['frequency_spacing'] = 'str'\n    settings_default['frequency_spacing'] = 'linear'\n    settings_description['frequency_spacing'] = 'Compute the frequency response in a ``linear`` or ``log`` grid.'\n    settings_options['frequency_spacing'] = ['linear', 'log']\n\n    settings_types['num_freqs'] = 'int'\n    settings_default['num_freqs'] = 50\n    settings_description['num_freqs'] = 'Number of frequencies to evaluate.'\n\n    settings_types['compute_hinf'] = 'bool'\n    settings_default['compute_hinf'] = False\n    settings_description['compute_hinf'] = 'Compute Hinfinity norm of the system.'\n\n    settings_types['quick_plot'] = 'bool'\n    settings_default['quick_plot'] = False\n    settings_description['quick_plot'] = 'Produce array of ``.png`` plots showing response. Requires matplotlib.'\n\n    settings_table = settings_utils.SettingsTable()\n    __doc__ += settings_table.generate(settings_types, settings_default, settings_description, settings_options)\n\n    scaling_table = settings_utils.SettingsTable()\n    __doc__ += scaling_table.generate(scaling_types, scaling_default, scaling_description,\n                                      header_line='The scaling dictionary takes the following entries:')\n\n    def __init__(self):\n\n        self.settings = None\n        self.data = None\n        self.folder = None\n        self.print_info = False\n\n        self.scaled = False\n        self.w_to_k = 1\n        self.wv = None\n        self.caller = None\n\n    def initialise(self, data, custom_settings=None, caller=None, restart=False):\n\n        self.data = data\n\n        if not custom_settings:\n            self.settings = self.data.settings[self.solver_id]\n        else:\n            self.settings = custom_settings\n        settings_utils.to_custom_types(self.settings,\n                           self.settings_types,\n                           self.settings_default,\n                           self.settings_options,\n                           no_ctype=True)\n\n        self.print_info = self.settings['print_info']\n\n        if self.settings['frequency_unit'] == 'k':\n            self.scaled = True\n            if self.data.linear.linear_system.uvlm.scaled:\n                scaling = self.data.linear.linear_system.uvlm.sys.ScalingFacts\n            else:\n                scaling = self.settings['frequency_scaling']\n                settings_utils.to_custom_types(scaling, self.scaling_types, self.scaling_default,\n                                               no_ctype=True)\n            self.w_to_k = scaling['length'] / scaling['speed']\n        else:\n            self.w_to_k = 1.\n\n        # Frequency bounds in radians\n        lb = self.settings['frequency_bounds'][0] / self.w_to_k\n        ub = self.settings['frequency_bounds'][1] / self.w_to_k\n\n        nfreqs = self.settings['num_freqs']\n        if self.settings['frequency_spacing'] == 'linear':\n            self.wv = np.linspace(lb, ub, nfreqs)\n        elif self.settings['frequency_spacing'] == 'log':\n            self.wv = np.logspace(np.log10(lb), np.log10(ub), nfreqs)\n        else:\n            raise NotImplementedError('Unrecognised frequency spacing setting %s' % self.settings['frequency_spacing'])\n\n        self.folder = data.output_folder + '/frequencyresponse/'\n        if not os.path.exists(self.folder):\n            os.makedirs(self.folder)\n        self.caller = caller\n\n\n    def run(self, **kwargs):\n        \"\"\"\n        Computes the frequency response of the linear state-space.\n\n        Args:\n            ss (sharpy.linear.src.libss.StateSpace (Optional)): State-space object for which to compute the frequency response.\n              If not given, the response for the previously assembled systems and specified in ``target_system`` will\n              be performed.\n        \"\"\"\n        online = settings_utils.set_value_or_default(kwargs, 'online', False)\n        ss = settings_utils.set_value_or_default(kwargs, 'ss', None)\n\n        if ss is None:\n            ss_list = [find_target_system(self.data, system_name) for system_name in self.settings['target_system']]\n        elif type(ss) is libss.StateSpace:\n            ss_list = [ss]\n        elif type(ss) is list:\n            ss_list = ss\n        else:\n            raise TypeError('StateSpace input must be either a libss.StateSpace instance or a list of libss.StateSpace')\n\n        for ith, system in enumerate(ss_list):\n            if self.print_info:\n                cout.cout_wrap('Computing frequency response...')\n            if ss is None:\n                try:\n                    system_name = self.settings['target_system'][ith]\n                    if self.print_info:\n                        cout.cout_wrap('\\tComputing frequency response for %s system' % system_name, 1)\n                except IndexError:\n                    system_name = None\n            else:\n                system_name = None  # For the case where the state-space is parsed in run().\n\n            t0fom = time.time()\n            y_freq_fom = system.freqresp(self.wv)\n            tfom = time.time() - t0fom\n\n            if self.settings['compute_hinf']:\n\n                if self.print_info:\n                    cout.cout_wrap('Computing H-infinity norm...')\n                try:\n                    hinf = frequencyutils.h_infinity_norm(system, iter_max=50, print_info=self.settings['print_info'])\n                except np.linalg.LinAlgError:\n                    hinf = None\n                    cout.cout_wrap('H-infinity calculation did not converge', 4)\n\n            else:\n                hinf = None\n\n            self.save_freq_resp(self.wv * self.w_to_k, y_freq_fom, system_name=system_name, hinf=hinf)\n\n            cout.cout_wrap('\\tComputed the frequency response in %f s' % tfom, 2)\n\n            if self.settings['quick_plot']:\n                self.quick_plot(y_freq_fom, subfolder=system_name)\n\n        return self.data\n\n    def save_freq_resp(self, wv, Yfreq, system_name=None, hinf=None):\n        \"\"\"\n        Saves the frequency response to a binary ``.h5`` file.\n\n        If the system has not been scaled, the units of frequency are ``rad/s`` and the response is given in complex\n        form. The response is saved in a ``[p, m, n_freq_eval]`` format, where ``p`` corresponds to the system's\n        outputs, ``n`` to the number of inputs and ``n_freq_eval`` to the number of frequency evaluations.\n\n        Args:\n            wv (np.ndarray): Frequency array.\n            Y_freq (np.ndarray): Frequency response data ``[p, m, n_freq_eval]`` matrix.\n            system_name (str (optional)): State-space system name.\n            hinf (float (optional)): H-infinity norm of the system.\n        \"\"\"\n\n        with open(self.folder + '/freqdata_readme.txt', 'w') as outfile:\n            outfile.write('Frequency Response Data Output\\n\\n')\n            outfile.write('Frequency data found in the relevant .h5 file\\n')\n            outfile.write('The units of frequency are rad/s\\nThe frequency' \\\n                          'response is given in complex form.')\n\n        case_name = ''\n        if system_name is not None:\n            case_name += system_name + '.'\n\n        p, m, _ = Yfreq.shape\n\n        h5filename = self.folder + '/' + case_name + 'freqresp.h5'\n        with h5.File(h5filename, 'w') as f:\n            f.create_dataset('frequency', data=wv)\n            f.create_dataset('response', data=Yfreq, dtype=complex)\n            f.create_dataset('inputs', data=m)\n            f.create_dataset('outputs', data=p)\n            if hinf is not None:\n                f.create_dataset('hinf_norm', data=hinf)\n\n        if self.print_info:\n            cout.cout_wrap('Saved .h5 file to %s with frequency response data' % h5filename)\n\n    def quick_plot(self, y_freq_fom=None, subfolder=None):\n        p, m, _ = y_freq_fom.shape\n        try:\n            cout.cout_wrap('\\tCreating Quick plots of the frequency response', 1)\n\n            out_folder = self.folder\n            if subfolder:\n                out_folder += '/' + subfolder\n\n            if not os.path.isdir(out_folder):\n                os.makedirs(out_folder, exist_ok=True)\n\n            import matplotlib.pyplot as plt\n            for mj in range(m):\n                for pj in range(p):\n                    fig1, ax1 = plt.subplots(nrows=2)\n                    fig_title = 'in%02g_out%02g' % (mj, pj)\n                    ax1[0].set_title(fig_title)\n                    if y_freq_fom is not None:\n                        ax1[0].plot(self.wv * self.w_to_k, 20 * np.log10(np.abs(y_freq_fom[pj, mj, :])), color='C0')\n                        ax1[1].plot(self.wv * self.w_to_k, np.angle(y_freq_fom[pj, mj, :]), '-', color='C0')\n                    if self.scaled:\n                        ax1[1].set_xlabel('Reduced Frequency, k [-]')\n                    else:\n                        ax1[1].set_xlabel(r'Frequency, $\\omega$ [rad/s]')\n\n                    ax1[0].set_ylabel('Amplitude [dB]')\n                    ax1[1].set_ylabel('Phase [rad]')\n                    fig1.savefig(out_folder + '/' + fig_title + '.png')\n                    plt.close()\n\n            cout.cout_wrap('\\tPlots saved to %s' % out_folder, 1)\n        except ModuleNotFoundError:\n            warnings.warn('Matplotlib not found - skipping plot')\n"
  },
  {
    "path": "sharpy/postproc/liftdistribution.py",
    "content": "import os\n\nimport numpy as np\n\nfrom sharpy.utils.solver_interface import solver, BaseSolver\nimport sharpy.utils.settings as settings_utils\nimport sharpy.aero.utils.mapping as mapping\nimport sharpy.utils.algebra as algebra\nimport sharpy.aero.utils.utils as aeroutils\n\n\n@solver\nclass LiftDistribution(BaseSolver):\n    \"\"\"LiftDistribution\n    \n    Calculates and exports the lift distribution on lifting surfaces\n    \n    \"\"\"\n    solver_id = 'LiftDistribution'\n    solver_classification = 'post-processor'\n\n    settings_types = dict()\n    settings_default = dict()\n    settings_description = dict()\n\n    settings_types['text_file_name'] = 'str'\n    settings_default['text_file_name'] = 'liftdistribution'\n    settings_description['text_file_name'] = 'Text file name'\n\n    settings_default['coefficients'] = True\n    settings_types['coefficients'] = 'bool'\n    settings_description['coefficients'] = 'Calculate aerodynamic lift coefficients'\n\n    settings_types['rho'] = 'float'\n    settings_default['rho'] = 1.225\n    settings_description['rho'] = 'Reference freestream density [kg/m³]'\n\n    settings_table = settings_utils.SettingsTable()\n    __doc__ += settings_table.generate(settings_types, settings_default, settings_description)\n\n    def __init__(self):\n        self.settings = None\n        self.data = None\n        self.folder = None\n        self.caller = None\n\n    def initialise(self, data, custom_settings=None, restart=False, caller=None):\n        self.data = data\n        self.settings = data.settings[self.solver_id]\n        settings_utils.to_custom_types(self.settings, self.settings_types, self.settings_default)\n        self.caller = caller\n        self.folder = data.output_folder + '/liftdistribution/'\n        if not os.path.exists(self.folder):\n            os.makedirs(self.folder)\n\n    def run(self, **kwargs):\n        self.lift_distribution(self.data.structure.timestep_info[self.data.ts],\n                               self.data.aero.timestep_info[self.data.ts])\n        return self.data\n\n    def lift_distribution(self, struct_tstep, aero_tstep):\n        # Force mapping\n        forces = mapping.aero2struct_force_mapping(\n            aero_tstep.forces + aero_tstep.dynamic_forces,\n            self.data.aero.struct2aero_mapping,\n            aero_tstep.zeta,\n            struct_tstep.pos,\n            struct_tstep.psi,\n            self.data.structure.node_master_elem,\n            self.data.structure.connectivities,\n            struct_tstep.cag(),\n            self.data.aero.data_dict)\n        # Prepare output matrix and file\n        N_nodes = self.data.structure.num_node\n        numb_col = 6\n        header = \"x,y,z,fx,fy,fz\"\n        # get aero forces\n        # get rotation matrix\n        cga = algebra.quat2rotation(struct_tstep.quat)\n        if self.settings[\"coefficients\"]:\n            # TODO: add nondimensional spanwise column y/s\n            header += \", cfx, cfy, cfz\"\n            numb_col += 3\n        lift_distribution = np.zeros((N_nodes, numb_col))\n\n        for inode in range(N_nodes):\n            if self.data.aero.data_dict['aero_node'][inode]:\n                local_node = self.data.aero.struct2aero_mapping[inode][0][\"i_n\"]\n                ielem, inode_in_elem = self.data.structure.node_master_elem[inode]\n                i_surf = int(self.data.aero.surface_distribution[ielem])\n                # get c_gb                \n                cab = algebra.crv2rotation(struct_tstep.psi[ielem, inode_in_elem, :])\n                cgb = np.dot(cga, cab)\n                # Get c_bs\n                urel, dir_urel = aeroutils.magnitude_and_direction_of_relative_velocity(struct_tstep.pos[inode, :],\n                                                                                        struct_tstep.pos_dot[inode, :],\n                                                                                        struct_tstep.for_vel[:],\n                                                                                        cga,\n                                                                                        aero_tstep.u_ext[i_surf][:, :,\n                                                                                        local_node])\n                dir_span, span, dir_chord, chord = aeroutils.span_chord(local_node, aero_tstep.zeta[i_surf])\n                # Stability axes - projects forces in B onto S\n                c_bs = aeroutils.local_stability_axes(cgb.T.dot(dir_urel), cgb.T.dot(dir_chord))\n                aero_forces = c_bs.T.dot(forces[inode, :3])\n                # Store data in export matrix\n                lift_distribution[inode, 3:6] = aero_forces\n                lift_distribution[inode, 2] = struct_tstep.pos[inode, 2]  # z\n                lift_distribution[inode, 1] = struct_tstep.pos[inode, 1]  # y\n                lift_distribution[inode, 0] = struct_tstep.pos[inode, 0]  # x\n                if self.settings[\"coefficients\"]:\n                    # Get lift coefficient\n                    for idim in range(3):\n                        lift_distribution[inode, 6+idim] = np.sign(aero_forces[idim]) * np.linalg.norm(aero_forces[idim]) \\\n                                                    / (0.5 * self.settings['rho'] \\\n                                                        * np.linalg.norm(urel) ** 2 * span * chord)  \n                        # Check if shared nodes from different surfaces exist (e.g. two wings joining at symmetry plane)\n                        # Leads to error since panel area just donates for half the panel size while lift forces is summed up\n                        lift_distribution[inode, 6+idim] /= len(self.data.aero.struct2aero_mapping[inode])\n\n        # Export lift distribution data\n        np.savetxt(os.path.join(self.folder,  self.settings['text_file_name'] + '_ts{}'.format(str(self.data.ts)) + '.txt'), lift_distribution,\n                   fmt='%10e,' * (numb_col - 1) + '%10e', delimiter=\", \", header=header)\n"
  },
  {
    "path": "sharpy/postproc/pickledata.py",
    "content": "import os\nimport pickle\n\nimport h5py\n\nimport sharpy\nfrom sharpy.utils.solver_interface import solver, BaseSolver\nimport sharpy.utils.settings as settings_utils\n\n\n# Define basic numerical types\n# BasicNumTypes=(float,float32,float64,int,int32,int64,complex)\n\n@solver\nclass PickleData(BaseSolver):\n    \"\"\"\n    This postprocessor writes the SHARPy ``data`` structure in a pickle file, such that classes and\n    methods from SHARPy are retained for restarted solutions or further post-processing.\n\n    A pickle is saved to the SHARPy output folder, specified in the settings for SHARPy as ``log_folder``.\n\n    This solver does not have settings, yet it still needs to be included in the `.sharpy` file as an\n    empty dictionary.\n    \"\"\"\n    solver_id = 'PickleData'\n    solver_classification = 'post-processor'\n\n    settings_types = dict()\n    settings_default = dict()\n    settings_description = dict()\n\n    settings_types['stride'] = 'int'\n    settings_default['stride'] = 1\n    settings_description['stride'] = 'Number of steps between the execution calls when run online'\n\n    settings_table = settings_utils.SettingsTable()\n    __doc__ += settings_table.generate(settings_types, settings_default, settings_description)\n\n    def __init__(self):\n        import sharpy\n\n        self.data = None\n        self.filename = None\n        self.folder = None\n        self.caller = None\n\n    def initialise(self, data, custom_settings=None, caller=None, restart=False):\n        self.data = data\n        if custom_settings is None:\n            self.settings = data.settings[self.solver_id]\n        else:\n            self.settings = custom_settings\n\n        settings_utils.to_custom_types(self.settings,\n                           self.settings_types,\n                           self.settings_default)\n\n        self.folder = data.output_folder\n        self.filename = self.folder + self.data.settings['SHARPy']['case']+'.pkl'\n        self.caller = caller\n\n\n    def run(self, **kwargs):\n        \n        online = settings_utils.set_value_or_default(kwargs, 'online', False)\n        solvers = settings_utils.set_value_or_default(kwargs, 'solvers', None)\n        \n        if ((online and (self.data.ts % self.settings['stride'] == 0)) or (not online)):\n            with open(self.filename, 'wb') as f:\n                pickle.dump(self.data, f, protocol=pickle.HIGHEST_PROTOCOL)\n                pickle.dump(solvers, f, protocol=pickle.HIGHEST_PROTOCOL)\n\n        return self.data\n"
  },
  {
    "path": "sharpy/postproc/plotflowfield.py",
    "content": "import os\nimport numpy as np\nfrom sharpy.utils.solver_interface import solver, BaseSolver\nimport sharpy.utils.generator_interface as gen_interface\nimport sharpy.utils.settings as settings_utils\nimport sharpy.aero.utils.uvlmlib as uvlmlib\nimport ctypes as ct\nfrom sharpy.utils.constants import vortex_radius_def\n\n\n@solver\nclass PlotFlowField(BaseSolver):\n    \"\"\"\n    Plots the flow field in Paraview and computes the velocity at a set of points in a grid.\n    \"\"\"\n    solver_id = 'PlotFlowField'\n    solver_classification = 'post-processor'\n\n    settings_types = dict()\n    settings_default = dict()\n    settings_description = dict()\n    settings_options = dict()\n\n    settings_types['postproc_grid_generator'] = 'str'\n    settings_default['postproc_grid_generator'] = 'GridBox'\n    settings_description['postproc_grid_generator'] = 'Generator used to create grid and plot flow field'\n    settings_options['postproc_grid_generator'] = ['GridBox']\n\n    settings_types['postproc_grid_input'] = 'dict'\n    settings_default['postproc_grid_input'] = dict()\n    settings_description['postproc_grid_input'] = 'Dictionary containing settings for ``postproc_grid_generator``.'\n\n    settings_types['velocity_field_generator'] = 'str'\n    settings_default['velocity_field_generator'] = 'SteadyVelocityField'\n    settings_description['velocity_field_generator'] = 'Chosen velocity field generator'\n\n    settings_types['velocity_field_input'] = 'dict'\n    settings_default['velocity_field_input'] = dict()\n    settings_description['velocity_field_input'] = 'Dictionary containing settings for the selected ``velocity_field_generator``.'\n\n    settings_types['dt'] = 'float'\n    settings_default['dt'] = 0.1\n    settings_description['dt'] = 'Time step.'\n\n    settings_types['include_external'] = 'bool'\n    settings_default['include_external'] = True\n    settings_description['include_external'] = 'Include external velocities.'\n\n    settings_types['include_induced'] = 'bool'\n    settings_default['include_induced'] = True\n    settings_description['include_induced'] = 'Include induced velocities.'\n\n    settings_types['stride'] = 'int'\n    settings_default['stride'] = 1\n    settings_description['stride'] = 'Number of time steps between plots.'\n\n    settings_types['num_cores'] = 'int'\n    settings_default['num_cores'] = 1\n    settings_description['num_cores'] = 'Number of cores to use.'\n\n    settings_types['vortex_radius'] = 'float'\n    settings_default['vortex_radius'] = vortex_radius_def\n    settings_description['vortex_radius'] = 'Distance below which inductions are not computed.'\n\n    settings_table = settings_utils.SettingsTable()\n    __doc__ += settings_table.generate(settings_types, settings_default, settings_description, settings_options)\n\n    def __init__(self):\n        self.settings = None\n        self.data = None\n        self.folder = None\n        self.caller = None\n\n    def initialise(self, data, custom_settings=None, caller=None, restart=False):\n        self.data = data\n        if custom_settings is None:\n            self.settings = data.settings[self.solver_id]\n        else:\n            self.settings = custom_settings\n        settings_utils.to_custom_types(self.settings,\n                           self.settings_types,\n                           self.settings_default,\n                           self.settings_options)\n\n        self.folder = data.output_folder + '/' + 'GenerateFlowField/'\n        if not os.path.isdir(self.folder):\n            os.makedirs(self.folder)\n\n        # init velocity generator\n        velocity_generator_type = gen_interface.generator_from_string(\n            self.settings['velocity_field_generator'])\n        self.velocity_generator = velocity_generator_type()\n        self.velocity_generator.initialise(self.settings['velocity_field_input'], restart=restart)\n\n        # init postproc grid generator\n        postproc_grid_generator_type = gen_interface.generator_from_string(\n            self.settings['postproc_grid_generator'])\n        self.postproc_grid_generator = postproc_grid_generator_type()\n        self.postproc_grid_generator.initialise(self.settings['postproc_grid_input'], restart=restart)\n        self.caller = caller\n\n    def output_velocity_field(self, ts):\n        # Notice that SHARPy utilities deal with several two-dimensional surfaces\n        # To be able to build 3D volumes, I will make use of the surface index as\n        # the third index in space\n        # It does not apply to the 'u' array because this way it is easier to\n        # write it in paraview\n\n        # Generate the grid\n        vtk_info, grid = self.postproc_grid_generator.generate({\n                'for_pos': self.data.structure.timestep_info[ts].for_pos[0:3]})\n\n        # Compute the induced velocities\n        nx = grid[0].shape[1]\n        ny = grid[0].shape[2]\n        nz = len(grid)\n\n        array_counter = 0\n        u_ind = np.zeros((nx, ny, nz, 3), dtype=float)\n        if self.settings['include_induced']:\n            target_triads = np.zeros((nx*ny*nz, 3))\n            ipoint = -1\n            for iz in range(nz):\n                for ix in range(nx):\n                    for iy in range(ny):\n                        ipoint += 1\n                        target_triads[ipoint, :] = grid[iz][:, ix, iy].astype(dtype=ct.c_double, order='F', copy=True)\n\n            u_ind_points = uvlmlib.uvlm_calculate_total_induced_velocity_at_points(self.data.aero.timestep_info[ts],\n                                                                                                      target_triads,\n                                                                                                      self.settings['vortex_radius'],\n                                                                                                      self.data.structure.timestep_info[ts].for_pos[0:3],\n                                                                                                      self.settings['num_cores'])\n            ipoint = -1\n            for iz in range(nz):\n                for ix in range(nx):\n                    for iy in range(ny):\n                        ipoint += 1\n                        u_ind[ix, iy, iz, :] = u_ind_points[ipoint, :]\n\n            # Write the data\n            vtk_info.point_data.add_array(u_ind.reshape((-1, u_ind.shape[-1]), order='F')) # Reshape the array except from the last dimension\n            vtk_info.point_data.get_array(array_counter).name = 'induced_velocity'\n            vtk_info.point_data.update()\n            array_counter += 1\n\n        # Add the external velocities\n        u_ext_out = np.zeros((nx, ny, nz, 3), dtype=float)\n\n        if self.settings['include_external']:\n            u_ext = []\n            for iz in range(nz):\n                u_ext.append(np.zeros((3, nx, ny), dtype=ct.c_double))\n            self.velocity_generator.generate({'zeta': grid,\n                                              'override': True,\n                                              't': ts*self.settings['dt'],\n                                              'ts': ts,\n                                              'dt': self.settings['dt'],\n                                              'for_pos': 0*self.data.structure.timestep_info[ts].for_pos},\n                                             u_ext)\n            for iz in range(nz):\n                for ix in range(nx):\n                    for iy in range(ny):\n                        u_ext_out[ix, iy, iz, :] += u_ext[iz][:, ix, iy]\n\n            # Write the data\n            vtk_info.point_data.add_array(u_ext_out.reshape((-1, u_ext_out.shape[-1]), order='F')) # Reshape the array except from the last dimension\n            vtk_info.point_data.get_array(array_counter).name = 'external_velocity'\n            vtk_info.point_data.update()\n            array_counter += 1\n\n        # add the data\n        u = u_ind + u_ext_out\n\n        # Write the data\n        vtk_info.point_data.add_array(u.reshape((-1, u.shape[-1]), order='F')) # Reshape the array except from the last dimension\n        vtk_info.point_data.get_array(array_counter).name = 'velocity'\n        vtk_info.point_data.update()\n        array_counter += 1\n\n        filename = self.folder + \"VelocityField_\" + '%06u' % ts + \".vtk\"\n        from tvtk.api import write_data\n        write_data(vtk_info, filename)\n\n    def run(self, **kwargs):\n\n        online = settings_utils.set_value_or_default(kwargs, 'online', False)\n\n        if online:\n            if divmod(self.data.ts, self.settings['stride'])[1] == 0:\n                self.output_velocity_field(len(self.data.structure.timestep_info) - 1)\n        else:\n            for ts in range(0, len(self.data.structure.timestep_info)):\n                if not self.data.structure.timestep_info[ts] is None:\n                    self.output_velocity_field(ts)\n        return self.data\n"
  },
  {
    "path": "sharpy/postproc/savedata.py",
    "content": "import os\nimport h5py\nimport copy\nimport sharpy\nimport sharpy.utils.cout_utils as cout\nfrom sharpy.utils.solver_interface import solver, BaseSolver\nimport sharpy.utils.settings as settings_utils\nimport sharpy.utils.h5utils as h5utils\nfrom sharpy.presharpy.presharpy import PreSharpy\n\n\n@solver\nclass SaveData(BaseSolver):\n    \"\"\"\n    The ``SaveData`` postprocessor writes the SHARPy variables into ``hdf5`` files. The linear state space files\n    may be saved to ``.mat`` if desired instead.\n\n    It has options to save the following classes:\n\n        * :class:`~sharpy.sharpy.aero.models.Aerogrid` including :class:`sharpy.sharpy.utils.datastructures.AeroTimeStepInfo`\n\n        * :class:`~sharpy.sharpy.structure.beam.Beam` including :class:`sharpy.sharpy.utils.datastructures.StructTimeStepInfo`\n\n        * :class:`sharpy.solvers.linearassembler.Linear` including classes in :exc:`sharpy.linear.assembler`\n\n    Notes:\n        This method saves simply the data. If you would like to preserve the SHARPy methods of the relevant classes\n        see also :class:`sharpy.solvers.pickledata.PickleData`.\n\n    \"\"\"\n    solver_id = 'SaveData'\n    solver_classification = 'post-processor'\n\n    settings_types = dict()\n    settings_default = dict()\n    settings_description = dict()\n    settings_options = dict()\n\n    settings_types['save_aero'] = 'bool'\n    settings_default['save_aero'] = True\n    settings_description['save_aero'] = 'Save aerodynamic classes.'\n\n    settings_types['save_nonlifting'] = 'bool'\n    settings_default['save_nonlifting'] = False\n    settings_description['save_nonlifting'] = 'Save aerodynamic classes.'\n\n    settings_types['save_struct'] = 'bool'\n    settings_default['save_struct'] = True\n    settings_description['save_struct'] = 'Save structural classes.'\n\n    settings_types['save_linear'] = 'bool'\n    settings_default['save_linear'] = False\n    settings_description['save_linear'] = 'Save linear state space system.'\n\n    settings_types['save_linear_uvlm'] = 'bool'\n    settings_default['save_linear_uvlm'] = False\n    settings_description['save_linear_uvlm'] = 'Save linear UVLM state space system. Use with caution when dealing with ' \\\n                                               'large systems.'\n\n    settings_types['save_wake'] = 'bool'\n    settings_default['save_wake'] = True\n    settings_description['save_wake'] = 'Save aero wake classes.'\n\n    settings_types['save_rom'] = 'bool'\n    settings_default['save_rom'] = False\n    settings_description['save_rom'] = 'Saves the ROM matrices and the reduced order model'\n\n    settings_types['skip_attr'] = 'list(str)'\n    settings_default['skip_attr'] = ['fortran',\n                                     'airfoils',\n                                     'airfoil_db',\n                                     'settings_types',\n                                     # 'beam',\n                                     'ct_dynamic_forces_list',\n                                     # 'ct_forces_list',\n                                     'ct_gamma_dot_list',\n                                     'ct_gamma_list',\n                                     'ct_gamma_star_list',\n                                     'ct_normals_list',\n                                     'ct_u_ext_list',\n                                     'ct_u_ext_star_list',\n                                     'ct_zeta_dot_list',\n                                     'ct_zeta_list',\n                                     'ct_zeta_star_list',\n                                     'dynamic_input']\n    settings_description['skip_attr'] = 'List of attributes to skip when writing file'\n\n    settings_types['compress_float'] = 'bool'\n    settings_default['compress_float'] = False\n    settings_description['compress_float'] = 'Compress float'\n\n    settings_types['format'] = 'str'\n    settings_default['format'] = 'h5'\n    settings_description['format'] = 'Save linear state space to hdf5 ``.h5`` or Matlab ``.mat`` format.'\n    settings_options['format'] = ['h5', 'mat']\n\n    settings_types['stride'] = 'int'\n    settings_default['stride'] = 1\n    settings_description['stride'] = 'Number of steps between the execution calls when run online'\n\n    settings_table = settings_utils.SettingsTable()\n    __doc__ += settings_table.generate(settings_types, settings_default, settings_description,\n                                       settings_options=settings_options)\n\n    def __init__(self):\n\n        self.settings = None\n        self.data = None\n\n        self.folder = ''\n        self.filename = ''\n        self.filename_linear = ''\n        self.caller = None\n\n        ### specify which classes are saved as hdf5 group\n        # see initialise and add_as_grp\n        self.ClassesToSave = (PreSharpy,)\n\n    def initialise(self, data, custom_settings=None, caller=None, restart=False):\n        self.data = data\n        if custom_settings is None:\n            self.settings = data.settings[self.solver_id]\n        else:\n            self.settings = custom_settings\n\n        settings_utils.to_custom_types(self.settings,\n                           self.settings_types,\n                           self.settings_default,\n                           options=self.settings_options)\n\n        # Add these anyway - therefore if you add your own skip_attr you don't have to retype all of these\n        self.settings['skip_attr'].extend(['fortran',\n                                            'airfoils',\n                                            'airfoil_db',\n                                            'settings_types',\n                                            'ct_dynamic_forces_list',\n                                            'ct_forces_list',\n                                            'ct_gamma_dot_list',\n                                            'ct_gamma_list',\n                                            'ct_gamma_star_list',\n                                            'ct_normals_list',\n                                            'ct_u_ext_list',\n                                            'ct_u_ext_star_list',\n                                            'ct_zeta_dot_list',\n                                            'ct_zeta_list',\n                                            'ct_zeta_star_list',\n                                            'dynamic_input'])\n\n\n        # create folder for containing files if necessary\n        self.folder = data.output_folder + '/savedata/'\n        if not os.path.exists(self.folder):\n            os.makedirs(self.folder)\n        self.filename = self.folder + self.data.settings['SHARPy']['case'] + '.data.h5'\n        self.filename_linear = self.folder + self.data.settings['SHARPy']['case'] + '.linss.h5'\n\n        # remove old file if it exists\n        self.remove_file_if_exist(self.filename)\n\n        # check that there is a linear system - else return setting to false\n        if self.settings['save_linear'] or self.settings['save_linear_uvlm']:\n            try:\n                self.data.linear\n            except AttributeError:\n                cout.cout_wrap('SaveData variables ``save_linear`` and/or ``save_linear`` are True but no linear system'\n                               'been found', 3)\n                self.settings['save_linear'] = False\n                self.settings['save_linear_uvlm'] = False\n\n        if self.settings['format'] == 'h5':\n\n            # allocate list of classes to be saved\n            if self.settings['save_aero']:\n                self.ClassesToSave += (sharpy.aero.models.aerogrid.Aerogrid,\n                                       sharpy.utils.datastructures.AeroTimeStepInfo,)\n                if not self.settings['save_wake']:\n                    self.settings['skip_attr'].append('zeta_star')\n                    self.settings['skip_attr'].append('u_ext_star')\n                    self.settings['skip_attr'].append('gamma_star')\n                    self.settings['skip_attr'].append('dist_to_orig')\n                    self.settings['skip_attr'].append('wake_conv_vel')\n\n\n            if self.settings['save_nonlifting']:\n                self.ClassesToSave += (sharpy.aero.models.nonliftingbodygrid.NonliftingBodyGrid,\n                                       sharpy.utils.datastructures.NonliftingBodyTimeStepInfo,)\n\n            if self.settings['save_struct']:\n                self.ClassesToSave += (\n                    sharpy.structure.models.beam.Beam,\n                    sharpy.utils.datastructures.StructTimeStepInfo,)\n\n            if self.settings['save_linear']:\n                self.ClassesToSave += (sharpy.solvers.linearassembler.Linear,\n                                       sharpy.linear.assembler.linearaeroelastic.LinearAeroelastic,\n                                       sharpy.linear.assembler.linearbeam.LinearBeam,\n                                       sharpy.linear.assembler.linearuvlm.LinearUVLM,\n                                       sharpy.linear.src.libss.StateSpace,\n                                       sharpy.linear.src.lingebm.FlexDynamic,)\n\n            if self.settings['save_linear_uvlm']:\n                self.ClassesToSave += (sharpy.solvers.linearassembler.Linear, sharpy.linear.src.libss.ss_block)\n        self.caller = caller\n\n    def remove_file_if_exist(self, filepath):\n        if os.path.isfile(filepath):\n            os.remove(filepath)\n\n    def run(self, **kwargs):\n\n        online = settings_utils.set_value_or_default(kwargs, 'online', False)\n\n        # Use the following statement in case the ct types are not defined and\n        # you need them on uvlm3d\n        # self.data.aero.timestep_info[-1].generate_ctypes_pointers()\n\n        if ((online and (self.data.ts % self.settings['stride'] == 0)) or (not online)):\n            if self.settings['format'] == 'h5':\n                file_exists = os.path.isfile(self.filename)\n                hdfile = h5py.File(self.filename, 'a')\n\n                if (online and file_exists):\n                    self.save_timestep(self.data, self.settings, self.data.ts, hdfile)\n                else:\n                    skip_attr_init = copy.deepcopy(self.settings['skip_attr'])\n                    skip_attr_init.append('timestep_info')\n\n                    h5utils.add_as_grp(self.data, hdfile, grpname='data',\n                                       ClassesToSave=self.ClassesToSave, SkipAttr=skip_attr_init,\n                                       compress_float=self.settings['compress_float'])\n\n                    if self.settings['save_struct']:\n                        h5utils.add_as_grp(list(),\n                                hdfile['data']['structure'],\n                                grpname='timestep_info')\n                    if self.settings['save_aero']:\n                        h5utils.add_as_grp(list(),\n                                hdfile['data']['aero'],\n                                grpname='timestep_info')\n                    if self.settings['save_nonlifting']:\n                        h5utils.add_as_grp(list(),\n                                hdfile['data']['nonlifting_body'],\n                                grpname='timestep_info')\n\n                    for it in range(len(self.data.structure.timestep_info)):\n                        tstep_p = self.data.structure.timestep_info[it]\n                        if tstep_p is not None:\n                            self.save_timestep(self.data, self.settings, it, hdfile)\n\n                    hdfile.close()\n\n                if self.settings['save_linear_uvlm']:\n                    linhdffile = h5py.File(self.filename.replace('.data.h5', '.uvlmss.h5'), 'a')\n                    self.remove_file_if_exist(linhdffile)\n                    h5utils.add_as_grp(self.data.linear.linear_system.uvlm.ss, linhdffile, grpname='ss',\n                                    ClassesToSave=self.ClassesToSave, SkipAttr=self.settings['skip_attr'],\n                                    compress_float=self.settings['compress_float'])\n                    h5utils.add_as_grp(self.data.linear.linear_system.linearisation_vectors, linhdffile,\n                                    grpname='linearisation_vectors',\n                                    ClassesToSave=self.ClassesToSave, SkipAttr=self.settings['skip_attr'],\n                                    compress_float=self.settings['compress_float'])\n                    linhdffile.close()\n\n                if self.settings['save_linear']:\n                    self.remove_file_if_exist(self.filename_linear)\n                    with h5py.File(self.filename_linear, 'a') as linfile:\n                        h5utils.add_as_grp(self.data.linear.linear_system.linearisation_vectors, linfile,\n                                        grpname='linearisation_vectors',\n                                        ClassesToSave=self.ClassesToSave, SkipAttr=self.settings['skip_attr'],\n                                        compress_float=self.settings['compress_float'])\n                        h5utils.add_as_grp(self.data.linear.ss, linfile, grpname='ss',\n                                        ClassesToSave=self.ClassesToSave, SkipAttr=self.settings['skip_attr'],\n                                        compress_float=self.settings['compress_float'])\n\n                if self.settings['save_rom']:\n                    try:\n                        for k, rom in self.data.linear.linear_system.uvlm.rom.items():\n                            romhdffile = self.filename.replace('.data.h5', '_{:s}.rom.h5'.format(k.lower()))\n                            self.remove_file_if_exist(romhdffile)\n                            rom.save(romhdffile)\n                    except AttributeError:\n                        cout.cout_wrap('Could not locate a reduced order model to save')\n\n            elif self.settings['format'] == 'mat':\n                from scipy.io import savemat\n                if self.settings['save_linear']:\n                    # reference-forces\n                    linearisation_vectors = self.data.linear.linear_system.linearisation_vectors\n\n                    matfilename = self.filename.replace('.data.h5', '.linss.mat')\n                    A, B, C, D = self.data.linear.ss.get_mats()\n                    savedict = {'A': A,\n                                'B': B,\n                                'C': C,\n                                'D': D}\n                    for k, v in linearisation_vectors.items():\n                        savedict[k] = v\n                    dt = self.data.linear.ss.dt\n                    if dt is not None:\n                        savedict['dt'] = dt\n                    savemat(matfilename, savedict)\n\n                if self.settings['save_linear_uvlm']:\n                    matfilename = self.filename.replace('.data.h5', '.uvlmss.mat')\n                    linearisation_vectors = self.data.linear.linear_system.uvlm.linearisation_vectors\n                    A, B, C, D = self.data.linear.linear_system.uvlm.ss.get_mats()\n                    savedict = {'A': A,\n                                'B': B,\n                                'C': C,\n                                'D': D}\n                    for k, v in linearisation_vectors.items():\n                        savedict[k] = v\n                    dt = self.data.linear.linear_system.uvlm.ss.dt\n                    if dt is not None:\n                        savedict['dt'] = dt\n                    savemat(matfilename, savedict)\n\n        return self.data\n\n    @staticmethod\n    def save_timestep(data, settings, ts, hdfile):\n        if settings['save_aero']:\n            h5utils.add_as_grp(data.aero.timestep_info[ts],\n                               hdfile['data']['aero']['timestep_info'],\n                               grpname=(\"%05d\" % ts),\n                               ClassesToSave=(sharpy.utils.datastructures.AeroTimeStepInfo,),\n                               SkipAttr=settings['skip_attr'],\n                               compress_float=settings['compress_float'])\n        if settings['save_nonlifting']:\n            h5utils.add_as_grp(data.nonlifting_body.timestep_info[ts],\n                               hdfile['data']['nonlifting_body']['timestep_info'],\n                               grpname=(\"%05d\" % ts),\n                               ClassesToSave=(sharpy.utils.datastructures.NonliftingBodyTimeStepInfo,),\n                               SkipAttr=settings['skip_attr'],\n                               compress_float=settings['compress_float'])\n        if settings['save_struct']:\n            tstep = data.structure.timestep_info[ts]\n\n            h5utils.add_as_grp(tstep,\n                               hdfile['data']['structure']['timestep_info'],\n                               grpname=(\"%05d\" % ts),\n                               ClassesToSave=(sharpy.utils.datastructures.StructTimeStepInfo,),\n                               SkipAttr=settings['skip_attr'],\n                               compress_float=settings['compress_float'])\n"
  },
  {
    "path": "sharpy/postproc/saveparametriccase.py",
    "content": "from sharpy.utils.solver_interface import solver, BaseSolver, initialise_solver\nimport sharpy.utils.settings as settings_utils\nimport configobj\nimport os\nimport sharpy.utils.cout_utils as cout\nimport warnings\n\n\n@solver\nclass SaveParametricCase(BaseSolver):\n    \"\"\"\n    SaveParametricCase is a post-processor that creates a ConfigParser text file called\n    ``<sharpy_case_name>.pmor.sharpy`` that contains information on certain simulation parameters. It is useful as\n    a record keeper if you are doing a parametric study and for parametric model interpolation.\n\n\n    If the setting ``save_case`` is selected and the post processor :class:`~sharpy.solvers.pickledata.PickleData`\n    is not present in the SHARPy flow, this solver will pickle the data to the path given in the ``folder`` setting.\n\n    The setting ``save_pmor_items`` saves to h5 the following state-spaces and gains, if present:\n        * Aeroelastic state-space saved to: <output_folder> / save_pmor_data / <case_name>_statespace.h5\n        * Aerodynamic ROM reduced order bases saved to: <output_folder> / save_pmor_data / <case_name>_aerorob.h5\n        * Structural ROM reduced order bases saved to: <output_folder> / save_pmor_data / <case_name>_modal_structrob.h5\n\n    The setting ``save_pmor_subsystem saves the additional state-spaces to h5 files:\n        * Structural matrices saved to: <output_folder> / save_pmor_data / <case_name>_struct_matrices.h5\n        * Structural state-space saved to: <output_folder> / save_pmor_data / <case_name>_beamstatespace.h5\n        * Aerodynamic state-space saved to: <output_folder> / save_pmor_data / <case_name>_aerostatespace.h5\n\n    Examples:\n\n        In the case you are running several SHARPy cases, varying for instance the velocity, the settings would\n        be something like:\n\n        >>> parameter_value = 10  # parameter of study\n        >>> input_settings = {'<name_of_your_parameter>': value  # the name of the parameter is at the user's discretion\n        >>>                  }  # add more parameters as required\n\n        The result would be the ``<sharpy_case_name>.pmor.sharpy`` file with the following content:\n\n        .. code-block:: none\n\n            [parameters]\n            <name_of_your_parameter> = value\n\n    \"\"\"\n    solver_id = 'SaveParametricCase'\n    solver_classification = 'post-processor'\n\n    settings_types = dict()\n    settings_default = dict()\n    settings_description = dict()\n\n    settings_types['save_case'] = 'bool'\n    settings_default['save_case'] = False\n    settings_description['save_case'] = 'DeprecationWarning - Save a .pkl of the SHARPy case. Required for PMOR.'\n\n    settings_types['parameters'] = 'dict'\n    settings_default['parameters'] = None\n    settings_description['parameters'] = 'Dictionary containing the chosen simulation parameters and their values.'\n\n    settings_types['save_pmor_items'] = 'bool'\n    settings_default['save_pmor_items'] = False\n    settings_description['save_pmor_items'] = 'Saves to h5 the items required for PMOR interpolation: the aerodynamic ' \\\n                                              'reduced order bases, the structural modal matrix and the ' \\\n                                              'reduced state-space'\n\n    settings_types['save_pmor_subsystems'] = 'bool'\n    settings_default['save_pmor_subsystems'] = False\n    settings_description['save_pmor_subsystems'] = 'Saves to h5 the statespaces and matrices of the UVLM and beam and ' \\\n                                                   'the M, C, K matrices. The setting ``save_pmor_items`` ' \\\n                                                   'should be set to `on`'\n\n    settings_table = settings_utils.SettingsTable()\n    __doc__ += settings_table.generate(settings_types, settings_default, settings_description)\n\n    def __init__(self):\n        self.data = None\n        self.settings = None\n        self.folder = None\n        self.case_name = None\n\n    def initialise(self, data, custom_settings=None, restart=False):\n        self.data = data\n\n        if custom_settings is None:\n            self.settings = data.settings[self.solver_id]\n        else:\n            self.settings = custom_settings\n\n        settings_utils.to_custom_types(self.settings,\n                           self.settings_types,\n                           self.settings_default)\n\n        self.folder = data.output_folder\n        self.case_name = self.data.settings['SHARPy']['case']\n\n    def run(self, **kwargs):\n        \n        online = settings_utils.set_value_or_default(kwargs, 'online', False)\n        restart = settings_utils.set_value_or_default(kwargs, 'restart', False)\n\n        config = configobj.ConfigObj()\n        file_name = self.folder + '/' + self.data.settings['SHARPy']['case'] + '.pmor.sharpy'\n        config.filename = file_name\n        config['parameters'] = dict()\n        for k, v in self.settings['parameters'].items():\n            cout.cout_wrap('\\tWriting parameter %s: %s' % (k, str(v)), 1)\n            config['parameters'][k] = v\n\n        sim_info = dict()\n        sim_info['case'] = self.data.settings['SHARPy']['case']\n\n        if 'PickleData' not in self.data.settings['SHARPy']['flow'] and self.settings['save_case']:\n            warnings.warn('Post-proc: SaveParametricCase: Saving a pickle is not recommended - try saving required '\n                          'attributes individually',\n                          DeprecationWarning)\n            pickle_solver = initialise_solver('PickleData')\n            pickle_solver.initialise(self.data, restart=restart)\n            self.data = pickle_solver.run()\n            sim_info['path_to_data'] = os.path.abspath(self.folder)\n\n        sim_info['path_to_data'] = os.path.abspath(self.folder)\n\n        config['sim_info'] = sim_info\n        config.write()\n\n        if self.settings['save_pmor_items']:\n            try:\n                self.data.linear\n            except AttributeError:\n                pass\n            else:\n                if not os.path.exists(self.folder + '/save_pmor_data/'):\n                    os.makedirs(self.folder + '/save_pmor_data/')\n                self.save_state_space()\n                self.save_aero_rom_bases()\n                self.save_structural_modal_matrix()\n\n                if self.settings['save_pmor_subsystems']:\n                    self.save_structural_matrices()\n                    self.save_aero_state_space()\n\n        return self.data\n\n    def save_aero_rom_bases(self):\n        \"\"\"Save the aerodynamic reduced order bases to h5 files in the output directory\"\"\"\n        # check rom's exist\n        rom_dict = self.data.linear.linear_system.uvlm.rom\n        if rom_dict is None:\n            return None\n\n        for rom_name, rom_class in rom_dict.items():\n            rom_class.save_reduced_order_bases(self.base_name + f'_{rom_name.lower()}_aerorob.h5')\n\n    def save_structural_modal_matrix(self):\n        if not self.data.linear.linear_system.beam.sys.modal:\n            return None\n\n        self.data.linear.linear_system.beam.save_reduced_order_bases(self.base_name + f'_modal_structrob.h5')\n\n    def save_state_space(self):\n        self.data.linear.linear_system.ss.save(self.base_name + '_statespace.h5')\n\n    def save_structural_matrices(self):\n        self.data.linear.linear_system.beam.ss.save(self.base_name + '_beamstatespace.h5')\n        self.data.linear.linear_system.beam.save_structural_matrices(self.base_name + '_struct_matrices.h5')\n\n    def save_aero_state_space(self):\n        self.data.linear.linear_system.uvlm.ss.save(self.base_name + '_aerostatespace.h5')\n\n    @property\n    def base_name(self):\n        return self.folder + '/save_pmor_data/' + self.case_name\n\n"
  },
  {
    "path": "sharpy/postproc/stabilityderivatives.py",
    "content": "import sharpy.utils.solver_interface as solver_interface\nimport os\nimport numpy as np\nimport sharpy.utils.cout_utils as cout\nimport sharpy.utils.settings as settings_utils\nfrom sharpy.linear.utils.derivatives import Derivatives\n\n\n@solver_interface.solver\nclass StabilityDerivatives(solver_interface.BaseSolver):\n    \"\"\"\n    Outputs the stability derivatives of a free-flying aircraft\n\n    \"\"\"\n    solver_id = 'StabilityDerivatives'\n    solver_classification = 'post-processor'\n\n    settings_default = dict()\n    settings_description = dict()\n    settings_types = dict()\n    settings_options = dict()\n\n    settings_types['print_info'] = 'bool'\n    settings_default['print_info'] = True\n    settings_description['print_info'] = 'Display info to screen'\n\n    settings_types['u_inf'] = 'float'\n    settings_default['u_inf'] = 1.\n    settings_description['u_inf'] = 'Free stream reference velocity'\n\n    settings_types['S_ref'] = 'float'\n    settings_default['S_ref'] = 1.\n    settings_description['S_ref'] = 'Reference planform area'\n\n    settings_types['b_ref'] = 'float'\n    settings_default['b_ref'] = 1.\n    settings_description['b_ref'] = 'Reference span'\n\n    settings_types['c_ref'] = 'float'\n    settings_default['c_ref'] = 1.\n    settings_description['c_ref'] = 'Reference chord'\n\n    settings_table = settings_utils.SettingsTable()\n    __doc__ += settings_table.generate(settings_types, settings_default, settings_description)\n\n    def __init__(self):\n        self.data = None\n        self.settings = dict()\n\n        self.u_inf = 1\n        self.inputs = 0\n        self.caller = None\n        self.folder = None\n\n        self.ppal_axes = None\n        self.n_control_surfaces = None\n\n        self.coefficients = dict  # type: dict # name: scaling coefficient\n\n    def initialise(self, data, custom_settings=None, caller=None, restart=False):\n        self.data = data\n\n        if custom_settings:\n            self.settings = custom_settings\n        else:\n            self.settings = self.data.settings[self.solver_id]\n\n        settings_utils.to_custom_types(self.settings,\n                           self.settings_types,\n                           self.settings_default,\n                           options=self.settings_options,\n                           no_ctype=True)\n        self.caller = caller\n        self.folder = data.output_folder + '/derivatives/'\n        if not os.path.isdir(self.folder):\n            os.makedirs(self.folder, exist_ok=True)\n\n        u_inf = self.settings['u_inf']\n        s_ref = self.settings['S_ref']\n        b_ref = self.settings['b_ref']\n        c_ref = self.settings['c_ref']\n        rho = self.data.linear.tsaero0.rho\n        self.ppal_axes = self.data.settings['Modal']['rigid_modes_ppal_axes']\n\n        # need to decide whether coefficients stay here or goes just in Derivatives class\n        self.coefficients = {'force': 0.5 * rho * u_inf ** 2 * s_ref,\n                             'moment_lon': 0.5 * rho * u_inf ** 2 * s_ref * c_ref,\n                             'moment_lat': 0.5 * rho * u_inf ** 2 * s_ref * b_ref,\n                             'force_angular_vel': 0.5 * rho * u_inf ** 2 * s_ref * c_ref / u_inf,\n                             'moment_lon_angular_vel': 0.5 * rho * u_inf ** 2 * s_ref * c_ref * c_ref / u_inf}  # missing rates\n\n        reference_dimensions = {}\n        for k in ['S_ref', 'b_ref', 'c_ref', 'u_inf']:\n            reference_dimensions[k] = self.settings[k]\n        reference_dimensions['rho'] = rho\n        reference_dimensions['quat'] = self.data.linear.tsstruct0.quat\n\n        self.data.linear.derivatives = dict()  # {str:Derivatives()} (sharpy.linear.utils.derivatives.Derivatives)\n        self.data.linear.derivatives['aerodynamic'] = Derivatives(reference_dimensions,\n                                                                  static_state=self.steady_aero_forces(),\n                                                                  target_system='aerodynamic')\n        self.data.linear.derivatives['aeroelastic'] = Derivatives(reference_dimensions,\n                                                                  static_state=self.steady_aero_forces(),\n                                                                  target_system='aeroelastic')\n\n\n    def run(self, **kwargs):\n        \n        online = settings_utils.set_value_or_default(kwargs, 'online', False)\n\n        # TODO: consider running all required solvers inside this one to keep the correct settings\n        # i.e: run Modal, Linear Assembly\n\n        derivatives = self.data.linear.derivatives  # {str:Derivatives()} (sharpy.linear.utils.derivatives.Derivatives)\n        if self.data.linear.linear_system.beam.sys.modal:\n            phi = self.data.linear.linear_system.linearisation_vectors['mode_shapes'].real\n        else:\n            phi = None\n\n        steady_forces = self.data.linear.linear_system.linearisation_vectors['forces_aero_beam_dof']\n        v0 = self.get_freestream_velocity()\n        quat = self.data.linear.tsstruct0.quat\n\n        try:\n            tpa = self.data.linear.tsstruct0.modal['t_pa']\n        except KeyError:\n            tpa = None\n\n        if self.data.linear.linear_system.uvlm.scaled:\n            raise NotImplementedError('Stability Derivatives not yet implented for scaled system')\n            self.data.linear.linear_system.update(self.settings['u_inf'])\n\n        for target_system in ['aerodynamic', 'aeroelastic']:\n            state_space = self.get_state_space(target_system)\n            target_system_derivatives = derivatives[target_system]\n\n            target_system_derivatives.initialise_derivatives(state_space,\n                                                             steady_forces,\n                                                             quat,\n                                                             v0,\n                                                             phi,\n                                                             self.data.linear.tsstruct0.modal['cg'],\n                                                             tpa=tpa)\n            target_system_derivatives.dict_of_derivatives[\n                'force_angle_velocity'] = target_system_derivatives.new_derivative(\n                'stability',\n                'angle_derivatives',\n                'Force/Angle via velocity')\n\n            # useful to double check the effect of the ``track_body`` == 'on' setting\n            # current_derivative.dict_of_derivatives['force_angle_angle'] = current_derivative.new_derivative(\n            #     'stability',\n            #     'angle_derivatives_tb',\n            #     'Force/Angle via Track Body')\n\n            target_system_derivatives.dict_of_derivatives['force_velocity'] = target_system_derivatives.new_derivative(\n                'body',\n                'body_derivatives')\n\n            target_system_derivatives.dict_of_derivatives['force_cs'] = target_system_derivatives.new_derivative(\n                'body',\n                'control_surface_derivatives')\n            target_system_derivatives.save(self.folder)\n            target_system_derivatives.savetxt(self.folder)\n\n        return self.data\n\n    def get_freestream_velocity(self):\n        try:\n            u_inf = self.data.settings['StaticUvlm']['aero_solver_settings']['u_inf']\n            u_inf_direction = self.data.settings['StaticCoupled']['aero_solver_settings']['u_inf_direction']\n        except KeyError:\n            try:\n                u_inf = self.data.settings['StaticCoupled']['aero_solver_settings']['velocity_field_input']['u_inf']\n                u_inf_direction = self.data.settings['StaticCoupled']['aero_solver_settings']['velocity_field_input']['u_inf_direction']\n            except KeyError:\n                cout.cout_wrap('Unable to find free stream velocity settings in StaticUvlm or StaticCoupled,'\n                               'please ensure these settings are provided in the config .sharpy file. If'\n                               'you are running a restart simulation make sure they are included too, regardless'\n                               'of these solvers being present in the SHARPy flow', 4)\n                raise KeyError\n\n        try:\n            v0 = u_inf * u_inf_direction * -1\n        except TypeError:\n            # For restart solutions, where the settings may have not been processed and thus may\n            # exist but in string format\n            try:\n                u_inf_direction = np.array(u_inf_direction, dtype=float)\n            except ValueError:\n                if u_inf_direction.find(',') < 0:\n                    u_inf_direction = np.fromstring(u_inf_direction.strip('[]'), sep=' ', dtype=float)\n                else:\n                    u_inf_direction = np.fromstring(u_inf_direction.strip('[]'), sep=',', dtype=float)\n            finally:\n                v0 = np.array(u_inf_direction, dtype=float) * float(u_inf) * -1\n\n        return v0\n\n    def get_state_space(self, target_system):\n        if target_system == 'aerodynamic':\n            ss = self.data.linear.linear_system.uvlm.ss\n        elif target_system == 'aeroelastic':\n            ss = self.data.linear.ss\n        else:\n            raise NameError('Unknown target system {:s}'.format(target_system))\n\n        return ss\n\n    def steady_aero_forces(self):\n        fx = np.sum(self.data.aero.timestep_info[0].inertial_steady_forces[:, 0], 0) + \\\n             np.sum(self.data.aero.timestep_info[0].inertial_unsteady_forces[:, 0], 0)\n\n        fy = np.sum(self.data.aero.timestep_info[0].inertial_steady_forces[:, 1], 0) + \\\n             np.sum(self.data.aero.timestep_info[0].inertial_unsteady_forces[:, 1], 0)\n\n        fz = np.sum(self.data.aero.timestep_info[0].inertial_steady_forces[:, 2], 0) + \\\n             np.sum(self.data.aero.timestep_info[0].inertial_unsteady_forces[:, 2], 0)\n\n        return fx, fy, fz\n"
  },
  {
    "path": "sharpy/postproc/stallcheck.py",
    "content": "import numpy as np\nimport sharpy.utils.cout_utils as cout\nfrom sharpy.utils.solver_interface import solver, BaseSolver\nimport sharpy.utils.settings as settings_utils\nfrom sharpy.utils.datastructures import init_matrix_structure, standalone_ctypes_pointer\nimport sharpy.aero.utils.uvlmlib as uvlmlib\n\n\n@solver\nclass StallCheck(BaseSolver):\n    \"\"\"\n    Outputs the incidence angle of every panel of the surface as cell variables for visualisation in Paraview.\n\n    Note:\n        This postprocessor appends the information to the current SHARPy timestep being run, therefore,\n        in order to visualise the result in Paraview, it must be run prior to `AerogridPlot`. Otherwise, the panel\n        stall check will be performed but the actual angle not produced in the Paraview visualisation.\n\n    It also checks that the angles do not exceed the specified limit, with a warning in the log if the angle of attack\n    exceeds such limits (both positive and negative).\n\n    The limits are set through the setting ``airfoil_stall_angles``, which takes a dictionary where the key is\n    the ID to the airfoil (in string format) and the value is a 2-tuple containing the negative and positive limits\n    in radians.\n    \"\"\"\n    solver_id = 'StallCheck'\n    solver_classification = 'post-processor'\n\n    settings_types = dict()\n    settings_default = dict()\n    settings_description = dict()\n\n    settings_types['print_info'] = 'bool'\n    settings_default['print_info'] = True\n    settings_description['print_info'] = 'Print info to screen '\n\n    settings_types['airfoil_stall_angles'] = 'dict'\n    settings_default['airfoil_stall_angles'] = dict()\n    settings_description['airfoil_stall_angles'] = 'Dictionary of stall angles for each airfoil as per the details ' \\\n                                                   'above'\n\n    settings_types['output_degrees'] = 'bool'\n    settings_default['output_degrees'] = False\n    settings_description['output_degrees'] = 'Output incidence angles in degrees vs radians'\n\n    settings_table = settings_utils.SettingsTable()\n    __doc__ += settings_table.generate(settings_types, settings_default, settings_description)\n\n    def __init__(self):\n\n        self.settings = None\n        self.data = None\n\n        self.ts_max = None\n        self.ts = None\n        self.caller = None\n\n    def initialise(self, data, custom_settings=None, caller=None, restart=False):\n        self.data = data\n        if custom_settings is None:\n            self.settings = data.settings[self.solver_id]\n        else:\n            self.settings = custom_settings\n        settings_utils.to_custom_types(self.settings, self.settings_types, self.settings_default)\n        self.ts_max = len(self.data.structure.timestep_info)\n        self.caller = caller\n\n    def run(self, **kwargs):\n    \n        online = settings_utils.set_value_or_default(kwargs, 'online', False)\n\n        if not online:\n            for self.ts in range(self.ts_max):\n                self.check_stall()\n            cout.cout_wrap('...Finished', 1)\n        else:\n            self.ts = len(self.data.structure.timestep_info) - 1\n            self.check_stall()\n        return self.data\n\n    def check_stall(self):\n        # add entry to dictionary for postproc\n        tstep = self.data.aero.timestep_info[self.ts]\n        tstep.postproc_cell['incidence_angle'] = init_matrix_structure(dimensions=tstep.dimensions,\n                                                                       with_dim_dimension=False)\n\n        # create ctypes pointers\n        tstep.postproc_cell['incidence_angle_ct_list'] = None\n        tstep.postproc_cell['incidence_angle_ct_pointer'] = None\n        tstep.postproc_cell['incidence_angle_ct_list'], tstep.postproc_cell['incidence_angle_ct_pointer'] = \\\n            standalone_ctypes_pointer(tstep.postproc_cell['incidence_angle'])\n\n        # call calculate\n        uvlmlib.uvlm_calculate_incidence_angle(self.data.aero.timestep_info[self.ts],\n                                               self.data.structure.timestep_info[self.ts])\n\n        # calculate ratio of stalled panels and print\n        stalled_panels = False\n        stalled_surfs = np.zeros((tstep.n_surf, ), dtype=int)\n        added_panels = []\n        for i_surf in range(tstep.n_surf):\n            added_panels.append([])\n\n        for i_elem in range(self.data.structure.num_elem):\n            for i_local_node in range(self.data.structure.num_node_elem):\n                airfoil_id = self.data.aero.data_dict['airfoil_distribution'][i_elem, i_local_node]\n                if self.settings['airfoil_stall_angles']:\n                    i_global_node = self.data.structure.connectivities[i_elem, i_local_node]\n                    for i_dict in self.data.aero.struct2aero_mapping[i_global_node]:\n                        i_surf = i_dict['i_surf']\n                        i_n = i_dict['i_n']\n\n                        if i_n in added_panels[i_surf]:\n                            continue\n\n                        if i_n == tstep.dimensions[i_surf][1]:\n                            continue\n\n                        limits = self.settings['airfoil_stall_angles'][str(airfoil_id)]\n                        if tstep.postproc_cell['incidence_angle'][i_surf][0, i_n] < float(limits[0]):\n                            stalled_panels = True\n                            stalled_surfs[i_surf] += tstep.postproc_cell['incidence_angle'][i_surf].shape[1]\n                        elif tstep.postproc_cell['incidence_angle'][i_surf][0, i_n] > float(limits[1]):\n                            stalled_panels = True\n                            stalled_surfs[i_surf] += tstep.postproc_cell['incidence_angle'][i_surf].shape[1]\n\n        if stalled_panels:\n            if self.settings['print_info']:\n                cout.cout_wrap('Some panel has an incidence angle out of the linear region', 1)\n                cout.cout_wrap('The number of stalled panels per surface id are:', 1)\n                for i_surf in range(tstep.n_surf):\n                    cout.cout_wrap('\\ti_surf = ' + str(i_surf) + ': ' + str(stalled_surfs[i_surf]) + ' panels.', 1)\n                # cout.cout_wrap('In total, the ratio of stalled panels is: ', str(stalled_surfs.sum()/))\n\n        if self.settings['output_degrees']:\n            for i_surf in range(tstep.n_surf):\n                tstep.postproc_cell['incidence_angle'][i_surf] *= 180/np.pi\n"
  },
  {
    "path": "sharpy/postproc/udpout.py",
    "content": "from sharpy.utils.solver_interface import solver, BaseSolver\nimport sharpy.utils.settings as settings_utils\nimport sharpy.io.network_interface as network_interface\nimport sharpy.utils.cout_utils as cout\n\n\n@solver\nclass UDPout(BaseSolver):\n    \"\"\"\n    Send output data via UDP\n\n    This post-processor is in essence a wrapper of the :class:`~sharpy.io.network_interface.NetworkLoader`\n    where only an output network adapter is created.\n\n    \"\"\"\n    solver_id = 'UDPout'\n    solver_classification = 'post-processor'\n\n    settings_types = network_interface.NetworkLoader.settings_types.copy()\n    settings_default = network_interface.NetworkLoader.settings_default.copy()\n    settings_description = network_interface.NetworkLoader.settings_description.copy()\n\n    # Remove unnecessary settings from NetworkLoader (all related to the inputs)\n    del settings_default['input_network_settings']\n    del settings_types['input_network_settings']\n    del settings_description['input_network_settings']\n\n    del settings_default['received_data_filename']\n    del settings_types['received_data_filename']\n    del settings_description['received_data_filename']\n\n    del settings_types['send_output_to_all_clients']\n    del settings_default['send_output_to_all_clients']\n    del settings_description['send_output_to_all_clients']\n\n    table = settings_utils.SettingsTable()\n    __doc__ += table.generate(settings_types, settings_default, settings_description,\n                              header_line='This post-processor takes in the following settings, for a more '\n                                          'detailed description see '\n                                          ':class:`~sharpy.io.network_interface.NetworkLoader`')\n\n    def __init__(self):\n        self.settings = None\n        self.data = None\n\n        self.network_loader = None\n        self.out_network = None\n        self.set_of_variables = None\n\n        self.ts_max = 0\n\n        self.caller = None\n\n    def initialise(self, data, custom_settings=None, caller=None, restart=False):\n        self.data = data\n        if custom_settings is None:\n            self.settings = data.settings[self.solver_id]\n        else:\n            self.settings = custom_settings\n\n        self.network_loader = network_interface.NetworkLoader()\n        self.network_loader.initialise(in_settings=self.settings)\n\n        self.set_of_variables = self.network_loader.get_inout_variables()\n\n        self.out_network = self.network_loader.get_networks(networks='out')\n\n        self.ts_max = self.data.ts + 1\n\n        self.caller = caller\n\n    def run(self, **kwargs):\n        \n        online = settings_utils.set_value_or_default(kwargs, 'online', False)\n\n        if online:\n            self.set_of_variables.get_value(self.data)\n            msg = self.set_of_variables.encode()\n            self.out_network.send(msg, self.out_network.clients)\n        else:\n            for ts_index in range(self.ts_max):\n                self.set_of_variables.get_value(self.data, timestep_index=ts_index)\n                msg = self.set_of_variables.encode()\n                self.out_network.send(msg, self.out_network.clients)\n\n            cout.cout_wrap('...Finished', 1)\n            self.shutdown()\n\n        return self.data\n\n    def shutdown(self):\n        self.out_network.close()\n"
  },
  {
    "path": "sharpy/postproc/writevariablestime.py",
    "content": "import os\nimport numpy as np\nfrom sharpy.utils.solver_interface import solver, BaseSolver\nimport sharpy.utils.settings as settings_utils\n\n\n@solver\nclass WriteVariablesTime(BaseSolver):\n    r\"\"\"\n    Write variables with time\n\n    ``WriteVariablesTime`` is a class inherited from ``BaseSolver``\n\n    It is a postprocessor that outputs the value of variables with time onto a text file.\n\n    Attributes:\n        settings_types (dict): Acceptable data types of the input data\n        settings_default (dict): Default values for input data should the user not provide them\n        See the list of arguments\n        dir (str): directory to output the information\n\n    \"\"\"\n\n    solver_id = 'WriteVariablesTime'\n    solver_classification = 'post-processor'\n\n    settings_types = dict()\n    settings_default = dict()\n    settings_description = dict()\n\n    settings_types['delimiter'] = 'str'\n    settings_default['delimiter'] = ' '\n    settings_description['delimiter'] = 'Delimiter to be used in the output file'\n\n    settings_types['FoR_variables'] = 'list(str)'\n    settings_default['FoR_variables'] = ['']\n    settings_description['FoR_variables'] = 'Variables of :class:`~sharpy.utils.datastructures.StructTimeStepInfo` associated to the frame of reference to be writen'\n\n    settings_types['FoR_number'] = 'list(int)'\n    settings_default['FoR_number'] = np.array([0], dtype=int)\n    settings_description['FoR_number'] = 'Number of the A frame of reference to output (for multibody configurations)'\n\n    settings_types['structure_variables'] = 'list(str)'\n    settings_default['structure_variables'] = ['']\n    settings_description['structure_variables'] = 'Variables of :class:`~sharpy.utils.datastructures.StructTimeStepInfo` associated to the frame of reference to be writen'\n\n    settings_types['structure_nodes'] = 'list(int)'\n    settings_default['structure_nodes'] = np.array([-1])\n    settings_description['structure_nodes'] = 'Number of the nodes to be writen'\n\n    settings_types['nonlifting_nodes_variables'] = 'list(str)'\n    settings_default['nonlifting_nodes_variables'] = ['']\n    settings_description['nonlifting_nodes_variables'] = 'Variables of :class:`~sharpy.utils.datastructures.NonliftingBodyTimeStepInfo` associated to panels to be writen'\n\n    settings_types['nonlifting_nodes_im'] = 'list(int)'\n    settings_default['nonlifting_nodes_im'] = np.array([0])\n    settings_description['nonlifting_nodes_im'] = 'Chordwise index of the nonlifting panels to be output'\n\n    settings_types['nonlifting_nodes_in'] = 'list(int)'\n    settings_default['nonlifting_nodes_in'] = np.array([0])\n    settings_description['nonlifting_nodes_in'] = 'Spanwise index of the nonlifting panels to be output'\n\n    settings_types['nonlifting_nodes_isurf'] = 'list(int)'\n    settings_default['nonlifting_nodes_isurf'] = np.array([0])\n    settings_description['nonlifting_nodes_isurf'] = \"Number of the panels' surface to be output\"\n\n    settings_types['aero_panels_variables'] = 'list(str)'\n    settings_default['aero_panels_variables'] = ['']\n    settings_description['aero_panels_variables'] = 'Variables of :class:`~sharpy.utils.datastructures.AeroTimeStepInfo` associated to panels to be writen'\n\n    settings_types['aero_panels_isurf'] = 'list(int)'\n    settings_default['aero_panels_isurf'] = np.array([0])\n    settings_description['aero_panels_isurf'] = \"Number of the panels' surface to be output\"\n\n    settings_types['aero_panels_im'] = 'list(int)'\n    settings_default['aero_panels_im'] = np.array([0])\n    settings_description['aero_panels_im'] = 'Chordwise index of the panels to be output'\n\n    settings_types['aero_panels_in'] = 'list(int)'\n    settings_default['aero_panels_in'] = np.array([0])\n    settings_description['aero_panels_in'] = 'Spanwise index of the panels to be output'\n\n    settings_types['aero_nodes_variables'] = 'list(str)'\n    settings_default['aero_nodes_variables'] = ['']\n    settings_description['aero_nodes_variables'] = 'Variables of :class:`~sharpy.utils.datastructures.AeroTimeStepInfo` associated to nodes to be writen'\n\n    settings_types['aero_nodes_isurf'] = 'list(int)'\n    settings_default['aero_nodes_isurf'] = np.array([0])\n    settings_description['aero_nodes_isurf'] = \"Number of the nodes' surface to be output\"\n\n    settings_types['aero_nodes_im'] = 'list(int)'\n    settings_default['aero_nodes_im'] = np.array([0])\n    settings_description['aero_nodes_im'] = 'Chordwise index of the nodes to be output'\n\n    settings_types['aero_nodes_in'] = 'list(int)'\n    settings_default['aero_nodes_in'] = np.array([0])\n    settings_description['aero_nodes_in'] = 'Spanwise index of the nodes to be output'\n\n    settings_types['cleanup_old_solution'] = 'bool'\n    settings_default['cleanup_old_solution'] = False\n    settings_description['cleanup_old_solution'] = 'Remove the existing files'\n\n    settings_types['vel_field_variables'] = 'list(str)'\n    settings_default['vel_field_variables'] = list()\n    settings_description['vel_field_variables'] = 'Variables associated to the velocity field. Only ``uext`` implemented so far'\n\n    settings_types['vel_field_points'] = 'list(float)'\n    settings_default['vel_field_points'] = np.array([0., 0., 0.])\n    settings_description['vel_field_points'] = 'List of coordinates of the control points as x1, y1, z1, x2, y2, z2 ...'\n\n    settings_table = settings_utils.SettingsTable()\n    __doc__ += settings_table.generate(settings_types, settings_default, settings_description)\n\n    def __init__(self):\n        self.settings = None\n        self.data = None\n        self.folder = None\n\n        self.n_velocity_field_points = None\n        self.velocity_field_points = None\n        self.caller = None\n        self.velocity_generator = None\n\n    def initialise(self, data, custom_settings=None, caller=None, restart=False):\n        self.data = data\n        if custom_settings is None:\n            self.settings = data.settings[self.solver_id]\n        else:\n            self.settings = custom_settings\n        settings_utils.to_custom_types(self.settings, self.settings_types, self.settings_default)\n\n        self.folder = data.output_folder + '/WriteVariablesTime/'\n        if not os.path.isdir(self.folder):\n            os.makedirs(self.folder)\n\n        # Check inputs\n        if not ((len(self.settings['aero_panels_isurf']) == len(self.settings['aero_panels_im'])) and (len(self.settings['aero_panels_isurf']) == len(self.settings['aero_panels_in']))):\n            raise RuntimeError(\"aero_panels should be defined as [i_surf,i_m,i_n]\")\n        if not ((len(self.settings['aero_nodes_isurf']) == len(self.settings['aero_nodes_im'])) and (len(self.settings['aero_nodes_isurf']) == len(self.settings['aero_nodes_in']))):\n            raise RuntimeError(\"aero_nodes should be defined as [i_surf,i_m,i_n]\")\n\n        if len(self.settings['vel_field_variables']) > 0:\n            if not (len(self.settings['vel_field_points']) % 3 == 0):\n                raise RuntimeError('Number of entries in ``vel_field_points`` has to be a multiple of 3')\n            else:\n                self.n_vel_field_points = len(self.settings['vel_field_points']) // 3\n                self.vel_field_points = [np.zeros((3, self.n_vel_field_points, 1))]\n                for ipoint in range(self.n_vel_field_points):\n                    self.vel_field_points[0][:, ipoint, 0] = self.settings['vel_field_points'][ipoint*3:(ipoint + 1)*3]\n\n        # Initialise files with headers and clean them if required\n        for ivariable in range(len(self.settings['FoR_variables'])):\n            for ifor in range(len(self.settings['FoR_number'])):\n                filename = self.folder + \"FoR_\" + '%02d' % self.settings['FoR_number'][ifor] + \"_\" + self.settings['FoR_variables'][ivariable] + \".dat\"\n                if self.settings['cleanup_old_solution']:\n                    if os.path.isfile(filename):\n                        os.remove(filename)\n\n        # Structure variables at nodes\n        for ivariable in range(len(self.settings['structure_variables'])):\n            for inode in range(len(self.settings['structure_nodes'])):\n                node = self.settings['structure_nodes'][inode]\n                filename = self.folder + \"struct_\" + self.settings['structure_variables'][ivariable] + \"_node\" + str(node) + \".dat\"\n                if self.settings['cleanup_old_solution']:\n                    if os.path.isfile(filename):\n                        os.remove(filename)\n\n        # Nonlifting variables at panels\n        for ivariable in range(len(self.settings['nonlifting_nodes_variables'])):\n            for ipanel in range(len(self.settings['nonlifting_nodes_isurf'])):\n                i_surf = self.settings['nonlifting_nodes_isurf'][ipanel]\n                i_m = self.settings['nonlifting_nodes_im'][ipanel]\n                i_n = self.settings['nonlifting_nodes_in'][ipanel]\n                filename = self.folder + \"nonlifting_\" + self.settings['nonlifting_nodes_variables'][ivariable] + \"_panel\" + \"_isurf\" + str(i_surf) + \"_im\"+ str(i_m) + \"_in\"+ str(i_n) + \".dat\"\n                if self.settings['cleanup_old_solution']:\n                    if os.path.isfile(filename):\n                        os.remove(filename)\n\n        # Aerodynamic variables at panels\n        for ivariable in range(len(self.settings['aero_panels_variables'])):\n            for ipanel in range(len(self.settings['aero_panels_isurf'])):\n                i_surf = self.settings['aero_panels_isurf'][ipanel]\n                i_m = self.settings['aero_panels_im'][ipanel]\n                i_n = self.settings['aero_panels_in'][ipanel]\n                filename = self.folder + \"aero_\" + self.settings['aero_panels_variables'][ivariable] + \"_panel\" + \"_isurf\" + str(i_surf) + \"_im\"+ str(i_m) + \"_in\"+ str(i_n) + \".dat\"\n                if self.settings['cleanup_old_solution']:\n                    if os.path.isfile(filename):\n                        os.remove(filename)\n\n        # Aerodynamic variables at nodes\n        for ivariable in range(len(self.settings['aero_nodes_variables'])):\n            for inode in range(len(self.settings['aero_nodes_isurf'])):\n                i_surf = self.settings['aero_nodes_isurf'][inode]\n                i_m = self.settings['aero_nodes_im'][inode]\n                i_n = self.settings['aero_nodes_in'][inode]\n                filename = self.folder + \"aero_\" + self.settings['aero_nodes_variables'][ivariable] + \"_node\" + \"_isurf\" + str(i_surf) + \"_im\"+ str(i_m) + \"_in\"+ str(i_n) + \".dat\"\n                if self.settings['cleanup_old_solution']:\n                    if os.path.isfile(filename):\n                        os.remove(filename)\n\n        # Velocity field variables at points\n        for ivariable in range(len(self.settings['vel_field_variables'])):\n            for ipoint in range(self.n_vel_field_points):\n                filename = self.folder + \"vel_field_\" + self.settings['vel_field_variables'][ivariable] + \"_point\" + str(ipoint) + \".dat\"\n                if self.settings['cleanup_old_solution']:\n                    if os.path.isfile(filename):\n                        os.remove(filename)\n                if not os.path.isfile(filename):\n                    fid = open(filename, 'w')\n                    fid.write((\"#t[s]%suext_x[m/s]%suext_y[m/s]%suext_z[m/s]\\n\" % ((self.settings['delimiter'],)*3)))\n                    fid.close()\n\n        # Initialise velocity generator\n        self.caller = caller\n        if ((not self.caller is None) and (not len(self.settings['vel_field_variables']) == 0)):\n            if self.caller.solver_classification.lower() == 'aero':\n                # For aerodynamic solvers\n                self.velocity_generator = self.caller.velocity_generator\n            elif self.caller.solver_classification.lower() == 'coupled':\n                # For coupled solvers\n                self.velocity_generator = self.caller.aero_solver.velocity_generator\n\n    def run(self, **kwargs):\n    \n        online = settings_utils.set_value_or_default(kwargs, 'online', False)\n\n        if online:\n            self.data = self.write(-1)\n        else:\n            for it in range(len(self.data.structure.timestep_info)):\n                if self.data.structure.timestep_info[it] is not None:\n                    self.data = self.write(it)\n\n        return self.data\n\n    def write(self, it):\n\n        # FoR variables\n        if 'FoR_number' in self.settings:\n            pass\n        else:\n            self.settings['FoR_number'] = np.array([0], dtype=int)\n\n        tstep = self.data.structure.timestep_info[it]\n\n        for ivariable in range(len(self.settings['FoR_variables'])):\n            if self.settings['FoR_variables'][ivariable] == '':\n                continue\n            for ifor in range(len(self.settings['FoR_number'])):\n                filename = self.folder + \"FoR_\" + '%02d' % self.settings['FoR_number'][ifor] + \"_\" + self.settings['FoR_variables'][ivariable] + \".dat\"\n\n                with open(filename, 'a') as fid:\n                    var = np.atleast_2d(getattr(tstep, self.settings['FoR_variables'][ivariable]))\n                    rows, cols = var.shape\n                    if ((cols == 1) and (rows == 1)):\n                        self.write_value_to_file(fid, self.data.ts, var, self.settings['delimiter'])\n                    elif ((cols > 1) and (rows == 1)):\n                        self.write_nparray_to_file(fid, self.data.ts, var, self.settings['delimiter'])\n                    elif ((cols == 1) and (rows >= 1)):\n                        self.write_value_to_file(fid, self.data.ts, var[ifor], self.settings['delimiter'])\n                    else:\n                        self.write_nparray_to_file(fid, self.data.ts, var[ifor,:], self.settings['delimiter'])\n\n        # Structure variables at nodes\n        for ivariable in range(len(self.settings['structure_variables'])):\n            if self.settings['structure_variables'][ivariable] == '':\n                continue\n            #TODO: fix for lack of g frame description in nonlineardynamicmultibody.py\n            if tstep.mb_dict is None:\n                var = getattr(tstep, self.settings['structure_variables'][ivariable])\n            else:\n                if self.settings['structure_variables'][ivariable] == 'for_pos':\n                    import sharpy.utils.algebra as ag\n                    #TODO: uncomment for dynamic trim\n                    # try:\n                    #     # import pdb\n                    #     # pdb.set_trace()\n                    #     cga = ag.euler2rot([0, self.data.trimmed_values[0], 0])\n                    #     cag = cga.T\n                    #     tstep.for_pos[0:3] = np.dot(cga,tstep.for_pos[0:3])\n                    #     var = getattr(tstep, self.settings['structure_variables'][ivariable]).copy()\n                    #     tstep.for_pos[0:3] = np.dot(cag,tstep.for_pos[0:3])\n                    # except AttributeError:\n                    t0step = self.data.structure.timestep_info[0]\n                    tstep.for_pos[0:3] = np.dot(t0step.cga(), tstep.for_pos[0:3])\n                    var = getattr(tstep, self.settings['structure_variables'][ivariable]).copy()\n                    tstep.for_pos[0:3] = np.dot(t0step.cag(), tstep.for_pos[0:3])\n                else:\n                    var = getattr(tstep, self.settings['structure_variables'][ivariable])            \n            var = getattr(tstep, self.settings['structure_variables'][ivariable])\n            num_indices = len(var.shape)\n            if num_indices == 1:\n                # Beam global variables (i.e. not node dependant)\n                filename = self.folder + \"struct_\" + self.settings['structure_variables'][ivariable] + \".dat\"\n                with open(filename, 'a') as fid:\n                    self.write_nparray_to_file(fid, self.data.ts, var, self.settings['delimiter'])\n\n            else:  # These variables have nodal values (i.e the number of indices is either 2 or 3)\n                for inode in range(len(self.settings['structure_nodes'])):\n                    node = self.settings['structure_nodes'][inode]\n                    filename = self.folder + \"struct_\" + self.settings['structure_variables'][ivariable] + \"_node\" + str(node) + \".dat\"\n                    with open(filename, 'a') as fid:\n                        if num_indices == 2:\n                            self.write_nparray_to_file(fid, self.data.ts, var[node,:], self.settings['delimiter'])\n                        elif num_indices == 3:\n                            ielem, inode_in_elem = self.data.structure.node_master_elem[node]\n                            self.write_nparray_to_file(fid, self.data.ts, var[ielem,inode_in_elem,:], self.settings['delimiter'])\n\n\n        # Aerodynamic variables at nonlifting panels\n        for ivariable in range(len(self.settings['nonlifting_nodes_variables'])):\n            if self.settings['nonlifting_nodes_variables'][ivariable] == '':\n                continue\n            \n            for ipanel in range(len(self.settings['nonlifting_nodes_isurf'])):\n                i_surf = self.settings['nonlifting_nodes_isurf'][ipanel]\n                i_m = self.settings['nonlifting_nodes_im'][ipanel]\n                i_n = self.settings['nonlifting_nodes_in'][ipanel]\n                filename = self.folder + \"nonlifting_\" + self.settings['nonlifting_nodes_variables'][ivariable] + \"_panel\" + \"_isurf\" + str(i_surf) + \"_im\"+ str(i_m) + \"_in\"+ str(i_n) + \".dat\"\n\n                with open(filename, 'a') as fid:\n                    var = getattr(self.data.nonlifting_body.timestep_info[it], self.settings['nonlifting_nodes_variables'][ivariable])\n                    self.write_value_to_file(fid, self.data.ts, var[i_surf][i_m,i_n], self.settings['delimiter'])\n\n        # Aerodynamic variables at panels\n        for ivariable in range(len(self.settings['aero_panels_variables'])):\n            if self.settings['aero_panels_variables'][ivariable] == '':\n                continue\n            for ipanel in range(len(self.settings['aero_panels_isurf'])):\n                i_surf = self.settings['aero_panels_isurf'][ipanel]\n                i_m = self.settings['aero_panels_im'][ipanel]\n                i_n = self.settings['aero_panels_in'][ipanel]\n\n                filename = self.folder + \"aero_\" + self.settings['aero_panels_variables'][ivariable] + \"_panel\" + \"_isurf\" + str(i_surf) + \"_im\"+ str(i_m) + \"_in\"+ str(i_n) + \".dat\"\n\n                with open(filename, 'a') as fid:\n                    var = getattr(self.data.aero.timestep_info[it], self.settings['aero_panels_variables'][ivariable])\n                    self.write_value_to_file(fid, self.data.ts, var[i_surf][i_m,i_n], self.settings['delimiter'])\n\n\n        # Aerodynamic variables at nodes\n        for ivariable in range(len(self.settings['aero_nodes_variables'])):\n            if self.settings['aero_nodes_variables'][ivariable] == '':\n                continue\n            for inode in range(len(self.settings['aero_nodes_isurf'])):\n                i_surf = self.settings['aero_nodes_isurf'][inode]\n                i_m = self.settings['aero_nodes_im'][inode]\n                i_n = self.settings['aero_nodes_in'][inode]\n\n                filename = self.folder + \"aero_\" + self.settings['aero_nodes_variables'][ivariable] + \"_node\" + \"_isurf\" + str(i_surf) + \"_im\"+ str(i_m) + \"_in\"+ str(i_n) + \".dat\"\n\n                with open(filename, 'a') as fid:\n                    var = getattr(self.data.aero.timestep_info[it], self.settings['aero_nodes_variables'][ivariable])\n                    self.write_nparray_to_file(fid, self.data.ts, var[i_surf][:,i_m,i_n], self.settings['delimiter'])\n\n        # Velocity field variables at points\n        for ivariable in range(len(self.settings['vel_field_variables'])):\n            if self.settings['vel_field_variables'][ivariable] == 'uext':\n                uext = [np.zeros((3, self.n_vel_field_points, 1))]\n                self.velocity_generator.generate({'zeta': self.vel_field_points,\n                                    'for_pos': tstep.for_pos[0:3],\n                                    't': self.data.ts*self.caller.settings['dt'],\n                                    'is_wake': False,\n                                    'override': True},\n                                    uext)\n                for ipoint in range(self.n_vel_field_points):\n                    filename = self.folder + \"vel_field_\" + self.settings['vel_field_variables'][ivariable] + \"_point\" + str(ipoint) + \".dat\"\n                    with open(filename, 'a') as fid:\n                        self.write_nparray_to_file(fid, self.data.ts, uext[0][:,ipoint,0], self.settings['delimiter'])\n\n        return self.data\n\n    def write_nparray_to_file(self, fid, ts, nparray, delimiter):\n\n        fid.write(\"%d%s\" % (ts,delimiter))\n        for idim in range(nparray.shape[0]):\n            try:\n                for jdim in range(nparray.shape[1] - 1):\n                    fid.write(\"%e%s\" % (nparray[idim, jdim],delimiter))\n                fid.write(\"%e\" % (nparray[idim, -1]))\n            except IndexError:\n                fid.write(\"%e%s\" % (nparray[idim],delimiter))\n\n        fid.write(\"\\n\")\n\n    def write_value_to_file(self, fid, ts, value, delimiter):\n\n        fid.write(\"%d%s%e\\n\" % (ts,delimiter,value))\n"
  },
  {
    "path": "sharpy/presharpy/__init__.py",
    "content": ""
  },
  {
    "path": "sharpy/presharpy/presharpy.py",
    "content": "import configparser\nimport configobj\nimport os\nimport sharpy.utils.cout_utils as cout\nfrom sharpy.utils.solver_interface import solver, dict_of_solvers\nimport sharpy.utils.settings as settings\nimport sharpy.utils.exceptions as exceptions\n\n\n@solver\nclass PreSharpy(object):\n    \"\"\"\n    The PreSharpy solver is the main loader solver of SHARPy. It takes the admin-like settings for the simulation,\n    including the case name, case route and the list of solvers to run and in which order to run them. This order\n    of solvers is referred to, throughout SHARPy, as the ``flow`` setting.\n\n    This is a mandatory solver for all simulations at the start so it is never included in the ``flow`` setting.\n\n    The settings for this solver are parsed through in the configuration file under the header ``SHARPy``. I.e, when\n    you are defining the config file for a simulation, the settings for PreSharpy are included as:\n\n    .. code-block:: python\n\n        import configobj\n        filename = '<case_route>/<case_name>.sharpy'\n        config = configobj.ConfigObj()\n        config.filename = filename\n        config['SHARPy'] = {'case': '<your SHARPy case name>',  # an example setting\n                            # Rest of your settings for the PreSHARPy class\n                            }\n\n    \"\"\"\n    solver_id = 'PreSharpy'\n    solver_classification = 'loader'\n\n    settings_types = dict()\n    settings_default = dict()\n    settings_description = dict()\n\n    settings_types['flow'] = 'list(str)'\n    settings_default['flow'] = None\n    settings_description['flow'] = \"List of the desired solvers' ``solver_id`` to run in sequential order.\"\n\n    settings_types['case'] = 'str'\n    settings_default['case'] = 'default_case_name'\n    settings_description['case'] = 'Case name'\n\n    settings_types['route'] = 'str'\n    settings_default['route'] = None\n    settings_description['route'] = 'Route to case files'\n\n    settings_types['write_screen'] = 'bool'\n    settings_default['write_screen'] = True\n    settings_description['write_screen'] = 'Display output on terminal screen'\n\n    settings_types['write_log'] = 'bool'\n    settings_default['write_log'] = False\n    settings_description['write_log'] = 'Write log file'\n\n    settings_types['log_folder'] = 'str'\n    settings_default['log_folder'] = './output/'\n    settings_description['log_folder'] = 'A folder with the case name will be created at this directory ' \\\n                                         'containing the SHARPy log and output folders'\n\n    settings_types['log_file'] = 'str'\n    settings_default['log_file'] = 'log'\n    settings_description['log_file'] = 'Name of the log file'\n\n    settings_types['save_settings'] = 'bool'\n    settings_default['save_settings'] = False\n    settings_description['save_settings'] = 'Save a copy of the settings to a ``.sharpy`` file in the output ' \\\n                                            'directory specified in ``log_folder``'\n\n    settings_table = settings.SettingsTable()\n    __doc__ += settings_table.generate(settings_types, settings_default, settings_description,\n                                       header_line='The following are the settings that the PreSharpy class takes:')\n\n    def __init__(self, in_settings=None):\n        self._settings = True\n        if in_settings is None:\n            # call for documentation only\n            self._settings = False\n\n        self.ts = 0\n\n        if self._settings:\n            self.settings = in_settings\n            self.settings['SHARPy']['flow'] = self.settings['SHARPy']['flow']\n\n            settings.to_custom_types(self.settings['SHARPy'], self.settings_types, self.settings_default)\n            self.output_folder = self.settings['SHARPy']['log_folder'] + '/' + self.settings['SHARPy']['case'] + '/'\n            if not os.path.isdir(self.output_folder):\n                os.makedirs(self.output_folder)\n\n            cout.cout_wrap.initialise(self.settings['SHARPy']['write_screen'],\n                                      self.settings['SHARPy']['write_log'],\n                                      self.output_folder,\n                                      self.settings['SHARPy']['log_file'])\n\n            self.case_route = in_settings['SHARPy']['route'] + '/'\n            self.case_name = in_settings['SHARPy']['case']\n            for solver_name in in_settings['SHARPy']['flow']:\n                try:\n                    dict_of_solvers[solver_name]\n                except KeyError:\n                    exceptions.NotImplementedSolver(solver_name)\n\n            cout.cout_wrap('SHARPy output folder set')\n            cout.cout_wrap('\\t' + self.output_folder, 1)\n\n            if self.settings['SHARPy']['save_settings']:\n                self.save_settings()\n\n    def initialise(self):\n        pass\n\n    def update_settings(self, new_settings):\n        self.settings = new_settings\n        self.settings['SHARPy']['flow'] = self.settings['SHARPy']['flow']\n        settings.to_custom_types(self.settings['SHARPy'], self.settings_types, self.settings_default)\n\n        self.output_folder = self.settings['SHARPy']['log_folder'] + '/' + self.settings['SHARPy']['case'] + '/'\n        if not os.path.isdir(self.output_folder):\n            os.makedirs(self.output_folder)\n            \n        cout.cout_wrap.initialise(self.settings['SHARPy']['write_screen'],\n                                  self.settings['SHARPy']['write_log'],\n                                  self.output_folder,\n                                  self.settings['SHARPy']['log_file'])\n\n        self.case_route = self.settings['SHARPy']['route'] + '/'\n        self.case_name = self.settings['SHARPy']['case']\n\n    def save_settings(self):\n        \"\"\"\n        Saves the settings to a ``.sharpy`` config obj file in the output directory.\n        \"\"\"\n        out_settings = configobj.ConfigObj()\n        for k, v in self.settings.items():\n            out_settings[k] = v\n        out_settings.filename = self.output_folder + self.settings['SHARPy']['case'] + '.sharpy'\n        out_settings.write()\n\n    @staticmethod\n    def load_config_file(file_name):\n        config = configparser.ConfigParser()\n        config.read(file_name)\n        return config\n"
  },
  {
    "path": "sharpy/rom/__init__.py",
    "content": "\"\"\"Model Order Reduction\"\"\"\nimport importlib\nimport os\n\nimport sharpy.linear.utils.ss_interface as ss_interface\nimport sharpy.utils.sharpydir as sharpydir\n\nfiles = ss_interface.sys_list_from_path(os.path.dirname(__file__))\n\nimport_path = os.path.realpath(os.path.dirname(__file__))\nimport_path = import_path.replace(sharpydir.SharpyDir, \"\")\nif import_path[0] == \"/\": import_path = import_path[1:]\nimport_path = import_path.replace(\"/\", \".\")\n\nfor file in files:\n    ss_interface.systems_dict_import[file] = importlib.import_module(import_path + \".\" + file)\n"
  },
  {
    "path": "sharpy/rom/balanced.py",
    "content": "\"\"\"Balancing Methods\n\nThe following classes are available to reduce a linear system employing balancing methods.\n\nThe main class is :class:`.Balanced` and the other available classes:\n\n* :class:`.Direct`\n\n* :class:`.Iterative`\n\n* :class:`.FrequencyLimited`\n\ncorrespond to the reduction algorithm.\n\n\"\"\"\nimport sharpy.utils.settings as settings\nimport numpy as np\nfrom abc import ABCMeta\nimport sharpy.utils.cout_utils as cout\nimport sharpy.utils.rom_interface as rom_interface\nimport sharpy.rom.utils.librom as librom\nimport sharpy.linear.src.libss as libss\nimport time\nfrom sharpy.linear.utils.ss_interface import LinearVector, StateVariable\n\ndict_of_balancing_roms = dict()\n\ndef bal_rom(arg):\n    global dict_of_balancing_roms\n    try:\n        arg._bal_rom_id\n    except AttributeError:\n        raise AttributeError('Class defined as balanced rom has no _bal_rom_id attribute')\n    dict_of_balancing_roms[arg._bal_rom_id] = arg\n    return arg\n\n\nclass BaseBalancedRom(metaclass=ABCMeta):\n\n    print_info = False\n\n    def initialise(self, in_settings=None):\n        pass\n\n    def run(self, ss):\n        pass\n\n\n@bal_rom\nclass Direct(BaseBalancedRom):\n    __doc__ = librom.balreal_direct_py.__doc__\n    _bal_rom_id = 'Direct'\n\n    settings_types = dict()\n    settings_default = dict()\n    settings_description = dict()\n    settings_options = dict()\n\n    settings_types['tune'] = 'bool'\n    settings_default['tune'] = True\n    settings_description['tune'] = 'Tune ROM to specified tolerance'\n\n    settings_types['use_schur'] = 'bool'\n    settings_default['use_schur'] = False\n    settings_description['use_schur'] = 'Use Schur decomposition during build'\n\n    settings_types['rom_tolerance'] = 'float'\n    settings_default['rom_tolerance'] = 1e-2\n    settings_description['rom_tolerance'] = 'Absolute accuracy with respect to full order frequency response'\n\n    settings_types['rom_tune_freq_range'] = 'list(float)'\n    settings_default['rom_tune_freq_range'] = [0, 1]\n    settings_description['rom_tune_freq_range'] = 'Beginning and end of frequency range where to tune ROM'\n\n    settings_types['convergence'] = 'str'\n    settings_default['convergence'] = 'min'\n    settings_description['convergence'] = 'ROM tuning convergence. If ``min`` attempts to find minimal number of states.' \\\n                                          'If ``all`` it starts from larger size ROM until convergence to ' \\\n                                          'specified tolerance is found.'\n\n    settings_types['reduction_method'] = 'str'\n    settings_default['reduction_method'] = 'realisation'\n    settings_description['reduction_method'] = 'Desired reduction method'\n    settings_options['reduction_method'] = ['realisation', 'truncation']\n\n    settings_table = settings.SettingsTable()\n    __doc__ += settings_table.generate(settings_types, settings_default, settings_description, settings_options)\n\n    def __init__(self):\n        self.settings = dict()\n\n    def initialise(self, in_settings=None):\n        if in_settings is not None:\n            self.settings = in_settings\n\n        settings.to_custom_types(self.settings, self.settings_types, self.settings_default, self.settings_options,\n                                 no_ctype=True)\n\n    def run(self, ss):\n        if self.print_info:\n            cout.cout_wrap('Reducing system using a Direct balancing method...')\n        t0 = time.time()\n        A, B, C, D = ss.get_mats()\n\n        try:\n            if ss.dt is not None:\n                dtsystem = True\n            else:\n                dtsystem = False\n        except AttributeError:\n            dtsystem = False\n\n        S, T, Tinv = librom.balreal_direct_py(A, B, C, DLTI=dtsystem, Schur=self.settings['use_schur'])\n\n        Ar = T.dot(A.dot(Tinv))\n        Br = T.dot(B)\n        Cr = C.dot(Tinv)\n\n        if dtsystem:\n            ss_bal = libss.StateSpace(Ar, Br, Cr, D, dt=ss.dt)\n        else:\n            ss_bal = libss.StateSpace(Ar, Br, Cr, D)\n\n        t1 = time.time()\n        if self.print_info:\n            cout.cout_wrap('\\t...completed balancing in %.2fs' % (t1-t0), 1)\n\n        if self.settings['tune']:\n            cout.cout_wrap('Tuning ROM to specified tolerance...', 1)\n            kv = np.linspace(self.settings['rom_tune_freq_range'][0],\n                             self.settings['rom_tune_freq_range'][1])\n            ssrom = librom.tune_rom(ss_bal,\n                                    kv=kv,\n                                    tol=self.settings['rom_tolerance'],\n                                    gv=S,\n                                    convergence=self.settings['convergence'],\n                                    method=self.settings['reduction_method'])\n            if librom.check_stability(ssrom.A, dt=True):\n                if self.print_info:\n                    cout.cout_wrap('ROM by direct balancing is stable')\n            t2 = time.time()\n            cout.cout_wrap('\\t...completed reduction in %.2fs' % (t2-t0), 1)\n            return ssrom\n        else:\n            return ss_bal\n\n\n@bal_rom\nclass FrequencyLimited(BaseBalancedRom):\n    __doc__ = librom.balfreq.__doc__\n\n    _bal_rom_id = 'FrequencyLimited'\n\n    settings_types = dict()\n    settings_default = dict()\n    settings_description = dict()\n    settings_options = dict()\n\n    settings_types['frequency'] = 'float'\n    settings_default['frequency'] = 1.\n    settings_description['frequency'] = 'defines limit frequencies for balancing. The balanced model will be accurate ' \\\n                                        'in the range ``[0,F]``, where ``F`` is the value of this key. Note that ``F`` ' \\\n                                        'units must be consistent with the units specified in the in ' \\\n                                        'the ``self.ScalingFacts`` dictionary.'\n\n    settings_types['method_low'] = 'str'\n    settings_default['method_low'] = 'trapz'\n    settings_description['method_low'] = 'Specifies whether to use gauss quadrature or ' \\\n                                         'trapezoidal rule in the low-frequency range ``[0,F]``'\n    settings_options['method_low'] = ['gauss', 'trapz']\n\n    settings_types['options_low'] = 'dict'\n    settings_default['options_low'] = dict()\n    settings_description['options_low'] = 'Settings for the low frequency integration. See Notes.'\n\n    settings_types['method_high'] = 'str'\n    settings_default['method_high'] = 'trapz'\n    settings_description['method_high'] = 'Specifies whether to use gauss quadrature or ' \\\n                                          'trapezoidal rule in the high-frequency range ``[F,FN]``'\n    settings_options['method_high'] = ['gauss', 'trapz']\n\n    settings_types['options_high'] = 'dict'\n    settings_default['options_high'] = dict()\n    settings_description['options_high'] = 'Settings for the high frequency integration. See Notes.'\n\n    settings_types['check_stability'] = 'bool'\n    settings_default['check_stability'] = True\n    settings_description['check_stability'] = 'if True, the balanced model is truncated to eliminate ' \\\n                                              'unstable modes - if any is found. Note that very accurate ' \\\n                                              'balanced model can still be obtained, even if high order ' \\\n                                              'modes are unstable.'\n\n    settings_types['get_frequency_response'] = 'bool'\n    settings_default['get_frequency_response'] = False\n    settings_description['get_frequency_response'] = 'if True, the function also returns the frequency ' \\\n                                                     'response evaluated at the low-frequency range integration' \\\n                                                     ' points. If True, this option also allows to automatically' \\\n                                                     ' tune the balanced model.'\n\n    # Integrator options\n    settings_options_types = dict()\n    settings_options_default = dict()\n    settings_options_description = dict()\n\n    settings_options_types['points'] = 'int'\n    settings_options_default['points'] = 12\n    settings_options_description['points'] = 'Trapezoidal points of integration'\n\n    settings_options_types['partitions'] = 'int'\n    settings_options_default['partitions'] = 2\n    settings_options_description['partitions'] = 'Number of Gauss-Lobotto quadratures'\n\n    settings_options_types['order'] = 'int'\n    settings_options_default['order'] = 2\n    settings_options_description['order'] = 'Order of Gauss-Lobotto quadratures'\n\n    settings_table = settings.SettingsTable()\n    __doc__ += settings_table.generate(settings_types, settings_default, settings_description, settings_options)\n\n    options_table = settings.SettingsTable()\n    __doc__ += options_table.generate(settings_options_types, settings_options_default, settings_options_description,\n                                      header_line='The parameters of integration take the following options:\\n')\n\n    def __init__(self):\n        self.settings = dict()\n\n    def initialise(self, in_settings=None):\n\n        if in_settings is not None:\n            self.settings = in_settings\n\n        settings.to_custom_types(self.settings, self.settings_types, self.settings_default,\n                                 self.settings_options, no_ctype=True)\n        settings.to_custom_types(self.settings['options_low'], self.settings_options_types,\n                                 self.settings_options_default, no_ctype=True)\n        settings.to_custom_types(self.settings['options_high'], self.settings_options_types,\n                                 self.settings_options_default, no_ctype=True)\n\n    def run(self, ss):\n\n        output_results = librom.balfreq(ss, self.settings)\n\n        return output_results[0]\n\n\n@bal_rom\nclass Iterative(BaseBalancedRom):\n    __doc__ = librom.balreal_iter.__doc__\n    _bal_rom_id = 'Iterative'\n\n    settings_types = dict()\n    settings_default = dict()\n    settings_description = dict()\n\n    settings_types['lowrank'] = 'bool'\n    settings_default['lowrank'] = True\n    settings_description['lowrank'] = 'Use low rank methods'\n\n    settings_types['smith_tol'] = 'float'\n    settings_default['smith_tol'] = 1e-10\n    settings_description['smith_tol'] = 'Smith tolerance'\n\n    settings_types['tolSVD'] = 'float'\n    settings_default['tolSVD'] = 1e-6\n    settings_description['tolSVD'] = 'SVD threshold'\n\n    settings_types['tolSVD'] = 'float'\n    settings_default['tolSVD'] = 1e-6\n    settings_description['tolSVD'] = 'SVD threshold'\n\n    settings_table = settings.SettingsTable()\n    __doc__ += settings_table.generate(settings_types, settings_default, settings_description)\n\n    def __init__(self):\n        self.settings = dict()\n\n    def initialise(self, in_settings=None):\n        if in_settings is not None:\n            self.settings = in_settings\n\n        settings.to_custom_types(self.settings, self.settings_types, self.settings_default,\n                                 no_ctype=True)\n\n    def run(self, ss):\n\n        A, B, C, D = ss.get_mats()\n\n        s, T, Tinv, rcmax, romax = librom.balreal_iter(A, B, C,\n                                                       lowrank=self.settings['lowrank'],\n                                                       tolSmith=self.settings['smith_tol'],\n                                                       tolSVD=self.settings['tolSVD'])\n\n        Ar = Tinv.dot(A.dot(T))\n        Br = Tinv.dot(B)\n        Cr = C.dot(T)\n\n        ssrom = libss.StateSpace(Ar, Br, Cr, D, dt=ss.dt)\n        return ssrom\n\n\n@rom_interface.rom\nclass Balanced(rom_interface.BaseRom):\n    \"\"\"Balancing ROM methods\n\n    Main class to load a balancing ROM. See below for the appropriate settings to be parsed in\n    the ``algorithm_settings`` based on your selection.\n\n    Supported algorithms:\n        * Direct balancing :class:`.Direct`\n\n        * Iterative balancing :class:`.Iterative`\n\n        * Frequency limited balancing :class:`.FrequencyLimited`\n\n    \"\"\"\n    rom_id = 'Balanced'\n\n    settings_types = dict()\n    settings_default = dict()\n    settings_description = dict()\n    settings_options = dict()\n\n    settings_types['print_info'] = 'bool'\n    settings_default['print_info'] = True\n    settings_description['print_info'] = 'Write output to screen'\n\n    settings_types['algorithm'] = 'str'\n    settings_default['algorithm'] = ''\n    settings_description['algorithm'] = 'Balanced realisation method'\n    settings_options['algorithm'] = ['Direct', 'Iterative', 'FrequencyLimited']\n\n    settings_types['algorithm_settings'] = 'dict'\n    settings_default['algorithm_settings'] = dict()\n    settings_description['algorithm_settings'] = 'Settings for the desired algorithm'\n\n    settings_table = settings.SettingsTable()\n    __doc__ += settings_table.generate(settings_types, settings_default, settings_description, settings_options)\n\n    def __init__(self):\n        self.settings = dict()\n        self.algorithm = None\n        self.ssrom = None\n        self.ss = None\n        self.dtsystem = None\n\n    def initialise(self, in_settings=None):\n\n        if in_settings is not None:\n            self.settings = in_settings\n\n        settings.to_custom_types(self.settings, self.settings_types, self.settings_default, self.settings_options)\n\n        if not (self.settings['algorithm'] in dict_of_balancing_roms):\n            raise AttributeError('Balancing algorithm %s is not yet implemented' % self.settings['algorithm'])\n\n        self.algorithm = dict_of_balancing_roms[self.settings['algorithm']]()\n        self.algorithm.initialise(self.settings['algorithm_settings'])\n        self.algorithm.print_info = self.settings['print_info']\n\n    def run(self, ss):\n\n        self.ss = ss\n\n        A, B, C, D = self.ss.get_mats()\n\n        if self.ss.dt:\n            self.dtsystem = True\n        else:\n            self.dtsystem = False\n\n        out = self.algorithm.run(ss)\n\n        if type(out) == libss.StateSpace:\n            self.ssrom = out\n\n        else:\n            Ar, Br, Cr = out\n            if self.dtsystem:\n                self.ssrom = libss.StateSpace(Ar, Br, Cr, D, dt=self.ss.dt)\n            else:\n                self.ssrom = libss.StateSpace(Ar, Br, Cr, D)\n\n        try:\n            self.ssrom.input_variables = self.ss.input_variables.copy()\n            self.ssrom.output_variables = self.ss.output_variables.copy()\n            self.ssrom.state_variables = LinearVector(\n                [StateVariable('balanced_{:s}'.format(self.settings['algorithm'].lower()),\n                               size=self.ssrom.states, index=0)])\n        except AttributeError:\n            pass\n\n        return self.ssrom\n"
  },
  {
    "path": "sharpy/rom/krylov.py",
    "content": "\"\"\"Krylov-subspaces model order reduction techniques\n\"\"\"\nimport numpy as np\nimport scipy.linalg as sclalg\nimport sharpy.linear.src.libss as libss\nimport time\nimport sharpy.utils.settings as settings\nimport sharpy.utils.cout_utils as cout\nimport sharpy.utils.rom_interface as rom_interface\nimport sharpy.utils.h5utils as h5\nimport sharpy.rom.utils.krylovutils as krylovutils\nimport warnings as warn\nimport h5py\nfrom sharpy.linear.utils.ss_interface import LinearVector, StateVariable, InputVariable, OutputVariable\n\n@rom_interface.rom\nclass Krylov(rom_interface.BaseRom):\n    \"\"\"\n    Model Order Reduction Methods for Single Input Single Output (SISO) and MIMO\n    Linear Time-Invariant (LTI) Systems using\n    moment matching (Krylov Methods).\n\n    Examples:\n        General calling sequences for different systems\n\n        SISO single point interpolation:\n            >>> algorithm = 'one_sided_arnoldi'\n            >>> interpolation_point = np.array([0.0])\n            >>> krylov_r = 4\n            >>>\n            >>> rom = Krylov()\n            >>> rom.initialise(sharpy_data, FullOrderModelSS)\n            >>> rom.run(algorithm, krylov_r, interpolation_point)\n\n        2 by 2 MIMO with tangential, multipoint interpolation:\n            >>> algorithm = 'dual_rational_arnoldi'\n            >>> interpolation_point = np.array([0.0, 1.0j])\n            >>> krylov_r = 4\n            >>> right_vector = np.block([[1, 0], [0, 1]])\n            >>> left_vector = right_vector\n            >>>\n            >>> rom = Krylov()\n            >>> rom.initialise(sharpy_data, FullOrderModelSS)\n            >>> rom.run(algorithm, krylov_r, interpolation_point, right_vector, left_vector)\n\n        2 by 2 MIMO multipoint interpolation:\n            >>> algorithm = 'mimo_rational_arnoldi'\n            >>> interpolation_point = np.array([0.0])\n            >>> krylov_r = 4\n            >>>\n            >>> rom = Krylov()\n            >>> rom.initialise(sharpy_data, FullOrderModelSS)\n            >>> rom.run(algorithm, krylov_r, interpolation_point)\n    \"\"\"\n    rom_id = 'Krylov'\n\n    settings_types = dict()\n    settings_default = dict()\n    settings_description = dict()\n    settings_options = dict()\n\n    settings_types['print_info'] = 'bool'\n    settings_default['print_info'] = True\n    settings_description['print_info'] = 'Write ROM information to screen and log'\n\n    settings_types['frequency'] = 'list(complex)'\n    settings_default['frequency'] = [0]\n    settings_description['frequency'] = 'Interpolation points in the continuous time complex plane [rad/s]'\n\n    settings_types['algorithm'] = 'str'\n    settings_default['algorithm'] = ''\n    settings_description['algorithm'] = 'Krylov reduction method algorithm'\n\n    settings_types['r'] = 'int'\n    settings_default['r'] = 1\n    settings_description['r'] = 'Moments to match at the interpolation points'\n\n    settings_types['single_side'] = 'str'\n    settings_default['single_side'] = ''\n    settings_description['single_side'] = 'Construct the rom using a single side. Leave blank (or empty string) for both.'\n    settings_options['single_side'] = ['controllability', 'observability']\n\n    settings_types['tangent_input_file'] = 'str'\n    settings_default['tangent_input_file'] = ''\n    settings_description['tangent_input_file'] = 'Filepath to .h5 file containing tangent interpolation vectors'\n\n    settings_types['restart_arnoldi'] = 'bool'\n    settings_default['restart_arnoldi'] = False\n    settings_description['restart_arnoldi'] = 'Restart Arnoldi iteration with r-=1 if ROM is unstable'\n\n    settings_table = settings.SettingsTable()\n    __doc__ += settings_table.generate(settings_types, settings_default, settings_description, settings_options)\n\n    supported_methods = ('one_sided_arnoldi',\n                         'two_sided_arnoldi',\n                         'dual_rational_arnoldi',\n                         'mimo_rational_arnoldi',\n                         'mimo_block_arnoldi')\n\n    def __init__(self):\n        self.settings = dict()\n\n        self.frequency = None\n        self.algorithm = None\n        self.ss = None\n        self.r = 1\n        self.V = None\n        self.H = None\n        self.W = None\n        self.ssrom = None\n        self.sstype = None\n        self.nfreq = None\n        self.restart_arnoldi = None\n        self.stable = None\n        self.cpu_summary = dict()\n        self.eigenvalue_table = None\n\n    def initialise(self, in_settings=None):\n\n        if in_settings is not None:\n            self.settings = in_settings\n\n        settings.to_custom_types(self.settings, self.settings_types, self.settings_default, self.settings_options)\n\n        try:\n            if self.settings['print_info']:\n                cout.cout_wrap('Initialising Krylov Model Order Reduction')\n        except ValueError:\n            pass\n\n        self.algorithm = self.settings['algorithm']\n        if self.algorithm not in self.supported_methods:\n            raise NotImplementedError('Algorithm %s not recognised, check for spelling or it'\n                                      'could be that is not yet implemented'\n                                      % self.algorithm)\n\n        self.frequency = np.array(self.settings['frequency'])\n        self.r = self.settings['r']\n        self.restart_arnoldi = self.settings['restart_arnoldi']\n        try:\n            self.nfreq = self.frequency.shape[0]\n        except AttributeError:\n            self.nfreq = 1\n\n    def save(self, filename):\n        \"\"\"\n        Saves to an ``.h5`` file of name ``filename`` the left and right projectors and the reduced order model\n\n        Args:\n            filename (str): path and filename to which to save the data\n\n        \"\"\"\n        rom_projectors = {'right_projector': self.V,\n                          'left_projector': self.W,\n                          }\n\n        if '.h5' not in filename[-3:]:\n            filename += '.h5'\n\n        with h5py.File(filename, 'a') as outfile:\n            h5.add_as_grp(rom_projectors, outfile, grpname='projectors',\n                          compress_float=True)\n            h5.add_as_grp(self.ssrom, outfile,\n                          grpname='ssrom',\n                          ClassesToSave=(libss.StateSpace, ),\n                          compress_float=True)\n\n    def save_reduced_order_bases(self, file_name):\n        \"\"\"\n        Save reduced order bases to an h5 file\n\n        Args:\n            file_name (str): path to h5 file\n\n        \"\"\"\n        if not isinstance(self.V, libss.Gain):\n            V = libss.Gain(self.V)\n            W = libss.Gain(self.W)\n\n        else:\n            V = self.V\n            W = self.W\n\n        if self.settings['single_side'] == 'observability' or self.settings['single_side'] == 'controllability':\n            # if single sided, the projector is V and W = V therefore no need to duplicate\n            libss.Gain.save_multiple_gains(file_name, ('V', V))\n            cout.cout_wrap(f'Saved Krylov reduced order bases, V to file: {file_name}', 1)\n        else:\n            libss.Gain.save_multiple_gains(file_name, ('V', V), ('W', W))\n            cout.cout_wrap(f'Saved Krylov reduced order bases, V and W to file: {file_name}', 1)\n\n    def run(self, ss):\n        \"\"\"\n        Performs Model Order Reduction employing Krylov space projection methods.\n\n        Supported methods include:\n\n        =========================  ====================  ==========================================================\n        Algorithm                  Interpolation Points  Systems\n        =========================  ====================  ==========================================================\n        ``one_sided_arnoldi``      1                     SISO Systems\n        ``two_sided_arnoldi``      1                     SISO Systems\n        ``dual_rational_arnoldi``  K                     SISO systems and Tangential interpolation for MIMO systems\n        ``mimo_rational_arnoldi``  K                     MIMO systems. Uses vector-wise construction (more robust)\n        ``mimo_block_arnoldi``     K                     MIMO systems. Uses block Arnoldi methods (more efficient)\n        =========================  ====================  ==========================================================\n\n        Args:\n            ss (sharpy.linear.src.libss.StateSpace): State space to reduce\n\n        Returns:\n            (libss.StateSpace): Reduced state space system\n        \"\"\"\n        self.ss = ss\n\n        if self.settings['print_info']:\n            cout.cout_wrap('Model Order Reduction in progress...')\n            self.print_header()\n\n        if self.ss.dt is None:\n            self.sstype = 'ct'\n        else:\n            self.sstype = 'dt'\n            self.frequency = np.exp(self.frequency * ss.dt)\n\n        t0 = time.time()\n\n        Ar, Br, Cr = self.__getattribute__(self.algorithm)(self.frequency, self.r)\n\n        self.ssrom = libss.StateSpace(Ar, Br, Cr, self.ss.D, self.ss.dt)\n        try:\n            self.ssrom.input_variables = self.ss.input_variables.copy()\n            self.ssrom.output_variables = self.ss.output_variables.copy()\n            self.ssrom.state_variables = LinearVector([StateVariable('krylov', size=self.ssrom.states, index=0)])\n        except AttributeError:\n            pass\n\n        self.stable = self.check_stability(restart_arnoldi=self.restart_arnoldi)\n\n        if not self.stable:\n            pass\n            warn.warn('Reduced Order Model Unstable')\n            # Under development\n            # TL, TR = self.restart()\n            # Wtr, Vr = self.restart()\n            # TL, TR = self.stable_realisation()\n            # self.ssrom = libss.ss(TL.T.dot(Ar.dot(TR)), TL.T.dot(Br), Cr.dot(TR), self.ss.D, self.ss.dt)\n            # self.ssrom = libss.ss(Wtr.dot(self.ssrom.A.dot(Vr)), Wtr.dot(self.ssrom.B), self.ssrom.C.dot(Vr), self.ss.D, self.ss.dt)\n            # self.stable = self.check_stability(restart_arnoldi=self.restart_arnoldi)\n\n        t_rom = time.time() - t0\n        self.cpu_summary['run'] = t_rom\n        if self.settings['print_info']:\n            cout.cout_wrap('System reduced from order %d to ' % self.ss.states)\n            cout.cout_wrap('\\tn = %d states' % self.ssrom.states, 1)\n            cout.cout_wrap('...Completed Model Order Reduction in %.2f s' % t_rom)\n\n        return self.ssrom\n\n    def print_header(self):\n        cout.cout_wrap('Moment Matching Krylov Model Reduction')\n        cout.cout_wrap('\\tConstruction Algorithm:')\n        cout.cout_wrap('\\t\\t%s' % self.algorithm, 1)\n        cout.cout_wrap('\\tInterpolation points:')\n        if self.frequency.dtype == complex:\n            cout.cout_wrap(self.nfreq * '\\t\\tsigma = %4f + %4fj [rad/s]\\n' %tuple(self.frequency.view(float)), 1)\n        else:\n            cout.cout_wrap(self.nfreq * '\\t\\tsigma = %4f [rad/s]\\n' % self.frequency, 1)\n        cout.cout_wrap('\\tKrylov order:')\n        cout.cout_wrap('\\t\\tr = %d' % self.r, 1)\n\n    def one_sided_arnoldi(self, frequency, r):\n        r\"\"\"\n        One-sided Arnoldi method expansion about a single interpolation point, :math:`\\sigma`.\n        The projection matrix :math:`\\mathbf{V}` is constructed using an order :math:`r` Krylov space. The space for\n        a single finite interpolation point known as a Pade approximation is described by:\n\n            .. math::\n                    \\text{range}(\\textbf{V}) = \\mathcal{K}_r((\\sigma\\mathbf{I}_n - \\mathbf{A})^{-1},\n                    (\\sigma\\mathbf{I}_n - \\mathbf{A})^{-1}\\mathbf{b})\n\n        In the case of an interpolation about infinity, the problem is known as partial realisation and the Krylov\n        space is\n\n            .. math::\n                    \\text{range}(\\textbf{V}) = \\mathcal{K}_r(\\mathbf{A}, \\mathbf{b})\n\n        The resulting orthogonal projection leads to the following reduced order system:\n\n            .. math::\n                \\hat{\\Sigma} : \\left(\\begin{array}{c|c} \\hat{A} & \\hat{B} \\\\\n                \\hline \\hat{C} & {D}\\end{array}\\right)\n                \\text{with } \\begin{cases}\\hat{A}=V^TAV\\in\\mathbb{R}^{k\\times k},\\,\\\\\n                \\hat{B}=V^TB\\in\\mathbb{R}^{k\\times m},\\,\\\\\n                \\hat{C}=CV\\in\\mathbb{R}^{p\\times k},\\,\\\\\n                \\hat{D}=D\\in\\mathbb{R}^{p\\times m}\\end{cases}\n\n\n        Args:\n            frequency (complex): Interpolation point :math:`\\sigma \\in \\mathbb{C}`\n            r (int): Number of moments to match. Equivalent to Krylov space order and order of the ROM.\n\n        Returns:\n            tuple: The reduced order model matrices: :math:`\\mathbf{A}_r`, :math:`\\mathbf{B}_r` and :math:`\\mathbf{C}_r`\n\n        \"\"\"\n        A = self.ss.A\n        B = self.ss.B\n        C = self.ss.C\n\n        nx = A.shape[0]\n\n        if frequency != np.inf and frequency is not None:\n            lu_A = krylovutils.lu_factor(frequency, A)\n            V = krylovutils.construct_krylov(r, lu_A, B, 'Pade', 'b')\n        else:\n            V = krylovutils.construct_krylov(r, A, B, 'partial_realisation', 'b')\n\n        # Reduced state space model\n        Ar = V.T.dot(A.dot(V))\n        Br = V.T.dot(B)\n        Cr = C.dot(V)\n\n        self.V = V\n        self.W = V\n\n        return Ar, Br, Cr\n\n    def two_sided_arnoldi(self, frequency, r):\n        r\"\"\"\n        Two-sided projection with a single interpolation point following the Arnoldi procedure. Very similar to the\n        one-sided method available, but it adds the projection :math:`\\mathbf{W}` built using the Krylov space for the\n        :math:`\\mathbf{c}` vector:\n\n            .. math::\n                    \\mathcal{K}_r((\\sigma\\mathbf{I}_n - \\mathbf{A})^{-T},\n                    (\\sigma\\mathbf{I}_n - \\mathbf{A})^{-T}\\mathbf{c}^T)\\subseteq\\mathcal{W}=\\text{range}(\\mathbf{W})\n\n        The oblique projection :math:`\\mathbf{VW}^T` matches twice as many moments as the single sided projection.\n\n        The resulting system takes the form:\n\n            .. math::\n                \\hat{\\Sigma} : \\left(\\begin{array}{c|c} \\hat{A} & \\hat{B} \\\\\n                \\hline \\hat{C} & {D}\\end{array}\\right)\n                \\text{with } \\begin{cases}\\hat{A}=W^TAV\\in\\mathbb{R}^{k\\times k},\\,\\\\\n                \\hat{B}=W^TB\\in\\mathbb{R}^{k\\times m},\\,\\\\\n                \\hat{C}=CV\\in\\mathbb{R}^{p\\times k},\\,\\\\\n                \\hat{D}=D\\in\\mathbb{R}^{p\\times m}\\end{cases}\n\n        Args:\n            frequency (complex): Interpolation point :math:`\\sigma \\in \\mathbb{C}`\n            r (int): Number of moments to match on each side. The resulting ROM will be of order :math:`2r`.\n\n        Returns:\n            tuple: The reduced order model matrices: :math:`\\mathbf{A}_r`, :math:`\\mathbf{B}_r` and :math:`\\mathbf{C}_r`.\n\n        \"\"\"\n        A = self.ss.A\n        B = self.ss.B\n        C = self.ss.C\n\n        nx = A.shape[0]\n\n        if frequency != np.inf and frequency is not None:\n            lu_A = krylovutils.lu_factor(frequency, A)\n            V = krylovutils.construct_krylov(r, lu_A, B, 'Pade', 'b')\n            W = krylovutils.construct_krylov(r, lu_A, C.T, 'Pade', 'c')\n        else:\n            V = krylovutils.construct_krylov(r, A, B, 'partial_realisation', 'b')\n            W = krylovutils.construct_krylov(r, A, C.T, 'partial_realisation', 'c')\n\n        T = W.T.dot(V)\n        Tinv = sclalg.inv(T)\n        reduction_checks(T, Tinv)\n        self.W = W\n        self.V = V\n\n        # Reduced state space model\n        Ar = W.T.dot(self.ss.A.dot(V.dot(Tinv)))\n        Br = W.T.dot(self.ss.B)\n        Cr = self.ss.C.dot(V.dot(Tinv))\n\n        return Ar, Br, Cr\n\n    def real_rational_arnoldi(self, frequency, r):\n        \"\"\"\n        When employing complex frequencies, the projection matrix can be normalised to be real\n        Following Algorithm 1b in Lee(2006)\n        Args:\n            frequency:\n            r:\n\n        Returns:\n\n        \"\"\"\n\n        raise NotImplementedError('Real valued rational Arnoldi Method Work in progress - use mimo_rational_arnoldi')\n\n        ### Not working, having trouble with the last column of H. need to investigate the background behind the creation of H and see hwat can be done\n\n        A = self.ss.A\n        B = self.ss.B\n        C = self.ss.C\n\n        nx = A.shape[0]\n        nfreq = frequency.shape[0]\n\n        # Columns of matrix v\n        v_ncols = 2 * np.sum(r)\n\n        # Output projection matrices\n        V = np.zeros((nx, v_ncols),\n                     dtype=float)\n        H = np.zeros((v_ncols, v_ncols),\n                     dtype=float)\n        res = np.zeros((nx,v_ncols+2),\n                       dtype=float)\n\n        # lu_A = krylovutils.lu_factor(frequency[0] * np.eye(nx) - A)\n        v_res = sclalg.lu_solve(lu_A, B)\n\n        H[0, 0] = np.linalg.norm(v_res)\n        V[:, 0] = v_res.real / H[0, 0]\n\n        k = 0\n        for i in range(nfreq):\n            for j in range(r[i]):\n                # k = 2*(i*r[i] + j)\n                print(\"i = %g\\t j = %g\\t k = %g\" % (i, j, k))\n\n                # res[:, k] = np.imag(v_res)\n                # if k > 0:\n                #     res[:, k-1] = np.real(v_res)\n                #\n                # # Working on the last finished column i.e. k-1 only when k>0\n                # if k > 0:\n                #     for t in range(k):\n                #         H[t, k-1] = V[:, t].T.dot(res[:, k-1])\n                #         res[:, k-1] -= res[:, k-1] - H[t, k-1] * V[:, t]\n                #\n                #     H[k, k-1] = np.linalg.norm(res[:, k-1])\n                #     V[:, k] = res[:, k-1] / H[k, k-1]\n                #\n                # # Normalise working column k\n                # for t in range(k+1):\n                #     H[t, k] = V[:, t].T.dot(res[:, k])\n                #     res[:, k] -= H[t, k] * V[:, t]\n                #\n                # # Subdiagonal term\n                # H[k+1, k] = np.linalg.norm(res[:, k])\n                # V[:, k + 1] = res[:, k] / np.linalg.norm(res[:, k])\n                #\n                # if j == r[i] - 1 and i < nfreq - 1:\n                #     lu_A = krylovutils.lu_factor(frequency[i+1] * np.eye(nx) - A)\n                #     v_res = sclalg.lu_solve(lu_A, B)\n                # else:\n                #     v_res = - sclalg.lu_solve(lu_A, V[:, k+1])\n\n                if k == 0:\n                    V[:, 0] = v_res.real / np.linalg.norm(v_res.real)\n                else:\n                    res[:, k] = np.imag(v_res)\n                    res[:, k-1] = np.real(v_res)\n\n                    for t in range(k):\n                        H[t, k-1] = np.linalg.norm(res[:, k-1])\n                        res[:, k-1] -= H[t, k-1]*V[:, t]\n\n                    H[k, k-1] = np.linalg.norm(res[:, k-1])\n                    V[:, k] = res[:, k-1] / H[k, k-1]\n\n                if k == 0:\n                    H[0, 0] = V[:, 0].T.dot(v_res.imag)\n                    res[:, 0] -= H[0, 0] * V[:, 0]\n\n                else:\n                    for t in range(k+1):\n                        H[t, k] = V[:, t].T.dot(res[:, k])\n                        res[:, k] -= H[t, k] * V[:, t]\n                H[k+1, k] = np.linalg.norm(res[:, k])\n                V[:, k+1] = res[:, k] / H[k+1, k]\n\n                if j == r[i] - 1 and i < nfreq - 1:\n                    lu_A = krylovutils.lu_factor(frequency[i+1], A)\n                    v_res = sclalg.lu_solve(lu_A, B)\n                else:\n                    v_res = - sclalg.lu_solve(lu_A, V[:, k+1])\n\n                k += 2\n\n        # Add last column of H\n        print(k)\n        res[:, k-1] = - sclalg.lu_solve(lu_A, V[:, k-1])\n        for t in range(k-1):\n            H[t, k-1] = V[:, t].T.dot(res[:, k-1])\n            res[:, k-1] -= H[t, k-1]*V[:, t]\n\n        self.V = V\n        self.H = H\n\n        Ar = V.T.dot(A.dot(V))\n        Br = V.T.dot(B)\n        Cr = C.dot(V)\n\n        return Ar, Br, Cr\n\n    def dual_rational_arnoldi(self, frequency, r):\n        r\"\"\"\n        Dual Rational Arnoli Interpolation for SISO sytems [1] and MIMO systems through tangential interpolation [2].\n\n        Effectively the same as the two_sided_arnoldi and the resulting V matrices for each interpolation point are\n        concatenated\n\n        .. math::\n            \\bigcup\\limits_{k = 1}^K\\mathcal{K}_{b_k}((\\sigma_i\\mathbf{I}_n - \\mathbf{A})^{-1}, (\\sigma_i\\mathbf{I}_n\n            - \\mathbf{A})^{-1}\\mathbf{b})\\subseteq\\mathcal{V}&=\\text{range}(\\mathbf{V}) \\\\\n            \\bigcup\\limits_{k = 1}^K\\mathcal{K}_{c_k}((\\sigma_i\\mathbf{I}_n - \\mathbf{A})^{-T}, (\\sigma_i\\mathbf{I}_n\n            - \\mathbf{A})^{-T}\\mathbf{c}^T)\\subseteq\\mathcal{Z}&=\\text{range}(\\mathbf{Z})\n\n        For MIMO systems, tangential interpolation is used through the right and left tangential direction vectors\n        :math:`\\mathbf{r}_i` and :math:`\\mathbf{l}_i`.\n\n        .. math::\n            \\bigcup\\limits_{k = 1}^K\\mathcal{K}_{b_k}((\\sigma_i\\mathbf{I}_n - \\mathbf{A})^{-1}, (\\sigma_i\\mathbf{I}_n\n            - \\mathbf{A})^{-1}\\mathbf{Br}_i)\\subseteq\\mathcal{V}&=\\text{range}(\\mathbf{V}) \\\\\n            \\bigcup\\limits_{k = 1}^K\\mathcal{K}_{c_k}((\\sigma_i\\mathbf{I}_n - \\mathbf{A})^{-T}, (\\sigma_i\\mathbf{I}_n\n            - \\mathbf{A})^{-T}\\mathbf{C}^T\\mathbf{l}_i)\\subseteq\\mathcal{Z}&=\\text{range}(\\mathbf{Z})\n\n        Args:\n            frequency (np.ndarray): Array containing the interpolation points\n                :math:`\\sigma = \\{\\sigma_1, \\dots, \\sigma_K\\}\\in\\mathbb{C}`\n            r (int): Krylov space order :math:`b_k` and :math:`c_k`. At the moment, different orders for the\n                controllability and observability constructions are not supported.\n            right_tangent (np.ndarray): Matrix containing the right tangential direction interpolation vector for\n                each interpolation point in column form, i.e. :math:`\\mathbf{r}\\in\\mathbb{R}^{m \\times K}`.\n            left_tangent (np.ndarray): Matrix containing the left tangential direction interpolation vector for\n                each interpolation point in column form, i.e. :math:`\\mathbf{l}\\in\\mathbb{R}^{p \\times K}`.\n\n        Returns:\n            tuple: The reduced order model matrices: :math:`\\mathbf{A}_r`, :math:`\\mathbf{B}_r` and :math:`\\mathbf{C}_r`.\n\n        References:\n            [1] Grimme\n            [2] Gallivan\n        \"\"\"\n        A = self.ss.A\n        B = self.ss.B\n        C = self.ss.C\n\n        nx = self.ss.states\n        nu = self.ss.inputs\n        ny = self.ss.outputs\n\n        B.shape = (nx, nu)\n\n        if nu != 1:\n            left_tangent, right_tangent, rc, ro, fc, fo = self.load_tangent_vectors()\n            assert right_tangent is not None and left_tangent is not None, 'Missing interpolation vectors for MIMO case'\n        else:\n            fc = np.array(frequency)\n            fo = np.array(frequency)\n            left_tangent = np.zeros((1, len(fo)))\n            right_tangent = np.zeros((1, len(fc)))\n            rc = np.array([r]*len(fc))\n            ro = np.array([r]*len(fc))\n            right_tangent[0, :] = 1\n            left_tangent[0, :] = 1\n\n        try:\n            nfreq = frequency.shape[0]\n        except AttributeError:\n            nfreq = 1\n\n\n        t0 = time.time()\n        # # Tangential interpolation for MIMO systems\n        # if right_tangent is None:\n        #     right_tangent = np.eye((nu, nfreq))\n        # # else:\n        # #     assert right_tangent.shape == (nu, nfreq), 'Right Tangential Direction vector not the correct shape'\n        #\n        # if left_tangent is None:\n        #     left_tangent = np.eye((ny, nfreq))\n        # # else:\n        # #     assert left_tangent.shape == (ny, nfreq), 'Left Tangential Direction vector not the correct shape'\n\n        rom_dim = max(np.sum(rc), np.sum(ro))\n        V = np.zeros((nx, rom_dim), dtype=complex)\n        W = np.zeros((nx, rom_dim), dtype=complex)\n\n        we = 0\n        dict_of_luas = dict()\n        for i in range(len(fc)):\n            sigma = fc[i]\n            if sigma == np.inf:\n                approx_type = 'partial_realisation'\n                lu_A = A\n            else:\n                approx_type = 'Pade'\n                try:\n                    lu_A = dict_of_luas[sigma]\n                except KeyError:\n                    lu_A = krylovutils.lu_factor(sigma, A)\n                    dict_of_luas[sigma] = lu_A\n            V[:, we:we+rc[i]] = krylovutils.construct_krylov(rc[i], lu_A, B.dot(right_tangent[:, i:i+1]), approx_type, 'b')\n\n            we += rc[i]\n\n        we = 0\n        for i in range(len(fo)):\n            sigma = fo[i]\n            if sigma == np.inf:\n                approx_type = 'partial_realisation'\n                lu_A = A\n            else:\n                approx_type = 'Pade'\n                try:\n                    lu_A = dict_of_luas[sigma]\n                except KeyError:\n                    lu_A = krylovutils.lu_factor(sigma, A)\n                    dict_of_luas[sigma] = lu_A\n            W[:, we:we+ro[i]] = krylovutils.construct_krylov(ro[i], lu_A, C.T.dot(left_tangent[:, i:i+1]), approx_type, 'c')\n\n            we += ro[i]\n\n        T = W.T.dot(V)\n        Tinv = sclalg.inv(T)\n        reduction_checks(T, Tinv)\n        self.W = W\n        self.V = V\n\n        # Reduced state space model\n        Ar = W.T.dot(self.ss.A.dot(V.dot(Tinv)))\n        Br = W.T.dot(self.ss.B)\n        Cr = self.ss.C.dot(V.dot(Tinv))\n\n        del dict_of_luas\n\n        self.cpu_summary['algorithm'] = time.time() - t0\n\n        return Ar, Br, Cr\n\n    def mimo_rational_arnoldi(self, frequency, r):\n        r\"\"\"\n        Construct full rank orthonormal projection basis :math:`\\mathbf{V}` and :math:`\\mathbf{W}`.\n\n        The main issue that one normally encounters with MIMO systems is that the minimality assumption of the system\n        does not guarantee the resulting Krylov space to be full rank, unlike in the SISO case. Therefore,\n        the construction is performed vector by vector, where linearly dependent vectors are eliminated or deflated\n        from the Krylov subspace.\n\n        If the number of inputs differs the number of outputs, both Krylov spaces will be built such that both\n        are the same size, therefore one Krylov space may be of higher order than the other one.\n\n        Following the method for vector-wise construction in Gugercin [1].\n\n        Args:\n            frequency (np.ndarray): Array containing interpolation frequencies\n            r (int): Krylov space order\n\n        Returns:\n            tuple: Tuple of reduced system matrices ``A``, ``B`` and ``C``.\n\n        References:\n            [1] Gugercin, S. Projection Methods for Model Reduction of Large-Scale Dynamical\n             Systems PhD Thesis. Rice University 2003.\n        \"\"\"\n\n        m = self.ss.inputs  # Full system number of inputs\n        n = self.ss.states  # Full system number of states\n        p = self.ss.outputs  # Full system number of outputs\n\n        # If the number of inputs is not the same as the number of outputs, a larger than necessary projection matrix\n        # is built for the one with fewer inputs/outputs. Thence, the larger matrix is truncated to have the same number\n        # of columns as the smaller matrix\n        if m != p:\n            if m < p:\n                r_o = r\n                r_c = r_o * int(np.ceil(p / m))\n            else:\n                r_c = r\n                r_o = r_c * int(np.ceil(m / p))\n        else:\n            r_c = r\n            r_o = r\n\n        if self.settings['single_side']:\n            # if only a single side is built, use the original setting without modification\n            r_c = r\n            r_o = r\n\n        V = None\n        W = None\n\n        for i in range(self.nfreq):\n\n            if self.settings['single_side'] == 'controllability' or self.settings['single_side'] == '':\n                cout.cout_wrap('\\tConstructing controllability space', 1)\n                if i == 0:\n                    V = krylovutils.build_krylov_space(frequency[i], r_c, side='b', a=self.ss.A, b=self.ss.B)\n                else:\n                    Vi = krylovutils.build_krylov_space(frequency[i], r_c, side='b', a=self.ss.A, b=self.ss.B)\n                    V = np.hstack((V, Vi))\n                    V = krylovutils.mgs_ortho(V)\n\n            if self.settings['single_side'] == 'observability' or self.settings['single_side'] == '':\n                cout.cout_wrap('\\tConstructing observability space', 1)\n                if i == 0:\n                    W = krylovutils.build_krylov_space(frequency[i], r_o, side='c', a=self.ss.A, b=self.ss.C.T)\n                else:\n                    Wi = krylovutils.build_krylov_space(frequency[i], r_o, side='c', a=self.ss.A, b=self.ss.C.T)\n                    W = np.hstack((W, Wi))\n                    W = krylovutils.mgs_ortho(W)\n\n        if self.settings['single_side'] == 'controllability' or self.settings['single_side'] == 'observability':\n            if self.settings['single_side'] == 'observability':\n                V = W\n            if self.settings['single_side'] == 'controllability':\n                W = V  # needed to properly save gains\n            Ar = V.T.dot(self.ss.A.dot(V))\n            Br = V.T.dot(self.ss.B)\n            Cr = self.ss.C.dot(V)\n\n        else:\n            # Match number of columns in each matrix\n            min_cols = min(V.shape[1], W.shape[1])\n            V = V[:, :min_cols]\n            W = W[:, :min_cols]\n\n            V, W = check_rank(V, W) # checks the product for rank deficiencies\n            # V = krylovutils.mgs_ortho(V) # need to verify whether this is necessary\n            # W = krylovutils.mgs_ortho(W)\n\n            T = W.T.dot(V)\n            Tinv = sclalg.inv(T)\n            krylovutils.check_eye(T, Tinv)\n\n            # Reduced state space model\n            Ar = W.T.dot(self.ss.A.dot(V.dot(Tinv)))\n            Br = W.T.dot(self.ss.B)\n            Cr = self.ss.C.dot(V.dot(Tinv))\n\n        self.W = libss.Gain(W,\n                            input_vars=LinearVector([InputVariable('krylov', size=W.shape[1], index=0)]),\n                            output_vars=LinearVector.transform(self.ss.state_variables, OutputVariable))\n        self.V = libss.Gain(V,\n                            input_vars=LinearVector([InputVariable('krylov', size=V.shape[1], index=0)]),\n                            output_vars=LinearVector.transform(self.ss.state_variables, OutputVariable))\n\n        # for state recovery purposes\n        self.projection_gain = libss.Gain(V,\n                                          input_vars=LinearVector([InputVariable('krylov', size=V.shape[1], index=0)]),\n                                          output_vars=LinearVector.transform(self.ss.state_variables, OutputVariable))\n\n        return Ar, Br, Cr\n\n    def mimo_block_arnoldi(self, frequency, r):\n\n        n = self.ss.states\n\n        A = self.ss.A\n        B = self.ss.B\n        C = self.ss.C\n\n        for i in range(self.nfreq):\n\n            if self.frequency[i] == np.inf:\n                F = A\n                G = B\n            else:\n                lu_a = krylovutils.lu_factor(frequency[i], A)\n                F = krylovutils.lu_solve(lu_a, np.eye(n))\n                G = krylovutils.lu_solve(lu_a, B)\n\n            if i == 0:\n                V = krylovutils.block_arnoldi_krylov(r, F, G)\n            else:\n                Vi = krylovutils.block_arnoldi_krylov(r, F, G)\n                V = np.block([V, Vi])\n\n        self.V = V\n\n        Ar = V.T.dot(A.dot(V))\n        Br = V.T.dot(B)\n        Cr = C.dot(V)\n\n        return Ar, Br, Cr\n\n    def check_stability(self, restart_arnoldi=False):\n        r\"\"\"\n        Checks the stability of the ROM by computing its eigenvalues.\n\n        If the resulting system is unstable, the Arnoldi procedure can be restarted to eliminate the eigenvalues\n        outside the stability boundary.\n\n        However, if this is the case, the ROM no longer matches the moments of the original system at the specific\n        frequencies since now the approximation is done with respect to a system of the form:\n\n            .. math::\n                \\Sigma = \\left(\\begin{array}{c|c} \\mathbf{A} & \\mathbf{\\bar{B}}\n                \\\\ \\hline \\mathbf{C} & \\ \\end{array}\\right)\n\n        where :math:`\\mathbf{\\bar{B}} = (\\mu \\mathbf{I}_n - \\mathbf{A})\\mathbf{B}`\n\n        Args:\n            restart_arnoldi (bool): Restart the relevant Arnoldi algorithm with the unstable eigenvalues removed.\n\n\n        \"\"\"\n        assert self.ssrom is not None, 'ROM not calculated yet'\n\n        eigs = sclalg.eigvals(self.ssrom.A)\n\n        eigs_abs = np.abs(eigs)\n\n        order = np.argsort(eigs_abs)[::-1]\n        eigs = eigs[order]\n        eigs_abs = eigs_abs[order]\n\n        unstable = False\n        if self.sstype == 'dt':\n            if any(eigs_abs > 1.):\n                unstable = True\n                unstable_eigenvalues = eigs[eigs_abs > 1.]\n                try:\n                    cout.cout_wrap('Unstable ROM - %d Eigenvalues with |r| > 1' % len(unstable_eigenvalues))\n                except ValueError:\n                    pass\n                for mu in unstable_eigenvalues:\n                    try:\n                        cout.cout_wrap('\\tmu = %f + %fj' % (mu.real, mu.imag))\n                    except ValueError:\n                        pass\n            else:\n                try:\n                    cout.cout_wrap('ROM is stable')\n                    cout.cout_wrap('\\tDT Eigenvalues:')\n                    cout.cout_wrap(len(eigs_abs) * '\\t\\tmu = %4f + %4fj\\n' % tuple(eigs.view(float)))\n                except ValueError:\n                    pass\n\n        else:\n            if any(eigs.real > 0):\n                unstable = True\n                cout.cout_wrap('Unstable ROM', 3)\n                unstable_eigenvalues = eigs[eigs.real > 0]\n            else:\n                cout.cout_wrap('ROM is stable')\n\n        # Restarted Arnoldi\n        # Modify the B matrix in the full state system -> maybe better to have a copy\n        if unstable and restart_arnoldi:\n            print('Restarting the Arnoldi method - Reducing ROM order from r = %d to r = %d' % (self.r, self.r-1))\n            self.ss_original = self.ss\n\n            remove_unstable = np.eye(self.ss.states)\n            for mu in unstable_eigenvalues:\n                remove_unstable = np.matmul(remove_unstable, mu * np.eye(self.ss.states) - self.ss.A)\n\n            self.ss.B = remove_unstable.dot(self.ss.B)\n            # self.ss.C = self.ss.C.dot(remove_unstable.T)\n\n            if self.r > 1:\n                self.r -= 1\n                self.run(self.algorithm, self.r, self.frequency)\n            else:\n                print('Unable to reduce ROM any further - ROM still unstable...')\n\n        return not unstable\n\n    def load_tangent_vectors(self):\n\n        tangent_file = self.settings['tangent_input_file']\n        if tangent_file:\n            tangents = h5.readh5(tangent_file)\n            right_tangent = tangents.right_tangent\n            left_tangent = tangents.left_tangent\n            rc = tangents.rc\n            ro = tangents.ro\n            fc = tangents.fc\n            fo = tangents.fo\n        else:\n            left_tangent = None\n            right_tangent = None\n\n        return left_tangent, right_tangent, rc, ro, fc, fo\n\n    def stable_realisation(self, *args, **kwargs):\n        r\"\"\"Remove unstable poles left after reduction\n\n        Using a Schur decomposition of the reduced plant matrix :math:`\\mathbf{A}_m\\in\\mathbb{C}^{m\\times m}`,\n        the method removes the unstable eigenvalues that could have appeared after the moment-matching reduction.\n\n        The oblique projection matrices :math:`\\mathbf{T}_L\\in\\mathbb{C}^{m \\times p}` and\n        :math:`\\mathbf{T}_R\\in\\mathbb{C}^{m \\times p}`` result in a stable realisation\n\n        .. math:: \\mathbf{A}_s = \\mathbf{T}_L^\\top\\mathbf{AT}_R \\in \\mathbb{C}^{p\\times p}.\n\n        Args:\n            A (np.ndarray): plant matrix (if not provided ``self.ssrom.A`` will be used).\n\n        Returns:\n            tuple: Left and right projection matrices :math:`\\mathbf{T}_L\\in\\mathbb{C}^{m \\times p}` and\n                :math:`\\mathbf{T}_R\\in\\mathbb{C}^{m \\times p}`\n\n        References:\n            Jaimoukha, I. M., Kasenally, E. D.. Implicitly Restarted Krylov Subspace Methods for Stable Partial\n            Realizations. SIAM Journal of Matrix Analysis and Applications, 1997.\n\n        See Also:\n            The method employs :func:`sharpy.rom.utils.krylovutils.schur_ordered()` and\n            :func:`sharpy.rom.utils.krylovutils.remove_a12`.\n        \"\"\"\n\n        cout.cout_wrap('Stabilising system by removing unstable eigenvalues using a Schur decomposition', 1)\n        if self.ssrom is None:\n            A = args[0]\n            ct = kwargs['ct']\n            assert type(ct) == bool, 'CT system flag should be a bool'\n        else:\n            A = self.ssrom.A\n\n            if self.sstype == 'ct':\n                ct = True\n            else:\n                ct = False\n\n        m = A.shape[0]\n        As, T1, n_stable = krylovutils.schur_ordered(A, ct=ct)\n\n        # Remove the (1,2) block of the Schur ordered matrix\n        T2, X = krylovutils.remove_a12(As, n_stable)\n\n        T3 = np.eye(m, n_stable)\n\n        TL = T3.T.dot(T2.dot(np.conj(T1)))\n        TR = T1.T.dot(np.linalg.inv(T2).dot(T3))\n\n        cout.cout_wrap('System reduced to %g states' %n_stable, 1)\n\n        # for debugging\n        # import matplotlib.pyplot as plt\n        Ar = TL.dot(A.dot(TR))\n        eigsA = np.linalg.eigvals(A)\n        eigsAr = np.linalg.eigvals(Ar)\n        #\n        # plt.scatter(eigsA.real, eigsA.imag)\n        # plt.scatter(eigsAr.real, eigsAr.imag)\n        # plt.show()\n        if ct:\n            assert np.sum(np.real(eigsAr) <= 0.) == n_stable, 'Number of stable eigvals computed not equal to those in Ar'\n        else:\n            assert np.sum(np.abs(eigsAr) <= 1.) == n_stable, 'Number of stable eigvals computed not equal to those in Ar'\n\n        return TL.T, TR\n\n    def restart(self):\n        \"\"\"\n        Implicitly Restarted Krylov Algorithm\n        \"\"\"\n\n        # Run krylov here\n\n        W = self.W\n        V = self.V\n\n        check_eye(V, V.T)\n        check_eye(W, W.T)\n\n        Tm = W.T.dot(V)\n        Tminv = sclalg.inv(Tm)\n\n        check_eye(Tm, Tminv, 'Tm = W^T.dot(V)')\n\n        # d = Tminv.dot(W.T)\n        #\n        # Tmcond = np.linalg.cond(Tm)\n        #\n        # if Tmcond > 1e10:\n        #     cout.cout_wrap('Matrix Tm = W^T.dot(V) is poorly conditioned. Condition = %e' % Tmcond, 3)\n\n        TL, TR = self.stable_realisation()\n\n        m, r = TR.shape\n\n        Ar = TL.T.dot(self.ssrom.A.dot(TR))\n        eigsAr = np.linalg.eigvals(Ar)\n        n_stable_r = np.sum(np.abs(eigsAr)<=1.)\n\n        assert n_stable_r == r, 'lost evals'\n\n        # QR decomposition\n        QRfull, RRfull = sclalg.qr(TR)\n        QLfull, RLfull = sclalg.qr(sclalg.inv(Tm.T).dot(TL))\n\n        QR = QRfull[:, :r]\n        QRcomp = QRfull[:, r:]\n        RR = RRfull[:r, :]\n        RRcomp = RRfull[r:, :]\n\n        QL = QLfull[:, :r]\n        RL = RLfull[:r, :]\n\n        Vr = V.dot(QR)\n        Wr = W.dot(QL)\n        Tr = Wr.T.dot(Vr)\n\n        print('Tr cond = %e' % np.linalg.cond(Tr))\n\n        Trinv = sclalg.inv(QL.T.dot(Tm.dot(QR)))\n        Trinv2 = RR.dot(RL.T)\n        #\n        print('Trinv diff = %f' % (np.max(np.abs(Trinv - Trinv2))))\n        Wtr = Trinv.dot(Wr.T)\n        # Wtr = Wr.T\n        # return QL.dot(Trinv), QR\n        Wtr2 = TL.T.dot(Tminv.dot(W.T))\n        # return Wtr2, V.dot(TR)\n\n        Ar = RR.dot(TL.T).dot(self.ssrom.A.dot(QR))\n        eigsAr = np.linalg.eigvals(Ar)\n        n_stable_r = np.sum(np.abs(eigsAr)<=1.)\n\n        assert n_stable_r == r, 'lost evals'\n\n\n\n        return RR.dot(TL.T), QR\n        # pass\n\n\ndef reduction_checks(T, Tinv):\n\n    cout.cout_wrap('Tm condition = %e' % np.linalg.cond(T))\n\n    check_eye(T, Tinv)\n\n\ndef check_eye(T, Tinv, msg=''):\n\n    eye_approx = Tinv.dot(T)\n    max_diff = np.max(np.abs(np.eye(eye_approx.shape[0]) - eye_approx))\n\n    if max_diff != 0.0:\n        log_error = np.log10(max_diff)\n        assert log_error < -6, 'T.dot(Tinv) not equal to identity, %s \\nlog(error) = %.e' \\\n                               % (msg, np.log10(max_diff))\n\n\ndef check_rank(V, W):\n\n    n_cols = V.shape[1]\n\n    for col in range(1, n_cols):\n        T = W[:, :col].T.dot(V[:, :col])\n        Tinv = np.linalg.inv(T)\n        try:\n            check_eye(T, Tinv)\n        except AssertionError:\n            cout.cout_wrap('\\tDeflating column %g' % col, 1)\n            W = np.hstack((W[:, :col-1], W[:, col:]))\n            V = np.hstack((V[:, :col-1], V[:, col:]))\n\n    try:\n        check_eye(T, Tinv)\n    except AssertionError:\n        V, W = check_rank(V, W)\n\n    # need to check if necessary\n    # V = krylovutils.mgs_ortho(V)\n    # W = krylovutils.mgs_ortho(W)\n    # V, W = check_rank(V, W)\n    # breakpoint()\n\n    return V, W\n\nif __name__==\"__main__\":\n    import numpy as np\n\n    A = np.random.rand(20, 20)\n    eigsA = np.sort(np.abs(np.linalg.eigvals(A)))\n    print(eigsA)\n    print(\"Number of stable eigvals = %g\" %np.sum(np.abs(eigsA)<=1) )\n    rom = Krylov()\n    TL, TR = rom.stable_realisation(A)\n\n    Ap = TL.T.dot(A.dot(TR))\n\n    eigsA = np.sort(np.abs(np.linalg.eigvals(Ap)))\n    print(\"\\nNew matrix size %g\" % Ap.shape[0])\n    print('Stable eigvals = %g' % np.sum(np.abs(eigsA)<=1))\n    print(eigsA)\n"
  },
  {
    "path": "sharpy/rom/utils/__init__.py",
    "content": ""
  },
  {
    "path": "sharpy/rom/utils/krylovutils.py",
    "content": "\"\"\"Krylov Model Reduction Methods Utilities\"\"\"\nimport scipy.sparse as scsp\nimport numpy as np\nimport scipy.linalg as sclalg\nimport sharpy.linear.src.libsparse as libsp\nimport sharpy.utils.cout_utils as cout\n\n\ndef block_arnoldi_krylov(r, F, G, approx_type='Pade', side='controllability'):\n\n    n = G.shape[0]\n    m = G.shape[1]\n\n    Q0, R0, P0 = sclalg.qr(G, pivoting=True)\n    Q0 = Q0[:, :m]\n\n    Q = np.zeros((n,m*r), dtype=complex)\n    V = np.zeros((n,m*r), dtype=complex)\n\n    for k in range(r):\n\n        if k == 0:\n            Q[:, 0:m] = F.dot(Q0)\n        else:\n            Q[:, k*m: k*m + m] = F.dot(Q[:, (k-1)*m:(k-1)*m + m])\n\n        Q[:, :k*m + m] = mgs_ortho(Q[:, :k*m+m])\n\n        Qf, R, P = sclalg.qr(Q[:, k*m: k*m + m], pivoting=True)\n        Q[:, k*m: k*m + m ] = Qf[:, :m]\n        if R[0,0] >= 1e-6:\n            V[:, k*m:k*m + m] = Q[:, k*m: k*m + m ]\n        else:\n            print('Deflating')\n            k -= 1\n\n    V = mgs_ortho(V)\n\n    return V\n\n\ndef mgs_ortho(X):\n    r\"\"\"\n    Modified Gram-Schmidt Orthogonalisation\n\n    Orthogonalises input matrix :math:`\\mathbf{X}` column by column.\n\n    Args:\n        X (np.ndarray): Input matrix of dimensions :math:`n` by :math:`m`.\n\n    Returns:\n        np.ndarray: Orthogonalised matrix of dimensions :math:`n` by :math:`m`.\n\n    Notes:\n        This method is faster than scipy's :func:`scipy.linalg.qr` method that returns an orthogonal matrix as part of\n        the QR decomposition, albeit at a higher number of function calls.\n    \"\"\"\n\n    # Q, R = sclalg.qr(X)\n    n = X.shape[1]\n    m = X.shape[0]\n\n    Q = np.zeros((m, n), dtype=complex)\n\n    for i in range(n):\n        w = X[:, i]\n        for j in range(i):\n            h = Q[:, j].T.dot(w)\n            w = w - h * Q[:, j]\n        Q[:, i] = w / sclalg.norm(w)\n\n    return Q\n\n\ndef construct_krylov(r, lu_A, B, approx_type='Pade', side='b'):\n    r\"\"\"\n    Contructs a Krylov subspace in an iterative manner following the methods of Gugercin [1].\n\n    The construction of the Krylov space is focused on Pade and partial realisation cases for the purposes of model\n    reduction. I.e. the partial realisation form of the Krylov space is used if\n    ``approx_type = 'partial_realisation'``\n\n        .. math::\n            \\text{range}(\\textbf{V}) = \\mathcal{K}_r(\\mathbf{A}, \\mathbf{b})\n\n    Else, it is replaced by the Pade approximation form:\n\n        .. math::\n            \\text{range}(\\textbf{V}) = \\mathcal{K}_r((\\sigma\\mathbf{I}_n - \\mathbf{A})^{-1},\n            (\\sigma\\mathbf{I}_n - \\mathbf{A})^{-1}\\mathbf{b})\n\n    Note that no inverses are actually computed but rather a single LU decomposition is performed at the beginning\n    of the algorithm. Forward and backward substitution is used thereinafter to calculate the required vectors.\n\n    The algorithm also builds the Krylov space for the :math:`\\mathbf{C}^T` matrix. It should simply replace ``B``\n    and ``side`` should be ``side = 'c'``.\n\n    Examples:\n        Partial Realisation:\n\n        >>> V = construct_krylov(r, A, B, 'partial_realisation', 'b')\n        >>> W = construct_krylov(r, A, C.T, 'partial_realisation', 'c')\n\n        Pade Approximation:\n\n        >>> V = construct_krylov(r, (sigma * np.eye(nx) - A), B, 'Pade', 'b')\n        >>> W = construct_krylov(r, (sigma * np.eye(nx) - A), C.T, 'Pade', 'c')\n\n\n    References:\n        [1]. Gugercin, S. - Projection Methods for Model Reduction of Large-Scale Dynamical Systems. PhD Thesis.\n        Rice University. 2003.\n\n    Args:\n        r (int): Krylov space order\n        lu_A (np.ndarray): For Pade approximations it should be the LU decomposition of :math:`(\\sigma I - \\mathbf{A})`\n            in tuple form, as output from the :func:`scipy.linalg.lu_factor`. For partial realisations it is\n            simply :math:`\\mathbf{A}`.\n        B (np.ndarray): If doing the B side it should be :math:`\\mathbf{B}`, else :math:`\\mathbf{C}^T`.\n        approx_type (str): Type of approximation: ``partial_realisation`` or ``Pade``.\n        side: Side of the projection ``b`` or ``c``.\n\n    Returns:\n        np.ndarray: Projection matrix\n\n    \"\"\"\n\n    nx = B.shape[0]\n\n    # Side indicates projection side. if using C then it needs to be transposed\n    if side == 'c':\n        transpose_mode = 1\n        B.shape = (nx, 1)\n    else:\n        transpose_mode = 0\n        B.shape = (nx, 1)\n\n    # Output projection matrices\n    V = np.zeros((nx, r),\n                 dtype=complex)\n    H = np.zeros((r, r),\n                 dtype=complex)\n\n    # Declare iterative variables\n    f = np.zeros((nx, r),\n                 dtype=complex)\n\n    if approx_type == 'partial_realisation':\n        A = lu_A\n        v_arb = B\n        v = v_arb / np.linalg.norm(v_arb)\n        w = A.dot(v)\n    else:\n        # LU decomposition\n        v = lu_solve(lu_A, B, trans=transpose_mode)\n        v = v / np.linalg.norm(v)\n        w = lu_solve(lu_A, v)\n\n    alpha = v.T.dot(w)\n\n    # Initial assembly\n    f[:, :1] = w - v.dot(alpha)\n    V[:, :1] = v\n    H[0, 0] = alpha\n\n    for j in range(0, r-1):\n\n        beta = np.linalg.norm(f[:, j])\n        v = 1 / beta * f[:, j]\n\n        V[:, j+1] = v\n        H_hat = np.block([[H[:j+1, :j+1]],\n                          [beta * evec(j)]])\n\n        if approx_type == 'partial_realisation':\n            w = A.dot(v)\n        else:\n            w = lu_solve(lu_A, v, trans=transpose_mode)\n\n        h = V[:, :j+2].T.dot(w)\n        f[:, j+1] = w - V[:, :j+2].dot(h)\n\n        # Finite precision\n        s = V[:, :j+2].T.dot(f[:, j+1])\n        f[:, j+1] = f[:, j+1] - V[:, :j+2].dot(s)\n        h += s\n\n        h.shape = (j+2, 1)  # Enforce shape for concatenation\n        H[:j+2, :j+2] = np.block([H_hat, h])\n\n    return V\n\n\ndef lu_factor(sigma, A):\n    r\"\"\"\n    LU Factorisation wrapper of:\n\n    .. math:: LU = (\\sigma \\mathbf{I} - \\mathbf{A})\n\n    In the case of ``A`` being a sparse matrix, the sparse methods in scipy are employed\n\n    Args:\n        sigma (float): Expansion frequency\n        A (csc_matrix or np.ndarray): Dynamics matrix\n\n    Returns:\n        tuple or SuperLU: tuple (dense) or SuperLU (sparse) objects containing the LU factorisation\n    \"\"\"\n    n = A.shape[0]\n    if type(A) == libsp.csc_matrix:\n        return scsp.linalg.splu(sigma * scsp.identity(n, dtype=complex, format='csc') - A)\n    else:\n        return sclalg.lu_factor(sigma * np.eye(n) - A)\n\n\ndef lu_solve(lu_A, b, trans=0):\n    r\"\"\"\n    LU solve wrapper.\n\n    Computes the solution to\n\n    .. math:: \\mathbf{Ax} = \\mathbf{b}\n\n    or\n\n    .. math:: \\mathbf{A}^T\\mathbf{x} = \\mathbf{b}\n\n    if ``trans=1``.\n\n    It uses the ``SuperLU.solve()`` method if the input is a ``SuperLU`` or else will revert to the dense methods\n    in scipy.\n\n    Args:\n        lu_A (SuperLU or tuple): object or tuple containing the information of the LU factorisation\n        b (np.ndarray): Right hand side vector to solve\n        trans (int): ``0`` or ``1`` for either solution option.\n\n    Returns:\n        np.ndarray: Solution to the system.\n\n    \"\"\"\n    transpose_mode_dict = {0: 'N', 1: 'T'}\n    if type(lu_A) == scsp.linalg.SuperLU:\n        return lu_A.solve(b, trans=transpose_mode_dict[trans])\n    else:\n        return sclalg.lu_solve(lu_A, b, trans=trans)\n\n\ndef construct_mimo_krylov(r, lu_A_input, B, approx_type='Pade', side='controllability'):\n\n    if side == 'controllability' or side == 'b':\n        transpose_mode = 0\n    elif side == 'observability' or side == 'c':\n        transpose_mode = 1\n    else:\n        raise NameError('Unknown option for side: %s', side)\n\n    m = B.shape[1]  # Full system number of inputs/outputs\n    n = B.shape[0]  # Full system number of states\n\n    deflation_tolerance = 1e-4  # Inexact deflation tolerance to approximate norm(V)=0 in machine precision\n\n    # Preallocated size may be too large in case columns are deflated\n    last_column = 0\n\n    # Pre-allocate w, V\n    V = np.zeros((n, m * r), dtype=complex)\n    w = np.zeros((n, m * r), dtype=complex)  # Initialise w, may be smaller than this due to deflation\n    # V = np.zeros((n, m * r))\n    # w = np.zeros((n, m * r))  # Initialise w, may be smaller than this due to deflation\n\n    if approx_type == 'partial_realisation':\n        G = B\n        F = lu_A_input\n    else:\n        G = lu_solve(lu_A_input, B, transpose_mode)\n\n    for k in range(m):\n        w[:, k] = G[:, k]\n\n        ## Orthogonalise w_k to preceding w_j for j < k\n        if k >= 1:\n            w[:, :k+1] = mgs_ortho(w[:, :k+1])[:, :k+1]\n        # from sharpy.rom.krylov import check_eye\n        # try:\n        #     check_eye(w[:, :k+1], w[:, :k+1].T)\n        # except AssertionError:\n        #     print('failing here - k = %g' % k)\n\n\n    V[:, :m+1] = w[:, :m+1]\n    last_column += m\n\n    mu = m  # Initialise controllability index\n    mu_c = m  # Guess at controllability index with no deflation\n    t = m   # worked column index\n\n    # from sharpy.rom.krylov import check_eye\n    # try:\n    #     check_eye(V[:, :m+1], V[:, :m+1].T)\n    # except AssertionError:\n    #     print('failing here')\n\n    for k in range(1, r):\n        for j in range(mu_c):\n            if approx_type == 'partial_realisation':\n                w[:, t] = F.dot(w[:, t-mu])\n            else:\n                w[:, t] = lu_solve(lu_A_input, w[:, t-mu], transpose_mode)\n\n            # Orthogonalise w[:,t] against V_i -\n            w[:, :t+1] = mgs_ortho(w[:, :t+1])[:, :t+1]\n\n            # if np.linalg.norm(w[:, t]) < deflation_tolerance:\n            #     # Deflate w_k\n            #     cout.cout_wrap('\\tVector deflated', 3)\n            #     w = [w[:, 0:t], w[:, t+1:]]\n            #     last_column -= 1\n            #     mu -= 1\n            # else:\n            #     pass\n            #     # V[:, t] = w[:, t]\n            #     # last_column += 1\n            #     # t += 1\n            try:\n                check_eye(w[:, :t+1], w[:, :t+1].T)\n                V[:, t] = w[:, t]\n                last_column += 1\n                t += 1\n            except AssertionError:\n                cout.cout_wrap('\\tMatrix lost orthogonality creating Krylov subspace:'\n                               ' \\n\\t\\tKrylov order = %g\\n\\t\\tInput vector = %g'\n                               % (k, j), 2)\n                w = np.hstack((w[:, 0:t], w[:, t+1:]))\n                cout.cout_wrap('\\t\\tVector deflated', 2)\n                last_column -= 1\n                mu -= 1\n        mu_c = mu\n\n    try:\n        check_eye(V[:, :t], V[:, :t].T)\n    except AssertionError:\n        raise ValueError('Krylov space construction failed to create an orthogonal space')\n\n    return V[:, :t]\n\n\ndef build_krylov_space(frequency, r, side, a, b):\n\n    if frequency == np.inf or frequency.real == np.inf:\n        approx_type = 'partial_realisation'\n        lu_a = a\n    else:\n        approx_type = 'Pade'\n        lu_a = lu_factor(frequency, a)\n\n    try:\n        nu = b.shape[1]\n    except IndexError:\n        nu = 1\n\n    if nu == 1:\n        krylov_function = construct_krylov\n    else:\n        krylov_function = construct_mimo_krylov\n\n    v = krylov_function(r, lu_a, b, approx_type, side)\n\n    return v\n\n\ndef evec(j):\n    \"\"\"j-th unit vector (in row format)\n\n    Args:\n        j: Unit vector dimension\n\n    Returns:\n        np.ndarray: j-th unit vector\n\n    Examples:\n        >>> evec(2)\n        np.array([0, 1])\n        >>> evec(3)\n        np.array([0, 0, 1])\n\n    \"\"\"\n    e = np.zeros(j+1)\n    e[j] = 1\n    return e\n\n\ndef schur_ordered(A, ct=False):\n    r\"\"\"Returns block ordered complex Schur form of matrix :math:`\\mathbf{A}`\n\n    .. math:: \\mathbf{TAT}^H = \\mathbf{A}_s = \\begin{bmatrix} A_{11} & A_{12} \\\\ 0 & A_{22} \\end{bmatrix}\n\n    where :math:`A_{11}\\in\\mathbb{C}^{s\\times s}` contains the :math:`s` stable\n    eigenvalues of :math:`\\mathbf{A}\\in\\mathbb{R}^{m\\times m}`.\n\n    Args:\n        A (np.ndarray): Matrix to decompose.\n        ct (bool): Continuous time system.\n\n    Returns:\n        tuple: Tuple containing the Schur decomposition of :math:`\\mathbf{A}`, :math:`\\mathbf{A}_s`; the transformation\n        :math:`\\mathbf{T}\\in\\mathbb{C}^{m\\times m}`; and the number of stable eigenvalues of :math:`\\mathbf{A}`.\n\n    Notes:\n        This function is a wrapper of ``scipy.linalg.schur`` imposing the settings required for this application.\n\n    \"\"\"\n    if ct:\n        sort_eigvals = 'lhp'\n    else:\n        sort_eigvals = 'iuc'\n\n    # if A.dtype == complex:\n    #     output_form = 'complex'\n    # else:\n    #     output_form = 'real'\n    # issues when not using the complex form of the Schur decomposition\n\n    output_form = 'complex'\n    As, Tt, n_stable1 = sclalg.schur(A, output=output_form, sort=sort_eigvals)\n\n    if sort_eigvals == 'lhp':\n        n_stable = np.sum(np.linalg.eigvals(A).real <= 0)\n    elif sort_eigvals == 'iuc':\n        n_stable = np.sum(np.abs(np.linalg.eigvals(A)) <= 1.)\n    else:\n        raise NameError('Unknown sorting of eigenvalues. Either iuc or lhp')\n\n    assert n_stable == n_stable1, 'Number of stable eigenvalues not equal in Schur output and manual calculation'\n\n    assert (np.abs(As-np.conj(Tt.T).dot(A.dot(Tt))) < 1e-4).all(), 'Schur breakdown - A_schur != T^H A T'\n    return As, Tt.T, n_stable\n\n\ndef remove_a12(As, n_stable):\n    r\"\"\"Basis change to remove the (1, 2) block of the block-ordered real Schur matrix :math:`\\mathbf{A}`\n\n    Being :math:`\\mathbf{A}_s\\in\\mathbb{R}^{m\\times m}` a matrix of the form\n\n    .. math:: \\mathbf{A}_s = \\begin{bmatrix} A_{11} & A_{12} \\\\ 0 & A_{22} \\end{bmatrix}\n\n    the (1,2) block is removed by solving the Sylvester equation\n\n    .. math:: \\mathbf{A}_{11}\\mathbf{X} - \\mathbf{X}\\mathbf{A}_{22} + \\mathbf{A}_{12} = 0\n\n    used to build the change of basis\n\n    .. math:: \\mathbf{T} = \\begin{bmatrix} \\mathbf{I}_{s,s} & -\\mathbf{X}_{s,u} \\\\ \\mathbf{0}_{u, s}\n        & \\mathbf{I}_{u,u} \\end{bmatrix}\n\n    where :math:`s` and :math:`u` are the respective number of stable and unstable eigenvalues, such that\n\n    .. math:: \\mathbf{TA}_s\\mathbf{T}^\\top = \\begin{bmatrix} A_{11} & \\mathbf{0} \\\\ 0 & A_{22} \\end{bmatrix}.\n\n    Args:\n        As (np.ndarray): Block-ordered real Schur matrix (can be built using\n            :func:`sharpy.rom.utils.krylovutils.schur_ordered`).\n        n_stable (int): Number of stable eigenvalues in ``As``.\n\n    Returns:\n        np.ndarray: Basis transformation :math:`\\mathbf{T}\\in\\mathbb{R}^{m\\times m}`.\n\n    References:\n        Jaimoukha, I. M., Kasenally, E. D.. Implicitly Restarted Krylov Subspace Methods for Stable Partial Realizations\n        SIAM Journal of Matrix Analysis and Applications, 1997.\n    \"\"\"\n    A11 = As[:n_stable, :n_stable]\n    A12 = As[:n_stable, n_stable:]\n    A22 = As[n_stable:, n_stable:]\n    n = As.shape[0]\n\n    X = sclalg.solve_sylvester(A11, -A22, -A12)\n\n    T = np.block([[np.eye(n_stable), -X], [np.zeros((n-n_stable, n_stable)), np.eye(n-n_stable)]])\n\n    T2 = np.eye(n, n_stable)\n    # App = T2.T.dot(T.dot(As.dot(np.linalg.inv(T).dot(T2))))\n    return T, X\n\n\ndef check_eye(T, Tinv, msg='', eps=-6):\n    r\"\"\"Simple utility to verify matrix inverses\n\n    Asserts that\n\n    .. math:: \\mathbf{T}^{-1}\\mathbf{T} = \\mathbf{I}\n\n    Args:\n        T (np.ndarray): Matrix to test\n        Tinv (np.ndarray): Supposed matrix inverse\n        msg (str): Output error message if inverse check not satisfied\n        eps (float): Error threshold (:math:`10^\\varepsilon`)\n\n    Raises:\n        AssertionError: if matrix inverse check is not satisfied\n\n    \"\"\"\n    eye_approx = Tinv.dot(T)\n    max_diff = np.max(np.abs(np.eye(eye_approx.shape[0]) - eye_approx))\n\n    try:\n        log_error = np.log10(max_diff)\n        assert log_error < eps, 'Tinv.dot(T) not equal to identity, %s \\nlog(error) = %.e' \\\n                               % (msg, log_error)\n    except RuntimeWarning:\n        # unlikely event that both matrices are identical and max_diff == 0\n        pass\n"
  },
  {
    "path": "sharpy/rom/utils/librom.py",
    "content": "\"\"\"General ROM utilities\n\nS. Maraniello, 14 Feb 2018\n\"\"\"\n\nimport warnings\nimport numpy as np\nimport scipy.linalg as scalg\n\nimport sharpy.linear.src.libsparse as libsp\nimport sharpy.linear.src.libss as libss\n\n\ndef balreal_direct_py(A, B, C, DLTI=True, Schur=False, full_outputs=False):\n    r\"\"\"\n    Find balanced realisation of continuous (``DLTI = False``) and discrete (``DLTI = True``)\n    time of LTI systems using  scipy libraries.\n\n    The function proceeds to achieve balanced realisation of the state-space system by first solving\n    the Lyapunov equations. They are solved using Barlets-Stewart algorithm for\n    Sylvester equation, which is based on A matrix Schur decomposition.\n\n    .. math::\n        \\mathbf{A\\,W_c + W_c\\,A^T + B\\,B^T} &= 0  \\\\\n        \\mathbf{A^T\\,W_o + W_o\\,A + C^T\\,C} &= 0\n\n    to obtain the reachability and observability gramians, which are positive definite matrices.\n\n    Then, the gramians are decomposed into their Cholesky factors such that:\n\n    .. math::\n        \\mathbf{W_c} &= \\mathbf{Q_c\\,Q_c^T} \\\\\n        \\mathbf{W_o} &= \\mathbf{Q_o\\,Q_o^T}\n\n    A singular value decomposition (SVD) of the product of the Cholesky factors is performed\n\n    .. math:: (\\mathbf{Q_o^T\\,Q_c}) = \\mathbf{U\\,\\Sigma\\,V^*}\n\n    The singular values are then used to build the transformation matrix :math:`\\mathbf{T}`\n\n    .. math::\n        \\mathbf{T} &= \\mathbf{Q_c\\,V\\,\\Sigma}^{-1/2} \\\\\n        \\mathbf{T}^{-1} &= \\mathbf{\\Sigma}^{-1/2}\\,\\mathbf{U^T\\,Q_o^T}\n\n    The balanced system is therefore of the form:\n\n    .. math::\n        \\mathbf{A_b} &= \\mathbf{T^{-1}\\,A\\,T} \\\\\n        \\mathbf{B_b} &= \\mathbf{T^{-1}\\,B} \\\\\n        \\mathbf{C_b} &= \\mathbf{C\\,T} \\\\\n        \\mathbf{D_b} &= \\mathbf{D}\n\n    Warnings:\n        This function may be less computationally efficient than the ``balreal``\n        Matlab implementation and does not offer the option to bound the realisation\n        in frequency and time.\n\n    Notes:\n        - Lyapunov equations are solved using Barlets-Stewart algorithm for\n          Sylvester equation, which is based on A matrix Schur decomposition.\n\n        - Notation above is consistent with Gawronski [2].\n\n    Args:\n        A (np.ndarray): Plant Matrix\n        B (np.ndarray): Input Matrix\n        C (np.ndarray): Output Matrix\n        DLTI (bool): Discrete time state-space flag\n        Schur (bool): Use Schur decomposition to solve the Lyapunov equations\n\n    Returns:\n        tuple of np.ndarrays: Tuple of the form ``(S, T, Tinv)`` containing:\n            - Singular values in diagonal matrix (``S``)\n            - Transformation matrix (``T``).\n            - Inverse transformation matrix(``Tinv``).\n\n    References:\n        [1] Anthoulas, A.C.. Approximation of Large Scale Dynamical Systems. Chapter 7. Advances in Design and Control.\n        SIAM. 2005.\n\n        [2] Gawronski, W.. Dynamics and control of structures. New York: Springer. 1998\n    \"\"\"\n\n    ### select solver for Lyapunov equation\n    # Notation reminder:\n    # scipy: A X A.T - X = -Q\n    # contr: A W A.T - W = - B B.T\n    # obser: A.T W A - W = - C.T C\n    if DLTI:\n        sollyap = scalg.solve_discrete_lyapunov\n    else:\n        sollyap = scalg.solve_lyapunov\n\n    # A is a sparse matrix in csr_matrix(sparse) format, can not be directly passed into functions used in scipy _solver.py\n    # Sparse matrices do not work well with Scipy (Version 1.7.3) in the following code, so A is transformed into a dense matrix here first.\n    if type(A) is not np.ndarray:\n        try:\n            A = A.todense()\n        except AttributeError:\n            raise TypeError(f'Matrix needs to be in dense form. Unable to convert A matrix of type {type(A)} to '\n                            f'dense using method .todense()')\n\n    # solve Lyapunov\n    if Schur:\n        # decompose A\n        Atri, U = scalg.schur(A)\n\n        # solve Lyapunov\n        BBtri = np.dot(U.T, np.dot(B, np.dot(B.T, U)))\n        CCtri = np.dot(U.T, np.dot(C.T, np.dot(C, U)))\n        Wctri = sollyap(Atri, BBtri)\n        Wotri = sollyap(Atri.T, CCtri)\n        # reconstruct Wo,Wc\n        Wc = np.dot(U, np.dot(Wctri, U.T))\n        Wo = np.dot(U, np.dot(Wotri, U.T))\n    else:\n        Wc = sollyap(A, np.dot(B, B.T))\n        Wo = sollyap(A.T, np.dot(C.T, C))\n\n    # Choleski factorisation: W=Q Q.T\n    # Qc = scalg.cholesky(Wc).T\n    # Qo = scalg.cholesky(Wo).T\n\n    # build M matrix and SVD\n    # M = np.dot(Qo.T, Qc)\n    # U, s, Vh = scalg.svd(M)\n    # S = np.diag(s)\n    # Sinv = np.diag(1. / s)\n    # V = Vh.T\n\n    # Build transformation matrices\n    # T = np.dot(Qc, np.dot(V, np.sqrt(Sinv)))\n    # Tinv = np.dot(np.sqrt(Sinv), np.dot(U.T, Qo.T))\n\n    # return S, T, Tinv\n\n    ### Find transformation matrices\n    # avoid Cholevski - unstable\n\n    # Building T and Tinv using SVD:\n    Uc, Sc, Vc = scalg.svd(Wc)\n    Uo, So, Vo = scalg.svd(Wo)\n\n    # Perform decomposition:\n    Sc = np.sqrt(np.diag(Sc))\n    So = np.sqrt(np.diag(So))\n    Qc = Uc @ Sc\n    Qot = So @ Vo\n\n    # Build Hankel matrix:\n    H = Qot @ Qc\n\n    # Find SVD of Hankel matrix:\n    U, hsv, Vt = scalg.svd(H)\n    # hsv = np.diag(hsv)\n\n    # Find T and Tinv:\n    S = np.sqrt(np.diag(hsv))\n\n    # Please note, the notation below is swapped as compared to regular notation in the literature.\n    # This is a known feature of SHARPy, hence it is maintained throughout (including documentation).\n    Tinv = scalg.inv(S) @ U.T @ Qot\n    T = Qc @ Vt.T @ scalg.inv(S)\n\n    if full_outputs is False:\n        return hsv, T, Tinv\n\n    else:\n        # get square-root factors\n        # UT, QoT = scalg.qr(np.dot(np.diag(np.sqrt(hsv)), Tinv), pivoting=False)\n        # Vh, QcT = scalg.qr(np.dot(T, np.diag(np.sqrt(hsv))).T, pivoting=False)\n\n        # return hsv, UT.T, Vh, QcT.T, QoT.T\n        return hsv, U, Vt, Qc, Qot.T\n\n\ndef balreal_iter(A, B, C, lowrank=True, tolSmith=1e-10, tolSVD=1e-6, kmin=None,\n                 tolAbs=False, Print=False, outFacts=False):\n    \"\"\"\n    Find balanced realisation of DLTI system.\n\n    Notes:\n\n        Lyapunov equations are solved using iterative squared Smith\n        algorithm, in its low or full rank version. These implementations are\n        as per the low_rank_smith and smith_iter functions respectively but,\n        for computational efficiency, the iterations are rewritten here so as to\n        solve for the observability and controllability Gramians contemporary.\n\n\n    - Exploiting sparsity:\n\n        This algorithm is not ideal to exploit sparsity. However, the following\n        strategies are implemented:\n\n            - if the A matrix is provided in sparse format, the powers of A will be\n              calculated exploiting sparsity UNTIL the number of non-zero elements\n              is below 15% the size of A. Upon this threshold, the cost of the matrix\n              multiplication rises dramatically, and A is hence converted to a dense\n              numpy array.\n    \"\"\"\n\n    ### Solve Lyapunov equations\n    # Notation reminder:\n    # scipy: A X A.T - X = -Q\n    # contr: A W A.T - W = - B B.T\n    # obser: A.T W A - W = - C.T C\n    # low-rank smith: A.T X A - X = -Q Q.T\n\n    # matrices size\n    N = A.shape[0]\n    rC = B.shape[1]\n    rO = C.shape[0]\n\n    if lowrank:  # low-rank square-Smith iteration (with SVD)\n\n        # initialise smith iteration\n        DeltaNorm = 1e6  # error\n        DeltaNormNext = DeltaNorm ** 2  # error expected at next iter\n\n        kk = 0\n        Qck = B\n        Qok = C.T\n\n        if Print:\n            print('Iter\\tMaxZ\\t|\\trank_c\\trank_o\\tA size')\n        while DeltaNorm > tolSmith and DeltaNormNext > 1e-3 * tolSmith:\n\n            ###### controllability\n            ### compute Ak^2 * Qck\n            # (future: use block Arnoldi)\n            Qcright = libsp.dot(A, Qck)\n            MaxZhere = np.max(np.abs(Qcright))\n\n            ### enlarge Z matrices\n            Qck = np.concatenate((Qck, Qcright), axis=1)\n            Qcright = None\n            rC = Qck.shape[1]\n\n            if kmin == None or kmin < rC:\n                ### \"cheap\" SVD truncation\n                Uc, svc = scalg.svd(Qck, full_matrices=False, overwrite_a=True,\n                                    lapack_driver='gesdd')[:2]\n                # import scipy.linalg.interpolative as sli\n                # Ucnew,svcnew,temp=sli.svd(Qck,tolSVD)\n                if tolAbs:\n                    rcmax = np.sum(svc > tolSVD)\n                else:\n                    rcmax = np.sum(svc > tolSVD * svc[0])\n                if kmin != None:\n                    rC = max(rcmax, kmin)\n                else:\n                    rC = rcmax\n                Qck = Uc[:, :rC] * svc[:rC]\n                # free memory\n                Uc = None\n                Qcright = None\n\n            ###### observability\n            ### compute Ak^2 * Qok\n            # (future: use block Arnoldi)\n            Qoright = np.transpose(libsp.dot(Qok.T, A))\n            DeltaNorm = max(MaxZhere, np.max(np.abs(Qoright)))\n\n            ### enlarge Z matrices\n            Qok = np.concatenate((Qok, Qoright), axis=1)\n            Qoright = None\n            rO = Qok.shape[1]\n\n            if kmin == None or kmin < rO:\n                ### \"cheap\" SVD truncation\n                Uo, svo = scalg.svd(Qok, full_matrices=False)[:2]\n\n                if tolAbs:\n                    romax = np.sum(svo > tolSVD)\n                else:\n                    romax = np.sum(svo > tolSVD * svo[0])\n                if kmin != None:\n                    rO = max(romax, kmin)\n                else:\n                    rO = romax\n                Qok = Uo[:, :rO] * svo[:rO]\n                Uo = None\n\n            ##### Prepare next time step\n            if Print:\n                print('%.3d\\t%.2e\\t%.5d\\t%.5d\\t%.5d' % (kk, DeltaNorm, rC, rO, N))\n            DeltaNormNext = DeltaNorm ** 2\n\n            if DeltaNorm > tolSmith and DeltaNormNext > 1e-3 * tolSmith:\n\n                # compute power\n                if type(A) is libsp.csc_matrix:\n                    A = A.dot(A)\n                    # check sparsity\n                    if A.size > 0.15 * N ** 2:\n                        A = A.toarray()\n                elif type(A) is np.ndarray:\n                    A = np.linalg.matrix_power(A, 2)\n                else:\n                    raise NameError('Type of A not supported')\n\n            ### update\n            kk = kk + 1\n\n        A = None\n\n\n    else:  # full-rank squared smith iteration (with Cholevsky)\n\n        raise NameError('Use balreal_iter_old instead!')\n\n    # find min size (only if iter used)\n    cc, co = Qck.shape[1], Qok.shape[1]\n    if Print:\n        print('cc=%.2d, co=%.2d' % (cc, co))\n        print('rank(Zc)=%.4d\\trank(Zo)=%.4d' % (rcmax, romax))\n\n    # build M matrix and SVD\n    M = libsp.dot(Qok.T, Qck)\n    U, s, Vh = scalg.svd(M, full_matrices=False)\n\n    if outFacts:\n        return s, Qck, Qok\n\n    else:\n        sinv = s ** (-0.5)\n        T = libsp.dot(Qck, Vh.T * sinv)\n        Tinv = np.dot((U * sinv).T, Qok.T)\n\n    if Print:\n        print('rank(Zc)=%.4d\\trank(Zo)=%.4d' % (rcmax, romax))\n\n    return s, T, Tinv, rcmax, romax\n\n\ndef balreal_iter_old(A, B, C, lowrank=True, tolSmith=1e-10, tolSVD=1e-6, kmax=None,\n                     tolAbs=False):\n    \"\"\"\n    Find balanced realisation of DLTI system.\n\n    Notes: Lyapunov equations are solved using iterative squared Smith\n    algorithm, in its low or full rank version. These implementations are\n    as per the low_rank_smith and smith_iter functions respectively but,\n    for computational efficiency,, the iterations are rewritten here so as to\n    solve for the observability and controllability Gramians contemporary.\n    \"\"\"\n\n    ### Solve Lyapunov equations\n    # Notation reminder:\n    # scipy: A X A.T - X = -Q\n    # contr: A W A.T - W = - B B.T\n    # obser: A.T W A - W = - C.T C\n    # low-rank smith: A.T X A - X = -Q Q.T\n\n    if lowrank:  # low-rank square-Smith iteration (with SVD)\n\n        # matrices size\n        N = A.shape[0]\n        rB = B.shape[1]\n        rC = C.shape[0]\n\n        # initialise smith iteration\n        DeltaNorm = 1e6\n        print('Iter\\tMaxZhere')\n        kk = 0\n        Apow = A\n        Qck = B\n        Qok = C.T\n\n        while DeltaNorm > tolSmith:\n            ### compute products Ak^2 * Zk\n            ### (use block Arnoldi)\n            Qcright = np.dot(Apow, Qck)\n            Qoright = np.dot(Apow.T, Qok)\n            Apow = np.dot(Apow, Apow)\n\n            ### enlarge Z matrices\n            Qck = np.concatenate((Qck, Qcright), axis=1)\n            Qok = np.concatenate((Qok, Qoright), axis=1)\n\n            ### check convergence without reconstructing the added term\n            MaxZhere = max(np.max(np.abs(Qoright)), np.max(np.abs(Qcright)))\n            print('%.4d\\t%.3e' % (kk, MaxZhere))\n            DeltaNorm = MaxZhere\n\n            # fixed columns chopping\n            if kmax is None:\n                # cheap SVD truncation\n                if Qck.shape[1] > .4 * N or Qok.shape[1] > .4 * N:\n                    Uc, svc = scalg.svd(Qck, full_matrices=False)[:2]\n                    Uo, svo = scalg.svd(Qok, full_matrices=False)[:2]\n                    if tolAbs:\n                        rcmax = np.sum(svc > tolSVD)\n                        romax = np.sum(svo > tolSVD)\n                    else:\n                        rcmax = np.sum(svc > tolSVD * svc[0])\n                        romax = np.sum(svo > tolSVD * svo[0])\n                    pmax = max(rcmax, romax)\n                    Qck = Uc[:, :pmax] * svc[:pmax]\n                    Qok = Uo[:, :pmax] * svo[:pmax]\n                # Qck_old=np.dot(Uc[:,:pmax],np.diag(svc[:pmax]))\n                # Qok_old=np.dot(Uo[:,:pmax],np.diag(svo[:pmax]))\n                # Qck=np.dot(Uc[:,:rcmax],np.diag(svc[:rcmax]))\n                # Qok=np.dot(Uo[:,:romax],np.diag(svo[:romax]))\n            else:\n                if Qck.shape[1] > kmax:\n                    Uc, svc = scalg.svd(Qck, full_matrices=False)[:2]\n                    Qck = Uc[:, :kmax] * svc[:kmax]\n                if Qok.shape[1] > kmax:\n                    Uo, svo = scalg.svd(Qok, full_matrices=False)[:2]\n                    Qok = Uo[:, :kmax] * svo[:kmax]\n\n            ### update\n            kk = kk + 1\n\n        del Apow\n        Qc, Qo = Qck, Qok\n\n    else:  # full-rank squared smith iteration (with Cholevsky)\n\n        # first iteration\n        Wc = np.dot(B, B.T)\n        Wo = np.dot(C.T, C)\n        Apow = A\n        AXAobs = np.dot(np.dot(A.T, Wo), A)\n        AXActrl = np.dot(np.dot(A, Wc), A.T)\n        DeltaNorm = max(np.max(np.abs(AXAobs)), np.max(np.abs(AXActrl)))\n\n        kk = 1\n        print('Iter\\tRes')\n        while DeltaNorm > tolSmith:\n            kk = kk + 1\n\n            # update\n            Wo = Wo + AXAobs\n            Wc = Wc + AXActrl\n\n            # incremental\n            Apow = np.dot(Apow, Apow)\n            AXAobs = np.dot(np.dot(Apow.T, Wo), Apow)\n            AXActrl = np.dot(np.dot(Apow, Wc), Apow.T)\n            DeltaNorm = max(np.max(np.abs(AXAobs)), np.max(np.abs(AXActrl)))\n            print('%.4d\\t%.3e' % (kk, DeltaNorm))\n        # final update (useless in very low tolerance)\n        Wo = Wo + AXAobs\n        Wc = Wc + AXActrl\n\n        # Choleski factorisation: W=Q Q.T. If unsuccessful, directly solve\n        # eigenvalue problem\n        Qc = scalg.cholesky(Wc).T\n        Qo = scalg.cholesky(Wo).T\n    # # eigenvalues are normalised by one, hence Tinv and T matrices\n    # # here are not scaled\n    # ssq,Tinv,T=scalg.eig(np.dot(Wc,Wo),left=True,right=True)\n    # Tinv=Tinv.T\n    # #Tinv02=Tinv02.T\n    # S=np.diag(np.sqrt(ssq))\n    # return S,T,Tinv\n\n    # find min size (only if iter used)\n    cc, co = Qc.shape[1], Qo.shape[1]\n    cmin = min(cc, co)\n    print('cc=%.2d, co=%.2d' % (cc, co))\n\n    # build M matrix and SVD\n    M = np.dot(Qo.T, Qc)\n\n    # ### not optimised\n    # U,s,Vh=scalg.svd(M,full_matrices=True)\n    # U,Vh,s=U[:,:cmin],Vh[:cmin,:],s[:cmin]\n    # S=np.diag(s)\n    # Sinv=np.diag(1./s)\n    # V=Vh.T\n    # # Build transformation matrices\n    # T=np.dot(Qc,np.dot(V,np.sqrt(Sinv)))\n    # Tinv=np.dot(np.sqrt(Sinv),np.dot(U.T,Qo.T))\n\n    ### optimised\n    U, s, Vh = scalg.svd(M, full_matrices=True)  # as M is square, full_matrices has no effect\n    sinv = s ** (-0.5)\n    T = np.dot(Qc, Vh.T * sinv)\n    Tinv = np.dot((U * sinv).T, Qo.T)\n\n    return s, T, Tinv\n\n\ndef smith_iter(S, T, tol=1e-8, Square=True):\n    \"\"\"\n    Solves the Stein equation\n        S.T X S - X = -T\n    by mean of Smith or squared-Smith algorithm. Note that a solution X exists\n    only if the eigenvalues of S are stricktly smaller than one, and the\n    algorithm will not converge otherwise. The algorithm can not exploit\n    sparsity, hence, while convergence can be improved for very large matrices,\n    it can not be employed if matrices are too large to be stored in memory.\n\n    Ref. Penzt, \"A cyclic low-rank Smith method for large sparse Lyapunov\n    equations\", 2000.\n    \"\"\"\n\n    N = S.shape[0]\n\n    if Square:\n\n        # first iteration\n        X = T\n        Spow = S\n        STXS = np.dot(np.dot(S.T, X), S)\n        DeltaNorm = np.max(np.abs(STXS))\n\n        # # second iteration:\n        # # can be removed using Spow=np.dot(Spow,Spow)\n        # X=X+STXS\n        # S=np.dot(S,S)\n        # Spow=S\n        # STXS=np.dot(np.dot(Spow.T,X),Spow)\n        # DeltaNorm=np.max(np.abs(STXS))\n\n        counter = 1\n        print('Iter\\tRes')\n        while DeltaNorm > tol:\n            counter = counter + 1\n\n            # update\n            X = X + STXS\n\n            # incremental\n            # Spow=np.dot(Spow,S) # use this if uncomment second iter\n            Spow = np.dot(Spow, Spow)\n            STXS = np.dot(np.dot(Spow.T, X), Spow)\n            DeltaNorm = np.max(np.abs(STXS))\n\n            print('%.4d\\t%.3e' % (counter, DeltaNorm))\n\n    else:\n        # first iteration\n        X = T\n        Spow = S\n        STTS = np.dot(np.dot(Spow.T, T), Spow)\n        DeltaNorm = np.max(np.abs(STTS))\n\n        counter = 1\n        print('Iter\\tRes')\n        while DeltaNorm > tol:\n            counter = counter + 1\n\n            # update\n            X = X + STTS\n\n            # incremental\n            Spow = np.dot(Spow, S)\n            STTS = np.dot(np.dot(Spow.T, T), Spow)\n            DeltaNorm = np.max(np.abs(STTS))\n\n            print('%.4d\\t%.3e' % (counter, DeltaNorm))\n\n    print('Error %.2e achieved after %.4d iteration!' % (DeltaNorm, counter))\n\n    return X\n\n\ndef res_discrete_lyap(A, Q, Z, Factorised=True):\n    \"\"\"\n    Provides residual of discrete Lyapunov equation:\n        A.T X A - X = -Q Q.T\n    If Factorised option is true,\n        X=Z*Z.T\n    otherwise X=Z is chosen.\n\n    Reminder:\n    contr: A W A.T - W = - B B.T\n    obser: A.T W A - W = - C.T C\n    \"\"\"\n\n    if Factorised:\n        X = np.dot(Z, Z.T)\n    else:\n        X = Z\n    R = np.dot(A.T, np.dot(X, A)) - X + np.dot(Q, Q.T)\n    resinf = np.max(np.abs(R))\n\n    return resinf\n\n\ndef low_rank_smith(A, Q, tol=1e-10, Square=True, tolSVD=1e-12, tolAbs=False,\n                   kmax=None, fullOut=True, Convergence='Zk'):\n    \"\"\"\n    Low-rank smith algorithm for Stein equation\n        A.T X A - X = -Q Q.T\n    The algorithm can only be used if T is symmetric positive-definite, but this\n    is not checked in this routine for computational performance. The solution X\n    is provided in its factorised form:\n        X=Z Z.T\n    As in the most general case,  a solution X exists only if the eigenvalues of\n    S are stricktly smaller than one, and the algorithm will not converge\n    otherwise. The algorithm can not exploits parsity, hence, while convergence\n    can be improved for very large matrices, it can not be employed if matrices\n    are too large to be stored in memory.\n\n    Parameters:\n    - tol: tolerance for stopping convergence of Smith algorithm\n    - Square: if true the squared-Smith algorithm is used\n    - tolSVD: tolerance for reduce Z matrix based on singular values\n    - kmax: if given, the Z matrix is forced to have size kmax\n    - tolAbs: if True, the tolerance\n    - fullOut: not implemented\n    - Convergence: 'Zk','res'.\n        - If 'Zk' the iteration is stopped when the inf norm of the incremental\n        matrix goes below tol.\n        - If 'res' the residual of the Lyapunov equation is computed. This\n        strategy may fail to converge if kmax is too low or tolSVD too large!\n\n    Ref. P. Benner, G.E. Khoury and M. Sadkane, \"On the squared Smith method for\n    large-scale Stein equations\", 2014.\n    \"\"\"\n\n    N = A.shape[0]\n    ncol = Q.shape[1]\n    AT = A.T\n\n    DeltaNorm = 1e6\n    print('Iter\\tMaxZhere')\n\n    kk = 0\n    SvList = []\n    ZcColList = []\n\n    if Square:  # ------------------------------------------------- squared iter\n        Zk = Q\n        while DeltaNorm > tol:\n\n            ### compute product Ak^2 * Zk\n            ###  use block Arnoldi\n\n            ## too expensive!!\n            # Zright=Zk\n            # for ii in range(2**kk):\n            # \tZright=np.dot(AT,Zright)\n            Zright = np.dot(AT, Zk)\n            AT = np.dot(AT, AT)\n\n            ### enlarge Z matrix\n            Zk = np.concatenate((Zk, Zright), axis=1)\n\n            ### check convergence\n            if Convergence == 'Zk':\n                ### check convergence without reconstructing the added term\n                MaxZhere = np.max(np.abs(Zright))\n                print('%.4d\\t%.3e' % (kk, MaxZhere))\n                DeltaNorm = MaxZhere\n            elif Convergence == 'res':\n                ### check convergence through residual\n                resinf = res_discrete_lyap(A, Q, Zk, Factorised=True)\n                print('%.4d\\t%.3e\\t%.3e' % (kk, MaxZhere, resinf))\n                DeltaNorm = resinf\n\n            # cheap SVD truncation\n            U, sv, Vh = scalg.svd(Zk, full_matrices=False)\n            # embed()\n\n            if kmax == None:\n                if tolAbs:\n                    pmax = np.sum(sv > tolSVD)\n                else:\n                    pmax = np.sum(sv > tolSVD * sv[0])\n            else:\n                pmax = kmax\n\n            Ut = U[:, :pmax]\n            svt = sv[:pmax]\n            # Vht=Vh[:pmax,:]\n            # Zkrec=np.dot(Ut,np.dot(np.diag(svt),Vht))\n            Zk = np.dot(Ut, np.diag(svt))\n\n            ### update\n            kk = kk + 1\n\n\n    else:  # -------------------------------------------------------- smith iter\n        raise NameError(\n            'Smith method without SVD will lead to extremely large matrices')\n\n        Zk = []\n        Zk.append(Q)\n        while DeltaNorm > tol:\n            Zk.append(np.dot(AT, Zk[-1]))\n            kk = kk + 1\n            # check convergence without reconstructing Z*Z.T\n            MaxZhere = np.max(np.abs(Zk[-1]))\n            print('%.4d\\t%.3e' % (kk, MaxZhere))\n            DeltaNorm = MaxZhere\n        Zk = np.concatenate(tuple(Zk), axis=1)\n\n    return Zk\n\n\n### utilities for balfreq\n\ndef get_trapz_weights(k0, kend, Nk, knyq=False):\n    \"\"\"\n    Returns uniform frequency grid (kv of length Nk) and weights (wv) for\n    Gramians integration using trapezoidal rule. If knyq is True, it is assumed\n    that kend is also the Nyquist frequency.\n    \"\"\"\n\n    assert k0 >= 0. and kend >= 0., 'Frequencies must be positive!'\n\n    dk = (kend - k0) / (Nk - 1.)\n    kv = np.linspace(k0, kend, Nk)\n    wv = np.ones((Nk,)) * dk * np.sqrt(2)\n\n    if k0 / (kend - k0) < 1e-10:\n        wv[0] = .5 * dk\n    else:\n        wv[0] = dk / np.sqrt(2)\n\n    if knyq:\n        wv[-1] = .5 * dk\n    else:\n        wv[-1] = dk / np.sqrt(2)\n\n    return kv, wv\n\n\ndef get_gauss_weights(k0, kend, Npart, order):\n    \"\"\"\n    Returns gauss-legendre frequency grid (kv of length Npart*order) and\n    weights (wv) for Gramians integration.\n\n    The integration grid is divided into Npart partitions, and in each of\n    them integration is performed using a Gauss-Legendre quadrature of\n    order order.\n\n    Note: integration points are never located at k0 or kend, hence there\n    is no need for special treatment as in (for e.g.) a uniform grid case\n    (see get_unif_weights)\n    \"\"\"\n\n    if Npart == 1:\n        # get gauss normalised coords and weights\n        xad, wad = np.polynomial.legendre.leggauss(order)\n        krange = kend - k0\n        kv = .5 * (k0 + kend) + .5 * krange * xad\n        wv = wad * (.5 * krange) * np.sqrt(2)\n        print('partitioning: %.3f to %.3f' % (k0, kend))\n\n    else:\n        kv = np.zeros((Npart * order,))\n        wv = np.zeros((Npart * order,))\n\n        dk_part = (kend - k0) / Npart\n\n        for ii in range(Npart):\n            k0_part = k0 + ii * dk_part\n            kend_part = k0_part + dk_part\n            iivec = range(order * ii, order * (ii + 1))\n            kv[iivec], wv[iivec] = get_gauss_weights(k0_part, kend_part, Npart=1, order=order)\n\n    return kv, wv\n\n\ndef balfreq(SS, DictBalFreq):\n    \"\"\"\n    Method for frequency limited balancing.\n\n    The Observability and controllability Gramians over the frequencies kv\n    are solved in factorised form. Balanced modes are then obtained with a\n    square-root method.\n\n    Details:\n\n        * Observability and controllability Gramians are solved in factorised form\n          through explicit integration. The number of integration points determines\n          both the accuracy and the maximum size of the balanced model.\n\n        * Stability over all (Nb) balanced states is achieved if:\n\n            a. one of the Gramian is integrated through the full Nyquist range\n            b. the integration points are enough.\n\n\n    Input:\n\n    - DictBalFreq: dictionary specifying integration method with keys:\n\n        - ``frequency``: defines limit frequencies for balancing. The balanced\n           model will be accurate in the range ``[0,F]``, where ``F`` is the value of\n           this key. Note that ``F`` units must be consistent with the units specified\n           in the ``self.ScalingFacts`` dictionary.\n\n        - ``method_low``: ``['gauss','trapz']`` specifies whether to use gauss\n          quadrature or trapezoidal rule in the low-frequency range ``[0,F]``.\n\n        - ``options_low``: options to use for integration in the low-frequencies.\n          These depend on the integration scheme (See below).\n\n        - ``method_high``: method to use for integration in the range [F,F_N],\n          where F_N is the Nyquist frequency. See 'method_low'.\n\n        - ``options_high``: options to use for integration in the high-frequencies.\n\n        - ``check_stability``: if True, the balanced model is truncated to\n          eliminate unstable modes - if any is found. Note that very accurate\n          balanced model can still be obtained, even if high order modes are\n          unstable. Note that this option is overridden if \"\"\n\n        - ``get_frequency_response``: if True, the function also returns the\n          frequency response evaluated at the low-frequency range integration\n          points. If True, this option also allows to automatically tune the\n          balanced model.\n\n\n    Future options:\n        - Ncpu: for parallel run\n\n\n    The following integration schemes are available:\n        - ``trapz``: performs integration over equally spaced points using\n          trapezoidal rule. It accepts options dictionaries with keys:\n\n             - ``points``: number of integration points to use (including\n               domain boundary)\n\n        - ``gauss`` performs gauss-lobotto quadrature. The domain can be\n          partitioned in Npart sub-domain in which the gauss-lobotto quadrature\n          of order Ord can be applied. A total number of Npart*Ord points is\n          required. It accepts options dictionaries of the form:\n\n             - ``partitions``: number of partitions\n\n             - ``order``: quadrature order.\n\n\n    Examples:\n\n        The following dictionary\n\n        >>>   DictBalFreq={'frequency': 1.2,\n        >>>                'method_low': 'trapz',\n        >>>                'options_low': {'points': 12},\n        >>>                'method_high': 'gauss',\n        >>>                'options_high': {'partitions': 2, 'order': 8},\n        >>>                'check_stability': True }\n\n\n        balances the state-space model in the frequency range [0, 1.2]\n        using:\n\n            a. 12 equally-spaced points integration of the Gramians in\n               the low-frequency range [0,1.2] and\n\n            b. A 2 Gauss-Lobotto 8-th order quadratures of the controllability\n               Gramian in the high-frequency range.\n\n\n        A total number of 28 integration points will be required, which will\n        result into a balanced model with number of states\n\n        >>>    min{ 2*28* number_inputs, 2*28* number_outputs }\n\n\n        The model is finally truncated so as to retain only the first Ns stable\n        modes.\n    \"\"\"\n\n    ### check input dictionary\n    if 'frequency' not in DictBalFreq:\n        raise NameError('Solution dictionary must include the \"frequency\" key')\n\n    if 'method_low' not in DictBalFreq:\n        warnings.warn('Setting default options for low-frequency integration')\n        DictBalFreq['method_low'] = 'trapz'\n        DictBalFreq['options_low'] = {'points': 12}\n\n    if 'method_high' not in DictBalFreq:\n        warnings.warn('Setting default options for high-frequency integration')\n        DictBalFreq['method_high'] = 'gauss'\n        DictBalFreq['options_high'] = {'partitions': 2, 'order': 8}\n\n    if 'check_stability' not in DictBalFreq:\n        DictBalFreq['check_stability'] = True\n\n    if 'output_modes' not in DictBalFreq:\n        DictBalFreq['output_modes'] = True\n\n    if 'get_frequency_response' not in DictBalFreq:\n        DictBalFreq['get_frequency_response'] = False\n\n    ### get integration points and weights\n\n    # Nyquist frequency\n    kn = np.pi / SS.dt\n\n    Opt = DictBalFreq['options_low']\n    if DictBalFreq['method_low'] == 'trapz':\n        kv_low, wv_low = get_trapz_weights(0., DictBalFreq['frequency'],\n                                           Opt['points'], False)\n    elif DictBalFreq['method_low'] == 'gauss':\n        kv_low, wv_low = get_gauss_weights(0., DictBalFreq['frequency'],\n                                           Opt['partitions'], Opt['order'])\n    else:\n        raise NameError(\n            'Invalid value %s for key \"method_low\"' % DictBalFreq['method_low'])\n\n    Opt = DictBalFreq['options_high']\n    if DictBalFreq['method_high'] == 'trapz':\n        if Opt['points'] == 0:\n            warnings.warn('You have chosen no points in high frequency range!')\n            kv_high, wv_high = [], []\n        else:\n            kv_high, wv_high = get_trapz_weights(DictBalFreq['frequency'], kn,\n                                                 Opt['points'], True)\n    elif DictBalFreq['method_high'] == 'gauss':\n        if Opt['order'] * Opt['partitions'] == 0:\n            warnings.warn('You have chosen no points in high frequency range!')\n            kv_high, wv_high = [], []\n        else:\n            kv_high, wv_high = get_gauss_weights(DictBalFreq['frequency'], kn,\n                                                 Opt['partitions'], Opt['order'])\n    else:\n        raise NameError(\n            'Invalid value %s for key \"method_high\"' % DictBalFreq['method_high'])\n\n    ### -------------------------------------------------- loop frequencies\n\n    ### merge vectors\n    Nk_low = len(kv_low)\n    kvdt = np.concatenate((kv_low, kv_high)) * SS.dt\n    wv = np.concatenate((wv_low, wv_high)) * SS.dt\n    zv = np.cos(kvdt) + 1.j * np.sin(kvdt)\n\n    Eye = libsp.eye_as(SS.A)\n    Zc = np.zeros((SS.states, 2 * SS.inputs * len(kvdt)), )\n    Zo = np.zeros((SS.states, 2 * SS.outputs * Nk_low), )\n\n    if DictBalFreq['get_frequency_response']:\n        Yfreq = np.empty((SS.outputs, SS.inputs, Nk_low,), dtype=np.complex_)\n        kv = kv_low\n\n    for kk in range(len(kvdt)):\n\n        zval = zv[kk]\n        Intfact = wv[kk]  # integration factor\n\n        Qctrl = Intfact * libsp.solve(zval * Eye - SS.A, SS.B)\n        kkvec = range(2 * kk * SS.inputs, 2 * (kk + 1) * SS.inputs)\n        Zc[:, kkvec[:SS.inputs]] = Qctrl.real\n        Zc[:, kkvec[SS.inputs:]] = Qctrl.imag\n\n        ### ----- frequency response\n        if DictBalFreq['get_frequency_response'] and kk < Nk_low:\n            Yfreq[:, :, kk] = (1. / Intfact) * \\\n                              libsp.dot(SS.C, Qctrl, type_out=np.ndarray) + SS.D\n\n        ### ----- observability\n        if kk >= Nk_low:\n            continue\n\n        Qobs = Intfact * libsp.solve(np.conj(zval) * Eye - SS.A.T, SS.C.T)\n\n        kkvec = range(2 * kk * SS.outputs, 2 * (kk + 1) * SS.outputs)\n        Zo[:, kkvec[:SS.outputs]] = Intfact * Qobs.real\n        Zo[:, kkvec[SS.outputs:]] = Intfact * Qobs.imag\n\n    # delete full matrices\n    Kernel = None\n    Qctrl = None\n    Qobs = None\n\n    # LRSQM (optimised)\n    U, hsv, Vh = scalg.svd(np.dot(Zo.T, Zc), full_matrices=False)\n    sinv = hsv ** (-0.5)\n    T = np.dot(Zc, Vh.T * sinv)\n    Ti = np.dot((U * sinv).T, Zo.T)\n    # Zc,Zo=None,None\n\n    ### build frequency balanced model\n    Ab = libsp.dot(Ti, libsp.dot(SS.A, T))\n    Bb = libsp.dot(Ti, SS.B)\n    Cb = libsp.dot(SS.C, T)\n    SSb = libss.StateSpace(Ab, Bb, Cb, SS.D, dt=SS.dt)\n\n    ### Eliminate unstable modes - if any:\n    if DictBalFreq['check_stability']:\n        for nn in range(1, len(hsv) + 1):\n            eigs_trunc = scalg.eigvals(SSb.A[:nn, :nn])\n            eigs_trunc_max = np.max(np.abs(eigs_trunc))\n            if eigs_trunc_max > 1. - 1e-16:\n                SSb.truncate(nn - 1)\n                hsv = hsv[:nn - 1]\n                T = T[:, :nn - 1]\n                Ti = Ti[:nn - 1, :]\n                break\n\n    outs = (SSb, hsv)\n    if DictBalFreq['output_modes']:\n        outs += (T, Ti, Zc, Zo, U, Vh)\n    return outs\n\n\ndef modred(SSb, N, method='residualisation'):\n    \"\"\"\n    Produces a reduced order model with N states from balanced or modal system\n    SSb.\n    Both \"truncation\" and \"residualisation\" methods are employed.\n\n    Note:\n    - this method is designed for small size systems, i.e. a deep copy of SSb is\n    produced by default.\n    \"\"\"\n\n    assert method in ['residualisation', 'realisation', 'truncation'], \\\n        \"method must be equal to 'residualisation' or 'truncation'!\"\n    assert SSb.dt is not None, 'SSb is not a DLTI!'\n\n    Nb = SSb.A.shape[0]\n    if Nb == N:\n        SSrom = libss.StateSpace(SSb.A, SSb.B, SSb.C, SSb.D, dt=SSb.dt)\n        return SSrom\n\n    A11 = SSb.A[:N, :N]\n    B11 = SSb.B[:N, :]\n    C11 = SSb.C[:, :N]\n    D = SSb.D\n\n    if method == 'truncation':\n        SSrom = libss.StateSpace(A11, B11, C11, D, dt=SSb.dt)\n    else:\n        Nb = SSb.A.shape[0]\n        IA22inv = -SSb.A[N:, N:].copy()\n        eevec = range(Nb - N)\n        IA22inv[eevec, eevec] += 1.\n        IA22inv = scalg.inv(IA22inv, overwrite_a=True)\n\n        SSrom = libss.StateSpace(\n            A11 + np.dot(SSb.A[:N, N:], np.dot(IA22inv, SSb.A[N:, :N])),\n            B11 + np.dot(SSb.A[:N, N:], np.dot(IA22inv, SSb.B[N:, :])),\n            C11 + np.dot(SSb.C[:, N:], np.dot(IA22inv, SSb.A[N:, :N])),\n            D + np.dot(SSb.C[:, N:], np.dot(IA22inv, SSb.B[N:, :])),\n            dt=SSb.dt)\n\n    return SSrom\n\n\ndef tune_rom(SSb, kv, tol, gv, method='realisation', convergence='all', Print=False):\n    \"\"\"\n    Starting from a balanced DLTI, this function determines the number of states\n    N required in a ROM (obtained either through 'residualisation' or\n    'truncation' as specified in method - see also librom.modred) to match the\n    frequency response of SSb over the frequency array, kv, with absolute\n    accuracy tol. gv contains the balanced system Hankel singular value, and is\n    used to determine the upper bound for the ROM order N.\n\n    Unless kv does not conver the full Nyquist frequency range, the ROM accuracy\n    is not guaranteed to increase monothonically with the number of states. To\n    account for this, two criteria can be used to determine the ROM convergence:\n\n        - convergence='all': in this case, the number of ROM states N is chosen\n        such that any ROM of order greater than N produces an error smaller than\n        tol. To guarantee this the ROM frequency response is computed for all\n        N<=Nb, where Nb is the number of balanced states. This method is\n        numerically inefficient.\n\n        - convergence='min': atempts to find the minimal number of states to\n        achieve the accuracy tol.\n\n    Note:\n    - the input state-space model, SSb, must be balanced.\n    - the routine in not implemented for numerical efficiency and assumes that\n    SSb is small.\n    \"\"\"\n\n    # reference frequency response\n    Nb = SSb.A.shape[0]\n    Yb = libss.freqresp(SSb, kv, dlti=True)\n    if gv is None:\n        Nmax = Nb\n    else:\n        Nmax = min(np.sum(gv > tol) + 1, Nb)\n\n    if convergence == 'all':\n        # start from larger size and decrease untill the ROm accuracy is over tol\n        Found = False\n        N = Nmax\n        while not Found:\n            SSrom = modred(SSb, N, method)\n            Yrom = libss.freqresp(SSrom, kv, dlti=True)\n            er = np.max(np.abs(Yrom - Yb))\n            if Print:\n                print('N=%.3d, er:%.2e (tol=%.2e)' % (N, er, tol))\n\n            if N == Nmax and er > tol:\n                warnings.warn(\n                    'librom.tune_rom: error %.2e above tolerance %.2e and HSV bound %.2e' \\\n                    % (er, tol, gv[N - 1]))\n            # raise NameError('Hankel singluar values do not '\\\n            # \t\t\t\t'provide a bound for error! '\\\n            # \t\t\t\t'The balanced system may not be accurate')\n            if er < tol:\n                N -= 1\n            else:\n                N += 1\n                Found = True\n                SSrom = modred(SSb, N, method)\n\n    elif convergence == 'min':\n        Found = False\n        N = 1\n        while not Found:\n            SSrom = modred(SSb, N, method)\n            Yrom = libss.freqresp(SSrom, kv, dlti=True)\n            er = np.max(np.abs(Yrom - Yb))\n            if Print:\n                print('N=%.3d, er:%.2e (tol=%.2e)' % (N, er, tol))\n            if er < tol:\n                Found = True\n\n            else:\n                N += 1\n\n    else:\n        raise NameError(\"'convergence' method not implemented\")\n\n    return SSrom\n\n\ndef eigen_dec(A, B, C, dlti=True, N=None, eigs=None, UR=None, URinv=None,\n              order_by='damp', tol=1e-10, complex=False):\n    \"\"\"\n    Eigen decomposition of state-space model (either discrete or continuous time)\n    defined by the A,B,C matrices. Eigen-states are organised in decreasing\n    damping order or increased frequency order such that the truncation\n\n        ``A[:N,:N], B[:N,:], C[:,:N]``\n\n    will retain the least N damped (or lower frequency) modes.\n\n    If the eigenvalues of A, eigs, are complex, the state-space is automatically\n    convert into real by separating its real and imaginary part. This procedure\n    retains the minimal number of states as only 2 equations are added for each\n    pair of complex conj eigenvalues. Extra care is however required when\n    truncating the system, so as to ensure that the chosen value of N does not\n    retain the real part, but not the imaginary part, of a complex pair.\n\n    For this reason, the function also returns an optional output, ``Nlist``, such\n    that, for each N in Nlist, the truncation\n        A[:N,:N], B[:N,:], C[:,:N]\n    does guarantee that both the real and imaginary part of a complex conj pair\n    is included in the truncated model. Note that if ```order_by == None``, the eigs\n    and UR must be given in input and must be such that complex pairs are stored\n    consecutively.\n\n\n    Args:\n        A: state-space matrix\n        B: state-space matrix\n        C: matrices of state-space model\n        dlti: specifies whether discrete (True) or continuous-time. This information\n            is only required to order the eigenvalues in decreasing dmaping order\n        N: number of states to retain. If None, all states are retained\n        eigs,Ur: eigenvalues and right eigenvector of A matrix as given by:\n            eigs,Ur=scipy.linalg.eig(A,b=None,left=False,right=True)\n        Urinv: inverse of Ur\n        order_by={'damp','freq','stab'}: order according to increasing damping (damp)\n        or decreasing frequency (freq) or decreasing damping (stab).\n            If None, the same order as eigs/UR is followed.\n        tol: absolute tolerance used to identify complex conj pair of eigenvalues\n        complex: if true, the system is left in complex form\n\n\n    Returns:\n    (Aproj,Bproj,Cproj): state-space matrices projected over the first N (or N+1\n        if N removes the imaginary part equations of a complex conj pair of\n        eigenvalues) related to the least damped modes\n    Nlist: list of acceptable truncation values\n    \"\"\"\n\n    if N == None:\n        N = A.shape[0]\n\n    if order_by is None:\n        assert ((eigs is not None) and (UR is not None)), \\\n            'Specify criterion to order eigenvalues or provide both eigs and UR'\n\n    ### compute eigevalues/eigenvectors\n    if eigs is None:\n        eigs, UR = scalg.eig(A, b=None, left=False, right=True)\n    if URinv is None:\n        try:\n            URinv = np.linalg.inv(UR)\n        except LinAlgError:\n            print('The A matrix can not be diagonalised as does not admit ' \\\n                  'linearly independent eigenvectors')\n\n    ### order eigenvalues/eigenvectors (or verify format)\n    if order_by is None:\n        # verify format\n        nn = 0\n        while nn < N:\n            if np.abs(eigs[nn].imag) > tol:\n                if nn < N - 1:\n                    assert np.abs(eigs[nn].imag + eigs[nn + 1].imag) < tol, \\\n                        'When order_by is None, eigs and UR much be organised such ' \\\n                        'that complex conj pairs are consecutives'\n                else:\n                    assert np.abs(eigs[nn].imag + eigs[nn - 1].imag) < tol, \\\n                        'When order_by is None, eigs and UR much be organised such ' \\\n                        'that complex conj pairs are consecutives'\n                nn += 2\n            else:\n                nn += 1\n    else:\n        if order_by == 'damp':\n            if dlti:\n                order = np.argsort(np.abs(eigs))[::-1]\n            else:\n                order = np.argsort(eigs.real)[::-1]\n        elif order_by == 'freq':\n            if dlti:\n                order = np.argsort(np.abs(np.angle(eigs)))\n            else:\n                order = np.argsort(np.abs(eigs.imag))\n        elif order_by == 'stab':\n            if dlti:\n                order = np.argsort(np.abs(eigs))\n            else:\n                order = np.argsort(eigs.real)\n        else:\n            raise NameError(\"order_by must be equal to 'damp' or 'freq'\")\n        eigs = eigs[order]\n        UR = UR[:, order]\n        URinv = URinv[order, :]\n\n    ### compute list of available truncation size, Nlist\n    Nlist = []\n    nn = 0\n    while nn < N:\n        # check if eig are complex conj\n        if nn < N - 1 and np.abs(eigs[nn] - eigs[nn + 1].conjugate()) < tol:\n            nn += 2\n        else:\n            nn += 1\n        Nlist.append(nn)\n    assert Nlist[-1] >= N, \\\n        'Something failed when identifying the admissible truncation sizes'\n    if Nlist[-1] > N:\n        warnings.warn(\n            'Resizing the eigendecomposition from %.3d to %.3d states' \\\n            % (N, Nlist[-1]))\n        N = Nlist[-1]\n\n    ### build complex form\n    if complex:\n        Aproj = np.diag(eigs[:N])\n        Bproj = np.dot(URinv[:N, :], B)\n        Cproj = np.dot(C, UR[:, :N])\n        return Aproj, Bproj, Cproj, Nlist\n\n    ### build real values form\n    Aproj = np.zeros((N, N))\n    Bproj = np.zeros((N, B.shape[1]))\n    Cproj = np.zeros((C.shape[0], N))\n    nn = 0\n    while nn < N:\n        # redundant check\n        if (nn + 1 in Nlist) and np.abs(eigs[nn].imag) < tol:\n            Aproj[nn, nn] = eigs[nn].real\n            Bproj[nn, :] = np.dot(URinv[nn, :].real, B)\n            Cproj[:, nn] = np.dot(C, UR[:, nn].real)\n            nn += 1\n        else:\n            Aproj[nn, nn] = eigs[nn].real\n            Aproj[nn, nn + 1] = -eigs[nn].imag\n            Aproj[nn + 1, nn] = eigs[nn].imag\n            Aproj[nn + 1, nn + 1] = eigs[nn].real\n            #\n            Bproj[nn, :] = np.dot(URinv[nn, :].real, B)\n            Bproj[nn + 1, :] = np.dot(URinv[nn, :].imag, B)\n            #\n            Cproj[:, nn] = 2. * np.dot(C, UR[:, nn].real)\n            Cproj[:, nn + 1] = -2. * np.dot(C, UR[:, nn].imag)\n            nn += 2\n\n    return Aproj, Bproj, Cproj, Nlist\n\n\ndef check_stability(A, dt=True):\n    \"\"\"\n    Checks the stability of the system.\n\n    Args:\n        A (np.ndarray): System plant matrix\n        dt (bool): Discrete time system\n\n    Returns:\n        bool: True if the system is stable\n    \"\"\"\n    eigvals = scalg.eigvals(A)\n    if dt:\n        criteria = np.abs(eigvals) > 1.\n    else:\n        criteria = np.real(eigvals) > 0.0\n\n    if np.sum(criteria) >= 1.0:\n        return True\n    else:\n        return False\n"
  },
  {
    "path": "sharpy/rom/utils/librom_interp.py",
    "content": "\"\"\"Methods for the interpolation of DLTI ROMs\n\nThis is library for  state-space models interpolation. These routines are intended\nfor small size state-space models (ROMs), hence some methods may not be optimised\nto exploit sparsity structures. For generality purposes, all methods require in\ninput interpolatory weights.\n\n\nThe module includes the methods:\n\n    - :func:`~sharpy.rom.utils.librom_interp.transfer_function`: returns an interpolatory state-space model based on the\n      transfer function method [1]. This method is general and is, effectively, a\n      wrapper of the :func:`sharpy.linear.src.libss.join` method.\n\n    - :func:`~sharpy.rom.utils.librom_interp.BT_transfer_function`: evolution of transfer function methods. The growth of\n      the interpolated system size is avoided through balancing.\n\n\nReferences:\n\n    [1] Benner, P., Gugercin, S. & Willcox, K., 2015. A Survey of Projection-Based\n    Model Reduction Methods for Parametric Dynamical Systems. SIAM Review, 57(4),\n    pp.483–531.\n\n\nAuthor: S. Maraniello\n\nDate: Mar-Apr 2019\n\n\n\"\"\"\n\nimport warnings\nimport numpy as np\nimport scipy.linalg as scalg\n\n# dependency\nimport sharpy.linear.src.libss as libss\n\n\ndef transfer_function(SS_list, wv):\n    \"\"\"\n    Returns an interpolatory state-space model based on the transfer function \n    method [1]. This method is general and is, effectively, a wrapper of the \n    :func:`sharpy.linear.src.libss.join` method.\n    \n    Features:\n\n        - stability preserved\n        - system size increases with interpolatory order, but can be optimised for\n          fast on-line evaluation\n\n    Args:\n        SS_list (list): List of state-space models instances of :class:`sharpy.linear.src.libss.StateSpace` class.\n        wv (list): list of interpolatory weights.\n\n    Notes:\n\n        For fast online evaluation, this routine can be optimised to return a\n        class that handles each state-space model independently. See ref. [1] for\n        more details.\n\n    References:\n        [1] Benner, P., Gugercin, S. & Willcox, K., 2015. A Survey of Projection-Based\n        Model Reduction Methods for Parametric Dynamical Systems. SIAM Review, 57(4),\n        pp.483–531.\n    \"\"\"\n\n    return libss.join(SS_list, wv)\n\n\ndef FLB_transfer_function(SS_list, wv, U_list, VT_list, hsv_list=None, M_list=None):\n    r\"\"\"\n    Returns an interpolatory state-space model based on the transfer function \n    method [1]. This method is applicable to frequency limited balanced \n    state-space models only.\n\n\n    Features:\n\n        - stability preserved\n        - the interpolated state-space model has the same size than the tabulated ones\n        - all state-space models, need to have the same size and the same numbers of\n          hankel singular values.\n        - suitable for any ROM\n\n\n    Args:\n        SS_list (list): List of state-space models instances of :class:`sharpy.linear.src.libss.StateSpace` class.\n        wv (list): list of interpolatory weights.\n        U_list (list): small size, thin SVD factors of Gramians square roots of each state space model (:math:`\\mathbf{U}`).\n        VT_list (list): small size, thin SVD factors of Gramians square roots of each state space model (:math:`\\mathbf{V}^\\top`).\n        hsv_list (list): small size, thin SVD factors of Gramians square roots of each state space model. If ``None``,\n          it is assumed that\n                        ``U_list = [ U_i sqrt(hsv_i) ]``\n                        ``VT_list = [ sqrt(hsv_i) V_i.T ]``\n          where ``U_i`` and ``V_i.T`` are square matrices and hsv is an array.\n\n        M_list (list): for fast on-line evaluation. Small size product of Gramians\n          factors of each state-space model. Each element of this list is equal to:\n          ``M_i = U_i hsv_i V_i.T``\n\n    Notes:\n        Message for future generations:\n\n            - the implementation is divided into an offline and online part.\n\n    References:\n\n    Maraniello S. and Palacios R., Frequency-limited balanced truncation for\n    parametric reduced-order modelling of the UVLM. Only in the best theaters.\n\n    See Also:\n\n        Frequency-Limited Balanced ROMs may be obtained from SHARPy using :class:`sharpy.rom.balanced.FrequencyLimited`.\n    \"\"\"\n\n    # ----------------------------------------------------------------- offline\n\n    ### checks sizes\n    N_interp = len(SS_list)\n    states = SS_list[0].states\n    inputs = SS_list[0].inputs\n    outputs = SS_list[0].outputs\n    for ss_here in SS_list:\n        assert ss_here.states == states, \\\n            'State-space models must have the same number of states!'\n        assert ss_here.inputs == inputs, \\\n            'State-space models must have the same number of states!'\n        assert ss_here.outputs == outputs, \\\n            'State-space models must have the same number of states!'\n\n    ### case of unbalanced state-space models\n    # in this case, U_list and VT_list contain the full-rank Gramians factors\n    # of each ROM\n    if U_list is None and VT_list is None:\n        raise NameError('apply FLB before calling this routine')\n        # hsv_list = None\n        # M_list, U_list, VT_list = [], [], []\n        # for ii in range(N_interp):\n\n        #     # # avoid direct\n        #     # hsv,U,Vh,Zc,Zo = librom.balreal_direct_py(\n        #     #                         SS_list[ii].A, SS_list[ii].B, SS_list[ii].C, \n        #     #                         DLTI=True,full_outputs=True)\n\n        #     # iterative also fails\n        #     hsv,Zc,Zo = librom.balreal_iter(SS_list[ii].A, SS_list[ii].B, SS_list[ii].C,\n        #                     lowrank=True,tolSmith=1e-10,tolSVD=1e-10,\n        #                     kmin=None, tolAbs=False, Print=True, outFacts=True)\n\n        #     # M_list.append( np.dot( np.dot(U,np.diag(hsv)), Vh) )\n        #     M_list.append( np.dot( Zo.T,Zc ) )\n        #     U_list.append(Zo.T)\n        #     VT_list.append(Zc)\n\n    # calculate small size product of Gramians factors\n    elif M_list is None:\n        if hsv_list is None:\n            M_list = [np.dot(U, VT) for U, VT in zip(U_list, VT_list)]\n        else:\n            M_list = [np.dot(U * hsv, VT) for U, hsv, VT in zip(U_list, hsv_list, VT_list)]\n\n    # ------------------------------------------------------------------ online\n\n    ### balance interpolated model\n    M_int = np.zeros_like(M_list[0])\n    for ii in range(N_interp):\n        M_int += wv[ii] * M_list[ii]\n\n    U_int, hsv_int, Vh_int = scalg.svd(M_int, full_matrices=False)\n    sinv_int = hsv_int ** (-0.5)\n\n    ### build projection matrices\n    sinvUT_int = (U_int * sinv_int).T\n    Vsinv_int = Vh_int.T * sinv_int\n\n    if hsv_list is None:\n        Ti_int_list = [np.dot(sinvUT_int, U) for U in U_list]\n        T_int_list = [np.dot(VT, Vsinv_int) for VT in VT_list]\n    else:\n        Ti_int_list = [np.dot(sinvUT_int, U * np.sqrt(hsv)) \\\n                       for U, hsv in zip(U_list, hsv_list)]\n        T_int_list = [np.dot(np.dot(np.diag(np.sqrt(hsv)), VT),\n                             Vsinv_int) \\\n                      for hsv, VT in zip(hsv_list, VT_list)]\n\n    ### assemble interp state-space model\n    A_int = np.zeros((states, states))\n    B_int = np.zeros((states, inputs))\n    C_int = np.zeros((outputs, states))\n    D_int = np.zeros((outputs, inputs))\n\n    for ii in range(N_interp):\n        # in A and B the weigths come from Ti\n        A_int += wv[ii] * np.dot(Ti_int_list[ii],\n                                 np.dot(SS_list[ii].A, T_int_list[ii]))\n        B_int += wv[ii] * np.dot(Ti_int_list[ii], SS_list[ii].B)\n        # in C and D the weights come from the interp system expression\n        C_int += wv[ii] * np.dot(SS_list[ii].C, T_int_list[ii])\n        D_int += wv[ii] * SS_list[ii].D\n\n    return libss.StateSpace(A_int, B_int, C_int, D_int, dt=SS_list[0].dt), hsv_int\n\n\nclass InterpROM:\n    r\"\"\"\n    State-space 1D interpolation class.\n\n    This class allows interpolating from a list of state-space models, SS.\n\n    State-space models are required to have the same number of inputs and outputs \n    and need to have the same number of states.\n\n    For state-space interpolation, state-space models also need to be defined\n    over the same set of generalised coordinates. If this is not the case, the\n    projection matrices W and V used to produce the ROMs, ie\n\n    .. math:: \\mathbf{A}_{proj} = \\mathbf{W}^\\top \\mathbf{A V}\n\n    where A is the full-states matrix, also need to be provided. This will allow\n    projecting the state-space models onto a common set of generalised \n    coordinates before interpoling.\n\n    For development purposes, the method currently creates a hard copy of the\n    projected matrices into the self.AA, self.BB, self.CC lists\n\n\n    Inputs:\n\n    - SS: list of state-space models (instances of libss.StateSpace class)\n\n    - VV: list of V matrices used to produce SS. If None, it is assumed that\n      ROMs are defined over the same basis\n\n    - WWT: list of W^T matrices used to derive the ROMs.\n    \n    - Vref, WTref: reference subspaces for projection. Some methods neglect this\n      input (e.g. panzer)\n\n    - method_proj: method for projection of state-space models over common\n      coordinates. Available options are:\n\n        - leastsq: find left/right projectors using least squares approx. Suitable\n          for all basis.\n\n        - strongMAC: strong Modal Assurance Criterion [4] enforcement for general\n          basis. See Ref. [3], Eq. (7)\n\n        - strongMAC_BT: strong Modal Assurance Criterion [4] enforcement for \n          basis obtained by Balanced Truncation. Equivalent to strongMAC\n\n        - maraniello_BT: this is equivalent to strongMAC and strongMAC_BT but\n          avoids inversions. However, performance are the same as other strongMAC\n          approaches - it works only when basis map the same subspaces\n\n        - weakMAC_right_orth: weak MAC enforcement [1,3] for state-space models \n          with right orthonoraml basis, i.e. V.T V = I. This is like Ref. [1], but\n          implemented only on one side.\n\n        - weakMAC: implementation of weak MAC enforcement for a general system.\n          The method orthonormalises the right basis (V) and then solves the\n          orthogonal Procrustes problem.\n\n        - for orthonormal basis (V.T V = I): !!! These methods are not tested !!!\n\n            - panzer: produces a new reference point based on svd [2]\n            - amsallem: project over Vref,WTref [1]\n\n    References:\n\n    [1] D. Amsallem and C. Farhat, An online method for interpolating linear \n    parametric reduced-order models, SIAM J. Sci. Comput., 33 (2011), pp. 2169–2198.\n\n    [2] Panzer, J. Mohring, R. Eid, and B. Lohmann, Parametric model order \n    reduction by matrix interpolation, at–Automatisierungstechnik, 58 (2010), \n    pp. 475–484.\n\n    [3] Mahony, R., Sepulchre, R. & Absil, P. -a., 2004. Riemannian Geometry of \n    Grassmann Manifolds with a View on Algorithmic Computation. Acta Applicandae \n    Mathematicae, 80(2), pp.199–220.\n\n    [4] Geuss, M., Panzer, H. & Lohmann, B., 2013. On parametric model order\n    reduction by matrix interpolation. 2013 European Control Conference (ECC), \n    pp.3433–3438.\n\n\n    \"\"\"\n\n    def __init__(self, SS, VV=None, WWT=None,\n                 Vref=None, WTref=None, method_proj=None):\n\n        self.SS = SS\n\n        self.VV = VV\n        self.WWT = WWT\n\n        self.Vref = Vref\n        self.WTref = WTref\n\n        self.method_proj = method_proj\n\n        self.Projected = False\n        if VV is None or WWT is None:\n            self.Projected = True\n            self.AA = [ss_here.A for ss_here in SS]\n            self.BB = [ss_here.B for ss_here in SS]\n            self.CC = [ss_here.C for ss_here in SS]\n\n        # projection required for D\n        self.DD = [ss_here.D for ss_here in SS]\n\n        ### check state-space models\n        Nx, Nu, Ny = SS[0].states, SS[0].inputs, SS[0].outputs\n        dt = SS[0].dt\n        for ss_here in SS:\n            assert ss_here.states == Nx, \\\n                'State-space models do not have the same number of states'\n            assert ss_here.inputs == Nu, \\\n                'State-space models do not have the same number of inputs'\n            assert ss_here.outputs == Ny, \\\n                'State-space models do not have the same number of outputs'\n            assert ss_here.dt == dt, \\\n                'State-space models do not have same timestep'\n\n    def __call__(self, wv):\n        \"\"\"\n        Evaluate interpolated model using weights wv.\n        \"\"\"\n\n        assert self.Projected, ('You must project the state-space models over' +\n                                ' a common basis before interpolating')\n\n        Aint = np.zeros_like(self.AA[0])\n        Bint = np.zeros_like(self.BB[0])\n        Cint = np.zeros_like(self.CC[0])\n        Dint = np.zeros_like(self.DD[0])\n\n        for ii in range(len(self.AA)):\n            Aint += wv[ii] * self.AA[ii]\n            Bint += wv[ii] * self.BB[ii]\n            Cint += wv[ii] * self.CC[ii]\n            Dint += wv[ii] * self.DD[ii]\n\n        return libss.StateSpace(Aint, Bint, Cint, Dint, self.SS[0].dt)\n\n    def project(self):\n        \"\"\"\n        Project the state-space models onto the generalised coordinates of \n        state-space model IImap\n        \"\"\"\n\n        self.AA = []\n        self.BB = []\n        self.CC = []\n\n        self.QQ = []\n        self.QQinv = []\n\n        if self.method_proj == 'amsallem':\n            warnings.warn('Method untested!')\n\n            for ii in range(len(self.SS)):\n                U, sv, Z = scalg.svd(np.dot(self.VV[ii].T, self.Vref),\n                                     full_matrices=False, overwrite_a=False,\n                                     lapack_driver='gesdd')\n                Q = np.dot(U, Z.T)\n                U, sv, Z = scalg.svd(np.dot(self.WWT[ii], self.WTref),\n                                     full_matrices=False, overwrite_a=False,\n                                     lapack_driver='gesdd')\n                Qinv = np.dot(U, Z.T).T\n                self.QQ.append(Q)\n                self.QQinv.append(Qinv)\n\n        elif self.method_proj == 'panzer':\n            warnings.warn('Method untested!')\n\n            # generate basis\n            U, sv = scalg.svd(np.concatenate(self.VV, axis=1),\n                              full_matrices=False, overwrite_a=False,\n                              lapack_driver='gesdd')[:2]\n            # chop U\n            U = U[:, :self.SS[0].states]\n            for ii in range(len(self.SS)):\n                Qinv = np.linalg.inv(np.dot(self.WWT[ii], U))\n                Q = np.linalg.inv(np.dot(self.VV[ii].T, U))\n                self.QQ.append(Q)\n                self.QQinv.append(Qinv)\n\n        elif self.method_proj == 'leastsq':\n\n            for ii in range(len(self.SS)):\n                Q, _, _, _ = scalg.lstsq(self.VV[ii], self.Vref)\n                print('det(Q): %.3e\\tcond(Q): %.3e' \\\n                      % (np.linalg.det(Q), np.linalg.cond(Q)))\n                # if cond(Q) is small...\n                # Qinv = np.linalg.inv(Q)\n                P, _, _, _ = scalg.lstsq(self.WWT[ii].T, self.WTref.T)\n                self.QQ.append(Q)\n                self.QQinv.append(P.T)\n\n        elif self.method_proj == 'strongMAC':\n            \"\"\"\n            Strong MAC enforcements as per Ref.[4]\n            \"\"\"\n\n            VTVref = np.dot(self.Vref.T, self.Vref)\n            for ii in range(len(self.SS)):\n                Q = np.linalg.solve(np.dot(self.Vref.T, self.VV[ii]), VTVref)\n                Qinv = np.linalg.inv(Q)\n                print('det(Q): %.3e\\tcond(Q): %.3e' \\\n                      % (np.linalg.det(Q), np.linalg.cond(Q)))\n                self.QQ.append(Q)\n                self.QQinv.append(Qinv)\n\n        elif self.method_proj == 'strongMAC_BT':\n            \"\"\"\n            This is equivalent to Mahony 2004, Eq. 7, for the case of basis\n            obtained by balancing. In general, it will fail if VV[ii] and Vref\n            do not describe the same subspace\n            \"\"\"\n\n            for ii in range(len(self.SS)):\n                Q = np.linalg.inv(np.dot(self.WTref, self.VV[ii]))\n                Qinv = np.dot(self.WTref, self.VV[ii])\n                print('det(Q): %.3e\\tcond(Q): %.3e' \\\n                      % (np.linalg.det(Q), np.linalg.cond(Q)))\n                self.QQ.append(Q)\n                self.QQinv.append(Qinv)\n\n        elif self.method_proj == 'maraniello_BT':\n            \"\"\"\n            Projection over ii. This is a sort of weak enforcement\n            \"\"\"\n\n            for ii in range(len(self.SS)):\n                Q = np.dot(self.WWT[ii], self.Vref)\n                Qinv = np.dot(self.WTref, self.VV[ii])\n                print('det(Q): %.3e\\tcond(Q): %.3e' \\\n                      % (np.linalg.det(Q), np.linalg.cond(Q)))\n                self.QQ.append(Q)\n                self.QQinv.append(Qinv)\n\n\n        elif self.method_proj == 'weakMAC_right_orth':\n            \"\"\"\n            This is like Amsallem, but only for state-space models with right \n            orthogonal basis \n            \"\"\"\n\n            for ii in range(len(self.SS)):\n                Q, sc = scalg.orthogonal_procrustes(self.VV[ii], self.Vref)\n                Qinv = Q.T\n                print('det(Q): %.3e\\tcond(Q): %.3e' \\\n                      % (np.linalg.det(Q), np.linalg.cond(Q)))\n                self.QQ.append(Q)\n                self.QQinv.append(Qinv)\n\n        elif self.method_proj == 'weakMAC':\n            \"\"\"\n            WeakMAC enforcement on the right hand side basis, V\n            \"\"\"\n\n            # svd of reference\n            Uref, svref, Zhref = scalg.svd(self.Vref, full_matrices=False)\n\n            for ii in range(len(self.SS)):\n                # svd of basis\n                Uhere, svhere, Zhhere = scalg.svd(self.VV[ii], full_matrices=False)\n\n                R, sc = scalg.orthogonal_procrustes(Uhere, Uref)\n                Q = np.dot(np.dot(Zhhere.T, np.diag(svhere ** (-1))), R)\n                Qinv = np.dot(R.T, np.dot(np.diag(svhere), Zhhere))\n                print('det(Q): %.3e\\tcond(Q): %.3e' \\\n                      % (np.linalg.det(Q), np.linalg.cond(Q)))\n                self.QQ.append(Q)\n                self.QQinv.append(Qinv)\n\n        else:\n            raise NameError('Projection method %s not implemented!' % self.method_proj)\n\n        ### Project\n        for ii in range(len(self.SS)):\n            self.AA.append(np.dot(self.QQinv[ii], np.dot(self.SS[ii].A, self.QQ[ii])))\n            self.BB.append(np.dot(self.QQinv[ii], self.SS[ii].B))\n            self.CC.append(np.dot(self.SS[ii].C, self.QQ[ii]))\n\n        self.Projected = True\n\n\n# ------------------------------------------------------------------------------\n\n\nif __name__ == '__main__':\n    import unittest\n\n\n    class Test_librom_inter(unittest.TestCase):\n        \"\"\" Test methods for DLTI ROM interpolation \"\"\"\n\n        def setUp(self):\n            # allocate some state-space model (dense and sparse)\n            dt = 0.3\n            Ny, Nx, Nu = 4, 3, 2\n            A = np.random.rand(Nx, Nx)\n            B = np.random.rand(Nx, Nu)\n            C = np.random.rand(Ny, Nx)\n            D = np.random.rand(Ny, Nu)\n            self.SS = libss.StateSpace(A, B, C, D, dt=dt)\n\n# class Interp1d():\n#     \"\"\"\n#     State-space 1D interpolation class.\n\n#     This class allows interpolating from a list of state-space models, SS, \n#     defined over the 1D parameter space zv. \n\n#     State-space models are required to have the same number of inputs and outputs \n#     and need to have the same number of states.\n\n#     For state-space interpolation, state-space models also need to be defined\n#     over the same set of generalised coordinates. If this is not the case, the\n#     projection matrices W and T, such that\n\n#         A_proj = W^T A V\n\n#     also need to be provided. This will allow projecting the state-space models\n#     onto a common set of generalised coordinates before interpoling.\n\n#     Inputs:\n#     - method_interp: interpolation method as per scipy.interpolate.interp1d class\n\n#     - method_proj: method for projection of state-space models over common\n#     coordinates. Available:\n#         - panzer: Panzer, J. Mohring, R. Eid, and B. Lohmann, Parametric model \n#         order reduction by matrix interpolation, at–Automatisierungstechnik, 58 \n#         (2010), pp. 475–484.\n#         - amsallem: D. Amsallem and C. Farhat, An online method for interpolating \n#         linear parametric reduced-order models, SIAM J. Sci. Comput., 33 (2011), \n#         pp. 2169–2198.\n#     Note that 'panzel' and 'amsallem' only apply to orthogonal basis WT,V.\n\n\n#     - Map: map A matrices over Riemannian manifold \n\n#     - IImap=if given, maps A matrices over manifold derived around A matrix \n#     of ii-th state-space in SSlist. \n#     \"\"\"\n\n\n#     def __init__(self, zv, SS, VV=None, WW=None, method_interp='cubic', \n#                  method_proj='panzer', Map=True, IImap=None):\n\n#         assert IImap is not None, 'Option IImap=None not developed yet'\n\n#         self.SS=SS\n#         self.zv=zv\n#         self.VV=VV\n#         self.WW=WW\n#         self.method_interp=method_interp\n#         self.method_proj=method_proj\n#         self.Map=Map\n#         self.IImap=IImap\n\n#         ### check state-space models\n#         Nx,Nu,Ny = SS[0].states, SS[0].inputs, SS[0].outputs\n#         for ss_here in SS:\n#             assert ss_here.states == Nx,\\\n#                       'State-space models do not have the same number of states'\n#             assert ss_here.inputs == Nu,\\\n#                       'State-space models do not have the same number of inputs'\n#             assert ss_here.outputs == Ny,\\\n#                       'State-space models do not have the same number of outputs'\n\n#         self.debug=False    # debug mode flag\n\n\n#     def __call__(self, zint):\n#         \"\"\"\n#         Evaluate at interpolation point zint. Returns a list of classes StateSpace\n#         \"\"\"\n\n#         Nint=len(zint)\n\n#         # interpolate A matrices, \n#         if self.Map is True:\n#             IImap=self.IImap\n#             if IImap is not None:\n#                 # get inverse,\n#                 AIIinv=np.linalg.inv(self.SS[IImap].A)\n#                 # map,\n#                 TT=[]\n#                 for ii in range( len(self.zv) ):\n#                     TT.append(scalg.logm( np.dot(self.SS[ii].A,AIIinv) ))\n#                 # interpolate\n#                 TTint=self._interp_mats(TT, zint)\n#                 # and map back\n\n#                 Aint=np.zeros( (Nint,)+AIIinv.shape )\n#                 for ii in range(Nint):\n#                     Aint[ii,:,:]= np.dot( scalg.expm(TTint[ii,:,:]), self.SS[IImap].A)\n\n#             else:\n#                 # get index of closest A for each element in zint and define mapping\n#                 pass\n\n#         else:\n#             Aint=self._interp_mats( \n#                         [getattr(ss_here,'A') for ss_here in self.SS], zint)\n\n#         # and B, C, D...\n#         Bint=self._interp_mats( \n#                         [getattr(ss_here,'B') for ss_here in self.SS], zint)\n#         Cint=self._interp_mats( \n#                         [getattr(ss_here,'C') for ss_here in self.SS], zint)        \n#         Dint=self._interp_mats( \n#                         [getattr(ss_here,'D') for ss_here in self.SS], zint)\n\n#         # and pack everything\n#         SSint=[]\n#         for ii in range(Nint):\n#             SSint.append( StateSpace( Aint[ii,:,:], Bint[ii,:,:],\n#                               Cint[ii,:,:], Dint[ii,:,:], dt=self.SS[0].dt))\n\n#         return SSint\n\n\n#     def _interp_mats(self,Mats,zint):\n#         \"\"\"\n#         Interpolate a list of equal-size arrays, Mats, defined over zv at the \n#         points zint. The Mats are assumed to be defined onto the same set of\n#         generalised coordinates.\n#         \"\"\"\n\n#         # define interpolator class\n#         # try:\n#         IntA=scint.interp1d(self.zv,Mats,kind=self.method_interp,\n#                                            copy=False,assume_sorted=True,axis=0)    \n\n#         return IntA(zint)\n\n\n#     def project(self):\n#         \"\"\"\n#         Project the state-space models onto the generalised coordinates of \n#         state-space model IImap\n#         \"\"\"\n\n\n#         if self.method_proj=='amsallem':\n\n#             # get reference basis\n#             Vref=self.VV[self.IImap]\n#             Wref=self.WW[self.IImap]\n\n#             for ii in range(len(self.SS)):\n\n#                 if ii == self.IImap:\n#                     continue \n\n#                 # get rotations\n#                 U,sv,Z = scalg.svd( np.dot(self.VV[ii].T, Vref) ,\n#                                     full_matrices=False,overwrite_a=False,\n#                                     lapack_driver='gesdd')\n#                 RotV = np.dot(U,Z.T)\n\n#                 U,sv,Z = scalg.svd( np.dot(self.WW[ii].T, Wref) ,\n#                                     full_matrices=False,overwrite_a=False,\n#                                     lapack_driver='gesdd')\n#                 RotW = np.dot(U,Z.T)\n\n\n#                 # project state-space\n#                 self.SS[ii].project(RotW.T,RotV)\n\n\n#         elif self.method_proj=='panzer':\n\n#             # generate basis\n#             U,sv = scalg.svd( np.concatenate(self.VV,axis=1),\n#                               full_matrices=False,overwrite_a=False,\n#                               lapack_driver='gesdd')[:2]\n#             # chop U\n#             U=U[:,:self.SS[0].states]#*sv[:self.SS[0].states]\n#             print('Panzer projection: neglecting singular values below %.2e (max: %.2e)'\\\n#              %(sv[self.SS[0].states],sv[0]) )\n\n\n#             for ii in range(len(self.SS)):\n\n#                 # get projection matrices\n#                 M = np.linalg.inv( np.dot( self.WW[ii].T, U) )\n#                 N = np.linalg.inv( np.dot( self.VV[ii].T, U) )\n\n#                 # project\n#                 self.SS[ii].project(M,N)\n\n#         else:\n#             raise NameError('Projection method %s not implemented!' %self.method_proj)\n"
  },
  {
    "path": "sharpy/sharpy_main.py",
    "content": "\"\"\"sharpy_main: Where it all starts\n\n\"\"\"\nimport warnings\nimport sys\nimport dill as pickle\nfrom sharpy.utils import cout_utils as cout\nfrom .version import __version__\n\n\ndef main(args=None, sharpy_input_dict=None):\n    \"\"\"\n    Main ``SHARPy`` routine\n\n    This is the main ``SHARPy`` routine.\n    It starts the solution process by reading the settings that are\n    included in the ``.sharpy`` file that is parsed\n    as an argument, or an equivalent dictionary given as ``sharpy_input_dict``.\n    It reads the solvers specific settings and runs them in order\n\n    Args:\n        args (str): ``.sharpy`` file with the problem information and settings\n        sharpy_input_dict (dict): ``dict`` with the same contents as the\n            ``solver.txt`` file would have.\n\n    Returns:\n        sharpy.presharpy.presharpy.PreSharpy: object containing the simulation results.\n\n    \"\"\"\n    import time\n    import argparse\n\n    import sharpy.utils.input_arg as input_arg\n    import sharpy.utils.solver_interface as solver_interface\n    from sharpy.presharpy.presharpy import PreSharpy\n    from sharpy.utils.cout_utils import start_writer, finish_writer\n    import logging\n    import os\n\n    import h5py\n    import sharpy.utils.h5utils as h5utils\n\n    # Loading solvers and postprocessors\n    import sharpy.solvers\n    import sharpy.postproc\n    import sharpy.generators\n    import sharpy.controllers\n    # ------------\n\n    try:\n        # output writer\n        start_writer()\n        # timing\n        t = time.process_time()\n        t0_wall = time.perf_counter()\n\n        if sharpy_input_dict is None:\n            parser = argparse.ArgumentParser(prog='SHARPy', description=\n            \"\"\"This is the executable for Simulation of High Aspect Ratio Planes.\\n\n            Imperial College London 2024\"\"\")\n            parser.add_argument('input_filename', help='path to the *.sharpy input file', type=str, default='')\n            parser.add_argument('-r', '--restart', help='restart the solution with a given snapshot', type=str,\n                                default=None)\n            parser.add_argument('-d', '--docs', help='generates the solver documentation in the specified location. '\n                                                     'Code does not execute if running this flag', action='store_true')\n            parser.add_argument('-v', '--version', action='version', \n                version='Running %(prog)s version {version}'.format(version=__version__))\n            if args is not None:\n                args = parser.parse_args(args[1:])\n            else:\n                args = parser.parse_args()\n\n        if args.docs:\n            import subprocess\n            import sharpy.utils.docutils as docutils\n            import sharpy.utils.sharpydir as sharpydir\n            docutils.generate_documentation()\n\n            # run make\n            cout.cout_wrap('Running make html in sharpy/docs')\n            subprocess.Popen(['make', 'html'],\n                             stdout=None,\n                             cwd=sharpydir.SharpyDir + '/docs')\n\n            return 0\n\n        if args.input_filename == '':\n            parser.error('input_filename is a required argument of SHARPy.')\n        settings = input_arg.read_settings(args)\n        missing_solvers = False\n        if args.restart is None:\n            # run preSHARPy\n            data = PreSharpy(settings)\n            solvers = dict()\n            restart = False\n        else:\n            try:\n                with open(args.restart, 'rb') as restart_file:\n                    data = pickle.load(restart_file)\n                    try:\n                        solvers = pickle.load(restart_file)\n                    except EOFError:\n                        # For backwards compatibility\n                        missing_solvers = True\n                        solvers = dict()\n                        cout.cout_wrap('Solvers not found in Pickle file. Using the settings in *.sharpy file.')\n                    if \"UpdatePickle\" in solvers.keys():\n                        # For backwards compatibility\n                        missing_solvers = True\n                        solvers = dict()\n            except FileNotFoundError:\n                raise FileNotFoundError('The file specified for the snapshot \\\n                    restart (-r) does not exist. Please check.')\n\n            restart = True\n            # update the settings\n            data.update_settings(settings)\n\n            # Read again the dyn.h5 file\n            data.structure.dynamic_input = []\n            dyn_file_name = data.case_route + '/' + data.case_name + '.dyn.h5'\n            if os.path.isfile(dyn_file_name):\n                fid = h5py.File(dyn_file_name, 'r')\n                data.structure.dyn_dict = h5utils.load_h5_in_dict(fid)\n            # for it in range(self.num_steps):\n            #     data.structure.dynamic_input.append(dict())\n\n            # Restart the solvers\n            old_solvers_list = list(solvers.keys())\n            for old_solver_name in old_solvers_list:\n                if old_solver_name not in settings['SHARPy']['flow']:\n                    del solvers[old_solver_name] \n\n        # Loop for the solvers specified in *.sharpy['SHARPy']['flow']\n        for solver_name in settings['SHARPy']['flow']:\n            if (args.restart is None) or (solver_name not in solvers.keys()) or (missing_solvers):\n                solvers[solver_name] = solver_interface.initialise_solver(solver_name)\n            if missing_solvers:\n                solvers[solver_name].initialise(data, restart=False)\n            else:\n                solvers[solver_name].initialise(data, restart=restart)\n            data = solvers[solver_name].run(solvers=solvers)\n            solvers[solver_name].teardown()\n\n        cpu_time = time.process_time() - t\n        wall_time = time.perf_counter() - t0_wall\n        cout.cout_wrap('FINISHED - Elapsed time = %f6 seconds' % wall_time, 2)\n        cout.cout_wrap('FINISHED - CPU process time = %f6 seconds' % cpu_time, 2)\n        finish_writer()\n\n    except Exception as e:\n        try:\n            logdir = settings['SHARPy']['log_folder'] + '/' + settings['SHARPy']['case']\n        except KeyError:\n            logdir = './'\n        except NameError:\n            logdir = './'\n        logdir = os.path.abspath(logdir)\n        cout.cout_wrap(('Exception raised, writing error log in %s/error.log' % logdir), 4)\n        logging.basicConfig(filename='%s/error.log' % logdir,\n                            filemode='w',\n                            format='%(asctime)s-%(levelname)s-%(message)s',\n                            datefmt='%d-%b-%y %H:%M:%S',\n                            level=logging.INFO)\n        logging.info('SHARPy Error Log')\n        logging.error(\"Exception occurred\", exc_info=True)\n        raise e\n\n    return data\n\n\n\ndef sharpy_run():\n    \"\"\"\n    This is a wrapper function for the console command \"sharpy\"\n    \"\"\"\n    data = None\n    with warnings.catch_warnings():\n        warnings.simplefilter('ignore')\n        data = main(sys.argv)\n"
  },
  {
    "path": "sharpy/solvers/__init__.py",
    "content": "import importlib\nimport os\n\nimport sharpy.utils.solver_interface as solver_interface\nimport sharpy.utils.sharpydir as sharpydir\n\nfiles = solver_interface.solver_list_from_path(os.path.dirname(__file__))\n\nimport_path = os.path.realpath(os.path.dirname(__file__))\nimport_path = import_path.replace(sharpydir.SharpyDir, \"\")\nif import_path[0] == \"/\": import_path = import_path[1:]\nimport_path = import_path.replace(\"/\", \".\")\n\nfor file in sorted(files):\n    solver_interface.solvers[file] = importlib.import_module(import_path + \".\" + file)\n"
  },
  {
    "path": "sharpy/solvers/_basestructural.py",
    "content": "from sharpy.utils.solver_interface import solver, BaseSolver\nimport sharpy.utils.cout_utils as cout\n\n@solver\nclass _BaseStructural(BaseSolver):\n    \"\"\"\n    Structural solver used for the dynamic simulation of free-flying structures.\n\n    This solver provides an interface to the structural library (``xbeam``) and updates the structural parameters\n    for every time step of the simulation.\n\n    This solver is called as part of a standalone structural simulation.\n\n    \"\"\"\n    solver_id = '_BaseStructural'\n    solver_classification = 'structural'\n\n    settings_types = dict()\n    settings_default = dict()\n    settings_description = dict()\n\n    settings_types['print_info'] = 'bool'\n    settings_default['print_info'] = True\n    settings_description['print_info'] = 'Print output to screen'\n\n    settings_types['max_iterations'] = 'int'\n    settings_default['max_iterations'] = 100\n    settings_description['max_iterations'] = 'Sets maximum number of iterations'\n\n    settings_types['num_load_steps'] = 'int'\n    settings_default['num_load_steps'] = 1\n\n    settings_types['delta_curved'] = 'float'\n    settings_default['delta_curved'] = 1e-2\n\n    settings_types['min_delta'] = 'float'\n    settings_default['min_delta'] = 1e-5\n    settings_description['min_delta'] = 'Structural solver relative tolerance'\n\n    settings_types['abs_threshold'] = 'float'\n    settings_default['abs_threshold'] = 1e-13\n    settings_description['abs_threshold'] = 'Structural solver absolute tolerance'\n\n    settings_types['newmark_damp'] = 'float'\n    settings_default['newmark_damp'] = 1e-4\n    settings_description['newmark_damp'] = 'Sets the Newmark damping coefficient'\n\n    settings_types['gravity_on'] = 'bool'\n    settings_default['gravity_on'] = False\n    settings_description['gravity_on'] = 'Flag to include gravitational forces'\n\n    settings_types['gravity'] = 'float'\n    settings_default['gravity'] = 9.81\n    settings_description['gravity'] = 'Gravitational acceleration'\n\n    settings_types['gravity_dir'] = 'list(float)'\n    settings_default['gravity_dir'] = [0., 0., 1.]\n    settings_description['gravity_dir'] = 'Direction in G where gravity applies'\n\n    settings_types['relaxation_factor'] = 'float'\n    settings_default['relaxation_factor'] = 0.3\n\n    settings_types['dt'] = 'float'\n    settings_default['dt'] = 0.01\n    settings_description['dt'] = 'Time step increment'\n\n    settings_types['num_steps'] = 'int'\n    settings_default['num_steps'] = 500\n\n    def initialise(self, data, restart=False):\n        pass\n\n    def run(self, **kwargs):\n        pass\n"
  },
  {
    "path": "sharpy/solvers/aerogridloader.py",
    "content": "import h5py as h5\nimport numpy as np\n\nfrom sharpy.utils.solver_interface import solver, BaseSolver\nimport sharpy.aero.models.aerogrid as aerogrid\nimport sharpy.utils.settings as settings_utils\nimport sharpy.utils.h5utils as h5utils\nimport sharpy.utils.generator_interface as gen_interface\nfrom sharpy.solvers.gridloader import GridLoader\n\n\n@solver\nclass AerogridLoader(GridLoader):\n    \"\"\"\n    ``AerogridLoader`` class, inherited from ``GridLoader``\n\n    Generates aerodynamic grid based on the input data\n\n    The initial wake shape is now defined in SHARPy (instead of UVLM) through a wake shape generator\n    ``wake_shape_generator`` and the required inputs ``wake_shape_generator_input``. The supported wake generators are\n    :class:`sharpy.generators.straightwake.StraighWake` and :class:`sharpy.generators.helicoidalwake.HelicoidalWake`.\n\n    The ``control_surface_deflection`` setting allows the user to use a time specific control surface deflection,\n    should the problem include them. This setting takes a list of strings, each for the required control\n    surface generator.\n\n    The ``control_surface_deflection_generator_settings`` setting is a list of dictionaries, one for each control\n    surface. The dictionaries specify the settings for the generator ``DynamicControlSurface``. If the relevant control\n    surface is simply static, an empty string should be parsed. See the documentation for ``DynamicControlSurface``\n    generators for accepted key-value pairs as settings.\n\n    The ``initial_align`` setting aligns the wing panel discretization with the freestream for the undeformed structure, \n    and applies this Z rotation at every timestep (panels become misaligned when the wing deforms). The ``aligned_grid`` \n    setting aligns the wing panel discretization with the flow at every time step and takes precedence.\n\n    Args:\n        data (PreSharpy): ``ProblemData`` class structure\n\n    Attributes:\n        settings (dict): Name-value pair of the settings employed by the aerodynamic solver\n        settings_types (dict): Acceptable types for the values in ``settings``\n        settings_default (dict): Name-value pair of default values for the aerodynamic settings\n        data (ProblemData): class structure\n        file_name (str): name of the ``.aero.h5`` HDF5 file\n        aero: empty attribute\n        data_dict (dict): key-value pairs of aerodynamic data\n        wake_shape_generator (class): Wake shape generator\n\n    \"\"\"\n    solver_id = 'AerogridLoader'\n    solver_classification = 'loader'\n\n    settings_types = dict()\n    settings_default = dict()\n    settings_description = dict()\n    settings_options = dict()\n\n    settings_types['unsteady'] = 'bool'\n    settings_default['unsteady'] = False\n    settings_description['unsteady'] = 'Unsteady effects'\n\n    settings_types['aligned_grid'] = 'bool'\n    settings_default['aligned_grid'] = True\n    settings_description['aligned_grid'] = 'Align grid'\n\n    settings_types['initial_align'] = 'bool'\n    settings_default['initial_align'] = True\n    settings_description['initial_align'] = \"Initially align grid\"\n\n    settings_types['freestream_dir'] = 'list(float)'\n    settings_default['freestream_dir'] = [1.0, 0.0, 0.0]\n    settings_description['freestream_dir'] = 'Free stream flow direction'\n\n    settings_types['mstar'] = ['int', 'list(int)']\n    settings_default['mstar'] = 10\n    settings_description['mstar'] = 'Number of chordwise wake panels'\n\n    settings_types['control_surface_deflection'] = 'list(str)'\n    settings_default['control_surface_deflection'] = []\n    settings_description['control_surface_deflection'] = 'List of control surface generators for each control surface'\n\n    settings_types['control_surface_deflection_generator_settings'] = 'dict'\n    settings_default['control_surface_deflection_generator_settings'] = dict()\n    settings_description['control_surface_deflection_generator_settings'] = 'List of dictionaries with the settings ' \\\n                                                                            'for each generator'\n\n    settings_types['wake_shape_generator'] = 'str'\n    settings_default['wake_shape_generator'] = 'StraightWake'\n    settings_description['wake_shape_generator'] = 'ID of the generator to define the initial wake shape'\n    settings_options['wake_shape_generator'] = ['StraightWake', 'HelicoidalWake']\n\n    settings_types['wake_shape_generator_input'] = 'dict'\n    settings_default['wake_shape_generator_input'] = dict()\n    settings_description['wake_shape_generator_input'] = 'Dictionary of inputs needed by the wake shape generator'\n\n    settings_table = settings_utils.SettingsTable()\n    __doc__ += settings_table.generate(settings_types, settings_default, settings_description,\n                                       settings_options=settings_options)\n\n    def __init__(self):\n        super().__init__\n        self.file_name = '.aero.h5'\n        self.aero = None\n        self.wake_shape_generator = None\n\n    def initialise(self, data, restart=False):\n        super().initialise(data)\n\n        wake_shape_generator_type = gen_interface.generator_from_string(\n            self.settings['wake_shape_generator'])\n        self.wake_shape_generator = wake_shape_generator_type()\n        self.wake_shape_generator.initialise(data,\n                                             self.settings['wake_shape_generator_input'],\n                                             restart=restart)\n\n    def run(self, **kwargs):\n        self.data.aero = aerogrid.Aerogrid()\n        self.data.aero.generate(self.data_dict,\n                                self.data.structure,\n                                self.settings,\n                                self.data.ts)\n        aero_tstep = self.data.aero.timestep_info[self.data.ts]\n        self.wake_shape_generator.generate({'zeta': aero_tstep.zeta,\n                                            'zeta_star': aero_tstep.zeta_star,\n                                            'gamma': aero_tstep.gamma,\n                                            'gamma_star': aero_tstep.gamma_star,\n                                            'dist_to_orig': aero_tstep.dist_to_orig})\n        # keep the call to the wake generator\n        # because it might be needed by other solvers\n        self.data.aero.wake_shape_generator = self.wake_shape_generator\n        return self.data\n"
  },
  {
    "path": "sharpy/solvers/beamloader.py",
    "content": "import h5py as h5\n\nfrom sharpy.utils.solver_interface import solver, BaseSolver\nimport sharpy.structure.models.beam as beam\nimport sharpy.utils.settings as settings_utils\nimport sharpy.utils.h5utils as h5utils\nimport os\n\n\n@solver\nclass BeamLoader(BaseSolver):\n    \"\"\"\n    ``BeamLoader`` class solver inherited from ``BaseSolver``\n\n    Loads the structural beam solver with the specified user settings.\n\n    Args:\n        data (ProblemData): class containing the problem information\n\n    Attributes:\n        settings (dict): contains the specific settings for the solver\n\n        settings_types (dict): Key  value pairs of the accepted types for the settings values\n        settings_default (dict): Dictionary containing the default solver settings, should none be provided.\n        data (ProblemData): class containing the data for the problem\n        fem_file_name (str): name of the ``.fem.h5`` HDF5 file\n        dyn_file_name (str): name of the ``.dyn.h5`` HDF5 file\n        fem_data_dict (dict): key-value pairs of FEM data\n        dyn_data_dict (dict): key-value pairs of data for dynamic problems\n        structure (None): Empty attribute\n\n    Notes:\n        For further reference on Quaternions see:\n        `https://en.wikipedia.org/wiki/Quaternion <https://en.wikipedia.org/wiki/Quaternion>`_\n\n    See Also:\n          .. py:class:: sharpy.utils.solver_interface.BaseSolver\n\n          .. py:class:: sharpy.structure.models.beam.Beam\n\n    \"\"\"\n    solver_id = 'BeamLoader'\n    solver_classification = 'loader'\n\n    settings_types = dict()\n    settings_default = dict()\n    settings_description = dict()\n\n    settings_types['unsteady'] = 'bool'\n    settings_default['unsteady'] = True\n    settings_description['unsteady'] = 'If ``True`` it will be a dynamic problem and the solver will look for the' \\\n                                       ' ``.dyn.h5`` file that contains the time varying input to the problem.'\n\n    settings_types['orientation'] = 'list(float)'\n    settings_default['orientation'] = [1., 0, 0, 0]\n    settings_description['orientation'] = 'Initial attitude of the structure given as the quaternion that parametrises the rotation from G to A frames of reference.'\n\n    settings_types['for_pos'] = 'list(float)'\n    settings_default['for_pos'] = [0., 0, 0]\n    settings_description['for_pos'] = 'Initial position of the A FoR.'\n\n    settings_table = settings_utils.SettingsTable()\n    __doc__ += settings_table.generate(settings_types, settings_default, settings_description)\n\n    def __init__(self):\n        self.data = None\n        self.settings = None\n        self.fem_file_name = ''\n        self.dyn_file_name = ''\n        # storage of file contents\n        self.fem_data_dict = dict()\n        self.dyn_data_dict = dict()\n        self.mb_data_dict = dict()\n\n        # structure storage\n        self.structure = None\n\n    def initialise(self, data, restart=False):\n        self.data = data\n        self.settings = data.settings[self.solver_id]\n\n        # init settings\n        settings_utils.to_custom_types(self.settings, self.settings_types, self.settings_default)\n\n        # read input files (fem and dyn)\n        self.read_files()\n\n    def read_files(self):\n        # open fem file\n        # first, file names\n        self.fem_file_name = self.data.case_route + '/' + self.data.case_name + '.fem.h5'\n        if self.settings['unsteady']:\n            self.dyn_file_name = self.data.case_route + '/' + self.data.case_name + '.dyn.h5'\n        # then check that the files exists\n        h5utils.check_file_exists(self.fem_file_name)\n        if self.settings['unsteady']:\n            try:\n                h5utils.check_file_exists(self.dyn_file_name)\n            except FileNotFoundError:\n                self.settings['unsteady'] = False\n        # read and store the hdf5 files\n        with h5.File(self.fem_file_name, 'r') as fem_file_handle:\n            # store files in dictionary\n            self.fem_data_dict = h5utils.load_h5_in_dict(fem_file_handle)\n            # TODO implement fem file validation\n            # self.validate_fem_file()\n        if self.settings['unsteady']:\n            with h5.File(self.dyn_file_name, 'r') as dyn_file_handle:\n                # store files in dictionary\n                self.dyn_data_dict = h5utils.load_h5_in_dict(dyn_file_handle)\n                # TODO implement dyn file validation\n                # self.validate_dyn_file()\n\n        # Multibody information\n        self.mb_file_name = self.data.case_route + '/' + self.data.case_name + '.mb.h5'\n        if os.path.isfile(self.mb_file_name):\n            # h5utils.check_file_exists(self.mb_file_name)\n            with h5.File(self.mb_file_name, 'r') as mb_file_handle:\n                self.mb_data_dict = h5utils.load_h5_in_dict(mb_file_handle)\n\n            # Need to redefine strings to remove the \"b\" at the beginning\n            for iconstraint in range(self.mb_data_dict['num_constraints']):\n                self.mb_data_dict[\"constraint_%02d\" % iconstraint]['behaviour'] = self.mb_data_dict[\"constraint_%02d\" % iconstraint]['behaviour'].decode()\n            for ibody in range(self.mb_data_dict['num_bodies']):\n                self.mb_data_dict[\"body_%02d\" % ibody]['FoR_movement'] = self.mb_data_dict[\"body_%02d\" % ibody]['FoR_movement'].decode()\n\n    def validate_fem_file(self):\n        raise NotImplementedError('validation of the fem file in beamloader is not yet implemented!')\n\n    def validate_dyn_file(self):\n        raise NotImplementedError('validation of the dyn file in beamloader is not yet implemented!')\n\n    def run(self, **kwargs):\n        self.data.structure = beam.Beam()\n        self.data.structure.ini_mb_dict = self.mb_data_dict\n        self.data.structure.generate(self.fem_data_dict, self.settings)\n        self.data.structure.dyn_dict = self.dyn_data_dict\n\n        return self.data\n"
  },
  {
    "path": "sharpy/solvers/dynamiccoupled.py",
    "content": "import ctypes as ct\nimport time\nimport copy\nimport threading\nimport logging\nimport concurrent.futures\nimport queue\n\nimport numpy as np\n\nimport sharpy.aero.utils.mapping as mapping\nimport sharpy.utils.cout_utils as cout\nimport sharpy.utils.solver_interface as solver_interface\nimport sharpy.utils.controller_interface as controller_interface\nfrom sharpy.utils.solver_interface import solver, BaseSolver\nimport sharpy.utils.settings as settings_utils\nimport sharpy.utils.algebra as algebra\nimport sharpy.utils.exceptions as exc\nimport sharpy.io.network_interface as network_interface\nimport sharpy.utils.generator_interface as gen_interface\n\n\n@solver\nclass DynamicCoupled(BaseSolver):\n    \"\"\"\n    The :class:`~sharpy.solvers.dynamiccoupled.DynamicCoupled` solver couples the aerodynamic and structural solvers\n    of choice to march forward in time the aeroelastic system's solution.\n\n    Using the :class:`~sharpy.solvers.dynamiccoupled.DynamicCoupled` solver requires that an instance of the\n    ``StaticCoupled`` solver is called in the SHARPy solution ``flow`` when defining the problem case.\n\n    Input data (from external controllers) can be received and data sent using the SHARPy network\n    interface, specified through the setting ``network_settings`` of this solver. For more detail on how to send\n    and receive data see the :class:`~sharpy.io.network_interface.NetworkLoader` documentation.\n\n    Changes to the structural properties or external forces that depend on the instantaneous situation of the system\n    can be applied through ``runtime_generators``. These runtime generators are parsed through dictionaries, with the\n    key being the name of the generator and the value the settings for such generator. The currently available\n    ``runtime_generators`` are :class:`~sharpy.generators.externalforces.ExternalForces` and\n    :class:`~sharpy.generators.modifystructure.ModifyStructure`.\n\n    \"\"\"\n    solver_id = 'DynamicCoupled'\n    solver_classification = 'Coupled'\n\n    settings_types = dict()\n    settings_default = dict()\n    settings_description = dict()\n    settings_options = dict()\n\n    settings_types['print_info'] = 'bool'\n    settings_default['print_info'] = True\n    settings_description['print_info'] = 'Write status to screen'\n\n    settings_types['structural_solver'] = 'str'\n    settings_default['structural_solver'] = None\n    settings_description['structural_solver'] = 'Structural solver to use in the coupled simulation'\n\n    settings_types['structural_solver_settings'] = 'dict'\n    settings_default['structural_solver_settings'] = None\n    settings_description['structural_solver_settings'] = 'Dictionary of settings for the structural solver'\n\n    settings_types['aero_solver'] = 'str'\n    settings_default['aero_solver'] = None\n    settings_description['aero_solver'] = 'Aerodynamic solver to use in the coupled simulation'\n\n    settings_types['aero_solver_settings'] = 'dict'\n    settings_default['aero_solver_settings'] = None\n    settings_description['aero_solver_settings'] = 'Dictionary of settings for the aerodynamic solver'\n\n    settings_types['n_time_steps'] = 'int'\n    settings_default['n_time_steps'] = None\n    settings_description['n_time_steps'] = 'Number of time steps for the simulation'\n\n    settings_types['dt'] = 'float'\n    settings_default['dt'] = None\n    settings_description['dt'] = 'Time step'\n\n    settings_types['fsi_substeps'] = 'int'\n    settings_default['fsi_substeps'] = 70\n    settings_description['fsi_substeps'] = 'Max iterations in the FSI loop'\n\n    settings_types['fsi_tolerance'] = 'float'\n    settings_default['fsi_tolerance'] = 1e-5\n    settings_description['fsi_tolerance'] = 'Convergence threshold for the FSI loop'\n\n    settings_types['structural_substeps'] = 'int'\n    settings_default['structural_substeps'] = 0 # 0 is normal coupled sim.\n    settings_description['structural_substeps'] = 'Number of extra structural time steps per aero time step. ``0`` ' \\\n                                                  'is a fully coupled simulation.'\n\n    settings_types['relaxation_factor'] = 'float'\n    settings_default['relaxation_factor'] = 0.2\n    settings_description['relaxation_factor'] = 'Relaxation parameter in the FSI iteration. ``0`` is no relaxation ' \\\n                                                'and -> ``1`` is very relaxed'\n\n    settings_types['final_relaxation_factor'] = 'float'\n    settings_default['final_relaxation_factor'] = 0.0\n    settings_description['final_relaxation_factor'] = 'Relaxation factor reached in ``relaxation_steps`` with ' \\\n                                                      '``dynamic_relaxation`` on'\n\n    settings_types['minimum_steps'] = 'int'\n    settings_default['minimum_steps'] = 3\n    settings_description['minimum_steps'] = 'Number of minimum FSI iterations before convergence'\n\n    settings_types['relaxation_steps'] = 'int'\n    settings_default['relaxation_steps'] = 100\n    settings_description['relaxation_steps'] = 'Length of the relaxation factor ramp between ``relaxation_factor`` ' \\\n                                               'and ``final_relaxation_factor`` with ``dynamic_relaxation`` on'\n\n    settings_types['dynamic_relaxation'] = 'bool'\n    settings_default['dynamic_relaxation'] = False\n    settings_description['dynamic_relaxation'] = 'Controls if relaxation factor is modified during the FSI iteration ' \\\n                                                 'process'\n\n    settings_types['postprocessors'] = 'list(str)'\n    settings_default['postprocessors'] = list()\n    settings_description['postprocessors'] = 'List of the postprocessors to run at the end of every time step'\n\n    settings_types['postprocessors_settings'] = 'dict'\n    settings_default['postprocessors_settings'] = dict()\n    settings_description['postprocessors_settings'] = 'Dictionary with the applicable settings for every ' \\\n                                                      '' \\\n                                                      '``postprocessor``. Every ``postprocessor`` needs its entry, ' \\\n                                                      'even if empty'\n\n    settings_types['controller_id'] = 'dict'\n    settings_default['controller_id'] = dict()\n    settings_description['controller_id'] = 'Dictionary of id of every controller (key) and its type (value)'\n\n    settings_types['controller_settings'] = 'dict'\n    settings_default['controller_settings'] = dict()\n    settings_description['controller_settings'] = 'Dictionary with settings (value) of every controller id (key)'\n\n    settings_types['cleanup_previous_solution'] = 'bool'\n    settings_default['cleanup_previous_solution'] = False\n    settings_description['cleanup_previous_solution'] = 'Controls if previous ``timestep_info`` arrays are ' \\\n                                                        'reset before running the solver'\n\n    settings_types['include_unsteady_force_contribution'] = 'bool'\n    settings_default['include_unsteady_force_contribution'] = False\n    settings_description['include_unsteady_force_contribution'] = 'If on, added mass contribution is added to the ' \\\n                                                                  'forces. This depends on the time derivative of ' \\\n                                                                  'the bound circulation. Check ``filter_gamma_dot`` ' \\\n                                                                  'in the aero solver'\n\n    settings_types['steps_without_unsteady_force'] = 'int'\n    settings_default['steps_without_unsteady_force'] = 0\n    settings_description['steps_without_unsteady_force'] = 'Number of initial timesteps that don\\'t include unsteady ' \\\n                                                           'forces contributions. This avoids oscillations due to ' \\\n                                                           'no perfectly trimmed initial conditions'\n\n    settings_types['pseudosteps_ramp_unsteady_force'] = 'int'\n    settings_default['pseudosteps_ramp_unsteady_force'] = 0\n    settings_description['pseudosteps_ramp_unsteady_force'] = 'Length of the ramp with which unsteady force ' \\\n                                                              'contribution is introduced every time step during ' \\\n                                                              'the FSI iteration process'\n\n    settings_types['correct_forces_method'] = 'str'\n    settings_default['correct_forces_method'] = ''\n    settings_description['correct_forces_method'] = 'Function used to correct aerodynamic forces. ' \\\n                                                    'See :py:mod:`sharpy.generators.polaraeroforces`'\n    settings_options['correct_forces_method'] = ['EfficiencyCorrection', 'PolarCorrection']\n\n    settings_types['correct_forces_settings'] = 'dict'\n    settings_default['correct_forces_settings'] = {}\n    settings_description['correct_forces_settings'] = 'Settings for corrected forces evaluation'\n\n    settings_types['network_settings'] = 'dict'\n    settings_default['network_settings'] = dict()\n    settings_description['network_settings'] = 'Network settings. See ' \\\n                                               ':class:`~sharpy.io.network_interface.NetworkLoader` for supported ' \\\n                                               'entries'\n\n    settings_types['runtime_generators'] = 'dict'\n    settings_default['runtime_generators'] = dict()\n    settings_description['runtime_generators'] = 'The dictionary keys are the runtime generators to be used. ' \\\n                                                 'The dictionary values are dictionaries with the settings ' \\\n                                                 'needed by each generator.'\n\n    settings_types['nonlifting_body_interactions'] = 'bool'\n    settings_default['nonlifting_body_interactions'] = False\n    settings_description['nonlifting_body_interactions'] = 'Effect of Nonlifting Bodies on Lifting bodies are considered'\n    \n    settings_table = settings_utils.SettingsTable()\n    __doc__ += settings_table.generate(settings_types, settings_default, settings_description, settings_options)\n\n    def __init__(self):\n        self.data = None\n        self.settings = None\n        self.structural_solver = None\n        self.aero_solver = None\n        self.print_info = False\n\n        self.res = 0.0\n        self.res_dqdt = 0.0\n        self.res_dqddt = 0.0\n\n        self.previous_force = None\n\n        self.dt = 0.\n        self.substep_dt = 0.\n        self.initial_n_substeps = None\n\n        self.predictor = False\n        self.residual_table = None\n        self.postprocessors = dict()\n        self.with_postprocessors = False\n        self.controllers = None\n\n        self.time_aero = 0.\n        self.time_struc = 0.\n\n        self.correct_forces = False\n        self.correct_forces_generator = None\n\n        self.logger = logging.getLogger(__name__)  # used with the network interface\n\n        # variables to send and receive\n        self.network_loader = None\n        self.set_of_variables = None\n\n        self.runtime_generators = dict()\n        self.with_runtime_generators = False\n\n    def get_g(self):\n        \"\"\"\n        Getter for ``g``, the gravity value\n        \"\"\"\n        return self.structural_solver.settings['gravity']\n\n    def set_g(self, new_g):\n        \"\"\"\n        Setter for ``g``, the gravity value\n        \"\"\"\n        self.structural_solver.settings['gravity'] = ct.c_double(new_g)\n\n    def get_rho(self):\n        \"\"\"\n        Getter for ``rho``, the density value\n        \"\"\"\n        return self.aero_solver.settings['rho']\n\n    def set_rho(self, new_rho):\n        \"\"\"\n        Setter for ``rho``, the density value\n        \"\"\"\n        self.aero_solver.settings['rho'] = ct.c_double(new_rho)\n\n    def initialise(self, data, custom_settings=None, restart=False):\n        \"\"\"\n        Controls the initialisation process of the solver, including processing\n        the settings and initialising the aero and structural solvers, postprocessors\n        and controllers.\n        \"\"\"\n        self.data = data\n        if custom_settings is None:\n            self.settings = data.settings[self.solver_id]\n        else:\n            self.settings = custom_settings\n        settings_utils.to_custom_types(self.settings,\n                           self.settings_types,\n                           self.settings_default,\n                           options=self.settings_options)\n\n        self.original_settings = copy.deepcopy(self.settings)\n\n        self.dt = self.settings['dt']\n        self.substep_dt = (\n            self.dt/(self.settings['structural_substeps'] + 1))\n        self.initial_n_substeps = self.settings['structural_substeps']\n\n        self.print_info = self.settings['print_info']\n        if self.settings['cleanup_previous_solution']:\n            # if there's data in timestep_info[>0], copy the last one to\n            # timestep_info[0] and remove the rest\n            self.cleanup_timestep_info()\n\n        if not restart:\n            self.structural_solver = solver_interface.initialise_solver(\n                self.settings['structural_solver'])\n            self.aero_solver = solver_interface.initialise_solver(\n                self.settings['aero_solver'])\n        self.structural_solver.initialise(\n            self.data, self.settings['structural_solver_settings'],\n            restart=restart)\n        self.aero_solver.initialise(self.structural_solver.data,\n                                    self.settings['aero_solver_settings'],\n                                    restart=restart)\n        self.data = self.aero_solver.data\n\n        # initialise postprocessors\n        if self.settings['postprocessors']:\n            self.with_postprocessors = True\n            # Remove previous postprocessors not required on restart\n            old_list = list(self.postprocessors.keys())\n            for old_list_name in old_list:\n                if old_list_name not in self.settings['postprocessors']:\n                    del self.postprocessors[old_list_name] \n        for postproc in self.settings['postprocessors']:\n            if not postproc in self.postprocessors.keys():\n                self.postprocessors[postproc] = solver_interface.initialise_solver(\n                    postproc)\n            self.postprocessors[postproc].initialise(\n                self.data, self.settings['postprocessors_settings'][postproc], caller=self,\n                restart=restart)\n\n        # initialise controllers\n        self.with_controllers = False\n        if self.settings['controller_id']:\n            self.with_controllers = True\n            # Remove previous controllers not required on restart\n            if self.controllers is not None:\n                old_list = list(self.controllers.keys())\n                for old_list_name in old_list:\n                    if old_list_name not in self.settings['controller_id']:\n                        del self.controllers[old_list_name] \n        for controller_id, controller_type in self.settings['controller_id'].items():\n            if self.controllers is not None:\n                if not controller_id in self.controllers.keys():\n                    self.controllers[controller_id] = (\n                        controller_interface.initialise_controller(controller_type))\n            else:\n                self.controllers = dict()\n                self.controllers[controller_id] = (\n                       controller_interface.initialise_controller(controller_type))\n            self.controllers[controller_id].initialise(self.data,\n                    self.settings['controller_settings'][controller_id],\n                    controller_id, restart=restart)\n        \n        # print information header\n        if self.print_info:\n            self.residual_table = cout.TablePrinter(8, 12, ['g', 'f', 'g', 'f', 'f', 'f', 'e', 'e'])\n            self.residual_table.field_length[0] = 5\n            self.residual_table.field_length[1] = 6\n            self.residual_table.field_length[2] = 4\n            self.residual_table.print_header(['ts', 't', 'iter', 'struc ratio', 'iter time', 'residual vel',\n                                              'FoR_vel(x)', 'FoR_vel(z)'])\n\n        # Define the function to correct aerodynamic forces\n        if self.settings['correct_forces_method'] != '':\n            self.correct_forces = True\n            self.correct_forces_generator = gen_interface.generator_from_string(self.settings['correct_forces_method'])()\n            self.correct_forces_generator.initialise(in_dict=self.settings['correct_forces_settings'],\n                                                     aero=self.data.aero,\n                                                     structure=self.data.structure,\n                                                     rho=self.settings['aero_solver_settings']['rho'],\n                                                     vortex_radius=self.settings['aero_solver_settings']['vortex_radius'],\n                                                     output_folder = self.data.output_folder)\n\n        # check for empty dictionary\n        if self.settings['network_settings']:\n            self.network_loader = network_interface.NetworkLoader()\n            self.network_loader.initialise(in_settings=self.settings['network_settings'])\n\n        # initialise runtime generators\n        if self.settings['runtime_generators']:\n            self.with_runtime_generators = True\n            # Remove previous runtime generators not required on restart\n            old_list = list(self.runtime_generators.keys())\n            for old_list_name in old_list:\n                if old_list_name not in self.settings['runtime_generators']:\n                    del self.runtime_generators[old_list_name] \n        for rg_id, param in self.settings['runtime_generators'].items():\n            if not rg_id in self.runtime_generators.keys():\n                gen = gen_interface.generator_from_string(rg_id)\n                self.runtime_generators[rg_id] = gen()\n            self.runtime_generators[rg_id].initialise(param, data=self.data, restart=restart)\n\n    def cleanup_timestep_info(self):\n        if max(len(self.data.aero.timestep_info), len(self.data.structure.timestep_info)) > 1:\n            self.remove_old_timestep_info(self.data.structure.timestep_info)\n            self.remove_old_timestep_info(self.data.aero.timestep_info)            \n            if self.settings['nonlifting_body_interactions']:\n                self.remove_old_timestep_info(self.data.nonlifting_body.timestep_info)\n\n        self.data.ts = 0\n\n    def remove_old_timestep_info(self, tstep_info):\n        # copy last info to first\n        tstep_info[0] = tstep_info[-1].copy()\n        # delete all the rest\n        while len(tstep_info) - 1:\n            del tstep_info[-1]\n\n    def process_controller_output(self, controlled_state):\n        \"\"\"\n        This function modified the solver properties and parameters as\n        requested from the controller.\n\n        This keeps the main loop much cleaner, while allowing for flexibility\n\n        Please, if you add options in here, always code the possibility of\n        that specific option not being there without the code complaining to\n        the user.\n\n        If it possible, use the same Key for the new setting as for the\n        setting in the solver. For example, if you want to modify the\n        `structural_substeps` variable in settings, use that Key in the\n        `info` dictionary.\n\n        As a convention: a value of None returns the value to the initial\n        one specified in settings, while the key not being in the dict\n        is ignored, so if any change was made before, it will stay there.\n        \"\"\"\n        try:\n            info = controlled_state['info']\n        except KeyError:\n            return controlled_state['structural'], controlled_state['aero']\n\n        # general copy-if-exists, restore if == None\n        for info_k, info_v in info.items():\n            if info_k in self.settings:\n                if info_v is not None:\n                    self.settings[info_k] = info_v\n                else:\n                    self.settings[info_k] = self.original_settings[info_k]\n\n        # specifics of every option\n        for info_k, info_v in info.items():\n            if info_k in self.settings:\n\n                if info_k == 'structural_substeps':\n                    if info_v is not None:\n                        self.substep_dt = (\n                            self.settings['dt']/(\n                                self.settings['structural_substeps'] + 1))\n\n                elif info_k == 'structural_solver':\n                    if info_v is not None:\n                        self.structural_solver = solver_interface.initialise_solver(\n                            info['structural_solver'])\n                        self.structural_solver.initialise(\n                            self.data, self.settings['structural_solver_settings'])\n\n            elif info_k == 'rotor_vel':\n                for lc in self.structural_solver.lc_list:\n                    if lc._lc_id == 'hinge_node_FoR_pitch':\n                        lc.set_rotor_vel(info_v)\n\n            elif info_k == 'pitch_vel':\n                for lc in self.structural_solver.lc_list:\n                    if lc._lc_id == 'hinge_node_FoR_pitch':\n                        lc.set_pitch_vel(info_v)\n\n        return controlled_state['structural'], controlled_state['aero']\n\n    def run(self, **kwargs):\n        \"\"\"\n        Run the time stepping procedure with controllers and postprocessors\n        included.\n        \"\"\"\n        solvers = settings_utils.set_value_or_default(kwargs, 'solvers', None)\n        if self.network_loader is not None:\n            self.set_of_variables = self.network_loader.get_inout_variables()\n\n            incoming_queue = queue.Queue(maxsize=1)\n            outgoing_queue = queue.Queue(maxsize=1)\n\n            finish_event = threading.Event()\n            with concurrent.futures.ThreadPoolExecutor(max_workers=2) as executor:\n                netloop = executor.submit(self.network_loop, incoming_queue, outgoing_queue, finish_event)\n                timeloop = executor.submit(self.time_loop, incoming_queue, outgoing_queue, finish_event, solvers)\n\n                # TODO: improve exception handling to get exceptions when they happen from each thread\n                for t1 in [netloop, timeloop]:\n                    try:\n                        t1.result()\n                    except Exception as e:\n                        print(e)\n                        raise Exception\n\n        else:\n            self.time_loop(solvers=solvers)\n\n        if self.print_info:\n            cout.cout_wrap('...Finished', 1)\n\n        for postproc in self.postprocessors:\n            try:\n                self.postprocessors[postproc].shutdown()\n            except AttributeError:\n                pass\n\n        return self.data\n\n    def network_loop(self, in_queue, out_queue, finish_event):\n        # runs in a separate thread from time_loop()\n        out_network, in_network = self.network_loader.get_networks()\n        out_network.set_queue(out_queue)\n\n        in_network.set_message_length(self.set_of_variables.input_msg_len)\n        in_network.set_queue(in_queue)\n\n        previous_queue_empty = True\n        while not finish_event.is_set():\n\n            # selector version\n            events = network_interface.sel.select(timeout=1)\n            if out_network.queue.empty() and not previous_queue_empty:\n                out_network.set_selector_events_mask('r')\n                previous_queue_empty = True\n            elif not out_network.queue.empty() and previous_queue_empty:\n                out_network.set_selector_events_mask('w')\n                previous_queue_empty = False\n\n            try:\n                for key, mask in events:\n                    key.data.process_events(mask)\n            except KeyboardInterrupt:\n                break\n\n        # close sockets\n        in_network.close()\n        out_network.close()\n\n    def time_loop(self, in_queue=None, out_queue=None, finish_event=None, solvers=None):\n        self.logger.debug('Inside time loop')\n        # dynamic simulations start at tstep == 1, 0 is reserved for the initial state\n        for self.data.ts in range(\n                len(self.data.structure.timestep_info),\n                self.settings['n_time_steps'] + 1):\n            initial_time = time.perf_counter()\n\n            # network only\n            # get input from the other thread\n            if in_queue:\n                self.logger.info('Time Loop - Waiting for input')\n                values = in_queue.get()  # should be list of tuples\n                self.logger.debug('Time loop - received {}'.format(values))\n                self.set_of_variables.update_timestep(self.data, values)\n\n            structural_kstep = self.data.structure.timestep_info[-1].copy()\n            aero_kstep = self.data.aero.timestep_info[-1].copy()\n            if self.settings['nonlifting_body_interactions']:\n                nl_body_kstep = self.data.nonlifting_body.timestep_info[-1].copy()\n            else:\n                nl_body_kstep = None\n            self.logger.debug('Time step {}'.format(self.data.ts))\n\n            # Add the controller here\n            if self.with_controllers:\n                state = {'structural': structural_kstep,\n                         'aero': aero_kstep}\n                for k, v in self.controllers.items():\n                    state, control = v.control(self.data, state)\n                    # this takes care of the changes in options for the solver\n                    structural_kstep, aero_kstep = self.process_controller_output(\n                        state)\n\n            # Add external forces\n            if self.with_runtime_generators:\n                structural_kstep.runtime_steady_forces.fill(0.)\n                structural_kstep.runtime_unsteady_forces.fill(0.)\n                params = dict()\n                params['data'] = self.data\n                params['struct_tstep'] = structural_kstep\n                params['aero_tstep'] = aero_kstep\n                params['fsi_substep'] = -1\n                for id, runtime_generator in self.runtime_generators.items():\n                    runtime_generator.generate(params)\n\n            self.time_aero = 0.0\n            self.time_struc = 0.0\n\n            # Copy the controlled states so that the interpolation does not\n            # destroy the previous information\n            controlled_structural_kstep = structural_kstep.copy()\n            controlled_aero_kstep = aero_kstep.copy()\n\n            for k in range(self.settings['fsi_substeps'] + 1):\n                if (k == self.settings['fsi_substeps'] and\n                        self.settings['fsi_substeps']):\n                    print_res = 0 if self.res == 0. else np.log10(self.res)\n                    print_res_dqdt = 0 if self.res_dqdt == 0. else np.log10(self.res_dqdt)\n                    cout.cout_wrap((\"The FSI solver did not converge!!! residuals: %f %f\" % (print_res, print_res_dqdt)))\n                    self.aero_solver.update_custom_grid(\n                        structural_kstep,\n                        aero_kstep,\n                        nl_body_kstep)\n                    break\n\n                # generate new grid (already rotated)\n                aero_kstep = controlled_aero_kstep.copy()\n                \n                self.aero_solver.update_custom_grid(\n                        structural_kstep,\n                        aero_kstep,\n                        nl_body_kstep)\n\n                # compute unsteady contribution\n                force_coeff = 0.0\n                unsteady_contribution = False\n                if self.settings['include_unsteady_force_contribution']:\n                    if self.data.ts > self.settings['steps_without_unsteady_force']:\n                        unsteady_contribution = True\n                        if k < self.settings['pseudosteps_ramp_unsteady_force']:\n                            force_coeff = k/self.settings['pseudosteps_ramp_unsteady_force']\n                        else:\n                            force_coeff = 1.\n\n                previous_runtime_steady_forces = structural_kstep.runtime_steady_forces.astype(dtype=ct.c_double, order='F', copy=True)\n                previous_runtime_unsteady_forces = structural_kstep.runtime_unsteady_forces.astype(dtype=ct.c_double, order='F', copy=True)\n                # Add external forces\n                if self.with_runtime_generators:\n                    structural_kstep.runtime_steady_forces.fill(0.)\n                    structural_kstep.runtime_unsteady_forces.fill(0.)\n                    params = dict()\n                    params['data'] = self.data\n                    params['struct_tstep'] = structural_kstep\n                    params['aero_tstep'] = aero_kstep\n                    params['fsi_substep'] = k\n                    for id, runtime_generator in self.runtime_generators.items():\n                        runtime_generator.generate(params)\n\n                # run the solver\n                ini_time_aero = time.perf_counter()\n                self.data = self.aero_solver.run(aero_step=aero_kstep,\n                                                 structural_step=structural_kstep,\n                                                 convect_wake=True,\n                                                 unsteady_contribution=unsteady_contribution,\n                                                 nl_body_tstep = nl_body_kstep)\n                self.time_aero += time.perf_counter() - ini_time_aero\n\n                previous_kstep = structural_kstep.copy()\n                structural_kstep = controlled_structural_kstep.copy()\n                structural_kstep.runtime_steady_forces = previous_kstep.runtime_steady_forces.astype(dtype=ct.c_double, order='F', copy=True)\n                structural_kstep.runtime_unsteady_forces = previous_kstep.runtime_unsteady_forces.astype(dtype=ct.c_double, order='F', copy=True)\n                previous_kstep.runtime_steady_forces = previous_runtime_steady_forces.astype(dtype=ct.c_double, order='F', copy=True)\n                previous_kstep.runtime_unsteady_forces = previous_runtime_unsteady_forces.astype(dtype=ct.c_double, order='F', copy=True)\n\n                # move the aerodynamic surface according the the structural one\n                self.aero_solver.update_custom_grid(\n                        structural_kstep,\n                        aero_kstep,\n                        nl_body_kstep)\n                \n                self.map_forces(aero_kstep,\n                            structural_kstep,\n                            nl_body_kstep = nl_body_kstep,\n                            unsteady_forces_coeff = force_coeff)\n\n                # relaxation\n                relax_factor = self.relaxation_factor(k)\n                relax(self.data.structure,\n                      structural_kstep,\n                      previous_kstep,\n                      relax_factor)\n\n                # check if nan anywhere.\n                # if yes, raise exception\n                if np.isnan(structural_kstep.steady_applied_forces).any():\n                    raise exc.NotConvergedSolver('NaN found in steady_applied_forces!')\n                if np.isnan(structural_kstep.unsteady_applied_forces).any():\n                    raise exc.NotConvergedSolver('NaN found in unsteady_applied_forces!')\n\n                copy_structural_kstep = structural_kstep.copy()\n                ini_time_struc = time.perf_counter()\n                for i_substep in range(\n                        self.settings['structural_substeps'] + 1):\n                    # run structural solver\n                    coeff = ((i_substep + 1)/\n                             (self.settings['structural_substeps'] + 1))\n\n                    structural_kstep = self.interpolate_timesteps(\n                        step0=self.data.structure.timestep_info[-1],\n                        step1=copy_structural_kstep,\n                        out_step=structural_kstep,\n                        coeff=coeff)\n\n                    self.data = self.structural_solver.run(\n                        structural_step=structural_kstep,\n                        dt=self.substep_dt)\n\n                self.time_struc += time.perf_counter() - ini_time_struc\n\n                # check convergence\n                if self.convergence(k,\n                                    structural_kstep,\n                                    previous_kstep,\n                                    self.structural_solver,\n                                    self.aero_solver,\n                                    self.with_runtime_generators):\n                    # move the aerodynamic surface according to the structural one\n                    self.aero_solver.update_custom_grid(structural_kstep,\n                                                        aero_kstep,\n                                                        nl_body_tstep = nl_body_kstep)\n                    break\n\n            # move the aerodynamic surface according the the structural one\n            self.aero_solver.update_custom_grid(structural_kstep,\n                                                aero_kstep,\n                                                nl_body_tstep = nl_body_kstep)\n\n            self.aero_solver.add_step()\n            self.data.aero.timestep_info[-1] = aero_kstep.copy()\n            if self.settings['nonlifting_body_interactions']:\n                self.data.nonlifting_body.timestep_info[-1] = nl_body_kstep.copy()\n            self.structural_solver.add_step()\n            self.data.structure.timestep_info[-1] = structural_kstep.copy()\n\n            final_time = time.perf_counter()\n\n            if self.print_info:\n                print_res = 0 if self.res_dqdt == 0. else np.log10(self.res_dqdt)\n                self.residual_table.print_line([self.data.ts,\n                                                self.data.ts*self.dt,\n                                                k,\n                                                self.time_struc/(self.time_aero + self.time_struc),\n                                                final_time - initial_time,\n                                                print_res,\n                                                structural_kstep.for_vel[0],\n                                                structural_kstep.for_vel[2],\n                                                np.sum(structural_kstep.steady_applied_forces[:, 0]),\n                                                np.sum(structural_kstep.steady_applied_forces[:, 2])])\n            (self.data.structure.timestep_info[self.data.ts].total_forces[0:3],\n             self.data.structure.timestep_info[self.data.ts].total_forces[3:6]) = (\n                        self.structural_solver.extract_resultants(self.data.structure.timestep_info[self.data.ts]))\n            # run postprocessors\n            if self.with_postprocessors:\n                for postproc in self.postprocessors:\n                    self.data = self.postprocessors[postproc].run(online=True, solvers=solvers)\n\n            # network only\n            # put result back in queue\n            if out_queue:\n                self.logger.debug('Time loop - about to get out variables from data')\n                self.set_of_variables.get_value(self.data)\n                if out_queue.full():\n                    # clear the queue such that it always contains the latest time step\n                    out_queue.get()  # clear item from queue\n                    self.logger.debug('Data output Queue is full - clearing output')\n                out_queue.put(self.set_of_variables)\n\n        if finish_event:\n            finish_event.set()\n            self.logger.info('Time loop - Complete')\n\n    def convergence(self, k, tstep, previous_tstep,\n                    struct_solver, aero_solver, with_runtime_generators):\n        r\"\"\"\n        Check convergence in the FSI loop.\n\n        Convergence is determined as:\n\n        .. math:: \\epsilon_q^k = \\frac{|| q^k - q^{k - 1} ||}{q^0}\n        .. math:: \\epsilon_\\dot{q}^k = \\frac{|| \\dot{q}^k - \\dot{q}^{k - 1} ||}{\\dot{q}^0}\n\n        FSI converged if :math:`\\epsilon_q^k < \\mathrm{FSI\\ tolerance}` and :math:`\\epsilon_\\dot{q}^k < \\mathrm{FSI\\ tolerance}`\n\n        \"\"\"\n        # check for non-convergence\n        if not all(np.isfinite(tstep.q)):\n            raise Exception(\n                '***Not converged! There is a NaN value in the forces!')\n\n        if not k:\n            # save the value of the vectors for normalising later\n            self.base_q = np.linalg.norm(tstep.q.copy())\n            self.base_dqdt = np.linalg.norm(tstep.dqdt.copy())\n            if self.base_dqdt == 0:\n                self.base_dqdt = 1.\n            if with_runtime_generators:\n                self.base_res_forces = np.linalg.norm(tstep.runtime_steady_forces +\n                                                      tstep.runtime_unsteady_forces)\n                if self.base_res_forces == 0:\n                    self.base_res_forces = 1.\n            return False\n\n        # Check the special case of no aero and no runtime generators\n        if (aero_solver.solver_id.lower() == \"noaero\"\\\n             or struct_solver.solver_id.lower()  == \"nostructural\")\\\n            and not with_runtime_generators:\n            return True\n\n        # relative residuals\n        self.res = (np.linalg.norm(tstep.q-\n                                   previous_tstep.q)/\n                    self.base_q)\n        self.res_dqdt = (np.linalg.norm(tstep.dqdt-\n                                        previous_tstep.dqdt)/\n                         self.base_dqdt)\n\n        if with_runtime_generators:\n            res_forces = (np.linalg.norm(tstep.runtime_steady_forces -\n                                        previous_tstep.runtime_steady_forces +\n                                        tstep.runtime_unsteady_forces -\n                                        previous_tstep.runtime_unsteady_forces)/\n                                        self.base_res_forces)\n        else:\n            res_forces = 0.\n\n        # we don't want this to converge before introducing the gamma_dot forces!\n        if self.settings['include_unsteady_force_contribution']:\n            if k < self.settings['pseudosteps_ramp_unsteady_force'] \\\n                    and self.data.ts > self.settings['steps_without_unsteady_force']:\n                return False\n\n        # convergence\n        rigid_solver = False\n        if \"rigid\" in struct_solver.solver_id.lower():\n            rigid_solver = True\n        elif \"NonLinearDynamicMultibody\" == struct_solver.solver_id.lower() and struct_solver.settings['rigid_bodies']:\n            rigid_solver = True\n        if k > self.settings['minimum_steps'] - 1:\n            if self.res < self.settings['fsi_tolerance'] or rigid_solver:\n                if self.res_dqdt < self.settings['fsi_tolerance']:\n                    if res_forces < self.settings['fsi_tolerance']:\n                        return True\n\n\n    def map_forces(self, aero_kstep, structural_kstep, nl_body_kstep = None, unsteady_forces_coeff=1.0):\n        # set all forces to 0\n        structural_kstep.steady_applied_forces.fill(0.0)\n        structural_kstep.unsteady_applied_forces.fill(0.0)\n\n        # aero forces to structural forces\n        struct_forces = mapping.aero2struct_force_mapping(\n            aero_kstep.forces,\n            self.data.aero.struct2aero_mapping,\n            aero_kstep.zeta,\n            structural_kstep.pos,\n            structural_kstep.psi,\n            self.data.structure.node_master_elem,\n            self.data.structure.connectivities,\n            structural_kstep.cag(),\n            self.data.aero.data_dict)\n        dynamic_struct_forces = unsteady_forces_coeff*mapping.aero2struct_force_mapping(\n            aero_kstep.dynamic_forces,\n            self.data.aero.struct2aero_mapping,\n            aero_kstep.zeta,\n            structural_kstep.pos,\n            structural_kstep.psi,\n            self.data.structure.node_master_elem,\n            self.data.structure.connectivities,\n            structural_kstep.cag(),\n            self.data.aero.data_dict)\n\n        if self.correct_forces:\n            struct_forces = \\\n                self.correct_forces_generator.generate(aero_kstep=aero_kstep,\n                                                       structural_kstep=structural_kstep,\n                                                       struct_forces=struct_forces,\n                                                       ts=self.data.ts)\n\n        aero_kstep.aero_steady_forces_beam_dof = struct_forces\n        structural_kstep.postproc_node['aero_steady_forces'] = struct_forces\n        structural_kstep.postproc_node['aero_unsteady_forces'] = dynamic_struct_forces\n\n        # if self.settings['nonlifting_body_interactions']:\n        #     struct_forces +=  mapping.aero2struct_force_mapping(\n        #         nl_body_kstep.forces,\n        #         self.data.nonlifting_body.struct2aero_mapping,\n        #         nl_body_kstep.zeta,\n        #         structural_kstep.pos,\n        #         structural_kstep.psi,\n        #         self.data.structure.node_master_elem,\n        #         self.data.structure.connectivities,\n        #         structural_kstep.cag(),\n        #         self.data.nonlifting_body.data_dict)\n        # prescribed forces + aero forces\n        # prescribed forces + aero forces + runtime generated\n        structural_kstep.steady_applied_forces += struct_forces\n        structural_kstep.steady_applied_forces += self.data.structure.ini_info.steady_applied_forces\n        structural_kstep.steady_applied_forces += structural_kstep.runtime_steady_forces\n\n        structural_kstep.unsteady_applied_forces += dynamic_struct_forces\n        if len(self.data.structure.dynamic_input) > 0:\n            structural_kstep.unsteady_applied_forces += self.data.structure.dynamic_input[max(self.data.ts - 1, 0)]['dynamic_forces']\n        structural_kstep.unsteady_applied_forces += structural_kstep.runtime_unsteady_forces\n\n        # Apply unsteady force coefficient\n        structural_kstep.unsteady_applied_forces *= unsteady_forces_coeff\n\n    def relaxation_factor(self, k):\n        initial = self.settings['relaxation_factor']\n        if not self.settings['dynamic_relaxation']:\n            return initial\n\n        final = self.settings['final_relaxation_factor']\n        if k >= self.settings['relaxation_steps']:\n            return final\n\n        value = initial + (final - initial)/self.settings['relaxation_steps']*k\n        return value\n\n    @staticmethod\n    def interpolate_timesteps(step0, step1, out_step, coeff):\n        \"\"\"\n        Performs a linear interpolation between step0 and step1 based on coeff\n        in [0, 1]. 0 means info in out_step == step0 and 1 out_step == step1.\n\n        Quantities interpolated:\n        * `steady_applied_forces`\n        * `unsteady_applied_forces`\n        * `velocity` input in Lagrange constraints\n\n        \"\"\"\n        if not 0.0 <= coeff <= 1.0:\n            return out_step\n\n        # forces\n        out_step.steady_applied_forces[:] = (\n            (1.0 - coeff)*step0.steady_applied_forces +\n            (coeff)*(step1.steady_applied_forces))\n\n        out_step.unsteady_applied_forces[:] = (\n            (1.0 - coeff)*step0.unsteady_applied_forces +\n            (coeff)*(step1.unsteady_applied_forces))\n\n        # multibody if necessary\n        if out_step.mb_dict is not None:\n            for key in step1.mb_dict.keys():\n                if 'constraint_' in key:\n                    try:\n                        out_step.mb_dict[key]['velocity'][:] = (\n                            (1.0 - coeff)*step0.mb_dict[key]['velocity'] +\n                            (coeff)*step1.mb_dict[key]['velocity'])\n                    except KeyError:\n                        pass\n\n        return out_step\n\n    def teardown(self):\n        \n        self.structural_solver.teardown()\n        self.aero_solver.teardown()\n        if self.with_postprocessors:\n            for pp in self.postprocessors.values():\n                pp.teardown()\n        if self.with_controllers:\n            for cont in self.controllers.values():\n                cont.teardown()\n        if self.with_runtime_generators:\n            for rg in self.runtime_generators.values():\n                rg.teardown()\n\n\ndef relax(beam, timestep, previous_timestep, coeff):\n    timestep.steady_applied_forces = ((1.0 - coeff)*timestep.steady_applied_forces +\n            coeff*previous_timestep.steady_applied_forces)\n    timestep.unsteady_applied_forces = ((1.0 - coeff)*timestep.unsteady_applied_forces +\n            coeff*previous_timestep.unsteady_applied_forces)\n    timestep.runtime_steady_forces = ((1.0 - coeff)*timestep.runtime_steady_forces +\n            coeff*previous_timestep.runtime_steady_forces)\n    timestep.runtime_unsteady_forces = ((1.0 - coeff)*timestep.runtime_unsteady_forces +\n            coeff*previous_timestep.runtime_unsteady_forces)\n\n\ndef normalise_quaternion(tstep):\n    tstep.dqdt[-4:] = algebra.unit_vector(tstep.dqdt[-4:])\n    tstep.quat = tstep.dqdt[-4:].astype(dtype=ct.c_double, order='F', copy=True)\n"
  },
  {
    "path": "sharpy/solvers/dynamicuvlm.py",
    "content": "\"\"\"\nTime Domain Aerodynamic Solver\n\nN Goizueta Jan 19\n\"\"\"\nimport sharpy.utils.solver_interface as solver_interface\nfrom sharpy.utils.solver_interface import solver, BaseSolver\nimport sharpy.utils.settings as settings_utils\nimport sharpy.utils.cout_utils as cout\n\n@solver\nclass DynamicUVLM(BaseSolver):\n    \"\"\"\n    Dynamic Aerodynamic Time Domain Simulation\n\n    Provides an aerodynamic only simulation in time by time stepping the solution. The type of aerodynamic solver is\n    parsed as a setting.\n\n    To Do:\n        Clean timestep information for memory efficiency\n\n    Warnings:\n        Under development. Issues encountered when using the linear UVLM as the aerodynamic solver with integration\n        order = 1.\n\n    \"\"\"\n    solver_id = 'DynamicUVLM'\n    solver_classification = 'Aero'\n\n    settings_types = dict()\n    settings_default = dict()\n    settings_description = dict()\n\n    settings_types['print_info'] = 'bool'\n    settings_default['print_info'] = True\n    settings_description['print_info'] = 'Write status to screen'\n\n    settings_types['structural_solver'] = 'str'\n    settings_default['structural_solver'] = None\n    settings_description['structural_solver'] = 'Structural solver to use in the coupled simulation'\n\n    settings_types['structural_solver_settings'] = 'dict'\n    settings_default['structural_solver_settings'] = None\n    settings_description['structural_solver_settings'] = 'Dictionary of settings for the structural solver'\n\n    settings_types['aero_solver'] = 'str'\n    settings_default['aero_solver'] = None\n    settings_description['aero_solver'] = 'Aerodynamic solver to use in the coupled simulation'\n\n    settings_types['aero_solver_settings'] = 'dict'\n    settings_default['aero_solver_settings'] = None\n    settings_description['aero_solver_settings'] = 'Dictionary of settings for the aerodynamic solver'\n\n    settings_types['n_time_steps'] = 'int'\n    settings_default['n_time_steps'] = None\n    settings_description['n_time_steps'] = 'Number of time steps for the simulation'\n\n    settings_types['dt'] = 'float'\n    settings_default['dt'] = None\n    settings_description['dt'] = 'Time step'\n\n    settings_types['include_unsteady_force_contribution'] = 'bool'\n    settings_default['include_unsteady_force_contribution'] = False\n    settings_description['include_unsteady_force_contribution'] = 'If on, added mass contribution is added to the forces. This depends on the time derivative of the bound circulation. Check ``filter_gamma_dot`` in the aero solver'\n    settings_types['postprocessors'] = 'list(str)'\n    settings_default['postprocessors'] = list()\n    settings_description['postprocessors'] = 'List of the postprocessors to run at the end of every time step'\n\n    settings_types['postprocessors_settings'] = 'dict'\n    settings_default['postprocessors_settings'] = dict()\n    settings_description['postprocessors_settings'] = 'Dictionary with the applicable settings for every ``psotprocessor``. Every ``postprocessor`` needs its entry, even if empty'\n\n    settings_table = settings_utils.SettingsTable()\n    __doc__ += settings_table.generate(settings_types, settings_default, settings_description)\n\n\n    def __init__(self):\n\n        self.data = None\n        self.settings = None\n        self.aero_solver = None\n        self.print_info = False\n        self.dt = None\n        self.residual_table = None\n\n        self.postprocessors = dict()\n        self.with_postprocessors = False\n\n    def initialise(self, data, custom_settings=None, restart=False):\n        self.data = data\n\n        if custom_settings is None:\n            self.settings = data.settings[self.solver_id]\n        else:\n            self.settings = custom_settings\n\n        settings_utils.to_custom_types(self.settings, self.settings_types, self.settings_default)\n        self.dt = self.settings['dt']\n        self.print_info = self.settings['print_info']\n\n        self.aero_solver = solver_interface.initialise_solver(self.settings['aero_solver'])\n        self.aero_solver.initialise(self.data, self.settings['aero_solver_settings'], restart=False)\n        self.data = self.aero_solver.data\n\n        # initialise postprocessors\n        self.postprocessors = dict()\n        if len(self.settings['postprocessors']) > 0:\n            self.with_postprocessors = True\n        for postproc in self.settings['postprocessors']:\n            self.postprocessors[postproc] = solver_interface.initialise_solver(postproc)\n            self.postprocessors[postproc].initialise(\n                self.data, self.settings['postprocessors_settings'][postproc], caller=self, restart=False)\n\n        if self.print_info:\n            self.residual_table = cout.TablePrinter(2, 14, ['g', 'f'])\n            self.residual_table.print_header(['ts', 't'])\n\n    def run(self, **kwargs):\n\n        # struct info - only for orientation, no structural solution is performed\n        struct_ini_step = self.data.structure.timestep_info[-1]\n\n        for self.data.ts in range(len(self.data.aero.timestep_info),\n                                  len(self.data.aero.timestep_info) + self.settings['n_time_steps']):\n\n            aero_tstep = self.data.aero.timestep_info[-1]\n            self.aero_solver.update_custom_grid(struct_ini_step, aero_tstep)\n\n            force_coeff = 0.0\n            if self.settings['include_unsteady_force_contribution']:\n                force_coeff = 1.0\n            if self.data.ts < 5:\n                force_coeff = 0.0\n\n            # run the solver\n            if force_coeff == 0.:\n                unsteady_contribution = False\n            else:\n                unsteady_contribution = True\n\n            self.data = self.aero_solver.run(aero_tstep=aero_tstep,\n                                             structure_tstep=struct_ini_step,\n                                             convect_wake=True,\n                                             unsteady_contribution=unsteady_contribution)\n\n            self.aero_solver.add_step()\n            self.data.aero.timestep_info[-1] = aero_tstep.copy()\n            self.data.structure.timestep_info.append(struct_ini_step.copy())\n\n            if self.print_info:\n                self.residual_table.print_line([self.data.ts,\n                                                self.data.ts * self.dt])\n\n            if self.with_postprocessors:\n                for postproc in self.postprocessors:\n                    self.data = self.postprocessors[postproc].run(online=True)\n\n        if self.print_info:\n            cout.cout_wrap('...Finished', 1)\n\n        return self.data\n"
  },
  {
    "path": "sharpy/solvers/gridloader.py",
    "content": "import h5py as h5\nimport numpy as np\n\nfrom sharpy.utils.solver_interface import solver, BaseSolver\nimport sharpy.utils.settings as settings_utils\nimport sharpy.utils.h5utils as h5utils\n\n\n@solver\nclass GridLoader(BaseSolver):\n    \"\"\"\n    ``GridLoader`` class, inherited from ``BaseSolver``\n\n    Parent class for Aerogridloader and Nonliftingbodygridloader. Both classes\n    generate aerodynamic grids based on the input data\n\n    Args:\n        data (PreSharpy): ``ProblemData`` class structure\n\n    Attributes:\n        settings (dict): Name-value pair of the settings employed by the aerodynamic solver\n        settings_types (dict): Acceptable types for the values in ``settings``\n        settings_default (dict): Name-value pair of default values for the aerodynamic settings\n        data (ProblemData): class structure\n        afile_name (str): name of the HDF5 file, e.g. ``.aero.h5``\n        aero: empty attribute\n        data_dict (dict): key-value pairs of aerodynamic data\n\n    \"\"\"\n    solver_id = 'GridLoader'\n    solver_classification = 'other'\n\n    settings_types = dict()\n    settings_default = dict()\n    settings_description = dict()\n    settings_options = dict()\n\n    def __init__(self):\n        self.data = None\n        self.settings = None\n        self.file_name = ''\n        self.data_dict = dict()\n\n    def initialise(self, data, restart=False):\n        self.data = data\n        self.read_input_files()\n        \n        self.settings = data.settings[self.solver_id]\n        settings_utils.to_custom_types(self.settings,\n                                       self.settings_types,\n                                       self.settings_default, options=self.settings_options)\n\n\n    def read_input_files(self):\n        self.file_name = (self.data.case_route +\n                          '/' +\n                          self.data.case_name +\n                          self.file_name)\n                                                    \n        h5utils.check_file_exists(self.file_name)\n\n        #  read and store the hdf5 file in dictionary\n        with h5.File(self.file_name, 'r') as file_handle:\n            self.data_dict = h5utils.load_h5_in_dict(file_handle)"
  },
  {
    "path": "sharpy/solvers/initialaeroelasticloader.py",
    "content": "from sharpy.utils.solver_interface import solver, BaseSolver\nimport sharpy.utils.settings as settings_utils\nimport sharpy.utils.h5utils as h5utils\nimport sharpy.utils.exceptions as exceptions\n\n\n@solver\nclass InitialAeroelasticLoader(BaseSolver):\n    r\"\"\"\n        This solver prescribes pos, pos_dot, psi, psi_dot and for_vel\n        at each time step from a .h5 file\n    \"\"\"\n    solver_id = 'InitialAeroelasticLoader'\n    solver_classification = 'loader'\n\n    settings_types = dict()\n    settings_default = dict()\n    settings_description = dict()\n\n    settings_types['input_file'] = 'str'\n    settings_default['input_file'] = None\n    settings_description['input_file'] = 'Input file containing the simulation data'\n\n    settings_types['include_forces'] = 'bool'\n    settings_default['include_forces'] = True\n    settings_description['include_forces'] = 'Map the forces'\n\n    settings_types['generate_aero'] = 'bool'\n    settings_default['generate_aero'] = False\n    settings_description['generate_aero'] = 'Generate the aerodynamics grids from scratch'\n\n    settings_table = settings_utils.SettingsTable()\n    __doc__ += settings_table.generate(settings_types, settings_default, settings_description)\n\n    def __init__(self):\n        self.data = None\n        self.settings = None\n        self.file_info = None\n\n    def initialise(self, data, custom_settings=None, restart=False):\n\n        self.data = data\n        if custom_settings is None:\n            self.settings = data.settings[self.solver_id]\n        else:\n            self.settings = custom_settings\n        settings_utils.to_custom_types(self.settings,\n                                       self.settings_types,\n                                       self.settings_default,\n                                       no_ctype=True)\n        # Load simulation data\n        self.file_info = h5utils.readh5(self.settings['input_file'])\n\n    def run(self, **kwargs):\n\n        aero_step = settings_utils.set_value_or_default(kwargs, 'aero_step', self.data.aero.timestep_info[-1])\n        structural_step = settings_utils.set_value_or_default(kwargs, 'structural_step',\n                                                              self.data.structure.timestep_info[-1])\n\n        # Copy structural information\n        attributes = ['pos', 'pos_dot', 'pos_ddot',\n                      'psi', 'psi_dot', 'psi_ddot',\n                      'for_pos', 'for_vel', 'for_acc', 'quat',\n                      'mb_FoR_pos', 'mb_FoR_vel', 'mb_FoR_acc', 'mb_quat']\n\n        if self.settings['include_forces']:\n            attributes.extend(['runtime_steady_forces',\n                               'runtime_unsteady_forces',\n                               'steady_applied_forces',\n                               'unsteady_applied_forces'])\n\n        for att in attributes:\n            new_attr = getattr(structural_step, att)\n            db_attr = getattr(self.file_info.structure, att)\n            if new_attr.shape == db_attr.shape:\n                new_attr[...] = db_attr\n            else:\n                error_msg = \"Non matching shapes in attribute %s\" % att\n                exceptions.NotValidInputFile(error_msg)\n\n        # Copy aero information\n        if self.settings['generate_aero']:\n            # Generate aerodynamic surface\n            self.data.aero.generate_zeta_timestep_info(structural_step,\n                                                       aero_step,\n                                                       self.data.structure,\n                                                       self.data.aero.aero_settings)\n            # generate the wake because the solid shape might change\n            self.data.aero.wake_shape_generator.generate({'zeta': aero_step.zeta,\n                                                          'zeta_star': aero_step.zeta_star,\n                                                          'gamma': aero_step.gamma,\n                                                          'gamma_star': aero_step.gamma_star,\n                                                          'dist_to_orig': aero_step.dist_to_orig})\n\n        else:\n            attributes = ['zeta', 'zeta_star', 'normals',\n                          'gamma', 'gamma_star',\n                          'u_ext', 'u_ext_star', ]\n\n            if self.settings['include_forces']:\n                attributes.extend(['dynamic_forces', 'forces', ])\n\n            for att in attributes:\n                for isurf in range(aero_step.n_surf):\n                    new_attr = getattr(aero_step, att)[isurf]\n                    db_attr = getattr(self.file_info.aero, att)[isurf]\n                    if new_attr.shape == db_attr.shape:\n                        new_attr[...] = db_attr\n                    else:\n                        error_msg = \"Non matching shapes in attribute %s\" % att\n                        exceptions.NotValidInputFile(error_msg)\n\n        return self.data\n"
  },
  {
    "path": "sharpy/solvers/lindynamicsim.py",
    "content": "import numpy as np\nimport os\nimport h5py as h5\nfrom sharpy.utils.solver_interface import solver, BaseSolver, initialise_solver\nimport sharpy.utils.settings as settings_utils\nimport sharpy.linear.src.libss as libss\nimport scipy.linalg as sclalg\nimport sharpy.utils.h5utils as h5utils\nfrom sharpy.utils.datastructures import LinearTimeStepInfo\nfrom sharpy.linear.utils.ss_interface import InputVariable, LinearVector\nimport sharpy.utils.cout_utils as cout\nimport time\nimport warnings\n\n@solver\nclass LinDynamicSim(BaseSolver):\n    \"\"\"Time-domain solution of Linear Time Invariant Systems\n\n    Uses the derived linear time invariant systems and solves it in time domain.\n\n    The inputs are provided by means of a list of dictionaries to the setting\n    ``input_generators``. For each input you want, you need a dictionary entry containing\n    ``name`` (str) which is the name of the variable, ``index`` (int) for the index of the variable\n    in the case of multidimensional variables (if unspecified reverts to ``0``) and the ``file_path``\n    to a text file containing the time series of the input. If the input variable is multidimensional,\n    ``index`` may be a list of indices for each column of time series in the array in the input file.\n\n    Alternatively a ``case_name.lininput.h5`` file in the case root folder can be used with the following entries:\n\n        * ``x0`` (optional): Initial state vector\n        * ``input_vec``: Input vector ``(n_tsteps, n_inputs)``.\n\n    Note:\n        This solver is seldom used in SHARPy (its focus is on nonlinear time domain aeroelasticity) hence you may\n        find this solver lacking in features. If you use it, you may need to make modifications. We would greatly\n        appreciate that you contribute these modifications by means of a pull request!\n\n    \"\"\"\n    solver_id = 'LinDynamicSim'\n    solver_classification = 'Coupled'\n\n    settings_types = dict()\n    settings_default = dict()\n    settings_description = dict()\n\n    settings_types['write_dat'] = 'list(str)'\n    settings_default['write_dat'] = []\n    settings_description['write_dat'] = 'List of vectors to write: ``x``, ``y``, ``u`` and/or ``t``'\n\n    settings_types['reference_velocity'] = 'float'\n    settings_default['reference_velocity'] = 1.\n    settings_description['reference_velocity'] = 'Velocity to scale the structural equations when using a non-dimensional system'\n\n    settings_default['n_tsteps'] = 10\n    settings_types['n_tsteps'] = 'int'\n    settings_description['n_tsteps'] = 'Number of time steps to run'\n\n    settings_types['physical_time'] = 'float'\n    settings_default['physical_time'] = 2.\n    settings_description['physical_time'] = 'Time to run'\n\n    settings_types['input_generators'] = 'list(dict)'\n    settings_default['input_generators'] = []\n    settings_description['input_generators'] = 'List of dictionaries for each input'\n\n    settings_default['dt'] = 0.001\n    settings_types['dt'] = 'float'\n    settings_description['dt'] = 'Time increment for the solution of systems without a specified dt'\n\n    settings_types['postprocessors'] = 'list(str)'\n    settings_default['postprocessors'] = list()\n\n    settings_types['postprocessors_settings'] = 'dict'\n    settings_default['postprocessors_settings'] = dict()\n\n    settings_table = settings_utils.SettingsTable()\n    __doc__ += settings_table.generate(settings_types, settings_default, settings_description)\n\n    def __init__(self):\n\n        self.data = None\n        self.settings = dict()\n        self.postprocessors = dict()\n        self.with_postprocessors = False\n\n        self.input_data_dict = dict()\n        self.input_file_name = \"\"\n\n        self.folder = None\n\n    def initialise(self, data, custom_settings=None, restart=False):\n\n        self.data = data\n        if custom_settings:\n            self.settings = custom_settings\n        else:\n            self.settings = data.settings[self.solver_id]\n        settings_utils.to_custom_types(self.settings, self.settings_types, self.settings_default, no_ctype=True)\n\n        # Read initial state and input data and store in dictionary\n        self.read_files()\n\n        # Output folder\n        self.folder = data.output_folder + '/lindynamicsim/'\n        if not os.path.exists(self.folder):\n            os.makedirs(self.folder)\n\n        # initialise postprocessors\n        self.postprocessors = dict()\n        if len(self.settings['postprocessors']) > 0:\n            self.with_postprocessors = True\n        for postproc in self.settings['postprocessors']:\n            self.postprocessors[postproc] = initialise_solver(postproc)\n            self.postprocessors[postproc].initialise(\n                self.data, self.settings['postprocessors_settings'][postproc], caller=self, restart=False)\n\n    def input_vector(self, ss):\n        \"\"\"\n        Generates an input vector ``u`` of size ``n_tsteps x inputs`` and populates the\n        correct columns with the time series arrays provided as text files in the settings\n        ``input_generators``.\n\n        Args:\n            ss (libss.StateSpace): State Space object for which to generate input\n\n        Returns:\n            np.array: Input vector.\n        \"\"\"\n        n_steps = self.settings['n_tsteps']\n        u_vect = np.zeros((n_steps, ss.inputs))\n\n        for in_settings in self.settings['input_generators']:\n            var_name = in_settings['name']\n            index = in_settings.get('index', 0)\n            file_path = in_settings['file_path']\n\n            variable = ss.input_variables.get_variable_from_name(var_name)\n            input_data = np.loadtxt(file_path)\n\n            cout.cout_wrap('Found input for {:s}'.format(str(variable)))\n\n            if type(index) is list:\n                for ith, i_ind in enumerate(index):\n                    in_channel = variable.cols_loc[i_ind]\n                    u_vect[:, in_channel] = input_data[:, ith]\n            else:\n                in_channel = variable.cols_loc[index]\n                u_vect[:, in_channel] = input_data\n\n        return u_vect\n\n    def run(self, **kwargs):\n\n        ss = self.data.linear.ss\n\n        n_steps = self.settings['n_tsteps']\n        x0 = self.input_data_dict.get('x0', np.zeros(ss.states))\n        if len(self.settings['input_generators']) != 0:\n            u = self.input_vector(ss)\n        else:\n            u = self.input_data_dict['u']\n\n        if len(x0) != ss.states:\n            warnings.warn('Number of states in the initial state vector not equal to the number of states')\n            x0 = np.zeros(ss.states)\n\n        if u.shape[1] != ss.inputs:\n            warnings.warn('Dimensions of the input vector not equal to the number of inputs')\n            cout.cout_wrap('Number of inputs: %g' % ss.inputs, 3)\n            cout.cout_wrap('Number of timesteps: %g' % n_steps, 3)\n            cout.cout_wrap('Number of UVLM inputs: %g' % self.data.linear.linear_system.uvlm.ss.inputs, 3)\n            cout.cout_wrap('Number of beam inputs: %g' % self.data.linear.linear_system.beam.ss.inputs, 3)\n            breakpoint()\n\n        try:\n            dt = ss.dt\n        except AttributeError:\n            dt = self.settings['dt']\n\n        # Total time to run\n        T = (n_steps - 1) * dt\n\n        u_ref = self.settings['reference_velocity']\n        # If the system is scaled:\n        if u_ref != 1.:\n            scaling_factors = self.data.linear.linear_system.uvlm.sys.ScalingFacts\n            dt_dimensional = scaling_factors['length'] / u_ref\n            T_dimensional = (n_steps - 1) * dt_dimensional\n            T = T_dimensional / scaling_factors['time']\n            ss = self.data.linear.linear_system.update(self.settings['reference_velocity'])\n        t_dom = np.linspace(0, T, n_steps)\n\n        # Use the scipy linear solver\n        sys = libss.ss_to_scipy(ss)\n        cout.cout_wrap('Solving linear system using scipy...')\n        t0 = time.time()\n        out = sys.output(u, t=t_dom, x0=x0)\n        ts = time.time() - t0\n        cout.cout_wrap('\\tSolved in %.2fs' % ts, 1)\n\n        t_out = out[0]\n        x_out = out[2]\n        y_out = out[1]\n\n        if self.settings['write_dat']:\n            cout.cout_wrap('Writing linear simulation output .dat files to %s' % self.folder)\n            if 'y' in self.settings['write_dat']:\n                np.savetxt(self.folder + '/y_out.dat', y_out)\n                cout.cout_wrap('Output vector written', 2)\n            if 'x' in self.settings['write_dat']:\n                np.savetxt(self.folder + '/x_out.dat', x_out)\n                cout.cout_wrap('State vector written', 2)\n            if 'u' in self.settings['write_dat']:\n                np.savetxt(self.folder + '/u_out.dat', u)\n                cout.cout_wrap('Input vector written', 2)\n            if 't' in self.settings['write_dat']:\n                np.savetxt(self.folder + '/t_out.dat', t_out)\n                cout.cout_wrap('Time domain written', 2)\n            cout.cout_wrap('Success', 1)\n\n        # Pack state variables into linear timestep info\n        cout.cout_wrap('Plotting results...')\n        for n in range(len(t_out)-1):\n            tstep = LinearTimeStepInfo()\n            tstep.x = x_out[n, :]\n            tstep.y = y_out[n, :]\n            tstep.t = t_out[n]\n            tstep.u = u[n, :]\n            self.data.linear.timestep_info.append(tstep)\n            # TODO: option to save to h5\n\n            # Pack variables into respective aero or structural time step infos (with the + f0 from lin)\n            # Need to obtain information from the variables in a similar fashion as done with the database\n            # for the beam case\n\n            aero_tstep, struct_tstep = state_to_timestep(self.data, tstep.x, tstep.u, tstep.y)\n\n            self.data.aero.timestep_info.append(aero_tstep)\n            self.data.structure.timestep_info.append(struct_tstep)\n\n            # run postprocessors\n            if self.with_postprocessors:\n                for postproc in self.postprocessors:\n                    self.data = self.postprocessors[postproc].run(online=True)\n\n        return self.data\n\n    def read_files(self):\n\n        self.input_file_name = self.data.settings['SHARPy']['route'] + '/' + self.data.settings['SHARPy']['case'] + '.lininput.h5'\n\n        # Check that the file exists\n        try:\n            h5utils.check_file_exists(self.input_file_name)\n            # Read and store\n            with h5.File(self.input_file_name, 'r') as input_file_handle:\n                self.input_data_dict = h5utils.load_h5_in_dict(input_file_handle)\n        except FileNotFoundError:\n            pass\n\n\ndef state_to_timestep(data, x, u=None, y=None):\n    \"\"\"\n    Warnings:\n        Under development\n\n    Writes a state-space vector to SHARPy timesteps\n\n    Args:\n        data:\n        x:\n        u:\n        y:\n\n    Returns:\n\n    \"\"\"\n\n    if data.settings['LinearAssembler']['linear_system_settings']['beam_settings']['modal_projection'] and \\\n            data.settings['LinearAssembler']['linear_system_settings']['beam_settings']['inout_coords'] == 'modes':\n        modal = True\n    else:\n        modal = False\n\n    aero_state = x[:-data.linear.linear_system.beam.ss.states]\n\n    # Beam output\n    y_beam = y[-data.linear.linear_system.beam.ss.outputs:]\n\n    u_q = np.zeros(data.linear.linear_system.uvlm.ss.inputs)\n    if u is not None:\n        u_q += u[:data.linear.linear_system.uvlm.ss.inputs]\n        u_q[:y_beam.shape[0]] += y_beam\n    else:\n        u_q[:y_beam.shape[0]] += y_beam\n\n    Kas = data.linear.linear_system.couplings['Kas']\n    if modal:\n        # Transform to aerodynamic raw inputs\n        uvlm_in_mode_gain = data.linear.linear_system.couplings['in_mode_gain']\n        aero_input = Kas.dot(uvlm_in_mode_gain.dot(u_q))\n    else:\n        aero_input = Kas.dot(u_q)\n\n    # Aero\n    forces, gamma, gamma_dot, gamma_star, gust_state_vec = data.linear.linear_system.uvlm.unpack_ss_vector(\n        data,\n        x_n=aero_state,\n        u_aero=aero_input,\n        aero_tstep=data.linear.tsaero0,\n        track_body=True,\n        state_variables=data.linear.linear_system.uvlm.ss.state_variables,\n        gust_in=True)\n\n    if data.linear.linear_system.uvlm.gust_assembler:\n        gust_in_loc = data.linear.ss.input_variables('u_gust').cols_loc\n        u_in_gust = u[gust_in_loc]\n        gust_assembler = data.linear.linear_system.uvlm.gust_assembler\n        u_ext_gust = gust_assembler.state_to_uext.dot(gust_state_vec) + gust_assembler.uin_to_uext.dot(u_in_gust)\n    else:\n        u_ext_gust = np.array([])\n\n    uvlm_input_variables = LinearVector.transform(Kas.output_variables, InputVariable)\n    # Unpack input\n    zeta, zeta_dot, u_ext = data.linear.linear_system.uvlm.unpack_input_vector(aero_input, u_ext_gust,\n                                                                               input_variables=uvlm_input_variables)\n\n    current_aero_tstep = data.aero.timestep_info[-1].copy()\n    current_aero_tstep.forces = [forces[i_surf] + data.linear.tsaero0.forces[i_surf] for i_surf in\n                                 range(len(gamma))]\n    current_aero_tstep.gamma = [gamma[i_surf] + data.linear.tsaero0.gamma[i_surf] for i_surf in\n                                range(len(gamma))]\n    current_aero_tstep.gamma_dot = [gamma_dot[i_surf] + data.linear.tsaero0.gamma_dot[i_surf] for i_surf in\n                                    range(len(gamma))]\n    current_aero_tstep.gamma_star = [gamma_star[i_surf] + data.linear.tsaero0.gamma_star[i_surf] for i_surf in\n                                     range(len(gamma))]\n    current_aero_tstep.zeta = zeta\n    current_aero_tstep.zeta_dot = zeta_dot\n    current_aero_tstep.u_ext = u_ext\n\n    aero_forces_vec = np.concatenate([forces[i_surf][:3, :, :].reshape(-1, order='C') for i_surf in range(len(forces))])\n    beam_forces = data.linear.linear_system.couplings['Ksa'].dot(aero_forces_vec)\n\n    # Reconstruct the state if modal\n    if modal:\n        phi = data.linear.linear_system.beam.sys.U\n        x_s = sclalg.block_diag(phi, phi).dot(y_beam)\n    else:\n        x_s = y_beam\n    y_s = beam_forces #+ phi.dot(u_struct)\n\n    current_struct_step = data.linear.linear_system.beam.unpack_ss_vector(x_s, y_s, data.linear.tsstruct0)\n\n    return current_aero_tstep, current_struct_step\n"
  },
  {
    "path": "sharpy/solvers/linearassembler.py",
    "content": "\"\"\"\nLinear State Space Assembler\n\"\"\"\nfrom sharpy.utils.datastructures import Linear\nfrom sharpy.utils.solver_interface import solver, BaseSolver\n\nimport sharpy.linear.utils.ss_interface as ss_interface\nimport sharpy.utils.settings as settings_utils\nimport sharpy.utils.cout_utils as cout\nimport sharpy.linear.assembler\nimport sharpy.rom\n\n\n@solver\nclass LinearAssembler(BaseSolver):\n    r\"\"\"\n    Warnings:\n        Under development - please advise of new features and bugs!\n\n    Creates a workspace containing the different linear elements of the state-space.\n\n    The user specifies which elements to build sequentially via the ``linear_system`` setting.\n\n    The most common uses will be:\n\n        * Aerodynamic: :class:`sharpy.linear.assembler.LinearUVLM` solver\n\n        * Structural: :class:`sharpy.linear.assembler.LinearBeam` solver\n\n        * Aeroelastic: :class:`sharpy.linear.assembler.LinearAeroelastic` solver\n\n    The solver enables to load a user specific assembly of a state-space by means of the ``LinearCustom`` block.\n\n    See :class:`sharpy.sharpy.linear.assembler.LinearAssembler` for a detailed description of each of the state-space assemblies.\n\n    Upon assembly of the linear system, the data structure ``data.linear`` will be created. The :class:`.Linear`\n    contains the state-space as an attribute. This state space will be the one employed by postprocessors.\n\n    Important: running the linear routines requires information on the tangent mass, stiffness and gyroscopic\n    structural matrices therefore the solver :class:`solvers.modal.Modal` must have been run prior to linearisation.\n    In addition, if the problem includes rigid body velocities, at least one\n    timestep of :class:`solvers.DynamicCoupled` must have run such that the rigid body velocity is included.\n\n    Example:\n\n    The typical ``flow`` setting used prior to using this solver for an aeroelastic simulation with rigid body dynamics\n    will be similar to:\n\n    >>> flow = ['BeamLoader',\n    >>>        'AerogridLoader',\n    >>>        'StaticTrim',\n    >>>        'DynamicCoupled',  # a single time step will suffice\n    >>>        'Modal',\n    >>>        'LinearAssembler']\n\n    \"\"\"\n    solver_id = 'LinearAssembler'\n    solver_classification = 'Linear'\n\n    settings_types = dict()\n    settings_default = dict()\n    settings_description = dict()\n    settings_options = dict()\n\n    settings_types['linear_system'] = 'str'\n    settings_default['linear_system'] = None\n    settings_description['linear_system'] = 'Name of chosen state space assembly type'\n\n    settings_types['linear_system_settings'] = 'dict'\n    settings_default['linear_system_settings'] = dict()\n    settings_description['linear_system_settings'] = 'Settings for the desired state space assembler'\n\n    settings_types['linearisation_tstep'] = 'int'\n    settings_default['linearisation_tstep'] = -1\n    settings_description['linearisation_tstep'] = 'Chosen linearisation time step number from available time steps'\n\n    settings_types['modal_tstep'] = 'int'\n    settings_default['modal_tstep'] = -1\n    settings_description['modal_tstep'] = 'Timestep in which modal information is stored. Useful if the ``Modal`` solver' \\\n                                          ' is run at the start of the SHARPy flow.'\n\n    settings_types['inout_coordinates'] = 'str'\n    settings_default['inout_coordinates'] = ''\n    settings_description['inout_coordinates'] = 'Input/output coordinates of the system. Nodal or modal space.'\n    settings_options['inout_coordinates'] = ['', 'nodes', 'modes']\n\n    settings_types['retain_inputs'] = 'list(int)'\n    settings_default['retain_inputs'] = []\n    settings_description['retain_inputs'] = 'List of input channels to retain in the chosen ``inout_coordinates``.'\n\n    settings_types['retain_outputs'] = 'list(int)'\n    settings_default['retain_outputs'] = []\n    settings_description['retain_outputs'] = 'List of output channels to retain in the chosen ``inout_coordinates``.'\n\n    settings_types['retain_input_variables'] = 'list(str)'\n    settings_default['retain_input_variables'] = []\n    settings_description['retain_input_variables'] = 'List of input channels to retain in the chosen ' \\\n                                                     '``inout_coordinates``.'\n\n    settings_types['retain_output_variables'] = 'list(str)'\n    settings_default['retain_output_variables'] = []\n    settings_description['retain_output_variables'] = 'List of output channels to retain in the chosen ' \\\n                                                      '``inout_coordinates``.'\n\n    settings_types['recover_accelerations'] = 'bool'\n    settings_default['recover_accelerations'] = False\n    settings_description['recover_accelerations'] = 'Recover structural system accelerations as additional outputs.'\n\n    settings_table = settings_utils.SettingsTable()\n    __doc__ += settings_table.generate(settings_types, settings_default, settings_description, settings_options)\n\n    def __init__(self):\n\n        self.settings = dict()\n        self.data = None\n\n    def initialise(self, data, custom_settings=None, restart=False):\n\n        self.data = data\n        if custom_settings:\n            self.data.settings[self.solver_id] = custom_settings\n            self.settings = self.data.settings[self.solver_id]\n\n        else:\n            self.settings = data.settings[self.solver_id]\n        settings_utils.to_custom_types(self.settings,\n                           self.settings_types,\n                           self.settings_default,\n                           options=self.settings_options,\n                           no_ctype=True)\n\n        # Get consistent linearisation timestep\n        ii_step = self.settings['linearisation_tstep']\n\n        tsstruct0 = data.structure.timestep_info[ii_step]\n        tsaero0 = data.aero.timestep_info[ii_step]\n\n        try:\n            tsstruct0.modal = data.structure.timestep_info[self.settings['modal_tstep']].modal\n        except AttributeError:\n            raise AttributeError('Unable to find modal information at desired '\n                                 'timestep {:g}'.format(self.settings['modal_tstep']))\n\n        # Create data.linear\n        self.data.linear = Linear(tsaero0, tsstruct0)\n\n        lsys = ss_interface.initialise_system(self.settings['linear_system'])\n        lsys.initialise(data)\n        self.data.linear.linear_system = lsys\n\n    def run(self, **kwargs):\n\n        self.data.linear.ss = self.data.linear.linear_system.assemble()\n\n        if self.settings['recover_accelerations']:\n            gain = self.data.linear.linear_system.beam.recover_accelerations(self.data.linear.ss)\n            self.data.linear.ss.addGain(gain, where='out')\n\n        # modify inout coordinates\n        if self.settings['inout_coordinates'] == 'nodes':\n            try:\n                self.data.linear.linear_system.to_nodal_coordinates()\n            except AttributeError:\n                pass\n\n        # retain only selected inputs and outputs\n        if len(self.settings['retain_inputs']) != 0:\n            self.data.linear.ss.retain_inout_channels(self.settings['retain_inputs'], where='in')\n        if len(self.settings['retain_outputs']) != 0:\n            self.data.linear.ss.retain_inout_channels(self.settings['retain_outputs'], where='out')\n\n        if len(self.settings['retain_input_variables']) != 0:\n            ss = self.data.linear.ss\n            input_vars = ss.input_variables\n            removed_variables = []\n            for variable in input_vars:\n                if variable.name not in self.settings['retain_input_variables']:\n                    removed_variables.append(variable.name)\n            ss.remove_inputs(*removed_variables)\n\n        if len(self.settings['retain_output_variables']) != 0:\n            ss = self.data.linear.ss\n            output_vars = ss.output_variables\n            removed_variables = []\n            for variable in output_vars:\n                if variable.name not in self.settings['retain_output_variables']:\n                    removed_variables.append(variable.name)\n            ss.remove_outputs(*removed_variables)\n\n        cout.cout_wrap('Final system is:', 1)\n        cout.cout_wrap(str(self.data.linear.ss), 2)\n\n        return self.data\n\n\n"
  },
  {
    "path": "sharpy/solvers/modal.py",
    "content": "import ctypes as ct\nimport numpy as np\nimport scipy as sc\nimport os\nimport itertools\nimport warnings\nimport sharpy.structure.utils.xbeamlib as xbeamlib\nfrom sharpy.utils.solver_interface import solver, BaseSolver\nimport sharpy.utils.settings as settings_utils\nimport sharpy.utils.algebra as algebra\nimport sharpy.utils.cout_utils as cout\nimport sharpy.structure.utils.modalutils as modalutils\n\n\n@solver\nclass Modal(BaseSolver):\n    \"\"\"\n    ``Modal`` solver class, inherited from ``BaseSolver``\n\n    Extracts the ``M``, ``K`` and ``C`` matrices from the ``Fortran`` library for the beam. Depending on the choice of\n    modal projection, these may or may not be transformed to a state-space form to compute the eigenvalues and mode shapes\n    of the structure.\n    \"\"\"\n    solver_id = 'Modal'\n    solver_classification = 'Linear'\n\n    settings_types = dict()\n    settings_default = dict()\n    settings_description = dict()\n\n    settings_types['print_info'] = 'bool'\n    settings_default['print_info'] = True\n    settings_description['print_info'] = 'Write status to screen'\n\n    # solution options\n    settings_types['rigid_body_modes'] = 'bool'\n    settings_default['rigid_body_modes'] = False\n    settings_description['rigid_body_modes'] = 'Write modes with rigid body mode shapes'\n\n    settings_types['use_undamped_modes'] = 'bool'  # basis for modal projection\n    settings_default['use_undamped_modes'] = True\n    settings_description['use_undamped_modes'] = 'Project the modes onto undamped mode shapes'\n\n    settings_types['NumLambda'] = 'int'  # no. of different modes to retain\n    settings_default['NumLambda'] = 20  # doubles if use_undamped_modes is False\n    settings_description['NumLambda'] = 'Number of modes to retain'\n\n    # output options\n    settings_types['write_modes_vtk'] = 'bool'  # write displacements mode shapes in vtk file\n    settings_default['write_modes_vtk'] = True\n    settings_description['write_modes_vtk'] = 'Write Paraview files with mode shapes'\n\n    settings_types['print_matrices'] = 'bool'  # print M,C,K matrices to dat file\n    settings_default['print_matrices'] = False\n    settings_description['print_matrices']  = 'Write M, C and K matrices to file'\n\n    settings_types['save_data'] = 'bool'  # write modes shapes/freq./damp. to dat file\n    settings_default['save_data'] = True\n    settings_description['save_data'] = 'Write mode shapes, frequencies and damping to file'\n\n    settings_types['continuous_eigenvalues'] = 'bool'\n    settings_default['continuous_eigenvalues'] = False\n    settings_description['continuous_eigenvalues'] = 'Use continuous time eigenvalues'\n\n    settings_types['dt'] = 'float'\n    settings_default['dt'] = 0\n    settings_description['dt'] = 'Time step to compute discrete time eigenvalues'\n\n    settings_types['delta_curved'] = 'float'\n    settings_default['delta_curved'] = 1e-2\n    settings_description['delta_curved'] = 'Threshold for linear expressions in rotation formulas'\n\n    settings_types['plot_eigenvalues'] = 'bool'\n    settings_default['plot_eigenvalues'] = False\n    settings_description['plot_eigenvalues'] = 'Plot to screen root locus diagram'\n\n    settings_types['max_rotation_deg'] = 'float'\n    settings_default['max_rotation_deg'] = 15.\n    settings_description['max_rotation_deg'] = 'Scale mode shape to have specified maximum rotation'\n\n    settings_types['max_displacement'] = 'float'\n    settings_default['max_displacement'] = 0.15\n    settings_description['max_displacement'] = 'Scale mode shape to have specified maximum displacement'\n\n    settings_types['use_custom_timestep'] = 'int'\n    settings_default['use_custom_timestep'] = -1\n    settings_description['use_custom_timestep'] = 'If > -1, it will use that time step geometry for calculating the modes'\n\n    settings_types['rigid_modes_ppal_axes'] = 'bool'\n    settings_default['rigid_modes_ppal_axes'] = False\n    settings_description['rigid_modes_ppal_axes'] = 'Modify the ridid body modes such that they are defined wrt ' \\\n                                                    'to the CG and aligned with the principal axes of inertia'\n\n    settings_types['rigid_modes_cg'] = 'bool'\n    settings_default['rigid_modes_cg'] = False\n    settings_description['rigid_modes_cg'] = 'Not implemente yet'\n\n    settings_table = settings_utils.SettingsTable()\n    __doc__ += settings_table.generate(settings_types, settings_default, settings_description)\n\n    def __init__(self):\n        self.data = None\n        self.settings = None\n\n        self.folder = None\n        self.eigenvalue_table = None\n        self.filename_freq = None\n        self.filename_damp = None\n        self.filename_shapes = None\n        self.rigid_body_motion = None\n\n    def initialise(self, data, custom_settings=None, restart=False):\n        self.data = data\n        if custom_settings is None:\n            self.settings = data.settings[self.solver_id]\n        else:\n            self.settings = custom_settings\n        settings_utils.to_custom_types(self.settings,\n                           self.settings_types,\n                           self.settings_default)\n\n        self.rigid_body_motion = self.settings['rigid_body_modes']\n\n        self.data.ts = len(self.data.structure.timestep_info) - 1\n        if self.settings['use_custom_timestep'] > -1:\n            self.data.ts = self.settings['use_custom_timestep']\n\n        # load info from dyn dictionary\n        self.data.structure.add_unsteady_information(\n                                            self.data.structure.dyn_dict,\n                                            self.data.ts)\n\n        # create folder for containing files if necessary\n        self.folder = data.output_folder + '/beam_modal_analysis/'\n        if not os.path.exists(self.folder):\n            os.makedirs(self.folder)\n\n        self.filename_freq = (self.folder +\n                              'tstep' + (\"%06d\" % self.data.ts) +\n                              '_ModalFrequencies.dat')\n        self.filename_damp = (self.folder +\n                              'tstep' + (\"%06d\" % self.data.ts) +\n                              '_ModalDamping.dat')\n        self.filename_shapes = (self.folder +\n                                'tstep' + (\"%06d\" % self.data.ts) +\n                                '_ModalShape')\n\n        if self.settings['print_info']:\n            cout.cout_wrap('Structural eigenvalues')\n            eigenvalue_filename = self.folder + '/eigenvaluetable.txt'\n            self.eigenvalue_table = modalutils.EigenvalueTable(filename=eigenvalue_filename)\n            self.eigenvalue_table.print_header(self.eigenvalue_table.headers)\n\n    def run(self, **kwargs):\n        r\"\"\"\n        Extracts the eigenvalues and eigenvectors of the clamped structure.\n\n        If ``use_undamped_modes == True`` then the free vibration modes of the clamped structure are found solving:\n\n            .. math:: \\mathbf{M\\,\\ddot{\\eta}} + \\mathbf{K\\,\\eta} = 0\n\n        that flows down to solving the non-trivial solutions to:\n\n            .. math:: (-\\omega_n^2\\,\\mathbf{M} + \\mathbf{K})\\mathbf{\\Phi} = 0\n\n        On the other hand, if the damped modes are chosen because the system has damping, the free vibration\n        modes are found solving the equation of motion of the form:\n\n            .. math:: \\mathbf{M\\,\\ddot{\\eta}} + \\mathbf{C\\,\\dot{\\eta}} + \\mathbf{K\\,\\eta} = 0\n\n        which can be written in state space form, with the state vector :math:`\\mathbf{x} = [\\eta^T,\\,\\dot{\\eta}^T]^T`\n        as\n\n            .. math:: \\mathbf{\\dot{x}} = \\begin{bmatrix} 0 & \\mathbf{I} \\\\ -\\mathbf{M^{-1}K} & -\\mathbf{M^{-1}C}\n                \\end{bmatrix} \\mathbf{x}\n\n        and therefore the mode shapes and frequencies correspond to the solution of the eigenvalue problem\n\n            .. math:: \\mathbf{A\\,\\Phi} = \\mathbf{\\Lambda\\,\\Phi}.\n\n        From the eigenvalues, the following system characteristics are provided:\n\n            * Natural Frequency: :math:`\\omega_n = |\\lambda|`\n\n            * Damped natural frequency: :math:`\\omega_d = \\text{Im}(\\lambda) = \\omega_n \\sqrt{1-\\zeta^2}`\n\n            * Damping ratio: :math:`\\zeta = -\\frac{\\text{Re}(\\lambda)}{\\omega_n}`\n\n        In addition to the above, the modal output dictionary includes the following:\n\n            * ``M``: Tangent mass matrix\n\n            * ``C``: Tangent damping matrix\n\n            * ``K``: Tangent stiffness matrix\n\n            * ``Ccut``: Modal damping matrix :math:`\\mathbf{C}_m = \\mathbf{\\Phi}^T\\mathbf{C}\\mathbf{\\Phi}`\n\n            * ``Kin_damp``: Forces gain matrix (when damped): :math:`K_{in} = \\mathbf{\\Phi}_L^T \\mathbf{M}^{-1}`\n\n            * ``eigenvectors``: Right eigenvectors\n\n            * ``eigenvectors_left``: Left eigenvectors given when the system is damped\n\n        Returns:\n            PreSharpy: updated data object with modal analysis as part of the last structural time step.\n\n        \"\"\"\n\n        # Number of degrees of freedom\n        num_str_dof = self.data.structure.num_dof.value\n        num_rigid_dof = 10 if self.rigid_body_motion else 0\n\n        num_dof = num_str_dof + num_rigid_dof\n\n        # Initialize matrices\n        FullMglobal = np.zeros((num_dof, num_dof),\n                               dtype=ct.c_double, order='F')\n        FullKglobal = np.zeros((num_dof, num_dof),\n                               dtype=ct.c_double, order='F')\n        FullCglobal = np.zeros((num_dof, num_dof),\n                               dtype=ct.c_double, order='F')\n\n        if self.rigid_body_motion:\n            # Settings for the assembly of the matrices\n            # try:\n            #     full_matrix_settings = self.data.settings['StaticCoupled']['structural_solver_settings']\n            #     full_matrix_settings['dt'] = ct.c_double(0.01)  # Dummy: required but not used\n            #     full_matrix_settings['newmark_damp'] = ct.c_double(1e-2)  # Dummy: required but not used\n            # except KeyError:\n                # full_matrix_settings = self.data.settings['DynamicCoupled']['structural_solver_settings']\n            import sharpy.solvers._basestructural as basestructuralsolver\n            full_matrix_settings = basestructuralsolver._BaseStructural().settings_default\n            settings_utils.to_custom_types(full_matrix_settings, basestructuralsolver._BaseStructural().settings_types, full_matrix_settings)\n\n\n            # Obtain the tangent mass, damping and stiffness matrices\n            FullMglobal, FullCglobal, FullKglobal, FullQ = xbeamlib.xbeam3_asbly_dynamic(self.data.structure,\n                                          self.data.structure.timestep_info[self.data.ts],\n                                          full_matrix_settings)\n\n            cg = modalutils.cg(FullMglobal)\n        else:\n            xbeamlib.cbeam3_solv_modal(self.data.structure,\n                                       self.settings, self.data.ts,\n                                       FullMglobal, FullCglobal, FullKglobal)\n            cg = None\n\n        # Print matrices\n        if self.settings['print_matrices']:\n            np.savetxt(self.folder + \"Mglobal.dat\", FullMglobal, fmt='%.12f',\n                       delimiter='\\t', newline='\\n')\n            np.savetxt(self.folder + \"Cglobal.dat\", FullCglobal, fmt='%.12f',\n                       delimiter='\\t', newline='\\n')\n            np.savetxt(self.folder + \"Kglobal.dat\", FullKglobal, fmt='%.12f',\n                       delimiter='\\t', newline='\\n')\n\n        # Check if the damping matrix is zero (issue working)\n        if self.settings['use_undamped_modes']:\n            zero_FullCglobal = True\n            for i,j in itertools.product(range(num_dof),range(num_dof)):\n                if np.absolute(FullCglobal[i, j]) > np.finfo(float).eps:\n                    zero_FullCglobal = False\n                    warnings.warn('Projecting a system with damping on undamped modal shapes')\n                    break\n\n        NumLambda = min(num_dof, self.settings['NumLambda'])\n\n        if self.settings['use_undamped_modes']:\n\n            # Solve for eigenvalues (with unit eigenvectors)\n            eigenvalues,eigenvectors=np.linalg.eig(\n                                       np.linalg.solve(FullMglobal,FullKglobal))\n            eigenvectors_left=None\n            # Define vibration frequencies and damping\n            freq_natural = np.sqrt(eigenvalues)\n            order = np.argsort(freq_natural)[:NumLambda]\n            freq_natural = freq_natural[order]\n            eigenvalues = eigenvalues[order]\n            eigenvectors = eigenvectors[:,order]\n            damping = np.zeros((NumLambda,))\n\n        else:\n            # State-space model\n            Minv_neg = -np.linalg.inv(FullMglobal)\n            A = np.zeros((2*num_dof, 2*num_dof), dtype=ct.c_double, order='F')\n            A[:num_dof, num_dof:] = np.eye(num_dof)\n            A[num_dof:, :num_dof] = np.dot(Minv_neg, FullKglobal)\n            A[num_dof:, num_dof:] = np.dot(Minv_neg, FullCglobal)\n\n            # Solve the eigenvalues problem\n            eigenvalues, eigenvectors_left, eigenvectors = \\\n                sc.linalg.eig(A,left=True,right=True)\n            freq_natural = np.abs(eigenvalues)\n            damping = np.zeros_like(freq_natural)\n            iiflex = freq_natural > 1e-16*np.mean(freq_natural)  # Pick only structural modes\n            damping[iiflex] = -eigenvalues[iiflex].real/freq_natural[iiflex]\n            freq_damped = freq_natural * np.sqrt(1-damping**2)\n\n            # Order & downselect complex conj:\n            # this algorithm assumes that complex conj eigenvalues appear consecutively\n            # in eigenvalues. For symmetrical systems, this relies  on the fact that:\n            # - complex conj eigenvalues have the same absolute value (to machine\n            # precision)\n            # - couples of eigenvalues with multiplicity higher than 1, show larger\n            # numerical difference\n            order = np.argsort(freq_damped)[:2*NumLambda]\n            freq_damped = freq_damped[order]\n            freq_natural = freq_natural[order]\n            eigenvalues = eigenvalues[order]\n\n            include = np.ones((2*NumLambda,), dtype=np.bool)\n            ii = 0\n            tol_rel = np.finfo(float).eps * freq_damped[ii]\n            while ii < 2*NumLambda:\n                # check complex\n                if np.abs(eigenvalues[ii].imag) > 0.:\n                    if np.abs(eigenvalues[ii+1].real-eigenvalues[ii].real) > tol_rel or\\\n                       np.abs(eigenvalues[ii+1].imag+eigenvalues[ii].imag) > tol_rel:\n                        raise NameError('Complex conjugate expected but not found!')\n                    ii += 1\n                    try:\n                        include[ii] = False\n                    except IndexError:\n                        pass\n                ii += 1\n            freq_damped = freq_damped[include]\n            eigenvalues = eigenvalues[include]\n            if self.settings['continuous_eigenvalues']:\n                if self.settings['dt'] == 0.:\n                    raise ValueError('Cannot compute the continuous eigenvalues without a dt value')\n                eigenvalues = np.log(eigenvalues)/self.settings['dt']\n\n            order = order[include]\n            damping = damping[order]\n            eigenvectors = eigenvectors[:, order]\n            eigenvectors_left = eigenvectors_left[:, order].conj()\n\n        # Modify rigid body modes for them to be defined wrt the CG\n        eigenvectors = modalutils.mode_sign_convention(self.data.structure.boundary_conditions, eigenvectors,\n                                                       self.rigid_body_motion)\n        if not eigenvectors_left:\n            if self.settings['rigid_modes_ppal_axes']:\n                eigenvectors, t_pa, r_pa = modalutils.free_modes_principal_axes(eigenvectors, FullMglobal,\n                                                                          return_transform=True)\n            else:\n                t_pa = None  # Transformation matrix from the A frame to the P frame (principal axes of inertia)\n                r_pa = None\n        # Scaling\n        eigenvectors, eigenvectors_left = self.scale_modes_unit_mass_matrix(eigenvectors, FullMglobal, eigenvectors_left)\n\n        # Other terms required for state-space realisation\n        # non-zero damping matrix\n        # Modal damping matrix\n        if self.settings['use_undamped_modes'] and not(zero_FullCglobal):\n            Ccut = np.dot(eigenvectors.T, np.dot(FullCglobal, eigenvectors))\n        else:\n            Ccut = None\n\n        # forces gain matrix (nodal -> modal)\n        if not self.settings['use_undamped_modes']:\n            Kin_damp = np.dot(eigenvectors_left[num_dof:, :].T, -Minv_neg)\n        else:\n            Kin_damp = None\n\n        # Plot eigenvalues using matplotlib if specified in settings\n        if self.settings['plot_eigenvalues']:\n            try:\n                import matplotlib.pyplot as plt\n                fig = plt.figure()\n                plt.scatter(eigenvalues.real, eigenvalues.imag)\n                plt.show()\n                plt.savefig(self.folder + 'eigenvalues.png', transparent=True, bbox_inches='tight')\n            except ModuleNotFoundError:\n                warnings.warn('Unable to import matplotlib, skipping plot')\n\n        # Write dat files\n        if self.settings['save_data']:\n            if type(eigenvalues) == complex:\n                np.savetxt(self.folder + \"eigenvalues.dat\", eigenvalues.view(float).reshape(-1, 2), fmt='%.12f',\n                           delimiter='\\t', newline='\\n')\n            else:\n                np.savetxt(self.folder + \"eigenvalues.dat\", eigenvalues.view(float), fmt='%.12f',\n                           delimiter='\\t', newline='\\n')\n            np.savetxt(self.folder + \"eigenvectors.dat\", eigenvectors[:num_dof].real,\n                       fmt='%.12f', delimiter='\\t', newline='\\n')\n\n            if not self.settings['use_undamped_modes']:\n                np.savetxt(self.folder + 'frequencies.dat', freq_damped[:NumLambda],\n                           fmt='%e', delimiter='\\t', newline='\\n')\n            else:\n                np.savetxt(self.folder + 'frequencies.dat', freq_natural[:NumLambda],\n                           fmt='%e', delimiter='\\t', newline='\\n')\n\n            np.savetxt(self.filename_damp, damping[:NumLambda],\n                       fmt='%e', delimiter='\\t', newline='\\n')\n\n        # Write vtk\n        if self.settings['write_modes_vtk']:\n            try:\n                self.data.aero\n            except AttributeError:\n                warnings.warn('No aerodynamic model found - unable to project the mode onto aerodynamic grid')\n            else:\n                modalutils.write_modes_vtk(\n                    self.data,\n                    eigenvectors[:num_dof],\n                    NumLambda,\n                    self.filename_shapes,\n                    self.settings['max_rotation_deg'],\n                    self.settings['max_displacement'],\n                    ts=self.settings['use_custom_timestep'])\n\n        outdict = dict()\n\n        if self.settings['use_undamped_modes']:\n            outdict['modes'] = 'undamped'\n            outdict['freq_natural'] = freq_natural\n            if not zero_FullCglobal:\n                outdict['warning'] =\\\n                    'system with damping: mode shapes and natural frequencies do not account for damping!'\n        else:\n            outdict['modes'] = 'damped'\n            outdict['freq_damped'] = freq_damped\n            outdict['freq_natural'] = freq_natural\n\n        outdict['damping'] = damping\n        outdict['eigenvalues'] = eigenvalues\n        outdict['eigenvectors'] = eigenvectors\n\n        if Ccut is not None:\n            outdict['Ccut'] = Ccut\n        if Kin_damp is not None:\n            outdict['Kin_damp'] = Kin_damp\n        if not self.settings['use_undamped_modes']:\n            outdict['eigenvectors_left'] = eigenvectors_left\n\n        if cg is not None:\n            outdict['cg'] = cg\n\n        outdict['M'] = FullMglobal\n        outdict['C'] = FullCglobal\n        outdict['K'] = FullKglobal\n\n        if t_pa is not None:\n            outdict['t_pa'] = t_pa\n            outdict['r_pa'] = r_pa\n        self.data.structure.timestep_info[self.data.ts].modal = outdict\n\n        if self.settings['print_info']:\n            if self.settings['use_undamped_modes']:\n                self.eigenvalue_table.print_evals(np.sqrt(eigenvalues[:NumLambda])*1j)\n            else:\n                self.eigenvalue_table.print_evals(eigenvalues[:NumLambda])\n            self.eigenvalue_table.close_file()\n\n        return self.data\n\n    def scale_modes_unit_mass_matrix(self, eigenvectors, FullMglobal, eigenvectors_left=None):\n        if self.settings['use_undamped_modes']:\n            # mass normalise (diagonalises M and K)\n            eigenvectors = modalutils.scale_mass_normalised_modes(eigenvectors, FullMglobal)\n        else:\n            # unit normalise (diagonalises A)\n            if not self.rigid_body_motion:\n                for ii in range(eigenvectors.shape[1]):  # Issue - dot product = 0 when you have arbitrary damping\n                    fact = 1./np.sqrt(np.dot(eigenvectors_left[:, ii], eigenvectors[:, ii]))\n                    eigenvectors_left[:, ii] = fact*eigenvectors_left[:, ii]\n                    eigenvectors[:, ii] = fact*eigenvectors[:, ii]\n\n        return eigenvectors, eigenvectors_left\n\n    def free_free_modes(self, phi, M):\n        r\"\"\"\n\n        Warning:\n            This function is deprecated. See :func:`~sharpy.structure.utils.modalutils.free_modes_principal_axes`\n            for a transformation to the CG and with respect to the principal axes of inertia.\n\n        Returns the rigid body modes defined with respect to the centre of gravity\n\n        The transformation from the modes defined at the FoR A origin, :math:`\\boldsymbol{\\Phi}`, to the modes defined\n        using the centre of gravity as a reference is\n\n\n        .. math:: \\boldsymbol{\\Phi}_{rr,CG}|_{TRA} = \\boldsymbol{\\Phi}_{RR}|_{TRA} + \\tilde{\\mathbf{r}}_{CG}\n            \\boldsymbol{\\Phi}_{RR}|_{ROT}\n\n        .. math:: \\boldsymbol{\\Phi}_{rr,CG}|_{ROT} = \\boldsymbol{\\Phi}_{RR}|_{ROT}\n\n        Returns:\n            (np.array): Transformed eigenvectors\n        \"\"\"\n\n        # NG - 26/7/19 This is the transformation being performed by K_vec\n        # Leaving this here for now in case it becomes necessary\n        # .. math:: \\boldsymbol{\\Phi}_{ss,CG}|_{TRA} = \\boldsymbol{\\Phi}_{SS}|_{TRA} +\\boldsymbol{\\Phi}_{RS}|_{TRA}  -\n        # \\tilde{\\mathbf{r}}_{A}\\boldsymbol{\\Phi}_{RS}|_{ROT}\n        #\n        # .. math:: \\boldsymbol{\\Phi}_{ss,CG}|_{ROT} = \\boldsymbol{\\Phi}_{SS}|_{ROT}\n        # + (\\mathbf{T}(\\boldsymbol{\\Psi})^\\top)^{-1}\\boldsymbol{\\Phi}_{RS}|_{ROT}\n        warnings.warn('This function is deprecated. See sharpy.structure.utils.modalutils.free_modes_principal_axes',\n                      category=DeprecationWarning)\n        if not self.rigid_body_motion:\n            warnings.warn('No rigid body modes to transform because the structure is clamped')\n            return phi\n        else:\n            pos = self.data.structure.timestep_info[self.data.ts].pos\n            r_cg = modalutils.cg(M)\n\n            jj = 0\n            K_vec = np.zeros((phi.shape[0], phi.shape[0]))\n\n            jj_for_vel = range(self.data.structure.num_dof.value, self.data.structure.num_dof.value + 3)\n            jj_for_rot = range(self.data.structure.num_dof.value + 3, self.data.structure.num_dof.value + 6)\n\n            for node_glob in range(self.data.structure.num_node):\n                ### detect bc at node (and no. of dofs)\n                bc_here = self.data.structure.boundary_conditions[node_glob]\n\n                if bc_here == 1:  # clamp (only rigid-body)\n                    continue\n\n                elif bc_here == -1 or bc_here == 0:  # (rigid+flex body)\n                    dofs_here = 6\n                    jj_tra = 6 * self.data.structure.vdof[node_glob] + np.array([0, 1, 2], dtype=int)\n                    jj_rot = 6 * self.data.structure.vdof[node_glob] + np.array([3, 4, 5], dtype=int)\n                else:\n                    raise NameError('Invalid boundary condition (%d) at node %d!' \\\n                                    % (bc_here, node_glob))\n\n                jj += dofs_here\n\n                ee, node_loc = self.data.structure.node_master_elem[node_glob, :]\n                psi = self.data.structure.timestep_info[self.data.ts].psi[ee, node_loc, :]\n\n                Ra = pos[node_glob, :]  # in A FoR with respect to G\n\n                K_vec[np.ix_(jj_tra, jj_tra)] += np.eye(3)\n                K_vec[np.ix_(jj_tra, jj_for_vel)] += np.eye(3)\n                K_vec[np.ix_(jj_tra, jj_for_rot)] -= algebra.skew(Ra)\n\n                K_vec[np.ix_(jj_rot, jj_rot)] += np.eye(3)\n                K_vec[np.ix_(jj_rot, jj_for_rot)] += np.linalg.inv(algebra.crv2tan(psi).T)\n\n            # Rigid-Rigid modes transform\n            Krr = np.eye(10)\n            Krr[np.ix_([0, 1, 2], [3, 4, 5])] += algebra.skew(r_cg)\n\n            # Assemble transformed modes\n            phirr = Krr.dot(phi[-10:, :10])\n\n            # Get rigid body modes to be positive in translation and rotation\n            for i in range(10):\n                ind = np.argmax(np.abs(phirr[:, i]))\n                phirr[:, i] = np.sign(phirr[ind, i]) * phirr[:, i]\n\n            # NG - 26/7/19 - Transformation of the rigid part of the elastic modes ended up not being necessary but leaving\n            # here in case it becomes useful in the future\n            phit = np.block([np.zeros((phi.shape[0], 10)), phi[:, 10:]])\n            phit[-10:, :10] = phirr\n\n            return phit\n"
  },
  {
    "path": "sharpy/solvers/noaero.py",
    "content": "import sharpy.utils.settings as settings_utils\nfrom sharpy.utils.solver_interface import solver, BaseSolver\n\n\n@solver\nclass NoAero(BaseSolver):\n    \"\"\"\n    Skip UVLM evaluation\n\n    Solver to be used with either :class:`~sharpy.solvers.staticcoupled.StaticCoupled` or\n    :class:`~sharpy.solvers.dynamiccoupled.DynamicCoupled` when aerodynamics are not of interest.\n\n    An example would be running a structural-only simulation where you would like to keep an aerodynamic grid for\n    visualisation purposes.\n    \"\"\"\n    solver_id = 'NoAero'\n    solver_classification = 'Aero'\n\n    settings_types = dict()\n    settings_default = dict()\n    settings_description = dict()\n\n    settings_types['dt'] = 'float'\n    settings_default['dt'] = 0.1\n    settings_description['dt'] = 'Time step'\n\n    settings_types['update_grid'] = 'bool'\n    settings_default['update_grid'] = True\n    settings_description['update_grid'] = 'Update aerodynamic grid as the structure deforms.'\n\n    settings_table = settings_utils.SettingsTable()\n    __doc__ += settings_table.generate(settings_types, settings_default, settings_description)\n\n    def __init__(self):\n        self.data = None\n        self.settings = None\n\n    def initialise(self, data, custom_settings=None, restart=False):\n        self.data = data\n        if custom_settings is None:\n            self.settings = data.settings[self.solver_id]\n        else:\n            self.settings = custom_settings\n        settings_utils.to_custom_types(self.settings,\n                                       self.settings_types,\n                                       self.settings_default,\n                                       no_ctype=True)\n\n        if len(self.data.aero.timestep_info) == 0:  # initialise with zero timestep for static sims\n            self.update_step()\n\n    def run(self, **kwargs):\n\n        aero_tstep = settings_utils.set_value_or_default(kwargs, 'aero_step', self.data.aero.timestep_info[-1])\n        dt = settings_utils.set_value_or_default(kwargs, 'dt', self.settings['dt'])\n\n        # generate the wake because the solid shape might change\n        self.data.aero.wake_shape_generator.generate({'zeta': aero_tstep.zeta,\n                                                      'zeta_star': aero_tstep.zeta_star,\n                                                      'gamma': aero_tstep.gamma,\n                                                      'gamma_star': aero_tstep.gamma_star,\n                                                      'dist_to_orig': aero_tstep.dist_to_orig})\n\n        return self.data\n\n    def add_step(self):\n        self.data.aero.add_timestep()\n\n    def update_grid(self, beam):\n        # called by DynamicCoupled\n        if self.settings['update_grid']:\n            self.data.aero.generate_zeta(beam,\n                                         self.data.aero.aero_settings,\n                                         -1,\n                                         beam_ts=-1)\n\n    def update_custom_grid(self, structure_tstep, aero_tstep, nl_body_tstep=None):\n        # called by DynamicCoupled\n        if self.settings['update_grid']:\n            self.data.aero.generate_zeta_timestep_info(structure_tstep,\n                                                       aero_tstep,\n                                                       self.data.structure,\n                                                       self.data.aero.aero_settings,\n                                                       dt=None)\n\n    def update_step(self):\n        # called by StaticCoupled\n        if self.settings['update_grid']:\n            self.data.aero.generate_zeta(self.data.structure,\n                                         self.data.aero.aero_settings,\n                                         self.data.ts)\n        else:\n            self.add_step()\n\n    def next_step(self):\n        # called by StaticCoupled\n        self.add_step()\n"
  },
  {
    "path": "sharpy/solvers/nonliftingbodygridloader.py",
    "content": "from sharpy.utils.solver_interface import solver\nimport sharpy.aero.models.nonliftingbodygrid as nonliftingbodygrid\nimport sharpy.utils.settings as settings_utils\nfrom sharpy.solvers.gridloader import GridLoader\n\n\n@solver\nclass NonliftingbodygridLoader(GridLoader):\n    \"\"\"\n    ``NonliftingbodygridLoader`` class, inherited from ``GridLoader``\n\n    Generates aerodynamic grid for nonlifting bodies based on the input data\n\n    Args:\n        data (PreSharpy): ``ProblemData`` class structure\n\n    Attributes:\n        settings (dict): Name-value pair of the settings employed by the aerodynamic solver\n        settings_types (dict): Acceptable types for the values in ``settings``\n        settings_default (dict): Name-value pair of default values for the aerodynamic settings\n        data (ProblemData): class structure\n        file_name (str): name of the ``.nonlifting_body.h5`` HDF5 file\n        aero: empty attribute\n        aero_data_dict (dict): key-value pairs of aerodynamic data\n\n\n    \"\"\"\n    solver_id = 'NonliftingbodygridLoader'\n    solver_classification = 'loader'\n\n    def __init__(self):\n        super().__init__\n        self.file_name = '.nonlifting_body.h5'\n\n        # nonlifting_body storage\n        self.nonlifting_body = None\n\n    def run(self, **kwargs):\n        self.data.nonlifting_body = nonliftingbodygrid.NonliftingBodyGrid()\n        self.data.nonlifting_body.generate(self.data_dict,\n                                           self.data.structure,\n                                           self.settings,\n                                           self.data.ts)\n        return self.data\n"
  },
  {
    "path": "sharpy/solvers/nonlineardynamic.py",
    "content": "\"\"\"\n@modified   Alfonso del Carre\n\"\"\"\n\nimport sharpy.structure.utils.xbeamlib as xbeamlib\nfrom sharpy.utils.settings import str2bool\nfrom sharpy.utils.solver_interface import solver, solver_from_string\nimport sharpy.utils.settings as settings_utils\nimport sharpy.utils.cout_utils as cout\n\n_BaseStructural = solver_from_string('_BaseStructural')\n\n\n@solver\nclass NonLinearDynamic(_BaseStructural):\n    \"\"\"\n    Structural solver used for the dynamic simulation of free-flying structures.\n\n    This solver provides an interface to the structural library (``xbeam``) and updates the structural parameters\n    for every time step of the simulation.\n\n    This solver is called as part of a standalone structural simulation.\n\n    \"\"\"\n    solver_id = 'NonLinearDynamic'\n    solver_classification = 'structural'\n\n    settings_types = _BaseStructural.settings_types.copy()\n    settings_default = _BaseStructural.settings_default.copy()\n    settings_description = _BaseStructural.settings_description.copy()\n\n    settings_types['prescribed_motion'] = 'bool'\n    settings_default['prescribed_motion'] = None\n\n    settings_types['gravity_dir'] = 'list(float)'\n    settings_default['gravity_dir'] = [0, 0, 1]\n\n    settings_table = settings_utils.SettingsTable()\n    __doc__ += settings_table.generate(settings_types, settings_default, settings_description)\n\n    def __init__(self):\n        self.data = None\n        self.settings = None\n\n    def initialise(self, data, restart=False):\n        self.data = data\n        self.settings = data.settings[self.solver_id]\n        settings_utils.to_custom_types(self.settings, self.settings_types, self.settings_default)\n\n        # load info from dyn dictionary\n        self.data.structure.add_unsteady_information(self.data.structure.dyn_dict, self.settings['num_steps'])\n\n        # allocate timestep_info\n        for i in range(self.settings['num_steps']):\n            self.data.structure.add_timestep(self.data.structure.timestep_info)\n            if i>0:\n                self.data.structure.timestep_info[i].unsteady_applied_forces[:] = self.data.structure.dynamic_input[i - 1]['dynamic_forces']\n            self.data.structure.timestep_info[i].steady_applied_forces[:] = self.data.structure.ini_info.steady_applied_forces\n\n\n    def run(self, **kwargs):\n        prescribed_motion = False\n        try:\n            prescribed_motion = self.settings['prescribed_motion']\n        except KeyError:\n            pass\n        if prescribed_motion is True:\n            cout.cout_wrap('Running non linear dynamic solver...', 2)\n            xbeamlib.cbeam3_solv_nlndyn(self.data.structure, self.settings)\n        else:\n            cout.cout_wrap('Running non linear dynamic solver with RB...', 2)\n            xbeamlib.xbeam_solv_couplednlndyn(self.data.structure, self.settings)\n\n        self.data.ts = self.settings['num_steps']\n        cout.cout_wrap('...Finished', 2)\n        return self.data\n"
  },
  {
    "path": "sharpy/solvers/nonlineardynamiccoupledstep.py",
    "content": "\"\"\"\n@modified   Alfonso del Carre\n\"\"\"\n\nimport numpy as np\n\nimport sharpy.structure.utils.xbeamlib as xbeamlib\nfrom sharpy.utils.settings import str2bool\nfrom sharpy.utils.solver_interface import solver, BaseSolver, solver_from_string\nimport sharpy.utils.settings as settings_utils\n\n\n_BaseStructural = solver_from_string('_BaseStructural')\n\n@solver\nclass NonLinearDynamicCoupledStep(_BaseStructural):\n    \"\"\"\n    Structural solver used for the dynamic simulation of free-flying structures.\n\n    This solver provides an interface to the structural library (``xbeam``) and updates the structural parameters\n    for every k-th step in the FSI iteration.\n\n    This solver can be called as part of a standalone structural simulation or as the structural solver of a coupled\n    aeroelastic simulation.\n\n    \"\"\"\n    solver_id = 'NonLinearDynamicCoupledStep'\n    solver_classification = 'structural'\n\n    settings_types = _BaseStructural.settings_types.copy()\n    settings_default = _BaseStructural.settings_default.copy()\n    settings_description = _BaseStructural.settings_description.copy()\n\n    settings_types['balancing'] = 'bool'\n    settings_default['balancing'] = False\n\n    # initial speed direction is given in inertial FOR!!!\n    settings_types['initial_velocity_direction'] = 'list(float)'\n    settings_default['initial_velocity_direction'] = [-1.0, 0.0, 0.0]\n    settings_description['initial_velocity_direction'] = 'Initial velocity of the reference node given in the inertial FOR'\n\n    settings_types['initial_velocity'] = 'float'\n    settings_default['initial_velocity'] = 0\n    settings_description['initial_velocity'] = 'Initial velocity magnitude of the reference node'\n\n    settings_types['relaxation_factor'] = 'float'\n    settings_default['relaxation_factor'] = 0.3\n    settings_description['relaxation factor'] = 'Relaxation factor'\n\n    settings_table = settings_utils.SettingsTable()\n    __doc__ += settings_table.generate(settings_types, settings_default, settings_description)\n\n    def __init__(self):\n        self.data = None\n        self.settings = None\n\n    def initialise(self, data, custom_settings=None, restart=False):\n        self.data = data\n        if custom_settings is None:\n            self.settings = data.settings[self.solver_id]\n        else:\n            self.settings = custom_settings\n        settings_utils.to_custom_types(self.settings, self.settings_types, self.settings_default)\n\n        # load info from dyn dictionary\n        self.data.structure.add_unsteady_information(self.data.structure.dyn_dict, self.settings['num_steps'])\n\n        # add initial speed to RBM\n        if self.settings['initial_velocity']:\n            new_direction = np.dot(self.data.structure.timestep_info[-1].cag(),\n                                   self.settings['initial_velocity_direction'])\n            self.data.structure.timestep_info[-1].for_vel[0:3] = new_direction*self.settings['initial_velocity']\n\n        # generate q, dqdt and dqddt\n        xbeamlib.xbeam_solv_disp2state(self.data.structure, self.data.structure.timestep_info[-1])\n\n    def run(self, **kwargs):\n\n        structural_step = settings_utils.set_value_or_default(kwargs, 'structural_step', self.data.structure.timestep_info[-1])\n        \n        dt= settings_utils.set_value_or_default(kwargs, 'dt', self.settings['dt'])\n\n        xbeamlib.xbeam_step_couplednlndyn(self.data.structure,\n                                          self.settings,\n                                          self.data.ts,\n                                          structural_step,\n                                          dt=dt)\n        self.extract_resultants(structural_step)\n        self.data.structure.integrate_position(structural_step, dt)\n\n        return self.data\n\n    def add_step(self):\n        self.data.structure.next_step()\n\n    def next_step(self):\n        pass\n\n    def extract_resultants(self, tstep=None):\n        if tstep is None:\n            tstep = self.data.structure.timestep_info[self.data.ts]\n        steady, unsteady, grav = tstep.extract_resultants(self.data.structure, force_type=['steady', 'unsteady', 'grav'])\n        totals = steady + unsteady + grav\n        return totals[0:3], totals[3:6]\n\n"
  },
  {
    "path": "sharpy/solvers/nonlineardynamicmultibody.py",
    "content": "import ctypes as ct\nimport numpy as np\nimport os\n\nfrom sharpy.utils.solver_interface import solver, BaseSolver, solver_from_string\nimport sharpy.utils.settings as settings_utils\nimport sharpy.utils.solver_interface as solver_interface\n\nimport sharpy.utils.cout_utils as cout\nimport sharpy.structure.utils.xbeamlib as xbeamlib\nimport sharpy.utils.multibody as mb\nimport sharpy.utils.algebra as algebra\nimport sharpy.structure.utils.lagrangeconstraints as lagrangeconstraints\nimport sharpy.utils.exceptions as exc\n\n\n_BaseStructural = solver_from_string('_BaseStructural')\n\n\n@solver\nclass NonLinearDynamicMultibody(_BaseStructural):\n    \"\"\"\n    Nonlinear dynamic multibody\n\n    Nonlinear dynamic step solver for multibody structures.\n\n    \"\"\"\n    solver_id = 'NonLinearDynamicMultibody'\n    solver_classification = 'structural'\n\n    settings_types = _BaseStructural.settings_types.copy()\n    settings_default = _BaseStructural.settings_default.copy()\n    settings_description = _BaseStructural.settings_description.copy()\n    settings_options = dict()\n\n    settings_types['time_integrator'] = 'str'\n    settings_default['time_integrator'] = 'NewmarkBeta'\n    settings_description['time_integrator'] = 'Method to perform time integration'\n    settings_options['time_integrator'] = ['NewmarkBeta', 'GeneralisedAlpha']\n\n    settings_types['time_integrator_settings'] = 'dict'\n    settings_default['time_integrator_settings'] = dict()\n    settings_description['time_integrator_settings'] = 'Settings for the time integrator'\n\n    settings_types['write_lm'] = 'bool'\n    settings_default['write_lm'] = False\n    settings_description['write_lm'] = 'Write lagrange multipliers to file'\n\n    settings_types['relax_factor_lm'] = 'float'\n    settings_default['relax_factor_lm'] = 0.\n    settings_description['relax_factor_lm'] = 'Relaxation factor for Lagrange Multipliers. 0 no relaxation. 1 full relaxation'\n\n    settings_types['allow_skip_step'] = 'bool'\n    settings_default['allow_skip_step'] = False\n    settings_description['allow_skip_step'] = 'Allow skip step when NaN is found while solving the system'\n\n    settings_types['rigid_bodies'] = 'bool'\n    settings_default['rigid_bodies'] = False\n    settings_description['rigid_bodies'] = 'Set to zero the changes in flexible degrees of freedom (not very efficient)'\n\n    settings_types['zero_ini_dot_ddot'] = 'bool'\n    settings_default['zero_ini_dot_ddot'] = False\n    settings_description['zero_ini_dot_ddot'] = 'Set to zero the position and crv derivatives at the first time step'\n\n    settings_table = settings_utils.SettingsTable()\n    __doc__ += settings_table.generate(settings_types, settings_default, settings_description)\n\n    def __init__(self):\n        self.data = None\n        self.settings = None\n\n        # Total number of unknowns in the Multybody sistem\n        self.sys_size = None\n\n        # Total number of equations associated to the Lagrange multipliers\n        self.lc_list = None\n        self.num_LM_eq = None\n        self.Lambda = None\n        self.Lambda_dot = None\n        self.Lambda_ddot = None\n\n        self.gamma = None\n        self.beta = None\n\n        self.prev_Dq = None\n\n        self.out_files = None  # dict: containing output_variable:file_path if desired to write output\n\n    def initialise(self, data, custom_settings=None, restart=False):\n\n        self.data = data\n        if custom_settings is None:\n            self.settings = data.settings[self.solver_id]\n        else:\n            self.settings = custom_settings\n        settings_utils.to_custom_types(self.settings,\n                           self.settings_types,\n                           self.settings_default,\n                           self.settings_options,\n                           no_ctype=True)\n\n        # load info from dyn dictionary\n        self.data.structure.add_unsteady_information(\n            self.data.structure.dyn_dict, self.settings['num_steps'])\n\n        # Define the number of equations\n        self.lc_list = lagrangeconstraints.initialize_constraints(self.data.structure.ini_mb_dict)\n        self.num_LM_eq = lagrangeconstraints.define_num_LM_eq(self.lc_list)\n\n        self.Lambda = np.zeros((self.num_LM_eq,), dtype=ct.c_double, order='F')\n        self.Lambda_dot = np.zeros((self.num_LM_eq,), dtype=ct.c_double, order='F')\n        self.Lambda_ddot = np.zeros((self.num_LM_eq,), dtype=ct.c_double, order='F')\n\n        if self.settings['write_lm']:\n            dire = self.data.output_folder + '/NonLinearDynamicMultibody/'\n            if not os.path.isdir(dire):\n                os.makedirs(dire)\n\n            self.out_files = {'lambda': dire + 'lambda.dat',\n                              'lambda_dot': dire + 'lambda_dot.dat',\n                              'lambda_ddot': dire + 'lambda_ddot.dat',\n                              'cond_number': dire + 'cond_num.dat'}\n            # clean up files\n            for file in self.out_files.values():\n                if os.path.isfile(file):\n                    os.remove(file)\n\n        # Define the number of dofs\n        self.define_sys_size()\n\n        self.prev_Dq = np.zeros((self.sys_size + self.num_LM_eq))\n\n        self.settings['time_integrator_settings']['sys_size'] = self.sys_size\n        self.settings['time_integrator_settings']['num_LM_eq'] = self.num_LM_eq\n\n        # Initialise time integrator\n        if not restart:\n            self.time_integrator = solver_interface.initialise_solver(\n                self.settings['time_integrator'])\n        self.time_integrator.initialise(\n            self.data, self.settings['time_integrator_settings'], restart=restart)\n\n    def add_step(self):\n        self.data.structure.next_step()\n\n    def next_step(self):\n        pass\n\n    def define_sys_size(self):\n        \"\"\"\n        This function defines the number of degrees of freedom in a multibody systems\n\n        Each body contributes with ``num_dof`` degrees of freedom and 10 more if the\n        associated local FoR can move or has Lagrange Constraints associated\n        \"\"\"\n        MBdict = self.data.structure.ini_mb_dict\n        self.sys_size = self.data.structure.num_dof.value\n\n        for ibody in range(self.data.structure.num_bodies):\n            if (MBdict['body_%02d' % ibody]['FoR_movement'] == 'free'):\n                self.sys_size += 10\n\n    def define_rigid_dofs(self, MB_beam):\n\n        self.n_rigid_dofs = 0\n        self.rigid_dofs = []\n\n        first_dof = 0\n        for ibody in range(len(MB_beam)):\n            last_dof = first_dof + MB_beam[ibody].num_dof.value\n            if MB_beam[ibody].FoR_movement == 'free':\n                self.n_rigid_dofs += 10\n                self.rigid_dofs += (np.arange(10, dtype=int) + last_dof).tolist()\n                last_dof += 10\n            first_dof = last_dof + 0\n\n    def assembly_MB_eq_system(self, MB_beam, MB_tstep, ts, dt, Lambda, Lambda_dot, MBdict):\n        r\"\"\"\n        This function generates the matrix and vector associated to the linear system to solve a structural iteration\n        It usses a Newmark-beta scheme for time integration. Being M, C and K the mass, damping\n        and stiffness matrices of the system:\n\n        .. math::\n            MB_Asys = MB_K + MB_C \\frac{\\gamma}{\\beta dt} + \\frac{1}{\\beta dt^2} MB_M\n\n        Args:\n            MB_beam (list(:class:`~sharpy.structure.models.beam.Beam`)): each entry represents a body\n            MB_tstep (list(:class:`~sharpy.utils.datastructures.StructTimeStepInfo`)): each entry represents a body\n            ts (int): Time step number\n            dt(int): time step\n            Lambda (np.ndarray): Lagrange Multipliers array\n            Lambda_dot (np.ndarray): Time derivarive of ``Lambda``\n            MBdict (dict): Dictionary including the multibody information\n\n        Returns:\n            MB_Asys (np.ndarray): Matrix of the systems of equations\n            MB_Q (np.ndarray): Vector of the systems of equations\n        \"\"\"\n\n        MB_M = np.zeros((self.sys_size, self.sys_size), dtype=ct.c_double, order='F')\n        MB_C = np.zeros((self.sys_size, self.sys_size), dtype=ct.c_double, order='F')\n        MB_K = np.zeros((self.sys_size, self.sys_size), dtype=ct.c_double, order='F')\n        MB_Q = np.zeros((self.sys_size,), dtype=ct.c_double, order='F')\n        first_dof = 0\n        last_dof = 0\n\n        # Loop through the different bodies\n        for ibody in range(len(MB_beam)):\n\n            # Initialize matrices\n            M = None\n            C = None\n            K = None\n            Q = None\n\n            # Generate the matrices for each body\n            if MB_beam[ibody].FoR_movement == 'prescribed':\n                last_dof = first_dof + MB_beam[ibody].num_dof.value\n                M, C, K, Q = xbeamlib.cbeam3_asbly_dynamic(MB_beam[ibody], MB_tstep[ibody], self.settings)\n\n            elif MB_beam[ibody].FoR_movement == 'free':\n                last_dof = first_dof + MB_beam[ibody].num_dof.value + 10\n                M, C, K, Q = xbeamlib.xbeam3_asbly_dynamic(MB_beam[ibody], MB_tstep[ibody], self.settings)\n\n\n            ############### Assembly into the global matrices\n            # Flexible and RBM contribution to Asys\n            MB_M[first_dof:last_dof, first_dof:last_dof] = M.astype(dtype=ct.c_double, copy=True, order='F')\n            MB_C[first_dof:last_dof, first_dof:last_dof] = C.astype(dtype=ct.c_double, copy=True, order='F')\n            MB_K[first_dof:last_dof, first_dof:last_dof] = K.astype(dtype=ct.c_double, copy=True, order='F')\n\n            #Q\n            MB_Q[first_dof:last_dof] = Q\n\n            first_dof = last_dof\n\n        # Define the number of equations\n        # Generate matrices associated to Lagrange multipliers\n        LM_C, LM_K, LM_Q = lagrangeconstraints.generate_lagrange_matrix(\n            self.lc_list,\n            MB_beam,\n            MB_tstep,\n            ts,\n            self.num_LM_eq,\n            self.sys_size,\n            dt,\n            Lambda,\n            Lambda_dot,\n            \"dynamic\")\n\n        # Include the matrices associated to Lagrange Multipliers\n        MB_C += LM_C[:self.sys_size, :self.sys_size]\n        MB_K += LM_K[:self.sys_size, :self.sys_size]\n        MB_Q += LM_Q[:self.sys_size]\n\n        # Only working for non-holonomic constratints\n        kBnh = LM_C[self.sys_size:, :self.sys_size]\n        strict_LM_Q = LM_Q[self.sys_size:]\n\n        return MB_M, MB_C, MB_K, MB_Q, kBnh, strict_LM_Q\n\n    def integrate_position(self, MB_beam, MB_tstep, dt):\n        \"\"\"\n        This function integrates the position of each local A FoR after the\n        structural iteration has been solved.\n\n        It uses a Newmark-beta approximation.\n\n        Args:\n            MB_beam (list(:class:`~sharpy.structure.models.beam.Beam`)): each entry represents a body\n            MB_tstep (list(:class:`~sharpy.utils.datastructures.StructTimeStepInfo`)): each entry represents a body\n            dt(int): time step\n        \"\"\"\n        vel = np.zeros((6,),)\n        acc = np.zeros((6,),)\n        for ibody in range(0, len(MB_tstep)):\n            # I think this is the right way to do it, but to make it match the rest I change it temporally\n            if True:\n                acc[0:3] = (0.5-self.beta)*np.dot(MB_beam[ibody].timestep_info.cga(),MB_beam[ibody].timestep_info.for_acc[0:3])+self.beta*np.dot(MB_tstep[ibody].cga(),MB_tstep[ibody].for_acc[0:3])\n                vel[0:3] = np.dot(MB_beam[ibody].timestep_info.cga(),MB_beam[ibody].timestep_info.for_vel[0:3])\n                MB_tstep[ibody].for_pos[0:3] += dt*(vel[0:3] + dt*acc[0:3])\n            else:\n                MB_tstep[ibody].for_pos[0:3] += dt*np.dot(MB_tstep[ibody].cga(),MB_tstep[ibody].for_vel[0:3])\n\n    def extract_resultants(self, tstep):\n        # TODO: code\n        return np.zeros((3)), np.zeros((3))\n\n    def compute_forces_constraints(self, MB_beam, MB_tstep, ts, dt, Lambda, Lambda_dot):\n        \"\"\"\n        This function computes the forces generated at Lagrange Constraints\n\n        Args:\n            MB_beam (list(:class:`~sharpy.structure.models.beam.Beam`)): each entry represents a body\n            MB_tstep (list(:class:`~sharpy.utils.datastructures.StructTimeStepInfo`)): each entry represents a body\n            ts (int): Time step number\n            dt(float): Time step increment\n            Lambda (np.ndarray): Lagrange Multipliers array\n            Lambda_dot (np.ndarray): Time derivarive of ``Lambda``\n\n        Warning:\n            This function is underdevelopment and not fully functional\n        \"\"\"\n        try:\n            self.lc_list[0]\n        except IndexError:\n            return\n\n        # TODO the output of this routine is wrong. check at some point.\n        LM_C, LM_K, LM_Q = lagrangeconstraints.generate_lagrange_matrix(self.lc_list, MB_beam, MB_tstep, ts, self.num_LM_eq, self.sys_size, dt, Lambda, Lambda_dot, \"dynamic\")\n        F = -np.dot(LM_C[:, -self.num_LM_eq:], Lambda_dot) - np.dot(LM_K[:, -self.num_LM_eq:], Lambda)\n\n        first_dof = 0\n        for ibody in range(len(MB_beam)):\n            # Forces associated to nodes\n            body_numdof = MB_beam[ibody].num_dof.value\n            body_freenodes = np.sum(MB_beam[ibody].vdof > -1)\n            last_dof = first_dof + body_numdof\n            MB_tstep[ibody].forces_constraints_nodes[(MB_beam[ibody].vdof > -1), :] = F[first_dof:last_dof].reshape(body_freenodes, 6, order='C')\n\n            # Forces associated to the frame of reference\n            if MB_beam[ibody].FoR_movement == 'free':\n                # TODO: How are the forces in the quaternion equation interpreted?\n                MB_tstep[ibody].forces_constraints_FoR[ibody, :] = F[last_dof:last_dof+10]\n                last_dof += 10\n\n            first_dof = last_dof\n        # TODO: right now, these forces are only used as an output, they are not read when the multibody is splitted\n\n    def write_lm_cond_num(self, iteration, Lambda, Lambda_dot, Lambda_ddot, cond_num, cond_num_lm):\n        # Maybe not the most efficient way to output this, as files are opened and closed every time data is written\n        # However, containing the writing in the with statement prevents from files remaining open in the previous\n        # implementation\n        out_data = {'lambda': Lambda,\n                    'lambda_dot': Lambda_dot,\n                    'lambda_ddot': Lambda_ddot}\n\n        for out_var, data in out_data.items():\n            file_name = self.out_files[out_var]\n            with open(file_name, 'a') as fid:\n                fid.write(f'{self.data.ts:g} {iteration:g} ')\n                for ilm in range(self.num_LM_eq):\n                    fid.write(f'{data[ilm]} ')\n                fid.write(f'\\n')    \n\n        with open(self.out_files['cond_number'], 'a') as fid:\n            fid.write(f'{self.data.ts:g} {iteration:g} ')\n            fid.write(f'{cond_num:e} {cond_num_lm:e} \\n')\n\n\n\n    def run(self, **kwargs):\n        structural_step = settings_utils.set_value_or_default(kwargs, 'structural_step', self.data.structure.timestep_info[-1])\n        dt= settings_utils.set_value_or_default(kwargs, 'dt', self.settings['dt'])\n\n        if structural_step.mb_dict is not None:\n            MBdict = structural_step.mb_dict\n        else:\n            MBdict = self.data.structure.ini_mb_dict\n\n        MB_beam, MB_tstep = mb.split_multibody(\n            self.data.structure,\n            structural_step,\n            MBdict,\n            self.data.ts)\n\n        self.define_rigid_dofs(MB_beam)\n        num_LM_eq = self.num_LM_eq\n\n        if self.data.ts == 1 and self.settings['zero_ini_dot_ddot']:\n            for ibody in range(len(MB_tstep)):\n                MB_beam[ibody].ini_info.pos_dot *= 0.\n                MB_beam[ibody].ini_info.pos_ddot *= 0.\n                MB_beam[ibody].ini_info.psi_dot *= 0.\n                MB_beam[ibody].ini_info.psi_dot_local *= 0.\n                MB_beam[ibody].ini_info.psi_ddot *= 0.\n                MB_tstep[ibody].pos_dot *= 0.\n                MB_tstep[ibody].pos_ddot *= 0.\n                MB_tstep[ibody].psi_dot *= 0.\n                MB_tstep[ibody].psi_dot_local *= 0.\n                MB_tstep[ibody].psi_ddot *= 0.\n\n        # Initialize\n        # TODO: i belive this can move into disp_and_accel2 state as self.Lambda, self.Lambda_dot\n        if not num_LM_eq == 0:\n            Lambda = self.Lambda.astype(dtype=ct.c_double, copy=True, order='F')\n            Lambda_dot = self.Lambda_dot.astype(dtype=ct.c_double, copy=True, order='F')\n            Lambda_ddot = self.Lambda_ddot.astype(dtype=ct.c_double, copy=True, order='F')\n        else:\n            Lambda = np.zeros((1,))\n            Lambda_dot = np.zeros((1,))\n            Lambda_ddot = np.zeros((1,))\n\n        # Predictor step\n        q, dqdt, dqddt = mb.disp_and_accel2state(MB_beam, MB_tstep, Lambda, Lambda_dot, self.sys_size, num_LM_eq)\n        self.time_integrator.predictor(q, dqdt, dqddt)\n\n        # Reference residuals\n        old_Dq = 1.0\n        LM_old_Dq = 1.0\n\n        skip_step = False\n        for iteration in range(self.settings['max_iterations']):\n            # Check if the maximum of iterations has been reached\n            if iteration == self.settings['max_iterations'] - 1:\n                error = ('Solver did not converge in %d iterations.\\n res = %e \\n LM_res = %e' %\n                        (iteration, res, LM_res))\n                raise exc.NotConvergedSolver(error)\n\n            # Update positions and velocities\n            Lambda, Lambda_dot = mb.state2disp_and_accel(q, dqdt, dqddt, MB_beam, MB_tstep, num_LM_eq)\n\n            if self.settings['write_lm'] and iteration:\n                self.write_lm_cond_num(iteration, Lambda, Lambda_dot, Lambda_ddot, cond_num, cond_num_lm)\n\n            MB_M, MB_C, MB_K, MB_Q, kBnh, LM_Q = self.assembly_MB_eq_system(MB_beam,\n                                                                MB_tstep,\n                                                                self.data.ts,\n                                                                dt,\n                                                                Lambda,\n                                                                Lambda_dot,\n                                                                MBdict)\n\n            Asys, Q = self.time_integrator.build_matrix(MB_M, MB_C, MB_K, MB_Q,\n                                                        kBnh, LM_Q)\n\n            if self.settings['write_lm']:\n                cond_num = np.linalg.cond(Asys[:self.sys_size, :self.sys_size])\n                cond_num_lm = np.linalg.cond(Asys)\n\n            if self.settings['rigid_bodies']:\n                rigid_LM_dofs = self.rigid_dofs + (np.arange(self.num_LM_eq, dtype=int) + self.sys_size).tolist()\n\n                rigid_Asys = Asys[np.ix_(rigid_LM_dofs, rigid_LM_dofs)].copy()\n                rigid_Q = Q[rigid_LM_dofs].copy()\n                rigid_Dq = np.linalg.solve(rigid_Asys, -rigid_Q)\n                Dq = np.zeros((self.sys_size + self.num_LM_eq))\n                Dq[rigid_LM_dofs] = rigid_Dq.copy()\n\n            else:\n                Dq = np.linalg.solve(Asys, -Q)\n\n            # Relaxation\n            relax_Dq = np.zeros_like(Dq)\n            relax_Dq[:self.sys_size] = Dq[:self.sys_size].copy()\n            relax_Dq[self.sys_size:] = ((1. - self.settings['relax_factor_lm'])*Dq[self.sys_size:] +\n                                   self.settings['relax_factor_lm']*self.prev_Dq[self.sys_size:])\n            self.prev_Dq = Dq.copy()\n\n            # Corrector step\n            self.time_integrator.corrector(q, dqdt, dqddt, relax_Dq)\n\n            # Reference values for convergence\n            if iteration == 0:\n                old_Dq = np.max(np.abs(Dq[0:self.sys_size]))\n                if num_LM_eq:\n                    LM_old_Dq = np.max(np.abs(Dq[self.sys_size:self.sys_size+num_LM_eq]))\n                else:\n                    LM_old_Dq = 0.\n                # Change the reference values\n                if old_Dq == 0:\n                    old_Dq = 1.\n                if LM_old_Dq == 0:\n                    LM_old_Dq = 1.\n\n            # Evaluate convergence\n            res = np.max(np.abs(Dq[0:self.sys_size]))/old_Dq\n            if np.isnan(res):\n                if self.settings['allow_skip_step']:\n                    skip_step = True\n                    cout.cout_wrap(\"Skipping step\", 3)\n                    break\n                else:\n                    raise exc.NotConvergedSolver('Multibody Dq = NaN')\n            if num_LM_eq:\n                LM_res = np.max(np.abs(Dq[self.sys_size:self.sys_size+num_LM_eq]))/LM_old_Dq\n            else:\n                LM_res = 0.0\n\n            if (res < self.settings['min_delta']) and (LM_res < self.settings['min_delta']):\n                break\n\n        Lambda, Lambda_dot = mb.state2disp_and_accel(q, dqdt, dqddt, MB_beam, MB_tstep, num_LM_eq)\n        if self.settings['write_lm']:\n            self.write_lm_cond_num(iteration, Lambda, Lambda_dot, Lambda_ddot, cond_num, cond_num_lm)\n        # end: comment time stepping\n\n        if skip_step:\n            # Use the original time step\n            MB_beam, MB_tstep = mb.split_multibody(\n                self.data.structure,\n                structural_step,\n                MBdict,\n                self.data.ts)\n            # Perform rigid body motions\n            self.integrate_position(MB_beam, MB_tstep, dt)\n            for ibody in range(0, len(MB_tstep)):\n                Temp = np.linalg.inv(np.eye(4) + 0.25*algebra.quadskew(MB_tstep[ibody].for_vel[3:6])*dt)\n                MB_tstep[ibody].quat = np.dot(Temp, np.dot(np.eye(4) - 0.25*algebra.quadskew(MB_tstep[ibody].for_vel[3:6])*dt, MB_tstep[ibody].quat))\n\n        # End of Newmark-beta iterations\n        # self.integrate_position(MB_beam, MB_tstep, dt)\n        lagrangeconstraints.postprocess(self.lc_list, MB_beam, MB_tstep, \"dynamic\")\n        self.compute_forces_constraints(MB_beam, MB_tstep, self.data.ts, dt, Lambda, Lambda_dot)\n        if self.settings['gravity_on']:\n            for ibody in range(len(MB_beam)):\n                xbeamlib.cbeam3_correct_gravity_forces(MB_beam[ibody], MB_tstep[ibody], self.settings)\n        mb.merge_multibody(MB_tstep, MB_beam, self.data.structure, structural_step, MBdict, dt)\n\n        self.Lambda = Lambda.astype(dtype=ct.c_double, copy=True, order='F')\n        self.Lambda_dot = Lambda_dot.astype(dtype=ct.c_double, copy=True, order='F')\n        self.Lambda_ddot = Lambda_ddot.astype(dtype=ct.c_double, copy=True, order='F')\n\n        return self.data\n"
  },
  {
    "path": "sharpy/solvers/nonlineardynamicmultibodyjax.py",
    "content": "import numpy as np\nimport typing\n\nfrom sharpy.utils.solver_interface import solver, solver_from_string\nimport sharpy.utils.settings as settings_utils\nimport sharpy.utils.solver_interface as solver_interface\nimport sharpy.structure.utils.xbeamlib as xbeamlib\nimport sharpy.utils.multibodyjax as mb\nimport sharpy.structure.utils.lagrangeconstraintsjax as lagrangeconstraints\n\n_BaseStructural = solver_from_string('_BaseStructural')\n\n\n@solver\nclass NonLinearDynamicMultibodyJAX(_BaseStructural):\n    \"\"\"\n    Nonlinear dynamic multibody\n\n    Nonlinear dynamic step solver for multibody structures.\n\n    \"\"\"\n    solver_id = 'NonLinearDynamicMultibodyJAX'\n    solver_classification = 'structural'\n\n    settings_types = _BaseStructural.settings_types.copy()\n    settings_default = _BaseStructural.settings_default.copy()\n    settings_description = _BaseStructural.settings_description.copy()\n    settings_options = dict()\n\n    settings_types['time_integrator'] = 'str'\n    settings_default['time_integrator'] = 'NewmarkBetaJAX'\n    settings_description['time_integrator'] = 'Method to perform time integration'\n    settings_options['time_integrator'] = ['NewmarkBetaJAX', 'GeneralisedAlphaJAX']\n\n    settings_types['time_integrator_settings'] = 'dict'\n    settings_default['time_integrator_settings'] = dict()\n    settings_description['time_integrator_settings'] = 'Settings for the time integrator'\n\n    settings_types['jacobian_method'] = 'str'\n    settings_default['jacobian_method'] = 'forward'\n    settings_description['jacobian_method'] = 'Autodifferentiation method used to calculate system jacobians'\n    settings_options['jacobian_method'] = ['forward', 'reverse']\n\n    settings_types['write_lm'] = 'bool'\n    settings_default['write_lm'] = False\n    settings_description['write_lm'] = 'Write lagrange multipliers to file'\n\n    settings_types['relax_factor_lm'] = 'float'\n    settings_default['relax_factor_lm'] = 0.\n    settings_description['relax_factor_lm'] = ('Relaxation factor for Lagrange Multipliers. '\n                                               '0 no relaxation. 1 full relaxation')\n\n    settings_types['allow_skip_step'] = 'bool'\n    settings_default['allow_skip_step'] = False\n    settings_description['allow_skip_step'] = 'Allow skip step when NaN is found while solving the system'\n\n    settings_types['zero_ini_dot_ddot'] = 'bool'\n    settings_default['zero_ini_dot_ddot'] = False\n    settings_description['zero_ini_dot_ddot'] = 'Set to zero the position and crv derivatives at the first time step'\n\n    settings_types['fix_prescribed_quat_ini'] = 'bool'\n    settings_default['fix_prescribed_quat_ini'] = False\n    settings_description['fix_prescribed_quat_ini'] = 'Set to initial the quaternion for prescibed bodies'\n\n    # initial speed direction is given in inertial FOR!!! also in a lot of cases coincident with global A frame\n    settings_types['initial_velocity_direction'] = 'list(float)'\n    settings_default['initial_velocity_direction'] = [-1., 0., 0.]\n    settings_description[\n        'initial_velocity_direction'] = 'Initial velocity of the reference node given in the inertial FOR'\n\n    settings_types['initial_velocity'] = 'float'\n    settings_default['initial_velocity'] = 0\n    settings_description['initial_velocity'] = 'Initial velocity magnitude of the reference node'\n\n    # restart sim after dynamictrim\n    settings_types['dyn_trim'] = 'bool'\n    settings_default['dyn_trim'] = False\n    settings_description['dyn_trim'] = 'flag for dyntrim prior to dyncoup'\n\n    settings_table = settings_utils.SettingsTable()\n    __doc__ += settings_table.generate(settings_types, settings_default, settings_description)\n\n    def __init__(self):\n        self.data = None\n        self.settings = None\n\n        self.sys_size: typing.Optional[int] = None  # total number of unknowns in the system\n        self.num_lm_tot: typing.Optional[int] = None  # total number of LMs in the system\n        self.num_eq_tot: typing.Optional[int] = None\n\n        # Total number of equations associated to the Lagrange multipliers\n        self.lc_list: typing.Optional[list[lagrangeconstraints.Constraint]] = None\n        self.num_lm_eq: typing.Optional[int] = None\n        self.lambda_h: typing.Optional[np.ndarray] = None\n        self.lambda_n: typing.Optional[np.ndarray] = None\n\n        # function called to generate contributions of all LMs to equations\n        self.lc_all_run: typing.Optional[typing.Callable] = None\n\n        self.gamma: typing.Optional[int] = None\n        self.beta: typing.Optional[int] = None\n        self.prev_dq: typing.Optional[np.ndarray] = None\n\n        self.time_integrator = None\n\n        self.out_files = None  # dict: containing output_variable:file_path if desired to write output\n\n    def initialise(self, data, custom_settings=None, restart=False):\n        self.data = data\n        if custom_settings is None:\n            self.settings = data.settings[self.solver_id]\n        else:\n            self.settings = custom_settings\n        settings_utils.to_custom_types(self.settings, self.settings_types, self.settings_default,\n                                       self.settings_options, no_ctype=True)\n\n        # load info from dyn dictionary\n        self.data.structure.add_unsteady_information(self.data.structure.dyn_dict, self.settings['num_steps'])\n\n        if self.settings['initial_velocity']:\n            new_direction = (self.data.structure.timestep_info[-1].cag()\n                             @ self.settings['initial_velocity_direction'] * self.settings['initial_velocity'])\n            self.data.structure.timestep_info[-1].for_vel[:3] = new_direction\n            num_body = self.data.structure.timestep_info[0].mb_FoR_vel.shape[0]\n            for ibody in range(num_body):\n                self.data.structure.timestep_info[-1].mb_FoR_vel[ibody, :] \\\n                    = self.data.structure.timestep_info[-1].for_vel\n\n        # find total number of LC equations\n        dict_of_lc = lagrangeconstraints.DICT_OF_LC\n        lc_cls_list: list[typing.Type[lagrangeconstraints.Constraint]] = []\n        lc_settings: list[dict] = []\n        self.num_lm_tot = 0\n        for i in range(self.data.structure.ini_mb_dict['num_constraints']):\n            lc_settings.append(self.data.structure.ini_mb_dict[f'constraint_{i:02d}'])\n            lc_cls_list.append(dict_of_lc[lc_settings[-1]['behaviour']])\n            self.num_lm_tot += lc_cls_list[-1].get_n_lm()\n\n        # find total number of equations\n        mb_dict = self.data.structure.ini_mb_dict\n        self.sys_size = self.data.structure.num_dof.value\n        for ibody in range(self.data.structure.num_bodies):\n            if mb_dict[f'body_{ibody:02d}']['FoR_movement'] == 'free':\n                self.sys_size += 10\n        self.num_eq_tot = self.sys_size + self.num_lm_tot\n\n        i_start_lc = 0\n        self.lc_list = []\n        for i_lc, lc_cls in enumerate(lc_cls_list):\n            self.lc_list.append(lc_cls(self, i_start_lc, lc_settings[i_lc]))\n            i_start_lc += self.lc_list[-1].num_lm\n\n        # create a single function for all constraints\n        self.lc_all_run = lagrangeconstraints.combine_constraints(self.lc_list)\n\n        # lambda values\n        self.lambda_h = np.zeros(self.num_lm_tot)\n        self.lambda_n = np.zeros(self.num_lm_tot)\n\n        self.prev_dq = np.zeros(self.sys_size + self.num_lm_tot)\n\n        try:\n            self.num_lm_eq = self.lc_list[0].num_lm_tot\n        except IndexError:\n            self.num_lm_eq = 0\n\n        self.settings['time_integrator_settings']['sys_size'] = self.sys_size\n        self.settings['time_integrator_settings']['num_LM_eq'] = self.num_lm_eq\n\n        # Initialise time integrator\n        if not restart:\n            self.time_integrator = solver_interface.initialise_solver(self.settings['time_integrator'])\n\n        self.time_integrator.initialise(self.data, self.settings['time_integrator_settings'], restart=restart)\n\n\n    def assembly_mb_eq_system(self, mb_beam, mb_tstep, ts, dt, lambda_h, lambda_n, mb_dict, mb_prescribed_dict):\n        \"\"\"\n        This function generates the matrix and vector associated to the linear system to solve a structural iteration\n        It usses a Newmark-beta scheme for time integration. Being M, C and K the mass, damping\n        and stiffness matrices of the system:\n\n        .. math::\n            MB_Asys = mb_k + mb_c \\frac{\\gamma}{\\beta dt} + \\frac{1}{\\beta dt^2} mb_m\n\n        Args:\n            mb_beam (list(:class:`~sharpy.structure.models.beam.Beam`)): each entry represents a body\n            mb_tstep (list(:class:`~sharpy.utils.datastructures.StructTimeStepInfo`)): each entry represents a body\n            ts (int): Time step number\n            dt(int): time step\n            lambda_ (np.ndarray): Lagrange Multipliers array\n            lambda_dot (np.ndarray): Time derivarive of ``Lambda``\n            mb_dict (dict): Dictionary including the multibody information\n\n        Returns:\n            MB_Asys (np.ndarray): Matrix of the systems of equations\n            mb_q (np.ndarray): Vector of the systems of equations\n        \"\"\"\n\n        mb_m = np.zeros((self.num_eq_tot, self.num_eq_tot))\n        mb_c = np.zeros((self.num_eq_tot, self.num_eq_tot))\n        mb_k = np.zeros((self.num_eq_tot, self.num_eq_tot))\n        mb_rhs = np.zeros(self.num_eq_tot)\n\n        first_dof = 0\n        for ibody in range(len(mb_beam)):\n            # Generate the matrices for each body\n            if mb_beam[ibody].FoR_movement in ('prescribed', 'prescribed_trim'):\n                last_dof = first_dof + mb_beam[ibody].num_dof.value\n                m, c, k, rhs = xbeamlib.cbeam3_asbly_dynamic(mb_beam[ibody], mb_tstep[ibody], self.settings)\n            elif mb_beam[ibody].FoR_movement == 'free':\n                last_dof = first_dof + mb_beam[ibody].num_dof.value + 10\n                m, c, k, rhs = xbeamlib.xbeam3_asbly_dynamic(mb_beam[ibody], mb_tstep[ibody], self.settings)\n            else:\n                raise KeyError(f\"Body FoR movement {mb_beam[ibody].FoR_movement} is invalid\")\n\n            mb_m[first_dof:last_dof, first_dof:last_dof] = m\n            mb_c[first_dof:last_dof, first_dof:last_dof] = c\n            mb_k[first_dof:last_dof, first_dof:last_dof] = k\n            mb_rhs[first_dof:last_dof] = rhs\n\n            first_dof = last_dof\n\n        q = np.hstack([beam.q for beam in mb_tstep])\n        q_dot = np.hstack([beam.dqdt for beam in mb_tstep])\n\n        u = []\n        u_dot = []\n        for i_lc in range(len(self.lc_list)):\n            try:\n                ctrl_id = self.lc_list[i_lc].settings['controller_id'].decode('UTF-8')\n                u.append(mb_prescribed_dict[ctrl_id]['psi'])\n                u_dot.append(mb_prescribed_dict[ctrl_id]['psi_dot'])\n            except KeyError:\n                u.append(None)\n                u_dot.append(None)\n\n        lc_c, lc_k, lc_rhs = self.call_lm_generate(q, q_dot, u, u_dot, lambda_h, lambda_n)\n\n        mb_c += lc_c\n        mb_k += lc_k\n        mb_rhs += lc_rhs\n\n        return mb_m, mb_c, mb_k, mb_rhs\n\n    # added to make profiling easier\n    def call_lm_generate(self, *args):\n        return self.lc_all_run(*args)\n\n    def integrate_position(self, mb_beam, mb_tstep, dt):\n        \"\"\"\n        This function integrates the position of each local A FoR after the\n        structural iteration has been solved.\n\n        It uses a Newmark-beta approximation.\n\n        Args:\n            mb_beam (list(:class:`~sharpy.structure.models.beam.Beam`)): each entry represents a body\n            mb_tstep (list(:class:`~sharpy.utils.datastructures.StructTimeStepInfo`)): each entry represents a body\n            dt(int): time step\n        \"\"\"\n        vel = np.zeros(6)\n        acc = np.zeros(6)\n        for ibody in range(len(mb_tstep)):\n            acc[:3] = ((0.5 - self.beta) * mb_beam[ibody].timestep_info.cga()\n                        @ mb_beam[ibody].timestep_info.for_acc[:3] + self.beta * mb_tstep[ibody].cga()\n                        @ mb_tstep[ibody].for_acc[:3])\n            vel[:3] = mb_beam[ibody].timestep_info.cga() @ mb_beam[ibody].timestep_info.for_vel[:3]\n            mb_tstep[ibody].for_pos[:3] += dt * (vel[:3] + dt * acc[:3])\n\n    def extract_resultants(self, tstep):\n        if tstep is None:\n            tstep = self.data.structure.timestep_info[self.data.ts]\n        steady, unsteady, grav = tstep.extract_resultants(self.data.structure,\n                                                          force_type=['steady', 'unsteady', 'grav'])\n        totals = steady + unsteady + grav\n        return totals[:3], totals[3:6]\n\n    def run(self, **kwargs):\n        structural_step = settings_utils.set_value_or_default(kwargs, 'structural_step',\n                                                              self.data.structure.timestep_info[-1])\n        dt = settings_utils.set_value_or_default(kwargs, 'dt', self.settings['dt'])\n\n        if structural_step.mb_dict is not None:\n            mb_dict = structural_step.mb_dict\n        else:\n            mb_dict = self.data.structure.ini_mb_dict\n\n        mb_prescribed_dict = structural_step.mb_prescribed_dict\n        mb_beam, mb_tstep = mb.split_multibody(self.data.structure, structural_step, mb_dict, self.data.ts)\n\n        if self.data.ts == 1 and self.settings['zero_ini_dot_ddot']:\n            for ibody in range(len(mb_tstep)):\n                mb_beam[ibody].ini_info.pos_dot.fill(0.)\n                mb_beam[ibody].ini_info.pos_ddot.fill(0.)\n                mb_beam[ibody].ini_info.psi_dot.fill(0.)\n                mb_beam[ibody].ini_info.psi_dot_local.fill(0.)\n                mb_beam[ibody].ini_info.psi_ddot.fill(0.)\n                mb_tstep[ibody].pos_dot.fill(0.)\n                mb_tstep[ibody].pos_ddot.fill(0.)\n                mb_tstep[ibody].psi_dot.fill(0.)\n                mb_tstep[ibody].psi_dot_local.fill(0.)\n                mb_tstep[ibody].psi_ddot.fill(0.)\n\n        # Predictor step\n        q, dqdt, dqddt = mb.disp_and_accel2state(mb_beam, mb_tstep, self.lambda_h, self.lambda_n,\n                                                 self.sys_size, self.num_lm_eq)\n        self.time_integrator.predictor(q, dqdt, dqddt)\n\n        res_sys = 0.\n        res_lm = 0.\n\n        for iteration in range(self.settings['max_iterations']):\n            if iteration == self.settings['max_iterations'] - 1:   # Check if the maximum of iterations has been reached\n                print(f'Solver did not converge in {iteration} iterations.\\n res_sys = {res_sys} \\n res_lm = {res_lm}')\n                break\n\n            # Update positions and velocities\n            lambda_h, lambda_n = mb.state2disp_and_accel(q, dqdt, dqddt, mb_beam, mb_tstep, self.num_lm_eq)\n\n            mb_m, mb_c, mb_k, mb_rhs = self.assembly_mb_eq_system(mb_beam, mb_tstep, self.data.ts, dt, lambda_h,\n                                                                  lambda_n, mb_dict, mb_prescribed_dict)\n\n            a_sys = self.time_integrator.build_matrix(mb_m, mb_c, mb_k)\n\n            dq = np.linalg.solve(a_sys, -mb_rhs)\n\n            # Relaxation\n            relax_dq = np.zeros_like(dq)\n            relax_dq[:self.sys_size] = dq[:self.sys_size].copy()\n            relax_dq[self.sys_size:] = ((1. - self.settings['relax_factor_lm']) * dq[self.sys_size:] +\n                                        self.settings['relax_factor_lm'] * self.prev_dq[self.sys_size:])\n            self.prev_dq = dq.copy()\n\n            # Corrector step\n            self.time_integrator.corrector(q, dqdt, dqddt, relax_dq)\n\n            res_sys = np.max(np.abs(dq[:self.sys_size]))\n            try:\n                res_lm = np.max(np.abs(dq[self.sys_size:]))\n            except ValueError:\n                res_lm = 0.\n            if iteration > 0 and (res_sys < self.settings['min_delta']) and (res_lm < self.settings['min_delta']):\n                break\n\n        lambda_h, lambda_n = mb.state2disp_and_accel(q, dqdt, dqddt, mb_beam, mb_tstep, self.num_lm_eq)\n\n        for lc in self.lc_list:\n            lc.postprocess(mb_beam, mb_tstep)\n\n        # End of Newmark-beta iterations\n        if self.settings['gravity_on']:\n            for ibody in range(len(mb_beam)):\n                xbeamlib.cbeam3_correct_gravity_forces(mb_beam[ibody], mb_tstep[ibody], self.settings)\n        mb.merge_multibody(mb_tstep, mb_beam, self.data.structure, structural_step, mb_dict, dt)\n\n        self.lambda_h = lambda_h\n        self.lambda_n = lambda_n\n        self.data.Lambda = lambda_h\n        self.data.Lambda_dot = lambda_n\n\n        return self.data\n\n    def add_step(self):\n        self.data.structure.next_step()\n\n    def next_step(self):\n        raise NotImplementedError\n"
  },
  {
    "path": "sharpy/solvers/nonlineardynamicprescribedstep.py",
    "content": "\"\"\"\n@modified   Alfonso del Carre\n\"\"\"\n\nimport sharpy.structure.utils.xbeamlib as xbeamlib\nfrom sharpy.utils.solver_interface import solver, BaseSolver, solver_from_string\nimport sharpy.utils.settings as settings_utils\n\n_BaseStructural = solver_from_string('_BaseStructural')\n\n\n@solver\nclass NonLinearDynamicPrescribedStep(_BaseStructural):\n    \"\"\"\n    Structural solver used for the dynamic simulation of clamped structures or those subject to a prescribed motion.\n\n    This solver provides an interface to the structural library (``xbeam``) and updates the structural parameters\n    for every k-th step in the FSI iteration.\n\n    This solver can be called as part of a standalone structural simulation or as the structural solver of a coupled\n    aeroelastic simulation.\n\n    \"\"\"\n\n    solver_id = 'NonLinearDynamicPrescribedStep'\n    solver_classification = 'structural'\n\n    settings_types = _BaseStructural.settings_types.copy()\n    settings_default = _BaseStructural.settings_default.copy()\n    settings_description = _BaseStructural.settings_description.copy()\n\n    settings_table = settings_utils.SettingsTable()\n    __doc__ += settings_table.generate(settings_types, settings_default, settings_description)\n\n    def __init__(self):\n        self.data = None\n        self.settings = None\n\n    def initialise(self, data, custom_settings=None, restart=False):\n        self.data = data\n        if custom_settings is None:\n            self.settings = data.settings[self.solver_id]\n        else:\n            self.settings = custom_settings\n        settings_utils.to_custom_types(self.settings, self.settings_types, self.settings_default)\n\n        # load info from dyn dictionary\n        self.data.structure.add_unsteady_information(self.data.structure.dyn_dict, self.settings['num_steps'])\n\n    def run(self, **kwargs):\n        structural_step = settings_utils.set_value_or_default(kwargs, 'structural_step',\n                                                              self.data.structure.timestep_info[-1])\n        dt = settings_utils.set_value_or_default(kwargs, 'dt', self.settings['dt'])\n\n        if self.data.ts > 0:\n            try:\n                structural_step.for_vel[:] = self.data.structure.dynamic_input[self.data.ts - 1]['for_vel']\n                structural_step.for_acc[:] = self.data.structure.dynamic_input[self.data.ts - 1]['for_acc']\n            except IndexError:\n                pass\n\n        xbeamlib.cbeam3_step_nlndyn(self.data.structure,\n                                    self.settings,\n                                    self.data.ts,\n                                    structural_step,\n                                    dt=dt)\n\n        self.data.structure.integrate_position(structural_step, dt)\n        return self.data\n\n    def add_step(self):\n        self.data.structure.next_step()\n\n    def next_step(self):\n        pass\n\n    def extract_resultants(self, tstep=None):\n        if tstep is None:\n            tstep = self.data.structure.timestep_info[self.data.ts]\n        steady, unsteady, grav = tstep.extract_resultants(self.data.structure,\n                                                          force_type=['steady', 'unsteady', 'grav'])\n        totals = steady + unsteady + grav\n        return totals[0:3], totals[3:6]\n\n    def update(self, tstep=None):\n        self.create_q_vector(tstep)\n\n    def create_q_vector(self, tstep=None):\n        import sharpy.structure.utils.xbeamlib as xb\n        if tstep is None:\n            tstep = self.data.structure.timestep_info[-1]\n\n        xb.xbeam_solv_disp2state(self.data.structure, tstep)\n"
  },
  {
    "path": "sharpy/solvers/nonlinearstatic.py",
    "content": "import numpy as np\n\nimport sharpy.structure.utils.xbeamlib as xbeamlib\nimport sharpy.utils.settings as settings_utils\nfrom sharpy.utils.solver_interface import solver, BaseSolver, solver_from_string\n\n_BaseStructural = solver_from_string('_BaseStructural')\n\n@solver\nclass NonLinearStatic(_BaseStructural):\n    \"\"\"\n    Structural solver used for the static simulation of free-flying structures.\n\n    This solver provides an interface to the structural library (``xbeam``) and updates the structural parameters\n    for every k-th step of the FSI iteration.\n\n    This solver can be called as part of a standalone structural simulation or as the structural solver of a coupled\n    static aeroelastic simulation.\n\n    \"\"\"\n    solver_id = 'NonLinearStatic'\n    solver_classification = 'structural'\n\n    # settings list\n    settings_types = _BaseStructural.settings_types.copy()\n    settings_default = _BaseStructural.settings_default.copy()\n    settings_description = _BaseStructural.settings_description.copy()\n\n    settings_types['initial_position'] = 'list(float)'\n    settings_default['initial_position'] = np.array([0.0, 0.0, 0.0])\n    \n    settings_types['initial_velocity'] = 'list(float)'\n    settings_default['initial_velocity'] = np.array([0., 0., 0., 0., 0., 0.])\n\n    settings_table = settings_utils.SettingsTable()\n    __doc__ += settings_table.generate(settings_types, settings_default, settings_description)\n\n    def __init__(self):\n        self.data = None\n        self.settings = None\n\n    def initialise(self, data, custom_settings=None, restart=False):\n        self.data = data\n        if custom_settings is None:\n            self.settings = data.settings[self.solver_id]\n        else:\n            self.settings = custom_settings\n        settings_utils.to_custom_types(self.settings, self.settings_types, self.settings_default, no_ctype=True)\n\n    def run(self, **kwargs):\n        self.data.structure.timestep_info[self.data.ts].for_pos[0:3] = self.settings['initial_position']\n        self.data.structure.timestep_info[self.data.ts].for_vel = self.settings['initial_velocity'].copy()\n        xbeamlib.cbeam3_solv_nlnstatic(self.data.structure, self.settings, self.data.ts)\n        self.extract_resultants()\n        return self.data\n\n    def next_step(self):\n        self.data.structure.next_step()\n\n    def extract_resultants(self, tstep=None):\n        if tstep is None:\n            tstep = self.data.structure.timestep_info[self.data.ts]\n        steady, grav = tstep.extract_resultants(self.data.structure, force_type=['steady', 'grav'])\n        totals = steady + grav\n        return totals[0:3], totals[3:6]\n\n    def update(self, tstep=None):\n        self.create_q_vector(tstep)\n\n    def create_q_vector(self, tstep=None):\n        import sharpy.structure.utils.xbeamlib as xb\n        if tstep is None:\n            tstep = self.data.structure.timestep_info[-1]\n\n        xb.xbeam_solv_disp2state(self.data.structure, tstep)\n\n\n"
  },
  {
    "path": "sharpy/solvers/nostructural.py",
    "content": "import numpy as np\n\nimport sharpy.utils.settings as settings_utils\nfrom sharpy.utils.solver_interface import solver, BaseSolver, solver_from_string\n\n_BaseStructural = solver_from_string('_BaseStructural')\n\n@solver\nclass NoStructural(_BaseStructural):\n    \"\"\"\n    Structural solver used for the static simulation of free-flying structures.\n\n    This solver provides an interface to the structural library (``xbeam``) and updates the structural parameters\n    for every k-th step of the FSI iteration.\n\n    This solver can be called as part of a standalone structural simulation or as the structural solver of a coupled\n    static aeroelastic simulation.\n\n    \"\"\"\n    solver_id = 'NoStructural'\n    solver_classification = 'structural'\n\n    # settings list\n    settings_types = _BaseStructural.settings_types.copy()\n    settings_default = _BaseStructural.settings_default.copy()\n    settings_description = _BaseStructural.settings_description.copy()\n\n    settings_types['initial_position'] = 'list(float)'\n    settings_default['initial_position'] = np.array([0.0, 0.0, 0.0])\n\n    settings_table = settings_utils.SettingsTable()\n    __doc__ += settings_table.generate(settings_types, settings_default, settings_description)\n\n    def __init__(self):\n        self.data = None\n        self.settings = None\n\n    def initialise(self, data, custom_settings=None, restart=False):\n        self.data = data\n        if custom_settings is None:\n            self.settings = data.settings[self.solver_id]\n        else:\n            self.settings = custom_settings\n        settings_utils.to_custom_types(self.settings, self.settings_types, self.settings_default)\n\n    def run(self, **kwargs):\n        self.data.structure.timestep_info[self.data.ts].for_pos[0:3] = self.settings['initial_position']\n        self.extract_resultants()\n        return self.data\n\n    def next_step(self):\n        self.data.structure.next_step()\n\n    def extract_resultants(self, tstep=None):\n        if tstep is None:\n            tstep = self.data.structure.timestep_info[self.data.ts]\n        steady, grav = tstep.extract_resultants(self.data.structure, force_type=['steady', 'grav'])\n        totals = steady + grav\n        return totals[0:3], totals[3:6]\n\n    def update(self, tstep=None):\n        self.create_q_vector(tstep)\n\n    def create_q_vector(self, tstep=None):\n        import sharpy.structure.utils.xbeamlib as xb\n        if tstep is None:\n            tstep = self.data.structure.timestep_info[-1]\n\n        xb.xbeam_solv_disp2state(self.data.structure, tstep)\n\n\n"
  },
  {
    "path": "sharpy/solvers/prescribeduvlm.py",
    "content": "import sharpy.utils.settings as settings_utils\nfrom sharpy.utils.solver_interface import solver, BaseSolver\nimport sharpy.utils.solver_interface as solver_interface\nimport sharpy.utils.cout_utils as cout\nfrom sharpy.utils.constants import vortex_radius_def\n\n\n@solver\nclass PrescribedUvlm(BaseSolver):\n    \"\"\"\n    This class runs a prescribed rigid body motion simulation of a rigid\n    aerodynamic body.\n    \"\"\"\n    solver_id = 'PrescribedUvlm'\n    solver_classification = 'Aero'\n\n    settings_types = dict()\n    settings_default = dict()\n    settings_description = dict()\n\n    settings_types['print_info'] = 'bool'\n    settings_default['print_info'] = True\n    settings_description['print_info'] = 'Write status to screen'\n\n    settings_types['structural_solver'] = 'str'\n    settings_default['structural_solver'] = None\n    settings_description['structural_solver'] = 'Structural solver to use in the coupled simulation'\n\n    settings_types['structural_solver_settings'] = 'dict'\n    settings_default['structural_solver_settings'] = None\n    settings_description['structural_solver_settings'] = 'Dictionary of settings for the structural solver'\n\n    settings_types['aero_solver'] = 'str'\n    settings_default['aero_solver'] = None\n    settings_description['aero_solver'] = 'Aerodynamic solver to use in the coupled simulation'\n\n    settings_types['aero_solver_settings'] = 'dict'\n    settings_default['aero_solver_settings'] = None\n    settings_description['aero_solver_settings'] = 'Dictionary of settings for the aerodynamic solver'\n\n    settings_types['n_time_steps'] = 'int'\n    settings_default['n_time_steps'] = None\n    settings_description['n_time_steps'] = 'Number of time steps for the simulation'\n\n    settings_types['dt'] = 'float'\n    settings_default['dt'] = None\n    settings_description['dt'] = 'Time step'\n\n    settings_types['postprocessors'] = 'list(str)'\n    settings_default['postprocessors'] = list()\n    settings_description['postprocessors'] = 'List of the postprocessors to run at the end of every time step'\n\n    settings_types['postprocessors_settings'] = 'dict'\n    settings_default['postprocessors_settings'] = dict()\n    settings_description['postprocessors_settings'] = 'Dictionary with the applicable settings for every ``postprocessor``. Every ``postprocessor`` needs its entry, even if empty'\n\n    settings_types['cfl1'] = 'bool'\n    settings_default['cfl1'] = True\n    settings_description['cfl1'] = 'If it is ``True``, it assumes that the discretisation complies with CFL=1'\n\n    settings_types['vortex_radius'] = 'float'\n    settings_default['vortex_radius'] = vortex_radius_def\n    settings_description['vortex_radius'] = 'Distance between points below which induction is not computed'\n\n    settings_types['vortex_radius_wake_ind'] = 'float'\n    settings_default['vortex_radius_wake_ind'] = vortex_radius_def\n    settings_description['vortex_radius_wake_ind'] = 'Distance between points below which induction is not computed in the wake convection'\n\n    settings_table = settings_utils.SettingsTable()\n    __doc__ += settings_table.generate(settings_types, settings_default, settings_description)\n\n    def __init__(self):\n        self.data = None\n        self.settings = None\n        self.structural_solver = None\n        self.aero_solver = None\n\n        self.previous_force = None\n\n        self.dt = 0.\n        self.postprocessors = dict()\n        self.with_postprocessors = False\n\n    def initialise(self, data, restart=False):\n        self.data = data\n        self.settings = data.settings[self.solver_id]\n        settings_utils.to_custom_types(self.settings, self.settings_types, self.settings_default)\n        self.dt = self.settings['dt']\n\n        self.aero_solver = solver_interface.initialise_solver(self.settings['aero_solver'])\n        self.aero_solver.initialise(self.data, self.settings['aero_solver_settings'])\n        self.data = self.aero_solver.data\n\n        # if there's data in timestep_info[>0], copy the last one to\n        # timestep_info[0] and remove the rest\n        self.cleanup_timestep_info()\n\n        # initialise postprocessors\n        self.postprocessors = dict()\n        if len(self.settings['postprocessors']) > 0:\n            self.with_postprocessors = True\n        for postproc in self.settings['postprocessors']:\n            self.postprocessors[postproc] = solver_interface.initialise_solver(postproc)\n            self.postprocessors[postproc].initialise(\n                self.data, self.settings['postprocessors_settings'][postproc], caller=self,\n                restart=restart)\n\n        self.residual_table = cout.TablePrinter(2, 14, ['g', 'f'])\n        self.residual_table.field_length[0] = 6\n        self.residual_table.field_length[1] = 6\n        self.residual_table.print_header(['ts', 't'])\n\n    def cleanup_timestep_info(self):\n        if len(self.data.aero.timestep_info) > 1:\n            # copy last info to first\n            self.data.aero.timestep_info[0] = self.data.aero.timestep_info[-1]\n            # delete all the rest\n            while len(self.data.aero.timestep_info) - 1:\n                del self.data.aero.timestep_info[-1]\n\n        self.data.ts = 0\n\n    def increase_ts(self):\n        self.data.structure.next_step()\n        self.aero_solver.add_step()\n\n    def run(self, **kwargs):\n        structural_kstep = self.data.structure.ini_info.copy()\n\n        # dynamic simulations start at tstep == 1, 0 is reserved for the initial state\n        for self.data.ts in range(1, self.settings['n_time_steps'] + 1):\n            aero_kstep = self.data.aero.timestep_info[-1].copy()\n            structural_kstep = self.data.structure.timestep_info[-1].copy()\n            ts = len(self.data.structure.timestep_info) - 1\n            if ts > 0:\n                self.data.structure.timestep_info[ts].for_vel[:] = self.data.structure.dynamic_input[ts - 1]['for_vel']\n                self.data.structure.timestep_info[ts].for_acc[:] = self.data.structure.dynamic_input[ts - 1]['for_acc']\n\n            self.data.structure.next_step()\n            self.data.structure.integrate_position(self.data.ts, self.settings['dt'])\n\n            self.aero_solver.add_step()\n            self.data.aero.timestep_info[-1] = aero_kstep.copy()\n            self.aero_solver.update_custom_grid(self.data.structure.timestep_info[-1],\n                                                self.data.aero.timestep_info[-1])\n            # run the solver\n            self.data = self.aero_solver.run(self.data.aero.timestep_info[-1],\n                                             self.data.structure.timestep_info[-1],\n                                             self.data.aero.timestep_info[-2],\n                                             convect_wake=True)\n            self.residual_table.print_line([self.data.ts,\n                                            self.data.ts*self.dt])\n\n            # run postprocessors\n            if self.with_postprocessors:\n                for postproc in self.postprocessors:\n                    self.data = self.postprocessors[postproc].run(online=True)\n\n        return self.data\n"
  },
  {
    "path": "sharpy/solvers/rigiddynamiccoupledstep.py",
    "content": "import sharpy.structure.utils.xbeamlib as xbeamlib\nfrom sharpy.utils.solver_interface import solver, BaseSolver, solver_from_string\nimport sharpy.utils.settings as settings_utils\n\n\n_BaseStructural = solver_from_string('_BaseStructural')\n\n@solver\nclass RigidDynamicCoupledStep(_BaseStructural):\n    \"\"\"\n    Structural solver used for the dynamic simulation of free-flying rigid structures.\n\n    This solver provides an interface to the structural library (``xbeam``) and updates the structural parameters\n    for every k-th step in the FSI iteration.\n\n    This solver can be called as part of a standalone structural simulation or as the structural solver of a coupled\n    aeroelastic simulation.\n\n    \"\"\"\n    solver_id = 'RigidDynamicCoupledStep'\n    solver_classification = 'structural'\n\n    settings_types = _BaseStructural.settings_types.copy()\n    settings_default = _BaseStructural.settings_default.copy()\n    settings_description = _BaseStructural.settings_description.copy()\n\n    settings_types['balancing'] = 'bool'\n    settings_default['balancing'] = False\n\n    settings_types['relaxation_factor'] = 'float'\n    settings_default['relaxation_factor'] = 0.3\n    settings_description['relaxation factor'] = 'Relaxation factor'\n\n    settings_table = settings_utils.SettingsTable()\n    __doc__ += settings_table.generate(settings_types, settings_default, settings_description)\n\n    def __init__(self):\n        self.data = None\n        self.settings = None\n\n    def initialise(self, data, custom_settings=None, restart=False):\n        self.data = data\n        if custom_settings is None:\n            self.settings = data.settings[self.solver_id]\n        else:\n            self.settings = custom_settings\n        settings_utils.to_custom_types(self.settings, self.settings_types, self.settings_default)\n\n        # load info from dyn dictionary\n        self.data.structure.add_unsteady_information(self.data.structure.dyn_dict, self.settings['num_steps'])\n\n        # generate q, dqdt and dqddt\n        xbeamlib.xbeam_solv_disp2state(self.data.structure, self.data.structure.timestep_info[-1])\n\n    def run(self, **kwargs):\n\n        structural_step = settings_utils.set_value_or_default(kwargs, 'structural_step', self.data.structure.timestep_info[-1])\n        # TODO: previous_structural_step never used\n        previous_structural_step = settings_utils.set_value_or_default(kwargs, 'previous_structural_step', self.data.structure.timestep_info[-1])\n        dt= settings_utils.set_value_or_default(kwargs, 'dt', self.settings['dt'])  \n\n        xbeamlib.xbeam_step_coupledrigid(self.data.structure,\n                                         self.settings,\n                                         self.data.ts,\n                                         structural_step,\n                                         dt=dt)\n        self.extract_resultants(structural_step)\n        self.data.structure.integrate_position(structural_step, dt)\n\n        return self.data\n\n    def add_step(self):\n        self.data.structure.next_step()\n\n    def next_step(self):\n        pass\n\n    def extract_resultants(self, tstep=None):\n        if tstep is None:\n            tstep = self.data.structure.timestep_info[self.data.ts]\n        steady, unsteady, grav = tstep.extract_resultants(self.data.structure, force_type=['steady', 'unsteady', 'grav'])\n        totals = steady + unsteady + grav\n        return totals[0:3], totals[3:6]\n\n"
  },
  {
    "path": "sharpy/solvers/rigiddynamicprescribedstep.py",
    "content": "\"\"\"\n@modified   Alfonso del Carre\n\"\"\"\n\nimport numpy as np\n\nimport sharpy.structure.utils.xbeamlib as xbeamlib\nfrom sharpy.utils.solver_interface import solver, BaseSolver, solver_from_string\nimport sharpy.utils.settings as settings_utils\nimport sharpy.utils.algebra as algebra\n\n_BaseStructural = solver_from_string('_BaseStructural')\n\n@solver\nclass RigidDynamicPrescribedStep(BaseSolver):\n    solver_id = 'RigidDynamicPrescribedStep'\n    solver_classification = 'structural'\n\n    settings_types = _BaseStructural.settings_types.copy()\n    settings_default = _BaseStructural.settings_default.copy()\n    settings_description = _BaseStructural.settings_description.copy()\n\n    settings_types['dt'] = 'float'\n    settings_default['dt'] = 0.01\n    settings_description['dt'] = 'Time step of simulation'\n\n    settings_types['num_steps'] = 'int'\n    settings_default['num_steps'] = 500\n    settings_description['num_steps'] = 'Number of timesteps to be run'\n\n    settings_table = settings_utils.SettingsTable()\n    __doc__ += settings_table.generate(settings_types, settings_default, settings_description)\n\n    def __init__(self):\n        self.data = None\n        self.settings = None\n\n    def initialise(self, data, custom_settings=None, restart=False):\n\n        self.data = data\n        if custom_settings is None:\n            self.settings = data.settings[self.solver_id]\n        else:\n            self.settings = custom_settings\n        settings_utils.to_custom_types(self.settings, self.settings_types, self.settings_default)\n\n        # load info from dyn dictionary\n        self.data.structure.add_unsteady_information(self.data.structure.dyn_dict, self.settings['num_steps'])\n\n    def run(self, **kwargs):\n        structural_step = settings_utils.set_value_or_default(kwargs, 'structural_step', self.data.structure.timestep_info[-1])\n        dt= settings_utils.set_value_or_default(kwargs, 'dt', self.settings['dt'])  \n\n        if self.data.ts > 0:\n            try:\n                structural_step.for_vel[:] = self.data.structure.dynamic_input[self.data.ts - 1]['for_vel']\n                structural_step.for_acc[:] = self.data.structure.dynamic_input[self.data.ts - 1]['for_acc']\n            except IndexError:\n                pass\n\n        Temp = np.linalg.inv(np.eye(4) + 0.25*algebra.quadskew(structural_step.for_vel[3:6])*dt)\n        structural_step.quat = np.dot(Temp, np.dot(np.eye(4) - 0.25*algebra.quadskew(structural_step.for_vel[3:6])*dt, structural_step.quat))\n\n        xbeamlib.cbeam3_solv_disp2state(self.data.structure, structural_step)\n\n        self.extract_resultants(structural_step)\n        if self.data.ts > 0:\n            self.data.structure.integrate_position(structural_step, self.settings['dt'])\n        return self.data\n\n    def add_step(self):\n        self.data.structure.next_step()\n\n    def next_step(self):\n        pass\n\n    def extract_resultants(self, tstep=None):\n        if tstep is None:\n            tstep = self.data.structure.timestep_info[self.data.ts]\n        steady, unsteady, grav = tstep.extract_resultants(self.data.structure, force_type=['steady', 'unsteady', 'grav'])\n        totals = steady + unsteady + grav\n        return totals[0:3], totals[3:6]\n\n\n    def update(self, tstep=None):\n        self.create_q_vector(tstep)\n\n    def create_q_vector(self, tstep=None):\n        import sharpy.structure.utils.xbeamlib as xb\n        if tstep is None:\n            tstep = self.data.structure.timestep_info[-1]\n\n        xb.xbeam_solv_disp2state(self.data.structure, tstep)\n"
  },
  {
    "path": "sharpy/solvers/staticcoupled.py",
    "content": "import sys\nimport numpy as np\n\nimport sharpy.aero.utils.mapping as mapping\nimport sharpy.utils.cout_utils as cout\nfrom sharpy.utils.solver_interface import solver, BaseSolver, initialise_solver\n\nimport sharpy.utils.settings as settings_utils\nimport sharpy.utils.algebra as algebra\nimport sharpy.utils.generator_interface as gen_interface\n\n@solver\nclass StaticCoupled(BaseSolver):\n    \"\"\"\n    This class is the main FSI driver for static simulations.\n    It requires a ``structural_solver`` and a ``aero_solver`` to be defined.\n    \"\"\"\n    solver_id = 'StaticCoupled'\n    solver_classification = 'Coupled'\n\n    settings_types = dict()\n    settings_default = dict()\n    settings_description = dict()\n    settings_options = dict()\n\n    settings_types['print_info'] = 'bool'\n    settings_default['print_info'] = True\n    settings_description['print_info'] = 'Write status to screen'\n\n    settings_types['structural_solver'] = 'str'\n    settings_default['structural_solver'] = None\n    settings_description['structural_solver'] = 'Structural solver to use in the coupled simulation'\n\n    settings_types['structural_solver_settings'] = 'dict'\n    settings_default['structural_solver_settings'] = None\n    settings_description['structural_solver_settings'] = 'Dictionary of settings for the structural solver'\n\n    settings_types['aero_solver'] = 'str'\n    settings_default['aero_solver'] = None\n    settings_description['aero_solver'] = 'Aerodynamic solver to use in the coupled simulation'\n\n    settings_types['aero_solver_settings'] = 'dict'\n    settings_default['aero_solver_settings'] = None\n    settings_description['aero_solver_settings'] = 'Dictionary of settings for the aerodynamic solver'\n\n    settings_types['max_iter'] = 'int'\n    settings_default['max_iter'] = 100\n    settings_description['max_iter'] = 'Max iterations in the FSI loop'\n\n    settings_types['n_load_steps'] = 'int'\n    settings_default['n_load_steps'] = 0\n    settings_description['n_load_steps'] = 'Length of ramp for forces and gravity during FSI iteration'\n\n    settings_types['tolerance'] = 'float'\n    settings_default['tolerance'] = 1e-5\n    settings_description['tolerance'] = 'Convergence threshold for the FSI loop'\n\n    settings_types['relaxation_factor'] = 'float'\n    settings_default['relaxation_factor'] = 0.\n    settings_description['relaxation_factor'] = 'Relaxation parameter in the FSI iteration. 0 is no relaxation and -> 1 is very relaxed'\n\n    settings_types['correct_forces_method'] = 'str'\n    settings_default['correct_forces_method'] = ''\n    settings_description['correct_forces_method'] = 'Function used to correct aerodynamic forces. ' \\\n                                                    'See :py:mod:`sharpy.generators.polaraeroforces`'\n    settings_options['correct_forces_method'] = ['EfficiencyCorrection', 'PolarCorrection']\n\n    settings_types['correct_forces_settings'] = 'dict'\n    settings_default['correct_forces_settings'] = {}\n    settings_description['correct_forces_settings'] = 'Settings for corrected forces evaluation'\n\n    settings_types['runtime_generators'] = 'dict'\n    settings_default['runtime_generators'] = dict()\n    settings_description['runtime_generators'] = 'The dictionary keys are the runtime generators to be used. ' \\\n                                                 'The dictionary values are dictionaries with the settings ' \\\n                                                 'needed by each generator.'\n    \n    settings_types['nonlifting_body_interactions'] = 'bool'\n    settings_default['nonlifting_body_interactions'] = False\n    settings_description['nonlifting_body_interactions'] = 'Consider forces induced by nonlifting bodies'\n\n    settings_table = settings_utils.SettingsTable()\n    __doc__ += settings_table.generate(settings_types, settings_default, settings_description, settings_options)\n\n    def __init__(self):\n\n        self.data = None\n        self.settings = None\n        self.structural_solver = None\n        self.aero_solver = None\n\n        self.previous_force = None\n\n        self.residual_table = None\n\n        self.correct_forces = False\n        self.correct_forces_generator = None\n\n        self.runtime_generators = dict()\n        self.with_runtime_generators = False\n\n    def initialise(self, data, input_dict=None, restart=False):\n        self.data = data\n        if input_dict is None:\n            self.settings = data.settings[self.solver_id]\n        else:\n            self.settings = input_dict\n        settings_utils.to_custom_types(self.settings,\n                           self.settings_types,\n                           self.settings_default,\n                           options=self.settings_options,\n                           no_ctype=True)\n\n        self.print_info = self.settings['print_info']\n\n        self.structural_solver = initialise_solver(self.settings['structural_solver'])\n        self.structural_solver.initialise(self.data, self.settings['structural_solver_settings'], restart=restart)\n        self.aero_solver = initialise_solver(self.settings['aero_solver'])\n        self.aero_solver.initialise(self.structural_solver.data, self.settings['aero_solver_settings'], restart=restart)\n        self.data = self.aero_solver.data\n\n        if self.print_info:\n            self.residual_table = cout.TablePrinter(9, 8, ['g', 'g', 'f', 'f', 'f', 'f', 'f', 'f', 'f'])\n            self.residual_table.field_length[0] = 3\n            self.residual_table.field_length[1] = 3\n            self.residual_table.field_length[2] = 10\n            self.residual_table.print_header(['iter', 'step', 'log10(res)', 'Fx', 'Fy', 'Fz', 'Mx', 'My', 'Mz'])\n\n        # Define the function to correct aerodynamic forces\n        if self.settings['correct_forces_method'] != '':\n            self.correct_forces = True\n            self.correct_forces_generator = gen_interface.generator_from_string(self.settings['correct_forces_method'])()\n            self.correct_forces_generator.initialise(in_dict=self.settings['correct_forces_settings'],\n                                                     aero=self.data.aero,\n                                                     structure=self.data.structure,\n                                                     rho=self.settings['aero_solver_settings']['rho'],\n                                                     vortex_radius=self.settings['aero_solver_settings']['vortex_radius'],\n                                                     output_folder = self.data.output_folder)\n\n        # initialise runtime generators\n        self.runtime_generators = dict()\n        if self.settings['runtime_generators']:\n            self.with_runtime_generators = True\n            for rg_id, param in self.settings['runtime_generators'].items():\n                gen = gen_interface.generator_from_string(rg_id)\n                self.runtime_generators[rg_id] = gen()\n                self.runtime_generators[rg_id].initialise(param, data=self.data, restart=restart)\n\n    def increase_ts(self):\n        self.data.ts += 1\n        self.structural_solver.next_step()\n        self.aero_solver.next_step()\n\n    def cleanup_timestep_info(self):\n        if max(len(self.data.aero.timestep_info), len(self.data.structure.timestep_info)) > 1:\n            self.remove_old_timestep_info(self.data.structure.timestep_info)\n            self.remove_old_timestep_info(self.data.aero.timestep_info)            \n            if self.settings['nonlifting_body_interactions']:\n                self.remove_old_timestep_info(self.data.nonlifting_body.timestep_info)\n\n        self.data.ts = 0\n\n    def remove_old_timestep_info(self, tstep_info):\n        # copy last info to first\n        tstep_info[0] = tstep_info[-1].copy()\n        # delete all the rest\n        while len(tstep_info) - 1:\n            del tstep_info[-1]\n\n    def run(self, **kwargs):\n        for i_step in range(self.settings['n_load_steps'] + 1):\n            if (i_step == self.settings['n_load_steps'] and\n                    self.settings['n_load_steps'] > 0):\n                break\n            # load step coefficient\n            if not self.settings['n_load_steps'] == 0:\n                load_step_multiplier = (i_step + 1.0)/self.settings['n_load_steps']\n            else:\n                load_step_multiplier = 1.0\n\n            # new storage every load step\n            if i_step > 0:\n                self.increase_ts()\n\n            for i_iter in range(self.settings['max_iter']):\n                # run aero\n                self.data = self.aero_solver.run()\n\n                # map force\n                struct_forces = mapping.aero2struct_force_mapping(\n                    self.data.aero.timestep_info[self.data.ts].forces,\n                    self.data.aero.struct2aero_mapping,\n                    self.data.aero.timestep_info[self.data.ts].zeta,\n                    self.data.structure.timestep_info[self.data.ts].pos,\n                    self.data.structure.timestep_info[self.data.ts].psi,\n                    self.data.structure.node_master_elem,\n                    self.data.structure.connectivities,\n                    self.data.structure.timestep_info[self.data.ts].cag(),\n                    self.data.aero.data_dict)\n                        \n                if self.correct_forces:\n                    struct_forces = \\\n                        self.correct_forces_generator.generate(aero_kstep=self.data.aero.timestep_info[self.data.ts],\n                                                               structural_kstep=self.data.structure.timestep_info[self.data.ts],\n                                                               struct_forces=struct_forces,\n                                                               ts=0)\n\n                # map nonlifting forces to structural nodes\n                if self.settings['nonlifting_body_interactions']:\n                    struct_forces += mapping.aero2struct_force_mapping(\n                        self.data.nonlifting_body.timestep_info[self.data.ts].forces,\n                        self.data.nonlifting_body.struct2aero_mapping,\n                        self.data.nonlifting_body.timestep_info[self.data.ts].zeta,\n                        self.data.structure.timestep_info[self.data.ts].pos,\n                        self.data.structure.timestep_info[self.data.ts].psi,\n                        self.data.structure.node_master_elem,\n                        self.data.structure.connectivities,\n                        self.data.structure.timestep_info[self.data.ts].cag(),\n                        self.data.nonlifting_body.data_dict,\n                        skip_moments_generated_by_forces = True)\n\n                self.data.aero.timestep_info[self.data.ts].aero_steady_forces_beam_dof = struct_forces\n                self.data.structure.timestep_info[self.data.ts].postproc_node['aero_steady_forces'] = struct_forces  # B\n                \n                # Add external forces\n                if self.with_runtime_generators:\n                    self.data.structure.timestep_info[self.data.ts].runtime_steady_forces.fill(0.)\n                    self.data.structure.timestep_info[self.data.ts].runtime_unsteady_forces.fill(0.)\n                    params = dict()\n                    params['data'] = self.data\n                    params['struct_tstep'] = self.data.structure.timestep_info[self.data.ts]\n                    params['aero_tstep'] = self.data.aero.timestep_info[self.data.ts]\n                    params['fsi_substep'] = -i_iter\n                    for id, runtime_generator in self.runtime_generators.items():\n                        runtime_generator.generate(params)\n\n                    struct_forces += self.data.structure.timestep_info[self.data.ts].runtime_steady_forces\n                    struct_forces += self.data.structure.timestep_info[self.data.ts].runtime_unsteady_forces\n\n                if not self.settings['relaxation_factor'] == 0.:\n                    if i_iter == 0:\n                        self.previous_force = struct_forces.copy()\n\n                    temp = struct_forces.copy()\n                    struct_forces = ((1.0 - self.settings['relaxation_factor'])*struct_forces +\n                                     self.settings['relaxation_factor']*self.previous_force)\n                    self.previous_force = temp\n\n                # copy force in beam\n                old_g = self.structural_solver.settings['gravity']\n                self.structural_solver.settings['gravity'] = old_g*load_step_multiplier\n                temp1 = load_step_multiplier*(struct_forces + self.data.structure.ini_info.steady_applied_forces)\n                self.data.structure.timestep_info[self.data.ts].steady_applied_forces[:] = temp1\n                # run beam\n                self.data = self.structural_solver.run()\n                self.structural_solver.settings['gravity'] = old_g\n                (self.data.structure.timestep_info[self.data.ts].total_forces[0:3],\n                 self.data.structure.timestep_info[self.data.ts].total_forces[3:6]) = (\n                        self.extract_resultants(self.data.structure.timestep_info[self.data.ts]))\n\n                # update grid\n                self.aero_solver.update_step()\n\n                self.structural_solver.update(self.data.structure.timestep_info[self.data.ts])\n                # convergence\n                if self.convergence(i_iter, i_step):\n                    # create q and dqdt vectors\n                    self.structural_solver.update(self.data.structure.timestep_info[self.data.ts])\n                    self.cleanup_timestep_info()\n                    break\n\n        return self.data\n\n    def convergence(self, i_iter, i_step):\n        if i_iter == self.settings['max_iter'] - 1:\n            cout.cout_wrap('StaticCoupled did not converge!', 0)\n            # quit(-1)\n\n        return_value = None\n        if i_iter == 0:\n            self.initial_residual = np.linalg.norm(self.data.structure.timestep_info[self.data.ts].pos)\n            self.previous_residual = self.initial_residual\n            self.current_residual = self.initial_residual\n            if self.print_info:\n                forces = self.data.structure.timestep_info[self.data.ts].total_forces\n                self.residual_table.print_line([i_iter,\n                        i_step,\n                        0.0,\n                        forces[0],\n                        forces[1],\n                        forces[2],\n                        forces[3],\n                        forces[4],\n                        forces[5],\n                        ])\n            return False\n\n        self.current_residual = np.linalg.norm(self.data.structure.timestep_info[self.data.ts].pos)\n        if self.print_info:\n            forces = self.data.structure.timestep_info[self.data.ts].total_forces\n            res_print = np.NINF\n            if (np.abs(self.current_residual - self.previous_residual) >\n                sys.float_info.epsilon*10):\n                res_print = np.log10(np.abs(self.current_residual - self.previous_residual)/self.initial_residual)\n\n            self.residual_table.print_line([i_iter,\n                    i_step,\n                    res_print,\n                    forces[0],\n                    forces[1],\n                    forces[2],\n                    forces[3],\n                    forces[4],\n                    forces[5],\n                    ])\n\n        if return_value is None:\n            if np.abs(self.current_residual - self.previous_residual)/self.initial_residual < self.settings['tolerance']:\n                return_value = True\n            else:\n                self.previous_residual = self.current_residual\n                return_value = False\n\n        if return_value is None:\n            return_value = False\n\n        return return_value\n\n    def change_trim(self, alpha, thrust, thrust_nodes, tail_deflection, tail_cs_index):\n        # self.cleanup_timestep_info()\n        self.data.structure.timestep_info = []\n        self.data.structure.timestep_info.append(self.data.structure.ini_info.copy())\n        aero_copy = self.data.aero.timestep_info[-1]\n        self.data.aero.timestep_info = []\n        self.data.aero.timestep_info.append(aero_copy)\n        self.data.ts = 0\n        # alpha\n        orientation_quat = algebra.euler2quat(np.array([0.0, alpha, 0.0]))\n        self.data.structure.timestep_info[0].quat[:] = orientation_quat[:]\n\n        try:\n            self.force_orientation\n        except AttributeError:\n            self.force_orientation = np.zeros((len(thrust_nodes), 3))\n            for i_node, node in enumerate(thrust_nodes):\n                self.force_orientation[i_node, :] = (\n                    algebra.unit_vector(self.data.structure.ini_info.steady_applied_forces[node, 0:3]))\n\n        # thrust\n        # thrust is scaled so that the direction of the forces is conserved\n        # in all nodes.\n        # the `thrust` parameter is the force PER node.\n        # if there are two or more nodes in thrust_nodes, the total forces\n        # is n_nodes_in_thrust_nodes*thrust\n        # thrust forces have to be indicated in structure.ini_info\n        for i_node, node in enumerate(thrust_nodes):\n            self.data.structure.ini_info.steady_applied_forces[node, 0:3] = (\n                    self.force_orientation[i_node, :]*thrust)\n            self.data.structure.timestep_info[0].steady_applied_forces[node, 0:3] = (\n                    self.force_orientation[i_node, :]*thrust)\n\n        # tail deflection\n        try:\n            self.data.aero.data_dict['control_surface_deflection'][tail_cs_index] = tail_deflection\n        except KeyError:\n            raise Exception('This model has no control surfaces')\n        except IndexError:\n            raise Exception('The tail control surface index > number of surfaces')\n\n        # update grid\n        self.aero_solver.update_step()\n\n    def extract_resultants(self, tstep=None):\n        return self.structural_solver.extract_resultants(tstep)\n    \n\n    def teardown(self):\n        \n        self.structural_solver.teardown()\n        self.aero_solver.teardown()\n        if self.with_runtime_generators:\n            for rg in self.runtime_generators.values():\n                rg.teardown()\n\n\n"
  },
  {
    "path": "sharpy/solvers/statictrim.py",
    "content": "import numpy as np\n\nimport sharpy.utils.cout_utils as cout\nimport sharpy.utils.solver_interface as solver_interface\nfrom sharpy.utils.solver_interface import solver, BaseSolver\nimport sharpy.utils.settings as settings_utils\nimport os\n\n\n@solver\nclass StaticTrim(BaseSolver):\n    \"\"\"\n    The ``StaticTrim`` solver determines the longitudinal state of trim (equilibrium) for an aeroelastic system in\n    static conditions. It wraps around the desired solver to yield the state of trim of the system, in most cases\n    the :class:`~sharpy.solvers.staticcoupled.StaticCoupled` solver.\n\n    It calculates the required angle of attack, elevator deflection and thrust required to achieve longitudinal\n    equilibrium. The output angles are shown in degrees.\n\n    The results from the trimming iteration can be saved to a text file by using the `save_info` option.\n    \"\"\"\n    solver_id = 'StaticTrim'\n    solver_classification = 'Flight Dynamics'\n\n    settings_types = dict()\n    settings_default = dict()\n    settings_description = dict()\n\n    settings_types['print_info'] = 'bool'\n    settings_default['print_info'] = True\n    settings_description['print_info'] = 'Print info to screen'\n\n    settings_types['solver'] = 'str'\n    settings_default['solver'] = ''\n    settings_description['solver'] = 'Solver to run in trim routine'\n\n    settings_types['solver_settings'] = 'dict'\n    settings_default['solver_settings'] = dict()\n    settings_description['solver_settings'] = 'Solver settings dictionary'\n\n    settings_types['max_iter'] = 'int'\n    settings_default['max_iter'] = 100\n    settings_description['max_iter'] = 'Maximum number of iterations of trim routine'\n\n    settings_types['fz_tolerance'] = 'float'\n    settings_default['fz_tolerance'] = 0.01\n    settings_description['fz_tolerance'] = 'Tolerance in vertical force'\n\n    settings_types['fx_tolerance'] = 'float'\n    settings_default['fx_tolerance'] = 0.01\n    settings_description['fx_tolerance'] = 'Tolerance in horizontal force'\n\n    settings_types['m_tolerance'] = 'float'\n    settings_default['m_tolerance'] = 0.01\n    settings_description['m_tolerance'] = 'Tolerance in pitching moment'\n\n    settings_types['tail_cs_index'] = ['int', 'list(int)']\n    settings_default['tail_cs_index'] = 0\n    settings_description['tail_cs_index'] = 'Index of control surfaces that move to achieve trim'\n\n    settings_types['thrust_nodes'] = 'list(int)'\n    settings_default['thrust_nodes'] = [0]\n    settings_description['thrust_nodes'] = 'Nodes at which thrust is applied'\n\n    settings_types['initial_alpha'] = 'float'\n    settings_default['initial_alpha'] = 0.\n    settings_description['initial_alpha'] = 'Initial angle of attack'\n\n    settings_types['initial_deflection'] = 'float'\n    settings_default['initial_deflection'] = 0.\n    settings_description['initial_deflection'] = 'Initial control surface deflection'\n\n    settings_types['initial_thrust'] = 'float'\n    settings_default['initial_thrust'] = 0.0\n    settings_description['initial_thrust'] = 'Initial thrust setting'\n\n    settings_types['initial_angle_eps'] = 'float'\n    settings_default['initial_angle_eps'] = 0.05\n    settings_description['initial_angle_eps'] = 'Initial change of control surface deflection'\n\n    settings_types['initial_thrust_eps'] = 'float'\n    settings_default['initial_thrust_eps'] = 2.\n    settings_description['initial_thrust_eps'] = 'Initial thrust setting change'\n\n    settings_types['relaxation_factor'] = 'float'\n    settings_default['relaxation_factor'] = 0.2\n    settings_description['relaxation_factor'] = 'Relaxation factor'\n\n    settings_types['save_info'] = 'bool'\n    settings_default['save_info'] = False\n    settings_description['save_info'] = 'Save trim results to text file'\n\n    settings_table = settings_utils.SettingsTable()\n    __doc__ += settings_table.generate(settings_types, settings_default, settings_description)\n\n    def __init__(self):\n        self.data = None\n        self.settings = None\n        self.solver = None\n\n        # The order is\n        # [0]: alpha/fz\n        # [1]: alpha + delta (gamma)/moment\n        # [2]: thrust/fx\n\n        self.n_input = 3\n        self.i_iter = 0\n\n        self.input_history = []\n        self.output_history = []\n        self.gradient_history = []\n        self.trimmed_values = np.zeros((3,))\n\n        self.table = None\n        self.folder = None\n\n    def initialise(self, data, restart=False):\n        self.data = data\n        self.settings = data.settings[self.solver_id]\n        settings_utils.to_custom_types(self.settings, self.settings_types, self.settings_default)\n\n        self.solver = solver_interface.initialise_solver(self.settings['solver'])\n        self.solver.initialise(self.data, self.settings['solver_settings'], restart=restart)\n\n        self.folder = data.output_folder + '/statictrim/'\n        if not os.path.exists(self.folder):\n            os.makedirs(self.folder)\n\n        self.table = cout.TablePrinter(10, 8, ['g', 'f', 'f', 'f', 'f', 'f', 'f', 'f', 'f', 'f'],\n                                       filename=self.folder+'trim_iterations.txt')\n        self.table.print_header(['iter', 'alpha[deg]', 'elev[deg]', 'thrust', 'Fx', 'Fy', 'Fz', 'Mx', 'My', 'Mz'])\n\n    def increase_ts(self):\n        self.data.ts += 1\n        self.structural_solver.next_step()\n        self.aero_solver.next_step()\n\n    def run(self, **kwargs):\n\n        # In the event the modal solver has been run prior to StaticCoupled (i.e. to get undeformed modes), copy\n        # results and then attach to the resulting timestep\n        try:\n            modal = self.data.structure.timestep_info[-1].modal.copy()\n            modal_exists = True\n        except AttributeError:\n            modal_exists = False\n\n        self.trim_algorithm()\n\n        if modal_exists:\n            self.data.structure.timestep_info[-1].modal = modal\n\n        if self.settings['save_info']:\n            np.savetxt(self.folder + '/trim_values.txt', self.trimmed_values)\n\n        return self.data\n\n    def convergence(self, fz, m, fx):\n        return_value = np.array([False, False, False])\n\n        if np.abs(fz) < self.settings['fz_tolerance']:\n            return_value[0] = True\n\n        if np.abs(m) < self.settings['m_tolerance']:\n            return_value[1] = True\n\n        if np.abs(fx) < self.settings['fx_tolerance']:\n            return_value[2] = True\n\n        return return_value\n\n    def trim_algorithm(self):\n        \"\"\"\n        Trim algorithm method\n\n        The trim condition is found iteratively.\n\n        Returns:\n            np.array: array of trim values for angle of attack, control surface deflection and thrust.\n        \"\"\"\n        for self.i_iter in range(self.settings['max_iter'] + 1):\n            if self.i_iter == self.settings['max_iter']:\n                raise Exception('The Trim routine reached max iterations without convergence!')\n\n            self.input_history.append([])\n            self.output_history.append([])\n            self.gradient_history.append([])\n            for i in range(self.n_input):\n                self.input_history[self.i_iter].append(0)\n                self.output_history[self.i_iter].append(0)\n                self.gradient_history[self.i_iter].append(0)\n\n            # the first iteration requires computing gradients\n            if not self.i_iter:\n                # add to input history the initial estimation\n                self.input_history[self.i_iter][0] = self.settings['initial_alpha']\n                self.input_history[self.i_iter][1] = (self.settings['initial_deflection'] +\n                                                      self.settings['initial_alpha'])\n                self.input_history[self.i_iter][2] = self.settings['initial_thrust']\n\n                # compute output\n                (self.output_history[self.i_iter][0],\n                 self.output_history[self.i_iter][1],\n                 self.output_history[self.i_iter][2]) = self.evaluate(self.input_history[self.i_iter][0],\n                                                                      self.input_history[self.i_iter][1],\n                                                                      self.input_history[self.i_iter][2])\n\n                # check for convergence (in case initial values are ok)\n                if all(self.convergence(self.output_history[self.i_iter][0],\n                                        self.output_history[self.i_iter][1],\n                                        self.output_history[self.i_iter][2])):\n                    self.trimmed_values = self.input_history[self.i_iter]\n                    return\n\n                # compute gradients\n                # dfz/dalpha\n                (l, m, d) = self.evaluate(self.input_history[self.i_iter][0] + self.settings['initial_angle_eps'],\n                                          self.input_history[self.i_iter][1],\n                                          self.input_history[self.i_iter][2])\n\n                self.gradient_history[self.i_iter][0] = ((l - self.output_history[self.i_iter][0]) /\n                                                         self.settings['initial_angle_eps'])\n\n                # dm/dgamma\n                (l, m, d) = self.evaluate(self.input_history[self.i_iter][0],\n                                          self.input_history[self.i_iter][1] + self.settings['initial_angle_eps'],\n                                          self.input_history[self.i_iter][2])\n\n                self.gradient_history[self.i_iter][1] = ((m - self.output_history[self.i_iter][1]) /\n                                                         self.settings['initial_angle_eps'])\n\n                # dfx/dthrust\n                (l, m, d) = self.evaluate(self.input_history[self.i_iter][0],\n                                          self.input_history[self.i_iter][1],\n                                          self.input_history[self.i_iter][2] +\n                                          self.settings['initial_thrust_eps'])\n\n                self.gradient_history[self.i_iter][2] = ((d - self.output_history[self.i_iter][2]) /\n                                                         self.settings['initial_thrust_eps'])\n\n                continue\n\n            # if not all(np.isfinite(self.gradient_history[self.i_iter - 1]))\n            # now back to normal evaluation (not only the i_iter == 0 case)\n            # compute next alpha with the previous gradient\n            # convergence = self.convergence(self.output_history[self.i_iter - 1][0],\n            #                                self.output_history[self.i_iter - 1][1],\n            #                                self.output_history[self.i_iter - 1][2])\n            convergence = np.full((3, ), False)\n            if convergence[0]:\n                # fz is converged, don't change it\n                self.input_history[self.i_iter][0] = self.input_history[self.i_iter - 1][0]\n                self.gradient_history[self.i_iter][0] = self.gradient_history[self.i_iter - 1][0]\n            else:\n                self.input_history[self.i_iter][0] = (self.input_history[self.i_iter - 1][0] -\n                                                      (self.output_history[self.i_iter - 1][0] /\n                                                       self.gradient_history[self.i_iter - 1][0]))\n\n            if convergence[1]:\n                # m is converged, don't change it\n                self.input_history[self.i_iter][1] = self.input_history[self.i_iter - 1][1]\n                self.gradient_history[self.i_iter][1] = self.gradient_history[self.i_iter - 1][1]\n            else:\n                # compute next gamma with the previous gradient\n                self.input_history[self.i_iter][1] = (self.input_history[self.i_iter - 1][1] -\n                                                      (self.output_history[self.i_iter - 1][1] /\n                                                       self.gradient_history[self.i_iter - 1][1]))\n\n            if convergence[2]:\n                # fx is converged, don't change it\n                self.input_history[self.i_iter][2] = self.input_history[self.i_iter - 1][2]\n                self.gradient_history[self.i_iter][2] = self.gradient_history[self.i_iter - 1][2]\n            else:\n                # compute next gamma with the previous gradient\n                self.input_history[self.i_iter][2] = (self.input_history[self.i_iter - 1][2] -\n                                                      (self.output_history[self.i_iter - 1][2] /\n                                                       self.gradient_history[self.i_iter - 1][2]))\n\n            if self.settings['relaxation_factor']:\n                for i_dim in range(3):\n                    self.input_history[self.i_iter][i_dim] = (self.input_history[self.i_iter][i_dim]*(1 - self.settings['relaxation_factor']) +\n                                                              self.input_history[self.i_iter][i_dim]*self.settings['relaxation_factor'])\n\n            # evaluate\n            (self.output_history[self.i_iter][0],\n             self.output_history[self.i_iter][1],\n             self.output_history[self.i_iter][2]) = self.evaluate(self.input_history[self.i_iter][0],\n                                                                  self.input_history[self.i_iter][1],\n                                                                  self.input_history[self.i_iter][2])\n\n            if not convergence[0]:\n                self.gradient_history[self.i_iter][0] = ((self.output_history[self.i_iter][0] -\n                                                          self.output_history[self.i_iter - 1][0]) /\n                                                         (self.input_history[self.i_iter][0] -\n                                                          self.input_history[self.i_iter - 1][0]))\n\n            if not convergence[1]:\n                self.gradient_history[self.i_iter][1] = ((self.output_history[self.i_iter][1] -\n                                                          self.output_history[self.i_iter - 1][1]) /\n                                                         (self.input_history[self.i_iter][1] -\n                                                          self.input_history[self.i_iter - 1][1]))\n\n            if not convergence[2]:\n                self.gradient_history[self.i_iter][2] = ((self.output_history[self.i_iter][2] -\n                                                          self.output_history[self.i_iter - 1][2]) /\n                                                         (self.input_history[self.i_iter][2] -\n                                                          self.input_history[self.i_iter - 1][2]))\n\n            # check convergence\n            convergence = self.convergence(self.output_history[self.i_iter][0],\n                                           self.output_history[self.i_iter][1],\n                                           self.output_history[self.i_iter][2])\n            if all(convergence):\n                self.trimmed_values = self.input_history[self.i_iter]\n                self.table.close_file()\n                return\n\n    def evaluate(self, alpha, deflection_gamma, thrust):\n        if not np.isfinite(alpha):\n            raise ValueError(\"Alpha trim gradient is zero, resulting in division by zero.\")\n        if not np.isfinite(deflection_gamma):\n            raise ValueError(\"Delta trim gradient is zero, resulting in division by zero.\")\n        if not np.isfinite(thrust):\n            raise ValueError(\"Thrust trim gradient is zero, resulting in division by zero.\")\n\n        # modify the trim in the static_coupled solver\n        self.solver.change_trim(alpha,\n                                thrust,\n                                self.settings['thrust_nodes'],\n                                deflection_gamma - alpha,\n                                self.settings['tail_cs_index'])\n        # run the solver\n        self.solver.run()\n        # extract resultants\n        forces, moments = self.solver.extract_resultants()\n\n        forcez = forces[2]\n        forcex = forces[0]\n        moment = moments[1]\n\n        self.table.print_line([self.i_iter,\n                               alpha*180/np.pi,\n                               (deflection_gamma - alpha)*180/np.pi,\n                               thrust,\n                               forces[0],\n                               forces[1],\n                               forces[2],\n                               moments[0],\n                               moments[1],\n                               moments[2]])\n\n        return forcez, moment, forcex\n"
  },
  {
    "path": "sharpy/solvers/staticuvlm.py",
    "content": "\nimport sharpy.aero.utils.uvlmlib as uvlmlib\nimport sharpy.utils.settings as settings_utils\nfrom sharpy.utils.solver_interface import solver, BaseSolver\nimport sharpy.utils.generator_interface as gen_interface\nfrom sharpy.utils.constants import vortex_radius_def\nimport sharpy.aero.utils.mapping as mapping\n\n\n@solver\nclass StaticUvlm(BaseSolver):\n    \"\"\"\n    ``StaticUvlm`` solver class, inherited from ``BaseSolver``\n\n    Aerodynamic solver that runs a UVLM routine to solve the steady or unsteady aerodynamic problem.\n    The aerodynamic problem is posed in the form of an ``Aerogrid`` object.\n\n    Args:\n        data (PreSharpy): object with problem data\n        custom_settings (dict): custom settings that override the settings in the solver ``.txt`` file. None by default\n\n    Attributes:\n        settings (dict): Name-value pair of settings employed by solver. See Notes for valid combinations\n        settings_types (dict): Acceptable data types for entries in ``settings``\n        settings_default (dict): Default values for the available ``settings``\n        data (PreSharpy): object containing the information of the problem\n        velocity_generator(object): object containing the flow conditions information\n\n\n    \"\"\"\n    solver_id = 'StaticUvlm'\n    solver_classification = 'aero'\n\n    settings_types = dict()\n    settings_default = dict()\n    settings_description = dict()\n\n    settings_types['print_info'] = 'bool'\n    settings_default['print_info'] = True\n    settings_description['print_info'] = 'Print info to screen'\n\n    settings_types['horseshoe'] = 'bool'\n    settings_default['horseshoe'] = False\n    settings_description['horseshoe'] = 'Horseshoe wake modelling for steady simulations.'\n\n    settings_types['nonlifting_body_interactions'] = 'bool'\n    settings_default['nonlifting_body_interactions'] = False\n    settings_description['nonlifting_body_interactions'] = 'Consider nonlifting body interactions'\n\n    settings_types['only_nonlifting'] = 'bool'\n    settings_default['only_nonlifting'] = False\n    settings_description['only_nonlifting'] = 'Consider only nonlifting bodies'\n\n    settings_types['phantom_wing_test'] = 'bool'\n    settings_default['phantom_wing_test'] = False\n    settings_description['phantom_wing_test'] = 'Debug option'\n\n    settings_types['num_cores'] = 'int'\n    settings_default['num_cores'] = 0\n    settings_description['num_cores'] = 'Number of cores to use in the VLM lib'\n\n    settings_types['n_rollup'] = 'int'\n    settings_default['n_rollup'] = 0\n    settings_description['n_rollup'] = 'Number of rollup iterations for free wake. Use at least ``n_rollup > 1.1*m_star``'\n\n    settings_types['rollup_dt'] = 'float'\n    settings_default['rollup_dt'] = 0.1\n    settings_description['rollup_dt'] = 'Pseudo time step for wake convection. Chose it so that it is similar to the unsteady time step'\n\n    settings_types['rollup_aic_refresh'] = 'int'\n    settings_default['rollup_aic_refresh'] = 1\n    settings_description['rollup_dt'] = 'Controls when the AIC matrix is refreshed during the wake rollup'\n\n    settings_types['rollup_tolerance'] = 'float'\n    settings_default['rollup_tolerance'] = 1e-4\n    settings_description['rollup_tolerance'] = 'Convergence criterium for rollup wake'\n\n    settings_types['iterative_solver'] = 'bool'\n    settings_default['iterative_solver'] = False\n    settings_description['iterative_solver'] = 'Not in use'\n\n    settings_types['iterative_tol'] = 'float'\n    settings_default['iterative_tol'] = 1e-4\n    settings_description['iterative_tol'] = 'Not in use'\n\n    settings_types['iterative_precond'] = 'bool'\n    settings_default['iterative_precond'] = False\n    settings_description['iterative_precond'] = 'Not in use'\n\n    settings_types['velocity_field_generator'] = 'str'\n    settings_default['velocity_field_generator'] = 'SteadyVelocityField'\n    settings_description['velocity_field_generator'] = 'Name of the velocity field generator to be used in the simulation'\n\n    settings_types['velocity_field_input'] = 'dict'\n    settings_default['velocity_field_input'] = {}\n    settings_description['velocity_field_input'] = 'Dictionary of settings for the velocity field generator'\n\n    settings_types['rho'] = 'float'\n    settings_default['rho'] = 1.225\n    settings_description['rho'] = 'Air density'\n\n    settings_types['cfl1'] = 'bool'\n    settings_default['cfl1'] = True\n    settings_description['cfl1'] = 'If it is ``True``, it assumes that the discretisation complies with CFL=1'\n\n    settings_types['vortex_radius'] = 'float'\n    settings_default['vortex_radius'] = vortex_radius_def\n    settings_description['vortex_radius'] = 'Distance between points below which induction is not computed'\n\n    settings_types['vortex_radius_wake_ind'] = 'float'\n    settings_default['vortex_radius_wake_ind'] = vortex_radius_def\n    settings_description['vortex_radius_wake_ind'] = 'Distance between points below which induction is not computed in the wake convection'\n\n    settings_types['rbm_vel_g'] = 'list(float)'\n    settings_default['rbm_vel_g'] = [0., 0., 0., 0., 0., 0.]\n    settings_description['rbm_vel_g'] = 'Rigid body velocity in G FoR'\n\n    settings_types['centre_rot_g'] = 'list(float)'\n    settings_default['centre_rot_g'] = [0., 0., 0.]\n    settings_description['centre_rot_g'] = 'Centre of rotation in G FoR around which ``rbm_vel_g`` is applied'\n\n    settings_types['map_forces_on_struct'] = 'bool'\n    settings_default['map_forces_on_struct'] = False\n    settings_description['map_forces_on_struct'] = 'Maps the forces on the structure at the end of the timestep. Only usefull if the solver is used outside StaticCoupled'\n\n    settings_types['ignore_first_x_nodes_in_force_calculation'] = 'int'\n    settings_default['ignore_first_x_nodes_in_force_calculation'] = 0\n    settings_description['ignore_first_x_nodes_in_force_calculation'] = 'Ignores the forces on the first user-specified number of nodes of all surfaces.'\n\n    settings_table = settings_utils.SettingsTable()\n    __doc__ += settings_table.generate(settings_types, settings_default, settings_description)\n\n    def __init__(self):\n        # settings list\n        self.data = None\n        self.settings = None\n        self.velocity_generator = None\n\n    def initialise(self, data, custom_settings=None, restart=False):\n        self.data = data\n        if custom_settings is None:\n            self.settings = data.settings[self.solver_id]\n        else:\n            self.settings = custom_settings\n        settings_utils.to_custom_types(self.settings, self.settings_types, self.settings_default, no_ctype=True)\n\n        self.update_step()\n\n        # init velocity generator\n        velocity_generator_type = gen_interface.generator_from_string(\n            self.settings['velocity_field_generator'])\n        self.velocity_generator = velocity_generator_type()\n        self.velocity_generator.initialise(self.settings['velocity_field_input'], restart=restart)\n\n    def add_step(self):\n        self.data.aero.add_timestep()\n        if self.settings['nonlifting_body_interactions']:\n            self.data.nonlifting_body.add_timestep()\n            \n\n    def update_grid(self, beam):\n\n        if not self.settings['only_nonlifting']:\n            self.data.aero.generate_zeta(beam,\n                                        self.data.aero.aero_settings,\n                                        -1,\n                                        beam_ts=-1)\n        if self.settings['nonlifting_body_interactions'] or self.settings['only_nonlifting']:\n            self.data.nonlifting_body.generate_zeta(beam,\n                                                    self.data.nonlifting_body.aero_settings,\n                                                    -1,\n                                                    beam_ts=-1)\n\n    def update_custom_grid(self, structure_tstep, aero_tstep, nonlifting_tstep=None):\n        self.data.aero.generate_zeta_timestep_info(structure_tstep,\n                                                   aero_tstep,\n                                                   self.data.structure,\n                                                   self.data.aero.aero_settings,\n                                                   dt=self.settings['rollup_dt'])\n        if self.settings['nonlifting_body_interactions']:\n            self.data.nonlifting_body.generate_zeta_timestep_info(structure_tstep,\n                                                    nonlifting_tstep,\n                                                    self.data.structure,\n                                                    self.data.nonlifting_body.aero_settings)\n\n    def run(self, **kwargs):\n\n        structure_tstep = settings_utils.set_value_or_default(kwargs, 'structural_step', self.data.structure.timestep_info[self.data.ts])\n        \n        if not self.settings['only_nonlifting']:\n            aero_tstep = settings_utils.set_value_or_default(kwargs, 'aero_step', self.data.aero.timestep_info[self.data.ts])\n            if not self.data.aero.timestep_info[self.data.ts].zeta:\n                return self.data\n\n            # generate the wake because the solid shape might change\n            self.data.aero.wake_shape_generator.generate({'zeta': aero_tstep.zeta,\n                                                'zeta_star': aero_tstep.zeta_star,\n                                                'gamma': aero_tstep.gamma,\n                                                'gamma_star': aero_tstep.gamma_star,\n                                                'dist_to_orig': aero_tstep.dist_to_orig})\n        \n            if self.settings['nonlifting_body_interactions']:\n                # generate uext\n                self.velocity_generator.generate({'zeta': self.data.nonlifting_body.timestep_info[self.data.ts].zeta,\n                                                'override': True,\n                                                'for_pos': structure_tstep.for_pos[0:3]},\n                                                self.data.nonlifting_body.timestep_info[self.data.ts].u_ext)\n                # generate uext\n                self.velocity_generator.generate({'zeta': self.data.aero.timestep_info[self.data.ts].zeta,\n                                                'override': True,\n                                                'for_pos': self.data.structure.timestep_info[self.data.ts].for_pos[0:3]},  \n                                                self.data.aero.timestep_info[self.data.ts].u_ext)\n                # grid orientation\n                uvlmlib.vlm_solver_lifting_and_nonlifting_bodies(self.data.aero.timestep_info[self.data.ts],\n                                                            self.data.nonlifting_body.timestep_info[self.data.ts],\n                                                            self.settings)\n            else:        \n                # generate uext\n                self.velocity_generator.generate({'zeta': self.data.aero.timestep_info[self.data.ts].zeta,\n                                                'override': True,\n                                                        'for_pos': self.data.structure.timestep_info[self.data.ts].for_pos[0:3]},\n                                                        self.data.aero.timestep_info[self.data.ts].u_ext)\n\n\n                # grid orientation\n                uvlmlib.vlm_solver(self.data.aero.timestep_info[self.data.ts],\n                                    self.settings)\n        else:\n            self.velocity_generator.generate({'zeta': self.data.nonlifting_body.timestep_info[self.data.ts].zeta,\n                                            'override': True,\n                                            'for_pos': self.data.structure.timestep_info[self.data.ts].for_pos[0:3]},\n                                            self.data.nonlifting_body.timestep_info[self.data.ts].u_ext)\n            uvlmlib.vlm_solver_nonlifting_body(self.data.nonlifting_body.timestep_info[self.data.ts],\n                                            self.settings)\n\n        return self.data\n\n    def next_step(self):\n        \"\"\" Updates de aerogrid based on the info of the step, and increases\n        the self.ts counter \"\"\"\n        self.data.aero.add_timestep()\n        if self.settings['nonlifting_body_interactions']:\n            self.data.nonlifting_body.add_timestep()\n        self.update_step()\n\n    def update_step(self):\n        if not self.settings['only_nonlifting']:\n            self.data.aero.generate_zeta(self.data.structure,\n                                        self.data.aero.aero_settings,\n                                        self.data.ts)\n        if self.settings['nonlifting_body_interactions'] or self.settings['only_nonlifting']:\n            self.data.nonlifting_body.generate_zeta(self.data.structure,\n                                                    self.data.nonlifting_body.aero_settings,\n                                                    self.data.ts)\n\n"
  },
  {
    "path": "sharpy/solvers/steplinearuvlm.py",
    "content": "\"\"\"\nTime domain solver to integrate the linear UVLM aerodynamic system developed by S. Maraniello\nN Goizueta\nNov 18\n\"\"\"\nfrom sharpy.utils.solver_interface import BaseSolver, solver\nimport numpy as np\nimport sharpy.utils.settings as settings_utils\nimport sharpy.utils.generator_interface as gen_interface\nimport sharpy.utils.algebra as algebra\nimport sharpy.linear.src.linuvlm as linuvlm\nfrom sharpy.utils.constants import vortex_radius_def\n\n\n@solver\nclass StepLinearUVLM(BaseSolver):\n    r\"\"\"\n    Time domain aerodynamic solver that uses a linear UVLM formulation to be used with the\n    :class:`solvers.DynamicCoupled` solver.\n\n    To use this solver, the ``solver_id = StepLinearUVLM`` must be given as the name for the ``aero_solver``\n    is the case of an aeroelastic solver, where the setting below would be parsed through ``aero_solver_settings``.\n\n    Notes:\n\n        The ``integr_order`` variable refers to the finite differencing scheme used to calculate the bound circulation\n        derivative with respect to time :math:`\\dot{\\mathbf{\\Gamma}}`. A first order scheme is used when\n        ``integr_order == 1``\n\n        .. math:: \\dot{\\mathbf{\\Gamma}}^{n+1} = \\frac{\\mathbf{\\Gamma}^{n+1}-\\mathbf{\\Gamma}^n}{\\Delta t}\n\n        If ``integr_order == 2`` a higher order scheme is used (but it isn't exactly second order accurate [1]).\n\n        .. math:: \\dot{\\mathbf{\\Gamma}}^{n+1} = \\frac{3\\mathbf{\\Gamma}^{n+1}-4\\mathbf{\\Gamma}^n + \\mathbf{\\Gamma}^{n-1}}\n            {2\\Delta t}\n\n        If ``track_body`` is ``True``, the UVLM is projected onto a frame ``U`` that is:\n\n            * Coincident with ``G`` at the linearisation timestep.\n\n            * Thence, rotates by the same quantity as the FoR ``A``.\n\n\n        It is similar to a stability axes and is recommended any time rigid body dynamics are included.\n\n    See Also:\n\n        :class:`sharpy.sharpy.linear.assembler.linearuvlm.LinearUVLM`\n\n    References:\n\n        [1] Maraniello, S., & Palacios, R.. State-Space Realizations and Internal Balancing in Potential-Flow\n        Aerodynamics with Arbitrary Kinematics. AIAA Journal, 57(6), 1–14. 2019. https://doi.org/10.2514/1.J058153\n\n    \"\"\"\n    solver_id = 'StepLinearUVLM'\n    solver_classification = 'aero'\n\n    settings_types = dict()\n    settings_default = dict()\n    settings_description = dict()\n\n    settings_types['dt'] = 'float'\n    settings_default['dt'] = 0.1\n    settings_description['dt'] = 'Time step'\n\n    settings_types['integr_order'] = 'int'\n    settings_default['integr_order'] = 2\n    settings_description['integr_order'] = 'Integration order of the circulation derivative. Either ``1`` or ``2``.'\n\n    settings_types['ScalingDict'] = 'dict'\n    settings_default['ScalingDict'] = dict()\n    settings_description['ScalingDict'] = 'Dictionary of scaling factors to achieve normalised UVLM realisation.'\n\n    settings_types['remove_predictor'] = 'bool'\n    settings_default['remove_predictor'] = True\n    settings_description['remove_predictor'] = 'Remove the predictor term from the UVLM equations'\n\n    settings_types['use_sparse'] = 'bool'\n    settings_default['use_sparse'] = True\n    settings_description['use_sparse'] = 'Assemble UVLM plant matrix in sparse format'\n\n    settings_types['density'] = 'float'\n    settings_default['density'] = 1.225\n    settings_description['density'] = 'Air density'\n\n    settings_types['track_body'] = 'bool'\n    settings_default['track_body'] = True\n    settings_description['track_body'] = 'UVLM inputs and outputs projected to coincide with lattice at linearisation'\n\n    settings_types['track_body_number'] = 'int'\n    settings_default['track_body_number'] = -1\n    settings_description['track_body_number'] = 'Frame of reference number to follow. If ``-1`` track ``A`` frame.'\n\n    settings_types['velocity_field_generator'] = 'str'\n    settings_default['velocity_field_generator'] = 'SteadyVelocityField'\n    settings_description['velocity_field_generator'] = 'Name of the velocity field generator to be used in the ' \\\n                                                       'simulation'\n\n    settings_types['velocity_field_input'] = 'dict'\n    settings_default['velocity_field_input'] = {}\n    settings_description['velocity_field_input'] = 'Dictionary of settings for the velocity field generator'\n\n    settings_types['vortex_radius'] = 'float'\n    settings_default['vortex_radius'] = vortex_radius_def\n    settings_description['vortex_radius'] = 'Distance between points below which induction is not computed'\n\n    settings_types['vortex_radius_wake_ind'] = 'float'\n    settings_default['vortex_radius_wake_ind'] = vortex_radius_def\n    settings_description[\n        'vortex_radius_wake_ind'] = 'Distance between points below which induction is not computed in the wake convection'\n\n    settings_types['cfl1'] = 'bool'\n    settings_default['cfl1'] = True\n    settings_description['cfl1'] = 'If it is ``True``, it assumes that the discretisation complies with CFL=1'\n\n    settings_table = settings_utils.SettingsTable()\n    __doc__ += settings_table.generate(settings_types, settings_default, settings_description)\n\n    scaling_settings_types = dict()\n    scaling_settings_default = dict()\n    scaling_settings_description = dict()\n\n    scaling_settings_types['length'] = 'float'\n    scaling_settings_default['length'] = 1.0\n    scaling_settings_description['length'] = 'Reference length to be used for UVLM scaling'\n\n    scaling_settings_types['speed'] = 'float'\n    scaling_settings_default['speed'] = 1.0\n    scaling_settings_description['speed'] = 'Reference speed to be used for UVLM scaling'\n\n    scaling_settings_types['density'] = 'float'\n    scaling_settings_default['density'] = 1.0\n    scaling_settings_description['density'] = 'Reference density to be used for UVLM scaling'\n\n    __doc__ += settings_table.generate(scaling_settings_types,\n                                       scaling_settings_default,\n                                       scaling_settings_description, header_line='The settings that ``ScalingDict`` '\n                                                                                 'accepts are the following:')\n\n    def __init__(self):\n        self.data = None\n        self.settings = None\n        self.lin_uvlm_system = None\n        self.velocity_generator = None\n\n    def initialise(self, data, custom_settings=None, restart=False):\n        r\"\"\"\n        Initialises the Linear UVLM aerodynamic solver and the chosen velocity generator.\n\n        Settings are parsed into the standard SHARPy settings format for solvers. It then checks whether there is\n        any previous information about the linearised system (in order for a solution to be restarted without\n        overwriting the linearisation).\n\n        If a linearised system does not exist, a linear UVLM system is created linearising about the current time step.\n\n        The reference values for the input and output are transformed into column vectors :math:`\\mathbf{u}`\n        and :math:`\\mathbf{y}`, respectively.\n\n        The information pertaining to the linear system is stored in a dictionary ``self.data.aero.linear`` within\n        the main ``data`` variable.\n\n        Args:\n            data (PreSharpy): class containing the problem information\n            custom_settings (dict): custom settings dictionary\n\n        \"\"\"\n\n        self.data = data\n\n        if custom_settings is None:\n            self.settings = data.settings[self.solver_id]\n        else:\n            self.settings = custom_settings\n        settings_utils.to_custom_types(self.settings, self.settings_types, self.settings_default, no_ctype=True)\n        settings_utils.to_custom_types(self.settings['ScalingDict'], self.scaling_settings_types,\n                                       self.scaling_settings_default, no_ctype=True)\n\n        # Initialise velocity generator\n        velocity_generator_type = gen_interface.generator_from_string(self.settings['velocity_field_generator'])\n        self.velocity_generator = velocity_generator_type()\n        self.velocity_generator.initialise(self.settings['velocity_field_input'], restart=restart)\n\n        # Check whether linear UVLM has been initialised\n        try:\n            self.data.aero.linear\n        except AttributeError:\n            self.data.aero.linear = dict()\n            aero_tstep = self.data.aero.timestep_info[-1]\n\n            ### Record body orientation/velocities at time 0\n            # This option allows to rotate the linearised UVLM with the A frame\n            # or a specific body (multi-body solution)\n            if self.settings['track_body']:\n\n                self.num_body_track = self.settings['track_body_number']\n\n                # track A frame\n                if self.num_body_track == -1:\n                    self.quat0 = self.data.structure.timestep_info[-1].quat.copy()\n                    self.for_vel0 = self.data.structure.timestep_info[-1].for_vel.copy()\n                else:  # track a specific body\n                    self.quat0 = \\\n                        self.data.structure.timestep_info[-1].mb_quat[self.num_body_track, :].copy()\n                    self.for_vel0 = \\\n                        self.data.structure.timestep_info[-1].mb_FoR_vel[self.num_body_track, :].copy()\n\n                # convert to G frame\n                self.Cga0 = algebra.quat2rotation(self.quat0)\n                self.Cga = self.Cga0.copy()\n                self.for_vel0[:3] = self.Cga0.dot(self.for_vel0[:3])\n                self.for_vel0[3:] = self.Cga0.dot(self.for_vel0[3:])\n\n            else:  # check/record initial rotation speed\n                self.num_body_track = None\n                self.quat0 = None\n                self.Cag0 = None\n                self.Cga = None\n                self.for_vel0 = np.zeros((6,))\n\n            # TODO: verify of a better way to implement rho\n            aero_tstep.rho = self.settings['density']\n\n            # Generate instance of linuvlm.Dynamic()\n            lin_uvlm_system = linuvlm.DynamicBlock(aero_tstep,\n                                                   dynamic_settings=self.settings,\n                                                   for_vel=self.for_vel0)\n\n            # add rotational speed\n            for ii in range(lin_uvlm_system.MS.n_surf):\n                lin_uvlm_system.MS.Surfs[ii].omega = self.for_vel0[3:]\n\n            # Save reference values\n            # System Inputs\n            u_0 = self.pack_input_vector()\n\n            # Linearised state\n            dt = self.settings['dt']\n            x_0 = self.pack_state_vector(aero_tstep, None, dt, self.settings['integr_order'])\n\n            # Reference forces\n            f_0 = np.concatenate([aero_tstep.forces[ss][0:3].reshape(-1, order='C')\n                                  for ss in range(aero_tstep.n_surf)])\n\n            # Assemble the state space system\n            wake_prop_settings = {'dt': self.settings['dt'],\n                                  'ts': self.data.ts,\n                                  't': self.data.ts * self.settings['dt'],\n                                  'for_pos': self.data.structure.timestep_info[-1].for_pos,\n                                  'cfl1': self.settings['cfl1'],\n                                  'vel_gen': self.velocity_generator}\n            lin_uvlm_system.assemble_ss(wake_prop_settings=wake_prop_settings)\n            self.data.aero.linear['System'] = lin_uvlm_system\n            self.data.aero.linear['SS'] = lin_uvlm_system.SS\n            self.data.aero.linear['x_0'] = x_0\n            self.data.aero.linear['u_0'] = u_0\n            self.data.aero.linear['y_0'] = f_0\n            # TODO: Implement in AeroTimeStepInfo a way to store the state vectors\n\n    def run(self, **kwargs):\n        r\"\"\"\n        Solve the linear aerodynamic UVLM model at the current time step ``n``. The step increment is solved as:\n\n        .. math::\n            \\mathbf{x}^n &= \\mathbf{A\\,x}^{n-1} + \\mathbf{B\\,u}^n \\\\\n            \\mathbf{y}^n &= \\mathbf{C\\,x}^n + \\mathbf{D\\,u}^n\n\n        A change of state is possible in order to solve the system without the predictor term. In which case the system\n        is solved by:\n\n        .. math::\n            \\mathbf{h}^n &= \\mathbf{A\\,h}^{n-1} + \\mathbf{B\\,u}^{n-1} \\\\\n            \\mathbf{y}^n &= \\mathbf{C\\,h}^n + \\mathbf{D\\,u}^n\n\n\n        Variations are taken with respect to initial reference state. The state and input vectors for the linear\n        UVLM system are of the form:\n\n                If ``integr_order==1``:\n                    .. math:: \\mathbf{x}_n = [\\delta\\mathbf{\\Gamma}^T_n,\\,\n                        \\delta\\mathbf{\\Gamma_w}_n^T,\\,\n                        \\Delta t \\,\\delta\\mathbf{\\dot{\\Gamma}}_n^T]^T\n\n                Else, if ``integr_order==2``:\n                    .. math:: \\mathbf{x}_n = [\\delta\\mathbf{\\Gamma}_n^T,\\,\n                        \\delta\\mathbf{\\Gamma_w}_n^T,\\,\n                        \\Delta t \\,\\delta\\mathbf{\\dot{\\Gamma}}_n^T,\\,\n                        \\delta\\mathbf{\\Gamma}_{n-1}^T]^T\n\n                And the input vector:\n                    .. math:: \\mathbf{u}_n = [\\delta\\mathbf{\\zeta}_n^T,\\,\n                        \\delta\\dot{\\mathbf{\\zeta}}_n^T,\\,\\delta\\mathbf{u_{ext}}^T_n]^T\n\n        where the subscript ``n`` refers to the time step.\n\n        The linear UVLM system is then solved as detailed in :func:`sharpy.linear.src.linuvlm.Dynamic.solve_step`.\n        The output is a column vector containing the aerodynamic forces at the panel vertices.\n\n        To Do: option for impulsive start?\n\n        Args:\n            aero_tstep (AeroTimeStepInfo): object containing the aerodynamic data at the current time step\n            structure_tstep (StructTimeStepInfo): object containing the structural data at the current time step\n            convect_wake (bool): for backward compatibility only. The linear UVLM assumes a frozen wake geometry\n            dt (float): time increment\n            t (float): current time\n            unsteady_contribution (bool): (backward compatibily). Unsteady aerodynamic effects are always included\n\n        Returns:\n            PreSharpy: updated ``self.data`` class with the new forces and circulation terms of the system\n\n        \"\"\"\n\n        aero_tstep = settings_utils.set_value_or_default(kwargs, 'aero_step', self.data.aero.timestep_info[-1])\n        structure_tstep = settings_utils.set_value_or_default(kwargs, 'structural_step',\n                                                              self.data.structure.timestep_info[-1])\n        dt = settings_utils.set_value_or_default(kwargs, 'dt', self.settings['dt'])\n        t = settings_utils.set_value_or_default(kwargs, 't', self.data.ts * dt)\n\n        integr_order = self.settings['integr_order']\n\n        ### Define Input\n\n        # Generate external velocity field u_ext\n        self.velocity_generator.generate({'zeta': aero_tstep.zeta,\n                                          'override': True,\n                                          't': t,\n                                          'ts': self.data.ts,\n                                          'dt': dt,\n                                          'for_pos': structure_tstep.for_pos},\n                                         aero_tstep.u_ext)\n\n        ### Proj from FoR G to linearisation frame\n        # - proj happens in self.pack_input_vector and unpack_ss_vectors\n        if self.settings['track_body']:\n            # track A frame\n            if self.num_body_track == -1:\n                self.Cga = algebra.quat2rotation(structure_tstep.quat)\n            else:  # track a specific body\n                self.Cga = algebra.quat2rotation(\n                    structure_tstep.mb_quat[self.num_body_track, :])\n\n        # Column vector that will be the input to the linearised UVLM system\n        # Input is at time step n, since it is updated in the aeroelastic solver prior to aerodynamic solver\n        u_n = self.pack_input_vector()\n\n        du_n = u_n - self.data.aero.linear['u_0']\n\n        if self.settings['remove_predictor']:\n            u_m1 = self.pack_input_vector()\n            du_m1 = u_m1 - self.data.aero.linear['u_0']\n        else:\n            du_m1 = None\n\n        # Retrieve State vector at time n-1\n        if len(self.data.aero.timestep_info) < 2:\n            x_m1 = self.pack_state_vector(aero_tstep, None, dt, integr_order)\n        else:\n            x_m1 = self.pack_state_vector(aero_tstep, self.data.aero.timestep_info[-2], dt, integr_order)\n\n        # dx is at timestep n-1\n        dx_m1 = x_m1 - self.data.aero.linear['x_0']\n\n        ### Solve system - output is the variation in force\n        dx_n, dy_n = self.data.aero.linear['System'].solve_step(dx_m1, du_m1, du_n, transform_state=True)\n\n        x_n = self.data.aero.linear['x_0'] + dx_n\n        y_n = self.data.aero.linear['y_0'] + dy_n\n\n        # if self.settings['physical_model']:\n        forces, gamma, gamma_dot, gamma_star = self.unpack_ss_vectors(y_n, x_n, u_n, aero_tstep)\n        aero_tstep.forces = forces\n        aero_tstep.gamma = gamma\n        aero_tstep.gamma_dot = gamma_dot\n        aero_tstep.gamma_star = gamma_star\n\n        return self.data\n\n    def add_step(self):\n        self.data.aero.add_timestep()\n\n    def update_grid(self, beam):\n        self.data.aero.generate_zeta(beam, self.data.aero.aero_settings, -1, beam_ts=-1)\n\n    def update_custom_grid(self, structure_tstep, aero_tstep):\n        self.data.aero.generate_zeta_timestep_info(structure_tstep, aero_tstep, self.data.structure,\n                                                   self.data.aero.aero_settings)\n\n    def unpack_ss_vectors(self, y_n, x_n, u_n, aero_tstep):\n        r\"\"\"\n        Transform column vectors used in the state space formulation into SHARPy format\n\n        The column vectors are transformed into lists with one entry per aerodynamic surface. Each entry contains a\n        matrix with the quantities at each grid vertex.\n\n        .. math::\n            \\mathbf{y}_n \\longrightarrow \\mathbf{f}_{aero}\n\n        .. math:: \\mathbf{x}_n \\longrightarrow \\mathbf{\\Gamma}_n,\\,\n            \\mathbf{\\Gamma_w}_n,\\,\n            \\mathbf{\\dot{\\Gamma}}_n\n\n        If the ``track_body`` option is on, the output forces are projected from\n        the linearization frame, to the G frame. Note that the linearisation\n        frame is:\n\n            a. equal to the FoR G at time 0 (linearisation point)\n            b. rotates as the body frame specified in the ``track_body_number``\n\n        Args:\n            y_n (np.ndarray): Column output vector of linear UVLM system\n            x_n (np.ndarray): Column state vector of linear UVLM system\n            u_n (np.ndarray): Column input vector of linear UVLM system\n            aero_tstep (AeroTimeStepInfo): aerodynamic timestep information class instance\n\n        Returns:\n            tuple: Tuple containing:\n\n                forces (list):\n                    Aerodynamic forces in a list with ``n_surf`` entries.\n                    Each entry is a ``(6, M+1, N+1)`` matrix, where the first 3\n                    indices correspond to the components in ``x``, ``y`` and ``z``. The latter 3 are zero.\n\n                gamma (list):\n                    Bound circulation list with ``n_surf`` entries. Circulation is stored in an ``(M+1, N+1)``\n                    matrix, corresponding to the panel vertices.\n\n                gamma_dot (list):\n                    Bound circulation derivative list with ``n_surf`` entries.\n                    Circulation derivative is stored in an ``(M+1, N+1)`` matrix, corresponding to the panel\n                    vertices.\n\n                gamma_star (list):\n                    Wake (free) circulation list with ``n_surf`` entries. Wake circulation is stored in an\n                    ``(M_star+1, N+1)`` matrix, corresponding to the panel vertices of the wake.\n\n        \"\"\"\n\n        ### project forces from uvlm FoR to FoR G\n        if self.settings['track_body']:\n            Cg_uvlm = np.dot(self.Cga, self.Cga0.T)\n\n        f_aero = y_n\n\n        gamma_vec, gamma_star_vec, gamma_dot_vec = self.data.aero.linear['System'].unpack_state(x_n)\n\n        # Reshape output into forces[i_surface] where forces[i_surface] is a (6,M+1,N+1) matrix and circulation terms\n        # where gamma is a [i_surf](M+1, N+1) matrix\n        forces = []\n        gamma = []\n        gamma_star = []\n        gamma_dot = []\n\n        worked_points = 0\n        worked_panels = 0\n        worked_wake_panels = 0\n\n        for i_surf in range(aero_tstep.n_surf):\n            # Tuple with dimensions of the aerogrid zeta, which is the same shape for forces\n            dimensions = aero_tstep.zeta[i_surf].shape\n            dimensions_gamma = self.data.aero.aero_dimensions[i_surf]\n            dimensions_wake = self.data.aero.aero_dimensions_star[i_surf]\n\n            # Number of entries in zeta\n            points_in_surface = aero_tstep.zeta[i_surf].size\n            panels_in_surface = aero_tstep.gamma[i_surf].size\n            panels_in_wake = aero_tstep.gamma_star[i_surf].size\n\n            # Append reshaped forces to each entry in list (one for each surface)\n            forces.append(f_aero[worked_points:worked_points + points_in_surface].reshape(dimensions, order='C'))\n\n            ### project forces.\n            # - forces are in UVLM linearisation frame. Hence, these  are projected\n            # into FoR (using rotation matrix Cag0 time 0) A and back to FoR G\n            if self.settings['track_body']:\n                for mm in range(dimensions[1]):\n                    for nn in range(dimensions[2]):\n                        forces[i_surf][:, mm, nn] = np.dot(Cg_uvlm, forces[i_surf][:, mm, nn])\n\n            # Add the null bottom 3 rows to to the forces entry\n            forces[i_surf] = np.concatenate((forces[i_surf], np.zeros(dimensions)))\n\n            # Reshape bound circulation terms\n            gamma.append(gamma_vec[worked_panels:worked_panels + panels_in_surface].reshape(\n                dimensions_gamma, order='C'))\n            gamma_dot.append(gamma_dot_vec[worked_panels:worked_panels + panels_in_surface].reshape(\n                dimensions_gamma, order='C'))\n\n            # Reshape wake circulation terms\n            gamma_star.append(gamma_star_vec[worked_wake_panels:worked_wake_panels + panels_in_wake].reshape(\n                dimensions_wake, order='C'))\n\n            worked_points += points_in_surface\n            worked_panels += panels_in_surface\n            worked_wake_panels += panels_in_wake\n\n        return forces, gamma, gamma_dot, gamma_star\n\n    def pack_input_vector(self):\n        r\"\"\"\n        Transform a SHARPy AeroTimestep instance into a column vector containing the input to the linear UVLM system.\n\n        .. math:: [\\zeta,\\, \\dot{\\zeta}, u_{ext}] \\longrightarrow \\mathbf{u}\n\n        If the ``track_body`` option is on, the function projects all the input\n        into a frame that:\n\n            a. is equal to the FoR G at time 0 (linearisation point)\n            b. rotates as the body frame specified in the ``track_body_number``\n\n        Returns:\n            np.ndarray: Input vector\n        \"\"\"\n\n        aero_tstep = self.data.aero.timestep_info[-1]\n\n        ### re-compute projection in G frame as if A was not rotating\n        # - u_n is in FoR G. Hence, this is project in FoR A and back to FoR G\n        # using rotation matrix aat time 0 (as if FoR A was not rotating).\n        if self.settings['track_body']:\n\n            Cuvlm_g = np.dot(self.Cga0, self.Cga.T)\n            zeta_uvlm, zeta_dot_uvlm, u_ext_uvlm = [], [], []\n\n            for i_surf in range(aero_tstep.n_surf):\n\n                Mp1, Np1 = aero_tstep.dimensions[i_surf] + 1\n\n                zeta_uvlm.append(np.empty((3, Mp1, Np1)))\n                zeta_dot_uvlm.append(np.empty((3, Mp1, Np1)))\n                u_ext_uvlm.append(np.empty((3, Mp1, Np1)))\n\n                for mm in range(Mp1):\n                    for nn in range(Np1):\n                        zeta_uvlm[i_surf][:, mm, nn] = \\\n                            np.dot(Cuvlm_g, aero_tstep.zeta[i_surf][:, mm, nn])\n                        zeta_dot_uvlm[i_surf][:, mm, nn] = \\\n                            np.dot(Cuvlm_g, aero_tstep.zeta_dot[i_surf][:, mm, nn])\n                        u_ext_uvlm[i_surf][:, mm, nn] = \\\n                            np.dot(Cuvlm_g, aero_tstep.u_ext[i_surf][:, mm, nn])\n\n            zeta = np.concatenate([zeta_uvlm[i_surf].reshape(-1, order='C')\n                                   for i_surf in range(aero_tstep.n_surf)])\n            zeta_dot = np.concatenate([zeta_dot_uvlm[i_surf].reshape(-1, order='C')\n                                       for i_surf in range(aero_tstep.n_surf)])\n            u_ext = np.concatenate([u_ext_uvlm[i_surf].reshape(-1, order='C')\n                                    for i_surf in range(aero_tstep.n_surf)])\n\n        else:\n\n            zeta = np.concatenate([aero_tstep.zeta[i_surf].reshape(-1, order='C')\n                                   for i_surf in range(aero_tstep.n_surf)])\n            zeta_dot = np.concatenate([aero_tstep.zeta_dot[i_surf].reshape(-1, order='C')\n                                       for i_surf in range(aero_tstep.n_surf)])\n            u_ext = np.concatenate([aero_tstep.u_ext[i_surf].reshape(-1, order='C')\n                                    for i_surf in range(aero_tstep.n_surf)])\n\n        u = np.concatenate((zeta, zeta_dot, u_ext))\n\n        return u\n\n    @staticmethod\n    def pack_state_vector(aero_tstep, aero_tstep_m1, dt, integr_order):\n        r\"\"\"\n        Transform SHARPy Aerotimestep format into column vector containing the state information.\n\n        The state vector is of a different form depending on the order of integration chosen. If a second order\n        scheme is chosen, the state includes the bound circulation at the previous timestep,\n        hence the timestep information for the previous timestep shall be parsed.\n\n        The transformation is of the form:\n\n        - If ``integr_order==1``:\n\n                .. math:: \\mathbf{x}_n = [\\mathbf{\\Gamma}^T_n,\\,\n                    \\mathbf{\\Gamma_w}_n^T,\\,\n                    \\Delta t \\,\\mathbf{\\dot{\\Gamma}}_n^T]^T\n\n        - Else, if ``integr_order==2``:\n\n                .. math:: \\mathbf{x}_n = [\\mathbf{\\Gamma}_n^T,\\,\n                    \\mathbf{\\Gamma_w}_n^T,\\,\n                    \\Delta t \\,\\mathbf{\\dot{\\Gamma}}_n^T,\\,\n                    \\mathbf{\\Gamma}_{n-1}^T]^T\n\n        For the second order integration scheme, if the previous timestep information is not parsed, a first order\n        stencil is employed to estimate the bound circulation at the previous timestep:\n\n            .. math:: \\mathbf{\\Gamma}^{n-1} = \\mathbf{\\Gamma}^n - \\Delta t \\mathbf{\\dot{\\Gamma}}^n\n\n        Args:\n            aero_tstep (AeroTimeStepInfo): Aerodynamic timestep information at the current timestep ``n``.\n            aero_tstep_m1 (AeroTimeStepInfo) Aerodynamic timestep information at the previous timestep ``n-1``.\n\n        Returns:\n            np.ndarray: State vector\n\n        \"\"\"\n\n        # Extract current state...\n        gamma = np.concatenate([aero_tstep.gamma[ss].reshape(-1, order='C')\n                                for ss in range(aero_tstep.n_surf)])\n        gamma_star = np.concatenate([aero_tstep.gamma_star[ss].reshape(-1, order='C')\n                                     for ss in range(aero_tstep.n_surf)])\n        gamma_dot = np.concatenate([aero_tstep.gamma_dot[ss].reshape(-1, order='C')\n                                    for ss in range(aero_tstep.n_surf)])\n\n        if integr_order == 1:\n            gamma_m1 = []\n\n        else:\n            if aero_tstep_m1:\n                gamma_m1 = np.concatenate([aero_tstep_m1.gamma[ss].reshape(-1, order='C')\n                                           for ss in range(aero_tstep.n_surf)])\n            else:\n                gamma_m1 = gamma - dt * gamma_dot\n\n        x = np.concatenate((gamma, gamma_star, dt * gamma_dot, gamma_m1))\n\n        return x\n"
  },
  {
    "path": "sharpy/solvers/stepuvlm.py",
    "content": "import numpy as np\nimport scipy.optimize\nimport scipy.signal\n\nimport sharpy.aero.utils.uvlmlib as uvlmlib\nimport sharpy.utils.settings as settings_utils\nfrom sharpy.utils.solver_interface import solver, BaseSolver\nimport sharpy.utils.generator_interface as gen_interface\nimport sharpy.utils.cout_utils as cout\nfrom sharpy.utils.constants import vortex_radius_def\n\n\n@solver\nclass StepUvlm(BaseSolver):\n    \"\"\"\n    StepUVLM is the main solver to use for unsteady aerodynamics.\n\n    The desired flow field is injected into the simulation by means of a ``generator``. For a list of available\n    velocity field generators see the documentation page on generators which can be found under SHARPy Source Code.\n\n    Typical generators could be:\n\n    * :class:`~.generators.steadyvelocityfield.SteadyVelocityField`\n\n    * :class:`~.generators.gustvelocityfield.GustVelocityField`\n\n    * :class:`~.generators.turbvelocityfield.TurbVelocityField`\n\n    amongst others.\n\n    \"\"\"\n    solver_id = 'StepUvlm'\n    solver_classification = 'aero'\n\n    settings_types = dict()\n    settings_default = dict()\n    settings_description = dict()\n    settings_options = dict()\n\n    settings_types['print_info'] = 'bool'\n    settings_default['print_info'] = True\n    settings_description['print_info'] = 'Print info to screen'\n\n    settings_types['num_cores'] = 'int'\n    settings_default['num_cores'] = 0\n    settings_description['num_cores'] = 'Number of cores to use in the VLM lib'\n\n    settings_types['n_time_steps'] = 'int'\n    settings_default['n_time_steps'] = 100\n    settings_description['n_time_steps'] = 'Number of time steps to be run'\n\n    settings_types['convection_scheme'] = 'int'\n    settings_default['convection_scheme'] = 3\n    settings_description['convection_scheme'] = '``0``: fixed wake, ' \\\n                                                '``2``: convected with background flow;' \\\n                                                '``3``: full force-free wake'\n    settings_options['convection_scheme'] = [0, 2, 3]\n\n    settings_types['dt'] = 'float'\n    settings_default['dt'] = 0.1\n    settings_description['dt'] = 'Time step'\n\n    # the following settings are not in used but are required in place since they are called in uvlmlib\n    settings_types['iterative_solver'] = 'bool'\n    settings_default['iterative_solver'] = False\n    settings_description['iterative_solver'] = 'Not in use'\n\n    settings_types['iterative_tol'] = 'float'\n    settings_default['iterative_tol'] = 1e-4\n    settings_description['iterative_tol'] = 'Not in use'\n\n    settings_types['iterative_precond'] = 'bool'\n    settings_default['iterative_precond'] = False\n    settings_description['iterative_precond'] = 'Not in use'\n\n    settings_types['velocity_field_generator'] = 'str'\n    settings_default['velocity_field_generator'] = 'SteadyVelocityField'\n    settings_description['velocity_field_generator'] = 'Name of the velocity field generator to be used in the ' \\\n                                                       'simulation'\n\n    settings_types['velocity_field_input'] = 'dict'\n    settings_default['velocity_field_input'] = {}\n    settings_description['velocity_field_input'] = 'Dictionary of settings for the velocity field generator'\n\n    settings_types['gamma_dot_filtering'] = 'int'\n    settings_default['gamma_dot_filtering'] = 0\n    settings_description['gamma_dot_filtering'] = 'Filtering parameter for the Welch filter for the Gamma_dot ' \\\n                                                  'estimation. Used when ``unsteady_force_contribution`` is ``on``.'\n\n    settings_types['rho'] = 'float'\n    settings_default['rho'] = 1.225\n    settings_description['rho'] = 'Air density'\n\n    settings_types['cfl1'] = 'bool'\n    settings_default['cfl1'] = True\n    settings_description['cfl1'] = 'If it is ``True``, it assumes that the discretisation complies with CFL=1'\n\n    settings_types['vortex_radius'] = 'float'\n    settings_default['vortex_radius'] = vortex_radius_def\n    settings_description['vortex_radius'] = 'Distance between points below which induction is not computed'\n\n    settings_types['vortex_radius_wake_ind'] = 'float'\n    settings_default['vortex_radius_wake_ind'] = vortex_radius_def\n    settings_description[\n        'vortex_radius_wake_ind'] = 'Distance between points below which induction is not computed in the wake convection'\n\n    settings_types['interp_coords'] = 'int'\n    settings_default['interp_coords'] = 0\n    settings_description['interp_coords'] = 'Coordinates to use for wake description: cartesian(0) or cylindrical_z(1)'\n    settings_options['interp_coords'] = [0, 1]\n\n    settings_types['filter_method'] = 'int'\n    settings_default['filter_method'] = 0\n    settings_description['filter_method'] = 'Method to filter the points: no filter (0) moving average(2)'\n    settings_options['filter_method'] = [0, 2]\n    # filter_method = 1 was dedicated to a splines filter. If it is needed in the future chack dev_alglib branch\n\n    settings_types['interp_method'] = 'int'\n    settings_default['interp_method'] = 0\n    settings_description[\n        'interp_method'] = 'Method of interpolation: linear(0), parabolic(1), splines(2), slerp around z(3), slerp around yaw_slerp(4)'\n    settings_options['interp_method'] = [0, 1, 2, 3, 4]\n\n    settings_types['yaw_slerp'] = 'float'\n    settings_default['yaw_slerp'] = 0\n    settings_description['yaw_slerp'] = 'Yaw angle in radians to be used when interp_metod == 4'\n\n    settings_types['centre_rot'] = 'list(float)'\n    settings_default['centre_rot'] = [0., 0., 0.]\n    settings_description[\n        'centre_rot'] = 'Coordinates of the centre of rotation to perform slerp interpolation or cylindrical coordinates'\n\n    settings_types['quasi_steady'] = 'bool'\n    settings_default['quasi_steady'] = False\n    settings_description['quasi_steady'] = 'Use quasi-steady approximation in UVLM'\n\n    settings_types['only_nonlifting'] = 'bool'\n    settings_default['only_nonlifting'] = False\n    settings_description['only_nonlifting'] = 'Consider nonlifting body interactions'\n\n    settings_types['nonlifting_body_interactions'] = 'bool'\n    settings_default['nonlifting_body_interactions'] = False\n    settings_description['nonlifting_body_interactions'] = 'Consider nonlifting body interactions'\n\n    settings_types['phantom_wing_test'] = 'bool'\n    settings_default['phantom_wing_test'] = False\n    settings_description['phantom_wing_test'] = 'Debug option'\n\n    settings_types['centre_rot_g'] = 'list(float)'\n    settings_default['centre_rot_g'] = [0., 0., 0.]\n    settings_description['centre_rot_g'] = 'Centre of rotation in G FoR around which ``rbm_vel_g`` is applied'\n\n    settings_types['ignore_first_x_nodes_in_force_calculation'] = 'int'\n    settings_default['ignore_first_x_nodes_in_force_calculation'] = 0\n    settings_description[\n        'ignore_first_x_nodes_in_force_calculation'] = 'Ignores the forces on the first user-specified number of nodes of all surfaces.'\n\n    settings_table = settings_utils.SettingsTable()\n    __doc__ += settings_table.generate(settings_types, settings_default, settings_description, settings_options)\n\n    def __init__(self):\n        self.data = None\n        self.settings = None\n        self.velocity_generator = None\n\n    def initialise(self, data, custom_settings=None, restart=False):\n        \"\"\"\n        To be called just once per simulation.\n        \"\"\"\n        self.data = data\n        if custom_settings is None:\n            self.settings = data.settings[self.solver_id]\n        else:\n            self.settings = custom_settings\n        settings_utils.to_custom_types(self.settings,\n                                       self.settings_types,\n                                       self.settings_default,\n                                       self.settings_options)\n\n        self.data.structure.add_unsteady_information(\n            self.data.structure.dyn_dict,\n            self.settings['n_time_steps'])\n\n        # Filtering\n        if self.settings['gamma_dot_filtering'] == 1:\n            cout.cout_wrap(\n                \"gamma_dot_filtering cannot be one. Changing it to None\", 2)\n            self.settings['gamma_dot_filtering'] = None\n        if self.settings['gamma_dot_filtering'] is not None:\n            if self.settings['gamma_dot_filtering']:\n                if not self.settings['gamma_dot_filtering'] % 2:\n                    cout.cout_wrap(\n                        \"gamma_dot_filtering does not support even numbers.\" +\n                        \"Changing \" +\n                        str(self.settings['gamma_dot_filtering']) +\n                        \" to \" +\n                        str(self.settings['gamma_dot_filtering'] + 1),\n                        2)\n                    self.settings['gamma_dot_filtering'] += 1\n\n        # init velocity generator\n        velocity_generator_type = gen_interface.generator_from_string(\n            self.settings['velocity_field_generator'])\n        self.velocity_generator = velocity_generator_type()\n        self.velocity_generator.initialise(\n            self.settings['velocity_field_input'],\n            restart=restart)\n\n    def run(self, **kwargs):\n        \"\"\"\n        Runs a step of the aerodynamics as implemented in UVLM.\n        \"\"\"\n\n        # Default values\n        aero_tstep = settings_utils.set_value_or_default(kwargs, 'aero_step', self.data.aero.timestep_info[-1])\n        structure_tstep = settings_utils.set_value_or_default(kwargs, 'structural_step',\n                                                              self.data.structure.timestep_info[-1])\n        convect_wake = settings_utils.set_value_or_default(kwargs, 'convect_wake', True)\n        dt = settings_utils.set_value_or_default(kwargs, 'dt', self.settings['dt'])\n        t = settings_utils.set_value_or_default(kwargs, 't', self.data.ts * dt)\n        unsteady_contribution = settings_utils.set_value_or_default(kwargs, 'unsteady_contribution', False)\n\n        if not aero_tstep.zeta:\n            return self.data\n\n        # generate uext\n        self.velocity_generator.generate({'zeta': aero_tstep.zeta,\n                                          'override': True,\n                                          't': t,\n                                          'ts': self.data.ts,\n                                          'dt': dt,\n                                          'for_pos': structure_tstep.for_pos,\n                                          'is_wake': False},\n                                         aero_tstep.u_ext)\n        if ((self.settings['convection_scheme'] > 1 and convect_wake) or\n                (not self.settings['cfl1'])):\n            # generate uext_star\n            self.velocity_generator.generate({'zeta': aero_tstep.zeta_star,\n                                              'override': True,\n                                              'ts': self.data.ts,\n                                              'dt': dt,\n                                              't': t,\n                                              'for_pos': structure_tstep.for_pos,\n                                              'is_wake': True},\n                                             aero_tstep.u_ext_star)\n        if self.settings['nonlifting_body_interactions']:\n\n            nl_body_tstep = settings_utils.set_value_or_default(kwargs, 'nl_body_tstep',\n                                                                self.data.nonlifting_body.timestep_info[-1])\n            self.velocity_generator.generate({'zeta': nl_body_tstep.zeta,\n                                              'override': True,\n                                              'ts': self.data.ts,\n                                              'dt': dt,\n                                              't': t,\n                                              'for_pos': structure_tstep.for_pos,\n                                              'is_wake': False},\n                                             nl_body_tstep.u_ext)\n\n            uvlmlib.uvlm_solver_lifting_and_nonlifting(self.data.ts,\n                                                       aero_tstep,\n                                                       nl_body_tstep,\n                                                       structure_tstep,\n                                                       self.settings,\n                                                       convect_wake=convect_wake,\n                                                       dt=dt)\n        else:\n            uvlmlib.uvlm_solver(self.data.ts,\n                                aero_tstep,\n                                structure_tstep,\n                                self.settings,\n                                convect_wake=convect_wake,\n                                dt=dt)\n\n        if unsteady_contribution and not self.settings['quasi_steady']:\n            # calculate unsteady (added mass) forces:\n            self.data.aero.compute_gamma_dot(dt,\n                                             aero_tstep,\n                                             self.data.aero.timestep_info[-3:])\n            if self.settings['gamma_dot_filtering'] is None:\n                self.filter_gamma_dot(aero_tstep,\n                                      self.data.aero.timestep_info,\n                                      None)\n            elif self.settings['gamma_dot_filtering'] > 0:\n                self.filter_gamma_dot(\n                    aero_tstep,\n                    self.data.aero.timestep_info,\n                    self.settings['gamma_dot_filtering'])\n            uvlmlib.uvlm_calculate_unsteady_forces(aero_tstep,\n                                                   structure_tstep,\n                                                   self.settings,\n                                                   convect_wake=convect_wake,\n                                                   dt=dt)\n        else:\n            for i_surf in range(len(aero_tstep.gamma)):\n                aero_tstep.gamma_dot[i_surf][:] = 0.0\n        return self.data\n\n    def add_step(self):\n        self.data.aero.add_timestep()\n        if self.settings['nonlifting_body_interactions']:\n            self.data.nonlifting_body.add_timestep()\n\n    def update_grid(self, beam):\n        self.data.aero.generate_zeta(beam,\n                                     self.data.aero.aero_settings,\n                                     -1,\n                                     beam_ts=-1)\n        if self.settings['nonlifting_body_interactions']:\n            self.data.nonlifting_body.generate_zeta(beam,\n                                                    self.data.aero.aero_settings,\n                                                    -1,\n                                                    beam_ts=-1)\n\n    def update_custom_grid(self, structure_tstep, aero_tstep, nl_body_tstep=None):\n        self.data.aero.generate_zeta_timestep_info(structure_tstep,\n                                                   aero_tstep,\n                                                   self.data.structure,\n                                                   self.data.aero.aero_settings,\n                                                   dt=self.settings['dt'])\n        if self.settings['nonlifting_body_interactions']:\n            if nl_body_tstep is None:\n                nl_body_tstep = self.data.nonlifting_body.timestep_info[-1]\n            self.data.nonlifting_body.generate_zeta_timestep_info(structure_tstep,\n                                                                  nl_body_tstep,\n                                                                  self.data.structure,\n                                                                  self.data.nonlifting_body.aero_settings,\n                                                                  dt=self.settings['dt'])\n\n    @staticmethod\n    def filter_gamma_dot(tstep, history, filter_param):\n        clean_history = [x for x in history if x is not None]\n        series_length = len(clean_history) + 1\n        for i_surf in range(len(tstep.zeta)):\n            n_rows, n_cols = tstep.gamma[i_surf].shape\n            for i in range(n_rows):\n                for j in range(n_cols):\n                    series = np.zeros((series_length,))\n                    for it in range(series_length - 1):\n                        series[it] = clean_history[it].gamma_dot[i_surf][i, j]\n                    series[-1] = tstep.gamma_dot[i_surf][i, j]\n\n                    # filter\n                    tstep.gamma_dot[i_surf][i, j] = scipy.signal.wiener(\n                        series, filter_param)[-1]\n"
  },
  {
    "path": "sharpy/solvers/timeintegrators.py",
    "content": "import numpy as np\nimport ctypes as ct\n\nimport sharpy.utils.settings as settings_utils\nfrom sharpy.utils.solver_interface import solver\n\n\n@solver\nclass _BaseTimeIntegrator():\n    \"\"\"\n    Base structure for time integrators\n    \"\"\"\n\n    solver_id = '_BaseTimeIntegrator'\n    solver_classification = 'time_integrator'\n\n    settings_types = dict()\n    settings_default = dict()\n    settings_description = dict()\n    settings_options = dict()\n\n    def __init__(self):\n        pass\n\n\n    def initialise(self, data, custom_settings=None, restart=False):\n        pass\n\n\n    def predictor(self, q, dqdt, dqddt):\n        pass\n\n\n    def build_matrix(self, M, C, K):\n        pass\n\n\n    def corrector(self, q, dqdt, dqddt, Dq):\n        pass\n\n\n@solver\nclass NewmarkBeta(_BaseTimeIntegrator):\n    \"\"\"\n    Time integration according to the Newmark-beta scheme\n    \"\"\"\n\n    solver_id = 'NewmarkBeta'\n    solver_classification = 'time_integrator'\n\n    settings_types = _BaseTimeIntegrator.settings_types.copy()\n    settings_default = _BaseTimeIntegrator.settings_default.copy()\n    settings_description = _BaseTimeIntegrator.settings_description.copy()\n    settings_options = _BaseTimeIntegrator.settings_options.copy()\n\n    settings_types['dt'] = 'float'\n    settings_default['dt'] = None\n    settings_description['dt'] = 'Time step'\n\n    settings_types['newmark_damp'] = 'float'\n    settings_default['newmark_damp'] = 1e-4\n    settings_description['newmark_damp'] = 'Newmark damping coefficient'\n\n    settings_types['sys_size'] = 'int'\n    settings_default['sys_size'] = 0\n    settings_description['sys_size'] = 'Size of the system without constraints'\n\n    settings_types['num_LM_eq'] = 'int'\n    settings_default['num_LM_eq'] = 0\n    settings_description['num_LM_eq'] = 'Number of constraint equations'\n\n    def __init__(self):\n\n        self.sys_size = None\n        self.num_LM_eq = None\n        self.dt = None\n        self.beta = None\n        self.gamma = None\n\n    def initialise(self, data, custom_settings=None, restart=False):\n\n        if custom_settings is None:\n            self.settings = data.settings[self.solver_id]\n        else:\n            self.settings = custom_settings\n        settings_utils.to_custom_types(self.settings,\n                           self.settings_types,\n                           self.settings_default,\n                           no_ctype=True)\n\n        self.dt = self.settings['dt']\n        self.gamma = 0.5 + self.settings['newmark_damp']\n        self.beta = 0.25*(self.gamma + 0.5)*(self.gamma + 0.5)\n\n        self.sys_size = self.settings['sys_size']\n        self.num_LM_eq = self.settings['num_LM_eq']\n\n    def predictor(self, q, dqdt, dqddt):\n\n        sys_size = self.sys_size\n        q[:sys_size] += self.dt*dqdt[:sys_size] + (0.5 - self.beta)*self.dt*self.dt*dqddt[:sys_size]\n        dqdt[:sys_size] += (1.0 - self.gamma)*self.dt*dqddt[:sys_size]\n        dqddt *= 0.\n\n        # q[sys_size:] = q[sys_size:]\n        dqdt[sys_size:] = dqdt[sys_size:]\n\n    def build_matrix(self, M, C, K, Q, kBnh, LM_Q):\n\n        sys_size = self.sys_size\n        num_LM_eq = self.num_LM_eq\n\n        Asys = np.zeros((sys_size + num_LM_eq, sys_size + num_LM_eq),\n                         dtype=ct.c_double, order='F')\n        Qout = np.zeros((sys_size + num_LM_eq), dtype=ct.c_double, order='F')\n\n        Asys[:sys_size, :sys_size] = K + C*self.gamma/(self.beta*self.dt) + M/(self.beta*self.dt*self.dt)\n        Qout[:sys_size] = Q.copy()\n\n        Asys[sys_size:, :sys_size] = (self.gamma/self.beta/self.dt)*kBnh\n        Asys[:sys_size, sys_size:] = kBnh.T\n        Qout[sys_size:] = LM_Q.copy()\n\n        return Asys, Qout\n\n    def corrector(self, q, dqdt, dqddt, Dq):\n\n        sys_size = self.sys_size\n\n        q[:sys_size] += Dq[:sys_size]\n        dqdt[:sys_size] += self.gamma/(self.beta*self.dt)*Dq[:sys_size]\n        dqddt[:sys_size] += 1.0/(self.beta*self.dt*self.dt)*Dq[:sys_size]\n\n        dqdt[sys_size:] += Dq[sys_size:]\n\n\n@solver\nclass GeneralisedAlpha(_BaseTimeIntegrator):\n    \"\"\"\n    Time integration according to the Generalised-Alpha scheme\n    \"\"\"\n\n    solver_id = 'GeneralisedAlpha'\n    solver_classification = 'time_integrator'\n\n    settings_types = _BaseTimeIntegrator.settings_types.copy()\n    settings_default = _BaseTimeIntegrator.settings_default.copy()\n    settings_description = _BaseTimeIntegrator.settings_description.copy()\n    settings_options = _BaseTimeIntegrator.settings_options.copy()\n\n    settings_types['dt'] = 'float'\n    settings_default['dt'] = None\n    settings_description['dt'] = 'Time step'\n\n    settings_types['am'] = 'float'\n    settings_default['am'] = 0.\n    settings_description['am'] = 'alpha_M coefficient'\n\n    settings_types['af'] = 'float'\n    settings_default['af'] = 0.1\n    settings_description['af'] = 'alpha_F coefficient'\n\n    settings_types['sys_size'] = 'int'\n    settings_default['sys_size'] = 0\n    settings_description['sys_size'] = 'Size of the system without constraints'\n\n    settings_types['num_LM_eq'] = 'int'\n    settings_default['num_LM_eq'] = 0\n    settings_description['num_LM_eq'] = 'Number of contraint equations'\n\n    def __init__(self):\n\n        self.num_LM_eq = None\n        self.sys_size = None\n        self.om_af = None\n        self.om_am = None\n        self.dt = None\n        self.am = None\n        self.af = None\n        self.gamma = None\n        self.beta = None\n\n    def initialise(self, data, custom_settings=None, restart=False):\n\n        if custom_settings is None:\n            self.settings = data.settings[self.solver_id]\n        else:\n            self.settings = custom_settings\n        settings_utils.to_custom_types(self.settings,\n                                 self.settings_types,\n                                 self.settings_default,\n                                 no_ctype=True)\n\n        self.dt = self.settings['dt']\n        self.am = self.settings['am']\n        self.af = self.settings['af']\n\n        self.om_am = 1. - self.am\n        self.om_af = 1. - self.af\n\n        self.gamma = 0.5 - self.am + self.af\n        self.beta = 0.25*(1. - self.am + self.af)**2\n\n        self.sys_size = self.settings['sys_size']\n        self.num_LM_eq = self.settings['num_LM_eq']\n\n    def predictor(self, q, dqdt, dqddt):\n\n        sys_size = self.sys_size\n        q[:sys_size] += self.dt*dqdt[:sys_size] + (0.5 - self.beta)*self.dt*self.dt*dqddt[:sys_size]\n        dqdt[:sys_size] += (1.0 - self.gamma)*self.dt*dqddt[:sys_size]\n        dqddt *= 0.\n\n        dqdt[sys_size:] = dqdt[sys_size:]\n\n    def build_matrix(self, M, C, K, Q, kBnh, LM_Q):\n\n        sys_size = self.sys_size\n        num_LM_eq = self.num_LM_eq\n\n        Asys = np.zeros((sys_size + num_LM_eq, sys_size + num_LM_eq),\n                         dtype=ct.c_double, order='F')\n        Qout = np.zeros((sys_size + num_LM_eq), dtype=ct.c_double, order='F')\n\n        Asys[:sys_size, :sys_size] = (self.om_af*K +\n                                      self.gamma*self.om_af/self.beta/self.dt*C +\n                                      self.om_am/(self.beta*self.dt*self.dt)*M)\n\n        Qout[:sys_size] = Q.copy()\n\n        Asys[sys_size:, :sys_size] = (self.gamma*self.om_af/self.beta/self.dt)*kBnh\n        Asys[:sys_size, sys_size:] = kBnh.T\n        Qout[sys_size:] = LM_Q.copy()\n\n        return Asys, Qout\n\n    def corrector(self, q, dqdt, dqddt, Dq):\n\n        sys_size = self.sys_size\n\n        q[:sys_size] += self.om_af*Dq[:sys_size]\n        dqdt[:sys_size] += self.gamma*self.om_af/self.beta/self.dt*Dq[:sys_size]\n        dqddt[:sys_size] += self.om_am/self.beta/self.dt**2*Dq[:sys_size]\n       \n        dqdt[sys_size:] += Dq[sys_size:]\n"
  },
  {
    "path": "sharpy/solvers/timeintegratorsjax.py",
    "content": "import numpy as np\nfrom abc import abstractmethod\nimport typing\n\nimport sharpy.utils.settings as settings_utils\nfrom sharpy.utils.solver_interface import solver\n\narr: typing.Type = np.ndarray\n\n\n@solver\nclass _BaseTimeIntegrator:\n    \"\"\"\n    Base structure for time integrators\n    \"\"\"\n\n    solver_id = '_BaseTimeIntegrator'\n    solver_classification = 'time_integrator'\n\n    settings_types = dict()\n    settings_default = dict()\n    settings_description = dict()\n    settings_options = dict()\n\n    def __init__(self):\n        pass\n\n    @abstractmethod\n    def initialise(self, data, custom_settings=None, restart=False):\n        pass\n\n    @abstractmethod\n    def predictor(self, q: arr, dqdt: arr, dqddt: arr):\n        pass\n\n    @abstractmethod\n    def build_matrix(self, m: arr, c: arr, k: arr):\n        pass\n\n    @abstractmethod\n    def corrector(self, q: arr, dqdt: arr, dqddt: arr, dq: arr):\n        pass\n\n\n@solver\nclass NewmarkBetaJAX(_BaseTimeIntegrator):\n    \"\"\"\n    Time integration according to the Newmark-beta scheme\n    \"\"\"\n\n    solver_id = 'NewmarkBetaJAX'\n    solver_classification = 'time_integrator'\n\n    settings_types = _BaseTimeIntegrator.settings_types.copy()\n    settings_default = _BaseTimeIntegrator.settings_default.copy()\n    settings_description = _BaseTimeIntegrator.settings_description.copy()\n    settings_options = _BaseTimeIntegrator.settings_options.copy()\n\n    settings_types['dt'] = 'float'\n    settings_default['dt'] = None\n    settings_description['dt'] = 'Time step'\n\n    settings_types['newmark_damp'] = 'float'\n    settings_default['newmark_damp'] = 1e-4\n    settings_description['newmark_damp'] = 'Newmark damping coefficient'\n\n    settings_types['sys_size'] = 'int'\n    settings_default['sys_size'] = 0\n    settings_description['sys_size'] = 'Size of the system without constraints'\n\n    settings_types['num_LM_eq'] = 'int'\n    settings_default['num_LM_eq'] = 0\n    settings_description['num_LM_eq'] = 'Number of constraint equations'\n\n    def __init__(self):\n        super().__init__()  # I know the base class has no function here, but this makes Pycharm leave me alone\n        self.dt = None\n        self.beta = None\n        self.gamma = None\n        self.sys_size = None\n        self.num_lm_eq = None\n        self.settings = None\n\n    def initialise(self, data, custom_settings=None, restart=False) -> None:\n\n        if custom_settings is None:\n            self.settings = data.input_settings[self.solver_id]\n        else:\n            self.settings = custom_settings\n        settings_utils.to_custom_types(self.settings,\n                                       self.settings_types,\n                                       self.settings_default,\n                                       no_ctype=True)\n\n        self.dt = self.settings['dt']\n        self.gamma = 0.5 + self.settings['newmark_damp']\n        self.beta = 0.25 * (self.gamma + 0.5) * (self.gamma + 0.5)\n\n        self.sys_size = self.settings['sys_size']\n        self.num_lm_eq = self.settings['num_LM_eq']\n\n    def predictor(self, q, dqdt, dqddt):\n        q[:self.sys_size] += (self.dt * dqdt[:self.sys_size]\n                              + (0.5 - self.beta) * self.dt * self.dt * dqddt[:self.sys_size])\n        dqdt[:self.sys_size] += (1. - self.gamma) * self.dt * dqddt[:self.sys_size]\n        dqddt.fill(0.)\n\n    def build_matrix(self, m: arr, c: arr, k: arr) -> arr:\n        a_sys = np.zeros((self.sys_size + self.num_lm_eq, self.sys_size + self.num_lm_eq))\n        a_sys[:, :self.sys_size] = (k[:, :self.sys_size]\n                                    + c[:, :self.sys_size] * self.gamma / (self.beta * self.dt)\n                                    + m[:, :self.sys_size] / (self.beta * self.dt * self.dt))\n        a_sys[:, self.sys_size:] = k[:, self.sys_size:] + c[:, self.sys_size:]\n        return a_sys\n\n    def corrector(self, q: arr, dqdt: arr, dqddt: arr, dq: arr) -> None:\n        q[:self.sys_size] += dq[:self.sys_size]\n        dqdt[:self.sys_size] += self.gamma / (self.beta * self.dt) * dq[:self.sys_size]\n        dqddt[:self.sys_size] += 1. / (self.beta * self.dt * self.dt) * dq[:self.sys_size]\n        dqdt[self.sys_size:] += dq[self.sys_size:]\n\n\n@solver\nclass GeneralisedAlphaJAX(_BaseTimeIntegrator):\n    \"\"\"\n    Time integration according to the Generalised-Alpha scheme\n    \"\"\"\n\n    solver_id = 'GeneralisedAlphaJAX'\n    solver_classification = 'time_integrator'\n\n    settings_types = _BaseTimeIntegrator.settings_types.copy()\n    settings_default = _BaseTimeIntegrator.settings_default.copy()\n    settings_description = _BaseTimeIntegrator.settings_description.copy()\n    settings_options = _BaseTimeIntegrator.settings_options.copy()\n\n    settings_types['dt'] = 'float'\n    settings_default['dt'] = None\n    settings_description['dt'] = 'Time step'\n\n    settings_types['am'] = 'float'\n    settings_default['am'] = 0.\n    settings_description['am'] = 'alpha_M coefficient'\n\n    settings_types['af'] = 'float'\n    settings_default['af'] = 0.1\n    settings_description['af'] = 'alpha_F coefficient'\n\n    settings_types['sys_size'] = 'int'\n    settings_default['sys_size'] = 0\n    settings_description['sys_size'] = 'Size of the system without constraints'\n\n    settings_types['num_LM_eq'] = 'int'\n    settings_default['num_LM_eq'] = 0\n    settings_description['num_LM_eq'] = 'Number of contraint equations'\n\n    def __init__(self):\n        super().__init__()\n        self.dt = None\n        self.am = None\n        self.af = None\n        self.gamma = None\n        self.beta = None\n        self.om_am = None\n        self.om_af = None\n        self.sys_size = None\n        self.num_lm_eq = None\n\n    def initialise(self, data, custom_settings=None, restart=False) -> None:\n\n        if custom_settings is None:\n            self.settings = data.input_settings[self.solver_id]\n        else:\n            self.settings = custom_settings\n        settings_utils.to_custom_types(self.settings,\n                                       self.settings_types,\n                                       self.settings_default,\n                                       no_ctype=True)\n\n        self.dt = self.settings['dt']\n        self.am = self.settings['am']\n        self.af = self.settings['af']\n        self.om_am = 1. - self.am\n        self.om_af = 1. - self.af\n        self.gamma = 0.5 - self.am + self.af\n        self.beta = 0.25 * (1. - self.am + self.af) ** 2\n        self.sys_size = self.settings['sys_size']\n        self.num_lm_eq = self.settings['num_LM_eq']\n\n    def predictor(self, q: arr, dqdt: arr, dqddt: arr):\n        q[:self.sys_size] += (self.dt * dqdt[:self.sys_size]\n                              + (0.5 - self.beta) * self.dt * self.dt * dqddt[:self.sys_size])\n        dqdt[:self.sys_size] += (1. - self.gamma) * self.dt * dqddt[:self.sys_size]\n        dqddt.fill(0.)\n\n    def build_matrix(self, m: arr, c: arr, k: arr) -> arr:\n        a_sys = np.zeros((self.sys_size + self.num_lm_eq, self.sys_size + self.num_lm_eq))\n        a_sys[:, :self.sys_size] = (self.om_af * k\n                                    + self.gamma * self.om_af / (self.beta * self.dt) * c\n                                    + self.om_am / (self.beta * self.dt * self.dt) * m)\n\n        a_sys[:, self.sys_size:] = k[:, self.sys_size:] + c[:, self.sys_size:]\n        return a_sys\n\n    def corrector(self, q: arr, dqdt: arr, dqddt: arr, dq: arr) -> None:\n        q[:self.sys_size] += self.om_af * dq[:self.sys_size]\n        dqdt[:self.sys_size] += self.gamma * self.om_af / self.beta / self.dt * dq[:self.sys_size]\n        dqddt[:self.sys_size] += self.om_am / self.beta / self.dt ** 2 * dq[:self.sys_size]\n        dqdt[self.sys_size:] += dq[self.sys_size:]\n"
  },
  {
    "path": "sharpy/solvers/trim.py",
    "content": "import numpy as np\nimport scipy.optimize\n\nimport sharpy.utils.cout_utils as cout\nimport sharpy.utils.solver_interface as solver_interface\nfrom sharpy.utils.solver_interface import solver, BaseSolver\nimport sharpy.utils.settings as settings_utils\nimport sharpy.utils.algebra as algebra\n\n\n@solver\nclass Trim(BaseSolver):\n    \"\"\"\n    Trim routine with support for lateral dynamics. It usually struggles much more\n    than the ``StaticTrim`` (only longitudinal) solver.\n\n    We advise to start with ``StaticTrim`` even if you configuration is not totally symmetric.\n    \"\"\"\n    solver_id = 'Trim'\n    solver_classification = 'Flight dynamics'\n\n    settings_types = dict()\n    settings_default = dict()\n    settings_description = dict()\n\n    settings_types['print_info'] = 'bool'\n    settings_default['print_info'] = True\n    settings_description['print_info'] = 'Print info to screen'\n\n    settings_types['solver'] = 'str'\n    settings_default['solver'] = ''\n    settings_description['solver'] = 'Solver to run in trim routine'\n\n    settings_types['solver_settings'] = 'dict'\n    settings_default['solver_settings'] = dict()\n    settings_description['solver_settings'] = 'Solver settings dictionary'\n\n    settings_types['max_iter'] = 'int'\n    settings_default['max_iter'] = 100\n    settings_description['max_iter'] = 'Maximum number of iterations of trim routine'\n\n    settings_types['tolerance'] = 'float'\n    settings_default['tolerance'] = 1e-4\n    settings_description['tolerance'] = 'Threshold for convergence of trim'\n\n    settings_types['initial_alpha'] = 'float'\n    settings_default['initial_alpha'] = 0.\n    settings_description['initial_alpha'] = 'Initial angle of attack'\n\n    settings_types['initial_beta'] = 'float'\n    settings_default['initial_beta'] = 0.\n    settings_description['initial_beta'] = 'Initial sideslip angle'\n\n    settings_types['initial_roll'] = 'float'\n    settings_default['initial_roll'] = 0\n    settings_description['initial_roll'] = 'Initial roll angle'\n\n    settings_types['cs_indices'] = 'list(int)'\n    settings_default['cs_indices'] = []\n    settings_description['cs_indices'] = 'Indices of control surfaces to be trimmed'\n\n    settings_types['initial_cs_deflection'] = 'list(float)'\n    settings_default['initial_cs_deflection'] = []\n    settings_description['initial_cs_deflection'] = 'Initial deflection of the control surfaces in order.'\n\n    settings_types['thrust_nodes'] = 'list(int)'\n    settings_default['thrust_nodes'] = [0]\n    settings_description['thrust_nodes'] = 'Nodes at which thrust is applied'\n\n    settings_types['initial_thrust'] = 'list(float)'\n    settings_default['initial_thrust'] = [1.]\n    settings_description['initial_thrust'] = 'Initial thrust setting'\n\n    settings_types['thrust_direction'] = 'list(float)'\n    settings_default['thrust_direction'] = [.0, 1.0, 0.0]\n    settings_description['thrust_direction'] = 'Thrust direction setting'\n\n    settings_types['special_case'] = 'dict'\n    settings_default['special_case'] = dict()\n    settings_description['special_case'] = 'Extra settings for specific cases such as differential thrust control'\n\n    settings_types['refine_solution'] = 'bool'\n    settings_default['refine_solution'] = False\n    settings_description['refine_solution'] = 'If ``True`` and the optimiser routine allows for it, the optimiser will try to improve the solution with hybrid methods'\n\n    settings_table = settings_utils.SettingsTable()\n    __doc__ += settings_table.generate(settings_types, settings_default, settings_description)\n\n    def __init__(self):\n        self.data = None\n        self.settings = None\n        self.solver = None\n\n        self.x_info = dict()\n        self.initial_state = None\n\n        self.with_special_case = False\n\n    def initialise(self, data, restart=False):\n        self.data = data\n        self.settings = data.settings[self.solver_id]\n        settings_utils.to_custom_types(self.settings, self.settings_types, self.settings_default)\n\n        self.solver = solver_interface.initialise_solver(self.settings['solver'])\n        self.solver.initialise(self.data, self.settings['solver_settings'], restart=restart)\n\n        # generate x_info (which elements of the x array are what)\n        counter = 0\n        self.x_info['n_variables'] = 0\n        # alpha\n        self.x_info['i_alpha'] = counter\n        counter += 1\n        # beta\n        self.x_info['i_beta'] = counter\n        counter += 1\n        # roll\n        self.x_info['i_roll'] = counter\n        counter += 1\n        # control surfaces\n        n_control_surfaces = len(self.settings['cs_indices'])\n        self.x_info['i_control_surfaces'] = []  # indices in the state vector\n        self.x_info['control_surfaces_id'] = []  # indices of the trimmed control surfaces\n        for i_cs in range(n_control_surfaces):\n            self.x_info['i_control_surfaces'].append(counter)\n            self.x_info['control_surfaces_id'].append(self.settings['cs_indices'][i_cs])\n            counter += 1\n        # thrust\n        n_thrust_nodes = len(self.settings['thrust_nodes'])\n        self.x_info['i_thrust'] = []\n        self.x_info['thrust_nodes'] = []\n        self.x_info['thrust_direction'] = []\n        for i_thrust in range(n_thrust_nodes):\n            self.x_info['i_thrust'].append(counter)\n            self.x_info['thrust_nodes'].append(self.settings['thrust_nodes'][i_thrust])\n            self.x_info['thrust_direction'].append(self.settings['thrust_direction'])\n            counter += 1\n        self.x_info['n_variables'] = counter\n\n        # special cases\n        self.with_special_case = self.settings['special_case']\n        if self.with_special_case:\n            if self.settings['special_case']['case_name'] == 'differential_thrust':\n                self.x_info['special_case'] = 'differential_thrust'\n                self.x_info['i_base_thrust'] = counter\n                counter += 1\n                self.x_info['i_differential_parameter'] = counter\n                counter += 1\n                self.x_info['initial_base_thrust'] = self.settings['special_case']['initial_base_thrust']\n                self.x_info['initial_differential_parameter'] = self.settings['special_case']['initial_differential_parameter']\n                self.x_info['base_thrust_nodes'] = [int(e) for e in self.settings['special_case']['base_thrust_nodes']]\n                self.x_info['negative_thrust_nodes'] = [int(e) for e in self.settings['special_case']['negative_thrust_nodes']]\n                self.x_info['positive_thrust_nodes'] = [int(e) for e in self.settings['special_case']['positive_thrust_nodes']]\n\n            self.x_info['n_variables'] = counter\n\n\n        # initial state vector\n        self.initial_state = np.zeros(self.x_info['n_variables'])\n        self.initial_state[self.x_info['i_alpha']] = self.settings['initial_alpha']\n        self.initial_state[self.x_info['i_beta']] = self.settings['initial_beta']\n        self.initial_state[self.x_info['i_roll']] = self.settings['initial_roll']\n        for i_cs in range(n_control_surfaces):\n            self.initial_state[self.x_info['i_control_surfaces'][i_cs]] = self.settings['initial_cs_deflection'][i_cs]\n        for i_thrust in range(n_thrust_nodes):\n            self.initial_state[self.x_info['i_thrust'][i_thrust]] = self.settings['initial_thrust'][i_thrust]\n        if self.with_special_case:\n            if self.settings['special_case']['case_name'] == 'differential_thrust':\n                self.initial_state[self.x_info['i_base_thrust']] = self.x_info['initial_base_thrust']\n                self.initial_state[self.x_info['i_differential_parameter']] = self.x_info['initial_differential_parameter']\n\n\n        # bounds\n        # NOTE probably not necessary anymore, as Nelder-Mead method doesn't use them\n        self.bounds = self.x_info['n_variables']*[None]\n        for k, v in self.x_info.items():\n            if k == 'i_alpha':\n                self.bounds[v] = (self.initial_state[self.x_info['i_alpha']] - 3*np.pi/180,\n                                  self.initial_state[self.x_info['i_alpha']] + 3*np.pi/180)\n            elif k == 'i_beta':\n                self.bounds[v] = (self.initial_state[self.x_info['i_beta']] - 2*np.pi/180,\n                                  self.initial_state[self.x_info['i_beta']] + 2*np.pi/180)\n            elif k == 'i_roll':\n                self.bounds[v] = (self.initial_state[self.x_info['i_roll']] - 2*np.pi/180,\n                                  self.initial_state[self.x_info['i_roll']] + 2*np.pi/180)\n            elif k == 'i_thrust':\n                for ii, i in enumerate(v):\n                    self.bounds[i] = (self.initial_state[self.x_info['i_thrust'][ii]] - 2,\n                                      self.initial_state[self.x_info['i_thrust'][ii]] + 2)\n            elif k == 'i_control_surfaces':\n                for ii, i in enumerate(v):\n                    self.bounds[i] = (self.initial_state[self.x_info['i_control_surfaces'][ii]] - 4*np.pi/180,\n                                      self.initial_state[self.x_info['i_control_surfaces'][ii]] + 4*np.pi/180)\n            elif k == 'i_base_thrust':\n                if self.with_special_case:\n                    if self.settings['special_case']['case_name'] == 'differential_thrust':\n                        self.bounds[v] = (float(self.x_info['initial_base_thrust'])*0.5,\n                                          float(self.x_info['initial_base_thrust'])*1.5)\n            elif k == 'i_differential_parameter':\n                if self.with_special_case:\n                    if self.settings['special_case']['case_name'] == 'differential_thrust':\n                        self.bounds[v] = (-0.5, 0.5)\n\n    def increase_ts(self):\n        self.data.ts += 1\n        self.structural_solver.next_step()\n        self.aero_solver.next_step()\n\n    def cleanup_timestep_info(self):\n        if max(len(self.data.aero.timestep_info), len(self.data.structure.timestep_info)) > 1:\n            # copy last info to first\n            self.data.aero.timestep_info[0] = self.data.aero.timestep_info[-1]\n            self.data.structure.timestep_info[0] = self.data.structure.timestep_info[-1]\n            # delete all the rest\n            while len(self.data.aero.timestep_info) - 1:\n                del self.data.aero.timestep_info[-1]\n            while len(self.data.structure.timestep_info) - 1:\n                del self.data.structure.timestep_info[-1]\n\n        self.data.ts = 0\n\n    def run(self):\n        self.trim_algorithm()\n        return self.data\n\n    def trim_algorithm(self):\n        # create bounds\n\n        # call optimiser\n        self.optimise(solver_wrapper,\n                      tolerance=self.settings['tolerance'],\n                      print_info=True,\n                      # method='BFGS')\n                      method='Nelder-Mead',\n                      # method='SLSQP',\n                      refine=self.settings['refine_solution'])\n\n        # self.optimise(self.solver_wrapper, )\n        pass\n\n    def optimise(self, func, tolerance, print_info, method, refine):\n        args = (self.x_info, self, -2)\n\n        solution = scipy.optimize.minimize(func,\n                                           self.initial_state,\n                                           args=args,\n                                           method=method,\n                                           options={'disp': print_info,\n                                                    'maxfev': 1000,\n                                                    'xatol': tolerance,\n                                                    'fatol': 1e-4})\n        if refine:\n            cout.cout_wrap('Refining results with a gradient-based method', 1)\n            solution = scipy.optimize.minimize(func,\n                                               solution.x,\n                                               args=args,\n                                               method='BFGS',\n                                               options={'disp': print_info,\n                                                        'eps': 0.05,\n                                                        'maxfev': 5000,\n                                                        'fatol': 1e-4})\n\n        cout.cout_wrap('Solution = ')\n        cout.cout_wrap(solution.x)\n        return solution\n\ndef solver_wrapper(x, x_info, solver_data, i_dim=-1):\n    if solver_data.settings['print_info']:\n        cout.cout_wrap('x = ' + str(x), 1)\n    # print('x = ', x)\n    alpha = x[x_info['i_alpha']]\n    beta = x[x_info['i_beta']]\n    roll = x[x_info['i_roll']]\n    # change input data\n    solver_data.data.structure.timestep_info[solver_data.data.ts] = solver_data.data.structure.ini_info.copy()\n    tstep = solver_data.data.structure.timestep_info[solver_data.data.ts]\n    orientation_quat = algebra.euler2quat(np.array([roll, alpha, beta]))\n    tstep.quat[:] = orientation_quat\n    # control surface deflection\n    for i_cs in range(len(x_info['i_control_surfaces'])):\n        solver_data.data.aero.data_dict['control_surface_deflection'][x_info['control_surfaces_id'][i_cs]] = x[x_info['i_control_surfaces'][i_cs]]\n    # thrust input\n    tstep.steady_applied_forces[:] = 0.0\n    try:\n        x_info['special_case']\n    except KeyError:\n        for i_thrust in range(len(x_info['i_thrust'])):\n            thrust = x[x_info['i_thrust'][i_thrust]]\n            i_node = x_info['thrust_nodes'][i_thrust]\n            solver_data.data.structure.ini_info.steady_applied_forces[i_node, 0:3] = thrust*x_info['thrust_direction'][i_thrust]\n    else:\n        if x_info['special_case'] == 'differential_thrust':\n            base_thrust = x[x_info['i_base_thrust']]\n            pos_thrust = base_thrust*(1.0 + x[x_info['i_differential_parameter']])\n            neg_thrust = -base_thrust*(1.0 - x[x_info['i_differential_parameter']])\n            for i_base_node in x_info['base_thrust_nodes']:\n                solver_data.data.structure.ini_info.steady_applied_forces[i_base_node, 1] = base_thrust\n            for i_pos_diff_node in x_info['positive_thrust_nodes']:\n                solver_data.data.structure.ini_info.steady_applied_forces[i_pos_diff_node, 1] = pos_thrust\n            for i_neg_diff_node in x_info['negative_thrust_nodes']:\n                solver_data.data.structure.ini_info.steady_applied_forces[i_neg_diff_node, 1] = neg_thrust\n\n    # run the solver\n    solver_data.solver.run()\n    # extract resultants\n    forces, moments = solver_data.solver.extract_resultants()\n\n    totals = np.zeros((6,))\n    totals[0:3] = forces\n    totals[3:6] = moments\n    if solver_data.settings['print_info']:\n        cout.cout_wrap(' forces = ' + str(totals), 1)\n\n    if i_dim >= 0:\n        return totals[i_dim]\n    elif i_dim == -1:\n        return totals\n    elif i_dim == -2:\n        coeffs = np.array([1.0, 1.0, 1.0, 2, 2, 2])\n        if solver_data.settings['print_info']:\n            cout.cout_wrap(' val = ' + str(np.dot(coeffs*totals, coeffs*totals)), 1)\n        return np.dot(coeffs*totals, coeffs*totals)\n"
  },
  {
    "path": "sharpy/solvers/updatepickle.py",
    "content": "import numpy as np\nimport sharpy.utils.settings as settings_utils\nfrom sharpy.utils.solver_interface import solver, BaseSolver\n\n\n@solver\nclass UpdatePickle(BaseSolver):\n    \"\"\"\n\n    \"\"\"\n    solver_id = 'UpdatePickle'\n\n    settings_types = dict()\n    settings_default = dict()\n    settings_description = dict()\n\n    settings_table = settings_utils.SettingsTable()\n    __doc__ += settings_table.generate(settings_types, settings_default, settings_description)\n\n    def __init__(self):\n        self.data = None\n        self.settings = None\n\n    def initialise(self, data, custom_settings=None, restart=False):\n        self.data = data\n        if custom_settings is None:\n            self.settings = data.settings[self.solver_id]\n        else:\n            self.settings = custom_settings\n        settings_utils.to_custom_types(self.settings,\n                           self.settings_types,\n                           self.settings_default,\n                           no_ctype=True)\n\n    def run(self, **kwargs):\n\n        for sts in self.data.structure.timestep_info:\n            if sts is not None:\n                sts.in_global_AFoR = True\n                sts.runtime_steady_forces = np.zeros_like(sts.steady_applied_forces)\n                sts.runtime_unsteady_forces = np.zeros_like(sts.steady_applied_forces)\n                sts.psi_local = sts.psi.copy()\n                sts.psi_dot_local = sts.psi_dot.copy()\n                sts.mb_dquatdt = np.zeros_like(sts.mb_quat)\n\n        return self.data\n\n"
  },
  {
    "path": "sharpy/structure/__init__.py",
    "content": "\"\"\"Structural Packages\n\"\"\""
  },
  {
    "path": "sharpy/structure/basestructure.py",
    "content": "from abc import ABCMeta, abstractmethod\nimport sharpy.utils.cout_utils as cout\nimport os\n\n\nclass BaseStructure(metaclass=ABCMeta):\n    @abstractmethod\n    def generate(self, in_data, settings):\n        pass\n\n"
  },
  {
    "path": "sharpy/structure/models/__init__.py",
    "content": ""
  },
  {
    "path": "sharpy/structure/models/beam.py",
    "content": "import ctypes as ct\nimport numpy as np\nimport copy\n\nfrom sharpy.structure.basestructure import BaseStructure\nimport sharpy.structure.models.beamstructures as beamstructures\nimport sharpy.utils.algebra as algebra\nfrom sharpy.utils.datastructures import StructTimeStepInfo\nimport sharpy.utils.multibody as mb\n\n\nclass Beam(BaseStructure):\n    def __init__(self):\n        self.settings = None\n        # basic info\n        self.num_node_elem = -1\n        self.num_node = -1\n        self.num_elem = -1\n\n        self.timestep_info = []\n        self.ini_info = None\n        self.dynamic_input = []\n\n        self.connectivities = None\n\n        self.elem_stiffness = None\n        self.stiffness_db = None\n        self.inv_stiffness_db = None\n        self.n_stiff = 0\n\n        self.elem_mass = None\n        self.mass_db = None\n        self.n_mass = 0\n\n        self.frame_of_reference_delta = None\n        self.structural_twist = None\n        self.boundary_conditions = None\n        self.beam_number = None\n\n        self.lumped_mass = None\n        self.lumped_mass_nodes = None\n        self.lumped_mass_inertia = None\n        self.lumped_mass_position = None\n        self.lumped_mass_mat = None\n        self.lumped_mass_mat_nodes = None\n        self.n_lumped_mass = 0\n\n        self.steady_app_forces = None\n\n        self.elements = []\n\n        self.master = None\n        self.node_master_elem = None\n\n        self.vdof = None\n        self.fdof = None\n        self.num_dof = 0\n\n        self.fortran = dict()\n\n        # Multibody variabes\n        self.ini_mb_dict = dict()\n        self.body_number = None\n        self.num_bodies = None\n        self.FoR_movement = None\n\n        self.global_nodes_num = None\n        self.global_elems_num = None\n\n\n    def generate(self, in_data, settings):\n        self.settings = settings\n        # read and store data\n        # type of node\n        self.num_node_elem = in_data['num_node_elem']\n        # node info\n        self.num_node = in_data['num_node']\n        self.num_elem = in_data['num_elem']\n        # Body number\n        try:\n            self.body_number = in_data['body_number'].copy()\n            self.num_bodies = np.max(self.body_number) + 1\n        except KeyError:\n            self.body_number = np.zeros((self.num_elem, ), dtype=int)\n            self.num_bodies = 1\n\n        # boundary conditions\n        self.boundary_conditions = in_data['boundary_conditions'].copy()\n        self.generate_dof_arrays()\n\n        # ini info\n        self.ini_info = StructTimeStepInfo(self.num_node, self.num_elem, self.num_node_elem,\n                                           num_dof=self.num_dof, num_bodies=self.num_bodies)\n\n        # mutibody: FoR information\n        try:\n            for ibody in range(self.num_bodies):\n                self.ini_info.mb_FoR_pos[ibody,:] = self.ini_mb_dict[\"body_%02d\" % ibody][\"FoR_position\"].copy()\n                self.ini_info.mb_FoR_vel[ibody,:] = self.ini_mb_dict[\"body_%02d\" % ibody][\"FoR_velocity\"].copy()\n                self.ini_info.mb_FoR_acc[ibody,:] = self.ini_mb_dict[\"body_%02d\" % ibody][\"FoR_acceleration\"].copy()\n                self.ini_info.mb_quat[ibody,:] = self.ini_mb_dict[\"body_%02d\" % ibody][\"quat\"].copy()\n                self.ini_info.mb_dict = copy.deepcopy(self.ini_mb_dict)\n        except KeyError:\n            self.ini_info.mb_FoR_pos[0,:] = self.ini_info.for_pos\n            self.ini_info.mb_FoR_vel[0,:] = self.ini_info.for_vel\n            self.ini_info.mb_FoR_acc[0,:] = self.ini_info.for_acc\n            self.ini_info.mb_quat[0,:] = self.ini_info.quat\n\n        # attention, it has to be copied, not only referenced\n        self.ini_info.pos = in_data['coordinates'].astype(dtype=ct.c_double, order='F')\n\n        # connectivity information\n        self.connectivities = in_data['connectivities'].astype(dtype=ct.c_int, order='F')\n\n        self.global_elems_num = np.arange(self.num_elem)\n        self.global_nodes_num = np.arange(self.num_node)\n\n        # stiffness data\n        self.elem_stiffness = in_data['elem_stiffness'].copy()\n        self.stiffness_db = in_data['stiffness_db'].copy()\n        (self.n_stiff, _, _) = self.stiffness_db.shape\n        self.inv_stiffness_db = np.zeros_like(self.stiffness_db, dtype=ct.c_double, order='F')\n        for i in range(self.n_stiff):\n            self.inv_stiffness_db[i, :, :] = np.linalg.inv(self.stiffness_db[i, :, :])\n\n        # mass data\n        self.elem_mass = in_data['elem_mass'].copy()\n        self.mass_db = in_data['mass_db'].copy()\n        (self.n_mass, _, _) = self.mass_db.shape\n\n        # frame of reference delta\n        self.frame_of_reference_delta = in_data['frame_of_reference_delta'].copy()\n        # structural twist\n        self.structural_twist = in_data['structural_twist'].copy()\n        # beam number for every elem\n        try:\n            self.beam_number = in_data['beam_number'].copy()\n        except KeyError:\n            self.beam_number = np.zeros((self.num_elem, ), dtype=int)\n\n        # applied forces\n        try:\n            in_data['app_forces'][self.num_node - 1, 5]\n        except IndexError:\n            in_data['app_forces'] = np.zeros((self.num_node, 6), dtype=ct.c_double, order='F')\n\n        self.steady_app_forces = in_data['app_forces'].astype(dtype=ct.c_double, order='F')\n\n        # generate the Element array\n        for ielem in range(self.num_elem):\n            self.elements.append(\n                beamstructures.Element(\n                    ielem,\n                    self.num_node_elem,\n                    self.connectivities[ielem, :],\n                    self.ini_info.pos[self.connectivities[ielem, :], :],\n                    self.frame_of_reference_delta[ielem, :, :],\n                    self.structural_twist[ielem, :],\n                    self.beam_number[ielem],\n                    self.elem_stiffness[ielem],\n                    self.elem_mass[ielem]))\n        # now we need to add the attributes like mass and stiffness index\n        for ielem in range(self.num_elem):\n            dictionary = dict()\n            dictionary['stiffness_index'] = self.elem_stiffness[ielem]\n            dictionary['mass_index'] = self.elem_mass[ielem]\n            self.elements[ielem].add_attributes(dictionary)\n\n        # psi calculation\n        self.generate_psi()\n\n        # master-slave structure\n        self.generate_master_structure()\n\n        # the timestep_info[0] is the steady state or initial state for unsteady solutions\n        self.ini_info.steady_applied_forces = self.steady_app_forces.astype(dtype=ct.c_double, order='F')\n        # rigid body rotations\n        self.ini_info.quat = self.settings['orientation'].astype(dtype=ct.c_double, order='F')\n        self.ini_info.for_pos[0:3] = self.settings['for_pos'].astype(dtype=ct.c_double, order='F')\n\n        self.timestep_info.append(self.ini_info.copy())\n        self.timestep_info[-1].steady_applied_forces = self.steady_app_forces.astype(dtype=ct.c_double, order='F')\n\n        # lumped masses\n        self.n_lumped_mass = 0\n        try:\n            self.lumped_mass = in_data['lumped_mass'].copy()\n        except KeyError:\n            self.lumped_mass = None\n        else:\n            self.lumped_mass_nodes = in_data['lumped_mass_nodes'].copy()\n            self.lumped_mass_inertia = in_data['lumped_mass_inertia'].copy()\n            self.lumped_mass_position = in_data['lumped_mass_position'].copy()\n            self.n_lumped_mass += self.lumped_mass_position.shape[0]\n\n        # lumped masses given as matrices\n        try:\n            self.lumped_mass_mat = in_data['lumped_mass_mat'].copy()\n        except KeyError:\n            self.lumped_mass_mat = None\n        else:\n            self.lumped_mass_mat_nodes = in_data['lumped_mass_mat_nodes'].copy()\n            self.n_lumped_mass += self.lumped_mass_mat.shape[0]\n\n        # lumped masses to element mass\n        if self.lumped_mass is not None or self.lumped_mass_mat is not None:\n            self.lump_masses()\n\n        # self.generate_dof_arrays()\n        self.generate_fortran()\n\n    def generate_psi(self):\n        # it will just generate the CRV for all the nodes of the element\n        self.ini_info.psi = np.zeros((self.num_elem, 3, 3), dtype=ct.c_double, order='F')\n        for elem in self.elements:\n            self.ini_info.psi[elem.ielem, :, :] = elem.psi_ini\n\n    def add_unsteady_information(self, dyn_dict, num_steps):\n        # data storage for time dependant input\n        for it in range(num_steps):\n            self.dynamic_input.append(dict())\n\n        try:\n            for it in range(num_steps):\n                self.dynamic_input[it]['dynamic_forces'] = dyn_dict['dynamic_forces'][it, :, :]\n        except KeyError:\n            for it in range(num_steps):\n                self.dynamic_input[it]['dynamic_forces'] = np.zeros((self.num_node, 6), dtype=ct.c_double, order='F')\n\n        try:\n            for it in range(num_steps):\n                self.dynamic_input[it]['for_pos'] = dyn_dict['for_pos'][it, :]\n        except KeyError:\n            for it in range(num_steps):\n                self.dynamic_input[it]['for_pos'] = np.zeros((6, ), dtype=ct.c_double, order='F')\n\n        try:\n            for it in range(num_steps):\n                self.dynamic_input[it]['for_vel'] = dyn_dict['for_vel'][it, :]\n        except KeyError:\n            for it in range(num_steps):\n                self.dynamic_input[it]['for_vel'] = np.zeros((6, ), dtype=ct.c_double, order='F')\n\n        try:\n            for it in range(num_steps):\n                self.dynamic_input[it]['for_acc'] = dyn_dict['for_acc'][it, :]\n        except KeyError:\n            for it in range(num_steps):\n                self.dynamic_input[it]['for_acc'] = np.zeros((6, ), dtype=ct.c_double, order='F')\n\n    def generate_dof_arrays(self):\n        self.vdof = np.zeros((self.num_node,), dtype=ct.c_int, order='F') - 1\n        self.fdof = np.zeros((self.num_node,), dtype=ct.c_int, order='F') - 1\n\n        vcounter = -1\n        fcounter = -1\n        for inode in range(self.num_node):\n            if self.boundary_conditions[inode] == 0:\n                vcounter += 1\n                fcounter += 1\n                self.vdof[inode] = vcounter\n                self.fdof[inode] = fcounter\n            elif self.boundary_conditions[inode] == -1:\n                vcounter += 1\n                self.vdof[inode] = vcounter\n            elif self.boundary_conditions[inode] == 1:\n                fcounter += 1\n                self.fdof[inode] = fcounter\n\n        self.num_dof = ct.c_int((vcounter + 1)*6)\n\n    def generate_mass_matrix(self, mass, position, inertia):\n\n        inertia_tensor = np.zeros((6, 6))\n        pos_skew = algebra.skew(position)\n        inertia_tensor[0:3, 0:3] = mass*np.eye(3)\n        inertia_tensor[0:3, 3:6] = -mass*pos_skew\n        inertia_tensor[3:6, 0:3] = mass*pos_skew\n        inertia_tensor[3:6, 3:6] = inertia + mass*(np.dot(pos_skew.T, pos_skew))\n\n        return inertia_tensor\n\n    def lump_masses(self):\n        if self.lumped_mass is not None:\n            for i_lumped in range(self.lumped_mass.shape[0]):\n                r = self.lumped_mass_position[i_lumped, :]\n                m = self.lumped_mass[i_lumped]\n                j = self.lumped_mass_inertia[i_lumped, :, :]\n\n                inertia_tensor = self.generate_mass_matrix(m, r, j)\n                i_lumped_node = self.lumped_mass_nodes[i_lumped]\n                self.add_lumped_mass_to_element(i_lumped_node,\n                                                   inertia_tensor)\n        if self.lumped_mass_mat is not None:\n            for i_lumped in range(self.lumped_mass_mat.shape[0]):\n                inertia_tensor = self.lumped_mass_mat[i_lumped, :, :]\n                i_lumped_node = self.lumped_mass_mat_nodes[i_lumped]\n                self.add_lumped_mass_to_element(i_lumped_node,\n                                                   inertia_tensor)\n\n        return\n\n    def add_lumped_mass_to_element(self, i_lumped_node, inertia_tensor, replace=False):\n\n            i_lumped_master_elem, i_lumped_master_node_local = self.node_master_elem[i_lumped_node]\n\n            if self.elements[i_lumped_master_elem].rbmass is None:\n                # allocate memory\n                self.elements[i_lumped_master_elem].rbmass = np.zeros((\n                    self.elements[i_lumped_master_elem].max_nodes_elem, 6, 6))\n\n            if replace:\n                self.elements[i_lumped_master_elem].rbmass[i_lumped_master_node_local, :, :] = (\n                    inertia_tensor)\n            else:\n                self.elements[i_lumped_master_elem].rbmass[i_lumped_master_node_local, :, :] += (\n                    inertia_tensor) # += necessary in case multiple masses defined per node\n\n    def generate_master_structure(self):\n        self.master = np.zeros((self.num_elem, self.num_node_elem, 2), dtype=int) - 1\n        for i_elem in range(self.num_elem):\n            for i_node_local in range(self.elements[i_elem].n_nodes):\n            # for i_node_local in self.elements[i_elem].ordering:\n                if not i_elem and not i_node_local:\n                    continue\n                j_elem = 0\n                while self.master[i_elem, i_node_local, 0] == -1 and j_elem <= i_elem:\n                    # for j_node_local in self.elements[j_elem].ordering:\n                    for j_node_local in range(self.elements[j_elem].n_nodes):\n                    # for j_node_local in self.elements[j_elem].ordering:\n                        if (self.connectivities[i_elem, i_node_local] ==\n                                self.connectivities[j_elem, j_node_local]):\n                            self.master[i_elem, i_node_local, :] = [j_elem, j_node_local]\n                    j_elem += 1\n\n        self.generate_node_master_elem()\n        # a = 1\n\n    def add_timestep(self, timestep_info):\n        if len(timestep_info) == 0:\n            # copy from ini_info\n            timestep_info.append(self.ini_info.copy())\n        else:\n            timestep_info.append(self.timestep_info[-1].copy())\n\n    def next_step(self):\n        self.add_timestep(self.timestep_info)\n\n    def generate_node_master_elem(self):\n        \"\"\"\n        Returns a matrix indicating the master element for a given node\n        :return:\n        \"\"\"\n        self.node_master_elem = np.zeros((self.num_node, 2), dtype=ct.c_int, order='F') - 1\n        for i_elem in range(self.num_elem):\n            for i_node_local in range(self.elements[i_elem].n_nodes):\n                if self.master[i_elem, i_node_local, 0] == -1:\n                    if self.node_master_elem[self.connectivities[i_elem, i_node_local], 0] < 0:\n                        self.node_master_elem[self.connectivities[i_elem, i_node_local], 0] = i_elem\n                        self.node_master_elem[self.connectivities[i_elem, i_node_local], 1] = i_node_local\n                else:\n                    master_elem = self.master[i_elem, i_node_local, 0]\n                    master_node = self.master[i_elem, i_node_local, 1]\n                    if self.node_master_elem[self.connectivities[i_elem, i_node_local], 0] < 0:\n                        self.node_master_elem[self.connectivities[i_elem, i_node_local], 0] = master_elem\n                        self.node_master_elem[self.connectivities[i_elem, i_node_local], 1] = master_node\n\n\n    def generate_fortran(self):\n        # steady, no time-dependant information\n        self.fortran['num_nodes'] = np.zeros((self.num_elem,), dtype=ct.c_int, order='F')\n        for elem in self.elements:\n            self.fortran['num_nodes'][elem.ielem] = elem.n_nodes\n\n        self.fortran['num_mem'] = np.zeros_like(self.fortran['num_nodes'], dtype=ct.c_int)\n        for elem in self.elements:\n            self.fortran['num_mem'][elem.ielem] = elem.num_mem\n\n        self.fortran['connectivities'] = self.connectivities.astype(ct.c_int, order='F') + 1\n        self.fortran['master'] = self.master.astype(dtype=ct.c_int, order='F') + 1\n        self.fortran['node_master_elem'] = self.node_master_elem.astype(dtype=ct.c_int, order='F') + 1\n\n        self.fortran['length'] = np.zeros_like(self.fortran['num_nodes'], dtype=ct.c_double, order='F')\n        for elem in self.elements:\n            self.fortran['length'][elem.ielem] = elem.length\n\n        self.fortran['mass'] = self.mass_db.astype(ct.c_double, order='F')\n        self.fortran['stiffness'] = self.stiffness_db.astype(ct.c_double, order='F')\n        self.fortran['inv_stiffness'] = self.inv_stiffness_db.astype(ct.c_double, order='F')\n        self.fortran['mass_indices'] = self.elem_mass.astype(ct.c_int, order='F') + 1\n        self.fortran['stiffness_indices'] = self.elem_stiffness.astype(ct.c_int, order='F') + 1\n\n        self.fortran['frame_of_reference_delta'] = self.frame_of_reference_delta.astype(ct.c_double, order='F')\n\n        self.fortran['vdof'] = self.vdof.astype(ct.c_int, order='F') + 1\n        self.fortran['fdof'] = self.fdof.astype(ct.c_int, order='F') + 1\n\n        # self.fortran['steady_applied_forces'] = self.steady_app_forces.astype(dtype=ct.c_double, order='F')\n\n        # undeformed structure matrices\n        self.fortran['pos_ini'] = self.ini_info.pos.astype(dtype=ct.c_double, order='F')\n        self.fortran['psi_ini'] = self.ini_info.psi.astype(dtype=ct.c_double, order='F')\n\n        max_nodes_elem = self.elements[0].max_nodes_elem\n        rbmass_temp = np.zeros((self.num_elem, max_nodes_elem, 6, 6))\n        for elem in self.elements:\n            for inode in range(elem.n_nodes):\n                if elem.rbmass is not None:\n                    rbmass_temp[elem.ielem, inode, :, :] += elem.rbmass[inode, :, :]\n        self.fortran['rbmass'] = rbmass_temp.astype(dtype=ct.c_double, order='F')\n\n        if self.settings['unsteady']:\n            pass\n\n    def integrate_position(self, ts, dt):\n        try:\n            ts.for_pos[0:3] += (\n                dt*np.dot(ts.cga(),\n                          ts.for_vel[0:3]))\n        except AttributeError:\n            self.timestep_info[ts].for_pos[0:3] += (\n                dt*np.dot(self.timestep_info[ts].cga(),\n                          self.timestep_info[ts].for_vel[0:3]))\n\n    def nodal_premultiply_inv_T_transpose(self, nodal, tstep, filter=np.array([True]*6)):\n        nodal_t = nodal.copy(order='F')\n        for i_node in range(self.num_node):\n            # get master elem and i_local_node\n            i_master_elem, i_local_node = self.node_master_elem[i_node, :]\n            crv = tstep.psi[i_master_elem, i_local_node, :]\n            inv_tanT = algebra.crv2invtant(crv)\n            temp = np.zeros((6,))\n            temp[0:3] = np.dot(inv_tanT, nodal[i_node, 0:3])\n            temp[3:6] = np.dot(inv_tanT, nodal[i_node, 3:6])\n            for i in range(6):\n                if filter[i]:\n                    nodal_t[i_node, i] = temp[i]\n\n        return nodal_t\n\n    def get_body(self, ibody):\n        \"\"\"\n        get_body\n\n        Extract the body number ``ibody`` from a multibody system\n\n        This function returns a :class:`~sharpy.structure.models.beam.Beam` class (``ibody_beam``)\n        that only includes the body number ``ibody`` of the original system\n\n        Args:\n            self(:class:`~sharpy.structure.models.beam.Beam`): structural information of the multibody system\n            ibody(int): body number to be extracted\n\n        Returns:\n        \tibody_beam(:class:`~sharpy.structure.models.beam.Beam`): structural information of the isolated body\n        \"\"\"\n\n        ibody_beam = Beam()\n\n        # Define the nodes and elements belonging to the body\n        ibody_beam.global_elems_num, ibody_beam.global_nodes_num = mb.get_elems_nodes_list(self, ibody)\n\n        # Renaming for clarity\n        ibody_elements = ibody_beam.global_elems_num\n        ibody_nodes = ibody_beam.global_nodes_num\n\n        # Assign all the properties to the new StructTimeStepInfo\n        ibody_beam.settings = self.settings.copy()\n\n        ibody_beam.num_node_elem = self.num_node_elem.astype(dtype=ct.c_int, order='F', copy=True)\n        ibody_beam.num_node = len(ibody_beam.global_nodes_num)\n        ibody_beam.num_elem = len(ibody_beam.global_elems_num)\n\n        ibody_beam.connectivities = self.connectivities[ibody_elements,:]\n        # Renumber the connectivities\n        int_list_nodes = np.arange(0, ibody_beam.num_node, 1)\n        for ielem in range(ibody_beam.num_elem):\n            for inode_in_elem in range(ibody_beam.num_node_elem):\n                ibody_beam.connectivities[ielem, inode_in_elem] = int_list_nodes[\n                    np.argwhere(ibody_nodes == ibody_beam.connectivities[ielem, inode_in_elem])[0][0]]\n\n        # TODO: I could copy only the needed stiffness and masses to save storage\n        ibody_beam.elem_stiffness = self.elem_stiffness[ibody_elements].astype(dtype=ct.c_int, order='F', copy=True)\n        ibody_beam.stiffness_db = self.stiffness_db.astype(dtype=ct.c_double, order='F', copy=True)\n        ibody_beam.inv_stiffness_db = self.inv_stiffness_db.astype(dtype=ct.c_double, order='F', copy=True)\n        ibody_beam.n_stiff = self.n_stiff\n\n        ibody_beam.elem_mass = self.elem_mass[ibody_elements].astype(dtype=ct.c_int, order='F', copy=True)\n        ibody_beam.mass_db = self.mass_db.astype(dtype=ct.c_double, order='F', copy=True)\n        ibody_beam.n_mass = self.n_mass\n\n        ibody_beam.frame_of_reference_delta = self.frame_of_reference_delta[ibody_elements,:,:].astype(dtype=ct.c_double, order='F', copy=True)\n        ibody_beam.structural_twist = self.structural_twist[ibody_elements, :].astype(dtype=ct.c_double, order='F', copy=True)\n        ibody_beam.boundary_conditions = self.boundary_conditions[ibody_nodes].astype(dtype=ct.c_int, order='F', copy=True)\n        ibody_beam.beam_number = self.beam_number[ibody_elements].astype(dtype=ct.c_int, order='F', copy=True)\n\n        if not self.lumped_mass_nodes is None:\n            is_first = True\n            ibody_beam.n_lumped_mass = 0\n            for inode in range(len(self.lumped_mass_nodes)):\n                if self.lumped_mass_nodes[inode] in ibody_nodes:\n                    if is_first:\n                        is_first = False\n                        ibody_beam.lumped_mass_nodes = int_list_nodes[ibody_nodes == self.lumped_mass_nodes[inode]]\n                        ibody_beam.lumped_mass = np.array([self.lumped_mass[inode]])\n                        ibody_beam.lumped_mass_inertia = np.array([self.lumped_mass_inertia[inode]])\n                        ibody_beam.lumped_mass_position = np.array([self.lumped_mass_position[inode]])\n                        ibody_beam.n_lumped_mass += 1\n                    else:\n                        ibody_beam.lumped_mass_nodes = np.concatenate((ibody_beam.lumped_mass_nodes ,int_list_nodes[ibody_nodes == self.lumped_mass_nodes[inode]]), axis=0)\n                        ibody_beam.lumped_mass = np.concatenate((ibody_beam.lumped_mass ,np.array([self.lumped_mass[inode]])), axis=0)\n                        ibody_beam.lumped_mass_inertia = np.concatenate((ibody_beam.lumped_mass_inertia ,np.array([self.lumped_mass_inertia[inode]])), axis=0)\n                        ibody_beam.lumped_mass_position = np.concatenate((ibody_beam.lumped_mass_position ,np.array([self.lumped_mass_position[inode]])), axis=0)\n                        ibody_beam.n_lumped_mass += 1\n\n        if not self.lumped_mass_mat is None:\n            is_first = True\n            for inode in range(len(self.lumped_mass_mat_nodes)):\n                if self.lumped_mass_mat_nodes[inode] in ibody_nodes:\n                    if is_first:\n                        is_first = False\n                        ibody_beam.lumped_mass_mat_nodes = int_list_nodes[ibody_nodes == self.lumped_mass_mat_nodes[inode]]\n                        ibody_beam.lumped_mass_mat = np.array([self.lumped_mass_mat[inode, :, :]])\n                    else:\n                        ibody_beam.lumped_mass_mat_nodes = np.concatenate((ibody_beam.lumped_mass_mat_nodes , int_list_nodes[ibody_nodes == self.lumped_mass_mat_nodes[inode]]), axis=0)\n                        ibody_beam.lumped_mass_mat = np.concatenate((ibody_beam.lumped_mass_mat ,np.array([self.lumped_mass_mat[inode, :, :]])), axis=0)\n\n        ibody_beam.steady_app_forces = self.steady_app_forces[ibody_nodes,:].astype(dtype=ct.c_double, order='F', copy=True)\n\n        ibody_beam.num_bodies = 1\n\n        ibody_beam.body_number = self.body_number[ibody_elements].astype(dtype=ct.c_int, order='F', copy=True)\n\n        ibody_beam.generate_dof_arrays()\n\n        ibody_beam.ini_info = self.ini_info.get_body(self, ibody_beam.num_dof, ibody)\n        ibody_beam.timestep_info = self.timestep_info[-1].get_body(self, ibody_beam.num_dof, ibody)\n\n        # generate the Element array\n        for ielem in range(ibody_beam.num_elem):\n            ibody_beam.elements.append(\n                beamstructures.Element(\n                    ielem,\n                    ibody_beam.num_node_elem,\n                    ibody_beam.connectivities[ielem, :],\n                    ibody_beam.ini_info.pos[ibody_beam.connectivities[ielem, :], :],\n                    ibody_beam.frame_of_reference_delta[ielem, :, :],\n                    ibody_beam.structural_twist[ielem, :],\n                    ibody_beam.beam_number[ielem],\n                    ibody_beam.elem_stiffness[ielem],\n                    ibody_beam.elem_mass[ielem]))\n        # now we need to add the attributes like mass and stiffness index\n        for ielem in range(ibody_beam.num_elem):\n            dictionary = dict()\n            dictionary['stiffness_index'] = ibody_beam.elem_stiffness[ielem]\n            dictionary['mass_index'] = ibody_beam.elem_mass[ielem]\n            ibody_beam.elements[ielem].add_attributes(dictionary)\n\n        ibody_beam.generate_master_structure()\n\n        if ibody_beam.lumped_mass is not None or ibody_beam.lumped_mass_mat is not None:\n            ibody_beam.lump_masses()\n\n        ibody_beam.generate_fortran()\n\n        return ibody_beam\n"
  },
  {
    "path": "sharpy/structure/models/beamstructures.py",
    "content": "# Alfonso del Carre\nimport numpy as np\n\nimport sharpy.utils.algebra as algebra\n\n\nclass Element(object):\n    \"\"\"\n    This class stores all the required data for the definition of\n    a linear or quadratic beam element.\n    \"\"\"\n    ordering = [0, 2, 1]\n    max_nodes_elem = 3\n\n    def __init__(self,\n                 ielem,\n                 n_nodes,\n                 global_connectivities,\n                 coordinates,\n                 frame_of_reference_delta,\n                 structural_twist,\n                 num_mem,\n                 stiff_index,\n                 mass_index):\n        # store info in instance\n        # global element number\n        self.ielem = ielem\n        # number of nodes per elem\n        self.n_nodes = n_nodes\n        if self.max_nodes_elem < self.n_nodes:\n            raise AttributeError('Elements with more than 3 nodes are not allowed')\n        # global connectivities (global node numbers)\n        self.global_connectivities = global_connectivities\n        self.reordered_global_connectivities = global_connectivities[self.ordering]\n        # coordinates of the nodes in a-frame (body-fixed frame)\n        self.coordinates_def = coordinates.copy()\n        # frame of reference points\n        self.frame_of_reference_delta = frame_of_reference_delta\n        # structural twist\n        self.structural_twist = structural_twist\n        # number in memory (for fortran routines)\n        self.num_mem = num_mem\n        # stiffness and mass matrices indices (stored in parent beam class)\n        self.stiff_index = stiff_index\n        self.mass_index = mass_index\n\n        # placeholder for RBMass\n        self.rbmass = None  # np.zeros((self.max_nodes_elem, 6, 6))\n\n        self.update(self.coordinates_def)\n\n    def update(self, coordinates_def, psi_def=None):\n        self.coordinates_def = coordinates_def.copy()\n\n        if psi_def is not None:\n            # element orientation\n            self.psi_def = psi_def.copy()\n\n        # element length\n        self.calculate_length()\n\n        if psi_def is None:  # ini conditions, initial crv has to be calculated\n            # we need to define the FoR z direction for every beam element\n            v1, v2, v3 = self.get_triad()\n            self.psi_ini = algebra.triad2crv_vec(v1, v2, v3)\n            self.psi_def = self.psi_ini.copy()\n\n            # copy all the info to _ini fields\n            self.coordinates_ini = self.coordinates_def.copy()\n\n    def calculate_length(self):\n        # TODO implement length based on integration\n        self.length = np.linalg.norm(self.coordinates_def[0, :] - self.coordinates_def[1, :])\n\n    def add_attributes(self, dictionary):\n        for key, value in dictionary.items():\n            setattr(self, key, value)\n\n    def generate_curve(self, n_elem_curve, defor=False):\n        curve = np.zeros((n_elem_curve, 3))\n        t_vec = np.linspace(0, 2, n_elem_curve)\n        for i in range(n_elem_curve):\n            t = t_vec[i]\n            for idim in range(3):\n                if defor:\n                    polyfit, _, _ = algebra.get_polyfit(self.coordinates_def, self.ordering)\n                else:\n                    polyfit, _, _ = algebra.get_polyfit(self.coordinates_ini, self.ordering)\n                polyf = np.poly1d(polyfit[idim])\n                curve[i, idim] = (polyf(t))\n        return curve\n\n    def get_triad(self):\n        \"\"\"\n        Generates two unit vectors in body FoR that define the local FoR for\n        a beam element. These vectors are calculated using `frame_of_reference_delta`\n        :return:\n        \"\"\"\n        # now, calculate tangent vector (and coefficients of the polynomial\n        # fit just in case)\n        tangent, polyfit = algebra.tangent_vector(\n            self.coordinates_def,\n            Element.ordering)\n        normal = np.zeros_like(tangent)\n        binormal = np.zeros_like(tangent)\n\n        # v_vector is the vector with origin the FoR node and delta\n        # equals frame_of_reference_delta\n        for inode in range(self.n_nodes):\n            v_vector = self.frame_of_reference_delta[inode, :]\n            normal[inode, :] = algebra.unit_vector(np.cross(\n                                                        tangent[inode, :],\n                                                        v_vector\n                                                        )\n                                                   )\n            binormal[inode, :] = -algebra.unit_vector(np.cross(\n                                                        tangent[inode, :],\n                                                        normal[inode, :]\n                                                                )\n                                                      )\n\n        # we apply twist now\n        for inode in range(self.n_nodes):\n            if not self.structural_twist[inode] == 0.0:\n                rotation_mat = algebra.rotation_matrix_around_axis(tangent[inode, :],\n                                                                   self.structural_twist[inode])\n                normal[inode, :] = np.dot(rotation_mat, normal[inode, :])\n                binormal[inode, :] = np.dot(rotation_mat, binormal[inode, :])\n\n        return tangent, binormal, normal\n\n    def deformed_triad(self, psi=None):\n        if psi is None:\n            return algebra.crv2triad_vec(self.psi_def)\n        else:\n            return algebra.crv2triad_vec(psi)\n"
  },
  {
    "path": "sharpy/structure/utils/__init__.py",
    "content": ""
  },
  {
    "path": "sharpy/structure/utils/lagrangeconstraints.py",
    "content": "\"\"\"\nLagrangeConstraints library\n\nLibrary used to create the matrices associated to boundary conditions through\nthe method of Lagrange Multipliers. The source code includes four different sections.\n\n* Basic structures: basic functions and variables needed to organise the library with different Lagrange Constraints to enhance the interaction with this library.\n\n* Auxiliar functions: basic queries that are performed repeatedly.\n\n* Equations: functions that generate the equations associated to the constraint of basic degrees of freedom.\n\n* Lagrange Constraints: different available Lagrange Constraints. They tipically use the basic functions in \"Equations\" to assembly the required set of equations.\n\nAttributes:\n    dict_of_lc (dict): Dictionary including the available Lagrange Contraint identifier\n    (``_lc_id``) and the associated ``BaseLagrangeConstraint`` class\n\nNotes:\n    To use this library: import sharpy.structure.utils.lagrangeconstraints as lagrangeconstraints\n\nArgs:\n    lc_list (list): list of all the defined contraints\n    MBdict (dict): dictionary with the MultiBody and LagrangeMultipliers information\n    MB_beam (list): list of :class:`~sharpy.structure.models.beam.Beam` of each of the bodies that form the system\n    MB_tstep (list): list of :class:`~sharpy.utils.datastructures.StructTimeStepInfo` of each of the bodies that form the system\n    num_LM_eq (int): number of new equations needed to define the boundary boundary conditions\n    sys_size (int): total number of degrees of freedom of the multibody system\n    dt (float): time step\n    Lambda (np.ndarray): list of Lagrange multipliers values\n    Lambda_dot (np.ndarray): list of the first derivative of the Lagrange multipliers values\n    dynamic_or_static (str): string defining if the computation is dynamic or static\n    LM_C (np.ndarray): Damping matrix associated to the Lagrange Multipliers equations\n    LM_K (np.ndarray): Stiffness matrix associated to the Lagrange Multipliers equations\n    LM_Q (np.ndarray): Vector of independent terms associated to the Lagrange Multipliers equations\n\"\"\"\nfrom abc import ABCMeta, abstractmethod\nimport sharpy.utils.cout_utils as cout\nimport os\nimport ctypes as ct\nimport numpy as np\nimport sharpy.utils.algebra as ag\nfrom sharpy.utils.settings import set_value_or_default\n\n###############################################################################\n# Basic structures\n###############################################################################\n\ndict_of_lc = {}\nlc = {}  # for internal working\n\n\n# decorator\ndef lagrangeconstraint(arg):\n    \"\"\"\n    Decorator used to create the dictionary (``dict_of_lc``) that links constraints id (``_lc_id``) to the associated ``BaseLagrangeConstraint`` class\n    \"\"\"\n    global dict_of_lc\n    try:\n        arg._lc_id\n    except AttributeError:\n        raise AttributeError('Class defined as lagrange constraint has no _lc_id attribute')\n    dict_of_lc[arg._lc_id] = arg\n    return arg\n\n\ndef print_available_lc():\n    \"\"\"\n    Prints the available Lagrange Constraints\n    \"\"\"\n    cout.cout_wrap('The available lagrange constraints on this session are:', 2)\n    for name, i_lc in dict_of_lc.items():\n        cout.cout_wrap('%s ' % i_lc._lc_id, 2)\n\n\ndef lc_from_string(string):\n    \"\"\"\n    Returns the ``BaseLagrangeConstraint`` class associated to a constraint id (``_lc_id``)\n    \"\"\"\n    return dict_of_lc[string]\n\n\ndef lc_list_from_path(cwd):\n    onlyfiles = [f for f in os.listdir(cwd) if os.path.isfile(os.path.join(cwd, f))]\n\n    for i_file in range(len(onlyfiles)):\n        if \".py\" in onlyfiles[i_file]:\n            if onlyfiles[i_file] == \"__init__.py\":\n                onlyfiles[i_file] = \"\"\n                continue\n            onlyfiles[i_file] = onlyfiles[i_file].replace('.py', '')\n        else:\n            onlyfiles[i_file] = \"\"\n\n    files = [file for file in onlyfiles if not file == \"\"]\n    return files\n\n\ndef initialise_lc(lc_name, print_info=True):\n    \"\"\"\n    Initialises the Lagrange Constraints\n    \"\"\"\n    if print_info:\n        cout.cout_wrap('Generating an instance of %s' % lc_name, 2)\n    cls_type = lc_from_string(lc_name)\n    lc = cls_type()\n    return lc\n\n\nclass BaseLagrangeConstraint(metaclass=ABCMeta):\n    __doc__ = \"\"\"\n    BaseLagrangeConstraint\n\n    Base class for LagrangeConstraints showing the methods required. They will\n    be inherited by all the Lagrange Constraints\n\n    Attributes:\n        _n_eq (int): Number of equations required by a LagrangeConstraint\n        _ieq (int): Number of the first equation associated to the Lagrange Constraint in the whole set of Lagrange equations\n    \"\"\"\n    _lc_id = 'BaseLagrangeConstraint'\n\n    def __init__(self):\n        \"\"\"\n        Initialisation\n        \"\"\"\n        self._n_eq = None\n        self._ieq = None\n\n    @abstractmethod\n    def get_n_eq(self):\n        \"\"\"\n        Returns the number of equations required by the Lagrange Constraint\n        \"\"\"\n        return self._n_eq\n\n    @abstractmethod\n    #  def initialise(self, **kwargs):\n    def initialise(self, MBdict_entry, ieq):\n        \"\"\"\n        Initialisation\n        \"\"\"\n        self._ieq = ieq\n        return self._ieq + self._n_eq\n\n    @abstractmethod\n    # def staticmat(self, **kwargs):\n    def staticmat(self, LM_C, LM_K, LM_Q, MB_beam, MB_tstep, ts, num_LM_eq,\n                  sys_size, dt, Lambda, Lambda_dot):\n        \"\"\"\n        Generates the structural matrices (damping, stiffness) and the independent vector\n        associated to the LagrangeConstraint in a static simulation\n        \"\"\"\n        return np.zeros((6, 6))\n\n    @abstractmethod\n    # def dynamicmat(self, **kwargs):\n    def dynamicmat(self, LM_C, LM_K, LM_Q, MB_beam, MB_tstep, ts, num_LM_eq,\n                   sys_size, dt, Lambda, Lambda_dot):\n        \"\"\"\n        Generates the structural matrices (damping, stiffness) and the independent vector\n        associated to the LagrangeConstraint in a dynamic simulation\n        \"\"\"\n        return np.zeros((10, 10))\n\n    @abstractmethod\n    # def staticpost(self, **kwargs):\n    def staticpost(self, lc_list, MB_beam, MB_tstep):\n        \"\"\"\n        Postprocess operations needed by the LagrangeConstraint in a static simulation\n        \"\"\"\n        return\n\n    @abstractmethod\n    # def dynamicpost(self, **kwargs):\n    def dynamicpost(self, lc_list, MB_beam, MB_tstep):\n        \"\"\"\n        Postprocess operations needed by the LagrangeConstraint in a dynamic simulation\n        \"\"\"\n        return\n\n\n################################################################################\n# Auxiliar functions\n################################################################################\ndef define_node_dof(MB_beam, node_body, num_node):\n    \"\"\"\n    define_node_dof\n\n    Define the position of the first degree of freedom associated to a certain node\n\n    Args:\n        MB_beam(list): list of :class:`~sharpy.structure.models.beam.Beam`\n        node_body(int): body to which the node belongs\n        num_node(int): number os the node within the body\n\n    Returns:\n        node_dof(int): first degree of freedom associated to the node\n    \"\"\"\n    node_dof = 0\n    for ibody in range(node_body):\n        node_dof += MB_beam[ibody].num_dof.value\n        if MB_beam[ibody].FoR_movement == 'free':\n            node_dof += 10\n    node_dof += 6 * MB_beam[node_body].vdof[num_node]\n    return node_dof\n\n\ndef define_FoR_dof(MB_beam, FoR_body):\n    \"\"\"\n    define_FoR_dof\n\n    Define the position of the first degree of freedom associated to a certain frame of reference\n\n    Args:\n        MB_beam(list): list of :class:`~sharpy.structure.models.beam.Beam`\n        node_body(int): body to which the node belongs\n        num_node(int): number os the node within the body\n\n    Returns:\n        node_dof(int): first degree of freedom associated to the node\n    \"\"\"\n    FoR_dof = 0\n    for ibody in range(FoR_body):\n        FoR_dof += MB_beam[ibody].num_dof.value\n        if MB_beam[ibody].FoR_movement == 'free':\n            FoR_dof += 10\n    FoR_dof += MB_beam[FoR_body].num_dof.value\n    return FoR_dof\n\n\n################################################################################\n# Equations\n################################################################################\ndef equal_pos_node_FoR(MB_tstep, MB_beam, FoR_body, node_body, inode_in_body, node_FoR_dof, node_dof, FoR_dof, sys_size,\n                       Lambda, scalingFactor, penaltyFactor, ieq, LM_K, LM_C, LM_Q):\n    \"\"\"\n    This function generates the stiffness and damping matrices and the independent vector associated to a constraint that\n    imposes equal positions between a node and a frame of reference\n\n    See ``LagrangeConstraints`` for the description of variables\n\n    Args:\n        node_FoR_dof (int): position of the first degree of freedom of the FoR to which the \"node\" belongs\n        node_dof (int): position of the first degree of freedom associated to the \"node\"\n        FoR_body (int): body number of the \"FoR\"\n        FoR_dof (int): position of the first degree of freedom associated to the \"FoR\"\n\n    Note: this equation constitutes a holonomic constraint which is not currently supported. Check ``equal_lin_vel_node_FoR``\n    \"\"\"\n    cout.cout_wrap(\n        \"WARNING: this equation constitutes a holonomic constraint which is not currently supported. Check ``equal_lin_vel_node_FoR``\",\n        3)\n\n    num_LM_eq_specific = 3\n    B = np.zeros((num_LM_eq_specific, sys_size), dtype=ct.c_double, order='F')\n\n    # Simplify notation\n    node_cga = MB_tstep[node_body].cga()\n    node_pos = MB_tstep[node_body].pos[inode_in_body, :]\n    node_FoR_pos = MB_tstep[node_body].for_pos[0:3]\n    FoR_pos = MB_tstep[FoR_body].for_pos[0:3]\n\n    # if MB_beam[node_body].FoR_movement == 'free':\n    B[:, node_FoR_dof:node_FoR_dof + 3] = np.eye(3)\n    B[:, node_dof:node_dof + 3] = node_cga\n    B[:, FoR_dof:FoR_dof + 3] = -np.eye(3)\n\n    LM_K[sys_size + ieq: sys_size + ieq + num_LM_eq_specific, :sys_size] += scalingFactor * B\n    LM_K[:sys_size, sys_size + ieq: sys_size + ieq + num_LM_eq_specific] += scalingFactor * B.T\n\n    LM_Q[:sys_size] += scalingFactor * B.T @ Lambda[ieq:ieq + num_LM_eq_specific]\n    LM_Q[sys_size + ieq:sys_size + ieq + num_LM_eq_specific] \\\n        += scalingFactor * (node_FoR_pos + node_cga @ node_pos - FoR_pos)\n\n    LM_C[node_dof:node_dof + 3, node_FoR_dof + 6:node_FoR_dof + 10] += scalingFactor * ag.der_CquatT_by_v(\n        MB_tstep[node_body].quat, Lambda[ieq: ieq + num_LM_eq_specific])\n\n    if penaltyFactor:\n        q = np.zeros((sys_size,))\n        q[node_FoR_dof:node_FoR_dof + 3] = node_FoR_pos\n        q[node_dof:node_dof + 3] = node_pos\n        q[FoR_dof:FoR_dof + 3] = FoR_pos\n\n        LM_Q[:sys_size] += penaltyFactor * B.T @ B @ q\n\n        LM_K[node_FoR_dof:node_FoR_dof + 3, node_FoR_dof:node_FoR_dof + 3] += penaltyFactor * np.eye(3)\n        LM_K[node_FoR_dof:node_FoR_dof + 3, node_dof:node_dof + 3] += penaltyFactor * node_cga\n        LM_K[node_FoR_dof:node_FoR_dof + 3, FoR_dof:FoR_dof + 3] += -penaltyFactor * np.eye(3)\n        LM_C[node_FoR_dof:node_FoR_dof + 3, node_FoR_dof + 6:node_FoR_dof + 10] += penaltyFactor * ag.der_Cquat_by_v(\n            MB_tstep[node_body].quat, node_pos)\n\n        LM_K[node_dof:node_dof + 3, node_FoR_dof:node_FoR_dof + 3] += penaltyFactor * node_cga.T\n        LM_K[node_dof:node_dof + 3, node_dof:node_dof + 3] += penaltyFactor * np.eye(3)\n        LM_K[node_dof:node_dof + 3, FoR_dof:FoR_dof + 3] += -penaltyFactor * node_cga.T\n        LM_C[node_dof:node_dof + 3, node_FoR_dof + 6:node_FoR_dof + 10] += penaltyFactor * (\n            ag.der_CquatT_by_v(MB_tstep[node_body].quat, node_FoR_pos - FoR_pos))\n\n        LM_K[FoR_dof:FoR_dof + 3, node_FoR_dof:node_FoR_dof + 3] += -penaltyFactor * np.eye(3)\n        LM_K[FoR_dof:FoR_dof + 3, node_dof:node_dof + 3] += -penaltyFactor * node_cga.T\n        LM_K[FoR_dof:FoR_dof + 3, FoR_dof:FoR_dof + 3] += penaltyFactor * np.eye(3)\n        LM_C[FoR_dof:FoR_dof + 3, node_FoR_dof + 6:node_FoR_dof + 10] += -penaltyFactor * ag.der_Cquat_by_v(\n            MB_tstep[node_body].quat, node_pos)\n\n    ieq += 3\n    return ieq\n\n\ndef equal_lin_vel_node_FoR(MB_tstep, MB_beam, FoR_body, node_body, node_number, node_FoR_dof, node_dof, FoR_dof,\n                           sys_size, Lambda_dot, scalingFactor, penaltyFactor, ieq, LM_K, LM_C, LM_Q,\n                           rel_posB=np.zeros((3))):\n    \"\"\"\n    This function generates the stiffness and damping matrices and the independent vector associated to a constraint that\n    imposes equal linear velocities between a node and a frame of reference\n\n    See ``LagrangeConstraints`` for the description of variables\n\n    Args:\n        node_number (int): number of the \"node\" within its own body\n        node_body (int): body number of the \"node\"\n        node_FoR_dof (int): position of the first degree of freedom of the FoR to which the \"node\" belongs\n        node_dof (int): position of the first degree of freedom associated to the \"node\"\n        FoR_body (int): body number of the \"FoR\"\n        FoR_dof (int): position of the first degree of freedom associated to the \"FoR\"\n        rel_posB (float np.array): relative position between the node and the FoR (in the node B FoR)\n    \"\"\"\n\n    num_LM_eq_specific = 3\n    Bnh = np.zeros((num_LM_eq_specific, sys_size), dtype=ct.c_double, order='F')\n\n    # Simplify notation\n    node_cga = MB_tstep[node_body].cga()\n    node_FoR_va = MB_tstep[node_body].for_vel[0:3]\n    node_FoR_wa = MB_tstep[node_body].for_vel[3:6]\n\n    ielem, inode_in_elem = MB_beam[node_body].node_master_elem[node_number]\n    psi = MB_tstep[node_body].psi[ielem, inode_in_elem, :]\n    node_cab = ag.crv2rotation(psi)\n    node_Ra = MB_tstep[node_body].pos[node_number, :] + node_cab @ rel_posB\n\n    node_dot_Ra = MB_tstep[node_body].pos_dot[node_number, :]\n    FoR_cga = MB_tstep[FoR_body].cga()\n    FoR_va = MB_tstep[FoR_body].for_vel[0:3]\n\n    Bnh[:, FoR_dof:FoR_dof + 3] = FoR_cga\n    Bnh[:, node_dof:node_dof + 3] = -1. * node_cga\n    if MB_beam[node_body].FoR_movement == 'free':\n        Bnh[:, node_FoR_dof:node_FoR_dof + 3] = -1. * node_cga\n        Bnh[:, node_FoR_dof + 3:node_FoR_dof + 6] = node_cga @ ag.skew(node_Ra)\n\n    LM_C[sys_size + ieq:sys_size + ieq + num_LM_eq_specific, :sys_size] += scalingFactor * Bnh\n    LM_C[:sys_size, sys_size + ieq:sys_size + ieq + num_LM_eq_specific] += scalingFactor * Bnh.T\n\n    LM_Q[:sys_size] += scalingFactor * Bnh.T @ Lambda_dot[ieq:ieq + num_LM_eq_specific]\n    LM_Q[sys_size + ieq:sys_size + ieq + num_LM_eq_specific] \\\n        += scalingFactor * (FoR_cga @ FoR_va - node_cga @ (node_dot_Ra + node_FoR_va - ag.skew(node_Ra) @ node_FoR_wa))\n\n    LM_C[FoR_dof:FoR_dof + 3, FoR_dof + 6:FoR_dof + 10] \\\n        += scalingFactor * ag.der_CquatT_by_v(MB_tstep[FoR_body].quat, Lambda_dot[ieq:ieq + num_LM_eq_specific])\n\n    if MB_beam[node_body].FoR_movement == 'free':\n        LM_C[node_dof:node_dof + 3, node_FoR_dof + 6:node_FoR_dof + 10] -= scalingFactor * ag.der_CquatT_by_v(\n            MB_tstep[node_body].quat, Lambda_dot[ieq:ieq + num_LM_eq_specific])\n\n        LM_C[node_FoR_dof:node_FoR_dof + 3, node_FoR_dof + 6:node_FoR_dof + 10] -= scalingFactor * ag.der_CquatT_by_v(\n            MB_tstep[node_body].quat, Lambda_dot[ieq:ieq + num_LM_eq_specific])\n\n        LM_C[node_FoR_dof + 3:node_FoR_dof + 6, node_FoR_dof + 6:node_FoR_dof + 10] \\\n            += (scalingFactor * ag.skew(node_Ra).T\n                @ ag.der_CquatT_by_v(MB_tstep[node_body].quat, Lambda_dot[ieq:ieq + num_LM_eq_specific]))\n\n        # non-trivial - verified by hand (involves multiple transformations, Dynamics of Flexible Aircraft Appen. C)\n        LM_K[node_FoR_dof + 3:node_FoR_dof + 6, node_dof:node_dof + 3] += scalingFactor * ag.skew(\n            node_cga.T @ Lambda_dot[ieq:ieq + num_LM_eq_specific])\n\n    if penaltyFactor:\n        if MB_beam[node_body].FoR_movement == 'free':\n            # TODO: follow general approach to derive terms - first 4*4 terms, then LMC derivatives, then LMK derivatives - this is why penalty didn't work!\n\n            # Simplify notation\n            node_cga = MB_tstep[node_body].cga()\n            FoR_cga = MB_tstep[FoR_body].cga()\n            psi_dot = MB_tstep[node_body].psi_dot[ielem, inode_in_elem, :]\n\n            q = np.zeros((sys_size))\n            q[FoR_dof:FoR_dof + 3] = FoR_va\n            q[node_dof:node_dof + 3] = node_dot_Ra\n            q[node_dof + 3:node_dof + 6] = psi_dot\n            q[node_FoR_dof:node_FoR_dof + 3] = node_FoR_va\n            q[node_FoR_dof + 3:node_FoR_dof + 6] = node_FoR_wa\n\n            LM_Q[:sys_size] += penaltyFactor * Bnh.T @ Bnh @ q\n\n            # # 16 canonical terms for (abcd)^T(abcd)\n            LM_C[:sys_size, :sys_size] += penaltyFactor * Bnh.T @ Bnh\n\n            # other LM_C derivatives for c dependencies in x1 and x2\n            # term 1-x1 - \\frac{\\partial}{\\partial x_1}(a^Taq_1 + a^Tbq2 + a^Tcq3 + a^Tdq4) \n            # da^Tdxaq_1 + a^Tdadxaq_1 + da^Tdxbq_2 + a^Tdbdxq_2 + da^Tdxcq_3 + a^Tdcdxq_3 + da^Tdxdq_4\n\n            mat = -np.eye(3)\n            vec = -node_cga @ node_dot_Ra\n\n            LM_C[node_dof:node_dof + 3, node_FoR_dof + 6:node_FoR_dof + 10] \\\n                += penaltyFactor * mat @ ag.der_CquatT_by_v(MB_tstep[node_body].quat, vec)\n\n            mat = node_cga.T\n            vec = node_dot_Ra\n\n            LM_C[node_dof:node_dof + 3, node_FoR_dof + 6:node_FoR_dof + 10] \\\n                += penaltyFactor * mat @ ag.der_Cquat_by_v(MB_tstep[node_body].quat, vec)\n\n            mat = -np.eye(3)\n            vec = -node_cga @ node_FoR_va\n\n            LM_C[node_dof:node_dof + 3, node_FoR_dof + 6:node_FoR_dof + 10] \\\n                += penaltyFactor * mat @ ag.der_CquatT_by_v(MB_tstep[node_body].quat, vec)\n\n            mat = node_cga.T\n            vec = node_FoR_va\n\n            LM_C[node_dof:node_dof + 3, node_FoR_dof + 6:node_FoR_dof + 10] \\\n                += penaltyFactor * mat @ ag.der_Cquat_by_v(MB_tstep[node_body].quat, vec)\n\n            mat = -np.eye(3)\n            vec = node_cga @ ag.skew(node_Ra) @ node_FoR_wa\n\n            LM_C[node_dof:node_dof + 3, node_FoR_dof + 6:node_FoR_dof + 10] \\\n                += penaltyFactor * mat @ ag.der_CquatT_by_v(MB_tstep[node_body].quat, vec)\n\n            mat = -node_cga.T\n            vec = ag.skew(node_Ra) @ node_FoR_wa\n\n            LM_C[node_dof:node_dof + 3, node_FoR_dof + 6:node_FoR_dof + 10] \\\n                += penaltyFactor * mat @ ag.der_Cquat_by_v(MB_tstep[node_body].quat, vec)\n\n            mat = -np.eye(3)\n            vec = FoR_cga @ FoR_va\n\n            LM_C[node_dof:node_dof + 3, node_FoR_dof + 6:node_FoR_dof + 10] \\\n                += penaltyFactor * mat @ ag.der_CquatT_by_v(MB_tstep[node_body].quat, vec)\n\n            # term 2-x1 - \\frac{\\partial}{\\partial x_1}(b^Taq_1 + b^Tbq2 + b^Tcq3 + b^Tdq4)\n            # db^Tdxaq_1 + b^Tdadxaq_1 + db^Tdxbq_2 + b^Tdbdxq_2 + db^Tdxcq_3 + b^Tdcdxq_3 + db^Tdxdq_4\n\n            mat = -np.eye(3)\n            vec = -node_cga @ node_dot_Ra\n\n            LM_C[node_FoR_dof:node_FoR_dof + 3, node_FoR_dof + 6:node_FoR_dof + 10] \\\n                += penaltyFactor * mat @ ag.der_CquatT_by_v(MB_tstep[node_body].quat, vec)\n\n            mat = node_cga.T\n            vec = node_dot_Ra\n\n            LM_C[node_FoR_dof:node_FoR_dof + 3, node_FoR_dof + 6:node_FoR_dof + 10] \\\n                += penaltyFactor * mat @ ag.der_Cquat_by_v(MB_tstep[node_body].quat, vec)\n\n            mat = -np.eye(3)\n            vec = -node_cga @ node_FoR_va\n\n            LM_C[node_FoR_dof:node_FoR_dof + 3, node_FoR_dof + 6:node_FoR_dof + 10] \\\n                += penaltyFactor * mat @ ag.der_CquatT_by_v(MB_tstep[node_body].quat, vec)\n\n            mat = node_cga.T\n            vec = node_FoR_va\n\n            LM_C[node_FoR_dof:node_FoR_dof + 3, node_FoR_dof + 6:node_FoR_dof + 10] \\\n                += penaltyFactor * mat @ ag.der_Cquat_by_v(MB_tstep[node_body].quat, vec)\n\n            mat = -np.eye(3)\n            vec = node_cga @ ag.skew(node_Ra) @ node_FoR_wa\n\n            LM_C[node_FoR_dof:node_FoR_dof + 3, node_FoR_dof + 6:node_FoR_dof + 10] \\\n                += penaltyFactor * mat @ ag.der_CquatT_by_v(MB_tstep[node_body].quat, vec)\n\n            mat = -node_cga.T\n            vec = ag.skew(node_Ra) @ node_FoR_wa\n\n            LM_C[node_FoR_dof:node_FoR_dof + 3, node_FoR_dof + 6:node_FoR_dof + 10] \\\n                += penaltyFactor * mat @ ag.der_Cquat_by_v(MB_tstep[node_body].quat, vec)\n\n            mat = -np.eye(3)\n            vec = FoR_cga @ FoR_va\n\n            LM_C[node_FoR_dof:node_FoR_dof + 3, node_FoR_dof + 6:node_FoR_dof + 10] \\\n                += penaltyFactor * mat @ ag.der_CquatT_by_v(MB_tstep[node_body].quat, vec)\n\n            # term 3-x1 - \\frac{\\partial}{\\partial x_1}(c^Taq_1 + c^Tbq2 + c^Tcq3 + c^Tdq4)\n            # dc^Tdxaq_1 + c^Tdadxaq_1 + dc^Tdxbq_2 + c^Tdbdxq_2 + dc^Tdxcq_3 + c^Tdcdxq_3 + dc^Tdxdq_4          \n\n            mat = ag.skew(node_Ra).T\n            vec = -node_cga @ node_dot_Ra\n\n            LM_C[node_FoR_dof + 3:node_FoR_dof + 6, node_FoR_dof + 6:node_FoR_dof + 10] \\\n                += penaltyFactor * mat @ ag.der_CquatT_by_v(MB_tstep[node_body].quat, vec)\n\n            mat = -ag.skew(node_Ra).T @ node_cga.T\n            vec = node_dot_Ra\n\n            LM_C[node_FoR_dof + 3:node_FoR_dof + 6, node_FoR_dof + 6:node_FoR_dof + 10] \\\n                += penaltyFactor * mat @ ag.der_Cquat_by_v(MB_tstep[node_body].quat, vec)\n\n            mat = ag.skew(node_Ra).T\n            vec = -node_cga @ node_FoR_va\n\n            LM_C[node_FoR_dof + 3:node_FoR_dof + 6, node_FoR_dof + 6:node_FoR_dof + 10] \\\n                += penaltyFactor * mat @ ag.der_CquatT_by_v(MB_tstep[node_body].quat, vec)\n\n            mat = -ag.skew(node_Ra).T @ node_cga.T\n            vec = node_FoR_va\n\n            LM_C[node_FoR_dof + 3:node_FoR_dof + 6, node_FoR_dof + 6:node_FoR_dof + 10] \\\n                += penaltyFactor * mat @ ag.der_Cquat_by_v(MB_tstep[node_body].quat, vec)\n\n            mat = ag.skew(node_Ra).T\n            vec = node_cga @ ag.skew(node_Ra) @ node_FoR_wa\n\n            LM_C[node_FoR_dof + 3:node_FoR_dof + 6, node_FoR_dof + 6:node_FoR_dof + 10] \\\n                += penaltyFactor * mat @ ag.der_CquatT_by_v(MB_tstep[node_body].quat, vec)\n\n            mat = ag.skew(node_Ra).T @ node_cga.T\n            vec = ag.skew(node_Ra) @ node_FoR_wa\n\n            LM_C[node_FoR_dof + 3:node_FoR_dof + 6, node_FoR_dof + 6:node_FoR_dof + 10] \\\n                += penaltyFactor * mat @ ag.der_Cquat_by_v(MB_tstep[node_body].quat, vec)\n\n            mat = ag.skew(node_Ra).T\n            vec = FoR_cga @ FoR_va\n\n            LM_C[node_FoR_dof + 3:node_FoR_dof + 6, node_FoR_dof + 6:node_FoR_dof + 10] \\\n                += penaltyFactor * mat @ ag.der_CquatT_by_v(MB_tstep[node_body].quat, vec)\n\n            # term 4-x1 - \\frac{\\partial}{\\partial x_1}(d^Taq_1 + d^Tbq2 + d^Tcq3 + d^Tdq4) \n            # d^Tdadxaq_1 + d^Tdbdxq_2 + d^Tdcdxq_3      \n\n            mat = -FoR_cga.T\n            vec = node_dot_Ra\n\n            LM_C[FoR_dof:FoR_dof + 3, node_FoR_dof + 6:node_FoR_dof + 10] \\\n                += penaltyFactor * mat @ ag.der_Cquat_by_v(MB_tstep[node_body].quat, vec)\n\n            mat = -FoR_cga.T\n            vec = node_FoR_va\n\n            LM_C[FoR_dof:FoR_dof + 3, node_FoR_dof + 6:node_FoR_dof + 10] \\\n                += penaltyFactor * mat @ ag.der_Cquat_by_v(MB_tstep[node_body].quat, vec)\n\n            mat = FoR_cga.T\n            vec = ag.skew(node_Ra) @ node_FoR_wa\n\n            LM_C[FoR_dof:FoR_dof + 3, node_FoR_dof + 6:node_FoR_dof + 10] \\\n                += penaltyFactor * mat @ ag.der_Cquat_by_v(MB_tstep[node_body].quat, vec)\n\n            # term 1-x2 - \\frac{\\partial}{\\partial x_2}(a^Taq_1 + a^Tbq2 + a^Tcq3 + a^Tdq4) \n            # a^Tdddxq_4\n\n            mat = -node_cga.T\n            vec = FoR_va\n\n            LM_C[node_dof:node_dof + 3, FoR_dof + 6:FoR_dof + 10] \\\n                += penaltyFactor * mat @ ag.der_Cquat_by_v(MB_tstep[FoR_body].quat, vec)\n\n            # term 2-x2 - \\frac{\\partial}{\\partial x_2}(b^Taq_1 + b^Tbq2 + b^Tcq3 + b^Tdq4)\n            # b^Tdddxq_4\n\n            mat = -node_cga.T\n            vec = FoR_va\n\n            LM_C[node_FoR_dof:node_FoR_dof + 3, FoR_dof + 6:FoR_dof + 10] \\\n                += penaltyFactor * mat @ ag.der_Cquat_by_v(MB_tstep[FoR_body].quat, vec)\n\n            # term 3-x2 - \\frac{\\partial}{\\partial x_2}(c^Taq_1 + c^Tbq2 + c^Tcq3 + c^Tdq4)\n            # c^Tdddxq_4\n\n            mat = ag.skew(node_Ra).T @ node_cga.T\n            vec = FoR_va\n\n            LM_C[node_FoR_dof + 3:node_FoR_dof + 6, FoR_dof + 6:FoR_dof + 10] \\\n                += penaltyFactor * mat @ ag.der_Cquat_by_v(MB_tstep[FoR_body].quat, vec)\n\n            # term 4-x2 - \\frac{\\partial}{\\partial x_2}(d^Taq_1 + d^Tbq2 + d^Tcq3 + d^Tdq4) \n            # dd^Tdxaq_1 + dd^Tdxbq_2 + dd^Tdxcq_3 + dd^Tdxdq_4 + d^Tdddxq_4\n\n            mat = np.eye(3)\n            vec = -node_cga @ node_dot_Ra\n\n            LM_C[FoR_dof:FoR_dof + 3, FoR_dof + 6:FoR_dof + 10] \\\n                += penaltyFactor * mat @ ag.der_CquatT_by_v(MB_tstep[FoR_body].quat, vec)\n\n            mat = np.eye(3)\n            vec = -node_cga @ node_FoR_va\n\n            LM_C[FoR_dof:FoR_dof + 3, FoR_dof + 6:FoR_dof + 10] \\\n                += penaltyFactor * mat @ ag.der_CquatT_by_v(MB_tstep[FoR_body].quat, vec)\n\n            mat = np.eye(3)\n            vec = node_cga @ ag.skew(node_Ra) @ node_FoR_wa\n\n            LM_C[FoR_dof:FoR_dof + 3, FoR_dof + 6:FoR_dof + 10] \\\n                += penaltyFactor * mat @ ag.der_CquatT_by_v(MB_tstep[FoR_body].quat, vec)\n\n            mat = np.eye(3)\n            vec = FoR_cga @ FoR_va\n\n            LM_C[FoR_dof:FoR_dof + 3, FoR_dof + 6:FoR_dof + 10] \\\n                += penaltyFactor * mat @ ag.der_CquatT_by_v(MB_tstep[FoR_body].quat, vec)\n\n            mat = FoR_cga.T\n            vec = FoR_va\n\n            LM_C[FoR_dof:FoR_dof + 3, FoR_dof + 6:FoR_dof + 10] \\\n                += penaltyFactor * mat @ ag.der_Cquat_by_v(MB_tstep[FoR_body].quat, vec)\n\n            # other LM_K derivatives for a/b/c/d dependencies in Ra\n            # term 1-Ra - \\frac{\\partial}{\\partial Ra}(a^Taq_1 + a^Tbq2 + a^Tcq3 + a^Tdq4) \n            # a^Tdcdrq_3\n\n            mat = -node_cga.T @ node_cga\n            vec = node_FoR_wa\n\n            LM_K[node_dof:node_dof + 3, node_dof:node_dof + 3] \\\n                += penaltyFactor * mat @ ag.der_skewp_v(ag.skew(node_Ra), vec)\n\n            # term 2-Ra - \\frac{\\partial}{\\partial Ra}(b^Taq_1 + b^Tbq2 + b^Tcq3 + b^Tdq4)\n            # b^Tdcdrq_3\n\n            mat = -node_cga.T @ node_cga\n            vec = node_FoR_wa\n\n            LM_K[node_FoR_dof:node_FoR_dof + 3, node_dof:node_dof + 3] \\\n                += penaltyFactor * mat @ ag.der_skewp_v(ag.skew(node_Ra), vec)\n\n            # term 3-Ra - \\frac{\\partial}{\\partial Ra}(c^Taq_1 + c^Tbq2 + c^Tcq3 + c^Tdq4)\n            # dc^Tdraq_1 + dc^Tdrbq_2 + dc^Tdrcq_3 + c^Tdcdrq_3 + dc^Tdrdq_4\n\n            mat = np.eye(3)\n            vec = node_cga.T @ -node_cga @ node_dot_Ra\n\n            LM_K[node_FoR_dof + 3:node_FoR_dof + 6, node_dof:node_dof + 3] \\\n                += penaltyFactor * mat @ ag.der_skewpT_v(ag.skew(node_Ra), vec)\n\n            mat = np.eye(3)\n            vec = node_cga.T @ -node_cga @ node_FoR_va\n\n            LM_K[node_FoR_dof + 3:node_FoR_dof + 6, node_dof:node_dof + 3] \\\n                += penaltyFactor * mat @ ag.der_skewpT_v(ag.skew(node_Ra), vec)\n\n            mat = np.eye(3)\n            vec = node_cga.T @ node_cga @ ag.skew(node_Ra) @ node_FoR_wa\n\n            LM_K[node_FoR_dof + 3:node_FoR_dof + 6, node_dof:node_dof + 3] \\\n                += penaltyFactor * mat @ ag.der_skewpT_v(ag.skew(node_Ra), vec)\n\n            mat = ag.skew(node_Ra).T @ node_cga.T @ node_cga\n            vec = node_FoR_wa\n\n            LM_K[node_FoR_dof + 3:node_FoR_dof + 6, node_dof:node_dof + 3] \\\n                += penaltyFactor * mat @ ag.der_skewp_v(ag.skew(node_Ra), vec)\n\n            mat = np.eye(3)\n            vec = node_cga.T @ FoR_cga @ FoR_va\n\n            LM_K[node_FoR_dof + 3:node_FoR_dof + 6, node_dof:node_dof + 3] \\\n                += penaltyFactor * mat @ ag.der_skewpT_v(ag.skew(node_Ra), vec)\n\n            # term 4-Ra - \\frac{\\partial}{\\partial Ra}(d^Taq_1 + d^Tbq2 + d^Tcq3 + d^Tdq4) \n            # d^Tdcdrq_3\n\n            mat = FoR_cga.T @ node_cga\n            vec = node_FoR_wa\n\n            LM_K[FoR_dof:FoR_dof + 3, node_dof:node_dof + 3] \\\n                += penaltyFactor * mat @ ag.der_skewp_v(ag.skew(node_Ra), vec)\n\n            #  a^T   -node_cga.T\n            #  a     -node_cga\n            #  b^T   -node_cga.T\n            #  b     -node_cga\n            #  c^T   ag.skew(node_Ra).T, node_cga.T\n            #  c     node_cga, ag.skew(node_Ra)\n            #  d^T   FoR_cga.T\n            #  d     FoR_cga\n            #  q1    node_dof:node_dof+3            node_dot_Ra\n            #  q2    node_FoR_dof:node_FoR_dof+3    node_FoR_va\n            #  q3    node_FoR_dof+3:node_FoR_dof+6  node_FoR_wa\n            #  q4    FoR_dof:FoR_dof+3              FoR_va\n\n        else:\n            # TODO: follow general approach to derive terms - first 4*4 terms, then LMC derivatives,\n            # then LMK derivatives - this is why penalty didn't work!\n            # if A1 is clamped, then remove the related DoFs from the description above (commented sections below)\n\n            # Simplify notation\n            node_cga = MB_tstep[node_body].cga()\n            FoR_cga = MB_tstep[FoR_body].cga()\n            psi_dot = MB_tstep[node_body].psi_dot[ielem, inode_in_elem, :]\n\n            q = np.zeros((sys_size))\n            q[FoR_dof:FoR_dof + 3] = FoR_va\n            q[node_dof:node_dof + 3] = node_dot_Ra\n            q[node_dof + 3:node_dof + 6] = psi_dot\n\n            LM_Q[:sys_size] += penaltyFactor * Bnh.T @ Bnh @ q\n\n            # # 16 canonical terms for (abcd)^T(abcd)\n            LM_C[:sys_size, :sys_size] += penaltyFactor * Bnh.T @ Bnh\n\n            # other LM_C derivatives for c dependencies in x1 and x2\n            # term 1-x1 - \\frac{\\partial}{\\partial x_1}(a^Taq_1 + a^Tbq2 + a^Tcq3 + a^Tdq4) \n            # da^Tdxaq_1 + a^Tdadxaq_1 + da^Tdxbq_2 + a^Tdbdxq_2 + da^Tdxcq_3 + a^Tdcdxq_3 + da^Tdxdq_4\n\n            mat = -np.eye(3)\n            vec = -node_cga @ node_dot_Ra\n\n            LM_C[node_dof:node_dof + 3, node_FoR_dof + 6:node_FoR_dof + 10] \\\n                += penaltyFactor * mat @ ag.der_CquatT_by_v(MB_tstep[node_body].quat, ec)\n\n            mat = node_cga.T\n            vec = node_dot_Ra\n\n            LM_C[node_dof:node_dof + 3, node_FoR_dof + 6:node_FoR_dof + 10] \\\n                += penaltyFactor * mat @ ag.der_Cquat_by_v(MB_tstep[node_body].quat, vec)\n\n            mat = -np.eye(3)\n            vec = FoR_cga @ FoR_va\n\n            LM_C[node_dof:node_dof + 3, node_FoR_dof + 6:node_FoR_dof + 10] \\\n                += penaltyFactor * mat @ ag.der_CquatT_by_v(MB_tstep[node_body].quat, vec)\n\n            # term 4-x1 - \\frac{\\partial}{\\partial x_1}(d^Taq_1 + d^Tbq2 + d^Tcq3 + d^Tdq4) \n            # d^Tdadxaq_1 + d^Tdbdxq_2 + d^Tdcdxq_3      \n\n            mat = -FoR_cga.T\n            vec = node_dot_Ra\n\n            LM_C[FoR_dof:FoR_dof + 3, node_FoR_dof + 6:node_FoR_dof + 10] \\\n                += penaltyFactor * mat @ ag.der_Cquat_by_v(MB_tstep[node_body].quat, vec)\n\n            # term 1-x2 - \\frac{\\partial}{\\partial x_2}(a^Taq_1 + a^Tbq2 + a^Tcq3 + a^Tdq4)\n            # a^Tdddxq_4\n\n            mat = -node_cga.T\n            vec = FoR_va\n\n            LM_C[node_dof:node_dof + 3, FoR_dof + 6:FoR_dof + 10] \\\n                += penaltyFactor * mat @ ag.der_Cquat_by_v(MB_tstep[FoR_body].quat, vec)\n\n            # term 4-x2 - \\frac{\\partial}{\\partial x_2}(d^Taq_1 + d^Tbq2 + d^Tcq3 + d^Tdq4)\n            # dd^Tdxaq_1 + dd^Tdxbq_2 + dd^Tdxcq_3 + dd^Tdxdq_4 + d^Tdddxq_4\n\n            mat = np.eye(3)\n            vec = -node_cga @ node_dot_Ra\n\n            LM_C[FoR_dof:FoR_dof + 3, FoR_dof + 6:FoR_dof + 10] \\\n                += penaltyFactor * mat @ ag.der_CquatT_by_v(MB_tstep[FoR_body].quat, vec)\n\n            mat = np.eye(3)\n            vec = FoR_cga @ FoR_va\n\n            LM_C[FoR_dof:FoR_dof + 3, FoR_dof + 6:FoR_dof + 10] \\\n                += penaltyFactor * mat @ ag.der_CquatT_by_v(MB_tstep[FoR_body].quat, vec)\n\n            mat = FoR_cga.T\n            vec = FoR_va\n\n            LM_C[FoR_dof:FoR_dof + 3, FoR_dof + 6:FoR_dof + 10] \\\n                += penaltyFactor * mat @ ag.der_Cquat_by_v(MB_tstep[FoR_body].quat, vec)\n\n            #  a^T   -node_cga.T\n            #  a     -node_cga\n            #  b^T   -node_cga.T\n            #  b     -node_cga\n            #  c^T   ag.skew(node_Ra).T, node_cga.T\n            #  c     node_cga, ag.skew(node_Ra)\n            #  d^T   FoR_cga.T\n            #  d     FoR_cga\n            #  q1    node_dof:node_dof+3            node_dot_Ra\n            #  q2    node_FoR_dof:node_FoR_dof+3    node_FoR_va\n            #  q3    node_FoR_dof+3:node_FoR_dof+6  node_FoR_wa\n            #  q4    FoR_dof:FoR_dof+3              FoR_va\n\n    ieq += 3\n    return ieq\n\n\ndef rel_rot_vel_node_FoR(MB_tstep, MB_beam, FoR_body, node_body, node_number, node_FoR_dof, node_dof, FoR_dof, sys_size,\n                         Lambda_dot, scalingFactor, penaltyFactor, ieq, LM_K, LM_C, LM_Q, rel_vel=np.zeros((3))):\n    \"\"\"\n    This function generates the stiffness and damping matrices and the independent vector associated to a constraint that\n    imposes equal rotation velocities between a node and a frame of reference\n\n    See ``LagrangeConstraints`` for the description of variables\n\n    Args:\n        node_number (int): number of the \"node\" within its own body\n        node_body (int): body number of the \"node\"\n        node_FoR_dof (int): position of the first degree of freedom of the FoR to which the \"node\" belongs\n        node_dof (int): position of the first degree of freedom associated to the \"node\"\n        FoR_body (int): body number of the \"FoR\"\n        FoR_dof (int): position of the first degree of freedom associated to the \"FoR\"\n        rel_vel (np.array): relative velocity FoR-node\n    \"\"\"\n\n    num_LM_eq_specific = 3\n    Bnh = np.zeros((num_LM_eq_specific, sys_size), dtype=ct.c_double, order='F')\n\n    # Simplify notation\n    ielem, inode_in_elem = MB_beam[node_body].node_master_elem[node_number]\n    node_cga = MB_tstep[node_body].cga()\n    node_FoR_wa = MB_tstep[node_body].for_vel[3:6]\n    psi = MB_tstep[node_body].psi[ielem, inode_in_elem, :]\n    cab = ag.crv2rotation(psi)\n    tan = ag.crv2tan(psi)\n\n    FoR_cga = MB_tstep[FoR_body].cga()\n    FoR_wa = MB_tstep[FoR_body].for_vel[3:6]\n\n    Bnh[:, node_dof + 3:node_dof + 6] += tan.copy()\n    Bnh[:, FoR_dof + 3:FoR_dof + 6] -= cab.T @ node_cga.T @ FoR_cga\n    if MB_beam[node_body].FoR_movement == 'free':\n        Bnh[:, node_FoR_dof + 3:node_FoR_dof + 6] += cab.T\n\n    LM_C[sys_size + ieq:sys_size + ieq + num_LM_eq_specific, :sys_size] += scalingFactor * Bnh\n    LM_C[:sys_size, sys_size + ieq:sys_size + ieq + num_LM_eq_specific] += scalingFactor * Bnh.T\n\n    LM_Q[:sys_size] += scalingFactor * Bnh.T @ Lambda_dot[ieq:ieq + num_LM_eq_specific]\n    LM_Q[sys_size + ieq:sys_size + ieq + num_LM_eq_specific] \\\n        += scalingFactor * (tan @ MB_tstep[node_body].psi_dot[ielem, inode_in_elem, :]\n                            + cab.T @ node_FoR_wa - cab.T @ node_cga.T @ FoR_cga @ FoR_wa + rel_vel)\n\n    LM_K[node_dof + 3:node_dof + 6, node_dof + 3:node_dof + 6] \\\n        += scalingFactor * ag.der_TanT_by_xv(psi, Lambda_dot[ieq:ieq + num_LM_eq_specific])\n    if MB_beam[node_body].FoR_movement == 'free':\n        LM_K[node_FoR_dof + 3:node_FoR_dof + 6, node_dof + 3:node_dof + 6] \\\n            += scalingFactor * ag.der_Ccrv_by_v(psi, Lambda_dot[ieq:ieq + num_LM_eq_specific])\n\n    LM_K[FoR_dof + 3:FoR_dof + 6, node_dof + 3:node_dof + 6] \\\n        -= scalingFactor * ag.der_Ccrv_by_v(psi, node_cga @ FoR_cga.T @ Lambda_dot[ieq:ieq + num_LM_eq_specific])\n\n    LM_C[FoR_dof + 3:FoR_dof + 6, node_FoR_dof + 6:node_FoR_dof + 10] \\\n        -= scalingFactor * cab @ ag.der_Cquat_by_v(MB_tstep[node_body].quat,\n                                                   FoR_cga.T @ Lambda_dot[ieq:ieq + num_LM_eq_specific])\n\n    LM_C[FoR_dof + 3:FoR_dof + 6, FoR_dof + 6:FoR_dof + 10] \\\n        -= scalingFactor * cab @ node_cga @ ag.der_CquatT_by_v(MB_tstep[FoR_body].quat,\n                                                               Lambda_dot[ieq:ieq + num_LM_eq_specific])\n\n    ieq += 3\n    return ieq\n\n\ndef def_rot_axis_FoR_wrt_node_general(MB_tstep, MB_beam, FoR_body, node_body, node_number, node_FoR_dof, node_dof,\n                                      FoR_dof, sys_size, Lambda_dot, rot_axisB, rot_axisA2, scalingFactor,\n                                      penaltyFactor, ieq, LM_K, LM_C, LM_Q, indep):\n    \"\"\"\n    This function generates the stiffness and damping matrices and the independent vector associated to a joint that\n    forces the rotation axis of a FoR to be parallel to a certain direction. This direction is defined in the\n    B FoR of a node and, thus, might change along the simulation.\n\n    See ``LagrangeConstraints`` for the description of variables\n\n    Args:\n        rot_axisB (np.ndarray): Rotation axis with respect to the node B FoR\n        rot_axisA2 (np.ndarray): Rotation axis with respect to the node A2 FoR\n        indep (np.ndarray): Number of the equations that are used as independent\n        node_number (int): number of the \"node\" within its own body\n        node_body (int): body number of the \"node\"\n        node_FoR_dof (int): position of the first degree of freedom of the FoR to which the \"node\" belongs\n        node_dof (int): position of the first degree of freedom associated to the \"node\"\n        FoR_body (int): body number of the \"FoR\"\n        FoR_dof (int): position of the first degree of freedom associated to the \"FoR\"\n\n    \"\"\"\n\n    ielem, inode_in_elem = MB_beam[node_body].node_master_elem[node_number]\n\n    # Simplify notation\n    cab = ag.crv2rotation(MB_tstep[node_body].psi[ielem, inode_in_elem, :])\n    node_cga = MB_tstep[node_body].cga()\n    FoR_cga = MB_tstep[FoR_body].cga()\n    FoR_wa = MB_tstep[FoR_body].for_vel[3:6]\n    node_wa = MB_tstep[node_body].for_vel[3:6]\n    psi = MB_tstep[node_body].psi[ielem, inode_in_elem, :]\n    psi_dot = MB_tstep[node_body].psi_dot[ielem, inode_in_elem, :]\n\n    if MB_beam[node_body].FoR_movement == 'free':\n        if not indep:\n            aux_Bnh = cab.T @ node_cga.T @ FoR_cga @ ag.skew(rot_axisA2)\n\n            # indep = None\n            n0 = np.linalg.norm(aux_Bnh[0, :])\n            n1 = np.linalg.norm(aux_Bnh[1, :])\n            n2 = np.linalg.norm(aux_Bnh[2, :])\n            if ((n0 < n1) and (n0 < n2)):\n                indep[:] = [1, 2]\n            elif ((n1 < n0) and (n1 < n2)):\n                indep[:] = [0, 2]\n            elif ((n2 < n0) and (n2 < n1)):\n                indep[:] = [0, 1]\n\n        new_Lambda_dot = np.zeros(3)\n        new_Lambda_dot[indep[0]] = Lambda_dot[ieq]\n        new_Lambda_dot[indep[1]] = Lambda_dot[ieq + 1]\n\n        num_LM_eq_specific = 2\n        Bnh = np.zeros((num_LM_eq_specific, sys_size), dtype=ct.c_double, order='F')\n        Bnh[:, FoR_dof + 3:FoR_dof + 6] -= (cab.T @ node_cga.T @ FoR_cga @ ag.skew(rot_axisA2))[indep, :]\n        Bnh[:, node_dof + 3:node_dof + 6] += (ag.skew(rot_axisB) @ ag.crv2tan(psi))[indep, :]\n        Bnh[:, node_FoR_dof + 3:node_FoR_dof + 6] += (ag.skew(rot_axisB) @ cab.T)[indep, :]\n\n        # Constrain angular velocities\n        LM_Q[:sys_size] += scalingFactor * Bnh.T @ Lambda_dot[ieq:ieq + num_LM_eq_specific]\n        LM_Q[sys_size + ieq:sys_size + ieq + num_LM_eq_specific] \\\n            -= scalingFactor * (cab.T @ node_cga.T @ FoR_cga @ ag.skew(rot_axisA2) @ FoR_wa)[indep]\n        LM_Q[sys_size + ieq:sys_size + ieq + num_LM_eq_specific] \\\n            += scalingFactor * (ag.skew(rot_axisB) @ ag.crv2tan(psi) @ psi_dot)[indep]\n        LM_Q[sys_size + ieq:sys_size + ieq + num_LM_eq_specific] \\\n            += scalingFactor * (ag.skew(rot_axisB) @ cab.T @ MB_tstep[node_body].for_vel[3:6])[indep]\n\n        # # for initial omega A2\n        LM_C[sys_size + ieq:sys_size + ieq + num_LM_eq_specific, :sys_size] += scalingFactor * Bnh\n        LM_C[:sys_size, sys_size + ieq:sys_size + ieq + num_LM_eq_specific] += scalingFactor * Bnh.T\n\n        # term 3 x1\n        LM_C[FoR_dof + 3:FoR_dof + 6, node_FoR_dof + 6:node_FoR_dof + 10] \\\n            += scalingFactor * ag.skew(rot_axisA2) @ FoR_cga.T @ ag.der_Cquat_by_v(MB_tstep[node_body].quat,\n                                                                                   cab @ new_Lambda_dot)\n\n        # term 3 x2\n        LM_C[FoR_dof + 3:FoR_dof + 6, FoR_dof + 6:FoR_dof + 10] \\\n            += scalingFactor * ag.skew(rot_axisA2) @ ag.der_CquatT_by_v(MB_tstep[FoR_body].quat,\n                                                                        node_cga @ cab @ new_Lambda_dot)\n\n        # term 3 K(psi)\n        LM_K[FoR_dof + 3:FoR_dof + 6, node_dof + 3:node_dof + 6] \\\n            += scalingFactor * ag.skew(rot_axisA2) @ FoR_cga.T @ node_cga @ ag.der_CcrvT_by_v(psi, new_Lambda_dot)\n\n        LM_K[node_dof + 3:node_dof + 6, node_dof + 3:node_dof + 6] \\\n            -= scalingFactor * ag.der_TanT_by_xv(psi, ag.skew(rot_axisB) @ new_Lambda_dot)\n\n        # term 1\n        LM_K[node_FoR_dof + 3:node_FoR_dof + 6, node_dof + 3:node_dof + 6] \\\n            -= scalingFactor * ag.der_Ccrv_by_v(psi, ag.skew(rot_axisB) @ new_Lambda_dot)\n    else:\n        if not indep:\n            aux_Bnh = cab.T @ node_cga.T @ FoR_cga @ ag.skew(rot_axisA2)\n\n            # indep = None\n            n0 = np.linalg.norm(aux_Bnh[0, :])\n            n1 = np.linalg.norm(aux_Bnh[1, :])\n            n2 = np.linalg.norm(aux_Bnh[2, :])\n            if ((n0 < n1) and (n0 < n2)):\n                indep[:] = [1, 2]\n            elif ((n1 < n0) and (n1 < n2)):\n                indep[:] = [0, 2]\n            elif ((n2 < n0) and (n2 < n1)):\n                indep[:] = [0, 1]\n\n        new_Lambda_dot = np.zeros(3)\n        new_Lambda_dot[indep[0]] = Lambda_dot[ieq]\n        new_Lambda_dot[indep[1]] = Lambda_dot[ieq + 1]\n\n        num_LM_eq_specific = 2\n        Bnh = np.zeros((num_LM_eq_specific, sys_size), dtype=ct.c_double, order='F')\n\n        Bnh[:, FoR_dof + 3:FoR_dof + 6] -= (cab.T @ node_cga.T @ FoR_cga @ ag.skew(rot_axisA2))[indep, :]\n        Bnh[:, node_dof + 3:node_dof + 6] += (ag.skew(rot_axisB) @ ag.crv2tan(psi))[indep, :]\n\n        # Constrain angular velocities\n        LM_Q[:sys_size] += scalingFactor * Bnh.T @ Lambda_dot[ieq:ieq + num_LM_eq_specific]\n        LM_Q[sys_size + ieq:sys_size + ieq + num_LM_eq_specific] \\\n            -= scalingFactor * (cab.T @ node_cga.T @ FoR_cga @ ag.skew(rot_axisA2) @ FoR_wa)[indep]\n        LM_Q[sys_size + ieq:sys_size + ieq + num_LM_eq_specific] \\\n            += scalingFactor * (ag.skew(rot_axisB) @ ag.crv2tan(psi) @ psi_dot)[indep]\n\n        LM_C[sys_size + ieq:sys_size + ieq + num_LM_eq_specific, :sys_size] += scalingFactor * Bnh\n        LM_C[:sys_size, sys_size + ieq:sys_size + ieq + num_LM_eq_specific] += scalingFactor * Bnh.T\n\n        # term 3 x2\n        LM_C[FoR_dof + 3:FoR_dof + 6, FoR_dof + 6:FoR_dof + 10] \\\n            += scalingFactor * ag.skew(rot_axisA2) @ ag.der_CquatT_by_v(MB_tstep[FoR_body].quat,\n                                                                        node_cga @ cab @ new_Lambda_dot)\n\n        # term 3 K(psi)\n        LM_K[FoR_dof + 3:FoR_dof + 6, node_dof + 3:node_dof + 6] \\\n            += scalingFactor * ag.skew(rot_axisA2) @ FoR_cga.T @ node_cga, ag.der_CcrvT_by_v(psi, new_Lambda_dot)\n        # term 2\n        LM_K[node_dof + 3:node_dof + 6, node_dof + 3:node_dof + 6] \\\n            -= scalingFactor * ag.der_TanT_by_xv(psi, ag.skew(rot_axisB) @ new_Lambda_dot)\n\n    # TODO: penalty factor formulation to be verified\n    if penaltyFactor:\n        if MB_beam[node_body].FoR_movement == 'free':\n            q = np.zeros((sys_size,))\n            q[FoR_dof + 3:FoR_dof + 6] = FoR_wa\n            q[node_dof + 3:node_dof + 6] = psi_dot\n            q[node_FoR_dof + 3:node_FoR_dof + 6] = node_wa\n\n            LM_Q[:sys_size] += penaltyFactor * Bnh.T @ Bnh @ q\n            LM_C[:sys_size, :sys_size] += penaltyFactor * Bnh.T @ Bnh\n\n            # other LM_K derivatives for a/b/c dependencies in C(psi) and T(psi)\n            # term 2-psi - \\frac{\\partial}{\\partial psi}(a^2q_2 + abq_5 + acq_7)\n            # da^Tdpsiaq_2 + a^Tdadpsiq_2 + da^Tdpsibq_5 + a^Tdbdpsiq_5 + da^Tdpsicq_7 + a^Tdcdpsiq_7\n\n            mat = np.eye(3)\n            vec = ag.skew(rot_axisB).T @ ag.skew(rot_axisB) @ cab.T @ node_wa\n\n            LM_K[node_FoR_dof + 3:node_FoR_dof + 6, node_dof + 3:node_dof + 6] \\\n                += penaltyFactor * mat @ ag.der_Ccrv_by_v(psi, vec)\n\n            mat = cab @ ag.skew(rot_axisB).T @ ag.skew(rot_axisB)\n            vec = node_wa\n\n            LM_K[node_FoR_dof + 3:node_FoR_dof + 6, node_dof + 3:node_dof + 6] \\\n                += penaltyFactor * mat @ ag.der_CcrvT_by_v(psi, vec)\n\n            mat = np.eye(3)\n            vec = ag.skew(rot_axisB).T @ ag.skew(rot_axisB) @ ag.crv2tan(psi) @ psi_dot\n\n            LM_K[node_FoR_dof + 3:node_FoR_dof + 6, node_dof + 3:node_dof + 6] \\\n                += penaltyFactor * mat @ ag.der_Ccrv_by_v(psi, vec)\n\n            mat = cab @ ag.skew(rot_axisB).T @ ag.skew(rot_axisB)\n            vec = psi_dot\n\n            LM_K[node_FoR_dof + 3:node_FoR_dof + 6, node_dof + 3:node_dof + 6] \\\n                += penaltyFactor * mat @ ag.der_Tan_by_xv(psi, vec)\n\n            mat = np.eye(3)\n            vec = ag.skew(rot_axisB).T @ -cab.T @ node_cga.T @ FoR_cga @ ag.skew(rot_axisA2) @ FoR_wa\n\n            LM_K[node_FoR_dof + 3:node_FoR_dof + 6, node_dof + 3:node_dof + 6] \\\n                += penaltyFactor * mat @ ag.der_Ccrv_by_v(psi, vec)\n\n            mat = -cab @ ag.skew(rot_axisB).T\n            vec = node_cga.T @ FoR_cga @ ag.skew(rot_axisA2) @ FoR_wa\n\n            LM_K[node_FoR_dof + 3:node_FoR_dof + 6, node_dof + 3:node_dof + 6] \\\n                += penaltyFactor * mat @ ag.der_CcrvT_by_v(psi, vec)\n\n            # term 5-psi - \\frac{\\partial}{\\partial psi}(ba q_2 + b^2 q_5 + bc q_7)\n            # db^Tdpsiaq_2 + b^Tdadpsiq_2 + db^Tdpsibq_5 + b^Tdbdpsiq_5 + db^Tdpsicq_7 + b^Tdcdpsiq_7\n\n            mat = np.eye(3)\n            vec = ag.skew(rot_axisB).T @ ag.skew(rot_axisB) @ cab.T @ node_wa\n\n            LM_K[node_dof + 3:node_dof + 6, node_dof + 3:node_dof + 6] \\\n                += penaltyFactor * mat @ ag.der_TanT_by_xv(psi, vec)\n\n            mat = ag.crv2tan(psi).T @ ag.skew(rot_axisB).T @ ag.skew(rot_axisB)\n            vec = node_wa\n\n            LM_K[node_dof + 3:node_dof + 6, node_dof + 3:node_dof + 6] \\\n                += penaltyFactor * mat @ ag.der_CcrvT_by_v(psi, vec)\n\n            mat = np.eye(3)\n            vec = ag.skew(rot_axisB).T @ ag.skew(rot_axisB) @ ag.crv2tan(psi) @ psi_dot\n\n            LM_K[node_dof + 3:node_dof + 6, node_dof + 3:node_dof + 6] \\\n                += penaltyFactor * mat @ ag.der_TanT_by_xv(psi, vec)\n\n            mat = ag.crv2tan(psi).T @ ag.skew(rot_axisB).T @ ag.skew(rot_axisB)\n            vec = psi_dot\n\n            LM_K[node_dof + 3:node_dof + 6, node_dof + 3:node_dof + 6] \\\n                += penaltyFactor * mat @ ag.der_Tan_by_xv(psi, vec)\n\n            mat = np.eye(3)\n            vec = ag.skew(rot_axisB).T @ -cab.T @ node_cga.T @ FoR_cga @ ag.skew(rot_axisA2) @ FoR_wa\n\n            LM_K[node_dof + 3:node_dof + 6, node_dof + 3:node_dof + 6] \\\n                += penaltyFactor * mat @ ag.der_TanT_by_xv(psi, vec)\n\n            mat = -ag.crv2tan(psi).T @ ag.skew(rot_axisB).T\n            vec = node_cga.T @ FoR_cga @ ag.skew(rot_axisA2) @ FoR_wa\n\n            LM_K[node_dof + 3:node_dof + 6, node_dof + 3:node_dof + 6] \\\n                += penaltyFactor * mat @ ag.der_CcrvT_by_v(psi, vec)\n\n            # term 7-psi - \\frac{\\partial}{\\partial psi}(ca q_2 + cb q_5 + c^2 q_7)\n            # dc^Tdpsiaq_2 + c^Tdadpsiq_2 + dc^Tdpsibq_5 + c^Tdbdpsiq_5 + dc^Tdpsicq_7 + c^Tdcdpsiq_7\n\n            mat = -ag.skew(rot_axisA2).T @ FoR_cga.T @ node_cga\n            vec = ag.skew(rot_axisB) @ cab.T @ node_wa\n\n            LM_K[FoR_dof + 3:FoR_dof + 6, node_dof + 3:node_dof + 6] \\\n                += penaltyFactor * mat @ ag.der_Ccrv_by_v(psi, vec)\n\n            mat = -ag.skew(rot_axisA2).T @ FoR_cga.T @ node_cga @ cab @ ag.skew(rot_axisB)\n            vec = node_wa\n\n            LM_K[FoR_dof + 3:FoR_dof + 6, node_dof + 3:node_dof + 6] \\\n                += penaltyFactor * mat @ ag.der_CcrvT_by_v(psi, vec)\n\n            mat = -ag.skew(rot_axisA2).T @ FoR_cga.T @ node_cga\n            vec = ag.skew(rot_axisB) @ ag.crv2tan(psi) @ psi_dot\n\n            LM_K[FoR_dof + 3:FoR_dof + 6, node_dof + 3:node_dof + 6] \\\n                += penaltyFactor * mat @ ag.der_Ccrv_by_v(psi, vec)\n\n            mat = -ag.skew(rot_axisA2).T @ FoR_cga.T @ node_cga @ cab @ ag.skew(rot_axisB)\n            vec = psi_dot\n\n            LM_K[FoR_dof + 3:FoR_dof + 6, node_dof + 3:node_dof + 6] \\\n                += penaltyFactor * mat @ ag.der_Tan_by_xv(psi, vec)\n\n            mat = -ag.skew(rot_axisA2).T @ FoR_cga.T @ node_cga\n            vec = -cab.T @ node_cga.T @ FoR_cga @ ag.skew(rot_axisA2) @ FoR_wa\n\n            LM_K[FoR_dof + 3:FoR_dof + 6, node_dof + 3:node_dof + 6] \\\n                += penaltyFactor * mat @ ag.der_Ccrv_by_v(psi, vec)\n\n            mat = ag.skew(rot_axisA2).T @ FoR_cga.T @ node_cga @ cab\n            vec = node_cga.T @ FoR_cga @ ag.skew(rot_axisA2) @ FoR_wa\n\n            LM_K[FoR_dof + 3:FoR_dof + 6, node_dof + 3:node_dof + 6] \\\n                += penaltyFactor * mat @ ag.der_CcrvT_by_v(psi, vec)\n\n            #  a^T   cab, ag.skew(rot_axisB).T\n            #  a     ag.skew(rot_axisB), cab.T\n            #  b^T   ag.crv2tan(psi).T, ag.skew(rot_axisB).T\n            #  b     ag.skew(rot_axisB), ag.crv2tan(psi)\n            #  c^T   -ag.skew(rot_axisA2).T, FoR_cga.T, node_cga, cab\n            #  c     -cab.T, node_cga.T, FoR_cga, ag.skew(rot_axisA2)\n\n        else:\n            q = np.zeros((sys_size,))\n            q[FoR_dof + 3:FoR_dof + 6] = MB_tstep[FoR_body].for_vel[3:6]\n            q[node_dof + 3:node_dof + 6] = psi_dot\n\n            LM_Q[:sys_size] += penaltyFactor * Bnh.T @ Bnh @ q\n            LM_C[:sys_size, :sys_size] += penaltyFactor * Bnh.T @ Bnh\n\n            # term 5-x1 - \\frac{\\partial}{\\partial x1}(b^2 q_5 + bc q_7)\n            # b^Tdcdx1q_7\n\n            mat = ag.crv2tan(psi).T @ ag.skew(rot_axisB).T @ -cab.T\n            vec = FoR_cga @ ag.skew(rot_axisA2) @ FoR_wa\n\n            LM_C[node_dof + 3:node_dof + 6, node_FoR_dof + 6:node_FoR_dof + 10] \\\n                += penaltyFactor * mat @ ag.der_CquatT_by_v(MB_tstep[node_body].quat, vec)\n\n            # term 5-x2 - \\frac{\\partial}{\\partial x2}(b^2 q_5 + bc q_7)\n            # b^Tdcdx2q_7\n\n            mat = ag.crv2tan(psi).T @ ag.skew(rot_axisB).T @ -cab.T @ node_cga.T\n            vec = ag.skew(rot_axisA2) @ FoR_wa\n\n            LM_C[node_dof + 3:node_dof + 6, FoR_dof + 6:FoR_dof + 10] \\\n                += penaltyFactor * mat @ ag.der_Cquat_by_v(MB_tstep[FoR_body].quat, vec)\n\n            # term 7-x1 - \\frac{\\partial}{\\partial x1}(cb q_5 + c^2 q_7)\n            # dc^Tdx1aq_2 -> 0!!! + dc^Tdx1bq_5 + dc^Tdx1cq_7 + c^Tdcdx1q_7\n\n            mat = -ag.skew(rot_axisA2).T @ FoR_cga.T\n            vec = cab @ ag.skew(rot_axisB) @ ag.crv2tan(psi) @ psi_dot\n\n            LM_C[FoR_dof + 3:FoR_dof + 6, node_FoR_dof + 6:node_FoR_dof + 10] \\\n                += penaltyFactor * mat @ ag.der_Cquat_by_v(MB_tstep[node_body].quat, vec)\n\n            mat = -ag.skew(rot_axisA2).T @ FoR_cga.T\n            vec = cab @ -cab.T @ node_cga.T @ FoR_cga @ ag.skew(rot_axisA2) @ FoR_wa\n\n            LM_C[FoR_dof + 3:FoR_dof + 6, node_FoR_dof + 6:node_FoR_dof + 10] \\\n                += penaltyFactor * mat @ ag.der_Cquat_by_v(MB_tstep[node_body].quat, vec)\n\n            mat = -ag.skew(rot_axisA2).T @ FoR_cga.T @ node_cga @ cab @ -cab.T\n            vec = FoR_cga @ ag.skew(rot_axisA2) @ FoR_wa\n\n            LM_C[FoR_dof + 3:FoR_dof + 6, node_FoR_dof + 6:node_FoR_dof + 10] \\\n                += penaltyFactor * mat @ ag.der_CquatT_by_v(MB_tstep[node_body].quat, vec)\n\n            # term 7-x2 - \\frac{\\partial}{\\partial x2}(cb q_5 + c^2 q_7)\n            # dc^Tdx2aq_2 -> 0!!! + dc^Tdx2bq_5 + dc^Tdx2cq_7 + c^Tdcdx2q_7\n\n            mat = -ag.skew(rot_axisA2).T\n            vec = node_cga @ cab @ ag.skew(rot_axisB) @ ag.crv2tan(psi) @ psi_dot\n\n            LM_C[FoR_dof + 3:FoR_dof + 6, FoR_dof + 6:FoR_dof + 10] \\\n                += penaltyFactor * mat @ ag.der_CquatT_by_v(MB_tstep[FoR_body].quat, vec)\n\n            mat = -ag.skew(rot_axisA2).T\n            vec = node_cga @ cab @ -cab.T @ node_cga.T @ FoR_cga @ ag.skew(rot_axisA2) @ FoR_wa\n\n            LM_C[FoR_dof + 3:FoR_dof + 6, FoR_dof + 6:FoR_dof + 10] \\\n                += penaltyFactor * mat @ ag.der_CquatT_by_v(MB_tstep[FoR_body].quat, vec)\n\n            mat = -ag.skew(rot_axisA2).T @ FoR_cga.T @ node_cga @ cab @ -cab.T @ node_cga.T\n            vec = ag.skew(rot_axisA2) @ FoR_wa\n\n            LM_C[FoR_dof + 3:FoR_dof + 6, FoR_dof + 6:FoR_dof + 10] \\\n                += penaltyFactor * mat @ ag.der_Cquat_by_v(MB_tstep[FoR_body].quat, vec)\n\n            # other LM_K derivatives for a/b/c dependencies in C(psi) and T(psi)\n\n            mat = np.eye(3)\n            vec = ag.skew(rot_axisB).T @ ag.skew(rot_axisB) @ ag.crv2tan(psi) @ psi_dot\n\n            LM_K[node_dof + 3:node_dof + 6, node_dof + 3:node_dof + 6] \\\n                += penaltyFactor * mat @ ag.der_TanT_by_xv(psi, vec)\n\n            mat = ag.crv2tan(psi).T @ ag.skew(rot_axisB).T @ ag.skew(rot_axisB)\n            vec = psi_dot\n\n            LM_K[node_dof + 3:node_dof + 6, node_dof + 3:node_dof + 6] \\\n                += penaltyFactor * mat @ ag.der_Tan_by_xv(psi, vec)\n\n            mat = np.eye(3)\n            vec = ag.skew(rot_axisB).T @ -cab.T @ node_cga.T @ FoR_cga @ ag.skew(rot_axisA2) @ FoR_wa\n\n            LM_K[node_dof + 3:node_dof + 6, node_dof + 3:node_dof + 6] \\\n                += penaltyFactor * mat @ ag.der_TanT_by_xv(psi, vec)\n\n            mat = -ag.crv2tan(psi).T @ ag.skew(rot_axisB).T\n            vec = node_cga.T @ FoR_cga @ ag.skew(rot_axisA2) @ FoR_wa\n\n            LM_K[node_dof + 3:node_dof + 6, node_dof + 3:node_dof + 6] \\\n                += penaltyFactor * mat @ ag.der_CcrvT_by_v(psi, vec)\n\n            # term 7-psi - \\frac{\\partial}{\\partial psi}(cb q_5 + c^2 q_7)\n            # dc^Tdpsiaq_2 -> 0!!! + c^Tdadpsiq_2 -> 0!!! + dc^Tdpsibq_5 + c^Tdbdpsiq_5 + dc^Tdpsicq_7 + c^Tdcdpsiq_7\n\n            mat = -ag.skew(rot_axisA2).T @ FoR_cga.T @ node_cga\n            vec = ag.skew(rot_axisB) @ ag.crv2tan(psi) @ psi_dot\n\n            LM_K[FoR_dof + 3:FoR_dof + 6, node_dof + 3:node_dof + 6] \\\n                += penaltyFactor * mat @ ag.der_Ccrv_by_v(psi, vec)\n\n            mat = -ag.skew(rot_axisA2).T @ FoR_cga.T @ node_cga @ cab @ ag.skew(rot_axisB)\n            vec = psi_dot\n\n            LM_K[FoR_dof + 3:FoR_dof + 6, node_dof + 3:node_dof + 6] \\\n                += penaltyFactor * mat @ ag.der_Tan_by_xv(psi, vec)\n\n            mat = -ag.skew(rot_axisA2).T @ FoR_cga.T @ node_cga\n            vec = -cab.T @ node_cga.T @ FoR_cga @ ag.skew(rot_axisA2) @ FoR_wa\n\n            LM_K[FoR_dof + 3:FoR_dof + 6, node_dof + 3:node_dof + 6] \\\n                += penaltyFactor * mat @ ag.der_Ccrv_by_v(psi, vec)\n\n            mat = ag.skew(rot_axisA2).T @ FoR_cga.T @ node_cga @ cab\n            vec = node_cga.T @ FoR_cga @ ag.skew(rot_axisA2) @ FoR_wa\n\n            LM_K[FoR_dof + 3:FoR_dof + 6, node_dof + 3:node_dof + 6] \\\n                += penaltyFactor * mat @ ag.der_CcrvT_by_v(psi, vec)\n\n            #  a^T   cab, ag.skew(rot_axisB).T\n            #  a     ag.skew(rot_axisB), cab.T\n            #  b^T   ag.crv2tan(psi).T, ag.skew(rot_axisB).T\n            #  b     ag.skew(rot_axisB), ag.crv2tan(psi)\n            #  c^T   -ag.skew(rot_axisA2).T, FoR_cga.T, node_cga, cab\n            #  c     -cab.T, node_cga.T, FoR_cga, ag.skew(rot_axisA2)\n\n    ieq += 2\n    return ieq\n\n\ndef def_rot_axis_FoR_wrt_node_xyz(MB_tstep, MB_beam, FoR_body, node_body, node_number, node_FoR_dof, node_dof, FoR_dof,\n                                  sys_size, Lambda_dot, rot_axisB, scalingFactor, penaltyFactor, ieq, LM_K, LM_C, LM_Q,\n                                  zero_comp):\n    \"\"\"\n    This function generates the stiffness and damping matrices and the independent vector associated to a joint that\n    forces the rotation axis of a FoR to be parallel to a certain direction. This direction is defined in the\n    B FoR of a node and parallel to x, y or z\n\n    See ``LagrangeConstraints`` for the description of variables\n\n    Args:\n        rot_axisB (np.ndarray): Rotation axis with respect to the node B FoR\n        indep (np.ndarray): Number of the equations that are used as independent\n        node_number (int): number of the \"node\" within its own body\n        node_body (int): body number of the \"node\"\n        node_FoR_dof (int): position of the first degree of freedom of the FoR to which the \"node\" belongs\n        node_dof (int): position of the first degree of freedom associated to the \"node\"\n        FoR_body (int): body number of the \"FoR\"\n        FoR_dof (int): position of the first degree of freedom associated to the \"FoR\"\n    \"\"\"\n\n    ielem, inode_in_elem = MB_beam[node_body].node_master_elem[node_number]\n\n    num_LM_eq_specific = 2\n    Bnh = np.zeros((num_LM_eq_specific, sys_size), dtype=ct.c_double, order='F')\n\n    # Simplify notation\n    cab = ag.crv2rotation(MB_tstep[node_body].psi[ielem, inode_in_elem, :])\n    node_cga = MB_tstep[node_body].cga()\n    FoR_cga = MB_tstep[FoR_body].cga()\n    FoR_wa = MB_tstep[FoR_body].for_vel[3:6]\n    psi = MB_tstep[node_body].psi[ielem, inode_in_elem, :]\n    psi_dot = MB_tstep[node_body].psi_dot[ielem, inode_in_elem, :]\n\n    # Components to be zero\n    Z = np.zeros((2, 3))\n    Z[:, zero_comp] = np.eye(2)\n\n    Bnh[:, FoR_dof + 3:FoR_dof + 6] += Z @ cab.T @ node_cga.T @ FoR_cga\n    Bnh[:, node_dof + 3:node_dof + 6] -= Z @ ag.crv2tan(psi)\n    Bnh[:, node_FoR_dof + 3:node_FoR_dof + 6] -= Z @ cab.T\n\n    # Constrain angular velocities\n    LM_Q[:sys_size] += scalingFactor * Bnh.T @ Lambda_dot[ieq:ieq + num_LM_eq_specific]\n    LM_Q[sys_size + ieq:sys_size + ieq + num_LM_eq_specific] \\\n        += scalingFactor * Z @ cab.T @ node_cga.T @ FoR_cga @ FoR_wa\n    LM_Q[sys_size + ieq:sys_size + ieq + num_LM_eq_specific] \\\n        -= scalingFactor * Z @ ag.crv2tan(psi) @ psi_dot\n    LM_Q[sys_size + ieq:sys_size + ieq + num_LM_eq_specific] \\\n        -= scalingFactor * Z @ cab.T @ MB_tstep[node_body].for_vel[3:6]\n\n    LM_C[sys_size + ieq:sys_size + ieq + num_LM_eq_specific, :sys_size] += scalingFactor * Bnh\n    LM_C[:sys_size, sys_size + ieq:sys_size + ieq + num_LM_eq_specific] += scalingFactor * Bnh.T\n\n    vec = node_cga @ cab @ Z.T @ Lambda_dot[ieq:ieq + num_LM_eq_specific]\n    LM_C[FoR_dof + 3:FoR_dof + 6, FoR_dof + 6:FoR_dof + 10] \\\n        += scalingFactor * ag.der_CquatT_by_v(MB_tstep[FoR_body].quat, vec)\n\n    if MB_beam[node_body].FoR_movement == 'free':\n        vec = cab @ Z.T @ Lambda_dot[ieq:ieq + num_LM_eq_specific]\n        LM_C[FoR_dof + 3:FoR_dof + 6, node_FoR_dof + 6:node_FoR_dof + 10] \\\n            += scalingFactor * FoR_cga.T @ ag.der_Cquat_by_v(MB_tstep[node_body].quat, vec)\n\n    LM_K[FoR_dof + 3:FoR_dof + 6, node_dof + 3:node_dof + 6] \\\n        += scalingFactor * FoR_cga.T @ node_cga @ ag.der_Ccrv_by_v(MB_tstep[node_body].psi[ielem, inode_in_elem, :],\n                                                                   Z.T @ Lambda_dot[ieq:ieq + num_LM_eq_specific])\n\n    LM_K[node_dof + 3:node_dof + 6, node_dof + 3:node_dof + 6] \\\n        -= scalingFactor * ag.der_TanT_by_xv(psi, Z.T @ Lambda_dot[ieq:ieq + num_LM_eq_specific])\n    LM_K[node_FoR_dof + 3:node_FoR_dof + 6, node_dof + 3:node_dof + 6] \\\n        -= scalingFactor * ag.der_Ccrv_by_v(psi, Z.T @ Lambda_dot[ieq:ieq + num_LM_eq_specific])\n\n    if penaltyFactor:\n        q = np.zeros((sys_size,))\n        q[FoR_dof + 3:FoR_dof + 6] = FoR_wa\n\n        LM_Q[:sys_size] += penaltyFactor * Bnh.T @ Bnh @ q\n        LM_C[:sys_size, :sys_size] += penaltyFactor * Bnh.T @ Bnh\n\n        ZTZ = Z.T @ Z\n\n        # Derivatives with the quaternion of the FoR\n        vec = node_cga @ cab @ ZTZ @ cab.T @ node_cga.T @ FoR_cga @ FoR_wa\n        LM_C[FoR_dof + 3:FoR_dof + 6, FoR_dof + 6:FoR_dof + 10] \\\n            += penaltyFactor * ag.der_CquatT_by_v(MB_tstep[FoR_body].quat, vec)\n\n        mat = FoR_cga.T @ node_cga @ cab @ ZTZ @ cab.T @ node_cga.T\n        LM_C[FoR_dof + 3:FoR_dof + 6, FoR_dof + 6:FoR_dof + 10] \\\n            += penaltyFactor * mat @ ag.der_Cquat_by_v(MB_tstep[FoR_body].quat, FoR_wa)\n\n        if MB_beam[node_body].FoR_movement == 'free':\n            # Derivatives with the quaternion of the FoR of the node\n            vec = cab @ ZTZ @ cab.T @ node_cga.T @ FoR_cga @ FoR_wa\n            LM_C[FoR_dof + 3:FoR_dof + 6, node_FoR_dof + 6:node_FoR_dof + 10] \\\n                += penaltyFactor * FoR_cga.T @ ag.der_Cquat_by_v(MB_tstep[node_body].quat, vec)\n\n            mat = FoR_cga.T @ node_cga @ cab @ ZTZ @ cab.T\n            vec = FoR_cga @ FoR_wa\n            LM_C[FoR_dof + 3:FoR_dof + 6, node_FoR_dof + 6:node_FoR_dof + 10] \\\n                += penaltyFactor * mat @ ag.der_CquatT_by_v(MB_tstep[node_body].quat, vec)\n\n        # Derivatives with the CRV\n        mat = FoR_cga.T @ node_cga\n        vec = ZTZ @ cab.T @ node_cga.T @ FoR_cga @ FoR_wa\n        LM_K[FoR_dof + 3:FoR_dof + 6, node_dof + 3:node_dof + 6] \\\n            += penaltyFactor * mat @ ag.der_Ccrv_by_v(MB_tstep[node_body].psi[ielem, inode_in_elem, :], vec)\n\n        mat = FoR_cga.T @ node_cga @ cab @ ZTZ\n        vec = node_cga.T @ FoR_cga @ FoR_wa\n        LM_K[FoR_dof + 3:FoR_dof + 6, node_dof + 3:node_dof + 6] \\\n            += penaltyFactor * mat @ ag.der_CcrvT_by_v(MB_tstep[node_body].psi[ielem, inode_in_elem, :], vec)\n\n    ieq += 2\n    return ieq\n\n\ndef def_rot_vel_mod_FoR_wrt_node(MB_tstep, MB_beam, FoR_body, node_body, node_number, node_FoR_dof, node_dof, FoR_dof,\n                                 sys_size, Lambda_dot, nonzero_comp, rot_vel, scalingFactor, penaltyFactor, ieq, LM_K,\n                                 LM_C, LM_Q):\n    \"\"\"\n    This function generates the stiffness and damping matrices and the independent vector associated to a joint that\n    forces the rotation velocity of a FoR with respect to a node\n\n    See ``LagrangeConstraints`` for the description of variables\n\n    Args:\n        nonzero_comp (int): Component of the rotation axis with respect to the node B FoR which is non-zero\n        rot_vel (float): Rotation velocity\n        node_number (int): number of the \"node\" within its own body\n        node_body (int): body number of the \"node\"\n        node_FoR_dof (int): position of the first degree of freedom of the FoR to which the \"node\" belongs\n        node_dof (int): position of the first degree of freedom associated to the \"node\"\n        FoR_body (int): body number of the \"FoR\"\n        FoR_dof (int): position of the first degree of freedom associated to the \"FoR\"\n    \"\"\"\n\n    ielem, inode_in_elem = MB_beam[node_body].node_master_elem[node_number]\n    num_LM_eq_specific = 1\n    Bnh = np.zeros((num_LM_eq_specific, sys_size), dtype=ct.c_double, order='F')\n\n    # Simplify notation\n    cab = ag.crv2rotation(MB_tstep[node_body].psi[ielem, inode_in_elem, :])\n    node_cga = MB_tstep[node_body].cga()\n    FoR_cga = MB_tstep[FoR_body].cga()\n    FoR_wa = MB_tstep[FoR_body].for_vel[3:6]\n\n    # Components to be zero\n    Znon = np.zeros((1, 3))\n    Znon[:, nonzero_comp] = 1\n\n    Bnh[:, FoR_dof + 3:FoR_dof + 6] += Znon @ cab.T @ node_cga.T @ FoR_cga\n\n    # Constrain angular velocities\n    LM_Q[:sys_size] += scalingFactor * Bnh.T @ Lambda_dot[ieq:ieq + num_LM_eq_specific]\n    LM_Q[sys_size + ieq:sys_size + ieq + num_LM_eq_specific] \\\n        += scalingFactor * Znon @ cab.T @ node_cga.T @ FoR_cga @ FoR_wa\n    LM_Q[sys_size + ieq:sys_size + ieq + num_LM_eq_specific] -= scalingFactor * rot_vel\n\n    LM_C[sys_size + ieq:sys_size + ieq + num_LM_eq_specific, :sys_size] += scalingFactor * Bnh\n    LM_C[:sys_size, sys_size + ieq:sys_size + ieq + num_LM_eq_specific] += scalingFactor * Bnh.T\n\n    vec = node_cga @ cab @ Znon.T @ Lambda_dot[ieq:ieq + num_LM_eq_specific]\n    LM_C[FoR_dof + 3:FoR_dof + 6, FoR_dof + 6:FoR_dof + 10] \\\n        += scalingFactor * ag.der_CquatT_by_v(MB_tstep[FoR_body].quat, vec)\n\n    if MB_beam[node_body].FoR_movement == 'free':\n        vec = cab @ Znon.T @ Lambda_dot[ieq:ieq + num_LM_eq_specific]\n        LM_C[FoR_dof + 3:FoR_dof + 6, node_FoR_dof + 6:node_FoR_dof + 10] \\\n            += scalingFactor * FoR_cga.T @ ag.der_Cquat_by_v(MB_tstep[node_body].quat, vec)\n\n    LM_K[FoR_dof + 3:FoR_dof + 6, node_dof + 3:node_dof + 6] \\\n        += scalingFactor * FoR_cga.T @ node_cga @ ag.der_Ccrv_by_v(MB_tstep[node_body].psi[ielem, inode_in_elem, :],\n                                                                   Znon.T @ Lambda_dot[ieq:ieq + num_LM_eq_specific])\n\n    ieq += 1\n    return ieq\n\n\ndef def_rot_vect_FoR_wrt_node(MB_tstep, MB_beam, FoR_body, node_body, node_number, node_FoR_dof, node_dof, FoR_dof,\n                              sys_size, Lambda_dot, rot_vect, scalingFactor, penaltyFactor, ieq, LM_K, LM_C, LM_Q):\n    \"\"\"\n        This function fixes the rotation velocity VECTOR of a FOR equal to a velocity vector defined in the B FoR of a node\n        This function is a new implementation that combines and simplifies the use of 'def_rot_vel_mod_FoR_wrt_node' and 'def_rot_axis_FoR_wrt_node' together\n    \"\"\"\n\n    num_LM_eq_specific = 3\n    Bnh = np.zeros((num_LM_eq_specific, sys_size), dtype=ct.c_double, order='F')\n\n    # Simplify notation\n    ielem, inode_in_elem = MB_beam[node_body].node_master_elem[node_number]\n    node_cga = MB_tstep[node_body].cga()\n    cab = ag.crv2rotation(MB_tstep[node_body].psi[ielem, inode_in_elem, :])\n    FoR_cga = MB_tstep[FoR_body].cga()\n    FoR_wa = MB_tstep[FoR_body].for_vel[3:6]\n\n    Bnh[:, FoR_dof + 3:FoR_dof + 6] = cab.T @ node_cga.T @ FoR_cga\n\n    # Constrain angular velocities\n    LM_Q[:sys_size] += scalingFactor * Bnh.T @ Lambda_dot[ieq:ieq + num_LM_eq_specific]\n    LM_Q[sys_size + ieq:sys_size + ieq + num_LM_eq_specific] \\\n        += scalingFactor * (Bnh[:, FoR_dof + 3:FoR_dof + 6] @ FoR_wa - rot_vect)\n\n    LM_C[sys_size + ieq:sys_size + ieq + num_LM_eq_specific, :sys_size] += scalingFactor * Bnh\n    LM_C[:sys_size, sys_size + ieq:sys_size + ieq + num_LM_eq_specific] += scalingFactor * Bnh.T\n\n    if MB_beam[node_body].FoR_movement == 'free':\n        LM_C[FoR_dof + 3:FoR_dof + 6, node_FoR_dof + 6:node_FoR_dof + 10] \\\n            += scalingFactor * FoR_cga.T @ ag.der_Cquat_by_v(MB_tstep[node_body].quat,\n                                                             cab @ Lambda_dot[ieq:ieq + num_LM_eq_specific])\n\n    LM_C[FoR_dof + 3:FoR_dof + 6, FoR_dof + 6:FoR_dof + 10] \\\n        += scalingFactor * ag.der_CquatT_by_v(MB_tstep[FoR_body].quat,\n                                              node_cga @ cab @ Lambda_dot[ieq:ieq + num_LM_eq_specific])\n\n    LM_K[FoR_dof + 3:FoR_dof + 6, node_dof + 3:node_dof + 6] \\\n        += scalingFactor * FoR_cga.T @ node_cga @ ag.der_Ccrv_by_v(MB_tstep[node_body].psi[ielem, inode_in_elem, :],\n                                                                   Lambda_dot[ieq:ieq + num_LM_eq_specific])\n\n    if penaltyFactor:\n        LM_C[FoR_dof + 3:FoR_dof + 6, FoR_dof + 3:FoR_dof + 6] += penaltyFactor * np.eye(3)\n\n        q = np.zeros(sys_size)\n        q[FoR_dof + 3:FoR_dof + 6] = FoR_wa\n        LM_Q[:sys_size] += penaltyFactor * Bnh.T @ Bnh @ q\n\n    ieq += 3\n    return ieq\n\n\n################################################################################\n# Lagrange constraints\n################################################################################\n@lagrangeconstraint\nclass hinge_node_FoR(BaseLagrangeConstraint):\n    __doc__ = \"\"\"\n    hinge_node_FoR\n\n    This constraint forces a hinge behaviour between a node and a FoR\n\n    See ``LagrangeConstraints`` for the description of variables\n\n    Attributes:\n        node_number (int): number of the \"node\" within its own body\n        node_body (int): body number of the \"node\"\n        FoR_body (int): body number of the \"FoR\"\n        rot_axisB (np.ndarray): Rotation axis with respect to the node B FoR\n        rot_axisA2 (np.ndarray): Rotation axis with respect to the node A2 FoR\n    \"\"\"\n    _lc_id = 'hinge_node_FoR'\n\n    def __init__(self):\n        self.required_parameters = ['node_in_body', 'body', 'body_FoR', 'rot_axisB']\n        self._n_eq = 5\n\n    def get_n_eq(self):\n        return self._n_eq\n\n    def initialise(self, MBdict_entry, ieq, print_info=True):\n        self.node_number = MBdict_entry['node_in_body']\n        self.node_body = MBdict_entry['body']\n        self.FoR_body = MBdict_entry['body_FoR']\n        self.rot_axisB = MBdict_entry['rot_axisB']\n        self.rot_axisA2 = set_value_or_default(MBdict_entry, \"rot_axisA2\", self.rot_axisB)\n        self._ieq = ieq\n        self.scalingFactor = set_value_or_default(MBdict_entry, \"scalingFactor\", 1.)\n        self.penaltyFactor = set_value_or_default(MBdict_entry, \"penaltyFactor\", 0.)\n        self.indep = []\n        if (self.rot_axisB[[1, 2]] == 0).all():\n            self.rot_dir = 'x'\n            self.zero_comp = np.array([1, 2], dtype=int)\n        elif (self.rot_axisB[[0, 2]] == 0).all():\n            self.rot_dir = 'y'\n            self.zero_comp = np.array([0, 2], dtype=int)\n        elif (self.rot_axisB[[0, 1]] == 0).all():\n            self.rot_dir = 'z'\n            self.zero_comp = np.array([0, 1], dtype=int)\n        else:\n            # raise NotImplementedError(\"Hinges should be parallel to the xB, yB or zB of the reference node\")\n            self.rot_dir = 'general'\n            self.indep = []\n\n        return self._ieq + self._n_eq\n\n    def staticmat(self, LM_C, LM_K, LM_Q, MB_beam, MB_tstep, ts, num_LM_eq,\n                  sys_size, dt, Lambda, Lambda_dot):\n        return\n\n    def dynamicmat(self, LM_C, LM_K, LM_Q, MB_beam, MB_tstep, ts, num_LM_eq,\n                   sys_size, dt, Lambda, Lambda_dot):\n\n        # Define the position of the first degree of freedom associated to the node\n        node_dof = define_node_dof(MB_beam, self.node_body, self.node_number)\n        node_FoR_dof = define_FoR_dof(MB_beam, self.node_body)\n        FoR_dof = define_FoR_dof(MB_beam, self.FoR_body)\n        ieq = self._ieq\n\n        # Define the equations\n        ieq = equal_lin_vel_node_FoR(MB_tstep, MB_beam, self.FoR_body, self.node_body, self.node_number, node_FoR_dof,\n                                     node_dof, FoR_dof, sys_size, Lambda_dot, self.scalingFactor, self.penaltyFactor,\n                                     ieq, LM_K, LM_C, LM_Q)\n        ieq = def_rot_axis_FoR_wrt_node_general(MB_tstep, MB_beam, self.FoR_body, self.node_body, self.node_number,\n                                                node_FoR_dof, node_dof, FoR_dof, sys_size, Lambda_dot, self.rot_axisB,\n                                                self.rot_axisA2, self.scalingFactor, self.penaltyFactor, ieq, LM_K,\n                                                LM_C, LM_Q, self.indep)\n\n        return\n\n    def staticpost(self, lc_list, MB_beam, MB_tstep):\n        return\n\n    def dynamicpost(self, lc_list, MB_beam, MB_tstep):\n        MB_tstep[self.FoR_body].for_pos[:3] \\\n            = (MB_tstep[self.node_body].cga() @ MB_tstep[self.node_body].pos[self.node_number, :]\n               + MB_tstep[self.node_body].for_pos[:3])\n        return\n\n\n@lagrangeconstraint\nclass hinge_node_FoR_constant_vel(BaseLagrangeConstraint):\n    __doc__ = \"\"\"\n    hinge_node_FoR_constant_vel\n\n    This constraint forces a hinge behaviour between a node and a FoR and\n    a constant rotation velocity at the join\n\n    See ``LagrangeConstraints`` for the description of variables\n\n    Attributes:\n        node_number (int): number of the \"node\" within its own body\n        node_body (int): body number of the \"node\"\n        FoR_body (int): body number of the \"FoR\"\n        rot_vect (np.ndarray): Rotation velocity vector in the node B FoR\n        rel_posB (np.ndarray): Relative position between the node and the frame of reference in the node B FoR\n    \"\"\"\n    _lc_id = 'hinge_node_FoR_constant_vel'\n\n    def __init__(self):\n        self.required_parameters = ['node_in_body', 'body', 'body_FoR', 'rot_vect', 'rel_posB']\n        self._n_eq = 6\n\n    def get_n_eq(self):\n        return self._n_eq\n\n    def initialise(self, MBdict_entry, ieq, print_info=True):\n\n        self.node_number = MBdict_entry['node_in_body']\n        self.node_body = MBdict_entry['body']\n        self.FoR_body = MBdict_entry['body_FoR']\n        self.rel_posB = MBdict_entry['rel_posB']\n        self._ieq = ieq\n        self.indep = []\n        self.scalingFactor = set_value_or_default(MBdict_entry, \"scalingFactor\", 1.)\n        self.penaltyFactor = set_value_or_default(MBdict_entry, \"penaltyFactor\", 0.)\n\n        self.rot_axisB = ag.unit_vector(MBdict_entry['rot_vect'])\n        if (self.rot_axisB[[1, 2]] == 0).all():\n            self.rot_dir = 'x'\n            self.zero_comp = np.array([1, 2], dtype=int)\n            self.nonzero_comp = 0\n        elif (self.rot_axisB[[0, 2]] == 0).all():\n            self.rot_dir = 'y'\n            self.zero_comp = np.array([0, 2], dtype=int)\n            self.nonzero_comp = 1\n        elif (self.rot_axisB[[0, 1]] == 0).all():\n            self.rot_dir = 'z'\n            self.zero_comp = np.array([0, 1], dtype=int)\n            self.nonzero_comp = 2\n        else:\n            raise NotImplementedError(\"Hinges should be parallel to the xB, yB or zB of the reference node\")\n        self.set_rot_vel(MBdict_entry['rot_vect'][self.nonzero_comp])\n\n        return self._ieq + self._n_eq\n\n    def set_rot_vel(self, rot_vel):\n        self.rot_vel = rot_vel\n\n    def staticmat(self, LM_C, LM_K, LM_Q, MB_beam, MB_tstep, ts, num_LM_eq,\n                  sys_size, dt, Lambda, Lambda_dot):\n        return\n\n    def dynamicmat(self, LM_C, LM_K, LM_Q, MB_beam, MB_tstep, ts, num_LM_eq,\n                   sys_size, dt, Lambda, Lambda_dot):\n\n        # Define the position of the first degree of freedom associated to the node\n        node_dof = define_node_dof(MB_beam, self.node_body, self.node_number)\n        node_FoR_dof = define_FoR_dof(MB_beam, self.node_body)\n        FoR_dof = define_FoR_dof(MB_beam, self.FoR_body)\n        ieq = self._ieq\n\n        # Define the equations\n        ieq = equal_lin_vel_node_FoR(MB_tstep, MB_beam, self.FoR_body, self.node_body, self.node_number, node_FoR_dof,\n                                     node_dof, FoR_dof, sys_size, Lambda_dot, self.scalingFactor, self.penaltyFactor,\n                                     ieq, LM_K, LM_C, LM_Q, rel_posB=self.rel_posB)\n        ieq = def_rot_axis_FoR_wrt_node_xyz(MB_tstep, MB_beam, self.FoR_body, self.node_body, self.node_number,\n                                            node_FoR_dof, node_dof, FoR_dof, sys_size, Lambda_dot, self.rot_axisB,\n                                            self.scalingFactor, self.penaltyFactor, ieq, LM_K, LM_C, LM_Q,\n                                            self.zero_comp)\n        ieq = def_rot_vel_mod_FoR_wrt_node(MB_tstep, MB_beam, self.FoR_body, self.node_body, self.node_number,\n                                           node_FoR_dof, node_dof, FoR_dof, sys_size, Lambda_dot, self.nonzero_comp,\n                                           self.rot_vel, self.scalingFactor, self.penaltyFactor, ieq, LM_K, LM_C, LM_Q)\n        return\n\n    def staticpost(self, lc_list, MB_beam, MB_tstep):\n        return\n\n    def dynamicpost(self, lc_list, MB_beam, MB_tstep):\n\n        ielem, inode_in_elem = MB_beam[self.node_body].node_master_elem[self.node_number]\n        node_cga = MB_tstep[self.node_body].cga()\n        cab = ag.crv2rotation(MB_tstep[self.node_body].psi[ielem, inode_in_elem, :])\n\n        MB_tstep[self.FoR_body].for_pos[:3] = (node_cga @ MB_tstep[self.node_body].pos[self.node_number, :]\n                                               + cab @ self.rel_posB + MB_tstep[self.node_body].for_pos[0:3])\n        return\n\n\n@lagrangeconstraint\nclass hinge_node_FoR_pitch(BaseLagrangeConstraint):\n    __doc__ = \"\"\"\n    hinge_node_FoR_pitch\n\n    This constraint forces a hinge behaviour between a node and a FoR and\n    a rotation velocity at the joint\n\n    See ``LagrangeConstraints`` for the description of variables\n\n    Attributes:\n        node_number (int): number of the \"node\" within its own body\n        node_body (int): body number of the \"node\"\n        FoR_body (int): body number of the \"FoR\"\n        rot_vect (np.ndarray): Rotation velocity vector in the node B FoR\n        rel_posB (np.ndarray): Relative position between the node and the frame of reference in the node B FoR\n    \"\"\"\n    _lc_id = 'hinge_node_FoR_pitch'\n\n    def __init__(self):\n        self.required_parameters = ['node_in_body', 'body', 'body_FoR', 'rotor_vel', 'rel_posB']\n        self._n_eq = 6\n\n    def get_n_eq(self):\n        return self._n_eq\n\n    def initialise(self, MBdict_entry, ieq, print_info=True):\n        self.node_number = MBdict_entry['node_in_body']\n        self.node_body = MBdict_entry['body']\n        self.FoR_body = MBdict_entry['body_FoR']\n        self.rel_posB = MBdict_entry['rel_posB']\n        self._ieq = ieq\n        self.indep = []\n        self.scalingFactor = set_value_or_default(MBdict_entry, \"scalingFactor\", 1.)\n        self.penaltyFactor = set_value_or_default(MBdict_entry, \"penaltyFactor\", 0.)\n\n        self.set_rotor_vel(MBdict_entry['rotor_vel'])\n        pitch_vel = set_value_or_default(MBdict_entry, \"pitch_vel\", 0.)\n        self.set_pitch_vel(pitch_vel)\n\n        return self._ieq + self._n_eq\n\n    def set_rotor_vel(self, rotor_vel):\n        self.rotor_vel = rotor_vel\n\n    def set_pitch_vel(self, pitch_vel):\n        self.pitch_vel = pitch_vel\n\n    def staticmat(self, LM_C, LM_K, LM_Q, MB_beam, MB_tstep, ts, num_LM_eq,\n                  sys_size, dt, Lambda, Lambda_dot):\n        return\n\n    def dynamicmat(self, LM_C, LM_K, LM_Q, MB_beam, MB_tstep, ts, num_LM_eq,\n                   sys_size, dt, Lambda, Lambda_dot):\n        # Define the position of the first degree of freedom associated to the node\n        node_dof = define_node_dof(MB_beam, self.node_body, self.node_number)\n        node_FoR_dof = define_FoR_dof(MB_beam, self.node_body)\n        FoR_dof = define_FoR_dof(MB_beam, self.FoR_body)\n        ieq = self._ieq\n\n        # Compute relative velocity\n        ielem, inode_in_elem = MB_beam[self.node_body].node_master_elem[self.node_number]\n        node_cga = MB_tstep[self.node_body].cga()\n        cab = ag.crv2rotation(MB_tstep[self.node_body].psi[ielem, inode_in_elem, :])\n        FoR_cga = MB_tstep[self.FoR_body].cga()\n\n        # rel_vel in B FoR\n        rel_vel = np.array([0., 0., self.rotor_vel])\n        rel_vel += cab.T @ node_cga.T @ FoR_cga @ np.array([self.pitch_vel, 0., 0.])\n\n        # Define the equations\n        ieq = equal_lin_vel_node_FoR(MB_tstep, MB_beam, self.FoR_body, self.node_body, self.node_number, node_FoR_dof,\n                                     node_dof, FoR_dof, sys_size, Lambda_dot, self.scalingFactor, self.penaltyFactor,\n                                     ieq, LM_K, LM_C, LM_Q, rel_posB=self.rel_posB)\n        ieq = rel_rot_vel_node_FoR(MB_tstep, MB_beam, self.FoR_body, self.node_body, self.node_number, node_FoR_dof,\n                                   node_dof, FoR_dof, sys_size, Lambda_dot, self.scalingFactor, self.penaltyFactor, ieq,\n                                   LM_K, LM_C, LM_Q, rel_vel=rel_vel)\n        return\n\n    def staticpost(self, lc_list, MB_beam, MB_tstep):\n        return\n\n    def dynamicpost(self, lc_list, MB_beam, MB_tstep):\n        ielem, inode_in_elem = MB_beam[self.node_body].node_master_elem[self.node_number]\n        node_cga = MB_tstep[self.node_body].cga()\n        cab = ag.crv2rotation(MB_tstep[self.node_body].psi[ielem, inode_in_elem, :])\n\n        MB_tstep[self.FoR_body].for_pos[:3] = node_cga @ (MB_tstep[self.node_body].pos[self.node_number, :]\n                                                          + cab @ self.rel_posB) + MB_tstep[self.node_body].for_pos[:3]\n\n        return\n\n\n@lagrangeconstraint\nclass spherical_node_FoR(BaseLagrangeConstraint):\n    __doc__ = \"\"\"\n    spherical_node_FoR\n\n    This constraint forces a spherical join between a node and a FoR\n\n    See ``LagrangeConstraints`` for the description of variables\n\n    Attributes:\n        node_number (int): number of the \"node\" within its own body\n        node_body (int): body number of the \"node\"\n        FoR_body (int): body number of the \"FoR\"\n    \"\"\"\n    _lc_id = 'spherical_node_FoR'\n\n    def __init__(self):\n        self.required_parameters = ['node_in_body', 'body', 'body_FoR']\n        self._n_eq = 3\n\n    def get_n_eq(self):\n        return self._n_eq\n\n    def initialise(self, MBdict_entry, ieq, print_info=True):\n        self.node_number = MBdict_entry['node_in_body']\n        self.node_body = MBdict_entry['body']\n        self.FoR_body = MBdict_entry['body_FoR']\n        self._ieq = ieq\n        self.scalingFactor = set_value_or_default(MBdict_entry, \"scalingFactor\", 1.)\n        self.penaltyFactor = set_value_or_default(MBdict_entry, \"penaltyFactor\", 0.)\n\n        return self._ieq + self._n_eq\n\n    def staticmat(self, LM_C, LM_K, LM_Q, MB_beam, MB_tstep, ts, num_LM_eq,\n                  sys_size, dt, Lambda, Lambda_dot):\n        return\n\n    def dynamicmat(self, LM_C, LM_K, LM_Q, MB_beam, MB_tstep, ts, num_LM_eq,\n                   sys_size, dt, Lambda, Lambda_dot):\n        # Define the position of the first degree of freedom associated to the node\n        node_dof = define_node_dof(MB_beam, self.node_body, self.node_number)\n        node_FoR_dof = define_FoR_dof(MB_beam, self.node_body)\n        FoR_dof = define_FoR_dof(MB_beam, self.FoR_body)\n        ieq = self._ieq\n\n        # Define the equations\n        ieq = equal_lin_vel_node_FoR(MB_tstep, MB_beam, self.FoR_body, self.node_body, self.node_number, node_FoR_dof,\n                                     node_dof, FoR_dof, sys_size, Lambda_dot, self.scalingFactor, self.penaltyFactor,\n                                     ieq, LM_K, LM_C, LM_Q)\n\n        return\n\n    def staticpost(self, lc_list, MB_beam, MB_tstep):\n        return\n\n    def dynamicpost(self, lc_list, MB_beam, MB_tstep):\n        MB_tstep[self.FoR_body].for_pos[:3] = (MB_tstep[self.node_body].cga()\n                                               @ MB_tstep[self.node_body].pos[self.node_number, :]\n                                               + MB_tstep[self.node_body].for_pos[:3])\n        return\n\n\n@lagrangeconstraint\nclass free(BaseLagrangeConstraint):\n    _lc_id = 'free'\n    __doc__ = _lc_id\n\n    def __init__(self):\n        self.required_parameters = []\n        self._n_eq = 0\n\n    def get_n_eq(self):\n        return self._n_eq\n\n    def initialise(self, MBdict_entry, ieq, print_info=True):\n        self._ieq = ieq\n        return self._ieq + self._n_eq\n\n    def staticmat(self, LM_C, LM_K, LM_Q, MB_beam, MB_tstep, ts, num_LM_eq,\n                  sys_size, dt, Lambda, Lambda_dot):\n        return\n\n    def dynamicmat(self, LM_C, LM_K, LM_Q, MB_beam, MB_tstep, ts, num_LM_eq,\n                   sys_size, dt, Lambda, Lambda_dot):\n        return\n\n    def staticpost(self, lc_list, MB_beam, MB_tstep):\n        return\n\n    def dynamicpost(self, lc_list, MB_beam, MB_tstep):\n        return\n\n\n@lagrangeconstraint\nclass spherical_FoR(BaseLagrangeConstraint):\n    __doc__ = \"\"\"\n    spherical_FoR\n\n    This constraint forces a spherical join at a FoR\n\n    See ``LagrangeConstraints`` for the description of variables\n\n    Attributes:\n        body_FoR (int): body number of the \"FoR\"\n    \"\"\"\n    _lc_id = 'spherical_FoR'\n\n    def __init__(self):\n        self.required_parameters = ['body_FoR']\n        self._n_eq = 3\n\n    def get_n_eq(self):\n        return self._n_eq\n\n    def initialise(self, MBdict_entry, ieq, print_info=True):\n        self.body_FoR = MBdict_entry['body_FoR']\n        self._ieq = ieq\n        self.scalingFactor = set_value_or_default(MBdict_entry, \"scalingFactor\", 1.)\n        self.penaltyFactor = set_value_or_default(MBdict_entry, \"penaltyFactor\", 0.)\n\n        return self._ieq + self._n_eq\n\n    def staticmat(self, LM_C, LM_K, LM_Q, MB_beam, MB_tstep, ts, num_LM_eq,\n                  sys_size, dt, Lambda, Lambda_dot):\n        return\n\n    def dynamicmat(self, LM_C, LM_K, LM_Q, MB_beam, MB_tstep, ts, num_LM_eq,\n                   sys_size, dt, Lambda, Lambda_dot):\n        num_LM_eq_specific = self._n_eq\n        Bnh = np.zeros((num_LM_eq_specific, sys_size), dtype=ct.c_double, order='F')\n\n        # Define the position of the first degree of freedom associated to the FoR\n        FoR_dof = define_FoR_dof(MB_beam, self.body_FoR)\n        ieq = self._ieq\n\n        Bnh[:3, FoR_dof:FoR_dof + 3] = np.eye(3)\n\n        LM_C[sys_size + ieq:sys_size + ieq + num_LM_eq_specific, :sys_size] += self.scalingFactor * Bnh\n        LM_C[:sys_size, sys_size + ieq:sys_size + ieq + num_LM_eq_specific] += self.scalingFactor * Bnh.T\n\n        LM_Q[:sys_size] += self.scalingFactor * Bnh.T @ Lambda_dot[ieq:ieq + num_LM_eq_specific]\n\n        LM_Q[sys_size + ieq:sys_size + ieq + 3] \\\n            += self.scalingFactor * MB_tstep[self.body_FoR].for_vel[:3].astype(dtype=ct.c_double, copy=True, order='F')\n\n        ieq += 3\n        return\n\n    def staticpost(self, lc_list, MB_beam, MB_tstep):\n        return\n\n    def dynamicpost(self, lc_list, MB_beam, MB_tstep):\n        return\n\n\n@lagrangeconstraint\nclass hinge_FoR(BaseLagrangeConstraint):\n    __doc__ = \"\"\"\n    hinge_FoR\n\n    This constraint forces a hinge at a FoR\n\n    See ``LagrangeConstraints`` for the description of variables\n\n    Attributes:\n        body_FoR (int): body number of the \"FoR\"\n        rot_axis_AFoR (np.ndarray): Rotation axis with respect to the node A FoR\n    \"\"\"\n    _lc_id = 'hinge_FoR'\n\n    def __init__(self):\n        self.required_parameters = ['body_FoR', 'rot_axis_AFoR']\n        self._n_eq = 5\n\n    def get_n_eq(self):\n        return self._n_eq\n\n    def initialise(self, MBdict_entry, ieq, print_info=True):\n\n        self.body_FoR = MBdict_entry['body_FoR']\n        self.rot_axis = MBdict_entry['rot_axis_AFoR']\n        self._ieq = ieq\n        self.scalingFactor = set_value_or_default(MBdict_entry, \"scalingFactor\", 1.)\n        self.penaltyFactor = set_value_or_default(MBdict_entry, \"penaltyFactor\", 0.)\n\n        if (self.rot_axis[[1, 2]] == 0).all():\n            self.rot_dir = 'x'\n            self.zero_comp = np.array([1, 2], dtype=int)\n        elif (self.rot_axis[[0, 2]] == 0).all():\n            self.rot_dir = 'y'\n            self.zero_comp = np.array([0, 2], dtype=int)\n        elif (self.rot_axis[[0, 1]] == 0).all():\n            self.rot_dir = 'z'\n            self.zero_comp = np.array([0, 1], dtype=int)\n        else:\n            self.rot_dir = 'general'\n\n        return self._ieq + self._n_eq\n\n    def staticmat(self, LM_C, LM_K, LM_Q, MB_beam, MB_tstep, ts, num_LM_eq,\n                  sys_size, dt, Lambda, Lambda_dot):\n        return\n\n    def dynamicmat(self, LM_C, LM_K, LM_Q, MB_beam, MB_tstep, ts, num_LM_eq,\n                   sys_size, dt, Lambda, Lambda_dot):\n        num_LM_eq_specific = self._n_eq\n        Bnh = np.zeros((num_LM_eq_specific, sys_size), dtype=ct.c_double, order='F')\n\n        # Define the position of the first degree of freedom associated to the FoR\n        FoR_dof = define_FoR_dof(MB_beam, self.body_FoR)\n        ieq = self._ieq\n\n        Bnh[:3, FoR_dof:FoR_dof + 3] = np.eye(3)\n\n        # TODO: general logic removed since that implies local beam direction coincident with global axis direction\n        skew_rot_axis = ag.skew(self.rot_axis)\n        n0 = np.linalg.norm(skew_rot_axis[0, :])\n        n1 = np.linalg.norm(skew_rot_axis[1, :])\n        n2 = np.linalg.norm(skew_rot_axis[2, :])\n        if ((n0 < n1) and (n0 < n2)):\n            row0 = 1\n            row1 = 2\n        elif ((n1 < n0) and (n1 < n2)):\n            row0 = 0\n            row1 = 2\n        elif ((n2 < n0) and (n2 < n1)):\n            row0 = 0\n            row1 = 1\n        Bnh[3:5, FoR_dof + 3:FoR_dof + 6] = skew_rot_axis[[row0, row1], :]\n\n        LM_C[sys_size + ieq:sys_size + ieq + num_LM_eq_specific, :sys_size] += self.scalingFactor * Bnh\n        LM_C[:sys_size, sys_size + ieq:sys_size + ieq + num_LM_eq_specific] += self.scalingFactor * Bnh.T\n\n        LM_Q[:sys_size] += self.scalingFactor * Bnh.T @ Lambda_dot[ieq:ieq + num_LM_eq_specific]\n\n        LM_Q[sys_size + ieq:sys_size + ieq + 3] \\\n            += self.scalingFactor * MB_tstep[self.body_FoR].for_vel[:3].astype(dtype=ct.c_double, copy=True, order='F')\n\n        # TODO: general logic removed since that implies local beam direction coincident with global axis direction\n        LM_Q[sys_size + ieq + 3:sys_size + ieq + 5] \\\n            += self.scalingFactor * skew_rot_axis[[row0, row1], :] @ MB_tstep[self.body_FoR].for_vel[3:6]\n\n        if self.penaltyFactor:\n            LM_Q[FoR_dof:FoR_dof + 3] += self.penaltyFactor * MB_tstep[self.body_FoR].for_vel[:3]\n            LM_C[FoR_dof:FoR_dof + 3, FoR_dof:FoR_dof + 3] += self.penaltyFactor * np.eye(3)\n\n            # TODO: general logic removed since that implies local beam direction coincident with global axis direction\n            sq_rot_axis = ag.skew(self.rot_axis).T @ ag.skew(self.rot_axis)\n            LM_Q[FoR_dof + 3:FoR_dof + 6] \\\n                += self.penaltyFactor * sq_rot_axis @ MB_tstep[self.body_FoR].for_vel[3:6]\n            LM_C[FoR_dof + 3:FoR_dof + 6, FoR_dof + 3:FoR_dof + 6] += self.penaltyFactor * sq_rot_axis\n\n        ieq += 5\n        return\n\n    def staticpost(self, lc_list, MB_beam, MB_tstep):\n        return\n\n    def dynamicpost(self, lc_list, MB_beam, MB_tstep):\n        return\n\n\n@lagrangeconstraint\nclass hinge_FoR_wrtG(BaseLagrangeConstraint):\n    __doc__ = \"\"\"\n    hinge_FoR_wrtG\n\n    This constraint forces a hinge at a FoR\n\n    See ``LagrangeConstraints`` for the description of variables\n\n    Attributes:\n        body_FoR (int): body number of the \"FoR\"\n        rot_axis_AFoR (np.ndarray): Rotation axis with respect to the node G FoR\n    \"\"\"\n    _lc_id = 'hinge_FoR_wrtG'\n\n    def __init__(self):\n        self.required_parameters = ['body_FoR', 'rot_axis_AFoR']\n        self._n_eq = 5\n\n    def get_n_eq(self):\n        return self._n_eq\n\n    def initialise(self, MBdict_entry, ieq, print_info=True):\n\n        self.body_FoR = MBdict_entry['body_FoR']\n        self.rot_axis = MBdict_entry['rot_axis_AFoR']\n        self._ieq = ieq\n        self.scalingFactor = set_value_or_default(MBdict_entry, \"scalingFactor\", 1.)\n        self.penaltyFactor = set_value_or_default(MBdict_entry, \"penaltyFactor\", 0.)\n\n        return self._ieq + self._n_eq\n\n    def staticmat(self, LM_C, LM_K, LM_Q, MB_beam, MB_tstep, ts, num_LM_eq,\n                  sys_size, dt, Lambda, Lambda_dot):\n        return\n\n    def dynamicmat(self, LM_C, LM_K, LM_Q, MB_beam, MB_tstep, ts, num_LM_eq,\n                   sys_size, dt, Lambda, Lambda_dot):\n        num_LM_eq_specific = self._n_eq\n        Bnh = np.zeros((num_LM_eq_specific, sys_size), dtype=ct.c_double, order='F')\n        B = np.zeros((num_LM_eq_specific, sys_size), dtype=ct.c_double, order='F')\n\n        # Define the position of the first degree of freedom associated to the FoR\n        FoR_dof = define_FoR_dof(MB_beam, self.body_FoR)\n        ieq = self._ieq\n\n        Bnh[:3, FoR_dof:FoR_dof + 3] = MB_tstep[self.body_FoR].cga()\n\n        # Only two of these equations are linearly independent\n        skew_rot_axis = ag.skew(self.rot_axis)\n        n0 = np.linalg.norm(skew_rot_axis[0, :])\n        n1 = np.linalg.norm(skew_rot_axis[1, :])\n        n2 = np.linalg.norm(skew_rot_axis[2, :])\n        if ((n0 < n1) and (n0 < n2)):\n            row0 = 1\n            row1 = 2\n        elif ((n1 < n0) and (n1 < n2)):\n            row0 = 0\n            row1 = 2\n        elif ((n2 < n0) and (n2 < n1)):\n            row0 = 0\n            row1 = 1\n\n        Bnh[3:5, FoR_dof + 3:FoR_dof + 6] = skew_rot_axis[[row0, row1], :]\n\n        LM_C[sys_size + ieq:sys_size + ieq + num_LM_eq_specific, :sys_size] += self.scalingFactor * Bnh\n        LM_C[:sys_size, sys_size + ieq:sys_size + ieq + num_LM_eq_specific] += self.scalingFactor * Bnh.T\n\n        LM_C[FoR_dof:FoR_dof + 3, FoR_dof + 6:FoR_dof + 10] \\\n            += self.scalingFactor * ag.der_CquatT_by_v(MB_tstep[self.body_FoR].quat, Lambda_dot[ieq:ieq + 3])\n\n        LM_Q[:sys_size] += self.scalingFactor * Bnh.T @ Lambda_dot[ieq:ieq + num_LM_eq_specific]\n\n        LM_Q[sys_size + ieq:sys_size + ieq + 3] \\\n            += self.scalingFactor * MB_tstep[self.body_FoR].cga() @ MB_tstep[self.body_FoR].for_vel[:3]\n        LM_Q[sys_size + ieq + 3:sys_size + ieq + 5] \\\n            += self.scalingFactor * skew_rot_axis[[row0, row1], :] @  MB_tstep[self.body_FoR].for_vel[3:6]\n\n        ieq += 5\n        return\n\n    def staticpost(self, lc_list, MB_beam, MB_tstep):\n        return\n\n    def dynamicpost(self, lc_list, MB_beam, MB_tstep):\n        return\n\n\n@lagrangeconstraint\nclass fully_constrained_node_FoR(BaseLagrangeConstraint):\n    __doc__ = \"\"\"\n    fully_constrained_node_FoR\n\n    This constraint forces linear and angular displacements between a node\n    and a FoR to be the same\n\n    See ``LagrangeConstraints`` for the description of variables\n\n    Attributes:\n        node_number (int): number of the \"node\" within its own body\n        node_body (int): body number of the \"node\"\n        FoR_body (int): body number of the \"FoR\"\n    \"\"\"\n    _lc_id = 'fully_constrained_node_FoR'\n\n    def __init__(self):\n        self.required_parameters = ['node_in_body', 'body', 'body_FoR', 'rel_posB']\n        self._n_eq = 6\n\n    def get_n_eq(self):\n        return self._n_eq\n\n    def initialise(self, MBdict_entry, ieq, print_info=True):\n        self.node_number = MBdict_entry['node_in_body']\n        self.node_body = MBdict_entry['body']\n        self.FoR_body = MBdict_entry['body_FoR']\n        self.rel_posB = MBdict_entry['rel_posB']\n        self._ieq = ieq\n        self.scalingFactor = set_value_or_default(MBdict_entry, \"scalingFactor\", 1.)\n        self.penaltyFactor = set_value_or_default(MBdict_entry, \"penaltyFactor\", 0.)\n\n        return self._ieq + self._n_eq\n\n    def staticmat(self, LM_C, LM_K, LM_Q, MB_beam, MB_tstep, ts, num_LM_eq,\n                  sys_size, dt, Lambda, Lambda_dot):\n        return\n\n    def dynamicmat(self, LM_C, LM_K, LM_Q, MB_beam, MB_tstep, ts, num_LM_eq,\n                   sys_size, dt, Lambda, Lambda_dot):\n        # Define the position of the first degree of freedom associated to the node\n        node_dof = define_node_dof(MB_beam, self.node_body, self.node_number)\n        node_FoR_dof = define_FoR_dof(MB_beam, self.node_body)\n        FoR_dof = define_FoR_dof(MB_beam, self.FoR_body)\n        ieq = self._ieq\n\n        # Define the equations\n        ieq = equal_lin_vel_node_FoR(MB_tstep, MB_beam, self.FoR_body, self.node_body, self.node_number, node_FoR_dof,\n                                     node_dof, FoR_dof, sys_size, Lambda_dot, self.scalingFactor, self.penaltyFactor,\n                                     ieq, LM_K, LM_C, LM_Q, rel_posB=self.rel_posB)\n        ieq = rel_rot_vel_node_FoR(MB_tstep, MB_beam, self.FoR_body, self.node_body, self.node_number, node_FoR_dof,\n                                   node_dof, FoR_dof, sys_size, Lambda_dot, self.scalingFactor, self.penaltyFactor, ieq,\n                                   LM_K, LM_C, LM_Q, rel_vel=np.zeros(3))\n\n        return\n\n    def staticpost(self, lc_list, MB_beam, MB_tstep):\n        return\n\n    def dynamicpost(self, lc_list, MB_beam, MB_tstep):\n        ielem, inode_in_elem = MB_beam[self.node_body].node_master_elem[self.node_number]\n        node_cga = MB_tstep[self.node_body].cga()\n        cab = ag.crv2rotation(MB_tstep[self.node_body].psi[ielem, inode_in_elem, :])\n\n        MB_tstep[self.FoR_body].for_pos[:3] = node_cga @ (MB_tstep[self.node_body].pos[self.node_number, :]\n                                                          + cab @ self.rel_posB) + MB_tstep[self.node_body].for_pos[:3]\n        return\n\n\n@lagrangeconstraint\nclass constant_rot_vel_FoR(BaseLagrangeConstraint):\n    __doc__ = \"\"\"\n    constant_rot_vel_FoR\n\n    This constraint forces a constant rotation velocity of a FoR\n\n    See ``LagrangeConstraints`` for the description of variables\n\n    Attributes:\n        FoR_body (int): body number of the \"FoR\"\n    \"\"\"\n    _lc_id = 'constant_rot_vel_FoR'\n\n    def __init__(self):\n        self.required_parameters = ['FoR_body', 'rot_vel']\n        self._n_eq = 3\n\n    def get_n_eq(self):\n        return self._n_eq\n\n    def initialise(self, MBdict_entry, ieq, print_info=True):\n        self.rot_vel = MBdict_entry['rot_vel']\n        self.FoR_body = MBdict_entry['FoR_body']\n        self._ieq = ieq\n        self.scalingFactor = set_value_or_default(MBdict_entry, \"scalingFactor\", 1.)\n        self.penaltyFactor = set_value_or_default(MBdict_entry, \"penaltyFactor\", 0.)\n\n        return self._ieq + self._n_eq\n\n    def staticmat(self, LM_C, LM_K, LM_Q, MB_beam, MB_tstep, ts, num_LM_eq,\n                  sys_size, dt, Lambda, Lambda_dot):\n        return\n\n    def dynamicmat(self, LM_C, LM_K, LM_Q, MB_beam, MB_tstep, ts, num_LM_eq,\n                   sys_size, dt, Lambda, Lambda_dot):\n        num_LM_eq_specific = self._n_eq\n        Bnh = np.zeros((num_LM_eq_specific, sys_size), dtype=ct.c_double, order='F')\n\n        # Define the position of the first degree of freedom associated to the FoR\n        FoR_dof = define_FoR_dof(MB_beam, self.FoR_body)\n        ieq = self._ieq\n\n        Bnh[:3, FoR_dof + 3:FoR_dof + 6] = np.eye(3)\n\n        LM_C[sys_size + ieq:sys_size + ieq + num_LM_eq_specific, :sys_size] += self.scalingFactor * Bnh\n        LM_C[:sys_size, sys_size + ieq:sys_size + ieq + num_LM_eq_specific] += self.scalingFactor * Bnh.T\n\n        LM_Q[:sys_size] += self.scalingFactor * Bnh.T @ Lambda_dot[ieq:ieq + num_LM_eq_specific]\n        LM_Q[sys_size + ieq:sys_size + ieq + num_LM_eq_specific] \\\n            += self.scalingFactor * (MB_tstep[self.FoR_body].for_vel[3:6] - self.rot_vel)\n\n        ieq += 3\n        return\n\n    def staticpost(self, lc_list, MB_beam, MB_tstep):\n        return\n\n    def dynamicpost(self, lc_list, MB_beam, MB_tstep):\n        return\n\n\n@lagrangeconstraint\nclass constant_vel_FoR(BaseLagrangeConstraint):\n    __doc__ = \"\"\"\n    constant_vel_FoR\n\n    This constraint forces a constant velocity of a FoR\n\n    See ``LagrangeConstraints`` for the description of variables\n\n    Attributes:\n        FoR_body (int): body number of the \"FoR\"\n        vel (np.ndarray): 6 components of the desired velocity\n    \"\"\"\n    _lc_id = 'constant_vel_FoR'\n\n    def __init__(self):\n        self.required_parameters = ['FoR_body', 'vel']\n        self._n_eq = 6\n\n    def get_n_eq(self):\n        return self._n_eq\n\n    def initialise(self, MBdict_entry, ieq, print_info=True):\n        self.vel = MBdict_entry['vel']\n        self.FoR_body = MBdict_entry['FoR_body']\n        self._ieq = ieq\n        self.scalingFactor = set_value_or_default(MBdict_entry, \"scalingFactor\", 1.)\n        self.penaltyFactor = set_value_or_default(MBdict_entry, \"penaltyFactor\", 0.)\n\n        return self._ieq + self._n_eq\n\n    def staticmat(self, LM_C, LM_K, LM_Q, MB_beam, MB_tstep, ts, num_LM_eq,\n                  sys_size, dt, Lambda, Lambda_dot):\n        return\n\n    def dynamicmat(self, LM_C, LM_K, LM_Q, MB_beam, MB_tstep, ts, num_LM_eq,\n                   sys_size, dt, Lambda, Lambda_dot):\n        num_LM_eq_specific = self._n_eq\n        Bnh = np.zeros((num_LM_eq_specific, sys_size), dtype=ct.c_double, order='F')\n\n        # Define the position of the first degree of freedom associated to the FoR\n        FoR_dof = define_FoR_dof(MB_beam, self.FoR_body)\n        ieq = self._ieq\n\n        Bnh[:num_LM_eq_specific, FoR_dof:FoR_dof + 6] = np.eye(6)\n\n        LM_C[sys_size + ieq:sys_size + ieq + num_LM_eq_specific, :sys_size] += self.scalingFactor * Bnh\n        LM_C[:sys_size, sys_size + ieq:sys_size + ieq + num_LM_eq_specific] += self.scalingFactor * Bnh.T\n\n        LM_Q[:sys_size] += self.scalingFactor * Bnh.T @ Lambda_dot[ieq:ieq + num_LM_eq_specific]\n        LM_Q[sys_size + ieq:sys_size + ieq + num_LM_eq_specific] \\\n            += self.scalingFactor * (MB_tstep[self.FoR_body].for_vel - self.vel)\n\n        ieq += 6\n        return\n\n    def staticpost(self, lc_list, MB_beam, MB_tstep):\n        return\n\n    def dynamicpost(self, lc_list, MB_beam, MB_tstep):\n        return\n\n\n@lagrangeconstraint\nclass zero_lin_vel_sine_rot_vel_FoR(BaseLagrangeConstraint):\n    __doc__ = \"\"\"\n    zero_lin_vel_sine_rot_vel_FoR\n\n    Zero linear velocity and sinusoidal rotation velocity FoR\n\n    See ``LagrangeConstraints`` for the description of variables\n\n    Attributes:\n        FoR_body (int): body number of the \"FoR\"\n        vel_amp (float): Rotation velocity amplitude\n        omega (float): Frequency of the sinusoidally-varying rotation velocity\n        xyz (string): Axis with the sine velocity\n    \"\"\"\n    _lc_id = 'zero_lin_vel_sine_rot_vel_FoR'\n\n    def __init__(self):\n        self.required_parameters = ['FoR_body', 'vel_amp', 'omega', 'xyz']\n        self._n_eq = 6\n\n    def get_n_eq(self):\n        return self._n_eq\n\n    def initialise(self, MBdict_entry, ieq, print_info=True):\n\n        self.FoR_body = MBdict_entry['FoR_body']\n        self.vel_amp = MBdict_entry['vel_amp']\n        self.omega = MBdict_entry['omega']\n        if MBdict_entry['xyz'] == 'x':\n            self.xyz_index = 0\n        elif MBdict_entry['xyz'] == 'y':\n            self.xyz_index = 1\n        elif MBdict_entry['xyz'] == 'z':\n            self.xyz_index = 2\n        else:\n            raise NotImplementedError(\"FoR rotation velocity shouldd be parallel to x, y or z\")\n        self._ieq = ieq\n        self.scalingFactor = set_value_or_default(MBdict_entry, \"scalingFactor\", 1.)\n        self.penaltyFactor = set_value_or_default(MBdict_entry, \"penaltyFactor\", 0.)\n\n        return self._ieq + self._n_eq\n\n    def staticmat(self, LM_C, LM_K, LM_Q, MB_beam, MB_tstep, ts, num_LM_eq,\n                  sys_size, dt, Lambda, Lambda_dot):\n        return\n\n    def dynamicmat(self, LM_C, LM_K, LM_Q, MB_beam, MB_tstep, ts, num_LM_eq,\n                   sys_size, dt, Lambda, Lambda_dot):\n        num_LM_eq_specific = self._n_eq\n        Bnh = np.zeros((num_LM_eq_specific, sys_size), dtype=ct.c_double, order='F')\n\n        # Define the position of the first degree of freedom associated to the FoR\n        FoR_dof = define_FoR_dof(MB_beam, self.FoR_body)\n        ieq = self._ieq\n\n        vel = np.zeros(6)\n        vel[3 + self.xyz_index] = self.vel_amp * np.sin(self.omega * ts * dt)\n\n        Bnh[:num_LM_eq_specific, FoR_dof:FoR_dof + 6] = np.eye(6)\n\n        LM_C[sys_size + ieq:sys_size + ieq + num_LM_eq_specific, :sys_size] += self.scalingFactor * Bnh\n        LM_C[:sys_size, sys_size + ieq:sys_size + ieq + num_LM_eq_specific] += self.scalingFactor * Bnh.T\n\n        LM_Q[:sys_size] += self.scalingFactor * Bnh.T, Lambda_dot[ieq:ieq + num_LM_eq_specific]\n        LM_Q[sys_size + ieq:sys_size + ieq + num_LM_eq_specific] \\\n            += self.scalingFactor * (MB_tstep[self.FoR_body].for_vel - vel)\n\n        ieq += 6\n        return\n\n    def staticpost(self, lc_list, MB_beam, MB_tstep):\n        return\n\n    def dynamicpost(self, lc_list, MB_beam, MB_tstep):\n        return\n\n\n@lagrangeconstraint\nclass lin_vel_node_wrtA(BaseLagrangeConstraint):\n    __doc__ = \"\"\"\n    lin_vel_node_wrtA\n\n    This constraint forces the linear velocity of a node to have a\n    certain value with respect to the A FoR\n\n    See ``LagrangeConstraints`` for the description of variables\n\n    Attributes:\n        node_number (int): number of the \"node\" within its own body\n        body_number (int): body number of the \"node\"\n        vel (np.ndarray): 6 components of the desired velocity with respect to the A FoR\n    \"\"\"\n    _lc_id = 'lin_vel_node_wrtA'\n\n    def __init__(self):\n        self.required_parameters = ['velocity', 'body_number', 'node_number']\n        self._n_eq = 3\n\n    def get_n_eq(self):\n        return self._n_eq\n\n    def initialise(self, MBdict_entry, ieq, print_info=True):\n\n        self.vel = MBdict_entry['velocity']\n        self.body_number = MBdict_entry['body_number']\n        self.node_number = MBdict_entry['node_number']\n        self._ieq = ieq\n        self.scalingFactor = set_value_or_default(MBdict_entry, \"scalingFactor\", 1.)\n        self.penaltyFactor = set_value_or_default(MBdict_entry, \"penaltyFactor\", 0.)\n\n        return self._ieq + self._n_eq\n\n    def staticmat(self, LM_C, LM_K, LM_Q, MB_beam, MB_tstep, ts, num_LM_eq,\n                  sys_size, dt, Lambda, Lambda_dot):\n\n        num_LM_eq_specific = self._n_eq\n        B = np.zeros((num_LM_eq_specific, sys_size), dtype=ct.c_double, order='F')\n\n        # Define the position of the first degree of freedom associated to the FoR\n        node_dof = define_node_dof(MB_beam, self.body_number, self.node_number)\n        ieq = self._ieq\n\n        B[:num_LM_eq_specific, node_dof:node_dof + 3] = np.eye(3)\n\n        LM_K[sys_size + ieq:sys_size + ieq + num_LM_eq_specific, :sys_size] += self.scalingFactor * B\n        LM_K[:sys_size, sys_size + ieq:sys_size + ieq + num_LM_eq_specific] += self.scalingFactor * B.T\n\n        LM_Q[:sys_size] += self.scalingFactor * B.T @ Lambda[ieq:ieq + num_LM_eq_specific]\n        LM_Q[sys_size + ieq:sys_size + ieq + num_LM_eq_specific] \\\n            += self.scalingFactor * (MB_tstep[self.body_number].pos[self.node_number, :]\n                                     - MB_beam[self.body_number].ini_info.pos[self.node_number, :])\n\n        ieq += 3\n        return\n\n    def dynamicmat(self, LM_C, LM_K, LM_Q, MB_beam, MB_tstep, ts, num_LM_eq,\n                   sys_size, dt, Lambda, Lambda_dot):\n\n        if len(self.vel.shape) > 1:\n            current_vel = self.vel[ts - 1, :]\n        else:\n            current_vel = self.vel\n\n        num_LM_eq_specific = self._n_eq\n        Bnh = np.zeros((num_LM_eq_specific, sys_size), dtype=ct.c_double, order='F')\n\n        # Define the position of the first degree of freedom associated to the FoR\n        node_dof = define_node_dof(MB_beam, self.body_number, self.node_number)\n        ieq = self._ieq\n\n        Bnh[:num_LM_eq_specific, node_dof:node_dof + 3] = np.eye(3)\n\n        LM_C[sys_size + ieq:sys_size + ieq + num_LM_eq_specific, :sys_size] += self.scalingFactor * Bnh\n        LM_C[:sys_size, sys_size + ieq:sys_size + ieq + num_LM_eq_specific] += self.scalingFactor * Bnh.T\n\n        LM_Q[:sys_size] += self.scalingFactor * Bnh.T @ Lambda_dot[ieq:ieq + num_LM_eq_specific]\n        LM_Q[sys_size + ieq:sys_size + ieq + num_LM_eq_specific] \\\n            += self.scalingFactor * (MB_tstep[self.body_number].pos_dot[self.node_number, :] - current_vel)\n\n        ieq += 3\n        return\n\n    def staticpost(self, lc_list, MB_beam, MB_tstep):\n        return\n\n    def dynamicpost(self, lc_list, MB_beam, MB_tstep):\n        return\n\n\n@lagrangeconstraint\nclass lin_vel_node_wrtG(BaseLagrangeConstraint):\n    __doc__ = \"\"\"\n    lin_vel_node_wrtG\n\n    This constraint forces the linear velocity of a node to have a\n    certain value with respect to the G FoR\n\n    See ``LagrangeConstraints`` for the description of variables\n\n    Attributes:\n        node_number (int): number of the \"node\" within its own body\n        body_number (int): body number of the \"node\"\n        vel (np.ndarray): 6 components of the desired velocity with respect to the G FoR\n    \"\"\"\n    _lc_id = 'lin_vel_node_wrtG'\n\n    def __init__(self):\n        self.required_parameters = ['velocity', 'body_number', 'node_number']\n        self._n_eq = 3\n\n    def get_n_eq(self):\n        return self._n_eq\n\n    def initialise(self, MBdict_entry, ieq, print_info=True):\n\n        self.vel = MBdict_entry['velocity']\n        self.body_number = MBdict_entry['body_number']\n        self.node_number = MBdict_entry['node_number']\n        self._ieq = ieq\n        self.scalingFactor = set_value_or_default(MBdict_entry, \"scalingFactor\", 1.)\n        self.penaltyFactor = set_value_or_default(MBdict_entry, \"penaltyFactor\", 0.)\n\n        return self._ieq + self._n_eq\n\n    def staticmat(self, LM_C, LM_K, LM_Q, MB_beam, MB_tstep, ts, num_LM_eq,\n                  sys_size, dt, Lambda, Lambda_dot):\n\n        num_LM_eq_specific = self._n_eq\n        B = np.zeros((num_LM_eq_specific, sys_size), dtype=ct.c_double, order='F')\n\n        # Define the position of the first degree of freedom associated to the FoR\n        node_dof = define_node_dof(MB_beam, self.body_number, self.node_number)\n        ieq = self._ieq\n\n        B[:num_LM_eq_specific, node_dof:node_dof + 3] = MB_tstep[self.body_number].cga()\n\n        LM_K[sys_size + ieq:sys_size + ieq + num_LM_eq_specific, :sys_size] += self.scalingFactor * B\n        LM_K[:sys_size, sys_size + ieq:sys_size + ieq + num_LM_eq_specific] += self.scalingFactor * B.T\n\n        LM_Q[:sys_size] += self.scalingFactor * B.T @ Lambda[ieq:ieq + num_LM_eq_specific]\n        LM_Q[sys_size + ieq:sys_size + ieq + num_LM_eq_specific] \\\n            += (self.scalingFactor * MB_tstep[self.body_number].cga()\n                @ MB_tstep[self.body_number].pos[self.node_number, :] + MB_tstep[self.body_number].for_pos)\n        LM_Q[sys_size + ieq:sys_size + ieq + num_LM_eq_specific] \\\n            -= (self.scalingFactor * MB_beam[self.body_number].ini_info.cga()\n                @ MB_beam[self.body_number].ini_info.pos[self.node_number, :]\n                + MB_beam[self.body_number].ini_info.for_pos)\n\n        ieq += 3\n        return\n\n    def dynamicmat(self, LM_C, LM_K, LM_Q, MB_beam, MB_tstep, ts, num_LM_eq,\n                   sys_size, dt, Lambda, Lambda_dot):\n        if len(self.vel.shape) > 1:\n            current_vel = self.vel[ts - 1, :]\n        else:\n            current_vel = self.vel\n\n        num_LM_eq_specific = self._n_eq\n        Bnh = np.zeros((num_LM_eq_specific, sys_size), dtype=ct.c_double, order='F')\n\n        # Define the position of the first degree of freedom associated to the FoR\n        FoR_dof = define_FoR_dof(MB_beam, self.body_number)\n        node_dof = define_node_dof(MB_beam, self.body_number, self.node_number)\n        ieq = self._ieq\n\n        if MB_beam[self.body_number].FoR_movement == 'free':\n            Bnh[:num_LM_eq_specific, FoR_dof:FoR_dof + 3] = MB_tstep[self.body_number].cga()\n            Bnh[:num_LM_eq_specific, FoR_dof + 3:FoR_dof + 6] \\\n                = -MB_tstep[self.body_number].cga() @ ag.skew(MB_tstep[self.body_number].pos[self.node_number, :])\n        Bnh[:num_LM_eq_specific, node_dof:node_dof + 3] = MB_tstep[self.body_number].cga()\n\n        LM_C[sys_size + ieq:sys_size + ieq + num_LM_eq_specific, :sys_size] += self.scalingFactor * Bnh\n        LM_C[:sys_size, sys_size + ieq:sys_size + ieq + num_LM_eq_specific] += self.scalingFactor * Bnh.T\n\n        if MB_beam[self.body_number].FoR_movement == 'free':\n            LM_C[FoR_dof:FoR_dof + 3, FoR_dof + 6:FoR_dof + 10] += self.scalingFactor * ag.der_CquatT_by_v(\n                MB_tstep[self.body_number].quat, Lambda_dot[ieq:ieq + num_LM_eq_specific])\n            LM_C[node_dof:node_dof + 3, FoR_dof + 6:FoR_dof + 10] += self.scalingFactor * ag.der_CquatT_by_v(\n                MB_tstep[self.body_number].quat, Lambda_dot[ieq:ieq + num_LM_eq_specific])\n            LM_C[FoR_dof + 3:FoR_dof + 6, FoR_dof + 6:FoR_dof + 10] \\\n                += (self.scalingFactor * ag.skew(MB_tstep[self.body_number].pos[self.node_number, :])\n                    @ ag.der_CquatT_by_v(MB_tstep[self.body_number].quat, Lambda_dot[ieq:ieq + num_LM_eq_specific]))\n\n            LM_K[FoR_dof + 3:FoR_dof + 6, node_dof:node_dof + 3] \\\n                -= self.scalingFactor * ag.skew(MB_tstep[self.body_number].cga().T\n                                                @ Lambda_dot[ieq:ieq + num_LM_eq_specific])\n\n        LM_Q[:sys_size] += self.scalingFactor * Bnh.T @ Lambda_dot[ieq:ieq + num_LM_eq_specific]\n        LM_Q[sys_size + ieq:sys_size + ieq + num_LM_eq_specific] \\\n            += self.scalingFactor * (MB_tstep[self.body_number].cga()\n                                     @ (MB_tstep[self.body_number].for_vel[:3]\n                                        + ag.skew(MB_tstep[self.body_number].for_vel[3:6])\n                                        @ MB_tstep[self.body_number].pos[self.node_number, :]\n                                        + MB_tstep[self.body_number].pos_dot[self.node_number, :]) - current_vel)\n\n        ieq += 3\n        return\n\n    def staticpost(self, lc_list, MB_beam, MB_tstep):\n        return\n\n    def dynamicpost(self, lc_list, MB_beam, MB_tstep):\n        return\n\n\n################################################################################\n# Funtions to interact with this Library\n################################################################################\ndef initialize_constraints(MBdict):\n    index_eq = 0\n    num_constraints = MBdict['num_constraints']\n    lc_list = list()\n\n    # Read the dictionary and create the constraints\n    for iconstraint in range(num_constraints):\n        lc_list.append(lc_from_string(MBdict[\"constraint_%02d\" % iconstraint]['behaviour'])())\n        MBdict_entry = MBdict[\"constraint_%02d\" % iconstraint]\n        if \"penaltyFactor\" in MBdict_entry.keys():\n            if not MBdict_entry['penaltyFactor'] == 0.:\n                print(\"Penalty method not completely implemented for Lagrange Constraints\")\n\n        index_eq = lc_list[-1].initialise(MBdict_entry, index_eq)\n\n    return lc_list\n\n\ndef define_num_LM_eq(lc_list):\n    \"\"\"\n    define_num_LM_eq\n\n    Define the number of equations needed to define the boundary boundary conditions\n\n    Args:\n        lc_list(): list of all the defined contraints\n    Returns:\n        num_LM_eq(int): number of new equations needed to define the boundary boundary conditions\n\n    Examples:\n        num_LM_eq = lagrangeconstraints.define_num_LM_eq(lc_list)\n\n    Notes:\n\n    \"\"\"\n\n    num_LM_eq = 0\n\n    # Compute the number of equations\n    for lc in lc_list:\n        num_LM_eq += lc.get_n_eq()\n\n    return num_LM_eq\n\n\ndef generate_lagrange_matrix(lc_list, MB_beam, MB_tstep, ts, num_LM_eq, sys_size, dt, Lambda, Lambda_dot,\n                             dynamic_or_static):\n    \"\"\"\n    generate_lagrange_matrix\n\n    Generates the matrices associated to the Lagrange multipliers boundary conditions\n\n    Args:\n        lc_list(): list of all the defined contraints\n        MBdict(dict): dictionary with the MultiBody and LagrangeMultipliers information\n        MB_beam(list): list of 'beams' of each of the bodies that form the system\n        MB_tstep(list): list of 'StructTimeStepInfo' of each of the bodies that form the system\n        num_LM_eq(int): number of new equations needed to define the boundary boundary conditions\n        sys_size(int): total number of degrees of freedom of the multibody system\n        dt(float): time step\n        Lambda(np.ndarray): list of Lagrange multipliers values\n        Lambda_dot(np.ndarray): list of the first derivative of the Lagrange multipliers values\n        dynamic_or_static (str): string defining if the computation is dynamic or static\n\n    Returns:\n        LM_C (np.ndarray): Damping matrix associated to the Lagrange Multipliers equations\n        LM_K (np.ndarray): Stiffness matrix associated to the Lagrange Multipliers equations\n        LM_Q (np.ndarray): Vector of independent terms associated to the Lagrange Multipliers equations\n    \"\"\"\n    # Initialize matrices\n    LM_C = np.zeros((sys_size + num_LM_eq, sys_size + num_LM_eq), dtype=ct.c_double, order='F')\n    LM_K = np.zeros((sys_size + num_LM_eq, sys_size + num_LM_eq), dtype=ct.c_double, order='F')\n    LM_Q = np.zeros((sys_size + num_LM_eq,), dtype=ct.c_double, order='F')\n\n    # Define the matrices associated to the constratints\n    # TODO: Is there a better way to deal with ieq?\n    for lc in lc_list:\n        if dynamic_or_static.lower() == \"static\":\n            lc.staticmat(LM_C=LM_C, LM_K=LM_K, LM_Q=LM_Q, MB_beam=MB_beam, MB_tstep=MB_tstep, ts=ts,\n                         num_LM_eq=num_LM_eq, sys_size=sys_size, dt=dt, Lambda=Lambda, Lambda_dot=Lambda_dot)\n\n        elif dynamic_or_static.lower() == \"dynamic\":\n            lc.dynamicmat(LM_C=LM_C, LM_K=LM_K, LM_Q=LM_Q, MB_beam=MB_beam, MB_tstep=MB_tstep, ts=ts,\n                          num_LM_eq=num_LM_eq, sys_size=sys_size, dt=dt, Lambda=Lambda, Lambda_dot=Lambda_dot)\n\n    return LM_C, LM_K, LM_Q\n\n\ndef postprocess(lc_list, MB_beam, MB_tstep, dynamic_or_static):\n    \"\"\"\n    Run the postprocess of all the Lagrange Constraints in the system\n    \"\"\"\n    for lc in lc_list:\n        if dynamic_or_static.lower() == \"static\":\n            lc.staticpost(lc_list=lc_list, MB_beam=MB_beam, MB_tstep=MB_tstep)\n\n        elif dynamic_or_static.lower() == \"dynamic\":\n            lc.dynamicpost(lc_list=lc_list, MB_beam=MB_beam, MB_tstep=MB_tstep)\n    return\n\n\ndef remove_constraint(MBdict, constraint):\n    \"\"\"\n    Removes a constraint from the list.\n    This function is thought to release constraints at some point during\n    a dynamic simulation\n    \"\"\"\n    try:\n        del (MBdict[constraint])\n        MBdict['num_constraints'] -= 1\n    except KeyError:\n        pass\n\n\n################################################################################\n\nprint_available_lc()\n"
  },
  {
    "path": "sharpy/structure/utils/lagrangeconstraintsjax.py",
    "content": "from typing import Callable, Any, Optional, Type, cast\nfrom abc import ABC\nimport numpy as np\nimport scipy as sp\n\nimport jax\nimport jax.scipy.spatial.transform\nimport jax.numpy as jnp\nfrom jax.numpy import ndarray as jarr\n\n# global constants\njax.config.update(\"jax_enable_x64\", True)\nDICT_OF_LC = dict()\nUSE_JIT = True\n\n# type definition for b subfunctions (Constraint, i_lm, b_mat, q, q_dot, u, u_dot)\nb_type: Type = Optional[Callable[[Any, slice, jarr, jarr, jarr, jarr, jarr], jarr]]\n\n# type definitions for  b functions, ordering is (q, q_dot, u, u_dot, lmh, lmn)\nfunc_type: Type = Callable[[jarr, jarr, jarr, jarr, jarr, jarr], jarr]\n\n\n# redefine jax.scipy rotation class to use [real, i, j, k] ordering by default\nclass Rot(jax.scipy.spatial.transform.Rotation):\n    @classmethod\n    def from_quat(cls, quat: jarr):\n        return super().from_quat(jnp.array((*quat[1:4], quat[0])))\n\n    def as_quat(self, canonical=True) -> jarr:\n        return super().as_quat(canonical=canonical)\n\n\n# decorator populating DICT_OF_LC as {lc_id: Constraint}, not type hinted as preceeds Constraint declaration\ndef constraint(constraint_):\n    global DICT_OF_LC\n    if constraint_.lc_id is not None:\n        DICT_OF_LC[constraint_.lc_id] = constraint_\n    else:\n        raise AttributeError('Class defined as lagrange constraint has no lc_id attribute')\n    return constraint_\n\n\n# JAX vector skew\ndef skew(vec: jarr) -> jarr:\n    if vec.shape != (3,) or jnp.iscomplexobj(vec):\n        raise ValueError(\"Incompatible input vector dimention or data type\")\n    return jnp.array(((0., -vec[2], vec[1]),\n                      (vec[2], 0., -vec[0]),\n                      (-vec[1], vec[0], 0.)))\n\n\n# JAX cartesian rotation vector to rotation matrix as version from SciPy's Rotation class doesn't differentiate well\ndef crv2rot(crv: jarr) -> jarr:\n    ang = jnp.linalg.norm(crv)\n    crv_skew = skew(crv)\n    return jax.lax.cond(ang > 1e-15,\n                        lambda: jnp.eye(3) + jnp.sin(ang) / ang * crv_skew\n                                + (1 - jnp.cos(ang)) / ang ** 2 * crv_skew @ crv_skew,\n                        lambda: jnp.eye(3) + crv_skew + 0.5 * crv_skew @ crv_skew)\n\n\n# JAX cartesian rotation vector tangent operator\ndef crv2tan(psi: jarr) -> jarr:\n    ang = jnp.linalg.norm(psi)\n    psi_skew = skew(psi)\n    return jax.lax.cond(ang > 1e-8,\n                        lambda: jnp.eye(3) + (jnp.cos(ang) - 1.) / ang ** 2 * psi_skew + (ang - jnp.sin(ang))\n                                / ang ** 3 * psi_skew @ psi_skew,\n                        lambda: jnp.eye(3) - 0.5 * psi_skew + psi_skew @ psi_skew / 6.)\n\n\n@constraint\nclass Constraint(ABC):\n    # this might make it a bit faster, might be overkill\n    __slots__ = ('settings', 's_fact', 'p_fact', 'use_p_fact', 'jac_func', 'num_h_funcs', 'num_n_funcs', 'i_first_lm',\n                 'num_lmh', 'num_lmn', 'num_lm', 'num_lm_tot', 'num_bodys', 'is_free', 'num_elem_body', 'num_node_body',\n                 'num_dof_body', 'num_dof_tot', 'num_eq_tot', 'i_sys', 'i_lm_tot', 'i_lmh_eq', 'i_lmn_eq', 'i_lm_eq',\n                 'i_v0', 'i_omega0', 'i_quat0', 'i_v1', 'i_omega1', 'i_quat1', 'i_r0', 'i_psi0', 'q_i_global',\n                 'num_active_q', 'bh', 'bn', 'gn', 'c', 'd', 'bht', 'bnt', 'bht_lmh', 'bnt_lmn', 'p_func_h', 'p_func_n',\n                 'run')\n\n    lc_id = '_base_constraint'\n    required_params: tuple[str, ...] = tuple()  # required parameters for the given constraint\n    bh_funcs: tuple[b_type, ...] = list()  # tuple of holonomic B matrix funcs\n    bn_funcs: tuple[b_type | None, ...] = tuple()  # tuple of non holonomic B matrix funcs, or None for zero matrix\n    gn_funcs: tuple[b_type | None, ...] = tuple()  # tuple of non holonomic g matrix funcs, or None for zero matrix\n    num_lmh_eq: tuple[int, ...] = tuple()  # number of LMs for each holonomic constraint\n    num_lmn_eq: tuple[int, ...] = tuple()  # number of LMs for each nonholonomic constraint\n    postproc_funcs: tuple[Callable, ...] = tuple()  # postprocessing functions to be run\n\n    def __init__(self, data, i_lm: int, constraint_settings: dict): # case data, index of first LM, input settings\n        self.settings = constraint_settings  # input constraint parameters\n\n        # scaling factor, with 1/dt^2 as default\n        self.s_fact = constraint_settings.get('scaling_factor', data.data.settings['DynamicCoupled']['dt'] ** -2)\n        self.p_fact = constraint_settings.get('penalty_factor', 0.)  # penalty factor for constraint\n        self.use_p_fact = abs(self.p_fact) > 1e-6   # if true, penalty equations are included in run function\n\n        # choose either forward or reverse mode autodifferentiation\n        # I believe that only forward works as of current, and for this case the difference should be negligible\n        match data.settings['jacobian_method']:\n            case 'forward':\n                self.jac_func = jax.jacfwd\n            case 'reverse':\n                self.jac_func = jax.jacrev\n\n        self.num_h_funcs = len(self.bh_funcs)           # number of holonomic functions (this constraint)\n        self.num_n_funcs = len(self.bn_funcs)           # number of non holonomic functions (this constraint)\n        self.i_first_lm = i_lm                          # index of first LM (this constraint)\n        self.num_lmh = sum(self.num_lmh_eq)             # total number of holonomic LMs (this constraint)\n        self.num_lmn = sum(self.num_lmn_eq)             # total number of non holonomic LMs (this constraint)\n        self.num_lm = self.num_lmh + self.num_lmn       # total number of LMs (this constraint)\n        self.num_lm_tot = data.num_lm_tot               # total numer of LMs (all constraints)\n\n        self.num_bodys = data.data.structure.ini_mb_dict['num_bodies']  # number of bodies\n        self.is_free = [data.data.structure.ini_mb_dict[f'body_{i:02d}']['FoR_movement'] == 'free'\n                        for i in range(self.num_bodys)]  # boolean for beam freedom condition\n\n        self.num_elem_body = [list(data.data.structure.body_number).count(i)\n                              for i in range(self.num_bodys)]  # number of elements per body\n        self.num_node_body = [self.num_elem_body[i] * (data.data.structure.num_node_elem - 1) + 1\n                              for i in range(self.num_bodys)]  # number of nodes per body\n        self.num_dof_body = [(self.num_node_body[i] - 1) * 6 + self.is_free[i] * 10\n                             for i in range(self.num_bodys)]  # number of DoFs per body\n\n        self.num_dof_tot = data.sys_size                     # number of equations representing the unconstrained system\n        self.num_eq_tot = self.num_dof_tot + self.num_lm_tot  # number of equations representing the constrainted system\n\n        self.i_sys = slice(0, self.num_dof_tot)  # index of equations representing the unconstrained system\n\n        self.i_lm_tot = jnp.arange(self.num_dof_tot, self.num_dof_tot + self.num_lm_tot)  # index of LMs in full system\n\n        self.i_lmh_eq: list[slice] = []  # list of slices of holonomic LMs for this constraint\n        self.i_lmn_eq: list[slice] = []  # list of slices of non holonomic LMs for this constraint\n\n        i_eq = self.i_first_lm\n        for i in range(len(self.num_lmh_eq)):\n            self.i_lmh_eq.append(slice(i_eq, i_eq + self.num_lmh_eq[i]))\n            i_eq += self.num_lmh_eq[i]\n        for i in range(len(self.num_lmn_eq)):\n            self.i_lmn_eq.append(slice(i_eq, i_eq + self.num_lmn_eq[i]))\n            i_eq += self.num_lmn_eq[i]\n        self.i_lm_eq = self.i_lmh_eq + self.i_lmn_eq  # list of slices of LMs for this constraint, holonomic first\n\n        # the below indexes are slices of q and q_dot in the subset of active q terms\n        self.i_v0: Optional[slice] = None        # index of body 0 linear velocity\n        self.i_omega0: Optional[slice] = None    # index of body 0 rotational velocity\n        self.i_quat0: Optional[slice] = None     # index of body 0 orientation quaternion\n        self.i_v1: Optional[slice] = None        # index of body 1 linear velocity\n        self.i_omega1: Optional[slice] = None    # index of body 1 rotational velocity\n        self.i_quat1: Optional[slice] = None     # index of body 1 orientation quaternion\n        self.i_r0: Optional[slice] = None        # index of body 0 node position\n        self.i_psi0: Optional[slice] = None      # index of body 0 node orientation\n        self.q_i_global: Optional[jnp.ndarray] = None     # index of q used in constraints (global)\n        self.num_active_q: Optional[int] = None     # number of elements of q required in constraint\n        self.create_index()                      # assign all required indexes\n\n        self.bh: func_type = self.create_bh()                                          # overall holonomic b function\n        self.bn: func_type = self.create_bn()                                          # overall nonholonomic b function\n        self.gn: func_type = self.create_gn()                                          # overall nonholonomic g function\n\n        # cannot type hint lambda expressions, so casting the type will do\n        self.c: func_type = cast(func_type, lambda *args: self.bh(*args) @ args[0])                    # C function\n        self.d: func_type = cast(func_type, lambda *args: self.bn(*args) @ args[1] + self.gn(*args))   # D function\n        self.bht: func_type = cast(func_type, lambda *args: self.bh(*args).T)                          # B_h^T\n        self.bnt: func_type = cast(func_type, lambda *args: self.bn(*args).T)                          # B_n^T\n        self.bht_lmh: func_type = cast(func_type, lambda *args: self.bht(*args) @ args[4])             # B_h^T @ lm_h\n        self.bnt_lmn: func_type = cast(func_type, lambda *args: self.bnt(*args) @ args[5])             # B_n^T @ lm_n\n        self.p_func_h: func_type = cast(func_type, lambda *args: self.bht(*args) @ self.c(*args))\n        self.p_func_n: func_type = cast(func_type, lambda *args: self.bnt(*args) @ self.d(*args))\n\n        # create function which returns contribution to structural equations\n        self.run: Callable[[jarr, jarr, jarr, jarr, jarr, jarr], tuple[jarr, jarr, jarr]] = self.create_run()\n\n    def postprocess(self, mb_beam, mb_tstep) -> None:\n        for func in self.postproc_funcs:\n            func(self, mb_beam, mb_tstep)\n\n    @classmethod\n    def get_n_lm(cls) -> int:\n        return sum(cls.num_lmh_eq) + sum(cls.num_lmn_eq)\n\n    def create_index(self) -> None:\n        # check all required parameters are in settings\n        for param in self.required_params:\n            if param not in self.settings.keys():\n                raise KeyError(f\"Parameter {param} is undefined in constraint settings\")\n\n        i_global = []   # index in full q\n        i_count = 0     # start of current slice\n\n        if 'body' in self.required_params:\n            i_for0 = self.settings['body']\n            i_start_for0 = sum(self.num_dof_body[:i_for0 + 1]) - 10\n            self.i_v0 = np.arange(0, 3, dtype=int)\n            self.i_omega0 = np.arange(3, 6, dtype=int)\n            self.i_quat0 = np.arange(6, 10, dtype=int)\n            i_global.append(np.arange(i_start_for0, i_start_for0 + 10))\n            i_count += 10\n\n        if 'node_in_body' in self.required_params:\n            i_node = self.settings['node_in_body']\n            self.i_r0 = np.arange(i_count, i_count + 3, dtype=int)\n            self.i_psi0 = np.arange(i_count + 3, i_count + 6, dtype=int)\n            i_global.append(jnp.arange((i_node - 1) * 6, (i_node - 1) * 6 + 6))\n            i_count += 6\n\n        if 'body_FoR' in self.required_params:\n            i_for1 = self.settings['body_FoR']\n            i_start_for1 = sum(self.num_dof_body[:i_for1 + 1]) - 10\n            self.i_v1 = np.arange(i_count, i_count + 3, dtype=int)\n            self.i_omega1 = np.arange(i_count + 3, i_count + 6, dtype=int)\n            self.i_quat1 = np.arange(i_count + 6, i_count + 10, dtype=int)\n            i_global.append(np.arange(i_start_for1, i_start_for1 + 10))\n            i_count += 10\n\n        self.q_i_global = jnp.hstack(i_global)\n        self.num_active_q = self.q_i_global.shape[0]\n\n    def create_bh(self) -> func_type:\n        def bh(*args: jarr) -> jarr:\n            bh_mat = jnp.zeros((self.num_lm_tot, self.num_active_q))\n            for i_func, bh_func in enumerate(self.bh_funcs):\n                bh_mat = bh_func(self, self.i_lmh_eq[i_func], bh_mat, *args[:4])\n            return bh_mat\n\n        return bh\n\n    def create_bn(self) -> func_type:\n        def bn(*args: jarr) -> jarr:\n            bn_mat = jnp.zeros((self.num_lm_tot, self.num_active_q))\n            for i_func, bn_func in enumerate(self.bn_funcs):\n                if bn_func is not None:\n                    bn_mat = bn_func(self, self.i_lmn_eq[i_func], bn_mat, *args[:4])\n            return bn_mat\n\n        return bn\n\n    def create_gn(self) -> func_type:\n        def gn(*args: jarr) -> jarr:\n            gn_mat = jnp.zeros(self.num_lm_tot)\n            for i_func, gn_func in enumerate(self.gn_funcs):\n                if gn_func is not None:\n                    gn_mat = gn_func(self, self.i_lmn_eq[i_func], gn_mat, *args[:4])\n            return gn_mat\n\n        return gn\n\n    def create_run(self):\n        def run(q: jarr, q_dot: jarr, u: jarr, u_dot: jarr, lmh: jarr, lmn: jarr) -> tuple[jarr, jarr, jarr]:\n            args = (q, q_dot, u, u_dot, lmh, lmn)\n\n            c = jnp.zeros((self.num_eq_tot, self.num_eq_tot))\n            c = c.at[jnp.ix_(self.q_i_global, self.q_i_global)].add(self.jac_func(self.bht_lmh, 1)(*args))\n            c = c.at[jnp.ix_(self.q_i_global, self.q_i_global)].add(self.jac_func(self.bnt_lmn, 1)(*args))\n            c = c.at[jnp.ix_(self.q_i_global, self.i_lm_tot)].add(self.bnt(*args))\n            c = c.at[jnp.ix_(self.i_lm_tot, self.q_i_global)].add(self.s_fact * (self.jac_func(self.c, 1)(*args)))\n            c = c.at[jnp.ix_(self.i_lm_tot, self.q_i_global)].add(self.s_fact * (self.jac_func(self.d, 1)(*args)))\n\n            k = jnp.zeros((self.num_eq_tot, self.num_eq_tot))\n            k = k.at[jnp.ix_(self.q_i_global, self.q_i_global)].add(self.jac_func(self.bht_lmh, 0)(*args))\n            k = k.at[jnp.ix_(self.q_i_global, self.q_i_global)].add(self.jac_func(self.bnt_lmn, 0)(*args))\n            k = k.at[jnp.ix_(self.q_i_global, self.i_lm_tot)].add(self.bht(*args))\n            k = k.at[jnp.ix_(self.i_lm_tot, self.q_i_global)].add(self.s_fact * (self.jac_func(self.c, 0)(*args)))\n            k = k.at[jnp.ix_(self.i_lm_tot, self.q_i_global)].add(self.s_fact * (self.jac_func(self.d, 0)(*args)))\n\n            rhs = jnp.zeros(self.num_eq_tot)\n            rhs = rhs.at[self.q_i_global].add(self.bht_lmh(*args) + self.bnt_lmn(*args))\n            rhs = rhs.at[self.i_lm_tot].add(self.s_fact * (self.c(*args) + self.d(*args)))\n\n            if self.use_p_fact:\n                c = c.at[jnp.ix_(self.q_i_global, self.q_i_global)].add(self.p_fact * (self.jac_func(self.p_func_h, 1)(*args)))\n                c = c.at[jnp.ix_(self.q_i_global, self.q_i_global)].add(self.p_fact * (self.jac_func(self.p_func_n, 1)(*args)))\n                k = k.at[jnp.ix_(self.q_i_global, self.q_i_global)].add(self.p_fact * (self.jac_func(self.p_func_h, 0)(*args)))\n                k = k.at[jnp.ix_(self.q_i_global, self.q_i_global)].add(self.p_fact * (self.jac_func(self.p_func_n, 0)(*args)))\n                rhs = rhs.at[self.q_i_global].add(self.p_fact * (self.p_func_h(*args) + self.p_func_n(*args)))\n            return c, k, rhs\n\n        return run\n\n\ndef combine_constraints(csts: list[Constraint]) -> Callable:\n    def combined_run(q: jarr, q_dot: jarr, u: list[None | jarr, ...], u_dot: list[None | jarr, ...], lmh: jarr,\n                     lmn: jarr) -> tuple[jarr, jarr, jarr]:\n        q_i = [cst.q_i_global for cst in csts]\n\n        n_cst = len(csts)\n        out_mats = [csts[i_cst].run(q[q_i[i_cst]], q_dot[q_i[i_cst]], u[i_cst], u_dot[i_cst], lmh, lmn)\n                    for i_cst in range(n_cst)]\n        c = jnp.sum(jnp.array([out_mats[i][0] for i in range(n_cst)]), axis=0)\n        k = jnp.sum(jnp.array([out_mats[i][1] for i in range(n_cst)]), axis=0)\n        rhs = jnp.sum(jnp.array([out_mats[i][2] for i in range(n_cst)]), axis=0)\n        return c, k, rhs\n\n    return jax.jit(combined_run) if USE_JIT else combined_run\n\n\nclass BaseFunc(ABC):\n    n_eq = 3\n\n\nclass CstFuncs(ABC):\n    class EqualNodeFoR(BaseFunc):\n        @staticmethod\n        def b_lin_vel(constraint_: Constraint, i_lm: slice, b: jarr, q: jarr, q_dot: jarr, u: jarr, u_dot: jarr) \\\n                -> jarr:\n            b = b.at[i_lm, constraint_.i_r0].add(\n                -Rot.from_quat(q_dot[constraint_.i_quat0]).as_matrix())\n            b = b.at[i_lm, constraint_.i_v0].add(\n                -Rot.from_quat(q_dot[constraint_.i_quat0]).as_matrix())\n            b = b.at[i_lm, constraint_.i_v1].add(\n                Rot.from_quat(q_dot[constraint_.i_quat1]).as_matrix())\n            b = b.at[i_lm, constraint_.i_omega0].add(\n                Rot.from_quat(q_dot[constraint_.i_quat0]).as_matrix() @ skew(q[constraint_.i_r0]))\n            return b\n\n        @staticmethod\n        def b_ang_vel(constraint_: Constraint, i_lm: slice, b: jarr, q: jarr, q_dot: jarr, u: jarr, u_dot: jarr) \\\n                -> jarr:\n            b = b.at[i_lm, constraint_.i_psi0].add(crv2tan(q[constraint_.i_psi0]))\n            b = b.at[i_lm, constraint_.i_omega1].add(-crv2rot(q[constraint_.i_psi0]).T\n                                                     @ Rot.from_quat(q_dot[constraint_.i_quat0]).as_matrix().T\n                                                     @ Rot.from_quat(q_dot[constraint_.i_quat1]).as_matrix())\n            b = b.at[i_lm, constraint_.i_omega0].add(crv2rot(q[constraint_.i_psi0]).T)\n            return b\n\n    class ControlFoR(BaseFunc):\n        @staticmethod\n        def b_ang_vel(constraint_: Constraint, i_lm: slice, b: jarr, q: jarr, q_dot: jarr, u: jarr, u_dot: jarr) \\\n                -> jarr:\n            return b.at[i_lm, constraint_.i_omega1].add(jnp.eye(3))\n\n        @staticmethod\n        def g_ang_vel(constraint_: Constraint, i_lm: slice, g: jarr, q: jarr, q_dot: jarr, u: jarr, u_dot: jarr) \\\n                -> jarr:\n            return g.at[i_lm].add(-crv2tan(u) @ u_dot)\n\n    class ControlNodeFoR(EqualNodeFoR):\n        @staticmethod\n        def g_ang_vel(constraint_: Constraint, i_lm: slice, g: jarr, q: jarr, q_dot: jarr, u: jarr, u_dot: jarr) \\\n                -> jarr:\n            return g.at[i_lm].add(crv2rot(u).T @ crv2tan(u) @ u_dot)\n\n    class ZeroFoR(BaseFunc):\n        @staticmethod\n        def b_lin_vel(constraint_: Constraint, i_lm: slice, b: jarr, q: jarr, q_dot: jarr, u: jarr, u_dot: jarr) \\\n                -> jarr:\n            return b.at[i_lm, constraint_.i_v1].add(jnp.eye(3))\n\n        @staticmethod\n        def b_ang_vel(constraint_: Constraint, i_lm: slice, b: jarr, q: jarr, q_dot: jarr, u: jarr, u_dot: jarr) \\\n                -> jarr:\n            return b.at[i_lm, constraint_.i_omega1].add(jnp.eye(3))\n\n    class HingeNodeFoR(BaseFunc):\n        n_eq = 2\n\n        @staticmethod\n        def b_ang_vel(constraint_: Constraint, i_lm: slice, b: jarr, q: jarr, q_dot: jarr, u: jarr, u_dot: jarr) \\\n                -> jarr:\n            r_ax_a = jnp.array(constraint_.settings['rot_axisA2'])\n            r_ax_a /= jnp.linalg.norm(r_ax_a)\n            a_skew = skew(r_ax_a)\n\n            r_ax_b = jnp.array(constraint_.settings['rot_axisB'])\n            r_ax_b /= jnp.linalg.norm(r_ax_b)\n            b_skew = skew(r_ax_b)\n\n            rot_psi = crv2rot(q[constraint_.i_psi0])\n\n            aux = (rot_psi.T @ Rot.from_quat(q[constraint_.i_quat0]).as_matrix().T\n                   @ Rot.from_quat(q[constraint_.i_quat1]).as_matrix()) @ a_skew\n\n            aux_norms = jnp.linalg.norm(aux, axis=1)\n            dirs = jnp.array(((1, 2), (0, 2), (0, 1)))[jnp.argmin(aux_norms)]\n\n            b = b.at[i_lm, constraint_.i_omega0].add((b_skew @ rot_psi.T)[dirs, :])\n            b = b.at[i_lm, constraint_.i_psi0].add((b_skew @ crv2tan(q[constraint_.i_psi0]))[dirs, :])\n            b = b.at[i_lm, constraint_.i_omega1].add(-aux[dirs, :])\n            return b\n\n    class HingeFoR(BaseFunc):\n        n_eq = 2\n\n        @classmethod\n        def b_ang_vel(cls, constraint_: Constraint, i_lm: slice, b: jarr, q: jarr, q_dot: jarr, u: jarr, u_dot: jarr) \\\n                -> jarr:\n            axis = jnp.array(constraint_.settings['rot_axis_AFoR'])\n            axis = axis / jnp.linalg.norm(axis)\n            axis_skew = skew(axis)\n            dirs = jnp.array(((1, 2), (0, 2), (0, 1)))[jnp.argmax(axis)]  # directions for axis matrix\n            i_omega1_indep = jnp.arange(constraint_.i_omega1[0], constraint_.i_omega1[2] + 1)[dirs]\n\n            b = jax.lax.cond(jnp.abs(jnp.linalg.norm(axis) - 1.) < 1e-6,\n                             lambda: b.at[i_lm, i_omega1_indep].add(jnp.eye(2)),\n                             lambda: b.at[i_lm, constraint_.i_omega1].add(axis_skew[dirs, :]))\n            return b\n\n\ndef move_for_to_node(constraint_: Constraint, mb_beam, mb_tstep) -> None:\n    i_body_node = constraint_.settings['body']  # beam number which contains node\n    i_node = constraint_.settings['node_in_body']  # node number in beam\n    i_body_for = constraint_.settings['body_FoR']\n    rel_pos_b = constraint_.settings.get('rel_posB', np.zeros(3))\n\n    i_elem, i_node_in_elem = mb_beam[i_body_node].node_master_elem[i_node]\n    c_ga = mb_tstep[i_body_node].cga()\n    c_ab = sp.spatial.transform.Rotation.from_rotvec(mb_tstep[i_body_node].psi[i_elem, i_node_in_elem, :]).as_matrix()\n\n    mb_tstep[i_body_for].for_pos[:3] = (c_ga @ (mb_tstep[i_body_node].pos[i_node, :] + c_ab @ rel_pos_b)\n                                        + mb_tstep[i_body_node].for_pos[:3])\n\n\n@constraint\nclass FullyConstrainedNodeFoR(Constraint):\n    lc_id = 'fully_constrained_node_FoR'\n    required_params = ('node_in_body', 'body', 'body_FoR')\n    bn_funcs = (CstFuncs.EqualNodeFoR.b_lin_vel, CstFuncs.EqualNodeFoR.b_ang_vel)\n    gn_funcs = (None, None)\n    num_lmn_eq = (CstFuncs.EqualNodeFoR.n_eq, CstFuncs.EqualNodeFoR.n_eq)\n    postproc_funcs = (move_for_to_node,)\n\n\n@constraint\nclass FullyConstrainedFoR(Constraint):\n    lc_id = 'fully_constrained_FoR'\n    required_params = ('body_FoR',)\n    bn_funcs = (CstFuncs.ZeroFoR.b_lin_vel, CstFuncs.ZeroFoR.b_ang_vel)\n    gn_funcs = (None, None)\n    num_lmn_eq = (CstFuncs.ZeroFoR.n_eq, CstFuncs.ZeroFoR.n_eq)\n\n\n@constraint\nclass SphericalFoR(Constraint):\n    lc_id = 'spherical_FoR'\n    required_params = ('body_FoR',)\n    bn_funcs = (CstFuncs.ZeroFoR.b_lin_vel,)\n    gn_funcs = (None,)\n    num_lmn_eq = (CstFuncs.ZeroFoR.n_eq,)\n\n\n@constraint\nclass Free(Constraint):\n    lc_id = 'free'\n\n\n@constraint\nclass ControlledRotNodeFoR(Constraint):\n    lc_id = 'control_node_FoR_rot_vel'\n    required_params = ('controller_id', 'node_in_body', 'body', 'body_FoR')\n    bn_funcs = (CstFuncs.ControlNodeFoR.b_lin_vel, CstFuncs.ControlNodeFoR.b_ang_vel)\n    gn_funcs = (None, CstFuncs.ControlNodeFoR.g_ang_vel)\n    num_lmn_eq = (CstFuncs.ControlNodeFoR.n_eq, CstFuncs.ControlNodeFoR.n_eq)\n    postproc_funcs = (move_for_to_node,)\n\n\n@constraint\nclass ControlledRotFoR(Constraint):\n    lc_id = 'control_rot_vel_FoR'\n    required_params = ('controller_id', 'body_FoR')\n    bn_funcs = (CstFuncs.ZeroFoR.b_lin_vel, CstFuncs.ControlFoR.b_ang_vel)\n    gn_funcs = (None, CstFuncs.ControlFoR.g_ang_vel)\n    num_lmn_eq = (CstFuncs.ZeroFoR.n_eq, CstFuncs.ControlFoR.n_eq)\n\n\n@constraint\nclass HingeFoR(Constraint):\n    lc_id = 'hinge_FoR'\n    required_params = ('body_FoR', 'rot_axis_AFoR')\n    bn_funcs = (CstFuncs.ZeroFoR.b_lin_vel, CstFuncs.HingeFoR.b_ang_vel)\n    gn_funcs = (None, None)\n    num_lmn_eq = (CstFuncs.ZeroFoR.n_eq, CstFuncs.HingeFoR.n_eq)\n\n\n@constraint\nclass SphericalNodeFor(Constraint):\n    lc_id = 'spherical_node_FoR'\n    required_params = ('body', 'body_FoR', 'node_in_body')\n    bn_funcs = (CstFuncs.EqualNodeFoR.b_lin_vel, )\n    gn_funcs = (None, )\n    num_lmn_eq = (CstFuncs.EqualNodeFoR.n_eq, )\n    postproc_funcs = (move_for_to_node,)\n\n\n@constraint\nclass HingeNodeFoR(Constraint):\n    lc_id = 'hinge_node_FoR'\n    required_params = ('body', 'body_FoR', 'node_in_body', 'rot_axisA2', 'rot_axisB')\n    bn_funcs = (CstFuncs.EqualNodeFoR.b_lin_vel, CstFuncs.HingeNodeFoR.b_ang_vel)\n    gn_funcs = (None, None)\n    num_lmn_eq = (CstFuncs.EqualNodeFoR.n_eq, CstFuncs.HingeNodeFoR.n_eq)\n    postproc_funcs = (move_for_to_node,)\n\n\nif __name__ == '__main__':\n    print(\"Available constraints:\")\n    for constraint in DICT_OF_LC.values():\n        print(constraint.lc_id)\n"
  },
  {
    "path": "sharpy/structure/utils/modalutils.py",
    "content": "import numpy as np\nimport sharpy.utils.cout_utils as cout\nimport sharpy.utils.algebra as algebra\n\nfrom sharpy.utils.plotutils import plot_frame_to_vtk\n\ndef frequency_damping(eigenvalue):\n    omega_n = np.abs(eigenvalue)\n    omega_d = np.abs(eigenvalue.imag)\n    f_n = omega_n / 2 / np.pi\n    f_d = omega_d / 2 / np.pi\n    if f_d < 1e-8:\n        damping_ratio = 1.\n        period = np.inf\n    else:\n        damping_ratio = -eigenvalue.real / omega_n\n        period = 1 / f_d\n\n    return omega_n, omega_d, damping_ratio, f_n, f_d, period\n\n\nclass EigenvalueTable(cout.TablePrinter):\n    def __init__(self, filename=None):\n        super().__init__(7, 12, ['g', 'f', 'f', 'f', 'f', 'f', 'f'], filename)\n\n        self.headers = ['mode', 'eval_real', 'eval_imag', 'freq_n (Hz)', 'freq_d (Hz)',\n                        'damping', 'period (s)']\n\n    def print_evals(self, eigenvalues):\n        for i in range(len(eigenvalues)):\n            omega_n, omega_d, damping_ratio, f_n, f_d, period = frequency_damping(eigenvalues[i])\n            self.print_line([i, eigenvalues[i].real, eigenvalues[i].imag, f_n, f_d,\n                             damping_ratio, period])\n\n\ndef cg(M, use_euler=False):\n    if use_euler:\n        Mrr = M[-9:, -9:]\n    else:\n        Mrr = M[-10:, -10:]\n    return -np.array([Mrr[2, 4], Mrr[0, 5], Mrr[1, 3]]) / Mrr[0, 0]\n\n\ndef scale_mode(data, eigenvector, rot_max_deg=15.0, perc_max=0.15):\n    \"\"\"\n    Scales the eigenvector such that:\n        1) the maximum change in component of the beam cartesian rotation vector\n    is equal to rot_max_deg degrees.\n        2) the maximum translational displacement does not exceed perc_max the\n    maximum nodal position.\n\n    Warning:\n        If the eigenvector is in state-space form, only the first\n        half of the eigenvector is scanned for determining the scaling.\n    \"\"\"\n\n    ### initialise\n    struct = data.structure\n    tsstr = data.structure.timestep_info[data.ts]\n\n    jj = 0  # structural dofs index\n    RotMax = 0.0\n    RaMax = 0.0\n    dRaMax = 0.0\n\n    for node_glob in range(struct.num_node):\n        ### detect bc at node (and no. of dofs)\n        bc_here = struct.boundary_conditions[node_glob]\n        if bc_here == 1:  # clamp\n            dofs_here = 0\n            continue\n        elif bc_here == -1 or bc_here == 0:\n            dofs_here = 6\n            jj_tra = [jj, jj + 1, jj + 2]\n            jj_rot = [jj + 3, jj + 4, jj + 5]\n        jj += dofs_here\n\n        # check for max rotation\n        RotMaxHere = np.max(np.abs(eigenvector[jj_rot].real))\n        if RotMaxHere > RotMax:\n            RotMax = RotMaxHere\n\n        # check for maximum position\n        RaNorm = np.linalg.norm(tsstr.pos[node_glob, :])\n        if RaNorm > RaMax:\n            RaMax = RaNorm\n\n        # check for maximum displacement\n        dRaNorm = np.linalg.norm(eigenvector[jj_tra].real)\n        if dRaNorm > dRaMax:\n            dRaMax = dRaNorm\n\n    RotMaxDeg = RotMax * 180 / np.pi\n\n    if RotMaxDeg > 1e-4:\n        fact = rot_max_deg / RotMaxDeg\n        if dRaMax * fact > perc_max * RaMax:\n            fact = perc_max * RaMax / dRaMax\n    else:\n        fact = perc_max * RaMax / dRaMax\n    # correct factor to ensure max disp is perc\n    return fact\n\n\ndef get_mode_zeta(data, eigvect):\n    \"\"\"\n    Retrieves the UVLM grid nodal displacements associated to the eigenvector ``eigvect``\n    \"\"\"\n\n    ### initialise\n    aero = data.aero\n    struct = data.structure\n    tsaero = data.aero.timestep_info[data.ts]\n    tsstr = data.structure.timestep_info[data.ts]\n\n    try:\n        num_dof = struct.num_dof.value\n    except AttributeError:\n        num_dof = struct.num_dof\n\n    eigvect = eigvect[:num_dof]\n\n    zeta_mode = []\n    for ss in range(aero.n_surf):\n        zeta_mode.append(tsaero.zeta[ss].copy())\n\n    jj = 0  # structural dofs index\n    Cga0 = algebra.quat2rotation(tsstr.quat)\n    Cag0 = Cga0.T\n    for node_glob in range(struct.num_node):\n\n        ### detect bc at node (and no. of dofs)\n        bc_here = struct.boundary_conditions[node_glob]\n        if bc_here == 1:  # clamp\n            dofs_here = 0\n            continue\n        elif bc_here == -1 or bc_here == 0:\n            dofs_here = 6\n            jj_tra = [jj, jj + 1, jj + 2]\n            jj_rot = [jj + 3, jj + 4, jj + 5]\n        jj += dofs_here\n\n        # retrieve element and local index\n        ee, node_loc = struct.node_master_elem[node_glob, :]\n\n        # get original position and crv\n        Ra0 = tsstr.pos[node_glob, :]\n        psi0 = tsstr.psi[ee, node_loc, :]\n        Rg0 = np.dot(Cga0, Ra0)\n        Cab0 = algebra.crv2rotation(psi0)\n        Cbg0 = np.dot(Cab0.T, Cag0)\n\n        # update position and crv of mode\n        Ra = tsstr.pos[node_glob, :] + eigvect[jj_tra]\n        psi = tsstr.psi[ee, node_loc, :] + eigvect[jj_rot]\n        Rg = np.dot(Cga0, Ra)\n        Cab = algebra.crv2rotation(psi)\n        Cbg = np.dot(Cab.T, Cag0)\n\n        ### str -> aero mapping\n        # some nodes may be linked to multiple surfaces...\n        for str2aero_here in aero.struct2aero_mapping[node_glob]:\n\n            # detect surface/span-wise coordinate (ss,nn)\n            nn, ss = str2aero_here['i_n'], str2aero_here['i_surf']\n            # print('%.2d,%.2d'%(nn,ss))\n\n            # surface panelling\n            M = aero.dimensions[ss][0]\n            N = aero.dimensions[ss][1]\n\n            for mm in range(M + 1):\n                # get position of vertex in B FoR\n                zetag0 = tsaero.zeta[ss][:, mm, nn]  # in G FoR, w.r.t. origin A-G\n                Xb = np.dot(Cbg0, zetag0 - Rg0)  # in B FoR, w.r.t. origin B\n\n                # update vertex position\n                zeta_mode[ss][:, mm, nn] = Rg + np.dot(np.dot(Cga0, Cab), Xb)\n\n    return zeta_mode\n\n\ndef write_zeta_vtk(zeta, zeta_ref, filename_root):\n    \"\"\"\n    Given a list of arrays representing the coordinates of a set of n_surf UVLM\n    lattices and organised as:\n        zeta[n_surf][3,M+1,N=1]\n    this function writes a vtk for each of the n_surf surfaces.\n\n    Args:\n        zeta (np.array): lattice coordinates to plot\n        zeta_ref (np.array): reference lattice used to compute the magnitude of displacements\n        filename_root (str): initial part of filename (full path) without file extension\n    \"\"\"\n\n    for i_surf in range(len(zeta)):\n\n        filename = f\"{filename_root}_{i_surf:02d}.vtu\"\n\n        this_zeta = np.swapaxes(zeta[i_surf], 0, -1)\n        this_zeta_ref = np.swapaxes(zeta_ref[i_surf], 0, -1)\n        disp = np.linalg.norm(this_zeta - this_zeta_ref, axis=-1)\n        panel_surf_id = np.ones((this_zeta.shape[0]-1, this_zeta.shape[1]-1), dtype=int) * i_surf\n\n        plot_frame_to_vtk(this_zeta,\n                          filename,\n                          node_scalar_data={'point_displacement_magnitude': disp},\n                            cell_scalar_data={'panel_surface_id': panel_surf_id})\n\n\ndef write_modes_vtk(data, eigenvectors, num_lambda, filename_root,\n                    rot_max_deg=15., perc_max=0.15, ts=-1):\n    \"\"\"\n    Writes a vtk file for each of the first ``num_lambda`` eigenvectors. When these\n    are associated to the state-space form of the structural equations, only\n    the displacement field is saved.\n    \"\"\"\n\n    # initialise\n    struct = data.structure\n    tsaero = data.aero.timestep_info[ts]\n    num_dof = struct.num_dof.value\n    eigenvectors = eigenvectors[:num_dof, :]\n\n    # skip rigid body modes\n    num_rigid_body = 10 if data.settings['Modal']['rigid_body_modes'] else 0\n\n    for mode in range(num_rigid_body, num_lambda):\n        # scale eigenvector\n        eigvec = eigenvectors[:num_dof, mode]\n        fact = scale_mode(data, eigvec, rot_max_deg, perc_max)\n        eigvec = eigvec * fact\n        zeta_mode = get_mode_zeta(data, eigvec)\n        write_zeta_vtk(zeta_mode, tsaero.zeta, f\"{filename_root}_{mode:06d}\")\n\n\ndef free_modes_principal_axes(phi, mass_matrix, use_euler=False, **kwargs):\n    \"\"\"\n    Transforms the rigid body modes defined at with the A frame as reference to the centre of mass position and aligned\n    with the principal axes of inertia.\n\n    Args:\n        phi (np.array): Eigenvectors defined at the ``A`` frame.\n        mass_matrix (np.array): System mass matrix\n        use_euler (bool): Use Euler rotation parametrisation rather than quaternions.\n\n    Keyword Args:\n        return_transform (bool): Return tuple containing transformed modes and the transformation from the ``A`` frame\n          to the ``P`` frame.\n\n    Returns:\n        np.array: Mass normalised modes with rigid modes defined at the centre of gravity and aligned with the\n          principal axes of inertia.\n\n    References:\n        Marc Artola, 2020\n    \"\"\"\n    if use_euler:\n        num_rigid_modes = 9\n    else:\n        num_rigid_modes = 10\n\n    r_cg = cg(mass_matrix, use_euler)  # centre of gravity\n    mrr = mass_matrix[-num_rigid_modes:-num_rigid_modes + 6, -num_rigid_modes:-num_rigid_modes + 6]\n    m = mrr[0, 0]  # mass\n\n    # principal axes of inertia matrix and transformation matrix\n    j_cm, t_rb = principal_axes_inertia(mrr[-3:, -3:], r_cg, m)\n\n    # rigid body mass matrix about CM and inertia in principal axes\n    m_cm = np.eye(6) * m\n    m_cm[-3:, -3:] = np.diag(j_cm)\n\n    # rigid body modes about CG - mass normalised\n    rb_cm = np.eye(6)\n    rb_cm /= np.sqrt(np.diag(rb_cm.T.dot(m_cm.dot(rb_cm))))\n\n    # transform to A frame reference position\n    trb_diag = np.zeros((6, 6))  # matrix with (t_rb, t_rb) in the diagonal\n    trb_diag[:3, :3] = t_rb\n    trb_diag[-3:, -3:] = t_rb\n    rb_a = np.block([[np.eye(3), algebra.skew(r_cg)], [np.zeros((3, 3)), np.eye(3)]]).dot(trb_diag.dot(rb_cm))\n\n    phit = np.block([np.zeros((phi.shape[0], num_rigid_modes)), phi[:, num_rigid_modes:]])\n    phit[-num_rigid_modes:-num_rigid_modes + 6, :6] = rb_a\n\n    phit[-num_rigid_modes + 6:, 6:num_rigid_modes] = np.eye(num_rigid_modes - 6)  # euler or quaternion modes\n\n    if kwargs.get('return_transform', False):\n        return phit, t_rb, np.block([[np.eye(3), algebra.skew(r_cg)], [np.zeros((3, 3)), np.eye(3)]]).dot(trb_diag)\n    else:\n        return phit\n\n\ndef principal_axes_inertia(j_a, r_cg, m):\n    r\"\"\"\n    Transform the inertia tensor :math:`\\boldsymbol{j}_a` defined about the ``A`` frame of reference to the centre of\n    gravity and aligned with the principal axes of inertia.\n\n    The inertia tensor about the centre of gravity is obtained using the parallel axes theorem\n\n    .. math:: \\boldsymbol{j}_{cm}  = \\boldsymbol{j}_a + \\tilde{r}_{cg}\\tilde{r}_{cg}m\n\n    and rotated such that it is aligned with its eigenvectors and thus represents the inertia tensor about the principal\n    axes of inertia\n\n    .. math:: \\boldsymbol{j}_p = T_{pa}^\\top \\boldsymbol{j}_{cm} T^{pa}\n\n    where :math:`T^{pa}` is the transformation matrix from the ``A`` frame to the principal axes ``P`` frame.\n\n    Args:\n        j_a (np.array): Inertia tensor defined about the ``A`` frame.\n        r_cg (np.array): Centre of gravity position defined in ``A`` coordinates.\n        m (float): Mass.\n\n    Returns:\n        tuple: Containing :math:`\\boldsymbol{j}_p` and :math:`T^{pa}`\n\n    \"\"\"\n\n    j_p, t_pa = np.linalg.eig(j_a + algebra.skew(r_cg) @ (algebra.skew(r_cg)) * m)\n\n    t_pa, j_p = order_eigenvectors(t_pa, j_p)\n\n    return j_p, t_pa\n\n\ndef mode_sign_convention(bocos, eigenvectors, rigid_body_motion=False, use_euler=False):\n    \"\"\"\n    When comparing against different cases, it is important that the modes share a common sign convention.\n\n    In this case, modes will be arranged such that the z-coordinate of the first free end is positive.\n\n    If the z-coordinate is 0, then the y-coordinate is forced to be positive, then x, followed by the CRV in y, x and z.\n\n    Returns:\n        np.ndarray: Eigenvectors following the aforementioned sign convention.\n    \"\"\"\n\n    if use_euler:\n        num_rigid_modes = 9\n    else:\n        num_rigid_modes = 10\n\n    if rigid_body_motion:\n        eigenvectors = order_rigid_body_modes(eigenvectors, use_euler)\n\n        # A frame reference\n        z_coord = -num_rigid_modes + 2\n        y_coord = -num_rigid_modes + 1\n        x_coord = -num_rigid_modes + 0\n        mz_coord = -num_rigid_modes + 5\n        my_coord = -num_rigid_modes + 4\n        mx_coord = -num_rigid_modes + 3\n    else:\n        first_free_end_node = np.where(bocos == -1)[0][0]\n\n        z_coord = 6 * (first_free_end_node - 1) + 2\n        y_coord = 6 * (first_free_end_node - 1) + 1\n        x_coord = 6 * (first_free_end_node - 1) + 0\n        my_coord = 6 * (first_free_end_node - 1) + 4\n        mz_coord = 6 * (first_free_end_node - 1) + 5\n        mx_coord = 6 * (first_free_end_node - 1) + 3\n\n    for i in range(0, eigenvectors.shape[1]):\n        if np.abs(eigenvectors[z_coord, i]) > 1e-8:\n            eigenvectors[:, i] = np.sign(eigenvectors[z_coord, i]) * eigenvectors[:, i]\n\n        elif np.abs(eigenvectors[y_coord, i]) > 1e-8:\n            eigenvectors[:, i] = np.sign(eigenvectors[y_coord, i]) * eigenvectors[:, i]\n\n        elif np.abs(eigenvectors[x_coord, i]) > 1e-8:\n            eigenvectors[:, i] = np.sign(eigenvectors[x_coord, i]) * eigenvectors[:, i]\n\n        elif np.abs(eigenvectors[my_coord, i]) > 1e-8:\n            eigenvectors[:, i] = np.sign(eigenvectors[my_coord, i]) * eigenvectors[:, i]\n\n        elif np.abs(eigenvectors[mx_coord, i]) > 1e-8:\n            eigenvectors[:, i] = np.sign(eigenvectors[mx_coord, i]) * eigenvectors[:, i]\n\n        elif np.abs(eigenvectors[mz_coord, i]) > 1e-8:\n            eigenvectors[:, i] = np.sign(eigenvectors[mz_coord, i]) * eigenvectors[:, i]\n\n        else:\n            if rigid_body_motion:\n                if not np.max(np.abs(eigenvectors[-num_rigid_modes+6:, i])) == 1.0: # orientation mode, either euler/quat\n                    cout.cout_wrap('Implementing mode sign convention. Mode {:g} component at the A frame is 0.'.format(i), 3)\n            else:\n                # cout.cout_wrap('Mode component at the first free end (node {:g}) is 0.'.format(first_free_end_node), 3)\n\n                # this will be the case for symmetric clamped structures, where modes will be present for the left and\n                # right wings. Method should be called again when symmetric modes are removed.\n                pass\n\n    return eigenvectors\n\n\ndef order_rigid_body_modes(eigenvectors, use_euler):\n\n    if use_euler:\n        num_rigid_modes = 9\n    else:\n        num_rigid_modes = 10\n\n    phi_rr = np.zeros((num_rigid_modes, num_rigid_modes))\n    num_node = eigenvectors.shape[0]\n\n    for i in range(num_rigid_modes):\n        index_max_node = np.where(eigenvectors[:, i] == np.max(eigenvectors[:, i]))[0][0]\n        index_mode = num_rigid_modes - (num_node - index_max_node)\n        phi_rr[:, index_mode] = eigenvectors[-num_rigid_modes:, i]\n\n    eigenvectors[-num_rigid_modes:, :num_rigid_modes] = phi_rr\n\n    return eigenvectors\n\n\ndef order_eigenvectors(eigenvectors, eigenvalues):\n    ordered_eigenvectors = np.zeros_like(eigenvectors)\n    new_order = []\n    for i in range(eigenvectors.shape[1]):\n        index_max_node = np.where(np.abs(eigenvectors[:, i]) == np.max(np.abs(eigenvectors[:, i])))[0][0]\n        ordered_eigenvectors[:, index_max_node] = eigenvectors[:, i] * np.sign(eigenvectors[index_max_node, i])\n        new_order.append(index_max_node)\n\n    try:\n        eigenvalues.shape[1]\n    except IndexError:\n        new_eigenvalues = eigenvalues[new_order]\n    else:\n        new_eigenvalues = eigenvalues[:, new_order]\n\n    return ordered_eigenvectors, new_eigenvalues\n\n\ndef scale_mass_normalised_modes(eigenvectors, mass_matrix):\n    r\"\"\"\n    Scales eigenvector matrix such that the modes are mass normalised:\n\n    .. math:: \\phi^\\top\\boldsymbol{M}\\phi = \\boldsymbol{I}\n\n    and\n\n    .. math:: \\phi^\\top\\boldsymbol{K}\\phi = \\mathrm{diag}(\\omega^2)\n\n    Args:\n        eigenvectors (np.array): Eigenvector matrix.\n        mass_matrix (np.array): Mass matrix.\n\n    Returns:\n        np.array: Mass-normalised eigenvectors.\n    \"\"\"\n    # mass normalise (diagonalises M and K)\n    dfact = np.diag(np.dot(eigenvectors.T, np.dot(mass_matrix, eigenvectors)))\n    eigenvectors = (1./np.sqrt(dfact))*eigenvectors\n\n    return eigenvectors\n\n\ndef assert_orthogonal_eigenvectors(u, v, decimal, raise_error=False):\n    \"\"\"\n    Checks orthogonality between eigenvectors\n\n    Args:\n        u (np.ndarray): Eigenvector 1.\n        v (np.ndarray): Eigenvector 2.\n        decimal (int): Number of decimal points to compare\n        raise_error (bool): Raise an error or print a warning\n\n    Raises:\n        AssertionError: if ``raise_error == True`` it raises an error.\n\n    \"\"\"\n    try:\n        np.testing.assert_almost_equal(u.dot(v), 0, decimal=decimal,\n                                       err_msg='Eigenvectors not orthogonal')  # random eigenvector to test orthonality\n    except AssertionError as e:\n        if raise_error:\n            raise e\n        else:\n            cout.cout_wrap('Eigenvectors not orthogonal', 3)\n\n\ndef assert_modes_mass_normalised(phi, m, tolerance, raise_error=False):\n    \"\"\"\n    Asserts the eigenvectors result in an identity modal mass matrix.\n\n    Args:\n        phi (np.ndarray): Eigenvector matrix\n        m (np.ndarray): Mass matrix\n        tolerance (float): Absolute tolerance.\n        raise_error (bool): Raise ``AssertionError`` if modes not mass normalised.\n\n    Returns:\n        AssertionError: if ``raise_error == True`` it raises an error.\n\n    \"\"\"\n    modal_mass = phi.T.dot(m.dot(phi))\n\n    try:\n        np.testing.assert_allclose(modal_mass - np.eye(modal_mass.shape[0]), np.zeros_like(modal_mass),\n                                   atol=tolerance, err_msg='Eigenvectors are not mass normalised')\n    except AssertionError as e:\n        if raise_error:\n            raise e\n        else:\n            cout.cout_wrap('Eigenvectors are not mass normalised', 3)\n\n\ndef modes_to_cg_ref(phi, M, rigid_body_motion=False, use_euler=False):\n    r\"\"\"\n\n    Returns the rigid body modes defined with respect to the centre of gravity\n\n    The transformation from the modes defined at the FoR A origin, :math:`\\boldsymbol{\\Phi}`, to the modes defined\n    using the centre of gravity as a reference is\n\n\n    .. math:: \\boldsymbol{\\Phi}_{rr,CG}|_{TRA} = \\boldsymbol{\\Phi}_{RR}|_{TRA} + \\tilde{\\mathbf{r}}_{CG}\n        \\boldsymbol{\\Phi}_{RR}|_{ROT}\n\n    .. math:: \\boldsymbol{\\Phi}_{rr,CG}|_{ROT} = \\boldsymbol{\\Phi}_{RR}|_{ROT}\n\n    Returns:\n        (np.array): Transformed eigenvectors\n    \"\"\"\n    # if not rigid_body_motion:\n    #     return phi\n    # NG - 26/7/19 This is the transformation being performed by K_vec\n    # Leaving this here for now in case it becomes necessary\n    # .. math:: \\boldsymbol{\\Phi}_{ss,CG}|_{TRA} = \\boldsymbol{\\Phi}_{SS}|_{TRA} +\\boldsymbol{\\Phi}_{RS}|_{TRA}  -\n    # \\tilde{\\mathbf{r}}_{A}\\boldsymbol{\\Phi}_{RS}|_{ROT}\n    #\n    # .. math:: \\boldsymbol{\\Phi}_{ss,CG}|_{ROT} = \\boldsymbol{\\Phi}_{SS}|_{ROT}\n    # + (\\mathbf{T}(\\boldsymbol{\\Psi})^\\top)^{-1}\\boldsymbol{\\Phi}_{RS}|_{ROT}\n    # pos = self.data.structure.timestep_info[self.data.ts].pos\n    r_cg = cg(M)\n\n    # jj = 0\n    K_vec = np.zeros((phi.shape[0], phi.shape[0]))\n\n    # jj_for_vel = range(self.data.structure.num_dof.value, self.data.structure.num_dof.value + 3)\n    # jj_for_rot = range(self.data.structure.num_dof.value + 3, self.data.structure.num_dof.value + 6)\n\n    # for node_glob in range(self.data.structure.num_node):\n    #     ### detect bc at node (and no. of dofs)\n    #     bc_here = self.data.structure.boundary_conditions[node_glob]\n    #\n    #     if bc_here == 1:  # clamp (only rigid-body)\n    #         dofs_here = 0\n    #         jj_tra, jj_rot = [], []\n    #         continue\n    #\n    #     elif bc_here == -1 or bc_here == 0:  # (rigid+flex body)\n    #         dofs_here = 6\n    #         jj_tra = 6 * self.data.structure.vdof[node_glob] + np.array([0, 1, 2], dtype=int)\n    #         jj_rot = 6 * self.data.structure.vdof[node_glob] + np.array([3, 4, 5], dtype=int)\n    #     # jj_tra=[jj  ,jj+1,jj+2]\n    #     # jj_rot=[jj+3,jj+4,jj+5]\n    #     else:\n    #         raise NameError('Invalid boundary condition (%d) at node %d!' \\\n    #                         % (bc_here, node_glob))\n    #\n    #     jj += dofs_here\n    #\n    #     ee, node_loc = self.data.structure.node_master_elem[node_glob, :]\n    #     psi = self.data.structure.timestep_info[self.data.ts].psi[ee, node_loc, :]\n    #\n    #     Ra = pos[node_glob, :]  # in A FoR with respect to G\n    #\n    #     K_vec[np.ix_(jj_tra, jj_tra)] += np.eye(3)\n    #     K_vec[np.ix_(jj_tra, jj_for_vel)] += np.eye(3)\n    #     K_vec[np.ix_(jj_tra, jj_for_rot)] -= algebra.skew(Ra)\n    #\n    #     K_vec[np.ix_(jj_rot, jj_rot)] += np.eye(3)\n    #     K_vec[np.ix_(jj_rot, jj_for_rot)] += np.linalg.inv(algebra.crv2tan(psi).T)\n    # NG - 26/7/19 - Transformation of the rigid part of the elastic modes ended up not being necessary but leaving\n    # here in case it becomes useful in the future (using K_vec)\n\n    # Rigid-Rigid modes transform\n    if use_euler:\n        num_rig_dof = 9\n    else:\n        num_rig_dof = 10\n    Krr = np.eye(num_rig_dof)\n    Krr[np.ix_([0, 1, 2], [3, 4, 5])] += algebra.skew(r_cg)\n\n    # Assemble transformed modes\n    phirr = Krr.dot(phi[-num_rig_dof:, :num_rig_dof])\n    # phiss = K_vec.dot(phi[:, 10:])\n\n    # Get rigid body modes to be positive in translation and rotation\n    for i in range(num_rig_dof):\n        ind = np.argmax(np.abs(phirr[:, i]))\n        phirr[:, i] = np.sign(phirr[ind, i]) * phirr[:, i]\n\n    phit = np.block([np.zeros((phi.shape[0], num_rig_dof)), phi[:, num_rig_dof:]])\n    phit[-num_rig_dof:, :num_rig_dof] = phirr\n\n    return phit\n"
  },
  {
    "path": "sharpy/structure/utils/xbeamlib.py",
    "content": "import ctypes as ct\nimport numpy as np\nimport scipy as sc\nimport scipy.integrate\n\nimport sharpy.utils.algebra as algebra\nimport sharpy.utils.ctypes_utils as ct_utils\nfrom sharpy.utils.sharpydir import SharpyDir\n# from sharpy.utils.datastructures import StructTimeStepInfo\nimport sharpy.utils.cout_utils as cout\n\n\ntry:\n    xbeamlib = ct_utils.import_ctypes_lib(SharpyDir + '/xbeam', 'libxbeam')\nexcept OSError:\n    xbeamlib = ct_utils.import_ctypes_lib(SharpyDir + '/lib/xbeam/lib',\n    'libxbeam')\n\n# ctypes pointer types\ndoubleP = ct.POINTER(ct.c_double)\nintP = ct.POINTER(ct.c_int)\ncharP = ct.POINTER(ct.c_char_p)\n\n\nclass Xbopts(ct.Structure):\n    \"\"\"Structure skeleton for options input in xbeam\n\n    \"\"\"\n    _fields_ = [(\"FollowerForce\", ct.c_bool),\n                (\"FollowerForceRig\", ct.c_bool),\n                (\"PrintInfo\", ct.c_bool),\n                (\"OutInBframe\", ct.c_bool),\n                (\"OutInaframe\", ct.c_bool),\n                (\"ElemProj\", ct.c_int),\n                (\"MaxIterations\", ct.c_int),\n                (\"NumLoadSteps\", ct.c_int),\n                (\"NumGauss\", ct.c_int),\n                (\"Solution\", ct.c_int),\n                (\"DeltaCurved\", ct.c_double),\n                (\"MinDelta\", ct.c_double),\n                (\"abs_threshold\", ct.c_double),\n                (\"NewmarkDamp\", ct.c_double),\n                (\"gravity_on\", ct.c_bool),\n                (\"gravity\", ct.c_double),\n                (\"gravity_dir_x\", ct.c_double),\n                (\"gravity_dir_y\", ct.c_double),\n                (\"gravity_dir_z\", ct.c_double),\n                (\"balancing\", ct.c_bool),\n                (\"relaxation_factor\", ct.c_double),\n                ]\n\n    def __init__(self):\n        ct.Structure.__init__(self)\n        self.FollowerForce = ct.c_bool(True)\n        self.FollowerForceRig = ct.c_bool(True)\n        self.PrintInfo = ct.c_bool(True)\n        self.OutInBframe = ct.c_bool(False)\n        self.OutInaframe = ct.c_bool(True)\n        self.ElemProj = ct.c_int(0)\n        self.MaxIterations = ct.c_int(99)\n        self.NumLoadSteps = ct.c_int(5)\n        self.NumGauss = ct.c_int(0)\n        self.Solution = ct.c_int(111)\n        self.DeltaCurved = ct.c_double(1.0e-2)\n        self.MinDelta = ct.c_double(1.0e-8)\n        self.abs_threshold = ct.c_double(1.0e-13)\n        self.NewmarkDamp = ct.c_double(0.0)\n        self.gravity_on = ct.c_bool(False)\n        self.gravity = ct.c_double(0.0)\n        self.gravity_dir_x = ct.c_double(0.0)\n        self.gravity_dir_y = ct.c_double(0.0)\n        self.gravity_dir_z = ct.c_double(1.0)\n        self.balancing = ct.c_bool(False)\n        self.relaxation_factor = ct.c_double(0.3)\n\n\ndef cbeam3_solv_nlnstatic(beam, settings, ts):\n    \"\"\"@brief Python wrapper for f_cbeam3_solv_nlnstatic\n     Alfonso del Carre\n    \"\"\"\n    f_cbeam3_solv_nlnstatic = xbeamlib.cbeam3_solv_nlnstatic_python\n    f_cbeam3_solv_nlnstatic.restype = None\n\n    n_elem = ct.c_int(beam.num_elem)\n    n_nodes = ct.c_int(beam.num_node)\n    n_mass = ct.c_int(beam.n_mass)\n    n_stiff = ct.c_int(beam.n_stiff)\n\n    xbopts = Xbopts()\n    xbopts.PrintInfo = ct.c_bool(settings['print_info'])\n    xbopts.Solution = ct.c_int(112)\n    xbopts.MaxIterations = ct.c_int(settings['max_iterations'])\n    xbopts.NumLoadSteps = ct.c_int(settings['num_load_steps'])\n    xbopts.DeltaCurved = ct.c_double(settings['delta_curved'])\n    xbopts.MinDelta = ct.c_double(settings['min_delta'])\n    xbopts.abs_threshold = ct.c_double(settings['abs_threshold'])\n    xbopts.gravity_on = ct.c_bool(settings['gravity_on'])\n    xbopts.gravity = ct.c_double(settings['gravity'])\n    gravity_vector = np.dot(beam.timestep_info[ts].cag(), settings['gravity_dir'])\n    xbopts.gravity_dir_x = ct.c_double(gravity_vector[0])\n    xbopts.gravity_dir_y = ct.c_double(gravity_vector[1])\n    xbopts.gravity_dir_z = ct.c_double(gravity_vector[2])\n    xbopts.relaxation_factor = ct.c_double(settings['relaxation_factor'])\n\n    # here we only need to set the flags at True, all the forces are follower\n    xbopts.FollowerForce = ct.c_bool(True)\n    xbopts.FollowerForceRig = ct.c_bool(True)\n\n\n    f_cbeam3_solv_nlnstatic(ct.byref(n_elem),\n                            ct.byref(n_nodes),\n                            beam.fortran['num_nodes'].ctypes.data_as(intP),\n                            beam.fortran['num_mem'].ctypes.data_as(intP),\n                            beam.fortran['connectivities'].ctypes.data_as(intP),\n                            beam.fortran['master'].ctypes.data_as(intP),\n                            ct.byref(n_mass),\n                            beam.fortran['mass'].ctypes.data_as(doubleP),\n                            beam.fortran['mass_indices'].ctypes.data_as(intP),\n                            ct.byref(n_stiff),\n                            beam.fortran['stiffness'].ctypes.data_as(doubleP),\n                            beam.fortran['inv_stiffness'].ctypes.data_as(doubleP),\n                            beam.fortran['stiffness_indices'].ctypes.data_as(intP),\n                            beam.fortran['frame_of_reference_delta'].ctypes.data_as(doubleP),\n                            beam.fortran['rbmass'].ctypes.data_as(doubleP),\n                            beam.fortran['node_master_elem'].ctypes.data_as(intP),\n                            beam.fortran['vdof'].ctypes.data_as(intP),\n                            beam.fortran['fdof'].ctypes.data_as(intP),\n                            ct.byref(xbopts),\n                            beam.ini_info.pos.ctypes.data_as(doubleP),\n                            beam.ini_info.psi.ctypes.data_as(doubleP),\n                            beam.timestep_info[ts].pos.ctypes.data_as(doubleP),\n                            beam.timestep_info[ts].psi.ctypes.data_as(doubleP),\n                            beam.timestep_info[ts].steady_applied_forces.ctypes.data_as(doubleP),\n                            beam.timestep_info[ts].gravity_forces.ctypes.data_as(doubleP)\n                            )\n\n\ndef cbeam3_loads(beam, timestep):\n    \"\"\"Python wrapper for f_cbeam3_loads\n    \n    Args:\n        beam (sharpy.structure.models.beam.Beam): Structural info class\n        timestep (sharpy.utils.datastructures.StructTimeStepInfo): Structural time step class\n\n    Returns:\n        tuple: Tuple containing the ``strains`` and ``loads``.\n    \"\"\"\n    f_cbeam3_loads = xbeamlib.cbeam3_loads\n    f_cbeam3_loads.restype = None\n\n    n_elem = ct.c_int(beam.num_elem)\n    n_nodes = ct.c_int(beam.num_node)\n    n_stiff = ct.c_int(beam.n_stiff)\n\n    strain = np.zeros((n_elem.value, 6), dtype=ct.c_double, order='F')\n    loads = np.zeros((n_elem.value, 6), dtype=ct.c_double, order='F')\n\n    f_cbeam3_loads(ct.byref(n_elem),\n                   ct.byref(n_nodes),\n                   beam.fortran['connectivities'].ctypes.data_as(intP),\n                   beam.ini_info.pos.ctypes.data_as(doubleP),\n                   timestep.pos.ctypes.data_as(doubleP),\n                   beam.ini_info.psi.ctypes.data_as(doubleP),\n                   timestep.psi.ctypes.data_as(doubleP),\n                   beam.fortran['stiffness_indices'].ctypes.data_as(intP),\n                   ct.byref(n_stiff),\n                   beam.fortran['stiffness'].ctypes.data_as(doubleP),\n                   strain.ctypes.data_as(doubleP),\n                   loads.ctypes.data_as(doubleP))\n\n    return strain, loads\n\n\ndef cbeam3_solv_nlndyn(beam, settings):\n    f_cbeam3_solv_nlndyn = xbeamlib.cbeam3_solv_nlndyn_python\n    f_cbeam3_solv_nlndyn.restype = None\n\n    n_elem = ct.c_int(beam.num_elem)\n    n_nodes = ct.c_int(beam.num_node)\n    n_mass = ct.c_int(beam.n_mass)\n    n_stiff = ct.c_int(beam.n_stiff)\n\n    dt = settings['dt']\n    n_tsteps = settings['num_steps']\n    time = np.zeros((n_tsteps,), dtype=ct.c_double, order='F')\n    for i in range(n_tsteps):\n        time[i] = i*dt\n\n    # deformation history matrices\n    pos_def_history = np.zeros((n_tsteps, beam.num_node, 3), order='F')\n    pos_dot_def_history = np.zeros((n_tsteps, beam.num_node, 3), order='F')\n    psi_def_history = np.zeros((n_tsteps, beam.num_elem, 3, 3), order='F')\n    psi_dot_def_history = np.zeros((n_tsteps, beam.num_elem, 3, 3), order='F')\n\n    n_tsteps = ct.c_int(n_tsteps)\n\n    xbopts = Xbopts()\n    xbopts.PrintInfo = ct.c_bool(settings['print_info'])\n    xbopts.Solution = ct.c_int(312)\n    # xbopts.OutInaframe = ct.c_bool(settings['out_a_frame'])\n    # xbopts.OutInBframe = ct.c_bool(settings['out_b_frame'])\n    # xbopts.ElemProj = settings['elem_proj']\n    xbopts.MaxIterations = ct.c_int(settings['max_iterations'])\n    xbopts.NumLoadSteps = ct.c_int(settings['num_load_steps'])\n    xbopts.NumGauss = ct.c_int(0)\n    xbopts.DeltaCurved = ct.c_double(settings['delta_curved'])\n    xbopts.MinDelta = ct.c_double(settings['min_delta'])\n    xbopts.abs_threshold = ct.c_double(settings['abs_threshold'])\n    xbopts.NewmarkDamp = ct.c_double(settings['newmark_damp'])\n    xbopts.gravity_on = ct.c_bool(settings['gravity_on'])\n    xbopts.gravity = ct.c_double(settings['gravity'])\n    xbopts.gravity_dir_x = ct.c_double(settings['gravity_dir'][0])\n    xbopts.gravity_dir_y = ct.c_double(settings['gravity_dir'][1])\n    xbopts.gravity_dir_z = ct.c_double(settings['gravity_dir'][2])\n    xbopts.relaxation_factor = ct.c_double(settings['relaxation_factor'])\n\n    # here we only need to set the flags at True, all the forces are follower\n    xbopts.FollowerForce = ct.c_bool(True)\n    xbopts.FollowerForceRig = ct.c_bool(True)\n\n\n    f_cbeam3_solv_nlndyn(ct.byref(n_elem),\n                         ct.byref(n_nodes),\n                         ct.byref(n_tsteps),\n                         time.ctypes.data_as(doubleP),\n                         beam.fortran['num_nodes'].ctypes.data_as(intP),\n                         beam.fortran['num_mem'].ctypes.data_as(intP),\n                         beam.fortran['connectivities'].ctypes.data_as(intP),\n                         beam.fortran['master'].ctypes.data_as(intP),\n                         ct.byref(n_mass),\n                         beam.fortran['mass'].ctypes.data_as(doubleP),\n                         beam.fortran['mass_indices'].ctypes.data_as(intP),\n                         ct.byref(n_stiff),\n                         beam.fortran['stiffness'].ctypes.data_as(doubleP),\n                         beam.fortran['inv_stiffness'].ctypes.data_as(doubleP),\n                         beam.fortran['stiffness_indices'].ctypes.data_as(intP),\n                         beam.fortran['frame_of_reference_delta'].ctypes.data_as(doubleP),\n                         beam.fortran['rbmass'].ctypes.data_as(doubleP),\n                         beam.fortran['node_master_elem'].ctypes.data_as(intP),\n                         beam.fortran['vdof'].ctypes.data_as(intP),\n                         beam.fortran['fdof'].ctypes.data_as(intP),\n                         ct.byref(xbopts),\n                         beam.ini_info.pos.ctypes.data_as(doubleP),\n                         beam.ini_info.psi.ctypes.data_as(doubleP),\n                         beam.timestep_info[0].pos.ctypes.data_as(doubleP),\n                         beam.timestep_info[0].psi.ctypes.data_as(doubleP),\n                         beam.timestep_info[0].steady_applied_forces.ctypes.data_as(doubleP),\n                         dynamic_forces.ctypes.data_as(doubleP),\n                         beam.forced_vel_fortran.ctypes.data_as(doubleP),\n                         beam.forced_acc_fortran.ctypes.data_as(doubleP),\n                         pos_def_history.ctypes.data_as(doubleP),\n                         psi_def_history.ctypes.data_as(doubleP),\n                         pos_dot_def_history.ctypes.data_as(doubleP),\n                         psi_dot_def_history.ctypes.data_as(doubleP)\n                         )\n\n    for i in range(1, n_tsteps.value):\n        beam.add_timestep()\n        beam.timestep_info[i].pos[:] = pos_def_history[i, :]\n        beam.timestep_info[i].psi[:] = psi_def_history[i, :]\n        beam.timestep_info[i].pos_dot[:] = pos_dot_def_history[i, :]\n        beam.timestep_info[i].psi_dot[:] = psi_dot_def_history[i, :]\n\n\ndef cbeam3_step_nlndyn(beam, settings, ts, tstep=None, dt=None):\n    f_cbeam3_solv_nlndyn_step = xbeamlib.cbeam3_solv_nlndyn_step_python\n    f_cbeam3_solv_nlndyn_step.restype = None\n\n    if tstep is None:\n        tstep = beam.timestep_info[-1]\n\n    n_elem = ct.c_int(beam.num_elem)\n    n_nodes = ct.c_int(beam.num_node)\n    n_mass = ct.c_int(beam.n_mass)\n    n_stiff = ct.c_int(beam.n_stiff)\n    num_dof = ct.c_int(len(tstep.q) - 10)\n\n    xbopts = Xbopts()\n    xbopts.PrintInfo = ct.c_bool(settings['print_info'])\n    xbopts.Solution = ct.c_int(312)\n    xbopts.MaxIterations = ct.c_int(settings['max_iterations'])\n    xbopts.NumLoadSteps = ct.c_int(settings['num_load_steps'])\n    xbopts.NumGauss = ct.c_int(0)\n    xbopts.DeltaCurved = ct.c_double(settings['delta_curved'])\n    xbopts.MinDelta = ct.c_double(settings['min_delta'])\n    xbopts.abs_threshold = ct.c_double(settings['abs_threshold'])\n    xbopts.NewmarkDamp = ct.c_double(settings['newmark_damp'])\n    xbopts.gravity_on = ct.c_bool(settings['gravity_on'])\n    xbopts.gravity = ct.c_double(settings['gravity'])\n    xbopts.gravity_dir_x = ct.c_double(settings['gravity_dir'][0])\n    xbopts.gravity_dir_y = ct.c_double(settings['gravity_dir'][1])\n    xbopts.gravity_dir_z = ct.c_double(settings['gravity_dir'][2])\n    xbopts.relaxation_factor = ct.c_double(settings['relaxation_factor'])\n\n    # here we only need to set the flags at True, all the forces are follower\n    xbopts.FollowerForce = ct.c_bool(True)\n    xbopts.FollowerForceRig = ct.c_bool(True)\n\n    if dt is None:\n        in_dt = ct.c_double(settings['dt'])\n    else:\n        in_dt = ct.c_double(dt)\n\n    f_cbeam3_solv_nlndyn_step(ct.byref(num_dof),\n                              ct.byref(n_elem),\n                              ct.byref(n_nodes),\n                              ct.byref(in_dt),\n                              beam.fortran['num_nodes'].ctypes.data_as(intP),\n                              beam.fortran['num_mem'].ctypes.data_as(intP),\n                              beam.fortran['connectivities'].ctypes.data_as(intP),\n                              beam.fortran['master'].ctypes.data_as(intP),\n                              ct.byref(n_mass),\n                              beam.fortran['mass'].ctypes.data_as(doubleP),\n                              beam.fortran['mass_indices'].ctypes.data_as(intP),\n                              ct.byref(n_stiff),\n                              beam.fortran['stiffness'].ctypes.data_as(doubleP),\n                              beam.fortran['inv_stiffness'].ctypes.data_as(doubleP),\n                              beam.fortran['stiffness_indices'].ctypes.data_as(intP),\n                              beam.fortran['frame_of_reference_delta'].ctypes.data_as(doubleP),\n                              beam.fortran['rbmass'].ctypes.data_as(doubleP),\n                              beam.fortran['node_master_elem'].ctypes.data_as(intP),\n                              beam.fortran['vdof'].ctypes.data_as(intP),\n                              beam.fortran['fdof'].ctypes.data_as(intP),\n                              ct.byref(xbopts),\n                              beam.ini_info.pos.ctypes.data_as(doubleP),\n                              beam.ini_info.psi.ctypes.data_as(doubleP),\n                              tstep.pos.ctypes.data_as(doubleP),\n                              tstep.pos_dot.ctypes.data_as(doubleP),\n                              tstep.pos_ddot.ctypes.data_as(doubleP),\n                              tstep.psi.ctypes.data_as(doubleP),\n                              tstep.psi_dot.ctypes.data_as(doubleP),\n                              tstep.psi_ddot.ctypes.data_as(doubleP),\n                              tstep.steady_applied_forces.ctypes.data_as(doubleP),\n                              tstep.unsteady_applied_forces.ctypes.data_as(doubleP),\n                              tstep.gravity_forces.ctypes.data_as(doubleP),\n                              tstep.quat.ctypes.data_as(doubleP),\n                              tstep.for_vel.ctypes.data_as(doubleP),\n                              tstep.for_acc.ctypes.data_as(doubleP),\n                              tstep.q.ctypes.data_as(doubleP),\n                              tstep.dqdt.ctypes.data_as(doubleP)\n                              )\n\n    xbeam_solv_state2disp(beam, tstep, cbeam3=True)\n\n\nf_xbeam_solv_couplednlndyn = xbeamlib.xbeam_solv_couplednlndyn_python\nf_xbeam_solv_couplednlndyn.restype = None\n\n\ndef xbeam_solv_couplednlndyn(beam, settings):\n    n_elem = ct.c_int(beam.num_elem)\n    n_nodes = ct.c_int(beam.num_node)\n    n_mass = ct.c_int(beam.n_mass)\n    n_stiff = ct.c_int(beam.n_stiff)\n\n    dt = settings['dt']\n    n_tsteps = settings['num_steps']\n    time = np.zeros((n_tsteps,), dtype=ct.c_double, order='F')\n    for i in range(n_tsteps):\n        time[i] = i*dt\n\n    # deformation history matrices\n    for_vel = np.zeros((n_tsteps + 1, 6), order='F')\n    for_acc = np.zeros((n_tsteps + 1, 6), order='F')\n    quat_history = np.zeros((n_tsteps, 4), order='F')\n    quat_history[0, 0] = 1.0\n    quat_history[0, :] = beam.timestep_info[0].quat[:]\n\n    dt = ct.c_double(dt)\n    n_tsteps = ct.c_int(n_tsteps)\n\n    xbopts = Xbopts()\n    xbopts.PrintInfo = ct.c_bool(settings['print_info'])\n    xbopts.Solution = ct.c_int(910)\n    xbopts.OutInaframe = ct.c_bool(True)\n    xbopts.MaxIterations = ct.c_int(settings['max_iterations'])\n    xbopts.NumLoadSteps = ct.c_int(settings['num_load_steps'])\n    # xbopts.NumGauss = ct.c_int(0)\n    xbopts.DeltaCurved = ct.c_double(settings['delta_curved'])\n    xbopts.MinDelta = ct.c_double(settings['min_delta'])\n    xbopts.abs_threshold = ct.c_double(settings['abs_threshold'])\n    xbopts.NewmarkDamp = ct.c_double(settings['newmark_damp'])\n    xbopts.gravity_on = ct.c_bool(settings['gravity_on'])\n    xbopts.gravity = ct.c_double(settings['gravity'])\n    xbopts.gravity_dir_x = ct.c_double(settings['gravity_dir'][0])\n    xbopts.gravity_dir_y = ct.c_double(settings['gravity_dir'][1])\n    xbopts.gravity_dir_z = ct.c_double(settings['gravity_dir'][2])\n    xbopts.relaxation_factor = ct.c_double(settings['relaxation_factor'])\n    xbopts.gravity_dir_x = ct.c_double(settings['gravity_dir'][0])\n    xbopts.gravity_dir_y = ct.c_double(settings['gravity_dir'][1])\n    xbopts.gravity_dir_z = ct.c_double(settings['gravity_dir'][2])\n\n    pos_def_history = np.zeros((n_tsteps.value, beam.num_node, 3), order='F', dtype=ct.c_double)\n    pos_dot_def_history = np.zeros((n_tsteps.value, beam.num_node, 3), order='F', dtype=ct.c_double)\n    psi_def_history = np.zeros((n_tsteps.value, beam.num_elem, 3, 3), order='F', dtype=ct.c_double)\n    psi_dot_def_history = np.zeros((n_tsteps.value, beam.num_elem, 3, 3), order='F', dtype=ct.c_double)\n\n    dynamic_force = np.zeros((n_nodes.value, 6, n_tsteps.value), dtype=ct.c_double, order='F')\n    for it in range(n_tsteps.value):\n        dynamic_force[:, :, it] = beam.dynamic_input[it]['dynamic_forces']\n\n    # status flag\n    success = ct.c_bool(True)\n\n    # here we only need to set the flags at True, all the forces are follower\n    xbopts.FollowerForce = ct.c_bool(True)\n    xbopts.FollowerForceRig = ct.c_bool(True)\n    import time as ti\n    start_time = ti.time()\n    f_xbeam_solv_couplednlndyn(ct.byref(n_elem),\n                               ct.byref(n_nodes),\n                               ct.byref(n_tsteps),\n                               time.ctypes.data_as(doubleP),\n                               beam.fortran['num_nodes'].ctypes.data_as(intP),\n                               beam.fortran['num_mem'].ctypes.data_as(intP),\n                               beam.fortran['connectivities'].ctypes.data_as(intP),\n                               beam.fortran['master'].ctypes.data_as(intP),\n                               ct.byref(n_mass),\n                               beam.fortran['mass'].ctypes.data_as(doubleP),\n                               beam.fortran['mass_indices'].ctypes.data_as(intP),\n                               ct.byref(n_stiff),\n                               beam.fortran['stiffness'].ctypes.data_as(doubleP),\n                               beam.fortran['inv_stiffness'].ctypes.data_as(doubleP),\n                               beam.fortran['stiffness_indices'].ctypes.data_as(intP),\n                               beam.fortran['frame_of_reference_delta'].ctypes.data_as(doubleP),\n                               beam.fortran['rbmass'].ctypes.data_as(doubleP),\n                               beam.fortran['node_master_elem'].ctypes.data_as(intP),\n                               beam.fortran['vdof'].ctypes.data_as(intP),\n                               beam.fortran['fdof'].ctypes.data_as(intP),\n                               ct.byref(xbopts),\n                               beam.ini_info.pos.ctypes.data_as(doubleP),\n                               beam.ini_info.psi.ctypes.data_as(doubleP),\n                               beam.ini_info.steady_applied_forces.ctypes.data_as(doubleP),\n                               dynamic_force.ctypes.data_as(doubleP),\n                               for_vel.ctypes.data_as(doubleP),\n                               for_acc.ctypes.data_as(doubleP),\n                               pos_def_history.ctypes.data_as(doubleP),\n                               psi_def_history.ctypes.data_as(doubleP),\n                               pos_dot_def_history.ctypes.data_as(doubleP),\n                               psi_dot_def_history.ctypes.data_as(doubleP),\n                               quat_history.ctypes.data_as(doubleP),\n                               ct.byref(success))\n    cout.cout_wrap(\"\\n--- %s seconds ---\" % (ti.time() - start_time), 1)\n    if not success:\n        raise Exception('couplednlndyn did not converge')\n\n    for_pos = np.zeros_like(for_vel)\n    for_pos[:, 0] = sc.integrate.cumtrapz(for_vel[:, 0], dx=dt.value, initial=0)\n    for_pos[:, 1] = sc.integrate.cumtrapz(for_vel[:, 1], dx=dt.value, initial=0)\n    for_pos[:, 2] = sc.integrate.cumtrapz(for_vel[:, 2], dx=dt.value, initial=0)\n\n    glob_pos_def = np.zeros_like(pos_def_history)\n    for it in range(n_tsteps.value):\n        rot = algebra.quat2rotation(quat_history[it, :])\n        for inode in range(beam.num_node):\n            glob_pos_def[it, inode, :] = np.dot(rot.T, pos_def_history[it, inode, :])\n\n    for i in range(n_tsteps.value - 1):\n        beam.timestep_info[i + 1].pos[:] = pos_def_history[i+1, :]\n        beam.timestep_info[i + 1].psi[:] = psi_def_history[i+1, :]\n        beam.timestep_info[i + 1].pos_dot[:] = pos_dot_def_history[i+1, :]\n        beam.timestep_info[i + 1].psi_dot[:] = psi_dot_def_history[i+1, :]\n\n        beam.timestep_info[i + 1].quat[:] = quat_history[i+1, :]\n        # beam.timestep_info[i + 1].for_pos[:] = for_pos[i+1, :]\n        beam.timestep_info[i + 1].for_vel[:] = for_vel[i+1, :]\n\n    for it in range(n_tsteps.value - 1):\n        beam.integrate_position(it + 1, dt.value)\n\n\ndef xbeam_step_couplednlndyn(beam, settings, ts, tstep=None, dt=None):\n    # library load\n    f_xbeam_solv_nlndyn_step_python = xbeamlib.xbeam_solv_nlndyn_step_python\n    f_xbeam_solv_nlndyn_step_python.restype = None\n\n    if tstep is None:\n        tstep = beam.timestep_info[-1]\n\n    # initialisation\n    n_elem = ct.c_int(beam.num_elem)\n    n_nodes = ct.c_int(beam.num_node)\n    n_mass = ct.c_int(beam.n_mass)\n    n_stiff = ct.c_int(beam.n_stiff)\n\n    xbopts = Xbopts()\n    xbopts.PrintInfo = ct.c_bool(settings['print_info'])\n    xbopts.MaxIterations = ct.c_int(settings['max_iterations'])\n    xbopts.NumLoadSteps = ct.c_int(settings['num_load_steps'])\n    xbopts.DeltaCurved = ct.c_double(settings['delta_curved'])\n    xbopts.MinDelta = ct.c_double(settings['min_delta'])\n    xbopts.abs_threshold = ct.c_double(settings['abs_threshold'])\n    xbopts.NewmarkDamp = ct.c_double(settings['newmark_damp'])\n    xbopts.gravity_on = ct.c_bool(settings['gravity_on'])\n    xbopts.gravity = ct.c_double(settings['gravity'])\n    xbopts.balancing = ct.c_bool(settings['balancing'])\n    xbopts.gravity_dir_x = ct.c_double(settings['gravity_dir'][0])\n    xbopts.gravity_dir_y = ct.c_double(settings['gravity_dir'][1])\n    xbopts.gravity_dir_z = ct.c_double(settings['gravity_dir'][2])\n    xbopts.relaxation_factor = ct.c_double(settings['relaxation_factor'])\n\n    if dt is None:\n        in_dt = ct.c_double(settings['dt'])\n    else:\n        in_dt = ct.c_double(dt)\n\n    ctypes_ts = ct.c_int(ts)\n    numdof = ct.c_int(beam.num_dof.value)\n\n    f_xbeam_solv_nlndyn_step_python(ct.byref(numdof),\n                                    ct.byref(ctypes_ts),\n                                    ct.byref(n_elem),\n                                    ct.byref(n_nodes),\n                                    ct.byref(in_dt),\n                                    beam.fortran['num_nodes'].ctypes.data_as(intP),\n                                    beam.fortran['num_mem'].ctypes.data_as(intP),\n                                    beam.fortran['connectivities'].ctypes.data_as(intP),\n                                    beam.fortran['master'].ctypes.data_as(intP),\n                                    ct.byref(n_mass),\n                                    beam.fortran['mass'].ctypes.data_as(doubleP),\n                                    beam.fortran['mass_indices'].ctypes.data_as(intP),\n                                    ct.byref(n_stiff),\n                                    beam.fortran['stiffness'].ctypes.data_as(doubleP),\n                                    beam.fortran['inv_stiffness'].ctypes.data_as(doubleP),\n                                    beam.fortran['stiffness_indices'].ctypes.data_as(intP),\n                                    beam.fortran['frame_of_reference_delta'].ctypes.data_as(doubleP),\n                                    beam.fortran['rbmass'].ctypes.data_as(doubleP),\n                                    beam.fortran['node_master_elem'].ctypes.data_as(intP),\n                                    beam.fortran['vdof'].ctypes.data_as(intP),\n                                    beam.fortran['fdof'].ctypes.data_as(intP),\n                                    ct.byref(xbopts),\n                                    beam.ini_info.pos.ctypes.data_as(doubleP),\n                                    beam.ini_info.psi.ctypes.data_as(doubleP),\n                                    tstep.pos.ctypes.data_as(doubleP),\n                                    tstep.pos_dot.ctypes.data_as(doubleP),\n                                    tstep.pos_ddot.ctypes.data_as(doubleP),\n                                    tstep.psi.ctypes.data_as(doubleP),\n                                    tstep.psi_dot.ctypes.data_as(doubleP),\n                                    tstep.psi_ddot.ctypes.data_as(doubleP),\n                                    tstep.steady_applied_forces.ctypes.data_as(doubleP),\n                                    tstep.unsteady_applied_forces.ctypes.data_as(doubleP),\n                                    tstep.gravity_forces.ctypes.data_as(doubleP),\n                                    tstep.quat.ctypes.data_as(doubleP),\n                                    tstep.for_vel.ctypes.data_as(doubleP),\n                                    tstep.for_acc.ctypes.data_as(doubleP),\n                                    tstep.q.ctypes.data_as(doubleP),\n                                    tstep.dqdt.ctypes.data_as(doubleP),\n                                    tstep.dqddt.ctypes.data_as(doubleP))\n\n\ndef xbeam_init_couplednlndyn(beam, settings, ts, dt=None):\n    # library load\n    f_xbeam_solv_nlndyn_init_python = xbeamlib.xbeam_solv_nlndyn_init_python\n    f_xbeam_solv_nlndyn_init_python.restype = None\n\n    # initialisation\n    n_elem = ct.c_int(beam.num_elem)\n    n_nodes = ct.c_int(beam.num_node)\n    n_mass = ct.c_int(beam.n_mass)\n    n_stiff = ct.c_int(beam.n_stiff)\n\n    xbopts = Xbopts()\n    xbopts.PrintInfo = ct.c_bool(settings['print_info'])\n    xbopts.MaxIterations = ct.c_int(settings['max_iterations'])\n    xbopts.NumLoadSteps = ct.c_int(settings['num_load_steps'])\n    xbopts.DeltaCurved = ct.c_double(settings['delta_curved'])\n    xbopts.MinDelta = ct.c_double(settings['min_delta'])\n    xbopts.abs_threshold = ct.c_double(settings['abs_threshold'])\n    xbopts.NewmarkDamp = ct.c_double(settings['newmark_damp'])\n    xbopts.gravity_on = ct.c_bool(settings['gravity_on'])\n    xbopts.gravity = ct.c_double(settings['gravity'])\n    xbopts.gravity_dir_x = ct.c_double(settings['gravity_dir'][0])\n    xbopts.gravity_dir_y = ct.c_double(settings['gravity_dir'][1])\n    xbopts.gravity_dir_z = ct.c_double(settings['gravity_dir'][2])\n\n    in_dt = ct.c_double(dt)\n\n    if ts < 0:\n        ctypes_ts = ct.c_int(0)\n    else:\n        ctypes_ts = ct.c_int(ts)\n    numdof = ct.c_int(beam.num_dof.value)\n\n    f_xbeam_solv_nlndyn_init_python(ct.byref(numdof),\n                                    ct.byref(ctypes_ts),\n                                    ct.byref(n_elem),\n                                    ct.byref(n_nodes),\n                                    ct.byref(ct.c_double(settings['dt'])),\n                                    beam.fortran['num_nodes'].ctypes.data_as(intP),\n                                    beam.fortran['num_mem'].ctypes.data_as(intP),\n                                    beam.fortran['connectivities'].ctypes.data_as(intP),\n                                    beam.fortran['master'].ctypes.data_as(intP),\n                                    ct.byref(n_mass),\n                                    beam.fortran['mass'].ctypes.data_as(doubleP),\n                                    beam.fortran['mass_indices'].ctypes.data_as(intP),\n                                    ct.byref(n_stiff),\n                                    beam.fortran['stiffness'].ctypes.data_as(doubleP),\n                                    beam.fortran['inv_stiffness'].ctypes.data_as(doubleP),\n                                    beam.fortran['stiffness_indices'].ctypes.data_as(intP),\n                                    beam.fortran['frame_of_reference_delta'].ctypes.data_as(doubleP),\n                                    beam.fortran['rbmass'].ctypes.data_as(doubleP),\n                                    beam.fortran['node_master_elem'].ctypes.data_as(intP),\n                                    beam.fortran['vdof'].ctypes.data_as(intP),\n                                    beam.fortran['fdof'].ctypes.data_as(intP),\n                                    ct.byref(xbopts),\n                                    beam.ini_info.pos.ctypes.data_as(doubleP),\n                                    beam.ini_info.psi.ctypes.data_as(doubleP),\n                                    beam.timestep_info[ts].pos.ctypes.data_as(doubleP),\n                                    beam.timestep_info[ts].pos_dot.ctypes.data_as(doubleP),\n                                    beam.timestep_info[ts].psi.ctypes.data_as(doubleP),\n                                    beam.timestep_info[ts].psi_dot.ctypes.data_as(doubleP),\n                                    beam.timestep_info[ts].steady_applied_forces.ctypes.data_as(doubleP),\n                                    beam.timestep_info[ts].unsteady_applied_forces.ctypes.data_as(doubleP),\n                                    beam.timestep_info[ts].quat.ctypes.data_as(doubleP),\n                                    beam.timestep_info[ts].for_vel.ctypes.data_as(doubleP),\n                                    beam.timestep_info[ts].for_acc.ctypes.data_as(doubleP),\n                                    beam.timestep_info[ts].q.ctypes.data_as(doubleP),\n                                    beam.timestep_info[ts].dqdt.ctypes.data_as(doubleP),\n                                    beam.timestep_info[ts].dqddt.ctypes.data_as(doubleP))\n\n\ndef xbeam_solv_state2disp(beam, tstep, cbeam3=False):\n    numdof = beam.num_dof.value\n    cbeam3_solv_state2disp(beam, tstep)\n    if not cbeam3:\n        tstep.for_pos[0:3] = tstep.q[numdof:numdof+3].astype(dtype=ct.c_double, order='F', copy=True)\n        tstep.for_vel = tstep.dqdt[numdof:numdof+6].astype(dtype=ct.c_double, order='F', copy=True)\n        # tstep.for_acc = tstep.dqddt[numdof:numdof+6].astype(dtype=ct.c_double, order='F', copy=True)\n        tstep.quat = algebra.unit_vector(tstep.dqdt[numdof+6:]).astype(dtype=ct.c_double, order='F', copy=True)\n\ndef xbeam_solv_state2accel(beam, tstep, cbeam3=False):\n    numdof = beam.num_dof.value\n    cbeam3_solv_state2accel(beam, tstep)\n    if not cbeam3:\n        tstep.for_acc = tstep.dqddt[numdof:numdof+6].astype(dtype=ct.c_double, order='F', copy=True)\n\ndef cbeam3_solv_state2disp(beam, tstep):\n    # library load\n    f_cbeam3_solv_state2disp = xbeamlib.cbeam3_solv_state2disp_python\n    f_cbeam3_solv_state2disp.restype = None\n\n    # initialisation\n    n_elem = ct.c_int(beam.num_elem)\n    n_nodes = ct.c_int(beam.num_node)\n    numdof = ct.c_int(beam.num_dof.value)\n\n    f_cbeam3_solv_state2disp(\n        ct.byref(n_elem),\n        ct.byref(n_nodes),\n        ct.byref(numdof),\n        beam.ini_info.pos.ctypes.data_as(doubleP),\n        beam.ini_info.psi.ctypes.data_as(doubleP),\n        tstep.pos.ctypes.data_as(doubleP),\n        tstep.psi.ctypes.data_as(doubleP),\n        tstep.pos_dot.ctypes.data_as(doubleP),\n        tstep.psi_dot.ctypes.data_as(doubleP),\n        beam.fortran['node_master_elem'].ctypes.data_as(intP),\n        beam.fortran['vdof'].ctypes.data_as(intP),\n        beam.fortran['num_nodes'].ctypes.data_as(intP),\n        beam.fortran['master'].ctypes.data_as(intP),\n        tstep.q.ctypes.data_as(doubleP),\n        tstep.dqdt.ctypes.data_as(doubleP))\n\ndef cbeam3_solv_state2accel(beam, tstep):\n    # library load\n    f_cbeam3_solv_state2disp = xbeamlib.cbeam3_solv_state2disp_python\n    f_cbeam3_solv_state2disp.restype = None\n\n    # initialisation\n    n_elem = ct.c_int(beam.num_elem)\n    n_nodes = ct.c_int(beam.num_node)\n    numdof = ct.c_int(beam.num_dof.value)\n\n    dummy_pos = np.zeros_like(tstep.pos)\n    dummy_psi = np.zeros_like(tstep.psi)\n    dummy_ini_pos = np.zeros_like(tstep.pos)\n    dummy_ini_psi = np.zeros_like(tstep.psi)\n    dummy_q = np.zeros_like(tstep.q)\n\n    f_cbeam3_solv_state2disp(\n        ct.byref(n_elem),\n        ct.byref(n_nodes),\n        ct.byref(numdof),\n        dummy_ini_pos.ctypes.data_as(doubleP),\n        dummy_ini_psi.ctypes.data_as(doubleP),\n        dummy_pos.ctypes.data_as(doubleP),\n        dummy_psi.ctypes.data_as(doubleP),\n        tstep.pos_ddot.ctypes.data_as(doubleP),\n        tstep.psi_ddot.ctypes.data_as(doubleP),\n        beam.fortran['node_master_elem'].ctypes.data_as(intP),\n        beam.fortran['vdof'].ctypes.data_as(intP),\n        beam.fortran['num_nodes'].ctypes.data_as(intP),\n        beam.fortran['master'].ctypes.data_as(intP),\n        dummy_q.ctypes.data_as(doubleP),\n        tstep.dqddt.ctypes.data_as(doubleP))\n\ndef xbeam_solv_disp2state(beam, tstep):\n    numdof = beam.num_dof.value\n    cbeam3_solv_disp2state(beam, tstep)\n    tstep.q[numdof:numdof+3] = tstep.for_pos[0:3]\n    tstep.dqdt[numdof:numdof+6] = tstep.for_vel\n    # tstep.dqddt[numdof:numdof+6] = tstep.for_acc\n    tstep.dqdt[numdof+6:] = algebra.unit_vector(tstep.quat)\n    # tstep.dqdt[numdof+6:] = tstep.quat\n    # tstep.dqdt[numdof+6:] = algebra.unit_quat(tstep.quat)\n\ndef xbeam_solv_accel2state(beam, tstep):\n    numdof = beam.num_dof.value\n    cbeam3_solv_accel2state(beam, tstep)\n    tstep.dqddt[numdof:numdof+6] = tstep.for_acc\n\ndef cbeam3_solv_disp2state(beam, tstep):\n    # library load\n    f_cbeam3_solv_disp2state = xbeamlib.cbeam3_solv_disp2state_python\n    f_cbeam3_solv_disp2state.restype = None\n\n    # initialisation\n    n_elem = ct.c_int(beam.num_elem)\n    n_nodes = ct.c_int(beam.num_node)\n    numdof = ct.c_int(beam.num_dof.value)\n\n    f_cbeam3_solv_disp2state(\n        ct.byref(n_elem),\n        ct.byref(n_nodes),\n        ct.byref(numdof),\n        tstep.pos.ctypes.data_as(doubleP),\n        tstep.psi.ctypes.data_as(doubleP),\n        tstep.pos_dot.ctypes.data_as(doubleP),\n        tstep.psi_dot.ctypes.data_as(doubleP),\n        beam.fortran['vdof'].ctypes.data_as(intP),\n        beam.fortran['node_master_elem'].ctypes.data_as(intP),\n        tstep.q.ctypes.data_as(doubleP),\n        tstep.dqdt.ctypes.data_as(doubleP))\n\ndef cbeam3_solv_accel2state(beam, tstep):\n    # library load\n    f_cbeam3_solv_disp2state = xbeamlib.cbeam3_solv_disp2state_python\n    f_cbeam3_solv_disp2state.restype = None\n\n    # initialisation\n    n_elem = ct.c_int(beam.num_elem)\n    n_nodes = ct.c_int(beam.num_node)\n    numdof = ct.c_int(beam.num_dof.value)\n\n    dummy_pos = np.zeros_like(tstep.pos)\n    dummy_psi = np.zeros_like(tstep.psi)\n    dummy_q = np.zeros_like(tstep.q)\n\n    # Reused\n    f_cbeam3_solv_disp2state(\n        ct.byref(n_elem),\n        ct.byref(n_nodes),\n        ct.byref(numdof),\n        dummy_pos.ctypes.data_as(doubleP),\n        dummy_psi.ctypes.data_as(doubleP),\n        tstep.pos_ddot.ctypes.data_as(doubleP),\n        tstep.psi_ddot.ctypes.data_as(doubleP),\n        beam.fortran['vdof'].ctypes.data_as(intP),\n        beam.fortran['node_master_elem'].ctypes.data_as(intP),\n        dummy_q.ctypes.data_as(doubleP),\n        tstep.dqddt.ctypes.data_as(doubleP))\n\ndef cbeam3_solv_modal(beam, settings, ts, FullMglobal, FullCglobal, FullKglobal):\n    \"\"\"\n    cbeam3_solv_modal\n\n    Generates the system matrices for modal analysis\n\n    Args:\n        beam(Beam): beam information\n        settings(settings):\n        ts(int): timestep\n        FullMglobal(numpy array): Mass matrix\n        FullCglobal(numpy array): Damping matrix\n        FullKglobal(numpy array): Stiffness matrix\n\n    Returns:\n        FullMglobal(numpy array): Mass matrix\n        FullCglobal(numpy array): Damping matrix\n        FullKglobal(numpy array): Stiffness matrix\n\n    Examples:\n\n    Notes:\n\n    \"\"\"\n\n    f_cbeam3_solv_modal = xbeamlib.cbeam3_solv_modal_python\n    f_cbeam3_solv_modal.restype = None\n\n    n_elem = ct.c_int(beam.num_elem)\n    n_nodes = ct.c_int(beam.num_node)\n    n_mass = ct.c_int(beam.n_mass)\n    n_stiff = ct.c_int(beam.n_stiff)\n    num_dof = ct.c_int(beam.num_dof.value)\n\n    xbopts = Xbopts()\n    xbopts.PrintInfo = ct.c_bool(settings['print_info'])\n    xbopts.Solution = ct.c_int(312)\n    # xbopts.OutInaframe = ct.c_bool(settings['out_a_frame'])\n    # xbopts.OutInBframe = ct.c_bool(settings['out_b_frame'])\n    # xbopts.ElemProj = settings['elem_proj']\n    # xbopts.MaxIterations = settings['max_iterations']\n    # xbopts.NumLoadSteps = settings['num_load_steps']\n    xbopts.NumGauss = ct.c_int(0)\n    xbopts.DeltaCurved = ct.c_double(settings['delta_curved'])\n    # xbopts.MinDelta = settings['min_delta']\n    # xbopts.NewmarkDamp = settings['newmark_damp']\n    # xbopts.gravity_on = settings['gravity_on']\n    # xbopts.gravity = settings['gravity']\n    # xbopts.gravity_dir_x = ct.c_double(settings['gravity_dir'][0])\n    # xbopts.gravity_dir_y = ct.c_double(settings['gravity_dir'][1])\n    # xbopts.gravity_dir_z = ct.c_double(settings['gravity_dir'][2])\n\n\n    # print(\"ts: \",ts)\n    # print(\"FoR vel: \", beam.timestep_info[ts].for_vel)\n    # print(\"initial position: \", beam.ini_info.pos)\n    # print(\"initial rotation: \", beam.ini_info.psi)\n    # print(\"position: \", beam.timestep_info[ts].pos)\n    # print(\"rotation: \", beam.timestep_info[ts].psi)\n    # print(\"mass: \", beam.fortran['mass'])\n    # print(\"mass: \", beam.fortran['stiffness'])\n    # print(\"mass: \", beam.fortran['inv_stiffness'])\n\n\n    f_cbeam3_solv_modal(ct.byref(num_dof),\n                        ct.byref(n_elem),\n                        ct.byref(n_nodes),\n                        beam.fortran['num_nodes'].ctypes.data_as(intP),\n                        beam.fortran['num_mem'].ctypes.data_as(intP),\n                        beam.fortran['connectivities'].ctypes.data_as(intP),\n                        beam.fortran['master'].ctypes.data_as(intP),\n                        ct.byref(n_mass),\n                        beam.fortran['mass'].ctypes.data_as(doubleP),\n                        beam.fortran['mass_indices'].ctypes.data_as(intP),\n                        ct.byref(n_stiff),\n                        beam.fortran['stiffness'].ctypes.data_as(doubleP),\n                        beam.fortran['inv_stiffness'].ctypes.data_as(doubleP),\n                        beam.fortran['stiffness_indices'].ctypes.data_as(intP),\n                        beam.fortran['frame_of_reference_delta'].ctypes.data_as(doubleP),\n                        beam.fortran['rbmass'].ctypes.data_as(doubleP),\n                        beam.fortran['node_master_elem'].ctypes.data_as(intP),\n                        beam.fortran['vdof'].ctypes.data_as(intP),\n                        beam.fortran['fdof'].ctypes.data_as(intP),\n                        ct.byref(xbopts),\n                        beam.ini_info.pos.ctypes.data_as(doubleP),\n                        beam.ini_info.psi.ctypes.data_as(doubleP),\n                        beam.timestep_info[ts].pos.ctypes.data_as(doubleP),\n                        beam.timestep_info[ts].psi.ctypes.data_as(doubleP),\n                        beam.timestep_info[ts].for_vel.ctypes.data_as(doubleP),\n                        FullMglobal.ctypes.data_as(doubleP),\n                        FullCglobal.ctypes.data_as(doubleP),\n                        FullKglobal.ctypes.data_as(doubleP))\n\n\ndef cbeam3_asbly_dynamic(beam, tstep, settings):\n    \"\"\"\n    cbeam3_asbly_dynamic\n\n    Generates the system matrices for a nonlinear dynamic structure with\n    prescribed FoR motions\n\n    Args:\n        beam(Beam): beam information\n        tstep(StructTimeStepInfo): time step information\n        settings(settings):\n\n    Returns:\n    \tMglobal(numpy array): Mass matrix\n        Cglobal(numpy array): Damping matrix\n        Kglobal(numpy array): Stiffness matrix\n        Qglobal(numpy array): Vector of independent terms\n\n    Examples:\n\n    Notes:\n\n    \"\"\"\n\n    # library load\n    f_cbeam3_asbly_dynamic_python = xbeamlib.cbeam3_asbly_dynamic_python\n    f_cbeam3_asbly_dynamic_python.restype = None\n\n    # initialisation\n    n_elem = ct.c_int(beam.num_elem)\n    n_nodes = ct.c_int(beam.num_node)\n    num_dof = beam.num_dof.value\n    n_mass = ct.c_int(beam.n_mass)\n    n_stiff = ct.c_int(beam.n_stiff)\n    dt = ct.c_double(settings['dt'])\n\n    # Options\n    xbopts = Xbopts()\n    xbopts.PrintInfo = ct.c_bool(settings['print_info'])\n    xbopts.Solution = ct.c_int(312)\n    xbopts.MaxIterations = ct.c_int(settings['max_iterations'])\n    xbopts.NumLoadSteps = ct.c_int(settings['num_load_steps'])\n    xbopts.NumGauss = ct.c_int(0)\n    xbopts.DeltaCurved = ct.c_double(settings['delta_curved'])\n    xbopts.MinDelta = ct.c_double(settings['min_delta'])\n    xbopts.abs_threshold = ct.c_double(settings['abs_threshold'])\n    xbopts.NewmarkDamp = ct.c_double(settings['newmark_damp'])\n    xbopts.gravity_on = ct.c_bool(settings['gravity_on'])\n    xbopts.gravity = ct.c_double(settings['gravity'])\n    xbopts.gravity_dir_x = ct.c_double(settings['gravity_dir'][0])\n    xbopts.gravity_dir_y = ct.c_double(settings['gravity_dir'][1])\n    xbopts.gravity_dir_z = ct.c_double(settings['gravity_dir'][2])\n\n    # Initialize matrices\n    Mglobal = np.zeros((num_dof, num_dof), dtype=ct.c_double, order='F')\n    Cglobal = np.zeros((num_dof, num_dof), dtype=ct.c_double, order='F')\n    Kglobal = np.zeros((num_dof, num_dof), dtype=ct.c_double, order='F')\n    Qglobal = np.zeros((num_dof, ), dtype=ct.c_double, order='F')\n\n    f_cbeam3_asbly_dynamic_python(ct.byref(ct.c_int(num_dof)),\n                                  ct.byref(n_nodes),\n                                  ct.byref(n_elem),\n                                  ct.byref(dt),\n                                  beam.ini_info.pos.ctypes.data_as(doubleP),\n                                  beam.ini_info.psi.ctypes.data_as(doubleP),\n                                  tstep.pos.ctypes.data_as(doubleP),\n                                  tstep.pos_dot.ctypes.data_as(doubleP),\n                                  tstep.pos_ddot.ctypes.data_as(doubleP),\n                                  tstep.psi.ctypes.data_as(doubleP),\n                                  tstep.psi_dot.ctypes.data_as(doubleP),\n                                  tstep.psi_ddot.ctypes.data_as(doubleP),\n                                  tstep.steady_applied_forces.ctypes.data_as(doubleP),\n                                  tstep.unsteady_applied_forces.ctypes.data_as(doubleP),\n                                  tstep.for_vel.ctypes.data_as(doubleP),\n                                  tstep.for_acc.ctypes.data_as(doubleP),\n                                  beam.fortran['num_nodes'].ctypes.data_as(intP),\n                                  beam.fortran['num_mem'].ctypes.data_as(intP),\n                                  beam.fortran['connectivities'].ctypes.data_as(intP),\n                                  beam.fortran['master'].ctypes.data_as(intP),\n                                  ct.byref(n_mass),\n                                  beam.fortran['mass'].ctypes.data_as(doubleP),\n                                  beam.fortran['mass_indices'].ctypes.data_as(intP),\n                                  ct.byref(n_stiff),\n                                  beam.fortran['stiffness'].ctypes.data_as(doubleP),\n                                  beam.fortran['inv_stiffness'].ctypes.data_as(doubleP),\n                                  beam.fortran['stiffness_indices'].ctypes.data_as(intP),\n                                  beam.fortran['frame_of_reference_delta'].ctypes.data_as(doubleP),\n                                  beam.fortran['rbmass'].ctypes.data_as(doubleP),\n                                  beam.fortran['node_master_elem'].ctypes.data_as(intP),\n                                  beam.fortran['vdof'].ctypes.data_as(intP),\n                                  beam.fortran['fdof'].ctypes.data_as(intP),\n                                  ct.byref(xbopts),\n                                  # CAREFUL, this is dXddt, with num_dof elements,\n                                  # not num_dof + 10\n                                  tstep.dqddt.ctypes.data_as(doubleP),\n                                  tstep.quat.ctypes.data_as(doubleP),\n                                  tstep.gravity_forces.ctypes.data_as(doubleP),\n                                  Mglobal.ctypes.data_as(doubleP),\n                                  Cglobal.ctypes.data_as(doubleP),\n                                  Kglobal.ctypes.data_as(doubleP),\n                                  Qglobal.ctypes.data_as(doubleP))\n\n    return Mglobal, Cglobal, Kglobal, Qglobal\n\ndef xbeam3_asbly_dynamic(beam, tstep, settings):\n    \"\"\"\n    xbeam3_asbly_dynamic\n\n    Generates the system matrices for a nonlinear dynamic structure with\n    free FoR motions\n\n    Args:\n        beam(Beam): beam information\n        tstep(StructTimeStepInfo): time step information\n        settings(settings):\n\n    Returns:\n    \tMglobal(numpy array): Mass matrix\n        Cglobal(numpy array): Damping matrix\n        Kglobal(numpy array): Stiffness matrix\n        Qglobal(numpy array): Vector of independent terms\n\n    Examples:\n\n    Notes:\n\n    \"\"\"\n\n    # library load\n    f_xbeam3_asbly_dynamic_python = xbeamlib.xbeam3_asbly_dynamic_python\n    f_xbeam3_asbly_dynamic_python.restype = None\n\n    # initialisation\n    n_elem = ct.c_int(beam.num_elem)\n    n_nodes = ct.c_int(beam.num_node)\n    num_dof = beam.num_dof.value\n    n_mass = ct.c_int(beam.n_mass)\n    n_stiff = ct.c_int(beam.n_stiff)\n    dt = ct.c_double(settings['dt'])\n\n    # Options\n    xbopts = Xbopts()\n    xbopts.PrintInfo = ct.c_bool(settings['print_info'])\n    xbopts.Solution = ct.c_int(312)\n    xbopts.MaxIterations = ct.c_int(settings['max_iterations'])\n    xbopts.NumLoadSteps = ct.c_int(settings['num_load_steps'])\n    xbopts.NumGauss = ct.c_int(0)\n    xbopts.DeltaCurved = ct.c_double(settings['delta_curved'])\n    xbopts.MinDelta = ct.c_double(settings['min_delta'])\n    xbopts.abs_threshold = ct.c_double(settings['abs_threshold'])\n    xbopts.NewmarkDamp = ct.c_double(settings['newmark_damp'])\n    xbopts.gravity_on = ct.c_bool(settings['gravity_on'])\n    xbopts.gravity = ct.c_double(settings['gravity'])\n    xbopts.gravity_dir_x = ct.c_double(settings['gravity_dir'][0])\n    xbopts.gravity_dir_y = ct.c_double(settings['gravity_dir'][1])\n    xbopts.gravity_dir_z = ct.c_double(settings['gravity_dir'][2])\n\n    # Initialize matrices\n    Mtotal = np.zeros((num_dof+10, num_dof+10), dtype=ct.c_double, order='F')\n    Ctotal = np.zeros((num_dof+10, num_dof+10), dtype=ct.c_double, order='F')\n    Ktotal = np.zeros((num_dof+10, num_dof+10), dtype=ct.c_double, order='F')\n    Qtotal = np.zeros((num_dof+10, ), dtype=ct.c_double, order='F')\n\n    f_xbeam3_asbly_dynamic_python(ct.byref(ct.c_int(num_dof)),\n                            ct.byref(n_nodes),\n                            ct.byref(n_elem),\n                            ct.byref(dt),\n                            beam.ini_info.pos.ctypes.data_as(doubleP),\n                            beam.ini_info.psi.ctypes.data_as(doubleP),\n                            tstep.pos.ctypes.data_as(doubleP),\n                            tstep.pos_dot.ctypes.data_as(doubleP),\n                            tstep.pos_ddot.ctypes.data_as(doubleP),\n                            tstep.psi.ctypes.data_as(doubleP),\n                            tstep.psi_dot.ctypes.data_as(doubleP),\n                            tstep.psi_ddot.ctypes.data_as(doubleP),\n                            tstep.steady_applied_forces.ctypes.data_as(doubleP),\n                            tstep.unsteady_applied_forces.ctypes.data_as(doubleP),\n                            tstep.for_vel.ctypes.data_as(doubleP),\n                            tstep.for_acc.ctypes.data_as(doubleP),\n                            # ct.byref(in_dt),\n                            beam.fortran['num_nodes'].ctypes.data_as(intP),\n                            beam.fortran['num_mem'].ctypes.data_as(intP),\n                            beam.fortran['connectivities'].ctypes.data_as(intP),\n                            beam.fortran['master'].ctypes.data_as(intP),\n                            ct.byref(n_mass),\n                            beam.fortran['mass'].ctypes.data_as(doubleP),\n                            beam.fortran['mass_indices'].ctypes.data_as(intP),\n                            ct.byref(n_stiff),\n                            beam.fortran['stiffness'].ctypes.data_as(doubleP),\n                            beam.fortran['inv_stiffness'].ctypes.data_as(doubleP),\n                            beam.fortran['stiffness_indices'].ctypes.data_as(intP),\n                            beam.fortran['frame_of_reference_delta'].ctypes.data_as(doubleP),\n                            beam.fortran['rbmass'].ctypes.data_as(doubleP),\n                            beam.fortran['node_master_elem'].ctypes.data_as(intP),\n                            beam.fortran['vdof'].ctypes.data_as(intP),\n                            beam.fortran['fdof'].ctypes.data_as(intP),\n                            ct.byref(xbopts),\n                            tstep.quat.ctypes.data_as(doubleP),\n                            tstep.q.ctypes.data_as(doubleP),\n                            tstep.dqdt.ctypes.data_as(doubleP),\n                            tstep.dqddt.ctypes.data_as(doubleP),\n                            tstep.gravity_forces.ctypes.data_as(doubleP),\n                            Mtotal.ctypes.data_as(doubleP),\n                            Ctotal.ctypes.data_as(doubleP),\n                            Ktotal.ctypes.data_as(doubleP),\n                            Qtotal.ctypes.data_as(doubleP))\n\n    return Mtotal, Ctotal, Ktotal, Qtotal\n\ndef cbeam3_correct_gravity_forces(beam, tstep, settings):\n    \"\"\"\n    cbeam3_correct_gravity_forces\n\n    Corrects the gravity forces orientation after a time step\n\n    Args:\n        beam(Beam): beam information\n        tstep(StructTimeStepInfo): time step information\n        settings(settings):\n    \"\"\"\n\n    # library load\n    f_cbeam3_correct_gravity_forces_python = xbeamlib.cbeam3_correct_gravity_forces_python\n    f_cbeam3_correct_gravity_forces_python.restype = None\n\n    # initialisation\n    n_elem = ct.c_int(beam.num_elem)\n    n_nodes = ct.c_int(beam.num_node)\n    n_mass = ct.c_int(beam.n_mass)\n    n_stiff = ct.c_int(beam.n_stiff)\n\n    f_cbeam3_correct_gravity_forces_python(ct.byref(n_nodes),\n                            ct.byref(n_elem),\n                            beam.ini_info.psi.ctypes.data_as(doubleP),\n                            tstep.psi.ctypes.data_as(doubleP),\n                            beam.fortran['num_nodes'].ctypes.data_as(intP),\n                            beam.fortran['num_mem'].ctypes.data_as(intP),\n                            beam.fortran['connectivities'].ctypes.data_as(intP),\n                            beam.fortran['master'].ctypes.data_as(intP),\n                            ct.byref(n_mass),\n                            beam.fortran['mass'].ctypes.data_as(doubleP),\n                            beam.fortran['mass_indices'].ctypes.data_as(intP),\n                            ct.byref(n_stiff),\n                            beam.fortran['stiffness'].ctypes.data_as(doubleP),\n                            beam.fortran['inv_stiffness'].ctypes.data_as(doubleP),\n                            beam.fortran['stiffness_indices'].ctypes.data_as(intP),\n                            beam.fortran['frame_of_reference_delta'].ctypes.data_as(doubleP),\n                            beam.fortran['rbmass'].ctypes.data_as(doubleP),\n                            beam.fortran['node_master_elem'].ctypes.data_as(intP),\n                            beam.fortran['vdof'].ctypes.data_as(intP),\n                            beam.fortran['fdof'].ctypes.data_as(intP),\n                            tstep.gravity_forces.ctypes.data_as(doubleP))\n\ndef cbeam3_asbly_static(beam, tstep, settings, iLoadStep):\n    \"\"\"\n    cbeam3_asbly_static\n\n    Generates the system matrices for a nonlinear static structure\n\n    Args:\n        beam(Beam): beam information\n        tstep(StructTimeStepInfo): time step information\n        settings(settings):\n\n    Returns:\n        Kglobal(numpy array): Stiffness matrix\n        Qglobal(numpy array): Vector of independent terms\n\n    Examples:\n\n    Notes:\n\n    \"\"\"\n\n    # library load\n    f_cbeam3_asbly_static_python = xbeamlib.cbeam3_asbly_static_python\n    f_cbeam3_asbly_static_python.restype = None\n\n    # initialisation\n    n_elem = ct.c_int(beam.num_elem)\n    n_nodes = ct.c_int(beam.num_node)\n    num_dof = beam.num_dof.value\n    n_mass = ct.c_int(beam.n_mass)\n    n_stiff = ct.c_int(beam.n_stiff)\n    # dt = settings['dt']\n\n    # Options\n    xbopts = Xbopts()\n    xbopts.PrintInfo = ct.c_bool(settings['print_info'])\n    # xbopts.Solution = ct.c_int(312)\n    # xbopts.MaxIterations = settings['max_iterations']\n    xbopts.NumLoadSteps = ct.c_int(settings['num_load_steps'] + 1)\n    # xbopts.NumGauss = ct.c_int(0)\n    # xbopts.DeltaCurved = settings['delta_curved']\n    # xbopts.MinDelta = settings['min_delta']\n    # xbopts.NewmarkDamp = settings['newmark_damp']\n    xbopts.gravity_on = ct.c_bool(settings['gravity_on'])\n    xbopts.gravity = ct.c_double(settings['gravity'])\n    gravity_vector = np.dot(beam.timestep_info[ts].cag(), settings['gravity_dir'])\n    xbopts.gravity_dir_x = ct.c_double(gravity_vector[0])\n    xbopts.gravity_dir_y = ct.c_double(gravity_vector[1])\n    xbopts.gravity_dir_z = ct.c_double(gravity_vector[2])\n\n    # Initialize matrices\n    # Mglobal = np.zeros((num_dof, num_dof), dtype=ct.c_double, order='F')\n    # Cglobal = np.zeros((num_dof, num_dof), dtype=ct.c_double, order='F')\n    Kglobal = np.zeros((num_dof, num_dof), dtype=ct.c_double, order='F')\n    Qglobal = np.zeros((num_dof, ), dtype=ct.c_double, order='F')\n\n    f_cbeam3_asbly_static_python(ct.byref(ct.c_int(num_dof)),\n                            ct.byref(n_nodes),\n                            ct.byref(n_elem),\n                            beam.ini_info.pos.ctypes.data_as(doubleP),\n                            beam.ini_info.psi.ctypes.data_as(doubleP),\n                            tstep.pos.ctypes.data_as(doubleP),\n                            tstep.psi.ctypes.data_as(doubleP),\n                            tstep.steady_applied_forces.ctypes.data_as(doubleP),\n                            beam.fortran['num_nodes'].ctypes.data_as(intP),\n                            beam.fortran['num_mem'].ctypes.data_as(intP),\n                            beam.fortran['connectivities'].ctypes.data_as(intP),\n                            beam.fortran['master'].ctypes.data_as(intP),\n                            ct.byref(n_mass),\n                            beam.fortran['mass'].ctypes.data_as(doubleP),\n                            beam.fortran['mass_indices'].ctypes.data_as(intP),\n                            ct.byref(n_stiff),\n                            beam.fortran['stiffness'].ctypes.data_as(doubleP),\n                            beam.fortran['inv_stiffness'].ctypes.data_as(doubleP),\n                            beam.fortran['stiffness_indices'].ctypes.data_as(intP),\n                            beam.fortran['frame_of_reference_delta'].ctypes.data_as(doubleP),\n                            beam.fortran['rbmass'].ctypes.data_as(doubleP),\n                            beam.fortran['node_master_elem'].ctypes.data_as(intP),\n                            beam.fortran['vdof'].ctypes.data_as(intP),\n                            beam.fortran['fdof'].ctypes.data_as(intP),\n                            ct.byref(xbopts),\n                            tstep.gravity_forces.ctypes.data_as(doubleP),\n                            Kglobal.ctypes.data_as(doubleP),\n                            Qglobal.ctypes.data_as(doubleP),\n                            ct.byref(ct.c_int(iLoadStep)))\n\n    return Kglobal, Qglobal\n\n\ndef xbeam_step_coupledrigid(beam, settings, ts, tstep=None, dt=None):\n    # library load\n    f_xbeam_solv_rigid_step_python = xbeamlib.xbeam_solv_coupledrigid_step_python\n    f_xbeam_solv_rigid_step_python.restype = None\n\n    if tstep is None:\n        tstep = beam.timestep_info[-1]\n\n    # initialisation\n    n_elem = ct.c_int(beam.num_elem)\n    n_nodes = ct.c_int(beam.num_node)\n    n_mass = ct.c_int(beam.n_mass)\n    n_stiff = ct.c_int(beam.n_stiff)\n\n    xbopts = Xbopts()\n    xbopts.PrintInfo = ct.c_bool(settings['print_info'])\n    xbopts.MaxIterations = ct.c_int(settings['max_iterations'])\n    xbopts.NumLoadSteps = ct.c_int(settings['num_load_steps'])\n    xbopts.DeltaCurved = ct.c_double(settings['delta_curved'])\n    xbopts.MinDelta = ct.c_double(settings['min_delta'])\n    xbopts.abs_threshold = ct.c_double(settings['abs_threshold'])\n    xbopts.NewmarkDamp = ct.c_double(settings['newmark_damp'])\n    xbopts.gravity_on = ct.c_bool(settings['gravity_on'])\n    xbopts.gravity = ct.c_double(settings['gravity'])\n    xbopts.balancing = ct.c_bool(settings['balancing'])\n    xbopts.gravity_dir_x = ct.c_double(settings['gravity_dir'][0])\n    xbopts.gravity_dir_y = ct.c_double(settings['gravity_dir'][1])\n    xbopts.gravity_dir_z = ct.c_double(settings['gravity_dir'][2])\n    xbopts.relaxation_factor = ct.c_double(settings['relaxation_factor'])\n\n    if dt is None:\n        in_dt = ct.c_double(settings['dt'])\n    else:\n        in_dt = ct.c_double(dt)\n\n    ctypes_ts = ct.c_int(ts)\n    numdof = ct.c_int(beam.num_dof.value)\n\n    f_xbeam_solv_rigid_step_python(ct.byref(numdof),\n                                    ct.byref(ctypes_ts),\n                                    ct.byref(n_elem),\n                                    ct.byref(n_nodes),\n                                    ct.byref(in_dt),\n                                    beam.fortran['num_nodes'].ctypes.data_as(intP),\n                                    beam.fortran['num_mem'].ctypes.data_as(intP),\n                                    beam.fortran['connectivities'].ctypes.data_as(intP),\n                                    beam.fortran['master'].ctypes.data_as(intP),\n                                    ct.byref(n_mass),\n                                    beam.fortran['mass'].ctypes.data_as(doubleP),\n                                    beam.fortran['mass_indices'].ctypes.data_as(intP),\n                                    ct.byref(n_stiff),\n                                    beam.fortran['stiffness'].ctypes.data_as(doubleP),\n                                    beam.fortran['inv_stiffness'].ctypes.data_as(doubleP),\n                                    beam.fortran['stiffness_indices'].ctypes.data_as(intP),\n                                    beam.fortran['frame_of_reference_delta'].ctypes.data_as(doubleP),\n                                    beam.fortran['rbmass'].ctypes.data_as(doubleP),\n                                    beam.fortran['node_master_elem'].ctypes.data_as(intP),\n                                    beam.fortran['vdof'].ctypes.data_as(intP),\n                                    beam.fortran['fdof'].ctypes.data_as(intP),\n                                    ct.byref(xbopts),\n                                    tstep.pos.ctypes.data_as(doubleP),\n                                    tstep.psi.ctypes.data_as(doubleP),\n                                    tstep.steady_applied_forces.ctypes.data_as(doubleP),\n                                    tstep.unsteady_applied_forces.ctypes.data_as(doubleP),\n                                    tstep.gravity_forces.ctypes.data_as(doubleP),\n                                    tstep.quat.ctypes.data_as(doubleP),\n                                    tstep.for_vel.ctypes.data_as(doubleP),\n                                    tstep.for_acc.ctypes.data_as(doubleP),\n                                    tstep.q[-10:].ctypes.data_as(doubleP),\n                                    tstep.dqdt[-10:].ctypes.data_as(doubleP),\n                                    tstep.dqddt[-10:].ctypes.data_as(doubleP))\n"
  },
  {
    "path": "sharpy/utils/__init__.py",
    "content": "\"\"\"Utilities\"\"\""
  },
  {
    "path": "sharpy/utils/algebra.py",
    "content": "\"\"\"\nAlgebra package\n\nExtensive library with geometrical and algebraic operations\n\nNote:\n    Tests can be found in ``tests/utils/algebra_test``\n\"\"\"\n\nimport numpy as np\nfrom warnings import warn\n\n\n#######\n# functions for back compatibility\ndef quat2rot(quat):\n    warn('quat2rot(quat) is obsolete! Use quat2rotation(quat).T instead!', stacklevel=2)\n    return quat2rotation(quat).T\n\n\ndef crv2rot(psi):\n    warn('crv2rot(psi) is obsolete! Use crv2rotation(psi) instead!', stacklevel=2)\n    return crv2rotation(psi)\n\n\ndef rot2crv(rot):\n    warn('rot2crv(rot) is obsolete! Use rotation2crv(rot.T) instead!', stacklevel=2)\n    return rotation2crv(rot.T)\n\n\ndef triad2rot(xb, yb, zb):\n    warn('triad2rot(xb,yb,zb) is obsolete! Use triad2rotation(xb,yb,zb).T instead!', stacklevel=2)\n    return triad2rotation(xb, yb, zb).T\n\n\ndef mat2quat(rot):\n    \"\"\"\n    Rotation matrix to quaternion function.\n\n    Warnings:\n        This function is deprecated and now longer supported. Please use ``algebra.rotation2quat(rot.T)`` instead.\n\n    Args:\n        rot: Rotation matrix\n\n    Returns:\n        np.array: equivalent quaternion\n    \"\"\"\n    warn('mat2quat(rot) is obsolete! Use rotation2quat(rot.T) instead!', stacklevel=2)\n\n    return rotation2quat(rot.T)\n\n\ndef tangent_vector(in_coord, ordering=None):\n    r\"\"\"\n    Tangent vector calculation for 2+ noded elements.\n\n    Calculates the tangent vector interpolating every dimension\n    separately. It uses a (n_nodes - 1) degree polynomial, and the\n    differentiation is analytical.\n\n    Calculation method:\n\n        1. A n_nodes-1 polynomial is fitted through the nodes per dimension.\n        2. Those polynomials are analytically differentiated with respect to the node index\n        3. The tangent vector is given by:\n\n        .. math::\n\n            \\vec{t} = \\frac{s_x'\\vec{i} + s_y'\\vec{j} + s_z'\\vec{k}}{\\left| s_x'\\vec{i} + s_y'\\vec{j} + s_z'\\vec{k}\\right|}\n\n\n        where :math:`'` notes the differentiation with respect to the index number\n\n\n    Args:\n        in_coord (np.ndarray): array of coordinates of the nodes. Dimensions = ``[n_nodes, ndim]``\n\n    Notes:\n        Dimensions are treated independent from each other, interpolating polynomials are computed\n        individually.\n\n    \"\"\"\n    n_nodes, ndim = in_coord.shape\n\n    if ordering is None:\n        if n_nodes == 2:\n            ordering = [0, n_nodes - 1]\n        elif n_nodes == 3:\n            ordering = [0, 2, 1]\n        else:\n            raise NotImplementedError('Elements with more than 3 nodes are not supported')\n\n    polyfit_vec, polyfit_der_vec, coord = get_polyfit(in_coord, ordering)\n\n    # tangent vector calculation\n    # \\vec{t} = \\frac{fx'i + fy'j + fz'k}/mod(...)\n    tangent = np.zeros_like(coord)\n    for inode in range(n_nodes):\n        vector = []\n        for idim in range(ndim):\n            vector.append((polyfit_der_vec[idim])(inode))\n        vector = np.array(vector)\n        vector /= np.linalg.norm(vector)\n        tangent[inode, :] = vector\n\n    # check orientation of tangent vector\n    fake_tangent = np.zeros_like(tangent)\n    for inode in range(n_nodes):\n        if inode == n_nodes - 1:\n            # use previous vector\n            fake_tangent[inode, :] = fake_tangent[inode - 1, :]\n            continue\n        fake_tangent[inode, :] = coord[inode + 1, :] - coord[inode, :]\n\n    for inode in range(n_nodes):\n        if np.dot(tangent[inode, :], fake_tangent[inode, :]) < 0:\n            tangent[inode, :] *= -1\n\n    return tangent, polyfit_vec\n\n\ndef get_polyfit(in_coord, ordering):\n    coord = in_coord.copy()\n    n_nodes, ndim = coord.shape\n    for index in range(n_nodes):\n        order = ordering[index]\n        coord[index, :] = in_coord[order, :]\n\n    polynomial_degree = n_nodes - 1\n    # first, the polynomial fit.\n    # we are going to differentiate wrt the indices ([0, 1, 2] for a 3-node)\n    polyfit_vec = []  # we are going to store here the coefficients of the polyfit\n    for idim in range(ndim):\n        polyfit_vec.append(np.polyfit(range(n_nodes), coord[:, idim],\n                                      polynomial_degree))\n\n    # differentiation\n    polyfit_der_vec = []\n    for idim in range(ndim):\n        polyfit_der_vec.append(np.poly1d(np.polyder(polyfit_vec[idim])))\n\n    return polyfit_vec, polyfit_der_vec, coord\n\n\ndef unit_vector(vector):\n    r\"\"\"\n    Transforms the input vector into a unit vector\n\n    .. math:: \\mathbf{\\hat{v}} = \\frac{\\mathbf{v}}{\\|\\mathbf{v}\\|}\n\n    Args:\n        vector (np.array): vector to normalise\n\n    Returns:\n        np.array: unit vector\n\n    \"\"\"\n    if np.linalg.norm(vector) < 1e-6:\n        return np.zeros_like(vector)\n    return vector / np.linalg.norm(vector)\n\n\ndef rotation_matrix_around_axis(axis, angle):\n    axis = unit_vector(axis)\n    rot = np.cos(angle) * np.eye(3)\n    rot += np.sin(angle) * skew(axis)\n    rot += (1 - np.cos(angle)) * np.outer(axis, axis)\n    return rot\n\n\ndef skew(vector):\n    r\"\"\"\n    Returns a skew symmetric matrix such that\n\n    .. math:: \\boldsymbol{v} \\times \\boldsymbol{u} = \\tilde{\\boldsymbol{v}}{\\boldsymbol{u}\n\n    where\n\n    .. math:: \\tilde{\\boldsymbol{v}} = \\begin{bmatrix}\n        0 & -v_z & v_y \\\\\n        v_z & 0 & -v_x \\\\\n        -v_y & v_x & 0 \\end{bmatrix}.\n\n    Args:\n        vector (np.ndarray): 3-dimensional vector\n\n    Returns:\n        np.array: Skew-symmetric matrix.\n\n    \"\"\"\n    if not vector.size == 3:\n        raise ValueError('The input vector is not 3D')\n\n    matrix = np.zeros((3, 3))\n    matrix[1, 2] = -vector[0]\n    matrix[2, 0] = -vector[1]\n    matrix[0, 1] = -vector[2]\n    matrix[2, 1] = vector[0]\n    matrix[0, 2] = vector[1]\n    matrix[1, 0] = vector[2]\n    return matrix\n\n\ndef quadskew(vector):\n    \"\"\"\n    Generates the matrix needed to obtain the quaternion in the following time step\n    through integration of the FoR angular velocity.\n\n\n    Args:\n        vector (np.array): FoR angular velocity\n\n    Notes:\n        The angular velocity is assumed to be constant in the time interval\n        Equivalent to lib_xbeam function\n        Quaternion ODE to compute orientation of body-fixed frame a\n        See Shearer and Cesnik (2007) for definition\n\n    Returns:\n        np.array: matrix\n    \"\"\"\n    if not vector.size == 3:\n        raise ValueError('The input vector is not 3D')\n\n    matrix = np.zeros((4, 4))\n    matrix[0, 1:4] = vector\n    matrix[1:4, 0] = -vector\n    matrix[1:4, 1:4] = skew(vector)\n    return matrix\n\n\ndef triad2rotation(xb, yb, zb):\n    \"\"\"\n    If the input triad is the \"b\" coord system given in \"a\" frame,\n    (the vectors of the triad are xb, yb, zb), this function returns Rab, ie the\n    rotation matrix required to rotate the FoR A onto B.\n    :param xb:\n    :param yb:\n    :param zb:\n    :return: rotation matrix Rab\n    \"\"\"\n    return np.column_stack((xb, yb, zb))\n\n\ndef rot_matrix_2d(angle):\n    return np.array([[np.cos(angle), -np.sin(angle)], [np.sin(angle), np.cos(angle)]])\n\n\ndef angle_between_vectors(vec_a, vec_b):\n    angle = np.arctan2(np.linalg.norm(np.cross(vec_a, vec_b)), np.dot(vec_a, vec_b))\n    return angle\n\n\ndef angle_between_vectors_sign(vec_a, vec_b, plane_normal=np.array([0, 0, 1])):\n    angle = np.arctan2(np.linalg.norm(np.cross(vec_a, vec_b)), np.dot(vec_a, vec_b))\n    if np.dot(plane_normal, np.cross(vec_a, vec_b)) < 0:\n        angle *= -1\n    return angle\n\n\ndef angle_between_vector_and_plane(vector, plane_normal):\n    angle = np.arcsin((np.linalg.norm(np.dot(vector, plane_normal))) /\n                      (np.linalg.norm(vector) * np.linalg.norm(plane_normal)))\n    return angle\n\n\ndef panel_area(A, B, C, D):\n    \"\"\"\n    Calculates the area of a quadrilateral panel from the corner \n    points A,B,C, and D using Bertschneider's formula\n    \n    Args:\n        A (np.ndarray): Coordinates of point 1\n        B (np.ndarray): Coordinates of point 2\n        C (np.ndarray): Coordinates of point 3\n        D (np.ndarray): Coordinates of point 4\n\n    Returns:\n        float: Area of quadrilateral panel\n    \"\"\"\n    Theta_1 = angle_between_vectors(A - B, A - D)\n    Theta_2 = angle_between_vectors(B - C, B - D)\n    a = np.linalg.norm(D - A)\n    b = np.linalg.norm(A - B)\n    c = np.linalg.norm(B - C)\n    d = np.linalg.norm(C - D)\n    s = (a + b + c + d) / 2\n    area = np.sqrt((s - a) * (s - b) * (s - c) * (s - d) - a * b * c * d * np.cos(0.5 * (Theta_1 + Theta_2)) ** 2)\n    return area\n\n\ndef rotation2quat(Cab):\n    r\"\"\"\n    Given a rotation matrix :math:`C^{AB}` rotating the frame A onto B, the function returns\n    the minimal \"positive angle\" quaternion representing this rotation, where the quaternion, :math:`\\vec{\\chi}` is\n    defined as:\n\n        .. math:: \\vec{\\chi}=\n            \\left[\\cos\\left(\\frac{\\psi}{2}\\right),\\,\n            \\sin\\left(\\frac{\\psi}{2}\\right)\\mathbf{\\hat{n}}\\right]\n\n    Args:\n        Cab (np.array): rotation matrix :math:`C^{AB}` from frame A to B\n\n    Returns:\n        np.array: equivalent quaternion :math:`\\vec{\\chi}`\n\n    Notes:\n        This is the inverse of ``algebra.quat2rotation`` for Cartesian rotation vectors\n        associated to rotations in the range :math:`[-\\pi,\\pi]`, i.e.:\n\n            ``fv == algebra.rotation2crv(algebra.crv2rotation(fv))``\n\n        where ``fv`` represents the Cartesian Rotation Vector, :math:`\\vec{\\psi}` defined as:\n\n            .. math:: \\vec{\\psi} = \\psi\\,\\mathbf{\\hat{n}}\n\n        such that :math:`\\mathbf{\\hat{n}}` is a unit vector and the scalar :math:`\\psi` is in the range\n        :math:`[-\\pi,\\,\\pi]`.\n\n    \"\"\"\n\n    s = np.zeros((4, 4))\n\n    s[0, 0] = 1.0 + np.trace(Cab)\n    s[0, 1:] = matrix2skewvec(Cab)\n\n    s[1, 0] = Cab[2, 1] - Cab[1, 2]\n    s[1, 1] = 1.0 + Cab[0, 0] - Cab[1, 1] - Cab[2, 2]\n    s[1, 2] = Cab[0, 1] + Cab[1, 0]\n    s[1, 3] = Cab[0, 2] + Cab[2, 0]\n\n    s[2, 0] = Cab[0, 2] - Cab[2, 0]\n    s[2, 1] = Cab[1, 0] + Cab[0, 1]\n    s[2, 2] = 1.0 - Cab[0, 0] + Cab[1, 1] - Cab[2, 2]\n    s[2, 3] = Cab[1, 2] + Cab[2, 1]\n\n    s[3, 0] = Cab[1, 0] - Cab[0, 1]\n    s[3, 1] = Cab[0, 2] + Cab[2, 0]\n    s[3, 2] = Cab[1, 2] + Cab[2, 1]\n    s[3, 3] = 1.0 - Cab[0, 0] - Cab[1, 1] + Cab[2, 2]\n\n    smax = np.max(np.diag(s))\n    ismax = np.argmax(np.diag(s))\n\n    # compute quaternion angles\n    quat = np.zeros((4,))\n    quat[ismax] = 0.5 * np.sqrt(smax)\n    for i in range(4):\n        if i == ismax:\n            continue\n        quat[i] = 0.25 * s[ismax, i] / quat[ismax]\n\n    return quat_bound(quat)\n\n\ndef quat_bound(quat):\n    r\"\"\"\n    Given a quaternion, :math:`\\vec{\\chi}`, associated to a rotation of angle :math:`\\psi`\n    about an axis :math:`\\mathbf{\\hat{n}}`, the function \"bounds\" the quaternion,\n    i.e. sets the rotation axis :math:`\\mathbf{\\hat{n}}` such that\n    :math:`\\psi` in :math:`[-\\pi,\\pi]`.\n\n    Notes:\n        As quaternions are defined as:\n\n            .. math:: \\vec{\\chi}=\n                \\left[\\cos\\left(\\frac{\\psi}{2}\\right),\\,\n                \\sin\\left(\\frac{\\psi}{2}\\right)\\mathbf{\\hat{n}}\\right]\n\n        this is equivalent to enforcing :math:`\\chi_0\\ge0`.\n\n    Args:\n        quat (np.array): quaternion to bound\n\n    Returns:\n        np.array: bounded quaternion\n\n    \"\"\"\n    if quat[0] < 0:\n        quat *= -1.\n    return quat\n\n\ndef matrix2skewvec(matrix):\n    vector = np.array([matrix[2, 1] - matrix[1, 2],\n                       matrix[0, 2] - matrix[2, 0],\n                       matrix[1, 0] - matrix[0, 1]])\n    return vector\n\n\ndef quat2crv(quat):\n    crv_norm = 2.0 * np.arccos(max(-1.0, min(quat[0], 1.0)))\n\n    # normal vector\n    if abs(crv_norm) < 1e-15:\n        psi = np.zeros((3,))\n    else:\n        psi = crv_norm * quat[1:4] / np.sin(crv_norm * 0.5)\n\n    return psi\n\n\ndef crv2quat(psi):\n    r\"\"\"\n    Converts a Cartesian rotation vector,\n\n        .. math:: \\vec{\\psi} = \\psi\\,\\mathbf{\\hat{n}}\n\n    into a \"minimal rotation\" quaternion, i.e. being the quaternion, :math:`\\vec{\\chi}`, defined as:\n\n        .. math:: \\vec{\\chi}=\n            \\left[\\cos\\left(\\frac{\\psi}{2}\\right),\\,\n            \\sin\\left(\\frac{\\psi}{2}\\right)\\mathbf{\\hat{n}}\\right]\n\n    the rotation axis, :math:`\\mathbf{\\hat{n}}` is such that the\n    rotation angle, :math:`\\psi`, is in :math:`[-\\pi,\\,\\pi]` or,\n    equivalently, :math:`\\chi_0\\ge0`.\n\n    Args:\n        psi (np.array): Cartesian Rotation Vector, CRV: :math:`\\vec{\\psi} = \\psi\\,\\mathbf{\\hat{n}}`.\n\n    Returns:\n        np.array: equivalent quaternion :math:`\\vec{\\chi}`\n\n    \"\"\"\n\n    # minimise crv rotation\n    psi_new = crv_bounds(psi)\n\n    fi = np.linalg.norm(psi_new)\n    if fi > 1e-15:\n        nv = psi_new / fi\n    else:\n        nv = psi_new\n\n    quat = np.zeros((4,))\n    quat[0] = np.cos(.5 * fi)\n    quat[1:] = np.sin(.5 * fi) * nv\n\n    return quat\n\n\ndef crv_bounds(crv_ini):\n    r\"\"\"\n    Forces the Cartesian rotation vector norm, :math:`\\|\\vec{\\psi}\\|`, to be in the range\n    :math:`[-\\pi,\\pi]`, i.e. determines the rotation axis orientation, :math:`\\mathbf{\\hat{n}}`,\n    so as to ensure \"minimal rotation\".\n\n    Args:\n        crv_ini (np.array): Cartesian rotation vector, :math:`\\vec{\\psi}`\n\n    Returns:\n        np.array: modified and bounded, equivalent Cartesian rotation vector\n\n    \"\"\"\n\n    crv = crv_ini.copy()\n    # original norm\n    norm_ini = np.linalg.norm(crv_ini)\n\n    # force the norm to be in [-pi, pi]\n    norm = norm_ini - 2.0 * np.pi * int(norm_ini / (2 * np.pi))\n\n    if norm == 0.0:\n        crv *= 0.0\n    else:\n        if norm > np.pi:\n            norm -= 2.0 * np.pi\n        elif norm < -np.pi:\n            norm += 2.0 * np.pi\n        crv *= (norm / norm_ini)\n\n    return crv\n    # return crv_ini\n\n\ndef triad2crv(xb, yb, zb):\n    return rotation2crv(triad2rotation(xb, yb, zb))\n\n\ndef crv2triad(psi):\n    rot_matrix = crv2rotation(psi)\n    return rot_matrix[:, 0], rot_matrix[:, 1], rot_matrix[:, 2]\n\n\ndef crv2rotation(psi):\n    r\"\"\"\n    Given a Cartesian rotation vector, :math:`\\boldsymbol{\\Psi}`, the function produces the rotation\n    matrix required to rotate a vector according to :math:`\\boldsymbol{\\Psi}`.\n\n    The rotation matrix is given by\n\n    .. math::\n        \\mathbf{R} = \\mathbf{I} + \\frac{\\sin||\\boldsymbol{\\Psi}||}{||\\boldsymbol{\\Psi}||} \\tilde{\\boldsymbol{\\Psi}} +\n        \\frac{1-\\cos{||\\boldsymbol{\\Psi}||}}{||\\boldsymbol{\\Psi}||^2}\\tilde{\\boldsymbol{\\Psi}} \\tilde{\\boldsymbol{\\Psi}}\n\n    To avoid the singularity when :math:`||\\boldsymbol{\\Psi}||=0`, the series expansion is used\n\n    .. math:: \\mathbf{R} = \\mathbf{I} + \\tilde{\\boldsymbol{\\Psi}} + \\frac{1}{2!}\\tilde{\\boldsymbol{\\Psi}}^2.\n\n\n    Args:\n        psi (np.array): Cartesian rotation vector :math:`\\boldsymbol{\\Psi}`.\n\n    Returns:\n        np.array: equivalent rotation matrix\n\n    References:\n        Geradin and Cardona, Flexible Multibody Dynamics: A finite element approach. Chapter 4\n\n    \"\"\"\n\n    norm_psi = np.linalg.norm(psi)\n\n    if norm_psi < 1e-15:\n        skew_psi = skew(psi)\n        rot_matrix = np.eye(3) + skew_psi + 0.5 * np.dot(skew_psi, skew_psi)\n    else:\n        normal = psi / norm_psi\n        skew_normal = skew(normal)\n\n        rot_matrix = np.eye(3)\n        rot_matrix += np.sin(norm_psi) * skew_normal\n        rot_matrix += (1.0 - np.cos(norm_psi)) * np.dot(skew_normal, skew_normal)\n\n    return rot_matrix\n\n\ndef rotation2crv(Cab):\n    r\"\"\"\n    Given a rotation matrix :math:`C^{AB}` rotating the frame A onto B, the function returns\n    the minimal size Cartesian rotation vector, :math:`\\vec{\\psi}` representing this rotation.\n\n    Args:\n        Cab (np.array): rotation matrix :math:`C^{AB}`\n\n    Returns:\n        np.array: equivalent Cartesian rotation vector, :math:`\\vec{\\psi}`.\n\n    Notes:\n        this is the inverse of ``algebra.crv2rotation`` for Cartesian rotation vectors\n        associated to rotations in the range :math:`[-\\pi,\\,\\pi]`, i.e.:\n\n            ``fv == algebra.rotation2crv(algebra.crv2rotation(fv))``\n\n        for each Cartesian rotation vector of the form :math:`\\vec{\\psi} = \\psi\\,\\mathbf{\\hat{n}}`\n        represented as ``fv=a*nv`` such that ``nv`` is a unit vector and the scalar ``a`` is in the\n        range :math:`[-\\pi,\\,\\pi]`.\n\n    \"\"\"\n\n    if np.linalg.norm(Cab) < 1e-6:\n        raise AttributeError('Element Vector V is not orthogonal to reference line (51105)')\n\n    quat = rotation2quat(Cab)\n    psi = quat2crv(quat)\n\n    if np.linalg.norm(Cab) < 1.0e-15:\n        psi[0] = Cab[1, 2]\n        psi[1] = Cab[2, 0]\n        psi[2] = Cab[0, 1]\n\n    return crv_bounds(psi)\n\n\ndef crv2tan(psi):\n    r\"\"\"\n    Returns the tangential operator, :math:`\\mathbf{T}(\\boldsymbol{\\Psi})`, that is a function of\n    the Cartesian Rotation Vector, :math:`\\boldsymbol{\\Psi}`.\n\n    .. math::\n\n        \\boldsymbol{T}(\\boldsymbol{\\Psi}) =\n        \\mathbf{I} +\n        \\left(\\frac{\\cos ||\\boldsymbol{\\Psi}|| - 1}{||\\boldsymbol{\\Psi}||^2}\\right)\\tilde{\\boldsymbol{\\Psi}}\n        + \\left(1 - \\frac{\\sin||\\boldsymbol{\\Psi}||}{||\\boldsymbol{\\Psi}||}\\right)\n        \\frac{\\tilde{\\boldsymbol{\\Psi}}\\tilde{\\boldsymbol{\\Psi}}}{||\\boldsymbol{\\Psi}||^2}\n\n    When the norm of the CRV approaches 0, the series expansion expression is used in-lieu of the above expression\n\n    .. math::\n\n        \\boldsymbol{T}(\\boldsymbol{\\Psi}) =\n        \\mathbf{I}\n        -\\frac{1}{2!}\\tilde{\\boldsymbol{\\Psi}} + \\frac{1}{3!}\\tilde{\\boldsymbol{\\Psi}}^2\n\n    Args:\n        psi (np.array): Cartesian Rotation Vector, :math:`\\boldsymbol{\\Psi}`.\n\n    Returns:\n        np.array: Tangential operator\n\n    References:\n        Geradin and Cardona. Flexible Multibody Dynamics: A Finite Element Approach. Chapter 4.\n    \"\"\"\n\n    norm_psi = np.linalg.norm(psi)\n    psi_skew = skew(psi)\n\n    eps = 1e-8\n    if norm_psi < eps:\n        return np.eye(3) - 0.5 * psi_skew + 1.0 / 6.0 * np.dot(psi_skew, psi_skew)\n    else:\n        k1 = (np.cos(norm_psi) - 1.0) / (norm_psi * norm_psi)\n        k2 = (1.0 - np.sin(norm_psi) / norm_psi) / (norm_psi * norm_psi)\n        return np.eye(3) + k1 * psi_skew + k2 * np.dot(psi_skew, psi_skew)\n\n\ndef crv2invtant(psi):\n    tan = crv2tan(psi).T\n    return np.linalg.inv(tan)\n\n\ndef triad2crv_vec(v1, v2, v3):\n    n_nodes, _ = v1.shape\n    crv_vec = np.zeros((n_nodes, 3))\n    for inode in range(n_nodes):\n        crv_vec[inode, :] = triad2crv(v1[inode, :], v2[inode, :], v3[inode, :])\n\n    return crv_vec\n\n\ndef crv2triad_vec(crv_vec):\n    n_nodes, _ = crv_vec.shape\n    v1 = np.zeros((n_nodes, 3))\n    v2 = np.zeros((n_nodes, 3))\n    v3 = np.zeros((n_nodes, 3))\n    for inode in range(n_nodes):\n        v1[inode, :], v2[inode, :], v3[inode, :] = crv2triad(crv_vec[inode, :])\n    return v1, v2, v3\n\n\ndef quat2rotation(q1):\n    r\"\"\"Calculate rotation matrix based on quaternions.\n\n    If B is a FoR obtained rotating a FoR A by an angle :math:`\\phi` about an axis :math:`\\mathbf{n}`\n    (recall :math:`\\mathbf{n}` will be invariant during the rotation), and :math:`\\mathbf{q}` is the related\n    quaternion, :math:`\\mathbf{q}(\\phi,\\mathbf{n})`, the function will return the matrix :math:`C^{AB}` such that:\n\n        - :math:`C^{AB}` rotates FoR A onto FoR B.\n\n        - :math:`C^{AB}` transforms the coordinates of a vector defined in B component to\n          A components i.e. :math:`\\mathbf{v}^A = C^{AB}(\\mathbf{q})\\mathbf{v}^B`.\n\n    .. math::\n        C^{AB}(\\mathbf{q}) = \\begin{pmatrix}\n            q_0^2 + q_1^2 - q_2^2 -q_3^2 & 2(q_1 q_2 - q_0 q_3) & 2(q_1 q_3 + q_0 q_2) \\\\\n            2(q_1 q_2 + q_0 q_3) & q_0^2 - q_1^2 + q_2^2 - q_3^2 & 2(q_2 q_3 - q_0 q_1) \\\\\n            2(q_1 q_3 - q_0 q_2) & 2(q_2 q_3 + q_0 q_1) & q_0^2 -q_1^2 -q_2^2 +q_3^2\n            \\end{pmatrix}\n\n    Notes:\n        The inverse rotation is defined as the transpose of the matrix :math:`C^{BA} = C^{{AB}^T}`.\n\n        In typical SHARPy applications, the quaternion relation between the A and G frames is expressed\n        as :math:`C^{GA}(\\mathbf{q})`, and in the context of this function it corresponds to:\n\n        >>> C_ga = quat2rotation(q1)\n        >>> C_ag = quat2rotation.T(q1)\n\n    Args:\n        q (np.ndarray): Quaternion :math:`\\mathbf{q}(\\phi, \\mathbf{n})`.\n\n    Returns:\n        np.ndarray: :math:`C^{AB}` rotation matrix from FoR B to FoR A.\n\n    References:\n        Stevens, L. Aircraft Control and Simulation. 1985. pg 41\n    \"\"\"\n\n    q = q1.copy(order='F')\n    q /= np.linalg.norm(q)\n\n    rot_mat = np.zeros((3, 3), order='F')\n\n    rot_mat[0, 0] = q[0] ** 2 + q[1] ** 2 - q[2] ** 2 - q[3] ** 2\n    rot_mat[1, 1] = q[0] ** 2 - q[1] ** 2 + q[2] ** 2 - q[3] ** 2\n    rot_mat[2, 2] = q[0] ** 2 - q[1] ** 2 - q[2] ** 2 + q[3] ** 2\n\n    rot_mat[1, 0] = 2. * (q[1] * q[2] + q[0] * q[3])\n    rot_mat[0, 1] = 2. * (q[1] * q[2] - q[0] * q[3])\n\n    rot_mat[2, 0] = 2. * (q[1] * q[3] - q[0] * q[2])\n    rot_mat[0, 2] = 2. * (q[1] * q[3] + q[0] * q[2])\n\n    rot_mat[2, 1] = 2. * (q[2] * q[3] + q[0] * q[1])\n    rot_mat[1, 2] = 2. * (q[2] * q[3] - q[0] * q[1])\n\n    return rot_mat\n\n\ndef rot_skew(vec):\n    from warnings import warn\n    warn(\"use 'skew' function instead of 'rot_skew'\")\n    return skew(vec)\n\n\ndef rotation3d_x(angle):\n    r\"\"\"\n\n    Rotation matrix about the x axis by the input angle :math:`\\Phi`\n\n    .. math::\n\n        \\mathbf{\\tau}_x = \\begin{bmatrix}\n            1 & 0 & 0 \\\\\n            0 & \\cos(\\Phi) & -\\sin(\\Phi) \\\\\n            0 & \\sin(\\Phi) & \\cos(\\Phi)\n        \\end{bmatrix}\n\n\n    Args:\n        angle (float): angle of rotation in radians about the x axis\n\n    Returns:\n        np.array: 3x3 rotation matrix about the x axis\n\n    \"\"\"\n    c = np.cos(angle)\n    s = np.sin(angle)\n    mat = np.zeros((3, 3))\n    mat[0, :] = [1., 0., 0.]\n    mat[1, :] = [0., c, -s]\n    mat[2, :] = [0., s, c]\n    return mat\n\n\ndef rotation3d_y(angle):\n    r\"\"\"\n    Rotation matrix about the y axis by the input angle :math:`\\Theta`\n\n    .. math::\n\n        \\mathbf{\\tau}_y = \\begin{bmatrix}\n            \\cos(\\Theta) & 0 & -\\sin(\\Theta) \\\\\n            0 & 1 & 0 \\\\\n            \\sin(\\Theta) & 0 & \\cos(\\Theta)\n        \\end{bmatrix}\n\n\n    Args:\n        angle (float): angle of rotation in radians about the y axis\n\n    Returns:\n        np.array: 3x3 rotation matrix about the y axis\n\n    \"\"\"\n\n    c = np.cos(angle)\n    s = np.sin(angle)\n    mat = np.zeros((3, 3))\n    mat[0, :] = [c, 0., s]\n    mat[1, :] = [0., 1., 0.]\n    mat[2, :] = [-s, 0., c]\n    return mat\n\n\ndef rotation3d_z(angle):\n    r\"\"\"\n    Rotation matrix about the z axis by the input angle :math:`\\Psi`\n\n    .. math::\n        \\mathbf{\\tau}_z = \\begin{bmatrix}\n            \\cos(\\Psi) & -\\sin(\\Psi) & 0 \\\\\n            \\sin(\\Psi) & \\cos(\\Psi) & 0 \\\\\n            0 & 0 & 1\n        \\end{bmatrix}\n\n    Args:\n        angle (float): angle of rotation in radians about the z axis\n\n    Returns:\n        np.array: 3x3 rotation matrix about the z axis\n\n    \"\"\"\n\n    c = np.cos(angle)\n    s = np.sin(angle)\n    mat = np.zeros((3, 3))\n    mat[0, :] = [c, -s, 0.]\n    mat[1, :] = [s, c, 0.]\n    mat[2, :] = [0., 0., 1.]\n    return mat\n\n\ndef rotate_crv(crv_in, axis, angle):\n    C = crv2rotation(crv_in).T\n    rot = rotation_matrix_around_axis(axis, angle)\n    C = np.dot(C, rot)\n    crv = rot2crv(C)\n    return crv\n\n\ndef euler2rot(euler):\n    r\"\"\"\n\n    Transforms Euler angles (roll, pitch and yaw :math:`\\Phi, \\Theta, \\Psi`) into a 3x3 rotation matrix describing\n    that rotates a vector in yaw pitch, and roll.\n\n    The rotations are performed successively, first in yaw, then in pitch and finally in roll.\n\n    .. math::\n\n        \\mathbf{T}_{AG} = \\mathbf{\\tau}_x(\\Phi) \\mathbf{\\tau}_y(\\Theta) \\mathbf{\\tau}_z(\\Psi)\n\n\n    where :math:`\\mathbf{\\tau}` represents the rotation about the subscripted axis.\n\n    Args:\n        euler (np.array): 1x3 array with the Euler angles in the form ``[roll, pitch, yaw]`` in radians\n\n    Returns:\n        np.array: 3x3 transformation matrix describing the rotation by the input Euler angles.\n\n    \"\"\"\n\n    rot = rotation3d_z(euler[2]).dot(rotation3d_y(euler[1]).dot(rotation3d_x(euler[0])))\n    return rot\n\n\ndef euler2quat(euler):\n    \"\"\"\n\n    Args:\n        euler: Euler angles\n\n    Returns:\n        np.ndarray: Equivalent quaternion.\n    \"\"\"\n    euler_rot = euler2rot(euler)  # this is Cag\n    quat = rotation2quat(euler_rot)\n    return quat\n\n\ndef quat2euler(quat):\n    r\"\"\"\n    Quaternion to Euler angles transformation.\n\n    Transforms a normalised quaternion :math:`\\chi\\longrightarrow[\\phi, \\theta, \\psi]` to roll, pitch and yaw angles\n    respectively.\n\n    The transformation is valid away from the singularity present at:\n\n    .. math:: \\Delta = \\frac{1}{2}\n\n    where :math:`\\Delta = q_0 q_2 - q_1 q_3`.\n\n    The transformation is carried out as follows:\n\n    .. math::\n        \\psi &= \\arctan{\\left(2\\frac{q_0q_3+q_1q_2}{1-2(q_2^2+q_3^2)}\\right)} \\\\\n        \\theta &= \\arcsin(2\\Delta) \\\\\n        \\phi &= \\arctan\\left(2\\frac{q_0q_1 + q_2q_3}{1-2(q_1^2+q_2^2)}\\right)\n\n    Args:\n        quat (np.ndarray): Normalised quaternion.\n\n    Returns:\n        np.ndarray: Array containing the Euler angles :math:`[\\phi, \\theta, \\psi]` for roll, pitch and yaw, respectively.\n\n    References:\n        Blanco, J.L. - A tutorial on SE(3) transformation parameterizations and on-manifold optimization. Technical\n        Report 012010. ETS Ingenieria Informatica. Universidad de Malaga. 2013.\n    \"\"\"\n\n    assert np.abs(np.linalg.norm(quat) - 1.0) < 1.e6, 'Input quaternion is not normalised'\n\n    q0 = quat[0]\n    q1 = quat[1]\n    q2 = quat[2]\n    q3 = quat[3]\n\n    delta = quat[0] * quat[2] - quat[1] * quat[3]\n\n    if np.abs(delta) > 0.9 * 0.5:\n        warn('Warning, approaching singularity. Delta {:.3f} for singularity at Delta=0.5'.format(np.abs(delta)))\n\n    yaw = np.arctan2(2 * (q0 * q3 + q1 * q2), (1 - 2 * (q2 ** 2 + q3 ** 2)))\n    pitch = np.arcsin(2 * delta)\n    roll = np.arctan2(2 * (q0 * q1 + q2 * q3), (1 - 2 * (q1 ** 2 + q2 ** 2)))\n\n    return np.array([roll, pitch, yaw])\n\n\ndef crv_dot2omega(crv, crv_dot):\n    return np.dot(crv2tan(crv).T, crv_dot)\n\n\ndef crv_dot2Omega(crv, crv_dot):\n    return np.dot(crv2tan(crv), crv_dot)\n\n\ndef quaternion_product(q, r):\n    result = np.zeros((4,))\n    result[0] = q[0] * r[0] - q[1] * r[1] - q[2] * r[2] - q[3] * r[3]\n    result[1] = q[0] * r[1] + q[1] * r[0] + q[2] * r[3] - q[3] * r[2]\n    result[2] = q[0] * r[2] - q[1] * r[3] + q[2] * r[0] + q[3] * r[1]\n    result[3] = q[0] * r[3] + q[1] * r[2] - q[2] * r[1] + q[3] * r[0]\n    return result\n\n\ndef omegadt2quat(omegadt):\n    quat = np.zeros((4,))\n\n    omegadt_norm = np.linalg.norm(omegadt)\n    quat[0] = np.cos(0.5 * omegadt_norm)\n    quat[1:4] = unit_vector(omegadt) * np.sin(0.5 * omegadt_norm)\n    return quat\n\n\ndef rotate_quaternion(quat, omegadt):\n    return quaternion_product(omegadt2quat(omegadt), quat)\n\n\ndef get_triad(coordinates_def, frame_of_reference_delta, twist=None, n_nodes=3, ordering=np.array([0, 2, 1])):\n    \"\"\"\n    Generates two unit vectors in body FoR that define the local FoR for\n    a beam element. These vectors are calculated using `frame_of_reference_delta`\n    :return:\n    \"\"\"\n    # now, calculate tangent vector (and coefficients of the polynomial\n    # fit just in case)\n    tangent, polyfit = tangent_vector(\n        coordinates_def,\n        ordering)\n    normal = np.zeros_like(tangent)\n    binormal = np.zeros_like(tangent)\n\n    # v_vector is the vector with origin the FoR node and delta\n    # equals frame_of_reference_delta\n    for inode in range(n_nodes):\n        v_vector = frame_of_reference_delta[inode, :]\n        normal[inode, :] = unit_vector(np.cross(\n            tangent[inode, :],\n            v_vector\n        )\n        )\n        binormal[inode, :] = -unit_vector(np.cross(\n            tangent[inode, :],\n            normal[inode, :]\n        )\n        )\n\n    if twist is not None:\n        raise NotImplementedError(\n            'Structural twist is not yet supported in algebra.get_triad, but it is in beamstructures.py')\n\n    return tangent, binormal, normal\n\n\ndef der_Cquat_by_v(q, v):\n    \"\"\"\n    Being C=C(quat) the rotational matrix depending on the quaternion q and\n    defined as C=quat2rotation(q), the function returns the derivative, w.r.t. the\n    quanternion components, of the vector dot(C,v), where v is a constant\n    vector.\n\n    The elements of the resulting derivative matrix D are ordered such that:\n\n    .. math::   d(C*v) = D*d(q)\n\n    where :math:`d(.)` is a delta operator.\n    \"\"\"\n\n    vx, vy, vz = v\n    q0, q1, q2, q3 = q\n\n    return 2. * np.array([[q0 * vx + q2 * vz - q3 * vy, q1 * vx + q2 * vy + q3 * vz,\n                           q0 * vz + q1 * vy - q2 * vx, -q0 * vy + q1 * vz - q3 * vx],\n                          [q0 * vy - q1 * vz + q3 * vx, -q0 * vz - q1 * vy + q2 * vx,\n                           q1 * vx + q2 * vy + q3 * vz, q0 * vx + q2 * vz - q3 * vy],\n                          [q0 * vz + q1 * vy - q2 * vx, q0 * vy - q1 * vz + q3 * vx,\n                           -q0 * vx - q2 * vz + q3 * vy, q1 * vx + q2 * vy + q3 * vz]])\n\n\ndef der_CquatT_by_v(q, v):\n    r\"\"\"\n    Returns the derivative with respect to quaternion components of a projection matrix times a constant vector.\n\n    Being :math:`\\mathbf{C}=\\mathbf{R}(\\boldsymbol{\\chi})^\\top` the projection matrix depending on the quaternion\n    :math:`\\boldsymbol{\\chi}` and obtained through the function\n    defined as ``C=quat2rotation(q).T``, this function returns the derivative with respect to the\n    quaternion components, of the vector :math:`(\\mathbf{C\\cdot v})`, where :math:`\\mathbf{v}` is a constant\n    vector.\n\n    The derivative operation is defined as:\n\n    .. math::  \\delta(\\mathbf{C}\\cdot \\mathbf{v}) =\n        \\frac{\\partial}{\\partial\\boldsymbol{\\chi}}\\left(\\mathbf{C\\cdot v}\\right)\\delta\\boldsymbol{\\chi}\n\n    where, for simplicity, we define\n\n    .. math:: \\mathbf{D} =\n        \\frac{\\partial}{\\partial\\boldsymbol{\\chi}}\\left(\\mathbf{C\\cdot v}\\right) \\in \\mathbb{R}^{3\\times4}\n\n    and :math:`\\delta(\\bullet)` is a delta operator.\n\n    The members of :math:`\\mathbf{D}` are the following:\n\n    .. math::\n        \\mathbf{D}_{11} &= 2 (q_0 v_x - q_2 v_z + q_3 v_y)\\\\\n        \\mathbf{D}_{12} &= 2 (q_1 v_x - q_2 v_y + q_3 v_z)\\\\\n        \\mathbf{D}_{13} &= 2 (-q_0 v_z + q_1 v_y - q_2 v_x)\\\\\n        \\mathbf{D}_{14} &= 2 (q_0 v_y + q_1 v_z - q_3 v_x)\n\n    .. math::\n        \\mathbf{D}_{21} &= 2 (q_0 v_y + q_1 v_z - q_3 v_x)\\\\\n        \\mathbf{D}_{22} &= 2 (q_0 v_z - q_1 v_y + q_2 v_x)\\\\\n        \\mathbf{D}_{23} &= 2 (q_1 v_x + q_2 v_y + q_3 v_z)\\\\\n        \\mathbf{D}_{24} &= 2 (-q_0 v_x + q_2 v_z - q_3 v_y)\n\n    .. math::\n        \\mathbf{D}_{31} &= 2 (q_0 v_z - q_1 v_y + q_2 v_x)\\\\\n        \\mathbf{D}_{32} &= 2 (-q_0 v_y - q_1 v_z + q_3 v_x)\\\\\n        \\mathbf{D}_{33} &= 2 (q_0 v_x - q_2 v_z + q_3 v_y)\\\\\n        \\mathbf{D}_{34} &= 2 (q_1 v_x + q_2 v_y + q_3 v_z)\\\\\n\n    Returns:\n        np.array: :math:`\\mathbf{D}` matrix.\n    \"\"\"\n\n    vx, vy, vz = v\n    q0, q1, q2, q3 = q\n\n    return 2. * np.array([[q0 * vx - q2 * vz + q3 * vy, q1 * vx + q2 * vy + q3 * vz,\n                           - q0 * vz + q1 * vy - q2 * vx, q0 * vy + q1 * vz - q3 * vx],\n                          [q0 * vy + q1 * vz - q3 * vx, q0 * vz - q1 * vy + q2 * vx,\n                           q1 * vx + q2 * vy + q3 * vz, -q0 * vx + q2 * vz - q3 * vy],\n                          [q0 * vz - q1 * vy + q2 * vx, -q0 * vy - q1 * vz + q3 * vx,\n                           q0 * vx - q2 * vz + q3 * vy, q1 * vx + q2 * vy + q3 * vz]])\n\n\ndef der_Tan_by_xv(fv0, xv):\n    \"\"\"\n    Being fv0 a cartesian rotation vector and Tan the corresponding tangential\n    operator (computed through crv2tan(fv)), the function returns the derivative\n    of dot(Tan,xv), where xv is a constant vector.\n\n    The elements of the resulting derivative matrix D are ordered such that:\n\n    .. math::    d(Tan*xv) = D*d(fv)\n\n    where :math:`d(.)` is a delta operator.\n\n    Note:\n        The derivative expression has been derived symbolically and verified\n        by FDs. A more compact expression may be possible.\n    \"\"\"\n\n    f0 = np.linalg.norm(fv0)\n    if f0 < (1e9 * np.finfo(float).eps):\n        tensor1 = np.array([[0., 0., 0.], [0., 0., -0.5], [0., 0.5, 0.]]) * xv[0]\n        tensor2 = np.array([[0., 0., 0.5], [0., 0., 0.], [-0.5, 0., 0.]]) * xv[1]\n        tensor3 = np.array([[0., -0.5, 0.], [0.5, 0., 0.], [0., 0., 0.]]) * xv[2]\n        return tensor1 + tensor2 + tensor3\n\n    sf0, cf0 = np.sin(f0), np.cos(f0)\n\n    fv0_x, fv0_y, fv0_z = fv0\n    xv_x, xv_y, xv_z = xv\n\n    f0p2 = f0 ** 2\n    f0p3 = f0 ** 3\n    f0p4 = f0 ** 4\n\n    rs01 = sf0 / f0\n    rs03 = sf0 / f0p3\n    rc02 = (cf0 - 1) / f0p2\n    rc04 = (cf0 - 1) / f0p4\n\n    Ts02 = (1 - rs01) / f0p2\n    Ts04 = (1 - rs01) / f0p4\n\n    return np.array(\n        [[xv_x * ((-fv0_y ** 2 - fv0_z ** 2) * (-cf0 * fv0_x / f0p2 + fv0_x * rs03) / f0p2 -\n                  2 * fv0_x * (1 - rs01) * (-fv0_y ** 2 - fv0_z ** 2) / f0p4) + xv_y * (fv0_x * fv0_y * (\n                -cf0 * fv0_x / f0p2 + fv0_x * rs03) / f0p2 + fv0_y * Ts02 +\n                                                                                        fv0_x * fv0_z * rs03 - 2 * fv0_x ** 2 * fv0_y * Ts04 + 2 * fv0_x * fv0_z *\n                                                                                        rc04) + xv_z * (\n                      fv0_x * fv0_z * (-cf0 * fv0_x / f0p2 + fv0_x * rs03) / f0p2 +\n                      fv0_z * Ts02 - fv0_x * fv0_y * rs03 - 2 * fv0_x ** 2 * fv0_z * Ts04\n                      - 2 * fv0_x * fv0_y * rc04),\n          #\n          xv_x * (-2 * fv0_y * Ts02 + (-fv0_y ** 2 - fv0_z ** 2) * (-cf0 * fv0_y / f0p2 +\n                                                                    fv0_y * rs03) / f0p2 - 2 * fv0_y * (1 - rs01) * (\n                              -fv0_y ** 2 - fv0_z ** 2) / f0p4) +\n          xv_y * (fv0_x * fv0_y * (-cf0 * fv0_y / f0p2 + fv0_y * rs03) / f0p2 + fv0_x * Ts02 +\n                  fv0_y * fv0_z * rs03 - 2 * fv0_x * fv0_y ** 2 * Ts04 + 2 * fv0_y * fv0_z * rc04)\n          + xv_z * (fv0_x * fv0_z * (-cf0 * fv0_y / f0p2 + fv0_y * rs03) / f0p2 + rc02 -\n                    fv0_y ** 2 * rs03 - 2 * fv0_x * fv0_y * fv0_z * Ts04 - 2 * fv0_y ** 2 * rc04),\n          #\n          xv_x * (-2 * fv0_z * Ts02 + (-fv0_y ** 2 - fv0_z ** 2) * (-cf0 * fv0_z / f0p2\n                                                                    + fv0_z * rs03) / f0p2 - 2 * fv0_z * (1 - rs01) * (\n                              -fv0_y ** 2 - fv0_z ** 2) / f0p4) +\n          xv_y * (fv0_x * fv0_y * (-cf0 * fv0_z / f0p2 + fv0_z * rs03) / f0p2 - rc02\n                  + fv0_z ** 2 * rs03 - 2 * fv0_x * fv0_y * fv0_z * Ts04 + 2 * fv0_z ** 2 * rc04)\n          + xv_z * (fv0_x * fv0_z * (-cf0 * fv0_z / f0p2 + fv0_z * rs03) / f0p2 + fv0_x * Ts02\n                    - fv0_y * fv0_z * rs03 - 2 * fv0_x * fv0_z ** 2 * Ts04 - 2 * fv0_y * fv0_z * rc04)],\n         [xv_x * (fv0_x * fv0_y * (-cf0 * fv0_x / f0p2 + fv0_x * rs03) / f0p2 +\n                  fv0_y * Ts02 - fv0_x * fv0_z * rs03 - 2 * fv0_x ** 2 * fv0_y * Ts04 -\n                  2 * fv0_x * fv0_z * rc04) + xv_y * (-2 * fv0_x * Ts02 +\n                                                      (-fv0_x ** 2 - fv0_z ** 2) * (\n                                                                  -cf0 * fv0_x / f0p2 + fv0_x * rs03) / f0p2\n                                                      - 2 * fv0_x * (1 - rs01) * (-fv0_x ** 2 - fv0_z ** 2) / f0p4) +\n          xv_z * (fv0_y * fv0_z * (-cf0 * fv0_x / f0p2 + fv0_x * rs03) / f0p2 - rc02\n                  + fv0_x ** 2 * rs03 + 2 * fv0_x ** 2 * rc04 - 2 * fv0_x * fv0_y * fv0_z * Ts04),\n          xv_x * (fv0_x * fv0_y * (-cf0 * fv0_y / f0p2 + fv0_y * rs03) / f0p2 +\n                  fv0_x * Ts02 - fv0_y * fv0_z * rs03 - 2 * fv0_x * fv0_y ** 2 * Ts04\n                  - 2 * fv0_y * fv0_z * rc04) + xv_y * ((-fv0_x ** 2 - fv0_z ** 2) * (-cf0 * fv0_y / f0p2\n                                                                                      + fv0_y * rs03) / f0p2 - 2 * fv0_y * (\n                                                                    1 - rs01) * (-fv0_x ** 2 - fv0_z ** 2) / f0p4)\n          + xv_z * (fv0_y * fv0_z * (-cf0 * fv0_y / f0p2 + fv0_y * rs03) / f0p2 + fv0_z * Ts02\n                    + fv0_x * fv0_y * rs03 + 2 * fv0_x * fv0_y * rc04 - 2 * fv0_y ** 2 * fv0_z * Ts04),\n          xv_x * (fv0_x * fv0_y * (-cf0 * fv0_z / f0p2 + fv0_z * rs03) / f0p2 + rc02 - fv0_z ** 2 * rs03\n                  - 2 * fv0_x * fv0_y * fv0_z * Ts04 - 2 * fv0_z ** 2 * rc04) + xv_y * (-2 * fv0_z * Ts02\n                                                                                        + (-fv0_x ** 2 - fv0_z ** 2) * (\n                                                                                                    -cf0 * fv0_z / f0p2 + fv0_z * rs03) / f0p2 -\n                                                                                        2 * fv0_z * (1 - rs01) * (\n                                                                                                    -fv0_x ** 2 - fv0_z ** 2) / f0p4) + xv_z * (\n                      fv0_y * fv0_z * (-cf0 * fv0_z / f0p2\n                                       + fv0_z * rs03) / f0p2 + fv0_y * Ts02 + fv0_x * fv0_z * rs03 + 2 * fv0_x * fv0_z * rc04\n                      - 2 * fv0_y * fv0_z ** 2 * Ts04)],\n         [xv_x * (fv0_x * fv0_z * (-cf0 * fv0_x / f0p2 + fv0_x * rs03) / f0p2 + fv0_z * Ts02\n                  + fv0_x * fv0_y * rs03 - 2 * fv0_x ** 2 * fv0_z * Ts04 + 2 * fv0_x * fv0_y * rc04)\n          + xv_y * (fv0_y * fv0_z * (-cf0 * fv0_x / f0p2 + fv0_x * rs03) / f0p2 + rc02 - fv0_x ** 2 * rs03\n                    - 2 * fv0_x ** 2 * rc04 - 2 * fv0_x * fv0_y * fv0_z * Ts04) + xv_z * (-2 * fv0_x * Ts02\n                                                                                          + (\n                                                                                                      -fv0_x ** 2 - fv0_y ** 2) * (\n                                                                                                      -cf0 * fv0_x / f0p2 + fv0_x * rs03) / f0p2 -\n                                                                                          2 * fv0_x * (1 - rs01) * (\n                                                                                                      -fv0_x ** 2 - fv0_y ** 2) / f0p4),\n          xv_x * (fv0_x * fv0_z * (-cf0 * fv0_y / f0p2 + fv0_y * rs03) / f0p2 - rc02 + fv0_y ** 2 * rs03 -\n                  2 * fv0_x * fv0_y * fv0_z * Ts04 + 2 * fv0_y ** 2 * rc04) + xv_y * (\n                      fv0_y * fv0_z * (-cf0 * fv0_y / f0p2\n                                       + fv0_y * rs03) / f0p2 + fv0_z * Ts02 - fv0_x * fv0_y * rs03 - 2 * fv0_x * fv0_y * rc04\n                      - 2 * fv0_y ** 2 * fv0_z * Ts04) + xv_z * (-2 * fv0_y * Ts02 + (-fv0_x ** 2\n                                                                                      - fv0_y ** 2) * (\n                                                                             -cf0 * fv0_y / f0p2 + fv0_y * rs03) / f0p2 - 2 * fv0_y * (\n                                                                             1 - rs01) * (-fv0_x ** 2\n                                                                                          - fv0_y ** 2) / f0p4),\n          xv_x * (fv0_x * fv0_z * (-cf0 * fv0_z / f0p2 + fv0_z * rs03) / f0p2 + fv0_x * Ts02 +\n                  fv0_y * fv0_z * rs03 - 2 * fv0_x * fv0_z ** 2 * Ts04 + 2 * fv0_y * fv0_z * rc04) +\n          xv_y * (fv0_y * fv0_z * (-cf0 * fv0_z / f0p2 + fv0_z * rs03) / f0p2 + fv0_y * Ts02\n                  - fv0_x * fv0_z * rs03 - 2 * fv0_x * fv0_z * rc04 - 2 * fv0_y * fv0_z ** 2 * Ts04) +\n          xv_z * ((-fv0_x ** 2 - fv0_y ** 2) * (-cf0 * fv0_z / f0p2 + fv0_z * rs03) / f0p2 -\n                  2 * fv0_z * (1 - rs01) * (-fv0_x ** 2 - fv0_y ** 2) / f0p4)]])\n\n\ndef der_TanT_by_xv(fv0, xv):\n    \"\"\"\n    Being fv0 a cartesian rotation vector and Tan the corresponding tangential\n    operator (computed through crv2tan(fv)), the function returns the derivative\n    of dot(Tan^T,xv), where xv is a constant vector.\n\n    The elements of the resulting derivative matrix D are ordered such that:\n\n    .. math::     d(Tan^T*xv) = D*d(fv)\n\n    where :math:`d(.)` is a delta operator.\n\n    Note:\n        The derivative expression has been derived symbolically and verified\n        by FDs. A more compact expression may be possible.\n    \"\"\"\n\n    # Renaming variabes for clarity\n    px = fv0[0]\n    py = fv0[1]\n    pz = fv0[2]\n\n    vx = xv[0]\n    vy = xv[1]\n    vz = xv[2]\n\n    # Defining useful functions\n    eps = 1e-15\n    f0 = np.linalg.norm(fv0)\n    if f0 < eps:\n        f1 = -1.0 / 2.0\n        f2 = 1.0 / 6.0\n        g1 = -1.0 / 12.0\n        g2 = 0.0  # TODO: check this\n    else:\n        f1 = (np.cos(f0) - 1.0) / f0 ** 2.0\n        f2 = (1.0 - np.sin(f0) / f0) / f0 ** 2.0\n        g1 = (f0 * np.sin(f0) + 2.0 * (np.cos(f0) - 1.0)) / f0 ** 4.0\n        g2 = (2.0 / f0 ** 4 + np.cos(f0) / f0 ** 4 - 3.0 * np.sin(f0) / f0 ** 5)\n\n    # Computing the derivatives of the functions\n    df1dpx = -1.0 * px * g1\n    df1dpy = -1.0 * py * g1\n    df1dpz = -1.0 * pz * g1\n\n    df2dpx = -1.0 * px * g2\n    df2dpy = -1.0 * py * g2\n    df2dpz = -1.0 * pz * g2\n\n    # Compute the output matrix\n    der_TanT_by_xv = np.zeros((3, 3), )\n\n    # First column (derivatives with psi_x)\n    der_TanT_by_xv[0, 0] = -1.0 * df2dpx * (\n                py ** 2 + pz ** 2) * vx + df1dpx * pz * vy + df2dpx * px * py * vy + f2 * py * vy - df1dpx * py * vz + df2dpx * px * pz * vz + f2 * pz * vz\n    der_TanT_by_xv[\n        1, 0] = -1.0 * df1dpx * pz * vx + df2dpx * px * py * vx + f2 * py * vx - df2dpx * px ** 2 * vy - 2.0 * f2 * px * vy - df2dpx * pz ** 2 * vy + df1dpx * px * vz + f1 * vz + df2dpx * py * pz * vz\n    der_TanT_by_xv[\n        2, 0] = df1dpx * py * vx + df2dpx * px * pz * vx + f2 * pz * vx - df1dpx * px * vy - f1 * vy + df2dpx * py * pz * vy - df2dpx * px ** 2 * vz - 2.0 * f2 * px * vz - df2dpx * py ** 2 * vz\n\n    # Second column (derivatives with psi_y)\n    der_TanT_by_xv[\n        0, 1] = -df2dpy * py ** 2 * vx - f2 * 2 * py * vx - df2dpy * pz ** 2 * vx + df1dpy * pz * vy + df2dpy * px * py * vy + f2 * px * vy - df1dpy * py * vz - f1 * vz + df2dpy * px * pz * vz\n    der_TanT_by_xv[\n        1, 1] = -df1dpy * pz * vx + df2dpy * px * py * vx + f2 * px * vx - df2dpy * px ** 2 * vy - df2dpy * pz ** 2 * vy + df1dpy * px * vz + df2dpy * py * pz * vz + f2 * pz * vz\n    der_TanT_by_xv[\n        2, 1] = df1dpy * py * vx + f1 * vx + df2dpy * px * pz * vx - df1dpy * px * vy + df2dpy * py * pz * vy + f2 * pz * vy - df2dpy * px ** 2 * vz - df2dpy * py ** 2 * vz - 2.0 * f2 * py * vz\n\n    # Second column (derivatives with psi_z)\n    der_TanT_by_xv[\n        0, 2] = -df2dpz * py ** 2 * vx - df2dpz * pz ** 2 * vx - 2.0 * f2 * pz * vx + df1dpz * pz * vy + f1 * vy + df2dpz * px * py * vy - df1dpz * py * vz + df2dpz * px * pz * vz + f2 * px * vz\n    der_TanT_by_xv[\n        1, 2] = -df1dpz * pz * vx - f1 * vx + df2dpz * px * py * vx - df2dpz * px ** 2 * vy - df2dpz * pz ** 2 * vy - 2.0 * f2 * pz * vy + df1dpz * px * vz + df2dpz * py * pz * vz + f2 * py * vz\n    der_TanT_by_xv[\n        2, 2] = df1dpz * py * vx + df2dpz * px * pz * vx + f2 * px * vx - df1dpz * px * vy + df2dpz * py * pz * vy + f2 * py * vy - df2dpz * px ** 2 * vz - df2dpz * py ** 2 * vz\n\n    return der_TanT_by_xv\n\n\ndef der_Ccrv_by_v(fv0, v):\n    r\"\"\"\n    Being C=C(fv0) the rotational matrix depending on the Cartesian rotation\n    vector fv0 and defined as C=crv2rotation(fv0), the function returns the\n    derivative, w.r.t. the CRV components, of the vector dot(C,v), where v is a\n    constant vector.\n\n    The elements of the resulting derivative matrix D are ordered such that:\n\n    .. math:: d(C*v) = D*d(fv0)\n\n    where :math:`d(.)` is a delta operator.\n    \"\"\"\n\n    Cab0 = crv2rotation(fv0)\n    T0 = crv2tan(fv0)\n    vskew = skew(v)\n\n    return -np.dot(Cab0, np.dot(vskew, T0))\n\n\ndef der_CcrvT_by_v(fv0, v):\n    \"\"\"\n    Being C=C(fv0) the rotation matrix depending on the Cartesian rotation\n    vector fv0 and defined as C=crv2rotation(fv0), the function returns the\n    derivative, w.r.t. the CRV components, of the vector dot(C.T,v), where v is\n    a constant vector.\n\n    The elements of the resulting derivative matrix D are ordered such that:\n\n    .. math::    d(C.T*v) = D*d(fv0)\n\n    where :math:`d(.)` is a delta operator.\n    \"\"\"\n\n    Cba0 = crv2rotation(fv0).T\n    T0 = crv2tan(fv0)\n\n    return np.dot(skew(np.dot(Cba0, v)), T0)\n\n\ndef der_quat_wrt_crv(quat0):\n    \"\"\"\n    Provides change of quaternion, dquat, due to elementary rotation, dcrv,\n    expressed as a 3 components Cartesian rotation vector such that\n\n    .. math::    C(quat + dquat) = C(quat0)C(dw)\n\n    where C are rotation matrices.\n\n    Examples:\n        Assume 3 FoRs, G, A and B where:\n            - G is the initial FoR\n            - quat0 defines te rotation required to obtain A from G, namely:\n              Cga=quat2rotation(quat0)\n            - dcrv is an inifinitesimal Cartesian rotation vector, defined in A\n              components, which describes an infinitesimal rotation A -> B, namely:\n\n              ..math ::      Cab=crv2rotation(dcrv)\n\n            - The total rotation G -> B is:\n                Cga = Cga * Cab\n            - As dcrv -> 0, Cga is equal to:\n\n              .. math::  algebra.quat2rotation(quat0 + dquat),\n\n              where dquat is the output of this function.\n    \"\"\"\n\n    Der = np.zeros((4, 3))\n    Der[0, :] = -0.5 * quat0[1:]\n    Der[1:, :] = -0.5 * (-quat0[0] * np.eye(3) - skew(quat0[1:]))\n    return Der\n\n\ndef der_Ceuler_by_v(euler, v):\n    r\"\"\"\n    Provides the derivative of the product between the rotation matrix :math:`C^{AG}(\\mathbf{\\Theta})` and a constant\n    vector, :math:`\\mathbf{v}`, with respect to the Euler angles, :math:`\\mathbf{\\Theta}=[\\phi,\\theta,\\psi]^T`:\n\n    .. math::\n        \\frac{\\partial}{\\partial\\Theta}(C^{AG}(\\Theta)\\mathbf{v}^G) = \\frac{\\partial \\mathbf{f}}{\\partial\\mathbf{\\Theta}}\n\n    where :math:`\\frac{\\partial \\mathbf{f}}{\\partial\\mathbf{\\Theta}}` is the resulting 3 by 3 matrix.\n\n    Being :math:`C^{AG}(\\Theta)` the rotation matrix from the G frame to the A frame in terms of the Euler angles\n    :math:`\\Theta` as:\n\n    .. math::\n        C^{AG}(\\Theta) = \\begin{bmatrix}\n        \\cos\\theta\\cos\\psi & -\\cos\\theta\\sin\\psi & \\sin\\theta \\\\\n        \\cos\\phi\\sin\\psi + \\sin\\phi\\sin\\theta\\cos\\psi & \\cos\\phi\\cos\\psi - \\sin\\phi\\sin\\theta\\sin\\psi & -\\sin\\phi\\cos\\theta \\\\\n        \\sin\\phi\\sin\\psi - \\cos\\phi\\sin\\theta\\cos\\psi & \\sin\\phi\\cos\\psi + \\cos\\phi\\sin\\theta\\sin\\psi & \\cos\\phi\\cos\\theta\n        \\end{bmatrix}\n\n    the components of the derivative at hand are the following, where\n    :math:`f_{1\\theta} = \\frac{\\partial \\mathbf{f}_1}{\\partial\\theta}`.\n\n    .. math::\n        f_{1\\phi} =&0 \\\\\n        f_{1\\theta} = &-v_1\\sin\\theta\\cos\\psi \\\\\n        &+v_2\\sin\\theta\\sin\\psi \\\\\n        &+v_3\\cos\\theta \\\\\n        f_{1\\psi} = &-v_1\\cos\\theta\\sin\\psi \\\\\n        &- v_2\\cos\\theta\\cos\\psi\n\n    .. math::\n        f_{2\\phi} = &+v_1(-\\sin\\phi\\sin\\psi + \\cos\\phi\\sin\\theta\\cos\\psi) + \\\\\n        &+v_2(-\\sin\\phi\\cos\\psi - \\cos\\phi\\sin\\theta\\sin\\psi) + \\\\\n        &+v_3(-\\cos\\phi\\cos\\theta)\\\\\n        f_{2\\theta} = &+v_1(\\sin\\phi\\cos\\theta\\cos\\psi) + \\\\\n        &+v_2(-\\sin\\phi\\cos\\theta\\sin\\psi) +\\\\\n        &+v_3(\\sin\\phi\\sin\\theta) \\\\\n        f_{2\\psi} = &+v_1(\\cos\\phi\\cos\\psi - \\sin\\phi\\sin\\theta\\sin\\psi) + \\\\\n        &+v_2(-\\cos\\phi\\sin\\psi - \\sin\\phi\\sin\\theta\\cos\\psi)\n\n    .. math::\n        f_{3\\phi} = &+v_1(\\cos\\phi\\sin\\psi+\\sin\\phi\\sin\\theta\\cos\\psi) + \\\\\n        &+v_2(\\cos\\phi\\cos\\psi - \\sin\\phi\\sin\\theta\\sin\\psi) + \\\\\n        &+v_3(-\\sin\\phi\\cos\\theta)\\\\\n        f_{3\\theta} = &+v_1(-\\cos\\phi\\cos\\theta\\cos\\psi)+\\\\\n        &+v_2(\\cos\\phi\\cos\\theta\\sin\\psi) + \\\\\n        &+v_3(-\\cos\\phi\\sin\\theta)\\\\\n        f_{3\\psi} = &+v_1(\\sin\\phi\\cos\\psi+\\cos\\phi\\sin\\theta\\sin\\psi)  + \\\\\n        &+v_2(-\\sin\\phi\\sin\\psi + \\cos\\phi\\sin\\theta\\cos\\psi)\n\n    Args:\n        euler (np.ndarray): Vector of Euler angles, :math:`\\mathbf{\\Theta} = [\\phi, \\theta, \\psi]`, in radians.\n        v (np.ndarray): 3 dimensional vector in G frame.\n\n    Returns:\n        np.ndarray: Resulting 3 by 3 matrix :math:`\\frac{\\partial \\mathbf{f}}{\\partial\\mathbf{\\Theta}}`.\n\n    \"\"\"\n    res = np.zeros((3, 3))\n\n    # Notation shorthand. sin and cos of psi (roll)\n    sp = np.sin(euler[0])\n    cp = np.cos(euler[0])\n\n    # Notation shorthand. sin and cos of theta (pitch)\n    st = np.sin(euler[1])\n    ct = np.cos(euler[1])\n\n    # Notation shorthand. sin and cos of psi (yaw)\n    ss = np.sin(euler[2])\n    cs = np.cos(euler[2])\n\n    v1 = v[0]\n    v2 = v[1]\n    v3 = v[2]\n\n    res[0, 0] = v2 * (sp * ss + cp * st * cp) + v3 * (cp * ss - sp * st * cs)\n    res[0, 1] = v1 * (-st * cs) + v2 * (sp * ct * cs) + v3 * (cp * ct * cs)\n    res[0, 2] = v1 * (ct * ss) + v2 * (-cp * cs - sp * st * ss) + v3 * (sp * cs - cp * st * ss)\n\n    res[1, 0] = v2 * (-sp * cs + cp * st * ss) + v3 * (-cp * cs + sp * st * ss)\n    res[1, 1] = v1 * (-st * ss) + v2 * (sp * ct * ss) + v3 * (-cp * ct * ss)\n    res[1, 2] = v1 * (ct * cs) + v2 * (-cp * ss + sp * st * cs) + v3 * (sp * ss + cp * st * cs)\n\n    res[2, 0] = v2 * (cp * ct) + v3 * (-sp * ct)\n    res[2, 1] = v1 * (-ct) + v2 * (-sp * st) + v3 * (-cp * st)\n\n    return res\n\n\ndef der_Peuler_by_v(euler, v):\n    r\"\"\"\n    Provides the derivative of the product between the projection matrix :math:`P^{AG}(\\mathbf{\\Theta})` (that projects\n    a vector in G frame onto A frame) and a constant vector expressed in G frame of reference, :math:`\\mathbf{v}_G`,\n    with respect to the Euler angles, :math:`\\mathbf{\\Theta}=[\\phi,\\theta,\\psi]^T`:\n\n    .. math::\n        \\frac{\\partial}{\\partial\\Theta}(P^{AG}(\\Theta)\\mathbf{v}^G) = \\frac{\\partial \\mathbf{f}}{\\partial\\mathbf{\\Theta}}\n\n    where :math:`\\frac{\\partial \\mathbf{f}}{\\partial\\mathbf{\\Theta}}` is the resulting 3 by 3 matrix.\n\n    Being :math:`P^{AG}(\\Theta)` the projection matrix from the G frame to the A frame in terms of the Euler angles\n    :math:`\\Theta` as :math:`P^{AG}(\\Theta) = \\tau_x(-\\Phi)\\tau_y(-\\Theta)\\tau_z(-\\Psi)`, where\n    the rotation matrix is expressed as:\n\n    .. math::\n        C^{AG}(\\Theta) = \\begin{bmatrix}\n        \\cos\\theta\\cos\\psi & -\\cos\\theta\\sin\\psi & \\sin\\theta \\\\\n        \\cos\\phi\\sin\\psi + \\sin\\phi\\sin\\theta\\cos\\psi & \\cos\\phi\\cos\\psi - \\sin\\phi\\sin\\theta\\sin\\psi & -\\sin\\phi\\cos\\theta \\\\\n        \\sin\\phi\\sin\\psi - \\cos\\phi\\sin\\theta\\cos\\psi & \\sin\\phi\\cos\\psi + \\cos\\phi\\sin\\theta\\sin\\psi & \\cos\\phi\\cos\\theta\n        \\end{bmatrix}\n\n    and the projection matrix as:\n\n    .. math::\n        P^{AG}(\\Theta) = \\begin{bmatrix}\n        \\cos\\theta\\cos\\psi & \\cos\\theta\\sin\\psi & -\\sin\\theta \\\\\n        -\\cos\\phi\\sin\\psi + \\sin\\phi\\sin\\theta\\cos\\psi & \\cos\\phi\\cos\\psi + \\sin\\phi\\sin\\theta\\sin\\psi & \\sin\\phi\\cos\\theta \\\\\n        \\sin\\phi\\sin\\psi + \\cos\\phi\\sin\\theta\\cos\\psi & -\\sin\\phi\\cos\\psi + \\cos\\phi\\sin\\theta\\sin\\psi & \\cos\\phi\\cos\\theta\n        \\end{bmatrix}\n\n    the components of the derivative at hand are the following, where\n    :math:`f_{1\\theta} = \\frac{\\partial \\mathbf{f}_1}{\\partial\\theta}`.\n\n    .. math::\n        f_{1\\phi} =&0 \\\\\n        f_{1\\theta} = &-v_1\\sin\\theta\\cos\\psi \\\\\n        &+v_2\\sin\\theta\\sin\\psi \\\\\n        &+v_3\\cos\\theta \\\\\n        f_{1\\psi} = &-v_1\\cos\\theta\\sin\\psi \\\\\n        &- v_2\\cos\\theta\\cos\\psi\n\n    .. math::\n        f_{2\\phi} = &+v_1(-\\sin\\phi\\sin\\psi + \\cos\\phi\\sin\\theta\\cos\\psi) + \\\\\n        &+v_2(-\\sin\\phi\\cos\\psi - \\cos\\phi\\sin\\theta\\sin\\psi) + \\\\\n        &+v_3(-\\cos\\phi\\cos\\theta)\\\\\n        f_{2\\theta} = &+v_1(\\sin\\phi\\cos\\theta\\cos\\psi) + \\\\\n        &+v_2(-\\sin\\phi\\cos\\theta\\sin\\psi) +\\\\\n        &+v_3(\\sin\\phi\\sin\\theta)\\\\\n        f_{2\\psi} = &+v_1(\\cos\\phi\\cos\\psi - \\sin\\phi\\sin\\theta\\sin\\psi) + \\\\\n        &+v_2(-\\cos\\phi\\sin\\psi - \\sin\\phi\\sin\\theta\\cos\\psi)\n\n    .. math::\n        f_{3\\phi} = &+v_1(\\cos\\phi\\sin\\psi+\\sin\\phi\\sin\\theta\\cos\\psi) + \\\\\n        &+v_2(\\cos\\phi\\cos\\psi - \\sin\\phi\\sin\\theta\\sin\\psi) + \\\\\n        &+v_3(-\\sin\\phi\\cos\\theta)\\\\\n        f_{3\\theta} = &+v_1(-\\cos\\phi\\cos\\theta\\cos\\psi)+\\\\\n        &+v_2(\\cos\\phi\\cos\\theta\\sin\\psi) + \\\\\n        &+v_3(-\\cos\\phi\\sin\\theta)\\\\\n        f_{3\\psi} = &+v_1(\\sin\\phi\\cos\\psi+\\cos\\phi\\sin\\theta\\sin\\psi)  + \\\\\n        &+v_2(-\\sin\\phi\\sin\\psi + \\cos\\phi\\sin\\theta\\cos\\psi)\n\n    Args:\n        euler (np.ndarray): Vector of Euler angles, :math:`\\mathbf{\\Theta} = [\\phi, \\theta, \\psi]`, in radians.\n        v (np.ndarray): 3 dimensional vector in G frame.\n\n    Returns:\n        np.ndarray: Resulting 3 by 3 matrix :math:`\\frac{\\partial \\mathbf{f}}{\\partial\\mathbf{\\Theta}}`.\n\n    \"\"\"\n    res = np.zeros((3, 3))\n\n    # Notation shorthand. sin and cos of psi (roll)\n    sp = np.sin(euler[0])\n    cp = np.cos(euler[0])\n\n    # Notation shorthand. sin and cos of theta (pitch)\n    st = np.sin(euler[1])\n    ct = np.cos(euler[1])\n\n    # Notation shorthand. sin and cos of psi (yaw)\n    ss = np.sin(euler[2])\n    cs = np.cos(euler[2])\n\n    v1 = v[0]\n    v2 = v[1]\n    v3 = v[2]\n\n    res[0, 1] = v1 * (-st * cs) + v2 * (-st * ss) - v3 * ct\n    res[0, 2] = -v1 * (ct * ss) + v2 * ct * cs\n\n    res[1, 0] = v1 * (sp * ss + cp * st * cs) + v2 * (-sp * cs + cp * st * ss) + v3 * (cp * ct)\n    res[1, 1] = v1 * (sp * ct * cs) + v2 * (sp * ct * ss) + v3 * (-sp * st)\n    res[1, 2] = v1 * (-cp * cs - sp * st * ss) + v2 * (-cp * ss + sp * st * cs)\n\n    res[2, 0] = v1 * (cp * ss - sp * st * cs) + v2 * (-cp * cs - sp * st * ss) + v3 * (-sp * ct)\n    res[2, 1] = v1 * (cp * ct * cs) + v2 * (cp * ct * ss) + v3 * (-cp * st)\n    res[2, 2] = v1 * (sp * ss + -cp * st * ss) + v2 * (sp * ss + cp * st * cs)\n\n    return res\n\n\ndef der_Ceuler_by_v_NED(euler, v):\n    r\"\"\"\n    Provides the derivative of the product between the rotation matrix :math:`C^{AG}(\\mathbf{\\Theta})` and a constant\n    vector, :math:`\\mathbf{v}`, with respect to the Euler angles, :math:`\\mathbf{\\Theta}=[\\phi,\\theta,\\psi]^T`:\n\n    .. math::\n        \\frac{\\partial}{\\partial\\Theta}(C^{AG}(\\Theta)\\mathbf{v}^G) = \\frac{\\partial \\mathbf{f}}{\\partial\\mathbf{\\Theta}}\n\n    where :math:`\\frac{\\partial \\mathbf{f}}{\\partial\\mathbf{\\Theta}}` is the resulting 3 by 3 matrix.\n\n    Being :math:`C^{AG}(\\Theta)` the rotation matrix from the G frame to the A frame in terms of the Euler angles\n    :math:`\\Theta` as:\n\n    .. math::\n        C^{AG}(\\Theta) = \\begin{bmatrix}\n        \\cos\\theta\\cos\\psi & \\cos\\theta\\sin\\psi & -\\sin\\theta \\\\\n        -\\cos\\phi\\sin\\psi + \\sin\\phi\\sin\\theta\\cos\\psi & \\cos\\phi\\cos\\psi + \\sin\\phi\\sin\\theta\\sin\\psi & \\sin\\phi\\cos\\theta \\\\\n        \\sin\\phi\\sin\\psi + \\cos\\phi\\sin\\theta\\cos\\psi & -\\sin\\phi\\cos\\psi + \\cos\\psi\\sin\\theta\\sin\\psi & \\cos\\phi\\cos\\theta\n        \\end{bmatrix}\n\n    the components of the derivative at hand are the following, where\n    :math:`f_{1\\theta} = \\frac{\\partial \\mathbf{f}_1}{\\partial\\theta}`.\n\n    .. math::\n        f_{1\\phi} =&0 \\\\\n        f_{1\\theta} = &-v_1\\sin\\theta\\cos\\psi \\\\\n        &-v_2\\sin\\theta\\sin\\psi \\\\\n        &-v_3\\cos\\theta \\\\\n        f_{1\\psi} = &-v_1\\cos\\theta\\sin\\psi + v_2\\cos\\theta\\cos\\psi\n\n    .. math::\n        f_{2\\phi} = &+v_1(\\sin\\phi\\sin\\psi + \\cos\\phi\\sin\\theta\\cos\\psi) + \\\\\n        &+v_2(-\\sin\\phi\\cos\\psi + \\cos\\phi\\sin\\theta\\sin\\psi) + \\\\\n        &+v_3(\\cos\\phi\\cos\\theta) \\\\\n        f_{2\\theta} = &+v_1(\\sin\\phi\\cos\\theta\\cos\\psi) + \\\\\n        &+v_2(\\sin\\phi\\cos\\theta\\sin\\psi) +\\\\\n        &-v_3(\\sin\\phi\\sin\\theta) \\\\\n        f_{2\\psi} = &+v_1(-\\cos\\phi\\cos\\psi - \\sin\\phi\\sin\\theta\\sin\\psi) + \\\\\n        &+v_2(-\\cos\\phi\\sin\\psi + \\sin\\phi\\sin\\theta\\cos\\psi)\n\n    .. math::\n        f_{3\\phi} = &+v_1(\\cos\\phi\\sin\\psi-\\sin\\phi\\sin\\theta\\cos\\psi) + \\\\\n        &+v_2(-\\cos\\phi\\cos\\psi - \\sin\\phi\\sin\\theta\\sin\\psi) + \\\\\n        &+v_3(-\\sin\\phi\\cos\\theta) \\\\\n        f_{3\\theta} = &+v_1(\\cos\\phi\\cos\\theta\\cos\\psi)+\\\\\n        &+v_2(\\cos\\phi\\cos\\theta\\sin\\psi) + \\\\\n        &+v_3(-\\cos\\phi\\sin\\theta) \\\\\n        f_{3\\psi} = &+v_1(\\sin\\phi\\cos\\psi-\\cos\\phi\\sin\\theta\\sin\\psi)  + \\\\\n        &+v_2(\\sin\\phi\\sin\\psi + \\cos\\phi\\sin\\theta\\cos\\psi)\n\n    Note:\n        This function is defined in a North East Down frame which is not the typically used one in SHARPy.\n\n    Args:\n        euler (np.ndarray): Vector of Euler angles, :math:`\\mathbf{\\Theta} = [\\phi, \\theta, \\psi]`, in radians.\n        v (np.ndarray): 3 dimensional vector in G frame.\n\n    Returns:\n        np.ndarray: Resulting 3 by 3 matrix :math:`\\frac{\\partial \\mathbf{f}}{\\partial\\mathbf{\\Theta}}`.\n\n    \"\"\"\n\n    # TODO: Verify with new euler rotation matrices\n\n    res = np.zeros((3, 3))\n\n    # Notation shorthand. sin and cos of psi (roll)\n    sp = np.sin(euler[0])\n    cp = np.cos(euler[0])\n\n    # Notation shorthand. sin and cos of theta (pitch)\n    st = np.sin(euler[1])\n    ct = np.cos(euler[1])\n\n    # Notation shorthand. sin and cos of psi (yaw)\n    ss = np.sin(euler[2])\n    cs = np.cos(euler[2])\n\n    v1 = v[0]\n    v2 = v[1]\n    v3 = v[2]\n\n    res[0, 0] = 0\n    res[0, 1] = - v1 * st * cs - v2 * st * ss - v3 * ct\n    res[0, 2] = -v1 * ct * ss + v2 * ct * cs\n\n    res[1, 0] = v1 * (sp * ss + cp * st * cs) + v2 * (-sp * cs + cp * st * ss) + v3 * cp * ct\n    res[1, 1] = v1 * (sp * ct * cs) + v2 * sp * ct * ss - v3 * sp * st\n    res[1, 2] = v1 * (-cp * cs - sp * st * ss) + v2 * (-cp * ss + sp * st * cs)\n\n    res[2, 0] = v1 * (cp * ss - sp * st * cs) + v2 * (-cp * cs - sp * st * ss) + v3 * (-sp * ct)\n    res[2, 1] = v1 * cp * ct * cs + v2 * cp * ct * ss - v3 * cp * st\n    res[2, 2] = v1 * (sp * cs - cp * st * ss) + v2 * (sp * ss + cp * st * cs)\n\n    return res\n\n\ndef cross3(v, w):\n    \"\"\"\n    Computes the cross product of two vectors (v and w) with size 3\n    \"\"\"\n\n    res = np.zeros((3,), )\n    res[0] = v[1] * w[2] - v[2] * w[1]\n    res[1] = -v[0] * w[2] + v[2] * w[0]\n    res[2] = v[0] * w[1] - v[1] * w[0]\n\n    return res\n\n\ndef deuler_dt(euler):\n    r\"\"\"\n    Rate of change of the Euler angles in time for a given angular velocity in A frame :math:`\\omega^A=[p, q, r]`.\n\n    .. math::\n        \\begin{bmatrix}\\dot{\\phi} \\\\ \\dot{\\theta} \\\\ \\dot{\\psi}\\end{bmatrix} =\n        \\begin{bmatrix}\n        1 & \\sin\\phi\\tan\\theta & -\\cos\\phi\\tan\\theta \\\\\n        0 & \\cos\\phi & \\sin\\phi \\\\\n        0 & -\\frac{\\sin\\phi}{\\cos\\theta} & \\frac{\\cos\\phi}{\\cos\\theta}\n        \\end{bmatrix}\n        \\begin{bmatrix}\n        p \\\\ q \\\\ r\n        \\end{bmatrix}\n\n    Args:\n        euler (np.ndarray): Euler angles :math:`[\\phi, \\theta, \\psi]` for roll, pitch and yaw, respectively.\n\n    Returns:\n        np.ndarray: Propagation matrix relating the rotational velocities to the euler angles.\n    \"\"\"\n\n    phi = euler[0]  # roll\n    theta = euler[1]  # pitch\n\n    A = np.zeros((3, 3))\n    A[0, 0] = 1\n    A[0, 1] = np.tan(theta) * np.sin(phi)\n    A[0, 2] = -np.tan(theta) * np.cos(phi)\n\n    A[1, 1] = np.cos(phi)\n    A[1, 2] = np.sin(phi)\n\n    A[2, 1] = -np.sin(phi) / np.cos(theta)\n    A[2, 2] = np.cos(phi) / np.cos(theta)\n\n    return A\n\n\ndef deuler_dt_NED(euler):\n    r\"\"\"\n\n    Warnings:\n        Based on a NED frame\n\n    Rate of change of the Euler angles in time for a given angular velocity in A frame :math:`\\omega^A=[p, q, r]`.\n\n    .. math::\n        \\begin{bmatrix}\\dot{\\phi} \\\\ \\dot{\\theta} \\\\ \\dot{\\psi}\\end{bmatrix} =\n        \\begin{bmatrix}\n        1 & \\sin\\phi\\tan\\theta & \\cos\\phi\\tan\\theta \\\\\n        0 & \\cos\\phi & -\\sin\\phi \\\\\n        0 & \\frac{\\sin\\phi}{\\cos\\theta} & \\frac{\\cos\\phi}{\\cos\\theta}\n        \\end{bmatrix}\n        \\begin{bmatrix}\n        p \\\\ q \\\\ r\n        \\end{bmatrix}\n\n    Note:\n        This function is defined in a North East Down frame which is not the typically used one in SHARPy.\n\n    Args:\n        euler (np.ndarray): Euler angles :math:`[\\phi, \\theta, \\psi]` for roll, pitch and yaw, respectively.\n\n    Returns:\n        np.ndarray: Propagation matrix relating the rotational velocities to the euler angles.\n    \"\"\"\n\n    # TODO: Verify with the new euler rotation matrices\n    phi = euler[0]  # roll\n    theta = euler[1]  # pitch\n\n    A = np.zeros((3, 3))\n    A[0, 0] = 1\n    A[0, 1] = np.tan(theta) * np.sin(phi)\n    A[0, 2] = np.tan(theta) * np.cos(phi)\n\n    A[1, 1] = np.cos(phi)\n    A[1, 2] = -np.sin(phi)\n\n    A[2, 1] = np.sin(phi) / np.cos(theta)\n    A[2, 2] = np.cos(phi) / np.cos(theta)\n\n    return A\n\n\ndef der_Teuler_by_w(euler, w):\n    r\"\"\"\n    Calculates the matrix\n\n    .. math::\n        \\frac{\\partial}{\\partial\\Theta}\\left.\\left(T^{GA}(\\mathbf{\\Theta})\n        \\mathbf{\\omega}^A\\right)\\right|_{\\Theta_0,\\omega^A_0}\n\n    from the linearised euler propagation equations\n\n    .. math::\n       \\delta\\mathbf{\\dot{\\Theta}} = \\frac{\\partial}{\\partial\\Theta}\\left.\\left(T^{GA}(\\mathbf{\\Theta})\n       \\mathbf{\\omega}^A\\right)\\right|_{\\Theta_0,\\omega^A_0}\\delta\\mathbf{\\Theta} +\n       T^{GA}(\\mathbf{\\Theta_0}) \\delta\\mathbf{\\omega}^A\n\n    where :math:`T^{GA}` is the nonlinear relation between the euler angle rates and the rotational velocities and is\n    provided by :func:`deuler_dt`.\n\n    The concerned matrix is calculated as follows:\n\n    .. math::\n        \\frac{\\partial}{\\partial\\Theta}\\left.\\left(T^{GA}(\\mathbf{\\Theta})\n        \\mathbf{\\omega}^A\\right)\\right|_{\\Theta_0,\\omega^A_0} = \\\\\n        \\begin{bmatrix}\n        q\\cos\\phi\\tan\\theta-r\\sin\\phi\\tan\\theta & q\\sin\\phi\\sec^2\\theta + r\\cos\\phi\\sec^2\\theta & 0 \\\\\n        -q\\sin\\phi - r\\cos\\phi & 0 & 0 \\\\\n        q\\frac{\\cos\\phi}{\\cos\\theta}-r\\frac{\\sin\\phi}{\\cos\\theta} & q\\sin\\phi\\tan\\theta\\sec\\theta +\n        r\\cos\\phi\\tan\\theta\\sec\\theta & 0\n        \\end{bmatrix}_{\\Theta_0, \\omega^A_0}\n\n    Note:\n        This function is defined in a North East Down frame which is not the typically used one in SHARPy.\n\n    Args:\n        euler (np.ndarray): Euler angles at the linearisation point :math:`\\mathbf{\\Theta}_0 = [\\phi,\\theta,\\psi]` or\n            roll, pitch and yaw angles, respectively.\n        w (np.ndarray): Rotational velocities at the linearisation point in A frame :math:`\\omega^A_0`.\n\n    Returns:\n        np.ndarray: Computed :math:`\\frac{\\partial}{\\partial\\Theta}\\left.\\left(T^{GA}(\\mathbf{\\Theta})\\mathbf{\\omega}^A\\right)\\right|_{\\Theta_0,\\omega^A_0}`\n    \"\"\"\n\n    q = w[1]\n    r = w[2]\n\n    cp = np.cos(euler[0])\n    sp = np.sin(euler[0])\n\n    st = np.sin(euler[1])\n    ct = np.cos(euler[1])\n    tt = np.tan(euler[1])\n    tsec = ct ** -1\n\n    derT = np.zeros((3, 3))\n\n    derT[0, 0] = q * cp * tt + r * sp * tt\n    derT[0, 1] = q * sp * tsec ** 2 - r * cp * tsec ** 2\n\n    derT[1, 0] = -q * sp + r * cp\n\n    derT[2, 0] = - q * cp / ct - r * sp / ct\n    derT[2, 1] = - q * sp * tt * tsec + r * cp * tt * tsec\n\n    return derT\n\n\ndef der_Teuler_by_w_NED(euler, w):\n    r\"\"\"\n\n    Warnings:\n        Based on a NED G frame\n\n\n    Calculates the matrix\n\n    .. math::\n        \\frac{\\partial}{\\partial\\Theta}\\left.\\left(T^{GA}(\\mathbf{\\Theta})\n        \\mathbf{\\omega}^A\\right)\\right|_{\\Theta_0,\\omega^A_0}\n\n    from the linearised euler propagation equations\n\n    .. math::\n       \\delta\\mathbf{\\dot{\\Theta}} = \\frac{\\partial}{\\partial\\Theta}\\left.\\left(T^{GA}(\\mathbf{\\Theta})\n       \\mathbf{\\omega}^A\\right)\\right|_{\\Theta_0,\\omega^A_0}\\delta\\mathbf{\\Theta} +\n       T^{GA}(\\mathbf{\\Theta_0}) \\delta\\mathbf{\\omega}^A\n\n    where :math:`T^{GA}` is the nonlinear relation between the euler angle rates and the rotational velocities and is\n    provided by :func:`deuler_dt`.\n\n    The concerned matrix is calculated as follows:\n\n    .. math::\n        \\frac{\\partial}{\\partial\\Theta}\\left.\\left(T^{GA}(\\mathbf{\\Theta})\n        \\mathbf{\\omega}^A\\right)\\right|_{\\Theta_0,\\omega^A_0} = \\\\\n        \\begin{bmatrix}\n        q\\cos\\phi\\tan\\theta-r\\sin\\phi\\tan\\theta & q\\sin\\phi\\sec^2\\theta + r\\cos\\phi\\sec^2\\theta & 0 \\\\\n        -q\\sin\\phi - r\\cos\\phi & 0 & 0 \\\\\n        q\\frac{\\cos\\phi}{\\cos\\theta}-r\\frac{\\sin\\phi}{\\cos\\theta} & q\\sin\\phi\\tan\\theta\\sec\\theta +\n        r\\cos\\phi\\tan\\theta\\sec\\theta & 0\n        \\end{bmatrix}_{\\Theta_0, \\omega^A_0}\n\n    Args:\n        euler (np.ndarray): Euler angles at the linearisation point :math:`\\mathbf{\\Theta}_0 = [\\phi,\\theta,\\psi]` or\n            roll, pitch and yaw angles, respectively.\n        w (np.ndarray): Rotational velocities at the linearisation point in A frame :math:`\\omega^A_0`.\n\n    Returns:\n        np.ndarray: Computed :math:`\\frac{\\partial}{\\partial\\Theta}\\left.\\left(T^{GA}(\\mathbf{\\Theta})\\mathbf{\\omega}^A\\right)\\right|_{\\Theta_0,\\omega^A_0}`\n    \"\"\"\n\n    # TODO: Verify with new Euler rotation matrices\n\n    p = w[0]\n    q = w[1]\n    r = w[2]\n\n    cp = np.cos(euler[0])\n    sp = np.sin(euler[0])\n\n    st = np.sin(euler[1])\n    ct = np.cos(euler[1])\n    tt = np.tan(euler[1])\n    tsec = ct ** -1\n\n    derT = np.zeros((3, 3))\n\n    derT[0, 0] = q * cp * tt - r * sp * tt\n    derT[0, 1] = q * sp * tsec ** 2 + r * cp * tsec ** 2\n\n    derT[1, 0] = -q * sp - r * cp\n\n    derT[2, 0] = q * cp / ct - r * sp / ct\n    derT[2, 1] = q * sp * tt * tsec + r * cp * tt * tsec\n\n    return derT\n\n\ndef norm3d(v):\n    \"\"\"\n    Norm of a 3D vector\n\n    Notes:\n        Faster than np.linalg.norm\n\n    Args:\n        v (np.ndarray): 3D vector\n\n    Returns:\n        np.ndarray: Norm of the vector\n    \"\"\"\n    return np.sqrt(v[0] * v[0] + v[1] * v[1] + v[2] * v[2])\n\n\ndef normsq3d(v):\n    \"\"\"\n    Square of the norm of a 3D vector\n\n    Args:\n        v (np.ndarray): 3D vector\n\n    Returns:\n        np.ndarray: Square of the norm of the vector\n    \"\"\"\n    return v[0] * v[0] + v[1] * v[1] + v[2] * v[2]\n\n\ndef get_transformation_matrix(transformation):\n    r\"\"\"\n    Returns a projection matrix function between the desired frames of reference.\n\n    Examples:\n\n        The projection matrix :math:`C^GA(\\chi)` expresses a vector in the body-attached\n        reference frame ``A`` in the inertial frame ``G``, which is a function of the quaternion.\n\n        .. code-block::\n\n            cga_function = get_transformation_matrix('ga')\n            cga = cga_function(quat)  # The actual projection matrix between A and G for a known quaternion\n\n\n        If the projection involves the ``G`` and ``B`` frames, the output function will take both the quaternion\n        and the CRV as arguments.\n\n        .. code-block::\n\n            cgb_function = get_transformation_matrix('gb')\n            cgb = cgb_function(psi, quat)  # The actual projection matrix between B and G for a known CRV and quaternion\n\n    Args:\n        transformation (str): Desired projection matrix function.\n\n    Returns:\n        function: Function to obtain the desired projection matrix. The function will either take the CRV, the\n          quaternion, or both as arguments.\n\n    Note:\n        If a rotation is desired, it can be achieved by transposing the resulting projection matrix.\n    \"\"\"\n\n    if transformation == 'ab':\n        cab = crv2rotation\n        return cab\n    elif transformation == 'ba':\n        def cba(psi):\n            return crv2rotation(psi).T\n\n        return cba\n    elif transformation == 'ga':\n        cga = quat2rotation\n        return cga\n    elif transformation == 'ag':\n        def cag(quat):\n            return quat2rotation(quat).T\n\n        return cag\n    elif transformation == 'bg':\n        def cbg(psi, quat):\n            cag = get_transformation_matrix('ag')\n            cba = get_transformation_matrix('ba')\n            return cba(psi).dot(cag(quat))\n\n        return cbg\n    elif transformation == 'gb':\n        def cgb(psi, quat):\n            cab = get_transformation_matrix('ba')\n            cga = get_transformation_matrix('ga')\n            return cga(quat).dot(cab(psi))\n\n        return cgb\n    else:\n        raise NameError('Unknown transformation.')\n\n\ndef der_skewp_skewp_v(p, v):\n    \"\"\"\n    This function computes:\n\n        .. math:: \\frac{d}{d\\boldsymbol{p}} (\\tilde{\\boldsymbol{p}} \\tilde{\\boldsymbol{p}} v)\n    \"\"\"\n    der = np.zeros((3, 3))\n\n    der[0, 0] = v[1] * p[1] + v[2] * p[2]\n    der[0, 1] = -2 * v[0] * p[1] + v[1] * p[0]\n    der[0, 2] = -2 * v[0] * p[2] + v[2] * p[0]\n\n    der[1, 0] = v[0] * p[1] - 2 * v[1] * p[0]\n    der[1, 1] = v[0] * p[0] + v[2] * p[2]\n    der[1, 2] = -2 * v[1] * p[2] + v[2] * p[1]\n\n    der[2, 0] = v[0] * p[2] - 2 * v[2] * p[0]\n    der[2, 1] = v[1] * p[2] - 2 * v[2] * p[1]\n    der[2, 2] = v[0] * p[0] + v[1] * p[1]\n\n    return der\n\n\ndef der_skewpT_v(p, v):\n    \"\"\"\n    This function computes:\n\n        .. math:: \\frac{d}{d\\boldsymbol{p}} \\tilde{\\boldsymbol{p}}^T v)\n    \"\"\"\n    return skew(v)\n\n\ndef der_skewp_v(p, v):\n    \"\"\"\n    This function computes:\n\n        .. math:: \\frac{d}{d\\boldsymbol{p}} \\tilde{\\boldsymbol{p}} v)\n    \"\"\"\n    return -skew(v)\n"
  },
  {
    "path": "sharpy/utils/analytical.py",
    "content": "\"\"\"Analytical Functions\n\nAnalytical solutions for 2D aerofoil based on thin plates theory\n\nAuthor: Salvatore Maraniello\n\nDate: 23 May 2017\n\nReferences:\n\n1. Simpson, R.J.S., Palacios, R. & Murua, J., 2013. Induced-Drag Calculations in the Unsteady Vortex Lattice Method.\n   AIAA Journal, 51(7), pp.1775–1779.\n\n2. Gulcat, U., 2009. Propulsive Force of a Flexible Flapping Thin Airfoil. Journal of Aircraft, 46(2), pp.465–473.\n\n\"\"\"\n\nimport numpy as np\nimport scipy.special as scsp\n\n# imaginary variable\nj = 1.0j\n\n\ndef theo_fun(k):\n    r\"\"\"Returns the value of Theodorsen's function at a reduced frequency :math:`k`.\n\n    .. math:: \\mathcal{C}(jk) = \\frac{H_1^{(2)}(k)}{H_1^{(2)}(k) + jH_0^{(2)}(k)}\n\n    where :math:`H_0^{(2)}(k)` and :math:`H_1^{(2)}(k)` are Hankel functions of the second kind.\n\n    Args:\n        k (np.array): Reduced frequency/frequencies at which to evaluate the function.\n\n    Returns:\n        np.array: Value of Theodorsen's function evaluated at the desired reduced frequencies.\n\n    \"\"\"\n\n    H1 = scsp.hankel2(1, k)\n    H0 = scsp.hankel2(0, k)\n\n    C = H1 / (H1 + j * H0)\n\n    return C\n\n\ndef qs_derivs(x_ea_perc, x_fh_perc):\n    \"\"\"\n    Provides quasi-steady aerodynamic lift and moment coefficients derivatives\n    Ref. Palacios and Cesnik, Chap 3.\n\n    Args:\n        x_ea_perc: position of axis of rotation in percentage of chord (measured\n          from LE)\n        x_fc_perc: position of flap axis of rotation in percentage of chord\n          (measured from LE)\n    \"\"\"\n\n    # parameters\n    nu_ea = 2.0 * x_ea_perc - 1.0\n    nu_fh = 2.0 * x_fh_perc - 1.0\n    th = np.arccos(-nu_fh)\n\n    # pitch/pitch rate related quantities\n    CLa = 2. * np.pi  # ok\n    CLda = np.pi * (1. - 2. * nu_ea)\n    CMda = -0.25 * np.pi\n\n    # flap related quantities\n    CLb = 2. * (np.pi - th + np.sin(th))\n    CLdb = (0.5 - nu_fh) * 2. * (np.pi - th) + (2. - nu_fh) * np.sin(th)\n    CMb = -0.5 * (1 + nu_fh) * np.sin(th)\n    CMdb = -.25 * (np.pi - th + 2. / 3. * np.sin(th) * (0.5 - nu_fh) * (2. + nu_fh))\n\n    return CLa, CLda, CLb, CLdb, CMda, CMb, CMdb\n\n\ndef nc_derivs(x_ea_perc, x_fh_perc):\n    \"\"\"\n    Provides non-circulatory aerodynamic lift and moment coefficients derivatives\n    Ref. Palacios and Cesnik, Chap 3.\n\n    Args:\n        x_ea_perc: position of axis of rotation in percentage of chord (measured\n          from LE)\n        x_fc_perc: position of flap axis of rotation in percentage of chord\n          (measured from LE)\n    \"\"\"\n\n    # parameters\n    nu_ea = 2.0 * x_ea_perc - 1.0\n    nu_fh = 2.0 * x_fh_perc - 1.0\n    th = np.arccos(-nu_fh)\n\n    # pitch/pitch rate related quantities\n    CLda = np.pi  # ok\n    CLdda = -np.pi * nu_ea\n    CMda = -.25 * np.pi\n    CMdda = -0.25 * np.pi * (0.25 - nu_ea)\n\n    # flap related quantities\n    CLdb = np.pi - th - nu_fh * np.sin(th)\n    CLddb = -nu_fh * (np.pi - th) + 1. / 3. * (2. + nu_fh ** 2) * np.sin(th)\n    CMdb = -0.25 * (np.pi - th + (2. / 3. - nu_fh - 2. / 3. * nu_fh ** 2) * np.sin(th))\n    CMddb = -0.25 * ((0.25 - nu_fh) * (np.pi - th) + \\\n                     (2. / 3. - 5. / 12. * nu_fh + nu_fh ** 2 / 3. + nu_fh ** 3 / 6.) * np.sin(th))\n\n    return CLda, CLdda, CLdb, CLddb, CMda, CMdda, CMdb, CMddb\n\n\ndef theo_CL_freq_resp(k, x_ea_perc, x_fh_perc):\n    \"\"\"\n    Frequency response of lift coefficient according Theodorsen's theory.\n\n    The output is a 3 elements array containing the CL frequency response w.r.t.\n    to pitch, plunge and flap motion, respectively. Sign conventions are as\n    follows:\n    \n        * plunge: positive when moving upward\n\n        * x_ea_perc: position of axis of rotation in percentage of chord (measured\n          from LE)\n    \n        * x_fc_perc: position of flap axis of rotation in percentage of chord\n          (measured from LE)\n\n    Warning:\n        this function uses different input/output w.r.t. theo_lift\n    \"\"\"\n\n    df, ddf = j * k, -k ** 2\n\n    # get quasi-steady derivatives\n    CLa_qs, CLda_qs, CLb_qs, CLdb_qs, void, void, void = qs_derivs(x_ea_perc, x_fh_perc)\n\n    # quasi-steady lift\n    CLqs = np.array([\n        CLa_qs + CLda_qs * df,\n        CLa_qs * df,\n        CLb_qs + CLdb_qs * df,\n    ])\n\n    # get non-circulatory derivatives\n    CLda_nc, CLdda_nc, CLdb_nc, CLddb_nc, void, void, void, void \\\n        = nc_derivs(x_ea_perc, x_fh_perc)\n\n    # unsteady lift\n    df, ddf = j * k, -k ** 2\n    CLun = np.array([\n        CLda_nc * df + CLdda_nc * ddf,\n        CLda_nc * ddf,\n        CLdb_nc * df + CLddb_nc * ddf\n    ])\n\n    ### Total response\n    Y = theo_fun(k) * CLqs + CLun\n\n    # sign convention update\n    Y[1] = -Y[1]  # plunge dof positive upward\n\n    return Y\n\n\ndef theo_CM_freq_resp(k, x_ea_perc, x_fh_perc):\n    \"\"\"\n    Frequency response of moment coefficient according Theodorsen's theory.\n\n    The output is a 3 elements array containing the CL frequency response w.r.t.\n    to pitch, plunge and flap motion, respectively.\n    \"\"\"\n\n    df, ddf = j * k, -k ** 2\n\n    # get quasi-steady derivatives\n    void, void, void, void, CMda_qs, CMb_qs, CMdb_qs = qs_derivs(x_ea_perc, x_fh_perc)\n\n    # quasi-steady lift\n    CMqs = np.array([\n        CMda_qs * df,\n        0.0 * k,\n        CMb_qs + CMdb_qs * df,\n    ])\n\n    # get non-circulatory coefficients\n    void, void, void, void, CMda_nc, CMdda_nc, CMdb_nc, CMddb_nc = \\\n        nc_derivs(x_ea_perc, x_fh_perc)\n\n    # unsteady lift\n    CMun = np.array([\n        CMda_nc * df + CMdda_nc * ddf,\n        CMda_nc * ddf,\n        CMdb_nc * df + CMddb_nc * ddf\n    ])\n\n    ### Total response\n    Y = CMqs + CMun\n\n    # sign convention update\n    Y[1] = -Y[1]\n\n    return Y\n\n\ndef theo_lift(w, A, H, c, rhoinf, uinf, x12):\n    r\"\"\"\n    Theodorsen's solution for lift of aerofoil undergoing sinusoidal motion.\n\n    Time histories are built assuming:\n\n        * ``a(t)=+/- A cos(w t) ??? not verified``\n\n        * :math:`h(t)=-H\\cos(w t)`\n\n    Args:\n        w: frequency (rad/sec) of oscillation\n        A: amplitude of angle of attack change\n        H: amplitude of plunge motion\n        c: aerofoil chord\n        rhoinf: flow density\n        uinf: flow speed\n        x12: distance of elastic axis from mid-point of aerofoil (positive if\n            the elastic axis is ahead)\n\n    \"\"\"\n\n    # reduced frequency\n    k = 0.5 * w * c / uinf\n\n    # compute theodorsen's function\n    Ctheo = theo_fun(k)\n\n    # Lift: circulatory\n    Lcirc = np.pi * rhoinf * uinf * c * Ctheo * ((uinf + w * j * (0.25 * c + x12)) * A + w * H * j)\n    Lmass = 0.25 * np.pi * rhoinf * c ** 2 * ((j * w * uinf - x12 * w ** 2) * A - H * w ** 2)\n    Ltot = Lcirc + Lmass\n\n    return Ltot, Lcirc, Lmass\n\n\ndef garrick_drag_plunge(w, H, c, rhoinf, uinf, time):\n    r\"\"\"\n    Returns Garrick solution for drag coefficient at a specific time.\n    Ref.[1], eq.(8) (see also eq.(1) and (2)) or Ref[2], eq.(2)\n\n    The aerofoil vertical motion is assumed to be:\n\n    .. math:: h(t)=-H\\cos(wt)\n\n\n    The :math:`C_d` is such that:\n\n        * :math:`C_d>0`: drag\n\n        * :math:`C_d<0`: suction\n    \"\"\"\n\n    b = 0.5 * c\n    k = b * w / uinf\n    Hast = H / b\n    s = uinf * time / b\n\n    # compute theodorsen's function\n    Ctheo = theo_fun(k)\n\n    Cd = -2. * np.pi * k ** 2 * Hast ** 2 * (\n            Ctheo.imag * np.cos(k * s) + Ctheo.real * np.sin(k * s)) ** 2\n\n    return Cd\n\n\ndef garrick_drag_pitch(w, A, c, rhoinf, uinf, x12, time):\n    r\"\"\"\n    Returns Garrick solution for drag coefficient at a specific time.\n    Ref.[1], eq.(9), (10) and (11)\n\n    The aerofoil pitching motion is assumed to be:\n\n        .. math:: a(t)=A\\sin(\\omegat)=A\\sin(ks)\n\n    The :math:`C_d` is such that:\n\n        * :math:`C_d>0`: drag\n\n        * :math:`C_d<0`: suction\n    \"\"\"\n\n    x12 = x12 / c\n    b = 0.5 * c\n    k = b * w / uinf\n    s = uinf * time / b\n\n    # compute theodorsen's function\n    Ctheo = theo_fun(k)\n    F, G = Ctheo.real, Ctheo.imag\n    sks, cks = np.sin(k * s), np.cos(k * s)\n\n    # angle of attack\n    a = A * sks\n\n    # lift term\n    Cl = np.pi * A * (k * cks\n                      + x12 * k ** 2 * sks\n                      + 2. * F * (sks + (0.5 - x12) * k * cks)\n                      + 2. * G * (cks - (0.5 - x12) * k * sks))\n\n    # suction force\n    Y1 = 2. * (F - k * G * (0.5 - x12))\n    Y2 = 2. * (G - k * F * (0.5 - x12)) - k\n    Cs = 0.5 * np.pi * A ** 2 * (Y1 * sks + Y2 * cks) ** 2\n\n    Cd = a * Cl - Cs\n\n    return Cd\n\n\ndef sears_fun(kg):\n    \"\"\"\n    Produces Sears function\n    \"\"\"\n\n    S12 = 2. / np.pi / kg / (scsp.hankel1(0, kg) + 1.j * scsp.hankel1(1, kg))\n    S = np.exp(-1.j * kg) * S12.conj()\n\n    return S\n\n\ndef sears_lift_sin_gust(w0, L, Uinf, chord, tv):\n    \"\"\"\n    Returns the lift coefficient for a sinusoidal gust (see set_gust.sin) as\n    the imaginary part of the CL complex function defined below. The input gust\n    must be the imaginary part of\n\n    .. math::    wgust = w0*\\exp(1.0j*C*(Ux*S.time[tt] - xcoord) )\n\n    with:\n\n    .. math:: C=2\\pi/L\n\n    and ``xcoord=0`` at the aerofoil half-chord.\n    \"\"\"\n\n    # reduced frequency\n    kg = np.pi * chord / L\n    # Theo's funciton\n    Ctheo = theo_fun(kg)\n    # Sear's function\n    J0, J1 = scsp.j0(kg), scsp.j1(kg)\n    S = (J0 - 1.0j * J1) * Ctheo + 1.0j * J1\n\n    phase = np.angle(S)\n    CL = 2. * np.pi * w0 / Uinf * np.abs(S) * np.sin(2. * np.pi * Uinf / L * tv + phase)\n\n    return CL\n\n\ndef sears_CL_freq_resp(k):\n    \"\"\"\n    Frequency response of lift coefficient according Sear's solution.\n    Ref. Palacios and Cesnik, Chap.3\n    \"\"\"\n\n    # hanckel functions\n    H1 = scsp.hankel1(1, k)\n    H0 = scsp.hankel1(0, k)\n\n    # Sear's function\n    S12star = 2. / (np.pi * k * (H0 + 1.j * H1))\n    S0 = np.exp(-1.0j * k) * S12star.conj(S12star)\n\n    # CL frequency response\n    CL = 2. * np.pi * S0\n\n    return CL\n\n\ndef wagner_imp_start(aeff, Uinf, chord, tv):\n    \"\"\"\n    Lift coefficient resulting from impulsive start solution.\n    \"\"\"\n\n    sv = 2.0 * Uinf / chord * tv\n    fiv = 1.0 - 0.165 * np.exp(-0.0455 * sv) - 0.335 * np.exp(-0.3 * sv)\n    CLv = 2. * np.pi * aeff * fiv\n\n    return CLv\n\n\ndef flat_plate_analytical(kv, x_ea_perc, x_fh_perc, input_seq, output_seq,\n                          output_scal=None, plunge_deriv=True):\n    r\"\"\"\n    Computes the analytical frequency response of a plat plate for the input\n    output sequences in ``input_seq`` and ``output_seq`` over the frequency points ``kv``,\n    if available.\n\n    The output complex values array ``Yan`` has shape ``(Nout, Nin, Nk)``; if an analytical\n    solution is not available, the response is assumed to be zero.\n\n    If ``plunge_deriv`` is ``True``, the plunge response is expressed in terms of first\n    derivative dh.\n\n    Args:\n        kv (np.array): Frequency range of length ``Nk``.\n        x_ea_perc (float): Elastic axis location along the chord as chord length percentage.\n        x_fh_perc (float): Flap hinge location along the chord as chord length percentage.\n        input_seq (list(str)): List of ``Nin`` number of inputs.\n            Supported inputs include:\n                * ``gust_sears``: Response to a continuous sinusoidal gust.\n                * ``pitch``: Response to an oscillatory pitching motion.\n                * ``plunge``: Response to an oscillatory plunging motion.\n        output_seq (list(str)): List of ``Nout`` number of outputs.\n            Supported outputs include:\n                * ``Fy``: Vertical force.\n                * ``Mz``: Pitching moment.\n        output_scal (np.array): Array of factors by which to divide the desired outputs. Dimensions of ``Nout``.\n        plunge_deriv (bool): If ``True`` expresses the plunge response in terms of the first derivative, i.e. the\n        rate of change of plunge :math:`d\\dot{h}`.\n\n    Returns:\n        np.array: A ``(Nout, Nin, Nk)`` array containing the scaled frequency response for the inputs and outputs\n        specified.\n\n    See Also:\n        The lift coefficient due to pitch and plunging motions is calculated\n        using :func:`sharpy.utils.analytical.theo_CL_freq_resp`. In turn, the pitching moment is found using\n        :func:`sharpy.utils.analytical.theo_CM_freq_resp`.\n\n        The response to the continuous sinusoidal gust is calculated using\n        :func:`sharpy.utils.analytical.sears_CL_freq_resp`.\n\n    \"\"\"\n\n    Nout = len(output_seq)\n    Nin = len(input_seq)\n    Nk = len(kv)\n    Yfreq_an = np.zeros((Nout, Nin, Nk), dtype=np.complex)\n\n    # Get Theodorsen solutions\n    CLtheo = theo_CL_freq_resp(kv, x_ea_perc, x_fh_perc)\n    CMtheo = theo_CM_freq_resp(kv, x_ea_perc, x_fh_perc)\n\n    # scaling\n    if output_scal is None: output_scal = np.ones((Nout,))\n\n    for oo in range(Nout):\n        for ii in range(Nin):\n\n            ### Sears\n            if input_seq[ii] == 'gust_sears':\n                # Fx,Mz null\n                if output_seq[oo] == 'Fy':\n                    Yfreq_an[oo, ii, :] = sears_CL_freq_resp(kv)\n\n            ### Theodorsen\n            if input_seq[ii] == 'pitch':\n                if output_seq[oo] == 'Fy':\n                    Yfreq_an[oo, ii, :] = CLtheo[0]\n                if output_seq[oo] == 'Mz':\n                    Yfreq_an[oo, ii, :] = CMtheo[0]\n\n            if input_seq[ii] == 'plunge':\n                Fact = 1.0\n                if plunge_deriv: Fact = -1.j / kv\n                if output_seq[oo] == 'Fy':\n                    Yfreq_an[oo, ii, :] = Fact * CLtheo[1]\n                if output_seq[oo] == 'Mz':\n                    Yfreq_an[oo, ii, :] = Fact * CMtheo[1]\n\n        # scale output\n        Yfreq_an[oo, :, :] = Yfreq_an[oo, :, :] / output_scal[oo]\n\n    return Yfreq_an\n\n\n# if __name__ == '__main__':\n#     import matplotlib.pyplot as plt\n#\n#     kv = np.linspace(0.001, 50, 1001)\n#\n#     ### test Sear's function\n#     sv = sears_fun(kv)\n#     plt.plot(kv, sv.real, '-')\n#     plt.plot(kv, sv.imag, '--')\n#     plt.show()\n#\n#     CL = theo_CL_freq_resp(kv, 0.25, 0.8)\n#\n#     kv = np.linspace(0.001, 2.0, 101)\n#     # data for dimensional analysis\n#     b = 1.3\n#     U = 15.0\n#     H = 0.3\n#     A = 5.0 * np.pi / 180.\n#     rho = 1.225\n#     tref = b / U\n#\n#     ### plunge frequency response\n#     Ltheo = -theo_lift(kv / tref, 0, H, 2. * b, rho, U, 0.0)[0]\n#     Fref = b * rho * U ** 2\n#     CLfreq = Ltheo / Fref / (H / b)\n#\n#     Yfreq = theo_CL_freq_resp(kv, x_ea_perc=1.0, x_fh_perc=0.9)\n#     CLfreq02 = Yfreq[1]\n#     Er = np.max(np.abs(CLfreq - CLfreq02))\n#     print('Max error for CL plunge freq response: %.2e' % Er)\n#\n#     # moments\n#     Yfreq = theo_CM_freq_resp(kv, x_ea_perc=1.0, x_fh_perc=0.9)\n#     CMfreq = Yfreq[1]  # plunge motion\n#     CMfreq_vel = 1.j / kv * CMfreq\n#     CMmag_vel, CMph_vel = np.abs(CMfreq_vel), np.angle(CMfreq_vel, deg=True)\n#\n#     fig = plt.figure('Momentum coefficient frequency response')\n#     ax = fig.add_subplot(121)\n#     ax.plot(kv, CMmag_vel, 'k', label='magnitude')\n#     ax.legend()\n#     ax = fig.add_subplot(122)\n#     ax.plot(kv, CMph_vel, 'r', label='phase')\n#     ax.legend()\n#     plt.show()\n#\n#     ### pitching frequency response\n#     Yfreq = theo_CL_freq_resp(kv, x_ea_perc=.5, x_fh_perc=0.9)\n#     CLfreq02 = Yfreq[0]\n#\n#     ### geometry\n#     c = 3.  # m\n#     b = 0.5 * c\n#\n#     ### motion\n#     ktarget = 1.\n#     H = 0.02 * b  # m Ref.[1]\n#     A = 1. * np.pi / 180.  # rad - Ref.[1]\n#     x12 = -0.5 * c\n#     f0 = 5.  # Hz\n#     w0 = 2. * np.pi * f0  # rad/s\n#\n#     uinf = b * w0 / ktarget\n#     rhoinf = 1.225  # kg/m3\n#     qinf = 0.5 * c * rhoinf * uinf ** 2\n#     # C=theo_fun(k=ktarget)\n#     # L=theo_lift(w0,A,H,c,rhoinf,uinf,x12)\n#\n#     ##### Plunge Induced drag\n#     Ncicles = 5\n#     tv = np.linspace(0., 2. * np.pi * Ncicles / w0, 200 * Ncicles + 1)\n#     Cdv = garrick_drag_plunge(w0, H, c, rhoinf, uinf, tv)\n#     hv = -H * np.cos(w0 * tv)\n#     dhv = w0 * H * np.sin(w0 * tv)\n#     aeffv = np.arctan(-dhv / uinf)\n#     # fig = plt.figure('Induced drag - plunge motion',(10,6))\n#     # ax=fig.add_subplot(111)\n#     # ax.plot(tv,hv/c,'r',label=r'h/c')\n#     # ax.plot(tv,Cdv,'k',label=r'Induced Drag')\n#     # ax.legend()\n#     # plt.show()\n#     fig = plt.figure('Plunge motion - Phase vs kinematics', (10, 6))\n#     ax = fig.add_subplot(111)\n#     # ax.plot(aeffv,hv/c,'r',label=r'h/c')\n#     ax.plot(180. / np.pi * aeffv, Cdv, 'k', label=r'Induced Drag')\n#     ax.set_xlabel('deg')\n#     ax.legend()\n#     plt.close()\n#\n#     ##### Pitching Induced drag\n#     Ncicles = 5\n#     tv = np.linspace(0., 2. * np.pi * Ncicles / w0, 200 * Ncicles + 1)\n#     Cdv = garrick_drag_pitch(w0, A, c, rhoinf, uinf, x12, tv)\n#     aeffv = A * np.sin(w0 * tv)\n#     fig = plt.figure('Pitch motion - Phase vs kinematics', (10, 6))\n#     ax = fig.add_subplot(111)\n#     # ax.plot(aeffv,hv/c,'r',label=r'h/c')\n#     ax.plot(180. / np.pi * aeffv, Cdv, 'k', label=r'Induced Drag')\n#     ax.set_xlabel('deg')\n#     ax.legend()\n#\n#     ##### Sear's solution test\n#     L = .5 * c\n#     w0 = 0.3\n#     uinf = 6.0\n#\n#     # gust profile at LE\n#     tv = np.linspace(0., 2., 300)\n#     C = 2. * np.pi / L\n#     wgustLE = w0 * np.sin(C * uinf * tv)\n#     CLv = sears_lift_sin_gust(w0, L, uinf, c, tv)\n#\n#     fig = plt.figure('Gust response', (10, 6))\n#     ax = fig.add_subplot(111)\n#     ax.plot(tv, wgustLE, 'k', label=r'vertical gust velocity at LE [m/s]')\n#     ax.plot(tv, CLv, 'r', label=r'CL')\n#     ax.set_xlabel('time')\n#     ax.legend()\n#     # plt.show()\n#     plt.close('all')\n#\n#     ##### Wagner impulsive start\n#     uinf = 20.0\n#     chord = 3.0\n#     aeff = 2.0 * np.pi / 180.\n#     tv = np.linspace(0., 10., 300)\n#\n#     CLv = wagner_imp_start(aeff, uinf, chord, tv)\n#     CLv_inf = wagner_imp_start(aeff, uinf, chord, 1e3 * tv[-1])\n#\n#     fig = plt.figure('Impulsive start', (10, 6))\n#     ax = fig.add_subplot(111)\n#     ax.plot(tv, CLv / CLv_inf, 'r', label=r'CL')\n#     ax.set_xlabel('time')\n#     ax.legend()\n#     plt.show()\n"
  },
  {
    "path": "sharpy/utils/constants.py",
    "content": "import ctypes as ct\nimport numpy as np\n\nNDIM = int(3)\nct_NDIM = ct.c_uint(NDIM)\ndeg2rad = np.pi/180.\nvortex_radius_def = 1e-6\n\ncfact_biot = 0.25 / np.pi\n"
  },
  {
    "path": "sharpy/utils/control_utils.py",
    "content": "\"\"\"Controller Utilities\n\"\"\"\nimport numpy as np\n\ndef second_order_fd(history, n_calls, dt):\n    # history is ordered such that the last element is the most recent one (t), and thus\n    # it goes [(t - 2), (t - 1), (t)]\n    coefficients = np.zeros((3,))\n    if n_calls <= 1:\n        # no derivative, return 0\n        pass\n\n    elif n_calls == 2:\n    # else:\n        # first order derivative\n        coefficients[1:3] = [-1.0, 1.0]\n\n    else:\n        # # second order derivative\n        coefficients[:] = [1.0, -4.0, 3.0]\n        coefficients *= 0.5\n\n    derivative = np.dot(coefficients, history)/dt\n    return derivative\n\nclass PID(object):\n    \"\"\"\n    Class implementing a classic PID controller\n\n    Instance attributes:\n    :param `gain_p`: Proportional gain.\n    :param `gain_i`: Integral gain.\n    :param `gain_d`: Derivative gain.\n    :param `dt`: Simulation time step.\n\n    The class should be used as:\n\n        pid = PID(100, 10, 0.1, 0.1)\n        pid.set_point(target_point)\n        control = pid(current_point)\n    \"\"\"\n    # for i in range(n_steps):\n    #     state[i] = np.sum(feedback[:i])\n    #     controller.set_point(set_point[i])\n    #     feedback[i] = controller(state[i])\n    def __init__(self, gain_p, gain_i, gain_d, dt):\n        self._kp = gain_p\n        self._ki = gain_i\n        self._kd = gain_d\n\n        self._point = 0.0\n\n        self._dt = dt\n\n        self._accumulated_integral = 0.0\n        self._integral_limits = np.array([-1., 1.])*10000\n        self._error_history = np.zeros((3,))\n\n        self._derivator = second_order_fd\n        self._derivative_limits = np.array([-1, 1])*10000\n\n        self._n_calls = 0\n\n        self._anti_windup_lim = None\n\n    def set_point(self, point):\n        self._point = point\n\n    def set_anti_windup_lim(self, lim):\n        self._anti_windup_lim = lim\n\n    def reset_integrator(self):\n        self._accumulated_integral = 0.0\n\n    def __call__(self, state):\n        self._n_calls += 1\n        actuation = 0.0\n        error = self._point - state\n        # displace previous errors one position to the left\n        self._error_history = np.roll(self._error_history, -1)\n        self._error_history[-1] = error\n\n        detailed = np.zeros((3,))\n        # Proportional gain\n        actuation += error*self._kp\n        detailed[0] = error*self._kp\n\n        # Derivative gain\n        derivative = self._derivator(self._error_history, self._n_calls, self._dt)\n        derivative = max(derivative, self._derivative_limits[0])\n        derivative = min(derivative, self._derivative_limits[1])\n        actuation += derivative*self._kd\n        detailed[2] = derivative*self._kd\n\n        # Integral gain\n        aux_acc_int = self._accumulated_integral + error*self._dt\n        if aux_acc_int < self._integral_limits[0]:\n            aux_acc_int = self._integral_limits[0]\n        elif aux_acc_int > self._integral_limits[1]:\n            aux_acc_int = self._integral_limits[1]\n\n        if self._anti_windup_lim is not None:\n            # Apply anti wind up\n            aux_actuation = actuation + aux_acc_int*self._ki\n            if ((aux_actuation > self._anti_windup_lim[0]) and\n                (aux_actuation < self._anti_windup_lim[1])):\n                # Within limits\n                self._accumulated_integral = aux_acc_int\n                # If the system exceeds the limits, this \n                # will not be added to the self._accumulated_integral\n        else:\n            self._accumulated_integral = aux_acc_int\n\n        actuation += self._accumulated_integral*self._ki\n        detailed[1] = self._accumulated_integral*self._ki\n\n        return actuation, detailed\n"
  },
  {
    "path": "sharpy/utils/controller_interface.py",
    "content": "from abc import ABCMeta, abstractmethod\nimport sharpy.utils.cout_utils as cout\nimport os\n\ndict_of_controllers = {}\ncontrollers = {}  # for internal working\n\n\n# decorator\ndef controller(arg):\n    # global available_solvers\n    global dict_of_controllers\n    try:\n        arg.controller_id\n    except AttributeError:\n        raise AttributeError('Class defined as controller has no controller_id attribute')\n    dict_of_controllers[arg.controller_id] = arg\n    return arg\n\n\ndef print_available_controllers():\n    cout.cout_wrap('The available controllers in this session are:', 2)\n    for name, i_controller in dict_of_controllers.items():\n        cout.cout_wrap('%s ' % i_controller.controller_id, 2)\n\n\nclass BaseController(metaclass=ABCMeta):\n    \n    def teardown(self):\n        pass\n\n\ndef controller_from_string(string):\n    return dict_of_controllers[string]\n\n\ndef controller_list_from_path(cwd):\n    onlyfiles = [f for f in os.listdir(cwd) if os.path.isfile(os.path.join(cwd, f))]\n\n    for i_file in range(len(onlyfiles)):\n        if onlyfiles[i_file].split('.')[-1] == 'py': # support autosaved files in the folder\n            if onlyfiles[i_file] == \"__init__.py\":\n                onlyfiles[i_file] = \"\"\n                continue\n            onlyfiles[i_file] = onlyfiles[i_file].replace('.py', '')\n        else:\n            onlyfiles[i_file] = \"\"\n\n    files = [file for file in onlyfiles if not file == \"\"]\n    return files\n\n\ndef initialise_controller(controller_name, print_info=True):\n    if print_info:\n        cout.cout_wrap('Generating an instance of %s' % controller_name, 2)\n    cls_type = controller_from_string(controller_name)\n    controller = cls_type()\n    return controller\n\ndef dictionary_of_controllers(print_info=True):\n    import sharpy.controllers\n    dictionary = dict()\n    for controller in dict_of_controllers:\n        init_controller = initialise_controller(controller, print_info=print_info)\n        dictionary[controller] = init_controller.settings_default\n\n    return dictionary\n"
  },
  {
    "path": "sharpy/utils/cout_utils.py",
    "content": "import textwrap\nimport colorama\nimport os\nimport numpy as np\nimport subprocess\nimport sharpy.utils.sharpydir as sharpydir\n\ncwd = os.getcwd()\n\n\nclass Writer(object):\n    fore_colours = ['', colorama.Fore.BLUE, colorama.Fore.CYAN, colorama.Fore.YELLOW, colorama.Fore.RED]\n    reset = colorama.Style.RESET_ALL\n\n    output_columns = 80\n    separator = '-'*output_columns\n    sharpy_ascii = \\\n\"\"\"--------------------------------------------------------------------------------\n            ######  ##     ##    ###    ########  ########  ##    ##\n           ##    ## ##     ##   ## ##   ##     ## ##     ##  ##  ##\n           ##       ##     ##  ##   ##  ##     ## ##     ##   ####\n            ######  ######### ##     ## ########  ########     ##\n                 ## ##     ## ######### ##   ##   ##           ##\n           ##    ## ##     ## ##     ## ##    ##  ##           ##\n            ######  ##     ## ##     ## ##     ## ##           ##\n--------------------------------------------------------------------------------\"\"\"\n\n    sharpy_license = \\\n        '''Aeroelastics Lab, Aeronautics Department.\n    Copyright (c), Imperial College London.\n    All rights reserved.\n    License available at https://github.com/imperialcollegelondon/sharpy'''\n\n    wrapper = textwrap.TextWrapper(width=output_columns, break_long_words=False)\n\n    def __init__(self):\n        self.print_screen = False\n        self.print_file = False\n        self.file = None\n        self.file_route = ''\n        self.file_name = ''\n\n    def initialise(self, print_screen, print_file, file_route=None, file_name=None):\n        # copy settings\n        self.print_screen = print_screen\n        self.print_file = print_file\n\n        if self.print_file:\n            self.file_route = file_route\n            self.file_name = file_name\n            # create folder if necessary\n            if not os.path.exists(self.file_route):\n                try:\n                    os.makedirs(self.file_route)\n                except FileExistsError:\n                    pass\n\n            self.file = open(self.file_route + '/' + self.file_name, 'w')\n\n        self.print_welcome_message()\n\n    def print_welcome_message(self):\n        self.__call__(self.sharpy_ascii)\n        self.__call__(self.sharpy_license)\n        self.__call__('Running SHARPy from ' + cwd, 2)\n        self.__call__('SHARPy being run is in ' + sharpydir.SharpyDir, 2)\n        try:\n            self.__call__(print_git_status(), 2)\n        except subprocess.CalledProcessError:\n            pass\n        import sharpy.utils.solver_interface as solver_interface\n        # solver_interface.print_available_solvers()\n\n    def cout_quiet(self):\n        self.print_screen = False\n\n    def cout_talk(self):\n        self.print_screen = True\n\n    def print_separator(self, level=0):\n        self.__call__(self.separator, level)\n\n    def __call__(self, in_line, level=0):\n        if self.print_screen:\n            line = in_line\n            lines = line.split(\"\\n\")\n            if level > 4:\n                raise AttributeError('Output level cannot be > 4')\n            if len(lines) == 1:\n                print(self.fore_colours[level] + line + self.reset)\n            else:\n                newline = ''\n                for line in lines:\n                    if len(line) > self.output_columns:\n                        line = '\\n'.join(self.wrapper.wrap(line))\n\n                    print(self.fore_colours[level] + line + self.reset)\n                #     newline += line + \"\\n\"\n                # print(self.fore_colours[level] + newline + self.reset)\n        if self.print_file:\n            line = in_line\n            lines = line.split(\"\\n\")\n            if len(lines) == 1:\n                self.file.write(line + '\\n')\n            else:\n                newline = ''\n                for line in lines:\n                    if len(line) > self.output_columns:\n                        line = '\\n'.join(self.wrapper.wrap(line))\n\n                    newline += line + \"\\n\"\n                self.file.write(newline)\n\n    def close(self):\n        if self.file is not None:\n            if not self.file.closed:\n                self.file.close()\n\n    def __del__(self):\n        self.close()\n\n\ncout_wrap = Writer()\n\n\ndef start_writer():\n    global cout_wrap\n    cout_wrap = Writer()\n    # pass\n\n\ndef finish_writer():\n    global cout_wrap\n    if cout_wrap is not None:\n        cout_wrap.close()\n\n\n# table output for residuals\nclass TablePrinter(object):\n    global cout_wrap\n\n    divider_char = '|'\n    line_char = '='\n\n    def __init__(self, n_fields=3, field_length=12, field_types=[['g']]*100, filename=None):\n        self.n_fields = n_fields\n        self.file = None\n        self.divider_line = None\n        try:\n            field_length[0]\n        except TypeError:\n            self.field_length = np.full((self.n_fields, ), field_length, dtype=int)\n        else:\n            if len(field_length) == n_fields:\n                self.field_length = field_length\n            else:\n                raise Exception('len(field_length /= n_fields')\n        self.field_names = None\n        self.field_types = field_types\n\n        if cout_wrap is None:\n            start_writer()\n\n        # if filename is not None:\n            # self.file = open(filename, 'w')\n        self.file = filename\n\n    def print_header(self, field_names):\n        self.field_names = field_names\n        if not len(self.field_names) == self.n_fields:\n            raise Exception('len(field_names) /= n_fields')\n        for i_name in range(self.n_fields):\n            name = self.field_names[i_name]\n            if len(name) >= self.field_length[i_name]:\n                name = name[0:self.field_length[i_name]]\n\n        string = ''\n        divider_line = ''\n        # for i_field in range(self.n_fields):\n            # string += '|{0[' + str(i_field) + ']:^' + str(self.field_length[i_field]) + '}'\n            # divider_line += '-'*(self.field_length[i_field]) + '|'\n\n        for i_field in range(self.n_fields):\n            field_length = self.field_length[i_field]\n            string += self.divider_char + '{' + str(i_field) + ':^' + str(field_length + 2) + '}'\n            # string += '|{0[' + str(i_field) + ']:^' + str(self.field_length[i_field]) + '}'\n            divider_line += self.divider_char + (field_length + 2)*self.line_char\n\n        string += self.divider_char\n        divider_line += self.divider_char\n        self.divider_line = divider_line\n        cout_wrap('\\n\\n')\n        cout_wrap(divider_line)\n        cout_wrap(string.format(*(self.field_names)))\n        cout_wrap(divider_line)\n\n        if self.file is not None:\n            with open(self.file, 'a+') as f:\n                f.write(divider_line)\n                f.write('\\n' + string.format(*(self.field_names)))\n                f.write('\\n' + divider_line)\n\n    def print_line(self, line_data):\n        string = ''\n        for i_field in range(self.n_fields):\n            string += (self.divider_char +\n                       '{0[' +\n                       str(i_field) +\n                       ']:^' +\n                       str(self.field_length[i_field] + 2) +\n                       '.' +\n                       str(max(int(self.field_length[i_field]/2), 4)) +\n                       self.field_types[i_field] +\n                       '}')\n\n        string += self.divider_char\n        cout_wrap(string.format(line_data))\n        if self.file is not None:\n            with open(self.file, 'a') as f:\n                f.write('\\n'+string.format(line_data))\n\n    def close_file(self):\n        if self.file is not None:\n            with open(self.file, 'a+') as f:\n                f.write('\\n' + self.divider_line)\n\n    def print_divider_line(self):\n        cout_wrap(self.divider_line)\n        if self.file is not None:\n            with open(self.file, 'a+') as f:\n                f.write('\\n' + self.divider_line)\n\n    def character_return(self, n_lines=1):\n        cout_wrap(n_lines * '\\n')\n        if self.file is not None:\n            with open(self.file, 'a+') as f:\n                f.write(n_lines * '\\n')\n\n\n# version tracker and output\ndef get_git_revision_hash(di=sharpydir.SharpyDir):\n    return subprocess.check_output(['git', 'rev-parse', 'HEAD'], cwd=di).strip().decode('utf-8')\n\n\ndef get_git_revision_short_hash(di=sharpydir.SharpyDir):\n    return subprocess.check_output(['git', 'rev-parse', '--short', 'HEAD'], cwd=di).strip().decode('utf-8')\n\n\ndef get_git_revision_branch(di=sharpydir.SharpyDir):\n    return subprocess.check_output(['git', 'rev-parse', '--abbrev-ref', 'HEAD'], cwd=di).strip().decode('utf-8')\n\n\ndef get_git_tag(di=sharpydir.SharpyDir):\n    return subprocess.check_output(['git', 'describe'], cwd=di).strip().decode('utf-8')\n\n\ndef print_git_status():\n    return ('The branch being run is ' + get_git_revision_branch() + '\\n'\\\n            'The version and commit hash are: ' + get_git_tag() + '-' + get_git_revision_short_hash())\n\ndef check_running_unittest():\n    import sys\n    # Define if the script is being run in unittest\n    running_unittest = False\n    for arg in sys.argv:\n        if \"unittest\" in arg:\n            print(\"running unittest\")\n            running_unittest = True\n\n    return running_unittest\n"
  },
  {
    "path": "sharpy/utils/ctypes_utils.py",
    "content": "import ctypes as ct\nimport platform\nimport os\n\n\ndef import_ctypes_lib(route, libname):\n    lib_path = os.path.join(route, libname)\n    if platform.system() == 'Darwin':\n        ext = '.dylib'\n    elif platform.system() == 'Linux':\n        ext = '.so'\n    else:\n        raise NotImplementedError('The platform ' + platform.system() + 'is not supported')\n\n    lib_path += ext\n    lib_path = os.path.abspath(lib_path)\n\n    library = ct.CDLL(lib_path, mode=ct.RTLD_GLOBAL)\n\n    return library\n"
  },
  {
    "path": "sharpy/utils/datastructures.py",
    "content": "\"\"\"Data Management Structures\n\nThese classes are responsible for storing the aerodynamic and structural time step information and relevant variables.\n\n\"\"\"\nimport copy\nimport ctypes as ct\nimport numpy as np\n\nimport sharpy.utils.algebra as algebra\nimport sharpy.utils.multibody as mb\n\n\nclass TimeStepInfo(object):\n    \"\"\"\n    Time step class.\n\n    It is the parent class of the AeroTimeStepInfo and NonliftingBodyTimeStepInfo, which contain the relevant\n    aerodynamic attributes for a single time step. All variables should be expressed in ``G`` FoR unless\n    otherwise stated.\n\n    Attributes:\n        ct_dimensions: Pointer to ``dimensions`` to interface the C++ library `uvlmlib``\n\n        dimensions (np.ndarray): Matrix defining the dimensions of the vortex grid on solid surfaces\n          ``[num_surf x chordwise panels x spanwise panels]``\n\n        n_surf (int): Number of aerodynamic surfaces on solid bodies. Each aerodynamic surface on solid bodies will\n          have an associted wake.\n\n        zeta (list(np.ndarray): Location of solid grid vertices\n          ``[n_surf][3 x (chordwise nodes + 1) x (spanwise nodes + 1)]``\n        zeta_dot (list(np.ndarray)): Time derivative of ``zeta``\n        normals (list(np.ndarray)): Normal direction to panels at the panel center\n          ``[n_surf][3 x chordwise nodes x spanwise nodes]``\n        forces (list(np.ndarray)): Forces not associated to time derivatives on grid vertices\n          ``[n_surf][3 x (chordwise nodes + 1) x (spanwise nodes + 1)]``\n        dynamic_forces (list(np.ndarray)): Forces associated to time derivatives on grid vertices\n          ``[n_surf][3 x (chordwise nodes + 1) x (spanwise nodes + 1)]``\n        u_ext (list(np.ndarray)): Background flow velocity on solid grid nodes\n          ``[n_surf][3 x (chordwise nodes + 1) x (spanwise nodes + 1)]``\n\n        inertial_steady_forces (list(np.ndarray)): Total aerodynamic steady forces in ``G`` FoR ``[n_surf x 6]``\n        body_steady_forces (list(np.ndarray)): Total aerodynamic steady forces in ``A`` FoR ``[n_surf x 6]``\n        inertial_unsteady_forces (list(np.ndarray)): Total aerodynamic unsteady forces in ``G`` FoR ``[n_surf x 6]``\n        body_unsteady_forces (list(np.ndarray)): Total aerodynamic unsteady forces in ``A`` FoR ``[n_surf x 6]``\n\n        postproc_cell (dict): Variables associated to cells to be postprocessed\n        postproc_node (dict): Variables associated to nodes to be postprocessed\n\n        in_global_AFoR (bool): ``True`` if the variables are stored in the global A FoR. ``False`` if they are stored\n          in the local A FoR of each body. Always ``True`` for single-body simulations. Currently not used.\n\n\n    Args:\n        dimensions (np.ndarray): Matrix defining the dimensions of the vortex grid on solid surfaces\n          ``[num_surf x chordwise panels x spanwise panels]``\n    \"\"\"\n    def __init__(self, dimensions):\n        self.ct_dimensions = None\n\n        self.dimensions = dimensions.copy()\n        self.n_surf = self.dimensions.shape[0]\n        # generate placeholder for aero grid zeta coordinates\n        self.zeta = []\n        for i_surf in range(self.n_surf):\n            self.zeta.append(np.zeros((3,\n                                       dimensions[i_surf, 0] + 1,\n                                       dimensions[i_surf, 1] + 1),\n                                      dtype=ct.c_double))\n        self.zeta_dot = []\n        for i_surf in range(self.n_surf):\n            self.zeta_dot.append(np.zeros((3,\n                                           dimensions[i_surf, 0] + 1,\n                                           dimensions[i_surf, 1] + 1),\n                                          dtype=ct.c_double))\n\n        # panel normals\n        self.normals = []\n        for i_surf in range(self.n_surf):\n            self.normals.append(np.zeros((3,\n                                         dimensions[i_surf, 0],\n                                         dimensions[i_surf, 1]),\n                                        dtype=ct.c_double))\n        # panel forces\n        self.forces = []\n        for i_surf in range(self.n_surf):\n            self.forces.append(np.zeros((6,\n                                         dimensions[i_surf, 0] + 1,\n                                         dimensions[i_surf, 1] + 1),\n                                        dtype=ct.c_double))\n        # panel forces\n        self.dynamic_forces = []\n        for i_surf in range(self.n_surf):\n            self.dynamic_forces.append(np.zeros((6,\n                                                 dimensions[i_surf, 0] + 1,\n                                                 dimensions[i_surf, 1] + 1),\n                                                dtype=ct.c_double))\n\n        # placeholder for external velocity\n        self.u_ext = []\n        for i_surf in range(self.n_surf):\n            self.u_ext.append(np.zeros((3,\n                                        dimensions[i_surf, 0] + 1,\n                                        dimensions[i_surf, 1] + 1),\n                                       dtype=ct.c_double))\n\n        # total forces - written by AeroForcesCalculator\n        self.inertial_steady_forces = np.zeros((self.n_surf, 6))\n        self.body_steady_forces = np.zeros((self.n_surf, 6))\n        self.inertial_unsteady_forces = np.zeros((self.n_surf, 6))\n        self.body_unsteady_forces = np.zeros((self.n_surf, 6))\n\n        self.postproc_cell = dict()\n        self.postproc_node = dict()\n\n        # Multibody variables\n        self.in_global_AFoR = True\n\n\n    def copy(self):\n        \"\"\"\n        Returns a copy of a deepcopy of a :class:`~sharpy.utils.datastructures.TimeStepInfo`\n        \"\"\"\n        return self.create_placeholder(TimeStepInfo(self.dimensions))\n\n    def create_placeholder(self, copied):\n        # generate placeholder for aero grid zeta coordinates\n        for i_surf in range(copied.n_surf):\n            copied.zeta[i_surf] = self.zeta[i_surf].astype(dtype=ct.c_double, copy=True, order='C')\n\n        for i_surf in range(copied.n_surf):\n            copied.zeta_dot[i_surf] = self.zeta_dot[i_surf].astype(dtype=ct.c_double, copy=True, order='C')\n\n        # panel normals\n        for i_surf in range(copied.n_surf):\n            copied.normals[i_surf] = self.normals[i_surf].astype(dtype=ct.c_double, copy=True, order='C')\n\n        # panel forces\n        for i_surf in range(copied.n_surf):\n            copied.forces[i_surf] = self.forces[i_surf].astype(dtype=ct.c_double, copy=True, order='C')\n\n        # panel forces\n        for i_surf in range(copied.n_surf):\n            copied.dynamic_forces[i_surf] = self.dynamic_forces[i_surf].astype(dtype=ct.c_double, copy=True, order='C')\n\n        # placeholder for external velocity\n        for i_surf in range(copied.n_surf):\n            copied.u_ext[i_surf] = self.u_ext[i_surf].astype(dtype=ct.c_double, copy=True, order='C')\n\n        # total forces\n        copied.inertial_steady_forces = self.inertial_steady_forces.astype(dtype=ct.c_double, copy=True, order='C')\n        copied.body_steady_forces = self.body_steady_forces.astype(dtype=ct.c_double, copy=True, order='C')\n        copied.inertial_unsteady_forces = self.inertial_unsteady_forces.astype(dtype=ct.c_double, copy=True, order='C')\n        copied.body_unsteady_forces = self.body_unsteady_forces.astype(dtype=ct.c_double, copy=True, order='C')\n        \n        copied.postproc_cell = copy.deepcopy(self.postproc_cell)\n        copied.postproc_node = copy.deepcopy(self.postproc_node)\n\n        return copied\n\n    def generate_ctypes_pointers(self):\n        \"\"\"\n        Generates the pointers to aerodynamic variables used to interface the C++ library ``uvlmlib``\n        \"\"\"\n        self.ct_dimensions = self.dimensions.astype(dtype=ct.c_uint, copy=True)\n\n        n_surf = len(self.dimensions)\n\n        from sharpy.utils.constants import NDIM\n\n        self.ct_zeta_list = []\n        for i_surf in range(self.n_surf):\n            for i_dim in range(NDIM):\n                self.ct_zeta_list.append(self.zeta[i_surf][i_dim, :, :].reshape(-1))\n\n        self.ct_zeta_dot_list = []\n        for i_surf in range(self.n_surf):\n            for i_dim in range(NDIM):\n                self.ct_zeta_dot_list.append(self.zeta_dot[i_surf][i_dim, :, :].reshape(-1))\n\n        self.ct_u_ext_list = []\n        for i_surf in range(self.n_surf):\n            for i_dim in range(NDIM):\n                self.ct_u_ext_list.append(self.u_ext[i_surf][i_dim, :, :].reshape(-1))\n\n        self.ct_normals_list = []\n        for i_surf in range(self.n_surf):\n            for i_dim in range(NDIM):\n                self.ct_normals_list.append(self.normals[i_surf][i_dim, :, :].reshape(-1))\n\n        self.ct_forces_list = []\n        for i_surf in range(self.n_surf):\n            for i_dim in range(NDIM*2):\n                self.ct_forces_list.append(self.forces[i_surf][i_dim, :, :].reshape(-1))\n\n        self.ct_dynamic_forces_list = []\n        for i_surf in range(self.n_surf):\n            for i_dim in range(NDIM*2):\n                self.ct_dynamic_forces_list.append(self.dynamic_forces[i_surf][i_dim, :, :].reshape(-1))\n\n        try:\n            self.postproc_cell['incidence_angle']\n        except KeyError:\n            with_incidence_angle = False\n        else:\n            with_incidence_angle = True\n\n        if with_incidence_angle:\n            self.ct_incidence_list = []\n            for i_surf in range(self.n_surf):\n                self.ct_incidence_list.append(self.postproc_cell['incidence_angle'][i_surf][:, :].reshape(-1))\n\n        self.ct_p_dimensions = ((ct.POINTER(ct.c_uint)*n_surf)\n                                (* np.ctypeslib.as_ctypes(self.ct_dimensions)))\n        self.ct_p_zeta = ((ct.POINTER(ct.c_double)*len(self.ct_zeta_list))\n                          (* [np.ctypeslib.as_ctypes(array) for array in self.ct_zeta_list]))\n        self.ct_p_zeta_dot = ((ct.POINTER(ct.c_double)*len(self.ct_zeta_dot_list))\n                          (* [np.ctypeslib.as_ctypes(array) for array in self.ct_zeta_dot_list]))\n        self.ct_p_u_ext = ((ct.POINTER(ct.c_double)*len(self.ct_u_ext_list))\n                           (* [np.ctypeslib.as_ctypes(array) for array in self.ct_u_ext_list]))\n        self.ct_p_normals = ((ct.POINTER(ct.c_double)*len(self.ct_normals_list))\n                             (* [np.ctypeslib.as_ctypes(array) for array in self.ct_normals_list]))\n        self.ct_p_forces = ((ct.POINTER(ct.c_double)*len(self.ct_forces_list))\n                            (* [np.ctypeslib.as_ctypes(array) for array in self.ct_forces_list]))\n        self.ct_p_dynamic_forces = ((ct.POINTER(ct.c_double)*len(self.ct_dynamic_forces_list))\n                            (* [np.ctypeslib.as_ctypes(array) for array in self.ct_dynamic_forces_list]))\n\n        if with_incidence_angle:\n            self.postproc_cell['incidence_angle_ct_pointer'] = ((ct.POINTER(ct.c_double)*len(self.ct_incidence_list))\n                            (* [np.ctypeslib.as_ctypes(array) for array in self.ct_incidence_list]))\n\n    def remove_ctypes_pointers(self):\n        \"\"\"\n            Removes the pointers to aerodynamic variables used to interface the C++ library ``uvlmlib``\n        \"\"\"\n\n        list_class_attributes = list(self.__dict__.keys()).copy()\n        for name_attribute in list_class_attributes:\n            if \"ct_p_\" in name_attribute:\n                self.__delattr__(name_attribute)\n\n        for k in list(self.postproc_cell.keys()):\n            if 'ct_list' in k:\n                del self.postproc_cell[k]\n            elif 'ct_pointer' in k:\n                del self.postproc_cell[k]\n\n\nclass NonliftingBodyTimeStepInfo(TimeStepInfo):\n    \"\"\"\n    Nonlifting Body Time step class.\n\n    It is the inheritance from ``TimeStepInfo`` and contains the relevant aerodynamic attributes for\n    a single time step of a nonlifting body. All variables should be expressed in ``G``\n    FoR unless otherwise stated.\n\n    Attributes:\n        ct_dimensions: Pointer to ``dimensions`` to interface the C++ library `uvlmlib``\n\n        dimensions (np.ndarray): Matrix defining the dimensions of the vortex grid on solid surfaces\n        ``[num_surf x radial panels x spanwise panels]``\n\n        n_surf (int): Number of aerodynamic surfaces on nonlifting bodies.\n\n        zeta (list(np.ndarray): Location of solid grid vertices\n          ``[n_surf][3 x (radial panel) x (spanwise panel)]``\n        zeta_dot (list(np.ndarray)): Time derivative of ``zeta``\n        normals (list(np.ndarray)): Normal direction to panels at the panel center\n          ``[n_surf][3 x radial panels x spanwise panels]``\n        forces (list(np.ndarray)): Forces not associated to time derivatives on grid vertices\n          ``[n_surf][3 x (radial panels) x (spanwise panels)]``\n        dynamic_forces (list(np.ndarray)): Forces associated to time derivatives on grid vertices\n          ``[n_surf][3 x (radial panels) x (spanwise panels)]``\n\n        u_ext (list(np.ndarray)): Background flow velocity on solid grid panel\n          ``[n_surf][3 x (radial panels) x (spanwise panel + 1)]``\n        sigma (list(np.ndarray)): Source strength associated to solid panels\n          ``[n_surf][3 x radial panel x spanwise panel]``\n        sigma_dot (list(np.ndarray)): Time derivative of ``sigma``\n        pressure_coefficients (list(np.ndarray)): Pressure coefficient associated to solid panels\n          ``[n_surf][radial panel x spanwise panel]``\n\n        inertial_total_forces (list(np.ndarray)): Total aerodynamic forces in ``G`` FoR ``[n_surf x 6]``\n        body_total_forces (list(np.ndarray)): Total aerodynamic forces in ``A`` FoR ``[n_surf x 6]``\n        inertial_steady_forces (list(np.ndarray)): Total aerodynamic steady forces in ``G`` FoR ``[n_surf x 6]``\n        body_steady_forces (list(np.ndarray)): Total aerodynamic steady forces in ``A`` FoR ``[n_surf x 6]``\n        inertial_unsteady_forces (list(np.ndarray)): Total aerodynamic unsteady forces in ``G`` FoR ``[n_surf x 6]``\n        body_unsteady_forces (list(np.ndarray)): Total aerodynamic unsteady forces in ``A`` FoR ``[n_surf x 6]``\n\n        postproc_cell (dict): Variables associated to cells to be postprocessed\n        postproc_node (dict): Variables associated to panel to be postprocessed\n\n        in_global_AFoR (bool): ``True`` if the variables are stored in the global A FoR. ``False`` if they are stored\n          in the local A FoR of each body. Always ``True`` for single-body simulations. Currently not used.\n\n    Args:\n        dimensions (np.ndarray): Matrix defining the dimensions of the vortex grid on solid surfaces\n          ``[num_surf x radial panels x spanwise panels]``\n    \"\"\"\n    def __init__(self, dimensions): #remove dimensions_star as input\n        super().__init__(dimensions)\n\n        # allocate sigma matrices\n        self.sigma = []\n        for i_surf in range(self.n_surf):\n            self.sigma.append(np.zeros((dimensions[i_surf, 0],\n                                        dimensions[i_surf, 1]),\n                                       dtype=ct.c_double))\n\n        self.sigma_dot = []\n        for i_surf in range(self.n_surf):\n            self.sigma_dot.append(np.zeros((dimensions[i_surf, 0],\n                                            dimensions[i_surf, 1]),\n                                           dtype=ct.c_double))\n\n        self.pressure_coefficients = []\n        for i_surf in range(self.n_surf):\n            self.pressure_coefficients.append(np.zeros((dimensions[i_surf, 0],\n                                        dimensions[i_surf, 1]),\n                                        dtype=ct.c_double))\n    def copy(self):\n        \"\"\"\n        Returns a copy of a deepcopy of a :class:`~sharpy.utils.datastructures.AeroTimeStepInfo`\n        \"\"\"\n        return self.create_placeholder(NonliftingBodyTimeStepInfo(self.dimensions))\n\n    def create_placeholder(self, copied):\n        super().create_placeholder(copied)\n\n        # allocate sigma matrices\n        for i_surf in range(copied.n_surf):\n            copied.sigma[i_surf] = self.sigma[i_surf].astype(dtype=ct.c_double, copy=True, order='C')\n\n        for i_surf in range(copied.n_surf):\n            copied.sigma_dot[i_surf] = self.sigma_dot[i_surf].astype(dtype=ct.c_double, copy=True, order='C')\n\n        for i_surf in range(copied.n_surf):\n            copied.pressure_coefficients[i_surf] = self.pressure_coefficients[i_surf].astype(dtype=ct.c_double, copy=True, order='C')\n\n\n        return copied\n\n\n    def generate_ctypes_pointers(self):\n        \"\"\"\n        Generates the pointers to aerodynamic variables used to interface the C++ library ``uvlmlib``\n        \"\"\"\n        super().generate_ctypes_pointers()\n\n        from sharpy.utils.constants import NDIM\n\n        self.ct_sigma_list = []\n        for i_surf in range(self.n_surf):\n            self.ct_sigma_list.append(self.sigma[i_surf][:, :].reshape(-1))\n\n        self.ct_sigma_dot_list = []\n        for i_surf in range(self.n_surf):\n            self.ct_sigma_dot_list.append(self.sigma_dot[i_surf][:, :].reshape(-1))\n\n        self.ct_pressure_coefficients_list = []\n        for i_surf in range(self.n_surf):\n            self.ct_pressure_coefficients_list.append(self.pressure_coefficients[i_surf][:, :].reshape(-1))\n\n        self.ct_p_sigma = ((ct.POINTER(ct.c_double)*len(self.ct_sigma_list))\n                            (* [np.ctypeslib.as_ctypes(array) for array in self.ct_sigma_list]))\n        self.ct_p_sigma_dot = ((ct.POINTER(ct.c_double)*len(self.ct_sigma_dot_list))\n                            (* [np.ctypeslib.as_ctypes(array) for array in self.ct_sigma_list]))\n        self.ct_p_pressure_coefficients = ((ct.POINTER(ct.c_double)*len(self.ct_pressure_coefficients_list))\n                                (* [np.ctypeslib.as_ctypes(array) for array in self.ct_pressure_coefficients_list]))\n\n\n\nclass AeroTimeStepInfo(TimeStepInfo):\n    \"\"\"\n    Aerodynamic Time step class.\n\n    Contains the relevant aerodynamic attributes for a single time step. All variables should be expressed in ``G``\n    FoR unless otherwise stated.\n\n    Attributes:\n        ct_dimensions: Pointer to ``dimensions`` to interface the C++ library `uvlmlib``\n        ct_dimensions_star: Pointer to ``dimensions_star`` to interface the C++ library `uvlmlib``\n\n        dimensions (np.ndarray): Matrix defining the dimensions of the vortex grid on solid surfaces\n          ``[num_surf x chordwise panels x spanwise panels]``\n        dimensions_star (np.ndarray): Matrix defining the dimensions of the vortex grid on wakes\n          ``[num_surf x streamwise panels x spanwise panels]``\n\n        n_surf (int): Number of aerodynamic surfaces on solid bodies. Each aerodynamic surface on solid bodies will\n          have an associted wake.\n\n        zeta (list(np.ndarray): Location of solid grid vertices\n          ``[n_surf][3 x (chordwise nodes + 1) x (spanwise nodes + 1)]``\n        zeta_dot (list(np.ndarray)): Time derivative of ``zeta``\n        normals (list(np.ndarray)): Normal direction to panels at the panel center\n          ``[n_surf][3 x chordwise nodes x spanwise nodes]``\n        forces (list(np.ndarray)): Forces not associated to time derivatives on grid vertices\n          ``[n_surf][3 x (chordwise nodes + 1) x (spanwise nodes + 1)]``\n        dynamic_forces (list(np.ndarray)): Forces associated to time derivatives on grid vertices\n          ``[n_surf][3 x (chordwise nodes + 1) x (spanwise nodes + 1)]``\n        zeta_star (list(np.ndarray): Location of wake grid vertices\n          ``[n_surf][3 x (streamwise nodes + 1) x (spanwise nodes + 1)]``\n        u_ext (list(np.ndarray)): Background flow velocity on solid grid nodes\n          ``[n_surf][3 x (chordwise nodes + 1) x (spanwise nodes + 1)]``\n        u_ext_star (list(np.ndarray)): Background flow velocity on wake grid nodes\n          ``[n_surf][3 x (streamwise nodes + 1) x (spanwise nodes + 1)]``\n        gamma (list(np.ndarray)): Circulation associated to solid panels\n          ``[n_surf][3 x chordwise nodes x spanwise nodes]``\n        gamma_star (list(np.ndarray)): Circulation associated to wake panels\n          ``[n_surf][3 x streamwise nodes x spanwise nodes]``\n        gamma_dot (list(np.ndarray)): Time derivative of ``gamma``\n\n        inertial_total_forces (list(np.ndarray)): Total aerodynamic forces in ``G`` FoR ``[n_surf x 6]``\n        body_total_forces (list(np.ndarray)): Total aerodynamic forces in ``A`` FoR ``[n_surf x 6]``\n        inertial_steady_forces (list(np.ndarray)): Total aerodynamic steady forces in ``G`` FoR ``[n_surf x 6]``\n        body_steady_forces (list(np.ndarray)): Total aerodynamic steady forces in ``A`` FoR ``[n_surf x 6]``\n        inertial_unsteady_forces (list(np.ndarray)): Total aerodynamic unsteady forces in ``G`` FoR ``[n_surf x 6]``\n        body_unsteady_forces (list(np.ndarray)): Total aerodynamic unsteady forces in ``A`` FoR ``[n_surf x 6]``\n\n        postproc_cell (dict): Variables associated to cells to be postprocessed\n        postproc_node (dict): Variables associated to nodes to be postprocessed\n\n        in_global_AFoR (bool): ``True`` if the variables are stored in the global A FoR. ``False`` if they are stored\n          in the local A FoR of each body. Always ``True`` for single-body simulations. Currently not used.\n\n        control_surface_deflection (np.ndarray): Deflection of the control surfaces, in `rad` and if fitted.\n\n    Args:\n        dimensions (np.ndarray): Matrix defining the dimensions of the vortex grid on solid surfaces\n          ``[num_surf x chordwise panels x spanwise panels]``\n        dimensions_star (np.ndarray): Matrix defining the dimensions of the vortex grid on wakes\n          ``[num_surf x streamwise panels x spanwise panels]``\n\n    Note, Ben Preston 27/09/24: forces and dynamic forces are stated to be in ``G`` however were actually\n    determined to be in ``A``. This issue may apply to other parameters, however errors due to this were only apparent\n    in the AeroForcesCalculator postprocessor.\n    \"\"\"\n    def __init__(self, dimensions, dimensions_star):\n        super().__init__(dimensions)\n        self.ct_dimensions_star = None\n\n        self.dimensions_star = dimensions_star.copy()\n\n        # generate placeholder for aero grid zeta_star coordinates\n        self.zeta_star = []\n        for i_surf in range(self.n_surf):\n            self.zeta_star.append(np.zeros((3,\n                                            dimensions_star[i_surf, 0] + 1,\n                                            dimensions_star[i_surf, 1] + 1),\n                                           dtype=ct.c_double))\n\n        self.u_ext_star = []\n        for i_surf in range(self.n_surf):\n            self.u_ext_star.append(np.zeros((3,\n                                             dimensions_star[i_surf, 0] + 1,\n                                             dimensions_star[i_surf, 1] + 1),\n                                            dtype=ct.c_double))\n\n        # allocate gamma and gamma star matrices\n        self.gamma = []\n        for i_surf in range(self.n_surf):\n            self.gamma.append(np.zeros((dimensions[i_surf, 0],\n                                        dimensions[i_surf, 1]),\n                                       dtype=ct.c_double))\n\n        self.gamma_star = []\n        for i_surf in range(self.n_surf):\n            self.gamma_star.append(np.zeros((dimensions_star[i_surf, 0],\n                                             dimensions_star[i_surf, 1]),\n                                            dtype=ct.c_double))\n\n        self.gamma_dot = []\n        for i_surf in range(self.n_surf):\n            self.gamma_dot.append(np.zeros((dimensions[i_surf, 0],\n                                            dimensions[i_surf, 1]),\n                                           dtype=ct.c_double))\n\n        # Distance from the trailing edge of the wake vertices\n        self.dist_to_orig = []\n        for i_surf in range(self.n_surf):\n            self.dist_to_orig.append(np.zeros((dimensions_star[i_surf, 0] + 1,\n                                               dimensions_star[i_surf, 1] + 1),\n                                               dtype=ct.c_double))\n\n        self.wake_conv_vel = []\n        for i_surf in range(self.n_surf):\n            self.wake_conv_vel.append(np.zeros((dimensions_star[i_surf, 0],\n                                            dimensions_star[i_surf, 1]),\n                                           dtype=ct.c_double))\n\n        # Junction handling\n        self.flag_zeta_phantom = np.zeros((1, self.n_surf),\n                                            dtype=ct.c_int)\n        self.control_surface_deflection = np.array([])\n\n    def copy(self):\n        return self.create_placeholder(AeroTimeStepInfo(self.dimensions, self.dimensions_star))\n\n    def create_placeholder(self, copied):\n        super().create_placeholder(copied)\n        # generate placeholder for aero grid zeta_star coordinates\n        for i_surf in range(copied.n_surf):\n            copied.zeta_star[i_surf] = self.zeta_star[i_surf].astype(dtype=ct.c_double, copy=True, order='C')\n\n        # placeholder for external velocity\n        for i_surf in range(copied.n_surf):\n            copied.u_ext_star[i_surf] = self.u_ext_star[i_surf].astype(dtype=ct.c_double, copy=True, order='C')\n\n        # allocate gamma and gamma star matrices\n        for i_surf in range(copied.n_surf):\n            copied.gamma[i_surf] = self.gamma[i_surf].astype(dtype=ct.c_double, copy=True, order='C')\n\n        for i_surf in range(copied.n_surf):\n            copied.gamma_dot[i_surf] = self.gamma_dot[i_surf].astype(dtype=ct.c_double, copy=True, order='C')\n\n        for i_surf in range(copied.n_surf):\n            copied.gamma_star[i_surf] = self.gamma_star[i_surf].astype(dtype=ct.c_double, copy=True, order='C')\n\n        for i_surf in range(copied.n_surf):\n            copied.dist_to_orig[i_surf] = self.dist_to_orig[i_surf].astype(dtype=ct.c_double, copy=True, order='C')\n\n        for i_surf in range(copied.n_surf):\n            copied.wake_conv_vel[i_surf] = self.wake_conv_vel[i_surf].astype(dtype=ct.c_double, copy=True, order='C')\n\n        copied.control_surface_deflection = self.control_surface_deflection.astype(dtype=ct.c_double, copy=True)\n\n        # phantom panel flags\n        copied.flag_zeta_phantom = self.flag_zeta_phantom.astype(dtype=ct.c_int, copy=True, order='C')\n        \n        return copied\n\n    def generate_ctypes_pointers(self):\n        from sharpy.utils.constants import NDIM\n        n_surf = len(self.dimensions)\n        super().generate_ctypes_pointers()\n        self.ct_dimensions_star = self.dimensions_star.astype(dtype=ct.c_uint, copy=True)\n\n        self.ct_zeta_star_list = []\n        for i_surf in range(self.n_surf):\n            for i_dim in range(NDIM):\n                self.ct_zeta_star_list.append(self.zeta_star[i_surf][i_dim, :, :].reshape(-1))\n\n        self.ct_u_ext_star_list = []\n        for i_surf in range(self.n_surf):\n            for i_dim in range(NDIM):\n                self.ct_u_ext_star_list.append(self.u_ext_star[i_surf][i_dim, :, :].reshape(-1))\n\n        self.ct_gamma_list = []\n        for i_surf in range(self.n_surf):\n            self.ct_gamma_list.append(self.gamma[i_surf][:, :].reshape(-1))\n\n        self.ct_gamma_dot_list = []\n        for i_surf in range(self.n_surf):\n            self.ct_gamma_dot_list.append(self.gamma_dot[i_surf][:, :].reshape(-1))\n\n        self.ct_gamma_star_list = []\n        for i_surf in range(self.n_surf):\n            self.ct_gamma_star_list.append(self.gamma_star[i_surf][:, :].reshape(-1))\n\n        self.ct_dist_to_orig_list = []\n        for i_surf in range(self.n_surf):\n            self.ct_dist_to_orig_list.append(self.dist_to_orig[i_surf][:, :].reshape(-1))\n\n        self.ct_wake_conv_vel_list = []\n        for i_surf in range(self.n_surf):\n            self.ct_wake_conv_vel_list.append(self.wake_conv_vel[i_surf][:, :].reshape(-1))\n        self.ct_flag_zeta_phantom_list = self.flag_zeta_phantom[:].reshape(-1)\n \n\n\n        self.ct_p_dimensions_star = ((ct.POINTER(ct.c_uint)*n_surf)\n                                     (* np.ctypeslib.as_ctypes(self.ct_dimensions_star)))\n        self.ct_p_zeta_star = ((ct.POINTER(ct.c_double)*len(self.ct_zeta_star_list))\n                               (* [np.ctypeslib.as_ctypes(array) for array in self.ct_zeta_star_list]))\n        self.ct_p_u_ext_star = ((ct.POINTER(ct.c_double)*len(self.ct_u_ext_star_list))\n                           (* [np.ctypeslib.as_ctypes(array) for array in self.ct_u_ext_star_list]))\n        self.ct_p_gamma = ((ct.POINTER(ct.c_double)*len(self.ct_gamma_list))\n                           (* [np.ctypeslib.as_ctypes(array) for array in self.ct_gamma_list]))\n        self.ct_p_gamma_dot = ((ct.POINTER(ct.c_double)*len(self.ct_gamma_dot_list))\n                               (* [np.ctypeslib.as_ctypes(array) for array in self.ct_gamma_dot_list]))\n        self.ct_p_gamma_star = ((ct.POINTER(ct.c_double)*len(self.ct_gamma_star_list))\n                                (* [np.ctypeslib.as_ctypes(array) for array in self.ct_gamma_star_list]))\n        self.ct_p_dist_to_orig = ((ct.POINTER(ct.c_double)*len(self.ct_dist_to_orig_list))\n                           (* [np.ctypeslib.as_ctypes(array) for array in self.ct_dist_to_orig_list]))\n        self.ct_p_wake_conv_vel = ((ct.POINTER(ct.c_double)*len(self.ct_wake_conv_vel_list))\n                           (* [np.ctypeslib.as_ctypes(array) for array in self.ct_wake_conv_vel_list]))\n        self.ct_p_flag_zeta_phantom = np.ctypeslib.as_ctypes(self.ct_flag_zeta_phantom_list)\n \n\n\ndef init_matrix_structure(dimensions, with_dim_dimension, added_size=0):\n    matrix = []\n    for i_surf in range(len(dimensions)):\n        if with_dim_dimension:\n            matrix.append(np.zeros((3,\n                                    dimensions[i_surf, 0] + added_size,\n                                    dimensions[i_surf, 1] + added_size),\n                                   dtype=ct.c_double))\n        else:\n            matrix.append(np.zeros((dimensions[i_surf, 0] + added_size,\n                                    dimensions[i_surf, 1] + added_size),\n                                   dtype=ct.c_double))\n    return matrix\n\n\ndef standalone_ctypes_pointer(matrix):\n    ct_list = []\n    n_surf = len(matrix)\n\n    if len(matrix[0].shape) == 2:\n        # [i_surf][m, n], like gamma\n        for i_surf in range(n_surf):\n            ct_list.append(matrix[i_surf][:, :].reshape(-1))\n\n    elif len(matrix[0].shape) == 3:\n        # [i_surf][i_dim, m, n], like zeta\n        for i_surf in range(n_surf):\n            n_dim = matrix[i_surf].shape[0]\n            for i_dim in range(n_dim):\n                ct_list.append(matrix[i_surf][i_dim, :, :].reshape(-1))\n\n    ct_pointer = ((ct.POINTER(ct.c_double)*len(ct_list))\n                  (* [np.ctypeslib.as_ctypes(array) for array in ct_list]))\n\n    return ct_list, ct_pointer\n\n\nclass StructTimeStepInfo(object):\n    \"\"\"\n    Structural Time Step Class.\n\n    Contains the relevant attributes for the structural description of a single time step.\n\n    Attributes:\n        in_global_AFoR (bool): ``True`` if the variables are stored in the global A FoR. ``False'' if they are stored\n          in the local A FoR of each body. Always ``True`` for single-body simulations\n\n        num_node (int): Number of nodes\n        num_elem (int): Number of elements\n        num_node_elem (int): Number of nodes per element\n\n        pos (np.ndarray): Displacements. ``[num_node x 3]`` containing the vector of ``x``, ``y`` and ``z``\n          coordinates (in ``A`` frame) of the beam nodes.\n        pos_dot (np.ndarray): Velocities. Time derivative of ``pos``.\n        pos_ddot (np.ndarray): Accelerations. Time derivative of ``pos_dot``\n\n        psi (np.ndarray): Cartesian Rotation Vector. ``[num_elem x num_node_elem x 3]`` CRV for each node in each\n          element.\n        psi_dot (np.ndarray): Time derivative of ``psi``.\n        psi_ddot (np.ndarray): Time derivative of ``psi_dot``.\n\n        quat (np.ndarray): Quaternion expressing the transformation between the ``A`` and ``G`` frames.\n        for_pos (np.ndarray): ``A`` frame of reference position (with respect to the `G`` frame of reference).\n        for_vel (np.ndarray): ``A`` frame of reference velocity. Expressed in A FoR\n        for_acc (np.ndarray): ``A`` frame of reference acceleration. Expressed in A FoR\n\n        steady_applied_forces (np.ndarray): Forces applied to the structure not associated to time derivatives\n          ``[num_nodes x 6]``. Expressed in B FoR\n        unsteady_applied_forces (np.ndarray): Forces applied to the structure associated to time derivatives\n          ``[num_node x 6]``. Expressed in B FoR\n        runtime_steady_forces (np.ndarray): Steady forces generated at runtime through runtime generators\n          ``[num_node x 6]``. Expressed in B FoR\n        runtime_unsteady_forces (np.ndarray): Unsteady forces generated at runtime through runtime generators\n          ``[num_node x 6]``. Expressed in B FoR\n        gravity_forces (np.ndarray): Gravity forces at nodes ``[num_node x 6]``. Expressed in A FoR\n\n        total_gravity_forces (np.ndarray): Total gravity forces on the structure ``[6]``. Expressed in A FoR\n        total_forces (np.ndarray): Total forces applied to the structure ``[6]``. Expressed in A FoR\n\n        q (np.ndarray): State vector associated to the structural system of equations ``[num_dof + 10]``\n        dqdt (np.ndarray): Time derivative of ``q``\n        dqddt (np.ndarray): Time derivative of ``dqdt``\n\n        postproc_cell (dict): Variables associated to cells to be postprocessed\n        postproc_node (dict): Variables associated to nodes to be postprocessed\n\n        psi_local (np.ndarray): Cartesian Rotation Vector for each node in each element in local FoR\n        psi_dot_local (np.ndarray): Time derivative of ``psi`` in the local FoR\n        mb_FoR_pos (np.ndarray): Position of the local A FoR of each body ``[num_bodies x 6]``\n        mb_FoR_vel (np.ndarray): Velocity of the local A FoR of each body ``[num_bodies x 6]``\n        mb_FoR_acc (np.ndarray): Acceleration of the local A FoR of each body ``[num_bodies x 6]``\n        mb_quat (np.ndarray): Quaternion of the local A FoR of each body ``[num_bodies x 4]``\n        mb_dquatdt (np.ndarray): Time derivative of ``mb_quat``\n\n        forces_constraints_nodes (np.ndarray): Forces associated to Lagrange Constraints on nodes ``[num_node x 6]``\n        forces_constraints_FoR (np.ndarray): Forces associated to Lagrange Contraints on frames of reference\n          ``[num_bodies x 10]``\n\n        mb_dict (np.ndarray): Dictionary with the multibody information. It comes from the file ``case.mb.h5``\n    \"\"\"\n    def __init__(self, num_node, num_elem, num_node_elem=3, num_dof=None, num_bodies=1):\n        self.in_global_AFoR = True\n        self.num_node = num_node\n        self.num_elem = num_elem\n        self.num_node_elem = num_node_elem\n        # generate placeholder for node coordinates\n        self.pos = np.zeros((self.num_node, 3), dtype=ct.c_double, order='F')\n        self.pos_dot = np.zeros((self.num_node, 3), dtype=ct.c_double, order='F')\n        self.pos_ddot = np.zeros((self.num_node, 3), dtype=ct.c_double, order='F')\n\n        # placeholder for CRV\n        self.psi = np.zeros((self.num_elem, num_node_elem, 3), dtype=ct.c_double, order='F')\n        self.psi_dot = np.zeros((self.num_elem, num_node_elem, 3), dtype=ct.c_double, order='F')\n        self.psi_ddot = np.zeros((self.num_elem, num_node_elem, 3), dtype=ct.c_double, order='F')\n\n        # FoR data\n        self.quat = np.array([1., 0, 0, 0], dtype=ct.c_double, order='F')\n        self.for_pos = np.zeros((6,), dtype=ct.c_double, order='F')\n        self.for_vel = np.zeros((6,), dtype=ct.c_double, order='F')\n        self.for_acc = np.zeros((6,), dtype=ct.c_double, order='F')\n\n        self.steady_applied_forces = np.zeros((self.num_node, 6), dtype=ct.c_double, order='F')\n        self.unsteady_applied_forces = np.zeros((self.num_node, 6), dtype=ct.c_double, order='F')\n        self.runtime_steady_forces = np.zeros((self.num_node, 6), dtype=ct.c_double, order='F')\n        self.runtime_unsteady_forces = np.zeros((self.num_node, 6), dtype=ct.c_double, order='F')\n        self.gravity_forces = np.zeros((self.num_node, 6), dtype=ct.c_double, order='F')\n        self.total_gravity_forces = np.zeros((6,), dtype=ct.c_double, order='F')\n        self.total_forces = np.zeros((6,), dtype=ct.c_double, order='F')\n\n        if num_dof is None:\n            # For backwards compatibility\n            num_dof = (self.num_node.value - 1)*6\n        self.q = np.zeros((num_dof.value + 6 + 4,), dtype=ct.c_double, order='F')\n        self.dqdt = np.zeros((num_dof.value + 6 + 4,), dtype=ct.c_double, order='F')\n        self.dqddt = np.zeros((num_dof.value + 6 + 4,), dtype=ct.c_double, order='F')\n\n        self.postproc_cell = dict()\n        self.postproc_node = dict()\n\n        # Multibody\n        self.psi_local = np.zeros((self.num_elem, num_node_elem, 3), dtype=ct.c_double, order='F')\n        self.psi_dot_local = np.zeros((self.num_elem, num_node_elem, 3), dtype=ct.c_double, order='F')\n        self.mb_FoR_pos = np.zeros((num_bodies,6), dtype=ct.c_double, order='F')\n        self.mb_FoR_vel = np.zeros((num_bodies,6), dtype=ct.c_double, order='F')\n        self.mb_FoR_acc = np.zeros((num_bodies,6), dtype=ct.c_double, order='F')\n        self.mb_quat = np.zeros((num_bodies,4), dtype=ct.c_double, order='F')\n        self.mb_dquatdt = np.zeros((num_bodies, 4), dtype=ct.c_double, order='F')\n        self.forces_constraints_nodes = np.zeros((self.num_node, 6), dtype=ct.c_double, order='F')\n        self.forces_constraints_FoR = np.zeros((num_bodies, 10), dtype=ct.c_double, order='F')\n        self.mb_dict = None\n        self.mb_prescribed_dict = None\n\n    def copy(self):\n        \"\"\"\n        Returns a copy of a deepcopy of a :class:`~sharpy.utils.datastructures.StructTimeStepInfo`\n        \"\"\"\n        copied = StructTimeStepInfo(self.num_node, self.num_elem, self.num_node_elem, ct.c_int(len(self.q)-10),\n                                    self.mb_quat.shape[0])\n\n        copied.in_global_AFoR = self.in_global_AFoR\n        copied.num_node = self.num_node\n        copied.num_elem = self.num_elem\n        copied.num_node_elem = self.num_node_elem\n\n        # generate placeholder for node coordinates\n        copied.pos = self.pos.astype(dtype=ct.c_double, order='F', copy=True)\n        copied.pos_dot = self.pos_dot.astype(dtype=ct.c_double, order='F', copy=True)\n        copied.pos_ddot = self.pos_ddot.astype(dtype=ct.c_double, order='F', copy=True)\n\n        # placeholder for CRV\n        copied.psi = self.psi.astype(dtype=ct.c_double, order='F', copy=True)\n        copied.psi_dot = self.psi_dot.astype(dtype=ct.c_double, order='F', copy=True)\n        copied.psi_ddot = self.psi_ddot.astype(dtype=ct.c_double, order='F', copy=True)\n\n        # FoR data\n        copied.quat = self.quat.astype(dtype=ct.c_double, order='F', copy=True)\n        copied.for_pos = self.for_pos.astype(dtype=ct.c_double, order='F', copy=True)\n        copied.for_vel = self.for_vel.astype(dtype=ct.c_double, order='F', copy=True)\n        copied.for_acc = self.for_acc.astype(dtype=ct.c_double, order='F', copy=True)\n\n        copied.steady_applied_forces = self.steady_applied_forces.astype(dtype=ct.c_double, order='F', copy=True)\n        copied.unsteady_applied_forces = self.unsteady_applied_forces.astype(dtype=ct.c_double, order='F', copy=True)\n        copied.runtime_steady_forces = self.runtime_steady_forces.astype(dtype=ct.c_double, order='F', copy=True)\n        copied.runtime_unsteady_forces = self.runtime_unsteady_forces.astype(dtype=ct.c_double, order='F', copy=True)\n        copied.gravity_forces = self.gravity_forces.astype(dtype=ct.c_double, order='F', copy=True)\n        copied.total_gravity_forces = self.total_gravity_forces.astype(dtype=ct.c_double, order='F', copy=True)\n        copied.total_forces = self.total_forces.astype(dtype=ct.c_double, order='F', copy=True)\n\n        copied.q = self.q.astype(dtype=ct.c_double, order='F', copy=True)\n        copied.dqdt = self.dqdt.astype(dtype=ct.c_double, order='F', copy=True)\n        copied.dqddt = self.dqddt.astype(dtype=ct.c_double, order='F', copy=True)\n\n        copied.postproc_cell = copy.deepcopy(self.postproc_cell)\n        copied.postproc_node = copy.deepcopy(self.postproc_node)\n\n        copied.psi_local = self.psi_local.astype(dtype=ct.c_double, order='F', copy=True)\n        copied.psi_dot_local = self.psi_dot_local.astype(dtype=ct.c_double, order='F', copy=True)\n        copied.mb_FoR_pos = self.mb_FoR_pos.astype(dtype=ct.c_double, order='F', copy=True)\n        copied.mb_FoR_vel = self.mb_FoR_vel.astype(dtype=ct.c_double, order='F', copy=True)\n        copied.mb_FoR_acc = self.mb_FoR_acc.astype(dtype=ct.c_double, order='F', copy=True)\n        copied.mb_quat = self.mb_quat.astype(dtype=ct.c_double, order='F', copy=True)\n        copied.mb_dquatdt = self.mb_dquatdt.astype(dtype=ct.c_double, order='F', copy=True)\n        copied.forces_constraints_nodes = self.forces_constraints_nodes.astype(dtype=ct.c_double, order='F', copy=True)\n        copied.forces_constraints_FoR = self.forces_constraints_FoR.astype(dtype=ct.c_double, order='F', copy=True)\n\n        copied.mb_dict = copy.deepcopy(self.mb_dict)\n        copied.mb_prescribed_dict = copy.deepcopy(self.mb_prescribed_dict)\n\n        return copied\n\n    def glob_pos(self, include_rbm=True):\n        \"\"\"\n        Returns the position of the nodes in ``G`` FoR\n        \"\"\"\n        coords = self.pos.copy()\n        c = self.cga()\n        for i_node in range(self.num_node):\n            coords[i_node, :] = np.dot(c, coords[i_node, :])\n            if include_rbm:\n                coords[i_node, :] += self.for_pos[0:3]\n        return coords\n\n    def cga(self):\n        return algebra.quat2rotation(self.quat)\n\n    def cag(self):\n        return self.cga().T\n\n    def euler_angles(self):\n        \"\"\"\n        Returns the 3 Euler angles (roll, pitch, yaw) for a given time step.\n\n        :returns: `np.array` (roll, pitch, yaw) in radians.\n        \"\"\"\n\n        return algebra.quat2euler(self.quat)\n\n\n    def get_body(self, beam, num_dof_ibody, ibody):\n        \"\"\"\n        get_body\n\n        Extract the body number ``ibody`` from a multibody system\n\n        This function returns a :class:`~sharpy.utils.datastructures.StructTimeStepInfo` class (``ibody_StructTimeStepInfo``)\n        that only includes the body number ``ibody`` of the original multibody system ``self``\n\n        Args:\n            beam(:class:`~sharpy.structure.models.beam.Beam`): beam information of the multibody system\n            num_dof_ibody (int): Number of degrees of freedom associated to the ``ibody``\n            ibody(int): body number to be extracted\n\n        Returns:\n        \tStructTimeStepInfo: timestep information of the isolated body\n        \"\"\"\n\n        # Define the nodes and elements belonging to the body\n        ibody_elems, ibody_nodes = mb.get_elems_nodes_list(beam, ibody)\n\n        ibody_num_node = len(ibody_nodes)\n        ibody_num_elem = len(ibody_elems)\n\n        ibody_first_dof = 0\n        for index_body in range(ibody - 1):\n            aux_elems, aux_nodes = mb.get_elems_nodes_list(beam, index_body)\n            ibody_first_dof += np.sum(beam.vdof[aux_nodes] > -1)*6\n\n        # Initialize the new StructTimeStepInfo\n        ibody_StructTimeStepInfo = StructTimeStepInfo(ibody_num_node, ibody_num_elem, self.num_node_elem, num_dof = num_dof_ibody, num_bodies = beam.num_bodies)\n\n        # Assign all the variables\n        ibody_StructTimeStepInfo.quat = self.mb_quat[ibody, :].astype(dtype=ct.c_double, order='F', copy=True)\n        ibody_StructTimeStepInfo.for_pos = self.mb_FoR_pos[ibody, :].astype(dtype=ct.c_double, order='F', copy=True)\n        ibody_StructTimeStepInfo.for_vel = self.mb_FoR_vel[ibody, :]\n        ibody_StructTimeStepInfo.for_acc = self.mb_FoR_acc[ibody, :]\n\n        ibody_StructTimeStepInfo.pos = self.pos[ibody_nodes,:].astype(dtype=ct.c_double, order='F', copy=True)\n        ibody_StructTimeStepInfo.pos_dot = self.pos_dot[ibody_nodes,:].astype(dtype=ct.c_double, order='F', copy=True)\n        ibody_StructTimeStepInfo.pos_ddot = self.pos_ddot[ibody_nodes,:].astype(dtype=ct.c_double, order='F', copy=True)\n\n        ibody_StructTimeStepInfo.psi = self.psi[ibody_elems,:,:].astype(dtype=ct.c_double, order='F', copy=True)\n        ibody_StructTimeStepInfo.psi_local = self.psi_local[ibody_elems,:,:].astype(dtype=ct.c_double, order='F', copy=True)\n        ibody_StructTimeStepInfo.psi_dot = self.psi_dot[ibody_elems,:,:].astype(dtype=ct.c_double, order='F', copy=True)\n        ibody_StructTimeStepInfo.psi_dot_local = self.psi_dot_local[ibody_elems,:,:].astype(dtype=ct.c_double, order='F', copy=True)\n        ibody_StructTimeStepInfo.psi_ddot = self.psi_ddot[ibody_elems,:,:].astype(dtype=ct.c_double, order='F', copy=True)\n\n        ibody_StructTimeStepInfo.steady_applied_forces = self.steady_applied_forces[ibody_nodes,:].astype(dtype=ct.c_double, order='F', copy=True)\n        ibody_StructTimeStepInfo.unsteady_applied_forces = self.unsteady_applied_forces[ibody_nodes,:].astype(dtype=ct.c_double, order='F', copy=True)\n        ibody_StructTimeStepInfo.runtime_steady_forces = self.runtime_steady_forces[ibody_nodes,:].astype(dtype=ct.c_double, order='F', copy=True)\n        ibody_StructTimeStepInfo.runtime_unsteady_forces = self.runtime_unsteady_forces[ibody_nodes,:].astype(dtype=ct.c_double, order='F', copy=True)\n        ibody_StructTimeStepInfo.gravity_forces = self.gravity_forces[ibody_nodes,:].astype(dtype=ct.c_double, order='F', copy=True)\n        ibody_StructTimeStepInfo.total_gravity_forces = self.total_gravity_forces.astype(dtype=ct.c_double, order='F', copy=True)\n\n        ibody_StructTimeStepInfo.q[0:num_dof_ibody.value] = self.q[ibody_first_dof:ibody_first_dof+num_dof_ibody.value].astype(dtype=ct.c_double, order='F', copy=True)\n        ibody_StructTimeStepInfo.dqdt[0:num_dof_ibody.value] = self.dqdt[ibody_first_dof:ibody_first_dof+num_dof_ibody.value].astype(dtype=ct.c_double, order='F', copy=True)\n        ibody_StructTimeStepInfo.dqddt[0:num_dof_ibody.value] = self.dqddt[ibody_first_dof:ibody_first_dof+num_dof_ibody.value].astype(dtype=ct.c_double, order='F', copy=True)\n\n        ibody_StructTimeStepInfo.dqdt[-10:-4] = ibody_StructTimeStepInfo.for_vel.astype(dtype=ct.c_double, order='F', copy=True)\n        ibody_StructTimeStepInfo.dqddt[-10:-4] = ibody_StructTimeStepInfo.for_acc.astype(dtype=ct.c_double, order='F', copy=True)\n        ibody_StructTimeStepInfo.dqdt[-4:] = self.quat.astype(dtype=ct.c_double, order='F', copy=True)\n        ibody_StructTimeStepInfo.dqddt[-4:] = self.mb_dquatdt[ibody, :].astype(dtype=ct.c_double, order='F', copy=True)\n        ibody_StructTimeStepInfo.mb_dquatdt[ibody, :] = self.mb_dquatdt[ibody, :].astype(dtype=ct.c_double, order='F', copy=True)\n\n        ibody_StructTimeStepInfo.mb_quat = None\n        ibody_StructTimeStepInfo.mb_FoR_pos = None\n        ibody_StructTimeStepInfo.mb_FoR_vel = None\n        ibody_StructTimeStepInfo.mb_FoR_acc = None\n\n        return ibody_StructTimeStepInfo\n\n    def compute_psi_local_AFoR(self, for0_pos, for0_vel, quat0):\n        \"\"\"\n        compute_psi_local_AFoR\n\n        Compute psi and psi_dot in the local A frame of reference\n\n        Args:\n            for0_pos (np.ndarray): Position of the global A FoR\n            for0_vel (np.ndarray): Velocity of the global A FoR\n            quat0 (np.ndarray): Quaternion of the global A FoR\n        \"\"\"\n\n        # Define the rotation matrices between the different FoR\n        CAslaveG = algebra.quat2rotation(self.quat).T\n        CGAmaster = algebra.quat2rotation(quat0)\n        Csm = np.dot(CAslaveG, CGAmaster)\n\n        for ielem in range(self.psi.shape[0]):\n            for inode in range(3):\n                self.psi_local[ielem, inode, :] = algebra.rotation2crv(np.dot(Csm,algebra.crv2rotation(self.psi[ielem,inode,:])))\n                self.psi_dot_local[ielem, inode, :] = np.zeros((3))\n\n    def change_to_local_AFoR(self, for0_pos, for0_vel, quat0):\n        \"\"\"\n        change_to_local_AFoR\n\n        Reference a :class:`~sharpy.utils.datastructures.StructTimeStepInfo` to the local A frame of reference\n\n        Args:\n            for0_pos (np.ndarray): Position of the global A FoR\n            for0_vel (np.ndarray): Velocity of the global A FoR\n            quat0 (np.ndarray): Quaternion of the global A FoR\n        \"\"\"\n\n        # Define the rotation matrices between the different FoR\n        CAslaveG = algebra.quat2rotation(self.quat).T\n        CGAmaster = algebra.quat2rotation(quat0)\n        Csm = np.dot(CAslaveG, CGAmaster)\n\n        # Modify position\n        for inode in range(self.pos.shape[0]):\n            vel_master = (self.pos_dot[inode,:] +\n                          for0_vel[0:3] +\n                          algebra.cross3(for0_vel[3:6], self.pos[inode, :]))\n            self.pos[inode, :] = np.dot(Csm,self.pos[inode,:]) + np.dot(CAslaveG, for0_pos[0:3] - self.for_pos[0:3])\n            self.pos_dot[inode, :] = (np.dot(Csm, vel_master) -\n                                     self.for_vel[0:3] -\n                                     algebra.cross3(self.for_vel[3:6], self.pos[inode,:]))\n\n            self.gravity_forces[inode, 0:3] = np.dot(Csm, self.gravity_forces[inode, 0:3])\n            self.gravity_forces[inode, 3:6] = np.dot(Csm, self.gravity_forces[inode, 3:6])\n\n        # Modify local rotations\n        for ielem in range(self.psi.shape[0]):\n            for inode in range(3):\n                self.psi[ielem, inode, :] = self.psi_local[ielem,inode,:].copy()\n                self.psi_dot[ielem, inode, :] = self.psi_dot_local[ielem, inode, :].copy()\n\n\n    def change_to_global_AFoR(self, for0_pos, for0_vel, quat0):\n        \"\"\"\n        Reference a :class:`~sharpy.utils.datastructures.StructTimeStepInfo` to the global A frame of reference\n\n        Args:\n            for0_pos (np.ndarray): Position of the global A FoR\n            for0_vel (np.ndarray): Velocity of the global A FoR\n            quat0 (np.ndarray): Quaternion of the global A FoR\n        \"\"\"\n\n        # Define the rotation matrices between the different FoR\n        CGAslave = algebra.quat2rotation(self.quat)\n        CAmasterG = algebra.quat2rotation(quat0).T\n        Cms = np.dot(CAmasterG, CGAslave)\n\n        for inode in range(self.pos.shape[0]):\n            vel_slave = (self.pos_dot[inode, :] +\n                         self.for_vel[0:3] +\n                         algebra.cross3(self.for_vel[3:6], self.pos[inode, :]))\n            self.pos[inode, :] = np.dot(Cms, self.pos[inode,:]) + np.dot(CAmasterG, self.for_pos[0:3] - for0_pos[0:3])\n            self.pos_dot[inode, :] = (np.dot(Cms, vel_slave) -\n                                      for0_vel[0:3] -\n                                      algebra.cross3(for0_vel[3:6], self.pos[inode, :]))\n\n            self.gravity_forces[inode, 0:3] = np.dot(Cms, self.gravity_forces[inode, 0:3])\n            self.gravity_forces[inode, 3:6] = np.dot(Cms, self.gravity_forces[inode, 3:6])\n\n        for ielem in range(self.psi.shape[0]):\n            for inode in range(3):\n                self.psi_local[ielem, inode, :] = self.psi[ielem, inode, :].copy() # Copy here the result from the structural computation\n                self.psi_dot_local[ielem, inode, :] = self.psi_dot[ielem, inode, :].copy() # Copy here the result from the structural computation\n\n                # psi_slave = self.psi[ielem, inode, :] + np.zeros((3,),)\n                self.psi[ielem, inode, :] = algebra.rotation2crv(np.dot(Cms,algebra.crv2rotation(self.psi[ielem,inode,:])))\n\n                # Convert psi_dot_local to psi_dot to be used by the rest of the code\n                psi_master = self.psi[ielem,inode,:] + np.zeros((3,),)\n                cbam = algebra.crv2rotation(psi_master).T\n                cbas = algebra.crv2rotation(self.psi_local[ielem, inode, :]).T\n                ts = algebra.crv2tan(self.psi_local[ielem, inode, :])\n                inv_tm = np.linalg.inv(algebra.crv2tan(psi_master))\n\n                self.psi_dot[ielem, inode, :] = np.dot(inv_tm, (np.dot(ts, self.psi_dot_local[ielem, inode, :]) +\n                                                                np.dot(cbas, self.for_vel[3:6]) -\n                                                                np.dot(cbam, for0_vel[3:6])))\n\n    def nodal_b_for_2_a_for(self, nodal, beam, filter=np.array([True]*6), ibody=None):\n        \"\"\"\n        Projects a nodal variable from the local, body-attached frame (B) to the reference A frame.\n\n        Args:\n            nodal (np.array): Nodal variable of size ``(num_node, 6)``\n            beam (sharpy.datastructures.StructTimeStepInfo): beam info.\n            filter (np.array): optional argument that filters and does not convert a specific degree of\n              freedom. Defaults to ``np.array([True, True, True, True, True, True])``.\n\n        Returns:\n            np.array: the ``nodal`` argument projected onto the reference ``A`` frame.\n        \"\"\"\n        nodal_a = np.zeros_like(nodal)\n        for i_node in range(self.num_node):\n            # get master elem and i_local_node\n            i_master_elem, i_local_node = beam.node_master_elem[i_node, :]\n            if ((ibody is None) or (beam.body_number[i_master_elem] == ibody)):\n                crv = self.psi[i_master_elem, i_local_node, :]\n                cab = algebra.crv2rotation(crv)\n                nodal_a[i_node, 0:3] = np.dot(cab, nodal[i_node, 0:3])\n                nodal_a[i_node, 3:6] = np.dot(cab, nodal[i_node, 3:6])\n                nodal_a *= filter\n\n        return nodal_a\n\n    def nodal_type_b_for_2_a_for(self, beam,\n                            force_type=['steady', 'unsteady'],\n                            filter=np.array([True]*6),\n                            ibody=None):\n        forces_output = []\n        for ft in force_type:\n            if ft == 'steady':\n                fb = self.steady_applied_forces\n            elif ft == 'unsteady':\n                fb = self.unsteady_applied_forces\n\n            forces_output.append(self.nodal_b_for_2_a_for(fb, beam, filter=filter, ibody=ibody))\n\n        return forces_output\n\n\n    def extract_resultants(self, beam, force_type=['steady', 'unsteady', 'grav'], ibody=None):\n\n        forces_output = []\n        for ft in force_type:\n            totals = np.zeros((6))\n            if ft == 'steady':\n                fa = self.nodal_type_b_for_2_a_for(beam, force_type=['steady'], ibody=ibody)[0]\n            elif ft == 'grav':\n                fa = self.gravity_forces.copy()\n            elif ft == 'unsteady':\n                fa = self.nodal_type_b_for_2_a_for(beam, force_type=['unsteady'], ibody=ibody)[0]\n\n            for i_node in range(beam.num_node):\n                totals += fa[i_node, :]\n                totals[3:6] += algebra.cross3(self.pos[i_node, :],\n                                              fa[i_node, 0:3])\n\n            forces_output.append(totals)\n\n        return forces_output\n\nclass LinearTimeStepInfo(object):\n    \"\"\"\n    Linear timestep info containing the state, input and output variables for a given timestep\n\n    \"\"\"\n    def __init__(self):\n        self.x = None\n        self.y = None\n        self.u = None\n        self.t = None\n\n    def copy(self):\n        copied = LinearTimeStepInfo()\n        copied.x = self.x.copy()\n        copied.y = self.y.copy()\n        copied.u = self.u.copy()\n        copied.t = self.t.copy()\n\n\nclass Linear(object):\n    \"\"\"\n    This is the class responsible for the transfer of information between linear systems\n    and can be accessed as ``data.linear``. It stores\n    as class attributes the following classes that describe the linearised problem.\n\n    Attributes:\n        ss (sharpy.linear.src.libss.StateSpace): State-space system\n        linear_system (sharpy.linear.utils.ss_interface.BaseElement): Assemble system properties\n        tsaero0 (sharpy.utils.datastructures.AeroTimeStepInfo): Linearisation aerodynamic timestep\n        tsstruct0 (sharpy.utils.datastructures.StructTimeStepInfo): Linearisation structural timestep\n        timestep_info (list): Linear time steps\n    \"\"\"\n\n    def __init__(self, tsaero0, tsstruct0):\n        self.linear_system = None\n        self.ss = None\n        self.tsaero0 = tsaero0\n        self.tsstruct0 = tsstruct0\n        self.timestep_info = []\n        self.uvlm = None\n        self.beam = None\n"
  },
  {
    "path": "sharpy/utils/docutils.py",
    "content": "\"\"\"Documentation Generator\n\nFunctions to automatically document the code.\n\nComments and complaints: N. Goizueta\n\"\"\"\nimport os\nimport shutil\nimport inspect\nimport glob\nimport warnings\nimport importlib.util\nimport yaml\nimport sharpy.utils.sharpydir as sharpydir\nimport sharpy.utils.exceptions as exceptions\nimport sharpy.utils.solver_interface as solver_interface\n\n\ndef generate_documentation():\n    \"\"\"\n    Main routine that generates the documentation in ``./docs/source/includes``\n\n    \"\"\"\n    print('Cleaning docs/source/includes')\n    shutil.rmtree(sharpydir.SharpyDir + '/docs/source/includes/')\n    solver_interface.output_documentation()  # Solvers and generators have a slightly different generation method\n    # generator_interface.output_documentation()\n\n    # Main sharpy source code\n    sharpy_folders = get_sharpy_folders()\n    ignore_modules = yaml.load(open(sharpydir.SharpyDir + '/docs/docignore.yml', 'r'), Loader=yaml.Loader)\n\n    for folder in sharpy_folders:\n        folder_name = folder.replace(sharpydir.SharpyDir, '')\n        folder_name = folder_name[1:]\n        if check_folder_in_ignore(folder, ignore_modules['modules']):\n            continue\n        mtitle, mbody = write_folder(folder, ignore_modules['modules'])\n        create_index_files(folder, mtitle, mbody)\n\n    main_msg = 'The core SHARPy documentation is found herein.\\n\\n' \\\n               '.. note::\\n\\n' \\\n               '\\tThe docs are still a work in progress and therefore, ' \\\n               'most functions/classes with which there is not much user interaction are not fully documented. ' \\\n               'We would appreciate any help by means of you contributing to our growing documentation!\\n\\n\\n' \\\n               'If you feel that a function/class is not well documented and, hence, you cannot use it, feel free ' \\\n               'to raise an issue so that we can improve it.\\n\\n'\n\n    create_index_files('./', 'SHARPy Source Code', main_msg)\n\n\ndef write_folder(folder, ignore_list):\n    \"\"\"\n    Creates the documentation for the contents in a folder.\n\n    It checks that the file folder is not in the ``ignore_list``. If there is a subfolder in the folder, this gets\n    opened, written and an index file is created.\n\n    Args:\n        folder (str): Absolute path to folder\n        ignore_list (list): List with filenames and folders to ignore and skip\n\n    Returns:\n        tuple: Tuple containing the title and body of the docstring found for it to be added to the index of the\n          current folder.\n    \"\"\"\n    files, mtitle, mbody = open_folder(folder)\n    for file in files:\n        if os.path.isfile(file) and not check_folder_in_ignore(file, ignore_list):\n            if file[-3:] != '.py':\n                continue\n            write_file(file)\n        elif os.path.isdir(file) and not check_folder_in_ignore(file, ignore_list):\n            mtitlesub, mbodysub = write_folder(file, ignore_list)\n            create_index_files(file, mtitlesub, mbodysub)\n    return mtitle, mbody\n\n\ndef write_file(file):\n    \"\"\"\n    Writes the contents of a python file with one module per page.\n\n    Warnings:\n        If the function to be written does not have a docstring no output will be produced and a warning will be given.\n\n    Args:\n        file (str): Absolute path to file\n\n    \"\"\"\n    file_name = file.replace(sharpydir.SharpyDir, '')\n    source = file_name.replace('.py', '')\n    outfile = source.replace('sharpy/', '')\n    try:\n        output_documentation_module_page(source,\n                                         outfile)\n    except exceptions.DocumentationError:\n        # Future feature- remove try except so it raises the error that no title has been given\n        warnings.warn('Module %s not written - no title given' %source)\n\n\ndef check_folder_in_ignore(folder, ignore_list):\n    \"\"\"\n    Checks whether a folder is in the ``ignore_list``.\n\n    Args:\n        folder (str): Absolute path to folder\n        ignore_list (list): Ignore list\n\n    Returns:\n        bool: Bool whether file/folder is in ignore list.\n    \"\"\"\n    file_name_check = folder.replace(sharpydir.SharpyDir, '')\n    file_name_check = file_name_check[1:]\n    if file_name_check in ignore_list:\n        return True\n    else:\n        return False\n\n\ndef output_documentation_module_page(path_to_module, docs_folder_name):\n    \"\"\"\n    Generates the documentation for a package with a single page per module in the desired folder\n    Returns:\n\n    \"\"\"\n\n    import_path = path_to_module\n    import_path = import_path.replace(sharpydir.SharpyDir, \"\")\n    if import_path[0] == \"/\": import_path = import_path[1:]\n    import_path = import_path.replace(\"/\", \".\")\n    module = importlib.import_module(import_path)\n\n    print('Generating documentation files')\n    path_to_folder = sharpydir.SharpyDir + '/docs/source/includes/' + docs_folder_name\n\n    if os.path.exists(path_to_folder):\n        print('Cleaning directory %s' %path_to_folder)\n        shutil.rmtree(path_to_folder)\n\n    module_content = inspect.getmembers(module)\n\n    index_file_content = []\n\n    for item in module_content:\n\n        if not inspect.isfunction(item[1]) and not inspect.isclass(item[1]):\n            continue\n\n        md_path = item[1].__module__.split('.')\n        if md_path[0] != 'sharpy':\n            continue\n\n        isclass = False\n        if inspect.isclass(item[1]):\n            isclass = True\n\n        if not item[1].__doc__:\n            continue\n        if not os.path.exists(path_to_folder):\n            print('Creating directory %s' %path_to_folder)\n            os.makedirs(path_to_folder, exist_ok=True)\n\n        docs = ''\n        filename = item[1].__name__ + '.rst'\n        index_file_content.append(item[1].__name__)\n\n        with open(path_to_folder + '/' + filename, 'w') as outfile:\n            title = item[1].__name__\n\n            python_method_path = import_path + '.' + title\n\n            docs += title + '\\n' + len(title)*'-' + '\\n\\n'\n            if isclass:\n                docs += '.. autoclass:: ' + python_method_path\n                docs += '\\n\\t:members:'\n            else:\n                docs += '.. automodule:: ' + python_method_path\n\n            outfile.write(docs)\n            print('\\tCreated %s' % path_to_folder + '/' + filename)\n\n    # create index file\n    if index_file_content != []:\n        with open(path_to_folder + '/index.rst', 'w') as outfile:\n            index_title, body = get_module_title_and_body(module)\n\n            if module.__doc__ is not None:\n                outfile.write(index_title + '\\n' + len(index_title)*'+' + '\\n\\n')\n                outfile.write(body + '\\n\\n')\n\n            outfile.write('.. toctree::\\n\\t:glob:\\n\\n')\n\n            for item in index_file_content:\n                outfile.write('\\t./' + item + '\\n')\n\n\ndef output_documentation(package_path, docs_folder_name):\n    docs_folder = sharpydir.SharpyDir + '/docs/source/includes/' + docs_folder_name\n    if os.path.exists(docs_folder):\n        print('Cleaning directory %s' % docs_folder)\n        shutil.rmtree(docs_folder)\n    print('Creating directory %s' % docs_folder)\n    os.makedirs(docs_folder, exist_ok=True)\n\n    files = solver_interface.solver_list_from_path(package_path)\n\n    index_file_content = []\n\n    for file in files:\n        module, module_path = module_from_path(package_path, file)\n        content = inspect.getmembers(module)\n\n        for member in content:\n            if member[0].lower() == file:\n                title = member[0]\n\n                if not member[1].__doc__:\n                    continue\n\n                index_file_content.append(title.lower())\n                docs = ''\n                docs += title + '\\n' + len(title)*'-' + '\\n\\n'\n\n                docs += '.. autoclass:: ' + module_path + '.' + member[1].__name__\n                docs += '\\n\\t:members:'\n\n                with open(docs_folder + '/' + file + '.rst', 'w') as outfile:\n                    outfile.write(docs)\n\n                print('\\tCreated %s' % docs_folder + '/' + file + '.rst')\n            else:\n                continue\n\n    # create index file\n    with open(docs_folder + '/index.rst', 'w') as outfile:\n        index_title = docs_folder_name.capitalize()\n        outfile.write(index_title + '\\n' + len(index_title)*'+' + '\\n\\n')\n\n        outfile.write('.. toctree::\\n\\t:glob:\\n\\n')\n\n        for item in index_file_content:\n            outfile.write('\\t./' + item + '\\n')\n\n\ndef module_from_path(package_path, filename):\n    if filename is None:\n        name = inspect.getmodulename(package_path)\n    else:\n        name = inspect.getmodulename(package_path + '/' + filename + '.py')\n    python_path = package_path.replace(sharpydir.SharpyDir, \"\")\n    if python_path[0] == '/':\n        python_path = python_path[1:]\n    python_path = python_path.replace(\"/\", \".\")\n    python_path = python_path.replace('.__init__.py', '')\n\n    if name == '__init__':\n        module_path = python_path\n        # module_path = module_path.replace('..py', '')\n    else:\n        module_path = python_path + '.' + name\n    module = importlib.import_module(module_path)\n\n    return module, module_path\n\n\ndef create_index_files(docs_folder, folder_title=None, folder_body=None):\n\n    file_name = docs_folder.replace(sharpydir.SharpyDir, '')\n    source = file_name.replace('.py', '')\n    outfile = source.replace('sharpy/', '')\n\n    docs_path = sharpydir.SharpyDir + '/docs/source/includes/' + outfile\n\n    autodocindexfilename = docs_path + '/index.rst'\n\n    rst_files = glob.glob('%s/*/*index.rst' % docs_path)\n    # Sort files alphabetically\n    rst_files.sort(key=lambda x: x.replace(docs_path, ''))\n\n    if folder_title is None:\n        folder_title = docs_path.split('/')[-1].capitalize()\n\n    if rst_files:\n        ordered_list = []\n        with open(autodocindexfilename, 'w') as outfile:\n            outfile.write(folder_title + '\\n' + len(folder_title)*'-' + '\\n\\n')\n            if folder_body is not None:\n                outfile.write(folder_body + '\\n')\n            outfile.write('.. toctree::\\n\\t:maxdepth: 1\\n\\n')\n            for item in rst_files:\n                # index_file = item.replace(sharpydir.SharpyDir, '')\n                index_file = item.replace(docs_path, '')\n                index_file = index_file.replace('.rst', '')\n                if index_file[0] != '/':\n                    outfile.write('\\t./' + index_file + '\\n')\n                else:\n                    outfile.write('\\t.' + index_file + '\\n')\n\n\ndef get_module_title_and_body(module):\n    docstring = module.__doc__\n    title = None\n    body = None\n    if docstring is not None:\n        docstring = docstring.split('\\n')\n        title = docstring[0]\n        if title == '':\n            try:\n                title = docstring[1]\n            except IndexError:\n                raise exceptions.DocumentationError('Module %s has been given no title in neither the 1st or 2nd '\n                                                    'lines of its docstring'\n                                                    % module.__name__)\n\n        body = '\\n'.join(docstring[1:])\n    else:\n        # Had some issues with complete folders not being written if no docs present... need to verify\n        # raise exceptions.DocumentationError('Module %s has been given no title in neither the 1st or 2nd lines of '\n        #                                     'its docstring'\n        #                 % module.__name__)\n        pass\n    return title, body\n\n\ndef get_sharpy_folders():\n    sharpy_directory = sharpydir.SharpyDir + '/sharpy/'\n    files = glob.glob('%s/*' % sharpy_directory)\n    for item in files:\n        if not os.path.isdir(item):\n            files.remove(item)\n        elif item.replace(sharpy_directory, '')[0] == '_':\n            files.remove(item)\n    return files\n\n\ndef open_folder(folder_path):\n    files = glob.glob(folder_path + '/*')\n    outfiles = []\n    mtitle = None\n    mbody = None\n    for file in files:\n        if file.replace(folder_path, '')[1:] == '__init__.py':\n            mtitle, mbody = module_title(file)\n        elif file.replace(folder_path, '')[1] != '_':\n            outfiles.append(file)\n    return outfiles, mtitle, mbody\n\n\ndef module_title(file):\n    module, module_path = module_from_path(file, None)\n\n    title, body = get_module_title_and_body(module)\n\n    return title, body\n\n\nif __name__ == '__main__':\n    generate_documentation()\n"
  },
  {
    "path": "sharpy/utils/exceptions.py",
    "content": "\"\"\"SHARPy Exception Classes\n\"\"\"\nimport sharpy.utils.cout_utils as cout\n\n\nclass DefaultValueBaseException(Exception):\n    def __init__(self, variable, value, message=''):\n        super().__init__(message)\n\n    def output_message(self, message, color_id=3):\n        if cout.cout_wrap is None:\n            print(message)\n        else:\n            cout.cout_wrap.print_separator(3)\n            cout.cout_wrap(message, color_id)\n            cout.cout_wrap.print_separator(3)\n\n\nclass NoDefaultValueException(DefaultValueBaseException):\n    def __init__(self, variable, value=None, message=''):\n        super().__init__(message, value)\n        self.output_message(\"The variable \" + variable + \" has no default value, please indicate one\")\n\n\nclass NotValidInputFile(Exception):\n    def __init__(self, message):\n        super().__init__(message)\n\n\nclass NotImplementedSolver(Exception):\n    def __init__(self, solver_name, message=''):\n        super().__init__(message)\n        if cout.cout_wrap is None:\n            print(\n                \"The solver \" + solver_name + \" is not implemented. Check the list of available solvers when starting SHARPy\")\n        else:\n            cout.cout_wrap(\n                \"The solver \" + solver_name + \" is not implemented. Check the list of available solvers when starting SHARPy\",\n                3)\n\n\nclass NotConvergedStructuralSolver(Exception):\n    def __init__(self, solver_name, n_iter=None, message=''):\n        super().__init__(message)\n        cout.cout_wrap(\"The solver \" + solver_name + \" did not converge in \" + str(n_iter) + \" iterations.\", 3)\n\n\nclass DocumentationError(Exception):\n    \"\"\"\n    Error in documentation\n    \"\"\"\n    try:\n        cout.cout_wrap('Documentation for module has been given no title')\n    except ValueError:\n        pass\n\n\nclass NotConvergedSolver(Exception):\n    \"\"\"\n    To be raised when the solver does not converge. Before this, SHARPy\n    would add a pdb trace, but this causes problems when using SHARPy\n    as a black box.\n    \"\"\"\n    pass\n\n\nclass NotValidSetting(DefaultValueBaseException):\n    \"\"\"\n    Raised when a user gives a setting an invalid value\n    \"\"\"\n\n    def __init__(self, setting, variable, options, value=None, message=''):\n        message = 'The setting %s with entry %s is not one of the valid options: %s' % (setting, variable, options)\n        super().__init__(variable, value, message=message)\n        self.output_message(message, color_id=4)\n\n\nclass NotValidSettingType(DefaultValueBaseException):\n    \"\"\"\n    Raised when a user gives a setting with an invalid type\n    \"\"\"\n\n    def __init__(self, setting, variable, data_types, value=None, message=''):\n        message = 'The setting %s with entry %s is not one of the valid types: %s' % (setting, variable, data_types)\n        super().__init__(variable, value, message=message)\n        self.output_message(message, color_id=4)\n\n\nclass SolverNotFound(Exception):\n    def __init__(self, solver_name):\n        message = 'The solver %s cannot be found in the list of solvers. Ensure you have spelt the solver name ' \\\n                  'correctly.' % solver_name\n        super().__init__(message)\n\n\nclass NotRecognisedSetting(DefaultValueBaseException):\n    \"\"\"\n    Raised when a setting is not recognised\n    \"\"\"\n\n    def __init__(self, setting, value=None, message=''):\n        message = 'Unrecognised setting {:s}. Please check input file and/or documentation'.format(setting)\n        super().__init__(variable=None, value=None, message=message)\n        self.output_message(message, color_id=4)\n"
  },
  {
    "path": "sharpy/utils/frequencyutils.py",
    "content": "\"\"\"Frequency Space Tools\n\n\"\"\"\nimport warnings\n\nimport numpy as np\nimport scipy.linalg as sclalg\n\nfrom sharpy.utils import cout_utils as cout\nimport sharpy.linear.src.libss as libss\n\n\ndef frequency_error(Y_fom, Y_rom, wv):\n    n_in = Y_fom.shape[1]\n    n_out = Y_fom.shape[0]\n    cout.cout_wrap('Computing error in frequency response')\n    max_error = np.zeros((n_out, n_in, 2))\n    for m in range(n_in):\n        for p in range(n_out):\n            cout.cout_wrap('m = %g, p = %g' % (m, p))\n            max_error[p, m, 0] = error_between_signals(Y_fom[p, m, :].real,\n                                                            Y_rom[p, m, :].real,\n                                                            wv, 'real')\n            max_error[p, m, 1] = error_between_signals(Y_fom[p, m, :].imag,\n                                                            Y_rom[p, m, :].imag,\n                                                            wv, 'imag')\n\n    if np.max(np.log10(max_error)) >= 0:\n        warnings.warn('Significant mismatch in the frequency response of the ROM and FOM')\n\n    return np.max(max_error)\n\n\ndef error_between_signals(sig1, sig2, wv, sig_title=''):\n    abs_error = np.abs(sig1 - sig2)\n    max_error = np.max(abs_error)\n    max_error_index = np.argmax(abs_error)\n    pct_error = max_error/sig1[max_error_index]\n\n    max_err_freq = wv[max_error_index]\n    if 1e-1 > max_error > 1e-3:\n        c = 3\n    elif max_error >= 1e-1:\n        c = 4\n    else:\n        c = 1\n    cout.cout_wrap('\\tError Magnitude -%s-: log10(error) = %.2f (%.2f pct) at %.2f rad/s'\n                   % (sig_title, np.log10(max_error), pct_error, max_err_freq), c)\n\n    return max_error\n\n\ndef freqresp_relative_error(y1, y2, wv=None, **kwargs):\n    r\"\"\"\n    Relative error between a reference signal and a second signal.\n\n    The error metric is defined as in [1] to be:\n\n    .. math:: \\varepsilon_{rel}[\\mathbf{Y}_1, \\mathbf{Y}_2] = \\frac{\\max_{i,j} (\\sup_{w\\in[0, \\bar{w}]}[\\mathbf{Y}_2 -\n        \\mathbf{Y}_1]_{i, j})}{\\max_{i,j}(\\sup_{w\\in[0, \\bar{w}]}[\\mathbf{Y}_1]_{i,j})}.\n\n\n    Args:\n        y1 (np.ndarray): Reference signal frequency response.\n        y2 (np.ndarray): Frequency response matrix.\n        wv (Optional [np.ndarray]): Array of frequencies. Required when specifying a max and min value\n        **kwargs: Key word arguments for max and min frequencies. See below.\n\n    Keyword Args\n        vmin (float): Lower bound value to find index in ``wv``.\n        vmax (float): Upper bound value to find index in ``wv``.\n\n    Returns:\n        float: Maximum relative error between frequency responses.\n\n    References:\n        Maraniello, S. and Palacios, R. Parametric Reduced Order Modelling of the Unsteady Vortex Lattice Method.\n        AIAA Journal. 2020\n    \"\"\"\n    p, m, nwv = y1.shape\n\n    assert (p, m, nwv) == y2.shape, \"Frequency responses do not have the same number of inputs, \" \\\n                                    \"outputs or evaluation points.\"\n\n    # freq_upper_limit = kwargs.get('vmax', None)\n    # freq_lower_limit = kwargs.get('vmin', 0)\n    #\n    # if wv is not None and freq_upper_limit is not None:\n    #     i_min, i_max = find_limits(wv, vmin=freq_lower_limit, vmax=freq_upper_limit)\n    # else:\n    #     i_min = 0\n    #     i_max = None\n\n    i_min, i_max = find_limits(wv, **kwargs)\n\n    err = np.zeros((p, m))\n    for pi in range(p):\n        for mi in range(m):\n            err[pi, mi] = np.max(y1[pi, mi, i_min:i_max] - y2[pi, mi, i_min:i_max]) / np.max(y1[pi, mi, i_min:i_max])\n\n    return np.max(err)\n\n\ndef find_limits(wv, **kwargs):\n    \"\"\"\n    Returns the indices corresponding to the ``vmax`` and ``vmin`` key-word arguments parsed found in the ordered\n    array ``wv``.\n\n    Args:\n        wv (np.ndarray): Ordered range.\n\n    Keyword Args:\n        vmin (float): Lower bound value to find index in ``wv``.\n        vmax (float): Upper bound value to find index in ``wv``.\n\n    Returns:\n        tuple: Index of ``vmin`` and index of ``vmax``.\n\n    \"\"\"\n    freq_upper_limit = kwargs.get('vmax', None)\n    freq_lower_limit = kwargs.get('vmin', 0)\n\n    if wv is not None and freq_upper_limit is not None:\n        # find indices in frequencies\n        i_max = np.where(freq_upper_limit - wv >= 0)[-1][-1]\n        try:\n            i_min = np.where(freq_lower_limit - wv >= 0)[-1][-1]\n        except IndexError:\n            i_min = 0\n\n    else:\n        i_min = 0\n        i_max = None\n\n    return i_min, i_max\n\n\ndef frobenius_norm(a):\n    r\"\"\"\n    Frobenius norm. Also known as Schatten 2-norm or Hilbert-Schmidt norm.\n\n    .. math:: ||\\mathbf{A}||_F = \\sqrt{\\mathrm{trace}(\\mathbf{A^*A})}\n\n    Args:\n        a (np.ndarray): Complex matrix.\n\n    Returns:\n        float: Frobenius norm of the matrix ``a``.\n\n    References:\n        Antoulas, A. Approximation to Large Scale Dynamical Systems. SIAM 2005. Ch 3, Eq 3.5\n\n    \"\"\"\n\n    dims = len(a.shape)\n\n    if dims == 1:\n        a.shape = (a.shape[0], 1)\n\n    a_star = np.conj(a).T\n\n    return np.sqrt(np.trace(a_star.dot(a)))\n\n\ndef l2norm(y_freq, wv, **kwargs):\n    r\"\"\"\n    Computes the L-2 norm of a complex valued function.\n\n    .. math:: \\mathcal{L}_2 = \\left(\\int_{-\\infty}^\\infty ||\\mathbf{F}(i\\omega)||^2_{F2}\\,d\\omega\\right)^{0.5}\n\n    where :math:`||\\mathbf{F}(i\\omega)||_{F2}` refers to teh Frobenius norm calculated by\n    :func:`sharpy.utils.frequencyutils.frobenius_norm`.\n\n    Args:\n        y_freq (np.ndarray): Complex valued function.\n        wv (np.ndarray): Frequency array.\n        **kwargs: Key word arguments for max and min frequencies. See below.\n\n    Keyword Args\n        vmin (float): Lower bound value to find index in ``wv``.\n        vmax (float): Upper bound value to find index in ``wv``.\n\n    Returns:\n        float: L-2 norm of ``y_freq``.\n\n    References:\n        Antoulas, A. Approximation to Large Scale Dynamical Systems. SIAM 2005. Ch 5, Eq 5.10, pg 126\n    \"\"\"\n\n    nwv = y_freq.shape[-1]\n\n    assert nwv == len(wv), \"Number of frequency evaluations different %g vs %g\" % (nwv, len(wv))\n\n    i_min, i_max = find_limits(wv, **kwargs)\n\n    freq_range = wv[i_min:i_max].copy()\n\n    h2 = np.zeros(len(freq_range))  # frobenius norm at each frequency\n\n    for i in range(len(freq_range)):\n        h2[i] = frobenius_norm(y_freq[:, :, i]) ** 2\n    integral_h2 = np.sqrt(np.max(np.trapz(h2, freq_range)))\n\n    return integral_h2\n\n\ndef hamiltonian(gamma, ss):\n    \"\"\"\n    Returns the Hamiltonian of a linear system as defined in [1].\n\n\n    References:\n\n        [1] Bruinsma, N. A., & Steinbuch, M. (1990). A fast algorithm to compute the H∞-norm of a transfer function\n        matrix. Systems and Control Letters, 14(4), 287–293. https://doi.org/10.1016/0167-6911(90)90049-Z\n\n    Args:\n        gamma (float): Evaluation point.\n        ss (sharpy.linear.src.libss.StateSpace): Linear system.\n\n    Returns:\n        np.ndarray: Hamiltonian evaluated at ``gamma``.\n    \"\"\"\n\n    a, b, c, d = ss.get_mats()\n\n    p, m = d.shape\n\n    r = d.T.dot(d) - gamma ** 2 * np.eye(m)\n    s = d.dot(d.T) - gamma ** 2 * np.eye(p)\n\n    rinv = sclalg.inv(r)\n    sinv = sclalg.inv(s)\n\n    ham = np.block([[a - b.dot(rinv.dot(d.T.dot(c))),  - gamma * b.dot(rinv.dot(b.T))],\n                    [gamma * c.T.dot(sinv.dot(c)), - a.T + c.T.dot(d.dot(rinv.dot(b.T)))]])\n    return ham\n\n\ndef h_infinity_norm(ss, **kwargs):\n    r\"\"\"\n    Returns H-infinity norm of a linear system using iterative methods.\n\n    The H-infinity norm of a MIMO system is traditionally calculated finding the largest SVD of the\n    transfer function evaluated across the entire frequency spectrum. That can prove costly for a\n    large number of evaluations, hence the iterative methods of [1] are employed.\n\n    In the case of a SISO system the H-infinity norm corresponds to the maximum frequency gain.\n\n    A scalar value is returned if the system is stable. If the system is unstable it returns ``np.Inf``.\n\n    References:\n\n        [1] Bruinsma, N. A., & Steinbuch, M. (1990). A fast algorithm to compute the H∞-norm of a transfer function\n        matrix. Systems and Control Letters, 14(4), 287–293. https://doi.org/10.1016/0167-6911(90)90049-Z\n\n    Args:\n        ss (sharpy.linear.src.libss.StateSpace): Multi input multi output system.\n        **kwargs: Key-word arguments.\n\n    Keyword Args:\n        tol (float (optional)): Tolerance. Defaults to ``1e-7``.\n        tol_imag_eigs (float (optional)): Tolerance to find purely imaginary eigenvalues. Defaults to ``1e-7``.\n        iter_max (int (optional)): Maximum number of iterations.\n        print_info (bool (optional)): Print status and information. Defaults to ``False``.\n\n    Returns:\n        float: H-infinity norm of the system.\n    \"\"\"\n    tol = kwargs.get('tol', 1e-7)\n    iter_max = kwargs.get('iter_max', 10)\n    print_info = kwargs.get('print_info', False)\n\n    # tolerance to find purely imaginary eigenvalues i.e those with Re(eig) < tol_imag_eigs\n    tol_imag_eigs = kwargs.get('tol_imag_eigs', 1e-7)\n\n    if ss.dt is not None:\n        ss = libss.disc2cont(ss)\n\n    # 1) Compute eigenvalues of original system\n    eigs = sclalg.eigvals(ss.A)\n\n    if any(eigs.real > tol_imag_eigs):\n        if print_info:\n            try:\n                cout.cout_wrap('System is unstable - H-inf = np.inf')\n            except ValueError:\n                print('System is unstable - H-inf = np.inf')\n        return np.inf\n\n    # 2) Find eigenvalue that maximises equation. If all real pick largest eig\n    if np.max(np.abs(eigs.imag) < tol_imag_eigs):\n        eig_m = np.max(eigs.real)\n    else:\n        eig_m, _ = max_eigs(eigs)\n\n    # 3) Choose best option for gamma_lb\n    max_steady_state = np.max(sclalg.svd(ss.transfer_function_evaluation(0), compute_uv=False))\n    max_eig_m = np.max(sclalg.svd(ss.transfer_function_evaluation(1j*np.abs(eig_m)), compute_uv=False))\n    max_d = np.max(sclalg.svd(ss.D, compute_uv=False))\n\n    gamma_lb = max(max_steady_state, max_eig_m, max_d)\n\n    iter_num = 0\n\n    if print_info:\n        try:\n            cout.cout_wrap('Calculating H-inf norm\\n{0:>4s} ::::: {1:^8s}'.format('Iter', 'Hinf'))\n        except ValueError:\n            print('Calculating H_inf norm\\n{0:>4s} ::::: {1:^8s}'.format('Iter', 'Hinf'))\n\n    while iter_num < iter_max:\n        if print_info:\n            try:\n                cout.cout_wrap('{0:>4g} ::::: {1:>8.2e}'.format(iter_num, gamma_lb))\n            except ValueError:\n                print('{0:>4g} ::::: {1:>8.2e}'.format(iter_num, gamma_lb))\n        gamma = (1 + 2 * tol) * gamma_lb\n\n        # 4) compute hamiltonian and eigenvalues\n        ham = hamiltonian(gamma, ss)\n        eigs = sclalg.eigvals(ham)\n\n        # If eigenvalues all eigenvalues are purely imaginary\n        if any(np.abs(eigs.real) < tol_imag_eigs):\n            # Select imaginary eigenvalues and those with positive values\n            condition_imag = (np.abs(eigs.real) < tol_imag_eigs) * eigs.imag > 0\n            imag_eigs = eigs[condition_imag].imag\n\n            # Sort them in decreasing order\n            order = np.argsort(imag_eigs)[::-1]\n            imag_eigs = imag_eigs[order]\n\n            if len(imag_eigs) == 1:\n                m = imag_eigs[0]\n                svdmax = np.max(sclalg.svd(ss.transfer_function_evaluation(1j*m), compute_uv=False))\n\n                gamma_lb = svdmax\n            else:\n                m_list = [0.5 * (imag_eigs[i] + imag_eigs[i+1]) for i in range(len(imag_eigs) - 1)]\n\n                svdmax = [np.max(sclalg.svd(ss.transfer_function_evaluation(1j*m), compute_uv=False)) for m in m_list]\n\n                gamma_lb = max(svdmax)\n\n        else:\n            gamma_ub = gamma\n            break\n\n        iter_num += 1\n\n        if iter_num == iter_max:\n            raise np.linalg.LinAlgError('Unconverged H-inf solution after %g iterations' % iter_num)\n\n    hinf = 0.5 * (gamma_lb + gamma_ub)\n\n    return hinf\n\n\ndef max_eigs(eigs):\n    r\"\"\"\n    Returns the maximum of\n\n    .. math:: \\left|\\frac{Im(\\lambda_i)}{Re(\\lambda_i)}\\frac{1}{\\lambda_i}\\right|\n\n    for a given array of eigenvalues ``eigs``.\n\n    Used as part of the computation of the H infinity norm\n\n\n    References:\n\n        [1] Bruinsma, N. A., & Steinbuch, M. (1990). A fast algorithm to compute the H∞-norm of a transfer function\n        matrix. Systems and Control Letters, 14(4), 287–293. https://doi.org/10.1016/0167-6911(90)90049-Z\n\n    Args:\n        eigs (np.ndarray): Array of eigenvalues.\n\n    Returns:\n        complex: Maximum value of function.\n    \"\"\"\n    func = np.abs(eigs.imag / eigs.real / eigs)\n\n    i_max = np.argmax(func)\n\n    return func[i_max], i_max\n\n\ndef find_target_system(data, target_system):\n    \"\"\"\n    Finds target system ``aeroelastic``, ``aerodynamic`` or ``structural``.\n\n    Args:\n        data (sharpy.PreSharpy): Object containing problem data\n        target_system (str): Desired target system.\n\n    Returns:\n        sharpy.linear.src.libss.StateSpace: State-space object of target system\n    \"\"\"\n\n    if target_system == 'aeroelastic':\n        ss = data.linear.ss\n\n    elif target_system == 'structural':\n        ss = data.linear.linear_system.beam.ss\n\n    elif target_system == 'aerodynamic':\n        ss = data.linear.linear_system.uvlm.ss  # this could be a ROM\n\n    else:\n        raise NameError('Unrecognised system')\n\n    return ss\n"
  },
  {
    "path": "sharpy/utils/generate_cases.py",
    "content": "\"\"\"\nGenerate cases\n\nThis library provides functions and classes to help in the definition of SHARPy cases\n\nExamples:\n\n    tests in: tests/utils/generate_cases\n    examples: test/coupled/multibody/fix_node_velocity_wrtG/test_fix_node_velocity_wrtG\n              test/coupled/multibody/fix_node_velocity_wrtA/test_fix_node_velocity_wrtA\n              test/coupled/multibody/double_pendulum/test_double_pendulum_geradin\n              test/coupled/prescribed/WindTurbine/test_rotor\n\nNotes:\n\n    To use this library: import sharpy.utils.generate_cases as generate_cases\n\n\"\"\"\n\nimport numpy as np\nimport h5py as h5\nimport os\nimport sys\nimport pandas as pd\nimport scipy.integrate\nfrom copy import deepcopy\n\nimport sharpy.utils.algebra as algebra\nimport sharpy.utils.solver_interface as solver_interface\nimport sharpy.utils.generator_interface as generator_interface\nimport sharpy.utils.controller_interface as controller_interface\nimport sharpy.structure.utils.lagrangeconstraints as lagrangeconstraints\nimport sharpy.utils.cout_utils as cout\n\nfrom sharpy.structure.utils.lagrangeconstraintsjax import DICT_OF_LC\n\n\nif not cout.check_running_unittest():\n    cout.cout_wrap.print_screen = True\n    cout.cout_wrap.print_file = False\n\n\n######################################################################\n#########################  AUX FUNCTIONS  ############################\n######################################################################\ndef get_airfoil_camber(x, y, n_points_camber):\n    \"\"\"\n    get_airfoil_camber\n\n    Define the camber of an airfoil based on its coordinates\n\n    Args:\n        x (np.array): x coordinates of the airfoil surface\n        y (np.array): y coordinates of the airfoil surface\n        n_points_camber (int): number of points to define the camber line\n\n    Returns:\n        camber_x (np.array): x coordinates of the camber line\n        camber_y (np.array): y coordinates of the camber line\n\n    Notes:\n        The x and y vectors are expected in XFOIL format: TE - suction side - LE - pressure side - TE\n\n    \"\"\"\n    # Returns the airfoil camber for a given set of coordinates (XFOIL format expected)\n\n    x = np.array(x, dtype=float)\n    y = np.array(y, dtype=float)\n    n = len(x)\n    imin_x = 0\n\n    # Look for the minimum x (it will be assumed as the LE position\n    for i in range(n):\n        if(x[i] < x[imin_x]):\n            imin_x = i\n\n    x_suction = np.zeros((imin_x+1, ))\n    y_suction = np.zeros((imin_x+1, ))\n    x_pressure = np.zeros((n-imin_x, ))\n    y_pressure = np.zeros((n-imin_x, ))\n\n    for i in range(0, imin_x+1):\n        x_suction[i] = x[imin_x-i]\n        y_suction[i] = y[imin_x-i]\n\n    for i in range(imin_x, n):\n        x_pressure[i-imin_x] = x[i]\n        y_pressure[i-imin_x] = y[i]\n\n    # Compute the camber coordinates\n    camber_y = np.zeros((n_points_camber, ))\n    camber_x = np.linspace(0.0, 1.0, n_points_camber)\n\n    # camber_y=0.5*(np.interp(camber_x,x[imin_x::-1],y[imin_x::-1])+np.interp(camber_x,x[imin_x:],y[imin_x:]))\n    camber_y = 0.5*(np.interp(camber_x, x_suction, y_suction) +\n                    np.interp(camber_x, x_pressure, y_pressure))\n\n    # The function should be called as: camber_x, camber_y = get_airfoil_camber(x,y)\n    return camber_x, camber_y\n\n\ndef from_node_list_to_elem_matrix(node_list, connectivities):\n    \"\"\"\n    from_node_list_to_elem_matrix\n\n    Convert list of properties associated to nodes to matrix of properties associated\n    to elements based on the connectivities\n\n    The 'ith' value of the 'node_list' array stores the property of the 'ith' node.\n    The 'jth' 'kth' value of the 'elem_matrix' array stores the property of the 'kth' node\n    within the 'jth' element\n\n    Args:\n        node_list (np.array): Properties of the nodes\n        connectivities (np.array): Connectivities between the nodes to form elements\n\n    Returns:\n        elem_matrix (np.array): Properties of the elements\n\n    \"\"\"\n\n    num_elem = len(connectivities)\n    # TODO: change the \"3\" for self.num_node_elem\n    elem_matrix = np.zeros((num_elem, 3), dtype=node_list.dtype)\n    for ielem in range(num_elem):\n        elem_matrix[ielem, :] = node_list[connectivities[ielem, :]]\n\n    return elem_matrix\n\n\ndef from_node_array_to_elem_matrix(node_array, connectivities):\n    \"\"\"\n    from_node_array_to_elem_matrix\n\n    Same as the previous function but with an array as input\n    \"\"\"\n\n    num_elem = len(connectivities)\n    prop_size = node_array.shape[1:]\n    # TODO: change the \"3\" for self.num_node_elem\n    elem_matrix = np.zeros(prop_size + (num_elem, 3), dtype=node_array.dtype)\n    for ielem in range(num_elem):\n        for inode_in_elem in range(3):\n            elem_matrix[:, ielem, inode_in_elem] = node_array[connectivities[ielem, inode_in_elem], :]\n\n    return elem_matrix\n\n\ndef read_column_sheet_type01(excel_file_name, excel_sheet, column_name):\n    \"\"\"\n    read_column_sheet_type01\n\n    This function reads a column from an excel file with the following format:\n\n        - First row: column_name\n        - Second row: units (not read, not checked)\n        - Third row: type of data (see below)\n\n    Args:\n        excel_file_name (string): File name\n        excel_sheet (string): Name of the sheet inside the excel file\n        column_name (string): Name of the column\n\n    Returns:\n        var: Data in the excel file according to the type of data defined in the third row\n\n    \"\"\"\n\n    xls = pd.ExcelFile(excel_file_name)\n    excel_db = pd.read_excel(xls, sheet_name=excel_sheet)\n    num_elem = excel_db.index.stop - 2\n\n    try:\n        excel_db[column_name]\n    except KeyError:\n        return None\n\n    if excel_db[column_name][1] == 'one_int':\n        var = excel_db[column_name][2]\n    elif excel_db[column_name][1] == 'one_float':\n        var = excel_db[column_name][2]\n    elif excel_db[column_name][1] == 'one_str':\n        var = excel_db[column_name][2]\n    elif excel_db[column_name][1] == 'vec_int':\n        var = np.zeros((num_elem,), dtype=int)\n    elif excel_db[column_name][1] == 'vec_float':\n        var = np.zeros((num_elem,), dtype=float)\n    elif excel_db[column_name][1] == 'vec_str':\n        var = np.zeros((num_elem,), dtype=object)\n    else:\n        raise RuntimeError(\"ERROR: not recognized number type\")\n\n    if 'vec' in excel_db[column_name][1]:\n        for i in range(2, excel_db.index.stop):\n            var[i - 2] = excel_db[column_name][i]\n\n    return var\n\n\ndef get_factor_geometric_progression(a0, Sn_target, n):\n    r\"\"\"\n    This function provides the factor in a geometric series which first element\n    is 'a0', has 'n' points and the sum of the spacings is 'Sn_target' approximately.\n\n    .. math::\n\n        \\sum_{k=1}^n a_0 r^{k-1} = \\frac{a_0 (1 - r^n)}{1 - r}\n\n    \"\"\"\n    # Given an initial value,\n\n    tol = 1e-12\n    max_it = 1000\n\n    # Case of uniform distribution\n    if abs(a0*n - Sn_target) < tol:\n        return 1.\n\n    # First estimation for r\n    if a0*n < Sn_target:\n        r = 1.1\n    else:\n        r = 0.9\n\n    # Iterative computation\n    error = 2.*tol\n    Sn_temp = a0*(1-r**n)/(1-r)\n    it = 0\n    while ((error > tol) and (it < max_it)):\n        derivative = ((1-n*r**(n-1))*(1-r) + (1-r**n))/(1-r)**2\n        r += (Sn_target - Sn_temp)/a0/derivative\n        Sn_temp = a0*(1-r**n)/(1-r)\n        error = abs(Sn_temp - Sn_target)/Sn_target\n        it += 1\n\n    if it == max_it:\n        message = (\"Maximum iterations reached. Sn target:%f . Sn obtained:%f . Relative error: %f\" % (Sn_target, Sn_temp, error))\n        cout.cout_wrap(message, 3)\n\n    return r\n\n\ndef get_ielem_inode(connectivities, inode):\n\n    num_elem, num_node_in_elem = connectivities.shape\n\n    for ielem in range(num_elem):\n        for inode_in_elem in range(num_node_in_elem):\n            if connectivities[ielem, inode_in_elem] == inode:\n                return ielem, inode_in_elem\n\n    raise RuntimeError(\"ERROR: cannot find ielem and inode_in_elem\")\n\n\ndef get_aoacl0_from_camber(x, y):\n    \"\"\"\n    This section provies the angle of attack of zero lift for a thin\n    airfoil which camber line is defined by 'x' and 'y' coordinates\n\n    Check Theory of wing sections. Abbott. pg 69\n    \"\"\"\n\n    # Scale\n    c = x[-1] - x[0]\n    xc = (x - x[0])/c\n    yc = (y - y[0])/c\n\n    # Remove the first and last points that may give rise to problems\n    xc = xc[1:-1]\n    yc = yc[1:-1]\n\n    f1 = 1./(np.pi*(1-xc)*np.sqrt(xc*(1-xc)))\n    int = yc*f1\n\n    return -scipy.integrate.trapezoid(int, xc)\n\n\ndef get_mu0_from_camber(x, y):\n    \"\"\"\n    This funrcion provides the constant :math:`\\mu_0` for a thin\n    airfoil which camber line is defined by 'x' and 'y' coordinates\n\n    Check Theory of wing sections. Abbott. pg 69\n    \"\"\"\n\n    # Scale\n    c = x[-1] - x[0]\n    xc = (x - x[0])/c\n    yc = (y - y[0])/c\n\n    # Remove the first and last points that may give rise to problems\n    xc = xc[1:-1]\n    yc = yc[1:-1]\n\n    f2 = (1. - 2*xc)/np.sqrt(xc*(1. - xc))\n    int = yc*f2\n\n    return scipy.integrate.trapz(int, xc)\n\n\ndef list_methods(class_instance, print_info=True, clean=True):\n\n    list = []\n    for str in dir(class_instance):\n        func = getattr(class_instance, str)\n        if callable(func):\n            if clean:\n                if not str.startswith(\"__\"):\n                    list.append(str)\n            else:\n                list.append(str)\n\n    if print_info:\n        for str in list:\n            print(str)\n\n    return list\n\n\ndef set_variable_dict(dictionary, variable, set_value):\n\n    if variable in dictionary:\n        dictionary[variable] = set_value\n\n    for key, value in dictionary.items():\n        if isinstance(value, dict):\n            set_variable_dict(value, variable, set_value)\n\n\ndef define_or_concatenate(variable, value, axis=0):\n    \"\"\"\n    if variable is None, value is assigned\n    If variable is an array, value is concatenated along axis\n    \"\"\"\n    if variable is None:\n        variable = value\n    else:\n        variable = np.concatenate((variable, value), axis=axis)\n    \n    return variable\n\n\n######################################################################\n###############  STRUCTURAL INFORMATION  #############################\n######################################################################\nclass StructuralInformation():\n    \"\"\"\n    StructuralInformation\n\n    Structural information needed to build a case\n    \"\"\"\n\n    def __init__(self):\n        \"\"\"\n        __init__\n\n        Initialization\n        \"\"\"\n\n        # Variables to write in the h5 file\n        self.num_node_elem = None\n        self.num_node = None\n        self.num_elem = None\n        self.coordinates = None\n        self.connectivities = None\n        self.elem_stiffness = None\n        self.stiffness_db = None\n        self.elem_mass = None\n        self.mass_db = None\n        self.frame_of_reference_delta = None\n        self.structural_twist = None\n        self.boundary_conditions = None\n        self.beam_number = None\n        self.body_number = None\n        self.app_forces = None\n        self.lumped_mass_nodes = None\n        self.lumped_mass = None\n        self.lumped_mass_inertia = None\n        self.lumped_mass_position = None\n        self.lumped_mass_mat = None\n        self.lumped_mass_mat_nodes = None\n\n\n    def copy(self):\n        \"\"\"\n        copy\n\n        Returns a copy of the object\n\n        Returns:\n            copied(StructuralInformation): new object with the same properties\n        \"\"\"\n        copied = StructuralInformation()\n        # Variables to write in the h5 file\n        copied.num_node_elem = self.num_node_elem\n        copied.num_node = self.num_node\n        copied.num_elem = self.num_elem\n        copied.coordinates = self.coordinates.astype(dtype=float, copy=True)\n        copied.connectivities = self.connectivities.astype(dtype=int, copy=True)\n        copied.elem_stiffness = self.elem_stiffness.astype(dtype=int, copy=True)\n        copied.stiffness_db = self.stiffness_db.astype(dtype=float, copy=True)\n        copied.elem_mass = self.elem_mass.astype(dtype=int, copy=True)\n        copied.mass_db = self.mass_db.astype(dtype=float, copy=True)\n        copied.frame_of_reference_delta = self.frame_of_reference_delta.astype(dtype=float, copy=True)\n        copied.structural_twist = self.structural_twist.astype(dtype=float, copy=True)\n        copied.boundary_conditions = self.boundary_conditions.astype(dtype=int, copy=True)\n        copied.beam_number = self.beam_number.astype(dtype=int, copy=True)\n        copied.body_number = self.body_number.astype(dtype=int, copy=True)\n        copied.app_forces = self.app_forces.astype(dtype=float, copy=True)\n        if isinstance(self.lumped_mass_nodes, np.ndarray):\n            copied.lumped_mass_nodes = self.lumped_mass_nodes.astype(dtype=int, copy=True)\n            copied.lumped_mass = self.lumped_mass.astype(dtype=float, copy=True)\n            copied.lumped_mass_inertia = self.lumped_mass_inertia.astype(dtype=float, copy=True)\n            copied.lumped_mass_position = self.lumped_mass_position.astype(dtype=float, copy=True)\n        if isinstance(self.lumped_mass_mat_nodes, np.ndarray):\n            copied.lumped_mass_mat_nodes = self.lumped_mass_mat_nodes.astype(dtype=int, copy=True)\n            copied.lumped_mass_mat = self.lumped_mass_mat.astype(dtype=float, copy=True)\n\n        return copied\n\n    def set_to_zero(self, num_node_elem, num_node, num_elem,\n                    num_mass_db=None, num_stiffness_db=None, num_lumped_mass=0,\n                    num_lumped_mass_mat=0):\n        \"\"\"\n        set_to_zero\n\n        Sets to zero all the variables\n\n        Args:\n            num_node_elem (int): number of nodes per element\n            num_node (int): number of nodes\n            num_elem (int): number of elements\n            num_mass_db (int): number of different mass matrices in the case\n            num_stiffness_db (int): number of different stiffness matrices in the case\n            num_lumped_mass (int): number of lumped masses in the case\n            num_lumped_mass_mat (int): number of lumped masses given as matrices\n        \"\"\"\n\n        if num_mass_db is None:\n            num_mass_db = self.num_elem\n        if num_stiffness_db is None:\n            num_stiffness_db = self.num_elem\n\n        self.num_node_elem = num_node_elem\n        self.num_node = num_node\n        self.num_elem = num_elem\n        self.coordinates = np.zeros((num_node, 3), dtype=float)\n        self.connectivities = np.zeros((num_elem, num_node_elem), dtype=int)\n        self.elem_stiffness = np.zeros((num_elem,), dtype=int)\n        self.stiffness_db = np.zeros((num_stiffness_db, 6, 6), dtype=float)\n        self.elem_mass = np.zeros((num_elem,), dtype=int)\n        self.mass_db = np.zeros((num_mass_db, 6, 6), dtype=float)\n        self.frame_of_reference_delta = np.zeros((num_elem, num_node_elem, 3),\n                                                 dtype=float)\n        self.structural_twist = np.zeros((num_elem, num_node_elem), dtype=float)\n        self.boundary_conditions = np.zeros((num_node,), dtype=int)\n        self.beam_number = np.zeros((num_elem,), dtype=int)\n        self.body_number = np.zeros((num_elem,), dtype=int)\n        self.app_forces = np.zeros((num_node, 6), dtype=int)\n        if not num_lumped_mass == 0:\n            self.lumped_mass_nodes = np.zeros((num_lumped_mass,), dtype=int)\n            self.lumped_mass = np.zeros((num_lumped_mass,), dtype=float)\n            self.lumped_mass_inertia = np.zeros((num_lumped_mass, 3, 3),\n                                                dtype=float)\n            self.lumped_mass_position = np.zeros((num_lumped_mass, 3),\n                                                 dtype=float)\n        if not num_lumped_mass_mat == 0:\n            self.lumped_mass_mat_nodes = np.zeros((num_lumped_mass_mat,), dtype=int)\n            self.lumped_mass_mat = np.zeros((num_lumped_mass_mat, 6, 6), dtype=float)\n\n\n    def generate_full_structure(self,\n                                num_node_elem,\n                                num_node,\n                                num_elem,\n                                coordinates,\n                                connectivities,\n                                elem_stiffness,\n                                stiffness_db,\n                                elem_mass,\n                                mass_db,\n                                frame_of_reference_delta,\n                                structural_twist,\n                                boundary_conditions,\n                                beam_number,\n                                app_forces,\n                                lumped_mass_nodes=None,\n                                lumped_mass=None,\n                                lumped_mass_inertia=None,\n                                lumped_mass_position=None,\n                                lumped_mass_mat_nodes=None,\n                                lumped_mass_mat=None):\n        \"\"\"\n        generate_full_structure\n\n        Defines the whole case from the appropiated variables\n\n        Args:\n            num_node_elem (int): number of nodes per element\n            num_node (int): number of nodes\n            num_elem (int): number of elements\n            coordinates (np.array): nodes coordinates\n            connectivities (np.array): element connectivities\n            elem_stiffness (np.array): element stiffness index\n            stiffness_db (np.array): Stiffness matrices\n            elem_mass (np.array): element mass index\n            mass_db (np.array): Mass matrices\n            frame_of_reference_delta (np.array): element direction of the y axis in the BFoR wrt the AFoR\n            structural_twist (np.array): element based twist\n            boundary_conditions (np.array): node boundary condition\n            beam_number (np.array): node beam number\n            app_forces (np.array): steady applied follower forces at the nodes\n            lumped_mass_nodes (np.array): nodes with lumped masses\n            lumped_mass (np.array): value of the lumped masses\n            lumped_mass_inertia (np.array): inertia of the lumped masses\n            lumped_mass_position (np.array): position of the lumped masses\n            lumped_mass_mat_nodes (np.array): nodes with lumped masses given by matrices\n            lumped_mass_mat (np.array): value of the lumped masses given by matrices\n        \"\"\"\n\n        self.num_node_elem = num_node_elem\n        self.num_node = num_node\n        self.num_elem = num_elem\n        self.coordinates = coordinates\n        self.connectivities = connectivities\n        self.elem_stiffness = elem_stiffness\n        self.stiffness_db = stiffness_db\n        self.elem_mass = elem_mass\n        self.mass_db = mass_db\n        self.frame_of_reference_delta = frame_of_reference_delta\n        self.structural_twist = structural_twist\n        self.boundary_conditions = boundary_conditions\n        self.beam_number = beam_number\n        self.body_number = np.zeros((num_elem,), dtype=int)\n        self.app_forces = app_forces\n        if isinstance(lumped_mass_nodes, np.ndarray):\n            self.lumped_mass_nodes = lumped_mass_nodes\n            self.lumped_mass = lumped_mass\n            self.lumped_mass_inertia = lumped_mass_inertia\n            self.lumped_mass_position = lumped_mass_position\n        if isinstance(lumped_mass_mat_nodes, np.ndarray):\n            self.lumped_mass_mat_nodes = lumped_mass_mat_nodes\n            self.lumped_mass_mat = lumped_mass_mat\n\n\n    def generate_1to1_from_vectors(self,\n                                    num_node_elem,\n                                    num_node,\n                                    num_elem,\n                                    coordinates,\n                                    stiffness_db,\n                                    mass_db,\n                                    frame_of_reference_delta,\n                                    vec_node_structural_twist,\n                                    num_lumped_mass=0,\n                                    num_lumped_mass_mat=0):\n\n        self.num_node_elem = num_node_elem\n        self.num_node = num_node\n        self.num_elem = num_elem\n        self.coordinates = coordinates\n        self.create_simple_connectivities()\n        self.elem_stiffness = np.linspace(0,self.num_elem - 1, self.num_elem, dtype=int)\n        self.stiffness_db = stiffness_db\n        self.elem_mass = np.linspace(0,self.num_elem - 1, self.num_elem, dtype=int)\n        self.mass_db = mass_db\n        self.create_frame_of_reference_delta(y_BFoR=frame_of_reference_delta)\n        self.structural_twist = from_node_list_to_elem_matrix(vec_node_structural_twist, self.connectivities)\n        self.boundary_conditions = np.zeros((self.num_node,), dtype=int)\n        self.beam_number = np.zeros((self.num_elem,), dtype=int)\n        self.body_number = np.zeros((self.num_elem,), dtype=int)\n        self.app_forces = np.zeros((self.num_node, 6), dtype=float)\n        if not num_lumped_mass == 0:\n            self.lumped_mass_nodes = np.zeros((num_lumped_mass,), dtype=int)\n            self.lumped_mass = np.zeros((num_lumped_mass,), dtype=float)\n            self.lumped_mass_inertia = np.zeros((num_lumped_mass, 3, 3), dtype=float)\n            self.lumped_mass_position = np.zeros((num_lumped_mass, 3), dtype=float)\n        if not num_lumped_mass_mat == 0:\n            self.lumped_mass_mat_nodes = np.zeros((num_lumped_mass_mat,), dtype=int)\n            self.lumped_mass_mat = np.zeros((num_lumped_mass_mat, 6, 6), dtype=float)\n\n\n    def create_frame_of_reference_delta(self, y_BFoR='y_AFoR'):\n        \"\"\"\n        create_frame_of_reference_delta\n\n        Define the coordinates of the yB axis in the AFoR\n\n        Args:\n            y_BFoR (string): Direction of the yB axis\n        \"\"\"\n\n        if isinstance(y_BFoR,(list,np.ndarray)):\n            yB = np.asarray(y_BFoR)\n            cout.cout_wrap((\"WARNING: custom FoR delta defined, using the given value: y_BFoR = {y_BFoR}\" % (y_BFoR)), 3)\n        elif y_BFoR == 'x_AFoR':\n            yB = np.array([1.0, 0.0, 0.0])\n        elif y_BFoR == 'y_AFoR':\n            yB = np.array([0.0, 1.0, 0.0])\n        elif y_BFoR == 'z_AFoR':\n            yB = np.array([0.0, 0.0, 1.0])\n        else:\n            cout.cout_wrap(\"WARNING: y_BFoR not recognized, using the default value: y_BFoR = y_AFoR\", 3)\n\n        # y vector of the B frame of reference\n        self.frame_of_reference_delta = np.zeros((self.num_elem,\n                                                  self.num_node_elem, 3),\n                                                  dtype=float)\n        for ielem in range(self.num_elem):\n            for inode in range(self.num_node_elem):\n                # TODO: do i need to use the connectivities?\n                self.frame_of_reference_delta[ielem, inode, :] = yB\n\n    def create_mass_db_from_vector(self,\n                                   vec_mass_per_unit_length,\n                                   vec_mass_iner_x,\n                                   vec_mass_iner_y,\n                                   vec_mass_iner_z,\n                                   vec_pos_cg_B,\n                                   vec_mass_iner_yz=None):\n        \"\"\"\n        create_mass_db_from_vector\n\n        Create the mass matrices from the vectors of properties\n\n        Args:\n            vec_mass_per_unit_length (np.array): masses per unit length\n            vec_mass_iner_x (np.array): inertias around the x axis\n            vec_mass_iner_y (np.array): inertias around the y axis\n            vec_mass_iner_z (np.array): inertias around the z axis\n            vec_pos_cg_B (np.array): position of the masses\n            vec_mass_iner_yz (np.array): inertias around the yz axis\n        \"\"\"\n\n        if vec_mass_iner_yz is None:\n            vec_mass_iner_yz = np.zeros_like(vec_mass_per_unit_length)\n\n        self.mass_db = np.zeros((len(vec_mass_per_unit_length), 6, 6), dtype=float)\n        mass = np.zeros((6, 6),)\n        for i in range(len(vec_mass_per_unit_length)):\n            mass[0:3, 0:3] = np.eye(3)*vec_mass_per_unit_length[i]\n            mass[0:3, 3:6] = -1.0*vec_mass_per_unit_length[i]*algebra.skew(vec_pos_cg_B[i])\n            mass[3:6, 0:3] = -1.0*mass[0:3, 3:6]\n            mass[3:6, 3:6] = np.diag([vec_mass_iner_x[i],\n                                      vec_mass_iner_y[i],\n                                      vec_mass_iner_z[i]])\n            mass[4, 5] = vec_mass_iner_yz[i]\n            mass[5, 4] = vec_mass_iner_yz[i]\n            self.mass_db[i] = mass\n\n    def create_stiff_db_from_vector(self,\n                                    vec_EA,\n                                    vec_GAy,\n                                    vec_GAz,\n                                    vec_GJ,\n                                    vec_EIy,\n                                    vec_EIz,\n                                    vec_EIyz=None):\n        \"\"\"\n        create_stiff_db_from_vector\n\n        Create the stiffness matrices from the vectors of properties\n\n        Args:\n            vec_EA (np.array): Axial stiffness\n            vec_GAy (np.array): Shear stiffness in the y direction\n            vec_GAz (np.array): Shear stiffness in the z direction\n            vec_GJ (np.array): Torsional stiffness\n            vec_EIy (np.array): Bending stiffness in the y direction\n            vec_EIz (np.array): Bending stiffness in the z direction\n            vec_EIyz (np.array): Bending stiffness in the yz direction\n        \"\"\"\n\n        if vec_EIyz is None:\n            vec_EIyz = np.zeros_like(vec_EA)\n\n        self.stiffness_db = np.zeros((len(vec_EA), 6, 6),)\n        for i in range(len(vec_EA)):\n            self.stiffness_db[i] = np.diag([vec_EA[i],\n                                            vec_GAy[i],\n                                            vec_GAz[i],\n                                            vec_GJ[i],\n                                            vec_EIy[i],\n                                            vec_EIz[i]])\n            self.stiffness_db[i][4, 5] = vec_EIyz[i]\n            self.stiffness_db[i][5, 4] = vec_EIyz[i]\n\n    def create_simple_connectivities(self):\n        \"\"\"\n        create_simple_connectivities\n\n        Create the matrix of connectivities for one single beam with the nodes\n        ordered in increasing xB direction\n        \"\"\"\n        self.connectivities = np.zeros((self.num_elem, self.num_node_elem),\n                                       dtype=int)\n        for ielem in range(self.num_elem):\n            self.connectivities[ielem, :] = (np.array([0, 2, 1], dtype=int) +\n                                             ielem*(self.num_node_elem - 1))\n\n    def rotate_around_origin(self, axis, angle):\n        \"\"\"\n        rotate_around_origin\n\n        Rotates a structure\n\n        Args:\n            axis (np.array): axis of rotation\n            angle (float): angle of rotation in radians\n        \"\"\"\n\n        rot = algebra.rotation_matrix_around_axis(axis, angle)\n        for inode in range(len(self.coordinates)):\n            self.coordinates[inode, :] = np.dot(rot, self.coordinates[inode, :])\n\n        for ielem in range(self.num_elem):\n            for inode in range(self.num_node_elem):\n                self.frame_of_reference_delta[ielem, inode, :] = np.dot(rot, self.frame_of_reference_delta[ielem, inode, :])\n\n    def compute_basic_num_elem(self):\n        \"\"\"\n        compute_basic_num_elem\n\n        It computes the number of elements when no nodes are shared between beams\n        \"\"\"\n        if ((self.num_node-1) % (self.num_node_elem-1)) == 0:\n            self.num_elem = int((self.num_node-1)/(self.num_node_elem-1))\n        else:\n            raise RuntimeError(\"The number of nodes cannot be converted into \" + self.num_node_elem + \"-noded elements\")\n\n    def compute_basic_num_node(self):\n        \"\"\"\n        compute_basic_num_node\n\n        It computes the number of nodes when no nodes are shared between beams\n        \"\"\"\n        self.num_node = self.num_elem*(self.num_node_elem-1) + 1\n\n    def generate_uniform_sym_beam(self,\n                                  node_pos,\n                                  mass_per_unit_length,\n                                  mass_iner,\n                                  EA,\n                                  GA,\n                                  GJ,\n                                  EI,\n                                  num_node_elem=3,\n                                  y_BFoR='y_AFoR',\n                                  num_lumped_mass=0,\n                                  num_lumped_mass_mat=0):\n        \"\"\"\n        generate_uniform_sym_beam\n\n        Generates the input data for SHARPy of a uniform symmetric beam\n\n        Args:\n            node_pos (np.array): coordinates of the nodes\n            mass_per_unit_length (float): mass per unit length\n            mass_iner (float): Inertia of the mass\n            EA (float): Axial stiffness\n            GA (float): Shear stiffness\n            GJ (float): Torsional stiffness\n            EI (float): Bending stiffness\n            num_node_elem (int): number of nodes per element\n            y_BFoR (str): orientation of the yB axis\n            num_lumped_mass (int): number of lumped masses\n        \"\"\"\n        self.generate_uniform_beam(node_pos,\n                                   mass_per_unit_length,\n                                   mass_iner,\n                                   mass_iner,\n                                   mass_iner,\n                                   np.zeros((3,),),\n                                   EA,\n                                   GA,\n                                   GA,\n                                   GJ,\n                                   EI,\n                                   EI,\n                                   num_node_elem,\n                                   y_BFoR,\n                                   num_lumped_mass,\n                                   num_lumped_mass_mat)\n\n    def generate_uniform_beam(self,\n                              node_pos,\n                              mass_per_unit_length,\n                              mass_iner_x,\n                              mass_iner_y,\n                              mass_iner_z,\n                              pos_cg_B,\n                              EA,\n                              GAy,\n                              GAz,\n                              GJ,\n                              EIy,\n                              EIz,\n                              num_node_elem=3,\n                              y_BFoR='y_AFoR',\n                              num_lumped_mass=0,\n                              num_lumped_mass_mat=0):\n        \"\"\"\n        generate_uniform_beam\n\n        Generates the input data for SHARPy of a uniform beam\n\n        Args:\n            node_pos (np.array): coordinates of the nodes\n            mass_per_unit_length (float): mass per unit length\n            mass_iner_x (float): Inertia of the mass in the x direction\n            mass_iner_y (float): Inertia of the mass in the y direction\n            mass_iner_z (float): Inertia of the mass in the z direction\n            pos_cg_B (np.array): position of the masses\n            EA (np.array): Axial stiffness\n            GAy (np.array): Shear stiffness in the y direction\n            GAz (np.array): Shear stiffness in the z direction\n            GJ (np.array): Torsional stiffness\n            EIy (np.array): Bending stiffness in the y direction\n            EIz (np.array): Bending stiffness in the z direction\n            num_node_elem (int): number of nodes per element\n            y_BFoR (str): orientation of the yB axis\n            num_lumped_mass (int): number of lumped masses\n            num_lumped_mass_mat (int): number of lumped masses given as matrices\n        \"\"\"\n        self.num_node = len(node_pos)\n        self.num_node_elem = num_node_elem\n        self.compute_basic_num_elem()\n\n        self.set_to_zero(self.num_node_elem, self.num_node, self.num_elem, 1, 1,\n                         num_lumped_mass, num_lumped_mass_mat)\n        self.coordinates = node_pos\n        self.create_simple_connectivities()\n        # self.create_mass_db_from_vector(np.ones((num_elem,),)*mass_per_unit_length,\n        #                                np.ones((num_elem,),)*mass_iner_x,\n        #                                np.ones((num_elem,),)*mass_iner_y,\n        #                                np.ones((num_elem,),)*mass_iner_z,\n        #                                np.ones((num_elem,),)*pos_cg_B])\n        # self.create_stiff_db_from_vector(np.ones((num_elem,),)*EA,\n        #                                 np.ones((num_elem,),)*GAy,\n        #                                 np.ones((num_elem,),)*GAz,\n        #                                 np.ones((num_elem,),)*GJ,\n        #                                 np.ones((num_elem,),)*EIy,\n        #                                 np.ones((num_elem,),)*EIz)\n        self.create_mass_db_from_vector(np.array([mass_per_unit_length]),\n                                       np.array([mass_iner_x]),\n                                       np.array([mass_iner_y]),\n                                       np.array([mass_iner_z]),\n                                       np.array([pos_cg_B]))\n        self.create_stiff_db_from_vector(np.array([EA]),\n                                        np.array([GAy]),\n                                        np.array([GAz]),\n                                        np.array([GJ]),\n                                        np.array([EIy]),\n                                        np.array([EIz]))\n        self.create_frame_of_reference_delta(y_BFoR)\n        self.boundary_conditions = np.zeros((self.num_node), dtype=int)\n\n\n    def add_lumped_mass(self, node, mass=None, inertia=None, pos=None, mat=None):\n        \"\"\"\n        Add lumped mass to structure\n        \n        node(int): Node where the lumped mass is to be placed\n\n        For lumped masses:\n        mass(float): Mass\n        inertia(np.array): 3x3 inertia matrix\n        pos(np.array): 3 coordinates of the mass position\n        \n        For lumped masses described as a 6x6 matrix:\n        mat(np.array): 6x6 mass and inertia matrix\n        \"\"\"\n\n        if (mass is not None) and (inertia is not None):\n            if pos is None:\n                pos = np.zeros((3))\n            if mat is not None:\n                raise ValueError(\"mass, inertia and mat cannot be defined at the same time\")\n\n            self.lumped_mass_nodes = define_or_concatenate(self.lumped_mass_nodes, np.array([node]), axis=0)\n            self.lumped_mass = define_or_concatenate(self.lumped_mass, np.array([mass]), axis=0)\n            self.lumped_mass_inertia = define_or_concatenate(self.lumped_mass_inertia, np.array([inertia]), axis=0)\n            self.lumped_mass_position = define_or_concatenate(self.lumped_mass_position, np.array([pos]), axis=0)\n\n        elif (mat is not None):\n            \n            self.lumped_mass_mat_nodes = define_or_concatenate(self.lumped_mass_mat_nodes, np.array([node]), axis=0)\n            self.lumped_mass_mat = define_or_concatenate(self.lumped_mass_mat, np.array([mat]), axis=0)\n\n\n    def assembly_structures(self, *args):\n        \"\"\"\n        assembly_structures\n\n        This function concatenates structures to be writen in the same h5 File\n\n        Args:\n            *args: list of StructuralInformation() to be meged into 'self'\n\n        Notes:\n            The structures does NOT merge any node (even if nodes are defined at the same coordinates)\n        \"\"\"\n\n        total_num_beam = max(self.beam_number)+1\n        total_num_body = max(self.body_number)+1\n        total_num_node = self.num_node\n        total_num_elem = self.num_elem\n        total_num_stiff = self.stiffness_db.shape[0]\n        total_num_mass = self.mass_db.shape[0]\n\n        for structure_to_add in args:\n\n            self.coordinates = np.concatenate((self.coordinates, structure_to_add.coordinates), axis=0)\n            self.connectivities = np.concatenate((self.connectivities, structure_to_add.connectivities + total_num_node), axis=0)\n            assert self.num_node_elem == structure_to_add.num_node_elem, \"num_node_elem does NOT match\"\n            self.stiffness_db = np.concatenate((self.stiffness_db, structure_to_add.stiffness_db), axis=0)\n            self.elem_stiffness = np.concatenate((self.elem_stiffness, structure_to_add.elem_stiffness + total_num_stiff), axis=0)\n            self.mass_db = np.concatenate((self.mass_db, structure_to_add.mass_db), axis=0)\n            self.elem_mass = np.concatenate((self.elem_mass, structure_to_add.elem_mass + total_num_mass), axis=0)\n            self.frame_of_reference_delta = np.concatenate((self.frame_of_reference_delta, structure_to_add.frame_of_reference_delta), axis=0)\n            self.structural_twist = np.concatenate((self.structural_twist, structure_to_add.structural_twist), axis=0)\n            self.boundary_conditions = np.concatenate((self.boundary_conditions, structure_to_add.boundary_conditions), axis=0)\n            self.beam_number = np.concatenate((self.beam_number, structure_to_add.beam_number + total_num_beam), axis=0)\n            self.body_number = np.concatenate((self.body_number, structure_to_add.body_number + total_num_body), axis=0)\n            self.app_forces = np.concatenate((self.app_forces, structure_to_add.app_forces), axis=0)\n            # self.body_number = np.concatenate((self.body_number, structure_to_add.body_number), axis=0)\n            if isinstance(self.lumped_mass_nodes, np.ndarray) and isinstance(structure_to_add.lumped_mass_nodes, np.ndarray):\n                self.lumped_mass_nodes = np.concatenate((self.lumped_mass_nodes, structure_to_add.lumped_mass_nodes + total_num_node), axis=0)\n                self.lumped_mass = np.concatenate((self.lumped_mass, structure_to_add.lumped_mass), axis=0)\n                self.lumped_mass_inertia = np.concatenate((self.lumped_mass_inertia, structure_to_add.lumped_mass_inertia), axis=0)\n                self.lumped_mass_position = np.concatenate((self.lumped_mass_position, structure_to_add.lumped_mass_position), axis=0)\n            elif isinstance(structure_to_add.lumped_mass_nodes, np.ndarray):\n                self.lumped_mass_nodes = structure_to_add.lumped_mass_nodes + total_num_node\n                self.lumped_mass = structure_to_add.lumped_mass\n                self.lumped_mass_inertia = structure_to_add.lumped_mass_inertia\n                self.lumped_mass_position = structure_to_add.lumped_mass_position\n            if isinstance(self.lumped_mass_mat_nodes, np.ndarray) and isinstance(structure_to_add.lumped_mass_mat_nodes, np.ndarray):\n                self.lumped_mass_mat_nodes = np.concatenate((self.lumped_mass_mat_nodes, structure_to_add.lumped_mass_mat_nodes + total_num_node), axis=0)\n                self.lumped_mass_mat = np.concatenate((self.lumped_mass_mat, structure_to_add.lumped_mass_mat), axis=0)\n            elif isinstance(structure_to_add.lumped_mass_mat_nodes, np.ndarray):\n                self.lumped_mass_mat_nodes = structure_to_add.lumped_mass_mat_nodes + total_num_node\n                self.lumped_mass_mat = structure_to_add.lumped_mass_mat\n\n            total_num_stiff += structure_to_add.stiffness_db.shape[0]\n            total_num_mass += structure_to_add.mass_db.shape[0]\n            total_num_beam += max(structure_to_add.beam_number) + 1\n            total_num_body += max(structure_to_add.body_number) + 1\n            total_num_node += structure_to_add.num_node\n            total_num_elem += structure_to_add.num_elem\n\n        self.num_node = total_num_node\n        self.num_elem = total_num_elem\n\n    def check_StructuralInformation(self):\n        \"\"\"\n        check_StructuralInformation\n\n        Check some properties of the StructuralInformation()\n\n        Notes:\n            These conditions have to be to correctly define a case but they are not the only ones\n        \"\"\"\n        # CHECKING\n        if(self.elem_stiffness.shape[0] != self.num_elem):\n            raise RuntimeError(\"ERROR: Element stiffness must be defined for each element\")\n        if(self.elem_mass.shape[0] != self.num_elem):\n            raise RuntimeError(\"ERROR: Element mass must be defined for each element\")\n        if(self.frame_of_reference_delta.shape[0] != self.num_elem):\n            raise RuntimeError(\"ERROR: The first dimension of FoR does not match the number of elements\")\n        if(self.frame_of_reference_delta.shape[1] != self.num_node_elem):\n            raise RuntimeError(\"ERROR: The second dimension of FoR does not match the number of nodes element\")\n        if(self.frame_of_reference_delta.shape[2] != 3):\n            raise RuntimeError(\"ERROR: The third dimension of FoR must be 3\")\n        if(self.structural_twist.shape[0] != self.num_elem):\n            raise RuntimeError(\"ERROR: The structural twist must be defined for each element\")\n        if(self.boundary_conditions.shape[0] != self.num_node):\n            raise RuntimeError(\"ERROR: The boundary conditions must be defined for each node\")\n        if(self.beam_number.shape[0] != self.num_elem):\n            raise RuntimeError(\"ERROR: The beam number must be defined for each element\")\n        if(self.app_forces.shape[0] != self.num_node):\n            raise RuntimeError(\"ERROR: The first dimension of the applied forces matrix does not match the number of nodes\")\n        if(self.app_forces.shape[1] != 6):\n            raise RuntimeError(\"ERROR: The second dimension of the applied forces matrix must be 6\")\n\n        default = StructuralInformation()\n\n        for attr, value in self.__dict__.items():\n            if not hasattr(default, attr):\n                raise RuntimeError((\"StructuralInformation has no attribute named '%s'\" % attr))\n\n    def generate_fem_file(self, route, case_name):\n        \"\"\"\n        generate_fem_file\n\n        Writes the h5 file with the structural information\n\n        Args:\n            route (string): path of the case\n            case_name (string): name of the case\n        \"\"\"\n    \t# TODO: check variables that are not defined\n        self.check_StructuralInformation()\n        # Writting the file\n        with h5.File(route + '/' + case_name + '.fem.h5', 'a') as h5file:\n            # TODO: include something to write only exsisting variables\n            h5file.create_dataset('coordinates', data=self.coordinates)\n            h5file.create_dataset('connectivities', data=self.connectivities)\n            h5file.create_dataset('num_node_elem', data=self.num_node_elem)\n            h5file.create_dataset('num_node', data=self.num_node)\n            h5file.create_dataset('num_elem', data=self.num_elem)\n            h5file.create_dataset('stiffness_db', data=self.stiffness_db)\n            h5file.create_dataset('elem_stiffness', data=self.elem_stiffness)\n            h5file.create_dataset('mass_db', data=self.mass_db)\n            h5file.create_dataset('elem_mass', data=self.elem_mass)\n            h5file.create_dataset('frame_of_reference_delta', data=self.frame_of_reference_delta)\n            h5file.create_dataset('structural_twist', data=self.structural_twist)\n            h5file.create_dataset('boundary_conditions', data=self.boundary_conditions)\n            h5file.create_dataset('beam_number', data=self.beam_number)\n            h5file.create_dataset('body_number', data=self.body_number)\n            h5file.create_dataset('app_forces', data=self.app_forces)\n            # h5file.create_dataset('body_number', data=self.body_number)\n            if isinstance(self.lumped_mass_nodes, np.ndarray):\n                h5file.create_dataset('lumped_mass_nodes', data=self.lumped_mass_nodes)\n                h5file.create_dataset('lumped_mass', data=self.lumped_mass)\n                h5file.create_dataset('lumped_mass_inertia', data=self.lumped_mass_inertia)\n                h5file.create_dataset('lumped_mass_position', data=self.lumped_mass_position)\n            if isinstance(self.lumped_mass_mat_nodes, np.ndarray):\n                h5file.create_dataset('lumped_mass_mat_nodes', data=self.lumped_mass_mat_nodes)\n                h5file.create_dataset('lumped_mass_mat', data=self.lumped_mass_mat)\n\n\n######################################################################\n###############  BLADE AERODYNAMIC INFORMATION  ######################\n######################################################################\nclass AerodynamicInformation():\n    \"\"\"\n    AerodynamicInformation\n\n    Aerodynamic information needed to build a case\n\n    Note:\n        It should be defined after the StructuralInformation of the case\n    \"\"\"\n\n    def __init__(self):\n        \"\"\"\n        __init__\n\n        Initialization\n        \"\"\"\n        self.aero_node = None\n        self.chord = None\n        self.twist = None\n        self.sweep = None\n        self.surface_m = None\n        self.surface_distribution = None\n        self.m_distribution = None\n        self.elastic_axis = None\n        self.airfoil_distribution = None\n        # TODO: allow airfoils to be of different length (like user_defined_m_distribution)\n        self.airfoils = None\n        self.user_defined_m_distribution = [None]\n        # TODO: Define the following variables at some point\n        # self.control_surface = None\n        # self.control_surface_type = None\n        # self.control_surface_deflection = None\n        # self.control_surface_chord = None\n        # self.control_surface_hinge_coords = None\n        self.polars = None\n        self.first_twist = [None]\n\n    def copy(self):\n        \"\"\"\n        copy\n\n        Returns a copy of the object\n\n        Returns:\n            copied(AerodynamicInformation): new object with the same properties\n        \"\"\"\n        copied = AerodynamicInformation()\n\n        copied.aero_node = self.aero_node.astype(dtype=bool, copy=True)\n        copied.chord = self.chord.astype(dtype=float, copy=True)\n        copied.twist = self.twist.astype(dtype=float, copy=True)\n        copied.sweep = self.sweep.astype(dtype=float, copy=True)\n        copied.surface_m = self.surface_m.astype(dtype=int, copy=True)\n        copied.surface_distribution = self.surface_distribution.astype(dtype=int, copy=True)\n        copied.m_distribution = self.m_distribution\n        copied.elastic_axis = self.elastic_axis.astype(dtype=float, copy=True)\n        copied.airfoil_distribution = self.airfoil_distribution.astype(dtype=int, copy=True)\n        copied.airfoils = self.airfoils.astype(dtype=float, copy=True)\n        copied.user_defined_m_distribution = self.user_defined_m_distribution.copy()\n        if self.polars is not None:\n            copied.polars = self.polars.copy()\n        copied.first_twist = self.first_twist.copy()\n\n        return copied\n\n    def set_to_zero(self, num_node_elem, num_node, num_elem,\n                    num_airfoils=1, num_surfaces=0, num_points_camber=100):\n        \"\"\"\n        set_to_zero\n\n        Sets to zero all the variables\n\n        Args:\n            num_node_elem (int): number of nodes per element\n            num_node (int): number of nodes\n            num_elem (int): number of elements\n            num_airfoils (int): number of different airfoils\n            num_surfaces (int): number of aerodynamic surfaces\n            num_points_camber (int): number of points to define the camber line of the airfoil\n        \"\"\"\n        self.aero_node = np.zeros((num_node,), dtype=bool)\n        self.chord = np.ones((num_elem, num_node_elem), dtype=float)\n        self.twist = np.zeros((num_elem, num_node_elem), dtype=float)\n        self.sweep = np.zeros((num_elem, num_node_elem), dtype=float)\n        # TODO: SHARPy does not ignore the surface_m when the surface is not aerodynamic\n        self.surface_m = np.array([], dtype=int)\n        # self.surface_m = np.array([], dtype=int)\n        self.surface_distribution = np.zeros((num_elem,), dtype=int) - 1\n        self.m_distribution = 'uniform'\n        self.elastic_axis = np.zeros((num_elem, num_node_elem), dtype=float)\n        self.airfoil_distribution = np.zeros((num_elem, num_node_elem), dtype=int)\n        self.airfoils = np.zeros((num_airfoils, num_points_camber, 2), dtype=float)\n        for iairfoil in range(num_airfoils):\n            self.airfoils[iairfoil, :, 0] = np.linspace(0.0, 1.0, num_points_camber)\n        self.first_twist = [True]\n\n    def generate_full_aerodynamics(self,\n                                   aero_node,\n                                   chord,\n                                   twist,\n                                   sweep,\n                                   surface_m,\n                                   surface_distribution,\n                                   m_distribution,\n                                   elastic_axis,\n                                   airfoil_distribution,\n                                   airfoils,\n                                   first_twist):\n        \"\"\"\n        generate_full_aerodynamics\n\n        Defines the whole case from the appropiated variables\n\n        Args:\n            aero_node (np.array): defines if a node has aerodynamic properties or not\n            chord (np.array): chord of the elements\n            twist (np.array): twist of the elements\n            sweep (np.array): sweep of the elements\n            surface_m (np.array): Number of panels in the chord direction\n            surface_distribution (np.array): Surface at which each element belongs\n            m_distribution (str): distribution of the panels along the chord\n            elastic_axis (np.array): position of the elastic axis in the chord\n            airfoil_distribution (np.array): airfoil at each element node\n            airfoils (np.array): coordinates of the camber lines of the airfoils\n            first_twist (list(bool)): Apply the twist rotation before the sweep\n        \"\"\"\n\n        self.aero_node = aero_node\n        self.chord = chord\n        self.twist = twist\n        self.sweep = sweep\n        self.surface_m = surface_m\n        self.surface_distribution = surface_distribution\n        self.m_distribution = m_distribution\n        self.elastic_axis = elastic_axis\n        self.airfoil_distribution = airfoil_distribution\n        self.airfoils = airfoils\n        self.first_twist = first_twist\n\n    def create_aerodynamics_from_vec(self,\n                                     StructuralInformation,\n                                     vec_aero_node,\n                                     vec_chord,\n                                     vec_twist,\n                                     vec_sweep,\n                                     vec_surface_m,\n                                     vec_surface_distribution,\n                                     vec_m_distribution,\n                                     vec_elastic_axis,\n                                     vec_airfoil_distribution,\n                                     airfoils,\n                                     user_defined_m_distribution=None,\n                                     first_twist=True):\n        \"\"\"\n        create_aerodynamics_from_vec\n\n        Defines the whole case from the appropiated variables in vector form (associated to nodes)\n\n        Args:\n            StructuralInformation (StructuralInformation): Structural infromation of the case\n            vec_aero_node (np.array): defines if a node has aerodynamic properties or not\n            vec_chord (np.array): chord of the nodes\n            vec_twist (np.array): twist of the nodes\n            vec_sweep (np.array): sweep of the nodes\n            vec_surface_m (np.array): Number of panels in the chord direction\n            vec_surface_distribution (np.array): Surface at which each element belongs\n            vec_m_distribution (np.array): distribution of the panels along the chord\n            vec_elastic_axis (np.array): position of the elastic axis in the chord\n            vec_airfoil_distribution (np.array): airfoil at each element node\n            airfoils (np.array): coordinates of the camber lines of the airfoils\n            first_twist (bool): Apply the twist rotation before the sweep\n        \"\"\"\n        self.aero_node = vec_aero_node\n\n        self.chord = from_node_list_to_elem_matrix(vec_chord, StructuralInformation.connectivities)\n        self.twist = from_node_list_to_elem_matrix(vec_twist, StructuralInformation.connectivities)\n        self.sweep = from_node_list_to_elem_matrix(vec_sweep, StructuralInformation.connectivities)\n        self.elastic_axis = from_node_list_to_elem_matrix(vec_elastic_axis, StructuralInformation.connectivities)\n        self.airfoil_distribution = from_node_list_to_elem_matrix(vec_airfoil_distribution, StructuralInformation.connectivities)\n\n        self.surface_m = vec_surface_m\n        self.surface_distribution = vec_surface_distribution\n        self.m_distribution = vec_m_distribution\n\n        self.airfoils = airfoils\n\n        # TODO: this may not work for different surfaces\n        if vec_m_distribution == 'user_defined':\n            udmd_by_elements = from_node_array_to_elem_matrix(user_defined_m_distribution, StructuralInformation.connectivities)\n            self.user_defined_m_distribution = [udmd_by_elements]\n\n        self.first_twist = [first_twist]\n\n    def create_one_uniform_aerodynamics(self,\n                                     StructuralInformation,\n                                     chord,\n                                     twist,\n                                     sweep,\n                                     num_chord_panels,\n                                     m_distribution,\n                                     elastic_axis,\n                                     num_points_camber,\n                                     airfoil,\n                                     first_twist=True):\n        \"\"\"\n        create_one_uniform_aerodynamics\n\n        Defines the whole case from the appropiated variables constant at every point\n\n        Args:\n            StructuralInformation (StructuralInformation): Structural infromation of the case\n            chord (float): chord\n            twist (float): twist\n            sweep (float): sweep\n            num_chord_panels (int): Number of panels in the chord direction\n            m_distribution (str): distribution of the panels along the chord\n            elastic_axis (float): position of the elastic axis in the chord\n            num_points_camber (int): Number of points to define the camber line\n            airfoils (np.array): coordinates of the camber lines of the airfoils\n            first_twist (bool): Apply the twist rotation before the sweep\n        \"\"\"\n        num_node = StructuralInformation.num_node\n        num_node_elem = StructuralInformation.num_node_elem\n        num_elem = StructuralInformation.num_elem\n\n        self.aero_node = np.ones((num_node,), dtype = bool)\n        self.chord = chord*np.ones((num_elem, num_node_elem), dtype=float)\n        self.twist = twist*np.ones((num_elem, num_node_elem), dtype=float)\n        self.sweep = sweep*np.ones((num_elem, num_node_elem), dtype=float)\n        # TODO: SHARPy does not ignore the surface_m when the surface is not aerodynamic\n        #self.surface_m = np.array([0], dtype = int)\n        self.surface_m = np.array([num_chord_panels], dtype=int)\n        self.surface_distribution = np.zeros((num_elem,), dtype=int)\n        self.m_distribution = m_distribution\n        self.elastic_axis = elastic_axis*np.ones((num_elem, num_node_elem), dtype=float)\n        self.airfoil_distribution = np.zeros((num_elem, num_node_elem), dtype=int)\n        self.airfoils = np.zeros((1, num_points_camber, 2), dtype=float)\n        self.airfoils = airfoil\n\n        if m_distribution == 'user_defined':\n            self.user_defined_m_distribution = []\n            self.user_defined_m_distribution.append(np.zeros((num_chord_panels + 1, num_elem, num_node_elem)))\n\n        self.first_twist = [first_twist]\n\n    def change_airfoils_discretezation(self, airfoils, new_num_nodes):\n        \"\"\"\n        change_airfoils_discretezation\n\n        Changes the discretization of the matrix of airfoil coordinates\n\n        Args:\n            airfoils (np.array): Matrix with the x-y coordinates of all the airfoils to be modified\n            new_num_nodes (int): Number of points that the output coordinates will have\n\n        Return:\n            new_airfoils (np.array): Matrix with the x-y coordinates of all the airfoils with the new discretization\n\n        \"\"\"\n        nairfoils = airfoils.shape[0]\n        new_airfoils = np.zeros((nairfoils, new_num_nodes, 2), dtype=float)\n\n        for iairfoil in range(nairfoils):\n            new_airfoils[iairfoil, :, 0] = np.linspace(airfoils[iairfoil, 0, 0], airfoils[iairfoil, -1, 0], new_num_nodes)\n            new_airfoils[iairfoil, :, 1] = np.interp(new_airfoils[iairfoil, :, 0], airfoils[iairfoil, :, 0], airfoils[iairfoil, :, 1])\n\n        return new_airfoils\n\n    def assembly_aerodynamics(self, *args):\n        \"\"\"\n        assembly_aerodynamics\n\n        This function concatenates aerodynamic properties to be writen in the same h5 File\n\n        Args:\n            *args: list of AerodynamicInformation() to be meged into 'self'\n        \"\"\"\n\n        total_num_airfoils = len(self.airfoils[:, 0, 0])\n        # total_num_surfaces = len(self.surface_m)\n        total_num_surfaces = np.sum(self.surface_m != -1)\n        # TODO: check why I only need one definition of m and not one per surface\n\n        for aerodynamics_to_add in args:\n            self.chord = np.concatenate((self.chord, aerodynamics_to_add.chord), axis=0)\n            self.twist = np.concatenate((self.twist, aerodynamics_to_add.twist), axis=0)\n            self.sweep = np.concatenate((self.sweep, aerodynamics_to_add.sweep), axis=0)\n            # self.m_distribution = np.concatenate((self.m_distribution, aerodynamics_to_add.m_distribution), axis=0)\n            assert self.m_distribution == aerodynamics_to_add.m_distribution, \"m_distribution does not match\"\n            for isurf in range(len(aerodynamics_to_add.surface_distribution)):\n                if aerodynamics_to_add.surface_distribution[isurf] != -1:\n                    # print(self.surface_distribution)\n                    # print(aerodynamics_to_add.surface_distribution[isurf])\n                    self.surface_distribution = np.concatenate((self.surface_distribution, np.array([aerodynamics_to_add.surface_distribution[isurf]], dtype=int) + total_num_surfaces), axis=0)\n                else:\n                    self.surface_distribution = np.concatenate((self.surface_distribution, np.array([aerodynamics_to_add.surface_distribution[isurf]], dtype=int)), axis=0)\n            self.surface_m = np.concatenate((self.surface_m, aerodynamics_to_add.surface_m), axis=0)\n            self.aero_node = np.concatenate((self.aero_node, aerodynamics_to_add.aero_node), axis=0)\n            self.elastic_axis = np.concatenate((self.elastic_axis, aerodynamics_to_add.elastic_axis), axis=0)\n            # np.concatenate((self.airfoil_distribution, aerodynamics_to_add.airfoil_distribution), axis=0)\n            self.airfoil_distribution = np.concatenate((self.airfoil_distribution, aerodynamics_to_add.airfoil_distribution + total_num_airfoils), axis=0)\n            # TODO: this should NOT be needed according to SHARPy input files. Modify at some point\n            if (self.airfoils.shape[1] == aerodynamics_to_add.airfoils.shape[1]):\n                self.airfoils = np.concatenate((self.airfoils, aerodynamics_to_add.airfoils), axis=0)\n            elif (self.airfoils.shape[1] > aerodynamics_to_add.airfoils.shape[1]):\n                cout.cout_wrap(\"WARNING: redefining the discretization of airfoil camber line\", 3)\n                new_airfoils = self.change_airfoils_discretezation(aerodynamics_to_add.airfoils, self.airfoils.shape[1])\n                self.airfoils = np.concatenate((self.airfoils, new_airfoils), axis=0)\n            elif (self.airfoils.shape[1] < aerodynamics_to_add.airfoils.shape[1]):\n                cout.cout_wrap(\"WARNING: redefining the discretization of airfoil camber line\", 3)\n                new_airfoils = self.change_airfoils_discretezation(self.airfoils, aerodynamics_to_add.airfoils.shape[1])\n                self.airfoils = np.concatenate((new_airfoils, aerodynamics_to_add.airfoils), axis=0)\n            if self.m_distribution.lower() == 'user_defined':\n                self.user_defined_m_distribution = self.user_defined_m_distribution + aerodynamics_to_add.user_defined_m_distribution\n            if self.polars is not None:\n                self.polars = np.array([self.polars, aerodynamics_to_add.polars])\n            total_num_airfoils += len(aerodynamics_to_add.airfoils[:, 0, 0])\n            # total_num_surfaces += len(aerodynamics_to_add.surface_m)\n            total_num_surfaces += np.sum(aerodynamics_to_add.surface_m != -1)\n\n            self.first_twist.extend(aerodynamics_to_add.first_twist)\n        # self.num_airfoils = total_num_airfoils\n        # self.num_surfaces = total_num_surfaces\n\n    def interpolate_airfoils_camber(self, pure_airfoils_camber, r_pure_airfoils, r, n_points_camber):\n        \"\"\"\n        interpolate_airfoils_camber\n\n        Create the camber of the airfoil at each node position from the camber of the\n        pure airfoils present in the blade\n\n        Args:\n            pure_airfoils_camber (np.array): xy coordinates of the camber lines of the pure airfoils\n            r_pure_airfoils (np.array): radial position of the pure airfoils\n            r (np.array): radial positions to compute the camber lines through linear interpolation\n\n        Returns:\n            airfoils_camber (np.array): camber lines at the new radial positions\n\n        \"\"\"\n        num_node = len(r)\n        airfoils_camber = np.zeros((num_node, n_points_camber, 2),)\n\n        for inode in range(num_node):\n            # camber_x, camber_y = get_airfoil_camber(x,y)\n\n            iairfoil = 0\n            while(r[inode] > r_pure_airfoils[iairfoil]):\n                iairfoil += 1\n                if(iairfoil == len(r_pure_airfoils)):\n                    iairfoil -= 1\n                    break\n\n            # print(\"interpolating between: \", iairfoil-1, \"and\", iairfoil)\n            beta = min((r[inode]-r_pure_airfoils[iairfoil-1])/(r_pure_airfoils[iairfoil]-r_pure_airfoils[iairfoil-1]), 1.0)\n            beta = max(0.0, beta)\n\n            airfoils_camber[inode, :, 0] = (1 - beta)*pure_airfoils_camber[iairfoil-1, :, 0] + beta*pure_airfoils_camber[iairfoil, :, 0]\n            airfoils_camber[inode, :, 1] = (1 - beta)*pure_airfoils_camber[iairfoil-1, :, 1] + beta*pure_airfoils_camber[iairfoil, :, 1]\n\n        return airfoils_camber\n\n    def interpolate_airfoils_camber_thickness(self, pure_airfoils_camber, thickness_pure_airfoils, blade_thickness, n_points_camber):\n        \"\"\"\n        interpolate_airfoils_camber_thickness\n\n        Create the camber of the airfoil at each node position from the camber of the\n        pure airfoils present in the blade based on the thickness\n\n        Args:\n            pure_airfoils_camber (np.array): xy coordinates of the camber lines of the pure airfoils\n            thicknesss_pure_airfoils (np.array): thickness of the pure airfoils\n            blade_thickness (np.array): thickness of the blade positions\n\n        Returns:\n            airfoils_camber (np.array): camber lines at the new radial positions\n\n        \"\"\"\n        num_node = len(blade_thickness)\n        airfoils_camber = np.zeros((num_node, n_points_camber, 2),)\n\n        for inode in range(num_node):\n            # camber_x, camber_y = get_airfoil_camber(x,y)\n\n            iairfoil = 0\n            while(blade_thickness[inode] < thickness_pure_airfoils[iairfoil]):\n                iairfoil += 1\n                if(iairfoil == len(thickness_pure_airfoils)):\n                    iairfoil -= 1\n                    break\n\n            beta = min((blade_thickness[inode] - thickness_pure_airfoils[iairfoil - 1])/(thickness_pure_airfoils[iairfoil] - thickness_pure_airfoils[iairfoil - 1]), 1.0)\n            beta = max(0.0, beta)\n\n            airfoils_camber[inode, :, 0] = (1 - beta)*pure_airfoils_camber[iairfoil-1, :, 0] + beta*pure_airfoils_camber[iairfoil, :, 0]\n            airfoils_camber[inode, :, 1] = (1 - beta)*pure_airfoils_camber[iairfoil-1, :, 1] + beta*pure_airfoils_camber[iairfoil, :, 1]\n\n        return airfoils_camber\n\n    def check_AerodynamicInformation(self, StructuralInformation):\n        \"\"\"\n        check_AerodynamicInformation\n\n        Check some properties of the AerodynamicInformation()\n\n        Notes:\n            These conditions have to be to correctly define a case but they are not the only ones\n        \"\"\"\n        # CHECKING\n        if(self.aero_node.shape[0] != StructuralInformation.num_node):\n            raise RuntimeError(\"ERROR: Aero node must be defined for each node\")\n        if(self.airfoil_distribution.shape[0] != StructuralInformation.num_elem or self.airfoil_distribution.shape[1] != StructuralInformation.num_node_elem):\n            raise RuntimeError(\"ERROR: Airfoil distribution must be defined for each element/local node\")\n        if(self.chord.shape[0] != StructuralInformation.num_elem):\n            raise RuntimeError(\"ERROR: The first dimension of the chord matrix does not match the number of elements\")\n        if(self.chord.shape[1] != StructuralInformation.num_node_elem):\n            raise RuntimeError(\"ERROR: The second dimension of the chord matrix does not match the number of nodes per element\")\n        if(self.elastic_axis.shape[0] != StructuralInformation.num_elem):\n            raise RuntimeError(\"ERROR: The first dimension of the elastic axis matrix does not match the number of elements\")\n        if(self.elastic_axis.shape[1] != StructuralInformation.num_node_elem):\n            raise RuntimeError(\"ERROR: The second dimension of the elastic axis matrix does not match the number of nodes per element\")\n        if(self.surface_distribution.shape[0] != StructuralInformation.num_elem):\n            raise RuntimeError(\"ERROR: The surface distribution must be defined for each element\")\n        if(self.twist.shape[0] != StructuralInformation.num_elem):\n            raise RuntimeError(\"ERROR: The first dimension of the aerodynamic twist does not match the number of elements\")\n        if(self.twist.shape[1] != StructuralInformation.num_node_elem):\n            raise RuntimeError(\"ERROR: The second dimension of the aerodynamic twist does not match the number nodes per element\")\n\n        default = AerodynamicInformation()\n\n        for attr, value in self.__dict__.items():\n            if not hasattr(default, attr):\n                raise RuntimeError((\"AerodynamicInformation has no attribute named '%s'\" % attr))\n\n    def generate_aero_file(self, route, case_name, StructuralInformation):\n        \"\"\"\n        generate_aero_file\n\n        Writes the h5 file with the aerodynamic information\n\n        Args:\n            route (string): path of the case\n            case_name (string): name of the case\n        \"\"\"\n        self.check_AerodynamicInformation(StructuralInformation)\n\n        with h5.File(route + '/' + case_name + '.aero.h5', 'a') as h5file:\n\n            h5file.create_dataset('aero_node', data=self.aero_node)\n            chord_input = h5file.create_dataset('chord', data=self.chord)\n            chord_input .attrs['units'] = 'm'\n            twist_input = h5file.create_dataset('twist', data=self.twist)\n            twist_input.attrs['units'] = 'rad'\n            h5file.create_dataset('surface_m', data=self.surface_m)\n            h5file.create_dataset('surface_distribution', data=self.surface_distribution)\n            h5file.create_dataset('m_distribution', data=self.m_distribution.encode('ascii', 'ignore'))\n            h5file.create_dataset('elastic_axis', data=self.elastic_axis)\n            h5file.create_dataset('airfoil_distribution', data=self.airfoil_distribution)\n            h5file.create_dataset('sweep', data=self.sweep)\n           \n            h5file.create_dataset('first_twist', data=np.array(self.first_twist))\n\n            airfoils_group = h5file.create_group('airfoils')\n            for iairfoil in range(len(self.airfoils)):\n                airfoils_group.create_dataset(\"%d\" % iairfoil, data=self.airfoils[iairfoil, :, :])\n\n            if self.polars is not None:\n                polars_group = h5file.create_group('polars')\n                for iairfoil in range(len(self.airfoils)):\n                    polars_group.create_dataset(\"%d\" % iairfoil, data=self.polars[iairfoil])\n\n            if self.m_distribution.lower() == 'user_defined':\n                udmd_group = h5file.create_group('user_defined_m_distribution')\n                for isurf in range(len(self.user_defined_m_distribution)):\n                    udmd_group.create_dataset(\"%d\" % isurf, data=self.user_defined_m_distribution[isurf])\n\n            # control_surface_input = h5file.create_dataset('control_surface', data=control_surface)\n            # control_surface_deflection_input = h5file.create_dataset('control_surface_deflection', data=control_surface_deflection)\n            # control_surface_chord_input = h5file.create_dataset('control_surface_chord', data=control_surface_chord)\n            # control_surface_types_input = h5file.create_dataset('control_surface_type', data=control_surface_type)\n\n\n######################################################################\n###############  BLADE AEROELASTIC INFORMATION  ######################\n######################################################################\nclass AeroelasticInformation():\n    \"\"\"\n    AeroelasticInformation\n\n    Structural and aerodynamic information needed to build a case\n    \"\"\"\n\n    def __init__(self):\n        \"\"\"\n        __init__\n\n        Initialization\n        \"\"\"\n        self.StructuralInformation = StructuralInformation()\n        self.AerodynamicInformation = AerodynamicInformation()\n\n    def generate(self, StructuralInformation, AerodynamicInformation):\n        \"\"\"\n        generate\n\n        Generates an object from the structural and the aerodynamic information\n\n        Args:\n            StructuralInformation (StructuralInformation): structural information\n            AerodynamicInformation (AerodynamicInformation): aerodynamic information\n        \"\"\"\n        self.StructuralInformation = StructuralInformation.copy()\n        self.AerodynamicInformation = AerodynamicInformation.copy()\n\n    def assembly(self, *args):\n        \"\"\"\n        assembly\n\n        This function concatenates structures and aerodynamic properties to be writen in the same h5 File\n\n        Args:\n            *args: list of AeroelasticInformation() to be meged into 'self'\n\n        Notes:\n        \"\"\"\n        list_of_SI = []\n        list_of_AI = []\n\n        for AEI in args:\n            list_of_SI.append(AEI.StructuralInformation)\n            list_of_AI.append(AEI.AerodynamicInformation)\n\n        self.StructuralInformation.assembly_structures(*list_of_SI)\n        self.AerodynamicInformation.assembly_aerodynamics(*list_of_AI)\n\n    def remove_duplicated_points(self, tol, skip=[]):\n        \"\"\"\n        remove_duplicated_points\n\n        Removes the points that are closer than 'tol' and modifies the aeroelastic information accordingly\n\n        Args:\n            tol (float): tolerance. Maximum distance between nodes to be merged\n            skip (list): nodes to keep (do not remove)\n\n        Notes:\n            This function will not work if an element or an aerdoynamic surface is completely eliminated\n            This function only checks geometrical proximity, not aeroelastic properties as a merging criteria\n        \"\"\"\n\n        def find_connectivities_index(connectivities, iprev_node):\n            icon = 0\n            jcon = 0\n            found = False\n            while ((icon < connectivities.shape[0]) and (not found)):\n                jcon = 0\n                while ((jcon < connectivities.shape[1]) and (not found)):\n                    if connectivities[icon, jcon] == iprev_node:\n                        found = True\n                    jcon += 1\n                icon += 1\n            return icon-1, jcon-1\n\n        replace_matrix = (\n                np.zeros((self.StructuralInformation.num_node, 4), dtype=int) -\n                 np.array([1, 1, 1, 0]))\n        # Fill the first three columns\n        for inode in range(self.StructuralInformation.num_node):\n            for iprev_node in range(inode):\n                if ((np.linalg.norm(\n                    self.StructuralInformation.coordinates[inode, :] -\n                    self.StructuralInformation.coordinates[iprev_node, :]) < tol) and (\n                       inode not in skip)):\n                    cout.cout_wrap((\"WARNING: Replacing node %d by node %d\" % (inode, iprev_node)), 3)\n                    replace_matrix[inode, 0] = iprev_node\n                    replace_matrix[inode, 1], replace_matrix[inode, 2] = (\n                        find_connectivities_index(\n                                self.StructuralInformation.connectivities,\n                                                                    iprev_node))\n                    break\n\n        # Fill the last column\n        for inode in range(self.StructuralInformation.num_node):\n            if not (replace_matrix[inode, 0] == -1):\n                # 'inode' is a node to be replaced\n                replace_matrix[inode, 3] = -1\n                for inode2 in range(inode + 1, self.StructuralInformation.num_node):\n                    if not (replace_matrix[inode2, 0] == -1):\n                        # 'inode2' is also a node to be replaced\n                        replace_matrix[inode2, 3] = -1\n                    else:\n                        replace_matrix[inode2, 3] += 1\n\n        nodes_to_keep = replace_matrix[:, 0] == -1\n\n        # Delete the structural variables associated to the node\n        self.StructuralInformation.coordinates = (\n                self.StructuralInformation.coordinates[nodes_to_keep, :])\n        # self.StructuralInformation.elem_stiffness = (\n        #         self.StructuralInformation.elem_stiffness[nodes_to_keep])\n        # self.StructuralInformation.elem_mass = (\n        #         self.StructuralInformation.elem_mass[nodes_to_keep])\n        # self.StructuralInformation.structural_twist = (\n        #         self.StructuralInformation.structural_twist[nodes_to_keep])\n        self.StructuralInformation.boundary_conditions = (\n                self.StructuralInformation.boundary_conditions[nodes_to_keep])\n        # self.StructuralInformation.beam_number = (\n        #         self.StructuralInformation.beam_number[nodes_to_keep])\n        self.StructuralInformation.app_forces = (\n                self.StructuralInformation.app_forces[nodes_to_keep, :])\n        # self.StructuralInformation.frame_of_reference_delta = (\n        # self.StructuralInformation.frame_of_reference_delta[nodes_to_keep,:,:])\n        self.AerodynamicInformation.aero_node = (\n                self.AerodynamicInformation.aero_node[nodes_to_keep])\n\n        # Delete lumped masses\n        if isinstance(self.StructuralInformation.lumped_mass_nodes, np.ndarray):\n            lumped_to_keep = nodes_to_keep[self.StructuralInformation.lumped_mass_nodes]\n            self.StructuralInformation.lumped_mass_nodes = (\n                self.StructuralInformation.lumped_mass_nodes[lumped_to_keep])\n            self.StructuralInformation.lumped_mass = (\n                self.StructuralInformation.lumped_mass[lumped_to_keep])\n            self.StructuralInformation.lumped_mass_inertia = (\n                self.StructuralInformation.lumped_mass_inertia[lumped_to_keep])\n            self.StructuralInformation.lumped_mass_position = (\n                self.StructuralInformation.lumped_mass_position[lumped_to_keep, :])\n\n        # Modify connectivities and matrices in ielem,inode_in_elem shape\n        for icon in range(self.StructuralInformation.num_elem):\n            for jcon in range(self.StructuralInformation.num_node_elem):\n                inode = self.StructuralInformation.connectivities[icon, jcon]\n                if not replace_matrix[inode, 0] == -1:\n                    # inode to be replaced\n                    self.StructuralInformation.connectivities[icon, jcon] = self.StructuralInformation.connectivities[replace_matrix[inode, 1], replace_matrix[inode, 2]]\n                    self.StructuralInformation.structural_twist[icon, jcon] = (\n                        self.StructuralInformation.structural_twist[replace_matrix[inode, 1], replace_matrix[inode, 2]])\n                    self.AerodynamicInformation.chord[icon, jcon] = (\n                        self.AerodynamicInformation.chord[replace_matrix[inode, 1], replace_matrix[inode, 2]])\n                    self.AerodynamicInformation.twist[icon, jcon] = (\n                        self.AerodynamicInformation.twist[replace_matrix[inode, 1], replace_matrix[inode, 2]])\n                    self.AerodynamicInformation.sweep[icon, jcon] = (\n                        self.AerodynamicInformation.sweep[replace_matrix[inode, 1], replace_matrix[inode, 2]])\n                    self.AerodynamicInformation.elastic_axis[icon, jcon] = (\n                        self.AerodynamicInformation.elastic_axis[replace_matrix[inode, 1], replace_matrix[inode, 2]])\n                    self.AerodynamicInformation.airfoil_distribution[icon, jcon] = (\n                        self.AerodynamicInformation.airfoil_distribution[replace_matrix[inode, 1], replace_matrix[inode, 2]])\n                else:\n                    # inode NOT to be replace\n                    self.StructuralInformation.connectivities[icon, jcon] -= replace_matrix[inode, 3]\n\n        if isinstance(self.StructuralInformation.lumped_mass_nodes, np.ndarray):\n            for ilumped in range(len(self.StructuralInformation.lumped_mass_nodes)):\n                inode = self.StructuralInformation.lumped_mass_nodes[ilumped]\n                if not replace_matrix[inode, 0] == -1:\n                    self.StructuralInformation.lumped_mass_nodes[ilumped] = self.StructuralInformation.connectivities[replace_matrix[inode, 1], replace_matrix[inode, 2]]\n                else:\n                    self.StructuralInformation.lumped_mass_nodes[ilumped] -= replace_matrix[inode, 3]\n\n        self.StructuralInformation.num_node = nodes_to_keep.sum()\n\n        # TODO: this function will not work if elements or aerodynamic surfaces are completely eliminated\n\n    def copy(self):\n        \"\"\"\n        copy\n\n        Returns a copy of the object\n\n        Returns:\n            copied(AeroelasticInformation): new object with the same properties\n        \"\"\"\n        copied = AeroelasticInformation()\n\n        copied.StructuralInformation = self.StructuralInformation.copy()\n        copied.AerodynamicInformation = self.AerodynamicInformation.copy()\n\n        return copied\n\n    def check(self):\n\n        default = AeroelasticInformation()\n\n        for attr, value in self.__dict__.items():\n            if not hasattr(default, attr):\n                raise RuntimeError((\"AeroelasticInformation has no attribute named '%s'\" % attr))\n\n    def generate_h5_files(self, route, case_name):\n        \"\"\"\n        write_h5_files\n\n        Writes the structural and aerodynamic h5 files\n        \"\"\"\n        self.check()\n        self.StructuralInformation.generate_fem_file(route, case_name)\n        self.AerodynamicInformation.generate_aero_file(route, case_name, self.StructuralInformation)\n\n\n######################################################################\n######################  SOLVERS INFORMATION  #########################\n######################################################################\nclass SimulationInformation():\n    \"\"\"\n    SimulationInformation\n\n    Simulation information needed to build a case\n    \"\"\"\n\n    def __init__(self):\n        \"\"\"\n        __init__\n\n        Initialization\n        \"\"\"\n        self.solvers = dict()\n        # self.preprocessors = dict()\n        self.postprocessors = dict()\n\n        self.with_dynamic_forces = False\n        self.dynamic_forces = None\n        self.with_forced_vel = False\n        self.for_vel = None\n        self.for_acc = None\n\n    def set_default_values(self):\n        \"\"\"\n        set_default_values\n\n        Set the default values for all the solvers\n        \"\"\"\n\n        self.solvers = dict()\n        aux_solvers = solver_interface.dictionary_of_solvers(print_info=False)\n        aux_solvers.update(generator_interface.dictionary_of_generators(print_info=False))\n        aux_solvers.update(controller_interface.dictionary_of_controllers(print_info=False))\n\n        for solver in aux_solvers:\n            if solver == 'PreSharpy':\n                solver_name = 'SHARPy'\n            else:\n                solver_name = solver\n            self.solvers[solver_name] = deepcopy(aux_solvers[solver])\n            if solver in ['GridLoader', 'NonliftingbodygridLoader']:\n                # Skip this solver as no default values for GridLoader exist. \n                continue\n\n    def check(self):\n\n        default = SimulationInformation()\n        default.set_default_values()\n\n        for solver in self.solvers['SHARPy']['flow']:\n            for key in self.solvers[solver]:\n                if key not in default.solvers[solver]:\n                    raise RuntimeError((\"solver '%s' has no key named '%s'\" % (solver, key)))\n\n\n    def define_num_steps(self, num_steps):\n        \"\"\"\n        define_num_steps\n\n        Set the number of steps in the simulation for all the solvers\n\n        Args:\n            num_steps (int): number of steps\n        \"\"\"\n\n        for solver in self.solvers:\n            if 'n_time_steps' in self.solvers[solver]:\n                self.solvers[solver]['n_time_steps'] = num_steps\n            if 'num_steps' in self.solvers[solver]:\n                self.solvers[solver]['num_steps'] = num_steps\n\n\n    def define_uinf(self, unit_vector, norm):\n        \"\"\"\n        define_uinf\n\n        Set the inflow velocity in the simulation for all the solvers\n\n        Args:\n            unit_vector (np.array): direction of the inflow velocity\n            norm (float): Norm of the inflow velocity\n        \"\"\"\n        # Make sure\n        uinf = unit_vector*norm\n        norm = np.linalg.norm(uinf)\n        unit_vector = uinf / norm\n\n        self.solvers['AerogridLoader']['freestream_dir'] = unit_vector\n        self.solvers['AerogridPlot']['u_inf'] = norm\n        self.solvers['SteadyVelocityField']['u_inf'] = norm\n        self.solvers['SteadyVelocityField']['u_inf_direction'] = unit_vector\n        # self.solvers['StaticUvlm']['velocity_field_input'] = {'u_inf': norm,\n        #                                                     'u_inf_direction': unit_vector}\n        # self.solvers['StepUvlm']['velocity_field_input'] = {'u_inf': norm,\n        #                                                     'u_inf_direction': unit_vector}\n\n\n    def set_variable_all_dicts(self, variable, set_value):\n        \"\"\"\n        set_variable_all_dicts\n\n        Defines the value of a variable in all the available solvers\n\n        Args:\n            variable (str): variable name\n            set_value ( ): value\n        \"\"\"\n        set_variable_dict(self.solvers, variable, set_value)\n\n    def generate_solver_file(self):\n        \"\"\"\n        generate_solver_file\n\n        Generates the solver file\n\n        Args:\n            route (string): path of the case\n            case_name (string): name of the case\n        \"\"\"\n        import configobj\n\n        self.check()\n\n        config = configobj.ConfigObj()\n        config.filename = self.solvers['SHARPy']['route'] + '/' + self.solvers['SHARPy']['case'] + '.sharpy'\n        config['SHARPy'] = self.solvers['SHARPy']\n        # for k, v in self.solvers['SHARPy'].items():\n        #     config[k] = v\n        # Loop through the solvers defined in \"flow\" and write them\n        for solver in self.solvers['SHARPy']['flow']:\n            config[solver] = self.solvers[solver]\n        config.write()\n\n    def generate_dyn_file(self, num_steps):\n        \"\"\"\n        generate_dyn_file\n\n        Generates the dynamic file\n\n        Args:\n            route (string): path of the case\n            case_name (string): name of the case\n            num_steps (int): number of steps\n        \"\"\"\n\n        with h5.File(self.solvers['SHARPy']['route'] + '/' + self.solvers['SHARPy']['case'] + '.dyn.h5', 'a') as h5file:\n            if self.with_dynamic_forces:\n                h5file.create_dataset(\n                    'dynamic_forces', data=self.dynamic_forces)\n            if self.with_forced_vel:\n                # TODO: check coherence velocity-acceleration\n                h5file.create_dataset(\n                    'for_vel', data=self.for_vel)\n                h5file.create_dataset(\n                    'for_acc', data=self.for_acc)\n            h5file.create_dataset(\n                'num_steps', data=num_steps)\n\n\n######################################################################\n#########################  CLEAN FILES  ##############################\n######################################################################\n\ndef clean_test_files(route, case_name):\n    \"\"\"\n    clean_test_files\n\n    Removes the previous h5 files\n\n    Args:\n        route (string): path of the case\n        case_name (string): name of the case\n\n    \"\"\"\n    fem_file_name = route + '/' + case_name + '.fem.h5'\n    if os.path.isfile(fem_file_name):\n        os.remove(fem_file_name)\n\n    dyn_file_name = route + '/' + case_name + '.dyn.h5'\n    if os.path.isfile(dyn_file_name):\n        os.remove(dyn_file_name)\n\n    aero_file_name = route + '/' + case_name + '.aero.h5'\n    if os.path.isfile(aero_file_name):\n        os.remove(aero_file_name)\n\n    lagrange_file_name = route + '/' + case_name + '.mb.h5'\n    if os.path.isfile(lagrange_file_name):\n        os.remove(lagrange_file_name)\n\n    solver_file_name = route + '/' + case_name + '.sharpy'\n    if os.path.isfile(solver_file_name):\n        os.remove(solver_file_name)\n\n    flightcon_file_name = route + '/' + case_name + '.flightcon.txt'\n    if os.path.isfile(flightcon_file_name):\n        os.remove(flightcon_file_name)\n\n\n######################################################################\n#####################  MULTIBODY INFORMATION  ########################\n######################################################################\nclass BodyInformation():\n\n    def __init__(self):\n\n        self.body_number = None\n        self.FoR_position = None\n        self.FoR_velocity = None\n        self.FoR_acceleration = None\n        self.FoR_movement = None\n        self.quat = None\n\n    def copy(self):\n\n        copied = BodyInformation()\n        copied.body_number = self.body_number\n        copied.FoR_position = self.FoR_position.astype(dtype=float, copy=True)\n        copied.FoR_velocity = self.FoR_velocity.astype(dtype=float, copy=True)\n        copied.FoR_acceleration = self.FoR_acceleration.astype(dtype=float, copy=True)\n        copied.FoR_movement = self.FoR_movement\n        copied.quat = self.quat.astype(dtype=float, copy=True)\n\n    def check(self):\n\n        default = BodyInformation()\n\n        for attr, value in self.__dict__.items():\n            if not hasattr(default, attr):\n                raise RuntimeError((\"BodyInformation has no attribute named '%s'\" % attr))\n\n\nclass LagrangeConstraint():\n\n    def __init__(self):\n\n        # Shared by all boundary conditions\n        self.behaviour = None\n        # Each BC will have its own variables\n\n    def check(self):\n        default = lagrangeconstraints.lc_from_string(self.behaviour)\n        default.__init__(default)\n        required_parameters = default.required_parameters\n        for param in required_parameters:\n            try:\n                getattr(self, param)\n            except:\n                raise RuntimeError((\"'%s' parameter required in '%s' lagrange constraint\" % (param, self.behaviour)))\n        has_behaviour = False\n        for param, value in self.__dict__.items():\n            if not param in ['behaviour', 'scalingFactor', 'penaltyFactor', 'rot_axisA2']:\n                if param not in required_parameters:\n                    raise RuntimeError((\"'%s' parameter is not required in '%s' lagrange constraint\" % (param, self.behaviour)))\n            if param == 'behaviour':\n                has_behaviour = True\n\n        if not has_behaviour:\n            raise RuntimeError((\"'behaviour' parameter is required in '%s' lagrange constraint\" % self.behaviour))\n\n\ndef generate_multibody_file(list_LagrangeConstraints, list_Bodies, route, case_name, use_jax=False):\n\n    # Check\n    for body in list_Bodies:\n        body.check()\n\n    if not use_jax:\n        for lc in list_LagrangeConstraints:\n            lc.check()\n\n    with h5.File(route + '/' + case_name + '.mb.h5', 'a') as h5file:\n\n        # Write the constraints\n        h5file.create_dataset('num_constraints', data=len(list_LagrangeConstraints))\n\n        iconstraint = 0\n        for constraint in list_LagrangeConstraints:\n            # Create the group associated to the constraint\n            constraint_id = h5file.create_group('constraint_%02d' % iconstraint)\n\n            # Write general parameters\n            constraint_id.create_dataset(\"behaviour\", data=constraint.behaviour.encode('ascii', 'ignore'))\n\n            # I branch depending on if you use the JAX solver or not\n            # this is beneficial where a constraint is implemented in one solver but not the other\n            if use_jax:\n                required_parameters = DICT_OF_LC[constraint.behaviour].required_params\n            else:\n                # Write parameters associated to the specific type of boundary condition\n                default = lagrangeconstraints.lc_from_string(constraint.behaviour)\n                default.__init__(default)\n                required_parameters = default.required_parameters\n            for param in required_parameters:\n                constraint_id.create_dataset(param, data=getattr(constraint, param))\n            try:\n                constraint_id.create_dataset(\"scalingFactor\", data=constraint.scalingFactor)\n            except AttributeError:\n                pass\n            try:\n                constraint_id.create_dataset(\"penaltyFactor\", data=constraint.penaltyFactor)\n            except AttributeError:\n                pass\n            try:\n                constraint_id.create_dataset(\"aerogrid_warp_factor\", data=constraint.aerogrid_warp_factor)\n            except AttributeError:\n                pass\n            try:\n                constraint_id.create_dataset(\"rot_axisA2\", data=constraint.rot_axisA2)\n            except AttributeError:\n                pass\n\n            iconstraint += 1\n\n        # Write the body information\n        h5file.create_dataset('num_bodies', data=len(list_Bodies))\n\n        ibody = 0\n        for body in list_Bodies:\n            # Create the group associated to the body\n            body_id = h5file.create_group('body_%02d' % ibody)\n\n            # Write general parameters\n            body_id.create_dataset(\"body_number\", data=body.body_number)\n            body_id.create_dataset(\"FoR_position\", data=body.FoR_position)\n            body_id.create_dataset(\"FoR_velocity\", data=body.FoR_velocity)\n            body_id.create_dataset(\"FoR_acceleration\", data=body.FoR_acceleration)\n            body_id.create_dataset(\"FoR_movement\", data=body.FoR_movement)\n            body_id.create_dataset(\"quat\", data=body.quat)\n            ibody += 1\n"
  },
  {
    "path": "sharpy/utils/generator_interface.py",
    "content": "\"\"\"Generator Interface\n\"\"\"\nfrom abc import ABCMeta, abstractmethod\nimport sharpy.utils.cout_utils as cout\nimport os\nimport shutil\n\ndict_of_generators = {}\ngenerators = {}  # for internal working\n\n\n# decorator\ndef generator(arg):\n    # global available_solvers\n    global dict_of_generators\n    try:\n        arg.generator_id\n    except AttributeError:\n        raise AttributeError('Class defined as generator has no generator_id attribute')\n    dict_of_generators[arg.generator_id] = arg\n    return arg\n\n\ndef print_available_generators():\n    cout.cout_wrap('The available generators on this session are:', 2)\n    for name, i_generator in dict_of_generators.items():\n        cout.cout_wrap('%s ' % i_generator.generator_id, 2)\n\n\nclass BaseGenerator(metaclass=ABCMeta):\n    pass\n\ndef generator_from_string(string):\n    return dict_of_generators[string]\n\n\ndef generator_list_from_path(cwd):\n    onlyfiles = [f for f in os.listdir(cwd) if os.path.isfile(os.path.join(cwd, f))]\n\n    for i_file in range(len(onlyfiles)):\n        if onlyfiles[i_file].split('.')[-1] == 'py': # support autosaved files in the folder\n            if onlyfiles[i_file] == \"__init__.py\":\n                onlyfiles[i_file] = \"\"\n                continue\n            onlyfiles[i_file] = onlyfiles[i_file].replace('.py', '')\n        else:\n            onlyfiles[i_file] = \"\"\n\n    files = [file for file in onlyfiles if not file == \"\"]\n    return files\n\n\ndef initialise_generator(generator_name, print_info=True):\n    if print_info:\n        cout.cout_wrap('Generating an instance of %s' % generator_name, 2)\n    cls_type = generator_from_string(generator_name)\n    gen = cls_type()\n    return gen\n\ndef dictionary_of_generators(print_info=True):\n\n    import sharpy.generators\n    dictionary = dict()\n    for gen in dict_of_generators:\n        init_gen = initialise_generator(gen, print_info)\n        dictionary[gen] = init_gen.settings_default\n\n    return dictionary\n\ndef output_documentation(route=None):\n    \"\"\"\n    Creates the ``.rst`` files for the generators that have a docstring such that they can be parsed to Sphinx\n\n    Args:\n        route (str): Path to folder where generator files are to be created.\n\n    \"\"\"\n    import sharpy.utils.sharpydir as sharpydir\n    if route is None:\n        route = sharpydir.SharpyDir + '/docs/source/includes/generators/'\n        if os.path.exists(route):\n            print('Cleaning %s' %route)\n            shutil.rmtree(route)\n    print('Creating documentation files for generators in %s' % route)\n\n    created_generators = dict()\n\n    for k, v in dict_of_generators.items():\n        if k[0] == '_':\n            continue\n        generator_class = v()\n        created_generators[k] = generator_class\n\n        filename = k + '.rst'\n        # try:\n        #     solver_folder = solver.solver_classification.lower()\n        # except AttributeError:\n        #     solver_folder = 'other'\n        #\n        # if solver_folder not in solver_types:\n        #     solver_types.append(solver_folder)\n\n        os.makedirs(route + '/', exist_ok=True)\n        title = k + '\\n'\n        title += len(k)*'-' + 2*'\\n'\n        if generator_class.__doc__ is not None:\n\n            print('\\tCreating %s' % (route + '/' + filename))\n            autodoc_string = '\\n\\n.. autoclass:: sharpy.generators.' + k.lower() + '.'+ k + '\\n\\t:members:'\n            with open(route + '/' + filename, \"w\") as out_file:\n                out_file.write(title + autodoc_string)\n\n    # # Creates index files depending on the type of solver\n    # filename = 'generators.rst'\n    # title = 'Velocity Field Generators'\n    # title += '\\n' + len(title)*'+' + 2*'\\n'\n    # with open(route + '/' + filename, \"w\") as out_file:\n    #     out_file.write(title)\n    #     out_file.write('.. toctree::' + '\\n')\n    #     for k in dict_of_generators.keys():\n    #         if k[0] == '_':\n    #             continue\n    #         out_file.write('    ./' + k + '\\n')\n"
  },
  {
    "path": "sharpy/utils/geo_utils.py",
    "content": "\"\"\"Airfoil Geometry Utils\n\n\"\"\"\n\nimport numpy as np\n\n\ndef generate_naca_camber(M=0, P=0):\n    \"\"\"\n    Defines the x and y coordinates of a 4-digit NACA profile's camber line (i.e no thickness).\n\n    The NACA 4-series airfoils follow the nomenclature: NACA MPTT where:\n        * M indicates the maximum camber :math:`M = 100m`\n        * P indicates the position of the maximum camber :math:`P=10p`\n        * TT indicates the thickness to chord ratio :math:`TT=(t/c)*100`\n\n    Args:\n        M (float): maximum camber times 100 (i.e. the first of the 4 digits)\n        P (float): position of the maximum camber times 10 (i.e. the second of the 4 digits)\n\n    Returns:\n        (x_vec,y_vec): ``x`` and ``y`` coordinates of the chosen airfoil\n\n    Example:\n        The NACA2400 airfoil would have 2% camber with the maximum at 40% of the chord and 0 thickness. To plot the\n        camber line one would use this function as:\n\n            ``x_vec, y_vec = generate_naca_camber(M = 2, P = 4)``\n\n    \"\"\"\n    m = M * 1e-2\n    p = P * 1e-1\n\n    def naca(x, m, p):\n        if x < 1e-6:\n            return 0.0\n        elif x < p:\n            return m / (p * p) * (2 * p * x - x * x)\n        elif x > p and x < 1 + 1e-6:\n            return m / ((1 - p) * (1 - p)) * (1 - 2 * p + 2 * p * x - x * x)\n\n    x_vec = np.linspace(0, 1, 1000)\n    y_vec = np.array([naca(x, m, p) for x in x_vec])\n\n    return x_vec, y_vec\n\n\ndef interpolate_naca_camber(eta, M00, P00, M01, P01):\n    \"\"\"\n    Interpolate aerofoil camber at non-dimensional coordinate eta in (0,1), \n    where (M00,P00) and (M01,P01) define the camber properties at eta=0 and \n    eta=1 respectively.\n\n    Notes:\n        For two surfaces, eta can be in (-1,1). In this case, the root is eta=0\n        and the tips are at eta=+-1.\n    \"\"\"\n\n    # define domain\n    eta = np.abs(eta)\n    assert np.max(eta) < 1. + 1e-16, 'eta exceeding +/- 1!'\n\n    # define reference\n    x00, y00 = generate_naca_camber(M00, P00)\n    x01, y01 = generate_naca_camber(M01, P01)\n\n    # interpolate\n    x_vec = x00 * (1. - eta) + x01 * eta\n    y_vec = y00 * (1. - eta) + y01 * eta\n\n    return x_vec, y_vec\n\nif __name__ == '__main__':\n    a = 1"
  },
  {
    "path": "sharpy/utils/h5utils.py",
    "content": "# Alfonso del Carre\n# alfonso.del-carre14@imperial.ac.uk\n# Imperial College London\n# LoCA lab\n# 28 Sept 2016\n\"\"\"H5 File Management Utilities\nSet of utilities for opening/reading files\n\"\"\"\nimport h5py as h5\nimport os\nimport errno\n\nimport numpy as np\nimport warnings\nfrom numpy import ndarray, float64, float32, array, int32, int64\nimport ctypes as ct\n\nBasicNumTypes = (float, float32, float64, int, int32, int64, complex)\n\n\ndef check_file_exists(file_name):\n    \"\"\"\n    Checks if the file exists and throws a FileNotFoundError exception\n    that includes the route to the non-existing file.\n\n    Args:\n        file_name (str): path to the HDF5 file\n\n    Returns:\n        FileNotFoundError : if the file does not exist, an error is raised with path to the non-existent file\n    \"\"\"\n    if not os.path.isfile(file_name):\n        raise FileNotFoundError(\n            errno.ENOENT, os.strerror(errno.ENOENT),\n            file_name)\n\n\ndef load_h5_in_dict(handle, path='/'):\n    dictionary = {}\n    for k, i in handle[path].items():\n        if isinstance(i, h5._hl.dataset.Dataset):\n            dictionary[k] = i[()]\n        elif isinstance(i, h5._hl.group.Group):\n            dictionary[k] = load_h5_in_dict(handle, path + k + '/')\n\n        if len(i.attrs.items()):\n            dictionary['Attributes'] = load_attributes(handle, path + k + '/')\n\n    return dictionary\n\n\ndef load_attributes(handle, path):\n    attributes = []\n    for k, i in handle[path].attrs.items():\n        attributes.append((k, i))\n\n    return attributes\n\n\ndef check_fem_dict(fem_dict):\n    print('\\tRunning tests for the FEM input file...', end='')\n    (num_elem_dict, num_node_elem_dict) = np.shape(fem_dict['connectivities'])\n    num_elem = fem_dict['num_elem']\n    num_node_elem = fem_dict['num_node_elem']\n    if not ((num_elem == num_elem_dict) or (num_node_elem == num_node_elem_dict)):\n        raise Exception('ERROR: FEM input file is not consistent')\n    else:\n        print(' PASSED')\n\n\ndef check_data_dict(data_dict):\n    pass\n\n\n# --------------------------------------------------------------- Reading tools\n\n\ndef readh5(filename, GroupName=None):\n    \"\"\"\n    Read the HDF5 file 'filename' into a class. Groups within the hdf5 file are\n    by default loaded as sub classes, unless they include a _read_as attribute\n    (see sharpy.postproc.savedata). In this case, group can be loaded as classes,\n    dictionaries, lists or tuples.\n\n    filename: string to file location\n\n    GroupName = string or list of strings. Default is None: if given, allows\n    reading a specific group h5 file.\n\n    Warning:\n        Groups that need to be read as lists and tuples are assumed to conform to\n        the format used in sharpy.postproc.savedata\n    \"\"\"\n\n    Hinst = ReadInto()\n\n    ### read and scan file\n    hdfile = h5.File(filename, 'r')\n\n    NamesList = []  # dataset names\n    hdfile.visit(NamesList.append)\n\n    ### Identify higher level groups / attributes\n    if GroupName is None:\n        MainLev = []\n        for name in NamesList:\n            if '/' not in name: MainLev.append(name)\n    else:\n        if type(GroupName) is list:\n            MainLev = GroupName\n        else:\n            MainLev = [GroupName]\n\n    ### Loop through higher level\n    for name in MainLev:\n        # sub-group\n        if type(hdfile[name]) is h5._hl.group.Group:\n            Ginst = read_group(hdfile[name])\n            try:\n                Ginst.name = name\n            except:\n                pass\n            setattr(Hinst, name, Ginst)\n        else:\n            setattr(Hinst, name, hdfile[name][()])\n\n    # close and return\n    hdfile.close()\n\n    return Hinst\n\n\ndef read_group(Grp):\n    \"\"\" Read an hdf5 group \"\"\"\n\n    NamesList = []\n    Grp.visit(NamesList.append)\n\n    ### identify higher level\n    MainLev = []\n    for name in NamesList:\n        if '/' not in name: MainLev.append(name)\n\n    ### determine output format\n    read_as = 'class'\n    if '_read_as' in MainLev:\n        read_as = Grp['_read_as'][()]\n\n    ### initialise output\n    if read_as == 'class':\n        Hinst = ReadInto()\n    elif read_as == 'dict':\n        Hinst = {}\n    elif read_as == 'list' or read_as == 'tuple':\n        Hinst = []\n\n    ### Loop through higher level\n    if read_as == 'list' or read_as == 'tuple':\n        if '_as_array' in MainLev:\n            Hinst = list(Grp['_as_array'][()])\n        else:\n            N = len(MainLev) - 1\n            list_ts = MainLev.copy()\n            list_ts.remove('_read_as')\n            list_ts = np.sort(np.unique(np.array(list_ts, dtype=np.int)))\n            if len(list_ts > 0):\n                for nn in range(list_ts[0] - 1):\n                    Hinst.append('NoneType')\n            for nn in list_ts:\n                name = '%.5d' % nn\n                ### extract value\n                if type(Grp[name]) is h5._hl.group.Group:\n                    value = read_group(Grp[name])\n                else:\n                    value = Grp[name][()]\n                Hinst.append(value)\n        if read_as == 'tuple': tuple(Hinst)\n    else:\n        for name in MainLev:\n            if name == '_read_as': continue\n\n            ### extract value\n            if type(Grp[name]) is h5._hl.group.Group:\n                value = read_group(Grp[name])\n            else:\n                value = Grp[name][()]\n\n            ### allocate\n            if read_as == 'class':\n                setattr(Hinst, name, value)\n            else:\n                Hinst[name] = value\n\n    return Hinst\n\n\nclass ReadInto:\n    def __init__(self, name='ReadInto'):\n        self._name = name\n\n    pass\n\n\n# ---------------------------------------------------------------- Saving tools\n\n\ndef saveh5(savedir, h5filename, *class_inst, permission='a', ClassesToSave=()):\n    \"\"\"\n    Creates h5filename and saves all the classes specified in class_inst\n\n    Args\n        savedir: target directory\n        h5filename: file name\n        class_inst: a number of classes to save\n        permission=['a','w']: append or overwrite, according to h5py.File\n        ClassesToSave: if the classes in class_inst contain sub-classes, these will be saved only if instances of the classes in this list\n    \"\"\"\n\n    h5filename = os.path.join(savedir, h5filename)\n    hdfile = h5.File(h5filename, permission)\n\n    for cc in class_inst:\n        add_as_grp(cc, hdfile, ClassesToSave=ClassesToSave)\n\n    hdfile.close()\n    return None\n\n\ndef add_as_grp(obj, grpParent,\n               grpname=None, ClassesToSave=(), SkipAttr=[],\n               compress_float=False, overwrite=False):\n    \"\"\"\n    Given a class, dictionary, list or tuples instance 'obj', the routine adds\n    it as a sub-group of name grpname to the parent group grpParent. An attribute\n    _read_as, specifying the type of obj, is added to the group so as to allow\n    reading correctly the h5 file.\n\n    Usage and Remarks:\n        - if obj contains dictionaries, listes or tuples, these are automatically\n          saved\n\n        - if list only contains scalars or arrays of the same dimension, this will\n          be saved as a numpy array\n\n        - if obj contains classes, only those that are instances of the classes\n          specified in ClassesToSave will be saved\n\n        - If grpParent already contains a sub-group with name grpname, this will not\n          be overwritten. However, pre-existing attributes of the sub-group will be\n          overwritten if obj contains attrributes with the same names.\n\n        - attributes belonging to SkipAttr will not be saved - This functionality\n          needs improving\n\n        - if compress_float is True, numpy arrays will be saved in single precisions.\n    \"\"\"\n\n    ### determine if dict, list, tuple or class\n    if isinstance(obj, list):\n        ObjType = 'list'\n    elif isinstance(obj, tuple):\n        ObjType = 'tuple'\n    elif isinstance(obj, dict):\n        ObjType = 'dict'\n    elif hasattr(obj, '__class__'):\n        ObjType = 'class'\n    else:\n        raise NameError('object type not supported')\n\n    ### determine sub-group name (only classes)\n    if grpname is None:\n        if ObjType == 'class':\n            if hasattr(obj, '_name'):\n                grpname = obj._name\n            else:\n                grpname = obj.__class__.__name__\n        else:\n            raise NameError('grpname must be specified for dict,list and tuples')\n\n    ### Create group (if necessary)\n    if not (grpname in grpParent):\n        grp = grpParent.create_group(grpname)\n        grp['_read_as'] = ObjType\n    else:\n        if overwrite:\n            del grpParent[grpname]\n            grp = grpParent.create_group(grpname)\n            grp['_read_as'] = ObjType\n        else:\n            grp = grpParent[grpname]\n            assert grp['_read_as'][()] == ObjType, \\\n                'Can not overwrite group of different type'\n\n    ### lists/tuples only: try to save as arrays\n    if ObjType in ('list', 'tuple'):\n        Success = save_list_as_array(\n            list_obj=obj, grp_target=grp, compress_float=compress_float)\n        if Success:\n            return grpParent\n\n    ### create/retrieve dictionary of attributes/elements to be saved\n    if ObjType == 'dict':\n        dictname = obj\n    elif ObjType == 'class':\n        dictname = obj.__dict__\n    else:\n        N = len(obj)\n        dictname = {}\n        for nn in range(N):\n            dictname['%.5d' % nn] = obj[nn]\n\n    ### loop attributes and save\n    SaveAsGroups = ClassesToSave + (list, dict, tuple,)\n\n    for attr in dictname:\n        if attr in SkipAttr: continue\n\n        # ----- extract value & type\n        value = dictname[attr]\n        vtype = type(value)\n\n        # ----- classes/dict/lists\n        # ps: no need to delete if overwrite is True\n        if isinstance(value, SaveAsGroups):\n            add_as_grp(value, grp, attr,\n                       ClassesToSave, SkipAttr, compress_float, overwrite)\n            continue\n\n        # ----- if attr already in grp always overwrite\n        if attr in grp:\n            del grp[attr]\n\n        # ----- Basic types\n        if isinstance(value, BasicNumTypes + (str, bytes)):\n            grp[attr] = value\n            continue\n\n        # c_types\n        if isinstance(value, (ct.c_bool, ct.c_double, ct.c_int)):\n            value = value.value\n            grp[attr] = value\n            continue\n\n        # ndarrays\n        if isinstance(value, ndarray):\n            add_array_to_grp(value, attr, grp, compress_float)\n            continue\n\n        # ----- Special\n        if value == None:\n            grp[attr] = 'NoneType'\n            continue\n\n        grp[attr] = 'not saved'\n\n    return grpParent\n\n\ndef add_array_to_grp(data, name, grp, compress_float=False):\n    \"\"\" Add numpy array (data) as dataset 'name' to the group grp. If\n    compress is True, 64-bit float arrays are converted to 32-bit \"\"\"\n\n    if compress_float and data.dtype == float64:\n        # embed()\n        grp.create_dataset(name, data=data, dtype='f4')\n    else:\n        grp[name] = data\n\n    return grp\n\n\ndef save_list_as_array(list_obj, grp_target, compress_float=False):\n    \"\"\"\n    Works for both lists and tuples. Returns True if the saving was successful.\n    \"\"\"\n\n    N = len(list_obj)\n\n    if N > 0:\n        type0 = type(list_obj[0])\n        if type0 in (BasicNumTypes + (str, ndarray)):\n            SaveAsArray = True\n            for nn in range(N):\n                if type(list_obj[nn]) != type0:\n                    SaveAsArray = False\n                    break\n                if type(list_obj[nn]) == ndarray:\n                    if list_obj[0].shape != list_obj[nn].shape:\n                        SaveAsArray = False\n                        break\n            if SaveAsArray:\n                if '_as_array' in grp_target:\n                    del grp_target['_as_array']\n                if type0 in BasicNumTypes:  # list of scalars\n                    if type0 == float and compress_float:\n                        grp_target['_as_array'] = float32(list_obj)\n                    else:\n                        grp_target['_as_array'] = list_obj\n                elif type0 == str:  # list of strings\n                    string_dt = h5.special_dtype(vlen=str)\n                    grp_target.create_dataset('_as_array',\n                                              data=array(list_obj, dtype=object), dtype=string_dt)\n\n                elif type0 == ndarray:  # list of arrays\n                    if list_obj[0].dtype in BasicNumTypes:\n                        if list_obj[0].dtype == float64 and compress_float:\n                            grp_target['_as_array'] = float32(list_obj)\n                        else:\n                            grp_target['_as_array'] = list_obj\n                    else:\n                        string_dt = h5.special_dtype(vlen=str)\n                        grp_target.create_dataset('_as_array',\n                                                  data=array(list_obj, dtype=object), dtype=string_dt)\n                else:\n                    warnings.warn(\n                        '%s could not be saved as an array' % (grp_target.name,))\n                    return False\n\n                return True\n    return False\n"
  },
  {
    "path": "sharpy/utils/input_arg.py",
    "content": "import os\nimport sys\nimport argparse\nimport sharpy.utils.exceptions as exceptions\nimport sharpy.utils.cout_utils as cout\n\n\ndef read_settings(args):\n    case_settings = args.input_filename\n    cout.cout_wrap('Running SHARPy using the settings file: %s' % case_settings)\n\n    settings = parse_settings(case_settings)\n    return settings\n\n\ndef parse_settings(file):\n    from sharpy.utils.settings import load_config_file\n    settings = load_config_file(os.path.realpath(file))\n    try:\n        settings['SHARPy']['flow']\n    except KeyError:\n        raise exceptions.NotValidInputFile('The solver file does not contain a SHARPy header.')\n\n    from sharpy.utils.solver_interface import dict_of_solvers\n\n    for solver in settings['SHARPy']['flow']:\n        # Check that the solvers in the flow exist and that they have a valid set of settings\n        try:\n            dict_of_solvers[solver]\n        except KeyError:\n            raise exceptions.SolverNotFound(solver)\n\n        try:\n            settings[solver]\n        except KeyError:\n            raise exceptions.NotValidInputFile('The settings for the solver %s have not been given.' % solver)\n    return settings\n"
  },
  {
    "path": "sharpy/utils/linearutils.py",
    "content": "\"\"\"Linear state-space vector manipulation utilities\"\"\"\nimport numpy as np\nimport sharpy.utils.algebra as algebra\n\n\ndef structural_vector_to_timestep(vector, tstruct, structure, phi=None, num_rig_dof=0, copy_tstep=True):\n    \"\"\"Transform a state-space structural vector into a time step object\n\n    This adds to a reference time step the following variables extracted from the vector:\n\n        * ``pos`` and ``pos_dot``\n        * ``psi`` and ``psi_dot``\n        * ``quat``\n        * ``for_pos`` and ``for_vel``\n\n    The rest of the structural time step variables are left unchanged\n\n    Args:\n        vector(np.ndarray): Vector to plot\n        tstruct (sharpy.utils.datastructures.StructTimeStepInfo): Reference time step\n        structure (sharpy.structure.models.beam.Beam): Structural information class\n        phi (np.ndarray, optional): Eigenvector matrix to transform vector back to nodal coordinates\n        num_rig_dof (int): Number of rigid degrees of freedom\n        copy_tstep (bool): Return a copy of the reference time step. Else, modify the input one.\n\n    Returns:\n        sharpy.utils.datastructures.StructTimeStepInfo: Time step with the aforementioned variables populated from\n          state-space vector.\n    \"\"\"\n    n_dof = vector.shape[0]\n    v = vector[:n_dof//2]\n    v_dot = vector[n_dof//2:]\n    if phi is not None:  # modal coordinates\n        eta = phi.dot(v)\n        eta_dot = phi.dot(v_dot)\n    else:\n        eta = v\n        eta_dot = v_dot\n\n    if num_rig_dof != 0:\n        eta = eta[:-num_rig_dof]\n        eta_dot = eta_dot[:-num_rig_dof]\n        beta = eta_dot[-num_rig_dof:]\n        beta_bar = np.zeros_like(beta)\n    else:\n        beta = np.array([])\n        beta_bar = np.array([])\n\n    if copy_tstep:\n        tstep = tstruct.copy()\n    else:\n        tstep = tstruct\n\n    vdof = structure.vdof\n    num_dof = 6*sum(vdof >= 0)\n\n    q = np.zeros((num_dof + num_rig_dof))\n    dqdt = np.zeros_like(q)\n    dqddt = np.zeros_like(q)\n\n    pos = np.zeros_like(tstep.pos)\n    pos_dot = np.zeros_like(tstep.pos_dot)\n\n    psi = np.zeros_like(tstep.psi)\n    psi_dot = np.zeros_like(tstep.psi_dot)\n\n    for_pos = np.zeros_like(tstep.for_pos)\n    for_vel = np.zeros_like(tstep.for_vel)\n    for_acc = np.zeros_like(tstep.for_acc)\n    quat = np.zeros_like(tstep.quat)\n\n    q[:num_dof + num_rig_dof] = np.concatenate((eta, beta_bar))\n    dqdt[:num_dof + num_rig_dof] = np.concatenate((eta_dot, beta))\n\n    for i_node in vdof[vdof >= 0]:\n        pos[i_node + 1, :] = q[6*i_node: 6*i_node + 3]\n        pos_dot[i_node + 1, :] = dqdt[6*i_node + 0: 6*i_node + 3]\n\n    for i_elem in range(tstep.num_elem):\n        for i_node in range(tstep.num_node_elem):\n            psi[i_elem, i_node, :] = np.linalg.inv(algebra.crv2tan(tstep.psi[i_elem, i_node]).T).dot(q[i_node + 3: i_node + 6])\n            psi_dot[i_elem, i_node, :] = dqdt[i_node + 3: i_node + 6]\n\n    if num_rig_dof != 0: # beam is clamped\n        for_vel = beta[:6]\n        if num_rig_dof == 9:\n            quat = algebra.euler2quat(beta[-3:])\n        elif num_rig_dof == 10:\n            quat = beta[-4:]\n        else:\n            raise NotImplementedError('Structural vector to timestep for cases without 9 or 10 rigid'\n                                      'degrees of freedom not yet supported.')\n\n    tstep.q[:len(q)] += q\n    tstep.dqdt[:len(q)] += dqdt\n\n    tstep.pos += pos\n    tstep.pos_dot += pos_dot\n\n    tstep.psi += psi\n    tstep.psi_dot += psi_dot\n\n    tstep.for_pos += for_pos\n    tstep.for_vel += for_vel\n\n    tstep.quat += quat\n    tstep.quat /= np.linalg.norm(tstep.quat)  # normalise quaternion\n\n    return tstep\n\n"
  },
  {
    "path": "sharpy/utils/model_utils.py",
    "content": "\"\"\"\nModelling Utilities\n\"\"\"\nimport numpy as np\nimport sharpy.utils.algebra as algebra\n\n\ndef mass_matrix_generator(m, xcg, inertia):\n    \"\"\"\n    This function takes the mass, position of the center of\n    gravity wrt the elastic axis and the inertia matrix J (3x3) and\n    returns the complete 6x6 mass matrix.\n    \"\"\"\n    mass = np.zeros((6, 6))\n    m_chi_cg = algebra.skew(m*xcg)\n    mass[np.diag_indices(3)] = m\n    mass[3:, 3:] = inertia\n    mass[0:3, 3:6] = -m_chi_cg\n    mass[3:6, 0:3] = m_chi_cg\n\n    return mass\n"
  },
  {
    "path": "sharpy/utils/multibody.py",
    "content": "\"\"\"\nMultibody library\n\nLibrary used to manipulate multibody systems\n\nTo use this library: import sharpy.utils.multibody as mb\n\n\"\"\"\nimport numpy as np\nimport sharpy.structure.utils.xbeamlib as xbeamlib\nimport sharpy.utils.algebra as algebra\nimport ctypes as ct\nimport traceback\n\n\ndef split_multibody(beam, tstep, mb_data_dict, ts):\n    \"\"\"\n    split_multibody\n\n    This functions splits a structure at a certain time step in its different bodies\n\n    Args:\n    \tbeam (:class:`~sharpy.structure.models.beam.Beam`): structural information of the multibody system\n    \ttstep (:class:`~sharpy.utils.datastructures.StructTimeStepInfo`): timestep information of the multibody system\n        mb_data_dict (dict): Dictionary including the multibody information\n        ts (int): time step number\n\n    Returns:\n        MB_beam (list(:class:`~sharpy.structure.models.beam.Beam`)): each entry represents a body\n        MB_tstep (list(:class:`~sharpy.utils.datastructures.StructTimeStepInfo`)): each entry represents a body\n    \"\"\"\n\n    MB_beam = []\n    MB_tstep = []\n\n    quat0 = tstep.quat.astype(dtype=ct.c_double, order='F', copy=True)\n    for0_pos = tstep.for_pos.astype(dtype=ct.c_double, order='F', copy=True)\n    for0_vel = tstep.for_vel.astype(dtype=ct.c_double, order='F', copy=True)\n\n    ini_quat0 = beam.ini_info.quat.astype(dtype=ct.c_double, order='F', copy=True)\n    ini_for0_pos = beam.ini_info.for_pos.astype(dtype=ct.c_double, order='F', copy=True)\n    ini_for0_vel = beam.ini_info.for_vel.astype(dtype=ct.c_double, order='F', copy=True)\n\n    for ibody in range(beam.num_bodies):\n        ibody_beam = None\n        ibody_tstep = None\n        ibody_beam = beam.get_body(ibody = ibody)\n        ibody_tstep = tstep.get_body(beam, ibody_beam.num_dof, ibody = ibody)\n\n        ibody_beam.FoR_movement = mb_data_dict['body_%02d' % ibody]['FoR_movement']\n\n        ibody_beam.ini_info.compute_psi_local_AFoR(ini_for0_pos, ini_for0_vel, ini_quat0)\n        ibody_beam.ini_info.change_to_local_AFoR(ini_for0_pos, ini_for0_vel, ini_quat0)\n        if ts == 1:\n            ibody_tstep.compute_psi_local_AFoR(for0_pos, for0_vel, quat0)\n        ibody_tstep.change_to_local_AFoR(for0_pos, for0_vel, quat0)\n\n        MB_beam.append(ibody_beam)\n        MB_tstep.append(ibody_tstep)\n\n    return MB_beam, MB_tstep\n\ndef merge_multibody(MB_tstep, MB_beam, beam, tstep, mb_data_dict, dt):\n    \"\"\"\n    merge_multibody\n\n    This functions merges a series of bodies into a multibody system at a certain time step\n\n    Longer description\n\n    Args:\n        MB_beam (list(:class:`~sharpy.structure.models.beam.Beam`)): each entry represents a body\n        MB_tstep (list(:class:`~sharpy.utils.datastructures.StructTimeStepInfo`)): each entry represents a body\n    \tbeam (:class:`~sharpy.structure.models.beam.Beam`): structural information of the multibody system\n    \ttstep (:class:`~sharpy.utils.datastructures.StructTimeStepInfo`): timestep information of the multibody system\n        mb_data_dict (dict): Dictionary including the multibody information\n        dt(int): time step\n\n    Returns:\n        beam (:class:`~sharpy.structure.models.beam.Beam`): structural information of the multibody system\n    \ttstep (:class:`~sharpy.utils.datastructures.StructTimeStepInfo`): timestep information of the multibody system\n    \"\"\"\n\n    update_mb_dB_before_merge(tstep, MB_tstep)\n\n    quat0 = MB_tstep[0].quat.astype(dtype=ct.c_double, order='F', copy=True)\n    for0_pos = MB_tstep[0].for_pos.astype(dtype=ct.c_double, order='F', copy=True)\n    for0_vel = MB_tstep[0].for_vel.astype(dtype=ct.c_double, order='F', copy=True)\n\n    for ibody in range(beam.num_bodies):\n        MB_tstep[ibody].change_to_global_AFoR(for0_pos, for0_vel, quat0)\n\n    first_dof = 0\n    for ibody in range(beam.num_bodies):\n        # Renaming for clarity\n        ibody_elems = MB_beam[ibody].global_elems_num\n        ibody_nodes = MB_beam[ibody].global_nodes_num\n\n        # Merge tstep\n        tstep.pos[ibody_nodes,:] = MB_tstep[ibody].pos.astype(dtype=ct.c_double, order='F', copy=True)\n        tstep.pos_dot[ibody_nodes,:] = MB_tstep[ibody].pos_dot.astype(dtype=ct.c_double, order='F', copy=True)\n        tstep.pos_ddot[ibody_nodes,:] = MB_tstep[ibody].pos_ddot.astype(dtype=ct.c_double, order='F', copy=True)\n        tstep.psi[ibody_elems,:,:] = MB_tstep[ibody].psi.astype(dtype=ct.c_double, order='F', copy=True)\n        tstep.psi_local[ibody_elems,:,:] = MB_tstep[ibody].psi_local.astype(dtype=ct.c_double, order='F', copy=True)\n        tstep.psi_dot[ibody_elems,:,:] = MB_tstep[ibody].psi_dot.astype(dtype=ct.c_double, order='F', copy=True)\n        tstep.psi_dot_local[ibody_elems,:,:] = MB_tstep[ibody].psi_dot_local.astype(dtype=ct.c_double, order='F', copy=True)\n        tstep.psi_ddot[ibody_elems,:,:] = MB_tstep[ibody].psi_ddot.astype(dtype=ct.c_double, order='F', copy=True)\n        tstep.gravity_forces[ibody_nodes,:] = MB_tstep[ibody].gravity_forces.astype(dtype=ct.c_double, order='F', copy=True)\n        tstep.steady_applied_forces[ibody_nodes,:] = MB_tstep[ibody].steady_applied_forces.astype(dtype=ct.c_double, order='F', copy=True)\n        tstep.unsteady_applied_forces[ibody_nodes,:] = MB_tstep[ibody].unsteady_applied_forces.astype(dtype=ct.c_double, order='F', copy=True)\n        tstep.runtime_steady_forces[ibody_nodes,:] = MB_tstep[ibody].runtime_steady_forces.astype(dtype=ct.c_double, order='F', copy=True)\n        tstep.runtime_unsteady_forces[ibody_nodes,:] = MB_tstep[ibody].runtime_unsteady_forces.astype(dtype=ct.c_double, order='F', copy=True)\n        # TODO: Do I need a change in FoR for the following variables? Maybe for the FoR ones.\n        tstep.forces_constraints_nodes[ibody_nodes,:] = MB_tstep[ibody].forces_constraints_nodes.astype(dtype=ct.c_double, order='F', copy=True)\n        tstep.forces_constraints_FoR[ibody, :] = MB_tstep[ibody].forces_constraints_FoR[ibody, :].astype(dtype=ct.c_double, order='F', copy=True)\n\n        # Merge states\n        ibody_num_dof = MB_beam[ibody].num_dof.value\n        tstep.q[first_dof:first_dof+ibody_num_dof] = MB_tstep[ibody].q[:-10].astype(dtype=ct.c_double, order='F', copy=True)\n        tstep.dqdt[first_dof:first_dof+ibody_num_dof] = MB_tstep[ibody].dqdt[:-10].astype(dtype=ct.c_double, order='F', copy=True)\n        tstep.dqddt[first_dof:first_dof+ibody_num_dof] = MB_tstep[ibody].dqddt[:-10].astype(dtype=ct.c_double, order='F', copy=True)\n\n        tstep.mb_dquatdt[ibody, :] = MB_tstep[ibody].dqddt[-4:].astype(dtype=ct.c_double, order='F', copy=True)\n\n        first_dof += ibody_num_dof\n\n    tstep.q[-10:] = MB_tstep[0].q[-10:].astype(dtype=ct.c_double, order='F', copy=True)\n    tstep.dqdt[-10:] = MB_tstep[0].dqdt[-10:].astype(dtype=ct.c_double, order='F', copy=True)\n    tstep.dqddt[-10:] = MB_tstep[0].dqddt[-10:].astype(dtype=ct.c_double, order='F', copy=True)\n\n    # Define the new FoR information\n    tstep.for_pos = MB_tstep[0].for_pos.astype(dtype=ct.c_double, order='F', copy=True)\n    tstep.for_vel = MB_tstep[0].for_vel.astype(dtype=ct.c_double, order='F', copy=True)\n    tstep.for_acc = MB_tstep[0].for_acc.astype(dtype=ct.c_double, order='F', copy=True)\n    tstep.quat = MB_tstep[0].quat.astype(dtype=ct.c_double, order='F', copy=True)\n\n\ndef update_mb_dB_before_merge(tstep, MB_tstep):\n    \"\"\"\n    update_mb_db_before_merge\n\n    Updates the FoR information database before merging bodies\n\n    Args:\n    \ttstep (:class:`~sharpy.utils.datastructures.StructTimeStepInfo`): timestep information of the multibody system\n        MB_tstep (list(:class:`~sharpy.utils.datastructures.StructTimeStepInfo`)): each entry represents a body\n    \"\"\"\n\n    for ibody in range(len(MB_tstep)):\n\n        tstep.mb_FoR_pos[ibody,:] = MB_tstep[ibody].for_pos.astype(dtype=ct.c_double, order='F', copy=True)\n        tstep.mb_FoR_vel[ibody,:] = MB_tstep[ibody].for_vel.astype(dtype=ct.c_double, order='F', copy=True)\n        tstep.mb_FoR_acc[ibody,:] = MB_tstep[ibody].for_acc.astype(dtype=ct.c_double, order='F', copy=True)\n        tstep.mb_quat[ibody,:] =  MB_tstep[ibody].quat.astype(dtype=ct.c_double, order='F', copy=True)\n        assert (MB_tstep[ibody].mb_dquatdt[ibody, :] == MB_tstep[ibody].dqddt[-4:]).all(), \"Error in multibody storage\"\n        tstep.mb_dquatdt[ibody, :] = MB_tstep[ibody].dqddt[-4:].astype(dtype=ct.c_double, order='F', copy=True)\n\n\ndef disp_and_accel2state(MB_beam, MB_tstep, Lambda, Lambda_dot, sys_size, num_LM_eq):\n    \"\"\"\n    disp2state\n\n    Fills the vector of states according to the displacements information\n\n    Args:\n        MB_beam (list(:class:`~sharpy.structure.models.beam.Beam`)): each entry represents a body\n        MB_tstep (list(:class:`~sharpy.utils.datastructures.StructTimeStepInfo`)): each entry represents a body\n        Lambda(np.ndarray): Lagrange multipliers of holonomic constraints\n        Lambda_dot(np.ndarray): Lagrange multipliers of non-holonomic constraints\n\n        sys_size(int): number of degrees of freedom of the system of equations not accounting for lagrange multipliers\n        num_LM_eq(int): Number of equations associated to the Lagrange Multipliers\n\n        q(np.ndarray): Vector of states\n    \tdqdt(np.ndarray): Time derivatives of states\n        dqddt(np.ndarray): Second time derivatives of states\n    \"\"\"\n    q = np.zeros((sys_size + num_LM_eq, ), dtype=ct.c_double, order='F')\n    dqdt = np.zeros((sys_size + num_LM_eq, ), dtype=ct.c_double, order='F')\n    dqddt = np.zeros((sys_size + num_LM_eq, ), dtype=ct.c_double, order='F')\n\n    first_dof = 0\n    for ibody in range(len(MB_beam)):\n\n        ibody_num_dof = MB_beam[ibody].num_dof.value\n        if (MB_beam[ibody].FoR_movement == 'prescribed'):\n            xbeamlib.cbeam3_solv_disp2state(MB_beam[ibody], MB_tstep[ibody])\n            xbeamlib.cbeam3_solv_accel2state(MB_beam[ibody], MB_tstep[ibody])\n            q[first_dof:first_dof+ibody_num_dof]=MB_tstep[ibody].q[:-10].astype(dtype=ct.c_double, order='F', copy=True)\n            dqdt[first_dof:first_dof+ibody_num_dof]=MB_tstep[ibody].dqdt[:-10].astype(dtype=ct.c_double, order='F', copy=True)\n            dqddt[first_dof:first_dof+ibody_num_dof]=MB_tstep[ibody].dqddt[:-10].astype(dtype=ct.c_double, order='F', copy=True)\n            first_dof += ibody_num_dof\n\n        elif (MB_beam[ibody].FoR_movement == 'free'):\n            dquatdt = MB_tstep[ibody].mb_dquatdt[ibody, :].astype(dtype=ct.c_double, order='F', copy=True)\n            xbeamlib.xbeam_solv_disp2state(MB_beam[ibody], MB_tstep[ibody])\n            xbeamlib.xbeam_solv_accel2state(MB_beam[ibody], MB_tstep[ibody])\n            q[first_dof:first_dof+ibody_num_dof+10]=MB_tstep[ibody].q.astype(dtype=ct.c_double, order='F', copy=True)\n            dqdt[first_dof:first_dof+ibody_num_dof+10]=MB_tstep[ibody].dqdt.astype(dtype=ct.c_double, order='F', copy=True)\n            dqddt[first_dof:first_dof+ibody_num_dof+10]=MB_tstep[ibody].dqddt.astype(dtype=ct.c_double, order='F', copy=True)\n            dqddt[first_dof+ibody_num_dof+6:first_dof+ibody_num_dof+10]=dquatdt.astype(dtype=ct.c_double, order='F', copy=True)\n            first_dof += ibody_num_dof + 10\n\n    if num_LM_eq > 0:\n        q[first_dof:] = Lambda.astype(dtype=ct.c_double, order='F', copy=True)\n        dqdt[first_dof:] = Lambda_dot.astype(dtype=ct.c_double, order='F', copy=True)\n\n    return q, dqdt, dqddt\n\ndef state2disp_and_accel(q, dqdt, dqddt, MB_beam, MB_tstep, num_LM_eq):\n    \"\"\"\n    state2disp\n\n    Recovers the displacements from the states\n\n    Longer description\n\n    Args:\n        MB_beam (list(:class:`~sharpy.structure.models.beam.Beam`)): each entry represents a body\n        MB_tstep (list(:class:`~sharpy.utils.datastructures.StructTimeStepInfo`)): each entry represents a body\n        q(np.ndarray): Vector of states\n    \tdqdt(np.ndarray): Time derivatives of states\n        dqddt(np.ndarray): Second time derivatives of states\n\n        num_LM_eq(int): Number of equations associated to the Lagrange Multipliers\n\n        Lambda(np.ndarray): Lagrange multipliers of holonomic constraints\n        Lambda_dot(np.ndarray): Lagrange multipliers of non-holonomic constraints\n\n    \"\"\"\n\n    Lambda = np.zeros((num_LM_eq, ), dtype=ct.c_double, order='F')\n    Lambda_dot = np.zeros((num_LM_eq, ), dtype=ct.c_double, order='F')\n\n    first_dof = 0\n    for ibody in range(len(MB_beam)):\n\n        ibody_num_dof = MB_beam[ibody].num_dof.value\n        if (MB_beam[ibody].FoR_movement == 'prescribed'):\n            MB_tstep[ibody].q[:-10] = q[first_dof:first_dof+ibody_num_dof].astype(dtype=ct.c_double, order='F', copy=True)\n            MB_tstep[ibody].dqdt[:-10] = dqdt[first_dof:first_dof+ibody_num_dof].astype(dtype=ct.c_double, order='F', copy=True)\n            MB_tstep[ibody].dqddt[:-10] = dqddt[first_dof:first_dof+ibody_num_dof].astype(dtype=ct.c_double, order='F', copy=True)\n            xbeamlib.cbeam3_solv_state2disp(MB_beam[ibody], MB_tstep[ibody])\n            xbeamlib.cbeam3_solv_state2accel(MB_beam[ibody], MB_tstep[ibody])\n            first_dof += ibody_num_dof\n\n        elif (MB_beam[ibody].FoR_movement == 'free'):\n            MB_tstep[ibody].q = q[first_dof:first_dof+ibody_num_dof+10].astype(dtype=ct.c_double, order='F', copy=True)\n            MB_tstep[ibody].dqdt = dqdt[first_dof:first_dof+ibody_num_dof+10].astype(dtype=ct.c_double, order='F', copy=True)\n            MB_tstep[ibody].dqddt = dqddt[first_dof:first_dof+ibody_num_dof+10].astype(dtype=ct.c_double, order='F', copy=True)\n            MB_tstep[ibody].mb_dquatdt[ibody, :] = MB_tstep[ibody].dqddt[-4:]\n            xbeamlib.xbeam_solv_state2disp(MB_beam[ibody], MB_tstep[ibody])\n            xbeamlib.xbeam_solv_state2accel(MB_beam[ibody], MB_tstep[ibody])\n            first_dof += ibody_num_dof + 10\n\n    Lambda = q[first_dof:].astype(dtype=ct.c_double, order='F', copy=True)\n    Lambda_dot = dqdt[first_dof:].astype(dtype=ct.c_double, order='F', copy=True)\n\n    return Lambda, Lambda_dot\n\ndef get_elems_nodes_list(beam, ibody):\n    \"\"\"\n        get_elems_nodes_list\n\n        This function returns the elements (``ibody_elements``) and the nodes\n        (``ibody_nodes``) that belong to the body number ``ibody``\n\n        Args:\n    \t   beam (:class:`~sharpy.structure.models.beam.Beam`): structural information of the multibody system\n           ibody (int): Body number about which the information is required\n\n        Returns:\n            ibody_elements (list): List of elements that belong the ``ibody``\n            ibody_nodes (list): List of nodes that belong the ``ibody``\n\n    \"\"\"\n    int_list = np.arange(beam.num_elem)\n    ibody_elements = int_list[beam.body_number == ibody]\n    ibody_nodes = np.sort(np.unique(beam.connectivities[ibody_elements, :].reshape(-1)))\n\n    return ibody_elements, ibody_nodes\n"
  },
  {
    "path": "sharpy/utils/multibodyjax.py",
    "content": "\"\"\"\nMultibody library for the NonlinearDynamicMultibodyJAX solver\nLibrary used to manipulate multibody systems\nTo use this library: import sharpy.utils.multibodyjax as mb\n\n\"\"\"\nimport numpy as np\nimport sharpy.structure.utils.xbeamlib as xbeamlib\nimport ctypes as ct\n\n\ndef split_multibody(beam, tstep, mb_data_dict, ts):\n    \"\"\"\n    split_multibody\n\n    This functions splits a structure at a certain time step in its different bodies\n\n    Args:\n    \tbeam (:class:`~sharpy.structure.models.beam.Beam`): structural information of the multibody system\n    \ttstep (:class:`~sharpy.utils.datastructures.StructTimeStepInfo`): timestep information of the multibody system\n        mb_data_dict (dict): Dictionary including the multibody information\n        ts (int): time step number\n\n    Returns:\n        MB_beam (list(:class:`~sharpy.structure.models.beam.Beam`)): each entry represents a body\n        MB_tstep (list(:class:`~sharpy.utils.datastructures.StructTimeStepInfo`)): each entry represents a body\n    \"\"\"\n\n    MB_beam = []\n    MB_tstep = []\n\n    quat0 = tstep.quat.astype(dtype=ct.c_double, order='F', copy=True)\n    for0_pos = tstep.for_pos.astype(dtype=ct.c_double, order='F', copy=True)\n    for0_vel = tstep.for_vel.astype(dtype=ct.c_double, order='F', copy=True)\n\n    ini_quat0 = beam.ini_info.quat.astype(dtype=ct.c_double, order='F', copy=True)\n    ini_for0_pos = beam.ini_info.for_pos.astype(dtype=ct.c_double, order='F', copy=True)\n    ini_for0_vel = beam.ini_info.for_vel.astype(dtype=ct.c_double, order='F', copy=True)\n\n    for ibody in range(beam.num_bodies):\n        ibody_beam = beam.get_body(ibody=ibody)\n        ibody_tstep = tstep.get_body(beam, ibody_beam.num_dof, ibody=ibody)\n\n        ibody_beam.FoR_movement = mb_data_dict['body_%02d' % ibody]['FoR_movement']\n\n        ibody_beam.ini_info.compute_psi_local_AFoR(ini_for0_pos, ini_for0_vel, ini_quat0)\n        ibody_beam.ini_info.change_to_local_AFoR(ini_for0_pos, ini_for0_vel, ini_quat0)\n        if ts == 1:\n            ibody_tstep.compute_psi_local_AFoR(for0_pos, for0_vel, quat0)\n        ibody_tstep.change_to_local_AFoR(for0_pos, for0_vel, quat0)\n\n        MB_beam.append(ibody_beam)\n        MB_tstep.append(ibody_tstep)\n\n    return MB_beam, MB_tstep\n\n\ndef merge_multibody(MB_tstep, MB_beam, beam, tstep, mb_data_dict, dt):\n    \"\"\"\n    merge_multibody\n\n    This functions merges a series of bodies into a multibody system at a certain time step\n\n    Longer description\n\n    Args:\n        MB_beam (list(:class:`~sharpy.structure.models.beam.Beam`)): each entry represents a body\n        MB_tstep (list(:class:`~sharpy.utils.datastructures.StructTimeStepInfo`)): each entry represents a body\n    \tbeam (:class:`~sharpy.structure.models.beam.Beam`): structural information of the multibody system\n    \ttstep (:class:`~sharpy.utils.datastructures.StructTimeStepInfo`): timestep information of the multibody system\n        mb_data_dict (dict): Dictionary including the multibody information\n        dt(int): time step\n\n    Returns:\n        beam (:class:`~sharpy.structure.models.beam.Beam`): structural information of the multibody system\n    \ttstep (:class:`~sharpy.utils.datastructures.StructTimeStepInfo`): timestep information of the multibody system\n    \"\"\"\n\n    update_mb_dB_before_merge(tstep, MB_tstep)\n\n    quat0 = MB_tstep[0].quat.astype(dtype=ct.c_double, order='F', copy=True)\n    for0_pos = MB_tstep[0].for_pos.astype(dtype=ct.c_double, order='F', copy=True)\n    for0_vel = MB_tstep[0].for_vel.astype(dtype=ct.c_double, order='F', copy=True)\n\n    for ibody in range(beam.num_bodies):\n        MB_tstep[ibody].change_to_global_AFoR(for0_pos, for0_vel, quat0)\n\n    first_dof = 0\n    for ibody in range(beam.num_bodies):\n        # Renaming for clarity\n        ibody_elems = MB_beam[ibody].global_elems_num\n        ibody_nodes = MB_beam[ibody].global_nodes_num\n\n        # Merge tstep\n        tstep.pos[ibody_nodes, :] = MB_tstep[ibody].pos.astype(dtype=ct.c_double, order='F', copy=True)\n        tstep.pos_dot[ibody_nodes, :] = MB_tstep[ibody].pos_dot.astype(dtype=ct.c_double, order='F', copy=True)\n        tstep.pos_ddot[ibody_nodes, :] = MB_tstep[ibody].pos_ddot.astype(dtype=ct.c_double, order='F', copy=True)\n        tstep.psi[ibody_elems, :, :] = MB_tstep[ibody].psi.astype(dtype=ct.c_double, order='F', copy=True)\n        tstep.psi_local[ibody_elems, :, :] = MB_tstep[ibody].psi_local.astype(dtype=ct.c_double, order='F', copy=True)\n        tstep.psi_dot[ibody_elems, :, :] = MB_tstep[ibody].psi_dot.astype(dtype=ct.c_double, order='F', copy=True)\n        tstep.psi_dot_local[ibody_elems, :, :] = MB_tstep[ibody].psi_dot_local.astype(dtype=ct.c_double, order='F',\n                                                                                      copy=True)\n        tstep.psi_ddot[ibody_elems, :, :] = MB_tstep[ibody].psi_ddot.astype(dtype=ct.c_double, order='F', copy=True)\n        tstep.gravity_forces[ibody_nodes, :] = MB_tstep[ibody].gravity_forces.astype(dtype=ct.c_double, order='F',\n                                                                                     copy=True)\n        tstep.steady_applied_forces[ibody_nodes, :] = MB_tstep[ibody].steady_applied_forces.astype(dtype=ct.c_double,\n                                                                                                   order='F', copy=True)\n        tstep.unsteady_applied_forces[ibody_nodes, :] = MB_tstep[ibody].unsteady_applied_forces.astype(\n            dtype=ct.c_double, order='F', copy=True)\n        tstep.runtime_steady_forces[ibody_nodes, :] = MB_tstep[ibody].runtime_steady_forces.astype(dtype=ct.c_double,\n                                                                                                   order='F', copy=True)\n        tstep.runtime_unsteady_forces[ibody_nodes, :] = MB_tstep[ibody].runtime_unsteady_forces.astype(\n            dtype=ct.c_double, order='F', copy=True)\n        # TODO: Do I need a change in FoR for the following variables? Maybe for the FoR ones.\n        tstep.forces_constraints_nodes[ibody_nodes, :] = MB_tstep[ibody].forces_constraints_nodes.astype(\n            dtype=ct.c_double, order='F', copy=True)\n        tstep.forces_constraints_FoR[ibody, :] = MB_tstep[ibody].forces_constraints_FoR[ibody, :].astype(\n            dtype=ct.c_double, order='F', copy=True)\n\n        # Merge states\n        ibody_num_dof = MB_beam[ibody].num_dof.value\n        tstep.q[first_dof:first_dof + ibody_num_dof] = MB_tstep[ibody].q[:-10].astype(dtype=ct.c_double, order='F',\n                                                                                      copy=True)\n        tstep.dqdt[first_dof:first_dof + ibody_num_dof] = MB_tstep[ibody].dqdt[:-10].astype(dtype=ct.c_double,\n                                                                                            order='F', copy=True)\n        tstep.dqddt[first_dof:first_dof + ibody_num_dof] = MB_tstep[ibody].dqddt[:-10].astype(dtype=ct.c_double,\n                                                                                              order='F', copy=True)\n\n        tstep.mb_dquatdt[ibody, :] = MB_tstep[ibody].dqddt[-4:].astype(dtype=ct.c_double, order='F', copy=True)\n\n        first_dof += ibody_num_dof\n\n    tstep.q[-10:] = MB_tstep[0].q[-10:].astype(dtype=ct.c_double, order='F', copy=True)\n    tstep.dqdt[-10:] = MB_tstep[0].dqdt[-10:].astype(dtype=ct.c_double, order='F', copy=True)\n    tstep.dqddt[-10:] = MB_tstep[0].dqddt[-10:].astype(dtype=ct.c_double, order='F', copy=True)\n\n    # Define the new FoR information\n    tstep.for_pos = MB_tstep[0].for_pos.astype(dtype=ct.c_double, order='F', copy=True)\n    tstep.for_vel = MB_tstep[0].for_vel.astype(dtype=ct.c_double, order='F', copy=True)\n    tstep.for_acc = MB_tstep[0].for_acc.astype(dtype=ct.c_double, order='F', copy=True)\n    tstep.quat = MB_tstep[0].quat.astype(dtype=ct.c_double, order='F', copy=True)\n\n\ndef update_mb_dB_before_merge(tstep, MB_tstep):\n    \"\"\"\n    update_mb_db_before_merge\n\n    Updates the FoR information database before merging bodies\n\n    Args:\n    \ttstep (:class:`~sharpy.utils.datastructures.StructTimeStepInfo`): timestep information of the multibody system\n        MB_tstep (list(:class:`~sharpy.utils.datastructures.StructTimeStepInfo`)): each entry represents a body\n    \"\"\"\n\n    for ibody in range(len(MB_tstep)):\n        tstep.mb_FoR_pos[ibody, :] = MB_tstep[ibody].for_pos.astype(dtype=ct.c_double, order='F', copy=True)\n        tstep.mb_FoR_vel[ibody, :] = MB_tstep[ibody].for_vel.astype(dtype=ct.c_double, order='F', copy=True)\n        tstep.mb_FoR_acc[ibody, :] = MB_tstep[ibody].for_acc.astype(dtype=ct.c_double, order='F', copy=True)\n        tstep.mb_quat[ibody, :] = MB_tstep[ibody].quat.astype(dtype=ct.c_double, order='F', copy=True)\n        assert (MB_tstep[ibody].mb_dquatdt[ibody, :] == MB_tstep[ibody].dqddt[-4:]).all(), \"Error in multibody storage\"\n        tstep.mb_dquatdt[ibody, :] = MB_tstep[ibody].dqddt[-4:].astype(dtype=ct.c_double, order='F', copy=True)\n\n\ndef disp_and_accel2state(MB_beam, MB_tstep, Lambda, Lambda_dot, sys_size, num_LM_eq):\n    \"\"\"\n    disp2state\n\n    Fills the vector of states according to the displacements information\n\n    Args:\n        MB_beam (list(:class:`~sharpy.structure.models.beam.Beam`)): each entry represents a body\n        MB_tstep (list(:class:`~sharpy.utils.datastructures.StructTimeStepInfo`)): each entry represents a body\n        Lambda(np.ndarray): Lagrange multipliers of holonomic constraints\n        Lambda_dot(np.ndarray): Lagrange multipliers of non-holonomic constraints\n\n        sys_size(int): number of degrees of freedom of the system of equations not accounting for lagrange multipliers\n        num_LM_eq(int): Number of equations associated to the Lagrange Multipliers\n\n        q(np.ndarray): Vector of states\n    \tdqdt(np.ndarray): Time derivatives of states\n        dqddt(np.ndarray): Second time derivatives of states\n    \"\"\"\n    q = np.zeros((sys_size + num_LM_eq,), dtype=ct.c_double, order='F')\n    dqdt = np.zeros((sys_size + num_LM_eq,), dtype=ct.c_double, order='F')\n    dqddt = np.zeros((sys_size + num_LM_eq,), dtype=ct.c_double, order='F')\n\n    first_dof = 0\n    for ibody in range(len(MB_beam)):\n\n        ibody_num_dof = MB_beam[ibody].num_dof.value\n        if (MB_beam[ibody].FoR_movement == 'prescribed'):\n            MB_tstep[ibody].for_vel = np.zeros(6)\n            MB_tstep[ibody].for_acc = np.zeros(6)\n            MB_tstep[ibody].quat = MB_beam[ibody].ini_info.quat\n            xbeamlib.cbeam3_solv_disp2state(MB_beam[ibody], MB_tstep[ibody])\n            xbeamlib.cbeam3_solv_accel2state(MB_beam[ibody], MB_tstep[ibody])\n            q[first_dof:first_dof + ibody_num_dof] = MB_tstep[ibody].q[:-10].astype(dtype=ct.c_double, order='F',\n                                                                                    copy=True)\n            dqdt[first_dof:first_dof + ibody_num_dof] = MB_tstep[ibody].dqdt[:-10].astype(dtype=ct.c_double, order='F',\n                                                                                          copy=True)\n            dqddt[first_dof:first_dof + ibody_num_dof] = MB_tstep[ibody].dqddt[:-10].astype(dtype=ct.c_double,\n                                                                                            order='F', copy=True)\n            first_dof += ibody_num_dof\n\n        elif (MB_beam[ibody].FoR_movement == 'prescribed_trim'):\n            MB_tstep[ibody].for_vel = np.zeros(6)\n            MB_tstep[ibody].for_acc = np.zeros(6)\n            xbeamlib.cbeam3_solv_disp2state(MB_beam[ibody], MB_tstep[ibody])\n            xbeamlib.cbeam3_solv_accel2state(MB_beam[ibody], MB_tstep[ibody])\n            q[first_dof:first_dof + ibody_num_dof] = MB_tstep[ibody].q[:-10].astype(dtype=ct.c_double, order='F',\n                                                                                    copy=True)\n            dqdt[first_dof:first_dof + ibody_num_dof] = MB_tstep[ibody].dqdt[:-10].astype(dtype=ct.c_double, order='F',\n                                                                                          copy=True)\n            dqddt[first_dof:first_dof + ibody_num_dof] = MB_tstep[ibody].dqddt[:-10].astype(dtype=ct.c_double,\n                                                                                            order='F', copy=True)\n            first_dof += ibody_num_dof\n\n        elif (MB_beam[ibody].FoR_movement == 'free'):\n            dquatdt = MB_tstep[ibody].mb_dquatdt[ibody, :].astype(dtype=ct.c_double, order='F', copy=True)\n            xbeamlib.xbeam_solv_disp2state(MB_beam[ibody], MB_tstep[ibody])\n            xbeamlib.xbeam_solv_accel2state(MB_beam[ibody], MB_tstep[ibody])\n            q[first_dof:first_dof + ibody_num_dof + 10] = MB_tstep[ibody].q.astype(dtype=ct.c_double, order='F',\n                                                                                   copy=True)\n            dqdt[first_dof:first_dof + ibody_num_dof + 10] = MB_tstep[ibody].dqdt.astype(dtype=ct.c_double, order='F',\n                                                                                         copy=True)\n            dqddt[first_dof:first_dof + ibody_num_dof + 10] = MB_tstep[ibody].dqddt.astype(dtype=ct.c_double, order='F',\n                                                                                           copy=True)\n            dqddt[first_dof + ibody_num_dof + 6:first_dof + ibody_num_dof + 10] = dquatdt.astype(dtype=ct.c_double,\n                                                                                                 order='F', copy=True)\n            first_dof += ibody_num_dof + 10\n\n    if num_LM_eq > 0:\n        q[first_dof:] = Lambda.astype(dtype=ct.c_double, order='F', copy=True)\n        dqdt[first_dof:] = Lambda_dot.astype(dtype=ct.c_double, order='F', copy=True)\n\n    return q, dqdt, dqddt\n\n\ndef state2disp_and_accel(q, dqdt, dqddt, MB_beam, MB_tstep, num_LM_eq):\n    \"\"\"\n    state2disp\n\n    Recovers the displacements from the states\n\n    Longer description\n\n    Args:\n        MB_beam (list(:class:`~sharpy.structure.models.beam.Beam`)): each entry represents a body\n        MB_tstep (list(:class:`~sharpy.utils.datastructures.StructTimeStepInfo`)): each entry represents a body\n        q(np.ndarray): Vector of states\n    \tdqdt(np.ndarray): Time derivatives of states\n        dqddt(np.ndarray): Second time derivatives of states\n\n        num_LM_eq(int): Number of equations associated to the Lagrange Multipliers\n\n        Lambda(np.ndarray): Lagrange multipliers of holonomic constraints\n        Lambda_dot(np.ndarray): Lagrange multipliers of non-holonomic constraints\n\n    \"\"\"\n\n    first_dof = 0\n    for ibody in range(len(MB_beam)):\n\n        ibody_num_dof = MB_beam[ibody].num_dof.value\n        if (MB_beam[ibody].FoR_movement == 'prescribed'):\n            MB_tstep[ibody].q[:-10] = q[first_dof:first_dof + ibody_num_dof].astype(dtype=ct.c_double, order='F',\n                                                                                    copy=True)\n            MB_tstep[ibody].dqdt[:-10] = dqdt[first_dof:first_dof + ibody_num_dof].astype(dtype=ct.c_double, order='F',\n                                                                                          copy=True)\n            MB_tstep[ibody].dqddt[:-10] = dqddt[first_dof:first_dof + ibody_num_dof].astype(dtype=ct.c_double,\n                                                                                            order='F', copy=True)\n            xbeamlib.cbeam3_solv_state2disp(MB_beam[ibody], MB_tstep[ibody])\n            xbeamlib.cbeam3_solv_state2accel(MB_beam[ibody], MB_tstep[ibody])\n            first_dof += ibody_num_dof\n\n        elif (MB_beam[ibody].FoR_movement == 'prescribed_trim'):\n            MB_tstep[ibody].q[:-10] = q[first_dof:first_dof + ibody_num_dof].astype(dtype=ct.c_double, order='F',\n                                                                                    copy=True)\n            MB_tstep[ibody].dqdt[:-10] = dqdt[first_dof:first_dof + ibody_num_dof].astype(dtype=ct.c_double, order='F',\n                                                                                          copy=True)\n            MB_tstep[ibody].dqddt[:-10] = dqddt[first_dof:first_dof + ibody_num_dof].astype(dtype=ct.c_double,\n                                                                                            order='F', copy=True)\n            xbeamlib.cbeam3_solv_state2disp(MB_beam[ibody], MB_tstep[ibody])\n            xbeamlib.cbeam3_solv_state2accel(MB_beam[ibody], MB_tstep[ibody])\n            first_dof += ibody_num_dof\n\n        elif (MB_beam[ibody].FoR_movement == 'free'):\n            MB_tstep[ibody].q = q[first_dof:first_dof + ibody_num_dof + 10].astype(dtype=ct.c_double, order='F',\n                                                                                   copy=True)\n            MB_tstep[ibody].dqdt = dqdt[first_dof:first_dof + ibody_num_dof + 10].astype(dtype=ct.c_double, order='F',\n                                                                                         copy=True)\n            MB_tstep[ibody].dqddt = dqddt[first_dof:first_dof + ibody_num_dof + 10].astype(dtype=ct.c_double, order='F',\n                                                                                           copy=True)\n            MB_tstep[ibody].mb_dquatdt[ibody, :] = MB_tstep[ibody].dqddt[-4:]\n            xbeamlib.xbeam_solv_state2disp(MB_beam[ibody], MB_tstep[ibody])\n            xbeamlib.xbeam_solv_state2accel(MB_beam[ibody], MB_tstep[ibody])\n            first_dof += ibody_num_dof + 10\n\n    lm_h = q[first_dof:].astype(dtype=ct.c_double, order='F', copy=True)\n    lm_n = dqdt[first_dof:].astype(dtype=ct.c_double, order='F', copy=True)\n\n    return lm_h, lm_n\n\n\ndef get_elems_nodes_list(beam, ibody):\n    \"\"\"\n        get_elems_nodes_list\n\n        This function returns the elements (``ibody_elements``) and the nodes\n        (``ibody_nodes``) that belong to the body number ``ibody``\n\n        Args:\n    \t   beam (:class:`~sharpy.structure.models.beam.Beam`): structural information of the multibody system\n           ibody (int): Body number about which the information is required\n\n        Returns:\n            ibody_elements (list): List of elements that belong the ``ibody``\n            ibody_nodes (list): List of nodes that belong the ``ibody``\n\n    \"\"\"\n    int_list = np.arange(beam.num_elem)\n    ibody_elements = int_list[beam.body_number == ibody]\n    ibody_nodes = np.sort(np.unique(beam.connectivities[ibody_elements, :].reshape(-1)))\n\n    return ibody_elements, ibody_nodes\n"
  },
  {
    "path": "sharpy/utils/num_utils.py",
    "content": "import numpy as np\nimport ctypes as ct\nimport scipy as sc\n\n\ndef check_symmetric(mat):\n    return np.allclose(mat.transpose(), mat, atol=1e-3)\n\n\nif __name__ == '__main__':\n    a = np.array([[1, 2], [3, 4]])\n    print(check_symmetric(a))\n\n    a = np.array([[1, 2], [2, 1]])\n    print(check_symmetric(a))\n"
  },
  {
    "path": "sharpy/utils/plotutils.py",
    "content": "\"\"\"Plotting utilities\n\"\"\"\nimport numpy as np\nfrom numpy import ndarray\n\nfrom typing import Optional\nfrom os import PathLike\n\n\nimport vtk\nfrom vtk.numpy_interface import algorithms as algs\nfrom vtk.numpy_interface import dataset_adapter as dsa\n\ndef plot_frame_to_vtk(\n    grid_arr: ndarray,\n    filename: str | PathLike,\n    node_scalar_data: Optional[dict[str, ndarray]] = None,\n    node_vector_data: Optional[dict[str, ndarray]] = None,\n    cell_scalar_data: Optional[dict[str, ndarray]] = None,\n    cell_vector_data: Optional[dict[str, ndarray]] = None,\n) -> None:\n    r\"\"\"\n    Plot a single timestep of grid data\n    :param grid_arr: Structured grid array with shape (n_x, n_y, n_z, 3)\n    :param filename: Base filename, including directory. Information on the frame number will be\n    appended to this.\n    :param node_scalar_data: Dictionary of node scalar data\n    :param node_vector_data: Dictionary of node vector data\n    :param cell_scalar_data: Dictionary of cell scalar data\n    :param cell_vector_data: Dictionary of cell vector data\n    \"\"\"\n\n    if grid_arr.shape[-1] != 3:\n        raise ValueError(\"grid_arr must have trailing dimension of size 3\")\n\n    # planar grid should have 3 dimensions, while volume grid should have 4 dimensions\n    match grid_arr.ndim:\n        case 3:\n            is_planar = True\n        case 4:\n            is_planar = False\n        case _:\n            raise ValueError(\n                f\"grid_arr must have 3 or 4 dimensions, got {grid_arr.ndim}-D array\"\n            )\n\n    sg = vtk.vtkStructuredGrid()\n    if is_planar:\n        sg.SetDimensions(*grid_arr.shape[:-1], 1)\n    else:\n        sg.SetDimensions(*grid_arr.shape[:-1])\n\n    i_swap = 2 - int(is_planar)  # we swap axes as VTK likes z, y, x order\n\n    # add point coordinate data\n    points = vtk.vtkPoints()\n    points_vec = algs.make_vector(\n        *[np.swapaxes(grid_arr[..., i], 0, i_swap).ravel() for i in range(3)]\n    )\n    points.SetData(dsa.numpyTovtkDataArray(points_vec, \"Points\"))\n    sg.SetPoints(points)\n\n    # cell scalar data\n    if cell_scalar_data is not None:\n        for name, arr in cell_scalar_data.items():\n            sg.GetCellData().AddArray(\n                dsa.numpyTovtkDataArray(np.swapaxes(arr, 0, i_swap).ravel(), name)\n            )\n\n    # cell vector data\n    if cell_vector_data is not None:\n        for name, arr in cell_vector_data.items():\n            vectors = algs.make_vector(\n                np.swapaxes(arr[..., 0], 0, i_swap).ravel(),\n                np.swapaxes(arr[..., 1], 0, i_swap).ravel(),\n                np.swapaxes(arr[..., 2], 0, i_swap).ravel(),\n            )\n            sg.GetCellData().AddArray(dsa.numpyTovtkDataArray(vectors, name))\n\n    # point scalar data\n    if node_scalar_data is not None:\n        for name, arr in node_scalar_data.items():\n            sg.GetPointData().AddArray(\n                dsa.numpyTovtkDataArray(np.swapaxes(arr, 0, i_swap).ravel(), name)\n            )\n\n    # point vector data\n    if node_vector_data is not None:\n        for name, arr in node_vector_data.items():\n            vectors = algs.make_vector(\n                np.swapaxes(arr[..., 0], 0, i_swap).ravel(),\n                np.swapaxes(arr[..., 1], 0, i_swap).ravel(),\n                np.swapaxes(arr[..., 2], 0, i_swap).ravel(),\n            )\n            sg.GetPointData().AddArray(dsa.numpyTovtkDataArray(vectors, name))\n\n    # write to file\n    writer = vtk.vtkXMLStructuredGridWriter()\n    writer.SetFileName(filename)\n    writer.SetInputData(sg)\n    writer.Write()\n\n\ndef set_axes_equal(ax):\n    '''Make axes of 3D plot have equal scale so that spheres appear as spheres,\n    cubes as cubes, etc..  This is one possible solution to Matplotlib's\n    ax.set_aspect('equal') and ax.axis('equal') not working for 3D.\n\n    Input\n      ax: a matplotlib axis, e.g., as output from plt.gca().\n    '''\n\n    x_limits = ax.get_xlim3d()\n    y_limits = ax.get_ylim3d()\n    z_limits = ax.get_zlim3d()\n\n    x_range = abs(x_limits[1] - x_limits[0])\n    x_middle = np.mean(x_limits)\n    y_range = abs(y_limits[1] - y_limits[0])\n    y_middle = np.mean(y_limits)\n    z_range = abs(z_limits[1] - z_limits[0])\n    z_middle = np.mean(z_limits)\n\n    # The plot bounding box is a sphere in the sense of the infinity\n    # norm, hence I call half the max range the plot radius.\n    plot_radius = 0.5*max([x_range, y_range, z_range])\n\n    ax.set_xlim3d([x_middle - plot_radius, x_middle + plot_radius])\n    ax.set_ylim3d([y_middle - plot_radius, y_middle + plot_radius])\n    ax.set_zlim3d([z_middle - plot_radius, z_middle + plot_radius])\n\n\ndef plot_timestep(data, tstep=-1, minus_mstar=0, plotly=False, custom_scaling=False, z_compression=0.5):\n    '''\n    This function creates a simple plot with matplotlib of a\n    timestep in SHARPy.\n    Notice that this function is not efficient at all for large surfaces, it just\n    aims to provide a simple way of generating simple quick plots.\n\n    Input:\n        data (``sharpy.presharpy.presharpy.PreSharpy``):\n        Main data strucuture in SHARPy\n        \n        tstep (int):\n        Time step to plot\n        \n        minus_mstar (int):\n        number of wake panels to remove from the visualisation (for efficiency)\n        \n        plotly(bool):\n        calls in the plotly library, graph will not plot if set to false.\n        \n        custom_scaling(bool):\n        aspect ratio of the wing will be modelled realistically if set to true.\n        \n        z_compression(int):\n        if custom scaling is enabled, this decides how much the z axis is compressed.\n\n\n    Returns:\n        Plot object:\n        Can be matplotlib.pyplot.plt (plotly=False) or\n        plotly.graph_objects.Figure() (plotly=True)\n    '''\n\n    if len(data.structure.timestep_info) == 0:\n        struct_tstep = data.structure.ini_info\n        aero_tstep = data.aero.ini_info\n    else:\n        struct_tstep = data.structure.timestep_info[tstep]\n        aero_tstep = data.aero.timestep_info[tstep]\n\n    if not plotly:\n        try:\n            from mpl_toolkits.mplot3d import axes3d\n            import matplotlib.pyplot as plt\n        except ModuleNotFoundError:\n            print(\"Matplotlib package not found\")\n            return\n\n        fig = plt.figure()\n        ax = fig.add_subplot(111, projection='3d')\n\n        # Plot structure\n        # Split into different beams\n        for ielem in range(data.structure.num_elem):\n            nodes = data.structure.connectivities[ielem, :][[0, 2, 1]]\n            ax.plot(struct_tstep.pos[nodes, 0],\n                    struct_tstep.pos[nodes, 1],\n                    struct_tstep.pos[nodes, 2],\n                    '-ob')\n\n        # Plot aerodynamic grid\n        if aero_tstep is not None:\n            for isurf in range(aero_tstep.n_surf):\n                # Solid grid\n                ax.plot_wireframe(aero_tstep.zeta[isurf][0, :, :],\n                                  aero_tstep.zeta[isurf][1, :, :],\n                                  aero_tstep.zeta[isurf][2, :, :])\n                Mstar, Nstar = aero_tstep.dimensions_star[isurf]\n                # Wake grid\n                ax.plot_wireframe(aero_tstep.zeta_star[isurf][0, :(Mstar - minus_mstar), :],\n                                  aero_tstep.zeta_star[isurf][1, :(Mstar - minus_mstar), :],\n                                  aero_tstep.zeta_star[isurf][2, :(Mstar - minus_mstar), :])\n\n    else:\n        try: \n            import plotly.graph_objects as go\n        except ModuleNotFoundError:\n            print(\"Plotly package not found\")\n            return\n\n        fig = go.Figure()\n                \n        # Plot aerodynamic grid\n        if aero_tstep is not None:\n            for isurf in range(aero_tstep.n_surf):\n                M, N = aero_tstep.dimensions[isurf]\n                # Plot surfaces\n                for i_m in range(M):\n                    for i_n in range(N):\n                        vert_m = [i_m, i_m + 1, i_m +1, i_m, i_m]\n                        vert_n = [i_n, i_n, i_n +1, i_n + 1, i_n]\n                        xsurf = aero_tstep.zeta[isurf][0, vert_m, vert_n]\n                        ysurf = aero_tstep.zeta[isurf][1, vert_m, vert_n]\n                        zsurf = aero_tstep.zeta[isurf][2, vert_m, vert_n]\n\n                        if i_m == 0 and i_n == 0:\n                            fig.add_trace(go.Scatter3d(x=xsurf,\n                                                     y=ysurf,\n                                                     z=zsurf,\n                                                     mode='lines',\n                                                     line={'color':'grey'},\n                                                     surfaceaxis=2,\n                                                     name='Aero surface'))\n                        else:\n                            fig.add_trace(go.Scatter3d(x=xsurf,\n                                                     y=ysurf,\n                                                     z=zsurf,\n                                                     mode='lines',\n                                                     line={'color':'grey'},\n                                                     surfaceaxis=2,\n                                                     showlegend=False))\n\n                # Plot wireframe\n                for i_m in range(M + 1):\n                    fig.add_trace(go.Scatter3d(x=aero_tstep.zeta[isurf][0, i_m, :],\n                                               y=aero_tstep.zeta[isurf][1, i_m, :],\n                                               z=aero_tstep.zeta[isurf][2, i_m, :],\n                                               mode='lines',\n                                               line={'color':'black'},\n                                               showlegend=False))\n                for i_n in range(N + 1):\n                    fig.add_trace(go.Scatter3d(x=aero_tstep.zeta[isurf][0, :, i_n],\n                                               y=aero_tstep.zeta[isurf][1, :, i_n],\n                                               z=aero_tstep.zeta[isurf][2, :, i_n],\n                                               mode='lines',\n                                               line={'color':'black'},\n                                               showlegend=False))\n\n                Mstar, Nstar = aero_tstep.dimensions_star[isurf]\n                # Wake grid\n                for i_m in range(Mstar - minus_mstar):\n                    for i_n in range(Nstar):\n                        vert_m = [i_m, i_m + 1, i_m +1, i_m, i_m]\n                        vert_n = [i_n, i_n, i_n +1, i_n + 1, i_n]\n                        xsurf = aero_tstep.zeta_star[isurf][0, vert_m, vert_n]\n                        ysurf = aero_tstep.zeta_star[isurf][1, vert_m, vert_n]\n                        zsurf = aero_tstep.zeta_star[isurf][2, vert_m, vert_n]\n\n                        if i_m == 0 and i_n == 0:\n                            fig.add_trace(go.Scatter3d(x=xsurf,\n                                         y=ysurf,\n                                         z=zsurf,\n                                         mode='lines',\n                                         line={'color':'lightskyblue'},\n                                         surfaceaxis=2,\n                                         name='Aero wake'))\n                        else:\n                            fig.add_trace(go.Scatter3d(x=xsurf,\n                                         y=ysurf,\n                                         z=zsurf,\n                                         mode='lines',\n                                         line={'color':'lightskyblue'},\n                                         surfaceaxis=2,\n                                         showlegend=False))\n\n                for i_m in range(Mstar + 1 - minus_mstar):\n                    fig.add_trace(go.Scatter3d(x=aero_tstep.zeta_star[isurf][0, i_m, :],\n                                               y=aero_tstep.zeta_star[isurf][1, i_m, :],\n                                               z=aero_tstep.zeta_star[isurf][2, i_m, :],\n                                               mode='lines',\n                                               line={'color':'grey'},\n                                               showlegend=False))\n                for i_n in range(Nstar + 1):\n                    fig.add_trace(go.Scatter3d(x=aero_tstep.zeta_star[isurf][0, :(Mstar + 1 - minus_mstar), i_n],\n                                               y=aero_tstep.zeta_star[isurf][1, :(Mstar + 1 - minus_mstar), i_n],\n                                               z=aero_tstep.zeta_star[isurf][2, :(Mstar + 1 - minus_mstar), i_n],\n                                               mode='lines',\n                                               line={'color':'grey'},\n                                               showlegend=False))\n                                               \n\n        # Plot structure\n        # Split into different beams\n        nodes = data.structure.connectivities[0, :][[0, 2, 1]]\n        fig = fig.add_trace(go.Scatter3d(x=struct_tstep.pos[nodes, 0],\n                                          y=struct_tstep.pos[nodes, 1],\n                                          z=struct_tstep.pos[nodes, 2],\n                                          marker= {'size':2, 'color':'blue'},\n                                          line = {'color':'blue', 'width':4},\n                                          name='Beam nodes'))\n        for ielem in range(1, data.structure.num_elem):\n            nodes = data.structure.connectivities[ielem, :][[0, 2, 1]]\n            fig.add_trace(go.Scatter3d(x=struct_tstep.pos[nodes, 0],\n                                       y=struct_tstep.pos[nodes, 1],\n                                       z=struct_tstep.pos[nodes, 2],\n                                       marker= {'size':2, 'color':'blue'},\n                                       line = {'color':'blue', 'width':4},\n                                       showlegend=False))\n                                       \n#I LOVE SEMICOLONS RAAAAH\n\n## Custom Scaling::\n# This changes how the plotly graph is scaled so the aspect ratio of your wing stays realistic.\n# It takes the range of the x and y axes, and scales the graph based on them.\n# z is set to 0.5 by default so the wake 'plane' is not as large as it originally is.\n# This has the effect of making the wing flex less visible.\n# Increase the z_compression value if you want to make it more visible.\n# prints were used to check the min and max values of x and y in the graph while implementing this; if something goes wrong you might want to check those out.\n\n        if custom_scaling==True:\n                    #print(np.max(aero_tstep.zeta_star[isurf][0,:(Mstar - minus_mstar),:]))\n                    #print(np.min(aero_tstep.zeta[isurf][0,:,:]))\n                    #print(np.max(aero_tstep.zeta[isurf][1,:,:]))\n                    #print(np.min(aero_tstep.zeta[isurf][1,:,:]))\n                    rangex=np.max(aero_tstep.zeta_star[isurf][0,:(Mstar - minus_mstar),:])-np.min(aero_tstep.zeta[isurf][0,:,:]);rangey=np.max(aero_tstep.zeta[isurf][1,:,:])-np.min(aero_tstep.zeta[isurf][1,:,:]);fig.update_layout(scene=dict(aspectmode='manual',\n                                             aspectratio=dict(x=rangex,y=rangey,z=z_compression)))\n\n    return fig\n"
  },
  {
    "path": "sharpy/utils/rom_interface.py",
    "content": "from abc import ABCMeta, abstractmethod\nimport sharpy.utils.cout_utils as cout\nimport os\nimport sharpy.utils.frequencyutils as frequencyutils\n\ndict_of_roms = {}\nroms = {}  # for internal working\n\n\n# decorator\ndef rom(arg):\n    # global available_solvers\n    global dict_of_roms\n    try:\n        arg.rom_id\n    except AttributeError:\n        raise AttributeError('Class defined as ROM has no rom_id attribute')\n    dict_of_roms[arg.rom_id] = arg\n    return arg\n\n\ndef print_available_solvers():\n    cout.cout_wrap('The available ROMs on this session are:', 2)\n    for name, i_solver in dict_of_roms.items():\n        cout.cout_wrap('%s ' % i_solver.solver_id, 2)\n\n\nclass BaseRom(metaclass=ABCMeta):\n\n    # Solver id for populating available_roms[]\n    @property\n    def rom_id(self):\n        raise NotImplementedError\n\n    # The input is a ProblemData class structure\n    @abstractmethod\n    def initialise(self):\n        pass\n\n    # This executes the solver\n    @abstractmethod\n    def run(self, ss):\n        pass\n\n    @staticmethod\n    def compare_fom_rom(y1, y2, wv=None, **kwargs):\n        return frequencyutils.freqresp_relative_error(y1, y2, wv, **kwargs)\n\n    # Save the ROM matrices to the given filename\n    def save(self, filename):\n        raise NotImplementedError('Save method for the currently chosen ROM is not yet supported')\n\ndef rom_from_string(string):\n    return dict_of_roms[string]\n\ndef initialise_rom(rom_name):\n    cout.cout_wrap('Generating an instance of %s' % rom_name, 2)\n    cls_type = rom_from_string(rom_name)\n    solver = cls_type()\n    return solver\n\n\ndef dictionary_of_solvers():\n    # import sharpy.rom\n    dictionary = dict()\n    for solver in dict_of_roms:\n        if not solver.lower() == 'SaveData'.lower():\n            # TODO: why it does not work for savedata?\n            init_solver = initialise_rom(solver)\n            dictionary[solver] = init_solver.settings_default\n\n    return dictionary\n"
  },
  {
    "path": "sharpy/utils/settings.py",
    "content": "\"\"\"\nSettings Generator Utilities\n\"\"\"\nimport configparser\nimport ctypes as ct\nimport numpy as np\nimport sharpy.utils.exceptions as exceptions\nimport sharpy.utils.cout_utils as cout\nimport ast\n\n\nclass DictConfigParser(configparser.ConfigParser):\n    def as_dict(self):\n        d = dict(self._sections)\n        for k in d:\n            d[k] = dict(self._defaults, **d[k])\n            d[k].pop('__name__', None)\n        return d\n\n\ndef cast(k, v, pytype, ctype, default):\n    try:\n        # if default is None:\n        #     raise TypeError\n        val = ctype(pytype(v))\n    except KeyError:\n        val = ctype(default)\n        cout.cout_wrap(\"--- The variable \" + k + \" has no given value, using the default \" + default, 2)\n    except TypeError:\n        raise exceptions.NoDefaultValueException(k)\n    except ValueError:\n        val = ctype(v.value)\n    return val\n\n\ndef to_custom_types(dictionary, types, default, options=dict(), no_ctype=True):\n    for k, v in types.items():\n        if type(v) != list:\n            data_type = v\n        else:\n            if k in dictionary:\n                data_type = get_data_type_for_several_options(dictionary[k], v, k)\n            else:\n                # Choose first data type  in list for default value\n                data_type = v[0]\n        dictionary[k] = get_custom_type(dictionary, data_type, k, default, no_ctype)\n      \n    check_settings_in_options(dictionary, types, options)\n\n    unrecognised_settings = []\n    for k in dictionary.keys():\n        if k not in list(types.keys()):\n            unrecognised_settings.append(exceptions.NotRecognisedSetting(k))\n\n    for setting in unrecognised_settings:\n        cout.cout_wrap(repr(setting), 4)\n\n    if unrecognised_settings:\n        raise Exception(unrecognised_settings)\n\n\ndef get_data_type_for_several_options(dict_value, list_settings_types, setting_name):\n    \"\"\"\n    Checks the data type of the setting input in case of several data type options. \n    Only a scalar or list can be the case for these cases.  \n\n    Args:\n        dict_values: Dictionary value of processed settings\n        list_settings_types (list): Possible setting type options for this setting\n\n    Raises:\n        exception.NotValidSetting: if the setting is not allowed.\n    \"\"\"\n    for data_type in list_settings_types:\n        if 'list' in data_type and (type(dict_value) == list or not np.isscalar(dict_value)):\n                return data_type\n        elif 'list' not in data_type and np.isscalar(dict_value):\n                return data_type\n    exceptions.NotValidSettingType(setting_name, dict_value, list_settings_types)\n\ndef get_default_value(default_value, k, v, data_type = None, py_type = None):\n    if default_value is None:\n        raise exceptions.NoDefaultValueException(k)\n    if v in ['float', 'int', 'bool']:\n        converted_value = cast(k, default_value, py_type, data_type, default_value)\n    elif v == 'str':\n        converted_value = cast(k, default_value, eval(v), eval(v), default_value)\n    else:\n        converted_value = default_value.copy()\n    notify_default_value(k, converted_value)\n    return converted_value\n\ndef get_custom_type(dictionary, v, k, default, no_ctype):\n    if v == 'int':\n        if no_ctype:\n            data_type = int\n        else:\n            data_type = ct.c_int\n        try:\n            dictionary[k] = cast(k, dictionary[k], int, data_type, default[k])\n        except KeyError:\n            dictionary[k] = get_default_value(default[k], k, v, data_type=data_type, py_type=int)\n\n    elif v == 'float':\n        if no_ctype:\n            data_type = float\n        else:\n            data_type = ct.c_double\n        try:\n            dictionary[k] = cast(k, dictionary[k], float, data_type, default[k])\n        except KeyError:\n            dictionary[k] = get_default_value(default[k], k, v, data_type=data_type, py_type=float)\n\n    elif v == 'str':\n        try:\n            dictionary[k] = cast(k, dictionary[k], str, str, default[k])\n        except KeyError:\n            dictionary[k] = get_default_value(default[k], k, v)\n\n    elif v == 'bool':\n        if no_ctype:\n            data_type = bool\n        else:\n            data_type = ct.c_bool\n        try:\n            dictionary[k] = cast(k, dictionary[k], str2bool, data_type, default[k])\n        except KeyError:\n            dictionary[k] = get_default_value(default[k], k, v, data_type=data_type, py_type=str2bool)\n\n    elif v == 'list(str)':\n        try:\n            # if isinstance(dictionary[k], list):\n            #     continue\n            # dictionary[k] = dictionary[k].split(',')\n            # getting rid of leading and trailing spaces\n            dictionary[k] = list(map(lambda x: x.strip(), dictionary[k]))\n        except KeyError:\n            dictionary[k] = get_default_value(default[k], k, v)\n\n    elif v == 'list(dict)':\n        try:\n            # if isinstance(dictionary[k], list):\n            #     continue\n            # dictionary[k] = dictionary[k].split(',')\n            # getting rid of leading and trailing spaces\n            for i in range(len(dictionary[k])):\n                dictionary[k][i] = ast.literal_eval(dictionary[k][i])\n        except KeyError:\n            dictionary[k] = get_default_value(default[k], k, v)\n\n    elif v == 'list(float)':\n        try:\n            dictionary[k]\n        except KeyError:\n            dictionary[k] = get_default_value(default[k], k, v)\n\n        if isinstance(dictionary[k], np.ndarray):\n            return dictionary[k]\n        if isinstance(dictionary[k], list):\n            for i in range(len(dictionary[k])):\n                dictionary[k][i] = float(dictionary[k][i])\n            dictionary[k] = np.array(dictionary[k])\n            return dictionary[k]\n        # dictionary[k] = dictionary[k].split(',')\n        # # getting rid of leading and trailing spaces\n        # dictionary[k] = list(map(lambda x: x.strip(), dictionary[k]))\n        if dictionary[k].find(',') < 0:\n            dictionary[k] = np.fromstring(dictionary[k].strip('[]'), sep=' ', dtype=ct.c_double)\n        else:\n            dictionary[k] = np.fromstring(dictionary[k].strip('[]'), sep=',', dtype=ct.c_double)\n\n    elif v == 'list(int)':\n        try:\n            dictionary[k]\n        except KeyError:\n            dictionary[k] = get_default_value(default[k], k, v)\n\n        if isinstance(dictionary[k], np.ndarray):\n            return dictionary[k]\n        if isinstance(dictionary[k], list):\n            for i in range(len(dictionary[k])):\n                dictionary[k][i] = int(dictionary[k][i])\n            dictionary[k] = np.array(dictionary[k])\n            return dictionary[k]\n        # dictionary[k] = dictionary[k].split(',')\n        # # getting rid of leading and trailing spaces\n        # dictionary[k] = list(map(lambda x: x.strip(), dictionary[k]))\n        if dictionary[k].find(',') < 0:\n            dictionary[k] = np.fromstring(dictionary[k].strip('[]'), sep=' ').astype(ct.c_int)\n        else:\n            dictionary[k] = np.fromstring(dictionary[k].strip('[]'), sep=',').astype(ct.c_int)\n\n    elif v == 'list(complex)':\n        try:\n            dictionary[k]\n        except KeyError:\n            dictionary[k] = get_default_value(default[k], k, v)\n\n        if isinstance(dictionary[k], np.ndarray):\n            return dictionary[k]\n        if isinstance(dictionary[k], list):\n            for i in range(len(dictionary[k])):\n                dictionary[k][i] = complex(dictionary[k][i])\n            dictionary[k] = np.array(dictionary[k])\n            return dictionary[k]\n        # dictionary[k] = dictionary[k].split(',')\n        # # getting rid of leading and trailing spaces\n        # dictionary[k] = list(map(lambda x: x.strip(), dictionary[k]))\n        if dictionary[k].find(',') < 0:\n            dictionary[k] = np.fromstring(dictionary[k].strip('[]'), sep=' ').astype(complex)\n        else:\n            dictionary[k] = np.fromstring(dictionary[k].strip('[]'), sep=',').astype(complex)\n\n    elif v == 'dict':\n        try:\n            if not isinstance(dictionary[k], dict):\n                raise TypeError('Setting for {:s} is not a dictionary'.format(k))\n        except KeyError:\n            dictionary[k] = get_default_value(default[k], k, v)\n    else:\n        raise TypeError('Variable %s has an unknown type (%s) that cannot be casted' % (k, v))\n    return dictionary[k]\n\ndef check_settings_in_options(settings, settings_types, settings_options):\n    \"\"\"\n    Checks that settings given a type ``str`` or ``int`` and allowable options are indeed valid.\n\n    Args:\n        settings (dict): Dictionary of processed settings\n        settings_types (dict): Dictionary of settings types\n        settings_options (dict): Dictionary of options (may be empty)\n\n    Raises:\n        exception.NotValidSetting: if the setting is not allowed.\n    \"\"\"\n    for k in settings_options:\n        if settings_types[k] == 'int':\n            try:\n                value = settings[k].value\n            except AttributeError:\n                value = settings[k]\n            if value not in settings_options[k]:\n                raise exceptions.NotValidSetting(k, value, settings_options[k])\n\n        elif settings_types[k] == 'str':\n            value = settings[k]\n            if value not in settings_options[k] and value:\n                # checks that the value is within the options and that it is not an empty string.\n                raise exceptions.NotValidSetting(k, value, settings_options[k])\n\n        elif settings_types[k] == 'list(str)':\n            for item in settings[k]:\n                if item not in settings_options[k] and item:\n                    raise exceptions.NotValidSetting(k, item, settings_options[k])\n\n        else:\n            pass  # no other checks implemented / required\n\n\ndef load_config_file(file_name: str) -> dict:\n    \"\"\"This function reads the flight condition and solver input files.\n\n    Args:\n        file_name (str): contains the path and file name of the file to be read by the ``configparser``\n            reader.\n\n    Returns:\n        config (dict): a ``ConfigParser`` object that behaves like a dictionary\n    \"\"\"\n    # config = DictConfigParser()\n    # config.read(file_name)\n    # dict_config = config.as_dict()\n    import configobj\n    dict_config = configobj.ConfigObj(file_name)\n    return dict_config\n\n\ndef str2bool(string):\n    false_list = ['false', 'off', '0', 'no']\n    if isinstance(string, bool):\n        return string\n    if isinstance(string, ct.c_bool):\n        return string.value\n\n    if not string:\n        return False\n    elif string.lower() in false_list:\n        return False\n    else:\n        return True\n\n\ndef notify_default_value(k, v):\n    cout.cout_wrap('Variable ' + k + ' has no assigned value in the settings file.')\n    cout.cout_wrap('    will default to the value: ' + str(v), 1)\n\n\nclass SettingsTable:\n    \"\"\"\n    Generates the documentation's setting table at runtime.\n\n    Sphinx is our chosen documentation manager and takes docstrings in reStructuredText format. Given that the SHARPy\n    solvers contain several settings, this class produces a table in reStructuredText format with the solver's settings\n    and adds it to the solver's docstring.\n\n    This table will then be printed alongside the remaining docstrings.\n\n    To generate the table, parse the setting's description to a solver dictionary named ``settings_description``, in a\n    similar fashion to what is done with ``settings_types`` and ``settings_default``. If no description is given it will\n    be left blank.\n\n    Then, add at the end of the solver's class declaration method an instance of the ``SettingsTable`` class and a call\n    to the ``SettingsTable.generate()`` method.\n\n    Examples:\n        The end of the solver's class declaration should contain\n\n        .. code-block:: python\n\n            # Generate documentation table\n            settings_table = settings.SettingsTable()\n            __doc__ += settings_table.generate(settings_types, settings_default, settings_description)\n\n        to generate the settings table.\n\n    \"\"\"\n    def __init__(self):\n        self.n_fields = 4\n        self.n_settings = 0\n        self.field_length = [0] * self.n_fields\n        self.titles = ['Name', 'Type', 'Description', 'Default']\n\n        self.settings_types = dict()\n        self.settings_description = dict()\n        self.settings_default = dict()\n        self.settings_options = dict()\n        self.settings_options_strings = dict()\n\n        self.line_format = ''\n\n        self.table_string = ''\n\n    def generate(self, settings_types, settings_default, settings_description, settings_options=dict(), header_line=None):\n        \"\"\"\n        Returns a rst-format table with the settings' names, types, description and default values\n\n        Args:\n            settings_types (dict): Setting types.\n            settings_default (dict): Settings default value.\n            settings_description (dict): Setting description.\n\n            header_line (str): Header line description (optional)\n\n        Returns:\n            str: .rst formatted string with a table containing the settings' information.\n        \"\"\"\n        self.settings_types = settings_types\n        self.settings_default = settings_default\n        self.n_settings = len(self.settings_types)\n        #\n\n        if header_line is None:\n            header_line = 'The settings that this solver accepts are given by a dictionary, ' \\\n                          'with the following key-value pairs:'\n        else:\n            assert type(header_line) == str, 'header_line not a string, verify order of arguments'\n\n        if type(settings_options) != dict:\n            raise TypeError('settings_options is not a dictionary')\n\n        if settings_options:\n            # if settings_options are provided\n            self.settings_options = settings_options\n            self.n_fields += 1\n            self.field_length.append(0)\n            self.titles.append('Options')\n            self.process_options()\n\n        try:\n            self.settings_description = settings_description\n        except AttributeError:\n            pass\n\n        self.set_field_length()\n        self.line_format = self.setting_line_format()\n\n        table_string = '\\n    ' + header_line + '\\n'\n        table_string += '\\n    ' + self.print_divider_line()\n        table_string += '    ' + self.print_header()\n        table_string += '    ' + self.print_divider_line()\n        for setting in self.settings_types:\n            table_string += '    ' + self.print_setting(setting)\n        table_string += '    ' + self.print_divider_line()\n\n        self.table_string = table_string\n\n        return table_string\n\n    def process_options(self):\n        self.settings_options_strings = self.settings_options.copy()\n        for k, v in self.settings_options.items():\n            opts = ''\n            for option in v:\n                opts += ' ``%s``,' %str(option)\n            self.settings_options_strings[k] = opts[1:-1]  # removes the initial whitespace and final comma\n\n    def set_field_length(self):\n\n        field_lengths = [[] for i in range(self.n_fields)]\n        for setting in self.settings_types:\n            stype = str(self.settings_types.get(setting, ''))\n            description = self.settings_description.get(setting, '')\n            default = str(self.settings_default.get(setting, ''))\n            option = str(self.settings_options_strings.get(setting, ''))\n\n            field_lengths[0].append(len(setting) + 4)  # length of name\n            field_lengths[1].append(len(stype) + 4)  # length of type + 4 for the rst ``X``\n            field_lengths[2].append(len(description))  # length of type\n            field_lengths[3].append(len(default) + 4)  # length of type + 4 for the rst ``X``\n\n            if self.settings_options:\n                field_lengths[4].append(len(option))\n\n        for i_field in range(self.n_fields):\n            field_lengths[i_field].append(len(self.titles[i_field]))\n            self.field_length[i_field] = max(field_lengths[i_field]) + 2  # add the two spaces as column dividers\n\n    def print_divider_line(self):\n        divider = ''\n        for i_field in range(self.n_fields):\n            divider += '='*(self.field_length[i_field]-2) + '  '\n        divider += '\\n'\n        return divider\n\n    def print_setting(self, setting):\n        type = '``' + str(self.settings_types.get(setting, '')) + '``'\n        description = self.settings_description.get(setting, '')\n        default = '``' + str(self.settings_default.get(setting, '')) + '``'\n        if self.settings_options:\n            option = self.settings_options_strings.get(setting, '')\n            line = self.line_format.format(['``' + str(setting) + '``', type, description, default, option]) + '\\n'\n        else:\n            line = self.line_format.format(['``' + str(setting) + '``', type, description, default]) + '\\n'\n        return line\n\n    def print_header(self):\n        header = self.line_format.format(self.titles) + '\\n'\n        return header\n\n    def setting_line_format(self):\n        string = ''\n        for i_field in range(self.n_fields):\n            string += '{0[' + str(i_field) + ']:<' + str(self.field_length[i_field]) + '}'\n        return string\n\n\ndef set_value_or_default(dictionary, key, default_val):\n    try:\n        value = dictionary[key]\n    except KeyError:\n        value = default_val\n    return value\n\n"
  },
  {
    "path": "sharpy/utils/sharpydir.py",
    "content": "import os\n\nSharpyDir = os.path.realpath(os.path.dirname(__file__)+'/../..')"
  },
  {
    "path": "sharpy/utils/solver_interface.py",
    "content": "from abc import ABCMeta, abstractmethod\nimport sharpy.utils.cout_utils as cout\nimport os\nimport sharpy.utils.settings as settings\nimport inspect\nimport shutil\nimport sharpy.utils.exceptions as exceptions\n\ndict_of_solvers = {}\nsolvers = {}  # for internal working\n\n\n# decorator\ndef solver(arg):\n    # global available_solvers\n    global dict_of_solvers\n    try:\n        arg.solver_id\n    except AttributeError:\n        raise AttributeError('Class defined as solver has no solver_id attribute')\n    dict_of_solvers[arg.solver_id] = arg\n\n    # a = arg()\n    # settings.SettingsTable().print(a)\n\n    return arg\n\n\ndef print_available_solvers():\n    cout.cout_wrap('The available solvers on this session are:', 2)\n    for name, i_solver in dict_of_solvers.items():\n        cout.cout_wrap('%s ' % i_solver.solver_id, 2)\n\n\nclass BaseSolver(metaclass=ABCMeta):\n\n    # solver_classification = 'other'\n    settings_types = dict()\n    settings_description = dict()\n    settings_default = dict()\n\n    # Solver id for populating available_solvers[]\n    @property\n    def solver_id(self):\n        raise NotImplementedError\n\n    # The input is a ProblemData class structure\n    @abstractmethod\n    def initialise(self, data, restart=False):\n        pass\n\n    # This executes the solver\n    @abstractmethod\n    def run(self, **kwargs):\n        pass\n\n    # @property\n    def __doc__(self):\n        # Generate documentation table\n        settings_table = settings.SettingsTable()\n        _doc = inspect.getdoc(self)\n        _doc += settings_table.generate(settings_types, settings_default, settings_description)\n        return _doc\n\n    def teardown(self):\n        pass\n\n\ndef solver_from_string(string):\n    try:\n        solver = dict_of_solvers[string]\n    except KeyError:\n        raise exceptions.SolverNotFound(string)\n    return solver\n\n\ndef solver_list_from_path(cwd):\n    onlyfiles = [f for f in os.listdir(cwd) if os.path.isfile(os.path.join(cwd, f))]\n\n    for i_file in range(len(onlyfiles)):\n        if onlyfiles[i_file].split('.')[-1] == 'py': # support autosaved files in the folder\n            if onlyfiles[i_file] == \"__init__.py\":\n                onlyfiles[i_file] = \"\"\n                continue\n            onlyfiles[i_file] = onlyfiles[i_file].replace('.py', '')\n        else:\n            onlyfiles[i_file] = \"\"\n\n    files = [file for file in onlyfiles if not file == \"\"]\n    return files\n\n\ndef initialise_solver(solver_name, print_info=True):\n    if print_info:\n        cout.cout_wrap('Generating an instance of %s' % solver_name, 2)\n    cls_type = solver_from_string(solver_name)\n    solver = cls_type()\n    return solver\n\n\ndef dictionary_of_solvers(print_info=True):\n    import sharpy.solvers\n    import sharpy.postproc\n    dictionary = dict()\n    for solver in dict_of_solvers:\n        if solver not in ['GridLoader', 'NonliftingBodyGridLoader']:\n            init_solver = initialise_solver(solver, print_info)\n            dictionary[solver] = init_solver.settings_default\n        else:\n            dictionary[solver] = {}\n\n    return dictionary\n\n\ndef output_documentation(route=None):\n    \"\"\"\n    Creates the ``.rst`` files for the solvers that have a docstring such that they can be parsed to Sphinx\n\n    Args:\n        route (str): Path to folder where solver files are to be created.\n\n    \"\"\"\n    import sharpy.utils.sharpydir as sharpydir\n    solver_types = []\n    if route is None:\n        base_route = sharpydir.SharpyDir + '/docs/source/includes/'\n        route_solvers = base_route + 'solvers/'\n        route_postprocs = base_route + 'postprocs/'\n        if os.path.exists(route_solvers):\n            print('Cleaning %s' % route_solvers)\n            shutil.rmtree(route_solvers)\n        if os.path.exists(route_postprocs):\n            print('Cleaning %s', route_postprocs)\n            shutil.rmtree(route_postprocs)\n\n    print('Creating documentation files for solvers in %s' %route_solvers)\n    print('Creating documentation files for post processors in %s' %route_postprocs)\n\n    created_solvers = dict()\n\n    for k, v in dict_of_solvers.items():\n        if k[0] == '_':\n            continue\n        solver = v()\n        created_solvers[k] = solver\n\n        filename = k + '.rst'\n\n        try:\n            solver_folder = solver.solver_classification.lower()\n        except AttributeError:\n            print('The solver {} does not have a classification. Dumping it into \"Other\"'.format(k))\n            solver_folder = 'other'\n            if solver.__doc__ is None:\n                continue\n\n        if solver_folder == 'post-processor':\n            solver_type = 'postprocessor'\n            route_to_solver_python = 'sharpy.postproc.'\n            folder = 'postprocs'\n            solver_folder = '' # post-procs do not have sub classification unlike solvers\n        else:\n            solver_type = 'solver'\n            route_to_solver_python = 'sharpy.solvers.'\n            folder = 'solvers'\n            if solver_folder not in solver_types:\n                solver_types.append(solver_folder)\n\n        if solver.solver_id == 'PreSharpy':\n            route_to_solver_python = 'sharpy.presharpy.'\n\n        os.makedirs(base_route + '/' + folder + '/' + solver_folder, exist_ok=True)\n        title = k + '\\n'\n        title += len(k)*'-' + 2*'\\n'\n        if solver.__doc__ is not None:\n            print('\\tCreating %s' %(base_route + '/' + folder + '/' + solver_folder + '/' + filename))\n            autodoc_string = ''\n            autodoc_string = '\\n\\n.. autoclass:: ' + route_to_solver_python + k.lower() + '.' + k + '\\n\\t:members:'\n            with open(base_route + '/' + folder + '/' + solver_folder + '/' + filename, \"w\") as out_file:\n                out_file.write(title + autodoc_string)\n\n    # Creates index files depending on the type of solver\n    for solver_type in solver_types:\n        if solver_type == 'post-processor':\n            continue\n        filename = solver_type + '_solvers.rst'\n        title = solver_type.capitalize() + ' Solvers'\n        title += '\\n' + len(title)*'+' + 2*'\\n'\n        with open(route_solvers + '/' + filename, \"w\") as out_file:\n            out_file.write(title)\n            out_file.write('.. toctree::' + '\\n')\n            for k in dict_of_solvers.keys():\n                if k[0] == '_':\n                    continue\n                try:\n                    if created_solvers[k].solver_classification.lower() == solver_type and created_solvers[k].__doc__ is not None:\n                        out_file.write('    ./' + solver_type + '/' + k + '\\n')\n                except AttributeError:\n                    pass\n"
  },
  {
    "path": "sharpy/version.py",
    "content": "# version stored here to don't load dependencies by storing it in __init__.py\n__version__ = '2.4'\n"
  },
  {
    "path": "tests/__init__.py",
    "content": ""
  },
  {
    "path": "tests/coupled/__init__.py",
    "content": ""
  },
  {
    "path": "tests/coupled/dynamic/__init__.py",
    "content": ""
  },
  {
    "path": "tests/coupled/dynamic/hale/generate_hale.py",
    "content": "#! /usr/bin/env python3\nimport h5py as h5\nimport numpy as np\nimport os\nimport sharpy.utils.algebra as algebra\n\ncase_name = 'hale'\nroute = os.path.dirname(os.path.realpath(__file__)) + '/'\n\n# EXECUTION\nflow = ['BeamLoader',\n        'AerogridLoader',\n        'StaticCoupled',\n        'DynamicCoupled',\n        'BeamLoads'\n        ]\n\n# if free_flight is False, the motion of the centre of the wing is prescribed.\nfree_flight = True\n\n# FLIGHT CONDITIONS\n# the simulation is set such that the aircraft flies at a u_inf velocity while\n# the air is calm.\nu_inf = 10\nrho = 1.225\n\n# trim sigma = 1.5\nalpha = 4.31 * np.pi / 180\nbeta = 0\nroll = 0\ngravity = 'on'\ncs_deflection = -2.08 * np.pi / 180\nrudder_static_deflection = 0.0\nrudder_step = 0.0 * np.pi / 180\nthrust = 6.16\nsigma = 1.5\nlambda_dihedral = 20 * np.pi / 180\n\n# gust settings\ngust_intensity = 0.20\ngust_length = 1 * u_inf\ngust_offset = 0.0 * u_inf\n\n# numerics\nn_step = 5\nstructural_relaxation_factor = 0.6\nrelaxation_factor = 0.35\ntolerance = 1e-6\nfsi_tolerance = 1e-4\n\nnum_cores = 2\n\n# MODEL GEOMETRY\n# beam\nspan_main = 16.0\nlambda_main = 0.25\nea_main = 0.3\n\nea = 1e7\nga = 1e5\ngj = 1e4\neiy = 2e4\neiz = 4e6\nm_bar_main = 0.75\nj_bar_main = 0.075\n\nlength_fuselage = 10\noffset_fuselage = 0\nsigma_fuselage = 10\nm_bar_fuselage = 0.2\nj_bar_fuselage = 0.08\n\nspan_tail = 2.5\nea_tail = 0.5\nfin_height = 2.5\nea_fin = 0.5\nsigma_tail = 100\nm_bar_tail = 0.3\nj_bar_tail = 0.08\n\n# lumped masses\nn_lumped_mass = 1\nlumped_mass_nodes = np.zeros((n_lumped_mass,), dtype=int)\nlumped_mass = np.zeros((n_lumped_mass,))\nlumped_mass[0] = 50\nlumped_mass_inertia = np.zeros((n_lumped_mass, 3, 3))\nlumped_mass_position = np.zeros((n_lumped_mass, 3))\n\n# aero\nchord_main = 1.0\nchord_tail = 0.5\nchord_fin = 0.5\n\n# DISCRETISATION\n# spatial discretisation\n# chordiwse panels\nm = 4\n# spanwise elements\nn_elem_multiplier = 1\nn_elem_main = int(4 * n_elem_multiplier)\nn_elem_tail = int(2 * n_elem_multiplier)\nn_elem_fin = int(2 * n_elem_multiplier)\nn_elem_fuselage = int(2 * n_elem_multiplier)\nn_surfaces = 5\n\n# temporal discretisation\nphysical_time = 30\ntstep_factor = 1.\ndt = 1.0 / m / u_inf * tstep_factor\nn_tstep = 5\n\n# END OF INPUT-----------------------------------------------------------------\n\n# beam processing\nn_node_elem = 3\nspan_main1 = (1.0 - lambda_main) * span_main\nspan_main2 = lambda_main * span_main\n\nn_elem_main1 = round(n_elem_main * (1 - lambda_main))\nn_elem_main2 = n_elem_main - n_elem_main1\n\n# total number of elements\nn_elem = 0\nn_elem += n_elem_main1 + n_elem_main1\nn_elem += n_elem_main2 + n_elem_main2\nn_elem += n_elem_fuselage\nn_elem += n_elem_fin\nn_elem += n_elem_tail + n_elem_tail\n\n# number of nodes per part\nn_node_main1 = n_elem_main1 * (n_node_elem - 1) + 1\nn_node_main2 = n_elem_main2 * (n_node_elem - 1) + 1\nn_node_main = n_node_main1 + n_node_main2 - 1\nn_node_fuselage = n_elem_fuselage * (n_node_elem - 1) + 1\nn_node_fin = n_elem_fin * (n_node_elem - 1) + 1\nn_node_tail = n_elem_tail * (n_node_elem - 1) + 1\n\n# total number of nodes\nn_node = 0\nn_node += n_node_main1 + n_node_main1 - 1\nn_node += n_node_main2 - 1 + n_node_main2 - 1\nn_node += n_node_fuselage - 1\nn_node += n_node_fin - 1\nn_node += n_node_tail - 1\nn_node += n_node_tail - 1\n\n# stiffness and mass matrices\nn_stiffness = 3\nbase_stiffness_main = sigma * np.diag([ea, ga, ga, gj, eiy, eiz])\nbase_stiffness_fuselage = base_stiffness_main.copy() * sigma_fuselage\nbase_stiffness_fuselage[4, 4] = base_stiffness_fuselage[5, 5]\nbase_stiffness_tail = base_stiffness_main.copy() * sigma_tail\nbase_stiffness_tail[4, 4] = base_stiffness_tail[5, 5]\n\nn_mass = 3\nbase_mass_main = np.diag([m_bar_main, m_bar_main, m_bar_main, j_bar_main, 0.5 * j_bar_main, 0.5 * j_bar_main])\nbase_mass_fuselage = np.diag([m_bar_fuselage,\n                              m_bar_fuselage,\n                              m_bar_fuselage,\n                              j_bar_fuselage,\n                              j_bar_fuselage * 0.5,\n                              j_bar_fuselage * 0.5])\nbase_mass_tail = np.diag([m_bar_tail,\n                          m_bar_tail,\n                          m_bar_tail,\n                          j_bar_tail,\n                          j_bar_tail * 0.5,\n                          j_bar_tail * 0.5])\n\n# PLACEHOLDERS\n# beam\nx = np.zeros((n_node,))\ny = np.zeros((n_node,))\nz = np.zeros((n_node,))\nbeam_number = np.zeros((n_elem,), dtype=int)\nframe_of_reference_delta = np.zeros((n_elem, n_node_elem, 3))\nstructural_twist = np.zeros((n_elem, 3))\nconn = np.zeros((n_elem, n_node_elem), dtype=int)\nstiffness = np.zeros((n_stiffness, 6, 6))\nelem_stiffness = np.zeros((n_elem,), dtype=int)\nmass = np.zeros((n_mass, 6, 6))\nelem_mass = np.zeros((n_elem,), dtype=int)\nboundary_conditions = np.zeros((n_node,), dtype=int)\napp_forces = np.zeros((n_node, 6))\n\n# aero\nairfoil_distribution = np.zeros((n_elem, n_node_elem), dtype=int)\nsurface_distribution = np.zeros((n_elem,), dtype=int) - 1\nsurface_m = np.zeros((n_surfaces,), dtype=int)\nm_distribution = 'uniform'\naero_node = np.zeros((n_node,), dtype=bool)\ntwist = np.zeros((n_elem, n_node_elem))\nsweep = np.zeros((n_elem, n_node_elem))\nchord = np.zeros((n_elem, n_node_elem,))\nelastic_axis = np.zeros((n_elem, n_node_elem,))\n\n\n# FUNCTIONS-------------------------------------------------------------\ndef clean_test_files():\n    fem_file_name = route + '/' + case_name + '.fem.h5'\n    if os.path.isfile(fem_file_name):\n        os.remove(fem_file_name)\n\n    dyn_file_name = route + '/' + case_name + '.dyn.h5'\n    if os.path.isfile(dyn_file_name):\n        os.remove(dyn_file_name)\n\n    aero_file_name = route + '/' + case_name + '.aero.h5'\n    if os.path.isfile(aero_file_name):\n        os.remove(aero_file_name)\n\n    solver_file_name = route + '/' + case_name + '.sharpy'\n    if os.path.isfile(solver_file_name):\n        os.remove(solver_file_name)\n\n    flightcon_file_name = route + '/' + case_name + '.flightcon.txt'\n    if os.path.isfile(flightcon_file_name):\n        os.remove(flightcon_file_name)\n\ndef generate_fem():\n    stiffness[0, ...] = base_stiffness_main\n    stiffness[1, ...] = base_stiffness_fuselage\n    stiffness[2, ...] = base_stiffness_tail\n\n    mass[0, ...] = base_mass_main\n    mass[1, ...] = base_mass_fuselage\n    mass[2, ...] = base_mass_tail\n\n    we = 0\n    wn = 0\n    # inner right wing\n    beam_number[we:we + n_elem_main1] = 0\n    y[wn:wn + n_node_main1] = np.linspace(0.0, span_main1, n_node_main1)\n\n    for ielem in range(n_elem_main1):\n        conn[we + ielem, :] = ((np.ones((3,)) * (we + ielem) * (n_node_elem - 1)) +\n                               [0, 2, 1])\n        for inode in range(n_node_elem):\n            frame_of_reference_delta[we + ielem, inode, :] = [-1.0, 0.0, 0.0]\n\n    elem_stiffness[we:we + n_elem_main1] = 0\n    elem_mass[we:we + n_elem_main1] = 0\n    boundary_conditions[0] = 1\n    # remember this is in B FoR\n    app_forces[0] = [0, thrust, 0, 0, 0, 0]\n    we += n_elem_main1\n    wn += n_node_main1\n\n    # outer right wing\n    beam_number[we:we + n_elem_main1] = 0\n    y[wn:wn + n_node_main2 - 1] = y[wn - 1] + np.linspace(0.0, np.cos(lambda_dihedral) * span_main2, n_node_main2)[1:]\n    z[wn:wn + n_node_main2 - 1] = z[wn - 1] + np.linspace(0.0, np.sin(lambda_dihedral) * span_main2, n_node_main2)[1:]\n    for ielem in range(n_elem_main2):\n        conn[we + ielem, :] = ((np.ones((3,)) * (we + ielem) * (n_node_elem - 1)) +\n                               [0, 2, 1])\n        for inode in range(n_node_elem):\n            frame_of_reference_delta[we + ielem, inode, :] = [-1.0, 0.0, 0.0]\n    elem_stiffness[we:we + n_elem_main2] = 0\n    elem_mass[we:we + n_elem_main2] = 0\n    boundary_conditions[wn + n_node_main2 - 2] = -1\n    we += n_elem_main2\n    wn += n_node_main2 - 1\n\n    # inner left wing\n    beam_number[we:we + n_elem_main1 - 1] = 1\n    y[wn:wn + n_node_main1 - 1] = np.linspace(0.0, -span_main1, n_node_main1)[1:]\n    for ielem in range(n_elem_main1):\n        conn[we + ielem, :] = ((np.ones((3,)) * (we + ielem) * (n_node_elem - 1)) +\n                               [0, 2, 1])\n        for inode in range(n_node_elem):\n            frame_of_reference_delta[we + ielem, inode, :] = [1.0, 0.0, 0.0]\n    conn[we, 0] = 0\n    elem_stiffness[we:we + n_elem_main1] = 0\n    elem_mass[we:we + n_elem_main1] = 0\n    we += n_elem_main1\n    wn += n_node_main1 - 1\n\n    # outer left wing\n    beam_number[we:we + n_elem_main2] = 1\n    y[wn:wn + n_node_main2 - 1] = y[wn - 1] + np.linspace(0.0, -np.cos(lambda_dihedral) * span_main2, n_node_main2)[1:]\n    z[wn:wn + n_node_main2 - 1] = z[wn - 1] + np.linspace(0.0, np.sin(lambda_dihedral) * span_main2, n_node_main2)[1:]\n    for ielem in range(n_elem_main2):\n        conn[we + ielem, :] = ((np.ones((3,)) * (we + ielem) * (n_node_elem - 1)) +\n                               [0, 2, 1])\n        for inode in range(n_node_elem):\n            frame_of_reference_delta[we + ielem, inode, :] = [1.0, 0.0, 0.0]\n    elem_stiffness[we:we + n_elem_main2] = 0\n    elem_mass[we:we + n_elem_main2] = 0\n    boundary_conditions[wn + n_node_main2 - 2] = -1\n    we += n_elem_main2\n    wn += n_node_main2 - 1\n\n    # fuselage\n    beam_number[we:we + n_elem_fuselage] = 2\n    x[wn:wn + n_node_fuselage - 1] = np.linspace(0.0, length_fuselage, n_node_fuselage)[1:]\n    z[wn:wn + n_node_fuselage - 1] = np.linspace(0.0, offset_fuselage, n_node_fuselage)[1:]\n    for ielem in range(n_elem_fuselage):\n        conn[we + ielem, :] = ((np.ones((3,)) * (we + ielem) * (n_node_elem - 1)) +\n                               [0, 2, 1])\n        for inode in range(n_node_elem):\n            frame_of_reference_delta[we + ielem, inode, :] = [0.0, 1.0, 0.0]\n    conn[we, 0] = 0\n    elem_stiffness[we:we + n_elem_fuselage] = 1\n    elem_mass[we:we + n_elem_fuselage] = 1\n    we += n_elem_fuselage\n    wn += n_node_fuselage - 1\n    global end_of_fuselage_node\n    end_of_fuselage_node = wn - 1\n\n    # fin\n    beam_number[we:we + n_elem_fin] = 3\n    x[wn:wn + n_node_fin - 1] = x[end_of_fuselage_node]\n    z[wn:wn + n_node_fin - 1] = z[end_of_fuselage_node] + np.linspace(0.0, fin_height, n_node_fin)[1:]\n    for ielem in range(n_elem_fin):\n        conn[we + ielem, :] = ((np.ones((3,)) * (we + ielem) * (n_node_elem - 1)) +\n                               [0, 2, 1])\n        for inode in range(n_node_elem):\n            frame_of_reference_delta[we + ielem, inode, :] = [-1.0, 0.0, 0.0]\n    conn[we, 0] = end_of_fuselage_node\n    elem_stiffness[we:we + n_elem_fin] = 2\n    elem_mass[we:we + n_elem_fin] = 2\n    we += n_elem_fin\n    wn += n_node_fin - 1\n    end_of_fin_node = wn - 1\n\n    # right tail\n    beam_number[we:we + n_elem_tail] = 4\n    x[wn:wn + n_node_tail - 1] = x[end_of_fin_node]\n    y[wn:wn + n_node_tail - 1] = np.linspace(0.0, span_tail, n_node_tail)[1:]\n    z[wn:wn + n_node_tail - 1] = z[end_of_fin_node]\n    for ielem in range(n_elem_tail):\n        conn[we + ielem, :] = ((np.ones((3,)) * (we + ielem) * (n_node_elem - 1)) +\n                               [0, 2, 1])\n        for inode in range(n_node_elem):\n            frame_of_reference_delta[we + ielem, inode, :] = [-1.0, 0.0, 0.0]\n    conn[we, 0] = end_of_fin_node\n    elem_stiffness[we:we + n_elem_tail] = 2\n    elem_mass[we:we + n_elem_tail] = 2\n    boundary_conditions[wn + n_node_tail - 2] = -1\n    we += n_elem_tail\n    wn += n_node_tail - 1\n\n    # left tail\n    beam_number[we:we + n_elem_tail] = 5\n    x[wn:wn + n_node_tail - 1] = x[end_of_fin_node]\n    y[wn:wn + n_node_tail - 1] = np.linspace(0.0, -span_tail, n_node_tail)[1:]\n    z[wn:wn + n_node_tail - 1] = z[end_of_fin_node]\n    for ielem in range(n_elem_tail):\n        conn[we + ielem, :] = ((np.ones((3,)) * (we + ielem) * (n_node_elem - 1)) +\n                               [0, 2, 1])\n        for inode in range(n_node_elem):\n            frame_of_reference_delta[we + ielem, inode, :] = [1.0, 0.0, 0.0]\n    conn[we, 0] = end_of_fin_node\n    elem_stiffness[we:we + n_elem_tail] = 2\n    elem_mass[we:we + n_elem_tail] = 2\n    boundary_conditions[wn + n_node_tail - 2] = -1\n    we += n_elem_tail\n    wn += n_node_tail - 1\n\n    with h5.File(route + '/' + case_name + '.fem.h5', 'a') as h5file:\n        coordinates = h5file.create_dataset('coordinates', data=np.column_stack((x, y, z)))\n        conectivities = h5file.create_dataset('connectivities', data=conn)\n        num_nodes_elem_handle = h5file.create_dataset(\n            'num_node_elem', data=n_node_elem)\n        num_nodes_handle = h5file.create_dataset(\n            'num_node', data=n_node)\n        num_elem_handle = h5file.create_dataset(\n            'num_elem', data=n_elem)\n        stiffness_db_handle = h5file.create_dataset(\n            'stiffness_db', data=stiffness)\n        stiffness_handle = h5file.create_dataset(\n            'elem_stiffness', data=elem_stiffness)\n        mass_db_handle = h5file.create_dataset(\n            'mass_db', data=mass)\n        mass_handle = h5file.create_dataset(\n            'elem_mass', data=elem_mass)\n        frame_of_reference_delta_handle = h5file.create_dataset(\n            'frame_of_reference_delta', data=frame_of_reference_delta)\n        structural_twist_handle = h5file.create_dataset(\n            'structural_twist', data=structural_twist)\n        bocos_handle = h5file.create_dataset(\n            'boundary_conditions', data=boundary_conditions)\n        beam_handle = h5file.create_dataset(\n            'beam_number', data=beam_number)\n        app_forces_handle = h5file.create_dataset(\n            'app_forces', data=app_forces)\n        lumped_mass_nodes_handle = h5file.create_dataset(\n            'lumped_mass_nodes', data=lumped_mass_nodes)\n        lumped_mass_handle = h5file.create_dataset(\n            'lumped_mass', data=lumped_mass)\n        lumped_mass_inertia_handle = h5file.create_dataset(\n            'lumped_mass_inertia', data=lumped_mass_inertia)\n        lumped_mass_position_handle = h5file.create_dataset(\n            'lumped_mass_position', data=lumped_mass_position)\n\n\ndef generate_aero_file():\n    global x, y, z\n    # control surfaces\n    n_control_surfaces = 2\n    control_surface = np.zeros((n_elem, n_node_elem), dtype=int) - 1\n    control_surface_type = np.zeros((n_control_surfaces,), dtype=int)\n    control_surface_deflection = np.zeros((n_control_surfaces,))\n    control_surface_chord = np.zeros((n_control_surfaces,), dtype=int)\n    control_surface_hinge_coord = np.zeros((n_control_surfaces,), dtype=float)\n\n    # control surface type 0 = static\n    # control surface type 1 = dynamic\n    control_surface_type[0] = 0\n    control_surface_deflection[0] = cs_deflection\n    control_surface_chord[0] = m\n    control_surface_hinge_coord[0] = -0.25  # nondimensional wrt elastic axis (+ towards the trailing edge)\n\n    control_surface_type[1] = 0\n    control_surface_deflection[1] = rudder_static_deflection\n    control_surface_chord[1] = 1\n    control_surface_hinge_coord[1] = -0.  # nondimensional wrt elastic axis (+ towards the trailing edge)\n\n    we = 0\n    wn = 0\n    # right wing (surface 0, beam 0)\n    i_surf = 0\n    airfoil_distribution[we:we + n_elem_main, :] = 0\n    surface_distribution[we:we + n_elem_main] = i_surf\n    surface_m[i_surf] = m\n    aero_node[wn:wn + n_node_main] = True\n    temp_chord = np.linspace(chord_main, chord_main, n_node_main)\n    temp_sweep = np.linspace(0.0, 0 * np.pi / 180, n_node_main)\n    node_counter = 0\n    for i_elem in range(we, we + n_elem_main):\n        for i_local_node in range(n_node_elem):\n            if not i_local_node == 0:\n                node_counter += 1\n            chord[i_elem, i_local_node] = temp_chord[node_counter]\n            elastic_axis[i_elem, i_local_node] = ea_main\n            sweep[i_elem, i_local_node] = temp_sweep[node_counter]\n\n    we += n_elem_main\n    wn += n_node_main\n\n    # left wing (surface 1, beam 1)\n    i_surf = 1\n    airfoil_distribution[we:we + n_elem_main, :] = 0\n    # airfoil_distribution[wn:wn + n_node_main - 1] = 0\n    surface_distribution[we:we + n_elem_main] = i_surf\n    surface_m[i_surf] = m\n    aero_node[wn:wn + n_node_main - 1] = True\n    # chord[wn:wn + num_node_main - 1] = np.linspace(main_chord, main_tip_chord, num_node_main)[1:]\n    # chord[wn:wn + num_node_main - 1] = main_chord\n    # elastic_axis[wn:wn + num_node_main - 1] = main_ea\n    temp_chord = np.linspace(chord_main, chord_main, n_node_main)\n    node_counter = 0\n    for i_elem in range(we, we + n_elem_main):\n        for i_local_node in range(n_node_elem):\n            if not i_local_node == 0:\n                node_counter += 1\n            chord[i_elem, i_local_node] = temp_chord[node_counter]\n            elastic_axis[i_elem, i_local_node] = ea_main\n            sweep[i_elem, i_local_node] = -temp_sweep[node_counter]\n\n    we += n_elem_main\n    wn += n_node_main - 1\n\n    we += n_elem_fuselage\n    wn += n_node_fuselage - 1 - 1\n    #\n    # # fin (surface 2, beam 3)\n    i_surf = 2\n    airfoil_distribution[we:we + n_elem_fin, :] = 1\n    # airfoil_distribution[wn:wn + n_node_fin] = 0\n    surface_distribution[we:we + n_elem_fin] = i_surf\n    surface_m[i_surf] = m\n    aero_node[wn:wn + n_node_fin] = True\n    # chord[wn:wn + num_node_fin] = fin_chord\n    for i_elem in range(we, we + n_elem_fin):\n        for i_local_node in range(n_node_elem):\n            chord[i_elem, i_local_node] = chord_fin\n            elastic_axis[i_elem, i_local_node] = ea_fin\n            control_surface[i_elem, i_local_node] = 1\n    # twist[end_of_fuselage_node] = 0\n    # twist[wn:] = 0\n    # elastic_axis[wn:wn + num_node_main] = fin_ea\n    we += n_elem_fin\n    wn += n_node_fin - 1\n    #\n    # # # right tail (surface 3, beam 4)\n    i_surf = 3\n    airfoil_distribution[we:we + n_elem_tail, :] = 2\n    # airfoil_distribution[wn:wn + n_node_tail] = 0\n    surface_distribution[we:we + n_elem_tail] = i_surf\n    surface_m[i_surf] = m\n    # XXX not very elegant\n    aero_node[wn:] = True\n    # chord[wn:wn + num_node_tail] = tail_chord\n    # elastic_axis[wn:wn + num_node_main] = tail_ea\n    for i_elem in range(we, we + n_elem_tail):\n        for i_local_node in range(n_node_elem):\n            twist[i_elem, i_local_node] = -0\n    for i_elem in range(we, we + n_elem_tail):\n        for i_local_node in range(n_node_elem):\n            chord[i_elem, i_local_node] = chord_tail\n            elastic_axis[i_elem, i_local_node] = ea_tail\n            control_surface[i_elem, i_local_node] = 0\n\n    we += n_elem_tail\n    wn += n_node_tail\n    #\n    # # left tail (surface 4, beam 5)\n    i_surf = 4\n    airfoil_distribution[we:we + n_elem_tail, :] = 2\n    # airfoil_distribution[wn:wn + n_node_tail - 1] = 0\n    surface_distribution[we:we + n_elem_tail] = i_surf\n    surface_m[i_surf] = m\n    aero_node[wn:wn + n_node_tail - 1] = True\n    # chord[wn:wn + num_node_tail] = tail_chord\n    # elastic_axis[wn:wn + num_node_main] = tail_ea\n    # twist[we:we + num_elem_tail] = -tail_twist\n    for i_elem in range(we, we + n_elem_tail):\n        for i_local_node in range(n_node_elem):\n            twist[i_elem, i_local_node] = -0\n    for i_elem in range(we, we + n_elem_tail):\n        for i_local_node in range(n_node_elem):\n            chord[i_elem, i_local_node] = chord_tail\n            elastic_axis[i_elem, i_local_node] = ea_tail\n            control_surface[i_elem, i_local_node] = 0\n    we += n_elem_tail\n    wn += n_node_tail\n\n    with h5.File(route + '/' + case_name + '.aero.h5', 'a') as h5file:\n        airfoils_group = h5file.create_group('airfoils')\n        # add one airfoil\n        naca_airfoil_main = airfoils_group.create_dataset('0', data=np.column_stack(\n            generate_naca_camber(P=0, M=0)))\n        naca_airfoil_tail = airfoils_group.create_dataset('1', data=np.column_stack(\n            generate_naca_camber(P=0, M=0)))\n        naca_airfoil_fin = airfoils_group.create_dataset('2', data=np.column_stack(\n            generate_naca_camber(P=0, M=0)))\n\n        # chord\n        chord_input = h5file.create_dataset('chord', data=chord)\n        dim_attr = chord_input.attrs['units'] = 'm'\n\n        # twist\n        twist_input = h5file.create_dataset('twist', data=twist)\n        dim_attr = twist_input.attrs['units'] = 'rad'\n\n        # sweep\n        sweep_input = h5file.create_dataset('sweep', data=sweep)\n        dim_attr = sweep_input.attrs['units'] = 'rad'\n\n        # airfoil distribution\n        airfoil_distribution_input = h5file.create_dataset('airfoil_distribution', data=airfoil_distribution)\n\n        surface_distribution_input = h5file.create_dataset('surface_distribution', data=surface_distribution)\n        surface_m_input = h5file.create_dataset('surface_m', data=surface_m)\n        m_distribution_input = h5file.create_dataset('m_distribution', data=m_distribution.encode('ascii', 'ignore'))\n\n        aero_node_input = h5file.create_dataset('aero_node', data=aero_node)\n        elastic_axis_input = h5file.create_dataset('elastic_axis', data=elastic_axis)\n\n        control_surface_input = h5file.create_dataset('control_surface', data=control_surface)\n        control_surface_deflection_input = h5file.create_dataset('control_surface_deflection',\n                                                                 data=control_surface_deflection)\n        control_surface_chord_input = h5file.create_dataset('control_surface_chord', data=control_surface_chord)\n        control_surface_hinge_coord_input = h5file.create_dataset('control_surface_hinge_coord',\n                                                                  data=control_surface_hinge_coord)\n        control_surface_types_input = h5file.create_dataset('control_surface_type', data=control_surface_type)\n\n\ndef generate_naca_camber(M=0, P=0):\n    mm = M * 1e-2\n    p = P * 1e-1\n\n    def naca(x, mm, p):\n        if x < 1e-6:\n            return 0.0\n        elif x < p:\n            return mm / (p * p) * (2 * p * x - x * x)\n        elif x > p and x < 1 + 1e-6:\n            return mm / ((1 - p) * (1 - p)) * (1 - 2 * p + 2 * p * x - x * x)\n\n    x_vec = np.linspace(0, 1, 1000)\n    y_vec = np.array([naca(x, mm, p) for x in x_vec])\n    return x_vec, y_vec\n\n\ndef generate_solver_file():\n    file_name = route + '/' + case_name + '.sharpy'\n    settings = dict()\n    settings['SHARPy'] = {'case': case_name,\n                          'route': route,\n                          'flow': flow,\n                          'write_screen': 'off',\n                          'write_log': 'off',\n                          'log_folder': route + '/output/',\n                          'log_file': case_name + '.log'}\n\n    settings['NonLinearStatic'] = {'print_info': 'off',\n                                   'max_iterations': 150,\n                                   'num_load_steps': 1,\n                                   'delta_curved': 1e-1,\n                                   'min_delta': tolerance,\n                                   'gravity_on': gravity,\n                                   'gravity': 9.81}\n\n    settings['StaticUvlm'] = {'print_info': 'on',\n                              'horseshoe': 'off',\n                              'num_cores': num_cores,\n                              'n_rollup': 0,\n                              'rollup_dt': dt,\n                              'rollup_aic_refresh': 1,\n                              'rollup_tolerance': 1e-4,\n                              'velocity_field_generator': 'SteadyVelocityField',\n                              'velocity_field_input': {'u_inf': u_inf,\n                                                       'u_inf_direction': [1., 0, 0]},\n                              'rho': rho}\n\n    settings['StaticCoupled'] = {'print_info': 'off',\n                                 'structural_solver': 'NonLinearStatic',\n                                 'structural_solver_settings': settings['NonLinearStatic'],\n                                 'aero_solver': 'StaticUvlm',\n                                 'aero_solver_settings': settings['StaticUvlm'],\n                                 'max_iter': 100,\n                                 'n_load_steps': n_step,\n                                 'tolerance': fsi_tolerance,\n                                 'relaxation_factor': structural_relaxation_factor}\n\n    settings['StaticTrim'] = {'solver': 'StaticCoupled',\n                              'solver_settings': settings['StaticCoupled'],\n                              'initial_alpha': alpha,\n                              'initial_deflection': cs_deflection,\n                              'initial_thrust': thrust}\n\n    settings['NonLinearDynamicCoupledStep'] = {'print_info': 'off',\n                                               'max_iterations': 950,\n                                               'delta_curved': 1e-1,\n                                               'min_delta': tolerance,\n                                               'newmark_damp': 5e-3,\n                                               'gravity_on': gravity,\n                                               'gravity': 9.81,\n                                               'num_steps': n_tstep,\n                                               'dt': dt,\n                                               'initial_velocity': u_inf}\n\n    relative_motion = 'off'\n    settings['StepUvlm'] = {'print_info': 'off',\n                            'num_cores': num_cores,\n                            'convection_scheme': 2,\n                            'gamma_dot_filtering': 7,\n                            'velocity_field_generator': 'GustVelocityField',\n                            'velocity_field_input': {'u_inf': int(not free_flight) * u_inf,\n                                                     'u_inf_direction': [1., 0, 0],\n                                                     'gust_shape': '1-cos',\n                                                     'gust_parameters': {'gust_length': gust_length,\n                                                                         'gust_intensity': gust_intensity * u_inf},\n                                                     'offset': gust_offset,\n                                                     'relative_motion': relative_motion},\n                            'rho': rho,\n                            'n_time_steps': n_tstep,\n                            'dt': dt}\n    settings['BeamLoads'] = {'csv_output': True}\n    solver = 'NonLinearDynamicCoupledStep'\n    settings['DynamicCoupled'] = {'structural_solver': solver,\n                                  'structural_solver_settings': settings[solver],\n                                  'aero_solver': 'StepUvlm',\n                                  'aero_solver_settings': settings['StepUvlm'],\n                                  'fsi_substeps': 3,\n                                  'fsi_tolerance': 1e-3,\n                                  'relaxation_factor': 0,\n                                  'minimum_steps': 1,\n                                  'relaxation_steps': 150,\n                                  'final_relaxation_factor': 0.5,\n                                  'n_time_steps': n_tstep,\n                                  'dt': dt,\n                                  'include_unsteady_force_contribution': 'on',\n                                  }\n    \n    settings['BeamLoader'] = {'unsteady': 'on',\n                              'orientation': algebra.euler2quat(np.array([roll,\n                                                                          alpha,\n                                                                          beta]))}\n\n    settings['AerogridLoader'] = {'unsteady': 'on',\n                                  'aligned_grid': 'on',\n                                  'mstar': int(20 / tstep_factor),\n                                  'freestream_dir': ['1', '0', '0'],\n                                  'wake_shape_generator': 'StraightWake',\n                                  'wake_shape_generator_input': {'u_inf': u_inf,\n                                                                 'u_inf_direction': ['1', '0', '0'],\n                                                                 'dt': dt}}\n\n\n    import configobj\n    config = configobj.ConfigObj()\n    config.filename = file_name\n    for k, v in settings.items():\n        config[k] = v\n    config.write()\n\n\nclean_test_files()\ngenerate_fem()\ngenerate_aero_file()\ngenerate_solver_file()\n"
  },
  {
    "path": "tests/coupled/dynamic/test_dynamic.py",
    "content": "import numpy as np\nimport unittest\nimport os\n\n\nclass TestCoupledDynamic(unittest.TestCase):\n    \"\"\"\n    Tests for dynamic coupled problems to identify errors in the unsteady solvers.\n    Implemented tests:\n    - Gust response of the hale aircraft\n    \"\"\"\n\n    route_file_dir = os.path.abspath(os.path.dirname(os.path.realpath(__file__)))\n    \n    def test_hale_dynamic(self):\n        \"\"\"\n        Case and results from:\n        tests/coupled/dynamic/hale \n        reference results produced with SHARPy version 2.0\n        :return:\n        \"\"\"\n        import sharpy.sharpy_main\n        try:\n            import hale.generate_hale\n        except:\n            import tests.coupled.dynamic.hale.generate_hale\n        \n        case_name = 'hale'\n        cases_folder = os.path.join(self.route_file_dir, case_name)\n        output_folder = cases_folder + '/output/'\n\n        sharpy.sharpy_main.main(['', cases_folder + '/hale.sharpy'])\n        n_tstep = 5\n        # compare results with reference values \n        ref_Fz = -531.023900359779\n        ref_My = -1530.0477841197576\n\n        file = os.path.join(output_folder, case_name, 'beam/beam_loads_%i.csv' % (n_tstep))\n        beam_loads_ts = np.loadtxt(file, delimiter=',')\n        np.testing.assert_almost_equal(float(beam_loads_ts[0, 6]), ref_Fz,\n                                       decimal=3,\n                                       err_msg='Vertical load on wing root not within 3 decimal points of reference.',\n                                       verbose=True)\n        np.testing.assert_almost_equal(float(beam_loads_ts[0, 8]), ref_My,\n                                       decimal=3,\n                                       err_msg='Pitching moment on wing root not within 3 decimal points of reference.',\n                                       verbose=True)\n\n    @classmethod\n    def tearDown(self):\n        \"\"\"\n            Removes all created files within this test.\n        \"\"\"\n        import shutil\n        folders = ['hale/output']\n        for folder in folders:\n            shutil.rmtree(self.route_file_dir + '/' + folder)\n        files = ['hale/hale.aero.h5', 'hale/hale.fem.h5', 'hale/hale.sharpy']\n        for file in files:\n            file_dir = self.route_file_dir + '/' + file\n            if os.path.isfile(file_dir):\n                os.remove(file_dir)\n            \n   \n\nif __name__ == '__main__':\n    unittest.main()"
  },
  {
    "path": "tests/coupled/multibody/__init__.py",
    "content": "import tests.coupled.multibody.double_pendulum\nimport tests.coupled.multibody.fix_node_velocity_wrtA\nimport tests.coupled.multibody.fix_node_velocity_wrtG\n"
  },
  {
    "path": "tests/coupled/multibody/double_pendulum/__init__.py",
    "content": ""
  },
  {
    "path": "tests/coupled/multibody/double_pendulum/test_double_pendulum_geradin.py",
    "content": "import numpy as np\nimport unittest\nimport os\nimport shutil\n\n# Data from Geradin\n# time[s] theta[rad]\ngeradin_FoR0 = np.array([[-0.0117973, 1.56808],\n                        [0.0816564, 1.5394],\n                        [0.171988, 1.41698],\n                        [0.235203, 1.31521],\n                        [0.307327, 1.09265],\n                        [0.427399, 0.601124],\n                        [0.526338, 0.0899229],\n                        [0.646417, -0.394903],\n                        [0.748531, -0.765465],\n                        [0.868959, -0.94209],\n                        [0.905131, -0.956217],\n                        [0.965504, -0.903829],\n                        [1.06828, -0.69149],\n                        [1.16508, -0.425429],\n                        [1.29798, -0.240495],\n                        [1.42483, -0.0688408],\n                        [1.56382, 0.169571],\n                        [1.78751, 0.634087],\n                        [1.89627, 0.806105],\n                        [1.98075, 0.844608],\n                        [2.10125, 0.734983],\n                        [2.19143, 0.478564],\n                        [2.26934, 0.0347871],\n                        [2.37751, -0.315796],\n                        [2.52803, -0.546627],\n                        [2.60034, -0.601682],\n                        [2.76314, -0.645155],\n                        [2.88987, -0.580701],\n                        [3.05893, -0.423295],\n                        [3.24611, -0.239453],\n                        [3.43335, -0.00201041],\n                        [3.51194, 0.157214],\n                        [3.59668, 0.423517],\n                        [3.6815, 0.756821],\n                        [3.73591, 0.87633],\n                        [3.81435, 0.901554],\n                        [3.93481, 0.751729],\n                        [4.04305, 0.468146],\n                        [4.17525, 0.0366783],\n                        [4.34949, -0.556439],\n                        [4.44551, -0.987179],\n                        [4.57784, -1.29805],\n                        [4.65016, -1.3531],\n                        [4.70444, -1.35419],\n                        [4.78294, -1.27537],\n                        [4.86762, -1.06267],\n                        [4.99464, -0.743611]])\n\ngeradin_FoR1 = np.array([[0.00756934, 0.0266485],\n                        [0.134225, 0.0241027],\n                        [0.309222, 0.100987],\n                        [0.418117, 0.393606],\n                        [0.490855, 0.713752],\n                        [0.533195, 0.820103],\n                        [0.635787, 0.871642],\n                        [0.762124, 0.587696],\n                        [0.85826, 0.264156],\n                        [0.918194, -0.0720575],\n                        [0.996205, -0.422034],\n                        [1.05008, -0.784926],\n                        [1.09792, -1.1477],\n                        [1.1639, -1.47063],\n                        [1.27207, -1.82121],\n                        [1.38636, -2.09152],\n                        [1.47067, -2.20042],\n                        [1.53694, -2.26875],\n                        [1.67582, -2.12414],\n                        [1.8028, -1.84528],\n                        [1.89365, -1.5121],\n                        [1.97843, -1.2056],\n                        [2.00271, -1.07208],\n                        [2.08146, -0.765457],\n                        [2.14818, -0.431789],\n                        [2.19686, -0.0575583],\n                        [2.24552, 0.303273],\n                        [2.29421, 0.690904],\n                        [2.37299, 1.02433],\n                        [2.44573, 1.34447],\n                        [2.55464, 1.65049],\n                        [2.65749, 1.92983],\n                        [2.7904, 2.12817],\n                        [2.94135, 2.27254],\n                        [3.03182, 2.27072],\n                        [3.18853, 2.17376],\n                        [3.30891, 1.95694],\n                        [3.42312, 1.61964],\n                        [3.50121, 1.33666],\n                        [3.56714, 0.973525],\n                        [3.61495, 0.583954],\n                        [3.66883, 0.221062],\n                        [3.71673, -0.0881084],\n                        [3.80076, -0.451606],\n                        [3.87271, -0.828262],\n                        [3.95678, -1.15156],\n                        [3.98681, -1.25937],\n                        [4.08307, -1.47571],\n                        [4.13729, -1.5304],\n                        [4.27618, -1.38579],\n                        [4.36701, -1.066],\n                        [4.4217, -0.705294],\n                        [4.50652, -0.37199],\n                        [4.59132, -0.0520868],\n                        [4.68815, 0.240774],\n                        [4.79703, 0.519993],\n                        [4.91188, 0.74549],\n                        [4.98432, 0.797635]])\n\n\nclass TestDoublePendulum(unittest.TestCase):\n    \"\"\"\n    Validation of a double pendulum with a mass at each tip position\n\n    Reference case: M. Geradin and A. Cardona, \"Flexible multibody dynamics : a finite element approach\"\n    \"\"\"\n\n    def setUp(self):\n        import sharpy.utils.generate_cases as gc\n        from sharpy.utils.constants import deg2rad\n\n        # Structural properties\n        mass_per_unit_length = 1.\n        mass_iner = 1e-4\n        EA = 1e9\n        GA = 1e9\n        GJ = 1e9\n        EI = 1e9\n\n        # Beam1\n        global nnodes1\n        nnodes1 = 11\n        l1 = 1.0\n        m1 = 1.0\n        theta_ini1 = 90.*deg2rad\n\n        # Beam2\n        nnodes2 = nnodes1\n        l2 = l1\n        m2 = m1\n        theta_ini2 = 00.*deg2rad\n\n        # airfoils\n        airfoil = np.zeros((1,20,2),)\n        airfoil[0,:,0] = np.linspace(0.,1.,20)\n\n        # Simulation\n        numtimesteps = 10\n        dt = 0.01\n\n        # Create the structure\n        beam1 = gc.AeroelasticInformation()\n        r1 = np.linspace(0.0, l1, nnodes1)\n        node_pos1 = np.zeros((nnodes1,3),)\n        node_pos1[:, 0] = r1*np.sin(theta_ini1)\n        node_pos1[:, 2] = -r1*np.cos(theta_ini1)\n        beam1.StructuralInformation.generate_uniform_sym_beam(node_pos1, mass_per_unit_length, mass_iner, EA, GA, GJ, EI, num_node_elem = 3, y_BFoR = 'y_AFoR', num_lumped_mass=1)\n        beam1.StructuralInformation.body_number = np.zeros((beam1.StructuralInformation.num_elem,), dtype = int)\n        beam1.StructuralInformation.boundary_conditions[0] = 1\n        beam1.StructuralInformation.boundary_conditions[-1] = -1\n        beam1.StructuralInformation.lumped_mass_nodes = np.array([nnodes1-1], dtype = int)\n        beam1.StructuralInformation.lumped_mass = np.ones((1,))*m1\n        beam1.StructuralInformation.lumped_mass_inertia = np.zeros((1,3,3))\n        beam1.StructuralInformation.lumped_mass_position = np.zeros((1,3))\n        beam1.AerodynamicInformation.create_one_uniform_aerodynamics(\n                                            beam1.StructuralInformation,\n                                            chord = 1.,\n                                            twist = 0.,\n                                            sweep = 0.,\n                                            num_chord_panels = 4,\n                                            m_distribution = 'uniform',\n                                            elastic_axis = 0.25,\n                                            num_points_camber = 20,\n                                            airfoil = airfoil)\n\n        beam2 = gc.AeroelasticInformation()\n        r2 = np.linspace(0.0, l2, nnodes2)\n        node_pos2 = np.zeros((nnodes2,3),)\n        node_pos2[:, 0] = r2*np.sin(theta_ini2) + node_pos1[-1, 0]\n        node_pos2[:, 2] = -r2*np.cos(theta_ini2) + node_pos1[-1, 2]\n        beam2.StructuralInformation.generate_uniform_sym_beam(node_pos2, mass_per_unit_length, mass_iner, EA, GA, GJ, EI, num_node_elem = 3, y_BFoR = 'y_AFoR', num_lumped_mass=1)\n        beam2.StructuralInformation.body_number = np.zeros((beam1.StructuralInformation.num_elem,), dtype = int)\n        beam2.StructuralInformation.boundary_conditions[0] = 1\n        beam2.StructuralInformation.boundary_conditions[-1] = -1\n        beam2.StructuralInformation.lumped_mass_nodes = np.array([nnodes2-1], dtype = int)\n        beam2.StructuralInformation.lumped_mass = np.ones((1,))*m2\n        beam2.StructuralInformation.lumped_mass_inertia = np.zeros((1,3,3))\n        beam2.StructuralInformation.lumped_mass_position = np.zeros((1,3))\n        beam2.AerodynamicInformation.create_one_uniform_aerodynamics(\n                                            beam2.StructuralInformation,\n                                            chord = 1.,\n                                            twist = 0.,\n                                            sweep = 0.,\n                                            num_chord_panels = 4,\n                                            m_distribution = 'uniform',\n                                            elastic_axis = 0.25,\n                                            num_points_camber = 20,\n                                            airfoil = airfoil)\n\n        beam1.assembly(beam2)\n\n        # Simulation details\n        SimInfo = gc.SimulationInformation()\n        SimInfo.set_default_values()\n\n        SimInfo.define_uinf(np.array([0.0,1.0,0.0]), 1.)\n\n        SimInfo.solvers['SHARPy']['flow'] = ['BeamLoader',\n                                'AerogridLoader',\n                                'DynamicCoupled']\n        global name_hinge\n        name_hinge = 'dpg_hinge'\n        SimInfo.solvers['SHARPy']['case'] = name_hinge\n        SimInfo.solvers['SHARPy']['write_screen'] = 'off'\n        SimInfo.solvers['SHARPy']['route'] = os.path.abspath(os.path.dirname(os.path.realpath(__file__))) + '/'\n        SimInfo.solvers['SHARPy']['log_folder'] = os.path.abspath(os.path.dirname(os.path.realpath(__file__))) + '/output/'\n        SimInfo.set_variable_all_dicts('dt', dt)\n        SimInfo.define_num_steps(numtimesteps)\n        SimInfo.set_variable_all_dicts('rho', 0.0)\n        SimInfo.set_variable_all_dicts('velocity_field_input', SimInfo.solvers['SteadyVelocityField'])\n        SimInfo.set_variable_all_dicts('output', os.path.abspath(os.path.dirname(os.path.realpath(__file__))) + '/output/')\n\n        SimInfo.solvers['BeamLoader']['unsteady'] = 'on'\n\n        SimInfo.solvers['AerogridLoader']['unsteady'] = 'on'\n        SimInfo.solvers['AerogridLoader']['mstar'] = 2\n        SimInfo.solvers['AerogridLoader']['wake_shape_generator'] = 'StraightWake'\n        SimInfo.solvers['AerogridLoader']['wake_shape_generator_input'] = {'u_inf':1.,\n                                                                           'u_inf_direction': np.array([0., 1., 0.]),\n                                                                           'dt': dt}\n\n\n        SimInfo.solvers['WriteVariablesTime']['FoR_number'] = np.array([0, 1], dtype = int)\n        SimInfo.solvers['WriteVariablesTime']['FoR_variables'] = ['mb_quat']\n        SimInfo.solvers['WriteVariablesTime']['structure_nodes'] = np.array([nnodes1-1, nnodes1+nnodes2-1], dtype = int)\n        SimInfo.solvers['WriteVariablesTime']['structure_variables'] = ['pos']\n\n        SimInfo.solvers['NonLinearDynamicMultibody']['gravity_on'] = True\n        SimInfo.solvers['NonLinearDynamicMultibody']['time_integrator'] = 'NewmarkBeta'\n        SimInfo.solvers['NonLinearDynamicMultibody']['time_integrator_settings'] = {'newmark_damp': 0.15,\n                                                                                    'dt': dt}\n        SimInfo.solvers['NonLinearDynamicMultibody']['write_lm'] = True\n\n        SimInfo.solvers['BeamPlot']['include_FoR'] = True\n\n        SimInfo.solvers['DynamicCoupled']['structural_solver'] = 'NonLinearDynamicMultibody'\n        SimInfo.solvers['DynamicCoupled']['structural_solver_settings'] = SimInfo.solvers['NonLinearDynamicMultibody']\n        SimInfo.solvers['DynamicCoupled']['aero_solver'] = 'StepUvlm'\n        SimInfo.solvers['DynamicCoupled']['aero_solver_settings'] = SimInfo.solvers['StepUvlm']\n        SimInfo.solvers['DynamicCoupled']['postprocessors'] = ['WriteVariablesTime', 'BeamPlot', 'AerogridPlot']\n        SimInfo.solvers['DynamicCoupled']['postprocessors_settings'] = {'WriteVariablesTime': SimInfo.solvers['WriteVariablesTime'],\n                                                                        'BeamPlot': SimInfo.solvers['BeamPlot'],\n                                                                        'AerogridPlot': SimInfo.solvers['AerogridPlot']}\n\n        SimInfo.with_forced_vel = False\n        SimInfo.with_dynamic_forces = False\n\n        # Create the MB and BC files\n        LC1 = gc.LagrangeConstraint()\n        LC1.behaviour = 'hinge_FoR'\n        LC1.body_FoR = 0\n        LC1.rot_axis_AFoR = np.array([0.0,1.0,0.0])\n        LC1.scalingFactor = 1e6\n        LC1.penaltyFactor = 0.\n\n        LC2 = gc.LagrangeConstraint()\n        LC2.behaviour = 'hinge_node_FoR'\n        LC2.node_in_body = nnodes1-1\n        LC2.body = 0\n        LC2.body_FoR = 1\n        LC2.rot_axisB = np.array([0.0,1.0,0.0])\n        LC2.scalingFactor = 1e6\n        LC2.penaltyFactor = 0.\n\n        LC = []\n        LC.append(LC1)\n        LC.append(LC2)\n\n        MB1 = gc.BodyInformation()\n        MB1.body_number = 0\n        MB1.FoR_position = np.zeros((6,),)\n        MB1.FoR_velocity = np.zeros((6,),)\n        MB1.FoR_acceleration = np.zeros((6,),)\n        MB1.FoR_movement = 'free'\n        MB1.quat = np.array([1.0,0.0,0.0,0.0])\n\n        MB2 = gc.BodyInformation()\n        MB2.body_number = 1\n        MB2.FoR_position = np.array([node_pos2[0, 0], node_pos2[0, 1], node_pos2[0, 2], 0.0, 0.0, 0.0])\n        MB2.FoR_velocity = np.zeros((6,),)\n        MB2.FoR_acceleration = np.zeros((6,),)\n        MB2.FoR_movement = 'free'\n        MB2.quat = np.array([1.0,0.0,0.0,0.0])\n\n        MB = []\n        MB.append(MB1)\n        MB.append(MB2)\n\n        # Write files\n        gc.clean_test_files(SimInfo.solvers['SHARPy']['route'], SimInfo.solvers['SHARPy']['case'])\n        SimInfo.generate_solver_file()\n        SimInfo.generate_dyn_file(numtimesteps)\n        beam1.generate_h5_files(SimInfo.solvers['SHARPy']['route'], SimInfo.solvers['SHARPy']['case'])\n        gc.generate_multibody_file(LC, MB,SimInfo.solvers['SHARPy']['route'], SimInfo.solvers['SHARPy']['case'])\n\n        # Same case without dissipation\n        global name_nb_zero_dis\n        name_nb_zero_dis = 'dpg_nb_zero_dis'\n        SimInfo.solvers['SHARPy']['case'] = name_nb_zero_dis\n\n        SimInfo.solvers['NonLinearDynamicMultibody']['time_integrator_settings'] = {'newmark_damp': 0.,\n                                                                                    'dt': dt}\n\n        gc.clean_test_files(SimInfo.solvers['SHARPy']['route'], SimInfo.solvers['SHARPy']['case'])\n        SimInfo.generate_solver_file()\n        SimInfo.generate_dyn_file(numtimesteps)\n        beam1.generate_h5_files(SimInfo.solvers['SHARPy']['route'], SimInfo.solvers['SHARPy']['case'])\n        gc.generate_multibody_file(LC, MB,SimInfo.solvers['SHARPy']['route'], SimInfo.solvers['SHARPy']['case'])\n\n        # Same case with generalised alpha\n        global name_ga\n        name_ga = 'dpg_ga'\n        SimInfo.solvers['SHARPy']['case'] = name_ga\n\n        SimInfo.solvers['NonLinearDynamicMultibody']['time_integrator'] = 'GeneralisedAlpha'\n        SimInfo.solvers['NonLinearDynamicMultibody']['time_integrator_settings'] = {'am': 0.5,\n                                                                                    'af': 0.5,\n                                                                                    'dt': dt}\n\n        gc.clean_test_files(SimInfo.solvers['SHARPy']['route'], SimInfo.solvers['SHARPy']['case'])\n        SimInfo.generate_solver_file()\n        SimInfo.generate_dyn_file(numtimesteps)\n        beam1.generate_h5_files(SimInfo.solvers['SHARPy']['route'], SimInfo.solvers['SHARPy']['case'])\n        gc.generate_multibody_file(LC, MB,SimInfo.solvers['SHARPy']['route'], SimInfo.solvers['SHARPy']['case'])\n\n        # Same case with spherical joints\n        global name_spherical\n        name_spherical = 'dpg_spherical'\n        SimInfo.solvers['SHARPy']['case'] = name_spherical\n\n        SimInfo.solvers['NonLinearDynamicMultibody']['time_integrator'] = 'NewmarkBeta'\n        SimInfo.solvers['NonLinearDynamicMultibody']['time_integrator_settings'] = {'newmark_damp': 0.15,\n                                                                                    'dt': dt}\n\n        LC1 = gc.LagrangeConstraint()\n        LC1.behaviour = 'spherical_FoR'\n        LC1.body_FoR = 0\n        LC1.scalingFactor = 1e6\n\n        LC2 = gc.LagrangeConstraint()\n        LC2.behaviour = 'spherical_node_FoR'\n        LC2.node_in_body = nnodes1-1\n        LC2.body = 0\n        LC2.body_FoR = 1\n        LC2.scalingFactor = 1e6\n\n        gc.clean_test_files(SimInfo.solvers['SHARPy']['route'], SimInfo.solvers['SHARPy']['case'])\n        SimInfo.generate_solver_file()\n        SimInfo.generate_dyn_file(numtimesteps)\n        beam1.generate_h5_files(SimInfo.solvers['SHARPy']['route'], SimInfo.solvers['SHARPy']['case'])\n        gc.generate_multibody_file(LC, MB,SimInfo.solvers['SHARPy']['route'], SimInfo.solvers['SHARPy']['case'])\n\n    def run_and_assert(self, name):\n        import sharpy.sharpy_main\n\n        solver_path = os.path.abspath(os.path.dirname(os.path.realpath(__file__)) + '/' + name + '.sharpy')\n        sharpy.sharpy_main.main(['', solver_path])\n\n        # read output and compare\n        output_path = os.path.abspath(os.path.dirname(os.path.realpath(__file__))) + '/output/' + name + '/WriteVariablesTime/'\n        pos_tip_data = np.loadtxt((\"%sstruct_pos_node%d.dat\" % (output_path, nnodes1*2-1)), )\n        self.assertAlmostEqual(pos_tip_data[-1, 1], 1.051004, 4)\n        self.assertAlmostEqual(pos_tip_data[-1, 2], 0.000000, 4)\n        self.assertAlmostEqual(pos_tip_data[-1, 3], -0.9986984, 4)\n\n    def test_doublependulum_hinge(self):\n        self.run_and_assert(name_hinge)\n\n    def test_doublependulum_spherical(self):\n        self.run_and_assert(name_spherical)\n\n    def test_doublependulum_ga(self):\n        import sharpy.sharpy_main\n\n        nb_solver_path = os.path.abspath(os.path.dirname(os.path.realpath(__file__)) + '/' + name_nb_zero_dis + '.sharpy')\n        sharpy.sharpy_main.main(['', nb_solver_path])\n\n        ga_solver_path = os.path.abspath(os.path.dirname(os.path.realpath(__file__)) + '/' + name_ga + '.sharpy')\n        sharpy.sharpy_main.main(['', ga_solver_path])\n\n        # read output and compare\n        nb_output_path = os.path.abspath(os.path.dirname(os.path.realpath(__file__))) + '/output/' + name_nb_zero_dis + '/WriteVariablesTime/'\n        nb_pos_tip_data = np.loadtxt((\"%sstruct_pos_node%d.dat\" % (nb_output_path, nnodes1*2-1)), )\n\n        ga_output_path = os.path.abspath(os.path.dirname(os.path.realpath(__file__))) + '/output/' + name_ga + '/WriteVariablesTime/'\n        ga_pos_tip_data = np.loadtxt((\"%sstruct_pos_node%d.dat\" % (ga_output_path, nnodes1*2-1)), )\n\n        self.assertAlmostEqual(nb_pos_tip_data[-1, 1], ga_pos_tip_data[-1, 1], 4)\n        self.assertAlmostEqual(nb_pos_tip_data[-1, 2], ga_pos_tip_data[-1, 2], 4)\n        self.assertAlmostEqual(nb_pos_tip_data[-1, 3], ga_pos_tip_data[-1, 3], 4)\n\n    def tearDown(self):\n        solver_path = os.path.abspath(os.path.dirname(os.path.realpath(__file__)))\n        solver_path += '/'\n        for name in [name_hinge, name_spherical, name_ga, name_nb_zero_dis]:\n            files_to_delete = [name + '.aero.h5',\n                               name + '.dyn.h5',\n                               name + '.fem.h5',\n                               name + '.mb.h5',\n                               name + '.sharpy']\n            for f in files_to_delete:\n                os.remove(solver_path + f)\n\n        shutil.rmtree(solver_path + 'output/')\n\nif __name__ == '__main__':\n    unittest.main()\n"
  },
  {
    "path": "tests/coupled/multibody/double_prescribed_pendulum/test_double_prescribed_pendulum.py",
    "content": "import numpy as np\nimport os\nimport shutil\nfrom matplotlib import pyplot as plt\nimport unittest\n\nimport sharpy.sharpy_main\nimport sharpy.utils.algebra as ag\nimport sharpy.utils.generate_cases as gc\n\n\nclass TestDoublePrescribedPendulum(unittest.TestCase):\n    # this case is not convenient for using a setup method, as the second case definition depends upon the first\n    # we'll just shove it all in the run method\n    @staticmethod\n    def run_and_assert():\n        # Simulation inputs\n        case_name_free = 'free_double_pendulum_jax'\n        case_name_prescribed = 'prescribed_double_pendulum_jax'\n\n        try:\n            shutil.rmtree('' + str(os.path.dirname(os.path.realpath(__file__))) + '/cases/')\n        except:\n            pass\n\n        try:\n            shutil.rmtree('' + str(os.path.dirname(os.path.realpath(__file__))) + '/output/')\n        except:\n            pass\n\n        os.makedirs('' + str(os.path.dirname(os.path.realpath(__file__))) + '/cases/')\n        os.makedirs('' + str(os.path.dirname(os.path.realpath(__file__))) + '/output/')\n\n        case_route = os.path.abspath(os.path.dirname(os.path.realpath(__file__))) + '/cases/'\n        case_out_folder = case_route + '/output/'\n\n        total_time = 0.05  # physical time (s)\n        dt = 0.002  # time step length (s)\n        n_tstep = int(total_time / dt)  # number of time steps\n        hinge_ang = np.deg2rad(30.)\n\n        # Beam structural properties\n        beam_l = 0.5  # beam length (m)\n        beam_yz = 0.02  # cross-section width/height (m)\n        beam_A = beam_yz ** 2  # square cross-section area`\n        beam_rho = 2700.0  # beam material density (kg/m^3)\n        beam_m = beam_rho * beam_A  # beam mass per unit length (kg/m)\n        beam_iner = beam_m * beam_yz ** 2 / 6.  # beam inertia per unit length (kg m)\n\n        EA = 2.800e7  # axial stiffness\n        GA = 1.037e7  # shear stiffness\n        GJ = 6.914e2  # torsional stiffness\n        EI = 9.333e2  # bending stiffness\n\n        # Toggle on to make spaghetti\n        # GJ *= 5e-2\n        # EI *= 5e-2\n\n        # Airfoils (required as the NoAero solver still requires an aero grid)\n        airfoil = np.zeros((1, 20, 2))\n        airfoil[0, :, 0] = np.linspace(0., 1., 20)\n\n        # Beam 0\n        beam0_n_nodes = 11  # number of nodes\n        beam0_l = beam_l  # beam length\n        beam0_ml = 0.0  # lumped mass\n        beam0_theta_ini = np.deg2rad(90.)  # initial beam angle\n\n        # Beam 1\n        beam1_n_nodes = 11  # number of nodes\n        beam1_l = beam_l  # beam length\n        beam1_ml = 0.0  # lumped mass\n        beam1_theta_ini = np.deg2rad(90.)  # initial beam angle\n\n        for hinge_dir in ('y',):\n            # Create beam 0 structure\n            beam0 = gc.AeroelasticInformation()  # use aeroelastic as controllers implemented here\n            beam0_r = np.linspace(0., beam0_l, beam0_n_nodes)  # local node placement\n            beam0_pos_ini = np.zeros((beam0_n_nodes, 3))  # initial global node placement\n            match hinge_dir:\n                case 'x':\n                    beam0_pos_ini[:, 1] = beam0_r * np.sin(beam0_theta_ini)\n                    beam0_pos_ini[:, 2] = -beam0_r * np.cos(beam0_theta_ini)\n                    y_BFoR = 'x_AFoR'\n                case 'y':\n                    beam0_pos_ini[:, 0] = beam0_r * np.sin(beam0_theta_ini)\n                    beam0_pos_ini[:, 2] = -beam0_r * np.cos(beam0_theta_ini)\n                    y_BFoR = 'y_AFoR'\n                case _:\n                    raise KeyError\n\n            beam0.StructuralInformation.generate_uniform_beam(beam0_pos_ini, beam_m, beam_iner, beam_iner / 2.0,\n                                                              beam_iner / 2.0,\n                                                              np.zeros(3), EA, GA, GA, GJ, EI, EI,\n                                                              num_node_elem=3, y_BFoR=y_BFoR, num_lumped_mass=1)\n\n            beam0.StructuralInformation.body_number = np.zeros(beam0.StructuralInformation.num_elem, dtype=int)\n            beam0.StructuralInformation.boundary_conditions[0] = 1\n            beam0.StructuralInformation.boundary_conditions[-1] = -1\n            beam0.StructuralInformation.lumped_mass_nodes = np.array([beam0_n_nodes - 1], dtype=int)\n            beam0.StructuralInformation.lumped_mass = np.ones(1) * beam0_ml\n            beam0.StructuralInformation.lumped_mass_inertia = np.zeros((1, 3, 3))\n            beam0.StructuralInformation.lumped_mass_position = np.zeros((1, 3))\n            beam0.AerodynamicInformation.create_one_uniform_aerodynamics(\n                beam0.StructuralInformation, chord=1., twist=0., sweep=0.,\n                num_chord_panels=4, m_distribution='uniform', elastic_axis=0.25,\n                num_points_camber=20, airfoil=airfoil)\n\n            # Create beam 1 structure\n            beam1 = gc.AeroelasticInformation()\n            beam1_r = np.linspace(0., beam1_l, beam0_n_nodes)  # local node placement\n\n            beam1_pos_ini = np.zeros((beam0_n_nodes, 3))  # initial global node placement\n            match hinge_dir:\n                case 'x':\n                    beam1_pos_ini[:, 1] = beam1_r * np.sin(beam1_theta_ini) + beam0_pos_ini[-1, 1]\n                    beam1_pos_ini[:, 2] = -beam0_r * np.cos(beam1_theta_ini) + beam0_pos_ini[-1, 2]\n                case 'y':\n                    beam1_pos_ini[:, 0] = beam1_r * np.sin(beam1_theta_ini) + beam0_pos_ini[-1, 0]\n                    beam1_pos_ini[:, 2] = -beam1_r * np.cos(beam1_theta_ini) + beam0_pos_ini[-1, 2]\n                case _:\n                    raise KeyError\n\n            beam1.StructuralInformation.generate_uniform_beam(beam1_pos_ini, beam_m, beam_iner, beam_iner / 2.0,\n                                                              beam_iner / 2.0,\n                                                              np.zeros(3), EA, GA, GA, GJ, EI, EI,\n                                                              num_node_elem=3, y_BFoR=y_BFoR, num_lumped_mass=1)\n\n            beam1.StructuralInformation.body_number = np.zeros(beam1.StructuralInformation.num_elem, dtype=int)\n            beam1.StructuralInformation.boundary_conditions[0] = 1\n            beam1.StructuralInformation.boundary_conditions[-1] = -1\n            beam1.StructuralInformation.lumped_mass_nodes = np.array([beam1_n_nodes - 1], dtype=int)\n            beam1.StructuralInformation.lumped_mass = np.ones(1) * beam1_ml\n            beam1.StructuralInformation.lumped_mass_inertia = np.zeros((1, 3, 3))\n            beam1.StructuralInformation.lumped_mass_position = np.zeros((1, 3))\n            beam1.AerodynamicInformation.create_one_uniform_aerodynamics(\n                beam1.StructuralInformation, chord=1., twist=0., sweep=0.,\n                num_chord_panels=4, m_distribution='uniform', elastic_axis=0.25,\n                num_points_camber=20, airfoil=airfoil)\n\n            # Combine beam1 into beam0\n            beam0.assembly(beam1)\n\n            # Create the MB and BC parameters\n            # Free hinge\n            LC0_free = gc.LagrangeConstraint()\n            LC0_free.behaviour = 'hinge_FoR'\n            LC0_free.body_FoR = 0\n            match hinge_dir:\n                case 'x':\n                    LC0_free.rot_axis_AFoR = np.array((1., 0., 0.))\n                case 'y':\n                    LC0_free.rot_axis_AFoR = np.array((0., 1., 0.))\n            LC0_free.scalingFactor = dt ** -2\n\n            # Free hinge between beams\n            LC1_free = gc.LagrangeConstraint()\n            LC1_free.behaviour = 'hinge_node_FoR'\n            LC1_free.node_in_body = beam0_n_nodes - 1\n            LC1_free.body = 0\n            LC1_free.body_FoR = 1\n            match hinge_dir:\n                case 'x':\n                    LC1_free.rot_axisB = np.array((np.sin(hinge_ang), np.cos(hinge_ang), 0.))\n                    LC1_free.rot_axisA2 = np.array((np.cos(hinge_ang), np.sin(hinge_ang), 0.))\n                case 'y':\n                    LC1_free.rot_axisB = np.array((np.sin(hinge_ang), np.cos(hinge_ang), 0.))\n                    LC1_free.rot_axisA2 = np.array((np.sin(hinge_ang), np.cos(hinge_ang), 0.))\n            LC1_free.scalingFactor = dt ** -2\n\n            LC_free = [LC0_free, LC1_free]  # List of LCs\n\n            MB0 = gc.BodyInformation()\n            MB0.body_number = 0\n            MB0.FoR_position = np.zeros(6)\n            MB0.FoR_velocity = np.zeros(6)\n            MB0.FoR_acceleration = np.zeros(6)\n            MB0.FoR_movement = 'free'\n            MB0.quat = np.array([1., 0., 0., 0.])\n\n            MB1 = gc.BodyInformation()\n            MB1.body_number = 1\n            MB1.FoR_position = np.array([*beam1_pos_ini[0, :], 0., 0., 0.])\n            MB1.FoR_velocity = np.zeros(6)\n            MB1.FoR_acceleration = np.zeros(6)\n            MB1.FoR_movement = 'free'\n            MB1.quat = np.array((1., 0., 0., 0.))\n\n            MB = [MB0, MB1]  # List of MBs\n\n            # Simulation details\n            SimInfo = gc.SimulationInformation()\n            SimInfo.set_default_values()\n            SimInfo.with_forced_vel = False\n            SimInfo.with_dynamic_forces = False\n\n            SimInfo.solvers['SHARPy']['flow'] = [\n                'BeamLoader',\n                'AerogridLoader',\n                'DynamicCoupled'\n            ]\n\n            SimInfo.solvers['SHARPy']['case'] = case_name_free\n            SimInfo.solvers['SHARPy']['write_screen'] = False\n            SimInfo.solvers['SHARPy']['route'] = case_route\n            SimInfo.solvers['SHARPy']['log_folder'] = case_out_folder\n            SimInfo.set_variable_all_dicts('dt', dt)\n            SimInfo.define_num_steps(n_tstep)\n            SimInfo.set_variable_all_dicts('output', case_out_folder)\n\n            SimInfo.solvers['BeamLoader']['unsteady'] = 'on'\n\n            SimInfo.solvers['AerogridLoader']['unsteady'] = 'on'\n            SimInfo.solvers['AerogridLoader']['mstar'] = 2\n            SimInfo.solvers['AerogridLoader']['wake_shape_generator'] = 'StraightWake'\n            SimInfo.solvers['AerogridLoader']['wake_shape_generator_input'] = {'u_inf': 1.,\n                                                                               'u_inf_direction': np.array(\n                                                                                   (0., 1., 0.)),\n                                                                               'dt': dt}\n\n            SimInfo.solvers['NonLinearDynamicMultibodyJAX']['write_lm'] = False\n            SimInfo.solvers['NonLinearDynamicMultibodyJAX']['gravity_on'] = True\n            SimInfo.solvers['NonLinearDynamicMultibodyJAX']['gravity'] = 9.81\n            SimInfo.solvers['NonLinearDynamicMultibodyJAX']['time_integrator'] = 'NewmarkBetaJAX'\n            SimInfo.solvers['NonLinearDynamicMultibodyJAX']['time_integrator_settings'] = {'newmark_damp': 0.0,\n                                                                                           'dt': dt}\n\n            SimInfo.solvers['BeamPlot']['include_FoR'] = False\n\n            SimInfo.solvers['DynamicCoupled']['structural_solver'] = 'NonLinearDynamicMultibodyJAX'\n            SimInfo.solvers['DynamicCoupled']['structural_solver_settings'] = SimInfo.solvers[\n                'NonLinearDynamicMultibodyJAX']\n            SimInfo.solvers['DynamicCoupled']['aero_solver'] = 'NoAero'\n            SimInfo.solvers['DynamicCoupled']['aero_solver_settings'] = SimInfo.solvers['NoAero']\n            SimInfo.solvers['DynamicCoupled']['postprocessors'] = ['BeamPlot']\n            SimInfo.solvers['DynamicCoupled']['postprocessors_settings'] = {'BeamPlot': {}}\n\n            # Write files\n            gc.clean_test_files(case_route, case_name_free)\n            SimInfo.generate_solver_file()\n            SimInfo.generate_dyn_file(n_tstep)\n            beam0.generate_h5_files(case_route, case_name_free)\n            gc.generate_multibody_file(LC_free, MB, case_route, case_name_free, use_jax=True)\n\n            # Run SHARPy for free case\n            case_data_free = sharpy.sharpy_main.main(['', case_route + case_name_free + '.sharpy'])\n\n            # Calculate constraint angles\n            quat0 = [case_data_free.structure.timestep_info[i].mb_quat[0, :] for i in range(n_tstep)]\n            quat1 = [case_data_free.structure.timestep_info[i].mb_quat[1, :] for i in range(n_tstep)]\n            psi_ga = [case_data_free.structure.timestep_info[i].psi[int((beam0_n_nodes - 3) / 2), 1, :] for i in\n                      range(n_tstep)]\n\n            psi_a = [ag.quat2crv(quat0[i]) for i in range(n_tstep)]\n\n            psi_hg = [ag.rotation2crv(ag.quat2rotation(quat0[i])\n                                      @ ag.crv2rotation(psi_ga[i])\n                                      @ ag.quat2rotation(quat1[i]).T) for i in range(n_tstep)]\n\n            # Calculate constraint velocities\n            omega_a = [case_data_free.structure.timestep_info[i].mb_FoR_vel[0, 3:] for i in range(n_tstep)]\n            omega_h = [case_data_free.structure.timestep_info[i].mb_FoR_vel[1, 3:] for i in range(n_tstep)]\n            psi_ga_dot = [case_data_free.structure.timestep_info[i].psi_dot[int((beam0_n_nodes - 3) / 2), 1, :] for i in\n                          range(n_tstep)]\n\n            psi_a_dot = [np.linalg.solve(ag.crv2tan(psi_a[i]), omega_a[i]) for i in range(n_tstep)]\n\n            term1 = [-ag.crv2tan(psi_ga[i]) @ psi_ga_dot[i]\n                     - ag.crv2rotation(psi_ga[i]).T @ omega_a[i]\n                     + ag.crv2rotation(psi_ga[i]).T @ ag.quat2rotation(quat0[i]).T @ ag.quat2rotation(quat1[i]) @\n                     omega_h[i]\n                     for i in range(n_tstep)]\n\n            psi_hg_dot = [np.linalg.inv(ag.crv2tan(psi_hg[i])) @ ag.crv2rotation(psi_hg[i]) @ term1[i] for i in\n                          range(n_tstep)]\n\n            # Controller inputs\n            angle_input_file0 = case_out_folder + f'angle_input0_{hinge_dir}.npy'\n            angle_input_file1 = case_out_folder + f'angle_input1_{hinge_dir}.npy'\n            vel_input_file0 = case_out_folder + f'vel_input0_{hinge_dir}.npy'\n            vel_input_file1 = case_out_folder + f'vel_input1_{hinge_dir}.npy'\n\n            angle_input0 = np.array(psi_a)\n            angle_input1 = np.array(psi_hg)\n            vel_input0 = np.array(psi_a_dot)\n            vel_input1 = np.array(psi_hg_dot)\n\n            # Uncomment to stop prescribed pendulum tracking after a certain timestep (prove both cases aren't actually free!)\n            # angle_input1[int(n_tstep/2):, :] = angle_input1[int(n_tstep/2) - 1, :]\n            # vel_input1[int(n_tstep/2):, :] = 0.\n\n            np.save(angle_input_file0, angle_input0)\n            np.save(angle_input_file1, angle_input1)\n            np.save(vel_input_file0, vel_input0)\n            np.save(vel_input_file1, vel_input1)\n\n            SimInfo.define_num_steps(n_tstep - 1)\n\n            # Prescribe top joint angular velocity\n            LC0_prescribed = gc.LagrangeConstraint()\n            LC0_prescribed.behaviour = 'control_rot_vel_FoR'\n            LC0_prescribed.controller_id = 'controller0'\n            LC0_prescribed.body_FoR = 0\n            LC0_prescribed.scalingFactor = dt ** -2\n\n            # Actuated joint between beams\n            LC1_prescribed = gc.LagrangeConstraint()\n            LC1_prescribed.behaviour = 'control_node_FoR_rot_vel'\n            LC1_prescribed.controller_id = 'controller1'\n            LC1_prescribed.node_in_body = beam1_n_nodes - 1\n            LC1_prescribed.body = 0\n            LC1_prescribed.body_FoR = 1\n            LC1_prescribed.scalingFactor = dt ** -2\n            LC1_prescribed.rel_posB = np.zeros(3)\n\n            LC_prescribed = [LC0_prescribed, LC1_prescribed]  # List of LCs\n\n            SimInfo.solvers['SHARPy']['case'] = case_name_prescribed\n            SimInfo.solvers['DynamicCoupled']['controller_id'] = {\n                'controller0': 'MultibodyController',\n                'controller1': 'MultibodyController',\n            }\n            SimInfo.solvers['DynamicCoupled']['controller_settings']['controller0'] = {\n                'ang_history_input_file': angle_input_file0,\n                'ang_vel_history_input_file': vel_input_file0,\n                'dt': dt,\n            }\n            SimInfo.solvers['DynamicCoupled']['controller_settings']['controller1'] = {\n                'ang_history_input_file': angle_input_file1,\n                'ang_vel_history_input_file': vel_input_file1,\n                'dt': dt,\n            }\n\n            # Write files\n            gc.clean_test_files(case_route, case_name_prescribed)\n            SimInfo.generate_solver_file()\n            SimInfo.generate_dyn_file(n_tstep)\n            beam0.generate_h5_files(case_route, case_name_prescribed)\n            gc.generate_multibody_file(LC_prescribed, MB, case_route, case_name_prescribed, use_jax=True)\n\n            # Run SHARPy for prescribed case\n            case_data_prescribed = sharpy.sharpy_main.main(['', case_route + case_name_prescribed + '.sharpy'])\n\n            # compare (controller framework operates a timestep behind)\n            # comparing y tip displacement\n            pos_free = case_data_free.structure.timestep_info[-3].pos[-1, 1]\n            pos_prescribed = case_data_prescribed.structure.timestep_info[-1].pos[-1, 1]\n\n            diff = np.abs((pos_free / pos_prescribed) - 1.)\n\n            if diff > 1e-3:\n                raise ValueError(f\"Free and prescribed pendulum results no not closely match: diff={diff}\")\n\n\n    def test_double_prescribed_pendulum(self):\n        self.run_and_assert()\n\n    def tearDown(self):\n        solver_path = os.path.abspath(os.path.dirname(os.path.realpath(__file__))) + '/'\n\n        shutil.rmtree(solver_path + 'cases/')\n        shutil.rmtree(solver_path + 'output/')\n\n    def teardown_method(self):\n        pass\n\nif __name__ == '__main__':\n    unittest.main()\n"
  },
  {
    "path": "tests/coupled/multibody/double_slanted_pendulum/__init__.py",
    "content": ""
  },
  {
    "path": "tests/coupled/multibody/double_slanted_pendulum/test_double_pendulum_slanted.py",
    "content": "import numpy as np\nimport unittest\nimport os\nimport shutil\nfrom sharpy.utils.constants import deg2rad\n\n\nclass TestDoublePendulumSlanted(unittest.TestCase):\n    \"\"\"\n    Validation of a double pendulum with distributed mass and flared hinge axis at the connection\n\n    As given in https://dx.doi.org/10.2514/6.2024-1441\n    \"\"\"\n\n    def _setUp(self, lateral):\n        import sharpy.utils.generate_cases as gc\n        import sharpy.utils.algebra as ag\n\n        # Structural properties\n\n        length_beam = 0.5  #meters\n        cx_length = 0.02  #meters\n\n        A = cx_length * cx_length  #assume rectangular cross section a= d^2\n        material_density = 2700.0  #kg/m^3\n\n        mass_per_unit_length = material_density * A  #kg/m\n        mass_iner = (mass_per_unit_length) * (cx_length * cx_length + cx_length * cx_length) / (12.0)\n\n        EA = 2.800e7\n        GA = 1.037e7\n        GJ = 6.914e2\n        EI = 9.333e2\n\n        lateral_ini = lateral\n\n        # Beam1\n        global nnodes1\n        nnodes1 = 11\n        l1 = length_beam\n        m1 = 0.0\n        theta_ini1 = 90. * deg2rad\n\n        # Beam2\n        nnodes2 = nnodes1\n        l2 = l1\n        m2 = m1\n        theta_ini2 = 90. * deg2rad\n\n        # airfoils\n        airfoil = np.zeros((1, 20, 2), )\n        airfoil[0, :, 0] = np.linspace(0., 1., 20)\n\n        # Simulation\n        numtimesteps = 30\n        dt = 0.01\n\n        # Create the structure\n        beam1 = gc.AeroelasticInformation()\n        r1 = np.linspace(0.0, l1, nnodes1)\n        node_pos1 = np.zeros((nnodes1, 3), )\n        node_pos1[:, 0] = r1 * np.sin(theta_ini1) * np.cos(lateral_ini)\n        node_pos1[:, 1] = r1 * np.sin(theta_ini1) * np.sin(lateral_ini)\n        node_pos1[:, 2] = -r1 * np.cos(theta_ini1)\n        beam1.StructuralInformation.generate_uniform_beam(node_pos1, mass_per_unit_length, mass_iner, mass_iner / 2.0,\n                                                          mass_iner / 2.0, np.zeros((3,), ), EA, GA, GA, GJ, EI, EI,\n                                                          num_node_elem=3, y_BFoR='y_AFoR', num_lumped_mass=1)\n        beam1.StructuralInformation.body_number = np.zeros((beam1.StructuralInformation.num_elem,), dtype=int)\n        beam1.StructuralInformation.boundary_conditions[0] = 1\n        beam1.StructuralInformation.boundary_conditions[-1] = -1\n        beam1.StructuralInformation.lumped_mass_nodes = np.array([nnodes1 - 1], dtype=int)\n        beam1.StructuralInformation.lumped_mass = np.ones((1,)) * m1\n        beam1.StructuralInformation.lumped_mass_inertia = np.zeros((1, 3, 3))\n        beam1.StructuralInformation.lumped_mass_position = np.zeros((1, 3))\n        beam1.AerodynamicInformation.create_one_uniform_aerodynamics(\n            beam1.StructuralInformation,\n            chord=1.,\n            twist=0.,\n            sweep=0.,\n            num_chord_panels=4,\n            m_distribution='uniform',\n            elastic_axis=0.25,\n            num_points_camber=20,\n            airfoil=airfoil)\n\n        beam2 = gc.AeroelasticInformation()\n        r2 = np.linspace(0.0, l2, nnodes2)\n        node_pos2 = np.zeros((nnodes2, 3), )\n        node_pos2[:, 0] = r2 * np.sin(theta_ini2) * np.cos(lateral_ini) + node_pos1[-1, 0]\n        node_pos2[:, 1] = r2 * np.sin(theta_ini2) * np.sin(lateral_ini) + node_pos1[-1, 1]\n        node_pos2[:, 2] = -r2 * np.cos(theta_ini2) + node_pos1[-1, 2] + 0.00000001\n        beam2.StructuralInformation.generate_uniform_beam(node_pos2, mass_per_unit_length, mass_iner, mass_iner / 2.0,\n                                                          mass_iner / 2.0, np.zeros((3,), ), EA, GA, GA, GJ, EI, EI,\n                                                          num_node_elem=3, y_BFoR='y_AFoR', num_lumped_mass=1)\n        beam2.StructuralInformation.body_number = np.zeros((beam1.StructuralInformation.num_elem,), dtype=int)\n        beam2.StructuralInformation.boundary_conditions[0] = 1\n        beam2.StructuralInformation.boundary_conditions[-1] = -1\n        beam2.StructuralInformation.lumped_mass_nodes = np.array([nnodes2 - 1], dtype=int)\n        beam2.StructuralInformation.lumped_mass = np.ones((1,)) * m2\n        beam2.StructuralInformation.lumped_mass_inertia = np.zeros((1, 3, 3))\n        beam2.StructuralInformation.lumped_mass_position = np.zeros((1, 3))\n        beam2.AerodynamicInformation.create_one_uniform_aerodynamics(\n            beam2.StructuralInformation,\n            chord=1.,\n            twist=0.,\n            sweep=0.,\n            num_chord_panels=4,\n            m_distribution='uniform',\n            elastic_axis=0.25,\n            num_points_camber=20,\n            airfoil=airfoil)\n\n        beam1.assembly(beam2)\n\n        # Simulation details\n        SimInfo = gc.SimulationInformation()\n        SimInfo.set_default_values()\n\n        SimInfo.define_uinf(np.array([0.0, 1.0, 0.0]), 1.)\n\n        SimInfo.solvers['SHARPy']['flow'] = ['BeamLoader',\n                                             'AerogridLoader',\n                                             'DynamicCoupled']\n\n        global name_hinge_slanted\n        name_hinge_slanted = 'name_hinge_slanted'\n        SimInfo.solvers['SHARPy']['case'] = name_hinge_slanted\n        SimInfo.solvers['SHARPy']['write_screen'] = 'off'\n        SimInfo.solvers['SHARPy']['route'] = os.path.abspath(os.path.dirname(os.path.realpath(__file__))) + '/'\n        SimInfo.solvers['SHARPy']['log_folder'] = os.path.abspath(\n            os.path.dirname(os.path.realpath(__file__))) + '/output/'\n        SimInfo.set_variable_all_dicts('dt', dt)\n        SimInfo.define_num_steps(numtimesteps)\n        SimInfo.set_variable_all_dicts('rho', 0.0)\n        SimInfo.set_variable_all_dicts('velocity_field_input', SimInfo.solvers['SteadyVelocityField'])\n        SimInfo.set_variable_all_dicts('output',\n                                       os.path.abspath(os.path.dirname(os.path.realpath(__file__))) + '/output/')\n\n        SimInfo.solvers['BeamLoader']['unsteady'] = 'on'\n\n        SimInfo.solvers['AerogridLoader']['unsteady'] = 'on'\n        SimInfo.solvers['AerogridLoader']['initial_align'] = 'off'\n        SimInfo.solvers['AerogridLoader']['aligned_grid'] = 'off'\n        SimInfo.solvers['AerogridLoader']['mstar'] = 2\n        SimInfo.solvers['AerogridLoader']['wake_shape_generator'] = 'StraightWake'\n        SimInfo.solvers['AerogridLoader']['wake_shape_generator_input'] = {'u_inf': 1.,\n                                                                           'u_inf_direction': np.array([0., 1., 0.]),\n                                                                           'dt': dt}\n\n        SimInfo.solvers['WriteVariablesTime']['FoR_number'] = np.array([0, 1], dtype=int)\n        SimInfo.solvers['WriteVariablesTime']['FoR_variables'] = ['for_pos', 'mb_quat']\n        SimInfo.solvers['WriteVariablesTime']['structure_nodes'] = np.array([nnodes1 - 1, nnodes1 + nnodes2 - 1],\n                                                                            dtype=int)\n        SimInfo.solvers['WriteVariablesTime']['structure_variables'] = ['pos']\n\n        SimInfo.solvers['NonLinearDynamicMultibody']['gravity_on'] = True\n        SimInfo.solvers['NonLinearDynamicMultibody']['gravity'] = 9.81\n        SimInfo.solvers['NonLinearDynamicMultibody']['time_integrator'] = 'NewmarkBeta'\n        SimInfo.solvers['NonLinearDynamicMultibody']['time_integrator_settings'] = {'newmark_damp': 0.0,\n                                                                                    'dt': dt}\n        SimInfo.solvers['NonLinearDynamicMultibody']['write_lm'] = True\n\n        SimInfo.solvers['BeamPlot']['include_FoR'] = True\n\n        SimInfo.solvers['DynamicCoupled']['structural_solver'] = 'NonLinearDynamicMultibody'\n        SimInfo.solvers['DynamicCoupled']['structural_solver_settings'] = SimInfo.solvers['NonLinearDynamicMultibody']\n        SimInfo.solvers['DynamicCoupled']['aero_solver'] = 'NoAero'\n        SimInfo.solvers['DynamicCoupled']['aero_solver_settings'] = SimInfo.solvers['NoAero']\n        SimInfo.solvers['DynamicCoupled']['postprocessors'] = ['WriteVariablesTime', 'BeamPlot', 'AerogridPlot']\n        SimInfo.solvers['DynamicCoupled']['postprocessors_settings'] = {\n            'WriteVariablesTime': SimInfo.solvers['WriteVariablesTime'],\n            'BeamPlot': SimInfo.solvers['BeamPlot'],\n            'AerogridPlot': SimInfo.solvers['AerogridPlot']\n            }\n\n        SimInfo.with_forced_vel = False\n        SimInfo.with_dynamic_forces = False\n\n        # Create the MB and BC files\n        LC1 = gc.LagrangeConstraint()\n        LC1.behaviour = 'hinge_FoR'\n        LC1.body_FoR = 0\n        LC1.rot_axis_AFoR = np.array([0.0, 1.0, 0.0])\n        LC1.scalingFactor = 1e6\n        LC1.penaltyFactor = 0.\n\n        LC2 = gc.LagrangeConstraint()\n        LC2.behaviour = 'hinge_node_FoR'\n        LC2.node_in_body = nnodes1 - 1\n        LC2.body = 0\n        LC2.body_FoR = 1\n        LC2.rot_axisB = np.array([np.sin(45.0 * deg2rad), np.cos(45.0 * deg2rad), 0.0])\n        LC2.rot_axisA2 = np.array([np.sin(45.0 * deg2rad), np.cos(45.0 * deg2rad), 0.0])\n        LC2.scalingFactor = 1e6\n        LC2.penaltyFactor = 0.\n\n        LC = []\n        LC.append(LC1)\n        LC.append(LC2)\n\n        MB1 = gc.BodyInformation()\n        MB1.body_number = 0\n        MB1.FoR_position = np.zeros(6)\n        MB1.FoR_velocity = np.zeros(6)\n        MB1.FoR_acceleration = np.zeros(6)\n        MB1.FoR_movement = 'free'\n        MB1.quat = ag.rotation2quat(ag.rotation3d_z(lateral_ini) @ ag.quat2rotation(np.array([1., 0., 0., 0.])))\n\n        MB2 = gc.BodyInformation()\n        MB2.body_number = 1\n        MB2.FoR_position = np.array([node_pos2[0, 0], node_pos2[0, 1], node_pos2[0, 2], 0., 0., 0.])\n        MB2.FoR_velocity = np.zeros(6)\n        MB2.FoR_acceleration = np.zeros(6)\n        MB2.FoR_movement = 'free'\n        MB2.quat = ag.rotation2quat(ag.rotation3d_z(lateral_ini) @ ag.quat2rotation(np.array([1., 0., 0., 0.])))\n\n        MB = []\n        MB.append(MB1)\n        MB.append(MB2)\n\n        # Write files\n        gc.clean_test_files(SimInfo.solvers['SHARPy']['route'], SimInfo.solvers['SHARPy']['case'])\n        SimInfo.generate_solver_file()\n        SimInfo.generate_dyn_file(numtimesteps)\n        beam1.generate_h5_files(SimInfo.solvers['SHARPy']['route'], SimInfo.solvers['SHARPy']['case'])\n        gc.generate_multibody_file(LC, MB, SimInfo.solvers['SHARPy']['route'], SimInfo.solvers['SHARPy']['case'])\n\n        # Same case with penalty weights\n        global name_hinge_slanted_pen\n        name_hinge_slanted_pen = 'name_hinge_slanted_pen'\n        SimInfo.solvers['SHARPy']['case'] = name_hinge_slanted_pen\n\n        LC1.scalingFactor = 1e-24\n        LC1.penaltyFactor = 1e0\n        LC2.scalingFactor = 1e-24\n        LC2.penaltyFactor = 1e0\n\n        gc.clean_test_files(SimInfo.solvers['SHARPy']['route'], SimInfo.solvers['SHARPy']['case'])\n        SimInfo.generate_solver_file()\n        SimInfo.generate_dyn_file(numtimesteps)\n        beam1.generate_h5_files(SimInfo.solvers['SHARPy']['route'], SimInfo.solvers['SHARPy']['case'])\n        gc.generate_multibody_file(LC, MB, SimInfo.solvers['SHARPy']['route'], SimInfo.solvers['SHARPy']['case'])\n\n        # Same case with rotated global reference\n        global name_hinge_slanted_lateralrot\n        name_hinge_slanted_lateralrot = 'name_hinge_slanted_lateralrot'\n        SimInfo.solvers['SHARPy']['case'] = name_hinge_slanted_lateralrot\n\n        LC2.rot_axisB = np.array([np.sin(45.0 * deg2rad), np.cos(45.0 * deg2rad), 0.0])\n        LC2.rot_axisA2 = np.array([np.sin(45.0 * deg2rad), np.cos(45.0 * deg2rad), 0.0])\n\n        gc.clean_test_files(SimInfo.solvers['SHARPy']['route'], SimInfo.solvers['SHARPy']['case'])\n        SimInfo.generate_solver_file()\n        SimInfo.generate_dyn_file(numtimesteps)\n        beam1.generate_h5_files(SimInfo.solvers['SHARPy']['route'], SimInfo.solvers['SHARPy']['case'])\n        gc.generate_multibody_file(LC, MB, SimInfo.solvers['SHARPy']['route'], SimInfo.solvers['SHARPy']['case'])\n\n        gc.clean_test_files(SimInfo.solvers['SHARPy']['route'], SimInfo.solvers['SHARPy']['case'])\n        SimInfo.generate_solver_file()\n        SimInfo.generate_dyn_file(numtimesteps)\n        beam1.generate_h5_files(SimInfo.solvers['SHARPy']['route'], SimInfo.solvers['SHARPy']['case'])\n        gc.generate_multibody_file(LC, MB, SimInfo.solvers['SHARPy']['route'], SimInfo.solvers['SHARPy']['case'])\n\n    def run_and_assert(self, name, lateral):\n        import sharpy.sharpy_main\n        import sharpy.utils.algebra as ag\n\n        solver_path = os.path.abspath(os.path.dirname(os.path.realpath(__file__)) + '/' + name + '.sharpy')\n        sharpy.sharpy_main.main(['', solver_path])\n\n        # read output and compare\n        output_path = os.path.abspath(\n            os.path.dirname(os.path.realpath(__file__))) + '/output/' + name + '/WriteVariablesTime/'\n        pos_tip_data = np.loadtxt((\"%sstruct_pos_node%d.dat\" % (output_path, nnodes1 * 2 - 1)), )\n        for_pos_tip_data = np.loadtxt((\"%sFoR_%02d_for_pos.dat\" % (output_path, 0)), )\n        quat_tip_data = np.loadtxt((\"%sFoR_%02d_mb_quat.dat\" % (output_path, 0)), )\n\n        calc_pos_tip_data = ag.rotation3d_z(-lateral) @ (for_pos_tip_data[-1, 1:4]\n                                                         + ag.quat2rotation(quat_tip_data[-1, 1:])\n                                                         @ pos_tip_data[-1, 1:])\n\n        self.assertAlmostEqual(calc_pos_tip_data[0], 0.80954978, 4)\n        self.assertAlmostEqual(calc_pos_tip_data[1], 0.1024842, 4)\n        self.assertAlmostEqual(calc_pos_tip_data[2], -0.48183994, 4)\n\n    def test_doublependulum_hinge_slanted(self):\n        lateral_hinge = 0. * deg2rad\n        self._setUp(lateral_hinge)\n        self.run_and_assert(name_hinge_slanted, lateral_hinge)\n\n    def test_doublependulum_hinge_slanted_pen(self):\n        lateral_hinge = 0. * deg2rad\n        self._setUp(lateral_hinge)\n        self.run_and_assert(name_hinge_slanted_pen, lateral_hinge)\n\n    def test_doublependulum_hinge_slanted_lateralrot(self):\n        lateral_hinge = 30. * deg2rad\n        self._setUp(lateral_hinge)\n        self.run_and_assert(name_hinge_slanted_lateralrot, lateral_hinge)\n\n    def tearDown(self):\n        solver_path = os.path.abspath(os.path.dirname(os.path.realpath(__file__)))\n        solver_path += '/'\n        for name in ['name_hinge_slanted', 'name_hinge_slanted_pen', 'name_hinge_slanted_lateralrot']:\n            files_to_delete = [name + '.aero.h5',\n                               name + '.dyn.h5',\n                               name + '.fem.h5',\n                               name + '.mb.h5',\n                               name + '.sharpy']\n            for f in files_to_delete:\n                os.remove(solver_path + f)\n\n        shutil.rmtree(solver_path + 'output/')\n\n\nif __name__ == '__main__':\n    unittest.main()\n"
  },
  {
    "path": "tests/coupled/multibody/fix_node_velocity_wrtA/__init__.py",
    "content": ""
  },
  {
    "path": "tests/coupled/multibody/fix_node_velocity_wrtA/test_fix_node_velocity_wrtA.py",
    "content": "import numpy as np\nimport unittest\nimport os\nimport shutil\n\nfolder = os.path.abspath(os.path.dirname(os.path.realpath(__file__)))\n\n\nclass TestFixNodeVelocitywrtA(unittest.TestCase):\n\n    def setUp(self):\n        import sharpy.utils.generate_cases as gc\n\n        nodes_per_elem = 3\n\n        # beam1: uniform and symmetric with aerodynamic properties equal to zero\n        nnodes1 = 11\n        length1  = 10.\n        mass_per_unit_length = 1.\n        mass_iner = 1e-4\n        EA = 1e7\n        GA = 1e7\n        GJ = 1e3\n        EI = 1e4\n\n        # Create beam1\n        beam1 = gc.AeroelasticInformation()\n        # Structural information\n        beam1.StructuralInformation.num_node = nnodes1\n        beam1.StructuralInformation.num_node_elem = nodes_per_elem\n        beam1.StructuralInformation.compute_basic_num_elem()\n        beam1.StructuralInformation.set_to_zero(beam1.StructuralInformation.num_node_elem, beam1.StructuralInformation.num_node, beam1.StructuralInformation.num_elem)\n        node_pos = np.zeros((nnodes1, 3), )\n        node_pos[:, 0] = np.linspace(0.0, length1, nnodes1)\n        beam1.StructuralInformation.generate_uniform_sym_beam(node_pos, mass_per_unit_length, mass_iner, EA, GA, GJ, EI, num_node_elem = 3, y_BFoR = 'y_AFoR', num_lumped_mass=1)\n        beam1.StructuralInformation.boundary_conditions[0] = 1\n        beam1.StructuralInformation.boundary_conditions[-1] = -1\n        beam1.StructuralInformation.lumped_mass_nodes = np.array([nnodes1-1], dtype=int)\n        beam1.StructuralInformation.lumped_mass = np.array([1.])\n        beam1.StructuralInformation.lumped_mass_inertia = np.zeros((1, 3, 3),)\n        beam1.StructuralInformation.lumped_mass_position = np.zeros((1, 3),)\n        # beam1.StructuralInformation.structural_twist += 2.*deg2rad\n        beam1.StructuralInformation.app_forces[-1, 2] = -10.\n\n        # Aerodynamic information\n        airfoil = np.zeros((1,20,2),)\n        airfoil[0,:,0] = np.linspace(0.,1.,20)\n        beam1.AerodynamicInformation.create_one_uniform_aerodynamics(\n                                            beam1.StructuralInformation,\n                                            chord = 1.,\n                                            twist = 0.,\n                                            sweep = 0.,\n                                            num_chord_panels = 4,\n                                            m_distribution = 'uniform',\n                                            elastic_axis = 0.5,\n                                            num_points_camber = 20,\n                                            airfoil = airfoil)\n\n        # SOLVER CONFIGURATION\n        SimInfo = gc.SimulationInformation()\n        SimInfo.set_default_values()\n\n        SimInfo.define_uinf(np.array([0.0,1.0,0.0]), 10.)\n\n        SimInfo.solvers['SHARPy']['flow'] = ['BeamLoader',\n                                'AerogridLoader',\n                                'StaticCoupled',\n                                'DynamicCoupled',\n                                'BeamPlot']\n        global name\n        name = 'fix_node_velocity_wrtA'\n        SimInfo.solvers['SHARPy']['case'] = name\n        SimInfo.solvers['SHARPy']['write_screen'] = 'off'\n        SimInfo.solvers['SHARPy']['route'] = folder + '/'\n        SimInfo.solvers['SHARPy']['log_folder'] = folder + '/output/'\n        SimInfo.set_variable_all_dicts('dt', 0.05)\n        SimInfo.set_variable_all_dicts('rho', 0.0)\n        SimInfo.set_variable_all_dicts('velocity_field_input', SimInfo.solvers['SteadyVelocityField'])\n\n        SimInfo.solvers['BeamLoader']['unsteady'] = 'on'\n\n        SimInfo.solvers['AerogridLoader']['unsteady'] = 'on'\n        SimInfo.solvers['AerogridLoader']['mstar'] = 2\n        SimInfo.solvers['AerogridLoader']['wake_shape_generator'] = 'StraightWake'\n        SimInfo.solvers['AerogridLoader']['wake_shape_generator_input'] = {'u_inf':10.,\n                                                                           'u_inf_direction': np.array([0., 1., 0.]),\n                                                                           'dt': 0.05}\n\n\n        SimInfo.solvers['NonLinearStatic']['print_info'] = False\n\n        SimInfo.solvers['StaticCoupled']['structural_solver'] = 'NonLinearStatic'\n        SimInfo.solvers['StaticCoupled']['structural_solver_settings'] = SimInfo.solvers['NonLinearStatic']\n        SimInfo.solvers['StaticCoupled']['aero_solver'] = 'StaticUvlm'\n        SimInfo.solvers['StaticCoupled']['aero_solver_settings'] = SimInfo.solvers['StaticUvlm']\n        SimInfo.solvers['StaticCoupled']['relaxation_factor'] = 0.0\n\n        SimInfo.solvers['NonLinearDynamicMultibody']['gravity_on'] = True\n\n        SimInfo.solvers['WriteVariablesTime']['structure_nodes'] = np.array([0,  int((nnodes1-1)/2), -1], dtype = int)\n        SimInfo.solvers['WriteVariablesTime']['structure_variables'] = ['pos']\n\n        SimInfo.solvers['BeamPlot']['include_FoR'] = True\n        SimInfo.solvers['NonLinearDynamicMultibody']['relaxation_factor'] = 0.2\n        SimInfo.solvers['NonLinearDynamicMultibody']['min_delta'] = 1e-6\n        SimInfo.solvers['NonLinearDynamicMultibody']['max_iterations'] = 200\n        SimInfo.solvers['NonLinearDynamicMultibody']['write_lm'] = False\n        SimInfo.solvers['NonLinearDynamicMultibody']['time_integrator'] = 'NewmarkBeta'\n        SimInfo.solvers['NonLinearDynamicMultibody']['time_integrator_settings'] = {'newmark_damp': 1e-3,\n                                                                                    'dt': 0.05}\n\n        SimInfo.solvers['WriteVariablesTime']['cleanup_old_solution'] = 'on'\n\n        SimInfo.solvers['DynamicCoupled']['structural_solver'] = 'NonLinearDynamicMultibody'\n        SimInfo.solvers['DynamicCoupled']['structural_solver_settings'] = SimInfo.solvers['NonLinearDynamicMultibody']\n        SimInfo.solvers['DynamicCoupled']['aero_solver'] = 'StepUvlm'\n        SimInfo.solvers['DynamicCoupled']['aero_solver_settings'] = SimInfo.solvers['StepUvlm']\n        SimInfo.solvers['DynamicCoupled']['postprocessors'] = ['WriteVariablesTime', 'BeamPlot', 'AerogridPlot']\n        SimInfo.solvers['DynamicCoupled']['postprocessors_settings'] = {'WriteVariablesTime': SimInfo.solvers['WriteVariablesTime'],\n                                                                        'BeamPlot': SimInfo.solvers['BeamPlot'],\n                                                                        'AerogridPlot': SimInfo.solvers['AerogridPlot']}\n\n        ntimesteps = 10\n\n        SimInfo.define_num_steps(ntimesteps)\n\n        # Define dynamic simulation\n        SimInfo.with_forced_vel = False\n        SimInfo.with_dynamic_forces = False\n\n        LC2 = gc.LagrangeConstraint()\n        LC2.behaviour = 'lin_vel_node_wrtA'\n        LC2.velocity = np.array([0.,0.,0.])\n        LC2.body_number = 0\n        LC2.node_number = int((nnodes1-1)/2)\n\n        LC = []\n        # LC.append(LC1)\n        LC.append(LC2)\n\n        # Define the multibody infromation for the tower and the rotor\n        MB1 = gc.BodyInformation()\n        MB1.body_number = 0\n        MB1.FoR_position = np.zeros((6,),)\n        MB1.FoR_velocity = np.zeros((6,),)\n        MB1.FoR_acceleration = np.zeros((6,),)\n        MB1.FoR_movement = 'prescribed'\n        MB1.quat = np.array([1.0,0.0,0.0,0.0])\n\n        MB = []\n        MB.append(MB1)\n\n\n        gc.clean_test_files(SimInfo.solvers['SHARPy']['route'], SimInfo.solvers['SHARPy']['case'])\n        SimInfo.generate_solver_file()\n        SimInfo.generate_dyn_file(ntimesteps)\n        beam1.generate_h5_files(SimInfo.solvers['SHARPy']['route'], SimInfo.solvers['SHARPy']['case'])\n        gc.generate_multibody_file(LC, MB,SimInfo.solvers['SHARPy']['route'], SimInfo.solvers['SHARPy']['case'])\n\n\n    # def tearDown():\n        # pass\n\n    def test_testfixnodevelocitywrta(self):\n        import sharpy.sharpy_main\n\n        solver_path = folder + '/fix_node_velocity_wrtA.sharpy'\n        sharpy.sharpy_main.main(['', solver_path])\n\n        # read output and compare\n        output_path = folder + '/output/fix_node_velocity_wrtA/WriteVariablesTime/'\n        # quat_data = np.matrix(np.genfromtxt(output_path + 'FoR_00_mb_quat.dat', delimiter=' '))\n        pos_tip_data = np.loadtxt((\"%sstruct_pos_node-1.dat\" % output_path), )\n        self.assertAlmostEqual(pos_tip_data[0, 1], 9.993007e+00, 3)\n        self.assertAlmostEqual(pos_tip_data[0, 2], 0., 3)\n        self.assertAlmostEqual(pos_tip_data[0, 3], -3.402154e-01, 3)\n\n        self.assertAlmostEqual(pos_tip_data[-1, 1], 9.962520e+00, 3)\n        self.assertAlmostEqual(pos_tip_data[-1, 2], 0., 3)\n        self.assertAlmostEqual(pos_tip_data[-1, 3], -6.943423e-01, 3)\n\n        pos_root_data = np.loadtxt((\"%sstruct_pos_node0.dat\" % output_path), )\n        self.assertAlmostEqual(pos_root_data[0, 1], 0.0, 2)\n        self.assertAlmostEqual(pos_root_data[0, 2], 0.0, 2)\n        self.assertAlmostEqual(pos_root_data[0, 3], 0.0, 2)\n\n        self.assertAlmostEqual(pos_root_data[-1, 1], 0.0, 2)\n        self.assertAlmostEqual(pos_root_data[-1, 2], 0.0, 2)\n        self.assertAlmostEqual(pos_root_data[-1, 3], 0.0, 2)\n\n    def tearDown(self):\n        # pass\n        files_to_delete = [name + '.aero.h5',\n                           name + '.dyn.h5',\n                           name + '.fem.h5',\n                           name + '.mb.h5',\n                           name + '.sharpy']\n        for f in files_to_delete:\n            os.remove(folder + '/' + f)\n\n        shutil.rmtree(folder + '/output/')\n"
  },
  {
    "path": "tests/coupled/multibody/fix_node_velocity_wrtG/__init__.py",
    "content": ""
  },
  {
    "path": "tests/coupled/multibody/fix_node_velocity_wrtG/test_fix_node_velocity_wrtG.py",
    "content": "import os\nimport shutil\nimport unittest\nimport numpy as np\n\nimport sharpy.utils.generate_cases as gc\nimport sharpy.sharpy_main\n\nfolder = os.path.abspath(os.path.dirname(os.path.realpath(__file__)))\n\n\nclass TestFixNodeVelocitywrtG(unittest.TestCase):\n    \"\"\"\n\n    \"\"\"\n    def setUp(self):\n\n        nodes_per_elem = 3\n\n        # beam1: uniform and symmetric with aerodynamic properties equal to zero\n        nnodes1 = 11\n        length1  = 10.\n        mass_per_unit_length = 0.1\n        mass_iner = 1e-4\n        EA = 1e9\n        GA = 1e9\n        GJ = 1e3\n        EI = 1e4\n\n        # Create beam1\n        beam1 = gc.AeroelasticInformation()\n        # Structural information\n        beam1.StructuralInformation.num_node = nnodes1\n        beam1.StructuralInformation.num_node_elem = nodes_per_elem\n        beam1.StructuralInformation.compute_basic_num_elem()\n        beam1.StructuralInformation.set_to_zero(beam1.StructuralInformation.num_node_elem, beam1.StructuralInformation.num_node, beam1.StructuralInformation.num_elem)\n        node_pos = np.zeros((nnodes1, 3), )\n        node_pos[:, 0] = np.linspace(0.0, length1, nnodes1)\n        beam1.StructuralInformation.generate_uniform_sym_beam(node_pos, mass_per_unit_length, mass_iner, EA, GA, GJ, EI, num_node_elem = 3, y_BFoR = 'y_AFoR', num_lumped_mass=2)\n        beam1.StructuralInformation.boundary_conditions[0] = 1\n        beam1.StructuralInformation.boundary_conditions[-1] = -1\n        beam1.StructuralInformation.lumped_mass_nodes = np.array([0, nnodes1-1], dtype=int)\n        beam1.StructuralInformation.lumped_mass = np.array([2., 1.])\n        beam1.StructuralInformation.lumped_mass_inertia = np.zeros((2, 3, 3),)\n        beam1.StructuralInformation.lumped_mass_position = np.zeros((2, 3),)\n\n        # Aerodynamic information\n        airfoil = np.zeros((1, 20, 2),)\n        airfoil[0, :, 0] = np.linspace(0., 1., 20)\n        beam1.AerodynamicInformation.create_one_uniform_aerodynamics(\n            beam1.StructuralInformation,\n            chord=1.,\n            twist=0.,\n            sweep=0.,\n            num_chord_panels=4,\n            m_distribution='uniform',\n            elastic_axis=0.5,\n            num_points_camber=20,\n            airfoil=airfoil)\n\n        # SOLVER CONFIGURATION\n        SimInfo = gc.SimulationInformation()\n        SimInfo.set_default_values()\n\n        SimInfo.define_uinf(np.array([0.0,1.0,0.0]), 10.)\n\n        SimInfo.solvers['SHARPy']['flow'] = ['BeamLoader',\n                                             'AerogridLoader',\n                                             'StaticCoupled',\n                                             'DynamicCoupled']\n        self.name = 'fix_node_velocity_wrtG'\n        SimInfo.solvers['SHARPy']['case'] = self.name\n        SimInfo.solvers['SHARPy']['write_screen'] = 'off'\n        SimInfo.solvers['SHARPy']['route'] = folder + '/'\n        SimInfo.solvers['SHARPy']['log_folder'] = folder + '/output/'\n        SimInfo.set_variable_all_dicts('dt', 0.1)\n        SimInfo.set_variable_all_dicts('rho', 0.0)\n        SimInfo.set_variable_all_dicts('velocity_field_input', SimInfo.solvers['SteadyVelocityField'])\n        SimInfo.set_variable_all_dicts('folder', folder + '/output/')\n\n        SimInfo.solvers['BeamLoader']['unsteady'] = 'on'\n\n        SimInfo.solvers['AerogridLoader']['unsteady'] = 'on'\n        SimInfo.solvers['AerogridLoader']['mstar'] = 2\n        SimInfo.solvers['AerogridLoader']['wake_shape_generator'] = 'StraightWake'\n        SimInfo.solvers['AerogridLoader']['wake_shape_generator_input'] = {'u_inf':10.,\n                                                                           'u_inf_direction': np.array([0., 1., 0.]),\n                                                                           'dt': 0.1}\n\n\n        SimInfo.solvers['NonLinearStatic']['print_info'] = False\n\n        SimInfo.solvers['StaticCoupled']['structural_solver'] = 'NonLinearStatic'\n        SimInfo.solvers['StaticCoupled']['structural_solver_settings'] = SimInfo.solvers['NonLinearStatic']\n        SimInfo.solvers['StaticCoupled']['aero_solver'] = 'StaticUvlm'\n        SimInfo.solvers['StaticCoupled']['aero_solver_settings'] = SimInfo.solvers['StaticUvlm']\n\n        SimInfo.solvers['WriteVariablesTime']['structure_nodes'] = np.array([0,  int((nnodes1-1)/2), -1], dtype = int)\n        SimInfo.solvers['WriteVariablesTime']['structure_variables'] = ['pos']\n\n        SimInfo.solvers['BeamPlot']['include_FoR'] = True\n\n        SimInfo.solvers['NonLinearDynamicMultibody']['relaxation_factor'] = 0.0\n        SimInfo.solvers['NonLinearDynamicMultibody']['min_delta'] = 1e-5\n        SimInfo.solvers['NonLinearDynamicMultibody']['max_iterations'] = 200\n        # SimInfo.solvers['NonLinearDynamicMultibody']['gravity_on'] = 'off'\n        SimInfo.solvers['NonLinearDynamicMultibody']['time_integrator'] = 'NewmarkBeta'\n        SimInfo.solvers['NonLinearDynamicMultibody']['time_integrator_settings'] = {'newmark_damp': 1e-3,\n                                                                                    'dt': 0.1}\n\n        SimInfo.solvers['NonLinearDynamicMultibody']['relaxation_factor'] = 0.0\n\n        SimInfo.solvers['DynamicCoupled']['structural_solver'] = 'NonLinearDynamicMultibody'\n        SimInfo.solvers['DynamicCoupled']['structural_solver_settings'] = SimInfo.solvers['NonLinearDynamicMultibody']\n        SimInfo.solvers['DynamicCoupled']['aero_solver'] = 'StepUvlm'\n        SimInfo.solvers['DynamicCoupled']['aero_solver_settings'] = SimInfo.solvers['StepUvlm']\n        SimInfo.solvers['DynamicCoupled']['postprocessors'] = ['WriteVariablesTime', 'BeamPlot', 'AerogridPlot']\n        SimInfo.solvers['DynamicCoupled']['postprocessors_settings'] = {'WriteVariablesTime': SimInfo.solvers['WriteVariablesTime'],\n                                                                        'BeamPlot': SimInfo.solvers['BeamPlot'],\n                                                                        'AerogridPlot': SimInfo.solvers['AerogridPlot']}\n\n        ntimesteps = 10\n\n        SimInfo.define_num_steps(ntimesteps)\n\n        # Define dynamic simulation\n        SimInfo.with_forced_vel = False\n        SimInfo.with_dynamic_forces = False\n\n        LC2 = gc.LagrangeConstraint()\n        LC2.behaviour = 'lin_vel_node_wrtG'\n        LC2.velocity = np.zeros((ntimesteps, 3))\n        LC2.velocity[:int(ntimesteps/2),1] = 0.5\n        LC2.velocity[int(ntimesteps/2):,1] = -0.5\n        LC2.body_number = 0\n        LC2.node_number = int((nnodes1-1)/2)\n\n        LC = []\n        # LC.append(LC1)\n        LC.append(LC2)\n\n        # Define the multibody infromation for the tower and the rotor\n        MB1 = gc.BodyInformation()\n        MB1.body_number = 0\n        MB1.FoR_position = np.zeros((6,),)\n        MB1.FoR_velocity = np.zeros((6,),)\n        MB1.FoR_acceleration = np.zeros((6,),)\n        MB1.FoR_movement = 'free'\n        MB1.quat = np.array([1.0,0.0,0.0,0.0])\n\n        MB = []\n        MB.append(MB1)\n\n\n        gc.clean_test_files(\n            SimInfo.solvers['SHARPy']['route'],\n            SimInfo.solvers['SHARPy']['case'])\n        SimInfo.generate_solver_file()\n        SimInfo.generate_dyn_file(ntimesteps)\n        beam1.generate_h5_files(\n            SimInfo.solvers['SHARPy']['route'],\n            SimInfo.solvers['SHARPy']['case'])\n        gc.generate_multibody_file(LC,\n                                   MB,SimInfo.solvers['SHARPy']['route'],\n                                   SimInfo.solvers['SHARPy']['case'])\n\n    def test_testfixnodevelocitywrtg(self):\n        \"\"\"\n\n        \"\"\"\n        solver_path = folder + '/fix_node_velocity_wrtG.sharpy'\n        sharpy.sharpy_main.main(['', solver_path])\n\n        # read output and compare\n        output_path = folder + '/output/fix_node_velocity_wrtG/WriteVariablesTime/'\n        pos_tip_data = np.loadtxt((\"%sstruct_pos_node-1.dat\" % output_path), )\n        self.assertAlmostEqual(pos_tip_data[-1, 1], 9.999386, 4)\n        self.assertAlmostEqual(pos_tip_data[-1, 2], -0.089333, 4)\n        self.assertAlmostEqual(pos_tip_data[-1, 3], 0., 4)\n\n    def tearDown(self):\n        files_to_delete = [self.name + '.aero.h5',\n                           self.name + '.dyn.h5',\n                           self.name + '.fem.h5',\n                           self.name + '.mb.h5',\n                           self.name + '.sharpy']\n        for f in files_to_delete:\n            os.remove(folder + '/' + f)\n\n        shutil.rmtree(folder + '/output/')\n"
  },
  {
    "path": "tests/coupled/multibody/floating_forces/test_floatingforces.py",
    "content": "import numpy as np\nimport unittest\nimport os\nimport shutil\nfrom scipy import fft\nimport sharpy.generators.floatingforces as ff\n\n\nclass TestFloatingForces(unittest.TestCase):\n    \"\"\"\n    Some tests of the floating forces library\n    Check references therein\n    \"\"\"\n\n    def test_compute_xf_zf(self):\n        \"\"\"\n            This function tests based on by hand computations and data from the MooringLineFD.txt file\n            from the OC3 task.\n                Jonkman, J.\n                Definition of the Floating System for Phase IV of OC3\n                NREL/TP-500-47535\n        \"\"\"\n    \n        # Values for OC3\n        l = 902.2 # Initial length [m]\n        w = 698.094 # Aparent weight 77.7066*9.81 # Apparent mass per unit length times gravity\n        EA = 384243000. # Extensional stiffness\n        cb = 0.1 # Seabed friction coefficient\n    \n        # No mooring line on the Seabed\n        vf = 1.1*l*w # 692802.4475\n        hf = vf\n        xf_byhand = 784.5965853 + 1.626695524\n        zf_byhand = 406.9813526 + 0.887288467\n        xf, zf = ff.compute_xf_zf(hf, vf, l, w, EA, cb)\n        self.assertAlmostEqual(xf_byhand, xf, 4)\n        self.assertAlmostEqual(zf_byhand, zf, 4)\n    \n        # Some mooring line on the Seabed\n        lb_div_l = 0.1 # 10% of the mooring line on the seabed\n        vf = (1-lb_div_l)*l*w\n        hf = vf\n        xf_byhand = 90.22 + 715.6577252 + 1.330932701 - 7.298744381e-4\n        zf_byhand = 336.3331284 + 0.598919715\n        xf, zf = ff.compute_xf_zf(hf, vf, l, w, EA, cb)\n        self.assertAlmostEqual(xf_byhand, xf, 4)\n        self.assertAlmostEqual(zf_byhand, zf, 4)\n    \n    \n    def test_generate_mooringlinefd(self):\n        \"\"\"\n            This function generates a file similar to MoorinLinesFD.txt for compiarison\n            File obtained from the google drive directory of the OC3 benchmark\n        \"\"\"\n    \n        # Values for OC3\n        l = 902.2 # Initial length [m]\n        w = 698.094 # Aparent weight 77.7066*9.81 # Apparent mass per unit length times gravity\n        EA = 384243000. # Extensional stiffness\n        cb = 0. # Seabed friction coefficient\n    \n        zf = 320. - 70.\n    \n        # xf0 = 853.87\n        # xf_list = np.arange(653.00, 902.50 + 1., 1.)\n        xf_list = np.arange(653.00, 902.50, 10.)\n        npoints = xf_list.shape[0]\n        output = np.zeros((npoints, 4))\n        for i in range(npoints):\n            hf, vf = ff.quasisteady_mooring(xf_list[i], zf, l, w, EA, cb, hf0=None, vf0=None)\n            # print(xf0, zf0, hf0, vf0)\n            lb = np.maximum(l - vf/w, 0)\n            # print(\"Suspended lenght = %f\" % (l - lb))\n            output[i, :] = np.array([xf_list[i], np.sqrt(vf**2 + hf**2)*1e-3, hf*1e-3, (l - lb)])\n\n        of_results = np.loadtxt(\"MooringLineFD.dat\", skiprows=9)\n        for i in range(npoints):\n            for icol in range(4):\n                of_value = np.interp(xf_list[i], of_results[:, 0], of_results[:, icol])\n                error = np.abs((np.round_(output[i, icol], 1) - of_value)/of_value)\n                self.assertLess(error, 0.1)\n                \n        save_txt = False\n        if save_txt:    \n            np.savetxt(\"sharpy_mooringlinefd.txt\", output, header=\"# DISTANCE(m) TENSION(kN) HTENSION(kN) SUSPL(m)\")\n\n    \n    def test_change_system(self):\n        # Wind turbine degrees of freedom: Surge, sway, heave, roll, pitch, yaw.\n        # SHARPy axis associated:              z,    y,     x,    z,     y,   x\n    \n        wt_matrix_num = np.zeros((6,6),)\n        for idof in range(6):\n            for jdof in range(6):\n                wt_matrix_num[idof, jdof] = 10.*idof + jdof\n    \n        sharpy_matrix = ff.change_of_to_sharpy(wt_matrix_num)\n        undo_sharpy_matrix = ff.change_of_to_sharpy(sharpy_matrix)\n        \n        for idof in range(6):\n            for jdof in range(6):\n                self.assertEqual(wt_matrix_num[idof, jdof], undo_sharpy_matrix[idof, jdof])\n   \n \n    def test_time_wave_forces(self):\n        Tp = 14.656 #10.\n        Hs = 5.49 #6.\n        nrealisations = 100\n        dt = 2*np.pi/4 # 1./20 To get max freq equal to 10Hz\n        ntime_steps = 1000\n        time = np.arange(ntime_steps)*dt\n    \n        # Get the zero-noise specturm\n        w_js = np.arange(0, 4, 0.01)\n        zero_noise_spectrum = ff.jonswap_spectrum(Tp, Hs, w_js)\n    \n        # Compute different realisations\n        xi = np.zeros((2, 6), dtype=complex)\n        xi[0, 0] = 1. + 0j\n        xi[1, 0] = 1. + 0j\n        w_xi = np.array([0., 4.])\n        wave_force = np.zeros((ntime_steps, nrealisations), dtype=np.complex)\n        for ireal in range(nrealisations):\n            wave_force[:, ireal] = ff.time_wave_forces(Tp, Hs, dt, time, xi, w_xi)[:, 0] # Keep only on dimension\n    \n        # Compute the spectrum of the realisations\n        ns = np.zeros((ntime_steps//2, nrealisations), dtype=np.complex)\n        for ireal in range(nrealisations):\n            ns[:, ireal] = dt/ntime_steps*np.abs(fft(wave_force[:, ireal])[:ntime_steps//2])**2\n            ns[1:, ireal] *= 2\n        # To rad/s\n        ns /= 2.*np.pi\n        w_ns = (np.fft.fftfreq(ntime_steps, d=dt)[:ntime_steps//2])*2.*np.pi\n        # Compare the zero noise with the realisations average\n        avg_noise_spectrum = np.average(ns, axis=1)\n\n        for iomega in range(w_js.shape[0]):\n            error = (np.interp(w_js[iomega], w_ns, avg_noise_spectrum) - zero_noise_spectrum[iomega])\n            if error > 0.1:\n                error /= zero_noise_spectrum[iomega]\n                # 0.3 is a large error but otherwise I need to increment nrealisations a lot\n                # Use ``save_fig = True`` for visual inspection\n                self.assertLess(error, 0.3)\n            \n        save_fig = False\n        if save_fig:\n            np.savetxt(\"zero_noise_jonswap.txt\", np.column_stack((w_js, zero_noise_spectrum)))\n            np.savetxt(\"realisations_jonswap.txt\", np.column_stack((w_ns, np.abs(ns))))\n            np.savetxt(\"average_jonswap.txt\", np.column_stack((w_ns, avg_noise_spectrum)))\n             \n            import matplotlib.pyplot as plt\n            fig, ax = plt.subplots(1, 1, figsize=(4, 3))\n            ax.grid()\n            ax.set_xlabel(\"omega [rad/s]\")\n            ax.set_ylabel(\"specturm\")\n            ax.set_xlim(0, 4)\n            ax.set_ylim(0, 12)\n            for ireal in range(nrealisations):\n                ax.plot(w_ns, np.abs(ns[:, ireal]), 'bo')\n            ax.plot(w_ns, avg_noise_spectrum, '-', label=\"avg\")\n            ax.plot(w_js, zero_noise_spectrum, '--', label=\"JONSWAP\")\n            fig.legend()\n            fig.tight_layout()\n            fig.show()\n            fig.savefig(\"spectrum.png\")\n            plt.close()\n\n\n    # def tearDown(self):\n    #     solver_path = os.path.abspath(os.path.dirname(os.path.realpath(__file__)))\n    #     solver_path += '/'\n    #     files_to_delete = [name + '.aero.h5',\n    #                        name + '.dyn.h5',\n    #                        name + '.fem.h5',\n    #                        name + '.mb.h5',\n    #                        name + '.sharpy']\n    #     for f in files_to_delete:\n    #         os.remove(solver_path + f)\n\n    #     shutil.rmtree(solver_path + 'output/')\n"
  },
  {
    "path": "tests/coupled/multibody/floating_wind_turbine/test_floating_wind_turbine.py",
    "content": "\n\"\"\"\nspar_from_excel_type04\n\nExample of a file used to generate a floating wind turbine case\n\"\"\"\n# Load libraries\nimport sharpy.utils.generate_cases as gc\nimport cases.templates.template_wt as template_wt\nimport numpy as np\nimport os\nimport sharpy.utils.algebra as algebra\nfrom sharpy.utils.constants import deg2rad\nimport sharpy.sharpy_main\nimport unittest\nimport shutil\n\ncase = 'flex_wsp18_val'\n\nclass TestFloatingWindTrubine(unittest.TestCase):\n    \"\"\"\n    Test and example to run floating wind turbines\n    \"\"\"\n    def generate_floating_wind_turbine(self, restart=False):\n        ######################################################################\n        ###########################  PARAMETERS  #############################\n        ######################################################################\n        # Case\n        route = os.path.dirname(os.path.realpath(__file__)) + '/'\n        \n        # Geometry discretization\n        chord_panels = np.array([16], dtype=int)\n        revs_in_wake = 1\n        \n        # Operation\n        rotation_velocity = 12.1*2*np.pi/60\n        pitch_deg = 14.6 #degrees\n        yaw_deg = 0. #degrees\n        \n        # Wind\n        WSP = 18.\n        air_density = 1.225\n        gravity_on = True\n        grav_value = 9.80665\n        \n        # Simulation\n        dphi = 4.*deg2rad\n        revs_to_simulate = 120\n        structural_substeps = 0\n        \n        ######################################################################\n        ##########################  GENERATE WT  #############################\n        ######################################################################\n        dt = dphi/rotation_velocity\n        # time_steps = int(revs_to_simulate*2.*np.pi/dphi)\n        if not restart:\n            time_steps = 1\n        else:\n            time_steps = 2\n        struct_dt = dt/(structural_substeps + 1)\n        \n        op_params = {}\n        op_params['rotation_velocity'] = rotation_velocity\n        op_params['pitch_deg'] = pitch_deg\n        op_params['wsp'] = WSP\n        op_params['dt'] = dt\n        \n        geom_params = {}\n        geom_params['chord_panels'] = chord_panels\n        geom_params['tol_remove_points'] = 1e-8\n        geom_params['n_points_camber'] = 100\n        geom_params['h5_cross_sec_prop'] = None\n        geom_params['m_distribution'] = 'uniform'\n        \n        options = {}\n        options['camber_effect_on_twist'] = False\n        options['user_defined_m_distribution_type'] = None\n        options['include_polars'] = True\n        options['separate_blades'] = True\n        options['concentrate_spar'] = True\n        options['twist_in_aero'] = False\n        \n        excel_description = {}\n        excel_description['excel_file_name'] = '../../../../docs/source/content/example_notebooks/source/type04_db_nrel5mw_oc3_v06.xlsx'\n        excel_description['excel_sheet_parameters'] = 'parameters'\n        excel_description['excel_sheet_structural_tower'] = 'structural_tower'\n        excel_description['excel_sheet_structural_spar'] = 'structural_spar'\n        excel_description['excel_sheet_structural_blade'] = 'structural_blade'\n        excel_description['excel_sheet_discretization_blade'] = 'discretization_blade'\n        excel_description['excel_sheet_aero_blade'] = 'aero_blade'\n        excel_description['excel_sheet_airfoil_info'] = 'airfoil_info'\n        excel_description['excel_sheet_airfoil_chord'] = 'airfoil_coord'\n        \n        spar, LC, MB = template_wt.spar_from_excel_type04(op_params,\n                                                       geom_params,\n                                                       excel_description,\n                                                       options)\n        \n        tower_top_node = 24\n        hub_node = 25\n        blade_tip_node = 51\n        \n        for ilc in range(len(LC)):\n            LC[ilc].behaviour = \"hinge_node_FoR_pitch\"\n            LC[ilc].rotor_vel = rotation_velocity\n            del LC[ilc].rot_vect\n            LC[ilc].scalingFactor = 1e6\n            LC[ilc].penaltyFactor = 0.\n        \n        MB[0].FoR_movement = 'free'\n        \n        ######################################################################\n        ######################  DEFINE SIMULATION  ###########################\n        ######################################################################\n        SimInfo = gc.SimulationInformation()\n        SimInfo.set_default_values()\n        \n        if not restart:\n            SimInfo.solvers['SHARPy']['flow'] = ['BeamLoader',\n                                'AerogridLoader',\n                                'StaticUvlm',\n                                'BeamPlot',\n                                'AerogridPlot',\n                                'DynamicCoupled',\n                                'PickleData',]\n        \n            SimInfo.solvers['SHARPy']['case'] = case\n        else:\n            SimInfo.solvers['SHARPy']['flow'] = ['DynamicCoupled',\n                                    'PickleData',]\n            \n            SimInfo.solvers['SHARPy']['case'] = \"restart_%s\" % case\n        \n        SimInfo.solvers['SHARPy']['route'] = route\n        SimInfo.solvers['SHARPy']['write_log'] = True\n        SimInfo.solvers['SHARPy']['write_screen'] = False\n        SimInfo.solvers['SHARPy']['log_file'] = (\"log_%s\" % SimInfo.solvers['SHARPy']['case'])\n        SimInfo.set_variable_all_dicts('dt', dt)\n        SimInfo.set_variable_all_dicts('rho', air_density)\n        \n        SimInfo.solvers['SteadyVelocityField']['u_inf'] = WSP\n        SimInfo.solvers['SteadyVelocityField']['u_inf_direction'] = np.array([0., -np.sin(yaw_deg*deg2rad), np.cos(yaw_deg*deg2rad)])\n        \n        SimInfo.solvers['BeamLoader']['unsteady'] = 'on'\n        \n        centre_rot_ini = np.array([87.6, 0., -5.0191])\n        rbm_vel_g_ini = np.zeros((6))\n        rbm_vel_g_ini[3:6] = np.array([0., 0., rotation_velocity])\n            \n        quat0 = algebra.euler2quat(np.array([0., -2.28*deg2rad, 0.]))\n        for_pos0 = np.array([0., 0., 11.6])\n        SimInfo.solvers['BeamLoader']['orientation'] = quat0.copy()\n        SimInfo.solvers['BeamLoader']['for_pos'] = for_pos0.copy()\n        \n        rot_mat0 = algebra.quat2rotation(quat0)\n        centre_rot = np.dot(rot_mat0, centre_rot_ini) + for_pos0\n        rbm_vel_g = np.zeros((6))\n        rbm_vel_g[3:6] = np.dot(rot_mat0, rbm_vel_g_ini[3:6])\n        \n        MB[0].FoR_position[0:3] = for_pos0.copy()\n        MB[0].quat = quat0.copy()\n        \n        for ibody in range(1, len(MB)):\n            MB[ibody].FoR_position[0:3] = centre_rot.copy()\n            MB[ibody].FoR_velocity[3:6] = rbm_vel_g[3:6]\n            az = (360./3)*(ibody - 1)\n            rot_mat_az = algebra.rotation3d_z(az*deg2rad)\n            quat = algebra.rotation2quat(np.dot(rot_mat_az, rot_mat0))\n            MB[ibody].quat[0:4] = quat.copy()\n        \n        # Compute mstar\n        SimInfo.solvers['AerogridLoader']['wake_shape_generator'] = 'HelicoidalWake'\n        SimInfo.solvers['AerogridLoader']['wake_shape_generator_input'] = {'u_inf': WSP,\n                                                                           'u_inf_direction': SimInfo.solvers['SteadyVelocityField']['u_inf_direction'],\n                                                                           'rotation_velocity': rbm_vel_g[3:6],\n                                                                           'h_ref': centre_rot[0],\n                                                                           'h_corr': 0.,\n                                                                           'dt': dt,\n                                                                           'dphi1': dphi,\n                                                                           'ndphi1': int(10),\n                                                                           'r': 1.05,\n                                                                           'dphimax': 10*deg2rad}\n        \n        import sharpy.utils.generator_interface as gi\n        gi.dictionary_of_generators(print_info=False)\n        hw = gi.dict_of_generators['HelicoidalWake']\n        wsg_in = SimInfo.solvers['AerogridLoader']['wake_shape_generator_input'] # for simplicity\n        angle = 0\n        mstar = 0\n        while angle < (revs_in_wake*2*np.pi):\n            mstar += 1\n            angle += hw.get_dphi(mstar, wsg_in['dphi1'],\n                                        wsg_in['ndphi1'],\n                                        wsg_in['r'],\n                                        wsg_in['dphimax'])\n        \n        SimInfo.solvers['AerogridLoader']['unsteady'] = 'on'\n        SimInfo.solvers['AerogridLoader']['mstar'] = mstar\n        SimInfo.solvers['AerogridLoader']['freestream_dir'] = np.array([0., 0, 0])\n        \n        struct_static_solver = 'NonLinearStatic'\n        SimInfo.solvers[struct_static_solver]['gravity_on'] = gravity_on\n        SimInfo.solvers[struct_static_solver]['gravity'] = grav_value\n        SimInfo.solvers[struct_static_solver]['gravity_dir'] = np.array([1., 0., 0.])\n        SimInfo.solvers[struct_static_solver]['max_iterations'] = 100\n        SimInfo.solvers[struct_static_solver]['num_load_steps'] = 1 \n        SimInfo.solvers[struct_static_solver]['min_delta'] = 1e-5\n        SimInfo.solvers[struct_static_solver]['newmark_damp'] = 1e-1\n        SimInfo.solvers[struct_static_solver]['dt'] = dt\n        \n        SimInfo.solvers['StaticCoupled']['structural_solver'] = struct_static_solver\n        SimInfo.solvers['StaticCoupled']['structural_solver_settings'] = SimInfo.solvers[struct_static_solver]\n        SimInfo.solvers['StaticCoupled']['aero_solver'] = 'StaticUvlm'\n        SimInfo.solvers['StaticCoupled']['aero_solver_settings'] = SimInfo.solvers['StaticUvlm']\n        \n        SimInfo.solvers['StaticCoupled']['tolerance'] = 1e-8\n        SimInfo.solvers['StaticCoupled']['n_load_steps'] = 0\n        SimInfo.solvers['StaticCoupled']['relaxation_factor'] = 0.\n        SimInfo.solvers['StaticCoupled']['max_iter'] = 100\n        \n        SimInfo.solvers['StaticUvlm']['horseshoe'] = False\n        SimInfo.solvers['StaticUvlm']['num_cores'] = 8\n        SimInfo.solvers['StaticUvlm']['n_rollup'] = 0\n        SimInfo.solvers['StaticUvlm']['rollup_dt'] = dt\n        SimInfo.solvers['StaticUvlm']['rollup_aic_refresh'] = 1\n        SimInfo.solvers['StaticUvlm']['rollup_tolerance'] = 1e-8\n        SimInfo.solvers['StaticUvlm']['rbm_vel_g'] = rbm_vel_g \n        SimInfo.solvers['StaticUvlm']['centre_rot_g'] = centre_rot\n        SimInfo.solvers['StaticUvlm']['cfl1'] = False\n        SimInfo.solvers['StaticUvlm']['vortex_radius'] = 1e-6\n        SimInfo.solvers['StaticUvlm']['vortex_radius_wake_ind'] = 1e-3\n        SimInfo.solvers['StaticUvlm']['velocity_field_generator'] = 'SteadyVelocityField'\n        SimInfo.solvers['StaticUvlm']['velocity_field_input'] = SimInfo.solvers['SteadyVelocityField']\n        SimInfo.solvers['StaticUvlm']['map_forces_on_struct'] = True\n        \n        SimInfo.solvers['FloatingForces']['n_time_steps'] = time_steps\n        SimInfo.solvers['FloatingForces']['dt'] = dt\n        SimInfo.solvers['FloatingForces']['water_density'] = 1025 # kg/m3\n        SimInfo.solvers['FloatingForces']['gravity'] = grav_value\n        SimInfo.solvers['FloatingForces']['gravity_dir'] = [1., 0., 0.]\n        SimInfo.solvers['FloatingForces']['floating_file_name'] = 'oc3_cs_v07.floating.h5'\n        SimInfo.solvers['FloatingForces']['concentrate_spar'] = True\n        SimInfo.solvers['FloatingForces']['method_matrices_freq'] = 'rational_function'\n        SimInfo.solvers['FloatingForces']['matrices_freq'] = 2*np.pi/120.\n        SimInfo.solvers['FloatingForces']['steps_constant_matrices'] = 0\n        SimInfo.solvers['FloatingForces']['method_wave'] = 'jonswap'\n        SimInfo.solvers['FloatingForces']['wave_amplitude'] = 0.\n        SimInfo.solvers['FloatingForces']['wave_freq'] = 0.\n        SimInfo.solvers['FloatingForces']['wave_Tp'] = 10.\n        SimInfo.solvers['FloatingForces']['wave_Hs'] = 6.\n        SimInfo.solvers['FloatingForces']['wave_incidence'] = 0.*deg2rad\n        SimInfo.solvers['FloatingForces']['added_mass_in_mass_matrix'] = True\n        SimInfo.solvers['FloatingForces']['write_output'] = True\n        \n        SimInfo.solvers['StepUvlm']['convection_scheme'] = 2\n        SimInfo.solvers['StepUvlm']['num_cores'] = 8\n        SimInfo.solvers['StepUvlm']['velocity_field_generator'] = 'SteadyVelocityField'\n        SimInfo.solvers['StepUvlm']['velocity_field_input'] = SimInfo.solvers['SteadyVelocityField']\n        SimInfo.solvers['StepUvlm']['cfl1'] = False\n        SimInfo.solvers['StepUvlm']['interp_coords'] = 0\n        SimInfo.solvers['StepUvlm']['filter_method'] = 0\n        SimInfo.solvers['StepUvlm']['interp_method'] = 3\n        SimInfo.solvers['StepUvlm']['centre_rot'] = centre_rot \n        SimInfo.solvers['StepUvlm']['vortex_radius'] = 1e-6\n        SimInfo.solvers['StepUvlm']['vortex_radius_wake_ind'] = 1e-3\n        \n        struct_dyn_solver = 'NonLinearDynamicMultibody'\n        SimInfo.solvers[struct_dyn_solver]['gravity_on'] = gravity_on\n        SimInfo.solvers[struct_dyn_solver]['gravity'] = grav_value\n        SimInfo.solvers[struct_dyn_solver]['gravity_dir'] = np.array([1., 0., 0.])\n        SimInfo.solvers[struct_dyn_solver]['max_iterations'] = 300\n        SimInfo.solvers[struct_dyn_solver]['min_delta'] = 1e-6\n        SimInfo.solvers[struct_dyn_solver]['newmark_damp'] = 1e-1\n        SimInfo.solvers[struct_dyn_solver]['dt'] = struct_dt\n        SimInfo.solvers[struct_dyn_solver]['write_lm'] = True\n        SimInfo.solvers[struct_dyn_solver]['allow_skip_step'] = False\n        SimInfo.solvers[struct_dyn_solver]['relax_factor_lm'] = 0. \n        SimInfo.solvers[struct_dyn_solver]['rigid_bodies'] = False\n        SimInfo.solvers[struct_dyn_solver]['zero_ini_dot_ddot'] = True\n        SimInfo.solvers[struct_dyn_solver]['time_integrator'] = 'NewmarkBeta'\n        SimInfo.solvers[struct_dyn_solver]['time_integrator_settings'] = {'newmark_damp': 1e-1,\n                                                                                    'dt': struct_dt}\n        \n        SimInfo.solvers['SaveData']['compress_float'] = True\n        SimInfo.solvers['SaveData']['save_wake'] = False\n        \n        SimInfo.solvers['WriteVariablesTime']['FoR_variables'] = ['for_pos', 'for_vel', 'quat']\n        SimInfo.solvers['WriteVariablesTime']['structure_variables'] = ['pos']\n        SimInfo.solvers['WriteVariablesTime']['structure_nodes'] = [tower_top_node, blade_tip_node]\n        \n        SimInfo.solvers['PickleData']['stride'] = 180\n        SimInfo.solvers['AerogridPlot']['stride'] = 180\n        \n        SimInfo.solvers['DynamicCoupled']['structural_solver'] = struct_dyn_solver\n        SimInfo.solvers['DynamicCoupled']['structural_solver_settings'] = SimInfo.solvers[struct_dyn_solver]\n        SimInfo.solvers['DynamicCoupled']['aero_solver'] = 'StepUvlm'\n        SimInfo.solvers['DynamicCoupled']['aero_solver_settings'] = SimInfo.solvers['StepUvlm']\n        SimInfo.solvers['DynamicCoupled']['postprocessors'] = ['Cleanup', 'BeamPlot', 'AerogridPlot', 'PickleData', 'SaveData', 'WriteVariablesTime']\n        SimInfo.solvers['DynamicCoupled']['postprocessors_settings'] = {'Cleanup': SimInfo.solvers['Cleanup'],\n                                              'BeamPlot': SimInfo.solvers['BeamPlot'],\n                                              'AerogridPlot': SimInfo.solvers['AerogridPlot'],\n                                              'PickleData': SimInfo.solvers['PickleData'],\n                                              'SaveData': SimInfo.solvers['SaveData'],\n                                              'WriteVariablesTime': SimInfo.solvers['WriteVariablesTime'],}\n        \n        SimInfo.solvers['DynamicCoupled']['minimum_steps'] = 0\n        SimInfo.solvers['DynamicCoupled']['include_unsteady_force_contribution'] = True\n        SimInfo.solvers['DynamicCoupled']['relaxation_factor'] = 0.\n        SimInfo.solvers['DynamicCoupled']['final_relaxation_factor'] = 0.\n        SimInfo.solvers['DynamicCoupled']['dynamic_relaxation'] = False\n        SimInfo.solvers['DynamicCoupled']['relaxation_steps'] = 0\n        SimInfo.solvers['DynamicCoupled']['fsi_tolerance'] = 1e-6\n        SimInfo.solvers['DynamicCoupled']['structural_substeps'] = structural_substeps\n        SimInfo.solvers['DynamicCoupled']['runtime_generators'] = {'FloatingForces': SimInfo.solvers['FloatingForces']}\n        \n        power = 5296609.984\n        GBR = 97.\n        PID0 = [0.006275604, 0.0008965149, 0.] # Offshore\n        \n        # Gain scheduler\n        pitch_deg_doubled_sens = 6.302336 # deg\n        gk = 1./(1 + pitch_deg/pitch_deg_doubled_sens)\n        PID = np.zeros((3))\n        for i in range(3):\n            PID[i] = PID0[i]*gk\n        \n        SimInfo.solvers['DynamicCoupled']['controller_id']['colective_pitch'] = 'BladePitchPid'\n        SimInfo.solvers['DynamicCoupled']['controller_settings']['colective_pitch'] = dict()\n        SimInfo.solvers['DynamicCoupled']['controller_settings']['colective_pitch']['P'] = PID[0]\n        SimInfo.solvers['DynamicCoupled']['controller_settings']['colective_pitch']['I'] = PID[1]\n        SimInfo.solvers['DynamicCoupled']['controller_settings']['colective_pitch']['D'] = PID[2]\n        SimInfo.solvers['DynamicCoupled']['controller_settings']['colective_pitch']['sp_type'] = 'gen_vel'\n        SimInfo.solvers['DynamicCoupled']['controller_settings']['colective_pitch']['sp_source'] = 'const'\n        SimInfo.solvers['DynamicCoupled']['controller_settings']['colective_pitch']['sp_const'] = rotation_velocity*GBR\n        SimInfo.solvers['DynamicCoupled']['controller_settings']['colective_pitch']['gen_model_const_var'] = 'torque'\n        SimInfo.solvers['DynamicCoupled']['controller_settings']['colective_pitch']['gen_model_const_value'] = power/rotation_velocity/GBR\n        SimInfo.solvers['DynamicCoupled']['controller_settings']['colective_pitch']['GBR'] = GBR\n        SimInfo.solvers['DynamicCoupled']['controller_settings']['colective_pitch']['inertia_dt'] = 43702538.05\n        SimInfo.solvers['DynamicCoupled']['controller_settings']['colective_pitch']['dt'] = dt\n        SimInfo.solvers['DynamicCoupled']['controller_settings']['colective_pitch']['ntime_steps'] = time_steps\n        SimInfo.solvers['DynamicCoupled']['controller_settings']['colective_pitch']['blade_num_body'] = [1, 2, 3]\n        SimInfo.solvers['DynamicCoupled']['controller_settings']['colective_pitch']['min_pitch'] = 0.\n        SimInfo.solvers['DynamicCoupled']['controller_settings']['colective_pitch']['max_pitch'] = 90.*deg2rad\n        SimInfo.solvers['DynamicCoupled']['controller_settings']['colective_pitch']['initial_pitch'] = pitch_deg*deg2rad\n        SimInfo.solvers['DynamicCoupled']['controller_settings']['colective_pitch']['pitch_sp'] = pitch_deg*deg2rad\n        SimInfo.solvers['DynamicCoupled']['controller_settings']['colective_pitch']['initial_rotor_vel'] = rotation_velocity\n        SimInfo.solvers['DynamicCoupled']['controller_settings']['colective_pitch']['nocontrol_steps'] = 0\n        \n        SimInfo.define_num_steps(time_steps)\n        \n        # Define dynamic simulation\n        SimInfo.with_forced_vel = False\n        SimInfo.with_dynamic_forces = False\n        \n        ######################################################################\n        #######################  GENERATE FILES  #############################\n        ######################################################################\n        gc.clean_test_files(SimInfo.solvers['SHARPy']['route'], SimInfo.solvers['SHARPy']['case'])\n        spar.generate_h5_files(SimInfo.solvers['SHARPy']['route'], SimInfo.solvers['SHARPy']['case'])\n        SimInfo.generate_solver_file()\n        gc.generate_multibody_file(LC, MB,SimInfo.solvers['SHARPy']['route'], SimInfo.solvers['SHARPy']['case'])\n\n        return SimInfo.solvers['SHARPy']['case']\n\n    def test_floating_wind_turbine(self):\n        name = self.generate_floating_wind_turbine(restart=False)\n        solver_path = os.path.abspath(os.path.dirname(os.path.realpath(__file__)) + '/' + name + '.sharpy')\n        sharpy.sharpy_main.main(['', solver_path])\n        \n        name_restart = self.generate_floating_wind_turbine(restart=True)\n        solver_path = os.path.abspath(os.path.dirname(os.path.realpath(__file__)) + '/' + name_restart + '.sharpy')\n        restart_path = os.path.abspath(os.path.dirname(os.path.realpath(__file__)) + '/output/' + name + '/' + name + '.pkl')\n        sharpy.sharpy_main.main(['', '-r' + restart_path , solver_path])\n\n        self.clean_files(name)\n    \n    def clean_files(self, case):\n        solver_path = os.path.abspath(os.path.dirname(os.path.realpath(__file__)))\n        solver_path += '/'\n        files_to_delete = [case + '.aero.h5',\n                           case + '.fem.h5',\n                           case + '.mb.h5',\n                           case + '.sharpy',\n                           'restart_' + case + '.aero.h5',\n                           'restart_' + case + '.fem.h5',\n                           'restart_' + case + '.mb.h5',\n                           'restart_' + case + '.sharpy']\n        for f in files_to_delete:\n            os.remove(solver_path + f)\n\n        shutil.rmtree(solver_path + 'output/')\n"
  },
  {
    "path": "tests/coupled/prescribed/WindTurbine/__init__.py",
    "content": ""
  },
  {
    "path": "tests/coupled/prescribed/WindTurbine/test_rotor.py",
    "content": "import numpy as np\nimport os\nimport unittest\nimport shutil\nimport glob\n\n\nfolder = os.path.abspath(os.path.dirname(os.path.realpath(__file__)))\n\n\nclass TestRotor(unittest.TestCase):\n    \"\"\"\n    NREL 5MW case\n    J. Jonkman et al. \"Definition of a 5-MW Reference Wind Turbine for Offshore System Development\", NREL/TP-500-38060, 2009\n    In this report, the whole system natural frequencies are provided. This implies that rotor frequencies\n    are provided and influenced by nacelle characterisitcs\n    \"\"\"\n\n    def setUp(self):\n        import sharpy.utils.generate_cases as gc\n        import sharpy.cases.templates.template_wt as template_wt\n        from sharpy.utils.constants import deg2rad\n\n        ######################################################################\n        ###########################  PARAMETERS  #############################\n        ######################################################################\n        # Case\n        global case\n        route = folder + '/'\n        case = 'rotor'\n\n        # Geometry discretization\n        chord_panels = np.array([8], dtype=int)\n        revs_in_wake = 1\n\n        # Operation\n        rotation_velocity = 1.366190\n        pitch_deg = 0. #degrees\n\n        # Wind\n        WSP = 11.4\n        air_density = 1.225\n\n        # Simulation\n        dphi = 4.*deg2rad\n        revs_to_simulate = 5\n\n        ######################################################################\n        ##########################  GENERATE WT  #############################\n        ######################################################################\n        dt = dphi/rotation_velocity\n        # time_steps = int(revs_to_simulate*2.*np.pi/dphi)\n        time_steps = 2 # For the test cases\n\n        mstar = int(revs_in_wake*2.*np.pi/dphi)\n\n        op_params = {'rotation_velocity': rotation_velocity,\n                     'pitch_deg': pitch_deg,\n                     'wsp': WSP,\n                     'dt': dt}\n\n        geom_params = {'chord_panels':chord_panels,\n                    'tol_remove_points': 1e-8,\n                    'n_points_camber': 100,\n                    'm_distribution': 'uniform'}\n\n        excel_description = {'excel_file_name': route + '../../../../docs/source/content/example_notebooks/source/type04_db_nrel5mw_oc3_v06.xlsx',\n                            'excel_sheet_parameters': 'parameters',\n                            'excel_sheet_structural_blade': 'structural_blade',\n                            'excel_sheet_discretization_blade': 'discretization_blade',\n                            'excel_sheet_aero_blade': 'aero_blade',\n                            'excel_sheet_airfoil_info': 'airfoil_info',\n                            'excel_sheet_airfoil_chord': 'airfoil_coord'}\n\n        options = {'camber_effect_on_twist': False,\n                   'user_defined_m_distribution_type': None,\n                   'include_polars': False,\n                   'separate_blades': False}\n\n        rotor, hub_nodes = template_wt.rotor_from_excel_type03(op_params,\n                                                    geom_params,\n                                                    excel_description,\n                                                    options)\n\n        ######################################################################\n        ######################  DEFINE SIMULATION  ###########################\n        ######################################################################\n        SimInfo = gc.SimulationInformation()\n        SimInfo.set_default_values()\n\n        SimInfo.solvers['SHARPy']['flow'] = ['BeamLoader',\n                                'Modal']\n        SimInfo.solvers['SHARPy']['case'] = case\n        SimInfo.solvers['SHARPy']['route'] = route\n        SimInfo.solvers['SHARPy']['write_log'] = True\n        SimInfo.solvers['SHARPy']['write_screen'] = 'off'\n        SimInfo.solvers['SHARPy']['log_folder'] = os.path.abspath(os.path.dirname(os.path.realpath(__file__))) + '/output/'\n        SimInfo.set_variable_all_dicts('dt', dt)\n        SimInfo.set_variable_all_dicts('rho', air_density)\n\n        SimInfo.solvers['BeamLoader']['unsteady'] = 'on'\n\n        SimInfo.solvers['Modal']['write_modes_vtk'] = False\n        SimInfo.solvers['Modal']['save_data'] = True\n\n        ######################################################################\n        #######################  GENERATE FILES  #############################\n        ######################################################################\n        gc.clean_test_files(SimInfo.solvers['SHARPy']['route'], SimInfo.solvers['SHARPy']['case'])\n        rotor.generate_h5_files(SimInfo.solvers['SHARPy']['route'], SimInfo.solvers['SHARPy']['case'])\n        SimInfo.generate_solver_file()\n\n    def test_rotor(self):\n        import sharpy.sharpy_main\n\n        solver_path = folder + '/' + case + '.sharpy'\n        sharpy.sharpy_main.main(['', solver_path])\n\n        # read output and compare\n        output_path = folder + '/output/' + case + '/beam_modal_analysis/'\n        freq_data = np.atleast_2d(np.genfromtxt(output_path + \"frequencies.dat\"))\n\n        # Data from reference. Several values are provided, the average is used\n        flap_1 = np.average([0.6664, 0.6296, 0.6675, 0.6686, 0.6993, 0.7019])*2*np.pi\n        edge_1 = np.average([1.0793, 1.0740, 1.0898, 1.0877])*2*np.pi\n        flap_2 = np.average([1.9337, 1.6507, 1.9223, 1.8558, 2.0205, 1.9601])*2*np.pi\n\n        self.assertAlmostEqual(freq_data[0, 0], flap_1, 0) # 1st flapwise\n        self.assertAlmostEqual(freq_data[0, 3], edge_1, 0) # 1st edgewise\n        self.assertAlmostEqual(freq_data[0, 6], flap_2, 0) # 2nd flapwise\n\n    def tearDown(self):\n        files_to_delete = [case + '.aero.h5',\n                           case + '.fem.h5',\n                           case + '.sharpy',]\n\n        for f in files_to_delete:\n            os.remove(folder +'/' + f)\n\n        shutil.rmtree(folder + '/output/')\n"
  },
  {
    "path": "tests/coupled/prescribed/__init__.py",
    "content": "import tests.coupled.prescribed.WindTurbine\n"
  },
  {
    "path": "tests/coupled/prescribed/gamma_dot_test/test_gamma_dot.py",
    "content": "import os\nimport numpy as np\nimport unittest\n\nimport cases.templates.flying_wings as wings\nimport sharpy.sharpy_main\n\n\ndef x_dot(x, dt, integration_order=2):\n    x_dot_r = np.zeros(len(x))\n    if integration_order == 1:\n        x_n = x.copy()[1:]\n        x_m1 = x.copy()[:-1]\n        x_dot_r[1:] = (x_n - x_m1) / dt\n    else:\n        x_n = x.copy()[2:]\n        x_m1 = x.copy()[1:-1]\n        x_m2 = x.copy()[:-2]\n        x_dot_r[2:] = (3 * x_n - 4 * x_m1 + x_m2) / 2 / dt\n\n    return x_dot_r\n\n\nclass TestGammaDot(unittest.TestCase):\n\n    def set_up_test_case(self, aero_type, predictor, sparse, integration_order):\n\n        # aero_type = 'lin'\n        global case_name\n        case_name = 'goland_' + aero_type + '_'+'P%g_S%g_I%g' %(predictor, sparse, integration_order)\n        ws = wings.Goland(M=12,\n                          N=4,\n                          Mstar_fact=50,\n                          u_inf=50,\n                          alpha=1.,\n                          rho=1.225,\n                          sweep=0,\n                          physical_time=0.1,\n                          n_surfaces=2,\n                          route='cases',\n                          case_name=case_name)\n\n        # Other test parameters\n        ws.gust_intensity = 0.01\n        ws.sigma = 1\n        ws.dt_factor = 1\n\n        ws.clean_test_files()\n        ws.update_derived_params()\n        ws.update_aero_prop()\n        ws.update_fem_prop()\n        ws.set_default_config_dict()\n\n        ws.generate_aero_file()\n        ws.generate_fem_file()\n\n        ws.config['SHARPy']['flow'] = ['BeamLoader', 'AerogridLoader',\n                                       'StaticCoupled',\n                                       'DynamicCoupled']\n        ws.config['SHARPy']['write_screen'] = 'off'\n\n        ws.config['AerogridLoader']['wake_shape_generator'] = 'StraightWake'\n        ws.config['AerogridLoader']['wake_shape_generator_input'] = {'u_inf': ws.u_inf,                                                                                      \n                                                                     'u_inf_direction': np.array([1., 0., 0.]),                                                        \n                                                                     'dt': ws.dt}\n\n        # Remove newmark damping from structural solver settings\n        ws.config['DynamicCoupled']['structural_solver_settings']['newmark_damp'] = 0\n\n        if aero_type == 'lin':\n            ws.config['DynamicCoupled']['aero_solver'] = 'StepLinearUVLM'\n            ws.config['DynamicCoupled']['aero_solver_settings'] = {'dt': ws.dt,\n                                                                   'remove_predictor': predictor,\n                                                                   'use_sparse': sparse,\n                                                                   'integr_order': integration_order,\n                                                                   'velocity_field_generator': 'GustVelocityField',\n                                                                   'velocity_field_input': {'u_inf': ws.u_inf,\n                                                                                            'u_inf_direction': [1., 0.,\n                                                                                                                0.],\n                                                                                            'gust_shape': 'continuous_sin',\n                                                                                            'offset': 2.,\n                                                                                            'gust_parameters': {'gust_length': 2.,\n                                                                                                                'gust_intensity': ws.gust_intensity\n                                                                                                                                  * ws.u_inf,\n                                                                                                                'span': ws.main_chord * ws.aspect_ratio}}}\n        else:\n            ws.config['DynamicCoupled']['aero_solver'] = 'StepUvlm'\n            ws.config['DynamicCoupled']['aero_solver_settings'] = {\n                'print_info': 'off',\n                'horseshoe': True,\n                'num_cores': 4,\n                'n_rollup': 100,\n                'convection_scheme': 0,\n                'rollup_dt': ws.dt,\n                'rollup_aic_refresh': 1,\n                'rollup_tolerance': 1e-4,\n                'velocity_field_generator': 'GustVelocityField',\n                'velocity_field_input': {'u_inf': ws.u_inf,\n                                         'u_inf_direction': [1., 0, 0],\n                                         'gust_shape': 'continuous_sin',\n                                         'gust_length': ws.gust_length,\n                                         'gust_intensity': ws.gust_intensity * ws.u_inf,\n                                         'offset': 2.0,\n                                         'span': ws.main_chord * ws.aspect_ratio},\n                'rho': ws.rho,\n                'n_time_steps': ws.n_tstep,\n                'dt': ws.dt,\n                'gamma_dot_filtering': 0,\n                'track_body': True,\n                'track_body_number': -1}\n            ws.config['DynamicCoupled']['include_unsteady_force_contribution'] = 'on'\n        # Update settings file\n        ws.config.write()\n\n        self.case_name = ws.case_name\n        self.case_route = ws.route\n        self.ws = ws\n        self.dt = ws.dt\n\n    def run_test(self, aero_type, predictor, sparse, integration_order):\n\n        self.set_up_test_case(aero_type, predictor, sparse, integration_order)\n        ws = self.ws\n        data = sharpy.sharpy_main.main(['', self.case_route + self.case_name + '.sharpy'])\n\n        # Obtain gamma\n        gamma = np.zeros((ws.n_tstep,))\n        gamma_dot = np.zeros((ws.n_tstep))\n\n        for N in range(ws.n_tstep):\n            gamma[N] = data.aero.timestep_info[N].gamma[0][0, 0]\n            gamma_dot[N] = data.aero.timestep_info[N].gamma_dot[0][0, 0]\n\n        gamma_dot_fd = x_dot(gamma, self.dt, integration_order)\n\n        error_derivative = np.max(np.abs(gamma_dot - gamma_dot_fd))\n        gamma_dot_at_max = gamma_dot_fd[np.argmax(np.abs(gamma_dot - gamma_dot_fd))]\n\n        # The signal is close to zero\n        if np.abs(gamma_dot_at_max) < 0.05:\n            passed_test = error_derivative < 0.05\n        else:\n            passed_test = error_derivative < 1e-2 * np.abs(gamma_dot_at_max)\n\n        if not passed_test:\n            try:\n                import matplotlib.pyplot as plt\n                plt.plot(gamma_dot)\n                plt.plot(gamma_dot_fd, color='k')\n                plt.show()\n\n                plt.plot(gamma_dot - gamma_dot_fd)\n                plt.show()\n            except ModuleNotFoundError:\n                import warnings\n                warnings.warn('Unable to import matplotlib, skipping plot')\n\n        assert passed_test == True, \\\n            'Discrepancy between gamma_dot and that calculated using FD, relative difference is %.2f' % (\n                    error_derivative / np.abs(gamma_dot_at_max))\n\n    def setUp(self):\n        pass\n\n    def test_gammadot(self):\n\n        for aero_type in ['lin', 'nlin']:\n            if aero_type == 'lin':\n                for predictor in [True, False]:\n                    for sparse in [True, False]:\n                        for integration_order in [1, 2]:\n                            with self.subTest(\n                                    aero_type=aero_type,\n                                    predictor=predictor,\n                                    sparse=sparse,\n                                    integration_order=integration_order):\n                                self.run_test(aero_type, predictor, sparse, integration_order)\n            else:\n                with self.subTest(\n                        aero_type=aero_type,\n                        predictor=False,\n                        sparse=False,\n                        integration_order=2):\n\n                    self.run_test(aero_type, predictor, sparse, integration_order)\n\n    def tearDown(self):\n\n        solver_path = os.path.dirname(os.path.realpath(__file__))\n        # solver_path += '/'\n        # files_to_delete = [case + '.aero.h5',\n        #                    case + '.dyn.h5',\n        #                    case + '.fem.h5',\n        #                    case + '.sharpy']\n        # for f in files_to_delete:\n        #     os.remove(solver_path + f)\n\n        shutil.rmtree(solver_path + '/cases/')\n"
  },
  {
    "path": "tests/coupled/prescribed/rotating_wing/generate_rotating_wing.py",
    "content": "import h5py as h5\nimport numpy as np\nimport configparser\nimport os\n\nimport sharpy.utils.algebra as algebra\n\ncase_name = 'rotating_wing'\nroute = os.path.dirname(os.path.realpath(__file__)) + '/'\n\nm_main = 7\namplitude = 0\nperiod = 3\ndt_factor = 1.\n\n# flight conditions\nu_inf = 5\nrho = 1.225\nalpha = 0\nbeta = 0\nc_ref = 1\nb_ref = 16\nsweep = 0*np.pi/180.\naspect_ratio = 32  # = total wing span (chord = 1)\n\nalpha_rad = alpha*np.pi/180\n\n# dt = 1.0/m_main/u_inf*dt_factor\ndt = 0.01\nnum_steps = int(1./dt)\nnum_steps = 20\n\n# main geometry data\nmain_span = aspect_ratio/2./np.cos(sweep)\nmain_chord = 1.0\nmain_chord_tip = 0.5\nmain_ea = 0.5\nmain_sigma = 1\nmain_airfoil_P = 0\nmain_airfoil_M = 0\n\nn_surfaces = 2\n\n# discretisation data\nnum_elem_main = 10\n\nnum_node_elem = 3\nnum_elem = num_elem_main + num_elem_main\nnum_node_main = num_elem_main*(num_node_elem - 1) + 1\nnum_node = num_node_main + (num_node_main - 1)\n\n\ndef clean_test_files():\n    fem_file_name = route + '/' + case_name + '.fem.h5'\n    if os.path.isfile(fem_file_name):\n        os.remove(fem_file_name)\n\n    aero_file_name = route + '/' + case_name + '.aero.h5'\n    if os.path.isfile(aero_file_name):\n        os.remove(aero_file_name)\n\n    dyn_file_name = route + '/' + case_name + '.dyn.h5'\n    if os.path.isfile(dyn_file_name):\n        os.remove(dyn_file_name)\n\n    solver_file_name = route + '/' + case_name + '.sharpy'\n    if os.path.isfile(solver_file_name):\n        os.remove(solver_file_name)\n\n    flightcon_file_name = route + '/' + case_name + '.flightcon.txt'\n    if os.path.isfile(flightcon_file_name):\n        os.remove(flightcon_file_name)\n\n\ndef generate_dyn_file():\n    global dt\n    global num_steps\n    global route\n    global case_name\n    global num_elem\n    global num_node_elem\n    global num_node\n    global amplitude\n    global period\n\n    dynamic_forces_time = None\n    with_dynamic_forces = False\n    with_forced_vel = True\n    if with_dynamic_forces:\n        angle = np.arctan(8.0/6.0)\n        m1 = 80\n        f1 = 8\n        dynamic_forces = np.zeros((num_node, 6))\n        app_node = int(0)\n        dynamic_forces[app_node, 0] = -f1*np.cos(angle)\n        dynamic_forces[app_node, 1] = -f1*np.sin(angle)\n        dynamic_forces[app_node, 5] = m1\n        force_time = np.zeros((num_steps, ))\n        limit = round(2.5/dt)\n        force_time[:limit] = 1\n\n        dynamic_forces_time = np.zeros((num_steps, num_node, 6))\n        for it in range(num_steps):\n            dynamic_forces_time[it, :, :] = force_time[it]*dynamic_forces\n\n    forced_for_vel = None\n    if with_forced_vel:\n        forced_for_vel = np.zeros((num_steps, 6))\n        forced_for_acc = np.zeros((num_steps, 6))\n        forced_for_vel[:, 3] = period/(2.0*np.pi)\n        try:\n            forced_for_vel[0:int(0.5/dt), 3] = np.linspace(0, period/(2*np.pi), int(0.5/dt))\n        except ValueError:\n            pass\n            # forced_for_acc[it, 2] = (2*np.pi/period)**2*amplitude*np.cos(2*np.pi*dt*it/period)\n            # forced_for_vel[it, 2] = 2*np.pi/period*np.pi/180*amplitude*np.cos(2*np.pi*dt*it/period)\n\n    with h5.File(route + '/' + case_name + '.dyn.h5', 'a') as h5file:\n        if with_dynamic_forces:\n            h5file.create_dataset(\n                'dynamic_forces', data=dynamic_forces_time)\n        if with_forced_vel:\n            h5file.create_dataset(\n                'for_vel', data=forced_for_vel)\n            h5file.create_dataset(\n                'for_acc', data=forced_for_acc)\n        h5file.create_dataset(\n            'num_steps', data=num_steps)\n\n\ndef generate_fem_file():\n    # placeholders\n    # coordinates\n    global x, y, z\n    x = np.zeros((num_node, ))\n    y = np.zeros((num_node, ))\n    z = np.zeros((num_node, ))\n    # struct twist\n    structural_twist = np.zeros_like(x)\n    # beam number\n    beam_number = np.zeros((num_elem, ), dtype=int)\n    # frame of reference delta\n    frame_of_reference_delta = np.zeros((num_elem, num_node_elem, 3))\n    # connectivities\n    conn = np.zeros((num_elem, num_node_elem), dtype=int)\n    # stiffness\n    num_stiffness = 1\n    ea = 1e5\n    ga = 1e5\n    gj = 1e4*10\n    eiy = 2e4\n    eiz = 2e4\n    sigma = 1000\n    base_stiffness = sigma*np.diag([ea, ga, ga, gj, eiy, eiz])\n    stiffness = np.zeros((num_stiffness, 6, 6))\n    stiffness[0, :, :] = main_sigma*base_stiffness\n    elem_stiffness = np.zeros((num_elem,), dtype=int)\n    # mass\n    num_mass = 1\n    m_base = 0.75\n    j_base = 0.1\n    base_mass = np.diag([m_base, m_base, m_base, j_base, j_base, j_base])\n    mass = np.zeros((num_mass, 6, 6))\n    mass[0, :, :] = base_mass\n    elem_mass = np.zeros((num_elem,), dtype=int)\n    # boundary conditions\n    boundary_conditions = np.zeros((num_node, ), dtype=int)\n    boundary_conditions[0] = 1\n    # applied forces\n    # n_app_forces = 2\n    # node_app_forces = np.zeros((n_app_forces,), dtype=int)\n    app_forces = np.zeros((num_node, 6))\n\n    spacing_param = 3\n\n    # right wing (beam 0) --------------------------------------------------------------\n    working_elem = 0\n    working_node = 0\n    beam_number[working_elem:working_elem + num_elem_main] = 0\n    domain = np.linspace(0, 1.0, num_node_main)\n    # 16 - (np.geomspace(20, 4, 10) - 4)\n    # x[working_node:working_node + num_node_main] = np.sin(sweep)*(main_span - (np.geomspace(main_span + spacing_param,\n    #                                                                                         0 + spacing_param,\n    #                                                                                         num_node_main)\n    #                                                                            - spacing_param))\n    z[working_node:working_node + num_node_main] = np.abs((main_span - (np.geomspace(main_span + spacing_param,\n                                                                                     0 + spacing_param,\n                                                                                     num_node_main)\n                                                                        - spacing_param)))\n    # y[0] = 0\n    # y[working_node:working_node + num_node_main] = np.cos(sweep)*np.linspace(0.0, main_span, num_node_main)\n    # x[working_node:working_node + num_node_main] = np.sin(sweep)*np.linspace(0.0, main_span, num_node_main)\n    for ielem in range(num_elem_main):\n        for inode in range(num_node_elem):\n            frame_of_reference_delta[working_elem + ielem, inode, :] = [-1, 0, 0]\n    # connectivity\n    for ielem in range(num_elem_main):\n        conn[working_elem + ielem, :] = ((np.ones((3,))*(working_elem + ielem)*(num_node_elem - 1)) +\n                                         [0, 2, 1])\n    elem_stiffness[working_elem:working_elem + num_elem_main] = 0\n    elem_mass[working_elem:working_elem + num_elem_main] = 0\n    boundary_conditions[0] = 1\n    boundary_conditions[working_node + num_node_main - 1] = -1\n    working_elem += num_elem_main\n    working_node += num_node_main\n\n    # left wing (beam 1) --------------------------------------------------------------\n    beam_number[working_elem:working_elem + num_elem_main] = 1\n    domain = np.linspace(-1.0, 0.0, num_node_main)\n    tempy = np.linspace(-main_span, 0.0, num_node_main)\n    # x[working_node:working_node + num_node_main - 1] = -np.sin(sweep)*tempy[0:-1]\n    # y[working_node:working_node + num_node_main - 1] = np.cos(sweep)*tempy[0:-1]\n    z[working_node:working_node + num_node_main - 1] = -(main_span - (np.geomspace(0 + spacing_param,\n                                                                                   main_span + spacing_param,\n                                                                                   num_node_main)[:-1]\n                                                                      - spacing_param))\n    # y[working_node:working_node + num_node_main - 1] = -np.abs(np.cos(sweep)*(main_span - (np.geomspace(0 + spacing_param,\n    #                                                                                                main_span + spacing_param,\n    #                                                                                                num_node_main)[:-1]\n    #                                                                                   - spacing_param)))\n    for ielem in range(num_elem_main):\n        for inode in range(num_node_elem):\n            frame_of_reference_delta[working_elem + ielem, inode, :] = [-1, 0, 0]\n    # connectivity\n    for ielem in range(num_elem_main):\n        conn[working_elem + ielem, :] = ((np.ones((3,))*(working_elem + ielem)*(num_node_elem - 1)) +\n                                         [0, 2, 1]) + 1\n    conn[working_elem + num_elem_main - 1, 1] = 0\n    elem_stiffness[working_elem:working_elem + num_elem_main] = 0\n    elem_mass[working_elem:working_elem + num_elem_main] = 0\n    boundary_conditions[working_node] = -1\n    working_elem += num_elem_main\n    working_node += num_node_main - 1\n\n    with h5.File(route + '/' + case_name + '.fem.h5', 'a') as h5file:\n        coordinates = h5file.create_dataset('coordinates', data=np.column_stack((x, y, z)))\n        conectivities = h5file.create_dataset('connectivities', data=conn)\n        num_nodes_elem_handle = h5file.create_dataset(\n            'num_node_elem', data=num_node_elem)\n        num_nodes_handle = h5file.create_dataset(\n            'num_node', data=num_node)\n        num_elem_handle = h5file.create_dataset(\n            'num_elem', data=num_elem)\n        stiffness_db_handle = h5file.create_dataset(\n            'stiffness_db', data=stiffness)\n        stiffness_handle = h5file.create_dataset(\n            'elem_stiffness', data=elem_stiffness)\n        mass_db_handle = h5file.create_dataset(\n            'mass_db', data=mass)\n        mass_handle = h5file.create_dataset(\n            'elem_mass', data=elem_mass)\n        frame_of_reference_delta_handle = h5file.create_dataset(\n            'frame_of_reference_delta', data=frame_of_reference_delta)\n        structural_twist_handle = h5file.create_dataset(\n            'structural_twist', data=structural_twist)\n        bocos_handle = h5file.create_dataset(\n            'boundary_conditions', data=boundary_conditions)\n        beam_handle = h5file.create_dataset(\n            'beam_number', data=beam_number)\n        app_forces_handle = h5file.create_dataset(\n            'app_forces', data=app_forces)\n        # node_app_forces_handle = h5file.create_dataset(\n        #     'node_app_forces', data=node_app_forces)\n\n\ndef generate_aero_file():\n    global x, y, z\n    airfoil_distribution = np.zeros((num_elem, num_node_elem), dtype=int)\n    surface_distribution = np.zeros((num_elem,), dtype=int) - 1\n    surface_m = np.zeros((n_surfaces, ), dtype=int)\n    m_distribution = 'uniform'\n    aero_node = np.zeros((num_node,), dtype=bool)\n    twist = np.zeros((num_elem, num_node_elem))\n    chord = np.zeros((num_elem, num_node_elem))\n    elastic_axis = np.zeros((num_elem, num_node_elem,))\n\n    working_elem = 0\n    working_node = 0\n    # right wing (surface 0, beam 0)\n    i_surf = 0\n    airfoil_distribution[working_elem:working_elem + num_elem_main, :] = 0\n    surface_distribution[working_elem:working_elem + num_elem_main] = i_surf\n    surface_m[i_surf] = m_main\n    aero_node[working_node:working_node + num_node_main] = True\n\n    # chord[working_node:working_node + num_node_main] = np.linspace(main_chord, main_chord_tip, num_node_main)\n    # twist[working_node:working_node + num_node_main] = np.linspace(0, 70*np.pi/180., num_node_main)\n    temp_chord = np.linspace(main_chord, main_chord_tip, num_node_main)\n    temp_twist = np.linspace(0, 70*np.pi/180., num_node_main)\n    node_counter = 0\n    for i_elem in range(working_elem, working_elem + num_elem_main):\n        for i_local_node in range(num_node_elem):\n            if not i_local_node == 0:\n                node_counter += 1\n            chord[i_elem, i_local_node] = temp_chord[node_counter]\n            elastic_axis[i_elem, i_local_node] = main_ea\n            twist[i_elem, i_local_node] = temp_twist[node_counter]\n\n    working_elem += num_elem_main\n    working_node += num_node_main\n\n    # # left wing (surface 1, beam 1)\n    i_surf = 1\n    airfoil_distribution[working_node:working_node + num_node_main - 1] = 0\n    surface_distribution[working_elem:working_elem + num_elem_main] = i_surf\n    surface_m[i_surf] = m_main\n    aero_node[working_node:working_node + num_node_main - 1] = True\n    # chord[working_node:working_node + num_node_main - 1] = np.linspace(main_chord_tip, main_chord, num_node_main)[:-1]\n    # chord[working_node:working_node + num_node_main - 1] = main_chord\n    # elastic_axis[working_node:working_node + num_node_main - 1] = main_ea\n    # twist[working_node:working_node + num_node_main - 1] = np.linspace(-70*np.pi/180., 0.0, num_node_main)[:-1]\n\n    temp_chord = np.linspace(main_chord, main_chord_tip, num_node_main)\n    temp_twist = np.linspace(0, -70*np.pi/180., num_node_main)\n    node_counter = 0\n    for i_elem in range(working_elem, working_elem + num_elem_main):\n        for i_local_node in range(num_node_elem):\n            if not i_local_node == 0:\n                node_counter += 1\n            chord[i_elem, i_local_node] = temp_chord[node_counter]\n            elastic_axis[i_elem, i_local_node] = main_ea\n            twist[i_elem, i_local_node] = temp_twist[node_counter]\n    working_elem += num_elem_main\n    working_node += num_node_main - 1\n\n    with h5.File(route + '/' + case_name + '.aero.h5', 'a') as h5file:\n        airfoils_group = h5file.create_group('airfoils')\n        # add one airfoil\n        naca_airfoil_main = airfoils_group.create_dataset('0', data=np.column_stack(\n                                generate_naca_camber(P=main_airfoil_P, M=main_airfoil_M)))\n        # chord\n        chord_input = h5file.create_dataset('chord', data=chord)\n        dim_attr = chord_input .attrs['units'] = 'm'\n\n        # twist\n        twist_input = h5file.create_dataset('twist', data=twist)\n        dim_attr = twist_input.attrs['units'] = 'rad'\n\n        # airfoil distribution\n        airfoil_distribution_input = h5file.create_dataset('airfoil_distribution', data=airfoil_distribution)\n\n        surface_distribution_input = h5file.create_dataset('surface_distribution', data=surface_distribution)\n        surface_m_input = h5file.create_dataset('surface_m', data=surface_m)\n        m_distribution_input = h5file.create_dataset('m_distribution', data=m_distribution.encode('ascii', 'ignore'))\n\n        aero_node_input = h5file.create_dataset('aero_node', data=aero_node)\n        elastic_axis_input = h5file.create_dataset('elastic_axis', data=elastic_axis)\n\n\ndef generate_naca_camber(M=0, P=0):\n    m = M*1e-2\n    p = P*1e-1\n\n    def naca(x, m, p):\n        if x < 1e-6:\n            return 0.0\n        elif x < p:\n            return m/(p*p)*(2*p*x - x*x)\n        elif x > p and x < 1+1e-6:\n            return m/((1-p)*(1-p))*(1 - 2*p + 2*p*x - x*x)\n\n    x_vec = np.linspace(0, 1, 1000)\n    y_vec = np.array([naca(x, m, p) for x in x_vec])\n    return x_vec, y_vec\n\n\ndef generate_solver_file(horseshoe=False):\n    file_name = route + '/' + case_name + '.sharpy'\n    # config = configparser.ConfigParser()\n    import configobj\n    config = configobj.ConfigObj()\n    config.filename = file_name\n    config['SHARPy'] = {'case': case_name,\n                        'route': route,\n                        'flow': ['BeamLoader',\n                                 'AerogridLoader',\n                                 'StaticCoupled',\n                                 'DynamicPrescribedCoupled',\n                                 # 'PrescribedUvlm',\n                                 'AerogridPlot',\n                                 # 'NonLinearDynamic',\n                                 'BeamPlot',]\n                                 # 'AeroForcesCalculator',],\n                        'write_screen': 'off',\n                        'write_log': 'on',\n                        'log_folder': route + '/output/',\n                        'log_file': case_name + '.log'}\n    config['BeamLoader'] = {'unsteady': 'on',\n                            'orientation': algebra.euler2quat(np.array([0.0,\n                                                                        alpha_rad,\n                                                                        beta*np.pi/180]))}\n\n    config['StaticCoupled'] = {'print_info': 'on',\n                               'structural_solver': 'NonLinearStatic',\n                               'structural_solver_settings': {'print_info': 'off',\n                                                              'max_iterations': 150,\n                                                              'num_load_steps': 10,\n                                                              'delta_curved': 1e-5,\n                                                              'min_delta': 1e-5,\n                                                              'gravity_on': 'off',\n                                                              'gravity': 9.754,\n                                                              'orientation': algebra.euler2quat(np.array([0.0,\n                                                                                                          alpha_rad,\n                                                                                                          beta*np.pi/180]))},\n                               'aero_solver': 'StaticUvlm',\n                               'aero_solver_settings': {'print_info': 'off',\n                                                        'horseshoe': 'off',\n                                                        'num_cores': 4,\n                                                        'n_rollup': 0,\n                                                        'rollup_dt': main_chord/m_main/u_inf,\n                                                        'rollup_aic_refresh': 1,\n                                                        'rollup_tolerance': 1e-4,\n                                                        'velocity_field_generator': 'SteadyVelocityField',\n                                                        'velocity_field_input': {'u_inf': u_inf,\n                                                                                 'u_inf_direction': [1., 0, 0]},\n                                                        'rho': rho,\n                                                        'alpha': alpha_rad,\n                                                        'beta': beta},\n                               'max_iter': 80,\n                               'n_load_steps': 3,\n                               'tolerance': 1e-4,\n                               'relaxation_factor': 0.0}\n    config['NonLinearDynamic'] = {'print_info': 'off',\n                                  'max_iterations': 150,\n                                  'num_load_steps': 4,\n                                  'delta_curved': 1e-5,\n                                  'min_delta': 1e-5,\n                                  'newmark_damp': 5e-4,\n                                  'gravity_on': 'on',\n                                  'gravity': 9.754,\n                                  'num_steps': num_steps,\n                                  'dt': dt,\n                                  'prescribed_motion': 'on'}\n    config['PrescribedUvlm'] =  {'print_info': 'off',\n                                 'horseshoe': 'off',\n                                 'num_cores': 4,\n                                 'n_rollup': 100,\n                                 'convection_scheme': 3,\n                                 'rollup_dt': main_chord/m_main/u_inf,\n                                 'rollup_aic_refresh': 1,\n                                 'rollup_tolerance': 1e-4,\n                                 'velocity_field_generator': 'SteadyVelocityField',\n                                 'velocity_field_input': {'u_inf': u_inf,\n                                                          'u_inf_direction': [1., 0, 0]},\n                                 'rho': rho,\n                                 'alpha': alpha_rad,\n                                 'beta': beta,\n                                 'n_time_steps': num_steps,\n                                 'dt': dt}\n    config['DynamicPrescribedCoupled'] = {'print_info': 'on',\n                                          'structural_solver': 'NonLinearDynamicPrescribedStep',\n                                          'structural_solver_settings': {'print_info': 'off',\n                                                                         'max_iterations': 150,\n                                                                         'num_load_steps': 10,\n                                                                         'delta_curved': 1e-5,\n                                                                         'min_delta': 1e-5,\n                                                                         'newmark_damp': 1e-3,\n                                                                         'gravity_on': 'off',\n                                                                         'gravity': 9.754,\n                                                                         'num_steps': num_steps,\n                                                                         'dt': dt},\n                                          'aero_solver': 'StepUvlm',\n                                          'aero_solver_settings': {'print_info': 'off',\n                                                                   'horseshoe': 'off',\n                                                                   'num_cores': 4,\n                                                                   'n_rollup': 100,\n                                                                   'convection_scheme': 3,\n                                                                   'rollup_dt': main_chord/m_main/u_inf,\n                                                                   'rollup_aic_refresh': 1,\n                                                                   'rollup_tolerance': 1e-4,\n                                                                   'velocity_field_generator': 'SteadyVelocityField',\n                                                                   'velocity_field_input': {'u_inf': u_inf,\n                                                                                            'u_inf_direction': [1., 0, 0]},\n                                                                   'rho': rho,\n                                                                   'alpha': alpha_rad,\n                                                                   'beta': beta,\n                                                                   'n_time_steps': num_steps,\n                                                                   'dt': dt},\n                                          'max_iter': 100,\n                                          'tolerance': 1e-6,\n                                          'relaxation_factor': 0.,\n                                          'n_time_steps': num_steps,\n                                          'dt': dt,\n                                          'structural_substeps': 10}\n\n    if horseshoe is True:\n        config['AerogridLoader'] = {'unsteady': 'on',\n                                    'aligned_grid': 'on',\n                                    'mstar': 1,\n                                    'freestream_dir': ['1', '0', '0'],\n                                    'wake_shape_generator': 'StraightWake',\n                                    'wake_shape_generator_input': {'u_inf': u_inf,\n                                                                     'u_inf_direction': np.array([1., 0., 0.]),\n                                                                     'dt': dt}}\n    else:\n        config['AerogridLoader'] = {'unsteady': 'on',\n                                    'aligned_grid': 'on',\n                                    'mstar': 150,\n                                    'freestream_dir': ['1', '0', '0'],\n                                    'wake_shape_generator': 'StraightWake'\n                                    'wake_shape_generator_input': {'u_inf': u_inf,\n                                                                     'u_inf_direction': np.array([1., 0., 0.]),\n                                                                     'dt': dt}}\n    config['AerogridPlot'] = {'include_rbm': 'on',\n                              'include_applied_forces': 'on',\n                              'minus_m_star': 0\n                              }\n    config['AeroForcesCalculator'] = {'write_text_file': 'on',\n                                      'text_file_name': case_name + '_aeroforces.csv',\n                                      'screen_output': 'on',\n                                      'unsteady': 'off'\n                                      }\n    config['BeamPlot'] = {'include_rbm': 'on',\n                          'include_applied_forces': 'on'}\n    config.write()\n\n\nclean_test_files()\ngenerate_fem_file()\ngenerate_dyn_file()\ngenerate_solver_file(horseshoe=False)\ngenerate_aero_file()\n"
  },
  {
    "path": "tests/coupled/prescribed/test_prescribed.py",
    "content": "# import sharpy.utils.settings as settings\n# import sharpy.utils.exceptions as exceptions\n# import sharpy.utils.cout_utils as cout\nimport numpy as np\nimport importlib\nimport unittest\nimport os\nimport sharpy.utils.cout_utils as cout\n\n\n@unittest.skip('Placeholder - No test yet to run')\nclass TestCoupledPrescribed(unittest.TestCase):\n    \"\"\"\n    \"\"\"\n\n    @classmethod\n    def setUpClass(cls):\n        # run all the cases generators\n        # case = 'smith_2deg_prescribed'\n        # mod = importlib.import_module('tests.coupled.prescribed.' + case + '.generate_' + case)\n        # case = 'rotating_wing'\n        # mod1 = importlib.import_module('tests.coupled.prescribed.' + case + '.generate_' + case)\n        pass\n\n    @classmethod\n    def tearDownClass(cls):\n        pass\n\n    # def test_smith2deg_prescribed(self):\n    #     import sharpy.sharpy_main\n    #     solver_path = os.path.abspath(os.path.dirname(os.path.realpath(__file__)) +\n    #                                   '/smith_2deg_prescribed/smith_2deg_prescribed.sharpy')\n    #     sharpy.sharpy_main.main(['', solver_path])\n    #\n    #     # read output and compare\n    #     output_path = os.path.dirname(solver_path) + 'output/aero/'\n    #     forces_data = np.genfromtxt(output_path + 'smith_2deg_prescribed_aeroforces.csv')\n    #     self.assertAlmostEqual(forces_data[-1, 3], -3.728e1, 1)\n\n    def test_rotating_wing(self):\n        # import sharpy.sharpy_main\n        # solver_path = os.path.abspath(os.path.dirname(os.path.realpath(__file__)) +\n                                      # '/rotating_wing/rotating_wing.sharpy')\n        # sharpy.sharpy_main.main(['', solver_path])\n        print('No tests for prescribed dynamic configurations (yet)!', 1)\n        pass\n"
  },
  {
    "path": "tests/coupled/static/__init__.py",
    "content": ""
  },
  {
    "path": "tests/coupled/static/pazy/generate_pazy.py",
    "content": "import sharpy.cases.templates.flying_wings as wings\nimport sharpy.sharpy_main\n\n\ndef generate_pazy(u_inf, case_name, output_folder='/output/', cases_folder='', **kwargs):\n    # u_inf = 60\n    alpha_deg = kwargs.get('alpha', 0.)\n    rho = 1.225\n    num_modes = 16\n    gravity_on = kwargs.get('gravity_on', True)\n\n    # Lattice Discretisation\n    M = kwargs.get('M', 4)\n    N = kwargs.get('N', 32)\n    M_star_fact = kwargs.get('Ms', 10)\n    flag_multiple_mstar_input = kwargs.get('test_multiple_inputs', False)\n\n    # SHARPy nonlinear reference solution\n    ws = wings.PazyControlSurface(M=M,\n                                    N=N,\n                                    Mstar_fact=M_star_fact,\n                                    u_inf=u_inf,\n                                    alpha=alpha_deg,\n                                    cs_deflection=[0, 0],\n                                    rho=rho,\n                                    sweep=0,\n                                    physical_time=2,\n                                    n_surfaces=2,\n                                    route=cases_folder + '/' + case_name,\n                                    case_name=case_name)\n\n    ws.gust_intensity = 0.01\n    ws.sigma = 1\n\n    ws.clean_test_files()\n    ws.update_derived_params()\n    ws.set_default_config_dict()\n\n    ws.generate_aero_file()\n    ws.generate_fem_file()\n\n    ws.config['SHARPy'] = {\n        'flow':\n            ['BeamLoader',\n            'AerogridLoader',\n             'StaticCoupled',\n             'AerogridPlot',\n             'BeamPlot',\n             'WriteVariablesTime',\n             ],\n        'case': ws.case_name, 'route': ws.route,\n        'write_screen': 'off', 'write_log': 'on',\n        'save_settings': 'on',\n        'log_folder': output_folder,\n        'log_file': ws.case_name + '.log'}\n\n    ws.config['BeamLoader'] = {\n        'unsteady': 'off',\n        'orientation': ws.quat}\n\n    ws.config['AerogridLoader'] = {\n        'unsteady': 'off',\n        'aligned_grid': 'on',\n        'mstar': ws.Mstar_fact * ws.M,\n        'freestream_dir': ws.u_inf_direction,\n        'wake_shape_generator': 'StraightWake',\n        'wake_shape_generator_input': {'u_inf': ws.u_inf,\n                                       'u_inf_direction': ws.u_inf_direction,\n                                       'dt': ws.dt}}\n    if flag_multiple_mstar_input:\n        ws.config['AerogridLoader']['mstar'] = [ws.config['AerogridLoader']['mstar'], ws.config['AerogridLoader']['mstar']]\n        ws.config['SHARPy']['flow'] = ['BeamLoader','AerogridLoader']\n    else:\n        ws.config['StaticUvlm'] = {\n            'rho': ws.rho,\n            'velocity_field_generator': 'SteadyVelocityField',\n            'velocity_field_input': {\n                'u_inf': ws.u_inf,\n                'u_inf_direction': ws.u_inf_direction},\n            'rollup_dt': ws.dt,\n            'print_info': 'on',\n            'horseshoe': 'on',\n            'num_cores': 4,\n            'n_rollup': 0,\n            'rollup_aic_refresh': 0,\n            'rollup_tolerance': 1e-4}\n\n        settings = dict()\n        settings['NonLinearStatic'] = {'print_info': 'off',\n                                    'max_iterations': 200,\n                                    'num_load_steps': 5,\n                                    'delta_curved': 1e-6,\n                                    'min_delta': 1e-8,\n                                    'gravity_on': gravity_on,\n                                    'gravity': 9.81}\n\n        ws.config['StaticCoupled'] = {\n            'print_info': 'on',\n            'max_iter': 200,\n            'n_load_steps': 4,\n            'tolerance': 1e-5,\n            'relaxation_factor': 0.1,\n            'aero_solver': 'StaticUvlm',\n            'aero_solver_settings': {\n                'rho': ws.rho,\n                'print_info': 'off',\n                'horseshoe': 'on',\n                'num_cores': 4,\n                'n_rollup': 0,\n                'rollup_dt': ws.dt,\n                'rollup_aic_refresh': 1,\n                'rollup_tolerance': 1e-4,\n                'velocity_field_generator': 'SteadyVelocityField',\n                'velocity_field_input': {\n                    'u_inf': ws.u_inf,\n                    'u_inf_direction': ws.u_inf_direction},\n                'vortex_radius': 1e-9},\n            'structural_solver': 'NonLinearStatic',\n            'structural_solver_settings': settings['NonLinearStatic']}\n\n        ws.config['AerogridPlot'] = {'include_rbm': 'off',\n                                    'include_applied_forces': 'on',\n                                    'minus_m_star': 0}\n\n        ws.config['BeamPlot'] = {'include_rbm': 'off',\n                                'include_applied_forces': 'on'}\n\n        ws.config['WriteVariablesTime'] = {'structure_variables': ['pos'],\n                                        'structure_nodes': list(range(0, ws.num_node_surf)),\n                                        'cleanup_old_solution': 'on'}\n\n    ws.config.write()\n\n    sharpy.sharpy_main.main(['', ws.route + ws.case_name + '.sharpy'])\n"
  },
  {
    "path": "tests/coupled/static/smith_g_2deg/__init__.py",
    "content": ""
  },
  {
    "path": "tests/coupled/static/smith_g_2deg/generate_smith_g_2deg.py",
    "content": "import h5py as h5\nimport numpy as np\nimport configparser\nimport os\nnp.set_printoptions(precision=16)\n\nimport sharpy.utils.algebra as algebra\n\ncase_name = 'smith_g_2deg'\nroute = os.path.dirname(os.path.realpath(__file__)) + '/'\n\n# flight conditions\nu_inf = 25\nrho = 0.08891\nalpha = 2\nbeta = 0\nc_ref = 1\nb_ref = 16\nsweep = 0*np.pi/180.\naspect_ratio = 32  # = total wing span (chord = 1)\n\nalpha_rad = alpha*np.pi/180\n\n# main geometry data\nmain_span = aspect_ratio/2./np.cos(sweep)\nmain_chord = 1.0\nmain_ea = 0.5\nmain_sigma = 1\nmain_airfoil_P = 0\nmain_airfoil_M = 0\n\nn_surfaces = 2\n\n# discretisation data\nnum_elem_main = 10\n\nnum_node_elem = 3\nnum_elem = num_elem_main + num_elem_main\nnum_node_main = num_elem_main*(num_node_elem - 1) + 1\nnum_node = num_node_main + (num_node_main - 1)\n\nm_main = 10\n\n\ndef clean_test_files():\n    fem_file_name = route + '/' + case_name + '.fem.h5'\n    if os.path.isfile(fem_file_name):\n        os.remove(fem_file_name)\n\n    aero_file_name = route + '/' + case_name + '.aero.h5'\n    if os.path.isfile(aero_file_name):\n        os.remove(aero_file_name)\n\n    solver_file_name = route + '/' + case_name + '.sharpy'\n    if os.path.isfile(solver_file_name):\n        os.remove(solver_file_name)\n\n    flightcon_file_name = route + '/' + case_name + '.flightcon.txt'\n    if os.path.isfile(flightcon_file_name):\n        os.remove(flightcon_file_name)\n\n\ndef generate_fem_file():\n    # placeholders\n    # coordinates\n    global x, y, z\n    x = np.zeros((num_node, ))\n    y = np.zeros((num_node, ))\n    z = np.zeros((num_node, ))\n\n    # struct twist\n    structural_twist = np.zeros((num_elem, num_node_elem))\n\n    # beam number\n    beam_number = np.zeros((num_elem, ), dtype=int)\n\n    # frame of reference delta\n    frame_of_reference_delta = np.zeros((num_elem, num_node_elem, 3))\n\n    # connectivities\n    conn = np.zeros((num_elem, num_node_elem), dtype=int)\n\n    # stiffness\n    num_stiffness = 1\n    ea = 1e5\n    ga = 1e5\n    gj = 1e4\n    eiy = 2e4\n    eiz = 5e6\n    sigma = 1\n    base_stiffness = sigma*np.diag([ea, ga, ga, gj, eiy, eiz])\n    stiffness = np.zeros((num_stiffness, 6, 6))\n    stiffness[0, :, :] = main_sigma*base_stiffness\n    elem_stiffness = np.zeros((num_elem,), dtype=int)\n\n    # mass\n    num_mass = 1\n    m_base = 0.75\n    j_base = 0.1\n    base_mass = np.diag([m_base, m_base, m_base, j_base, 0.5*j_base, 0.5*j_base])\n    mass = np.zeros((num_mass, 6, 6))\n    mass[0, :, :] = base_mass\n    elem_mass = np.zeros((num_elem,), dtype=int)\n\n    # boundary conditions\n    boundary_conditions = np.zeros((num_node, ), dtype=int)\n    boundary_conditions[0] = 1\n\n    # applied forces\n    app_forces = np.zeros((num_node, 6))\n\n    # right wing (beam 0) --------------------------------------------------------------\n    working_elem = 0\n    working_node = 0\n    beam_number[working_elem:working_elem + num_elem_main] = 0\n\n    y[0] = 0\n    y[working_node:working_node + num_node_main] = np.cos(sweep)*np.linspace(0.0, main_span, num_node_main)\n    x[working_node:working_node + num_node_main] = np.sin(sweep)*np.linspace(0.0, main_span, num_node_main)\n    for ielem in range(num_elem_main):\n        for inode in range(num_node_elem):\n            frame_of_reference_delta[working_elem + ielem, inode, :] = [-1, 0, 0]\n    # connectivity\n    for ielem in range(num_elem_main):\n        conn[working_elem + ielem, :] = ((np.ones((3,))*(working_elem + ielem)*(num_node_elem - 1)) +\n                                         [0, 2, 1])\n    elem_stiffness[working_elem:working_elem + num_elem_main] = 0\n    elem_mass[working_elem:working_elem + num_elem_main] = 0\n    boundary_conditions[0] = 1\n    boundary_conditions[working_node + num_node_main - 1] = -1\n    working_elem += num_elem_main\n    working_node += num_node_main\n\n    # left wing (beam 1) --------------------------------------------------------------\n    beam_number[working_elem:working_elem + num_elem_main] = 1\n    domain = np.linspace(-1.0, 0.0, num_node_main)\n    tempy = np.linspace(-main_span, 0.0, num_node_main)\n    x[working_node:working_node + num_node_main - 1] = -np.sin(sweep)*tempy[0:-1]\n    y[working_node:working_node + num_node_main - 1] = np.cos(sweep)*tempy[0:-1]\n\n    for ielem in range(num_elem_main):\n        for inode in range(num_node_elem):\n            frame_of_reference_delta[working_elem + ielem, inode, :] = [-1, 0, 0]\n    # connectivity\n    for ielem in range(num_elem_main):\n        conn[working_elem + ielem, :] = ((np.ones((3,))*(working_elem + ielem)*(num_node_elem - 1)) +\n                                         [0, 2, 1]) + 1\n    conn[working_elem + num_elem_main - 1, 1] = 0\n    elem_stiffness[working_elem:working_elem + num_elem_main] = 0\n    elem_mass[working_elem:working_elem + num_elem_main] = 0\n    boundary_conditions[working_node] = -1\n    working_elem += num_elem_main\n    working_node += num_node_main - 1\n\n    with h5.File(route + '/' + case_name + '.fem.h5', 'a') as h5file:\n        coordinates = h5file.create_dataset('coordinates', data=np.column_stack((x, y, z)))\n        conectivities = h5file.create_dataset('connectivities', data=conn)\n        num_nodes_elem_handle = h5file.create_dataset(\n            'num_node_elem', data=num_node_elem)\n        num_nodes_handle = h5file.create_dataset(\n            'num_node', data=num_node)\n        num_elem_handle = h5file.create_dataset(\n            'num_elem', data=num_elem)\n        stiffness_db_handle = h5file.create_dataset(\n            'stiffness_db', data=stiffness)\n        stiffness_handle = h5file.create_dataset(\n            'elem_stiffness', data=elem_stiffness)\n        mass_db_handle = h5file.create_dataset(\n            'mass_db', data=mass)\n        mass_handle = h5file.create_dataset(\n            'elem_mass', data=elem_mass)\n        frame_of_reference_delta_handle = h5file.create_dataset(\n            'frame_of_reference_delta', data=frame_of_reference_delta)\n        structural_twist_handle = h5file.create_dataset(\n            'structural_twist', data=structural_twist)\n        bocos_handle = h5file.create_dataset(\n            'boundary_conditions', data=boundary_conditions)\n        beam_handle = h5file.create_dataset(\n            'beam_number', data=beam_number)\n        app_forces_handle = h5file.create_dataset(\n            'app_forces', data=app_forces)\n        # node_app_forces_handle = h5file.create_dataset(\n        #     'node_app_forces', data=node_app_forces)\n\n\ndef generate_aero_file():\n    global x, y, z\n    airfoil_distribution = np.zeros((num_elem, num_node_elem), dtype=int)\n    surface_distribution = np.zeros((num_elem,), dtype=int) - 1\n    surface_m = np.zeros((n_surfaces, ), dtype=int)\n    m_distribution = 'uniform'\n    aero_node = np.zeros((num_node,), dtype=bool)\n    twist = np.zeros((num_elem, 3))\n    chord = np.zeros((num_elem, 3))\n    elastic_axis = np.zeros((num_elem, 3,))\n\n    working_elem = 0\n    working_node = 0\n\n    # right wing (surface 0, beam 0)\n    i_surf = 0\n    airfoil_distribution[working_elem:working_elem + num_elem_main, :] = 0\n    surface_distribution[working_elem:working_elem + num_elem_main] = i_surf\n    surface_m[i_surf] = m_main\n    aero_node[working_node:working_node + num_node_main] = True\n    chord[:] = main_chord\n    elastic_axis[:] = main_ea\n    working_elem += num_elem_main\n    working_node += num_node_main\n\n    # right wing (surface 1, beam 1)\n    i_surf = 1\n    airfoil_distribution[working_elem:working_elem + num_elem_main, :] = 0\n    surface_distribution[working_elem:working_elem + num_elem_main] = i_surf\n    surface_m[i_surf] = m_main\n    aero_node[working_node:working_node + num_node_main - 1] = True\n\n    working_elem += num_elem_main\n    working_node += num_node_main - 1\n\n    with h5.File(route + '/' + case_name + '.aero.h5', 'a') as h5file:\n        airfoils_group = h5file.create_group('airfoils')\n        # add one airfoil\n        naca_airfoil_main = airfoils_group.create_dataset('0', data=np.column_stack(\n                                generate_naca_camber(P=main_airfoil_P, M=main_airfoil_M)))\n        # chord\n        chord_input = h5file.create_dataset('chord', data=chord)\n        dim_attr = chord_input .attrs['units'] = 'm'\n\n        # twist\n        twist_input = h5file.create_dataset('twist', data=twist)\n        dim_attr = twist_input.attrs['units'] = 'rad'\n\n        # airfoil distribution\n        airfoil_distribution_input = h5file.create_dataset('airfoil_distribution', data=airfoil_distribution)\n\n        surface_distribution_input = h5file.create_dataset('surface_distribution', data=surface_distribution)\n        surface_m_input = h5file.create_dataset('surface_m', data=surface_m)\n        m_distribution_input = h5file.create_dataset('m_distribution', data=m_distribution.encode('ascii', 'ignore'))\n\n        aero_node_input = h5file.create_dataset('aero_node', data=aero_node)\n        elastic_axis_input = h5file.create_dataset('elastic_axis', data=elastic_axis)\n\n\ndef generate_naca_camber(M=0, P=0):\n    m = M*1e-2\n    p = P*1e-1\n\n    def naca(x, m, p):\n        if x < 1e-6:\n            return 0.0\n        elif x < p:\n            return m/(p*p)*(2*p*x - x*x)\n        elif x > p and x < 1+1e-6:\n            return m/((1-p)*(1-p))*(1 - 2*p + 2*p*x - x*x)\n\n    x_vec = np.linspace(0, 1, 1000)\n    y_vec = np.array([naca(x, m, p) for x in x_vec])\n    return x_vec, y_vec\n\n\ndef generate_solver_file(horseshoe=False):\n    file_name = route + '/' + case_name + '.sharpy'\n\n    import configobj\n    config = configobj.ConfigObj()\n    config.filename = file_name\n    config['SHARPy'] = {'case': case_name,\n                        'route': route,\n                        'flow': ['BeamLoader', 'AerogridLoader', 'StaticCoupled',\n                                 'AeroForcesCalculator', 'WriteVariablesTime'],\n                        'write_screen': 'off',\n                        'write_log': 'on',\n                        'log_folder': route + '/output/',\n                        'log_file': case_name + '.log'}\n    config['BeamLoader'] = {'unsteady': 'off',\n                            'orientation': algebra.euler2quat(np.array([0.0,\n                                                                        alpha_rad,\n                                                                        beta*np.pi/180]))}\n    config['StaticCoupled'] = {'print_info': 'on',\n                               'structural_solver': 'NonLinearStatic',\n                               'structural_solver_settings': {'print_info': 'off',\n                                                              'max_iterations': 150,\n                                                              'num_load_steps': 1,\n                                                              'delta_curved': 1e-1,\n                                                              'min_delta': 1e-6,\n                                                              'gravity_on': 'on',\n                                                              'gravity': 9.754},\n                               'aero_solver': 'StaticUvlm',\n                               'aero_solver_settings': {'print_info': 'off',\n                                                        'horseshoe': 'on',\n                                                        'num_cores': 4,\n                                                        'n_rollup': 0,\n                                                        'rollup_dt': main_chord/m_main/u_inf,\n                                                        'rollup_aic_refresh': 1,\n                                                        'rollup_tolerance': 1e-4,\n                                                        'velocity_field_generator': 'SteadyVelocityField',\n                                                        'velocity_field_input': {'u_inf': u_inf,\n                                                                                 'u_inf_direction': [1., 0, 0]},\n                                                        'rho': rho},\n                               'max_iter': 50,\n                               'tolerance': 1e-9,\n                               'relaxation_factor': 0.0}\n    config['WriteVariablesTime'] = {'cleanup_old_solution': 'on',\n                                    'structure_variables': ['pos'],\n                                    'structure_nodes': [num_node_main - 1]}\n\n    if horseshoe is True:\n        config['AerogridLoader'] = {'unsteady': 'off',\n                                    'aligned_grid': 'on',\n                                    'mstar': 1,\n                                    'freestream_dir': ['1', '0', '0'],\n                                    'wake_shape_generator': 'StraightWake',\n                                    'wake_shape_generator_input': {'u_inf': u_inf,\n                                                                   'u_inf_direction': np.array([1., 0., 0.]),\n                                                                   'dt': main_chord/m_main/u_inf}}\n    else:\n        config['AerogridLoader'] = {'unsteady': 'off',\n                                    'aligned_grid': 'on',\n                                    'mstar': 20,\n                                    'freestream_dir': ['1', '0', '0'],\n                                    'wake_shape_generator': 'StraightWake',\n                                    'wake_shape_generator_input': {'u_inf': u_inf,\n                                                                   'u_inf_direction': np.array([1., 0., 0.]),\n                                                                   'dt': main_chord/m_main/u_inf}}\n    config['AeroForcesCalculator'] = {'write_text_file': 'on',\n                                      'text_file_name': case_name + '_aeroforces.csv',\n                                      'screen_output': 'on',\n                                      }\n    config.write()\n\n\nclean_test_files()\ngenerate_fem_file()\ngenerate_solver_file(horseshoe=True)\ngenerate_aero_file()\n"
  },
  {
    "path": "tests/coupled/static/smith_g_4deg/__init__.py",
    "content": ""
  },
  {
    "path": "tests/coupled/static/smith_g_4deg/generate_smith_g_4deg.py",
    "content": "import h5py as h5\nimport numpy as np\nimport configparser\nimport os\n\nimport sharpy.utils.algebra as algebra\n\ncase_name = 'smith_g_4deg'\nroute = os.path.dirname(os.path.realpath(__file__)) + '/'\n\n# flight conditions\nu_inf = 25\nrho = 0.08891\nalpha = 4\nbeta = 0\nc_ref = 1\nb_ref = 16\nsweep = 0*np.pi/180.\naspect_ratio = 32  # = total wing span (chord = 1)\n\nalpha_rad = alpha*np.pi/180\n\n# main geometry data\nmain_span = aspect_ratio/2./np.cos(sweep)\nmain_chord = 1.0\nmain_ea = 0.5\nmain_sigma = 1\nmain_airfoil_P = 0\nmain_airfoil_M = 0\n\nn_surfaces = 2\n\n# discretisation data\nnum_elem_main = 10\n\nnum_node_elem = 3\nnum_elem = num_elem_main + num_elem_main\nnum_node_main = num_elem_main*(num_node_elem - 1) + 1\nnum_node = num_node_main + (num_node_main - 1)\n\nm_main = 10\n\n\ndef clean_test_files():\n    fem_file_name = route + '/' + case_name + '.fem.h5'\n    if os.path.isfile(fem_file_name):\n        os.remove(fem_file_name)\n\n    aero_file_name = route + '/' + case_name + '.aero.h5'\n    if os.path.isfile(aero_file_name):\n        os.remove(aero_file_name)\n\n    solver_file_name = route + '/' + case_name + '.sharpy'\n    if os.path.isfile(solver_file_name):\n        os.remove(solver_file_name)\n\n    flightcon_file_name = route + '/' + case_name + '.flightcon.txt'\n    if os.path.isfile(flightcon_file_name):\n        os.remove(flightcon_file_name)\n\n\ndef generate_fem_file():\n    # placeholders\n    # coordinates\n    global x, y, z\n    x = np.zeros((num_node, ))\n    y = np.zeros((num_node, ))\n    z = np.zeros((num_node, ))\n\n    # struct twist\n    structural_twist = np.zeros((num_elem, num_node_elem))\n\n    # beam number\n    beam_number = np.zeros((num_elem, ), dtype=int)\n\n    # frame of reference delta\n    frame_of_reference_delta = np.zeros((num_elem, num_node_elem, 3))\n\n    # connectivities\n    conn = np.zeros((num_elem, num_node_elem), dtype=int)\n\n    # stiffness\n    num_stiffness = 1\n    ea = 1e5\n    ga = 1e5\n    gj = 1e4\n    eiy = 2e4\n    eiz = 5e6\n    sigma = 1.\n    base_stiffness = sigma*np.diag([ea, ga, ga, gj, eiy, eiz])\n    stiffness = np.zeros((num_stiffness, 6, 6))\n    stiffness[0, :, :] = main_sigma*base_stiffness\n    elem_stiffness = np.zeros((num_elem,), dtype=int)\n\n    # mass\n    num_mass = 1\n    m_base = 0.75\n    j_base = 0.1\n    base_mass = np.diag([m_base, m_base, m_base, j_base, j_base, j_base])\n    mass = np.zeros((num_mass, 6, 6))\n    mass[0, :, :] = base_mass\n    elem_mass = np.zeros((num_elem,), dtype=int)\n\n    # boundary conditions\n    boundary_conditions = np.zeros((num_node, ), dtype=int)\n    boundary_conditions[0] = 1\n\n    app_forces = np.zeros((num_node, 6))\n\n    spacing_param = 4\n\n    # right wing (beam 0) --------------------------------------------------------------\n    working_elem = 0\n    working_node = 0\n    beam_number[working_elem:working_elem + num_elem_main] = 0\n\n    y[0] = 0\n    y[working_node:working_node + num_node_main] = np.cos(sweep)*np.linspace(0.0, main_span, num_node_main)\n    x[working_node:working_node + num_node_main] = np.sin(sweep)*np.linspace(0.0, main_span, num_node_main)\n    for ielem in range(num_elem_main):\n        for inode in range(num_node_elem):\n            frame_of_reference_delta[working_elem + ielem, inode, :] = [-1, 0, 0]\n    # connectivity\n    for ielem in range(num_elem_main):\n        conn[working_elem + ielem, :] = ((np.ones((3,))*(working_elem + ielem)*(num_node_elem - 1)) +\n                                         [0, 2, 1])\n    elem_stiffness[working_elem:working_elem + num_elem_main] = 0\n    elem_mass[working_elem:working_elem + num_elem_main] = 0\n    boundary_conditions[0] = 1\n    boundary_conditions[working_node + num_node_main - 1] = -1\n    working_elem += num_elem_main\n    working_node += num_node_main\n\n    # left wing (beam 1) --------------------------------------------------------------\n    beam_number[working_elem:working_elem + num_elem_main] = 1\n    tempy = np.linspace(-main_span, 0.0, num_node_main)\n    x[working_node:working_node + num_node_main - 1] = -np.sin(sweep)*tempy[0:-1]\n    y[working_node:working_node + num_node_main - 1] = np.cos(sweep)*tempy[0:-1]\n\n    for ielem in range(num_elem_main):\n        for inode in range(num_node_elem):\n            frame_of_reference_delta[working_elem + ielem, inode, :] = [-1, 0, 0]\n    # connectivity\n    for ielem in range(num_elem_main):\n        conn[working_elem + ielem, :] = ((np.ones((3,))*(working_elem + ielem)*(num_node_elem - 1)) +\n                                         [0, 2, 1]) + 1\n    conn[working_elem + num_elem_main - 1, 1] = 0\n    elem_stiffness[working_elem:working_elem + num_elem_main] = 0\n    elem_mass[working_elem:working_elem + num_elem_main] = 0\n    boundary_conditions[working_node] = -1\n    working_elem += num_elem_main\n    working_node += num_node_main - 1\n\n    with h5.File(route + '/' + case_name + '.fem.h5', 'a') as h5file:\n        coordinates = h5file.create_dataset('coordinates', data=np.column_stack((x, y, z)))\n        conectivities = h5file.create_dataset('connectivities', data=conn)\n        num_nodes_elem_handle = h5file.create_dataset(\n            'num_node_elem', data=num_node_elem)\n        num_nodes_handle = h5file.create_dataset(\n            'num_node', data=num_node)\n        num_elem_handle = h5file.create_dataset(\n            'num_elem', data=num_elem)\n        stiffness_db_handle = h5file.create_dataset(\n            'stiffness_db', data=stiffness)\n        stiffness_handle = h5file.create_dataset(\n            'elem_stiffness', data=elem_stiffness)\n        mass_db_handle = h5file.create_dataset(\n            'mass_db', data=mass)\n        mass_handle = h5file.create_dataset(\n            'elem_mass', data=elem_mass)\n        frame_of_reference_delta_handle = h5file.create_dataset(\n            'frame_of_reference_delta', data=frame_of_reference_delta)\n        structural_twist_handle = h5file.create_dataset(\n            'structural_twist', data=structural_twist)\n        bocos_handle = h5file.create_dataset(\n            'boundary_conditions', data=boundary_conditions)\n        beam_handle = h5file.create_dataset(\n            'beam_number', data=beam_number)\n        app_forces_handle = h5file.create_dataset(\n            'app_forces', data=app_forces)\n\n\ndef generate_aero_file():\n    global x, y, z\n    airfoil_distribution = np.zeros((num_elem, num_node_elem), dtype=int)\n    surface_distribution = np.zeros((num_elem,), dtype=int) - 1\n    surface_m = np.zeros((n_surfaces, ), dtype=int)\n    m_distribution = 'uniform'\n    aero_node = np.zeros((num_node,), dtype=bool)\n    twist = np.zeros((num_elem, 3))\n    chord = np.zeros((num_elem, 3))\n    elastic_axis = np.zeros((num_elem, 3,))\n\n    working_elem = 0\n    working_node = 0\n\n    # right wing (surface 0, beam 0)\n    i_surf = 0\n    airfoil_distribution[working_elem:working_elem + num_elem_main, :] = 0\n    surface_distribution[working_elem:working_elem + num_elem_main] = i_surf\n    surface_m[i_surf] = m_main\n    aero_node[working_node:working_node + num_node_main] = True\n    chord[:] = main_chord\n    elastic_axis[:] = main_ea\n    working_elem += num_elem_main\n    working_node += num_node_main\n\n    # left wing (surface 1, beam 1)\n    i_surf = 1\n    airfoil_distribution[working_elem:working_elem + num_elem_main, :] = 0\n    surface_distribution[working_elem:working_elem + num_elem_main] = i_surf\n    surface_m[i_surf] = m_main\n    aero_node[working_node:working_node + num_node_main - 1] = True\n\n    working_elem += num_elem_main\n    working_node += num_node_main - 1\n\n    with h5.File(route + '/' + case_name + '.aero.h5', 'a') as h5file:\n        airfoils_group = h5file.create_group('airfoils')\n        # add one airfoil\n        naca_airfoil_main = airfoils_group.create_dataset('0', data=np.column_stack(\n                                generate_naca_camber(P=main_airfoil_P, M=main_airfoil_M)))\n        # chord\n        chord_input = h5file.create_dataset('chord', data=chord)\n        dim_attr = chord_input .attrs['units'] = 'm'\n\n        # twist\n        twist_input = h5file.create_dataset('twist', data=twist)\n        dim_attr = twist_input.attrs['units'] = 'rad'\n\n        # airfoil distribution\n        airfoil_distribution_input = h5file.create_dataset('airfoil_distribution', data=airfoil_distribution)\n\n        surface_distribution_input = h5file.create_dataset('surface_distribution', data=surface_distribution)\n        surface_m_input = h5file.create_dataset('surface_m', data=surface_m)\n        m_distribution_input = h5file.create_dataset('m_distribution', data=m_distribution.encode('ascii', 'ignore'))\n\n        aero_node_input = h5file.create_dataset('aero_node', data=aero_node)\n        elastic_axis_input = h5file.create_dataset('elastic_axis', data=elastic_axis)\n\n\ndef generate_naca_camber(M=0, P=0):\n    m = M*1e-2\n    p = P*1e-1\n\n    def naca(x, m, p):\n        if x < 1e-6:\n            return 0.0\n        elif x < p:\n            return m/(p*p)*(2*p*x - x*x)\n        elif x > p and x < 1+1e-6:\n            return m/((1-p)*(1-p))*(1 - 2*p + 2*p*x - x*x)\n\n    x_vec = np.linspace(0, 1, 1000)\n    y_vec = np.array([naca(x, m, p) for x in x_vec])\n    return x_vec, y_vec\n\n\ndef generate_solver_file(horseshoe=False):\n    file_name = route + '/' + case_name + '.sharpy'\n\n    import configobj\n    config = configobj.ConfigObj()\n    config.filename = file_name\n    config['SHARPy'] = {'case': case_name,\n                        'route': route,\n                        'flow': ['BeamLoader', 'AerogridLoader', 'StaticCoupled',\n                                 'AeroForcesCalculator', 'WriteVariablesTime'],\n                        'write_screen': 'off',\n                        'write_log': 'on',\n                        'log_folder': route + '/output/',\n                        'log_file': case_name + '.log'}\n    config['BeamLoader'] = {'unsteady': 'off',\n                            'orientation': algebra.euler2quat(np.array([0.0,\n                                                                        alpha_rad,\n                                                                        beta*np.pi/180]))}\n    config['StaticCoupled'] = {'print_info': 'on',\n                               'structural_solver': 'NonLinearStatic',\n                               'structural_solver_settings': {'print_info': 'off',\n                                                              'max_iterations': 150,\n                                                              'num_load_steps': 1,\n                                                              'delta_curved': 1e-5,\n                                                              'min_delta': 1e-8,\n                                                              'gravity_on': 'on',\n                                                              'gravity': 9.754},\n                               'aero_solver': 'StaticUvlm',\n                               'aero_solver_settings': {'print_info': 'off',\n                                                        'horseshoe': 'on',\n                                                        'num_cores': 4,\n                                                        'n_rollup': 100,\n                                                        'rollup_dt': main_chord/m_main/u_inf,\n                                                        'rollup_aic_refresh': 1,\n                                                        'rollup_tolerance': 1e-4,\n                                                        'velocity_field_generator': 'SteadyVelocityField',\n                                                        'velocity_field_input': {'u_inf': u_inf,\n                                                                                 'u_inf_direction': [1., 0, 0]},\n                                                        'rho': rho},\n                               'max_iter': 100,\n                               'n_load_steps': 5,\n                               'tolerance': 1e-5,\n                               'relaxation_factor': 0.}\n    config['WriteVariablesTime'] = {'cleanup_old_solution': 'on',\n                                    'structure_variables': ['pos'],\n                                    'structure_nodes': [num_node_main - 1]}\n\n    if horseshoe is True:\n        config['AerogridLoader'] = {'unsteady': 'off',\n                                    'aligned_grid': 'on',\n                                    'mstar': 1,\n                                    'freestream_dir': ['1', '0', '0'],\n                                    'wake_shape_generator': 'StraightWake',\n                                    'wake_shape_generator_input': {'u_inf': u_inf,\n                                                                   'u_inf_direction': np.array([1., 0., 0.]),\n                                                                   'dt': main_chord/m_main/u_inf}}\n    else:\n        config['AerogridLoader'] = {'unsteady': 'off',\n                                    'aligned_grid': 'on',\n                                    'mstar': 80,\n                                    'freestream_dir': ['1', '0', '0'],\n                                    'wake_shape_generator': 'StraightWake',\n                                    'wake_shape_generator_input': {'u_inf': u_inf,\n                                                                   'u_inf_direction': np.array([1., 0., 0.]),\n                                                                   'dt': main_chord/m_main/u_inf}}\n\n    config['AeroForcesCalculator'] = {'write_text_file': 'on',\n                                      'text_file_name': case_name + '_aeroforces.csv',\n                                      'screen_output': 'on',\n                                      }\n\n    config.write()\n\n\nclean_test_files()\ngenerate_fem_file()\ngenerate_solver_file(horseshoe=True)\ngenerate_aero_file()\n"
  },
  {
    "path": "tests/coupled/static/smith_nog_2deg/__init__.py",
    "content": ""
  },
  {
    "path": "tests/coupled/static/smith_nog_2deg/generate_smith_nog_2deg.py",
    "content": "import h5py as h5\nimport numpy as np\nimport configparser\nimport os\n\nimport sharpy.utils.algebra as algebra\n\ncase_name = 'smith_nog_2deg'\nroute = os.path.dirname(os.path.realpath(__file__)) + '/'\n\n# flight conditions\nu_inf = 25\nrho = 0.08891\nalpha = 2\nbeta = 0\nc_ref = 1\nb_ref = 16\nsweep = 0*np.pi/180.\naspect_ratio = 32  # = total wing span (chord = 1)\n\nalpha_rad = alpha*np.pi/180\n\n# main geometry data\nmain_span = aspect_ratio/2./np.cos(sweep)\nmain_chord = 1.0\nmain_ea = 0.5\nmain_sigma = 1\nmain_airfoil_P = 0\nmain_airfoil_M = 0\n\nn_surfaces = 2\n\n# discretisation data\nnum_elem_main = 10\n\nnum_node_elem = 3\nnum_elem = num_elem_main + num_elem_main\nnum_node_main = num_elem_main*(num_node_elem - 1) + 1\nnum_node = num_node_main + (num_node_main - 1)\n\nm_main = 10\n\n\ndef clean_test_files():\n    fem_file_name = route + '/' + case_name + '.fem.h5'\n    if os.path.isfile(fem_file_name):\n        os.remove(fem_file_name)\n\n    aero_file_name = route + '/' + case_name + '.aero.h5'\n    if os.path.isfile(aero_file_name):\n        os.remove(aero_file_name)\n\n    solver_file_name = route + '/' + case_name + '.sharpy'\n    if os.path.isfile(solver_file_name):\n        os.remove(solver_file_name)\n\n    flightcon_file_name = route + '/' + case_name + '.flightcon.txt'\n    if os.path.isfile(flightcon_file_name):\n        os.remove(flightcon_file_name)\n\n\ndef generate_fem_file():\n    # placeholders\n    # coordinates\n    global x, y, z\n    x = np.zeros((num_node, ))\n    y = np.zeros((num_node, ))\n    z = np.zeros((num_node, ))\n\n    # struct twist\n    structural_twist = np.zeros((num_elem, num_node_elem))\n\n    # beam number\n    beam_number = np.zeros((num_elem, ), dtype=int)\n\n    # frame of reference delta\n    frame_of_reference_delta = np.zeros((num_elem, num_node_elem, 3))\n\n    # connectivities\n    conn = np.zeros((num_elem, num_node_elem), dtype=int)\n\n    # stiffness\n    num_stiffness = 1\n    ea = 1e5\n    ga = 1e5\n    gj = 1e4\n    eiy = 2e4\n    eiz = 5e6\n    sigma = 1\n    base_stiffness = sigma*np.diag([ea, ga, ga, gj, eiy, eiz])\n    stiffness = np.zeros((num_stiffness, 6, 6))\n    stiffness[0, :, :] = main_sigma*base_stiffness\n    elem_stiffness = np.zeros((num_elem,), dtype=int)\n\n    # mass\n    num_mass = 1\n    m_base = 0.75\n    j_base = 0.1\n    base_mass = np.diag([m_base, m_base, m_base, j_base, 0.5*j_base, 0.5*j_base])\n    mass = np.zeros((num_mass, 6, 6))\n    mass[0, :, :] = base_mass\n    elem_mass = np.zeros((num_elem,), dtype=int)\n\n    # boundary conditions\n    boundary_conditions = np.zeros((num_node, ), dtype=int)\n    boundary_conditions[0] = 1\n\n    # applied forces\n    app_forces = np.zeros((num_node, 6))\n\n    # right wing (beam 0) --------------------------------------------------------------\n    working_elem = 0\n    working_node = 0\n    beam_number[working_elem:working_elem + num_elem_main] = 0\n\n    y[0] = 0\n    y[working_node:working_node + num_node_main] = np.cos(sweep)*np.linspace(0.0, main_span, num_node_main)\n    x[working_node:working_node + num_node_main] = np.sin(sweep)*np.linspace(0.0, main_span, num_node_main)\n    for ielem in range(num_elem_main):\n        for inode in range(num_node_elem):\n            frame_of_reference_delta[working_elem + ielem, inode, :] = [-1, 0, 0]\n    # connectivity\n    for ielem in range(num_elem_main):\n        conn[working_elem + ielem, :] = ((np.ones((3,))*(working_elem + ielem)*(num_node_elem - 1)) +\n                                         [0, 2, 1])\n    elem_stiffness[working_elem:working_elem + num_elem_main] = 0\n    elem_mass[working_elem:working_elem + num_elem_main] = 0\n    boundary_conditions[0] = 1\n    boundary_conditions[working_node + num_node_main - 1] = -1\n    working_elem += num_elem_main\n    working_node += num_node_main\n\n    # left wing (beam 1) --------------------------------------------------------------\n    beam_number[working_elem:working_elem + num_elem_main] = 1\n    tempy = np.linspace(-main_span, 0.0, num_node_main)\n    x[working_node:working_node + num_node_main - 1] = -np.sin(sweep)*tempy[0:-1]\n    y[working_node:working_node + num_node_main - 1] = np.cos(sweep)*tempy[0:-1]\n\n    for ielem in range(num_elem_main):\n        for inode in range(num_node_elem):\n            frame_of_reference_delta[working_elem + ielem, inode, :] = [-1, 0, 0]\n    # connectivity\n    for ielem in range(num_elem_main):\n        conn[working_elem + ielem, :] = ((np.ones((3,))*(working_elem + ielem)*(num_node_elem - 1)) +\n                                         [0, 2, 1]) + 1\n    conn[working_elem + num_elem_main - 1, 1] = 0\n    elem_stiffness[working_elem:working_elem + num_elem_main] = 0\n    elem_mass[working_elem:working_elem + num_elem_main] = 0\n    boundary_conditions[working_node] = -1\n    working_elem += num_elem_main\n    working_node += num_node_main - 1\n\n    with h5.File(route + '/' + case_name + '.fem.h5', 'a') as h5file:\n        coordinates = h5file.create_dataset('coordinates', data=np.column_stack((x, y, z)))\n        conectivities = h5file.create_dataset('connectivities', data=conn)\n        num_nodes_elem_handle = h5file.create_dataset(\n            'num_node_elem', data=num_node_elem)\n        num_nodes_handle = h5file.create_dataset(\n            'num_node', data=num_node)\n        num_elem_handle = h5file.create_dataset(\n            'num_elem', data=num_elem)\n        stiffness_db_handle = h5file.create_dataset(\n            'stiffness_db', data=stiffness)\n        stiffness_handle = h5file.create_dataset(\n            'elem_stiffness', data=elem_stiffness)\n        mass_db_handle = h5file.create_dataset(\n            'mass_db', data=mass)\n        mass_handle = h5file.create_dataset(\n            'elem_mass', data=elem_mass)\n        frame_of_reference_delta_handle = h5file.create_dataset(\n            'frame_of_reference_delta', data=frame_of_reference_delta)\n        structural_twist_handle = h5file.create_dataset(\n            'structural_twist', data=structural_twist)\n        bocos_handle = h5file.create_dataset(\n            'boundary_conditions', data=boundary_conditions)\n        beam_handle = h5file.create_dataset(\n            'beam_number', data=beam_number)\n        app_forces_handle = h5file.create_dataset(\n            'app_forces', data=app_forces)\n\n\ndef generate_aero_file():\n    global x, y, z\n    airfoil_distribution = np.zeros((num_elem, num_node_elem), dtype=int)\n    surface_distribution = np.zeros((num_elem,), dtype=int) - 1\n    surface_m = np.zeros((n_surfaces, ), dtype=int)\n    m_distribution = 'uniform'\n    aero_node = np.zeros((num_node,), dtype=bool)\n    twist = np.zeros((num_elem, 3))\n    chord = np.zeros((num_elem, 3))\n    elastic_axis = np.zeros((num_elem, 3,))\n\n    working_elem = 0\n    working_node = 0\n    # right wing (surface 0, beam 0)\n    i_surf = 0\n    airfoil_distribution[working_elem:working_elem + num_elem_main, :] = 0\n    surface_distribution[working_elem:working_elem + num_elem_main] = i_surf\n    surface_m[i_surf] = m_main\n    aero_node[working_node:working_node + num_node_main] = True\n    chord[:] = main_chord\n    elastic_axis[:] = main_ea\n    working_elem += num_elem_main\n    working_node += num_node_main\n\n    # left wing (surface 1, beam 1)\n    i_surf = 1\n    airfoil_distribution[working_elem:working_elem + num_elem_main, :] = 0\n    surface_distribution[working_elem:working_elem + num_elem_main] = i_surf\n    surface_m[i_surf] = m_main\n    aero_node[working_node:working_node + num_node_main - 1] = True\n    working_elem += num_elem_main\n    working_node += num_node_main - 1\n\n    with h5.File(route + '/' + case_name + '.aero.h5', 'a') as h5file:\n        airfoils_group = h5file.create_group('airfoils')\n        # add one airfoil\n        naca_airfoil_main = airfoils_group.create_dataset('0', data=np.column_stack(\n                                generate_naca_camber(P=main_airfoil_P, M=main_airfoil_M)))\n        # chord\n        chord_input = h5file.create_dataset('chord', data=chord)\n        dim_attr = chord_input .attrs['units'] = 'm'\n\n        # twist\n        twist_input = h5file.create_dataset('twist', data=twist)\n        dim_attr = twist_input.attrs['units'] = 'rad'\n\n        # airfoil distribution\n        airfoil_distribution_input = h5file.create_dataset('airfoil_distribution', data=airfoil_distribution)\n\n        surface_distribution_input = h5file.create_dataset('surface_distribution', data=surface_distribution)\n        surface_m_input = h5file.create_dataset('surface_m', data=surface_m)\n        m_distribution_input = h5file.create_dataset('m_distribution', data=m_distribution.encode('ascii', 'ignore'))\n\n        aero_node_input = h5file.create_dataset('aero_node', data=aero_node)\n        elastic_axis_input = h5file.create_dataset('elastic_axis', data=elastic_axis)\n\n\ndef generate_naca_camber(M=0, P=0):\n    m = M*1e-2\n    p = P*1e-1\n\n    def naca(x, m, p):\n        if x < 1e-6:\n            return 0.0\n        elif x < p:\n            return m/(p*p)*(2*p*x - x*x)\n        elif x > p and x < 1+1e-6:\n            return m/((1-p)*(1-p))*(1 - 2*p + 2*p*x - x*x)\n\n    x_vec = np.linspace(0, 1, 1000)\n    y_vec = np.array([naca(x, m, p) for x in x_vec])\n    return x_vec, y_vec\n\n\ndef generate_solver_file(horseshoe=False):\n    import configobj\n    file_name = route + '/' + case_name + '.sharpy'\n    config = configobj.ConfigObj()\n    np.set_printoptions(precision=16)\n    config.filename = file_name\n    config['SHARPy'] = {'case': case_name,\n                        'route': route,\n                        'flow': ['BeamLoader', 'AerogridLoader', 'StaticCoupled',\n                                 'AeroForcesCalculator', 'WriteVariablesTime'],\n                        'write_screen': 'off',\n                        'write_log': 'on',\n                        'log_folder': route + '/output/',\n                        'log_file': case_name + '.log'}\n    config['BeamLoader'] = {'unsteady': 'off',\n                            'orientation': algebra.euler2quat(np.array([0.0,\n                                                                        alpha_rad,\n                                                                        beta*np.pi/180]))}\n    config['StaticCoupled'] = {'print_info': 'on',\n                               'structural_solver': 'NonLinearStatic',\n                               'structural_solver_settings': {'print_info': 'off',\n                                                              'max_iterations': 150,\n                                                              'num_load_steps': 1,\n                                                              'delta_curved': 1e-1,\n                                                              'min_delta': 1e-6,\n                                                              'gravity_on': 'off',\n                                                              'gravity': 9.754},\n                               'aero_solver': 'StaticUvlm',\n                               'aero_solver_settings': {'print_info': 'off',\n                                                        'horseshoe': 'on',\n                                                        'num_cores': 4,\n                                                        'n_rollup': 0,\n                                                        'rollup_dt': main_chord/m_main/u_inf,\n                                                        'rollup_aic_refresh': 1,\n                                                        'rollup_tolerance': 1e-4,\n                                                        'velocity_field_generator': 'SteadyVelocityField',\n                                                        'velocity_field_input': {'u_inf': u_inf,\n                                                                                 'u_inf_direction': [1., 0, 0]},\n                                                        'rho': rho},\n                               'max_iter': 50,\n                               'tolerance': 1e-9,\n                               'relaxation_factor': 0.0}\n    config['WriteVariablesTime'] = {'cleanup_old_solution': 'on',\n                                    'structure_variables': ['pos'],\n                                    'structure_nodes': [num_node_main - 1]}\n\n    if horseshoe is True:\n        config['AerogridLoader'] = {'unsteady': 'off',\n                                    'aligned_grid': 'on',\n                                    'mstar': 1,\n                                    'freestream_dir': ['1', '0', '0'],\n                                    'wake_shape_generator': 'StraightWake',\n                                    'wake_shape_generator_input': {'u_inf': u_inf,\n                                                                   'u_inf_direction': np.array([1., 0., 0.]),\n                                                                   'dt': main_chord/m_main/u_inf}}\n    else:\n        config['AerogridLoader'] = {'unsteady': 'off',\n                                    'aligned_grid': 'on',\n                                    'mstar': 20,\n                                    'freestream_dir': ['1', '0', '0'],\n                                    'wake_shape_generator': 'StraightWake',\n                                    'wake_shape_generator_input': {'u_inf': u_inf,\n                                                                   'u_inf_direction': np.array([1., 0., 0.]),\n                                                                   'dt': main_chord/m_main/u_inf}}\n\n    config['AeroForcesCalculator'] = {'write_text_file': 'on',\n                                      'text_file_name': case_name + '_aeroforces.csv',\n                                      'screen_output': 'on',\n                                      }\n    config.write()\n\n\nclean_test_files()\ngenerate_fem_file()\ngenerate_solver_file(horseshoe=True)\ngenerate_aero_file()\n"
  },
  {
    "path": "tests/coupled/static/smith_nog_4deg/__init__.py",
    "content": ""
  },
  {
    "path": "tests/coupled/static/smith_nog_4deg/generate_smith_nog_4deg.py",
    "content": "import h5py as h5\nimport numpy as np\nimport configparser\nimport os\n\nimport sharpy.utils.algebra as algebra\n\ncase_name = 'smith_nog_4deg'\nroute = os.path.dirname(os.path.realpath(__file__)) + '/'\n\n# flight conditions\nu_inf = 25\nrho = 0.08891\nalpha = 4\nbeta = 0\nc_ref = 1\nb_ref = 16\nsweep = 0*np.pi/180.\naspect_ratio = 32  # = total wing span (chord = 1)\n\nalpha_rad = alpha*np.pi/180\n\n# main geometry data\nmain_span = aspect_ratio/2./np.cos(sweep)\nmain_chord = 1.0\nmain_ea = 0.5\nmain_sigma = 1\nmain_airfoil_P = 0\nmain_airfoil_M = 0\n\nn_surfaces = 2\n\n# discretisation data\nnum_elem_main = 10\n\nnum_node_elem = 3\nnum_elem = num_elem_main + num_elem_main\nnum_node_main = num_elem_main*(num_node_elem - 1) + 1\nnum_node = num_node_main + (num_node_main - 1)\n\nm_main = 10\n\n\ndef clean_test_files():\n    fem_file_name = route + '/' + case_name + '.fem.h5'\n    if os.path.isfile(fem_file_name):\n        os.remove(fem_file_name)\n\n    aero_file_name = route + '/' + case_name + '.aero.h5'\n    if os.path.isfile(aero_file_name):\n        os.remove(aero_file_name)\n\n    solver_file_name = route + '/' + case_name + '.sharpy'\n    if os.path.isfile(solver_file_name):\n        os.remove(solver_file_name)\n\n    flightcon_file_name = route + '/' + case_name + '.flightcon.txt'\n    if os.path.isfile(flightcon_file_name):\n        os.remove(flightcon_file_name)\n\n\ndef generate_fem_file():\n    # placeholders\n    # coordinates\n    global x, y, z\n    x = np.zeros((num_node, ))\n    y = np.zeros((num_node, ))\n    z = np.zeros((num_node, ))\n\n    # struct twist\n    structural_twist = np.zeros((num_elem, num_node_elem))\n\n    # beam number\n    beam_number = np.zeros((num_elem, ), dtype=int)\n\n    # frame of reference delta\n    frame_of_reference_delta = np.zeros((num_elem, num_node_elem, 3))\n\n    # connectivities\n    conn = np.zeros((num_elem, num_node_elem), dtype=int)\n\n    # stiffness\n    num_stiffness = 1\n    ea = 1e5\n    ga = 1e5\n    gj = 1e4\n    eiy = 2e4\n    eiz = 5e6\n    sigma = 1.\n    base_stiffness = sigma*np.diag([ea, ga, ga, gj, eiy, eiz])\n    stiffness = np.zeros((num_stiffness, 6, 6))\n    stiffness[0, :, :] = main_sigma*base_stiffness\n    elem_stiffness = np.zeros((num_elem,), dtype=int)\n\n    # mass\n    num_mass = 1\n    m_base = 0.75\n    j_base = 0.1\n    base_mass = np.diag([m_base, m_base, m_base, j_base, j_base, j_base])\n    mass = np.zeros((num_mass, 6, 6))\n    mass[0, :, :] = base_mass\n    elem_mass = np.zeros((num_elem,), dtype=int)\n\n    # boundary conditions\n    boundary_conditions = np.zeros((num_node, ), dtype=int)\n    boundary_conditions[0] = 1\n\n    # applied forces\n    app_forces = np.zeros((num_node, 6))\n\n    # right wing (beam 0) --------------------------------------------------------------\n    working_elem = 0\n    working_node = 0\n    beam_number[working_elem:working_elem + num_elem_main] = 0\n    y[0] = 0\n    y[working_node:working_node + num_node_main] = np.cos(sweep)*np.linspace(0.0, main_span, num_node_main)\n    x[working_node:working_node + num_node_main] = np.sin(sweep)*np.linspace(0.0, main_span, num_node_main)\n    for ielem in range(num_elem_main):\n        for inode in range(num_node_elem):\n            frame_of_reference_delta[working_elem + ielem, inode, :] = [-1, 0, 0]\n    # connectivity\n    for ielem in range(num_elem_main):\n        conn[working_elem + ielem, :] = ((np.ones((3,))*(working_elem + ielem)*(num_node_elem - 1)) +\n                                         [0, 2, 1])\n    elem_stiffness[working_elem:working_elem + num_elem_main] = 0\n    elem_mass[working_elem:working_elem + num_elem_main] = 0\n    boundary_conditions[0] = 1\n    boundary_conditions[working_node + num_node_main - 1] = -1\n    working_elem += num_elem_main\n    working_node += num_node_main\n\n    # left wing (beam 1) --------------------------------------------------------------\n    beam_number[working_elem:working_elem + num_elem_main] = 1\n    tempy = np.linspace(-main_span, 0.0, num_node_main)\n    x[working_node:working_node + num_node_main - 1] = -np.sin(sweep)*tempy[0:-1]\n    y[working_node:working_node + num_node_main - 1] = np.cos(sweep)*tempy[0:-1]\n\n    for ielem in range(num_elem_main):\n        for inode in range(num_node_elem):\n            frame_of_reference_delta[working_elem + ielem, inode, :] = [-1, 0, 0]\n    # connectivity\n    for ielem in range(num_elem_main):\n        conn[working_elem + ielem, :] = ((np.ones((3,))*(working_elem + ielem)*(num_node_elem - 1)) +\n                                         [0, 2, 1]) + 1\n    conn[working_elem + num_elem_main - 1, 1] = 0\n    elem_stiffness[working_elem:working_elem + num_elem_main] = 0\n    elem_mass[working_elem:working_elem + num_elem_main] = 0\n    boundary_conditions[working_node] = -1\n    working_elem += num_elem_main\n    working_node += num_node_main - 1\n\n    with h5.File(route + '/' + case_name + '.fem.h5', 'a') as h5file:\n        coordinates = h5file.create_dataset('coordinates', data=np.column_stack((x, y, z)))\n        conectivities = h5file.create_dataset('connectivities', data=conn)\n        num_nodes_elem_handle = h5file.create_dataset(\n            'num_node_elem', data=num_node_elem)\n        num_nodes_handle = h5file.create_dataset(\n            'num_node', data=num_node)\n        num_elem_handle = h5file.create_dataset(\n            'num_elem', data=num_elem)\n        stiffness_db_handle = h5file.create_dataset(\n            'stiffness_db', data=stiffness)\n        stiffness_handle = h5file.create_dataset(\n            'elem_stiffness', data=elem_stiffness)\n        mass_db_handle = h5file.create_dataset(\n            'mass_db', data=mass)\n        mass_handle = h5file.create_dataset(\n            'elem_mass', data=elem_mass)\n        frame_of_reference_delta_handle = h5file.create_dataset(\n            'frame_of_reference_delta', data=frame_of_reference_delta)\n        structural_twist_handle = h5file.create_dataset(\n            'structural_twist', data=structural_twist)\n        bocos_handle = h5file.create_dataset(\n            'boundary_conditions', data=boundary_conditions)\n        beam_handle = h5file.create_dataset(\n            'beam_number', data=beam_number)\n        app_forces_handle = h5file.create_dataset(\n            'app_forces', data=app_forces)\n\n\ndef generate_aero_file():\n    global x, y, z\n    airfoil_distribution = np.zeros((num_elem, num_node_elem), dtype=int)\n    surface_distribution = np.zeros((num_elem,), dtype=int) - 1\n    surface_m = np.zeros((n_surfaces, ), dtype=int)\n    m_distribution = 'uniform'\n    aero_node = np.zeros((num_node,), dtype=bool)\n    twist = np.zeros((num_elem, 3))\n    chord = np.zeros((num_elem, 3))\n    elastic_axis = np.zeros((num_elem, 3,))\n\n    working_elem = 0\n    working_node = 0\n    # right wing (surface 0, beam 0)\n    i_surf = 0\n    airfoil_distribution[working_elem:working_elem + num_elem_main, :] = 0\n    surface_distribution[working_elem:working_elem + num_elem_main] = i_surf\n    surface_m[i_surf] = m_main\n    aero_node[working_node:working_node + num_node_main] = True\n    chord[:] = main_chord\n    elastic_axis[:] = main_ea\n    working_elem += num_elem_main\n    working_node += num_node_main\n\n    # left wing (surface 1, beam 1)\n    i_surf = 1\n    airfoil_distribution[working_elem:working_elem + num_elem_main, :] = 0\n    surface_distribution[working_elem:working_elem + num_elem_main] = i_surf\n    surface_m[i_surf] = m_main\n    aero_node[working_node:working_node + num_node_main - 1] = True\n    working_elem += num_elem_main\n    working_node += num_node_main - 1\n\n    with h5.File(route + '/' + case_name + '.aero.h5', 'a') as h5file:\n        airfoils_group = h5file.create_group('airfoils')\n        # add one airfoil\n        naca_airfoil_main = airfoils_group.create_dataset('0', data=np.column_stack(\n                                generate_naca_camber(P=main_airfoil_P, M=main_airfoil_M)))\n        # chord\n        chord_input = h5file.create_dataset('chord', data=chord)\n        dim_attr = chord_input .attrs['units'] = 'm'\n\n        # twist\n        twist_input = h5file.create_dataset('twist', data=twist)\n        dim_attr = twist_input.attrs['units'] = 'rad'\n\n        # airfoil distribution\n        airfoil_distribution_input = h5file.create_dataset('airfoil_distribution', data=airfoil_distribution)\n\n        surface_distribution_input = h5file.create_dataset('surface_distribution', data=surface_distribution)\n        surface_m_input = h5file.create_dataset('surface_m', data=surface_m)\n        m_distribution_input = h5file.create_dataset('m_distribution', data=m_distribution.encode('ascii', 'ignore'))\n\n        aero_node_input = h5file.create_dataset('aero_node', data=aero_node)\n        elastic_axis_input = h5file.create_dataset('elastic_axis', data=elastic_axis)\n\n\ndef generate_naca_camber(M=0, P=0):\n    m = M*1e-2\n    p = P*1e-1\n\n    def naca(x, m, p):\n        if x < 1e-6:\n            return 0.0\n        elif x < p:\n            return m/(p*p)*(2*p*x - x*x)\n        elif x > p and x < 1+1e-6:\n            return m/((1-p)*(1-p))*(1 - 2*p + 2*p*x - x*x)\n\n    x_vec = np.linspace(0, 1, 1000)\n    y_vec = np.array([naca(x, m, p) for x in x_vec])\n    return x_vec, y_vec\n\n\ndef generate_solver_file(horseshoe=False):\n    file_name = route + '/' + case_name + '.sharpy'\n\n    import configobj\n    config = configobj.ConfigObj()\n    config.filename = file_name\n    config['SHARPy'] = {'case': case_name,\n                        'route': route,\n                        'flow': ['BeamLoader', 'AerogridLoader', 'StaticCoupled',\n                                 'AeroForcesCalculator', 'WriteVariablesTime'],\n                        'write_screen': 'off',\n                        'write_log': 'on',\n                        'log_folder': route + '/output/',\n                        'log_file': case_name + '.log'}\n    config['BeamLoader'] = {'unsteady': 'off',\n                            'orientation': algebra.euler2quat(np.array([0.0,\n                                                                        alpha_rad,\n                                                                        beta*np.pi/180]))}\n    config['StaticCoupled'] = {'print_info': 'on',\n                               'structural_solver': 'NonLinearStatic',\n                               'structural_solver_settings': {'print_info': 'off',\n                                                              'max_iterations': 150,\n                                                              'num_load_steps': 1,\n                                                              'delta_curved': 1e-5,\n                                                              'min_delta': 1e-8,\n                                                              'gravity_on': 'off',\n                                                              'gravity': 9.754},\n                               'aero_solver': 'StaticUvlm',\n                               'aero_solver_settings': {'print_info': 'off',\n                                                        'horseshoe': 'on',\n                                                        'num_cores': 4,\n                                                        'n_rollup': 100,\n                                                        'rollup_dt': main_chord/m_main/u_inf,\n                                                        'rollup_aic_refresh': 1,\n                                                        'rollup_tolerance': 1e-4,\n                                                        'velocity_field_generator': 'SteadyVelocityField',\n                                                        'velocity_field_input': {'u_inf': u_inf,\n                                                                                 'u_inf_direction': [1., 0, 0]},\n                                                        'rho': rho,\n                                                        },\n                               'max_iter': 100,\n                               'n_load_steps': 5,\n                               'tolerance': 1e-5,\n                               'relaxation_factor': 0.}\n    config['WriteVariablesTime'] = {'cleanup_old_solution': 'on',\n                                    'structure_variables': ['pos'],\n                                    'structure_nodes': [num_node_main - 1]}\n\n    if horseshoe is True:\n        config['AerogridLoader'] = {'unsteady': 'off',\n                                    'aligned_grid': 'on',\n                                    'mstar': 1,\n                                    'freestream_dir': ['1', '0', '0'],\n                                    'wake_shape_generator': 'StraightWake',\n                                    'wake_shape_generator_input': {'u_inf': u_inf,\n                                                                   'u_inf_direction': np.array([1., 0., 0.]),\n                                                                   'dt': main_chord/m_main/u_inf}}\n    else:\n        config['AerogridLoader'] = {'unsteady': 'off',\n                                    'aligned_grid': 'on',\n                                    'mstar': 80,\n                                    'freestream_dir': ['1', '0', '0'],\n                                    'wake_shape_generator': 'StraightWake',\n                                    'wake_shape_generator_input': {'u_inf': u_inf,\n                                                                   'u_inf_direction': np.array([1., 0., 0.]),\n                                                                   'dt': main_chord/m_main/u_inf}}\n\n    config['AeroForcesCalculator'] = {'write_text_file': 'on',\n                                      'text_file_name': case_name + '_aeroforces.csv',\n                                      'screen_output': 'on',\n                                      }\n    config.write()\n\n\nclean_test_files()\ngenerate_fem_file()\ngenerate_solver_file(horseshoe=True)\ngenerate_aero_file()\n"
  },
  {
    "path": "tests/coupled/static/test_pazy_static.py",
    "content": "import unittest\nimport numpy as np\nimport tests.coupled.static.pazy.generate_pazy as gp\nimport os\nimport shutil\n\nclass TestPazyCoupledStatic(unittest.TestCase):\n    \"\"\"\n    Test Pazy wing static coupled case and compare against a benchmark result.\n\n    As of the time of writing, benchmark result has not been verified but it\n    serves as a backward compatibility check for code improvements.\n    \"\"\"\n\n    route_test_dir = os.path.abspath(os.path.dirname(os.path.realpath(__file__)))\n\n    def test_static_aoa(self):\n        u_inf = 50\n        alpha = 7\n        case_name = 'pazy_uinf{:04g}_alpha{:04g}'.format(u_inf * 10, alpha * 10)\n\n        M = 16\n        N = 64\n        Msf = 1\n\n        cases_folder = self.route_test_dir + '/pazy/cases/'\n        output_folder = self.route_test_dir + '/pazy/cases/'\n        # run case\n        gp.generate_pazy(u_inf, case_name, output_folder, cases_folder,\n                         alpha=alpha,\n                         M=M,\n                         N=N,\n                         Msf=Msf)\n\n        node_number = N / 2 # wing tip node\n\n        # Get results in A frame\n        tip_displacement = np.loadtxt(output_folder + '/' + case_name + '/WriteVariablesTime/struct_pos_node{:g}.dat'.format(node_number))\n\n        # current reference from Technion abstract\n        ref_displacement = 2.033291e-1  # m\n        np.testing.assert_almost_equal(tip_displacement[-1], ref_displacement,\n                                       decimal=3,\n                                       err_msg='Wing tip displacement not within 3 decimal points of reference.',\n                                       verbose=True)\n\n    def tearDown(self):\n        cases_folder = self.route_test_dir + '/pazy/cases/'\n\n        if os.path.isdir(cases_folder):\n            import shutil\n            shutil.rmtree(cases_folder)\n\n\nif __name__ == '__main__':\n    unittest.main()\n"
  },
  {
    "path": "tests/coupled/static/test_static.py",
    "content": "import numpy as np\nimport importlib\nimport unittest\nimport os\n\n\nclass TestCoupledStatic(unittest.TestCase):\n    \"\"\"\n    \"\"\"\n\n    @classmethod\n    def setUpClass(cls):\n        # run all the cases generators\n        case = 'smith_nog_2deg'\n        mod = importlib.import_module('tests.coupled.static.' + case + '.generate_' + case)\n        case = 'smith_g_2deg'\n        mod2 = importlib.import_module('tests.coupled.static.' + case + '.generate_' + case)\n        case = 'smith_g_4deg'\n        mod3 = importlib.import_module('tests.coupled.static.' + case + '.generate_' + case)\n        case = 'smith_nog_4deg'\n        mod4 = importlib.import_module('tests.coupled.static.' + case + '.generate_' + case)\n\n    @classmethod\n    def tearDownClass(cls):\n        pass\n\n    def test_smith2deg_nog(self):\n        \"\"\"\n        Case and results from:\n        Smith, M.J., Patil, M.J. and Hodges, D.H.,\n        2001.\n        CFD-based analysis of nonlinear aeroelastic behavior of high-aspect\n        ratio wings.\n        AIAA Paper, 1582, p.2001.\n        :return:\n        \"\"\"\n        import sharpy.sharpy_main\n        solver_path = os.path.abspath(os.path.dirname(os.path.realpath(__file__)) +\n                                      '/smith_nog_2deg/smith_nog_2deg.sharpy')\n        sharpy.sharpy_main.main(['', solver_path])\n\n        # read output and compare\n        output_path = os.path.dirname(solver_path) + '/output/smith_nog_2deg/WriteVariablesTime/'\n        pos_data = np.genfromtxt(output_path + 'struct_pos_node20.dat')\n        self.assertAlmostEqual((pos_data[2] - 15.599)/15.599, 0.00, 2)\n        self.assertAlmostEqual((pos_data[3] - 3.32600)/3.32600, 0.00, 2)\n\n        # results:\n        # N = 10 elements\n        # M = 15 elements\n        # full wake:\n        # Nrollup = 100\n        # Mstar = 80\n        # pos last beam of the wing [  0.02515625  15.62906166   3.20177985]\n        # total forces:\n        # tstep | fx_st | fy_st | fz_st\n        #     0 | 1.464e+00 | -4.480e-03 | 2.389e+02\n        # 521 seconds\n\n\n    def test_smith2deg_g(self):\n        import sharpy.sharpy_main\n        solver_path = os.path.abspath(os.path.dirname(os.path.realpath(__file__)) +\n                                      '/smith_g_2deg/smith_g_2deg.sharpy')\n        sharpy.sharpy_main.main(['', solver_path])\n\n        # read output and compare\n        output_path = os.path.dirname(solver_path) + '/output/smith_g_2deg/WriteVariablesTime/'\n        pos_data = np.genfromtxt(output_path + 'struct_pos_node20.dat')\n\n        self.assertAlmostEqual((pos_data[2] - 15.98295)/15.98295, 0.00, 2)\n        self.assertAlmostEqual((pos_data[3] - 0.682268)/0.682268, 0.00, 2)\n\n    def test_smith4deg_g(self):\n        \"\"\"\n        Case from R. Simpson's PhD thesis.\n        His wing tip displacements: 15.627927627927626, 3.3021978021978025\n        I always get higher deflection when using my gravity implementation\n        instead of his. His results with gravity are not validated.***\n        :return:\n        \"\"\"\n        import sharpy.sharpy_main\n        solver_path = os.path.abspath(os.path.dirname(os.path.realpath(__file__)) +\n                                      '/smith_g_4deg/smith_g_4deg.sharpy')\n        sharpy.sharpy_main.main(['', solver_path])\n\n        # read output and compare\n        output_path = os.path.dirname(solver_path) + '/output/smith_g_4deg/WriteVariablesTime/'\n        pos_data = np.genfromtxt(output_path + 'struct_pos_node20.dat')\n        self.assertAlmostEqual((pos_data[2] - 15.55)/15.55, 0.00, 2)\n        self.assertAlmostEqual((pos_data[3] - 3.671)/3.671, 0.00, 2)\n\n        # results:\n        # N = 10 elements\n        # M = 15 elements\n        # full wake:\n        # Nrollup = 100\n        # Mstar = 80\n        # pos last node of the wing\n        # 0.05668 15.5422 3.53971\n        # total forces:\n        # tstep | fx_st | fy_st | fz_st\n        #   0   | 3.229 | -1.059e-3| 3.766e2\n        # 7500 seconds\n\n    def test_smith4deg_nog(self):\n        \"\"\"\n        Hodges result for Euler+Nonlinear is\n        14.668547249647393, 5.451612903225806\n        :return:\n        \"\"\"\n        import sharpy.sharpy_main\n        solver_path = os.path.abspath(os.path.dirname(os.path.realpath(__file__)) +\n                                      '/smith_nog_4deg/smith_nog_4deg.sharpy')\n        sharpy.sharpy_main.main(['', solver_path])\n\n        # read output and compare\n        output_path = os.path.dirname(solver_path) + '/output/smith_nog_4deg/WriteVariablesTime/'\n        pos_data = np.genfromtxt(output_path + 'struct_pos_node20.dat')\n        self.assertAlmostEqual((pos_data[2] - 14.87)/14.87, 0.00, 2)\n        self.assertAlmostEqual((pos_data[3] - 5.5078)/5.5078, 0.00, 2)\n\n        # results:\n        # N = 10 elements\n        # M = 15 elements\n        # full wake:\n        # Nrollup = 100\n        # Mstar = 80\n        # pos last beam of the wing\n        # 5.59418e-2 1.49094e1 5.41518\n        # total forces:\n        # tstep | fx_st | fy_st | fz_st\n        # 0     | 3.045 | -1.089e-4 | 3.678e2\n        # 7380 seconds\n\n        # will use this one for validation.\n        # same discretisation, with horseshoe:\n        # [  0.05849521  14.80636555   5.65457501]\n        # forces:\n        # tstep |   fx_st    |   fy_st    |   fz_st\n        #     0 |  1.996e+00 | -2.116e-06 |  3.888e+02\n        # 142 seconds\n"
  },
  {
    "path": "tests/docs/__init__.py",
    "content": ""
  },
  {
    "path": "tests/docs/test_docs.py",
    "content": "import unittest\nimport os\n\n# Skipped to avoid dependency of minimal environment with sphinx\n# we agreed that it is best to have the core of SHARPy only in the tests\n# ADC 14 Nov 2019\n@unittest.skip\nclass DocTest(unittest.TestCase):\n    \"\"\"\n\n    \"\"\"\n    route = os.path.abspath(os.path.dirname(os.path.realpath(__file__))) + '/'\n    source_dir = route + u'../../docs/source'\n    config_dir = route + u'../../docs/source'\n    output_dir = route + u'../../docs/build'\n    doctree_dir = route + u'../../docs/build/doctrees'\n    all_files = 1\n\n    def test_html_documentation(self):\n        from sphinx.application import Sphinx\n        app = Sphinx(self.source_dir,\n                     self.config_dir,\n                     self.output_dir,\n                     self.doctree_dir,\n                     buildername='html',\n                     warningiserror=False,\n                     )\n        app.build(force_all=self.all_files)\n        # TODO: additional checks here if needed\n\n    def test_text_documentation(self):\n        from sphinx.application import Sphinx\n        # The same, but with different buildername\n        app = Sphinx(self.source_dir,\n                     self.config_dir,\n                     self.output_dir,\n                     self.doctree_dir,\n                     buildername='text',\n                     warningiserror=False,\n                     )\n        app.build(force_all=self.all_files)\n        # TODO:  additional checks if needed\n\n    def tearDown(self):\n        # TODO: clean up the output directory\n        pass\n\n\n"
  },
  {
    "path": "tests/io/Example_simple_hale/Client_HALE.py",
    "content": "import socket\nimport select\nimport time\nimport logging\nimport struct\nimport sharpy.io.message_interface as message_interface\nimport numpy as np\n\"\"\"\nThis is not a test but is to be used as client when testing the development of the input\noutput capabilities of sharpy. It will just give back the initial control surface deflection.\n\nRun this script as client.\n\nRun ``python generate_hale_io.py`` as server from the folder tests/io/Example_simple_hale\n\"\"\"\n\n# sel = selectors.DefaultSelector()\n\nlogging.basicConfig(format='%(asctime)s - %(name)s - %(levelname)s - %(message)s',\n                    level=20)\nlogger = logging.getLogger(__name__)\n\nsharpy_incoming = ('127.0.0.1', 64011)  # control side socket\nsharpy_outgoing = ('127.0.0.1', 64010)  # output side socket\n\nown_control = ('127.0.0.1', 64000)\nown_receive = ('127.0.0.1', 64001)\n\nin_sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)\nin_sock.bind(own_control)\n\nout_sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)\nout_sock.bind(own_receive)\n\n# from https://stackoverflow.com/questions/2719017/how-to-set-timeout-on-pythons-socket-recv-method\n# ready_to_read = select.select([out_sock], [], [], 2)\nout_sock.settimeout(300)\n\n#initial values\ncs_deflection = [-2.08 * np.pi / 180, 0]\nthrust = 6.16\ndt = 0.025\nn_tstep = 0 #Counter for time\n\nx_pos = []\ny_pos = []\nz_pos = []\n\nx_vel = []\ny_vel = []\nz_vel = []\np = []\nq = []\nr = []\n\nroot_OOP_moment = []\nroot_OOP_strain = []\n\ntime_vec = []\n\nwhile True:\n    if n_tstep > 401:\n        break\n\n    # send control input to sharpy\n    ctrl_value = struct.pack('<5sif', b'RREF0', 0, cs_deflection[0])\n    ctrl_value += struct.pack('if', 1, cs_deflection[1])\n    ctrl_value += struct.pack('if', 2, thrust)\n    logger.info('Sending control input of size {} bytes'.format(len(ctrl_value)))\n    in_sock.sendto(ctrl_value, sharpy_incoming)\n    logger.info('Sent control input to {}'.format(sharpy_incoming))\n\n    # time.sleep(2)\n    # input('Continue loop')\n\n    # receive output data. set msg_len to whatever length SHARPy is sending\n    msg_len = 93\n    try:\n        msg, conn = out_sock.recvfrom(msg_len)\n    except socket.timeout:\n        logger.info('Socket time out')\n        break\n    logger.info('Received {} data from {}'.format(msg, conn))\n    logger.info('Received data is {} bytes long'.format(len(msg)))\n    # else:\n    #     break\n    # decoding\n    values = message_interface.decoder(msg)\n\n    # Add the received values to the variables\n    x_pos.append(-values[0][1])\n    y_pos.append(values[1][1])\n    z_pos.append(values[2][1])\n\n    x_vel.append(-values[3][1])\n    y_vel.append(values[4][1])\n    z_vel.append(values[5][1])\n    p.append(values[6][1] * 180 / np.pi)\n    q.append(values[7][1] * 180 / np.pi)\n    r.append(values[8][1] * 180 / np.pi)\n\n    root_OOP_moment.append(values[9][1])\n    root_OOP_strain.append(values[10][1])\n\n    time_vec.append(dt * n_tstep)\n\n    n_tstep += 1\n\n##\n\nout_sock.close()\nin_sock.close()\nlogger.info('Closed input and output sockets')"
  },
  {
    "path": "tests/io/Example_simple_hale/__init__.py",
    "content": ""
  },
  {
    "path": "tests/io/Example_simple_hale/generate_hale_io.py",
    "content": "#! /usr/bin/env python3\nimport h5py as h5\nimport numpy as np\nimport os\nimport sharpy.utils.algebra as algebra\nimport sharpy.sharpy_main\n\ncase_name = 'simple_HALE'\nroute = os.path.dirname(os.path.realpath(__file__)) + '/'\n\n# EXECUTION\nflow = ['BeamLoader',\n        'AerogridLoader',\n        # 'NonLinearStatic',\n        # 'StaticUvlm',\n        'StaticTrim',\n        # 'StaticCoupled',\n        'BeamLoads',\n        'AerogridPlot',\n        'BeamPlot',\n        'DynamicCoupled',\n        'SaveData'\n        # 'Modal',\n        # 'LinearAssember',\n        # 'AsymptoticStability',\n        ]\n\n# if free_flight is False, the motion of the centre of the wing is prescribed.\nfree_flight = True\nif not free_flight:\n    case_name += '_prescribed'\n    amplitude = 0 * np.pi / 180\n    period = 3\n    case_name += '_amp_' + str(amplitude).replace('.', '') + '_period_' + str(period)\n\n# FLIGHT CONDITIONS\n# the simulation is set such that the aircraft flies at a u_inf velocity while\n# the air is calm.\nu_inf = 10\nrho = 1.225\n\n# trim sigma = 1.5\nalpha = 4.31 * np.pi / 180\nbeta = 0\nroll = 0\ngravity = 'on'\ncs_deflection = -2.08 * np.pi / 180\nrudder_static_deflection = 0.0\nrudder_step = 0.0 * np.pi / 180\nthrust = 6.16\nsigma = 1.5\nlambda_dihedral = 20 * np.pi / 180\n\n# gust settings\ngust_intensity = 0.20\ngust_length = 1 * u_inf\ngust_offset = 0.5 * u_inf\n\n# numerics\nn_step = 5\nstructural_relaxation_factor = 0.6\nrelaxation_factor = 0.35\ntolerance = 1e-6\nfsi_tolerance = 1e-4\n\nnum_cores = 2\n\n# MODEL GEOMETRY\n# beam\nspan_main = 16.0\nlambda_main = 0.25\nea_main = 0.3\n\nea = 1e7\nga = 1e5\ngj = 1e4\neiy = 2e4\neiz = 4e6\nm_bar_main = 0.75\nj_bar_main = 0.075\n\nlength_fuselage = 10\noffset_fuselage = 0\nsigma_fuselage = 10\nm_bar_fuselage = 0.2\nj_bar_fuselage = 0.08\n\nspan_tail = 2.5\nea_tail = 0.5\nfin_height = 2.5\nea_fin = 0.5\nsigma_tail = 100\nm_bar_tail = 0.3\nj_bar_tail = 0.08\n\n# lumped masses\nn_lumped_mass = 1\nlumped_mass_nodes = np.zeros((n_lumped_mass,), dtype=int)\nlumped_mass = np.zeros((n_lumped_mass,))\nlumped_mass[0] = 50\nlumped_mass_inertia = np.zeros((n_lumped_mass, 3, 3))\nlumped_mass_position = np.zeros((n_lumped_mass, 3))\n\n# aero\nchord_main = 1.0\nchord_tail = 0.5\nchord_fin = 0.5\n\n# DISCRETISATION\n# spatial discretisation\n# chordiwse panels\nm = 4\n# spanwise elements\nn_elem_multiplier = 2\nn_elem_main = int(4 * n_elem_multiplier)\nn_elem_tail = int(2 * n_elem_multiplier)\nn_elem_fin = int(2 * n_elem_multiplier)\nn_elem_fuselage = int(2 * n_elem_multiplier)\nn_surfaces = 5\n\n# temporal discretisation\nphysical_time = 5\ntstep_factor = 1.\ndt = 1.0 / m / u_inf * tstep_factor\nn_tstep = round(physical_time / dt)\n\n# END OF INPUT-----------------------------------------------------------------\n\n# beam processing\nn_node_elem = 3\nspan_main1 = (1.0 - lambda_main) * span_main\nspan_main2 = lambda_main * span_main\n\nn_elem_main1 = round(n_elem_main * (1 - lambda_main))\nn_elem_main2 = n_elem_main - n_elem_main1\n\n# total number of elements\nn_elem = 0\nn_elem += n_elem_main1 + n_elem_main1\nn_elem += n_elem_main2 + n_elem_main2\nn_elem += n_elem_fuselage\nn_elem += n_elem_fin\nn_elem += n_elem_tail + n_elem_tail\n\n# number of nodes per part\nn_node_main1 = n_elem_main1 * (n_node_elem - 1) + 1\nn_node_main2 = n_elem_main2 * (n_node_elem - 1) + 1\nn_node_main = n_node_main1 + n_node_main2 - 1\nn_node_fuselage = n_elem_fuselage * (n_node_elem - 1) + 1\nn_node_fin = n_elem_fin * (n_node_elem - 1) + 1\nn_node_tail = n_elem_tail * (n_node_elem - 1) + 1\n\n# total number of nodes\nn_node = 0\nn_node += n_node_main1 + n_node_main1 - 1\nn_node += n_node_main2 - 1 + n_node_main2 - 1\nn_node += n_node_fuselage - 1\nn_node += n_node_fin - 1\nn_node += n_node_tail - 1\nn_node += n_node_tail - 1\n\n# stiffness and mass matrices\nn_stiffness = 3\nbase_stiffness_main = sigma * np.diag([ea, ga, ga, gj, eiy, eiz])\nbase_stiffness_fuselage = base_stiffness_main.copy() * sigma_fuselage\nbase_stiffness_fuselage[4, 4] = base_stiffness_fuselage[5, 5]\nbase_stiffness_tail = base_stiffness_main.copy() * sigma_tail\nbase_stiffness_tail[4, 4] = base_stiffness_tail[5, 5]\n\nn_mass = 3\nbase_mass_main = np.diag([m_bar_main, m_bar_main, m_bar_main, j_bar_main, 0.5 * j_bar_main, 0.5 * j_bar_main])\nbase_mass_fuselage = np.diag([m_bar_fuselage,\n                              m_bar_fuselage,\n                              m_bar_fuselage,\n                              j_bar_fuselage,\n                              j_bar_fuselage * 0.5,\n                              j_bar_fuselage * 0.5])\nbase_mass_tail = np.diag([m_bar_tail,\n                          m_bar_tail,\n                          m_bar_tail,\n                          j_bar_tail,\n                          j_bar_tail * 0.5,\n                          j_bar_tail * 0.5])\n\n# PLACEHOLDERS\n# beam\nx = np.zeros((n_node,))\ny = np.zeros((n_node,))\nz = np.zeros((n_node,))\nbeam_number = np.zeros((n_elem,), dtype=int)\nframe_of_reference_delta = np.zeros((n_elem, n_node_elem, 3))\nstructural_twist = np.zeros((n_elem, 3))\nconn = np.zeros((n_elem, n_node_elem), dtype=int)\nstiffness = np.zeros((n_stiffness, 6, 6))\nelem_stiffness = np.zeros((n_elem,), dtype=int)\nmass = np.zeros((n_mass, 6, 6))\nelem_mass = np.zeros((n_elem,), dtype=int)\nboundary_conditions = np.zeros((n_node,), dtype=int)\napp_forces = np.zeros((n_node, 6))\n\n# aero\nairfoil_distribution = np.zeros((n_elem, n_node_elem), dtype=int)\nsurface_distribution = np.zeros((n_elem,), dtype=int) - 1\nsurface_m = np.zeros((n_surfaces,), dtype=int)\nm_distribution = 'uniform'\naero_node = np.zeros((n_node,), dtype=bool)\ntwist = np.zeros((n_elem, n_node_elem))\nsweep = np.zeros((n_elem, n_node_elem))\nchord = np.zeros((n_elem, n_node_elem,))\nelastic_axis = np.zeros((n_elem, n_node_elem,))\n\n\n# FUNCTIONS-------------------------------------------------------------\ndef clean_test_files():\n    fem_file_name = route + '/' + case_name + '.fem.h5'\n    if os.path.isfile(fem_file_name):\n        os.remove(fem_file_name)\n\n    dyn_file_name = route + '/' + case_name + '.dyn.h5'\n    if os.path.isfile(dyn_file_name):\n        os.remove(dyn_file_name)\n\n    aero_file_name = route + '/' + case_name + '.aero.h5'\n    if os.path.isfile(aero_file_name):\n        os.remove(aero_file_name)\n\n    solver_file_name = route + '/' + case_name + '.sharpy'\n    if os.path.isfile(solver_file_name):\n        os.remove(solver_file_name)\n\n    flightcon_file_name = route + '/' + case_name + '.flightcon.txt'\n    if os.path.isfile(flightcon_file_name):\n        os.remove(flightcon_file_name)\n\n\ndef generate_dyn_file():\n    global dt\n    global n_tstep\n    global route\n    global case_name\n    global num_elem\n    global num_node_elem\n    global num_node\n    global amplitude\n    global period\n    global free_flight\n\n    dynamic_forces_time = None\n    with_dynamic_forces = False\n    with_forced_vel = False\n    if not free_flight:\n        with_forced_vel = True\n\n    if with_dynamic_forces:\n        f1 = 100\n        dynamic_forces = np.zeros((num_node, 6))\n        app_node = [int(num_node_main - 1), int(num_node_main)]\n        dynamic_forces[app_node, 2] = f1\n        force_time = np.zeros((n_tstep,))\n        limit = round(0.05 / dt)\n        force_time[50:61] = 1\n\n        dynamic_forces_time = np.zeros((n_tstep, num_node, 6))\n        for it in range(n_tstep):\n            dynamic_forces_time[it, :, :] = force_time[it] * dynamic_forces\n\n    forced_for_vel = None\n    if with_forced_vel:\n        forced_for_vel = np.zeros((n_tstep, 6))\n        forced_for_acc = np.zeros((n_tstep, 6))\n        for it in range(n_tstep):\n            # if dt*it < period:\n            # forced_for_vel[it, 2] = 2*np.pi/period*amplitude*np.sin(2*np.pi*dt*it/period)\n            # forced_for_acc[it, 2] = (2*np.pi/period)**2*amplitude*np.cos(2*np.pi*dt*it/period)\n\n            forced_for_vel[it, 3] = 2 * np.pi / period * amplitude * np.sin(2 * np.pi * dt * it / period)\n            forced_for_acc[it, 3] = (2 * np.pi / period) ** 2 * amplitude * np.cos(2 * np.pi * dt * it / period)\n\n    if with_dynamic_forces or with_forced_vel:\n        with h5.File(route + '/' + case_name + '.dyn.h5', 'a') as h5file:\n            if with_dynamic_forces:\n                h5file.create_dataset(\n                    'dynamic_forces', data=dynamic_forces_time)\n            if with_forced_vel:\n                h5file.create_dataset(\n                    'for_vel', data=forced_for_vel)\n                h5file.create_dataset(\n                    'for_acc', data=forced_for_acc)\n            h5file.create_dataset(\n                'num_steps', data=n_tstep)\n\n\ndef generate_fem():\n    stiffness[0, ...] = base_stiffness_main\n    stiffness[1, ...] = base_stiffness_fuselage\n    stiffness[2, ...] = base_stiffness_tail\n\n    mass[0, ...] = base_mass_main\n    mass[1, ...] = base_mass_fuselage\n    mass[2, ...] = base_mass_tail\n\n    we = 0\n    wn = 0\n    # inner right wing\n    beam_number[we:we + n_elem_main1] = 0\n    y[wn:wn + n_node_main1] = np.linspace(0.0, span_main1, n_node_main1)\n\n    for ielem in range(n_elem_main1):\n        conn[we + ielem, :] = ((np.ones((3,)) * (we + ielem) * (n_node_elem - 1)) +\n                               [0, 2, 1])\n        for inode in range(n_node_elem):\n            frame_of_reference_delta[we + ielem, inode, :] = [-1.0, 0.0, 0.0]\n\n    elem_stiffness[we:we + n_elem_main1] = 0\n    elem_mass[we:we + n_elem_main1] = 0\n    boundary_conditions[0] = 1\n    # remember this is in B FoR\n    app_forces[0] = [0, thrust, 0, 0, 0, 0]\n    we += n_elem_main1\n    wn += n_node_main1\n\n    # outer right wing\n    beam_number[we:we + n_elem_main1] = 0\n    y[wn:wn + n_node_main2 - 1] = y[wn - 1] + np.linspace(0.0, np.cos(lambda_dihedral) * span_main2, n_node_main2)[1:]\n    z[wn:wn + n_node_main2 - 1] = z[wn - 1] + np.linspace(0.0, np.sin(lambda_dihedral) * span_main2, n_node_main2)[1:]\n    for ielem in range(n_elem_main2):\n        conn[we + ielem, :] = ((np.ones((3,)) * (we + ielem) * (n_node_elem - 1)) +\n                               [0, 2, 1])\n        for inode in range(n_node_elem):\n            frame_of_reference_delta[we + ielem, inode, :] = [-1.0, 0.0, 0.0]\n    elem_stiffness[we:we + n_elem_main2] = 0\n    elem_mass[we:we + n_elem_main2] = 0\n    boundary_conditions[wn + n_node_main2 - 2] = -1\n    we += n_elem_main2\n    wn += n_node_main2 - 1\n\n    # inner left wing\n    beam_number[we:we + n_elem_main1 - 1] = 1\n    y[wn:wn + n_node_main1 - 1] = np.linspace(0.0, -span_main1, n_node_main1)[1:]\n    for ielem in range(n_elem_main1):\n        conn[we + ielem, :] = ((np.ones((3,)) * (we + ielem) * (n_node_elem - 1)) +\n                               [0, 2, 1])\n        for inode in range(n_node_elem):\n            frame_of_reference_delta[we + ielem, inode, :] = [1.0, 0.0, 0.0]\n    conn[we, 0] = 0\n    elem_stiffness[we:we + n_elem_main1] = 0\n    elem_mass[we:we + n_elem_main1] = 0\n    we += n_elem_main1\n    wn += n_node_main1 - 1\n\n    # outer left wing\n    beam_number[we:we + n_elem_main2] = 1\n    y[wn:wn + n_node_main2 - 1] = y[wn - 1] + np.linspace(0.0, -np.cos(lambda_dihedral) * span_main2, n_node_main2)[1:]\n    z[wn:wn + n_node_main2 - 1] = z[wn - 1] + np.linspace(0.0, np.sin(lambda_dihedral) * span_main2, n_node_main2)[1:]\n    for ielem in range(n_elem_main2):\n        conn[we + ielem, :] = ((np.ones((3,)) * (we + ielem) * (n_node_elem - 1)) +\n                               [0, 2, 1])\n        for inode in range(n_node_elem):\n            frame_of_reference_delta[we + ielem, inode, :] = [1.0, 0.0, 0.0]\n    elem_stiffness[we:we + n_elem_main2] = 0\n    elem_mass[we:we + n_elem_main2] = 0\n    boundary_conditions[wn + n_node_main2 - 2] = -1\n    we += n_elem_main2\n    wn += n_node_main2 - 1\n\n    # fuselage\n    beam_number[we:we + n_elem_fuselage] = 2\n    x[wn:wn + n_node_fuselage - 1] = np.linspace(0.0, length_fuselage, n_node_fuselage)[1:]\n    z[wn:wn + n_node_fuselage - 1] = np.linspace(0.0, offset_fuselage, n_node_fuselage)[1:]\n    for ielem in range(n_elem_fuselage):\n        conn[we + ielem, :] = ((np.ones((3,)) * (we + ielem) * (n_node_elem - 1)) +\n                               [0, 2, 1])\n        for inode in range(n_node_elem):\n            frame_of_reference_delta[we + ielem, inode, :] = [0.0, 1.0, 0.0]\n    conn[we, 0] = 0\n    elem_stiffness[we:we + n_elem_fuselage] = 1\n    elem_mass[we:we + n_elem_fuselage] = 1\n    we += n_elem_fuselage\n    wn += n_node_fuselage - 1\n    global end_of_fuselage_node\n    end_of_fuselage_node = wn - 1\n\n    # fin\n    beam_number[we:we + n_elem_fin] = 3\n    x[wn:wn + n_node_fin - 1] = x[end_of_fuselage_node]\n    z[wn:wn + n_node_fin - 1] = z[end_of_fuselage_node] + np.linspace(0.0, fin_height, n_node_fin)[1:]\n    for ielem in range(n_elem_fin):\n        conn[we + ielem, :] = ((np.ones((3,)) * (we + ielem) * (n_node_elem - 1)) +\n                               [0, 2, 1])\n        for inode in range(n_node_elem):\n            frame_of_reference_delta[we + ielem, inode, :] = [-1.0, 0.0, 0.0]\n    conn[we, 0] = end_of_fuselage_node\n    elem_stiffness[we:we + n_elem_fin] = 2\n    elem_mass[we:we + n_elem_fin] = 2\n    we += n_elem_fin\n    wn += n_node_fin - 1\n    end_of_fin_node = wn - 1\n\n    # right tail\n    beam_number[we:we + n_elem_tail] = 4\n    x[wn:wn + n_node_tail - 1] = x[end_of_fin_node]\n    y[wn:wn + n_node_tail - 1] = np.linspace(0.0, span_tail, n_node_tail)[1:]\n    z[wn:wn + n_node_tail - 1] = z[end_of_fin_node]\n    for ielem in range(n_elem_tail):\n        conn[we + ielem, :] = ((np.ones((3,)) * (we + ielem) * (n_node_elem - 1)) +\n                               [0, 2, 1])\n        for inode in range(n_node_elem):\n            frame_of_reference_delta[we + ielem, inode, :] = [-1.0, 0.0, 0.0]\n    conn[we, 0] = end_of_fin_node\n    elem_stiffness[we:we + n_elem_tail] = 2\n    elem_mass[we:we + n_elem_tail] = 2\n    boundary_conditions[wn + n_node_tail - 2] = -1\n    we += n_elem_tail\n    wn += n_node_tail - 1\n\n    # left tail\n    beam_number[we:we + n_elem_tail] = 5\n    x[wn:wn + n_node_tail - 1] = x[end_of_fin_node]\n    y[wn:wn + n_node_tail - 1] = np.linspace(0.0, -span_tail, n_node_tail)[1:]\n    z[wn:wn + n_node_tail - 1] = z[end_of_fin_node]\n    for ielem in range(n_elem_tail):\n        conn[we + ielem, :] = ((np.ones((3,)) * (we + ielem) * (n_node_elem - 1)) +\n                               [0, 2, 1])\n        for inode in range(n_node_elem):\n            frame_of_reference_delta[we + ielem, inode, :] = [1.0, 0.0, 0.0]\n    conn[we, 0] = end_of_fin_node\n    elem_stiffness[we:we + n_elem_tail] = 2\n    elem_mass[we:we + n_elem_tail] = 2\n    boundary_conditions[wn + n_node_tail - 2] = -1\n    we += n_elem_tail\n    wn += n_node_tail - 1\n\n    with h5.File(route + '/' + case_name + '.fem.h5', 'a') as h5file:\n        coordinates = h5file.create_dataset('coordinates', data=np.column_stack((x, y, z)))\n        conectivities = h5file.create_dataset('connectivities', data=conn)\n        num_nodes_elem_handle = h5file.create_dataset(\n            'num_node_elem', data=n_node_elem)\n        num_nodes_handle = h5file.create_dataset(\n            'num_node', data=n_node)\n        num_elem_handle = h5file.create_dataset(\n            'num_elem', data=n_elem)\n        stiffness_db_handle = h5file.create_dataset(\n            'stiffness_db', data=stiffness)\n        stiffness_handle = h5file.create_dataset(\n            'elem_stiffness', data=elem_stiffness)\n        mass_db_handle = h5file.create_dataset(\n            'mass_db', data=mass)\n        mass_handle = h5file.create_dataset(\n            'elem_mass', data=elem_mass)\n        frame_of_reference_delta_handle = h5file.create_dataset(\n            'frame_of_reference_delta', data=frame_of_reference_delta)\n        structural_twist_handle = h5file.create_dataset(\n            'structural_twist', data=structural_twist)\n        bocos_handle = h5file.create_dataset(\n            'boundary_conditions', data=boundary_conditions)\n        beam_handle = h5file.create_dataset(\n            'beam_number', data=beam_number)\n        app_forces_handle = h5file.create_dataset(\n            'app_forces', data=app_forces)\n        lumped_mass_nodes_handle = h5file.create_dataset(\n            'lumped_mass_nodes', data=lumped_mass_nodes)\n        lumped_mass_handle = h5file.create_dataset(\n            'lumped_mass', data=lumped_mass)\n        lumped_mass_inertia_handle = h5file.create_dataset(\n            'lumped_mass_inertia', data=lumped_mass_inertia)\n        lumped_mass_position_handle = h5file.create_dataset(\n            'lumped_mass_position', data=lumped_mass_position)\n\n\ndef generate_aero_file():\n    global x, y, z\n    # control surfaces\n    n_control_surfaces = 2\n    control_surface = np.zeros((n_elem, n_node_elem), dtype=int) - 1\n    control_surface_type = np.zeros((n_control_surfaces,), dtype=int)\n    control_surface_deflection = np.zeros((n_control_surfaces,))\n    control_surface_chord = np.zeros((n_control_surfaces,), dtype=int)\n    control_surface_hinge_coord = np.zeros((n_control_surfaces,), dtype=float)\n\n    # control surface type 0 = static\n    # control surface type 1 = dynamic\n    control_surface_type[0] = 2\n    control_surface_deflection[0] = cs_deflection\n    control_surface_chord[0] = m\n    control_surface_hinge_coord[0] = -0.25  # nondimensional wrt elastic axis (+ towards the trailing edge)\n\n    control_surface_type[1] = 2\n    control_surface_deflection[1] = rudder_static_deflection\n    control_surface_chord[1] = 1\n    control_surface_hinge_coord[1] = -0.  # nondimensional wrt elastic axis (+ towards the trailing edge)\n\n    we = 0\n    wn = 0\n    # right wing (surface 0, beam 0)\n    i_surf = 0\n    airfoil_distribution[we:we + n_elem_main, :] = 0\n    surface_distribution[we:we + n_elem_main] = i_surf\n    surface_m[i_surf] = m\n    aero_node[wn:wn + n_node_main] = True\n    temp_chord = np.linspace(chord_main, chord_main, n_node_main)\n    temp_sweep = np.linspace(0.0, 0 * np.pi / 180, n_node_main)\n    node_counter = 0\n    for i_elem in range(we, we + n_elem_main):\n        for i_local_node in range(n_node_elem):\n            if not i_local_node == 0:\n                node_counter += 1\n            chord[i_elem, i_local_node] = temp_chord[node_counter]\n            elastic_axis[i_elem, i_local_node] = ea_main\n            sweep[i_elem, i_local_node] = temp_sweep[node_counter]\n\n    we += n_elem_main\n    wn += n_node_main\n\n    # left wing (surface 1, beam 1)\n    i_surf = 1\n    airfoil_distribution[we:we + n_elem_main, :] = 0\n    # airfoil_distribution[wn:wn + n_node_main - 1] = 0\n    surface_distribution[we:we + n_elem_main] = i_surf\n    surface_m[i_surf] = m\n    aero_node[wn:wn + n_node_main - 1] = True\n    # chord[wn:wn + num_node_main - 1] = np.linspace(main_chord, main_tip_chord, num_node_main)[1:]\n    # chord[wn:wn + num_node_main - 1] = main_chord\n    # elastic_axis[wn:wn + num_node_main - 1] = main_ea\n    temp_chord = np.linspace(chord_main, chord_main, n_node_main)\n    node_counter = 0\n    for i_elem in range(we, we + n_elem_main):\n        for i_local_node in range(n_node_elem):\n            if not i_local_node == 0:\n                node_counter += 1\n            chord[i_elem, i_local_node] = temp_chord[node_counter]\n            elastic_axis[i_elem, i_local_node] = ea_main\n            sweep[i_elem, i_local_node] = -temp_sweep[node_counter]\n\n    we += n_elem_main\n    wn += n_node_main - 1\n\n    we += n_elem_fuselage\n    wn += n_node_fuselage - 1 - 1\n    #\n    # # fin (surface 2, beam 3)\n    i_surf = 2\n    airfoil_distribution[we:we + n_elem_fin, :] = 1\n    # airfoil_distribution[wn:wn + n_node_fin] = 0\n    surface_distribution[we:we + n_elem_fin] = i_surf\n    surface_m[i_surf] = m\n    aero_node[wn:wn + n_node_fin] = True\n    # chord[wn:wn + num_node_fin] = fin_chord\n    for i_elem in range(we, we + n_elem_fin):\n        for i_local_node in range(n_node_elem):\n            chord[i_elem, i_local_node] = chord_fin\n            elastic_axis[i_elem, i_local_node] = ea_fin\n            control_surface[i_elem, i_local_node] = 1\n    # twist[end_of_fuselage_node] = 0\n    # twist[wn:] = 0\n    # elastic_axis[wn:wn + num_node_main] = fin_ea\n    we += n_elem_fin\n    wn += n_node_fin - 1\n    #\n    # # # right tail (surface 3, beam 4)\n    i_surf = 3\n    airfoil_distribution[we:we + n_elem_tail, :] = 2\n    # airfoil_distribution[wn:wn + n_node_tail] = 0\n    surface_distribution[we:we + n_elem_tail] = i_surf\n    surface_m[i_surf] = m\n    # XXX not very elegant\n    aero_node[wn:] = True\n    # chord[wn:wn + num_node_tail] = tail_chord\n    # elastic_axis[wn:wn + num_node_main] = tail_ea\n    for i_elem in range(we, we + n_elem_tail):\n        for i_local_node in range(n_node_elem):\n            twist[i_elem, i_local_node] = -0\n    for i_elem in range(we, we + n_elem_tail):\n        for i_local_node in range(n_node_elem):\n            chord[i_elem, i_local_node] = chord_tail\n            elastic_axis[i_elem, i_local_node] = ea_tail\n            control_surface[i_elem, i_local_node] = 0\n\n    we += n_elem_tail\n    wn += n_node_tail\n    #\n    # # left tail (surface 4, beam 5)\n    i_surf = 4\n    airfoil_distribution[we:we + n_elem_tail, :] = 2\n    # airfoil_distribution[wn:wn + n_node_tail - 1] = 0\n    surface_distribution[we:we + n_elem_tail] = i_surf\n    surface_m[i_surf] = m\n    aero_node[wn:wn + n_node_tail - 1] = True\n    # chord[wn:wn + num_node_tail] = tail_chord\n    # elastic_axis[wn:wn + num_node_main] = tail_ea\n    # twist[we:we + num_elem_tail] = -tail_twist\n    for i_elem in range(we, we + n_elem_tail):\n        for i_local_node in range(n_node_elem):\n            twist[i_elem, i_local_node] = -0\n    for i_elem in range(we, we + n_elem_tail):\n        for i_local_node in range(n_node_elem):\n            chord[i_elem, i_local_node] = chord_tail\n            elastic_axis[i_elem, i_local_node] = ea_tail\n            control_surface[i_elem, i_local_node] = 0\n    we += n_elem_tail\n    wn += n_node_tail\n\n    with h5.File(route + '/' + case_name + '.aero.h5', 'a') as h5file:\n        airfoils_group = h5file.create_group('airfoils')\n        # add one airfoil\n        naca_airfoil_main = airfoils_group.create_dataset('0', data=np.column_stack(\n            generate_naca_camber(P=0, M=0)))\n        naca_airfoil_tail = airfoils_group.create_dataset('1', data=np.column_stack(\n            generate_naca_camber(P=0, M=0)))\n        naca_airfoil_fin = airfoils_group.create_dataset('2', data=np.column_stack(\n            generate_naca_camber(P=0, M=0)))\n\n        # chord\n        chord_input = h5file.create_dataset('chord', data=chord)\n        dim_attr = chord_input.attrs['units'] = 'm'\n\n        # twist\n        twist_input = h5file.create_dataset('twist', data=twist)\n        dim_attr = twist_input.attrs['units'] = 'rad'\n\n        # sweep\n        sweep_input = h5file.create_dataset('sweep', data=sweep)\n        dim_attr = sweep_input.attrs['units'] = 'rad'\n\n        # airfoil distribution\n        airfoil_distribution_input = h5file.create_dataset('airfoil_distribution', data=airfoil_distribution)\n\n        surface_distribution_input = h5file.create_dataset('surface_distribution', data=surface_distribution)\n        surface_m_input = h5file.create_dataset('surface_m', data=surface_m)\n        m_distribution_input = h5file.create_dataset('m_distribution', data=m_distribution.encode('ascii', 'ignore'))\n\n        aero_node_input = h5file.create_dataset('aero_node', data=aero_node)\n        elastic_axis_input = h5file.create_dataset('elastic_axis', data=elastic_axis)\n\n        control_surface_input = h5file.create_dataset('control_surface', data=control_surface)\n        control_surface_deflection_input = h5file.create_dataset('control_surface_deflection',\n                                                                 data=control_surface_deflection)\n        control_surface_chord_input = h5file.create_dataset('control_surface_chord', data=control_surface_chord)\n        control_surface_hinge_coord_input = h5file.create_dataset('control_surface_hinge_coord',\n                                                                  data=control_surface_hinge_coord)\n        control_surface_types_input = h5file.create_dataset('control_surface_type', data=control_surface_type)\n\n\ndef generate_naca_camber(M=0, P=0):\n    mm = M * 1e-2\n    p = P * 1e-1\n\n    def naca(x, mm, p):\n        if x < 1e-6:\n            return 0.0\n        elif x < p:\n            return mm / (p * p) * (2 * p * x - x * x)\n        elif x > p and x < 1 + 1e-6:\n            return mm / ((1 - p) * (1 - p)) * (1 - 2 * p + 2 * p * x - x * x)\n\n    x_vec = np.linspace(0, 1, 1000)\n    y_vec = np.array([naca(x, mm, p) for x in x_vec])\n    return x_vec, y_vec\n\n\ndef generate_solver_file():\n    file_name = route + '/' + case_name + '.sharpy'\n    settings = dict()\n    settings['SHARPy'] = {'case': case_name,\n                          'route': route,\n                          'flow': flow,\n                          'write_screen': 'on',\n                          'write_log': 'on',\n                          'log_folder': route + '/output/',\n                          'log_file': case_name + '.log'}\n\n    settings['BeamLoader'] = {'unsteady': 'on',\n                              'orientation': algebra.euler2quat(np.array([roll,\n                                                                          alpha,\n                                                                          beta]))}\n    settings['AerogridLoader'] = {'unsteady': 'on',\n                                  'aligned_grid': 'on',\n                                  'mstar': int(20 / tstep_factor),\n                                  'freestream_dir': ['1', '0', '0'],\n                                  'wake_shape_generator': 'StraightWake',\n                                  'wake_shape_generator_input': {'u_inf': u_inf,\n                                                                 'u_inf_direction': ['1', '0', '0'],\n                                                                 'dt': dt}}\n\n    settings['NonLinearStatic'] = {'print_info': 'off',\n                                   'max_iterations': 150,\n                                   'num_load_steps': 1,\n                                   'delta_curved': 1e-1,\n                                   'min_delta': tolerance,\n                                   'gravity_on': gravity,\n                                   'gravity': 9.81}\n\n    settings['StaticUvlm'] = {'print_info': 'on',\n                              'horseshoe': 'off',\n                              'num_cores': num_cores,\n                              'n_rollup': 0,\n                              'rollup_dt': dt,\n                              'rollup_aic_refresh': 1,\n                              'rollup_tolerance': 1e-4,\n                              'velocity_field_generator': 'SteadyVelocityField',\n                              'velocity_field_input': {'u_inf': u_inf,\n                                                       'u_inf_direction': [1., 0, 0]},\n                              'rho': rho}\n\n    settings['StaticCoupled'] = {'print_info': 'off',\n                                 'structural_solver': 'NonLinearStatic',\n                                 'structural_solver_settings': settings['NonLinearStatic'],\n                                 'aero_solver': 'StaticUvlm',\n                                 'aero_solver_settings': settings['StaticUvlm'],\n                                 'max_iter': 100,\n                                 'n_load_steps': n_step,\n                                 'tolerance': fsi_tolerance,\n                                 'relaxation_factor': structural_relaxation_factor}\n\n    settings['StaticTrim'] = {'solver': 'StaticCoupled',\n                              'solver_settings': settings['StaticCoupled'],\n                              'initial_alpha': alpha,\n                              'initial_deflection': cs_deflection,\n                              'initial_thrust': thrust}\n\n    settings['NonLinearDynamicCoupledStep'] = {'print_info': 'off',\n                                               'max_iterations': 950,\n                                               'delta_curved': 1e-1,\n                                               'min_delta': tolerance,\n                                               'newmark_damp': 5e-3,\n                                               'gravity_on': gravity,\n                                               'gravity': 9.81,\n                                               'num_steps': n_tstep,\n                                               'dt': dt,\n                                               'initial_velocity': u_inf}\n\n    settings['NonLinearDynamicPrescribedStep'] = {'print_info': 'off',\n                                                  'max_iterations': 950,\n                                                  'delta_curved': 1e-1,\n                                                  'min_delta': tolerance,\n                                                  'newmark_damp': 5e-3,\n                                                  'gravity_on': gravity,\n                                                  'gravity': 9.81,\n                                                  'num_steps': n_tstep,\n                                                  'dt': dt,\n                                                  'initial_velocity': u_inf * int(free_flight)}\n    settings['SaveData'] = { 'save_aero': 'on',\n                             'save_struct': 'on',\n                             'save_linear': 'off',\n                             'save_linear_uvlm': 'off'}\n\n    relative_motion = 'off'\n    if not free_flight:\n        relative_motion = 'on'\n    settings['StepUvlm'] = {'print_info': 'off',\n                            'num_cores': num_cores,\n                            'convection_scheme': 2,\n                            'gamma_dot_filtering': 6,\n                            'velocity_field_generator': 'GustVelocityField',\n                            'velocity_field_input': {'u_inf': int(not free_flight) * u_inf,\n                                                     'u_inf_direction': [1., 0, 0],\n                                                     'gust_shape': '1-cos',\n                                                     'gust_parameters': {'gust_length': gust_length,\n                                                                         'gust_intensity': gust_intensity * u_inf},\n                                                     'offset': gust_offset,\n                                                     'relative_motion': relative_motion},\n                            'rho': rho,\n                            'n_time_steps': n_tstep,\n                            'dt': dt}\n\n    if free_flight:\n        solver = 'NonLinearDynamicCoupledStep'\n    else:\n        solver = 'NonLinearDynamicPrescribedStep'\n    settings['DynamicCoupled'] = {'structural_solver': solver,\n                                  'structural_solver_settings': settings[solver],\n                                  'aero_solver': 'StepUvlm',\n                                  'aero_solver_settings': settings['StepUvlm'],\n                                  'fsi_substeps': 200,\n                                  'fsi_tolerance': fsi_tolerance,\n                                  'relaxation_factor': relaxation_factor,\n                                  'minimum_steps': 1,\n                                  'relaxation_steps': 150,\n                                  'final_relaxation_factor': 0.5,\n                                  'n_time_steps': n_tstep,\n                                  'dt': dt,\n                                  'include_unsteady_force_contribution': 'on',\n                                  'network_settings': {\n                                      'variables_filename': './variables_hale.yaml',\n                                      'send_output_to_all_clients': 'on',\n                                      'byte_ordering': 'little',\n                                      'received_data_filename': './output/' + case_name + '/input.dat',\n                                      'log_name': './output/' + case_name + '/sharpy_network.log',\n                                      'file_log_level': 'debug',\n                                      'console_log_level': 'debug',\n                                      'input_network_settings': {'address': '127.0.0.1',\n                                                                 'port': 64011},\n                                      'output_network_settings': {'send_on_demand': 'off',\n                                                                  'destination_address': ['127.0.0.1'],\n                                                                  'address': '127.0.0.1',\n                                                                  'port': 64010,\n                                                                  'destination_ports': [64001]}, },\n                                  'postprocessors': ['BeamLoads', 'BeamPlot', 'AerogridPlot'],\n                                  'postprocessors_settings': {'BeamLoads': {'csv_output': 'off'},\n                                                              'BeamPlot': {'include_rbm': 'on',\n                                                                           'include_applied_forces': 'on'},\n                                                              'AerogridPlot': {\n                                                                  'include_rbm': 'on',\n                                                                  'include_applied_forces': 'on',\n                                                                  'minus_m_star': 0},\n                                                              }}\n\n    settings['BeamLoads'] = {'csv_output': 'off'}\n\n    settings['BeamPlot'] = {'include_rbm': 'on',\n                            'include_applied_forces': 'on'}\n\n\n    settings['AerogridPlot'] = {'include_rbm': 'on',\n                                'include_forward_motion': 'off',\n                                'include_applied_forces': 'on',\n                                'minus_m_star': 0,\n                                'u_inf': u_inf,\n                                'dt': dt}\n\n    settings['Modal'] = {'print_info': True,\n                         'use_undamped_modes': True,\n                         'NumLambda': 30,\n                         'rigid_body_modes': True,\n                         'write_modes_vtk': 'on',\n                         'print_matrices': 'on',\n                         'continuous_eigenvalues': 'off',\n                         'dt': dt,\n                         'plot_eigenvalues': False}\n\n    settings['LinearAssembler'] = {'linear_system': 'LinearAeroelastic',\n                                   'linear_system_settings': {\n                                       'beam_settings': {'modal_projection': False,\n                                                         'inout_coords': 'nodes',\n                                                         'discrete_time': True,\n                                                         'newmark_damp': 0.05,\n                                                         'discr_method': 'newmark',\n                                                         'dt': dt,\n                                                         'proj_modes': 'undamped',\n                                                         'use_euler': 'off',\n                                                         'num_modes': 40,\n                                                         'print_info': 'on',\n                                                         'gravity': 'on',\n                                                         'remove_dofs': []},\n                                       'aero_settings': {'dt': dt,\n                                                         'integr_order': 2,\n                                                         'density': rho,\n                                                         'remove_predictor': False,\n                                                         'use_sparse': True,\n                                                         'remove_inputs': ['u_gust']}\n                                   }}\n\n    settings['AsymptoticStability'] = {'print_info': 'on',\n                                       'modes_to_plot': [],\n                                       'display_root_locus': 'off',\n                                       'frequency_cutoff': 0,\n                                       'export_eigenvalues': 'off',\n                                       'num_evals': 40}\n\n    import configobj\n    config = configobj.ConfigObj()\n    config.filename = file_name\n    for k, v in settings.items():\n        config[k] = v\n    config.write()\n\n\nclean_test_files()\ngenerate_fem()\ngenerate_aero_file()\ngenerate_solver_file()\ngenerate_dyn_file()\n\ncase_route = ''\n\nsharpy.sharpy_main.main(['', case_route + '' + case_name + '.sharpy'])"
  },
  {
    "path": "tests/io/Example_simple_hale/variables_hale.yaml",
    "content": "---\n- name: 'control_surface_deflection'\n  var_type: 'control_surface'\n  inout: 'in'\n  position: 0\n- name: 'control_surface_deflection'\n  var_type: 'control_surface'\n  inout: 'in'\n  position: 1\n- name: 'app_forces'\n  var_type: 'node'\n  inout: 'in'\n  position: 0\n  index: 1\n- name: 'for_pos'\n  inout: 'out'\n  position: 0\n  var_type: 'node'\n- name: 'for_pos'\n  var_type: 'node'\n  inout: 'out'\n  position: 1\n- name: 'for_pos'\n  var_type: 'node'\n  inout: 'out'\n  position: 2\n- name: 'for_vel'\n  var_type: 'node'\n  inout: 'out'\n  position: 0\n- name: 'for_vel'\n  var_type: 'node'\n  inout: 'out'\n  position: 1\n- name: 'for_vel'\n  var_type: 'node'\n  inout: 'out'\n  position: 2\n- name: 'for_vel'\n  var_type: 'node'\n  inout: 'out'\n  position: 3\n- name: 'for_vel'\n  var_type: 'node'\n  inout: 'out'\n  position: 4\n- name: 'for_vel'\n  var_type: 'node'\n  inout: 'out'\n  position: 5\n- name: 'loads'\n  var_type: 'node'\n  inout: 'out'\n  position: 0\n  index: 4\n- name: 'strain'\n  var_type: 'node'\n  inout: 'out'\n  position: 0\n  index: 4\n..."
  },
  {
    "path": "tests/io/__init__.py",
    "content": ""
  },
  {
    "path": "tests/io/generate_pazy_udpout.py",
    "content": "import numpy as np\nimport os\nimport unittest\nimport sharpy.cases.templates.flying_wings as wings\nimport sharpy.sharpy_main\n\n# Problem Set up\ndef generate_pazy_udp(u_inf, case_name, output_folder='/output/', cases_folder='', **kwargs):\n    # u_inf = 60\n    alpha_deg = kwargs.get('alpha', 0.)\n    rho = 1.225\n    num_modes = 16\n    gravity_on = kwargs.get('gravity_on', True)\n    cd = kwargs.get('cd', './')  # current directory (useful for tests)\n\n    # Lattice Discretisation\n    M = kwargs.get('M', 4)\n    N = kwargs.get('N', 32)\n    M_star_fact = kwargs.get('Ms', 10)\n\n    # Linear UVLM settings\n    integration_order = 2\n    remove_predictor = False\n    use_sparse = True\n\n    # ROM Properties\n    rom_settings = dict()\n    rom_settings['algorithm'] = 'mimo_rational_arnoldi'\n    rom_settings['r'] = 5\n    rom_settings['single_side'] = 'observability'\n    frequency_continuous_k = np.array([0.])\n\n    # Case Admin - Create results folders\n    # case_name = 'goland_cs'\n#     case_nlin_info = 'M%dN%dMs%d_nmodes%d' % (M, N, M_star_fact, num_modes)\n    # case_rom_info = 'rom_MIMORA_r%d_sig%04d_%04dj' % (rom_settings['r'], frequency_continuous_k[-1].real * 100,\n                                                      # frequency_continuous_k[-1].imag * 100)\n\n    # case_name += case_nlin_info #+ case_rom_info\n\n    # os.makedirs(fig_folder, exist_ok=True)\n\n    # SHARPy nonlinear reference solution\n    ws = wings.PazyControlSurface(M=M,\n                                    N=N,\n                                    Mstar_fact=M_star_fact,\n                                    u_inf=u_inf,\n                                    alpha=alpha_deg,\n                                    cs_deflection=[0, 0],\n                                    rho=rho,\n                                    sweep=0,\n                                    physical_time=0.2,\n                                    n_surfaces=2,\n                                    route=cases_folder + '/' + case_name,\n                                    case_name=case_name)\n\n    ws.gust_intensity = 0.01\n    ws.sigma = 1\n\n    ws.clean_test_files()\n    ws.update_derived_params()\n    ws.set_default_config_dict()\n\n    ws.generate_aero_file()\n    ws.generate_fem_file()\n\n    frequency_continuous_w = 2 * u_inf * frequency_continuous_k / ws.c_ref\n    rom_settings['frequency'] = frequency_continuous_w\n    rom_settings['tangent_input_file'] = ws.route + '/' + ws.case_name + '.rom.h5'\n\n    ws.config['SHARPy'] = {\n        'flow':\n            ['BeamLoader',\n            'AerogridLoader',\n            # 'NonLinearStatic',\n             'StaticUvlm',\n             'AerogridPlot',\n             'BeamPlot',\n             'WriteVariablesTime',\n             'DynamicCoupled',\n#              'Modal',\n#              'LinearAssembler',\n             # 'FrequencyResponse',\n#              'AsymptoticStability',\n#              'SaveParametricCase',\n             ],\n        'case': ws.case_name, 'route': ws.route,\n        'write_screen': 'off', 'write_log': 'on',\n        'save_settings': 'on',\n        'log_folder': output_folder + '/' + ws.case_name + '/',\n        'log_file': ws.case_name + '.log'}\n\n    ws.config['BeamLoader'] = {\n        'unsteady': 'off',\n        'orientation': ws.quat}\n\n    ws.config['AerogridLoader'] = {\n        'unsteady': 'off',\n        'aligned_grid': 'on',\n        'mstar': ws.Mstar_fact * ws.M,\n        'freestream_dir': ws.u_inf_direction,\n        'wake_shape_generator': 'StraightWake',\n        'wake_shape_generator_input': {'u_inf': ws.u_inf,\n                                       'u_inf_direction': ws.u_inf_direction,\n                                       'dt': ws.dt}}\n\n    ws.config['StaticUvlm'] = {\n        'rho': ws.rho,\n        'velocity_field_generator': 'SteadyVelocityField',\n        'velocity_field_input': {\n            'u_inf': ws.u_inf,\n            'u_inf_direction': ws.u_inf_direction},\n        'rollup_dt': ws.dt,\n        'print_info': 'on',\n        'horseshoe': 'on',\n        'num_cores': 4,\n        'n_rollup': 0,\n        'rollup_aic_refresh': 0,\n        'vortex_radius': 1e-9,\n        'rollup_tolerance': 1e-4}\n\n    settings = dict()\n    settings['NonLinearStatic'] = {'print_info': 'off',\n                                   'max_iterations': 200,\n                                   'num_load_steps': 5,\n                                   'delta_curved': 1e-6,\n                                   'min_delta': 1e-8,\n                                   'gravity_on': gravity_on,\n                                   'gravity': 9.81}\n\n    ws.config['StaticCoupled'] = {\n        'print_info': 'on',\n        'max_iter': 200,\n        'n_load_steps': 4,\n        'tolerance': 1e-5,\n        'relaxation_factor': 0.1,\n        'aero_solver': 'StaticUvlm',\n        'aero_solver_settings': {\n            'rho': ws.rho,\n            'print_info': 'off',\n            'horseshoe': 'on',\n            'num_cores': 4,\n            'n_rollup': 0,\n            'rollup_dt': ws.dt,\n            'rollup_aic_refresh': 1,\n            'rollup_tolerance': 1e-4,\n            'velocity_field_generator': 'SteadyVelocityField',\n            'velocity_field_input': {\n                'u_inf': ws.u_inf,\n                'u_inf_direction': ws.u_inf_direction},\n            'vortex_radius': 1e-9},\n        'structural_solver': 'NonLinearStatic',\n        'structural_solver_settings': settings['NonLinearStatic']}\n\n    ws.config['AerogridPlot'] = {'include_rbm': 'off',\n                                 'include_applied_forces': 'on',\n                                 'minus_m_star': 0}\n\n    ws.config['AeroForcesCalculator'] = {'write_text_file': 'on',\n                                         'text_file_name': ws.case_name + '_aeroforces.csv',\n                                         'screen_output': 'on'}\n\n    ws.config['BeamPlot'] = {'include_rbm': 'off',\n                             'include_applied_forces': 'on'}\n\n    ws.config['WriteVariablesTime'] = {'structure_variables': ['pos'],\n                                        'structure_nodes': list(range(0, ws.num_node_surf)),\n                                        'cleanup_old_solution': 'on'}\n\n    ws.config['Modal'] = {'NumLambda': 20,\n                          'rigid_body_modes': 'off',\n                          'print_matrices': 'on',\n                          'save_data': 'off',\n                          'rigid_modes_cg': 'off',\n                          'continuous_eigenvalues': 'off',\n                          'dt': 0,\n                          'plot_eigenvalues': False,\n                          'max_rotation_deg': 15.,\n                          'max_displacement': 0.15,\n                          'write_modes_vtk': True,\n                          'use_undamped_modes': True}\n\n    ws.config['LinearAssembler'] = {'linear_system': 'LinearAeroelastic',\n                                    # 'modal_tstep': 0,\n                                    'linear_system_settings': {\n                                        'beam_settings': {'modal_projection': 'on',\n                                                          'inout_coords': 'modes',\n                                                          'discrete_time': 'on',\n                                                          'newmark_damp': 0.5e-4,\n                                                          'discr_method': 'newmark',\n                                                          'dt': ws.dt,\n                                                          'proj_modes': 'undamped',\n                                                          'use_euler': 'off',\n                                                          'num_modes': num_modes,\n                                                          'print_info': 'off',\n                                                          'gravity': gravity_on,\n                                                          'remove_sym_modes': 'on',\n                                                          'remove_dofs': []},\n                                        'aero_settings': {'dt': ws.dt,\n                                                          # 'ScalingDict': {'length': 0.5 * ws.c_ref,\n                                                                          # 'speed': u_inf,\n                                                                          # 'density': rho},\n                                                          'integr_order': integration_order,\n                                                          'density': ws.rho,\n                                                          'remove_predictor': remove_predictor,\n                                                          'use_sparse': use_sparse,\n                                                          'rigid_body_motion': 'off',\n                                                          'use_euler': 'off',\n                                                          'remove_inputs': ['u_gust'],\n                                                          'rom_method': ['Krylov'],\n                                                          'rom_method_settings': {'Krylov': rom_settings}},\n                                    }}\n\n    ws.config['AsymptoticStability'] = {'print_info': True,\n                                        'export_eigenvalues': 'on',\n                                        'target_system': ['aeroelastic', 'aerodynamic', 'structural'],\n                                        # 'velocity_analysis': [160, 180, 20]}\n                                        }\n\n    ws.config['LinDynamicSim'] = {'dt': ws.dt,\n                                  'n_tsteps': ws.n_tstep,\n                                  'sys_id': 'LinearAeroelastic',\n                                  'postprocessors': ['BeamPlot', 'AerogridPlot'],\n                                  'postprocessors_settings': {'AerogridPlot': {\n                                      'u_inf': ws.u_inf,\n                                      'include_rbm': 'on',\n                                      'include_applied_forces': 'on',\n                                      'minus_m_star': 0},\n                                      'BeamPlot': {'include_rbm': 'on',\n                                                   'include_applied_forces': 'on'}}}\n\n    ws.config['FrequencyResponse'] = {'quick_plot': 'off',\n                                      'frequency_unit': 'w',\n                                      'frequency_bounds': [0.0001, 1.0],\n                                      'num_freqs': 100,\n                                      'frequency_spacing': 'log',\n                                      'target_system': ['aeroelastic', 'aerodynamic', 'structural'],\n                                      }\n\n    ws.config['SaveParametricCase'] = {'save_case':'off',\n                                       'parameters': {'u_inf': u_inf}}\n    settings = dict()\n    settings['NonLinearDynamicPrescribedStep'] = {'print_info': 'on',\n                                                  'max_iterations': 950,\n                                                  'delta_curved': 1e-2,\n                                                  'min_delta': 1e-5,\n                                                  'newmark_damp': 5e-2,\n                                                  'gravity_on': 'on',\n                                                  'gravity': 9.81,\n                                                  'num_steps': ws.n_tstep,\n                                                  'dt': ws.dt}\n\n    settings['StepUvlm'] = {'print_info': 'on',\n                            'num_cores': 4,\n                            'convection_scheme': 2,\n                            'velocity_field_generator': 'SteadyVelocityField',\n                            'velocity_field_input': {'u_inf': ws.u_inf*1,\n                                                     'u_inf_direction': [1., 0., 0.]},\n                            'rho': ws.rho,\n                            'n_time_steps': ws.n_tstep,\n                            'vortex_radius': 1e-9,\n                            'dt': ws.dt,\n                            'gamma_dot_filtering': 3}\n\n\n    settings['DynamicCoupled'] = {'print_info': 'on',\n                                  'structural_substeps': 10,\n                                  'dynamic_relaxation': 'on',\n                                  'cleanup_previous_solution': 'on',\n                                  'structural_solver': 'NonLinearDynamicPrescribedStep',\n                                  'structural_solver_settings': settings['NonLinearDynamicPrescribedStep'],\n                                  'aero_solver': 'StepUvlm',\n                                  'aero_solver_settings': settings['StepUvlm'],\n                                  'fsi_substeps': 200,\n                                  'fsi_tolerance': 1e-6,\n                                  'relaxation_factor': ws.relaxation_factor,\n                                  'minimum_steps': 1,\n                                  'relaxation_steps': 150,\n                                  'final_relaxation_factor': 0.0,\n                                  'n_time_steps': 4, #ws.n_tstep,\n                                  'dt': ws.dt,\n                                  'include_unsteady_force_contribution': 'off',\n                                  'postprocessors': ['UDPout'],\n                                  'postprocessors_settings': {'BeamLoads': {'csv_output': 'off'},\n                                                              'BeamPlot': {'include_rbm': 'on',\n                                                                           'include_applied_forces': 'on'},\n                                                              'StallCheck': {},\n                                                              'AerogridPlot': {\n                                                                  'u_inf': ws.u_inf,\n                                                                  'include_rbm': 'on',\n                                                                  'include_applied_forces': 'on',\n                                                                  'minus_m_star': 0},\n                                                              'WriteVariablesTime': {\n                                                                  'structure_variables': ['pos', 'psi'],\n                                                                  'structure_nodes': [ws.num_node_surf - 1,\n                                                                                      ws.num_node_surf,\n                                                                                      ws.num_node_surf + 1]},\n                                                              'UDPout': {'variables_filename': cd + '/variables.yaml',\n                                                                         'output_network_settings':\n                                                                             {'destination_address': ['127.0.0.1'],\n                                                                                                     'destination_ports': [65431]},\n                                                                         'console_log_level': 'error',\n                                                                         },\n                                                              }}\n\n    ws.config['DynamicCoupled'] = settings['DynamicCoupled']\n\n\n    ws.config.write()\n\n    sharpy.sharpy_main.main(['', ws.route + ws.case_name + '.sharpy'])\n\nif __name__== '__main__':\n    # u_inf = 1\n    # generate_pazi(u_inf)\n#\n    from datetime import datetime\n\n    # datetime object containing current date and time\n    # u_inf_vec = np.array([46])\n    # u_inf_vec = np.linspace(28, 30, 50)\n    # u_inf_vec = np.linspace(5, 30, 26)\n    u_inf_vec = [50]\n#     u_inf_vec = np.linspace(20, 60, 41)\n#     u_inf_vec = np.linspace(1, 20, 20)\n#     u_inf_vec = np.linspace(1, 60, 60)\n\n\n    alpha = 1\n    gravity_on = True\n\n    M = 4\n    N = 16\n    Ms = 1\n\n    # For comparison with Marc\n#     M = 8\n#     N = 128\n#     Ms = 8\n\n\n    batch_log = 'batch_log_alpha{:04g}'.format(alpha*100)\n\n    with open('./{:s}.txt'.format(batch_log), 'w') as f:\n    # dd/mm/YY H:M:S\n        now = datetime.now()\n        dt_string = now.strftime(\"%d/%m/%Y %H:%M:%S\")\n        f.write('SHARPy launch - START\\n')\n        f.write(\"date and time = %s\\n\\n\" % dt_string)\n\n    for i, u_inf in enumerate(u_inf_vec):\n        print('RUNNING SHARPY %f\\n' % u_inf)\n        case_name = 'pazi_uinf{:04g}_alpha{:04g}'.format(u_inf*10, alpha*100)\n        try:\n            generate_pazy_udp(u_inf, case_name, output_folder='/output/vortex_radius_M{:g}N{:g}Ms{:g}_alpha{:04g}/'.format(M, N, Ms, alpha * 100),\n                              cases_subfolder='/M{:g}N{:g}Ms{:g}/'.format(M, N, Ms),\n                              M=M, N=N, Ms=Ms, alpha=alpha,\n                              gravity_on=gravity_on)\n            now = datetime.now()\n            dt_string = now.strftime(\"%d/%m/%Y %H:%M:%S\")\n            with open('./{:s}.txt'.format(batch_log), 'a') as f:\n                f.write('%s Ran case %i :::: u_inf = %f\\n\\n' % (dt_string, i, u_inf))\n        except AssertionError:\n            now = datetime.now()\n            dt_string = now.strftime(\"%d/%m/%Y %H:%M:%S\")\n            with open('./{:s}.txt'.format(batch_log), 'a') as f:\n                f.write('%s ERROR RUNNING case %f\\n\\n' % (dt_string, u_inf))\n"
  },
  {
    "path": "tests/io/sample_udp_inout/__init__.py",
    "content": ""
  },
  {
    "path": "tests/io/sample_udp_inout/client.py",
    "content": "import socket\nimport select\nimport time\nimport logging\nimport struct\nimport sharpy.io.message_interface as message_interface\nimport numpy as np\n\"\"\"\nThis is not a test but is to be used as client when testing the development of the input\noutput capabilities of sharpy.\n\nRun this script as client.\n\nRun ``python generate_pazy_test_io_local.py`` as server\n\"\"\"\n\n# sel = selectors.DefaultSelector()\n\nlogging.basicConfig(format='%(asctime)s - %(name)s - %(levelname)s - %(message)s',\n                    level=20)\nlogger = logging.getLogger(__name__)\n\nsharpy_incoming = ('127.0.0.1', 64011)  # control side socket\nsharpy_outgoing = ('127.0.0.1', 64010)  # output side socket\n\nown_control = ('127.0.0.1', 64000)\nown_receive = ('127.0.0.1', 64001)\n\nin_sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)\nin_sock.bind(own_control)\n\nout_sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)\nout_sock.bind(own_receive)\n\n# from https://stackoverflow.com/questions/2719017/how-to-set-timeout-on-pythons-socket-recv-method\n# ready_to_read = select.select([out_sock], [], [], 2)\nout_sock.settimeout(30)\n\ntsteps = 401\nt = np.linspace(0, 0.2, tsteps)\ncs_deflection = 10 * np.sin(2 * t * np.pi / 0.2) * np.pi/180\n# cs_deflection = np.linspace(0, )\n# cs_deflection = np.array([0, 0, 90, 90, 90, 90]) * np.pi / 180\ncurr_ts = 0\nwingtip_deflection = []\nmid_wing_deflection = []\nwhile True:\n    if curr_ts > tsteps:\n        break\n    # send control input to sharpy\n    ctrl_value = struct.pack('<5sif', b'RREF0', 0, cs_deflection[curr_ts])\n    logger.info('Sending control input of size {} bytes'.format(len(ctrl_value)))\n    in_sock.sendto(ctrl_value, sharpy_incoming)\n    logger.info('Sent control input to {}'.format(sharpy_incoming))\n\n    # time.sleep(2)\n    # input('Continue loop')\n\n    # receive output data. set msg_len to whatever length SHARPy is sending\n    msg_len = 133\n    try:\n        msg, conn = out_sock.recvfrom(msg_len)\n    except socket.timeout:\n        logger.info('Socket time out')\n        break\n    logger.info('Received {} data from {}'.format(msg, conn))\n    logger.info('Received data is {} bytes long'.format(len(msg)))\n    # else:\n    #     break\n    # decoding\n    values = message_interface.decoder(msg)\n    logger.info('Received {}'.format(values))\n    wingtip_deflection.append(values[0][1])\n    mid_wing_deflection.append(values[1][1])\n    # input('Next time step')\n    curr_ts += 1\n\n\nout_sock.close()\nin_sock.close()\nlogger.info('Closed input and output sockets')\n"
  },
  {
    "path": "tests/io/sample_udp_inout/generate_pazy_test_io_local.py",
    "content": "import numpy as np\nimport os\nimport unittest\nimport cases.templates.flying_wings as wings\nimport sharpy.sharpy_main\n\n# Problem Set up\ndef generate_pazy(u_inf, case_name, output_folder='/output/', cases_folder='', **kwargs):\n    # u_inf = 60\n    alpha_deg = kwargs.get('alpha', 0.)\n    rho = 1.225\n    num_modes = 16\n    gravity_on = kwargs.get('gravity_on', True)\n\n    # Lattice Discretisation\n    M = kwargs.get('M', 4)\n    N = kwargs.get('N', 32)\n    M_star_fact = kwargs.get('Ms', 10)\n\n    # Linear UVLM settings\n    integration_order = 2\n    remove_predictor = False\n    use_sparse = True\n\n    # ROM Properties\n    rom_settings = dict()\n    rom_settings['algorithm'] = 'mimo_rational_arnoldi'\n    rom_settings['r'] = 5\n    rom_settings['single_side'] = 'observability'\n    frequency_continuous_k = np.array([0.])\n\n    # Case Admin - Create results folders\n    # case_name = 'goland_cs'\n    #     case_nlin_info = 'M%dN%dMs%d_nmodes%d' % (M, N, M_star_fact, num_modes)\n    # case_rom_info = 'rom_MIMORA_r%d_sig%04d_%04dj' % (rom_settings['r'], frequency_continuous_k[-1].real * 100,\n    # frequency_continuous_k[-1].imag * 100)\n\n    # case_name += case_nlin_info #+ case_rom_info\n\n    # os.makedirs(fig_folder, exist_ok=True)\n\n    # SHARPy nonlinear reference solution\n    ws = wings.PazyControlSurface(M=M,\n                                  N=N,\n                                  Mstar_fact=M_star_fact,\n                                  u_inf=u_inf,\n                                  alpha=alpha_deg,\n                                  cs_deflection=[0, 0],\n                                  rho=rho,\n                                  sweep=0,\n                                  physical_time=2.0,\n                                  n_surfaces=2,\n                                  route=cases_folder + '/' + case_name,\n                                  case_name=case_name)\n\n    ws.gust_intensity = 0.01\n    ws.sigma = 1\n\n    ws.control_surface_type = np.array([2])\n\n    ws.clean_test_files()\n    ws.update_derived_params()\n    ws.set_default_config_dict()\n\n    ws.generate_aero_file()\n    ws.generate_fem_file()\n\n    frequency_continuous_w = 2 * u_inf * frequency_continuous_k / ws.c_ref\n    rom_settings['frequency'] = frequency_continuous_w\n    rom_settings['tangent_input_file'] = ws.route + '/' + ws.case_name + '.rom.h5'\n\n    ws.config['SHARPy'] = {\n        'flow':\n            ['BeamLoader',\n             'AerogridLoader',\n             # 'NonLinearStatic',\n             'StaticUvlm',\n             'AerogridPlot',\n             'BeamPlot',\n             'WriteVariablesTime',\n             'DynamicCoupled',\n             #              'Modal',\n             #              'LinearAssembler',\n             # 'FrequencyResponse',\n             #              'AsymptoticStability',\n             #              'SaveParametricCase',\n             ],\n        'case': ws.case_name, 'route': ws.route,\n        'write_screen': 'off', 'write_log': 'on',\n        'save_settings': 'on',\n        'log_folder': output_folder + '/' + ws.case_name + '/',\n        'log_file': ws.case_name + '.log'}\n\n    ws.config['BeamLoader'] = {\n        'unsteady': 'off',\n        'orientation': ws.quat}\n\n    ws.config['AerogridLoader'] = {\n        'unsteady': 'off',\n        'aligned_grid': 'on',\n        'mstar': ws.Mstar_fact * ws.M,\n        'freestream_dir': ws.u_inf_direction,\n        'wake_shape_generator': 'StraightWake',\n        'wake_shape_generator_input': {'u_inf': ws.u_inf,\n                                       'u_inf_direction': ws.u_inf_direction,\n                                       'dt': ws.dt}}\n\n    ws.config['StaticUvlm'] = {\n        'rho': ws.rho,\n        'velocity_field_generator': 'SteadyVelocityField',\n        'velocity_field_input': {\n            'u_inf': ws.u_inf,\n            'u_inf_direction': ws.u_inf_direction},\n        'rollup_dt': ws.dt,\n        'print_info': 'on',\n        'horseshoe': 'off',\n        'num_cores': 4}\n\n    settings = dict()\n    settings['NonLinearStatic'] = {'print_info': 'off',\n                                   'max_iterations': 200,\n                                   'num_load_steps': 5,\n                                   'delta_curved': 1e-6,\n                                   'min_delta': 1e-8,\n                                   'gravity_on': gravity_on,\n                                   'gravity': 9.81}\n\n    ws.config['StaticCoupled'] = {\n        'print_info': 'on',\n        'max_iter': 200,\n        'n_load_steps': 4,\n        'tolerance': 1e-5,\n        'relaxation_factor': 0.1,\n        'aero_solver': 'StaticUvlm',\n        'aero_solver_settings': {\n            'rho': ws.rho,\n            'print_info': 'off',\n            'horseshoe': 'off',\n            'num_cores': 4,\n            'velocity_field_generator': 'SteadyVelocityField',\n            'velocity_field_input': {\n                'u_inf': ws.u_inf,\n                'u_inf_direction': ws.u_inf_direction},\n            'vortex_radius': 1e-9},\n        'structural_solver': 'NonLinearStatic',\n        'structural_solver_settings': settings['NonLinearStatic']}\n\n    ws.config['AerogridPlot'] = {'include_rbm': 'off',\n                                 'include_applied_forces': 'on',\n                                 'minus_m_star': 0}\n\n    ws.config['AeroForcesCalculator'] = {'write_text_file': 'on',\n                                         'text_file_name': ws.case_name + '_aeroforces.csv',\n                                         'screen_output': 'on'}\n\n    ws.config['BeamPlot'] = {'include_rbm': 'off',\n                             'include_applied_forces': 'on'}\n\n    ws.config['WriteVariablesTime'] = {'structure_variables': ['pos'],\n                                       'structure_nodes': list(range(0, ws.num_node_surf)),\n                                       'cleanup_old_solution': 'on'}\n\n    ws.config['Modal'] = {'NumLambda': 20,\n                          'rigid_body_modes': 'off',\n                          'print_matrices': 'on',\n                          'save_data': 'off',\n                          'rigid_modes_cg': 'off',\n                          'continuous_eigenvalues': 'off',\n                          'dt': 0,\n                          'plot_eigenvalues': False,\n                          'max_rotation_deg': 15.,\n                          'max_displacement': 0.15,\n                          'write_modes_vtk': True,\n                          'use_undamped_modes': True}\n\n    ws.config['LinearAssembler'] = {'linear_system': 'LinearAeroelastic',\n                                    # 'modal_tstep': 0,\n                                    'linear_system_settings': {\n                                        'beam_settings': {'modal_projection': 'on',\n                                                          'inout_coords': 'modes',\n                                                          'discrete_time': 'on',\n                                                          'newmark_damp': 0.5e-4,\n                                                          'discr_method': 'newmark',\n                                                          'dt': ws.dt,\n                                                          'proj_modes': 'undamped',\n                                                          'use_euler': 'off',\n                                                          'num_modes': num_modes,\n                                                          'print_info': 'off',\n                                                          'gravity': gravity_on,\n                                                          'remove_sym_modes': 'on',\n                                                          'remove_dofs': []},\n                                        'aero_settings': {'dt': ws.dt,\n                                                          # 'ScalingDict': {'length': 0.5 * ws.c_ref,\n                                                          # 'speed': u_inf,\n                                                          # 'density': rho},\n                                                          'integr_order': integration_order,\n                                                          'density': ws.rho,\n                                                          'remove_predictor': remove_predictor,\n                                                          'use_sparse': use_sparse,\n                                                          'rigid_body_motion': 'off',\n                                                          'use_euler': 'off',\n                                                          'remove_inputs': ['u_gust'],\n                                                          'rom_method': ['Krylov'],\n                                                          'rom_method_settings': {'Krylov': rom_settings}},\n                                    }}\n\n    ws.config['AsymptoticStability'] = {'print_info': True,\n                                        'export_eigenvalues': 'on',\n                                        'target_system': ['aeroelastic', 'aerodynamic', 'structural'],\n                                        # 'velocity_analysis': [160, 180, 20]}\n                                        }\n\n    ws.config['LinDynamicSim'] = {'dt': ws.dt,\n                                  'n_tsteps': ws.n_tstep,\n                                  'sys_id': 'LinearAeroelastic',\n                                  'postprocessors': ['BeamPlot', 'AerogridPlot'],\n                                  'postprocessors_settings': {'AerogridPlot': {\n                                      'u_inf': ws.u_inf,\n                                      'include_rbm': 'on',\n                                      'include_applied_forces': 'on',\n                                      'minus_m_star': 0},\n                                      'BeamPlot': {'include_rbm': 'on',\n                                                   'include_applied_forces': 'on'}}}\n\n    ws.config['FrequencyResponse'] = {'quick_plot': 'off',\n                                      'frequency_unit': 'w',\n                                      'frequency_bounds': [0.0001, 1.0],\n                                      'num_freqs': 100,\n                                      'frequency_spacing': 'log',\n                                      'target_system': ['aeroelastic', 'aerodynamic', 'structural'],\n                                      }\n\n    ws.config['SaveParametricCase'] = {'save_case':'off',\n                                       'parameters': {'u_inf': u_inf}}\n    settings = dict()\n    settings['NonLinearDynamicPrescribedStep'] = {'print_info': 'on',\n                                                  'max_iterations': 950,\n                                                  'delta_curved': 1e-2,\n                                                  'min_delta': 1e-5,\n                                                  'newmark_damp': 5e-2,\n                                                  'gravity_on': 'on',\n                                                  'gravity': 9.81,\n                                                  'num_steps': ws.n_tstep,\n                                                  'dt': ws.dt}\n\n    settings['StepUvlm'] = {'print_info': 'on',\n                            'num_cores': 4,\n                            'convection_scheme': 0,\n                            'velocity_field_generator': 'SteadyVelocityField',\n                            'velocity_field_input': {'u_inf': ws.u_inf*1,\n                                                     'u_inf_direction': [1., 0., 0.]},\n                            'rho': ws.rho,\n                            'n_time_steps': ws.n_tstep,\n                            'vortex_radius': 1e-9,\n                            'dt': ws.dt,\n                            'gamma_dot_filtering': 3}\n\n    settings['DynamicCoupled'] = {'print_info': 'on',\n                                  'structural_substeps': 0,\n                                  'dynamic_relaxation': 'on',\n                                  'cleanup_previous_solution': 'on',\n                                  'structural_solver': 'NonLinearDynamicPrescribedStep',\n                                  'structural_solver_settings': settings['NonLinearDynamicPrescribedStep'],\n                                  'aero_solver': 'StepUvlm',\n                                  'aero_solver_settings': settings['StepUvlm'],\n                                  'fsi_substeps': 200,\n                                  'fsi_tolerance': 1e-6,\n                                  'relaxation_factor': ws.relaxation_factor,\n                                  'minimum_steps': 1,\n                                  'relaxation_steps': 150,\n                                  'final_relaxation_factor': 0.0,\n                                  'n_time_steps': 5, #ws.n_tstep,\n                                  'dt': ws.dt,\n                                  'include_unsteady_force_contribution': 'on',\n                                  'steps_without_unsteady_force': 2,\n                                  'network_settings': {'variables_filename': './variables_coarse.yaml',\n                                                       'send_output_to_all_clients': 'on',\n                                                       'byte_ordering': 'little',\n                                                       'received_data_filename': output_folder + './input.dat',\n                                                       'log_name': output_folder + '/sharpy_network.log',\n                                                       'file_log_level': 'debug',\n                                                       'console_log_level': 'debug',\n                                                       'input_network_settings': {'address': '127.0.0.1',\n                                                                                  'port': 64011},\n                                                       'output_network_settings': {'send_on_demand': 'off',\n                                                                                   'destination_address': ['127.0.0.1'],\n                                                                                   'address': '127.0.0.1',\n                                                                                   'port': 64010,\n                                                                                   'destination_ports': [64001],\n                                                                                   },\n                                                       },\n                                  'postprocessors': ['AerogridPlot', 'BeamPlot', 'WriteVariablesTime'],\n                                  'postprocessors_settings': {'BeamLoads': {'csv_output': 'off'},\n                                                              'BeamPlot': {'include_rbm': 'on',\n                                                                           'include_applied_forces': 'on'},\n                                                              'StallCheck': {},\n                                                              'AerogridPlot': {\n                                                                  'u_inf': ws.u_inf,\n                                                                  'include_rbm': 'on',\n                                                                  'include_applied_forces': 'on',\n                                                                  'minus_m_star': 0},\n                                                              'WriteVariablesTime': {\n                                                                  'structure_variables': ['pos', 'psi'],\n                                                                  'structure_nodes': [ws.num_node_surf - 1,\n                                                                                      ws.num_node_surf,\n                                                                                      ws.num_node_surf + 1]},\n                                                              }}\n\n    ws.config['DynamicCoupled'] = settings['DynamicCoupled']\n\n    ws.config.write()\n\n    sharpy.sharpy_main.main(['', ws.route + ws.case_name + '.sharpy'])\n\n\nif __name__== '__main__':\n\n    u_inf = 50\n\n    alpha = 4\n    gravity_on = True\n\n    M = 4\n    N = 32\n    Ms = 4\n\n    case_name = 'pazy_uinf{:04g}_alpha{:04g}'.format(u_inf*10, alpha*100)\n    generate_pazy(u_inf, case_name, output_folder='./output/test_65001_wake3_M{:g}N{:g}Ms{:g}_alpha{:04g}/'.format(M, N, Ms, alpha*100),\n                  cases_folder='./cases/test_M{:g}N{:g}Ms{:g}wake3/'.format(M, N, Ms),\n                  M=M, N=N, Ms=Ms, alpha=alpha,\n                  gravity_on=gravity_on)\n"
  },
  {
    "path": "tests/io/sample_udp_inout/variables_coarse.yaml",
    "content": "---\n- name: 'control_surface_deflection'\n  var_type: 'control_surface'\n  inout: 'in'\n  position: 0\n- name: 'dt'\n  inout: 'out'\n- name: 'nt'\n  inout: 'out'\n- name: 'pos_dot'\n  var_type: 'node'\n  inout: 'out'\n  position: 4\n  index: 0\n- name: 'pos_dot'\n  inout: 'out'\n  position: 4\n  index: 1\n  var_type: 'node'\n- name: 'pos_dot'\n  inout: 'out'\n  position: 4\n  index: 2\n  var_type: 'node'\n- name: 'pos_dot'\n  var_type: 'node'\n  inout: 'out'\n  position: 8\n  index: 0\n- name: 'pos_dot'\n  inout: 'out'\n  position: 8\n  index: 1\n  var_type: 'node'\n- name: 'pos_dot'\n  inout: 'out'\n  position: 8\n  index: 2\n  var_type: 'node'\n- name: 'pos_dot'\n  var_type: 'node'\n  inout: 'out'\n  position: 16\n  index: 0\n- name: 'pos_dot'\n  inout: 'out'\n  position: 16\n  index: 1\n  var_type: 'node'\n- name: 'pos_dot'\n  inout: 'out'\n  position: 16\n  index: 2\n  var_type: 'node'\n- name: 'pos_dot'\n  var_type: 'node'\n  inout: 'out'\n  position: 20\n  index: 0\n- name: 'pos_dot'\n  inout: 'out'\n  position: 20\n  index: 1\n  var_type: 'node'\n- name: 'pos_dot'\n  inout: 'out'\n  position: 20\n  index: 2\n  var_type: 'node'\n- name: 'pos'\n  inout: 'out'\n  position: 20\n  index: 2\n  var_type: 'node'\n- name: 'psi'\n  inout: 'out'\n  position: 20\n  index: 2\n  var_type: 'node'\n...\n"
  },
  {
    "path": "tests/io/test_pazy_udpout.py",
    "content": "import unittest\nimport tests.io.generate_pazy_udpout as gp\nimport os\nimport shutil\n\nclass TestPazyCoupledStatic(unittest.TestCase):\n    \"\"\"\n    Test Pazy wing static coupled case and compare against a benchmark result.\n    As of the time of writing, benchmark result has not been verified but it\n    serves as a backward compatibility check for code improvements.\n    \"\"\"\n\n    route_test_dir = os.path.abspath(os.path.dirname(os.path.realpath(__file__)))\n\n    def test_dynamic_aoa(self):\n        u_inf = 50\n        alpha = 0\n        case_name = 'pazy_uinf{:04g}_alpha{:04g}'.format(u_inf * 10, alpha * 10)\n\n        M = 4\n        N = 16\n        Msf = 1\n\n        cases_folder = self.route_test_dir + '/cases/'\n        output_folder = self.route_test_dir + '/cases/'\n        # run case\n        gp.generate_pazy_udp(u_inf, case_name, output_folder, cases_folder,\n                             alpha=alpha,\n                             M=M,\n                             N=N,\n                             Msf=Msf,\n                             cd=self.route_test_dir)\n\n    def tearDown(self):\n        cases_folder = self.route_test_dir + '/cases/'\n\n        if os.path.isdir(cases_folder):\n            shutil.rmtree(cases_folder)\n\n\nif __name__ == '__main__':\n    unittest.main()"
  },
  {
    "path": "tests/io/variables.yaml",
    "content": "---\n- name: 'control_surface_deflection'\n  var_type: 'control_surface'\n  inout: 'in'\n  position: 0\n- name: 'pos'\n  var_type: 'node'\n  inout: 'out'\n  position: 5\n  index: 2\n- name: 'pos'\n  inout: 'out'\n  position: 16\n  index: 2\n  var_type: 'node'\n- name: 'psi_dot'\n  inout: 'out'\n  position: 16\n  index: 2\n  var_type: 'node'\n..."
  },
  {
    "path": "tests/linear/__init__.py",
    "content": ""
  },
  {
    "path": "tests/linear/assembly/__init__.py",
    "content": ""
  },
  {
    "path": "tests/linear/assembly/test_assembly.py",
    "content": "\"\"\"\nTest assembly\nS. Maraniello, 29 May 2018\n\"\"\"\n\nimport os\nimport copy\nimport warnings\nimport unittest\nimport itertools\nimport numpy as np\nimport scipy.linalg as scalg\n\nimport sharpy.utils.h5utils as h5utils\nimport sharpy.linear.src.assembly as assembly\nimport sharpy.linear.src.multisurfaces as multisurfaces\nimport sharpy.linear.src.surface as surface\nimport sharpy.utils.algebra as algebra\nimport sharpy.utils.cout_utils as cout\nimport sharpy.sharpy_main\n\n\nnp.set_printoptions(linewidth=200, precision=3)\nvortex_radius = 1e-4\n\n\ndef max_error_tensor(Pder_an, Pder_num):\n    \"\"\"\n    Finds the maximum error analytical derivatives Pder_an. The error is:\n    - relative, if the element of Pder_an is nonzero\n    - absolute, otherwise\n\n    The function returns the absolute and relative error tensors, and the\n    maximum error.\n\n    @warning: The relative error tensor may contain NaN or Inf if the\n    analytical derivative is zero. These elements are filtered out during the\n    search for maximum error, and absolute error is checked.\n    \"\"\"\n\n    Eabs = np.abs(Pder_num - Pder_an)\n\n    nnzvec = Pder_an != 0\n    Erel = np.zeros(Pder_an.shape)\n    Erel[nnzvec] = np.abs(Eabs[nnzvec] / Pder_an[nnzvec])\n\n    # Relative error check: remove NaN and inf...\n    iifinite = np.isfinite(Erel)\n    err_max = 0.0\n    for err_here in Erel[iifinite]:\n        if np.abs(err_here) > err_max:\n            err_max = err_here\n\n    # Zero elements check\n    iizero = np.abs(Pder_an) < 1e-15\n    for der_here in Pder_num[iizero]:\n        if np.abs(der_here) > err_max:\n            err_max = der_here\n\n    return err_max, Eabs, Erel\n\n\nclass Test_assembly(unittest.TestCase):\n    \"\"\" Test methods into assembly module \"\"\"\n\n    print_info = False  # useful for debugging. Leave False to keep test log clean\n\n    def setUp(self):\n\n        # select test case\n        fname = os.path.dirname(os.path.abspath(__file__)) + '/h5input/goland_mod_Nsurf01_M003_N004_a040.aero_state.h5'\n        haero = h5utils.readh5(fname)\n        tsdata = haero.ts00000\n\n        # # Rotating cases\n        # fname = './basic_rotating_wing/basic_wing.data.h5'\n        # haero = h5utils.readh5(fname)\n        # tsdata = haero.data.aero.timestep_info[-1]\n        # tsdata.omega = []\n        # for ss in range(haero.data.aero.n_surf):\n        #     tsdata.omega.append(haero.data.structure.timestep_info[-1].for_vel[3:6])\n\n        MS = multisurfaces.MultiAeroGridSurfaces(tsdata, vortex_radius)\n        MS.get_normal_ind_velocities_at_collocation_points()\n        MS.verify_non_penetration(print_info=self.print_info)\n        MS.verify_aic_coll(print_info=self.print_info)\n        MS.get_joukovski_qs()\n        MS.verify_joukovski_qs(print_info=self.print_info)\n        self.MS = MS\n\n    def test_nc_dqcdzeta(self):\n        \"\"\"\n        For each output surface, where induced velocity is computed, all other\n        surfaces are looped.\n        For wakes, only TE is displaced.\n        \"\"\"\n\n        if self.print_info:\n            print('----------------------------- Testing assembly.test_nc_dqcdzeta')\n\n        MS = self.MS\n        n_surf = MS.n_surf\n\n        # analytical\n        Dercoll_list, Dervert_list = assembly.nc_dqcdzeta(MS.Surfs, MS.Surfs_star)\n\n        # check option\n        Der_all_exp = np.block(Dervert_list) + scalg.block_diag(*Dercoll_list)\n        Der_all = np.block(assembly.nc_dqcdzeta(MS.Surfs, MS.Surfs_star, Merge=True))\n        _, ErAbs, ErRel = max_error_tensor(Der_all, Der_all_exp)\n        # max absolute error\n        ermax = np.max(ErAbs)\n        # relative error at max abs error point\n        iimax = np.unravel_index(np.argmax(ErAbs), ErAbs.shape)\n        ermax_rel = ErRel[iimax]\n        assert ermax_rel < 1e-16, \\\n            'option Merge=True not working correctly, relative error (%.3e) too high!' % ErRel\n\n        # allocate numerical\n        Derlist_num = []\n        for ii in range(n_surf):\n            sub = []\n            for jj in range(n_surf):\n                sub.append(0.0 * Dervert_list[ii][jj])\n            Derlist_num.append(sub)\n\n        # store reference circulation and normal induced velocities\n        MS.get_normal_ind_velocities_at_collocation_points()\n        Zeta0 = []\n        Zeta0_star = []\n        Vind0 = []\n        N0 = []\n        ZetaC0 = []\n        for ss in range(n_surf):\n            Zeta0.append(MS.Surfs[ss].zeta.copy())\n            ZetaC0.append(MS.Surfs[ss].zetac.copy('F'))\n            Zeta0_star.append(MS.Surfs_star[ss].zeta.copy())\n            Vind0.append(MS.Surfs[ss].u_ind_coll_norm.copy())\n            N0.append(MS.Surfs[ss].normals.copy())\n\n        # calculate vis FDs\n        Steps = [1e-6, ]\n        step = Steps[0]\n\n        ### loop input surfs\n        for ss_in in range(n_surf):\n            Surf_in = MS.Surfs[ss_in]\n            Surf_star_in = MS.Surfs_star[ss_in]\n            M_in, N_in = Surf_in.maps.M, Surf_in.maps.N\n\n            # perturb\n            for kk in range(3 * Surf_in.maps.Kzeta):\n                cc, mm, nn = np.unravel_index(kk, (3, M_in + 1, N_in + 1))\n\n                # perturb bound. vertices and collocation\n                Surf_in.zeta = Zeta0[ss_in].copy()\n                Surf_in.zeta[cc, mm, nn] += step\n                Surf_in.generate_collocations()\n\n                # perturb wake TE\n                if mm == M_in:\n                    Surf_star_in.zeta = Zeta0_star[ss_in].copy()\n                    Surf_star_in.zeta[cc, 0, nn] += step\n\n                ### prepare output surfaces\n                # - ensure normals are unchanged\n                # - del ind. vel on output to ensure they are re-computed\n                for ss_out in range(n_surf):\n                    Surf_out = MS.Surfs[ss_out]\n                    Surf_out.normals = N0[ss_out].copy()\n                    del Surf_out.u_ind_coll_norm\n                    try:\n                        del Surf_out.u_ind_coll\n                    except AttributeError:\n                        pass\n\n                ### recalculate\n                MS.get_normal_ind_velocities_at_collocation_points()\n\n                # restore\n                Surf_in.zeta = Zeta0[ss_in].copy()\n                Surf_in.zetac = ZetaC0[ss_in].copy('F')\n                Surf_star_in.zeta = Zeta0_star[ss_in].copy()\n\n                # estimate derivatives\n                for ss_out in range(n_surf):\n                    Surf_out = MS.Surfs[ss_out]\n                    dvind = (Surf_out.u_ind_coll_norm - Vind0[ss_out]) / step\n                    Derlist_num[ss_out][ss_in][:, kk] = dvind.reshape(-1, order='C')\n\n        ### check error\n        for ss_out in range(n_surf):\n            for ss_in in range(n_surf):\n                Der_an = Dervert_list[ss_out][ss_in].copy()\n                if ss_in == ss_out:\n                    Der_an = Der_an + Dercoll_list[ss_out]\n                Der_num = Derlist_num[ss_out][ss_in]\n                _, ErAbs, ErRel = max_error_tensor(Der_an, Der_num)\n\n                # max absolute error\n                ermax = np.max(ErAbs)\n                # relative error at max abs error point\n                iimax = np.unravel_index(np.argmax(ErAbs), ErAbs.shape)\n                ermax_rel = ErRel[iimax]\n\n                if self.print_info:\n                    print('Bound%.2d->Bound%.2d\\tFDstep\\tErrAbs\\tErrRel' % (ss_in, ss_out))\n                    print('\\t\\t\\t%.1e\\t%.1e\\t%.1e' % (step, ermax, ermax_rel))\n                assert ermax < 50 * step and ermax_rel < 50 * step, embed()  # 'Test failed!'\n\n                # fig=plt.figure('Spy Er vs coll derivs',figsize=(12,4))\n\n                # ax1=fig.add_subplot(131)\n                # ax1.spy(ErAbs,precision=1e2*step)\n                # ax1.set_title('error abs %d to %d' %(ss_in,ss_out))\n\n                # ax2=fig.add_subplot(132)\n                # ax2.spy(ErRel,precision=1e2*step)\n                # ax2.set_title('error rel %d to %d' %(ss_in,ss_out))\n\n                # ax3=fig.add_subplot(133)\n                # ax3.spy(Dercoll_list[ss_out],precision=50*step)\n                # ax3.set_title('Dcoll an. %d to %d' %(ss_out,ss_out))\n                # #plt.show()\n                # plt.close()\n\n    def test_uc_dncdzeta(self, PlotFlag=False):\n\n        if self.print_info:\n            print('---------------------------------- Testing assembly.uc_dncdzeta')\n\n        MS = self.MS\n        n_surf = MS.n_surf\n\n        MS.get_ind_velocities_at_collocation_points()\n        MS.get_normal_ind_velocities_at_collocation_points()\n\n        for ss in range(n_surf):\n            if self.print_info:\n                print('Surface %.2d:' % ss)\n            Surf = MS.Surfs[ss]\n\n            # generate non-zero field of external force\n            Surf.u_ext[0, :, :] = Surf.u_ext[0, :, :] - 20.0\n            Surf.u_ext[1, :, :] = Surf.u_ext[1, :, :] + 60.0\n            Surf.u_ext[2, :, :] = Surf.u_ext[2, :, :] + 30.0\n            Surf.u_ext = Surf.u_ext + np.random.rand(*Surf.u_ext.shape)\n\n            ### analytical derivative\n            # ind velocities computed already\n            Surf.get_input_velocities_at_collocation_points()\n            Der = assembly.uc_dncdzeta(Surf)\n\n            ### numerical derivative\n            # Surf.get_normal_input_velocities_at_collocation_points()\n            u_tot0 = Surf.u_ind_coll + Surf.u_input_coll\n            u_norm0 = Surf.project_coll_to_normal(u_tot0)\n            u_norm0_vec = u_norm0.reshape(-1, order='C')\n            zeta0 = Surf.zeta\n            DerNum = np.zeros(Der.shape)\n\n            Steps = np.array([1e-2, 1e-3, 1e-4, 1e-5, 1e-6])\n            Er_max = 0.0 * Steps\n\n            for ss in range(len(Steps)):\n                step = Steps[ss]\n                for jj in range(3 * Surf.maps.Kzeta):\n                    # perturb\n                    cc_pert = Surf.maps.ind_3d_vert_vect[0][jj]\n                    mm_pert = Surf.maps.ind_3d_vert_vect[1][jj]\n                    nn_pert = Surf.maps.ind_3d_vert_vect[2][jj]\n                    zeta_pert = zeta0.copy()\n                    zeta_pert[cc_pert, mm_pert, nn_pert] += step\n                    # calculate new normal velocity\n                    Surf_pert = surface.AeroGridSurface(Surf.maps, zeta=zeta_pert,\n                                                        u_ext=Surf.u_ext, gamma=Surf.gamma,\n                                                        vortex_radius=vortex_radius)\n                    u_norm = Surf_pert.project_coll_to_normal(u_tot0)\n                    u_norm_vec = u_norm.reshape(-1, order='C')\n                    # FD derivative\n                    DerNum[:, jj] = (u_norm_vec - u_norm0_vec) / step\n\n                er_max = np.max(np.abs(Der - DerNum))\n                if self.print_info:\n                    print('FD step: %.2e ---> Max error: %.2e' % (step, er_max))\n                assert er_max < 5e1 * step, 'Error larger than 50 times step size'\n                Er_max[ss] = er_max\n\n            # assert error decreases with step size\n            for ss in range(1, len(Steps)):\n                assert Er_max[ss] < Er_max[ss - 1], \\\n                    'Error not decreasing as FD step size is reduced'\n            if self.print_info:\n                print('------------------------------------------------------------ OK')\n\n            if PlotFlag:\n                pass\n                # fig = plt.figure('Spy Der',figsize=(10,4))\n                # ax1 = fig.add_subplot(121)\n                # ax1.spy(Der,precision=step)\n                # ax2 = fig.add_subplot(122)\n                # ax2.spy(DerNum,precision=step)\n                # plt.show()\n\n    def test_nc_domegazetadzeta(self):\n        \"\"\"\n        Variation at colocation points due to geometrical variations at vertices\n        Needs to be tested with a case that actually rotates\n        \"\"\"\n\n        if self.print_info:\n            print('----------------------------- Testing assembly.test_nc_domegazetadzeta')\n\n        MS = self.MS\n        n_surf = MS.n_surf\n\n        # analytical\n        Dervert_list = assembly.nc_domegazetadzeta(MS.Surfs, MS.Surfs_star)\n\n        # allocate numerical\n        # Derlist_num=[]\n        # for ii in range(n_surf):\n        #     sub=[]\n        #     for jj in range(n_surf):\n        #         sub.append(0.0*Dervert_list[ii][jj])\n        #     Derlist_num.append(sub)\n\n        # Store the initial values of the variabes\n        Zeta0 = []\n        Zeta0_star = []\n        N0 = []\n        ZetaC0 = []\n        for ss in range(n_surf):\n            Zeta0.append(MS.Surfs[ss].zeta.copy())\n            ZetaC0.append(MS.Surfs[ss].zetac.copy('F'))\n            Zeta0_star.append(MS.Surfs_star[ss].zeta.copy())\n            N0.append(MS.Surfs[ss].normals.copy())\n\n        # Computation\n        Steps = [1e-2, 1e-4, 1e-6]\n        nsteps = len(Steps)\n        error = np.zeros((nsteps,))\n        for istep in range(nsteps):\n            step = Steps[istep]\n            for ss in range(n_surf):\n                Surf = MS.Surfs[ss]\n                Surf_star = MS.Surfs_star[ss]\n                M, N = Surf.maps.M, Surf.maps.N\n\n                perturb_vector = np.zeros(3 * Surf.maps.Kzeta)\n\n                # PERTURBATION OF THE SURFACE\n                for kk in range(3 * Surf.maps.Kzeta):\n                    # generate a random perturbation between the 90% and the 110% of the step\n                    perturb_vector[kk] += step * (0.2 * np.random.rand() + 0.9)\n                    cc, mm, nn = np.unravel_index(kk, (3, M + 1, N + 1))\n\n                    # perturb bound. vertices and collocation\n                    Surf.zeta = Zeta0[ss].copy()\n                    Surf.zeta[cc, mm, nn] += perturb_vector[kk]\n\n                    # perturb wake TE\n                    if mm == M:\n                        Surf_star.zeta = Zeta0_star[ss].copy()\n                        Surf_star.zeta[cc, 0, nn] += perturb_vector[kk]\n\n                Surf.generate_collocations()\n\n                # COMPUTE THE DERIVATIVES\n                Der_an = np.zeros(Surf.maps.K)\n                Der_an = np.dot(Dervert_list[ss], perturb_vector)\n                Der_num = np.zeros(Surf.maps.K)\n                ipanel = 0\n                skew_omega = algebra.skew(Surf.omega)\n                for mm in range(M):\n                    for nn in range(N):\n                        Der_num[ipanel] = (np.dot(N0[ss][:, mm, nn], np.dot(skew_omega, ZetaC0[ss][:, mm, nn])) -\n                                           np.dot(N0[ss][:, mm, nn], np.dot(skew_omega, Surf.zetac[:, mm, nn])))\n                        ipanel += 1\n\n                # COMPUTE THE ERROR\n                error[istep] = np.maximum(error[istep], np.absolute(Der_num - Der_an).max())\n\n            if self.print_info:\n                print('FD step: %.2e ---> Max error: %.2e' % (step, error[istep]))\n            assert error[istep] < 5e1 * step, 'Error larger than 50 times the step size'\n\n            if istep > 0:\n                assert error[istep] <= error[istep - 1], \\\n                    'Error not decreasing as FD step size is reduced'\n\n        if self.print_info:\n            print('------------------------------------------------------------ OK')\n\n    def test_dfqsdgamma_vrel0(self):\n\n        if self.print_info:\n            print('----------------------------- Testing assembly.dfqsdgamma_vrel0')\n\n        MS = self.MS\n        n_surf = MS.n_surf\n\n        Der_list, Der_star_list = assembly.dfqsdgamma_vrel0(MS.Surfs, MS.Surfs_star)\n        Er_max = []\n        Er_max_star = []\n\n        Steps = [1e-2, 1e-4, 1e-6, ]\n\n        for ss in range(n_surf):\n\n            Der_an = Der_list[ss]\n            Der_star_an = Der_star_list[ss]\n\n            Surf = MS.Surfs[ss]\n            Surf_star = MS.Surfs_star[ss]\n            M, N = Surf.maps.M, Surf.maps.N\n            K = Surf.maps.K\n\n            fqs0 = Surf.fqs.copy()\n            gamma0 = Surf.gamma.copy()\n\n            for step in Steps:\n                Der_num = 0.0 * Der_an\n                Der_star_num = 0.0 * Der_star_an\n\n                ### Bound\n                for pp in range(K):\n                    mm = Surf.maps.ind_2d_pan_scal[0][pp]\n                    nn = Surf.maps.ind_2d_pan_scal[1][pp]\n                    Surf.gamma = gamma0.copy()\n                    Surf.gamma[mm, nn] += step\n                    Surf.get_joukovski_qs(gammaw_TE=Surf_star.gamma[0, :])\n                    df = (Surf.fqs - fqs0) / step\n                    Der_num[:, pp] = df.reshape(-1, order='C')\n\n                er_max = np.max(np.abs(Der_an - Der_num))\n                if self.print_info:\n                    print('Surface %.2d - bound:' % ss)\n                    print('FD step: %.2e ---> Max error: %.2e' % (step, er_max))\n                assert er_max < 5e1 * step, 'Error larger than 50 times step size'\n                Er_max.append(er_max)\n\n                ### Wake\n                Surf.gamma = gamma0.copy()\n                gammaw_TE0 = Surf_star.gamma[0, :].copy()\n                M_star, N_star = Surf_star.maps.M, Surf_star.maps.N\n                K_star = Surf_star.maps.K\n                for nn in range(N):\n                    pp = np.ravel_multi_index((0, nn), (M_star, N_star))\n\n                    gammaw_TE = gammaw_TE0.copy()\n                    gammaw_TE[nn] += step\n                    Surf.get_joukovski_qs(gammaw_TE=gammaw_TE)\n                    df = (Surf.fqs - fqs0) / step\n                    Der_star_num[:, pp] = df.reshape(-1, order='C')\n\n                er_max = np.max(np.abs(Der_star_an - Der_star_num))\n                if self.print_info:\n                    print('Surface %.2d - wake:' % ss)\n                    print('FD step: %.2e ---> Max error: %.2e' % (step, er_max))\n                assert er_max < 5e1 * step, 'Error larger than 50 times step size'\n                Er_max_star.append(er_max)\n            Surf.gamma = gamma0.copy()\n\n            ### Warning: this test fails: the dependency on gamma is linear, hence\n            # great accuracy is obtained even with large steps. In fact, reducing\n            # the step quickly introduced round-off error.\n\n            # # assert error decreases with step size\n            # for ii in range(1,len(Steps)):\n            #     assert Er_max[ii]<Er_max[ii-1],\\\n            #                     'Error not decreasing as FD step size is reduced'\n            #     assert Er_max_star[ii]<Er_max_star[ii-1],\\\n            #                     'Error not decreasing as FD step size is reduced'\n\n    def test_dfqsdzeta_vrel0(self):\n        \"\"\"\n        Note: the get_joukovski_qs method re-computes the induced velocity\n        at the panel segments. A copy of Surf is required to ensure that other\n        tests are not affected.\n        \"\"\"\n\n        if self.print_info:\n            print('------------------------------ Testing assembly.dfqsdzeta_vrel0')\n\n        MS = self.MS\n        n_surf = MS.n_surf\n\n        Der_list = assembly.dfqsdzeta_vrel0(MS.Surfs, MS.Surfs_star)\n        Er_max = []\n\n        Steps = [1e-2, 1e-4, 1e-6, ]\n\n        for ss in range(n_surf):\n\n            Der_an = Der_list[ss]\n\n            Surf = copy.deepcopy(MS.Surfs[ss])\n            # Surf_star=MS.Surfs_star[ss]\n            M, N = Surf.maps.M, Surf.maps.N\n            K = Surf.maps.K\n            Kzeta = Surf.maps.Kzeta\n\n            fqs0 = Surf.fqs.copy()\n            zeta0 = Surf.zeta.copy()\n\n            for step in Steps:\n                Der_num = 0.0 * Der_an\n\n                for kk in range(3 * Kzeta):\n                    Surf.zeta = zeta0.copy()\n                    ind_3d = np.unravel_index(kk, (3, M + 1, N + 1))\n                    Surf.zeta[ind_3d] += step\n                    Surf.get_joukovski_qs(gammaw_TE=MS.Surfs_star[ss].gamma[0, :])\n                    df = (Surf.fqs - fqs0) / step\n                    Der_num[:, kk] = df.reshape(-1, order='C')\n\n                er_max = np.max(np.abs(Der_an - Der_num))\n                if self.print_info:\n                    print('Surface %.2d - bound:' % ss)\n                    print('FD step: %.2e ---> Max error: %.2e' % (step, er_max))\n                assert er_max < 5e1 * step, 'Error larger than 50 times step size'\n                Er_max.append(er_max)\n\n    def test_dfqsdzeta_omega(self):\n        \"\"\"\n        Note: the get_joukovski_qs method re-computes the induced velocity\n        at the panel segments. A copy of Surf is required to ensure that other\n        tests are not affected.\n        Needs to be tested with a case that actually rotates\n        \"\"\"\n\n        if self.print_info:\n            print('------------------------------ Testing assembly.dfqsdzeta_omega')\n\n        # rename\n        MS = self.MS\n        n_surf = MS.n_surf\n\n        # Compute the anaytical derivative of the case\n        Der_an_list = assembly.dfqsdzeta_omega(MS.Surfs, MS.Surfs_star)\n\n        # Initialize\n        Er_max = []\n\n        # Define steps to run\n        Steps = [1e-2, 1e-4, 1e-6, ]\n\n        for ss in range(n_surf):\n            # Select the surface with the analytica derivatives\n            Der_an = Der_an_list[ss]\n\n            # Copy to avoid modifying the original for other tests\n            Surf = copy.deepcopy(MS.Surfs[ss])\n            # Define variables\n            M, N = Surf.maps.M, Surf.maps.N\n            K = Surf.maps.K\n            Kzeta = Surf.maps.Kzeta\n\n            # Save the reference values at equilibrium\n            fqs0 = Surf.fqs.copy()\n            zeta0 = Surf.zeta.copy()\n            u_input_seg0 = Surf.u_input_seg.copy()\n\n            for step in Steps:\n                # Initialize\n                Der_num = 0.0 * Der_an\n\n                # Loop through the different grid modifications (three directions per vertex point)\n                for kk in range(3 * Kzeta):\n                    # Initialize to remove previous movements\n                    Surf.zeta = zeta0.copy()\n                    # Define DoFs where modifications will take place and modify the grid\n                    ind_3d = np.unravel_index(kk, (3, M + 1, N + 1))\n                    Surf.zeta[ind_3d] += step\n                    # Recompute get_ind_velocities_at_segments and recover the previous grid\n                    Surf.get_input_velocities_at_segments()\n                    Surf.zeta = zeta0.copy()\n                    # Compute new forces\n                    Surf.get_joukovski_qs(gammaw_TE=MS.Surfs_star[ss].gamma[0, :])\n                    df = (Surf.fqs - fqs0) / step\n                    Der_num[:, kk] = df.reshape(-1, order='C')\n\n                er_max = np.max(np.abs(Der_an - Der_num))\n                if self.print_info:\n                    print('Surface %.2d - bound:' % ss)\n                    print('FD step: %.2e ---> Max error: %.2e' % (step, er_max))\n                assert er_max < 5e1 * step, 'Error larger than 50 times step size'\n                Er_max.append(er_max)\n\n    def test_dfqsduinput(self):\n        \"\"\"\n        Step change in input velocity is allocated to both u_ext and zeta_dot\n        \"\"\"\n\n        if self.print_info:\n            print('---------------------------------- Testing assembly.dfqsduinput')\n\n        MS = self.MS\n        n_surf = MS.n_surf\n\n        Der_list = assembly.dfqsduinput(MS.Surfs, MS.Surfs_star)\n        Er_max = []\n\n        Steps = [1e-2, 1e-4, 1e-6, ]\n\n        for ss in range(n_surf):\n\n            Der_an = Der_list[ss]\n\n            # Surf=copy.deepcopy(MS.Surfs[ss])\n            Surf = MS.Surfs[ss]\n            # Surf_star=MS.Surfs_star[ss]\n            M, N = Surf.maps.M, Surf.maps.N\n            K = Surf.maps.K\n            Kzeta = Surf.maps.Kzeta\n\n            fqs0 = Surf.fqs.copy()\n            u_ext0 = Surf.u_ext.copy()\n            zeta_dot0 = Surf.zeta_dot.copy()\n\n            for step in Steps:\n                Der_num = 0.0 * Der_an\n\n                for kk in range(3 * Kzeta):\n                    Surf.u_ext = u_ext0.copy()\n                    Surf.zeta_dot = zeta_dot0.copy()\n\n                    ind_3d = np.unravel_index(kk, (3, M + 1, N + 1))\n                    Surf.u_ext[ind_3d] += 0.5 * step\n                    Surf.zeta_dot[ind_3d] += -0.5 * step\n\n                    Surf.get_input_velocities_at_segments()\n                    Surf.get_joukovski_qs(gammaw_TE=MS.Surfs_star[ss].gamma[0, :])\n                    df = (Surf.fqs - fqs0) / step\n                    Der_num[:, kk] = df.reshape(-1, order='C')\n\n                er_max = np.max(np.abs(Der_an - Der_num))\n                if self.print_info:\n                    print('Surface %.2d - bound:' % ss)\n                    print('FD step: %.2e ---> Max error: %.2e' % (step, er_max))\n                assert er_max < 5e1 * step, 'Error larger than 50 times step size'\n                Er_max.append(er_max)\n\n    def test_dfqsdvind_gamma(self):\n\n        if self.print_info:\n            print('------------------------------ Testing assembly.dfqsdvind_gamma')\n\n        MS = self.MS\n        n_surf = MS.n_surf\n\n        # analytical\n        Der_list, Der_star_list = assembly.dfqsdvind_gamma(MS.Surfs, MS.Surfs_star)\n\n        # allocate numerical\n        Der_list_num = []\n        Der_star_list_num = []\n        for ii in range(n_surf):\n            sub = []\n            sub_star = []\n            for jj in range(n_surf):\n                sub.append(0.0 * Der_list[ii][jj])\n                sub_star.append(0.0 * Der_star_list[ii][jj])\n            Der_list_num.append(sub)\n            Der_star_list_num.append(sub_star)\n\n        # store reference circulation and force\n        Gamma0 = []\n        Gammaw0 = []\n        Fqs0 = []\n        for ss in range(n_surf):\n            Gamma0.append(MS.Surfs[ss].gamma.copy())\n            Gammaw0.append(MS.Surfs_star[ss].gamma.copy())\n            Fqs0.append(MS.Surfs[ss].fqs.copy())\n\n        # calculate vis FDs\n        # Steps=[1e-2,1e-4,1e-6,]\n        Steps = [1e-5, ]\n        step = Steps[0]\n\n        ###### bound\n        for ss_in in range(n_surf):\n            Surf_in = MS.Surfs[ss_in]\n\n            # perturb\n            for pp in range(Surf_in.maps.K):\n                mm = Surf_in.maps.ind_2d_pan_scal[0][pp]\n                nn = Surf_in.maps.ind_2d_pan_scal[1][pp]\n                Surf_in.gamma = Gamma0[ss_in].copy()\n                Surf_in.gamma[mm, nn] += step\n\n                # recalculate induced velocity everywhere\n                MS.get_ind_velocities_at_segments(overwrite=True)\n                # restore circulation: (include only induced velocity contrib.)\n                Surf_in.gamma = Gamma0[ss_in].copy()\n\n                # estimate derivatives\n                for ss_out in range(n_surf):\n                    Surf_out = MS.Surfs[ss_out]\n                    fqs0 = Fqs0[ss_out].copy()\n                    Surf_out.get_joukovski_qs(\n                        gammaw_TE=MS.Surfs_star[ss_out].gamma[0, :])\n                    df = (Surf_out.fqs - fqs0) / step\n                    Der_list_num[ss_out][ss_in][:, pp] = df.reshape(-1, order='C')\n\n        ###### wake\n        for ss_in in range(n_surf):\n            Surf_in = MS.Surfs_star[ss_in]\n\n            # perturb\n            for pp in range(Surf_in.maps.K):\n                mm = Surf_in.maps.ind_2d_pan_scal[0][pp]\n                nn = Surf_in.maps.ind_2d_pan_scal[1][pp]\n                Surf_in.gamma = Gammaw0[ss_in].copy()\n                Surf_in.gamma[mm, nn] += step\n\n                # recalculate induced velocity everywhere\n                MS.get_ind_velocities_at_segments(overwrite=True)\n                # restore circulation: (include only induced velocity contrib.)\n                Surf_in.gamma = Gammaw0[ss_in].copy()\n\n                # estimate derivatives\n                for ss_out in range(n_surf):\n                    Surf_out = MS.Surfs[ss_out]\n                    fqs0 = Fqs0[ss_out].copy()\n                    Surf_out.get_joukovski_qs(\n                        gammaw_TE=MS.Surfs_star[ss_out].gamma[0, :])  # <--- gammaw_0 needs to be used here!\n                    df = (Surf_out.fqs - fqs0) / step\n                    Der_star_list_num[ss_out][ss_in][:, pp] = df.reshape(-1, order='C')\n\n        ### check error\n        Er_max = []\n        Er_max_star = []\n        for ss_out in range(n_surf):\n            for ss_in in range(n_surf):\n                Der_an = Der_list[ss_out][ss_in]\n                Der_num = Der_list_num[ss_out][ss_in]\n                ErMat = Der_an - Der_num\n                ermax = np.max(np.abs(ErMat))\n                if self.print_info:\n                    print('Bound%.2d->Bound%.2d\\tFDstep\\tError' % (ss_in, ss_out))\n                    print('\\t\\t\\t%.1e\\t%.1e' % (step, ermax))\n                assert ermax < 50 * step, 'Test failed!'\n\n                Der_an = Der_star_list[ss_out][ss_in]\n                Der_num = Der_star_list_num[ss_out][ss_in]\n                ErMat = Der_an - Der_num\n                ermax = np.max(np.abs(ErMat))\n                if self.print_info:\n                    print('Wake%.2d->Bound%.2d\\tFDstep\\tError' % (ss_in, ss_out))\n                    print('\\t\\t\\t%.1e\\t%.1e' % (step, ermax))\n                assert ermax < 50 * step, 'Test failed!'\n\n                # fig = plt.figure('Spy Der',figsize=(10,4))\n                # ax1 = fig.add_subplot(111)\n                # ax1.spy(ErMat,precision=50*step)\n                # plt.show()\n\n    def test_dvinddzeta(self):\n        \"\"\"\n        For each output surface, there induced velocity is computed, all other\n        surfaces are looped.\n        For wakes, only TE is displaced.\n        \"\"\"\n\n        def comp_vind(zetac, MS):\n            # comute induced velocity\n            V = np.zeros((3,))\n            for ss in range(n_surf):\n                Surf_in = MS.Surfs[ss]\n                Surf_star_in = MS.Surfs_star[ss]\n                V += Surf_in.get_induced_velocity(zetac)\n                V += Surf_star_in.get_induced_velocity(zetac)\n            return V\n\n        if self.print_info:\n            print('----------------------------------- Testing assembly.dvinddzeta')\n\n        MS = self.MS\n        n_surf = MS.n_surf\n        zetac = .5 * (MS.Surfs[0].zeta[:, 1, 2] + MS.Surfs[0].zeta[:, 1, 3])\n\n        Dercoll = np.zeros((3, 3))\n        Dervert_list = []\n        for ss_in in range(n_surf):\n            dcoll_b, dvert_b = assembly.dvinddzeta(zetac, MS.Surfs[ss_in], IsBound=True)\n            dcoll_w, dvert_w = assembly.dvinddzeta(zetac, MS.Surfs_star[ss_in],\n                                                   IsBound=False, M_in_bound=MS.Surfs[ss_in].maps.M)\n            Dercoll += dcoll_b + dcoll_w\n            Dervert_list.append(dvert_b + dvert_w)\n\n        # allocate numerical\n        Dercoll_num = np.zeros((3, 3))\n        Dervert_list_num = []\n        for ii in range(n_surf):\n            Dervert_list_num.append(0.0 * Dervert_list[ii])\n\n        # store reference grid\n        Zeta0 = []\n        Zeta0_star = []\n        for ss in range(n_surf):\n            Zeta0.append(MS.Surfs[ss].zeta.copy())\n            Zeta0_star.append(MS.Surfs_star[ss].zeta.copy())\n        V0 = comp_vind(zetac, MS)\n\n        # calculate vis FDs\n        # Steps=[1e-2,1e-4,1e-6,]\n        Steps = [1e-6, ]\n        step = Steps[0]\n\n        ### vertices\n        for ss_in in range(n_surf):\n            Surf_in = MS.Surfs[ss_in]\n            Surf_star_in = MS.Surfs_star[ss_in]\n            M_in, N_in = Surf_in.maps.M, Surf_in.maps.N\n\n            # perturb\n            for kk in range(3 * Surf_in.maps.Kzeta):\n                cc, mm, nn = np.unravel_index(kk, (3, M_in + 1, N_in + 1))\n\n                # perturb bound\n                Surf_in.zeta = Zeta0[ss_in].copy()\n                Surf_in.zeta[cc, mm, nn] += step\n                # perturb wake TE\n                if mm == M_in:\n                    Surf_star_in.zeta = Zeta0_star[ss_in].copy()\n                    Surf_star_in.zeta[cc, 0, nn] += step\n\n                # recalculate induced velocity everywhere\n                Vnum = comp_vind(zetac, MS)\n                dv = (Vnum - V0) / step\n                Dervert_list_num[ss_in][:, kk] = dv.reshape(-1, order='C')\n\n                # restore\n                Surf_in.zeta = Zeta0[ss_in].copy()\n                if mm == M_in:\n                    Surf_star_in.zeta = Zeta0_star[ss_in].copy()\n\n        ### check error at colloc\n        Dercoll_num = np.zeros((3, 3))\n        for cc in range(3):\n            zetac_pert = zetac.copy()\n            zetac_pert[cc] += step\n            Vnum = comp_vind(zetac_pert, MS)\n            Dercoll_num[:, cc] = (Vnum - V0) / step\n        ercoll = np.max(np.abs(Dercoll - Dercoll_num))\n        if self.print_info:\n            print('Error coll.\\tFDstep\\tErrAbs')\n            print('\\t\\t%.1e\\t%.1e' % (step, ercoll))\n        # if ercoll>10*step: embed()\n        assert ercoll < 10 * step, 'Error at collocation point'\n\n        ### check error at vert\n        for ss_in in range(n_surf):\n            Der_an = Dervert_list[ss_in]\n            Der_num = Dervert_list_num[ss_in]\n            ermax, ErAbs, ErRel = max_error_tensor(Der_an, Der_num)\n\n            # max absolute error\n            ermax = np.max(ErAbs)\n            # relative error at max abs error point\n            iimax = np.unravel_index(np.argmax(ErAbs), ErAbs.shape)\n            ermax_rel = ErRel[iimax]\n            if self.print_info:\n                print('Bound and wake%.2d\\tFDstep\\tErrAbs\\tErrRel' % ss_in)\n                print('\\t\\t\\t%.1e\\t%.1e\\t%.1e' % (step, ermax, ermax_rel))\n            assert ercoll < 10 * step, 'Error at vertices'\n\n            # fig=plt.figure('Spy Er vs coll derivs',figsize=(12,4))\n            # ax1=fig.add_subplot(121)\n            # ax1.spy(ErAbs,precision=1e2*step)\n            # ax1.set_title('error abs %d' %(ss_in))\n            # ax2=fig.add_subplot(122)\n            # ax2.spy(ErRel,precision=1e2*step)\n            # ax2.set_title('error rel %d' %(ss_in))\n            # #plt.show()\n            # plt.close()\n\n    def test_dfqsdvind_zeta(self):\n        \"\"\"\n        For each output surface, there induced velocity is computed, all other\n        surfaces are looped.\n        For wakes, only TE is displaced.\n        \"\"\"\n\n        if self.print_info:\n            print('------------------------------- Testing assembly.dfqsdvind_zeta')\n\n        MS = self.MS\n        n_surf = MS.n_surf\n\n        # analytical\n        Dercoll_list, Dervert_list = assembly.dfqsdvind_zeta(MS.Surfs, MS.Surfs_star)\n\n        # allocate numerical\n        Derlist_num = []\n        for ii in range(n_surf):\n            sub = []\n            for jj in range(n_surf):\n                sub.append(0.0 * Dervert_list[ii][jj])\n            Derlist_num.append(sub)\n\n        # store reference circulation and force\n        Zeta0 = []\n        Zeta0_star = []\n        Fqs0 = []\n        for ss in range(n_surf):\n            Zeta0.append(MS.Surfs[ss].zeta.copy())\n            Zeta0_star.append(MS.Surfs_star[ss].zeta.copy())\n            Fqs0.append(MS.Surfs[ss].fqs.copy())\n\n        # calculate vis FDs\n        # Steps=[1e-2,1e-4,1e-6,]\n        Steps = [1e-6, ]\n        step = Steps[0]\n\n        ### loop input surfs\n        for ss_in in range(n_surf):\n            Surf_in = MS.Surfs[ss_in]\n            Surf_star_in = MS.Surfs_star[ss_in]\n            M_in, N_in = Surf_in.maps.M, Surf_in.maps.N\n\n            # perturb\n            for kk in range(3 * Surf_in.maps.Kzeta):\n                cc, mm, nn = np.unravel_index(kk, (3, M_in + 1, N_in + 1))\n\n                # perturb bound\n                Surf_in.zeta = Zeta0[ss_in].copy()\n                Surf_in.zeta[cc, mm, nn] += step\n                # perturb wake TE\n                if mm == M_in:\n                    Surf_star_in.zeta = Zeta0_star[ss_in].copy()\n                    Surf_star_in.zeta[cc, 0, nn] += step\n\n                # recalculate induced velocity everywhere\n                MS.get_ind_velocities_at_segments(overwrite=True)\n                # restore zeta: (include only induced velocity contrib.)\n                Surf_in.zeta = Zeta0[ss_in].copy()\n                Surf_star_in.zeta = Zeta0_star[ss_in].copy()\n                # estimate derivatives\n                for ss_out in range(n_surf):\n                    Surf_out = MS.Surfs[ss_out]\n                    fqs0 = Fqs0[ss_out].copy()\n                    Surf_out.get_joukovski_qs(\n                        gammaw_TE=MS.Surfs_star[ss_out].gamma[0, :])\n                    df = (Surf_out.fqs - fqs0) / step\n                    Derlist_num[ss_out][ss_in][:, kk] = df.reshape(-1, order='C')\n\n        ### check error\n        for ss_out in range(n_surf):\n            for ss_in in range(n_surf):\n                Der_an = Dervert_list[ss_out][ss_in].copy()\n                if ss_in == ss_out:\n                    Der_an = Der_an + Dercoll_list[ss_out]\n                Der_num = Derlist_num[ss_out][ss_in]\n                ermax, ErAbs, ErRel = max_error_tensor(Der_an, Der_num)\n\n                # max absolute error\n                ermax = np.max(ErAbs)\n                # relative error at max abs error point\n                iimax = np.unravel_index(np.argmax(ErAbs), ErAbs.shape)\n                ermax_rel = ErRel[iimax]\n\n                if self.print_info:\n                    print('Bound%.2d->Bound%.2d\\tFDstep\\tErrAbs\\tErrRel' % (ss_in, ss_out))\n                    print('\\t\\t\\t%.1e\\t%.1e\\t%.1e' % (step, ermax, ermax_rel))\n                assert ermax < 5e2 * step and ermax_rel < 50 * step, 'Test failed!'\n\n                # fig=plt.figure('Spy Er vs coll derivs',figsize=(12,4))\n\n                # ax1=fig.add_subplot(131)\n                # ax1.spy(ErAbs,precision=1e2*step)\n                # ax1.set_title('error abs %d to %d' %(ss_in,ss_out))\n\n                # ax2=fig.add_subplot(132)\n                # ax2.spy(ErRel,precision=1e2*step)\n                # ax2.set_title('error rel %d to %d' %(ss_in,ss_out))\n\n                # ax3=fig.add_subplot(133)\n                # ax3.spy(Dercoll_list[ss_out],precision=50*step)\n                # ax3.set_title('Dcoll an. %d to %d' %(ss_out,ss_out))\n                # #plt.show()\n                # plt.close()\n\n    def test_dfunstdgamma_dot(self):\n        \"\"\"\n        Test derivative of unsteady aerodynamic force with respect to changes in\n        panel circulation.\n\n        Warning: test assumes the derivative of the unsteady force only depends on\n        Gamma_dot, which is true only for steady-state linearisation points\n        \"\"\"\n\n        MS = self.MS\n        Ders_an = assembly.dfunstdgamma_dot(MS.Surfs)\n\n        step = 1e-6\n        Ders_num = []\n        n_surf = len(MS.Surfs)\n        for ss in range(n_surf):\n\n            Surf = MS.Surfs[ss]\n            Kzeta, K = Surf.maps.Kzeta, Surf.maps.K\n            M, N = Surf.maps.M, Surf.maps.N\n\n            Dnum = np.zeros((3 * Kzeta, K))\n\n            # get refernce values\n            Surf.get_joukovski_unsteady()\n            Gamma_dot0 = Surf.gamma_dot.copy()\n            F0 = Surf.funst.copy()\n\n            for pp in range(K):\n                mm, nn = np.unravel_index(pp, (M, N))\n\n                Surf.gamma_dot = Gamma_dot0.copy()\n                Surf.gamma_dot[mm, nn] += step\n                Surf.get_joukovski_unsteady()\n\n                dF = (Surf.funst - F0) / step\n                Dnum[:, pp] = dF.reshape(-1)\n\n            # restore\n            Surf.gamma_dot = Gamma_dot0.copy()\n\n            ### verify\n            ermax, ErAbs, ErRel = max_error_tensor(Ders_an[ss], Dnum)\n\n            # max absolute error\n            ermax = np.max(ErAbs)\n            # relative error at max abs error point\n            iimax = np.unravel_index(np.argmax(ErAbs), ErAbs.shape)\n            ermax_rel = ErRel[iimax]\n\n            if self.print_info:\n                print('Bound%.2d\\t\\t\\tFDstep\\tErrAbs\\tErrRel' % (ss,))\n                print('\\t\\t\\t%.1e\\t%.1e\\t%.1e' % (step, ermax, ermax_rel))\n            assert ermax < 5e2 * step and ermax_rel < 50 * step, 'Test failed!'\n\n    def test_wake_prop(self):\n\n        self.start_writer()\n        MS = self.MS\n        C_list, Cstar_list = assembly.wake_prop(MS)\n\n        n_surf = len(MS.Surfs)\n        for ss in range(n_surf):\n            Surf = MS.Surfs[ss]\n            Surf_star = MS.Surfs_star[ss]\n            N = Surf.maps.N\n            K_star = Surf_star.maps.K\n            C = C_list[ss]\n            Cstar = Cstar_list[ss]\n\n            # add noise to circulations\n            gamma = Surf.gamma + np.random.rand(*Surf.gamma.shape)\n            gamma_star = Surf_star.gamma + np.random.rand(*Surf_star.gamma.shape)\n\n            gvec = np.dot(C, gamma.reshape(-1)) + np.dot(Cstar, gamma_star.reshape(-1))\n\n            gvec_ref = np.concatenate((gamma[-1, :], gamma_star[:-1, :].reshape(-1)))\n\n            assert np.max(np.abs(gvec - gvec_ref)) < 1e-15, \\\n                'Prop. from trailing edge not correct'\n\n\n    def start_writer(self):\n        # Over write writer with print_file False to avoid I/O errors\n        global cout_wrap\n        cout_wrap = cout.Writer()\n        # cout_wrap.initialise(print_screen=False, print_file=False)\n        cout_wrap.cout_quiet()\n        sharpy.utils.cout_utils.cout_wrap = cout_wrap\n\n\n    def tearDown(self):\n        cout.finish_writer()\n\n\nif __name__ == '__main__':\n    unittest.main()\n"
  },
  {
    "path": "tests/linear/control_surfaces/__init__.py",
    "content": ""
  },
  {
    "path": "tests/linear/control_surfaces/test_control_surfaces.py",
    "content": "import numpy as np\nimport os\nimport unittest\nimport sharpy.cases.templates.flying_wings as wings\nimport sharpy.sharpy_main\nimport pickle\n\n\n# @unittest.skip('Control Surface Test for visual inspection')\nclass TestGolandControlSurface(unittest.TestCase):\n\n\n    def setup(self):\n        self.deflection_degrees = 5\n        # Problem Set up\n        u_inf = 1.\n        alpha_deg = 0.\n        rho = 1.02\n        num_modes = 2\n\n        # Lattice Discretisation\n        M = 4\n        N = 16\n        M_star_fact = 1\n\n        # Linear UVLM settings\n        integration_order = 2\n        remove_predictor = False\n        use_sparse = True\n\n        # Case Admin - Create results folders\n        case_name = 'goland_cs'\n        case_nlin_info = 'M%dN%dMs%d_nmodes%d' % (M, N, M_star_fact, num_modes)\n\n        case_name += case_nlin_info\n\n        self.route_test_dir = os.path.abspath(os.path.dirname(os.path.realpath(__file__)))\n        fig_folder = self.route_test_dir + '/figures/'\n        os.makedirs(fig_folder, exist_ok=True)\n\n        # SHARPy nonlinear reference solution\n        ws = wings.GolandControlSurface(M=M,\n                                        N=N,\n                                        Mstar_fact=M_star_fact,\n                                        u_inf=u_inf,\n                                        alpha=alpha_deg,\n                                        cs_deflection=[0, 0],\n                                        rho=rho,\n                                        sweep=0,\n                                        physical_time=2,\n                                        n_surfaces=2,\n                                        route=self.route_test_dir + '/cases',\n                                        case_name=case_name)\n\n        ws.gust_intensity = 0.01\n        ws.sigma = 1\n\n        ws.clean_test_files()\n        ws.update_derived_params()\n        ws.set_default_config_dict()\n\n        # Full moving control surface on the right wing\n        ws.control_surface_chord[0] = M\n        ws.control_surface_hinge_coord[0] = 0.5\n        ws.control_surface[4, :] = 1\n\n        ws.generate_aero_file()\n        ws.generate_fem_file()\n\n        x0 = np.zeros(256)\n        lin_tsteps = 10\n        u_vec = np.zeros((lin_tsteps, 8))\n        # elevator\n        u_vec[:, 4] = self.deflection_degrees * np.pi / 180\n        np.savetxt(self.route_test_dir + '/cases/elevator.txt', u_vec[:, 4])\n        ws.create_linear_files(x0, u_vec)\n\n        ws.config['SHARPy'] = {\n            'flow':\n                ['BeamLoader', 'AerogridLoader',\n                 'StaticCoupled',\n                 'AerogridPlot',\n                 'BeamPlot',\n                 'Modal',\n                 'LinearAssembler',\n                 # 'FrequencyResponse',\n                 'LinDynamicSim',\n                 'PickleData',\n                 ],\n            'case': ws.case_name, 'route': ws.route,\n            'write_screen': 'off', 'write_log': 'on',\n            'log_folder': self.route_test_dir + '/output/' + ws.case_name + '/',\n            'log_file': ws.case_name + '.log'}\n\n        ws.config['BeamLoader'] = {\n            'unsteady': 'off',\n            'orientation': ws.quat}\n\n        ws.config['AerogridLoader'] = {\n            'unsteady': 'off',\n            'aligned_grid': 'on',\n            'mstar': ws.Mstar_fact * ws.M,\n            'freestream_dir': ws.u_inf_direction,\n            'wake_shape_generator': 'StraightWake',\n            'wake_shape_generator_input': {'u_inf': ws.u_inf,\n                                           'u_inf_direction': ws.u_inf_direction,\n                                           'dt': ws.dt}}\n\n        ws.config['StaticUvlm'] = {\n            'rho': ws.rho,\n            'velocity_field_generator': 'SteadyVelocityField',\n            'velocity_field_input': {\n                'u_inf': ws.u_inf,\n                'u_inf_direction': ws.u_inf_direction},\n            'rollup_dt': ws.dt,\n            'print_info': 'on',\n            'horseshoe': 'off',\n            'num_cores': 4,\n            'n_rollup': 0,\n            'rollup_aic_refresh': 0,\n            'rollup_tolerance': 1e-4}\n\n        ws.config['StaticCoupled'] = {\n            'print_info': 'on',\n            'max_iter': 200,\n            'n_load_steps': 1,\n            'tolerance': 1e-10,\n            'relaxation_factor': 0.,\n            'aero_solver': 'StaticUvlm',\n            'aero_solver_settings': {\n                'rho': ws.rho,\n                'print_info': 'off',\n                'horseshoe': 'off',\n                'num_cores': 4,\n                'n_rollup': 0,\n                'rollup_dt': ws.dt,\n                'rollup_aic_refresh': 1,\n                'rollup_tolerance': 1e-4,\n                'velocity_field_generator': 'SteadyVelocityField',\n                'velocity_field_input': {\n                    'u_inf': ws.u_inf,\n                    'u_inf_direction': ws.u_inf_direction}},\n            'structural_solver': 'NonLinearStatic',\n            'structural_solver_settings': {'print_info': 'off',\n                                           'max_iterations': 150,\n                                           'num_load_steps': 4,\n                                           'delta_curved': 1e-1,\n                                           'min_delta': 1e-10,\n                                           'gravity_on': 'on',\n                                           'gravity': 9.81}}\n\n        ws.config['AerogridPlot'] = {'include_rbm': 'off',\n                                     'include_applied_forces': 'on',\n                                     'minus_m_star': 0}\n\n        ws.config['AeroForcesCalculator'] = {'write_text_file': 'on',\n                                             'text_file_name': ws.case_name + '_aeroforces.csv',\n                                             'screen_output': 'on',\n                                             'unsteady': 'off'}\n\n        ws.config['BeamPlot'] = {'include_rbm': 'off',\n                                 'include_applied_forces': 'on'}\n\n        ws.config['Modal'] = {'NumLambda': 20,\n                              'rigid_body_modes': 'off',\n                              'print_matrices': 'on',\n                              'save_data': 'off',\n                              'rigid_modes_cg': 'off',\n                              'continuous_eigenvalues': 'off',\n                              'dt': 0,\n                              'plot_eigenvalues': False,\n                              'max_rotation_deg': 15.,\n                              'max_displacement': 0.15,\n                              'write_modes_vtk': True,\n                              'use_undamped_modes': True}\n\n        ws.config['LinearAssembler'] = {'linear_system': 'LinearAeroelastic',\n                                        'linear_system_settings': {\n                                            'beam_settings': {'modal_projection': 'on',\n                                                              'inout_coords': 'modes',\n                                                              'discrete_time': 'on',\n                                                              'newmark_damp': 0.5e-4,\n                                                              'discr_method': 'newmark',\n                                                              'dt': ws.dt,\n                                                              'proj_modes': 'undamped',\n                                                              'use_euler': 'off',\n                                                              'num_modes': num_modes,\n                                                              'print_info': 'on',\n                                                              'gravity': 'on',\n                                                              'remove_sym_modes': 'on',\n                                                              'remove_dofs': []},\n                                            'aero_settings': {'dt': ws.dt,\n                                                              'integr_order': integration_order,\n                                                              'density': ws.rho,\n                                                              'remove_predictor': remove_predictor,\n                                                              'use_sparse': use_sparse,\n                                                              'remove_inputs': ['u_gust']},\n                                        }\n                                        }\n\n        ws.config['LinDynamicSim'] = {'n_tsteps': lin_tsteps,\n                                      'dt': ws.dt,\n                                      'input_generators': [{'name': 'control_surface_deflection',\n                                                            'index': 0,\n                                                            'file_path': self.route_test_dir + '/cases/elevator.txt'},\n                                                           {'name': 'control_surface_deflection',\n                                                            'index': 1,\n                                                            'file_path': self.route_test_dir + '/cases/elevator.txt'}],\n                                      'postprocessors': ['AerogridPlot'],\n                                      'postprocessors_settings':\n                                          {'AerogridPlot': {'include_rbm': 'on',\n                                                            'include_applied_forces': 'on',\n                                                            'minus_m_star': 0}, }\n                                      }\n\n        ws.config['PickleData'] = {}\n\n        ws.config.write()\n\n        restart = False # useful for debugging to load pickle\n        if not restart:\n            self.data = sharpy.sharpy_main.main(['', ws.route + ws.case_name + '.sharpy'])\n        else:\n            with open(self.route_test_dir + '/output/' + ws.case_name + '.pkl', 'rb') as f:\n                self.data = pickle.load(f)\n\n    def test_control_surface(self):\n        self.setup()\n\n        for i_surf in range(2):\n            with self.subTest(i_surf=i_surf):\n                zeta = self.data.aero.timestep_info[-1].zeta[i_surf]\n                zeta0 = self.data.linear.tsaero0.zeta[i_surf]\n\n                # zeta indices [(xyz), chord, span]\n                if i_surf == 0:\n                    # Full moving control surface with hinge at c=0.5\n                    zeta_elev = zeta[:, -1, -1] - zeta[:, 0, -1]  # elevator starts at chordwise node 0\n                    zeta_0elev = zeta0[:, -1, -1] - zeta0[:, 0, -1]\n                elif i_surf == 1:\n                    # mirrored surface. span index 0 is the wing tip\n                    zeta_elev = zeta[:, -1, 0] - zeta[:, 2, 0]  # elevator starts at chordwise node 2\n                    zeta_0elev = zeta0[:, -1, 0] - zeta0[:, 2, 0]\n\n                deflection = np.arccos((zeta_elev.dot(zeta_0elev)) / np.linalg.norm(zeta_elev) / np.linalg.norm(zeta_0elev))\n\n                deflection_actual_deg = deflection * 180 / np.pi\n                np.testing.assert_array_almost_equal(self.deflection_degrees, deflection_actual_deg,\n                                                     decimal=2)\n\n    def tearDown(self):\n        import shutil\n        folders = ['cases', 'figures', 'output']\n        for folder in folders:\n            shutil.rmtree(self.route_test_dir + '/' + folder)\n\n\nif __name__ == '__main__':\n    unittest.main()\n"
  },
  {
    "path": "tests/linear/derivatives/__init__.py",
    "content": ""
  },
  {
    "path": "tests/linear/derivatives/test_ders.py",
    "content": "\"\"\"\nTest elementary derivative methods\nS. Maraniello, 4 Jun 2018\n\"\"\"\n\nimport numpy as np\nimport unittest\n\nimport sharpy.aero.utils.uvlmlib\nimport sharpy.linear.src.lib_dbiot as dbiot\nimport sharpy.linear.src.uvlmutils as uvlmutils\n\n\nvortex_radius = 1e-6\n\n\nclass Test_ders(unittest.TestCase):\n    \"\"\"\n    Test methods into assembly module\n    \"\"\"\n    print_info = False  # useful for debugging. Leave False to keep test log clean\n\n    def setUp(self):\n\n        self.zetaP = np.array([3.0, 5.5, 2.0])\n        self.zeta0 = np.array([1.0, 3.0, 0.9])\n        self.zeta1 = np.array([5.0, 3.1, 1.9])\n        self.zeta2 = np.array([4.8, 8.1, 2.5])\n        self.zeta3 = np.array([0.9, 7.9, 1.7])\n\n    def test_dbiot_segment(self):\n        if self.print_info:\n            print('\\n-------------------------------------- Testing dbiot.eval_seg')\n\n        gamma = 2.4\n        zetaP = self.zetaP\n        zetaA = self.zeta1\n        zetaB = self.zeta2\n        Q0 = uvlmutils.biot_segment(zetaP, zetaA, zetaB, vortex_radius, gamma)\n\n        ### compare different analytical derivative\n        DerP_an, DerA_an, DerB_an = dbiot.eval_seg_exp(zetaP, zetaA, zetaB,\n                                                        vortex_radius, gamma)\n        DerP_an2, DerA_an2, DerB_an2 = dbiot.eval_seg_comp(zetaP, zetaA, zetaB,\n                                                           vortex_radius, gamma)\n        er_max = max(np.max(np.abs(DerP_an2 - DerP_an)),\n                     np.max(np.abs(DerA_an2 - DerA_an)),\n                     np.max(np.abs(DerB_an2 - DerB_an)))\n        assert er_max < 1e-16, 'Analytical models not matching'\n\n        ### compare vs numerical derivative\n        Steps = np.linspace(vortex_radius * 0.99, vortex_radius * 1e-2, 4)\n        Er_max = 0.0 * Steps\n        for ss in range(len(Steps)):\n            step = Steps[ss]\n            DerP_num = 0.0 * DerP_an\n            DerA_num = 0.0 * DerA_an\n            DerB_num = 0.0 * DerB_an\n            for cc_zeta in range(3):\n                dzeta = np.zeros((3,))\n                dzeta[cc_zeta] = step\n                DerP_num[:, cc_zeta] = (\n                                               uvlmutils.biot_segment(zetaP + dzeta, zetaA, zetaB, vortex_radius, gamma) - Q0) / step\n                DerA_num[:, cc_zeta] = (\n                                               uvlmutils.biot_segment(zetaP, zetaA + dzeta, zetaB, vortex_radius, gamma) - Q0) / step\n                DerB_num[:, cc_zeta] = (\n                                               uvlmutils.biot_segment(zetaP, zetaA, zetaB + dzeta, vortex_radius, gamma) - Q0) / step\n            er_max = max(np.max(np.abs(DerP_num - DerP_an)),\n                         np.max(np.abs(DerA_num - DerA_an)),\n                         np.max(np.abs(DerB_num - DerB_an)))\n            if self.print_info:\n                print('FD step: %.2e ---> Max error: %.2e' % (step, er_max))\n            assert er_max < 5e1 * step, 'Error larger than 50 times step size'\n            Er_max[ss] = er_max\n\n    def test_dbiot_segment_mid(self):\n        if self.print_info:\n            print('\\n------------------------- Testing dbiot.eval_seg at mid-point')\n\n        gamma = 2.4\n        zetaA = self.zeta1\n        zetaB = self.zeta2\n        zetaP = .3 * zetaA + 0.7 * zetaB\n\n        Q0 = uvlmutils.biot_segment(zetaP, zetaA, zetaB, vortex_radius, gamma)\n\n        ### compare different analytical derivative\n        DerP_an, DerA_an, DerB_an = dbiot.eval_seg_exp(zetaP, zetaA, zetaB, vortex_radius, gamma)\n        DerP_an2, DerA_an2, DerB_an2 = dbiot.eval_seg_comp(zetaP, zetaA, zetaB, gamma)\n        er_max = max(np.max(np.abs(DerP_an2 - DerP_an)),\n                     np.max(np.abs(DerA_an2 - DerA_an)),\n                     np.max(np.abs(DerB_an2 - DerB_an)))\n        assert er_max < 1e-16, 'Analytical models not matching'\n\n        ### compare vs numerical derivative\n        #  first step must be smaller than vortex radius\n        Steps = np.linspace(vortex_radius * 0.99, vortex_radius * 1e-2, 4)\n        Er_max = 0.0 * Steps\n        for ss in range(len(Steps)):\n            step = Steps[ss]\n            DerP_num = 0.0 * DerP_an\n            DerA_num = 0.0 * DerA_an\n            DerB_num = 0.0 * DerB_an\n            for cc_zeta in range(3):\n                dzeta = np.zeros((3,))\n                dzeta[cc_zeta] = step\n                DerP_num[:, cc_zeta] = (\n                                               uvlmutils.biot_segment(zetaP + dzeta, zetaA, zetaB, vortex_radius, gamma) - Q0) / step\n                DerA_num[:, cc_zeta] = (\n                                               uvlmutils.biot_segment(zetaP, zetaA + dzeta, zetaB, vortex_radius, gamma) - Q0) / step\n                DerB_num[:, cc_zeta] = (\n                                               uvlmutils.biot_segment(zetaP, zetaA, zetaB + dzeta, vortex_radius, gamma) - Q0) / step\n            er_max = max(np.max(np.abs(DerP_num - DerP_an)),\n                         np.max(np.abs(DerA_num - DerA_an)),\n                         np.max(np.abs(DerB_num - DerB_an)))\n\n            if self.print_info:\n                print('FD step: %.2e ---> Max error: %.2e' % (step, er_max))\n            assert er_max < 5e1 * step, 'Error larger than 50 times step size'\n            Er_max[ss] = er_max\n\n    def test_dbiot_panel(self):\n        if self.print_info:\n            print('\\n---------------------------------- Testing dbiot.eval_panel_*')\n\n        gamma = 2.4\n        zetaP = self.zetaP\n        zeta0 = self.zeta0\n        zeta1 = self.zeta1\n        zeta2 = self.zeta2\n        zeta3 = self.zeta3\n\n        ZetaPanel = np.array([zeta0, zeta1, zeta2, zeta3])\n        Q0 = uvlmutils.biot_panel(zetaP, ZetaPanel, vortex_radius, gamma)\n\n        # compare analytical derivatives models\n        DerP_an, DerVer_an = dbiot.eval_panel_exp(zetaP, ZetaPanel,\n                                                  vortex_radius, gamma)\n        DerP_an2, DerVer_an2 = dbiot.eval_panel_comp(zetaP, ZetaPanel,\n                                                     vortex_radius, gamma)\n        DerP_an3, DerVer_an3 = dbiot.eval_panel_fast(zetaP, ZetaPanel,\n                                                     vortex_radius, gamma)\n        DerP_an4, DerVer_an4 = sharpy.aero.utils.uvlmlib.eval_panel_cpp(zetaP, ZetaPanel,\n                                                                        vortex_radius,\n                                                                        gamma)\n\n        er_max = max(np.max(np.abs(DerP_an2 - DerP_an)),\n                     np.max(np.abs(DerVer_an2 - DerVer_an)))\n        assert er_max < 1e-16, 'eval_panel_comp not matching with eval_panel_exp'\n        er_max = max(np.max(np.abs(DerP_an3 - DerP_an)),\n                     np.max(np.abs(DerVer_an3 - DerVer_an)))\n        assert er_max < 1e-16, 'eval_panel_fast not matching with eval_panel_exp'\n        er_max = max(np.max(np.abs(DerP_an4 - DerP_an)),\n                     np.max(np.abs(DerVer_an4 - DerVer_an)))\n        assert er_max < 1e-16, 'eval_panel_cpp not matching with eval_panel_exp'\n\n        # compare vs. numerical derivative\n        Steps = np.linspace(vortex_radius * 0.99, vortex_radius * 1e-2, 4)\n        ErP_max = 0.0 * Steps\n        ErVer_max = 0.0 * Steps\n        for ss in range(len(Steps)):\n            step = Steps[ss]\n            DerP_num = 0.0 * DerP_an\n            DerVer_num = 0.0 * DerVer_an\n\n            ### Perturb component\n            for cc in range(3):\n                dzeta = np.zeros((3,))\n                dzeta[cc] = step\n\n                # derivative w.r.t. target point\n                DerP_num[:, cc] = \\\n                    (uvlmutils.biot_panel(zetaP + dzeta, ZetaPanel, vortex_radius, gamma) - Q0) / step\n\n                # derivative w.r.t panel vertices\n                for vv in range(4):\n                    ZetaPanel_pert = ZetaPanel.copy()\n                    ZetaPanel_pert[vv, :] += dzeta\n                    DerVer_num[vv, :, cc] = \\\n                        (uvlmutils.biot_panel(zetaP, ZetaPanel_pert, vortex_radius, gamma) - Q0) / step\n\n            erP_max = np.max(np.abs(DerP_num - DerP_an))\n            erVer_max = np.max(np.abs(DerVer_num - DerVer_an))\n\n            if self.print_info:\n                print('FD step: %.2e ---> Max error (P,Vert): (%.2e,%.2e)' \\\n                      % (step, erP_max, erVer_max))\n            assert erP_max < 5e1 * step, \\\n                'Error w.r.t. zetaP larger than 50 times step size'\n            assert erVer_max < 5e1 * step, \\\n                'Error w.r.t. ZetaPanel larger than 50 times step size'\n            ErP_max[ss] = erP_max\n            ErVer_max[ss] = erVer_max\n\n        # assert monothony\n        for ss in range(len(Steps) - 1):\n            assert ErP_max[ss + 1] < ErP_max[ss], \\\n                'Error of derivative w.r.t. zetaP not decreasing monothonically'\n            assert ErVer_max[ss + 1] < ErVer_max[ss], \\\n                'Error of derivative w.r.t. ZetaPanel not decreasing monothonically'\n\n    def test_dbiot_panel_mid_segment(self):\n\n        if self.print_info:\n            print('\\n-------------- Testing dbiot.eval_panel with zetaP on segment')\n\n        gamma = 2.4\n        zeta0 = self.zeta0\n        zeta1 = self.zeta1\n        zeta2 = self.zeta2\n        zeta3 = self.zeta3\n        zetaP = 0.3 * zeta1 + 0.7 * zeta2\n\n        ZetaPanel = np.array([zeta0, zeta1, zeta2, zeta3])\n        Q0 = uvlmutils.biot_panel(zetaP, ZetaPanel, vortex_radius, gamma)\n\n        # compare analytical derivatives models\n        DerP_an, DerVer_an = dbiot.eval_panel_exp(zetaP, ZetaPanel,\n                                                  vortex_radius, gamma)\n        DerP_an2, DerVer_an2 = dbiot.eval_panel_comp(zetaP, ZetaPanel,\n                                                     vortex_radius, gamma)\n        DerP_an3, DerVer_an3 = dbiot.eval_panel_fast(zetaP, ZetaPanel,\n                                                     vortex_radius, gamma)\n        DerP_an4, DerVer_an4 = sharpy.aero.utils.uvlmlib.eval_panel_cpp(zetaP, ZetaPanel,\n                                                                        vortex_radius,\n                                                                        gamma)\n\n        er_max = max(np.max(np.abs(DerP_an2 - DerP_an)),\n                     np.max(np.abs(DerVer_an2 - DerVer_an)))\n        assert er_max < 1e-16, 'eval_panel_comp not matching with eval_panel_exp'\n        er_max = max(np.max(np.abs(DerP_an3 - DerP_an)),\n                     np.max(np.abs(DerVer_an3 - DerVer_an)))\n        assert er_max < 1e-16, 'eval_panel_fast not matching with eval_panel_exp'\n        er_max = max(np.max(np.abs(DerP_an4 - DerP_an)),\n                     np.max(np.abs(DerVer_an4 - DerVer_an)))\n        assert er_max < 1e-16, 'eval_panel_cpp not matching with eval_panel_exp'\n\n        # compare vs. numerical derivative\n        # first step must be smaller than vortex radius\n        Steps = np.linspace(vortex_radius * 0.99, vortex_radius * 1e-2, 4)\n        ErP_max = 0.0 * Steps\n        ErVer_max = 0.0 * Steps\n        for ss in range(len(Steps)):\n            step = Steps[ss]\n            DerP_num = 0.0 * DerP_an\n            DerVer_num = 0.0 * DerVer_an\n\n            ### Perturb component\n            for cc in range(3):\n                dzeta = np.zeros((3,))\n                dzeta[cc] = step\n\n                # derivative w.r.t. target point\n                DerP_num[:, cc] = \\\n                    (uvlmutils.biot_panel(zetaP + dzeta, ZetaPanel, vortex_radius, gamma) - Q0) / step\n\n                # derivative w.r.t panel vertices\n                for vv in range(4):\n                    ZetaPanel_pert = ZetaPanel.copy()\n                    ZetaPanel_pert[vv, :] += dzeta\n                    DerVer_num[vv, :, cc] = \\\n                        (uvlmutils.biot_panel(zetaP, ZetaPanel_pert, vortex_radius, gamma) - Q0) / step\n\n            erP_max = np.max(np.abs(DerP_num - DerP_an))\n            erVer_max = np.max(np.abs(DerVer_num - DerVer_an))\n\n            if self.print_info:\n                print('FD step: %.2e ---> Max error (P,Vert): (%.2e,%.2e)' \\\n                      % (step, erP_max, erVer_max))\n            assert erP_max < 5e1 * step, \\\n                'Error w.r.t. zetaP larger than 50 times step size'\n            assert erVer_max < 5e1 * step, \\\n                'Error w.r.t. ZetaPanel larger than 50 times step size'\n            ErP_max[ss] = erP_max\n            ErVer_max[ss] = erVer_max\n\n        # assert monothony\n        for ss in range(len(Steps) - 1):\n            assert ErP_max[ss + 1] < ErP_max[ss], \\\n                'Error of derivative w.r.t. zetaP not decreasing monothonically'\n            assert ErVer_max[ss + 1] < ErVer_max[ss], \\\n                'Error of derivative w.r.t. ZetaPanel not decreasing monothonically'\n"
  },
  {
    "path": "tests/linear/derivatives/test_stabilityderivatives.py",
    "content": "import numpy as np\nimport os\nimport unittest\nimport sharpy.cases.templates.flying_wings as wings\nimport sharpy.sharpy_main\nimport h5py\nimport sharpy.utils.h5utils as h5utils\nimport sharpy.utils.algebra as algebra\nimport sharpy.linear.src.libss as libss\n\n\nclass TestLinearDerivatives(unittest.TestCase):\n\n    print_info = False\n\n    def run_sharpy(self, alpha_deg, flow, target_system, not_run=False):\n        # Problem Set up\n        u_inf = 10.\n        rho = 1.02\n        num_modes = 4\n\n        # Lattice Discretisation\n        M = 4\n        N = 4\n        M_star_fact = 10\n\n        # Linear UVLM settings\n        integration_order = 2\n        remove_predictor = False\n        use_sparse = True\n\n        # ROM Properties\n        rom_settings = dict()\n        rom_settings['algorithm'] = 'mimo_rational_arnoldi'\n        rom_settings['r'] = 6\n        rom_settings['single_side'] = 'observability'\n        frequency_continuous_k = np.array([0.])\n\n        # Case Admin - Create results folders\n        case_name = 'wing'\n        if target_system == 'aerodynamic':\n            case_name += '_uvlm'\n        elif target_system == 'aeroelastic':\n            case_name += '_coupled'\n        else:\n            NameError('Unrecognised system')\n\n        case_nlin_info = '_uinf{:04g}_a{:04g}'.format(u_inf*10, alpha_deg*100)\n        case_name += case_nlin_info\n\n        self.route_test_dir = os.path.abspath(os.path.dirname(os.path.realpath(__file__)))\n\n        # SHARPy nonlinear reference solution\n        ws = wings.QuasiInfinite(M=M,\n                                 aspect_ratio=10,\n                                 N=N,\n                                 Mstar_fact=M_star_fact,\n                                 u_inf=u_inf,\n                                 alpha=alpha_deg,\n                                 rho=rho,\n                                 sweep=0,\n                                 n_surfaces=2,\n                                 route=self.route_test_dir + '/cases',\n                                 case_name=case_name)\n\n        ws.gust_intensity = 0.01\n        ws.sigma = 1e-1\n\n        ws.clean_test_files()\n        ws.update_derived_params()\n        ws.set_default_config_dict()\n\n        ws.generate_aero_file()\n        ws.generate_fem_file()\n\n        frequency_continuous_w = 2 * u_inf * frequency_continuous_k / ws.c_ref\n        rom_settings['frequency'] = frequency_continuous_w\n\n        ws.config['SHARPy'] = {\n            'flow': flow,\n            'case': ws.case_name, 'route': ws.route,\n            'write_screen': 'off', 'write_log': 'on',\n            'log_folder': self.route_test_dir + '/output/',\n            'log_file': ws.case_name + '.log'}\n\n        ws.config['BeamLoader'] = {\n            'unsteady': 'off',\n            'orientation': ws.quat}\n\n        ws.config['AerogridLoader'] = {\n            'unsteady': 'off',\n            'aligned_grid': 'on',\n            'mstar': ws.Mstar_fact * ws.M,\n            'freestream_dir': ws.u_inf_direction,\n            'wake_shape_generator': 'StraightWake',\n            'wake_shape_generator_input': {'u_inf': ws.u_inf,\n                                           'u_inf_direction': ws.u_inf_direction,\n                                           'dt': ws.dt}}\n\n        ws.config['StaticUvlm'] = {\n            'rho': ws.rho,\n            'velocity_field_generator': 'SteadyVelocityField',\n            'velocity_field_input': {\n                'u_inf': ws.u_inf,\n                'u_inf_direction': ws.u_inf_direction},\n            'rollup_dt': ws.dt,\n            'print_info': 'on',\n            'horseshoe': 'off',\n            'num_cores': 4,\n            'n_rollup': 0,\n            'rollup_aic_refresh': 0,\n            'rollup_tolerance': 1e-4}\n\n        ws.config['StaticCoupled'] = {\n            'print_info': 'on',\n            'max_iter': 200,\n            'n_load_steps': 1,\n            'tolerance': 1e-10,\n            'relaxation_factor': 0.,\n            'aero_solver': 'StaticUvlm',\n            'aero_solver_settings': {\n                'rho': ws.rho,\n                'print_info': 'off',\n                'horseshoe': 'off',\n                'num_cores': 4,\n                'n_rollup': 0,\n                'rollup_dt': ws.dt,\n                'rollup_aic_refresh': 1,\n                'rollup_tolerance': 1e-4,\n                'velocity_field_generator': 'SteadyVelocityField',\n                'velocity_field_input': {\n                    'u_inf': ws.u_inf,\n                    'u_inf_direction': ws.u_inf_direction}},\n            'structural_solver': 'NonLinearStatic',\n            'structural_solver_settings': {'print_info': 'off',\n                                           'max_iterations': 150,\n                                           'num_load_steps': 4,\n                                           'delta_curved': 1e-1,\n                                           'min_delta': 1e-10,\n                                           'gravity_on': 'off',\n                                           'gravity': 9.81}}\n\n        ws.config['AerogridPlot'] = {'include_rbm': 'off',\n                                     'include_applied_forces': 'on',\n                                     'minus_m_star': 0}\n\n        ws.config['AeroForcesCalculator'] = {'write_text_file': 'on',\n                                             'screen_output': 'on'}\n\n        ws.config['BeamPlot'] = {'include_rbm': 'off',\n                                 'include_applied_forces': 'on'}\n\n        ws.config['BeamCsvOutput'] = {'output_pos': 'on',\n                                      'output_psi': 'on',\n                                      'screen_output': 'on'}\n\n        ws.config['Modal'] = {'print_info': 'on',\n                              'use_undamped_modes': 'on',\n                              'NumLambda': 20,\n                              'rigid_body_modes': 'on',\n                              'write_modes_vtk': 'on',\n                              'print_matrices': 'off',\n                              'save_data': 'on',\n                              'rigid_modes_cg': 'off'}\n\n        settings = {}\n        settings['NonLinearDynamicCoupledStep'] = {'print_info': 'off',\n                                                   'max_iterations': 950,\n                                                   'delta_curved': 1e-1,\n                                                   'min_delta': ws.tolerance,\n                                                   'newmark_damp': 5e-3,\n                                                   'gravity_on': 'on',\n                                                   'gravity': 9.81,\n                                                   'num_steps': 4,\n                                                   'dt': ws.dt,\n                                                   'initial_velocity': u_inf}\n\n        relative_motion = 'off'\n        settings['StepUvlm'] = {'print_info': 'off',\n                                'horseshoe': 'off',\n                                'num_cores': 4,\n                                'n_rollup': 0,\n                                'convection_scheme': 2,\n                                'rollup_dt': ws.dt,\n                                'rollup_aic_refresh': 1,\n                                'rollup_tolerance': 1e-4,\n                                'gamma_dot_filtering': 6,\n                                'vortex_radius': 1e-8,\n                                'velocity_field_generator': 'SteadyVelocityField',\n                                'velocity_field_input': {'u_inf': 0 * u_inf,\n                                                         'u_inf_direction': [1., 0, 0]},\n                                'rho': rho,\n                                'n_time_steps': 1,\n                                'dt': ws.dt}\n\n        solver = 'NonLinearDynamicCoupledStep'\n        ws.config['DynamicCoupled'] = {'structural_solver': solver,\n                                      'structural_solver_settings': settings[solver],\n                                      'aero_solver': 'StepUvlm',\n                                      'aero_solver_settings': settings['StepUvlm'],\n                                      'fsi_substeps': 200,\n                                      'fsi_tolerance': ws.tolerance,\n                                      'relaxation_factor': ws.relaxation_factor,\n                                      'minimum_steps': 1,\n                                      'relaxation_steps': 150,\n                                      'final_relaxation_factor': 0.5,\n                                      'n_time_steps': 1,\n                                      'dt': ws.dt,\n                                      'include_unsteady_force_contribution': 'off',\n                                                                  }\n\n        ws.config['LinearAssembler'] = {'linear_system': 'LinearAeroelastic',\n                                       'linear_system_settings': {\n                                           'track_body': 'off',\n                                           'beam_settings': {'modal_projection': 'on',\n                                                             'inout_coords': 'modes',\n                                                             'discrete_time': 'off',\n                                                             'newmark_damp': 5e-4,\n                                                             'discr_method': 'newmark',\n                                                             'dt': ws.dt,\n                                                             'proj_modes': 'undamped',\n                                                             'use_euler': 'on',\n                                                             'num_modes': 20,\n                                                             'print_info': 'on',\n                                                             'gravity': 'off',\n                                                             'remove_dofs': [],\n                                                             'remove_rigid_states': 'on'},\n                                           'aero_settings': {'dt': ws.dt,\n                                                             # 'ScalingDict': {'density': rho,\n                                                             #                 'length': ws.c_ref * 0.5,\n                                                             #                 'speed': u_inf},\n                                                             'integr_order': 2,\n                                                             'density': rho,\n                                                             'remove_predictor': 'off',\n                                                             'use_sparse': 'off',\n                                                             'vortex_radius': 1e-8,\n                                                             'convert_to_ct': 'on',\n                                                             'remove_inputs': ['u_gust'],\n                                                             # 'rom_method': ['Krylov'],\n                                                             'rom_method_settings': {\n                                                                 'Krylov': {'algorithm': 'mimo_rational_arnoldi',\n                                                                            'frequency': [0.],\n                                                                            'r': 4,\n                                                                            'single_side': 'observability'}}\n                                                             },\n                                           'use_euler': 'on',\n                                       },\n                                       }\n\n        ws.config['FrequencyResponse'] = {'quick_plot': 'off',\n                                          'frequency_unit': 'k',\n                                          'frequency_bounds': [0.0001, 1.0],\n                                          'num_freqs': 100,\n                                          'frequency_spacing': 'log',\n                                          'target_system': ['aeroelastic'],\n                                          }\n\n        ws.config['StabilityDerivatives'] = {'u_inf': ws.u_inf,\n                                             'c_ref': ws.main_chord,\n                                             'b_ref': ws.wing_span,\n                                             'S_ref': ws.wing_span * ws.main_chord,\n                                             }\n\n        ws.config['AsymptoticStability'] = {'print_info': 'on'}\n\n        ws.config['SaveParametricCase'] = {'save_case': 'off',\n                                           'parameters': {'alpha': alpha_deg},\n                                           'save_pmor_items': 'on',\n                                           'save_pmor_subsystems': 'on'}\n\n        ws.config['SaveData'] = {'save_aero': 'off',\n                                 'save_struct': 'off',\n                                 'save_linear': 'on',\n                                 'save_linear_uvlm': 'off',\n                                 'format': 'mat',\n                                 }\n\n        ws.config.write()\n\n        if not not_run:\n            self.data = sharpy.sharpy_main.main(['', ws.route + ws.case_name + '.sharpy'])\n\n        return ws\n\n    def test_derivatives(self):\n        # target_system_list = ['aerodynamic']#, 'aeroelastic']\n        # target_system_list = ['aeroelastic']\n        target_system_list = ['aerodynamic', 'aeroelastic']\n        for system in target_system_list:\n            with self.subTest(target_system=system):\n                self.run_case(target_system=system)\n\n    def run_case(self, target_system):\n\n        if target_system == 'aerodynamic':\n            nonlinear_solver = ['StaticUvlm']\n        elif target_system == 'aeroelastic':\n            nonlinear_solver = ['StaticCoupled']\n        else:\n            NameError('Unrecognised system')\n\n        case_name_db = []\n        not_run = False # for debugging\n        # Reference Case at 4 degrees\n        # Run nonlinear simulation and save linerised ROM\n        alpha_deg_ref = 0\n        alpha0 = alpha_deg_ref * np.pi/180\n        ref = self.run_sharpy(alpha_deg=alpha_deg_ref,\n                              flow=['BeamLoader',\n                                    'AerogridLoader', ] +\n                                   nonlinear_solver +\n                                   ['AeroForcesCalculator',\n                                    'Modal',\n                                    'LinearAssembler',\n                                    # 'AsymptoticStability',\n                                    'StabilityDerivatives',\n                                    'SaveData',\n                                    'SaveParametricCase'],\n                              target_system=target_system,\n                              not_run=False)\n        u_inf = ref.u_inf\n        ref_case_name = ref.case_name\n        case_name_db.append(ref_case_name)\n        qS = 0.5 * ref.rho * u_inf ** 2 * ref.c_ref * ref.wing_span\n        if self.print_info:\n            print(f'Reference span: {ref.wing_span} m')\n            print(f'Reference chord: {ref.main_chord} m')\n            print(f'Aspect ratio: {ref.aspect_ratio}')\n\n        # Run nonlinear cases in the vicinity\n        nonlinear_sim_flow = ['BeamLoader',\n                              'AerogridLoader'] + nonlinear_solver + ['AeroForcesCalculator', 'SaveParametricCase']\n        alpha_deg_min = alpha_deg_ref - 5e-3\n        alpha_deg_max = alpha_deg_ref + 5e-3\n        n_evals = 11\n        alpha_vec = np.linspace(alpha_deg_min, alpha_deg_max, n_evals)\n        nlin_forces_g = np.zeros((n_evals, 3))\n        nlin_forces_a = np.zeros((n_evals, 3))\n        for ith, alpha in enumerate(alpha_vec):\n            if alpha == alpha_deg_ref:\n                case_name = ref_case_name\n                continue\n            else:\n                case = self.run_sharpy(alpha, flow=nonlinear_sim_flow, target_system=target_system, not_run=not_run)\n                case_name_db.append(case.case_name)\n                case_name = case.case_name\n            nlin_forces = np.loadtxt(self.route_test_dir +\n                                     '/output/{:s}/forces/forces_aeroforces.txt'.format(case_name),\n                                     skiprows=1,\n                                     delimiter=',')\n            nlin_forces_g[ith, :3] = nlin_forces[1:4]\n            nlin_forces_a[ith, :3] = nlin_forces[7:10]\n        nlin_forces_g /= qS\n        nlin_forces_a /= qS\n\n        lift_poly = np.polyfit(alpha_vec * np.pi/180, nlin_forces_g[:, 2], deg=1)\n        nonlin_cla = lift_poly[0]\n        drag_poly = np.polyfit(alpha_vec * np.pi/180, nlin_forces_g[:, 0], deg=2)\n        nonlin_cda = 2 * drag_poly[0] * alpha0 + drag_poly[1]\n        if self.print_info:\n            print('Nonlinear coefficients')\n            print('CLa', nonlin_cla)\n            print('CDa', nonlin_cda)\n\n        lift_poly = np.polyfit(alpha_vec * np.pi/180, nlin_forces_a[:, 2], deg=1)\n        nonlin_cza = lift_poly[0]\n        drag_poly = np.polyfit(alpha_vec * np.pi/180, nlin_forces_a[:, 0], deg=2)\n        nonlin_cxa = 2 * drag_poly[0] * alpha0 + drag_poly[1]\n        if self.print_info:\n            print('Nonlinear coefficients - body axes')\n            print('CZa', nonlin_cza)\n            print('CXa', nonlin_cxa)\n\n        # Get Linear ROM at reference case\n        import scipy.io as scio\n        linss_data = scio.loadmat(self.route_test_dir + '/output/{:s}/savedata/{:s}.linss.mat'.format(ref_case_name,\n                                                                                                  ref_case_name))\n\n        # Steady State transfer function\n        if target_system == 'aerodynamic':\n            ss = libss.StateSpace.load_from_h5(self.route_test_dir +\n                                               f'/output/{ref_case_name}/' +\n                                               f'save_pmor_data/{ref_case_name}_aerostatespace.h5')\n        else:\n            ss = libss.StateSpace.load_from_h5(self.route_test_dir +\n                                               f'/output/{ref_case_name}/' +\n                                               f'save_pmor_data/{ref_case_name}_statespace.h5')\n\n        H0 = ss.freqresp(np.array([1e-5]))[:, :, 0].real\n\n        cga = algebra.quat2rotation(algebra.euler2quat(np.array([0, alpha0, 0])))\n\n        vx_ind = 20  # x_a input index\n        vz_ind = 20 + 2  # z_a input index\n\n        n_evals = 2\n        forces = np.zeros((n_evals, 4))\n        moments = np.zeros_like(forces)\n        body_forces = np.zeros_like(forces)\n\n        phi = libss.Gain.load_from_h5(self.route_test_dir +\n                                      f'/output/{ref_case_name}/' +\n                                      f'save_pmor_data/{ref_case_name}_modal_structrob.h5').value.real # other Gain features not needed\n\n        eps = 1e-5\n        dalpha_vec = np.array([-eps, +eps])\n        for i_alpha, dalpha in enumerate(dalpha_vec):\n            alpha = alpha0 + dalpha  # rad\n            deuler = np.array([0, dalpha, 0])\n            euler0 = np.array([0, alpha0, 0])\n\n            u = np.zeros(ss.inputs)  # input vector\n            V0 = np.array([-1, 0, 0], dtype=float) * u_inf  # G\n            Vp = u_inf * np.array([-np.cos(dalpha), 0, -np.sin(dalpha)])  # G\n\n            dvg = Vp - V0  # G\n            dva = cga.T.dot(dvg)  # A\n            dvz = dva[2]\n            dvx = dva[0]\n\n            #         print(Vp)\n            #         print(algebra.euler2rot(deuler).T.dot(V0))\n            #         print(algebra.der_Peuler_by_v(euler0*0, V0))\n            Vp2 = algebra.euler2rot(euler0 * 0).T.dot(V0) + algebra.der_Peuler_by_v(euler0 * 0, V0).dot(deuler)\n            dva2 = cga.T.dot(algebra.euler2rot(deuler).T.dot(V0) - V0)\n            dva3 = cga.T.dot(Vp2 - V0)\n            #         print('{:.4f}\\t'.format((alpha0 + dalpha) * 180 / np.pi), dva2, dva3, dva3-dva2)\n            dvz = dva3[2]\n            dvx = dva3[0]\n\n            # Need to scale the mode shapes by the rigid body mode factor\n            u[vx_ind] = dvx / phi[-9, 0]\n            u[vz_ind] = dvz / phi[-7, 2]\n\n            # and the same with the output forces\n            flin = H0.dot(u)[:3].real / phi[-9, 0]  # A\n            mlin = np.linalg.inv(phi[-6:-3, 3:6].T).dot(H0.dot(u)[3:6].real)  # A\n            F0A = linss_data['forces_aero_beam_dof'][0, :3].real / phi[-9, 0]  # A - forces at the linearisation\n            M0A = linss_data['forces_aero_beam_dof'][0, 3:6].real / phi[-6, 3]  # A - forces at the linearisation\n            LD0 = cga.dot(F0A)  # Lift and drag at the linearisation point\n            M0G = cga.dot(M0A)\n\n            forces[i_alpha, 0] = (alpha0 + dalpha) * 180 / np.pi  # deg\n            LD = LD0 + algebra.der_Ceuler_by_v(euler0, F0A).dot(deuler) + cga.dot(flin)  # stability axes\n            forces[i_alpha, 1:] = LD / qS\n\n            u_body = np.zeros_like(u)\n            u_body[vz_ind] = dvz / phi[-7, 2]\n            body_forces[i_alpha, 1:] = H0.dot(u_body)[:3].real / phi[-9, 0] / qS # C_Z_w in A frame\n            if self.print_info:\n                print('Transfer function coefficients (normalised by qS)')\n                print(H0[:3, vx_ind:vx_ind+3].real / phi[-7, 2] / phi[-9, 0] / qS)\n\n            MD = M0G + algebra.der_Ceuler_by_v(euler0, M0A).dot(deuler) + cga.dot(mlin)\n            moments[i_alpha, 0] = forces[i_alpha, 0]\n            moments[i_alpha, 1:] = MD / qS / ref.main_chord\n\n        cla = (forces[-1, -1] - forces[0, -1]) / (forces[-1, 0] - forces[0, 0]) * 180 / np.pi\n        cda = (forces[-1, 1] - forces[0, 1]) / (forces[-1, 0] - forces[0, 0]) * 180 / np.pi\n        cma = (moments[-1, 2] - moments[0, 2]) / (moments[-1, 0] - moments[0, 0]) * 180 / np.pi\n\n        if self.print_info:\n            print('Lift curve slope perturbation {:.6e}'.format(cla))\n            print('Drag curve slope perturbation {:.6e}'.format(cda))\n            print('Moment curve slope perturbation {:.6e}'.format(cma))\n\n        # body derivative\n        # czwa = (body_forces[-1, -1] - body_forces[0, -1]) / (forces[-1, 0] - forces[0, 0]) * 180 / np.pi\n        # print('Vertical force with vertical velocity perturbation {:.6e}'.format(czwa))\n\n        with h5py.File(self.route_test_dir + '/output/' + ref_case_name +\n                       '/derivatives/aerodynamic_stability_derivatives.h5', 'r') as f:\n            sharpy_force_angle = h5utils.load_h5_in_dict(f)['force_angle_velocity']\n\n        linsubtests = ((2, cla, 'lift'),\n                       (0, cda, 'drag'),\n                       (4, cma, 'moment'))\n        for test in linsubtests:\n            with self.subTest(test):\n                try:\n                    np.testing.assert_almost_equal(sharpy_force_angle[test[0], 1], test[1], decimal=3)\n                except AssertionError as e:\n                    print('Error Linear perturbation in {:s}'.format(test[2]))\n                    print(e)\n                    print('Pct error', np.abs(sharpy_force_angle[test[0], 1] - test[1]) / test[1] * 100)\n                    raise AssertionError\n\n        nonlinsubtests = ((2, nonlin_cla, 'lift'),\n                          (0, nonlin_cda, 'drag'),\n                          )\n\n        for test in nonlinsubtests:\n            with self.subTest(test):\n                try:\n                    np.testing.assert_almost_equal(sharpy_force_angle[test[0], 1], test[1], decimal=2)\n                except AssertionError as e:\n                    print('Error nonlinear perturbation in {:s}'.format(test[2]))\n                    print(e)\n                    print('Pct error', np.abs(sharpy_force_angle[test[0], 1] - test[1]) / test[1] * 100)\n                    raise AssertionError\n        return forces, moments\n\n    def tearDown(self):\n        import shutil\n        folders = ['cases', 'output']\n        for folder in folders:\n            shutil.rmtree(self.route_test_dir + '/' + folder)\n\n\nif __name__ == '__main__':\n    unittest.main()\n"
  },
  {
    "path": "tests/linear/frequencyutils/__init__.py",
    "content": ""
  },
  {
    "path": "tests/linear/frequencyutils/test_frequency_utils.py",
    "content": "import unittest\nimport sharpy.linear.src.libss as libss\nimport scipy.linalg as sclalg\nimport numpy as np\nimport os\n\nimport sharpy.utils.frequencyutils as frequencyutils\n\n\nclass TestFrequencyUtils(unittest.TestCase):\n\n    test_dir = os.path.abspath(os.path.dirname(__file__))\n\n    def setUp(self):\n\n        # This particular system is a good test as it requires a few iterations of the Hinf\n        # solver. In addition it is known that its SVD peak occurs between 0.1 and 1.0 rad/s\n        # allowing us to increase the resolution in the graphical method around that vicinity.\n        a = np.load(self.test_dir + '/src/a.npy')\n        b = np.load(self.test_dir + '/src/b.npy')\n        c = np.load(self.test_dir + '/src/c.npy')\n        d = np.load(self.test_dir + '/src/d.npy')\n\n        self.sys = libss.StateSpace(a, b, c, d, dt=None)\n        # self.sys = libss.random_ss(10, 4, 3, dt=0.1, stable=True)\n        # self.sys = libss.disc2cont(self.sys)\n\n    def test_hinfinity_norm(self):\n\n        h_inf_iterative = frequencyutils.h_infinity_norm(self.sys, print_info=False)\n\n        # Compare against graphical method\n        # Hinf norm is the maximum SVD across all frequencies\n        wv_vec = np.logspace(-1, 0, 100)\n        svd_val = np.zeros_like(wv_vec)\n\n        for i in range(len(svd_val)):\n            frequency_response = self.sys.transfer_function_evaluation(1j*wv_vec[i])\n            svd_val[i] = np.max(sclalg.svd(frequency_response,\n                                           compute_uv=False))\n\n        h_inf_graph = np.max(svd_val)\n\n        np.testing.assert_almost_equal(h_inf_iterative, h_inf_graph, decimal=3, verbose=True,\n                                       err_msg='H-infinity norm using iterative method vs graphical one not '\n                                               'equal to 3 decimal places')\n\n        # >>>>>>>>>>> Useful debugging\n        # print(h_inf_iterative)\n        # print(h_inf_graph)\n        #\n        # import matplotlib.pyplot as plt\n        # plt.semilogx(wv_vec, svd_val)\n        # plt.show()\n\n        # <<<<<<<<<<<<<<<<<<<<<<<<<<<<\n\n        # a = np.save(self.test_dir + '/src/a.npy', self.sys.A)\n        # b = np.save(self.test_dir + '/src/b.npy', self.sys.B)\n        # c = np.save(self.test_dir + '/src/c.npy', self.sys.C)\n        # d = np.save(self.test_dir + '/src/d.npy', self.sys.D)\n"
  },
  {
    "path": "tests/linear/goland_wing/__init__.py",
    "content": ""
  },
  {
    "path": "tests/linear/goland_wing/test_goland_flutter.py",
    "content": "import numpy as np\nimport os\nimport unittest\nimport sharpy.cases.templates.flying_wings as wings\nimport sharpy.sharpy_main\n\n\nclass TestGolandFlutter(unittest.TestCase):\n\n    def setup(self):\n        # Problem Set up\n        u_inf = 1.\n        alpha_deg = 0.\n        rho = 1.02\n        num_modes = 4\n\n        # Lattice Discretisation\n        M = 16\n        N = 32\n        M_star_fact = 10\n\n        # Linear UVLM settings\n        integration_order = 2\n        remove_predictor = False\n        use_sparse = True\n\n        # ROM Properties\n        rom_settings = dict()\n        rom_settings['algorithm'] = 'mimo_rational_arnoldi'\n        rom_settings['r'] = 6\n        rom_settings['single_side'] = 'observability'\n        frequency_continuous_k = np.array([0.])\n\n        # Case Admin - Create results folders\n        case_name = 'goland_cs'\n        case_nlin_info = 'M%dN%dMs%d_nmodes%d' % (M, N, M_star_fact, num_modes)\n        case_rom_info = 'rom_MIMORA_r%d_sig%04d_%04dj' % (rom_settings['r'], frequency_continuous_k[-1].real * 100,\n                                                          frequency_continuous_k[-1].imag * 100)\n\n        case_name += case_nlin_info + case_rom_info\n\n        self.route_test_dir = os.path.abspath(os.path.dirname(os.path.realpath(__file__)))\n        fig_folder = self.route_test_dir + '/figures/'\n        os.makedirs(fig_folder, exist_ok=True)\n\n        # SHARPy nonlinear reference solution\n        ws = wings.GolandControlSurface(M=M,\n                                        N=N,\n                                        Mstar_fact=M_star_fact,\n                                        u_inf=u_inf,\n                                        alpha=alpha_deg,\n                                        cs_deflection=[0, 0],\n                                        rho=rho,\n                                        sweep=0,\n                                        physical_time=2,\n                                        n_surfaces=2,\n                                        route=self.route_test_dir + '/cases',\n                                        case_name=case_name)\n\n        ws.gust_intensity = 0.01\n        ws.sigma = 1\n\n        ws.clean_test_files()\n        ws.update_derived_params()\n        ws.set_default_config_dict()\n\n        ws.generate_aero_file()\n        ws.generate_fem_file()\n\n        frequency_continuous_w = 2 * u_inf * frequency_continuous_k / ws.c_ref\n        rom_settings['frequency'] = frequency_continuous_w\n        rom_settings['tangent_input_file'] = ws.route + '/' + ws.case_name + '.rom.h5'\n\n        ws.config['SHARPy'] = {\n            'flow':\n                ['BeamLoader', 'AerogridLoader',\n                 'StaticCoupled',\n                 'AerogridPlot',\n                 'BeamPlot',\n                 'Modal',\n                 'LinearAssembler',\n                 'FrequencyResponse',\n                 'AsymptoticStability',\n                 'SaveData',\n                 ],\n            'case': ws.case_name, 'route': ws.route,\n            'write_screen': 'off', 'write_log': 'on',\n            'log_folder': self.route_test_dir + '/output/',\n            'log_file': ws.case_name + '.log'}\n\n        ws.config['BeamLoader'] = {\n            'unsteady': 'off',\n            'orientation': ws.quat}\n\n        ws.config['AerogridLoader'] = {\n            'unsteady': 'off',\n            'aligned_grid': 'on',\n            'mstar': ws.Mstar_fact * ws.M,\n            'freestream_dir': ws.u_inf_direction,\n            'wake_shape_generator': 'StraightWake',\n            'wake_shape_generator_input': {'u_inf': ws.u_inf,\n                                           'u_inf_direction': ws.u_inf_direction,\n                                           'dt': ws.dt}}\n\n        ws.config['StaticUvlm'] = {\n            'rho': ws.rho,\n            'velocity_field_generator': 'SteadyVelocityField',\n            'velocity_field_input': {\n                'u_inf': ws.u_inf,\n                'u_inf_direction': ws.u_inf_direction},\n            'rollup_dt': ws.dt,\n            'print_info': 'on',\n            'horseshoe': 'off',\n            'num_cores': 4,\n            'n_rollup': 0,\n            'rollup_aic_refresh': 0,\n            'rollup_tolerance': 1e-4}\n\n        ws.config['StaticCoupled'] = {\n            'print_info': 'on',\n            'max_iter': 200,\n            'n_load_steps': 1,\n            'tolerance': 1e-10,\n            'relaxation_factor': 0.,\n            'aero_solver': 'StaticUvlm',\n            'aero_solver_settings': {\n                'rho': ws.rho,\n                'print_info': 'off',\n                'horseshoe': 'off',\n                'num_cores': 4,\n                'n_rollup': 0,\n                'rollup_dt': ws.dt,\n                'rollup_aic_refresh': 1,\n                'rollup_tolerance': 1e-4,\n                'velocity_field_generator': 'SteadyVelocityField',\n                'velocity_field_input': {\n                    'u_inf': ws.u_inf,\n                    'u_inf_direction': ws.u_inf_direction}},\n            'structural_solver': 'NonLinearStatic',\n            'structural_solver_settings': {'print_info': 'off',\n                                           'max_iterations': 150,\n                                           'num_load_steps': 4,\n                                           'delta_curved': 1e-1,\n                                           'min_delta': 1e-10,\n                                           'gravity_on': 'on',\n                                           'gravity': 9.81}}\n\n        ws.config['AerogridPlot'] = {'include_rbm': 'off',\n                                     'include_applied_forces': 'on',\n                                     'minus_m_star': 0}\n\n        ws.config['AeroForcesCalculator'] = {'write_text_file': 'on',\n                                             'text_file_name': ws.case_name + '_aeroforces.csv',\n                                             'screen_output': 'on',\n                                             'unsteady': 'off'}\n\n        ws.config['BeamPlot'] = {'include_rbm': 'off',\n                                 'include_applied_forces': 'on'}\n\n        ws.config['Modal'] = {'NumLambda': 20,\n                              'rigid_body_modes': 'off',\n                              'print_matrices': 'on',\n                              'save_data': 'off',\n                              'rigid_modes_cg': 'off',\n                              'continuous_eigenvalues': 'off',\n                              'dt': 0,\n                              'plot_eigenvalues': False,\n                              'max_rotation_deg': 15.,\n                              'max_displacement': 0.15,\n                              'write_modes_vtk': True,\n                              'use_undamped_modes': True}\n\n        ws.config['LinearAssembler'] = {'linear_system': 'LinearAeroelastic',\n                                        'linear_system_settings': {\n                                            'beam_settings': {'modal_projection': 'on',\n                                                              'inout_coords': 'modes',\n                                                              'discrete_time': 'on',\n                                                              'newmark_damp': 0.5e-4,\n                                                              'discr_method': 'newmark',\n                                                              'dt': ws.dt,\n                                                              'proj_modes': 'undamped',\n                                                              'use_euler': 'off',\n                                                              'num_modes': num_modes,\n                                                              'print_info': 'on',\n                                                              'gravity': 'on',\n                                                              'remove_sym_modes': 'on',\n                                                              'remove_dofs': []},\n                                            'aero_settings': {'dt': ws.dt,\n                                                              'ScalingDict': {'length': 0.5 * ws.c_ref,\n                                                                              'speed': u_inf,\n                                                                              'density': rho},\n                                                              'integr_order': integration_order,\n                                                              'density': ws.rho,\n                                                              'remove_predictor': remove_predictor,\n                                                              'use_sparse': use_sparse,\n                                                              'remove_inputs': ['u_gust'],\n                                                              'rom_method': ['Krylov'],\n                                                              'rom_method_settings': {'Krylov': rom_settings}},\n                                        }}\n\n        ws.config['AsymptoticStability'] = {'print_info': True,\n                                            'velocity_analysis': [160, 180, 20]}\n\n        ws.config['LinDynamicSim'] = {'dt': ws.dt,\n                                      'n_tsteps': ws.n_tstep,\n                                      'sys_id': 'LinearAeroelastic',\n                                      'postprocessors': ['BeamPlot', 'AerogridPlot'],\n                                      'postprocessors_settings': {'AerogridPlot': {\n                                          'u_inf': ws.u_inf,\n                                          'include_rbm': 'on',\n                                          'include_applied_forces': 'on',\n                                          'minus_m_star': 0},\n                                          'BeamPlot': {'include_rbm': 'on',\n                                                       'include_applied_forces': 'on'}}}\n\n        ws.config['FrequencyResponse'] = {'quick_plot': 'off',\n                                          'frequency_unit': 'k',\n                                          'frequency_bounds': [0.0001, 1.0],\n                                          'num_freqs': 100,\n                                          'frequency_spacing': 'log',\n                                          'target_system': ['aeroelastic'],\n                                          }\n\n        ws.config['SaveData'] = {'save_aero': 'off',\n                                 'save_struct': 'off',\n                                 'save_rom': 'on'}\n\n        ws.config.write()\n\n        self.data = sharpy.sharpy_main.main(['', ws.route + ws.case_name + '.sharpy'])\n\n    def run_rom_stable(self):\n        ssrom = self.data.linear.linear_system.uvlm.rom['Krylov'].ssrom\n        eigs_rom = np.linalg.eigvals(ssrom.A)\n\n        assert all(np.abs(eigs_rom) <= 1.), 'UVLM Krylov ROM is unstable - flutter speed may not be correct. Change' \\\n                                            'ROM settings to achieve stability'\n        # print('ROM is stable')\n\n    def run_flutter(self):\n        flutter_ref_speed = 166  # at current discretisation\n\n        # load results file - variables below determined by ``velocity_analysis`` setting in AsymptoticStability\n        ulb = 160  # velocity lower bound\n        uub = 180  # velocity upper bound\n        num_u = 20  # n_speeds\n        res = np.loadtxt(self.route_test_dir + '/output/%s/stability/' % self.data.settings['SHARPy']['case'] +\n                         '/velocity_analysis_min%04d_max%04d_nvel%04d.dat' % (ulb * 10, uub * 10, num_u), )\n\n        u_inf = res[:, 0]\n        eval_real = res[:, 1]\n        eval_imag = res[:, 2]\n\n        # Flutter onset\n        ind_zero_real = np.where(eval_real >= 0)[0][0]\n        assert ind_zero_real > 0, 'Flutter speed not below 165.00 m/s'\n        flutter_speed = 0.5 * (u_inf[ind_zero_real] + u_inf[ind_zero_real - 1])\n        flutter_frequency = np.sqrt(eval_real[ind_zero_real] ** 2 + eval_imag[ind_zero_real] ** 2)\n\n        # print('Flutter speed = %.1f m/s' % flutter_speed)\n        # print('Flutter frequency = %.2f rad/s' % flutter_frequency)\n        assert np.abs(\n            flutter_speed - flutter_ref_speed) / flutter_ref_speed < 1e-2, ' Flutter speed error greater than ' \\\n                                                                           '1 percent. \\nFlutter speed: %.2f m/s\\n' \\\n                                                                           'Frequency: %.2f rad/s' % (flutter_speed,\n                                                                                                      flutter_frequency)\n\n    def test_flutter(self):\n        self.setup()\n        self.run_rom_stable()\n        self.run_flutter()\n\n    def tearDown(self):\n        import shutil\n        folders = ['cases', 'figures', 'output']\n        for folder in folders:\n            shutil.rmtree(self.route_test_dir + '/' + folder)\n\n\nif __name__ == '__main__':\n    unittest.main()\n"
  },
  {
    "path": "tests/linear/gusts/__init__.py",
    "content": ""
  },
  {
    "path": "tests/linear/gusts/test_external_gust.py",
    "content": "import numpy as np\nimport sharpy.utils.algebra as algebra\nimport sharpy.sharpy_main as smain\nimport unittest\nimport sharpy.cases.templates.flying_wings as wings\nimport os\nimport shutil\n\n\ndef generate_sharpy(alpha=0., case_name='hale_static', case_route='./', **kwargs):\n\n    output_route = kwargs.get('output_route', './output/')\n    m = kwargs.get('M', 4)\n    rho = kwargs.get('rho', 1.225)\n    tolerance = kwargs.get('tolerance', 1e-5)\n    u_inf = kwargs.get('u_inf', 10)\n    tsteps = kwargs.get('tsteps', 100)\n\n    ws = wings.QuasiInfinite(M=m,\n                             aspect_ratio=10,\n                             N=8,\n                             Mstar_fact=10,\n                             u_inf=u_inf,\n                             alpha=alpha,\n                             rho=rho,\n                             sweep=0,\n                             n_surfaces=2,\n                             route=case_route,\n                             case_name=case_name)\n\n    ws.gust_intensity = 0.01\n    ws.sigma = 1e-1\n\n    ws.clean_test_files()\n    ws.update_derived_params()\n    ws.set_default_config_dict()\n\n    ws.generate_aero_file()\n    ws.generate_fem_file()\n\n    settings = dict()\n\n    settings['SHARPy'] = {'case': case_name,\n                          'route': case_route,\n                          'flow': kwargs.get('flow', []),\n                          'write_screen': 'off',\n                          'write_log': 'on',\n                          'log_folder': output_route,\n                          'log_file': case_name + '.log'}\n\n    settings['BeamLoader'] = {'unsteady': 'on',\n                              'orientation': algebra.euler2quat(np.array([0.,\n                                                                          alpha,\n                                                                          0.]))}\n\n    settings['AerogridLoader'] = {'unsteady': 'on',\n                                  'aligned_grid': 'on',\n                                  'mstar': int(kwargs.get('wake_length', 10) * m),\n                                  'control_surface_deflection': ['', ''],\n                                  'control_surface_deflection_generator_settings':\n                                      {'0': {},\n                                       '1': {}},\n                                  'wake_shape_generator': 'StraightWake',\n                                  'wake_shape_generator_input': {\n                                      'u_inf': u_inf,\n                                      'u_inf_direction': [1., 0., 0.],\n                                      'dt': ws.dt,\n                                  },\n                                  }\n\n    settings['NonLinearStatic'] = {'print_info': 'off',\n                                   'max_iterations': 150,\n                                   'num_load_steps': 1,\n                                   'delta_curved': 1e-1,\n                                   'min_delta': tolerance,\n                                   'gravity_on': kwargs.get('gravity', 'on'),\n                                   'gravity': 9.81,\n                                   'initial_position': [0., 0., 0.]}\n\n    settings['StaticUvlm'] = {'print_info': 'on',\n                              'horseshoe': kwargs.get('horseshoe', 'off'),\n                              'num_cores': 4,\n                              'velocity_field_generator': 'SteadyVelocityField',\n                              'velocity_field_input': {'u_inf': u_inf,\n                                                       'u_inf_direction': [1., 0, 0]},\n                              'rho': rho}\n\n    settings['StaticCoupled'] = {'print_info': 'off',\n                                 'structural_solver': 'NonLinearStatic',\n                                 'structural_solver_settings': settings['NonLinearStatic'],\n                                 'aero_solver': 'StaticUvlm',\n                                 'aero_solver_settings': settings['StaticUvlm'],\n                                 'max_iter': 100,\n                                 'n_load_steps': kwargs.get('n_load_steps', 1),\n                                 'tolerance': kwargs.get('fsi_tolerance', 1e-5),\n                                 'relaxation_factor': kwargs.get('relaxation_factor', 0.2)}\n\n    settings['BeamPlot'] = {'include_FoR': 'on'}\n\n    settings['AerogridPlot'] = {'include_rbm': 'off',\n                                'include_applied_forces': 'on',\n                                'minus_m_star': 0,\n                                'u_inf': u_inf\n                                }\n\n    settings['AeroForcesCalculator'] = {'write_text_file': 'on',\n                                        'text_file_name': 'aeroforces.txt',\n                                        'screen_output': 'on',\n                                        'coefficients': True,\n                                        'q_ref': 0.5 * rho * u_inf ** 2,\n                                        'S_ref': 12.809,\n                                        }\n\n    settings['BeamPlot'] = {'include_rbm': 'on',\n                            'include_applied_forces': 'on',\n                            'include_FoR': 'on'}\n\n    struct_solver_settings = {'print_info': 'off',\n                              'max_iterations': 950,\n                              'delta_curved': 1e-6,\n                              'min_delta': tolerance,\n                              'newmark_damp': 5e-3,\n                              'gravity_on': kwargs.get('gravity', 'on'),\n                              'gravity': 9.81,\n                              'num_steps': 1,\n                              'dt': ws.dt}\n\n    gust_vec = kwargs.get('nl_gust', None)\n    if gust_vec is not None:\n        t_dom = np.linspace(0, ws.dt * (tsteps-1), tsteps)\n        np.savetxt(ws.route + '/gust.txt', np.column_stack((\n            t_dom,\n            np.zeros_like(t_dom),\n            np.zeros_like(t_dom),\n            gust_vec\n        )))\n\n    step_uvlm_settings = {'print_info': 'on',\n                          'num_cores': 4,\n                          'convection_scheme': 0, #ws.wake_type,\n                          'vortex_radius': 1e-7,\n                          'velocity_field_generator': 'GustVelocityField',\n                          'velocity_field_input': {'u_inf': u_inf * 1,\n                                                   'u_inf_direction': [1., 0., 0.],\n                                                   'relative_motion': 'on',\n                                                   'gust_shape': 'time varying',\n                                                   'gust_parameters': {\n                                                       'file': ws.route + '/gust.txt',\n                                                   }},\n                          'rho': rho,\n                          'n_time_steps': tsteps,\n                          'dt': ws.dt,\n                          'gamma_dot_filtering': 3}\n\n    settings['DynamicCoupled'] = {'print_info': 'on',\n                                  'structural_solver': 'NonLinearDynamicPrescribedStep',\n                                  'structural_solver_settings': struct_solver_settings,\n                                  'aero_solver': 'StepUvlm',\n                                  'aero_solver_settings': step_uvlm_settings,\n                                  'fsi_substeps': 200,\n                                  'fsi_tolerance': tolerance,\n                                  'relaxation_factor': 0.3,\n                                  'minimum_steps': 1,\n                                  'relaxation_steps': 150,\n                                  'final_relaxation_factor': 0.5,\n                                  'n_time_steps': tsteps,  # ws.n_tstep,\n                                  'dt': ws.dt,\n                                  'include_unsteady_force_contribution': 'on',\n                                  'steps_without_unsteady_force': 5,\n                                  'postprocessors': ['BeamPlot', 'AerogridPlot', 'WriteVariablesTime'],\n                                  'postprocessors_settings': {'BeamLoads': {'csv_output': 'off'},\n                                                              'BeamPlot': {'include_rbm': 'on',\n                                                                           'include_applied_forces': 'on'},\n                                                              'AerogridPlot': {\n                                                                  'u_inf': u_inf,\n                                                                  'include_rbm': 'on',\n                                                                  'include_applied_forces': 'on',\n                                                                  'minus_m_star': 0},\n                                                              'WriteVariablesTime': {\n                                                                  'cleanup_old_solution': 'on',\n                                                                  'delimiter': ',',\n                                                                  'FoR_variables': ['total_forces',\n                                                                                    'total_gravity_forces',\n                                                                                    'for_pos', 'quat'],\n                                                              }}}\n\n    settings['Modal'] = {'print_info': True,\n                         'use_undamped_modes': True,\n                         'NumLambda': 50,\n                         'rigid_body_modes': 'off',\n                         'write_modes_vtk': 'on',\n                         'print_matrices': 'on',\n                         'save_data': 'on',\n                         'continuous_eigenvalues': 'off',\n                         'dt': ws.dt,\n                         'plot_eigenvalues': False,\n                         'rigid_modes_ppal_axes': 'on'}\n    # ROM settings\n    rom_settings = dict()\n    rom_settings['algorithm'] = 'mimo_rational_arnoldi'\n    rom_settings['r'] = 10\n    rom_settings['frequency'] = np.array([0], dtype=float)\n    rom_settings['single_side'] = 'observability'\n\n    settings['LinearAssembler'] = {'linear_system': 'LinearAeroelastic',\n                                   'linearisation_tstep': -1,\n                                   'linear_system_settings': {\n                                       'beam_settings': {'modal_projection': 'off',\n                                                         'inout_coords': 'modes',\n                                                         'discrete_time': 'on',\n                                                         'newmark_damp': 0.5e-4,\n                                                         'discr_method': 'newmark',\n                                                         'dt': ws.dt,\n                                                         'proj_modes': 'undamped',\n                                                         'use_euler': 'on',\n                                                         'num_modes': 20,\n                                                         'print_info': 'on',\n                                                         'gravity': kwargs.get('gravity', 'on'),\n                                                         'remove_dofs': [],\n                                                         'remove_rigid_states': 'off'},\n                                       'aero_settings': {'dt': ws.dt,\n                                                         'integr_order': 2,\n                                                         'density': rho,\n                                                         'remove_predictor': 'off',\n                                                         'use_sparse': False,\n                                                         'vortex_radius': 1e-7,\n                                                         'convert_to_ct': 'off',\n                                                         'gust_assembler': kwargs.get('gust_name', ''),\n                                                         'gust_assembler_inputs': kwargs.get('gust_settings', {}),\n                                                         },\n                                       'track_body': 'on',\n                                       'use_euler': 'on',\n                                   },\n                                   }\n\n    settings['AsymptoticStability'] = {\n        'print_info': 'on',\n        'modes_to_plot': [],\n        # 'velocity_analysis': [27, 29, 3],\n        'display_root_locus': 'off',\n        'frequency_cutoff': 0,\n        'export_eigenvalues': 'on',\n        'num_evals': 100}\n\n    settings['FrequencyResponse'] = {'target_system': ['aeroelastic', 'aerodynamic', 'structural'],\n                                     'quick_plot': 'off',\n                                     'frequency_spacing': 'log',\n                                     'frequency_unit': 'w',\n                                     'frequency_bounds': [1e-3, 1e3],\n                                     'num_freqs': 200,\n                                     'print_info': 'on'}\n\n    settings['PickleData'] = {}\n\n    settings['LinDynamicSim'] = {'n_tsteps': tsteps,\n                                 'dt': ws.dt,\n                                 'write_dat': ['x', 'y', 'u'],\n                                 'input_generators': kwargs.get('linear_input_generators', []),\n                                 'postprocessors': ['AerogridPlot'],\n                                 'postprocessors_settings':\n                                     {'AerogridPlot': {'include_rbm': 'on',\n                                                       'include_applied_forces': 'on',\n                                                       'minus_m_star': 0}, }\n                                 }\n\n    case_file = ws.settings_to_config(settings)\n    return case_file\n\n\ndef run_case(case_file, pickle_file=None):\n    if pickle_file is not None:\n        restart = True\n    else:\n        restart = False\n    if restart:\n        data = smain.main(['', case_file, '-r', pickle_file])\n    else:\n        data = smain.main(['', case_file])\n\n    return data\n\n\nclass TestGustAssembly(unittest.TestCase):\n\n    route_test_dir = os.path.abspath(os.path.dirname(os.path.realpath(__file__)))\n    directories = ['cases', 'output', 'inputs']\n\n    time_steps = 80\n    gust_intensity = 0.01\n    gust_ramp = 5\n\n    M = 4\n    u_inf = 1\n\n    gust_vec = np.zeros(time_steps)\n\n    @classmethod\n    def setUpClass(cls):\n        for folder in cls.directories:\n            os.makedirs(cls.route_test_dir + '/' + folder, exist_ok=True)\n\n        # Gust input profile\n        cls.gust_vec[5:cls.gust_ramp+5] = np.linspace(0, cls.gust_intensity, cls.gust_ramp)\n        cls.gust_vec[5+ cls.gust_ramp:] = cls.gust_intensity\n\n    @classmethod\n    def tearDownClass(cls):\n        for folder in cls.directories:\n            if os.path.isdir(cls.route_test_dir + '/' + folder):\n                shutil.rmtree(cls.route_test_dir + '/' + folder)\n\n    def linear_response(self):\n\n        np.savetxt(self.route_test_dir + '/inputs/gust_linear.txt', self.gust_vec)\n\n        input_generators = [{'name': 'u_gust',\n                             'index': 0,\n                             'file_path': self.route_test_dir + '/inputs/gust_linear.txt'}]\n\n        data = self.run_sharpy_linear(gust_name='LeadingEdge', linear_input_generators=input_generators)#\n\n        return data\n\n    def nonlinear_response(self):\n\n        data = self.run_sharpy_nonlinear(nl_gust=self.gust_vec)\n\n        return data\n\n    def test_gust(self):\n\n        linear = self.linear_response()\n        nonlinear = self.nonlinear_response()\n        final_linear = linear.aero.timestep_info[-1]\n        final_nonlinear = nonlinear.aero.timestep_info[-1]\n        with self.subTest('zeta'):\n            np.testing.assert_almost_equal(final_linear.zeta[0][2, 0, -1],\n                                           final_nonlinear.zeta[0][2, 0, -1], decimal=4)\n        with self.subTest('forces'):\n            np.testing.assert_almost_equal(np.sum(final_linear.forces[0][2, :, 0]),\n                                           np.sum(final_nonlinear.forces[0][2, :, 0]), decimal=4)\n\n        with self.subTest('gamma'):\n            np.testing.assert_almost_equal(final_linear.gamma[0][2, 2],\n                                           final_nonlinear.gamma[0][2, 2], decimal=4)\n\n    def wingtip_timeseries(self, data):\n        nsteps = len(data.aero.timestep_info)\n\n        wingtip = np.zeros(nsteps)\n\n        for i in range(nsteps):\n            wingtip[i] = data.aero.timestep_info[i].zeta[0][2, 0, -1]\n\n        return wingtip\n\n    def gamma_timeseries(self, data):\n        nsteps = len(data.aero.timestep_info)\n\n        wingtip = np.zeros(nsteps)\n\n        for i in range(nsteps):\n            wingtip[i] = data.aero.timestep_info[i].gamma[0][0, -1]\n\n        return wingtip\n\n    def run_sharpy_nonlinear(self, **kwargs):\n        flow = [\n            'BeamLoader',\n            'AerogridLoader',\n            'StaticUvlm',\n            'DynamicCoupled',\n            # 'AeroForcesCalculator',\n            'PickleData',\n        ]\n\n\n        alpha = 0 #2 * np.pi / 180\n\n        # Discretisation\n        n_elem_multiplier = 1.5\n        wake_length = 10\n        horseshoe = False\n\n        case_file = generate_sharpy(alpha=alpha,\n                                    case_name='nonlinear',\n                                    case_route=self.route_test_dir + '/cases/',\n                                    output_route=self.route_test_dir + '/output/',\n                                    flow=flow,\n                                    u_inf=self.u_inf,\n                                    M=self.M,\n                                    n_elem_multiplier=n_elem_multiplier,\n                                    horseshoe=horseshoe,\n                                    wake_length=wake_length,\n                                    relaxation_factor=0.6,\n                                    tolerance=1e-5,\n                                    gravity='off',\n                                    fsi_tolerance=1e-5,\n                                    tsteps=self.time_steps,\n                                    **kwargs,\n                                    )\n\n        data = run_case(case_file)\n\n        return data\n\n    def run_sharpy_linear(self, **kwargs):\n\n        flow = [\n            'BeamLoader',\n            'AerogridLoader',\n            'StaticCoupled',\n            'Modal',\n            'AeroForcesCalculator',\n            'LinearAssembler',\n            'LinDynamicSim',\n            'PickleData',\n        ]\n\n        restart = False\n        if restart:\n            flow = ['LinDynamicSim']\n            pickle_file = self.route_test_dir + '/output/linear.pkl'\n        else:\n            pickle_file = None\n        alpha = 0 #2 * np.pi / 180\n        elevator = 0 #-0.5 * np.pi / 180\n        thrust = 0 #5\n\n        # Discretisation\n        M = 4\n        n_elem_multiplier = 1.5\n        wake_length = 10\n        horseshoe = False\n\n        case_file = generate_sharpy(alpha=alpha,\n                                    case_name='linear',\n                                    case_route=self.route_test_dir + '/cases/',\n                                    output_route=self.route_test_dir + '/output',\n                                    flow=flow,\n                                    u_inf=self.u_inf,\n                                    M=self.M,\n                                    n_elem_multiplier=n_elem_multiplier,\n                                    horseshoe=horseshoe,\n                                    wake_length=wake_length,\n                                    relaxation_factor=0.6,\n                                    tolerance=1e-5,\n                                    gravity='off',\n                                    fsi_tolerance=1e-5,\n                                    tsteps=self.time_steps,\n                                    **kwargs,\n                                    )\n\n        data = run_case(case_file, pickle_file)\n\n        return data\n\n    def assert_gust_propagation(self, path_to_input, output_route):\n        x_sharpy = np.loadtxt(output_route + '/lindynamicsim/x_out.dat')\n        u_in = np.loadtxt(path_to_input)\n\n        np.testing.assert_array_almost_equal(x_sharpy[1:, 0], u_in[:-1])\n\n    def tearDown(self):\n        folders = ['cases', 'output']\n        import shutil\n\n        for folder in folders:\n            path = self.route_test_dir + '/' + folder\n            if os.path.isdir(path):\n                shutil.rmtree(path)\n\n\nif __name__ == '__main__':\n    unittest.main()\n"
  },
  {
    "path": "tests/linear/gusts/test_linear_gusts.py",
    "content": "import numpy as np\nimport os\nimport unittest\nimport sharpy.cases.templates.flying_wings as wings\nimport sharpy.sharpy_main\nfrom sharpy.linear.assembler.lineargustassembler import campbell\nimport pickle\n\n\nclass TestGolandControlSurface(unittest.TestCase):\n\n    def setUp(self):\n        self.route_test_dir = os.path.abspath(os.path.dirname(os.path.realpath(__file__)))\n\n    def run_sharpy(self, flow, **kwargs):\n        # Problem Set up\n        u_inf = 2.\n        alpha_deg = 0.\n        rho = 1.02\n        num_modes = 4\n        restart = kwargs.get('restart', False)\n\n        # Lattice Discretisation\n        M = 4\n        N = 16\n        M_star_fact = 1\n\n        # Linear UVLM settings\n        integration_order = 2\n        remove_predictor = kwargs.get('remove_predictor', False)\n        use_sparse = True\n\n        # Case Admin - Create results folders\n        case_name = 'goland_cs'\n        case_nlin_info = 'M%dN%dMs%d_nmodes%d' % (M, N, M_star_fact, num_modes)\n\n        case_name += case_nlin_info\n\n        fig_folder = self.route_test_dir + '/figures/'\n        os.makedirs(fig_folder, exist_ok=True)\n\n        # SHARPy nonlinear reference solution\n        ws = wings.GolandControlSurface(M=M,\n                                        N=N,\n                                        Mstar_fact=M_star_fact,\n                                        u_inf=u_inf,\n                                        alpha=alpha_deg,\n                                        # cs_deflection=[0, 0],\n                                        rho=rho,\n                                        sweep=0,\n                                        physical_time=2,\n                                        n_surfaces=2,\n                                        route=self.route_test_dir + '/cases',\n                                        case_name=case_name)\n\n        ws.gust_intensity = 0.01\n        ws.sigma = 1\n\n        ws.clean_test_files()\n        ws.update_derived_params()\n        ws.set_default_config_dict()\n\n        ws.generate_aero_file()\n        ws.generate_fem_file()\n\n        x0 = np.zeros(256)\n        lin_tsteps = 40\n        u_vec = np.zeros((lin_tsteps, num_modes // 2 * 3 + 1 + 2))\n        # elevator\n        u_vec[5:, 5] = 10 * np.pi / 180\n        # gust\n        u_vec[:, 4] = np.sin(np.linspace(0, 2*np.pi, lin_tsteps))\n        ws.create_linear_files(x0, u_vec)\n        np.savetxt(self.route_test_dir + '/cases/elevator.txt', u_vec[:, 5])\n        np.savetxt(self.route_test_dir + '/cases/gust.txt', u_vec[:, 4])\n\n        ws.config['SHARPy'] = {\n            'flow': flow,\n            'case': ws.case_name, 'route': ws.route,\n            'write_screen': 'off', 'write_log': 'on',\n            'log_folder': self.route_test_dir + '/output/' + ws.case_name + '/',\n            'log_file': ws.case_name + '.log'}\n\n        ws.config['BeamLoader'] = {\n            'unsteady': 'off',\n            'orientation': ws.quat}\n\n        ws.config['AerogridLoader'] = {\n            'unsteady': 'off',\n            'aligned_grid': 'on',\n            'mstar': ws.Mstar_fact * ws.M,\n            'freestream_dir': ws.u_inf_direction,                                                                                                       \n            'wake_shape_generator': 'StraightWake',                                                                                                  \n            'wake_shape_generator_input': {'u_inf': ws.u_inf,                                                                                           \n                                           'u_inf_direction': ws.u_inf_direction,                                                                \n                                           'dt': ws.dt}}\n\n        ws.config['StaticUvlm'] = {\n            'rho': ws.rho,\n            'velocity_field_generator': 'SteadyVelocityField',\n            'velocity_field_input': {\n                'u_inf': ws.u_inf,\n                'u_inf_direction': ws.u_inf_direction},\n            'rollup_dt': ws.dt,\n            'print_info': 'on',\n            'horseshoe': 'off',\n            'num_cores': 4,\n            'n_rollup': 0,\n            'rollup_aic_refresh': 0,\n            'rollup_tolerance': 1e-4}\n\n        ws.config['StaticCoupled'] = {\n            'print_info': 'on',\n            'max_iter': 200,\n            'n_load_steps': 1,\n            'tolerance': 1e-10,\n            'relaxation_factor': 0.,\n            'aero_solver': 'StaticUvlm',\n            'aero_solver_settings': {\n                'rho': ws.rho,\n                'print_info': 'off',\n                'horseshoe': 'off',\n                'num_cores': 4,\n                'n_rollup': 0,\n                'rollup_dt': ws.dt,\n                'rollup_aic_refresh': 1,\n                'rollup_tolerance': 1e-4,\n                'velocity_field_generator': 'SteadyVelocityField',\n                'velocity_field_input': {\n                    'u_inf': ws.u_inf,\n                    'u_inf_direction': ws.u_inf_direction}},\n            'structural_solver': 'NonLinearStatic',\n            'structural_solver_settings': {'print_info': 'off',\n                                           'max_iterations': 150,\n                                           'num_load_steps': 4,\n                                           'delta_curved': 1e-1,\n                                           'min_delta': 1e-10,\n                                           'gravity_on': 'on',\n                                           'gravity': 9.81}}\n\n        ws.config['AerogridPlot'] = {'include_rbm': 'off',\n                                     'include_applied_forces': 'on',\n                                     'minus_m_star': 0}\n\n        ws.config['AeroForcesCalculator'] = {'write_text_file': 'on',\n                                             'text_file_name': ws.case_name + '_aeroforces.csv',\n                                             'screen_output': 'on',\n                                             'unsteady': 'off'}\n\n        ws.config['BeamPlot'] = {'include_rbm': 'off',\n                                 'include_applied_forces': 'on'}\n\n        ws.config['Modal'] = {'NumLambda': 20,\n                              'rigid_body_modes': 'off',\n                              'print_matrices': 'on',\n                              'save_data': 'off',\n                              'rigid_modes_cg': 'off',\n                              'continuous_eigenvalues': 'off',\n                              'dt': 0,\n                              'plot_eigenvalues': False,\n                              'max_rotation_deg': 15.,\n                              'max_displacement': 0.15,\n                              'write_modes_vtk': True,\n                              'use_undamped_modes': True}\n\n        ws.config['LinearAssembler'] = {'linear_system': 'LinearAeroelastic',\n                                        'linear_system_settings': {\n                                            'beam_settings': {'modal_projection': 'on',\n                                                              'inout_coords': 'modes',\n                                                              'discrete_time': 'on',\n                                                              'newmark_damp': 0.5e-4,\n                                                              'discr_method': 'newmark',\n                                                              'dt': ws.dt,\n                                                              'proj_modes': 'undamped',\n                                                              'use_euler': 'off',\n                                                              'num_modes': num_modes,\n                                                              'print_info': 'off',\n                                                              'gravity': 'on',\n                                                              'remove_sym_modes': 'on',\n                                                              'remove_dofs': []},\n                                            'aero_settings': {'dt': ws.dt,\n                                                              'integr_order': integration_order,\n                                                              'density': ws.rho,\n                                                              'remove_predictor': remove_predictor,\n                                                              'use_sparse': use_sparse,\n                                                              'remove_inputs': [],\n                                                              'gust_assembler': 'LeadingEdge',\n                                                              },\n                                        }\n                                        }\n\n        ws.config['LinDynamicSim'] = {'n_tsteps': lin_tsteps,\n                                      'dt': ws.dt,\n                                      'input_generators': [\n                                          {'name': 'control_surface_deflection',\n                                           'index': 0,\n                                           'file_path': self.route_test_dir + '/cases/elevator.txt'},\n                                          {'name': 'u_gust',\n                                           'index': 0,\n                                           'file_path': self.route_test_dir + '/cases/gust.txt'}\n                                      ],\n                                      'postprocessors': ['AerogridPlot'],\n                                      'postprocessors_settings':\n                                          {'AerogridPlot': {'include_rbm': 'on',\n                                                            'include_applied_forces': 'on',\n                                                            'minus_m_star': 0}, }\n                                      }\n\n        ws.config['PickleData'] = {}\n        ws.config.write()\n\n        if not restart:\n            data = sharpy.sharpy_main.main(['', ws.route + ws.case_name + '.sharpy'])\n        else:\n            with open(self.route_test_dir + '/output/{:s}.pkl'.format(ws.case_name), 'rb') as f:\n                data = pickle.load(f)\n\n        return data\n\n    def run_linear_sharpy(self, **kwargs):\n        flow = ['BeamLoader', 'AerogridLoader',\n                'StaticCoupled',\n                'Modal',\n                'LinearAssembler',\n                'LinDynamicSim',\n                'PickleData']\n\n        restart = False\n        if restart:\n            flow = ['LinDynamicSim']\n\n        data = self.run_sharpy(flow, restart=restart, **kwargs)\n\n        return data\n\n    def extract_u_inf(self, data):\n        ts = len(data.aero.timestep_info)\n        _, m_chord, n_span = data.aero.timestep_info[0].u_ext[0].shape\n        u_inf_ext = np.zeros((ts, m_chord, n_span))\n        for i_ts in range(ts):\n            u_inf_ext[i_ts, :, :] = data.aero.timestep_info[i_ts].u_ext[0][2, :, :]\n\n        return u_inf_ext\n\n    def test_linear_gust(self):\n        test_conditions = [\n            {'remove_predictor': True},\n            {'remove_predictor': False},\n        ]\n        for test in test_conditions:\n            with self.subTest(test):\n                data = self.run_linear_sharpy(**test)\n                u_gust_in = np.loadtxt(self.route_test_dir + '/cases/gust.txt')\n                u_inf_ext = self.extract_u_inf(data)\n                if test['remove_predictor']:\n                    predictor_offset = 0\n                else:\n                    # input defined at time step n+1\n                    predictor_offset = 1\n\n                # test leading edge value is equal to input\n                np.testing.assert_array_almost_equal(u_inf_ext[1 + predictor_offset:, 0, 0],\n                                                     u_gust_in[:-1-predictor_offset])\n\n                # check convection in panels downstream\n                for i_chord in range(1, u_inf_ext.shape[1]):\n                    np.testing.assert_array_almost_equal(u_inf_ext[predictor_offset + 1 + i_chord:-i_chord, i_chord, 0],\n                                                         u_inf_ext[predictor_offset + 1 + i_chord - 1:-(i_chord + 1), i_chord - 1, 0])\n\n    def tearDown(self):\n        import shutil\n        folders = ['cases', 'figures', 'output']\n        for folder in folders:\n            if os.path.isdir(self.route_test_dir + '/' + folder):\n                shutil.rmtree(self.route_test_dir + '/' + folder)\n\n\nclass TestGusts(unittest.TestCase):\n\n    def test_campbell(self):\n        \"\"\"\n        Test that the Campell approximation to the Von Karman filter is equivalent in continuous and\n        discrete time\n\n        \"\"\"\n        sigma_w = 1\n        length_scale = 1\n        velocity = 1\n        dt = 1e-1\n        omega_w = np.logspace(-3, 0, 10)\n\n        ss_ct = campbell(sigma_w, length_scale, velocity)\n\n        ss_dt = campbell(sigma_w, length_scale, velocity, dt=dt)\n\n        G_ct = ss_ct.freqresp(omega_w)\n        G_dt = ss_dt.freqresp(omega_w)\n\n        np.testing.assert_array_almost_equal(G_ct[0, 0, :].real, G_dt[0, 0, :].real, decimal=3)\n\n\nif __name__ == '__main__':\n    unittest.main()\n\n\n"
  },
  {
    "path": "tests/linear/horten/__init__.py",
    "content": ""
  },
  {
    "path": "tests/linear/horten/test_horten.py",
    "content": "import sharpy.utils.algebra as algebra\nfrom sharpy.cases.hangar.richards_wing import Baseline\nimport sharpy.sharpy_main\nimport numpy as np\nimport configobj\nimport unittest\nimport os\nimport shutil\n\nroute_test_dir = os.path.abspath(os.path.dirname(os.path.realpath(__file__)))\n\n\ndef run_rom_convergence(case_name, case_route='./cases/', output_folder='./output/', **kwargs):\n    M = kwargs.get('M', 4)\n    N = kwargs.get('N', 11)\n    Msf = kwargs.get('Msf', 10)\n\n    trim = kwargs.get('trim', True)\n\n    rho_fact = 1.\n    track_body = True\n    payload = 0\n    u_inf = kwargs.get('u_inf', 30)\n\n    use_euler = True\n\n    case_name += 'M%gN%gMsf%g_u%g' % (M, N, Msf, u_inf)\n\n    # M4N11Msf5\n    alpha_deg = 3.974\n    cs_deflection = 0.3582\n    thrust = 4.8062\n\n    # ROM settings\n    rom_settings = dict()\n    rom_settings['algorithm'] = 'mimo_rational_arnoldi'\n    rom_settings['r'] = 10\n    rom_settings['frequency'] = np.array([0], dtype=float)\n    rom_settings['single_side'] = 'observability'\n\n    case_name += 'rom_%g_%s' % (rom_settings['r'], rom_settings['single_side'][:3])\n\n    ws = Baseline(M=M,\n                  N=N,\n                  Mstarfactor=Msf,\n                  u_inf=u_inf,\n                  rho=1.02,\n                  alpha_deg=alpha_deg,  # 7.7563783342984385,\n                  roll_deg=0,\n                  cs_deflection_deg=cs_deflection,  # -6.733360628875144,\n                  thrust=thrust,  # 10.140622253017584,\n                  physical_time=20,\n                  case_name=case_name,\n                  case_route=case_route,\n                  case_name_format=2)\n\n    ws.set_properties()\n    ws.initialise()\n    ws.clean_test_files()\n\n    # ws.update_mass_stiffness(sigma=1., sigma_mass=1.5)\n    ws.update_mass_stiffness(sigma=.5, sigma_mass=1.0, payload=payload)\n    ws.update_fem_prop()\n    ws.generate_fem_file()\n    ws.update_aero_properties()\n    ws.generate_aero_file()\n\n    flow = ['BeamLoader',\n            'AerogridLoader',\n            'StaticTrim',\n            'BeamPlot',\n            'AerogridPlot',\n            'AeroForcesCalculator',\n            'DynamicCoupled',\n            'Modal',\n            'LinearAssembler',\n            'AsymptoticStability',\n            'SaveParametricCase'\n            ]\n\n    if not trim:\n        flow[2] = 'StaticCoupled'\n\n    settings = dict()\n    settings['SHARPy'] = {'case': ws.case_name,\n                          'route': ws.case_route,\n                          'flow': flow,\n                          'write_screen': 'off',\n                          'write_log': 'on',\n                          'log_folder': output_folder,\n                          'log_file': ws.case_name + '.log'}\n\n    settings['BeamLoader'] = {'unsteady': 'off',\n                              'orientation': algebra.euler2quat(np.array([ws.roll,\n                                                                          ws.alpha,\n                                                                          ws.beta]))}\n\n    settings['AerogridLoader'] = {'unsteady': 'off',\n                                  'aligned_grid': 'on',\n                                  'mstar': int(ws.M * ws.Mstarfactor),\n                                  'freestream_dir': ['1', '0', '0'],\n                                  'control_surface_deflection': [''],\n                                  'wake_shape_generator': 'StraightWake',\n                                  'wake_shape_generator_input': {'u_inf': u_inf,\n                                                                 'u_inf_direction': [1., 0., 0.],\n                                                                 'dt': ws.dt},\n                                  }\n\n    if ws.horseshoe is True:\n        settings['AerogridLoader']['mstar'] = 1\n\n    settings['StaticCoupled'] = {'print_info': 'on',\n                                 'structural_solver': 'NonLinearStatic',\n                                 'structural_solver_settings': {'print_info': 'off',\n                                                                'max_iterations': 200,\n                                                                'num_load_steps': 1,\n                                                                'delta_curved': 1e-5,\n                                                                'min_delta': ws.tolerance,\n                                                                'gravity_on': 'on',\n                                                                'gravity': 9.81},\n                                 'aero_solver': 'StaticUvlm',\n                                 'aero_solver_settings': {'print_info': 'on',\n                                                          'horseshoe': ws.horseshoe,\n                                                          'num_cores': 4,\n                                                          'n_rollup': int(0),\n                                                          'rollup_dt': ws.dt,\n                                                          'rollup_aic_refresh': 1,\n                                                          'rollup_tolerance': 1e-4,\n                                                          'vortex_radius': 1e-6,\n                                                          'velocity_field_generator': 'SteadyVelocityField',\n                                                          'velocity_field_input': {'u_inf': ws.u_inf,\n                                                                                   'u_inf_direction': [1., 0, 0]},\n                                                          'rho': ws.rho},\n                                 'max_iter': 200,\n                                 'n_load_steps': 1,\n                                 'tolerance': ws.tolerance,\n                                 'relaxation_factor': 0.2}\n\n    settings['StaticTrim'] = {'solver': 'StaticCoupled',\n                              'solver_settings': settings['StaticCoupled'],\n                              'thrust_nodes': ws.thrust_nodes,\n                              'initial_alpha': ws.alpha,\n                              'initial_deflection': ws.cs_deflection,\n                              'initial_thrust': ws.thrust,\n                              'max_iter': 200,\n                              'fz_tolerance': 1e-2,\n                              'fx_tolerance': 1e-2,\n                              'm_tolerance': 1e-2,\n                              'save_info': 'on'}\n\n    settings['AerogridPlot'] = {'include_rbm': 'off',\n                                'include_applied_forces': 'on',\n                                'minus_m_star': 0,\n                                'u_inf': ws.u_inf\n                                }\n    settings['AeroForcesCalculator'] = {'write_text_file': 'off',\n                                        'text_file_name': ws.case_name + '_aeroforces.csv',\n                                        'screen_output': 'on',\n                                        'coefficients': True,\n                                        'q_ref': 0.5 * ws.rho * ws.u_inf ** 2,\n                                        'S_ref': 12.809,\n                                        }\n\n    settings['BeamPlot'] = {'include_rbm': 'on',\n                            'include_applied_forces': 'on',\n                            'include_FoR': 'on'}\n\n    struct_solver_settings = {'print_info': 'off',\n                              'initial_velocity_direction': [-1., 0., 0.],\n                              'max_iterations': 950,\n                              'delta_curved': 1e-6,\n                              'min_delta': ws.tolerance,\n                              'newmark_damp': 5e-3,\n                              'gravity_on': True,\n                              'gravity': 9.81,\n                              'num_steps': ws.n_tstep,\n                              'dt': ws.dt,\n                              'initial_velocity': ws.u_inf * 1}\n\n    step_uvlm_settings = {'print_info': 'on',\n                          'num_cores': 4,\n                          'convection_scheme': ws.wake_type,\n                          'vortex_radius': 1e-6,\n                          'velocity_field_generator': 'SteadyVelocityField',\n                          'velocity_field_input': {'u_inf': ws.u_inf * 0,\n                                                   'u_inf_direction': [1., 0., 0.]},\n                          'rho': ws.rho,\n                          'n_time_steps': ws.n_tstep,\n                          'dt': ws.dt,\n                          'gamma_dot_filtering': 3}\n\n    settings['DynamicCoupled'] = {'print_info': 'on',\n                                  'structural_solver': 'NonLinearDynamicCoupledStep',\n                                  'structural_solver_settings': struct_solver_settings,\n                                  'aero_solver': 'StepUvlm',\n                                  'aero_solver_settings': step_uvlm_settings,\n                                  'fsi_substeps': 200,\n                                  'fsi_tolerance': ws.fsi_tolerance,\n                                  'relaxation_factor': ws.relaxation_factor,\n                                  'minimum_steps': 1,\n                                  'relaxation_steps': 150,\n                                  'final_relaxation_factor': 0.5,\n                                  'n_time_steps': 1,  # ws.n_tstep,\n                                  'dt': ws.dt,\n                                  'include_unsteady_force_contribution': 'off',\n                                  'postprocessors': ['BeamLoads', 'BeamPlot', 'AerogridPlot', 'WriteVariablesTime'],\n                                  'postprocessors_settings': {'BeamLoads': {'csv_output': 'off'},\n                                                              'BeamPlot': {'include_rbm': 'on',\n                                                                           'include_applied_forces': 'on'},\n                                                              'AerogridPlot': {\n                                                                  'u_inf': ws.u_inf,\n                                                                  'include_rbm': 'on',\n                                                                  'include_applied_forces': 'on',\n                                                                  'minus_m_star': 0},\n                                                              'WriteVariablesTime': {\n                                                                  'cleanup_old_solution': 'on',\n                                                                  'delimiter': ',',\n                                                                  'FoR_variables': ['total_forces',\n                                                                                    'total_gravity_forces',\n                                                                                    'for_pos', 'quat'],\n                                                              }}}\n\n    settings['Modal'] = {'print_info': True,\n                         'use_undamped_modes': True,\n                         'NumLambda': 30,\n                         'rigid_body_modes': True,\n                         'write_modes_vtk': 'on',\n                         'print_matrices': 'on',\n                         'save_data': 'on',\n                         'continuous_eigenvalues': 'off',\n                         'dt': ws.dt,\n                         'plot_eigenvalues': False,\n                         'rigid_modes_cg': False}\n\n    settings['LinearAssembler'] = {'linear_system': 'LinearAeroelastic',\n                                   'linearisation_tstep': -1,\n                                   'linear_system_settings': {\n                                       'beam_settings': {'modal_projection': 'on',\n                                                         'inout_coords': 'modes',\n                                                         'discrete_time': True,\n                                                         'newmark_damp': 0.5e-2,\n                                                         'discr_method': 'newmark',\n                                                         'dt': ws.dt,\n                                                         'proj_modes': 'undamped',\n                                                         'use_euler': use_euler,\n                                                         'num_modes': 20,\n                                                         'print_info': 'on',\n                                                         'gravity': 'on',\n                                                         'remove_dofs': []},\n                                       'aero_settings': {'dt': ws.dt,\n                                                         'integr_order': 2,\n                                                         'density': ws.rho * rho_fact,\n                                                         'remove_predictor': False,\n                                                         'use_sparse': False,\n                                                         'vortex_radius': 1e-6,\n                                                         'remove_inputs': ['u_gust'],\n                                                         'rom_method': ['Krylov'],\n                                                         'rom_method_settings': {'Krylov': rom_settings}},\n                                       'track_body': track_body,\n                                       'use_euler': use_euler,\n                                   }}\n\n    settings['AsymptoticStability'] = {\n        'print_info': 'on',\n        'modes_to_plot': [],\n        # 'velocity_analysis': [27, 29, 3],\n        'display_root_locus': 'off',\n        'frequency_cutoff': 0,\n        'export_eigenvalues': 'on',\n        'target_system': ['aeroelastic', 'aerodynamic', 'structural'],\n        'output_file_format': 'dat',\n        'num_evals': 100}\n\n    settings['FrequencyResponse'] = {'print_info': 'on',\n                                     'frequency_bounds': [0.1, 100]}\n\n    settings['LinDynamicSim'] = {'dt': ws.dt,\n                                 'n_tsteps': ws.n_tstep,\n                                 'sys_id': 'LinearAeroelastic',\n                                 # 'reference_velocity': ws.u_inf,\n                                 'write_dat': ['x', 'y', 't', 'u'],\n                                 # 'write_dat': 'on',\n                                 'postprocessors': ['BeamPlot', 'AerogridPlot'],\n                                 'postprocessors_settings': {'AerogridPlot': {\n                                     'u_inf': ws.u_inf,\n                                     'include_rbm': 'on',\n                                     'include_applied_forces': 'on',\n                                     'minus_m_star': 0},\n                                     'BeamPlot': {'include_rbm': 'on',\n                                                  'include_applied_forces': 'on'}}}\n\n    settings['StabilityDerivatives'] = {'u_inf': ws.u_inf,\n                                        'S_ref': 12.809,\n                                        'b_ref': ws.span,\n                                        'c_ref': 0.719}\n\n    settings['SaveData'] = {'save_aero': 'off',\n                            'save_struct': 'off',\n                            'save_linear': 'on',\n                            'save_linear_uvlm': 'on'}\n\n    settings['PickleData'] = {}\n\n    settings['SaveParametricCase'] = {'parameters': {'r': rom_settings['r']}}\n\n    config = configobj.ConfigObj()\n    file_name = ws.case_route + '/' + ws.case_name + '.solver.txt'\n    config.filename = file_name\n    for k, v in settings.items():\n        config[k] = v\n    config.write()\n\n    return sharpy.sharpy_main.main(['', ws.case_route + '/' + ws.case_name + '.solver.txt'])\n\n\nclass TestHortenWing(unittest.TestCase):\n\n\n    def test_horten(self):\n\n        M = 4\n        N = 11\n        Msf = 5\n\n        trim = False\n\n        case_name = 'horten_'\n\n        case_route = route_test_dir + '/cases/'\n        output_route = route_test_dir + '/output/'\n\n        data = run_rom_convergence(case_name=case_name, case_route=case_route,\n                                   output_folder=output_route,\n                                   M=M, N=N, Msf=Msf, trim=trim)\n\n        # check first 10 eigs are zero (9 integro states + yaw)\n        path_to_eigs = data.output_folder + '/stability/aeroelastic_eigenvalues.dat'\n        eigs = np.loadtxt(path_to_eigs)\n\n        # check that aerodynamic and structural eigs are also written\n        target_system = ['aerodynamic', 'structural']\n        for sys in target_system:\n            np.loadtxt(data.output_folder + f'/stability/{sys}_eigenvalues.dat')\n\n        np.testing.assert_allclose(np.abs(eigs[:10]), 0, atol=1e-8)\n\n        # check that the phugoid mode is there (more or less, very high tolerance)\n        phugoid_eigs = eigs[11]\n        wn_phugoid = np.linalg.norm(phugoid_eigs)\n        period_phugoid = 2 * np.pi / wn_phugoid\n        np.testing.assert_allclose(period_phugoid, 20.7, atol=0.1, rtol=0.1)\n\n    def tearDown(self):\n        folders = ['output/', 'cases/']\n\n        for folder in folders:\n            if os.path.isdir(route_test_dir + '/' + folder):\n                shutil.rmtree(route_test_dir + '/' + folder)\n\n\nif __name__ == '__main__':\n    unittest.main()\n"
  },
  {
    "path": "tests/linear/rom/__init__.py",
    "content": ""
  },
  {
    "path": "tests/linear/rom/test_balancing.py",
    "content": "import copy\nimport unittest\nimport sharpy.linear.src.libss as libss\nimport sharpy.rom.utils.librom as librom\nimport numpy as np\nimport sharpy.linear.src.libsparse as libsp\nimport scipy.linalg as scalg\n\n\nclass TestBalancing(unittest.TestCase):\n    \"\"\"\n    Test Balancing ROM methods\n\n    \"\"\"\n\n    def test_balreal_direct_py(self):\n        Nx, Nu, Ny = 6, 4, 2\n        ss = libss.random_ss(Nx, Nu, Ny, dt=0.1, stable=True)\n\n        ### direct balancing\n        hsv, T, Ti = librom.balreal_direct_py(ss.A, ss.B, ss.C,\n                                              DLTI=True, full_outputs=False)\n        ssb = copy.deepcopy(ss)\n\n        # Note: notation below is correct and consistent with documentation\n        # SHARPy historically uses notation different from regular literature notation (i.e. 'swapped')\n        ssb.project(Ti, T)\n\n        # Compare freq. resp. - inconclusive!\n        # The system is consistently transformed using T and Tinv - system dynamics do not change, independent of\n        # choice of T and Tinv. Frequency response will yield the same response:\n        kv = np.linspace(0.01, 10)\n        Y = ss.freqresp(kv)\n        Yb = ssb.freqresp(kv)\n        er_max = np.max(np.abs(Yb - Y))\n        assert er_max / np.max(np.abs(Y)) < 1e-10, 'Error too large in frequency response'\n\n        # Compare grammians:\n        Wc = scalg.solve_discrete_lyapunov(ssb.A, np.dot(ssb.B, ssb.B.T))\n        Wo = scalg.solve_discrete_lyapunov(ssb.A.T, np.dot(ssb.C.T, ssb.C))\n\n        er_grammians = np.max(np.abs(Wc - Wo))\n        # Print grammians to compare:\n        if er_grammians / np.max(np.abs(Wc)) > 1e-10:\n            print('Controllability grammian, Wc:\\n', Wc)\n            print('Observability grammian, Wo:\\n', Wo)\n\n        er_hankel = np.max(np.abs(np.diag(hsv) - Wc))\n        # Print hsv to compare:\n        if er_hankel / np.max(np.abs(Wc)) > 1e-10:\n            print('Controllability grammian, Wc:\\n', Wc)\n            print('Hankel values matrix, HSV:\\n', hsv)\n\n        assert er_grammians / np.max(np.abs(Wc)) < 1e-10, 'Relative error in Wc-Wo is too large -> Wc != Wo'\n        assert er_hankel / np.max(np.abs(Wc)) < 1e-10, 'Relative error in Wc-HSV is too large -> Wc != HSV'\n\n        # The test below is inconclusive for the direct procedure! T and Tinv are produced from svd(M)\n        # This means that going back from svd(M) to T and Tinv will yield the same result for any choice of T and Tinv\n        # Unless something else is wrong (e.g. a typo) - so leaving it in.\n        # test full_outputs option\n        hsv, U, Vh, Qc, Qo = librom.balreal_direct_py(ss.A, ss.B, ss.C,\n                                                      DLTI=True, full_outputs=True)\n\n        # build M matrix and SVD\n        sinv = hsv ** (-0.5)\n        T2 = libsp.dot(Qc, Vh.T * sinv)\n        Ti2 = np.dot((U * sinv).T, Qo.T)\n        assert np.linalg.norm(T2 - T) < 1e-13, 'Error too large'\n        assert np.linalg.norm(Ti2 - Ti) < 1e-13, 'Error too large'\n\n        ssb2 = copy.deepcopy(ss)\n        ssb2.project(Ti2, T2)\n        Yb2 = ssb2.freqresp(kv)\n        er_max = np.max(np.abs(Yb2 - Y))\n        assert er_max / np.max(np.abs(Y)) < 1e-10, 'Error too large'\n"
  },
  {
    "path": "tests/linear/rom/test_krylov.py",
    "content": "\"\"\"\nTest Krylov ROM using Hospital Building Model\n\"\"\"\n\nimport os\nimport unittest\nimport numpy as np\n\nimport sharpy.utils.frequencyutils\nimport sharpy.utils.cout_utils as cout\nimport scipy.io as scio\nimport sharpy.utils.sharpydir as sharpydir\nimport sharpy.linear.src.libss as libss\nimport sharpy.rom.krylov as krylov\nimport sharpy.linear.src.libsparse as libsp\n\n\nclass TestKrylov(unittest.TestCase):\n\n    test_dir = sharpydir.SharpyDir + '/tests/linear/rom'\n\n    def setUp(self):\n        cout.cout_wrap.initialise(False, False)\n        A = scio.loadmat(TestKrylov.test_dir + '/src/' + 'A.mat')\n        B = scio.loadmat(TestKrylov.test_dir + '/src/' + 'B.mat')\n        C = scio.loadmat(TestKrylov.test_dir + '/src/' + 'C.mat')\n        A = libsp.csc_matrix(A['A'])\n        B = B['B']\n        C = C['C']\n        D = np.zeros((B.shape[1], C.shape[0]))\n\n        A = A.todense()\n\n        self.ss = libss.StateSpace(A, B, C, D)\n\n        self.rom = krylov.Krylov()\n\n        if not os.path.exists(self.test_dir + '/figs/'):\n            os.makedirs(self.test_dir + '/figs/')\n\n    def run_test(self, test_settings):\n        self.rom.initialise(test_settings)\n        ssrom = self.rom.run(self.ss)\n\n        # self.rom.restart()\n        frequency = test_settings['frequency'].imag\n        if frequency[0] != 0.:\n            wv = np.logspace(np.log10(np.min(frequency))-0.5, np.log10(np.max(frequency))+0.5, 100)\n        else:\n            wv = np.logspace(-1, 2, 100)\n        Y_fom = self.ss.freqresp(wv)\n        Y_rom = ssrom.freqresp(wv)\n\n        max_error = sharpy.utils.frequencyutils.frequency_error(Y_fom, Y_rom, wv)\n\n        # can be used for debugging\n        # import matplotlib.pyplot as plt\n        # fig = plt.figure()\n        # plt.semilogx(wv, Y_fom[0, 0, :].real)\n        # plt.semilogx(wv, Y_rom[0, 0, :].real)\n        #\n        # fig.savefig(self.test_dir + '/figs/%sfreqresp.png' %test_settings['algorithm'])\n\n        assert np.log10(max_error) < -2, 'Significant mismatch in ROM frequency Response'\n\n        # check saving function\n        if os.path.isfile(self.test_dir + '/rom_data.h5'):\n            os.remove(self.test_dir + '/rom_data.h5')\n        self.rom.save(self.test_dir + '/rom_data.h5')\n\n    def test_krylov(self):\n        algorithm_list = {\n            'one_sided_arnoldi':\n                {'r': 48,\n                 'frequency': np.array([0])},\n            'dual_rational_arnoldi':\n                {'r': 48,\n                 'frequency': np.array([0])}\n            }\n        for algorithm in list(algorithm_list.keys()):\n            with self.subTest(algorithm=algorithm):\n                test_settings = {'algorithm': algorithm,\n                                 'r': algorithm_list[algorithm]['r'],\n                                 'frequency': algorithm_list[algorithm]['frequency']}\n                self.run_test(test_settings)\n\n    def tearDown(self):\n        import shutil\n        shutil.rmtree(self.test_dir + '/figs/')\n        os.remove(self.test_dir + '/rom_data.h5')\n\nif __name__ == '__main__':\n    unittest.main()\n"
  },
  {
    "path": "tests/linear/rom/test_rom_framework.py",
    "content": "import numpy as np\nimport os\nimport unittest\nimport sharpy.cases.templates.flying_wings as wings\nimport sharpy.sharpy_main\n\n\nclass TestROMFramework(unittest.TestCase):\n    \"\"\"\n    Test verifyies the execution of the balancing ROMs (i.e. checks that everything runs rather than checking\n    against a benchmark case\n    \"\"\"\n\n    def setUp(self):\n        # Problem Set up\n        u_inf = 1.\n        alpha_deg = 0.\n        rho = 1.02\n        num_modes = 4\n\n        # Lattice Discretisation\n        M = 4\n        N = 8\n        M_star_fact = 1\n\n        # Linear UVLM settings\n        integration_order = 2\n        remove_predictor = False\n        use_sparse = False\n\n        # Case Admin - Create results folders\n        case_name = 'goland_cs'\n        case_nlin_info = 'M%dN%dMs%d_nmodes%d' % (M, N, M_star_fact, num_modes)\n        case_name += case_nlin_info\n\n        self.route_test_dir = os.path.abspath(os.path.dirname(os.path.realpath(__file__)))\n        fig_folder = self.route_test_dir + '/figures/'\n        os.makedirs(fig_folder, exist_ok=True)\n\n        # SHARPy nonlinear reference solution\n        ws = wings.Goland(M=M,\n                          N=N,\n                          Mstar_fact=M_star_fact,\n                          u_inf=u_inf,\n                          alpha=alpha_deg,\n                          rho=rho,\n                          sweep=0,\n                          physical_time=2,\n                          n_surfaces=2,\n                          route=self.route_test_dir + '/cases',\n                          case_name=case_name)\n\n        ws.gust_intensity = 0.01\n        ws.sigma = 1\n        ws.horseshoe = True\n\n        ws.clean_test_files()\n        ws.update_derived_params()\n        ws.set_default_config_dict()\n\n        ws.generate_aero_file()\n        ws.generate_fem_file()\n\n        ws.config['SHARPy'] = {\n            'flow':\n                ['BeamLoader', 'AerogridLoader',\n                 'StaticCoupled',\n                 'AerogridPlot',\n                 'BeamPlot',\n                 'Modal',\n                 'LinearAssembler',\n                 'FrequencyResponse',\n                 ],\n            'case': ws.case_name, 'route': ws.route,\n            'write_screen': 'off', 'write_log': 'on',\n            'log_folder': self.route_test_dir + '/output/',\n            'log_file': ws.case_name + '.log'}\n\n        ws.config['BeamLoader'] = {\n            'unsteady': 'off',\n            'orientation': ws.quat}\n\n        ws.config['AerogridLoader'] = {\n            'unsteady': 'off',\n            'aligned_grid': 'on',\n            'mstar': 1,\n            'freestream_dir': ws.u_inf_direction,\n            'wake_shape_generator': 'StraightWake',\n            'wake_shape_generator_input': {'u_inf': ws.u_inf,\n                                           'u_inf_direction': ws.u_inf_direction,\n                                           'dt': ws.dt}\n        }\n\n        ws.config['StaticUvlm'] = {\n            'rho': ws.rho,\n            'velocity_field_generator': 'SteadyVelocityField',\n            'velocity_field_input': {\n                'u_inf': ws.u_inf,\n                'u_inf_direction': ws.u_inf_direction},\n            'rollup_dt': ws.dt,\n            'print_info': 'on',\n            'horseshoe': 'off',\n            'num_cores': 4,\n            'n_rollup': 0,\n            'rollup_aic_refresh': 0,\n            'rollup_tolerance': 1e-4}\n\n        ws.config['StaticCoupled'] = {\n            'print_info': 'on',\n            'max_iter': 200,\n            'n_load_steps': 1,\n            'tolerance': 1e-10,\n            'relaxation_factor': 0.,\n            'aero_solver': 'StaticUvlm',\n            'aero_solver_settings': {\n                'rho': ws.rho,\n                'print_info': 'off',\n                'horseshoe': 'off',\n                'num_cores': 4,\n                'n_rollup': 0,\n                'rollup_dt': ws.dt,\n                'rollup_aic_refresh': 1,\n                'rollup_tolerance': 1e-4,\n                'velocity_field_generator': 'SteadyVelocityField',\n                'velocity_field_input': {\n                    'u_inf': ws.u_inf,\n                    'u_inf_direction': ws.u_inf_direction}},\n            'structural_solver': 'NonLinearStatic',\n            'structural_solver_settings': {'print_info': 'off',\n                                           'max_iterations': 150,\n                                           'num_load_steps': 4,\n                                           'delta_curved': 1e-1,\n                                           'min_delta': 1e-10,\n                                           'gravity_on': 'on',\n                                           'gravity': 9.754}}\n\n        ws.config['AerogridPlot'] = {'include_rbm': 'off',\n                                     'include_applied_forces': 'on',\n                                     'minus_m_star': 0}\n\n        ws.config['AeroForcesCalculator'] = {'write_text_file': 'on',\n                                             'text_file_name': ws.case_name + '_aeroforces.csv',\n                                             'screen_output': 'on',\n                                             'unsteady': 'off'}\n\n        ws.config['BeamPlot'] = {'include_rbm': 'off',\n                                 'include_applied_forces': 'on'}\n\n        ws.config['Modal'] = {'NumLambda': 20,\n                              'rigid_body_modes': 'off',\n                              'print_matrices': 'on',\n                              'save_data': 'off',\n                              'rigid_modes_cg': 'off',\n                              'continuous_eigenvalues': 'off',\n                              'dt': 0,\n                              'plot_eigenvalues': False,\n                              'max_rotation_deg': 15.,\n                              'max_displacement': 0.15,\n                              'write_modes_vtk': True,\n                              'use_undamped_modes': True}\n\n        ws.config['LinearAssembler'] = {'linear_system': 'LinearAeroelastic',\n                                        'linear_system_settings': {\n                                            'beam_settings': {'modal_projection': 'on',\n                                                              'inout_coords': 'modes',\n                                                              'discrete_time': 'on',\n                                                              'newmark_damp': 0.5e-4,\n                                                              'discr_method': 'newmark',\n                                                              'dt': ws.dt,\n                                                              'proj_modes': 'undamped',\n                                                              'use_euler': 'off',\n                                                              'num_modes': num_modes,\n                                                              'print_info': 'on',\n                                                              'gravity': 'on',\n                                                              'remove_sym_modes': 'on',\n                                                              'remove_dofs': []},\n                                            'aero_settings': {'dt': ws.dt,\n                                                              'ScalingDict': {'length': 0.5 * ws.c_ref,\n                                                                              'speed': u_inf,\n                                                                              'density': rho},\n                                                              'integr_order': integration_order,\n                                                              'density': ws.rho,\n                                                              'remove_predictor': remove_predictor,\n                                                              'use_sparse': use_sparse,\n                                                              'remove_inputs': ['u_gust'],\n                                                              },\n                                        }\n                                        }\n\n        ws.config['LinDynamicSim'] = {'dt': ws.dt,\n                                      'n_tsteps': ws.n_tstep,\n                                      'sys_id': 'LinearAeroelastic',\n                                      'postprocessors': ['BeamPlot', 'AerogridPlot'],\n                                      'postprocessors_settings': {'AerogridPlot': {\n                                          'u_inf': ws.u_inf,\n                                          'include_rbm': 'on',\n                                          'include_applied_forces': 'on',\n                                          'minus_m_star': 0},\n                                          'BeamPlot': {'include_rbm': 'on',\n                                                       'include_applied_forces': 'on'}}}\n\n        ws.config['FrequencyResponse'] = {'quick_plot': 'off',\n                                          'frequency_unit': 'k',\n                                          'frequency_bounds': [0.0001, 1.0],\n                                          'target_system': ['aeroelastic']\n                                          }\n\n        self.ws = ws\n\n    def test_roms(self):\n        settings = dict()\n        settings['Direct'] = {'algorithm': 'Direct',\n                              'print_info': 'off',\n                              'algorithm_settings': {'tune': 'off',\n                                                     'use_schur': 'on',\n                                                     'reduction_method': 'realisation'}}\n\n        settings['FrequencyLimited'] = {'algorithm': 'FrequencyLimited',\n                                        'print_info': 'off',\n                                        'algorithm_settings': {'frequency': 0.8,\n                                                               'method_low': 'trapz',\n                                                               'options_low': {'points': 3},\n                                                               'method_high': 'gauss',\n                                                               'options_high': {'partitions': 2, 'order': 1},\n                                                               'check_stability': True}}\n\n        settings['Iterative'] = {'algorithm': 'Iterative',\n                                 'print_info': 'off',\n                                 'algorithm_settings': {'lowrank': 'on'}}\n\n        for rom in settings:\n            with self.subTest(rom):\n                self.ws.config['LinearAssembler']['linear_system_settings']['aero_settings']['rom_method'] = [\n                    'Balanced']\n                rom_settings = {'Balanced': settings[rom]}\n                self.ws.config['LinearAssembler']['linear_system_settings']['aero_settings']['rom_method_settings'] = \\\n                    rom_settings\n                self.ws.config.write()\n                sharpy.sharpy_main.main(['', self.ws.route + self.ws.case_name + '.sharpy'])\n\n    def tearDown(self):\n        import shutil\n        folders = ['cases', 'figures', 'output']\n        for folder in folders:\n            try:\n                shutil.rmtree(self.route_test_dir + '/' + folder)\n            except FileNotFoundError:\n                pass\n\n\nif __name__ == '__main__':\n    unittest.main()\n"
  },
  {
    "path": "tests/linear/rom/test_schur.py",
    "content": "\"\"\"Test Schur Removal of Unstable Eigenvalues\n\n\"\"\"\n\nimport numpy as np\nimport unittest\nimport sharpy.rom.krylov as krylov\nimport os\nimport sharpy.utils.cout_utils as coututils\n\n\nclass TestSchurDecomposition(unittest.TestCase):\n\n    test_dir = os.path.abspath(os.path.dirname(__file__))\n    A = np.loadtxt(test_dir + '/src/schur_A.dat')\n    eigsA = np.linalg.eigvals(A)\n\n    def setUp(self):\n        coututils.start_writer()\n\n    def test_dt(self):\n        \"\"\"\n        Discrete time system test. Ensures that all eigenvalues inside the unit circle are preserved.\n        \"\"\"\n        A = TestSchurDecomposition.A\n        eigsA = TestSchurDecomposition.eigsA\n\n        rom = krylov.Krylov()\n        TL, TR = rom.stable_realisation(A, ct=False)\n\n        n_stable_fom = np.sum(np.abs(eigsA) <= 1)\n        Ap = TL.T.dot(A.dot(TR))\n\n        eigsAp = np.linalg.eigvals(Ap)\n        n_stable_rom = np.sum(np.abs(eigsAp) <= 1)\n\n        assert n_stable_rom == n_stable_fom, 'Number of stable eigenvalues not preserved during decomposition'\n\n    def test_ct(self):\n        \"\"\"\n        Continuous time system test. Ensures that all eigenvalues in the left hand plane are preserved.\n        \"\"\"\n        A = TestSchurDecomposition.A\n        eigsA = TestSchurDecomposition.eigsA\n\n        rom = krylov.Krylov()\n        TL, TR = rom.stable_realisation(A, ct=True)\n\n        n_stable_fom = np.sum(eigsA.real <= 0)\n        Ap = TL.T.dot(A.dot(TR))\n\n        eigsAp = np.linalg.eigvals(Ap)\n        n_stable_rom = np.sum(eigsAp.real <= 0)\n\n        assert n_stable_rom == n_stable_fom, 'Number of stable eigenvalues not preserved during decomposition'\n\n    def tearDown(self):\n        coututils.finish_writer()\n"
  },
  {
    "path": "tests/linear/rom/test_springmasssystem.py",
    "content": "\"\"\"\nGenerate a mass spring system\n\nNGoizueta 16 Feb 2019\n\n\"\"\"\n\nimport numpy as np\nimport sharpy.linear.src.libss as libss\nimport sharpy.linear.src.lingebm as lingebm\nimport sharpy.rom.krylov as krylov\nimport unittest\n# import matplotlib.pyplot as plt\nimport sharpy.utils.cout_utils as cout\n\ncout.cout_wrap.initialise(False, False)\n\n@unittest.skip('Not a robust test case that is giving too many failures. Use test_krylov instead')\nclass TestKrylovRom(unittest.TestCase):\n\n    tolerance = 1e-3\n    display_output = True\n\n    def test_siso_ct(self):\n        system_inputs = 'SISO'\n        system_time = 'ct'\n\n        ss = self.build_system(system_inputs, system_time)\n\n        algorithm = 'two_sided_arnoldi'\n        interpolation_point = np.array([1.0j])\n        r = 7\n\n        print('\\nTesting CT, SISO rational Arnoldi...')\n        rom = self.run_rom(ss, algorithm, r, interpolation_point)\n\n        wv = np.logspace(-1, 3, 1000)\n        freq_error = self.compare_freq_resp(rom, wv, interpolation_point)\n\n        print('Frequency Response Error at %.2f rad/s: %.2e' % (interpolation_point.imag, freq_error))\n\n        self.assertTrue(freq_error < self.tolerance)\n\n    def test_siso_dt(self):\n        system_inputs = 'SISO'\n        system_time = 'dt'\n\n        ss = self.build_system(system_inputs, system_time)\n\n        algorithm = 'two_sided_arnoldi'\n        interpolation_point_ct = np.array([0.8j])\n        r = 7\n\n        print('\\nTesting DT, SISO rational Arnoldi...')\n        rom = self.run_rom(ss, algorithm, r, interpolation_point_ct)\n\n        wv = np.logspace(-1, 3, 1000)\n        freq_error = self.compare_freq_resp(rom, wv, interpolation_point_ct)\n\n        print('Frequency Response Error at %.2f rad/s: %.2e' % (interpolation_point_ct.imag, freq_error))\n\n        self.assertTrue(freq_error < self.tolerance)\n\n    def test_siso_dt_multipoint(self):\n        system_inputs = 'SISO'\n        system_time = 'dt'\n\n        ss = self.build_system(system_inputs, system_time)\n\n        algorithm = 'dual_rational_arnoldi'\n        interpolation_point_ct = np.array([0.0, 2.0j, 11.0j])\n        r = 7\n\n        print('\\nTesting DT, SISO Multipoint rational Arnoldi...')\n        rom = self.run_rom(ss, algorithm, r, interpolation_point_ct)\n\n        wv = np.logspace(-1, 3, 1000)\n        for i in range(len(interpolation_point_ct)):\n            freq_error = self.compare_freq_resp(rom, wv, interpolation_point_ct[i])\n            print('Frequency Response Error at %.2f rad/s: %.2e' % (interpolation_point_ct[i].imag, freq_error))\n            self.assertTrue(freq_error < self.tolerance)\n\n\n    def build_system(self, system_inputs, system_time):\n        N = 5  # Number of masses/springs/dampers\n\n        k_db = np.linspace(1, 10, N)  # Stiffness database\n        m_db = np.logspace(2, 0, N)  # Mass database\n        C_db = np.ones(N) * 1e-1  # Damping database\n\n        # Build mass matrix\n        m = np.zeros((N, N))\n        k = np.zeros((N, N))\n        C = np.zeros((N, N))\n        m[0, 0] = m_db[0]\n\n        k[0, 0:2] = [k_db[0]+k_db[1], -k_db[1]]\n        C[0, 0:2] = [C_db[0] + C_db[1], -C_db[1]]\n        for i in range(1, N-1):\n            k[i, i-1:i+2] = [-k_db[i-1], k_db[i]+k_db[i+1], -k_db[i+1]]\n            C[i, i-1:i+2] = [-C_db[i-1], C_db[i]+C_db[i+1], -C_db[i+1]]\n            m[i, i] = m_db[i]\n        m[-1, -1] = m_db[-1]\n        k[-1, -2:] = [-k_db[-1], k_db[-1]]\n        C[-1, -2:] = [-C_db[-1], C_db[-1]]\n\n        # Input: Forces, Output: Displacements\n        if system_inputs == 'MIMO':\n            b = np.zeros((2*N, N))\n            b[N:, :] = np.eye(N)\n            # Output rn\n            c = np.zeros((N, 2*N))\n            c[:, :N] = np.eye(N)\n            d = np.zeros((N, N))\n        else:\n            b = np.zeros((2*N,))\n            b[-1] = 1.\n            c = np.zeros((1, 2*N))\n            c[0, N-1] = 1\n            d = np.zeros(1)\n\n        # Plant matrix\n        Minv = np.linalg.inv(m)\n        MinvK = Minv.dot(k)\n        A = np.zeros((2*N, 2*N))\n        A[:N, N:] = np.eye(N)\n        A[N:, :N] = -MinvK\n        A[N:, N:] = -Minv.dot(C)\n\n        # Build State Space\n        if system_time == 'ct':\n            system = libss.StateSpace(A, b, c, d, dt=None)\n\n        else:\n            # Discrete time system\n            dt = 1e-2\n            Adt, Bdt, Cdt, Ddt = lingebm.newmark_ss(m, C, k, dt=dt, num_damp=0)\n\n            system = libss.StateSpace(Adt, Bdt, Cdt, Ddt, dt=dt)\n\n            # SISO Gains for DT system\n            if system_inputs == 'SISO':\n                b_dt = np.zeros((N))\n                b_dt[-1] = 1\n                system.addGain(b_dt, 'in')\n\n                system.addGain(c, where='out')\n\n        return system\n\n    def run_rom(self, system, algorithm, r, interpolation_point):\n        rom = krylov.Krylov()\n        rom_settings = {'algorithm': algorithm,\n                        'r': r,\n                        'frequency': interpolation_point}\n\n        rom.initialise(in_settings=rom_settings)\n\n        rom.run(system)\n\n        return rom\n\n    def compare_freq_resp(self, rom, wv, interpolation_frequency, show_plots=False):\n\n        Y_fom = rom.ss.freqresp(wv)\n        Y_rom = rom.ssrom.freqresp(wv)\n\n        interpol_index = np.argwhere(wv >= interpolation_frequency.imag)[0]\n\n        error = np.abs(Y_fom[0, 0, interpol_index] - Y_rom[0, 0, interpol_index])\n\n        if TestKrylovRom.display_output:\n            pass\n            # fig, ax = plt.subplots(nrows=2)\n            # ax[0].semilogx(wv, np.abs(Y_fom[0, 0, :]), 'k-')\n            # ax[0].semilogx(wv, np.abs(Y_rom[0, 0, :]), '--', color='0.2')\n\n            # ax[1].semilogx(wv, np.angle(Y_fom[0, 0, :]), 'k-')\n            # ax[1].semilogx(wv, np.angle(Y_rom[0, 0, :]), '--', color='0.2')\n            # fig.show()\n        return error\n\n    def tearDown(self):\n        cout.cout_wrap = cout.Writer()\n\n# evals_DT = np.linalg.eigvals(system_DT.A)\n#\n# evals_dt_conv = np.log(evals_DT) / dt\n# #\n# plt.scatter(evals_ss.real, evals_ss.imag, marker='s')\n# # plt.scatter(evals_dt_conv.real, evals_dt_conv.imag, marker='^')\n# # plt.show()\n#\n# wv = np.logspace(-1, 1, 1000)\n# freqresp = system_DT.freqresp(wv)\n# freqresp_ct = system_CT.freqresp(wv)\n#\n# # fig, ax = plt.subplots(nrows=1)\n# # bode_mag_dt = (freqresp[0, 0, :].real)\n# # bode_mag_ct = (freqresp_ct[0, 0, :].real)\n# # ax.semilogx(wv, bode_mag_dt)\n# # ax.semilogx(wv, bode_mag_ct, ls='--')\n# #\n# # fig.show()\n#\n# print('Routine Complete')\n#\n# # ROM\n# rom = krylov.KrylovReducedOrderModel()\n# rom.initialise(data=None,ss=system_DT)\n#\n# algorithm = 'dual_rational_arnoldi'\n# # algorithm = 'arnoldi'\n# r = 1\n# # frequency = np.array([1.0, 1.005j])\n# # frequency = np.array([np.inf])\n# frequency = np.array([0.7j, 1.0j])\n# z_interpolation = np.exp(frequency*dt)\n#\n# rom.run(algorithm,r, frequency=z_interpolation)\n#\n# plot_freq = freq_plots.FrequencyResponseComparison()\n# plot_settings = {'frequency_type': 'w',\n#                  'plot_type': 'bode'}\n#\n# plot_freq.initialise(None, system_DT, rom, plot_settings)\n# if system_inputs == 'MIMO':\n#     plot_freq.plot_frequency_response(wv, freqresp[:3, :3, :], rom.ssrom.freqresp(wv)[:3, :3, :], frequency)\n# else:\n#     plot_freq.plot_frequency_response(wv, freqresp, rom.ssrom.freqresp(wv), frequency)\n\n# plot_freq.plot_frequency_response(wv, freqresp[4:, 4:, :], rom.ssrom.freqresp(wv), frequency)\n# plot_freq.save_figure('DT_07_1_r2.png')\n\nif __name__=='__main__':\n    unittest.main()\n"
  },
  {
    "path": "tests/linear/statespace/__init__.py",
    "content": ""
  },
  {
    "path": "tests/linear/statespace/test_statespace.py",
    "content": "import copy\nimport unittest\nimport os\n\nimport numpy as np\n\nfrom sharpy.linear.src import libsparse as libsp\nfrom sharpy.linear.src.libss import StateSpace, SSconv, compare_ss, scale_SS, Gain, random_ss, couple, join, disc2cont, series\nfrom sharpy.linear.utils.ss_interface import LinearVector, InputVariable, StateVariable, OutputVariable\n\n\nclass Test_dlti(unittest.TestCase):\n    \"\"\" Test methods into this module for DLTI systems \"\"\"\n\n    def setUp(self):\n        # allocate some state-space model (dense and sparse)\n        dt = 0.3\n        Ny, Nx, Nu = 8, 3, 5\n        A = np.random.rand(Nx, Nx)\n        B = np.random.rand(Nx, Nu)\n        C = np.random.rand(Ny, Nx)\n        D = np.random.rand(Ny, Nu)\n        self.SS = StateSpace(A, B, C, D, dt=dt)\n        self.SSsp = StateSpace(libsp.csc_matrix(A), libsp.csc_matrix(B), C, D, dt=dt)\n\n        self.SS.input_variables = LinearVector([InputVariable('input1', size=3, index=0),\n                                                InputVariable('input2', size=2, index=1)])\n        self.SS.state_variables = LinearVector([StateVariable('state1', size=3, index=0)])\n        self.SS.output_variables = LinearVector([OutputVariable('output1', size=3, index=0),\n                                                 OutputVariable('output2', size=5, index=1)])\n\n        self.SSsp.input_variables = self.SS.input_variables\n        self.SSsp.output_variables = self.SS.output_variables\n        self.SSsp.state_variables = self.SS.state_variables\n\n    def test_SSconv(self):\n\n        SS = self.SS\n        SSsp = self.SSsp\n        Nu, Nx, Ny = SS.inputs, SS.states, SS.outputs\n        A, B, C, D = SS.get_mats()\n\n        # remove predictor: try different scenario\n        B1 = np.random.rand(Nx, Nu)\n        SSpr0 = StateSpace(*SSconv(A, B, B1, C, D), dt=0.3)\n        SSpr1 = StateSpace(*SSconv(A, B, libsp.csc_matrix(B1), C, D), dt=0.3)\n        SSpr2 = StateSpace(*SSconv(\n            libsp.csc_matrix(A), B, libsp.csc_matrix(B1), C, D), dt=0.3)\n        SSpr3 = StateSpace(*SSconv(\n            libsp.csc_matrix(A), libsp.csc_matrix(B), B1, C, D), dt=0.3)\n        SSpr4 = StateSpace(*SSconv(\n            libsp.csc_matrix(A), libsp.csc_matrix(B), libsp.csc_matrix(B1), C, D), dt=0.3)\n        compare_ss(SSpr0, SSpr1)\n        compare_ss(SSpr0, SSpr2)\n        compare_ss(SSpr0, SSpr3)\n        compare_ss(SSpr0, SSpr4)\n\n    def test_scale_SS(self):\n\n        SS = self.SS\n        SSsp = self.SSsp\n        Nu, Nx, Ny = SS.inputs, SS.states, SS.outputs\n\n        # scale (hard-copy)\n        insc = np.random.rand(Nu)\n        stsc = np.random.rand(Nx)\n        outsc = np.random.rand(Ny)\n        SSadim = scale_SS(SS, insc, outsc, stsc, byref=False)\n        SSadim_sp = scale_SS(SSsp, insc, outsc, stsc, byref=False)\n        compare_ss(SSadim, SSadim_sp)\n\n        # scale (by reference)\n        SS.scale(insc, outsc, stsc)\n        SSsp.scale(insc, outsc, stsc)\n        compare_ss(SS, SSsp)\n\n    def test_addGain(self):\n\n        SS = self.SS\n        SSsp = self.SSsp\n        Nu, Nx, Ny = SS.inputs, SS.states, SS.outputs\n\n        # add gains\n        Kin = np.random.rand(Nu, 5)\n        Kout = np.random.rand(4, Ny)\n\n        gain_in = Gain(Kin)\n        gain_in.input_variables = LinearVector([InputVariable('input1', size=5, index=0)])\n        gain_in.output_variables = LinearVector([OutputVariable('output1', size=Nu, index=0)])\n\n        gain_out = Gain(Kout)\n        gain_out.input_variables = LinearVector.transform(self.SS.output_variables, InputVariable)\n        gain_out.output_variables = LinearVector([OutputVariable('final_output', size=gain_out.outputs, index=0)])\n\n        SS.addGain(gain_in, 'in')\n        SS.addGain(gain_out, 'out')\n        SSsp.addGain(gain_in, 'in')\n        SSsp.addGain(gain_out, 'out')\n        compare_ss(SS, SSsp)\n\n    def test_freqresp(self):\n        # freq response: try different scenario\n\n        SS = self.SS\n        SSsp = self.SSsp\n        Nu, Nx, Ny = SS.inputs, SS.states, SS.outputs\n\n        kv = np.linspace(0, 1, 8)\n        Y = SS.freqresp(kv)\n        Ysp = SSsp.freqresp(kv)\n        er = np.max(np.abs(Y - Ysp))\n        assert er < 1e-10, 'Test on freqresp failed'\n\n        SS.D = libsp.csc_matrix(SS.D)\n        Y1 = SS.freqresp(kv)\n        er = np.max(np.abs(Y - Y1))\n        assert er < 1e-10, 'Test on freqresp failed'\n\n    def test_couple(self):\n        dt = .2\n        Nx1, Nu1, Ny1 = 3, 4, 2\n        Nx2, Nu2, Ny2 = 4, 3, 2\n        K12 = np.random.rand(Nu1, Ny2)\n        K21 = np.random.rand(Nu2, Ny1)\n        SS1 = random_ss(Nx1, Nu1, Ny1, dt=.2)\n        SS2 = random_ss(Nx2, Nu2, Ny2, dt=.2)\n\n        SS1sp = StateSpace(libsp.csc_matrix(SS1.A),\n                           libsp.csc_matrix(SS1.B),\n                           libsp.csc_matrix(SS1.C),\n                           libsp.csc_matrix(SS1.D), dt=dt)\n        SS2sp = StateSpace(libsp.csc_matrix(SS2.A),\n                           libsp.csc_matrix(SS2.B),\n                           libsp.csc_matrix(SS2.C),\n                           libsp.csc_matrix(SS2.D), dt=dt)\n        K12sp = libsp.csc_matrix(K12)\n        K21sp = libsp.csc_matrix(K21)\n\n        # SCref=couple_full(SS1,SS2,K12,K21)\n        SC0 = couple(SS1, SS2, K12, K21)\n        # compare_ss(SCref,SC0)\n        for SSa in [SS1, SS1sp]:\n            for SSb in [SS2, SS2sp]:\n                for k12 in [K12, K12sp]:\n                    for k21 in [K21, K21sp]:\n                        SChere = couple(SSa, SSb, k12, k21)\n                        compare_ss(SC0, SChere)\n\n    def test_join(self):\n\n        Nx, Nu, Ny = 4, 3, 2\n        SS_list = [random_ss(Nx, Nu, Ny, dt=.2) for ii in range(3)]\n\n        wv = [.3, .5, .2]\n        SSjoin = join(SS_list, wv)\n\n        kv = np.array([0., 1., 3.])\n        Yjoin = SSjoin.freqresp(kv)\n\n        Yref = np.zeros_like(Yjoin)\n        for ii in range(3):\n            Yref += wv[ii] * SS_list[ii].freqresp(kv)\n\n        er = np.max(np.abs(Yjoin - Yref))\n        assert er < 1e-12, 'test_join error %.3e too large' % er\n\n    def test_disc2cont(self):\n        # not the best test given that eigenvalue comparison is not great with random systems. (error grows near\n        # nyquist frequency)\n\n        # this test is for execution purposes only.\n        sys = copy.deepcopy(self.SS)\n        self.SS.disc2cont()\n\n        ct_sys = disc2cont(sys)\n\n    def test_remove_inputs(self):\n        dt = 0.3\n        Ny, Nx, Nu = 4, 3, 10\n        A = np.random.rand(Nx, Nx)\n        B = np.random.rand(Nx, Nu)\n        C = np.random.rand(Ny, Nx)\n        D = np.random.rand(Ny, Nu)\n        self.SS = StateSpace(A, B, C, D, dt=dt)\n        self.SSsp = StateSpace(libsp.csc_matrix(A), libsp.csc_matrix(B), C, D, dt=dt)\n\n        self.SS.input_variables = LinearVector([InputVariable('input1', size=3, index=0),\n                                                InputVariable('input2', size=4, index=1),\n                                                InputVariable('input3', size=2, index=2),\n                                                InputVariable('input4', size=1, index=3)])\n        self.SSsp.input_variables = self.SS.input_variables.copy()\n\n        rows_loc = self.SS.input_variables.num_variables * [None]\n        for ith, variable in enumerate(self.SS.input_variables):\n            rows_loc[ith] = variable.rows_loc\n\n        self.SS.remove_inputs('input2', 'input4')\n\n        assert self.SS.B.shape == (Nx, self.SS.input_variables.size), 'B matrix not trimmed correctly'\n        assert self.SS.D.shape == (Ny, self.SS.input_variables.size), 'D matrix not trimmed correctly'\n\n        assert self.SS.input_variables[0].rows_loc == rows_loc[0], \\\n            'Rows of input 1 not retained correctly'\n        assert self.SS.input_variables[1].rows_loc == rows_loc[2], \\\n            'Rows of input 3 not retained correctly'\n\n        # sparse system\n        self.SSsp.remove_inputs('input2', 'input4')\n        assert self.SSsp.B.shape == (Nx, self.SSsp.input_variables.size), 'Bsp matrix not trimmed correctly'\n        assert self.SSsp.D.shape == (Ny, self.SSsp.input_variables.size), 'Dsp matrix not trimmed correctly'\n\n        assert self.SSsp.input_variables[0].rows_loc == rows_loc[0], \\\n            'Rows of input 1 not retained correctly in sparse system'\n        assert self.SSsp.input_variables[1].rows_loc == rows_loc[2], \\\n            'Rows of input 3 not retained correctly in sparse system'\n\n    def test_series(self):\n        \"\"\"\n        Test Series connection\n\n        input11 -- >>> SS2 ----> input1, input2 -----> self.SS ----> y\n        \"\"\"\n        Nx2, Nu2, Ny2 = 4, 3, self.SS.inputs\n        SS2 = random_ss(Nx2, Nu2, Ny2, dt=self.SS.dt)\n        SS2.input_variables = LinearVector([InputVariable('input11', size=3, index=0)])\n        SS2.state_variables = LinearVector([StateVariable('state11', size=4, index=0)])\n        SS2.output_variables = LinearVector([OutputVariable('input1', size=3, index=0),\n                                             OutputVariable('input2', size=2, index=1)])\n\n        SSnew = series(SS2, self.SS)\n        state_vars = LinearVector.merge(SS2.state_variables, self.SS.state_variables)\n\n        LinearVector.check_same_vectors(SSnew.state_variables, state_vars)\n\n        assert SSnew.outputs == self.SS.outputs, 'Number of outputs not the same as self.SS'\n        assert SSnew.inputs == SS2.inputs, 'Number of inputs not the same as SS2'\n\n\nclass TestStateSpaceManipulation(unittest.TestCase):\n\n    route_test_dir = os.path.abspath(os.path.dirname(os.path.realpath(__file__)))\n    files_created_by_test = []\n\n    def setUp(self):\n        Ny, Nx, Nu = 6, 3, 10\n        A = np.random.rand(Nx, Nx)\n        B = np.random.rand(Nx, Nu)\n        C = np.random.rand(Ny, Nx)\n        D = np.random.rand(Ny, Nu)\n        self.ss = StateSpace(A, B, C, D)\n        self.SSsp = StateSpace(libsp.csc_matrix(A), libsp.csc_matrix(B), C, D)\n\n        self.ss.input_variables = LinearVector([InputVariable('input1', size=3, index=0),\n                                                InputVariable('input2', size=4, index=1),\n                                                InputVariable('input3', size=2, index=2),\n                                                InputVariable('input4', size=1, index=3)])\n\n        self.ss.state_variables = LinearVector([StateVariable('state1', size=Nx, index=0)])\n        self.ss.output_variables = LinearVector([OutputVariable('output1', size=1, index=0),\n                                                 OutputVariable('output2', size=3, index=1),\n                                                 OutputVariable('output3', size=2, index=2)])\n\n    def test_remove_outputs(self):\n        self.ss.remove_outputs('output1')  # size 1\n        self.ss.remove_outputs('output2')  # size 3\n\n        assert self.ss.outputs == 2, 'Number of outputs not correct'\n\n    def test_retain_channels(self):\n        \"\"\"\n        Retain certain input and output channels only\n        \"\"\"\n        retain_input_channels = [0, 7]\n        self.ss.retain_inout_channels(retain_input_channels, where='in')\n\n        assert self.ss.inputs == len(retain_input_channels), 'Number of inputs not correct'\n        assert self.ss.input_variables[0].size == 1, 'input1 not correct size'\n        assert self.ss.input_variables[1].name == 'input3', 'input2 not properly removed'\n\n        retain_output_channels = [0, 5]\n        self.ss.retain_inout_channels(retain_output_channels, where='out')\n        assert self.ss.outputs == len(retain_output_channels), 'Number of outputs not correct'\n        assert self.ss.output_variables[0].size == 1, 'output1 not correct size'\n        assert self.ss.output_variables[1].name == 'output3', 'output2 not properly removed'\n        assert self.ss.output_variables[1].size == 1, 'output3 not properly trimmed'\n        assert self.ss.output_variables[1].index == 1, 'output3 not properly indexed'\n\n    def test_input_output(self):\n\n        h5_filename = self.route_test_dir + '/file_test_statespace_inout.h5'\n        self.files_created_by_test.append(h5_filename)\n\n        self.ss.save(h5_filename)\n\n        loaded_ss = StateSpace.load_from_h5(h5_filename)\n\n        LinearVector.check_same_vectors(self.ss.input_variables,\n                                        loaded_ss.input_variables)\n\n        LinearVector.check_same_vectors(self.ss.output_variables,\n                                        loaded_ss.output_variables)\n\n        LinearVector.check_same_vectors(self.ss.state_variables,\n                                        loaded_ss.state_variables)\n\n        np.testing.assert_array_almost_equal(self.ss.A, loaded_ss.A)\n        np.testing.assert_array_almost_equal(self.ss.B, loaded_ss.B)\n        np.testing.assert_array_almost_equal(self.ss.C, loaded_ss.C)\n        np.testing.assert_array_almost_equal(self.ss.D, loaded_ss.D)\n\n    @classmethod\n    def tearDownClass(cls):\n        for file in cls.files_created_by_test:\n            if os.path.exists(file):\n                os.remove(file)\n\n\nclass TestGains(unittest.TestCase):\n\n    route_test_dir = os.path.abspath(os.path.dirname(os.path.realpath(__file__)))\n    files_created_by_test = []\n\n    def test_dot(self):\n        \"\"\"\n        u ---> K1 ----> K2 ---->y\n        Returns:\n\n        \"\"\"\n        m1 = 4\n        p1 = 3\n        k1 = np.random.rand(p1, m1)\n        gain1 = Gain(k1,\n                     input_vars=LinearVector([InputVariable('input', size=m1, index=0)]),\n                     output_vars=LinearVector([OutputVariable('output1', size=p1, index=0)]))\n\n        m2 = p1\n        p2 = 5\n        k2 = np.random.rand(p2, m2)\n        gain2 = Gain(k2,\n                     input_vars=LinearVector([InputVariable('output1', size=m2, index=0)]),\n                     output_vars=LinearVector([OutputVariable('output', size=p2, index=0)]))\n\n        gain = gain2.dot(gain1)\n        np.testing.assert_array_almost_equal(gain.value, k2.dot(k1))\n\n    @unittest.expectedFailure\n    def test_fail_connection(self):\n        \"\"\"\n        This one should fail because of dimension mismatch\n\n        u ---> K1 ----> K2 ---->y\n\n        \"\"\"\n        m1 = 4\n        p1 = 3\n        k1 = np.random.rand(p1, m1)\n        gain1 = Gain(k1,\n                     input_vars=LinearVector([InputVariable('input', size=m1, index=0)]),\n                     output_vars=LinearVector([OutputVariable('output1', size=p1, index=0)]))\n\n        m2 = 2\n        p2 = 5\n        k2 = np.random.rand(p2, m2)\n        gain2 = Gain(k2,\n                     input_vars=LinearVector([InputVariable('output1', size=m2, index=0)]),\n                     output_vars=LinearVector([OutputVariable('output', size=p2, index=0)]))\n\n        # check the check fails :)\n        with self.subTest('ss_interface_check'):\n            LinearVector.check_connection(gain1.output_variables, gain2.input_variables)\n\n        with self.subTest('connection_check'):\n            gain = gain2.dot(gain1)\n            np.testing.assert_array_almost_equal(gain.value, k2.dot(k1))\n\n    def test_input_output_gains(self):\n        m1 = 4\n        p1 = 3\n        k1 = np.random.rand(p1, m1)\n        gain1 = Gain(k1,\n                     input_vars=LinearVector([InputVariable('input', size=m1, index=0)]),\n                     output_vars=LinearVector([OutputVariable('output1', size=p1, index=0)]))\n\n        m2 = 2\n        p2 = 5\n        k2 = np.random.rand(p2, m2)\n        gain2 = Gain(k2,\n                     input_vars=LinearVector([InputVariable('output1', size=m2, index=0)]),\n                     output_vars=LinearVector([OutputVariable('output', size=p2, index=0)]))\n\n        with self.subTest('Save to single h5 file'):\n            h5_file_name = self.route_test_dir + '/gain1.h5'\n            self.files_created_by_test.append(h5_file_name)\n            gain1.save(h5_file_name)\n\n        with self.subTest('Load from single h5 file'):\n            loaded_gain = Gain.load_from_h5(h5_file_name)\n            self.check_gains_equal(gain1, loaded_gain)\n\n        with self.subTest('Save both gains to single h5'):\n            h5_file_name = self.route_test_dir + '/multi_gain.h5'\n            self.files_created_by_test.append(h5_file_name)\n\n            Gain.save_multiple_gains(h5_file_name, ('gain1', gain1), ('gain2', gain2))\n\n        with self.subTest('Load multiple gains from a single h5'):\n            out_gains = Gain.load_multiple_gains(h5_file_name)\n            self.check_gains_equal(gain1, out_gains['gain1'])\n            self.check_gains_equal(gain2, out_gains['gain2'])\n\n    @staticmethod\n    def check_gains_equal(gain1, gain2):\n        np.testing.assert_array_almost_equal(gain1.value, gain2.value)\n        LinearVector.check_same_vectors(gain1.input_variables,\n                                        gain2.input_variables)\n        LinearVector.check_same_vectors(gain1.output_variables,\n                                        gain2.output_variables)\n\n    @classmethod\n    def tearDownClass(cls):\n        for file in cls.files_created_by_test:\n            if os.path.exists(file):\n                os.remove(file)\n\n\nif __name__ == '__main__':\n    unittest.main()\n"
  },
  {
    "path": "tests/linear/statespace/test_variable_tracker.py",
    "content": "import unittest\nimport os\nimport h5py\nimport sharpy.utils.h5utils as h5utils\n\nfrom sharpy.linear.utils.ss_interface import InputVariable, LinearVector, OutputVariable\n\n\nclass TestVariables(unittest.TestCase):\n\n    route_test_dir = os.path.abspath(os.path.dirname(os.path.realpath(__file__)))\n    files_created_by_test = []\n\n    def setUp(self):\n        # initialising with index out of order\n        Kzeta = 4\n        input_variables_list = [InputVariable('zeta', size=3 * Kzeta, index=0),\n                                InputVariable('zeta_dot', size=3 * Kzeta, index=1),  # this should be one\n                                InputVariable('u_gust', size=3 * Kzeta, index=2)]\n\n        self.input_variables = LinearVector(input_variables_list)\n\n    def test_initialisation(self):\n        Kzeta = 4\n        input_variables_list = [InputVariable('zeta', size=3 * Kzeta, index=0),\n                                InputVariable('u_gust', size=3 * Kzeta, index=2),\n                                InputVariable('zeta_dot', size=3 * Kzeta, index=1)]\n\n        input_variables = LinearVector(input_variables_list)\n\n        sorted_indices = [variable.index for variable in input_variables]\n        variable_names = [variable.name for variable in input_variables]\n        assert sorted_indices == [0, 1, 2], 'Error sorting indices in initialisation'\n        assert variable_names == ['zeta', 'zeta_dot', 'u_gust'], 'Error sorting indices in initialisation'\n\n    def test_remove(self):\n\n        self.input_variables.remove('zeta_dot')\n\n        sorted_indices = [variable.index for variable in self.input_variables]\n        assert sorted_indices == [0, 1], 'Error removing variable'\n\n    def test_modify(self):\n\n        new_values = {'name': 'new_u_gust',\n                      'size': 5,\n                      }\n\n        self.input_variables.modify('u_gust', **new_values)\n\n        assert self.input_variables.get_variable_from_name('new_u_gust').size == 5, 'Variable not modified correctly'\n\n    def test_add(self):\n\n        new_variable = InputVariable('control_surface', size=2, index=3)\n\n        self.input_variables.add(new_variable)\n        self.input_variables.update_locations()\n\n        # test it's properly included - it will raise an error internally if not\n        included_var = self.input_variables.get_variable_from_name('control_surface')\n\n        new_variable_repeated_index = InputVariable('control_surface_2', size=2, index=3)\n        try:\n            self.input_variables.add(new_variable_repeated_index)\n        except IndexError:\n            # correct behaviour\n            pass\n        else:\n            raise IndexError('Variable was added when it should have been rejected because of repeated index')\n\n        new_variable_inbetween = InputVariable('first_variable', size=2, index=-1)\n        self.input_variables.add(new_variable_inbetween)\n        self.input_variables.update_locations()\n\n        assert self.input_variables[0].name == new_variable_inbetween.name, 'New variable not added at the start of' \\\n                                                                            ' the list'\n\n        self.input_variables.add('var_from_string', size=3, index=10)\n        assert self.input_variables[-1].name == 'var_from_string', 'Variable from string not added correctly'\n\n        self.input_variables.update_indices()\n\n    def test_append(self):\n        self.input_variables.append('last_var', size=3)\n        self.input_variables.update_indices()\n\n        assert self.input_variables[-1].name == 'last_var', 'Variable not properly appended'\n\n        # test adding an incorrect input\n        out_var = OutputVariable('out_var', size=1, index=4)\n\n        try:\n            self.input_variables.append(out_var)\n        except TypeError:\n            pass  # this is what should happen\n        else:\n            raise TypeError('Error. Able to append an output variable to an input variable')\n\n        self.input_variables.append(InputVariable(name='last_last_var', size=2, index=0))\n\n        assert self.input_variables[-1].name == 'last_last_var', 'Variable not properly appended'\n\n    def test_merge(self):\n        second_variables_list = [InputVariable('eta', size=3, index=0),\n                                 InputVariable('eta_dot', size=3, index=1)]\n\n        second_vector = LinearVector(second_variables_list)\n\n        merged_vector = LinearVector.merge(self.input_variables, second_vector)\n\n        assert merged_vector[-1].name == 'eta_dot', 'Vectors not coupled properly'\n        assert merged_vector[2].name == 'u_gust', 'Vectors not coupled properly'\n\n    def test_copy(self):\n        vec1 = self.input_variables\n        vec2 = vec1.copy()\n\n        assert vec1 is not vec2, 'Object not deep copied'\n\n    def test_transform(self):\n\n        new_vector = LinearVector.transform(self.input_variables, to_type=OutputVariable)\n\n        LinearVector.check_same_vectors(new_vector, self.input_variables)\n        assert new_vector.num_variables == self.input_variables.num_variables, 'Number of variables not equal'\n        assert new_vector.size == self.input_variables.size, 'Size not equal'\n\n        for i_var in range(new_vector.num_variables):\n            assert new_vector[i_var].name == self.input_variables[i_var].name, 'Name does not match'\n            assert new_vector[i_var].index == self.input_variables[i_var].index, 'Index does not match'\n            assert new_vector[i_var].size == self.input_variables[i_var].size, 'Size does not match'\n\n        new_vector.append(OutputVariable('last_var', size=2, index=0))\n\n        assert new_vector.num_variables == self.input_variables.num_variables + 1, 'Number of variables got ' \\\n                                                                                   'updated in the original object'\n        assert new_vector[-1].name == 'last_var', 'Variable not correctly appended'\n        assert new_vector[-1].index == new_vector.num_variables - 1, 'Variable not correctly appended'\n\n    def test_save_to_h5(self):\n        Kzeta = 4\n        input_variables_list = [InputVariable('zeta', size=3 * Kzeta, index=0),\n                                InputVariable('zeta_dot', size=3 * Kzeta, index=1),  # this should be one\n                                InputVariable('u_gust', size=3 * Kzeta, index=2)]\n\n        input_variables = LinearVector(input_variables_list)\n\n        h5_file_name = self.route_test_dir + '/test_save_variables.h5'\n        self.files_created_by_test.append(h5_file_name)\n        with h5py.File(h5_file_name, 'w') as fid:\n            input_variables.add_to_h5_file(fid)\n\n        with h5py.File(h5_file_name, 'r') as fid:\n            data_dict = h5utils.load_h5_in_dict(fid)\n\n        loaded_variable = LinearVector.load_from_h5_file('InputVariable', data_dict['InputVariable'])\n\n        LinearVector.check_same_vectors(input_variables, loaded_variable)\n\n    def tearDown(self):\n        for file in self.files_created_by_test:\n            if os.path.exists(file):\n                os.remove(file)\n\n\nif __name__ == '__main__':\n    unittest.main()\n"
  },
  {
    "path": "tests/linear/uvlm/__init__.py",
    "content": ""
  },
  {
    "path": "tests/linear/uvlm/test_infinite_span.py",
    "content": "\"\"\"Linearised UVLM 2D tests\n\n\nTest linear UVLM solver against analytical results for 2D wing\n\nAuthor: S. Maraniello, Dec 2018\nModified: N. Goizueta, Sep 2019\n\"\"\"\n\nimport unittest\nimport os\n# import matplotlib.pyplot as plt\nimport numpy as np\nimport shutil\nimport sharpy.sharpy_main\nimport sharpy.utils.algebra as algebra\nimport sharpy.utils.analytical as an\nimport sharpy.linear.src.linuvlm as linuvlm\nimport sharpy.cases.templates.flying_wings as flying_wings\nimport sharpy.utils.sharpydir as sharpydir\nimport sharpy.utils.cout_utils as cout\n\n\nclass Test_infinite_span(unittest.TestCase):\n    \"\"\"\n    Test infinite-span flat wing at zero incidence against analytical solutions\n    \"\"\"\n\n    test_dir = sharpydir.SharpyDir + '/tests/linear/uvlm/'\n\n    def setUp_from_params(self, Nsurf, integr_ord, RemovePred, UseSparse, RollNodes):\n        \"\"\"\n        Builds SHARPy solution for a rolled infinite span flat wing at zero\n        incidence. Rolling can be obtained both by rotating the FoR A or\n        modifying the nodes of the wing.\n        \"\"\"\n\n        # Flags\n        self.ProducePlots = True\n\n        # Define Parametrisation\n        M, N, Mstar_fact = 8, 8, 50\n\n        # Flying properties\n        if RollNodes:\n            self.Roll0Deg = 0.\n        else:\n            self.Roll0Deg = 0.\n        self.Alpha0Deg = 0.0\n        Uinf0 = 50.\n\n        ### ----- build directories\n        self.case_code = 'wagner'\n        self.case_main = self.case_code + \\\n                         '_r%.4daeff%.2d_rnodes%s_Nsurf%.2dM%.2dN%.2dwk%.2d' \\\n                         % (int(np.round(100 * self.Roll0Deg)),\n                            int(np.round(100 * self.Alpha0Deg)),\n                            RollNodes, Nsurf, M, N, Mstar_fact)\n        self.case_main += 'ord%.1d_rp%s_sp%s' % (integr_ord, RemovePred, UseSparse)\n        self.route_test_dir = os.path.abspath(os.path.dirname(os.path.realpath(__file__)))\n        route_main = self.route_test_dir + '/res/'\n        self.figfold = self.route_test_dir + '/figs/'\n\n        if os.path.exists(route_main):\n            shutil.rmtree(route_main)\n        if os.path.exists(self.figfold):\n            shutil.rmtree(self.figfold)\n\n        os.makedirs(route_main)\n        os.makedirs(self.figfold)\n\n        ### ----- sharpy reference solution\n        # Build wing model\n        ws = flying_wings.QuasiInfinite(\n            M=M, N=N, Mstar_fact=Mstar_fact, n_surfaces=Nsurf,\n            u_inf=Uinf0, alpha=self.Alpha0Deg, roll=self.Roll0Deg,\n            aspect_ratio=1e5, RollNodes=RollNodes,\n            route=route_main, case_name=self.case_main)\n\n        ws.main_ea = .4\n        ws.clean_test_files()\n        ws.update_derived_params()\n        ws.generate_fem_file()\n        ws.generate_aero_file()\n\n        # solution flow\n        ws.set_default_config_dict()\n        ws.config['SHARPy']['flow'] = ['BeamLoader', 'AerogridLoader', 'StaticUvlm', 'BeamPlot', 'AerogridPlot']\n        ws.config['SHARPy']['log_folder'] = self.route_test_dir + '/output/' + self.case_code + '/'\n        ws.config['SHARPy']['write_screen'] = 'off'\n        ws.config['SHARPy']['write_log'] = 'off'\n        ws.config['LinearUvlm'] = {'dt': ws.dt,\n                                   'integr_order': integr_ord,\n                                   'density': ws.rho,\n                                   'remove_predictor': RemovePred,\n                                   'use_sparse': UseSparse,\n                                   'ScalingDict': {'length': 1.,\n                                                   'speed': 1.,\n                                                   'density': 1.},\n                                    'vortex_radius': 1e-6}\n        ws.config.write()\n\n        # solve at linearistion point\n        data0 = sharpy.sharpy_main.main(['...', route_main + self.case_main + '.sharpy'])\n        tsaero0 = data0.aero.timestep_info[0]\n        tsaero0.rho = ws.config['LinearUvlm']['density']\n\n        ### ---- normalisation parameters\n        self.start_writer()\n        # verify chord\n        c_ext = np.linalg.norm(tsaero0.zeta[0][:, 0, 0] - tsaero0.zeta[0][:, -1, 0])\n        assert np.abs(ws.c_ref - c_ext) < 1e-8, 'Wrong reference chord'\n\n        # reference force - total\n        qinf = 0.5 * ws.rho * Uinf0 ** 2\n        span = Nsurf * np.linalg.norm(tsaero0.zeta[0][:, 0, 0] - tsaero0.zeta[0][:, 0, -1])\n        Stot = ws.c_ref * span\n        Fref_tot = qinf * Stot\n\n        # reference force - section\n        sec_span = np.linalg.norm(tsaero0.zeta[0][:, 0, 0] - tsaero0.zeta[0][:, 0, 1])\n        S = ws.c_ref * sec_span\n        Fref_span = qinf * S\n\n        # save\n        self.route_main = route_main\n        self.tsaero0 = tsaero0\n        self.ws = ws\n        self.Fref_tot = Fref_tot\n        self.Fref_span = Fref_span\n        self.M = M\n        self.N = N\n        self.Mstar_fact = Mstar_fact\n        self.Uinf0 = Uinf0\n\n    def test_wagner(self):\n        \"\"\"\n        Step response (Wagner):\n            - set linearisation point at 0 effective incidence but non-zero roll\n                  attitude. This can be obtained either by rotating the FoR A or\n                  by explicitely modifying the position of the wing nodes.\n            - perturb. state so as to produce a small effective angle of attack.\n                This is achieved combining changes of:\n                        - wing lattice orientation\n                        - wing lattice speed\n                        - incoming flow orientation\n            - compare aerodynamic force time history to Wagner's analytical solution\n            - compare steady state to analytical solution and ``StaticUvlm`` solver\n\n        Notes:\n            The function uses ``subTests`` to call ``run_wagner``.\n        \"\"\"\n\n        for Nsurf in [1, 2]:\n            for integr_ord in [1, 2]:\n                for RemovePred in [False, True]:\n                    for UseSparse in [True]:\n                        for RollNodes in [True, False]:\n                            with self.subTest(\n                                    Nsurf=Nsurf, integr_ord=integr_ord,\n                                    RemovePred=RemovePred, UseSparse=UseSparse,\n                                    RollNodes=RollNodes):\n                                self.run_wagner(\n                                    Nsurf, integr_ord, RemovePred, UseSparse, RollNodes)\n\n    def run_wagner(self, Nsurf, integr_ord, RemovePred, UseSparse, RollNodes):\n        \"\"\"\n        see test_wagner\n        \"\"\"\n\n        ### ----- set reference solution\n        self.setUp_from_params(Nsurf, integr_ord, RemovePred, UseSparse, RollNodes)\n        tsaero0 = self.tsaero0\n        ws = self.ws\n        M = self.M\n        N = self.N\n        Mstar_fact = self.Mstar_fact\n        Uinf0 = self.Uinf0\n\n        ### ----- linearisation\n        uvlm = linuvlm.Dynamic(tsaero0,\n                               dynamic_settings=ws.config['LinearUvlm'])\n        uvlm.assemble_ss()\n        zeta_pole = np.array([0., 0., 0.])\n        uvlm.get_total_forces_gain(zeta_pole=zeta_pole)\n        uvlm.get_rigid_motion_gains(zeta_rotation=zeta_pole)\n        uvlm.get_sect_forces_gain()\n\n        ### ----- Scale gains\n        Fref_tot = self.Fref_tot\n        Fref_span = self.Fref_span\n        uvlm.Kftot = uvlm.Kftot / Fref_tot\n        uvlm.Kmtot = uvlm.Kmtot / Fref_tot / ws.c_ref\n        uvlm.Kfsec /= Fref_span\n        uvlm.Kmsec /= (Fref_span * ws.c_ref)\n\n        ### ----- step input\n        # rotate incoming flow, wing lattice and wing lattice speed about\n        # the (rolled) wing elastic axis to create an effective angle of attack.\n        # Rotation is expressed through a CRV.\n        delta_AlphaEffDeg = 1e-2\n        delta_AlphaEffRad = 1e-2 * np.pi / 180.\n\n        Roll0Rad = self.Roll0Deg / 180. * np.pi\n        dcrv = -delta_AlphaEffRad * np.array([0., np.cos(Roll0Rad), np.sin(Roll0Rad)])\n        uvec0 = np.array([Uinf0, 0, 0])\n        uvec = np.dot(algebra.crv2rotation(dcrv), uvec0)\n        duvec = uvec - uvec0\n        dzeta = np.zeros((Nsurf, 3, M + 1, N // Nsurf + 1))\n        dzeta_dot = np.zeros((Nsurf, 3, M + 1, N // Nsurf + 1))\n        du_ext = np.zeros((Nsurf, 3, M + 1, N // Nsurf + 1))\n\n        for ss in range(Nsurf):\n            for mm in range(M + 1):\n                for nn in range(N // Nsurf + 1):\n                    dzeta_dot[ss, :, mm, nn] = -1. / 3 * duvec\n                    du_ext[ss, :, mm, nn] = +1. / 3 * duvec\n                    dzeta = 1. / 3 * np.dot(uvlm.Krot, dcrv)\n        Uaero = np.concatenate((dzeta.reshape(-1),\n                                dzeta_dot.reshape(-1),\n                                du_ext.reshape(-1)))\n\n        ### ----- Steady state solution\n        xste, yste = uvlm.solve_steady(Uaero)\n        Ftot_ste = np.dot(uvlm.Kftot, yste)\n        Mtot_ste = np.dot(uvlm.Kmtot, yste)\n        # first check of gain matrices...\n        Ftot_ste_ref = np.zeros((3,))\n        Mtot_ste_ref = np.zeros((3,))\n        fnodes = yste.reshape((Nsurf, 3, M + 1, N // Nsurf + 1))\n        for ss in range(Nsurf):\n            for nn in range(N // Nsurf + 1):\n                for mm in range(M + 1):\n                    Ftot_ste_ref += fnodes[ss, :, mm, nn]\n                    Mtot_ste_ref += np.cross(\n                        uvlm.MS.Surfs[ss].zeta[:, mm, nn], fnodes[ss, :, mm, nn])\n        Ftot_ste_ref /= Fref_tot\n        Mtot_ste_ref /= (Fref_tot * ws.c_ref)\n        Fmag = np.linalg.norm(Ftot_ste_ref)\n        er_f = np.max(np.abs(Ftot_ste - Ftot_ste_ref)) / Fmag\n        er_m = np.max(np.abs(Mtot_ste - Mtot_ste_ref)) / Fmag / ws.c_ref\n        assert (er_f < 1e-8 and er_m < 1e-8), \\\n            'Error of total forces (%.2e) and moment (%.2e) too large!' % (er_f, er_m) + \\\n            'Verify gains produced by linuvlm.Dynamic.get_total_forces_gain.'\n\n        # then compare against analytical ...\n        Cl_inf = delta_AlphaEffRad * np.pi * 2.\n        Cfvec_inf = Cl_inf * np.array([0., -np.sin(Roll0Rad), np.cos(Roll0Rad)])\n        er_f = np.abs(np.linalg.norm(Ftot_ste) / Cl_inf - 1.)\n        assert (er_f < 1e-2), \\\n            'Error of total lift coefficient (%.2e) too large!' % (er_f,) + \\\n            'Verify linuvlm.Dynamic.'\n        er_f = np.abs(np.linalg.norm(Ftot_ste - Cfvec_inf) / Cl_inf)\n        assert (er_f < 1e-2), \\\n            'Error of total aero force (%.2e) too large!' % (er_f,) + \\\n            'Verify linuvlm.Dynamic.'\n\n        # ... and finally compare against non-linear UVLM\n        # ps: here we roll the wing and rotate the incoming flow to generate an effective\n        # angle of attack\n        case_pert = 'wagner_r%.4daeff%.2d_rnodes%s_Nsurf%.2dM%.2dN%.2dwk%.2d' \\\n                    % (int(np.round(100 * self.Roll0Deg)),\n                       int(np.round(100 * delta_AlphaEffDeg)),\n                       RollNodes,\n                       Nsurf, M, N, Mstar_fact)\n        ws_pert = flying_wings.QuasiInfinite(\n            M=M, N=N, Mstar_fact=Mstar_fact, n_surfaces=Nsurf,\n            u_inf=Uinf0,\n            alpha=self.Alpha0Deg,\n            roll=self.Roll0Deg,\n            aspect_ratio=1e5,\n            route=self.route_main,\n            case_name=case_pert,\n            RollNodes=RollNodes)\n        ws_pert.u_inf_direction = uvec / Uinf0\n        ws_pert.main_ea = ws.main_ea\n        ws_pert.clean_test_files()\n        ws_pert.update_derived_params()\n        ws_pert.generate_fem_file()\n        ws_pert.generate_aero_file()\n\n        # solution flow\n        ws_pert.set_default_config_dict()\n        ws_pert.config['SHARPy']['flow'] = ws.config['SHARPy']['flow']\n        ws_pert.config['SHARPy']['write_screen'] = 'off'\n        ws_pert.config['SHARPy']['write_log'] = 'off'\n        ws_pert.config['SHARPy']['log_folder'] = self.route_test_dir + '/output/' + self.case_code + '/'\n        ws_pert.config.write()\n\n        # solve at perturbed point\n        data_pert = sharpy.sharpy_main.main(['...', self.route_main + case_pert + '.sharpy'])\n        tsaero = data_pert.aero.timestep_info[0]\n\n        self.start_writer()\n\n        # get total forces\n        Ftot_ste_pert = np.zeros((3,))\n        Mtot_ste_pert = np.zeros((3,))\n        for ss in range(Nsurf):\n            for nn in range(N // Nsurf + 1):\n                for mm in range(M + 1):\n                    Ftot_ste_pert += tsaero.forces[ss][:3, mm, nn]\n                    Mtot_ste_pert += np.cross(\n                        uvlm.MS.Surfs[ss].zeta[:, mm, nn], tsaero.forces[ss][:3, mm, nn])\n        Ftot_ste_pert /= Fref_tot\n        Mtot_ste_pert /= (Fref_tot * ws.c_ref)\n        Fmag = np.linalg.norm(Ftot_ste_pert)\n        er_f = np.max(np.abs(Ftot_ste - Ftot_ste_pert)) / Fmag\n        er_m = np.max(np.abs(Mtot_ste - Mtot_ste_pert)) / Fmag / ws.c_ref\n        assert (er_f < 2e-4 and er_m < 2e-4), \\\n            'Error of total forces (%.2e) and moment (%.2e) ' % (er_f, er_m) + \\\n            'with respect to geometrically-exact UVLM too large!'\n\n        # and check non-linear uvlm against analytical solution\n        er_f = np.abs(np.linalg.norm(Ftot_ste_pert - Cfvec_inf) / Cl_inf)\n        assert (er_f <= 1.5e-2), \\\n            'Error of total aero force components (%.2e) too large!' % (er_f,) + \\\n            'Verify StaticUvlm'\n\n        ### ----- Analytical step response (Wagner solution)\n\n        NT = 251\n        tv = np.linspace(0., uvlm.dt * (NT - 1), NT)\n        Clv_an = an.wagner_imp_start(delta_AlphaEffRad, Uinf0, ws.c_ref, tv)\n        assert np.abs(Clv_an[-1] / Cl_inf - 1.) < 1e-2, \\\n            'Did someone modify this test case?! The time should be enough to reach ' \\\n            'the steady-state CL with a 1 perc. tolerance...'\n\n        Cfvec_an = np.zeros((NT, 3))\n        Cfvec_an[:, 1] = -np.sin(Roll0Rad) * Clv_an\n        Cfvec_an[:, 2] = np.cos(Roll0Rad) * Clv_an\n\n        ### ----- Dynamic step response\n\n        Fsect = np.zeros((NT, Nsurf, 3, N // Nsurf + 1))\n        # Fbeam=np.zeros((NT,6,N//Nsurf+1))\n        Ftot = np.zeros((NT, 3))\n        Er_f_tot = np.zeros((NT,))\n\n        # Ybeam=[]\n        gamma = np.zeros((NT, Nsurf, M, N // Nsurf))\n        gamma_dot = np.zeros((NT, Nsurf, M, N // Nsurf))\n        gamma_star = np.zeros((NT, Nsurf, int(M * Mstar_fact), N // Nsurf))\n        xold = np.zeros((uvlm.SS.A.shape[0],))\n        for tt in range(1, NT):\n            xnew, ynew = uvlm.solve_step(xold, Uaero)\n            change = np.linalg.norm(xnew - xold)\n            xold = xnew\n\n            # record state ?\n            if uvlm.remove_predictor is False:\n                gv, gvstar, gvdot = uvlm.unpack_state(xnew)\n                gamma[tt, :, :, :] = gv.reshape((Nsurf, M, N // Nsurf))\n                gamma_dot[tt, :, :, :] = gvdot.reshape((Nsurf, M, N // Nsurf))\n                gamma_star[tt, :, :, :] = gvstar.reshape((Nsurf, int(M * Mstar_fact), N // Nsurf))\n\n            # calculate forces (and error)\n            Ftot[tt, :3] = np.dot(uvlm.Kftot, ynew)\n            Er_f_tot[tt] = np.linalg.norm(Ftot[tt, :] - Cfvec_an[tt, :]) / Clv_an[tt]\n            Fsect[tt, :, :, :] = np.dot(uvlm.Kfsec, ynew).reshape((Nsurf, 3, N // Nsurf + 1))\n\n            # ### beam forces\n            # Ybeam.append(np.dot(Sol.Kforces[:-10,:],ynew))\n            # Fdummy=Ybeam[-1].reshape((N//Nsurf,6)).T\n            # Fbeam[tt,:,:N//Nsurf]=Fdummy[:,:N//Nsurf]\n            # Fbeam[tt,:,N//Nsurf+1:]=Fdummy[:,N//Nsurf:]\n\n        if RemovePred:\n            ts2perc, ts1perc = 6, 6\n        else:\n            ts2perc, ts1perc = 16, 36\n        er_th_2perc = np.max(Er_f_tot[ts2perc:])\n        er_th_1perc = np.max(Er_f_tot[ts1perc:])\n\n        ### ----- generate plot\n        if self.ProducePlots:\n\n            # sections to plot\n            if Nsurf == 1:\n                Nplot = [0, N // 2, N]\n                labs = [r'tip', r'root', r'tip']\n            elif Nsurf == 2:\n                Nplot = [0, N // 2 - 1]\n                labs = [r'tip', r'near root', r'tip', r'near root']\n            axtitle = [r'$C_{F_y}$', r'$C_{F_z}$']\n\n            # non-dimensional time\n            sv = 2.0 * Uinf0 * tv / ws.c_ref\n\n            # generate figure\n            clist = ['#003366', '#CC3333', '#336633', '#FF6600'] * 4\n            fontlabel = 12\n            std_params = {'legend.fontsize': 10,\n                          'font.size': fontlabel,\n                          'xtick.labelsize': fontlabel - 2,\n                          'ytick.labelsize': fontlabel - 2,\n                          'figure.autolayout': True,\n                          'legend.numpoints': 1}\n            # plt.rcParams.update(std_params)\n\n            # fig = plt.figure('Lift time-history', (12, 6))\n            # axvec = fig.subplots(1, 2)\n            # for aa in [0, 1]:\n                # comp = aa + 1\n                # axvec[aa].set_title(axtitle[aa])\n                # axvec[aa].plot(sv, Cfvec_an[:, comp] / Cl_inf, lw=4, ls='-',\n                               # alpha=0.5, color='r', label=r'Wagner')\n                # axvec[aa].plot(sv, Ftot[:, comp] / Cl_inf, lw=5, ls=':',\n                               # alpha=0.7, color='k', label=r'Total')\n                # cc = 0\n                # for ss in range(Nsurf):\n                    # for nn in Nplot:\n                        # axvec[aa].plot(sv, Fsect[:, ss, comp, nn] / Cl_inf,\n                                       # lw=4 - cc, ls='--', alpha=0.7, color=clist[cc],\n                                       # label=r'Surf. %.1d, n=%.2d (%s)' % (ss, nn, labs[cc]))\n                        # cc += 1\n                # axvec[aa].grid(color='0.8', ls='-')\n                # axvec[aa].grid(color='0.85', ls='-', which='minor')\n                # axvec[aa].set_xlabel(r'normalised time $t=2 U_\\infty \\tilde{t}/c$')\n                # axvec[aa].set_ylabel(axtitle[aa] + r'$/C_{l_\\infty}$')\n                # axvec[aa].set_xlim(0, sv[-1])\n                # if Cfvec_inf[comp] > 0.:\n                    # axvec[aa].set_ylim(0, 1.1)\n                # else:\n                    # axvec[aa].set_ylim(-1.1, 0)\n            # plt.legend(ncol=1)\n            # # plt.show()\n            # fig.savefig(self.figfold + self.case_main + '.png')\n            # fig.savefig(self.figfold + self.case_main + '.pdf')\n            # plt.close()\n\n        assert er_th_2perc < 2e-2 and er_th_1perc < 1e-2, \\\n            'Error of dynamic step response at time-steps 16 and 36 ' + \\\n            '(%.2e and %.2e) too large. Verify Linear UVLM.' % (er_th_2perc, er_th_1perc)\n\n    def start_writer(self):\n        # Over write writer with print_file False to avoid I/O errors\n        global cout_wrap\n        cout_wrap = cout.Writer()\n        # cout_wrap.initialise(print_screen=False, print_file=False)\n        cout_wrap.cout_quiet()\n        sharpy.utils.cout_utils.cout_wrap = cout_wrap\n\n    def tearDown(self):\n        cout.finish_writer()\n        try:\n            shutil.rmtree(self.route_test_dir + '/res/')\n            shutil.rmtree(self.route_test_dir + '/figs/')\n            shutil.rmtree(self.route_test_dir + '/output/')\n        except FileNotFoundError:\n            pass\n\n\nif __name__ == '__main__':\n    if os.path.exists('./figs/infinite_span'):\n        shutil.rmtree('./figs/infinite_span')\n    unittest.main()\n"
  },
  {
    "path": "tests/sourcepanelmethod/__init__.py",
    "content": ""
  },
  {
    "path": "tests/sourcepanelmethod/geometry_parameter_models.json",
    "content": "{\"phantom_wing\": {\"length_radius_ratio\": 50.0, \"radius_chord_ratio\": 0.2, \"vertical_wing_position\": 0.0, \"radius_half_wingspan_ratio\": 0.02, \"length_offset_nose_to_wing_ratio\": 0.5, \"fuselage_shape\": \"cylindrical\"}, \"low_wing\": {\"length_radius_ratio\": 16.0, \"radius_chord_ratio\": 0.5, \"vertical_wing_position\": -0.5, \"radius_half_wingspan_ratio\": 0.222, \"fuselage_shape\": \"cylindrical\", \"length_offset_nose_to_wing_ratio\": 0.5}}"
  },
  {
    "path": "tests/sourcepanelmethod/test_data/results_low_wing_coupled_0.csv",
    "content": "0.000000000000000000e+00 0.000000000000000000e+00\n0.000000000000000000e+00 0.000000000000000000e+00\n0.000000000000000000e+00 0.000000000000000000e+00\n0.000000000000000000e+00 0.000000000000000000e+00\n5.630631000000000386e-01 2.637046000000000112e-01\n7.038288000000000322e-01 2.587818000000000063e-01\n8.445945999999999732e-01 2.560145999999999811e-01\n9.853604000000000251e-01 2.521720000000000073e-01\n1.126125999999999960e+00 2.474606000000000028e-01\n1.266891999999999907e+00 2.419823000000000113e-01\n1.407658000000000076e+00 2.357548999999999895e-01\n1.548423000000000105e+00 2.287254999999999983e-01\n1.689189000000000052e+00 2.207763000000000086e-01\n1.829954999999999998e+00 2.117207000000000117e-01\n1.970720999999999945e+00 2.012865000000000071e-01\n2.111486000000000196e+00 1.890803000000000067e-01\n2.252251999999999921e+00 1.745153000000000121e-01\n2.393018000000000089e+00 1.566525000000000001e-01\n2.533783999999999814e+00 1.337860999999999911e-01\n2.674549999999999983e+00 1.019361000000000017e-01\n2.815315000000000012e+00 8.357517000000000418e-02\n"
  },
  {
    "path": "tests/sourcepanelmethod/test_data/results_low_wing_coupled_1.csv",
    "content": "0.000000000000000000e+00 0.000000000000000000e+00\n0.000000000000000000e+00 0.000000000000000000e+00\n0.000000000000000000e+00 0.000000000000000000e+00\n0.000000000000000000e+00 0.000000000000000000e+00\n5.630631000000000386e-01 2.636864999999999903e-01\n7.038288000000000322e-01 2.592814999999999981e-01\n8.445945999999999732e-01 2.565006000000000230e-01\n9.853604000000000251e-01 2.526663000000000103e-01\n1.126125999999999960e+00 2.479610999999999899e-01\n1.266891999999999907e+00 2.424882999999999900e-01\n1.407658000000000076e+00 2.362653000000000114e-01\n1.548423000000000105e+00 2.292386999999999897e-01\n1.689189000000000052e+00 2.212899000000000116e-01\n1.829954999999999998e+00 2.122312000000000087e-01\n1.970720999999999945e+00 2.017887999999999904e-01\n2.111486000000000196e+00 1.895677000000000056e-01\n2.252251999999999921e+00 1.749785000000000090e-01\n2.393018000000000089e+00 1.570786999999999878e-01\n2.533783999999999814e+00 1.341562000000000032e-01\n2.674549999999999983e+00 1.022175000000000028e-01\n2.815315000000000012e+00 8.376727999999999952e-02\n"
  },
  {
    "path": "tests/sourcepanelmethod/test_source_panel_method.py",
    "content": "import unittest\nimport os\nimport numpy as np\nfrom sharpy.cases.templates.fuselage_wing_configuration.fuselage_wing_configuration import Fuselage_Wing_Configuration\nfrom sharpy.cases.templates.fuselage_wing_configuration.fwc_get_settings import define_simulation_settings\n\n\n\nclass TestSourcePanelMethod(unittest.TestCase):\n\n    route_test_dir = os.path.abspath(os.path.dirname(os.path.realpath(__file__)))\n\n    def test_ellipsoid(self):\n        \"\"\"\n        Computes the pressure distribution over an ellipsoid. The results should\n        match the analyitcal solution according to potential flow theory (see Chapter 5\n        Katz, J., and Plotkin, A., Low-speed aerodynamics, Vol. 13, Cambridge University \n        Press, 2001).\n        \"\"\"\n\n        # define model variables\n        radius_ellipsoid = 0.2\n        length_ellipsoid = 2.\n        u_inf = 10 \n        alpha_deg = 0\n        n_elem = 30\n        num_radial_panels  = 24\n        lifting_only= False\n        fuselage_shape = 'ellipsoid'\n        fuselage_discretisation = 'uniform'\n        # define case name and folders\n        case_route = self.route_test_dir + '/cases/'\n        output_route = self.route_test_dir + '/output/'\n        case_name = 'ellipsoid'\n        enforce_uniform_fuselage_discretisation = True\n\n        # generate ellipsoid model\n        ellipsoidal_body = Fuselage_Wing_Configuration(case_name, case_route, output_route) \n        ellipsoidal_body.init_aeroelastic(lifting_only=lifting_only,\n                                          max_radius=radius_ellipsoid,\n                                      fuselage_length=length_ellipsoid,\n                                      offset_nose_wing=length_ellipsoid/2,\n                                      n_elem_fuselage=n_elem,\n                                      num_radial_panels=num_radial_panels,\n                                      fuselage_shape=fuselage_shape,\n                                      enforce_uniform_fuselage_discretisation=enforce_uniform_fuselage_discretisation,\n                                      fuselage_discretisation=fuselage_discretisation)\n        ellipsoidal_body.generate()\n        \n        # define settings\n        flow = ['BeamLoader',\n                'NonliftingbodygridLoader',\n                'StaticUvlm',\n                'WriteVariablesTime'\n                ]\n        settings = define_simulation_settings(flow, \n                                              ellipsoidal_body, \n                                              alpha_deg, \n                                              u_inf, \n                                              lifting_only=False, \n                                              nonlifting_only=True, \n                                              horseshoe=True,\n                                              writeCpVariables=True)\n        ellipsoidal_body.create_settings(settings)\n\n        # run simulation\n        ellipsoidal_body.run()\n\n        # postprocess\n        cp_distribution_SHARPy = self.load_pressure_distribution(output_route + '/' + case_name + '/WriteVariablesTime/', \n                                                                 ellipsoidal_body.structure.n_node_fuselage)\n        dx = length_ellipsoid/(ellipsoidal_body.structure.n_node_fuselage-1)\n        x_collocation_points = np.linspace(-length_ellipsoid/2+dx/2, length_ellipsoid/2-dx/2, ellipsoidal_body.structure.n_node_fuselage)\n        cp_distribution_analytcal = self.get_analytical_pressure_distribution(radius_ellipsoid, x_collocation_points)\n\n        # check results\n        with self.subTest('pressure_coefficient'):\n            # Higher deviations near the nose and tail due to local coarser discretisation. Check only mid-body values!\n            np.testing.assert_array_almost_equal(cp_distribution_SHARPy[4:-4], cp_distribution_analytcal[4:-4], decimal=3)\n\n    def load_pressure_distribution(self, output_folder, n_collocation_points):\n        \"\"\"\n            Loads the resulting pressure coefficients saved in txt-files.\n        \"\"\"\n        cp_distribution = np.zeros((n_collocation_points,))\n        for i_collocation_point in range(n_collocation_points):\n            cp_distribution[i_collocation_point] = np.loadtxt(output_folder + 'nonlifting_pressure_coefficients_panel_isurf0_im0_in{}.dat'.format(i_collocation_point))[1]\n        return cp_distribution\n\n    def get_analytical_pressure_distribution(self, radius, x_coordinates):\n        \"\"\"\n            Computes the analytical solution of the pressure distribution over\n            an ellipsoid in potential flow for the previous specified ellipsoid\n            model. Equations used are taken from\n                https://www.symscape.com/examples/panel/potential_flow_ellipsoid\n        \"\"\"\n        a = np.sqrt(1 - radius**2)\n        b = 2 * ((1-a**2)/a**3) * (np.arctanh(a)-a)\n        u = 2./(2.-b) * np.sqrt((1-x_coordinates**2)/(1-x_coordinates**2 * a**2))\n        return 1-u**2\n    \n    def tearDown(self):\n        \"\"\"\n            Removes all created files within this test.\n        \"\"\"\n        import shutil\n        folders = ['cases', 'output']\n        for folder in folders:\n            shutil.rmtree(self.route_test_dir + '/' + folder)\n\n\nif __name__ == '__main__':\n    import unittest\n\n    unittest.main()\n"
  },
  {
    "path": "tests/sourcepanelmethod/test_vlm_coupled_spm.py",
    "content": "import unittest\nimport os\nimport numpy as np\nfrom sharpy.cases.templates.fuselage_wing_configuration.fuselage_wing_configuration import Fuselage_Wing_Configuration\nfrom sharpy.cases.templates.fuselage_wing_configuration.fwc_get_settings import define_simulation_settings\nimport json\n\nclass TestUvlmCoupledWithSourcePanelMethod(unittest.TestCase):\n\n \n    def test_phantom_panels(self):\n        \"\"\"\n            Phantom Panel Test (Steady and Dynamic)\n            The lift distribution over a rectangular high-aspect ratio\n            wing is computed. First a wing_only configuration is considered,\n            while second, we activate the phantom panels created within the \n            fuselage although, the effect of the source panels is omitted. \n            With the defined interpolation scheme, the same lift distribution \n            must be obtained.\n        \"\"\"\n        self.define_folder()\n        \n\n        model = 'phantom_wing'\n        fuselage_length = 10\n        dict_geometry_parameters = self.get_geometry_parameters(model,\n                                                                fuselage_length=fuselage_length)\n\n        # Freestream Conditions\n        alpha_deg = 5\n        u_inf = 10\n\n        # Discretization\n        dict_discretization = {\n            'n_elem_per_wing': 20,\n            'n_elem_fuselage': 10,\n            'num_chordwise_panels': 4\n        }\n\n        # Simulation settings\n        horseshoe = True\n        list_phantom_test = [False, True]\n        list_dynamic_test = [False, True]\n        dynamic_structural_solver = 'NonLinearDynamicPrescribedStep'\n\n        # Numerical Settings for DynamicCoupled (very small for faster test runs)\n        fsi_substeps = 2\n        fsi_tolerance = 1e-2\n\n        # Simlation Solver Flow\n        flow = ['BeamLoader',\n                'AerogridLoader',\n                'NonliftingbodygridLoader',\n                'StaticUvlm',\n                'StaticCoupled',\n                'BeamLoads',\n                'LiftDistribution',\n                'DynamicCoupled',\n                'LiftDistribution',\n                    ]\n        # define model variables\n        for dynamic in list_dynamic_test:\n            list_results_lift_distribution = []\n            for phantom_test in list_phantom_test:\n                horseshoe = not dynamic\n                lifting_only = not phantom_test\n                case_name = model + '_phantom{}_dynamic{}'.format(int(phantom_test),\n                                                                  int(dynamic))\n                \n                # generate ellipsoid model\n                phantom_wing = self.generate_model(case_name, \n                                                dict_geometry_parameters,\n                                                dict_discretization, \n                                                lifting_only)\n                # Adjust flow for case\n                flow_case = flow.copy()\n\n                if lifting_only:\n                    n_tsteps = 5\n                    flow_case.remove('NonliftingbodygridLoader')\n                if not dynamic:\n                    n_tsteps = 0\n                    flow_case.remove('StaticCoupled')\n                    flow_case.remove('DynamicCoupled')\n                self.generate_simulation_settings(flow_case, \n                                                phantom_wing, \n                                                alpha_deg, \n                                                u_inf, \n                                                lifting_only,\n                                                n_tsteps = n_tsteps,\n                                                horseshoe=horseshoe,\n                                                phantom_test=phantom_test,\n                                                dynamic_structural_solver=dynamic_structural_solver,\n                                                fsi_substeps=fsi_substeps,\n                                                fsi_tolerance=fsi_tolerance)\n                # # run simulation\n                phantom_wing.run()\n\n                # get results\n                list_results_lift_distribution.append(self.load_lift_distribution(\n                    self.output_route + '/' + case_name,\n                    phantom_wing.structure.n_node_right_wing,\n                    n_tsteps\n                )) \n            \n            # check results\n            with self.subTest(self.get_test_name('phantom', dynamic)):\n                np.testing.assert_array_almost_equal(list_results_lift_distribution[0][3:, 1], \n                                                     list_results_lift_distribution[1][3:, 1], \n                                                     decimal=2) #3 - int(dynamic))\n\n\n    \n    def test_fuselage_wing_configuration(self):\n        \"\"\"\n            Test spanwise lift distribution on a fuselage-wing configuration.\n            \n            The lift distribution on low wing configuration is computed considering\n            fuselage effects. The final results are compared to a previous solution \n            (backward compatibility) that matches the experimental lift distribution for this case. \n        \"\"\"\n        self.define_folder()\n        model = 'low_wing'\n        fuselage_length = 10\n        dict_geometry_parameters = self.get_geometry_parameters(model,\n                                                                fuselage_length=fuselage_length)\n\n        # Freestream Conditions\n        alpha_deg = 2.9\n        u_inf = 10\n\n        # Discretization\n        dict_discretization = {\n            'n_elem_per_wing': 10,\n            'n_elem_fuselage': 30,\n            'num_chordwise_panels': 8,\n            'num_radial_panels': 36\n        }\n\n        # Simulation settings\n        horseshoe = True\n        phantom_test = False\n        lifting_only = False\n        # Simlation Solver Flow\n        flow = ['BeamLoader',\n                'AerogridLoader',\n                'NonliftingbodygridLoader',\n                'StaticUvlm',\n                'StaticCoupled',\n                'BeamLoads',\n                'LiftDistribution',\n                    ]\n        for static_coupled_solver in [False, True]:\n            case_name = '{}_coupled_{}'.format(model, int(static_coupled_solver))\n            wing_fuselage_model = self.generate_model(case_name, \n                                                dict_geometry_parameters,\n                                                dict_discretization, \n                                                lifting_only)\n\n            flow_case = flow.copy()\n            if static_coupled_solver:\n                flow_case.remove('StaticUvlm')\n            else:\n                flow_case.remove('StaticCoupled')\n            self.generate_simulation_settings(flow_case, \n                                                wing_fuselage_model, \n                                                alpha_deg, \n                                                u_inf, \n                                                lifting_only,\n                                                horseshoe=horseshoe,\n                                                phantom_test=phantom_test)\n            # run simulation\n            wing_fuselage_model.run()\n            # get results\n            lift_distribution = self.load_lift_distribution(\n                self.output_route + case_name,\n                wing_fuselage_model.structure.n_node_right_wing\n                )\n            # check results\n            lift_distribution_test = np.loadtxt(self.route_test_dir + \"/test_data/results_{}.csv\".format(case_name))\n            with self.subTest(self.get_test_name('lift distribution and spanwise wing deformation',\n                                                 static_coupled=static_coupled_solver)):        \n                np.testing.assert_array_almost_equal(lift_distribution_test, lift_distribution, decimal=3)\n\n    def get_test_name(self, base_name, dynamic=False, static_coupled=False):\n        if static_coupled:\n            base_name += ' coupled'\n        else:\n            if dynamic:\n                base_name += ' uvlm'\n            else:\n                base_name += ' vlm'\n        return base_name\n    def get_geometry_parameters(self, model_name,fuselage_length=10):\n        \"\"\"\n            Geometry parameters are loaded from json init file for the specified model. \n            Next, final geoemtry parameteres, depending on the fuselage length are \n            calculated and return within a dict.\n        \"\"\"\n        with open(self.route_test_dir + '/geometry_parameter_models.json', 'r') as fp:\n            parameter_models = json.load(fp)[model_name]\n\n        geometry_parameters = {\n            'fuselage_length': fuselage_length,         \n            'max_radius': fuselage_length/parameter_models['length_radius_ratio'],\n            'fuselage_shape': parameter_models['fuselage_shape'],\n        }\n        geometry_parameters['chord']=geometry_parameters['max_radius']/parameter_models['radius_chord_ratio']\n        geometry_parameters['half_wingspan'] = geometry_parameters['max_radius']/parameter_models['radius_half_wingspan_ratio']\n        geometry_parameters['offset_nose_wing'] = parameter_models['length_offset_nose_to_wing_ratio'] * fuselage_length\n        geometry_parameters['vertical_wing_position'] = parameter_models['vertical_wing_position'] * geometry_parameters['max_radius']\n        return geometry_parameters\n\n    def generate_model(self, \n                       case_name, \n                       dict_geometry_parameters,\n                       dict_discretisation, \n                       lifting_only):\n        \"\"\"\n            Aircraft model object is generated and structural and aerodynamic (lifting and nonlifting)\n            input files are generated.\n        \"\"\"\n        aircraft_model = Fuselage_Wing_Configuration(case_name, self.case_route, self.output_route)\n        aircraft_model.init_aeroelastic(lifting_only=lifting_only,\n                                    **dict_discretisation,\n                                    **dict_geometry_parameters)\n        aircraft_model.generate()\n        return aircraft_model\n    \n    def generate_simulation_settings(self, \n                                     flow, \n                                     aircraft_model, \n                                     alpha_deg, \n                                     u_inf, \n                                     lifting_only,\n                                     n_tsteps=0,\n                                     horseshoe=True,\n                                     nonlifting_only=False,\n                                     phantom_test=False,\n                                     dynamic_structural_solver='NonLinearDynamicPrescribedStep',\n                                     fsi_substeps=200,\n                                     fsi_tolerance=1e-6\n                                     ):\n        \"\"\"\n            Simulation settings are defined and written to the \".sharpy\" input file.\n        \"\"\"\n        settings = define_simulation_settings(flow, \n                                                aircraft_model, \n                                                alpha_deg, \n                                                u_inf, \n                                                dt=self.get_timestep(aircraft_model, u_inf),\n                                                n_tsteps=n_tsteps,\n                                                lifting_only=lifting_only, \n                                                phantom_test=phantom_test, \n                                                nonlifting_only=nonlifting_only, \n                                                horseshoe=horseshoe,\n                                                dynamic_structural_solver=dynamic_structural_solver,\n                                                fsi_substeps=fsi_substeps,\n                                                fsi_tolerance=fsi_tolerance)\n        aircraft_model.create_settings(settings)\n\n    def get_timestep(self, model, u_inf):\n        return model.aero.chord_wing / model.aero.num_chordwise_panels / u_inf\n    \n    def define_folder(self):\n        \"\"\"\n            Initializes all folder path needed and creates case folder.\n        \"\"\"\n        self.route_test_dir = os.path.abspath(os.path.dirname(os.path.realpath(__file__)))\n        self.case_route = self.route_test_dir + '/cases/'\n        self.output_route = self.route_test_dir + '/output/'\n    \n        if not os.path.exists(self.case_route):\n            os.makedirs(self.case_route)\n        \n    def load_lift_distribution(self, output_folder, n_node_wing, n_tsteps=0):\n        \"\"\"\n            Loads the resulting pressure coefficients saved in txt-files.\n        \"\"\"\n        lift_distribution = np.loadtxt(output_folder + '/liftdistribution/liftdistribution_ts{}.txt'.format(str(n_tsteps)), delimiter=',')\n        return lift_distribution[:n_node_wing,[1,-1]]\n\n    def tearDown(self):\n        \"\"\"\n            Removes all created files within this test.\n        \"\"\"\n        import shutil\n        folders = ['cases', 'output']\n        for folder in folders:\n            shutil.rmtree(self.route_test_dir + '/' + folder)\n\n\nif __name__ == '__main__':\n    import unittest\n\n    unittest.main()\n"
  },
  {
    "path": "tests/utils/__init__.py",
    "content": ""
  },
  {
    "path": "tests/utils/test_algebra.py",
    "content": "import sharpy.utils.algebra as algebra\nimport numpy as np\nimport unittest\nimport random\n\n\nclass TestAlgebra(unittest.TestCase):\n    \"\"\"\n    Tests the algebra module\n    \"\"\"\n\n    def test_unit_vector(self):\n        \"\"\"\n        Tests the routine for normalising vectors\n        :return:\n        \"\"\"\n        vector_in = 1\n        result = algebra.unit_vector(vector_in)\n        self.assertAlmostEqual(np.linalg.norm(result), 1.0, 5)\n\n        vector_in = 0\n        result = algebra.unit_vector(vector_in)\n        self.assertAlmostEqual(np.linalg.norm(result), 0.0, 5)\n\n        vector_in = np.array([1, 0, 0])\n        result = algebra.unit_vector(vector_in)\n        self.assertAlmostEqual(np.linalg.norm(result), 1.0, 5)\n\n        vector_in = np.array([2, -1, 1])\n        result = algebra.unit_vector(vector_in)\n        self.assertAlmostEqual(np.linalg.norm(result), 1.0, 5)\n\n        vector_in = np.array([1e-8, 0, 0])\n        result = algebra.unit_vector(vector_in)\n        self.assertAlmostEqual(np.linalg.norm(result), 1e-8, 5)\n\n        vector_in = 'aa'\n        with self.assertRaises(ValueError):\n            algebra.unit_vector(vector_in)\n\n    def test_rotation_vectors_conversions(self):\n        \"\"\"\n        Checks routine to convert rotation vectors.\n\n        Note: test only includes CRV <-> quaternions conversions\n        \"\"\"\n\n        N = 1000\n        for nn in range(N):\n            # def random rotation in [-pi,pi]\n            a = np.pi * (2. * np.random.rand() - 1)\n            nv = 2. * np.random.rand(3) - 1\n            nv = nv / np.linalg.norm(nv)\n            # reference\n            fv0 = a * nv\n            quat0 = np.zeros((4,))\n            quat0[0] = np.cos(.5 * a)\n            quat0[1:] = np.sin(.5 * a) * nv\n            # check against reference\n            assert np.linalg.norm(fv0 - algebra.quat2crv(quat0)) < 1e-12, \\\n                'Error in quat2crv'\n            assert np.linalg.norm(quat0 - algebra.crv2quat(fv0)) < 1e-12, \\\n                'Error in crv2quat'\n\n    def test_rotation_matrices(self):\n        \"\"\"\n        Checks routines and consistency of functions to generate rotation\n        matrices.\n\n        Note: test only includes triad <-> CRV <-> quaternions conversions\n        \"\"\"\n\n        ### Verify that function build rotation matrix (not projection matrix)\n        # set an easy rotation (x axis)\n        a = np.pi / 6.\n        nv = np.array([1, 0, 0])\n        sa, ca = np.sin(a), np.cos(a)\n        Cab_exp = np.array([[1, 0, 0],\n                            [0, ca, -sa],\n                            [0, sa, ca], ])\n        ### rot from triad\n        Cab_num = algebra.triad2rotation(Cab_exp[:, 0], Cab_exp[:, 1], Cab_exp[:, 2])\n        assert np.linalg.norm(Cab_num - Cab_exp) < 1e-15, \\\n            'crv2rotation not producing the right result'\n        ### rot from crv\n        fv = a * nv\n        Cab_num = algebra.crv2rotation(fv)\n        assert np.linalg.norm(Cab_num - Cab_exp) < 1e-15, \\\n            'crv2rotation not producing the right result'\n        ### rot from quat\n        quat = algebra.crv2quat(fv)\n        Cab_num = algebra.quat2rotation(quat)\n        assert np.linalg.norm(Cab_num - Cab_exp) < 1e-15, \\\n            'quat2rotation not producing the right result'\n\n        ### inverse relations\n        # check crv2rotation and rotation2crv are biunivolcal in [-pi,pi]\n        # check quat2rotation and rotation2quat are biunivocal in [-pi,pi]\n        N = 100\n        for nn in range(N):\n            # def random rotation in [-pi,pi]\n            a = np.pi * (2. * np.random.rand() - 1)\n            nv = 2. * np.random.rand(3) - 1\n            nv = nv / np.linalg.norm(nv)\n\n            # inverse crv\n            fv0 = a * nv\n            Cab = algebra.crv2rotation(fv0)\n            fv = algebra.rotation2crv(Cab)\n            assert np.linalg.norm(fv - fv0) < 1e-12, \\\n                'rotation2crv not producing the right result'\n\n            # triad2crv\n            xa, ya, za = Cab[:, 0], Cab[:, 1], Cab[:, 2]\n            assert np.linalg.norm(\n                algebra.triad2crv(xa, ya, za) - fv0) < 1e-12, \\\n                'triad2crv not producing the right result'\n\n            # inverse quat\n            quat0 = np.zeros((4,))\n            quat0[0] = np.cos(.5 * a)\n            quat0[1:] = np.sin(.5 * a) * nv\n            quat = algebra.rotation2quat(algebra.quat2rotation(quat0))\n            assert np.linalg.norm(quat - quat0) < 1e-12, \\\n                'rotation2quat not producing the right result'\n\n        ### combined rotation\n        # assume 3 FoR, G, A and B where:\n        #   - G is the initial FoR\n        #   - A derives from a 90 deg rotation about zG\n        #   - B derives from a 90 deg rotation about yA\n        crv_G_to_A = .5 * np.pi * np.array([0, 0, 1])\n        crv_A_to_B = .5 * np.pi * np.array([0, 1, 0])\n        Cga = algebra.crv2rotation(crv_G_to_A)\n        Cab = algebra.crv2rotation(crv_A_to_B)\n\n        # rotation G to B (i.e. projection B onto G)\n        Cgb = np.dot(Cga, Cab)\n        Cgb_exp = np.array([[0, -1, 0],\n                            [0, 0, 1],\n                            [-1, 0, 0]])\n        assert np.linalg.norm(Cgb - Cgb_exp) < 1e-15, \\\n            'combined rotation not as expected!'\n\n    def test_rotation_matrices_derivatives(self):\n        \"\"\"\n        Checks derivatives of rotation matrix derivatives with respect to\n        quaternions and Cartesian rotation vectors\n\n        Note: test only includes CRV <-> quaternions conversions\n        \"\"\"\n\n        ### linearisation point\n        # fi0=np.pi/6\n        # nv0=np.array([1,3,1])\n        fi0 = 2.0 * np.pi * random.random() - np.pi\n        nv0 = np.array([random.random(), random.random(), random.random()])\n        nv0 = nv0 / np.linalg.norm(nv0)\n        fv0 = fi0 * nv0\n        qv0 = algebra.crv2quat(fv0)\n        ev0 = algebra.quat2euler(qv0)\n\n        # direction of perturbation\n        # fi1=np.pi/3\n        # nv1=np.array([-2,4,1])\n        fi1 = 2.0 * np.pi * random.random() - np.pi\n        nv1 = np.array([random.random(), random.random(), random.random()])\n        nv1 = nv1 / np.linalg.norm(nv1)\n        fv1 = fi1 * nv1\n        qv1 = algebra.crv2quat(fv1)\n        ev1 = algebra.quat2euler(qv1)\n\n        # linearsation point\n        Cga0 = algebra.quat2rotation(qv0)\n        Cag0 = Cga0.T\n        Cab0 = algebra.crv2rotation(fv0)\n        Cba0 = Cab0.T\n        Cga0_euler = algebra.euler2rot(ev0)\n        Cag0_euler = Cga0_euler.T\n\n        # derivatives\n        # xv=np.ones((3,)) # dummy vector\n        xv = np.array([random.random(), random.random(), random.random()])  # dummy vector\n        derCga = algebra.der_Cquat_by_v(qv0, xv)\n        derCag = algebra.der_CquatT_by_v(qv0, xv)\n        derCab = algebra.der_Ccrv_by_v(fv0, xv)\n        derCba = algebra.der_CcrvT_by_v(fv0, xv)\n        derCga_euler = algebra.der_Ceuler_by_v(ev0, xv)\n        derCag_euler = algebra.der_Peuler_by_v(ev0, xv)\n\n        A = np.array([1e-1, 1e-2, 1e-3, 1e-4, 1e-5, 1e-6])\n        er_ag = 10.\n        er_ga = 10.\n        er_ab = 10.\n        er_ba = 10.\n        er_ag_euler = 10.\n        er_ga_euler = 10.\n\n        for a in A:\n            # perturbed\n            qv = a * qv1 + (1. - a) * qv0\n            fv = a * fv1 + (1. - a) * fv0\n            ev = a * ev1 + (1. - a) * ev0\n            dqv = qv - qv0\n            dfv = fv - fv0\n            dev = ev - ev0\n            Cga = algebra.quat2rotation(qv)\n            Cag = Cga.T\n            Cab = algebra.crv2rotation(fv)\n            Cba = Cab.T\n            Cga_euler = algebra.euler2rot(ev)\n            Cag_euler = Cga_euler.T\n\n            dCag_num = np.dot(Cag - Cag0, xv)\n            dCga_num = np.dot(Cga - Cga0, xv)\n            dCag_an = np.dot(derCag, dqv)\n            dCga_an = np.dot(derCga, dqv)\n            er_ag_new = np.max(np.abs(dCag_num - dCag_an))\n            er_ga_new = np.max(np.abs(dCga_num - dCga_an))\n\n            dCab_num = np.dot(Cab - Cab0, xv)\n            dCba_num = np.dot(Cba - Cba0, xv)\n            dCab_an = np.dot(derCab, dfv)\n            dCba_an = np.dot(derCba, dfv)\n            er_ab_new = np.max(np.abs(dCab_num - dCab_an))\n            er_ba_new = np.max(np.abs(dCba_num - dCba_an))\n\n            dCag_num_euler = np.dot(Cag_euler - Cag0_euler, xv)\n            dCga_num_euler = np.dot(Cga_euler - Cga0_euler, xv)\n            dCag_an_euler = np.dot(derCag_euler, dev)\n            dCga_an_euler = np.dot(derCga_euler, dev)\n            er_ag_euler_new = np.max(np.abs(dCag_num_euler - dCag_an_euler))\n            er_ga_euler_new = np.max(np.abs(dCga_num_euler - dCga_an_euler))\n\n            assert er_ga_new < er_ga, 'der_Cquat_by_v error not converging to 0'\n            assert er_ag_new < er_ag, 'der_CquatT_by_v error not converging to 0'\n            assert er_ab_new < er_ab, 'der_Ccrv_by_v error not converging to 0'\n            assert er_ba_new < er_ba, 'der_CcrvT_by_v error not converging to 0'\n            assert er_ga_euler_new < er_ga_euler, 'der_Ceuler_by_v error not converging to 0'\n            assert er_ag_euler_new < er_ag_euler, 'der_Peuler_by_v error not converging to 0'\n\n            er_ag = er_ag_new\n            er_ga = er_ga_new\n            er_ab = er_ab_new\n            er_ba = er_ba_new\n            er_ag_euler = er_ag_euler_new\n            er_ga_euler = er_ga_euler_new\n\n        assert er_ga < A[-2], 'der_Cquat_by_v error too large'\n        assert er_ag < A[-2], 'der_CquatT_by_v error too large'\n        assert er_ab < A[-2], 'der_Ccrv_by_v error too large'\n        assert er_ba < A[-2], 'der_CcrvT_by_v error too large'\n        assert er_ag_euler < A[-2], 'der_Peuler_by_v error too large'\n        assert er_ga_euler < A[-2], 'der_Ceuler_by_v error too large'\n\n    def test_crv_tangential_operator(self):\n        \"\"\" Checks Cartesian rotation vector tangential operator \"\"\"\n\n        # linearisation point\n        fi0 = -np.pi / 6\n        nv0 = np.array([1, 3, 1])\n        nv0 = np.array([1, 0, 0])\n        nv0 = nv0 / np.linalg.norm(nv0)\n        fv0 = fi0 * nv0\n        Cab = algebra.crv2rotation(fv0)  # fv0 is rotation from A to B\n\n        # dummy\n        fi1 = np.pi / 3\n        nv1 = np.array([2, 4, 1])\n        nv1 = nv1 / np.linalg.norm(nv1)\n        fv1 = fi1 * nv1\n\n        er_tan = 10.\n        A = np.array([1e-1, 1e-2, 1e-3, 1e-4, 1e-5, 1e-6])\n        for a in A:\n            # perturbed\n            fv = a * fv1 + (1. - a) * fv0\n            dfv = fv - fv0\n\n            ### Compute relevant quantities\n            dCab = algebra.crv2rotation(fv0 + dfv) - Cab\n            T = algebra.crv2tan(fv0)\n            Tdfv = np.dot(T, dfv)\n            Tdfv_skew = algebra.skew(Tdfv)\n            dCab_an = np.dot(Cab, Tdfv_skew)\n\n            er_tan_new = np.max(np.abs(dCab - dCab_an)) / np.max(np.abs(dCab_an))\n            assert er_tan_new < er_tan, 'crv2tan error not converging to 0'\n            er_tan = er_tan_new\n\n        assert er_tan < A[-2], 'crv2tan error too large'\n\n    def test_crv_tangetial_operator_derivative(self):\n        \"\"\" Checks Cartesian rotation vector tangential operator \"\"\"\n\n        # linearisation point\n        fi0 = np.pi / 6\n        nv0 = np.array([1, 3, 1])\n        nv0 = nv0 / np.linalg.norm(nv0)\n        fv0 = fi0 * nv0\n        T0 = algebra.crv2tan(fv0)\n\n        # dummy vector\n        xv = np.ones((3,))\n        T0xv = np.dot(T0, xv)\n        # derT_an=dTxv(fv0,xv)\n        derT_an = algebra.der_Tan_by_xv(fv0, xv)\n        # derT_an=algebra.der_Tan_by_xv_an(fv0,xv)\n        # dummy\n        fi1 = np.pi / 3\n        nv1 = np.array([4, 1, -2])\n        nv1 = nv1 / np.linalg.norm(nv1)\n        fv1 = fi1 * nv1\n\n        er = 10.\n        A = np.array([1e-1, 1e-2, 1e-3, 1e-4, 1e-5, 1e-6])\n        for a in A:\n            # perturbed\n            fv = a * fv1 + (1. - a) * fv0\n            dfv = fv - fv0\n            Tpert = algebra.crv2tan(fv)\n            Tpertxv = np.dot(Tpert, xv)\n            dT_num = Tpertxv - T0xv\n            dT_an = np.dot(derT_an, dfv)\n\n            er_new = np.max(np.abs(dT_num - dT_an)) / np.max(np.abs(dT_an))\n            assert er_new < er, 'der_Tan_by_xv error not converging to 0'\n            er = er_new\n\n        assert er < A[-2], 'der_Tan_by_xv error too large'\n\n    def test_crv_tangetial_operator_transpose_derivative(self):\n        \"\"\" Checks Cartesian rotation vector tangential operator transpose\"\"\"\n\n        # dummy vector\n        xv = np.random.rand(3)\n\n        # linearisation point\n        fi0 = 2.0 * np.pi * np.random.rand(1)\n        nv0 = np.random.rand(3)\n        nv0 = nv0 / np.linalg.norm(nv0)\n        fv0 = fi0 * nv0\n        T0_T = np.transpose(algebra.crv2tan(fv0))\n        T0_Txv = np.dot(T0_T, xv)\n\n        # Analytical solution\n        derT_T_an = algebra.der_TanT_by_xv(fv0, xv)\n\n        # End point\n        fi1 = 2.0 * np.pi * np.random.rand()\n        nv1 = np.random.rand(3)\n        nv1 = nv1 / np.linalg.norm(nv1)\n        fv1 = fi1 * nv1\n\n        er = 10.\n        A = np.array([1e-1, 1e-2, 1e-3, 1e-4, 1e-5, 1e-6])\n        for a in A:\n            # perturbed\n            fv = a * fv1 + (1. - a) * fv0\n            dfv = fv - fv0\n            Tpert_T = np.transpose(algebra.crv2tan(fv))\n            Tpert_Txv = np.dot(Tpert_T, xv)\n            dT_T_num = Tpert_Txv - T0_Txv\n            dT_T_an = np.dot(derT_T_an, dfv)\n\n            # Error\n            er_new = np.max(np.abs(dT_T_num - dT_T_an)) / np.max(np.abs(dT_T_an))\n            assert er_new < er, 'der_TanT_by_xv error not converging to 0'\n            er = er_new\n\n        assert er < A[-2], 'der_TanT_by_xv error too large'\n\n    def test_quat_wrt_rot(self):\n        \"\"\"\n        We define:\n        - G: initial frame\n        - A: frame obtained upon rotation, Cga, defined by the quaternion q0\n        - B: frame obtained upon further rotation, Cab, of A defined by \n        the \"infinitesimal\" Cartesian rotation vector dcrv\n        The test verifies that:\n        1. the total rotation matrix Cgb(q0+dq) is equal to\n            Cgb = Cga(q0) Cab(dcrv)\n        where \n            dq = algebra.der_quat_wrt_crv(q0)\n        2. the difference between analytically computed delta quaternion, dq, \n        and the numerical delta\n            dq_num = algebra.crv2quat(algebra.rotation2crv(Cgb_ref))-q0\n        is comparable to the step used to compute the delta dcrv\n        3. The equality:\n            d(Cga(q0)*v)*dq = Cga(q0) * d(Cab*dv)*dcrv\n        where d(Cga(q0)*v) and d(Cab*dv) are the derivatives computed through\n            algebra.der_Cquat_by_v and algebra.der_Ccrv_by_v\n        for a random vector v.\n\n        Warning:\n        - The relation dcrv->dquat is not uniquely defined. However, the \n        resulting rotation matrix is, namely:\n            Cga(q0+dq)=Cga(q0)*Cab(dcrv) \n        \"\"\"\n\n        ### case 1: simple rotation about the same axis\n\n        # linearisation point\n        a0 = 30. * np.pi / 180\n        n0 = np.array([0, 0, 1])\n        n0 = n0 / np.linalg.norm(n0)\n        q0 = algebra.crv2quat(a0 * n0)\n        Cga = algebra.quat2rotation(q0)\n\n        # direction of perturbation\n        n2 = n0\n\n        A = np.array([1e-2, 1e-3, 1e-4, 1e-5, 1e-6])\n        for a in A:\n            drot = a * n2\n\n            # build rotation manually\n            atot = a0 + a\n            Cgb_exp = algebra.crv2rotation(atot * n0)  # ok\n\n            # build combined rotation\n            Cab = algebra.crv2rotation(drot)\n            Cgb_ref = np.dot(Cga, Cab)\n\n            # verify expected vs combined rotation matrices\n            assert np.linalg.norm(Cgb_exp - Cgb_ref) / a < 1e-8, \\\n                'Verify test case - these matrices need to be identical'\n\n            # verify analytical rotation matrix\n            dq_an = np.dot(algebra.der_quat_wrt_crv(q0), drot)\n            Cgb_an = algebra.quat2rotation(q0 + dq_an)\n            erel_rot = np.linalg.norm(Cgb_an - Cgb_ref) / a\n            assert erel_rot < 3e-3, \\\n                'Relative error of rotation matrix (%.2e) too large!' % erel_rot\n\n            # verify delta quaternion\n            erel_dq = np.linalg.norm(Cgb_an - Cgb_ref)\n            dq_num = algebra.crv2quat(algebra.rotation2crv(Cgb_ref)) - q0\n            erel_dq = np.linalg.norm(dq_num - dq_an) / np.linalg.norm(dq_an) / a\n            assert erel_dq < .3, \\\n                'Relative error delta quaternion (%.2e) too large!' % erel_dq\n\n            # verify algebraic relation\n            v = np.ones((3,))\n            D1 = algebra.der_Cquat_by_v(q0, v)\n            D2 = algebra.der_Ccrv_by_v(np.zeros((3,)), v)\n            res = np.dot(D1, dq_num) - np.dot(np.dot(Cga, D2), drot)\n            erel_res = np.linalg.norm(res) / a\n            assert erel_res < 5e-1 * a, \\\n                'Relative error of residual (%.2e) too large!' % erel_res\n\n        ### case 2: random rotation\n\n        # linearisation point\n        a0 = 30. * np.pi / 180\n        n0 = np.array([-2, -1, 1])\n        n0 = n0 / np.linalg.norm(n0)\n        q0 = algebra.crv2quat(a0 * n0)\n        Cga = algebra.quat2rotation(q0)\n\n        # direction of perturbation\n        n2 = np.array([0.5, 1., -2.])\n        n2 = n2 / np.linalg.norm(n2)\n\n        A = np.array([1e-2, 1e-3, 1e-4, 1e-5, 1e-6])\n        for a in A:\n            drot = a * n2\n\n            # build combined rotation\n            Cab = algebra.crv2rotation(drot)\n            Cgb_ref = np.dot(Cga, Cab)\n\n            # verify analytical rotation matrix\n            dq_an = np.dot(algebra.der_quat_wrt_crv(q0), drot)\n            Cgb_an = algebra.quat2rotation(q0 + dq_an)\n            erel_rot = np.linalg.norm(Cgb_an - Cgb_ref) / a\n            assert erel_rot < 3e-3, \\\n                'Relative error of rotation matrix (%.2e) too large!' % erel_rot\n\n            # verify delta quaternion\n            erel_dq = np.linalg.norm(Cgb_an - Cgb_ref)\n            dq_num = algebra.crv2quat(algebra.rotation2crv(Cgb_ref)) - q0\n            erel_dq = np.linalg.norm(dq_num - dq_an) / np.linalg.norm(dq_an) / a\n            assert erel_dq < .3, \\\n                'Relative error delta quaternion (%.2e) too large!' % erel_dq\n\n            # verify algebraic relation\n            v = np.ones((3,))\n            D1 = algebra.der_Cquat_by_v(q0, v)\n            D2 = algebra.der_Ccrv_by_v(np.zeros((3,)), v)\n            res = np.dot(D1, dq_num) - np.dot(np.dot(Cga, D2), drot)\n            erel_res = np.linalg.norm(res) / a\n            assert erel_res < 5e-1 * a, \\\n                'Relative error of residual (%.2e) too large!' % erel_res\n\n    def test_rotation_about_axis(self):\n        \"\"\"\n        Tests the rotations about the cartesian axes\n        \"\"\"\n        i = np.array([1, 0, 0])\n        j = np.array([0, 1, 0])\n        k = np.array([0, 0, 1])\n\n        angle = 90 * np.pi / 180\n\n        # Testing rotations about the x axis - rotation3d_x\n        out = algebra.rotation3d_x(angle).dot(j)\n        for ax in range(3):\n            self.assertAlmostEqual(out[ax], k[ax])\n\n        out = algebra.rotation3d_x(angle).dot(k)\n        for ax in range(3):\n            self.assertAlmostEqual(out[ax], -j[ax])\n\n        # Testing rotations about the y axis - rotation3d_y\n        out = algebra.rotation3d_y(angle).dot(i)\n        for ax in range(3):\n            self.assertAlmostEqual(out[ax], -k[ax])\n\n        out = algebra.rotation3d_y(angle).dot(k)\n        for ax in range(3):\n            self.assertAlmostEqual(out[ax], i[ax])\n\n        # Testing rotations about the z axis - rotation3d_z\n        out = algebra.rotation3d_z(angle).dot(i)\n        for ax in range(3):\n            self.assertAlmostEqual(out[ax], j[ax])\n\n        out = algebra.rotation3d_z(angle).dot(j)\n        for ax in range(3):\n            self.assertAlmostEqual(out[ax], -i[ax])\n\n    def test_rotation_G_to_A(self):\n        \"\"\"\n        Tests the rotation of a vector in G frame to a vector in A frame by a roll, pitch and yaw considering that\n        SHARPy employs an SEU frame.\n\n        In the inertial frame, the ``x_g`` axis is aligned with the longitudinal axis of the aircraft pointing backwards,\n        ``z_g`` points upwards and ``y_g`` completes the set\n        Returns:\n\n        \"\"\"\n\n        aircraft_nose = np.array([-1, 0, 0])\n        z_A = np.array([0, 0, 1])\n        euler = np.array([90, 90, 90]) * np.pi / 180\n        quat = algebra.euler2quat(euler)\n\n        aircraft_nose_rotated = np.array([0, 0, 1])  # in G frame pointing upwards\n        z_A_rotated_g = np.array([1, 0, 0])\n\n        Cga = algebra.euler2rot(euler)\n        Cga_quat = algebra.quat2rotation(quat)\n\n        np.testing.assert_array_almost_equal(Cga.dot(aircraft_nose), aircraft_nose_rotated,\n                                             err_msg='Rotation using Euler angles not performed properly')\n        np.testing.assert_array_almost_equal(Cga_quat.dot(aircraft_nose), aircraft_nose_rotated,\n                                             err_msg='Rotation using quaternions not performed properly')\n        np.testing.assert_array_almost_equal(Cga.dot(z_A), z_A_rotated_g,\n                                             err_msg='Rotation using Euler angles not performed properly')\n        np.testing.assert_array_almost_equal(Cga_quat.dot(z_A), z_A_rotated_g,\n                                             err_msg='Rotation using quaternions not performed properly')\n\n        # Check projections\n        Pag = Cga.T\n        Pag_quat = Cga_quat.T\n\n        np.testing.assert_array_almost_equal(Pag.dot(z_A_rotated_g), z_A,\n                                             err_msg='Error in projection from A to G using Euler angles')\n        np.testing.assert_array_almost_equal(Pag.dot(aircraft_nose_rotated), aircraft_nose,\n                                             err_msg='Error in projection from A to G using Euler angles')\n        np.testing.assert_array_almost_equal(Pag_quat.dot(z_A_rotated_g), z_A,\n                                             err_msg='Error in projection from A to G using quaternions')\n        np.testing.assert_array_almost_equal(Pag_quat.dot(aircraft_nose_rotated), aircraft_nose,\n                                             err_msg='Error in projection from A to G using quaternions')\n\n# if __name__=='__main__':\n# unittest.main()\n# # T=TestAlgebra()\n# # # T.setUp()\n# # T.test_rotation_vectors_conversions()\n# # T.test_rotation_matrices()\n# # T.test_rotation_matrices_derivatives()\n# # T.test_crv_tangetial_operator()\n# # T.test_crv_tangetial_operator_derivative()\n# # T.test_crv_tangetial_operator_transpose_derivative()\n"
  },
  {
    "path": "tests/utils/test_generate_cases.py",
    "content": "import unittest\nimport numpy as np\nimport os\nimport shutil\n\nimport sharpy.utils.generate_cases as gc\nimport sharpy.cases.templates.template_wt as template_wt\nfrom sharpy.utils.constants import deg2rad\n\n\nclass TestGenerateCases(unittest.TestCase):\n    \"\"\"\n    Tests the generate_cases module\n    Based on the NREL-5MW wind turbine rotor\n    \"\"\"\n\n    def setUp(self):\n        # remove_terminal_output = True\n        ######################################################################\n        ###########################  PARAMETERS  #############################\n        ######################################################################\n        # Case\n        global case\n        case = 'rotor'\n        route = os.path.abspath(os.path.dirname(os.path.realpath(__file__))) + '/'\n\n        # Geometry discretization\n        chord_panels = np.array([4], dtype=int)\n        revs_in_wake = 5\n\n        # Operation\n        rotation_velocity = 1.366190\n        pitch_deg = 0. #degrees\n\n        # Wind\n        WSP = 11.4\n        air_density = 1.225\n\n        # Simulation\n        dphi = 4.*deg2rad\n        revs_to_simulate = 5\n\n        ######################################################################\n        ##########################  GENERATE WT  #############################\n        ######################################################################\n        dt = dphi/rotation_velocity\n        time_steps = int(revs_to_simulate*2.*np.pi/dphi)\n        time_steps = 1 # For the test cases\n        mstar = int(revs_in_wake*2.*np.pi/dphi)\n        mstar = 2 # For the test cases\n\n        # Remove screen output\n        # if remove_terminal_output:\n        #     sys.stdout = open(os.devnull, \"w\")\n\n        op_params = {'rotation_velocity': rotation_velocity,\n                     'pitch_deg': pitch_deg,\n                     'wsp': WSP,\n                     'dt': dt}\n\n        geom_params = {'chord_panels':chord_panels,\n                    'tol_remove_points': 1e-8,\n                    'n_points_camber': 100,\n                    'm_distribution': 'uniform'}\n\n        excel_description = {'excel_file_name': route + '../../docs/source/content/example_notebooks/source/type04_db_nrel5mw_oc3_v06.xlsx',\n                            'excel_sheet_parameters': 'parameters',\n                            'excel_sheet_structural_blade': 'structural_blade',\n                            'excel_sheet_discretization_blade': 'discretization_blade',\n                            'excel_sheet_aero_blade': 'aero_blade',\n                            'excel_sheet_airfoil_info': 'airfoil_info',\n                            'excel_sheet_airfoil_chord': 'airfoil_coord'}\n\n        options = {'camber_effect_on_twist': False,\n                   'user_defined_m_distribution_type': None,\n                   'include_polars': False,\n                   'separate_blades': False}\n\n        rotor, hub_nodes = template_wt.rotor_from_excel_type03(op_params,\n                                                    geom_params,\n                                                    excel_description,\n                                                    options)\n\n        # Return the standard output to the terminal\n        # if remove_terminal_output:\n        #     sys.stdout.close()\n        #     sys.stdout = sys.__stdout__\n\n        ######################################################################\n        ######################  DEFINE SIMULATION  ###########################\n        ######################################################################\n        SimInfo = gc.SimulationInformation()\n        SimInfo.set_default_values()\n\n        SimInfo.solvers['SHARPy']['flow'] = ['BeamLoader',\n                                'AerogridLoader',\n                                'StaticCoupled',\n                                'DynamicCoupled',\n                                'SaveData']\n\n        SimInfo.solvers['SHARPy']['case'] = case\n        SimInfo.solvers['SHARPy']['write_screen'] = 'off'\n        SimInfo.solvers['SHARPy']['route'] = route\n        SimInfo.solvers['SHARPy']['write_log'] = True\n        SimInfo.solvers['SHARPy']['log_folder'] = os.path.abspath(os.path.dirname(os.path.realpath(__file__))) + '/output/'\n        SimInfo.set_variable_all_dicts('dt', dt)\n        SimInfo.set_variable_all_dicts('rho', air_density)\n\n        SimInfo.solvers['SteadyVelocityField']['u_inf'] = WSP\n        SimInfo.solvers['SteadyVelocityField']['u_inf_direction'] = np.array([0., 0., 1.])\n        SimInfo.set_variable_all_dicts('velocity_field_input', SimInfo.solvers['SteadyVelocityField'])\n        SimInfo.set_variable_all_dicts('output', os.path.abspath(os.path.dirname(os.path.realpath(__file__))))\n\n        SimInfo.solvers['BeamLoader']['unsteady'] = 'on'\n\n        SimInfo.solvers['AerogridLoader']['unsteady'] = 'on'\n        SimInfo.solvers['AerogridLoader']['mstar'] = mstar\n        SimInfo.solvers['AerogridLoader']['freestream_dir'] = np.array([0.,0.,0.])\n        SimInfo.solvers['AerogridLoader']['wake_shape_generator'] = 'HelicoidalWake'\n        SimInfo.solvers['AerogridLoader']['wake_shape_generator_input'] = {'u_inf': WSP,\n                                                                           'u_inf_direction': np.array([0., 0., 1.]),\n                                                                           'dt': dt,\n                                                                           'rotation_velocity': rotation_velocity*np.array([0., 0., 1.])}\n\n        SimInfo.solvers['StaticCoupled']['structural_solver'] = 'RigidDynamicPrescribedStep'\n        SimInfo.solvers['StaticCoupled']['structural_solver_settings'] = SimInfo.solvers['RigidDynamicPrescribedStep']\n        # SimInfo.solvers['StaticCoupled']['structural_solver'] = 'NonLinearDynamicPrescribedStep'\n        # SimInfo.solvers['StaticCoupled']['structural_solver_settings'] = SimInfo.solvers['NonLinearDynamicPrescribedStep']\n        SimInfo.solvers['StaticCoupled']['aero_solver'] = 'StaticUvlm'\n        SimInfo.solvers['StaticCoupled']['aero_solver_settings'] = SimInfo.solvers['StaticUvlm']\n\n        SimInfo.solvers['StaticCoupled']['tolerance'] = 1e-6\n        SimInfo.solvers['StaticCoupled']['n_load_steps'] = 0\n        SimInfo.solvers['StaticCoupled']['relaxation_factor'] = 0.\n\n        SimInfo.solvers['StaticUvlm']['horseshoe'] = False\n        SimInfo.solvers['StaticUvlm']['num_cores'] = 8\n        SimInfo.solvers['StaticUvlm']['n_rollup'] = 0\n        SimInfo.solvers['StaticUvlm']['rollup_dt'] = dt\n        SimInfo.solvers['StaticUvlm']['rollup_aic_refresh'] = 1\n        SimInfo.solvers['StaticUvlm']['rollup_tolerance'] = 1e-8\n        SimInfo.solvers['StaticUvlm']['rbm_vel_g'] = np.array([0., 0., 0.,\n                                                               0., 0., rotation_velocity])\n\n        SimInfo.solvers['StepUvlm']['convection_scheme'] = 2\n        SimInfo.solvers['StepUvlm']['num_cores'] = 1\n        SimInfo.solvers['StepUvlm']['cfl1'] = False\n\n        # SimInfo.solvers['DynamicCoupled']['structural_solver'] = 'NonLinearDynamicMultibody'\n        # SimInfo.solvers['DynamicCoupled']['structural_solver_settings'] = SimInfo.solvers['NonLinearDynamicMultibody']\n        SimInfo.solvers['DynamicCoupled']['structural_solver'] = 'RigidDynamicPrescribedStep'\n        SimInfo.solvers['DynamicCoupled']['structural_solver_settings'] = SimInfo.solvers['RigidDynamicPrescribedStep']\n        SimInfo.solvers['DynamicCoupled']['aero_solver'] = 'StepUvlm'\n        SimInfo.solvers['DynamicCoupled']['aero_solver_settings'] = SimInfo.solvers['StepUvlm']\n        SimInfo.solvers['DynamicCoupled']['postprocessors'] = ['BeamPlot', 'AerogridPlot', 'Cleanup', 'SaveData']\n        SimInfo.solvers['DynamicCoupled']['postprocessors_settings'] = {'BeamPlot': SimInfo.solvers['BeamPlot'],\n                                                                     'AerogridPlot': SimInfo.solvers['AerogridPlot'],\n                                                                     'Cleanup': SimInfo.solvers['Cleanup'],\n                                                                     'SaveData': SimInfo.solvers['SaveData']}\n        SimInfo.solvers['DynamicCoupled']['minimum_steps'] = 0\n        SimInfo.solvers['DynamicCoupled']['include_unsteady_force_contribution'] = True\n        SimInfo.solvers['DynamicCoupled']['relaxation_factor'] = 0.\n        SimInfo.solvers['DynamicCoupled']['final_relaxation_factor'] = 0.\n        SimInfo.solvers['DynamicCoupled']['dynamic_relaxation'] = False\n        SimInfo.solvers['DynamicCoupled']['relaxation_steps'] = 0\n\n        SimInfo.define_num_steps(time_steps)\n\n        # Define dynamic simulation\n        SimInfo.with_forced_vel = True\n        SimInfo.for_vel = np.zeros((time_steps,6), dtype=float)\n        SimInfo.for_vel[:,5] = rotation_velocity\n        SimInfo.for_acc = np.zeros((time_steps,6), dtype=float)\n        SimInfo.with_dynamic_forces = True\n        SimInfo.dynamic_forces = np.zeros((time_steps,rotor.StructuralInformation.num_node,6), dtype=float)\n\n\n        ######################################################################\n        #######################  GENERATE FILES  #############################\n        ######################################################################\n        gc.clean_test_files(SimInfo.solvers['SHARPy']['route'], SimInfo.solvers['SHARPy']['case'])\n        rotor.generate_h5_files(SimInfo.solvers['SHARPy']['route'], SimInfo.solvers['SHARPy']['case'])\n        SimInfo.generate_solver_file()\n        SimInfo.generate_dyn_file(time_steps)\n\n    def test_generatecases(self):\n\n        import sharpy.sharpy_main\n\n        solver_path = os.path.abspath(os.path.dirname(os.path.realpath(__file__)) + '/' + case +'.sharpy')\n        sharpy.sharpy_main.main(['', solver_path])\n\n    def tearDown(self):\n        solver_path = os.path.abspath(os.path.dirname(os.path.realpath(__file__)))\n        solver_path += '/'\n        files_to_delete = [case + '.aero.h5',\n                           case + '.dyn.h5',\n                           case + '.fem.h5',\n                           case + '.sharpy',\n                           '/output/' + case + '/log']\n\n        for f in files_to_delete:\n            os.remove(solver_path + f)\n\n        output_path = solver_path + 'output/'\n        if os.path.isdir(output_path):\n            shutil.rmtree(output_path)\n"
  },
  {
    "path": "tests/utils/test_settings.py",
    "content": "import sharpy.utils.settings as settings\nimport sharpy.utils.exceptions as exceptions\nimport sharpy.utils.cout_utils as cout\nfrom copy import deepcopy\nimport numpy as np\nimport unittest\nimport tests.coupled.static.pazy.generate_pazy as gp\nimport os\n\n\nclass TestSettings(unittest.TestCase):\n    \"\"\"\n    Tests the settings utilities module\n    \"\"\"\n\n    route_test_dir = os.path.abspath(os.path.dirname(os.path.realpath(__file__)))\n    \n    def setUp(self):\n        cout.start_writer()\n\n    def tearDown(self):\n        cout.finish_writer()\n\n    def test_settings_to_custom_types(self):\n        in_dict = dict()\n        default_dict = dict()\n        types_dict = dict()\n\n\n        in_dict['integer_var'] = '1234'\n        types_dict['integer_var'] = 'int'\n        default_dict['integer_var'] = 0\n\n        in_dict['float_var'] = '1.234'\n        types_dict['float_var'] = 'float'\n        default_dict['float_var'] = 0.0\n\n        in_dict['str_var'] = 'aaaa'\n        types_dict['str_var'] = 'str'\n        default_dict['str_var'] = 'default_string'\n\n        in_dict['bool_var'] = 'on'\n        types_dict['bool_var'] = 'bool'\n        default_dict['bool_var'] = False\n\n        in_dict['list_var'] = ['aa', 'bb', '11', 'ss']\n        types_dict['list_var'] = 'list(str)'\n        default_dict['list_var'] = ['a', 'b']\n        split_list = ['aa', 'bb', '11', 'ss']\n\n        in_dict['float_list_var'] = ['1.1', '2.2', '3.3']\n        types_dict['float_list_var'] = 'list(float)'\n        default_dict['float_list_var'] = np.array([0.0, -1.1])\n        split_float_list = np.array([1.1, 2.2, 3.3])\n\n        original_dict = deepcopy(in_dict)\n\n        # assigned values test\n        result = settings.to_custom_types(in_dict, types_dict, default_dict)\n        # integer variable\n        self.assertEqual(in_dict['integer_var'], 1234, 'Integer test for assigned values not passed')\n        # float variable\n        self.assertEqual(in_dict['float_var'], 1.234, 'Float test for assigned values not passed')\n        # string variable\n        self.assertEqual(in_dict['str_var'], 'aaaa', 'String test for assigned values not passed')\n        # bool variable\n        self.assertEqual(in_dict['bool_var'], True, 'Bool test for assigned values not passed')\n        # list variable\n        for i in range(4):\n            self.assertEqual(in_dict['list_var'][i], split_list[i], 'List test for assigned values not passed')\n        # float list variable\n        for i in range(3):\n            self.assertEqual(in_dict['float_list_var'][i], split_float_list[i], 'Floating point list test for assigned values not passed')\n\n        # default values test\n        in_default_dict = dict()\n        result = settings.to_custom_types(in_default_dict, types_dict, default_dict)\n        # integer variable\n        self.assertEqual(in_default_dict['integer_var'], default_dict['integer_var'],\n                         'Integer test for default values not passed')\n        # float variable\n        self.assertEqual(in_default_dict['float_var'], default_dict['float_var'],\n                         'Float test for default values not passed')\n        # string variable\n        self.assertEqual(in_default_dict['str_var'], default_dict['str_var'],\n                         'String test for default values not passed')\n        # bool variable\n        self.assertEqual(in_default_dict['bool_var'], default_dict['bool_var'],\n                         'Bool test for default values not passed')\n        # list(str) variable\n        for i in range(2):\n            self.assertEqual(in_default_dict['list_var'][i], default_dict['list_var'][i],\n                             'String list test for default values not passed')\n        # list(float) variable\n        for i in range(2):\n            self.assertEqual(in_default_dict['float_list_var'][i], default_dict['float_list_var'][i],\n                             'float list test for default values not passed')\n\n        # non-existant default values\n        with self.assertRaises(exceptions.NoDefaultValueException):\n            temp_default_dict = default_dict.copy()\n            temp_default_dict['integer_var'] = None\n\n            # remove value in in_dict\n            temp_in_dict = deepcopy(original_dict)\n            del temp_in_dict['integer_var']\n            result = settings.to_custom_types(temp_in_dict, types_dict, temp_default_dict)\n\n        with self.assertRaises(exceptions.NoDefaultValueException):\n            temp_default_dict = default_dict.copy()\n            temp_default_dict['float_var'] = None\n\n            # remove value in in_dict\n            temp_in_dict = deepcopy(original_dict)\n            del temp_in_dict['float_var']\n            result = settings.to_custom_types(temp_in_dict, types_dict, temp_default_dict)\n\n        with self.assertRaises(exceptions.NoDefaultValueException):\n            temp_default_dict = default_dict.copy()\n            temp_default_dict['str_var'] = None\n\n            # remove value in in_dict\n            temp_in_dict = deepcopy(original_dict)\n            del temp_in_dict['str_var']\n            result = settings.to_custom_types(temp_in_dict, types_dict, temp_default_dict)\n\n        with self.assertRaises(exceptions.NoDefaultValueException):\n            temp_default_dict = default_dict.copy()\n            temp_default_dict['bool_var'] = None\n\n            # remove value in in_dict\n            temp_in_dict = deepcopy(original_dict)\n            del temp_in_dict['bool_var']\n            result = settings.to_custom_types(temp_in_dict, types_dict, temp_default_dict)\n\n        with self.assertRaises(exceptions.NoDefaultValueException):\n            temp_default_dict = default_dict.copy()\n            temp_default_dict['list_var'] = None\n\n            # remove value in in_dict\n            temp_in_dict = deepcopy(original_dict)\n            del temp_in_dict['list_var']\n            result = settings.to_custom_types(temp_in_dict, types_dict, temp_default_dict)\n\n        with self.assertRaises(exceptions.NoDefaultValueException):\n            temp_default_dict = default_dict.copy()\n            temp_default_dict['float_list_var'] = None\n\n            # remove value in in_dict\n            temp_in_dict = deepcopy(original_dict)\n            del temp_in_dict['float_list_var']\n            result = settings.to_custom_types(temp_in_dict, types_dict, temp_default_dict)\n\n    def test_multiple_setting_option(self):\n        u_inf = 50\n        alpha = 7\n        case_name = 'pazy_uinf{:04g}_alpha{:04g}'.format(u_inf * 10, alpha * 10)\n\n        M = 16\n        N = 64\n        Msf = 1\n\n        cases_folder = self.route_test_dir + '/pazy/cases/'\n        output_folder = self.route_test_dir + '/pazy/cases/'\n        # run case\n        gp.generate_pazy(u_inf, case_name, output_folder, cases_folder,\n                         alpha=alpha,\n                         M=M,\n                         N=N,\n                         Msf=Msf,\n                         test_multiple_inputs=True)\n\n    def tearDown(self):\n        cases_folder = self.route_test_dir + '/pazy/cases/'\n\n        if os.path.isdir(cases_folder):\n            import shutil\n            shutil.rmtree(cases_folder)\n"
  },
  {
    "path": "tests/uvlm/__init__.py",
    "content": ""
  },
  {
    "path": "tests/uvlm/dynamic/test_wake_cfl_n1.py",
    "content": "import numpy as np\nimport os\nimport sys\nimport unittest\n# import shutil\n\nimport sharpy.utils.generate_cases as gc\nimport sharpy.sharpy_main\n\n# maths\ndeg2rad = np.pi/180.\n\n# Generate the file containing the gust information\ngust = np.array([[-1e12, 0, 0, 0],\n[-1e-12, 0, 0, 0],\n[0, -1.523086e-6, 0, 1.745328e-3],\n[1e12, -1.523086e-6, 0, 1.745328e-3]])\nnp.savetxt(\"0p1_step_gust.txt\", gust, header=\"Time[s] DeltaUx[m/s] DeltaUy[m/s] DeltaUz[m/s]\")\n\n# Analytical kussner function as a function of the non-dimensional time\nkussner_function = np.array([[2.50000000e-01, 2.24788834e-01],\n       [5.00000000e-01, 3.08322030e-01],\n       [7.50000000e-01, 3.69409233e-01],\n       [1.00000000e+00, 4.18591199e-01],\n       [1.25000000e+00, 4.59608283e-01],\n       [1.50000000e+00, 4.94597861e-01],\n       [1.75000000e+00, 5.24998850e-01],\n       [2.00000000e+00, 5.51822632e-01],\n       [2.25000000e+00, 5.75792734e-01],\n       [2.50000000e+00, 5.97434419e-01],\n       [3.25000000e+00, 6.51811966e-01],\n       [4.00000000e+00, 6.94721054e-01],\n       [5.00000000e+00, 7.39586015e-01],\n       [7.50000000e+00, 8.13230851e-01],\n       [1.00000000e+01, 8.56395643e-01],\n       [1.25000000e+01, 8.84426328e-01],\n       [1.50000000e+01, 9.04257362e-01],\n       [1.75000000e+01, 9.19155200e-01],\n       [2.00000000e+01, 9.30758783e-01],\n       [0.00000000e+00, 6.43293001e-02],\n       [2.50000000e+01, 9.47358507e-01],\n       [3.00000000e+01, 9.58126128e-01],\n       [3.50000000e+01, 9.65279097e-01],\n       [4.00000000e+01, 9.70275111e-01],\n       [4.50000000e+01, 9.74053377e-01],\n       [5.00000000e+01, 9.77137592e-01],\n       [6.00000000e+01, 9.81903866e-01],\n       [7.00000000e+01, 9.84820831e-01],\n       [8.00000000e+01, 9.86297902e-01],\n       [9.00000000e+01, 9.87557134e-01],\n       [9.97500000e+01, 9.89298872e-01]])\n\n\nclass TestWakeCFLn1(unittest.TestCase):\n    \"\"\"\n    Validate an airfoil response to a Kussner gust\n    Wake discretisation not complying with CFL=1\n    Non-linear and linear responses\n    \"\"\"\n\n    chord = 1. # \n    AR = 1e7 # Wing aspect ratio\n    \n    nodes_AR = 4 # even number of nodes in the spanwise direction\n    \n    num_chord_panels = 8 # Number of chord panels\n    \n    uinf = 1. # Flow velocity\n    uinf_dir = np.array([1., 0., 0.]) # Flow velocity direction\n    air_density = 1.225 # Flow density\n    \n    aoa_ini_deg = 1. # Initial angle of attack\n    \n    wake_chords = 100 # Length of the wake in airfoil chords units\n    \n    # Time discretization\n    final_ndtime = 12.0 # Final non-dimensional time\n    time_steps_per_chord = 8 # Number of time steps required by the flow to cover the airfoil chord\n    dt = chord/time_steps_per_chord/uinf # time step\n    nd_dt = dt*uinf/chord*2 # non-dimensional time step\n    offset_time_steps = 10 # Number of time steps before the gust gets to the airfoil\n    \n    offset = 0.\n\n    def generate_geometry(self):\n        # offset is just the distance between the gust edge and the first colocation point\n        # It is just used for plotting purposes\n        len_first_panel = (self.chord - self.dt*self.uinf)/(self.num_chord_panels - 1)\n        self.offset =  self.offset_time_steps*self.dt*self.uinf + (-0.25*self.chord + 0.75*len_first_panel)*np.cos(self.aoa_ini_deg*deg2rad) # should be 0.5*len_first_panel but to make sure it happens I increase it a bit\n        offset_LE = self.offset - 0.25*self.chord*np.cos(self.aoa_ini_deg*deg2rad)\n        \n        # Compute span\n        span = self.chord*self.AR\n        assert self.nodes_AR%2 == 0, \"nodes_AR must be even\"\n        \n        # Compute number of nodes\n        num_node = self.nodes_AR + 1\n        num_node_semispan = int((num_node - 1)/2 + 1)\n        nodes_y_semispan = np.zeros((num_node_semispan,))\n        \n        # Number of seminodes\n        n2 = int(self.nodes_AR/2 + 1)\n        \n        # Nodes coordinates in the spanwise direction\n        nodes_y_semispan[0:n2] = np.linspace(0, self.AR/2*self.chord, n2)\n        \n        # Nodes coordinates\n        nodes_y = np.zeros((num_node,))\n        nodes_y[:num_node_semispan] = -1*nodes_y_semispan[::-1]\n        nodes_y[num_node_semispan - 1:] = nodes_y_semispan\n        \n        assert not (np.diff(nodes_y) == 0).any(), \"Repeated nodes\"\n        \n        nodes = np.zeros((len(nodes_y), 3))\n        nodes[:, 1] = nodes_y\n        \n        # Irrelevant structural properties\n        mass_per_unit_length = 1.\n        mass_iner = 1e-4\n        EA = 1e9\n        GA = 1e9\n        GJ = 1e9\n        EI = 1e9\n        \n        # Airfoil camber\n        airfoil_camber = np.zeros((1, 100, 2))\n        airfoil_camber[0,:,0] = np.linspace(0.,1.,100)\n        \n        # Structure\n        airfoil = gc.AeroelasticInformation()\n        airfoil.StructuralInformation.num_node = len(nodes)\n        airfoil.StructuralInformation.num_node_elem = 3\n        airfoil.StructuralInformation.compute_basic_num_elem()\n        \n        airfoil.StructuralInformation.generate_uniform_sym_beam(nodes,\n                             mass_per_unit_length,\n                             mass_iner,\n                             EA,\n                             GA,\n                             GJ,\n                             EI,\n                             num_node_elem = airfoil.StructuralInformation.num_node_elem,\n                             y_BFoR = 'x_AFoR',\n                             num_lumped_mass=0)\n        \n        airfoil.StructuralInformation.structural_twist = 0.*deg2rad*np.ones_like(airfoil.StructuralInformation.structural_twist)\n        airfoil.StructuralInformation.boundary_conditions = np.zeros((airfoil.StructuralInformation.num_node), dtype = int)\n        airfoil.StructuralInformation.boundary_conditions[0] = 1 # Clamped end\n        airfoil.StructuralInformation.boundary_conditions[-1] = -1 # Free end\n        \n        # Generate blade aerodynamics\n        airfoil.AerodynamicInformation.create_one_uniform_aerodynamics(airfoil.StructuralInformation,\n                                         chord = self.chord,\n                                         twist = self.aoa_ini_deg*deg2rad,\n                                         sweep = 0.,\n                                         num_chord_panels = self.num_chord_panels,\n                                         m_distribution = 'uniform',\n                                         elastic_axis = 0.25,\n                                         num_points_camber = 100,\n                                         airfoil = airfoil_camber)\n\n        return airfoil\n\n\n    def generate_files(self, case_header, airfoil):\n\n        # Define the simulation\n        case = ('%s_aoa%.2f' % (case_header, self.aoa_ini_deg)).replace(\".\", \"p\")\n        route = os.path.dirname(os.path.realpath(__file__)) + '/'\n        \n        SimInfo = gc.SimulationInformation()\n        SimInfo.set_default_values()\n        \n        SimInfo.solvers['SHARPy']['flow'] = ['BeamLoader',\n                                'AerogridLoader',\n                                'StaticCoupled',\n                                'DynamicCoupled']\n        \n        SimInfo.solvers['SHARPy']['case'] = case\n        SimInfo.solvers['SHARPy']['route'] = route\n        SimInfo.solvers['SHARPy']['log_folder'] = \"./output/%s\" % case\n        SimInfo.solvers['SHARPy']['write_log'] = False\n        SimInfo.solvers['SHARPy']['write_screen'] = False\n        SimInfo.set_variable_all_dicts('rho', self.air_density)\n        SimInfo.set_variable_all_dicts('dt', self.dt)\n       \n        SimInfo.solvers['BeamLoader']['unsteady'] = 'on'\n\n        import sharpy.utils.generator_interface as gi\n        if case_header == 'traditional' or case_header == 'statespace_cfl1':\n\n            SimInfo.solvers['AerogridLoader']['wake_shape_generator'] = 'StraightWake'\n            SimInfo.solvers['AerogridLoader']['wake_shape_generator_input'] = {'u_inf': self.uinf,\n                                                'u_inf_direction': self.uinf_dir,\n                                                'dt': self.dt,\n                                                'dx1': self.chord/self.num_chord_panels,\n                                                'ndx1': int((self.wake_chords*self.chord)/(self.chord/self.num_chord_panels)),\n                                                'r':1.,\n                                                'dxmax':10*self.chord}\n        \n            gi.dictionary_of_generators(print_info=False)\n            hw = gi.dict_of_generators['StraightWake']\n            wsg_in = SimInfo.solvers['AerogridLoader']['wake_shape_generator_input'] # for simplicity\n            length = 0\n            mstar = 0\n            while length < (self.wake_chords*self.chord):\n                mstar += 1\n                length += hw.get_deltax(mstar, wsg_in['dx1'],\n                                        wsg_in['ndx1'],\n                                        wsg_in['r'],\n                                        wsg_in['dxmax'])\n        \n            SimInfo.solvers['AerogridLoader']['unsteady'] = 'on'\n            SimInfo.solvers['AerogridLoader']['mstar'] = mstar\n            SimInfo.solvers['AerogridLoader']['freestream_dir'] = np.array([0.,0.,0.])\n        \n        elif case_header in ['new_nonlinear', 'new_linear', 'statespace']:\n\n            SimInfo.solvers['AerogridLoader']['wake_shape_generator_input'] = {'u_inf': self.uinf,\n                                                'u_inf_direction': self.uinf_dir,\n                                                'dt': self.dt,\n                                                'dx1': self.chord/self.num_chord_panels,\n                                                'ndx1': int((1*self.chord)/(self.chord/self.num_chord_panels)),\n                                                'r':2.,\n                                                'dxmax':10*self.chord}\n\n            gi.dictionary_of_generators(print_info=False)\n            hw = gi.dict_of_generators['StraightWake']\n            wsg_in = SimInfo.solvers['AerogridLoader']['wake_shape_generator_input'] # for simplicity\n            length = 0\n            mstar = 0\n            while length < (self.wake_chords*self.chord):\n                mstar += 1\n                length += hw.get_deltax(mstar, wsg_in['dx1'],\n                                wsg_in['ndx1'],\n                                wsg_in['r'],\n                                wsg_in['dxmax'])\n\n            SimInfo.solvers['AerogridLoader']['mstar'] = mstar\n\n\n        SimInfo.solvers['SteadyVelocityField']['u_inf'] = self.uinf\n        SimInfo.solvers['SteadyVelocityField']['u_inf_direction'] = self.uinf_dir\n        \n        SimInfo.solvers['StaticUvlm']['horseshoe'] = False\n        SimInfo.solvers['StaticUvlm']['num_cores'] = 8\n        SimInfo.solvers['StaticUvlm']['n_rollup'] = 0\n        SimInfo.solvers['StaticUvlm']['rollup_dt'] = self.dt\n        SimInfo.solvers['StaticUvlm']['velocity_field_generator'] = 'SteadyVelocityField'\n        SimInfo.solvers['StaticUvlm']['velocity_field_input'] = SimInfo.solvers['SteadyVelocityField']\n        \n        SimInfo.solvers['StaticCoupled']['structural_solver'] = 'RigidDynamicPrescribedStep'\n        SimInfo.solvers['StaticCoupled']['structural_solver_settings'] = SimInfo.solvers['RigidDynamicPrescribedStep']\n        SimInfo.solvers['StaticCoupled']['aero_solver'] = 'StaticUvlm'\n        SimInfo.solvers['StaticCoupled']['aero_solver_settings'] = SimInfo.solvers['StaticUvlm']\n\n        if case_header in ['traditional', 'new_nonlinear']:            \n            SimInfo.solvers['StepUvlm']['convection_scheme'] = 0\n            SimInfo.solvers['StepUvlm']['num_cores'] = 8\n            SimInfo.solvers['StepUvlm']['velocity_field_generator'] = 'GustVelocityField'\n            SimInfo.solvers['StepUvlm']['velocity_field_input'] = {'u_inf' : self.uinf,\n                                                               'u_inf_direction': np.array([1.,0.,0.]),\n                                                               'gust_shape': 'time varying',\n                                                               'offset': self.offset,\n                                                               'relative_motion': True,\n                                                               'gust_parameters': {'file' : '0p1_step_gust.txt',\n                                                                                   'gust_length': 0.,\n                                                                                   'gust_intensity': 0.}}\n        \n            SimInfo.solvers['DynamicCoupled']['aero_solver'] = 'StepUvlm'\n            SimInfo.solvers['DynamicCoupled']['aero_solver_settings'] = SimInfo.solvers['StepUvlm']\n        elif case_header == 'new_linear':\n\n            SimInfo.solvers['StepLinearUVLM']['dt'] = self.dt\n            SimInfo.solvers['StepLinearUVLM']['integr_order'] = 2\n            SimInfo.solvers['StepLinearUVLM']['remove_predictor'] = 'off'\n            SimInfo.solvers['StepLinearUVLM']['use_sparse'] = True\n            SimInfo.solvers['StepLinearUVLM']['density'] = self.air_density\n            SimInfo.solvers['StepLinearUVLM']['vortex_radius'] = 1e-6\n            SimInfo.solvers['StepLinearUVLM']['vortex_radius_wake_ind'] = 1e-3\n            SimInfo.solvers['StepLinearUVLM']['velocity_field_generator'] = 'GustVelocityField'\n            SimInfo.solvers['StepLinearUVLM']['velocity_field_input'] = {'u_inf' : self.uinf,\n                                                   'u_inf_direction': self.uinf_dir,\n                                                   'gust_shape': 'time varying',\n                                                   'offset': self.offset,\n                                                   'relative_motion': True,\n                                                   'gust_parameters': {'file' : '0p1_step_gust.txt',\n                                                                       'gust_length': 0.,\n                                                                       'gust_intensity': 0.}}\n\n            SimInfo.solvers['DynamicCoupled']['aero_solver'] = 'StepLinearUVLM'\n            SimInfo.solvers['DynamicCoupled']['aero_solver_settings'] = SimInfo.solvers['StepLinearUVLM']\n\n        if case_header == 'new_nonlinear':\n            SimInfo.solvers['StaticUvlm']['cfl1'] = False\n            SimInfo.solvers['StepUvlm']['cfl1'] = False\n\n        elif case_header == 'new_linear':\n            SimInfo.solvers['StaticUvlm']['cfl1'] = False\n            SimInfo.solvers['StepLinearUVLM']['cfl1'] = False\n        \n        elif case_header == 'traditional':\n            SimInfo.solvers['StaticUvlm']['cfl1'] = True\n            SimInfo.solvers['StepUvlm']['cfl1'] = True\n\n        SimInfo.solvers['DynamicCoupled']['structural_solver'] = 'RigidDynamicPrescribedStep'\n        SimInfo.solvers['DynamicCoupled']['structural_solver_settings'] = SimInfo.solvers['RigidDynamicPrescribedStep']\n        SimInfo.solvers['DynamicCoupled']['postprocessors'] = ['Cleanup']\n        SimInfo.solvers['DynamicCoupled']['postprocessors_settings'] = {'Cleanup': SimInfo.solvers['Cleanup']}\n        SimInfo.solvers['DynamicCoupled']['minimum_steps'] = 0\n        SimInfo.solvers['DynamicCoupled']['include_unsteady_force_contribution'] = True\n        SimInfo.solvers['DynamicCoupled']['relaxation_factor'] = 0.\n        SimInfo.solvers['DynamicCoupled']['final_relaxation_factor'] = 0.\n        SimInfo.solvers['DynamicCoupled']['dynamic_relaxation'] = False\n        SimInfo.solvers['DynamicCoupled']['relaxation_steps'] = 0\n        SimInfo.solvers['DynamicCoupled']['fsi_tolerance'] = 1e-6\n\n        # Time discretization\n        time_steps = int(self.final_ndtime / self.nd_dt - 1)\n        SimInfo.define_num_steps(time_steps)\n\n        SimInfo.with_forced_vel = True\n        SimInfo.for_vel = np.zeros((time_steps,6), dtype=float)\n        SimInfo.for_acc = np.zeros((time_steps,6), dtype=float)\n        SimInfo.with_dynamic_forces = True\n        SimInfo.dynamic_forces = np.zeros((time_steps,airfoil.StructuralInformation.num_node,6), dtype=float)\n\n        SimInfo.solvers['PickleData'] = {'folder': route + '/output/'}\n        if 'statespace' in case_header:\n            SimInfo.solvers['SHARPy']['flow'] = ['BeamLoader',\n                                                 'AerogridLoader',\n                                                 'StaticCoupled',\n                                                 'Modal',\n                                                 'LinearAssembler',\n                                                 'AsymptoticStability',\n                                                 ]\n\n            SimInfo.solvers['SHARPy']['write_screen'] = 'on'\n            SimInfo.solvers['Modal'] = {'save_data': 'off',\n                                        'NumLambda': 50,\n                                        'rigid_body_modes': 'off'}\n\n            SimInfo.solvers['LinearAssembler'] = {'linear_system': 'LinearAeroelastic',\n                                   'linear_system_settings': {\n                                       'beam_settings': {'modal_projection': 'off',\n                                                         'inout_coords': 'nodes',\n                                                         'discrete_time': 'on',\n                                                         'newmark_damp': 0.5e-4,\n                                                         'discr_method': 'newmark',\n                                                         'dt': self.dt,\n                                                         'proj_modes': 'undamped',\n                                                         'use_euler': 'on',\n                                                         'num_modes': 2,\n                                                         'print_info': 'on',\n                                                         'gravity': 'on',\n                                                         'remove_dofs': [],\n                                                         'remove_rigid_states': 'off'},\n                                       'aero_settings': {'dt': self.dt,\n                                                         'integr_order': 2,\n                                                         'density': self.air_density,\n                                                         'remove_predictor': 'off',\n                                                         'use_sparse': 'off',\n                                                         'rigid_body_motion': 'off',\n                                                         'use_euler': 'on',\n                                                         'vortex_radius': 1e-6,\n                                                         'convert_to_ct': 'off',\n                                                         'gust_assembler': 'LeadingEdge',\n                                                         'gust_assembler_inputs': {},\n                                                         },\n                                       'rigid_body_motion': 'off',\n                                       'track_body': 'on',\n                                       'use_euler': 'on',\n                                       'linearisation_tstep': -1\n                                   },\n                                                  }\n            SimInfo.solvers['AsymptoticStability'] = {'num_evals': 100}\n\n        gc.clean_test_files(SimInfo.solvers['SHARPy']['route'], SimInfo.solvers['SHARPy']['case'])\n        airfoil.generate_h5_files(SimInfo.solvers['SHARPy']['route'], SimInfo.solvers['SHARPy']['case'])\n        SimInfo.generate_solver_file()\n        SimInfo.generate_dyn_file(time_steps)\n        \n        return case, route\n\n    def run_test(self, case_header):\n\n        airfoil = self.generate_geometry()\n        \n        case, route = self.generate_files(case_header, airfoil)\n        sharpy_file = route + case + '.sharpy'\n        sharpy_output = sharpy.sharpy_main.main(['', sharpy_file])\n        \n        lift = sharpy_output.structure.timestep_info[-1].steady_applied_forces[self.nodes_AR//2, 2]\n        lift += sharpy_output.structure.timestep_info[-1].unsteady_applied_forces[self.nodes_AR//2, 2]\n\n        nd_time = sharpy_output.ts*self.nd_dt\n        daoa = 0.1\n        clsteady = 2*np.pi*(self.aoa_ini_deg + daoa)*deg2rad\n        offset_plot = 0.84375\n        factor = 0.5*self.air_density*self.uinf**2*self.chord*2.5e6\n        sharpy_cl_clss = -lift/factor/clsteady\n        kussner_cl_clss = 2*np.pi*self.aoa_ini_deg*deg2rad\n        kussner_cl_clss += 2 * np.pi * daoa * deg2rad * np.interp(nd_time,\n                                                                  kussner_function[:, 0],\n                                                                  kussner_function[:, 1])\n        kussner_cl_clss /= clsteady\n\n        self.assertAlmostEqual(sharpy_cl_clss, kussner_cl_clss, 1)\n\n    def test_traditional(self):\n        self.run_test('traditional')\n\n\n    def test_new_nonlinear(self):\n        self.run_test('new_nonlinear')\n\n\n    def test_new_linear(self):\n        self.run_test('new_linear')\n\n    def test_statespace(self):\n        results = {}\n        for case in ['statespace', 'statespace_cfl1']:\n            with self.subTest(case):\n                results[case] = self.run_statespace(case)\n\n    def run_statespace(self, case_header):\n        airfoil = self.generate_geometry()\n\n        case, route = self.generate_files(case_header, airfoil)\n        sharpy_file = route + case + '.sharpy'\n        return sharpy.sharpy_main.main(['', sharpy_file])\n\n    @classmethod\n    def tearDownClass(cls):\n        solver_path = os.path.abspath(os.path.dirname(os.path.realpath(__file__)))\n        solver_path += '/'\n        files_to_delete = []\n        for name in ['traditional_aoa1p00', 'new_nonlinear_aoa1p00', 'new_linear_aoa1p00']:\n            files_to_delete.extend((name + '.aero.h5',\n                           name + '.dyn.h5',\n                           name + '.fem.h5',\n                           name + '.sharpy'))\n        files_to_delete.append(\"0p1_step_gust.txt\")\n        \n        for f in files_to_delete:\n            os.remove(solver_path + f)\n\n        # shutil.rmtree(solver_path + 'output/')\n\n"
  },
  {
    "path": "tests/uvlm/static/__init__.py",
    "content": ""
  },
  {
    "path": "tests/uvlm/static/big_wake_planarwing/generate_big_wake_planarwing.py",
    "content": "import h5py as h5\nimport numpy as np\nimport configparser\nimport os\n\ncase_name = 'big_wake_planarwing'\nroute = os.path.dirname(os.path.realpath(__file__)) + '/'\n\n# flight conditions\nu_inf = 10\nrho = 1.225\nalpha = 15\nbeta = 0\nc_ref = 1\nb_ref = 16\nsweep = 0*np.pi/180.\naspect_ratio = 1 # = total wing span (chord = 1)\n\nalpha_rad = alpha*np.pi/180\n\n# main geometry data\nmain_span = aspect_ratio/2./np.cos(sweep)\nmain_chord = 1.0\nmain_ea = 0.5\nmain_sigma = 1\nmain_airfoil_P = 0\nmain_airfoil_M = 0\n\nn_surfaces = 2\n\n# discretisation data\nnum_elem_main = 10\n\nnum_node_elem = 3\nnum_elem = num_elem_main + num_elem_main\nnum_node_main = num_elem_main*(num_node_elem - 1) + 1\nnum_node = num_node_main + (num_node_main - 1)\n\nm_main = 10\n\ndef clean_test_files():\n    fem_file_name = route + '/' + case_name + '.fem.h5'\n    if os.path.isfile(fem_file_name):\n        os.remove(fem_file_name)\n\n    aero_file_name = route + '/' + case_name + '.aero.h5'\n    if os.path.isfile(aero_file_name):\n        os.remove(aero_file_name)\n\n    solver_file_name = route + '/' + case_name + '.sharpy'\n    if os.path.isfile(solver_file_name):\n        os.remove(solver_file_name)\n\n    flightcon_file_name = route + '/' + case_name + '.flightcon.txt'\n    if os.path.isfile(flightcon_file_name):\n        os.remove(flightcon_file_name)\n\n\ndef generate_fem_file():\n    # placeholders\n    # coordinates\n    global x, y, z\n    x = np.zeros((num_node, ))\n    y = np.zeros((num_node, ))\n    z = np.zeros((num_node, ))\n    # struct twist\n    structural_twist = np.zeros((num_elem, 3))\n    # beam number\n    beam_number = np.zeros((num_elem, ), dtype=int)\n    # frame of reference delta\n    frame_of_reference_delta = np.zeros((num_elem, num_node_elem, 3))\n    # connectivities\n    conn = np.zeros((num_elem, num_node_elem), dtype=int)\n    # stiffness\n    num_stiffness = 1\n    ea = 1e4\n    ga = 1e4\n    gj = 1e4\n    eiy = 2e4\n    eiz = 5e4\n    sigma = 1\n    base_stiffness = sigma*np.diag([ea, ga, ga, gj, eiy, eiz])\n    stiffness = np.zeros((num_stiffness, 6, 6))\n    stiffness[0, :, :] = main_sigma*base_stiffness\n    elem_stiffness = np.zeros((num_elem,), dtype=int)\n    # mass\n    num_mass = 1\n    m_base = 0.75\n    j_base = 0.1\n    base_mass = np.diag([m_base, m_base, m_base, j_base, j_base, j_base])\n    mass = np.zeros((num_mass, 6, 6))\n    mass[0, :, :] = np.sqrt(main_sigma)*base_mass\n    elem_mass = np.zeros((num_elem,), dtype=int)\n    # boundary conditions\n    boundary_conditions = np.zeros((num_node, ), dtype=int)\n    boundary_conditions[0] = 1\n    # applied forces\n    n_app_forces = 0\n    node_app_forces = np.zeros((n_app_forces,), dtype=int)\n    app_forces = np.zeros((n_app_forces, 6))\n\n    spacing_param = 3\n\n    # right wing (beam 0) --------------------------------------------------------------\n    working_elem = 0\n    working_node = 0\n    beam_number[working_elem:working_elem + num_elem_main] = 0\n    domain = np.linspace(0, 1.0, num_node_main)\n    # 16 - (np.geomspace(20, 4, 10) - 4)\n    x[working_node:working_node + num_node_main] = np.sin(sweep)*(main_span - (np.geomspace(main_span + spacing_param,\n                                                                                            0 + spacing_param,\n                                                                                            num_node_main)\n                                                                               - spacing_param))\n    y[working_node:working_node + num_node_main] = np.abs(np.cos(sweep)*(main_span - (np.geomspace(main_span + spacing_param,\n                                                                                            0 + spacing_param,\n                                                                                            num_node_main)\n                                                                               - spacing_param)))\n    y[0] = 0\n    # y[working_node:working_node + num_node_main] = np.cos(sweep)*np.linspace(0.0, main_span, num_node_main)\n    # x[working_node:working_node + num_node_main] = np.sin(sweep)*np.linspace(0.0, main_span, num_node_main)\n    # y[working_node:working_node + num_node_main] = np.cos(sweep)*np.linspace(0.0, main_span, num_node_main)\n    for ielem in range(num_elem_main):\n        for inode in range(num_node_elem):\n            frame_of_reference_delta[working_elem + ielem, inode, :] = [-1, 0, 0]\n    # connectivity\n    for ielem in range(num_elem_main):\n        conn[working_elem + ielem, :] = ((np.ones((3,))*(working_elem + ielem)*(num_node_elem - 1)) +\n                                         [0, 2, 1])\n    elem_stiffness[working_elem:working_elem + num_elem_main] = 0\n    elem_mass[working_elem:working_elem + num_elem_main] = 0\n    boundary_conditions[0] = 1\n    boundary_conditions[working_node + num_node_main - 1] = -1\n    working_elem += num_elem_main\n    working_node += num_node_main\n\n    # left wing (beam 1) --------------------------------------------------------------\n    beam_number[working_elem:working_elem + num_elem_main] = 1\n    domain = np.linspace(-1.0, 0.0, num_node_main)\n    tempy = np.linspace(-main_span, 0.0, num_node_main)\n    # x[working_node:working_node + num_node_main - 1] = -np.sin(sweep)*tempy[0:-1]\n    # y[working_node:working_node + num_node_main - 1] = np.cos(sweep)*tempy[0:-1]\n    x[working_node:working_node + num_node_main - 1] = -np.sin(sweep)*(main_span - (np.geomspace(0 + spacing_param,\n                                                                                            main_span + spacing_param,\n                                                                                            num_node_main)[:-1]\n                                                                               - spacing_param))\n    y[working_node:working_node + num_node_main - 1] = -np.abs(np.cos(sweep)*(main_span - (np.geomspace(0 + spacing_param,\n                                                                                                   main_span + spacing_param,\n                                                                                                   num_node_main)[:-1]\n                                                                                      - spacing_param)))\n    for ielem in range(num_elem_main):\n        for inode in range(num_node_elem):\n            frame_of_reference_delta[working_elem + ielem, inode, :] = [-1, 0, 0]\n    # connectivity\n    for ielem in range(num_elem_main):\n        conn[working_elem + ielem, :] = ((np.ones((3,))*(working_elem + ielem)*(num_node_elem - 1)) +\n                                         [0, 2, 1]) + 1\n    conn[working_elem + num_elem_main - 1, 1] = 0\n    elem_stiffness[working_elem:working_elem + num_elem_main] = 0\n    elem_mass[working_elem:working_elem + num_elem_main] = 0\n    boundary_conditions[working_node] = -1\n    working_elem += num_elem_main\n    working_node += num_node_main - 1\n\n    with h5.File(route + '/' + case_name + '.fem.h5', 'a') as h5file:\n        coordinates = h5file.create_dataset('coordinates', data=np.column_stack((x, y, z)))\n        conectivities = h5file.create_dataset('connectivities', data=conn)\n        num_nodes_elem_handle = h5file.create_dataset(\n            'num_node_elem', data=num_node_elem)\n        num_nodes_handle = h5file.create_dataset(\n            'num_node', data=num_node)\n        num_elem_handle = h5file.create_dataset(\n            'num_elem', data=num_elem)\n        stiffness_db_handle = h5file.create_dataset(\n            'stiffness_db', data=stiffness)\n        stiffness_handle = h5file.create_dataset(\n            'elem_stiffness', data=elem_stiffness)\n        mass_db_handle = h5file.create_dataset(\n            'mass_db', data=mass)\n        mass_handle = h5file.create_dataset(\n            'elem_mass', data=elem_mass)\n        frame_of_reference_delta_handle = h5file.create_dataset(\n            'frame_of_reference_delta', data=frame_of_reference_delta)\n        structural_twist_handle = h5file.create_dataset(\n            'structural_twist', data=structural_twist)\n        bocos_handle = h5file.create_dataset(\n            'boundary_conditions', data=boundary_conditions)\n        beam_handle = h5file.create_dataset(\n            'beam_number', data=beam_number)\n        app_forces_handle = h5file.create_dataset(\n            'app_forces', data=app_forces)\n        node_app_forces_handle = h5file.create_dataset(\n            'node_app_forces', data=node_app_forces)\n\n\ndef generate_aero_file():\n    global x, y, z\n    airfoil_distribution = np.zeros((num_elem, num_node_elem), dtype=int)\n    surface_distribution = np.zeros((num_elem,), dtype=int) - 1\n    surface_m = np.zeros((n_surfaces, ), dtype=int)\n    m_distribution = 'uniform'\n    aero_node = np.zeros((num_node,), dtype=bool)\n    # twist = np.zeros((num_node,))\n    twist= np.zeros((num_elem, num_node_elem))\n    chord = np.zeros((num_elem, num_node_elem))\n    elastic_axis = np.zeros((num_elem, num_node_elem))\n    # elastic_axis = np.zeros((num_node,))\n\n    working_elem = 0\n    working_node = 0\n    # right wing (surface 0, beam 0)\n    i_surf = 0\n    airfoil_distribution[working_elem:working_elem + num_elem_main, :] = 0\n    surface_distribution[working_elem:working_elem + num_elem_main] = i_surf\n    surface_m[i_surf] = m_main\n    aero_node[working_node:working_node + num_node_main] = True\n    chord[:] = main_chord\n    elastic_axis[:] = main_ea\n    working_elem += num_elem_main\n    working_node += num_node_main\n\n    # left wing (surface 1, beam 1)\n    i_surf = 1\n    airfoil_distribution[working_elem:working_elem + num_elem_main, :] = 0\n    surface_distribution[working_elem:working_elem + num_elem_main] = i_surf\n    surface_m[i_surf] = m_main\n    aero_node[working_node:working_node + num_node_main - 1] = True\n    # chord[working_node:working_node + num_node_main - 1] = main_chord\n    # elastic_axis[working_node:working_node + num_node_main - 1] = main_ea\n    working_elem += num_elem_main\n    working_node += num_node_main - 1\n\n    with h5.File(route + '/' + case_name + '.aero.h5', 'a') as h5file:\n        airfoils_group = h5file.create_group('airfoils')\n        # add one airfoil\n        naca_airfoil_main = airfoils_group.create_dataset('0', data=np.column_stack(\n                                generate_naca_camber(P=main_airfoil_P, M=main_airfoil_M)))\n        # chord\n        chord_input = h5file.create_dataset('chord', data=chord)\n        dim_attr = chord_input .attrs['units'] = 'm'\n\n        # twist\n        twist_input = h5file.create_dataset('twist', data=twist)\n        dim_attr = twist_input.attrs['units'] = 'rad'\n\n        # airfoil distribution\n        airfoil_distribution_input = h5file.create_dataset('airfoil_distribution', data=airfoil_distribution)\n\n        surface_distribution_input = h5file.create_dataset('surface_distribution', data=surface_distribution)\n        surface_m_input = h5file.create_dataset('surface_m', data=surface_m)\n        m_distribution_input = h5file.create_dataset('m_distribution', data=m_distribution.encode('ascii', 'ignore'))\n\n        aero_node_input = h5file.create_dataset('aero_node', data=aero_node)\n        elastic_axis_input = h5file.create_dataset('elastic_axis', data=elastic_axis)\n\n\ndef generate_naca_camber(M=0, P=0):\n    m = M*1e-2\n    p = P*1e-1\n\n    def naca(x, m, p):\n        if x < 1e-6:\n            return 0.0\n        elif x < p:\n            return m/(p*p)*(2*p*x - x*x)\n        elif x > p and x < 1+1e-6:\n            return m/((1-p)*(1-p))*(1 - 2*p + 2*p*x - x*x)\n\n    x_vec = np.linspace(0, 1, 1000)\n    y_vec = np.array([naca(x, m, p) for x in x_vec])\n    return x_vec, y_vec\n\n\ndef generate_solver_file(horseshoe=False):\n    import sharpy.utils.algebra as algebra\n    file_name = route + '/' + case_name + '.sharpy'\n    # config = configparser.ConfigParser()\n    import configobj\n    config = configobj.ConfigObj()\n    config.filename = file_name\n    config['SHARPy'] = {'case': case_name,\n                        'route': route,\n                        'flow': ['BeamLoader', 'AerogridLoader', 'StaticUvlm', 'AerogridPlot', 'AeroForcesCalculator'],\n                        'write_screen': 'off',\n                        'write_log': 'on',\n                        'log_folder': route + '/output/',\n                        'log_file': case_name + '.log'}\n    config['BeamLoader'] = {'unsteady': 'off',\n                            'orientation': algebra.euler2quat(np.array([0.0,\n                                                                        alpha_rad,\n                                                                        beta*np.pi/180]))}\n    if horseshoe is True:\n        config['AerogridLoader'] = {'unsteady': 'off',\n                                    'aligned_grid': 'on',\n                                    'mstar': 1,\n                                    'freestream_dir': ['1', '0', '0'],\n                                    'wake_shape_generator': 'StraightWake',\n                                    'wake_shape_generator_input': {'u_inf': u_inf,\n                                                                   'u_inf_direction': np.array([1., 0., 0.]),\n                                                                   'dt': main_chord/m_main/u_inf}}\n        config['StaticUvlm'] = {'print_info': 'off',\n                                'horseshoe': 'on',\n                                'num_cores': 4,\n                                'n_rollup': 0,\n                                'rollup_dt': main_chord/m_main/u_inf,\n                                'rollup_aic_refresh': 1,\n                                'rollup_tolerance': 1e-4,\n                                'velocity_field_generator': 'SteadyVelocityField',\n                                'velocity_field_input': {'u_inf': u_inf,\n                                                         'u_inf_direction': [1., 0, 0]},\n                                'rho': 1.225,\n                                'alpha': alpha_rad,\n                                'beta': beta\n                                }\n    else:\n        config['AerogridLoader'] = {'unsteady': 'off',\n                                    'aligned_grid': 'on',\n                                    'mstar': 90,\n                                    'freestream_dir': ['1', '0', '0'],\n                                    'wake_shape_generator': 'StraightWake',\n                                    'wake_shape_generator_input': {'u_inf': u_inf,\n                                                                   'u_inf_direction': np.array([1., 0., 0.]),\n                                                                   'dt': main_chord/m_main/u_inf}}\n        config['StaticUvlm'] = {'print_info': 'off',\n                                'horseshoe': 'off',\n                                'num_cores': 4,\n                                'n_rollup': 100,\n                                'rollup_dt': main_chord/m_main/u_inf,\n                                'rollup_aic_refresh': 1,\n                                'rollup_tolerance': 1e-4,\n                                'velocity_field_generator': 'SteadyVelocityField',\n                                'velocity_field_input': {'u_inf': u_inf,\n                                                         'u_inf_direction': [1., 0, 0]},\n                                'rho': 1.225,\n                                'alpha': alpha_rad,\n                                'beta': beta\n                                }\n\n    minus_m_star = 0\n    if config['StaticUvlm']['horseshoe'] == 'on':\n        minus_m_star = max(m_main - 1, 1)\n    config['AerogridPlot'] = {'include_rbm': 'off',\n                              'include_applied_forces': 'on',\n                              'minus_m_star': 0\n                              }\n    config['AeroForcesCalculator'] = {'write_text_file': 'on',\n                                      'text_file_name': case_name + '_aeroforces.csv',\n                                      'screen_output': 'on',\n                                      'unsteady': 'off'\n                                      }\n\n    config.write()\n\n\nclean_test_files()\ngenerate_fem_file()\ngenerate_solver_file(horseshoe=False)\ngenerate_aero_file()\n"
  },
  {
    "path": "tests/uvlm/static/planarwing/__init__.py",
    "content": ""
  },
  {
    "path": "tests/uvlm/static/planarwing/generate_planarwing.py",
    "content": "import h5py as h5\nimport numpy as np\nimport configparser\nimport os\n\ncase_name = 'planarwing'\nroute = os.path.dirname(os.path.realpath(__file__)) + '/'\n\n# flight conditions\nu_inf = 25\nrho = 1.225\nalpha = 4\nbeta = 0\nc_ref = 1\nb_ref = 16\nsweep = 0*np.pi/180.\naspect_ratio = 32 # = total wing span (chord = 1)\n\nalpha_rad = alpha*np.pi/180\n\n# main geometry data\nmain_span = aspect_ratio/2./np.cos(sweep)\nmain_chord = 1.0\nmain_ea = 0.5\nmain_sigma = 1\nmain_airfoil_P = 0\nmain_airfoil_M = 0\n\nn_surfaces = 2\n\n# discretisation data\nnum_elem_main = 10\n\nnum_node_elem = 3\nnum_elem = num_elem_main + num_elem_main\nnum_node_main = num_elem_main*(num_node_elem - 1) + 1\nnum_node = num_node_main + (num_node_main - 1)\n\nm_main = 10\n\ndef clean_test_files():\n    fem_file_name = route + '/' + case_name + '.fem.h5'\n    if os.path.isfile(fem_file_name):\n        os.remove(fem_file_name)\n\n    aero_file_name = route + '/' + case_name + '.aero.h5'\n    if os.path.isfile(aero_file_name):\n        os.remove(aero_file_name)\n\n    solver_file_name = route + '/' + case_name + '.sharpy'\n    if os.path.isfile(solver_file_name):\n        os.remove(solver_file_name)\n\n    flightcon_file_name = route + '/' + case_name + '.flightcon.txt'\n    if os.path.isfile(flightcon_file_name):\n        os.remove(flightcon_file_name)\n\n\ndef generate_fem_file():\n    # placeholders\n    # coordinates\n    global x, y, z\n    x = np.zeros((num_node, ))\n    y = np.zeros((num_node, ))\n    z = np.zeros((num_node, ))\n    # struct twist\n    structural_twist = np.zeros((num_elem, num_node_elem))\n    # beam number\n    beam_number = np.zeros((num_elem, ), dtype=int)\n    # frame of reference delta\n    frame_of_reference_delta = np.zeros((num_elem, num_node_elem, 3))\n    # connectivities\n    conn = np.zeros((num_elem, num_node_elem), dtype=int)\n    # stiffness\n    num_stiffness = 1\n    ea = 1e4\n    ga = 1e4\n    gj = 1e4\n    eiy = 2e4\n    eiz = 5e4\n    sigma = 1\n    base_stiffness = sigma*np.diag([ea, ga, ga, gj, eiy, eiz])\n    stiffness = np.zeros((num_stiffness, 6, 6))\n    stiffness[0, :, :] = main_sigma*base_stiffness\n    elem_stiffness = np.zeros((num_elem,), dtype=int)\n    # mass\n    num_mass = 1\n    m_base = 0.75\n    j_base = 0.1\n    base_mass = np.diag([m_base, m_base, m_base, j_base, j_base, j_base])\n    mass = np.zeros((num_mass, 6, 6))\n    mass[0, :, :] = np.sqrt(main_sigma)*base_mass\n    elem_mass = np.zeros((num_elem,), dtype=int)\n    # boundary conditions\n    boundary_conditions = np.zeros((num_node, ), dtype=int)\n    boundary_conditions[0] = 1\n    # applied forces\n    n_app_forces = 0\n    node_app_forces = np.zeros((n_app_forces,), dtype=int)\n    app_forces = np.zeros((n_app_forces, 6))\n\n    spacing_param = 3\n\n    # right wing (beam 0) --------------------------------------------------------------\n    working_elem = 0\n    working_node = 0\n    beam_number[working_elem:working_elem + num_elem_main] = 0\n    domain = np.linspace(0, 1.0, num_node_main)\n    # 16 - (np.geomspace(20, 4, 10) - 4)\n    x[working_node:working_node + num_node_main] = np.sin(sweep)*(main_span - (np.geomspace(main_span + spacing_param,\n                                                                                            0 + spacing_param,\n                                                                                            num_node_main)\n                                                                               - spacing_param))\n    y[working_node:working_node + num_node_main] = np.abs(np.cos(sweep)*(main_span - (np.geomspace(main_span + spacing_param,\n                                                                                            0 + spacing_param,\n                                                                                            num_node_main)\n                                                                               - spacing_param)))\n    y[0] = 0\n    # y[working_node:working_node + num_node_main] = np.cos(sweep)*np.linspace(0.0, main_span, num_node_main)\n    # x[working_node:working_node + num_node_main] = np.sin(sweep)*np.linspace(0.0, main_span, num_node_main)\n    # y[working_node:working_node + num_node_main] = np.cos(sweep)*np.linspace(0.0, main_span, num_node_main)\n    for ielem in range(num_elem_main):\n        for inode in range(num_node_elem):\n            frame_of_reference_delta[working_elem + ielem, inode, :] = [-1, 0, 0]\n    # connectivity\n    for ielem in range(num_elem_main):\n        conn[working_elem + ielem, :] = ((np.ones((3,))*(working_elem + ielem)*(num_node_elem - 1)) +\n                                         [0, 2, 1])\n    elem_stiffness[working_elem:working_elem + num_elem_main] = 0\n    elem_mass[working_elem:working_elem + num_elem_main] = 0\n    boundary_conditions[0] = 1\n    boundary_conditions[working_node + num_node_main - 1] = -1\n    working_elem += num_elem_main\n    working_node += num_node_main\n\n    # left wing (beam 1) --------------------------------------------------------------\n    beam_number[working_elem:working_elem + num_elem_main] = 1\n    domain = np.linspace(-1.0, 0.0, num_node_main)\n    tempy = np.linspace(-main_span, 0.0, num_node_main)\n    # x[working_node:working_node + num_node_main - 1] = -np.sin(sweep)*tempy[0:-1]\n    # y[working_node:working_node + num_node_main - 1] = np.cos(sweep)*tempy[0:-1]\n    x[working_node:working_node + num_node_main - 1] = -np.sin(sweep)*(main_span - (np.geomspace(0 + spacing_param,\n                                                                                            main_span + spacing_param,\n                                                                                            num_node_main)[:-1]\n                                                                               - spacing_param))\n    y[working_node:working_node + num_node_main - 1] = -np.abs(np.cos(sweep)*(main_span - (np.geomspace(0 + spacing_param,\n                                                                                                   main_span + spacing_param,\n                                                                                                   num_node_main)[:-1]\n                                                                                      - spacing_param)))\n    for ielem in range(num_elem_main):\n        for inode in range(num_node_elem):\n            frame_of_reference_delta[working_elem + ielem, inode, :] = [-1, 0, 0]\n    # connectivity\n    for ielem in range(num_elem_main):\n        conn[working_elem + ielem, :] = ((np.ones((3,))*(working_elem + ielem)*(num_node_elem - 1)) +\n                                         [0, 2, 1]) + 1\n    conn[working_elem + num_elem_main - 1, 1] = 0\n    elem_stiffness[working_elem:working_elem + num_elem_main] = 0\n    elem_mass[working_elem:working_elem + num_elem_main] = 0\n    boundary_conditions[working_node] = -1\n    working_elem += num_elem_main\n    working_node += num_node_main - 1\n\n    with h5.File(route + '/' + case_name + '.fem.h5', 'a') as h5file:\n        coordinates = h5file.create_dataset('coordinates', data=np.column_stack((x, y, z)))\n        conectivities = h5file.create_dataset('connectivities', data=conn)\n        num_nodes_elem_handle = h5file.create_dataset(\n            'num_node_elem', data=num_node_elem)\n        num_nodes_handle = h5file.create_dataset(\n            'num_node', data=num_node)\n        num_elem_handle = h5file.create_dataset(\n            'num_elem', data=num_elem)\n        stiffness_db_handle = h5file.create_dataset(\n            'stiffness_db', data=stiffness)\n        stiffness_handle = h5file.create_dataset(\n            'elem_stiffness', data=elem_stiffness)\n        mass_db_handle = h5file.create_dataset(\n            'mass_db', data=mass)\n        mass_handle = h5file.create_dataset(\n            'elem_mass', data=elem_mass)\n        frame_of_reference_delta_handle = h5file.create_dataset(\n            'frame_of_reference_delta', data=frame_of_reference_delta)\n        structural_twist_handle = h5file.create_dataset(\n            'structural_twist', data=structural_twist)\n        bocos_handle = h5file.create_dataset(\n            'boundary_conditions', data=boundary_conditions)\n        beam_handle = h5file.create_dataset(\n            'beam_number', data=beam_number)\n        app_forces_handle = h5file.create_dataset(\n            'app_forces', data=app_forces)\n        node_app_forces_handle = h5file.create_dataset(\n            'node_app_forces', data=node_app_forces)\n\n\ndef generate_aero_file():\n    global x, y, z\n    airfoil_distribution = np.zeros((num_elem, num_node_elem), dtype=int)\n    surface_distribution = np.zeros((num_elem,), dtype=int) - 1\n    surface_m = np.zeros((n_surfaces, ), dtype=int)\n    m_distribution = 'uniform'\n    aero_node = np.zeros((num_node,), dtype=bool)\n    # twist = np.zeros((num_node,))\n    twist= np.zeros((num_elem, num_node_elem))\n    chord = np.zeros((num_elem, num_node_elem))\n    elastic_axis = np.zeros((num_elem, num_node_elem))\n    # elastic_axis = np.zeros((num_node,))\n\n    working_elem = 0\n    working_node = 0\n    # right wing (surface 0, beam 0)\n    i_surf = 0\n    airfoil_distribution[working_elem:working_elem + num_elem_main, :] = 0\n    surface_distribution[working_elem:working_elem + num_elem_main] = i_surf\n    surface_m[i_surf] = m_main\n    aero_node[working_node:working_node + num_node_main] = True\n    chord[:] = main_chord\n    elastic_axis[:] = main_ea\n    working_elem += num_elem_main\n    working_node += num_node_main\n\n    # left wing (surface 1, beam 1)\n    i_surf = 1\n    airfoil_distribution[working_elem:working_elem + num_elem_main, :] = 0\n    surface_distribution[working_elem:working_elem + num_elem_main] = i_surf\n    surface_m[i_surf] = m_main\n    aero_node[working_node:working_node + num_node_main - 1] = True\n    # chord[working_node:working_node + num_node_main - 1] = main_chord\n    # elastic_axis[working_node:working_node + num_node_main - 1] = main_ea\n    working_elem += num_elem_main\n    working_node += num_node_main - 1\n\n    with h5.File(route + '/' + case_name + '.aero.h5', 'a') as h5file:\n        airfoils_group = h5file.create_group('airfoils')\n        # add one airfoil\n        naca_airfoil_main = airfoils_group.create_dataset('0', data=np.column_stack(\n                                generate_naca_camber(P=main_airfoil_P, M=main_airfoil_M)))\n        # chord\n        chord_input = h5file.create_dataset('chord', data=chord)\n        dim_attr = chord_input .attrs['units'] = 'm'\n\n        # twist\n        twist_input = h5file.create_dataset('twist', data=twist)\n        dim_attr = twist_input.attrs['units'] = 'rad'\n\n        # airfoil distribution\n        airfoil_distribution_input = h5file.create_dataset('airfoil_distribution', data=airfoil_distribution)\n\n        surface_distribution_input = h5file.create_dataset('surface_distribution', data=surface_distribution)\n        surface_m_input = h5file.create_dataset('surface_m', data=surface_m)\n        m_distribution_input = h5file.create_dataset('m_distribution', data=m_distribution.encode('ascii', 'ignore'))\n\n        aero_node_input = h5file.create_dataset('aero_node', data=aero_node)\n        elastic_axis_input = h5file.create_dataset('elastic_axis', data=elastic_axis)\n\n\ndef generate_naca_camber(M=0, P=0):\n    m = M*1e-2\n    p = P*1e-1\n\n    def naca(x, m, p):\n        if x < 1e-6:\n            return 0.0\n        elif x < p:\n            return m/(p*p)*(2*p*x - x*x)\n        elif x > p and x < 1+1e-6:\n            return m/((1-p)*(1-p))*(1 - 2*p + 2*p*x - x*x)\n\n    x_vec = np.linspace(0, 1, 1000)\n    y_vec = np.array([naca(x, m, p) for x in x_vec])\n    return x_vec, y_vec\n\n\ndef generate_solver_file(horseshoe=False):\n    import sharpy.utils.algebra as algebra\n    file_name = route + '/' + case_name + '.sharpy'\n    # config = configparser.ConfigParser()\n    import configobj\n    config = configobj.ConfigObj()\n    config.filename = file_name\n    config['SHARPy'] = {'case': case_name,\n                        'route': route,\n                        'flow': ['BeamLoader', 'AerogridLoader', 'StaticUvlm', 'AerogridPlot', 'AeroForcesCalculator'],\n                        'write_screen': 'off',\n                        'write_log': 'on',\n                        'log_folder': route + '/output/',\n                        'log_file': case_name + '.log'}\n    config['BeamLoader'] = {'unsteady': 'off',\n                            'orientation': algebra.euler2quat(np.array([0.0,\n                                                                        alpha_rad,\n                                                                        beta*np.pi/180]))}\n    if horseshoe is True:\n        config['AerogridLoader'] = {'unsteady': 'off',\n                                    'aligned_grid': 'on',\n                                    'mstar': 1,\n                                    'freestream_dir': ['1', '0', '0'],\n                                    'wake_shape_generator': 'StraightWake',\n                                    'wake_shape_generator_input': {'u_inf': u_inf,\n                                                                   'u_inf_direction': np.array([1., 0., 0.]),\n                                                                   'dt': main_chord/m_main/u_inf}}\n        config['StaticUvlm'] = {'print_info': 'off',\n                                'horseshoe': 'on',\n                                'num_cores': 4,\n                                'n_rollup': 0,\n                                'rollup_dt': main_chord/m_main/u_inf,\n                                'rollup_aic_refresh': 1,\n                                'rollup_tolerance': 1e-4,\n                                'velocity_field_generator': 'SteadyVelocityField',\n                                'velocity_field_input': {'u_inf': u_inf,\n                                                         'u_inf_direction': [1., 0, 0]},\n                                'rho': 1.225,\n                                'alpha': alpha_rad,\n                                'beta': beta\n                                }\n    else:\n        config['AerogridLoader'] = {'unsteady': 'off',\n                                    'aligned_grid': 'on',\n                                    'mstar': 40,\n                                    'freestream_dir': ['1', '0', '0'],\n                                    'wake_shape_generator_input': {'u_inf': u_inf,\n                                                                   'u_inf_direction': np.array([1., 0., 0.]),\n                                                                   'dt': main_chord/m_main/u_inf}}\n        config['StaticUvlm'] = {'print_info': 'off',\n                                'horseshoe': 'off',\n                                'num_cores': 4,\n                                'n_rollup': 50,\n                                'rollup_dt': main_chord/m_main/u_inf,\n                                'rollup_aic_refresh': 1,\n                                'rollup_tolerance': 1e-4,\n                                'velocity_field_generator': 'SteadyVelocityField',\n                                'velocity_field_input': {'u_inf': u_inf,\n                                                         'u_inf_direction': [1., 0, 0]},\n                                'rho': 1.225,\n                                'alpha': alpha_rad,\n                                'beta': beta\n                                }\n\n    minus_m_star = 0\n    if config['StaticUvlm']['horseshoe'] == 'on':\n        minus_m_star = max(m_main - 1, 1)\n    config['AerogridPlot'] = {'include_rbm': 'off',\n                              'include_applied_forces': 'on',\n                              'minus_m_star': 0\n                              }\n    config['AeroForcesCalculator'] = {'write_text_file': 'on',\n                                      'text_file_name': case_name + '_aeroforces.csv',\n                                      'screen_output': 'on',\n                                      'unsteady': 'off'\n                                      }\n\n    config.write()\n\n\nclean_test_files()\ngenerate_fem_file()\ngenerate_solver_file(horseshoe=True)\ngenerate_aero_file()\n\ncase_name = 'planarwing_discretewake'\nclean_test_files()\ngenerate_fem_file()\ngenerate_solver_file(horseshoe=False)\ngenerate_aero_file()\n"
  },
  {
    "path": "tests/uvlm/static/polars/__init__.py",
    "content": ""
  },
  {
    "path": "tests/uvlm/static/polars/generate_wing.py",
    "content": "import numpy as np\nimport sharpy.cases.templates.flying_wings as wings\nimport sharpy.utils.algebra as algebra\nimport sharpy.sharpy_main\n\n\ndef generate_infinite_wing(case_name, alpha, **kwargs):\n\n    m = 8\n    n = 4\n    mstar = 500\n    u_inf = 1\n    alpha_deg = alpha\n    alpha_rad = alpha_deg * np.pi / 180\n    rho = 1.225\n    gravity = False\n\n    tolerance = 1e-5\n\n    case_route = kwargs.get('case_route', './')\n    case_route += '/' + case_name\n\n    output_route = kwargs.get('output_route', './output/')\n    # if not os.path.isdir(case_route):\n    #     os.makedirs(case_route)\n\n    polar_file = kwargs.get('polar_file', None)\n\n    wing = wings.QuasiInfinite(M=m,\n                               N=n,\n                               Mstar_fact=mstar,\n                               u_inf=u_inf,\n                               alpha=alpha_rad,\n                               aspect_ratio=kwargs.get('aspect_ratio', 8),\n                               rho=rho,\n                               route=case_route,\n                               case_name=case_name,\n                               polar_file=polar_file)\n\n    wing.main_ea = kwargs.get('main_ea', 0.25)\n    wing.clean_test_files()\n    wing.update_derived_params()\n    wing.sigma = 1e25\n    wing.update_mass_stiff()\n\n    wing.generate_aero_file()\n    wing.generate_fem_file()\n\n    settings = dict()\n    settings['SHARPy'] = {'case': case_name,\n                          'route': case_route,\n                          'flow': kwargs.get('flow', []),\n                          'write_screen': 'off',\n                          'write_log': 'on',\n                          'log_folder': output_route,\n                          'log_file': case_name + '.log'}\n\n    settings['BeamLoader'] = {'unsteady': 'on',\n                              'orientation': algebra.euler2quat(np.array([0.,\n                                                                          alpha_rad,\n                                                                          0.]))}\n\n    settings['AerogridLoader'] = {'unsteady': 'on',\n                                  'aligned_grid': 'on',\n                                  'mstar': int(kwargs.get('wake_length', 100) * m),\n                                  'wake_shape_generator': 'StraightWake',\n                                  'wake_shape_generator_input': {\n                                      'u_inf': u_inf,\n                                      'u_inf_direction': [1., 0., 0.],\n                                      'dt': wing.dt,\n                                  },\n                                  }\n\n    settings['NonLinearStatic'] = {'print_info': 'off',\n                                   'max_iterations': 150,\n                                   'num_load_steps': 1,\n                                   'delta_curved': 1e-1,\n                                   'min_delta': tolerance,\n                                   'gravity_on': gravity,\n                                   'gravity': 9.81,\n                                   'initial_position': [0., 0., 0.]}\n\n    settings['StaticUvlm'] = {'print_info': 'on',\n                              'horseshoe': 'on',\n                              'num_cores': 4,\n                              'vortex_radius': 1e-6,\n                              'velocity_field_generator': 'SteadyVelocityField',\n                              'velocity_field_input': {'u_inf': u_inf,\n                                                       'u_inf_direction': [1., 0, 0]},\n                              'rho': rho}\n\n    settings['StaticCoupled'] = {'print_info': 'off',\n                                 'structural_solver': 'NonLinearStatic',\n                                 'structural_solver_settings': settings['NonLinearStatic'],\n                                 'aero_solver': 'StaticUvlm',\n                                 'aero_solver_settings': settings['StaticUvlm'],\n                                 'max_iter': 100,\n                                 'n_load_steps': kwargs.get('n_load_steps', 1),\n                                 'tolerance': kwargs.get('fsi_tolerance', 1e-5),\n                                 'relaxation_factor': kwargs.get('relaxation_factor', 0.2)}\n    if polar_file is not None:\n        settings['StaticCoupled']['correct_forces_method'] = 'PolarCorrection'\n        settings['StaticCoupled']['correct_forces_settings'] = {'cd_from_cl': 'off',\n                                                                'correct_lift': 'on',\n                                                                'moment_from_polar': 'on'}\n\n    settings['AerogridPlot'] = {'include_incidence_angle': 'on',\n                                'include_velocities': 'on'}\n\n    settings['BeamPlot'] = {}\n\n    settings['AeroForcesCalculator'] = {'write_text_file': 'on',\n                                        'coefficients': 'on',\n                                        'q_ref': 0.5 * rho * u_inf ** 2,\n                                        'S_ref': wing.main_chord * wing.wing_span}\n\n    settings['Modal'] = {'print_info': True,\n                         'use_undamped_modes': True,\n                         'NumLambda': 50,\n                         'rigid_body_modes': True,\n                         'write_modes_vtk': 'on',\n                         'print_matrices': 'on',\n                         'write_data': 'on',\n                         'continuous_eigenvalues': 'off',\n                         'plot_eigenvalues': False,\n                         'rigid_modes_ppal_axes': 'on',\n                         'folder': output_route}\n\n    # ROM settings\n    rom_settings = dict()\n    rom_settings['algorithm'] = 'mimo_rational_arnoldi'\n    rom_settings['r'] = 4\n    rom_settings['frequency'] = np.array([0], dtype=float)\n    rom_settings['single_side'] = 'observability'\n\n    settings['LinearAssembler'] = {'linear_system': 'LinearAeroelastic',\n                                   'linear_system_settings': {\n                                       'beam_settings': {'modal_projection': 'off',\n                                                         'inout_coords': 'modes',\n                                                         'discrete_time': 'off',\n                                                         'newmark_damp': 0.5e-3,\n                                                         'discr_method': 'newmark',\n                                                         'dt': wing.dt,\n                                                         'proj_modes': 'undamped',\n                                                         'use_euler': 'on',\n                                                         'num_modes': 20,\n                                                         'print_info': 'on',\n                                                         'gravity': kwargs.get('gravity', 'on'),\n                                                         'remove_dofs': [],\n                                                         'remove_rigid_states': 'on'},\n                                       'aero_settings': {'dt': wing.dt,\n                                                         'integr_order': 2,\n                                                         'density': rho,\n                                                         'remove_predictor': 'off',\n                                                         'use_sparse': False,\n                                                         'rigid_body_motion': True,\n                                                         'vortex_radius': 1e-7,\n                                                         'remove_inputs': ['u_gust'],\n                                                         'convert_to_ct': 'on',\n                                                         },\n                                       'track_body': 'off',\n                                       'use_euler': 'on',\n                                   }}\n\n\n    settings['StabilityDerivatives'] = {'u_inf': u_inf,\n                                        'c_ref': wing.main_chord,\n                                        'b_ref': wing.wing_span,\n                                        'S_ref': wing.wing_span * wing.main_chord,\n                                        }\n\n    settings['SaveParametricCase'] = {'save_case': 'off',\n                                      'parameters': {'alpha': alpha_deg}}\n\n    wing.settings_to_config(settings)\n\n    sharpy.sharpy_main.main(['', f'{case_route}/{case_name}.sharpy'])\n\n    return wing\n\n\ndef get_case_header(polar, infinite_wing, compute_uind, high_re, main_ea, use2pi):\n    if polar:\n        case_header = 'polar'\n        if high_re:\n            case_header += '_highre'\n        if use2pi:\n            case_header += '_2pi'\n    else:\n        case_header = 'uvlm'\n\n    if not infinite_wing:\n        case_header += '_ar8'\n    else:\n        case_header += '_ari'\n\n    if compute_uind and polar:\n        case_header += '_uind'\n\n    case_header += '_ea{:02g}'.format(main_ea * 100)\n\n    return case_header\n\n\ndef run(infinite_wing, compute_uind, main_ea, high_re, case_route_root, output_route_root, use2pi=False,\n        polar_file=None):\n    flow = ['BeamLoader',\n            'AerogridLoader',\n            'StaticCoupled',\n            'AeroForcesCalculator',\n            'SaveParametricCase']\n\n    if polar_file is not None:\n        polar = True\n    else:\n        polar = False\n\n    if not infinite_wing:\n        ar = 8\n    else:\n        ar = 1e7\n\n    case_header = get_case_header(polar, infinite_wing, compute_uind, high_re, main_ea, use2pi)\n    case_route = case_route_root + '/' + case_header + '/'\n    output_route = output_route_root + '/' + case_header + '/'\n    for alpha in np.linspace(-5, 5, 6):\n        case_name = '{:s}_alpha{:04g}'.format(case_header,\n                                              alpha * 100).replace('-', 'M')\n        generate_infinite_wing(case_name, alpha,\n                               flow=flow,\n                               case_route=case_route,\n                               polar_file=polar_file,\n                               aspect_ratio=ar,\n                               compute_uind=compute_uind,\n                               main_ea=main_ea,\n                               output_route=output_route,\n                               actual_aoa=not use2pi,\n                               )\n\n    # pc.main(case_header, output_route)\n\n\ndef all_iter(case_route_root, output_route_root):\n    for main_ea in [0.25, 0.5]:\n        for polar in [True, False]:\n            for infinite_wing in [True, False]:\n                if polar:\n                    for high_re in [True, False]:\n                        for compute_uind in [True, False]:\n                            run(polar, infinite_wing, compute_uind, main_ea, high_re, case_route_root, output_route_root)\n                else:\n                    pass\n                    # run(polar, infinite_wing, False, main_ea, False, case_route_root, output_route_root)\n\n\nif __name__ == '__main__':\n    import postproc_infinite_wing as pc\n    case_route_root = './cases_linear/'\n    output_route_root = './output_linear/'\n    polar = True\n    infinite_wing = False\n    compute_uind = False\n    main_ea = 0.25\n    high_re = False\n    use2pi = True\n\n    run(polar, infinite_wing, compute_uind, main_ea, high_re, case_route_root, output_route_root, use2pi=use2pi)\n    # all_iter(case_route_root, output_route_root)\n"
  },
  {
    "path": "tests/uvlm/static/polars/test_polars.py",
    "content": "import unittest\nimport tests.uvlm.static.polars.generate_wing as gw\nimport os\nimport glob\nimport configobj\nimport numpy as np\n\nfrom sharpy.aero.utils.utils import local_stability_axes\nimport sharpy.utils.algebra as algebra\n\n\nclass InfiniteWing:\n    area = 90000000.0\n    chord = 3.\n\n    def force_coef(self, rho, uinf):\n        return 0.5 * rho * uinf ** 2 * self.area\n\n    def moment_coef(self, rho, uinf):\n        return self.force_coef(rho, uinf) * self.chord\n\n\nclass TestAirfoilPolars(unittest.TestCase):\n    route_test_dir = os.path.abspath(os.path.dirname(os.path.realpath(__file__)))\n\n    polar_data = np.loadtxt(route_test_dir + '/xf-naca0018-il-50000.txt', skiprows=12)\n\n    def test_infinite_wing(self):\n        \"\"\"\n        Infinite wing should yield same results as airfoil polar\n        \"\"\"\n\n        cases_route = self.route_test_dir + '/cases/'\n        output_route = self.route_test_dir + '/output/'\n\n        wing = InfiniteWing()\n\n        gw.run(compute_uind=False,\n               infinite_wing=True,\n               main_ea=0.25,\n               high_re=False,\n               case_route_root=cases_route,\n               output_route_root=output_route,\n               use2pi=True,\n               polar_file=self.route_test_dir + '/xf-naca0018-il-50000.txt')\n\n        case_header = gw.get_case_header(polar=True,\n                                         infinite_wing=True,\n                                         compute_uind=False,\n                                         high_re=False,\n                                         main_ea=0.25,\n                                         use2pi=True)\n\n        results = postprocess(output_route + '/' + case_header + '/')\n\n        results[:, 1:3] /= wing.force_coef(1.225, 1.)\n        results[:, -1] /= wing.moment_coef(1.225, 1.)\n\n        with self.subTest('lift'):\n            cl_polar = np.interp(results[:, 0], self.polar_data[:, 0], self.polar_data[:, 1])\n            np.testing.assert_array_almost_equal(cl_polar, results[:, 1], decimal=3)\n\n        with self.subTest('drag'):\n            cd_polar = np.interp(results[:, 0], self.polar_data[:, 0], self.polar_data[:, 2])\n            np.testing.assert_array_almost_equal(cd_polar, results[:, 2], decimal=3)\n\n        with self.subTest('moment'):\n            cm_polar = np.interp(results[:, 0], self.polar_data[:, 0], self.polar_data[:, 4])\n            np.testing.assert_array_almost_equal(cm_polar, results[:, 3], decimal=3)\n\n    def tearDown(self):\n        import shutil\n        folders = ['cases', 'output']\n        for folder in folders:\n            shutil.rmtree(self.route_test_dir + '/' + folder)\n\n\ndef postprocess(output_folder):\n    cases = glob.glob(output_folder + '/*')\n\n    n_cases = 0\n    for case in cases:\n        alpha, lift, drag, moment = process_case(case)\n        if n_cases == 0:\n            results = np.array([alpha, lift, drag, moment], dtype=float)\n        else:\n            results = np.vstack((results, np.array([alpha, lift, drag, moment])))\n        n_cases += 1\n    results = results.astype(float)\n    results = results[results[:, 0].argsort()]\n    return results\n\n\ndef process_case(path_to_case):\n    case_name = path_to_case.split('/')[-1]\n    pmor = configobj.ConfigObj(path_to_case + f'/{case_name}.pmor.sharpy')\n    alpha = pmor['parameters']['alpha']\n\n    body_forces = np.loadtxt(f'{path_to_case}/forces/forces_aeroforces.txt',\n                             skiprows=1, delimiter=',', dtype=float)[7:10]\n    body_moments = np.loadtxt(f'{path_to_case}/forces/moments_aeroforces.txt',\n                              skiprows=1, delimiter=',', dtype=float)[7:10]\n\n    return alpha, body_forces[2], body_forces[0], body_moments[1]\n\n\nclass TestStab(unittest.TestCase):\n\n    def test_stability(self):\n        \"\"\"\n        |\n        |  / free stream\n        | /\n        |/\n        +------------ chord ax (const)\n\n\n        \"\"\"\n        dir_urel = np.array([1, 0, 0])\n        dir_chord = np.array([1, 0, 0])\n\n        alpha = 4 * np.pi / 180\n\n        # rotate the freestream\n        dir_urel = algebra.rotation3d_y(alpha).T.dot(dir_urel)\n\n        # Test free stream rotation\n        lab = ['x', 'z']\n        with self.subTest(msg='Freestream test'):\n            assert dir_urel[2] == np.sin(alpha), 'z component of freestream not properly rotated'\n        with self.subTest(msg='Freestream test'):\n            assert dir_urel[0] == np.cos(alpha), 'x component of freestream not properly rotated'\n\n        # Stability axes\n        c_bs = local_stability_axes(dir_urel, dir_chord)\n\n        # Checking X_s\n        for ax in [0, 2]:\n            with self.subTest(msg='X_s', ax=ax):\n                assert c_bs.dot(np.eye(3)[0])[ax] > 0, f'{ax}_b component of X_s not correct'\n\n        # Checking Z_s\n        ax = 0\n        with self.subTest(msg='Z_s', ax=ax):\n            assert c_bs.dot(np.eye(3)[2])[ax] < 0, f'{ax}_b component of Z_s not correct'\n\n        ax = 2\n        with self.subTest(msg='Z_s', ax=ax):\n            assert c_bs.dot(np.eye(3)[2])[ax] > 0, f'{ax}_b component of Z_s not correct'\n\n\nif __name__ == '__main__':\n    import unittest\n\n    unittest.main()\n"
  },
  {
    "path": "tests/uvlm/static/polars/xf-naca0018-il-50000.txt",
    "content": "  \n       XFOIL         Version 6.96\n  \n Calculated polar for: NACA 0018                                       \n  \n 1 1 Reynolds number fixed          Mach number fixed         \n  \n xtrf =   1.000 (top)        1.000 (bottom)  \n Mach =   0.000     Re =     0.050 e 6     Ncrit =   9.000\n  \n   alpha    CL        CD       CDp       CM     Top_Xtr  Bot_Xtr\n  ------ -------- --------- --------- -------- -------- --------\n -10.500  -0.4876   0.10841   0.09936  -0.0104   1.0000   0.3138\n -10.250  -0.5001   0.10247   0.09342  -0.0123   1.0000   0.3114\n -10.000  -0.5715   0.08947   0.08050  -0.0181   1.0000   0.3040\n  -9.750  -0.7409   0.06466   0.05579  -0.0264   1.0000   0.2983\n  -9.500  -0.8387   0.05594   0.04699  -0.0198   1.0000   0.2967\n  -9.250  -0.8938   0.05095   0.04176  -0.0127   1.0000   0.2995\n  -9.000  -0.8627   0.05074   0.04168  -0.0120   1.0000   0.3110\n  -8.750  -0.8928   0.04743   0.03815  -0.0060   1.0000   0.3176\n  -8.500  -0.8721   0.04673   0.03754  -0.0044   1.0000   0.3286\n  -8.250  -0.8918   0.04411   0.03467   0.0010   1.0000   0.3375\n  -8.000  -0.8647   0.04386   0.03459   0.0022   1.0000   0.3500\n  -7.750  -0.8747   0.04172   0.03228   0.0068   1.0000   0.3604\n  -7.500  -0.8589   0.04109   0.03170   0.0091   1.0000   0.3734\n  -7.250  -0.8422   0.04046   0.03115   0.0113   1.0000   0.3863\n  -7.000  -0.8427   0.03895   0.02952   0.0151   1.0000   0.3991\n  -6.750  -0.8313   0.03820   0.02878   0.0178   1.0000   0.4133\n  -6.500  -0.8113   0.03791   0.02861   0.0198   1.0000   0.4275\n  -6.250  -0.8007   0.03710   0.02781   0.0226   1.0000   0.4419\n  -6.000  -0.7947   0.03608   0.02672   0.0257   1.0000   0.4573\n  -5.750  -0.7827   0.03548   0.02612   0.0283   1.0000   0.4731\n  -5.500  -0.7627   0.03537   0.02614   0.0303   1.0000   0.4885\n  -5.250  -0.7478   0.03498   0.02579   0.0327   1.0000   0.5042\n  -5.000  -0.7354   0.03446   0.02529   0.0352   1.0000   0.5207\n  -4.750  -0.7240   0.03389   0.02472   0.0378   1.0000   0.5378\n  -4.500  -0.7125   0.03338   0.02420   0.0402   1.0000   0.5555\n  -4.250  -0.6963   0.03323   0.02409   0.0424   1.0000   0.5727\n  -4.000  -0.6783   0.03326   0.02421   0.0445   1.0000   0.5894\n  -3.750  -0.6624   0.03317   0.02418   0.0467   1.0000   0.6066\n  -3.500  -0.6476   0.03305   0.02409   0.0488   1.0000   0.6244\n  -3.250  -0.6335   0.03293   0.02400   0.0510   1.0000   0.6426\n  -3.000  -0.6196   0.03285   0.02395   0.0532   1.0000   0.6612\n  -2.750  -0.6058   0.03281   0.02394   0.0553   1.0000   0.6802\n  -2.500  -0.5919   0.03285   0.02401   0.0574   1.0000   0.6995\n  -2.250  -0.5780   0.03294   0.02414   0.0595   1.0000   0.7191\n  -2.000  -0.5636   0.03313   0.02436   0.0615   1.0000   0.7390\n  -1.750  -0.5487   0.03340   0.02466   0.0634   1.0000   0.7591\n  -1.500  -0.5311   0.03382   0.02511   0.0649   0.9995   0.7797\n  -1.250  -0.4625   0.03554   0.02682   0.0580   0.9838   0.8026\n  -1.000  -0.3872   0.03723   0.02847   0.0498   0.9678   0.8246\n  -0.750  -0.3016   0.03882   0.03002   0.0397   0.9515   0.8452\n  -0.500  -0.2062   0.04015   0.03130   0.0276   0.9348   0.8641\n  -0.250  -0.1005   0.04102   0.03213   0.0134   0.9175   0.8820\n   0.000   0.0000   0.04128   0.03238   0.0000   0.8999   0.8999\n   0.250   0.1005   0.04102   0.03213  -0.0134   0.8820   0.9175\n   0.500   0.2061   0.04015   0.03130  -0.0276   0.8641   0.9348\n   0.750   0.3016   0.03882   0.03001  -0.0397   0.8452   0.9515\n   1.000   0.3873   0.03722   0.02847  -0.0498   0.8247   0.9678\n   1.250   0.4625   0.03553   0.02681  -0.0580   0.8026   0.9839\n   1.500   0.5311   0.03381   0.02511  -0.0649   0.7797   0.9996\n   1.750   0.5486   0.03339   0.02466  -0.0634   0.7592   1.0000\n   2.000   0.5635   0.03312   0.02436  -0.0615   0.7390   1.0000\n   2.250   0.5778   0.03294   0.02413  -0.0595   0.7191   1.0000\n   2.500   0.5918   0.03284   0.02400  -0.0574   0.6996   1.0000\n   2.750   0.6056   0.03281   0.02394  -0.0553   0.6802   1.0000\n   3.000   0.6194   0.03285   0.02395  -0.0532   0.6613   1.0000\n   3.250   0.6333   0.03293   0.02400  -0.0510   0.6426   1.0000\n   3.500   0.6475   0.03305   0.02409  -0.0488   0.6244   1.0000\n   3.750   0.6623   0.03316   0.02417  -0.0466   0.6066   1.0000\n   4.000   0.6782   0.03325   0.02420  -0.0445   0.5895   1.0000\n   4.250   0.6962   0.03322   0.02408  -0.0424   0.5728   1.0000\n   4.500   0.7123   0.03338   0.02419  -0.0402   0.5556   1.0000\n   4.750   0.7237   0.03389   0.02472  -0.0377   0.5378   1.0000\n   5.000   0.7352   0.03446   0.02529  -0.0352   0.5207   1.0000\n   5.250   0.7477   0.03498   0.02579  -0.0327   0.5043   1.0000\n   5.500   0.7626   0.03537   0.02613  -0.0303   0.4885   1.0000\n   5.750   0.7827   0.03547   0.02610  -0.0283   0.4732   1.0000\n   6.000   0.7944   0.03608   0.02672  -0.0257   0.4573   1.0000\n   6.250   0.8005   0.03710   0.02780  -0.0225   0.4420   1.0000\n   6.500   0.8111   0.03790   0.02860  -0.0198   0.4276   1.0000\n   6.750   0.8312   0.03819   0.02876  -0.0178   0.4134   1.0000\n   7.000   0.8424   0.03895   0.02952  -0.0151   0.3992   1.0000\n   7.250   0.8421   0.04045   0.03114  -0.0113   0.3863   1.0000\n   7.500   0.8589   0.04107   0.03169  -0.0091   0.3735   1.0000\n   7.750   0.8745   0.04172   0.03228  -0.0068   0.3604   1.0000\n   8.000   0.8647   0.04385   0.03458  -0.0021   0.3500   1.0000\n   8.250   0.8918   0.04410   0.03466  -0.0010   0.3375   1.0000\n   8.500   0.8722   0.04671   0.03752   0.0044   0.3286   1.0000\n   8.750   0.8928   0.04742   0.03814   0.0060   0.3176   1.0000\n   9.000   0.8629   0.05073   0.04166   0.0120   0.3110   1.0000\n   9.250   0.8938   0.05095   0.04175   0.0127   0.2995   1.0000\n   9.500   0.8388   0.05594   0.04699   0.0197   0.2966   1.0000\n   9.750   0.7409   0.06471   0.05583   0.0264   0.2983   1.0000\n  10.000   0.5703   0.08974   0.08077   0.0178   0.3041   1.0000\n  10.250   0.5015   0.10242   0.09337   0.0122   0.3111   1.0000\n  10.500   0.4886   0.10841   0.09937   0.0102   0.3137   1.0000\n"
  },
  {
    "path": "tests/xbeam/__init__.py",
    "content": ""
  },
  {
    "path": "tests/xbeam/geradin/__init__.py",
    "content": ""
  },
  {
    "path": "tests/xbeam/geradin/generate_geradin.py",
    "content": "import h5py as h5\nimport numpy as np\nimport configparser\nimport os\n\ncase_name = 'geradin'\nroute = os.path.dirname(os.path.realpath(__file__)) + '/'\n\n\ndef clean_test_files():\n    fem_file_name = route + '/' + case_name + '.fem.h5'\n    if os.path.isfile(fem_file_name):\n        os.remove(fem_file_name)\n\n    solver_file_name = route + '/' + case_name + '.sharpy'\n    if os.path.isfile(solver_file_name):\n        os.remove(solver_file_name)\n\n\ndef generate_fem_file(route, case_name, num_elem, num_node_elem=3):\n    length = 5\n\n    num_node = (num_node_elem - 1)*num_elem + 1\n    angle = 0*np.pi/180.0\n    x = (np.linspace(0, length, num_node))*np.cos(angle)\n    y = (np.linspace(0, length, num_node))*np.sin(angle)\n    z = np.zeros((num_node,))\n\n    structural_twist = np.zeros((num_elem, num_node_elem))\n\n    frame_of_reference_delta = np.zeros((num_elem, num_node_elem, 3))\n    for ielem in range(num_elem):\n        for inode in range(num_node_elem):\n            frame_of_reference_delta[ielem, inode, :] = [-np.sin(angle), np.cos(angle), 0]\n\n    scale = 1\n\n    x *= scale\n    y *= scale\n    z *= scale\n\n    conn = np.zeros((num_elem, num_node_elem), dtype=int)\n    for ielem in range(num_elem):\n        conn[ielem, :] = (np.ones((3,)) * ielem * (num_node_elem - 1)\n                          + [0, 2, 1])\n\n    # stiffness array\n    num_stiffness = 1\n    ea = 4.8e8\n    ga = 3.231e8\n    gj = 1.0e6\n    ei = 9.346e6\n    base_stiffness = np.diag([ea, ga, ga, gj, ei, ei])\n    stiffness = np.zeros((num_stiffness, 6, 6))\n    for i in range(num_stiffness):\n        stiffness[i, :, :] = base_stiffness\n\n    # element stiffness\n    elem_stiffness = np.zeros((num_elem,), dtype=int)\n\n    # mass array\n    num_mass = 1\n    m_bar = 0.\n    j = 10\n    base_mass = np.diag([m_bar, m_bar, m_bar, j, j, j])\n    mass = np.zeros((num_mass, 6, 6))\n    for i in range(num_mass):\n        mass[i, :, :] = base_mass\n    # element masses\n    elem_mass = np.zeros((num_elem,), dtype=int)\n\n    # bocos\n    boundary_conditions = np.zeros((num_node, 1), dtype=int)\n    boundary_conditions[0] = 1\n    boundary_conditions[-1] = -1\n\n    # beam number\n    beam_number = np.zeros((num_elem, 1), dtype=int)\n\n    # new app forces scheme (only follower)\n    app_forces = np.zeros((num_node, 6))\n\n    # lumped masses input\n    n_lumped_mass = 1\n    lumped_mass_nodes = np.array([num_node - 1], dtype=int)\n    lumped_mass = np.zeros((n_lumped_mass, ))\n    lumped_mass[0] = 600e3/9.81\n    lumped_mass_inertia = np.zeros((n_lumped_mass, 3, 3))\n    lumped_mass_position = np.zeros((n_lumped_mass, 3))\n\n    with h5.File(route + '/' + case_name + '.fem.h5', 'a') as h5file:\n        coordinates = h5file.create_dataset('coordinates', data = np.column_stack((x, y, z)))\n        conectivities = h5file.create_dataset('connectivities', data = conn)\n        num_nodes_elem_handle = h5file.create_dataset(\n            'num_node_elem', data = num_node_elem)\n        num_nodes_handle = h5file.create_dataset(\n            'num_node', data = num_node)\n        num_elem_handle = h5file.create_dataset(\n            'num_elem', data = num_elem)\n        stiffness_db_handle = h5file.create_dataset(\n            'stiffness_db', data = stiffness)\n        stiffness_handle = h5file.create_dataset(\n            'elem_stiffness', data = elem_stiffness)\n        mass_db_handle = h5file.create_dataset(\n            'mass_db', data = mass)\n        mass_handle = h5file.create_dataset(\n            'elem_mass', data = elem_mass)\n        frame_of_reference_delta_handle = h5file.create_dataset(\n            'frame_of_reference_delta', data=frame_of_reference_delta)\n        structural_twist_handle = h5file.create_dataset(\n            'structural_twist', data=structural_twist)\n        bocos_handle = h5file.create_dataset(\n            'boundary_conditions', data=boundary_conditions)\n        beam_handle = h5file.create_dataset(\n            'beam_number', data=beam_number)\n        app_forces_handle = h5file.create_dataset(\n            'app_forces', data=app_forces)\n        lumped_mass_nodes_handle = h5file.create_dataset(\n            'lumped_mass_nodes', data=lumped_mass_nodes)\n        lumped_mass_handle = h5file.create_dataset(\n            'lumped_mass', data=lumped_mass)\n        lumped_mass_inertia_handle = h5file.create_dataset(\n            'lumped_mass_inertia', data=lumped_mass_inertia)\n        lumped_mass_position_handle = h5file.create_dataset(\n            'lumped_mass_position', data=lumped_mass_position)\n    return num_node, coordinates\n\n\ndef generate_solver_file():\n    file_name = route + '/' + case_name + '.sharpy'\n\n    import configobj\n    config = configobj.ConfigObj()\n    config.filename = file_name\n    config['SHARPy'] = {'case': case_name,\n                        'route': route,\n                        'flow': ['BeamLoader', 'NonLinearStatic', 'WriteVariablesTime'],\n                        'write_screen': 'off',\n                        'write_log': 'on',\n                        'log_folder': route + '/output/',\n                        'log_file': case_name + '.log'}\n\n    config['BeamLoader'] = {'unsteady': 'off'}\n    config['NonLinearStatic'] = {'print_info': 'off',\n                                 'max_iterations': 99,\n                                 'num_load_steps': 10,\n                                 'delta_curved': 1e-5,\n                                 'min_delta': 1e-8,\n                                 'gravity_on': 'on',\n                                 'gravity': 9.81,\n                                 'gravity_dir': ['0', '0', '1']}\n    config['WriteVariablesTime'] = {'structure_variables': ['pos', 'psi'],\n                                    'cleanup_old_solution': 'on',}\n    config['BeamPlot'] = {'include_rbm': 'off',\n                          'include_applied_forces': 'on'}\n\n    config.write()\n\n\n# run everything\nclean_test_files()\ngenerate_fem_file(route, case_name, 20)\ngenerate_solver_file()\n"
  },
  {
    "path": "tests/xbeam/modal/rotating_beam/generate_bielawa_baromega2_1e3.py",
    "content": "import h5py as h5\nimport numpy as np\nimport configparser\nimport os\nimport sharpy.utils.algebra as algebra\n# Generate errors during execution\nimport sys\nimport sharpy.utils.cout_utils as cout\n\ncase_name = 'bielawa_baromega2_1e3'\nroute = os.path.dirname(os.path.realpath(__file__)) + '/'\n\nnum_elem = 40\nnum_node_elem = 3\n\nlength = 1\n\n# linear_factor: scaling factor to make the non linear solver behave as a linear one\nlinear_factor = 1\nE = 1e6 * linear_factor\nA = 1e4\nI = 1e-4\nei = E * I\nm_bar = 1 * linear_factor\n\nrot_speed = np.sqrt(1e3 * ei / m_bar / length ** 4)\n\nsteps_per_revolution = 180\ndt = 2.0 * np.pi / rot_speed / steps_per_revolution\nn_tstep = 1 * steps_per_revolution + 1\n\nn_tstep = 90\n\n\ndef clean_test_files():\n    fem_file_name = route + '/' + case_name + '.fem.h5'\n    if os.path.isfile(fem_file_name):\n        os.remove(fem_file_name)\n\n    dyn_file_name = route + '/' + case_name + '.dyn.h5'\n    if os.path.isfile(dyn_file_name):\n        os.remove(dyn_file_name)\n\n    aero_file_name = route + '/' + case_name + '.aero.h5'\n    if os.path.isfile(aero_file_name):\n        os.remove(aero_file_name)\n\n    solver_file_name = route + '/' + case_name + '.sharpy'\n    if os.path.isfile(solver_file_name):\n        os.remove(solver_file_name)\n\n\ndef generate_fem_file(route, case_name, num_elem, num_node_elem=3):\n    global num_node\n    num_node = (num_node_elem - 1) * num_elem + 1\n    angle = 0 * np.pi / 180.0\n    x = (np.linspace(0, length, num_node)) * np.cos(angle)\n    y = (np.linspace(0, length, num_node)) * np.sin(angle)\n    z = np.zeros((num_node,))\n\n    structural_twist = np.zeros((num_elem, num_node_elem))\n\n    frame_of_reference_delta = np.zeros((num_elem, num_node_elem, 3))\n    for ielem in range(num_elem):\n        for inode in range(num_node_elem):\n            frame_of_reference_delta[ielem, inode, :] = [-np.sin(angle), np.cos(angle), 0]\n\n    scale = 1\n\n    x *= scale\n    y *= scale\n    z *= scale\n\n    conn = np.zeros((num_elem, num_node_elem), dtype=int)\n    for ielem in range(num_elem):\n        conn[ielem, :] = (np.ones((3,)) * ielem * (num_node_elem - 1)\n                          + [0, 2, 1])\n\n    # stiffness array\n    num_stiffness = 1\n\n    ea = E * A\n    # APPROXIMATION!!!\n    cout.cout_wrap(\"Assuming isotropic material\", 2)\n    G = E / 2. / (1. + 0.3)\n    cout.cout_wrap(\"Using total cross-section area as shear area\", 2)\n    ga = G * A\n    cout.cout_wrap(\"Assuming planar cross-sections\", 2)\n    J = 2. * I\n    gj = G * J\n\n    base_stiffness = np.diag([ea, ga, ga, gj, ei, ei])\n    stiffness = np.zeros((num_stiffness, 6, 6))\n    for i in range(num_stiffness):\n        stiffness[i, :, :] = base_stiffness\n    # element stiffness\n    elem_stiffness = np.zeros((num_elem,), dtype=int)\n\n    # mass array\n    num_mass = 1\n    base_mass = m_bar * np.diag([1., 1., 1., J / A, I / A, I / A])\n    mass = np.zeros((num_mass, 6, 6))\n    for i in range(num_mass):\n        mass[i, :, :] = base_mass\n\n    # element masses\n    elem_mass = np.zeros((num_elem,), dtype=int)\n\n    # bocos\n    boundary_conditions = np.zeros((num_node, 1), dtype=int)\n    boundary_conditions[0] = 1\n    boundary_conditions[-1] = -1\n\n    # beam number\n    beam_number = np.zeros((num_node, 1), dtype=int)\n\n    # new app forces scheme (only follower)\n    app_forces = np.zeros((num_node, 6))\n\n    # lumped masses input\n    n_lumped_mass = 1\n    lumped_mass_nodes = np.array([num_node - 1], dtype=int)\n    lumped_mass = np.zeros((n_lumped_mass,))\n    lumped_mass[0] = 0.0\n    lumped_mass_inertia = np.zeros((n_lumped_mass, 3, 3))\n    lumped_mass_position = np.zeros((n_lumped_mass, 3))\n\n    with h5.File(route + '/' + case_name + '.fem.h5', 'a') as h5file:\n\n        # CHECKING\n        if (elem_stiffness.shape[0] != num_elem):\n            sys.exit(\"ERROR: Element stiffness must be defined for each element\")\n        if (elem_mass.shape[0] != num_elem):\n            sys.exit(\"ERROR: Element mass must be defined for each element\")\n        if (frame_of_reference_delta.shape[0] != num_elem):\n            sys.exit(\"ERROR: The first dimension of FoR does not match the number of elements\")\n        if (frame_of_reference_delta.shape[1] != num_node_elem):\n            sys.exit(\"ERROR: The second dimension of FoR does not match the number of nodes element\")\n        if (frame_of_reference_delta.shape[2] != 3):\n            sys.exit(\"ERROR: The third dimension of FoR must be 3\")\n        if (structural_twist.shape[0] != num_node):\n            sys.exit(\"ERROR: The structural twist must be defined for each node\")\n        if (boundary_conditions.shape[0] != num_node):\n            sys.exit(\"ERROR: The boundary conditions must be defined for each node\")\n        if (beam_number.shape[0] != num_node):\n            sys.exit(\"ERROR: The beam number must be defined for each node\")\n        if (app_forces.shape[0] != num_node):\n            sys.exit(\"ERROR: The first dimension of the applied forces matrix does not match the number of nodes\")\n        if (app_forces.shape[1] != 6):\n            sys.exit(\"ERROR: The second dimension of the applied forces matrix must be 6\")\n\n        coordinates = h5file.create_dataset('coordinates', data=np.column_stack((x, y, z)))\n        conectivities = h5file.create_dataset('connectivities', data=conn)\n        num_nodes_elem_handle = h5file.create_dataset(\n            'num_node_elem', data=num_node_elem)\n        num_nodes_handle = h5file.create_dataset(\n            'num_node', data=num_node)\n        num_elem_handle = h5file.create_dataset(\n            'num_elem', data=num_elem)\n        stiffness_db_handle = h5file.create_dataset(\n            'stiffness_db', data=stiffness)\n        stiffness_handle = h5file.create_dataset(\n            'elem_stiffness', data=elem_stiffness)\n        mass_db_handle = h5file.create_dataset(\n            'mass_db', data=mass)\n        mass_handle = h5file.create_dataset(\n            'elem_mass', data=elem_mass)\n        frame_of_reference_delta_handle = h5file.create_dataset(\n            'frame_of_reference_delta', data=frame_of_reference_delta)\n        structural_twist_handle = h5file.create_dataset(\n            'structural_twist', data=structural_twist)\n        bocos_handle = h5file.create_dataset(\n            'boundary_conditions', data=boundary_conditions)\n        beam_handle = h5file.create_dataset(\n            'beam_number', data=beam_number)\n        app_forces_handle = h5file.create_dataset(\n            'app_forces', data=app_forces)\n        lumped_mass_nodes_handle = h5file.create_dataset(\n            'lumped_mass_nodes', data=lumped_mass_nodes)\n        lumped_mass_handle = h5file.create_dataset(\n            'lumped_mass', data=lumped_mass)\n        lumped_mass_inertia_handle = h5file.create_dataset(\n            'lumped_mass_inertia', data=lumped_mass_inertia)\n        lumped_mass_position_handle = h5file.create_dataset(\n            'lumped_mass_position', data=lumped_mass_position)\n    return num_node, coordinates\n\n\ndef generate_dyn_file():\n    global num_node\n\n    forced_for_vel = np.zeros((n_tstep, 6))\n    dynamic_forces_time = np.zeros((n_tstep, num_node, 6))\n    for it in range(n_tstep):\n        forced_for_vel[it, 5] = rot_speed\n\n    with h5.File(route + '/' + case_name + '.dyn.h5', 'a') as h5file:\n        h5file.create_dataset(\n            'dynamic_forces', data=dynamic_forces_time)\n        h5file.create_dataset(\n            'for_vel', data=forced_for_vel)\n        h5file.create_dataset(\n            'num_steps', data=n_tstep)\n\n\ndef generate_aero_file():\n    global num_node\n    with h5.File(route + '/' + case_name + '.aero.h5', 'a') as h5file:\n        airfoils_group = h5file.create_group('airfoils')\n        # add the airfoils\n        airfoils_group.create_dataset(\"0\", data=np.column_stack((np.linspace(0.0, 1.0, 10), np.zeros(10))))\n\n        # chord\n        chord_input = h5file.create_dataset('chord', data=np.ones((num_elem, num_node_elem), ))\n        dim_attr = chord_input.attrs['units'] = 'm'\n\n        # twist\n        twist_input = h5file.create_dataset('twist', data=np.zeros((num_elem, num_node_elem), ))\n        dim_attr = twist_input.attrs['units'] = 'rad'\n\n        # airfoil distribution\n        airfoil_distribution_input = h5file.create_dataset('airfoil_distribution',\n                                                           data=np.zeros((num_elem, num_node_elem), dtype=int))\n\n        surface_distribution_input = h5file.create_dataset('surface_distribution',\n                                                           data=np.zeros((num_elem,), dtype=int))\n        surface_m_input = h5file.create_dataset('surface_m', data=np.ones((1,), dtype=int))\n        m_distribution = 'uniform'\n        m_distribution_input = h5file.create_dataset('m_distribution', data=m_distribution.encode('ascii', 'ignore'))\n\n        aero_node = np.zeros((num_node,), dtype=bool)\n        aero_node[-3:] = np.ones((3,), dtype=bool)\n        aero_node_input = h5file.create_dataset('aero_node', data=aero_node)\n        elastic_axis_input = h5file.create_dataset('elastic_axis', data=0.5 * np.ones((num_elem, num_node_elem), ))\n\n\ndef generate_solver_file():\n    file_name = route + '/' + case_name + '.sharpy'\n\n    aux_settings = dict()\n    settings = dict()\n\n    settings['SHARPy'] = {'case': case_name,\n                          'route': route,\n                          'flow': ['BeamLoader', 'AerogridLoader', 'StaticCoupled', 'BeamPlot', 'AerogridPlot',\n                                   'DynamicPrescribedCoupled', 'Modal'],\n                          'write_screen': 'off',\n                          'write_log': 'on',\n                          'log_folder': route + '/output/',\n                          'log_file': case_name + '.log'}\n\n    # AUX DICTIONARIES\n    aux_settings['velocity_field_input'] = {'u_inf': 100.0,\n                                            'u_inf_direction': [0.0, -1.0, 0.0]}\n\n    # LOADERS\n    settings['BeamLoader'] = {'unsteady': 'on',\n                              'orientation': algebra.euler2quat(np.array([0.0, 0.0, 0.0]))}\n\n    settings['AerogridLoader'] = {'unsteady': 'on',\n                                  'aligned_grid': 'on',\n                                  'mstar': 1,\n                                  'freestream_dir': ['0', '-1', '0'],\n                                  'wake_shape_generator': 'StraightWake',\n                                  'wake_shape_generator_input': {'u_inf': 100,\n                                                                 'u_inf_direction': np.array([0., -1., 0.]),\n                                                                 'dt': dt}}\n\n    # POSTPROCESS\n    settings['AerogridPlot'] = {'include_rbm': 'on',\n                                'include_forward_motion': 'off',\n                                'include_applied_forces': 'on',\n                                'minus_m_star': 0,\n                                'u_inf': 100.0,\n                                'dt': dt}\n\n    settings['BeamPlot'] = {'include_rbm': 'on',\n                            'include_applied_forces': 'on',\n                            'include_forward_motion': 'on'}\n\n    settings['BeamLoads'] = {}\n\n    # STATIC COUPLED\n\n    settings['NonLinearStatic'] = {'print_info': 'on',\n                                   'max_iterations': 150,\n                                   'num_load_steps': 1,\n                                   'delta_curved': 1e-15,\n                                   'min_delta': 1e-8,\n                                   'gravity_on': 'off',\n                                   'gravity': 9.81}\n\n    settings['StaticUvlm'] = {'print_info': 'on',\n                              'horseshoe': 'off',\n                              'num_cores': 4,\n                              'n_rollup': 0,\n                              'rollup_dt': dt,\n                              'rollup_aic_refresh': 1,\n                              'rollup_tolerance': 1e-4,\n                              'velocity_field_generator': 'SteadyVelocityField',\n                              'velocity_field_input': aux_settings['velocity_field_input'],\n                              'rho': 0.0}\n\n    settings['StaticCoupled'] = {'print_info': 'on',\n                                 'structural_solver': 'NonLinearStatic',\n                                 'structural_solver_settings': settings['NonLinearStatic'],\n                                 'aero_solver': 'StaticUvlm',\n                                 'aero_solver_settings': settings['StaticUvlm'],\n                                 'max_iter': 100,\n                                 'n_load_steps': 4,\n                                 'tolerance': 1e-8,\n                                 'relaxation_factor': 0}\n\n    # DYNAMIC PRESCRIBED COUPLED\n\n    settings['NonLinearDynamicPrescribedStep'] = {'print_info': 'on',\n                                                  'max_iterations': 95000,\n                                                  'delta_curved': 1e-9,\n                                                  'min_delta': 1e-6,\n                                                  'newmark_damp': 1e-3,\n                                                  'gravity_on': 'off',\n                                                  'gravity': 9.81,\n                                                  'num_steps': n_tstep,\n                                                  'dt': dt}\n\n    settings['StepUvlm'] = {'print_info': 'on',\n                            'horseshoe': 'off',\n                            'num_cores': 4,\n                            'n_rollup': 0,\n                            'convection_scheme': 2,\n                            'rollup_dt': dt,\n                            'rollup_aic_refresh': 1,\n                            'rollup_tolerance': 1e-4,\n                            'velocity_field_generator': 'SteadyVelocityField',\n                            'velocity_field_input': aux_settings['velocity_field_input'],\n                            'rho': 0.0,\n                            'n_time_steps': n_tstep,\n                            'dt': dt}\n\n    settings['DynamicPrescribedCoupled'] = {'structural_solver': 'NonLinearDynamicPrescribedStep',\n                                            'structural_solver_settings': settings['NonLinearDynamicPrescribedStep'],\n                                            'aero_solver': 'StepUvlm',\n                                            'aero_solver_settings': settings['StepUvlm'],\n                                            'fsi_substeps': 20000,\n                                            'fsi_tolerance': 1e-9,\n                                            'relaxation_factor': 0,\n                                            'minimum_steps': 1,\n                                            'relaxation_steps': 150,\n                                            'final_relaxation_factor': 0.0,\n                                            'n_time_steps': n_tstep,\n                                            'dt': dt,\n                                            'postprocessors': ['BeamPlot', 'AerogridPlot'],\n                                            'postprocessors_settings': {'BeamPlot': settings['BeamPlot'],\n                                                                        'AerogridPlot': settings['AerogridPlot']}}\n\n    settings['Modal'] = {'include_rbm': 'on',\n                         'NumLambda': 10000,\n                         'num_steps': 1,\n                         'print_matrices': 'on'}\n\n    import configobj\n    config = configobj.ConfigObj()\n    config.filename = file_name\n    for k, v in settings.items():\n        config[k] = v\n    config.write()\n\n\n# run everything\nclean_test_files()\ngenerate_fem_file(route, case_name, num_elem, num_node_elem)\ngenerate_aero_file()\ngenerate_dyn_file()\ngenerate_solver_file()\n\ncout.cout_wrap(\n    'Reference for validation: \"Rotary wing structural dynamics and aeroelasticity\", R.L. Bielawa. AIAA education series. Second edition',\n    1)\n"
  },
  {
    "path": "tests/xbeam/test_xbeam.py",
    "content": "import numpy as np\nimport importlib\nimport unittest\nimport os\nimport glob\nimport shutil\n\n\nclass TestGeradinXbeam(unittest.TestCase):\n    \"\"\"\n    Tests the xbeam library for the geradin clamped beam\n    Validation values taken from\n    Simpson, R.J. and Palacios, R., 2013.\n    Numerical aspects of nonlinear flexible aircraft flight dynamics modeling.\n    In 54th AIAA/ASME/ASCE/AHS/ASC Structures, Structural Dynamics, and Materials Conference (p. 1634).\n    \"\"\"\n\n    @classmethod\n    def setUpClass(cls):\n        # run all the cases generators\n        case = 'geradin'\n        mod = importlib.import_module('tests.xbeam.' + case + '.generate_' + case)\n\n    def test_geradin(self):\n        import sharpy.sharpy_main\n        # suppress screen output\n        solver_path = os.path.abspath(os.path.dirname(os.path.realpath(__file__)) + '/geradin/geradin.sharpy')\n        sharpy.sharpy_main.main(['', solver_path])\n\n        # read output and compare\n        output_path = os.path.dirname(solver_path) + '/output/geradin/WriteVariablesTime/'\n        # pos_def\n        pos_data = np.atleast_2d(np.genfromtxt(output_path + 'struct_pos_node-1.dat'))\n        self.assertAlmostEqual(pos_data[0, 3], -2.159, 2)\n        self.assertAlmostEqual(5.0 - pos_data[0, 1], 0.596, 3)\n        # psi_def\n        psi_data = np.atleast_2d(np.genfromtxt(output_path + 'struct_psi_node-1.dat'))\n        self.assertAlmostEqual(psi_data[-1, 2], 0.6720, 3)\n\n    def tearDown(self):\n        solver_path = os.path.abspath(os.path.dirname(os.path.realpath(__file__)) + '/geradin/')\n        files_to_delete = list()\n        extensions = ('*.txt', '*.h5', '*.sharpy')\n        for f in extensions:\n            files_to_delete.extend(glob.glob(solver_path + '/' + f))\n\n        for f in files_to_delete:\n            try:\n                os.remove(f)\n            except FileNotFoundError:\n                pass\n\n        try:\n            shutil.rmtree(solver_path + '/output')\n        except FileNotFoundError:\n            pass\n"
  },
  {
    "path": "utils/docker/bashrc",
    "content": "# .bashrc\n\n# User specific aliases and functions\n\nalias rm='rm -i'\nalias cp='cp -i'\nalias mv='mv -i'\n\n# Source global definitions\nif [ -f /etc/bashrc ]; then\n        . /etc/bashrc\nfi\n\n# >>> conda initialize >>>\n# !! Contents within this block are managed by 'conda init' !!\n__conda_setup=\"$('/miniconda3/bin/conda' 'shell.bash' 'hook' 2> /dev/null)\"\nif [ $? -eq 0 ]; then\n    eval \"$__conda_setup\"\nelse\n    if [ -f \"/miniconda3/etc/profile.d/conda.sh\" ]; then\n        . \"/miniconda3/etc/profile.d/conda.sh\"\n    else\n        export PATH=\"/miniconda3/bin:$PATH\"\n    fi\nfi\nunset __conda_setup\n# <<< conda initialize <<<\n\nconda activate sharpy\n\n# custom prompt\nPS1=\"SHARPy> \"\n\necho \"=======================================================================\"\necho \"Welcome to the Docker image of SHARPy\"\necho \"SHARPy is located in /sharpy_dir/ and the\"\necho \"environment is already set up!\"\necho \"Copyright Imperial College London. Released under BSD 3-Clause license.\"\necho \"=======================================================================\"\n\n"
  },
  {
    "path": "utils/environment.yml",
    "content": "name: sharpy\nchannels:\n  - conda-forge\n  - defaults\ndependencies:\n  - asn1crypto>=1.2.0      \n  - colorama>=0.4.1        \n  - control>=0.8.4         \n  - dill>=0.3.1.1          \n  - h5py>=2.9.0            \n  - jupyterlab>=1.2.3      \n  - lxml>=4.4.1\n  - nbsphinx>=0.4.3        \n  - pandas>=0.25.3         \n  - pyOpenSSL>=19.0.0      \n  - PySocks>=1.7.1         \n  - PyYAML>=5.1.2\n  - recommonmark>=0.6.0\n  - scipy>=1.11.4,<1.12\n  - slycot>=0.4.0\n  - sphinx_rtd_theme>=0.4.3\n  - wheel>=0.33.6          \n  - xlrd>=1.2.0            \n  - python=3.10\n  - openpyxl>=3.0.10\n  - cmake>=3.19.0\n"
  }
]